././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9894764 pychess-1.0.5/0000755000175100001770000000000014614030425012577 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/ARTISTS0000644000175100001770000000213714614030313013652 0ustar00runnerdockerLogo, icons: Karola Kreńskiego Thomas Dybdahl Ahle Max Froumentin Piece sets: Alastair Scott http://www.enpassant.dk/chess/fonteng.htm Armando H. Marroquin http://www.enpassant.dk/chess/fonteng.htm Colin Burnett http://en.wikipedia.org/wiki/User:Cburnett/GFDL_images/Chess Eran Karu / Ben Van Vlierden http://www.benvanvlierden.nl/ Eric Bentzen http://www.enpassant.dk/chess/fonteng.htm Felix Kling https://github.com/ornicar/lila/files/1177425/Merida15.zip James Kilfiger http://sites.google.com/site/jameskilfiger/ Klaus Wolf http://www.enpassant.dk/chess/fonteng.htm Maurizio Monge https://poisson.phc.dm.unipi.it/~monge/ Matthieu Leschemelle http://www.enpassant.dk/chess/fonteng.htm Peter Wong http://www.virtualpieces.net/ Peter Thomson https://github.com/cajone James A. Kessler https://userstyles.org/styles/163429/leipzig-for-lichess Kosal Sen https://www.philatype.com Sounds: Bidgee http://commons.wikimedia.org/wiki/File:Activated_fire_alarm_%28sound%29.ogg Gabriel Araujo https://freesound.org/people/GabrielAraujo/sounds/242501/ Background photo: Beáta Bajusz ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/AUTHORS0000644000175100001770000000041414614030313013642 0ustar00runnerdockerChristopher King Daniel Malmer ecrucru John Cheetham Jonas Thiem Justin Blanchard Leonardo Gregianin Matthew Gatto Norbert Fabritius Peter Thomson Pierre Boulenguez Sebastian Pipping Tamás Bajusz Thijs Vermeir Thomas Dybdahl Ahle Wojciech Halicki-Piszko Zach Burnaby ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/DOCUMENTERS0000644000175100001770000000007614614030313014311 0ustar00runnerdockerPeter Thomson Tamás Bajusz Thomas Dybdahl Ahle Thijs Vermeir ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/INSTALL0000644000175100001770000000561414614030313013632 0ustar00runnerdockerPyChess does not have to be compiled/installed to run. To run execute the following in this directory: $ ./pychess To install system wide run following as root # python3 setup.py install To see other install options/formats: $ python3 setup.py --help-commands To run the pychess engine in text based mode $ PYTHONPATH=lib/ python3 lib/pychess/Players/PyChess.py To run unit tests for pychess: cd testing $ ./run3 run_tests.py -------------------------------------- Developers shoud install some linters: pip install flake8 pip install pep8-naming flake8 --install-hook=git git config flake8.strict true ------------------------------- PyChess learning modules need stockfish to be installed ------------------------------- Dependencies for Ubuntu/Debian: stockfish gnome-icon-theme python3 python3-cairo python3-gi python3-gi-cairo python3-sqlalchemy python3-pexpect python3-psutil python3-websockets gobject-introspection gir1.2-glib-2.0 gir1.2-gtk-3.0 gir1.2-pango-1.0 gir1.2-rsvg-2.0 gir1.2-gdkpixbuf-2.0 gir1.2-gtksource-3.0 gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0 (If you have no sound in pychess try to install gstreamer1.0-pulseaudio) (Creating .rpm packages needs rpm, creating .deb needs python3-stdeb) -------------------------------------------- Dependencies for CentOS/RHEL7 and Fedora 20: stockfish python3 python3-gobject python3-cairo gobject-introspection glib2 gtk3 pango gdk-pixbuf2 gtksourceview3 gstreamer1 gstreamer1-plugins-base python3-sqlalchemy python3-pexpect python3-psutil python3-websockets ---------------------- Dependencies for Arch: stockfish python python-gobject python-cairo python-sqlalchemy python-pexpect python-psutil python-websockets gobject-introspection glib2 gtk3 pango gdk-pixbuf2 gtksourceview3 gstreamer gst-plugins-base ------------------------- Dependencies for 64bit Python 3.8.x on Windows: Go to https://msys2.github.io/ and download the x86_64 installer In C:\msys64\mingw64.exe terminal run: pacman -S mingw-w64-x86_64-python mingw-w64-x86_64-python-cairo mingw-w64-x86_64-gobject-introspection mingw-w64-x86_64-libffi pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtksourceview3 mingw-w64-x86_64-freetype pacman -S mingw-w64-x86_64-python-sqlalchemy mingw-w64-x86_64-python-pexpect mingw-w64-x86_64-python-psutil pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-python-pip git pip install websockets In msys64 console window run: python ./pychess To create .msi installer: pacman -S mingw-w64-x86_64-python-cx_Freeze # You may need this on licalized Windows unless cx_Freeze will fail export LC_ALL=C python setup.py bdist_msi ------------------------- Dependencies for macOS: Tested on Catalina and Python 3.7.2 1. brew install brew install pygobject3 gtk+3 brew install gst-python brew install gtksourceview3 brew install librsvg # (optional) brew install gettext 2. pip install see requirements.txt ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/LICENSE0000644000175100001770000010451314614030313013604 0ustar00runnerdocker GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/MANIFEST.in0000644000175100001770000000120314614030313014325 0ustar00runnerdockerinclude glade/*.glade glade/background.jpg glade/*.png glade/*.svg glade/16x16/*.png glade/48x48/*.png flags/*.png boards/*.png recursive-include pieces * include README.md AUTHORS ARTISTS DOCUMENTERS LICENSE INSTALL TRANSLATORS include sounds/*.ogg include learn/lectures/*.txt learn/lessons/*.pgn learn/lessons/*.sqlite learn/puzzles/*.pgn learn/puzzles/*.sqlite learn/puzzles/*.olv include manpages/pychess.1.gz include gtksourceview-3.0/language-specs/pgn.lang include pychess_book.bin eco.db pgn2ecodb.py create_theme_preview.py include pychess.desktop pychess.svg pychess.png pychess.metainfo.xml pychess.xml recursive-include lang *.po ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9894764 pychess-1.0.5/PKG-INFO0000644000175100001770000000546414614030425013705 0ustar00runnerdockerMetadata-Version: 2.1 Name: pychess Version: 1.0.5 Summary: Chess client Home-page: https://pychess.github.io/ Author: Pychess team Author-email: pychess-people@googlegroups.com Maintainer: Thomas Dybdahl Ahle License: GPL3 Download-URL: https://github.com/pychess/pychess/releases Keywords: python gtk chess xboard gnuchess game pgn epd board linux Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: X11 Applications :: GTK Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Topic :: Games/Entertainment :: Board Games Requires-Python: >=3.8 Provides-Extra: gbulb License-File: LICENSE License-File: AUTHORS PyChess is a chess client for playing and analyzing chess games. It is intended to be usable both for those totally new to chess as well as advanced users who want to use a computer to further enhance their play. PyChess has a builtin python chess engine and auto-detects most popular chess engines (Stockfish, Rybka, Houdini, Shredder, GNU Chess, Crafty, Fruit, and many more). These engines are available as opponents, and are used to provide hints and analysis. PyChess also shows analysis from opening books and Gaviota end-game tablebases. When you get sick of playing computer players you can login to FICS (the Free Internet Chess Server) and play against people all over the world. PyChess has a built-in Timeseal client, so you won't lose clock time during a game due to lag. PyChess also has pre-move support, which means you can make (or start making) a move before your opponent has made their move. PyChess has many other features including: - CECP and UCI chess engine support with customizable engine configurations - Polyglot opening book support - Hint and Spy move arrows - Hint, Score, and Annotation panels - Play and analyze games in separate game tabs - 18 chess variants including Chess960, Suicide, Crazyhouse, Shuffle, Losers, Piece Odds, and Atomic - Reads and writes PGN, EPD and FEN chess file formats - Undo and pause chess games - Move animation in games - Drag and drop chess files - Optional game move and event sounds - Chess piece themes with 40 built-in piece themes - Legal move highlighting - Direct copy+paste pgn game input via Enter Game Notation open-game dialog - Internationalised text and Figurine Algebraic Notation (FAN) support - Translated into 38 languages (languages with +5% strings translated) - Easy to use and intuitive look and feel ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/README.md0000644000175100001770000000712214614030313014054 0ustar00runnerdocker[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit) [![Python-CI](https://github.com/pychess/pychess/actions/workflows/run-tests.yml/badge.svg)](https://github.com/pychess/pychess/actions/workflows/run-tests.yml) [![codecov](https://codecov.io/gh/pychess/pychess/branch/master/graph/badge.svg)](https://codecov.io/gh/pychess/pychess) [![Documentation Status](https://readthedocs.org/projects/pychess/badge/?version=latest)](http://pychess.readthedocs.org/en/latest/?badge=latest) # PyChess - A Free Chess Client for Linux/Windows Welcome to PyChess, a free and feature-rich chess client designed for Linux and Windows platforms. Whether you're a beginner looking for a quick game or an advanced player seeking to enhance your skills, PyChess has you covered. ## About PyChess PyChess is a GTK chess client developed primarily for GNOME but compatible with various Linux desktop environments. The entire PyChess codebase, from the user interface to the chess engine, is written in Python and released under the GNU Public License. ## Goals of PyChess Provide an advanced chess client for Linux following the GNOME Human Interface Guidelines. Offer a user-friendly interface suitable for both beginners and experienced players. Allow users to play against the computer, find the best moves with Hint Mode, and access a range of chess engines. ## Features PyChess boasts a wide array of features to enhance your chess experience: * Support for UCI and CECP chess engines with 8 different difficulty levels. * Built-in Python chess engine. * Online play on FICS (Free Internet Chess Server) with Timeseal support. * Online play on ICC (Internet Chess Club) with timestamp support. * Resizable chess board, "pre-drag" support, move and capture sounds, and animations. * Compatibility with PGN, EPD, and FEN chess file formats. * Undo, pause, and resume games. * Various chess variants, including Atomic, Crazyhouse, Fischer Random (Chess 960), and more. * Built-in opening book. * Hint Mode arrows indicating the best move based on the chosen analysis engine. * Compliance with the GNOME Human Interface Guidelines. ## Getting Started ### Installation To install PyChess, follow these steps: * Visit the PyChess Download Page on GitHub. * Download the latest release suitable for your platform (Linux or Windows). * Follow the installation instructions provided for your specific operating system. ### Running PyChess Once installed, you can run PyChess as follows: * Linux: Launch PyChess from your application menu or execute pychess in the terminal. * Windows: Double-click the PyChess executable. ### Playing Chess * To play a game against the computer, select "New Game" and configure the options as desired. * For online play, you can log in to FICS or ICC and enjoy games with players from around the world. ## Community and Support * Visit the [PyChess Project Homepage](https://pychess.github.io/) for project updates and news. * Contribute to translations on [Transifex](https://www.transifex.com/projects/p/pychess/). * Join the [PyChess Mailing List](http://groups.google.com/group/pychess-people) to connect with other PyChess enthusiasts. * Engage in real-time discussions on the [PyChess Discord Chat](https://discord.gg/aPs8RKr). ## Contributions PyChess is an open-source project, and contributions are welcome! Whether you want to improve the code, translate the software, or help with documentation, your contributions are valued. ## License PyChess is released under the GNU Public License. For more details, refer to the project's License Information. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/TRANSLATORS0000644000175100001770000001015614614030313014335 0ustar00runnerdocker[af] Afrikaans Thomas Fogwill [ar] Arabic Aymen AlSalem صقر بن عبدالله [az] Azerbaijani Elxan İsmayılov Emin Mastizadeh [bg] Bulgarian B.U.S.T.T.E.R. Daniel Stoyanov svilborg [bn] Bengali Kaustav Das Modak Scio [br] Breton Ronan Le Déroff [ca] Catalan Norbux [cs] Czech Jakub Žáček Jan Tojnar Konki Kuvaly [LCT] [da] Danish GonzoDark Thomas Dybdahl Ahle [de] German Cyron Dennis Baudys Keruskerfuerst Mario Fuest Martin S. Nils Naumann Norbert Fabritius Philipp Enoeckl Sascha Frömmel Sascha K. B. Thomas Dybdahl Ahle Yarin Kaul [el] Greek Athanasia Tziola Edward Karavakis Leonardo Gregianin Nick Agianniotis Vassilis attikon [en_CA] English (Canada) Dan Klassen [en_GB] English (United Kingdom) Aaron Zeng [es] Spanish Felipe Morales Fitoschido Gus Ivan Juanes (Kerberos) Jorge González Joshua Nobles JoséP1983 Leonardo Gregianin Manuel Kaufmann NessaGP Paco Molinero Perberos Roberto Barbé Thomas Dybdahl Ahle skarevoluti starmaker [et] Estonian gert7 [eu] Basque Leonardo Gregianin [fa] Persian Artin [fi] Finnish Heikki Kulhia Jouni Mettala Lartza Taneli Nurmenniemi [fr] French Belenyx Bodinux Cyriaque Daniel U. Thibault ElseSystem Eric Bkr Guillaume Lemaître Jofs Abbes Maxime Nicolas NOEL Patrick Fiquet Phnx Pierre Rudloff Rémi Duclos Thibault Févry Thomas Dybdahl Ahle Thomas Grim baptiste Rajaut ddavout goofy khaneboubi mitsurugi reminoushka royto stephane_plop [ga] Irish Seanan [gl] Galician Leonardo Gregianin Manuel A. Vázquez Diz Miguel Anxo Bouzada NessaGP [he] Hebrew Leonardo Gregianin Tal Einat [hi] Hindi Lakshay Pushkarna Leonardo Gregianin [hu] Hungarian Richard Somlói Thomas Dybdahl Ahle [id] Indonesian rotyyu [is] Icelandic Rúnar Freyr Þorsteinsson [it] Italian Aldo Latino Clasprea Daniele Lucarelli Edoardo Mercone Mauro Batini Milo Casagrande Stefano Maggiolo Thomas Dybdahl Ahle Weldzar _hilbert_ ltlollo reto ambrosini simone.sandri [ja] Japanese Leonardo Gregianin [jbo] Lojban Qantourisc [jv] Javanese Arief Setiadi Wibowo [ko] Korean Para [ku] Kurdish Omer Ensari [nb] Norwegian Bokmal Marstein Monjako Ole Christian Norum Tom Eriksen [nl] Dutch Jan Willems Rachid Wouter Stomp megabyte rob [oc] Occitan (post 1500) Cédric VALMARY (Tot en òc) [pl] Polish Krzysztof Wittek Leonardo Gregianin Marcin Wolak Merdyn Michał Trzebiatowski Thomas Dybdahl Ahle Wojtek Jamrozy qoqosz [pt] Portuguese Dark_Webster David Gomes Leonardo Gregianin Luis Reis Nuno Messeder Ferreira Tiago Silva [pt_BR] Brazilian Portuguese Cristiano Nunes George S. Silva (Zathara) Raphael Ottoni Thomas Dybdahl Ahle golfinho [ro] Romanian Alexandru Moșoi Coman Mihai Ionuț Jula [ru] Russian Alexandre Prokoudine Alexey Denisov Andrey Krivko Ivan Kliouchenkov Leonardo Gregianin Roman A. aka BasicXP Sergey Mastykov Thomas Dybdahl Ahle ssergeje [si] Sinhalese Samith Sandanayake [sk] Slovak DAG Software Miroslav Vojtuš Tomáš Hledík pe3k [sl] Slovenian Igor2x Klemen Košir [sv] Swedish Bajusz Tamás Calle Mikael Olofsson [tr] Turkish ANIL KARDEŞ Baris Akkurt Hamit Selahattin Naiboğlu Mert Bozkurt Selim Sercan Suerkan denz hasan k ryukun [vi] Vietnamese Nguyen Quang Chien Tran Duc Loi [zh_CN] Chinese (Simplified) Gavin Huang Leonardo Gregianin Ryan Li mike2718 冯超 [zu] Zulu Xolani1990 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.7774777 pychess-1.0.5/boards/0000755000175100001770000000000014614030425014051 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/aluminium_d.png0000644000175100001770000004675614614030313017100 0ustar00runnerdockerPNG  IHDR^PLTE`j`uU`ujjUuԀjʀuu`j߀ꀵJUʊU`UU`juuʕ`uꀵԕuʊߟjԕߊ߀`jԀJjuԟujuԊUj@JޓGLIDATx<z:аıIt~38Ał !\@,*%VaLײjB {ۈ!DTwBy]bg֏/Mimv?;N]Ydkɾ/N_qT~ lE3(o+1"|G{5'ag´uop͏O7D2mP=}]HWb}p  8"z,B(ւÌ"+(p`fq]ƯQ֢t܍yy_N%i^ED k㿐2HK".TAPE"`0ew'/-p*y꙽g|=M3-5gӵdqP.XGq"|* YSJ]YU.pTPۮwi^M-}Mg:lgWOp:ǝ3K{aA!QСG1k-eQmE,Ee)LP 9S96קN5-2v_;ߐߝ;;5ut)ko@!,PŠ ʰ9UvCFqL08 קuM9u|8Sej .K$y: @lѢ0hL(+ U} 6K!8'Yi{gٽJӻL-@)'w'T-cUN8BQjJȠ3uJI *e}k3L#i+K%(x/hn.pA6X_Jf 1Io3#]2˒'e3ˮ»Sw$h!" v˃hBБ:I1<~̏G;~v"86 tTْabz57D>[<$`BjCF@ ܅MaF1cLm=V9|UUYzI1~ > C@W!C<oHK0tjɻ0 IN\޸{i i=]*{NEm` L͢/O h?FI]r!is{G yӄpI'ۣ#B8ut,AU65bϊd8"7̒Z8k[5=k0@HԑЮ،L\v Dܻ낰2ݝ#W> *}䝾ls8}@e{A%VCc9(t ]i;RȖh8t&$j 5@H wc7 ɐ ?~ܚa^|A<db!)VEMO^U;U~h i? BBwPtpԚBjil] BmX h&f_s h߿ŢC`t{<.Oʯ*ZY{+My@:JpNtBj'&D }[ Dw8VW͙,]Z3e)b۵ct14FԐD4s @m #eGP;PVs/Wz&~:V.j֝"c\0F ˂.у@͕BtBGn$0I435D \ NOZmULS\fG|$~yp@iYnyp`'V h 7ǟe‰%Z+sNӯ{f• VzmY^c9ۮ5. O"qoGWkǑ[nDfрYw[C tZ'(RxnޯVuZ˺qt^d.IID\!7mS83O39ZfD.k=˿D;>.ʦ`1k?qN˾{5m+y@6r$1H](>x@ܐq!Սf@6"5'@i<ģtYMargyom<^kb+.!$S7#2e#DB&?*oH 9 :țM8Jb|x|-,YT]^dc/إ1DMMw6==0q}ݰN;A |y VHH;vyO"{O # gW50bw&b˙# AYUϜY}j=Ijyu U/٬;I@]A #FBtA*a@t߾?=.;76 b7Dx ͵&+Y\嵷><3].^$dIn9C`u!tܥ#K;@ ľ /Cٍ%IwYDW>zmN:sԬ\If˾o>?KX2vMn7M睔7 3oG~cr $j4~FJHKrWQZƹYx@d& חh/F;5d>j陓Yvwϧ2 MF5jXSAťutLp+0=Mj+`v$-}N8f{jޝ]f۟_y>ߵcE`)^ " ڵHښX>FNv=fFuUEMd&sL{tPt8U+ވe\%weS@L%4ysvRͫw30kz,bWF.kbXp]RLE U2+;;SowfCr9IX0=0{k c~g7=oa0"OvP4ɗK^U=XQ͗* 4gw ޤgU+NI i&'drzY83)<ϻข2ǿ2˂tsI14zU:G`WqY9rp9lSc>9#? 3 ~x?%ɒY1 ɬ %1d +1bha&wZd3c)A]+o2p3ȏX+օO{gpKMɋ| sVW95|k ̼t52CrX&-tWjwrmA&l}gz=kax\纔\5K {/y͔++p,0@޸ɬԮ=as*Ij/Lrfj }R*YFLkeU{:{8_Ik=h"lpl**Ep40ÝbeI̔$6?ӡy&95g9[:{{Oߪ^~=mtg<$$kx]gJ+왤:m5Wށ6WzSpɘEsS~N`'|7gܳ#=dL"¯~ر.} ey XyׯYs\.UFs+4~- ̓ܓdl#C;$=t`HxCK es/yǯ;P@ Bk$!fz9g$=]y<4 ߦ1v= 1ҬY4,rF;+UX\n>=Y=[AR(͟rOgfugK>տន{nMkIdD3_}^3gCεmʙnv 业xCPC.4`fXUf;Q.IC'w#9 c\wd(pZG2YP!;TlՇ43(NgoT1LzKo7+xo\EƤE;c/$x p3 Iױ;cLI h O.tcYydz=gs+! AD<1x[l "1BbHt,.R$0Ki0suW,l 6MPXVrf_X_rIVO*^ ^b"dc5"2~ď$^+z j0u =!`'BM~fƅ “oG A9sψzx`\xy`#IcRTiA` 3g\b&q]p Μmathr]:j-&-grZhv7a#WTy +ȟ9IUq=-f |  0e1oPA[]\n7ho}A#(4_gxD+\ Vؖ|z@I1XV|&D⺭?yΟifT'+󌿎62+F݀s74{M# vlmyE:(mEkG}hܰ$m< @&s*߄xlb @ lyJx1hàb0$#Eez@]o/_@\YDX{'fh EE@jLNO@ )~~\t M{]gٺS 1x nyֽjank}9 'BNJN %'iU9ڜ=pKVkԝ)όOkj:ՇrK[>猖JX\x2e]X\\OPވdP2A\DOMQ V2krv9 tf!}`A&i&GsR+x{˝sNT= GwX|J^+oo,cr߮؉ Rc,ǭi!; Vt~Ϟ.%Gn`  ߳r=}  _A ƍW_A))ȫ$"n n):.^ չ,2fwbp@w>б,Q83_~t_DW0z޸+W爕!@W"HgP!ᕋ1D5#s&֞yr˴DƣQXJ hKy[^/\_q}/ Ufӏ#q~ Likk(~O$sO&""j)j:`a5sUTLCDvD{sb_?g2I~jwb>sdj K-48nVz;a̬* zgBSPHSwq +R7HkxL~<{7d1k&_pvCFz#MlA&Г3wbA2'{6FXΛA@}}I/..$⊾\ۉz (K^ـ\0#r| /$ tS5` +־+?P*3swWࣧsA_H 2.r $\9iȴpWQo ڰ_47w)Elt:{4yNݵq{N{yVB/lƍ}{ gR$ `Yn> nTwC9ښIj'l_&e|Aʸ5tf.2/ I^_@;"ys&s_KdȀJ If( gdޒA,M}lF r!". H\<-"z~Z߭/9\njO Ѫ~UHؒ %|ǩL XDJG?fj? !uC0*ϝ|@XN L g`݂r)=g S!( πg8uIx{$do=܉^ GwR yI=g|ِ$UVvF IG *&aeؠXB+6H:_-F*Ŷq@7A_-^h\]2DkI17Hūش,jY"bi~#w6/Ⱥp6c#t!i$$_N1k^MIXd)LQ_4XD8&K6ōB+$`#yj Ϲ [oeI3n y#T"2GLU ON\?m@P,tNA3ҬI oh7n?uڏ(ayHu+9" |_j%a* J ~8/^44&@J.'`wuϕi5.>3G:v˧[Ȁ VZ{Cظ$@IA:MnZ@$5mk@ݶ}hFO g4bν% /DpA`<H.\ 0y$9f0 ׾.vȋL¸|}!ЈXeS}ƍo)ezfc6cgJϝ[>J!@1רp3"0n y1~lA΅$xny5nBj~,!TFW{4;g2^Ani+ҏ1dBx@4U+1~nd&"yY \Ѣ5"Y\@i*16/L2- 23RsO͖4L M 0lQn%..̧kKL"HvW`4q/Efv&ј4eQImfٖEt[T0loȂ"HdG]?yyAbi,8*!<D#]0]XCD$_r]1 D$ XI$$PA pVr(̩=[eFg<1[R<]c0%g+BsZ`\]&"nJre IyC\@aDDf>ٓS$p z=5;5ٟsU6X mr$} $y݆3+W2n/D$y\hL9/xI]3 (\q-ʝc`z< t3 Q9j#8??ZQ!Za1d%Lj<'KI y+s0h[Z,A3:cy;slC'3Ӟ{8-O\0( 9W0K8"UWxN͢C%$ U`+PudJ|>5oP_[#쳽rZϱl$^QɋW7&F `hgD H`}G RJ0idOIi4ASoͦeAA?oQVΞ9+_ E""/"$L(3&CDf*.{"P4-Tq1cәG~zdގ<۴( ?Buo@In3cW>W~5vBEox\$h#z2]Q&$  4 #f`oNnl5 [ϟw wnSkjg(#\eȈuq!VE :+)2`B3"PCXPHU}CNRB`.mo/^3u D\`,VƺdS dd`dM(LaT0)v!HbG{灳RF%}&<6@!RN5ZIbkֺz@ 3 I\Pf`BD:*lI^?gT~yfF"=>;uvkkϚY5@U  o7[t4P4e<>1K,k OyJ0JI.R‘g(> gRo$淋turTI'Dd] x@bpl:HaO `H)du>=iC~qHMbf(EGLz& v`q_x!I.2d'V,Ld*lE_eЊ*4eKYQ?+ N씵C}L(Iv+JdLfA YZ=a.BZˬv_`YWUy{r-XyI 8wϞQNMI3_z =R\.K$IZ7tV\b*ktQDj dұUiʇm"L$TؽS{;5[{V_ Yh}@]gW`N"o,'Z"+bt"Az-^KI{I$Iy0x瞹7A.X:9́ wit[$m{08"g kee*X"4$VI,N8HZ.>srG=?9&B6yyĪ@R܀F+0_̪FY̧(gV:D6^E D h"9 !Y:~xaI{k{NJg+;8(t,*"bY3Ys:]EfY(2@;hfEE%)<q|*f(0ZjXǧ,NGRo$jϟ`4G+@rIԢ]N,SM@.ɀa"M5 $ ^赝?~?ڍndL9?'!=g%L$XkwxpfѝhI@HѳAAp+@NH}/0@!&u}ޣҮ٧Uwrk(`՟/?n9V|-TWkr&H&Ȅ\9t 3I"F%2@v̑wj-%ȍ)IO}K<ҋJ,ކ*02WUOXL)J).-KD;*H'{@4g{om8S:ϬWifFw4DMA),͟hZ+y^+ȵ߽*`]`n뉯N0x.G Ic*Ǒ%8pў\{B6ED2{wpr2bqݐzdBD.rE\ )w,[hdU9UC*}jvi3ϨwJJP߸cx矹I<ۼsYsI"L9kD 8=¸jVbu?]t}ԩ&1oYq|.?nT!=.v/'gMWR*c1c%%ˮ `KIg 4\5S:k?5́lP(NRj QL؍@jduugNncsQc%mnʆHn EPLZ.ԯd9,2p KV=)*e`1#,5z^{#<66\ mN|SzBR+(Z+j\I7#iמ08=K(qBYUYBDu xdVvgwlen j lm9wӌ e̯m#oN/feQ#EcQzs_)B/U71;sfU9/@΅:X^DPFj,F9i`,D.¾k!$2K : @F+%m*52`ѩq{^Kc>٭2p{4l^Fvvlzg/^%4 ,`$h͌ ~T>H g}\#1GK>[D9кRcȭBq>s:q晽EضL?mo 6|1>w-ǛYtCLNCU蛓U :r*xf,$IkW؇`p\GGhEg5^m\yk3fiն?C R4m nF;HU ЖFErR*QF!GBg5Q]MsdzdMqvOImvi?r|uvy\*z3bnVp(SVAptp` 3#D`N4P)G@@ux#з=S]̼ggb宊q|ngzɗ*ZO(`"X 7m0X8|rM_$XqF`+9[d0>@wW&J<Е_n31Uu{?$ isRi跶,<2ˁ ~%䈢piz` 4j7fz2тUffD?N]!nN_Uz rdRt)D\_mF4IB @~uМ-sGO(JN[9q $~wH/]&Vp̶hH?8iU6GŽsTD(+V:1&A`̬[h䘣ӹ;+U} U$ /aof4sZ\-ӻ#$AD@&8lAplP;(1$$]9@#10Zg& ci[{v̪ճ7%~2[ ȝn !WtFO Bp8P$}SށMNO*B,21J0JZ@NL1d\R>^%f$wۗ ̴av!gJF)n*|GMs#$Y'Hz0GZ}Fj"kʭ(TdNJWQsQzwoa?@v`|3rvh=Ӌ.6* s#05( bIV P8AvJ-uq!&AZc 9,̼>jm6W6H,4n;V҅!L$_Vq!Ღ ʕE&DT*@ ub0|-$9jNsH0D ]o@JY)h>(r|եPD&/TH7lMj?䔫Gu w2HQ$Ur?W%1%=Z"+TtϛTu=+jIf2m>>_/V$@bC4Aa/ʅ y96:IF&D#Qid ( `Y*]Ҕ_f)E3F8m]=a 2\}A@ %J* }];$Ej5hW6`+F`(* JRMm}JB$9Ѕޡx;ubwg^Shk ,EKΧKA+QNVyA2QBUwH=5!}Ȍvl\:l97m"WX!ڜj .1VYrW{ 8 WohR (7G2G;a@2+ED_R3%߂ l']n HcHKS/E^_D@Wvhm`_e&1h`4P̡QN, 5Mȳ ]!ˣΞ=.lX?&=#H[r[p"`FV2*8঎nrOoMne` YQdd3{tϚ]1+[-$V決ܹqUoOrI[N"XI768M$Y 2Yths N@zNMΪjũRVN i%3tu/5&Ab]4(w!$G>@u9;kDP 4y:fw΀}VVwS]xThZe\F;@w/qm7sˢNwfsD\^ݲgu8Ƹ>H:i? z VFd&Ȋ #Lg@(!+sJ]գ%tپ/i]}NmruK>Z l[gEb(Q(RGPs&)Ch :Ř ue+Dv !.ƳemyM+ /!fƒ VBgɷRHjq}  #(XH~AC%PtaBSYY3%e򩭾n7#!?BA3V[o p*ͣ|S^a U$-* $@ PFKtdwHdZ*3ά{Ǚ삔2=uIg2IXZאaS #]P',KNb1~@Ď ;BmPj졐5@_N1CيReg']Hr~΃"!ڭ6\X(u7f@s|ݍB,BP;=9W(,Mƿ2q 4`0$ PXhHpc7BT:*HK4X̠2N%ÃEn}JNe\}ut:ܹm24|Ǻ.|@f\VD.(,ÊŲQ'̌C7 jDEMDY-1 kqgg[YwT4_;`-^+mj\4W- n؊tI@DXxTA.6 u>t.\XE҇& h믻ZZ2j ō~҇/y7s.fՊ5h48$i [7MW{u@Qe${Ge ui}}{OHB(թ 4Zm_nJ·hvBx%^7m0:xKl\P{Wi#H7s; Rw^TXDULZ>ۇ[}ljWeU_[3Qʲʃ0aU04'E _3hUѭp#\0.p#.. E!tK85$ &";vL?ݻdƶ9zv2Q%=%\ǾOg/ьN:@6_nDZVE(٠"p]L| iaq7z@BČ@ـ"*5'ςњˆgZ̊*F:\4m]IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/aluminium_l.png0000644000175100001770000004514714614030313017101 0ustar00runnerdockerPNG  IHDR^oPLTEʿ߿ʿʿ굵ꪪʿʿԿIIDATx4U b8EɔvWԉ@m,&*d@9 / .#MZj96(̥^ޒu.w?pv~gٔm+Q֌YH(lt >))),fM§  DIq]/B -wKݿv[Sv$&uqW)G&*Xwc^b189d=LwYJpZ물ybd]r%kX:v dJ*uu]yZs<^DQs '35Z@VU-q9SZ̓H0 L0QϪRBqbq*JH`儌Znn^98o bȣ׉)2ݶ(cz{YkS GF֙93OAHTn/ ҲWМDbIȻG g^O~U>B.GU˖5qYX^\s`*)r*SB2yu>W{%3dqĔV9L*}03D973p $ 0fL}bqƕJvYh+K9Ȗ*UK0^SVV,^sD"ǪYY>L[.LR,v%5#)ZL3rQ綸?G짽wwOV%ޟ:}<Yt\BF}15s$s2FN |! jf79&uO<9IPs$Rf&80vˆ%2*Kk="պB@ؒk .)V ҃DvvBsΑk"+!*d9_ H&%ʮy}וGmýQ{TeMO\=A9PouC!:2x:2Yׅ0{vaYblEK '8r'RU%!E{im}|{5֘W6lE@ƝRX' `qaa^:7JQf;gSIj@H%qEɑwOm '&c5RF,wqxd7N̂ 9=˼''=k<ۭu|/)rb? ,F}vF t@, U5A)U^?{[9(택>0^?wj_#5CHq#p(eJT{?uSZbQ<*B&@۽w(3QKno'+aR'TKmeZLoxR" `uueRdg-+eP_um&?PK^^^X/ !Qox~ oc3J35YtUZI8Ỉrۖ'yhPs\7S]u؎LtIx֎3zIާwd6Jr8&E*;6vvA>D\;=iAmn}Nk]Yn vҐv@؆+$Ge]\: Dǐ!ashO*ܻf`6P-;bOe7I3Dm)탲NL)ssG3`e+|՜{#9c P׀<3ƼŻ+Q̞Sጆ^1 }vf@®[ܘ#'1MEȼ[y*_r_:=mʄ#С(|HE|v$]HC8"@ޔ윌:c.帵ދLt"D\lah>#00CN)1 aTl0__.Tpᲈ]-1ʼnZ"=S6{_^a49?LBjjxiz U>A’ l Ey( gуو9uv?>(oTDe8tUbRQ =d)8QJUwտGf͝& l) yP#;s̙Ǒ̔4o?Ƒv.#C8XW^wěTLs?2H-}ֱh{8fm {#~H,6&9v Pe$/*!JYV [$S&)]F2kto%&,sE 1NkNڑ2B膯w.hs!}i'%kGr_%46M?LJL;;Y8NCzbnMM|)|y]4Z/4h<8fZwb.a?9|{?*uζ<5x1/l\$ 몵ktN,ʑ-EICꊊ;;$փ }9nY";jذٛ#_56zǐAm~?7N7M4~bBK)>$0C3%U]ˍbΖ-Om%DRiYN9Eȓ'V3զ{~prPJ M;9J,+9 ?z m1߉NaKqLHc>נ\b}z\-qi@cekT ™m+em@dݺ( 5n6x9}r%D lH`T4g&}x@fL&֔,,d1NBKEj: (T %D28eۃd60q8.&=W9 sy2 -N4jꤶ6℅ʙ@&zAo!| q;]\k'Ʌ|JW$J*awfBA* w޶TM{WdAJANʟ3d<3Dq39,P~^ -4LG$VK8r#9b,IVh4 *6,Hv9%Dg}?g-KNl۞mAA[r)?XZdŚl9}']QzeraN s9\-a⪚C. a[HfP8,kĵMةjA׈5jݵ(fb3ehZLGۼvR|PLoySg^.B9Z z:щL^ŻCM0M,䠠JWu}Ӹү0O"4}^2Uoyy^Kp߅D&K{#aphF_iF*m_+q3B{RSBLb>gC$cu"TҘV'4I&h1'D9Ѐ Sy96DN%Nou8*GL;d Fq$nyﯮ,t2 vg}X:ݲR $ 7(!T5k6Ⱥd^-d/l+U)1~e z.F_=;wNQ/!6̽7#Kwf]%SH+10I%yA۰hLq*Iՙt*CǶOQwO}7I|H*V9*4}zw`\匲&B6oeˎ,+^lҳ!UᒵsON-5k BKICF ߝ͉mK@f_gXp2D]ojV<]&: q-.I$n4ܯR V: +S O{sq$gbj"{G]d M<[Z܃tphkGo0_ngZ`J   }!(p 7x6"*MƌSb #.dkp""jf< 8j4|(u=j';`qxr Z6wT%{:۾G f61>|9%/ lV,N|q) HfA[ȄMЛyGrCd:ͮ+ԹP[v<ƮBU_.{Uf&¢u%{] y2a;(Gۦ}͗B(;<>4lIZZKBc?yݠO xN3*ba<ƶH:VAu7P!D B{zأB \}h~j-330ԩ3}HSxp̿a(YaoM.͸9] Fr α%bpOD,>Yf*L_W%2 }SǞ*-ךd<HL.~->{/ {dԜ=^M׉?F?qp)ZXNʂ{2zɲ[N8<G$ 7/bBey= v(Dz簝CY9xb<Ͷ5z:%ɂA(>SzFl7DePm9 */)0N)h;Zf`YOUof¹ ~eX"=k°}O{ !4As {㪠 0k E'8/ =GF,5[1;tV́]D]ݒ{z헶yƝ'=9‰ Yb 2%i3 F"z?{38{C]y!IX⡶d 5n498A8Iֵ DSw ,kb¬ܗ|_唠\{~xo P&sp7/jf8rۖIn['4U#-n~<3g+7IYg],鿞,lU2$;P"8:t3`+J8Uݾh~ 'Xr[5%D.xA]:k2=|xP7`(<~k6[/ n Z"h/NlܷXͬ^YUǕ<  ŀƢ -׮H[*vt88PU_2/LIeБIBp-CΗq`6Q7L1{WhIBv IdoH L )NkEF2,BȎPe>|r %Ve* 8‘0E3* Q6S;vtTc'[>7 .eiq=/5TNaOr 2Bh9NU?vKBl98B-:m5VGy]rbfpi#j#ROt~[:?XX{/_O(GX%Rʴ:ޗT&m $ P0JT4&꫾{kղH <2kJ ̙U-FT9K XN.=څKIn sh=klOnW?RwOzYYFcH!'DŽHs޾nmHv|[F{9)|"!5I 2@b 9{Q%6U1Roa"c.:]Y";5CR_F%yyqW<=N?`崟q;F;\^S)VEs[_=Qr#i/>}]I^"s›^~Jf7k(nت MŪZ,4sĉ:,D1'ݱCP^bfus[qؒCc ͳmu2)>fGq휢O >[|VhE{6PUL3Ք A t\1FQ}m,xQք=o<翞W{ࡇvwnbS䥀vRRMhrg3yA}8)G)Hؤz_֠$tN󀚒Hau@*}X#XSq9==_OLpQqxǰ (ofqt,}CJ }Z~q b!I.<⪨MٴZ_#&/(0EӚ1zFͨU꺊H@yXJv7d(DX?2B&JߖAй_ֿQy.6*}}Ȯ=GBSE91E9.G[~_5! 8l3Paxohku6| 3[HPۆ'b@+U<,ZS*fX!O )bCĔTAjh: d1`X<(60gӻ.ݧef#j[RJ"gJ* Զ4.@axgt_0)/2Q]yJϟ} n.TVyNM4PW-3ck1x͉U) 6$h kv{y8T‹)<_ 8)yaT{wۀztc :!hhjvO>}\?YаPpŋKt}VT1\3"kű@8@dqTgvF2ᄀ4`jm.c⯥ wJG<ߛ~*"xXm57>܄dug 矇Mg>˸Uv]1}Hhh:9Ӭ P]ݤ*tqA D9l\L{q 坚BQvrX!3?HseOPy3TRSӵ83eN_EAhͽ]\G]XG9;؛?n0r' R͡uLь!YւC6 8ds&} ғJ8g/|kao^Mok懌Ɛ"ַ_FDn.04G4q|Bu32,4z>Ec1a1c3: i.䘢$o{1+qLϹ1Mv{ܝ% -}5dMOIˬe1{19eI|#!lX dȳ`vN&֟-xझ?: .qWJ)ګ3 tXq3%ߌsZ EƇRMwp5jH;A"r11Œwҭz9rʫHJ*,^ z,ˠ&g__k=P#ce󼖏j]9 礸urjVBvԪY7Etʙ!ÆD5DMc9~d%ž ެ>(7=B;n X`Yx??_+/LPʺlOQD *: Bq\V_xGc}%>85|d\؀Q%Ia?[߷F{zuVpAyD|<9oV(xUk|K4-:Gnёc,w86y !@e{5l cc_D 9bO  C/J$|v!xyX^p\ŕ6*&)S> J=KC:KKZ OĠX4@:QMe) AOjT}7TZXِhQqC% EL.8Lnpr}j5 g DQ^ e4qzZo20XS.졗t>4.r/o^||i+ "ƆhiȥPܤ#v~j~x,Y? =40}#g:U]縿`[w|-ճ+&dGnEq":*xؚv"_u{ I|͢2#s#Vg-Jv7d0էba 1S{b-ţ7[ `G٨Ƌ=ԭ䅲h:> Vy.uOx{f'ZxĹȄc6=Bt|Yjسܒ+=: =bIޮj,{[d\lY4d ꗄTMH=/=p#^+mMu.* #Of*e-n6.*n09pj1a,uQ]EhXT'$\kyS7DOPU 9SI*I(5 $CʈQDld2EBJrzȩL\MRJG ٿg5 ѩDR ( ?h֦Fnf:?o38.FFsN15Iv\soh,>ě kYK5gw1utOƼ`h4 pZH44DSE\_LU?cN-V)f^%D9?EM!cL3r1XB +6!mtLkP*RVcrw~3IT-:cΡ&M$~2lMOV,tDj-z,T.Q7lD *v&U: M{l &aYE` CC9IE}nI Wn+Mv94Opk |9?=ED%rnw>z2G[2Ib=m:MVG/ rA4g'7e2ixm ̌YY*} ֞=V!ޓtx(~r';;ݾ!f7khls ⷲ{P,ӾhOA=Jf+@ d1f:ҙeE8苁3gO"m ڽKd`߻X>`:#ZAѡf?nyu{Ȕ0ɄqLUe*h!p"F%q~]Ќ^~ؒy0NrJ˾t+R jЖ?lJ_vFٝT\75\]ri?k_9.Cjvyڮ֟n3ƂPui"l˼կɧMCni<5<5a(tu_rW1M#md͛lu.ej6D)_Pg=nIO+B ]}W.oʖ/I*d:P $A;xr6`3@{ ڜyscv:h;"stf9ӃlaBUIx+9Ί zFH'JUy6H W`g Z؁b(G;"k.$3P rDmOXSRƘ{TF.c;lᡜq9Xb,̨A<@r~9z9nbLwi9pˤV\WnyeJr8 I"wِV. ةA=jB6mY]?ۅ?HjgN&L1v5 ]symW_ӉEBĐ%X3/&2zPSղUI)TGہhӊeXIzױD"ϑ bw:$7ďdF ~㌭ߠ zsg\ZW '_RK +qMBtoTwN)OBRW[E^;LvzMc3if0c?&>C#.姀P&<;]2߈2lh0;T.iC;'e:)]S6k$y]g/%rxOdlE S2c`eE0rfm8#.\Z z^ 'aAmXN59A'OOUNC׉)?efH8젤4w'2Kq&3~XCGAB({1:jIoGg:qn+]# ]\p; OD'G|VI=q6D`aq͞f&l yg,!(y(VO!pPI@YTٟ[8If5.O5tZD?FSj! /|V>aD*ZlZiO-m]>]@j|pr17q2K̦4P5 ɫl!`.`j4Ppi--,3oHpۙ dVvto˙D@ZvZ+oZ.hgΤQ 4(.=t0$ГZ˲#x6c_q)6M2&o3l5(S4YL 7'j`HSQl 4w2ڙ_ƞOjF5Z8ӑBSI#FQ2%7_nr9ydWԐ oV+H)<=LԢe½\ @tH8f$ 76-1l1_'Q{UmtƔq+rONߛkwsaecݖ Ԟc{ow!XtˁY!*]פ*O5Dn+p2z.2[?u0P75B/Zf‹8WJwvG;}Ռ FA"eJhJMLwFX⑓ 8(ɒ"9i"&5f ~[8BÕM0Dhz$ҷg V̔<ϯ/#OKG (E:j[z$.VVܫt^Z;{#ɑ6HP5Eqdj6goVOlZjCh+&1i9[K2^l%s-f"F}Ԗi*;# m %5]n[B˪eKj N2ZRIQH0,ZJq'|9SwТ=pcmnw0H/S }]B2,U#l& pnw ,A:$Jn&ب` u$jѶ15@/aFa ٷ.yWc%H@UuںX > fx~k]"vs&2s̠c͢ʼn]ne "QKOĭi_x{}]&x2Ϣ^jbH w'J1:w7J7*cg ѷsҍ(¶>wT 7lq8+8[nEt8 @d_ʯtRUVYaVsPʵmW07|\ MF~QZii3}S9l̃pJ[LDltd|i7sg!q8MjWw)YiX,8 m)Ē*Hʤ%nnk-Yi%^^jۖ^ï)-;ϨH( <j K XW*h =uJG Q[݃I^mZ#>SL(aA<" |iy-j>#Ϝ@;~q@Ʉ 6Q\;N`Vx $UVR-؂ƍhͿF@Ak1*7$DT7@̑ Gb"ed>䅢{K{wX2CswmXJTX__ܚӆEaZ7 AЦ,%8D@6_}Þw}B' pxlHS0[ IsˌA-S%FI ^n] edIv8;zK|aTca| 4HvϜ X~ŞC^VG~ 3M%/̕c' :Wcʃr`%sNh` O4袐x4՛/n}&ŭwp XZ՚m֒rY>kefSr0rrx9P. ~vZrFtw6*l2r,DٵW[8kc-ej^,鶶$3y9~ĊK%6-x6 |{B)8XF;#-Sݵbv+X TsU,\ _Ep_!)` z<q57P`6ЃGZblVK~[)>΀</6K yN,6v4~n ָaWx(?܇ْ }t!*ƹ5ּo\|ZݮahA,9r r !ޢصxog]pH|}a|py$Z;Fc}7-xS}\ڹ̷HF;.I%9CkfyuSj<΋mzΐVti.-SVح[|iއ Myǡt{%MBC8r֖nN^]7A'%u*ù# bo1ʾ 6r}-.aea΃ً `mF4IV[fצe8k;j$&2=$Z׫%zwuӌKgױ[3,F|;5>q /[|߸Ѩ~6^@$tj=V%J6=ІCSS$pyt3wZvUqgMyQvE18~Gdcв$ yY {49n@4& #.H^b ;FYRUTJwطnr~A.'Cm~Vc#N/QsXͦИNaEN`q| $*ޭ%Vps aJp&JLm&\#TL#)Jc;m .\6(bRor?hxJaeӗδ5 W,khC}6 T&iEքtR%J4Vvŷ!ou:Q"֮xGͿL &`VX>iM*q7I[~ ;y&&|%:G^f$HBRbw\+IDߎl=D=j"8d%/ϒ-GORJY'-ܻsR&C{9SfZIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/brazilwood_d.png0000644000175100001770000011771714614030313017250 0ustar00runnerdockerPNG  IHDRzIDATxb՞,ց bC^$4 bmwcqǘnNih1#4aoQq[91c޽`1H+6n!m؀km$˲G2/s޳Z$ ! #Eji֚3 !keVc_ݴ9߅{V.a>%׬`YYp{i+t_NSV kd[8zkJ+ԂtJO H1we4-y`bUDeS{QP crAPY!q#b">. :k[`]LuE3jV\UU{ɶm8փm\gҫ8yq? GLS==v"N VPcӈprI4۾ vA1m߄Q̮fs71ř嗮4Ȕ] s7d頪i]$> < q|zt:b$CĂBx}dö>]"H" #2:Ǎxs#~~MSqjz2Y=A6S&~j*t>:-f= bZFĤYǔ#/qLdL;ɾ7YdBZn l)O"Մ#Kϰ 6Aaz.<*zz;wsNq-R~ o^~"'/ UXY_P>wzSnxͿ0դB/0_vC-3^"OYv(CzIIMcm .ino(զ4eSu1^l j-]*o^Z(m5!lN %2(dOZH)Ae*9ʨiɟm-Ǩ\D ~&˶8IDz\f=CH ʔ[r. *&[:ꓯyxjcc\5Wl$q_Rh1 QJ=5᮶;uGv5J> !][l2Snk~km-,R6$( x4S@MjEmM~G)ܰBh /vOD(BK9XL_H,p ݻsf$ qBx\fL i VkVw ~YFB8B 79CU?A^Yt/::N3Ku gtF+.{  MD.8L<<dDCÉhg\s I|ߩF0|^nkurk)7v4Uqd%cR!Pz D&Qn;44N&B(yBK%#pb P yeOob6v^-C{_RpïC19) s"t bpa)yB>6j ?NWwwcE HT- ^VY|+q%4?! nTɎ\$C6V/Q]oUMUwLjeTHӛxF@|gIYEd6ю4`)LuByŎd1܌l 7xMvfE_ࠐ 6~\4|TBSKX9NJH$M9K!G8ٚ'S9& aW_~ R nч%3^Gd8s;2[$IXؑ$ 6bCѡLD˃)3Ea-)뜉&t[I@a)Fhfp&Faep]dF:CGxnN}&ÏJ5scN(j|M.wrɅi5vXp[+.fń #HIX:0UKtZ);7JCjYqq8ߟ:62/Ȇx2D&V>)R1[ 6$m J`A]@q2ȯB] ڕ+ ?8D2jib4cjr^9?:ۖ=4piw^gq̔M ש~VKd;Iтp:^qU@'&a!\+k! sPmycjw_2-խ@[S%JzJѼH>P39D헅Oljq~943k (9| );%d=L I(3øEQ pCWkTaweNv^xYKH>GĂz`Gޒy9x*~yD0Zc p&89Xw'^qqNXU%7}m;NLnmD$#3e̝f$'H@Ngt pq]JHчiiśŊs[,QFF`'pB0OG~|~ bF Ӽ}ZF^(E sŎv*vq=!|$7}"Si^N Re84uTV5~}0)r[ဿ";(hB$ !ݲ=>=:e;$vRr=([Z#rtR0Hܩ?]yh}B9/T E⨕>pL uq[ N*)+݈j_;FF/֡O HE_%iƫtj}DڇrH'MQʧn`&5trTЫXu:_z/5e4j灭I QC݆P\Q Q|C??ڂW6PFwH"%}:?>ϖ7ObWޮ9q%l7fuO_ (Imf9xʤ"+'mLp!u{߃I | p{rxP/H\?Rqvc5: e$:),+Qzh}u1א,'@ mqcޙo7q'-g~•j&; OREYim$CX3jeB䘒sQm8"O%98} p2aX1̢YAk bԇ܎*vDmB yHb&)ك>9\1%->lȏJ}H9t +Es ؀rI^5>b呜sBJI.`i.-NǤsHJ |/z:N~ 0Vt^)$9@2&$[o2K!= ]cL(hO^~Vdg?xC yJX>$Q 7r]Z4M7:lb;Ӳos-uӆ.r̼SSU 92|y~d Q[O!ssw7`ľ8jh^N[,m^"Rĝ2<} r1e(413g`N)HvJ5B( U@QTؔjMK nQ:hpjfE"g_w/3tWA`!Vzؓ IjJ:((w[̹L5I&]z̕EߓdΞ@PMq WoM =9؅IؼaZiFzxu-6Pqڟs .0)!(7Rd3)벇Z³֔dܺ%DV~i". ʝ֐+P9 , >Ah%pԤy.<ձi8K'h9:$f!k[/5ciܡ$Ar$Nq.V@)"93,cl~[z[&^y w5ud#(m }?TI`0wgSjQ94́F@rٙ&Q^%lպ#ԑ:}#fec>K#O.T ֵb4=Y%%cbfQΧh 9K3GcqpUƲeՇΉYGYҡl@53Ji߿dRYlsώ905/nooIYTaARMx3P/Eh!/>k*dswH6M0d(;\C&xzzb#!%&|xy7n$A\ʒude7imb SuUK۴$.$}4#MYo]D.4{LmTK%+J>Ts';E^H`2t@4,l3/3[7묡^i.d5ưt0v,Fq:)09J.#:<{M?h`)xVֺf^Y3Hǯ~B]p+,+&E?7?kg'cj=J>g<.~ԓI&T{oߐ`Fs՚h,$1 P3c_aH%Gqm@Ԝtqu}$pRFg0pL0TV1bHfE V;LĆ<ϫ}: D烅|eCECy;岭>O;dPOnU3,ɗſoEzCNjn͹'f5<7>1]+_-8!.EU dJ`=P`sxh V1^k 2,{2R:> I6.VK2g3@I'fs {{'?0~kÊxIấ˱5 .3-}C,b3=?=aj8~yiv) PVD`+@͆>d@H3C$6שy;=;Ow Z(('-l]f\}ۭi7Ei@$Yfgqۈd2ʜ#O2, !RJ4(>uC5G:+ t W_ x3eU&ΤL|~tJ"j投B~o4۬s!0ֽ}1\QziBtu!,|HUoMAX$zPt=p]lȾ"R9z`q轼di+(at9mh~ծ:Dz45G0V=1ʜ"c|, 3 {W.+% %6^ޛqu*iaN j5i+$lk4B$xr,&N.ČI I'y)r`M(k-+1_$5K=Dhҋ=rALWñDǢ.f&"[ׁo/ϛ'S<dqr9k~YKz D|olSeM3KSVkDRK eQjj-Wo D8hC%m)r$f`e TK'o)oq;c<2}VplG !6mA05*A{O2L59=K֜De ̌|dCs6)z_<ƈl$W=l%<8$ =<߃ "J,b!rFNJޜ_I38W Mq%S FdC["VV]Z&r7iVHLهYיZkj+ Dzfb$-yYh"gD1R¼.L|B ˖[1B~Gx&'u$F:S6)5ȴYln !@+7=bH6U4'/& OE(3]T jt/=as]i 1w40TR$KŻ[WeYI_x/ x>tw {PfR /a͆4/=lo:-#k u$C2:4||d;}A7k9X6^Slk'{6Zjk.oqSNĕKaO~J܏\ܸ@uqzw &O5Zz#Uԏ1cKC\ZÅ<9Jp Ƣ c_ƍ4RRv:4טcX\GV Nz.HXj$On/Ұ٘]|jjc$dM.ҷ⨥iike,vgelwI=+ o }.n.jF4BVMi*HdRɠ·R#^&.܇M7cnHЕD"}t&C1KMZh },++fmc׸5Yvg| y&2b _y^7QP9"yI=9|YՂβ\;}+m,47b?NRt|5fN Dpxx3ƌ8n' *::DƄݰQ>9d ?LwlVR ώs92ˢQW-9PrK(' y2-'')4.y<[;K3:cB#p[1AF 6lΙ)m|24ƽ(n,Fӷއxsky:1'qjS Nut;R}χXG:jOpPo4J҃3l/.<˥}Y-Onpٜ R3nR0 7>ƻk$gV(6WO,̶9n֋n"]/\?LUI;0KUAׯOU3c0MyбgF"rAEݙӠ=m,lבg Yo֊kdwY,Xi$c:XsrK'W㜫yJhrp*9,W7I4uJ{~v!KDP/G Zxm8ǷTZe Å\bN4?#A= ENLiB]_\N  V$ dRkQfn^Sq+vCzד$ ]'}-B0;U06wcd-9I}OTulY 牄 c^N8@NmR9ũ3u.' NY F 1;0Ȼ^?TYr@$fь D{s]ULXsmX*|#7{?'3hZL:3dmndp ̼qcәDz-9\/ިwpo6ho}Ԁ_f9L*S4n"  w$塺W[)TZеdSPfms 7}c]@%|X'Wu$Bq0ꗧǏ7Q1΁%! 7Vl&c^9zT5%͚q/s6o6J|X=PiO>x&IjDC2$r+H2:vٱ Rs?wv:+'u\PIyMiS!4S~Q CB%5wS%R ]t--b&>&vA:xnXe[{=^)0u42?(9$/H,vb2:v_w gN,Do8/pPs̳`2링Y{!d9Kt&=چ]qPx5"WʞKmǖsfl4WWlmi'e[XYXpWS% q_vSAu9Co ]]I[;gN=%49CE $WiѮQ,0=reb8q^+%F>YBAc5Ile9։mqD/-*ț;m^=#r-݆'_C J~o~7gŚ #*a=H2A$ʴ5kZofe)(9',wfI ʌq ?=AcEO[&1QxHZY7cݥu}3h@<)$4s$~s19b2 <!i纳 ghqш!&K3KmUuZSp\ 2QǪ8 Q"/)6lݒD _"gJ:|wde_CK)x-aj<3S"WхVO"o,l4tKZN#vYQuH{~|+jvm7<[i-O"Ϥ_Y1,*},LʹM6ݣ)o"t|A_PlL# @ A f!!Bm:XIxyMtu%/0^ې tn'DL&uvt[F_yQe:E*IHll0p_ٗs4XއT؊=zii!Lد60pn 8 ӚvwxJI$Y#7K&Э {cI?"PbTjt=?",'i u ^}ز xw :\Wd7{- 4EV Ykx(d4UV'ɯgn BoRA`?5Db?wp[A$Z7;%]v-^鐍N7W =;4fw-5^X$G֯`O˲R! i }!jG a0vpp:ҿL1%M29Js}6{wɘSe 5#ӭě"*[[4r1(Y HÙH:D[)_[Nj' 7nG{iNi?lЀt="N>Ipʛa!VƓHӤOonִy_dΝeپ(G-\^HWJLv7txyX)e( 80|)#HEhD>I(rٙH"R|4P>9j;tqLʗįrK0:1ԻXC9.XA"C>olneL'xRJf&Rj5f0aml<./g7㧞YOv#s%SUn }jMDe.)Nɹ30ii.ή#$Bt^(]0WԝP{<ߥg;eE3Yϐ1X/O.0cBKjr*,aI<Ǣzh'%L.7KY8,O0c-=#E:rLS5ٜҒzp)kBIu`!bv^~=Akt5JT/]7{Y B+2fwrfxn} `g+#(^gc_D 4r^mcuG-uxTAǽuZ(_Mzer jI;]kVW~+sr6 n1,=ɇ]#g[bb ]L'HxZ;T;,7giBƧq˙d,Q H&E'm Љ)=fIs/st["vK?>)+t; iRIA1Aִt?|Pc`NQ$Nҷ)>pMcV79 XQ. Jƭ縼<سr2ͽM=΂Ĕ88\ JmV/ZX v?K4SvֹM+`NJ.\Do2entW խo\%Y{3*49\7f%`(=-exmQjḢBOBݫp!7\ڕ?6w/e]лtّ'V\0]*cr;%խ)hҋN>6>* .[*>w{RѥIs ֧I~g{bA7a7z(N HWĀϑFs&d,UѢ 38,TK~9)܆1w2 ) k1)/0g֑&ȏf{' oSϷ89mWhW\]&;He Bsq/)&XK)]5ӤSOks^DK_ QCWuBW.[Y=gq&snjBmȠ\cV^G@%]%asP,\#lM[x|R?_СK7v4[ `-)zs_~87>[Rq<(t Q>y럳jRFEs{XXJjNI[mZUELB]M]k Kjd}3^6Ϊ(}޹)B 9zlTSi6lL`1-n%-xrbQ)Fo䷣P'nJ<^7`'k¸BN:.]Dp]ӱL\`6(n)w8?j 2[0]YU_% )y'.0TKƓ"'_z.oqm}$Y_ğ%b˄V (kᇵ#d&uZ}N8Vkzx.yd zSo5hj5Tdw\#"emY"=5ٶeOhcG5A0Xɥ|nA eG('>?>9E9ķoj鄨 vꍝZ3+DPcVxҠ(GSYXp^ 9&VOۍ2W#`[x%;O% yPar )7JɹXk07U%=Z13V}&aBZ3Bg+H)d?8LF'KN%f¿łЬp٨A ^(e2ٕ }09t@6}Cs%2ۛU'vaI?o'49o޽YLn7.藭btdۜ·2`OJZv4bc~T@m"R2ceZ%:; nlDh+iP*l)JBzqcZS|I6#mtiscc[: β [` NvpM76J;'"C"M`d_OQbEs͑H^rEq=5Ɔ%LMgxl_/nX%\PümƠf"ҤzKj}rwN͛"lS|?©\ĒxIwhl׾RtHCVlE Xr*U3913 -k_(؜L P*J s>cIr!ʢ_M2Rҋz!ܓD/9sd \>aĮ̹aj-GBu?nSfLNv$׌ũzXn22Ю5jL]\G< Io*BrjSxU6: Mf2dy+(RUϱ*kԋA8 OZ8$&Z"1H/WNu;BkbJ~T,!԰_"I+s և=LV8 Np^NZ xB #%r>xK?XWc؏/_XtAx\Kj9789dx Qz~4VA;Ksnڛx `޿ Sʋn]+Hy"p:;9|w, D G[2X~V|ihJAdpC ]QɜKf|n ƺ+C+ qx68=>t&4B{e2Z2djUv`#8o\_U`enUMCR/ 6)7%0c ;p(mfKq01G{4^ @\;#isC,Z/ Xҟ#'n8Gǹ40ӫw+mݸI8?}SWmx˺ 擔0ݴT_#bo-C˄%&%uݳiG=]p1үȟn.f *oAڴY)sau}EmXŁ$x&wVbpc:P 4 &ُӈ/+-޲IY (5t?& Vvwg:0~VoguǃLb%ZD"m;G,GGWM^BC5rNa'Fwlf?V,|)$ߜV⨈ izdI";/@ ؆p__'Ϸ֮[k&G]6`[uDɱӝɤ ې\2톣^pozpD"[4dsZrj2Vwa t$R7܌Gm͍tb;9ր؞:B$k%ĘF{|-&"& %Bzlg1\?f )+>5 C#g9 $$NI٠sP2p6ma׫7UPO0vӡ״5Ϭ:@m(ß7cO,o,1s4xv82{84e;0rv-D\V^]$Y2n ]/ 4܍ai?6YXgr+5Rh7FkIuv{]da,ǽ3Y )ʲ" wcӂqU#]!>j< l-#]ϮdV t߾}͇m想7X⫟$ٙ߿!'k\MD”P@MY  EM*ɳq1bX}/77]f:%5(A+8_X"]zPuA@1;pLݣtL*u٘ƕ#{g Q9|]j~/q;%g4!@1)CD,':"н"SV w6Kǖ<\A|b. i)VZC85 K9[pҼU뵳Ȅ6YG+WE|8gi{#Bricu-H牮ؓD-k%I:n͐`CU8:},D;K"3,ٗ"߾~VjD$ E.H(`MӇw6M'vŇ??)hhK]GlI CrlDZ88nmO܉|dʄw\}i"@0sFϦV/Fuyn}"<.Xuĭ]/ʃ+b0FyQV,AAEp@:יWZ(<S;`|rsޥI:ɛt5 (,`.^xkX(z-nH_b̃5Ͽ,'.kS @(g5*M8G8Ul7u=;DS jȕ8< h%r/e[ Jq%MF+rl֮v`j]ϜLM߬lQ'4z0]{LE9c`)^oYlNE: Q…5k#?KHԘ0ܟαpyȏiinyrHu/R{eGb瞘o8\jS 7,1oˈ5iVǩ}GO;ui~n~NaҘ!K2QgCzD5fgPbq25p׫OҶT鯿n%aM T>τܖ^SX=ftfyZwYDEyq詟.,{">bfrگ6_^,?y1m@׬qnBU,_JF$ ?yOgL\g{Qz *Ǐg1gLp@Q@}P?3DF@L݂ztd3o'u>V.#S 9>fIsDF;չgdΉwA|G9<9ExfpO@tP9z`fWҾTKEjucJ;_(o\a$$T8t΂ئŮ.n) q^ Ub^ Q&Z.&mKdҺJ&Υ&~pqPehB$yEܼ<ך݁A})apUͻZLnFYн7 ?WRk_lJbŤAADNVbYqo0Fn̒k櫙 PxҨ ;)Ks[71\+R)~r' wiuVIpU#*1`QF?v?.KK#C I,ng :nثsJU ۍ+/$Rsv^+&ZG>#a# F\ N1KࣔpS,)I~Bxz֖d3= 8A - O2O%VK%IΘBu4zx N:s[cme|?eL"+ͱj%]zTr"'Qr_xdu犨&v DP. efh 羠stj6ƌuuJ:) 6cP6ҠZ׉.S%87rxɲ"Q8,9'aں:V4][~CMGG|%K}뛙5Đ3HQVCL4*h?>Z6K$c;<88,ބd`7kNJ/ۻ7dxI ]GCmə_CCJPR)UYBPM1\9r_ ӰxOp\- ׭ CvZTL,@~zζ'M$7 #ǓF Jd IQW?ڟ>i#=P(ĞS]_ RC:ee˟h4#tI9ff&qdbNk\7ykV=Ѽjt,w3Ḛ.B7|?[k/Wc>lvJXHxdMO tAJ.>E&WJoE)` m -{Ә#t$ P%ӜOgWD¤8~wT&RSi,ǐ,ke5-|c+cOklz$M!a{ (;!&0Z9IʡC|Tj# u/ Mzϓn8Hvޏlne ʁ:v \&5ɃvXh*"{!QHn8p7\[]ʊaVCQ .Fyr9:! mi&]k/yvS4FYJ+ڟZ|<)KXs] inzlug/CټE.9#fg/DQW(9Xʙק̴K@,ͱKboeeFPsyؙ͂n4}29toFSؓ;29]mcxK2*W]),2!UYaUL}ut9 &4w߼/o R9RSqҠ([/E+9d ]|T7-P0XbmL) kaxs^ɏgut9R?Tv}|D*6vꪚDxj*^ Ѿ-'v$7-0O3ANսucxa{NlP$<{vฬ$|[DB t\w7/PY=r6VLACy4 MPof73m!}5\1cU!8|nޚ]DUڮcdsbl:2 Y7Ê CwRY?pI"rwg9rm:YsSkf)yvhPK$"|OywV5z`51uO$Nb :x wwxdC^:P?|9=^ގO? X-+A(ULakCm=q}nOCλ)u[Is)I_;ɽβ]&=T7)OSZvQ2m9b$h5y=wbe?a+E!=\<%Ęƻ2Kux`Q.ju&2̨YBKjwpYHzuM8,R>q 9$jY,*Xh]̺ea p["&J'^)e$ {z Ho8ZΈFH<h|Gz_Gq5!cC[%u)L T1|6|Hp00tidoHhI้׈8)}@*^ne &r/6m,2,5ʘ}61Gl$=P% (DE@V (ā%R~ ȿ~JH{A~/sVe)KVP-m vPkܸgYgܰܟ]) [,1J\EB39YcRC "9-Ͼ(K(DЦd[@liM0k]HZ5z[)?*os ժ|Iv$1WiuQnAt] ӇdsH*_;FϋMo𴁭AO ٱʂsςbR.WfKq:8?0:vUnye^c;%凲ȁk:( 2McW3Dz#)풾w !2>[% mTMFϽTC}>oa7ltPG0\Sm|o!(Zqy`S,H`[YK09U[S$bEϕϝE 24lub$; /Y {~+1ȵ /Zl+_QXq\nH_m}ȂO@uce4iXIĥ%ٲ\Q]j{̉0X3Kq2I'Ca7H ӿHj}j_CncUoy`# 'LӨG~74b$X3tJ%\5NlTct3ԥ|ͨ mʒ綐jg(w۷dkeT"xi:"A2(-AIZMCKs 1V*c5cGw sx[:,3V@x8 V"!n^'J pK2WD'.n㉵b䨵0܆Iq!억bl.۷M5T[rؒZ=m'3>YɱMpvut\ͺ}xpi9!_u!(74gV*d qXGҩ?RE"7XZdItlW L.&,l7/NA,5'q} K6/U. [Zc>-P젡R^c98=oth+(2Rh1~bEs4TWە(0Fcb1yX\=6N ;H1@O AŊy$9vrp[:DGǩcy;Cl MMBı)KXug`\,R "r/3!K@fK# by@>3#(S@!P"NXWf-լขTf4tt}X\r4ct5[( k3f% OhTP"flj UOVG #V)CC ]7ddon$aݸ$rVjSZ0;Εo,AEƪ[RX 5/b0N7q42,t6+<TWQЏ5PY4=êAEms}ԲlWZa0*3ZGjǰ'"@^k$oĿ,o(g3Xˮ7V5ǹ0V6TcZb2ٍٵs%u p#wEњ*'>k*fv4dkX McR4$ܤOf\yنF MiXIvss0!NK A+9'K2lvVcmGq M5I0c }4*}<^W`}ylTۗ%qI@{{wgvwfyX+ٗK04qpLw$È8$yHc/Q!^X?K݉'H+b( Z U3Bj9gH;y y%{q޷ G??>'6`Dm{qk'x޼'wXswC7ܛCQzMH׌hnk/b65KBj2!S>o6~w2jէXHCgT%Olp7&leKBǴbUXXSkVsW\h> ,bnDrf70.7(Dy dAA.'6 ^C%Dl/xEd|,.CW"޴wwe6:XmSxSb,_4v34Q\C 0e1>KhFĨSp&#$noP[~u9jI*,JS}ܦ.{n0rWk/b:<fEbģ׼3g*ÕӕzǠ:Wdc;O\RrusBlNLˉVjETw!2ƪ^pET S60j-Ca#YҽД|({&'\s(=%ߖal¤>cn$6Uʍ NikC˝):bvs:blj0/&ep)/ =jvfƃ/k@aY!S~| ;sLMx{ǰnٶi-!5FOyI_`_]w_[J_i]&&OL*T.wi*q8;ʞlmIm9- !N9?dﻯOZj$dexY=焥5ɶΫ8 P5.>lձmR3@,hb@`0׺2vJC ^+z@ܬ$gsh2B);hUƽXiQ1xVgY`Ymk^kr6o_ 6r&j2rum+$vWT&(|8SIԄpe b<;znE 5̍Xߌg]c%|~{HEY]G7;3"%F4z M3!t@r*V490sb#_ Zg R=:}w,dE 6:ゃC6[_h`SA+ܻDO8 9_+@}dQ'9`ق9cTx'24UIKG2JmOPU1Ӹw*}k2+I sxmsRs֓OHQ$g;a#>4{|1ޡ>czu|єp3?27m:Ԝ hF\Fk7gc`f=EM[lG;v( 7I\m聳v4725gH5o![@|,dOvsy, /Cʣ8_<[mwkhh<㌇MשXFHm6ꡔF&u #!z 7!ʶֱ,diȥxUGmʲSjm gac?Qwti|@std\ȀTxh,{;[}rkak5F۳ũ$C)riG*E3|v@ya\b33(x@#CQiw[CI?kz1;%Jm= ڐSd>Ŋn͈[g[Yt)D&< .WkƤ :!YxP?})\{oJlJ-tm|8e'> Q9"cl ]:Vx,).Ոel<9(5XxqTJ*̄"6'K*'Egŷ?0ęR{RqTuS(Rrɰ;+/T_DYQpH ԏ,j]dJK=4-vuҪ‘3Q{_죑k-(ڂ"c=m>)1[F Tqe7sTU#zLS/ O\F{mD`Rޥ61;2Gt$ŮJ+%-ޱє]o>>NVnAµ4zt(YՓ^^4XN KSf0NoڎCՍ BO᳭֜ް 5B#8"MqJKln[k7hƒ_1gDAr1%%b5g&Vh.szQrNMQS\wp09DtgPPUDolgl^öAh׌P-W{nČ"nh] jE\UMNQ| YɍK-[SVw8SQYlCN(NI(l_}s>[--?rL|S11%"ߐcElbmS$1UVN+ˋk,.e',D-`MWBڮtL㱉!r ൔJ]a,$'./cٖ nm->}N7TE:qI* e::YjANw:E Sd$?SAŪX ʨ4(F_M"]N!emi @֞y㬃`%mhƾarAإCZSipr:@8kdRbؙ}Ÿα0hފ- 5TCxktO/ujn)+9 #:kS?Ϗy4â^m4RZ,ow[Dh=r HTBؔU8)#XŇ"a>nИ-kHNYvi +|("H@e4mM+Z{`ʓ5FZ:Ren5TK #t&q>?_4B"C< VRjZNf0LN e7&ϛiW D"@ OqJTX|TbuTԤ1Ƀ\ӏXUI'1PEnf6Gåu 2TJF=25oݿ ! w-X.ó"LqݹD,:R`xW"qv<=4%/{.B Nrnࠒ<8+wCJbt,Ԥ?$7ȯqg<ƊNppM%NU,`Pa}'gJ$Vg8*Yh3o)5cҹR^1sy;F|i0IVm9vcٛI]3r E )$ljacf;+xz;uv5d|t:_iSrcgot2sݬU%>ӽC9C{`LPm)0@/꠱=euS׫ՉJdWJE\`䇐 5dFe܀ώDomҘfUe V  #UܖQ<ΝJ.#} )<20^+sO>R+gv>YΫY@$i99́"O܈9kf'L7Zz;'lÝn߯ȹ(+yGOF,4sрG}Ɇs~33Y%q R혟 K*xd`oSYYIӢK( &tj[[gRNŽ&&%E}1v)0̋8 cEtꘚfxXW{ ۾x<|f& N'с1NJR fcS5)ǵ`Q,Vv͟Xz7,Ic +iDI;a?YR^AC^O߿`]I4^I6>&)Kk֖Ud|b)Yx?v'Qbn?A8wqA%Ņ ~7~X̀l{%tB}J88zd];3ϣ@>pXS?n\T=G\5q HgD\& +n @"?9Rk@Y4lj%וL)ϲYiI^R"M?zIṷ'!:>NOΓm-@jaǬmhDUCC״$dTݶmv;pU$5VN/Y۩DĄ|D5RL|f!Zg+/|t{vQaL-1Dy_1Q/U݄3uMPY3}jSؽr+N~T% 宻Yar̸QEoT#%1h`K3%#GOC~4Mi3N w:_;]!wZLl SN%h95WyLwy%׽[(%Rȷb~r|(N<[wyzv4 \C 2$|$!ePe gOZ EeKL?f Uaq~1W9їM!ũVD* W6^Sh3]xnͻ;ft]L.6ąjnx+ς „Bl#.t\m µ~ayC*26] @v\ncps-U2vYy(9 it=B$tgNbkV=jqUB Sdy*lEc *wqhY:%?歗2jZF'"PtGL?SZLC)"'V5B%qM&HV,#)ii4y'}[e폏+wvŴ<]X!=A Poi? + wBBmNcvߩ16 *ݯ?N+ږ4#L"Qd$ov?Ct } fc) 2e"<9Eq56NKEliͩiǰ@˗*JYXL)Tc g atG&pWgw*24j ӠjpC.ZsZbaprNwc~LS,eQ}3@tXë&`B֌Ngx%e+o]kzIfy3דC."kDJOLxWj0fq\5si\Enʿ]m;munsVg iFmF"KkkWw$"U?U2RRE`uS_2i,t9~qIz 7A2Qg[dc:3dvYL޽ތ4L^Q,ȴ9ڲ5rr.a,dOG*fik(RZ5E~y_몯ih]Uң*,0~PTN 6k)a5)T^jȯM P`O?*ˀN;b0רEsk0K3?s &G3icS\zBѢ{m?VVGD݄{g9Aʇ9cBvyVq9̇FYDZxsz?>SрAf_~g3w&a5-qf&+$ q`!SL&8dv\@we*@:J*-cuE-=Q ܔbMms%45W9Tui^RDd;q ZZjIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/brazilwood_l.png0000644000175100001770000010320414614030313017242 0ustar00runnerdockerPNG  IHDRzKIDATxJ7T1f췱*T4=1Q??M;JrnnST[ )o X򚦙 ,Ēȼ*̀V sJ2M\دdHOO3"FXQ(쁸qkjDDLek@4-w1̊,X#oO `ku~H1듉Wjac2CLuNږV-w&6qI .k9qw{@v1(G﯍u*\ґamgG(ZІ84R*4ևؑ.Ij? j}HUqSa9 !Q[ynkyFF ǚK=3a}TDwEEۺHഅnԚ0F="mt$P*w+nZ5G >1&:ͶRW?'zq$Kj!IBHxs*_k- wպjR3#4K$b[AYxgJ9VQ-R0mW "-4MUBY-n4,R=:~Azy-G4R\BȒUՖ@nRRJ29XTfs%u{}qѲRm$J J5BT6sUqT"lI-զ6- ɾ=wGiš*J23x-KEnK5viS1z8r$)[ڼr(k%wuVO3H"y td# HI-ɿӼT*zd{&zFhJhK%'߿^hx/6~sZ|m;>-˶BNVjM[ڲ$y{gUɲTϊUGLRD@}5FO}Gc\$h{=+(6#?iRfa.Qu?`چtsϯx$9\ÜgJH""3>𫖴h(ie9)J0DJ$,aW-TbnqpBZE}N*Hni[v͙߭?eL185t>ͻzqXPO2{KdSb",~/l9/>m+) 4f ~;0Ik~y}ħ-M liWH,mg#ft< :\ i R5 Q(BTF##Jvk5j|ퟴGȌWxIRVVJ1{]E ZAxQwMT5YJ\m/B.PR!楓hE洺vV?jY 4/ej%ὴmvf )ϿYM6?uIcJ pT׻zT8O[5։) n92փF'w,V?j_:4}i"7lW$nT*k%Y$~If{g>HэTrJcn`lGEjպmRTvW٠#3ih&AMhx@MTuiՎFSY%r ڏ>% L`\$m)6.(Е467J:>K}V;}oϰ޴놮f۞%מRDKE$VL=Mv(>33C~Հ-y4P/cue+bϡ& ZS)_5{<*ߡzioTl{<(1Vh|&ܫ&:?:GW3t'9bgCno+?6G1dFKնfpN[K)D-u ܟR?'X2vRcDr%h%KFˮ%ވTM%i[G'Uee5t*Y\ڦ rQ%?a!thLma7vf- ݑYDըF*mJBDZuH5)Iȭ|7함(s93Kx)Ы\ͳ֒HAxDMB̐jdڃ\ܖ YN]u<1 Qqv/!QFfR3=h&R$#Ou:VB%>4UVH2jt-v<`ӟgVa'  L9V#Q#<@۽[/o׻pŖ$AJ*T-+pJ75EIPeͧ #vGy=F VЬI_1vҴ|m)d|4:bBLXIpAM<vhuN# AUf<7/|d#!<Ng~U4~Kmж!5wNeliD\D䪮1(]"kH|i3Sw+ɑEoY`w?_3 lY0x&hFURKZTSI'znzދD^@zbiW:Z"hq#Y}.sH>j46@k1%!K %?/wi}Oɕ,v[y4Q4 V38s:gri/\*߻[~M>peo|ٽ$ }|H{j(_},a< gnxhoW|I-"+L,Z+tB$ I#K&=ޗyN=H%"G"z ) -P,lK*H@ 2ɫm{iTI%lNݦwZP$Inj>=_|~uiZ:kUl<cI[SGB-HwoW*)Rqý*#He H%ͦTvg~swX6#I[{6?b %0oEu-F6ϘAS6TyU aVhk)bRQ"qF.§S-IץzjIR)> 7m18d 7R9GOPKs9X]5RCBf&zt}n jfڕYD7aCNȏ+]kœ|wO~>g~);H9au{5+"׏e/{\)җM+bTPOXQ~H4QFBQJZ!9B)|:?@٠&q懼ծIN*{M;tvj_η# SEi[[<2*SY-mT9.ZX_JhY4|I"?U}$A6N쁋9%^~5row݁_{{C=lw'K/}ڢ]D5v PzÕ6QIdYjVI1jɏ(ҷzɵE-6Wms:4dfűWG}b@Ja>RM;ѐȃT*yNٯ};_3O=rB#/]%e?$X.*|8feҨE*l4eLlmG S# =ݶgڦ<? ŭb7w+t?:A? GB 4zotΜOw"'`>$ I|Emw e$(MAR [pX۩ǣw[4sM7Gy9of VZwSy#b&/;|HbJ*`cODz"e)O7X$ Kn#52g5$TJE.24>}=i>6qI7y|=$hJS4ҡs]Yl'-!/!U6 U{|Tӧh?GF5pkM`oUo[:ɿ- j^N{\]%AF~h*:??XMԨYoҾ?zΪj`#yҕNŵ\| K3\XV M˜cnUJKTjXYUG#eLݍ6*vo ?~LP_J}sr%?MF4O[4p-I괅+[o-|l-g$iħ]Qiz?"0vdTeɜckUk)HD+vbr-ɐ_CdɈ #$6j:wqʿs=fLE+l5YK*I聾ڮus&#{~ZM$cm v+#.Az۪I )ES ]l<?jԗ\gN`h` ϑNG]7z9]YRY0(h2sS{wCʐUPy'%HARĜ1Ԇ-d㟋cK6 n 7?dŕ|&ц(ZLg|s8{+ꧭ=@JDkjU,%VkDIW.I[xDyIA}k΀d(࿶N׬:WiWF#"6h4EWUvh*KЂb)_4[_mުT5[sjKpvdkmת(GvUW+iK_`\,?^)57>_BРڕ\\݂$D33Q_9-*Ԕ5~4VGow%|L"d[Hjάk-LGE͜urm@s-'$? MahhQFN-V?CM]!m*qti]# 5bqtܻG}y~8n:Q)v? pgy=hxúN+,f:Ip.Rґ v?G.,A? |թ):mqB|/BqĎJ̠A\%AO%B)KAƢ57<ӯ;i"xsġ_UD^ {YIG,`A# V-h>!ZguΔ7SpINx̳{Ջ$ЬyqZ[yߑI 0 C-CiD sGh-iZ1^bNϲT;3N%yD8V' X5tڟT%9vXO_5Ƕ?lM/ 2WU] QdӺ! ʕo7cpH*h2S/n'=>wumBӁAHJibW-;)~k96YTBGpx(S8#upNMJzH{Qpȴ?O?^^J|̂Y,GO8g.ʩT #r> uͫ[|C@w60ܛQ ZJj\rXM.?з7;%]֦Iĕ׷KU5 sDFT~{߅Wmk ANk7vEE /r^4we"j*O@ͅ(v7QuHd 7qU kioy2wS|bբs4\? pQЎxeX\8z &9ѦoA,<[1u=E{8rorrA?~@TэF̫'/fVOn<0( z'Ytk@bcABX}fs E<]r~0]KhG%nq<:YTwoΜ8VwM4۾Ŧ1l{vd ffwt]tPNL=Ju@-SgB;`ΟZ,UpNDgԆ 4~? dS7/@^*z!7p{̔:# w8XZK$7"{ξY> @/j>7=xjzJonz1/BtpX P{`Sš:/Kbf-Dߝ$l? G6Jh9G_j A9crae( Vƨhio|qhD干gݸ.~Gt E.b8y1x`uqtZ|Eoqųި@uAu&Z n'ŢMz [?׫tIX#+N?8>Lu E[&?7uh ;lT?3SHUs` -ū3y~ ^I >K3 :NtUP$ʤxШ ~Ժ 9+M@8 |c)mZrZoG8< ,WNQ(OSzwrױlyxVMnv`xw~Z7<d:´*p zgX7JH*tB=?EA);lW_SĨh1B\ߢPMQ<2yw䨇y]$=^ 쎳ںFH>#-]O`5:{cb( lԗZ` ФN`iG8c ݷyӿ}ze <r̶\~}{>9vƞ8yL1DHvߴl;4$x~b8p}M2fQ%P4q"uZ :fsNoەY9 q)F"zh[hurbNB Cum^DA^ª@6O7JS4ԋƨ&qԌ# )b3}翺|}GK[,;y`^6ȞQp-4,vn][#NT n kbrqFєޠ:],gz$‹x^r G1b R-VAts9.2{! ,o߿Z ر .㝳ZhTxfȝ|zro7\-/Z`OAEÁ@P\zgo>T8ZAOo>jJtE?&~S+xPNތrEV1w[:8(OKb!L!ݚ:a:CE%!\'v$RxnlgCdMpq*sO/v]H=(}bϾ(&7wL?OѷVNmcJ^@f! . w> F9 }b/ J&Tn jqVQ_뚣7c*g}l9i%@]G|Qd nA-}ϡ'7ruRCCM#Z'!F~*v@:#{sύBTS;A1-P>׽WyL1Day>NNo42zU2gsPemjVϘ * c> xO}El6~HArq|,,U_Tydjީ;B^K$tU;3id#zh|e҆ST{–bG3enBU_g,꺤?< >NlsQwL×ۚp,5!{i{wI;Eipӵ\3!)u+P5($`yn\bcFW|1GZq`M͢HMbt/(@?8֪w:^"w١]OkP5vqkiP[O]1M"0z6!pm %mgGEtmsUY!xRu̓-P3q %$G;97ᄀ3= TCaƒ;Q$? B\˸b_okdCgލ'spYXI9svǞ/>Tѻ>p8vQؿn%<1Vg BPh ~A= aֲ͜X hW,\" q uPBoz^]cNZŋ _1fBpp5^]>Hcs r Ѹ/Gx~0dHdzc=_xY:[Gq>Oe<"8lr=Q(7Y qf< T׎E6V5sD=9kV|bTyYٽo)CN=S..ڋ:7E(%TŜ!'Bbl ;e'pvqDyWAq#A3vqzV6H q^`b;o$ooM'#>mS)I4#V-)TDnZ9YF|xG8PυtX䊸q֭--XwDcn2c+2F'l%z t@&wtC xS>愫#H@$V߻##]5{sgcD@fԽ13ik Ǻ+]ZiL,VYZ+VlÛLzJ?O>׌Mt_AE{oVgfQ$C5]=5==IqjB.^ hb7;w'EunDV}0؍JXokH$tj#,+dxR ĕB#;UMӄYhÇ-7 v!Fb Z9<@0Q&lF0KgV"ϳمA:õein燽[6^|rB=5]:_XX)i"}K%F26.DCF<"[k:yI?l@{jFlpH15 s5L|hҿp*|`}Ot!MoYC؆J07ϕ+cd1UUd sqM'6@q5 l֋2Ub!G"q*Rٴ?- v"s:󟈣|nQ2Fuh8$F܍w+DܐB Z lmSҶn$r%&fuGI&&|܂dЅlB uΣłVtژQbWC}cuaN<DZO6ЪGtg}EBJr[>>0cA;v*4j)}/%_ eU*y0s%l.]SɪM]{K.)O&dDNX'̹6o0qbVA;xJ'Lן5/$ #Qi-b\甌Nn?iPxM=8 X\`1jaG f8xZu =u}~YdSvQ[^ Yj2锃[J Ǔ(r ݠGϭ7#Dm%{D6޻*Fdk6ot {4Zv.d1+{ȩVdX:]_Va?-MwD'&7h4y@"l5A?&](p5x"Uy[ %^rb3sub8GarB]M'!Q\lY*+GI (su=Go] ۡ>:q(R;< )yX:$\6YYS''zB-|퉊fFT2K0 ;2#qwt)Mlp+H\~%s7TJshY! Fت)+ -=ت(3%v+CGvr7WbIzqzJpD(MHEjl#6W" oJK_qfv ?qr!*8lMQmu]?Oԁx;MkПDʐs1 :dC1Sܺ lA#:VaZmlP[t#K}Lkg3&=}!dzGR5>f;K|rH?PKv; 3DE<&کa=G wy`W;HAnĞ%{g _S}G_9Zy Ұy@?8*eq>@jϺs _bBC 0np3"*UȨ_s}#~f:x?up/N&M\3O$z'=$܊uf螙?s R/T:\c NE[Lf`?W۾5t`}7V?\,bP;("Eq_s^ bkdQ[=tFC*І$'Y2dmɄo+wsO`7K.'>tB<"?;{ӟb͍=DŽu,KqĬX%̅ZN9ZMU8@TN&- fRuAc= ݼAy*3pG> ~^|a*tgT8j}:Vڠ?o1o`1! ~e茗R(HF_80p%L*]<8 )X=mW)0u#!>V6L!bԗq8/.@U"ą= up VUgC7-djBoPuQNKzrgd9Z"w#r=:(iYY \IWl&{zĎT(2땖?=?ko- wULxaf}z_SFk;L]'LDmDٹ6^_gZ#mk^&XON3 h}F]i X㡞 //q^/fټct54*"L`bT-ш1zI*_n׍cȯop=tnΥrYqXq Fٱ~UIiWVְw;WNzZzV3fFy\ G+PW2Dy}הY򌗙c/ßgؑxvTkFu WTZc̐wb+NBm;?%:ŹFx<38YCCfm@?fK@TRlنxݨ^3;6"͌-K'"4#gQ R&NUq$"D ZuFߴhVoFOyN&>F p٤ 2_ uۈ;O 7C7nYx;hAc`(--zk5n+uRӏWo]g{2B1ݠ{D{IӃnn&UtF?IƩ %@(r/5w_7bc1h&`O(q*rY?gNaf!|1fbj-ֲڥҠ!,r,J }y!M̌68WXn(‘bƠu8]dX|bS.\?Rp0'wQȎ]2g[QNRWfA6q [[݈"vtw#3]И#v"Nj/51?5<>_:Im% mWH64~ J@%E7\Au_Ijs$U.FH: ^zӅ}ۥJvZgX|(x41Ez;'b=RpNHT x(1rT %d5Xo}M|3qq\o;`okd/P?̌)sݐ3A.c(i= 8q$,^^22s~=6e{:\TmBUmۛxOUjl 92:3@R~c@[Ac|V)n|E =Z}R88b2;}FIv4#F#~sk4'A&}UOmԛ׷ozĺ`}2 +['cMjzmQY+ 4Aނ0rmCaCn* !VN[a^e*7?'BT~92DYd_*t+o;qoNrE}2a)v_bç{ͨ`sŬLYTYl0T9pΤ/(O 6X@\_p'0b匞jQi;Դ̛ /A?Azz:0@f;1_hSFdoS}ea BRP!Ujv(xِhY:ޙI^WRu´œβx*%Q "FĐ~hs/J՘b0lo0Erx9o< `8U4egq3[` ߙ!w/' *GLx .pl}O7A7G6߈}o~*42\. >2#C5aa{vLIqD'dc>ga&r5Uf|&!wn∰?֢Q?4ҭ@zkJ)1-/<(ȎǨEe]S:F)c)t5?Q)嘝I|jTI.soMʷ ^H6l"9xF7i;'(9j6']z!P8fbnd:QN{p8r}1>.AH.^A`$$1B 9mY^r2F'B_ tĞ8z|: uR f*32z;:DM"/z>Ȩ`S)m2uq($8θ;ݶt?L:^=s4Bq٢9v& |YQJ g=NP|nK۟]xVOU]$@Ikj1KJs1tΈ{6'&Bz͞䥥`ڷT™Zm5acFhFe:tJF~%d$\gIU^A# cq33>`PCq3=nh> Xҙcءx{_DxJ`峇KR3ᇮoӭ!^A$J"uD)@REOxvFznX1=^'0}Y'0eVcQa(bKP\£C2Ε.wc!:.4w&L Wm[yTO KJ2R7kC퍡v!u}tTi,L8_&&a11͇gwn3K wZR-ndk+)toщ~L#nÀ 1窻U'œt)T6XKGd?JMU7?XY{*%Z|NL@UҀ :(qVa`W #]MU\.In}7!O+"6,Vs\ P-_-:~s>t\1kZ5{ޜ.pD&n]+cAu}Gs"S?mѺR{(m%84g:#M۾컌hFy * p»j+'eFQu062&Rؾ:Y<j9'/;=5y&esq> 1&toFj ~}H~NY3af7=zQuX:~KHԆMϥae:1B߲ ʄoe==sI_Zs}wz,bk5`6"7{bfH z7flli{MH ͐IN{R`M*(;yyk/Jy^kw/VZhk5dƯ47}oϻ`QGǹ˴U{ipzƧ30w%#WUSX HhX^f- drAHgّ3犝>9+zwߟQ1*E^բOc4-1LKaАnb1VhgCl77gI#Na *@>GqPpQyP'Ֆ?A^Yr֦Ra03֯[m˜6GJ^;s:hrWץ}fQa=%B+\(;YseNƚa~!-tJjs[jK^Wfڷ5ǤL!i)Ixu^E R.ƑY쾛MG_oSd؛J:Fu^$oѩwjz17s5"߱)gP5[Pk[B>y,3_:gafQz{j1&\([^ls H-a] <bUNB[ݗl*zInsOO+y1_!<97t8Z홢 #"# $ytoYYЅ%|f*PhY^"&Kՠ֬DTXkvHEtjdxs<'+c U˅Ft -ѱXgT>t< k"} Y!X<+!GV0uۧ~E_d bv(^R8÷t +js&jpق>ZiIb-ɣDq"z=8yT\26W& ٽae;ҧ=Ł`IU dM@M2tކzU|DvGQqVoT*'/9Q>n+ӵj:fbT+9U5K X;:>$p(bMZ mH(#hMJdDf )8q2;kQJJQʯ=ǀq'-cbKiRME1J`)WK\h-t3#"so/wHC(;⮊F-j4+eL+|4Uiȿsv/xLdfConAi@x80S1΂Z㌊ʪ-'s\jyw8ڻ꼡˓P&RoUD}lW),;jO{$ނ^Icr0U ߠ:' )]rɥC8ϴOBM1n2Seđn4"=ˉTJk&_hD qЗ%8No'f7t;%[Ԧ>ynyiGB7u.!Uf&.%d,PY'J`9E]5ݿ3QF?ńdbd\ѭj3T6-JwQ.oqS!ۣ́,dd_=Q|F]ӁTA]:*G,~Nceݽ`zǦXycq['P9Mn"'+X:ZWdqE; V(7#~$Rx3u7@:ĵ vRVp]2l 'qHLmU \[McA Ecrq (Pޙ<߲pX9[z/foo.bzT)CWI(YT}GeYcLs{ Go&βpQ;\;z -'4:ÒjޛCQ'qd'l5/̉ɑ Cu=|-=#m"fR#)S(ޑdF>Pt*ڃtY'M`i$XY?Ĕw[,yn K5wft9/g%jJB 9_tnV}jy=j!oEO3:u1Ǵ /vJ2S+legtAвXfqс8bkspVԬS|}8&\+^GZfjw7quXB/ZE7dfk Fq$>Ýcv'ӆ׏N)t$="UW=:fnI~`;a32w*-MLpFׁ*%uM(bQjr%Waqra/og,}kWHmk[]*%ҁ佣oD'FM2nyNe͗l)-} yDNn!S|%}b9`:8 ƀ~cBj&RhFdžBPn|_@}ȸ+os"~pfnQű3^Q.¥rs0 FPWK#+V5r1vRƜeW )qDkw5TIጦ&ڹ)VY~9 C c\&&O\O@>_> ]jpKnWpQ~/{PMѪ$ JuDz>#_,UU 3[:eDۺSxŞmCĜ1"&y)[o%<9+t,XP6- ͻO=׿^b6*G3>3r^o.5\y3&B\ȂVUw;tvvhz\#Ԩ)Ecױj94tQzMbfu{¡-^Fg<"EE_;ܓg,䏘@Koof*}d͔I)ō%pFy 8&KUڻ2x0{=/QqZ3~3OK^+߯I]+y4:Λ! 6Sż ĵU5F`nU ̮crr*O6*4ns4c/4Ph6^ ³Uxnkdղ2huC,gžFw{ ۢEH'HC"m*j`D'pfՌCO+y|~2ه&Nq)*MF+13/kYT8jrnɊXTKEyW#. ,pxP w䑥(x-Ls ennk nё7 }AvZ֖gfokfЫ~\K\oeA03T}gAڬ꛷e2HfܿZ7qݽ>Q*OGc|8W2=OnaZ6yL DXF^ JqUHUdpJ=|02+!V [#*B {H`l1K3=U>8^ ɸX#: ;22oNK"6w&"h³cH 'ЫN8 HA{N w0&y"W8nI6*МgQmmmhU2@ݼcTU/[s| Ϊ!*rv1" <>ٱ:bu$bD K{/>Q(iXCLCe3X O}!yFRYDgRmqY3d'!* &cu9t*vw;ٲJ^= Kz K¢)^1-Q47]Ub2$w?^1r>wT}GICjuQhkf/֩*쯰$ؗ i)3A`Hݻ!z_7. 5S`jlkr2הw]z*wA,0(.D)LS5Np[{.`Fl4SnցՓ`z c _ 8'=bMuCOG;tLΉ#3U b'N(1}=~QKuzozJJlfsnqցuD(z1*&@g`ʘOjﵼ1ջ=Un[{fJs? Q]Ot~n꘧/ O1ٌ8+)@oxg1ATH,<lܙ,!:۩bUv8 ]%A]'\yb#xs>DDlu:@Y+gk4|I9@ R͹^{Iѱaȩbr`~gysW_HGߤ!T,[_FI0=t1VhMq2su%QߘP荹đz?M5cf0zNHt>X콓cϤ|=+J̅!f0ĚUax~m.֨ B۳ʷ+I=͵<3V j8s{ T ٱţtDZ=<*v+{-ZrAtfcD 5WFnIl=$dp٭K݈{ }0pL~U ɦZu/DAH%#0!Ts.HG)`*9'^2Mt3~Y>%MN`EA%Jn7#ym"tkX|Nǜ4/h.Fr*",ZQ|G֟״~LuB& NFN |ThZi;ki2VLJQ F Jc೸ҝW\9u܍̙)Y| br>\w!'~95D*Pk8+0e{C+g;=a 1tza6|&;o5jK?nDw5x@8J*'r($I 2GJYk̆ HH`Ofm/+Ƃ4h=OR%pQ'VH`᪬lf5I;JN$V@aF*^r vchDR6}?j MCD*,i82Ҏf_CZYq l̤{ ē\9ߴW^duRuzkժQj:6WNF&&[VsW}wDa3 8s܊geҦ{N$OT5B#rea;"c>yd# ;BSB'$.{n xkz]To 1>aGd=FCA'2 ?bDՊ:d| dOZ'Qc 6#n8^RAGG opaR6ZK6YͥnINY sY>!'Z'قf3eM^UE?L7aBd¨]t1 #eNS]Ԋ\u)1WЃUΨV;zv o٪#TBYd͡:wZȋfp^{3L_7Y }^~3x-Р% PiCTtIʧ tUjK zc-]bZ?og$ҷSDp*nǜG==c;*E_LD!ŗA膈\ }2";>5=71뮙GYE{jJt¨Rj.n(}VvHj8xk+s7#Kkf1.@38Y%?+ԄUS#'Gf^W+3sG\-sKKcҼ_v1R#mj4WC]DwDe=u ={7bda+0k8cEo4iņWY[cB F8\TC˺ Lo[+gFF̗J7?+~ ߤW3tzҀ} UMc4Q:i O?_V571J{K9-?=oȰDa3Ifi'Cr):-fo3VIβ 3P\P B53wu1srYQ ?`9q&'kJwf37u&z Jk=}tΒi7JYtB|xg3WOЭ~³VNLbgiO,F 4۷svKf83_gžeo/qm`9q&앥vU&kqd5cOS@zNWi>=LwNr,p?Ѡ+Co)Gl6B#ϟ2 ~#.9M<.-R{5^.YoOV[FFW̪<+ؿv|䏃y/՚p9Fqknl 9ȫv|cOǙXSGۂ@ pU 8q_qJV W)… dxg,i6WHΗr6LVㅜ Ir6&.a M$*kE+RrY^)^ڒ2-G':j9KofV8A5I a vٍ\ob^Փ*}W64DB%ADN0P8CfŨ`{p#Oƚg&]a@{I 3nݔP' rvh}_+V!Σx#y7McX Its C)p^1C j{eɬI,|<8P 4ŧGRgKqZ\BX#. R%1!^E7A.{'GZl=x< QrpM7;G@X&xڜ Ֆ/I,7>%mN\`b;Ѳ8bp,ف͚qCCXtc$jVa#VX`.IUcBa TZo8՗-=q龐_^/[$዗ο?58 K k3ya$̶iYYQxNNEN%o$uZ;}S 2~J|ߜn:Xg?oNٷ{VM_@XE%у[?R0.X){HrVsgd)=1A%D\oD; qsIο+b0 1{Fg~!T:cRD%{:/s&0&4/4q"gfE/D`g)ݕv(d^cZvdۈq6aJ'Y|Q<gdEʱ1F$]^j sբcg#O?GKκ<{|zMHDl|J%@ٱ㠲n07ԡ2pK#jARfi\183^ɌЫ.[85m:eP"CCΡY<IǪ(ә`bhP3U*,*CN_La~++8=ٝqrwΉsEl +ѺUhb>kSLy'x̻g~tI նqQb KTDCCN\3kuL~.dSHKҖ݉,Ne_ .a0H=a1aB3֐d131Py˜6C2׆p@'DxVf,q3_ZyE3xZsk]ze H0jds9j, c7YtrՊ{w;-wa*=3j:xkbg+c1 a::;ݢ:}grS=tGtX.AEsɁGģ5z|K(9W_S}"{~Ǒ1t֣be`\S( _LUW|>5X+$SP+'cSvcދ!dqV ;p ~q=崗#{Fe}8{Io{.;\rޢkL(A'*Daxhںa7ĽQ>gbfR r.jpbۭPoϥr Cd8W(Ze{T'>EAqRɑ9&jv#?i.ZToZ;487ލq]:jN特T ReDl8;UNnGmPQglr`s=Ǻz(Fj%&K R/aRsb9HXG\ߘڞCw)b4ߜ-uG6.dSoNM[j2be35X+; Pf6č(N^kZ`Ei[|~hf 6b&]ZGZ -C XL]#6R ߶;i2ɎX1M@[!+fr\T.d`Jvш|kb"¥HP>TԔ5REcuiIY'/E9Z%س"!b7GJ]qgZ{ cA]q;٘]2v-n e"w{:z;y{B>hQ5 m}^؈#\.l_s|R =4ւA"=8- Yeۣ7iArYj_ʤ9TnˎO`x8xaf}9|̽F )Izߙ;~eYp5dwpDDa 6̗b#ݛY.V1m<8UJD,%s7b񙍅}sne^SxddZo#'G<[\^êLviQ/_P2j<-ߌwou^hׂ/c՜7hYĬn`JakreЏY8#p4X`pH/t};n+yÒyXe0ڠ8oe3`?RKl`wlH3 nB1qzxeEˢYggNQgu'^?c//CeWԏ?`j1_O7r)Y1ӛ\gүX`P8 M,SF߱{e zHL,9s(봣f g`>rbҪG2 g9-)9:ڤ++ke̗<'BX\d{߼K"+~JUT<1;ؗ;&/ѣ5$4w;2:ikqϽQOv Ji2k/.NF>(&+ä'?NU VNSR '/a\g<.ΗDq?UguJc U3aGg?d{vnŪDn& bʔ;Κ#8_Pra`Wމ;ѲWZQ+/?u{-VOSGzK8΁k^QQ8^x&^]MK8A ZV#`s6a6ϐy(V~EPWBIU4]|0dΚ^p =uHuAvf~ ᷯGSa<2fpQ)I6 rc:9z2J;CNͶ[vk B xwvL23;R%39/fZ~Cn%fxH0IL5Di; GH ?^Yw i>S ’n13"GO"2dD޵R{W^mM/P kIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/cherry_d.png0000644000175100001770000005146614614030313016366 0ustar00runnerdockerPNG  IHDR^PLTE^$^$c*h*X$c$S X$ ^$ X NSS c*c$h*XSc$ X$c* ^* N^*NS$ ^$SSXIS$NIIINX$DDDN h* N SNS$c$h/^*I^h/IXDD h*D S$I >>D> I> N99 >I I >SNDXDS^ h$ m*m/tQIDATxDb+ EɄ{EXFyz.;ZnqkmL/ցփnch =ExK!1}(dDX[s"$6;]_^Op 0qysRYLNDþ8켽kU;% ^{}5-w$me㿕Y)J fs fiu @GDິKZY/D#",ΗͻnA-k7'?%U.xb~+T3x=2J>uZ̬@11,":m78~fTjkJVyv):6h@,]dYjY*,*e:um-ӣ-92qQ1 Q#,D J*׵3Daz Df&sޏDi Vi /2יhڵ/\K1vUKWpJqĀ=A8 A ySDi иĀ\5UU1G"@>P?g"_U$TA,_ymLL)(`M (GMH1p$L= JNqF@.چ|*3oJ,ZR25^9>@]nռb$_p@\9[ęj$q$̀UDŽ. 9́6WeBFZ~[ױ%:!h3̱1=zAD8 F6:iԄ5)6!~KA+8d4GIeNMTъL1ZH}YUeѪ?c@ȪD..ek@J9n&9FmJn2u=-iA)M5oڥ?Ivb ;,c>ޖs & :Ja WpSPOY"х+np'1ZS+ŮN9 }mDSDϕo뷙p.-mRS_ju TB BuoʞKRl438 -6*L@ӜdX 3w=*ɫJ .eqրSm<*ђֆT.EϻV#;=3[W2?Vf F͘6}~Q)g}U{żHy |w^o*BH"sgkSvOvpzc#:[kש㩦T l| Zvh5~t,cyV}_R &$pwv!!%uCIHd. m1sD4eAE6>hiU&)Jwkޯ(8NU_^zz @NiB`OM%]SkպVDmlos;2Yϵ~ ;sNz[׬IQ4(i罦ҩ4D>!!mqŤ)o) 3QorH>Š #mIMOG*ك9WBm5ɑ/>˕@IE9: ]qwP[#Z!ƴum2;[ýdFa.Q{9YfZj ]zifg (> _`g)CrZf!wI+ʀngEDU|   ,-G~oH7^,2%H..ɾ?Fuu9hS;~&Hg=Ƴ 5C H"Shr0rqV(3cA6#O]- ಶf9]\vy5jP"kwT(].": 6+c"cl k-Af@~(yd_ג/ <[ֿwL 2({[ARO 9Ls<1s׵o(< v:VJ8FL2o#ЊWen{M"sƋQfkIdkT|`QiKدI[E chI+cG3q@wHD&K[6+L>jZKik-6o'#W^-(@\ FCӪCj t#=}^iR`Y^\x{<=>"1G$0wWK'TQ\Ӳ<5H] <*%z> ~ ۬2 `zeA0Үtn!17 #QZv5ʙk6BBȘ u|Y2:Zy3Pg%X<6e7gK2F] ??Eɦgn߫6/{X6$ח#g=/QrjLBP'7Z(mms[ZbʕJs9L0oؖU}IcaDzG0CPD b{i Ŭ,bBfϊ9@2Oz񲽽$VӅlI CzTDq˔v"ME$='Gtb5`A)eX]!kEj(*""iv%'T$.> obH | =A J>ʗwIޑ"޿"6Oր0i뭸[3&RDe,A2DF ؊rrn][vOWxևJ]z >f=|G ~ee Oe֖i_VXrI9/ "S0 =2q{k#D܋͹@] ZT%=rh+`s|)#/L- )+ U*,R JKH?@fKTl :$ ~{( "XJTS Og87 DSeyhURu@BPY?՞Òx$;oÿGh^>I‴ZY #6|hdV(l)6A1F!RuU}ɨLlp\Ae?΃Y9:e8Hw-1L9/NkabP`"')8GdvߣLӷ b}XIq E2`4E 9;D%`ؠ]"0zզ5rUc pEpL8ȳC )p"ɂ)nمݵE;0曲P=LzfBb `3 j1 F\Ll bRd$j]g=֡oIDiZSA *k8Y}bjt٭M\ݵjzb/ oA2 }7g}2a ^@5۟ݵѰ*{^`rZDG q@^~H+)uZy?,IXS~sKG53y"1*#[*<YTjX$Z*;*FBé@ `fv&v%'ptE*敫9`W%]Ǣ^e,a]Ŀ4#)SeFI @4b,\;fecb?a3@BÔyQ ٽB9łft -Q쮋iP_UDYbG/LU#\K%F2i9DtԤ~Re%>me8>z{Z{TI`ĝ{Z^s?}MU(G e9 q{DR?]j2fJEOJY gOp--T{ڄZk}%!R8UNb2j E6Qnh q[+xJ`<h? Ɵ@\z\ t>iajDDbK0 XeRڦzGaXR+ZQ!լYFfcGae7Vb G:Aܕu|w_%@QS!;pV)u5K li-J`_}qVɒ{cŅrfѫJ #1/Gat3#rׂ(;9- 4pK:f'V>k%3Ӎ XAгsoZcǘ4:f?b ҉TPk9 ~K}}P84džLjծ OƲ.A3;>O@xeۦ/+^U+2a##/a6*B"aIvw-fݻ(O'tҗ΄_#pLm=>\#5Km֔9"2;Ku+Ymp61j9DBJ&E^^k+}[cD́/9f͉<$e }n4"XWdj-* Y:# !@Za:XZ s A7{gQB:r?Az 8p@v{@~ZĖ&A撤mAjر;FE#JxoL H5m*%j k$@nw,rE=* &)dQG?Ն)zuf2@*9{1^F 0)vzm3pX @K)tWjDFj;wRDnB^+&fzR̂i@>/PGB#6V1*P6{ӥ\ "|>;D $Cg%A(?[?^dD,NܯGdjO2LEy7]|<, g8#{qˉ#pL7j2KaB[m; žHxhQZds${({Zݚٗ[f0a{%+V}H¤X)x:9m+U³e^Z%֌Qpn| 3?HtNvwogimEe2k5|b 9w8 J `,!H=V(ZnZV5tfؚ@xI/^XEQpי wc; 2rC6ϢJQ{1eNZx@ۥ-'VKI,䫐DXd"#?AOD&g K :=x9+Ci Q[Uצx|l"tcD-3b}]6/Hoh$YQ'38R ٫Зb#S;7~ULEc>E¸++:[fu_oz4Կ78V6\" tPHS~ʡ|BЌ2U\i,}D`<bVLRXafwLz#h%w6^\gU2`pJ>DmYY=G/E[N:(@X1 di>(xf੷Z33Xs'đIdR߀S^G;J؎zGSl1ϱ+}<NE GEf )d"AbH-$|$z$ ^gK1}'IT]X4Enׇ"kj̻k_d~DƟc[(42^\$6>E%cy>tҵpqz H^qxJ§.uFRC" PҪb* ƍ,QFX pxcj5-Ԉ$5pG"IXmhX$} OAa$RH"ڌѵ|] pTTg[:3Q+pJ~ɵR#]=|ZE8LaS$866a$ìʆ;)>vftAvTVƭZ -umՊfaǢ*A]EVѬ͉]Cd+TYy@v߇FNa <Q8ApC@1bc-TڼQ'OjvZe6<qHǤ(V-[L%NIIdq!. "g 90 *"khQ0R+:ER1bJYXb;TWɵqm'RiI_b-תZF5̶ )en jMMCGx[1>.ԾA=@a cnjYԴ{aR,TrHk],YĶtE0>=Md! ?\w<?E^!1'͖bw3Lb^EYnkkaD4p1&%9fctb`JI/B,7a!gQ̼1W/7%A-4q0!4 ("da1`_FnIi3k\v]R+]}İ}76kVTQ5KY}yƼpY\癥σ],(<^\9Ahah.OW&)rNiQ_ʸpzx''+f~1VZMA =SI#{{+ ЌE DgAv5Eݕ^v3h)R"JoØ_O73X덭0Uc[9H3::9Wiwb}7Z"~SK?ԗ]9 (D+y"Yc"_KOf#cv6r .qFMr߂\+:;6"m(VH.RyWdRB^_Kj{]0h5=H6!Hg dUۄk*2 /T擣>%A{$j.__8E_ d/,ΑfHCX!_X9֮/O7iZ*wudh{~jFy"}<9_ݯnA׷q<ɰ"SșpjIy0]z Hkޤ.2>=rZC^?٢<8OeOR*%=`I W#uMn z if5p2+~epO-sX&@,K. *.vlrC.{D6=B 9ZXDL1yT'bp3}+R ptӺJڭ)~YZ {ߧ}~Ucqd 1 S`r|㫹~(<폅ZgSy_ oS y#T>ӯ(Lw)ECtiW\˗)'C *5j%)HE#("R^7}?à}՝Ng@ U b] o0s8Y53UfF7)lLvf?`&RVj=A>B43~1 A}~?f,dSXO߉9]܁,ф9|M ݏ,>SMoOME~y &/*lWfaRQKTYzA< ?ǘ_k -b7C=ٺ{@{#==X_bear9,3 -S^ܕG^ZzSSVJc썐dcsA 7u{c٥@ ,uyo=@4]!~u粬t"c=>]]}bh]MYBE F>s_SOr?(Suy&ڊ孮)7*2æкf:aQj{7. "1=-\].i= SZszOSו]z$07}L.8ˀ Hs)US0-.F ;W Ҙ~(Mv:[;΂5ke us 9Fk}3׹v`G Z=4y3԰,j{ uwcˬ6)mZu qKad_ xxV**hƚ+y=S{6aE(a9BֺZ&"jƔy٫GgQ|,Srei_ 3Te_oPm*+x5Uњt|+su]{R<';=2# c S4+Z ;TyDu3iA#ATXޛc]XLy\uv܏U,ww+Jqg.-"Ǘ w0V * ’1&ϐE_U+"8KkZfG+!06杇jP@lr}o{yQ Le&--sfI1C-ڕ֚&VHw3þjf/]\9_ @E-"Ϭ?J^M^9(6*6"z48[ӇE80g3;3R"`NG袽UNE(AbxmbHckRZc.TIyԏP%M=v{'ԧyQBZL]4G&'<}l uTɦq8D f[O~Uiϟ-PM}0g>aM8:s8K##өPm-IE0vgEOחnf]*4*~~(U6yы5s˅&dݺ9l7Qf; eLWL[Ey',޻' t*˳c^hٙRik)ҸXAQfyQBkٚӺMŘ6phq:׽RyWE? i[X#U D<;V:\ww9tQ}{{-^6;hRHx*ϷT$u5+g="r/~;n{(rNcT:h'op< "n=#(`>?+y.t썺GFb/_S=] /׿Ř[7H 4[ޤ{B\֟Ǵ8sw"Jޝ[덹8=2 Q+ t1 8y^c+y;UGy*k = Vas#MEá\ ƞQLaYs?0H?ʪ#SM=@F`wӼ߬5am=)<,yd-*BA'G-i1AlTUvccNעާ]HcZ-~^c!_-0iπ85 lX)"Olr b*?4jIRK=~4Yt uH܏ag0CmZZsaipx-E/rf{~:E~C^N/Muv^6&b:P}yB8(c0,EbZqʿ=Ƚl;S 2y$0frzEcZ$A//Z :ԂCedy/ӛ]d[ә6Yj*![t S#dzG.Q{xt|g.RLjnlUHA~Vi1ϳPfIiQRY[ų! 9#:W 쪙7W]$hDo![C獸kaIU WʮuKOET_^JeK:殌C1C5v( :C $H8-gpTfPԌZ(2 ȞCLXZTDY'ӯ؁uyn|p K:AaM}/3W11#Ttԩ9,B\;2WdUJ42,"5r9\ҐSa֚+=;=v{tش uo6Y6ߎoJRH'd4bhAKia#ڥbW\/0FL7+M(ۤ8 fq2>{ƀb4)Iט>"(ޛy [TF AdQ9.2̆s*o!0$Fd֏Y* -eC#k`$ŃC#TT%uDHW49t[[=Rt1'aTL>>149 <آ%5 \"4{$,u'X˻_JC.*ү5Gg;_WV o/?o M=NճtMQ}YhH8`ۉ9U9;}k7OZ΄'7A黀7>_qk<YAnDfc̭qmAt9ډ FEu = G!&#mV I 1fH̷2}f{WG n+ re]|,B5`B5K EC}P$G=MS=[;o?,wqsE 뻅@hjӱצ%ĕ?$ rՂr"ZhDծ?oE<+KЭMV#͙{6_iZ3s'›->9o,EuK8&.ӯ,I1nV~WZ;YN+L-i qFP!IEv?^ vwI 77=]>v^TY -kǽD"mVY.ʴ싥7'No\[C cֲif.\HcɩqjjDV5*xh0!GX%aQͣ5հo~mN[Y+ӎmKx̡n=x?fg*0Pgؚx;}|4 V;w7TDPsB Thyr12ɛ!-QSȝ E{o%P w~yEk->%Dz_Ut\^y<42b7M?kVD1kM8gHLzjv"<-&|Oͽ D7ܢ]Y:3^]e=lXڥw |죐?+ pXz(wMO"U$8|p`ģn~m.fi=֞Zk\<[m9tyX2s~Rot"a2;i ؊v wu,m;`GY'ؗ/4 >ϬcvhUP]fj",cvqڽz1G HHSy`LRP@eM&גqӞ|iI=Ao0x\fMTסyAsuoKf{,pLk?͇<*W ̿И8ݥŸs[KxohgW^ _P.r+Rf~w%p͙vBr`w*̒3c%O^+d?9#iS$p08w>G=6Q#pzog ʇ\ ›6:#ݤ}k-+d s7ԧ]Mn} W\%UOp=XRo~kzOP!;&sг,rvJҴ+ :h25D/68Rk?gnd=%v I$fQ#]T}W5ȭ=mUAr;׿B*<.#JIxTe"ƹ2-+.'Z%og'mR9ߥL ș9o eSuMoUa^07Uc-2m6 RѲ[ 2ߌ!ӀF?3Na][_WJ;2# 6 Qb`F{n2m=cay'T9m.G^< /d#w.$ixAa,uǙNc&0R,] Bmӥs!SiW<] hx(bkT2G;9dak,IG [V431{f7yUd%i)O-㜦3u^;ox~ +J# -fn{:p'.15}0"# -g䍳"^ dﵮ'HmF/[/"[ހkт;CMbm'?Ɉ?ŝ% 4sD ^mQ_ ?./uqS4,o»Z#V{hTD*s"}k8"m=e }"WW"Lw̎iqב[׺_(nMH·|'ODAHoڟ<1b y$?W y 'o3ȯwe6L/z'o:(x:Ҟ솒`^$,E[ m{lW6-Ù0rg8݊,b,( _mOgϹ;+:[+oG'iQe7SC uŽA6sddfBɴ;C2BxBlcS(DanZW4-/*or_as~w4f09 "@hɢAsW@zàQ@"{nm.>a%{[ [ doH^FO6>EܚQ_WJ|,2C" @~s:B'3rn>[4¤ ;ơ4Uw<\bJvCi¯Xf w@nΪ㹴p:BDHW'__Whg@Ja FHFR7IAM@.sT?! v ܛc . oZ7]?u}˯װ]'S כ.K Ca7Z SP0"ȢdkCu12?eAf"Vʹ0@kXK?Ac+}`uVSUHt*i2"xo#l@\1$ߓeCf-b&1p)7\َ2-bRyXK@VYf}Mk @t+$SljdeHQJ$7jVCvQJ~6@yU&lRlWo hR3I"LT<0[ {L ƁG h7U!ː&ˑGYjfA3"]zp!.MK^i Ppe]$-n6T3ݻs\[K4;s%2mlR@@M*R})Mۛ=3\)Sڠ[Iky.2Vy̱%}3n+yRŮ=Ͷ 4h\@ "URB眱Jpi 4%kO[Z@cBie:!%J@P56m=dEn~ 0o=&G*j)Im@Ev--MZYg$E9M41* N v f~B%{[[tJ+Xm-';cPR}__ DP֪52{g;s>י$7u c=5>w9Φ$,{)|~1M#U IEi|ReTB,mFNۆл+Idݽ--:kA|s^FlXg&M+G6B[ZKf HmlҖH9P!i|NVL#I6USY=%cm #yHYIGsyM@ز99 #7mYzlo`+)Ÿo O<{ޱb;-X93rNKwCrN?>,9pDD) 5/[PMDƐ]ūĩ~3 )\HgH؈8̔=PP|X%iӪ5yVngmIUiҒ2F|=&甿kum —ԵG,!Q;[I.!%|#1ΔCurUyREfa&g+iVay3A_`8g7Ҿ[UGGOh[[F @ڂ>'-7@㜭bTK[r~}׵>~5 YP-Yp:/a$qqʰq*[A!*SE}`Dɤ^st{(ƫhM0f: נYh,aٸ ='č*5g-;8P3WP$8/BS:{>_(]{(S ԛ`Dzs}13 &V",nnWը{Q"$_L N(Uq^!P|=W5Q$z1ڏ羲0}+&(TJ(8Pߺp{N` D;\pȚL'J+k*'Z{ON^Lޒ yhulv qK Ř2fJt:hPu/D~& (j wTk|ƴ1g(2YQ|o!np?`_~(*oQ[TΝn,'Cvr~_38µ|!eL&=KM|mw:%} Oo 2O z$e璲aδCFJx!FIKJ9UQ#dSD7持AZ޷1kCJB_MqT &~>kTIŸ.GZQ;Wcգ+b3aw%t]{$*z񼊌:Ru4=֍]tjSR. ˸hLA)iA2cRO>.Q._EnN CM>{}K FB3?grfCy'jUϊ'NQ"xO1P$(Ek3XB[h-|[vWܳ{f?<+;K|ҹM{\"`_Htd Jc螞6dV 5$N(E}ŠO <^!rzQz0x{v4Y_%K ]vBFBo/j6!>- 1ZP"[tL6_Oo/6ug99=@hA$nG}=gsR,2KM lw2p5'|(Tͣv}~1pi1j}RЫao#+zT7 of a .{?rדj W@lF%e8?q 4DUq'HNٵẫV̽uz!7xrZ\+=\-tZ7#Յe:S B`'Ex! c\bJ.: `İ,3mC9MG+N% Eb9gl9Wkε\v o;[?7>nDNtRI~sR&Xz#N,LYv=w|inHo/Rs Q`!w+w˿kMO0;c :Z9y؝ӵ-}cԵzN6ę $,֩P!Zu)]/#\BysJ|}XSMleW A@$9Zz b`nI63А;'ᚴҫ_'_M#e-k'$~kB*Q+l3RLo#~]Q f9펋]|ArWpH!$yadp_zZ6t<ĪRؖ'>N=]nW= 5_Sk X?hxk׺~ aX}\`;e",(~Jj3Tg+gGf%ڕ޺#>F&S}HS[Ϫ6+}rHH%Mt;F7&[# zVQ'UmJ}!2p/;$ފ>N gR #)qW4W  KƌHbavߥأ)[70&T>/ծhM}3U^׹/[_@XUtX|ܧ'KtMѨ&ARRQO%,VeR"1T6wl_3NBAOwߛVm>^}rxz?=2LxA!\bݥ m'-lAJ4hn ?qMnQO,E: W4RU!Gc)g+ɌGܫ z/nԹMˌbm`6J:AE->L2Rb&?#}C1]HrhLc\%H~* W ιK{@G_ k:cN`O5_0u9=Pʳ.ev6޷seUhSxk6V,0Ml)cH]7Ъ}ΜsDdvODij'#Elˏ;k-"wmh[`C]}~|V IhXzLC"Ӽ;Q{7ɏ8K_yɕ6|vcOyyN`}{x8z:imOMΎ9)C18;}H՚xd>`.6 ^9m[]h&=Ćnx((2hz % S;J5N:Rd魎ZU%8ĸ( VjO=w+zb~޽9J'wCJHu6Mjl|onvDWZ*1C|kK\4msA}J>g_Ǐa `jn91=TC[mPF,wyxK:趕"X@ξ}eՆz]I۟L \ms; E}rWH~kX pNK~847On̏J{YA׃Қc˒LC?Lc=u8}x?h9]2d5vx>1Jח,kk=e=gqgkGٹ0J͈wtixcn=^^m78<{iW[ǐ;؛GVO?%">>L2Tc1z-/fճCm]wO|ʯ;˂.MhK}??|\fE]$^˵9DWޚrwtìp.֫s0 {l#l[rjY){_^"ƒ^9 AY[xG:߮jK4bkւ hmcT ĭ|W>T e N /=7b{Byv>pkLf#nxa`-lB0a̬K]/C6/}Uܚ֪Z֞\Ԥ4'5==ў^|^kP Pn7QwG1[m{-.y?ϒm!DYS{GzYb `ZatiQD ,{m35DH!N@\G$S텬b5&f#滈m]մӼ0@$pL8x\:|.ؼWɸ1 ^skX??g>˚Zˇ|ݬ'S xKRPYMݫmlFi[sX1SxbVݚC+To>|kNׯ?DʑZѷGT͉쏽o/_?>LJ5}OIrZ0V/< vWCo)v |"kRJ4J״g7'ʉ{UtN&~qAs븟)6Z dGX]J]YByG0Aʦr=;YM}/LJԝ0u=H8+gN݅xybmNa|CjEJ6l%nwkx,-m%8~>0qϝ.[-j$z_ LBmU홵8 ]ۿ~8;yQاch][HIx>uK| ^O*O.8Pt!` uV ׃Y6.p,{w'>$DmxaT#^ҪYLp{e^[,T1O2QD tw5%\Wi=i;]]>]ЀvU!o;?.6wЂa Ablཔ<ߢcЗp W$RrTpA$&6>}6{=ܷ 5_1??YV.>rIAU~NplwSg`'7o;a՚ȰZVc-,>/*(}E,lp2;H]^# cq7G~ Ή^9& Rl]K~Tp3Rw'lV p,cIB.s(la`+,kH%;Vbh0mߪ>6WDyOr-bSEm 0ZPr@M"=챲:Q ! Ԗ˽[QzA-I^.ۅB6q$)+j ]Tw2}|HlEvu1MԊ"eq'| `ff\~~:P1k9F @}QFW= bODUv8r3FSpv~86}D2*JL p?Zym*DCIdJQ3z̽"z'7z0u}]-T{ l3BGʇH^ܥ;;R,hh$mJTO4u*8sZN>3hbA4y;eKeYmXAyHG Ss qk`ّ6 ]YŎF}V(x9C~{ÓZ\/i;2> BZb`$0BvRC޹c`Mh6l;_FȜAg-˰II|\F]T5Z憶J崪m%|;Ġn2N\N1I&TBJAWv)G$MTFzc\\" ͬ><* S՗;.t(6ű[Y2NeD9DK]j2C0?*oCO*~G,2L-ߟ17.1ma /'N[4/~)Em#&U"YCЂ,+:!BR]Fm-S_ xjPȫ^΃HE¨m~Kr\T#r+Ϯ}! _?T.R$th3}8~HTgKۙ`VJ4#p \,F/'g0RNP'o?;ZXx]o"ۀFy?`b$PX~؇߽/X 05q9Fu!g%Է-u|v`ùEE54Wy1]+k31/Zxk-:S|k*b.﷑^̻¯,+EdڪtS$Ji{KS* aƥ)Fkh['[{-|,Gg!{*;!Tn)vڝ)܎2f}dzeXE'"n#y;^:)X 0g;!ՙ7ʎ  VT,7tVk;k<)|kq<7AiBvn!AP+zeIK=ֲY^'8"QFd1RuׯĎ|2Z;M%h)7C XGE-jMo9:+<"ĥ= {8)]$Nk4JajڴZ!֝ט>lo9pe s0@Q j"fWQ!GXd|~\69gML5tك+Lay, *?aoxتƜ&c͛,:V#7G{"_YRq f60USMsrYdu5"SuN="cAЧ)X칁NַZp~a&&(Do+]"Rr ] kGB:uv6kQtPbCRAǁ9 %hVQ24EF*+0c.cpqWW >0\b u#\In "_wDK! Z!v(ĻeM w]2A>wSs]7fߋ@|*=Ac3>HzeCRF1}@r},\GB@rPp1>1%jv,Jo%~(QCTqy~!aRס҈ޮ^/.JdOa0!b846аj?kueVRSlrR@D#\/TSBM$T#/3'Ͱ43tS-BM"9pPtifA! ,va^PagNjR/Yˍ^sчH>}X=Z"L$ C`X.m p=yzg\F5)#&JBj~UB[1I<-%v mbr"#\5wqz,6*k&a`%z,.b2Ãb6hOҒGZӳHS(ftu\;KLgZD<-_kpgGLV;m"[L)S OjPү0[z>BcӐǜG )~ ?Oh%L#&FA+tn˰Q;~ &5NUXX7ANLWDyzgܖh?EgC%Ҏ֒w,WjsB]q&KͬFA${IiTɩiA^!2)VXtȘYo2r~STv۶; qO>ӘJlFCl:Ln;D:}z?W>>쩲ݴRBڜjQ߂S Wp,KU*W*k KAi =j 0Ȍ0‡3vL-Kfh9Psʒ{&Lk+3WlN-*?]ue m: ?;wSeB5 xJ,.\wMfP&f8 S,t.?b6(wRt]r^.ϒHybKt]Iu L4.-٥;x7]/s.I0Pzl4Ws9`a`h`!6$b541ϠRS+ujq0Y]BB*_UJBKU0%jZ.m( ֽ ڃ=uI~n3gT6:9R_ oyUNT/,EާE|s/y丽B);IWƮdNq$d-6N=Gu3L> n&( kH[/ ?]KИ+:^8fxݦ`1_XFI"h; n&Ȼ99瀄S9Z _^H85s04q40^zw<9,[Y\F|=y`POWndU!n+l)Z'{?}}eTڟ6piy,.JۣMG讵`G !>,1Lc`ɟYCMn2X&Bmakͫ]3XGMؒSM⾷>Y:ז "mbT*jvkvρ.?Rz/#R+҅)sFU@Y?Ac.ㅭU3ԹC4"EYlj?T|A'wXjA,BsNb2<\k00^ǿN/8"yH΁ Ռݚ^ =䄇(I*kbje0Bk f8D 0P ש*2չM"uۆQq:Xº8jvoi H:z_aX KZppȔ 3T)Cb4 hD(E98?s F*wq¬9%򂮔e_+6AO.Bp\]9u}G4u쇯cêD՛BolϬ;P ɪ*j0%Ai'{ v:kNňҀ!6(!㭼4!$K+c4Ƨ@B3WHẂyTk;l p@9^-*tvɃ$$ T.5rrEqP/u+fN!C 1ކF-I5uCSB&3im" #6a.# ".LѺ&]s}}nPV??gf_TC׊TjC-8zlH٧xNqL1*v'{jvxt5Q@@ x@Q"O:[QeP#!K tTo_ӯF&[vk(1'L;Ue΃~CgnFFL[MrQ4u6n/6@FulXҥb0PN͌(@E Y$7\! 5Lg<BzLBR}Rw;8\ƶ~X}3x*E|JG_V1qp3Ý}>U׶I 8{Y # J?f&rŢy]m|0}} :>.x7T8^t|m zk'ۂׁiZ^sg=WPf~ۼ"C(LYYz0× 1S,hGƒI10]-&3_g#( xV3WIOZS%j Eϸ!`Dc'M ո`I4FfmUM.ɜ"FPZ[ jv Kc&b: HrY}=f*6:#[}9Ih!-D0-̙P]O~s{W94b`Z!0#xG DcGd0R#9g&Р+tslXHQY*՚x,4Mo3H f9*^5EF `C ZV >M=I3ޥќ1mMB%SXb S4fJoT=_7P5y3KLy2L6)g0ʲl;*n] llGqfB8 %9\]"!1|zc=ęQB=z6\[%liX;SRd澷LoY___ft83_Wj7ɢKDž_@_&3ΐF7i!ZiMZ*NmcL3٩<4:P*M"Q4KUkAMMɖ.>Zj횑x)r unsI? w wn!JO<^+ߟp5KŚKJեjT9h.(3.&bqv 3G1 ._A#fخ(ta6 _9ekfT"˛9K[L,7sl轻2UJGZ$K;YR ~X8^Fj`k՛{anEX"Pr-Ss U}x7gV([)Obf dfYVSݥ.yH>>kЅ!̼]ԥZd\C#bo߿>\L cZ%P GT^ ę?ekz1GL6udžJ!Sl8ju*Қ0#kl99ׯ˯ad_ Dvk\;gt\Sqª:%덛slC`)w,k5W.IGlݱ|yt[1nqUq5@N>=iBg|E˔Z`EOO8dLۍү뢂K 5]^}wJPWg` 8[N`x9[wk`"aȄn`>'ýN/?JDfnBqL[5wIrhi#ئZ_^ ׈q=EzEy,gp5'zYê֑]]qu'=+mWBrZHŨQ7?)y'6)t6ڎX#0@EYiZ׍ kk-0~5OR26jSa6 Ni[hct{tAleXL %R2a`Fek'm0E6fo{,C`k0|s Jc0(G&pSd^28fx<甅Rgis?htY<-\O/$4NW<\8b]}Ӏݕ4i].@3b 4$[sze3F61Rxv@[m+\8Ѕ|5]WF?$ Hf'k*̴/q=g]=1d6'-LbxkS(}|[:aRO% H5Jf]477x;9́`8L҆%{Z `-2m&qnQ"jraK<@e`'?j"W2X>I}kHs62n,=˔44Y 0zU+LbQetIB[bOv.zhf;v)>ķoVUm&ݸ[v54MpIJ|t-gyil L-[I&ƚ{!vO"j9Tjjڠ]A0W!ዽuwf: zkC`.8^_UB|]_ϣߘv'+[?t M"k)=cmթEٱF;k >-<39p *Wq1%ꃇa|N/~;X;.HվsRR +ُ]Ot6fٝd t q\sUЋH]teQ{G3..kQ\QRG$T+@$[Po\ERcpcuѪ,?pnrj4N4"#2؂'x[cZ03_@8ml𡨋8 G.y0kh,`CG^WZ GSr@TsTRuΡy3%_}*WVd& (kLM񸰿n/C ͝Rچ "ZS.Zj9,*^}k| SE!u/3Ip3X_mOggQE3Jrts 16/ Ow{e "ݹ-6EˡwvGHtq,Yܫ9eN{qpzԏjp9|z8t'O-2}痫0t <xD0(Ϝ'Xpyc[ D<ޭ{{%,)#cgQE%?["і/BZW{|7y:fu.Dx39q"FAIOލd TBLk7(ml5ˬ/0IFrjDGk'BYc>?xqC?#BE4(H-$&I4q2I="[742(/] O9Lq;ʔ9aO,S9!.e; Srw]YYtsAJ,kSUwiw~9 y m{ J30!p{!f6(l$oIK'  XAVq,=]٪` kpdj3+F 1ؖH&ȴPJkj엸YVƄ:Ut0Qw]0+shqIhbN&~1غdɘH9H`p #WQM|NF w?] ӃZ*xܯAOQO<]>HD'Z;؆A;F W^udž?4S#7ʄiǙ3>H*׆ܛlnf3[h0a ~}13O+]x` D6i> -#}J8h`r-|3Ine[8:|qVxGxR?U؇_$V[hd+A>گҡB"> wR)|+URS U'p`]Y؊SȋpB 5xL_3I^=y+m1OvY Ӣ EӦ/vUB)w<wx󤋷VKpP M^:Ҧs@!+nXc=y%f5{b|z]WQ(y ]C4OU8xqQ;~f00 3#yƌ(;zv8N-,05ϩk0=)xVȆQ_f\seWx8o`tLĦÍQFƋT{aNh)0c{D؆q!tAneDaN!7LCF)0,^B\h#La`}:T\ -̓y0)(H'eCZH-awJ`Y^0qNpݍWJ3WCD{!¥nlP0^sP?߿t{ėZr9O~G>U MjA%dd2(ߧg] 3jI#B8"RDp! NzjNlH)xrB E%VG; -VӴDipvlNU^xxۣ} ϭma%'y_]s?_nNZJhS:TnO@N#N,_xu9e8 =(VU-6!RFPk+/ii/i#7#3w`)[wIjndg? /2t ^a۬?DIXIa9#2tO  6zYް p}O{Uϝb&Tm=IX.(|S*gʚ8MoU1RKQn{Vu ɃUFzcxE:pS~!T݋;c320ϘRC ispאWb2Iƹq{-R8Ӹ6wC'rO.AQ#]>Xr)4;i-TNkNu$ S,?-g]+xTxDSUœyr__2*(o|_ "\I~!ǃσiX3s"/'{Q'vχv>{K{ߣgRs\0JDVU9Bܩ|p^s7Wp1]hcr߂  o^?ށŴ5 iwvcOUjPΌ\4Mbй+ < APcX7p|("p6 H xU gIa(f0t(|< ǰ|)gteXt]6uXD\[F+9SUy2zK0I[h٬1IȩbEՓfO=??a)D $qr۴ xhWb5 \)-G"\&I:?Oe*'Tſgz< *̶%I+q#ey׵Tx{80c3JDfWY c-L~ۺ ߌw ؓS*kVrk'_MրgHN7-{/< 5/9Tq@3lo.-G1`w6CvVwc7}m^_fo>Ƴc{ hydP6[<~ Si;zrdLshJܕcnW"_927U[6졂ZNks^t\bprDQh+iTMc)|  nA(ǔLz((1r?^xSfWAQF5EO6`LX:r1`Z4ZM<1u & cmum&]bt[FFs5K4r܋lRCa8撪'3Sн ݧG`\Mtbfpayh{Kgvr5d0 iY$ Z#'xݳ5AA"!70dU<}TJʸK~үPWq 4OPx8)31Ao7Gu-]]k*{x䬨wJ\ZF|I_Q}0[vW%ym8QZ1`n2]& V8jM-bh#T8NL%r,+l/15\Bul) 9Pn{Tj.-a)޻یvnFFp8Oxڍav x%KA+FcxQJ)fxxlRY9 LrEU1쇜?}3a5)p4i , Ń 0j֘ [ wB' ;KJM.x8ЕIpp؋su–(+jn'%5^)LN'6fbܖ!a;7kFf3t,EW:>QqSGBآ1gW0UUx)$LcbGLpWc3glpr-4ZC! W̼%ŋx"A ;^ù_{:82/5@/ ~>Љa]؅/t*`sH\?(BZAN? >'8r4|.7OA(8⸭3U|cǛ^"oCDO-"qD +h0PwPނsdd[%RcFfCg(DCiq/8bCDe3=`GSs 8(.?IO*W rڌf/cuM,SYhX(՛x\K-zQۈYK&֨ƎA{t^fS+f(F8Eso 8YN8'n|NC +6NMExijJ2J;<- W #Ӯs|+, ~s,oP,Sw^/_h!IU!xfh:b($#x rGm>ʔ|*Ǒ-ɪ5C%pEQ^x~x6"ɻ‰SSc83hy5΂ :b>2HzP!D Zp F[ykZ{ gB9$)A!MYᾗRzqM;4IT YwaU ܕ:bHw/5qa3te<}g!ӂ".O} >΃\$р ZCj.qO_Dͷ{J'9%좬], q `;[FwqbolW% o*S~2:nE#&`Ӊ ΢O u5*K_Z|:>r?V*"MQ'qU VW^$?|-cBJ+y?6nTM@7N n-#K:ICXb8.b2+ Σʪ/~Oyft.'b0߅52hQ@Tcܥ d8T(F\qr1ud4x|nC𓉻qk{p/1lʘ'96X (sޟ{%ˉɏ lt,VL&5dŒw!rirC=1pdwo?-hN]Qe'/ʇǸMH&j~1:~AG堙 5=f)b粒[0LS9a8$qifsyǝXin555Uu`VeZY>Ssa:dBJ42jq#]Uz唭-@97yhm2(Q钵UVCYgmЅ4|st im<]kUU>iF>y3# `To\%^= ![& |P(nb9Fl ڴҺG<5hx4fWєuƶyZ׷]|-^Ճ_^{23hsS!b{Hߦ(L \/\r< 嚟 ma6Ճ~u"m2D-aB4z* OΥ$>Z4W~EN2@vO]Z K4}ι9(&aJ|Qͪzj%X>9\?xn\BTzvqwDMWg ?s7‘&Վaڀc[a-c-m9Shq/kX`i>E'o$*f*n|n/Wa^?xOElmhYy|'Vf/tqDuwA@QL(n_}dL,VPNحFX]<ɞtf]Hΰe7{I1祂z Z&䂯9OGlN{8vF4~;BgNY< :0$ 훷dkum36 $0>gD~UODY6WQQ>X1Urx}?Bt90</(>z sX)]`6`@$Bխ5 {[L'tؙU-v+qces,tTFl@\a?>@M5ŭ8u;^3iks:P/-Z< mPlz/2U~Ct՝Ԥ+®CH''0#B=R{bSTʿkgW'W?p/ĆyߴBxqSޚsk1nsZ. 9Wߖy sH30(y][A=푧">f^q4'HZTk ӂVU >ۉ ai3˱Es+M9s(#gva@no~y/9||!@:)/Lt{F=ci<-3V41i޲IpFRbCSʈDtk&,}WfkMelKkq]nyWxjuɤ\:[m@Vzlڬ\̄ wroWК' :K832׎O`s  .ze:9_\:7EKN,șj9X.We ,%%K"4ȱޕ{&$kD0*pjH@x##^ VS3izqyЄ'I Qht^'gBK5:*ʵ_:a1ri]׷<[`GQR G!t0[ _;C$pi'TX{TC0qLmcScp%1\3UkB.${s(VQ8>\>t*Bʍ#.L '7gҮl1lyC%־<:wzf=QXkԥ*ru|opU";oѼ m͂ D_BRis%G_0!^05(޽j*I t]jrbVp>+Bk6l箯/fjtWj|HKs,<7reNMU!HSq0 w]\;[z]{_1dM.VMIKNŊ b;aڐjڷfiqj4c"F?)PfN+ԢBY?C\aEpjס1ZKD:gTa;qKy];<a=ӡ/zC"B8y,ՎcCH4H9f*!xXB$z%OW%YsG:He/m|M[|V3Ǩl6ҞlqeNi 4uN6za!NҜguqqcʢѧ@&PH%wbT}> N *$ztloCO#~"6n|X.xL ˽Pq_o@O>&ToE%hU[GDqnF9' J3 :H~4#ӡqAe@\VgFnavJ+)$*(Uf@. ~yUEBOej{lf<[ s q9ސ?&_>ڧ/5ߪ?L͕+xbCHo׺bFP!S)3ۊБȮy ty:7܏4=oU\#4͢ qR&=ν$VF:Πr.!=C<%#|(މ_cK#^.\h2M)] WJH,3.u!AŌpް=8'l} w7$j|r*A7EF%c% G\}c)6p"DSWphTCӋyp1laZe<ɰa63'pȱ4!taS^1X}:#O@C_uJ{fνbL0Hr X2{^=lHlrHʼnq_?W#Tp}-CȨ4\srj m,3wm$OЍrok^@F^3ujyOB`V \Xo]Ը/B1_K>L b7B2mQ}1?pS }8UTCiW=ؽ$<3ڕf֔'Õ12yK~tbK4xrF&>_'k)j2]!Z4x}mk n9/8^OeeWs7 v6R{cf&Եr4));ϻA7HU48W DJXP &Q}@vjga3l$XƖ%a>Psa7(XtQ VZup0:q"P "}I7X B2>G$ʜ.kr8;E9K Sj;xX+'27ۉXpgz)<yo~V |Ƣ0b5/LyKk fpk&;m&үa.͆Sс[~\ ́~3yoo 'aPܿ;܌J.E0403@:A$E~=7B}9N @a@Ru~u7M>iL+Җm]X+z ƬĢԳ[Ιyb͸e'39[vz)VAZ2xy8Zd1n#o4ŤZΓ H2^߾8BiFUT 4_2‰pH$CEjNC wa8PNrOVUsf;C %(&.mz`CeFȻi =Gp6qK Ec@/>u|f\+Vں0 ]w~)g$ډScWmtT .j d)|f2<D+x^+jQᳯKXJ^`jK@om$ a0{.}# ux 6uޘM`YH:SyN[+R%Z\Ҋ  _xNAty=)y@\\\3ri5}Nͥ U@ÿ-WҞ2%bhgwqeY*~IW1Czx p9=d(i-];h<%:! CJ*sR2ߊuC wW@q7fCqA2+5ԅJQuaYk^ywZ|q[K#@Zn4f^}oη_׶1.Un9͞Df~ PɡyrH_%%:p3u~o7{˿˰G炙6ߋ Jm*h{,zf*pB>ȴБ ñ9S*Pب*il8O5\yi(>}JIZy"^iwwףo3qôPg#jjXE G znͮbt^MGNkE@3Mo]E>Et~r@ɡ*)l~)GNb5| lz}}Cƽ䁏;&&SoHwq'  k}]5Z :Y,̌K S{_Wɐ'+lʰE 6or,[&M!)^²ɼm }KF o7f^__(3?z g|z̢~rĈq։K/US=OZa*D>>6tCd CΓ ak9INÎڍt pqT I}xAM| M2sm|C0DpK{k3h_/@t:oqwP(άXM hXh̙A.z]kl6[퉭<$7YwO@^|_ gsc5 .NXM7z ]_Wܜnc?Ut+M'S(l6y7#XBV,䓽{s@zqEso6k)lw33./^kd|LԌѠ3mC,xkHsac(+7x)Hyz)Ȯ'.)<6M#j~}mw' f;<'9tQH8ɓ_ƦJKaYD{(OBz؎^~ں/c+{-wڷkhGLy# /m^Wt§R"aoS9=}]5s:Iƥ5hFV8ha' JR 癮5ma\ISn6(>﬒$XHіZ&4!m{Fj/ޖMRQOO E8>+l^apIʇl4W[9,ѹRVL [׃*FqkVkzm(a#ra鬪Z+GPtTIb*^fG[OYt3@ή8ϙxa31Vh%葖_/㓮T0?9Y6xҪ8܀Oiw'-lg&tSNTЂx=BP6~Ϩ| V9pv-uc߿y}^6bn0g}"FS?Hy/[q_`YeԱ+CsmWQ+.:yd2, l@zE΀NcQ12FcHdpLzTߕ ӵ^~Oj~j53O]MC(kt3t␆ze d9|N<|PU =}:wMޘsotH۲2sO<3UrLP +`ZTw_߆x~2ョtoJ$dsȢ)tB^#t/]{12UǟB W {ۿ\3 dfׂh˛u(~b=rU\Ԝ:+[{eUX,VȴשܕgK01ʔju{eZō9uv?L0vzEHsoUӪa!MSngm/ {UtO,^H:T"s#gSUqu^J3=sWs wyj$D^Ou9pX(wi׷R3'@gf)mՅm]]+'P9ݑe [mό7[͆'|s yV##΁pM[}GfZ{`BEޭ˾o[,R\@L%ytN, qF;@@EƻfOأX%[kS+q0Yn[fN |r"%0#:6\^1٨7?y> ]>C7_ߟ|]$YCC80|pF(COBm6%e Oz-)d=4dm ދyA4ƃU*хߥ@[4?3 /߭sDZf# Y˭}$aDQ1_B*_`w3$aqku8M}T&0Z'$m44czn 9^tӬo*i)- `ivZd1`av1Ven6 V}5 q /U՝[%紉[$q`opG`DV@Q2& x,h;qz ?\g %L. MgWP]eZv lZ)GAp..Mf D?mwKcڢg~ y(y'gOL `QArȶPFla33Jv]Sڐ`2,HHu:W@hh^њ;)4Ϡn2DE(|0Zhy{D^@SJ7 ~}$?d,GHiZr7m7Byډ^,My-;*C4LVmRkc (8 `->0{O>yLLJ3(斈laqt"[LFIpur 5]-rAR/3&-qCqQ*V =!}Rh79TE g]LDfn<3ieAgY8zh02ǧ%z &= ĕs2luӘbFtJX4pl^wR{d;NQ׮}QM(Q#Мb oCc[3a"/1b-جINϤ|տX D)(;bR@psBB0WRG!2 %V;bB6_z %* f:0fPMJsǨN6xJjcNOgݓ4I/>.$_^w)@$`_> )i61Ӿzz8?@ rW0k|!-78)RiMz,7h h4a{Ywp/_ۖk^YhlwN_D|韠߄εlL}'Ҩhl\$cdSd;.R\]j(>)-a3GlNT&p4F6\usSpuyfaU>$/TZ߾ggq߿WKG۔,m_^QWƵ[CC;s7Gk!%QXљJGcaP t<ٶΟeu32G0tqmӓqJ`3Ƀ,o%Lȋ<|Ւ5:4É WYy ?:#`$Ztk<{bdPFhhxXX2ItQ*&܊xQe/[FPĤ-"eDKsaЅ n]nr{u$f01Iz蠵S*0DBJ>Q=bVz-ن)e@`A6b5r5Y2YhWmŦ'aΰȓ?Pnkؠ7, _ grr1CbFt% {r4kǵ%U@^7k/Rj?'D*'燐v4.mHC,۴a!H/ VQ(I`bK G9gz#nPw ұLC í";2.c)²{@ӏ1"o/  riTvHr>{o6l7ko~ً K6WGG{綈rjTeOfy^LqE 1i1[ j5G^WGq 2Ҕt"HrP1<-)ıhU-d->7)EoF7CA5baa\L L挀.JI(dd? nf|Id`Tf]<ѧ-sZM[Ch?caS7\Lx& {{ӂTZV924hX :q789 'ݬdb}b+99.0O*F S},!dX4F? 1ǢX_$?,^?Ag}N64|=FnȆP`7 `&-Hl"J V!$|ᠯǏ܊sr`oC$di5b&wKZ`e Q"y;x}kݜx}|^ۖ{N(9.E9mhZ33QfcZː~i2s5culAtYOukNj$ GM p%wY/qM-s.@ P%BaӼ +!IM&YжK6K{1)1D &fnXOlSDݍ*rP)0(R6$V׶*k N;&t1ZfFJr̽:ͱbSn8'5յx#2`ԮU7RWw:r 3I/IOJwTǁUVŽ_ճbph1H]hZ?;8RA}55>2L%,UCx>92\+yۤrk2L-A Ysfc,R>b?^^T^Le\t1šO?ܪZDo; N˄ fYSIAٴV(`;9LiSlmaB-49jnaPKq0̑Gi"DҸ %auov]+ -1.GOǁ9,cwۢ}>'V6RW)W4RJ9~wL%d]}KZ UDJe6gKHTӿW~/5 sk;`%| |j~.%ZtW#@Q8U;@`3BϦpR8*InovxI 9'T*3E0W I5< jYOr[Dc$V3RL%)9,\`)Db'!$=x]Σaa>4|y֢}Cfr% \)N&4Nb6 &* u#=X[}u.9т}.cHG[G7ӍTkdM iPƌ};s$؟qjܬyfcҡ<. Zo xEs8!v\f)LURuA$ͳ=# 5RjH@B8.T6qZ\] ;-Srvz;Od0O@r/HUh?-6FmX bE_n~4|PPz&e3?* e "8C:zV|7q7}c`sWfqV|A^v7] hh;I; S;,ӾtRk\@R 64Q"+pQj#ccHˡ/6S*/n_nWճHRlW%}}gRbQ4TynX`¨bwzŎ>o@1]˝~ao[eN6е~W]j](DaK5+Vb׿wJ,U9(FcyAKAT{SO<%fX>4VΎW:pi$I7gzp䰩׿,GZH䠷gg9.sD2+a:gu]`N٨[{ztkŖeR]>faPm5P*84 ]byK=ùJ9S%+6#&$Jv f0(&L^cAVx|M0]BpqW%'4A.O785 [)S3MYkfqGO#K5J%|/W=՘SZ? \e<-gL 80iű66) V/賊ڥKƼ׺O_@c>\!^t1y?o&\wӾYc½;H~eسa/׎ kGr{ dAODG|+(bt,BhބliƩROݸk;~9^ {f֖PcJ)&р,Fh"{,|Ϩ֐،j#dwI㖠@@"f=LT11mAF(o?'?__sY-iݤ 5P,Eq \+\r!(;+Oa7`0^o(]6;@k/|n ġ@"FrήJ휷c)*'+Hm&n1xdЪS,$ q^\@ofʽa,:J*ؘt 1vQTP(KsoP݄X- ~ώ+mJY'xchȻ7`0 [rC#]7escUinx4 KʼnG;`JS|`ԂYO kw>͑xtqC+ :5 OczpyYK2SpjKQf~;{"zZ/) 2;=nɽ4#J\ѯTd0,cuec*wm }jUFT*A4%>L6sR6RG4kǮצ] =H8t[\:86U?l|[ 5DJU%G@9f+$}p3̷0ht1%X@-(Ц@J(d' ѐ>]\V~R(ezWv FҖLK1R9#V=?Vz<Q"}ؤwM@ vVқ^ePD@)1vf.yrD/gv@TŌ9R8O;놛A%F8WgeDG?@8Y}} 5h#C;1{sCsCwph2iK_%N\!@ 0 r-z`Qcŭg| 펍2Ud?4*N:<}9iL=r[?G~ K(Sb̳?կ?Q_nI3!ieszxL~33\r뜽3גRY4׮%) |YT4*2*冡 [ymr|‚JG(:y]BTYFsv5cRju n*;@A;Lնas;ٝ,i&֚\~xRaVƦHa>{]7 oQgvDd&PEf$d5̓kjmȕp7ժ,xP*srNxy%0`u'w >6+Zmqgh`K:Feua|/r!\ \Vdž>j ^\,U# J5)aZ7M.7shoDդZZNaUs){2}` il5; bXE u06QיԘuS#a~7grաdɲN2 3==l6-Xi-CR YrY(_[X&;P* f{7R UAhUu=-!s{E`77RdRyVs* >eYXOr_Qͪʼz3o>IHK#l Aynh S'V*@-]!=9UaUq@k HOSβBU}uyيN~ړ-_)vi;0Κx:_fo/gV(7/ZVDg]-=ҖHI[r ΍/x=h ^CUdHyʥѦz6wE}ht?Y97~u Rꭕ En90w{EV9%6auE%$'T]U7[ڙF1qoT*v-rW}{n^cSAudca2zV5DK̴\СOU\/=ۄQ-|2bgn}BWmakj>4ᱡsc|<؏E*gDɗYTu3rw(mK`Ţ1spsl\|2|Oco}jt,m\]ETVn(fdFVH{ۑ* *~,߇Ʀ6W*G,3b zW_Y%t;Tjϣ]v9*T{];Yг:tPP3xMQ?uRl-GәcDl/!Y+h!(ޙC5_RT6"\y=M R\VJ:B\V3LIy[anzM3 LIKO#\ޤ*^_r,սgor=rߴV`x{y wь9>gW.+%" 0fPG "ş^:_|.ь12sx˻r戂*6YJ-)6{\eIy.|gXYa3),6v$3SśRtolj uHW>ɡz1ƀsq[:+Ek$"=d*<4g]Ɗ,[baf2vkw+pݢ>e5Be6-i[ߏ+Qouȏ]hF}˛s򑱹_+zlNc*;>+o$'"3)wӨ3a{,( c{` (kŒtUe.LG-),5.'g-RDl:WH اd{u7# i Ĺ9T.7*XY*d]wu ӵW EB^.3e&6b:&_N+7+WѺ;g*tN[Dnkb6'־V_ekUkk%3*z{=K{qDދלHgtCrX$avO7 na_kGP::"Z憦B^K籴Vu7bkvhmc(nUQYnTB*12[}nykzpP&mYu|`M!rWK}dP1e@:XuOwٛg|}K#87Yy -1*I>#NhaI1Jr Ę'BW1`Ϋ"n)AE.ߞvBM Yl|~j.w^}Y vPu M8hħ`Z h^ӎWYm]rKZXcX64K?K>ArjTYGQh@jXo vĺ].j"^& wyb@\$#DPeRlZڪ1pUNosT׸ S)TXڷ*!F' oz[ {>Va?|ǧ?9hؾGI̛&Xikox֌3 @*Pozv,gUK׺ahR׻ps.'nW۶V1vq,SJѬ-$QcP Rضxkoc>yRjyь!e j5F {þ]TF kUG.SO`^N?Ź3}-OXɗ&ؽscֽZj8[6BˬY(n/Vu6k#s駏mQ>;L(:βq6ȵ aaaa٫EVڶx.AΕ-{fwN3JN &>Bw4OiFt'F7x,a&U-B\(Xt[ݓ7[r${bha՚q7ZD\m.nN+gVS ҥEJjR̙,X+"k):0Ozm0?S>*7> F1OE5fLL٩c;sqB׺Qg,!:!~qaW}\MyS t9|^o A&Jё\"g]ody J{VQXlrS֯?8{;KCUMt:a)&HaN1ФWYZl|[)KI#%?GLz<㇏x.!%oK׍ZwVa,q-)qASI*nX0W褻U`8ϙ۶ ϧog21*3:hw$A޻}du` ȚG[ mTWw6^DU&7٪D&K*T& %ZPdl$lx֤U:lX PIG'At1OF̚?v{d%[aTk͙-חvmےl RT8UIwb9s՘{?D%Ge>3G\R:x=amXUZ*,y軞1*ߞ/tufvcwzzͯfj;4+ZBԵ'"dL3#Ȧ\ISTݺG3uNN?k[$l-`՚#l*,WjVnm,x/U1n-[_U\(0VjV3  8ѝ6 ީIZ_?U%>Eiܭ$aЈ{DjD9iaTȇ#<09P3;Ǐ۹[* /=M#,2FVU+~m}E%kbJ A+ϓTҶqa5UOM7 NEȃn&H,y] RNV<%=uPe-;gaH*a(?_WNT;܆L`Be902'><)Vdu[M' .J:Rh4\)n3/ݔQyɁaek@˪9 h9[ţXݵy'8W+y6jKb?;S4?=_hbu[uk53aǜj`u]OWU둂Vm뵶n߿6^ѐ*MyunhiR$anN;Ld364%;K?Vr^T(2BqƦlY3rܶlmK&f29I'̬Ez~g_m1JaUTGfûIL:_qEp[㐛 Ff/GTׁ^B FtnvkB>/eyFk rq tG[̄IjyNb%u_u0aL?c✬t0o勃N(>ª0gWU[!7MDl%T;*F^ƛuVg\Q}I8t$Ռ*̥}2¬]3|6j\ձA ҍn̘bֺٗܝS(PXSe8aF*X*TDDі:̢qteE?I*:6S?f&7gfؽ}:1S"V?A#Fyݸ&H'ёeWw5ʬM GeKP]k31c8z,᮴5d{a >3-yXS;b~ [Zq,6C|{YlʹfCU$C0 zW'uX+,Q߹jc"?Y{D?DRP{xҊ ?cO bPj8ȍ}!Aɼ Y9p3Y|?z519DƮc(cħYU?5|3x`t2-bߪ5fIp-Tr\#l7vܶAI 71Eytl7^siS[kc\ђA}D5Q7[G +5+п@c}'w6k̝^<1'pbi& |znXϐVYBM+2q ALvʟGA+bdok"?3Ūa2y_,Ɣ1D 2`T *jL$l8Wf]uI@rw[3?X,۵_~EA9ٕs$afF RFnz=N;ۗ*sBK rnMeK|?: Wý|&R[qPŶT~s7o WuHָ֠ :T >c>$wQHk`."}$ߏ8'+NyOuP!a~/*!JѽNIf*6J|U?,mDAދodJ;{ȉ%u+v"9bG.=6Y&;(zÎ!]gF 7GCSVEDIp[q)^2j.};w楉\J?[bôv0y#F-/8>>#~B0*E&u_3y"4I' W=u"dli^4C aϚ$tF (If9~w^>rG,+3uA;\{?,ۋ3FQ[2"츰6Ǔ^>OE@%(T1Q`l#ƘTP&BT^S|%2ϧpIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/fritz_d.png0000644000175100001770000001373214614030313016222 0ustar00runnerdockerPNG  IHDRWXIDATx$Nq@Imbx0 %=0Gjr?]s7> 09O̹~Xr }+R*Zۣ!ؔ/[+<9@7迢H:D^.hڃ8cJi}0 dܯ> Q`%s:w V7n'@y8+a$B /f^ڂb&k`.cLt֑(Z%u8sZZ1qpqxYd+`uuC] dz mӾ?Fnk:VdwN룟7[Wy{> ro7NYޓxc\8`-~2sYjOye>Mf6.OrlH9w_řck+RCRr7Ɓx;:) Fǫ:|c}Sx/@_ x>W‘ٯ]2jMS3&,8U!=)8S&%FAJw(#jl~ӯ&3w @u5.C1tu ^,(5C>Ehl̤LRL}D% VfBS@0;e:֛\ƇX)7FƱQXZ2$>k,sѺ+o?7aUHPb0[Z=꒺FSjoeUZV].=Q"o ckH!–Jߩ$&d,s@E@(%*#XZ*3q$2fpf%b)$Nۑ( $D-ؘ)/3̝9/"8~7Cā*<[iHy˰+x4pjKٜ:X'sJs+QA%=b$\ل- dlۅ>˓˟з Gi?jyּDgjBb"Q,834w$idq$KV6~WTꉄ㦲}wUzEqoѹ*"=3.@D%+=|l/V8n,S u lejG:qTT{Qw4>=[<@: di2*/,&VzMJRݯ8 >y]b֊*0N/R53b褑 ?w4؂6MZDFla|>2e OM'kͤp3bH1Jh dȟ9K gfdU!¦E?t!}lcrJC6NB#֥CE >5ُ#FԎR~ [&pV膧3g20i9W`?nx3;Ur0#I,GQݿrNIt%JrIԎA;j=Cchh,LCI!!*EWUF:\jVN')._a6ʤS3"(5~0^8 8a*B-E-NhZyd3[`ؖc]0+Ţ⯡2N(Zj}Z!Oa(CdϺ%:\5fW`S"6O2&UC6g:-̠ݽ[cEJ`FJa88q6jҊ0b !LT$;f}cnZ,neYJ߿nYB@'-e%1 Gtdf Ưr4QP@uEȜp4Od¢94:85 Lm&մ!w|eɦ1sVkN爚>F|>q8!OADW6J__ਭ_Ae9ep4`.UP c+J|}<XA1Gywia͓Ɩrd2 ^n_Zq_9K&PJU&e%40zhXH_jA ^FYef4f| S`pAYݠťA6dLfݒ)Eq:9؊4f&u "@?4*S5{WFo; ՅDAE=S@Y32:m.cUtBkPz g]iBD Y>,(_e=&6[3|ryz8y(w&n2[Ԉ8w;k8/'a _ڜ۳-⳷,GDp1F[Crj;Ay:BCLpHC3uҐ!trކT:)_[p Sss]^[̸VM4_֖~v=uϸU&xUׯiC9j9a(Z>j "^Q-nq]o'8kPbϞpCھ ;!-3'scg5R-v$Nct׀ɡ:?EhzO@ʘ/jߐ)WWmXIjքJ}oVƔ3qEu`4]L5tk7k/36C#>0}jR"/  Lgz|qZЀ*o 0 }8n-_|b~+KKkA,BK?cY.ۏO4jݽ>?rڿ)CcϧbjeYaRWU-@Lxn 5B{s$ m?F$"U,8m`p|nE ğ=HsPҚ 2)1Ty )Iǣwd k*t ~h}YWЮϘhޭY ci`/ɸtz|^0wyF2 *?PJQil.R;}Q:'d\dtoWg}*HJ N{^j|ڞF|A/q'ș ̕ڶ Aܑh{'{1꒦^gR_v- { cO<\s;' [ΊV.*uz+?ڧpvQlʊ2 :3 |BOv8RĔ?qysjbew8m==I,;D@iBPT6F"U"5:GZʇ[aþ;6]8ehfX;aSz%+|ᆧ|&H9. =4 ̏:CbT={r}E &X\H悮Y="譬m"s&П].g.OY0Ojq*Q  v=\iO t2HZt׊~pz8s))1De{JG8 OV.1sN!-t榉3{: ?ZymU5/UVrBE L fU,Wd 2|Xd] y1Sܗt+RUyשM;#z5ۺjOmFe+Eu\b$wvs.ؐΖuTUu榊 dkW4*y۝5gSt?+W"k+L8T|:ccI;]Ko |bD-B_I[~Yp%oD6s?_Pd1p@?VR-gR,>3oՙdީX_^鎘2*q# -UѥXp]? *C^;|"pO+ZJP&h_QhīHLͦ;BɫIwtH }WvﶥU}hvf2 Ӗ*8+͢KWįZmW2i [:; [@5OggEp #5Op*ʿ"$R`5:ra`pńA! =yV+p!jvs^eJVd8mbP34V,ziڇx5@E[[=brWiNuk8pY,<іsRYRDCmaqgUT ZU6J6 zڢ֩VGJS^І-tWTz !,M#5d^3wD!"KF 1_2.|O\߿stQqpU ڮ2odNA=;`idOwW.HWp&JB+;dŜ+&BՐ:{@KTRzGjw% &?J\ޛXueedH{S.} 3yU:5hoJ] UyV?ت/_UlZTL(Mr-o9D PRv:_vzEZbqQ]Smb_VfX 9@q^ߪKSf;2sƈ7щtbWH^$;ܶ{QY|ÛEhٲ&8z?xD; HPbI9~.sBzA}mD_, 8OIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/fritz_l.png0000644000175100001770000001657114614030313016236 0ustar00runnerdockerPNG  IHDRXXc@IDATx,cra56C+8y[/f<쐛w!F<S`l#50I'"}ܟ۟ϝXY,Iܱ}߻unLY@S'3%7VGo8^=<+\{SybYsRkBUQ7ap`۠r_)\'qlbD^oM8H˲?앇naBG.T(tnJ+8xONCl(o< M$iHŲl F>2v᧡Ux9ߍ' º˅,,ˬq9qX|^N3v\yRH8`vPaߛ/ބ'vI,Ij9%U/f I6fMIBHY_Ây<GZ04?U-I-_/ȯ(m&>mL-‚|>=hسNzt'c 4Y1B/Ӷ(mv*n4*L&lC// eM)fcɕbq -.`ˎpqjF_f^<.NkkPZCX(L, 6W׈CrBREcדޭq~0R&Eȉ {3(iܲ_cQB5BeG ;MZܷ𧏴dU`Ӷy b=Ho6 ~[|/Iym>SXrI=\ a6.7+:>9[}S<8b @.Ȃ(19%EF(#Ȟ}%eXK(wee:I?% ?!̢TU˯bbUN9T#2>!YB2 b0V1A0[ .u.k ||8w)ZLeWKPȝ; m{$TµQdKGUz ɓe+Il'Y\$z8fJWca.bac,"^SRFR ݖ?zu돫 E+1稜u:'Y^Q*:QTaOy%šV !:QmvVObȡ {sН:2X( AV^yt\/˙Z+y*|.yH!L(lw#B[FVt:"qOvB(k&X_B2V=YV%ExoC E4k)9Vh[臵!\N# OvQl3VpZ)pe+=d|;. sD=7G k w0 wv&Gb34TS6yњw1Vubvu lC|#͘/JF#Eꠗ%X`Uz !K JJPIX 9,<ؔȂl$2(՘y6W@v{ؔ ¤Rd"R ʤ?Eq(6 Dubi5<}!hsb ª]%^[U8sܪlU{P䉻I]#,ЦrR2RwEőgb%7sͭrGź{nc v=v , 8x&A=/ %3MF挔{%iAwam,V4bꜫ*(ZP\wh@طbD}O"0EV"\[mNpV++)qk>M r4%6c!gomsBÓײy`d<3V0͝Q_@|n;r%FUb6"S'=??r # ~ yX}ԗJ@ + q:aO31-^fl=/1$Wkwru(zդW^ Ed=#.aeKe/avSH6wlvpb: ULpՌrN@7$ZX~DZ g]e•2QUvsH])M[?ZJ]rEy?<=<TǮOC8}?>ާ8M$M ϖ|:]bu<}}OϯøyHws*԰<fB-Cx|zv4_ܮ:&O9q_GMB,c+^/}zn5$}(閕}ǩxoIǸ8%7riFi$YyS(-&@dԗ}3ST |ñ¼aPWz ~fwB4#?Jx=܄[sٰWב .N z-QsE~ p$/)i"7 ]jȤk7}BA'-;SÓ `.Zׄ&UzBJ#HҊM5:i2"d̿y&ϭ75!L{1 \n3uBF]En69Lŝg%Y4bJFY2kRj/3T:chGMdz-i!qۙ6؄B(tL 9UE7ܗ&ںYCg wwOAL+&n\h#Qu3Pb a&hnnbA/%hXq,Mv1%8,MBhe%r5\+S|J0|5Ux7RND$FI z F-f Tѕ5U @DࢩwG5Wk1b&(VbĹFQ8;=h |572"FQ !0IlLxuZNf*03eev֔Ia81ReGNU-\ZxʢSctpuDM))WR#| UfnMDUg>PDR`{MAQR/N+EE|!Q4āZfZifhт,Ւ#75"猈:IIa~C–)/F&+R:"/Y_p5qas)ޛl,I.g}ߝpkaSHp~8=vT t 1]էt8́9.;9#BJ,Rb#fId@ß|@|aS"W~Ar34m\?ƲCw< ɀAg xJP~# qWk.+xhydI8:RqsSٕ֤I3=V%]suXeNZ jmXDkHĠS+KFn[_!6 [E>!T©fjؿj+yX_+颚Rv;&SEmoUboP,R%MUZE_K)"$5ަ yYT@)}^\_應$Z tW+HaĚsfb ~:5_gbZnm˒Lf>F*rAv1U) )kѢuWcY3`k="QF6L"wIиb@D}UF$!3AК˶|!Ӛ쫑 _Z.tSnec-{3GRcZY&]I5: HɾB}U$HPeuZ|~zl$"jMۂxVDjU6W *"ԯBW~l5xDgmjjQjeSTk1EƸݛZj[_X>pf}&la='y Ň&_ R_SBwUs DD9vDDD)MƴZ**8$vα 5ٰ lkh;mƌjs!jMea'lՠxeZ[_Ul'ݍIG[d /J\ჾ]J񎥎 L DLu0!73ЏCo9@%L>ޘ\y&aq/86#Ͼ{ E”&=U1%Ĥ\?0Ĉ&Ke2h`-pϚ( KG()*.&A`祼%aY(1,KG6 4pZpj$їP[NLmrduԈy"V\YɚX;MPB`(&զB2,Qy Bu-IWQW14rz>Q&2$f:$*;Zpa)zpz:*7D~dٚਙ U:gOSDјD9]5dג T̵HŖyZYxBuj骃{&P6`rg# *-_i0а*z[UNUɵxEt V`/ <2i1 /:;iJq^ h,LbisM  i7I3=Zk%M-3Q.&L1RQg/v5;'-njEg5˓iZhSۖ!-fƴ 'cn؜%N1Y9d~+"*RgmD[ViJU\9KKUꮞB0p a`sBj\fS&5[K|m׊Hv 4b\5v=nD\ف ̈Yt035yv;,^#mFHn5 4eoQqό00'.az@RrNj]j4lٛVÃok2 NTs;jBiXsP[#X;xA`RNh@@A`^!EN]\P k2`=+1{k7FP+1a{+">N5_}+1{Qy*l`eKFH|x`z%7m \B\x*Y,l@*oIW"wث1*8Bi%ei,FžǍuR8;ZS>I|>moxaH9$1O +DǗt[Ԑo@*cV&-ńG<JdQl.‹I먰׈mH OUC6e9d#wCy{`J2A5x\ +A?>>_>&N5 "8-x0%=E`D7H?5yW) C#+&3E S쩧>ʡ΄O(ӄ+m͈MgEgSkz of,b^"D;)!8ȞⓄz`Ugr?O8>ђqrjB88?*ϖ)uu.^(mt|}0' HyIصgϻhC Gx+ FHi0gztEHX9Ldo2ZPкC ^c^VaQS]5`'Ù&8n`*z8K[: "k`ueCz$Nv p*P ^GdJѸ/||]#u*Q 6TT .X"0u|k[]%E>/A%G:i^,Y&ǯ43EИ2P*u|=O zXBܕ ִ -D7MHK4 I$ PpS"nomx'qq̥a:ܱ[ \fJHŒ~J%WZH 2_xۣ_ǀYTtAp{}L'sdԂâ:z?.`% [lx~NʰՓU>q'*葰vj'F ;F!+H$r+5~2[.>ջa„)_ms9^RMeͲ@Lͷ`nT`_VAdG$4KR>Op@L|bcnkyrd< ycwt;7Yhi,YRxP Fd;M}5BmGdd=#LQy[Cɪ.b&A"trf-p룕i#GdHnܶY.Tq`?hS ;_ [h  HtA"蜨U}vZ,!jӲ= ,Ey:gxda'*(5YǷ5BzSm֜]j:_ ޱ ?M]|_[PtWݏDT?\c%2BH@>x}*Nt*5j9ҙN/k,":Bq^8ԞXHuy388ؽϘ{}/v>f|ڢ3(E( Tɮ5#)kq22zG,,<+ǒsye:9"p)$N}G)ú\0k2'>uN׻>S%osn/˧G8iK 5/pd @͛@=11Z1ԙ4Pp6ߓXrpT\—ꖄ-eU^(,2_ʮ*tbt8>ǹ8rL\2ZFG&;\q%A|as:m*$PU0z5 ~Pkf3Cy$MoGwjY{ZY{7w |x !#BFpৃΠKAq[M9y=[x%1 Dp_;0)tϏhӟPMϙW3V.I11* ?g!^޸HI!YjIlWP"HVEqfCŀ1[0wֺnͅ蛭$fP@ :LTzF\' ^55N= L(i.bCEP#Ch]4cUIR QtSګ;+u}f5y_:#>?_y")&}O}2k{^75S547x7{'d65.'J/ cERK۸Ǥ)BU)G @C\J0wjE%r5uJ2@ѮZ~eա#TxUW@Ȭgi?{wjJ'B/ϸ>I'ܥ3nh\>End.3H*~DU PO$Q^G 5uGW4XzNq _*Y /IS{*uBUu?T{SEg`|>a/ ܌hSڪ`sX80>--$Y|}؅yO5֟Q6UvFkK".ql\j&*˹ R8_a9ך1ȬA[޽S#7" n]eji9Ȏ:vDEL":oŔV\(p~ly a+J6H˻tGrX{ ?eC+ EBM AOWE:"qT|uo#.iPP+Sӿ&<ډWxhwX>^$PHu-..V)sn#=aZahU7Y,G{+5q]th&P`*ӝ{uM9ws1ƷkNQ& XSrk1wueOk &&8^ w_AVkc&,Ms| 2G@smq]2%?<2VkKk졌cl1\,r:G?Ӧjív}<46m;n68F#-g~5F?0jA]`aL4'G{E}wskDïB[[d{#Lb[j8ŻAn-. v)V˼ {ަ>}rܵ}Ǽ }-k(97&CQezbxIt! < @ _Co4PW4J6c[ƞ#ÝD a&`c}8fVmՒ>dJ#+ٿ?47;}Tog8F{9i#s{ % s1\ 0JA9\tp?ɪF"ظ-0"S;و\4 4&c5* (I0cHݜ釁[̀4j]UC7~F)"JQ;@-?eg҃YR(z#T\x νRm60wag]rW#)A!C@;wr4W(wt ӽQ&@ab2k_3.n 3%ϫ0t\1 S7T^CAdԪk-a]pSp(q;E ($ڹi&|n-g>@ꕾ@v 4c!E2(֙m |ZR!d^3VdP hgv*mH9Du*kh.''% (~OL󩜱 W?Nԇ+[SBN R;d~<_qO''_B6MRjRbXg s9+(V*z;$K+x4L늘[I<97w^VYBȉ5FsK{e bϰp+֌b pY -\ɂ;uM f<)l4зww _FǸ;E|eו,_S4ZB`5u_Z;`I|o݄%J•kGP Q1 ,BH28cP3cUu⃉R{]>44g&*C ,XsyӈE-"Iebf/$qHGzEV%6~OPE˿3F)M'dng 8fdMyV{Ȫ{{ޝw`rt^]tbFB. iBMI֎5RZnsK] 6c݌p\2kl"h(Т2fR ^N붢VYDk㚈y ob_H'[t^ѬR\!hVx5*P/ts>׬a`DycjQyKK-*Wo)[:|R,cX"W >$9 ^G//{ p`i7bԦ4v/Pa;ωģE0H1^;qcolh rMAU&"d Lw$9ۙzFBہsHsxRay]8E]z&v_?5909;532 n5\4.?px"&;$vo:ǎo<`eF(Ds3Ԝ4Yc$4$N4V$CV|8h #lk1/5:ۯ[WȢ$aݢR6& (#_X[\^) #FAמ/o+)rH:loMV36*H0Tb@j}`#} ;γ{w$kQGacBA:%rɩj0^&(Q/ >%&>TX #aR>ŁbQFhrxf]ot$D474q=UK=nO9P}M:\ٲuc֒]k.bUybOE}ͬZZ/@(V![R_LW iӟ¥t/<禠LBGdGPnњ;СeQнK5PJaLMMΣ82P1V{? &wRx9rYT2`s-*u $;}|fZ0f F@(w^AL.)?~XK0\ycM^e{`T=!ƮQ:A9Fk zPz;4룡y08iժ @ NTYu=R@5W[7Et2 y T,8克ډ}z"D7iݲ!`=R$[)-UBKRˈchKwK9F~r 9nlgwyͥZ4+H{ڐ|\Z{F fdGavۆ\Ʈe 5dj~\8%vo{i:bs"ƱjGyH A=mIq 03Lm쯾l[?| ɧWoD/yGnB~ $:ގoMiǜ><$k;ǺMILIьyg٭ %]ϹWRy׬Y&~xV|5"l`yqqO#`YU`5Tǿ&dWfJs=ɒ{Rmsaz9t<=/F+Ps%1W67.=+a#Px`B1/߹H $3^w׽7]L "jwFL1iapL KIOk0cK.SB=!%K)e/G b߸<=qnx^ Xϴe1RpSxv&KBM 8Lo>V@NZ/-|5kJ", $k$}5X}_+~0( '(! k2X薛;rr@b);Eld_ktTwl{OxWgv{`ҍ/$qCYVct3;lq[׽KS 7ʖB=wE~>#{U T,(\jTB E?Nmz;a1~T)HBd#m) UIR <M!k=<]/71Dj[9{ pH/(\W$#_S$ ~D˿W$l;ay[ 4Zț,3cA|wJGt-XD[$-A7Z6cBlzs&hň6i41oDyy!i7vX*{Zi#twA sl!^_#*J E1 S`0k*)tܱ'R4+07 DR1N9H#T.˪Rb T\_㮲EX90g56)fϑI( ь~_Ipf&mTAv5b;~f R,*;Iex50+~QxZ4x>i ?g!رV ӳ=dxb}I1f88M |bJ2L[K/\(xyߵvgM'Q=J:+Ir2Ge=ʫiI|e|N )62#įZp{טad#2} [f;d΀fZQ!-V5FJ9XđG%TpV$ ս=3ܕ!i (g(ȰcLHv|a9{Xa&U&n;K&_BCBK%6` Qu @jBV6v~E|p/rV2/?w*EyՆxXf*Cni|m_ 0RˮL! {KqЭ:2*@Mx/m̱IAJ-_qmi3vPNi'g &s jsE7뫈b0Z! s=O@Jl Ў-Nvcz",[ qYkݗ0IBs̗Q;z9϶7ÿEޔ4E }W>S)1QLO{{G{o7rZ3[ϋqF9ϵ,B bx+cb7{ VX[)iq1Zsi8{7y >t^X7(9*bZ0If r)vQhU_*jIۊ|gW 0k/Y[!S*>Bc]ʃ?hFPkvLC^j Anc1Fi Y <ٻ6f:hb{={ MYىveܞNfe n.QL/>&Ys3]s ԕ]hk6h - 5yjƹaMF a$ %s{*$eJcEtpb/nM},[ Mk5 2#hnfxgcg)÷һ8 km Zs1@6^.G?9,$ D!l|(h56%sS(UE}܈Go\o0rkt̫9=1F?'R);Ѝjd%d$_zkvm S)FمT6?oXyc~Qbi:j *iLТF;Xs RZB/ӆms gs8uӳ}e=Nۋ.X}hi;GU>ݧԏk_(|N֢aA5G;=ʄ.,*d:*~ Jlի?i_K`MA=G+ Oh,%*2Jc2B"ܪ}?p]u=⭵@w\J(3UkT׀[ƶLTGۅ$]{=΁ȼ1.NA 0P$0՜;V\~o,XPfd6 t1-ޕxmC]^BB2RkF831ŋ=#>^>;Xyo@S' 쬾,hB?XoUmU?o*}Qe`/o.Z#R5AtXu| (2_IXaXwA"x1p)*T #^1IVa%%'@-H5n *m|* 0)RK,l7sI +R^x;:A"j68=:Afy~Ov>*O ##d:tގCsGZfP5z?VǭVQhbes1Xr. >7-Ikv"].eHr65UGX?R2V`xP^d/KW(o:m2z[՞ Ay-V3Kq\D.F]<; @)T^ʭH&]S<]OgVEjOyߒ%Zpݵ:ۭٴMb43;AK?TIn$%Ԥʯޞ scKrvf1x~L]@I[چE5f'@v=l皌!,aL7Cǚ=kLOAYC^ @5AcǖШ  \Pe}f6O0n4~v#~ڱk/EF?ۇ_o画х622V @w-F)n5 Z)fy|_=[BYK<3 "Mds>TuaU&h]U Ċ1u K1>>7TD)Q 3gllCbjҹ3Һֵ!i+%]CkR鶃rS[wXH ʲb# , DRB84*J)5k$ Z Ś(ʦ > S69wJ c!]4E>|CiLZ@59R~4Z>:M}xe2׬<u+.Gg8[\M=şynC)CT ѧInaAUɮ|.MG$}y T$ {P2 ˜`:@6wl.hCw1"08gX {o-%$5_ 8Yv:=zM#U'`$L"DM_9~9:G;MVUk>`$l{{lC_1c;/_ގ|f w&;߫`Э4or)2raSzhQ*NXy0- Z8 {d#;\0$[|d@?O Fm|eL0`Db\6BL}n۽pJ@mX|~->9BHRu U׿R~`$s/#QHxm-lw nVml͠5BcK lKZIiب Vdu[rPS5bZ +"&?L[՟3,Y"!WEQa C&Hdixe Hu/L*F:n3}′A*N|C6"ud;g+ewLS& |mP8b+•ý7BXaF?5^7gtuY!_YxZmf< QrIk- }d (exVybay&G/G;vs] a~cvLQiA3pE8?1 B,l&`+aSXiȷM 1X{?8pnnҴ+[!9jR[!]p{?yϭ='{fv_@'Z˗ѭ嗿|5_c׼exvH ֤?eg>bh|<$afAq"w2M鱅'ffbv˯y?CKaӪ: ` n1PP@ų/}.H&9Zrɼ[ϙ8vw\Ys}c(&v=NNl?,EF.:Q,uc)ZRK1/+Yzi}>^U)< ;"7<ӾߟsI5F~(^|gDv~m?~Ź]j 8^Ӟ4ט^Xw.q,rj+c5уd36281:*B?ײ`ܿ "A=$9$HGfuL1YV⪞p*lۏN^u"=$ SyTb)ܽoa)5{t>bO?OSM:XB䑖Jy1ٙ*W|3hAgOxɗt貛;|t^fvΘs>dyFr:h@ZHBp05m vm3{, e둪\uHvTlw_գAqSQMU*Z < Q]=pȂÐVz.^'ܠf}2Roc%S\!OfHtXf'F-z9=R>/!ﲧt)$v2tbm=('ɪVD֮r&^2!9[޶dEvGhރإd?'!-$2siQS$*SBFM}R1L]ffNUD&JPTx ս}a v6df_xx˕R7Du)S\]a)CR|#Oǣc&F+qi'c z[U͟]"pEBaҒQwߔ4 сDͳ)ZO_8G"PW_|Ex ^K>0/\j* WbV,I h`n`(> =td _h߉1m.߈捹njfGT$[ͬV!s-/@{`/Oq7G₫X˅Ǘ#SU3w'(jq}FJ'\Nt 8xDLF)k* N!ZfE ɴd)qY. &sjN̈˅<(V*2VIw1c7^Kl@9Irn4X_ճ4l%LF\W\1yǿȏj=Y+T`{ H]*kR*1aTJh)Pl} 0 6.#4E~tJZH%7. 1Sfv ]ww Dә{ɍcEf6jzjWs(,GW MJiնF Gn ?k3UfPKְTymgj|:r{χr|[ =I9w#/\C0Țȡ%HqG?4V&(c [_Uvc`>yҎije[Kkn~:T*O愣r \ '4ji| 9$A9 hhH.T,'tϷv1F;hHj`󍻅:8N04O%TJ ⋁NQ3`Y)U?I`aI 8ȲLZfIގ&9lT٪ZZ(3v8ބ)8vtiO6uLlojUpGU@%<LSؤ,xmǁ`h:xOxzh^:#!ƸEۮLz 7*l̦@EچiFߺh5' Y_4Lya3xKvk̾Ёkӓ7b5/>+i f$9a;̬^*%{:py+T"Azdp%Cse Qaet\Ant -P #틫1WvRW0XR3m8,Pt͟Q* 8wAo *Q\ǟ~W_eZ tBWܹ_7W,p`qLϨTO.p+c@t2&/07 bG^_g+Du˛6,x.O~<`YQ ӵPS~i^QʩH^$>vJweD(!Q/UҌqO~s}ƸkL{?ZVЪZ&+\mP/l)̓MJjm}^Goɇ[{'T\_EӨLHG}fަ}|=T^8zY&q֙$Wun*⯐e7x?Ǎ>6 9^UixJ,NK`g-i GaG,N挄AJnro?Tƥ\3ul8g~W=Cj8ڭIG;2A6@5 vvHۏu\Sc*SR3%<$ehwlCam2w7(;.t.篗^Ͻkv ]#TQΫ B%kxkߒ "o9#?˦(6(y5- e?F b Ϙ])G~Ti/#0=#~ؽ{&Tb@th@cϕPj/(#ĴR%;r; Ӻ M`NӠ[ZoS+"jvVq-D63DvLvODXOȕsYe*C郑V"tM c%CI7WVv,:'.lnV-5FůԌoF ik4Bw^\ ˹)@y@$VXlgat.08@:KȷC+)ґͱ.jb W͐ +ϱ |x\͇ʯmqHq[ћ@U6jB'[cw+E=fΎt75P¹9Ic2 sx1 yCct#/iT#O+E3灋$QM_Pw]Yv?J*WH1ԬʤX4#?bՓqNksU%!hՕpz<Sȫq\+L2U\d&9xө4 EL": ȴ,tEYh2r U釳nB $(Q&PPKSi@59$R{ete)hܩ6c[_@I b#Pa汣3. fBoGGi}?^}t E]*qt7VFBHgV r!SSPhn"Gf&L˚4/WtF>_ÌVc0SX4 9iEyu׫ej͙ޱ%۽$As, o, }=0~ߒףHGwaR[;eO\'r`h#1ǩ/\BJ͈n~|\}l^ Eɑdhoy)!.1i__.2WIZ*rba8sp`b]n˱"F`-jX]o%) |4n&ur ֑k.ҽϭ%\] U.>]PmN3Z } /JKӗSɞ򉬩w]cseǵO~VW^rG;/8tlLE,tZΠx׏Ż-TjEٕP $KW@L6l<~e7mNv9UįܪjԱ]~.*_°ƨa< :JR\ $qPR!]z;Kܚ|k&JnЦ oT40᠑|9;\vm z6o<+C4_sRL6v7D^|M]ĒZ/j)<`6OI'9lfL>q;z-zntvY.#.2#R=S_xfc:*A60EPHÎQM/G}rn]a>oWgftVsSsÕd-6(`f:Eyޗ5)9=͝.iG `` +"ߏ:nVNwKu`/&V?dKs YR$9L~6H&{Ʌjjt ӯQ茨Y{C`9_堍oX)9ũ$r@N*tQox,iξJ N\^LZWEp6f<ٌ Yr Nj3Jc s?Ⰾz]YI$ { t&[ivQ{Q8+9bKrУV9խH=*ܨ 0&f!5,7Y>ˏ_W+c\VYϏ˗ӷZu;yz|~K`߫4aJQh9&xF&Rd.5 .f4qxcrg-2n+4Y 1& DCV5GRz˼ᇅ\dNy;:43 1ژPjoFmb1kЄ0-i6{ckooj̱9NLn` ik?@Iy .]f}~^Cr!+i-EÒ$*yfݥ%S݂ :)v6NU3-zuESl[s.]mg2XVΎ*1*7ۏ+{I-Oik[3:oɵq49܏[;%B IyP{"3ŊZ_[lIJܬI<=Qc[N;ĻU-{9MdKo~DZ_ZJ,'p9RVtIu3-xE4l֜ӎ]?#v֊Ų ij$#J}1D4V/kJar&v Ϧd8C]䖟3px {+&CLP. j3gz̷.9QI}郕 6]cB݂i6DԊчaF.UDf DٞaQD_J2PCPf]"̭@AVJ9AhRVZA.X/V2P&(ΌRhK&T k+Dހ4пp'." ]N;o9?Glq=zu}d㛘R( +xZF%NlʇKͷt4 GTA!=S ͓)|ex]}m#\URck.e9Dμs-%SD1}]Vפ Ms,v1wbo=Gh+NwzE Mq:K_ԱEЪɵr|{ԭ 3Mݝ'nlbh׷/OζSX0y܃+_.xp>](*+/:K XBE UDGUG̓Fr,ҦƘƉ6 E vaWfk3Ę=Ov=\R ݟ[TY:zzÆULr:M܌&Qٍ{L@-H>}{ª#pXpd RbGκD ⼚:oWV>E."-z643E(yjȤY r7JxB;D:PL ?`cȵ=L!%*G$'gw%Kڻoch< 'tjm)t 0y;-qi14ܥܸt`؀jyӧly(wp,A=h4|Ф},@R3kET#ϛMV&%Ղy5iHqhU_p#eYџ~R82P֢}>zXڜuO+ cbA\q$ѻ+pv%SCT?Ard4̽FG>+VewBJ5ÌN$?9/x`DK>$/N,r$R!UӅaG.ހt I! ("=氵xR_R6&D)DmDUM2BL~n9._UnDp X/~ʩF#v \ o!18dfO.eϟ_[`ϩ״tZ5>'kNjkzrHd+H'4+wY|a2Ա80g~uSK8$nR@! X\YC@*x$i(pThWFB zRxccY4Zp2F;k _8ײip7%4(dC̹ɬ 2;qi`yZg@[*7׃1gtb$-g9n_y#B\3{uhB"*bAϸё@B3-,n]"¥;&,SiAc#]p|RDA,Xj"`brU}jU5pAY"<6ZV Y/mߞ=זdkSJ0 .4urS՚etGUBеvDLm=/LYQlm2O5v23@MUiJ=H8Ix9OX\yϼ,t@Dq,g.tG9F99jN 7@Dzަj竟h\ݶIIX}}Ufrq^l%ٵ[?I\cxrkM>.XKs Bif٘9y>xqԽ{+URb[NJeY4&YjeD"Bl ZBʿr-rY+)G#I-۾=Z Z$!@0ӌVrQ*3W]Nk Jfl`@t.Ϡ "_cM35緵ZJb'h&ePdki}"P2:F +N#`tU=m:,"\ ҅9_Xqf߭\id;B!QTz8>?>c%pSL}@*o叏zkLDa):"D3fQ 6KXSOIGm}1 kd--F;^QCsiCR(5_O&%R7y~~YLORBC)QS`y6xQ.Sxc4 A6v: 7wGJ8 '#8 {iAcv_ ;]n?Sdj8Tæc29C[0QtA?+Fn̽8D)Wr~kNOdnZkY?0Q43|=g =vT~'-y2#zo*Lj?Ő`]\yLؐr vndJǻSYn:>nQ@j *X nc…YIUs\3"(X.>SBcz&Tif Nםb#{3b ˣUq@Aɦw]o}ʶw_*33ŵ9!@Gj[Х/qF"ROe:|C:"sp.IyXYZ Y:`7r y*RhLv><ܿ e p{R/`6%fYjk-UJL.>~kFf'bkAUVQgJ^L 7Þ3$w֟3\7 FW _ޡ!>^Zt4}:)tzMƞd FBmKI0|^-2A㻐#<}g9E?ٙӤ]c7X˭ZcM&t6;p2zBGa`CTgyS M{)+SձOVH`E3mF,TCps9wRlFِ:32SzP;n5N0jmXjT (t0V ~Xa IR * zTIw1؂1{t'4n4NEg?sb)Fs,DsCut,  sE Rhx@ƹ, 1<1O<1V- [:yO1tײ0mHpzcLiR9P )R'5" WH ip8kc1`8fa/~(G| 5/=LH&Uc<:Qp\n5l ZkfgS\pSabTʥ$eުc" * |ݨ} ܍!ýZikjq6}̀)Cns$ tj` )T;^5^ XhGb Pɜq BR8;'7#߈>?SZ+4B3M[)$-8Yɑ*3!L6>zc+2o#zt}͐01n.2)}'`&Y/QX1la&ؘOTK}r y\ foc{z9Un=@R_>VM%z/GS9hA9{^Oezgc#,}5gvX%sHeU6]/%6u_ۻPQlѸJs䙛lqf ^{̈́ Uy̼eGa cy1`,7fUCP:ֺa3dKVnze,%inQ"' cF@JK?*Qb-"R2V QW۷=jƌ gde`sG{%|P=T\0qD?JBFZzO!ӵYȱ] TgFX&+pt"oʤ:`'1"t *fkg'0gtU0G^K!} Gc,0w@|Q<ibzafov Z7±MWa$*RIεW  ( o+OirIuSSy n/\\J#9:5_x͠ ׌ L2;YnΙbz-nQZXRUDvS +J^&D!q[p\UoR:Ir%|jx𛛹b7p'IQaٙV5ѭvw !(tq3AuW2h& tO`ۚu#YbȦ4!Dc,SMGNmK􅨭K6#hxH$cX)jqm,IM_X>G_mN@b\ U'{%^ofr.KF^z SsZݢ`l]Oԟ`cWvjndUkQJەqzp{5j!9[ǦڮE Rl]%lfҸg.pF=GO{V`jM+ӥ-oER^Vߢ53 Q:5r-Ϥk.xU9ͰbVz8mRB[jPesbC٧pA 㾵Z7X)ȭqQBTCŔ/<=};I56լ`9z؋:Ϧ$6$ޤgg,VbvLgz$wׯZoQjPZzAeCrv~IՏyCMeU;D|us(\9`jet؃63b(tZ#kdH" 9jc,MeM0]+ a)b{;j> 3["<(~ބc4%c\Esm6eҖ9DǟPsz/?zQyYy*QhX)*`SxݥVU> )>Z a؆F#UNkng/V=ۅ]u>_?^G u$~||~_k}?p'n}Q)DZ=UЬYq)M$7Z¡Z2m38$]c$ &f~BV gŕ*殺a<",*UQ2dڵ"p,)R6nȝ#%vZ )f=2#lyC{1g=[%>J9-H9C"CEGȿ^ϱϟ ձ&Ѯc% X۴=z1jwOx7)d_lb&=7 ųH!bU%&)W+ts783aUA,Ly-wύ9>#~ "?j\fbe@ju"lן?ZW-*?S fv]O6ȳ~6 pt9~:Pj764y['MlRYe4VTnzk}RF*nPˁF=եa(E'1!Txc f">&,LG#Hsgw =^1xJ{v gފ~+Ok7>LasVkR 7L`/`کkDĝz=Zf #ՐQ%CK,B@5D$fW/4IƹrPZ,Dƹ_̢QA* D$e]jA.ĮΘ)AMX&Lc“+s @M\ qs9YVm;NUThËv7=I8~,a6.}SVl sF˲(ջY.粻xxϏ 4f*ka luUL~M6{7gm'q9brb.^3f?YNu)[aO S&ft#eLwDy@3!hsx:ojQ#koLfB6*M c"ikXtf"{$,Ltܠk R* jj-ZNS3&˝zEይ8}k|mp\RM"1v]wwzfGitGgբ(ڕn﷬&{VmliF333' qgSkFVuL=۹zVDiRG}T \373y;5S+؂`b|et#Rd{( a.V!c! tSztQO hxqJvfH+t $aÄ?`0L<VAa|Mx_ϗ?βìW*^_~yJΏZ||ZZOtŧSmԏQ1˪?#}u JG9zÄg6Ye8m?T!$]|KǮ-%(Jy ~u,"ExCqȅEFoB=h(aSCh똞Aղ[ 1 Έ4-iwy'FǠ&<-V`罉TVZwp~x|oqj(5_}{Z?__iP8Ou4k830n퓝R$Ұ!cϡM};m4}kGۯ}:n,' $(P$D4czwK Yu]`kB%>(LT99I8feE P|}핾][.Py񷒑'32":z o3?8hZZk6[uW|ϯujI쭜Z䁮UjNk[Я~ؼFM=6o2Cpٱk^f2ꫮiv~/G{DFwAJiv19 Pn4|ỹHZ@hKD g)uK)%-\_4 deLdAN]io~#G_zpT %Fs1%jJBڡb&H>^ќEA#Uss5׼_RQy`r y)$Jɋ cfNjPɉ&> Sa]D;:/!sh.8oYpU;uw2*_J*=o"j2Xnƪ|+Q+ǵT#VdkE% Pj Zt II 6,+ԗU.So ̭g;%$|ӽ%I.)z7 C2hK;Kր&^徻A 7谎!Ohh.{Dv֥]=LTM[ЬQbo/ؕ1 :a|[ ,f ߣlb@U_*Ds&RV*= e>97ZI7ACt%~ ;]d:mo(48^"vjDi1$^\Z {+GX@f=c؅ ʠ `@&o?GZEΌ17έڢ+RІkF䳸b4Y-G:6 RtvF>wh7ΥJl7 /팠{Gs3PzЯ iLݥ(Ҫ%q=A BRO.\)Y1UbiGu|h_~rZkm޴O49]RHq|b Ջ=dK+rjP5-v"fy\hj ꖏP/i A25辘%ܖ;ͻ0C^.СϢXK"`Vh !̂%2DDwVW|MfFy0/Y!jWPY΄yK;Zn*}[uHZ)~;W*tbc"vZIIz|%iEMI|1pxY,A}sDmٸ!T\HdUJ~Y{@@,jWܤr}[ n2.L.d)W8*uQ[;# 2e$*R}zm\Te_9Dpygy\>;jN`ݝp H'ozJJj3CtFJMFY WyJ |UU.iMs@OkVD5̑oN2ppfXkJ#.wgE+vφP܄n64g74 ^ 5]a7zbE9UfC#dt ,# A&q c]TYhcݴ\Zo1Zg->:h\)dYqwK,F^g*3Z:U zGZ}bIk~zTz(k|cX^҃Ԓ\wn_CCmer5~h<*s+b:׏vƼ{eȶ+JXKfb~*@+d'aSY8uعL#/V*}1Ӿqykikڵy)*? 3}2ݬKB{}+߉@GIk$-'j&e1zrJ6ys2BelIa\Nc R Y:݊, UEüG Kp Ibq&pǘ&ƽbK}, M+E\A s0 Ѻ_C7xt%# V@qLYN8t@@K0_n:!uiqdL/AX4.%2/d< #YF7Jlaw-{ץ2MkoSSSUt 3ǾZItmY )'$gdOl(jG˃bYK*Grڎ9*y곂tՉpY5'5wߓ(M:z +Fs k&`ctm!= An_#Gx^ی8[Sv V5wobP|*g_FZ~0 =`5'o꘡(oמr6OJ:4cai|g4 ^ԆreAydhq+)-`=_akQrdEK{H`\3LƾB`)B'(s:3hb.s"T#!!!!` Ԏ``~*F%F~HXf\jc4iavU ѭ;Bk(=zǣ.%sh^1)#;,hIP[Ư$g>AgVyغ(+LDqϋ G:=avOYZEvR LF;[W\9b(%Mсa+ 0^ffo1DDdbQA 1ĵ+ 6Z(9Jf[L[ʰC庲rjf =7vhp^Y(IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/lanta_l.png0000644000175100001770000011732314614030313016174 0ustar00runnerdockerPNG  IHDRzIDATx4ULsn9/9 $sm料oRwAUbm0W*.m `uhתE%Fmh. LIZMqrؙP2;7風붟S  !e5 P*Ry^w>8,4 ɰRaT^DEyY˙/.Q^u^9'>?oU4U<Χ}:jQGFѴ7#s=+1E6nn&G]3TAcn4zT#ٱzG-~P>H^3DVm$ Ï YTc/ lc.1nTJT(aGV$xd2smQvvsFhc# i?6]E^3!\i˧co^EfXTU`2G >3Oۘݨ9Rvm.MPVDxZ;8q_}g.mŽro۶^q^V3߉uN=FR) 0NJY%4 zGGՌ#TE8g 2-x ^77~rYU)P$LXJtk(J")w4F e!%ޮ׾Le9}Eu{x^<_1,1ϧi3gy4 $j gSLDT3Tէ~ިMASq* +c*T{b(~}7Os .<*f͈ig9><-jP3__.9cf0Ѫsnë`mߎ6.LU(bL2N}sWfZ+gNYzk]䠪PLx]Hd&PfZU6]XlK/lUfcd=DU LOc]"cfDp+]L |j_Q塃?bl9L@qܳ7Q)}RX2vB:tJY:Dh(RHy:[SY׾mPU!5򱦊1YC5zH]n|ʊ9˲IY?M5ˬd zZ;~߇U>^~I~WkLc툇@f"&P6Ld ,TRE}Cм.&pk ),ںXNr7Ytk8*U$.-ksܻoE! 6à )}ˑBXe¤THX(}mDtU%`tJnіXT@@D.R>(T36"PHBCTEIBsozԻX=˜R6*>hVYӳ5TTĈ٨Brb,ojZ:nYz6s%>јT!U*Uƒ"mm}oJɈ/}f}cKTAž-}L+gPE#6=*&F O:"o0&ZE3C 춘 }A΂}Rc}̬r<#MGoiZ)BeMkʬINgM uS-LϨuѪYQEGW2 d&@-߾ݖff9>  0TE5xCfS1PDiz \I9ɓl(2`s6$* Y٠Z%YYD& *t!?἞7mxq1,%TuJNfjv{7A>m.,GB-1B 䄍ڗUz~9ʅ@E i)7x `DbdV"Q^Lqfz>@y~ML8H7N"gL6l~^GfOM7-}ddk͝l Ho aV fo7kxzjm9 ޥR C"}J]=18(I>(EN,DLjGrS8=_E di*S뵮Y[idVxp LDddW.V󹔹|:/tRTXho-2P̥<3ÁcuM#[DdVep#2sN){S'$}4Y[.MuQ;ܴUP5~F!͚ DzZ%L)ʶil32{P{%}xv?. QDip:/9XZ3 dd,޻6UZVbfe;qL#ݙt m?:]82*ץ+S)J-$=#DE$PŐQdQE(tvu#6Rt{,%<0'KU]՚nBo֨1)"@in0}mzB/ M zAU n3߮3gOć-W߼ '(1;y;z!?/m@Fy'jKJ[~,ǖ#dVWK}=6!eOwWe|9~2$NwM!|%Z_ZOPBYu\+ pQ.9۷4 uoʊg1>bxGP KzKF2э)# VKذq=%%Kp[!oՂMDآZ uۙ7\ra> l85_Ӱ'1?%*F)|y_898ު +aKD\ );g ak1-EO6)$KAXkŁmR\P[B0zS.eLgfȾ󓙲;6oN~>(MA8[c~ w [|:!NC_KöܟScD͓L>sCazmoϰ9k 1o@քjAh8|2H^7uLl=_X9}x|\7{֟Zx[/1o_0"VkU43WQM- /",Ü0nsbp=θ Sٯ\IzM5 l~P]ӿy]SƴcZΞJQ,b_Rdxni(rJTfuQ1Tf[g3Dư{XAJfŸS.cEĎ#ވ%,|YVsXھTj{}Bzxj=yq\{9PقsbϏBN]`&aEnpgy^W_POJ қ9嵔6rd۬ť陮aQu1a_$bDY?LkLwv3܌+F.5,9)-69oVd{GDzlE*ܿΓqޣ×g!J`c!*%1eAd"t J)D>G8Z6|wd}\ +Np sGwƽ3 #"sЯ0KkJ6a׸ry1c@xBW lBmk4JMh59;Y:4pdnZϨT9RZC܊"z`HrA"qehl_<2.]LȜueyz |}9pH|,16^clmG%N ׺喷rTn赢@21 5aϱ6&j$5*={@yUmԹscsܗկ)_=m(;hy{]Z4f2Uu~;β5G]N!s3^T/S6Td47tu‰i\Ԋ: ZH2Яu91݀> g atQ+eJ7&$oZ%sI^FNźJ P8/høoǜ$u?uM\`CZ+IH1ˑ6`)9mo{{{qBANV o,{s:+Ty^ȱ7iAݥ[9M"'bT5BwڂQʍ* 0Zf9r\kPFmrR} s~=}y:uևͦErE'ђrFoVQ^n؉Ӏg!0#kz2eR/{gdNIMJj,J*VC몏H %QrŷQ֥g96_}Mϕk 6;}Y\ƽUKǁ,0Yb2H  f0fAboWc+pW)1s Xv)=zB½. ?_<뾵?k?jp]vuU9A :4r*| imB7Zi ,^yECfFAI (x!*G)g 9H6?1 ] V4g&oQޏf6:ޘ A87B6ϼh"O3-LҺ l%%ixb`갷])o siOߟ(:EfUT]⬔aX֚1'/.}][s?Mu=QkpwD=o >XIPkFHgY2?/T:}kfcUx |=?*ì9+R0xl󺳪@A(/^weAܔdб2]oP)Aէ0p>""9ʷ 1&|]@!xs\suo1Hb3osZYgev *Pi9=lI,UJuٯ͵=V=bk+Һ( 4PݛDWE^&sׅ#m?Vfe֊3k0(c'.%W`?} >|~Mk2C^׵mML'3f[¬,VB5nԯT1?W'{zV6*Lmo[GՉcь4!:@D3Mu{Q,Z$V(̶)վ}cq|&ES8t;*OPhBkV}JӨU4\2&2 E祕ZT0 d? 2coxСY%t2;n =s\p":ĸSXv< "DLZp^Ҡ)U==L21ՙ^ 1YsW`c%P F;ߓ@1Ԫ} *3*+N\*DKqV!Vj*CҐqUd>dYuoJ\wEZUGitYd|us 7kHr+`P-xV]=؞\IOTFmBoAtP8|պWZ{< Nhqn [[kom[v ֻ™"M󅷮,u"k2R{H$SJy{߃chL*fy)zݍ Yi܈kB a{ 8K1a Ls 5#QC+$Zs9膬T 7字]Nko;R@/uNSY5W#KVpbcRZ[+%AEqD;zڱWF/%%voUt*ZWȐ&JT^(0ѴtE :j[;f[kR& (45uS\ũbYDqH9ak?7 62 v累cE@7dƠ*FZOu%/ _ڎy›TZtHce4b8GP)I/yL[bfpvzxY}9Us-ԯX@.ߏ>{uCڴ\1 ŗ CjMDbh,Iv]dU̷OޮA^kZ7j{tU& @b󚙮,rXY,.{{KƎ7 6y>_~9= fœ=@l+ہn=܃nvٰi'Ѓ?refe1}UQܐ8{fWSǴΘ$jCJ>z8F΋cI;X&0<*|^9]Q.@337;f5pն{N.s0JbuǓz=LBto'+N2c:?[xP=QtY橢k ח%Jjsw} Lȵn̵Zb̠DB;9*˕5-٩Y~?_y6n="/c]{Kq Zhrۨ@roѣh[|z'ˢ7 Ө6lGj`v;f6k!3#.[OSsc$aN-*TV%6,^k߾}АU=UHaFko."-vuٹxl6I/$r07Ge3WAsEuӰ#~{c#p7U4V.`V%ׂr-, g#@}1MCAkzGѾN>2OtDbU/oSg(qh'%;kD^-%: _f쮬Z[lV; e踬zdD۱+HFwmث9y5Y2;/CpswUǾ.)1aYPk+kNiYe] 1*GZi6y6->+a9Lptת9HxF"6Ko[wn['96n^WNV9(s@GZ!rx+4,rrN:_>2bw 9Zʺc&[''P-_ ݍSoZ>b1&?=_W@VUqΧc3g9˵5k(uq['}*]9lPeHG!mvu<=hKdzLfjG|H'5pEdJ 0h2mm̆dIE+E9.!iܣ%WΑ3I+^~W̢!"ٕy-Eݏ/L32>FH}o1$fjѥ:  saiun0)ڿ^osr2JtJ*?sG&I7 [;O$n[{w^7dV{Gg5"]Ȕf8Є#Do,"J|kЭÞ3kbAjpU66\V6zV2y6"|џb;{`$-N1 unϙn$2D]RU~` ޼m 7=(y%H[u)]$'mHRB{u\q>'ts_B?6ȗnSC ./ hÎYw|Zջ][ zo => 17R+h]ZjQlNSrM>&K+%`o*h{<'RTnZsseUn ݯu8Kk*Z5d*/̤'aZpl) A3F_~|cnfGܽk]uw!XHk*6Jv1:̷0)56dm0?CBU,3D l(:`n@TG0;NlwWk0tRF:BvoZAն1hY)X)e'q܊TOkIG27oH 5rm>ͽ=­Vu݆\>3f_U+_j)HkXRg'dg1wQrpG'ţPnA8hoFĺR),3SB'p&3yѸp4XF7Nb1tH]CN_}Ćgpt6ѶN4Bn%a\2F`h h udSPFb(۬9 0~o". ̌#ly[&wtwa {=4 q'̽DͧKbֽOvGzEQa F՝# n-YKh}wx(ڬ Mc,ToA>]*,Dй R;ZI.5J?~+-P`L E37!mre8 Ezs+43x Q4:;{]PάϏ uZk ҽPy)ICsD7zFS6ZGcxS4mvVR" /sіjiyػ]׵F^~YtX'@Tt^~XYRN[Fa]Grq+pte'JUBX6o>#XZ4MH k;0?43sgw[ԂoR\0đEw{|]o;D]{ |w=lNe{gUYlMT)x:a^{:#{t-lRfjipd&]j[Ych8G*}P\l :&`tgP栧S ]]RP a~w~& V;ZwSts+#j(^kNC% yUΆoߡWOa g9ͶA lTR9sA{p&ڭCPn:;,t3X~??ZwYg(8y=iFso^y"?Q}t۵6ڔfV1KD1gJ Tmz^!7#i k2Ծb4w}XOz=_F@Qsм$oaѮ!$*םkdeh4BMςot['4ecp汳!lwKN [& ~z#l>XBPf?g}.EEr!Br=to5`g4B3YVI Y6 ƪkZ#RZ#LgD-3,,tIGBHԹUJFn4ǡ;&ם \%_v h=Y{w߫7'\le)4* ]e|^zwtH]~J[Tgc467AYx7h7%~+%3M6GK@V Ds=FP;Q TkNd\-*zyu:5%]us;(0C7~i) ܜĽ{qE4-N* `7a_]ho͟?|Y*:s.}s)Y]T,EA=6{oPqcD&p?s+A_=#VEWK7aILUE1"T6Ujkt7R`ʽ[F0yLh1׽up`ILbPkr-Cc x-RMZ\D8|*[[ \,L<I%ti!671]o@W!&snHj(9rs6s7J >sCu{W<݈yvIrm{LDDfUus?33_'%'33\̌I[mӿ33]Y il2幌ci=0fsLKF+;u ʊg~Y/5bs}IEȰHc-=3084ṏ9ҘH4Z@3I*CƮ(O i!|ω1K (H,PQqbp o4PY`3 !ׁC0i[^%o%4%UsC%pIRxDoF:O?>}Qq*^P9L>mIIzta"㽢ASvoǎ{CfG'BxK6ʩ7jaV̫ŢZO!$ێ?[G XɩYB|o?-Att !p08:HNƣ5̇+em1o[DwqN0def#oT p\3GǷ\yٔR cʆK( @'nâs2x}4<::AsXƬlhmJu| Y.[uJA3 "Έ,}i!ٌD%û/.3fg8DXQVpkeqgpG 7{& mZF&Ia eV#)~qvAmk|I'^{Lk*jP;&\(\f?OPW|"Htg$|;Tǧǩqދ wwMнiQ" %ԭXJMGۧYB%46$#)5h[.eplviSs+ '/ ,dņ{;N]8JbQOt~Hwi ˺ghAl'E&Ly%LdzG:F1(4jq@:&8)n.畃Y`s0 @n839!0k;&m<j<4N)b45n):xKű)\W 2g*Ⓑń / &]-"O_F0x[\Kyv[J$S"8'01I⸹.+,ۿ7JP,q~bN]N5M  $EܤDHyLǭ(tZ#$Hq @4Ae6}x>׉O|YB(J19m)_J,xG*}mk'גk;L ™nT9NC;`@+kRJtJNBI/kJ &%؁'Z)xw۲'sz-#wQgcH@69ƥXA3%B&9F[1^*qO,gxs5K;{(7ι``+Cm~`l29a`%)6I 78e>I9O6|D4f{rS]BοHsLzC'Y:ЊzN"]{yɨд ^""J>z/(#GHlg KX=,y9T ڻ7,O;ȁ7u?G>(J"|A ŔN>s?c8~Si\܉6p;Oo&M*GT` py< 4Bw2Z@Rf8fc c-ӒkܷR.x˲y9NpoL)a؇ܡ]qOPLjoC%R,0C0͔|7砖D-LsWi,g:p4gN^"'h_@p.9d @+5BzC9A& !jf_We,Eڍdchat82; @7OkQl1=Bb|.ΎL5w@1f#ys8g!ZskrX1@ifp5ОcLd>z sFFz]x}ĸlq߯L\geOWPc82y->犧 I>CMsHi1^[u (Yj0䀪y ܣdTՕ!S'bC˒#ҍp9~k:A6tش@&Eb (08xV =aɒ̕:iLy?6 ߢ9m3d*#rфyԳe ǰi?h"B<M9i6R<-pL^ES)*3@VMBZP҆lρͽQD/(MFL`r3%'v(ǷVa"z1ׂЮPu[mowDRw#e6&$5K!rHh'Yl0w9?vxo>R>x0,8k Ѱ?#a34z |x7$}y|́>ICݣ+FPDإ@p HKJ'>q h$Glh ᥉:"67\Va䏟@" jH)]:Spp14#82:x{Dʸ& Ӹ]8bI޶-0ʼ騿(0ˬJ:0rlHH^R+${PWj ѡt>hja&ssv6ڎW򞦒fE TE 6nOo#e69ϼ(WV-q%#%T̞qjxOrit70'q%FNstwwJd |@9 UZö<:T^Y6 Q1QkZRQ+Hx吥F?ejAf#kRW9;w>ןm}ɴfdM>IX٣6a50"_aCF6؇ _Gy ;Sq+iLaP)t ̡NĎN VrlvRj;F5ޗťǛtR^K ˌ[3#N}&e7xkGo#xmeYΪU7.qbA6Gܻ?Cb`Oq^rG{ye:-cN,+,*"ep,jD(l9R̝Ȣx@ g2bRf=9Iv ³R"p%B~h ,:Kkq޽{Z#^5E$Kpm%A1 6l\גM$s]J̮KXt. 4I 0XS/Pm ׭?]۶Ҷ7/m%^..h&>r ALI6owl/B6*5:^LYL"8e%ĢOĂC"Q٣"`j!E:駉0h㠊f4Qؕ64nºN1,v5F&nJ}p;a~ Rn;{ہQ6͋ /q Z$eJE|.upOXk+R)$bBØ[ʯpp$ p:9_sE ^^0"I./u堌?o'?9:OZ) ,"6`_ IuJReptw>01 );u #CXaғ=93̱bdT)J|m[+N>":1h?RTah׎()%?<#n6EV!.76L ~IuY/넧ov2 {Lc{&ZBgvׁcm6}_o~|z;C a\QSq_8?!e]з%7\U["jd 7pp 8 p@ŰKKؙbS? zq5FQ${1zl]jIP#zt7t=x(W椭(6`7z KkBq}` }9I(E'M ^zzEzT4]<fZS@k~?{yy]t2xyZw/[ȑ3Tڸ\_>痔_|m T_@8jFʻPمl0 ٓED/S؀'ttNMoB==TedlXєTiÜ qlb\>f?yS=GZl"[}qu¬$/ H,K*ɉ}9(AUcȜVA[q+x,鲠.\[ʅcۻrC6܇ Rc#-֪?y$60DusCE1t'DszX;' h]?V5ӝ1c4&O>VP`#0GJl|<[So2oNrJN^~Pc<ΪJD&{!U߿h5#ιo&he'fT2Bv1'ہ\Y&=IkNtjH.v-k %؏ɇJXhўzqr9mnZJ4ȉB vs1|s#(L弨q3a҃h)mdJ󌞸y& )e;J '/#4>Vg eT{: ,Ͳ^];I4hbD] Ž'B>8 {"'N Lp-r_:H-RO%*(^' r֘<9v4xkʏ[PgVGD>kܫ0nB،l>itJ< $4wĞ|p8k^d%V"|&u*(D006z 17˖.FURW\$Fni8w~:%>(RBDckx s1O=Hg˙z&T_'9gt,! 16g/X>'rS6hSzzž# !jy>V pxĘyºYpU 60a*|vncno l?妐.[b ֆVI{)#FT^ڵF}W<a$מ ɐ$a4:UBN 5YNPW{/ËcD']̐v:m'goo0 9Z o- ͞F AS4kQ:}cĞB\/Nk%&@.OJ_e'hUiV<}>޿Tk__BcjF{2ƺXO뒣ǙyڧG=_s*Ds<6{DXx`pF'3&'8NcmrQʼ87C9[f|RaiIc@&w U5^;$C {RDag/AeՉ$sĄQQk%@-o%a1I}'t6 @#R ʝH;Y E>1 OO[W'ZOǶ8Yܺ;6R(| ]!tUay]Ҏ+HtU  7!~8ZL ot\,HŹ@lx,^=8V e#>Œ!e#@ZɽLg{_o 5wd< crNM^2V ):0,͊6"5чkXuРXeCLЬa8fM^d_֒w{BDSu~\&rv ][~4_$] [n-|~jM޸VeΣdR"p9~@fQ6@8:s 2}2ql=I.NF94۾kfw=m8 =BW2qWa<(Rr&bsA prg7xg?u@xqoC[z;?|ets)r=ıDi% ـ5'EVysا[ ]U~ן?~ϔ'mBڣ.mO2=#hN"iA4)N}2H+# YQlK(fj]6D{kH[|k;>aIQR7Jzkf9۟S[,YYDL`t&B-lXguhA&ln bV.4 ]zʽ܏ZO+\?<^/i!ɛyAF | ݪcxLG8%}?__?Ż~e'yJ Hey`@20<]o~t`\y~)Gkxa=vԑ-0ao*2Hee(!< AۺįZPwo=Vy;ibhiŁ6^B@ AWϻLu `Ѱϼ.JWߤ/~G,^kcVsPxv-RiXpc}#|\^$ i=]"xT 0sG[1h}Z='lhSưE n8$pNla{!$@ΒOh1O̫f;(K;%*~$sbx"4j1'g(S|8j/ i+y ;+g8ZB oVl| Cvؑ(J.-SAԓ^xl'[`{fOK mGdtSs,^ߗno-|T^fԏ'C%.`X\?0*gE-yΗ.[uKD{R?ddԅ#$8=RL0\h\"[1a&69Jz7z\]݉_pG-{ly69i,b guTb `%z t;?[4yO'H6 QylU7WcƌUl`J@h^cHnsO,WnPPT F)S֏B9]oV㝯>wT%Hn/Rtl9̼q$=h,HhKq pHގ˶XbxݏfPJY0g+%ņ3q3=- wT" `K't)"yg3E*K=RNrXehSDHe):t(V;(R.C^/~| {t^g֑-tb0[ ݃5U?xt3/+ "gEwccRҔ>n`/ÜaC@0 h4);]2˕GB{#!i4E &v ::=uI7Հݻ&tQ3:62̸#N~ 4C"oPQ*L0X\/rlv{{"MKLz SaGrB=K󗲤{w7?w^_.]]VyiFS { f6HC',1)N7_kIZD ]k[Aӄ3$<>P(6(zf$A.ےiфR`KQ$9{"sJSAn吏D;.?W$v9VL~bpTѺOG93ΕbevM1czrɥ(bӸxⲜv9ПԈa (ܠ~v6`y3{}J@[u?/Wƻϟ~ 2~\{װm)9QR1 #h6IMA::k9놟G+PbxN>j4(< KUm7y@jdo^2y-3 c>,֐׹rbH6cqř  #&>7A4޿liO`%V)z?G;*e{1 nua󼨼<`aҨ5FF{ $1" Rlbl4l3^n%I'=b뎇q-[]!sм{sǷwc{"lgX51w[ &NloM UGe'в 8 ѫ ) brooge` }P8%FѸ5L_@ތĦ}i@qԥ71 *AENO.^X`7L{ΊI@/UH6mfY :GP5N |cBqՎe" 8tǸFpO uST@m+X v@m+hj VLRʥF[d?R&&1Cp^o#EBY -9MD kSphxrж7ϹL_NcEJ>XEC:豷"SRPAMW9f4g|ϣYks-ri†~^ Y{Să ͵<& $f ɾ1$'ou~o,SCq bNm/g(H)7x~`ˈA1K$ q8>Ȑ1'㕷LDּh}P0Xp8w=/Ѓ[XxTU Ԋ_-jF[3XR| 4Hiȗ)׋H=Xd%b“1\-xw=ARWگ8P?Ƅ\N1L>vssrm%q{@!Eux|M.\8GG+切ԎYLN_{D! O(R%vzN0*dWcvMDo q/G\&ߒJJ>2 ܏(G5AvFs` *#ZY=(]FcI8fI"XEX+re;@zzpѡ@rZ%gsJ뺦WQr>'~=‡Y<]tG3ਢv";2h L 3cŖRux]'Z A@Z& ȇ?Kd>R).S1C]"2I6xd0_tjT٦E8Oq(גN,84b)\4Yl Lw0YF% x(8@w*>}iԓ0¬zTvcs{A8|M1al3S\BAc4LkJ/ldM&:x%]x"%cH)IPO7&6>ܚG=ϛ5O>㬤4C;]qc3'o<1VK k;L`mNvlWoZy~)@O guuVBk{p{'Q Bl@+lXWA E ~fum,rc 8;=<9{\fζY];lc+p)~Na19L0D߱FSR(C"=EcFm ^+42ԏcK:b^7~}֘1>ǒ,b5S“PE4s0 d-CZ*WČ,k$K" #k~ƥ/zer;a =𺖥iJ, 蔝$( whqGЏ)^n~[ws>ݯOe aR(=nVX*s]Xmڎ^/0R\栛ӄtz<؂s[T4^z[4־Zq5|wFZ(IehN+V;6 X+Xj́6*FV Syx;6P0'Ց{MIeIx%CR7fDob!TB.+;" 5?d#qZ^;-V fl˟~_ g"\?51򜮉~?ήɰ%-' [[ț1Wޢ'1>>49 /5:8&CA 2;u+\$KZ99>q6c:JIdoQS tj@5yOyqZ?~|~y}VFGo%/kVܨ"@[9#j(l"`zrj@+!2Ѳ8>b?eN19DTi$Wtɳ\o 3 @1rhYʧN[`Ό޽\Hń{\f (4R$ y,hKT)=xnA3Ƭ1?vMR~x[JHVJ(fMt*H ˲ y̥O7PSQI;ΩQ6{U5<\S$.;‰ 7wW]b#^ZYzPL0 Xk̾搡tSO|;%7?-b wD6KYd&Y#D]E>e+Xx`lΠkdœ(~Y݈6~;\)M>9w_CIRϝ NtTqR r9FOp 5Kym٠^xZ[*x$D%6Pķp^z# إO;b6{~?ΎgyK"Ɓ1a ڀӲ`ĚEHicJ=vħm mAuI;pׄqhAMV )tBC ܱ2L)W?v<m[V-KA^?ss=7fWf`e*Oq8f6mˋB{2xq'<;IB:6L)p,;^gP h&_YlSgt]e8he9c=(o6s?%@8E8 &d1R%6?}ΊY3"E<(BW Ϳ lA +4ds'C̸Jx~V:-!4&\%qp?i3CY#&`) '㎍@!~RЛfb1{n1lFxb/1TR[ 7bSLNjIKs1.6g4DG@ZOޓrJVt /Hő.1=fߏn{q2ZSJ-˳=pkJE=F(6Atj' ;-Ά!8Ɏ1HW 4i&HZ*L ̑}0&.csÿ>IYثd (GO`Ld0E#;$S. Q̔Mu.ACQ"TD#Bl!s{)})oD|9~g^.+qB RkgFB{P-ݏ{d OషPtJWe-hrm41~yτ0V"+fјĺڐpsIU>mFX@!|g?N!?bk9ҝTg|U /}HT0h1C?=}1#t Gk-21Xr1-h#NIr:lǍbp.gQlU ١@1me1,%Z4S%sbn/nZu6-BAmRGܡ0P *sx6Gz˹z?RЗ`$Ǫ KsCepO}hJ8z;03?s$%z/ {y$eD VMD$;i _/O>įSnqGq۾:{ bRF4fzb[jSm.09{!q?vҡ `U!l)A,Z Q2%X!c1эfyࢮ{r@02w܅4|Hx9`Կ%p %  g#)+41$TpX$7n6l26- 87_BnBoaP5*zZrhCy߄mTFW>}_ex, U ~if,38ksGfwxD= uG0Cض#nn4f?紧)*RPK+jNdzQ/BRLV/g)l(naU]Q-"4q+ nBp e&PJzAۼxvǐj 𺜲 yz~z{DӕO [g!Wq7~ἳY:87oʞ@*SWֱZ&avtƵ[MƄ@ۉa,Ip=/T\,ijcF67L_u݂`ra{GDT% B[tGW kf Sc'*I}ӴKU\RcyNX̮hѓ:֝|HV5ՓtW7RLO%X{< X7?=;_F#,I!E0| E8 pż@jB #ǎ[OZaZ^tή.ofIȚDc"3]QDg.>q m,?zۣw<ٷmyzt5Y*"*uc̟8c Y(^z{QӼڼW'tj8QmFիG4#CKwcO?].2Z^%eNR3p+!kI.p.Ǵ>ElY lؓ,qЄzsXȦHdZ瘔,EWφʶux[K􌯲ՠihAMbV,aG0* uNE~C]GkP秝^MI1#-Fa2U>∝A{PG&IJ+N`a)orT0יmZ\DQ[s*Fi[{ȡ\ {66փ6u|h&(ա *=h*kd5$B'm1 "fP3Kꬺ6/&(Q{qAiZL_ 3Rw"R#Ċ"2NĹ%Y 6Ӂ\7");Ni_WӖ#s+R>e~zC&|wR<')W3-8X'*Uָ2ޥ- (;5œxZv%iBF"`ݬhxE-y裤t=| ]9 {k=p#s }vܵAξ N}JgC:>MjezxT" Uo:`D*<]MWΆ!u$y_ Q:I=qX|])~MX٤ Wu~|s|]2nItF?Riܭ]%\"34R;]sY{J}Vvc7U1!ϮVn4vl欣KZ?8bScҞV!^<sGb:[eQcB6}w~\4gX;(oٗa7ԴzW k^Zb:1H^"e:e& =c6%#&2 B6uK՟Oew+ F'%V7U#on[[;۷vx2Sk aҐcў8zի\dZzQ|%u vho;ԇ&kFB`9y6;|:^u_ʼn3. 9բKhQҚY>61?]Gbi`]P,b</ %*gAS2 x_u}2Z0tg`6d3t4 ͢q/L~YpJ\Lu=I FYNKoU%s3edῼP/cy_:`QOh;= ;,P[6S "叿/T0Y6sWbـ|4y;C,|N.~J:뾵MJ|N@u뢶q &n{ ^_foӎ$L=Snl!T\7N9_k tޚM1N$өoB6: CQ,i+h*lX]WMB!$z 2.KVG07ǰ81{)[.O썡: >4ޔ,d)qaN#LD<vw NOMkR30E[tB|5 &ul쑺+jFS1΄aow˾1 -SMY'g:rL%q%;.65XdKqPG 4}9O^]8N/ T@WӰ@C8 H]1fu@o@;2F"z3rufa*kzԷ5z/SM^AtG_Qaߢ>; yB}q!O@sAlť9@y϶)ct<&^w{40[v-IciJNnW>S/SvpckE˘Kc ]l Bn4e=dW@{ӹCIFR/ՠpLRsv8StM}quǮ.whLCzvSNߨG~k޽q]>3L.Z@6!@ rq4E"[HS:#V%6ָ^i}[q#!N=>=hNT<j%JEKl"l.qԒX0kG٥ɛAˁw4b$H9)ҽR~NYM14:_]("GNOZ\mo+m,&PSK@Y߄ٶ&vgCI t&繖s(Uh;A6 esQ[pz=oƦxo@Q(_wʺS6VN:G5%cG@-UuCEddoVn;tړ&V`WgKZ:_'88eݮ ri@FGX1{š9O~'CA# m[(~BDXJJ<z!6lهi{9XW/+=vT(QL^^^6UXxKd7@ҳnlYPȥ~|[SbSJamX36ӑ.~[)l6FElZs08pcAxn)PۢQoUWoZx-FE yT)U79 8M9 "aҗ6K'lB/!Z:A?uƶNVZ֏&Muyb0u]'7˺T)a>=~٩G# >8z^JlI ThGen P/1nGSϷYvx+l4D0YC~I5&|9`Sѯΐwr`Q3Dt|-Ep@*хe(q c.^c,QWЫ!|K~jP $$"~\ msdT;ADZ5ajr!FGa;!RŠnޒ wO8mFіx F'Q JێeK^3~._ ÛGuuUc/ GGSlGV#][43K:YḠyK׏Kݚ=Qsh0+ {LJXk l8ѧLô8x_wx6ݼ E1 _O.jnKlONs"bZtFUЯ2вܝ^, ƳCa..}YZ#i7n1r}o*2DY(zI.2Uuy5s/\D׀v ~cjQ>ݵ}ܧiU@" ZNdCYlyX?u[WElI/Jx[dG] ltzECN+|WF-س:fNJe7rj1!Vqɼ1lbY!m \~&)C@ԕlumlGXTpk==ff8QSy1< lgnҲ~.4Y*rƯEgP&.g"vtXJL=2ã-fFűÓ3R4קT y(o߮g;EUjl/Eg%kdvLg9׵ # pp6J8| sl瀚b&5jxwuFŴ\q9EB3I7ſ-&1wp~>m.g;}!is28.穀bq޶cEOm"* = b4[$ZpcV˗/񟜉UoGIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/lapis_d.png0000644000175100001770000004076414614030313016201 0ustar00runnerdockerPNG  IHDR^PLTE+JU @U @J+@U 5J JU+5J+@J+UU 5@ JJ @@+JJJU+U`+5@ UU@J@@JJ UJ5JU5@U J` U` Uj@U+J`5@+@@5`j5J`5JJ@555@J5U`55J+Uj+5U +@+Jj 5U+@` `jU`+``55U+`j++@ +5UU5UjmAIDATxυ1EQx n̉{`X8a)?OҾ56< B3ɉ3"!ZڛU{ j, ~r,@4L1<^Xu6q@qKr=̻; D(,,`XG4PHMOAb3Q&Z0Bcg-N3߽nGFRJlZؾ\wn[[Vldv6JNn4~鬴Y(bMޚedK9>"=0M~)j ERFϟbO,CBȮ]3Qq9W\YKNK~/> KCW)mZ? 3v4vv\y?? +AhmHxurUK^VEsah>Z(ѐ;"x߉u3_8XDύX8LDy E[ 04Q M; RD(oVIL.\)S;__;zxTHKF6WX׫NW씮ذ(b^6:4]WgKgw>*w1k+3(QZL+j:8̆2djUe򹻰aLm. "~{Y=4r¿X!/3OA2@rjg1⹡҆4.]gY@.[mvuSGA^vXx*,Xȥ`62;kRAMG@o qc,tcw=w"2]N[s"\.0{Kc=?=(>swr }#oouG> LK{>2ӊ|Qߟ|`g:y rrXm(_lD,zNtR{)rՑ$@koXxk;/Y֌-<"z d٨+(0nﰄQ_Vj{h ۱w*$5}2PP3$RѴf`<&2N hf5V,붎]\i:ُ΋v R{W >5j:CJq%z29$0 ~t2U^ܱ&gEӮF 3e.jn;.PcZMzv .\ N bb9ov17OS4BMx SeJH"جVM{* ҧ i|W@s<5+Z4yD+ʙ+? >(ޙ(h# 7~sE; 4*M#~lT.ί_?[vɩ͵TJbQd676Vp<&EDJp3Gj"TRkZtIN7#I鬬JG#0 o&IhT?vQh9GJ9\eAn" R04׫dy}Ap허8!sNcɯW <\녪'-CAHYᇴBVȶքW!g˗L5d%\P{w.g z{RmګԛN;bĂ~O_ZȹrnʺpaGyi{&10s͔U C0s%%Al޸&gyi^gb-qn98"( ׌+l,Hf;EMaǎwרJ@%eoͪЪ{kAú4py *UKeA&Z5w$ iiS.%)g?:K/xp)ɲ.ع#.lFy1k!E<ʻ `jIZc7E{4;{2F_xI4"طB>v?NnN~RS8zN`hr~17x]}X-爅yɈL6"b@Lj3g,'В<ƂAZ%gsUiwl^ecd,1p0y1 HKqv^ֶYe2#Ǩ|nfth^KxI#qL\g347`0ӆ6ŲS}'䢷rN2+ޯ^!TJHbV,ߺ7ǟ2ワߝ"%|ȇd<[dr(lMK|rztp,v}6pccB!VA5.zeG3d34$]ao>ْOחLr;YmD^Ab94`C5+m֎q0HgcC"B ggଜٙ 6sN9sZvԜ"0®37 ϴK롏ho>bLR.Oև)=øimMcDJqO-0h||)퐌Erqb'U:̾9˧gIÔ]r $ue{$jҮmz lz 8W4ۃ)~^3w%{Աqj @hLZ%ɯw"6@'!΄1z\7܎{0-6'"Y^=eW-|a5 JUrs(4qt2YW׿#0q}>)H*G!`,R~}b#xӿĿ]Jz]mG =Co;nC{)Z1O8tD+hEIpEc|/wϡszpw|@slE,îS l vPydGL7WSCL4|ZȋXr dl[ Ϋ(>9=cԿ,6R$X[VV-$mF@Ƚ˅i!Q/*^E SL1qͥL jرLoN'DiЭ[S~뜉LK?dI1ivFx Gc)ą˩[H,Q#bۻʣϭm :sckb4Bt euDE|sɫOGl4{w'dž&mc89ܟZK!czPwCz9ui̮ ɸOMgHH[Ca*}B6>:Fwj$2mDwPaFBLWJ(!8LO+`%FNG|r@#8%f0gL|u9S tSj6 AYFPP_0}tm#<"pm(Jڑ4#7+ݑO F6 bXOoP6}ŐM|4$Jcvr]qs.Hhr3 -[e5nhl;dtq٩*%A@":i̙!3wٳAZn^VD!jX'_)̑2Cn>Z‹6E?)l,Щc}?5`q }ƀrZ=:$8poŭ*P4x/GH:Q 0ZeBG;1Ƭ drCo[ .ɳ% >y_DuAZIAqmG-ž!20;]c@2$,rCR & NlBN jR\92AߐfnR`JXob\b[c =K]VY J$N{),t| \t輶VQ“E/cx7Hx-MAV>K\ %e8:FDoUgmGѭHp GR4Rn ``+XI0iޙS`f'811,g>~<c-TqQt]543gف^kLç>mSCa_=Ķ ǓCȼDUrY!-ҩ<6a}vH2-1|b D܁Sog^5@hBHƒU4ksօ,ZC_ql >j.íO<"t\$ò0T_ʭeaEwuޤQ*3r|:HUk*?8 kMdI"60n]C'_:AGO]$ ͠kBx 2)3ȟznf#|D,`j-膡^;j 繶BXSpME쑍4Ty_>o{G9FtUZ'3 _=Tv#8O)llXt_}_2o .CQPy&ݰz߳ϣcU$wJI;51)BS"'-=q ~uZ: i 5 wlc:ϯyB@R! [ѹ5f]_7Yg}I2D$J}\\X4 %4x4]hq'4A%)Kn@9ې5_ȏ=!,L_w8Q.2gP#-ЩX8}X,Gڄk0`(k 0ʧ*#Z=u-4~;M{g B{tԥ_\2.Uռ{c1v6"&TUՃ5a_oU4:rB?dh_b쯺=_Ql^Cݫ1-YZh4@%0U?Kg_^AԚm*7OE_r)ᦛgyC q)SWNe[heI `B gg~NMg~>?;Fҵ=!H *_ PVTd G5OUNfeGcBMLsa5spA,v kAwЯ?|#mn,)ED36z5- pNOl5Y2zNT@{c?糐jCI_{Y4?hɞ;b a8% 3+fxǏ׏+w&5ޚ u.5Jʷ2Pg <κ: 9pL*ݦMp<++hp V3mGu""T)RT0 Lwcȍs=닷R:@DUhYIC-a-v2OĂa!'9;CUooȖ;,Q1 khATri-uaݻM3h#F:m7a[rk-4 7I MS]Rm}!DO‰ȱ,0+Jk dZ?Ns9Aw]-MotI]_Ćln5T-\N(G`u~><ϙǍ؛ېkU߯]խjs#xBO⵪h({8ӝb^/&=0{ ƶJ-5̉DVARrgQq+{#kˠbɹz p;dTYI46L} ;zds~<ź!mU!sI{-`?w_j2 X5T*9q%%&$m ̞rڬGZ ץAjLH])՝8i?D0kp8C"osOϠόӬHX ϛ) lJXscEi5ܺs.5DLH5zvb磲?::Z*eJy3w4@ \곤m&I:a2qs7ٍMg R|͸~cL((I6ǵ2fAK+ ԑKP=Q'+Śa2FFXbŴ'^cp"spfs{5q$0uƬ#+T ~&gKf(.~V_D!amu*|5&'\t;kFr`731xȦ)"ѲIاtx'nlOҎSu;?xO7 p腌ZK0bXXn1ZJ ;qv%~E%ۿ>z:?b]bȲY!`Y3X@4U*MtA947@&s9)QdΪJ~ d]A ɏzHty7%8d'`hᴧSU~Ct]P8SSKFY_ n<(\D]AvM|ӐMKd^]tԪL =M|4Sj'W_R{4J}+wicČ{}!Q~ytBP7f([ld8 p|y;l<njv\&,n] ?/ċ[h)N"+vPTǛv~[qn6SR^h.urj:8~]ڂZun KG(`#y+0x)aZQX88he&lD -AyI_k}~f#Y'IW*߮5l^3rAީJ!^2\Vy 8)z#Z%쒍9cr悮g' W#.{s{geCKCKF|0=HYVCxzr@[ LWL39 >'ry;)?+K/Y<3k&(i6Y6POA~3}4?G%:ݮ(ߎ:_6xKPr s.|eYg Bg9q:*:WCN8WgR>s2K~a@ 8?ro2_d+QQ0'Z$f8X>CRZ'i=oLȑvJd&.(.鳟Y~ 16PEVfH+:0^qPJ,Ӷą|͡ 奿dF 'F`R2ej莄L(¨5U E݌qe"bi%OV&XoNBGM#ja{B >;L]#Evu)OР}S[s (IA Q:ΖGn:j\c\Hҩ Ra3bf#7+;iՠeA?cFUL=@U+ S }yl*2 @Dք9Xp85+Rm>ҴpBR$UO2)ӆ."@Ci£}?6!%-y_Dt[46%$/,u:gPVyN)Yi&.FS:vֽJ)$1e'=0=d'S6?R?Jm5`oW(o϶#U=mWtG9\z9뷙Lmkw;f` o˳ I> {2]2*{?{B̰r~&ʚis-[ZL{\QV^W8p76|^<Ο;:dM\Q-|VNMf8q%ͨưkr}? $z`EX- 8*8ޓwxϺtUh4T{6KJ$ 5_ݳ5?ɳ0E' ƜH\"BlGLI?lorγ?>|*}NOO NQ&jm{R*?W?};Kϸ@s-Mxq l5J)x?7[|f1WJAMLWka_Rط,Lov:O,)CE`;r:wB h7AEY&gZt6m?/7Q1,pG"!B~}4j~2 buG"A/mJ!؂ iw P=RK퓏B~Yteg!׆h*G8f|,9oXY1O3d]•h" NuMppo - 8O)};wߒ6WxdD1b@S3c5RdWCa|ļvDE8wkI*T w./fE4 m-1||϶'URD]Z[bvn5e !a )2jͶFX mV(JOJ˞\00chUMK ?pa4Kf ¾uqA޻W"0H4N+8º2 cɏ=[E#D A@C֑IOX@&C4B!΅X6 iR@~0B@~̋"2B$UZ#@i1%͜8 M@Fwc&՞M*c%ppad8rvB񝅪CIYwW&&vޣ(.Kp5=ϯzs[)E&dT/JEiٱC7Vt}c?s)nBnn8$^t?4#X3}d o36'0;T_|#ZBfT^H7\l8ЀPP n؆2";֐G ,lZʧ745+%#44iSrtTS1$o<.gd['\jsYwOh8T :lų#ҌbjS<9"@l![D 2QA~"K]>d{kfixM26#?An#@.T}cp!25f&i݉ ղ5f|wC,#`UIGx.&%QTPv'} xgQN$p:㖓0xpMh7yn$bGɨp+) P" ;͖i_[і?a꽞/l'W*xo3\=PQ:/6L='߁#`M HF.Roҡ&-G7+zlV{C:\TN6. tƎtSWz 1[GPu-Ἰv!!\8^^uVv>|}~R.yf^.SʛB p!|Ƃk~2+PػyPa׸䰊FcJ'ʑ'?WtP?bp"(p\SäsקK6F_.=Sq*15#yr${2os?f8J0/\VR0ga糙륩k>}g04wʍ;2[43jYp.cY&wr@xjQuXje i5 0d?ڷoZRu*]. zc@jق(axY{xyH4eB[8tTqlt۠5v|PƽDʊm]iyvqm(bFiZDXX=3U<\: '_toj䉪xaVf@ F%]5+efj9 w׶on[_SQJtR/3! w+EQxψ9sq*>wMtZJb|;I 4D ])ܺUc=o_[ٌ]bgsLL4&7CW޶D )\ `V %DtSJÐcN/'t'n+3p5YCp:6 i rAj~mxd<.F1'' .uTq31;Sg%/(K-`HLdĽB|V0\`v64 a2䕌D呱a=vkiނM:($CdAU'cG7`eyk{!,y?L;C@sn 8́/P_;*z4 y-V t5n-k"f| 읡IGDRI8.<>Wi XZ)7E0(kݚU)32ܻ BF 絇'1GlL}*̼/SªLif,es re1gH5P۲`DR_ے-iT!F,2VnRRI^rh!K:DwdBg[P]zPTQ)NEi+t,=%S/AwL{fd.dC84 u"As.6` .-j"X:GẎ/+UKOt\ ۏ;3fHV!  !$MFbqs[U?[OW&8p|a<#^w li*qSQy*j&qI&UP9@^?$dNI_ªF3 ډ%kn(8AMy9ْ;L?BZj)BoZfOd´K +&:ug9i]P[}rƎ]Cc,re0vA*}W'9-ڹU|!Tk.7o5 =T5[dwf%BmCiq[BMhjQ]>Iry?`mѯr3/0ftY GxKo6=]thF dw4iv8\O_! Hڌ2^u>l\ppʰXA$0̷nM'a^ZBJ Ss!ɝ`T%xY@ R@nr7Ci.B2J5?~)o_BHz}+ 2= `oTQD C 0n*->1šm>ZŃCs&0)oiuCdI}ڗB@=W؋(.繀wta/k6-3{rZSX {"U=,D{|omaJDŽ+719UD؆?B}`\2]˅U d;V[QV 9ֻPזj/o2 5-qJ6@>V`IqȨ&Fy4geH ۝KvVȳQ3TÉx)#҆RCQf&375O}5e]0v}g~s@+tQ[)o:Z)xlV:}~}mF$+ xi**obnGʰUߧdЄ 6^W$迬묱dQM6!]Jی0,QfDx{sl8 TaFkVDW5;uZ@Y AY}gܖ9r讅NT6寑"͌:Ɍp}s7jXYXǨس%nlNRwVJԬu{3Wj>5Htgcp,˝> t0SS:N0_)ܸAu$n(?uAeQCU[p {';^lXV8d?9K g p ."+Mȗ. ׀qi?`iM0%Kϑ$O]i?C7]ezGFoݯS刺 +BLS l^bw@ߐgf̓Fھ熈Zb<mi;`.>fYB;ڇB (q[p E.%9yjYg9"Ȅ\*`e6ro&lz^y8@nsra v;E qA ro`Qp}\F;%PG=!ZN`|߮W+K[fρr2E@T~K`-u&Æy89(h6Ӵ42$ߒEU1kB W:?)n|tbfTrzv.9Bǯ_?~\ÅkVSFzii;!FLJ&tCPPq\l/n2(!PA&1iGxF?_$a_BZԨXg`E3:NHlV0QF& X؇?l`C<MbZ>G|>APffq+Py~z#6YxSs{h'Q+l[nQ. B_1(rYz*(Hv ;( T‹Ƨ++Ԫaq-vy|/I zkU9 YYɇFYw瑙%ٖ0F ε.IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/lapis_l.png0000644000175100001770000004073314614030313016205 0ustar00runnerdockerPNG  IHDR^APLTE`ʵjʪjԿuʵuU`jJU@U`JJUj@55``uUU@J@5+@Uʵ`@@5ʀU@`Jʿ߿@JjU@@+Եu`JuU@jʪ``j55+JjJ@@UʀJJ@ԕUJ@jԊʊJ@5@@ԿԿj5ʿjuJJ5߿uʿuJ@+Ԋʟ`ʊUJ5uUU@ߊʊԵjԕʪuʵUԀJԵԀ߿ߕʕʵʟj`Կu߿jʿ`JUJg@UIDATxD[mṀ=DhKO[oZŜ*HzHQr?G'd"Ip&a B!rfJP5FVE eck5PWy^Ӆkq댱j~=EY@wPlq{yD`i_ oXd(g)ut ZGϚ<ׇvzqxó@4$ vM0cBK؆!-M5"h6r,qݞқ܃7ıO}Y{upzkQ\>Y_!k" 4v%W/G;  6l! r(a C[7d딫NXg&] H‚LlYM!oLQnDَrDPJւǴFO yr3VZecUH 3"$s℄FB |K.4pVL2`{afKkDP+dz,9*,g7>IW0B$$FҾ:a7H%DB KAa=][.E>c YJ^8Os3_u|sڻ;~X?tC:0' C5oL`LQ A& ]:,(u.z MxC̜@[ `(6A4MщCmG^u8w"i<۳:?Hho$IOI!jd :%:&!k]C1Y2>uC8N~O•3 F$ }rHGZha&@g DӁ9! @tvt ƒW5 HAHB B& ^%7$IcqDAxXjx,ϱuũb, eʸS]b8z $A[ @ ɐA`t\3 I̴,!+*d),D,!ky,oA>'+!zC!63t&0@Hk%-$B (h H":ϫjoZ [8yl!IO""3 4Io>aF0F2!Вt9 q )hV0D=suyZӡꭧza2Ҡ @zL#reD>J1fnU6Zd9u9eO3sv$Io2?Iriүt"3n` 0 iȸss}ٕZrX֜85o>'$BHZf"Nh @|C`9'=&cǤV! zc7^XY?B}7 h$?w@@f:!5M(W2@޲KaxME19+?>C>c2A蓙' = -ݐ9ƀ$3@"q cw $FC u8\x}RP+FyoofIhrF\!Sc&74LO@fdkTƊt(q*,K1ӗs=4 }@Hm tH 73GІ'$ 9!HzǘVMɠ ˡ X??4V;k;_]}t$xkC1f` chWGKߒ@ nП^VOхFD#S9WGG̺bVDD*cT 8VE˲zծŜ&vsұ[Ud<id0ZԌc[mvMT4!Ю凱v C>,Rl'w, Aբ99aOxW?_nB1u<9Fғ#]QF`E*F ] [zySi/2!XqϿ`d4}/@ƶoI0j rjac"jN:8de|9;_S> HdBݹF2S8Cu 1WB:2( ` ^2F/U89'e_+V0I0^q\ neqQgɤ L"jYV6cۜj4j*Ru~^ݹ0튖ar5 lp19D^mײ*9{¸NeqR 6P쁫c9O O>_l˨-1'G^ G42셦̱u22>v?$.Q׽Q-/<gi|[Ɵ<"_|l7/Uc 'K Z@DF&s `PZk9(,QQNܪȽƿﮈK&/o D^@?b[ 4o,7@yaմ ,8q" iqoG2AjJI:KWrrUH=bbU]ϒZoι~%sBZ_F"/_v {dgM A 86uK-y4jγF=+3Z+=ѷzȋV,_< @mBŨ@], tGս,G1?ՇyJC3A4$h c~)-$#hAYnvYic;'=g Ri|ǹ6?,ȇ/LŤcOt{sRfpe$0a8aEOPRm@pXJ&˶'98Ahxܜ0zwr]IB7W&m@WI8 _{ , % GjkI[8 dy,ޝuL3r+}y?vE+#$yzxqFH1rCUk@p엤s+Sס]*%@>ỵ\W7 ׼9kE+ )1%m'-XF8̒ʨjw*WM;] U@ڳ~%ݑdqM.;pw'HP ^Ò ;GqHZoשw{S>(9!CS3L2Q{J"#PVϤT}&T=ƦP+5k|^wǟW峥;&Y=hG'&5Dը"QC5@m|H&R ])ca)2MJp8W uPGX?ӯ+Ks]%D5n . UVD= X1QvE X u[Q1,A<ɍv̎v_HW#ףgvi5fWJ4Fqi_ ra#idDL"@GâJnI)ǝ{Ȁ b+Ulxup>Qo}Q94nG`1G"ma+8GBS:lBcHT8,j&e-58&ه+3/|V6W. nH4ě6EMk` G Y ZmHw}Zx&I l >b ' 3iA4{-^ľEhs,0|&ZM>j{L#DأOnKK2s82 j* @t r(.Qϟa2p+m0ƽ>}75{-W^Q "\kH>FdX-fZR\ȱ!"Mr{a{#ȈIueR/\_^^zn,<Ƥ/7*p"݂ةĩqP;c-xR=7 b|:xM|n{ƋhFɣěadaʮT!\A;i԰v9ng망L#fK"/M.Y7H|dl͏%lbjxscbh4V7~iyl񸮯It댾~n$yHO.aKu7(;pb=A'EK;VnLU vӇ'$cx9a\<WM#_lW4  TiTQ-A`M@|T=QMxT(oH:'H>',7c|NxMF|Vj7#I4mXf21IXqA$`=k"Rs妥uxL~`O|ق( $de5T^"jnKFE2[ ^+;ZJ11d.9{, Zܩ?m%d΅עs*Ak{jH7gS4#Dv왐ҺBi(=KcS@AcϿwD4fЬ5’z)}\ %Ml%[|$JMxA CDغpOHnNWyH32z[c? nVs8 A=ݮ@$3Kߒ 2|Z$ 6@u$DW_ A4Y%IQ DåMj"fn{l6-xJqAy:ͳ'эC B Pyoa4B~#Q֨NI7$n`bIf-:8@WAUhP(d/7ktك 1g\X;I`eUHl*] ђū4 P&u5'ixl'|#iN\郭0{ ܉q/ uF(H; B.Qr0>߿ ^L; *jD++ a$P~Tti,Ta'5svFϜjb@r\HAJRB,1y{E~!6Fw$B+Wa, 儶0J2sʤpTx7@tID/DV<f(bFHgv+1N#:H o*KʰdWaON>=dp (o奟O6n46mƵF`E dGZh]Q'QP4bmOP 2X(KG3p__?^t#`f$o 18]ڵӉ(RS+8佺0T! ,㼎*_TZ^mnD8hfo|Aژ4Ff-('dQ!KKCJC\30-H$̨/.hY0b9^<|8?@n fl03]v_ +hFcA,!)pa,6R|s LWAJƋzśݛP|^><~M@Է?bS"}N-ׅ -ܧ0bq=GtL?oA1(M›CTx &[6>[ ݋KQ\ D2b!k޳XpC6~%Y4Ck㘽CQͮ D>~g@vWNq2(J`D\BHvNHY" ! RtZ ۂR7AR5DA^I& mHP<24u 4EcLR NBфO7=ȃ]TBƥD^,.rJHaw #TTbFRa  >ِnl!j9?H('A ~^k;=j ,t#RbNwRF`wGе1dN C@e:KޢT#4= %b4z"z ;{fL#GPѹ?#f( 1 eaJ@(Խ*!|~I q+YFC0=DvvGMlR<<PwvԦTiyZ?4P5Wc'ȣ0$S vbD/Bn. b%E xɍCza7!M j `oW"+>"ǂs/@:Pia#Π" c ULB-߅V!? j==۝Ә `B&He3l&t 㳆kjU6K҄C>lUYjQPSzhnKwȕ` xParr0. !?d~>٭06H,>IA#aq^?B 3( F1kZ#@V&t-#*y,xY4P6ºWp%@OI^tvd5W%F;EQ8,$cx(Pbfk&2|z0@aT9. dp{P ÷Dp3p5TJ#뢔 ?rVV`LFvzܳ:ӞaNe~j,]Į=3i6s7leGA!Mœ$RT7?@gU:9ɞ)BS4")VG$Ÿ *O{5+BIiZi 2Ңq(zft{Yt% 5\$}g(7ۣXiT*`Z ÉبNR^)ފ"ddc{PIX\ٹM y鳯ڦv, u RȠ#d+(>.9FS-/3$Hi7yn4ϕqjs#/LA3 GoL?J l$J[J|F@c7xKxh =_jl w#u!tG}@ u`NȖ+ZFcƴa[kCHˮ h i;3r/*F #&R{b#Z>}T(nOf0AͿI&$ʾB2;DD.;0iथD=HiJ"J٭t%XZ 1AP,ծ蔣ha.@v 9{QR BA,9j;:+?ѝiӴ猐l69Jd <b\Qh * `|sӚNAE˹ǻ~+gyۢAHﳏ 9u0Q#A%ACS9ёFuԳ^ D>OM۹Nr7x0JF8tiu9s5p< АfH*E$/TM:)'98HJƲTг7mYDo{Qz}i:6 69|{ ub`%a@`+boA x1yW*d<^3#sN ۛߌ4F @,T pk]!B({z /&3 yIfjj ,?w#iהl밋5czOI/4,1qeaJq `-/JȫMF.1{ dy_j_SB:IsR#yWy~MLi%͡ !7 b $2}\c_Ħ;qz]ѰSyȇ'?L$m:n.?WNl/%gACKuH̿h_ y@ o?|mѕ!@ctSǐƷWn 7B>ThF0A9t݊ n+l2Cv# S?7*1+}E{zdn1ˤ܈{{&Z!A'V !JAp+f"vn*h8p`G՟n$q9ob`X;J&8Hh:/3Bؼ0&Ȏ`'4ao…dAӹ̟d/ b4VE?V2YhoE:uuLѰ&HZ0F&4dh7.LU/m?d.E2@AP]7my[t]MITuذ5wED5ӎlH"Ln{M6ụ00BfSR"3xȽcNzauWc@чu3{^Z܏Ш`;+bA:!̪6'ySp"lւєQxw@l #OȝUΐAzdN8GTC1gˈ{tdGA˼d%rJkS՘/rR!vXF.4/P$W14kfR`f:z8K!%K;VA2I Ud >G-[;@k"WaȂ.3;_S TxZdUڢ bfsqa)QZ Ui>(MDs)UTMgѶ 62:m H٧ ޵D+مfԏpR۴B0^ yd7?ʾcUV6,$ Qj3s\ 3ANA7,w8*EzQE" H|ҩ@ɺR&"̶|ۯ UhcP;pIߧ\c/嚧(u!BPOmF<6W|h>QqDB3wv[ͬ7M}:ɫ)#VKIg2ANiO6ha%OB2A FɍIl!69O gA0>lލj]mupXJX ;j"lx6^D\R_j `A!K%Rin#N܊cL9F}%,#7aӦWvyy'4Qa/= +03ZQZ5gLsp m)/8oM5S/6]\#K:bs39iWnT_72&FNH9#$0k.2Rsl4Xf?>P;H'ÂdwэaMRM ?}o@I) Tzٳ+]e>9}<ye|^6lLWw3S7|Z uN9H6pv(9QV\ەF2`4`bcx?O"3xT|HsvKHwjSTg1{rEDϼef~tҁ@#vQ ̿ <~-6&ͬ_Tt垚9ӃH/%6m(Y#@ @fP)GtC!\Z u{@>vF{yD6ޯ6>ۅ4Ngn$6/6wN[3#mB{K5K 8WJgi(roFG="&"ьLTS"~?n}iڈu;faddHh[Zɼv;`L!ł6*!$@Bte-t rVz0cڛsf89y^1io Qyh"JPӇd{{+_XKQ7uy*;17A\4V3028ajdg.=M=5ɰrĸI6*F+'t"gu?J1qfxz3ӡktlЙ7_NPQD;inE%ta#1A[o jx9'3;dQN3'v?h5x!cjQq^#5V40ni鿟x*::"isz}7sb$ڑt J A j|KCJ4 rn,tƧ_94X*@S4/h QDlt7 tT"x+jwĤRhs7l c7ڕ'jqJ@s;Ȑ)|!Ѻ"R˜ Ϥ$JQ,ƉplC(5t:&6raF0: OY7<Hr "eMz>PlSZ۟n6*>{Z!Ddp\#UٰMPq$lȄ r)v+ӰGny#QΖi~}õݟhTcs얽  mqFDԴyJ!̺(Q5@rðD!T*5|zz9DӦR6=NqYtLOly e 5z 1"%/fB(hL }o~~Z^Ƕ;sL,#gxB7vH'yщ\ifs{w>pcix^0" y] Q8vac,EA(2BAܣ'0bo.ei؍K}fu%7n}1n-$_79seL[' "T;K)6G䱭¿^]+ļ*"Ϸe(c%qI['٧u(8: QZto v5ԩ632T I%Ic2=i!l`~lx%O~-\{ (4`)'M9>XVe0\{Re]wTB#Q^Y,dխeBmN$/?tWiשcigLrUS0\削>9hܳ'i/j]l@*zN}g"bn1&EZXyu7> Ac7KsjU!^Jo Y*17@)CDU 񗤖XDg-Z r-hȘcflp`ۜ>YhostĐ1 ~%8M<Mff*U۟Z0"wi!ݣ#zՋ RD* P|>>[Y1hᑽ;ǼyinFe C3@9*38ɵ$Ft?Mx #Wc$cS1Df Ddއ OGJ<@ n BwU"Q;XtARSpp)R1첯YY2 n)*W~,A s>!^-{}I ?PK rѲD 3MFb:$!mB?ԗۢFnc{+f%B%H$7jG+-@_PM74!W@) 0۱,kKUxc|4峃PtE½&9T;Fo$5s(K@q1iXDQJ#ۿ|~_ޒߏ2I1w+ޠ7@RfnF0:ȴ+-<($+cד$Z8@o. ;LJn&_e[6dΈ3"u&k֙!d׫:*xC䡗F*IIx>)Rw-\% k>˯7gӳdIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/mahogony_d.png0000644000175100001770000011363614614030313016711 0ustar00runnerdockerPNG  IHDRzeIDATxU.E #=rg nqgZTTƿ]kHyV"o{~yT־Q)FmmURX.ph vhƞ$ڄ(YtIQWS jtwsE2,&eWv )mV 5l a]Ø@侕n D{7*4ղ@ݷ9"gdxU-)Lw GZh-~l:*Ajme8"XTD#؇=exy>Tת<\Îᙾ7-Z;TSɟ?o a9-I#0sx耹[//9;Z R Gg;,/R\)$ {B{F>3" Pq|"QF `}\!5lϒ юGJZˢ1>HD-3뽼p]½:Ǻ ؠa lgݾͶc7& 8$N L5xs 37gR-ZPT6Ak #pbg=L{'$}({)$ kwˡGuX쮉޸7 n4ȍy lVlLd%ORh9`rZ:%.ɂh1k+4-'7q} l T[>YcGK'Hj1j9݀ \ˊ4%yj̀Wic-T70`[M8؜@jVz[Z9Zhi])M_)-FQ!QZk0Њl&$Yp ̵r!h0Qܭ ?'$u" y q?7Zlx1vpj3NXB]^d7輌 2;#&}O%& !zI| 7:{<'LgGLJ\B\5&AfSPA˅1m2 gʘrУ^1%%hkRMuٿ[·f7V1;\)2yLQqLfP*KcE+_X1$4 %!堛B)׼b^CE8؝Q"J1 ZˇB RBȅ5?n)FQ s.myt1jľ:譯7Z%Fj@D(EXIbQDl[$c|E5&xYߖU:cWR/@}97WVWr|D@Mf;K3T˰uWKf[;θ1 W-AcXm]jY[ BnMbWBNpaAx&a~ R߻$PUϓQ &a`fp^ .aLV@ߧ sP#^;VvK-ї`YoGEfD.rzu$ so<%\yZJKmU,ټO;Y4MTl:өaBwkˑ9Bua@K°" U;ZXI//}VYx+reauXyۋ{4rk@WJrtGNtle$Z*GxFMwA-!R~~y]Bș!"3K 6ˑFhT5P{v`k5aBHY3W{v0Fd4 !:IiRFMUG3wyfw^}zǩ6~7(Ags"I2x∹!&W(4vCH>MwGG-tA$cM4'<)F]۶CF,Qk?k6ex(Tf"V/+ ECgp8/g.2rO Yt>rFEbBsg. c*JG,6W .jѺL{É2_M,rB=3[QNꠑ$0e$CT&j݄ TnÆ2J^ 8bkBf~ȋ#P,kdFk56K 8.%X"ȊA_wj%~(}@M@$|0U=I=EܵIq NZaնrmRȦf`pw;etFHH%ɳX$ UD* u03XYyu^d(X"`!K-wrW vjӱSf'ǫٺ0F! W){5^]^|P `^<>)],&;.Rv&zpc-[a/> [pg`aUXYXG8}< IFa`R@C*u WHD ˭7yٛb)* 4;8]`b-:\:CԭPMxD?EEFwHg9R4Q<t C9aP"0pJʀ!4a3Y v~}TtT(⒢c9cw`ڢOy{"[+ dpK"?fԪi__'fS{i`$/*$]S ˾|{j#ApyA@0rz|.Sn!']RD R$1+x EhH: {$6ħ{Dgɫ2- p?~vʓ3^(x)M. a"zb0(ώmV7]=Ǐ;or$:гٽW4ҀwI\Im% %)%/졣՛|r'~=%uAxlyDrIAI'ƾHN .Z턩).%JfȈ' [1/:y S=Ubc 7& Dk=l]"]rOq!0y*Vo̩fTWgY~# Ən`H :JT·@x$CW(R1B RKfuqd5W%`2*m';M"\t"U)3/( ѩ4=~閅 Ch)ULGt~K;h8hiD0Q%VxS4%EmG]ШZ8' ^рnKR^ <š02ڔ 2M2/5cǓZUSFAX`KSmqإcǒ}vrS-qRZ;_k]_L|wG<&~Ԣ.,S2/q#ܗ5en|OpčU؛Lxz8:cq6\LA>oՇ&;_`QBei%Ij[4;]2v` x DFC bUk|o;"\Vdeކ,9|iq(ݸCX_2erߏڱ"'ĒpYFvW(=o$i4BjxX>sҕ$e"G:՝>>Ho vF]3sz¼ҮHoEo\2NOt{nu454f 0 xghi!N|iɣe7 d#^qag.73ٲWIWUeF6YV17}JbR^hM7QgXIqrc]ud٩Z8! Đt?93!odZQfA7 ;U] 㣸}f`m9c_"P*N33v1ErYfأ[U T"Gmo_ķJYm| ~$_ X V;$AهzwPIh~MoqMJ8$-Bj4H? s;fW@y\ xOic5.}Tuu(񨽦PSiqv 8W|'>/6hNYz4Pj6 HF!32Vg|YTeY-.d"7Sf(×61‚'t$#J\@/hwl6'u6]e=i囱T073"gX4 3Mz T;mef  2Uc\.$! 6Rn܍g06P1"{u@b}L⥶pŜf@ݓ &{! AzESf1>GY?&(,oOp ͓>KGtp'^{+ aIAVg[Q$5sMw``tކ73Th$@B̬st(?&MW?a(eeuC|i'%]rO@ dtm^WugS$Ϯ2m=b+W3iv[  WFs s]Kҩd,]V@  B85(veOpA",N NYSh4a{h!6:f0Fd,-5Dzȗpn}x/Y*䢅4`9#zC(ùZ%NFCzE5Kn,,iWkL$7 壵31}XP.:51`IjCs}8|~^g:k:I}N丌[n8\~"?H,q ną`sEOlIٮeD99P2yg,[o|@/hBbHV!!#?u Gns7@%QXk9q mRxf\ӧg{>( Fv2Vt;*+LdzLԥMAμ/R26:>b"qI=` Y Ox"$`|u;X ǑF5 ۓ&L ޒo/Q8 XZ/S>( Lp}\.n -%. xsUd7*>$$n ^ '&蝂u q2fPD$#zU\oRiC6t3 dN>RQVʱPދ-]8sWd Woܜ2$Jj|P-$:lZ>ڟL 4:Q%42QL$+? $klqו"R֞F*%e(Ĥs+d?jy:kÆ{?JأRI68Pt45ト$0t:,- N)[#B@ckPL.ž0{M[Q@/KC0I9fp()Μ`Ua)'=2E ئɰTH>Tvu% wH_%QbvoYv/W$[S²z9=4*̬ ;4i:2jn6CiGIHi"a 5)JJ#[ɪ>qɾ.ѡ H ? <Ϝ!7&-qƭ&-D6 hǷ3aJzQkI6is[0|N څg33Ĺ٧EG'of9GkdcJ^Dfp͍] }Fu#ݩ%rclx9'ȧ;{qs:BqBHgtr'͹KՔd 񵍃"BKJrֲxH)t/ ZC8JyA3TJ =YZ'Iu)h)98@~w@Ly1Km}99W>t!|4Sݍzp@L0 U%j$:$dүSj<iU\R Y]ROz3xV)̥4{d;+5ta*HY3tD!k޵\KfywˌTyU!* .^gH(3U:+UY2 tH{]`n!~)u)M5<ԒX^y#;gz_{ Alp %AMՀISΒ ^l$⇘̷g$ss(dW.U41{RHu L9QH cjJ xBIEwJq*iS&-;<(6{ɧgT,R|q}Y#T69τ#Aguvdtbx\qF6i,V]cMNP(y1l!-3[O;f_ǹNƵSӥ2@` CB"5Yaq@m^ b0S]vѕZMz]_=[rZ#;x7sβq}y%Vv4y\'ݴ?ʤ[m9v[bkӭ\SKwZ??0eP2@J`S~cCC:;Q!xԌ a~zK4S&i̇{m߲p~9?OMf!,ߩn;+vr*g+AL)lsD΂18`4XPNS4FH31Es\so!fDsWV](n9(fboNL8^8,Y[3'>6AbpK U\#ᐁw;Dwz=7I Ftz\A8kӢ@f3A7s]D h %$<יk͸ ͉/4KbB CW5sjcaV;hXp` úȖ~f SD P"J":J]Eݮzd~L/jq!5Mq֒#( cқIZ4׍p|E{{| ձ"{YlLhƓݡԗJ4<^Sdg FCad֦cGiMua̵uv[_;S0p|}6PERoAyPHT{+5Fa.VL] ȑ̔;tve/Yf/DxNyð@c ]Ovۊ"ړJg;%mg{Rޣ"4E`~w^G\HIL3xސEkwFו)nY᲻y6-*1tfB?2n8ok$kUڟ$4tECuy.؟чJ;'v;F]q30ОP]Ƙ\=^D8IXVROI$Kܶl6a*1* T۩'8rӧ:ߋO;N΃[ɒ7`lzIB {?#iBi=t"r*U:PCMJN+ҫZk*8ۧ%AƔ ~Sl/%;}-֔bPQcfAdO2#:I Jr.5Z Xh׫Idk8O)f/ _(9iȾbsrOX,({)6y8/ 5(pAA>ow2$6g @;#Ƚ5?0zuX YV_Rgurk| )7BWE -%O#/ 36s|PH ZIv,9??e(bȃbY{W^o*5|iMzPU ̓415"tFϊ)Cm 1"pH@9ɊnWyd2u*Ypߵ^C2XoR'eD#DO{5d`S 2gX8Hbျyjʫ acoLēpԙ:hBw!1_O}TEZK ìSI{J!GX ӻ?:+'J3f\rY9j䟲b+D/(iXNsy:Ih®1܉๾f41Q㠍 ;P'#xiPI5z[ }}sO [B&뤈EpT8Qs+2llEX*ZО7ILCBm`@X`g|r\1dޯ«֬41 p\ k'66;o(TA@8T☜p Z 68\ƦmAd>1& 1꾇YaU߿<6K ϗ Ig2&)Lo͌ Ƨ ^GWĜت$H$գT"s<;+%p:HIPHk'54lYTBoZT3mcK)2(J-L+$}G3\3<J0)ݟ{5Ѹt}SH -B_bt6]a NMhD3:Cg$E+Uk*E4pОO1*ҙ iwR;˓Wdzy.f 8 -(a׋)Dn {Qbe%i[R "?E:k>uUY0v<*˲R?>T-6,gY>٥;" ěu_.r5;/Yx0 ;39 ,}}96X.U~uH*٨Mm}Ȝ2< 3X{(Kn$_ea:FI y /`̒̓LmTRDub0K5YӐp&c,}~ԕ%ڒCt=tXYHzl =xRi?MΎ!B)ދS\%]6d53Wm3|F<:ݍ=Y:νUB|| GCj-[P"oϟq&߃s}}h6ٴX2M ?pchR7jkN_ؒbdל5mv8s_%Z2>ޙ1 U;$]L7FĴ\GaCg}qX`]?Q ^f]朤bΎlՋEÆ`j6/$L;6cNp .EDZ[M0:*0sڟix ˨,נk"֎^g5XΗ<6:Kq AɋEw߷$F@13jc քY[Ð\(pm+IseEԯGЛԬhnEñV@ƅ01"s |.t<6iѹ:ńFQE9\kM|=fm{x>rOlZ`Hwf# u#ta<~ij-gHwhSw(Xټ Q'рρ_GOH'{G۱ d .&KօHĬK1$ i@x/L+#'? hfΪfn W>q7 Jsh&~{ _]o Y:urV3H *ZxiMGDx5ux QkR5 쓺W~suPj}B[A%e4Xud5Ʌe{,ܡ]S(\xf2L3U}h躕G4xo19 Dhu^m;BH=vkii1o&FTBꔢH)[ge {'c]aP4A<}?Ҟcp7hƶ8;I5*ESŠ4Ӿ SE#ʍA"yNzfx#uc$tȧ,/>s =Hwh^xF?5k_󨷃(oP:cCP19o-;fn5 ^Ruq7JsLt8J d91mRV]}L#,ڙ6KPe@*Bmrɝj .v xi'g<⿌a \4ߐ)yL?žKd҇rµ-پt'FA ƵV#Xg s &5utD {-m2E (umY֩E^j# SǛm]MM1k\h}˜M6LE87nիa/hff~ְo Ww)k 7ԝ|akӾ[BFZ9 e9Z㑂϶Nuw,J)`3S`)ɘ*Q۾q\Dyl5gO9BS322H1C;a%T#W|%&jss衙Up1z6t͉eVn96pa[iXkwAדv^Gpqj"g[e`d"ԥ c[\ZwS^)-[FÛ+)fgׄ vcO\Z.NGU` z\]`7!F 5fڪ6M 5հ1oAcvv<9z+ڨ!|3>,綼+hvx.q<0 'e4!05BWi"%cFzSgDw̟p'%{S,=[jziDsEh6snT 2Qp]^ې8Izkm0g2 a +fqZeQ,8ѳ1{GbFizq 7}Z^4.a*PU,p,HԐ"Mg _zE󉕜rѦлɏѯ]<#0JQHcKAXy5U5ukF)o`f,86`Fo?Ά׾G3 KPAa>%)FwC堟Wⶊ3x-VD]g">/j 74͎a`QiLѼ咉k@_.'eĦ( lj.C۠ ycBv ί>Ca 1\6q9 Yhee+xN:,Zmm U NO5}SUW"fܦئDJ 2i~e.Yp{ rMڸETQo`Vk >[}qPtԔ5}IDg'O88d#ܥmerM>G4,憺בStd!k}l{z>cT}vњ qs ާr9[)%OhVnp9p(c32ĔǨWS#QN7>!>5Mg_-l\9'<[XE$0.ZT e-Jٵ7AȲ"zP F .<#@ DP̥| ˻!b7VWXqjV ?(#m0;_L[0W5&V6 Z:=?1( O $DSgda@*u;#0R#a̡'/U1'0~#,a(fiEufYhċ۞7Anx ̎g(HQ璁HEˌc , ]D/ A12ϐj PDwh# qc-1 *P' ۝z4+?wiSvfcB76C3i&SB-ozVqA-U O[̶q%8b6VU޷l 㰸 &"t4cIxH4aIhzQ(81a~7DLRkf45[>n<ǢŪd0}jSkAU fXYS# ͽK ٔ/,"NL촀I/)|Kz04an>fB)iD&pސGK?l-DŽir$a 4M {ڶ>πB!b@'?Fe:Bq -~tkA'<<_Gkwv͜uD $nW$y"98;D`i8,k tZЀ4(#!ǚNn7`N #B͆M3jbPc0l_yF6~DߨsR 0!_rqC%qy_.(UEY+5~h?vT;֌8H#P qɒD35Թ8! mĨ}wUڟk&s~hsڹ,#n.HjaGq!fh.~n^%!!tK{#PSGXO vyx_Wx/QGmg𐞗yj!g(]жF@#y+"\~]{gd}uCJ 7{(;6blwz2fW?{㚊c#H8 1\u%iDqi^19xhBeYKrxN\W$+G{gfoP5:k? 2XB 6!G/Đ. Uf_%!q&WG\*Ӄt'd.2g6T%O 33#.7jŌawFt!^0n俎>P{ ^:4}}eܰVo6V1^&9?g@cL%~>AofJ%_r:0cE9Dj5GTֹs~9H5&—]\RS{#z2ϑ+WǪb4UB@mvhY&yNkzlxi?Q!C+NhgYb;wn['m0b㱻1%bùBM;o=0(HeKǑ#c9%w^$n4΄~|&6Y=9눙 b_1`)pk :{Ql$2&s=8%[ܛ )eո`wYZaje}0?UG!Tx+)qivp})sSžIPʍB^K?8ųޯ]֠imn>67'ck.|_E(m`BSĤ-9,S}m1NML@Q =h3" Dse ujQ\Nz2Bga]۝xζ|vu-a}˂PN8 :$wM!9y&Xa =.p`Q4PW֣鉻W@'i4My6 cj9˯uUo<G޷t"30/(Z3Hu #gmI^"]|<W 4?[tG4NSN0Յa=9)Zm[K!,E!*BJZw#e$ -%b.ԻzӆJ[L^k6Ly#Ǡ"TF;.M`L(J˵s)0iiRv8XVji7}ͺݧ7 ԐsHc%؏uzXfFSiȁ9Cte-nǯo-1Bb+]7CnTNVf}t-g X>jGdPT$SiFĦ-3Ιara'@T`>a Y!̈́՘~=Pp}rh!DZ ГኀS~dj=焓w:AnHK1^O=i e-<7 W@ R]܋70{_xD=^e0,sPQRSe{nk4@|6@Ku*L%q MK.V( ®20m_Y/  "7x&Eyl[&њS Gp/g` {ް-'BEx[unvAGy0: Gh>4(n)"%|`=n.xT-5/R9_ޯ>B.03"j#.5Zڟl'!\|4}C79ʳф}_`<0?4vnsVFWg`)yG S3ftu5 !ysAQ݊ٿ5:V=b>?J)0;Crulf}n1|<׶o `/gc{`5Eƈ: #xCb|Tx_L5 $lwXaoc #Oe`N5xqcYgi|ߕEt8JSA^-Z}-2`Hm,gIVLMFX,{&coz_>㱻(m>X{wolg}"zXN b~,TL?vI!XѸQ:#]Nm+Vm/?U "vV>ݣ5")8=F{sk[\ m`JYMz_VAL!'J1Ga)* U-e9ɜc%G(C «჌pyr؆1.ܾ 8,\ ʳQEy5{tUͪG: }_M%~]4x:r_(]!X1LzOI qtlik1q.պ&\\AG^ tKtLwA)ABlb>5HSba3DnrNxWb*Zu.|HۖmG{>d_jYK'x0Ɉ٫a1|"<QPOBhǨgu"T џc4}7L݄P{dFm)dyG `R&*Mbow]^'0T?62tzÔ2Bk%"F~6b4z7cK}r S7=#Tn/- M޼ɡXZz-/([k`)6PnHt,G]4Xf  OR\OPGX~Ն0@X<" {zz__<$)'Xq٪ rB,2h;UG{@@F/Fae,n=sKs{Grq!ݍ{ l2dԈ͚. j͡]2Ho4}_ҪMSm?h,@5^ʪۜ}[;2k=mօLO+jUS$˚ąUJyCkk6bĻ* %tD݉#Չb٫Jv;Y[C6030>ܷD# 8;DYy,&߲Ȃ32xڇL{m;weE*:k~o߷{qk, bl!(B1?EƼ}MhBbW|\>R=[-uMmS Dq3xMt#[А\o7 A&J{*ZՉSQnfO`v웶J?Yu~qJ#rMRD)Wx&kg=l¢ۯ_RFp8)ח2w5'P]:_MK)qw"g%(b'3>uEV`BIn"[6rEހImiK4ܸnibK2We98ŵ Q.*lxlլձ0Ŭ8[hZMۅV%]*w'xz%'0`_Q?9"X66e 1=L_7ƒ #Z|1ZlI}ScgY!6,`\PjJ|i_ȻzGdeziqUw[3jf~+u˴>kph;Bs^=b󱩤LiqWk P"{,رD=kx7ͮw"Bt^6a4A#0 cB/. C|Bd\[ln7"ղUYFx{\K{̃~j nytX0!l$2 UcEA[)Y}Dp7<e#`˴3e67/˂&A$f:2jäY˳um;0 u>C1s:oݪ3m6a񌁓Lù|؃m _χ {3- XtwDIZdhp%_`[j7hk\se&kh2T<[󙃣jXI\GG2a^!܎>ܶQOHA嵏I?*Oj7V z5잲ruI"Gur) ,?+rd$҆{zѪj}?3; tWuktm=TYPM#i ]'-ƞIT!ru :&_?=g+bqvgz^pAb~evaX. b[{ LQ<}cw/9jb~+lf0?~4:Nm?w)Ǭ<0 *;z2xb N&`|뤛h 1"x1gM@jU;}!^x]8Cث[YKa(u/qhy.T)Ȳ2oGCuP*ږ.-[|_\W,3 _}fլ)E@uՙy5ނ۽G WSIճG*wZ'͵]UC'^Eiu2 'jc D_!{%UcRvŴ}c"*뚵 CAٽ/#y>:}Z_Ik` 5+J6:u8&h1GV>e2.bގ24,tr< ggPxGm2<6Ui99ax,P2HS I8vS3gX?U/kG)ΙkvIJMmrq>}35Tڀlk2:ax(_屐;DՅկO%utj럢9M%DIy!}-?mצ25 4lٻY#]0w"u١-hfZ+C~)_q~g.5: h\~ZDb{fۼJˎbYDp'rVT:_MՐ]J);A$~*Yy w%06$(( ׂ %ցPxl!7"'huMQ2&);Tpf:IB4&q>d+U7Gd1mQgx06pK$wz̎lrX'>z hN3یU!9VҼ#,WtxM/r"vPk p`MXxh =![˖a >>,|e2b$r5fn>Tg h/E=?e[ԓs2/0Na(de/}2DV\s}A4#z GFs{M|C2ǿV`7|uwi0Ykzk9=S{+}X6GnJdCɉTl$c󵄧NN/`$#z܏Y^C@S0uW LVA#f^CZp<3,( 31Kފ9[Nuz]Na3z^=yU׭Gʟe23٥QVMeh-pfn-5?@`Yu^梌y^fvna)bZ/, 4!Kwboyw mxagcoOl[ ؁uK9CE\L [eq$8 ơw9Y}^XEpۆiRX](ά@eڲ>$lwK5um6'6edؤĪxao>8j MPB8lY0ɀ(hiRtAryRU-H1@M(s!.'};\,WMXwC Ⰹ.}Mm=T nhcʴ?UǦdn*J5 a=yEX~[K{,'?~~ KT~ۏKuB&᨜CBD3Qkcn78WY.,`3Rq8HO FSF򎤭e4('l>ĵĆsEf1*\uԁC:SY_wؚTz$V0@돖<`s(nC\124 lwyq3J@b[F.Lg֮%%rD-cKcBA;Q 5efYڔsd|n|MG@. Ѽ̍FJI]#f"o CRrʩG 2A8&mAfm|U3.<#>S:4%J^Skc3s>Oc-j2]uL% yS&m!6 hGd}9ٗ7%U6wt6-5ꞩ=93&o2cK1YMTm^h֯a*ݶz r)ױ05b$t/#^.c?osOwbu͹&[;ŀ+ƶ殨"lhݛi^w)WQcffq60T3 mh *y!cq.^GK鴟f!bb"?=ixST,G׎u^ե!:8&VJr{qCﲌ3>=bIrFȨ|YVm,SNn2ILc.a>8T1Ca'JQHCdQc"+47łKٹgV]$ö,Mn9˧4E˔/Bvބ8>%yAST p~_c\ň;KcX t&LV(e:aJ-hâ[C@ EͶ4݌l5j9uGZ\*mN|WL=9DJ0j}"lwZ̀ěT(l<1D%FԘƿ]\>̷?~p#sRoRݣ y(pee,T"A$>8+m)_%pQ9^k9cz>9ܸG1Ij<.p7*WU!ZJBm@'ĺn%GHj=l!l5PV<` ,UkgyF,j P5SP^GpA,pyњ[.G>}$J"aTwz1n}mA- s7:0Lw?whZx] X D[-@F$Y Oz[!KEYbzƘ9* _bч}1i~D$BW /"\̚<IOYr{Fh*$Cǵo3Es]Fw`+EfUbe$3Te?U~9UEE*i/s?CX` k ^fJ?8 ) B+Ŵ!1 JBY7g:3bK]L -o6;AkwR.#]G^ޏ_Ef}A؜" )&.Y)V/կ?h]R(sZyǢtnmZ*P+8@ oiURZ#OOqjJS .wD{dpR.*CG]=MB5i!T14ZQcg 谢<./5CiF-#L:]r⧛>Lؕ(c0<oPjQ%ݦߵkʄ Ik)fn[5]D(}%D[Ө޵DxnM}oJsU淠&nUT&Uߟ{ke?Oy%nGSnxiny+&75Q"6?+(T8c0 2E?/WhR/ر*DZi~c?Wщ_瘍ply\n61QWeozpUœ7hw3|Ze8ni*>'2\?]|cé -&(vkt~!,q3NW{/FQI?-/ӳ҃e0 +yVwɆ\ r/;.`l b˿K1 f>i%:zʑԳ~"ׄUh, >S."vMc Tݻyrpy]Bq[cW!Wk ո l'Fs%V jJKmXAnj u3wK*q"Qg Mw}"?1M*kYC;,R˂zdR(Ꙭh@bSDfFz.;Țˮǖv܃~h{u-E$Mُ׉_v-lf^~СQ(g\U^Yp~fRN '}p?oO@r^* e8MJ->0Dq~@U-]JU19L{q94΁=ک,E/\VGgnZ9r# o. Ҭd@iBm)7'rO*z]:@bo((E b2pOcIpB=35-4.qVޯ5Hkt#.wd_LXh$+z^E !k< *D͔RMnc _ޢYQ4j O`lTr A໓閭c|͘uv9&t^11a=%PJjw ~sh"RZz#نpL7+*n}UW!#ҫj2AoxvHBRjZ98=1S<0X N;?-F)!`!1.C0P}9P`ȣQݝ$)`_jĔql_QH/ZJ RW?k9@3Jw<XUQV"@8`2c˙u, azX9ZZ&β C{ 3XyADQ6C6Ob+5{"&rSZenڙE+byoIcPSKNq/ K8|ӖbGƐcНJƓ^KW+L9Ҧ áK I5r[߿KC2s@!7YHW]}=e=ŇS5`q{lf4P`V|-|-Evΐ!Lثq4YNzzׯ'$cɆeϦ]tH#QptAE6,P9^9mϟ_XEzD² #}QV™}Mg$ڼ1aɨ^4,,i7;lF_?GzmN5RSqQrY j6D4hbKCa930sϷ fFyC%gyke 33Y>hq>RbtlZ7>Q;Bi{ =)]je~,UU!!Θʾ&},w_a{ b}dG&jBu'Q, 댊nѕ5=KMhUZSILw;\bga")/!^׋<kqkArκ؃e\ߣ6VIMzHBdֶAF#`KEN"lWT)28C;.傑U[P`<?tQ3s+ w56;U@ ?F1f)we1)F&OQ_F HWnݥR%<|`m̚ft=x:??FQK*8n?m1cd=ږ j% AuպmIS vjK-YEoţJb^#9ʯ? >!oq;HGض$MRsOW9<"pq:Av!.PO$}Y SEr~e@r[c-&1dM!B}9RljS_fђTp⸷6O0NLmQhY9xp ͐5JY.6ݷ֮R3ECSV@{H i GjOˀN?(^C]?}ϳmAcǩwad Yu-8vTJCRZQ߿C~He&w>R'#^,N-$)3ޜ⌲dX2r}\oy?srcO6zR?N_[aƞ;*rU3$L iqt,Sk&0eAЂP?&sbj M׍}w Y|5L)U 4V{)A]ka4 vYK{uƐ5˟i b+ On ~O<41Ӽe?(k0/mfbq!w.UcŶ=X"CHSǍLVL -x|t dsnuoRY-#E }yRfݶ'į-|Nhf274F:\9&YϦ𺯩'*N@iLbjhjzm& l!VD1mur*̰3}tOT*3{W0)_QԹ֌DQjU뮷d thrxaSvk, +ҬHꈸeZΫ"x0dpd)#ER*Qc-FKz_g^()>P9o}9T ms[,LrMtozGC9j1k犴U6{Wq ٨)i -Y'}]DZ1ABKvb^Hx<+uV&UBl!{ѯϿ缷ϩ~?=M)ZP8V09E~B2I\qeCDW{g-Biڷ>4KLr&A*I.=___DhK3xsX] 3J&J67Uv^<{tܺ}mXeܺwMTܼͦ_;N-YNԈD#YL-{xmG'Ʌߥ݅ (Kbʚei+fd hBeZ^xNm4 7ֶ a+۞Vhɡ#uy!IǡS1ij 96Q?Uu4:&,$N4T ͖F!V*,OP㞵ۼz_U^#ZPFyYLU~Pw>p)Xԗ/⧷uLJ`) ׯ(=ux)ɑAd5&TÖ4+~m I "ǿ|I-ΦO C6c# w*Y ύck1GKlK&X5LDxqGP&soHnuE6J#0e 5V4{΢P5O5(2c ːEMuPeU-p~p1u<(h䌔N՝|@&=1FlCTZ0 ۘ# [Ǽhܤ{7Vy ٳqws{ \nqp ՜p5?)g4?7?beϙBk=sK,F7SG|]^-; #{ȡayFʆمj.H% ,yp@զA`gz&85r f0iT+}}qRmLƒ Wfǡ:`8-{u @Jn60/1>3XE3~-(-*eXpvt ",I 6AבPL%GJ-p:|w9W{_*0:1˹6Ǵ`ٰ ?j|m}OL>EG| gp[q^U|AmW<_qˢCՌFUUZ` 4Rc 7 1>O'_x@gODVZpzɻXt:ѤIz~!8p,s^\ĵ{xQD޷N"C,m^#9IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/mahogony_l.png0000644000175100001770000010330014614030313016704 0ustar00runnerdockerPNG  IHDRzIDATxJ71 ,* BEIO׶46D oJɹ9^!be72UZSѩM*oesZU 9 YUpiPdN59>Eg<13vX5#UbkkE4wIoӮWzә8_ Z_ͼzBkEGƍ0ޱ~(z *U]yqkS4;\cj9? Gڵ`"uJvTP~NIfPuSfIOZ?~f+3C t,lͷw+Ouo0OJb ;#ћ-Sw<V4SX3pgF7!ղoj\EEۺHഅnԚ0F="mt_!EPi_W7ܴj8x7|b~n7x_iM2`_U?K,$I"m^<~9ZZ"uҥ8fF"hiɍ I7)v%HsZa$ DZviLZ'*Zdh$Yr{tI+TH-r=妗#KWU[ZivI)K)x`mP͕)iDJIj*(mRVReD 'V$ҊCU0ef[Zm "Kݤlca̺΃-=Iʖ6oqyE]b>apM~AABrK td# HI-_i^*K Kݛ/(e-3fb!Ow5bNϣym˶B$j&)*д-H:jzX,,~Ie~X5mJOQ}.H <!?isslLS3vTJվ%QD ^ziZ͍?_8Hr9敐g#- \^=<"S+7gmoZuCW3amOkO)> ySO 3GL9[2Br+dͤf{LHF/eP#Tzp ʞC7)ـUEXQyJ'I%C%Vv9ޗyN=H%"G"z ) -P,lK*H@ 2ɫm{iTI%lNݦwZP$$ďSs5R՞G(7:3elUE/"Kqn DA2o\oqao#AjcF cD#4х?RB}JQ:,ߤkηxJk@5,Qd'JT4P@sr[(/cC]BAF}`BXS88^4p!(GB+ t H>\`eD}c=lRX/t*7㮵Y̎6"+*aPc--Nf.f(s dVU2d@h&]cc  ~.Ŋ*[Y~V}SzD 2grJ.P4RM/u"S+: l|rb4M3 04e}%Or &W _TȥБ8[sEn΂fڿMԕys~}h'"&OP\HۡODK>*($f}FO" DXh,AH @#:~tgdSs=y;m-D%4* $ x $ƀBc$ `Ű3a-X`9 r(HE""bLw#x=-bIs3Lc#]`HP24?x2 =Sz*2u6Jߩ (VxAAj c89dk HzaDE1`0 e x4')Ip'@O YLOU%N2/R01WR|Z/˕I~x F079 IIҴVa@m@i6dFΏVXQd|AO!UA'KF&dKrDnh&0}@ ZX/j;7zFL\|f$J-F$S̅)hUB^; Sh298R߀ AALLV Z $!̜vC`*`2"mxZk}Rd!:s%bUg=1S u 2T}*j14FIB蟎Vbҝ\ǑǷXRSW47H! O姘L /q%x/pA`L#B ߎ_<3g#?prG  aWh.GG&tƕz2D 'AP^HEH!H Flc K.OndJ3&'1D J1/e03TB5hw3zEorpr;0A0Z$+9BJ8x!`ՙ1Jx3r"`! yK>(3YZK\a"  1".S_c~3 HhOe6UwfHiP.N:`B&^s "m}Lur঍vG ׸a:ɬO"q^!Q@&C♋sMf 7R;ty4'[{>nb35 s$M6iX*=߱k˪hz$~Dy( R7gUpLœW֝aHB*Z7l;tSze} > x*4i \XCpWrkI\#.kbBh)pfT@+(ԫ6BRTAt,;}l$SET2U`PUj=Ǒ0y@7E tL ϋy(ɑ@Gv5ULE$Z4I(ViFA=卩\磡$Wny/B0zb1Ue4 & 9ۋ^cFl(ByVN 檸87Uw#.~gkQ(%] |ZT%I\q 'C5I/(%3i((GEO;$ӫjitȞB0gͣ2M;~>FK5B qQ} K57ǚtڟT%9L;,G'`dkjQ?';_Uu ̓["ѧtC +) )NyrGEQ(7M'xn"M@t*04I)s537e/ur>CA @%t8 'e0~1u1Q pʡ gom8qU=(!4cg+ѫ@),q {ex1~!T92'ȈB]-f{7JR묶ҲZܟluk%g_;%]֦qĕ/{ zjY>- 4"߳._F *SG@]Q.鋜<_Ϸp0^WTT5*A|i/P_DIap]k oBF#32wS\*X(=56W7@iFp ?OL1<A+W DՎAɋ)UƓ0O= Jqݚ A 6Hԉ 'lD3+X7lBB{?z-gtӏɢ{s$A 3h}M]cإ{ icBMs* zؑ8֫%D91ޟB|HTKjR:9s~ܴ&nbs"2y6 'InGM}A6}4ab+}t/ <+dwˏADOr#r|'̫Zჟn&q?1?G ŋUS&@KWhZp BQD֌_9Hbf-Dߝʹ! /(=鏪 \/'iN |QFR ke@E#wN#پAXYHxs׍B]qN|ʱUbaBX*Af.dWW< DBZ zZp;.nZGS_0v>^K|5"pԃp ?]LGZW9/XT}Q.*obsX״ސ;A^L+ ,<(<4@XU/(h.d+m.?`smESAyxm, 6Ë:88ެl=cY8=+BSD'@Us $i5 9w^I)8KIhkChq~ѩޓ9<` UGPdTb~` Ф`)G8ˆۼ?韾o_X؂-ؖOy̐5ݞ]$Y7O'}oQjmnlɑL8BJg -*]@CbǛ'pOׅ h 4* lܛ` yRW,-8\4 7"@o5lm'#NE#V&*e7S|DHmuU>Ж wdfbwso^%;) x!B\_U7duzmfoeW뭹A߅gR_cAƣtT$@Wf8vO/_iC1_-\Q-s,,oӑo##=.~SC 9lLLzO7~E[sԎAǛZ'(0O-ʇDZ ݏKo\,B-qf[ah(>%ױYG=\JC7A 7pVZlm;wU9+Hi%7+ ͡uBik Z&Y}~1(VmߤNJ}cr6N.9t(9'ž=%v0BQpx! $Z()qt;xZ/09H$S>'g9ѨÚ\ᓁa ~.VZ>>2 L<Zf6*kt!B6[`@q MD*n/#p\cL):83ҥ=w6[FBqT/qOJ#BTxlTfU3A5ӦJ޳"6Syf (P./\QOaõ _H׹LzDy-ZНL9w AD4>e$MB8OQ [2fO U}AF~8x;EE蟁/5 8xiǻI"uI;E.!)w-E0(״*9YON83 B:)Rx΄koKxJ!e\q1[J °Q8UO,pй8Cx25B+)T2tSv$JCMw}El>GUc Wғ 'ZuL@h'5Ae3eЮXB-D>'2x¼!> z:"X$Mv*^̷OLIj‰{a 4{pv&,Eg16DVI4n%Io/cYޘ՞O czVPqHS<)&C.XJBqZ` ! ED'WPϐj Ժ-\oSgm bE0qUk]]P˗(e7F16%2~"U F~ }LY'H߽@z1£N*v_* f`!M[ W컵x)~?Q#G# 4=J=oiUef  ZReFAE!MhU[/]uFZ ]Ԧԉ"4ªI8;٥k[LŇ9O@'0+8PZȘ Hu~}'cmfEĩO^:XEOD,4"yԘodۓümU`no*Ψ9UrNGK-ƍ6l入K-M0Ź>=s:XHuag 0vԕ{ü<9caW/>&N&. L~*AyywMtQ;(=m15XD3bբJBL)ꦕeć|D?\H{b%.d+>+X#͎nn1oYoƒ#+Yݖ}Lc^g(tK?LP3Mm t CUf $X |?ftϡ(#22I7\K8S:ԢOfdѵ (\eތe5?皱n9M=O:l=dcֱGqưU i&USm/cOjY \TFtmշ.1;k9*Xr ,ݶOre2E|R ĕB#'UMӄYhÇ-7 v!Fb>AU5ϝDZO6ЪGdsGBJr[ ޘvqSb- ͸ xfzJђ*<JBйju6֩dU {lnw9KJ|Ip5|r%gTZ8ɥ;x!Um^P|',BMZcޫeVZu f][fi1F~S i9vs76sNj!}|\eqϜRp%@N X.9=BO 0sPckN'oTs 7gbd9CLz}f1nO1 cP<}J'tX33W~<[OuœQ *P+_ďOiӿI63> B4M%)'9";W5%cdA}Y %n+41oBZ / (e~)~v6\6F䊼tA>b:A8㒔Az [۰cu?o?,2Y (B/k,5rtͣ TI 9yKnPGϭ#Dm%{D6>*Fdk6ot {4Zv.d91+gȩVd2t컾 ;44ܠ=s@"l5:A?&](p5Eʞi-U@9 q2>1žQ`ؠP`EHF)[ JQ2j1JF<}?z[q?NlEj=0sc_ aX33+uzdxXOߨe֜s火L-QQ{sa]>b'i_  O23C&牾sZy Ұy@?8*eq>BjϺs obBC ܠ¥CAߐss^,4n;j4ـLޞxUc Wȼ:}eICH׺:?0np3"*UȨ_s ~f:sY\dM؛ùg%BI-^VPr@޹3j3QQ]n=cd!ș'QcӻQYn nEg "3&!#Ā%'3kUf { ]_w+c}!U8)fȕԌg(+Klre 3=gGU:Я4xKQuАSG^)Vp oxq9!tƗ¹\y˱:ift.̃y`ށLMOcEKϻk^rJK̙P-ve+0#EV8*H/#{KV"p'܁*6(ÈX_ -\'Ru پGe}|1f$pվ2”i4 ,YT[7b`AxBhj*Z;e_!:0L hѠP{ljX&@=/Uy#zv(dD EJK.+*Q9r4ORzǖ~xW34]¯Bi8_nMPgz@'b\ &);cؚ3̩h&?>RW8,wz"p60l}MF0=S))I6k!UӓMέXW=׷ B55TQ8TtOI< L2ն/p >XVy7v6S:e`&K"DKJT*b&{TYqye@Mh vݯ7/wFF^@IqI'1A!H:U'JHd68L?So/H"sI^iAC&ڂc_E Png TG4_6ǥ{Oa5g:d &m{$JfUȵ"jEGgۚ`=9;Y"π&u`z*ŭz|1ˮ鰦QqeZ3j{cF+LLRrE&#~٤+tsn:>%uc3pvpӮa\9iYULϘZB]uK̚ȕW{mbGs^3o,F !'Qٓڂ 0ڌyPgq$_TYe;,1ۂc}'n5K@TRنx] ٟB%S[x8pv`g~2=}R5#f . F׺ TaO|#FezƆ-Ś 0CĥA 7T5NL^BI*%hXN ?FOPEGfJx#t7Ns**afMX4(;h jb|Iy.=*9+lfW.:MpTmSX+-@}TXdrNx#WlՆ!^ׇKNEB@Pk*y$Oϣãokh.$.%$;f5CwvN;1lʌp3\Ѩr晙7Y|R5&:[AάZ'֟:2@̪*[/˫rDg h<g#nҎ?[+ⳝ!@- {x|Og!rx~TEa;\Ќ ?ֽÙܵh_p#d~gƹj{"x9bH=C0}U0.B#UBۀmҵ<T8qܹ zNUbY/-v6'L6#q:Eύ`~6V:Fe}N,Di&nFά] R&N ;g&V]-[vǭCd秼NQ'BR?F p٤^/̍zlĝO 7C7nYRuy;hA!-(`(דr(dGӃy9۾̙QbӠԕY g\3΍iV7k*D]ݏz=g sN\IF"Ebl0z(:ŗNR[ HR ߅%$݈= /E˲Q'ҥ5GtavҀ _.<&f d&'i{̹1^*D@@j+g\"Y{(iIW x~$,^޹22s =6e{\TmBUmB%S5 92:<3;_%QX?+7|E 7E8@w#)E}QT}#$;X4#F# `iKOdA&}UOĩ7w}}#4SW8\=kUk GƈZQeO^9h[FΪ7]so̢8ߔWH__ *)4B\j(ʔ3 ) *"Ts9jŻ >@+!'>-"BCƒ5D#[hWJ(ZIIc_§c(3sv\9MA>9Y'Ye*7?'BT~926G4eD-pNxg<Ө/d9"ӾLߙ{X[5։%|׌z^4E%V\shI;A9H_Εe_ mKu~Џx^7: PN̛3Z%{@TQ'6}z˥T?y24}ղ_)8* \lJ4,d̤[X@-~ a:IgAj<ɟrs?+>1d_z< brjL1з^"9h@7Rnm{(;k!9p|g:<2*;+18|Jm {sh]\_wFXW܈n[k`:_jmWq= s dR"p1jҦXT|HԑRS%Cy,; H->RW/& B*i8 y τ] UL ~o8+~30و;Dr*.Ԥrb}y+ƞWD-&$lX,98AZV-9t1kZ5{>.pG8]"k7֬+cKy"9٩vѺR[x%U+m_XgSFҌZ4<8e5ᝀ2J ըWE9C.vqV7C-l x>2ùLF|G"tw< 8ų $NY3af73zQqt\X@p%jæփ^to CeBJǷ2yKx_dO|}׊yTTP '=U5BCȚQ0v"7>GIwJ3>Y,-[{^nb3dR`(kp` #"WЅxSkj> ~C=+l5OD_ZH+ g4(Zfvt~> 䓣 4.B}&MetǢQ, fFܯ=3zbBYjOy]P#*F4D~ _YPk]P:C4 qpDΪ PGS 0ע4ֺ^1:d6 3|jFS;"Y }0wwY („d|4=cdXϨӧ+\nZ#GKGRq$_4cx[A!_?_&Zžh{_7B^@꽔'E^A#WHq&&kXnkhIpyoX;sᅊ8QvBR< Wex~o0QPe-GɏxJ+A^baƋ;wANZyc/̭hR\GBXS!3~Qקo@du*9w'.Ted!ߖP3XA]Q_=WKz |gI6=0OP#+=رʹc>5vM3fPhITa%#%%^1YL7?ܥz 77c%bT@j {ZNU' mu_{O%[*u3Up’S٥jYtte0EGʪ5i%3! "]`k"m~|[essxߒRl E1co⃛g٬!jD SݿY( vG/3ICNFEY&#u1uPJc6-S21*lm'f ʌ }VupGyª/ZD?ºIFL# <'M,p}Z#LDX6\L9*' F?psߑ Ib5cT+xEy1ٌzcOY#t!BL܌1<34eީJs{"t/Da@Sz߸lϹ&#[홢 #"wG&7нef&X͂.#Qg%YnT jͪMDEع4_IF+O錠kb"K1Z\hDceFUKg`Mo29~BwV-3qseC=H nҏ1~f냌T.~3+N'hbv|>*v1v \a]d9lA>RځoX uZKtܿGSL-cSsr-V楻1XRx8l7 uz)IU aѣk.DTTK(M_PɕZ53 |ÜK 9%O͎-$ܴ$uqVGj[4 9&C[TMc"R8tuu'(cwje80)njRH#:}ŦQ'A^Uv<9 oauޫ48͸E8X*J€ONzpá\- *Z4Tg읱C=2;Z;O$)٢6-Kc祙 U>u\[(GLx]JXZQaOr>5?3QF?ńdbvbV5ԙP*|@wK]aKj\T)>s(& 7vz#56mO&0R#n@.J#?رV t vw3wޱ)eX7TNp?+CGXJoCYWqB=bers9#gܗ›i}@y|H\+Nq=KISzCUBVagQ8AS(Gňs]_pprb}/0;| Umh$j,u*Yݍ]YV;8>sJj[Dž,?jkBE v&秎r[RPyhv0D1섭B91"9:┾ Op8/_Kyo-9ZD<\j$e W$?(ZgNe6SIu+ FbUO MJLJzr80OYCdhmFC_2zV򏪆Ȩ$E`мa%9OOKZjqhl<*7].~z 2()R]U{zpntibaN@k/[1_@e.qfyOV87!a2I&[Joר(F~T:uqF?ݕ5@leӻG8S1T':;6gE͊:=E/6]$9OuCTl3cU y!!vP%ҡUtCf IfO`0#;<'d&.QBYX,L,2Yn U:]sf~B\{Q/}{vl@g~"~2#sȩމGI41]֫45iEGQYroO{=g9}G4XBi{X8:2W!],Y$ :4jγgN,kd|N8HnĄ*.L O/gt A=!} g b#fcáyDWYQ.¥rs0 FP[K#+V5r1vRƜeW )qDkw5TIጦ&ڹ)VY~9 z\&?MH$t-9]fE)~dreTjEՖbP=vΕ^G̜G~Ԋ{(Եܒ &ܑ7ro+~~+9+t,XP6- ͻO 3ǽVlUg8>3r^_\{f9L\O'^̥=)+N윙fG QSR y%Яj94tQzMbfu{VwtKɛspH/@'U -&҅>f$Fƒy8#߈ qRb}J >ؗ!_™'%׊z央+4:·! 6Sͼ ĵU5F`U ̮R'rr*/1*4ns4,\Y4mrXB/A٪ԟȪeAeXy芏C<wLG-ۈ5PM 3 {Al+üd3]{)UI|>huC,3uѝG3h;eI|~2H[y(=o1=Y5Г;z7p%fc?ѧ2هB(G&.yJ9#pzƌZj3C"ҤgQ}F|W#. ,@ȝ(x-Ls ennkёӃ촬-Zwk͠W+ V7LDtV~_pfiX٤O"y1y{9j2BOP0G/Be/'hW_[8s8!sb=1SEH5,< ̠m_WRdd˪X ah{ xKޑ: ;26oNK"g&"h³cHANWEp(T8/ s`8L6B6cq im)plT9GD?FU5oA8?Y5DEN<.=FDpVқW(EjDcQ>w4ϰP>PY_LF҈ޟPCRYDgRmqY0d'!* &cu9t*Nw;ٲJ^3 Kz K¢)^1-Q47SUb2-i-Ob>Q& ׉F Z‚V?c_9*!9vX%޸A@2LM^2\SOX%TowIt DŽ~[)v%朧NEA%J7#6¼ȱOLԗ+6"tkX|Nǜ4/ h.Fr*",ZQD֟״~LuB!NFN 쩠ѴvdLdʈKXJQ F Jcgq;dO##$sfJVb`SH19eG.W!'~85F*Pk8+0Wy[+8=a 1tzaq9J|t֨,b T?Nt))d:RwֈO4G.<:/+Ƃ4h=ߤJ~.F=Q Nx('<#[zɭ' mZ~쥥UY8\3Ҏf_CZYIh fҽ\9W^duRuUQ:WNF!&[VsWswDaq2r$H`a1M0ՐA׭13+<=qqBX:_\=K;b@+Ԭ8-1!_ S;?%(вhmO'G830` 7OPb}X}~P['ɠM2t_Gx8gSד쫶Ō@lsDT%<1Yud<(r Z~z>aaVyƒ2.l1RuZpo3߈/̨ZW'}f:.)P[5s;@)fuf6_Q_J%@{z%iGX_W+M>fӕ y\h[YY80>:[2U> {+fi"8ķ8ufWž>^rM+KL֊3d͜8$ekO|Ӫ|R9\1@8 \G4Jdk#90WyZ|wաpe` GpХEʢt--jK(ΜY"cG1qA=Z.(uB8.r0ByITq;>q'L]l"W-Hy!ty4+nY؊^Y:ٺy2W*E`^KwFȒpwr샖Teư/6$ɕȇԺa [n"W\+"u>;ߘ"- h YHr>{Y]ˑoBt3;P񌸦A'M*FO|`ڠ8Hn&9P=weaiI#M$,\tA lj:}+Fti/|5+DJNm=qMy3AfA.=}Mz*:l[wUlRa-$IΘJC"7' ɦBP(:s&'I!Q 4ŧGRgKqZ\BX#.} R%1!^E76VF ~ʜs#b>Ul}}y'`DIlȑ4lv8- N32u1prT[$'qrvec}s,9ÚqC̯ǶH7H7լA\ Ƅ  ̩poq+ߙ-=q鹑ofߒ/G$዗ο?58 K k3ya$̶i볠'G= ܣ#+3$ &1JH$0O/C-|L *}s&SXJjXWo;'Zs5C/ APjvӭ)ZCl,=Hr~Wdd)=1>J#YLZ`cܛbsIο;b0 1{Fg~ r*1)lw37ʹxMQ4/4q"> u^Ѥ)ݕv(ɲ^qdۈq6aJ'Y|QgdEʱ1F$]^j sբcg}E^&?L.9s3УO#n&F"bKP -Y ܛʺ=p|i0^ WdI sLu9zƦ@kXzaiZOɦ(Iga؟#aBEh6ⅬXC%yUFQ]~*A԰ t'J0M[f9SK}'%װH1ڼM.73_ ;sdʰz1'3Bvlִ鼗A [CΡYIǪ(ә`b3(РgU.YU3nV=ٝqtΉ9*6,W;gG X+ȵrf$nzFN27F%Hp&5X+$SP+o%BNe=,/Ao=>oḘaq7qc6C^(Wi6AwbGwio>-v:Xs31 CֵtGwq{Klm\#feõkmC]@|*~"~o['{W(ZxTO}"~QSjI0'Gٍ\xpjQ{MK~ *~&FpOx]D^^+u$ONnQo{.̣*fD--qtKT!8I]\QBEQq1,jp*֛{LQH9Ίf#=hb15,Ճ=[w)b4ߜ#um\ޜ8E X>dTEgjVv2S/Qz!kI< k!s'UPL !ܞ 7b&]Z;-uD_Fm)o˝i2ɎX1?81!CzW帨4]ȘpHcD}76K|)'kJ)ѧ%ep41N|B$-%o(6<̗b#ӇY.V5b:#xq\2S YJPnyãy$F5gGيt\Zqh⏭GV-V ;+g6Q1m| XDNZ@ z!<~]&R_ʁ:ICxd7i8F[ (Ԡ14 )5/E0eV5>0_QvɌ+}J3 Ye-uo'VC_t<-Ɣ"'.F٥Nl:brW3W̫p-v9RG%KTI6>yRQJ۳>jK`uqʙR}PiNOVJ.w<̂2dwmM9=S,'>s1}#h^SxddZoɝy#>[\YêxҢ^ޠdxj[m|-b(9IoY4/GL]~krgЏ-qEp4X`pH/tϽ;-yÒ2RmPG7 2ə53/{'Ld0@il'U/2hYuezV$3꬞kWķXˋa-ύ5XbC-ƒkµE\JV!nי+''paGgiejntWĂj:S8?laIN;jp#'&JS ;%0%WGte{~V|szouE䕅8oJ&YS9 8ǾT5y_5,W6;GkHi+ =L&R][$A)og/} ie]_V$WεWfU~2„߸T]φt7iBOXf7!\>DY 0q]5s^km))2a %F ScRvgĜʵ7* zžot*29Tj~h: 0ϵdϦ8(w7B %r3Ƙ}FA#*M2T`)}}שH.w 3?YE\ewvC0YMk-X050I3] \*c?T6p̋nE dVі)1t _'EARՒ4dʖ @Z@1r);S'F$[\[Z dNESD&Di*M%?FuO&) Jq}| ⇒Jٷ( icVe%Tk+qOipN(RfiI؋f>f_YϏ\wIϗa>IAE[s"@}r;̋b.$ꃀ!J$^oMܷ^ι4 5 訧Ej_zF')Ó$lG`Ht' ?K۔;r>RfD*JE>JQvV }p qޢrf$f+Y=f)zy<\yYG=^%?cZVcjE rH(ni`;ޠdPYh[v57Ur&싊| p̍z5OqZ+Ī퇃ctw &Jz>Vjbؼ7HϤGR/w|wQ|w-Fx~0.CH &R1?ϻ^Gp `Er|,ܨGhis}IodiP՚V0~ xwH32н4 G{i1'(bAR8KڪrO'SQ裈4w*p89*XMgu`2w}" '9+0 _}ySzGJt0W>̍ >-8FLeĝױS>ΌTql1ր"iƻuoHo>p@G='WRKYZIsnǡBC]$UلAW}=6q//fMۑaIԥIY *9 )mrD9 ]JQWʥp)9B6̜;y95b|jkȧ-5ğNЏ=@mVhI&9~V޷z {JbnY?}_>SH;3hc<-)1h1+D7A$$uQtD?/?@9}w/<;_70p3 HGFz[-AS(۶c*skd0 2 o\x2v</cMNC1vOiF^ ,$4E(T\2s*T"l5jR~Nn=ى{fnSC!PĚ|'8zq^}<{i=\g^mJ#E]}ݷ 8%Fd`6]֚`Lp(Jjz@>TDvwIxGx/TXRcCu#_cKcBy:) Q MXH?$=[Sw#) $;0FmgŸċSc.bLg7Gf}$V°t;p Q,GpVU-̔Wj qђ4,&CZC3+Y4SjW{B2ϒ4|m ߵv.`J>p 1|Ӱ&YNƄ`$(vAzV4g`cAebXå |s`Aa1][|?8qC\{6fcDCpE]dNϒv}-H1q k\~X[:t ri<Ւ(q 𓮂ˊ 2ZAI A1&!b7]& |@(93JM*v&8"nHB+~?>Psj11..r Þ؜e&B=ǨU*tF|W Wg GT GZut0Z%{ױ^}(s!3{уB00=Ygi@#n<7J o}=VxW[s)^ٱ] 7὏^8IΙPi0pGћp3r2^y2˸Fcb#xAu}b)7)㪸գMxHM 2::&k&/)S >+. >T,GeF|S7Qz @8mxCdlgi>eB (~v&\ u3'ڎ{O2ڄ*DPW7TAF…hX$b CS$C%юh3,ܤβ<\/vzb)vTu qprWfAʀܻ3Jϖ~. sruC}5ttEr9|>Z}sE~k}бytjLC-h674}m<%f: F0 `gMz_hȊe$`$M72a&&'=~%o\ Վ %\A}"Fg}M hincU0N=z*Pvf h+bKRK.;ژeŷ`a@ )<)m @O$f>.Y=^ 䪓Ԓh T*Tç8YұDK:&ђ z';Hkb_nD Wݲb7ɒvhѹwY:FE1~TZ+IINpUA ‰mf׈Yu*B;^7g # D0L5d{ω hBM"$ {fѱ/]5[Ggc ;lfc܋I?Y,$D;@1 @ù>{uE= -I{8O! xսR7F^"J0H;6PӶk|Mhp>o{C%4`|Oes# PaUPvϧ@Rx5k0 3$CǚSefK΁cx5dU7>gL/Gq=]HU.M{gU>gRjȘ$zUv -/ a<|W8 ىKpcq_Eo+(<*˞;t kWeIdeFQ<ƸV8BHS؎)a$w6Մ-Uϭ]z?GNA]wA S{GL @^M?sϮJD:ڍC sIηi󭽡~;Ud?`Y:m4W`7qއ amI32! z̵>|s! |Pavl#s|LZ A p,dF `~Cxlh/@Jrb*Մw83 Agv&Sso7@USv7D%:iJv!OM@ yJ`T" >ͽX$jNg)߈Nk %t3+=<Z#Lptkx4 ?4wblD=RCn~VwɏHX" p)a$,HWk\\g4UTWu=[~_a~\0P%pѤ{kt=U3ceKM 9$wGBp/QӣJ/QX+"<8ˇC  dsX}U#< ^ZLm`C/z2XY2 vw.8y ,`+;Š&?׿]|8;59uXQ) iK L3(t[D1y:c,N 4Fs I,w|AP=V 篾nqds7)4*I⽏jdZ}YlG(9NK.aS@pH>P'1jK`gG5aHƅO@hi VB ^|?}qrI8GU~tdd!Mdn_]L/n{c^>'h;^Bzb5aށ 6W dPNa,$xJD,tga ?!'t2߿ܻ*)XK4&\3!/؇4q7bVlzkNy{I۱J9sDR/"Vs,qw |yսsףĈ 'aN:bC!½ |`~'6Odmn½5(%Lr'wRT +FK]nK*'#P7fh´=xf Ԋ$R70dϕH``4#nLǜ tLɁ֙0ߞ>6OC>r$ctxD$Ơ\\W=]DcNjDv4 4t4 # R^R-r"IKƸC\nqluy?נthdar"J4/Λbv+Z80fducU1b{/Xt[CJY .WjgIc]M1^}OCn #|Q@pF=ֈ`RHvJD94d&(QZpry2_9}~Mx5yPIGSY/RyJoM2NũCx%%71"]̹P4?=Jyl- ,G/H!Wmy\*S1k+$hA75c,: pxEB)*O@ ~Gϙ@ơmNN[C.BnKczokQ}pZ6FtTR.YP  2ů ;di?R'Ӣa'Xzb.e a1c9vnh'oИ>?>R )5YѰ+CL-?z?hd;q!5\o@]Llo85+ݭMot3 T6$Ny誂'__܋D @ WyHe~}1P5^"DkT\v3ᨳ\=x xQZPs$8ʍCBZŸ1_%k 'žUCNg@a}"]n̩u9+hgc(E$h~<<DB'6`J(o>= *)*I " >2Zhŧ9*#Jgλ!DkWp.$B& hU~ חTzWH6%e裷`yw)j5&MN^5uc[^.H$M'> QOuQfpѬ*O̙N@`g%~ 6ΌمӐk mqd4^b #סbɱ򃐦N;>RJ_wc֓ف;HUU;izʟ|㑤90ISy\+2 bꜻ^W?LGMak-H4#b魁B doǿ%lGgx-:\GCF<;irItH?hruXz[/=m{rS4(/R"4l9&|0IQH^Hx. ]{0(5%I Ib `DG\{(!ZGƃ3Z1íQIk)&E=cgco ./'ӑ%[4Yzrw(DՆ/]H)b=5kv$*+Wg`2rYFR2 L8 7ߋIfw[N!¼⑽]Ԛ858\K {Kyͺ9M#k2Bwub;-9)PP./K(FGτu9-8[w=`ʑDjc#)"qLVǧ_./}{W斥&D [cN š%qX9V)=x}idՂDf^8 [4j̸ꡘh_C0ZJ4KT9EMGg #ްvrfp"ܟ=Du>ZjLD8*h zcxL-$9@mgg 18&ǩ Wrs1oSƲDM֍P0\{C[)L@#ͯqXV9Te4%v(ip h#{N_Ḱg%>Et6e\^ ){[ hbzt I \\1`d̬0Fs}`*Č@s,`ܣ{gJjHʃslDžM/QThCM EsVkSbL'ެaZpgzd-#)7!ky#J>M@j؇K- c#l*@FuaKI4C u\sS}y| 1R6S6̶p}%!ѯ s.FD_^Rb4rr:{.8Hsg< |+_uc|K`|זRu7(SYcS͊~g(N|"@0\T%fVDųUt@͹X퓲S`wqh))f\"__slY8Zp8scphj(Y87P0b΍#Dy Oba(1'Q (/6ot^{p"K[Rlo,[ & sK;8dobD35#}(Q~+ dH-"@t%; !@0ܦB.Riz~^!# Cg1d)zrA]p.Ɲ.G۫5pVƣLwvRJ h >櫴K[<ĺddٷ3GpTkfs43֑F{,e',3P!1J2OZ+ĝMaD7y[s-P̉C(Gd*\' 3t߅ ^ʳ}OtxjgL+bᅨFOm^~>RgܧUA{>Q6_> c3x\i~H!vU96_A@BUVKo]Έq{\g_*!F-Q~#sH}$K|VLYn/reaNozY#2A~pv̹ ?-=^hLYkT͍\À*En9=Is#97d^s@86_z%MZs5Nulѷ&fs2{y> V@vQ!KCx'w8ۜsy&gXDz#,TA1/j-1^rj]#,b@^cvԭ`lÇo%j@q~DLeUuL8P^F ܛC?"Fr3xdma N9;h*9 H5Ê醌\\J #5S+)JP$a l@rtAyG䠳Ye O@Dq;}ƀK 1rNZ68g4SSO~{CyD~a0ɁQ%mNb*L@XU^%2ipDnaJAm,D1i@//o%sp2hpR`DX8^Ny%\HΘ-?6E0:4'c%3S 2Ufo5 s  |$˜MqS+֜:BRѤȍ E? ژ{^+=ۡlOtnh*n?O[v$U-CRtӳv/oL /$jwo&q3kcu<2sO%HÇ!іhvI9Vt`#OLTX,ġ[CD "[+^,-V1fyt`/L֨sWO(l0PXʒ7bcxZxP<3(4>{Q9@k6 릓wb75䳴S7^FM} ŤvˈB'3w[{ҋ /0"~p~+&gԟ*{Z~P.&1CO 3NPP]w{' Ra .\oE:R/ AebP+8T-*]kA%|},C-k`v\*iE@B˅'njv~ -}@D伯{K ;*?˥:v&&H ]X Yj=n3PgT 5 ᢠHki8^ڍ@VqYU:lE0pN"2f^^Cy`PWg^#O!}a/2(U|mMGu*@>Q˲@uOF15K`wggD,d/t} N Q0Y}r42A1_SXOf項"^ںmI1\eJ*pĔ WR)$ǞU[3Cp)kEۙnd\RuTD \E-?4* =LܟUT$04'8 q^*v?a#bOKX0LxD+7iP L2g?-Crƌ##NWZ㣟QNLU;(pF!o{5Ä6J*S6`ne0ۆ&@q _ TXS^b`r!ԆxrH96*@(eǚ6Q^vtP:>KYzЫ@lfxwr}j.ޛqhY%!QB\)L 䀌HIjoۗ9ʬJʹڿݾ6:=[Ӷ<7VtroG1F]W~Z'#eNoʩ)h7͏ztDb'xhddPSZB:{9-INM6J=<6h9\Kmh2 JbL|m3p "wș#emNnӒAȭms Y|(i sN0)B_blC஥j{Z>κ$e#۝Y\ v+Mƭ=bD G,=ģX]#C)*gC):Wѹ!rJHr~xey듽ƒu<|'|`pc',Z#G{U%X4+cYAeDb? uVE+!z5lc{\*x_~eO E(rS^ <(&QSUߏ\씏_~a@kKӨ]t:\-|^Y;pŐՃNyt..MHXk< 2l=p0brbp_5sjb߀L_͔EZ~;{T-F.L@{u tzZ`x1hpF1e_,λqنIL6)vZ}+3 ̱D%GSV"/h|EUŧ.?BYf@|Mi<^OoTNQan J(7`7~F(_D]7u_5Re;`WzEiZfnϒ4$[Ӭi6aLwQ#c_jOD0nN<6,?ߟ|.L`%aq~쵵alOH){!f"j(DЛ~H^ĒO?~ wB IQgy4 w!:994iP2eZMӒwϴZ} ssD׈jAi]$Pm }(BAA)S{G=h{ _nqOQS%š s|1k%!M>tL]uU?LZVjJhxٞMR`4i{kanBcḻHSyfQ$6Low.4q11!z}D|+l9z-|'aԆF W'}GM`͸vT*j/ Bĉ@ 0h|}FtՎ¸C?{Z]NG& ӈB,P"/j6 #6y@Wſ5fP<+kNx|[и<15+W|O3bxQFҙ%ym7LE偊x@m.TqXA<"\M{thST7X+P׫? A37lTxM؞SYH>yV(fZD=7uH%xRe&ZuSO =>^X/?Q/y`oY8O5iA X\FZ;798df/N/ۅϚ8<00r%e69jxa6uWR1Ocg=,0ǃfr^` F&Rxdp<;z˸/E3ӂS _,xT!nfX=b4VusL΍|,#"Q^E[Bgt$rǃO+Hh]ws̈́rD)uJBU"ku栻FVSlP%Lj.O7SLrKpclRE] i+A,M4@0)` "^ 붒^_˂ %hk)mEȽ_OnZ{Q>Tqa2YqZ\?Ӥ/HZ|׫69 PX.DZ<?}'Atx~#e: "'_? EϏUɨ{U1 Uq% Qz @W~1s>dHHcM3= )*6ItsȎd| k2KewthD)3O054AiIDC8=eY>REbX4~Q $Nnesc)R"ٓͅO+,%ʉ%*Q|:~o~Ǣh5K.N'<i,4A "lD9yt(5Wx =8}2rJ* Մm`\qnE=gLᤝݤONkhβ쭧# BT$.g( έGQD9tk!1N"̃^];Z1Q!tKx}߉ڪl̠=bgX8U><].˯s;)X)l7odi2URTh-zuF&$BhZ9 C`);hX>P峟>XWz>(rJW*D2 znXܹNHc@7a o±_~EMºt|IY~(q&'R>+rǚB4}:y󠓼/z IxteG'_Z-k8tORN$VP=m;V |b[G_j%C1Rٌҍ+8Edʁӎ]v`Pߟ~M"pvAAUzu7 cEgDE&p^'xGctY2BW =TQr  r%%>%Ȯ|bzP{ǹ |1[B~]Aן~ Ϟ,? #.U\ʻMOtpxx)",w),0ѧ]N#NkicOU}VlFư-?,4TӊF4`$Nۛ}jrkPu#`ĥ>O .{uA'(;$}w.w~B>Z5ZBklDž(9b aG m/uf]J!Tn7촃Q@tfԔ^v|١4ckAi !2<`Z{FQ9C\AFM;DYsJ>m<RD0ٸ]ZlriQt(rZXi %h-/8wqꚽ:+T@c|huZ^1!=qK&kjM,rM.رpdL8rŖEqRS CERE!oquJӏ%?K6ɓ:Ѷ"˱V`^d`r і GoDU.oU!thwำ%ciaNu +PILaF <dk./E^]KQ7 0'> *Ɓ)()/r\5bSDž6@*QZ}1ysVo9T>o]/w̲V$.{BA4sRa#gDebNQ{v7l*R m CջZkƀ<~y(B } | Uuy#%Dde9+aR6Ꮄova[on u\ZߎeanL1 j7;۱\BA/oD!%FcML<r}7)HA*"x rwR1"\EE;w`VA6SU=z.ɟ)9Ƚtk\[>Ec8=~ ($3îAstv+EP?m/;!0k6Fli6mZ-`hfՆ-&`Ǔtl680珯ZFmGT;54 qtdnGnu`\\isՄ6a1E\*xך6ǘQܵbGw)t^!k8 >TEj{i [~SV $> _JU,ՠȯovXLP_z<9t:F3S欤Tq +2Q{]ͲǟmQ5 si<^LV,۾'W" :c?j+I0pT[iπ}RHAa#%=RCkL|)&9U0ܧO6,ǀ, ZӁr=lo1AmP?$U3n"# 8f\Iw&\Ͷz2E\SfP P7Hi:AB Y ̓rٹU@CWuM"2OK.@TP58c=2Tqjh83 δU=e6ㄇج%Me:};/ˠ.5SN@ !h#h xB2z٧+ Q'mۯ~/[[~P biK+Ȩt'༬^Cސҏ_p=y9|;v0mN"߯wK_V* /k_sYst hr:\od[JwY͛l=7dCɬ]'uHpRIVY][#TM /u $NI =|?ٱџ;#18w >$"4^SOh:չy'XE&e`)UɕpR,=WoTs<dϔcܩQ j.T[ 2iB,o7"C q=Γ1RhO *&ՔT Y8fzF~\uMy}vΉm> &\o]Ït"ӓEA2VNOi'9(:o"ga5GW!Ph«xW1,:|x a_mw#޿~PM*jSf⺾s$^`q 'fR:o$f -͉ ̔01/3Yqjлc-?}MK3m䲜M"/v.UNAY/K%&-tλ4>-ao߇|k^f ΂baDkF0bL߃X]2RZLk zE~wKʲU4ҭnb  T^!Y0w{dz'Ѣvh;j%zYE{ur@ft[Qrf'pNj1sFxg5e_wԏnpI{T {3,e0o C>(\m b3f2%Fi[ K|_F s~ct*rtu3 `ݹ*n)Ι_LsX98ͭa^\:Ӗ׋g[-k0R7gLjF}]{@˨s}GuG"`} [w*]5زyxypT`;>E}?߿M`{e (Ŋ8ybG7 OCfIg='7vh.<)K {3ix#4t#mGA ˤuZPΥ] OnK(Lm<$o!AVj^NUs4;L%fJ)j0S ' `*|Z+apH RlɻL4ܝ#_,%Lx,Wc&h{AF3s5!]62ԫtS.qF=ϻhb]:?iLǧPvO2@#˓'n0AB\$>٤끇!p2N S|\v fUOϨab3(=\MwW-I*r Ib 7UYw^0]Ԯ{܋R~v1\{}3}K#@@,A P݌|w}\ ]~IZ)sED-V݉$α0_/=ڶG|f3"B߰>u8TpDo` #6BE: LܦI!Wڥ %<3c5X?Ԡ[D3 q'ʖ˗skzi5ܭzrz EW&CI*qu NN UV I ̓h/:@a*wo&;#Rt0À`׶Zaw :4h)2vzupsj_WrΎ =EK"̺èfKo$u@tFm\R#1x-;1Pœ,$IyAKa}/ t>EĨ=|_=qisӜZU% "BEV%汚Xg:@;>U?|ޕP/#Z~/.T쿯oU< Q^"4$iSIwAYosT)AHλsn _'5'`(,ŕL If'9}Y{jGdW]jBک`z.h /棤EnHg HSaWV$w7MuĮNgɡ "]} ^b - !MN18 a?ݚFUh*(qyd:WQҭܦEڪ¿;I- 5=+5߫;BF֊W`ry>5:O|3izV8"8(C҇P(%S`vIt<0BÐʵ+Y~;UFTc^0]ͳO1D 8%گܨBC~@*bo6})áB}ςjp#q^i@eԦn2Œ f-T9.` -tg \5dxຳI PuS1L;=.vi6";}(1rOVgC:~ WZaRNK##Mc{Z=m~V9 c>td<bgj*Jkpr}YK@exٴ'Eg7e2RD&}=ooVH{.nX!uzS=JCOy+mPc>XFn>) W9e=rWZ2!o -@=9?+ JE#`(Cݵ+U*Hʎz cGܣ^1'RB`|;CpYN?@rQ֔W9bX ;*)tMXrL>@ *4hHtq ܟF g=Uj՜_cbb47BFޜiΕ:J/~9ƒ*GAx5Y[TX?@=_h.eP]UjRa5ү6ᾫȻ$@u+\8̑' A|0Pw# IgӅ^U١ R2EBh[{µvK_.[+L'},7vF]toܖ-_]/z[ˆ 㾾oZ.}IY8͆hn_gv]$ݫ/>9 ܠ=ۭ<^-ca5uէwWʨ۶ɹ|.$҅z'-i:ŰSwDZ xk^tcaHi/6*#|b$vSf.F:9΁+ %Q,4ɺ!$lY[f[/ .5jO]8V'>8#c=>GWTAktCCG6Ԏ΃q{jsqEZ=]#U Oݟ X\"*Sf$o/{nem %ᵊW}|l,6M,g(NM xQ.PÛ78Zfp|hP.'jlam_u W#HLt>qJ+C)r޵bk&2G5yFQzt>yxS~oE} ү"4.;G2,syJ)+yHx6}sM`;o+Ԥ)7Ս%v7T{ A=Ad\E/¶1A!~yD 18!i3z7;k(P'BG%J&3+r;ӎbw2s,M+%,n|5fSQ#9*✻»a O<0laC;,ЁG'h6?b_P{ؖ\|Zi$? ʦ M7*J,1uAsY n] )bRG hy !u!2ˑ`PB^m(镖=ywG"XhTP^YC G'e E"抿`y(cIG11L-M%) =n;7@UFECz,=VOksZ\K>A`I v@W "r`\֎wh@v>&C/rcuާ'I jA+gӿ.b>_Ũ aCM Nnx(X^;5Of:aZfndQ`9s` RO5[5v|m}UZ91Vb5Z=\:XU}Lų'Ϧ 7& ?B: }X+8dZQ.MI<r))\4:/'wJQuJ{?K픇Iˏ6A]Ҟl ]H>r3?4;ygPF5bJbxȬ>*x:.>+bXt~5]"6`89)_AǿƆBv@3h'v(Ob{wUj(un>Ըi#6M]qH[<8*AFkuΑR:MoI]ouX}֫RvϞDvC/f#,ipf:0@Dw/Z 7W ]aul/9ZYk7( #p"|*pZu[U)h*)lvg-ט)3RzO$tLunkk7A7'bD`xD8 R.Mb9GyUrD5:bpvL\A];v 6<c-!aq a|<)MF]DDr__g_ l2쫞의e ꮁ;)d.&NF] 5ݣ):'iHXtG.O٧NemK#33 40hixT8G5tg8y<3zGt2 +*8,)[:3?\_Ј^ [UMV:DŽ_9 V}Uj%Ga gHA-5=0`{!n+3ctcJ2nCU۫}Ӛ<aq46}6k#z?]=b2+SmT-^?\  4 ;eQYR(ٞ.N^ܹ 7!&Еh2W^\w!)8[r1k9fMf6CbvBhf4$k Ya])]la/ TQ5SO77lqhkT [Np Cvj J^=)C!=mWL}:,ND,m˞ʾs>:ÿ8ag;i&{L\%C:pV*pŝo{|zEbmE{Kg~Wm['?KW`pR%nPTjt[Oplhr&II+>a!@̇x:7tH{ȯ?SV,2 -1s̩`qw~0n Ӫ3p {AthIvRg} 6s~G3~3Fqd] ɳC-fCM[~NHRrE^J  ׫Zl?1F1}Q|-ׯ}YB\/ 5s( sЌuV,`1# Ǣ?^5OW=Ci*:%W\U{03\NZچ(Gi;@ϋ G"x Q36VAP)n̓%%+{L+f&~p[3;W/bb2tZϲ.c) ǮV<^$ݜ %miwTEՄdMZGuOsF_J@=R6ֺ}EDɂr$lz0Mo,ϴ6KYN$/m.U9u5tx[s}WN#ԘU7:#Fu$Xl:itEPT2w'[QʜsguuɁ@\H Ҁt*h s,F=}5Wrț2ͽIt,#ꚼ0@u@~klXn4C1*p$,58 'cLz:0Hw(n(tD[ԩ1!Ptr>~@%ѡP&fsXiFS^kՖ`u?"sDAq5)`65]__;'U'Ⱥ쒉tV;bS5.sO)سWq~=Z%6 5O$ufx<1\3B1묭6}iD+xȽs0K Lkqg>u{`Ժc:, ޯʨ^|^oq ztr|j|&@;G;~Iz]&T wڧw쁟S__Q&Fz#ZȱRlH[x;ȵ&$y|2|qkvS`ySmVPCD!R4Iޜ2C N6mfX6g?Ձiw#%o&ٍCIǃg۱{;%þ繻mcr3 :S1kԵm=@:q>bM0AQHТXiwc<`sbOډz2rwn( )\ch1D9pf*YԞwM=+dE"N<:L9@S5U?͏PF%1r Xa0D@[8bS.V\ CFCb3LGa,MI cK2Ɨka5zA[/-e@.NWDӯRX4O0: @J?C-R<^tf?j5Zs-Z!ʑPӶA HU|<ey^w&*G(qX +#9n%0-6M^։U Zܔ)=mN? 嶹\Ԙ珓\/e'=ݕ!8"˓ܨ麕3( }xxbcKFLNz[UHmsгUNыZ877lB'H5b#^UtQ  F9Hp9гh"*֠|<71ᗖl@-lF*;8Τss_`]&z13LM3}Yԫ.3N!S;!$4_Omjj`ez6hanx֓{] l$gM_*?^o~}*v#YK_ q'm\z6us/~8([3q^%trA>$l׳{.ǘcdn<[j(mOx=n(FmT$;[iSG5leZp6)mz_&Οo&O-N4Z=z[+b޴G!ð|fZGMzXp,1 9?w)}CI8yB!-ϫ[Mzif/_[N;AC|O kd$Լ\swh܎"Col7b涷mx$kCeMcRUW@3_<f (##kuxU0=a; pC^G9vtMn0GTuV$2%Aޥ \tww!g1%M2efJ!@7>E푒f\d{`т>6bI'~S*%:]6'iRTKy"' Z? NgKYH_aSj17x* %*Cŵ$!c}kZ%Ж&Ĉ_N8N4t&vVQ?u(>_n4/'v PYLE1>T2O݄O_9qO1T~bpآBm#:Ј !hVJGAukuٕfiQ dވvM51=E_Y/̾t ߄5-5 3MUS;Up&0лozХL sڴ|9\ CU)K u5N0Uo[ô@ʒF:O/E F/7eJ9#Y>dgMFF2eS]1"j /s^S|_PyK*L?C, Ce"q0Eqi[Ƌ΢&\V'浺uoDhnj5`%:{ 3B2З(O4H1\>W<[?Pˆk$kG}iVeO{Jp#:pa,5D|XS<hKanϢBpbQ;0>#\ w PDEIј{\]\ j7)h \ϵu\JS Tt:Pq>4-,EJQϝ97ataXJi?]:AU۸qא`Eg *4skLQ[KAOsxAw/#f6w[iyzhطjk^+x+i1Hr MBVi\@w\PKv.,ܳC koQQ'a'1d4,}G;YYMW6(|اǁ?z4w$ )+q.=EmO,ܣ䄮D-Yfɶo|~LWeh /09}>q\GZdo߂PzROIǁM-Kco 5.cr>E_-5^4-OydeF\tΙG2ǰ~*BǺsB;n^o>! ~{EB}z3EYd*G.m"aGG/^,/pT}=#(xh]k]]v;j}X61LY<-_Rbr|,|z)n"|uee^پ\7a`뱷U71el/|Ł 7jukN61:UǪàaR@(*ccg`O|wC^sw$}b !Lrc/}Ifp{,8wS'Kmw7nT% H!qegBSPHi吣'TD̮5hXj,Jea~.6{Qhs v^߻9cuADI{~r ]<1;&@puTŗzAv0= M_TkwlY=tiOv%v"$p: Z־͍ě Bmh3nK^(!8ieJWT>;C4ec50Ȳ1R1ޞ&b`џϵD֕~*]W{"R7'`}H[+F* ] ndz߬y`b ɳGM .uh-EVI!^H:Q.v0t2yI)jΎ3ƞzMmGi*Ac *lmP&okp7k!=De xֱs$Ny慷Ic5VvAlV%4vc2j\X= :5Ӆ_s]^Jzd G 0*|-{΅rJA: u(j_?Ʋ}=]tB@r:@_nRH$8G~`$ټF6/u? ؈IV#yCCX'k̼Xب %_Yujov;͓7[9MNOGk&:F/,@زq7 R& rS쭫_T;w#`{".\7AOcP=GB唄&ҙݦ[wyI@+_ٿ]eF:B Sck 'O yT UVQ̭S} l6[?ܤSx(%xTKu)U+&bA}߿-no4ynAXzPsۦcVycpо|s‡ `,0Nݗd +^%biOyXPq&( 2 O.H65JD۽GU7͹~~r_}?Hy)w{;[˾Bc?XO@׿늪;~pj9n4h譆g'| #zu ֟o%#3# D\ MBn(Y}_OQ9\u8ʩ:.[4cUGgݵ4"ڗtmXhZ?UfPEy_M "Z^h!̪c ro.ז_Pg(*v* '%심\TF p kks Wا~f)c|SSF;vN*j ̧)7s`PEe DC$yz=m,j4N63|~$bg{v,Z E2 kkp] ЭFL xxR! CZ5UB'njseζ7W}S2|K7jda9N76; $Jš241!I8'ZFt(p|% !ivV|KZ_)R_Uo-sBNO_{/&` )kWe:kJqok'i'E>( - qDe18h JbSjQ94'w"G&e {Qh@H )䵳uRxD"ع+21˦u_64-ݙlkG56-k9hk̐O.76<[z_Q~osXk:eFu&זO0q-Zݮ;ǡ' }w{*bp,ېPS6)t]sDe}=eLb?̤t"l%w l EQ2 5EPJ\[tu$Y[._?' ɱ_W\;3 c9PXg+#9ҔÎ[tL//v^tG΃u/ ;ȷKLi`w kf8A<CH:0?lآ]}QH028wKVįO캽?=cKMUccC!Uc!5 tM]Ć&;:4lga5RgZm+'KRs8@t@U*ZѤ6ˆHƱO͆H5k5AP6zI:`OEW!uAnYFP]P-훳IpQHϴ>@xb!Ww;˞U,o]C6zd R_֌LiARS3eͯSccTcEeᥨ{| e"`.iZyr[;C[RT+nƙ+>1EzZU u V}} Et)k e7|mۗi{3CP_aI3H0=r{l-ͭ[RV!aUy w"獺[C4z oؒVdiCXJ9WڏiJ‹%t?MeN5 /t|8֪IR/:B>:KfeFuN|ݠf .\? WL,3a=k HB-8gUu=VOTF֑r. "L]`ԀU5ZW=̢/…g:lVSya8^'uy˻ʣ``'e7Hg1f"9';Jh|AH6* F]&W?)p܁G{j)mrAq˔Swz +RC蒀[VzLjot4=gZg|\D(B׋ݟfjvgZjчtGɜ+E&֨ f?ިvE:MBr#By܅.yA7\1ey}[/}.\o̻Jx)L8PcBo1A%9O~q[b0immh)3 < RZ蛡{hIJ ?V B3Oz9p)4wM9>w0vRϊ$KY_%XKK:iQVya5=uiRS)2:䅮lVrmT43zi uBs:]}7w1#Qe mp0ȼkC!q* MWv-il>X@VTԀ4]Q}l_Խ/QjeRBVSQ!.V ٴ`xܩ͵P 꾬cu ؗj]^qQ=V7>jT?FZ -N>B t38WfӔ+P!H4еqow +%݌ozJi5 kԔE@!*2c_W!b\0-*&KsS%u@F @R7?m-B`ݧk|f%Nva #FᄽeˑzaRcz`Ne'd#M5F`[pC nr\}M"ZX"M혣Ūs4猇(L_xx0^oMrN=1gKyF9rpH3B:hV/H8k>K¹T nW)(yTa Cdy@9IC-4'no O 6cBTrK&O!)@  \͜jrWU8`Rb@;|YKQ-2>xvfA,֯DnTJC]1t"* 2ZH<\;xa@]w;O$ }A{tgFMU;aAKuR}mFWYع^O~r+ JH=Nag ޶/}qHs? ub1M%A񅿾/,E|Fu*s5tgxBg5BAE:֤_lyS3n eX(_倂I+bE @F9)x?c/4Ƭy/q_! R ^QSTyb>\Ϗ#F2ص:Bqٔ/#]2paaIR5CZ2G_<ԑ !\s} ;n4ts<$aIP>Jռiɦh<;qф}{(mYpLYZ[M?0s50GӍ-V|nBw}/fy ΃ROlyyஜI(mq^j~Ygҹ2m[ܐf\T/V_K&V,$U;c|~t~q9lOUjE(kkJ^(=^6/|FW8*ߟ)qݞEb^KTrgΙ[)ρhY  6`9*[pHTD?g.gzK 1!{AérU wMN)T T'!;żr'!BcY/Cf2ؽ6G~ \W[Tv˴|ntLzWl;8=Nc(@Z#S~pV;3F %)aɶG "-4MUBY-n4,R=:AzXh*r%--ZA4ݤd/Ψ- "[& j( %$ŧPY]XRRݛ/(e-{ysy]h(lO]:]}'Q+5IQ-mFQ|zgUɲ/ TT)ڥꋭy4$7B~+?ӌ"@1^ g0FT/IlF%xQM> L"UnnjmA5y6 cPBdƧ%-:J,GoΣsAyW{i"%BFxҰ*1~e8~8aOVn#ioI%)-5mn^ްymj].gaj> hO-ZM%V,$;TUl4ٔX4 l9e6#) 4fjLr,`N|y[s+>mhJ`K|;՗$y6+{6B@Kj`Fn0~Åf Jj\"Dila^2dVʝ|K1N;yH4)Y:jT7fzos T_$ e4#Vu"jJi0%ն_zrډY㱐 *a\|$tVREI-ZgzUm|>þl#zJZ*/iҽ${{ސVTN¿+e"?9TD]O)m*UL?1Q#{yŠnY1OfB~JeߪҡX:*zmil'[+?:_y܎^G(R6Uj* 3r'IQ m"6^~5QBԙr9Sf~hn#- \^=E~8F7Vsew/N~X~u2)iPHP]ŒmZPQ,/8 %y!iF7|zH674qAQ 98z{ZdO-)*YGAGfNk?V+ڸPv]Z&7T־G/~IܙGCޖbr}|?c67J:>#"}=@]sIG^kj?~I7+H/5b;OԘ.o@IB|Y+[Ad w<jM)bHTFtMPK$ 'LIQ] AriVDĝ|U#PJKRGL֖ i5ϗvv%%8WVp~B ,9cp] TT@!hB s=fmvw\C{F4%+ |q_׏7H#$y6CQ>x RQ"}K?H5)I?[8DEat9@X㯯SWgeU%ߑ`! 5=ȅPmA>U,1 Qqv//!QFfR3=?<"ӱT~%)W[}Gyǥ:֖_[۾?/=3J3ՑD)jv$jXG({Cp~zؒ$8HIќ5t%<4VƷһ2#=I6TYjyV>#W+hV$﷘zu iZT6M֔N[7>:b| G&c9g#\Ph$HG|y{C*, L83ABØri+Q T Eei,BRj~+BleQXBHSIM>RqG\Az@gLj{%O+_pw܈;翙tG! A(o,RdOksh駗k{s*cK&XZ%"WumFY_}H~ϿXw/ȟ<˛V9S>}ۙYϽ_3_ux 'j$ 'NG3ʅZҢݞJR_s^$/v塣>64F~J̙#T@ƔD,I7*G~/witwɕ,Zy4Q4 V38s:grگ/\*꿻[&/䲷xa^^ԅ|H{jzy~,ak/n~ve̋')ـUEX棲?T c\HEs)T䖤 =$M6ۘ}Wlsa)n#R~z,XR!3=vMG~cu~n jfڕYD7aC'/yKךf$.י/eѿa~E %RzCtu{5+~#׏e/{\)VWĨ3ϵF|^Ri#!hP,!7η4P6 py&jqWSJgSX:;j}/hoմ[[<2*SY-m>r\Z'fujYJʛ*mn58Y{. sJ ]a{G|wc,wݝ,iFNJ7u҆J UͮHQKEq~G P\[bs6zcIMvoZ{Ոyԧ -4.v{I*ը޴ ٫yJ%)"1[*r0Fr B#Jʲ )%I},yi^W+0IQ >rdZsiG Sݟ'g0wkf8$ŭb7:go?ZoGB 4}{otΜWw"'`>$FojZdpΜPFBd4~*  7Zz2+h@fWn g1'~ a ؒMFۮf26M/IeWroDa?;iT}܃hNɽd| E?'&Ԫ,]]YK֠I[.I[xDD59 Тh[lMYu毴AӮNK>D3mh$?.ZMe Z\,5UI]j7V*`S[c%XgʭBqĪ-mawou1O/xP0TTy~-!Ha$ ?=nAFwqog/6pw<*B 5eM~Aȳ]>/&k"V򜴒SG]"K${&hВYͧk*؞j,^ʏuɊL}췻[58-Uzm>h&7qnovݤk3ϳnDSH(9_~7%LxQzJtl5)G|쁣y~؏$^G-4YHi)?Z <$y] ʪٍoyܿ3]"p#]I~@ "vWD]!,a'su=tJXz?̦ ]sS~C~5I+Q6B?v(2YZy_LC1!bR 8u7b6%6(|zJA̦\9{ǡ};kC뻱⏟pz,do?IlXI).5RCw/6J*#GJ(KnW]#g>Qv?>pNQXkTm)Yy9gEx /}㾵 >'u`.X<|aQAa7l-Qڰׯ{B 7 hI,"plj a)Eoh(N>f M|B@a^ {[7xj{37c瓮H]I3dkX*&g\_u}geUԻ>'~D(vi$~-ԱPxq泞7Z IFzqz`h].-S댎|Ufs:Ar@U±H^A^U_`Ml+P Uc_ }s̤;8$D5UOàWZS0|X@{(@[0G kna9SޘN%9@cg>w[| {j+ǀ"~zʘ/zZĎ5g sjrN0WY1J;(u#f@^gJ%Z"J 0u<p@pb;TD~R2نҬyqZ[yI 0 IiD sGhZ*ӴcTT#ՇϲT'w7{fJ 2pPld3 ֬cM{hO`@WK'`dkzQTэO|U%3O;o"D GlP(䰥vb'M"TDUzOd8lbd6  BRJcjCA @%t8 'e'b :&7 N;46qV*6c'PuFB3=ꚯOe}NX poF)Xjj+-p6.cm7DC~~\NϗtYW^.V8HSVR9ܿ^ɷ.:} .쒾H$4We"jBU9 /PoHd 7qU kioy2wS+W D:UՓSn3'M7`~=,5Abl0u9jE<]r`ޏ^KYxtޜ9 qP &mbS6vi2qFdP3;ʂ^:v$2e.:QN='Z샔N΄v7mX:月L<8 ÉAh~Q_sMmc߼22MXzJdgױizZ"'9Gp^tUM-OzQӷr#gŪEıXzxsu%֫4sXd-8("vI5:q8nXY|6w" Q ZN2P|Xz8Qo oq@G)J.5uh:f~**cud>Ϻq]+"ډ@^%&ĵgQ8LNE={偛 @8\%]>8]q pvf]+XP,*⾨H7DkFsoȝ a /lxvB g4wp2#Z"GWgH!? ^q >'d>48+WAe(U #QcusV(8q[߽/S>hqݶy*Nø.y~-nd``hTN?RwcA K'u"\ N =R6ͽI<[L180Ojթ@"Ӵv3աP?+q-+nkT5{" zX,~Mèf hZ,pz[_o`9P\?ZO] .aw~Z7"aq8z'R%`$Yٞ_좠N+uAgbT!UoQ&Ȩvu2yu䨇s:c?Z,źr]D dF!vT~N4)?\Zˋ!ztC*;ښqQs} yS+xp]1c%[(OKb!L!JmN$\v$RxnlgCdMpq*9[8r> y#x!8qu뢑- zEmUFo3(y5{ z: ûQ {uzi;oRw yR պ"C:g9x3vrV K oWtAC 5uBik Z& 9r6N.9e:l`Dy ,d- P1D "!E2'N/TKu)h9aMKjQ'LC"n <"p)tE`?1DXF{kL(89QG24mQp9ka)3 ,]Z޽7%}hd:G$!d=B,D F94Ԭ :>c*4.=+7AtyY!X?\+58VS;B^K8t'Sw3AD4>e$Kp{d\Ak|\,$^?-HٯxA2XIB-jz8&C]w`G\ph}r4MB `+O$ӭg7fNDvv^TH>!%zMNN'U<ϤzF9.QDx'f=9!L40J;Q$o*q4 ؍53L,,a-qh+TX<+y)uƇ޻dNc_*@:iwt$JCMw`DQ?n%t+vei}x*{ v_7#z}*C|jZ@gDhb]H(-~ChXOI |0gܚT@^'‘u}b5E0Z?a'h@I Y$=B'D{ZU;=K'n$10"|>l#35sC3-8_L]=5=3I־S5PU.iaXN=ɪe14sQ)Uߺ3 bz7W5~@D" k#,+d2{>KfĕB#'UMӄYhÇ-7 v!Fbd?U5ϝeۈB^ѓU7q )A:lE 0'zc&^M;O*4n)]DKʪT`( AJ\ZUu6MH.)of8|',BMZkޫeVZu f][fi1FR i9vs76sNj!̇x.2S8wS)lB َ'Um'\9!p"ɇ=MXm7!id ֊u'{(k>D%q: ,PxNs> D6qbVA;pi'Lן5/$ ΠhrK0"]b1OrDvkJV'7ğ3cg\0)qM :j$'΢*ݧp+$F'KRbq'jgLomꪟ[A W #U1ڒ^ˉBKz5gܖp |KSO>6Ѧ٧)]zROC}{uU^J{9NO]r?z}r[ 4x]7j BJA{6~8G39Ki94:G.DTL,O0ʐoTC@Hk,].0wZX{Q)V]F:Hkdx@]>oitT,]QUL:хRFm$ʅ\$iMX+sbadȆTh^x`f㍮aF΅l<'c% 9ªCDm؄=+CǾKۊX|=lTQQe 1BHL];0F[P(Y'=f/p儺>.B63eI0d%),c8j){t޺C!|tb+R;<=*}͋qv19Ek'6}P6Ѯ!B)*_+C%W,0Yr÷`'dwc:yt؄ߪff;K|rH?PK'Dvjoυu9a.n}+<`>qF :pH&/a;Ch*O'GhM4DKj\FuL =P7h| /p{]C[@ϝ{$cܸA Ehf2){{z΢r`DYW).ȧ<蜐yu59Mϱ iv\uO cFtT7ZNk*d/9~3zGas< {S9̳D@15cf(vb!U!,]- 3th3t [ehbf< AiąP٩`:Ϲ1;,By5%2Ss9:gpZ_^_mW%ZPcƤ7xoӪpPˊ)FSL48-u_N_ B˩}3"*HyB,L, <_-uAxՕQ#4W2Zk/_۩Bh; ъ=:;@NcwMEP9qv :"y3&EzA)nDXV>0<h 7٭b;ߤfǰe+3õp%BFgf gY#XTMNFo9rj _LT?5ud4UYU^frDg h<g#nҎ?[+b!@- {xNdx!rx~TEa;\Ќ ֽÙܵh_p#d>3\Ž }E1!r 7}*i~TM*m6kZQ*!p4ak5Bx*.^z('P{KmfTAB9$'~9F81mOs:20 80J>I]8'2)TɻB*AJ-Ъ [%dJLy8\ OS;cܑ8CFrlg?\+ESYW#o>K'"47#g֮n)t'~~U_H3}UM#;V!3\^' !63mx6~W sq%ЍD3^#ڸdD,i`}H J:)\kRr^:pƙvt *R@V2>"ֻv[ 8dp< zE%XrͼfmN*m93~y7^[I0tpO}qjg8a-܋vG'σXX9)0v"sxkF2N|!Vb- ]p 8R.r+˒;Kt 8O\UD̘Nݶƹztå F?3"sӟ 3bC.\?[M)i8q|Ǔr(dGӃ9۾̙QbӠԕY g\3΍iV7k*D]ݏz=g sN\IF"[$0fRK'-eX HR }BGNp$݈= /E˲Q'ҥ5GtavҀ _.<&f d&'i{̹1^*' Z42827B%=>YUj`rKʯv V(hVϊčᦈst2(>7odt0b4B7W`KX_z" 2qK \~Z&NyGGX pxYÕݓ_56nJpd(v({jMк Uo: #'ߘE q)3 2URh9SΉ(ʔ3 ) 1sC{{e2ۧYo-_?d,YC4B+v4Fp(|:207jȕTC%\>ijTon#Nle`HǜY#2{"Snr8c'T|3iYȴ'Lc q3z)vi7 ^~ă |Bu<0@f;1_h]gj:oSea BRPq%UjNy>4VِhY:ޙI^7%'eTJ"&'E p L>y*(٘b0lo0Erx9oڄ0]Y^UiAQv#8BstxyqRxV9bKpc a|#sbZhd\+[s2#C5aas4cG,l|$wg-4Ljx P[5t@ id*z;7#쏵hETtXNwE<(ȎǨEe]SڣQ1X{$ <83I}1Ju5nE1B 6( I?B㉖} ZI8`xsf `TYa*Gb|lP-q ꧆n m3,';W܍h\Qs:p6abh[>ʣ|J_UTr,F"FzNGrzTnyXɚf7#' 3^Gì%v>έ_s8LFyg@2\v-0SJB雏L CB*k}tTi,L8>L0'q 43_߹,1'>kJ5TrӉF"H]ɫ41<t%T1u3 |Qd#AF\Pʉ:iCؓWD-&$lX,98AZV-?9: l5=vg #.I鵛hZ9}ʘ)z⒢yrND47aT]E-l(pUJgiIÁ-tQfDZ'f=pRp_i^;qHߕ1381Ίft圼Qdc73Ef472x.ƛs|9zF=qgH~NY3af73zQ<\c_8RasAXY{LPl!|2!%[%/c.i+@k0U1CIElvqb<]2K:LLrҝLĠOiK֞ۄİ   VP?(r]w1Z wuU;0 <%~Aj!M4MRkuZ5g{M MqS4i.k?a""\GLZvsqr"FHf f=QȲwAmWB,b9St1'|f 0th܉U -A`Ei2(usb<u$/ɬm<LgWay1=|FS;"Y }0wwY („|fEfv |b,g|#۠ȑRj#o #^jPW`d xw:Z`+X}^oKyQ4{ibrӬ^EKK}ډp{$vcHdÀfN%e}|HG`, N:/[p4|!ά9b~eؗGx~a(DsI#IUƱ%ud"/b1MEɝ Zk|V4N[)jYאҨ7 2o:ϻ`:ǹ˴U{ipzŧyf\π*_)UՄpz4`,vp șkIޟ}OǨqd"jQXϧ1ksӥ0dhHkU| 4f! fAy&a؀dC! On#0gg=9ܕ u1_mt-gmZ,1c.P-{NI̹+Wu"9oϩ@{ο^.3 ‘9So4 …¸U;W$_h9f,έTBWRk_2[&Xо!ؿ>&ӆnhLI«Cx.NJ!v;}5 xe-he*ߦpyF:^1lѩwjz1qs5"qx)W3,_k6XBKN +Y))daf.=sl.A͖BRKosFB wO >I%[~^[9Tݺ晪W8a)xRuG YF7L23#eUF4ؒa.56d}{|^҂5?V9'cǷ$%"S?ֱcʈ1k΍D[UMLU}X '(HZ2Ȕ4Us&]vk~ qziYDtV+&тXoZ,j ?9DH`FGs8aqb n9瑺HЊ8-u}9Cbw+,RY5>TA6G XUq[蚳YN8uz_d1 UWTîzb&|j czb&|SѢCT#:TT| fUϲYCԈ?Y( vG/3tC|NFEY&#u1uPJc6-S21*lm'f ʌ }VupGyª7pqHAa]+#z#v&oqD>7x 5!\o^pɓk߆p´ʉ$ǁ:럨D?o䣆g3o0P!)YLfj(/f4Qc)k.dc==Bh3q2&g;UivO0 |jc__זMAk {޻՞)*0b*/<;2t0@C|Oދ]XGLT%,b7Yf&"\sE/¤S#v:#h9XRn%V--옷DbٟQU|U40#MF?G8tg`27W6Ch`/Wxh>8J3xIt&vOi!V9ߏ)0V ;MgՒ}4HiIb-<]`_eO-N>3MsEBvsX-f bq nR(kS8P ^"3iѣk.DT{Oeҡ*r<]a&6A~Su_3ْLM[LQ7aghu4E#F2UJ$;&B(5kHH>Y~z]wRR~}8|Ǔ'bj'+đ+U(8 ^!9V-Hˤf<- D@KRU,=!kbݢfbUNku!Ge.b7rQv@{?#VVN3.Ư!e$;RWl>utUun7`M;n::CZj3rATh5;ccyDT_>7'c_TEKvg2UAZGO8Gݴ;sN/יLdfConEi@x80S1΂Z㌊ʪV9uE.'P]uI(ηZ"kfk oƓrzoq\1yl8sU;PR\b{9kr)zK1I)3_f؉*F+ҳHԺ/5 E#jM_Lf 1-q?iFxCy^KLD]X򱥳Lb&HL {蟚3Pԑ䉿u_qmȩg ͧeDH@/$;<X~0֋Bvh@*-5GoM&:8# yGl'd6?;Z7O$)٢6-Kc祙 U>luA6TQޏJ𺔐@dž(u}5FMk&3#K9g %~3 S*dѭj3T6ꅷXp޷ոR|QL2oVFjlڞ(M`R#n@z.J#?رV t vw3oޱ)0V b,Ηcu*Mzek#u%x?,:zPsGBϸ/77xPV:azT}e\ 9΅8$s.ѭ1 ΢198AS(Gňs]oY8W}VFށ9= |=pN6dt@4e ;K +ˊs;7sSR߂=.MeaQ;\'ύz -R:4:mI5C塁ӎ8暗 EĈH҃[oS!Zq^rH[rx'Hw$ٿaFTlSne4󂥑cs_fBSzRmNe{$L.SP?ZW!2** -|!4o{XINpJ*~pJfZuM!*c-^de dٌ>dAвXQWwtO(yBF5]xa8)(B&BWN,][ smF@k7Qk ƣrh۵Wg)1Os"cO͜9m1R,,cz%?5F,wV(;v3wS܄@QodH'laM"\?Z%QQӍ.pNu/ݕ5@leӻG8S1T':;6gE͊:=E·Z.ǁmNyꜧ!pDe1<;z*!3{$\'0Ƒ O9ٟO^" sR6=# IzޕE&Э?Jko¦g"|?gl! Tp77?2WNq!Q wcغ#Lx`[43$>VrHCɺ"=Zi;܊ >ɼ4w]Z13?L3W8jX(b󄺍H0ܙ.C;Yy3R!JnMD⥸,ec(5S*1-{cn׋ߘpE-a5S6fgZ&7tS>7u\HpnpF|lzD=[1dtxeL ZU9w犠qY{, -RQ'f] @,Uˬ_pfiX٤O"y1y{9jOT};ܤ!ccP 8'&ݺU &PLh:7;8dtvcvdR] [OVYl9A~X;GыQ1:ͺʘOjﵼ1x=U[gfJ}? Q]Otqwn꘧/ O1ٌPL߀7Y|2I~ǘ E*$XP 6UQ;KcjavXU=UH]>{%'6OĚAoFjf|af %朧MN`EA%J7#6¼ȱOL[ /]$;} D1'K/fp''.0sܬH: r1?Ѩ5;S.PȣuC=@6&|4-51>i2V'wRHNxc тҷ&8^\+rEɜO##$sfb|3I覐br>\w!'~95F*Pk8+0e{쭕sҰp\tH=W08`>]7;\Zlj}>J' `ҟ9ֽ;FxP!t i~YA7@a|*`zF-c4We5m3&Nx('<#[zɭ' mZ~쥥UY`f^3Ҏf_CZYIh fҽ1o+u|DͺX:rjզ.@T"CAU"|ȿ\Qddg\bG'Ψ1K@t7U/?gpW ݑ۬<.DzDU*,nm\֜䄘07)r2&auj'Н৲Zֵߠ^> xɃΌ00/͓;=GV+y2~^='CAf1 6Q:i O ;8_V571Jszv>dnpUsഌ![9@~[ Y37UB+EߙUc{@=lF |p̜\VT!Xd\}D|B4rp<ʩG~pZ2{<יc\ {*|xiGkSy{7a,3;Y+ܓ5sLS@z.Wi>=LOIr,phЕBVVN/d+#jK?e9VAFDPw_^ ( 9R8rt¢##?W sI3*c(&0z ŭdn_ĥF~Y=?%k_L7Hf/jpK_w%9Az%fh„ICmӖ4'G= ܣ#NyEN%o$uZ'P 2~J|ߜn;!pgءz($J͎UT=x#3Xk肍er'>Tk,o9OFƘҳ#!;b:;DNULrݑ96>sl(SIf{Qśhþ'Ӽ$ZĉꞙIѕv(g}x8m80ZOjqYryLI\YĻcL.5<Ѓ}"tob$"Dk> Ғ0NXOTSPUz 2\IC$e2W:ܰ&MQӼ -MQ8œ?GtE{1ⅬXC%yUFQ]~*A԰ t'J0M[f9SK}'%װH1ڼM.73_ ;sdʰz1'3BvltȠD-䡈mP쌬zM^cbLl0\Z1L 4*Gdj!'Č/ڈ[z8pžG8y]PĜy"f…h*415xO%T~IK<3A E.s\԰XE*7bb*ZScbFhG;+)5Ғ%z;;ɔi@ncv SvaA <- n XDVnq\^GÆ\OF (b rX~f~o\+g$u3rꕹ1*A3a2K&v8UըYƌo,MmvO;-<Oa*=3jK=S3tcHӈXjm,C0svtnQWFM`mzę\!g{"+ 'Q+j pPr ~$ѭ$",rJNwTEe_~82Йp_W żYDI8W!ר)לЧ bz{*jD?Q9ވ)D|x+fsH_B\vE9eH Z;OK$xqmqp ^Gt %DH0CpM["N< 9}&fq-)q 8;N%hC%UǪP[V94 LS/`JB8fHc5 Ο+~[To^;48üjb  |׋xŹލq]:ƂDw1d[M5Ѳcؖ#3+0UH5yf<_/&<07홏(b{: q`JUB CR\IKJ]jU0DE8N&37Pq(aτ&dIOԣcќqƫ$x[d)ENK5; (gG̫p-v9RG%<+\y<[H([g#XIJG]A˔Ku0eS|4`2 578t&G7=Y\dh _XE\A7g܌JDBr?3q0?NUZ@NZGjeG;@v 1o%Jؙ^6"҄S@y($C:2nɒa2.c!̗Me\5͊Q%2,r8&#d.+i-N֩_<)g27KA9='$x™e.~nszpY)O|`crbҪd S g9-)9:ڤ+;2KӋ}#k.=',R2Ȋ5ң;$RqGU\=/!ᦉ7w9љLNܯ[ 3AU;X!p27n'#%4iC'ץjq* =5NxFQr"ѶΥ=}_%QA0+ObkaޗSQ_Uds1־$sӭYOUL[wU.dV<R~&]k9~z1Z;Ď!É&=Z(Q39򋾢R~2N*`L 7TнSwP^& Eʂ-(صq*ڞa[d'XTSJ|O/nhjMGzG8ڑ S6Ω{ dΰm=AD'7$b ,Ԋ33v.v`BR߿Z <0a grj-I;izyw^^MG+Dھ~Q $X<)y ^X[0f,.mo]lcIKa7c'r%_tka TG E|Ku?|ot P_7E7 lnShCOZޯ[n2"IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/marble_d.png0000644000175100001770000004765214614030313016336 0ustar00runnerdockerPNG  IHDR^/PLTE`jjjUu`ujuuU``ujʕuuuuuj`ʊjuʕʊuuujʕjUʀ`ԟuʊ`ʀjjʟԊjj`u`uUʟu`ʕu`ujʟuԪԟjjU`UʟuuԟʪԪujUԪʪԵuj`JʟjߪʊUԵuUu`߿`ߪUʊj`jԕԕuʀuԕjUj`ʕ``J)_N6IDATx$: E'pAp{^:}Òֿ'{0/@jflݟ&|;b$`g g*dS}{2{XO&$`YCnUC8poڻ{/Lнko&`}oGٲm?lP½dX0JMiJw2vnقhδh@s %8v}3@ӸV[H3h1xiV),YD@tg @h"_pv!YRi  aaDUNe:OUSf.,`!S.#&d xEDDlf:dh//DyfJG9 $@Sg!?!GH7;IUu_[BqZjID Dׯ(3QnG00 EHSu{Có~ sz,-̬V%U՗xw+;Rʽ'-BӼ58=]΂qe"8rVi ^ ՚|0Ǐ#92)z3jvȣ`"=aEo̾??F`g LZjѶ)n yblCO{Ҝ*CGe`Em6/ K-a7!gJR'pƒBGAwQ{ʐqO1iұx=S; ّlb@.3@& RQ|&35]Nqnv|cgBVD =.&;!1=S/>V[2 =yn4>K#%m_,hg%9 $Ušmem!VAqW/ߠRLP?sȁ(Brrb8y?~ f]Zw_!m~f`j E}xcBMzS b|?dvSf2g>&4T {\$3/fCϏ=UA~\w0u#b~kWASQ A2rH\{ L!`FE_9XSfm*kQ́E,cUIht;A,AeM}=<`#Az2yXo0F!d/E ArN^ ZbSpZ( ,ګhZx*L_K r2F_mE$6BE6ZzOE0̫l-^GddtuO={hDrNK߀s~!'Ā#Gqb( *kɾ ~8^o n0TI.mȡ6{/ _9 Ǫ%LG jsQNe9y9G͇/ p xˉ+CׅjOY"(}PpB 4`LC ڕ l9BA#D_;Pt(DF<#iVX ֋y^~|-ގ)Cpy]&*b)蘬600|o:>_S/xfL{_ɯ8 T:e$>(QYG#Gz~m<|NS{(%j@7dk{-tVܲ*;3ѽc] !=y?D8Bwww;}|0l) g-LZK0w(L xPaZx 4k2MSYXc<bFoE53S^nHO^߾LT('%@nq [ReFUlMn$M ީ&Z}7`b @iNp;ĉw`+_%AJZy='DޔC˜Rbn&[7&9=Ya^Z$[kwPCm4[ IW4ݓ{M?ϪL~`eAn2W8y|~URHlLC;ftcIZ\Y_mOY*=ܕ{ю]X1BzVch⯽Qu?Eu*/#xKxS 1|7"zt,_+Cf7œ[j/Vg6W?cX6&{ˤ\C3CMٴ: e#\I]w`+.1RdQC)c!&`5^4L̬ܷ/v=o?XG0 ,"i)yHץеZFPj9϶9PKzӻuI-!c׶^f}Gy.ts- >fΜaf}؜zcj-\ m,}%i8#u%\zA}ḫ=7EQх/US; ?&]U86%nk ɥ6dUӥJXR` l}i$L .Nn4}Z5ZGo\JWS`r3Ci߼i葬2H@um5ڠlJ%spca9L.(-bŃK-x^\P^pecYgt"hR"{Y|Y\=8|ZX)ܔ0 P2GFu 2G$y_D9Um97Z6dW8o?3W=TB OW؅}#ہjݳMonԙ><;f`N(zpHԁ$z3d6Od2./bp-wHb'j۲Yi(;WFfl@y-Ã&F*̦<1UD.okJ@7lXd~"u5 "+R% pjUzd,"h[PV ܵuzdLh!hp 'Ehօ7e wZ3d rTHmhbr d "/8[IIdŠipܞfMuyeR)Y&j،s= Vhzʴ"p85YTSǶE5՜m]bN"|6i;]Ԩ F)V§vfiXOи9F$HM!zEkfk +^סHm+' nHZ!8 ET>S EsَƏ庒Yjm@8`FURMoEAӈ( x.5hh-ytȟu;Y ZUK].m qEƠLzH FԟU%t m(n }cN-#6/4B$MgIuS5Yu25 momJGvʤ;tF;?d߉`Q ,^eP 7rR>QV^މ\N#Gԙc)4n{Fr;2/TFW`~#˕vV6~ZnZGK3tx4-HAN99xs} \"Kv핒#RR!▨eltNj | $Sh>+;ދAINĀw7XxUL,N_P uk0 U:= {w.t|Ol З.DԿ9tOK#b:<0o4@Ԫ~p}|bap|Mi%;[ͺJՓz52/{5jfSy?+ҳ|{`X9~#%F!_ ?[t㬽3$=6V@3Mz!jܗ.{w0Y#\~BW BJ`Y@'MժfZ;֚vww~*(7VU7 -#V_!AyfZb˟KP0ec!  XPWBk5kU>zL2,2jC"-TBWU82oet/]b~ηmu/ ~IQihN(W(hxO\J:هVD&d,5*.40&!nj(yiyR(S/}L;DDGyVoL͙K~8f3㢠 OýȩZ&C|yI6q4Ա %"k[YbW Z l8&'̏,ڷuG5jh27E';huY zJNJj}tE4 ]>)p$LtJ @<_I*~6oMĖ\Yj[`BgC8x’[J @vUQovb[5%7eѣ5I7qw!ˆ,Sdu?<`jʵyQ hsO,{;ޤ{zf;\Q8iYqS u:Q8z3,]RNj5%!"xپ qyIQê~N-BG%4YOcC%܁=aRr (Fmhd99ns͢\Jv(!&+he{c ѭ-ݽzkN)Bmk{kpE2z80jUBԞObo%6[fk\"V$\a[tC*'p)#LH#FȉSbR0͵ R/EWJnl~F(U8A- 9m]B8^4Ǎ9 cT8rȊxjʳtA 1lWƞ˥;+PkgFvMj^gR (UθK ̶BK&s mTF-F53"I!%ߋbh3-N`bHͲ@O4(l8eU`UT BO-eRhWB¬O5<u5Xm\&IKq*"bK4_+kV2b=Po^OZs11v}9 BQөBg)yS"OV TF! )W-zHk6&{Vkœ޴%}TĤDŽU3dNwsk5-,Ƹ+rǺ[^63oriEe丞R^lqK~:$E~"$$H21? Ƅ!RmfMRɿ@m*\+ELD1sz^IȵMdPob/OT]FX5wBij'dwdDżI1ݖ X )\79To3Vs#IWy ES~QGt)v9M=J³zL] MkQ@\*', b0ț/iȏF]yϊ/h$ W+eJN=I3DOS78=@7pJ)X7'c2m41&g퇉@*9ylmk9Db1vv'n^-{n+\!h 5}@?$m[R\reDWۢ(,uAzEf=К/ulps|4J Qx qmϖlMSt_P0`6ډID NzTF=ͩH4ZeZ5U5efoY߹${MرqƮMls&$k;V%: %jg;هr;Y|CK78Lzt=h(1 PVfU5UC fXh1iE+1P~?(:^v)EBK\V6P9>)׬A1Ryb۹S$dYRh&I޴[ƌήDp"TU:hH(4sPjwRYg:MH[sj-OTm} ;aVQHG} ˅82R{F3uqIȈ,z__ִ70$˪9h̚ w^ܹQE*y Of\Y+h8{Qۦ#b(+1`6;Y_~ڢȧC*=j!体Wxy3Ԟ3yb2>,>{p^w ,.JQ]v T_dlB_z"Wq&T]Da+1.Jyul\ #hRߗ@bpu/~&+6O΋p-(Z1a71 ^v;תVt[@$()E}p1a_kYUGY 7S !#_#xP(QEYTlGG$Еb,FNҍ;Evy$вi2/jlӏtIda ߾JYTeboF2RDxn)&j:A:HCrIMӰӌ>RE.N![LkOo{K/D9P,5^'y3CWjR+CtV};1Y>Z\PoW( 72AբISwYۏ2D#oRPG;afiL|#wxcA/4.ZU9A 9dNڙ&{<ω$d&EPUfD!SՔ eMd1)1:B L/M5V,`JIS!oY'V}!3L /3-{{n" qG-P@9I^`j,4s]?rvZ[xx V(J +GiQOfF6%ːq=^Q5E9`}*IkFyo2aCD |jzRI%^@Uҋ,m0X j-|}TxJ.fwi@`/PIJzJҧPB}[jl~S16O_T)'p&vo;ȽqQiw+LçQlH ZAla i 4uش~}сi"A,5AmRͣ+vcs)2B8Dzx+_O&ͺH q -OhO Wp86ˬLb5E-54CJ;/GGrTb I\{XN)=.d%Ӻφ!a.* BQG xCb7Qmlp6Bq8RHoy{=ZLI`$Rdq2-ݪܡ!k8}ca}oHbVKܴc8abPQ:cE{1-lײEؑ-ͣIuju2diڒR{ZAt&=V6j^!֐uZ6ug2Qj|ZX3-Acsrh ߝEja,4:VePAB*&ezYO;%A֣_]ZÑIgRW -F"5IJO-_9y14z:kSzyP9r; qq+!;麝h 0J*uR 1u Ǧr^K6暄8J^sqwWdNj1?=!Jzѧz܆s QVIV=y—bl  $v"N ͳ-Gۛx.:t qNzptPP4 4PP)c$P֜i!wCaS8f$ h>œ$#{EIOh3͏7ji3{9QLy9so*[ѩǬWĠ͏jQ[48RG! qqcQɓwnnj(PzO^o7=7yztʿn=w\7J^56xaxCuctK3D]A[겴A .B> $d>h|s~~>jEjN iZYU*uLT|&`Z݆Xhc@W1R:62*+[X!א4E56]ih2hiLGG|驝BHb!z~E:e^Y[CvRGSwNnH";2%݁9Cx6! ֫Iw\LOW4χ }P@N:ߴsg8ּ72ui0@Gn- d{vZTl.GXAڀ\4KH8Zp9>;Эs&Fhԇ ?X6)Uq0t,G|]85Iȧd.F3 :օdU+I u3d?"&uC*h\*Bj4o:x9~spǔ/$G r rRj#Ք伲!/tx /^,[uѝ `]δ-5'T[LpF)ZЬŪL5ٵDZERo3ic!#yv'B^Q^oab>)--${I"-)vEOUČ^hȽC6 ॠ`(4d+Ԗ?!9hx.:S)E$Їj~VLր&ӧs= 8ɘ~bu [p6'B{@7_p Z.)8B&kJSHa|:/'॔)LOWyp b, } ahsO][[Qi9_{yR 9X7#z NM D/Ka빆;",q֛p B0?jYod{|AxtW{$H6—ބS)>) lNNAE.ۋ:ХǍ `ךd:b_X!3`'/STHa i@A/ 4dq5/hӌr?5Ļf{L IN@?3- A49r&wtY}OJ{N'&l o-Q)-ֱQ*;fk2ӘW)80 { Uk fdj?8NWھ`/e=1ee=>ӕYg/Lp;ޗ'$! )VD <( g;8WTdnw3XS~Y@>SZ67]+jBtYY'܇ܗćسc/ۙ2gg!B@] cħSm6zuQ H E֚1"FF^X4R"b,7Mr}y-eC[}&'8rvǓ"&M!gô@nR0̣+9O?,wJ(z>7lU,]m}Q|}(x+fgF8(nzJ8wa^D#MJjYgqxd?8q%kg55/y @`!jAw 4 KzM*țNIҖP_BlITli>X8\x7}~.Iϰ![!*=z8%(M9.L ٧׫w"(l.U a/ziM{cfG+j_RUb -XPrJ]w%_V}U9o _SF1{Oz.hj ɄڶP֪`֧ަvМHtGfJԔ{;HEgVK< $G[\ً=")9lOֺ׆=:Jׁ'l"2"8 L2J˜6Iipή D!Y-*N1l_O2V:_.ebT8*⇎6[*vI'kTj>[h>%_0g `` & LJ)8Udpb^gL\QOƙ&SuTǪ)Uϭ 0%t,rkOe%n0؞@|J6c/3OE =4æN$Frŭ0eމ=3G@QJr,tTPhG3j-(0mQQ-Yߍ xPX68q_Ba-sâxi\V_~hd9PiF9 W4+E$I} $jޥ +;C6Gf;rl  B wf & ^QHT]AZB*t8βZRs9Cc1Xs sAS' +Q6SbfSIt-nNHPN#x44d|  Q(*|?St(Xs{xfgHyQ?<;$p&YD;aɄnP0&U_ @BaRyԈ׆EӟN +z=TWjx-ro=uBPyN;Hhf3{BJDFTwXrr_{z끛a& p%uO >4#H&؄ʴANC@&S=>o }+ߦq4mF4#(4v6Bs?obod_SDmth͛~ߜej0Y(|yG>Aqտ8sY@a|j.iՂm|J e~㡟dע|.b[y+Im #ވ\wf:ȴK-jiaR ΢Pּ.W b ԱM}_sNǥI^ 8`08A_LZ9=;@i9ەU!cjSEbZ4ozNzo0gՖ;]jyEㅻbL+uCڏ!oM> kkiP9?eˇ+޷VI"ڿi`4$.AfbdžD"G&4nJtk2.5O>O}y ^&C޻Yf-+ɇՀ%l#b`(ڏP"/Ea۠VY~cGX,_&F)֝{6i7zVL=<iYZ EEmDosg4;Ԑk"ϡhK.{# C'JuhWvu%:\_u6Q/X" U%D9Cs&J jzJu01ploD?g7q3;]$%ukf? !Vjk3cF; I+fz{΍u3͌JwvK҇`m7cY拎\X;h=~oD S,†' )יjfUךW;!|\£.ھ06ղPxs_VݗYJ'kI鸖i!cطJu;G9Bá B[-1^|(Ƨ$QRV!{p Σh=ڞDl"LkOƒ}K ^/4?ALu~zb5j$4'Xf(@+Z}Ds%Tf.y V`!"økkovޓ$N&ɧTQD~mu ӔhknI#*ް_n8qIh32\X9іlPBlGa3 qs{})c07z$.6?Ŷ!_~yL#E7s r;%!H# )j?Dy{G;\x> Kȯ*<-W4JW `ǁߦ.O{߇}akTL_p>.nw҅nd cD!ȿͳrMw_|ՇzB *~n`yj s~bиoZӌ )g}n'S,u-KSf%${6DX HH&K?~CT"WY340y"J(u:IwKӨͧ4*^엂&PxN ߻曑vƒN'Qc=ْ?5%&(m`4V>O׫y1$^R/'~ 7X- IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/marble_l.png0000644000175100001770000003240714614030313016336 0ustar00runnerdockerPNG  IHDR^~PLTEԿ߿ʵԵ߿ʿʵʪԵʪʪԿԿԿԵԿ߿Կʿߵ߿ʟԵ꿪Եʵʪ߿ԪߵԪԪߵԵ-4DIDATxAA C5HCYlr9^uu'heή%adzn a0R㬽eyr]eK}^rȪTMs$!+VdopҼb +NYav$q:] 4tmdM%TRI!YY.c!kj?l)(=RU&q; Y'foOҔE8lHjr/_7?7t,Ң L sfT*XeRw:d v;TxZ]g4k}jr.JxyޱPZ%mCJ~u]LLblJBb-moEA "`x!@]9So߯= QYnH ݒ Ow?9Zm7 aG_XkC&9T$ig6i6Cw )5y0_ǘrm׊?CXg&v@mZrg?mb==L<%mG@n|& N'p3K2iޛ?~&ڮ"'ɒ1`ѽn Ti6J<; 8MfcRd ,Foֽr>R3N{-I[X.<֋DWq`m$d=R] py ߼7ԽYM z8 roIng %ۛN %Q0(^s($_^'o@V޶ñnc(Ő3@}mO9$kϼR?^kl!P }8/0DnJwxowC>]= uGcIQD0 x+)|7oAazAnB# &nFe!B m6H4D@l*1Pb=ϖ(2zmv>)A;aG&E RV@^G)1Y.Y#d24T3=iSkY,5p0Dgd $7Xr&{^D2$ CkfA5yOȘL X VöJv z.8ͯvVfpyl_~!JˏLT-VH]z8*-{TojyCǁ;h*JAdRUJ-eR* @qr;k+oe MG,P@ҽp:!s3Iރzr8M4Ƨ8 Ę56jn0!ZTjwюPG(o}AOӞ[v5IlAHȍJ vt^V\=Q#s^(;vm3 *gg2FG۟ѷւtUVك: ‘*l[ 6 Ԭ:&)Us<K&ԎJ "-Jr3 , >u3=ȁP5$O'`NNjp|tub H(L|m@ 8"ma ms% 0D`P:2'Z21~{s%VoWh^d=z(ׅmC6F/^/O[8fd4;&.Lrg c37+ۤ^MQO*ÐYVc+ Gi^yS`N$ITOŨn%>eh~Xb*PhdZ>Ab9ҦZwۺf!F՞d͍<0I*7,圀M UgHF)T.}W<Ʀlq]d˓gրq{3!n.1v KJpA 4?Rs{B@3 2,*%c7C[o6}D ݶCHNw2i_?IO){)" VЋfC4DO.ȿ!bvy@<5_"o^dweȷwj6>r0T-GJ0xH)%[ ޘ濯F5}*ig-"41WvٔS@Sjov J_PI0N^>kYRQ̜iZ`޻I!(#zzr=43hp+V*h 0;ɭ\1DOH!=L@Thy% ێڀD3zٱAxѬ fY`UI|Kx.ׇ~u"J Xc}{tR@.fW2P3˕2??Nt/ h;;R/;LM2W1nvH5ifspTZX-hEu(4#DKm8 Zeĭڝ&`@чfl LOc;B#rtp3^@,Ǖ"Èj <~ $;OdzUCX ԑh3_ ,fcvAxhBRR;v0TS/ 𣰢Hz-]i6k.kVLōhTfK?}WñĘ(mZ@U=*c9#,]f߁+#<=5HG `7oD/`!<+!ހ"I@S>7ZElM9K~Xv=!QŀYֺM͐V{~U # bDDKȋ]h ׇ' n=Ae5,B(3xckIXoGk=,xuNHʁGr)W! ϺG.G&9$hD'=+g^^$CWWuU\?@u&z}Տjh^6M#5#92ͥ u8dt&v܋2#=J GTY%o=zGkNq dTCFɀ%7e^m8kw")7Ş49/ \QA|\v6Kd_Bo5my7d ]6`dW:M>0(vFH9"Ӈ?>Doݣ˵cDbv+£TYI"#hB))9Rׂ[nw ba Q1CS+kov-`8gҸU ] AV./Qx7=΍/ӻ[{HQb7=?"@N Hѽ@Snא:f1¬6kF=K H-E+Lsrq+A&\ZP&gRD*5s:Y%u:rOwd6f7QDa&G2= C5͏ ?/ SZ%J"%A(% iޠ)Þ^i:\>hflN)Kiz㾟W 9{~\sm괧Y{sLw (Q|AHHI{E6&MO`O XuCd\d%&O   ŭ`@ fū/XBd~lBɸSBPGA ݋c݌~x9l8뮥d4wa xE͛v(qJ.;kTPRcL$7 ĿbC&04*~23|uI 2}KoRʍF] JYW랑|3TXA&Z`-gi!>^xjf;8m ]|^!Tq vͪ3 tiy-M;NAuGiu,DsV@ZΧ:mzwE(ED}fXݭB"<ȼgT^Ik El@IGo t0B#[á?y]71c)zrn{4!x]1f~ma '2t?*, eаr$..34sdfR$a1iD'u[:x˦q+CgʻteFMZ7<*ƥU>s$/oYIGv? TL)I[ @5K8B= ]1nʒJr)Q~B7K.>RS3 K= . G}*C.xC}5I` S0r_4?)_vI&@~֘fғ鄇S?|? d "$S#>c){No(̑}\I d8S6Nz}0up,9NJ)1=L"phb@ʮesErY; eZkTʷgLJd,s1{)Ji+L=BZ`= MsNӵ݃ SC{r뎰Y> i, RA=^0c-̄)ieZ$d7*8%C˂Ml5_ ߙ1Ac쏹%q8áQ5<Ǚ# ^إ "nehj?ma/k__$ع#~@f32VqN[Уw2@]׫@4ƴp P8ͭ_x 5R v"rDVuH-pcC8G5"9߶һ2%[j٨ ~&xV8Էb N7|wW0ϣ \yn[CNUo;H !C;u-bH6p:/h,vP$!hR&1v}g3C]x7$U d:. EZЬ1?wx7efB b13}K#eڍ.jSDP=  *CY Pdrc\b {;VԿqXne(l VS`*Bq;6GȌPVpb/=۳:B#9@Mк+C]1~6(rVZ=./y5ҁ(C҈o iEll۶#AVR4JzqB0?+Cy3)Pڈm,NRfzW4E@iư66Pd Zmj.*ۊhg66?~~Y {慠g>2/P^`PwKb]5Uqٔoh׏Q)9Pou8$ 5!桤/Cfg<3ȻEX@1+E!(*n}"d6^T f շ3 DbIq~'$aWH{*_2;::vyK^[ DctK/KN - Q80I\a ׏-c15@orL6WuZ*GİQU^: `F};Le()4hpaH Ln7&b}{G<وYjd@McJ\"0_Oye5kkL᪅O~ԌgNoi3[z4v* {o-?2T)\Bs`ʅ]iM,5lG|'( p@)C cg{JVRziiK1X“kV' /8SQ5v=(}+ؿn^5hvo{:hude(g+$6w|ah-=l6O+C[;NQdE/[[t xi!P7I"V%Qf|y6^zJʣt)Af)C6AY ,݃ZMJ9%۝s 2^zU>9ucR6PQ7 Cy-e5?}.Pʍ dBrS.ݕ}0khCz B4w0z={xJLIw 7()3 Ź]%gA`RcdhSoKTgA2>(]Bګ̗} Cq5 _7(#MVĵ[1=DbC\a81_SK#QO3"EU9Uv\aj#C$EITք>_h3Kxt] ]O13}q{]'ޫ=Js,5_׆~=l.  E{~<+B#Yp q%3inuh9 ^`}n_rBPĉ7cDe&C)p8Y(y>$2 6Bźqu#o 裂[oMWuA$C:6fS;[WJaBLrV6/X*bKf{ש\Y` ^d ]1_Tzb4Kq0lfϡsv}WQ=`$={`6tʆ *k iF #qb]$v!EZk=Zc&( iN6ds5V*BJ9!` Y"HśK>wӃv0_%ElawWV NJt銗“=Imeݦu fpϛ1 ETpI р#"c$) ` L;A~W@5Yxd01 3%)`O Eؼ-}U]ʵIw4uo2%QϤ]Dr@:嶤I[֮:pi_(P^UiZd'Vt{[ WDҡd?Hz5>M`YDG{_yN1O1墲uCt/!)SXlf}I0w$Y"Ca2]Rtr߳Ύ:xEF[V"Oq%5]<4K+™% POs6- r4q -P!Xhe2H9F"C2BW!+#,}M0koe6dNZPx4"C2s ,S1)lRL>b\?4|0~7#߂ n v~ȱOy1iH+f8)Н~z;mie@M,O"C5!*k-2TsIQq)//pDZ3n~'T9gxo|bd=Oex7XJ79 H qMxƈ#i)e~?)ܰ$.rˡYg78&,y\"Ce0$ѥ1ȡuYW qU,#ז6K=n.g tYw7?0u ˄I yN w$B6c]$J6?u@&C"CpoaOzt,SIHhӺ.sԾT:`,|Yg朂=n)(s/:{{8WzXYе+#b4>fF&=P K;µz@{g'"(r öÍ  <40OgLR ,G.ӵ֘[t@rvɒDqN-O[x\:s(fPNΫdCo6_ӛ#܏8n&CsmӃkX8:9@r$lPf~Ja+=3OM6h 7SZz?±%-]' X)B8^ 2?uWևɻinZ s:pǏ"v2g;ۘB2ue q9A[]p׶y724fDx7?-qLGN?3L c{'~C\W=;O醃O2Լxˡ~|C?ANJA.7G |*u7)ZZNTтlH[O{mit7eŽ⏑I#sÞ /r8}NEڧ2?b,q%Qg|$Cy)(QP[!{3w7?}7\!Λq.Sybp b)iYs^oJ(9܋0DBi!2{w1N@d=[WXѤ9[N40R4Ð+Lz3p)wwQA bz;vj!iA:\ q 9JD#d%ԕiB(&:P4mNw]sJ_t<;U2gKNn"~G_'3aF~͑yOhAKtw^ݘ вLS$}38V{<|?h G… 9B ݻ`Z؎α8\I`w14R?ֽ3^ N~mNqtK\ ?% dgI&[n #(\ɸYPP&)~'CXڑvsYN9d:Nw);zaݫU N=ǒwbL"GԲІs_槇݁$Co/ $%e~]U׾V0dh2^,2#Oc٧r[ =<;d&29; ؊Mnה"_9PIsɟeM,2*mBv,])M> ?~t)u2?o WPty @b7梽ɺ6\{LJwa; bO}2]מ〥Kq:׆3; wK^۽^x?b#g?nIF )Jo6lyjqL\ճIlYR O.M5߸I-grOT6ir,6 X)ô?g1oힸY.qo3i}w;;=X, >: Φ*A$Hm8nWTa3֎&WrIڜZv%bDEX*RJX Ҹv͇ε$rT=U-Z74Ē[\BUN5=Quhd99<{ hRD@vg}d5%~㫕+5va*y5柤Utފ;N%m#l]ʤb$L5Ym8^ʅ&X}>W:`:u^n:2"#AӺ}ܔbQN}W]U>JEĚUo5FPPeRMR,9]>蜗~R~&_L ŧnºö7@\,MLͤ"4m4MSchkHyݾ0\Hםea X¼ ^:E M?)uƾ̊mi⋨_c/@cOF-!zggT,2]M(@'3юXbvms$aghփ"73,'nc7G9#T@ˈn+9{*vx'Hu? }.5qR|@1zY{o`*'{v4:<٣qu %>'wLzC9= |4!-3 `gU.oFo<׃5꙱4\Ϯ)0grƐguj{WvʡhýxGRDW 󳶸0]OZ6 UFiݫ`dAۗx\ aW0i R^IMB5̨\efJd6ۋn3Dl1Scyr)!!ńu> &.]H^sQzO5l ^jnGzY4HQOssѹp-ilT܌tM3b;I;ӛwlUor+/]br6eo\9ўEnIgQq2[ĹIV٣-ɹaN0 vL}wNA_u9ۂ_Ӑ9#C@8L7/UE_4Hjau/БJ{cP i8(@s:[9>:NQ)D=:<)?͊cWA00߈]J̟2XOJiGۇS}v٨0ɬΰg(QQ9xU)|͛~<߆?+#Sw=>pQJIa Mm`Q;FmɭaS+E۝@VPEol8VﳬTsD:='L]ΆNY\d[KhVi{$dq(e%2{L&y皳i2]:^-wc+$5HqH9IF}4SOٿGlݣആRB#VKKܶ-Zc-sZ දJ&ѧ5b7^7&9.V]\9;?#f{'Wq S. ;9*'x^mMEoe6AI'g X']ej>75iΘg+øcPʌ1%x0>v :H)nHhgaW\k,c;bK5LWtyry&vIk_.`Ue*TW7I )ba%x.Y.xMar;ؒkx_ O3PdC43i]6oy.I9 i, ]smM=:E36 |ѳP{\])?o?.0~?0yV"jmrqӋtKCweDq2"[*GS-n8t2NGϾ @j!o&Qf9ۉ̎hwc._уl@WЌ%V$ Hjckad)΢W E[Ʀjҡf"DĊKt=gMEY̟lU{3ng4 '|nX|IgEθy]ܯu~Rw()1S+$ĘN'xcxOd hYS}nn2 ST2ZdKD-56o<7ڶ}% VAzĜ.{D>ஒJGJY(?~UHL_uľ@X!Q%mj Ga9[˪/: =-?Y3;ٗ,QZPHEݕ.6RD' yjId ^c|o!VD_X4&в3xJn^g&Er:ޝp LnΚ?NsM,E0R`Ea[~ ,KZTV l$Y e{R|şq3! :rR`)NwC]3|1'N3֡ gY%StFx/ >`4;.%v^B= q_*L9/xr{)׭}~'w(2糑r-Lp>{TشsufJ ?o*`Q|0-w.4LmCH1cZsZqCB6 Xiv/{̍]i5t 02W!7/e-p7 ݝ>&֋}fϵy :J+ R _4ymDtꐛX]Mua:'1sk3T [IwMTU& Y[Bh61vJ'81Jpyov55Bxz>,^{̹h!7Ay:{{ x`%z^!/Le.Vyhx甘M)޽v(-t.X<.1s;Y3>Gxߠ|.>GgGǂB!T{6\P@y{{kVN O7N%th .`. IהcFVxQ'Rrnȝ,^(Q~Z3qS<3c]PA+.ҕgSj0OH$Y0s,9(}ۤOx W_׉ۖt>YR8R2m5Sټ$IstZix!p8/Io;nʦeJ}.~p꠾Clc[(|lM+e?7e1PEwu*j>UI6(bɰNDJ* YxVy&7B#) m:i@IO{Y󨤂/m1d}.ӌ׈nӇ9PS=n gi3xA5 ɼ~jX#zFh}wjxj:pз@HsyBW?8f;k;]^>[No&ܔj3J넺{V=kS3tU=fs/L<ent60V:4駀c$ t V#D\8kVZZԳq5IBhy^ zjSm<"/*/|׿ U]|ۈݑ/e8Q,|)PcŤqɢRqMIrp7Ҁe9 tngʛG齗EX ;,ס`dSOH]:nᇢ=8=2 žyU: xɁOL¨X  Iw rS'T! 0PqJzߺqONA0E%ׁЃ%[t޼;zRn;^\\#`zqظ_Y6oDaM|];;tAQזh09N,.՗cv+§ ԕ}$ٝPVFP`X3C Dj+2eɓy7kJVNqM-m jT+RM5n]gz. yok,*Iw0QlO4" o^I5[IUINQ0N v6'ak™?5^U2k2nޭ⍚(YYGvb4p8棾ѹ݅x:Ƨf(만Yt/@}ken\Hdr I&PNK;z~y{?)Lm9DfXgb/ 2P_sV>a76)=א<ʬ* 95ӽ74qx9RyZ*'4g[--*Tc֓z/*2֕!PHwO)(%LBs]>2 #t4WMa)zSHK!XiHOHgE#kn#|v0O?aI *{k*ԕ8>f Yo/A$Cl1^ޟ-臰a7z.*0ZS a}ܓc{]1;}"Xrό".,4S^\Ǝ^N +=3GLc蕑0y$= ٛܤﱄ33 8ѧ&5w<;> ې-\< Z(dOGMErě&,1z!f "(+qش67\>[!2 >}vS֚۬ZIrx#]2A;x7y 3&? 2+A j} Ig:޺*&QoۯuXfK#N˕=kcfM(C3=&dLCÇ.: u1gF9ܭ 5.u8϶VϕR 0=YŝSI">uN.k3ųvj`<rkBx -ۡUm֙UZ*Q?}{jok#3lD Jwn?K3_&b{kt&n.rb,h$;ݼa9aGMnLFz@e9›&c:rw7wDrisjZfE th7mU^,] } urg{Ľz:CC] ܴ O$5ЯIr[gw+M΅QXe`OԩC#Dz\$nPz"aco21Οqи7Z;wGcoޓͺNR^sjTQA#UBHmlslU; (ޟ =uֶp<߫إ3n@r`^^컣"!hE%h͕wnѪ;vѳHw=nOU4.\9tpz&C`g*孧}Pq-*N$/m+ΔTxNAШNRF g٢ךQQ|AC[^#[Z8P [X'S=e{xozz ^i೥*/s448<@3+4$މ7gjo0dTSan]V&q,KN8Yð;ba @H]Ru/lJw?uH"N0̓&}ac2`~!.m#o|J_au%+ZZ}\`9@"KꮅEc۩*faxEjE \)sɄMXn"وY6MgHYS䈙+ ?5ˀJB 5^y.g8e96?Tb :{>wRĒj`2ц˸uB˶Y'XqD+-&a}Z]GW@)UʿU=cD|LĢ9Oai3nTSKX5ט!!Kb$0{D%,YJz<:o> \~CU^Z#sQ?y'|ĩ,Sq>a87JԥgXѳ>ٌ-cz'A>W{q-^i'Jڄ/\Ճ"5F.Xխc.x?[DTndx./ ([;]5S)ϫ;o`zh'QBy!ω΂ D*Pk~/KS?_a~iKt(eOcZUkj{aT9;:G[LVo?]u*nΕ,K/r(#l`kVĽ[ NUe+#Wf.ռeoxg=s Ï)N!vLL6`h|5EJб̋[ȃфWԗ.cDSfrSY43AOrk5Ӌ gٳ Euv#PlՇA,"1. S-r/ u ܔL XG.6QK\c7,NM}) }JԳMt;ߊ:o>kvrXL䱑7Dڸ@EUUQ Q?㤜^M"S* TݢZ[-.ڲ l;_V]9q9enr5Z6ڢ,y(S$mṗT wǯΰ\,m-G%ѓ #ۭ'gJߏ *|3sUmmXg+GG X`Sme)rjI8s! z+y `}n _fUi>POXvjJoUseebE&1ݮaL $"k>?rf:UDecHmy֙제t<:-=^ͫ:Ζ^wg~t իԱ!j B+خ7$2Tq\.mD;-wOl@ܨz;xZ8NoL--GaXZTIMflM2D rh.m۹J|& =*o)fX5F4^$y|w~by/5c=c#c16W-<.BuҊ'S#.уsbA`BϷj]Q;j@q9J!E^$߅zL{j:Ӟӱ/9\rGx f/31Ww6$Fg7d0$hdcj7׈Tܛã'u^|vLTUN.`oeE靧r{yLx{".~; ibVRS%R$nsVO*@1{9[~W+LB+`A.5hhe 8M >ӎ=(J*W#W +] ^E+xEkPT#˖S,fQ+~FwOMk>4ZR|I %H#G5&ږ/Oa, )1;6'Xr{f|e뛅4)ʅ^AlV~`dGJ5֒xa[(^f%,^ kYm0'>ϡSC :Ǯ>(yߗiҝ3O DT0rm{0blMQ$Y`q-ǀnT-<$#}:1k甥ޭuas.ŗ⑒LƁ*y8R Iv2Eoi>p3_f=C䏿`ASTPUdJv/lAH0{U2dU 7N|8Z{/Z^5%{%o/Z$2R_g#4]9SXD狲 bIhY$s1bJ޿ꓙ RĬ@7i-v WmJfMQ.+ՠ<_tK~Ck﷎Tdg6TXRV/<ٮlۇqaFc>WfgcՓz.|4Q:y@SY;U"OV]hyxw-jcu[֏zK9jULPl~$;/iRΈ]nT1T=}Jj Fieb%z,OUUuf>Al#Z{|g2X\U1?V@2,h3+BeeE6\GWaGGuڶKlj:5 Œ];Hd[w9p k83QV&t"3?ΜtMgWfN= (;5EODr:Ls˙ խ/ VjlDXbݟw>;>d"'A~rn85")f\(WHE.Q`m7p9 c OXdе{CPż~wc衇m}^ЫeuʁϫK:} _>4CsPu+z<Ŭ܆4gYMmNTsFyh9 m{gkwRޡbI= ,]>,FG@>Xtd+/7iK!3JR#+25k\v@}T>cP`n+vV6֔ a4ZI!*xo' h%4;cr't]Ye_"쑞9]ݧ4\Z%8=cǟ bt1|w _a` K/,U`驂iuU"Da+_fXmtGM#`(-Etw7Y{2{˄H6yR_-X9{)@w7]9=h6EkиE\{dH" Ûrї}|#=OLeL;sa8fZ=z^ĩ֊V%Ѣ]Zy}:i,h7!!HFAWX`9X:әEqDqP6*pZԬ]d[Ņt>T`ֹZP4؇m0i2'uɁ](AzF6kbغ.1r=V&ij\7lJPNL]S)Vaz> /z9s_+(ؘmۢ"`%8gE"Mj?It8+.c~ L3 ={  q\EXN`ڭ#)(x"U}u9POcfQ{dV=h k`ڷaptڇ;9{'v>ݸU-ה[=9 F~=^,k>۲k7`M;ZRsS+׍."ߘÁ{lT)M (UFr 5+WX,EV:xΩvsK5ٝtJϨ0"5$i[{an .0 &~&֛[smT/fOօ25'׾$.W5FժT "0rVV^zM,8uktVefd,_9wE$: tZB`7Q[Qa+TJGvxP⡽91Wp;ֻ.p],9GX'bBOD*Q'-LK e^x)vNQ?v估H#eRKr)c>ap˳}a_{Wy iݓ[#;jJSvPCJA 1?U[}g:Rhw8eM I_Ŭ>e e%tws2XF 1qkjY\p#kY3!_lf k:s1t)IhYRIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/sand_l.png0000644000175100001770000003717514614030313016030 0ustar00runnerdockerPNG  IHDR^PLTEۤۀۤےےۀȀ۶mȒ۶mmȒ[[Im[ȀIȤmے[ۤےIے7ۀ7.8|=IDATxDc;ʧ>Խ)a 43K`b=!YEjgQ@|S'#D)K  {`++UE!Ǎ[1,H> TB" B&sH8IP(-.e+chœ4yNFJ`++5 (!$N9ОH99,i#5&VD f;G!A Bt!&{[G3h(F4%K!X=Th4d_[v/c[8.˅;oUShvPg@ <|~9t"E$f$B 8c9KȭI'%)C1elR,=rЎzAcDRTPW| A2R$jIl-L00mD$b%(d+"}' ֥a,(SjAМ $z`d@ȑ = ;:RyH+qmvOY-8 .& I `_ٴNj~DB@0+!L91p ƤMhv}pW?!KD;-CfԴg02<@fL0-+!F( n@J,RYcq tb2 .q3Ih 9Dp"٥i0HGaq#AjPlZElHBQ]ɼPCH?=D%20P M\s#^B=m4^9Ξ6UXHB%Ocv(ж.Ϲ֗'t&u@SS0lA BbH4m ej` 6bfg=IL PvJK 7(ߙzi?ƕzmr:598{Ѱ11H62 ™o9ɹ"ZdZY/|^%BZ#n MHM -MIN ;V2Bkg Vj0M|ufeVE͒`PhbJT Y7!3R<'8th}'^8+x F\ crBzte`)%0Hs?3shĭ:r 1 }n#\4!|n@ gQf`PMY 5♝CQ[gP$LLڎ$qkǓԣ2YIh^` $cHƈM8MQ7.nf8_r$Ad;ĺI=4ON7PL<4gj#cRw(H< NH%כ2Ngu"7<}fXHƝBdFg$S+"K:QR;K_FAj /HZt,#Csf90 <-I;jC*XT ;J˷~Ȟ<_ֶș5f3}!Ͻlj4"2q;boqTq_`}@Xmا2 M!sjj# i%Ks)$$&"aڐ$_,JQ(&Y23ETV2fEg(9c bCp#I]/$(yD$s@6E mİ)Ҭ7I./pU +I etbyHPHuYډ((YL$ }e$* v%(U1cH)M~H8^`^*$\OeI\CJxGa ugMHdn30FbB|dB46:YPMj+/%Ĥ3&G+dCFb~m &)6f$%Ѡ6pMbPb ) F U&xFUdMz-i9R Gs@ +ce  J֍ ǴLڂ@!AHsΜV^[9gjpABQ?Nt괨09Mv^I B r vU T#!p| [6v(W)5Qdb Q,' 92kW#E?qg`!+\"F?S8 i9$#{&0?C95mmJ*@^4h/V: BD(lDp6%W3dFdj7ssAnGC=~'*ۄ@ B<;@x%DAC@R{#B<-UbܼV|AnSK+A5\PV ,M@wi (BI%O-0bD% A! )dFE/ Wue,FH8)׽= F)) |HX+H&%1Og"0 QX\J6$D,+;b?,gtCȉۥhqCq;afyP)$=ޚ6$ )1"tۅrsF&J\7hnA<ТM<}R~Ԏ]"QՊXKi^# '(Z B uD~3I+|pNsOx<ӄRۣ(F_x$^hTc6ZXdF1 ]$8Q&D& 2d8ORŶ\}`An9;ȝsZv=! h$`8DZƠ8h|1aFojc$ :5.W!Vfu2BYm7]B( 6<"Ћ) @K2z(:XrF1YƊ e!f~ArPJ+%i%rE& 8 gJ@QW>%d@{]pw.4R'iyB@zv:Owz!* $+H "";?]uڸ[jT@;+"Y7Q,%m$Ѱ#;b3DB&}i#ՠEW06385lmN׺FRJA ۅ |pu+MMb'89¶$*f3-0CjwsIT"N!_M]. nFr@T0 (IL X:Jm ɂoi.v9Ali3b&D FtvgkI&+0Aω%pȖp)K/:Q_ U{<"2Yfge)^pV{TܱB ""-(, `>Jr#}na8A>1xl4D2D#؆43p:J  u75~&nCt/^Djw8ꎮҖxm d* {j%CMC98"- @ 8n؉F ,t/U8oWx b\"NsXyPHA] AAL6Mm(XЌ4ֶ}"*m]Y"i `Élє{>5 xZpXj\.tNH\돗4$ Q"PP@\#aQ((o͒y"ߓ^BYCjCHƒDxÉ_SJМB>6&m7 k:[;ʳ;tz5*e7hI;vHZ}) {W-\"F_=X|! ב Mآ.phvV+ڍ=`^r!Z >XG h)% Aw+K8Āϛ'4@~k,dv ɞ}u5:9:4_.vlzIdY+%-16oA@\x4B\LR@bDȤAӃt'zIf6\++o~w|$b^ 2s:_jL׾ð9w5ڄD ggkG ;0R`6wW@w l;ա̕:& QB?5ϚKĠ?2M')5' `&۝Y3ir%y{^W1_=tQJtd?UQ5 0BR bIpF>v&,.`FL {l[0';X߁.JY[~j:#2BFoLDIdl#d,!Qi3A8]h[4&K)1[e@픉ePƘ4clP(hΧjǺP&cD)PAyS\8B$+΀$R,oSw'Гίn(DHo*JBHM`]$Uq" !#4K"0iY8Nqص=_Y#06%&SFp4DD }q㛙nR Cа܈Hj11Ilm^ bܯdB8(3*&EOzGbH.@('jC͘%n Z+hvXk3zD#.s Z$3AH 8%3HlErp)%*"$:xFk10VfHkQ4%;xiw;oG,f@!!M,t&ZC4kZubS0"ۏ/8J [~cfdfQfX&8!G#Sஐ|'q E (,ʴԤ 8,'>021-f` Z$CuFW?l\A>ЬC +"5q3=yDiI!D(`1KbCAq{%ǒi0qN wYswYUgHp.XD.rU@!R)PT0x3?;Szu @S}ў~kL"q8C2P9WH%IpV &"bv\V St0'Y8|@ ,혖 HxQ!0[t܍ FTj 0 ӎ4S\y{CjV7ÃD}=ADj u&"B3&SdB}jpi$LQ/n2 Br9-? 1Ps  4IX͍VF.bRNX,8W 51"ÕE6b Qov38:šou030\J̋  JS 99”),5.#].>ŗŰp O>鉭ggpl(pBF++ C\H2,T t: pLCe6[FYק$]{\l׃̉B2wr>%bd6Ri8KBr@ .}:J0DVq\_nJ) E@p"Lqn38L@!~kl,]e!3E 4Oއ/n2zx -TPEW:Ee.yNp!< 47[|?Aiҷ3vGyNa(ަdLg2 |!D:;g4ĐWh3T[F㚡K޳ΉVg&?>&` @pFJ‹ iYLBo2||/Pmж~IA) Pg8@}SЊf%T)м@B+a HH#c>"@"6P`Uk*96/AҪ~ 3"ʱtЗ@V{ T @(L 4iSGj@X`a;Xu%/%0}k.7tBrAЏ 35  !b-Å?wfZ$ W .\ ͣ\ò +'`@*`. 2:0Ғ\HB#9}'0H8TA Cl[^2f]w96 y>3h`}Y Hx3]/BJȫ2@Ur)P;DDDR^ad$ ;75~H;zGkOB Lf 'o#;4% $%dP7kd)yկ5L.QdL }:#$. Lph`ʰOB  3* M5H)@) `{#ރW|ks45 0b: IK ВYyfh`4p .nP` (p,"KP! o}rinB_̈3 ܤR n7OB;B7>i<КLiHMXY>J<6d=os$&HB D0 TΡy̞vr\ Puk ݓ@:PtOi¬%N(/J"- 'u*  ) @+@`U~[J 2$OrA#%;! EA = hhqFo.,JX3W0Xy C^PV)w(fnV p(2Y)aam&w]iZ e(Ha`[ ȮRtBtZ$ yDt -+2!PF(iO`(0 `MHkY `P D I[!E@9mSXI WDtPbɓnPÝа0a] R(r9؄=a f  ogunfh)@N~RDANYD> A7^zEX:C` 4'p]\\qԀP\@@ii(.[ajkWd:a~t" 0| x!AU@8@@  ~"b 6 |`aO8X&C4+`,IRkAG#~Hp],z^ĉ7҉,,@)9{$V؀BZɌ3f!섩 P'-># })[BZa]$pC*-4LxA)' /2U @! 'q B"+t|q3u6@j,z}2U @rnrc~˜̀!IjklOToL|&XnN%0,< &^@M*6A)P# yX7rCǽ[ر$@,F6=y*6iK,_qo.a7MzkH0x$.N@IӦ_ћ$@\ w / _P N=Aߕ J '8caO 3]YSVL( ,oB!Hsr{F'\ @ؠma q^H8!O p$SZ P.L@$:J~N BF2%0Wu8?v^4-IZ0m(! Z8Ю»r,vBd K{XFAKՁ0`RڟZ(Zu$W!,LA]]8@ "^H9JgD!Ђ pSyBy~Ш}H1-LG1p3,^F0']HNCop3ǥy&By 䯅:pϐ6Β ;+J0p=ɟ2# 8&@J3YĵLL> X,YPOe q pd x]`'$$I^3^n%K 8!@\\K.IJ,Dtp$e&\1.8Y2u6aO/ &HeX 0& `> ]划GT)vρG^B8w\03nPrmJ&@z  ɄMW/4ib%!ge ~z⾾2 87| L{0R;c+YI^粬 6> '%sюP M^2 J ^>7K[KO.kvJrfI!T VJ a˴j 82 Lmf>@=ߙh$DL@ᨵLC_B HI2 wOŘ,$`>r'\ ).7@g{K 7;rG кK|HRa;$epjJ y P.N)H& jZ^0a PfN'`+%$LC%J Zek \s=P`RpDx0 z@$0,s<\ɒĆ DPmP!90@,8SY4GIƧ$7Ab9|WeE9@`eF|~_+8J~mNn!hZZǢkwũ(Y8́-{JLK  ߫9MRb-bs )?_oy#s: ŕ\˿j 3dsEE\kE ,lL>t |/D̀zN',.  k !(FBi!M1B}0OK $*jX-R3Jt"IJ DV /D#4\ Km+2JE`:倷C[$CapX$^ vXMa$Of2{fƈ~lU!@-r6H M# SJW! -| h e DdjT_Qꈏ!UH;P?E[:oJE0=)ovR:PuPBt&^|@$k-]S l KI`3'06w `_}e43HRq@(VX p-j4W9ix* `ɹxw䫜I\:Mdp0'YdAM!hMKk hD 8\G~F2w~ỳlaW3/>Ij "}\(o:%U]L%"H?XBՋ T9 ;g HIht8tpȢN}}X Hp809s9@R)?\# s$ ?7AHiP4d,=e:],QxO>-ٟE)֑q`5Me ݨ}E] +CZn-JC$$qd4$=CbW,a Px1aA7C3"tvxF8d aF"\ioc@Z@ƖL.IP7%MsRjlҤYYLID3@inje؄r n's % 4λ$LPH<>}3Ҝx&;datM!3oibd̅9Ipy|r ƀW*A\ 4-:S& >$l/I06(Taa0nJ,`'0X}E1J#Je hj$$$.!йiCh09dAY` s1pe[bȂ8v2tK\'3mfe mr+NfV2SFgMkNtrY)PENLgh 8w I|>%0oSbtʶ'لn\M(iebu8DF 6wCvVI,mJ:#ʤct z@21d7cEhtZ6ݍTtJL.( 7oEG|~gF,d8@p&eAם3μ-80`"D  \+H7C~+&VŒNf N@3y7kΔs I>̐)S9ؐIo,v!9CYd_;laf^/<0@ _ KgQR=[j?bC0 JExyZv>}€kTF7YXBlh/=LrAaOafYK3S\@.6@P^!EWHk3kt~a-`N*__߳YL7]TR{R׍J(8 FI(#c hiu2\oG+dK/KG ՙkm^ 64rN2SWŞPR8p"`+8Q(ɻCHI-s/: |"őkMG|.G =؉q(%Ʊ[~Wʼfv2CEWIC0+ A "ou:kyo9w,2L!eafX ՓӐ)|z8,Jh OC0t$ 2sU@ga8m Ip+3=ȵgVWȖW? )H ar"B`ঘIekd'-Mf'33ta~r׽qr~ 8Gq 1g2"!XegS;&&:?W} 妯\Jm9p z{`=㹕rB!ͥPcL/=~B3=[ٝ$V`sO;gńdʡaa4Vf8!8W K gnpK| &\%DnW(a:w]}q 5L!Wh~">\XIa!'`4?m]ל=C2v9 M)8Hu!!rfaJ.Wsu`+5 ~;+S6kG€jU?X1kQ'Ih Oa,,YxmTs੓7IKWD|ݧ7Z|$nLAq LZKM+.p.@'{Xww*`d'pHnB'$WiK! \%Wk !c!Xx18ʹKGeE1 V r<8Y>_3CV]ܓP +&0 J߄|*hRd'e?Ī3ĭf ]BI1y?9c\R`(W23 @`H@oJ% 9[v wũu?gX*$Y)㋽!aL8\7I]eŌ8WјV ߿Qyӻ$ɛdq6xky-9rfrfiӖ>k&t'õ74y2L.[o[޾#dԯq߽؆Lb8FX0 vP2\aA-clQ0AH̴ δ} cqx=p*Yyo.f3\Ss*Lc- I10&OdcY//z)AI"~_o2+d<{ur━] K$}#_d%o908G6gYe -^y\e\_ok[0 b IB3+B:= O@}$oQ0YimB f0}\fyC2^ϙ#T<%qr9[JiF\w`^My&-\x!-Y3Ntq{=dq+0#H?~4d̈́bX(L ‘ -Ivr]_m;;D ;9ch C{)dtk (+p{-KzH!-$$qӒLsN$d10?s3(Ys3sr$9MΞ_E1 Ĺ#z:>ްe% !>BH&"{$|x .qP'q9I t@ er[ry+R^&<$HS`UH9\y a9d6LuA&&&l_WJJ|~gżzW5"EJ% :GF2"}+ lAHT|!k;IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/sandlewood_d.png0000644000175100001770000013235114614030313017222 0ustar00runnerdockerPNG  IHDRzIDATx,4=sEo{fl`13sN 1gvxBp7D'QPrGWJE&Q穲Œ|m: SD׵ҟJ )IA*7 pdV!CiyR 2列퐦%Vqi c-Ehf501Z+eOІ9w߾FښdFxm1^sA1sfȺs$3m,An{ާ1Q fD\pA8+s~uF`ڏr*HN+lb)ս@ۿش役O6o ?`tN; C mԮ]w@Љ3w|^%҅=%M뚵HS[AY$YS\e )U8aۑ:<]Y 7l>`0nڜH\;gβK S0*220*ZkˌJP77½Qd@1pe)Q( I#IF)b;ۖ Z+cV-{3gZ ;r{M׿P(NPCn")>S D 2s,B ƢJ%`BeZ)`/iԔM9xc'zhbQ)Uo . 8Z: rz-BK:ϣp]awpA-}0HRX0dMePjZfL{/S=w,UJLGYD",uCC&{'*`N[>ܾz;"8f?x=ƣi8X/oa5 tg޶ ~F"mjLPx>tks!Gbf=j&31،,8 J. q_UqP7 @IK}ORN[QnB"́+&ߑ[goE:qLI}sH#j"{8(M2o?q*C$HEqfT 9xaa@vQqP 4-j5 R?*'4[`?X)^6q0Rx9 \P'#"&F""9}L,Z$0# *2xf=1}kѦŭHGĨ*?Ė@(V  L KpB`B fOyпٯr TV?` kܮAƚ .DTHD$4}smyc65/0[]\nwrVlDq<%qx2s|۞"<5 K9ƒ)ZG|˕z=*g)m?Y;2Jins)5GAgkF++Z6+8Rلz/!)`vvHs^8ذD)L-š|0r$ISDdV=3O7#/S'3[_33cˈ1> >zK@T_W;(pi:nK8۸FϘrKȽ׽"EJ!f$DJ/Y<ܮ~^#5>`)!UFgۏ8#sK4ٯN!dAF&Bp]5GmPM <}OG<6-!M w-&;H(ev/)C.k%i-U766Jkx]n Zj~T%^ȲQ#oU}|vvHq3bm00ƅqZ9KGU{q=>y^5K~` ݯ~9ط}>]ʹ>&yYs Lb6.\ۖ-%0h3ĔR,qB>saz*}x} y+\F}]UJ{LȲ70>oRr7"Ej:@Pm"?*N~fz]mQpU"b~m [ug}>rI[ yqfbrix?RѻLBǮ $/A?> ,1 8$J,SykHBa9&l] "\~h݆߿}e\ *ī $BşqiI瀨1]Bvw@krѕv>c:~B"DlYMP(̏k~ejk~99Q cnrj ׯ1.TP3ߓVOLaR˜BS|Jzޟ㣾?珽ϓ9kw7O|%PQ9zr[NS/i.nx(TN<6bBu:QrxSرw}`mo?~4TՈ F)S5N`D 9Sy-:B@l:lp0i{~ߏz\>Ha~+<+q歹^^_x`!,rԓ#9ugzkZ?ejs{ٖ<>مEKW}gޖ[L8ZO"A8bVm91b_8%dB5X%mK4[ܛs=\u%@%y"-mv t ȘcV>-og@aLI śe9v+6;3Iu|G,qZu:R p$x'4Np)R_= S+6QgJ<ڦP|9|Mbc׸ (D$/8im;PJ!/ݝFQXoX1_bTĴ |׳eYw=f{aEq)%-9z^^Ϋkޜ;1T8EͷuP5<9D I9|}c9AݡshX -'W=ImaɭK69R*wo۬Y?纕 F(r1=s5%ր9`s#",uZ]{W]oZQ(zUBKNч,w~=oߖWFZ̥x R~˷z$&{ 6L':q4dou?%sd[#Zz.\Jﺦ"_tr v{@s v|1%B3_s^̙,D"zXɰ)sb SX%a!Ԭ0)+[EHa8&8y"[ {׽KYq*[Y^8mp0T#,^ct#=Ty;|֯5ڳΦz/ 1A ƫ]ya`hGDJQ.Q<0GxJ`aDBzpzK,1KtA_g#!}}s\ܯnv_׳hYրpUb*1)S/DfcD=@~Ԕôpȭ#xOe q~mYFgOgZ_˛NC휷@E[ B~t^s:1u!pL[KYNh9,cVRޖ6%3Fk`ΌCҍ-[,BqÕ RR4x N or: )Q&-ۺ D~㶥ܧZ گG;oqBvCp=G=$凗$!{?:pe?娣~)s8z-1QZ(!j? u)gGΏy-S  901f%սmU, əJz\^oЕ0 Fuk<#9z@1^7f!a˯/^ c?CĈ8 pe6gu*vc@ɴX׺-G; mlL5#NSRq`8K)"kcd3o?eYtsa8{%su޶%{@u@nb`xZ_=glYˆA:?y K>s.}5pkmT4ʷH4fS~p^`иӗon*P@g ,XLЎ~-i[c b!9c`mbfN<?dRB#1souy^9'>$m5֮MGG{N-lk% 3^g}^8J[-g,Fq|y~-Xx 뜈<Ny!ޟE(5ڎ q,9-Ҷo-D~\W֘rG İ @B?Չr>>1AeApW#=J[NDd6:0q6"PX YҒ8ܸؠs5g잢|ZS=c9xfL"B)b8#>[Qr?oo9p>ؖEGJKtI$VM`<&p;+x:9dshgFV8:qH<۷s?>Z[=TaVG50Zּ-IL`&P"\yD712FaAq\rXX0'WY(H8m]S12Q/DN0^<r>d9/F`œ#ŐCQoإ BZ"Yj?!ےLq]g l0&E`r 09 cO%9&H|kb qPw _.R[[YZs[։gC$~\|ihtc):Ǿ,+v$l/$JDYUd4ǭ8x20Șox$fgW8A@yT@icS}B>"Qn_a"BE-P \V|= &z~")΀|vX3t $d/Ͻ\rңr5ulSOgRK,ԉ̡1Xy|8DiIZ۔%zqc+w?_ѣ_mjE"ӜK_ N_qp lSU^c$EL80X!4`x^3.a a]a{#/Jݬwڽ~Kp% ~~$S&s >~/d%Hy<:%_>ER~^@pE%< qkL!bcSpZk:u]GחӾ<`]BF '5)?|NnP{z=#R$N5D1pG3"]C9[c llVi[n D`]}չw>KJ"41t91G=L>=R$) _5ܦ:qy|=j1< Qc/%Rp~ ˿ !Đ8xEawGo$m [)HuL 0Fk#JڻA~fx Q,Ͻ! H?奺*j!p厈]M>;uW,#`@ܚ&ˎXN"Q,׬ 8Y>>cK0$j2||=sL``e)VXќiFi^&0>p8ΙO33i~gK#aI6,轢it\W> ~Kѯzxr.~hwOQqו8D g8%,Lr׀RJ{/ /p p۵oQ1^ bT~Z;"2[9Iv#%/zVǁ֯=o@# l9oiN fx'5[e?o?m+x9x|$"ψ i97$r@ {ABDZIN1s=z{Ef2eq㪵"nZ}2%"1^^gf/GDZ^^?WZJ=Md=zL~;f$fzZQr啗9Ww${T)bke5j2zxZ˶D#b HTvBuĂ,0fLµ3؞5m<35 "RbWH9((یT҇x/j$k4Y0X{m$Tn'o /OGj G=jj`cz;F _O9Q[Q&X_UrMHsD$8t>*ѤƧ H7Qk-.{ZqRGkk.*i,ѥln[VPȼ9]PKe:_΍]3{.6~v#jEAJ"-pEFȳ"Թ&THlkb櫔Fp#5D2m7K- *(FE7wil[?5]Z{tcfFSQ^6_ &1bWޟyzk=UkGW]l>Xt0)Z?2Vg 3nD'73"w›]@CT%ׇDǹRi JV&=~^U50;{oM;Q+@m[H}vZbߊN,}NB1@—I0m¢Ĵ# ܂Uhcgsݶu_OQCr(JX  Y Hfw1%.$뺇B2!8Aq;%J,^0Jx#q!D|lb,k rRv12Wn}9"DP.eT1;!l c.,c8H"@EћϠ$ _kJϔs\`RO,l,3+~c%z&"+x\A95s@TMOi9v_&-!7O`Aפ䀠v߯^\a!-H$1ĠYj9l5Xc\#e2r_J5UaU $0g$K&."HΑp]?V՚m'ĸ>bv4)YQ4 #6A|:D@uy BqDH1qq9gD,o{J$4SAXGoVB=_:O'8ϼO5( _y8Q^(jNLQ'L 61F#|q g,U03jZʹ[m@f{qTq35~[" u*"n^A& V\Ew_̺Eﭓsj%/V zb*$o=( Fq+U lꂟԛCvst3GEo_@'d ]3zLE ڸҖ?~?J17H]>9{A VVX#*U\Qώ,HO DZ{GA9W[G@F\Dfn=nBqths"ȼ=F~|">23` _>M2|ɂ90XZ,ߋzS??{u\k$V#iC#zkc+B>yǂBm 1G+U7 L3(E([CD/DJ,>ҷ1\s\5݋V Ǹ=njrvU ~.m9Oеgo1%Ytl}!&K~3[9f5s9&>|9Vg9s`Y#}U}jAyDZk (݉ ƀ6}A}՚ji}Xt zY}N,_ ]8',`.f<} Y1o?"O2 )H>&D ;ȴqܽOH H~mV_VzݰI1tv| wm͞zsVvĭz#8bDgR 6aߎ]֜=WWOniʆ [%ibF#QuĂ=|:+'!(GrbuUReYf$<VT"[>O8ӳ6f0"/R5Zg2PN_HH u)/2X$DPY/o߾ݭqf"\B  8+?"KE*>z<@>Cp#){Tވ}ZYz *AFP&u}1"P0e$H&.;ccgm܊ͯ _`K ފngWDy@F`ztφinnJ( ["Po#8ݜyxnPў3FQKL_}Ѧ1Ή>y(feLV&(beW,(́D_9N\o-D,-?'T盢^i!Wo>HН|E" FB> U-"C,AHnל9֊5WdrVzUnj[}zjv*"[-LA =e+e_Lc=]v֖*,LHEU6ĮT3b @)B]M)X$lsoc&̯ϤZ8'n;̵TYkfR# Ne(>Ϊ qf:c9<nJ9QufV<( 3=)tA, GDmP74lW_bTVv4MvYcn"ِq˽i .Q9A^lWCC:W1=$r b^cAq]u}=]׍Z#rO6Y#$XYLLϯ4zxsnq)lbeMGM 'v96NIpA60F?ya"P$*ĤF)h^7}.aOev!OA͑yZW h{}z0C^|@E_? m\| =>/DLf;{ZݫJ`fk LBIX7Υ%gݞOC`[Q٥*Eu `JN"ŌdcX;D3Sc~~%$mLZP"pR.}6 4sbZyq]JfHYjY3~9 e`P.&#5䌶o[I7x3 ȫ5g7=x1êTgWZ}[o1@!sA\69=JEQKIUpFIǗg4ʤm[ r7Pt/=h·D5^Yg>=tO 0 O/s+SҒH`#Y%*v[N550)KnM_MGSneK&nQz;ٲe>캰-kCg-iuz 1:Pծts6}LQ1s eobZv[-.XEpwD1hD^ע:Hɥ 6S1R!oS-ymK*JZtlIzJ2KT@U8$qr㘕z/*x_u]&kocBr)]eBbW7}Rc|T`OKPpcZZ_Oo["/:jWYM%ěq  tt ذ˲%^˲NXPH?_^q -x'vy-)E2s>0)-kkVơC((s jM&,$:O4"ے2,:eHZ7T֭ ٵ]@??!0 :|A4EA"$q<˽,1Yk&1Exr% .VԜ;FZ '1Ͽ.of ȏ|ٖ<&>z1<[m ~ʯyx]_Ja%<꽿zmTZeغ-19>a bK~ŧWcȣWJep50ײ1xxm/G%dhb*SArNdz-l=fΐ 6FSccYpɎ0ƅ4DeasttnK/9^aS.!tbnk (閈QL6[! bJJh.dǠ~*PH1^ՓG]&ʶl~vwdѡlKcm<G9~&Y#QyK*r `Ԏӕlq~ߪ[%ң>uY<ɷ{/iyIU3,QuMbR]gvY*<͵pBj͆N]c1 Уn[ cє>9 {*b$إabbD )>sQwsON fd`Lh8Sfj5[8A",ngkܣw9[8P_6"@| -mEk A͟i.WOt@BKr6|Й "3Xc:}[ʺ$@!fXCFKYw 0ӯ>N3.$LkfF&)Ht>Laӧeۼ;}k ]x?~S [ Q!c "a!HLoo힆$SɂcXrRkn9+kX51'vwYH8~@?Zg1,KZ2>jI9?C TtD#ЙQcAHXr1% OL kbaZ(٢7b$m z rH§AM qgb3&@4q T82KA@,L 8SS1/~RW\n||#r[}!/BBYlE2jEί=2 G0 $, s*n(Fd!ڑBq2EQ,$;-iڥʼnkf!ͫI3.8Lyǂ8U^&8 gr @\-dt3*\/< |H9U&bRB8^o?0eRyhjKhB\[/+.BSE3Ѿ?%R) O}q_^[bL$q/F֍PXV@`͏o) 15&U60S0Ѭ뷜?R8G%R' 4Dfp:Grʐlm^ Upp <0X>9f]e!bD) ҈n>^+iKӊC$]YrϗӺ8n$\c3vS8Z3 $cѧN@\By3IaŒ`G{vձ!£+)ɐA_R2EL54؂GG:=Nᾤ _ўuȴl 6 hF&add!ڕ7tm|>)`Rp=Kzka90ډs ]E@Q楱죛D9T(HBD,HD ~4OA}k)X&Dn헯[e9l)m9AViR.e[^cFNr `Œ ,9bֹ3_nk,)nVo%O {l_^ awEnrP2\s{V[>m/[˂ L#ۊH%{ 0P hi?V~+kZFIP9`@ Z8`̷|K$|E XHK[:!DVQ/xLQ<3?ck36v+KDČnd:Nm%ō蔓Ɵvr_9"v0+1{ 2xDl_~u]KoyS<4ac)\NaWVbAIoK@F8G%q|$!Y {rR,#>/}~ZKeZػIwAC|%y`:zCNAy> QܴplCD_0zbI%ct]cbF p *0NhKK6{CbWIۺRB(6zZORFAL Jvc<K\xi, 8̤G$G^smx10"ߗQr|+y/wSIӓ RXŐds?$hbsBeٮˆoc󰀿DQ5Doϙ 9ܐj}9Z.CdW62PXJN1W㾕mqbBUT)H'{yy`c^~L&ND, (9f~BƔ}K~;~ NHBƎfӶV#`dDL{;^zI 7 ,'M$]ɻ{}{>)Z}||cDvAe6pV 8s$/Df )h˶=[mH)./ٯH ibkDFb"]m@rz#)sL&@W1}{7gxVA{oU ]JJM!R)LM5Pk/9L${ӎGcbf|3_ǧ*IјShL!˶\]Fdvckic̏w|~1__t>#}uF ]V:~noy'H4OS{l]ױŀq- WZBb.xZ\C">Ύ~/ RҪ--77i$wuc8%EYnxg_ez$w$R7!%.9ںָؽ\[ *=`Te)1䣝8e7{=@yɷ]PB %`]g$H0uIf!ಐc4SobJj]Lc))BK10;iq"󋳣Y? joK$Pso) 0sz3L]cWMEPD#{ܗV5P|Fll%֐9Ƙ!ֵ]~Ͼ`! YU <[UԠvg;Ob A{JSS It/+r€SsN sFVux8=;|L$z׭~^OEc[L֥ Ú~Z) #YrFFȤgE *Oh_0f6gA-5EjogH6w0B+ӺPeY/RO N0nk)> o u"1TPo:j 0Az_Eѧ2. X8n>o1kbryǘ_5ϕ}򺺴ےL` {)\r72>G'U "LHAc*̅E 1Pt(Rb|]{r52I59fQH ECj]9:،_W-cɂ!(@@SƘA"I&v [*RjcN ]!_8{ p_o<w#.WKF]aVqYbJ0޿%nEB i>{T&r&.IOo? Rpa/-80ÈY'HAp q69aS5[0}>n)b&e_ <^9@ )1r~3T>ţB601iCLDWa(t3CȑOUҺmDy)&ؗwÒ= g*4ʖ9lb[(:J݌$.(kya[r"_\Y|F*߆<%Z.ԮĄ W{]E4k"U-X)/Jت^_׍Q ɤ9+"$ mI%~/ "[Z}pqb 6J8[u) l* 1?dlZ-؛3m>)-!Xcv4eYKm!#h M$-trZS1Q]P#ŴR‹k0 E#vk7%(+%"$z7OfAw|z9ЃY+mȲBsWRr4 um)>ND, PǷONi9xr)djQyg=W? 콶k BИ>pIJ{ +w`f| u( m̒DK:# 66,Gǘ2?:@ {' '*l1]hLçICG#Q2b&~ R@@t#*f;hM4OcO4èxqǹ Uln@vKNyj*p[KR .!ۚʆLM!,7g1~k@D OJ~]25Kz/BcZ/XhYe(Q ̹m.2s3'cYCb$J8\L⼜h3`vI1`yֳy0YEsa cdUхYhf ˩/c(A6?Do \ԳɁ t8elt:xYV:q)RJfb.Rv[?5 rdZ6_5D1>T%)rABEêoUI {xn)׳1 |NdPFDtsAo6q5YDhebnL)n^=GCjJ_T sW/"vnsT-fh"Ax@RW$E0:tl{ɂ>ǐ:yG?Cl?N 9;-f^{fA! N $eMH( 1DxNaQj=rZb%3rThPؚE"ZS]퍣c +Bb լ{{g?A;p)H r@{'0SF[F 0uk9mo#ts:ڞIJA'gEo<%0N1e7LJڐX.j3v0 ]( tKo`7PRMn15=O `VQ)uC)~ZRe:G+WGyp[n>m.\(SB\543`\c7 7A×BN-'#|1}4HI2e44ZX:t rXUQ]0( vG[J>}ԅhಯ1cyԎP, ݖ{)m`\3ez[)0G s aYiFRiN#.k1qSn FZ@--`1{ :%j":Q2Bvip ֲ*R6nݴHjhySUg:(aЮ8N K?[J9vr9c*6m4Aa-x>6bvS&2/c^>}~HFqrD@chqW߿<;c>._$X2;ڝ)b1d \r;{[wP@ Р]š_(X\&h2K5r*@+m%8!~AtqRd6Bl},tl~' %V t`%RYn8rzAsֽ$yr1u[=BZ'^]qNodSܜ @0jDl![ESZ: ?䉠+_Dݗҁ+ 0͐4&AĢf@q8=g"wc:S3ȄЂc>B(9qP.Kȝ@@P_`nmxlM?֌rz#1j1"G vQIabr P(ST~O`풆2_8l2#p䂡4Su+%bh*H n`Z2CGתl_ys\fFya.P !Dp¶ٲqr8ȗb<*NW^zu)CfLo/58R:ԓ#0 S!v8vLuNQLO51B:Ou~adUM֠w1}t=۩g_A +Y/B*!<霑y l71m`"3МCqɳo1a=c?VT]=V̸KTu{7r~LDj c3 xi2xg|iL^Lİl2(Rv%&O %Y}b@vݱaDȮxR|Yp-vz+yѳgpl6d0hR,Bl*sWzl;aDe8XS5r^ 3*#ۘ'`It8`6T캘9وu"XCIڏ473q:^ )=?xNbp}{`ʼI<"}ʩ-H?+e51uk)(})B7cE`_({  N0X@#9ڦB^61&P*w}ocV@f5-fHwf& B:1EWrs@L4r{y|mfJ|pm&Yں=U D@—~,_Īʼ_N}ek)&✑СWv쳶 FKmY([WJ3ǷzF~\"P4pVWtRLcdiqsRcN &-d*[L?nٻ`G "A3D,#NڍPU=9[2A28v;PΖ^༪+UaSQ #`lLQR6CARsZ;f~0p(b#60f\)^ZBK N7gv|%@Cz@KZEq{ jj˓ڜV)z-{8+x83Ĝ)ߖKʨ5yP_ZO%bD$zsz,*4Ӳnz~֏:/a)%$߻"ƕ |,U좌uCV *{c RPmF%s  H`!6N,rLWMMWf .*bLZ˸ ~sN :R'Y0aqwG;=cac=SA+U1:GuRlvsLac8&/-N484cK61 έJ@MJ~Rڞ!R;UtX݉?7C`Cz&cNʛRr5:Gm9v[Ǚc^"DTѥ30ĀNfz9MKq xm&̶åCxFC .[w&{ls~7f)0L 0ΧgD1IK n)N(eDy*nT;CS8K$E贺Pf$ ŤQ<ᩍ#uN%]CnWT(9{@6&b?ןd쭵b%٭4sD$[r!L-83ki)s'nF8)"qpi5ƽrB[ZCq@F.m۶jsw"3kjk)?x9<&/T[g"o똩%169s PX| HhQ_m@e]A_oe&f*.ڥtKcZ99$`5\ i0bB=gHI$IƁ8}dKs]!tN?;|; AkNLlzc؀zg= MU3hF']+͸G>ĆUG{P8D V,z-%go`AZ>v9j4tQ=ʚb2՛_A@+)&I@"f8S@2G676wo(]M4 &nI!~'XԥZZc9K.XckgƩ 'nR ;:, VrAݜ$v-mx+|ϔP^bXcVhǗ?["#_"^b>9ܻŭ̉K,\^J.@̬$seK]ρ  W鏮8sdtmY Mq\i8"²n+ͥٻz JH qn7212zcd%d08Q@R+e Өd LԴnEErqJ׈Ѻ$/h&u<s,@Ffw{o)Q*~c!\ 1(pI4r쇵\@E&S!B 13_b.Fv G Qo1ĵ]~M8\j\chm'd+)ҜaD !Flv̽̀ r|i61giYNcȌhBgi  <S w Q1~̯fWH-- %Lޓ6 v UJڧjk9c߽gs;OIS<;& ai[R솁BJ{Ӭ M!q24D/W|>̞GV0fL r<%@Q%xѲu7evkj9p]7*R0ѿQl lVDYh~T1GM4YeYStu F_o$| Fۯ*@~Ң׷,y-,[b8,%h 8REv9 mBLt+7_@Bſ%80bEs@>"~wf_=g3wr촒sIP[S̖짞ݍydJB߅ʰX[]PԂWzO;kn/ ~@ =) BX RcUQȗyI=|"<I1Z,Y{+2р{OZRa |>o&*1bfS؄^z8[еz] !n,2v0|FlG/.ZUTœn$!c;MV;t;DNhjϪ }DDLbrrEtIpڛ$v~u: fOdn>\] P  ˺ ! j1 [d\S$)K2~Mjks+\6ҩx#Lj"`"12`,^!U@42՟-V}Nf^O1Dyl1QK`" ײ( dvSA/% ^ zs"_fsЎyq|T  E! >RJXC<Vb/ : z@0:>0!AJٶQ'`*o9&6%D1,2[}_-ExQwDm @ /ι`sCz}#fXs`H0ZQa 48p\{!Η V]{p]+CӒa] 9fž1M5@ x .`F6e(0!L rBh]%tǩ u ŀ\b9[֜\Q'C9'tZrpO^ R@8ݛG9aZH JDtqx>a6 g j/jug'QLJP$m5[bLks.~hɖW3kX˶k^ 11:t]ip6O!f+ ٩!~d|.s s +  N'KqQ@rw~燀sS! x6k|1"m,B*Ngu"zcԩ2m:(\Tni^BL3AF7BH6O,ELjʄ>!BP]␄KGO pM/U6/ ,:݃h̀H[Dz7=E--CpUZuߎ9()oq3o-c|}dvt+*ZrFHc01,KLJÒtG?B@s-2KB_&0K9R/_ 3G0r. J15P,@Kz}OFrvϳFHo?h%۶ wY1 "Q$u~<}{>zdǗk.^J10mG6@#s@ ">4 *,W 43½CH8'~o{0 u)c2E29ǫ~qqeI'sxq9R5({ߎ}1e[Zg+h2eifoyMi9\ NOYŵw(9.ٷ^a6hM89}<#^ \M]8sfu6uMr;'[q}MuyY[w$uz#ْL"^rѺbZv[ UM%vaVb HWQhW[U -@r|Kho󪥤D!1&Bu{>s{(Xp6b:I25%̆+k0 Lf3}’cnBz $>fSgA}<*Bpf|p/kXR ĤMcLݗ<ۀn%q= 8F8Ք^5fL e*یׇqGZ'J=l G^MYz1K1'*ؿg9O>[x"a0qQ'" D1KDF["aiE&-} )$.JFi]Ӳ* Q @Ze?l5v nߟ+X0R rںKhӻ~D~vGMb0P朆x|ݶ9Q{#@..3Dщ#^!lf1 ac$8ܫ{d bqI*e] Cǽ,\aQl!J~` A+ۺEs{lk9:2IJKdR$h0Va3DŽCu%Jx׫64=a8z m~|@G(/b䇗`6i%&?g!Ĉ s/DN}W8"b@F!,D - fkbJF[#d?y$F[gδFXBKp;ɝme2힏?2gULKaZUusf-ORJ-JXbPZ#;QEps{ú`$RB,$ӥGI P__$ĖvEnzSُ~ח= SZ3CGk}no￱V${(E uk0_rޑ$Zz/R *t.^);^kkSK.Z$k<s1v5 >]S mC/sKHZ[Q-/ <)aLYgp^cJ9;s^e 'rS5N?.#CCiއ9`q6t6U%Ġ6įT 'vܕh@٥3)6r̵ur_H@k9%.[JaUl9*T)ȢrKt>B ȉ!Y6e͜T=>s^ԀWHdb.ru_ZS- >MJRTkR6"֏%/)@fZ՗ȦLSIѴ`@8& naC'[Z ޲st$#h14KPՄJ rzD "Y+>7Pa-XHUa4O!{)IŘTB*} eœa#:U=[;ɯ-nsnڅ# p{84dݘ@J ۼyt-@eE(O#f" dh{"|{ѪĤ.|m~VL!`%y\)BaoRh0H"aExʲ8V_huG\q[FBF QׯSSԎ3DE1Jn2g%-,33"qia@h*^{̉3#Yvy<*& Gme[^BdcQ ! *R%m׎0 'LnJq\[y݃ Cx@w8'fz+ypŋbCӵ$l Cf;[}߶B1u9Xr&}8|cB+\`7QQ/pzM/}hO&0}!!h |}G;񷵎h!om .1>n9>e 1#ziWLx9cΙˣO F[EL sSFxYR Ҡ whzu)| %Z0`\rJ 6+ ay}md!U^^M 7kz4hLPU  yQP>!pUi8m'⊺ނ٪ mJ!}i ʲ1åWK/? *tM)~;OW@M#9G6.&z,`3T[pZ!k)r'◒n5,fRp΄fVq sq m0u4lS5O#T5j`NH{jmMbT1Œ: MBb5`ZC@p&(N0OW"Ȉaz%^*dxsg昄Jv N, èѠR "揯i E#oosLp4f]Nxʜk Ome+U죞%E􏕛. uuMqF@%gI8yZ`#(VNgckYN*}jpMmhR&jprFCLApSlX&43ǗՙD:UIW@c^r^3-mk]ELcG&1m8Myz2_ ?Ha"܉*ߞ}YRUD$@}5ĥg%B?e<<@~9t9 QmzUBXԃ~+ q(.+ ڶ9չG{x==l{Y[zYρ.f8O%e)q A7gcp!ч %RĄ.IzC%(u?H[-OE_@aI:4k:b1rjuY!ѽR fhK6$+܄4&ook =k yЍՙ# HB328MfRxVD'D^ 4R51%{)n^aJ[Ѕ 8 Ny2!@83!&V#c{UDI=XWr, g%[|mJ NY:m½*rHq~|~ncRY s1oHf*|OAQƧH'*Q:-IDD6E_RnEWd )uNЇ61ιJ/̟Gy_ TP6襰 @#o~HGY,}Rdoō.:?DPÖ蜬eY"5rE)8l!pM3C&2%)2tn徦AY0X@3 G='n%ݲvkQQj )hⴁUuS*S'A=[T_n6C'&Dr:LY˭|,WQǛO~;0,4灘Ӳˍ{=ovw3:y%as}xt*x&e #<=<'gb0,v¶?(ȹWn {NfTZH2qxƌ dJSUeK[ XSA϶KCB,{S8)`z=2En! yI<;I~ s`rOgN=twI?yad`c)\X:8KzY))*-P *7&l  )BIƉ+PcsfLfR-nN^Bc”j ݈ҬOi)Zcz8|!2FL[ 2TFk`G|ƒT1Za CR <.W͕RխÃM69]+Lz?(%qwܸ6M? 8YP2MF:iWA)BdCzgd鄺?= *C~Zvΐipcן?‹sL͡iQSilıE cZ~ܷm! as2Rc( [a+?ʜ%1ka uiT.;I%6%&{qS3^o!˺D͎>GHXs(Fu u ]h!@sŠ `If],)!rfb-߈a7粗,stFN)N3+~-*Djt mliu#!&6Σ7CAUhυ4q! Q3 @,UΏs+jdfꪢM0X8v[F3G~|S@gJD$tE.~:Fw#Eo>ڄD1ܵCK#5ЫRHHvۖCS姌DZ Z9 Xo+IRϮrFNa WܵIϭ"\1 m'ÂrxYyD0d1ql^ڡ:::DW%FdFa WG?9J\Y.ja!L&{&ῗA9$5x9lL avwNq-%{gobVjۖ~{[V$ƀAonڷ }lVH!=\Sz>$_ʹqz +ƒ(GnQ*c*u'vN7ժt4o5z~za[޶JV6TyHQ"B1z!`8.BdS-4LLMWH١$Ksai[νONߞVX]u[-@C&%䜓$!Ҝx a~}L=۫ќ.e^1'S9^}s>kœg~ፏyB #`15a59)ʼnf9x|ZW2ÆK 1!W٧TaS80eն2lRm亟B8O.p UpRn"6`}'5fu h-r)sɱ2[uPJ@|~JZr$gtnkcbhj  { N@P.  Ylc}>%`!4BxT8911\ O!=%#F[N0T{뺰n\c1z!W6) gj?٭ rIgy|VPc*^r9[FzQg_vI!Fn/b@0] .Pt@>qF_q>lZ!=1@^o_PM"ܯ? )NMj f0DD`  -&}YN4 g^rs̀L"HUӔ|ݏyнQ6zK"O1DaB<>=Ǩc6C!Uᬭz[NjCG4 Sd?_E OE!{iuJ0QDNI!|9'"~wq!_F Rݽx1UaMGi _Ҝ11[tDJcijd$hyt;|[BSCp*[!tEJ8zPSKcAM3?7 L3-}sAP&'TP`=$hzIӶXճwg'dTŲM5@H}V0cv㖷N%dAO9S&1lE{?[m.ΫY`t<04#n:s^BӔu" 嶭Jx΁FdS aɥlK\,*֮^8pZ#/56XΣ/Q-7ٌM5M+l1)YHCbS{{?Tth B̗CzmPm} (D/qgC+Q()NO+IaԘt-@ToHg͂Ӭ5yJ=~杳KzI.f=[ HFˎ.zR I_PvLR 14&}n){m/N|`K:@T% 힯)&=7HKL!m1l$s!YKQk9=ȩ̽%s-V}Vi4Cڨ[(U1~;8}r;EC(|K&ZҮ 9O@8-G [yHWԌ/:Oӂ:ۺRros}fF <S-fSBopLs) QB,5|Mwue UR跀7棞5z`$vY$Dsz7lTA$1$%28u*1{(Bɯ2M ROB!d# >w߇xwJT _ӏx_KB/sQ@#f$^<00q)$ЙDdw;N DfWV1XH֟f ְ8/49oAt3ͦ!JП1͙!1*"o1j)`ma3seYKQixUQeMC$S ;i6TneK>PaA P &Ĩ 0LNb2ٚі꽱{kXKP`3Coz(Trg~ڤ5$$!2'D_Q? Ol3`3!3㧀l=5 ۴ Xrb^GTpa +*N=t͹. (W3 -X. x=YiA!bC0RP;(:ݑʹB 4Bk_.3' 9}0S,vux6^z51]߈b*m߫)@V9=_CTަP 8Z=1Fl`02`p) ŔLt*Q[k+DDDV!6[V6Hht!*[1Xxn}?Ŷ H֠/eNfa~`Ip]C@P}`50DH": H\`P)ZѯXЬ!PC&OD8\u8蕕?m 7]B1U@2s`/h#Ċ }>r,Rq29IM)FGT:h11Dævjh[*yraC:Y`Lf@ݿt p1C fWS?̅h8E"wBq ,e)dH4 X9yabG 5Ä ;BYIB$f6mZP.) PH8t`h2Sy(]ϩBp٩xzHu -]f}Y !톰r . pQK3ҭy}aVl`27hԵ"a0gl3vyAs!8tݛNbu˧pӫFm.aciBi 1c0^U3yN'@ \FX<$Bjrq7lsuW4'5Ve,X#jdH LJ{/16A . gitBǁ^ن榓9Q"/[h&q@`sDf^(NL lK ZBJmM&3:Խq̄*t1o?dzV92ʸ&}4,e]o6|U,<"ʛ[>+_FX\=obZAB䑣 ū[`, rD^RVd1Ŝ p*I?`2; % 0/ꬁD +F %:YFg/FDlOl@.,PLhe7S 2hFbO8I\EYhl|D0m+Y '(A]~6=Z#Y1!h[ءE/HX[K)\c._>szIјi-BEzcy?u)A]ERygq]ECkmg.i&_&]^g9.tlfWSA,^(8 PȕpvK}fJarfqxQSeТ©KqxyAB6.l 8'`[^ҩ!Bf ڎ%^=e]1j*)Ǘ`ƙk:bWtl`KɈHatvݴu_W?-qsȂα^r{).(~u0}%b#s95}{ٻBlmV՟%O`mtwji?U_~) `kAxasPxؤ+aas.HEyS ܘsF0c؅J:J0կeBZ.lN (@]|\,uC}$3<_.h%9X.DN cxAP&^1kvB}hȹ&՛w|ۖoZg?SQ3}MeO/"!`ՍqSTtz͋պ||G;pi%.ge^+rQAIQP:TtW^٥mysbj9)旎OmK20Aa)~\$P5z" 폾=NGM95œDh&-F\8ͅX~VfkWes4g9U [Z"Y瀜ne *Tx ޞqXfn~e)Kh]oy7b @p&:`w DrɆcm5J}^?->2fMFڛ<[`k/=5`hw[r|{~_BbIOn{mQL)ǜJ!q>Zݒ_?ؼ-7J߅0 vy$M Pz)ȕV?ل3c0 0=yIz44ň%lƵǻt >Z~gn ڽPF qa!| O_(Ŧ.-Ky,v{{kډpl)"k\ʗgiyH?nJ7}7/ݽ^q <{U:cěa릂/y<.(֝PUZJ&E]cbq…'fD~i\ 3 p4(ZPGR3'3h j-a0Znl|K9be"%@UYX-!\qK^R }8˶d,&۶ W3Dr~}BM,X _VC~ިĬ~=D!z6Nt=|K[)K4TcL]'So~A%LvDcXq!"F9_e]6_S$D[9tN~N}rox(&;ɠ~n> r8nFh _s&pg Rh+q|gM#_|x AL;Bk2',_[d*&x08BBm(zv4@DY'.̥N?~v_EUVC\K`}aӾ>;rȳJ-2p;Ӡ هK(YN1l[{$/~fֱ?'9U`ICyHo-mܷVtΖ.kqW+R|J=Dk|y {1``aZkD\mIW&E,a2Įy7f0Z(am LgЮPJ)\PxĀ0͇~5݇!)Sdq eIq@|w<R۟G7w0̌ZKZ+JZtϘҧmEH%aֽ=h"!Gyz&z)9gW\eO|2RB<[;41aF׏vI=#~X\3_f[yM;)^vǒ^^o[Do?~÷WooT'!o%Ru,n/[ǒÚ \Bs˶rk}جi#\ڬZcRRo-:Y# {e?z%c*U-8Q{ 6gc^^@і..۽"<gXgcKZ6/ِr~GNeۆɣK.tÔ/a?O82)n"2Kz)N읳Xtx/j&k0^'~zXS`-_e0z}x|9okԜ7so0>o DĴp=ۜ ȅ|ܺZgmrXJ6Q+k/n./bCP!b˙|~Tf0Z>r[DAyh,"ü >0n- cՒ>Nthֿ1͑#N%~}6fR}uȨ֩RD>z4y%ט 5mEL:7)5a*JKWgosl:#z6[)3oRNi!l* ^ѰAjq ˲ӧosK1sHt$ B:": *f}[h %zԫ㧛d6x,K)Yo/f'$8pG)!᜼0ɉ&ytfs"jaKzEP?$0S=3~+q/4Z|<}ۛ |X֟>}Yg<>KG=-@^DZG^ٷmÁmsо~"-Y11Էt>^oyhG@j=3Ewҍ9Ue5)8KZkokY~6|| ǔR.1?IS2}( H{*>:y]coS׫jIHb벎S g~YL4Lιb |og۳*Xdb:h պQX5Dq̉3;T/h2Z"/RH;?!)-R? "{۰2{x02i:b0m\[}cJ5!}| rgS*s("zc1 -p>Ѽޞv&MWfO|WF7GRD1h.ZśEcRqϷ!Wb%pGxŏCקߒ$-RhqeN!ij-J<\]oMnn:|3b: D&mK9&|60S^vxMg:!ǫo."y )L8!Cbjfey?oeKVgCq6~}gtuBt%Dx8)8ԡ|ܝ㼭y zǺ*;%a`bs.rc0R`Ry/齝ݾ3vIL`)l wpCo6}Qѽ&^s"hBLCw#fN⏏8}[z:k Key\z9jؽ^B_A9۳5Uब FpciSFS嶐4|KL )Eގ}9& `jǥ콝?)[bU}>Hh&<5dzQqDwaH;>Kq*]^8grY!4 8{M1ٔӌڟaRtxt Ɛ{к&DC9cW//i]gʳi1;{NE3#Z`S8㹧^Ϗ5u^V ZSt.nHg=g^'I/!ׅ ћ{"70G  cN7F騘b_a}}B` ϧ~^qP\a0o!„>Qk? zó^esbYoxZ^o/py>V /m|N)Stսak7B\A2G-?Cg)P@.Q4Kɋ@i!H@8m[g$Vo~z3Zʖ”hF(A!O,ҷe!JwE%.5׿}N+g2 ,5[MZ1n{^Sƨ>Ô9>m3T82~UZ^dTv_~=Ǿ=N@VT5V`ͷx{8Cu y[ps&1gT}Y"6^mj.uJ6ɗU|{ ٞ\BpXv#N}7]sN"j# j"I(l+nZdkb"K5"X-۴ ?h+";sWϝ#iPWjPmض^1 :TK6Xj{V Tv{poJHɂ-TEc[_7:T2iIF ,L)Ll,dSTP`i!RҏZCBU:+IިH LIAm6:-mZ &-L$ SywOݦwu4R#=k9/9jґ =\{#ڰg|w4a4DOGcEJ,,#)J|IjzF2rI鎇l?ϲ/Xܠ(jqܒ]5r͢FjTa𭳻YKgmJZGAұ}?a H f\9PU#V1H|6P[>b|@tc--X5|ƑAd@A|""X iDBKHjm5t 4I-Tͪ͘LT*]^3)ɳPDK>it~Kq=:S`JɪZAn 2P 5:Zsln|)I^zzTL5e]$-O'IIvR}>x>YTcmF9Wl=Zu%hq+Uc(*eb㝢c5m#trZFThaVِɖ<[)KҬy6PdQƨRBT]/(v(m$j;2UL;i+nK9\n3? >()JKb[XDdgzI63ۋz$Ҝѐ&w;HvPP:;gN% $j*Z%ghI-ɶM޿9RK].^UYH[BO{>J`o;Bv.A?qdƒٚJv=9cRv}*񩿶j1k\ n=pTme#v>zɏfck^&C.?)̰G#3u4eaDT|kAy?hLSlcpۤ`+d }!eM[!P ?X>p$dSQm'zt}Emk&]eyci[6)l8&OhK #RH؂tQfi-A2.=cB)Ix3U Hi!M*߅+!, x4Q6ßSƐ#T(r3UVJ;).Ӫ$`Ky477{B H}zsܧTuMi>O3TiP,"Ҡ4ɶ%ZIQhe|7I`S!6c @WGjJڳTN48o85$f,*@'Bg2.6)M6M=1-]I>Vu;ض%Z9pI㲞i*[ŕlz(#d;D*h9!"dq!?ny)2QqjhiIpbJ-7@Z5 l`>9Qa194BX5f7 vב:gƛm cͤMhADHB,Yd{B/IP3G"QUp;tὕIRHvJZD+dc1Z|wU}ZEe4(nbt>E *"#l-˼jw%Rh/6RnvV&T9M"}hFئCߦl[ Iʃn.JTX#iC+J-q_RKPj-I2MnvIO󱙺Xr+*tW * +j4-$o"JV(iW#5jS ހJFmH *1P#h.]Xeif7RMj${*~T@ y;{rzI"i ꨮ@chPmZգ>|sg] +˸\%??I7x,Q~F,ͯǾ3ЊXgf<2̇|BڪxnE_U\ʴ%{/I WCU{6#>: VH<^5}I"59W]JȒ?j>_⠦vxsEHx0K\M^uA5)NYJcVsKe!Rz %O 6*mVۮl-6g<kVP{!>dƚл٘E gg|:fmKjK JWD"kE *Iű]moԢꖿhH =ֺ*5=2<~NPϿ4p۹I~:ԮGcȺ+FtC&"~}$YeX>[eyvņ kއ3@`SiU5R"2Ќj}vuԈh%[$P2әE##ٝRRVT3 ewqR(4Ys$ TLSˣB4)F}zsmAlVt)G*IDBT1Rܭoju3Z4GH+;q5I۹ V&[6)Pm@TT-%n,fvQll7OhnD-B|Hr|#!vcFzIfoHͽϮgA:Hl'q bQރv7 -Yo5K<*H_]{$4V ֩vfjLLZNn j(ERM3>=F ,\Cg3ҔC J#PmxfQY"^y AЍмXjЫL amϜFǞi\0ĩ{6[E\4*}AF6{w#Ho %=rʿ/Zz!/!(SYvo{pK\Fśix_ZEIoFuLpFa $  $lܛZeh$ϧRfK7mmOd i$̲}3׻JF?4ݙmM%JJ+ɒBbdUZ"9:y|@mRmS_B@'zLD(- oR*Z%"dQ'C( ASЙ}J'=$)R~=68}ڈ?@H/MIm^ [Ism]OmGBȳ {nBl҂$oEHF|7Iʽۿb[zDW 6o 7 /y:4y\v4&W$Rt.jose!@i{er|(B"}ipEEg;fU۞ؒ% R L+R`ӷ` HHDKWmQe4Mhc-Tde e9DN0:tCh?o4M/@,/CZ#w"ed^I`JȞO.{ҭ9>-, HFĨ5 .#H$dZAK&݇l2RD%e9TBWcd-oj7(,Eae " \j _>^;I}پKnEO\ 2m6sQ*l !4_r)M$B f$7! JΪt#)G?Y*D:˟&<-J g*6yUg拽`[/{4>WOu cW'%vVSJBWˉ#U`2:T >6hw;8G*e=_ra:< NG'RzH_mюX{oSf̷@OI&qdI#Qn:SϿґ n.>W|J'-DJ:P_Vx[\;hZl$ۆ"Ъ*(%Dt*D[hiX=_olv "W?HҩKpv$\ᢦIZE*m|ݻ^[tЁ)ӽ?Av\%(JJ%4[Wk}7hvl#7eOT$6HևԴH`IoʃDQ [@"Z_)z!))lonJ!*/iVx}<Y绲$͉ ;{ϗ>nі0ףdUҐNV3J J]C\> Vm:$jh@l[Q>a\zn3dEii 8-#C%A$fyB GKJ/І\gPW ZgyZ$"M=CZmgOdͰZjTe6_ڮڮ2$3t-YUY{Kl@~;C4~] {*XJd:fndƯFl4lC~(_X=ޥN}ڷ? E^3]`Ez3g%svAPpu{DXPrVZfi]J;sP\M$Qݴ&::Tx*LD^)}?@qMqAߕ/5+V_咐-=H7׀A00f3p ?R4sL<8 /Wi@{W1t":Ҳ`H:T^)v4MPE&gpyz㫠-5"xV(o m)d!tQdC"e=B5]y/:t"h ˇQGl}VUR Dl#^Sp𼬇]V}h"FsΏ;6F{CPa6e5W|:#|@Cig=^:3qO #թسCR'g¿>[v Xk 9:¦8(n5iN&-8Qm<=E+LM~G}煩?9 >z9TiZ^S'T#VBa˰gyG}@2XfLz9IpbC^`o(ų98]T'$N$YF:ϫU3]s]bXjs.-O.s$ҮӅR-%WRM p;W'Fcøutl[XYn FB>$C1fK ivſE3k#Њ AQov ^c1r[y87M~~qN@;`O 7EkRpl&'}<5q sLŮ@_W.nVN9lH8 ]Gm| !lw(0)r󙪙3 7Ed=WFR;иa0 Qwp`< ڶ*~afDCԝWVg7ӛH Q{2XgFf\<ץ7bg2xkA T]\ߖMG설<H @ -|XϞVL#,pO\A/}ϻ*dvT=?Z\ro_c.ht߉P T114fY$~b1דױW ~št77wٵw=ll2iY2vYg@5@(NsIZ-ɥ_^l\a=h+J 5 :#nM8ׁ }~t*tHzFX,Daq脊,J;Rq(-X"C=t+f ऩzjs/;n nXWMy*9U X3>}=eZ32~DvDf[5JJzfaXŻ C׆?̶2hl&# FL0{YR1Q%J 18CjVk'WRfoiGY/#)2ˤq6;\;' x]iOȓ==远kHu6 ^uApB$hÝX XɢzgAS\&{y8gNwtY_?;w Ɯs/o4&Ӹ"O6yFݹ-ߡ+;d79@:1Ek5ßG/J᭐hZ~H!칟fŔW#AS!?SQ g[K uyL[ dNEHmqK[C{6\]j=+X5U{kt 8 ^u$ p'626ʞrS)ۭ"I(~=uP \7f7-bRˮ"VVChb>ؑ+6'={U/kę;ec321QjtGgV*!]ܗ y)isu\PpoKNf5>Х9aB_ T#`+wn;_Q.va?ʥA35-;К ,b}vf+׆{z6%w?ǐt 8K<}?3]E^YSyCό׭Ϗwr'&j~:+[o\ٿZ]LW9İ;ؽ%~h1:]du~'o,@řQ/ ̊wģ8j=Fwhxrcae VbP6Tjazˉu~fsئR~P<91L im"ZkNe24Q,U9|Fq7ΰNu}y@&uw1Mt6p4!wIs  vX)|AoFcKą/wAKw΢Yϩ{n-=OHۀV/VDRHS/NOMTɹfIc&"?s{_zD|?w3et~y.8uudE|Å&ڝt[HֈLЀҳ3>*x]v0\` @2'!54,s>ȠT;9ٽvgO%)|ivSB^U@_~7T9cg6ؚvfkN.dT^ht\q{,YXlRN* ZbTjc.׸E|qêrv![y h{ \X1Ib""@2M⒠[ wGWLeEPxbyzRlۚeV+sB`ehl{ϔ7 -8_ 16Xqr~oLkV6 m2g,v |Z-R;yV^)l7}=ꀍ4o΢A>Ed$hEo;s [:mv# M*p&XUT4%6*9 3n7s3Zp+]$Ra05 F|b="$pˋ LRU7R%w߬£.jR]DzTbP >#$[9 *,O7%ϗaN^ꂳlؽCpU,* p/e?@$qATs1{蝮pSFD!/R*I 8#4p5t_}\5%(MHL9*&ۮlH{'+tog2GZ%<>NflET3jI@Su 4$c6i83kni_0m/悥qsK1hPZ>g _+i)%q`!D|}ckg6Z[OhNjWYMB4DNOi^c{_ɾmB툱8tTCuۤrsGrϫ+&1*#߿S3@tiKF\9G93Bo/փ ڜB#i:E|I$ `9exac!gvgPlf:8:眒\!خꌚY+@Q2#@6Gpr@/ >whqN<വic]p#$aް(,Sg,8,K퓔w 0<dw 6g>y^XRSD3KhQB ɞy&3P0:}r*ؐrp&&~ !-F ݂=hjsc,Th=Ά_+9IR_hE&݃>=r<'*l^3`j-O~hQB<\RT3:Lb/mRZW趛G+uD1Z?MVf}u5(Öc G*W8⦞!d)U:K2΋Yc=(,>R:u =:1|֖G@T\-b%#$|=Xٛ-kfE v\^Lj펿clҗ: 'Q۴뺚fV3^//@[5[Kmڠu|Jt'=Ʃ5@w`|:acZ1쯒afgPWwre0kBkI9.3|C0q.^oAׅ\oU}QiEv_qh`2 ~,\׉k[iš ERk\x!_1n 0ɇ) PT~1tR}{**B&_mYڇ )E-ۻ~$*,oU:SIlmbtVjq6*?/g$h@Gܿl-Mh'LV[̪|-rU砘6m~mZ}|￘.+)O/QN'S;nO헌\}FПa*95wGU )bG'0 -(Y]i/ˡ-;ZKL XoiY[kWe '"Wx ""kEA%eZMeTnl"}]uj9UN'c,Gk1glVUNS, 2e_ԩ 0Dí/{]~/I _^ԍ]ЊNQ K"r!h@{;*&.;Btcd~dU?<'+k]V3zC*)&~x ΄sFGoDs.J7sX,)="b/&-g;Ga5Z!ujkyv1:ed\ݦ8𺀟mqC[;I>b|M{JmFCv<-C]8[ı."Vr܁,䦳}h찆i2CU\<`J۝]I-z޸T&ӊ>_݈ kD 1?;@]=mWj?jm53ݛz=vv8WsV-%wpZ hW(]7NXe F)*e_j CHOJ1$lcNa tHW^yvV})Tm=H ډ;l黳= ?OZnۀ-*[H76ޢ;IZZ^z_WOwkЭg$"m-~r^($IXߖw<o9$UMjY3iw`P3%7H`wb)R]`:q8޲z#xos" g778 AiT[v!Vd'qJM#jn7| Ǥ? dKzluUf'whkZvMu ~Üɪm 6,*>hLf:irCq{$2OV`TFo\F(imIN"Ж>^eS _H1uUpWDGX9̯xYY 14% Ju.2>fBS4JNQ#WT랞mTzl}ӱq5A{XԂLv(FՓvߋ %j\GJYm xwnY~|໓uN=n ^R`FiK3!گieiϿ;/IL-սKxrOz~V3݇Z}%V^vxN@_s:7=mHR/v79?jd:? _"n-HScREscLy=0FX_zA^^ۉLkq:&K[p^83C,͗^j﫻λ{7X=?疵ҩШp*ich8Pr{zt Y5bH_T".<lW/]RKhXXWդ~g ,EB~ IWh9ayFp7GS&Q2sBd8N_j { ۬O>Kc ԭ-=-򺑸$Wӂ~E^v]^n){g1CWwiQ'NHC>*iiB$(rŹUuIk%Z1,{4\4 ?mbs{o՗C-GX q~bVFku q/Ը+^ N :>oUQ8gqJK4N{/-YBIg铚PE ٳ](s5:np~ wt,E' UI*ƹG0 ׄ8lri6o9MͤR/z?ϱ{?"gIÞ9ay 'Q'#:E&6 #(lkHgu^),ǥ8r}%Ցt߲[#`~wf^FROL5qquU B/z,/%ipv皬7P4PN&}ŝ߃5ef}me?:tb.}_,Q>Wiat5. [+|Io&JMd)Q@.s S4?֝ WC<q̨iki':TdwW A]کAMWPUĝJ`#ë2KdXG6g8{^m`0>o~I]>N>Z\8&\z ?!jeoFDD?X@om ̩OM }-cy*3! %ZT L/aBS X[ 9c/D[Y|p &MPlL.ʪG/_Q6GSsX-mRP0MWRHt9v[_ړ9 ΎjA^žgTZo"tTk `r1ElzWE2[:a]ܨy1! }6^J I|~)#3Ďq~*M$ͮuJ:>j=<-"֫2};&^~K|R<4|aڒ[-:1pDSwueȪ,AHrdC>߲SF-r^Ł_HEs߆͍x-,.׎l?x'?6+gߣW~/x Q2|^2bl43dߦ14!VEyKOb}:>ĦZ3ڛQD~{`YKyl7MK+)D'叁`G|$p 26Cl~tҴywhe)ׂC: D{]5MF!:z0_ϟ]4{ȆNsq'53BnpE\`QFmm B/sRҏc= ا;zro?VHڝB^A׶T|;f3"u-|:> Q%at3ݿHi;gWH$' ano bؼ-?~7W"t'iݾXz5} r'_w)PEiQ<ç7䥜8?Imp-14M=:(u-Qx|p^{q{LϗSUcDPh aisBF9QT[|-ֈ-[=K(]2BKx_'ǺwC.uiviwB|08h QNJâx䢪#]w"t_$pbe:s:A6+<¼(i㗡bak؉~Hn#%uS+tƨ2'28|q~/c$ [ 4*x'a!^Q6tS m+;B:B\-azJ`5p}zHe}rJ`rHb˼9t;WisKY~k0>6*ߓ 6m{@(qN1Yg_itՏϑ]dY5ిu4H<ifYWT1uJss0Hїs[}PȏMsKg&b~-ߎr5%Ҁ{(S38h> ,uJZk= )RKɊc&@fhDTFtVzuha.ӌBȖm̈{d^E= BNMjwO!?>: ~d!7Cgݢ3infi}]Tr#⬔=  9֙ځŪ&k~A˖F>tJX?PEp ̉t]"EW팳ߡE>\Z^J>q!%hH 6l) n%@bE8Z*0jomlZP8.\yUT?Ku(N#-Oh ڢ5g.ݙ{쨧?;TtK=bӛJ+H}ls}f]ijZƵ9iM,x~v^,q^OΙ;I5+GM4*I 'Fx_lfTT^蝮6&"Oo5,矔J vrx]wܴGs;=\d:2W‰nL;Kc)+ckL$ɔX7|ێ\c 'iS߼ߦ1B$$c=޼ڮ|p+$mcCp; caFn8S?_>CЅ7dy Y_Y5lCscscV(_m\0E(=hi^<-^n cn5l=xj@*A~D\GsAzv LZnuuQb4@DG*{S4]i9ٛ0]v/.]Ug5YguRvz+29a^X%Y}ʕGM& oY޽դy7!#fr=Iyu%*2ٱK'|*鼗Hh Lt}Ep,yө`J[(_w[Fut`!995+wa~fᰄvaFk`n#]hIWtbvQ8;ؤ!LG+-_>*`e@ˎϨw-:I;B GkBF=BirFKմ\k2n%k` K A~:SGA xO"'L?6" yo "|i_P0|[M̾q3UoC5'9{ XŇA^ɗbNTt`M`ӡN q/5Z\F 'IwjH[>*q.+tP~S@\7_|PᄺzɃǬN|L5ÏKi5(q{';6;@ Mb`LpGG>{sFݤs77,D亖%Jۧ ?st.n}-ۿ׈mHu qAD 3M1ORnBp*ݲ7|.V}C{/13Md$Rg>ą 4_8ymn\EHx5: !؏<*_swad(n7Xs+ZltY Ϗ rpEaJ:IxZ7M-JS_}1}-&X+:9Rs@hG::OZFv[?1!xA^ ɳ_pvC#39s!y 3N2W_a IHz05d7=7%#EGkrm\wb+aJԗ5iڅ4| (?]6Nr9RL7&=[@#\J4ҽ^Ju+qyx:Ğ@GTVM1:IYݧ*-l[:ht1Uζ&,PEFŒZ>b }ok]=HlMe|NaDv^ww  (%[s -fw]f-'dzvJ%#+zm3tFPO fWѮMC9]Gq#{ezV.%[.Dt2糖/9ʲs_Ȓߛ'샟yЭ^=n{x;zKN"hkW%tJI?bԻiJ\j+iA>[\+O7EStz슞GrWQ}W{y'[ O`*ilH 'Y8Nir +p.0 Km^ՁeLzG`5'2K RGޔ=7TX-K1m,xO} {Xmv+ئ${B>ʎb9”v)ì$Y)7r;6WYa ۓ"HaC1d/mA,CuiR׏8bs2$F,>{|gQFt/JJtzq +!8J?/ N?cŠ+p-zs{P=DƯbc6ۚHwΛ =sE<'}7|Rbo>6P Z}H:'0Pqwܙn5bNʮ7SkS_2s&Ju{7sŚ/le^gsbS$8n}ẟ&oK;72RBuG={p|e=g Uz<2_yx= ,gTnGxqO 93^UPtCz X!#wY{JRyTנȮɔz: x72aү5'p IC>HaEیl^n9GQ2,ӎ>P-sܨFjn9O'Buz b;ZGuIicMJ Iwwq`gA5,]~GX | Y`!u:X{g 5,ADa-LJ#9%m>${(25 uu>(SG~]D 'iR YݖbW%4T ߸F쀲}ȧhwfaRI0:aZ"%}9Zv gH{lV+NF(F'%Fb)¢1L޶0b |r|spz`jGӓG:rOkAd5non2YW4#͍ic<=eV]&~ ?L̛­EQ 9X0UkI^Ϭʍu4CArFQGB:5WGDi6Tb,EJQeZwZܔYfi}4H6g!n9C)-H;w^-UBkF7Vq~)"k.v]5G*V ELt_ܷ9E CMDm۽f0՟\6 ؛A̸"UOax|>nL`ZrcUOSrŪsU))l:B {6׊Run(jl+ꨎ ,1~,@p p'7D}DHg4J;tQ^ԁ.Ј詾?d.{"XDaӫoةJTYXGB/~_zX0ߟ⁊ˎT4(hRy]Jpβ 2|ÚGP7_qSw\*'RG.&Ģ? OE5 {6je4ZgS*ԛJ2 PrC0ǪUD,-Uk_JLL5Gǝ)*ʽ*Edz.X6ͻ2q^mԨL*`wWN<1,Ai~t :dH5Y֗m >bU%eW?ŠD|8td%G.m]5. aQvV%C=i&kWyF=ym+o?d^C~\iIP=Mo%魙I@8m}*wt>3fps*~'~Qѩ&sс4Eȟsd)65"mnͷzI0j  ;Uj_R9?t,_ itKa*}SI^%qz#Sג5Mۂ `풶<_$>Y krɰ{ x̻30؝7_.n%dqXprC+Leۗ,Cp="1~x@pH_)a9deVҰӲDicĝ&nG Qwl}:[u)RFuQ /=VZF+h2wCtso'(j-?ђF>gЧ;G1ωYݧ96nC+{&kY{oN`ꦿ1Bȕs>ma =8s(rm sCh[N-e I7Sၖ/Ղܝ&5C>*5RT۷ _?\|Q66j؟˦NWA+b!j=l3<<G2:FT˘{.hVLkDFӺՀk&Y} j{R9!@9 MX˙65W }{Ef/h0_XQj[JVA4_\E*ѴQ *i:A1S'hg⬓T1NY\ehf7t㜄CMsoTJL ڊcGlrsGŏ?kQ.g_Rg,]Q nG)GxZm}\_bT%P;gwtE7Ɓ];}rGܐAG6)D>twumppSۡUK&3g\nZTnhty]nR@֙[}ZkjKlo~[j2}.=?_[3H}4~uh;ف94L`pbj L=đ!GIt"A~KWܿt%UsvTRiP% 5UWž„df5 +|Rm nQ\{X+,ꌣpJokXd$|LեK鋟n1(% Ioga2:zđxoC`>:0ZHyol C/,ͯ/UM⋜V;<-T;L(p? g9w }:R׹X<~V#'ﻧb@?Tt_¦ooسs 37 0 MxH ._Y.CiS|_?A/>B;V+g ȢbJ:$Qu+`wPe!w|aĽ&A,ҥK3ڈ MY!fJ~s_xᬥuhus9;'N**B;P19qTez\vͩ1\Qcv´S)TltBRkN5+fXyns [J,,& >&aZ$>G=\6%XIu/>g^?,4@7OlRRIk1[;)|ve˴+[h6cFv%RqPOBv<&[Ǘ L!!A^(A_t?j?SL:َXu7ՂnYRi4A8O{4xeptzcowr({N,$ڊق({$g[FOSwUA?(JNPiΏubc*{b|4~6Wa6vv% ] J[?+-.0cf?6[ g3\-J%dKt̶yA׏밲~LWfCT W=} )PB'jGt#Y` T7T>M{m)fwszptNDp3ߞG7(t?͸-XMZ/t*_wr:t[=/c/Nf{'e3ȝm\&pN g`Tvۘ{Ek6. %99n5:- ~=᳎c>ħ@UvN^C/gsatے#l6Z Gٛ8H,0{?[*|CW[pQ0 ڧ>v}xit픙,`B6%n7ft{$ʯ]υO 4xR|d/>7 Y~#CL*oU茇 \آC %\u)_5V]ssѬoIi Dis{\%bi`7o'dzt]_GdTL"J Յߑ\ wO{qn(mWAwyX9 SU({T[%F}`)%NWyh}n+,ϓoT|x#ZØV#:{T _r%]AI x2_n'7۬vol𷱅HKw0{Y?.c&.~-Pa97i˺뤲()4xn|O {h6\B .n*ЍBEKO ݝz+Ӡ.@0ށ$[>,sOĬZiwxYBN}O!钝ՙOC+cci,_K ؊2D?Թ) OHށ02mǡΝ;i:¶iSЉoIJsPM$eVI2< u͊l85(bKgIˀpz Sgw8m#pj`3#aڮNM6~ ˭nƑ\">lC|GSswiχLo) ڀ6D{Z&-9% jZI)!E6 mwwW c-֪Z2U฿Ԓͬjܭs#ARVP:2VZ `1|3$TY0p_{W_@U(o2Dt0ֱ]IHlȩY-R)/W65c]d7:Pk0FUN֪tʲ:ȵ VuAhk'W9 &݌ˈ\tH8]ްl7V#q!ϝX{j<Gmt<@R:5Ԅ= B=sX(>}y`89^9ӏMO7sLT\F0 FJnpF?Qz(~Sew&|Uk꺷o9vI>>kYk2IgqN s,esNChxKNР) cO33NV4Ͽ>Ɩ@mb_ 1noЫPDH3k!Y N]qs Cƺ;1$O:5hDz :`(:붺]]#6{]CвȮc#皛rBXyE~>Q -U;X~}J$H F?\4(~~0ۀ"WՂ)fJd`Գ}:ݟf;qK ?4QIw況'3|np9YɡwlU'@tm.z&osp!QY='b;T?悻ȣ c]/شtش/aA>w]5Zgz ଛ`4=բNu-A+n9rB6a:LZ[^dSG~^)jⴞR;_OC8bKiFNJRiE{@éc:O՚c{ƩR@"EF^~r3rD8tObYUFhN'sP[/x*Q?72˞52hKa(-]*W*dӂ -Sn/m<݇nlrO|^#.{a~JJ9/ޒt Jp/T5qcb4+ȘU5b1M_t)8爻Hu%HaC>&djךYfOX*׶CՕu5v{]ejT98T8, ] ׎Pd4WgY.ԅVl |N 6c&/LMyknz%ӮN;*#&>=zұ3^9T>q0fM}:Y_]oE6jI(^ƨ4f/_p>k8yOB乥өά0Gf!-MMyb`e}kvp3Ƌ_oQYE'܂;Ogt/賠;lZS}N 2I'w??:sUY`c' 3|L`r_m7P28QT9AGmJxRUO|7slE9ͨLIK_E\R8+Ŵ_k/:' c2k3WAu.;"^ 1 v[E:z`CjOUej5(mUipE,g pN-mzlZPD s)OK9O3-p?Z#Uoi ,m|a7]_оŎ'aRJtÎp83"ba\F4h=-Ga_Mҟ5R7\s\${t?C9P'pp BGdiHEХ21',v:E;m?_Hto0Imw1:s|$DVcvd9v!0q8#[oX 7Y©bo-6q`oRs?dϺ@x|ڰ!.`;8S©bsX[p H Rj*kR#5(3G0߃sф_ڲiюh{Q/bd]ڶ/ha΀v\nM|E>J*Px@ k@ឲ7D,)@if?)~K n:Kh:%pÔO9ۇM?7#_&]׎,7TUAOt:5X;-<#/Ib\d3l :Pl ~]=d`ו/vujɩUE2%sOصI0>ѵIτ<7 _au-W1/ȹ:ߜ5| 'nnjc0oYڂc:IɻŊ -3JʺE-*M#GV!R32<*AO~B+&tR+#J K4'TMJ[ġf=2ʴ%7?髒CM6v:dH5;A.MN#ԝhlٖ'9V,Bޙmp CVOi{6{C&Stb^>>Y ;L31)]qh!$uR!]@J'iƽcNqkZ<4u_y|̉thъqvFJe/T, 2j~nfYm嬙s|W6}UVwVAATehA up~?zAc.!4n~Y]Fٵ/?j>.n̬=kq5ވҪ2.?q?&tW]t bHQ]fn8rm8yt/  n*0akpH[++aV)fNNtG'~uTT<]UJ\\K#{m1 ;O5<5\E7 5H>쿊7j3[z},03z2/9c-2Kdu愖`-nvLR ) /KC9BOFUwV Ȓ@)D p $(ATbFj!lpZ N W{N q8v|\$8PWrZR^_0K(^ѓe.6 :Pfʲcy Zc2Tw39c: .aC[%  91'1{c#K S*rjA+IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/slate_d.png0000644000175100001770000001370014614030313016167 0ustar00runnerdockerPNG  IHDRj$PLTEzzzKWIDATx5[ISUU^U؎UH@]#HJ#Rқ$B k{iϙ{s[>ʑj'xA;V+ E  ZV@vX&1[:*쟽Z-) %[38po;=N n9<[{7@i)C_py bؙ N:g,x/XnSPZeoF37`0 PW*tfϕn5 8h+L MGx,a~ʠPg2Q)Jl5)3Rr2xӝcXQoxhH{MQB7wGɁ;t:WF/ҲwƁ1`eBzHh ija؟!硅dVxtH0xQ\vst+\]0g)v/|=Ԗ 鞀^; J]`zIfVt\b͆di\-,K`\HOBK>*j9Ӣ; AЌ%(WuYu瀈7)dΩU"ɄZ:V 9! *aDmbr!)n ?[I u CNW6bs߿.D_զ/>c3irl!*qQ\ xu0w)MG}~="=xz19#%mMt,w? Aw4]őr[o~a\{&@4뛧_]R癷T($7LXAw&-۾An0D>M. !_ =8.di:S<ZsPDu=^Gg`FuF#NP*Ƶ_Zr NtڒRvwZq2&t#[ \鱝C16SЖB7>p8<m@Ys/@>xGoJEhhY6lx0,;\7+ESBK0|NJJiY%JImkewQMaY /:l쨐Ke֓ȘG2+* *ܜtS jo)MI UB71uhgNIU˰zˤWS&rxB‡Fd:l/`U3.KRM.cbǛI5jXK<$ (M&B&J 6nE!=$\+k A EN&1>"9Ra#Zj(XfGuU_]M`1Ea{<(H0v(#xKc;. )Ҽ/Pi$˜*8 T3)w;|aПg"h jC"$jx4')E}uXKw/xX3:ㆎ9A+-^חgVmTGN#,r!cq yI9ycZGk>$-W:j0̔|mƃKU 2h/{)(ν3gP]r^J(<(a ~"ܹ6iו8NuyҗTK|-[Itjh-] #鎹OR%) tYI XKQ ;3ڠkO$"l\n5HADT/f2G;T0J*TÜ%h*U0\)TD^M}ӫLmG77D50A#OĕUF3.E 42)6?ݍs-&p6MU8CJpƧ@)P) r}DBЇ8b5yvX{s6ֆA' o;sNs!V=`Da [crvֽ^M_[q鴈0}f,vYf ?tw3:YUUpԽ I 6x6lpa=5/t589K$%qKpv{Օ?1<$ +97wx`:F!w]߲n\>#&W\\Yܦ2*Rz^^3~/`T[\:a?88_A^#h–{CN*Ston\*)t 6oSҜ?`U%wXW(y ]5]֒J76>!T"tMniT"EmS;IT YGT$ ć<LVW;cb*5[oa !x?_D ъqΜ{.UQ_nAFviQšHiQ `C9/D;hn{%v˓&z(n؀H>9#ѢՔjjW RPܩGɭHǏۤ@W 9O)B[%A4Hݙ˯p[T_G?sHڎ$sﯖB!PW٩WyU4 B|t 6Kjkm& DbDz?]{喯`Y}>^ժ*ѭ҃=*]K 9!]8zǤS55u0A_-l'>+(ebdZX&eӉiPSi7ejUʼB !ʓWWSGV ׉ MsGK[}B3DNa>0MRͬ"J!jz\>[z}_,;뿽?>LjI"R" _0:S%h[O)oSx 05a W^vk/(ȟNtү "tſD'*l5#ű97.oꇭ&UJ~22 9.ՍI!& 83p0 LR4jqr谊u+.ibz3?'wRVU%$#8Ĭbt!A{̍jn * M?¡<:aUi뤹  4[2WV{" odcmTaX_"KJ6FFOS5_~jT$U8<Ë pA#jOKOZCݿ8 5^boc4*%mIF/^;іt" [J){+H?d"[2).`g|idk-5RT7 n0?OgƒC[| fx+.p_FDW7>! 9N\Dd  {M\_YM^B]Fa D:RB`ȝogZCu ٨t߱n FC[y> 9זҀ{;^G/ nBX5DKN?\5E>"X_BC9&qX:K. kqˎRJV <ĨULӌ>jJVH⊥} V&(G@QP_1%pCy\n|b?)UBA` !|GA`-DU^0v?#@`$"LqGFU%(qrRKl^ZV)9fI@`YbSZzUDMSPS 5[ |ig&׫_bX }vt`qd3LvݻS-i󂾉NJUVS">ֆa*_nIL),LݜwP:Dh~R-jas:$!Vx"-uveL} 8"aw!tDׂs|bVF.˝9³ _ <)z&Q%U1L=nGVzG͋iJ'.<`)iP,+Mo'etzaU:=naR`҃h,&F.v5J5uT:K;k:GD)VU_)rf5`D l] jS(EK=Ә}PI{q-Z4w2H#mfxݫR*?/IiMR]m_z_[hͩ ~RyTC^*}5#b%]kB+N<ٱn\s[YtÄNǩ Ϊ*"]F*-.9KؠM.h$J)V&vtTcZ sq3T$'Ĉ-@о )7!JOBHRxBuuEwgu~ LJ Qօ$S ͺ OCTE;ػ[d=H]Vաf@&ͲR '[yХEqnKI$J"L!Z\ҰW &X ѩpmOK_KQ'ń&$Ňdgf4;Nʑj'xA;V+ E  ZV@vX&1[:*쟽Z-) %[38po;=N n9<[{7@i)C_py bؙ N:g,x/XnSPZeoF37`0 PW*tfϕn5 8h+L MGx,a~ʠPg2Q)Jl5)3Rr2xӝcXQoxhH{MQB7wGɁ;t:WF/ҲwƁ1`eBzHh ija؟!硅dVxtH0xQ\vst+\]0g)v/|=Ԗ 鞀^; J]`zIfVt\b͆di\-,K`\HOBK>*j9Ӣ; AЌ%(WuYu瀈7)dΩU"ɄZ:V 9! *aDmbr!)n ?[I u CNW6bs߿.D_զ/>c3irl!*qQ\ xu0w)MG}~="=xz19#%mMt,w? Aw4]őr[o~a\{&@4뛧_]R癷T($7LXAw&-۾An0D>M. !_ =8.di:S<ZsPDu=^Gg`FuF#NP*Ƶ_Zr NtڒRvwZq2&t#[ \鱝C16SЖB7>p8<m@Ys/@>xGoJEhhY6lx0,;\7+ESBK0|NJJiY%JImkewQMaY /:l쨐Ke֓ȘG2+* *ܜtS jo)MI UB71uhgNIU˰zˤWS&rxB‡Fd:l/`U3.KRM.cbǛI5jXK<$ (M&B&J 6nE!=$\+k A EN&1>"9Ra#Zj(XfGuU_]M`1Ea{<(H0v(#xKc;. )Ҽ/Pi$˜*8 T3)w;|aПg"h jC"$jx4')E}uXKw/xX3:ㆎ9A+-^חgVmTGN#,r!cq yI9ycZGk>$-W:j0̔|mƃKU 2h/{)(ν3gP]r^J(<(a ~"ܹ6iו8NuyҗTK|-[Itjh-] #鎹OR%) tYI XKQ ;3ڠkO$"l\n5HADT/f2G;T0J*TÜ%h*U0\)TD^M}ӫLmG77D50A#OĕUF3.E 42)6?ݍs-&p6MU8CJpƧ@)P) r}DBЇ8b5yvX{s6ֆA' o;sNs!V=`Da [crvֽ^M_[q鴈0}f,vYf ?tw3:YUUpԽ I 6x6lpa=5/t589K$%qKpv{Օ?1<$ +97wx`:F!w]߲n\>#&W\\Yܦ2*Rz^^3~/`T[\:a?88_A^#h–{CN*Ston\*)t 6oSҜ?`U%wXW(y ]5]֒J76>!T"tMniT"EmS;IT YGT$ ć<LVW;cb*5[oa !x?_D ъqΜ{.UQ_nAFviQšHiQ `C9/D;hn{%v˓&z(n؀H>9#ѢՔjjW RPܩGɭHǏۤ@W 9O)B[%A4Hݙ˯p[T_G?sHڎ$sﯖB!PW٩WyU4 B|t 6Kjkm& DbDz?]{喯`Y}>^ժ*ѭ҃=*]K 9!]8zǤS55u0A_-l'>+(ebdZX&eӉiPSi7ejUʼB !ʓWWSGV ׉ MsGK[}B3DNa>0MRͬ"J!jz\>[z}_,;뿽?>LjI"R" _0:S%h[O)oSx 05a W^vk/(ȟNtү "tſD'*l5#ű97.oꇭ&UJ~22 9.ՍI!& 83p0 LR4jqr谊u+.ibz3?'wRVU%$#8Ĭbt!A{̍jn * M?¡<:aUi뤹  4[2WV{" odcmTaX_"KJ6FFOS5_~jT$U8<Ë pA#jOKOZCݿ8 5^boc4*%mIF/^;іt" [J){+H?d"[2).`g|idk-5RT7 n0?OgƒC[| fx+.p_FDW7>! 9N\Dd  {M\_YM^B]Fa D:RB`ȝogZCu ٨t߱n FC[y> 9זҀ{;^G/ nBX5DKN?\5E>"X_BC9&qX:K. kqˎRJV <ĨULӌ>jJVH⊥} V&(G@QP_1%pCy\n|b?)UBA` !|GA`-DU^0v?#@`$"LqGFU%(qrRKl^ZV)9fI@`YbSZzUDMSPS 5[ |ig&׫_bX }vt`qd3LvݻS-i󂾉NJUVS">ֆa*_nIL),LݜwP:Dh~R-jas:$!Vx"-uveL} 8"aw!tDׂs|bVF.˝9³ _ <)z&Q%U1L=nGVzG͋iJ'.<`)iP,+Mo'etzaU:=naR`҃h,&F.v5J5uT:K;k:GD)VU_)rf5`D l] jS(EK=Ә}PI{q-Z4w2H#mfxݫR*?/IiMR]m_z_[hͩ ~RyTC^*}5#b%]kB+N<ٱn\s[YtÄNǩ Ϊ*"]F*-.9KؠM.h$J)V&vtTcZ sq3T$'Ĉ-@о )7!JOBHRxBuuEwgu~ LJ Qօ$S ͺ OCTE;ػ[d=H]Vաf@&ͲR '[yХEqnKI$J"L!Z\ҰW &X ѩpmOK_KQ'ń&$Ňdgf4;NF'}@-%@= =V!Ü:/)`c#J#d!^ո>p;0[0\YM BUѭUCb$na6,S| 7ÈX (r~3eF v98k8AIkl Z4 Ȁ 6Rp  OJrH@YLMDBvsII[F]G>昐 T 7)aNyOһIr*Ì=1=3A+=HA\Zܙ?_3bđ A(R p'KVpg8 Ch5@8ݔ2-wlO$N)( 7\6%"J}a0B{f) nPX*IS[k&dFȅc] :Ť^?шAܲ忑6̣Q|^DxȡmNݛ-l\%*'?{%tȍ:fn%g育Fe(.V1:up@@_vB6qy)7chƹ#ACU!mh‹O.#!rќgWT5 ظz=[0)>f$pj;AtNhZLAdڿ*V+5Pbf/aޑn߹^[l 95hcF/\"lMHCCRף7U[\˜pro_ 棒 u`hiEa0| "Fx<E0/vڧ `y\p!Z|grn:emc̥3G*4"MȱWϤb_fO׋(^8i=))XO܋u`P!8LY爔ϧJ'Oҽ2Nܨ˃{g4#R}d1GYdIJrnS¼z8XgZJO>bT,*27@FpB;oƣ۵P}k\'@~ 歱j3[g(oɂY 8XsjxYh` ٩! ׁ)j}:]Ioٓ#kɘ@B]Z X60Ėϟ@Ć}B5`2 CS{<]_7m XHHdMKiƷ=WW-%5 HqE$?'=EL \Jhg!twj"1ښC PMb%=Ǩ5Ƞ[l ;$+yu*[/tl|g)pʶ&{/']>cQh͑5%wz莊Wyn/i\(0[=v+;kKR˷ػJHo;ǎGxi%B/I/ڨKZ"f뮛||:ZBk :QJҘϺ s $2Κ-WSKVRh;=(W߽yȗն'􂪝s5O[jUjekTmAYZ]uH= ٸGh'3WP-a4gu0je)vr\G(srΥI%G%}POQ9̧B it߼8j.Wzx՚hMcDZ 9314L/ChqM#lҧWaGe_v04Jn 珌R%}7+s ݹ~N@ՙՆ 6\%.*¦g,t-8Qm׏Z>x1s@q#|xqRINboߟo)>Z2;oc/I$O֯m[ }9oioJDsmW*D8era^d=**W=]5,quH(o_P/ZE(MҺfJ)kEM,*PohFJpP$>隐 TG Z{8Ȋ5_~&:x_`iIJqBYό`oŲrq7ݍiVQf,ܰg=# U,4m݋dQrj#b7r]ׅҒF*PGZ?lm MpՇMn,A( Ղh}p;&!(u(%A1A⋡⺐~̹Sn[{Mzv\R!YAX/`d`p2L}>2h &k|aל\Z[ĩJ ]K d [{.vA.k\m/r` ++b@EƒFEY/Kĥd@.鱑bg+#ץ!HGʸFC0milSdƉR0B~,IIۀ4f>=PLynFV 8X#w" cXgaz`B:.mzI8wk;")eCw|ZwPwuXоF!լhG"L z,IiB(/vAnhp=l`6(8!Mpׄ@#Bi!%5-#j@q"lAF3K,?HuxUcXs(!z#Ds|pI۬+2@s˲nFCd6Rg!@2Euѓ[ p"<>WhKk* ppy1`2U_qIuXpi^%V2+Af1e0@k)P$kQP3, 'ѨQ$A)ىGW`yNQNI+\2I]a Z$ H)$꠶RkE߮6LdW$O")kmаE o$*nڬօLFo9[⾴Tm G9 <"Tԉ1&b(]`ԀE=P\JF[-J*-5R%odc\v$~>,h990_W_ K(P KJQ U^T:Y:,T;W f3Q)& Z?%YVVsjhY6<u~j҈G9h铻EщQPTGg!Ɠ؀% GooS?A/`11v;wJcD#<8X潀lBU ߝ+(=1c Ꙕ:׀Q7PA #UB$ͽ-îL~}ɨ*B! 9+r 3[uӃk|sL\}WOlP@TZAbiiB4!4[mV5Jc3 En[hePW"NNiRV}G1O>UkAjz0Y7,v],CfBq` Ur44D/ ?aT|hQAQ e=v|󟨒lRJD%O:Kt$~ij^GKdT hh5Ql62=g(-s`oºb0hZ8  ~hV ka,yFYB*iWQq j3hﶳx9/oU1izqSd="L<CA~Ҥַz]c'թ9O"-9B1A%Er)ܤfJ:UDc$\ݐ=Owbh‰to e^}A:)%+vDj;h'h-x/![49( 뼮>WQQK(L:JpB7Mhz=R̫pDZǒ@⦒v:Kl4^PCfT XR ݥ[jI mƅ^0*U_n SQ2d),!I.A&ư0npN~CX&#=Omkm7z:5R%RQPER8'WXdxIkÎ>0r7(JC3$F(E(NvpgQME:ʮ'… 00%H<X2+?1LyE4Jtc4*:ԳFaXleQ]!T$!a+2BGP(h~A%Y8\z61 ,_W\X_ S;w+HU=x_|>)MIvE,]HpKb/GWtx`A ]~bk@|}Jtr+߲nxT|g4㢌rv/l 73!<&4\ au BӤ*I«ۣOck:Цn-]U.M?HgET1bCʁ|X$P{  h`0*P+G',,@PC|lEV?#9ﵡ~ 24 Uuql* ptw"hS 뚯@!AUf@LS=tYogVNPO@>k psCu4jVlŹ^uAnk⼑wY yo;$@sC&R*]Zz9Yx5D``θ q#nt V!!"P1(b5Ph yje%*gJ˫hY1" gc Rٮ!DfP=[>[xsˋ=z @;kAi+ ׭P/J;RUDKCP[r':+,8a( |>@}UAC>v?4F:,S( -aڸCR9N/f1X|]n!jaR2Tt V5рum6iLa$]{! kMfAh{|+it)N7Wr%w=b U6dki? w|gG=AM:eWx=긕\44ukk}B OV!zQsu5H뫶yp5:̷ t8hmjPB\ml|tf*؏LauQ `*_kW<_z2XDUDZߴfjj`! LgjvIoG?1thJ Ãc\mg*hVDa$d/AںCyҭ-5x$rQ8^<ՉE;nuE4䄍:'"ܵ}@RU98д\ Z:<5w*\0d.M-ݧ 34©Uh]+F%}@ˏ4Pcq,;:lFM}"c<:lqHmLvkn=xaѓ"~CN䒤?faeH^cS$Uc&I#)xqpkP.I Bj?E :pZur}Є`u5Hx/z1g@IZ`:b̠ȆR<) :xLWf 4:xHt(*36\0Љvz{׉(:ᓠԵ-\k f\耿n]{-HEJlfk0"`gó) @ˌF^ZXvo&.QE:h7Osx_kqb^Q:0=ѴlCyr3TJi聾"5~&^\OZ|$dyt1}ZgI:(4$$nZ:zAII 00iRRP[SRzp^ c7ے.vr&Ɓu`5?;B~>oաب5 iM/DWL1Y]^wݱK-k/N۫ydH)%/@D]K@ѳ=WEךūj=tdVy>(PD,q *%TsW#ۍTݦu]כG6C\}K?*{*Dvۘ0j\F,D"{F?"?T!Sk2xP/O4JeolGR%<_ŸV|A,5⥼/<;c*6!S6_hz5P>qЖ7 !-]8ε>Sc{ ,AJ\%?cN.dnz&\C-Y/ͬߺTy{tn q7Q7sHH.&䌲Jne de 1;ϵq7т[6~fn¤2m:0# )eo7*qMk2vWϻܼ !\!늦@`)P$fہ0\Џ9IaP#L$5?R[8$US}(7j.S?>,'3zu0iUhrP:/)dZPjъK:spX`}ܓdb&CP@jJ T,c_t3'F(Uzj)E![M`Ѐ hVyl|TNQK7 =z$ϼ6?Fbq@ffN"s1qNA"u#Gh1B0_0x"S <`^IT!{-^@ *d4i6yT*p?/TjioCOӲnКWcT<˃^O/[zM2.Z1y?M^*" Ij3CV>XL]ΜdzE6Krd~E^DWL0O"wu]خkRY祟b_T{453^=Hij)ToO1DXmJ[eEW'v sIES .m buz UKhY+t x<1g4բŐ]usotz}vfm)vءjU pv!(m3M0f|ҵܽxoI^%\K\oU;Ez$HeM 1mOx>l*].5_+?]j8)v;58 .yδ2Gn㕟j&Z3tUNvb4),V7aQ#\Hl X$:ӊvZbp`vM=PE!>ZBM+b{d3uCHF 5 b1z|7G[/VCߖLtTz _ nܥ QbX=0Sz D)J ʊm-h ˫L"/sױ›p)6S2}`_gCUk{tV!|i}a6< vbƶt$!t%)X;XԡFа@c"Z[.6-tRy> [i$0H{LqnYVaxTd$\vE"o#PR R3V̰5 f=AVKȤT?kG8"{\3R ܝ gWU9ɁB7 (>\# _]W)=WZޅx4-uU=ؽRSɍttI|z5 47f̧1ZzmLkIԎ/(E6ldԪJ29/J|G +A#;UZYw6@ @CVS:3Ygj(GY^'ڊ|?3?DF[kr0_j-H f*tO=2/w@a/ k4ؤ*169Cb sֽTv,s}DLzVUM_"!{ġ];ϫ>o:[ ^ A!$@8K vk?k۩ddP VjςMIXYq-踟E B-#̩&\&2+ _AGw  dscJ[d]@}KQ:;vP'$A1Up3)\U'pf1~t{K jGxZId aI\"lvM=S;X;RG:S5*Ct?൯iM?5xvLO`'뗀; &1sX9E% utp^5ێ#D{~\ # S׊EO=/6_mI!qZ .tK9Ҵ==8AzD^":kJ25\E Xv.vyV^FWTfA9PX▘А[RTP X&kf!c>!+;זYCHS7*t%6Aň,zׂ(G @7uqsP,F3+>~!OwM!.MdOSJcz>,bPU<`TmxTxCF mAǜd޸[zcO|~4&u̟<0 /ݜ:ZǘSwXVXp ^7ٲ5ey@16M!r!02r7D7 Y9L dhv0tjiA+MիCʾy6P&uz1p<4rs{pں1E*lV|+)'ERzZ!t~~iجizظ9xj3B%%أtM[`QC\…d!$8F?8 !{"9/BwT hYF3zBuz&z-]:3Ҫz\Z(`)%w\U0L-8*=N17cQ*BmQF߉چWd!P$nEчwl7I 4; -fS)5;q>rX}<~m&686:4ڡ?r`jkyjZS@VJ6Э8l c3 Z&W? gfUZq\ t^ho9%6i('gPdLk2+C:3<]ؾt(zUR?=o8Nw v(ԲZ6Z [JI{a&¿^M9%:cBяO5&ɫj!Rmd짊uQB. /"xZ f?^S^ݝa{`zcVAIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/boards/wood_l.png0000644000175100001770000003702514614030313016045 0ustar00runnerdockerPNG  IHDRnnI9=IDATxNA0 E|FFcI(燏"yg9oϻ].D!L^i{)e31s1["%I$LR7 QwU18n=A|0a}=s GaIpH{TKy:fê HRx$3YUysL/wb|L@B: ;͠V,%INCv0yR%.6%?9@FPz 6(}%䧪BW5Nmw: jZN%Aq~'Z}J(ѻs{3z ؃˨ʋ酌Vآ=̟v^甓@_{u V5@Z; U<\j5XU___#԰`Ŝ| 21Nvc*J { G>k6#N@BO_@h0A+\Vh`,5\tA&4̅Z4j12 Z;%:Y%V3ߏ\?Й .6l۾]i{8p4 6~D%럨 J4WaC/?RegtK$Nvmqw]7PmAIvw5WA;:WR`C䚼¯qpP(o~PC?-/9^gч_h_76F}ŜCnrDސע9c֧(;m{c2muJcމkmc09gB\ksTB~|̲?$&֚G*?5wk-1Q뇬Z N`ONō .ϋ<ܹOwᑪ|мedXJz*nO} 0Z4ඟ[y] mfFR-!/u<+bN} }jo;S2G0h  de;;jku_L`JF~SɛʸSmb(UPԆw4JDZY+9hRa3Y@Ǽ-J`;m!8j3FO]ùbB d "úYZcP߿9ֈݩ1w^d%zXJ5-T5E]'qA)1YGp X, y+ T^Kn-YjyF9?!N$*<7|mJ,RrV\A: 2ZۇF@)Λ͙znMyCUK䳓7sGֵI:; #nK ~4AY'rR + qu3U16LiXjI> ݬ)۳V #Z!cNm~FzR:3үo74T!j'k+E"Zpk=mA63C"4YF&hSrگF\H1ܟ0()ZԼ`>8M|ʐ0P֘ u]Z%KU1^'QшW7gmbऎݪ﷙*ea+6E5ŀ!s7 Uc4a:bCkE׏[}?J C_ۮy2\͂Vd(h>*%0`{"&rcoJ5Eӟ=S[Ƭ%yltHߌld96SU(S[H{U5>[WW#:P`޾kŁٜm>N(vZϯuοN-Iګ5);ӣL+3YIT+bPs3P9W S-ORUQmIJ9$ݎƊJr0d۴4] HM."T2FuJzV 2wJDqDO.ݑf.c2 <79߻XwgGgOs-<a0 ,UKGdss*p  !03D}OdҺ4)wGbS64Jf:g)3̽N.vX*gBJS0lV2 :FR%ksvaC ݈S>5@<TR@udbj6EAƐ(D;is.4 $`1P܆Im y D(޴4]*:Y!Je h_s`#QlN.L DǰDnlH4{/S.b@B?C .R-HO]z: t`qI+84'A(dǓyzVTT'Ӭ]lfXъ4FBo=G;R }V 1%p.]2u*ض*z.'*:E"OE-ȨXs,PM^tdz?ZECAjg^@3lι'reERh 9yߜH\cWG R6~O0ly4R*-0%ᄊ q3$&1B紿 k=hoyj b3V5_{-v0jpصO9H7Dg5cvĘ~9EP$kriՏIS2ZςYR<M䇂2Dt4>|ab8?t`'-6TJFކrXMm NQ7?OM]Z7N"nCH' vUθS}x\٦D[rSQ6i}j->XLT<>< >OJSM'n'z!dbFbj4= n]UYT%NEj{Z"ZjI^z%.XыQh 6>eCAQ^k8ՍٺOkr-0i[$>/Nu6n|$5| iG_Ƚ-S)׀t&sdz,oSܼx]7 PV} o4 afZFwAP~9dQ6B(Ljs4=R׮N24H w6iV2~pSm>w-)s?g t'Ƹ؅@{K~A*fgg*ԨWeI, {iZ{U8Ͻ`4H!=rJ9f@I1m^b8%SMh-z GUlt Ŝ/jr?+ZŠm TibkzvHOH ų] <Ղ]|rd-RGم;La]T(;x/xL4T娔p F&A 1^!t$¸\B cP̋Pc1/>c9Bm:pV(H`ɧmZԐD#2{\Jj[Rl55ޥ5T(sZ긚 ;3t'UVz 1ȑsc_ġ;h={E sj9)΋$)R8R" Z?vvI!FHhH(ke4;fu[Ύng"YģfOl-'hc@^~$!03m$+T*=z}Rp:nڳۺtG} ̵C 'Z_ˀ!OK|/2XVYcP5ILP(9yS]c$2 Tiup$7ۀ^Q F4@h i6l)稼K`.5~įƕEXwj}\6^D7hd`Sc~:̆WYqJPϺQ< 5;d r׽ RJ*r(m0VNR-8lPNƒ'ڞrG>z;HP٧!SEi{ž?o~%&LlKU)gn9:tq΁'hMQ%Anr1ptkjUYd=GL3}8>vÓ!og3{%l]t>5YͼZ,':z|l7DY#|車VFB\gtbs鞽i9ϻ:qn֬yE.S %FQ2}U[`Av> 4 ST`7 ( "Jh0'*̪p\EǑ^Ksÿ 0#˻AUz@j [\sFleA~Í^ymQE7?I4)h1c "9Vʛ|֮ap1tV@2qdLn]yG҈q5^Qk-h`L9O-.+bz1ж.yc(-qL:6NZ?eP(MC=2w[jc%٨E E6>.vC-W2zbji}NT ~O١`Pͼ|~j=BJU: BMA ~^uYp9dndrFs6nb 1ǥ>vv=0LVA4*k$7@41p 8C9<1Gcΐ~ Xk*Nk_b:@=ZdѥRl,{^Ej |j 㕀뉍{z5 tJE@to^Y^r=~Q}`J*;$̩8}_/w܆cp(X1*Zs#^ڹ s'?Y9'TO&1jvĜIrq(a__lgw5L` lÓf*R&MsP[؄~FEYqVTc4Ϝ8`摒ݽ*GpSIDq%.rPaAqwȱQyD^jinB3[u} mt#゙T voz(MTvn3 lH1~.C)4iOYEϪv54wMW.q]RGm *Ǽȵriͧ_ .;F|[]ˊ+ƽ5"0f2QΥػNRVj)9߶tqXׯ_8cZ`&Q3$#969ݼ;ZU1m) 8XІ-z8eOP<.?Ϫ6oh1=n럝^y ݘ2 }\[~IDqZY>TK7t_ɓӯ9cvLnY$Zc[$ 8,Z?U˴h)d&Ӂyëcm.0:uː7.sKλ;ͺѮTm9@iꎑ gȳOT/#`-}d9.2EM݌T8 ZiiO*UiC zkj5~(c96[va(QXw]ZtM78Pa.m;ӎss[#a݊R5ld>`-6^s٭'{OZSXb﷬^D;)h+#!5Se gu䉅l.޲OyS2+dB 7l߳ehP8zF: <"c(C1튄.Kl3vKf2s}>+eۑFc&Ӟg)E\fOrw#}d=MYBOg,:qK#J^:JTDŽAkҔiO"hI{1^[M9~@|>'[Ip1v #ayc5.2O&~j WC*Hy$`r0Xl|epW,%}TvR U5 ehƂe$C\S^MmjsrW#n%,crlgQ |H$:͍Lu >x9?r\.jl3i.) G ]*$.j1X̘/B-UE!MK`vRFRL,f5-}'"Uedh9 cY3@WP٭>xȓ4R aGV}[T̴XC?.Ԅ'&1f6J>㊪oz[?w](`dB#Pd 𽓮H.-g(fHt3SMc)"O=v)Κ-lS:~&eH ^<͵ՀS.KJ }Gb&2D|,jR11׽o<9y oTޞ,$!”)~K&y>i⛫tk!o5m::JcꍯSPJE(w;~ YiBWU$ P.Ϊǒ.A(ZFD!_S2`z1I5L2B;*h*ìUf@Əz>t%OywA;tp kn>⹤wU[D$VyZFu+g)OD9q!yneM㾪 #=3|N)?# R~h(,[WQD%_jKM ?[iC᝜*~I<>*mr)mxQ hO8p܈[tٴqly jfXԧ%k( lfc(3d /D }VjQ}Z[Ө[ĿrpK֔W(}$@ӂ L2jJ+,}~)#%S˝u PUZcCe{kWMw7yc>*n-2-7nY\s.GG~re&[&2j1๰qƕZ0Q*+,+s-gJJ5\) h|Zf]B*TvIC0uuA y6T~nO+0?0yލCH: }udJe'G"p7N P/id%s_7TD2lcwljc}E ,Y#8 2R& 9g{G0gQRM|Uso89|c%f kUl תh]a:V?rAH< ƼW(|٣BL >j?Z[>ԋʕn#;."~OA9zJU6ϖ6QODT9Epg>5nl3F!F[>? "ū)dӈfNà#qJv-Irj:[Piûm "%&6SC/x"j#ͺC6EBr3a*ih/F0ۤ4r?ۆi:NPv`gsmI|G  r[R9;}$^>&Ѡ&ҵau)) ɡUL*N9A~j nsQ@o;CmjZ}8"U"K 3Z[ cb J S.zgn'Lt fΡԐ݂gvX2F0dTK%. fy;1qL+[(Q*x9Q3χGYhg/ Xj3퉼i| +e~$+DSF%₩Fe.4EwY7}iBhM:*>"0!I(,n $ (xaȓM?ڲ ){$xy8Gu\efa6FX׼ à@Gqґ4ИI80-*j47̈́͢˕xT4꽛f(;?xqHwi~L0q{Ty[4"ɮԖ{>i#uc8nS)+zxH*7}̛4&9OA@L}j|L]TUgC/}ErJqIY'՟F5dF!♢ q;>UDWFt;H=u 皨A{*ejK벪&"|(QC. QS%Zdzjxn>C6Ljzkzu*P"ba:J3qly]xciDei7іm-xK$Z=n[@'Ƭd6QY]YַJ1*9Cc"D4m.wE vl}ulvYs榑암:*$0kt#x-B@QcR)+~Ү95O[:B w6+:e8 sy]ƻ\ƻ 8~fo{=rU87v[x՝Xn&I*Rm5K8F;cj)o A̮b"AJ mǍ.8֩բK%4گjcL&viD< ףA ڬi-l)!(=ʛ@)uɢR>!ja:Z8wEV*Vmڬ94L V^mjƏ&䅤u42 \϶%nlUe*<>ai64c 3#Sb  hKئmSU@*` uN5kխ]s-1EXc/EZo9橐rWvb #R]wa{G@KCBн}ȜӔ g<Հ*0H4.JrĎeDFHQ R>B+zfbsNQa5}E .8I{vJT7U!/xΣ{p,X"wUD}V-ΠfVUɕ~2-l0Ur^u]U<Ȃ!Ǚ|V8tͅGߚ$@xyf&| .q.NHjq]wfQ"t5G&{_fRSfEun_^i;kô?ExtT.LGbmRT34BUp;)y5ͨ#.&,?YwTnd&TLִ"+#I?3&  $D2K~vʲ6*,:Ʋ Kvߔ:*Ywsx'&IUdyScg9|UӄkJM$CyFyϠߙ1=/ujWI5Imn,"" gۜ#v]XG%k+hiRu4g5/8!\ etL`He`1iPWdXcMwʸ3=?9L ?E4!@D}-{y[8 *`r.%I }06 S[aGZVd߱y}!5]_7]DԊ+0}z`+cгƂ _x]#u=\W[_0SK ¦0DӰ2?~僆Z$oDb|j6Τ pD▚yCDI:z&gz03"v,!L6|\]P2lj: %sRFl!vHUOU͖;*#90|IHb'Np2dꊸ|(KTuDK|QLjIoᖁ7&m~@VC0Gm,}R!y%sWbFaLC>PX}g[b CMEh.28{W VA8Gl0;,u>jdU/R~_8a:9cU Xewc2H$j*  Jϼ-',L[XQtIdHof̺-ڣkV<ʔ8w#TyhP؍o蘨&vNtb0`2hW4u;"d 21]mStyTS8UylQs)}tx1ԸCPs)]'358cZ>;U͍G9`e1Ց.h1=ẗ́>3`b ^wR@~f-> /jۂx*;3ǀlY~甆r`eƳ"lrqAApUr!]CR cfQp DAv|b:@^s;@ *]3sVY'*'JAަ<C;6NЮJYJ)׿ו:OV|Nw7Et]!*˵+(hSOR{&k$vQWЭ}3oVZK@Ľ`4Sykd\R$[dMFM3pTUP] sKҪOeJO/Zd<#1Q~t1 R;V_/j,ICǐt/r_)? FFiuq^{8p6㈲)HQCl,НF@qGX8K]RtNledFt{cUΆWÚdZ]w1MX 0FUwƖR82aiR]SvB֯ÀVW(1n@jKL!x$$YHky'b]y4*<4(_ydq̚ӂ^Q A>^ʜ:^*A|<`7r\۾{7lIz-+9#G5p3-RJpyi3N$WYbQs~Qz$J'Lfnw_Xt}fTcl2ihRo3Í=3;")RzՆI> ?Se43|FԜZym.=6WI'_e(aMpf|HoyZ#)ٳmsc A׏ߤQxԸ)S5!5nfT8 RV㡫1kE=9#PxKO61żGH)1a(txX37*qHhEh `S4قX@-(1uF7*fFPʫ!(bL컊S]5UO(fg6WOZEEI3ٟw3}T;fT't;>2SI%.>^L\%a$Q6?:ۨ%U0RUNd- J!#ȊK#ɮ{o`yꁬ]cLL2 v0|RX!f?9*痥k6 v'j/&$_&>yRO-{2~$Dbjń(4Q%EUJnj}mGp?K Y1ͽAHYzw.'1'JQ/PI&BG ^e0e trZxk<_byYJe|%̬wԪ}_uUy\x لEi[T>B~U&_ 8]Mb}׭{&F+zA`Cw IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/create_theme_preview.py0000644000175100001770000000274514614030313017343 0ustar00runnerdockerimport os from os import listdir from os.path import isdir import cairo from pychess.Utils.const import * from pychess.Utils.Piece import Piece from pychess.gfx import Pieces from pychess.System.prefix import addDataPrefix SQUARE = 39 PIECES = ( (Piece(WHITE, KING), Piece(WHITE, QUEEN), Piece(WHITE, ROOK), None), (Piece(WHITE, KNIGHT), Piece(WHITE, BISHOP), None, Piece(BLACK, PAWN)), (Piece(WHITE, PAWN), None, Piece(BLACK, BISHOP), Piece(BLACK, KNIGHT)), (None, Piece(BLACK, ROOK), Piece(BLACK, QUEEN), Piece(BLACK, KING)), ) themes = [] pieces = addDataPrefix("pieces") themes += [d.capitalize() for d in listdir(pieces) if isdir(os.path.join(pieces, d))] themes.sort() for theme in themes: pngfile = f"{pieces}/{theme}.png" print("Creating %s" % pngfile) Pieces.set_piece_theme(theme) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, SQUARE * 4, SQUARE * 4) context = cairo.Context(surface) context.set_source_rgb(0.5, 0.5, 0.5) for x in range(4): for y in range(4): if (x + y) % 2 == 1: context.rectangle(x * SQUARE, y * SQUARE, SQUARE, SQUARE) context.fill() context.rectangle(0, 0, 4 * SQUARE, 4 * SQUARE) context.stroke() context.set_source_rgb(0, 0, 0) for y, row in enumerate(PIECES): for x, piece in enumerate(row): if piece is not None: Pieces.drawPiece(piece, context, x * SQUARE, (3 - y) * SQUARE, SQUARE) surface.write_to_png(pngfile) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434317.0 pychess-1.0.5/eco.db0000644000175100001770001302000014614030415013647 0ustar00runnerdockerSQLite format 3@ .WJ QP)iindexopenings_indexopeningsCREATE INDEX openings_index on openings (hkey),+tableopeningsopeningsCREATE TABLE openings (hash text, hkey integer, mainline integer, endline integer, eco text, lang text, opening text, variation text, fen text):s LYM #B.qdsmOxXzT1im,ai3j k:WH'_"XyCG<CCxx'u[~<VVhLNp!)D Jl7 0 yH # g  yyyyyyyyyrrrrr@ -/M960a52828ad1a4e4D49enSemi-Slav DefenseMeran Variation, Rellstab Attackr3kb1r/5ppp/b3pn2/1p1qN3/3p4/3B4/PP2QPPP/R1B2RK1 w kq - 4 15? -/M591a0066c1f0a61aD49enSemi-Slav DefenseMeran Variation, Rellstab Attackr1b1kb1r/5ppp/4pn2/1p1qN3/3p4/3B4/PP2QPPP/R1B2RK1 b kq - 3 14> -/Mcf1c8f448fb4fd9eD49enSemi-Slav DefenseMeran Variation, Rellstab Attackr1b1kb1r/5ppp/4pn2/1p1qN3/3p4/3B4/PP3PPP/R1BQ1RK1 w kq - 2 14o$ - Y7a9bdf85d02f43b1C89enRuy LopezMarshall, Main Line, Spassky Variation5rk1/5ppp/p1pbr3/1p1n3q/P2P2b1/1BPQB1P1/1P1N1P1P/R3R1K1 w - - 1 19# -Yc6138a1069c96c44DC89enRuy LopezMarshall, Main Line, Spassky Variation5rk1/5ppp/p1pbr3/1p1n4/P2P2b1/1BPQB1Pq/1P1N1P1P/R3R1K1 b - - 0 18" -Y addaf4fc045ab98aC89enRuy LopezMarshall, Main Line, Spassky Variation5rk1/5ppp/p1pbr3/1p1n4/3P2b1/1BPQB1Pq/PP1N1P1P/R3R1K1 w - - 7 18! -Y 7ba2a069a6012ff0C89enRuy LopezMarshall, Main Line, Spassky Variation4rrk1/5ppp/p1pb4/1p1n4/3P2b1/1BPQB1Pq/PP1N1P1P/R3R1K1 b - - 6 17 -Y 22cc180b3cfc87c0C89enRuy LopezMarshall, Main Line, Spassky Variation4rrk1/5ppp/p1pb4/1p1n4/3P2b1/1BPQB1Pq/PP3P1P/RN2R1K1 w - - 5 17 -Y 838026ba4e8d0a72rC89enRuy LopezMarshall, Main Line, Spassky Variationr4rk1/5ppp/p1pb4/1p1n4/3P2b1/1BPQB1Pq/PP3P1P/RN2R1K1 b - - 4 16 -Y 23e78a76e1cf9b05C89enRuy LopezMarshall, Main Line, Spassky Variationr4rk1/5ppp/p1pb4/1p1n4/3P2b1/1BP1B1Pq/PP3P1P/RN1QR1K1 w - - 3 16 -Y 21344044a64a95efC89enRuy LopezMarshall, Main Line, Spassky Variationr1b2rk1/5ppp/p1pb4/1p1n4/3P4/1BP1B1Pq/PP3P1P/RN1QR1K1 b - - 2 15  c- Z7  y  2959??? c y - Oae53da905d14c1b0C97enRuy LopezClosed, Chigorin, Yugoslav Systemr3r1k1/2qbbp1p/p2p1np1/npp1p3/3PP3/2P1NN1P/PPB2PP1/R1BQR1K1 w - - 0 15x -O47e789cb269b53fbC97enRuy LopezClosed, Chigorin, Yugoslav Systemr3r1k1/2qbbppp/p2p1n2/npp1p3/3PP3/2P1NN1P/PPB2PP1/R1BQR1K1 b - - 6 14w -O12870b9b49fb7225%C97enRuy LopezClosed, Chigorin, Yugoslav Systemr3r1k1/2qbbppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/R1BQRNK1 w - - 5 14v +Oed6ccdb7b8b97a7C97enRuy LopezClosed, Chigorin, Yugoslav Systemr4rk1/2qbbppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/R1BQRNK1 b - - 4 13u -Obb5d197a18b8327c|C97enRuy LopezClosed, Chigorin, Yugoslav Systemr4rk1/2qbbppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13  -O5822a6647dfdbd7b{C89enRuy LopezMarshall Attack, Modern Main Liner1bq1rk1/5ppp/p1pb4/1p1n4/3P4/1BP5/PP3PPP/RNBQR1K1 b - - 2 13  -O9d0002081ef6bad7C89enRuy LopezMarshall Attack, Modern Main Liner1bq1rk1/5ppp/p1pb4/1p1nR3/3P4/1BP5/PP3PPP/RNBQ2K1 w - - 1 13 3A - /M505005b43a5b7f2c,D49enSemi-Slav DefenseMeran Variation, Rellstab Attackr3kb1r/5ppp/b3pn2/1p1qN1B1/3p4/3B4/PP2QPPP/R4RK1 b kq - 5 15  - O 523cfba827708e61aC89enRuy LopezMarshall Attack, Modern Main Liner1b2rk1/5ppp/p1pb4/1p1n4/3P4/1BP3Pq/PP3P1P/RNBQR1K1 w - - 1 15  -O 8ac3b9d2c61cedbdC89enRuy LopezMarshall Attack, Modern Main Liner1b2rk1/5ppp/p1pb4/1p1n4/3P3q/1BP3P1/PP3P1P/RNBQR1K1 b - - 0 14  -Oa625029326cb3585C89enRuy LopezMarshall Attack, Modern Main Liner1b2rk1/5ppp/p1pb4/1p1n4/3P3q/1BP5/PP3PPP/RNBQR1K1 w - - 3 14] - ;Wb967933177d7a46bkD69enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp3ppp/2p5/4q3/2B5/2R1P3/PP3PPP/3Q1RK1 w - - 0 15\ + ;W445c52c821e7283D69enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp2qppp/2p5/4N3/2B5/2R1P3/PP3PPP/3Q1RK1 b - - 0 14[ - ;W6598c8c75f11d6e0D69enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp2qppp/2p5/4n3/2B5/2R1PN2/PP3PPP/3Q1RK1 w - - 0 14Z - ;W13db44a27e603dcbD69enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p5/4P3/2B5/2R1PN2/PP3PPP/3Q1RK1 b - - 0 13 ` 88 O LE<<<<<<88>>>> ` - Sf0c7fc282d56d881C82enRuy LopezOpen Variations, Dilworth Variationr2q1rk1/2p2ppp/p1n1b3/1pbpP3/8/2P2N2/PPBN1nPP/R1BQ1RK1 w - - 0 12 -Sf0315069b1bb4cefC82enRuy LopezOpen Variations, Dilworth Variationr2q1rk1/2p2ppp/p1n1b3/1pbpP3/4n3/2P2N2/PPBN1PPP/R1BQ1RK1 b - - 4 11 *- - %c45657b95a41fbc6C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppn3pp/2p1k3/3np3/2BPQ3/P1N5/1PP2PPP/R1B1K2R w KQ - 1 12), -%667579170945b62f/C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/pp4pp/n1p1k3/3np3/2BPQ3/P1N5/1PP2PPP/R1B1K2R b KQ - 0 11*+ -%a34056bd188c9b6dmC57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/pp4pp/n1p1k3/3np3/2B1Q3/P1N5/1PPP1PPP/R1B1K2R w KQ - 1 11+* -%5cdd1c2037956ee6C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/pp4pp/2p1k3/3np3/1nB1Q3/P1N5/1PPP1PPP/R1B1K2R b KQ - 0 10*) -%97412d067ed9e0a6C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/pp4pp/2p1k3/3np3/1nB1Q3/2N5/PPPP1PPP/R1B1K2R w KQ - 0 10&( +% 53bc0e90919331dC57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp3pp/4k3/3np3/1nB1Q3/2N5/PPPP1PPP/R1B1K2R b KQ - 5 9(' -% db839ecd7fa824fcC57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp3pp/4k3/3np3/1nB5/2N2Q2/PPPP1PPP/R1B1K2R w KQ - 4 9)& -% c173a722c7dfe8c8C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp3pp/2n1k3/3np3/2B5/2N2Q2/PPPP1PPP/R1B1K2R b KQ - 3 8&% -% 3ae4bf80053d6a11C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp3pp/2n1k3/3np3/2B5/5Q2/PPPP1PPP/RNB1K2R w KQ - 2 8%$ -%3bf914e3be51b416C57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp2kpp/2n5/3np3/2B5/5Q2/PPPP1PPP/RNB1K2R b KQ - 1 7$# -%81db6fd0922ce2adC57enItalian GameTwo Knights Defense, Fegatello Attack, Leonhardt Variationr1bq1b1r/ppp2kpp/2n5/3np3/2B5/8/PPPP1PPP/RNBQK2R w KQ - 0 7` _ yL\,~_____________ 7 -C4ea803b9a8cd32c2C88enRuy LopezClosed, Leonhardt Variationrnb1k2r/2q1bppp/p2p1n2/1ppPp3/4P3/2P2N1P/PPB2PP1/RNBQR1K1 w kq - 1 13 6 -Ce545db5bb95c97c1C88enRuy LopezClosed, Leonhardt Variationr1b1k2r/2q1bppp/p1np1n2/1ppPp3/4P3/2P2N1P/PPB2PP1/RNBQR1K1 b kq - 0 12 5 -C5f4d9808207a019cC88enRuy LopezClosed, Leonhardt Variationr1b1k2r/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w kq - 1 12 4 +Ca5ab2fd8d46a396C88enRuy LopezClosed, Leonhardt Variationr1b1k2r/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 b kq - 0 11  - ;A777ea85603afa39aD28enQueen's Gambit AcceptedClassical, Flohr Variationr3kb1r/1bq2ppp/p3pn2/1p1P4/2p5/2N1PN2/PPQ2PPP/R1BR2K1 w kq - 1 14 -;A716197776fe4ec9bD28enQueen's Gambit AcceptedClassical, Flohr Variationr2qkb1r/1b3ppp/p3pn2/1p1P4/2p5/2N1PN2/PPQ2PPP/R1BR2K1 b kq - 0 13 -;A cb69d424f6c27ac6D28enQueen's Gambit AcceptedClassical, Flohr Variationr2qkb1r/1b3ppp/p3pn2/1p6/2pP4/2N1PN2/PPQ2PPP/R1BR2K1 w kq - 1 13 -;A 7bf99ca08490d55d]D28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p3pn2/1p6/2pP4/2N1PN2/PPQ2PPP/R1BR2K1 b kq - 0 12 -;A 6d2847dcf89cae9dD28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p3pn2/1p6/2pP4/2N1PN2/PPn1QPPP/R1BR2K1 w kq - 0 12 -;A1d8b5da0e21ccefcD28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p3pn2/1p6/1npP4/2N1PN2/PPB1QPPP/R1BR2K1 b kq - 3 11 -;A e61c450220fe4c25%D28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p3pn2/1p6/1npP4/4PN2/PPB1QPPP/RNBR2K1 w kq - 2 11 -;A fcec7ced98898011D28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p1n1pn2/1p6/2pP4/4PN2/PPB1QPPP/RNBR2K1 b kq - 1 10 +;Acd51a6a01dbc19dD28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p1n1pn2/1p6/2pP4/1B2PN2/PP2QPPP/RNBR2K1 w kq - 0 10 -;A d4caa00869376b10D28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p1n1pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNBR2K1 b kq - 3 9 -;A 39e890cdf1829d1fD28enQueen's Gambit AcceptedClassical, Flohr Variationr1bqkb1r/5ppp/p1n1pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9[  [ p & fNNNNNNNNNNNNNNNNNNNNyI - #3a935889305059e333C45enScotch GameRosenthal Variationr1bk2nr/pppp1ppp/2n3q1/1N6/8/8/PPPNBPPP/R2Q1RK1 w - - 1 10xH -#3e3224fbbdf6447faC45enScotch GameRosenthal Variationr1bk2nr/pppp1ppp/2n5/1N6/4q3/8/PPPNBPPP/R2Q1RK1 b - - 0 9"7 - /e8bb4c010275177ffC48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bq1rk1/ppp2ppp/1b1p1n2/4p3/N3P3/3P1B2/PPP2PPP/R1BQ1RK1 w - - 2 10!6 -/e6b4fe85a59819eeaC48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bq1rk1/ppp2ppp/3p1n2/2b1p3/N3P3/3P1B2/PPP2PPP/R1BQ1RK1 b - - 1 9!5 -/ea8db012f66a95da0C48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bq1rk1/ppp2ppp/3p1n2/2b1p3/4P3/2NP1B2/PPP2PPP/R1BQ1RK1 w - - 0 9 4 -/e9161974eb4d114cdC48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bq1rk1/pppp1ppp/5n2/2b1p3/4P3/2NP1B2/PPP2PPP/R1BQ1RK1 b - - 0 83 -/e3fc5549bf041af19C48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bq1rk1/pppp1ppp/5n2/2b1p3/4P3/2N2B2/PPPP1PPP/R1BQ1RK1 w - - 3 8 2 -/e356db92c251846f2C48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bqk2r/pppp1ppp/5n2/2b1p3/4P3/2N2B2/PPPP1PPP/R1BQ1RK1 b kq - 2 7!1 -/e4b18c21859eb9de2C48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bqk2r/pppp1ppp/5n2/2b1p3/4P3/2N2B2/PPPP1PPP/R1BQK2R w KQkq - 1 7   4 "q^-mgggggggK - /Y c4c82aa9bec06109 D89enGrünfeld DefenseExchange Variation, Sokolsky Variationr2q1rk1/pp2ppbp/4b1p1/n2P4/4P3/3BBP2/P3N1PP/R2Q1RK1 b - - 0 14B -/Y a7c0f6f5eb00ab9cD89enGrünfeld DefenseExchange Variation, Sokolsky Variationr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQ1RK1 w - - 4 10A +/Yc2d2e17fa910e9fD89enGrünfeld DefenseExchange Variation, Sokolsky Variationrnbq1rk1/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQ1RK1 b - - 3 9 -0 - 7q19cc05a8de6489ecE98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppn2bp/3p2n1/2PPp1p1/4Pp2/2N2P2/PP2BBPP/2RQNRK1 b - - 0 14-/ -7q765eeff0f07d645c\E98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppn2bp/3p2n1/3Pp1p1/2P1Pp2/2N2P2/PP2BBPP/2RQNRK1 w - - 2 14-. -7qb0e464772d02e9ccE98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p4/3Pp1p1/2P1Pp2/2N2P2/PP2BBPP/2RQNRK1 b - - 1 13-- -7q3e1a1ebd71993c82E98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p4/3Pp1p1/2P1Pp2/2N2P2/PP2BBPP/R2QNRK1 w - - 0 13,, -7qaf3b9b913185d44aJE98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p2p1/3Pp3/2P1Pp2/2N2P2/PP2BBPP/R2QNRK1 b - - 1 12-+ -7q255289ddcb333362bE98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p2p1/3Pp3/2P1Pp2/2N1BP2/PP2B1PP/R2QNRK1 w - - 0 12-* -7qaf5013411bc9c63b;E98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N1BP2/PP2B1PP/R2QNRK1 b - - 0 11,) -7qc1e1f570bb03294aJE98enKing's Indian DefenseOrthodox Variation, Classical System, Kozul Gambitr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N1B3/PP2BPPP/R2QNRK1 w - - 0 11   a+ 3 q(fffffffff #@ -mb01dca1125a20faeC92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2qr1k1/1bp1bppp/p1np1n2/1p2p3/3PP3/1BP2N1P/PP1N1PP1/R1BQR1K1 b - - 2 11!? -me9737273bf5fa79eC92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2qr1k1/1bp1bppp/p1np1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 w - - 1 11 > -mf522b5338d2f421cC92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2q1rk1/1bp1bppp/p1np1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10 }+ - O220a19c780fee812C95enRuy LopezClosed Variations, Breyer Defenser2q1rk1/1b1nbppp/p2p1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13* -Oc47bc8697fb9e36foC95enRuy LopezClosed Variations, Breyer Defenser2q1rk1/1bpnbppp/p2p1n2/1p2p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 4 12) -O3442aeeee6eba2e3C95enRuy LopezClosed Variations, Breyer Defenser2q1rk1/1bpnbppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP1N1PP1/R1BQR1K1 w - - 3 12( -O84d2e66a94b90d78xC95enRuy LopezClosed Variations, Breyer Defenser1bq1rk1/2pnbppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP1N1PP1/R1BQR1K1 b - - 2 110c - ; e1f8ab5ad42865e0D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variation, Mar del Plata Gambitrn1r2k1/ppp1qpp1/4b2p/3p4/2PP4/1Q2PN2/P4PPP/R3KB1R w KQ - 1 13 + Sc8bcddd6fde4047GC98enRuy LopezClosed Variations, Chigorin Defenser1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13 - S599ce728c2e2e24dMC98enRuy LopezClosed Variations, Chigorin Defenser1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12{ - -[e53c1e11ac8b85e2D34enTarrasch DefenseClassical Variation, Chandler Variationr2qr1k1/pp2bpp1/2n1bn1p/3p4/3N4/2N1B1P1/PP2PPBP/2RQ1RK1 w - - 4 13z --[b1848cc5e43efeeaD34enTarrasch DefenseClassical Variation, Chandler Variationr1bqr1k1/pp2bpp1/2n2n1p/3p4/3N4/2N1B1P1/PP2PPBP/2RQ1RK1 b - - 3 12  vemJ '     @   - Kb4b5d78895b5dceeC88enRuy LopezClosed Defense, Alekhine Gambitr4rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P1NQ2/PPB2PPP/R1B1R1K1 b - - 0 14f - I7c389edb972e428cC89enRuy LopezMarshall Attack, Re3 Variationr1bq1rk1/5ppp/p2b4/1p1p4/3P4/2P1R3/PP3PPP/RNBQ2K1 b - - 2 14e -I43a532e8e9909ffbC89enRuy LopezMarshall Attack, Re3 Variationr1bq1rk1/5ppp/p2b4/1p1pR3/3P4/2P5/PP3PPP/RNBQ2K1 w - - 1 14d +Ibe70a2f53066747GC89enRuy LopezMarshall Attack, Re3 Variationr1bq1rk1/4bppp/p7/1p1pR3/3P4/2P5/PP3PPP/RNBQ2K1 b - - 0 13c -Iced2258542cf4a05C89enRuy LopezMarshall Attack, Re3 Variationr1bq1rk1/4bppp/p7/1p1pR3/8/2P5/PP1P1PPP/RNBQ2K1 w - - 0 13b -I71a085b363b29372rC89enRuy LopezMarshall Attack, Re3 Variationr1bq1rk1/4bppp/p1p5/1p1BR3/8/2P5/PP1P1PPP/RNBQ2K1 b - - 0 12 -Ke222958231b60b20 C88enRuy LopezClosed Defense, Alekhine Gambitr4rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P1Nb2/PPB2PPP/R1BQR1K1 w - - 0 14 -K5357a7554b97a150PC88enRuy LopezClosed Defense, Alekhine Gambitr4rk1/2q1bppp/p2p1n2/npp1p3/3PP1b1/2P1NN2/PPB2PPP/R1BQR1K1 b - - 6 13 ~ +K637250524f7808eC88enRuy LopezClosed Defense, Alekhine Gambitr4rk1/2q1bppp/p2p1n2/npp1p3/3PP1b1/2P2N2/PPB2PPP/R1BQRNK1 w - - 5 13 } +K4e4ef3763728e64dC88enRuy LopezClosed Defense, Alekhine Gambitr1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N2/PPB2PPP/R1BQRNK1 b - - 4 12| -Kb16f3a9600412bbfC88enRuy LopezClosed Defense, Alekhine Gambitr1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N2/PPBN1PPP/R1BQR1K1 w - - 3 12{ -Kbbc7d721d518c254TC88enRuy LopezClosed Defense, Alekhine Gambitr1b1k2r/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N2/PPBN1PPP/R1BQR1K1 b kq - 2 11 eh!:W Z ||| R - 7W ed4b4fc181983f88E87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2Q/2N1nP2/PP2K2P/R5NR b - - 1 12Q -7W 7a21e69df9397943CE87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2Q/2N1nP2/PP5P/R3K1NR w KQ - 0 12P +7W 54e314022d92e5aZE87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2Q/2N1BP2/PP5P/R3KnNR b KQ - 0 11O -7W40819505a655f1bcE87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2q/2N1BP2/PP3Q1P/R3KnNR w KQ - 0 11N -7We2827cfb785cb399E87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2q/2N1BPn1/PP3Q1P/R3KBNR b KQ - 1 10M -7W9beb84d31377e3f9E87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp3/2P1P2q/2N1BPn1/PP1Q3P/R3KBNR w KQ - 0 10L -7W4e9ac38b3795dd53SE87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp2n/2P1P2q/2N1BPP1/PP1Q3P/R3KBNR b KQ - 0 9K -7W627c78cad742056bkE87enKing's Indian DefenseSämisch Variation, Bronstein Defensernb2rk1/ppp2pbp/3p2p1/3Pp2n/2P1P2q/2N1BP2/PP1Q2PP/R3KBNR w KQ - 3 9J -7W9c7bdc3d8c748d95E87enKing's Indian DefenseSämisch Variation, Bronstein Defensernbq1rk1/ppp2pbp/3p2p1/3Pp2n/2P1P3/2N1BP2/PP1Q2PP/R3KBNR b KQ - 2 8I -7Wb46393b24dcd52355E87enKing's Indian DefenseSämisch Variation, Bronstein Defensernbq1rk1/ppp2pbp/3p2p1/3Pp2n/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 1 82Yi - /W 4c0e1bc3c8a851f6D87enGrünfeld DefenseExchange Variation, Seville Variationr2q1rk1/pp2pBbp/6p1/n1p5/3PP1b1/2P1BP2/P3N1PP/R2Q1RK1 b - - 0 12h -/Wedbd4bef2049f383D87enGrünfeld DefenseExchange Variation, Seville Variationr2q1rk1/pp2ppbp/6p1/n1p5/2BPP1b1/2P1BP2/P3N1PP/R2Q1RK1 w - - 1 12g -/Wb8aa611a8d755189D87enGrünfeld DefenseExchange Variation, Seville Variationr2q1rk1/pp2ppbp/2n3p1/2p5/2BPP1b1/2P1BP2/P3N1PP/R2Q1RK1 b - - 0 11f -/Wd61b872b2dbfbef8D87enGrünfeld DefenseExchange Variation, Seville Variationr2q1rk1/pp2ppbp/2n3p1/2p5/2BPP1b1/2P1B3/P3NPPP/R2Q1RK1 w - - 6 116; - /Q 229d82b5b9ce9807B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qk2r/pp1nbpp1/2p1pn1p/7P/3P4/3Q1NN1/PPPB1PP1/2KR3R w kq - 4 13 Eh6  n >           O -/Q 30d6a2b4d0a52ec3C46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/5n2/3Pn3/4P3/2N5/PPP2PPP/R1BQKB1R w KQkq - 1 7N -/Qc08bbfff1f4a04a3C46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/2n2n2/3P4/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 6M -/Q 7a83fcac866c92feC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/2n2n2/8/3PP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 1 6(C - % 80817becbaba796foC55enItalian GameTwo Knights Defense, Max Lange Attack, Rubinstein Variationr3kb1r/ppp2ppp/2n1bP2/5qN1/2ppN3/8/PPP2PPP/R1BQR1K1 w kq - 8 12Y - /Q ace6aa57971172b8C46enFour Knights GameHalloween Gambit, Plasma Variation1rb1kbnr/pp1p1ppp/3P1qn1/1N6/5P2/8/PPP3PP/R1BQKB1R w KQk - 3 12X -/Q 2ab3e76c70b9db1bC46enFour Knights GameHalloween Gambit, Plasma Variationr1b1kbnr/pp1p1ppp/3P1qn1/1N6/5P2/8/PPP3PP/R1BQKB1R b KQkq - 2 11W -/Q de65ac2a29534de1C46enFour Knights GameHalloween Gambit, Plasma Variationr1b1kbnr/pp1p1ppp/3P1qn1/8/5P2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 11V -/Q d95d31ed4cba0e0c C46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkbnr/pp1p1ppp/3P2n1/8/5P2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 10U -/Q9882b5ffa1c08113C46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkbnr/pp1p1ppp/3p2n1/4P3/5P2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 10T -/Q 7ef16ffb4561b46foC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkbnr/pppp1ppp/3P2n1/4P3/5P2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 9S -/Q c558432c38c65859YC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkbnr/pppp1ppp/6n1/3PP3/5P2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 9R -/Q 9eb677d9953c19cfC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/5nn1/3PP3/5P2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 8Q -/Q ffcf612491223fabC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/5nn1/3P4/4PP2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 8P -/Q cdc0dfb9c934134aJC46enFour Knights GameHalloween Gambit, Plasma Variationr1bqkb1r/pppp1ppp/5n2/3Pn3/4PP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 7 bG  \ ^NGGGGGGGGGGGG)( --{ 8f482b0b8feef7a3B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqk1nr/pp2ppbp/2np2p1/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 7(' --{ 3ff416bd74a93c09 B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pp1p/2np2p1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6*& --{58604be06598ae27'B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pp1p/2np2p1/8/3pPP2/2N2N2/PPP3PP/R1BQKB1R w KQkq - 0 6,% +-{77ef1d5186cc7e1B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pp1p/2np2p1/2p5/3PPP2/2N2N2/PPP3PP/R1BQKB1R b KQkq - 0 5-$ --{c24bde7f09a5eaa3B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pp1p/2np2p1/2p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 0 5+# --{2bff8d24722a78e8B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pppp/2np4/2p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 2 4)" --{ f09b61d21acc19d5B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqkbnr/pp2pppp/2np4/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 1 4(! --{ 5b76b9300b5dbcd6B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackrnbqkbnr/pp2pppp/3p4/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 3' --{ a660c43d12cc815f_B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackrnbqkbnr/pp2pppp/3p4/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3 G - %[16eeb90c7a2c97caC54enItalian GameGiuoco Piano, Therkatz-Herzog Variationr1bq1rk1/ppp1nppN/3p4/3P4/2B1R3/8/PP3PPP/R2Q2K1 b - - 0 14 -%[7454763338da8193C54enItalian GameGiuoco Piano, Therkatz-Herzog Variationr1bq1rk1/ppp1nppp/3p4/3P2N1/2B1R3/8/PP3PPP/R2Q2K1 w - - 1 14 -%[7efc9b84ed836878xC54enItalian GameGiuoco Piano, Therkatz-Herzog Variationr1bqk2r/ppp1nppp/3p4/3P2N1/2B1R3/8/PP3PPP/R2Q2K1 b kq - 0 13 -%[ 53f7344cca584e60`C54enItalian GameGiuoco Piano, Therkatz-Herzog Variationr1bqk2r/ppp1nppp/3p4/3P2b1/2B1R3/5N2/PP3PPP/R2Q2K1 w kq - 0 13 -%[ 1a9396fcb0c1a7a7C54enItalian GameGiuoco Piano, Therkatz-Herzog Variationr1bqk2r/ppp1nppp/3p1b2/3P2B1/2B1R3/5N2/PP3PPP/R2Q2K1 b kq - 1 12 5S I . > . 5L*O -7q94931e33fcd204feE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/4ppbp/p2p1np1/n1pP4/2p5/1PN3P1/PBQNPPBP/R4RK1 w - - 0 13)N -7q517b2343228c6753SE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/4ppbp/p2p1np1/nppP4/2P5/1PN3P1/PBQNPPBP/R4RK1 b - - 1 12&7 - -{ 74ac080c2224d32e.B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr4rk1/pp2ppbp/3p1np1/q4P2/4P1P1/2N1B3/PPP1Q2P/R4RK1 b - - 0 14%6 --{d7e109daca513e333B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr4rk1/pp2ppbp/3p1np1/q4P2/4P3/2N1B3/PPP1Q1PP/R4RK1 w - - 0 14'5 --{ a799b8c8fcecb00d B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr2q1rk1/pp2ppbp/3p1np1/N4P2/4P3/2N1B3/PPP1Q1PP/R4RK1 b - - 0 13)4 --{3911337f3b6cd969iB74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr2q1rk1/pp2ppbp/3p1np1/N4P2/4P3/2N1B3/PPP1b1PP/R2Q1RK1 w - - 0 13+3 --{43409c9a7e4f4e4aJB74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr2q1rk1/pp2ppbp/3p1np1/N4P2/2b1P3/2N1B3/PPP1B1PP/R2Q1RK1 b - - 0 12,M -7q9107c946ef10fbbcE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/4ppbp/p2p1np1/nppP4/2P5/1PN3P1/P1QNPPBP/R1B2RK1 w - - 0 12.L -7qf103a35374bd4681E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/1p2ppbp/p2p1np1/n1pP4/2P5/1PN3P1/P1QNPPBP/R1B2RK1 b - - 0 11-K -7q7da5c307ae302decE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/1p2ppbp/p2p1np1/n1pP4/2P5/2N3P1/PPQNPPBP/R1B2RK1 w - - 2 11). --{1e4f60a52ef0b3311B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr2q1rk1/pp2ppbp/2npbnp1/8/4PP2/1NN1B3/PPP1B1PP/R2QK2R w KQ - 7 10)- --{4af7f2716645c8399B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bq1rk1/pp2ppbp/2np1np1/8/4PP2/1NN1B3/PPP1B1PP/R2QK2R b KQ - 6 9*, --{de86ca5c77520ef3B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bq1rk1/pp2ppbp/2np1np1/8/3NPP2/2N1B3/PPP1B1PP/R2QK2R w KQ - 5 9*+ --{d42e27eba20be718B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqk2r/pp2ppbp/2np1np1/8/3NPP2/2N1B3/PPP1B1PP/R2QK2R b KQkq - 4 8** --{a7aea412a32eadbbB74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqk2r/pp2ppbp/2np1np1/8/3NPP2/2N1B3/PPP3PP/R2QKB1R w KQkq - 3 8)) --{fc4090e70ed4ec2d-B74enSicilian DefenseDragon Variation, Classical Variation, Stockholm Attackr1bqk1nr/pp2ppbp/2np2p1/8/3NPP2/2N1B3/PPP3PP/R2QKB1R b KQkq - 2 7 he2 ^ & U}}(Q - 7q c0a60224969fff2f/E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/4pp1p/p2p1npb/n1pP4/2P5/2N3P1/PBQNPPBP/R4RK1 w - - 1 14)P -7q c0e85cd4a76920e3E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Donner Line1rbq1rk1/4ppbp/p2p1np1/n1pP4/2P5/2N3P1/PBQNPPBP/R4RK1 b - - 0 13 h - ;O a838d6d85321c043CD56enQueen's Gambit DeclinedLasker Defense, Russian Variationr4rk1/pp1bqpp1/2n1pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R2R2K1 w - - 4 14 -;O4af9288a897b1072rD56enQueen's Gambit DeclinedLasker Defense, Russian Variationr1b2rk1/pp2qpp1/2n1pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R2R2K1 b - - 3 13 -;O a7db184f11cee67d}D56enQueen's Gambit DeclinedLasker Defense, Russian Variationr1b2rk1/pp2qpp1/2n1pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R4RK1 w - - 2 13 +;O c36c0ad005f437e~D56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/pp2qpp1/4pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R4RK1 b - - 1 12 -;O 7243bb997cac986enD56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/pp2qpp1/4pn1p/2p5/2BP4/2N1PN2/PPQ2PPP/R3K2R w KQ - 0 12 -;O 94326a3783eb9313D56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/ppp1qpp1/4pn1p/8/2BP4/2N1PN2/PPQ2PPP/R3K2R b KQ - 0 11 -;O dd885e5cbcd890d8D56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/ppp1qpp1/4pn1p/8/2pP4/2NBPN2/PPQ2PPP/R3K2R w KQ - 0 11~ +;O f8e676eeee67e3b;D56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/ppp1qpp1/4pn1p/3p4/2PP4/2NBPN2/PPQ2PPP/R3K2R b KQ - 3 10} -;O5a83c6ccd766bc48HD56enQueen's Gambit DeclinedLasker Defense, Russian Variationrnb2rk1/ppp1qpp1/4pn1p/3p4/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 2 10k - /W7ec069fa27e6f754TD89enGrünfeld DefenseExchange Variation, Spassky Variationr2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1 w - - 1 14j - /Wd07d17b687f107bfD89enGrünfeld DefenseExchange Variation, Spassky Variationr2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 0 13i - /W 7ccbc2fae3590b99D89enGrünfeld DefenseExchange Variation, Spassky Variationr2q1rk1/pp2ppbp/6p1/n7/3pP1b1/2PBBP2/P3N1PP/R2Q1RK1 w - - 0 13h - /W 23d578cf9ead625f_D89enGrünfeld DefenseExchange Variation, Spassky Variationr2q1rk1/pp2ppbp/6p1/n1p5/3PP1b1/2PBBP2/P3N1PP/R2Q1RK1 b - - 2 12  8 P-  |r-BBBBBB  -+92f40e64a80d19d5c\E08enCatalan OpeningClosed, Spassky Gambitr2q1rk1/pb1nbppp/1pp1pn2/3p4/2PP4/1P3NP1/P1Q1PPBP/RNBR2K1 w - - 2 10  -+99fd0aecef28332c7E08enCatalan OpeningClosed, Spassky Gambitr1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/1P3NP1/P1Q1PPBP/RNBR2K1 b - - 1 9 -+A6dfa79ad5ecbfc87E09enCatalan OpeningClosed, Sokolsky Variationr1bq1rk1/3nbppp/1pp1pn2/p2p4/2PP4/1P3NP1/PBQNPPBP/R4RK1 b - - 1 10 -+Aad8693a893576068hE09enCatalan OpeningClosed, Sokolsky Variationr1bq1rk1/3nbppp/1pp1pn2/p2p4/2PP4/1P3NP1/P1QNPPBP/R1B2RK1 w - - 0 10 -+A2b9c2669f0cb6cf8E09enCatalan OpeningClosed, Sokolsky Variationr1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/1P3NP1/P1QNPPBP/R1B2RK1 b - - 0 9O -+9 af6e0b81961e07cdE08enCatalan OpeningClosed, Spassky Gambitrnbqk2r/ppppbppp/4pn2/8/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4 -+9 1a9e28fcdbf3dfb4E08enCatalan OpeningClosed, Spassky Gambitrnbqk2r/ppppbppp/4pn2/8/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4 - +Aa2ea2b4915eafe79yE09enCatalan OpeningClosed, Sokolsky Variationr2q1rk1/3nbppp/bpp1pn2/p2p4/2PP4/1P3NP1/PBQNPPBP/R4RK1 w - - 2 11/y - 7ua04f2573613620399E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1p3pbp/p2p1np1/n1pPp3/2P5/2N3P1/PPQNPPBP/R1B2RK1 w - e6 0 11/x -7ue50668e7f80e9a86E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1p2ppbp/p2p1np1/n1pP4/2P5/2N3P1/PPQNPPBP/R1B2RK1 b - - 1 101w -7u542589225858cf80E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1p2ppbp/p2p1np1/n1pP4/2P5/2N3P1/PP1NPPBP/R1BQ1RK1 w - c6 0 10/v -7ub26ecb54159fad9fE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1pp1ppbp/p2p1np1/n2P4/2P5/2N3P1/PP1NPPBP/R1BQ1RK1 b - - 2 9.u -7u6f4c50b3d7229315E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1pp1ppbp/p2p1np1/n2P4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 1 9.t -7u3a5b7a467a1e311fE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Blockade Liner1bq1rk1/1pp1ppbp/p1np1np1/3P4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8#  -+972f29e0b6a36c4c8E08enCatalan OpeningClosed, Spassky Gambitr1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/1P3NP1/P1Q1PPBP/RNB2RK1 w - - 0 9 hh f : yTOOOX 9 - C97854b06a6846578xC88enRuy LopezClosed, Leonhardt Variationrnb1k2r/2q1bp1p/p2p1n2/1ppPp1p1/4P3/2P2N1P/PPBN1PP1/R1BQR1K1 w kq - 0 14 8 -C17c6bbdb32309af2C88enRuy LopezClosed, Leonhardt Variationrnb1k2r/2q1bppp/p2p1n2/1ppPp3/4P3/2P2N1P/PPBN1PP1/R1BQR1K1 b kq - 2 13 s(i -%{cc88eb6259adefc3C55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variationr3k2r/ppp2ppp/2n1bPq1/2b3N1/2pp2P1/2N5/PPP2P1P/R1BQR1K1 w kq - 1 12(h -%{90b83062baba75d9C55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variationr3k2r/ppp2ppp/2n1bP2/2b2qN1/2pp2P1/2N5/PPP2P1P/R1BQR1K1 b kq - 0 11S - ]1d01c537cbf326d9C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/8/2p1P3/3B4/2N5/PPP1QPPP/R3R1K1 w - - 0 14R -]91dcdfdcec537b16C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p5/4P3/3B4/2N5/PPP1QPPP/R3R1K1 b - - 0 13Q -] 13e4bc90ddcb1c5aZC67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p5/4P3/3n4/2N1B3/PPP1QPPP/R3R1K1 w - - 0 13P -] 2b49d7406de26145EC67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p1n3/4P3/3N4/2N1B3/PPP1QPPP/R3R1K1 b - - 8 12O -] 58416cacecd87acbC67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p1n3/4P3/3N4/2N5/PPP1QPPP/R1B1R1K1 w - - 7 12N -] 75c73b7326813312C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p5/2n1P3/3N4/2N5/PPP1QPPP/R1B1R1K1 b - - 6 11M +] ba0a17fe4598bddC67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/p1ppbppp/2p5/2n1P3/8/2N2N2/PPP1QPPP/R1B1R1K1 w - - 5 11L -] d9b59b195f932c6foC67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/pnppbppp/2p5/4P3/8/2N2N2/PPP1QPPP/R1B1R1K1 b - - 4 10K -]5d019592d83b877b{C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bq1rk1/pnppbppp/2p5/4P3/8/2N2N2/PPP1QPPP/R1B2RK1 w - - 3 10J -]57a978250d626e90C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bqk2r/pnppbppp/2p5/4P3/8/2N2N2/PPP1QPPP/R1B2RK1 b kq - 2 9 b m  Y $A!M - K30179a999ce66f5e^C92enRuy LopezClosed Variations, Flohr Systemr2q1rk1/1bp1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10Iq - Qdc7d8cf58ad1938cC89enRuy LopezMarshall Attack, Steiner Variationr1bq1rk1/2p1bppp/p1n2n2/1p1P4/4p3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 10p -Qf37bb19bb8d44c7azC89enRuy LopezMarshall Attack, Steiner Variationr1bq1rk1/2p1bppp/p1n2n2/1p1Pp3/8/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 9 P_ - [af92ea3b7a5b2a9fC91enRuy LopezClosed Variations, Bogoljubov Variationr2q1rk1/2p1bppp/p1np1n2/1p2p3/3PP1b1/1BP2N2/PP3PPP/RNBQR1K1 w - - 1 10 ; - Ud43f40c9a601bbcdC92enRuy LopezClosed Variations, Kholmov Variationr2q1rk1/2p1bppp/p1npbn2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10) - M79c0d1bb4378c9300C92enRuy LopezClosed Variations, Keres Defenser1bq1rk1/2pnbppp/p1np4/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 - O9cd6155ddcc42547GC92enRuy LopezClosed Variations, Zaitsev Systemr1bqr1k1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 - M2cbcb085c52fb180C92enRuy LopezClosed Variations, Keres Defenser1bq1rk1/2p1bppp/2np1n2/pp2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10$s - Q1270997b796089d0C93enRuy LopezClosed Variations, Smyslov Defenser1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10a - I2b6a0affff2565c6C94enRuy LopezMorphy Defense, Breyer Defensernbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 ! Yv%YkA # !*! - %S b7ca61f4b0fd7a04C51enItalian GameEvans Gambit, Mortimer-Evans Gambitr2q2nr/pppb1kpp/1b1p4/n7/3PP3/2N2N2/P1Q2PPP/R1B2RK1 w - - 0 14 --Qab223d916c336f377B74enSicilian DefenseDragon, Classical, Bernard Defensernbqkbnr/pp1ppp1p/6p1/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4"m - %{ fc3a257853bd644dMC55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variation2kr3r/ppp2ppp/1bn1bPq1/6N1/2ppNPP1/8/PPP4P/R1BQR1K1 w - - 1 14#l -%{ cf0cb0261cab3077wC55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variationr3k2r/ppp2ppp/1bn1bPq1/6N1/2ppNPP1/8/PPP4P/R1BQR1K1 b kq - 0 13&k -%{321acd2b053a0dfeC55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variationr3k2r/ppp2ppp/1bn1bPq1/6N1/2ppN1P1/8/PPP2P1P/R1BQR1K1 w kq - 3 13'j -%{d2e1e5617beae4ebC55enItalian GameTwo Knights Defense, Max Lange Attack, Berger Variationr3k2r/ppp2ppp/2n1bPq1/2b3N1/2ppN1P1/8/PPP2P1P/R1BQR1K1 b kq - 2 12 ! - -Q 835cb356d9b78ffaB74enSicilian DefenseDragon, Classical, Bernard Defenser2q1rk1/pp2ppbp/5np1/n2p1P2/4P3/1NNPB3/PP4PP/R2Q1RK1 w - - 0 14 --Q c75a2189383c0db8B74enSicilian DefenseDragon, Classical, Bernard Defenser2q1rk1/pp2ppbp/3p1np1/n4P2/4P3/1NNPB3/PP4PP/R2Q1RK1 b - - 0 13 --Q 789b5448ee13a8f5B74enSicilian DefenseDragon, Classical, Bernard Defenser2q1rk1/pp2ppbp/3p1np1/n4P2/4P3/1NNbB3/PPP3PP/R2Q1RK1 w - - 0 13 +-Q b5b11c6032bac78xB74enSicilian DefenseDragon, Classical, Bernard Defensernbqkb1r/pp1ppp1p/5np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 --Qf0cc0964c1c92ea1B74enSicilian DefenseDragon, Classical, Bernard Defensernbqkb1r/pp1ppp1p/5np1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 --Q ccb660cc7d02fd19B74enSicilian DefenseDragon, Classical, Bernard Defensernbqkbnr/pp1ppp1p/6p1/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 7 b Qt! G kAAAAAA776 + i6825d1dbf168b8bC99enRuy LopezMorphy Defense, Chigorin Defense, Panov Systemr1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13  + /m 73aa110147d1865eD47enSemi-Slav DefenseMeran Variation, Wade Variation, Kaidanov Gambitr2qkb1r/pb1n1ppp/4p3/3nP3/Np1N4/3B4/PP3PPP/R1BQ1RK1 b kq - 0 13 -/U ed1b7c43453b3853SD49enSemi-Slav DefenseMeran Variation, Stahlberg Variationr1bqkb1r/5ppp/p3pn2/1N2N3/3p4/3B4/PP3PPP/R1BQK2R b KQkq - 0 12: - ;W3e5fc9fd6483b6dfD68enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PPQ2PPP/5RK1 b - - 1 13S - ;Wa2b4512936c1291bD68enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/1Q3RK1 b - - 1 13d=7 - iaa348851dbbe87adC99enRuy LopezMorphy Defense, Chigorin Defense, Panov Systemr1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13# -/m60aefc4d054c8a4bKD47enSemi-Slav DefenseMeran Variation, Wade Variation, Kaidanov Gambitr2qkb1r/pb1n1ppp/4p3/3nP3/Np1p4/3B1N2/PP3PPP/R1BQ1RK1 w kq - 0 13% -/m3fb0467878b8e38dD47enSemi-Slav DefenseMeran Variation, Wade Variation, Kaidanov Gambitr2qkb1r/pb1n1ppp/4p3/2pnP3/Np1P4/3B1N2/PP3PPP/R1BQ1RK1 b kq - 2 12 |=}f +3 7f768690e5b25d5C83enRuy LopezOpen, Tarrasch Trapr4rk1/2pqbppp/p1n1b3/1p1pP3/3Nn3/1BP5/PP3PPP/RNBQR1K1 w - - 5 12P - S7368ef0d8cc2172b+C98enRuy LopezClosed Variations, Chigorin Defenser1b2rk1/2q1bppp/p1np1n2/1pP1p3/4P3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 0 13 - /U d499fbdd778f6516D49enSemi-Slav DefenseMeran Variation, Stahlberg Variationr1bqkb1r/5ppp/4pn2/1p2N3/3p4/3B1Q2/PP3PPP/R1B1K2R b KQkq - 1 13 -/U6ebb80ee5bf233adD49enSemi-Slav DefenseMeran Variation, Stahlberg Variationr1bqkb1r/5ppp/4pn2/1p2N3/3p4/3B4/PP3PPP/R1BQK2R w KQkq - 0 13l - /M10cefbda2701e8bdD49enSemi-Slav DefenseMeran Variation, Sozin Variationr1bqkb1r/5ppp/4pn2/1p2N3/3p4/3B4/PP3PPP/R1BQ1RK1 b kq - 1 13 FM{i - 3 e69df64ecf695d7d}C83enRuy LopezOpen, Tarrasch Trapr4rk1/2pqb1pp/p1n1p3/1p1pP3/4R3/1BP5/PP3PPP/RNBQ2K1 b - - 0 13}h -3 88278c8b69cec99aC83enRuy LopezOpen, Tarrasch Trapr4rk1/2pqb1pp/p1n1p3/1p1pP3/4n3/1BP5/PP3PPP/RNBQR1K1 w - - 0 13|g -3 d0fc8ba7c6726654TC83enRuy LopezOpen, Tarrasch Trapr4rk1/2pqbppp/p1n1N3/1p1pP3/4n3/1BP5/PP3PPP/RNBQR1K1 b - - 0 12~ -%W 78af4c7892254423#C56enItalian GameTwo Knights Defense, Yurdansky Attackr3kb1r/ppp2pp1/2n1b2p/q7/3pN2B/5N2/PPP2PPP/R2QR1K1 b kq - 1 11} -%W 222024bb619b66b8C56enItalian GameTwo Knights Defense, Yurdansky Attackr3kb1r/ppp2pp1/2n1b2p/q5B1/3pN3/5N2/PPP2PPP/R2QR1K1 w kq - 0 11| -%W b0d76fddf64f2fadC56enItalian GameTwo Knights Defense, Yurdansky Attackr3kb1r/ppp2ppp/2n1b3/q5B1/3pN3/5N2/PPP2PPP/R2QR1K1 b kq - 2 10 Fg7  Z  ^ sF - /+39b3e62fe28c4b6ajD48enSemi-Slav DefenseMeran Variationr1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9P - /Uff40cd9d87a66969iD86enGrünfeld DefenseExchange, Simagin's Lesser Variationrnbq1rk1/p1p1ppbp/1p4p1/8/2BPP3/2P5/P3NPPP/R1BQK2R w KQ - 0 9O -/U9429848d7925def2D86enGrünfeld DefenseExchange, Simagin's Lesser Variationrnbq1rk1/ppp1ppbp/6p1/8/2BPP3/2P5/P3NPPP/R1BQK2R b KQ - 4 8N -/U808d6f42510ed30c D86enGrünfeld DefenseExchange, Simagin's Lesser Variationrnbq1rk1/ppp1ppbp/6p1/8/2BPP3/2P5/P4PPP/R1BQK1NR w KQ - 3 8r" - ;]601195726efa180a D58enQueen's Gambit DeclinedTartakower Variation, Exchange Variationrnbq1rk1/p1p1bpp1/1p3n1p/3p4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9$ -;]5f054cb6745fd8c1D58enQueen's Gambit DeclinedTartakower Variation, Exchange Variationrnbq1rk1/p1p1bpp1/1p2pn1p/3P4/3P3B/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 8+ - ;mc0eb36fbcbbac59dD59enQueen's Gambit DeclinedTartakower Defense, Makogonov Exchange Variationrnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9!p - ;S4fd267dfadf4bed8D64enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R w K - 0 9 ` - ;Sa72ddab3f89dcbfeD64enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/pp1nbppp/2p1p3/3p2B1/2PPn3/2N1PN2/PPQ2PPP/2R1KB1R w K - 2 9 @ - /m3fc45c6f68b47bf1D86enGrünfeld DefenseExchange Variation, Simagin's Improved Variationr1bq1rk1/ppp1ppbp/2n3p1/8/2BPP3/2P5/P3NPPP/R1BQK2R w KQ - 5 90 - /U89bac15b80830bbdD86enGrünfeld DefenseExchange Variation, Larsen Variationrnb2rk1/pppqppbp/6p1/8/2BPP3/2P5/P3NPPP/R1BQK2R w KQ - 5 9 - /W725855238662d58fD87enGrünfeld DefenseExchange Variation, Spassky Variationrnbq1rk1/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQ - 2 9 - /W78f0b894533b3c64dD87enGrünfeld DefenseExchange Variation, Spassky Variationrnbqk2r/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R b KQkq - 1 8 - /W6c54535b7b10319aD87enGrünfeld DefenseExchange Variation, Spassky Variationrnbqk2r/pp2ppbp/6p1/2p5/2BPP3/2P5/P4PPP/R1BQK1NR w KQkq - 0 8 @ zjC  t 6==.b -;b540398e9c9d1ee8D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variation, Mar del Plata Gambitrnbr2k1/ppp1qpp1/7p/3p4/2PP4/1Q2PN2/P4PPP/R3KB1R b KQ - 0 12-a -;b76f7898a0c53f60`D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variation, Mar del Plata Gambitrnbr2k1/ppp1qpp1/7p/3p4/3P4/1QP1PN2/P4PPP/R3KB1R w KQ - 2 12: -%U bf4c4fc20ab9deb6C51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2qk1nr/pppb1ppp/1bnp4/8/2BPP3/1QN2N2/P4PPP/R1B2RK1 b kq - 6 11 -%U afc7779f509b0122"C51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2qk1nr/pppb1ppp/1bnp4/8/Q1BPP3/2N2N2/P4PPP/R1B2RK1 w kq - 5 11 GQ - %W ac0db539421c8825%C56enItalian GameTwo Knights Defense, Yurdansky Attackr4b1r/ppp1kp2/2n1bN1p/q5p1/1P1p3B/5N2/P1P2PPP/R2QR1K1 b - - 0 13 + %W 6f8c095e4aae401C56enItalian GameTwo Knights Defense, Yurdansky Attackr4b1r/ppp1kp2/2n1bN1p/q5p1/3p3B/5N2/PPP2PPP/R2QR1K1 w - - 2 13 -%W 91fe5e7dcb533357WC56enItalian GameTwo Knights Defense, Yurdansky Attackr3kb1r/ppp2p2/2n1bN1p/q5p1/3p3B/5N2/PPP2PPP/R2QR1K1 b kq - 1 12 -%W f8ecbca50691bba9C56enItalian GameTwo Knights Defense, Yurdansky Attackr3kb1r/ppp2p2/2n1b2p/q5p1/3pN2B/5N2/PPP2PPP/R2QR1K1 w kq - 0 12K - ;W8f46bbe076558abbD68enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/3Q1RK1 w - - 0 13J - ;W8b9f673152b567d6D68enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2R1PN2/PP3PPP/3Q1RK1 b - - 0 12I - ;W 969913a34b8928b5D68enQueen's Gambit DeclinedOrthodox Defense, Classical Variationr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2n1PN2/PP3PPP/2RQ1RK1 w - - 0 123 - y 22e739c96f9e52fcE87enKing's Indian, Sämisch, Orthodox, Bronstein Variationrnb2rk1/ppp2pbp/3p2p1/3Pp3/2n1P2Q/2N2P2/PP2K2P/R5NR w - - 0 13 - %U 1b2a6f7e9fd8bb8aC51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2q1knr/pppb1Bpp/1b1p4/n7/3PP3/2N2N2/P1Q2PPP/R1B2RK1 b - - 2 13 - %U 681c98711712aa01C51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2q1knr/pppb1Bpp/1b1p4/n7/3PP3/1QN2N2/P4PPP/R1B2RK1 w - - 1 13 -%U 4be8351b4f64dec9C51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2qk1nr/pppb1Bpp/1b1p4/n7/3PP3/1QN2N2/P4PPP/R1B2RK1 b kq - 0 12 -%U ea5b6537a7857cbcC51enItalian GameEvans Gambit, Fraser-Mortimer Attackr2qk1nr/pppb1ppp/1b1p4/n7/2BPP3/1QN2N2/P4PPP/R1B2RK1 w kq - 7 12 kkyk ] M );;;;;; )kkkkkkkkkk -3+55460925d818f4eeE11enBogo-Indian DefenseMonticelli Traprn1qk2r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP1bPPBP/RN1QK2R w KQkq - 0 7eG/ - ;? 6d31de153239efc6D57enQueen's Gambit DeclinedLasker Defense, Main Linernb2rk1/ppp1qpp1/4p2p/3P4/3P4/2n1PN2/PP3PPP/R2QKB1R w KQ - 0 10. - ;? dfb86383d53719cbD57enQueen's Gambit DeclinedLasker Defense, Main Linernb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9   - ;Uba3e0b1a697259f0D67enQueen's Gambit DeclinedOrthodox Defense, Janowski Variationr1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP3P/2N1PN2/PP3PP1/2RQK2R b K - 0 10 - 3+e770bb08e46506a7E11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2p3/6N1/2PP4/2n3P1/PPQ1PPBP/R3K2R b KQ - 1 10 -3+ b1a25add4da9fe03E11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R3K2R w KQ - 0 10 +3+ 32be74baaa7080eE11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R3K2R b KQ - 4 9 -3+ 62fcfc73d6ef6ec3E11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2p3/8/2PPn3/2N2NP1/PP1QPPBP/R3K2R w KQ - 3 9 -3+ 58f4b0ec64a6e3399E11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2pn2/8/2PP4/2N2NP1/PP1QPPBP/R3K2R b KQ - 2 8 -3+ a363a84ea64461e0E11enBogo-Indian DefenseMonticelli Traprn1q1rk1/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP1QPPBP/RN2K2R w KQ - 1 8 -3+ a9cb45f9731d880b E11enBogo-Indian DefenseMonticelli Traprn1qk2r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP1QPPBP/RN2K2R b KQkq - 0 7  _ y Q $ Z! ]lT --_7c841ef460a4014cLD34enTarrasch DefenseClassical Variation, Bogoljubov Variationrnbqkb1r/pp3ppp/5n2/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6S --_ 5062a5b58073d974tD34enTarrasch DefenseClassical Variation, Bogoljubov Variationrnbqkb1r/pp3ppp/5n2/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6q - ;A75fdf63f05fe2049ID34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr2q1rk1/p3bppp/1pn1bn2/2pp2B1/3P4/2N2NP1/PP2PPBP/2RQ1RK1 w - - 0 11p -;A1e94bf2ffb7d97d2D34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr2q1rk1/pp2bppp/2n1bn2/2pp2B1/3P4/2N2NP1/PP2PPBP/2RQ1RK1 b - - 10 10 k -;A f3b7f5124862896enD34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr1bqk2r/pp2bppp/2n2n2/2pp4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w kq - 5 8j -;A e77b86fd82c925ffD34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b kq - 4 7i -;A 990efdc9fe3afeefD34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 7h -;A c2e0c93c53c0bf79yD34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr1bqkbnr/pp3ppp/2n5/2pp4/3P4/5NP1/PP2PPBP/RNBQK2R b KQkq - 2 6g -;A 7710ea411e2d6700D34enQueen's Gambit DeclinedTarrasch, Stoltz Variationr1bqkbnr/pp3ppp/2n5/2pp4/3P4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 6f -;Adcfd32a30fbcc203D34enQueen's Gambit DeclinedTarrasch, Stoltz Variationrnbqkbnr/pp3ppp/8/2pp4/3P4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5S] - -_c68b054d93913d5f_D34enTarrasch DefenseClassical Variation, Bogoljubov Variationr2q1rk1/pp2bppp/2n1bn2/3p2B1/2pP4/2N2NP1/PP2PPBP/2RQ1RK1 w - - 0 11  mxm?*R  k Rm% -/-56868f3fb1cc8f09 D44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4pp1/2p1pn1p/1p2P1B1/2pP4/2N2N2/PP3PPP/R2QKB1R w KQkq - 0 8$ -/-c471c4592618c61cD44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4ppp/2p1pn2/1p2P1B1/2pP4/2N2N2/PP3PPP/R2QKB1R b KQkq - 0 7# -/-a508d2a42206e078xD44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4ppp/2p1pn2/1p4B1/2pPP3/2N2N2/PP3PPP/R2QKB1R w KQkq - 0 7 'I -%edb51fbf95741d108D19enSlav DefenseCzech Variation, Classical System, Main Linern1q1rk1/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 w - - 3 99 - -[c4d25731ef533994D34enTarrasch DefenseClassical Variation, Carlsbad Variationr1bq1rk1/pp2bppp/2n2n2/2pp2B1/3P4/2N2NP1/PP2PPBP/R2Q1RK1 b - - 6 9U -9M 799030bae1db612c,D00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitrnbqkb1r/ppp2ppp/4pn2/6B1/3P4/2N2N2/PPP3PP/R2QKB1R b KQkq - 1 6J - %e4d5774db19058a8cD19enSlav DefenseCzech Variation, Classical System, Main Linern1q1rk1/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P2QPPP/R1B2RK1 b - - 4 9( - /-efed90774bab7787D44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4p2/2p1pn1p/1p2P1N1/2pP3B/2N5/PP3PPP/R2QKB1R b KQkq - 0 9' -/-8c4a1721d6c65218D44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4p2/2p1pn1p/1p2P1p1/2pP3B/2N2N2/PP3PPP/R2QKB1R w KQkq - 0 9& +/-c09e7fc4272ad92D44enSemi-Slav DefenseBotvinnik Systemrnbqkb1r/p4pp1/2p1pn1p/1p2P3/2pP3B/2N2N2/PP3PPP/R2QKB1R b KQkq - 1 8+ - ;i61ed25f7d0eb4bf7D52enQueen's Gambit DeclinedCambridge Springs Defense, Argentine Variationr1b2rk1/pp1n1ppp/2p1pn2/q2p4/1bPP3B/2N1P3/PPQN1PPP/R3KB1R b KQ - 7 9+ -;i3b624d342355696clD52enQueen's Gambit DeclinedCambridge Springs Defense, Argentine Variationr1b2rk1/pp1n1ppp/2p1pn2/q2p2B1/1bPP4/2N1P3/PPQN1PPP/R3KB1R w KQ - 6 9 X -9M93bc3a150361aacdD00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitr1bqk2r/ppp1bppp/2n1pn2/6B1/3P4/2NB1N2/PPP3PP/R2QK2R w KQkq - 4 8W -9M 3851e2f712f00fceD00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitrnbqk2r/ppp1bppp/4pn2/6B1/3P4/2NB1N2/PPP3PP/R2QK2R b KQkq - 3 7V -9M 6d5c43552b70cdbdD00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitrnbqk2r/ppp1bppp/4pn2/6B1/3P4/2N2N2/PPP3PP/R2QKB1R w KQkq - 2 7_  o 0  i6NHHHHHHi -%k33f531b452cf98c4C55enItalian GameScotch Gambit, Max Lange Attack, Long Variationr3k2r/ppp2ppp/2n1bP2/2b2qN1/2pp4/2N5/PPP2PPP/R1BQR1K1 w kq - 6 11h -%kcd8be0db1bb7bf76vC55enItalian GameScotch Gambit, Max Lange Attack, Long Variationr3k2r/ppp2ppp/2n1bP2/2bq2N1/2pp4/2N5/PPP2PPP/R1BQR1K1 b kq - 5 10g -%k 361cf879d9553dafC55enItalian GameScotch Gambit, Max Lange Attack, Long Variationr3k2r/ppp2ppp/2n1bP2/2bq2N1/2pp4/8/PPP2PPP/RNBQR1K1 w kq - 4 10 @ - If00b41b6aa8c1d0d C80enRuy LopezOpen Variations, Karpov Gambitr2qkb1r/2p2ppp/p1n1b3/1pn1P1N1/3p4/1BP5/PP1N1PPP/R1BQ1RK1 b kq - 1 11 6U -  %a b6768e18f7881b01C56enItalian GameScotch Gambit, Anderssen Attack, Main Liner3kb1r/ppp2ppp/2n1b3/3q2B1/3pN3/5N2/PPP2PPP/R2QR1K1 b kq - 4 11T -%a a177a5317a442ec4C56enItalian GameScotch Gambit, Anderssen Attack, Main Liner3kb1r/ppp2ppp/2n1b3/3q4/3pN3/5N2/PPPB1PPP/R2QR1K1 w kq - 3 11S -%a5f00625ed4a49f61aC56enItalian GameScotch Gambit, Anderssen Attack, Main Liner3kb1r/ppp2ppp/2n1b3/q7/3pN3/5N2/PPPB1PPP/R2QR1K1 b kq - 2 10R -%a768d38eb46c5f465eC56enItalian GameScotch Gambit, Anderssen Attack, Main Liner3kb1r/ppp2ppp/2n1b3/q7/3pN3/5N2/PPP2PPP/R1BQR1K1 w kq - 1 10Q -%a2235aa3f0e708f6dmC56enItalian GameScotch Gambit, Anderssen Attack, Main Liner1b1kb1r/ppp2ppp/2n5/q7/3pN3/5N2/PPP2PPP/R1BQR1K1 b kq - 0 9P -%a d373a17f24c126f9C56enItalian GameScotch Gambit, Anderssen Attack, Main Liner1b1kb1r/ppp2ppp/2n5/q7/3pn3/2N2N2/PPP2PPP/R1BQR1K1 w kq - 2 96 |vpjd^XRLF@:4-& \%|SD=ysmga[UOIC=71+%   { t m f _ X Q J C < 5 . '    | t l dkD<rj ] V O H A : 3 , %      { t m f _ X Q J C < 5 . '    } u m e ] U M E = 5 - %   L4zb%  { t m f _ X Q J C < 5 - %   s,Z5zsle^WPIB;4-& c-{tmf_XQJC<5.'  wogTK`YRKD=6/(! ,% {xk\V-{XO"S ]\?>teWS0'uoi\i3gfeXaaFY?XUF,B?{>=;. "I"nAm}}{{y>uhhf_XMGG A>8H43l200],*&&^!VC0t;ZpZ>VM0F0~|{%v tHnmjhgxc YVPM,JJzGA==Z50:%$w?:gXoL=~}vqoja`^AYNNGG>:N9i6v100//_%Ydl+Rot_B~{}}||wvwOvv7rqqmgdao_ROMBD5 43k22+@(f :  QQ}v|ssDqjca`0^]XVzROHEE<"<9R9,#"SH   ojAp"1HE~k~@~v(tppQjEi]f`VMV OLLFBA@??94=412-#'"e!u!H PcV   I   ~~ s s p n m e' W V O OW M L J G( @ 9 /7  X   H  j   U  +y#1SO~~~b~||zvr;qq onMmibr`aYX{RfJRI:D* )&~&C1  K q[~vng`YRKD=6/}vohaZSLE>70)"  C3y}vohaZSLE>70)"}ume]Uc;KNG@92+$|ung_WOG?7/'+'q | u n g ` Y R K D = 6 / ( !    {sS# y r k d ] V O H A : 3 , %      } v o h a Z S L E > 7 0 ) "     { t m f _ X Q J C < 5 . '    k z s l e ^ W P I B ; 4 - &    zsle^WPIB;4-&  G ^5~`zyyMU   P  } x o A <  U          ; 'c ba b( _  U~ BQ :% 9 9 3 '^ & #  ;  Q E ) W     c @  \ K     ~ ~ | x u t s pt o n/ n k) k# j j  i= ] Y% R J ?O 7 . !  ]        p Z W     %   {  ' _  K/U;(!f~z\hgjfeb`^[ZIY+UQSGCCN=33/&8%[{azxbqhh^YIPOONLL KHB>+$~hvQa[iLt'~a~7}zzwwYvd`XPOYO4L>+/)B%" !VEf?~,~||q[SOfN%A?c=,9"y 9  #     ]  } | x t q he _ [ XM V R J H G E E# ? ; 2x 0 )E $ !S > U  5  @ 5       E i         s g ~ z x s s pW l  `] X< L G C @ @ >1  @ ; :} 9 9 07 - + #"  K       6  _ F      }   { z x v o n i h_ d+  dd[Bhhhhhhhhdddddd!A -ma4d1b9feef09a33f?C92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2qrbk1/1bp2ppp/p1np1n2/1p2p3/3PP3/1BP2N1P/PP1N1PP1/R1BQR1K1 w - - 3 12 q[ - Y f7c70eacda0a9e5aZC81enRuy LopezOpen, Howell Attack, Ekstrom Variationr4rk1/2pqbppp/p1n1b3/3pP3/2B1n3/5N2/PP2QPPP/RNBR2K1 w - - 1 13Z -Y ea544b7a23ac4b15C81enRuy LopezOpen, Howell Attack, Ekstrom Variationr2q1rk1/2p1bppp/p1n1b3/3pP3/2B1n3/5N2/PP2QPPP/RNBR2K1 b - - 0 12Y -Ya4825c13295d89e6C81enRuy LopezOpen, Howell Attack, Ekstrom Variationr2q1rk1/2p1bppp/p1n1b3/3pP3/2p1n3/1B3N2/PP2QPPP/RNBR2K1 w - - 0 12X -Y616a6163f703ea4bKC81enRuy LopezOpen, Howell Attack, Ekstrom Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/2P1n3/1B3N2/PP2QPPP/RNBR2K1 b - - 0 11W -Yed49fe47b40c414cLC81enRuy LopezOpen, Howell Attack, Ekstrom Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNBR2K1 w - - 5 11V -Ye7e113f06155a8a7C81enRuy LopezOpen, Howell Attack, Ekstrom Variationr2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNBR2K1 b kq - 4 10D"C - mfdbac3be3191646ajC92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2qrbk1/1bp2pp1/p1np1n1p/1p2p3/3PP3/PBP2N1P/1P1N1PP1/R1BQR1K1 w - - 0 13!B -m6f4d88d8a6452d7fC92enRuy LopezClosed Variations, Smyslov-Breyer-Zaitsev Hybridr2qrbk1/1bp2ppp/p1np1n2/1p2p3/3PP3/PBP2N1P/1P1N1PP1/R1BQR1K1 b - - 0 12 g! n ,C nnnnDD  - ;?c5f6ff7900b2073c6.&x | u n g ` Y R K D = 6 / ( !   w'hzsle^WPIB;4,${tme]UME?>70)" zsle^WPIB;4-& _/p{tmf_XQJC<5.'   O7 } v o h a Z S L E > 7 0 ) "     z s l e ^ W P I A 9 2 + $      { s k c [ S KgW` D = 6 / ( !    y r k d ] V O H @ 8 0 (   oG   =+ VSX%: WiHAun jk0L~A~uoicaa Y6V MJGFEB=8G3` 4pi/ OHC>" . =B824209/.+h&P+  {  kx}|{vv-jSMLLWJJQ==<,)+( U  uowEset_I^Z@WHM:3*"G  <a>pWF~~y~V}|iqqkc(``!Z1UOxB>Q0.&p%# +] h%/r~~~}||zxwuoOji_QO>OGGFA=W::3o." W}o?7$;i~~{@pggsf1a_.ZyWQT^QJ\<94R+BS5}}6|uqnwn#joied$a.OFWD<];98 I ?||wrvsnigd_ \[QLF9/P)M03 2 |DZ{R|yrhQd`A^ ] [yYY5WMM^FDE^=~=;&43n/( N' D A+4 zwmbkb<WGPJ E&D93* W`@hD/  Q{zFr^qi?g[NLI > S B 6204:` -/[51861cfdaa04c058XB19enCaro-Kann DefenseClassical Variation, Seirawan Variationr2qkb1r/pp1nppp1/2p2n1p/7P/3P4/3Q1NN1/PPP2PP1/R1B1K2R w KQkq - 1 11& - -s95372deb3be7392e.B79enSicilian DefenseDragon Variation, Yugoslav Attack, Soltis Variationr1r3k1/pp1bppb1/2np1np1/q6p/3NP2P/1BN1BP2/PPPQ2P1/2KR3R w - - 0 13$ --s 7695071406dc6188B79enSicilian DefenseDragon Variation, Yugoslav Attack, Soltis Variationr4rk1/pp1bppbp/2np1np1/q7/2BNP3/2N1BP2/PPPQ2PP/2KR3R w - - 7 11 R{s - #5450ef56bce0d9a333C45enScotch GameGottschall Variation1rb2rk1/pp3ppp/5q2/3P4/1n6/2P1Q3/PP3PPP/RN2KB1R w KQ - 1 13{r -#55ffecc84767a5607C45enScotch GameGottschall Variation1rb2rk1/pp3ppp/2n2q2/3P4/8/2P1Q3/PP3PPP/RN2KB1R b KQ - 0 12~q -#56a5edb796899cbfdC45enScotch GameGottschall Variation1rb2rk1/pp3ppp/2n2q2/3n4/4P3/2P1Q3/PP3PPP/RN2KB1R w KQ - 0 12~p -#5 888e4c028f415b71qC45enScotch GameGottschall Variation1rb2rk1/pp2nppp/2n2q2/3N4/4P3/2P1Q3/PP3PPP/RN2KB1R b KQ - 0 11o -#5 aae71311f6fad959YC45enScotch GameGottschall Variation1rb2rk1/ppN1nppp/2n2q2/3p4/4P3/2P1Q3/PP3PPP/RN2KB1R w KQ - 1 11n -#5 3244b8f1a0c46e333C45enScotch GameGottschall Variationr1b2rk1/ppN1nppp/2n2q2/3p4/4P3/2P1Q3/PP3PPP/RN2KB1R b KQ - 0 10m -#59e1ae59a3c59b35c\C45enScotch GameGottschall Variationr1b2rk1/ppp1nppp/2n2q2/1N1p4/4P3/2P1Q3/PP3PPP/RN2KB1R w KQ - 1 10l -#594b2082de9005ab7C45enScotch GameGottschall Variationr1b1k2r/ppp1nppp/2n2q2/1N1p4/4P3/2P1Q3/PP3PPP/RN2KB1R b KQkq - 0 9k -#53a1d1fd5bd850d03C45enScotch GameGottschall Variationr1b1k2r/ppp1nppp/2n2q2/1N1p4/4P3/2P1b3/PP1Q1PPP/RN2KB1R w KQkq - 0 9j -#588b27ed8cae54becC45enScotch GameGottschall Variationr1b1k2r/ppp1nppp/2n2q2/1Nbp4/4P3/2P1B3/PP1Q1PPP/RN2KB1R b KQkq - 1 8i -#57dd894b5cb7571baC45enScotch GameGottschall Variationr1b1k2r/ppp1nppp/2n2q2/2bp4/3NP3/2P1B3/PP1Q1PPP/RN2KB1R w KQkq - 0 8$  a\*Ye: -/Q3651f15a73653496B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkb1r/pp1n1pp1/2p1pn1p/7P/3P4/3Q1NN1/PPPB1PP1/2KR3R b kq - 3 129 +/Qe7cb47920473b0eB19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkb1r/pp1n1pp1/2p1pn1p/7P/3P4/3Q1NN1/PPPB1PP1/R3K2R w KQkq - 2 128 -/Q5592808c8dbd7a98B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1n1pp1/2p1p2p/7P/3P4/3Q1NN1/PPPB1PP1/R3K2R b KQkq - 1 117 -/Q7c1fda391fdc119cB19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1n1pp1/2p1p2p/7P/3P4/3Q1NN1/PPP2PP1/R1B1K2R w KQkq - 0 116 +/Qa68280807fe81ceB19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1nppp1/2p4p/7P/3P4/3Q1NN1/PPP2PP1/R1B1K2R b KQkq - 0 105 -/Q4516d155e3dc8f2a*B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1nppp1/2p4p/7P/3P4/3b1NN1/PPP2PP1/R1BQK2R w KQkq - 0 104 -/Q f19734b0030315c6B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1npppb/2p4p/7P/3P4/3B1NN1/PPP2PP1/R1BQK2R b KQkq - 2 93 -/Q a49a95123a83d7b5B19enCaro-Kann DefenseClassical Variation, Lobron Systemr2qkbnr/pp1npppb/2p4p/7P/3P4/5NN1/PPP2PP1/R1BQKB1R w KQkq - 1 96# - /[ 92099cd8ac7fe5b2B19enCaro-Kann DefenseClassical Variation, Seirawan Variationr2qk2r/pp1n1pp1/2pbpn1p/7P/3P4/3Q1NN1/PPPB1PP1/2KR3R w kq - 2 13 -/[780b46483865ab5c\B19enCaro-Kann DefenseClassical Variation, Seirawan Variationr2qkb1r/pp1nppp1/2p2n1p/7P/3P4/3Q1NN1/PPPB1PP1/R3K2R b KQkq - 2 11 (c  z K  c(GssI> - -O 657c4a078b2c94a9B88enSicilian DefenseSozin Attack, Leonhardt Variationr1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7!2 - -ke789c585c18c0560`B90enSicilian DefenseNajdorf Variation, English Attack, Anti-Englishrnbqkb1r/1p2pppp/p2p4/8/3NP1n1/2N1B3/PPP2PPP/R2QKB1R w KQkq - 2 7& - -/ b98f8008e554c418B95enSicilian DefenseNajdorf Variationrnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7 V - -] 754f7dd6a24a08acB83enSicilian DefenseScheveningen Variation, Modern Variationr1bqkb1r/pp3ppp/2nppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7U --] 2ea149230fb0493a:B83enSicilian DefenseScheveningen Variation, Modern Variationr1bqkbnr/pp3ppp/2npp3/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6T --] 5d21cada0e950399B83enSicilian DefenseScheveningen Variation, Modern Variationr1bqkbnr/pp3ppp/2npp3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6J + -c c5554c754fb5573sB84enSicilian DefenseScheveningen Variation, Classical Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7 + 1M844be0a557d2bcfC00enSt. George DefenseNew St. George, Traditional Linern1qkb1r/1b1p1ppp/p3pn2/1pp5/3PP3/2PB1N2/PP3PPP/RNBQ1RK1 w kq - 3 7 -1M53aa8afff8876a59YC00enSt. George DefenseNew St. George, Traditional Linern1qkbnr/1b1p1ppp/p3p3/1pp5/3PP3/2PB1N2/PP3PPP/RNBQ1RK1 b kq - 2 6 -1M2ddff1cb8474b149IC00enSt. George DefenseNew St. George, Traditional Linern1qkbnr/1b1p1ppp/p3p3/1pp5/3PP3/2PB1N2/PP3PPP/RNBQK2R w KQkq - 1 6 -1M9d4fb94ff6261ed2C00enSt. George DefenseNew St. George, Traditional Linernbqkbnr/3p1ppp/p3p3/1pp5/3PP3/2PB1N2/PP3PPP/RNBQK2R b KQkq - 0 5 -1Meb9541d726561154TC00enSt. George DefenseNew St. George, Traditional Linernbqkbnr/3p1ppp/p3p3/1pp5/3PP3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 0 5 +1Mde49079d9111a29)C00enSt. George DefenseNew St. George, Traditional Linernbqkbnr/2pp1ppp/p3p3/1p6/3PP3/3B1N2/PPP2PPP/RNBQK2R b KQkq - 1 4 -1M 58e931dbe091d85aZC00enSt. George DefenseNew St. George, Traditional Linernbqkbnr/2pp1ppp/p3p3/1p6/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 -1M 38ed5bce7b3c6567gC00enSt. George DefenseNew St. George, Traditional Linernbqkbnr/1ppp1ppp/p3p3/8/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3 - )Ub8a03f9503f561e2C02enFrench DefenseAdvance Variation, Lputian Variationr1b1kb1r/pp3ppp/1qn1p2n/2ppP3/3P4/P1P2N2/1P3PPP/RNBQKB1R w KQkq - 1 7 9 ] - w`Ovb kkkkkS%B -% 8bc92d6e7494a1e5C54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/ppppnppp/5b2/3P4/2B1n3/5N2/PP3PPP/R1BQR1K1 w kq - 3 11'A -% 8f21053f3e122af4C54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/pppp1ppp/2n2b2/3P4/2B1n3/5N2/PP3PPP/R1BQR1K1 b kq - 2 10 - Ad5423acfa460426bkC89enRuy LopezMarshall Attack, Main Liner1bq1rk1/4bppp/p1p5/1p1nR3/3P4/1BP5/PP3PPP/RNBQ2K1 b - - 0 12 * -%I4d429797ed5f8161aC54enItalian GameGiuoco Piano, Krause Variationr1bq3r/pppp1kpp/8/8/1n1Pn3/1Q3N2/PP3PPP/RN2K2R b KQ - 1 10) -%I77bb342fd8642987C54enItalian GameGiuoco Piano, Krause Variationr1bq3r/pppp1kpp/8/8/1n1Pn3/5N2/PP3PPP/RN1QK2R w KQ - 0 10( )%I79b165001019c8C54enItalian GameGiuoco Piano, Krause Variationr1bqk2r/pppp1Bpp/8/8/1n1Pn3/5N2/PP3PPP/RN1QK2R b KQkq - 0 9' -%Ia1cae149e8f1bbbdC54enItalian GameGiuoco Piano, Krause Variationr1bqk2r/pppp1ppp/8/8/1nBPn3/5N2/PP3PPP/RN1QK2R w KQkq - 0 9& -%I6fe170e179293f24$C54enItalian GameGiuoco Piano, Krause Variationr1bqk2r/pppp1ppp/2n5/8/1BBPn3/5N2/PP3PPP/RN1QK2R b KQkq - 0 8 % -%I 611a746f83365165eC54enItalian GameGiuoco Piano, Krause Variationr1bqk2r/pppp1ppp/2n5/8/1bBPn3/5N2/PP1B1PPP/RN1QK2R w KQkq - 0 8 $ -%Idcad3a3685e1f676vC54enItalian GameGiuoco Piano, Krause Variationr1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/5N2/PP1B1PPP/RN1QK2R b KQkq - 2 7 - %Wccc717e690827850PC59enItalian GameTwo Knights Defense, Knorre Variationr1b1k2r/p1q2pp1/2pb1n1p/n3N3/3Pp3/8/PPPBBPPP/RN1QK2R b KQkq - 2 12 -%We54a4d5302e31354TC59enItalian GameTwo Knights Defense, Knorre Variationr1b1k2r/p1q2pp1/2pb1n1p/n3N3/3Pp3/8/PPP1BPPP/RNBQK2R w KQkq - 1 12 -%Wffccaca15210ccf4C59enItalian GameTwo Knights Defense, Knorre Variationr1bqk2r/p4pp1/2pb1n1p/n3N3/3Pp3/8/PPP1BPPP/RNBQK2R b KQkq d3 0 11 -%W 26605dd87f617117C59enItalian GameTwo Knights Defense, Knorre Variationr1bqk2r/p4pp1/2pb1n1p/n3N3/4p3/8/PPPPBPPP/RNBQK2R w KQkq - 2 11 ,&@ +% b950bb4b9ba81e0C54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/pppp1ppp/2n2b2/3P4/2B1n3/5N2/PP3PPP/R1BQ1RK1 w kq - 1 10. - %If8cd054ab063c6f4C54enItalian GameGiuoco Piano, Krause Variationr1bq3r/ppp3pp/5k2/3pN3/1n1Pn3/1Q3P2/PP4PP/RN2K2R b KQ - 0 12- -%I967ce37b10a92985C54enItalian GameGiuoco Piano, Krause Variationr1bq3r/ppp3pp/5k2/3pN3/1n1Pn3/1Q6/PP3PPP/RN2K2R w KQ - 2 12, -%I15106a4c2a06aa311C54enItalian GameGiuoco Piano, Krause Variationr1bq3r/ppp2kpp/8/3pN3/1n1Pn3/1Q6/PP3PPP/RN2K2R b KQ - 1 11+ -%Ic828b583718bcf47GC54enItalian GameGiuoco Piano, Krause Variationr1bq3r/ppp2kpp/8/3p4/1n1Pn3/1Q3N2/PP3PPP/RN2K2R w KQ - 0 11 Y c 0lB\ - %[516f64d39a4ca7baC51enItalian GameEvans Gambit Declined, Pavlov Variationr1b3r1/ppp2k1p/1b6/nP2B1q1/3PP3/8/P1PN1PPP/R2QK2R b KQ - 2 12[ +%[801dcb100b10f8aC51enItalian GameEvans Gambit Declined, Pavlov Variationr1b3r1/ppp2k1p/1b6/nP2B1q1/3PP3/8/P1P2PPP/RN1QK2R w KQ - 1 12Z -%[4afcbb9827ad3e7azC51enItalian GameEvans Gambit Declined, Pavlov Variationr1bq2r1/ppp2k1p/1b6/nP2B3/3PP3/8/P1P2PPP/RN1QK2R b KQ - 0 11Y -%[d577d9a6ff174c86C51enItalian GameEvans Gambit Declined, Pavlov Variationr1bq2r1/ppp2kBp/1b6/nP2p3/3PP3/8/P1P2PPP/RN1QK2R w KQ - 0 11X +%[ 7cb3fd5fa4f8f69iC51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk1r1/ppp2BBp/1b6/nP2p3/3PP3/8/P1P2PPP/RN1QK2R b KQq - 0 10W -%[ a6786ff912ae2d1cC51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk1r1/ppp2pBp/1b6/nP2p3/2BPP3/8/P1P2PPP/RN1QK2R w KQq - 1 10V -%[ fd3b3c4486072d5f_C51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk2r/ppp2pBp/1b6/nP2p3/2BPP3/8/P1P2PPP/RN1QK2R b KQkq - 0 9U -%[ a8af032ceea50666fC51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk2r/ppp2ppp/1b5B/nP2p3/2BPP3/8/P1P2PPP/RN1QK2R w KQkq - 0 9T -%[55db9df60b6c65300C51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk2r/ppp2ppp/1b1p3B/nP2N3/2BPP3/8/P1P2PPP/RN1QK2R b KQkq - 0 8S -%[82781d953ce63fbcC51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk2r/ppp2ppp/1b1p3n/nP2N3/2BPP3/8/P1P2PPP/RNBQK2R w KQkq - 0 8R -%[ bbc28bf4ee9e76d1C51enItalian GameEvans Gambit Declined, Pavlov Variationr1bqk2r/pppp1ppp/1b5n/nP2N3/2BPP3/8/P1P2PPP/RNBQK2R b KQkq - 0 7 'E - %7f84c01ce83e9172rC54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/ppp1nppp/3p1b2/3P4/2B1R1P1/5N2/PP3P1P/R1BQ2K1 b kq - 0 12%D -% dcc9c1ca004b7c6foC54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/ppp1nppp/3p1b2/3P4/2B1R3/5N2/PP3PPP/R1BQ2K1 w kq - 0 12#C -%e57357abd2333502C54enItalian GameClassical Variation, Greco Gambit, Moeller-Bayonet Attackr1bqk2r/ppppnppp/5b2/3P4/2B1R3/5N2/PP3PPP/R1BQ2K1 b kq - 0 11    } 7V -i 2d5903009cc55970pC79enRuy LopezSteinitz Defense Deferred, Lipnitsky Variationr1bqkb1r/2p2ppp/p1pp1n2/4p3/3PP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 7 -i e86c2caa8d0c74322C79enRuy LopezSteinitz Defense Deferred, Lipnitsky Variationr1bqkb1r/2p2ppp/p1pp1n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 7 x - O 90ee4d599a12fe63cC79enRuy LopezMorphy Defense, Steinitz Deferredr1bqkb1r/2p2ppp/p1pp4/4p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 8 -i2c3c42be9f379018C79enRuy LopezSteinitz Defense Deferred, Lipnitsky Variationr1bqkb1r/1pp2ppp/p1Bp1n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6 0%j + }6b49b25e0d21fcaC86enRuy LopezClosed Variations, Worrall Attack, Delayed Castling Liner1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB2RK1 w kq - 0 8%i -}3f0e0d4432aa56a7C86enRuy LopezClosed Variations, Worrall Attack, Delayed Castling Liner1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB2RK1 b kq - 1 7#h -}6fb21008af0abf45EC86enRuy LopezClosed Variations, Worrall Attack, Delayed Castling Liner1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPPQPPP/RNB2RK1 w kq - 0 7 M\ - m35a6e0f3e7f3bf4cLC86enRuy LopezClosed Variations, Worrall Attack, Castling Liner1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB2RK1 w - - 2 8N - a9d2cc469891409acC88enRuy LopezClosed Variations, Trajkovic Counterattackr2qk2r/1bppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 w kq - 2 8t@ - 2714615a2e1f4fdcC88enRuy LopezClosedr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 w - - 2 8  mL-drX = E s - -=e71152b568e66ab2B94enSicilian DefenseNajdorf, Ivkov Variationr3kb1r/1b3ppp/p2ppn2/qpn1P1B1/3N4/1BN5/PPPQ1PPP/2KRR3 b kq - 0 12 r --= 866844486cf84cd6B94enSicilian DefenseNajdorf, Ivkov Variationr3kb1r/1b3ppp/p2ppn2/qpn3B1/3NP3/1BN5/PPPQ1PPP/2KRR3 w kq - 4 12 q --=a62e5e7e8b80099cB94enSicilian DefenseNajdorf, Ivkov Variationr3kb1r/1b1n1ppp/p2ppn2/qp4B1/3NP3/1BN5/PPPQ1PPP/2KRR3 b kq - 3 11 p --=3909e239748f4c87B94enSicilian DefenseNajdorf, Ivkov Variationr3kb1r/1b1n1ppp/p2ppn2/qp4B1/3NP3/1BN5/PPPQ1PPP/2KR3R w kq - 2 11 o --=8999aabd06dde31cB94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/3n1ppp/p2ppn2/qp4B1/3NP3/1BN5/PPPQ1PPP/2KR3R b kq - 1 10 n --=409dba9f8dfbb3f8B94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/3n1ppp/p2ppn2/qp4B1/2BNP3/2N5/PPPQ1PPP/2KR3R w kq - 0 10 m --=2099d08a16560ec5B94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/1p1n1ppp/p2ppn2/q5B1/2BNP3/2N5/PPPQ1PPP/2KR3R b kq - 1 9 l --=18b495a94574015d]B94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/1p1n1ppp/p2ppn2/q5B1/2BNP3/2N5/PPPQ1PPP/R3K2R w KQkq - 0 9 k --=6ec367985d56910fB94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/1p1npppp/p2p1n2/q5B1/2BNP3/2N5/PPPQ1PPP/R3K2R b KQkq - 5 8 j --=46db28179cef4eafB94enSicilian DefenseNajdorf, Ivkov Variationr1b1kb1r/1p1npppp/p2p1n2/q5B1/2BNP3/2N5/PPP2PPP/R2QK2R w KQkq - 4 8 i --=9fa8bd4c359d6f20 B94enSicilian DefenseNajdorf, Ivkov Variationr1bqkb1r/1p1npppp/p2p1n2/6B1/2BNP3/2N5/PPP2PPP/R2QK2R b KQkq - 3 7 h --=fc1b09641ddeb986B94enSicilian DefenseNajdorf, Ivkov Variationr1bqkb1r/1p1npppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 2 7 - -;8869b3903cc79859YB79enSicilian DefenseDragon, Yugoslav Attackr1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R b - - 4 12 - -;416da3b2b7e1c8bdB79enSicilian DefenseDragon, Yugoslav Attackr1r3k1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R w - - 3 12  - -; ea369b3dade318f6B79enSicilian DefenseDragon, Yugoslav Attackr4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R b - - 2 11  - -;d21bde1efec1176enB79enSicilian DefenseDragon, Yugoslav Attackr4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/R3K2R w KQ - 1 11  + -;b684b4557b336e1B79enSicilian DefenseDragon, Yugoslav Attackr2q1rk1/pp1bppbp/2np1np1/8/2BNP2P/2N1BP2/PPPQ2P1/R3K2R b KQ - 0 10  dd6` m / --Y b7e18f7c7fd4f5b0B74enSicilian DefenseDragon, Classical, Spielmann Variationr1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2QK2R w KQ - 0 9 --Y 8e5b191dadacbcddB74enSicilian DefenseDragon, Classical, Spielmann Variationr1bq1rk1/pp1pppbp/2n2np1/8/4P3/1NN1B3/PPP1BPPP/R2QK2R b KQ - 7 8 --Y5ead8cdb1780fbc8B74enSicilian DefenseDragon, Classical, Spielmann Variationr2q1rk1/pp2ppbp/3pbnp1/n4P2/4P3/1NN1B3/PPP1B1PP/R2Q1RK1 b - - 0 11 4 -7U8c9d237aa8ddf826&E68enKing's Indian DefenseFianchetto Variation, Long Variationr1bqr1k1/pppn1pbp/3p1np1/8/2PNP3/2N3PP/PP3PB1/R1BQ1RK1 b - - 0 103 -7U646efec46a7e31d4E68enKing's Indian DefenseFianchetto Variation, Long Variationr1bqr1k1/pppn1pbp/3p1np1/8/2PNP3/2N3P1/PP3PBP/R1BQ1RK1 w - - 1 102 -7U 783f3984580ed456VE68enKing's Indian DefenseFianchetto Variation, Long Variationr1bq1rk1/pppn1pbp/3p1np1/8/2PNP3/2N3P1/PP3PBP/R1BQ1RK1 b - - 0 91 -7U1fab64d9493f4678xE68enKing's Indian DefenseFianchetto Variation, Long Variationr1bq1rk1/pppn1pbp/3p1np1/8/2PpP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9! - -Yc3d088f251311a75uB74enSicilian DefenseDragon, Classical, Spielmann Variationr2q1rk1/pp2ppbp/3p1np1/n4P2/2b1P3/1NNBB3/PPP3PP/R2Q1RK1 b - - 2 12 --Y1d8b8c03c6b317acB74enSicilian DefenseDragon, Classical, Spielmann Variationr2q1rk1/pp2ppbp/3p1np1/n4P2/2b1P3/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 12  ;`rV; | : b b b b b b;kkkkkkkkR M - ;5ccbdc56bd768b3b6D59enQueen's Gambit DeclinedTartakower Variationrn3rk1/p1p1qpp1/1p2b2p/3p4/3P4/4PN2/PP3PPP/2RQKB1R w K - 2 12 L -;5980557bf9fddc8beD59enQueen's Gambit DeclinedTartakower Variationrnb2rk1/p1p1qpp1/1p5p/3p4/3P4/4PN2/PP3PPP/2RQKB1R b K - 1 11 K -;5e79e98f21ccf9c60`D59enQueen's Gambit DeclinedTartakower Variationrnb2rk1/p1p1qpp1/1p5p/3p4/3P4/4PN2/PP3PPP/R2QKB1R w KQ - 0 11 J -;5 c015244848241b50PD59enQueen's Gambit DeclinedTartakower Variationrnb2rk1/p1p1qpp1/1p2p2p/3N4/3P4/4PN2/PP3PPP/R2QKB1R b KQ - 0 10I -;511371c4126183ef6D59enQueen's Gambit DeclinedTartakower Variationrnb2rk1/p1p1qpp1/1p2p2p/3n4/3P4/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 10H -;5f1f7c2a41b4bb993D59enQueen's Gambit DeclinedTartakower Variationrnbq1rk1/p1p1Bpp1/1p2p2p/3n4/3P4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9 a -;Sd1d7b50cdef5d714D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnb2rk1/ppp1qpp1/7p/3p4/3P4/2P1PN2/P4PPP/R2QKB1R w KQ - 0 11=Y -;Se122729d40f41a7azD57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnbq1rk1/ppp1bpp1/4pn1p/3p4/2PP3B/2N1P3/PP3PPP/R2QKBNR w KQ - 2 7X -;Seb8a9f2a95adf391D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnbqk2r/ppp1bpp1/4pn1p/3p4/2PP3B/2N1P3/PP3PPP/R2QKBNR b KQkq - 1 6W -;Sb105f7e96613d10a D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnbqk2r/ppp1bpp1/4pn1p/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQkq - 0 67 - 7Uae758206ab911ae8E68enKing's Indian DefenseFianchetto Variation, Long Variationr1bqr1k1/1pp2pbp/3p1np1/p1n5/2PNP3/2N3PP/PP3PB1/R1BQR1K1 w - - 0 126 -7U286f37c7c80d1678xE68enKing's Indian DefenseFianchetto Variation, Long Variationr1bqr1k1/ppp2pbp/3p1np1/2n5/2PNP3/2N3PP/PP3PB1/R1BQR1K1 b - - 2 115 -7Uacdb394c4fa5bd6clE68enKing's Indian DefenseFianchetto Variation, Long Variationr1bqr1k1/ppp2pbp/3p1np1/2n5/2PNP3/2N3PP/PP3PB1/R1BQ1RK1 w - - 1 11 f-j x ! w ! QV-v)e -%11ee0d64cef08a344D17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppqn1ppp/2p5/4nb2/P1N2B2/2N3P1/1P2PP1P/R2QKB1R w KQkq - 2 11c - ;S3d6b84fe8dcc588eD57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnb2rk1/ppp2pp1/3q3p/3p4/3P4/1QP1PN2/P4PPP/R3KB1R w KQ - 2 12b -;Seb2e16b4ebce7ff2D57enQueen's Gambit DeclinedLasker Defense, Bernstein Variationrnb2rk1/ppp1qpp1/7p/3p4/3P4/1QP1PN2/P4PPP/R3KB1R b KQ - 1 11#A+d -%e8a90ec2633c83c1D17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppq2ppp/2p2n2/4nb2/P1N2B2/2N3P1/1P2PP1P/R2QKB1R b KQkq - 1 10*c -%33fde843fa5c69a2D17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppq2ppp/2p2n2/4nb2/P1N5/2N3P1/1P2PP1P/R1BQKB1R w KQkq - 0 10*b -%45be6426db2d8289D17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppqn1ppp/2p2n2/4Pb2/P1N5/2N3P1/1P2PP1P/R1BQKB1R b KQkq - 0 9Q - -Y21f8fb7dcd50c0ccD34enTarrasch DefenseClassical Variation, Spassky Variationr2q1rk1/pp2bpp1/2n2n1p/3p4/3N2b1/2N1B1P1/PP2PPBP/R2Q1RK1 w - - 2 12P --Y232b314f8ad5ce26&D34enTarrasch DefenseClassical Variation, Spassky Variationr1bq1rk1/pp2bpp1/2n2n1p/3p4/3N4/2N1B1P1/PP2PPBP/R2Q1RK1 b - - 1 11O --Y6eaffb3f14428b69iD34enTarrasch DefenseClassical Variation, Spassky Variationr1bq1rk1/pp2bpp1/2n2n1p/3p2B1/3N4/2N3P1/PP2PPBP/R2Q1RK1 w - - 0 11; - -I3f7af60fb8a52ba4D34enTarrasch DefenseClassical Variation, Main Liner1bqr1k1/pp2bpp1/2n2n1p/3p4/3N4/2N1B1P1/PP2PPBP/R2Q1RK1 w - - 2 12'% - /o41c53d4c044b389dD47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/4p3/2pnP3/Np1P4/3B1N2/PP3PPP/R1BQK2R w KQkq - 1 12'$ -/o85d5e2b5ca894d28(D47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/4pn2/2p1P3/Np1P4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 11&# -/oe4acf448ce976b4cLD47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/4pn2/2p5/Np1PP3/3B1N2/PP3PPP/R1BQK2R w KQkq - 0 11'" -/o6871eea3e9373683D47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/2p1pn2/8/Np1PP3/3B1N2/PP3PPP/R1BQK2R b KQkq - 1 10(! -/oabe507d6d61ff5c9D47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/2p1pn2/8/1p1PP3/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 10' -/oca2836081706ac8aD47enSemi-Slav DefenseMeran Variation, Wade Variation, Larsen Variationr2qkb1r/pb1n1ppp/2p1pn2/1p6/3PP3/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 9 - /W67a6a6abb40fe677wD49enSemi-Slav DefenseMeran Variation, Rabinovich Variationr1bqkb1r/3n1ppp/p3p3/1N2P3/3p2n1/3B1N2/PP3PPP/R1BQK2R w KQkq - 1 12y - /M 8cc671a898349c300D49enSemi-Slav DefenseMeran Variation, Sozin Variationr1bqkb1r/5ppp/p3pn2/1N2n3/3p4/3B1N2/PP3PPP/R1BQK2R w KQkq - 0 12 0BtU % p V 7 -?b7d37380ad1af0f8C96enRuy LopezClosed, Rossolimo Defenser1bq1rk1/4bppp/p1pp1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 w - - 0 11} ) Sf25f4a581f4a7d}C97enRuy LopezClosed Variations, Chigorin Defenser1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12*g - %245ddec417a9adc7D17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppqn1p1p/2p5/4nbp1/P1N2B2/2N3P1/1P2PPBP/R2QK2R w KQkq - 0 12(f -%a41e2e19831d524dMD17enSlav DefenseCzech Variation, Carlsbad Variation, Morozevich Variationr3kb1r/ppqn1ppp/2p5/4nb2/P1N2B2/2N3P1/1P2PPBP/R2QK2R b KQkq - 3 11R 'S836ee28e90d63cC82enRuy LopezOpen Variations, Dilworth Variationr2q1rk1/2p2ppp/p1n1b3/1pbpP3/4n3/1BP2N2/PP1N1PPP/R1BQ1RK1 w - - 3 11  - Q f429026527b5537e~C83enRuy LopezOpen Variations, Breslau Variationr2q1rk1/2p1bppp/p3b3/1p1pn3/3Nn3/1BP5/PP3PPP/RNBQR1K1 w - - 0 12 -Q1a642dbff7fdf09aC83enRuy LopezOpen Variations, Breslau Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/3Nn3/1BP5/PP3PPP/RNBQR1K1 b - - 4 11 -Q6403b7b335254855UC83enRuy LopezOpen Variations, Breslau Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQR1K1 w - - 3 11k - O10771565b5a96f29)C89enRuy LopezMarshall Attack, Modern Variationr1bq1rk1/4bppp/p1p5/1p1nR3/8/1BP5/PP1P1PPP/RNBQ2K1 w - - 0 12 j -O820df88ac269bc92C89enRuy LopezMarshall Attack, Modern Variationr1bq1rk1/2p1bppp/p7/1p1nR3/8/1BP5/PP1P1PPP/RNBQ2K1 b - - 0 11 i -O fbca8ec227e07a2b+C89enRuy LopezMarshall Attack, Modern Variationr1bq1rk1/2p1bppp/p7/1p1nn3/8/1BP5/PP1P1PPP/RNBQR1K1 w - - 0 11 h -O d2d63f2da32ff410C89enRuy LopezMarshall Attack, Modern Variationr1bq1rk1/2p1bppp/p1n5/1p1nN3/8/1BP5/PP1P1PPP/RNBQR1K1 b - - 0 10 g -O6c95cbd607315126&C89enRuy LopezMarshall Attack, Modern Variationr1bq1rk1/2p1bppp/p1n5/1p1np3/8/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 10U - _ 461d27730cabc927'C89enRuy LopezMarshall Attack, Original Marshall Attackr1bq1rk1/2p1bppp/p4n2/1p2R3/8/1BP5/PP1P1PPP/RNBQ2K1 w - - 1 12? - Y53fa4a9e9968a776vC96enRuy LopezClosed Variations, Borisenko Variationr1bq1rk1/4bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12> +Y6ed606b3454057c|C96enRuy LopezClosed Variations, Borisenko Variationr1bq1rk1/4bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 b - - 0 11) - Mffaa63cd99980c89C96enRuy LopezClosed Variations, Keres Defenser1bq1rk1/3nbppp/p2p4/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12  - ?74f9630bd09892bbC96enRuy LopezClosed, Rossolimo Defenser1b2rk1/2q1bppp/p1pp1n2/np2p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12 -?72e65c2abcd3ddbaC96enRuy LopezClosed, Rossolimo Defenser1bq1rk1/4bppp/p1pp1n2/np2p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 b - - 0 11 pe* L  p p paaaaaaaaaaav o - -[54c4ed4f52da08c2B03enAlekhine DefenseFour Pawns Attack, Tartakower Variation2kr3r/pppqbppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP2B1PP/R2Q1RK1 w - - 6 12n --[40089ea09871a453SB03enAlekhine DefenseFour Pawns Attack, Tartakower Variation2kr1b1r/pppq1ppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP2B1PP/R2Q1RK1 b - - 5 11m --[3e7de594e4827f43CB03enAlekhine DefenseFour Pawns Attack, Tartakower Variation2kr1b1r/pppq1ppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP2B1PP/R2QK2R w KQ - 4 11l +-[d4b70caab942b79yB03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr3kb1r/pppq1ppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP2B1PP/R2QK2R b KQkq - 3 10k --[7ecbf333aab161daB03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr3kb1r/pppq1ppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP4PP/R2QKB1R w KQkq - 2 10j --[6358b6e55317b495B03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr2qkb1r/ppp2ppp/1nn1p3/4Pb2/2PP4/2N1BN2/PP4PP/R2QKB1R b KQkq - 1 9i --[b83c5a133bf1d5a8B03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr2qkb1r/ppp2ppp/1nn1p3/4Pb2/2PP4/2N1B3/PP4PP/R2QKBNR w KQkq - 0 9h --[ ce4ba82223d345faB03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr2qkb1r/ppp1pppp/1nn5/4Pb2/2PP4/2N1B3/PP4PP/R2QKBNR b KQkq - 4 8g --[ 35dcb080e131c723#B03enAlekhine DefenseFour Pawns Attack, Tartakower Variationr2qkb1r/ppp1pppp/1nn5/4Pb2/2PP4/4B3/PP4PP/RN1QKBNR w KQkq - 3 8 Sl o>A  v i"SSSSSSS X -%[8b61adccaaf9b645EC58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/n2Pp3/2B5/3P1N2/PPP2PPP/RNBQK2R b KQkq - 1 7W -%[ddb34c1903354ee1C58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/n2Pp1N1/2B5/3P4/PPP2PPP/RNBQK2R w KQkq - 0 7K - C61862f05821a03ffC67enRuy LopezBerlin Defense, Berlin Wallr2k1b1r/pppb1ppp/2p5/4Pn2/8/2N2N2/PPP2PPP/R1B2RK1 w - - 2 105 -Yf1244a3eb378e264dC72enRuy LopezClosed Variations, Kecskemet Variationr2qk2r/1ppbbppp/p1np1n2/4p3/B2PP3/2P2N2/PP3PPP/RNBQ1RK1 w kq - 1 84 -Ye5e839d179d34ef5C72enRuy LopezClosed Variations, Kecskemet Variationr2qkb1r/1ppb1ppp/p1np1n2/4p3/B2PP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 73 -Y20dd167b681a63b7C72enRuy LopezClosed Variations, Kecskemet Variationr2qkb1r/1ppb1ppp/p1np1n2/4p3/B3P3/2P2N2/PP1P1PPP/RNBQ1RK1 w kq - 1 72 -Y7b33228ec5e02221!C72enRuy LopezClosed Variations, Kecskemet Variationr2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 61 +Y de9da1615902da7C72enRuy LopezClosed Variations, Kecskemet Variationr2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 6 T+ ' - O1dda726f5582677e~C82enRuy LopezOpen Variations, Berlin Variationr2qkb1r/2p2ppp/p1n1b3/1pnpP3/8/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10 J -C8347d1575840d3ceC67enRuy LopezBerlin Defense, Berlin Wallr1bk1b1r/ppp2ppp/2p5/4Pn2/8/2N2N2/PPP2PPP/R1B2RK1 b - - 1 99 - Y6eec9e7d1708f07e~C72enRuy LopezClosed Variations, Kecskemet Variationr2qbrk1/1pp1bppp/p1np1n2/4p3/B2PP3/2P2N2/PP1N1PPP/R1BQR1K1 w - - 5 108 -Y265611607b7408abC72enRuy LopezClosed Variations, Kecskemet Variationr2q1rk1/1ppbbppp/p1np1n2/4p3/B2PP3/2P2N2/PP1N1PPP/R1BQR1K1 b - - 4 97 -Ya2e21febfcdca3bfC72enRuy LopezClosed Variations, Kecskemet Variationr2q1rk1/1ppbbppp/p1np1n2/4p3/B2PP3/2P2N2/PP1N1PPP/R1BQ1RK1 w - - 3 96 -Ya84af25c29854a54TC72enRuy LopezClosed Variations, Kecskemet Variationr2qk2r/1ppbbppp/p1np1n2/4p3/B2PP3/2P2N2/PP1N1PPP/R1BQ1RK1 b kq - 2 8 - Q53ce633b674d4cb8C82enRuy LopezOpen Variations, Italian Variationr2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10 - Qea1f548f67d40aaaC83enRuy LopezOpen Variations, Classical Defenser2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10  , yk,7P ]      ,,aaaaaaa,J --97ee89f7b1363fa3B47enSicilian DefensePaulsen Variation, Bastrikov Variation, Ponomariov Gambitr1b1kbnr/ppqp1ppp/2n1p3/1N6/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 4 6 [+K --7ceee52a242ab50c B47enSicilian DefensePaulsen Variation, Bastrikov Variation, Ponomariov Gambitrqb1kbnr/pp1p1ppp/2n1p3/1N6/4P3/2N5/PPP2PPP/R1BQKB1R w KQkq - 5 7? + -/ ad299981e20f26ajB57enSicilian DefenseMagnus Smith Trapr1bqkb1r/p3pp1p/2pp1np1/4P3/2B5/2N5/PPP2PPP/R1BQK2R b KQkq - 0 8> --/ 6bab8f651a3ed40eB57enSicilian DefenseMagnus Smith Trapr1bqkb1r/p3pp1p/2pp1np1/8/2B1P3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 8= --/b63d57329f959f85B57enSicilian DefenseMagnus Smith Trapr1bqkb1r/pp2pp1p/2Np1np1/8/2B1P3/2N5/PPP2PPP/R1BQK2R b KQkq - 0 7< --/fabfeb6de88196b0B57enSicilian DefenseMagnus Smith Trapr1bqkb1r/pp2pp1p/2np1np1/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7  $] - -m64d8cd53dfd515bfB43enSicilian DefenseKan Variation, Wing Attack, Christiansen's Dreamrnb1k1nr/3p1ppp/pq2p3/1pb5/3NP1Q1/2NBB3/PPP2PPP/R3K2R b KQkq - 5 8#\ --m3162bffd09324fb2B43enSicilian DefenseKan Variation, Wing Attack, Christiansen's Dreamrnb1k1nr/3p1ppp/pq2p3/1pb5/3NP3/2NBB3/PPP2PPP/R2QK2R w KQkq - 4 8![ --m 9c7ffba6c300a5311B43enSicilian DefenseKan Variation, Wing Attack, Christiansen's Dreamrnb1kbnr/3p1ppp/pq2p3/1p6/3NP3/2NBB3/PPP2PPP/R2QK2R b KQkq - 3 7+N - -7bf61bd8ba5ca22b+B47enSicilian DefensePaulsen Variation, Bastrikov Variation, Ponomariov Gambitrqb1kbnr/1p1p1ppp/pBn1p3/1N6/4P3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 8-M --dd11af354230565e^B47enSicilian DefensePaulsen Variation, Bastrikov Variation, Ponomariov Gambitrqb1kbnr/1p1p1ppp/p1n1p3/1N6/4P3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 0 8,L +-fe65ec6a510ae82B47enSicilian DefensePaulsen Variation, Bastrikov Variation, Ponomariov Gambitrqb1kbnr/pp1p1ppp/2n1p3/1N6/4P3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 6 7 q  h /G Y/ - 7Qb81bf60326b4f49aE93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p3p/3Pp1pn/2P1P2P/2N2NB1/PP2BPP1/R2QK2R b KQ - 0 11. -7Q24b86a2a8d8b8de4E93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p3p/3Pp1pn/2P1P3/2N2NB1/PP2BPPP/R2QK2R w KQ - 2 11 - -7Qbc5bfdeeac53b8beE93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p1n1p/3Pp1p1/2P1P3/2N2NB1/PP2BPPP/R2QK2R b KQ - 1 10, -7Q353dbc4650720d4cLE93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p1n1p/3Pp1p1/2P1P2B/2N2N2/PP2BPPP/R2QK2R w KQ - 0 10+ -7Qa41c396a106ee584E93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p1npp/3Pp3/2P1P2B/2N2N2/PP2BPPP/R2QK2R b KQ - 1 9* -7Qfe9351a9e3d0c71fE93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pb1/3p1npp/3Pp1B1/2P1P3/2N2N2/PP2BPPP/R2QK2R w KQ - 0 9) -7Q6c641acf74048e0a E93enKing's Indian DefensePetrosian Variation, Keres Defenser1bq1rk1/pppn1pbp/3p1np1/3Pp1B1/2P1P3/2N2N2/PP2BPPP/R2QK2R b KQ - 2 8 d@/ - 7q7f15a97b728630a8E99enKing's Indian DefenseOrthodox Variation, Classical System, Benko Attackr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P1P1/2N2P2/PP2B2P/R1BQNRK1 b - - 0 11]% - )oa9d79a24497738efA64enBenoni DefenseFianchetto Variation, Hastings Defense, Main Liner1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 3 12$ - )ob5865d647b07dd6dmA64enBenoni DefenseFianchetto Variation, Hastings Defense, Main Liner1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 2 11% - )o68a4c683b9bae3e7A64enBenoni DefenseFianchetto Variation, Hastings Defense, Main Liner1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 w - - 1 11" - )o5b47bdde59120e2b+A64enBenoni DefenseFianchetto Variation, Hastings Defense, Main Linernbq1rk1/1p3pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 b - - 0 10" - )o308ec3323481dbe5A64enBenoni DefenseFianchetto Variation, Hastings Defense, Main Linernbq1rk1/1p3pbp/p2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10  ${s i=$ 0 0 0 0  $$$j1d - 7u3e2d0555af8f41e3E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Korchnoi Line1rbq1rk1/2p1ppbp/p1np1np1/1p6/2PP4/2N1B1PP/PP1NPPB1/R2Q1RK1 b - - 1 10/c -7ue30f9eb26d327f69iE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Korchnoi Line1rbq1rk1/2p1ppbp/p1np1np1/1p6/2PP4/2N1BNPP/PP2PPB1/R2Q1RK1 w - - 0 10-b -7u830bf4a7f69fc254TE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Korchnoi Line1rbq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N1BNPP/PP2PPB1/R2Q1RK1 b - - 2 9.a -7uf0034f4b77a5d9daE63enKing's Indian DefenseFianchetto Variation, Panno Variation, Korchnoi Line1rbq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NPP/PP2PPB1/R1BQ1RK1 w - - 1 9.` -7u68a0e4ab219b6eb0E63enKing's Indian DefenseFianchetto Variation, Panno Variation, Korchnoi Liner1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NPP/PP2PPB1/R1BQ1RK1 b - - 0 8w - 5S b5c10e8342aec68dE59enNimzo-Indian DefenseNormal Variation, Bernstein Defenser1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1 b - - 0 10v - 5S fc7b3ae87d9dc546FE59enNimzo-Indian DefenseNormal Variation, Bernstein Defenser1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10Q + K f44908a2e5b7c69iE77enKing's Indian, Six Pawns Attackr1bq1rk1/pp4bp/2nppnp1/2p5/2P1PPPP/2N5/PP2B3/R1BQK1NR b KQ - 0 10P -K 93e70ca385640517E77enKing's Indian, Six Pawns Attackr1bq1rk1/pp4bp/2nppnp1/2p5/2P1PPP1/2N5/PP2B2P/R1BQK1NR w KQ - 1 10O -K 380ad44194f5a014E77enKing's Indian, Six Pawns Attackrnbq1rk1/pp4bp/3ppnp1/2p5/2P1PPP1/2N5/PP2B2P/R1BQK1NR b KQ - 0 9N -K 9b47d5977c804d09 E77enKing's Indian, Six Pawns Attackrnbq1rk1/pp4bp/3ppnp1/2p5/2P1PP2/2N5/PP2B1PP/R1BQK1NR w KQ - 0 9M -K fc8ed6dfcbf0c423#E77enKing's Indian, Six Pawns Attackrnbq1rk1/pp3pbp/3pPnp1/2p5/2P1PP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 8 h  I+  fg7oooooooo- - ;U 4b71fde35131775f_D67enQueen's Gambit DeclinedOrthodox Defense, Alekhine Variationr1b2rk1/pp1nqppp/2p1p3/3n4/2BPN3/4PN2/PP3PPP/2RQK2R b K - 1 11n - ;C da083d53d00c26f7D67enQueen's Gambit DeclinedOrthodox Defense, Main Liner1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQ1RK1 b - - 1 11Y - /W276022607366d5f2D88enGrünfeld DefenseExchange Variation, Spassky Variationr1bq1rk1/pp2ppbp/2n3p1/8/2BPP3/4B3/P3NPPP/R2Q1RK1 b - - 0 11X - /W 8bd6f72c17ced9d4D88enGrünfeld DefenseExchange Variation, Spassky Variationr1bq1rk1/pp2ppbp/2n3p1/8/2BpP3/2P1B3/P3NPPP/R2Q1RK1 w - - 0 11W - /W d4c84d196a3ab012D88enGrünfeld DefenseExchange Variation, Spassky Variationr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2Q1RK1 b - - 5 10 D - /= ef5ee7944e699da9D98enGrünfeld DefenseRussian, Keres Variationr2q1rk1/ppp1ppbp/1nn3p1/8/3PP1b1/2NQBN2/PP2BPPP/2KR3R b - - 8 11 C -/=d773a2b71d4b92311D98enGrünfeld DefenseRussian, Keres Variationr2q1rk1/ppp1ppbp/1nn3p1/8/3PP1b1/2NQBN2/PP2BPPP/R3K2R w KQ - 7 11 B -/=7c9e7a550cda37322D98enGrünfeld DefenseRussian, Keres Variationrn1q1rk1/ppp1ppbp/1n4p1/8/3PP1b1/2NQBN2/PP2BPPP/R3K2R b KQ - 6 10 A -/=4ecfee7cbc1fff96D98enGrünfeld DefenseRussian, Keres Variationrn1q1rk1/ppp1ppbp/1n4p1/8/2QPP1b1/2N1BN2/PP2BPPP/R3K2R w KQ - 5 10 @ -/= 5a03bd2cc754e898D98enGrünfeld DefenseRussian, Keres Variationrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP2BPPP/R3K2R b KQ - 4 97V - /W aabd362d16c96b02D88enGrünfeld DefenseExchange Variation, Spassky Variationr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R w KQ - 4 10U - /W a015db9ac39082e9D88enGrünfeld DefenseExchange Variation, Spassky Variationr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R b KQkq - 3 9T - /W d31d607642aa9967gD88enGrünfeld DefenseExchange Variation, Spassky Variationr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQkq - 2 9  , K L LGak,,FFFFFF  "V -/Yd00bc9777acbb611D44enSemi-Slav DefenseBotvinnik System, Lilienthal Variationr1bqkb1r/p2n1p2/2p1pn2/1p2P1B1/2pP4/2N5/PP3PPP/R2QKB1R w KQkq - 1 11U -/Ye3e8b22a9a635bddD44enSemi-Slav DefenseBotvinnik System, Lilienthal Variationrnbqkb1r/p4p2/2p1pn2/1p2P1B1/2pP4/2N5/PP3PPP/R2QKB1R b KQkq - 0 10T -/Y8c12bc6a5d7ca47d}D44enSemi-Slav DefenseBotvinnik System, Lilienthal Variationrnbqkb1r/p4p2/2p1pn2/1p2P1p1/2pP3B/2N5/PP3PPP/R2QKB1R w KQkq - 0 10B - /O6a29b24456b6e0aaD44enSemi-Slav DefenseBotvinnik System, Szabo Variationr1bqkb1r/p2n1p2/2p1pn2/1p2P1B1/2pP4/2N2Q2/PP3PPP/R3KB1R b KQkq - 2 11( - ;i71c569b85e392bc2D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationr1bq1rk1/pp1n1pp1/2p1pb1p/8/2BP4/2N1PN2/PP3PPP/2RQ1RK1 b - - 0 11' -;i387f5dd3610a2809 D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationr1bq1rk1/pp1n1pp1/2p1pb1p/8/2pP4/2NBPN2/PP3PPP/2RQ1RK1 w - - 0 11* -;iea7964e13334c6eaD55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationr1bq1rk1/pp1n1pp1/2p1pb1p/3p4/2PP4/2NBPN2/PP3PPP/2RQ1RK1 b - - 3 10( -;i6569aa52904e9c6ajD55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationr1bq1rk1/pp1n1pp1/2p1pb1p/3p4/2PP4/2NBPN2/PP3PPP/2RQK2R w K - 2 10& -;i 568ad10f70e671a6D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbq1rk1/pp3pp1/2p1pb1p/3p4/2PP4/2NBPN2/PP3PPP/2RQK2R b K - 1 9& +;i 38770ad4966b3d5D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbq1rk1/pp3pp1/2p1pb1p/3p4/2PP4/2N1PN2/PP3PPP/2RQKB1R w K - 0 9% -;i 91fd9d423ea6606enD55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbq1rk1/ppp2pp1/4pb1p/3p4/2PP4/2N1PN2/PP3PPP/2RQKB1R b K - 2 8' -;i ee66520fbdb434b0D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbq1rk1/ppp2pp1/4pb1p/3p4/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8' -;ie4cebfb868eddd5b[D55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbqk2r/ppp2pp1/4pb1p/3p4/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 7( -;i49e3fd0a4cb255ffD55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbqk2r/ppp2pp1/4pb1p/3p4/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 7( -;i6273507cf1b46673sD55enQueen's Gambit DeclinedAnti-Tartakower Variation, Petrosian Variationrnbqk2r/ppp1bpp1/4pB1p/3p4/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 0 6!- - /Wfa85fdcdb945771bD49enSemi-Slav DefenseMeran Variation, Blumenfeld Variationr1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 11, - /W1af5395cdc3ee9a0D49enSemi-Slav DefenseMeran Variation, Blumenfeld Variationr1bqkb1r/3n1ppp/p3pn2/1p2P3/3p4/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 11 90  ^6{  s UEEEEE? -Ia6d9a0630340e5a9C80enRuy LopezOpen Variations, Karpov Gambitr2qkb1r/2p2ppp/p1n1b3/1pn1P3/3p4/1BP2N2/PP1N1PPP/R1BQ1RK1 w kq - 0 11W - /Yfced72369a1c6e29)D44enSemi-Slav DefenseBotvinnik System, Lilienthal Variationr1bqkb1r/p2n1p2/2p1pn2/1p2P1B1/2pP4/2N3P1/PP3P1P/R2QKB1R b KQkq - 0 11 C  - Q896011af2276bfaaC88enRuy LopezClosed Variations, Balla Variationr1b1k2r/2q1bppp/p2p1n2/npp1p3/P2PP3/2P2N2/1PB2PPP/RNBQR1K1 b kq - 0 11 -Qe2a96f434fe56a64dC88enRuy LopezClosed Variations, Balla Variationr1b1k2r/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N2/PPB2PPP/RNBQR1K1 w kq - 1 11 -Qe4b6506223ae2565eC88enRuy LopezClosed Variations, Balla Variationr1bqk2r/4bppp/p2p1n2/npp1p3/3PP3/2P2N2/PPB2PPP/RNBQR1K1 b kq - 0 10 -Q21837fc832670827'C88enRuy LopezClosed Variations, Balla Variationr1bqk2r/4bppp/p2p1n2/npp1p3/4P3/2P2N2/PPBP1PPP/RNBQR1K1 w kq - 0 10 -Qc7f2ae66cd20035aZC88enRuy LopezClosed Variations, Balla Variationr1bqk2r/2p1bppp/p2p1n2/np2p3/4P3/2P2N2/PPBP1PPP/RNBQR1K1 b kq - 2 9 -Q37cbc8e1547242d6C88enRuy LopezClosed Variations, Balla Variationr1bqk2r/2p1bppp/p2p1n2/np2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w kq - 1 9 - Oec0f9b42173467efC95enRuy LopezClosed Variations, Breyer Defenser1bq1rk1/2pnbppp/p2p1n2/1p2p3/3PP2N/1BP4P/PP3PP1/RNBQR1K1 b - - 2 11l - ;I23d614cdc1510a50PD41enQueen's Gambit DeclinedSemi-Tarrasch, Kmoch Variationrnbq1rk1/pp3ppp/4p3/1B6/3PP3/5N2/P2Q1PPP/R3K2R b KQ - 2 11k -;I1008c562a4c599d3D41enQueen's Gambit DeclinedSemi-Tarrasch, Kmoch Variationrnbq1rk1/pp3ppp/4p3/8/3PP3/5N2/P2Q1PPP/R3KB1R w KQ - 1 11j -;I1aa028d5719c70388D41enQueen's Gambit DeclinedSemi-Tarrasch, Kmoch Variationrnbqk2r/pp3ppp/4p3/8/3PP3/5N2/P2Q1PPP/R3KB1R b KQkq - 0 10i -;Ie62d6409da990cddD41enQueen's Gambit DeclinedSemi-Tarrasch, Kmoch Variationrnbqk2r/pp3ppp/4p3/8/3PP3/5N2/P2b1PPP/R2QKB1R w KQkq - 0 10 > -I44b4ca0dcf7fcf4eNC80enRuy LopezOpen Variations, Karpov Gambitr2qkb1r/2p2ppp/p1n1b3/1pnpP3/8/1BP2N2/PP1N1PPP/R1BQ1RK1 b kq - 0 10 = -I326e32951f0fc0c8C80enRuy LopezOpen Variations, Karpov Gambitr2qkb1r/2p2ppp/p1n1b3/1pnpP3/8/1B3N2/PPPN1PPP/R1BQ1RK1 w kq - 3 10+ - O2fdf8e78663410f5C83enRuy LopezOpen Variations, Malkin Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP1NQPPP/R1B2RK1 b - - 4 11* -Ob9d9015a28704b71qC83enRuy LopezOpen Variations, Malkin Variationr2q1rk1/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP1N1PPP/R1BQ1RK1 w - - 3 11) -Ob371ecedfd29a29aC83enRuy LopezOpen Variations, Malkin Variationr2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP1N1PPP/R1BQ1RK1 b kq - 2 10c -;I 780e25845536b7abD41enQueen's Gambit DeclinedSemi-Tarrasch, Kmoch Variationrnbqkb1r/pp3ppp/4p3/2p5/3PP3/2n2N2/PP3PPP/R1BQKB1R w KQkq - 0 76 ?c Y  T  BA=V - /I45eb8369a1ca8066fD48enSemi-Slav DefenseMeran Variation, Old Variationr1bqkb1r/3n1ppp/p3pn2/1pp1P3/3P4/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 10.[0 - ;? eec36cc8c45017dfD57enQueen's Gambit DeclinedLasker Defense, Main Linernb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R b KQ - 0 10u -;Qefed771dcd9ef447GD40enQueen's Gambit DeclinedSemi-Tarrasch, Levenfish Variationr1b2rk1/pp2qppp/2nbpn2/2pp4/2PP4/2NBPN2/PP2QPPP/R1B2RK1 w - - 7 9 -;Q7412a86d0ca25a2d-D40enQueen's Gambit DeclinedSemi-Tarrasch, Levenfish Variationr1bq1rk1/pp3ppp/2nbpn2/2pp4/2PP4/2NBPN2/PP2QPPP/R1B2RK1 b - - 6 8| - /S775fd85ec93ced60`D44enSemi-Slav DefenseBotvinnik System, Ekstrom Variationrnbqkb1r/p4p2/2p1pP1p/1p2N3/2pP3p/2N5/PP3PPP/R2QKB1R b KQkq - 1 10{ -/Saa67079192b18816D44enSemi-Slav DefenseBotvinnik System, Ekstrom Variationrnbqkb1r/p4p2/2p1pP1p/1p6/2pP3p/2N2N2/PP3PPP/R2QKB1R w KQkq - 0 10z -/S98aef95fef05007d}D44enSemi-Slav DefenseBotvinnik System, Ekstrom Variationrnbqkb1r/p4p2/2p1pP1p/1p4p1/2pP3B/2N2N2/PP3PPP/R2QKB1R b KQkq - 0 9)i - /y68916887894c9f26&D45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pb4/4P3/2P1Q3/5N2/PP3PPP/R1B1KB1R b KQkq - 0 10)h -/yf40c97c581792856VD45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pb4/4p3/2PPQ3/5N2/PP3PPP/R1B1KB1R w KQkq - 0 10'g -/y f0d54b14a599c53b;D45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pbp3/8/2PPQ3/5N2/PP3PPP/R1B1KB1R b KQkq - 0 9)f -/y ca79195de5751ab9D45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pbp3/8/2PPn3/5N2/PPQ2PPP/R1B1KB1R w KQkq - 0 9)e -/y6d6c35275053cc2c,D45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pbpn2/8/2PPN3/5N2/PPQ2PPP/R1B1KB1R b KQkq - 0 8,d -/yc7ae0bd410a55dbbD45enSemi-Slav DefenseStoltz Variation, Center Variation, Mikhalchishin Liner1bqk2r/pp1n1ppp/2pbpn2/8/2PPp3/2N2N2/PPQ2PPP/R1B1KB1R w KQkq - 0 8C - /U9e9ad6c73cf2305f_D48enSemi-Slav DefenseMeran Variation, Reynolds' Variationr1bqkb1r/3n1ppp/p3pn2/1ppP4/4P3/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 10 8S [ O  t $ ySSSSSSSS& -%O2af9cc87f20fb8dbC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/1bn5/4p3/2B1P3/1QP2N2/P4PPP/RNB2RK1 w kq - 2 10% -%O 75a4e1f843a9cb74tC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/2n5/b3p3/2B1P3/1QP2N2/P4PPP/RNB2RK1 b kq - 1 9$ +%Obd19acc3f5a1064dC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/2n5/b3p3/2B1P3/1QP2N2/P4PPP/RNB1K2R w KQkq - 0 9# -%O31f49a238e145eedC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/2np4/b3P3/2B1P3/1QP2N2/P4PPP/RNB1K2R b KQkq - 0 8" -%Oad6965618621e99dC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/2np4/b3p3/2BPP3/1QP2N2/P4PPP/RNB1K2R w KQkq - 2 8 cP - %e 5a25e99e6ca15ecaC52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k2r/ppppnppp/2n3q1/b3P3/2B5/BQN2N2/P4PPP/R4RK1 b kq - 2 11 -%e f83638d8e671cfa3C52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k2r/ppppnppp/2n3q1/b3P3/2B5/1QN2N2/P4PPP/R1B2RK1 w kq - 1 11j - %k 2d9c3fb7708893ecC55enItalian GameScotch Gambit, Max Lange Attack, Long Variationr3k2r/ppp2ppp/2n1bP2/2b2qN1/2ppN3/8/PPP2PPP/R1BQR1K1 b kq - 7 11  -%ec67984655df8441eC52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k1nr/pppp1ppp/2n3q1/b3P3/2B5/1QN2N2/P4PPP/R1B2RK1 b kq - 0 10 -%e49a727381f052bccC52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k1nr/pppp1ppp/2n3q1/b3P3/2B5/1Qp2N2/P4PPP/RNB2RK1 w kq - 1 10 -%e cbd5e2a4d71145a3C52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k1nr/pppp1ppp/2n2q2/b3P3/2B5/1Qp2N2/P4PPP/RNB2RK1 b kq - 0 9 -%e aaacf459d30f63c7C52enItalian GameEvans Gambit, Compromised Defense, Main Liner1b1k1nr/pppp1ppp/2n2q2/b7/2B1P3/1Qp2N2/P4PPP/RNB2RK1 w kq - 2 9 -%e ad94699eb6e6202a*C52enItalian GameEvans Gambit, Compromised Defense, Main Liner1bqk1nr/pppp1ppp/2n5/b7/2B1P3/1Qp2N2/P4PPP/RNB2RK1 b kq - 1 8! - %s 1514081d7ec439acC52enItalian GameEvans Gambit, Compromised Defense, Potter Variationr1b1k2r/ppppnppp/2n3q1/b3P3/2B5/1QN2N2/P4PPP/R1BR2K1 b kq - 2 11 @Z f  s i2[#@D| - %W52ffde87170803c5C53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2bBP3/8/2p2NK1/PP4PP/RNBQ3R b kq - 1 9 { -%W7db6f7330b833e7e~C53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2bBP3/8/2p2N2/PP3KPP/RNBQ3R w kq - 0 9z -%Wbc6959cda812a4eeC53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2bBP3/3p4/2P2N2/PP3KPP/RNBQ3R b kq - 0 8G, -%[6384c9e45d5d18d3C51enItalian GameEvans Gambit Declined, Hicken Variationr1b1k1nr/pppp1ppp/1b6/nP2q3/2B1P3/5Q2/P1PP1PPP/RNB1K2R w KQkq - 0 8+ +%[7a427a04eb451a1C51enItalian GameEvans Gambit Declined, Hicken Variationr1b1k1nr/pppp1ppp/1b6/nP2N1q1/2B1P3/5Q2/P1PP1PPP/RNB1K2R b KQkq - 2 7  - %[b7d0f2ff476eb81fC53enItalian GameClassical Variation, Tarrasch Variationr1b1k2r/1pp1qppp/pbnp1n2/4p3/P1BPP3/2P2N1P/1P3PP1/RNBQR1K1 b kq - 2 9 -%[3364fc74c0c6130b C53enItalian GameClassical Variation, Tarrasch Variationr1b1k2r/1pp1qppp/pbnp1n2/4p3/P1BPP3/2P2N1P/1P3PP1/RNBQ1RK1 w kq - 1 9 -%[688ac8816d3c529dC53enItalian GameClassical Variation, Tarrasch Variationr1b1k1nr/1pp1qppp/pbnp4/4p3/P1BPP3/2P2N1P/1P3PP1/RNBQ1RK1 b kq - 0 8 -%[8079153faf9f9b6foC53enItalian GameClassical Variation, Tarrasch Variationr1b1k1nr/1pp1qppp/pbnp4/4p3/P1BPP3/2P2N2/1P3PPP/RNBQ1RK1 w kq - 0 8 -%[528ee4cc48bf63b3C53enItalian GameClassical Variation, Tarrasch Variationr1b1k1nr/ppp1qppp/1bnp4/4p3/P1BPP3/2P2N2/1P3PPP/RNBQ1RK1 b kq - 0 7 -%[39479a20252cb67d}C53enItalian GameClassical Variation, Tarrasch Variationr1b1k1nr/ppp1qppp/1bnp4/4p3/2BPP3/2P2N2/PP3PPP/RNBQ1RK1 w kq - 0 7 )%[fd0c41f754ff10C53enItalian GameClassical Variation, Tarrasch Variationr1b1k1nr/ppppqppp/1bn5/4p3/2BPP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 2 64! - %ocee472201cf49d333C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/bpp2ppp/p1np1n2/4p3/4P3/1BPP1N1P/PP3PP1/RNBQR1K1 b - - 0 9! -%o2617af9ede5754c1C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/bpp2ppp/p1np1n2/4p3/4P3/1BPP1N2/PP3PPP/RNBQR1K1 w - - 2 9# -%oe7d3b77d5c94ccc5C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/1pp2ppp/p1np1n2/2b1p3/4P3/1BPP1N2/PP3PPP/RNBQR1K1 b - - 1 8# -%o2ed7a75fd7b29c21!C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/1pp2ppp/p1np1n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQR1K1 w - - 0 8# -%ofc2056ac309264fdC53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/ppp2ppp/2np1n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQR1K1 b - - 3 7# -%o78945827b73acfe9C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bq1rk1/ppp2ppp/2np1n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQ1RK1 w - - 2 7" -%o723cb59062632602C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bqk2r/ppp2ppp/2np1n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQ1RK1 b kq - 1 6" +%oc49cea41e90fd12C53enItalian GameClassical Variation, Giuoco Pianissimo, Main Liner1bqk2r/ppp2ppp/2np1n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQK2R w KQkq - 0 6   ! w #%-5dddddd > - %M75e8a3d25c128d93C51enItalian GameEvans Gambit, Steinitz Variationr1bqk1nr/ppp3pp/1b1p1p2/n7/2BPP3/2N1BN2/P4PPP/R2Q1RK1 b kq - 1 11= -%M386c69a2c285c8dcC51enItalian GameEvans Gambit, Steinitz Variationr1bqk1nr/ppp3pp/1b1p1p2/n5B1/2BPP3/2N2N2/P4PPP/R2Q1RK1 w kq - 0 11 {S - #- a8c1abdd657c20f8C45enScotch GameBerger VariationN1bk3r/pp1p1ppp/2n2n2/8/1b6/P4B1q/1PPN1P1P/R1BQK2R b KQ - 0 11zR -#-635d9afb2c30aeb8C45enScotch GameBerger VariationN1bk3r/pp1p1ppp/2n2n2/8/1b6/5B1q/PPPN1P1P/R1BQK2R w KQ - 1 11xQ -#-38b3ae0e81caef2e.C45enScotch GameBerger VariationN1bk2nr/pp1p1ppp/2n5/8/1b6/5B1q/PPPN1P1P/R1BQK2R b KQ - 0 10yP -#-8a6d05b3bf05c68bC45enScotch GameBerger Variationr1bk2nr/ppNp1ppp/2n5/8/1b6/5B1q/PPPN1P1P/R1BQK2R w KQ - 1 10yO +#- 3741bd433d98a22"C45enScotch GameBerger Variationr1b1k1nr/ppNp1ppp/2n5/8/1b6/5B1q/PPPN1P1P/R1BQK2R b KQkq - 0 9|N -#- af2a46bfaf44574dMC45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b6/5B1q/PPPN1P1P/R1BQK2R w KQkq - 2 9|M -#- 8bed9750067f3deaC45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b6/5B2/PPPN1PqP/R1BQK2R b KQkq - 1 8zL -#-76cb831d1aff11a8C45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b6/8/PPPNBPqP/R1BQK2R w KQkq - 0 8|K -#- e7e3dc946e9a9dabC45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b2q3/8/PPPNBPPP/R1BQK2R b KQkq - 1 7|J -#- 94635f6d6fbfd708C45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b2q3/8/PPPN1PPP/R1BQKB1R w KQkq - 0 7}I -#-da50408558ac045d]C45enScotch GameBerger Variationr1b1k1nr/pppp1ppp/2n5/1N6/1b2P2q/8/PPPN1PPP/R1BQKB1R b KQkq - 4 6Gr ) - %O 63bec3cf71fd2e8eC52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/1b6/n3N3/2B1P3/BQP5/P4PPP/RN3RK1 b kq - 0 11( -%O ddfd3734d5e38bb8C52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/1b6/n3p3/2B1P3/BQP2N2/P4PPP/RN3RK1 w kq - 4 11' -%O 88ea1dc178df29b2C52enItalian GameEvans Gambit, Levenfish Variationr1b1k1nr/pppq1ppp/1bn5/4p3/2B1P3/BQP2N2/P4PPP/RN3RK1 b kq - 3 10 n " > X g9| - -172f52ef364bf5f8B69enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variation, Nyezhmetdinov Attackr2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 119{ - -772b38faade648c5B69enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variation, Nyezhmetdinov Attackr2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10h -  e6385b99ed0b5896C37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defenser1b1k2r/ppppnp1p/2n4b/4q3/2B2p2/2NP1Q2/PPPB2PP/4RRK1 b kq - 6 11g + 80cee1bf6ef41b9C37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defenser1b1k2r/ppppnp1p/2n4b/4q3/2B2p2/2NP1Q2/PPPB2PP/R4RK1 w kq - 5 11f - a3e136f9e77ee4baC37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defensernb1k2r/ppppnp1p/7b/4q3/2B2p2/2NP1Q2/PPPB2PP/R4RK1 b kq - 4 10e - 8a6c6c4c751f8fbeC37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defensernb1k2r/ppppnp1p/7b/4q3/2B2p2/2NP1Q2/PPP3PP/R1B2RK1 w kq - 3 10d - b423d0f1ce960403C37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defensernb1k1nr/pppp1p1p/7b/4q3/2B2p2/2NP1Q2/PPP3PP/R1B2RK1 b kq - 2 9c - 4fb4c8530c7486daC37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defensernb1k1nr/pppp1p1p/7b/4q3/2B2p2/3P1Q2/PPP3PP/RNB2RK1 w kq - 1 9b + 7908dbf69e217b5C37enKing's Gambit Accepted, Double Muzio Gambit, Paulsen Defensernb1kbnr/pppp1p1p/8/4q3/2B2p2/3P1Q2/PPP3PP/RNB2RK1 b kq - 0 8?  &D L  V < - )W2daa354a42c67c14A79enBenoni DefenseClassical Variation, Czerniak Defenser1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11' - -Ue7d594c774e30096B03enAlekhine DefenseExchange Variation, Karpov Variationr2q1rk1/pp2ppbp/1nnp2p1/5b2/2PP1B2/2N2N1P/PP2BPP1/R2Q1RK1 b - - 8 11& --U3c817246ed83eaf5B03enAlekhine DefenseExchange Variation, Karpov Variationr2q1rk1/pp2ppbp/1nnp2p1/5b2/2PP4/2N2N1P/PP2BPP1/R1BQ1RK1 w - - 7 11% --Ubf981bc85a66e378xB03enAlekhine DefenseExchange Variation, Karpov Variationr1bq1rk1/pp2ppbp/1nnp2p1/8/2PP4/2N2N1P/PP2BPP1/R1BQ1RK1 b - - 6 10$ --Uc1ed60fc26953868hB03enAlekhine DefenseExchange Variation, Karpov Variationr1bq1rk1/pp2ppbp/1nnp2p1/8/2PP4/2N2N1P/PP2BPP1/R1BQK2R w KQ - 5 10# --U6a00b81e37049d6bkB03enAlekhine DefenseExchange Variation, Karpov Variationrnbq1rk1/pp2ppbp/1n1p2p1/8/2PP4/2N2N1P/PP2BPP1/R1BQK2R b KQ - 4 9" --U19803be73621d7c8B03enAlekhine DefenseExchange Variation, Karpov Variationrnbq1rk1/pp2ppbp/1n1p2p1/8/2PP4/2N2N1P/PP3PP1/R1BQKB1R w KQ - 3 96} - - b2105b3eed55ab18B69enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variation, Nyezhmetdinov Attackr2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 118! --U1328d650e3783e23#B03enAlekhine DefenseExchange Variation, Karpov Variationrnbqk2r/pp2ppbp/1n1p2p1/8/2PP4/2N2N1P/PP3PP1/R1BQKB1R b KQkq - 2 8 --U c84c3aa68b9e5f1eB03enAlekhine DefenseExchange Variation, Karpov Variationrnbqk2r/pp2ppbp/1n1p2p1/8/2PP4/2N4P/PP3PP1/R1BQKBNR w KQkq - 1 8 --U78f0071070d994b4B03enAlekhine DefenseExchange Variation, Karpov Variationrnbqkb1r/pp2pp1p/1n1p2p1/8/2PP4/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 7 --U 9003daaeb27a5d46FB03enAlekhine DefenseExchange Variation, Karpov Variationrnbqkb1r/pp2pp1p/1n1p2p1/8/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7 --U 79b789f5c9f5cf0d B03enAlekhine DefenseExchange Variation, Karpov Variationrnbqkb1r/pp2pppp/1n1p4/8/2PP4/2N5/PP3PPP/R1BQKBNR b KQkq - 1 6 --U822091570b174dd4B03enAlekhine DefenseExchange Variation, Karpov Variationrnbqkb1r/pp2pppp/1n1p4/8/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 68 - - 7c468867af7cd1cfB33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variation, Peresypkin's Sacrificer1bqkb1r/5p1p/p1np4/1B1Npp2/4P3/N7/PPP2PPP/R2QK2R b KQkq - 0 11  } ]@#o < < < < < < < <y2e - 7ydc58a8ad9af3ddb5E99enKing's Indian DefenseOrthodox Variation, Classical System, Traditional Liner1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 w - - 0 110d - 7y4837ce34247bf06bkE99enKing's Indian DefenseOrthodox Variation, Classical System, Traditional Liner1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10 Q - a 4f7b0081a28b4a17A59enBenko Gambit Accepted, King Walk Variationrn1q1rk1/4ppbp/3p1np1/2pP4/4P3/2N2NP1/PP3PKP/R1BQ3R b - - 2 11 P -a 108b5b447eeda699A59enBenko Gambit Accepted, King Walk Variationrn1q1rk1/4ppbp/3p1np1/2pP4/4P3/2N2NP1/PP3P1P/R1BQ1K1R w - - 1 11 O -a 1a23b6f3abb44f72rA59enBenko Gambit Accepted, King Walk Variationrn1qk2r/4ppbp/3p1np1/2pP4/4P3/2N2NP1/PP3P1P/R1BQ1K1R b kq - 0 10 N -a 36c50db24b63974aJA59enBenko Gambit Accepted, King Walk Variationrn1qk2r/4ppbp/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQ1K1R w kq - 1 10 M -a 86793004b0245ce0A59enBenko Gambit Accepted, King Walk Variationrn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQ1K1R b kq - 0 9 L -a 206cbb97f7aa8db3A59enBenko Gambit Accepted, King Walk Variationrn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKb1R w KQkq - 0 9 K -a e33d195b51005000A59enBenko Gambit Accepted, King Walk Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 8 , I -a 1e80827268f8a467gA59enBenko Gambit Accepted, King Walk Variationrn1qkb1r/3ppp1p/b4np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 7 { H `  q % 9HHHHHHHHHHH7[ -+49ce4eebd3fedd06A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2P1P3/2N3P1/PP1PNPBP/R1BQK2R b KQ - 1 69Z -+5d6aa524fbd5d0f8A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2P1P3/2N3P1/PP1P1PBP/R1BQK1NR w KQ - 0 67Y -+64d0334529ad9995A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/ppppppbp/5np1/8/2P1P3/2N3P1/PP1P1PBP/R1BQK1NR b KQ - 0 5`+6U -+ 4461c432f763549bA10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbqk1nr/ppppppbp/6p1/8/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3 P - +m f49d70a9f48becebA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1pp1/5n1p/4n3/2PN3B/2P5/P3PPPP/R2QKB1R w KQkq - 1 9O ++m 4c06de23b64c68bA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1pp1/2n2n1p/8/2PN3B/2P5/P3PPPP/R2QKB1R b KQkq - 0 8!N -+m 4f1507d3963829cbA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1pp1/2n2n1p/8/2PN3B/2b5/PP2PPPP/R2QKB1R w KQkq - 0 8"M -+m6e2c7cd58b807bc1A28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1pp1/2n2n1p/8/1bPN3B/2N5/PP2PPPP/R2QKB1R b KQkq - 1 7"L -+m34a31416783e595aZA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1pp1/2n2n1p/6B1/1bPN4/2N5/PP2PPPP/R2QKB1R w KQkq - 0 7!K -+ma6545f70efea104fOA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1ppp/2n2n2/6B1/1bPN4/2N5/PP2PPPP/R2QKB1R b KQkq - 2 6!J -+m 600e08465f60cb87A28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqk2r/pppp1ppp/2n2n2/8/1bPN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 1 6!I -+m a94f6140149703a5A28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqkb1r/pppp1ppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 5#H -+mcedb3c1d05a6918bA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqkb1r/pppp1ppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5  2 < & r Gooooooooo Y3 ! - +9276cfb47883a902a*E08enCatalan OpeningClosed, Spassky Gambitr2q1rk1/pb1nbppp/2p1pn2/1p1p4/2PP4/1PN2NP1/P1Q1PPBP/R1BR2K1 w - - 0 11 -+9d4d7fee842331f85E08enCatalan OpeningClosed, Spassky Gambitr2q1rk1/pb1nbppp/1pp1pn2/3p4/2PP4/1PN2NP1/P1Q1PPBP/R1BR2K1 b - - 3 10CP --_e436c5a8a4cc4384D34enTarrasch DefenseClassical Variation, Bogoljubov Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4O --_3f52295ecc2a22b9D34enTarrasch DefenseClassical Variation, Bogoljubov Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4I - ;A 5518f3e073767c77wD67enQueen's Gambit DeclinedOrthodox Defense, Bd3 Liner1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 0 11H -;A b5d82d054e25fb12D67enQueen's Gambit DeclinedOrthodox Defense, Bd3 Liner1bq1rk1/pp1nBppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQK2R b K - 0 1005 - / 98c84be2d90e8fbcD85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Liner1bq1rk1/pp2pp1p/2n3p1/2pP4/4P3/2b2N2/P3BPPP/1RBQK2R w K - 0 11/4 -/ ef1dd8e2a149d303D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Liner1bq1rk1/pp2ppbp/2n3p1/2pP4/4P3/2P2N2/P3BPPP/1RBQK2R b K - 0 10/3 -/ 55159bb1386f455e^D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Liner1bq1rk1/pp2ppbp/2n3p1/2p5/3PP3/2P2N2/P3BPPP/1RBQK2R w K - 4 10,2 -/fef8435329fee05d]D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Linernbq1rk1/pp2ppbp/6p1/2p5/3PP3/2P2N2/P3BPPP/1RBQK2R b K - 3 9-1 -/8d78c0aa28dbaafeD85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Linernbq1rk1/pp2ppbp/6p1/2p5/3PP3/2P2N2/P4PPP/1RBQKB1R w K - 2 9-0 -/87d02d1dfd824315D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Pawn Grab Linernbqk2r/pp2ppbp/6p1/2p5/3PP3/2P2N2/P4PPP/1RBQKB1R b Kkq - 1 8b Lwe V I ;c Y YIIIIII60o - / 3c70d63bf9164ff3D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/pp2ppbp/6p1/2p5/3PP3/2P2N1P/P4PP1/R1BQKB1R b KQkq - 0 8-n - / d4830b853bb58601D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/pp2ppbp/6p1/2p5/3PP3/2P2N2/P4PPP/R1BQKB1R w KQkq - 0 8.l -/ b10068f6329b7565eD85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/ppp1ppbp/6p1/8/3PP3/2n2N2/PP3PPP/R1BQKB1R w KQkq - 0 70k -/ fd914606a91e7b27'D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/ppp1ppbp/6p1/3n4/3PP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 60j -/ 39964b4e429ec62d-D85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/ppp1ppbp/6p1/3n4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 61i -/a6783103fd7bdb71qD85enGrünfeld DefenseExchange Variation, Modern Exchange Variation, Kramnik's Linernbqk2r/ppp1ppbp/5np1/3P4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5| - /e4f01d6352c22099aD84enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambit Acceptedrnbq1rk1/ppp1ppbp/6p1/3N4/3P1B2/4P3/PP3PPP/R2QKBNR b KQ - 0 7{ - /e 9e23ee3c421e2c3cC96enRuy LopezClosed Variations, Closed Defenser1bq1rk1/4bppp/p2p1n2/npp1p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 w - - 0 111 - ;wa39b3e13f7a4dfb9D29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Smyslov Variationr2qk2r/1b1n1ppp/p2bpn2/1pp5/3P4/1BN1PN2/PP2QPPP/R1BR2K1 w kq - 6 110 +;w7c3539128be0e9dD29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Smyslov Variationr2qkb1r/1b1n1ppp/p3pn2/1pp5/3P4/1BN1PN2/PP2QPPP/R1BR2K1 b kq - 5 10/ -;wfc544b33ea5c8c44DD29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Smyslov Variationr2qkb1r/1b1n1ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNBR2K1 w kq - 4 10. -;w cfb7306e0af46188D29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Smyslov Variationrn1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNBR2K1 b kq - 3 9  - -]e0097719b1e627feD34enTarrasch DefenseClassical Variation, Petursson Variationr1bqr1k1/pp2bppp/2n2n2/3p2B1/3N4/2N3P1/PP2PPBP/R2Q1RK1 w - - 1 11 --]fc58b0598396c27c|D34enTarrasch DefenseClassical Variation, Petursson Variationr1bq1rk1/pp2bppp/2n2n2/3p2B1/3N4/2N3P1/PP2PPBP/R2Q1RK1 b - - 0 10 --]9bcced0492a75052RD34enTarrasch DefenseClassical Variation, Petursson Variationr1bq1rk1/pp2bppp/2n2n2/3p2B1/3p4/2N2NP1/PP2PPBP/R2Q1RK1 w - - 0 10yT -+ 7f3b946491dd1368hC88enRuy LopezNoah's Ark Trapr1bqk2r/2p1bppp/p2p1n2/1p6/3QP3/1B6/PPP2PPP/RNB1R1K1 b kq - 0 10xS ++ 28c83a0a54cfc55UC88enRuy LopezNoah's Ark Trapr1bqk2r/2p1bppp/p2p1n2/1p6/3pP3/1B6/PPP2PPP/RNBQR1K1 w kq - 0 10zR -+facca008f464ea1fC88enRuy LopezNoah's Ark Trapr1bqk2r/2p1bppp/p2p1n2/1p2p3/3NP3/1B6/PPP2PPP/RNBQR1K1 b kq - 0 9|Q -+1f6e998ac195f904C88enRuy LopezNoah's Ark Trapr1bqk2r/2p1bppp/p2p1n2/1p2p3/3nP3/1B3N2/PPP2PPP/RNBQR1K1 w kq - 0 9  :h9|N n - ;C eb99c67d7a6df29cD26enQueen's Gambit AcceptedClassical, Furman Variationr1bqk2r/5ppp/p1n1pn2/1pb1P3/2B5/5N2/PP2QPPP/RNB2RK1 b kq - 0 10m -;C 8ae0d0807e73d4f8D26enQueen's Gambit AcceptedClassical, Furman Variationr1bqk2r/5ppp/p1n1pn2/1pb5/2B1P3/5N2/PP2QPPP/RNB2RK1 w kq - 0 10l -;C eae4ba95e5de69c5D26enQueen's Gambit AcceptedClassical, Furman Variationr1bqk2r/1p3ppp/p1n1pn2/2b5/2B1P3/5N2/PP2QPPP/RNB2RK1 b kq - 0 9k -;C 7b18d3c58526d962bD26enQueen's Gambit AcceptedClassical, Furman Variationr1bqk2r/1p3ppp/p1n1pn2/2b5/2B5/4PN2/PP2QPPP/RNB2RK1 w kq - 2 9j -;Cd0f50b2794b77c61aD26enQueen's Gambit AcceptedClassical, Furman Variationrnbqk2r/1p3ppp/p3pn2/2b5/2B5/4PN2/PP2QPPP/RNB2RK1 b kq - 1 8i -;C ae807013e844a771qD26enQueen's Gambit AcceptedClassical, Furman Variationrnbqk2r/1p3ppp/p3pn2/2b5/2B5/4PN2/PP2QPPP/RNB1K2R w KQkq - 0 8h -;C 3a936bfc6f7759b9D26enQueen's Gambit AcceptedClassical, Furman Variationrnbqkb1r/1p3ppp/p3pn2/2P5/2B5/4PN2/PP2QPPP/RNB1K2R b KQkq - 0 7g -;C 4570492c8c6b0ed5D26enQueen's Gambit AcceptedClassical, Furman Variationrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB1K2R w KQkq - 0 7f -;C 9787b8df6b4bf609 D26enQueen's Gambit AcceptedClassical, Furman Variationrnbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP2QPPP/RNB1K2R b KQkq - 1 6h<[ - -U c6f685086152a12a*D34enTarrasch DefenseClassical Variation, Réti Variationr1bq1rk1/pp3ppp/2n2n2/2bp4/N7/5NP1/PP2PPBP/R1BQ1RK1 b - - 1 10Z +-U 5626c7d5e7a6260`D34enTarrasch DefenseClassical Variation, Réti Variationr1bq1rk1/pp3ppp/2n2n2/2bp4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10  yZrfI [[[[[[} - 5ca0c1aacc125622d-C78enRuy LopezRabinovich Variationr1bq1k1r/2p2ppp/p4n2/1pbPR1N1/3n4/1B6/PPPP1PPP/RNBQ2K1 w - - 1 11xU - + 994a45ca6e9a1815C88enRuy LopezNoah's Ark Trapr1bqk2r/4bppp/p2p1n2/1pp5/3QP3/1B6/PPP2PPP/RNB1R1K1 w kq - 0 11O% - %{84270f7bcc30ef322C59enItalian GameTwo Knights Defense, Polerio Defense, Göring Variationr1b1kb1r/p1q2pp1/2p2n1p/n3N3/4p3/8/PPPPBPPP/RNBQK2R w KQkq - 2 11# -%{ 8238305aa07ba0333C59enItalian GameTwo Knights Defense, Polerio Defense, Göring Variationr1bqkb1r/p4pp1/2p2n1p/n3N3/4p3/8/PPPPBPPP/RNBQK2R b KQkq - 1 10# -%{ 5f00ef95fbf6c545EC59enItalian GameTwo Knights Defense, Polerio Defense, Göring Variationr1bqkb1r/p4pp1/2p2n1p/n7/4p3/5N2/PPPPBPPP/RNBQK2R w KQkq - 0 10# -%{ 7006d2fbc9f31ab3C59enItalian GameTwo Knights Defense, Polerio Defense, Göring Variationr1bqkb1r/p4pp1/2p2n1p/n3p3/8/5N2/PPPPBPPP/RNBQK2R b KQkq - 1 9  % - %O4db5041bdf39d44bKC54enItalian GameGiuoco Piano, Bernstein Variationr1bqk2r/ppp2ppp/2n5/3p4/2BP4/1Qb2N2/P4PPP/R1B2RK1 w kq - 0 11| -5e9f8b7c6995316e5C78enRuy LopezRabinovich Variationr1bqk2r/2p2ppp/p4n2/1pbPR1N1/3n4/1B6/PPPP1PPP/RNBQ2K1 b kq - 0 10{ -54fa1389e05cbd109 C78enRuy LopezRabinovich Variationr1bqk2r/2p2ppp/p4n2/1pbPp1N1/3n4/1B6/PPPP1PPP/RNBQR1K1 w kq - 3 10z -5e2bc7cc5cff93b8aC78enRuy LopezRabinovich Variationr1bqkb1r/2p2ppp/p4n2/1p1Pp1N1/3n4/1B6/PPPP1PPP/RNBQR1K1 b kq - 2 9y -56608724e4851909eC78enRuy LopezRabinovich Variationr1bqkb1r/2p2ppp/p4n2/1p1Pp1N1/3n4/1B6/PPPP1PPP/RNBQ1RK1 w kq - 1 9x -5b1751eaff615d03f?C78enRuy LopezRabinovich Variationr1bqkb1r/2p2ppp/p1n2n2/1p1Pp1N1/8/1B6/PPPP1PPP/RNBQ1RK1 b kq - 0 8w -596aa14e22c7a92399C78enRuy LopezRabinovich Variationr1bqkb1r/2p2ppp/p1n2n2/1p1pp1N1/4P3/1B6/PPPP1PPP/RNBQ1RK1 w kq - 0 8v -5d2ac863dcdf1107b{C78enRuy LopezRabinovich Variationr1bqkb1r/2p2ppp/p1np1n2/1p2p1N1/4P3/1B6/PPPP1PPP/RNBQ1RK1 b kq - 1 7 =i - ]f741e7a6828956deC82enRuy LopezOpen, Motzko Attack, Nenarokov Variationr2qk2r/2p1nppp/p3b3/1pbpP3/4n3/1BPQ1N2/PP3PPP/RNB2RK1 w kq - 3 11tI -/Ea093a705fd0664f7C49enFour Knights GameSymmetrical, Blake Variationr1bq1rk1/pp2nppp/2pp1n2/1B2p1B1/1b2P2N/2NP4/PPP2PPP/R2Q1RK1 w - - 0 9H -/E32e94aea8ac6b74cLC49enFour Knights GameSymmetrical, Blake Variationr1bq1rk1/ppp1nppp/3p1n2/1B2p1B1/1b2P2N/2NP4/PPP2PPP/R2Q1RK1 b - - 3 89 - %K8dcf3594653507bdC51enItalian GameEvans Gambit, Paulsen Variationr1bqk2r/ppp1nppp/1b1p4/n2P4/2B1P3/5N2/PB3PPP/RN1Q1RK1 w kq - 3 11 $ -%Oc8df260f43ed9a6dmC54enItalian GameGiuoco Piano, Bernstein Variationr1bqk2r/pppp1ppp/2n5/8/2BP4/1Qb2N2/P4PPP/R1B2RK1 b kq - 1 10   l >] r #zn`Cww Y]  -%K ebd9911899e28869iC42enRussian GameClassical Attack, Marshall Traprn1q1rk1/ppp2ppp/3b4/3P4/3Pn1b1/3B1N2/PP3PPP/RNBQ1RK1 b - - 0 9 - %U14db4274384d0bf6C42enRussian GameClassical Attack, Maróczy Variationr2qk2r/ppp3pp/2n5/3p1p2/2PPn1bb/3B1N2/PP3PPP/RNBQR1K1 w kq - 1 11u - /3c10f12ad0c91a34dMC48enFour Knights GameSpielmann Variationr3kb1r/1pp2ppp/p1p1b3/3q4/3PN3/8/PPP2PPP/R1BQR1K1 w kq - 1 11t -/3e14143fadbf16ab7C48enFour Knights GameSpielmann Variationr3kb1r/1pp2ppp/p1p1b3/4q3/3PN3/8/PPP2PPP/R1BQR1K1 b kq - 0 10s -/324746c50ca3847f5C48enFour Knights GameSpielmann Variationr3kb1r/1pp2ppp/p1p1b3/4q3/4N3/8/PPPP1PPP/R1BQR1K1 w kq - 2 10r -/370ccfe84828d3cfdC48enFour Knights GameSpielmann Variationr1b1kb1r/1pp2ppp/p1p5/4q3/4N3/8/PPPP1PPP/R1BQR1K1 b kq - 1 9q -/3f478f00f052597e9C48enFour Knights GameSpielmann Variationr1b1kb1r/1pp2ppp/p1p5/4q3/4N3/8/PPPP1PPP/R1BQ1RK1 w kq - 0 9p -/39a3fa9f2fd53a3c4C48enFour Knights GameSpielmann Variationr1b1kb1r/1pp2ppp/p1p5/4N3/3qN3/8/PPPP1PPP/R1BQ1RK1 b kq - 2 8o -/3 e44ad2c681a078d4C48enFour Knights GameSpielmann Variationr1b1kb1r/1pp2ppp/p1p5/4N3/3qN3/8/PPPP1PPP/R1BQK2R w KQkq - 1 8n -/3acd002564d23347b{C48enFour Knights GameSpielmann Variationr1bqkb1r/1pp2ppp/p1p5/4N3/4N3/8/PPPP1PPP/R1BQK2R b KQkq - 0 7m -/3 5d96091667929defC48enFour Knights GameSpielmann Variationr1bqkb1r/1pp2ppp/p1p5/4N3/4n3/2N5/PPPP1PPP/R1BQK2R w KQkq - 0 7l -/3e021474f61453afcC48enFour Knights GameSpielmann Variationr1bqkb1r/1pp2ppp/p1p2n2/4N3/4P3/2N5/PPPP1PPP/R1BQK2R b KQkq - 0 6 k -/35e62b3b4c55b9fcaC48enFour Knights GameSpielmann Variationr1bqkb1r/1pp2ppp/p1p2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 6 M - /E30460d457d427a62bC49enFour Knights GameSymmetrical, Blake Variationr1b2rk1/pp2nppp/2pq1n2/3pp1B1/1b2P2N/1BNP4/PPP2PPP/R2Q1RK1 w - - 2 11L -/E852a66d5755b767d}C49enFour Knights GameSymmetrical, Blake Variationr1bq1rk1/pp2nppp/2p2n2/3pp1B1/1b2P2N/1BNP4/PPP2PPP/R2Q1RK1 b - - 1 10K -/E4c2e76f7fe7d2699C49enFour Knights GameSymmetrical, Blake Variationr1bq1rk1/pp2nppp/2p2n2/3pp1B1/1bB1P2N/2NP4/PPP2PPP/R2Q1RK1 w - - 0 10J +/E828e4281ff6a4dbC49enFour Knights GameSymmetrical, Blake Variationr1bq1rk1/pp2nppp/2pp1n2/4p1B1/1bB1P2N/2NP4/PPP2PPP/R2Q1RK1 b - - 1 9 a - /]568c1f717710cc58XC49enFour Knights GameSpanish Variation, Symmetrical Variationr2n1rk1/ppp1qppp/3p1n2/1B2p1B1/3PP1b1/2P2N2/P1P2PPP/R2QR1K1 w - - 1 11 ` -/]545fd5433095c2b2C49enFour Knights GameSpanish Variation, Symmetrical Variationr1bn1rk1/ppp1qppp/3p1n2/1B2p1B1/3PP3/2P2N2/P1P2PPP/R2QR1K1 b - - 0 10_ -/]c7181f96caebd12d-C49enFour Knights GameSpanish Variation, Symmetrical Variationr1bn1rk1/ppp1qppp/3p1n2/1B2p1B1/4P3/2PP1N2/P1P2PPP/R2QR1K1 w - - 3 10^ -/]7215673d2f4046ceC49enFour Knights GameSpanish Variation, Symmetrical Variationr1b2rk1/ppp1qppp/2np1n2/1B2p1B1/4P3/2PP1N2/P1P2PPP/R2QR1K1 b - - 2 9 VlF  zL{wwww *_y -%W dfa97860f1177a49IC53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2bBP3/3p4/2P2N2/PP3nPP/RNBQK2R w KQkq - 0 8x -%Wdf5fd4216dfaee27'C53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2bBP3/3pn3/2P2N2/PP3PPP/RNBQK2R b KQkq - 2 7w -%W9e6de45aeb9d9d62bC53enItalian GameGiuoco Piano, Ghulam-Kassim Variationr1bqk2r/pppp1ppp/2n5/2b1P3/2Bpn3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7(k - % 564475192bd8a7ffC54enItalian GameClassical Variation, Greco Gambit, Moeller-Therkatz Attackr1bqk2r/pppp1ppp/2n5/3P4/2B1n3/2b2N2/PP3PPP/R1BQ1RK1 b kq - 0 9 Z - %]e980cea0b162e941AC55enItalian GameScotch Gambit, Max Lange Attack Acceptedr2qk2r/ppp2pPp/2n1b3/2b5/2pp4/5N2/PPP2PPP/RNBQR1K1 b kq - 0 9Y -%] bf1c6d32d82cd028(C55enItalian GameScotch Gambit, Max Lange Attack Acceptedr2qk2r/ppp2ppp/2n1bP2/2b5/2pp4/5N2/PPP2PPP/RNBQR1K1 w kq - 2 9X -%] eba4ffe69099ab20 C55enItalian GameScotch Gambit, Max Lange Attack Acceptedr1bqk2r/ppp2ppp/2n2P2/2b5/2pp4/5N2/PPP2PPP/RNBQR1K1 b kq - 1 8W -%] 6f10f16d173100344C55enItalian GameScotch Gambit, Max Lange Attack Acceptedr1bqk2r/ppp2ppp/2n2P2/2b5/2pp4/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 8V -%] 3d44e7035040d84dMC55enItalian GameScotch Gambit, Max Lange Attack Acceptedr1bqk2r/ppp2ppp/2n2P2/2bp4/2Bp4/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 7U -%]3539d7ae553b1a89C55enItalian GameScotch Gambit, Max Lange Attack Acceptedr1bqk2r/ppp2ppp/2n2n2/2bpP3/2Bp4/5N2/PPP2PPP/RNBQ1RK1 w kq d6 0 7I - %S c7ac015a02afc841AC55enItalian GameGiuoco Piano, Rosentreter Variationr1bqk2r/pppp1p2/5n1p/4p1p1/2BnPP1B/8/PPP3PP/RN1Q1RK1 b kq - 0 9H -%S 3aba7c571b3ef5c8C55enItalian GameGiuoco Piano, Rosentreter Variationr1bqk2r/pppp1p2/5n1p/4p1p1/2BnP2B/8/PPP2PPP/RN1Q1RK1 w kq - 0 9G -%S baf98c8a8f8a0a42BC55enItalian GameGiuoco Piano, Rosentreter Variationr1bqk2r/pppp1pp1/5n1p/4p3/2BnP2B/8/PPP2PPP/RN1Q1RK1 b kq - 1 8F -%S e076e4497c3428d9C55enItalian GameGiuoco Piano, Rosentreter Variationr1bqk2r/pppp1pp1/5n1p/4p1B1/2BnP3/8/PPP2PPP/RN1Q1RK1 w kq - 0 8 iwMs"@Yfw ] wwwwwwit -9 d3a3def744a9f3ebC44enScotch, Sea-cadet Mater2qkbnr/ppp2ppp/3p4/4N3/2B1P3/2N5/PP3PPP/R1Bb1RK1 w kq - 0 9u -9 a972f4f220807a3f?C44enScotch, Sea-cadet Mater2qkbnr/ppp2ppp/3p4/4N3/2B1P1b1/2N5/PP3PPP/R1BQ1RK1 b kq - 0 8w -9 c8aff919fd8fde5c\C44enScotch, Sea-cadet Mater2qkbnr/ppp2ppp/3p4/4n3/2B1P1b1/2N2N2/PP3PPP/R1BQ1RK1 w kq - 4 8v -9 38f2e4523260f43c -#oef3e71d318c7128cC27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bqkb1r/pppp1p1p/2nn2p1/1N2p3/8/1B3Q2/PPPP1PPP/R1B1K1NR b KQkq - 1 7!= +#odc7cf6cb7f0e7a2C27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bqkb1r/pppp1p1p/2nn2p1/1N2p2Q/8/1B6/PPPP1PPP/R1B1K1NR w KQkq - 0 7 < -#oe4739c37cc7f75e9C27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bqkb1r/pppp1ppp/2nn4/1N2p2Q/8/1B6/PPPP1PPP/R1B1K1NR b KQkq - 5 6  + %K 5a7c9cb80175f59YC42enRussian GameClassical Attack, Marshall Traprn1q1rk1/ppp3pp/8/3P1p2/3Pn1b1/3B1N2/PP3PPb/RNBQR1K1 w - - 0 11 -%Kfb02f90aa0c20ea3C42enRussian GameClassical Attack, Marshall Traprn1q1rk1/ppp3pp/3b4/3P1p2/3Pn1b1/3B1N2/PP3PPP/RNBQR1K1 b - - 1 10 B -#o950d938c9b558977wC27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1b1kb1r/ppNpq2p/2nn2p1/3Qpp2/8/1B6/PPPP1PPP/R1B1K1NR b KQkq - 0 9!A -#o3953cee707c85418C27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1b1kb1r/ppppq2p/2nn2p1/1N1Qpp2/8/1B6/PPPP1PPP/R1B1K1NR w KQkq - 2 9 @ -#oa2ac1197c6f4fa72rC27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bqkb1r/pppp3p/2nn2p1/1N1Qpp2/8/1B6/PPPP1PPP/R1B1K1NR b KQkq - 1 8!? -#o7b51174aa64f3f52RC27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bqkb1r/pppp3p/2nn2p1/1N2pp2/8/1B3Q2/PPPP1PPP/R1B1K1NR w KQkq - 0 81 -  61dd6d5a5ad14babC37enKing's Gambit Accepted, Double Muzio Gambit, Young Gambitrnb2bnr/pppp1k1p/5q2/8/4P3/2N1pQ2/PPP3PP/R4RK1 w - - 0 11 %* - 8f4a8224c4163ec0C37enKing's Gambit Accepted, Double Muzio Gambit, Young Gambitrnb1kbnr/pppp1B1p/5q2/8/4Pp2/5Q2/PPPP2PP/RNB2RK1 b kq - 0 7E - #oc5a36f46d7c55be0C27enVienna GameStanley Variation, Frankenstein-Dracula VariationN1bk1b1r/p2pq2p/1pnn2p1/3Qpp2/8/1B6/PPPP1PPP/R1B1K1NR w KQ - 0 11D -#oaeca26562946ec7b{C27enVienna GameStanley Variation, Frankenstein-Dracula VariationN1bk1b1r/pp1pq2p/2nn2p1/3Qpp2/8/1B6/PPPP1PPP/R1B1K1NR b KQ - 0 10C -#o1c148deb1789c5deC27enVienna GameStanley Variation, Frankenstein-Dracula Variationr1bk1b1r/ppNpq2p/2nn2p1/3Qpp2/8/1B6/PPPP1PPP/R1B1K1NR w KQ - 1 10D  }K C j.]! -)s f54bdbeda3f83358XC15enFrench DefenseWinawer Variation, Exchange Variation, Canal Attackrnbqk2r/ppp1nppp/8/3p4/1b1P4/2NB4/PPP2PPP/R1BQK1NR w KQkq - 2 6" -)s cb0467501871b8e5C15enFrench DefenseWinawer Variation, Exchange Variation, Canal Attackrnbqk1nr/ppp2ppp/8/3p4/1b1P4/2NB4/PPP2PPP/R1BQK1NR b KQkq - 1 5! -)s 9e09c6f221f17a96C15enFrench DefenseWinawer Variation, Exchange Variation, Canal Attackrnbqk1nr/ppp2ppp/8/3p4/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5  - )]bfc0e4a5b660659dC15enFrench DefenseWinawer Variation, Kondratiyev Variationrnb1k1nr/pp3ppp/4p3/2pq4/1b1P4/2NB4/PPPB1PPP/R2QK1NR b KQkq - 1 6 -)]964dbe1024010e99C15enFrench DefenseWinawer Variation, Kondratiyev Variationrnb1k1nr/pp3ppp/4p3/2pq4/1b1P4/2NB4/PPP2PPP/R1BQK1NR w KQkq - 0 6 -)]12616f3afd937353SC15enFrench DefenseWinawer Variation, Kondratiyev Variationrnbqk1nr/pp3ppp/4p3/2pP4/1b1P4/2NB4/PPP2PPP/R1BQK1NR b KQkq - 0 5 -)]35be657727fc3155UC15enFrench DefenseWinawer Variation, Kondratiyev Variationrnbqk1nr/pp3ppp/4p3/2pp4/1b1PP3/2NB4/PPP2PPP/R1BQK1NR w KQkq - 0 5 -)]d3cfb4d9d8bb3a28(C15enFrench DefenseWinawer Variation, Kondratiyev Variationrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2NB4/PPP2PPP/R1BQK1NR b KQkq - 3 4, - )eb1e492d2a1b0872rC17enFrench DefenseWinawer Variation, Bogoljubov Variation, Icelandic Defensernbqk2r/pp2nppp/4p3/2ppP3/1b1P1P2/2N5/PPPB2PP/R2QKBNR b KQkq - 0 6, -)16083420338a35fbC17enFrench DefenseWinawer Variation, Bogoljubov Variation, Icelandic Defensernbqk2r/pp2nppp/4p3/2ppP3/1b1P4/2N5/PPPB1PPP/R2QKBNR w KQkq - 2 6v - )U a0baf239e3cae648HC18enFrench DefenseWinawer Variation, Advance Variationrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 6u - )U eb6f98084e960908C18enFrench DefenseWinawer Variation, Advance Variationrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 6k + #3ea5ab7fbcb4b749IC25enVienna GameHamppe-Muzio Gambitr1bqkbnr/pppp1p1p/2n5/8/2B1Ppp1/2N2N2/PPPP2PP/R1BQ1RK1 b kq - 1 6 {tmf^VNF>6.& | Lj*{tmf_XQJC<5.'   lZ z s l e ^ W P I B ; 4 - &      { t m f _ X Q J C < 5 . '    ~ v n f t dbR _ X Q J C < 5 . '    Tz:  x q j c \ U N G @ 9 2 + $      \B E > 7 0 ) "   yqiaYQIA922+$|ume]UME=J70)" ~v"ohaZSLE>70)" r~wpib[TMF?81*# "h#b%<#!"$  om&X!# |v+$#  "#%d'Y,'Y'W@'R'P\'P7'O'D'C!'>~':"'4^'4#'2'/Q'!''#'x'q'''''U'&&&&&~&{F&w&i&g&d&X)&W&U&N&N&ID&Au&<&<&:&7&+&*&#(& && i&g&&4%%%%C%%{%{%u%r|%r@%r%p%m%h0%c%F%B%@L%<%$%#r%!W%%% C%%%w$$R$n$$$$ $D$}$w$v$t$s$ls$i$h$g,$^$Y $N$C$B$?$=4$<$:$:!$1$($%$"d$O$$:$# #6#(########~#~#}L#{1#z#iu#h}#a#_)#]#A#@#?Z#>#9j#6 #5#3#3F#1#/D#,,#&#### # !9!"  !G Z ,##"V"w"s"[","M"yz"m"h"a"V"?."<"8&"3U"3",")"&""""W"#" ""!!!!!!!!U!~!{!wq!u!rY!q4!i!hg!e.!a!^q!]i!O2!E%!C!;!8I!)!X!!!   k 5 B       b A   ~ } } { y x x> wm r6 qS j i ^a Sb J F ? 6 3G ) '% "R !  X    <;1m~j~}vv1uplj'gcba7\XP/OM5G<;9"8V-- ,&  R t*.j@|yBwwIvstfplkjigeeZY(VNLFJF=p973/.' vwR 3}S L ~S~){{pzxwzrn_m?eb`yZLOKB030) h Q .  q#6j -)se9995ca22fa7ff68hC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Liner1b1kb1r/pp3ppp/2nqpn2/8/2BN4/5N2/PPP2PPP/R1BQ1RK1 b kq - 0 9!i -)s 641ba3deed591343CC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Liner1b1kb1r/pp3ppp/2nqpn2/8/2Bp4/1N3N2/PPP2PPP/R1BQ1RK1 w kq - 6 9 h -)s cff67b3cfcc8b640@C07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Linernb1kb1r/pp3ppp/3qpn2/8/2Bp4/1N3N2/PPP2PPP/R1BQ1RK1 b kq - 5 8 g -)sf8c242faedbaf6cfC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Linernb1kb1r/pp3ppp/3qpn2/8/2Bp4/5N2/PPPN1PPP/R1BQ1RK1 w kq - 4 8f -)sa32c760f4040b759YC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Linernb1kbnr/pp3ppp/3qp3/8/2Bp4/5N2/PPPN1PPP/R1BQ1RK1 b kq - 3 7e -)sdd590d3b3cb36c49IC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Linernb1kbnr/pp3ppp/3qp3/8/2Bp4/5N2/PPPN1PPP/R1BQK2R w KQkq - 2 7p Y - )I842cd817d571144aJC14enFrench DefenseClassical, Stahlberg Variationr1b2rk1/pp1nqppp/2n1p3/3pP3/2pP1P2/2N2N2/PPPQ2PP/2KR1B1R w - - 0 11X -)I5c336275bd9dbec7C14enFrench DefenseClassical, Stahlberg Variationr1b2rk1/pp1nqppp/2n1p3/2ppP3/3P1P2/2N2N2/PPPQ2PP/2KR1B1R b - - 3 10W -)I641e2756eebfb15f_C14enFrench DefenseClassical, Stahlberg Variationr1b2rk1/pp1nqppp/2n1p3/2ppP3/3P1P2/2N2N2/PPPQ2PP/R3KB1R w KQ - 2 10 V -)I cff3ffb4ff2e145c\C14enFrench DefenseClassical, Stahlberg Variationrnb2rk1/pp1nqppp/4p3/2ppP3/3P1P2/2N2N2/PPPQ2PP/R3KB1R b KQ - 1 9U -)I e7ebb03b3e97cbfcC14enFrench DefenseClassical, Stahlberg Variationrnb2rk1/pp1nqppp/4p3/2ppP3/3P1P2/2N2N2/PPP3PP/R2QKB1R w KQ - 0 9 T +)I 19a6195c1d0c081C14enFrench DefenseClassical, Stahlberg Variationrnb2rk1/pppnqppp/4p3/3pP3/3P1P2/2N2N2/PPP3PP/R2QKB1R b KQ - 2 8 S -)Idafe8d63a936a1bcC14enFrench DefenseClassical, Stahlberg Variationrnb2rk1/pppnqppp/4p3/3pP3/3P1P2/2N5/PPP3PP/R2QKBNR w KQ - 1 8 ]{8 " Xfhhhhh- - -e7c091a4da81f69b1B89enSicilian DefenseSozin Attack, Main Line, Sherbakov Variationr1bq1rk1/p3bppp/1p1ppn2/n7/3NPP2/1BN1B3/PPP3PP/R2Q1RK1 w - - 0 11 --e 1760535d569cde2a*B89enSicilian DefenseSozin Attack, Main Line, Sherbakov Variationr1bq1rk1/pp2bppp/3ppn2/n7/3NPP2/1BN1B3/PPP3PP/R2Q1RK1 b - - 0 10 --e ea762e504f0de3a3B89enSicilian DefenseSozin Attack, Main Line, Sherbakov Variationr1bq1rk1/pp2bppp/3ppn2/n7/3NP3/1BN1B3/PPP2PPP/R2Q1RK1 w - - 6 10~ --e bf6104a5e23141a9B89enSicilian DefenseSozin Attack, Main Line, Sherbakov Variationr1bq1rk1/pp2bppp/2nppn2/8/3NP3/1BN1B3/PPP2PPP/R2Q1RK1 b - - 5 9^'; --w d869acb84ae7a6edB77enSicilian DefenseDragon Variation, Yugoslav Attack, Czerniak Variationr1bq1rk1/pp2ppbp/3p1np1/8/2BnP3/2N1BP2/PPPQ2PP/R3K2R w KQ - 0 10 R[)Q - -yb2153eb93d72b396B74enSicilian DefenseDragon Variation, Classical Variation, Tartakower Liner1q2rk1/pp2ppbp/2npbnp1/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11$= + -w ee95d2033cabaa9B77enSicilian DefenseDragon Variation, Yugoslav Attack, Czerniak Variationr2q1rk1/pp2ppbp/3pbnp1/8/2BBP3/2N2P2/PPPQ2PP/R3K2R w KQ - 1 11&< --w 5a51cff47b7fc1a1B77enSicilian DefenseDragon Variation, Yugoslav Attack, Czerniak Variationr1bq1rk1/pp2ppbp/3p1np1/8/2BBP3/2N2P2/PPPQ2PP/R3K2R b KQ - 0 10) - -c b9a05331f5adf87c|B78enSicilian DefenseDragon Variation, Yugoslav Attack, Old Line2rq1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R w - - 7 11 - -Ob7dd541901ba0065eB85enSicilian DefenseScheveningen, Classical Main Liner1b2rk1/1pq1bppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R3QRK1 w - - 2 11 --Obd75b9aed4e3e98eB85enSicilian DefenseScheveningen, Classical Main Liner1b1k2r/1pq1bppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R3QRK1 b kq - 1 10 --O45007d3e07d2eef7B85enSicilian DefenseScheveningen, Classical Main Liner1b1k2r/1pq1bppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 w kq - 0 10 --O7cbaeb5fd5aaa79aB85enSicilian DefenseScheveningen, Classical Main Liner1b1k2r/1pqpbppp/p1n1pn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 b kq - 0 9 --O81ac9652cc3b9a13B85enSicilian DefenseScheveningen, Classical Main Liner1b1k2r/1pqpbppp/p1n1pn2/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 w kq - 4 9m - )s73af115591472decC07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Liner1b1kb1r/1p3ppp/p2qpn2/8/2BN4/8/PPP2PPP/R1BQ1RK1 w kq - 0 11l -)sa158e0a67667d5300C07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Liner1b1kb1r/pp3ppp/3qpn2/8/2BN4/8/PPP2PPP/R1BQ1RK1 b kq - 0 10k -)s44fad9244396c62b+C07enFrench DefenseTarrasch Variation, Chistyakov Defense, Modern Liner1b1kb1r/pp3ppp/3qpn2/8/2Bn4/5N2/PPP2PPP/R1BQ1RK1 w kq - 0 10  _O a8V\\\\ 2 --id69ba88f487beb19B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/5ppp/p1np1B2/1p2p3/4P3/N1N5/PPP2PPP/R2QKB1R b KQkq - 0 97! - - 4b6eadd3267a3e0fB33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variation, Novosibirsk Variationr1bqk2r/5pbp/p1np1p2/1p1Np3/4P3/N7/PPP2PPP/R2QKB1R w KQkq - 2 11 - -I dd2ed6a7ec2d733d=B44enSicilian DefensePaulsen Variation, Modern Liner1bq1rk1/4bppp/ppnppn2/8/2P1P3/N1N5/PP2BPPP/R1BQ1RK1 w - - 0 11 --Ib6479fb712aec4a6B44enSicilian DefensePaulsen Variation, Modern Liner1bq1rk1/1p2bppp/p1nppn2/8/2P1P3/N1N5/PP2BPPP/R1BQ1RK1 b - - 5 10 --Ic832e4836e5d1fb6B44enSicilian DefensePaulsen Variation, Modern Liner1bq1rk1/1p2bppp/p1nppn2/8/2P1P3/N1N5/PP2BPPP/R1BQK2R w KQ - 4 10 --Ic29a0934bb04f65d]B44enSicilian DefensePaulsen Variation, Modern Liner1bqk2r/1p2bppp/p1nppn2/8/2P1P3/N1N5/PP2BPPP/R1BQK2R b KQkq - 3 9 --Ib11a8acdba21bcfeB44enSicilian DefensePaulsen Variation, Modern Liner1bqk2r/1p2bppp/p1nppn2/8/2P1P3/N1N5/PP3PPP/R1BQKB1R w KQkq - 2 9 ].y + - 9a5a9093c3790e4B63enSicilian DefenseRichter-Rauzer Variation, Classical Variation, Kantscher Liner1bqk2r/4bppp/p2ppn2/1p4B1/3QPP2/2N5/PPP3PP/2KR1B1R w kq - 0 11/x -- 69a1c31ca79a2dd9B63enSicilian DefenseRichter-Rauzer Variation, Classical Variation, Kantscher Liner1bqk2r/1p2bppp/p2ppn2/6B1/3QPP2/2N5/PPP3PP/2KR1B1R b kq - 0 10&e - -u352d3164ff3fca2b+B74enSicilian DefenseDragon Variation, Classical Variation, Maróczy Liner2q1rk1/pp2ppbp/3pbnp1/n7/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11&d --u603a1b9152036821!B74enSicilian DefenseDragon Variation, Classical Variation, Maróczy Liner2q1rk1/pp2ppbp/2npbnp1/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 b - - 0 10&c --u 9d2c669c4b9255a8B74enSicilian DefenseDragon Variation, Classical Variation, Maróczy Liner2q1rk1/pp2ppbp/2npbnp1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 w - - 8 10.w -- 94b7be11be0b1050PB63enSicilian DefenseRichter-Rauzer Variation, Classical Variation, Kantscher Liner1bqk2r/1p2bppp/p2ppn2/6B1/3QP3/2N5/PPP2PPP/2KR1B1R w kq - 0 10-v --46404fe2592be88cB63enSicilian DefenseRichter-Rauzer Variation, Classical Variation, Kantscher Liner1bqk2r/pp2bppp/3ppn2/6B1/3QP3/2N5/PPP2PPP/2KR1B1R b kq - 0 9-u -- 690f55dc27e4dc2d-B63enSicilian DefenseRichter-Rauzer Variation, Classical Variation, Kantscher Liner1bqk2r/pp2bppp/3ppn2/6B1/3nP3/2N5/PPPQ1PPP/2KR1B1R w kq - 0 9 @oR / WJ;(8 --y7fc18102d2382c41AB96enSicilian DefenseNajdorf Variation, Polugaevsky Variation, Simagin Linernbqkb1r/5ppp/p3pn2/1p2p1B1/3N1P2/2N5/PPP3PP/R2QKB1R w KQkq - 0 9*7 --y45e481ed637662c8B96enSicilian DefenseNajdorf Variation, Polugaevsky Variation, Simagin Linernbqkb1r/5ppp/p2ppn2/1p2P1B1/3N1P2/2N5/PPP3PP/R2QKB1R b KQkq - 0 8 *( - ) 8b1107784cefb7c9C19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k1r1/ppq1np1Q/4p3/3pP3/3p4/P1P5/2P2PPP/R1BK1BNR b q - 1 10,' -) dc709c44f628df87C19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k1r1/ppq1np1Q/4p3/3pP3/3p4/P1P5/2P2PPP/R1B1KBNR w KQq - 0 10+& -) 836e26718bdcb641AC19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k1r1/ppq1np1Q/4p3/2ppP3/3P4/P1P5/2P2PPP/R1B1KBNR b KQq - 0 9+% -) b18b7ed41d405b12C19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k1r1/ppq1npQp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1B1KBNR w KQq - 1 9+$ -) eac82d6989e95b51QC19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k2r/ppq1npQp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1B1KBNR b KQkq - 0 8.# -)cd50030be2ef78f9C19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Paoli Variationrnb1k2r/ppq1nppp/4p3/2ppP3/3P2Q1/P1P5/2P2PPP/R1B1KBNR w KQkq - 3 8}% - )wc8d4778bde03d279yC19enFrench DefenseWinawer Variation, Poisoned Pawn Variation, Main Linernb1k1r1/ppq1np1Q/4p3/3pP3/3p4/P1P5/2P1NPPP/R1B1KB1R b KQq - 1 10 - 9Gac024bc70955c127'C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/5q2/8/4Pp2/2N1BQ2/PPP3PP/R4RK1 b - - 3 10  -9G57955365cbb743feC37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/5q2/8/4Pp2/4BQ2/PPP3PP/RN3RK1 w - - 2 10 -9G{e0e13898cdfac9b5C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/8/8/3qPp2/4BQ2/PPP3PP/RN3RK1 b - - 1 9  -9G{93e983744cc0d23b;C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/8/8/3qPp2/5Q2/PPP3PP/RNB2RK1 w - - 0 9 ~ -9G3dbd28c40dab23cdC37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/5q2/8/3PPp2/5Q2/PPP3PP/RNB2RK1 b - - 0 8 C = & c$C FzgC! + /Y89b4e012bd20ebbB12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/4p1b1/2ppP3/3P2PP/2N5/PPP1NP2/R1BQKB1R b KQkq - 0 7 -/Y9438d22880ed77c5B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/4p1b1/2ppP3/3P2P1/2N5/PPP1NP1P/R1BQKB1R w KQkq - 0 7 -/Y18e5c8c3a74d2a0a B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/2p1p1b1/3pP3/3P2P1/2N5/PPP1NP1P/R1BQKB1R b KQkq - 2 6 +/Yc41230c8f6627f4B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/2p1p1b1/3pP3/3P2P1/2N5/PPP2P1P/R1BQKBNR w KQkq - 1 6 -/Y9cd4ef37868221366B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/2p1p3/3pPb2/3P2P1/2N5/PPP2P1P/R1BQKBNR b KQkq - 0 5 -/Y3f99eee16ef7cc2b+B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attackrn1qkbnr/pp3ppp/2p1p3/3pPb2/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5 Pz9 --O31c84bc2f1cf2984B04enAlekhine DefenseModern Variation, Keres Variationrnbqkb1r/ppp1pp1p/1n1p2p1/4P3/3P4/1B3N2/PPP2PPP/RNBQK2R b KQkq - 3 68 --Of8cc5be07ae97960`B04enAlekhine DefenseModern Variation, Keres Variationrnbqkb1r/ppp1pp1p/1n1p2p1/4P3/2BP4/5N2/PPP2PPP/RNBQK2R w KQkq - 2 67 --Od157d4ef62ac122e.B04enAlekhine DefenseModern Variation, Keres Variationrnbqkb1r/ppp1pp1p/3p2p1/3nP3/2BP4/5N2/PPP2PPP/RNBQK2R b KQkq - 1 5&. - %waf85951f77b35ca7B09enPirc DefenseAustrian Attack, Unzicker Attack, Bronstein Variationrnbq1rk1/pppnppbp/3p2p1/4P3/3P1P1P/2N2N2/PPP3P1/R1BQKB1R b KQ - 0 7%- -%w33260936dc8c25d9B09enPirc DefenseAustrian Attack, Unzicker Attack, Bronstein Variationrnbq1rk1/pppnppbp/3p2p1/4P3/3P1P2/2N2N2/PPP3PP/R1BQKB1R w KQ - 1 7  - -= bc5248fe12e4fbddB20enSicilian DefenseWing Gambit, Nanu Gambitrnb1kbnr/pp3ppp/4q3/4p3/1pP5/P2B1N2/3P1PPP/RNBQK2R b KQkq - 2 7 --= e95fe95c2b6439aeB20enSicilian DefenseWing Gambit, Nanu Gambitrnb1kbnr/pp3ppp/4q3/4p3/1pP5/P4N2/3P1PPP/RNBQKB1R w KQkq - 1 7 --= 8faedf7506d22622"B20enSicilian DefenseWing Gambit, Nanu Gambitrnb1kbnr/pp3ppp/8/3qp3/1pP5/P4N2/3P1PPP/RNBQKB1R b KQkq c3 0 6 +-=3b7d389f75de447GB20enSicilian DefenseWing Gambit, Nanu Gambitrnb1kbnr/pp3ppp/8/3qp3/1p6/P4N2/2PP1PPP/RNBQKB1R w KQkq - 0 6 --=89cfdbc364b81c71qB20enSicilian DefenseWing Gambit, Nanu Gambitrnb1kbnr/pp2pppp/8/3q4/1p6/P4N2/2PP1PPP/RNBQKB1R b KQkq - 1 5|; - -Oeabd0898671b37e0B04enAlekhine DefenseModern Variation, Keres Variationrnbqk2r/ppp1ppbp/1n1p2p1/4P3/P2P4/1B3N2/1PP2PPP/RNBQK2R b KQkq - 0 7: --O817476740a88e22e.B04enAlekhine DefenseModern Variation, Keres Variationrnbqk2r/ppp1ppbp/1n1p2p1/4P3/3P4/1B3N2/PPP2PPP/RNBQK2R w KQkq - 4 7  md v f mOOOOOOOOOOOOOOOOO  - -+ 25b5adbc82cd102e.B56enSicilian DefenseYates Variationr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2NB4/PPP2PPP/R1BQK2R b KQkq - 1 62w - -_5c5eb75f5b9a0a65eB56enSicilian DefenseClassical Variation, Fianchetto Variationr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6+l - -'62f30d195cad1cebB56enSicilian DefenseVenice Attackrnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6~k --' 512ddcb639398f68hB56enSicilian DefenseVenice Attackrnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 a - -; 130bb836930e04fbB57enSicilian DefenseSozin, not Scheveningenr1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6V + -3 3388fe7ba6898feB58enSicilian DefenseClassical Variationr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6 K - -=b6e25b280bc70995B60enSicilian DefenseRichter-Rauzer Variationr1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 6@ - -W 4161045ed076afb6B70enSicilian DefenseDragon Variation, Classical Variationrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 65 - -Y1e073ce631843d2d-B70enSicilian DefenseDragon Variation, Fianchetto Variationrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6* - -W cff7faaac8c2d89cB71enSicilian DefenseDragon Variation, Levenfish Variationrnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6 fG RG5b' [  | @[G 5 - -i 5b3ed61ff6794a0d B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/5p1p/p1np4/1p1Npp2/4P3/N7/PPP2PPP/R2QKB1R w KQkq - 0 11I - -W6479b5379b73c9aeB03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1q1rk1/ppp1b1pp/1n2pp2/4Pb2/2PP4/2N2N2/PP2B1PP/R1BQ1RK1 w - - 0 11H --Wa82cb37ea198ded1B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1q1rk1/ppp1bppp/1n2p3/4Pb2/2PP4/2N2N2/PP2B1PP/R1BQ1RK1 b - - 5 10G --Wd659c84add6b05c1B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1q1rk1/ppp1bppp/1n2p3/4Pb2/2PP4/2N2N2/PP2B1PP/R1BQK2R w KQ - 4 10F --Wdcf125fd0832ec2a*B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qk2r/ppp1bppp/1n2p3/4Pb2/2PP4/2N2N2/PP2B1PP/R1BQK2R b KQkq - 3 9E --Waf71a6040917a689B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qk2r/ppp1bppp/1n2p3/4Pb2/2PP4/2N2N2/PP4PP/R1BQKB1R w KQkq - 2 9D --Wbbbdd5ebc3bc0a18B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qkb1r/ppp2ppp/1n2p3/4Pb2/2PP4/2N2N2/PP4PP/R1BQKB1R b KQkq - 1 8C --W 60d9391dab5a6b25%B03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qkb1r/ppp2ppp/1n2p3/4Pb2/2PP4/2N5/PP4PP/R1BQKBNR w KQkq - 0 8B --W 16aecb2cb378fb77wB03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qkb1r/ppp1pppp/1n6/4Pb2/2PP4/2N5/PP4PP/R1BQKBNR b KQkq - 2 7A --Wed39d38e719a79aeB03enAlekhine DefenseFour Pawns Attack, Korchnoi Variationrn1qkb1r/ppp1pppp/1n6/4Pb2/2PP4/8/PP4PP/RNBQKBNR w KQkq - 1 7U~ -+_cc6054db337f2c44DA30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/pb1pbppp/1p2pn2/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b kq - 0 7 q - )e770561615908f729)A75enBenoni DefenseClassical Variation, Argentine Counterattackrn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11 A -+_ 3a515f8e30d715ddA30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/pb2bppp/1p1ppn2/8/2PQ4/2N2NP1/PP2PPBP/R1BR2K1 b kq - 1 9 -+_ d7736f4ba862e3d2A30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/pb2bppp/1p1ppn2/8/2PQ4/2N2NP1/PP2PPBP/R1B2RK1 w kq - 0 9 -+_ eec9f92a7a1aaabfA30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/pb1pbppp/1p2pn2/8/2PQ4/2N2NP1/PP2PPBP/R1B2RK1 b kq - 0 8 -+_937eeeee4e8b4582A30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/pb1pbppp/1p2pn2/8/2Pp4/2N2NP1/PP2PPBP/R1BQ1RK1 w kq - 0 8] - )W431bd37be20c9365eA78enBenoni DefenseClassical Variation, Czerniak Defenser1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 7 11!4 --ifbd29065dd3df5a5B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/5p1p/p1np1p2/1p1Np3/4P3/N7/PPP2PPP/R2QKB1R b KQkq - 1 10"3 --i3bc73e49c77c8af0B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/5p1p/p1np1p2/1p2p3/4P3/N1N5/PPP2PPP/R2QKB1R w KQkq - 0 10c ! 34< 4 D !! 9 - -e866595b8ecdfcf5B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Lutikov Gambitr1bqk2r/pp1pppbp/2n2np1/1Bp5/3PP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 6+ - -ua45ec9f15075a0a1B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Gurgenidze Variationr1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/1P2P3/5N2/P1PP1PPP/RNBQR1K1 b kq - 0 6( +-ueabbc5df6c3cc85B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Gurgenidze Variationr1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/4P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 6"O - -m5163a4fe5126722e.B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/3p1ppp/p3p3/1p6/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6"N --m36f7f9a34017e000B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/3p1ppp/p3p3/1p6/3pP3/2N2NP1/PPP2P1P/R1BQKB1R w KQkq - 0 6%M --m69e943963de389c6B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/3p1ppp/p3p3/1pp5/3PP3/2N2NP1/PPP2P1P/R1BQKB1R b KQkq - 0 5%L --macdc6c3c2c2aa484B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/3p1ppp/p3p3/1pp5/4P3/2N2NP1/PPPP1P1P/R1BQKB1R w KQkq - 0 5&K --mccd80629b78719b9B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/1p1p1ppp/p3p3/2p5/4P3/2N2NP1/PPPP1P1P/R1BQKB1R b KQkq - 0 4%J --me03ebd685750c181B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/1p1p1ppp/p3p3/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4#I --m32c94c9bb070395d]B40enSicilian DefenseKan Variation, Wing Attack, Fianchetto Variationrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 3 "Z - -O 4f58fc0d44d0b117B38enSicilian DefenseAccelerated Dragon, Maróczy Bindr1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 6D - -a 73f7d41106030257WB40enSicilian DefenseFour Knights Variation, Exchange Variationr1bqkb1r/pp1p1ppp/2N1pn2/8/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 6 v' --u84d3b417652634b3B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Gurgenidze Variationr1bqk1nr/pp1pppbp/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 3 5"{ - -i570baa18ebc7a5ccB33enSicilian DefenseLasker-Pelikan Variation, Schlechter Variationr1bqkb1r/pp1p1ppp/2n2n2/4p3/4P3/1NN5/PPP2PPP/R1BQKB1R b KQkq - 1 6mp - -e8ff82e6a8dc46a333B33enSicilian DefenseLasker-Pelikan Variation, Exchange Variationr1bqkb1r/pp1p1ppp/2N2n2/4p3/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 6 e - -cbd1d08393808dbc9B33enSicilian DefenseLasker-Pelikan Variation, Retreat Variationr1bqkb1r/pp1p1ppp/2n2n2/4p3/4P3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 69 - -G3ca0cf572f6f4027'B40enSicilian DefensePin Variation, Koch Variationrnbqk2r/pp1p1ppp/4pn2/4P3/1b1N4/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 6  jL 4 <<<<<<<2 - +_57e3b574edd26ba0A30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationr2qk2r/1b1nbppp/pp1ppn2/8/2PQ4/1PN2NP1/P3PPBP/R1BR2K1 w kq - 1 11 -+_6400ce290d7a866clA30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/1b2bppp/pp1ppn2/8/2PQ4/1PN2NP1/P3PPBP/R1BR2K1 b kq - 0 10 - +_e8a6ae7dd7f7ed01A30enEnglish OpeningSymmetrical, Hedgehog, Flexible Formationrn1qk2r/1b2bppp/pp1ppn2/8/2PQ4/2N2NP1/PP2PPBP/R1BR2K1 w kq - 0 10]L -K a5d18c8a21d187a3E77enKing's Indian, Six Pawns Attackrnbq1rk1/pp3pbp/3ppnp1/2pP4/2P1PP2/2N5/PP2B1PP/R1BQK1NR w KQ - 0 8K -K d3a67ebb39f317f1E77enKing's Indian, Six Pawns Attackrnbq1rk1/pp2ppbp/3p1np1/2pP4/2P1PP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 7J -K 69ae3de8a0d581acE77enKing's Indian, Six Pawns Attackrnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N5/PP2B1PP/R1BQK1NR w KQ - 0 7 /> - 7scba22d56967a2816E97enKing's Indian DefenseOrthodox Variation, Bayonet Attack, Yepishin's Liner1bq1rk1/ppp1npbp/3p2p1/3Pp2n/1PP1P3/2N2N2/P1Q1BPPP/R1B2RK1 b - - 2 10.= -7s7abb5f4b84ac1472rE97enKing's Indian DefenseOrthodox Variation, Bayonet Attack, Yepishin's Liner1bq1rk1/ppp1npbp/3p2p1/3Pp2n/1PP1P3/2N2N2/P3BPPP/R1BQ1RK1 w - - 1 10-+ - 7qfe0f51c00304bf66fE97enKing's Indian DefenseOrthodox Variation, Bayonet Attack, Sokolov's Liner1bq1rk1/ppp1npbp/3p2p1/3Pp2n/1PP1P3/2N2N2/P3BPPP/R1BQR1K1 b - - 2 10(! -7q e3976825fdb8d5abE97enKing's Indian DefenseOrthodox Variation, Bayonet Attack, Sokolov's Linernbq1rk1/ppppppbp/5np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQ - 0 5* -7q26a2478fec71f8e9E97enKing's Indian DefenseOrthodox Variation, Bayonet Attack, Sokolov's Linernbq1rk1/ppppppbp/5np1/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R w KQ - 1 52 - 7}558e93e9058b0494E98enKing's Indian DefenseOrthodox Variation, Classical System, Neo-Classical Liner1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N1B3/PP2BPPP/R2QNRK1 b - - 4 100 -7}2686280584b11f1aE98enKing's Indian DefenseOrthodox Variation, Classical System, Neo-Classical Liner1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 w - - 3 10 Ib D  MIIIIIIIIIIIIIIIIt -7Y 90a4e549a0ababffA49enKing's Indian DefenseFianchetto Variation, Benjamin Defensernbq1rk1/pp2ppbp/2pp1np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7&r -7Y 8efd97829464d343CA49enKing's Indian DefenseFianchetto Variation, Benjamin Defensernbq1rk1/ppp1ppbp/3p1np1/8/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 0 6 sh - 'Wff5c9b72dcc104f8A88enDutch DefenseLeningrad Variation, Warsaw Variationrnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8g - 'W6d26769dab01d743CA88enDutch DefenseLeningrad Variation, Warsaw Variationrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7f - 'W96b16e3f69e3559aA88enDutch DefenseLeningrad Variation, Warsaw Variationrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7e - 'W af0bf85ebb9b1cf7A88enDutch DefenseLeningrad Variation, Warsaw Variationrnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6d - 'W 2328677af894b7f0A88enDutch DefenseLeningrad Variation, Warsaw Variationrnbq1rk1/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 4 6c - 'W 29808acd2dcd5e1bA88enDutch DefenseLeningrad Variation, Warsaw Variationrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 5b - 'W 57f5f1f9513e850b A88enDutch DefenseLeningrad Variation, Warsaw Variationrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5a - 'W e749cc4faa794ea1A88enDutch DefenseLeningrad Variation, Warsaw Variationrnbqkb1r/ppppp2p/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4Z - ']c6cbae7fba907240@A89enDutch DefenseLeningrad Variation, Matulovic Variationr1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8  <  ]Xx<<<<<<<<<<<~ - +c efcdf4926d881318A16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqk2r/ppp2pbp/6p1/3np3/8/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 0 7} -+c 65b5fcd8fe6deb2e.A16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqk2r/ppp1ppbp/6p1/3n4/8/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 2 6| -+c d045dfa5b3803357WA16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqk2r/ppp1ppbp/6p1/3n4/8/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 1 6{ -+c60f9e21348c7f8fdA16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqkb1r/ppp1pp1p/6p1/3n4/8/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 5z -+c 4c1f5952a81020c5A16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqkb1r/ppp1pp1p/6p1/3n4/8/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 5y -+cd3f1231f17f53d99A16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqkb1r/ppp1pp1p/5np1/3P4/8/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 0 4x -+cdddbb8d2b53b2984A16enEnglish OpeningAnglo-Grünfeld Defense, Korchnoi Variationrnbqkb1r/ppp1pp1p/5np1/3p4/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4U$r + +k48f9a2fae4366e8A25enEnglish OpeningKing's English Variation, Bremen-Hort Variationr2qk1nr/ppp2pbp/2npb1p1/4p3/2P5/2N1P1P1/PP1PNPBP/R1BQK2R w KQkq - 2 7Xuf - +Ad1bb971f5c747099A25enEnglish OpeningClosed, Taimanov Variationr1bqk2r/ppp2pbp/2np2pn/4p3/2P5/2N1P1P1/PP1PNPBP/R1BQK2R w KQkq - 2 7%q -+k503708fbe6f61de0A25enEnglish OpeningKing's English Variation, Bremen-Hort Variationr1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2N1P1P1/PP1PNPBP/R1BQK2R b KQkq - 1 6%p -+k4493e334cedd101eA25enEnglish OpeningKing's English Variation, Bremen-Hort Variationr1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR w KQkq - 0 6%o -+k7d2975551ca55973sA25enEnglish OpeningKing's English Variation, Bremen-Hort Variationr1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR b KQkq - 0 5 z}ume]UME=6/(! yrkd]VOH@80(  y r k d ] V O H A : 3 , %     } u m e ] U M E = 5 - %     x q j c \ U N G @ 9 1 ) !    } v o h a Z S L E > 7 0 ) "     x q j c \ U N G @ 9 2 + $    }vohaZSLE>70)" yqib[TMF?81*#{tmf_XQJC<5.' |ung`YRKD=6/(! ~wpib[TMF>70)" z1\1Y1Xr1X;1V1N:1Ib1A1A1?15U126101.@1&1%1%f1"1"1!1E11)1~11C11.00|<0{0{0r0o0o0mP0\`0R0O:0M+0Ln0E0Et0;05n0'10"D0!T0 00030)00^0 l0y0/g//}R/y/w/uF/id/R/N/J/H/=/2/(Z/%/I/ //Q.?...R.g....U...N...~....~_.~$.}.}j.|r.z.t.t\.q.lU.j .bk.bA.`@.` .^.].].Y4.W.O(.N.N.K.KV.E.D.D.>.>\.=}.:.9..3:.37.1...-0.l.^..... .7-(----P-'--4---H----*-----~-}-|-u.-k-^-X-Q-QF-O-M-KU-I-D5-B-?-9--6!-4K-0n--=-'-"-- -@--- - - - }-),y,,_,?,,,|,z,vn,t,r,q,^,[,T,O,Fy,E,4,4A,)V,,|,U,, e,A+m+++(+3++^+4++ ++}*+z+yj+w1+o<+l+k +k+j+h +e+V+Jf+D+@+=+=+6E+3+++':+"+!G++ + + k++i+**** **5*********~*~*}*|*{*x*vZ*b*_*_*_?*]Q*\*X*J*?*>*3*+*#*** * F* * **5))})\)-)))))U))H)C)"))R)J)4)))))))))()|?){)z)v)os)n)m)i)g )e)d)a)_)X)Q)Q|)M)F`)>G)=*)<);)7)7)5)3)))))>)S) q))k(((n((@(%((M(((4((w((((+((((~ (}(}N(|(u(q(o(l(g(f(d(b(`(](W(P (MJ(L(L2(Gd(E}(C(@A(=(_((Y(j((v(( (''C''r'' ''v''''B''X'}'x^'v"'s?'q'o'g'fM'e'cY'a'`  ErT ~ dI  - ;Qc96f6c5ab974b969iD40enQueen's Gambit DeclinedSemi-Tarrasch, Levenfish Variationr1b2rk1/pp2qppp/2n1pn2/2bp4/2P1P3/2NB1N2/PP2QPPP/R1B2RK1 b - - 0 10 -;Q5893050ad98c09ceD40enQueen's Gambit DeclinedSemi-Tarrasch, Levenfish Variationr1b2rk1/pp2qppp/2n1pn2/2bp4/2P5/2NBPN2/PP2QPPP/R1B2RK1 w - - 0 10 -;Q 900e55cd2e82a32b+D40enQueen's Gambit DeclinedSemi-Tarrasch, Levenfish Variationr1b2rk1/pp2qppp/2nbpn2/2Pp4/2P5/2NBPN2/PP2QPPP/R1B2RK1 b - - 0 9 f 5 - ;+70778164a37f592f/D37enQueen's Gambit DeclinedHarrwitz Attackr1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/P1N1PN2/1PQ2PPP/3RKB1R b K - 0 10 4 -;+bbebb042ea33d76foD37enQueen's Gambit DeclinedHarrwitz Attackr1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/2N1PN2/PPQ2PPP/3RKB1R w K - 4 10 3 -;+629825194341f6e0D37enQueen's Gambit DeclinedHarrwitz Attackr1bq1rk1/pp3ppp/2n1pn2/2bp4/2P2B2/2N1PN2/PPQ2PPP/3RKB1R b K - 3 9 2 -;+145f1b5298313344DD37enQueen's Gambit DeclinedHarrwitz Attackr1bq1rk1/pp3ppp/2n1pn2/2bp4/2P2B2/2N1PN2/PPQ2PPP/R3KB1R w KQ - 2 91 -;+ bfb2c3b089a09647GD37enQueen's Gambit DeclinedHarrwitz Attackrnbq1rk1/pp3ppp/4pn2/2bp4/2P2B2/2N1PN2/PPQ2PPP/R3KB1R b KQ - 1 8K " - ;+3e9dfa0c2b2d9313D37enQueen's Gambit DeclinedHarrwitz Attackr1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/P1N1PN2/1PQ2PPP/2KR1B1R b - - 2 10 ! +;+6b0bf2f780f9c8bD37enQueen's Gambit DeclinedHarrwitz Attackr1b2rk1/pp3ppp/2n1pn2/q1bp4/2P2B2/P1N1PN2/1PQ2PPP/R3KB1R w KQ - 1 10 -;+dfc32a74d17dbd04D37enQueen's Gambit DeclinedHarrwitz Attackr1bq1rk1/pp3ppp/2n1pn2/2bp4/2P2B2/P1N1PN2/1PQ2PPP/R3KB1R b KQ - 0 9 pF j ) i'7.||'*J - 5q65a869eb82ffc4e5E58enNimzo-Indian DefenseNorZ -5I79341eba3593f354TE23enNimzo-Indian DefenseSpielmann, Stahlberg Variationr1bqk2r/pp1p1ppp/2n1p3/2n5/1bP5/2N2N2/PPQBPPPP/R3KB1R b KQkq - 1 8 F(K - 5q 2e7d03da2fa32ba5E58enNimzo-Indian DefenseNormal Variation, Bernstein Defense, Exchange Liner1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 9*J - 5q65a869eb82ffc4e5E58enNimzo-Indian DefenseNormal Variation, Bernstein Defense, Exchange Liner1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 9+I - 5q449112ed9f4796efE58enNimzo-Indian DefenseNormal Variation, Bernstein Defense, Exchange Liner1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8#: - 7_fe5c5e0a38274824$E69enKing's Indian DefenseFianchetto Variation, Classical Main Liner1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9$9 - 7_16af83b4fa8481d6E69enKing's Indian DefenseFianchetto Variation, Classical Main Liner1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9) - 7U20d8af45578c00311E77enKing's Indian DefenseFour Pawns Attack, Florentine Gambitrnbq1rk1/pp3pbp/3p1np1/2ppP3/2P2P2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9( -7U41a1b9b853922655UE77enKing's Indian DefenseFour Pawns Attack, Florentine Gambitrnbq1rk1/pp3pbp/3p1np1/2pp4/2P1PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 9 - 7W52a55578345da5f4E79enKing's Indian DefenseFour Pawns Attack, Exchange Variationr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9 - 7W 21adee94b567be7azE79enKing's Indian DefenseFour Pawns Attack, Exchange Variationr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9 - 7W 8a403676a4f61b79yE79enKing's Indian DefenseFour Pawns Attack, Exchange Variationrnbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8 - 7Wedd46b2bb5c78957WE79enKing's Indian DefenseFour Pawns Attack, Exchange Variationrnbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8 - 7Qe258c88fa5742128(E97enKing's Indian DefenseOrthodox Variation, Bayonet Attackr1bq1rk1/ppp1npbp/3p1np1/3Pp3/1PP1P3/2N2N2/P3BPPP/R1BQ1RK1 b - - 0 9 -7Q48adbd2303c24d0c E97enKing's Indian DefenseOrthodox Variation, Bayonet Attackr1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 1 9 -7Q4c4595724944c61dE97enKing's Indian DefenseOrthodox Variation, Bayonet Attackr1bq1rk1/ppp2pbp/2np1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 8v - 7S6120e79691a32608E97enKing's Indian DefenseOrthodox Variation, Korchnoi Attackr1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N2N2/PP1BBPPP/R2Q1RK1 b - - 2 9e - 7O958f26c4c17f7386E97enKing's Indian DefenseOrthodox Variation, Modern Systemr1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 2 9T - 7Udfc12ba3297d16efE98enKing's Indian DefenseOrthodox Variation, Classical Systemr1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 9C - )Yd19a499c3309cef5A63enBenoni DefenseFianchetto Variation, Hastings Defenser1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 6 10B - )Y e27932c1d3a123399A63enBenoni DefenseFianchetto Variation, Hastings Defensernbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 5 91 - )E53dae535c32cd7caA69enBenoni DefenseFour Pawns Attack, Main Linernbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 1 10 0 - )E4f8b2275f15c3248HA69enBenoni DefenseFour Pawns Attack, Main Linernbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9 =)=[ E 5&==== T -9U57df91dc970e1f355E12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1p2/1p2pn1p/6p1/2PP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 7 S -9Ud79c610103bae0bfE12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1pp1/1p2pn1p/8/2PP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6 R -9U8d1309c2f004c224$E12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1pp1/1p2pn1p/6B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6Q -9U1fe442a467d08b311E12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1ppp/1p2pn2/6B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5YFE -/'b6d532b29c0064fbD94enGrünfeld DefenseFlohr Defensernbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/2NBPN2/PP3PPP/R1BQ1RK1 b - - 5 7D -/'c8a04986e0f3bfebD94enGrünfeld DefenseFlohr Defensernbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 4 7C -/'c208a43135aa5600D94enGrünfeld DefenseFlohr Defensernbqk2r/pp2ppbp/2p2np1/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6B -/'970505930c2a9473sD94enGrünfeld DefenseFlohr Defensernbqk2r/pp2ppbp/2p2np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 2 6A -/'27b93825f76d5fd9D94enGrünfeld DefenseFlohr Defensernbqkb1r/pp2pp1p/2p2np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5@ -/'fcddd4d39f8b3ee4D94enGrünfeld DefenseFlohr Defensernbqkb1r/pp2pp1p/2p2np1/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 58 - /+b406f880db856a11D94enGrünfeld DefenseSmyslov Defensern1q1rk1/pp2ppbp/2p2np1/3p4/2PP2b1/2NBPN2/PP3PPP/R1BQ1RK1 w - - 6 8* - /Y 73e8bd5e4a224676vD97enGrünfeld DefenseRussian Variation, Hungarian Variationrnbq1rk1/1pp1ppbp/p4np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 0 8O - /Yca7605bd538109311D97enGrünfeld DefenseRussian Variation, Levenfish Variationrnbq1rk1/p1p1ppbp/1p3np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 0 8 - /Q ef9fe73d2bfd2216D97enGrünfeld DefenseRussian Variation, Prins Variationr1bq1rk1/ppp1ppbp/n4np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8 + /eaf2944fbc931ba9D97enGrünfeld DefenseRussian Variation, Byrne (Simagin) Variationr1bq1rk1/ppp1ppbp/2n2np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8r - /Y 3365a142dac26d11D97enGrünfeld DefenseRussian Variation, Szabo (Boleslavsky)rnbq1rk1/pp2ppbp/2p2np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 0 8d - /Ua3cc869fea87b040@D98enGrünfeld DefenseRussian Variation, Smyslov Variationrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8 V - 9U465a47b04af79f9dE12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1p2/1p2p2p/6pn/2PP4/2N2NB1/PP2PPPP/R2QKB1R w KQkq - 2 8!U -9Udeb9d0746b2faac7E12enQueen's Indian DefenseKasparov Variation, Botvinnik Attackrn1qkb1r/pbpp1p2/1p2pn1p/6p1/2PP4/2N2NB1/PP2PPPP/R2QKB1R b KQkq - 1 7 m N A ;   3 3 3BBBB r: -;A b52ef7aadf87162b+D31enQueen's Gambit DeclinedSemi-Slav, Junge Variationrnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4)~4 - -/f1119a35e146f76enD32enTarrasch Defensevon Hennig Gambitr2qkbnr/pp3ppp/2n1b3/3Q4/8/2N5/PP2PPPP/R1B1KBNR w KQkq - 1 8}3 --/a5a908e1a9f38c66fD32enTarrasch Defensevon Hennig Gambitr1bqkbnr/pp3ppp/2n5/3Q4/8/2N5/PP2PPPP/R1B1KBNR b KQkq - 0 7~2 --/3de8d830fae31ffbD32enTarrasch Defensevon Hennig Gambitr1bqkbnr/pp3ppp/2n5/3p4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7~1 +-/2fc01f4e046df300D32enTarrasch Defensevon Hennig Gambitr1bqkbnr/pp3ppp/2n1p3/3P4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 60 --/ 66b8d161073e1aecD32enTarrasch Defensevon Hennig Gambitr1bqkbnr/pp3ppp/2n1p3/3P4/3Q4/2N5/PP2PPPP/R1B1KBNR w KQkq - 1 6/ --/cd55098316afbfefD32enTarrasch Defensevon Hennig Gambitrnbqkbnr/pp3ppp/4p3/3P4/3Q4/2N5/PP2PPPP/R1B1KBNR b KQkq - 0 5 B - ;A1d6c4d958ee7efbaD31enQueen's Gambit DeclinedSemi-Slav, Junge Variationrnb1k1nr/p4ppp/1qp1p3/1p6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R w KQkq - 2 8& - -- 7c65e94968b204caD32enTarrasch DefenseGrünfeld Gambitr1bqkbnr/p4ppp/2n5/1pP5/N2p4/5N2/PP2PPPP/R1BQKB1R w KQkq b6 0 8% --- fe7be8692c138320 D32enTarrasch DefenseGrünfeld Gambitr1bqkbnr/pp3ppp/2n5/2P5/N2p4/5N2/PP2PPPP/R1BQKB1R b KQkq - 1 7$ --- 3def011c133b406ajD32enTarrasch DefenseGrünfeld Gambitr1bqkbnr/pp3ppp/2n5/2P5/3p4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7# --- df826b72df046a8dD32enTarrasch DefenseGrünfeld Gambitr1bqkbnr/pp3ppp/2n5/2Pp4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 6^n P - ;/ 3af62aa6dd6149deD31enQueen's Gambit DeclinedUhlmann Variationrnbq1rk1/ppp1bpp1/4pn1p/8/2pP3B/2N2N2/PP2PPPP/2RQKB1R w K - 0 8 O -;/e8f013948f5fa73d=D31enQueen's Gambit DeclinedUhlmann Variationrnbq1rk1/ppp1bpp1/4pn1p/3p4/2PP3B/2N2N2/PP2PPPP/2RQKB1R b K - 3 7 - --604a2f597b5d72dcD33enTarrasch DefenseWagner Variationr2qkb1r/pp3ppp/2n2n2/2pp4/3P2b1/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8 ---6299e56b3cd87c366D33enTarrasch DefenseWagner Variationr1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 2 7 - -C76559684f673d0a7D34enTarrasch DefensePrague Variation, Main Liner1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8 h6  l ; H - ;G b795f21962f4b6b0D35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bqrnk1/ppp1bppp/5n2/3p2B1/3P4/2NBP3/PPQ1NPPP/2KR3R b - - 8 10G -;G 8fb8b73a31d6b928(D35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bqrnk1/ppp1bppp/5n2/3p2B1/3P4/2NBP3/PPQ1NPPP/R3K2R w KQ - 7 10F -;G c766975c4d505e85D35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bqr1k1/pppnbppp/5n2/3p2B1/3P4/2NBP3/PPQ1NPPP/R3K2R b KQ - 6 9E -;G d3c27c93657b537b{D35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bqr1k1/pppnbppp/5n2/3p2B1/3P4/2NBP3/PPQ2PPP/R3K1NR w KQ - 5 9D -;G cf93bbd3570bb6f9D35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bq1rk1/pppnbppp/5n2/3p2B1/3P4/2NBP3/PPQ2PPP/R3K1NR b KQ - 4 8C -;G 7e8ac9ce45dd8a9dD35enQueen's Gambit DeclinedExchange, Chameleon Variationr1bq1rk1/pppnbppp/5n2/3p2B1/3P4/2NBP3/PP3PPP/R2QK1NR w KQ - 3 8B -;G 4d69b293a5756751QD35enQueen's Gambit DeclinedExchange, Chameleon Variationrnbq1rk1/ppp1bppp/5n2/3p2B1/3P4/2NBP3/PP3PPP/R2QK1NR b KQ - 2 7A -;G 186413319cf5a522"D35enQueen's Gambit DeclinedExchange, Chameleon Variationrnbq1rk1/ppp1bppp/5n2/3p2B1/3P4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 7@ -;G 12ccfe8649ac4cc9D35enQueen's Gambit DeclinedExchange, Chameleon Variationrnbqk2r/ppp1bppp/5n2/3p2B1/3P4/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 6? -;G bfe1bc346df3c46dmD35enQueen's Gambit DeclinedExchange, Chameleon Variationrnbqk2r/ppp1bppp/5n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR w KQkq - 2 6  8o^ L P" x   - I86e0bc11baeff5afC81enRuy LopezOpen Variations, Howell Attackr2qk2r/2p1bppp/p1n1b3/1p1pP3/2P1n3/1B3N2/PP2QPPP/RNB2RK1 b kq - 0 10 s - If3a9cff7c80fddcfC82enRuy LopezOpen Variations, Motzko Attackr2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BPQ1N2/PP3PPP/RNB2RK1 b kq - 2 10` - g6eab5a04e07ca1beC83enRuy LopezOpen Variations, Classical Defense, Main Liner2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQR1K1 b kq - 0 10_ -g1871a29c300cae388C83enRuy LopezOpen Variations, Classical Defense, Main Liner2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQR1K1 w kq - 1 10~' - )ee5f2555eeec4884C95enRuy LopezClosed, Breyerrnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10 - O25a99e6fdada2343CC96enRuy LopezClosed Variations, Closed Defenser1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10 - Od590f8e8438862cfC96enRuy LopezClosed Variations, Closed Defenser1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 - ;Kd41239924339ea6bkD19enQueen's Gambit DeclinedSlav, Dutch, Sämisch Variationrn1q1rk1/pp3ppp/2p1p3/5b2/PbBPn1P1/2N1PN2/1P2QP1P/R1B2RK1 b - - 0 10 -;K775f3844ab4c0776vD19enQueen's Gambit DeclinedSlav, Dutch, Sämisch Variationrn1q1rk1/pp3ppp/2p1p3/5b2/PbBPn3/2N1PN2/1P2QPPP/R1B2RK1 w - - 5 10  +Iac32335f9e05ea8C81enRuy LopezOpen Variations, Howell Attackr2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 w kq - 3 10 + _aa0db59fdb0e488C82enRuy LopezOpen Variations, St. Petersburg Variationr2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1BP2N2/PP1N1PPP/R1BQ1RK1 b kq - 2 10^ -g4cc9304878b9d5300C83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/2p1bppp/p1n5/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQR1K1 b kq - 0 9] -gd054cf0a708c6240@C83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/2p1bppp/p1n5/1p1pp3/3Pn3/1B3N2/PPP2PPP/RNBQR1K1 w kq - 0 9\ -g553eed1eec582c66fC83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/2ppbppp/p1n5/1p2p3/3Pn3/1B3N2/PPP2PPP/RNBQR1K1 b kq - 1 8[ +g 582f05271f8c584C83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/2ppbppp/p1n5/1p2p3/B2Pn3/5N2/PPP2PPP/RNBQR1K1 w kq - 0 8Z -g 65869a47ea5578b9C83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/1pppbppp/p1n5/4p3/B2Pn3/5N2/PPP2PPP/RNBQR1K1 b kq - 2 7Y -g e13294cc6dfdd3adC83enRuy LopezOpen Variations, Classical Defense, Main Liner1bqk2r/1pppbppp/p1n5/4p3/B2Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 7!M - mc45b94d717c8ff51QC91enRuy LopezClosed Variations, Yates Variation, Short Attackr2q1rk1/2p1bppp/p1np1n2/1p2p3/P2PP1b1/1BP2N2/1P3PPP/RNBQR1K1 b - - 0 10: - k85cec92abbb5de12C94enRuy LopezMorphy Defense, Breyer Defense, Quiet Variationrnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BPP1N1P/PP3PP1/RNBQR1K1 b - - 0 10 //fF  Z Q -m=XX^4Y -9M edc941217f9271ddD00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitr1bqk2r/ppp1bppp/2n1pn2/6B1/3P4/2NB1N2/PPP3PP/R2Q1RK1 b kq - 5 8r8 - %U2e931e018f783a68hC58enItalian GameTwo Knights Defense, Paoli Variationr1b1kb1r/p1q2ppp/2p2n2/n3p1N1/8/3B1Q2/PPPP1PPP/RNB1K2R b KQkq - 3 97 -%Ub09648a67c4bee91C58enItalian GameTwo Knights Defense, Paoli Variationr1b1kb1r/p1q2ppp/2p2n2/nB2p1N1/8/5Q2/PPPP1PPP/RNB1K2R w KQkq - 2 9' - %[c0ace482e9300454TC59enItalian GameTwo Knights Defense, Steinitz Variationr1bqkb1r/p4pp1/2p2n1p/n3p3/8/7N/PPPPBPPP/RNBQK2R b KQkq - 1 9  - S209800d3150d8724$C67enRuy LopezBerlin Defense, Pillsbury Variationr1bqk2r/pnppbppp/2p5/4P3/8/1P3N2/P1P1QPPP/RNB2RK1 b kq - 0 9 -Sac3e6087cf80ec49IC67enRuy LopezBerlin Defense, Pillsbury Variationr1bqk2r/pnppbppp/2p5/4P3/8/5N2/PPP1QPPP/RNB2RK1 w kq - 1 9 - S201dffa38c8f474eNC67enRuy LopezBerlin Defense, Zukertort Variationr1bqk2r/pnppbppp/2p5/4P3/2P5/5N2/PP2QPPP/RNB2RK1 b kq - 0 9t - Id259fa8b0d585486C67enRuy LopezBerlin Defense, Winawer Attackr1bqk2r/pnppbppp/2p5/4P3/3N4/8/PPP1QPPP/RNB2RK1 b kq - 2 9c - Ud167679ae7f2018dC80enRuy LopezOpen Variations, Bernstein Variationr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPPN1PPP/R1BQ1RK1 b kq - 2 9 R - I1e0f50da334bf2399C81enRuy LopezOpen Variations, Howell Attackr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 b kq - 2 9pA - fed32760ad7fa63b;C82enRuy LopezOpenr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 b kq - 0 90 - Sa3e83e85655b8777wC90enRuy LopezClosed Variations, Suetin Variationr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/PBP2N2/1P1P1PPP/RNBQR1K1 b - - 0 9 - U984d6924b54548bbC90enRuy LopezClosed Variations, Lutikov Variationr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/2P2N2/PPBP1PPP/RNBQR1K1 b - - 2 9 - Sc6d0cc766887b2e3C90enRuy LopezClosed Variations, Pilnik Variationr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BPP1N2/PP3PPP/RNBQR1K1 b - - 0 9 -Sb00a34eeb8f7bd65eC90enRuy LopezClosed Variations, Pilnik Variationr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1B1P1N2/PPP2PPP/RNBQR1K1 w - - 0 9 -S89b0a28f6a8ff408C90enRuy LopezClosed Variations, Pilnik Variationr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B1P1N2/PPP2PPP/RNBQR1K1 b - - 0 8} - Qad4120093dde2475uC91enRuy LopezClosed Variations, Yates Variationr1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 9l - /8087d21deeb4c0c5C92enRuy LopezClosed Variationsr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 b - - 0 9[ - 9M 123fde276616e88eD00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitr1bqk2r/ppp1bppp/4pn2/6B1/3n4/2NB1N2/PPP3PP/R2Q1R1K b kq - 1 9Z -9M 2394ed8d86f04ac1D00enBlackmar-Diemer GambitEuwe Defense, Zilbermints Gambitr1bqk2r/ppp1bppp/4pn2/6B1/3n4/2NB1N2/PPP3PP/R2Q1RK1 w kq - 0 9  ZTi.T M M M M M M M M M M M M M}= )9 1a59ac9c8f980c C80enRuy LopezOpen, Berger Variationr1bqkb1r/2p2ppp/p7/1p1pp3/P2Nn3/1B6/1PP2PPP/RNBQ1RK1 b kq - 0 9>R - m a3395074886ecf42BC79enRuy LopezSteinitz Defense Deferred, Boleslavsky Variationr1bqkb1r/2p3pp/p1p5/3pPp2/4n3/2N2N2/PPP2PPP/R1BQR1K1 b kq - 1 10Q -m 58ae48d64a8c4d9bC79enRuy LopezSteinitz Defense Deferred, Boleslavsky Variationr1bqkb1r/2p3pp/p1p5/3pPp2/4n3/5N2/PPP2PPP/RNBQR1K1 w kq - 0 10P -m1ca8da09ab07cfd9C79enRuy LopezSteinitz Defense Deferred, Boleslavsky Variationr1bqkb1r/2p3pp/p1pp4/4Pp2/4n3/5N2/PPP2PPP/RNBQR1K1 b kq - 0 9O -m 8035254ba33278a9C79enRuy LopezSteinitz Defense Deferred, Boleslavsky Variationr1bqkb1r/2p3pp/p1pp4/4pp2/3Pn3/5N2/PPP2PPP/RNBQR1K1 w kq - 0 9N -m 145a43d21dba5577wC79enRuy LopezSteinitz Defense Deferred, Boleslavsky Variationr1bqkb1r/2p2ppp/p1pp4/4p3/3Pn3/5N2/PPP2PPP/RNBQR1K1 b kq - 1 8 ? + 9 3cd62a60f450c9fC80enRuy LopezOpen, Berger Variationr1bqkb1r/2p2ppp/p7/1p1p4/P2pn3/1BN5/1PP2PPP/R1BQ1RK1 b kq - 1 10> -9 f85a7a04cda78e46FC80enRuy LopezOpen, Berger Variationr1bqkb1r/2p2ppp/p7/1p1p4/P2pn3/1B6/1PP2PPP/RNBQ1RK1 w kq - 0 10, - o840fe751fef1ec77wC80enRuy LopezOpen Variations, Bernstein Variation, Luther Liner2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1B3N2/PPPN1PPP/R1B1QRK1 b kq - 4 10+ -o7c7a23c12dc0eb0eC80enRuy LopezOpen Variations, Bernstein Variation, Luther Liner2qk2r/2p2ppp/p1n1b3/1pbpP3/4n3/1B3N2/PPPN1PPP/R1BQ1RK1 w kq - 3 10 'e - % a91226c83d5674f0C58enItalian GameTwo Knights Defense, Polerio Defense, Yankovich Variationr1bqk2r/ppp2pp1/5n1p/2bP4/2P1p3/8/PPPNQPPP/RNB1K2R b KQkq - 2 10(d -%7430bd2fffeb4a7azC58enItalian GameTwo Knights Defense, Polerio Defense, Yankovich Variationr1bqk2r/ppp2pp1/5n1p/2bP4/2P1p3/5N2/PPP1QPPP/RNB1K2R w KQkq - 1 10 c [M | gTHHHHHc{ - +dcb14d2c35bad2b5C80enRuy LopezOpen Variationsr1bqkb1r/2p2ppp/p1n5/1p1pP3/4n3/1B3N2/PPP2PPP/RNBQ1RK1 b kq - 0 8a * - Kcc0f2d4a7e80cec2C80enRuy LopezOpen Variations, Harksen Gambitr1bqkb1r/2p2ppp/p1n5/1p1pp3/2PPn3/1B3N2/PP3PPP/RNBQ1RK1 b kq - 0 8 ) -K402cb26e3d8f65c5C80enRuy LopezOpen Variations, Harksen Gambitr1bqkb1r/2p2ppp/p1n5/1p1pp3/3Pn3/1B3N2/PPP2PPP/RNBQ1RK1 w kq - 0 8 > - k ea5072edc976c4b3C84enRuy LopezClosed, Basque Gambit (North Spanish Variation)r1bqk2r/1pppbppp/p1n5/4P3/B2pn3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 8 -k 9c8a8a751906cb355C84enRuy LopezClosed, Basque Gambit (North Spanish Variation)r1bqk2r/1pppbppp/p1n5/4P3/B2pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 8 -k a682c6eaab4f46cfC84enRuy LopezClosed, Basque Gambit (North Spanish Variation)r1bqk2r/1pppbppp/p1n2n2/4P3/B2p4/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 7 -k c7fbd017af5160abC84enRuy LopezClosed, Basque Gambit (North Spanish Variation)r1bqk2r/1pppbppp/p1n2n2/8/B2pP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 7 > } - Kd133352638f7c218C88enRuy LopezClosed Variations, Rosen Attackr1bqk2r/2p1bppp/p1np1n2/1p2p3/3PP3/1B3N2/PPP2PPP/RNBQR1K1 b kq - 0 8 | -K14061a8c293eef5aZC88enRuy LopezClosed Variations, Rosen Attackr1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 w kq - 0 8n - 74cdd1fb6438c9a12C88enRuy LopezClosed, Anti-Marshallr1bq1rk1/2ppbppp/p1n2n2/1p2p3/P3P3/1B3N2/1PPP1PPP/RNBQR1K1 b - - 0 8!_ - 9]9af9e8973fde9483D00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qk2r/ppp2ppp/5pb1/1Q6/1b1Pp1P1/2N5/PPP2P1P/R3KBNR b KQkq - 4 8 FXqQ 3  (vXXXXXXXXXXXXE D - %C b703655562635af0C51enItalian GameEvans Gambit, Fraser Attackr2qk1nr/ppp2ppp/1bnp4/8/Q1BPP1b1/2N2N2/P4PPP/R1B2RK1 b kq - 4 10 1 - %Mb3808929debc8c00C51enItalian GameEvans Gambit, Ulvestad Variationr1bqk1nr/ppp2ppp/1b1p4/n2P4/2B1P3/5N2/PB3PPP/RN1Q1RK1 b kq - 2 100 -%M 73fc632c132010efC51enItalian GameEvans Gambit, Ulvestad Variationr1bqk1nr/ppp2ppp/1b1p4/n2P4/2B1P3/5N2/P4PPP/RNBQ1RK1 w kq - 1 10 / -%M 26eb49d9be1cb2e5C51enItalian GameEvans Gambit, Ulvestad Variationr1bqk1nr/ppp2ppp/1bnp4/3P4/2B1P3/5N2/P4PPP/RNBQ1RK1 b kq - 0 9  - %M 80e0af2909a601adC54enItalian GameGiuoco Piano, Steinitz Variationr1bqk2r/ppp2ppp/2n5/3p4/2BPn3/B1P2N2/P4PPP/R2Q1RK1 b kq - 1 10  -%M 22f37e6f837690c4C54enItalian GameGiuoco Piano, Steinitz Variationr1bqk2r/ppp2ppp/2n5/3p4/2BPn3/2P2N2/P4PPP/R1BQ1RK1 w kq - 0 10  -%Ma7995c7b1fa2dee2C54enItalian GameGiuoco Piano, Steinitz Variationr1bqk2r/pppp1ppp/2n5/8/2BPn3/2P2N2/P4PPP/R1BQ1RK1 b kq - 0 9  - %I503554f1fc06a3e2C54enItalian GameGiuoco Piano, Aitken Variationr1bqk2r/pppp1ppp/2n5/8/2BP4/B1b2N2/P4PPP/R2Q1RK1 b kq - 1 10 -%If22685b776d6328bC54enItalian GameGiuoco Piano, Aitken Variationr1bqk2r/pppp1ppp/2n5/8/2BP4/2b2N2/P4PPP/R1BQ1RK1 w kq - 0 10 -%Ifc0e4207be216dbcC54enItalian GameGiuoco Piano, Aitken Variationr1bqk2r/pppp1ppp/2n5/8/1bBP4/2P2N2/P4PPP/R1BQ1RK1 b kq - 0 9 x - %K 60ff8bddfef58386C55enItalian GameGiuoco Piano, Holzhausen Attackr1b1k2r/ppp1qppp/5n2/4p1B1/2BnP3/2N5/PPP3PP/R2Q1RK1 b kq - 1 10 w -%K 9b68937f3c17015f_C55enItalian GameGiuoco Piano, Holzhausen Attackr1b1k2r/ppp1qppp/5n2/4p1B1/2BnP3/8/PPP3PP/RN1Q1RK1 w kq - 0 10 v -%K a14d93908d594fd6C55enItalian GameGiuoco Piano, Holzhausen Attackr1b1k2r/ppp1qppp/3p1n2/4P1B1/2BnP3/8/PPP3PP/RN1Q1RK1 b kq - 0 9 u -%K 2dd29b33e135bb42BC55enItalian GameGiuoco Piano, Holzhausen Attackr1b1k2r/ppp1qppp/3p1n2/4p1B1/2BnPP2/8/PPP3PP/RN1Q1RK1 w kq - 1 9 t -%K b62d444320091528(C55enItalian GameGiuoco Piano, Holzhausen Attackr1bqk2r/ppp2ppp/3p1n2/4p1B1/2BnPP2/8/PPP3PP/RN1Q1RK1 b kq - 0 8 cZ~x k ] 0 6 - %Q1c2f6f557c52aeeaC42enRussian GameClassical Attack, Krause Variationr2qk2r/ppp1b1pp/2n5/3p1p2/2PPn1b1/3B1N2/PP3PPP/RNBQR1K1 b kq - 0 10/A --- 14704db9b47f1ff4C41enPhilidor DefenseBerger Variationrnbqk2r/ppp1bppp/3p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6@ --- 67f0ce40b55a5557WC41enPhilidor DefenseBerger Variationrnbqk2r/ppp1bppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6? --- 733cbdaf7ff1f9c6C41enPhilidor DefenseBerger Variationrnbqkb1r/ppp2ppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 55 -%Q1e002e43400a8f62bC42enRussian GameClassical Attack, Krause Variationr2qk2r/ppp1b1pp/2n5/3p1p2/3Pn1b1/2PB1N2/PP3PPP/RNBQR1K1 w kq - 0 10 KY -9=}99d91de16154f7a2C39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp2k2/7p/8/3PpBpP/8/PPP3P1/RN1QKB1R w KQ - 0 9 X -9=515382e8a8ad47f2C39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp2k2/7p/3p4/3PPBpP/8/PPP3P1/RN1QKB1R b KQ - 0 8 W -9=f10264c573c9d755UC39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp2k2/7p/3p4/3PPppP/8/PPP3P1/RNBQKB1R w KQ - 0 8I - --450083134e4c306ajC41enPhilidor DefenseBerger Variationr2q1rk1/pp2bppp/2npbn2/2p3B1/4P3/2N2N2/PPP1BPPP/R2QR1K1 b - - 5 10H ---c1b48d98c9e49b7e~C41enPhilidor DefenseBerger Variationr2q1rk1/pp2bppp/2npbn2/2p3B1/4P3/2N2N2/PPP1BPPP/R2Q1RK1 w - - 4 10G ---950c1f4c8151e076vC41enPhilidor DefenseBerger Variationr1bq1rk1/pp2bppp/2np1n2/2p3B1/4P3/2N2N2/PPP1BPPP/R2Q1RK1 b - - 3 9F ---5356487a31db3bbeC41enPhilidor DefenseBerger Variationr1bq1rk1/pp2bppp/2np1n2/2p5/4P3/2N2N2/PPP1BPPP/R1BQ1RK1 w - - 2 9E --- f8bb9098204a9ebdC41enPhilidor DefenseBerger Variationrnbq1rk1/pp2bppp/3p1n2/2p5/4P3/2N2N2/PPP1BPPP/R1BQ1RK1 b - - 1 8D --- 86dc0a94e2922672rC41enPhilidor DefenseBerger Variationrnbq1rk1/pp2bppp/3p1n2/2p5/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w - - 0 8C --- 60addb3a1dd52d0fC41enPhilidor DefenseBerger Variationrnbq1rk1/ppp1bppp/3p1n2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b - - 6 7B --- 1ed8a00e6126f61fC41enPhilidor DefenseBerger Variationrnbq1rk1/ppp1bppp/3p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQ - 5 7 hAe@B # K ```````` P  - -Kcc2805375b10be88C40enKing's Pawn GameDamiano Defense, Damiano Gambitrnb1kbnQ/ppppq2p/6p1/8/4P3/8/PPPP1PPP/RNB1KB1R b KQq - 0 6 --Kc0cb7eca1c5467d6C40enKing's Pawn GameDamiano Defense, Damiano Gambitrnb1kbnr/ppppq2p/6p1/4Q3/4P3/8/PPPP1PPP/RNB1KB1R w KQkq - 1 6  --K5b34a1badd68c9bcC40enKing's Pawn GameDamiano Defense, Damiano Gambitrnbqkbnr/pppp3p/6p1/4Q3/4P3/8/PPPP1PPP/RNB1KB1R b KQkq - 0 5  --Kfb8840536d2b0f24$C40enKing's Pawn GameDamiano Defense, Damiano Gambitrnbqkbnr/pppp3p/6p1/4p2Q/4P3/8/PPPP1PPP/RNB1KB1R w KQkq - 0 5 --K123c130816a49d6foC40enKing's Pawn GameDamiano Defense, Damiano Gambitrnbqkbnr/pppp2pp/8/4p2Q/4P3/8/PPPP1PPP/RNB1KB1R b KQkq - 1 4  --Kb231f02e3ac9bbf3C40enKing's Pawn GameDamiano Defense, Damiano Gambitrnbqkbnr/pppp2pp/8/4p3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 4 u(y - -S 1ba11324c4e59492C41enPhilidor DefenseHanham Variation, Steiner Variationr1bqk1nr/pp1nbppp/2pp4/4P3/2B1P3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6x --S 873cec66ccd023e2C41enPhilidor DefenseHanham Variation, Steiner Variationr1bqk1nr/pp1nbppp/2pp4/4p3/2BPP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 2 6/"; -  9c59fc9a77f6edf9C39enKing's Gambit Accepted, Kieseritzky Gambit, Rubinstein Variationrnbqkb1r/pppp1p1p/5n2/4N3/3PPppP/8/PPP3P1/RNBQKB1R b KQkq - 0 60 -  3adf67184e7c161dC39enKing's Gambit Accepted, Kieseritzky Gambit, Berlin Defensernbqkb1r/pppp1p1p/5n2/4N3/2B1PppP/8/PPPP2P1/RNBQK2R b KQkq - 3 6% -  6492e7b1fb9c2150PC39enKing's Gambit Accepted, Kieseritzky Gambit, Cotter Gambitrnbqkbnr/pppp1N2/7p/8/4PppP/8/PPPP2P1/RNBQKB1R b KQkq - 0 6$ - 1b9f92b9ae5055eaC39enKing's Gambit Accepted, Kieseritzky Gambit, Cotter Gambitrnbqkbnr/pppp1p2/7p/6N1/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 0 6  - c 2059725d6b6e9785C40enLatvian Gambit Accepted, Nimzowitsch Attackrnb1kbnr/ppp3pp/3p1q2/8/3Pp3/4N3/PPP2PPP/RNBQKB1R b KQkq - 1 6  -c 89f5d28f286b7fb1C40enLatvian Gambit Accepted, Nimzowitsch Attackrnb1kbnr/ppp3pp/3p1q2/8/2NPp3/8/PPP2PPP/RNBQKB1R w KQkq - 0 6 - _ fa755176294e3512C40enLatvian Gambit Accepted, Bronstein Attackrnb1kbnr/ppp3pp/3p1q2/8/2NPp3/8/PPP1BPPP/RNBQK2R b KQkq - 1 6n - -Y745f98cf8f7d69f8C41enPhilidor DefensePhilidor Countergambit, del Rio Attackrnbqkbnr/ppp3pp/4P3/3p2N1/4p3/8/PPP2PPP/RNBQKB1R b KQkq - 0 6m --Yf79a84f07f8863311C41enPhilidor DefensePhilidor Countergambit, del Rio Attackrnbqkbnr/ppp3pp/8/3pP1N1/4p3/8/PPP2PPP/RNBQKB1R w KQkq - 0 6 nv] 3}s!n | -9G}ffb09aa9798b4d62bC37enKing's Gambit AcceptedLolli Gambit, Young Variationrnbq1bnr/pppp1k1p/8/8/4Pp2/5Q2/PPPP2PP/RNB2RK1 b - - 0 7 { -9Gb6b36e86c0e663b5C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnbq1bnr/pppp1k1p/8/8/4Pp2/5p2/PPPP2PP/RNBQ1RK1 w - - 0 7z -9G88aebe595f5202a9C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnbq1bnr/pppp1k1p/8/8/4Ppp1/5N2/PPPP2PP/RNBQ1RK1 b - - 1 6y -9Gf6dbc56d23a1d9b9C37enKing's Gambit AcceptedLolli Gambit, Young Variationrnbq1bnr/pppp1k1p/8/8/4Ppp1/5N2/PPPP2PP/RNBQK2R w KQ - 0 6$, ǁ } -9Gf888076e1c620e8fC37enKing's Gambit AcceptedLolli Gambit, Young Variationrnb2bnr/pppp1k1p/5q2/8/4Pp2/5Q2/PPPP2PP/RNB2RK1 w - - 1 8o - 9% ade14caae2bfb01fC38enKing's Gambit AcceptedGreco Gambitrnbqk1nb/pp3p2/2pp4/4N1p1/2BPPp2/2N5/PPP3P1/R1BQK3 b Qq - 1 10n -9% 70d99365b932d569iC38enKing's Gambit AcceptedGreco Gambitrnbqk1nb/pp3p2/2pp4/6p1/2BPPp2/2N2N2/PPP3P1/R1BQK3 w Qq - 0 10m -9% 5e6b5c83bfbb3f48HC38enKing's Gambit AcceptedGreco Gambitrnbqk1nR/pp3pb1/2pp4/6p1/2BPPp2/2N2N2/PPP3P1/R1BQK3 b Qq - 0 9l -9%7ed9f8d6e788726foC38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/pp3pb1/2pp4/6p1/2BPPp2/2N2N2/PPP3P1/R1BQK2R w KQkq - 0 9k '9%db1d57de46318C38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/pp3pb1/2pp3p/6P1/2BPPp2/2N2N2/PPP3P1/R1BQK2R b KQkq - 0 8j +9%fc6daf523840560`C38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/pp3pb1/2pp3p/6p1/2BPPp1P/2N2N2/PPP3P1/R1BQK2R w KQkq - 0 8i -9%9dbc371a5444d6dbC38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/ppp2pb1/3p3p/6p1/2BPPp1P/2N2N2/PPP3P1/R1BQK2R b KQkq - 1 7 g -9% 5f91b9d944de1d6foC38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/pppp1pb1/7p/6p1/2BPPp1P/5N2/PPP3P1/RNBQK2R b KQkq - 0 6f -9%9aa496735517302d-C38enKing's Gambit AcceptedGreco Gambitrnbqk1nr/pppp1pb1/7p/6p1/2B1Pp1P/5N2/PPPP2P1/RNBQK2R w KQkq - 0 6 \ - 9=48fea0d63e2de06clC39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp3k1/7p/4B3/2BPp1pP/8/PPP3P1/RN1QK2R b KQ - 3 10[ -9=afc8e26f7db96d17C39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp3k1/7p/8/2BPpBpP/8/PPP3P1/RN1QK2R w KQ - 2 10Z -9=}fa6aa9c949172104C39enKing's Gambit AcceptedAllgaier, Cook Variationrnbq1bnr/ppp2k2/7p/8/2BPpBpP/8/PPP3P1/RN1QK2R b KQ - 1 9 g RJ( P ]0gggggg  w + -O67559c2c5f4255d]B73enSicilian DefenseDragon, Classical, Zollner Gambitr1b2rk1/pp2ppbp/1qnp1np1/4P3/3N1P2/2N1B3/PPP1B1PP/R2Q1RK1 b - - 0 10 --O670c4f3fc1ea03399B73enSicilian DefenseDragon, Classical, Zollner Gambitr1b2rk1/pp2ppbp/1qnp1np1/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 w - - 1 10 --Oa0f3b1680ba1d5e3B73enSicilian DefenseDragon, Classical, Zollner Gambitr1bq1rk1/pp2ppbp/2np1np1/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 b - - 0 9 --O eb15d425ab001125%B73enSicilian DefenseDragon, Classical, Zollner Gambitr1bqk2r/pp1pppbp/2n2np1/8/3NP3/4B3/PPP1BPPP/RN1QK2R w KQkq - 4 7 --O b0fbe0d006fa50b3B73enSicilian DefenseDragon, Classical, Zollner Gambitr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/4B3/PPP1BPPP/RN1QK2R b KQkq - 3 6~ --O c37b632907df1a10B73enSicilian DefenseDragon, Classical, Zollner Gambitr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/4B3/PPP2PPP/RN1QKB1R w KQkq - 2 6} --O 73c75e9ffc98d1baB73enSicilian DefenseDragon, Classical, Zollner Gambitr1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/4B3/PPP2PPP/RN1QKB1R b KQkq - 1 5a - -]edf0982492ada63a:B83enSicilian DefenseScheveningen Variation, Modern Variationr2q1rk1/pp1bbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 b - - 4 104N - - 6c6a8b940b9d82f8B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1k2r/1pq1bppp/p1nppn2/8/P2NPP2/2N5/1PP1B1PP/R1BQ1R1K b kq - 0 101M +- 7a3f578660e57366B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1k2r/1pq1bppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1R1K w kq - 0 101L -- 3e196319b4761e5b[B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1k2r/1pqpbppp/p1n1pn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1R1K b kq - 0 91K -- c30f1e14ade723d2B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1k2r/1pqpbppp/p1n1pn2/8/3NP3/2N5/PPP1BPPP/R1BQ1R1K w kq - 4 91J -- d7c36dfb674c8f43CB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pqp1ppp/p1n1pn2/8/3NP3/2N5/PPP1BPPP/R1BQ1R1K b kq - 3 8 t - -O afe6924fafae4007B78enSicilian DefenseDragon Variation, Yugoslav Attackr2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10` --]7981a00983ba60f0B83enSicilian DefenseScheveningen Variation, Modern Variationr2q1rk1/pp1bbppp/2nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 w - - 3 10 '9 --y f35e89a1be54d8d5B96enSicilian DefenseNajdorf Variation, Polugaevsky Variation, Simagin Linernbqkb1r/5ppp/p3pn2/1p2P1B1/3N4/2N5/PPP3PP/R2QKB1R b KQkq - 0 9*; - -y634739a29c5bcc50PB96enSicilian DefenseNajdorf Variation, Polugaevsky Variation, Simagin Linernb1kb1r/2q2ppp/p3pn2/1p2P1B1/3N4/2N5/PPP1Q1PP/R3KB1R b KQkq - 2 10*: --yf541b680d21f97d4B96enSicilian DefenseNajdorf Variation, Polugaevsky Variation, Simagin Linernb1kb1r/2q2ppp/p3pn2/1p2P1B1/3N4/2N5/PPP3PP/R2QKB1R w KQkq - 1 10 Y ? & V6 p ;e?|||||| ^O --] e848e5b7d8daab4fOB83enSicilian DefenseScheveningen Variation, Modern Variationr1bq1rk1/pp2bppp/2nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w - - 1 9N --] 43a53d55c94b0e4cLB83enSicilian DefenseScheveningen Variation, Modern Variationrnbq1rk1/pp2bppp/3ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b - - 0 82 - -daeb76817e798028(B90enSicilian DefenseScheveningen Variation, Delayed Keres Attack, Perenyi Gambitrnbqkb1r/1p3p1p/p2p1np1/4pNP1/4P3/2N1B3/PPP2P1P/R2QKB1R b KQkq - 0 9 92> -- acda73dcd4e87fefB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pq2ppp/p1nppn2/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 w kq - 0 93= -- 9560e5bd06903682B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pqp1ppp/p1n1pn2/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 3 81< -- e6685e5187aa2d0c B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pqp1ppp/p1n1pn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 2 81; -- bd866aa42a506c9aB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 1 72: -- c3f3119056a3b78aB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 709 -- 1104e063b1834f56VB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 61L --]b41badef0583da2e.B83enSicilian DefenseScheveningen Variation, Modern Variationrnbqk2r/pp2bppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7K --] ca6ed6db7970013e>B83enSicilian DefenseScheveningen Variation, Modern Variationrnbqk2r/pp2bppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 72? - - 51cc0ed1cd794266fB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 b kq - 0 9. - -= 3c02029c8753a7300B88enSicilian DefenseSozin, Fischer Variationr1bq1rk1/pp2bppp/2nppn2/8/3NPP2/1BN1B3/PPP3PP/R2QK2R b KQ - 0 9 - --= c1147f919ec29ab9B88enSicilian DefenseSozin, Fischer Variationr1bq1rk1/pp2bppp/2nppn2/8/3NP3/1BN1B3/PPP2PPP/R2QK2R w KQ - 4 9 , --= cbbc92264b9b7352RB88enSicilian DefenseSozin, Fischer Variationr1bqk2r/pp2bppp/2nppn2/8/3NP3/1BN1B3/PPP2PPP/R2QK2R b KQkq - 3 8 + --= b8b429cacaa168dcB88enSicilian DefenseSozin, Fischer Variationr1bqk2r/pp2bppp/2nppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 2 8* --= ac785a25000ac44dMB88enSicilian DefenseSozin, Fischer Variationr1bqkb1r/pp3ppp/2nppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7M --]beb34058d0da33c5B83enSicilian DefenseScheveningen Variation, Modern Variationrnbq1rk1/pp2bppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w - - 4 8 F A s  h13:1i --_ 38ec8a17029941333B97enSicilian DefenseNajdorf Variation, Poisoned Pawn Acceptedrnb1kb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PqPQ2PP/R3KB1R w KQkq - 0 9h --_ab7e4cddf737f0ebB97enSicilian DefenseNajdorf Variation, Poisoned Pawn Acceptedrnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPPQ2PP/R3KB1R b KQkq - 2 8 u'!D - -i1d80d119a5955c9bB68enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variationr2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 9'3 - -u4f8e418960bb22300B74enSicilian DefenseDragon Variation, Classical Variation, Alekhine Liner1bq1rk1/1p2ppbp/2np1np1/p7/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 w - - 0 10%0 --u 645f5a04c048a107B74enSicilian DefenseDragon Variation, Classical Variation, Alekhine Liner1bq1rk1/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b - - 7 8%/ --u 1a2a2130bcbb7a17B74enSicilian DefenseDragon Variation, Classical Variation, Alekhine Liner1bq1rk1/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R w KQ - 6 8'. --u1082cc8769e293fcB74enSicilian DefenseDragon Variation, Classical Variation, Alekhine Liner1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 5 7&! - -u8c4d2a988b1a965b[B77enSicilian DefenseDragon Variation, Yugoslav Attack, Sosonko Variationr1bq1rk1/pp1nppbp/2np2p1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R w KQ - 5 10 - -]f3109cff454a933e>B77enSicilian DefenseDragon, Yugoslav Attack, Byrne Variationr1bq1rk1/1p2ppbp/2np1np1/p7/2BNP3/2N1BP2/PPPQ2PP/R3K2R w KQ - 0 10} - -O97cbd76cfc8c4f9fB77enSicilian DefenseDragon Variation, Yugoslav Attackr2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R w KQ - 5 10k - -_b80cf946e9d31042BB97enSicilian DefenseNajdorf Variation, Poisoned Pawn Acceptedrnb1kb1r/1p3ppp/p2ppn2/6B1/3NPP2/q1N5/P1PQ2PP/1R2KB1R w Kkq - 2 10j --_ 6bbfac8fc4ae8427'B97enSicilian DefenseNajdorf Variation, Poisoned Pawn Acceptedrnb1kb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PqPQ2PP/1R2KB1R b Kkq - 1 9Y - -S2410e95d123227344B98enSicilian DefenseNajdorf Variation, Browne Variationrnb1k2r/1pq1bpp1/p2ppn1p/8/3NPP1B/2N2Q2/PPP3PP/R3KB1R w KQkq - 2 10X --S220fd67c7e7968355B98enSicilian DefenseNajdorf Variation, Browne Variationrnbqk2r/1p2bpp1/p2ppn1p/8/3NPP1B/2N2Q2/PPP3PP/R3KB1R b KQkq - 1 9W --S7880bebf8dc74aaeB98enSicilian DefenseNajdorf Variation, Browne Variationrnbqk2r/1p2bpp1/p2ppn1p/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R w KQkq - 0 9l1G - -[a24c26a1eacd97bfB98enSicilian DefenseNajdorf Variation, Goteborg (Argentine)rnbqk2r/1p2bp2/p2ppn1p/6p1/3NPP1B/2N2Q2/PPP3PP/R3KB1R w KQkq - 0 105 - -Ee7a6f486c5d2aeeeB99enSicilian DefenseNajdorf Variation, Main Liner1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 104 - -Ed4458fdb257a4322"B99enSicilian DefenseNajdorf Variation, Main Linernb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9 A NKyAe ^ A ^ ^ ^ ^ ^AA+ -/Qf97c9b524ebd0ea4B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1pp1/2pbpn1p/8/3PN3/3B1N2/PPP1QPPP/R1B1K2R b KQkq - 1 9* -/Qce1c4fa35f94e94bKB17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1pp1/2pbpn1p/6N1/3P4/3B1N2/PPP1QPPP/R1B1K2R w KQkq - 0 9) -/Q5ceb04c5c840a05e^B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1ppp/2pbpn2/6N1/3P4/3B1N2/PPP1QPPP/R1B1K2R b KQkq - 3 8( -/Qcaed8be78604fbdaB17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1ppp/2pbpn2/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R w KQkq - 2 8' -/Q6eb5e665591e2afeB17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R b KQkq - 1 7& -/Qb5d10a9331f84bc3B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR w KQkq - 0 7% -/Qc3a6f8a229dadb91B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqkb1r/pp1npppp/2p2n2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR b KQkq - 4 6$ -/Q 96ab5900105a19e2B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqkb1r/pp1npppp/2p2n2/6N1/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 3 6 t -5]1aa25dc38f49d250PE29enNimzo-Indian DefenseSämisch Variation, Capablanca Variationr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/4NPPP/R1BQK2R b KQ - 2 8,e - 7o8d17a0c2b38a2613E96enKing's Indian DefenseOrthodox Variation, Positional Defense, Main Liner1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10*d + 7ob0d1503d0162a83E96enKing's Indian DefenseOrthodox Variation, Positional Defense, Main Liner1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 9+c - 7o788d96fad1336020 E96enKing's Indian DefenseOrthodox Variation, Positional Defense, Main Liner1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9 - -g b1fedf5895e33ceeB65enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bq1rk1/pp2bppp/3ppn2/6B1/3QPP2/2N5/PPP3PP/2KR1B1R b - - 0 10(oS - )I75d6ab531e8df9c3A74enBenoni DefenseClassical Variation, Full Linernbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10R - )I1e1fd5bf731e2c0d A74enBenoni DefenseClassical Variation, Full Linernbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10@ + )k d9b78eb64f30fd9A77enBenoni DefenseClassical Variation, Czerniak Defense, Tal Linernbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10- - /Q43da185ee7e56053SB17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1pp1/2pbp2p/8/3PQ3/3B1N2/PPP2PPP/R1B1K2R b KQkq - 0 10, -/Q5e69b728fb9bd8311B17enCaro-Kann DefenseKarpov Variation, Modern Main Liner1bqk2r/pp1n1pp1/2pbp2p/8/3Pn3/3B1N2/PPP1QPPP/R1B1K2R w KQkq - 0 10 [ v ^  r $}8[ffH 5 ? - ;Y828922df9722e806D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationr1bq1rk1/p2nbppp/2p1pn2/1p4B1/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 0 10 M - /W673d7426138a5873sD99enGrünfeld DefenseRussian Variation, Yugoslav Variationrn1q1rk1/pp1nppbp/6p1/2p5/3PP1b1/1QN1BN2/PP3PPP/R3KB1R w KQ - 0 10^> -;Y e28d48ca0c8f553b;D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationr1bq1rk1/pp1nbppp/2p1pn2/6B1/2BP4/2N1PN2/PP3PPP/2RQK2R b K - 0 9= -;Y ab377ca133bc56f0D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationr1bq1rk1/pp1nbppp/2p1pn2/6B1/2pP4/2NBPN2/PP3PPP/2RQK2R w K - 0 9#: -;Y269409868d5b938bD66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationr1bqk2r/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R b Kkq - 2 7#9 -;Y590fc6cb0e49c755UD66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationr1bqk2r/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQkq - 1 7#8 -;Y6aecbd96eee12a99D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationrnbqk2r/pp2bppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 6"7 -;Yc7c1ff24cabea23d=D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationrnbqk2r/pp2bppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 6 5 +;Y869603d68f36f91D66enQueen's Gambit DeclinedOrthodox Defense, Fianchetto Variationrnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 5- - ;S269d9733c24d208eD67enQueen's Gambit DeclinedOrthodox Defense, Capablanca Systemr1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 1 10  - /A9ca6f37f02f367366D86enGrünfeld DefenseExchange, Larsen Variationrnb2rk1/p1pqppbp/1p4p1/8/2BPP3/2P5/P3NPPP/R1BQ1RK1 w - - 0 10 -/Af7cfba6ffc70d0adD86enGrünfeld DefenseExchange, Larsen Variationrnb2rk1/pppqppbp/6p1/8/2BPP3/2P5/P3NPPP/R1BQ1RK1 b - - 6 9w - 5]c97ab689e00bafd1E29enNimzo-Indian DefenseSämisch Variation, Capablanca Variationr1bqnrk1/p2p1ppp/1pn1p3/2p5/2PPP3/P1PB4/4NPPP/R1BQK2R w KQ - 1 10v -5]e0377d831132d56clE29enNimzo-Indian DefenseSämisch Variation, Capablanca Variationr1bq1rk1/p2p1ppp/1pn1pn2/2p5/2PPP3/P1PB4/4NPPP/R1BQK2R b KQ - 0 9u -5]71cb14d371ca65cbE29enNimzo-Indian DefenseSämisch Variation, Capablanca Variationr1bq1rk1/p2p1ppp/1pn1pn2/2p5/2PP4/P1PBP3/4NPPP/R1BQK2R w KQ - 0 9Q - /Kc982bea1436da28eD48enSemi-Slav DefenseMeran Variation, Pirc Variationr1bqkb1r/3n1ppp/p1p1pn2/8/1p1PP3/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 10  H Z HD & HHHHH6 -9W 14b3b27d1f1388a2E18enQueen's Indian DefenseClassical Variation, Tiviakov Defensern1qk2r/pbppbppp/1p2pn2/8/2P5/5NP1/PP1PPPBP/RNBQ1RK1 w kq - 4 65 )9W 7fc192d5b824333E18enQueen's Indian DefenseClassical Variation, Tiviakov Defensern1qkb1r/pbpp1ppp/1p2pn2/8/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 3 57 -9Wef24aadfddf10a7b{E18enQueen's Indian DefenseClassical Variation, Tiviakov Defensern1qk2r/pbppbppp/1p2pn2/8/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 b kq - 5 6 , + 5]a02e9b5bd59e2dfE23enNimzo-Indian DefenseSpielmann Variation, Stahlberg Variationr1bqk2r/pp1p1ppp/2n1p3/2n5/1bP5/1QN2N2/PP1BPPPP/R3KB1R w KQkq - 0 8 kA8H - 9a5d34ad685b580f4E18enQueen's Indian DefenseClassical Variation, Traditional Variation, Nimzowitsch Linern1q1rk1/pbp1bppp/1p2pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8: - 9W 6e39c3529f9e526enE18enQueen's Indian DefenseClassical Variation, Tiviakov Defenser2q1rk1/pbppbppp/np2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 1 88 -9We58c476808a8e390E18enQueen's Indian DefenseClassical Variation, Tiviakov Defensern1q1rk1/pbppbppp/1p2pn2/8/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 w - - 6 7 - 5[d13987351057a106E23enNimzo-Indian DefenseSpielmann Variation, Karlsbad Variationr1bqk2r/pp1p1ppp/2n1p3/2P5/1bP5/1QN2N2/PP1nPPPP/R3KB1R w KQkq - 0 8#+ -5]d005e30e08a537d1E23enNimzo-Indian DefenseSpielmann Variation, Stahlberg Variationr1bqk2r/pp1p1ppp/2n1p3/2P5/1bP1n3/1QN2N2/PP1BPPPP/R3KB1R b KQkq - 4 7$* -5]f988b9bb9ac45cd5E23enNimzo-Indian DefenseSpielmann Variation, Stahlberg Variationr1bqk2r/pp1p1ppp/2n1p3/2P5/1bP1n3/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 3 7") -5]c380f524288dd12f/E23enNimzo-Indian DefenseSpielmann Variation, Stahlberg Variationr1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 2 6 9 x(V< o A @ uttttH` - /Ycd51bd301d7b8dcaD31enSemi-Slav DefenseNoteboom Variation, Abrahams Variationrnbqk1nr/p4ppp/4p3/1p6/2pP4/2P1PN2/5PPP/R1BQKB1R w KQkq - 0 9_ -/Y 41c39fb24b5d5d3a:D31enSemi-Slav DefenseNoteboom Variation, Abrahams Variationrnbqk1nr/p4ppp/2p1p3/1P6/2pP4/2P1PN2/5PPP/R1BQKB1R b KQkq - 0 8^ -/Y 99f2f8406629ef2e.D31enSemi-Slav DefenseNoteboom Variation, Abrahams Variationrnbqk1nr/p4ppp/2p1p3/1p6/P1pP4/2P1PN2/5PPP/R1BQKB1R w KQkq - 0 8] -/Y f9f69255fd845213D31enSemi-Slav DefenseNoteboom Variation, Abrahams Variationrnbqk1nr/pp3ppp/2p1p3/8/P1pP4/2P1PN2/5PPP/R1BQKB1R b KQkq - 0 7\ -/Yb223f86450d8bd53SD31enSemi-Slav DefenseNoteboom Variation, Abrahams Variationrnbqk1nr/pp3ppp/2p1p3/8/P1pP4/2b1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7w#o - ;g 9205482fe013381cD29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Main Linernbqkb1r/5ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 b kq - 1 8s] - %Sd9239b64d31835f9D17enSlav DefenseCzech Variation, Carlsbad Variationr3kb1r/ppqn1ppp/2p2n2/4pb2/P1NP4/2N3P1/1P2PP1P/R1BQKB1R w KQkq - 0 90 - /O8a892602c4b5eaf5D47enSemi-Slav DefenseMeran Variation, Lundin Variationr1bqkb1r/p2n1ppp/2p1pn2/8/1p1P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9d -%]3680fa26a970028aD14enSlav DefenseExchange Variation, Trifunovic Variationr2qkb1r/pp3ppp/2n1pn2/3p1b2/3P1B2/2N1PN2/PP3PPP/R2QKB1R w KQkq - 0 8 -%]40f70817b15292d8D14enSlav DefenseExchange Variation, Trifunovic Variationr2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 7 -%S535b932e40fdcdcfD17enSlav DefenseCzech Variation, Carlsbad Variationr3kb1r/ppqnpppp/2p2n2/5b2/P1NP4/2N3P1/1P2PP1P/R1BQKB1R b KQkq - 0 8~ -%S7fbd286fa02a15f7D17enSlav DefenseCzech Variation, Carlsbad Variationr3kb1r/ppqnpppp/2p2n2/5b2/P1NP4/2N5/1P2PPPP/R1BQKB1R w KQkq - 1 8} -%S79a2174ecc615af6D17enSlav DefenseCzech Variation, Carlsbad Variationr2qkb1r/pp1npppp/2p2n2/5b2/P1NP4/2N5/1P2PPPP/R1BQKB1R b KQkq - 0 7| -%Sb72da30e9bd0ff2c,D17enSlav DefenseCzech Variation, Carlsbad Variationr2qkb1r/pp1npppp/2p2n2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R w KQkq - 3 7&p - ;g 229500ab92419787D29enQueen's Gambit AcceptedClassical Defense, Alekhine System, Main Linern1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9O +-3820edb08a800bb7D34enTarrasch DefenseClassical Variationr1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1 b kq - 4 8@ - /K5bd45f5877fe1c2d-D47enSemi-Slav DefenseMeran Variation, Wade Variationr2qkb1r/pb1n1ppp/2p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 2 9? -/Keb4417dc05acb3b6D47enSemi-Slav DefenseMeran Variation, Wade Variationr1bqkb1r/p2n1ppp/2p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 1 8P + -328800075fd9e25c\D34enTarrasch DefenseClassical Variationr1bq1rk1/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 5 9 `  ( L e`& t[ -;Yc1159126f1f4e270pD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqk2r/pp3ppp/4p3/8/1b1PP3/5N2/P4PPP/R1BQKB1R w KQkq - 1 9 c - ;-24929594a5d4a602D48enQueen's Gambit DeclinedSemi-Slav, Meranr1bqkb1r/3n1ppp/p3pn2/1pp5/3PP3/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 10 i -;Ya4e22d6cdeab2674tD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/pp3ppp/4p3/8/3pP3/2P2N2/P4PPP/R1BQKB1R w KQkq - 0 8 -;Y fbfc9759a35f4fb2D41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/pp3ppp/4p3/2p5/3PP3/2P2N2/P4PPP/R1BQKB1R b KQkq - 1 7 -;Y20987bafcbb92e8fD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/pp3ppp/4p3/2p5/3PP3/2P5/P4PPP/R1BQKBNR w KQkq - 0 7 -;Yc6e9aa0134fe25f2D41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/ppp2ppp/4p3/8/3PP3/2P5/P4PPP/R1BQKBNR b KQkq - 0 6 -;Y451b18dcc297ddebD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/ppp2ppp/4p3/8/3PP3/2n5/PP3PPP/R1BQKBNR w KQkq - 0 6~ +;Y 98a362c5912d3a9D41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/ppp2ppp/4p3/3n4/3PP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5} -;Y cd8d3b64b2926ea3D41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/ppp2ppp/4p3/3n4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5 8u - /S2bfd4f8e856902322D44enSemi-Slav DefenseBotvinnik System, Alatortsev Systemrnbqkb1r/p4p2/2p1p2p/1p1nP1N1/2pP3B/2N5/PP3PPP/R2QKB1R w KQkq - 1 10 b -;-a84f8f7f8274fbcdD48enQueen's Gambit DeclinedSemi-Slav, Meranr1bqkb1r/3n1ppp/p1p1pn2/1p6/3PP3/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 9L --i 7d6b22d7bcc5b5300D34enTarrasch DefenseClassical Variation, Classical Tarrasch Gambitr1bq1rk1/pp2bppp/2n2n2/2Pp4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 9 - ;Y 31eb5ec8cae7a8fbD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnb1k2r/pp3ppp/4p3/q7/1b1PP3/5N2/P2B1PPP/R2QKB1R w KQkq - 3 10 -;Ye898cb9363958974tD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqk2r/pp3ppp/4p3/8/1b1PP3/5N2/P2B1PPP/R2QKB1R b KQkq - 2 9 +;Y854f820ba032a52RD41enQueen's Gambit DeclinedSemi-Tarrasch, San Sebastian Variationrnbqkb1r/pp3ppp/4p3/8/3PP3/5N2/P4PPP/R1BQKB1R b KQkq - 0 8 L C  _ _ _ _ _ _IIIIIIIIIIIL3L= - -Y1ccded5387bf9319D34enTarrasch DefenseClassical Variation, Advance Variationr1bq1rk1/pp2bppp/2n2n2/3p2B1/2pP4/2N2NP1/PP2PPBP/R2Q1RK1 w - - 0 10+ - -Y906ac5e5a7e6429cD34enTarrasch DefenseClassical Variation, Endgame Variationr2q1rk1/pp2bppp/2n1bn2/2pp2B1/3P4/2N2NP1/PP2PPBP/R2Q1RK1 w - - 7 10! - -i9f0648b970fa9fd7D34enTarrasch DefenseClassical Variation, Classical Tarrasch Gambitr1bq1rk1/pp2bppp/2n2n2/2P5/3p4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10kO - /Oe79d4b76096cb986D31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/4p3/2B5/2P5/8/PP2BPqP/R2QK1NR w KQkq - 0 10N -/O76b514ff7d093585D31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/4p3/2B5/2P1q3/8/PP2BPPP/R2QK1NR b KQkq - 0 9M -/O914e18128af2e299D31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/4p3/2p5/1BP1q3/8/PP2BPPP/R2QK1NR w KQkq - 0 9L -/O1d9302f9ad52bf56VD31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/2p1p3/8/1BP1q3/8/PP2BPPP/R2QK1NR b KQkq - 1 8K -/O6e138100ac77f5f5D31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/2p1p3/8/1BP1q3/8/PP3PPP/R2QKBNR w KQkq - 0 8J -/O8c1f88acbf209377wD31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/2p1p3/8/1BPqN3/8/PP3PPP/R2QKBNR b KQkq - 0 7I -/O 82e48c22453ffd366D31enSemi-Slav DefenseMarshall Gambit, Tolush Variationrnb1k1nr/pp3ppp/2p1p3/8/1bPqN3/8/PP1B1PPP/R2QKBNR w KQkq - 0 7 tzrjb[TMF?81*#{tme]UME=5-%  } v o h a Z S L E > 7 0 ) "    } u n g ` Y R K D = 6 / ( !    { s k c [ S K C ; 3 + $      | t l d \ T L D < 4 , $    y r k d ] V O H A : 3 + #   |ung`YRKD=6/(! ~vnf^VNF>6.&txqjc\UNG@92+$~vnf^VNF>6.'  xqjc\TLD<4,$ |7:H:G:F:;:;U:7:6:3m:1:/:*:::_:a:9q9Q999997999)9999 9~9~X9|u9|9wg9w/9r9i9d9`9`89X9U9G9<96O95&939*9)C9&9!99999 9 w9 y9-8V888w8[8~8!88888888r8=8!88E8 88Y888H88~8}8|8{8z8u8u)8tu8s8r8p8j8i8e8d8b8_8^y8Z8W8U 8TA8Oe8FZ89878381M8%s88s88^88_8777I7E77777x7t7/77h7Q77 7777A7777h7>7'7~7~7~7}$7v7o7e7b'7a7`i7_7^7]7X7T7R7O7OX7OR7K7:$78%7/R7/7/7.7+7(7%X7$777F77666!666P6j6T66\66q6j6@6*6~6zb6v6q 6p6o6o6cK6Z6X6X6X6X6X6V6U6N6B6>6=6;66 6563616(6'6666M555^5255555L5$5k55j5'5~5~"5}5zv5y5x5w85o5a5aE5\5[I5R5H5G5>&59D555)5%5! 5P5T55I4)444Q4.4444H4w4b404F4}44444|x4i4g4eJ4a4`4^4]4]y4U4QW4O4N4I4D 4@4;4:Y4:4848J4*4!t4 4W4433313 33333'333j33}D3|3w.3f3b3b 3Y83W3W 3VU3R3R 3M3D3B35m3),3%3#!3 333f333h3I3 333622222 22B2M22;2P222y222222%2322&22~2~O2}2}f2{v2z2yv2t2s2q2p2j2b2[2Us2T2R2R2N2G2GP2?2928242,l2(>2(2#2"t22u2 2B1O1\1w111"11111g11~1}B1{1x1vm1uo:O;3 'd, V'cBBBBBBBB "/  ) %u 7adfbc0a6fbac7C55enItalian GameTwo Knights Defense, Max Lange Attack, Loman Defenser2qk2r/ppp2p1p/2n1bPp1/2b3N1/2pp4/8/PPP2PPP/RNBQR1K1 w kq - 0 10 -%u e9ce8ce771e0288cC55enItalian GameTwo Knights Defense, Max Lange Attack, Loman Defenser2qk2r/ppp2ppp/2n1bP2/2b3N1/2pp4/8/PPP2PPP/RNBQR1K1 b kq - 3 9 'o - %] 71712b146a7a6e322C55enItalian GameTwo Knights Defense, Keidansky Variationr1b1k2r/ppp2ppp/2N5/1B1pP3/4n2q/8/PPP2bPP/RNBQ1K1R w kq - 2 10n -%]8f768fe3314ce6ccC55enItalian GameTwo Knights Defense, Keidansky Variationr1bqk2r/ppp2ppp/2N5/1B1pP3/4n3/8/PPP2bPP/RNBQ1K1R b kq - 1 9m -%]33e34eddcf0d90deC55enItalian GameTwo Knights Defense, Keidansky Variationr1bqk2r/ppp2ppp/2N5/1B1pP3/4n3/8/PPP2bPP/RNBQK2R w KQkq - 0 9l -%]ee709cf923ec87f5C55enItalian GameTwo Knights Defense, Keidansky Variationr1bqk2r/ppp2ppp/2N5/1BbpP3/4n3/8/PPP2PPP/RNBQK2R b KQkq - 0 8k -%] a2f220a654f88ec0C55enItalian GameTwo Knights Defense, Keidansky Variationr1bqk2r/ppp2ppp/2n5/1BbpP3/3Nn3/8/PPP2PPP/RNBQK2R w KQkq - 1 8j +%] fef64fd9eca6443CC55enItalian GameTwo Knights Defense, Keidansky Variationr1bqkb1r/ppp2ppp/2n5/1B1pP3/3Nn3/8/PPP2PPP/RNBQK2R b KQkq - 0 7i -%]687b39a08ffbf66dmC55enItalian GameTwo Knights Defense, Keidansky Variationr1bqkb1r/ppp2ppp/2n5/1B1pP3/3pn3/5N2/PPP2PPP/RNBQK2R w KQkq - 2 7h -%]5273753f3db27b97C55enItalian GameTwo Knights Defense, Keidansky Variationr1bqkb1r/ppp2ppp/2n2n2/1B1pP3/3p4/5N2/PPP2PPP/RNBQK2R b KQkq - 1 6g -%]e651e8c1e3fa2b1aC55enItalian GameTwo Knights Defense, Keidansky Variationr1bqkb1r/ppp2ppp/2n2n2/3pP3/2Bp4/5N2/PPP2PPP/RNBQK2R w KQkq d6 0 6] - %[cde18a9bff720c68hC58enItalian GameTwo Knights Defense, Maróczy Variationr1bqk2r/ppp1bpp1/5n1p/3P4/2P1p3/5N2/PPP1QPPP/RNB1K2R w KQkq - 1 10\ -%[d92df97435d9a0f9C58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/3P4/2P1p3/5N2/PPP1QPPP/RNB1K2R b KQkq - 0 9[ -%[d02530c3b4096e9aC58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/3P4/2n1p3/3P1N2/PPP1QPPP/RNB1K2R w KQkq - 0 9Z -%[32611f80d6b832377C58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/n2P4/2B1p3/3P1N2/PPP1QPPP/RNB1K2R b KQkq - 1 8Y -%[a46790a298fc69b3C58enItalian GameTwo Knights Defense, Maróczy Variationr1bqkb1r/ppp2pp1/5n1p/n2P4/2B1p3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 0 8 aaj;   !tttttaaaaaaaa -S55b7059f84f22126&C77enRuy LopezWormald Attack, Grünfeld Variationr1bqkb1r/2pp1ppp/p1n2n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB1K2R b KQkq - 1 6}- -M619727139a8ee2d6C67enRuy LopezBerlin Defense, Cordel Variationr1bqk2r/ppppbppp/2Bn4/4p3/3P4/5N2/PPP1QPPP/RNB2RK1 b kq - 0 7 , -M 30b81df53cd832edC67enRuy LopezBerlin Defense, Cordel Variationr1bqk2r/ppppbppp/2nn4/1B2p3/3P4/5N2/PPP1QPPP/RNB2RK1 w kq - 3 7 v - +2ca9776ff2908516C71enRuy LopezNoah's Ark Trapr1bqkbnr/5ppp/p2p4/1pp5/3QP3/1B6/PPP2PPP/RNB1K2R w KQkq - 0 9w -+ cad8a6c10dd78e6bkC71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p2p4/1p6/3QP3/1B6/PPP2PPP/RNB1K2R b KQkq - 0 8w -+ b76fb10539466156VC71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p2p4/1p6/3pP3/1B6/PPP2PPP/RNBQK2R w KQkq - 0 8y -+ 4f2f92ad686e771cC71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p2p4/1p2p3/3NP3/1B6/PPP2PPP/RNBQK2R b KQkq - 0 7{ -+aa8dab2f5d9f6407C71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p2p4/1p2p3/3nP3/1B3N2/PPP2PPP/RNBQK2R w KQkq - 0 7| -+64d00783a4fd5f1bC71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p1np4/1p2p3/3PP3/1B3N2/PPP2PPP/RNBQK2R b KQkq - 0 6| -+a1e52829b5347259YC71enRuy LopezNoah's Ark Trapr1bqkbnr/2p2ppp/p1np4/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQK2R w KQkq - 0 6 - Sc9fdfd111a1de8f4C77enRuy LopezWormald Attack, Grünfeld Variationr2qk2r/2p1bppp/p1np1n2/1p2p3/3PP1b1/1BP2N2/PP2QPPP/RNB1K2R w KQkq - 1 9 -Scb2e37235d98e61eC77enRuy LopezWormald Attack, Grünfeld Variationr1bqk2r/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP2QPPP/RNB1K2R b KQkq - 0 8 -Sbdf4cfbb8de8e998C77enRuy LopezWormald Attack, Grünfeld Variationr1bqk2r/2p1bppp/p1np1n2/1p2p3/3PP3/1B3N2/PPP1QPPP/RNB1K2R w KQkq - 0 8 -S844e59da5f90a0f5C77enRuy LopezWormald Attack, Grünfeld Variationr1bqk2r/2ppbppp/p1n2n2/1p2p3/3PP3/1B3N2/PPP1QPPP/RNB1K2R b KQkq - 0 7 -S417b76704e598db7C77enRuy LopezWormald Attack, Grünfeld Variationr1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPPQPPP/RNB1K2R w KQkq - 2 7 ?tae(x]? C % % % % % % % % % %? L -M 668367680cef8cb6C60enRuy LopezCozio Defense, Tartakower Gambitr1bqk2r/ppppnpbp/2n3p1/1B6/3NP3/4B3/PPP2PPP/RN1QK2R w KQkq - 3 7 K -M58ccdbd5b766070b C60enRuy LopezCozio Defense, Tartakower Gambitr1bqk1nr/pppp1pbp/2n3p1/1B6/3NP3/4B3/PPP2PPP/RN1QK2R b KQkq - 2 6 J -M 2bc46039365c1c85C60enRuy LopezCozio Defense, Tartakower Gambitr1bqk1nr/pppp1pbp/2n3p1/1B6/3NP3/8/PPP2PPP/RNBQK2R w KQkq - 1 6 I -M 9b785d8fcd1bd72f/C60enRuy LopezCozio Defense, Tartakower Gambitr1bqkbnr/pppp1p1p/2n3p1/1B6/3NP3/8/PPP2PPP/RNBQK2R b KQkq - 0 5 H - Mfcec00d2dc2a4501C60enRuy LopezCozio Defense, Tartakower Gambitr1bqkbnr/pppp1p1p/2n3p1/1B6/3pP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 G -M67920a5018515114C60enRuy LopezCozio Defense, Tartakower Gambitr1bqkbnr/pppp1p1p/2n3p1/1B2p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4@ - {78d0c9f59aa25117C67enRuy LopezBerlin Defense, l'Hermet Variation, Berlin Wall Defenser1bk1b1r/ppp2ppp/2p5/4Pn2/8/5N2/PPP2PPP/RNB2RK1 w - - 0 9? -{f553a8d3106483deC67enRuy LopezBerlin Defense, l'Hermet Variation, Berlin Wall Defenser1bQkb1r/ppp2ppp/2p5/4Pn2/8/5N2/PPP2PPP/RNB2RK1 b kq - 0 8> -{9fe39e1e6381380d C67enRuy LopezBerlin Defense, l'Hermet Variation, Berlin Wall Defenser1bqkb1r/ppp2ppp/2p5/4Pn2/8/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 8 P - M3aceffe646397602C60enRuy LopezCozio Defense, Tartakower Gambitr1bq1rk1/ppp1npbp/2n3p1/1B1p4/3NP3/2N1B3/PPPQ1PPP/R3K2R w KQ - 0 9 O -M bfa4ddf2daed3824$C60enRuy LopezCozio Defense, Tartakower Gambitr1bq1rk1/ppppnpbp/2n3p1/1B6/3NP3/2N1B3/PPPQ1PPP/R3K2R b KQ - 6 8 N -M 97bc927d1b54e784C60enRuy LopezCozio Defense, Tartakower Gambitr1bq1rk1/ppppnpbp/2n3p1/1B6/3NP3/2N1B3/PPP2PPP/R2QK2R w KQ - 5 8 M -M9d147fcace0d0e6foC60enRuy LopezCozio Defense, Tartakower Gambitr1bqk2r/ppppnpbp/2n3p1/1B6/3NP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 4 70 - Mefa92e906c77b14dMC67enRuy LopezBerlin Defense, Cordel Variationr1bqk2r/p1ppbppp/2p5/4Pn2/8/5N2/PPP1QPPP/RNB2RK1 w kq - 1 9/ -M395ab6458080b18cC67enRuy LopezBerlin Defense, Cordel Variationr1bqk2r/p1ppbppp/2pn4/4P3/8/5N2/PPP1QPPP/RNB2RK1 b kq - 0 8. -Ma5c7490788b506fcC67enRuy LopezBerlin Defense, Cordel Variationr1bqk2r/p1ppbppp/2pn4/4p3/3P4/5N2/PPP1QPPP/RNB2RK1 w kq - 0 8 T  { a M 6 0 -/ee605864393d97761aC48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bqkb1r/pppp1ppp/5n2/4p3/4P3/2N2B2/PPPP1PPP/R1BQK2R b KQkq - 0 6/ -/e8a9bcbeb11923873sC48enFour Knights GameRubinstein Countergambit, Maróczy Variationr1bqkb1r/pppp1ppp/5n2/4p3/4P3/2N2n2/PPPPBPPP/R1BQK2R w KQkq - 0 6 > % - /568aeb9761c2ae049IC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/2n2n2/1B2P3/1b1P1P2/2N5/PPP3PP/R1BQ1RK1 w - - 1 10$ -/5fd619b5827e07c46FC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/2nb1n2/1B2P3/3P1P2/2N5/PPP3PP/R1BQ1RK1 b - - 0 9# -/5 9c188da523fe5a22"C48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/2nb1n2/1B6/3PPP2/2N5/PPP3PP/R1BQ1RK1 w - - 1 9" -/56c4590eeec117042BC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/3b1n2/1B2n3/3PPP2/2N5/PPP3PP/R1BQ1RK1 b - - 0 8! -/59153ede3f5804dcbC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/3b1n2/1B2n3/3PP3/2N5/PPP2PPP/R1BQ1RK1 w - - 1 8 -/5 60c0e2904f8ff365eC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/5n2/1Bb1n3/3PP3/2N5/PPP2PPP/R1BQ1RK1 b - - 0 7 -/5 a5f5cd3a5e46de27'C48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/5n2/1Bb1n3/4P3/2N5/PPPP1PPP/R1BQ1RK1 w - - 0 7 -/58ce97cd5da89501cC48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/2n2n2/1Bb1N3/4P3/2N5/PPPP1PPP/R1BQ1RK1 b - - 0 6  -/532aa882e7e97f52a*C48enFour Knights GameBardeleben Variationr1bq1rk1/pppp1ppp/2n2n2/1Bb1p3/4P3/2N2N2/PPPP1PPP/R1BQ1RK1 w - - 8 6  -/538026599abce1cc1C48enFour Knights GameBardeleben Variationr1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/2N2N2/PPPP1PPP/R1BQ1RK1 b kq - 7 5z - %% 65a7d81aa25da88bC51enItalian GameEvans Gambitr2qk1nr/ppp2ppp/1bnp4/8/2BPP1b1/2N2N2/P4PPP/R1BQ1RK1 w kq - 3 10 Nzt u q nqss _NNNNNjjj# - %uf33de9b1cb44e4dbC42enRussian GameClassical Attack, Marshall Variation, Chinese Gambitrn1q1rk1/pp3ppp/2pb4/3p4/2PPn1b1/3B1N2/PP3PPP/RNBQR1K1 w - - 2 10{m - #17002b20485d4946ajC44enScotch GameHanneken Variationr1bq1rk1/pppp1ppp/5n2/4n1N1/1bB5/8/PB3PPP/RN1Q1RK1 w - - 0 10}l -#1 9e4f9dde559c378eC44enScotch GameHanneken Variationr1bq1rk1/pppp1ppp/2n2n2/4P1N1/1bB5/8/PB3PPP/RN1Q1RK1 b - - 0 9}k -#1 ff368b23518211eaC44enScotch GameHanneken Variationr1bq1rk1/pppp1ppp/2n2n2/6N1/1bB1P3/8/PB3PPP/RN1Q1RK1 w - - 3 9{j - #1 f59e669484dbf801C44enScotch GameHanneken Variationr1bqk2r/pppp1ppp/2n2n2/6N1/1bB1P3/8/PB3PPP/RN1Q1RK1 b kq - 2 8}i -#1 a34c87412d1700a5C44enScotch GameHanneken Variationr1bqk2r/pppp1ppp/2n2n2/8/1bB1P3/5N2/PB3PPP/RN1Q1RK1 w kq - 1 8{h -#1f8a2b3b480ed41333C44enScotch GameHanneken Variationr1bqk1nr/pppp1ppp/2n5/8/1bB1P3/5N2/PB3PPP/RN1Q1RK1 b kq - 0 7|g -#122d6619383de3df1C44enScotch GameHanneken Variationr1bqk1nr/pppp1ppp/2n5/8/1bB1P3/5N2/Pp3PPP/RNBQ1RK1 w kq - 0 7}f -#1 4504725aae97144bKC44enScotch GameHanneken Variationr1bqk1nr/pppp1ppp/2n5/8/1bB1P3/2p2N2/PP3PPP/RNBQ1RK1 b kq - 1 6 q~ -%u f1ee23838cc1ea311C42enRussian GameClassical Attack, Marshall Variation, Chinese Gambitrnbq1rk1/pp3ppp/2pb4/3p4/2PPn3/3B1N2/PP3PPP/RNBQR1K1 b - - 1 9[ - #;bd82186550aa539aC44enScotch GameCochrane-Shumov Defenser1bq3r/ppp2k1p/2n3p1/2Qp4/3pP3/8/PPP2PPP/RNB1K2R w KQ - 0 10Z -#;38e83a71cc7e1dbcC44enScotch GameCochrane-Shumov Defenser1bq3r/pppp1k1p/2n3p1/2Q5/3pP3/8/PPP2PPP/RNB1K2R b KQ - 0 9Y +#;5863fa6eff874f5C44enScotch GameCochrane-Shumov Defenser1bq3r/pppp1k1p/2n3p1/2b4Q/3pP3/8/PPP2PPP/RNB1K2R w KQ - 0 9~X -#;ec326cfd9477e6beC44enScotch GameCochrane-Shumov Defenser1bq3r/pppp1kpp/2n5/2b4Q/3pP3/8/PPP2PPP/RNB1K2R b KQ - 1 8{W -#;4c3f8fdbb81ac022"C44enScotch GameCochrane-Shumov Defenser1bq3r/pppp1kpp/2n5/2b5/3pP3/8/PPP2PPP/RNBQK2R w KQ - 0 8V -#;3bfd0a91606ef06dmC44enScotch GameCochrane-Shumov Defenser1bqk2r/pppp1Bpp/2n5/2b5/3pP3/8/PPP2PPP/RNBQK2R b KQkq - 0 7U -#;30e2e1e541c57e40@C44enScotch GameCochrane-Shumov Defenser1bqk2r/pppp1npp/2n5/2b5/2BpP3/8/PPP2PPP/RNBQK2R w KQkq - 0 7T -#; 407b796c66c2998bC44enScotch GameCochrane-Shumov Defenser1bqk2r/pppp1Npp/2n4n/2b5/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 0 6 h  _ : sO# - )O5496542d25732fc9C11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bq1rk1/pp1n2pp/2n1pp2/2bpP3/5PQ1/P1N2N2/1PP3PP/R1B1KB1R w KQ - 0 10" -)O98c352641f9838b6C11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bq1rk1/pp1n1ppp/2n1p3/2bpP3/5PQ1/P1N2N2/1PP3PP/R1B1KB1R b KQ - 3 9! -)O43a7be92777e598bC11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bq1rk1/pp1n1ppp/2n1p3/2bpP3/5PQ1/P1N5/1PP3PP/R1B1KBNR w KQ - 2 9 -)O490f5325a227b060`C11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bqk2r/pp1n1ppp/2n1p3/2bpP3/5PQ1/P1N5/1PP3PP/R1B1KBNR b KQkq - 1 8 -)O1cb5218b74c0ea6dmC11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bqk2r/pp1n1ppp/2n1p3/2bpP3/5P2/P1N5/1PP3PP/R1BQKBNR w KQkq - 0 8 -)O88a63a64f3f314a5C11enFrench DefenseSteinitz, Brodsky-Jones Variationr1bqkb1r/pp1n1ppp/2n1p3/2PpP3/5P2/P1N5/1PP3PP/R1BQKBNR b KQkq - 0 7% -  bf10ebaf1a57c78bC39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen-Cordel Gambitrnbqk2r/ppp2p1p/3b4/3PN3/2BP1npP/8/PPP3P1/RN1QK2R w KQkq - 0 10% - c1b57c803ca843a6C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen-Cordel Gambitrnbqk2r/ppp2p1p/3b4/3PN2n/2BP1BpP/8/PPP3P1/RN1QK2R b KQkq - 0 9# -  61e49aade7ccd301C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen-Cordel Gambitrnbqk2r/ppp2p1p/3b4/3PN2n/2BP1ppP/8/PPP3P1/RNBQK2R w KQkq - 1 9% - f9070d69c614e65b[C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen-Cordel Gambitrnbqk2r/ppp2p1p/3b1n2/3PN3/2BP1ppP/8/PPP3P1/RNBQK2R b KQkq - 0 8Q ~_ -  z J-K\~~~~~~~~~t - 65c88db3a670b068hC34enKing's Gambit Accepted, Schallopp Defense, Tashkent Attackrnbqkb1r/pppp1ppp/8/4P2n/5p2/5N2/PPPP2PP/RNBQKB1R w KQkq - 1 5s - fd2b1a7787a885322C34enKing's Gambit Accepted, Schallopp Defense, Tashkent Attackrnbqkb1r/pppp1ppp/5n2/4P3/5p2/5N2/PPPP2PP/RNBQKB1R b KQkq - 0 4l - 9? 94d169d8686ce5d3C35enKing's Gambit AcceptedCunningham, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1Pp1b/5NP1/PPPP3P/RNBQK2R b KQkq - 0 5k -9? b837d29988bb3debC35enKing's Gambit AcceptedCunningham, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1Pp1b/5N2/PPPP2PP/RNBQK2R w KQkq - 4 5$c -  7dbb932be85c32beC37enKing's Gambit Accepted, Rosentreter Gambit, Sörensen Gambitrnbqkbnr/pppp1p1p/8/8/3PPpp1/2N2N2/PPP3PP/R1BQKB1R b KQkq - 1 5b - 862c8b892abeb067gC37enKing's Gambit Accepted, Rosentreter Gambit, Sörensen Gambitrnbqkbnr/pppp1p1p/8/8/3PPpp1/5N2/PPP3PP/RNBQKB1R w KQkq - 0 5 eBZ - m 267d6da4f1da20c0C37enKing's Gambit Accepted, Rosentreter-Testa Gambitrnbqkbnr/pppp1p1p/8/8/3PPBp1/5N2/PPP3PP/RN1QKB1R b KQkq - 0 5Q - 9-5b1454467133d511C37enKing's Gambit AcceptedSörensen Gambitrnbqkbnr/pppp1p1p/8/4N3/3PPpp1/8/PPP3PP/RNBQKB1R b KQkq - 1 5 H - ] db3d08a9d1d6c95aZC37enKing's Gambit Accepted, McDonnell Gambitrnbqkbnr/pppp1p1p/8/8/2B1Ppp1/2N2N2/PPPP2PP/R1BQK2R b KQkq - 1 5G -] 20aa100b13344b83C37enKing's Gambit Accepted, McDonnell Gambitrnbqkbnr/pppp1p1p/8/8/2B1Ppp1/5N2/PPPP2PP/RNBQK2R w KQkq - 0 5 G? - U 81194027fbd5e9f6C37enKing's Gambit Accepted, Lolli Gambitrnbqkbnr/pppp1B1p/8/8/4Ppp1/5N2/PPPP2PP/RNBQK2R b KQkq - 0 5 6 - 95e59f3fa102fd66c1C37enKing's Gambit AcceptedGhulam-Kassim Gambitrnbqkbnr/pppp1p1p/8/8/2BPPpp1/5N2/PPP3PP/RNBQK2R b KQkq - 0 5- - { 5edf6b3f6fc79093C37enKing's Gambit Accepted, Muzio Gambit, Wild Muzio Gambitrnbqkbnr/pppp1p1p/8/8/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1 b kq - 1 5$ - W fd92cfc448b92ef5C37enKing's Gambit Accepted, Salvio Gambitrnbqkbnr/pppp1p1p/8/4N3/2B1Ppp1/8/PPPP2PP/RNBQK2R b KQkq - 1 5  - _ dbaac18efb5d67f6C37enKing's Gambit Accepted, Australian Gambitrnbqkbnr/pppp1p1p/8/8/2B1PppP/5N2/PPPP2P1/RNBQK2R b KQkq h3 0 5 - [ ea853a08150fdb56VC38enKing's Gambit Accepted, Hanstein Gambitrnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQ1RK1 b kq - 3 5t + [ 853dd15c2c379388C38enKing's Gambit Accepted, Philidor Gambitrnbqk1nr/pppp1pbp/8/6p1/2B1Pp1P/5N2/PPPP2P1/RNBQK2R b KQkq - 0 5 - [ 8968d9df39841cffC39enKing's Gambit Accepted, Allgaier Gambitrnbqkbnr/pppp1p1p/8/6N1/4PppP/8/PPPP2P1/RNBQKB1R b KQkq - 1 5 -[ dfba380a9048e45b[C39enKing's Gambit Accepted, Allgaier Gambitrnbqkbnr/pppp1p1p/8/8/4PppP/5N2/PPPP2P1/RNBQKB1R w KQkq - 0 5 ( \ * = `11111}} ` ` `w W - -G 9eb1c566eb2c084fOB65enSicilian DefenseRichter-Rauzer, Rauzer Attackr1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10E + -i94ca2f66f3ef00a B68enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variationr2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10   - )Wd0b9e30ca64e3153SA76enBenoni DefenseClassical Variation, Czerniak Defensernbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10 - -S a945fba8bdfeec41AB21enSicilian DefenseSmith-Morra Gambit, Chicago Defense2bqkbnr/r4ppp/p1npp3/1p6/4P3/1BN2N2/PP2QPPP/R1B2RK1 w k - 2 10 +-S 9ceb1e40105aa9dB21enSicilian DefenseSmith-Morra Gambit, Chicago Defenser1bqkbnr/5ppp/p1npp3/1p6/4P3/1BN2N2/PP2QPPP/R1B2RK1 b kq - 1 9{ - -s6ff42c1ae54107cdB22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/8/8/3n4/2N2P2/PP3P1P/R1B1KB1R w KQkq - 0 10 z --s2cc62d1bca3198daB22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/2n5/8/3Q4/2N2P2/PP3P1P/R1B1KB1R b KQkq - 0 9y --s66efff4d4d5eab79yB22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/2n5/8/3q4/2N2P2/PP3P1P/R1BQKB1R w KQkq - 0 9!x --s1051bda4c1690c41AB22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/2n5/3q4/3P4/2N2P2/PP3P1P/R1BQKB1R b KQkq - 0 8!w --s3a2bdf95c3ab9e58XB22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/2n5/3q4/3P4/2N2b2/PP3PPP/R1BQKB1R w KQkq - 0 8#v --s 8b5eed42b98a3428(B22enSicilian DefenseAlapin Variation, Barmen Defense, Endgame Variationr3kbnr/pp2pppp/2n5/3q4/3P2b1/2N2N2/PP3PPP/R1BQKB1R b KQkq - 4 7 i - -g370b9c31a3fddc61aB64enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bq1rk1/pp2bppp/2np1n2/4p1B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10 { < s aN>UA. -+G1376ce9a280e59aaE08enCatalan OpeningClosed, Zagoryansky Variationr1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNBR2K1 w - - 0 9 -+G781f878ad68dee311E08enCatalan OpeningClosed, Zagoryansky Variationr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNBR2K1 b - - 1 8~ - Q 2839b7dbeff5018aE14enQueen's Indian, Averbakh Variationrn1q1rk1/pb1pbppp/1p2pn2/8/2PN4/1P1BP3/PB3PPP/RN1Q1RK1 b - - 0 9} -Q 4fadea86fec493a4E14enQueen's Indian, Averbakh Variationrn1q1rk1/pb1pbppp/1p2pn2/8/2Pp4/1P1BPN2/PB3PPP/RN1Q1RK1 w - - 0 9| -Q 10b350b38330fa62bE14enQueen's Indian, Averbakh Variationrn1q1rk1/pb1pbppp/1p2pn2/2p5/2PP4/1P1BPN2/PB3PPP/RN1Q1RK1 b - - 0 8{ -Q 9c90cf97c03f5165eE14enQueen's Indian, Averbakh Variationrn1q1rk1/pb1pbppp/1p2pn2/2p5/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 w - - 2 8z -Q 2c008713b26dfefeE14enQueen's Indian, Averbakh Variationrnbq1rk1/p2pbppp/1p2pn2/2p5/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 b - - 1 7y -Q 5275fc27ce9e25eeE14enQueen's Indian, Averbakh Variationrnbq1rk1/p2pbppp/1p2pn2/2p5/3P4/1P1BPN2/PBP2PPP/RN1QK2R w KQ - 0 7\ - 5Ic1bdc3626bcc06b2E23enNimzo-Indian DefenseSpielmann, Stahlberg Variationr1bqk2r/pp1p2pp/2n1p3/2n2p2/1bP5/2N2NP1/PPQBPP1P/R3KB1R b KQkq - 0 9[ -5Ied5b78238b1bde8aE23enNimzo-Indian DefenseSpielmann, Stahlberg Variationr1bqk2r/pp1p2pp/2n1p3/2n2p2/1bP5/2N2N2/PPQBPPPP/R3KB1R w KQkq - 0 9 (x -Q 391cb537301d9275uE14enQueen's Indian, Averbakh Variationrnbq1rk1/pp1pbppp/4pn2/2p5/3P4/1P1BPN2/PBP2PPP/RN1QK2R b KQ - 2 6w -Q 6c111495099d5006E14enQueen's Indian, Averbakh Variationrnbq1rk1/pp1pbppp/4pn2/2p5/3P4/1P2PN2/PBP2PPP/RN1QKB1R w KQ - 1 6v -Q 66b9f922dcc4b9edE14enQueen's Indian, Averbakh Variationrnbqk2r/pp1pbppp/4pn2/2p5/3P4/1P2PN2/PBP2PPP/RN1QKB1R b KQkq - 0 5u -Q a38cd688cd0d94afE14enQueen's Indian, Averbakh Variationrnbqk2r/pp1pbppp/4pn2/2p5/8/1P2PN2/PBPP1PPP/RN1QKB1R w KQkq - 1 5t -Q b740a56707a6383e>E14enQueen's Indian, Averbakh Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/8/1P2PN2/PBPP1PPP/RN1QKB1R b KQkq - 0 4s -Q 1a6de7d523f9b09aE14enQueen's Indian, Averbakh Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/8/1P3N2/PBPPPPPP/RN1QKB1R w KQkq - 0 4r -Q 6c1a15e43bdb20c8E14enQueen's Indian, Averbakh Variationrnbqkb1r/pp1ppppp/5n2/2p5/8/1P3N2/PBPPPPPP/RN1QKB1R b KQkq - 2 3q -Q ac66ffe1f647bc27'E14enQueen's Indian, Averbakh Variationrnbqkb1r/pp1ppppp/5n2/2p5/8/1P3N2/P1PPPPPP/RNBQKB1R w KQkq - 1 3p -Q f788cb145bbdfdb1E14enQueen's Indian, Averbakh Variationrnbqkbnr/pp1ppppp/8/2p5/8/1P3N2/P1PPPPPP/RNBQKB1R b KQkq - 0 2N,m - 9w 2910a3204606afc5E19enQueen's Indian DefenseClassical Variation, Traditional Variation, Main Linern1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 9,l - 9w 1921ebd65ef08941AE19enQueen's Indian DefenseClassical Variation, Traditional Variation, Main Linern1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 9-k - 9waba85640b9fe7f4cLE19enQueen's Indian DefenseClassical Variation, Traditional Variation, Main Linern1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 8-j - 9w1ab1245dab284328(E19enQueen's Indian DefenseClassical Variation, Traditional Variation, Main Linern1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8  eSC7(- - )5fd7c7502e9aabb55UA62enBenoni DefenseFianchetto Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 7, - )5488c567fa447632c,A62enBenoni DefenseFianchetto Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 7+ - )5 a1380524dfc8f167gA62enBenoni DefenseFianchetto Variationrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 1 6* - )5 5aaf1d861d2a73beA62enBenoni DefenseFianchetto Variationrnbqkb1r/pp3ppp/3p1n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 6) - )5 63158be7cf523ad3A62enBenoni DefenseFianchetto Variationrnbqkb1r/pp1p1ppp/5n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 5( - )5 6d3f102a6d9c2eceA62enBenoni DefenseFianchetto Variationrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 5' - )5522bc9ee7739ee05A62enBenoni DefenseFianchetto Variationrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 4& - )5e8238abdee1f7858XA62enBenoni DefenseFianchetto Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4n - )/ 3c0ba18cf07978ebA68enBenoni DefenseFour Pawns Attackrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 9 - )/36a34c3b25209100A68enBenoni DefenseFour Pawns Attackrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8 y - ) b29d5f78e8cd0fc1A72enBenoni DefenseClassicalrnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9 4xj @ iN4 0@ + /63022f500ee333a:A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschr1bq1rk1/pp2ppbp/2n2np1/3p4/2PP4/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 9/? -/ adddfa17117f96399A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp2ppbp/5np1/3p4/2PP4/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 8/> -/ d3a881236d8c4d29)A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp2ppbp/5np1/3p4/2PP4/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 8.= -/ 56c2a337f158030fA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp1pppbp/5np1/8/2PP4/2N2N2/PP2BPPP/R1BQK2R b KQ - 0 7/< -/ 4052cfbdb1f1c81dA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp1pppbp/5np1/8/2Pp4/2N1PN2/PP2BPPP/R1BQK2R w KQ - 0 72; -/1f4c7588cc05a1dbA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp1pppbp/5np1/2p5/2PP4/2N1PN2/PP2BPPP/R1BQK2R b KQ - 5 61: -/6cccf671cd20eb78xA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbq1rk1/pp1pppbp/5np1/2p5/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 4 639 -/66641bc618790293A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbqk2r/pp1pppbp/5np1/2p5/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 3 528 -/bd00f730709f63aeA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbqk2r/pp1pppbp/5np1/2p5/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 2 517 +/dbcca868bd8a804A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbqkb1r/pp1ppp1p/5np1/2p5/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 1 416 -/ f62bd224493a2addA56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbqkb1r/pp1ppp1p/5np1/2p5/2PP4/4P3/PP3PPP/RNBQKBNR w KQkq - 0 405 -/ 1f9f817f32b5b896A56enGrünfeld DefenseThree Knights Variation, Burille Variation, Reversed Tarraschrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/4P3/PP3PPP/RNBQKBNR b KQkq - 0 30 - )5 9c0c49f5af52f829)A62enBenoni DefenseFianchetto Variationrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 4 9/ - )5 96a4a4427a0b11c2A62enBenoni DefenseFianchetto Variationrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 8. - )5 4dc048b412ed70ffA62enBenoni DefenseFianchetto Variationrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 8 CD  Q i w-PPd#p - 7e a1d1c5c957ffd4d8A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationr1bq1rk1/pppn1pbp/5np1/4p3/2P5/2N1PN2/PP2BPPP/R1BQ1RK1 w - - 0 9$o -7e9bf4c526e6b19a51QA10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationr1bq1rk1/pppn1pbp/3p1np1/4P3/2P5/2N1PN2/PP2BPPP/R1BQ1RK1 b - - 0 8  + -7se43b7dd4b2bee0b9E94enKing's Indian DefenseOrthodox Variation, Positional Defense, Closed Liner1bq1rk1/pppnppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 7+ -7s9a4e06e0ce4d3ba9E94enKing's Indian DefenseOrthodox Variation, Positional Defense, Closed Liner1bq1rk1/pppnppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 7| - ; eaf77b15a6f3b39bE95enKing's Indian, Orthodoxr1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 8 h -7e 51d9cb295a8181388A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbq1rk1/ppppppbp/5np1/8/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5"g -7e 5b71269e8fd868d3A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbqk2r/ppppppbp/5np1/8/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4#f -7e 9e4409349e114591A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbqk2r/ppppppbp/5np1/8/2P5/2N1P3/PP1P1PPP/R1BQKBNR w KQkq - 1 4"e -7e c5aa3dc133eb0407A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbqk1nr/ppppppbp/6p1/8/2P5/2N1P3/PP1P1PPP/R1BQKBNR b KQkq - 0 3!d -7e 68877f7317b48ca3A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbqk1nr/ppppppbp/6p1/8/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3 c -7e d83b42c5ecf34709 A10enKing's Indian DefenseSemi-Classical Variation, Exchange Variationrnbqkbnr/pppppp1p/6p1/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2D:` - +53eae25ce8986e93A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/1p3pbp/p1pp1np1/4p3/2P1P3/2NP2P1/PP2NPBP/R1BQ1RK1 w - - 0 98_ -+811d13af0fb8964fOA10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/pp3pbp/2pp1np1/4p3/2P1P3/2NP2P1/PP2NPBP/R1BQ1RK1 b - - 0 89^ -+2fb9d07a4b282d9bA10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/pp3pbp/2pp1np1/4p3/2P1P3/2N3P1/PP1PNPBP/R1BQ1RK1 w - - 0 88] -+bdc33d953ce8fe20 A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/ppp2pbp/3p1np1/4p3/2P1P3/2N3P1/PP1PNPBP/R1BQ1RK1 b - - 1 78\ -+c3b646a1401b25300A10enEnglish OpeningKing's English Variation, Botvinnik System, Prickly Pawn Pass Systemrnbq1rk1/ppp2pbp/3p1np1/4p3/2P1P3/2N3P1/PP1PNPBP/R1BQK2R w KQ - 0 7 SCX ]#q T -7_ a0d73e0dc22d249fE67enKing's Indian DefenseFianchetto Variation, Hungarian Variationrnbq1rk1/ppppppbp/5np1/8/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQ - 3 5S -7_ aa7fd3ba1774cd74tE67enKing's Indian DefenseFianchetto Variation, Hungarian Variationrnbqk2r/ppppppbp/5np1/8/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 2 4R -7_ 1f8ff0c75a99150d E67enKing's Indian DefenseFianchetto Variation, Hungarian Variationrnbqk2r/ppppppbp/5np1/8/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 1 4!Q -7_af33cd71a1dedea7E67enKing's Indian DefenseFianchetto Variation, Hungarian Variationrnbqkb1r/pppppp1p/5np1/8/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3P -7_ 83d576304109069fE67enKing's Indian DefenseFianchetto Variation, Hungarian Variationrnbqkb1r/pppppp1p/5np1/8/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3mn -7[ 3f7c0493f09df6e9E62enKing's Indian DefenseFianchetto Variation, Simagin Variationrnbqk2r/ppppppbp/5np1/8/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 1 4h - 7W80533915e338a742BE63enKing's Indian DefenseFianchetto Variation, Panno Variationr1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8#L - 7a40d2631366c4ef67gE67enKing's Indian DefenseFianchetto Variation, Classical Fianchettor1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8o -7[ 8a8c27eebd702e90E62enKing's Indian DefenseFianchetto Variation, Simagin Variationrnbqk2r/ppppppbp/5np1/8/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 2 4 J -7a 313d73fb37c39588E67enKing's Indian DefenseFianchetto Variation, Classical Fianchettor1bq1rk1/pppnppbp/3p1np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 7jr -7[ c7eb270cc6a25506E62enKing's Indian DefenseFianchetto Variation, Simagin Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2P5/5NP1/PP1PPPBP/RNBQ1RK1 w - - 0 6p -7[8024ca596829c77b{E62enKing's Indian DefenseFianchetto Variation, Simagin Variationrnbq1rk1/ppppppbp/5np1/8/2P5/5NP1/PP1PPPBP/RNBQK2R w KQ - 3 5"Z - 7_185d9aaa1201ef8dE67enKing's Indian DefenseFianchetto Variation, Hungarian Variationr1bq1rk1/1ppnppbp/p2p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 Y -7_caaa6b59f5211751QE67enKing's Indian DefenseFianchetto Variation, Hungarian Variationr1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 3 7(> - 7m4071cf8dc60ffc377E73enKing's Indian DefenseAverbakh Variation, Modern Defense, Burgess Liner1bq1rk1/pp2ppbp/n1pp1np1/6B1/2PPP3/2N5/PP1QBPPP/R3K1NR w KQ - 0 8)= -7md20b2262b1cf2f8cE73enKing's Indian DefenseAverbakh Variation, Modern Defense, Burgess Liner1bq1rk1/ppp1ppbp/n2p1np1/6B1/2PPP3/2N5/PP1QBPPP/R3K1NR b KQ - 5 7 ryqjc\UNG@92+$|tld\TLD<4,%  y q i a Y Q I A : 3 , %     } v o h a Z S L E > 7 0 (     y r k d ] V O H A : 3 , %     ~ v n f ^ V N F > 6 . &  r    | u n g ` Y Q I A 9 1 ) !   xqjc\UNG@92+$yqiaYQIA91)! }vohaZSLE>70)" {skc[SKC;4-& ~wpib[SKC;3+# zCDCD>CDC<:C1C,C+C+C*|C)HCCJCC iCCQCBBGB*BBvBYBaB BBBBLB!BBmB7B}B}B|ByBwJBsBqBomBnBnBb]B`XB_qB_aB^)BY7BVBUBQB=B9B+NB&B$B B6BGBB"BBAaAAApA%AAABAAAATAA_A'AAA6AAwAAAAfA AAA-A5AA~A~A~ A}AyAxAqAiAeAdA]AZaAYqAXAT1AOGAIAAIA@6N@2*@+@'@%@$@!F@@d@@U@]@ h??F???u?4??n?b? ?o?f?m??D?8?}?|-?v?uA?nA?k?f?f?f?c?Yi?Y#?V2?R0?O?O8?N/?M???:?.u?+??? x?>>}>>>>>W>[>N>>C>>>a>>e>->1>$>~^>~>z>y>yN>q>p>o>oy>la>d>a>]!>[>XW>W>O>O3>I>>>;>6>5V>>>>>t>> -==t=======q=R=I=:=G==T=====G=(===~=|c=z=ym=v=t=r=r=p9=o=h4=d@=c=]q=Y=X=W=SX=O=Oy=O[=K=E=<[=9!=6 =*=)='O=&b=#=##="= ==<=7= <<<<<m<u<<n<i<<C<~K<{=;; g;~;:#:R::~:}<:n:g:a:a:_:\;=?<A>=  Ku] n ' LLLLLLLUm 1 - ;S41f8fc120f3aaac5D65enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R b K - 0 9 - /U 814ca588eccd530eD99enGrünfeld DefenseRussian Variation, Smyslov Variationrn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9 - /U 29833ed5c671a23b;D99enGrünfeld DefenseRussian Variation, Smyslov Variationrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R w KQ - 3 9 - /U d0c43d736bbdabceD99enGrünfeld DefenseRussian Variation, Smyslov Variationrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R b KQ - 2 8 - +G78bfb076459d8c64dE08enCatalan OpeningClosed, Zagoryansky Variationr1bq1rk1/p2nbppp/1pp1pn2/3p4/P1PP4/5NP1/1PQ1PPBP/RNBR2K1 b - - 0 9d - ;W b11ca36550aa08e5D63enQueen's Gambit DeclinedOrthodox Defense, Pillsbury Variationr1bq1rk1/p1pnbppp/1p3n2/3p2B1/3P4/2NBPN2/PP3PPP/2RQK2R b K - 1 9c -;We41102c7692aca96D63enQueen's Gambit DeclinedOrthodox Defense, Pillsbury Variationr1bq1rk1/p1pnbppp/1p3n2/3p2B1/3P4/2N1PN2/PP3PPP/2RQKB1R w K - 0 9b -;Wdb05db03738f0a5d]D63enQueen's Gambit DeclinedOrthodox Defense, Pillsbury Variationr1bq1rk1/p1pnbppp/1p2pn2/3P2B1/3P4/2N1PN2/PP3PPP/2RQKB1R b K - 0 8 a -;Wd52f40ced1411e40@D63enQueen's Gambit DeclinedOrthodox Defense, Pillsbury Variationr1bq1rk1/p1pnbppp/1p2pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R w K - 0 8 S - ;Yd7cfd3680cbe5915D63enQueen's Gambit DeclinedOrthodox Defense, Capablanca Variationr1bq1rk1/p1pnbppp/1p3n2/1B1p2B1/3P4/2N1PN2/PP3PPP/2RQK2R b K - 1 9"B - ;S844e56f9e4b83098D64enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/P1N1PN2/1PQ2PPP/2R1KB1R b K - 1 9!A -;S355724e4f66e0cfcD64enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/P1N1PN2/1P3PPP/2RQKB1R w K - 0 9@ -;Se7a0d517114ef420 D64enQueen's Gambit DeclinedOrthodox Defense, Rubinstein Attackr1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/P1N1PN2/1P3PPP/2RQKB1R b K - 0 8 d yk A^yyyyyyyyy  -5a b6ecea7264ca4aa7B01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrnb1kb1r/pp2pppp/2pq1n2/8/2BP4/2N5/PPP1NPPP/R1BQK2R b KQkq - 1 6 -5a a24801bd4ce14759YB01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrnb1kb1r/pp2pppp/2pq1n2/8/2BP4/2N5/PPP2PPP/R1BQK1NR w KQkq - 0 6  -5a 3032ec523b2194e2B01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrnb1kb1r/ppp1pppp/3q1n2/8/2BP4/2N5/PPP2PPP/R1BQK1NR b KQkq - 2 5 #! -5aeea1657d4a4fa949IB01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrn2kb1r/pp2pppp/2pq1n2/5b2/2BP1B2/2N5/PPP1NPPP/R2QK2R b KQkq - 3 7  -5a35f583fcd32f432a*B01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrn2kb1r/pp2pppp/2pq1n2/5b2/2BP4/2N5/PPP1NPPP/R1BQK2R w KQkq - 2 7 - %e12253a7e1d60d3cfB07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pp1n1ppp/2p2n2/3p4/2BQPP2/2N2N2/PPP3PP/R1B1K2R w KQkq - 0 8 -%e5623a8a1fceb518dB07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pp1n1ppp/2pp1n2/8/2BQPP2/2N2N2/PPP3PP/R1B1K2R b KQkq - 1 7 -%e35901c89d4a8872b+B07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pp1n1ppp/2pp1n2/8/3QPP2/2N2N2/PPP3PP/R1B1KB1R w KQkq - 0 7 -%ea7eaf166a3685490B07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pppn1ppp/3p1n2/8/3QPP2/2N2N2/PPP3PP/R1B1KB1R b KQkq - 0 6 -%eda5de6a297f9bbadB07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pppn1ppp/3p1n2/8/3pPP2/2N2N2/PPP3PP/R1BQKB1R w KQkq - 0 6 -%e4123ec205382afb8B07enLion DefenseAnti-Philidor, Lion's Cave, Lion Claw Gambitr1bqkb1r/pppn1ppp/3p1n2/4p3/3PPP2/2N2N2/PPP3PP/R1BQKB1R b KQkq - 1 5Hx - /K 7842b23696e172c2B13enCaro-Kann DefensePanov-Botvinnik, Herzog Defenser1bqkb1r/pp2pppp/5n2/n2P2B1/2p5/2N5/PP3PPP/R2QKBNR w KQkq - 1 8 H glL 2 HHHHHHHHHHHHs - %s e22b49fdb7697beaC42enRussian GameClassical Attack, Chigorin Variation, Browne Attackr1bqk2r/ppp1bppp/8/3P4/1n1Pn3/3B1N2/PP3PPP/RNBQ1RK1 b kq - 0 9r -%s ec01d23015a76ff7C42enRussian GameClassical Attack, Chigorin Variation, Browne Attackr1bqk2r/ppp1bppp/8/3p4/1nPPn3/3B1N2/PP3PPP/RNBQ1RK1 w kq - 1 9`H@ - %C 67741228e5d8a661aC51enItalian GameEvans Gambit, Morphy Attackr1bqk1nr/ppp2ppp/1bnp4/8/2BPP3/2N2N2/P4PPP/R1BQ1RK1 b kq - 2 9q> -%Cc3be27f5969c5717C51enItalian GameEvans Gambit, Morphy Attackr1bqk1nr/ppp2ppp/2np4/b7/2BPP3/5N2/P4PPP/RNBQ1RK1 b kq - 0 8b]L -#U e480bdba6723143c -%a d0aef78c3d42c18bC51enItalian GameEvans Gambit, McDonnell Defense, Main Liner1bqk1nr/ppp2ppp/2np4/2b5/2BpP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 0 8= -%a e91461edef3a88e6C51enItalian GameEvans Gambit, McDonnell Defense, Main Liner1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/2P2N2/P4PPP/RNBQ1RK1 b kq - 1 7%0 - %y83805bd8dff3b8e6C53enItalian GameClassical Variation, Greco Gambit, Anderssen Variationr1bqk2r/ppp2ppp/2n5/1B1pP3/1b1Pn3/5N2/PP3PPP/RNBQK2R w KQkq - 1 9"/ -%y 1f0a502ff1111f4eNC53enItalian GameClassical Variation, Greco Gambit, Anderssen Variationr1bqk2r/ppp2ppp/2n5/1BbpP3/3Pn3/5N2/PP3PPP/RNBQK2R b KQkq - 0 8$. -%yb3bc856395b91368hC53enItalian GameClassical Variation, Greco Gambit, Anderssen Variationr1bqk2r/ppp2ppp/2n5/1BbpP3/3pn3/2P2N2/PP3PPP/RNBQK2R w KQkq - 2 8&- -%y89b4c9fc27f09e92C53enItalian GameClassical Variation, Greco Gambit, Anderssen Variationr1bqk2r/ppp2ppp/2n2n2/1BbpP3/3p4/2P2N2/PP3PPP/RNBQK2R b KQkq - 1 7  - %eec4c364ab2fe31a2C54enItalian GameClassical Variation, Greco Gambit, Main Liner1bqk2r/pppp1ppp/2n5/8/2BPn3/2b2N2/PP3PPP/R1BQ1RK1 w kq - 0 9 -%e cd754d4caf4663a8C54enItalian GameClassical Variation, Greco Gambit, Main Liner1bqk2r/pppp1ppp/2n5/8/1bBPn3/2N2N2/PP3PPP/R1BQ1RK1 b kq - 1 8 -%e b3003678d3b5b8b8C54enItalian GameClassical Variation, Greco Gambit, Main Liner1bqk2r/pppp1ppp/2n5/8/1bBPn3/2N2N2/PP3PPP/R1BQK2R w KQkq - 0 8 - %q7ffcf0da484895a5C54enItalian GameClassical Variation, Greco Gambit, Greco Variationr1bqk2r/pppp1ppp/2n5/8/1bBP4/2n2N2/PP3PPP/R1BQ1RK1 w kq - 0 9 - %W 30dc3abcf7a808333C58enItalian GameTwo Knights Defense, Colman Variation1rbqkb1r/p4ppp/2p2n2/nB2p1N1/8/5Q2/PPPP1PPP/RNB1K2R w KQk - 2 9p - %_ f79ca0a5d98a46c0C58enItalian GameTwo Knights Defense, Blackburne Variationr1bqkb1r/p4ppp/5n2/np2p1N1/8/5Q2/PPPP1PPP/RNB1K2R w KQkq - 0 9` - %s 26d4332e603fe217C59enItalian GameTwo Knights Defense, Polerio Defense, Suhle Defenser1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R w KQkq - 0 9 He1 d - :f, ,,, - %U e5f30ad53b2c9c74tC42enRussian GameClassical Attack, Tarrasch Variationrn1q1rk1/ppp2ppp/3b4/3p4/2PPn1b1/3B1N2/PP3PPP/RNBQ1RK1 w - - 1 9P - /?f6a169b6a8e8eddaC49enFour Knights GameSymmetrical, Metger Unpinr1b2rk1/ppp1qppp/2np1n2/1B2p1B1/4P3/2PP1N2/P1P2PPP/R2Q1RK1 w - - 1 9O -/?6d5eb6c669d443b0C49enFour Knights GameSymmetrical, Metger Unpinr1bq1rk1/ppp2ppp/2np1n2/1B2p1B1/4P3/2PP1N2/P1P2PPP/R2Q1RK1 b - - 0 8uPp - -] 7a37501ff2299dfcC44enPonziani OpeningPonziani Countergambit, Cordel Variationrnbqk2r/ppp1b1pp/3p1n2/3Pp3/4N3/2PB4/PP3PPP/RNBQK2R w KQkq - 3 9o --] 6efb23f03882316dmC44enPonziani OpeningPonziani Countergambit, Cordel Variationrnbqkb1r/ppp3pp/3p1n2/3Pp3/4N3/2PB4/PP3PPP/RNBQK2R b KQkq - 2 8n --] 3bf682520102f31eC44enPonziani OpeningPonziani Countergambit, Cordel Variationrnbqkb1r/ppp3pp/3p1n2/3Pp3/4N3/2P5/PP3PPP/RNBQKB1R w KQkq - 1 8m --]6018b6a7acf8b288C44enPonziani OpeningPonziani Countergambit, Cordel Variationrnbqkbnr/ppp3pp/3p4/3Pp3/4N3/2P5/PP3PPP/RNBQKB1R b KQkq - 0 7l --] e3d352a6df60cfd8C44enPonziani OpeningPonziani Countergambit, Cordel Variationrnbqkbnr/ppp3pp/3p4/3Pp1N1/4p3/2P5/PP3PPP/RNBQKB1R w KQkq - 2 7k --] 483e8a44cef16adbC44enPonziani OpeningPonziani Countergambit, Cordel Variationr1bqkbnr/ppp3pp/2np4/3Pp1N1/4p3/2P5/PP3PPP/RNBQKB1R b KQkq - 1 6j --] 1eec6b91673d927fC44enPonziani OpeningPonziani Countergambit, Cordel Variationr1bqkbnr/ppp3pp/2np4/3Pp3/4p3/2P2N2/PP3PPP/RNBQKB1R w KQkq - 0 6 -%U 61abb274eaffd072rC42enRussian GameClassical Attack, Staunton Variationrnbqk2r/ppp2ppp/3b4/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 b kq - 3 7` - /Ud61dff8c1c246d1eC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqk1nr/pppp2pp/6n1/4Pp2/1bBP4/2N2Q2/PPP2PPP/R1B1K2R w KQkq f6 0 9_ -/U9296db6ff7b8bbb2C46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqk1nr/pppp1ppp/6n1/4P3/1bBP4/2N2Q2/PPP2PPP/R1B1K2R b KQkq - 4 8^ -/U 28b4a05cdbc5ed09 C46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqk1nr/pppp1ppp/6n1/4P3/1bBP4/2N5/PPP2PPP/R1BQK2R w KQkq - 3 8] -/U e1f5c95a9032252b+C46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkbnr/pppp1ppp/6n1/4P3/2BP4/2N5/PPP2PPP/R1BQK2R b KQkq - 2 7\ -/U 82467d72b871f38dC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkbnr/pppp1ppp/6n1/4P3/3P4/2N5/PPP2PPP/R1BQKB1R w KQkq - 1 7[ -/U d9a84987158bb21bC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkb1r/pppp1ppp/5nn1/4P3/3P4/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 6Z -/U b8d15f7a1195947fC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkb1r/pppp1ppp/5nn1/8/3PP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 1 6Y -/U 8adee1e74983b89eC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkb1r/pppp1ppp/5n2/4n3/3PP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 5X -/U 4febce4d584a95dcC46enFour Knights GameHalloween Gambit, Oldtimer Variationr1bqkb1r/pppp1ppp/5n2/4n3/4P3/2N5/PPPP1PPP/R1BQKB1R w KQkq - 0 5 Wr U % uW? WWWWW6 - %i e0d90d1afa17a3fbC51enItalian GameEvans Gambit, Anderssen Variation, Cordel Liner1bqk1nr/ppppbppp/8/n3p3/2BPP3/2P2N2/P4PPP/RNBQK2R w KQkq - 1 75 -%i b5ce27ef572b01f1C51enItalian GameEvans Gambit, Anderssen Variation, Cordel Liner1bqk1nr/ppppbppp/2n5/4p3/2BPP3/2P2N2/P4PPP/RNBQK2R b KQkq - 0 6 TvA -%[1db49f71594d568aC50enItalian GameHungarian Defense, Tartakower Variationr1bqk2r/ppppbppp/2n2n2/4P3/2Bp4/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6@ -%[ 7ccd898c5d5370eeC50enItalian GameHungarian Defense, Tartakower Variationr1bqk2r/ppppbppp/2n2n2/8/2BpP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 6? -%[ 2723bd79f0a93178xC50enItalian GameHungarian Defense, Tartakower Variationr1bqk1nr/ppppbppp/2n5/8/2BpP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5* - %cbd865c9362c9071aC51enItalian GameEvans Gambit Declined, Hirschbach Variationr1b1k1nr/pppp1ppp/1b6/nP2N1q1/2B1P3/8/P1PP1PPP/RNBQK2R w KQkq - 1 7) -%cff7b3bba45d536eaC51enItalian GameEvans Gambit Declined, Hirschbach Variationr1bqk1nr/pppp1ppp/1b6/nP2N3/2B1P3/8/P1PP1PPP/RNBQK2R b KQkq - 0 6( -%c4138cf41e1cb93dcC51enItalian GameEvans Gambit Declined, Hirschbach Variationr1bqk1nr/pppp1ppp/1b6/nP2p3/2B1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 1 6' -%c142fe5b44cf731d6C51enItalian GameEvans Gambit Declined, Hirschbach Variationr1bqk1nr/pppp1ppp/1bn5/1P2p3/2B1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 5  - %Y7ef7a45eff575b93C51enItalian GameEvans Gambit Declined, Lange Variationr1bqk2r/pppp1ppp/1b5n/nP2N3/2B1P3/8/P1PP1PPP/RNBQK2R w KQkq - 1 7 - %Wd3bd7f7b03696064dC52enItalian GameEvans Gambit, Leonhardt Countergambitr1bqk1nr/p1pp1ppp/2n5/bp2p3/2BPP3/2P2N2/P4PPP/RNBQK2R w KQkq - 0 7 -%Wb3b9156e98c4dd59YC52enItalian GameEvans Gambit, Leonhardt Countergambitr1bqk1nr/pppp1ppp/2n5/b3p3/2BPP3/2P2N2/P4PPP/RNBQK2R b KQkq - 0 6  - %K8a03830f4abc94344C52enItalian GameEvans Gambit, Bronstein Defenser1bqk1nr/ppp2ppp/2np4/b3p3/2BPP3/2P2N2/P4PPP/RNBQK2R w KQkq - 0 7z - %E 28c71fec5cbfc94cLC52enItalian GameEvans Gambit, Pierce Defenser1bqk1nr/pppp1ppp/2n5/b7/2BpP3/2P2N2/P4PPP/RNBQK2R w KQkq - 0 7n - %Ke857219b353e9ccfC52enItalian GameEvans Gambit, Laroche Variationr1bqk2r/pppp1ppp/2n2n2/b3p3/2BPP3/2P2N2/P4PPP/RNBQK2R w KQkq - 1 7{b - %%3143d79127866266fC52enItalian GameEvans Gambitr1bqk1nr/ppp2ppp/2np4/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQ1RK1 w kq - 0 7} s C -0& Q bsssFFFFFFFF? 6 -9A6b2ca94171fc8096C32enKing's Gambit DeclinedFalkbeer, Alapin Variationrnb1k2r/ppp2ppp/8/3q4/4nP2/5N2/PPP1QbPP/RNBK1B1R w kq - 0 9 5 -9Aef00786ba86efd5c\C32enKing's Gambit DeclinedFalkbeer, Alapin Variationrnbqk2r/ppp2ppp/8/3P4/4nP2/5N2/PPP1QbPP/RNBK1B1R b kq - 5 84 -9Ab861e35712a99512C32enKing's Gambit DeclinedFalkbeer, Alapin Variationrnbqk2r/ppp2ppp/8/3P4/4nP2/5N2/PPP1QbPP/RNB1KB1R w KQkq - 4 8) - 9of03bb643963a3b4dMC39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Kaplanek Variationrnb1k2r/ppp2p1p/5n2/3qN3/1b1P1ppP/2N5/PPP2KP1/R1BQ1B1R b kq - 3 9+ -9o8816744d61cad6e8C39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Kaplanek Variationrnb1k2r/ppp2p1p/5n2/3qN3/1b1P1ppP/2N5/PPP3P1/R1BQKB1R w KQkq - 2 9* -9o41571d4b2a3d1ecaC39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Kaplanek Variationrnb1kb1r/ppp2p1p/5n2/3qN3/3P1ppP/2N5/PPP3P1/R1BQKB1R b KQkq - 1 8' -9o bac005e9e8df9c13C39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Kaplanek Variationrnb1kb1r/ppp2p1p/5n2/3qN3/3P1ppP/8/PPP3P1/RNBQKB1R w KQkq - 0 8( -9o 3eecd4c3314de1d9C39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Kaplanek Variationrnbqkb1r/ppp2p1p/5n2/3PN3/3P1ppP/8/PPP3P1/RNBQKB1R b KQkq - 0 7 ,% - 44ff59594128411dC37enKing's Gambit Accepted, Double Muzio Gambit, Baldwin Gambitrnb1kbnr/pppp1p1p/8/8/2q1Pp2/2N2Q2/PPPP2PP/R1B2R1K w kq - 0 9$ - 53b192fd08be3668hC37enKing's Gambit Accepted, Double Muzio Gambit, Baldwin Gambitrnb1kbnr/pppp1p1p/8/8/2BqPp2/2N2Q2/PPPP2PP/R1B2R1K b kq - 4 8# - 621aa157e8589427'C37enKing's Gambit Accepted, Double Muzio Gambit, Baldwin Gambitrnb1kbnr/pppp1p1p/8/8/2BqPp2/2N2Q2/PPPP2PP/R1B2RK1 w kq - 3 8\ - 9;856920a559b2bbaaC39enKing's Gambit AcceptedAllgaier, Urusov Attackrnbq1bnr/ppp3k1/7p/3B4/3PPppP/8/PPP3P1/RNBQK2R b KQ - 0 9 -9;405c0f0f487b96e8C39enKing's Gambit AcceptedAllgaier, Urusov Attackrnbq1bnr/ppp3k1/7p/3B4/4PppP/8/PPPP2P1/RNBQK2R w KQ - 1 9 -9;15fe44a97cd5dafbC39enKing's Gambit AcceptedAllgaier, Urusov Attackrnbq1bnr/ppp2k2/7p/3B4/4PppP/8/PPPP2P1/RNBQK2R b KQ - 0 8  -9;5784ff474a432cb1C39enKing's Gambit AcceptedAllgaier, Urusov Attackrnbq1bnr/ppp2k2/7p/3p4/2B1PppP/8/PPPP2P1/RNBQK2R w KQ - 0 8& -  84eaf7755b693e48HC37enKing's Gambit Accepted, Double Muzio Gambit, Baldwin Gambitrnb1kbnr/pppp1p1p/8/3N4/2q1Pp2/5Q2/PPPP2PP/R1B2R1K b kq - 1 9 Q X (u6V r,,,????p - 9I985a0e5c7f58f0b6C30enKing's Gambit DeclinedClassical, Svenonius Variationr2qk2r/ppp2ppp/2np1n2/2b5/2B1Pp2/2NP1Q1P/PPP3P1/R1B1K2R w KQkq - 0 9o -9I71d034c24e97f762bC30enKing's Gambit DeclinedClassical, Svenonius Variationr2qk2r/ppp2ppp/2np1n2/2b1p3/2B1PP2/2NP1Q1P/PPP3P1/R1B1K2R b KQkq - 0 8n -9I274776c8ea9420acC30enKing's Gambit DeclinedClassical, Svenonius Variationr2qk2r/ppp2ppp/2np1n2/2b1p3/2B1PP2/2NP1b1P/PPP3P1/R1BQK2R w KQkq - 0 8m -9I9632441f90b58adcC30enKing's Gambit DeclinedClassical, Svenonius Variationr2qk2r/ppp2ppp/2np1n2/2b1p3/2B1PPb1/2NP1N1P/PPP3P1/R1BQK2R b KQkq - 0 7l -9I7ec199a15216432e.C30enKing's Gambit DeclinedClassical, Svenonius Variationr2qk2r/ppp2ppp/2np1n2/2b1p3/2B1PPb1/2NP1N2/PPP3PP/R1BQK2R w KQkq - 2 7k -9I7c12539315934dc4C30enKing's Gambit DeclinedClassical, Svenonius Variationr1bqk2r/ppp2ppp/2np1n2/2b1p3/2B1PP2/2NP1N2/PPP3PP/R1BQK2R b KQkq - 1 6j -9Ia776bf657d752cf9C30enKing's Gambit DeclinedClassical, Svenonius Variationr1bqk2r/ppp2ppp/2np1n2/2b1p3/2B1PP2/2NP4/PPP3PP/R1BQK1NR w KQkq - 0 6i -9I9ecc2904af0d6594C30enKing's Gambit DeclinedClassical, Svenonius Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1PP2/2NP4/PPP3PP/R1BQK1NR b KQkq - 0 5h -9I63da5409b69c581dC30enKing's Gambit DeclinedClassical, Svenonius Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2NP4/PPP2PPP/R1BQK1NR w KQkq - 1 5 d -9I c01affd05726ca05C30enKing's Gambit DeclinedClassical, Svenonius Variationr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3 } -#I 79bb8f8f9a6df882C25enVienna GameHamppe-Muzio, Dubois Variationr1bqkbnr/pppp1p1p/2n5/8/2B1Pp2/2N2Q2/PPPP2PP/R1B2RK1 b kq - 0 7` - 9E 43ecd897e1480f9bC32enKing's Gambit DeclinedFalkbeer, Tarrasch Variationrn1q1rk1/ppp2ppp/8/2bP1b2/4nPP1/5N2/PPP1Q2P/RNB1KB1R w KQ - 1 9_ -9E 494435203411e670pC32enKing's Gambit DeclinedFalkbeer, Tarrasch Variationrn1qk2r/ppp2ppp/8/2bP1b2/4nPP1/5N2/PPP1Q2P/RNB1KB1R b KQkq - 0 8` -#I2acc3540d23140faC25enVienna GameHamppe-Muzio, Dubois Variationr1bqkbnr/pppp1p1p/8/4n3/2B1PQ2/2N5/PPPP2PP/R1B2RK1 b kq - 0 8 ~ -#I 89e692c45582d2e2C25enVienna GameHamppe-Muzio, Dubois Variationr1bqkbnr/pppp1p1p/8/4n3/2B1Pp2/2N2Q2/PPPP2PP/R1B2RK1 w kq - 1 8 WGsR 5  qNKGGGGGGEU --/5877d6661a5cec0d C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPPp1b/5NP1/P1P4P/RNBQK2R b KQkq - 0 7T --/74916d27fa8b34355C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPPp1b/5N2/P1P3PP/RNBQK2R w KQkq - 1 7~S --/7c654006be949129)C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/ppppbppp/8/8/2BPPp2/5N2/P1P3PP/RNBQK2R b KQkq - 0 6R --/b9506facaf5dbc6bkC23enBishop's OpeningFour Pawns Gambitrnbqk1nr/ppppbppp/8/8/2B1Pp2/5N2/P1PP2PP/RNBQK2R w KQkq - 2 6Q --/ 9c0b53ef81265dd1C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/1bB1Pp2/5N2/P1PP2PP/RNBQK2R b KQkq - 1 5P --/476fbf19e9c03cecC23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/1bB1Pp2/8/P1PP2PP/RNBQK1NR w KQkq - 0 5H - #I 12c7704e8235e903C25enVienna GamePierce Gambit, Rushmere Attackr2qkbnr/ppp2p1p/2P5/8/2BP1pb1/2N2p2/PPP3PP/R1BQ1RK1 b kq - 0 9 G -#I 55ebb66133f7f9ddC25enVienna GamePierce Gambit, Rushmere Attackr2qkbnr/ppp2p1p/2n5/3P4/2BP1pb1/2N2p2/PPP3PP/R1BQ1RK1 w kq - 1 9 F -#I 57387c537472f7377C25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/ppp2p1p/2n5/3P4/2BP1p2/2N2p2/PPP3PP/R1BQ1RK1 b kq - 0 8 E -#I 70e7761eae1db5311C25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/ppp2p1p/2n5/3p4/2BPPp2/2N2p2/PPP3PP/R1BQ1RK1 w kq - 0 8 D -#I f58d540a32c9fb17C25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/pppp1p1p/2n5/8/2BPPp2/2N2p2/PPP3PP/R1BQ1RK1 b kq - 1 7 C -#I 8bf82f3e4e3a2007C25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/pppp1p1p/2n5/8/2BPPp2/2N2p2/PPP3PP/R1BQK2R w KQkq - 0 7 B -#Ib5e5ffe1d18e411bC25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/pppp1p1p/2n5/8/2BPPpp1/2N2N2/PPP3PP/R1BQK2R b KQkq - 1 6 A -#Id6564bc9f9cd97bdC25enVienna GamePierce Gambit, Rushmere Attackr1bqkbnr/pppp1p1p/2n5/8/3PPpp1/2N2N2/PPP3PP/R1BQKB1R w KQkq - 0 6 7 - 9Ab60e32a6b341be1cC32enKing's Gambit DeclinedFalkbeer, Alapin Variationrnb1k2r/ppp2ppp/8/3q4/4nP2/8/PPPNQbPP/RNBK1B1R b kq - 1 9 _ @ ohb)r )m - 96f02711f1c58c42BC31enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Morphy Defensernbqk2r/ppp2ppp/5n2/3P4/1b2pP2/2NP4/PPPB2PP/R2QKBNR b KQkq - 2 6)l - bf7d7da463a4e746FC31enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Morphy Defensernbqk2r/ppp2ppp/5n2/3P4/1b2pP2/2NP4/PPP3PP/R1BQKBNR w KQkq - 1 6(k - 763c14a228532f64dC31enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Morphy Defensernbqkb1r/ppp2ppp/5n2/3P4/4pP2/2NP4/PPP3PP/R1BQKBNR b KQkq - 0 5(i - f79eea195ec64b46FC31enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Morphy Defensernbqkb1r/ppp2ppp/5n2/3Pp3/5P2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 4 r^ --I 1783f24010a27adaC24enBishop's OpeningUrusov Gambit, Panov Variationrnbqkb1r/ppp2ppp/5n2/3P4/2Bp4/5N2/PPP2PPP/RNBQK2R b KQkq - 0 5 --I 305cf80dcacd38dcC24enBishop's OpeningUrusov Gambit, Panov Variationrnbqkb1r/ppp2ppp/5n2/3p4/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 - #Q 30b87ba02300d655UC25enVienna GameVienna Gambit, Hamppe-Muzio Gambitr1bqkbnr/pppp1p1p/2n5/8/2B1Pp2/2N2p2/PPPP2PP/R1BQ1RK1 w kq - 0 7z - #]e0a88ffe388f7248HC25enVienna GameHamppe-Allgaier Gambit, Alapin Variationr1bqkbnr/ppp2p1p/2np4/6N1/4PppP/2N5/PPPP2P1/R1BQKB1R w KQkq - 0 7)n -  584a41d5444d24388C31enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Morphy Defensernbqk2r/ppp2ppp/5n2/3P4/1b3P2/2NPp3/PPPB2PP/R2QKBNR w KQkq - 0 7b + 9Qdeb43b6cccfbbb1C33enKing's Gambit AcceptedBishop's Gambit, Classical Defensernb1k2r/ppppnpbp/8/6p1/2BPPp1q/2N5/PPP3PP/R1BQ1KNR w kq - 1 7a -9Q bd577e003788701bC33enKing's Gambit AcceptedBishop's Gambit, Classical Defensernb1kb1r/ppppnp1p/8/6p1/2BPPp1q/2N5/PPP3PP/R1BQ1KNR b kq - 0 6` -9Q 786251aa26415d59YC33enKing's Gambit AcceptedBishop's Gambit, Classical Defensernb1kb1r/ppppnp1p/8/6p1/2B1Pp1q/2N5/PPPP2PP/R1BQ1KNR w kq - 0 6_ -9Qf821a177b2f5a2d3C33enKing's Gambit AcceptedBishop's Gambit, Classical Defensernb1kb1r/ppppnppp/8/8/2B1Pp1q/2N5/PPPP2PP/R1BQ1KNR b kq - 5 5^ +9Q3b6b9d57017200a C33enKing's Gambit AcceptedBishop's Gambit, Classical Defensernb1kb1r/ppppnppp/8/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 4 5 --I a81863de8b25bd7e~C24enBishop's OpeningUrusov Gambit, Panov Variationrnbqk2r/ppp2ppp/5n2/3P4/1bBp4/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6 --I dec29b465b55b2f8C24enBishop's OpeningUrusov Gambit, Panov Variationrnbqk2r/ppp2ppp/5n2/3P4/1bBp4/5N2/PPP2PPP/RNBQK2R w KQkq - 1 6V - 9e64f91812753b320a C33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnbk1bnr/pppp2pp/8/8/2B1pp1q/2N5/PPPPQ1PP/R1BK2NR w - - 2 7 U -9eede00675f9e77ea3C33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnb1kbnr/pppp2pp/8/8/2B1pp1q/2N5/PPPPQ1PP/R1BK2NR b kq - 1 6T -9e16771ed73b05fc7azC33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnb1kbnr/pppp2pp/8/8/2B1pp1q/8/PPPPQ1PP/RNBK2NR w kq - 0 6 >~} + .37>HHHHl2 X{j - #) 6b5678c06ad736a0C22enCenter GameKupr Variationr1bqr1k1/ppp2ppp/2np1n2/8/1bB1P3/2N1Q2N/PPPB1PPP/2KR3R b - - 1 9xi )#) 98a24f22f2497azC22enCenter GameKupr Variationr1bqr1k1/ppp2ppp/2np1n2/8/1bB1P3/2N1Q3/PPPB1PPP/2KR2NR w - - 0 9{h -#)3922342ef08a0017C22enCenter GameKupr Variationr1bqr1k1/pppp1ppp/2n2n2/8/1bB1P3/2N1Q3/PPPB1PPP/2KR2NR b - - 10 8{g -#) 5a918006d8c9d6b1C22enCenter GameKupr Variationr1bqr1k1/pppp1ppp/2n2n2/8/1b2P3/2N1Q3/PPPB1PPP/2KR1BNR w - - 9 8zf -#) 46c04746eab933333C22enCenter GameKupr Variationr1bq1rk1/pppp1ppp/2n2n2/8/1b2P3/2N1Q3/PPPB1PPP/2KR1BNR b - - 8 7{e -#) 7eed0265b99b3cabC22enCenter GameKupr Variationr1bq1rk1/pppp1ppp/2n2n2/8/1b2P3/2N1Q3/PPPB1PPP/R3KBNR w KQ - 7 7{d -#)7445efd26cc2d540@C22enCenter GameKupr Variationr1bqk2r/pppp1ppp/2n2n2/8/1b2P3/2N1Q3/PPPB1PPP/R3KBNR b KQkq - 6 6|c -#)5dc8b567fea3be44DC22enCenter GameKupr Variationr1bqk2r/pppp1ppp/2n2n2/8/1b2P3/2N1Q3/PPP2PPP/R1B1KBNR w KQkq - 5 6{b -#)9489dc61b5547666fC22enCenter GameKupr Variationr1bqkb1r/pppp1ppp/2n2n2/8/4P3/2N1Q3/PPP2PPP/R1B1KBNR b KQkq - 4 5T}Y - -/d6023f8abfd1ee96C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPP2b/5N2/P1P4p/RNBQ1R1K b kq - 1 9}X --/e7a90c205f374cd9C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPP2b/5N2/P1P4p/RNBQ1RK1 w kq - 0 9~W --/e669bf7ed49252c3C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPP2b/5Np1/P1P4P/RNBQ1RK1 b kq - 1 8V --/981cc44aa86189d3C23enBishop's OpeningFour Pawns Gambitrnbqk1nr/pppp1ppp/8/8/2BPP2b/5Np1/P1P4P/RNBQK2R w KQkq - 0 8  T d #i-T ITTTTT - )a 14f60958a8da458cC12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk1r1/ppp2pP1/4p3/3p4/1b1P2Qp/2N5/PPP2PP1/R3KBNR b KQq - 1 9 -)a 414c7bf67e3d1f81C12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk1r1/ppp2pP1/4p3/3p4/1b1P3p/2N5/PPP2PP1/R2QKBNR w KQq - 0 9 -)a25ad8b275825f7fdC12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk1r1/ppp2pP1/4p3/3p2p1/1b1P3P/2N5/PPP2PP1/R2QKBNR b KQq - 0 8 -)a b90e170ef31a8e83C12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk1r1/ppp2pP1/4p3/3p2p1/1b1P4/2N5/PPP2PPP/R2QKBNR w KQq - 1 8 -)a e24d44b367b38ec0C12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk2r/ppp2pP1/4p3/3p2p1/1b1P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 7 -)ab4d1e7210efdb7a9C12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqk2r/ppp2pp1/4pP2/3p2p1/1b1P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7 -)a163012f65c3c172d-C12enFrench DefenseMacCutcheon Variation, Grigoriev Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR w KQkq - 0 4 R2 --ab49b1d51871042e.B90enSicilian DefenseScheveningen Variation, Delayed Keres Attack, Perenyi Gambitrnbqkb1r/1p3ppp/p2p1n2/4p3/3NP1P1/2N1B3/PPP2P1P/R2QKB1R w KQkq - 0 8{ - )Yf0ded8d3fc104dc0C12enFrench DefenseMacCutcheon Variation, Duras Variationrnbq1k1r/ppp2pp1/4p2p/3pP3/3Pn1Q1/2P5/P1P2PPP/R1B1KBNR b KQ - 4 9z -)Y d95382666e7126c4C12enFrench DefenseMacCutcheon Variation, Duras Variationrnbq1k1r/ppp2pp1/4p2p/3pP3/3Pn1Q1/2P5/P1PB1PPP/R3KBNR w KQ - 3 94 --92ba51c51c69eaf5B90enSicilian DefenseScheveningen Variation, Delayed Keres Attack, Perenyi Gambitrnbqkb1r/1p3p1p/p2p1np1/4pN2/4P1P1/2N1B3/PPP2P1P/R2QKB1R w KQkq - 0 93 --7b0e029e67e678beB90enSicilian DefenseScheveningen Variation, Delayed Keres Attack, Perenyi Gambitrnbqkb1r/1p3ppp/p2p1n2/4pN2/4P1P1/2N1B3/PPP2P1P/R2QKB1R b KQkq - 1 8 ) [  c ^+G  )P - -] 9b405e5b59e0b0c1B83enSicilian DefenseScheveningen Variation, Modern Variationr1bq1rk1/pp2bppp/2nppn2/8/3NPP2/2N1B3/PPP1B1PP/R2Q1RK1 b - - 2 9JG - -g 33d240e0871d310c B64enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9F - -g cec43ded9e8c0c85B64enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9E - -g c46cd05a4bd5e56enB64enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 86 - -Y 33a5bdfdfc58e342BB72enSicilian DefenseDragon, Classical, Grigoriev Variationr1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/2KR3R b - - 5 95 +-Y b88f8deaf7aecdaB72enSicilian DefenseDragon, Classical, Grigoriev Variationr1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R3K2R w KQ - 4 9(% - -} 75fd83ead38937caB73enSicilian DefenseDragon Variation, Classical Variation, Battery Variationr1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R4RK1 b - - 7 9)$ --} 5de5cc651230e86ajB73enSicilian DefenseDragon Variation, Classical Variation, Battery Variationr1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 w - - 6 9(# --} f608148703a14d69iB73enSicilian DefenseDragon Variation, Classical Variation, Battery Variationrnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b - - 5 8(" --} 8500af6b829b56e7B73enSicilian DefenseDragon Variation, Classical Variation, Battery Variationrnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w - - 4 8$ - -q c994f44803272ea0B74enSicilian DefenseDragon Variation, Classical Variation, Normal Liner1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 9  - -i 2e94d8355db74690B76enSicilian DefenseDragon Variation, Yugoslav Attack, Modern Liner1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/2KR1B1R b - - 4 9! --i1c1170a1dbcca0e3B76enSicilian DefenseDragon Variation, Yugoslav Attack, Modern Liner1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R b KQkq - 2 8$r - -qb5f49cc0e6e0a415B76enSicilian DefenseDragon Variation, Yugoslav Attack, Panov Variationr1bq1rk1/pp2ppbp/2np1np1/8/3NP1P1/2N1BP2/PPPQ3P/R3KB1R b KQ - 0 9a - -e 750a293e26d69faeB77enSicilian DefenseDragon Variation, Yugoslav Attack, Main Liner1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9 + L $ k Hqqqqqqe --g 42e8eac64292bae7B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Double Gambitr1bqkb1r/pp2pppp/2np4/3P4/4n3/5N2/PP2BPPP/RNBQK2R b KQkq - 0 7qX - -C8cc65e917e80019fB51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p2pppp/p2p1n2/2p3B1/3Pb3/2P2N2/PP3PPP/RN1QR1K1 b kq - 1 9 W --C 4a9c09a7ce0ada57WB51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p2pppp/p2p1n2/2p5/3Pb3/2P2N2/PP3PPP/RNBQR1K1 w kq - 0 9V --C757d291bc270bb88B51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p2pppp/p1bp1n2/2p5/3PP3/2P2N2/PP3PPP/RNBQR1K1 b kq - 0 8U --Cb04806b1d3b996caB51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p2pppp/p1bp1n2/2p5/4P3/2P2N2/PP1P1PPP/RNBQR1K1 w kq - 0 8T --Ca84cb5b1d13092f9B51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p1bpppp/p1Bp1n2/2p5/4P3/2P2N2/PP1P1PPP/RNBQR1K1 b kq - 0 7S --Cf9638f57776642c2B51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/1p1bpppp/p1np1n2/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQR1K1 w kq - 0 7R --C2b947ea49046ba1eB51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/pp1bpppp/2np1n2/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQR1K1 b kq - 2 6Q --Caf20702f17ee110a B51enSicilian DefenseCanal Attack, Moscow Gambitr2qkb1r/pp1bpppp/2np1n2/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 w kq - 1 6P --Cf4ce44daba14509cB51enSicilian DefenseCanal Attack, Moscow Gambitr2qkbnr/pp1bpppp/2np4/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 5 a  x\A]y P P P P P Pjjjja9:z - -b3b10f728924caacB33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variation, Chelyabinsk Variationr1bqkb1r/5ppp/p1np1n2/1p1Np1B1/4P3/N7/PPP2PPP/R2QKB1R b KQkq - 1 9 -'Ic926b229d2fa5af5A95enDutch DefenseStonewall, Chekhover Variationrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 1 8 - -e97e4b1099111d4a4B03enAlekhine DefenseFour Pawns Attack, Ilyin-Zhenevsky Variationr2qkb1r/ppp1p1pp/1nn1p3/2P5/3P2b1/5N2/PP4PP/RNBQKB1R b KQkq - 0 9 --e f8765b51bf083914B03enAlekhine DefenseFour Pawns Attack, Ilyin-Zhenevsky Variationr2qkb1r/ppp1p1pp/1nn1p3/8/2PP2b1/5N2/PP4PP/RNBQKB1R w KQkq - 0 9 --e 9fbf58190878b03e>B03enAlekhine DefenseFour Pawns Attack, Ilyin-Zhenevsky Variationr2qkb1r/ppp1pppp/1nn1P3/8/2PP2b1/5N2/PP4PP/RNBQKB1R b KQkq - 0 8 --e 1c7a4426f88dbaf7B03enAlekhine DefenseFour Pawns Attack, Ilyin-Zhenevsky Variationr2qkb1r/ppp1pppp/1nn5/4P3/2PP2b1/5N2/PP4PP/RNBQKB1R w KQkq - 3 8 --e 1ea98e14bf08b41dB03enAlekhine DefenseFour Pawns Attack, Ilyin-Zhenevsky Variationr1bqkb1r/ppp1pppp/1nn5/4P3/2PP4/5N2/PP4PP/RNBQKB1R b KQkq - 2 7o - 'If4fd690d5152a480A95enDutch DefenseStonewall, Chekhover Variationrnb1qrk1/pp2b1pp/2p1pn2/3p1pB1/2PP4/2N2NP1/PPQ1PPBP/R4RK1 b - - 3 9 -'I32a73e3be1d87f48HA95enDutch DefenseStonewall, Chekhover Variationrnb1qrk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 w - - 2 9f --g 9b9b7f9debe09b68hB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Double Gambitr1b1kb1r/pp2pppp/2np4/q2P4/4n3/5N2/PP2BPPP/RNBQK2R w KQkq - 1 8i - -g 51776874386517a5B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Double Gambitr1b1kb1r/pp2pppp/2np4/q2P4/8/2P2N2/P3BPPP/R1BQK2R b KQkq - 0 9h --g d285daa9ce0cefbcB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Double Gambitr1b1kb1r/pp2pppp/2np4/q2P4/8/2n2N2/PP2BPPP/R1BQK2R w KQkq - 0 9 g --g600c673f290219b1B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Double Gambitr1b1kb1r/pp2pppp/2np4/q2P4/4n3/2N2N2/PP2BPPP/R1BQK2R b KQkq - 2 8 b I  dA9bLLLLLLsZZ!| I - 5=9a158160c958d069iB01enScandinavian DefenseSchiller-Pytel Variationrnb1kbnr/pp2pppp/2pq4/8/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5 H +5=86f6c8fbe9803d2B01enScandinavian DefenseSchiller-Pytel Variationrnb1kbnr/ppp1pppp/3q4/8/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4>7~A - 5%8602c5db7aaf1118B01enScandinavian DefenseKadas Gambitrnbqkb1r/pp3ppp/2P2n2/4p3/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 5|@ +5%c7acd91e94ae92e.B01enScandinavian DefenseKadas Gambitrnbqkb1r/pp2pppp/2P2n2/8/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 4? -5% 2c2845b97059f2d9B01enScandinavian DefenseKadas Gambitrnbqkb1r/pp2pppp/2p2n2/3P4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4E~9 - 5)12360b30d1336f82B01enScandinavian DefenseKiel Variationrnbqkb1r/ppp1pppp/8/8/1nPP4/8/PP3PPP/RNBQKBNR w KQkq - 1 5~8 -5)ad9f4d3ffb7397399B01enScandinavian DefenseKiel Variationrnbqkb1r/ppp1pppp/8/3n4/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4 1 - 5S f80bf4df971f53e9B01enScandinavian DefenseModern Variation, Gipslis Variationrn1qkb1r/ppp1pppp/8/3n4/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 50 -5Sfad83eedd09a5d03B01enScandinavian DefenseModern Variation, Gipslis Variationrnbqkb1r/ppp1pppp/8/3n4/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4) - 5/ 136c6db6ab15cf48HB01enScandinavian DefenseRichter Variationrnbqkb1r/ppp1pp1p/6p1/3n4/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5! - 5G bbc10e3ca4b4a513B01enScandinavian DefenseModern Variation, Wing Gambitrnbqkb1r/p1p1pp1p/5np1/1p1P4/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 5 -5G dbc564293f19182e.B01enScandinavian DefenseModern Variation, Wing Gambitrnbqkb1r/ppp1pp1p/5np1/3P4/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4  - -af0bdeb7e20f1f3c0B04enAlekhine DefenseModern Variation, Larsen-Haakert Variationr1bqkb1r/ppp1pppp/2np4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5aQ - 5C 3f9ea6b1b2096fd4B01enScandinavian DefenseMain Line, Mieses Variationrnb1kb1r/ppp1pppp/5n2/q7/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5 R ~]q y y y yVVVVVVVVV jR- - )I cce8244c943ed4d1A73enBenoni DefenseClassical Variation, Main Linernbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9 0 - ] 5956c23e79f58685E84enKing's Indian, Sämisch, Panno Main Liner1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R b KQ - 1 8)p - 7kd92ead1f9394b490E89enKing's Indian DefenseSämisch Variation, Closed Variation, Main Linernbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 9)o - 7kaa5e025633feb92a*E89enKing's Indian DefenseSämisch Variation, Closed Variation, Main Linernbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 0 8 ` + c e90b199ecfd26e1A58enBenko Gambit Accepted, Fianchetto Variationrn1qk2r/4ppbp/b2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 9 _ -c d5f45d6f841b47dcA58enBenko Gambit Accepted, Fianchetto Variationrn1qk2r/4ppbp/b2p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 9 ^ -c 654860d97f5c8c76vA58enBenko Gambit Accepted, Fianchetto Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 8 ] -c d0b843a432b1540fA58enBenko Gambit Accepted, Fianchetto Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 8 \ -c e902d5c5e0c91d62bA58enBenko Gambit Accepted, Fianchetto Variationrn1qkb1r/3ppp1p/b4np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 0 7I - ] c1f569de2fcb31efE84enKing's Indian, Sämisch, Panno Main Line1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R w KQ - 2 9~O - K 49b9373df0e93023#A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N5/PP2NPPP/R1BQ1K1R b kq - 1 9~N -K 5d1ddcf2d8c23dddA59enBenko Gambit Accepted, Yugoslavrn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQ1KNR w kq - 0 9}M -K 64a74a930aba74b0A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/3ppp1p/5np1/2pP4/4P3/2N5/PP3PPP/R1BQ1KNR b kq - 0 8L -K c2b2c1004d34a5e3A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/3ppp1p/5np1/2pP4/4P3/2N5/PP3PPP/R1BQKbNR w KQkq - 0 8~K +K 1e363cceb9e7850PA59enBenko Gambit Accepted, Yugoslavrn1qkb1r/3ppp1p/b4np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7m> - % 71fb67b33815e5e5A59enBenko Gambitrn1qkb1r/4pp1p/3p1np1/2pP4/4P3/2N3P1/PP3P1P/R1BQ1KNR b kq - 0 9  / } ozkD  jjjjjjjjj C] -5G 1195e6de6634f062bE24enNimzo-Indian DefenseSämisch, Botvinnik Variationrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P1PP2/6PP/R1BQKBNR b KQkq - 0 7P - 5Ic6f001a502d40b355E25enNimzo-Indian DefenseSämisch, Romanovsky Variationrnbqk2r/pp4pp/4p3/2Pn1p2/8/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 9,@ - 5ye0508f1e90ee1171qE37enNimzo-Indian DefenseClassical Variation, Noa Variation, San Remo Variationr1bqk2r/ppp2ppp/2n5/3pp3/2PPn3/P3P3/1PQ2PPP/R1B1KBNR w KQkq - 0 9-? -5ye48953cfb40efc1cE37enNimzo-Indian DefenseClassical Variation, Noa Variation, San Remo Variationr1bqk2r/ppp2ppp/2n1p3/3p4/2PPn3/P3P3/1PQ2PPP/R1B1KBNR b KQkq - 0 8-> -5y49a4117d905174b8E37enNimzo-Indian DefenseClassical Variation, Noa Variation, San Remo Variationr1bqk2r/ppp2ppp/2n1p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR w KQkq - 3 8)0 - 5u 24a329006babfeeeE54enNimzo-Indian DefenseNormal Variation, Gligoric System, Smyslov Variationrnb2rk1/pp2qppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 9, - 5y8cbf8d2d4a3fbd48HE55enNimzo-Indian DefenseNormal Variation, Gligoric System, Bronstein Variationr1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 9. - 7{126de6e54224ad1aE65enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Exchange Liner1bq1rk1/pp2ppbp/2n2np1/2p5/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 90 -7{cb363b981843038fE65enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Exchange Liner1bq1rk1/pp2ppbp/2np1np1/2P5/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8, -7{ dd154f69fa543a54TE65enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Exchange Linernbq1rk1/pp1pppbp/5np1/2p5/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6tk -5U391bf0876329a876vE21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbqk2r/pp1p1ppp/4pn2/8/1bPN4/2N3P1/PP2PP1P/R1BQKB1R b KQkq - 0 6j -5U5e8fadda72183a58XE21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbqk2r/pp1p1ppp/4pn2/8/1bPp4/2N2NP1/PP2PP1P/R1BQKB1R w KQkq - 0 6` - 5G8af9eae9ae4610c8E24enNimzo-Indian DefenseSämisch, Botvinnik Variationrnbq1rk1/pp3ppp/4p3/2pn4/3P4/P1P1PP2/6PP/R1BQKBNR w KQ - 0 9_ -5G151790a411a30d94E24enNimzo-Indian DefenseSämisch, Botvinnik Variationrnbq1rk1/pp3ppp/4pn2/2pP4/3P4/P1P1PP2/6PP/R1BQKBNR b KQ - 0 8^ -5G 1b3d0b69b36d1989E24enNimzo-Indian DefenseSämisch, Botvinnik Variationrnbq1rk1/pp3ppp/4pn2/2pp4/2PP4/P1P1PP2/6PP/R1BQKBNR w KQ - 1 8 U ? _\ ] R-nnnnnnnnnn) U#s -5E1456866b5391d9388E41enNimzo-Indian DefenseHübner Variation, Main Liner1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/2PBPN2/P4PPP/R1BQK2R b KQkq - 0 7r -5E5f83ec5afecd3678xE41enNimzo-Indian DefenseHübner Variation, Main Liner1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/2bBPN2/PP3PPP/R1BQK2R w KQkq - 0 7q -5E7eba975ce3756472rE41enNimzo-Indian DefenseHübner Variation, Main Liner1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6f - [ bb7acb577b72fd311E51enNimzo-Indian Defense, Ragozin Variationr1bq1rk1/ppp2ppp/2n1pn2/8/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8(X - 5q4f89b23939190a377E53enNimzo-Indian DefenseNormal Variation, Gligoric System, Keres Variationrnbq1rk1/p4ppp/1p2pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8(W -5q 24e0fb29c79abdacE53enNimzo-Indian DefenseNormal Variation, Gligoric System, Keres Variationrnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 b - - 1 7' - 7id1bda168b3fd5613E62enKing's Indian DefenseFianchetto Variation, Lesser Simagin (Spassky)r2q1rk1/ppp1ppbp/2np1np1/5b2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 4 8  - 7Wb24068b0cb3b08a9E62enKing's Indian DefenseFianchetto Variation, Kavalek Defensernb2rk1/pp2ppbp/2pp1np1/q7/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 - 7Ue82a9465d5ac20abE62enKing's Indian DefenseFianchetto Variation, Larsen Defensern1q1rk1/pp2ppbp/2pp1np1/5b2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 J - 5O1703807427325060`E53enNimzo-Indian DefenseNormal Variation, Gligoric Systemr1bq1rk1/pp1n1ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8 v - 7[507702d4439d5174tE62enKing's Indian DefenseFianchetto Variation, Simagin Variationr2q1rk1/ppp1ppbp/2np1np1/8/2PP2b1/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 3 8z,< - 5u8f0d23cbd60b18afE56enNimzo-Indian DefenseNormal Variation, Gligoric System, Bernstein Defenser1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8$. - 7ad8dcc0ac97fda7a8E62enKing's Indian DefenseFianchetto Variation, Uhlmann-Szabo Systemr1bq1rk1/ppp2pbp/2np1np1/4p3/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8#- -7a52a4c8e604185f9eE62enKing's Indian DefenseFianchetto Variation, Uhlmann-Szabo Systemr1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 3 7 , -7a a933d044c6fadd47GE62enKing's Indian DefenseFianchetto Variation, Uhlmann-Szabo Systemr1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 7 %tB ~ _  c%%%%%% R(W - 9iaba1a5923bb6117azE12enQueen's Indian DefenseKasparov-Petrosian Variation, Petrosian Attackrn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 7)J - 9ic28bea68f46924d4E12enQueen's Indian DefenseKasparov-Petrosian Variation, Polovodin Gambitrn1qkb1r/pbp2ppp/1p2p3/3n4/3PP3/P1N2N2/1P3PPP/R1BQKB1R b KQkq - 0 7( -O e4ceb7857fc8ede9E15enQueen's Indian, Buerger Variationrnbqkb1r/p1pppppp/1p3n2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 330 - O 8e803fe06d8a772e.E15enQueen's Indian, Buerger Variationrn1qkb1r/pb1p1ppp/1p3n2/2pp2N1/2P5/6P1/PP2PPBP/RNBQK2R b KQkq - 1 7 # - 9347e1e86b90e31ad7E17enQueen's Indian DefenseOpocensky Variationrn1qk2r/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP1BPPBP/R2QK2R b KQkq - 6 7 " -936e6cb2de028271d3E17enQueen's Indian DefenseOpocensky Variationrn1qk2r/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 5 7 0)E -9id9be1592d75a50f9E12enQueen's Indian DefenseKasparov-Petrosian Variation, Polovodin Gambitrn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5#= - 9ae9e11b7fdd364d2d-E15enQueen's Indian DefenseFianchetto Variation, Rubinstein Variationrn1qkb1r/pb1p1ppp/1p3n2/2pp4/2P4N/6P1/PP2PPBP/RNBQK2R b KQkq - 1 7$< -9ad852de35c4468f8aE15enQueen's Indian DefenseFianchetto Variation, Rubinstein Variationrn1qkb1r/pb1p1ppp/1p3n2/2pp4/2P5/5NP1/PP2PPBP/RNBQK2R w KQkq - 0 7$; -9ae74607f1dee34f41AE15enQueen's Indian DefenseFianchetto Variation, Rubinstein Variationrn1qkb1r/pb1p1ppp/1p2pn2/2pP4/2P5/5NP1/PP2PPBP/RNBQK2R b KQkq - 0 6 - 9) 57881034010e2766fE17enQueen's Indian DefenseEuwe Variationrn1q1rk1/pbppbppp/1p2pn2/8/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7 -9) db2e7060db834c0b E17enQueen's Indian DefenseEuwe Variationrn1q1rk1/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 5 7 - 9[ 5f9a7eeb5c2be71fE17enQueen's Indian DefenseFianchetto Variation, Kramnik Variationrn1q1rk1/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQR1K1 b - - 6 7#| - 9a20b968c21961ced2E18enQueen's Indian DefenseClassical Variation, Traditional Variationrn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 7o - 51 b2923fa1e0a56cdbE25enNimzo-Indian DefenseSämisch Variationrnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 7n - 51 bcb8a46c426b78c6E25enNimzo-Indian DefenseSämisch Variationrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 7  =_ w Ns===========DDDDDDP - 9W34a8a5435d6604322E15enQueen's Indian DefenseFianchetto Variation, Check Variationrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/1P3NP1/P3PP1P/RNBQKB1R w KQkq - 1 6"F - 9]5d4e44a247c5d91cE15enQueen's Indian DefenseFianchetto Variation, Sämisch Variationrn1qkb1r/pb1p1ppp/1p2pn2/2p5/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 0 6 E -9]bb3f950cb882d261aE15enQueen's Indian DefenseFianchetto Variation, Sämisch Variationrn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 2 5 z < - 95727efc0af3751a43CE16enQueen's Indian DefenseCapablanca Variationrn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6 2 - 97 aff3e6e372297ef0E17enQueen's Indian DefenseTraditional Variationrn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6( -  5Gad77a362c4549001E21enNimzo-Indian DefenseThree Knights, Euwe Variationrnbqk2r/pp1p1ppp/4p3/2pP4/1bP1n3/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 1 6  - 5[f77b85e8edb0a0c6E21enNimzo-Indian DefenseThree Knights Variation, Shocron Gambitrnbqk2r/p2p1ppp/4pn2/1ppP4/1bP5/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6 - 5Y18e419d2406bb012E23enNimzo-Indian DefenseSpielmann Variation, Romanovsky Gambitr1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6 - 5Yb309c13051fa1511E23enNimzo-Indian DefenseSpielmann Variation, Romanovsky Gambitrnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5 k F  r 8c'  - +[a73a463d2a460795E09enCatalan OpeningClosed Variation, Traditional Variationr1bq1rk1/p2nbppp/1pp1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 w - - 0 9  - +Yac5765384f680d333E09enCatalan OpeningClosed Variation, Rabinovich Variationr1bq1rk1/p2nbppp/2p1pn2/1p1p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 w - - 0 9 -+Yb2267419a8366b1eE09enCatalan OpeningClosed Variation, Rabinovich Variationr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B1K2R w KQ - 3 8 -+Yb88e99ae7d6f82f5E09enCatalan OpeningClosed Variation, Rabinovich Variationr1bqk2r/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B1K2R b KQkq - 2 7 ++Yd7ebad330825a8cE09enCatalan OpeningClosed Variation, Rabinovich Variationr1bqk2r/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPP1P/R1B1KB1R w KQkq - 1 7 -+Y3e9dc18ed02ab740@E09enCatalan OpeningClosed Variation, Rabinovich Variationrnbqk2r/pp2bppp/2p1pn2/3p4/2PP4/5NP1/PPQNPP1P/R1B1KB1R b KQkq - 0 6 -+Y127b7acf30fd6f78xE09enCatalan OpeningClosed Variation, Rabinovich Variationrnbqk2r/pp2bppp/2p1pn2/3p4/2PP4/5N2/PPQNPPPP/R1B1KB1R w KQkq - 2 6 ++Y6b70920fa56c3e9E09enCatalan OpeningClosed Variation, Rabinovich Variationrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/5N2/PPQNPPPP/R1B1KB1R b KQkq - 1 5 -+Y5fd9b14260ab6bd9E09enCatalan OpeningClosed Variation, Rabinovich Variationrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/5N2/PPQ1PPPP/RNB1KB1R w KQkq - 0 5 -+Y29ae43737889fb8bE09enCatalan OpeningClosed Variation, Rabinovich Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/5N2/PPQ1PPPP/RNB1KB1R b KQkq - 3 4p - 5U 92edfdd97a62de83E21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbq1rk1/pp3ppp/4p3/3n4/1b1N4/2N3P1/PP2PPBP/R1BQK2R w KQ - 0 9o +5U d038794c587c3dfE21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbq1rk1/pp3ppp/4pn2/3P4/1b1N4/2N3P1/PP2PPBP/R1BQK2R b KQ - 0 8n +5U 3291c596749d7c2E21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbq1rk1/pp3ppp/4pn2/3p4/1bPN4/2N3P1/PP2PPBP/R1BQK2R w KQ - 0 8m -5U 86433e4dfb9d99e4E21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbq1rk1/pp1p1ppp/4pn2/8/1bPN4/2N3P1/PP2PPBP/R1BQK2R b KQ - 2 7l -5U 33b31d30b670419dE21enNimzo-Indian DefenseRomanishin Variation, English Hybridrnbq1rk1/pp1p1ppp/4pn2/8/1bPN4/2N3P1/PP2PP1P/R1BQKB1R w KQ - 1 7  N  x3 - -7679c7dec0dd62005E10enTarrasch DefenseSymmetrical Variationr1bqkb1r/pp3ppp/2n1pn2/2pp4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 2 6 --7cc71a50e1c478506E10enTarrasch DefenseSymmetrical Variationrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5 --7 37e6bdacdea507dfE10enTarrasch DefenseSymmetrical Variationrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 --7b28c9fb8427149f9E10enTarrasch DefenseSymmetrical Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4  - 9Sa07a68a1e105e50d E12enQueen's Indian DefensePetrosian Variation, Farago Defensern1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/P4N2/1PQ1PPPP/RNB1KB1R w KQkq - 3 6 -9S272c546b7751cd61aE12enQueen's Indian DefensePetrosian Variation, Farago Defensern1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/P4N2/1PQ1PPPP/RNB1KB1R b KQkq - 2 5 -9S963526766587f105E12enQueen's Indian DefensePetrosian Variation, Farago Defensern1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/P4N2/1P2PPPP/RNBQKB1R w KQkq - 1 5 C$x - 9[974806a002c2909fE12enQueen's Indian DefenseKasparov-Petrosian Variation, Main Linern1qkb1r/pbp2ppp/1p2pn2/3p4/2PP4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 0 6M,n - 9o282a682b2c5f5343CE12enQueen's Indian DefenseKasparov-Petrosian Variation, Andersson Variationrn1qkb1r/pbpp1ppp/1p2p3/8/2PPn3/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 3 6$d + 9c6ee575b54bd7228(E12enQueen's Indian DefenseKasparov-Petrosian Variation, Marco Defensern1qk2r/pbppbppp/1p2pn2/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 3 6-Z - 9mfb9677efe5994cf2E12enQueen's Indian DefenseKasparov-Petrosian Variation, Hedgehog Variationrn1qkb1r/pbpp1p1p/1p2pnp1/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 0 6  ! Y -jjjj-{ + -+cecdd5d11c5c0f4D32enTarrasch DefenseTarrasch Gambitrnbqkbnr/p4ppp/8/1pP5/N2p4/8/PP2PPPP/R1BQKBNR w KQkq b6 0 7z --+8ef2dc7d5564471eD32enTarrasch DefenseTarrasch Gambitrnbqkbnr/pp3ppp/8/2P5/N2p4/8/PP2PPPP/R1BQKBNR b KQkq - 1 6{ --+4d6635086a4c8454TD32enTarrasch DefenseTarrasch Gambitrnbqkbnr/pp3ppp/8/2P5/3p4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6{ --+af0b5f66a673aeb3D32enTarrasch DefenseTarrasch Gambitrnbqkbnr/pp3ppp/8/2Pp4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 5 - -/54984881b4234f54TD33enTarrasch DefenseSwedish Variationr1bqkbnr/pp3ppp/2n5/3p4/2pP4/2N2NP1/PP2PP1P/R1BQKB1R w KQkq - 0 7  - --d769c6167135a44fOD33enTarrasch DefensePrague Variationr1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R w KQkq - 1 7 z - ;S845945699b1196f9D37enQueen's Gambit DeclinedHarrwitz Attack, Fianchetto Defensernbq1rk1/p1p1bppp/1p2pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 7y -;Sef300c7965922162bD37enQueen's Gambit DeclinedHarrwitz Attack, Fianchetto Defensernbq1rk1/ppp1bppp/4pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6x -;S421d4ecb41cda9c6D37enQueen's Gambit DeclinedHarrwitz Attack, Fianchetto Defensernbq1rk1/ppp1bppp/4pn2/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 6 6 Cu -;Sc80f7108a00eebd8D37enQueen's Gambit DeclinedHarrwitz Attack, Fianchetto Defensernbqk1nr/ppp1bppp/4p3/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4n - ;O7d4ae1961252f2d9D37enQueen's Gambit DeclinedHarrwitz Attack, Orthodox Defensernbq1rk1/pp2bppp/2p1pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 7>  8 s v_yO88888888888888ooooo2 - 11d97a2a98d41adff5D05enRubinstein OpeningBogoljubov Defenser1bq1rk1/pp3ppp/2nbpn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 w - - 5 81 -11d3d2c72f0143361eD05enRubinstein OpeningBogoljubov Defenser1bqk2r/pp3ppp/2nbpn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 b kq - 4 70 -1113ae2d2accdfaaf1D05enRubinstein OpeningBogoljubov Defenser1bqk2r/pp3ppp/2nbpn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQ1RK1 w kq - 3 7$ - 1/69ee34f5c1aba240@D05enRubinstein OpeningClassical Defenser1bq1rk1/pp2bppp/2n1pn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 w - - 5 8# -1/6346d94214f24babD05enRubinstein OpeningClassical Defenser1bqk2r/pp2bppp/2n1pn2/2pp4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 b kq - 4 7" -1/a33a3347d96ed744DD05enRubinstein OpeningClassical Defenser1bqk2r/pp2bppp/2n1pn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQ1RK1 w kq - 3 7x / -11b7f640a813c57bd5D05enRubinstein OpeningBogoljubov Defenser1bqkb1r/pp3ppp/2n1pn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQ1RK1 b kq - 2 6 . -11c9833b9c6f36a0c5D05enRubinstein OpeningBogoljubov Defenser1bqkb1r/pp3ppp/2n1pn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQK2R w KQkq - 1 6 H - ;?6246182cd7c02169iD12enQueen's Gambit DeclinedSlav, Amsterdam Variationrn1qkb1r/pp1n1ppp/4p3/3pNb2/3P4/2N1P3/PP3PPP/R1BQKB1R w KQkq - 2 8 -;?9b011b8a7a0c289cD12enQueen's Gambit DeclinedSlav, Amsterdam Variationrn1qkb1r/pp3ppp/4pn2/3pNb2/3P4/2N1P3/PP3PPP/R1BQKB1R b KQkq - 1 7 -;?4639c44521814deaD12enQueen's Gambit DeclinedSlav, Amsterdam Variationrn1qkb1r/pp3ppp/4pn2/3p1b2/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 0 7^ uS F F +H * uuuuFFvvv g= - %C 55f15101c70ff3d7C52enItalian GameEvans Gambit, Waller Attackr1bqk1nr/ppp2ppp/2np4/b7/2BpP3/1QP2N2/P4PPP/RNB2RK1 b kq - 1 8 -%C 6f08f2b9f2345b311C52enItalian GameEvans Gambit, Waller Attackr1bqk1nr/ppp2ppp/2np4/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 0 8 u - %K 22c943e3388a0b02C52enItalian GameEvans Gambit, Richardson Attackr1bq1rk1/pppp1ppp/2n2n2/b3N3/2BPP3/2P5/P4PPP/RNBQ1RK1 b - - 0 8 t -%K9c8ab7189c94ae344C52enItalian GameEvans Gambit, Richardson Attackr1bq1rk1/pppp1ppp/2n2n2/b3p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1 w - - 1 8W - %ebe690aa70e5bc025%C57enItalian GameTwo Knights Defense, Fritz, Gruber Variationr1bqkb1r/p1p2ppp/8/1p1np3/3nN3/2P5/PP1P1PPP/RNBQKB1R b KQkq - 1 8V -%e8909de561f7227caC57enItalian GameTwo Knights Defense, Fritz, Gruber Variationr1bqkb1r/p1p2ppp/8/1p1np1N1/3n4/2P5/PP1P1PPP/RNBQKB1R w KQkq - 0 8U -%e16e7a41ba0973a96C57enItalian GameTwo Knights Defense, Fritz, Gruber Variationr1bqkb1r/p1p2ppp/5n2/1p1Pp1N1/3n4/2P5/PP1P1PPP/RNBQKB1R b KQkq - 1 7T -%e7554103388d4ec300C57enItalian GameTwo Knights Defense, Fritz, Gruber Variationr1bqkb1r/p1p2ppp/5n2/1p1Pp1N1/2Bn4/2P5/PP1P1PPP/RNBQK2R w KQkq - 0 7S -%e15507a261379510d C57enItalian GameTwo Knights Defense, Fritz, Gruber Variationr1bqkb1r/ppp2ppp/5n2/3Pp1N1/2Bn4/2P5/PP1P1PPP/RNBQK2R b KQkq - 0 6M f - %K 2d0466108a21975c\C56enItalian GameScotch Gambit, Anderssen Attackr1b1kb1r/ppp2ppp/2n5/3q4/3pn3/2N2N2/PPP2PPP/R1BQR1K1 b kq - 1 8 e -%Kd6937eb248c31585C56enItalian GameScotch Gambit, Anderssen Attackr1b1kb1r/ppp2ppp/2n5/3q4/3pn3/5N2/PPP2PPP/RNBQR1K1 w kq - 0 8 d -%K9ebda0e71046bc82C56enItalian GameScotch Gambit, Anderssen Attackr1bqkb1r/ppp2ppp/2n5/3B4/3pn3/5N2/PPP2PPP/RNBQR1K1 b kq - 0 7}H - %3b4237848f7ebab02C58enItalian GameTwo Knights Defenser1bqkb1r/p4ppp/2p2n2/n3p1N1/8/8/PPPPBPPP/RNBQK2R b KQkq - 1 8}G +%3 cab0cb43c7df72b+C58enItalian GameTwo Knights Defenser1bqkb1r/p4ppp/2p2n2/nB2p1N1/8/8/PPPP1PPP/RNBQK2R w KQkq - 0 8F -%3 fb73e240dc52b440@C58enItalian GameTwo Knights Defenser1bqkb1r/pp3ppp/2P2n2/nB2p1N1/8/8/PPPP1PPP/RNBQK2R b KQkq - 0 7E -%3 db216a684541afb7C58enItalian GameTwo Knights Defenser1bqkb1r/pp3ppp/2p2n2/nB1Pp1N1/8/8/PPPP1PPP/RNBQK2R w KQkq - 0 7)9 - % b68977871000a190C58enItalian GameTwo Knights Defense, Polerio Defense, Bogoljubov Variationr1bqkb1r/p4ppp/2p2n2/nB2p1N1/8/5Q2/PPPP1PPP/RNB1K2R b KQkq - 1 8 t i q   4[<]]  -/9 243203910a5b6f83C49enFour Knights GameGunsberg Counterattackr1bq1rk1/pppp1ppp/2n5/1B1Pp3/1b6/5N2/PPPP1PPP/R1BQ1RK1 b - - 0 7 -/91192146c14b8f279yC49enFour Knights GameGunsberg Counterattackr1bq1rk1/pppp1ppp/2n5/1B1np3/1b2P3/5N2/PPPP1PPP/R1BQ1RK1 w - - 0 7  -/996e30b5fe513a8deC49enFour Knights GameGunsberg Counterattackr1bq1rk1/pppp1ppp/2n2n2/1B1Np3/1b2P3/5N2/PPPP1PPP/R1BQ1RK1 b - - 9 6t - /K530a3525918585f2C49enFour Knights GameSymmetrical, Tarrasch Variationr2q1rk1/ppp2ppp/2npbn2/1B2p1B1/1b2P3/2NP1N2/PPP2PPP/R2Q1RK1 w - - 2 8h + -/392be77910b26d115C49enFour Knights GameSvenonius Variationr1bq1rk1/pppp1ppp/2n2n2/1B2p3/4P3/2PP1N2/P1P2PPP/R1BQ1RK1 b - - 0 7u  + /]35a8fa093b675ebC49enFour Knights GameSpanish Variation, Symmetrical Variationr1bq1rk1/ppp1nppp/3p1n2/1B2p1B1/1b2P3/2NP1N2/PPP2PPP/R2Q1RK1 w - - 2 8  +/]7b2a7f1d930fefaC49enFour Knights GameSpanish Variation, Symmetrical Variationr1bq1rk1/ppp2ppp/2np1n2/1B2p1B1/1b2P3/2NP1N2/PPP2PPP/R2Q1RK1 b - - 1 7  - /556dca7dc3c45f4b3C49enFour Knights GameAlatortsev Variationr1b2rk1/ppp1qppp/2n2n2/1B1pp3/1b2P3/3P1N2/PPP1NPPP/R1BQ1RK1 w - - 0 8  -/5d3b685c8a091ba95C49enFour Knights GameAlatortsev Variationr1b2rk1/ppppqppp/2n2n2/1B2p3/1b2P3/3P1N2/PPP1NPPP/R1BQ1RK1 b - - 2 7  -/563adb9d67afec2355C49enFour Knights GameAlatortsev Variationr1b2rk1/ppppqppp/2n2n2/1B2p3/1b2P3/2NP1N2/PPP2PPP/R1BQ1RK1 w - - 1 7 + /9b343eff385eb075uC49enFour Knights GameGunsberg Counterattackr1bq1rk1/pppp1ppp/2n5/1B1P4/1b2p3/5N2/PPPP1PPP/R1BQ1RK1 w - - 0 8 , - /317d4558597f29f333C49enFour Knights GameSvenonius Variationr1bq1rk1/ppp2ppp/2n2n2/1B1pp3/4P3/2PP1N2/P1P2PPP/R1BQ1RK1 w - - 0 8uf - A a205c8bb0d1cf9366C50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/8/4q3/5n2/PPPPBP1P/RNBQKR2 w Qkq - 2 8te -A 50ae147acbd9b4bbC50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/8/3nq3/8/PPPPBP1P/RNBQKR2 b Qkq - 1 7vd -A b84b05014d98adb7C50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/8/2Bnq3/8/PPPP1P1P/RNBQKR2 w Qkq - 0 7uc +A a40897c32dc7799C50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/8/2BnP3/8/PPPP1PqP/RNBQKR2 b Qkq - 1 6wb -A d8d200d481eedf8fC50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/8/2BnP3/8/PPPP1PqP/RNBQK2R w KQkq - 0 6xa -A c45aa707a50b96377C50enBlackburne Shilling Gambitr1b1kbnr/pppp1Npp/8/6q1/2BnP3/8/PPPP1PPP/RNBQK2R b KQkq - 0 5z` -A 30bdec1502867f5f_C50enBlackburne Shilling Gambitr1b1kbnr/pppp1ppp/8/4N1q1/2BnP3/8/PPPP1PPP/RNBQK2R w KQkq - 1 5y_ -A 72408b3c259a4eafC50enBlackburne Shilling Gambitr1bqkbnr/pppp1ppp/8/4N3/2BnP3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4X - %E 36b60ecdbbe1af61aC52enItalian GameEvans Gambit, Johner Defenser1bqk1nr/p1pp1ppp/2n5/bp6/2BpP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 0 8  B <Z< e QjR 8  --= ad74ef5ac60f8bb6C41enPhilidor DefenseHanham, Berger Variationr1bqk2r/pp1nbppp/2pp3n/4p1N1/2BPPP2/8/PPP3PP/RNBQ1RK1 b kq - 2 7  --=d301946ebafc50a6C41enPhilidor DefenseHanham, Berger Variationr1bqk2r/pp1nbppp/2pp3n/4p1N1/2BPPP2/8/PPP3PP/RNBQK2R w KQkq - 1 7  --=c7cde7817057fc377C41enPhilidor DefenseHanham, Berger Variationr1bqkb1r/pp1n1ppp/2pp3n/4p1N1/2BPPP2/8/PPP3PP/RNBQK2R b KQkq - 0 6  --=3adb9a8c69c6c1beC41enPhilidor DefenseHanham, Berger Variationr1bqkb1r/pp1n1ppp/2pp3n/4p1N1/2BPP3/8/PPP2PPP/RNBQK2R w KQkq - 2 6{+ --Kb53f2dded4083316C41enPhilidor DefenseLion Variation, Sozin Variationr1bqk2r/pppnbppp/3p1n2/4p3/2BPP3/2N2N2/PPP2PPP/R1BQ1RK1 b kq - 5 6& --K54b20686c25d1ec0C41enPhilidor DefenseLion Variation, Sozin Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 - -=950068aa22adef99C41enPhilidor DefenseHanham, Berger Variationr1bq1rk1/pp1nbppp/2p4n/3pp1N1/2BPPP2/2P5/PP4PP/RNBQ1RK1 w - - 0 9  --=d106fa75c3266ddbC41enPhilidor DefenseHanham, Berger Variationr1bq1rk1/pp1nbppp/2pp3n/4p1N1/2BPPP2/2P5/PP4PP/RNBQ1RK1 b - - 0 8  --= a7dc02ed1356625d]C41enPhilidor DefenseHanham, Berger Variationr1bq1rk1/pp1nbppp/2pp3n/4p1N1/2BPPP2/8/PPP3PP/RNBQ1RK1 w - - 3 8 - %U 755a2d080b694125%C42enRussian GameClassical Attack, Staunton Variationrnbq1rk1/pp3ppp/2pb4/3p4/2PPn3/3B1N2/PP3PPP/RNBQ1RK1 w - - 0 9 / --Kd022dc485546870c C41enPhilidor DefenseLion Variation, Sozin Variationr1bq1rk1/pp1nbppp/2pp1n2/4p3/P1BPP3/2N2N2/1PP1QPPP/R1B2RK1 b - - 0 8. --Kbbeba2a438d552c2C41enPhilidor DefenseLion Variation, Sozin Variationr1bq1rk1/pp1nbppp/2pp1n2/4p3/2BPP3/2N2N2/PPP1QPPP/R1B2RK1 w - - 0 8- --K29914f4b4f158179yC41enPhilidor DefenseLion Variation, Sozin Variationr1bq1rk1/pppnbppp/3p1n2/4p3/2BPP3/2N2N2/PPP1QPPP/R1B2RK1 b - - 7 7, --Kbf97c0690151dafdC41enPhilidor DefenseLion Variation, Sozin Variationr1bq1rk1/pppnbppp/3p1n2/4p3/2BPP3/2N2N2/PPP2PPP/R1BQ1RK1 w - - 6 7 -%U e720c0e77ca9929eC42enRussian GameClassical Attack, Staunton Variationrnbq1rk1/ppp2ppp/3b4/3p4/2PPn3/3B1N2/PP3PPP/RNBQ1RK1 b - - 0 8 -%U 6b035fc33fa63999C42enRussian GameClassical Attack, Staunton Variationrnbq1rk1/ppp2ppp/3b4/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 w - - 4 8P - { 8a84ad56f6a0adabC39enKing's Gambit Accepted, Kieseritzky Gambit, Rice Gambitrnbqk2r/ppp2p1p/5n2/3Pb3/2B2ppP/8/PPPP2P1/RNBQ1RK1 w kq - 0 9 @ - 9;9ea6c0133df3387d}C39enKing's Gambit AcceptedAllgaier, Horny Defensernbq3r/pppp1k2/3b1n1p/8/4PQ1P/8/PPPP2P1/RNB1KB1R w KQ - 1 9 ? -9;3afead91e2e9e959YC39enKing's Gambit AcceptedAllgaier, Horny Defensernbq1b1r/pppp1k2/5n1p/8/4PQ1P/8/PPPP2P1/RNB1KB1R b KQ - 0 8 > -9;764c03889fc077f7C39enKing's Gambit AcceptedAllgaier, Horny Defensernbq1b1r/pppp1k2/5n1p/8/4PpQP/8/PPPP2P1/RNB1KB1R w KQ - 1 8= -9;2da2377d323a3661aC39enKing's Gambit AcceptedAllgaier, Horny Defensernbq1bnr/pppp1k2/7p/8/4PpQP/8/PPPP2P1/RNB1KB1R b KQ - 0 70 - -K4b5cd6ca913d9319C41enPhilidor DefenseLion Variation, Sozin Variationr1bq1rk1/pp1nbppp/2pp1n2/8/P1BpP3/2N2N2/1PP1QPPP/R1B2RK1 w - - 0 9  y A {| GG<zV - -1{55968f7f5baf82a6C23enBishop's OpeningLisitsyn Variationr2qkbnr/pp3ppp/8/3pn3/8/8/PPP1NPPP/RNBQK2R b KQkq - 1 8yU --1{413264b073848f58XC23enBishop's OpeningLisitsyn Variationr2qkbnr/pp3ppp/8/3pn3/8/8/PPP2PPP/RNBQK1NR w KQkq - 0 8{T --13771e8d552f56473sC23enBishop's OpeningLisitsyn Variationr2qkbnr/pp1n1ppp/8/3pP3/8/8/PPP2PPP/RNBQK1NR b KQkq - 0 7~S --1abec17975ac0d303C23enBishop's OpeningLisitsyn Variationr2qkbnr/pp1n1ppp/8/3pp3/3P4/8/PPP2PPP/RNBQK1NR w KQkq - 0 7R --1cd4b9b1dced97420 C23enBishop's OpeningLisitsyn Variationrn1qkbnr/pp1B1ppp/8/3pp3/3P4/8/PPP2PPP/RNBQK1NR b KQkq - 0 6Q --1 a707df18fec58078xC23enBishop's OpeningLisitsyn Variationrn1qkbnr/pp1b1ppp/8/1B1pp3/3P4/8/PPP2PPP/RNBQK1NR w KQkq - 2 6P --145c6214a249f5049IC23enBishop's OpeningLisitsyn Variationrnbqkbnr/pp3ppp/8/1B1pp3/3P4/8/PPP2PPP/RNBQK1NR b KQkq - 1 5~O --1ed7d6267c66f9065eC23enBishop's OpeningLisitsyn Variationrnbqkbnr/pp3ppp/8/3pp3/2BP4/8/PPP2PPP/RNBQK1NR w KQkq - 0 5N --19e0dcd2e66059ddfC23enBishop's OpeningLisitsyn Variationrnbqkbnr/pp3ppp/2p5/3Pp3/2BP4/8/PPP2PPP/RNBQK1NR b KQkq - 0 4M --1 b9d2c763bc6adfd9C23enBishop's OpeningLisitsyn Variationrnbqkbnr/pp3ppp/2p5/3pp3/2BPP3/8/PPP2PPP/RNBQK1NR w KQkq - 0 4L --1 3cb8e57720be91ffC23enBishop's OpeningLisitsyn Variationrnbqkbnr/pp1p1ppp/2p5/4p3/2BPP3/8/PPP2PPP/RNBQK1NR b KQkq - 0 3 G - #g241286913c6ebea9C25enVienna GameVienna Gambit, Hamppe-Allgaier-Thorold Gambitr1bq1bnr/pppp1k2/2n4p/8/3PPppP/2N5/PPP3P1/R1BQKB1R b KQ - 0 8F -#ge127a93b2da793ebC25enVienna GameVienna Gambit, Hamppe-Allgaier-Thorold Gambitr1bq1bnr/pppp1k2/2n4p/8/4PppP/2N5/PPPP2P1/R1BQKB1R w KQ - 0 8E -#g 34e827f128ef068aC25enVienna GameVienna Gambit, Hamppe-Allgaier-Thorold Gambitr1bqkbnr/pppp1N2/2n4p/8/4PppP/2N5/PPPP2P1/R1BQKB1R b KQkq - 0 7D -#g4be552f97d2372300C25enVienna GameVienna Gambit, Hamppe-Allgaier-Thorold Gambitr1bqkbnr/pppp1p2/2n4p/6N1/4PppP/2N5/PPPP2P1/R1BQKB1R w KQkq - 0 7 A#c - )k544546aad9f61ae2C06enFrench DefenseTarrasch Variation, Closed Variation, Main Liner1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7 $ D&Ae///// -)i 9642e40c8d8df274tC15enFrench DefenseWinawer, Alekhine Gambit, Alatortsev Variationrnbqk2r/ppp1bppp/4pn2/8/3PN3/P5N1/1PP2PPP/R1BQKB1R b KQkq - 2 7 -)i 450766de8ad2fa0eC15enFrench DefenseWinawer, Alekhine Gambit, Alatortsev Variationrnbqk2r/ppp1bppp/4pn2/8/3PN3/P7/1PP1NPPP/R1BQKB1R w KQkq - 1 7 -)i 1ee9522b2728bb98C15enFrench DefenseWinawer, Alekhine Gambit, Alatortsev Variationrnbqk1nr/ppp1bppp/4p3/8/3PN3/P7/1PP1NPPP/R1BQKB1R b KQkq - 0 6 -)i b42b6cd867de2a0fC15enFrench DefenseWinawer, Alekhine Gambit, Alatortsev Variationrnbqk1nr/ppp1bppp/4p3/8/3Pp3/P1N5/1PP1NPPP/R1BQKB1R w KQkq - 1 6u - )[ af1d5da2e0e00801C12enFrench DefenseMacCutcheon Variation, Lasker Variationrnbqk2r/ppp2pp1/4p2p/3pP3/3Pn3/2P5/P1PB1PPP/R2QKBNR w KQkq - 1 8 -)[ 9515113d52a985fbC12enFrench DefenseMacCutcheon Variation, Lasker Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/3P4/2P5/P1PB1PPP/R2QKBNR b KQkq - 0 7 Sq - )i 448752a04860f43f?C15enFrench DefenseWinawer, Alekhine Gambit, Alatortsev Variationr1bq1rk1/ppp1bppp/2n1pn2/8/3PN3/P5N1/1PP1BPPP/R1BQK2R w KQ - 5 9 -)i ef6a8a4259f1513c  mSSSSSSSSSzn - )Od78e9152e02a84300C02enFrench DefenseAdvance Variation, Euwe Variationr2qkbnr/pp1b1ppp/2n1p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R w KQkq - 3 6lx - )I611114d566e78de9C01enFrench DefenseExchange, Bogoljubov Variationr1bqkb1r/ppp2ppp/2n2n2/3p2B1/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 4 6 u -)I5748aff46a06b2b4C01enFrench DefenseExchange, Bogoljubov Variationrnbqkbnr/ppp2ppp/8/3p4/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 4d - )Obb9cb7e73bf0f7e9C02enFrench DefenseAdvance Variation, Wade Variationrn2kbnr/pp1b1ppp/1q2p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R w KQkq - 3 6c -)O595d49b5e1aa27d8C02enFrench DefenseAdvance Variation, Wade Variationrnb1kbnr/pp3ppp/1q2p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R b KQkq - 2 5b -)O 8239a543894c46e5C02enFrench DefenseAdvance Variation, Wade Variationrnb1kbnr/pp3ppp/1q2p3/2ppP3/3P4/2P5/PP3PPP/RNBQKBNR w KQkq - 1 5 - -9 ad2226cdb2fee70c B80enSicilian DefenseScheveningen Variationrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 + -/ 9a2250f4dfc8f82B90enSicilian DefenseNajdorf Variationrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6Z - )_ f425212cc6c25656VC03enFrench DefenseGuimard Variation, Thunderbunny Variationr1bqkbnr/ppp2ppp/2n5/4p3/3PN3/2P5/PP3PPP/R1BQKBNR w KQkq - 0 6Y -)_ f0fcfdfde222bb3b;C03enFrench DefenseGuimard Variation, Thunderbunny Variationr1bqkbnr/ppp2ppp/2n1p3/8/3PN3/2P5/PP3PPP/R1BQKBNR b KQkq - 0 5X -)_ f8c763cefacb0045EC03enFrench DefenseGuimard Variation, Thunderbunny Variationr1bqkbnr/ppp2ppp/2n1p3/8/3Pp3/2P5/PP1N1PPP/R1BQKBNR w KQkq - 0 5W -)_304dfcc73332b015C03enFrench DefenseGuimard Variation, Thunderbunny Variationr1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/2P5/PP1N1PPP/R1BQKBNR b KQkq - 0 4 A - -- 32e187a7d153e515B70enSicilian DefenseDragon Variationrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6P - )g10bb880ecd545890C08enFrench DefenseTarrasch Variation, Open System, Advance Linernbqkbnr/pp3ppp/8/3p4/2pP4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 0 6 , - -5 39942aae7086a76foB56enSicilian DefenseKupreichik Variationrn1qkb1r/pp1bpppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6F - )a 6349ea8eb429571eC09enFrench DefenseTarrasch Variation, Open System, Main Liner1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6O -)gc8a4326ca5b8f21dC08enFrench DefenseTarrasch Variation, Open System, Advance Linernbqkbnr/pp3ppp/8/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R b KQkq - 1 5; 4 S X  ` E%oooooog^d@ - -Sec68caf876584cbaB98enSicilian DefenseNajdorf Variation, Traditional Linernb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R w KQkq - 3 9? --Sea77f5d91a1303bbB98enSicilian DefenseNajdorf Variation, Traditional Linernbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R b KQkq - 2 8 ;2p - - 22c4b53d4c4359e8B85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationr1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w kq - 4 91o - - 89296ddf5dd2fcebB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b kq - 3 82n - - f75c16eb212127fbB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R w KQkq - 2 81m - - f14329ca4d6a68faB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R b KQkq - 1 7/l - - 82c3aa334c4f2259YB85enSicilian DefenseScheveningen Variation, Classical Variation, Paulsen Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 7h$` - -s 5a2a0c9e30c6f754TB92enSicilian DefenseNajdorf Variation, Opocensky Variation, Modern Linern1qk2r/1p2bppp/p2pbn2/4p3/4P3/1NN5/PPP1BPPP/R1BQ1RK1 w kq - 4 9#_ +-s e929e4a78738c5c\B92enSicilian DefenseNajdorf Variation, Opocensky Variation, Modern Linernbqk2r/1p2bppp/p2p1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQ1RK1 b kq - 3 8%^ --s70e7e57e0480574cLB92enSicilian DefenseNajdorf Variation, Opocensky Variation, Modern Linernbqk2r/1p2bppp/p2p1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R w KQkq - 2 8&] --s642b9691ce2bfbddB92enSicilian DefenseNajdorf Variation, Opocensky Variation, Modern Linernbqkb1r/1p3ppp/p2p1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7%\ --sf05aaebcdf3c3d17B92enSicilian DefenseNajdorf Variation, Opocensky Variation, Modern Linernbqkb1r/1p3ppp/p2p1n2/4p3/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7)P + -} 43a73fdad2a65b7B92enSicilian DefenseNajdorf Variation, Opocensky Variation, Traditional Linernbq1rk1/1p2bppp/p2p1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQ1RK1 w - - 4 9 ooH  ] : : JJJJJ:  --I53dc3815cde7bb16B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkbnr/pp3ppp/2npp3/1N6/4P3/8/PPP2PPP/RNBQKB1R w KQkq - 0 6(#  - -ie096ac14bc046112B67enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variationr2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9 + -i 2575246665eb123#B67enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variationr1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8( < +-ifaaee392938103d=B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/pp3ppp/2np1n2/1N2p3/4P3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 7"; --i36107858fb405950PB33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/pp1p1ppp/2n2n2/1N2p3/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 60 - -]4718599f407d73ccB33enSicilian DefenseLasker-Pelikan Variation, Bird Variationr2qkb1r/1p3ppp/p1npbn2/4p1B1/4P3/N1N5/PPP2PPP/R2QKB1R w KQkq - 2 9 - -O 16b99d160e954908B76enSicilian DefenseDragon Variation, Yugoslav Attackr1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R w KQ - 3 9 --O bd5445f41f04ec0b B76enSicilian DefenseDragon Variation, Yugoslav Attackrnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R b KQ - 2 8#> --i1b0748fc7e923329)B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/1p3ppp/p1np1n2/1N2p1B1/4P3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 8#= --ic9f0b90f99b2cbf5B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/pp3ppp/2np1n2/1N2p1B1/4P3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 7 - -Ie1d06bfd9101922d-B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkb1r/1p3ppp/p1n1pn2/3p4/2P1P3/N1N5/PP3PPP/R1BQKB1R w KQkq - 0 9 --Ia5d6f922708a106foB44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkb1r/1p3ppp/p1nppn2/8/2P1P3/N1N5/PP3PPP/R1BQKB1R b KQkq - 1 8 --Iad717a9506d02b82B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkb1r/1p3ppp/p1nppn2/1N6/2P1P3/2N5/PP3PPP/R1BQKB1R w KQkq - 0 8 --I7f868b66e1f0d35e^B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkb1r/pp3ppp/2nppn2/1N6/2P1P3/2N5/PP3PPP/R1BQKB1R b KQkq - 2 7 --I 841193c423125187B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkb1r/pp3ppp/2nppn2/1N6/2P1P3/8/PP3PPP/RNBQKB1R w KQkq - 1 7  --I dfffa7318ee81011B44enSicilian DefensePaulsen Variation, Gary Gambitr1bqkbnr/pp3ppp/2npp3/1N6/2P1P3/8/PP3PPP/RNBQKB1R b KQkq - 0 6   (3 v . G:!N --i318cb342eaa2da18B22enSicilian DefenseAlapin Variation, Stoltz Attack, Ivanchuk Liner1b1kb1r/ppqppppp/1nn5/4P3/2p5/2P2N2/PPBP1PPP/RNBQK2R w KQkq - 2 8!M --i37938c6386e99519B22enSicilian DefenseAlapin Variation, Stoltz Attack, Ivanchuk Liner1bqkb1r/pp1ppppp/1nn5/4P3/2p5/2P2N2/PPBP1PPP/RNBQK2R b KQkq - 1 7#L --ic7aaeae41fbbd495B22enSicilian DefenseAlapin Variation, Stoltz Attack, Ivanchuk Liner1bqkb1r/pp1ppppp/1nn5/4P3/2p5/1BP2N2/PP1P1PPP/RNBQK2R w KQkq - 0 7N#@ - -i73a4a15e9365b5f9B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/5ppp/p1np1n2/1p2p1B1/4P3/N1N5/PPP2PPP/R2QKB1R w KQkq - 0 9 ` - -c3b330f1170a7900c B21enSicilian DefenseSmith-Morra Gambit Accepted, Larsen Defenser1b1k1nr/1pqp1ppp/p1nbp3/8/2B1P3/2N2N2/PP2QPPP/R1B2RK1 w kq - 2 9_ --c9f6b6293afbd4128(B21enSicilian DefenseSmith-Morra Gambit Accepted, Larsen Defenser1b1kbnr/1pqp1ppp/p1n1p3/8/2B1P3/2N2N2/PP2QPPP/R1B2RK1 b kq - 1 8^ --ce11e19a7d34e9a388B21enSicilian DefenseSmith-Morra Gambit Accepted, Larsen Defenser1b1kbnr/1pqp1ppp/p1n1p3/8/2B1P3/2N2N2/PP2QPPP/R1B1K2R w KQkq - 0 8] --c33e9e854346e62e4B21enSicilian DefenseSmith-Morra Gambit Accepted, Larsen Defenser1b1kbnr/ppqp1ppp/2n1p3/8/2B1P3/2N2N2/PP2QPPP/R1B1K2R b KQkq - 3 7\ --ca5ef67767a2a3960`B21enSicilian DefenseSmith-Morra Gambit Accepted, Larsen Defenser1b1kbnr/ppqp1ppp/2n1p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 2 7#P - -i27c9ccbd30527e16B22enSicilian DefenseAlapin Variation, Stoltz Attack, Ivanchuk Liner1b1kb1r/ppqppp1p/1nn5/4P1p1/2p5/2P2N2/PPBPQPPP/RNB1K2R w KQkq - 0 9"O --ia78a3c60a4e6819cB22enSicilian DefenseAlapin Variation, Stoltz Attack, Ivanchuk Liner1b1kb1r/ppqppppp/1nn5/4P3/2p5/2P2N2/PPBPQPPP/RNB1K2R b KQkq - 3 8#? --i13a0cb4b08c808c4B33enSicilian DefenseLasker-Pelikan Variation, Sveshnikov Variationr1bqkb1r/1p3ppp/p1np1n2/4p1B1/4P3/N1N5/PPP2PPP/R2QKB1R b KQkq - 1 8=  ch: ? Ucc~ + //1499489a184b90d B15enCaro-Kann DefenseForgacs Variationrnbqkb1r/pp3ppp/2p2p2/8/2BP4/8/PPP2PPP/R1BQK1NR b KQkq - 1 6 % + /s 798d1c896e2e4c2B17enCaro-Kann DefenseKarpov Variation, Modern Variation, Kasparov Attackr1bqkb1r/pp1npppp/2p2n2/8/3P4/5NN1/PPP2PPP/R1BQKB1R b KQkq - 4 6% -/s 7aaf610769959f300B17enCaro-Kann DefenseKarpov Variation, Modern Variation, Kasparov Attackr1bqkb1r/pp1npppp/2p2n2/8/3PN3/5N2/PPP2PPP/R1BQKB1R w KQkq - 3 6$ -/s 214155f2c46fdea6B17enCaro-Kann DefenseKarpov Variation, Modern Variation, Kasparov Attackr1bqkbnr/pp1npppp/2p5/8/3PN3/5N2/PPP2PPP/R1BQKB1R b KQkq - 2 5 r - /U 5a6baa2e14c61b63cB18enCaro-Kann DefenseClassical Variation, Maróczy Attackrn1qkbnr/pp2pppp/2p3b1/8/3P1P2/6N1/PPP3PP/R1BQKBNR b KQkq - 0 6~ -/U a77dd7230d5726eaB18enCaro-Kann DefenseClassical Variation, Maróczy Attackrn1qkbnr/pp2pppp/2p3b1/8/3P4/6N1/PPP2PPP/R1BQKBNR w KQkq - 3 6} -/U 37e81b1804b32028(B18enCaro-Kann DefenseClassical Variation, Maróczy Attackrn1qkbnr/pp2pppp/2p5/5b2/3P4/6N1/PPP2PPP/R1BQKBNR b KQkq - 2 5t - /U ccb30dac457259300B18enCaro-Kann DefenseClassical Variation, Flohr Variationrn1qkbnr/pp2pppp/2p3b1/8/3P4/6NN/PPP2PPP/R1BQKB1R b KQkq - 4 6i - /I 3bde4b0aa6685f94B18enCaro-Kann DefenseClassical Variation, Main Linern1qkbnr/pp2pppp/2p3b1/8/3P3P/6N1/PPP2PP1/R1BQKBNR b KQkq - 0 6^ - -K1fb5508677577e18B22enSicilian DefenseAlapin Variation, Stoltz Attackr1bqkb1r/pp1ppppp/1nn5/2p1P3/8/1BP2N2/PP1P1PPP/RNBQK2R b KQkq - 6 6  rV X4Srrrrrrrrrrr - -e c0caa1c68a23fa79yB21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/5ppp/p1npp3/1p6/2B1P3/2N2N2/PP2QPPP/R1B2RK1 w kq - 0 9 --e a0cecbd3118e4744DB21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/1p3ppp/p1npp3/8/2B1P3/2N2N2/PP2QPPP/R1B2RK1 b kq - 1 8~ --e 36c844f15fca1cc0B21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/1p3ppp/p1npp3/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 w kq - 0 8} --e e43fb502b8eae41cB21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/pp3ppp/2npp3/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 b kq - 1 7sBz --e 7894b4a17e87175c\B21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/pp1p1ppp/2n1p3/8/2B1P3/2N5/PP3PPP/R1BQK1NR w KQkq - 0 6y +-e ee3469066a5870eB21enSicilian DefenseSmith-Morra Gambit Accepted, Sozin Formationr1bqkbnr/pp1ppppp/2n5/8/2B1P3/2N5/PP3PPP/R1BQK1NR b KQkq - 2 5&p + -ub6fecfc570b52f7B21enSicilian DefenseSmith-Morra Gambit Accepted, Morphy Defense Deferredr1bqk1nr/3p1ppp/p1n1p3/1pb5/4P3/1BN2N2/PP3PPP/R1BQ1RK1 w kq - 2 9%o --u a672a8a79d39b874tB21enSicilian DefenseSmith-Morra Gambit Accepted, Morphy Defense Deferredr1bqkbnr/3p1ppp/p1n1p3/1p6/4P3/1BN2N2/PP3PPP/R1BQ1RK1 b kq - 1 8'n --u6f76b885161fe890B21enSicilian DefenseSmith-Morra Gambit Accepted, Morphy Defense Deferredr1bqkbnr/3p1ppp/p1n1p3/1p6/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 w kq - 0 8&m +-uf72d2908db255adB21enSicilian DefenseSmith-Morra Gambit Accepted, Morphy Defense Deferredr1bqkbnr/1p1p1ppp/p1n1p3/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 b kq - 1 7  x $yb WcWHHHHH~ - 7M7eb5607c4937e69eE77enKing's Indian DefenseFour Pawns Attack, Normal Attackrnbq1rk1/pp3pbp/3ppnp1/2pP4/2P1PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 8 +7Md35e3854812ac3d=E77enKing's Indian DefenseFour Pawns Attack, Normal Attackrnbq1rk1/pp3pbp/3ppnp1/2pP4/2P1PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 0 8P%g - 5o f6e6c21b95a4534fOE54enNimzo-Indian DefenseNormal Variation, Gligoric System, Exchange at c4rnbq1rk1/pp3ppp/4pn2/2p5/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8%V -7if364491a01920e07E61enKing's Indian DefenseSemi-Classical Variation, Queenside Storm Liner1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R w KQ - 2 7P&h - 5o bf5cf670aa975084E54enNimzo-Indian DefenseNormal Variation, Gligoric System, Exchange at c4rnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 b - - 0 8/J + 7yedd5a1b6279c2beE66enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Advance Liner1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 80I - 7yb4d51948fb5f54e3E66enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Advance Liner1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 lc'; - 7icc740347bc49840a E67enKing's Indian DefenseFianchetto Variation, Double Fianchetto Attackr1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8, - i 84d56e5b8d44526dmE68enKing's Indian, Fianchetto, Classical Variationr1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8. - 7sd44b36cdb87d8ed2E94enKing's Indian DefenseOrthodox Variation, Positional Defense, Closed Liner1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 8'Y - 7iad9c4fc848324105E61enKing's Indian DefenseSemi-Classical Variation, Queenside Storm Liner1bq1rk1/pppn1pbp/3p1np1/4p3/1PPP4/2N1PN2/P3BPPP/R1BQ1RK1 b - - 0 8&X +7i7693a64ee842d21!E61enKing's Indian DefenseSemi-Classical Variation, Queenside Storm Liner1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/2N1PN2/PP2BPPP/R1BQ1RK1 w - - 0 8%W -7i8d11322e7d61d517E61enKing's Indian DefenseSemi-Classical Variation, Queenside Storm Liner1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQ1RK1 b - - 3 7  b y (i#~' KKKKKK! - 7]2cd1b3d278eb848eE62enKing's Indian DefenseFianchetto Variation, Karlsbad Variationr1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7 -7]873c6b30697a218dE62enKing's Indian DefenseFianchetto Variation, Karlsbad Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 1 6 -7]5c5887c6019c40b0E62enKing's Indian DefenseFianchetto Variation, Karlsbad Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N3P1/PP2PPBP/R1BQK1NR w KQ - 0 6 -7] 65e211a7d3e409ddE62enKing's Indian DefenseFianchetto Variation, Karlsbad Variationrnbq1rk1/ppppppbp/5np1/8/2PP4/2N3P1/PP2PPBP/R1BQK1NR b KQ - 4 5 -7]9e75090511068b04E62enKing's Indian DefenseFianchetto Variation, Karlsbad Variationrnbq1rk1/ppppppbp/5np1/8/2PP4/6P1/PP2PPBP/RNBQK1NR w KQ - 3 5 v& - 7g6b6aeaa5f0ab46c8E60enKing's Indian DefenseSemi-Classical Variation, Hollywood Variationr1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R w KQ - 2 7, - 7s614dba9e963d2af0E64enKing's Indian DefenseFianchetto Variation, Yugoslav Variation, Rare Linernbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7v - 7Yb4df106d89d2cc41AE67enKing's Indian DefenseFianchetto Variation, Debrecen Defenser1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7j - 7S6664378e11a9944cLE73enKing's Indian DefenseAverbakh Variation, Spanish Defensernbq1rk1/1pp1ppbp/p2p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7p& - 7W e4afd908282c73399E60enKing's Indian DefenseFianchetto Variation, Yugoslav Systemrnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7% +7W 2de08a6d76b7844DE60enKing's Indian DefenseFianchetto Variation, Yugoslav Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6$ -7W 7cab7392ab98a354TE60enKing's Indian DefenseFianchetto Variation, Yugoslav Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6^ - 7Qfa136ded7076f02c,E73enKing's Indian DefenseAverbakh Variation, Modern Defenser1bq1rk1/ppp1ppbp/n2p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 4 7 A2O z <  -v -5wec543da11f84837d}E39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Macieja Systemrnbq1rk1/p2p1ppp/1p2pn2/2b5/2P5/P1N2N2/1PQ1PPPP/R1B1KB1R w KQ - 0 8-u -5w873d74b1e10734e6E39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Macieja Systemrnbq1rk1/pp1p1ppp/4pn2/2b5/2P5/P1N2N2/1PQ1PPPP/R1B1KB1R b KQ - 1 7+t -5w 5c59984789e155dbE39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Macieja Systemrnbq1rk1/pp1p1ppp/4pn2/2b5/2P5/P1N5/1PQ1PPPP/R1B1KBNR w KQ - 0 7+s -5wf9ddcc04ea02e6388E39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Macieja Systemrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/P1N5/1PQ1PPPP/R1B1KBNR b KQ - 0 63 - +/cc530f2dd4c5b00eE09enCatalan OpeningClosed, Main Liner1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8, - +/4490e61e2fc1f0afE09enCatalan OpeningClosed, Main Linernbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5+ - +/505c95f1e56a5c3e>E09enCatalan OpeningClosed, Main Linernbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4$ - 9U 205570fb9ad8a252RE17enQueen's Indian DefenseClassical Variation, Taimanov Gambitrn1q1rk1/pbppbppp/1p3n2/3p4/2PN4/6P1/PP2PPBP/RNBQ1RK1 b - - 1 8# -9U 5e32eaf758001a9dE17enQueen's Indian DefenseClassical Variation, Taimanov Gambitrn1q1rk1/pbppbppp/1p3n2/3p4/2P5/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8" -9U 6126333342a5da56VE17enQueen's Indian DefenseClassical Variation, Taimanov Gambitrn1q1rk1/pbppbppp/1p2pn2/3P4/2P5/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7 - 9[ 6f812fbd4170d83a:E17enQueen's Indian DefenseClassical Variation, Polugaevsky Gambitrn1q1rk1/pbppbppp/1p3n2/3p4/2P4N/6P1/PP2PPBP/RNBQ1RK1 b - - 1 8 - 5S529f673cbc5c26ebE25enNimzo-Indian DefenseSämisch Variation, Keres Variationrnbqk2r/pp3ppp/4p3/2Pn4/8/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 8 -5S 2d7c45ec5f407187E25enNimzo-Indian DefenseSämisch Variation, Keres Variationrnbqk2r/pp3ppp/4p3/2pn4/3P4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 8-w - 5w3700db2086e4691eE39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Macieja Systemrnbq1rk1/p2p1ppp/1p2pn2/2b5/2P2B2/P1N2N2/1PQ1PPPP/R3KB1R b KQ - 1 8   ' ` .0]vvvvvvvvQ - +W7fd4713c314e37f4E07enCatalan OpeningClosed Variation, Botvinnik Variationr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/2NQ1NP1/PP2PPBP/R1B2RK1 b - - 3 8P -+Wdfb3ddf09e0ca683E07enCatalan OpeningClosed Variation, Botvinnik Variationr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8O -+Wec50a6ad7ea44b4fOE07enCatalan OpeningClosed Variation, Botvinnik Variationrnbq1rk1/pp2bppp/2p1pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7N -+W9225dd990257905f_E07enCatalan OpeningClosed Variation, Botvinnik Variationrnbq1rk1/pp2bppp/2p1pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7M )+W5f3076759743e4E07enCatalan OpeningClosed Variation, Botvinnik Variationrnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 2 6 eH -+W fbfd75d0d1a8c8388E07enCatalan OpeningClosed Variation, Botvinnik Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/6P1/PP1PPPBP/RNBQK1NR w KQkq - 2 4G -+W a01341257c5289aeE07enCatalan OpeningClosed Variation, Botvinnik Variationrnbqkbnr/ppp2ppp/4p3/3p4/2P5/6P1/PP1PPPBP/RNBQK1NR b KQkq - 1 3F -+W 15e3625831bf51d7E07enCatalan OpeningClosed Variation, Botvinnik Variationrnbqkbnr/ppp2ppp/4p3/3p4/2P5/6P1/PP1PPP1P/RNBQKBNR w KQkq - 0 3E -+W 9089404cad6b1ff1E07enCatalan OpeningClosed Variation, Botvinnik Variationrnbqkbnr/pppp1ppp/4p3/8/2P5/6P1/PP1PPP1P/RNBQKBNR b KQkq - 0 2yB - +199bd71b94b57353SE08enCatalan OpeningClosedr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/1P3NP1/P1Q1PPBP/RNB2RK1 b - - 0 8wA -+953db74f4e38183e>E08enCatalan OpeningClosedr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 w - - 0 8 N5q Y *5 7} ) lllllll4 - 71 8073272645a02588D71enNeo-Grünfeld DefenseExchange Variationrnbqk2r/ppp1ppbp/6p1/3n4/3P4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 63 - 71 1f9d5d6bfa4538d4D71enNeo-Grünfeld DefenseExchange Variationrnbqk2r/ppp1ppbp/5np1/3P4/3P4/6P1/PP2PPBP/RNBQK1NR b KQkq - 0 5* + /Sfe70fbc5f35257d}D83enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambitrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6) + /S54fe20b8a6ccc96D83enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambitrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5( - /Sa862a0b9ae3344322D83enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambitrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5 ~R - ;996a759d2ac040af9D51enQueen's Gambit DeclinedModern, Knight Defenser1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQkq - 0 6H - ;3cd9cdd3b90331160`D51enQueen's Gambit DeclinedManhattan Variationr1bqk2r/pppn1ppp/4pn2/3p2B1/1bPP4/2N1P3/PP3PPP/R2QKBNR w KQkq - 1 6 > - ;)19faf010438e15e5D53enQueen's Gambit DeclinedLasker Defensernbqk2r/ppp1bppp/4p3/3p2B1/2PPn3/2N1P3/PP3PPP/R2QKBNR w KQkq - 1 6= -;)23f2bc8ff1c7981fD53enQueen's Gambit DeclinedLasker Defensernbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5 - +Ia830bfc046512a399E01enCatalan OpeningOpen Defense, Tarrasch Defenser1bqkb1r/pp3ppp/2n1pn2/2pp4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6  ++I 3dd672257c08f3a:E01enCatalan OpeningOpen Defense, Tarrasch Defensernbqkb1r/pp3ppp/4pn2/2pp4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 -+I d8b98bd43f26ee07E01enCatalan OpeningOpen Defense, Tarrasch Defensernbqkb1r/pp3ppp/4pn2/2pp4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5 p - /C6a8d68bc73e0a51cD45enSemi-Slav DefenseAccelerated Meran Variationrnbqkb1r/1p3ppp/p1p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 0 6f - /-8b99e2127468b00c D45enSemi-Slav DefenseNormal Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 2 6%\ - ;ab5b739e688f17590D50enQueen's Gambit DeclinedPseudo-Tarrasch Variation, Canal Variationrnb1kb1r/pp3ppp/1q2pn2/2pP2B1/3P4/2N5/PP2PPPP/R2QKBNR w KQkq - 1 6|z + A 10bb5f9522be04fOD44enSemi-Slav Defense Acceptedrnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6y - A d30d8ccb00150eacD44enSemi-Slav Defense Acceptedrnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5  - +E 2366fc513012c6355E05enCatalan OpeningOpen Defense, Classical Linernbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6 0  r 8ql2  Ols -;K 9b558b33c0b7c0efD50enQueen's Gambit DeclinedSemi-Tarrasch, Krause Variationrnbqkb1r/pp3ppp/5n2/3pp1B1/2PN4/2N5/PP2PPPP/R2QKB1R w KQkq - 0 7r -;K 9f8c57e2e4572d82D50enQueen's Gambit DeclinedSemi-Tarrasch, Krause Variationrnbqkb1r/pp3ppp/4pn2/3p2B1/2PN4/2N5/PP2PPPP/R2QKB1R b KQkq - 0 6 %A - ;766cd047cb51c2bd1D19enQueen's Gambit DeclinedSlav, Dutch Variationrn1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7 - ;782acb71f1c886f60`D19enQueen's Gambit DeclinedSlav, Dutch Variationrn1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7v - ;K6e6c2de2e639f01eD50enQueen's Gambit DeclinedSemi-Tarrasch, Krause Variationrnbqkb1r/1p3ppp/p4n2/1N1pp1B1/Q1P5/2N5/PP2PPPP/R3KB1R b KQkq - 1 8u -;Kbcc890ad26070265eD50enQueen's Gambit DeclinedSemi-Tarrasch, Krause Variationrnbqkb1r/1p3ppp/p4n2/1N1pp1B1/2P5/2N5/PP2PPPP/R2QKB1R w KQkq - 0 8t -;K6e3f615ec127fab9D50enQueen's Gambit DeclinedSemi-Tarrasch, Krause Variationrnbqkb1r/pp3ppp/5n2/1N1pp1B1/2P5/2N5/PP2PPPP/R2QKB1R b KQkq - 1 7/g - ;k31caa083f60c8087D52enQueen's Gambit DeclinedCambridge Springs Defense, Bogoljubov Variationr1b1k2r/pp1n1ppp/2p1pn2/q2p2B1/1bPP4/2N1P3/PPQN1PPP/R3KB1R b KQkq - 4 8! - %m914ea81d63e718ebD17enSlav DefenseCzech Variation, Wiesbaden Variation, Sharp Linern1qk2r/pp3ppp/2p1pn2/4Nb2/PbpPP3/2N2P2/1P4PP/R1BQKB1R b KQkq - 0 8" -%m5549a5558867a5e1D17enSlav DefenseCzech Variation, Wiesbaden Variation, Sharp Linern1qk2r/pp3ppp/2p1pn2/4Nb2/PbpP4/2N2P2/1P2P1PP/R1BQKB1R w KQkq - 1 8# -%m9c08cc53c3906dc3D17enSlav DefenseCzech Variation, Wiesbaden Variation, Sharp Linern1qkb1r/pp3ppp/2p1pn2/4Nb2/P1pP4/2N2P2/1P2P1PP/R1BQKB1R b KQkq - 0 7 - ;7d1f9164e821838e3D19enQueen's Gambit DeclinedSlav, Dutch Variationrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8 - ;7af8c6d7afeebe3f3D19enQueen's Gambit DeclinedSlav, Dutch Variationrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8  MW  R\ x? lllllllle 0 - 73 766ab41da25b70acD77enNeo-Grünfeld DefenseClassical Variationrnbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4( -/M4560d7dc315795eaD80enGrünfeld DefenseLutikov Variation, Murrey Attackrnbqkb1r/pp2pp1p/5np1/2pP4/3P4/2N2P2/PP2P1PP/R1BQKBNR b KQkq - 0 5|] - +% cac927bbeca72d91E03enCatalan OpeningOpen Defenser1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 6{\ + +% d89a55ab2c9142e.E03enCatalan OpeningOpen Defenser1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6 i$ +/3fd705cbaeb3ae23#D94enGrünfeld DefenseMakogonov Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 1 6~ - /3265a5f7e3cd2c527'D94enGrünfeld DefenseOpocensky Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP1B1PPP/R2QKB1R b KQ - 2 6s - /] 5adaa46997336c50PD94enGrünfeld DefenseThree Knights Variation, Paris Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 2 6h - /_352ea6739b8806c5D95enGrünfeld DefenseThree Knights Variation, Vienna Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 6/R + 5{b87b045ee9a7d99E12enNimzo-Indian DefenseThree Knights Variation, Duchamp Variation, Modern Linern1qk2r/pbpp1ppp/1p2pn2/6B1/1bPP4/2N5/PP1NPPPP/R2QKB1R b KQkq - 5 60Q -5{d6a52ba22c274313E12enNimzo-Indian DefenseThree Knights Variation, Duchamp Variation, Modern Linern1qk2r/pbpp1ppp/1p2pn2/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 4 61P -5{663563265e75ec88E12enNimzo-Indian DefenseThree Knights Variation, Duchamp Variation, Modern Linernbqk2r/p1pp1ppp/1p2pn2/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 Q) -/Mda8ead918eb288b6D80enGrünfeld DefenseLutikov Variation, Murrey Attackrnbqkb1r/pp2pp1p/6p1/2pn4/3P4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 6! - /e79aea1f8138ccce4D93enGrünfeld DefenseThree Knights Variation, Hungarian Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6 - /3a52270670805c207D94enGrünfeld DefenseMakogonov Variationrnbq1rk1/ppp1ppbp/5np1/3p4/1PPP4/2N1PN2/P4PPP/R1BQKB1R b KQ - 0 6G - 9A5464fe41b0cbfc29)E17enQueen's Indian DefenseAnti-Queen's Indian Systemrn1qk2r/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 4 6`' -/M4b4a4c11939981f7D80enGrünfeld DefenseLutikov Variation, Murrey Attackrnbqkb1r/pp2pp1p/5np1/2pp4/2PP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5* - /M 191a44e4b19a4bfcD80enGrünfeld DefenseLutikov Variation, Murrey Attackrnbqkb1r/pp2pp1p/6p1/2pn4/N2P4/5P2/PP2P1PP/R1BQKBNR b KQkq - 1 6, - / 707cc0f1dc2771a3D83enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambit, Capablanca Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/2RQKBNR b K - 2 6  - /ed483e34a37d34440@D93enGrünfeld DefenseThree Knights Variation, Hungarian Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6 Ykd Z X 4. i rTYU - )? 4bf04b734bbbbe7c|A43enBenoni DefenseZilbermints-Benoni Gambitrnbqkbnr/pp1ppppp/8/8/1P1p4/5N2/P1P1PPPP/RNBQKB1R b KQkq - 0 3P - )a 5ffdf34ca4256c55UA43enBenoni DefenseBenoni-Indian Defense, Kingside Move Orderrnbqkb1r/pp1ppppp/5n2/2pP4/8/5N2/PPP1PPPP/RNBQKB1R b KQkq - 0 3}< - /)7e3dfe2d5bdfe4e1A45enTrompowsky AttackEdge Variationrnbqkb1r/pppppppp/8/8/3Pn2B/8/PPP1PPPP/RN1QKBNR b KQkq - 4 3}; -/)24b296eea861c67azA45enTrompowsky AttackEdge Variationrnbqkb1r/pppppppp/8/6B1/3Pn3/8/PPP1PPPP/RN1QKBNR w KQkq - 3 37 - /- b8110ac7035ebf04A45enTrompowsky AttackRaptor Variationrnbqkb1r/pppppppp/8/6B1/3Pn2P/8/PPP1PPP1/RN1QKBNR b KQkq - 0 32 - 5;c8ac51c0545eb3c6A45enQueen's Pawn OpeningVeresov, Richter Attackrnbqkb1r/ppp1pppp/5n2/3p4/3P4/2N2P2/PPP1P1PP/R1BQKBNR b KQkq - 1 3 1 -5; 333b496296bc311fA45enQueen's Pawn OpeningVeresov, Richter Attackrnbqkb1r/ppp1pppp/5n2/3p4/3P4/5P2/PPP1P1PP/RNBQKBNR w KQkq - 0 3 t- - #m f73c442a7d3c8c15A45enIndian GamePaleface Attack, Blackmar-Diemer Gambit Deferredrnbqkb1r/ppp1pppp/5n2/3p4/3PP3/5P2/PPP3PP/RNBQKBNR b KQkq - 0 3 ( - #E907648b47ec9dc02A45enIndian GameGedult Attack, Gedult Attackrnbqkb1r/ppp1pppp/5n2/3p4/3P2P1/5P2/PPP1P2P/RNBQKBNR b KQkq - 0 3z# - #'aea7750143068b44DA46enIndian GameLondon Systemrnbqkb1r/pppp1ppp/4pn2/8/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3x" -#' 75f39380da666127'A46enIndian GameLondon Systemrnbqkb1r/pppp1ppp/4pn2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3o - % b3a9c4b66aecbaefA46enTorre Attackrnbqkb1r/pppp1ppp/4pn2/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3z - ? d8ded132fe39e983A46enYusupov-Rubinstein Systemrnbqkb1r/pppp1ppp/4pn2/8/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3o - ' 3164d46b20ab895d]A48enLondon Systemrnbqkb1r/pppppp1p/5np1/8/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3 ^qo - % 2c6a65dc0941b8f6A48enTorre Attackrnbqkb1r/pppppp1p/5np1/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3 - #5 c6d689ab591cbb06A49enIndian GamePrzepiorka Variationrnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3} - !1 ce3485d4d3a09f3f?A53enOld IndianAged Gibbon Gambitrnbqkb1r/ppp1pppp/3p1n2/8/2PP2P1/8/PP2PP1P/RNBQKBNR b KQkq - 0 3 ^A - /[ acca2508e98a66d8A45enTrompowsky AttackClassical Defense, Big Center Variationrnbqkb1r/pppp1ppp/4pn2/6B1/3PP3/8/PPP2PPP/RN1QKBNR b KQkq - 0 3 - '/ ad9be8d50c668df5A80enDutch DefenseKingfisher Gambitrnbqkbnr/ppp1p1pp/8/3p1p2/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 3uK - 7 6d07d436929b61a6A43enFranco-Benoni Defensernbqkbnr/pp1p1ppp/4p3/2pP4/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3~F + '+67a1b3d5bd6cdc0A45enAmazon AttackSiberian Attackrnbqkb1r/ppp1pppp/5n2/3p4/3P4/2NQ4/PPP1PPPP/R1B1KBNR b KQkq - 1 3{ - '-1455f2aa3ebdd252RA80enDutch DefenseSpielmann Gambitrnbqkb1r/ppppp1pp/5n2/5p2/3P2P1/2N5/PPP1PP1P/R1BQKBNR b KQkq - 0 3~z -'- b718f37cd6c83f4fOA80enDutch DefenseSpielmann Gambitrnbqkb1r/ppppp1pp/5n2/5p2/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 2 3v - 'M912150256233ce4cLA80enDutch DefenseManhattan Gambit, Anti-Stonewallrnbqkbnr/ppp1p1pp/8/3p1p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR b KQkq - 0 3  E   uY?S n n?________T - /-3a80900f66be8c68hD45enSemi-Slav DefenseStoltz Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PPQ2PPP/R1B1KB1R b KQkq - 3 6( d -;Y85f00f469f9c3fc5D35enQueen's Gambit DeclinedExchange Variation, Sämisch Variationr1bqkb1r/pppn1ppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6 c -;Ybae4d6828539ff0eD35enQueen's Gambit DeclinedExchange Variation, Sämisch Variationr1bqkb1r/pppn1ppp/4pn2/3P4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5Z - ;[ 884e5029c24e8723#D36enQueen's Gambit DeclinedExchange Variation, Reshevsky Variationrnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 6 O - ;+ee0a8d617af1a409 D37enQueen's Gambit DeclinedMiles Variationrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N2N2/PPQ1PPPP/R3KB1R b KQ - 5 6 N -;+5f13ff7c6827986dmD37enQueen's Gambit DeclinedMiles Variationrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6 M -;+55bb12cbbd7e7186D37enQueen's Gambit DeclinedMiles Variationrnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 "D - ;a 5db5448e016c8c47GD41enQueen's Gambit DeclinedSemi-Tarrasch Defense, Pillsbury Variationrnbqkb1r/pp3ppp/4p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 6#C -;a f098063c253304e3D41enQueen's Gambit DeclinedSemi-Tarrasch Defense, Pillsbury Variationrnbqkb1r/pp3ppp/4p3/2pn4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6 !e - ;Y5ea4e9c706fcd5a6D35enQueen's Gambit DeclinedExchange Variation, Sämisch Variationr1bqkb1r/pppn1ppp/5n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6"9 - ;_ 349f0b74ceb3b9e9D41enQueen's Gambit DeclinedSemi-Tarrasch Defense, Exchange Variationrnbqkb1r/pp3ppp/4p3/2pn4/3PP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 6. - /11b75af6e647f6522"D43enSemi-Slav DefenseAnti-Moscow Gambitrnbqkb1r/pp3pp1/2p1pn1p/3p4/2PP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6 - -/141fac7ad97c147b9D43enSemi-Slav DefenseAnti-Moscow Gambitrnbqkb1r/pp3pp1/2p1pn1p/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6v# - /3c50cb8b1b9ab5d45ED44enSemi-Slav DefenseBotvinnik Variationrnbqkb1r/pp3ppp/2p1pn2/6B1/2pPP3/2N2N2/PP3PPP/R2QKB1R b KQkq - 0 6 vE  4(z#vvvv )2 - 9q bd5041d4237dbcfcD07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3q4/3p4/2B1P3/PP2NPPP/R2QKB1R b KQkq - 1 8'1 -9q a9f4aa1b0b56b102D07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3q4/3p4/2B1P3/PP3PPP/R2QKBNR w KQkq - 0 8(0 -9q 328aa099cf2da517D07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3qp3/3P4/2B1P3/PP3PPP/R2QKBNR b KQkq - 0 7*/ -9qb69b8c680338fb4cLD07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3qp3/3P4/2b1P3/PP1B1PPP/R2QKBNR w KQkq - 0 7,. -9q97a2f76e1e80a946FD07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3qp3/1b1P4/2N1P3/PP1B1PPP/R2QKBNR b KQkq - 3 6+- -9qbe2faddb8ce1c242BD07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1k1nr/ppp2ppp/2n5/3qp3/1b1P4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 2 6), -9q 776ec4ddc7160a60`D07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1kbnr/ppp2ppp/2n5/3qp3/3P4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 1 5(+ -9q 8cf9dc7f05f488b9D07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1kbnr/ppp2ppp/2n5/3qp3/3P4/4P3/PP3PPP/RNBQKBNR w KQkq - 0 5'* +9q 681d4359611708fD07enQueen's Gambit RefusedChigorin Defense, Exchange Variation, Costa's Liner1b1kbnr/ppp1pppp/2n5/3q4/3P4/4P3/PP3PPP/RNBQKBNR b KQkq - 0 4n# - ;97b13d091c61af8a8D12enQueen's Gambit DeclinedSlav, Landau Variationrnq1kb1r/pp3ppp/4pn2/3p1b2/3P4/NQ2PN2/PP1B1PPP/R3KB1R b KQkq - 1 8" -;97cf500c22b48d766fD12enQueen's Gambit DeclinedSlav, Landau Variationrnq1kb1r/pp3ppp/4pn2/3p1b2/3P4/1Q2PN2/PP1B1PPP/RN2KB1R w KQkq - 0 8! +;9a82f2f3336a47344D12enQueen's Gambit DeclinedSlav, Landau Variationrnq1kb1r/pp2pppp/5n2/3p1b2/3P4/1Q2PN2/PP1B1PPP/RN2KB1R b KQkq - 3 7 -;9230fa846a10b2c300D12enQueen's Gambit DeclinedSlav, Landau Variationrnq1kb1r/pp2pppp/5n2/3p1b2/3P4/1Q2PN2/PP3PPP/RNB1KB1R w KQkq - 2 7 -;9f1208d6ece7af787D12enQueen's Gambit DeclinedSlav, Landau Variationrn1qkb1r/pp2pppp/5n2/3p1b2/3P4/1Q2PN2/PP3PPP/RNB1KB1R b KQkq - 1 6  |  KJd|||||||||||||||^ -9] 971a1af6addade1fD00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qk2r/ppp2ppp/5pb1/8/1b1Pp1P1/2N5/PPP1QP1P/R3KBNR w KQkq - 3 8] -9] 5e5b73f0e62d163d=D00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp2ppp/5pb1/8/3Pp1P1/2N5/PPP1QP1P/R3KBNR b KQkq - 2 7\ -9] c85dfcd2a8694db9D00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp2ppp/5pb1/8/3Pp1P1/2N5/PPP2P1P/R2QKBNR w KQkq - 1 7[ -9] 58c830e9a18d4b7b{D00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp2ppp/5p2/5b2/3Pp1P1/2N5/PPP2P1P/R2QKBNR b KQkq - 0 6Z -9] fb85313f49f8a666fD00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp2ppp/5p2/5b2/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 6Y -9] 4aec12d90a9cdd48HD00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp1pppp/5B2/5b2/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5 X -9] efd31b08d18283a8D00enBlackmar-Diemer Gambitvon Popiel Gambit, Zilbermints Variationrn1qkb1r/ppp1pppp/5n2/5bB1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5 ]P - 9Qb670ea51a8b43545ED00enBlackmar-Diemer GambitBogoljubov Variation, Kloss Attackrnbq1rk1/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1BQ1R1K b - - 5 8O -9Q87dbd9fb4852970a D00enBlackmar-Diemer GambitBogoljubov Variation, Kloss Attackrnbq1rk1/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1BQ1RK1 w - - 4 8N -9Q8d73344c9d0b7ee1D00enBlackmar-Diemer GambitBogoljubov Variation, Kloss Attackrnbqk2r/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1BQ1RK1 b kq - 3 7`A - 9U7fae1d6b9b639073sD00enBlackmar-Diemer GambitBogoljubov Variation, Studier Attackrnbq1rk1/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1B1QRK1 b - - 5 8 _ 6/  J . 6666666N -%U 7ad274fbeedf08c4C42enRussian GameClassical Attack, Jaenisch Variationr1bqk2r/ppp1bppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 w kq - 4 8M -%U 6e1e07142474a455UC42enRussian GameClassical Attack, Jaenisch Variationr1bqkb1r/ppp2ppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 b kq - 3 7 m@ - %U fe667a706977a3d0C42enRussian GameClassical Attack, Chigorin Variationr1bqk2r/ppp1bppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQR1K1 b kq - 5 81 - /12fb0ef7b5ef6336clC49enFour Knights GameJanowski Variationr1bq1rk1/ppp2ppp/2np1n2/1B2p3/4P3/2PP1N2/P1P2PPP/R1BQR1K1 b - - 1 80 -/1ab04e1f0d95e9878xC49enFour Knights GameJanowski Variationr1bq1rk1/ppp2ppp/2np1n2/1B2p3/4P3/2PP1N2/P1P2PPP/R1BQ1RK1 w - - 0 8 " - %K 8ed09ed74be2937c|C51enItalian GameEvans Gambit, Harding Variationr1bqk1nr/pppp1ppp/2n5/8/1bBPP3/5N2/P2B1PPP/RN1QK2R b KQkq - 2 8 ! -%Ka75dc462d983f878xC51enItalian GameEvans Gambit, Harding Variationr1bqk1nr/pppp1ppp/2n5/8/1bBPP3/5N2/P4PPP/RNBQK2R w KQkq - 1 8 -%K 3bd7cf95f7615fd0C51enItalian GameEvans Gambit, Harding Variationr1bqk1nr/pppp1ppp/2n5/2b5/2BPP3/5N2/P4PPP/RNBQK2R b KQkq - 0 7  -%K 97611ad993c953f6C51enItalian GameEvans Gambit, Harding Variationr1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/2P2N2/P4PPP/RNBQK2R w KQkq - 0 7 +%Kc1f105b57b247e3C51enItalian GameEvans Gambit, Harding Variationr1bqk1nr/pppp1ppp/2n5/2b1p3/2BPP3/2P2N2/P4PPP/RNBQK2R b KQkq - 0 6 - %]2b3e717189bc54a5C51enItalian GameEvans Gambit Declined, Vasquez Variationr1b3nr/ppppkBpp/1b6/nP2N1qQ/4P3/8/P1PP1PPP/RNB1K2R b KQ - 2 8 -%]8b339257a5d172399C51enItalian GameEvans Gambit Declined, Vasquez Variationr1b3nr/ppppkBpp/1b6/nP2N1q1/4P3/8/P1PP1PPP/RNBQK2R w KQ - 1 8 -%]1c350cbf8a28a56foC51enItalian GameEvans Gambit Declined, Vasquez Variationr1b1k1nr/pppp1Bpp/1b6/nP2N1q1/4P3/8/P1PP1PPP/RNBQK2R b KQkq - 0 77 N M J o:%%%%%O - %U f6f1ebdfadd0a3c3C42enRussian GameClassical Attack, Jaenisch Variationr1bqk2r/ppp1bppp/2n5/3p4/2PPn3/3B1N2/PP3PPP/RNBQ1RK1 b kq - 0 8 + c 8871e46c5930e14C37enKing's Gambit Accepted, Double Muzio Gambitrnb1kbnr/pppp1B1p/8/4q3/5p2/5Q2/PPPP2PP/RNB2RK1 b kq - 0 8 -c a9344e6a2d72ac61aC37enKing's Gambit Accepted, Double Muzio Gambitrnb1kbnr/pppp1p1p/8/4q3/2B2p2/5Q2/PPPP2PP/RNB2RK1 w kq - 0 8  -c 4f80c4f528e9bad1C37enKing's Gambit Accepted, Double Muzio Gambitrnb1kbnr/pppp1p1p/5q2/4P3/2B2p2/5Q2/PPPP2PP/RNB2RK1 b kq - 0 7 ! - 9g5dbbce98ac6c3c5b[C39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Caro Variationrnbqkb1r/ppp2p1p/8/3pN3/3PnBpP/8/PPPN2P1/R2QKB1R b KQkq - 1 8 +9g4d576fa3691946bkC39enKing's Gambit AcceptedKieseritzky, Brentano Defense, Caro Variationrnbqkb1r/ppp2p1p/8/3pN3/3PnBpP/8/PPP3P1/RN1QKB1R w KQkq - 0 8| - 9= 424759f7ab2e1009 C39enKing's Gambit AcceptedKieseritzky, Rice Gambitrnbqk2r/ppp2p1p/3b1n2/3PN3/2B2ppP/8/PPPP2P1/RNBQ1RK1 b kq - 2 8*m - 9q e23afe58229c0d96C39enKing's Gambit AcceptedKieseritzky, Long Whip Defense, Jaenisch Variationrnbqk1n1/pppp1p1r/7b/4N2p/2BPPppP/2N5/PPP3P1/R1BQK2R b KQq - 2 8'l -9q 19ade6fae07e8f4fOC39enKing's Gambit AcceptedKieseritzky, Long Whip Defense, Jaenisch Variationrnbqk1n1/pppp1p1r/7b/4N2p/2BPPppP/8/PPP3P1/RNBQK2R w KQq - 1 8&k -9q5189a31685e81e20 C39enKing's Gambit AcceptedKieseritzky, Long Whip Defense, Jaenisch Variationrnbqkbn1/pppp1p1r/8/4N2p/2BPPppP/8/PPP3P1/RNBQK2R b KQq - 0 7'j -9q 94bc8cbc94213362bC39enKing's Gambit AcceptedKieseritzky, Long Whip Defense, Jaenisch Variationrnbqkbn1/pppp1p1r/8/4N2p/2B1PppP/8/PPPP2P1/RNBQK2R w KQq - 2 7(i -9q 7c6fcd96e4a6f6fcC39enKing's Gambit AcceptedKieseritzky, Long Whip Defense, Jaenisch Variationrnbqkbnr/pppp1p2/8/4N2p/2B1PppP/8/PPPP2P1/RNBQK2R b KQkq - 1 6n ^ - -E a94e395fa2caf607C41enPhilidor DefenseLion Variation, Forcing Liner1bq2k1/pppnbrpp/3pNn2/4p3/3PP3/2N5/PPP2PPP/R1BQK2R b KQ - 1 8 ] --E 5922812bec356a27'C41enPhilidor DefenseLion Variation, Forcing Liner1bq2k1/pppnbrpp/3p1n2/4p1N1/3PP3/2N5/PPP2PPP/R1BQK2R w KQ - 0 8 < B !{')8 - #I6e2e1ec493eb6598C29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3NP2q/8/3P1Nn1/PPP4P/R1BQKB1R b KQkq - 0 8 7 -#I ad733b7d395b9fc2C29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3pP2q/8/2NP1Nn1/PPP4P/R1BQKB1R w KQkq - 2 8 6 -#I 31d20a38cef656e2C29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3pP3/7q/2NP1Nn1/PPP4P/R1BQKB1R b KQkq - 1 75 -#Ieab6e6cea61037dfC29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3pP3/7q/2NP2n1/PPP4P/R1BQKBNR w KQkq - 0 7 4 -#I 9d2c7acd1163b1d5C29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3pP3/4n2q/2NP2P1/PPP4P/R1BQKBNR b KQkq - 0 6 3 -#I b1cac18cf1b469edC29enVienna GameVienna Gambit, Wurzburger Traprnb1kb1r/ppp2ppp/8/3pP3/4n2q/2NP4/PPP3PP/R1BQKBNR w KQkq - 1 6l) - 9Gf509fbd2dcc79c67gC32enKing's Gambit DeclinedFalkbeer, Charousek Variationrnb1kb1r/ppp3pp/8/3q1p2/4nPP1/8/PPPNQ2P/R1B1KBNR b KQkq - 0 8( -9G5644fa0434b2717azC32enKing's Gambit DeclinedFalkbeer, Charousek Variationrnb1kb1r/ppp3pp/8/3q1p2/4nP2/8/PPPNQ1PP/R1B1KBNR w KQkq - 0 8' -9Gc22b9c9d8a3a5ca4C32enKing's Gambit DeclinedFalkbeer, Charousek Variationrnb1kb1r/ppp2ppp/8/3q4/4nP2/8/PPPNQ1PP/R1B1KBNR b KQkq - 1 7& -9G9b4524ff10c7f494C32enKing's Gambit DeclinedFalkbeer, Charousek Variationrnb1kb1r/ppp2ppp/8/3q4/4nP2/8/PPP1Q1PP/RNB1KBNR w KQkq - 0 7 e\e1f1c2e- eeeeeeees +-1 2b88204c0bd23b6B89enSicilian DefenseVelimirovic Attackr1bqk2r/pp2bppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R w KQkq - 2 8F - -W 24459a3e46531a0fB73enSicilian DefenseDragon Variation, Classical Variationr1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 4 8 - -W 8fa842dc57c2bf0c B73enSicilian DefenseDragon Variation, Classical Variationrnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7 - -W f1dd39e82b31641cB73enSicilian DefenseDragon Variation, Classical Variationrnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7 - -W 263f3012dd129e22"B82enSicilian DefenseScheveningen Variation, Tal Variationr1bqk2r/pp2bppp/2nppn2/8/3NPP2/2N1BQ2/PPP3PP/R3KB1R b KQkq - 4 8 --W 9c1d4b21f16fc899B82enSicilian DefenseScheveningen Variation, Tal Variationr1bqk2r/pp2bppp/2nppn2/8/3NPP2/2N1B3/PPP3PP/R2QKB1R w KQkq - 3 8 --W 88d138ce3bc46408B82enSicilian DefenseScheveningen Variation, Tal Variationr1bqkb1r/pp3ppp/2nppn2/8/3NPP2/2N1B3/PPP3PP/R2QKB1R b KQkq - 2 7 --W fbd98322bafe7f86B82enSicilian DefenseScheveningen Variation, Tal Variationr1bqkb1r/pp3ppp/2nppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 7 1t - -1 94be0d268ef978322B89enSicilian DefenseVelimirovic Attackr1bqk2r/pp2bppp/2nppn2/8/2BNP3/2N1B3/PPP1QPPP/R3K2R b KQkq - 3 8 e - )ka7ed29d3c0aa7f02C06enFrench DefenseTarrasch Variation, Closed Variation, Main Liner1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R b KQkq - 0 8 d + )kb5bfc9fa4027324$C06enFrench DefenseTarrasch Variation, Closed Variation, Main Liner1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 80 + -Y 12015697a2305311B72enSicilian DefenseDragon, Classical, Amsterdam Variationr1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R3K2R b KQkq - 3 8. --Y9984675040dd113b;B72enSicilian DefenseDragon, Classical, Amsterdam Variationr1bqkb1r/pp2pp1p/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7- --Yea8cdcbcc1e70ab5B72enSicilian DefenseDragon, Classical, Amsterdam Variationr1bqkb1r/pp2pp1p/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7! - -Wbd4962cbaa8d1c5b[B72enSicilian DefenseDragon Variation, Classical Variationr1bqk2r/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2QK2R b KQkq - 5 8 - -W 574d21d2c7690181B73enSicilian DefenseDragon Variation, Classical Variationr1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8 >w @ gC>>>>>>>>>>>܁. - -Y118cd876319c1e7b{B48enSicilian DefensePaulsen Variation, Bastrikov Variationr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6 # - -E 9cdf76c65bb1b0b1B51enSicilian DefenseCanal Attack, Dorfman Gambitr2qkbnr/pp1bpp1p/2np2p1/1Bp1P3/8/5N2/PPPPQPPP/RNB2RK1 b kq - 0 6" --E fda6603b5faf96d5B51enSicilian DefenseCanal Attack, Dorfman Gambitr2qkbnr/pp1bpp1p/2np2p1/1Bp5/4P3/5N2/PPPPQPPP/RNB2RK1 w kq - 0 6 ! --E 141233602420049eB51enSicilian DefenseCanal Attack, Dorfman Gambitr2qkbnr/pp1bpppp/2np4/1Bp5/4P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 5 --E 8214bc426a645f1aB51enSicilian DefenseCanal Attack, Dorfman Gambitr2qkbnr/pp1bpppp/2np4/1Bp5/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 5  --E 60d54210b03e8f2b+B51enSicilian DefenseCanal Attack, Dorfman Gambitr1bqkbnr/pp2pppp/2np4/1Bp5/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 4  --E 1ea03924cccd543b;B51enSicilian DefenseCanal Attack, Dorfman Gambitr1bqkbnr/pp2pppp/2np4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4  - -I f7d5f38a3e857143CB55enSicilian DefensePrins Variation, Venice Attackrnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6 - -I c40b22255b11e2c0B55enSicilian DefensePrins Variation, Venice Attackrnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6 - -3 c11f912b39580651QB56enSicilian DefenseSpielmann Variationr1bqkb1r/pp2pppp/2np1n2/8/4P3/2N5/PPP1NPPP/R1BQKB1R b KQkq - 1 6 c * 3*c9 -/I503690b1db013c99B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqkbnr/pp2pp1p/2p3p1/3p4/4P3/3P1N2/PPPN1PPP/R1BQKB1R b KQkq - 1 4 -/I8b527c47b3e75da4B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqkbnr/pp2pp1p/2p3p1/3p4/4P3/3P4/PPPN1PPP/R1BQKBNR w KQkq - 0 4 -/I 62e62f1cc868cfefB10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqkbnr/pp2pppp/2p5/3p4/4P3/3P4/PPPN1PPP/R1BQKBNR b KQkq - 1 3 -/I 3b88977e529567dfB10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqkbnr/pp2pppp/2p5/3p4/4P3/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 3/'{ - -wb934c5c527384075uB22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1k1nr/pp3ppp/2n5/3qp3/1b1P4/2N2N2/PP2BPPP/R1BQK2R b KQkq - 3 8(z --wcab4463c261d0ad6B22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1k1nr/pp3ppp/2n5/3qp3/1b1P4/2N2N2/PP3PPP/R1BQKB1R w KQkq - 2 8%y +-w 3f52f3a6deac2f4B22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1kbnr/pp3ppp/2n5/3qp3/3P4/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 7#x --wf8623798af08402d-B22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1kbnr/pp3ppp/2n5/3qp3/3P4/5N2/PP3PPP/RNBQKB1R w KQkq - 0 7 %v --w deacea9e5845b43d=B22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1kbnr/pp2pppp/2n5/3q4/3p4/2P2N2/PP3PPP/RNBQKB1R w KQkq - 0 6'u --w 81b250ab25b1ddfbB22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1kbnr/pp2pppp/2n5/2pq4/3P4/2P2N2/PP3PPP/RNBQKB1R b KQkq - 2 5%t --w 5ad6bc5d4d57bcc6B22enSicilian DefenseAlapin Variation, Barmen Defense, Milner-Barry Attackr1b1kbnr/pp2pppp/2n5/2pq4/3P4/2P5/PP3PPP/RNBQKBNR w KQkq - 1 5W" - /ic8a1d3499e124378xB17enCaro-Kann DefenseKarpov Variation, Smyslov Variation, Main Liner1bqkb1r/pp3ppp/1np1pn2/6N1/3P4/1B6/PPP1QPPP/R1B1K1NR b KQkq - 3 8 - /E 5794bd5eeddee2f3B19enCaro-Kann DefenseClassical, Spassky Variationr2qkbnr/pp1nppp1/2p3bp/7P/3P4/5NN1/PPP2PP1/R1BQKB1R b KQkq - 0 8l + -[ab88bb80bdfd25c\B41enSicilian DefenseKan, Maróczy Bind, Bronstein Variationr1bqk2r/1p1p1ppp/p1n1pn2/8/1bPNP3/2N5/PPB2PPP/R1BQK2R b KQkq - 6 8 EEh9 t  v2EEE! -/Ie08aad072046f7333B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk1nr/pp2ppbp/2p3p1/3p4/4P3/3P1N2/PPPN1PPP/R1BQKB1R w KQkq - 2 5 7 - -Ifc30e45adb9bccfaB02enAlekhine DefenseHunt Variation, Mikenas Gambitrnbqkb1r/ppp2ppp/3p4/2PBP3/8/8/PP1P1PPP/R1BQK1NR b KQkq - 0 86 --I be4a5fb4ed0d3ab0B02enAlekhine DefenseHunt Variation, Mikenas Gambitrnbqkb1r/ppp2ppp/3p4/2PpP3/2B5/8/PP1P1PPP/R1BQK1NR w KQkq - 0 85 --I 99c1e30eb9e6bd80B02enAlekhine DefenseHunt Variation, Mikenas Gambitrnbqkb1r/ppp2ppp/3pp3/2PNP3/2B5/8/PP1P1PPP/R1BQK1NR b KQkq - 0 7?( - /I138362e3aa0cda26&B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbq1rk1/pp2npbp/2p3p1/3pp3/1P2P3/3P1NP1/P1PN1PBP/R1BQ1RK1 b - - 0 8' -/Ib976174f0cbab602B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbq1rk1/pp2npbp/2p3p1/3pp3/4P3/3P1NP1/PPPN1PBP/R1BQ1RK1 w - - 4 8& -/Ib3defaf8d9e35fe9B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk2r/pp2npbp/2p3p1/3pp3/4P3/3P1NP1/PPPN1PBP/R1BQ1RK1 b kq - 3 7% -/Icdab81cca51084f9B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk2r/pp2npbp/2p3p1/3pp3/4P3/3P1NP1/PPPN1PBP/R1BQK2R w KQkq - 2 7$ -/If3e43d711e990f44DB10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk1nr/pp3pbp/2p3p1/3pp3/4P3/3P1NP1/PPPN1PBP/R1BQK2R b KQkq - 1 6# -/I46141e0c5374d73d=B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk1nr/pp3pbp/2p3p1/3pp3/4P3/3P1NP1/PPPN1P1P/R1BQKB1R w KQkq - 0 6" -/Icc6c1646c0912f0b B10enCaro-Kann DefenseBreyer Variation, Stein Attackrnbqk1nr/pp2ppbp/2p3p1/3p4/4P3/3P1NP1/PPPN1P1P/R1BQKB1R b KQkq - 0 5 .  _ |V UZVSW U U Ulllll.,d - 'O29a01b374dca3cc8A97enDutch DefenseIlyin-Zhenevsky, Winter Variationrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQR1K1 b - - 3 8( -)acbb531363cb1ac89A70enBenoni DefenseClassical Variation, Traditional Variationrnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 1 8 b{\ - %' fa188ff4783dd380A58enBenko GambitNd2 Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N5/PP1NPPPP/R1BQKB1R b KQkq - 1 8{[ -%'273a1413ba80ed0a A58enBenko GambitNd2 Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 8zZ -%' ce8e4748c10f7f41AA58enBenko GambitNd2 Variationrn1qkb1r/4pppp/b2p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 7M + %5bdcaf525a5735322A58enBenko GambitFianchetto Variationrn1qkb1r/4pp1p/b2p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 8> - )/ 8cbeb63049d8d659YA66enBenoni DefenseMikenas Variationrnbqk2r/pp3pbp/3p1np1/2pPP3/5P2/2N5/PP4PP/R1BQKBNR b KQkq - 0 8= -)/ edc7a0cd4dc6f03d=A66enBenoni DefenseMikenas Variationrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR w KQkq - 1 8/ - )1 de197162285263beA67enBenoni DefenseTaimanov Variationrnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8 - )[2346ec88fe12657b{A70enBenoni DefenseClassical Variation, New York Variationrnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N1P/PP3PP1/R1BQKB1R b KQkq - 0 8 + )cdef66008c3b7741AA71enBenoni DefenseClassical Variation, Averbakh-Grivas Attackrnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 2 82F - ' 21b275e810effcb1A99enDutch DefenseClassical Variation, Ilyin-Zhenevsky Variation, Modern Main Linernb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8 :U - '1c0d67a1d8b4abb8A98enDutch DefenseClassical Variation, Ilyin-Zhenevsky Variation, Alatortsev-Lisitsyn Linernb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 8,8 - )ab835b2cf3d94e62a*A70enBenoni DefenseClassical Variation, Traditional Variationrnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R b KQkq - 2 8s - ']ad1d698452931e4cLA94enDutch DefenseClassical Variation, Stonewall Variationrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8r + ']f0eb8c2d8438f25%A94enDutch DefenseClassical Variation, Stonewall Variationrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8   5i*J]]]]]]PZ + +[9557b7122b60106A30enEnglish OpeningSymmetrical Variation, Hedgehog Defensern1qk2r/pb1pbppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 w kq - 4 7Y -+[1d99089ee81dad97A30enEnglish OpeningSymmetrical Variation, Hedgehog Defensern1qkb1r/pb1p1ppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 b kq - 3 6X -+[63ec73aa94ee7687A30enEnglish OpeningSymmetrical Variation, Hedgehog Defensern1qkb1r/pb1p1ppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 2 6W -+[d37c3b2ee6bcd91cA30enEnglish OpeningSymmetrical Variation, Hedgehog Defensernbqkb1r/p2p1ppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 1 5V -+[668c1853ab510165eA30enEnglish OpeningSymmetrical Variation, Hedgehog Defensernbqkb1r/p2p1ppp/1p2pn2/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5U ++[de5514355d2b6feA30enEnglish OpeningSymmetrical Variation, Hedgehog Defensernbqkb1r/pp1p1ppp/4pn2/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4T -+[2103ea02b5056ec6A30enEnglish OpeningSymmetrical Variation, Hedgehog Defensernbqkb1r/pp1p1ppp/4pn2/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4 -4N - + 9c48bf34f304138dA33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Geller Variationr1b1kb1r/pp1p1ppp/1qn1pn2/8/2PN4/2N3P1/PP2PP1P/R1BQKB1R w KQkq - 1 72M -+ 5bb74163394fc557WA33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Geller Variationr1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N3P1/PP2PP1P/R1BQKB1R b KQkq - 0 6] Cp .  ~aCCCCCCCCCXXXXXXXXXXXXX z - 51364e9256c5d337ecA08enKing's Indian AttackSicilian Variationr1bq1rk1/pp2bppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQR1K1 b - - 6 8 y -51b2fa9cdd427b9cf8A08enKing's Indian AttackSicilian Variationr1bq1rk1/pp2bppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQ1RK1 w - - 5 8 x -51b852716a97227513A08enKing's Indian AttackSicilian Variationr1bqk2r/pp2bppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQ1RK1 b kq - 4 7 w -51c6270a5eebd1ae03A08enKing's Indian AttackSicilian Variationr1bqk2r/pp2bppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQK2R w KQkq - 3 7 v -51d2eb79b1217a0292A08enKing's Indian AttackSicilian Variationr1bqkb1r/pp3ppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1PBP/R1BQK2R b KQkq - 2 6 u -51671b5acc6c97daebA08enKing's Indian AttackSicilian Variationr1bqkb1r/pp3ppp/2n1pn2/2pp4/4P3/3P1NP1/PPPN1P1P/R1BQKB1R w KQkq - 1 6 t -51ccf6822e7d067fe8A08enKing's Indian AttackSicilian Variationrnbqkb1r/pp3ppp/4pn2/2pp4/4P3/3P1NP1/PPPN1P1P/R1BQKB1R b KQkq - 0 5 s -51e010396f9dd1a7d0A08enKing's Indian AttackSicilian Variationrnbqkb1r/pp3ppp/4pn2/2pp4/4P3/3P1N2/PPPN1PPP/R1BQKB1R w KQkq - 0 5|k - %7 fcf3b5758569b0d6A57enBenko GambitNescafe Frappe Attackrnbqkb1r/4pppp/3p1n2/1NpP4/1pB1P3/8/PP3PPP/R1BQK1NR b KQkq - 1 8j -%7 9f40015dad2a6670pA57enBenko GambitNescafe Frappe Attackrnbqkb1r/4pppp/3p1n2/1NpP4/1p2P3/8/PP3PPP/R1BQKBNR w KQkq - 0 8 Nq~[ 2 R"+qqqqqqqq{ -/I 54a9db88d0e06a14A45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp1ppppp/2p5/q7/3P3B/2P5/PP1nPPPP/R2QKBNR w KQkq - 0 6z -/I 1a80c663cfe0b163cA45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp1ppppp/2p5/q7/3Pn2B/2P5/PP1NPPPP/R2QKBNR b KQkq - 0 5y -/I 6c5a3efb1f90bee5A45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp1ppppp/2p5/q7/3Pn2B/8/PPPNPPPP/R2QKBNR w KQkq - 2 5 x -/Ib529aba0b6e29f6ajA45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/pp1ppppp/2p5/8/3Pn2B/8/PPPNPPPP/R2QKBNR b KQkq - 1 4w -/I ec4713c22c1f375aZA45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/pp1ppppp/2p5/8/3Pn2B/8/PPP1PPPP/RN1QKBNR w KQkq - 0 4A| -/I fc3a42897b98b6d1A45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp1ppppp/2p5/q7/3P3B/2P5/PP1QPPPP/R3KBNR b KQkq - 0 6q - %] a6fa973c7f522f1dA57enBenko GambitZaitsev Variation, Nescafe Frappe Attackrnbqkb1r/3ppppp/5n2/1NpP4/1p2P3/8/PP3PPP/R1BQKBNR b KQkq - 1 7p -%] 522cdc7a26b8b9e7A57enBenko GambitZaitsev Variation, Nescafe Frappe Attackrnbqkb1r/3ppppp/5n2/2pP4/1p2P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7o -%] 33e1eda4e7a1e0a4A57enBenko GambitZaitsev Variation, Nescafe Frappe Attackrnbqkb1r/3ppppp/5n2/1ppP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6n -%]f7e6e0ec0c215daeA57enBenko GambitZaitsev Variation, Nescafe Frappe Attackrnbqkb1r/3ppppp/5n2/1ppP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6d - o 38f21389198ff8d3A58enBenko Gambit Accepted, Central Storming Variationrn1qkb1r/3ppp1p/b4np1/2pP4/5P2/2N5/PP2P1PP/R1BQKBNR b KQkq - 0 7c -o c5e46e84001ec55aZA58enBenko Gambit Accepted, Central Storming Variationrn1qkb1r/3ppp1p/b4np1/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7b -o 2b85da26c83dfdacA58enBenko Gambit Accepted, Central Storming Variationrnbqkb1r/3ppp1p/P4np1/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6a -o d012c2840adf7f75uA58enBenko Gambit Accepted, Central Storming Variationrnbqkb1r/3ppp1p/P4np1/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6W - K d1eda6f64269a376vA59enBenko Gambit Accepted, Yugoslavrn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7  ^XA^ w 4 4 4 4 4 4 4^^^^^^^^"= -7Yaa22deab73b6e1deE94enKing's Indian DefenseOrthodox Variation, Positional Defenser1bqkb1r/pppn1p1p/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQkq - 1 6!< -7Yd9a25d527293ab7d}E94enKing's Indian DefenseOrthodox Variation, Positional Defenser1bqkb1r/pppn1p1p/3p1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6Q? -7Y64eb9829f402f164dE94enKing's Indian DefenseOrthodox Variation, Positional Defenser1bqk2r/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b kq - 3 7 > -7Y1a9ee31d88f12a74tE94enKing's Indian DefenseOrthodox Variation, Positional Defenser1bqk2r/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQkq - 2 72 - 7Wdbbabb02a26ff9d3E94enKing's Indian DefenseOrthodox Variation, Ukrainian Defensernbq1rk1/1pp2pbp/3p1np1/p3p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 8P\ - 7Q1fc7836547bab49eE92enKing's Indian DefensePetrosian Variation, Stein Defensernbq1rk1/1pp2pbp/3p1np1/p2Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 8N - 7Saa3e4df9c48e55c2E93enKing's Indian DefensePetrosian Variation, Normal Defenser1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 8 @ - 7Y6e43759e215b188fE94enKing's Indian DefenseOrthodox Variation, Positional Defenser1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 4 8$ - 7M1320a553470c69ffE94enKing's Indian DefenseOrthodox Variation, Glek Defenser1bq1rk1/ppp2pbp/n2p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8 - 7Qcfdae32cb63326f8E94enKing's Indian DefenseOrthodox Variation, Donner Defensernbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 8$ - 7cf64dd621d0625040@E97enKing's Indian DefenseOrthodox Variation, Aronin-Taimanov Defenser1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8 n OeOX! R R R R R R Rzzzzzzzzz x - 7110564105aad82f77wE86enKing's Indian DefenseSämisch Variationrnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8 w - 71822caceadd18fcccE86enKing's Indian DefenseSämisch Variationrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 7 0 - Q 9e9da6b188ca61e2E75enKing's Indian, Averbakh, Main Linernbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 86" + 7O970f2d1cfb6e010E81enKing's Indian DefenseSämisch Variation, Byrne Defensernbq1rk1/1p2ppbp/p1pp1np1/8/2PPP3/2NBBP2/PP4PP/R2QK1NR w KQ - 0 8! -7O db870322289618ccE81enKing's Indian DefenseSämisch Variation, Byrne Defensernbq1rk1/pp2ppbp/2pp1np1/8/2PPP3/2NBBP2/PP4PP/R2QK1NR b KQ - 1 7 -7O 8e8aa2801116dabfE81enKing's Indian DefenseSämisch Variation, Byrne Defensernbq1rk1/pp2ppbp/2pp1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7 - 7S714e8db1b84c5925%E83enKing's Indian DefenseSämisch Variation, Panno Formationr1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8 -7Sa3b97c425f6ca1f9E83enKing's Indian DefenseSämisch Variation, Panno Formationr1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 4 7   - ] 3b1ad7a209521693E83enKing's Indian, Sämisch, Ruban Variation1rbq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 5 8(j - 7kbefae9991bd5b4d4E88enKing's Indian DefenseSämisch Variation, Orthodox Variation, 7.d5 c6rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 8  +  F T bRA#sdIII + 7%683690b51d20872rE72enKing's Indian DefensePomar Systemrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N3P1/PP2NPBP/R1BQK2R b KQ - 1 7 -7%122782c479f9058cE72enKing's Indian DefensePomar Systemrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N3P1/PP3PBP/R1BQK1NR w KQ - 0 7 -7%985f8a8eea1cfdbaE72enKing's Indian DefensePomar Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3PBP/R1BQK1NR b KQ - 2 6 -7%2dafa9f3a7f125c3E72enKing's Indian DefensePomar Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR w KQ - 1 6/ - 7y2d013503ead23081E74enKing's Indian DefenseAverbakh Variation, Benoni Defense, Exchange Variationrnbq1rk1/pp2ppbp/3p1np1/2P3B1/2P1P3/2N5/PP2BPPP/R2QK1NR b KQ - 0 7h!! - 7]1f38c1aaeacef1e0E65enKing's Indian DefenseFianchetto Variation, Yugoslav Variationrnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7S - 7U2c8004766c15676foE87enKing's Indian DefenseSämisch Variation, Closed Variationrnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7 , - 5Qac1c8c63658482bcE49enNimzo-Indian DefenseNormal Variation, Botvinnik Systemrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6j -7O fc5f6fbf5eb7c072rE76enKing's Indian DefenseFour Pawns Attack, Dynamic Attackrnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR w KQ - 1 6 ` - 7Kb2cad11ec833e091E78enKing's Indian DefenseFour Pawns Attack, Fluid Attackrnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7%F - 7e50ddce1b3c3a35ddE92enKing's Indian DefenseOrthodox Variation, Gligoric-Taimanov Systemrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BN2/PP2BPPP/R2QK2R b KQ - 1 7 /z - 7we8ea548090e8f1b0E74enKing's Indian DefenseAverbakh Variation, Benoni Defense, Advance Variationrnbq1rk1/pp2ppbp/3p1np1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR b KQ - 0 7m - 7O7b4211b450303c6foE76enKing's Indian DefenseFour Pawns Attack, Dynamic Attackrnbq1rk1/pp2ppbp/3p1np1/2pP4/2P1PP2/2N2N2/PP4PP/R1BQKB1R b KQ - 0 7l -7Oc14a52e7c916aa322E76enKing's Indian DefenseFour Pawns Attack, Dynamic Attackrnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP4PP/R1BQKB1R w KQ - 0 7k -7O273b83493651a14fOE76enKing's Indian DefenseFour Pawns Attack, Dynamic Attackrnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N2N2/PP4PP/R1BQKB1R b KQ - 2 6 9 - 7399dd36a42426b80eE92enKing's Indian DefensePetrosian Variationrnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R b KQ - 0 7. - 5Q c6f09d54d5603ff6E49enNimzo-Indian DefenseNormal Variation, Botvinnik Systemrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 0 7- - 5Q 8d25f765783cd0b6E49enNimzo-Indian DefenseNormal Variation, Botvinnik Systemrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7 }umf_XQJC<5.'  ^}vohaZSLE>70)"  { s k cN \ U N G @ 9 2 + $      z.& s l e ^ W P I B ; 4 - &     z r j b Z R~F> K D = 6 / ( !    6 | u n g ` Y R K D = 6 / ( !    y r k d ] V O H A : 3 , %    zsle^WPIB;4-& f{tmf_XQJC<5.'  v{tmf_XQJC<5.'  xqiaYQIA91nV*#VXs_j_ XZ^YY[ZZFX.`W^`_Z9WVX__4X-ZYY[ZZuX]`IW%^`a0a aSaa`i``t```{```~`~J`z`x`w)`v`tk`r1`nq`n)`Q`P`G`E`Ah`>`=`;2`9v`38`/`+`)`(V`'k`&`%J` ` ``\```` ` |`K`a`___0__d____u____~:_}b_u_nk_j_hZ_f*_[_X_V_U_R_FU_F#_A__<_:_2_1_(_ ____ C_ W_ ___h_ ^^^^^^^ ^P^2^^^~l^|^{(^y ^u^sI^s ^p{^pV^p^iv^i^gI^f^ct^Y^V^M^B^ > >a^ M ~ + 7A651d25c9ca91d00D76enNeo-Grünfeld DefenseDelayed Exchange Variationrnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 8p - 7M512e65b8eca3b513D79enNeo-Grünfeld DefenseUltra-delayed Exchange Variationrnbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8o - 7M 225ecaf14cc9b8a9D79enNeo-Grünfeld DefenseUltra-delayed Exchange Variationrnbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7b - /S 309da6d4690e0c3d=D83enGrünfeld DefenseBrinckmann Attack, Reshevsky Gambitrnb2rk1/pp2ppbp/5np1/q1Pp4/2P2B2/2N1P3/PP3PPP/2RQKBNR w K - 1 8a -/S e9ee338fc07c2db2D83enGrünfeld DefenseBrinckmann Attack, Reshevsky Gambitrnbq1rk1/pp2ppbp/5np1/2Pp4/2P2B2/2N1P3/PP3PPP/2RQKBNR b K - 0 7` -/S 960d115f23607adeD83enGrünfeld DefenseBrinckmann Attack, Reshevsky Gambitrnbq1rk1/pp2ppbp/5np1/2pp4/2PP1B2/2N1P3/PP3PPP/2RQKBNR w K - 0 7 M^ -/S dd518243f878f907D83enGrünfeld DefenseBrinckmann Attack, Reshevsky Gambitrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/2RQKBNR w K - 4 6] -/S d7f96ff42d2110ecD83enGrünfeld DefenseBrinckmann Attack, Reshevsky Gambitrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/2RQKBNR b Kkq - 3 5+T - /} bd56a15b88c956baD83enGrünfeld DefenseBrinckmann Attack, Grünfeld Gambit, Botvinnik Variationrn1q1rk1/pp2ppbp/4bnp1/2Pp4/2P2B2/2N1P3/PP3PPP/2RQKBNR w K - 1 8F - /'35cc5b3c2be56d76vD94enGrünfeld DefenseFlohr Defensern1q1rk1/pp2ppbp/2p2np1/3p1b2/2PP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 6 8-D - ;k9b9482aafd139a22"D52enQueen's Gambit DeclinedCambridge Springs Defense, Rubinstein Variationr1b1kb1r/pp1n1ppp/2p1pn2/q5B1/2pP4/2N1P3/PP1N1PPP/R2QKB1R w KQkq - 0 80C -;k4992bb98af2d74c1D52enQueen's Gambit DeclinedCambridge Springs Defense, Rubinstein Variationr1b1kb1r/pp1n1ppp/2p1pn2/q2p2B1/2PP4/2N1P3/PP1N1PPP/R2QKB1R b KQkq - 2 76 ) ;)4ed2f49a5bf6bdD56enQueen's Gambit DeclinedLasker Defensernbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8( - ;1512fd77bd691ccdcD58enQueen's Gambit DeclinedTartakower Defensernbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8! - ;[6cb1f82dc8e25107D63enQueen's Gambit DeclinedOrthodox Defense, Henneberger Variationr1bq1rk1/1ppnbppp/p3pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R w K - 0 8 - ;C2c3ce43158027a60`D63enQueen's Gambit DeclinedOrthodox Defense, Main Liner1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R w K - 0 8 h  j  L l1hHHHHHh A - +;3e600bbc3663b2f1A19enEnglish OpeningMikenas-Carls, Sicilianrnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4; - +_5bfaa971f9820bceA21enEnglish OpeningKing's English Variation, Smyslov Defensern1qkbnr/ppp2ppp/3p4/4p3/2P3b1/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 2 4 %s5 - +[3cd1d91b41f66f9aA21enEnglish OpeningKing's English Variation, Keres Defensernbqkbnr/pp3ppp/2pp4/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 44 -+[aeab34f43636bc21!A21enEnglish OpeningKing's English Variation, Keres Defensernbqkbnr/ppp2ppp/3p4/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 34/ - + 4995b474d560fafcA22enEnglish OpeningKing's English Variation, Two Knights Variation, Reversed Dragonrnbqkb1r/ppp2ppp/5n2/3pp3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4^p2) + + 5beff6602437cf8A22enEnglish OpeningKing's English Variation, Two Knights Variation, Smyslov Systemrnbqk2r/pppp1ppp/5n2/4p3/1bP5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 1 45# - + 5e857b8f3e746761aA23enEnglish OpeningKing's English Variation, Two Knights Variation, Keres Variationrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 45 - + 254bc53b323b2691A24enEnglish OpeningKing's English Variation, Two Knights Variation, Fianchetto Linernbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4% - +m90901935d014a8dcA28enEnglish OpeningKing's English Variation, Four Knights Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4# - +m3b7dc1d7c1850ddfA28enEnglish OpeningKing's English Variation, Four Knights Variationrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3" - +gfc99c0d1bcb65b97A35enEnglish OpeningSymmetrical Variation, Four Knights Variationr1bqkb1r/pp1ppppp/2n2n2/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 2 4  -+g57741833ad27fe94A35enEnglish OpeningSymmetrical Variation, Four Knights Variationrnbqkb1r/pp1ppppp/5n2/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3   e W/h OOOOO1YE r.n - 5{9d4fc327f03edb300E36enNimzo-Indian DefenseClassical Variation, Noa Variation, Botvinnik Variationr1bqk2r/ppp2ppp/2n1pn2/3p4/2PP4/P1Q5/1P2PPPP/R1B1KBNR w KQkq - 1 7,m -5{ 36a21bc5e1af7e333E36enNimzo-Indian DefenseClassical Variation, Noa Variation, Botvinnik Variationrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1Q5/1P2PPPP/R1B1KBNR b KQkq - 0 6.l -5{ceb48bdfa26c4feeE36enNimzo-Indian DefenseClassical Variation, Noa Variation, Botvinnik Variationrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b5/1PQ1PPPP/R1B1KBNR w KQkq - 0 6 neb + 5S caa575a53e6f3c9E36enNimzo-Indian DefenseClassical, Noa Variation, Main Linernbqk2r/ppp2ppp/4p3/3p4/2PPn3/P1Q5/1P2PPPP/R1B1KBNR w KQkq - 1 7V - 5/787ae4204fe5d13e>E46enNimzo-Indian DefenseSimagin Variationrnbq1rk1/ppp2ppp/3bpn2/3p4/2PP4/P1N1P3/1P2NPPP/R1BQKB1R w KQ - 1 7U -5/edb5c60e742f4d311E46enNimzo-Indian DefenseSimagin Variationrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1N1P3/1P2NPPP/R1BQKB1R b KQ - 0 6T -5/2629f7283d63c371qE46enNimzo-Indian DefenseSimagin Variationrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQ - 0 6 '!2 - 7a52fddfa896fa3070pE60enKing's Indian DefenseSemi-Classical Variation, Benoni Variationrnbq1rk1/pp2ppbp/2pp1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R w KQ - 0 7*J - 5Ud78d18a3baadda5aZE52enNimzo-Indian DefenseNormal Variation, Schlechter Defensernbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7I - 5U bce451b3442e6dc1E52enNimzo-Indian DefenseNormal Variation, Schlechter Defensernbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 6;> - 5O 5a95801dbb6966bcE53enNimzo-Indian DefenseNormal Variation, Gligoric Systemrnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7 ; k 7S ulllllllll V} + 51e06b60ca762dfaeE29enNimzo-Indian DefenseSämisch Variationr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 1 8 + 514ae5bbb723b3645EE29enNimzo-Indian DefenseSämisch Variationr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQkq - 0 7  - 514f7b318adf67d905E29enNimzo-Indian DefenseSämisch Variationr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQkq - 0 7 - 516e424a8cc2df8b0fE29enNimzo-Indian DefenseSämisch Variationr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQkq - 0 6 - 51a5de7baa8b93054fOE29enNimzo-Indian DefenseSämisch Variationr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQkq - 2 6 + 51e33a3489a02a04cLE29enNimzo-Indian DefenseSämisch Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5 w - 5W3ecd184d9a6c6df5E34enNimzo-Indian DefenseClassical Variation, Belyavsky Gambitrnb1k2r/ppp2ppp/5n2/4pq2/1b1P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 8 -5W3a14c49cbe8c8098E34enNimzo-Indian DefenseClassical Variation, Belyavsky Gambitrnb1k2r/ppp2ppp/4pn2/5q2/1b1P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 7 -5W8b0db681ac5abcfcE34enNimzo-Indian DefenseClassical Variation, Belyavsky Gambitrnb1k2r/ppp2ppp/4pn2/5q2/1b1P4/2N2N2/PPQ1PPPP/R1B1KB1R w KQkq - 2 7 -5W757367eee5229b4eNE34enNimzo-Indian DefenseClassical Variation, Belyavsky Gambitrnb1k2r/ppp2ppp/4pn2/3q4/1b1P4/2N2N2/PPQ1PPPP/R1B1KB1R b KQkq - 1 6~ -5Wae178b188dc4fa73sE34enNimzo-Indian DefenseClassical Variation, Belyavsky Gambitrnb1k2r/ppp2ppp/4pn2/3q4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6t - 5E 2dec100a81e99055UE41enNimzo-Indian DefenseHübner Variation, Main Liner1bqk2r/pp3ppp/2nppn2/2p5/2PP4/2PBPN2/P4PPP/R1BQK2R w KQkq - 0 8 E S E \ 8 ZZZZZ.'k -;e3291dc4e3456e276vD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationr1bqkb1r/pp3ppp/2n1pn2/2pp4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 6V&h +;e9448aa40d8ea844DD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationrnbqkb1r/pp3ppp/4pn2/2pp4/2P5/2N1PN2/PP1P1PPP/R1BQKB1R w KQkq - 0 5'g -;eef355b0af2c9a3399D40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/2N1PN2/PP1P1PPP/R1BQKB1R b KQkq - 0 4'f -;e421819b8d6962b9dD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4 &l -;e96c9b1cceb4c3352RD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationr1bqk2r/pp3ppp/2nbpn2/2pp4/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 3 7` - /+252c24fcbb48226ajD47enSemi-Slav DefenseMeran Variationr1bqkb1r/p2n1ppp/2p1pn2/1p6/2BP4/2N1PN2/PP3PPP/R1BQK2R w KQkq - 0 8 ~| + ;A eabb1ad9b76aa23#D37enQueen's Gambit DeclinedHarrwitz Attack, Main Linernbq1rk1/pp3ppp/4pn2/2bp4/2P2B2/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8{ -;A76a2ff0779c97d73sD37enQueen's Gambit DeclinedHarrwitz Attack, Main Linernbq1rk1/pp2bppp/4pn2/2Pp4/2P2B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 7z +;A941ddd79ad52a1fD37enQueen's Gambit DeclinedHarrwitz Attack, Main Linernbq1rk1/pp2bppp/4pn2/2pp4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 71&n - ;ee214274f42e601a9D40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationr1bq1rk1/pp3ppp/2nbpn2/2pp4/2PP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 5 8%m -;ee8bccaf897bfe842BD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Symmetrical Variationr1bqk2r/pp3ppp/2nbpn2/2pp4/2PP4/2NBPN2/PP3PPP/R1BQ1RK1 b kq - 4 7)R + ;g574c1ff70bb430a D52enQueen's Gambit DeclinedCambridge Springs Defense, Yugoslav Variationr1b1kb1r/pp1n1ppp/2p1p3/q2n2B1/3P4/2N1PN2/PP3PPP/R2QKB1R w KQkq - 0 8  Xa/`+XQ ???????????l - ;G5c890603273035f0D31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqk1nr/5ppp/2p1p3/pp6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R w KQkq - 0 8k -;Gda93b3c244ac3960`D31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqk1nr/p4ppp/2p1p3/1p6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R b KQkq - 1 7j -;Gf31ee977d6cd5264dD31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqk1nr/p4ppp/2p1p3/1p6/PbpP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7i -;G931a83624d60ef59YD31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqk1nr/pp3ppp/2p1p3/8/PbpP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6h -;G3e37c1d0693f67fdD31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqk1nr/pp3ppp/2p1p3/8/PbpP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6g -;Gf776a8d622c8afdfD31enQueen's Gambit DeclinedSemi-Slav, Abrahams Variationrnbqkbnr/pp3ppp/2p1p3/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5^ - ;C416c6cb28590970a D31enQueen's Gambit DeclinedSemi-Slav, Koomen Variationrnb1k1nr/p3qppp/2p1p3/1p6/PbpP4/2N1PN2/1P1B1PPP/R2QKB1R w KQkq - 3 8 -;-d2e09fea5dc0d92d-D27enQueen's Gambit AcceptedFurman Variationrnbqkb1r/1p3ppp/p3pn2/2P5/2B5/4PN2/PP3PPP/RNBQ1RK1 b kq - 0 7[ -;C3a5f80719d3a9a46FD31enQueen's Gambit DeclinedSemi-Slav, Koomen Variationrnbqkbnr/p4ppp/2p1p3/1p6/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6Z -;C5196fe9df0a94f88D31enQueen's Gambit DeclinedSemi-Slav, Koomen Variationrnbqkbnr/p4ppp/2p1p3/1p6/2pP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 0 6Y -;C 319294886b04f2b5D31enQueen's Gambit DeclinedSemi-Slav, Koomen Variationrnbqkbnr/pp3ppp/2p1p3/8/2pP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5 - ;-46f38405daf327e5D27enQueen's Gambit AcceptedFurman Variationrnbqk2r/1p3ppp/p3pn2/2b5/2B5/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 8+z - ;w5b01580d6b3568f8D28enQueen's Gambit AcceptedClassical Defense, Alekhine System (Except Main Line)rnbqkb1r/5ppp/p3pn2/1pp5/2BP4/4PN2/PP2QPPP/RNB2RK1 w kq - 0 8 uD  @D 6 {DDwwww E -;+93e145fd0df4aa4eND37enQueen's Gambit DeclinedHarrwitz Attackrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5= - ;S9cc8e25b4c963c86D38enQueen's Gambit DeclinedRagozin Defense, Alekhine Variationrnbqk2r/ppp2ppp/4pn2/3p4/QbPP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5 F - ;+48b5a37c9494402d-D37enQueen's Gambit DeclinedHarrwitz Attackrnbqk2r/ppp1bppp/4pn2/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5" - /b87a994f94c05dc0D45enSemi-Slav DefenseMain Linernbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5~! - /631e75b9fc263cfdD45enSemi-Slav DefenseMain Linernbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5~ - /15698788e404acafD45enSemi-Slav DefenseMain Linernbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4| - /b844c53ac05b240b D45enSemi-Slav DefenseMain Linernbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4O - ;O f8064d92b13e6098D37enQueen's Gambit DeclinedVienna Variation, Quiet Variationrnbqkb1r/ppp2ppp/4pn2/8/2pP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5+ - ;'6f767c719ad619bfD41enQueen's Gambit DeclinedSemi-Tarraschrnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5 - ;? 7248c7b142baa34aJD50enQueen's Gambit DeclinedPseudo-Tarrasch Variationrnbqkb1r/pp3ppp/4pn2/2pP2B1/3P4/2N5/PP2PPPP/R2QKBNR b KQkq - 0 5QW -;] 6d7798ed17d2b3344D35enQueen's Gambit DeclinedExchange Variation, Positional Variationrnbqkb1r/ppp2ppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5 %4 - ;aa706b08a8892d66ajD40enQueen's Gambit DeclinedSemi-Tarrasch Defense, Pillsbury Variationrnbqkb1r/pp3ppp/4pn2/2pp2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5 ) X - ;] ab2dcfdba75868fcD35enQueen's Gambit DeclinedExchange Variation, Positional Variationrnbqkb1r/ppp2ppp/5n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR b KQkq - 1 5 + ;94ddb43ddbc4d942BD51enQueen's Gambit DeclinedModern, Knight Defenser1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5 \ a + -7 b8c91402d8998e2D32enTarrasch DefenseTwo Knights Variationrnbqkbnr/pp3ppp/8/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 5 - ;O 2be0f7ec0e864e5b[D53enQueen's Gambit DeclinedModern Variation, Heral Variationrnbqk2r/ppp1bppp/4pB2/3p4/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 0 5 }j - -+14ef70feaeef44d5D32enTarrasch DefenseMarshall Gambitrnbqkbnr/pp3ppp/8/2pp4/3PP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5~ - /S 91da737bee17aff0D85enGrünfeld DefenseExchange Variation, Nadanian Attackrnbqkb1r/ppp1pp1p/6p1/3n4/N2P4/8/PP2PPPP/R1BQKBNR b KQkq - 1 5O ,q -;s d76c90b6236837efD31enQueen's Gambit DeclinedCharousek (Petrosian) Variation, Miladinovic Gambitrnbqk1nr/ppp1bppp/4p3/3p4/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4  ]b   7]0 - sed68bf60834103feC67enRuy LopezBerlin Defense, l'Hermet Variation, Westerinen Liner1bqkb1r/ppp2ppp/2p5/4P3/4n3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 8/ -s491006cb8f7638ccC67enRuy LopezBerlin Defense, l'Hermet Variation, Westerinen Liner1bqkb1r/ppp2ppp/2pn4/4P3/8/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 7. -sd58df98987438fbcC67enRuy LopezBerlin Defense, l'Hermet Variation, Westerinen Liner1bqkb1r/ppp2ppp/2pn4/4p3/3P4/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 7- -s e35ddbde1e6115c3C67enRuy LopezBerlin Defense, l'Hermet Variation, Westerinen Liner1bqkb1r/pppp1ppp/2Bn4/4p3/3P4/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6 0/" - Eb3f976e26e428777wC68enRuy LopezExchange, Alekhine Variationr3kbnr/1ppb1ppp/p1p5/8/3NP3/8/PPP2PPP/RNB1K2R w KQkq - 1 8! -E513888b0b4185746FC68enRuy LopezExchange, Alekhine Variationr1b1kbnr/1pp2ppp/p1p5/8/3NP3/8/PPP2PPP/RNB1K2R b KQkq - 0 7 +E132107f16d719f6C68enRuy LopezExchange, Alekhine Variationr1b1kbnr/1pp2ppp/p1p5/8/3qP3/5N2/PPP2PPP/RNB1K2R w KQkq - 0 7 -Edde7ad0f4b608aefC68enRuy LopezExchange, Alekhine Variationr1bqkbnr/1pp2ppp/p1p5/8/3QP3/5N2/PPP2PPP/RNB1K2R b KQkq - 0 6 -Ea050bacb7ff165d2C68enRuy LopezExchange, Alekhine Variationr1bqkbnr/1pp2ppp/p1p5/8/3pP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 6 -E 3b2eb049bb8a71c7C68enRuy LopezExchange, Alekhine Variationr1bqkbnr/1pp2ppp/p1p5/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 5  - Yf560e5326b028662bC68enRuy LopezExchange Variation, Alekhine Variationr1b1k1nr/1pp2ppp/p1pb4/8/3NP3/8/PPP2PPP/RNB1K2R w KQkq - 1 8 - i2f8ac932db40579aC79enRuy LopezSteinitz Defense Deferred, Lipnitsky Variationr2qkb1r/2p2ppp/p1pp1n2/4p3/3PP1b1/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 8 c l  uT`lllllllllllllllllllwe -%% 19b87d9f375b8347GC55enItalian GameGiuoco Pianor1bqk2r/pppp1ppp/2n2n2/4p3/2BNP3/8/PPP2PPP/RNBQ1RK1 b kq - 0 6zd -%% 60ca65d3e9bb78c5C55enItalian GameGiuoco Pianor1bqk2r/pppp1ppp/2n2n2/4p3/2BbP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6|a -%%3ee55ce7eec931beC55enItalian GameGiuoco Pianor1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 5 4 Z - Y953438a80e6c042f/C63enRuy LopezSchliemann Defense, Möhring Variationr1b1kbnr/ppp3pp/2N5/1B1q4/4p3/8/PPPP1PPP/R1BQK2R w KQkq - 1 8 Y -Y4ae64c36a6d9110c C63enRuy LopezSchliemann Defense, Möhring Variationr1bqkbnr/ppp3pp/2N5/1B6/4p3/8/PPPP1PPP/R1BQK2R b KQkq - 0 7X -Ya53bb5aa4898c580C63enRuy LopezSchliemann Defense, Möhring Variationr1bqkbnr/ppp3pp/2n5/1B2N3/4p3/8/PPPP1PPP/R1BQK2R w KQkq - 0 7W -Y 7713488032900456VC63enRuy LopezSchliemann Defense, Möhring Variationr1bqkbnr/ppp3pp/2n5/1B1pN3/4N3/8/PPPP1PPP/R1BQK2R b KQkq - 0 6V -Y c950bc7b968ea160`C63enRuy LopezSchliemann Defense, Möhring Variationr1bqkbnr/ppp3pp/2n5/1B1pp3/4N3/5N2/PPPP1PPP/R1BQK2R w KQkq - 0 6 7L + [81b2b1f81c520fcC63enRuy LopezSchliemann Defense, Classical Variationr1b1kbnr/ppp3pp/2N5/1B4q1/4p3/8/PPPP1PPP/R1BQK2R w KQkq - 1 8 > - G1181f688e04dac322C66enRuy LopezBerlin Defense, Tarrasch Trapr2q1rk1/pppbbppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQR1K1 w - - 7 8 = -G1b291b3f351445d9C66enRuy LopezBerlin Defense, Tarrasch Trapr2qk2r/pppbbppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQR1K1 b kq - 6 7 W  k B  sW J - %O 976dca2683dd88ccC52enItalian GameEvans Gambit, Compromised Defenser1bqk1nr/pppp1ppp/2n5/b7/2B1P3/2p2N2/P4PPP/RNBQ1RK1 w kq - 0 8W -%E 56b264d8204c125c\C52enItalian GameEvans Gambit, Johner Defenser1bqk1nr/pppp1ppp/2n5/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1 b kq - 1 7! < - %I ca8648929f351044DC52enItalian GameEvans Gambit, Dufresne Defenser1bqk1nr/pppp1ppp/2n5/b7/2B1P3/2Pp1N2/P4PPP/RNBQ1RK1 w kq - 0 8 . - %E68fdd8659bc599e1C52enItalian GameEvans Gambit, Mieses Defenser1bqk2r/ppppnppp/2n5/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 2 8 - %E ab2bd54487e93c8bC52enItalian GameEvans Gambit, Lasker Defenser1bqk1nr/ppp2ppp/1bnp4/4p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 1 8  -%E f476f83b364f4f24$C52enItalian GameEvans Gambit, Lasker Defenser1bqk1nr/ppp2ppp/2np4/b3p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1 b kq - 0 7 - %Y 16b70669ec159f15C52enItalian GameEvans Gambit, Sanders-Alapin Variationr2qk1nr/pppb1ppp/2np4/b3p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 1 8 - %[f6a5320971ca41ceC52enItalian GameEvans Gambit, Alapin-Steinitz Variationr2qk1nr/ppp2ppp/2np4/b3p3/2BPP1b1/2P2N2/P4PPP/RNBQ1RK1 w kq - 1 8 v + %K d5c502d8db653caC52enItalian GameEvans Gambit, Anderssen Defenser1bqk2r/pppp1ppp/2n2n2/b7/2BpP3/2P2N2/P4PPP/RNBQ1RK1 w kq - 0 8u -%K96225aaf49cd47dfC52enItalian GameEvans Gambit, Anderssen Defenser1bqk2r/pppp1ppp/2n2n2/b3p3/2BPP3/2P2N2/P4PPP/RNBQ1RK1 b kq - 0 7t -%K5317750558046a9dC52enItalian GameEvans Gambit, Anderssen Defenser1bqk2r/pppp1ppp/2n2n2/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQ1RK1 w kq - 3 7yh - %% 4b3b394e399828a1C55enItalian GameGiuoco Pianor1bqk2r/ppp2ppp/3p1n2/4p1B1/2BnP3/8/PPP2PPP/RN1Q1RK1 w kq - 0 8xg -%% 7281af2febe061ccC55enItalian GameGiuoco Pianor1bqk2r/pppp1ppp/5n2/4p1B1/2BnP3/8/PPP2PPP/RN1Q1RK1 b kq - 1 7uf -%%b4dbf8195b6aba04C55enItalian GameGiuoco Pianor1bqk2r/pppp1ppp/5n2/4p3/2BnP3/8/PPP2PPP/RNBQ1RK1 w kq - 0 7 E w +  w S $KKKKK V - %Odb9741ae2a17442c,C42enRussian GameClassical Attack, Mason Variationrnbq1rk1/ppp1bppp/8/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 w - - 4 8 U -%Od13fac19ff4eadc7C42enRussian GameClassical Attack, Mason Variationrnbqk2r/ppp1bppp/8/3p4/3Pn3/3B1N2/PPP2PPP/RNBQ1RK1 b kq - 3 7 T -%O af4ad72d83bd76d7C42enRussian GameClassical Attack, Mason Variationrnbqk2r/ppp1bppp/8/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 2 7  H + %Sa0dcd23d58dcf43CC43enRussian GameModern Attack, Trifunovic Variationrnbq1rk1/ppp2ppp/8/3pb3/2PPn3/3B4/PP3PPP/RNBQ1RK1 w - - 0 8G -%Sc2ce3982880372e1C43enRussian GameModern Attack, Trifunovic Variationrnbq1rk1/ppp2ppp/3b4/3pN3/2PPn3/3B4/PP3PPP/RNBQ1RK1 b - - 0 7F -%S4eeda6a6cb0cd9e6C43enRussian GameModern Attack, Trifunovic Variationrnbq1rk1/ppp2ppp/3b4/3pN3/3Pn3/3B4/PPP2PPP/RNBQ1RK1 w - - 3 7 E -%S44454b111e55300d C43enRussian GameModern Attack, Trifunovic Variationrnbqk2r/ppp2ppp/3b4/3pN3/3Pn3/3B4/PPP2PPP/RNBQ1RK1 b kq - 2 6D -%S 3a30302562a6eb1dC43enRussian GameModern Attack, Trifunovic Variationrnbqk2r/ppp2ppp/3b4/3pN3/3Pn3/3B4/PPP2PPP/RNBQK2R w KQkq - 1 6 C -%S9e685da7bdbc3a399C43enRussian GameModern Attack, Trifunovic Variationrnbqkb1r/ppp2ppp/8/3pN3/3Pn3/3B4/PPP2PPP/RNBQK2R b KQkq - 0 5B -%S 202ba95c19a29f0fC43enRussian GameModern Attack, Trifunovic Variationrnbqkb1r/ppp2ppp/8/3pp3/3Pn3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 0 5: - #? 5679502a1627e45c\C45enScotch GamePaulsen, Gunsberg Defenser1bnk2r/ppppnppp/5q2/1Bb5/3NP3/2P1B3/PP3PPP/RN1QK2R w KQkq - 3 8   y ~ W          ````````` -  3c3222c3d7ddcb19C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen Defensernbqk2r/ppp2p1p/3b1n2/3PN3/2B2ppP/8/PPPP2P1/RNBQK2R w KQkq - 1 8%r -  28d672f7f380d197C39enKing's Gambit Accepted, Kieseritzky Gambit, Paulsen Defense Deferredrnbqk2r/ppp2pbp/5n2/3PN3/2B2ppP/8/PPPP2P1/RNBQK2R w KQkq - 1 8 - 986a4f4108c71a3d=C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen Defensernbqkb1r/ppp2p1p/5n2/3PN3/2B2ppP/8/PPPP2P1/RNBQK2R b KQkq - 0 7~ - bfb5450cd2a8583b;C39enKing's Gambit Accepted, Kieseritzky Gambit, Anderssen Defensernbqkb1r/ppp2p1p/5n2/3pN3/2B1PppP/8/PPPP2P1/RNBQK2R w KQkq - 0 7 j|d - )/b1d315d13a7e33e1C40enLatvian GambitBehting Variationrnb1kb1N/ppp3pp/5n2/3p4/2B1p3/8/PPPP1PqP/RNBQKR2 w Qq - 1 8xc -)/ea3d212497847277wC40enLatvian GambitBehting Variationrnb1kbnN/ppp3pp/8/3p4/2B1p3/8/PPPP1PqP/RNBQKR2 b Qq - 0 7{b -)/c0ae2d5dd7f26c4bKC40enLatvian GambitBehting Variationrnb1kbnr/ppp2Npp/8/3p4/2B1p3/8/PPPP1PqP/RNBQKR2 w Qkq - 0 7za -)/45c40f494b26226dmC40enLatvian GambitBehting Variationrnb1kbnr/pppp1Npp/8/8/2B1p3/8/PPPP1PqP/RNBQKR2 b Qkq - 1 6{` -)/975686e1f8148a7b{C40enLatvian GambitBehting Variationrnb1kbnr/pppp1Npp/8/8/2B1p3/8/PPPP1PqP/RNBQK2R w KQkq - 0 6~_ -)/8bde2132dcf1c3c3C40enLatvian GambitBehting Variationrnb1kbnr/pppp1Npp/8/6q1/2B1p3/8/PPPP1PPP/RNBQK2R b KQkq - 2 5 H q  ^6 w3 +q d39f57ca0993cf5C36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/ppp2ppp/5n2/1B1P4/5p2/5N2/PPPP2PP/RNBQK2R b KQkq - 2 5 * - k 8ee7faac7ba9226ajC37enKing's Gambit Accepted, Middleton Countergambitrn1qkbnr/ppp2p2/3p4/6p1/2B1Ppp1/5N2/PPPP2P1/RNBQ1RK1 w kq - 0 8) -k 332d2d7792ae31cdC37enKing's Gambit Accepted, Middleton Countergambitrn1qkbnr/ppp2p2/3p4/6pp/2B1PpP1/5N2/PPPP2P1/RNBQ1RK1 b kq - 0 7( -k 94fd1828be363ffeC37enKing's Gambit Accepted, Middleton Countergambitrn1qkbnr/ppp2p2/3p4/6pp/2B1Ppb1/5N1P/PPPP2P1/RNBQ1RK1 w kq - 0 7' -k 89a38653b9169e89C37enKing's Gambit Accepted, Middleton Countergambitrn1qkbnr/ppp2p1p/3p4/6p1/2B1Ppb1/5N1P/PPPP2P1/RNBQ1RK1 b kq - 0 6& -k 61505bed7bb5577b{C37enKing's Gambit Accepted, Middleton Countergambitrn1qkbnr/ppp2p1p/3p4/6p1/2B1Ppb1/5N2/PPPP2PP/RNBQ1RK1 w kq - 2 6% -k 638391df3c305991C37enKing's Gambit Accepted, Middleton Countergambitrnbqkbnr/ppp2p1p/3p4/6p1/2B1Pp2/5N2/PPPP2PP/RNBQ1RK1 b kq - 1 5$ -k 1df6eaeb40c38281C37enKing's Gambit Accepted, Middleton Countergambitrnbqkbnr/ppp2p1p/3p4/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 0 5 V& - 9Y c2038c2294fdd94fOC37enKing's Gambit AcceptedSalvio Gambit, Anderssen Counterattackrnb1kb1r/ppp2p1p/3p3n/4N3/2BPPppq/8/PPP3PP/RNBQ1K1R w kq - 0 8 -9Yfbb91a4346859022"C37enKing's Gambit AcceptedSalvio Gambit, Anderssen Counterattackrnb1kb1r/pppp1p1p/7n/4N3/2BPPppq/8/PPP3PP/RNBQ1K1R b kq - 0 7  - 95 8b4bb3593eb61783C37enKing's Gambit AcceptedSilberschmidt Gambitrnb1kb1r/pppp1p1p/7n/4N3/2BPP1pq/5p2/PPP3PP/RNBQ1K1R w kq - 0 8  qi> czqqqqqqqqqqqqqqO --+ d4ec9cd120a3d4a6C23enBishop's OpeningPratt Variationrnbqk2r/pppp1ppp/5n2/2b1P3/2Bp4/2P5/PP3PPP/RNBQK1NR b KQkq - 0 5N --+ b5958a2c24bdf2c2C23enBishop's OpeningPratt Variationrnbqk2r/pppp1ppp/5n2/2b5/2BpP3/2P5/PP3PPP/RNBQK1NR w KQkq - 0 5M --+2eeb80aee0c6e6d7C23enBishop's OpeningPratt Variationrnbqk2r/pppp1ppp/5n2/2b1p3/2BPP3/2P5/PP3PPP/RNBQK1NR b KQkq - 0 4L --+ebdeaf04f10fcb95C23enBishop's OpeningPratt Variationrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/2P5/PP1P1PPP/RNBQK1NR w KQkq - 1 4$F -  ea0934f6dc640b6dmC32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Main Linern1qk2r/ppp2ppp/8/2bP1b2/4nP2/5N2/PPP1Q1PP/RNB1KB1R w KQkq - 4 8#E - 69105d786b8102e0C32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Main Linernbqk2r/ppp2ppp/8/2bP4/4nP2/5N2/PPP1Q1PP/RNB1KB1R b KQkq - 3 7 D - ff16d25a25c55964dC32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Main Linernbqk2r/ppp2ppp/8/2bP4/4nP2/5N2/PPP3PP/RNBQKB1R w KQkq - 2 7!C - 520b9601eff7b3e7C32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Main Linernbqkb1r/ppp2ppp/8/3P4/4nP2/5N2/PPP3PP/RNBQKB1R b KQkq - 1 6i8 - q 2462e29b8257024bKC36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/p4ppp/2p5/3n4/2B2p2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 87 -q e0723d624c9577feC36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/p4ppp/2p2n2/8/2B2p2/5N2/PPPP2PP/RNBQK2R b KQkq - 1 76 -q 48c97e4fae65b7d2C36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/p4ppp/2p2n2/1B6/5p2/5N2/PPPP2PP/RNBQK2R w KQkq - 0 75 -q bf1190bb4e4af4b9C36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/pp3ppp/2P2n2/1B6/5p2/5N2/PPPP2PP/RNBQK2R b KQkq - 0 64 -q 9f431893d759ef4eNC36enKing's Gambit Accepted, Abbazia Defense, Main Linernbqkb1r/pp3ppp/2p2n2/1B1P4/5p2/5N2/PPPP2PP/RNBQK2R w KQkq - 0 6 u|y x@L% @   d d W W W W W W :p - )O 2689ba28c4f60cc5C12enFrench DefenseMacCutcheon, Bogoljubov Variationrnb1k2r/ppp2p1p/4pp2/q7/1b1P4/2N5/PPPQ1PPP/R3KBNR w KQkq - 2 8o -)O d8fe7d476a16bd60`C12enFrench DefenseMacCutcheon, Bogoljubov Variationrnb1k2r/ppp2p1p/4pp2/3q4/1b1P4/2N5/PPPQ1PPP/R3KBNR b KQkq - 1 7n -)O f0e632c8abaf62c0C12enFrench DefenseMacCutcheon, Bogoljubov Variationrnb1k2r/ppp2p1p/4pp2/3q4/1b1P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7m -)O 1dbaa40e24a80329)C12enFrench DefenseMacCutcheon, Bogoljubov Variationrnb1k2r/ppp2ppp/4pB2/3q4/1b1P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6l -)Ob885addfffb65dc9C12enFrench DefenseMacCutcheon, Bogoljubov Variationrnb1k2r/ppp2ppp/4pn2/3q2B1/1b1P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 6 - -/ 50558eea366e5500B98enSicilian DefenseNajdorf Variationrnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8b - )g 1ddfc3aa77fad37d}C13enFrench DefenseAlekhine-Chatard Attack, Albin-Chatard Gambitrnb1k2r/pppn1ppp/4p3/3pP1q1/3P4/2N5/PPP2PP1/R2QKBNR w KQkq - 0 8a -)g 10a25323653c1989C13enFrench DefenseAlekhine-Chatard Attack, Albin-Chatard Gambitrnbqk2r/pppn1ppp/4p3/3pP1P1/3P4/2N5/PPP2PP1/R2QKBNR b KQkq - 0 7` -)g51c5109d81ea7c76vC13enFrench DefenseAlekhine-Chatard Attack, Albin-Chatard Gambitrnbqk2r/pppn1ppp/4p3/3pP1b1/3P3P/2N5/PPP2PP1/R2QKBNR w KQkq - 0 7( - -]ef7425e7ed545c92B96enSicilian DefenseNajdorf Variation, Neo-Classical Defenser1bqkb1r/1p3ppp/p1nppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8 - -a83660352368e2f4bKB97enSicilian DefenseNajdorf Variation, Poisoned Pawn Variationrnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8~ - )ifbd0684d2fbfc2cbC11enFrench DefenseClassical Variation, Burn Variation, Main Linernbq1rk1/ppp2ppp/4pb2/8/3PN3/5N2/PPP2PPP/R2QKB1R w KQ - 2 8} -)if17885fafae62b20 C11enFrench DefenseClassical Variation, Burn Variation, Main Linernbqk2r/ppp2ppp/4pb2/8/3PN3/5N2/PPP2PPP/R2QKB1R b KQkq - 1 7| -)i2a1c690c92004a1dC11enFrench DefenseClassical Variation, Burn Variation, Main Linernbqk2r/ppp2ppp/4pb2/8/3PN3/8/PPP2PPP/R2QKBNR w KQkq - 0 7~T - -+bd9348443bf1dfebC23enBishop's OpeningPratt Variationrnbq1rk1/ppp2ppp/5P2/2b4Q/2pp4/2P5/PP3PPP/RNB1K1NR w KQ - 2 8}S --+ b73ba5f3eea83600C23enBishop's OpeningPratt Variationrnbqk2r/ppp2ppp/5P2/2b4Q/2pp4/2P5/PP3PPP/RNB1K1NR b KQkq - 1 7~R --+173646d5c2c5109cC23enBishop's OpeningPratt Variationrnbqk2r/ppp2ppp/5P2/2b5/2pp4/2P5/PP3PPP/RNBQK1NR w KQkq - 0 7Q --+ 456250bb85b4c8e5C23enBishop's OpeningPratt Variationrnbqk2r/ppp2ppp/5P2/2bp4/2Bp4/2P5/PP3PPP/RNBQK1NR b KQkq - 0 6P --+ 4d1f601680cf0a21!C23enBishop's OpeningPratt Variationrnbqk2r/ppp2ppp/5n2/2bpP3/2Bp4/2P5/PP3PPP/RNBQK1NR w KQkq d6 0 6 wSy>G_-   B - -G 1c6663167d9dc976vB87enSicilian DefenseSozin Attack, Flank Variationrnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7& - -g fc41957918f7eaf6B63enSicilian DefenseRichter-Rauzer Variation, Classical Variationr1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 2 84 - - 3a7a1765357cbebbB66enSicilian DefenseRichter-Rauzer Variation, Neo-Modern Variation, Early Deviationsr1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8 - -W29385ae6bb9ada91B72enSicilian DefenseDragon Variation, Classical Variationr1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R w KQkq - 4 8!| - -k34093f2e1a757f43CB75enSicilian DefenseDragon Variation, Yugoslav Attack, Belezky Liner1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQkq - 1 8n - -O 954c0a7bdebd33abB76enSicilian DefenseDragon Variation, Yugoslav Attackrnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8` - -_ 41c354aec8a063afB84enSicilian DefenseNajdorf Variation, Scheveningen Variationr1bqkb1r/1p1n1ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 2 8_ --_ 72202ff328088e63cB84enSicilian DefenseNajdorf Variation, Scheveningen Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 1 7R - -c 743f10d24443c162bB84enSicilian DefenseScheveningen Variation, Classical Variationrnb1kb1r/1pq2ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 2 8D - -G b56619216d1624afB87enSicilian DefenseSozin Attack, Flank Variationrnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 8C - -G d5627334f6bb9992B87enSicilian DefenseSozin Attack, Flank Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 76 - -] 249d9710676844acB96enSicilian DefenseNajdorf Variation, Polugaevsky Variationrnbqkb1r/5ppp/p2ppn2/1p4B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 0 8 jL --9 e8f5f85f7cc41617B42enSicilian DefenseKan, Gipslis Variationrnbqkb1r/1p1p1ppp/p3pn2/8/3NP3/3B4/PPP2PPP/RNBQK2R w KQkq - 2 6B - -U b86e2a21bd875dfeB58enSicilian DefenseClassical Variation, Dragon Transferr1bqkb1r/pp2pp1p/3p1np1/8/3QP3/2N5/PPP1BPPP/R1B1K2R w KQkq - 0 8A --U 51da797ac608cfb5B58enSicilian DefenseClassical Variation, Dragon Transferr1bqkb1r/pp2pppp/3p1n2/8/3QP3/2N5/PPP1BPPP/R1B1K2R b KQkq - 0 7@ --U ae5b0a61d659a1bdB58enSicilian DefenseClassical Variation, Dragon Transferr1bqkb1r/pp2pppp/3p1n2/8/3nP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 74 - -a2f7218c1181790bdB63enSicilian DefenseRichter-Rauzer Variation, Ivanov Variationr1b1kb1r/pp3ppp/1qnppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 2 8  wg `l@@@@@@@@@@@ %^ - -ofdedce3da74f52e8B41enSicilian DefenseKan Variation, Maróczy Bind, Bronstein Variationr1bqk2r/1p1p1ppp/p1n1pn2/8/1bPNP3/2NB4/PP3PPP/R1BQK2R w KQkq - 5 8#] --o 560016dfb6def7ebB41enSicilian DefenseKan Variation, Maróczy Bind, Bronstein Variationrnbqk2r/1p1p1ppp/p3pn2/8/1bPNP3/2NB4/PP3PPP/R1BQK2R b KQkq - 4 7"\ +-o 30db77d8f5e3598B41enSicilian DefenseKan Variation, Maróczy Bind, Bronstein Variationrnbqk2r/1p1p1ppp/p3pn2/8/1bPNP3/2N5/PP3PPP/R1BQKB1R w KQkq - 3 7#[ --o ca4cde7bc4a9fdbaB41enSicilian DefenseKan Variation, Maróczy Bind, Bronstein Variationrnbqkb1r/1p1p1ppp/p3pn2/8/2PNP3/2N5/PP3PPP/R1BQKB1R b KQkq - 2 6 Z --o 31dbc6d9064b7f63cB41enSicilian DefenseKan Variation, Maróczy Bind, Bronstein Variationrnbqkb1r/1p1p1ppp/p3pn2/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6P - -9 caadd975eacfbd26&B42enSicilian DefenseKan, Gipslis Variationrnbqkb1r/1p3p1p/p2ppnp1/8/2PNP3/3B4/PP3PPP/RNBQ1RK1 w kq - 0 8O --923198a2e91402f6dmB42enSicilian DefenseKan, Gipslis Variationrnbqkb1r/1p3ppp/p2ppn2/8/2PNP3/3B4/PP3PPP/RNBQ1RK1 b kq - 0 7N --9af3a150ad24f846ajB42enSicilian DefenseKan, Gipslis Variationrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/3B4/PPP2PPP/RNBQ1RK1 w kq - 0 7M --9 9680836b0037cd07B42enSicilian DefenseKan, Gipslis Variationrnbqkb1r/1p1p1ppp/p3pn2/8/3NP3/3B4/PPP2PPP/RNBQ1RK1 b kq - 3 6 *i U W L Ih**********BBBBBD - -_ f6a86dab54f1b50a B29enSicilian DefenseNimzowitsch Variation, Exchange Variationrnbqkb1r/pp1ppppp/8/2p1P3/8/2n2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 5 --_ ba39435bcf74bb48HB29enSicilian DefenseNimzowitsch Variation, Exchange Variationrnbqkb1r/pp1ppppp/8/2pnP3/8/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 2 4 --_ 41ae5bf90d963991B29enSicilian DefenseNimzowitsch Variation, Exchange Variationrnbqkb1r/pp1ppppp/8/2pnP3/8/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 4 - -=6c11943c9af91659YB32enSicilian DefenseNimzo-American Variationr1bqkbnr/pp2pppp/2n5/3p4/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 4y - --2e84487fcc668ea5B32enSicilian DefenseGodiva Variationr1b1kbnr/pp1ppppp/1qn5/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5|q - -+ef6489096a66177e~B32enSicilian DefenseFlohr Variationr1b1kbnr/ppqppppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5i - -5 6303be6295c8a049IB32enSicilian DefenseLöwenthal Variationr1bqkbnr/pp1p1ppp/2n5/4p3/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5a ) -1 cfe5737da2ca344B32enSicilian DefenseAccelerated Dragonr1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5tY - - b29582ddabd719e9B33enSicilian DefenseOpenr1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5Q - -/ f31e62acc5d5bbf4B40enSicilian DefenseKveinis Variationrnb1kbnr/pp1p1ppp/1q2p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5~P --/34e19cfb0f9e6d2e.B40enSicilian DefenseKveinis Variationrnbqkbnr/pp1p1ppp/4p3/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4I - -9 99fcd8a0c5ac87adB40enSicilian DefensePaulsen-Basman Defensernbqk1nr/pp1p1ppp/4p3/2b5/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5A - -=6f0fa80ea2642cb8B40enSicilian DefenseFrench Variation, Normalrnbqkb1r/pp1p1ppp/4pn2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5|9 - -'e6166d08e8be95f2B41enSicilian DefenseKan Variationrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 # \ {Biwt ( - -{ 47cd36fcffadbc5aZB36enSicilian DefenseAccelerated Dragon, Maróczy Bind, Gurgenidze Variationr1bqkb1r/pp2pp1p/3p1np1/8/2PQP3/2N5/PP3PPP/R1B1KB1R w KQkq - 0 8' --{ 7e77a09d2dd5f5377B36enSicilian DefenseAccelerated Dragon, Maróczy Bind, Gurgenidze Variationr1bqkb1r/pp1ppp1p/5np1/8/2PQP3/2N5/PP3PPP/R1B1KB1R b KQkq - 0 7' --{ 81f6d3863d849b3f?B36enSicilian DefenseAccelerated Dragon, Maróczy Bind, Gurgenidze Variationr1bqkb1r/pp1ppp1p/5np1/8/2PnP3/2N5/PP3PPP/R1BQKB1R w KQkq - 0 7) --{2c95560051b5a27c|B36enSicilian DefenseAccelerated Dragon, Maróczy Bind, Gurgenidze Variationr1bqkb1r/pp1ppp1p/2n2np1/8/2PNP3/2N5/PP3PPP/R1BQKB1R b KQkq - 2 6( --{ d7024ea2935720a5B36enSicilian DefenseAccelerated Dragon, Maróczy Bind, Gurgenidze Variationr1bqkb1r/pp1ppp1p/2n2np1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6 Mz - -_ a2daf0145d6bd344DB37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqk2r/pp2ppbp/2np2pn/8/2P1P3/8/PPN1BPPP/RNBQK2R w KQkq - 2 8y --_ 23566ff0e7e9be3d=B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqk1nr/pp2ppbp/2np2p1/8/2P1P3/8/PPN1BPPP/RNBQK2R b KQkq - 1 7x --_ 50d6ec09e6ccf49eB37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqk1nr/pp2ppbp/2np2p1/8/2P1P3/8/PPN2PPP/RNBQKB1R w KQkq - 0 7w --_ 696c7a6834b4bdf3B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqk1nr/pp1pppbp/2n3p1/8/2P1P3/8/PPN2PPP/RNBQKB1R b KQkq - 0 6v --_ ad6b7720df3400f9B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqk1nr/pp1pppbp/2n3p1/8/2P5/8/PPN1PPPP/RNBQKB1R w KQkq - 3 6u --_ 1dd74a962473cb53SB37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqkbnr/pp1ppp1p/2n3p1/8/2P5/8/PPN1PPPP/RNBQKB1R b KQkq - 2 5t --_ 48eb771fd52ddc399B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationr1bqkbnr/pp1ppp1p/2n3p1/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 1 5s --_e306affdc4bc793a:B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationrnbqkbnr/pp1ppp1p/6p1/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4r --_ 8492f2a0d58deb14B37enSicilian DefenseAccelerated Fianchetto, Simagin Variationrnbqkbnr/pp1ppp1p/6p1/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 (> - -Y390b6d3792fc4694B35enSicilian DefenseDragon Variation, Modern Bc4 Variationr1bqk2r/pp2ppbp/2np1np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R w KQkq - 0 8X4&l - -s72028b3c2682e3344B39enSicilian DefenseAccelerated Dragon, Maróczy Bind, Breyer Variationr1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 8%k - -sef21d05a2bc87258XB39enSicilian DefenseAccelerated Dragon, Maróczy Bind, Breyer Variationr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 7%j - -s 14b6c8f8e92af081B39enSicilian DefenseAccelerated Dragon, Maróczy Bind, Breyer Variationr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7 @ H _!@Z ~ G g2 - -e c6cba8e6e3a1f855UB21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkb1r/1p3ppp/p2ppn2/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 w kq - 0 81 --e 143c591504810089B21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkb1r/pp3ppp/3ppn2/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 b kq - 3 70 --e 6a4922217872db99B21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkb1r/pp3ppp/3ppn2/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 2 7/ --e 31a716d4d5889a0fB21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkbnr/pp3ppp/3pp3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R b KQkq - 1 6. --e5214a2fcfdcb4ca9B21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkbnr/pp3ppp/3pp3/8/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6- --e246350cde5e9dcfbB21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkbnr/pp2pppp/3p4/8/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5, --eff07bc3b8d0fbdc6B21enSicilian DefenseSmith-Morra Gambit Accepted, Chicago Defensernbqkbnr/pp2pppp/3p4/8/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5)$ - -s41d83aae13e7f7f0B25enSicilian DefenseClosed Variation, Botvinnik Defense, Edge Variationr1bqk2r/pp2npbp/2np2p1/2p1p3/4PP2/2NP2PN/PPP3BP/R1BQK2R w KQkq - 2 8(# --s7f978613a86e7c4dMB25enSicilian DefenseClosed Variation, Botvinnik Defense, Edge Variationr1bqk1nr/pp3pbp/2np2p1/2p1p3/4PP2/2NP2PN/PPP3BP/R1BQK2R b KQkq - 1 7L --G 6826e16e2b50ddabB20enSicilian DefenseWing Gambit, Romanian Defenser1b1kbnr/pp3ppp/2n5/3qp3/1p6/P4N2/1BPP1PPP/RN1QKB1R w KQkq - 2 7 K --G c3cb398c3ac178a8B20enSicilian DefenseWing Gambit, Romanian Defensernb1kbnr/pp3ppp/8/3qp3/1p6/P4N2/1BPP1PPP/RN1QKB1R b KQkq - 1 6"@ - -m1b518235ea12cd04B21enSicilian DefenseSmith-Morra Gambit Accepted, Classical Formationr1bqkb1r/1p2pppp/p1np1n2/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 w kq - 2 8!? --m 40bfb6c047e88c92B21enSicilian DefenseSmith-Morra Gambit Accepted, Classical Formationr1bqkbnr/1p2pppp/p1np4/8/2B1P3/2N2N2/PP3PPP/R1BQ1RK1 b kq - 1 7"> --m 3ecacdf43b1b5782B21enSicilian DefenseSmith-Morra Gambit Accepted, Classical Formationr1bqkbnr/1p2pppp/p1np4/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 0 7 i {lUd5 &h -/S836f1f19203b5f16B17enCaro-Kann DefenseKarpov Variation, Smyslov Variationr1bqkb1r/pp1n1ppp/2p1pn2/6N1/2BP4/8/PPP2PPP/R1BQK1NR w KQkq - 0 7g -/S f518ed283819cf44DB17enCaro-Kann DefenseKarpov Variation, Smyslov Variationr1bqkb1r/pp1npppp/2p2n2/6N1/2BP4/8/PPP2PPP/R1BQK1NR b KQkq - 4 6{\ - / 41ae97c7b9f29a70pB19enCaro-Kann DefenseClassicalr2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R w KQkq - 2 8|[ - / 724dec9a595a77bcB19enCaro-Kann DefenseClassicalrn1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7{Z - / a929006c31bc1681B19enCaro-Kann DefenseClassicalrn1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7~N - -G82cedbbbf7690042BB20enSicilian DefenseWing Gambit, Romanian Defenser1b1kbnr/pp3ppp/2n1q3/4p3/1pP5/P4N2/1B1P1PPP/RN1QKB1R w KQkq - 1 8M --Ge43fed92dadf1fceB20enSicilian DefenseWing Gambit, Romanian Defenser1b1kbnr/pp3ppp/2n5/3qp3/1pP5/P4N2/1B1P1PPP/RN1QKB1R b KQkq c3 0 7w -/K 2d5598c33bddd0c8B13enCaro-Kann DefensePanov-Botvinnik, Herzog Defenser1bqkb1r/pp2pppp/2n2n2/3P2B1/2p5/2N5/PP3PPP/R2QKBNR b KQkq - 0 7v -/K 975ddb90a2fb4695B13enCaro-Kann DefensePanov-Botvinnik, Herzog Defenser1bqkb1r/pp2pppp/2n2n2/6B1/2pP4/2N5/PP3PPP/R2QKBNR w KQkq - 0 7j + /S1a5c36b1534139cB17enCaro-Kann DefenseKarpov Variation, Smyslov Variationr1bqkb1r/pp3ppp/1np1pn2/6N1/2BP4/8/PPP1QPPP/R1B1K1NR w KQkq - 2 8i -/S1569903b6e7f0492B17enCaro-Kann DefenseKarpov Variation, Smyslov Variationr1bqkb1r/pp1n1ppp/2p1pn2/6N1/2BP4/8/PPP1QPPP/R1B1K1NR b KQkq - 1 7 Rd) b7 uI*\ P PRRRRR6 - %Mfe15bdcf4cdec83b;B09enPirc DefenseAustrian Attack, Weiss Variationrnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2NB1N2/PPP3PP/R1BQK2R b KQ - 4 6uj --S9f0a13ddf7211566fB02enAlekhine DefenseHunt Variation, Lasker Simul Gambitrnbqkb1r/pppppppp/8/2PnP3/8/8/PP1P1PPP/RNBQKBNR w KQkq - 1 5b - -O8fbb6a7c2c8ad2c3B03enAlekhine DefenseModern Variation, Alekhine Gambitrn1qkb1r/ppp1pppp/1n1p4/4P3/2PP2b1/5N2/PP2BPPP/RNBQK2R b KQkq - 4 6a --Ofc3be9852daf9860`B03enAlekhine DefenseModern Variation, Alekhine Gambitrn1qkb1r/ppp1pppp/1n1p4/4P3/2PP2b1/5N2/PP3PPP/RNBQKB1R w KQkq - 3 6` --Ofee823b76a2a968aB03enAlekhine DefenseModern Variation, Alekhine Gambitrnbqkb1r/ppp1pppp/1n1p4/4P3/2PP4/5N2/PP3PPP/RNBQKB1R b KQkq - 2 5 W - -;4633aad6b4890e3d=B05enAlekhine DefenseModern, Vitolins Attackrn1qkb1r/ppp1pppp/1n1p4/3PP3/2P3b1/5N2/PP3PPP/RNBQKB1R b KQkq - 0 6 L - %Sd810a781f46411c6B09enPirc DefenseAustrian Attack, Kurajica Variationrnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2N1BN2/PPP3PP/R2QKB1R b KQ - 4 6A - %Mca610a9071402c2c,B09enPirc DefenseAustrian Attack, Unzicker Attackrnbq1rk1/ppp1ppbp/3p1np1/4P3/3P1P2/2N2N2/PPP3PP/R1BQKB1R b KQ - 0 6+ + /Seb4e0239ae82a2e.B12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp3ppp/2p5/8/2BpP3/5N2/PPP3PP/RNBQK2R b KQkq - 1 6* -/S6d07540bb2abfc88B12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp3ppp/2p5/8/3pP3/5N2/PPP3PP/RNBQKB1R w KQkq - 0 6) -/Sf6795e8976d0e89dB12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp3ppp/2p5/4p3/3PP3/5N2/PPP3PP/RNBQKB1R b KQkq - 1 5( -/S2d1db27f1e3689a0B12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp3ppp/2p5/4p3/3PP3/8/PPP3PP/RNBQKBNR w KQkq - 0 5' -/Sa765ba358dd37196B12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp2pppp/2p5/8/3PP3/8/PPP3PP/RNBQKBNR b KQkq - 0 4& -/Sf62202396effae68hB12enCaro-Kann DefenseMaróczy Variation, Maróczy Gambitrnbqkbnr/pp2pppp/2p5/8/3Pp3/5P2/PPP3PP/RNBQKBNR w KQkq - 0 4Xk --S fcb9a7f5df62c3c0B02enAlekhine DefenseHunt Variation, Lasker Simul Gambitrnbqkb1r/pppppppp/8/2PnP3/2B5/8/PP1P1PPP/RNBQK1NR b KQkq - 2 5 + /]c368da9b1327df6B13enCaro-Kann DefenseExchange Variation, Rubinstein Variationr1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2PB4/PP3PPP/RN1QK1NR b KQkq - 2 6 -/] d7626b2828529795B13enCaro-Kann DefenseExchange Variation, Rubinstein Variationr1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2PB4/PP3PPP/RNBQK1NR w KQkq - 1 6 -/] 8c8c5fdd85a8d603B13enCaro-Kann DefenseExchange Variation, Rubinstein Variationr1bqkbnr/pp2pppp/2n5/3p4/3P4/2PB4/PP3PPP/RNBQK1NR b KQkq - 0 5 -/] fa56a74555d8d985B13enCaro-Kann DefenseExchange Variation, Rubinstein Variationr1bqkbnr/pp2pppp/2n5/3p4/3P4/3B4/PPP2PPP/RNBQK1NR w KQkq - 2 5 -/]51bb7fa744497c86B13enCaro-Kann DefenseExchange Variation, Rubinstein Variationrnbqkbnr/pp2pppp/8/3p4/3P4/3B4/PPP2PPP/RNBQK1NR b KQkq - 1 4  R R?  u" - 'iad1415bcca6297dcA97enDutch DefenseClassical Variation, Ilyin-Zhenevsky Variationrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8J0 - 'U6c9dd5314b093f9bA96enDutch DefenseClassical Variation, Huisl Variationrnbq1rk1/ppp1b1pp/3pp3/5p2/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 \F - ']aaa73ce37ee9c8a4A95enDutch DefenseClassical Variation, Stonewall Variationrnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5> - 'cd08f2c6f9adcbef1A96enDutch DefenseClassical Variation, Buenos Aires Variationrnbq1rk1/1pp1b1pp/3ppn2/p4p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8= -'c569599aef940b261aA96enDutch DefenseClassical Variation, Buenos Aires Variationrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7 = - 'ibb0dbc699c1b0493A97enDutch DefenseClassical Variation, Ilyin-Zhenevsky Variationrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3 - 'i 97eb07287cccdcabA97enDutch DefenseClassical Variation, Ilyin-Zhenevsky Variationrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 38G - ']71c3d015160fa999A95enDutch DefenseClassical Variation, Stonewall Variationrnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5" - 5a1c1d09188c726186B01enScandinavian DefenseSchiller-Pytel Variation, Modern Variationrn2kb1r/pp2pppp/2p2n2/5b2/1qBP1B2/2N5/PPP1NPPP/R2QK2R w KQkq - 4 8c L - ']783fc034c02c6691A95enDutch DefenseClassical Variation, Stonewall Variationrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 Rf_    u`$fDDDDfff ++M756694888518ce3A14enEnglish OpeningAgincourt Defense, Keres Defenser1bqkb1r/pp3ppp/2n1p3/2pn4/8/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 2 7 -+M acbbb1aa99c029e0A14enEnglish OpeningAgincourt Defense, Keres Defensernbqkb1r/pp3ppp/4p3/2pn4/8/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 1 6 -+M 194b92d7d42df199A14enEnglish OpeningAgincourt Defense, Keres Defensernbqkb1r/pp3ppp/4p3/2pn4/8/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 6 -+M86a5e89a6bc8ecc5A14enEnglish OpeningAgincourt Defense, Keres Defensernbqkb1r/pp3ppp/4pn2/2pP4/8/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 5 -+M888f7357c906f8d8A14enEnglish OpeningAgincourt Defense, Keres Defensernbqkb1r/pp3ppp/4pn2/2pp4/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 50@ - +M 6def61933e09fb62bA14enEnglish OpeningAgincourt Defense, Keres Defenser1bqk2r/pp2bppp/2n1p3/2pn4/8/2N2NP1/PP1PPPBP/R1BQ1RK1 w kq - 4 8 -+M 7923127cf4a257f3A14enEnglish OpeningAgincourt Defense, Keres Defenser1bqkb1r/pp3ppp/2n1p3/2pn4/8/2N2NP1/PP1PPPBP/R1BQ1RK1 b kq - 3 7 - , - 71bf488ab5b5359923#E92enKing's Indian DefenseExchange Variationrnbq1rk1/ppp2pbp/3p1np1/4P3/2P1P3/2N2N2/PP2BPPP/R1BQK2R b KQ - 0 7  - 715da00ec3c1f3f543CE94enKing's Indian DefenseOrthodox Variationrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7 - )9ae14b97e2ac266a2A40enBenoni DefenseFranco-Sicilian Hybridrnbqk2r/pp2npbp/3p2p1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 3 8 -)9905b05c3914bed1fA40enBenoni DefenseFranco-Sicilian Hybridrnbqk1nr/pp3pbp/3p2p1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 2 7 -)9 4b3fe935f9ad8c22"A40enBenoni DefenseFranco-Sicilian Hybridrnbqk1nr/pp3pbp/3p2p1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 1 7 -)9 fb83d48302ea4788A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp3p1p/3p2p1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6 -)9 3f84d9cbe96afa82A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp3p1p/3p2p1/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6 -)9d6308a9092e568c9A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp3ppp/3p4/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 5~ -)92da792325007ea10A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp3ppp/3p4/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 5} -)9141d0453827fa37d}A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp1p1ppp/8/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 4| -)91a379f9e20b1b760`A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp1p1ppp/8/2pp4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4{ -)9 2523465a3a1477abA40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp1p1ppp/4p3/2pP4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3z -)9 9f2b0509a332e1f6A40enBenoni DefenseFranco-Sicilian Hybridrnbqkbnr/pp1p1ppp/4p3/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3v - 7Yaccc03bca802fffcA49enKing's Indian DefenseFianchetto Variation, Benjamin Defensernb2rk1/pp2ppbp/1qpp1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8u -7Y6b33fdeb62492926&A49enKing's Indian DefenseFianchetto Variation, Benjamin Defensernbq1rk1/pp2ppbp/2pp1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7  ||N F IZ@@@@@@@@@@iiii; - 5+697cf265294c13d2E48enNimzo-Indian DefenseRagozin Defenser1bq1rk1/ppp2ppp/2n1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 b - - 3 7: -5+1709895155bfc8c2E48enNimzo-Indian DefenseRagozin Defenser1bq1rk1/ppp2ppp/2n1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 2 7wm - 51 5ac975c2bd2c73bbE25enNimzo-Indian DefenseSämisch Variationrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 6 l - 51111c1ff310709cfbE25enNimzo-Indian DefenseSämisch Variationrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b2P2/1P2P1PP/R1BQKBNR w KQkq - 0 6 k - 51302564f50dc8cef1E25enNimzo-Indian DefenseSämisch Variationrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N2P2/1P2P1PP/R1BQKBNR b KQkq - 0 5 j - 51fbb955d3448440b1E25enNimzo-Indian DefenseSämisch Variationrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5b - 5Q e249c99f81c0d1bbE37enNimzo-Indian DefenseClassical Variation, Noa Variationrnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR b KQkq - 2 7 'U - 5q c720e30b2ae1aabeE42enNimzo-Indian DefenseHübner Variation, Rubinstein Variation, Main Linernbq1rk1/pp1p1ppp/4pn2/8/1bPP4/P1N5/1P2NPPP/R1BQKB1R b KQ - 0 7%T +5q cbcd22d63ad24feE42enNimzo-Indian DefenseHübner Variation, Rubinstein Variation, Main Linernbq1rk1/pp1p1ppp/4pn2/8/1bPP4/2N5/PP2NPPP/R1BQKB1R w KQ - 1 7%S +5q 6143f9ab6f4cd15E42enNimzo-Indian DefenseHübner Variation, Rubinstein Variation, Main Linernbqk2r/pp1p1ppp/4pn2/8/1bPP4/2N5/PP2NPPP/R1BQKB1R b KQkq - 0 6(R -5q10845310f65d0607E42enNimzo-Indian DefenseHübner Variation, Rubinstein Variation, Main Linernbqk2r/pp1p1ppp/4pn2/8/1bPp4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 0 6\.H - 5 632e38754db4c94eNE42enNimzo-Indian DefenseHübner Variation, Rubinstein Variation, Sherbakov Attackrnbq1rk1/pp1p1ppp/4pn2/2P5/1b1P4/2N5/PP2NPPP/R1BQKB1R b KQ - 0 7 M 1e v . q111xxxxxxxxxxx - 5U223d1d8d51b671bdE30enNimzo-Indian DefenseLeningrad Variation, Averbakh Gambitrnbqk2r/p2p1pp1/4pn1p/1ppP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7 -5U42397798ca1bcc80E30enNimzo-Indian DefenseLeningrad Variation, Averbakh Gambitrnbqk2r/pp1p1pp1/4pn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR b KQkq - 0 6 -5Uf83134cb533d5addE30enNimzo-Indian DefenseLeningrad Variation, Averbakh Gambitrnbqk2r/pp1p1pp1/4pn1p/2p5/1bPP3B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 6 -5U 1e40e565ac7a51a0E30enNimzo-Indian DefenseLeningrad Variation, Averbakh Gambitrnbqk2r/pppp1pp1/4pn1p/8/1bPP3B/2N5/PP2PPPP/R2QKBNR b KQkq - 1 5 -5U44cf8da65fc4733b;E30enNimzo-Indian DefenseLeningrad Variation, Averbakh Gambitrnbqk2r/pppp1pp1/4pn1p/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 5 - 5S7b83e1f9186385edE31enNimzo-Indian DefenseLeningrad Variation, Benoni Defensernbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7" - 5e d964be73338f64c3E32enNimzo-Indian DefenseClassical Variation, Vitolins-Adorjan Gambitrnbq1rk1/p1pp1ppp/4pn2/1p6/2PP4/P1Q5/1P2PPPP/R1B1KBNR w KQ - 0 7  -5e b960d466a822d9feE32enNimzo-Indian DefenseClassical Variation, Vitolins-Adorjan Gambitrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1Q5/1P2PPPP/R1B1KBNR b KQ - 0 6  -5e 4176447cebe1e823#E32enNimzo-Indian DefenseClassical Variation, Vitolins-Adorjan Gambitrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b5/1PQ1PPPP/R1B1KBNR w KQ - 0 6! -5e 604f3f7af659ba29)E32enNimzo-Indian DefenseClassical Variation, Vitolins-Adorjan Gambitrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQ - 0 5  -5e abd30e5cbf153469iE32enNimzo-Indian DefenseClassical Variation, Vitolins-Adorjan Gambitrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQ - 4 5z - 5Q d2099d7656a16e65eE32enNimzo-Indian DefenseClassical Variation, Keres Defensernbq1rk1/p1pp1ppp/1p2pn2/8/2PP4/P1Q5/1P2PPPP/R1B1KBNR w KQ - 0 7   D  p@J<<<<<<<<<<<@\)d - 9gb795953d0d3fa5baE12enQueen's Indian DefenseKasparov-Petrosian Variation, Kasparov Attackrn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1PQ1PPPP/R1B1KB1R b KQkq - 1 7" - //40ad304438b08969iD97enGrünfeld DefenseRussian Variationrnbqk2r/ppp1ppbp/5np1/8/2pP4/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 0 6q' + +- 7475aa039f8cb85E08enCatalan OpeningClosed Variationr1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 b - - 2 7+q - 9kd4285a6fdfd76ba5E12enQueen's Indian DefenseKasparov-Petrosian Variation, Rashkovsky Attackrn1qkb1r/pbp2ppp/1p2p3/3n4/Q2P4/P1N2N2/1P2PPPP/R1B1KB1R b KQkq - 1 7% - // a11f4cadad02beaaD97enGrünfeld DefenseRussian Variationrnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 7$ - // 651841e5468203a0D97enGrünfeld DefenseRussian Variationrnbq1rk1/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R w KQ - 1 7# - // 6fb0ac5293dbea4bKD97enGrünfeld DefenseRussian Variationrnbqk2r/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 0 6  - +M 3b119cb006d6b0faE03enCatalan OpeningOpen Defense, Alekhine Variationr1bqkb1r/1ppn1ppp/p3pn2/8/3P4/6P1/PPQ1PPBP/RNB1K1NR b KQkq - 1 7 -+M 183ed6480b87d54dME03enCatalan OpeningOpen Defense, Alekhine Variationr1bqkb1r/1ppn1ppp/p3pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 0 7 *~ - 9k2f01bd958d88f2daE12enQueen's Indian DefenseKasparov-Petrosian Variation, Romanishin Attackrn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P1BPPPP/R2QKB1R b KQkq - 1 7 bKge\)K IIIII d d dKKKR - 7W 2c74513cee07acb4D78enNeo-Grünfeld DefenseClassical Variation, Original Defensernbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7Q - 7W a91e732872d3e292D78enNeo-Grünfeld DefenseClassical Variation, Original Defensernbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6P - 7W d76b081c0e203982D78enNeo-Grünfeld DefenseClassical Variation, Original Defensernbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6O - 7W4511e5f379e0ea399D78enNeo-Grünfeld DefenseClassical Variation, Original Defensernbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQ - 2 5N - 7W f0e1c68e340d3240@D78enNeo-Grünfeld DefenseClassical Variation, Original Defensernbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQ - 1 5t v - ;-c1ddc693acd0fd05D60enQueen's Gambit DeclinedOrthodox Defenser1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7F - /- d2df086ca0908f56VD80enGrünfeld DefenseLundin Variationrnbqkb1r/pp2pp1p/6p1/2p3B1/2PPp3/8/PP1QPPPP/R3KBNR w KQkq - 0 7E -/- 34aed9c25fd7842b+D80enGrünfeld DefenseLundin Variationrnbqkb1r/ppp1pp1p/6p1/6B1/2PPp3/8/PP1QPPPP/R3KBNR b KQkq - 1 6D -/- 1cb6964d9e6e5b8bD80enGrünfeld DefenseLundin Variationrnbqkb1r/ppp1pp1p/6p1/6B1/2PPp3/8/PP2PPPP/R2QKBNR w KQkq - 0 6C -/- ce9e6b67e4669a5d]D80enGrünfeld DefenseLundin Variationrnbqkb1r/ppp1pp1p/6p1/3p2B1/2PPN3/8/PP2PPPP/R2QKBNR b KQkq - 0 5B -/-3fd86027ced733c9D80enGrünfeld DefenseLundin Variationrnbqkb1r/ppp1pp1p/6p1/3p2B1/2PPn3/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5 : - /34359544283aa9697D95enGrünfeld DefenseBotvinnik Variationrnbq1rk1/ppp2pbp/4pnp1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R w KQ - 0 7.j - 7W15e364318856da0c D77enNeo-Grünfeld DefenseClassical Variation, Polgar Variationr1bq1rk1/ppp1ppbp/2n2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 1 7^ - 7S6c0885e1cbf991ecD77enNeo-Grünfeld DefenseClassical Variation, Modern Defensernbq1rk1/ppp1ppbp/5np1/8/2pP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7. - +U 87a2831560e1f5feE04enCatalan OpeningOpen Defense, Modern Sharp Variationr1bqk2r/ppp2ppp/2n1pn2/8/QbpP4/5NP1/PP2PPBP/RNB1K2R w KQkq - 4 7 G f 4 U "y L - 7A2fca5d5384ec764eND74enNeo-Grünfeld DefenseDelayed Exchange Variationrnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 7 K - 7A51bf2667f81fad5e^D74enNeo-Grünfeld DefenseDelayed Exchange Variationrnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 7J - 7A ce515c2a47fab002D74enNeo-Grünfeld DefenseDelayed Exchange Variationrnbq1rk1/ppp1ppbp/5np1/3P4/3P4/5NP1/PP2PPBP/RNBQK2R b KQ - 0 6I - 7A c07bc7e7e534a41fD74enNeo-Grünfeld DefenseDelayed Exchange Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6 n? - /g32f2da2bc4f28d7c|D85enGrünfeld DefenseExchange Variation, Modern Exchange Variationrnbqk2r/ppp1ppbp/6p1/8/3PP3/2P2N2/P4PPP/R1BQKB1R b KQkq - 2 7> -/ge99636ddac14ec41AD85enGrünfeld DefenseExchange Variation, Modern Exchange Variationrnbqk2r/ppp1ppbp/6p1/8/3PP3/2P5/P4PPP/R1BQKBNR w KQkq - 1 7= -/g592a0b6b575327ebD85enGrünfeld DefenseExchange Variation, Modern Exchange Variationrnbqkb1r/ppp1pp1p/6p1/8/3PP3/2P5/P4PPP/R1BQKBNR b KQkq - 0 6< -/gdad8b9b6a13adff2D85enGrünfeld DefenseExchange Variation, Modern Exchange Variationrnbqkb1r/ppp1pp1p/6p1/8/3PP3/2n5/PP3PPP/R1BQKBNR w KQkq - 0 6; -/g 964997463abfd1b0D85enGrünfeld DefenseExchange Variation, Modern Exchange Variationrnbqkb1r/ppp1pp1p/6p1/3n4/3PP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 52 - /[8a2582f584573ae7D86enGrünfeld DefenseExchange Variation, Classical Variationrnbqk2r/ppp1ppbp/6p1/8/2BPP3/2P5/P4PPP/R1BQK1NR b KQkq - 2 7 @ !t G T!!!!!!![[[[[[[[[B. w) - ;Q 3b053218f098d5c5D28enQueen's Gambit AcceptedClassical Defense, Alekhine Systemrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7 - -M909f45c95fa3f25e^D33enTarrasch DefenseSwedish Variation, Central Breakr1bqkbnr/pp3ppp/2n5/3p4/2pPP3/2N2NP1/PP3P1P/R1BQKB1R b KQkq - 0 7- - ;sb3419d7cab23211eD37enQueen's Gambit DeclinedHarrwitz Attack, Two Knights Defense, Blockade Liner1bq1rk1/pppnbppp/4pn2/2Pp4/3P1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 7 - ;Ma3553dce297deb377D42enQueen's Gambit DeclinedSemi-Tarrasch Defense, Main Liner1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 7 - ;Mf6589c6c10fd2944DD42enQueen's Gambit DeclinedSemi-Tarrasch Defense, Main Liner1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 7 jv u - ;1d0852cd18aa5813f?D43enQueen's Gambit DeclinedHastings Variationrnb1kb1r/pp3pp1/2p1pq1p/3p4/2PP4/1QN2N2/PP2PPPP/R3KB1R b KQkq - 1 7t -;1ea7c8f69bf9e29d9D43enQueen's Gambit DeclinedHastings Variationrnb1kb1r/pp3pp1/2p1pq1p/3p4/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 7 s -;1e4c5ce7c4cdf1959YD43enQueen's Gambit DeclinedHastings Variationrnbqkb1r/pp3pp1/2p1pB1p/3p4/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 0 68h + /Qf2494ddd95cedebD45enSemi-Slav DefenseStoltz Variation, Center Variationr1bqk2r/pp1n1ppp/2pbpn2/3p4/2PPP3/2N2N2/PPQ2PPP/R1B1KB1R b KQkq - 0 7g -/Q9ed8fd8db9a45d4cLD45enSemi-Slav DefenseStoltz Variation, Center Variationr1bqk2r/pp1n1ppp/2pbpn2/3p4/2PP4/2N1PN2/PPQ2PPP/R1B1KB1R w KQkq - 3 7[ - /O3d95fc5b51d1b051QD45enSemi-Slav DefenseStoltz Variation, Shabalov Attackr1bqk2r/pp1n1ppp/2pbpn2/3p4/2PP2P1/2N1PN2/PPQ2P1P/R1B1KB1R b KQkq - 0 7N - /545284ee920e59f57WD47enSemi-Slav DefenseSemi-Meran Variationr1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7  4Gye ]  x 4444nnnnnD% BP - ;W 93385fac063b2eb9D24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp3ppp/5n2/2ppP3/2p5/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7O -;Wf2414951022508ddD24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp3ppp/5n2/2pp4/2p1P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 7= -;O4ae3f894aa8c579fD27enQueen's Gambit AcceptedClassical Defense, Russian Gambitrnbqkb1r/ppp1pppp/5n2/8/2BP4/4P3/PP3PPP/RNBQK1NR b KQkq - 0 4< -;Oae824bf70318132e.D27enQueen's Gambit AcceptedClassical Defense, Russian Gambitrnbqkb1r/ppp1pppp/5n2/8/2pP4/4P3/PP3PPP/RNBQKBNR w KQkq - 1 46 - ;[ c6cac3d6d34f5b8fD27enQueen's Gambit AcceptedClassical Defense, Rubinstein Variationrnbqkb1r/1p3ppp/p3pn2/2p5/P1BP4/4PN2/1P3PPP/RNBQ1RK1 b kq - 0 7 JN -;Wcd5590951880c816D24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp3ppp/4pn2/2pP4/2p1P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 6M +;W9529dddf300751cD24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp3ppp/4pn2/2pP4/2p5/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6L -;W7f256feceb22e54eND24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp2pppp/5n2/2pP4/2p5/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5K -;Wc52d2cbf72047313D24enQueen's Gambit AcceptedGunsberg Defense, Prianishenmo Gambitrnbqkb1r/pp2pppp/5n2/2p5/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5 C - ;O 3cffd46ade243ee6D27enQueen's Gambit AcceptedClassical Defense, Russian Gambitrnbqkb1r/1p3ppp/p3pn2/2p5/2BPP3/5N2/PP3PPP/RNBQ1RK1 b kq - 0 7l> -;O3c940aa5b2aec7cdD27enQueen's Gambit AcceptedClassical Defense, Russian Gambitrnbqkb1r/ppp2ppp/4pn2/8/2BP4/4P3/PP3PPP/RNBQK1NR w KQkq - 0 5 S mG -~~~:::::::::Si,N - ;20eaf6fc24081f5b[D26enQueen's Gambit AcceptedClassical Defense, Steinitz Variation, Exchange Variationrnbqkb1r/pp3ppp/4pn2/8/2Bp4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7H^f - %Oba5beebe8255638eD18enSlav DefenseCzech Variation, Lasker Variationr2qkb1r/pp2pppp/n1p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 1 7 U5Z - ; d419942b486dd39eD26enQueen's Gambit AcceptedClassical Defense, Steinitz Variation, Development Variationr1bqkb1r/pp3ppp/2n1pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 2 7B - ;E ad03bd3abedc8e41AD27enQueen's Gambit AcceptedClassical Defense, Main Linernbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 76 - ;3f0b0f99b32570559YD30enQueen's Gambit DeclinedSemmering Variationr1bqkb1r/pp1n1ppp/4pn2/2pp4/2PP4/3BPN2/PP1N1PPP/R1BQK2R w KQkq - 0 75 -;37c6de37015f75896D30enQueen's Gambit DeclinedSemmering Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/3BPN2/PP1N1PPP/R1BQK2R b KQkq - 3 6* - ;3e1e9b22bf99e157e~D30enQueen's Gambit DeclinedStonewall Variationrnbqkb1r/pp4pp/2p1p3/3p1p2/2PPn3/3BPN2/PP1N1PPP/R1BQK2R w KQkq - 0 7) -;37586d4b2471638a0D30enQueen's Gambit DeclinedStonewall Variationrnbqkb1r/pp3ppp/2p1p3/3p4/2PPn3/3BPN2/PP1N1PPP/R1BQK2R b KQkq - 3 6( -;3208b75107e96fad3D30enQueen's Gambit DeclinedStonewall Variationrnbqkb1r/pp3ppp/2p1p3/3p4/2PPn3/4PN2/PP1N1PPP/R1BQKB1R w KQkq - 2 6 4 \ v # ^\\\\\VVVVVVVVVVV  - 9] 2e3e90b7ba75c087D00enBlackmar-Diemer GambitBogoljubov Variation, Nimzowitsch Attackrnbqk2r/ppp1ppbp/5np1/4N3/2BP4/2N5/PPP3PP/R1BQK2R b KQkq - 3 7j - 1/a7055889da649c47GD05enRubinstein OpeningSemi-Slav Defenser1bq1rk1/pppn1ppp/3bpn2/3p4/3P4/1P1BPN2/PBP2PPP/RN1Q1RK1 b - - 2 7i -1/6779b28c17f800a8D05enRubinstein OpeningSemi-Slav Defenser1bq1rk1/pppn1ppp/3bpn2/3p4/3P4/1P1BPN2/P1P2PPP/RNBQ1RK1 w - - 1 7h -1/549ac9d1f750ed64dD05enRubinstein OpeningSemi-Slav Defensernbq1rk1/ppp2ppp/3bpn2/3p4/3P4/1P1BPN2/P1P2PPP/RNBQ1RK1 b - - 0 6g -1/ d83ca9852ddd8609 D05enRubinstein OpeningSemi-Slav Defensernbq1rk1/ppp2ppp/3bpn2/3p4/3P4/3BPN2/PPP2PPP/RNBQ1RK1 w - - 4 6f -1/ d2944432f8846fe2D05enRubinstein OpeningSemi-Slav Defensernbqk2r/ppp2ppp/3bpn2/3p4/3P4/3BPN2/PPP2PPP/RNBQ1RK1 b kq - 3 5e -1/ ace13f068477b4f2D05enRubinstein OpeningSemi-Slav Defensernbqk2r/ppp2ppp/3bpn2/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 2 5w - 9Q 6fa5d3514ac7dc8fD00enBlackmar-Diemer GambitBogoljubov Defense, Mad Dog Attackrnbqk2r/ppp1ppbp/5np1/8/2BP3P/2N2N2/PPP3P1/R1BQK2R b KQkq - 0 7] + %ie497e8b16073356VD17enSlav DefenseCzech Variation, Krause Attack, Fazekas Gambitr2qkb1r/pp2pppp/n1p2n2/4Nb2/P1pPP3/2N5/1P3PPP/R1BQKB1R b KQkq - 0 7\ -%ica4e73c3fd878e5c\D17enSlav DefenseCzech Variation, Krause Attack, Fazekas Gambitr2qkb1r/pp2pppp/n1p2n2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R w KQkq - 3 7 -9] f3064f78e1f8a5f1D00enBlackmar-Diemer GambitBogoljubov Variation, Nimzowitsch Attackrnbqk2r/ppp1ppbp/5np1/8/2BP4/2N2N2/PPP3PP/R1BQK2R w KQkq - 2 7 -9] 43ba72ce1abf6e5b[D00enBlackmar-Diemer GambitBogoljubov Variation, Nimzowitsch Attackrnbqkb1r/ppp1pp1p/5np1/8/2BP4/2N2N2/PPP3PP/R1BQK2R b KQkq - 1 6 AUUuh ] w AUUU`````````+s - 2dbc8cedfb46a6377C88enRuy LopezClosedr1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7s - 7d0091a166e64fd5C88enRuy LopezClosedr1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 6gy - W5c7338c2b39667eaC64enRuy LopezClassical Variation, Modern Main Liner1bq1rk1/pppp1ppp/1bn2n2/1B2p1B1/3PP3/2P2N2/PP3PPP/RN1Q1RK1 b - - 2 7l - aceb22f5214ea3ef6C66enRuy LopezBerlin Defense, Closed Showalter Variationr2qk2r/pppbbppp/2Bp1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQ1RK1 b kq - 0 7_ - a59c7428202363505C66enRuy LopezBerlin Defense, Closed Bernstein Variationr2qk2r/pppbbppp/2np1n2/1B2p1B1/3PP3/2N2N2/PPP2PPP/R2Q1RK1 b kq - 4 7R - [ f83c4b3d30b773377C74enRuy LopezMorphy Defense, Modern Steinitz Defenser2qkbnr/1pp3pp/p1np4/4pb2/B7/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 1 7Q -[ 864930094c44a827'C74enRuy LopezMorphy Defense, Modern Steinitz Defenser2qkbnr/1pp3pp/p1np4/4pb2/B7/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 7P -[9f24f53e9f462d19C74enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp3pp/p1np4/4pP2/B7/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 6 E - Cc2c1fc8a117dd8edC78enRuy LopezMorphy Defense, Wing Attackr1bqk2r/2ppbppp/p1n2n2/1p2p3/P3P3/1B3N2/1PPP1PPP/RNBQ1RK1 b kq - 0 7D -Ca90882667cee0d23#C78enRuy LopezMorphy Defense, Wing Attackr1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1 w kq - 2 7|8 - +c546907aa15b2be3C80enRuy LopezOpen Variationsr1bqkb1r/2pp1ppp/p1n5/1p2p3/3Pn3/1B3N2/PPP2PPP/RNBQ1RK1 b kq - 1 7y7 - +95fa8d363cfbc201C80enRuy LopezOpen Variationsr1bqkb1r/2pp1ppp/p1n5/1p2p3/B2Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 7 + - Q2ff2ce65a5dd545c\C80enRuy LopezOpen Variations, Richter Variationr1bqkb1r/2pp1ppp/p1n5/1p1Pp3/B3n3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 7 - I 2bb979cd98e567377C80enRuy LopezOpen Variations, Friess Attackr1bqkb1r/2pp1ppp/p1n5/1p2N3/B2Pn3/8/PPP2PPP/RNBQ1RK1 b kq - 0 7  ppm> Q Q Q Q Q Q QQQQQQQQQQN - _2061c28b7a7a1feeC78enRuy LopezMorphy Defense, Neo-Arkhangelsk Variationr1bqk2r/1ppp1ppp/p1n2n2/2b1p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6e2X + 7816a4c42c9cbb4bKC78enRuy LopezCentral Countergambitr1bqkb1r/1pp2ppp/p1n2n2/3pp3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6IO -S985fbe48674c3b344C70enRuy LopezMorphy Defense, Norwegian Variationr1bqkbnr/2pp1ppp/p1n5/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQK2R b KQkq - 1 5 v - I3542fa13ad7ed1b7C70enRuy LopezMorphy Defense, Graz Variationr1bqk1nr/2pp1ppp/p1n5/1pb1p3/4P3/1B3N2/PPPP1PPP/RNBQK2R w KQkq - 2 6'l - 73e8c171ddc104deC74enRuy LopezMorphy Defense, Modern Steinitz Defense, Siesta Variationr1bqkbnr/1pp3pp/p1np4/4pp2/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6 Tb + [54659bab913f9311C75enRuy LopezMorphy Defense, Modern Steinitz Defenser2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6{D - )64c8d58bcbc76726&C78enRuy LopezBrix Variationr1bqkb1r/1ppp1p1p/p1n2np1/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 : - Ob4c610b16230bc00C79enRuy LopezMorphy Defense, Steinitz Deferredr1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 |9( + ] 2c62b7c7eab525b[C67enRuy LopezBerlin Defense, Rio de Janeiro Variationr1bqk2r/ppppbppp/2n5/1B2p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 6 - [ 35028f47dea98b8aC69enRuy LopezExchange Variation, Bronstein Variationr1b1kbnr/1pp2ppp/p1pq4/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 6 - Y 4c3be29eec5b90eaC69enRuy LopezExchange Variation, Gligoric Variationr1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 - c 2436895509aa56b1C69enRuy LopezExchange Variation, King's Bishop Variationr1bqk1nr/1pp2ppp/p1pb4/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 6 - Scd4894bdca70993e>C70enRuy LopezMorphy Defense, Norwegian Variationr1bqkbnr/2pp1ppp/p7/np2p3/4P3/1B3N2/PPPP1PPP/RNBQK2R w KQkq - 2 6 (  S X  ]       \\\\\\\\\\(  -%I dcc71b0926d04ac8C56enItalian GameScotch Gambit, Canal Variationr1bqkb1r/ppp2ppp/2n5/3p4/2Bpn3/5N2/PPP2PPP/RNBQR1K1 w kq - 0 7  -%I59ad391dba0404eeC56enItalian GameScotch Gambit, Canal Variationr1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQR1K1 b kq - 1 6 $ - %y5aba0e0c0cbb481eC57enItalian GameTwo Knights Defense, Ulvestad Variation, Kurkin Gambitr1bqkb1r/p1p2Np1/2n2n1p/1p1Pp3/8/8/PPPP1PPP/RNBQKB1R b KQkq - 0 7' -%y25b77b0459773ca4C57enItalian GameTwo Knights Defense, Ulvestad Variation, Kurkin Gambitr1bqkb1r/p1p2pp1/2n2n1p/1p1Pp1N1/8/8/PPPP1PPP/RNBQKB1R w KQkq - 0 7& -%yb7403062cea375b1C57enItalian GameTwo Knights Defense, Ulvestad Variation, Kurkin Gambitr1bqkb1r/p1p2ppp/2n2n2/1p1Pp1N1/8/8/PPPP1PPP/RNBQKB1R b KQkq - 1 6% - %3f049122c6ba6c3a:C57enItalian GameTwo Knights Defense, Traxler Counterattack, King March Liner1bqk2r/pppp1Npp/2n5/4p3/2B1n3/4K3/PPPP2PP/RNBQ3R b kq - 1 7$ -%251807c14771f016C57enItalian GameTwo Knights Defense, Traxler Counterattack, King March Liner1bqk2r/pppp1Npp/2n5/4p3/2B1n3/8/PPPP1KPP/RNBQ3R w kq - 0 7& -%98af499841a65705C57enItalian GameTwo Knights Defense, Traxler Counterattack, King March Liner1bqk2r/pppp1Npp/2n2n2/4p3/2B1P3/8/PPPP1KPP/RNBQ3R b kq - 0 6) -% 19c1257148e99b18C57enItalian GameTwo Knights Defense, Traxler Counterattack, King March Liner1bqk2r/pppp1Npp/2n2n2/4p3/2B1P3/8/PPPP1bPP/RNBQK2R w KQkq - 0 6 ( k[|||||||V - %O3d965402f9b8ce1fC53enItalian GameClassical Variation, Greco Gambitr1bqk2r/ppp2ppp/2n2n2/2bpP3/2Bp4/2P2N2/PP3PPP/RNBQK2R w KQkq d6 0 7U -%Oa465a8c559d41098C53enItalian GameClassical Variation, Greco Gambitr1bqk2r/pppp1ppp/2n2n2/2b1P3/2Bp4/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6PS -%O9ef28acdf030776ajC53enItalian GameClassical Variation, Greco Gambitr1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5J - %g eb05e1aa3830db344C53enItalian GameClassical Variation, La Bourdonnais Variationr1bqk1nr/ppp2ppp/1bnp4/8/2BPP3/5N2/PP3PPP/RNBQK2R w KQkq - 1 7I +%g bfec9e046e03221!C53enItalian GameClassical Variation, La Bourdonnais Variationr1bqk1nr/ppp2ppp/2np4/2b5/2BPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 6H -%ga7481cac22483e07C53enItalian GameClassical Variation, La Bourdonnais Variationr1bqk1nr/ppp2ppp/2np4/2b5/2BpP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 0 6G -%g3c36162ee6332a12C53enItalian GameClassical Variation, La Bourdonnais Variationr1bqk1nr/ppp2ppp/2np4/2b1p3/2BPP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5F -%gf9033984f7fa0750PC53enItalian GameClassical Variation, La Bourdonnais Variationr1bqk1nr/ppp2ppp/2np4/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5 B > - %q31e9700ff81d5562bC55enItalian GameScotch Gambit, Max Lange Attack, Spielmann Defenser1bqk2r/pppp1ppp/2n5/2b1P3/2Bp2n1/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 7)2 - %W 276dd2be9896e616C57enItalian GameTwo Knights Defense, Pincus Variationr1bqk2r/ppp2ppp/2n5/3np1N1/1bBP4/8/PPP2PPP/RNBQK2R w KQkq - 1 7 8 1 * #     z r j b Z R J z 2   C < 5 . '     x q j c \ U N G ? 7 / '    B  xqjc\UNG@92+${sk j  d]VOHA:3,% }vog_WOG b R : " @92+$zsle^WPIB;4-&  Z J {tmf_XQJC<5.'yrkd]VOHA:3,%  yrkd]VOHA:3,%  r y r k d ] V O H A 9 1 ) !    * x p h ` Y R K D =hfh$gdaBe3hjdbi4geidai idogh 8i i h(h}^h|hyhyhu=hphpzhaih`h_@h[9hUthOhFwhFhEhDkh?h>h1h/hhfh$h8hh jh Th h $ggGggg~>g}Pgzjgy^gtgs&grhgeg_gUbgFg;g2Dg$g")gg}g IgTffIf}tfz2fzfsfnfm!fgf`gfEf8bf4af0of-f'3f f ffbf\f Vf feee\ee-ee~e}ezez^ezeqeqepoelegeee]8eZeS>eR]eNeDwe=e=Ve5ze4`e4Ye2e"Oe ueee{e e ]e eReeedddXd~d~Ed|dydxdudr dodj3didgdfdb5dad\qdZdZdW~dSdNvdFPdEPd=5d9d8d2d.d)d'jd$?ddddddcccZcc|czncycqcoccccucac_HcTcEc3c*c*_c'cbbbbbb[bb}b{|bzbv^bubqibkbjbibhbbbab\8bVbVbO9bMbH"b=)b<b9:b8>b6b,b*Rb(b!bob]bbwb|bbb b baapa_aaaaUa~a}azasgaq#akAaiafTab>a]IaYAaVqaOaOaM aGaGEa@ aj>j8Sj7j3j*j)j'$j&j"j j$jjmjjjiiXiii~.iwiwkiviuQikGiii`Ii\iXiSiOiKiB}iBEiAi<i5i-i'ii#ii fmmVmemd|edcaaeWbGg>e S Vq $ 9~V Sn - %M4c59d439fa364ffcC52enItalian GameEvans Gambit, Sokolsky Variationr1bqk1nr/ppp2ppp/2np4/b3p1B1/2BPP3/2P2N2/P4PPP/RN1QK2R b KQkq - 1 7a - %Kb0fa20b77f873cd2C52enItalian GameEvans Gambit, Tartakower Attackr1bqk1nr/ppp2ppp/2np4/b3p3/2BPP3/1QP2N2/P4PPP/RNB1K2R b KQkq - 1 7T - %Md4c4c0137eb7fb68hC53enItalian GameGiuoco Piano, Eisinger Variationrnb1k1nr/ppppqppp/1b1P4/4p3/2B1P3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 7S -%M6f6decc40310175e^C53enItalian GameGiuoco Piano, Eisinger Variationrnb1k1nr/ppppqppp/1b6/3Pp3/2B1P3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7R -%Mc48034261281b25d]C53enItalian GameGiuoco Piano, Eisinger Variationr1b1k1nr/ppppqppp/1bn5/3Pp3/2B1P3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6 G + %Eeb77821d5621fabC54enItalian GameGiuoco Piano, Greco's Attackr1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/2N2N2/PP3PPP/R1BQK2R b KQkq - 2 7F -%E f520608317809d72rC54enItalian GameGiuoco Piano, Greco's Attackr1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/5N2/PP3PPP/RNBQK2R w KQkq - 1 7q} - #)e3742881f38c73bfC45enScotch GamePaulsen Attackr1b1k2r/ppppnppp/2n2q2/1Bb5/3NP3/2P1B3/PP3PPP/RN1QK2R b KQkq - 2 7 & : - %I 49b5a1bde9c1eb60`C54enItalian GameGiuoco Piano, Cracow Variationr1bqk2r/pppp1ppp/2n2n2/8/1bBPP3/5N2/PP3PPP/RNBQ1K1R b kq - 2 7'- - %{47338897286d5ae4C55enItalian GameTwo Knights Defense, Max Lange Attack, Krause Variationr1bqk2r/pppp1ppp/2n5/2b1P3/2Bp2n1/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 7 w { - /]71f3ccd9b3d55d92C49enFour Knights GameSpanish Variation, Symmetrical Variationr1bq1rk1/ppp2ppp/2np1n2/1B2p3/1b2P3/3P1N2/PPP1NPPP/R1BQ1RK1 b - - 1 7 - %I 275003abe432c811C56enItalian GameScotch Gambit, Canal Variationr1bqkb1r/ppp2ppp/2n5/3p4/2Bpn3/2N2N2/PPP2PPP/R1BQR1K1 b kq - 1 7  p1c  fffffffffff,b --]6df2a947118011ffC41enPhilidor DefenseLion Variation, Delayed Bishop Sacrificer1bqk2r/pppnbppp/5n2/4p3/2B1P3/2N2N2/PPP2PPP/R1BQK2R w KQkq - 0 7a --]57d7a9a8a0ce5f76vC41enPhilidor DefenseLion Variation, Delayed Bishop Sacrificer1bqk2r/pppnbppp/3p1n2/4P3/2B1P3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 0 6] --]364d9967d9f66a07C41enPhilidor DefenseLion Variation, Delayed Bishop Sacrificer1bqkb1r/pppnpppp/3p1n2/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 4 4V - -] 22d5c43687ad01a2C41enPhilidor DefensePhilidor Countergambit, Berger Variationrnbqk1nr/ppp3pp/4P3/2bp2N1/4p3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 7U --] d942dc94454f837b{C41enPhilidor DefensePhilidor Countergambit, Berger Variationrnbqk1nr/ppp3pp/4P3/2bp2N1/4p3/8/PPP2PPP/RNBQKB1R w KQkq - 1 7 0p + _ e91285cb2873377wC40enLatvian Gambit Accepted, Bronstein Gambitrnb1kbnr/ppp4p/3p1qp1/8/2NPp3/8/PPP1QPPP/RNB1KB1R b KQkq - 1 7o -_ c04c62f27f89cb66fC40enLatvian Gambit Accepted, Bronstein Gambitrnb1kbnr/ppp4p/3p1qp1/7Q/2NPp3/8/PPP2PPP/RNB1KB1R w KQkq - 0 7n -_ 29f831a90406592d-C40enLatvian Gambit Accepted, Bronstein Gambitrnb1kbnr/ppp3pp/3p1q2/7Q/2NPp3/8/PPP2PPP/RNB1KB1R b KQkq - 1 63c - -] cc41f96bf961b38aC41enPhilidor DefenseLion Variation, Delayed Bishop Sacrificer1bqk2r/pppnbBpp/5n2/4p3/4P3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 0 7 D  "  KH@( -#Y 5@{ -#) ca874f63e4a22aebC44enScotch GameBenima Defenser1bqk1nr/ppppbppp/2n5/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4|Q - /[3c173617a34b6df3C48enFour Knights GameSpanish Variation, Rubinstein Variationr1bqkb1r/pppp1ppp/5n2/1B2p3/3nP3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5MI - /Y46771eadd73dc7d1C48enFour Knights GameSpanish Variation, Classical Variationr1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5A - /)222b33f056f8e570pC49enFour Knights GameDouble Spanishr1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5 - #S 1edb02fb4788d3f9C44enScotch GameScotch Gambit, Dubois Réti Defenser1bqkb1r/pppp1ppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 /{ - #1bf157b8c88365e19C45enScotch GameSteinitz Variationr1b1kbnr/pppp1ppp/2n5/8/3NP2q/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 }y - #1 8853b67d98f71ec5C45enScotch GameMalaniuk Variationr1bqk1nr/pppp1ppp/2n5/8/1b1NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5}q - #3 ec0f9b2019323c64dC45enScotch GameClassical Variationr1bqk1nr/pppp1ppp/2n5/2b5/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5{i - #/ 1afceb8e7efa9771qC45enScotch GameSchmidt Variationr1bqkb1r/pppp1ppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5a - 75d1e04c73292d09a6C46enThree Knights OpeningSchlechter Variationr1bqk2r/pppp1ppp/2n2n2/3Np3/1b2P3/5N2/PPPP1PPP/R1BQKB1R w KQkq - 6 5 ` -758a0e788684d748300C46enThree Knights OpeningSchlechter Variationr1bqk1nr/pppp1ppp/2n5/3Np3/1b2P3/5N2/PPPP1PPP/R1BQKB1R b KQkq - 5 4k$Y - /?86ffae71ad298786C47enFour Knights GameScotch Variation Acceptedr1bqkb1r/pppp1ppp/2n2n2/8/3pP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 0 5 vj  lvEaaaaaaaaaaavv8 - 36f8c73191db7d73sC38enKing's Gambit Accepted, Philidor Gambit, Schultz Variationrnbqkbnr/pppp1pp1/7p/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R b KQkq - 1 4I1K -  d56ecaaaee151e6clC37enKing's Gambit Accepted, Double Muzio Gambit, Bello Gambitrnb1kbnr/pppp1p1p/5q2/8/2B1Pp2/2N2Q2/PPPP2PP/R1B2RK1 b kq - 2 7> -  c64c837439e4c575uC38enKing's Gambit Accepted, Philidor Gambit, Schultz Variationrnbqk1nr/ppp2pb1/3p3p/6p1/2BPPp1P/3Q1N2/PPP3P1/RNB1K2R b KQkq - 2 71 - 9G b96238a330463378xC39enKing's Gambit AcceptedKieseritzky, Brentano Defensernbqkb1r/ppp2p1p/5n2/3pN3/3PPBpP/8/PPP3P1/RN1QKB1R b KQkq - 0 70 -9G 1933de8eeb22a3dfC39enKing's Gambit AcceptedKieseritzky, Brentano Defensernbqkb1r/ppp2p1p/5n2/3pN3/3PPppP/8/PPP3P1/RNBQKB1R w KQkq - 1 7/ -9G42ddea7b46d8e249IC39enKing's Gambit AcceptedKieseritzky, Brentano Defensernbqkbnr/ppp2p1p/8/3pN3/3PPppP/8/PPP3P1/RNBQKB1R b KQkq - 0 6U - 54ba7bf4da51800d C35enKing's Gambit Accepted, Cunningham Defense, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1P2b/5Np1/PPPP3P/RNBQK2R w KQkq - 0 6 Yp $ - 9eab94c5ae8dfbf97d}C39enKing's Gambit AcceptedKieseritzky, Salvio Defense, Cozio Variationrnb1kbnr/ppppq2p/8/4Np2/2BPPppP/8/PPP3P1/RNBQK2R b KQkq - 1 7!# -9ec8277186a5b82fdbC39enKing's Gambit AcceptedKieseritzky, Salvio Defense, Cozio Variationrnb1kbnr/ppppq2p/8/4Np2/3PPppP/8/PPP3P1/RNBQKB1R w KQkq - 0 7 " -9e5c48171f1b300205C39enKing's Gambit AcceptedKieseritzky, Salvio Defense, Cozio Variationrnb1kbnr/ppppqp1p/8/4N3/3PPppP/8/PPP3P1/RNBQKB1R b KQkq - 0 6  - 9C4aca71d93c3636e8C39enKing's Gambit AcceptedAllgaier, Blackburne Gambitrnbq1bnr/pppp1k2/7p/8/4PppP/2N5/PPPP2P1/R1BQKB1R b KQ - 1 7  -9Cb15d697bfed4b4311C39enKing's Gambit AcceptedAllgaier, Blackburne Gambitrnbq1bnr/pppp1k2/7p/8/4PppP/8/PPPP2P1/RNBQKB1R w KQ - 0 7 - { 746846d1ef1d9973sC39enKing's Gambit Accepted, Allgaier Gambit, Thorold Attackrnbq1bnr/pppp1k2/7p/8/3PPppP/8/PPP3P1/RNBQKB1R b KQ - 0 7} - y d2eedd53d6976297C39enKing's Gambit Accepted, Allgaier Gambit, Urusov Attackrnbq1bnr/pppp1k2/7p/8/2B1PppP/8/PPPP2P1/RNBQK2R b KQ - 1 7 Sg |]UUV - 2acf00c0a6a25b1dC35enKing's Gambit Accepted, Cunningham Defense, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1P2b/5Np1/PPPP3P/RNBQ1RK1 b kq - 1 6u -9A 2bab693ca5daf3fdC30enKing's Gambit DeclinedClassical, Réti Variationrnbqk1nr/ppp3pp/8/2b1pp2/3PP3/2P2N2/PP4PP/RNBQKB1R b KQkq - 0 6 -9A ee9e4696b413debfC30enKing's Gambit DeclinedClassical, Réti Variationrnbqk1nr/ppp3pp/8/2b1pp2/4P3/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 0 6 -9Ad4bb4679055d90366C30enKing's Gambit DeclinedClassical, Réti Variationrnbqk1nr/ppp3pp/3p4/2b1Pp2/4P3/2P2N2/PP1P2PP/RNBQKB1R b KQkq - 0 5A - 9A d366d79649e2314eNC30enKing's Gambit DeclinedClassical, Réti Variationrnbqk1nr/ppp3pp/8/2b2p2/2BpP3/2P2N2/PP4PP/RNBQK2R b KQkq - 1 7 -9A b0d563be61a1e7e8C30enKing's Gambit DeclinedClassical, Réti Variationrnbqk1nr/ppp3pp/8/2b2p2/3pP3/2P2N2/PP4PP/RNBQKB1R w KQkq - 0 7 - 9G6b677f97a1205f05C33enKing's Gambit AcceptedBishop's Gambit, Grimm Attackrnb1k1nr/ppp2pbp/3p4/4P1p1/2BP1p1q/2N5/PPP3PP/R1BQ1KNR b kq - 0 7~ +9G a1e696aa53e7961aC33enKing's Gambit AcceptedBishop's Gambit, Grimm Attackrnb1k1nr/ppp2pbp/3p4/6p1/2BPPp1q/2N5/PPP3PP/R1BQ1KNR w kq - 0 7} -9G 33a4ff0b7746300c C33enKing's Gambit AcceptedBishop's Gambit, Grimm Attackrnb1k1nr/pppp1pbp/8/6p1/2BPPp1q/2N5/PPP3PP/R1BQ1KNR b kq - 0 6 `r -  210df8f72c186389C33enKing's Gambit Accepted, Bishop's Gambit, McDonnell Attackrnb1k2r/ppppnpbp/8/6p1/2BPPp1q/2N3P1/PPP4P/R1BQ1KNR b kq - 0 72e - 9O a03e02ff1818f613C33enKing's Gambit AcceptedBishop's Gambit, Fraser Variationrnb1k1nr/pppp1pbp/8/6p1/2B1P2q/2N2Qp1/PPPP3P/R1B2KNR b kq - 1 7d -9O 1a1c79cc3465a0a8C33enKing's Gambit AcceptedBishop's Gambit, Fraser Variationrnb1k1nr/pppp1pbp/8/6p1/2B1P2q/2N3p1/PPPP3P/R1BQ1KNR w kq - 0 7X -  1aa48034cde1e748HC35enKing's Gambit Accepted, Cunningham Defense, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1P2b/5N2/PPPP3p/RNBQ1R1K b kq - 1 7W - 2b0fb39e2d074507C35enKing's Gambit Accepted, Cunningham Defense, Bertin Gambitrnbqk1nr/pppp1ppp/8/8/2B1P2b/5N2/PPPP3p/RNBQ1RK1 w kq - 0 7 p Cd/  `  - #W 614ebc9393c68b89C27enVienna GameStanley Variation, Alekhine Variationr1bqk2r/ppppbppp/2nn4/4N2Q/8/1BN5/PPPP1PPP/R1B1K2R b KQkq - 0 7 -#Wdf0d486837d82ebfC27enVienna GameStanley Variation, Alekhine Variationr1bqk2r/ppppbppp/2nn4/4p2Q/8/1BN2N2/PPPP1PPP/R1B1K2R w KQkq - 6 7 -#W 74e0908a26498bbcC27enVienna GameStanley Variation, Alekhine Variationrnbqk2r/ppppbppp/3n4/4p2Q/8/1BN2N2/PPPP1PPP/R1B1K2R b KQkq - 5 6 MY -)q 154aeb433e111b7fC15enFrench DefenseWinawer Variation, Fingerslip Variation, Main Linernbqk1r1/ppp2pQp/4pn2/8/1b1Pp3/2N5/PPPB1PPP/R3KBNR w KQq - 1 7X -)q 4e09b8feaab81b3c ~z - -' 5dd9d9aa2b716643CB40enSicilian DefensePin Variationrnbqk2r/pp1p1ppp/4pn2/8/1b1NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6f - -U 1e0688f11b0cbd02B42enSicilian DefenseKan Variation, Polugaevsky Variationrnbqk1nr/1p1p1ppp/p3p3/2b5/3NP3/3B4/PPP2PPP/RNBQK2R w KQkq - 2 6\ - -W 5aaf9ff1aab1c5caB42enSicilian DefenseKan Variation, Swiss Cheese Variationrnbqkbnr/1p1p1p1p/p3p1p1/8/3NP3/3B4/PPP2PPP/RNBQK2R w KQkq - 0 6 R - -A 7d851fbfb1f1aa16B43enSicilian DefenseKan Variation, Wing Attackrnbqkbnr/3p1ppp/p3p3/1p6/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6H - -/b66cad483bcdb228(B46enSicilian DefensePaulsen Variationr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6> - -Y 6284639ab0a605f5B47enSicilian DefensePaulsen Variation, Bastrikov Variationr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 64 - -U e4affea96dc72acdB53enSicilian DefenseChekhover Variation, Zaitsev Defenser1b1kbnr/pp1qpppp/2np4/1B6/3QP3/5N2/PPP2PPP/RNB1K2R w KQkq - 3 6* - -3 70b80c1ebb4dd25d]B56enSicilian DefenseClassical Variationr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6 C --Se46a98540f18f594B40enSicilian DefenseAlapin Variation, Sherzer Variationrnbqkb1r/pp1p1ppp/4pn2/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 4 - -93f75684e71170b62bB40enSicilian DefenseFour Knights Variationr1bqkb1r/pp1p1ppp/2n1pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6 --9 9498b0ac6086ae61aB40enSicilian DefenseFour Knights Variationrnbqkb1r/pp1p1ppp/4pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 - -/53674efbaacd78bbB40enSicilian DefenseGaw-Paw Variationrnb1kb1r/pp1p1ppp/1q2pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6!p - -m 8381a177d03eacbeB41enSicilian DefenseKan Variation, Maróczy Bind, Hedgehog Variationrnbqkbnr/1p1p1p1p/p3p1p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 0 6 ]  z  g g g g g gwwwwwww( +-?b6292a4c6fe91e1B52enSicilian DefenseCanal Attack, Haag Gambitrn2kbnr/pp1qpppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5m)F - -yeb63660a17053907B48enSicilian DefensePaulsen Variation, Bastrikov Variation, English Attackr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPPQ1PPP/R3KB1R b KQkq - 1 7 - -Y c5c23bf25e9969fdB58enSicilian DefenseBoleslavsky Variation, Louma Variationr1bqkb1r/pp3ppp/2Np1n2/4p3/4P3/2N5/PPP1BPPP/R1BQK2R b KQkq - 0 7k - -) 60f205d5bca708b0B62enSicilian DefenseRichter-Rauzerr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2NQ4/PPP2PPP/R3KB1R b KQkq - 1 7x - -g 54e4913402f25f0d B62enSicilian DefenseRichter-Rauzer Variation, Podebrady Variationr1bqkb1r/pp3ppp/2nppn2/6B1/4P3/1NN5/PPP2PPP/R2QKB1R b KQkq - 1 7#M&O --y 14f391aba88495a7B48enSicilian DefensePaulsen Variation, Bastrikov Variation, English Attackr1b1kbnr/ppqppppp/2n5/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 + --?8dbb862baae57af2B52enSicilian DefenseCanal Attack, Haag Gambitr3kb1r/pp1qpppp/2np1n2/2p5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 w kq - 1 7 * --? d655b2de071f3b64dB52enSicilian DefenseCanal Attack, Haag Gambitr3kbnr/pp1qpppp/2np4/2p5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 6) --?a08f4a46d76f34e2B52enSicilian DefenseCanal Attack, Haag Gambitr3kbnr/pp1qpppp/2np4/2p5/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 6*S - -yadcacfb4767609d6B48enSicilian DefensePaulsen Variation, Bastrikov Variation, English Attackr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7*R --yc37b2985d6bce6a7B48enSicilian DefensePaulsen Variation, Bastrikov Variation, English Attackr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 0 79 - -Yb0fbaa7cd799ac04B49enSicilian DefensePaulsen Variation, Bastrikov Variationr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7 , - -? 488ea981bb2c57b0B52enSicilian DefenseCanal Attack, Haag Gambitr3kb1r/pp1qpppp/2np1n2/2p5/3PP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 7 - -71d31bf80389aa602B59enSicilian DefenseBoleslavsky Variationr1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7 - -a7c3beaf510240604B61enSicilian DefenseRichter-Rauzer Variation, Modern Variationr2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 3 7B M nM/b1 uMMMMMMMMMMMl --e ef77404a423abebfB43enSicilian DefenseKan Variation, Wing Attack, Spraggett Attackrnb1kbnr/3p1ppp/pq2p3/1p6/3NP3/2NB4/PPP2PPP/R1BQK2R w KQkq - 2 7k --e 2888be1d88716865eB43enSicilian DefenseKan Variation, Wing Attack, Spraggett Attackrnbqkbnr/3p1ppp/p3p3/1p6/3NP3/2NB4/PPP2PPP/R1BQK2R b KQkq - 1 6 x - -]38ec7b8bc53d98c9B35enSicilian DefenseAccelerated Dragon, Modern Bc4 Variationr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6w - -] 4be4c06744078347GB35enSicilian DefenseAccelerated Dragon, Modern Bc4 Variationr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 6m - -e9110da4680e20670pB43enSicilian DefenseKan Variation, Wing Attack, Spraggett Attackrnb1kbnr/3p1ppp/pq2p3/1p6/4P3/2NB1N2/PPP2PPP/R1BQK2R b KQkq - 3 7` - -Q880a67c600624874tB45enSicilian DefensePaulsen Variation, American Attackr1bqk2r/pp1p1ppp/2nNpn2/8/1b2P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 6 7_ +-Q35eeb253b70f916B45enSicilian DefensePaulsen Variation, American Attackr1bqk2r/pp1p1ppp/2n1pn2/1N6/1b2P3/2N5/PPP2PPP/R1BQKB1R w KQkq - 5 7 - -?3894a69845743c98B24enSicilian DefenseClosed, Smyslov Variationr1bqk1nr/pp1p1pbp/4p1p1/2p5/3nP3/3PB1P1/PPP1NPBP/R2QK1NR b KQkq - 3 7 --?888f9a869f1b44388B24enSicilian DefenseClosed, Smyslov Variationr1bqk1nr/pp1p1pbp/4p1p1/2p5/3nP3/2NPB1P1/PPP2PBP/R2QK1NR w KQkq - 2 7 --?5ff2f667215f0499B24enSicilian DefenseClosed, Smyslov Variationr1bqk1nr/pp1p1pbp/2n1p1p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6 --?2cfa4d8ba0651f17B24enSicilian DefenseClosed, Smyslov Variationr1bqk1nr/pp1p1pbp/2n1p1p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6z ) -]b1fb5640840ff9B35enSicilian DefenseAccelerated Dragon, Modern Bc4 Variationr1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7y - -]63024f7e68c7d95f_B35enSicilian DefenseAccelerated Dragon, Modern Bc4 Variationr1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7 VVsT ( h N "CVVVVVVVVV E --E e2bfb2a3aa1384b7B03enAlekhine DefenseFour Pawns Attack, Main Linernbqkb1r/ppp1pppp/1n6/4p3/2PP1P2/8/PP4PP/RNBQKBNR w KQkq - 0 6o - 5]e2d062eb24c2061cB01enScandinavian DefenseAnderssen Counterattack, Orthodox Attackr1b1k1nr/ppp2ppp/2n5/q3P3/1b6/2N2N2/PPPB1PPP/R2QKB1R b KQkq - 4 7n -5]cb5d385eb6a36d18B01enScandinavian DefenseAnderssen Counterattack, Orthodox Attackr1b1k1nr/ppp2ppp/2n5/q3P3/1b6/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 3 7m +5] 21c5158fd54a53a:B01enScandinavian DefenseAnderssen Counterattack, Orthodox Attackr1b1kbnr/ppp2ppp/2n5/q3P3/8/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 6l -5]d978bdae95b2c407B01enScandinavian DefenseAnderssen Counterattack, Orthodox Attackr1b1kbnr/ppp2ppp/2n5/q3P3/8/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 6k -5]7295654c84236104B01enScandinavian DefenseAnderssen Counterattack, Orthodox Attackrnb1kbnr/ppp2ppp/8/q3P3/8/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 5 b - 538bec103fa9325cb4B01enScandinavian DefenseGrünfeld Variationrn2kb1r/pp2pppp/2p2n2/q3Nb2/3P2P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 7 a -5328a111e94147b1a9B01enScandinavian DefenseGrünfeld Variationrn2kb1r/pp2pppp/2p2n2/q3Nb2/3P4/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 7` -53 badbfc0636876212B01enScandinavian DefenseGrünfeld Variationrn2kb1r/ppp1pppp/5n2/q3Nb2/3P4/2N5/PPP2PPP/R1BQKB1R b KQkq - 4 6U - -Q 819829f60fcb8122"B02enAlekhine DefenseHunt Variation, Matsukevich Gambitrnbqkb1r/ppp1pppp/3p4/2P1P1B1/8/2P5/PP3PPP/R2QKBNR b KQkq - 1 7T --Q 47c27ec0bf415aeaB02enAlekhine DefenseHunt Variation, Matsukevich Gambitrnbqkb1r/ppp1pppp/3p4/2P1P3/8/2P5/PP3PPP/R1BQKBNR w KQkq - 0 7S --Q7e78e8a16d391387B02enAlekhine DefenseHunt Variation, Matsukevich Gambitrnbqkb1r/pppppppp/8/2P1P3/8/2P5/PP3PPP/R1BQKBNR b KQkq - 0 6R --Q 280c258fae4699fdB02enAlekhine DefenseHunt Variation, Matsukevich Gambitrnbqkb1r/pppppppp/8/2P1P3/8/2n5/PP1P1PPP/R1BQKBNR w KQkq - 0 6Q --Q 649d0b7f35c397bfB02enAlekhine DefenseHunt Variation, Matsukevich Gambitrnbqkb1r/pppppppp/8/2PnP3/8/2N5/PP1P1PPP/R1BQKBNR b KQkq - 2 5 H - -E b6c5d90e56d4ceaeB03enAlekhine DefenseFour Pawns Attack, Main Liner1bqkb1r/ppp1pppp/1nn5/4P3/2PP4/4B3/PP4PP/RN1QKBNR b KQkq - 2 7 G --Ec5cd62e2d7eed520 B03enAlekhine DefenseFour Pawns Attack, Main Liner1bqkb1r/ppp1pppp/1nn5/4P3/2PP4/8/PP4PP/RNBQKBNR w KQkq - 1 7 F --E6e20ba00c67f7023#B03enAlekhine DefenseFour Pawns Attack, Main Linernbqkb1r/ppp1pppp/1n6/4P3/2PP4/8/PP4PP/RNBQKBNR b KQkq - 0 6 vwo N = +vvvvvvvcccC~V - K 15eaabbea9e91e7c|A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7}U - K 2c503ddf7b915711A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6w -' 6c461eca037fe029)A92enDutch DefenseStonewallrnbqk2r/ppppb1pp/4pn2/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 3 5w -' 189b8849aad5d2d2A92enDutch DefenseStonewallrnbq1rk1/ppppb1pp/4pn2/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 5 6v -' 123365fe7f8c3b399A92enDutch DefenseStonewallrnbqk2r/ppppb1pp/4pn2/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 4 5/| - '9d74552daf835c9eA93enDutch DefenseClassical Variation, Stonewall Variation, Botvinnik Variationrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7 |T - K d7c7257db973d5c8A59enBenko Gambit Accepted, Yugoslavrn1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6J - )/795456fe9cfc01e1A61enBenoni DefenseUhlmann Variationrnbqkb1r/pp3p1p/3p1np1/2pP2B1/8/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 7= - ); 622c9a2feecbe4a3A61enBenoni DefenseKnight's Tour Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N5/PP1NPPPP/R1BQKB1R b KQkq - 1 70 - )593e8ba89cca10211A61enBenoni DefenseFianchetto Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 7# - )5 5d7b9d7bb6813b97A66enBenoni DefensePawn Storm Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 7" - )5 a06de076af10061eA66enBenoni DefensePawn Storm Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7& - )37b090c80c7f66723#A70enBenoni DefenseClassical Variationrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7z - 'ea452ddbb7ecb52a*A92enDutch DefenseStonewallrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7  )=1){  \FFF[VVVVAW?}$ - %)54cde9bf0274a21bB07enPirc DefenseKholmov Systemrnbqkb1r/ppp1pp1p/3p1np1/8/2BPP3/2N5/PPP2PPP/R1BQK1NR b KQkq - 1 4 - %344fede6e2b123e1eB07enPirc DefenseClassical Variationrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N5/PPP1BPPP/R1BQK1NR b KQkq - 1 4 - %/1b98e6d6cae0ac85B07enPirc DefenseSveshnikov Systemrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N3P1/PPP2P1P/R1BQKBNR b KQkq - 0 4 - )+8a05581806fe12e3B07enModern DefenseGeller's Systemrnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4~ -)+ fcdfa080d68e1d65eB07enModern DefenseGeller's Systemrnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4U - 3370efa8f7d08fa71fB06enPterodactyl DefenseEastern, Anhanguerarnbqk1nr/pp1pppbp/6p1/2p5/3PP3/2N1B3/PPP2PPP/R2QKBNR b KQkq - 1 4 w N - 3= 7c0431cbb2a9ebfdB06enPterodactyl DefenseEastern, Rhamphorhynchusrnbqk1nr/pp1pppbp/6p1/2P5/4P3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4G - )9 213a29d9651bc308B06enModern DefensePseudo-Austrian Attackrnbqk1nr/ppp1ppbp/3p2p1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4 @ + )7748b822146c9fbcB06enModern DefenseTwo Knights Variationrnbqk1nr/ppp1ppbp/3p2p1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4{9 - %' 103f089ca88136b3B07enLion DefenseAnti-Philidorr1bqkb1r/pppnpppp/3p1n2/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4z8 -%' ed297591b1100b3a:B07enLion DefenseAnti-Philidorr1bqkb1r/pppnpppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 3 4~}2 - %)4e6474475965e627'B07enLion DefenseBayonet Attackr1bqkb1r/pppnpppp/3p1n2/8/3PP1P1/2N5/PPP2P1P/R1BQKBNR b KQkq - 0 4~+ - %+f1240aa19abdaf75uB07enPirc DefenseByrne Variationrnbqkb1r/ppp1pp1p/3p1np1/6B1/3PP3/2N5/PPP2PPP/R2QKBNR b KQkq - 1 4  D9s e % o  -+]e3b77861297f95cfA38enEnglish OpeningSymmetrical Variation, Duchamp Variationrnbq1rk1/pp1pppbp/5np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 b - - 1 6 -+] 182060c3eb9d1716A38enEnglish OpeningSymmetrical Variation, Duchamp Variationrnbq1rk1/pp1pppbp/5np1/2p5/2P5/5NP1/PP1PPPBP/RNBQ1RK1 w - - 0 6 -+]fe51b16d14da1c6bkA38enEnglish OpeningSymmetrical Variation, Duchamp Variationrnbq1rk1/ppppppbp/5np1/8/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b - - 0 5 - +]e6fe63567c7e8b18A38enEnglish OpeningSymmetrical Variation, Duchamp Variationr1bq1rk1/pp1pppbp/2n2np1/2p5/2P5/2NP1NP1/PP2PPBP/R1BQ1RK1 b - - 0 7 - +]8d6f8f2929271d8eA39enEnglish OpeningSymmetrical Variation, Mecking Variationr1bq1rk1/pp1pppbp/2n2np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 7 10 -+8f58030762724280A28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bq1rk1/pppp1ppp/2n2n2/3Np3/1bP5/4PN2/PPQP1PPP/R1B1KB1R b KQ - 4 62/ -+4f4dad2b78333dd5A28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bq1rk1/pppp1ppp/2n2n2/4p3/1bP5/2N1PN2/PPQP1PPP/R1B1KB1R w KQ - 3 6% - +]c4fcc0d7e2635ba1A38enEnglish OpeningSymmetrical Variation, Double Fianchettor1bq1rk1/pp1pppbp/2n2np1/2p5/2P5/1PN2NP1/P2PPPBP/R1BQ1RK1 b - - 0 7$ -+]485aa08338ee30ccA38enEnglish OpeningSymmetrical Variation, Double Fianchettor1bq1rk1/pp1pppbp/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 w - - 6 7# -+]42f24d34edb7d927'A38enEnglish OpeningSymmetrical Variation, Double Fianchettor1bqk2r/pp1pppbp/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQ1RK1 b kq - 5 6m@~ - /I bd576dd50ccc45fdA45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp2pppp/2p5/q2p4/3PP2B/2P5/PP1Q1PPP/R3KBNR b KQkq - 0 7} -/I 7950609de74cf8f7A45enTrompowsky AttackEdge Variation, Hergert Gambitrnb1kb1r/pp2pppp/2p5/q2p4/3P3B/2P5/PP1QPPPP/R3KBNR w KQkq - 0 7 V] , NF71R bQCCC'I -){e96eccda89daea73sA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variation Acceptedrnbqk1nr/pp2ppbp/3p2p1/2P5/2P1P3/5N2/PP3PPP/RNBQKB1R b KQkq - 0 5'H -){968dee0a6ac6bd1fA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variation Acceptedrnbqk1nr/pp2ppbp/3p2p1/2p5/2PPP3/5N2/PP3PPP/RNBQKB1R w KQkq - 0 5~= -5'78dac3fe828c5e87A05enKing's Indian AttackWahls Defensernbqk2r/ppppppbp/5np1/8/8/5NP1/PPPPPPBP/RNBQ1RK1 b kq - 3 4~< +5'6afb8cafe7f8597A05enKing's Indian AttackWahls Defensernbqk2r/ppppppbp/5np1/8/8/5NP1/PPPPPPBP/RNBQK2R w KQkq - 2 4  + +A2db8e9b444f79baA25enEnglish OpeningClosed, Taimanov Variationr1bqk2r/pppp1pbp/2n3pn/4p3/2P5/2N3P1/PP1PPPBP/1RBQK1NR w Kkq - 4 6J; -5'b613857c05384e3d=A05enKing's Indian AttackWahls Defensernbqkb1r/pppppp1p/5np1/8/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3 [6 - 5) bccda23ddf5e9968hA07enKing's Indian AttackPachman Systemrnbqk2r/ppp1npbp/6p1/3pp3/8/3P1NP1/PPP1PPBP/RNBQ1RK1 w kq - 1 65 -5) 82821e8064d712d5A07enKing's Indian AttackPachman Systemrnbqk1nr/ppp2pbp/6p1/3pp3/8/3P1NP1/PPP1PPBP/RNBQ1RK1 b kq - 0 54 - 5)2c26dd552047a901A07enKing's Indian AttackPachman Systemrnbqk1nr/ppp2pbp/6p1/3pp3/8/5NP1/PPPPPPBP/RNBQ1RK1 w kq - 0 53 -5)a65ed51fb3a251377A07enKing's Indian AttackPachman Systemrnbqk1nr/ppp1ppbp/6p1/3p4/8/5NP1/PPPPPPBP/RNBQ1RK1 b kq - 3 42 -5) d82bae2bcf518a27'A07enKing's Indian AttackPachman Systemrnbqk1nr/ppp1ppbp/6p1/3p4/8/5NP1/PPPPPPBP/RNBQK2R w KQkq - 2 41 -5) 6897939d3416418dA07enKing's Indian AttackPachman Systemrnbqkbnr/ppp1pp1p/6p1/3p4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3 t}> -5'72722e4957d5b76clA05enKing's Indian AttackWahls Defensernbq1rk1/ppppppbp/5np1/8/8/5NP1/PPPPPPBP/RNBQ1RK1 w - - 4 5 , - +k 27f6a29775892af7A16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pp1p/1n4p1/8/8/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 6+ ++k e6d2d986dcc41b9A16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pp1p/6p1/3n4/8/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 5 * -+k bb9d0ee5202199c0A16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pp1p/6p1/3n4/8/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 5) -+k 52295dbe5bae0b8bA16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pppp/8/3n4/8/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 4@ - 5' 59bccf888f91429eA05enKing's Indian AttackWahls Defensernbq1rk1/ppp1ppbp/5np1/3p4/8/3P1NP1/PPP1PPBP/RNBQ1RK1 w - - 0 6? -5'dcd6ed9c13450cb8A05enKing's Indian AttackWahls Defensernbq1rk1/ppppppbp/5np1/8/8/3P1NP1/PPP1PPBP/RNBQ1RK1 b - - 0 5" - +k 42fc0368f6494ffbA16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pp1p/6p1/8/8/2n3P1/PP1PPPBP/R1BQK1NR w KQkq - 0 6 L/m}J -)988bac1d9fd30fc6A00enFormationCabbage Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/P7/1PP3P1/1B1PPP1P/RN1QKBNR b KQkq - 0 6{I -)b46d175c7f04d7feA00enFormationCabbage Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/P7/1PP5/1B1PPPPP/RN1QKBNR w KQkq - 1 6{H -)10357adea01e06daA00enFormationCabbage Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/P7/1PP5/1B1PPPPP/RN1QKBNR b KQkq - 0 5yG -)48b613be2be6d85d]A00enFormationCabbage Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/8/PPP5/1B1PPPPP/RN1QKBNR w KQkq - 3 5wF -) e35bcb5c3a777d5e^A00enFormationCabbage Attackrnbqkb1r/ppp2ppp/5n2/3pp3/8/PPP5/1B1PPPPP/RN1QKBNR b KQkq - 2 4\uC -)f46f75f8809ccb4aJA00enFormationCabbage Attackrnbqkbnr/ppp2ppp/8/3pp3/8/P1P5/1P1PPPPP/RNBQKBNR w KQkq - 0 3uB -)710557ec1c48856clA00enFormationCabbage Attackrnbqkbnr/pppp1ppp/8/4p3/8/P1P5/1P1PPPPP/RNBQKBNR b KQkq - 0 2tA -)ba9966ca55040b2c,A00enFormationCabbage Attackrnbqkbnr/pppp1ppp/8/4p3/8/2P5/PP1PPPPP/RNBQKBNR w KQkq - 0 2u+? - '9e281bf4ba9e1356VA14enRéti OpeningAnglo-Slav Variation, Bogoljubov Variation, Stonewall Linernbq1rk1/pp2bppp/2p1pn2/3p4/2P5/1P3NP1/PB1PPPBP/RN1Q1RK1 b - - 1 7+> -'5e54f1f177028fb9A14enRéti OpeningAnglo-Slav Variation, Bogoljubov Variation, Stonewall Linernbq1rk1/pp2bppp/2p1pn2/3p4/2P5/1P3NP1/P2PPPBP/RNBQ1RK1 w - - 0 7)= -' cc2e1c1e00c25c02A14enRéti OpeningAnglo-Slav Variation, Bogoljubov Variation, Stonewall Linernbq1rk1/ppp1bppp/4pn2/3p4/2P5/1P3NP1/P2PPPBP/RNBQ1RK1 b - - 0 6(< -' 40887c4ada4f376foA14enRéti OpeningAnglo-Slav Variation, Bogoljubov Variation, Stonewall Linernbq1rk1/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 w - - 5 612 - +fb2de157c006c56clA28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqr1k1/pppp1ppp/2n2n2/3NpQ2/1bP5/4PN2/PP1P1PPP/R1B1KB1R b KQ - 6 701 -+9309c4475002a702A28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqr1k1/pppp1ppp/2n2n2/3Np3/1bP5/4PN2/PPQP1PPP/R1B1KB1R w KQ - 5 7 w J V ` j   ccccc{f - 3 67e4a599cceb7844DA00enFormationHippopotamus Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/PPPPPPP1/7P/RNBQKBNR b KQ - 0 7{e -3 4b021ed82c3ca07c|A00enFormationHippopotamus Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/PPPPPP2/6PP/RNBQKBNR w KQ - 1 7}d -3 41aaf36ff9654997A00enFormationHippopotamus Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/8/PPPPPP2/6PP/RNBQKBNR b KQkq - 0 6}c -3 2f1b155e59afa6e6A00enFormationHippopotamus Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/8/PPPPP3/5PPP/RNBQKBNR w KQkq - 1 6}b -3 8b4378dc86b577c2A00enFormationHippopotamus Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/8/PPPPP3/5PPP/RNBQKBNR b KQkq - 0 5|a -3 266e3a6ea2eaff66fA00enFormationHippopotamus Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/8/PPPP4/4PPPP/RNBQKBNR w KQkq - 1 5z` -38d83e28cb37b5a65eA00enFormationHippopotamus Attackrnbqkb1r/ppp2ppp/5n2/3pp3/8/PPPP4/4PPPP/RNBQKBNR b KQkq - 0 4{_ -323272159f7ebe1b1A00enFormationHippopotamus Attackrnbqkb1r/ppp2ppp/5n2/3pp3/8/PPP5/3PPPPP/RNBQKBNR w KQkq - 1 4x^ -378c915ac5a11a027'A00enFormationHippopotamus Attackrnbqkbnr/ppp2ppp/8/3pp3/8/PPP5/3PPPPP/RNBQKBNR b KQkq - 0 3x] +3e13ed348a61afa1A00enFormationHippopotamus Attackrnbqkbnr/ppp2ppp/8/3pp3/8/PP6/2PPPPPP/RNBQKBNR w KQkq - 0 3y\ -38b79cf2016b5e187A00enFormationHippopotamus Attackrnbqkbnr/pppp1ppp/8/4p3/8/PP6/2PPPPPP/RNBQKBNR b KQkq - 0 2 5ywY - !f7449dc5736f4a65eA00enFormationShy Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/P2PP1PP/1PPN1PB1/R1BQK1NR b KQ - 0 7xX -!1fb7407bb1cc8397A00enFormationShy Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/8/P2PP1P1/1PPN1PBP/R1BQK1NR w KQ - 1 7xW -!151fadcc64956a7c|A00enFormationShy Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/8/P2PP1P1/1PPN1PBP/R1BQK1NR b KQkq - 0 6xV -!b832ef7e40cae2d8A00enFormationShy Attackr1bqk2r/ppp2ppp/2nb1n2/3pp3/8/P2P2P1/1PPNPPBP/R1BQK1NR w KQkq - 3 6xU -!1c6a82fc9fd033fcA00enFormationShy Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/8/P2P2P1/1PPNPPBP/R1BQK1NR b KQkq - 2 5xT -!45043a9e052d9bccA00enFormationShy Attackr1bqkb1r/ppp2ppp/2n2n2/3pp3/8/P2P2P1/1PP1PPBP/RNBQK1NR w KQkq - 1 5vS -!eee9e27c14bc3ecfA00enFormationShy Attackrnbqkb1r/ppp2ppp/5n2/3pp3/8/P2P2P1/1PP1PPBP/RNBQK1NR b KQkq - 0 4sR -! 404d21a9502c851bA00enFormationShy Attackrnbqkb1r/ppp2ppp/5n2/3pp3/8/P5P1/1PPPPPBP/RNBQK1NR w KQkq - 2 4rQ -!1ba3155cfdd6c48dA00enFormationShy Attackrnbqkbnr/ppp2ppp/8/3pp3/8/P5P1/1PPPPPBP/RNBQK1NR b KQkq - 1 3~L - )3f0e03186ed56e89A00enFormationCabbage Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/P7/1PP1P1P1/1B1P1P1P/RN1QKBNR b KQ - 0 7{K -)922341aa4a8ae62d-A00enFormationCabbage Attackr1bq1rk1/ppp2ppp/2nb1n2/3pp3/P7/1PP3P1/1B1PPP1P/RN1QKBNR w KQ - 1 7  r B  & E      iiiiiiiiiiiR - 7K1f7e1e9fe718c993E73enKing's Indian DefenseAverbakh Variation, Nc6 Defenser1bq1rk1/ppp1ppbp/2np1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 4 7F - 7Q8770bd201621815c\E73enKing's Indian DefenseAverbakh Variation, Geller Defenser1bq1rk1/pppnppbp/3p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 4 7: - 7U26648d1b615d2585E73enKing's Indian DefenseAverbakh Variation, Flexible Defensernbq1rk1/ppp1ppb1/3p1npp/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7. - 7Q52e217d309ce67edE74enKing's Indian DefenseAverbakh Variation, Benoni Defensernbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7" - 7W7799067f9855be9fE82enKing's Indian DefenseSämisch Variation, Double Fianchettornbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7! - 7W 1cf04f6f66d60904E82enKing's Indian DefenseSämisch Variation, Double Fianchettornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6 @ - 7Ob71d978d7747ac07E83enKing's Indian DefenseSämisch Variation, Yates Defenser1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 7 - 7Y96884725f533f1322E85enKing's Indian DefenseSämisch Variation, Orthodox Variationrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7 ~ - 7-e72dd62da81a4ad9E91enKing's Indian DefenseKazakh Variationr1bq1rk1/ppp1ppbp/n2p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 7 r - 7123d575f7bd002e53SE92enKing's Indian DefenseOrthodox Variationrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 7 \K # ^ 9 0 wrrrrrr 1 - 55bec9d9259758620c E21enNimzo-Indian DefenseRomanishin Variationrnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 2 6 0 +55b39fa58dab5ba75uE21enNimzo-Indian DefenseRomanishin Variationrnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 1 6 - 7=c0873247e13ae3cbE61enKing's Indian DefenseSemi-Classical Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N1PN2/PP2BPPP/R1BQK2R b KQ - 1 6 -7=b307b1bee01fa968hE61enKing's Indian DefenseSemi-Classical Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6  -7= 8abd27df3267e005E61enKing's Indian DefenseSemi-Classical Variationrnbq1rk1/ppppppbp/5np1/8/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 0 5 -7= 2790656d163868a1E61enKing's Indian DefenseSemi-Classical Variationrnbq1rk1/ppppppbp/5np1/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQ - 4 5  < - 93 d1869dd70edaa5e0E17enQueen's Indian DefenseClassical Variationrn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b kq - 4 6% - 51 576360497e75d991E26enNimzo-Indian DefenseSämisch Variationrnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6 - 5116971ee27034b3a3E28enNimzo-Indian DefenseSämisch Variationrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6 - 51 5d4274d3dd685ce3E28enNimzo-Indian DefenseSämisch Variationrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b1P3/1P3PPP/R1BQKBNR w KQ - 0 6 - 51 7c7b0fd5c0d00ee9E28enNimzo-Indian DefenseSämisch Variationrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N1P3/1P3PPP/R1BQKBNR b KQ - 0 5 - 5S2275c13734e221f2E51enNimzo-Indian DefenseNormal Variation, Sämisch Deferredrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1N1PN2/1P3PPP/R1BQKB1R b KQ - 0 6 z + 751c12aa7c739acd6E73enKing's Indian DefenseSemi-Averbakh Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1B3/PP2BPPP/R2QK1NR b KQ - 3 6 y -75 72c9914b4603b758XE73enKing's Indian DefenseSemi-Averbakh Systemrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR w KQ - 2 69& - 51 fa4e22fb5a2a51355E26enNimzo-Indian DefenseSämisch Variationrnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR b KQkq - 0 6 o - 71b493c67df6896c90E73enKing's Indian DefenseAverbakh Variationrnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR b KQ - 3 6 d - 7/8fdfec465f928ad1E77enKing's Indian DefenseFour Pawns Attackrnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 6Y - 7)a9a2a3b55766c942BE81enKing's Indian DefenseSteiner Attackrnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N2P2/PP4PP/R2QKBNR b KQ - 2 6 / +5519117ef0fec539eE21enNimzo-Indian DefenseRomanishin Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 51N - 77b5c1f4ccfc71f74tE81enKing's Indian DefenseSämisch Variation, Bobotsov-Korchnoi-Petrosian Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP2N1PP/R1BQKB1R b KQ - 2 6 9` 4  \jF1Y -9y1d25fff6cf076f366E15enQueen's Indian DefenseFianchetto Variation, Check Variation, Intermezzo Linern1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/1P3NP1/P2BPP1P/RN1QKB1R b KQkq - 2 6Vl-} -9o99629d6da00c8482E12enQueen's Indian DefenseKasparov-Petrosian Variation, Classical Variationrn1qkb1r/pbp2ppp/1p2pn2/3P4/3P4/P1N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 6 (r + 9i68ce7201fe999deE12enQueen's Indian DefenseKasparov-Petrosian Variation, Modern Variationrn1qkb1r/pbp2ppp/1p2p3/3n4/3P4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 0 7f - 911edd0807484d289dE13enQueen's Indian DefenseKasparov Variationrn1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 7 e - 91ae4d40833a1f8706E13enQueen's Indian DefenseKasparov Variationrnbqk2r/p1pp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6d - 91f4c22840c9a1a59dE13enQueen's Indian DefenseKasparov Variationrnbqk2r/p1pp1pp1/1p2pn1p/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 61Z - 9y387ec3b5e17c8e8cE15enQueen's Indian DefenseFianchetto Variation, Check Variation, Intermezzo Linern1qk2r/p1ppbppp/bp2pn2/8/2PP4/1P3NP1/P2BPP1P/RN1QKB1R w KQkq - 3 7,N - 9q86da20860e3bc15c\E15enQueen's Indian DefenseFianchetto Variation, Check Variation, Modern Linern2k2r/p1ppqppp/bp2pn2/8/1bPP4/1P3NP1/P2BPP1P/RN1QKB1R w KQkq - 3 7 B - 9-7ea89afc4f6f90fdE16enQueen's Indian DefenseRiumin Variationrn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP1BPPBP/RN1QK2R w KQkq - 5 7 A -9-5bf3a6bf61147147GE16enQueen's Indian DefenseRiumin Variationrn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP1BPPBP/RN1QK2R b KQkq - 4 6  6 - 9+dde9137e02887dd7E16enQueen's Indian DefenseYates Variationrn1qk2r/1bpp1ppp/1p2pn2/p7/1bPP4/5NP1/PP1BPPBP/RN1QK2R w KQkq - 2 75 -9+6d795bfa70dad24cLE16enQueen's Indian DefenseYates Variationrnbqk2r/2pp1ppp/1p2pn2/p7/1bPP4/5NP1/PP1BPPBP/RN1QK2R b KQkq - 1 6 4 -9+d88978873d370a355E16enQueen's Indian DefenseYates Variationrnbqk2r/2pp1ppp/1p2pn2/p7/1bPP4/5NP1/PP1BPP1P/RN1QKB1R w KQkq - 0 6 3 -9+b3e03197c3b4bdaeE16enQueen's Indian DefenseYates Variationrnbqk2r/1ppp1ppp/4pn2/p7/1bPP4/5NP1/PP1BPP1P/RN1QKB1R b KQkq - 0 5* - 5W91276beba4a9e6aeE26enNimzo-Indian DefenseSämisch Variation, O'Kelly Variationrnbqk2r/p2p1ppp/1p2pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR w KQkq - 0 7  K & " `>>>>>>>+~ - 9oa67644a9baa94449IE12enQueen's Indian DefenseKasparov-Petrosian Variation, Classical Variationrn1qkb1r/pbp2ppp/1p3n2/3p4/3P4/P1N2N2/1P2PPPP/R1BQKB1R w KQkq - 0 7'- -+U4ee3ea132b163ddcE04enCatalan OpeningOpen Defense, Modern Sharp Variationr1bqkb1r/ppp2ppp/2n1pn2/8/Q1pP4/5NP1/PP2PPBP/RNB1K2R b KQkq - 3 6, -+U 9c47575ceb28cfa7E04enCatalan OpeningOpen Defense, Modern Sharp Variationr1bqkb1r/ppp2ppp/2n1pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6 " - +- b65e28bd2b2ef7e1E07enCatalan OpeningClosed Variationr1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7! - +- 85bd53e0cb861a2d-E07enCatalan OpeningClosed Variationrnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6 - +- fbc828d4b775c13d=E07enCatalan OpeningClosed Variationrnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6 3  - O 8f999943f1a2a7e6E10enBlumenfeld Countergambit Acceptedrnbqkb1r/p5pp/4pn2/1Ppp4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 7 +O af3bb576d76e9c0E10enBlumenfeld Countergambit Acceptedrnbqkb1r/p2p2pp/4pn2/1Pp5/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 6 -O fb3bad5139f42097E10enBlumenfeld Countergambit Acceptedrnbqkb1r/p2p2pp/4pn2/1pp5/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6 -O 9cf2ae198e84a9bdE10enBlumenfeld Countergambit Acceptedrnbqkb1r/p2p1ppp/4Pn2/1pp5/2P5/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5m - =3a03eaa15fb90ac366E10enBlumenfeld CountergambitSpielmann Variationrnbqkb1r/p2p1pp1/5n1p/1ppP2B1/8/5N2/PP2PPPP/RN1QKB1R w KQkq - 0 7 -=3 32c9e1736c44e523#E10enBlumenfeld CountergambitSpielmann Variationrnbqkb1r/p2p1ppp/5n2/1ppP2B1/8/5N2/PP2PPPP/RN1QKB1R b KQkq - 0 6 -=33ce37abece8af13e>E10enBlumenfeld CountergambitSpielmann Variationrnbqkb1r/p2p1ppp/5n2/1ppp2B1/2P5/5N2/PP2PPPP/RN1QKB1R w KQkq - 0 6 aa tw( ; ] ] ] ]wwwww - ;960c9f6a8dbac59dcD55enQueen's Gambit DeclinedNeo-Orthodox Variationrnbq1rk1/ppp1bpp1/4pn1p/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 7> - //431012eba1813f97D45enSemi-Slav DefenseStonewall Defensernbqkb1r/pp4pp/2p1p3/3p1p2/2PPn3/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7= -//d77f74721f091249ID45enSemi-Slav DefenseStonewall Defensernbqkb1r/pp3ppp/2p1p3/3p4/2PPn3/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 6< -//8272d5d02689d03a:D45enSemi-Slav DefenseStonewall Defensernbqkb1r/pp3ppp/2p1p3/3p4/2PPn3/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 6*H -;7bbd5737fdc8af8f9D38enQueen's Gambit DeclinedWestphalian Variationr1bqk2r/pppn1ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 4 6 FI -;716f831cdf8d5705d]D38enQueen's Gambit DeclinedWestphalian Variationr1bqk2r/pppn1ppp/4pn2/3p2B1/1bPP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 62 - /+17d52ab6061fba5d]D46enSemi-Slav DefenseRomih Variationr1bqk2r/pp1n1ppp/2p1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 4 7)b - ;K68ea00eea129b5b6D37enQueen's Gambit DeclinedKnight Defense, Alekhine Gambitr1bqkb1r/pppn1pp1/4pn1p/8/2pP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 7a -;Kbaec39dcf3175b55UD37enQueen's Gambit DeclinedKnight Defense, Alekhine Gambitr1bqkb1r/pppn1pp1/4pn1p/3p4/2PP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6` -;Ke063511f00a979ceD37enQueen's Gambit DeclinedKnight Defense, Alekhine Gambitr1bqkb1r/pppn1pp1/4pn1p/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6V - ;Udcd37724853accaeD37enQueen's Gambit DeclinedHarrwitz Attack, Two Knights Defenser1bq1rk1/pppnbppp/4pn2/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7J - ;7f089e06307927b20 D38enQueen's Gambit DeclinedWestphalian Variationr1bqk2r/pp1n1ppp/4pn2/2pp2B1/1bPP4/2N1PN2/PP3PPP/R2QKB1R w KQkq - 0 7& - /-7acc2e3292f2a35b[D46enSemi-Slav DefenseChigorin Defenser1bqk2r/pp1n1ppp/2pbpn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 4 7  - /5ca58305f8743deeeD46enSemi-Slav DefenseBogoljubov Variationr1bqk2r/pp1nbppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 4 7 - ;C94b0207f6d904a4bKD52enQueen's Gambit DeclinedCambridge Springs Variationr1b1kb1r/pp1n1ppp/2p1pn2/q2p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQkq - 1 7 yY l C||||||||||1 - ;5ef3a15e49cfd412d-D30enQueen's Gambit DeclinedCapablanca Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/4PN2/PP1N1PPP/R2QKB1R b KQkq - 0 6 -;542175756b8a2c989D30enQueen's Gambit DeclinedCapablanca Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/5N2/PP1NPPPP/R2QKB1R w KQkq - 2 6 -;571f42c0b580a2445ED30enQueen's Gambit DeclinedCapablanca Variationrnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/5N2/PP1NPPPP/R2QKB1R b KQkq - 1 5 -;5289a9469c2f78c75uD30enQueen's Gambit DeclinedCapablanca Variationrnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R w KQkq - 0 5 9  - /A d35e9cffce9aca24$D31enSemi-Slav DefenseMarshall Gambit, Main Linernbqk1nr/pp3ppp/2p1p3/8/1bPPN3/8/PP1B1PPP/R2QKBNR b KQkq - 2 6  -/Afad3c64a5cfba120 D31enSemi-Slav DefenseMarshall Gambit, Main Linernbqk1nr/pp3ppp/2p1p3/8/1bPPN3/8/PP3PPP/R1BQKBNR w KQkq - 1 6 -/A3392af4c170c6902D31enSemi-Slav DefenseMarshall Gambit, Main Linernbqkbnr/pp3ppp/2p1p3/8/2PPN3/8/PP3PPP/R1BQKBNR b KQkq - 0 5 { - /U e4bac8497ebcaa08D31enSemi-Slav DefenseMarshall Gambit, Forgotten Variationrnbqk1nr/pp3ppp/2p1p3/8/1bPP4/2N5/PP3PPP/R1BQKBNR b KQkq - 2 6p - -/8c87f2e3dccfe5d9D33enTarrasch DefenseRubinstein Systemr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6o - -/ a06149a23c183de1D33enTarrasch DefenseRubinstein Systemr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6 @!|w> a xH@@@@@@@) t - 9S 5045cc889815eb13D07enQueen's Gambit RefusedChigorin Defense, Tartakower Gambitr1bqkbnr/ppp2ppp/2n5/3pp3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 - 9Uabac9687b24ef82b+D07enQueen's Gambit RefusedChigorin Defense, Exchange Variationr1b1kbnr/ppp1pppp/2n5/3q4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4I - ;Qc7a8040dccc72680D20enQueen's Gambit AcceptedCentral Variation, Alekhine Systemrnbqkb1r/ppp1pppp/5n2/8/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 1 4C - ;# e321bb5379f6061cD21enQueen's Gambit AcceptedSlav Gambitrnbqkbnr/p1p1pppp/8/1p6/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 = - ;+b0c6aa1b02f356edD21enQueen's Gambit AcceptedGodes Variationr1bqkbnr/pppnpppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4 -9U2f8047ad6bdc85e1D07enQueen's Gambit RefusedChigorin Defense, Exchange Variationr1bqkbnr/ppp1pppp/2n5/3P4/3P4/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 - 9Cf81dfaa4e671fe2b+D07enQueen's Gambit RefusedChigorin Defense, Main Liner2qkbnr/ppp1pppp/2n5/3p4/2PP2b1/5N2/PP2PPPP/RNBQKB1R w KQkq - 3 4 -9C face3096a1f4f0c1D07enQueen's Gambit RefusedChigorin Defense, Main Liner1bqkbnr/ppp1pppp/2n5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 2 3 - 9K 70b638dc321108f7D07enQueen's Gambit RefusedChigorin Defense, Lazard Gambitr1bqkbnr/ppp2ppp/2n5/3pp3/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4jy - % 31acc8fd3f9f8b7e~D10enSlav Defensernbqkbnr/pp2pppp/2p5/8/2pP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 as - %7 69d2f985fe449dabD10enSlav DefenseWinawer Countergambitrnbqkbnr/pp3ppp/2p5/3pp3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4um - %98b7316e6a5fc7efD11enSlav DefenseModernrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4 rvg - ;Qfc425aedfa90da2b+D20enQueen's Gambit AcceptedCentral Variation, Greco Variationrnbqkbnr/p1p1pppp/8/1p6/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 42a - ;O37abe81a70acc215D20enQueen's Gambit AcceptedCentral Variation, Modern Defenser1bqkbnr/ppp1pppp/2n5/8/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 1 4[ - ;W7a37e1569e7a6c6bkD20enQueen's Gambit AcceptedCentral Variation, Rubinstein Defensernbqkbnr/pp2pppp/8/2p5/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4U - ;U163e38b2f2d89f20 D20enQueen's Gambit AcceptedCentral Variation, McDonnell Defensernbqkbnr/ppp2ppp/8/4p3/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4O + ;-8295661dfb54ac8D20enQueen's Gambit AcceptedSchwartz Defensernbqkbnr/ppp1p1pp/8/5p2/2pPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4 JJS)g=    JJJJJJJJJ} -;;5068c8cafa6f5fadD16enQueen's Gambit DeclinedSlav, Smyslov Variationr1bqkb1r/pp2pppp/n1p2n2/8/P1pPP3/2N2N2/1P3PPP/R1BQKB1R b KQkq - 0 6t - %U6ec3232b22e813f1D14enSlav DefenseExchange Variation, Symmetrical Liner1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 6 - %Ub597c5aabb88f992D14enSlav DefenseExchange Variation, Symmetrical Liner1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 6 - %U 1e7a1d48aa195c91D14enSlav DefenseExchange Variation, Symmetrical Linernbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 5 - %U c51ef1bec2ff3dacD14enSlav DefenseExchange Variation, Symmetrical Linernbqkb1r/pp2pppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 5  - %U9ef0c54b6f057c3a:D14enSlav DefenseExchange Variation, Symmetrical Linernbqkbnr/pp2pppp/8/3p4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4  - %U6567dde9ade7fee3D14enSlav DefenseExchange Variation, Symmetrical Linernbqkbnr/pp2pppp/8/3p4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 45~ - ;;52bb02f8bdea5147GD16enQueen's Gambit DeclinedSlav, Smyslov Variationr2qkb1r/pp2pppp/n1p2n2/8/P1pPP1b1/2N2N2/1P3PPP/R1BQKB1R w KQkq - 1 7r - %Uf2b92a62635a82b2D17enSlav DefenseCzech Variation, Wiesbaden Variationrn1qkb1r/pp3ppp/2p1pn2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R w KQkq - 0 7 ! -M b47fc6023137f96ajC80enRuy LopezOpen Variation, Skipworth Gambitr1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQR1K1 b kq - 1 6 - W24be6dd52f33bb85C87enRuy LopezClosed Variations, Averbakh Variationr1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 - W1d04fbb4fd4bf2e8C87enRuy LopezClosed Variations, Averbakh Variationr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6 - %Uedda4aa5950d1a7c|D14enSlav DefenseExchange Variation, Symmetrical Liner2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 6 7 = `g  Th H 9 9fffffffffG0f - % 48df63332715a0e8C57enItalian GameTwo Knights Defense, Traxler Variation, Trencianske-Teplice Gambitr1bq3r/ppppkBpp/2n2n2/2b1p1N1/3PP3/8/PPP2PPP/RNBQK2R b KQ - 0 60e -% 8dea4c9936dc8daaC57enItalian GameTwo Knights Defense, Traxler Variation, Trencianske-Teplice Gambitr1bq3r/ppppkBpp/2n2n2/2b1p1N1/4P3/8/PPPP1PPP/RNBQK2R w KQ - 1 6+P - %4f44077f94e107f4C58enItalian GameTwo Knights Defense, Polerio Defense, Kieseritzky Variationr1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/3P4/PPP2PPP/RNBQK2R b KQkq - 0 6 $ - S 9e5bd43e769ee52b+C67enRuy LopezBerlin Defense, Minckwitz Variationr1bqk2r/ppppbppp/2n5/1B2P3/4n3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6 - ]677d42dd16da72f7C68enRuy LopezExchange Variation, Romanovsky Variationr1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/2NP1N2/PPP2PPP/R1BQK2R b KQkq - 0 6 -]c9d98108524ac923#C68enRuy LopezExchange Variation, Romanovsky Variationr1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 6 3q - %[5414e11a976477ccC57enItalian GameTwo Knights Defense, Fried Liver Attackr1bqkb1r/ppp2Npp/2n5/3np3/2B5/8/PPPP1PPP/RNBQK2R b KQkq - 0 6: - ] 8371af7b4c41bcd2C67enRuy LopezOpen Berlin Defense, Showalter Variationr1bqkb1r/pppp1ppp/2nn4/4p3/B2P4/5N2/PPP2PPP/RNBQ1RK1 b kq - 2 6  { -%O 2b199412c2a80376vC57enItalian GameTwo Knights Defense, Lolli Attackr1bqkb1r/ppp2ppp/2n5/3np1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 0 6/ - [ 2eef1e7ab0027288C67enRuy LopezOpen Berlin Defense, l'Hermet Variationr1bqkb1r/pppp1ppp/2nn4/1B2P3/8/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6! - { 5d29f2190690eea6C70enRuy LopezMorphy Defense, Norwegian Variation, Nightingale Gambitr1bqkbnr/2pp1Bpp/p7/np2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 6 NC -Uaeca299aa91ed8daC62enRuy LopezSteinitz Defense, Nimzowitsch Attackr2qkbnr/pppb1ppp/2np4/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 2 5<#[ - %{ 495b878732817c0c C58enItalian GameTwo Knights Defense, Polerio Defense, Bishop Check Liner1bqkb1r/ppp2ppp/5n2/nB1Pp1N1/8/8/PPPP1PPP/RNBQK2R b KQkq - 2 6 + [ 8c24cc14dccc3f6C73enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6E - Ua40b2789a2b24977wC62enRuy LopezSteinitz Defense, Nimzowitsch Attackr2qkb1r/pppb1ppp/2Bp1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 0 6D -Uf5241d6f04e4994cLC62enRuy LopezSteinitz Defense, Nimzowitsch Attackr2qkb1r/pppb1ppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQK2R w KQkq - 3 6 |r M ] #s /}MMMMM] -[c0737610a8dad473sC75enRuy LopezMorphy Defense, Modern Steinitz Defenser2qkbnr/1ppb1ppp/p1np4/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6,R - 29c7254bd35546388C76enRuy LopezMorphy Defense, Modern Steinitz Defense, Fianchetto Variationr2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7,Q - cb06db19090f9609 C76enRuy LopezMorphy Defense, Modern Steinitz Defense, Fianchetto Variationr1bqkbnr/1pp2p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6,P + e33f4b318c6bb4bKC76enRuy LopezMorphy Defense, Modern Steinitz Defense, Fianchetto Variationr1bqkbnr/1pp2p1p/p1np2p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6-O - 378962d2cabef226&C76enRuy LopezMorphy Defense, Modern Steinitz Defense, Fianchetto Variationr1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 5-N + 68a2c913ec88b0c C76enRuy LopezMorphy Defense, Modern Steinitz Defense, Fianchetto Variationr1bqkbnr/1ppp1p1p/p1n3p1/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5 h u -O 6a4ef35b5396408dC69enRuy LopezExchange Variation, Alapin Gambitr2qkbnr/1pp2ppp/p1p5/4p3/4P1b1/5N1P/PPPP1PP1/RNBQ1RK1 b kq - 0 6 t -O 82bd2ee59135897fC69enRuy LopezExchange Variation, Alapin Gambitr2qkbnr/1pp2ppp/p1p5/4p3/4P1b1/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 6 j - [ c4974a887727d489C73enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/2p3pp/p1pp1p2/4p3/3PP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 7^ - [fe3ccaad13535fceC75enRuy LopezMorphy Defense, Modern Steinitz Defenser2qkb1r/1ppbnppp/p1np4/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7F + Wd54b90dc4170e29)C78enRuy LopezMorphy Defense, Arkhangelsk Variationr2qkb1r/1bpp1ppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1 w kq - 2 7E -Wbdc4f189b645a1b2C78enRuy LopezMorphy Defense, Arkhangelsk Variationr1bqkb1r/2pp1ppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1 b kq - 1 6D -Wed78ecc52be54850PC78enRuy LopezMorphy Defense, Arkhangelsk Variationr1bqkb1r/2pp1ppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6X}: - )847e67e8643de8dfC78enRuy LopezMorphy Defenser1bqkb1r/2p2ppp/p1np1n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQ1RK1 w kq - 0 7. - K 6e80eda1632d6b29)C80enRuy LopezOpen Variations, Riga Variationr1bqkb1r/1ppp1ppp/p1n5/8/B2pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 7 " - M 3115e416ade3b74cLC80enRuy LopezOpen Variation, Skipworth Gambitr1bqkb1r/1pp2ppp/p1n5/3pp3/B3n3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7  ^i  ~ \\\\\\ -U 94c0a45e30ef09dfC67enRuy LopezBerlin Defense, Trifunovic Variationr1bqk2r/ppppbppp/2n5/1B2p3/3Pn3/5N2/PPP1QPPP/RNB2RK1 b kq - 2 62 -W70c67ef9baf5c085C66enRuy LopezBerlin Defense, Closed Wolf Variationr2qkb1r/pppb1ppp/2np1n2/1B2p3/3PP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 6, - Q9f9d15b4b2bceecdC66enRuy LopezBerlin Defense, Hedgehog Variationr2qk2r/pppbbppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQ1RK1 w kq - 3 7 - U 11aa864aac3b47f9C67enRuy LopezBerlin Defense, Trifunovic Variationr1bqk2r/ppp1bppp/2n5/1B1pp3/3Pn3/5N2/PPP1QPPP/RNB2RK1 w kq - 0 7 v - O77106d2054b6e1faC69enRuy LopezExchange Variation, Alapin Gambitr2qkbnr/1pp2pp1/p1p5/4p2p/4P1b1/5N1P/PPPP1PP1/RNBQ1RK1 w kq - 0 7 & - U9a296ff4031cbc22"C64enRuy LopezClassical Defense, Benelux Variationr1bq1rk1/pppp1ppp/1bn2n2/1B2p3/3PP3/2P2N2/PP3PPP/RNBQ1RK1 w - - 1 7% -U7ad247be7dcc55377C64enRuy LopezClassical Defense, Benelux Variationr1bq1rk1/pppp1ppp/2n2n2/1Bb1p3/3PP3/2P2N2/PP3PPP/RNBQ1RK1 b - - 0 6$ -Ubfe768146c057875uC64enRuy LopezClassical Defense, Benelux Variationr1bq1rk1/pppp1ppp/2n2n2/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 w - - 1 6+ - W102f6cd9bc6c5649IC66enRuy LopezBerlin Defense, Closed Wolf Variationr2qkb1r/pppb1ppp/2np1n2/1B6/3pP3/2N2N2/PPP2PPP/R1BQ1RK1 w kq - 0 7 -W8b51665b7817425c\C66enRuy LopezBerlin Defense, Closed Wolf Variationr2qkb1r/pppb1ppp/2np1n2/1B2p3/3PP3/2N2N2/PPP2PPP/R1BQ1RK1 b kq - 2 6  nH K . "~fl -O818c006aa88aabedC61enRuy LopezBird Variation, Paulsen Variationr1bqkbnr/pppp1ppp/8/1B6/3pP3/8/PPPP1PPP/RNBQK2R w KQkq - 0 5 k -O 79cc23c2f9a2bda7C61enRuy LopezBird Variation, Paulsen Variationr1bqkbnr/pppp1ppp/8/1B2p3/3NP3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4Yd - Q58f6ed80c0f143d7C63enRuy LopezSchliemann Defense, Kostic Defenser1bqk1nr/ppppb1pp/2n5/1B2p3/4N3/5N2/PPPP1PPP/R1BQK2R w KQkq - 1 6 c -Q 4c3a9e6f0a5aef46FC63enRuy LopezSchliemann Defense, Kostic Defenser1bqkbnr/pppp2pp/2n5/1B2p3/4N3/5N2/PPPP1PPP/R1BQK2R b KQkq - 0 5b -Qe6f8a09c4aac7ed1C63enRuy LopezSchliemann Defense, Kostic Defenser1bqkbnr/pppp2pp/2n5/1B2p3/4p3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 5 'Z - ]17d4aa9aa7a0aed0C63enRuy LopezSchliemann Defense, Tartakower Variationr1bqkb1r/pppp2pp/2n2n2/1B2p3/4N3/5N2/PPPP1PPP/R1BQK2R w KQkq - 1 6 P - G9688b0c40225e9c3C65enRuy LopezBerlin Defense, Mortimer Trapr1bqkb1r/pp1pnppp/2p2n2/1B2N3/4P3/3P4/PPP2PPP/RNBQK2R w KQkq - 0 6O +G 4f25d2b75e53a78xC65enRuy LopezBerlin Defense, Mortimer Trapr1bqkb1r/ppppnppp/5n2/1B2N3/4P3/3P4/PPP2PPP/RNBQK2R b KQkq - 0 5 F - _6b40830dcd631941AC66enRuy LopezClosed Berlin Defense, Chigorin Variationr1bqkb1r/pppn1ppp/2np4/1B2p3/3PP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 6E -_920780ab60af10b4C66enRuy LopezClosed Berlin Defense, Chigorin Variationr1bqkb1r/ppp2ppp/2np1n2/1B2p3/3PP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 56< - Sc4fda96053200616C67enRuy LopezBerlin Defense, Rosenthal Variationr1bqkb1r/1ppp1ppp/p1n5/1B2p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6; -S 160a5893b400fecaC67enRuy LopezBerlin Defense, Rosenthal Variationr1bqkb1r/pppp1ppp/2n5/1B2p3/3Pn3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 5 2 - Q b272e138b837c5f8C67enRuy LopezBerlin Defense, l'Hermet Variationr1bqkb1r/pppp1ppp/2nn4/1B2p3/3P4/5N2/PPP2PPP/RNBQ1RK1 w kq - 1 6  2v  f Mc5f - /15b94103464cd10bdC48enFour Knights GameMarshall Variationr1bq1rk1/pppp1ppp/5n2/1Bb1N3/3nP3/2N5/PPPP1PPP/R1BQ1RK1 w - - 3 7e -/1513cfd83b194f956VC48enFour Knights GameMarshall Variationr1bqk2r/pppp1ppp/5n2/1Bb1N3/3nP3/2N5/PPPP1PPP/R1BQ1RK1 b kq - 2 6d -/12f4986b7cd672246FC48enFour Knights GameMarshall Variationr1bqk2r/pppp1ppp/5n2/1Bb1N3/3nP3/2N5/PPPP1PPP/R1BQK2R w KQkq - 1 6 j| -%o fb5d4e04b1bf5fc0C47enFour KnightsScotch Variation, Belgrade Gambit, Modern Defenser1bqkb1r/pppp1ppp/2n5/3N4/3pn3/5N2/PPP2PPP/R1BQKB1R w KQkq - 0 6+r - /{14e22543ec48b287C48enFour Knights GameSpanish Variation, Classical Variation, Marshall Gambitr1bq1rk1/pppp1ppp/5n2/2b1N3/B2nP3/2N5/PPPP1PPP/R1BQK2R w KQ - 1 7+q -/{1e4ac8f439115b6clC48enFour Knights GameSpanish Variation, Classical Variation, Marshall Gambitr1bqk2r/pppp1ppp/5n2/2b1N3/B2nP3/2N5/PPPP1PPP/R1BQK2R b KQkq - 0 6-p -/{a0093c0f9d0ffe5aZC48enFour Knights GameSpanish Variation, Classical Variation, Marshall Gambitr1bqk2r/pppp1ppp/5n2/2b1p3/B2nP3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 8 6,o +/{d147854573d14d9C48enFour Knights GameSpanish Variation, Classical Variation, Marshall Gambitr1bqkb1r/pppp1ppp/5n2/4p3/B2nP3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 7 5Z - //d96b1da0a67a3e55UC49enFour Knights GameSpanish Variationr1bq1rk1/pppp1ppp/2n2n2/1B2p3/4P3/2bP1N2/PPP2PPP/R1BQ1RK1 w - - 0 7 mM -#_eee545932d916b81C45enScotch GameClassical Variation, Millennium Variationr1b1k1nr/pppp1ppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R b KQkq - 0 6!~ - %of934a7bf4173299aC47enFour KnightsScotch Variation, Belgrade Gambit, Modern Defenser1bqkb1r/pppp2pp/2n5/3N1p2/3pn3/5N2/PPP1QPPP/R1B1KB1R w KQkq - 0 7} -%o6d5bc126fffb0444DC47enFour KnightsScotch Variation, Belgrade Gambit, Modern Defenser1bqkb1r/pppp1ppp/2n5/3N4/3pn3/5N2/PPP1QPPP/R1B1KB1R b KQkq - 1 6N - /]c1e8f0c769ba25322C49enFour Knights GameSpanish Variation, Symmetrical Variationr1bq1rk1/ppp2ppp/2np1n2/1B2p3/1b2P3/2NP1N2/PPP2PPP/R1BQ1RK1 w - - 0 7B - %[ 27bcd3eeeb04db70pC50enItalian GameHungarian Defense, Tartakower Variationr1bqk2r/ppppbppp/2n5/4P3/2Bpn3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7 - #_6c97800fe58505eeC45enScotch GameClassical Variation, Millennium Variationr1b1k1nr/pppp1ppp/2n3q1/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 1 7 x    x p h `P uUM x Y R K D = 6 / ( !    `0(6}- ( } v o h a Z S L E > 7 0 ) "    z&]5 0 s l e ^ W P I B ; 4 - &     H@m z s l e ^ W P I B ; 4 - &     |ung`YRKD<4,$  zsle^WPIB;4-%8 {tmf_XQJC<5-% h% zsle^VNF>X= 8 zs/E zsle^WPIB;4-&  } u m e ] U N G @pږmomBstpnkqt<umnDotn|oru]m5movpmnnsp>p1mu nt.vpcvlvav]AvKvBrv@v<v3v0av-v*Bv)v&v&Fv&*vkvvvvhv?vr|mSo8 vyn$uuuu3u~u|ou|uyur'uounuluh!uguauY@uNDuNuF{u?u>0u8$u3u0u)u"u}uxu!t~ttt9tWt~t|3t{:trTtrtoatm{tktitg+tcnt`Yt_t\tXtWtWdtO`tFtCMt=t2t$t$t$>tottttt tssXsYscs}~sysuGslskMsjsish^s_sYsXEsVsTsOsFsESsAsAs=os;Js7s1s0s0s&s&Bs%~s"Ts s/s srr;r<r8rrtr}r{ryrwrv|rmWrb r_r^Yr[rVrM6rFrCr<r1@r/r,r,jr%qr rr r @r Orrrrqqqqzqw6qtqhqbqaq\iqXqRqQq<q:q5Tq3qq@q q*qpp/pOp$pppp|p| pwpvipqpqpkp_p^1p]p\ApMpCp;p8p52p2p+\p(p#p_pooooono&oHoo}o{ozouopPooon;olOohohvododUo^oOzoLoHoBo=o=:o4<o,mo,So!ooMooooo ooooonn nRnnin~n}nznznw+nhnenenc/nOnOnMSnFqn'4n%nEn nnnmmmmHmDm mmm~m}m{ymqmh<mfm`m_mZmR'mNmMmAm?Nm<m*m)m)aewnouxxxw w wwOw:ww}wwo&tpmnnsvpxpkmTuCnt rMm$o tnouvmmjoNpGmCnnsvppmurwhwwww>w5wwSw}w}w{wz"wo7wkwdqwbGwXwTwTpwFw@w<^w:w0pw)cw("w$xwwwww Bw Bw wwvvMvvv*vvMv#vZ n}vohaZSLE>70)" u%}vohaZSLE>70)"  iPH@E  z s l e ^ W P I B ; 4 - &     (e z s l e ^ W P I B ; 4 - &     8 } v o h a Z S L E > 7 0 ) !    y vM-n y r k d ] V O H A : 3 , %     }m]5 } v o h a Z S L E > 7 0 ) "    yqiaYQ~U=IA91)! vmdX\TLD<4,$ q{ri`WNE<3*!|||W&}z}xw}PyzEyD0}xVo%j!y[~~~}z|Gza{yyyyXu|L{yiyX}~x| }y|}{zR}.y}U~RxL|G}<6y,|(}z}hxH}!zyy|R{#y}~x{|v}ke%=-jidca/_E[YVRxN&MrKDBB9 ,+Z*)" TL~d|K|zw@jgg-ecb)]OY WXNN540(X##5 w_~~}.urnfZSSPS,N.MF|?:71Y~~~~}p~|~t~sX~n~l~j~^~Z~W.~V~O~I0~:~7*~1~{~~~~~}}}}}T}'}/}~}~}~Q}~}}}}@}vc}m}l}e}bH}ap}^i}Y}Y}X}Xi}R\}N}G}G}@}0}+})}$<}v}@}}} z} }}}}||A|)| |||.|"|~|~|x|vU|r |qk|i|i}|h|f[|e|e{|_1|XN|U|H|:|7|4e|4W|3|-|+|!|| | |>|u{+{{{z{z>{kj{h {a8{_{]({Y{V{D{A{0U{){)`{%{${#{ { { D{ { v{{zzOzzz~(z}z}lzx.zv;zteztMzk5zjzizhazfZzd9zbz_zY.zWzTzO zIzFzF[zB\z? z9z-Wz"(zizzpzzYzyyNyyby3yy.y?y.y~y}y{"yy~yuyu8yt4ysvyrmynygWyfyfy[yU}yTyNyNkyH?y)yy-yyyyy y yxxxx)x~x}x}xyxvxixi,xh/xfxbxb xa?x]xJ4xIxFx@ x:x8x0x%rx#x"Qx!x!xxx#x %x6x1"*{y  . 0(JJJJJ . - %S 34826bc17e14a62e.C43enRussian GameModern Attack, Bardeleben Variationr1bqkb1r/pppp1ppp/2n5/2n1P3/3N4/8/PPP1QPPP/RNB1KB1R w KQkq - 1 7- -%S 9f6fb3236f85032d-C43enRussian GameModern Attack, Bardeleben Variationrnbqkb1r/pppp1ppp/8/2n1P3/3N4/8/PPP1QPPP/RNB1KB1R b KQkq - 0 6, -%S f8fbee7e7eb49103C43enRussian GameModern Attack, Bardeleben Variationrnbqkb1r/pppp1ppp/8/2n1P3/3p4/5N2/PPP1QPPP/RNB1KB1R w KQkq - 3 6[" - #Uef419ec63d63e11fC44enScotch GameGöring Gambit, Bardeleben Variationr1bqk2r/pppp1ppp/2n2n2/8/1bB1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 1 7! -#U2600f7c07694293d=C44enScotch GameGöring Gambit, Bardeleben Variationr1bqkb1r/pppp1ppp/2n2n2/8/2B1P3/2N2N2/PP3PPP/R1BQK2R b KQkq - 0 6 -#Ua9de549d346946efC44enScotch GameGöring Gambit, Bardeleben Variationr1bqkb1r/pppp1ppp/2n2n2/8/2B1P3/2p2N2/PP3PPP/RNBQK2R w KQkq - 2 6d - #cdbeeadaa193eebfdC44enScotch GameScotch Gambit, Cochrane-Anderssen Variationr2qk1nr/ppp2ppp/2np4/2b5/2BpP1b1/2P2N2/PP3PPP/RNBQ1RK1 w kq - 1 7 -#c d93d67985ebbe517C44enScotch GameScotch Gambit, Cochrane-Anderssen Variationr1bqk1nr/ppp2ppp/2np4/2b5/2BpP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 6 -#c afe79f008ecbea91C44enScotch GameScotch Gambit, Cochrane-Anderssen Variationr1bqk1nr/ppp2ppp/2np4/2b5/2BpP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6 -#c 965d09615cb3a3fcC44enScotch GameScotch Gambit, Cochrane-Anderssen Variationr1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 3 5 X l XXXXXXXXXXXXXXXXXXXXX}[ -)-92cd72ee5617b3a5C40enLatvian GambitCorkscrew Gambitrnbqkb1r/pppp1Npp/5n2/8/2B1p3/8/PPPP1PPP/RNBQK2R b KQkq - 1 5Z~Y -)- c1516d53993dc745EC40enLatvian GambitCorkscrew Gambitrnbqkb1r/pppp2pp/5n2/4Np2/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 2 4~X -)- a2e2d97bb17e11e3C40enLatvian GambitCorkscrew Gambitrnbqkb1r/pppp2pp/5n2/4Np2/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4R - -C27c866b843dc7a03C41enPhilidor DefenseLion Variation, Lion's Clawr1bqk2r/pppnbpp1/3p1n1p/4p3/2BPP3/2N2N2/PPP2PPP/R1BQ1RK1 w kq - 2 7Q --C330415578977d692C41enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pppn1pp1/3p1n1p/4p3/2BPP3/2N2N2/PPP2PPP/R1BQ1RK1 b kq - 1 6P --C4d716e63f5840d82C41enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pppn1pp1/3p1n1p/4p3/2BPP3/2N2N2/PPP2PPP/R1BQK2R w KQkq - 0 6 nF - %c 106b7c2058877f45EC42enRussian GameClassical Attack, Mason-Showalter Variationr1bqkb1r/ppp2ppp/2n5/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 2 73L: - %U 1fdec940960c0b62bC42enRussian GameClassical Attack, Marshall Variationrnbqk2r/ppp2ppp/3b4/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 2 7E -%c bb86a4c24916da46FC42enRussian GameClassical Attack, Mason-Showalter Variationrnbqkb1r/ppp2ppp/8/3p4/3Pn3/3B1N2/PPP2PPP/RNBQK2R b KQkq - 1 6D -%cee8b0560709618355C42enRussian GameClassical Attack, Mason-Showalter Variationrnbqkb1r/ppp2ppp/8/3p4/3Pn3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 6  < 0 Gt<<<<<<UUUUUUUUUU -  14ed72effc5f751aC37enKing's Gambit Accepted, Salvio Gambit, Viennese Variationr1b1kbnr/pppp1p1p/2n5/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R w kq - 4 7 - bf00aa0dedced019C37enKing's Gambit Accepted, Salvio Gambit, Viennese Variationrnb1kbnr/pppp1p1p/8/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R b kq - 3 6 + 3956b33138fa60b C37enKing's Gambit Accepted, Salvio Gambit, Viennese Variationrnb1kbnr/pppp1p1p/8/4N3/2B1Pppq/8/PPPP2PP/RNBQK2R w KQkq - 2 6  - y cff2031795fd57b8C37enKing's Gambit Accepted, Salvio Gambit, Cochrane Gambitrnb1kbnr/pppp1p1p/8/4N3/2B1P1pq/5p2/PPPP2PP/RNBQ1K1R w kq - 0 7 -  e4ee9ef84034918fC37enKing's Gambit Accepted, Salvio Gambit, Santa Maria Defensernb1kb1r/pppp1p1p/5n2/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R w kq - 4 7v -  3e8c35e9574cbd60`C37enKing's Gambit Accepted, Salvio Gambit, Silberschmidt Defensernb1kb1r/pppp1p1p/7n/4N3/2B1Pppq/8/PPPP2PP/RNBQ1K1R w kq - 4 7%j + 9o 6dd0cef4e508e23#C39enKing's Gambit AcceptedKieseritzky, Berlin Defense, de Riviere Variationrnbqkb1r/ppp2p1p/5n2/3p4/4PpNP/8/PPPP2P1/RNBQKB1R w KQkq - 0 7%i -9o83b72efbd284c005C39enKing's Gambit AcceptedKieseritzky, Berlin Defense, de Riviere Variationrnbqkb1r/pppp1p1p/5n2/8/4PpNP/8/PPPP2P1/RNBQKB1R b KQkq - 0 6~^ - )- a6cb83f34b894dd5C40enLatvian GambitCorkscrew Gambitrnb1kb1N/ppp1q1pp/5n2/3p4/2B1p3/8/PPPP1PPP/RNBQK2R w KQq - 0 7|] -)-23a1a1e7d75d03f3C40enLatvian GambitCorkscrew Gambitrnb1kb1N/ppppq1pp/5n2/8/2B1p3/8/PPPP1PPP/RNBQK2R b KQq - 0 6|\ +)-932ad9e972b1dcfC40enLatvian GambitCorkscrew Gambitrnb1kb1r/ppppqNpp/5n2/8/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 2 6 h A  lO S -9ed464b6d17fd4c3b1C33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnb1kbnr/pppp2pp/8/5p2/2B1Pp1q/8/PPPPQ1PP/RNBK2NR b kq - 3 5#R -9e 83052dedc513abffC33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnb1kbnr/pppp2pp/8/5p2/2B1Pp1q/8/PPPPQ1PP/RNB1K1NR w KQkq - 2 5 Q - 9e 7d02891a9e252301C33enKing's Gambit AcceptedLopez-Gianutio Countergambit, Hein Variationrnbqkbnr/pppp2pp/8/5p2/2B1Pp2/8/PPPPQ1PP/RNB1K1NR b KQkq - 1 4 J - U 662b2fb896a65402C34enKing's Gambit Accepted, Greco Gambitrnbqk1nr/ppp2pb1/3p3p/6p1/2BPPp1P/5N2/PPP3P1/RNBQK2R w KQkq - 1 7I -U d697120e6de19fa8C34enKing's Gambit Accepted, Greco Gambitrnbqkbnr/ppp2p2/3p3p/6p1/2BPPp1P/5N2/PPP3P1/RNBQK2R b KQkq - 0 6H -U 4a348e27c6dee6d6C34enKing's Gambit Accepted, Greco Gambitrnbqkbnr/ppp2p2/3p3p/6p1/2BPPp2/5N2/PPP3PP/RNBQK2R w KQkq - 0 6G -U ca777efa526a195c\C34enKing's Gambit Accepted, Greco Gambitrnbqkbnr/ppp2pp1/3p3p/8/2BPPp2/5N2/PPP3PP/RNBQK2R b KQkq - 0 5F +U f42515043a3341eC34enKing's Gambit Accepted, Greco Gambitrnbqkbnr/ppp2pp1/3p3p/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 0 5E -U 9db51a36d4777d0b C34enKing's Gambit Accepted, Greco Gambitrnbqkbnr/ppp2ppp/3p4/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R b KQkq - 1 4 k > - 9I822c972d588f7a5b[C37enKing's Gambit AcceptedMuzio Gambit, Holloway Defenser1bqkbnr/pppp1p1p/2n5/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1 w kq - 1 7= -9I29c14fcf491edf58XC37enKing's Gambit AcceptedMuzio Gambit, Holloway Defensernbqkbnr/pppp1p1p/8/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1 b kq - 0 6< -9I60c2bbe0f073f18fC37enKing's Gambit AcceptedMuzio Gambit, Holloway Defensernbqkbnr/pppp1p1p/8/8/2B1Pp2/5p2/PPPP2PP/RNBQ1RK1 w kq - 0 6_2 -  b23e90bf882271322C37enKing's Gambit Accepted, Muzio Gambit Accepted, From's Defensernb1kbnr/ppppqp1p/8/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1 w kq - 1 7& - w 2ef9d2082cf79cb5C37enKing's Gambit Accepted, Muzio Gambit, Sarratt Defensernb1kbnr/pppp1p1p/5q2/8/2B1Pp2/5Q2/PPPP2PP/RNB2RK1 w kq - 1 7 {{;  i 0 oZ>uu{{{{TT' - -I 33e7bcae4a191314C24enBishop's OpeningUrusov Gambit, Panov Variationrnb1k2r/ppp1qppp/5n2/3P4/1bBp4/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7kg* - 33 5242fcd2a6078ce4C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqk2r/pppp1ppp/5n2/2b5/3nP3/5N2/PP2QPPP/RNB1KB1R w KQkq - 0 7 ) -339c1f507e5f65b7f8C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqk2r/pppp1ppp/2n2n2/2b5/3PP3/5N2/PP2QPPP/RNB1KB1R b KQkq - 0 6 ( -3330a985323bcdbbdeC20enKing's Pawn OpeningVan Hooydoon Gambitr1bqk2r/pppp1ppp/2n2n2/2b5/3pP3/2P2N2/PP2QPPP/RNB1KB1R w KQkq - 0 6 ' -33abd78fb0ffb6afcbC20enKing's Pawn OpeningVan Hooydoon Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/3PP3/2P2N2/PP2QPPP/RNB1KB1R b KQkq - 0 5 & -336ee2a01aee7f8289C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/4P3/2P2N2/PP1PQPPP/RNB1KB1R w KQkq - 3 5 % -33c3ffe441244d680a C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2P2N2/PP1PQPPP/RNB1KB1R b KQkq - 2 4 $ -33189b08b74cab09377C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2P5/PP1PQPPP/RNB1KBNR w KQkq - 1 4# -33 43753c42e15148a1C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqkbnr/pppp1ppp/2n5/4p3/4P3/2P5/PP1PQPPP/RNB1KBNR b KQkq - 0 3" -33 35afc4da31214727'C20enKing's Pawn OpeningVan Hooydoon Gambitr1bqkbnr/pppp1ppp/2n5/4p3/4P3/8/PPPPQPPP/RNB1KBNR w KQkq - 2 3! -339e421c3820b0e224$C20enKing's Pawn OpeningVan Hooydoon Gambitrnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPPQPPP/RNB1KBNR b KQkq - 1 2 - -S19e962b1dff509f6C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/ppp4p/2n2ppn/3pp3/2B1P3/3P1Q2/PPP1NPPP/RNB1K2R w KQkq - 0 7 --S9c8340a5432147d0C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp3p/2n2ppn/4p3/2B1P3/3P1Q2/PPP1NPPP/RNB1K2R b KQkq - 1 6 --S8827ab6a6b0a4a2e.C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp3p/2n2ppn/4p3/2B1P3/3P1Q2/PPP2PPP/RNB1K1NR w KQkq - 0 6 --S4472ad2351e15d51QC20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp1p1p/2n3pn/4p3/2B1P3/3P1Q2/PPP2PPP/RNB1K1NR b KQkq - 1 5 --Sa68b139cfed6a87fC20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp1p1p/2n3pn/4p2Q/2B1P3/3P4/PPP2PPP/RNB1K1NR w KQkq - 0 5 --S4f3f40c785593a344C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp1ppp/2n4n/4p2Q/2B1P3/3P4/PPP2PPP/RNB1K1NR b KQkq - 0 4 --Se19b8312c1c981e0C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkb1r/pppp1ppp/2n4n/4p2Q/2B1P3/8/PPPP1PPP/RNB1K1NR w KQkq - 4 4 --S60171cf67b4bec99C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkbnr/pppp1ppp/2n5/4p2Q/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq - 3 3 +-S 3a4a8de53083a3f?C20enKing's Pawn GameWayward Queen Attack, Mellon Gambitr1bqkbnr/pppp1ppp/2n5/4p2Q/4P3/8/PPPP1PPP/RNB1KBNR w KQkq - 2 3  Om  ~ PAOOOOOOOOOOKg<t + #+df48a0ab3b2b8377C44enScotch GameNapoleon Gambitr1bqkbnr/pppp1ppp/8/8/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 1 5v -#+6e473e229bf16e91C44enScotch GameNapoleon Gambitr1bqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5x -#+96071d8acad978dbC44enScotch GameNapoleon Gambitr1bqkbnr/pppp1ppp/8/4p3/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 - #W f230606899930779yC44enScotch GameGöring Gambit, Double Pawn Sacrificer1bqkbnr/pppp1ppp/2n5/8/2B1P3/2p2N2/PP3PPP/RNBQK2R b KQkq - 1 5 -#W 9183d440b1d0d1dfC44enScotch GameGöring Gambit, Double Pawn Sacrificer1bqkbnr/pppp1ppp/2n5/8/4P3/2p2N2/PP3PPP/RNBQKB1R w KQkq - 0 5 * - #M befa9380898c8048HC44enScotch GameScotch Gambit, Sarratt Variationr1bqk1nr/pppp1ppp/2n5/2b3N1/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 3 5 T! - #M7fa214064396f59dC44enScotch GameScotch Gambit, Advance Variationr1bqkb1r/pppp1ppp/2n2n2/4P3/2Bp4/5N2/PPP2PPP/RNBQK2R b KQkq - 0 5 { - -K220349a1f9e52b69iC44enKing's Pawn GameTayler Opening, Inverted Hanhamr1bqkb1r/ppp2ppp/2n2n2/3pp3/4P3/3P1N2/PPPNBPPP/R1BQK2R b KQkq - 1 5z --K7b6df1c363188359YC44enKing's Pawn GameTayler Opening, Inverted Hanhamr1bqkb1r/ppp2ppp/2n2n2/3pp3/4P3/3P1N2/PPP1BPPP/RNBQK2R w KQkq - 0 5y --Kfe07d3d7ffcccd7fC44enKing's Pawn GameTayler Opening, Inverted Hanhamr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/3P1N2/PPP1BPPP/RNBQK2R b KQkq - 0 4*r - -G6f9123d76af06998C44enKing's Pawn GameTayler Opening, Basman Gambitr1bqkb1r/pppp1ppp/2n2n2/4P3/3p4/5N2/PPP1BPPP/RNBQK2R b KQkq - 0 5q +-G ee8352a6eee4ffcC44enKing's Pawn GameTayler Opening, Basman Gambitr1bqkb1r/pppp1ppp/2n2n2/8/3pP3/5N2/PPP1BPPP/RNBQK2R w KQkq - 0 5 ti ^ }0&Oqe -)o 16a7195c1f97f2b0C15enFrench DefenseWinawer Variation, Alekhine Gambit, Kan Variationrnbqk1nr/ppp2ppp/4p3/8/3Pp3/P1N5/1PP2PPP/R1BQKB1R b KQkq - 0 6\. - )c109114d098daa885C13enFrench DefenseAlekhine-Chatard Attack, Maróczy Variationrnbqk2r/1ppnbppp/p3p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR w KQkq - 0 7" - )_2417348d80bd5b24$C13enFrench DefenseAlekhine-Chatard Attack, Breyer Variationrnbqk2r/pp1nbppp/4p3/2ppP1B1/3P3P/2N5/PPP2PP1/R2QKBNR w KQkq - 0 7 - )e c8ce0894aaa3b9b2C13enFrench DefenseAlekhine-Chatard Attack, Spielmann Variationrnbq1rk1/pppnbppp/4p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR w KQ - 1 7 + )ee33e36a45114726&C13enFrench DefenseAlekhine-Chatard Attack, Teichmann Variationrnbqk2r/pppnb1pp/4pp2/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR w KQkq - 0 7~ - )]da81cd39b4e79390C13enFrench DefenseClassical Variation, Frankfurt Variationrnbqk1nr/p1p1bppp/1p2p3/3pP3/3P4/2N1B3/PPP2PPP/R2QKBNR w KQkq - 0 7} -)]b1e884294a64240b C13enFrench DefenseClassical Variation, Frankfurt Variationrnbqk1nr/ppp1bppp/4p3/3pP3/3P4/2N1B3/PPP2PPP/R2QKBNR b KQkq - 2 6 %r - )3 2d401dd965fe75deC14enFrench DefenseClassical Variationrnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7q - )3 cd80c33c58adf2bbC14enFrench DefenseClassical Variationrnbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6!f - )o bd4ac1be0e0657b3C15enFrench DefenseWinawer Variation, Alekhine Gambit, Kan Variationr1bqk1nr/ppp2ppp/2n1p3/8/3Pp3/P1N5/1PP2PPP/R1BQKB1R w KQkq - 1 7$Z - )s1c91225569f863f2C17enFrench DefenseWinawer Variation, Retreat Variation, Armenian Linernbqk1nr/pp3ppp/4p3/b2pP3/1P1p4/P1N5/2P2PPP/R1BQKBNR w KQkq - 0 7$Y -)s438f9860140c0a344C17enFrench DefenseWinawer Variation, Retreat Variation, Armenian Linernbqk1nr/pp3ppp/4p3/b1ppP3/1P1P4/P1N5/2P2PPP/R1BQKBNR b KQkq - 0 68N - )e b3683e260a0f2505C17enFrench DefenseWinawer Variation, Maróczy-Wallis Variationrnbqk1nr/pp3ppp/4p3/3pP3/1P6/2p5/1PP2PPP/R1BQKBNR w KQkq - 0 7M -)e 5da62c6e7cd1b2a8C17enFrench DefenseWinawer Variation, Maróczy-Wallis Variationrnbqk1nr/pp3ppp/4p3/3pP3/1P1p4/2N5/1PP2PPP/R1BQKBNR b KQkq - 0 6L -)e9548593b2eda32c4C17enFrench DefenseWinawer Variation, Maróczy-Wallis Variationrnbqk1nr/pp3ppp/4p3/3pP3/1b1p4/P1N5/1PP2PPP/R1BQKBNR w KQkq - 0 6B - )Y a6a5cd188f81a949IC18enFrench DefenseWinawer Variation, Classical Variationrnb1k1nr/ppq2ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 716 - )U 9ef54e8458436df5C19enFrench DefenseWinawer Variation, Advance Variationrnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7 6 a T ,G6P^ - )uecd052bca0011878xC11enFrench DefenseClassical Variation, Burn Variation, Morozevich Linernbqk2r/ppp1bp1p/4pp2/8/3PN3/8/PPP2PPP/R2QKBNR w KQkq - 0 7] +)u18cc47a2f067991C11enFrench DefenseClassical Variation, Burn Variation, Morozevich Linernbqk2r/ppp1bppp/4pB2/8/3PN3/8/PPP2PPP/R2QKBNR b KQkq - 0 6 \ -)ua4b3cdabf4182771qC11enFrench DefenseClassical Variation, Burn Variation, Morozevich Linernbqk2r/ppp1bppp/4pn2/6B1/3PN3/8/PPP2PPP/R2QKBNR w KQkq - 1 6![ -)ub07fbe443eb38be0C11enFrench DefenseClassical Variation, Burn Variation, Morozevich Linernbqkb1r/ppp2ppp/4pn2/6B1/3PN3/8/PPP2PPP/R2QKBNR b KQkq - 0 5"Z -)u 1abd80b77e451a77wC11enFrench DefenseClassical Variation, Burn Variation, Morozevich Linernbqkb1r/ppp2ppp/4pn2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5 :R - )1433a0b42babf9ae5C11enFrench DefenseSteinitz Variationr1bqkb1r/pp1n1ppp/2n1p3/2PpP3/5P2/2N5/PPP3PP/R1BQKBNR w KQkq - 1 7Q -)1 e8d7d3a0ab2e3fe6C11enFrench DefenseSteinitz Variationrnbqkb1r/pp1n1ppp/4p3/2PpP3/5P2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 6 F - )[ dec07b0cfff56abbC12enFrench DefenseMacCutcheon Variation, Lasker Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/3P4/2b5/PPPB1PPP/R2QKBNR w KQkq - 0 7E -)[fff9000ae24d38b1C12enFrench DefenseMacCutcheon Variation, Lasker Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P4/2N5/PPPB1PPP/R2QKBNR b KQkq - 1 6: + )c6be03ac4f813144DC12enFrench DefenseMacCutcheon Variation, Tartakower Variationrnbqk2r/pppn1pp1/4p2p/3pP3/1b1P4/2N5/PPPB1PPP/R2QKBNR w KQkq - 2 7  hV 9 IhhhhhhhCCCCCCCCCCC % - )[80653c971ecf0584C05enFrench DefenseTarrasch Variation, Botvinnik Variationrnbqkb1r/p2n1ppp/1p2p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR w KQkq - 0 788v - )U40e1ad65f1dd171cC05enFrench DefenseTarrasch Variation, Closed Variationr1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR w KQkq - 1 7t -)[eb0c7587e04cb21fC05enFrench DefenseTarrasch Variation, Botvinnik Variationrnbqkb1r/pp1n1ppp/4p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR b KQkq - 0 6 -)[9dd68d1f303cbd99C05enFrench DefenseTarrasch Variation, Botvinnik Variationrnbqkb1r/pp1n1ppp/4p3/2ppP3/3P4/3B4/PPPN1PPP/R1BQK1NR w KQkq - 0 6 -)[7ba75cb1cf7bb6e4C05enFrench DefenseTarrasch Variation, Botvinnik Variationrnbqkb1r/pppn1ppp/4p3/3pP3/3P4/3B4/PPPN1PPP/R1BQK1NR b KQkq - 2 5+j - )G90e340019b8de55f_C07enFrench DefenseTarrasch, Eliskases Variationrnbqkbnr/pp3ppp/4p3/8/2Bp4/5N2/PPPN1PPP/R1BQK2R w KQkq - 2 7 i -)G 4f31349f3338f07c|C07enFrench DefenseTarrasch, Eliskases Variationrnb1kbnr/pp3ppp/4p3/3q4/2Bp4/5N2/PPPN1PPP/R1BQK2R b KQkq - 1 6 h -)G 2c8280b71b7b26daC07enFrench DefenseTarrasch, Eliskases Variationrnb1kbnr/pp3ppp/4p3/3q4/3p4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 0 6 g -)G 739c3a82668f4f1cC07enFrench DefenseTarrasch, Eliskases Variationrnb1kbnr/pp3ppp/4p3/2pq4/3P4/5N2/PPPN1PPP/R1BQKB1R b KQkq - 1 5 k # 6 )P A m0kkJJJJJd4S -- ef536648b9c30c0c B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3 n - -= c095a91913e599c7B62enSicilian DefenseRichter-Rauzer Variationr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7ek* - -Yf8e0a995dbb42cbaB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitr1bqkb1r/pp2pppp/2np4/8/3Pn3/5N2/PP2BPPP/RNBQK2R w KQkq - 0 7) --Y 4557e7ccdd638ba9B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitr1bqkb1r/pp2pppp/2np1n2/8/3PP3/5N2/PP2BPPP/RNBQK2R b KQkq - 0 6( --Ye9e13280b9cb878fB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitr1bqkb1r/pp2pppp/2np1n2/8/3pP3/2P2N2/PP2BPPP/RNBQK2R w KQkq - 0 6' --Yb6ff88b5c43fee49IB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitr1bqkb1r/pp2pppp/2np1n2/2p5/3PP3/2P2N2/PP2BPPP/RNBQK2R b KQkq - 0 5& --Y73caa71fd5f6c30b B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitr1bqkb1r/pp2pppp/2np1n2/2p5/4P3/2P2N2/PP1PBPPP/RNBQK2R w KQkq - 3 5% --Yd8277ffdc4676608B50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitrnbqkb1r/pp2pppp/3p1n2/2p5/4P3/2P2N2/PP1PBPPP/RNBQK2R b KQkq - 2 4$ --Yaba7fc04c5422cabB50enSicilian DefenseDelayed Alapin, Basman-Palatnik Gambitrnbqkb1r/pp2pppp/3p1n2/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 4 - -_d4f446615945d221!B57enSicilian DefenseClassical Variation, Anti-Sozin Variationr1b1kb1r/pp2pppp/1qnp1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 2 7 i6 - -Wfba3920c816173366B46enSicilian DefensePaulsen Variation, Taimanov Variationr1bqkb1r/1p1pnppp/p1n1p3/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 75 --Wc5ec2eb13ae8f88bB46enSicilian DefensePaulsen Variation, Taimanov Variationr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6 - -7894087ad298d60c8B58enSicilian DefenseBoleslavsky Variationr1bqkb1r/pp3ppp/2np1n2/4p3/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7  - -a5f56087370489bdeB60enSicilian DefenseRichter-Rauzer Variation, Dragon Variationr1bqkb1r/pp2pp1p/2np1np1/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7 }A +-I 8d4780812f1a4300B40enSicilian DefensePin Variation, Jaffe Variationrnbqk2r/pp1p1ppp/4pn2/8/1b1NP3/2NB4/PPP2PPP/R1BQK2R b KQkq - 4 6z - -a5423a57ad19dd9a4B60enSicilian DefenseRichter-Rauzer Variation, Modern Variationr2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 5 7"b - -mfc1481f7286a3550PB71enSicilian DefenseDragon Variation, Levenfish Variation, Main Liner1bqkb1r/pp1npp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 1 7N - -[6702c678bab5dbb7B33enSicilian DefenseFour Knights Variation, Cobra Variationr1bqk2r/pp1p1ppp/2n1pn2/1Nb5/4P3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 7M --[ca1f8223708731344B33enSicilian DefenseFour Knights Variation, Cobra Variationr1bqkb1r/pp1p1ppp/2n1pn2/1N6/4P3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 6B + -Ic0da4d93611495d]B40enSicilian DefensePin Variation, Jaffe Variationrnbqk2r/pp1p1ppp/5n2/4p3/1b1NP3/2NB4/PPP2PPP/R1BQK2R w KQkq - 0 7 U pc-  pU@ - -g 3dd7d0b531e7f392B32enSicilian DefenseO'Kelly Variation, Maróczy Bind, Geller Liner1bqkbnr/1p1p1ppp/p1n5/4p3/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 0 6? --gb7afd8ffa2020ba4B32enSicilian DefenseO'Kelly Variation, Maróczy Bind, Geller Liner1bqkbnr/1p1ppppp/p1n5/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5> --g3b8c47dbe10da0a3B32enSicilian DefenseO'Kelly Variation, Maróczy Bind, Geller Liner1bqkbnr/1p1ppppp/p1n5/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 *6 - -7 afd3c26e4620d372rB32enSicilian DefenseKalashnikov Variationr1bqkbnr/pp3ppp/2np4/1N2p3/4P3/8/PPP2PPP/RNBQKB1R w KQkq - 0 65 --7 9669540f94589a1fB32enSicilian DefenseKalashnikov Variationr1bqkbnr/pp1p1ppp/2n5/1N2p3/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 1 5 9 , - -=c37a9235fad06306B33enSicilian DefenseLasker-Pelikan Variationr1bqkb1r/pp1p1ppp/2n2n2/4p3/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 + --= 49029a7f69359b300B33enSicilian DefenseLasker-Pelikan Variationr1bqkb1r/pp1ppppp/2n2n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 `" - -W 3c5047e1c5eaaa99B37enSicilian DefenseAccelerated Fianchetto, Maróczy Bindr1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 60 - -S2fdba618c59c2e04B40enSicilian DefenseAlapin Variation, Sherzer Variationr1bqkb1r/pp1p1ppp/2n1p3/2pnP3/3P4/2P2N2/PP3PPP/RNBQKB1R w KQkq - 1 6 --S84367efad40d8b07B40enSicilian DefenseAlapin Variation, Sherzer Variationrnbqkb1r/pp1p1ppp/4p3/2pnP3/3P4/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 5 --S41035150c5c4a645EB40enSicilian DefenseAlapin Variation, Sherzer Variationrnbqkb1r/pp1p1ppp/4p3/2pnP3/8/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 5 --S85138ea90b06d3f0B40enSicilian DefenseAlapin Variation, Sherzer Variationrnbqkb1r/pp1p1ppp/4pn2/2p1P3/8/2P2N2/PP1P1PPP/RNBQKB1R b KQkq - 0 4 `F  X b9````` } --S7793c2144214cbd6B25enSicilian DefenseClosed Variation, Botvinnik Defenser1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP1NPBP/R1BQK2R b KQkq - 1 6!r + -m6674105ea5dba70pB27enSicilian DefenseHyperaccelerated Pterodactyl, Exchange Variationrnb1k1nr/pp1ppp1p/6p1/2P5/4P3/2q2N2/P1P2PPP/R1BQKB1R w KQkq - 0 7f - -M543fc291edd901cdB29enSicilian DefenseNimzowitsch Variation, Main Liner1bqkb1r/pp1p1ppp/2n5/2ppP3/3P4/5N2/PPP2PPP/R1BQKB1R w KQkq - 1 7e --M ffd21a73fc48a4ceB29enSicilian DefenseNimzowitsch Variation, Main Linernbqkb1r/pp1p1ppp/8/2ppP3/3P4/5N2/PPP2PPP/R1BQKB1R b KQkq - 0 6d --M 3ae735d9ed81898cB29enSicilian DefenseNimzowitsch Variation, Main Linernbqkb1r/pp1p1ppp/8/2ppP3/8/5N2/PPPP1PPP/R1BQKB1R w KQkq - 0 6c --M 1d6c8963b96a0ebcB29enSicilian DefenseNimzowitsch Variation, Main Linernbqkb1r/pp1p1ppp/4p3/2pNP3/8/5N2/PPPP1PPP/R1BQKB1R b KQkq - 0 5b --Mcc4eb16ad7562b1aB29enSicilian DefenseNimzowitsch Variation, Main Linernbqkb1r/pp1p1ppp/4p3/2pnP3/8/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 5S8Z - - b2520ef795826cdaB30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqk1nr/pp3ppp/2np4/2p1p1b1/2B1P3/2NP4/PPPN1PPP/R1BQK2R w KQkq - 2 76Y -- 586867969c9b423e>B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqk1nr/pp2bppp/2np4/2p1p3/2B1P3/2NP4/PPPN1PPP/R1BQK2R b KQkq - 1 68X -- 854afc715e267cb4B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqk1nr/pp2bppp/2np4/2p1p3/2B1P3/2NP1N2/PPP2PPP/R1BQK2R w KQkq - 0 68W -- bcf06a108c5e35d9B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqk1nr/pp1pbppp/2n5/2p1p3/2B1P3/2NP1N2/PPP2PPP/R1BQK2R b KQkq - 0 57V -- 1254a9c5c8ce8e0d B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqk1nr/pp1pbppp/2n5/2p1p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 2 57U +- 698da2a0265229cB30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqkbnr/pp1p1ppp/2n5/2p1p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 1 46T -- 652b6e022a26f43a:B30enSicilian DefenseClosed Sicilian, Anti-Sveshnikov Variation, Kharlov-Kramnik Liner1bqkbnr/pp1p1ppp/2n5/2p1p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4 A  ) E ]qqqqqqqqqq]]F - -S14595c9ce04b0397B25enSicilian DefenseClosed Variation, Botvinnik Defenser1bqk1nr/pp3pbp/2np2p1/2p1p3/4PP2/2NP2P1/PPP3BP/R1BQK1NR w KQkq - 0 7|~ - -Sfdebca5ed1f133e0B25enSicilian DefenseClosed Variation, Botvinnik Defenser1bqk1nr/pp3pbp/2np2p1/2p1p3/4P3/2NP2P1/PPP1NPBP/R1BQK2R w KQkq - 0 7 " - -k e4a5cdfb5b59a003B21enSicilian DefenseSmith-Morra Gambit Accepted, Taimanov Formationrnbqkb1r/1p1pnppp/p3p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 2 7!! --k daea7146e0d02bbeB21enSicilian DefenseSmith-Morra Gambit Accepted, Taimanov Formationrnbqkbnr/1p1p1ppp/p3p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R b KQkq - 1 6 +-k 18e9db088364a83B21enSicilian DefenseSmith-Morra Gambit Accepted, Taimanov Formationrnbqkbnr/1p1p1ppp/p3p3/8/2B1P3/2N5/PP3PPP/R1BQK1NR w KQkq - 0 6 --k d3796c436f16b25f_B21enSicilian DefenseSmith-Morra Gambit Accepted, Taimanov Formationrnbqkbnr/pp1p1ppp/4p3/8/2B1P3/2N5/PP3PPP/R1BQK1NR b KQkq - 1 5 ! - -q70c9f5e07b68b6f1B22enSicilian DefenseAlapin Variation, Barmen Defense, Central Exchanger3kbnr/pp2pppp/2n5/3q4/3P2b1/5N2/PP3PPP/RNBQKB1R w KQkq - 3 7  --q721a3fd23cedb81bB22enSicilian DefenseAlapin Variation, Barmen Defense, Central Exchanger1b1kbnr/pp2pppp/2n5/3q4/3P4/5N2/PP3PPP/RNBQKB1R b KQkq - 2 6 --qa97ed324540bd926&B22enSicilian DefenseAlapin Variation, Barmen Defense, Central Exchanger1b1kbnr/pp2pppp/2n5/3q4/3P4/8/PP3PPP/RNBQKBNR w KQkq - 1 6 +-q2930bc6459a7c25%B22enSicilian DefenseAlapin Variation, Barmen Defense, Central Exchangernb1kbnr/pp2pppp/8/3q4/3P4/8/PP3PPP/RNBQKBNR b KQkq - 0 5 --qae25de8a21327003B22enSicilian DefenseAlapin Variation, Barmen Defense, Central Exchangernb1kbnr/pp2pppp/8/3q4/3p4/2P5/PP3PPP/RNBQKBNR w KQkq - 0 55 H o1 _QNMMMMMMMM+ H* -/O94cd085ce7fdafc1A48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbqkb1r/ppp1pp1p/5np1/3p4/3P4/2N2N2/PPP1PPPP/R1BQKB1R w KQkq - 0 4) -/O11a72a487b29e1e7A48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbqkb1r/pppppp1p/5np1/8/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 1 3~$ - )- 49d9b32dd49f9455UA65enBenoni DefenseKing's Pawn Linernbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6}# - )- 8ddebe653f1f295f_A65enBenoni DefenseKing's Pawn Linernbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6 - 3[ 47e3c63ad692ec77wB00enNimzowitsch DefenseEl Columpio Defense, Exchange Variationr1bqkb1r/ppp1pppp/2nP3n/8/3P4/5N1P/PPP2PP1/RNBQKB1R b KQkq - 0 6 +3[63c42283be86368hB00enNimzowitsch DefenseEl Columpio Defense, Exchange Variationr1bqkb1r/ppp1pppp/2np3n/4P3/3P4/5N1P/PPP2PP1/RNBQKB1R w KQkq - 1 6 - 3Q35e293875e7cf0ebB00enNimzowitsch DefenseEl Columpio Defense, Pin Variationr1bqkb1r/ppp1pppp/2np3n/1B2P3/3P4/5N1P/PPP2PP1/RNBQK2R b KQkq - 2 6x + 5-eda5dcb5fc9c9f1B01enScandinavian DefenseLasker Variationrn2kb1r/ppp1pppp/5n2/q7/3P2b1/2N2N1P/PPP2PP1/R1BQKB1R b KQkq - 0 6w -5-e62980759d6a0003B01enScandinavian DefenseLasker Variationrn2kb1r/ppp1pppp/5n2/q7/3P2b1/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 3 6  - 3[85f95e17cb1d69a1B00enNimzowitsch DefenseEl Columpio Defense, El Columpio Gambitr1bqkb1r/ppp1pppp/2npP2n/8/3P4/5N1P/PPP2PP1/RNBQKB1R b KQkq - 0 6m - -S71594d6605a2d14bKB02enAlekhine DefenseHunt Variation, Lasker Simul Gambitrnbqkb1r/pppp1ppp/4p3/2PnP3/2B5/2N5/PP1P1PPP/R1BQK1NR b KQkq - 1 6l --S 8ace55c4c7405392B02enAlekhine DefenseHunt Variation, Lasker Simul Gambitrnbqkb1r/pppp1ppp/4p3/2PnP3/2B5/8/PP1P1PPP/RNBQK1NR w KQkq - 0 6u -3[417db25f21dadeebB00enNimzowitsch DefenseEl Columpio Defense, Exchange Variationr1bqkb1r/ppp1pppp/2np4/4P3/3P2n1/5N1P/PPP2PP1/RNBQKB1R b KQkq - 0 5 -3[a98e6fe1e3791719B00enNimzowitsch DefenseEl Columpio Defense, Exchange Variationr1bqkb1r/ppp1pppp/2np4/4P3/3P2n1/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5 -3[9034f98031015e74tB00enNimzowitsch DefenseEl Columpio Defense, Exchange Variationr1bqkb1r/pppppppp/2n5/4P3/3P2n1/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4 E] v aEEEEEEEEEEEEEEEEE[ -/_99960d2c84ca693d=B17enCaro-Kann DefenseKarpov Variation, Tiviakov-Fischer Attackr1bqkbnr/pp1npppp/2p5/8/2BPN3/8/PPP2PPP/R1BQK1NR b KQkq - 2 5#R - -s 9a4ace36c4193f0c B21enSicilian DefenseSmith-Morra Gambit Accepted, Scheveningen Formationr1bqkbnr/pp3ppp/2npp3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 0 7#Q --s ec3d3c07dc3baf5e^B21enSicilian DefenseSmith-Morra Gambit Accepted, Scheveningen Formationr1bqkbnr/pp2pppp/2np4/8/2B1P3/2N2N2/PP3PPP/R1BQK2R b KQkq - 1 6#P --s 8f8e882ff47879f8B21enSicilian DefenseSmith-Morra Gambit Accepted, Scheveningen Formationr1bqkbnr/pp2pppp/2np4/8/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6!"F - -i7107a9a4f1418ebdB21enSicilian DefenseSmith-Morra Gambit Accepted, Paulsen Formationr1bqkbnr/1p1p1ppp/p1n1p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 0 7 E --ia3f0585716617661aB21enSicilian DefenseSmith-Morra Gambit Accepted, Paulsen Formationr1bqkbnr/pp1p1ppp/2n1p3/8/2B1P3/2N2N2/PP3PPP/R1BQK2R b KQkq - 1 6 D --i c043ec7f3e22a0c7B21enSicilian DefenseSmith-Morra Gambit Accepted, Paulsen Formationr1bqkbnr/pp1p1ppp/2n1p3/8/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6: - -]6ab131515d96be43CB21enSicilian DefenseSmith-Morra Gambit Accepted, Pin Defenser1bqk1nr/pp1p1ppp/2n1p3/8/1bB1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 2 7. + -ceed1c0cdc539ce2B21enSicilian DefenseSmith-Morra Gambit Accepted, Morphy Defenser1bqk1nr/pp1p1ppp/2n1p3/2b5/2B1P3/2N2N2/PP3PPP/R1BQK2R w KQkq - 2 7  a( 1  < %n & - /c9c2877f959b789f9B13enCaro-Kann DefensePanov Attack, Modern Defense, Czerniak Liner1b1kb1r/pp2pppp/2n2n2/q2p2B1/2PP4/2N5/PP3PPP/R2QKBNR w KQkq - 5 7( - /s82a41cf53a8e7eacB13enCaro-Kann DefensePanov Attack, Modern Defense, Reifir-Spielmann Liner1b1kb1r/pp2pppp/1qn2n2/3p2B1/2PP4/2N5/PP3PPP/R2QKBNR w KQkq - 5 7N9 - /c332c1093e8e73824$B13enCaro-Kann DefensePanov Attack, Modern Defense, Carlsbad Liner1bqkb1r/pp3ppp/2n1pn2/3p2B1/2PP4/2N5/PP3PPP/R2QKBNR w KQkq - 0 7% -/c455be2a2f0c5a876vB13enCaro-Kann DefensePanov Attack, Modern Defense, Czerniak Liner1bqkb1r/pp2pppp/2n2n2/3p2B1/2PP4/2N5/PP3PPP/R2QKBNR b KQkq - 4 6  - /_5ab693506f2c1c69iB13enCaro-Kann DefensePanov Attack, Modern Defense, Mieses Liner2qkb1r/pp2pppp/2n2n2/3p4/2PP2b1/2N2N2/PP3PPP/R1BQKB1R w KQkq - 5 7 -/_5865596228a91283B13enCaro-Kann DefensePanov Attack, Modern Defense, Mieses Liner1bqkb1r/pp2pppp/2n2n2/3p4/2PP4/2N2N2/PP3PPP/R1BQKB1R b KQkq - 4 6 v - 5; 4cbe1ab76aedeff0B14enNimzo-Indian DefensePanov Attack, Main Linernbqk2r/pp3ppp/4pn2/3p4/1bPP4/2N2N2/PP3PPP/R1BQKB1R w KQkq - 2 7 u -5; 85ff73b1211a27d2B14enNimzo-Indian DefensePanov Attack, Main Linernbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 6 "j - /s7fce985673d89b41AB14enCaro-Kann DefensePanov Attack, Fianchetto Defense, Fianchetto Gambitrnbqk2r/pp2ppbp/5np1/3P4/3P4/2N5/PP3PPP/R1BQKBNR w KQkq - 1 7$i -/s cf72a5e0889f50ebB14enCaro-Kann DefensePanov Attack, Fianchetto Defense, Fianchetto Gambitrnbqkb1r/pp2pp1p/5np1/3P4/3P4/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6^ - /_73051346392c5577wB17enCaro-Kann DefenseKarpov Variation, Tiviakov-Fischer Attackr1bqkb1r/pp2pppp/2p2n2/8/2BP4/8/PPP2PPP/R1BQK1NR w KQkq - 0 7] -/_ 869bb477f16a0a1aB17enCaro-Kann DefenseKarpov Variation, Tiviakov-Fischer Attackr1bqkb1r/pp1npppp/2p2N2/8/2BP4/8/PPP2PPP/R1BQK1NR b KQkq - 0 6\ -/_ c27839d9293028abB17enCaro-Kann DefenseKarpov Variation, Tiviakov-Fischer Attackr1bqkb1r/pp1npppp/2p2n2/8/2BPN3/8/PPP2PPP/R1BQK1NR w KQkq - 3 6 y O  V.U T T $3V - -C3776f7e08aae7ca8B07enPhilidor DefenseLion Variation, Lion's Clawr1bqk2r/pp1nbppp/2pp1n2/4p3/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1 w kq - 2 7U --C23ba840f4005d0399B07enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pp1n1ppp/2pp1n2/4p3/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1 b kq - 1 6T --C5dcfff3b3cf60b29)B07enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pp1n1ppp/2pp1n2/4p3/3PP3/2N2N2/PPP1BPPP/R1BQK2R w KQkq - 0 6S --Cd7b7f771af13f31fB07enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pp1npppp/2pp1n2/8/3PP3/2N2N2/PPP1BPPP/R1BQK2R b KQkq - 3 5 R +-Ccd31b87c7f59222"B07enPhilidor DefenseLion Variation, Lion's Clawr1bqkb1r/pp1npppp/2pp1n2/8/3PP3/2N5/PPP1BPPP/R1BQK1NR w KQkq - 2 5Q --C3f3060da275d7feeB07enPhilidor DefenseLion Variation, Lion's Clawrnbqkb1r/pp2pppp/2pp1n2/8/3PP3/2N5/PPP1BPPP/R1BQK1NR b KQkq - 1 4 8J - %mf016414f00880371qB08enPirc DefenseClassical Variation, Quiet System, Chigorin Liner1bq1rk1/ppp1ppbp/2np1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1 w - - 6 7> - %mc981744266d975c9B08enPirc DefenseClassical Variation, Quiet System, Czech Defensernbq1rk1/pp2ppbp/2pp1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1 w - - 0 7!2 - %m5928539f569ca898B08enPirc DefenseClassical Variation, Quiet System, Parma Defensern1q1rk1/ppp1ppbp/3p1np1/8/3PP1b1/2N2N2/PPP1BPPP/R1BQ1RK1 w - - 6 7I -%m5bfb99ad1119a672rB08enPirc DefenseClassical Variation, Quiet System, Chigorin Linernbq1rk1/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQ1RK1 b - - 5 6H -%m258ee2996dea7d62bB08enPirc DefenseClassical Variation, Quiet System, Chigorin Linernbq1rk1/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQK2R w KQ - 4 6&b - )u2f1d75e92d7a2f6dmB06enModern DefenseTwo Knights Variation, Suttles Variation, Tal Gambitrnb1k1nr/pp2ppbp/2pp2p1/6B1/3PP3/2N2N2/PqPQ1PPP/R3KB1R w KQkq - 0 7(a -)ubc8fb323d8d49eb5B06enModern DefenseTwo Knights Variation, Suttles Variation, Tal Gambitrnb1k1nr/pp2ppbp/1qpp2p1/6B1/3PP3/2N2N2/PPPQ1PPP/R3KB1R b KQkq - 3 6'` -)u9497fcac196d4115B06enModern DefenseTwo Knights Variation, Suttles Variation, Tal Gambitrnb1k1nr/pp2ppbp/1qpp2p1/6B1/3PP3/2N2N2/PPP2PPP/R2QKB1R w KQkq - 2 6'_ -)u536802fbd32697cfB06enModern DefenseTwo Knights Variation, Suttles Variation, Tal Gambitrnbqk1nr/pp2ppbp/2pp2p1/6B1/3PP3/2N2N2/PPP2PPP/R2QKB1R b KQkq - 1 5 $Q-rh _ R- p v -13f2b9bcad61196c8dB00enSt. George DefenseSan Jorge Variationrn1qkbnr/1bp1pppp/p2p4/1p6/3PP3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 0 5G p& - ) 9abd479de5ad97cbA61enBenoni Defensernbqkb1r/pp1p1ppp/5n2/2pp4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5 y -1313a26c5ab6152a50PB00enSt. George DefenseSan Jorge Variationrn1qkbnr/1bp1pp1p/p2p2p1/1p6/3PP3/2PB1N2/PP3PPP/RNBQ1RK1 b kq - 0 6 x -13657894c2666525d6B00enSt. George DefenseSan Jorge Variationrn1qkbnr/1bp1pp1p/p2p2p1/1p6/3PP3/3B1N2/PPP2PPP/RNBQ1RK1 w kq - 0 6w -138cccc7991deab79dB00enSt. George DefenseSan Jorge Variationrn1qkbnr/1bp1pppp/p2p4/1p6/3PP3/3B1N2/PPP2PPP/RNBQ1RK1 b kq - 1 5 n - -S48e3db07d7da9826&B02enAlekhine DefenseTwo Pawns Attack, Mikenas Variationrnbqkb1r/ppp2ppp/3pp3/2PnP3/2B5/2N5/PP1P1PPP/R1BQK1NR w KQkq - 0 7p* - ) bf0e01c82c76da29)A61enBenoni Defensernbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7o) - ) 56ba529357f94862bA61enBenoni Defensernbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6n( - ) ad2d4a31951bcabbA61enBenoni Defensernbqkb1r/pp3ppp/3p1n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6n' - ) 9497dc50476383d6A61enBenoni Defensernbqkb1r/pp1p1ppp/5n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5 - '311d23579750e37f3A92enDutch DefenseStonewall Variationrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 7 -'31b7ad8cea057de18A92enDutch DefenseStonewall Variationrnbqk2r/ppp1b1pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b kq - 1 6 -'3650fa3fadca40508A92enDutch DefenseStonewall Variationrnbqk2r/ppp1b1pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 0 6 - '1 aeb05bf25b93f42f/A92enDutch DefenseAlekhine Variationrnbq1rk1/ppppb1pp/4p3/5p2/2PPn3/5NP1/PP2PPBP/RNBQ1RK1 w - - 7 7 -'1 94b8176de9da79d5A92enDutch DefenseAlekhine Variationrnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 6 6 - '3 ad02810c3ba230b8A96enDutch DefenseClassical Variationrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 z - 13a31e51ec4d52e1faB00enSt. George DefenseSan Jorge Variationrn1qk1nr/1bp1ppbp/p2p2p1/1p6/3PP3/2PB1N2/PP3PPP/RNBQ1RK1 w kq - 1 7 tc 2  l JA tbt - %3ec1ab16142d11580B08enPirc DefenseClassical Variationrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4 z - /7 cecf47e3e9048e9eB10enCaro-Kann DefenseScorpion-Horus Gambitrnbqkbnr/pp2pppp/2p5/6B1/4p3/2NP4/PPP2PPP/R2QKBNR b KQkq - 1 4y +/789510d5598e5556VB10enCaro-Kann DefenseScorpion-Horus Gambitrnbqkbnr/pp2pppp/2p5/8/4p3/2NP4/PPP2PPP/R1BQKBNR w KQkq - 0 4x -/7 c01f8fdc9077e506B10enCaro-Kann DefenseScorpion-Horus Gambitrnbqkbnr/pp2pppp/2p5/3p4/4P3/2NP4/PPP2PPP/R1BQKBNR b KQkq - 0 3~s - /' 2b87de23dc34771bB10enCaro-Kann DefenseHector Gambitrnbqkbnr/pp2pppp/2p5/6N1/4p3/2N5/PPPP1PPP/R1BQKB1R b KQkq - 1 4r -/' 7d553ff675f88fbfB10enCaro-Kann DefenseHector Gambitrnbqkbnr/pp2pppp/2p5/8/4p3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4 )l - /e5eac5cb36295c64dMB10enCaro-Kann DefenseAccelerated Panov Attack, Van Weersel Attackrnbqkbnr/pp2pppp/8/3p4/4P3/1Q6/PP1P1PPP/RNB1KBNR b KQkq - 1 4k -/e6455ff0b57ae6eabB10enCaro-Kann DefenseAccelerated Panov Attack, Van Weersel Attackrnbqkbnr/pp2pppp/8/3p4/4P3/8/PP1P1PPP/RNBQKBNR w KQkq - 0 4j -/e17255042f7c46311B10enCaro-Kann DefenseAccelerated Panov Attack, Van Weersel Attackrnbqkbnr/pp2pppp/2p5/3P4/4P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 3 Ce - /Q 571c8c8e50f4cc85B10enCaro-Kann DefenseHillbilly Attack, Schaeffer Gambitrnbqkbnr/pp2pppp/2p5/7Q/4p3/1B6/PPPP1PPP/RNB1K1NR b KQkq - 1 4d -/Qf7116fa87c99ea19B10enCaro-Kann DefenseHillbilly Attack, Schaeffer Gambitrnbqkbnr/pp2pppp/2p5/8/4p3/1B6/PPPP1PPP/RNBQK1NR w KQkq - 0 4c -/Q 3f9bf0a1b5605a49IB10enCaro-Kann DefenseHillbilly Attack, Schaeffer Gambitrnbqkbnr/pp2pppp/2p5/3p4/4P3/1B6/PPPP1PPP/RNBQK1NR b KQkq - 1 3b -/Q f69fe0833e460aadB10enCaro-Kann DefenseHillbilly Attack, Schaeffer Gambitrnbqkbnr/pp2pppp/2p5/3p4/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 0 3^ - /W abd81103b1fbb84bKB10enCaro-Kann DefenseSpike Variation, Scorpion-Grob Gambitrnbqkbnr/pp2pppp/2p5/8/4p1P1/2NP4/PPP2P1P/R1BQKBNR b KQkq - 0 4} - %+ca68209a33a649344B09enPirc DefenseAustrian Attackrnbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4 . ~ @W&]..........]B - 'W 39942b4cc2267016A40enDutch DefenseStonewall Variation, Modern Variationrnbqk2r/pp4pp/2pbpn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w kq - 0 7A -'W abeec6a3b5e6a3adA40enDutch DefenseStonewall Variation, Modern Variationrnbqk2r/ppp3pp/3bpn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b kq - 0 6@ -'W 27cd5987f6e908aaA40enDutch DefenseStonewall Variation, Modern Variationrnbqk2r/ppp3pp/3bpn2/3p1p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w kq - 2 6? -'W 8395340529f3d98eA40enDutch DefenseStonewall Variation, Modern Variationrnbqkb1r/ppp3pp/4pn2/3p1p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 1 5> -'Wfde04f315500029eA40enDutch DefenseStonewall Variation, Modern Variationrnbqkb1r/ppp3pp/4pn2/3p1p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 0 5= -'W 788a6d25c9d44cb8A40enDutch DefenseStonewall Variation, Modern Variationrnbqkb1r/pppp2pp/4pn2/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4< -'Wcd7a4e58843994c1A40enDutch DefenseStonewall Variation, Modern Variationrnbqkb1r/pppp2pp/4pn2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4; -'W 96947aad29c3d557WA40enDutch DefenseStonewall Variation, Modern Variationrnbqkbnr/pppp2pp/4p3/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3: -'W ba72c1ecc9140d6foA40enDutch DefenseStonewall Variation, Modern Variationrnbqkbnr/pppp2pp/4p3/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 39 -'W 2e1da775779c20b1A40enDutch DefenseStonewall Variation, Modern Variationrnbqkbnr/pppp1ppp/4p3/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2 &6 - 3Wc61489d1f0c257ebA40enPterodactyl DefenseCentral, Benoni Beefeater Pterodactylrnb1k1nr/pp2pp1p/3p2p1/q1pP4/2P1P3/2P5/P4PPP/R1BQKBNR w KQkq - 1 75 -3W1f671c8a59b07664dA40enPterodactyl DefenseCentral, Benoni Beefeater Pterodactylrnbqk1nr/pp2pp1p/3p2p1/2pP4/2P1P3/2P5/P4PPP/R1BQKBNR b KQkq - 0 64 -3W54b276bbf4ec9924$A40enPterodactyl DefenseCentral, Benoni Beefeater Pterodactylrnbqk1nr/pp2pp1p/3p2p1/2pP4/2P1P3/2b5/PP3PPP/R1BQKBNR w KQkq - 0 6 [2 -3Wc8715445b26475acA40enPterodactyl DefenseCentral, Benoni Beefeater Pterodactylrnbqk1nr/pp2ppbp/3p2p1/2pP4/2P5/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5 Vxph`XPH@80(  @ .|tld\TLD<4,$  v m z r j b Z R J B : 2 * "    R.V  w o g _ W O G ? 7 / '     d 7  | t l d \ T L D < 4 , $     [ I @h  w o g _ W O G ? 7 / '     %  |tld\TLD<4,#vmR%zyqiaYQIA91)! ~ulcZQH?6-$ dI7q_{skc[SKC;3+# [;#h8&%]/cKgUH?[~~Z|vphNM@EA9Q76Q27/+i+?*C*(#&jTG~{O#oNB>0!TQ~~%}}yyVwRvrqoo1idcDb_9_TBz>>]>%:971,`+*)75X6sYS9I/}|6x2ut9s{oo=kLibVUO*LPIGER=:~0;+%$!9n ^AOdP.p\] %~F{yyvtjqGlh6d\S5OoL:D;99..($@ 7k:~x|zwTsNo[l+iVhRfdca]XSR?==?7f54 [lQ- c&}|]ka`]&WPUQOKJH6E2=N<75 4Q+'#$ Z}X}vutpkdb]UO N;5,$/Jq  >~{zQrkwkqiaf?]])OJ BAi;6D(T:  s~2}zm'ib`^]\Y=RPNN9IFECX80c-<"E~[ z"zz~ R q > p]D -)[ c4bf8644b18dde8eA00enPolish OpeningTartakower Gambit, Brinckmann Variationrnbqk1nr/pppp2pp/5p2/4p3/1b2P3/8/PBPP1PPP/RN1QKBNR w KQkq - 0 4 - %=228deac1cfe9e452RA00enGrob OpeningKeene Defense, Main Linernbqk2r/pp2nppp/2pb4/3p4/2PPp1P1/2N4P/PP2PPB1/R1BQK1NR w KQkq - 3 7  -%=1cc2567c74606fefA00enGrob OpeningKeene Defense, Main Linernbqk1nr/pp3ppp/2pb4/3p4/2PPp1P1/2N4P/PP2PPB1/R1BQK1NR b KQkq - 2 6 -%=e7554edeb682ed366A00enGrob OpeningKeene Defense, Main Linernbqk1nr/pp3ppp/2pb4/3p4/2PPp1P1/7P/PP2PPB1/RNBQK1NR w KQkq - 1 6 -%= 430d235c69983c12A00enGrob OpeningKeene Defense, Main Linernbqkbnr/pp3ppp/2p5/3p4/2PPp1P1/7P/PP2PPB1/RNBQK1NR b KQkq - 0 5 -%= cf2ebc782a979715A00enGrob OpeningKeene Defense, Main Linernbqkbnr/pp3ppp/2p5/3p4/3Pp1P1/7P/PPP1PPB1/RNBQK1NR w KQkq - 0 5 -%= e0288116189248e3A00enGrob OpeningKeene Defense, Main Linernbqkbnr/pp3ppp/2p5/3pp3/3P2P1/7P/PPP1PPB1/RNBQK1NR b KQkq - 0 4;! - +S8b1af8e53b4d1b97A13enEnglish OpeningAgincourt Defense, Tarrasch Defenser1bqk2r/pp2bppp/2n1pn2/2pp4/2P5/1P3NP1/P2PPPBP/RNBQ1RK1 w kq - 4 7 -+S9fd68b0af1e6b706A13enEnglish OpeningAgincourt Defense, Tarrasch Defenser1bqkb1r/pp3ppp/2n1pn2/2pp4/2P5/1P3NP1/P2PPPBP/RNBQ1RK1 b kq - 3 6 -+Se1a3f03e8d156c16A13enEnglish OpeningAgincourt Defense, Tarrasch Defenser1bqkb1r/pp3ppp/2n1pn2/2pp4/2P5/1P3NP1/P2PPPBP/RNBQK2R w KQkq - 2 6 -+S4a4e28dc9c84c915A13enEnglish OpeningAgincourt Defense, Tarrasch Defensernbqkb1r/pp3ppp/4pn2/2pp4/2P5/1P3NP1/P2PPPBP/RNBQK2R b KQkq - 1 5 -+Sffbe0ba1d169116clA13enEnglish OpeningAgincourt Defense, Tarrasch Defensernbqkb1r/pp3ppp/4pn2/2pp4/2P5/1P3NP1/P2PPP1P/RNBQKB1R w KQkq - 0 5 -+S19cfda0f2e2e1a11A13enEnglish OpeningAgincourt Defense, Tarrasch Defensernbqkb1r/ppp2ppp/4pn2/3p4/2P5/1P3NP1/P2PPP1P/RNBQKB1R b KQkq - 0 4  f. W,         RRRRRRRR 4 8 - 731c77a9729f4a470eE90enKing's Indian DefenseZinnowitz Variationrnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N2N2/PP3PPP/R2QKB1R b KQ - 2 6 5 -7315b03c59eb50586foE90enKing's Indian DefenseZinnowitz Variationrnbqk2r/ppp1ppbp/3p1np1/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R w KQkq - 0 5 4 - - 71a9ad7dbd2ee5d665eE91enKing's Indian DefenseOrthodox Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 6C - 7-a92545a8aefa8748HE90enKing's Indian DefenseLarsen Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BN2/PP3PPP/R2QKB1R b KQ - 3 6B -7-da2dfe442fc09cc6E90enKing's Indian DefenseLarsen Variationrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R w KQ - 2 6#" - )[e83ca617c3c29d60`A00enPolish OpeningTartakower Gambit, Brinckmann Variationr1b1k1nr/ppppq2p/2n2pp1/4pP2/1bB1P3/8/PBPP2PP/RN1QK1NR w KQkq - 0 7! +)[188f54cb84d0f2b+A00enPolish OpeningTartakower Gambit, Brinckmann Variationr1b1k1nr/ppppq1pp/2n2p2/4pP2/1bB1P3/8/PBPP2PP/RN1QK1NR b KQkq - 0 6 -)[6a0848f350f23ec8A00enPolish OpeningTartakower Gambit, Brinckmann Variationr1b1k1nr/ppppq1pp/2n2p2/4p3/1bB1PP2/8/PBPP2PP/RN1QK1NR w KQkq - 1 6 -)[f1f7978391ce90a2A00enPolish OpeningTartakower Gambit, Brinckmann Variationr1bqk1nr/pppp2pp/2n2p2/4p3/1bB1PP2/8/PBPP2PP/RN1QK1NR b KQkq - 0 5 +)[ce1ea8e885fad2b+A00enPolish OpeningTartakower Gambit, Brinckmann Variationr1bqk1nr/pppp2pp/2n2p2/4p3/1bB1P3/8/PBPP1PPP/RN1QK1NR w KQkq - 2 5 -)[ a70c326c99ce0828(A00enPolish OpeningTartakower Gambit, Brinckmann Variationrnbqk1nr/pppp2pp/5p2/4p3/1bB1P3/8/PBPP1PPP/RN1QK1NR b KQkq - 1 4 u s [u5xX0I x@ - ;Gf23ebdce4c7810c9D55enQueen's Gambit DeclinedModern Variation, Normal Linernbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6 l - ;124e9fade0b3d5e6ajD51enQueen's Gambit DeclinedAlekhine Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PPP3/2N2N2/PP3PPP/R2QKB1R b KQkq - 0 6k -;1e0eef796e0bde360`D51enQueen's Gambit DeclinedAlekhine Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6j -;172941a79977d30dbD51enQueen's Gambit DeclinedAlekhine Variationr1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 4 5 e -;1 c292c1bb138a0b366D51enQueen's Gambit DeclinedAlekhine Variationrnbqkbnr/ppp2ppp/4p3/3p4/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3d -;1 47f8e3af8f5e4510D51enQueen's Gambit DeclinedAlekhine Variationrnbqkbnr/pppp1ppp/4p3/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2+a - ;e5d3b68f4e54884b9D51enQueen's Gambit DeclinedCapablanca, Anti-Cambridge Springs Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/P1N1P3/1P3PPP/R2QKBNR b KQkq - 0 6V - ; 4dc3b524c4e26bc4D52enQueen's Gambit Declinedr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 6K - ;9 56c19e75a78c252a*D54enQueen's Gambit DeclinedNeo-Orthodox Variationrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 6J - ;9295a5138249e71f4D54enQueen's Gambit DeclinedNeo-Orthodox Variationrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 65 - 73 be0ebcd399c77f0fD77enNeo-Grünfeld DefenseClassical Variationrnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 64 - 73 322d23f7dac8d408D77enNeo-Grünfeld DefenseClassical Variationrnbq1rk1/ppp1ppbp/5np1/3p4/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 0 63 - 73b74701e3461c9a2e.D77enNeo-Grünfeld DefenseClassical Variationrnbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b - - 4 52 - 73c9327ad73aef413e>D77enNeo-Grünfeld DefenseClassical Variationrnbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R w KQ - 3 51 - 73 c39a9760efb6a8d5D77enNeo-Grünfeld DefenseClassical Variationrnbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4e - /I56a13ddd2fe5d57azD45enSemi-Slav DefenseRubinstein (Anti-Meran) Systemr1bqkb1r/pp1n1ppp/2p1pn2/3pN3/2PP4/2N1P3/PP3PPP/R1BQKB1R b KQkq - 2 6 - /de9443b04de8727fD46enSemi-Slav DefenseMain Liner1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 62w - ;}85af1d7bc1f75091D50enQueen's Gambit DeclinedPseudo-Tarrasch Variation, Primitive Pillsbury Variationrnbqkb1r/pp3ppp/4pn2/3p2B1/2PQ4/2N2N2/PP2PPPP/R3KB1R b KQkq - 0 63v -;}f8180abff566bfacD50enQueen's Gambit DeclinedPseudo-Tarrasch Variation, Primitive Pillsbury Variationrnbqkb1r/pp3ppp/4pn2/3p2B1/2Pp4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 n  9"n} ! oooo ~ Q - 399f068ad623636596E11enBogo-Indian DefenseWade-Smyslov Variationrnbqk2r/1ppp1ppp/4pn2/p7/1bPP4/5N2/PP1BPPPP/RN1QKB1R w KQkq - 0 5zY - = c5adf44c64a5ea3d=E10enBlumenfeld Countergambitrnbqkb1r/p2p1ppp/4pn2/1ppP4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5yX -= a5a99e59ff085700E10enBlumenfeld Countergambitrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4I - 31 17a9908df9f3ecafE11enBogo-Indian DefenseExchange Variationrnbqk2r/pppp1ppp/4pn2/8/2PP4/5N2/PP1bPPPP/RN1QKB1R w KQkq - 0 5 P -39 191c3f1740ff6906E11enBogo-Indian DefenseWade-Smyslov Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP1BPPPP/RN1QKB1R b KQkq - 3 4ni - %58a947a97d332d77d}D90enSlav DefenseSchlechter Variationrnbqkb1r/pp2pp1p/2p2np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5A - 3/ 3c4703546e8488bcE11enBogo-Indian DefenseRetreat Variationrnbqk2r/ppppbppp/4pn2/8/2PP4/5N2/PP1BPPPP/RN1QKB1R w KQkq - 4 59 - 3+b2f1e7f5516ecc05E11enBogo-Indian DefenseHaiti Variationr1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/5N2/PP1BPPPP/RN1QKB1R w KQkq - 4 51 - 31ff6deeb9bfb8627b{E11enBogo-Indian DefenseVitolins Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/5N2/PP1BPPPP/RN1QKB1R w KQkq - 0 5 ) - 37 82e3e06781c3c76clE11enBogo-Indian DefenseNimzowitsch Variationrnb1k2r/ppppqppp/4pn2/8/1bPP4/5N2/PP1BPPPP/RN1QKB1R w KQkq - 4 5"! - 5aa06f3410eeff3740@E12enNimzo-Indian DefenseThree Knights Variation, Duchamp Variationrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5 dM$ - 9c714fac11cc1ca77d}E15enQueen's Indian DefenseFianchetto Variation, Nimzowitsch Variationrn1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5  + 99ecfb671f56f0a18E15enQueen's Indian DefenseFianchetto Traditionalrn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5 a - /;a852aace5fb5cf6clD90enGrünfeld DefenseThree Knights Variationrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5f+p - /1 cda0e0436eda71e6D85enGrünfeld DefenseExchange Variationrnbqkb1r/ppp1pp1p/5np1/3P4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4 S  S U1^^^^^^^^^^^^^  - ;W 9cfb0812ba897664dD22enQueen's Gambit AcceptedAlekhine Defense, Haberditz Variationrnbqkbnr/2p1pppp/p7/1p6/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 -;Wfcff62072124cb59YD22enQueen's Gambit AcceptedAlekhine Defense, Haberditz Variationrnbqkbnr/1pp1pppp/p7/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4>y - ;+ 215e35d5234b091bD25enQueen's Gambit AcceptedWinawer Defensern1qkb1r/ppp1pppp/4bn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5 q - ;? 77356d332c7b7cf9D25enQueen's Gambit AcceptedJanowski-Larsen Variationrn1qkb1r/ppp1pppp/5n2/8/2pP2b1/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5i - ;/ 9c52f45a1071e058XD25enQueen's Gambit AcceptedSmyslov Variationrnbqkb1r/ppp1pp1p/5np1/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5a + ;U 391553073dce241AD26enQueen's Gambit AcceptedNormal Variation, Traditional Systemrnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 Y - ;-73a11080fec097ecD30enQueen's Gambit DeclinedVienna Variationrnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/5N2/PP2PPPP/RN1QKB1R w KQkq - 2 5hEQ - ;!281732e022e316dbD30enQueen's Gambit DeclinedCapablancarnbqkb1r/ppp2pp1/4pn1p/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R w KQkq - 0 5I - /1 9cbfd63a4f5b7a11D31enSemi-Slav DefenseNoteboom Variationrnbqkbnr/pp3ppp/2p1p3/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5H -/14eb9ef081d6594f2D31enSemi-Slav DefenseNoteboom Variationrnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 b I wYb* bbS - ;K6a918347eda372e6D20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnb1kbnr/ppp1qppp/8/8/2Bp4/PQ2P3/1P3PPP/RNB1K1NR b KQkq - 0 6K t - %I84ced8537b7812e0D17enSlav DefenseCzech Variation, Krause Attackrn1qkb1r/pp2pppp/2p2n2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R b KQkq - 2 6 i - %E6845c2d63985b5311D17enSlav DefenseCzech Variation, Bled Attackrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP3N/2N5/1P2PPPP/R1BQKB1R b KQkq - 2 6^ - %Of4db452e04aaff322D18enSlav DefenseCzech Variation, Classical Systemrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6H - ;G f8630a033e125496D20enQueen's Gambit AcceptedOld Variation, Novikov Gambitrnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2P3/PP1N1PPP/R1B1K1NR b KQkq - 3 6R -;Ka10db261a4effca6D20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2P3/PP3PPP/RNB1K1NR w KQkq - 2 6Q -;K3af26d1165d352ccD20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnbqkbnr/ppp2ppp/8/8/2Bp4/1Q2P3/PP3PPP/RNB1K1NR b KQkq - 1 5P ';Kbcea950e8fa2a*D20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnbqkbnr/ppp2ppp/8/8/2Bp4/4P3/PP3PPP/RNBQK1NR w KQkq - 0 5O -;K9b75c42b9493ee3f?D20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnbqkbnr/ppp2ppp/8/4p3/2BP4/4P3/PP3PPP/RNBQK1NR b KQkq - 0 4N -;K7f1477483d07aa8eD20enQueen's Gambit AcceptedOld Variation, Billinger Gambitrnbqkbnr/ppp2ppp/8/4p3/2pP4/4P3/PP3PPP/RNBQKBNR w KQkq - 0 4 ,}~ -%'152577a38aaeabe2D15enSlav DefenseGeller Gambitrnbqkb1r/p3pppp/2p2n2/1p6/2pPP3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6= - ;I1d98735f5aae8ab4D20enQueen's Gambit AcceptedOld Variation, Korchnoi Gambitrnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2P3/PP3PPP/RNB2KNR b kq - 3 62 - ;O7a695e97cc099d9bD20enQueen's Gambit AcceptedOld Variation, Christensen Gambitrnb1kbnr/ppp1qppp/8/8/2Bp4/1Q2PN2/PP3PPP/RNB1K2R b KQkq - 3 6' - ;Y d632aa344e31870d D22enQueen's Gambit AcceptedAlekhine Defense, Alatortsev Variationrn1qkbnr/1pp2ppp/p3p3/3P4/2B3b1/4PN2/PP3PPP/RNBQK2R b KQkq - 0 6& -;Y 6c3ae967d7171150PD22enQueen's Gambit AcceptedAlekhine Defense, Alatortsev Variationrn1qkbnr/1pp2ppp/p3p3/8/2BP2b1/4PN2/PP3PPP/RNBQK2R w KQkq - 0 6% -;Y 1a4d1b56cf358102D22enQueen's Gambit AcceptedAlekhine Defense, Alatortsev Variationrn1qkbnr/1pp1pppp/p7/8/2BP2b1/4PN2/PP3PPP/RNBQK2R b KQkq - 0 5$ -;Y fe2ca83566a1c5b3D22enQueen's Gambit AcceptedAlekhine Defense, Alatortsev Variationrn1qkbnr/1pp1pppp/p7/8/2pP2b1/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5  -%[24f9f7bd8e25957d}D12enSlav DefenseExchange Variation, Schallopp Variationrn1qkb1r/ppp1pppp/5n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4~ - %'745c615e8eb08d86D15enSlav DefenseGeller Gambitrnbqkb1r/p3pppp/2p2n2/1p2P3/2pP4/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 6 - ;I7ff44cc959fc769dD26enQueen's Gambit AcceptedClassical Defense, Normal Linernbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 b kq - 1 6_ L~}  r O ' "sG - %[304e367439a3ddb8D12enSlav DefenseExchange Variation, Schallopp Variationrn1qkb1r/pp2pppp/5n2/3p1b2/3P4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 6 -%[ cbd92ed6fb415f61aD12enSlav DefenseExchange Variation, Schallopp Variationrn1qkb1r/pp2pppp/5n2/3p1b2/3P4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 6 -%[b8a9819f5b2b52dbD12enSlav DefenseExchange Variation, Schallopp Variationrn1qkb1r/pp2pppp/2p2n2/3P1b2/3P4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 5 - [ cdf7636b5c05eeb4C73enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6 + [ 9a70d7f4e3e0a9eC73enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5x - Ke8343774195c77c3C77enRuy LopezMorphy Defense, Duras Variationr1bqkb1r/1pp2ppp/p1np1n2/4p3/B1P1P3/3P1N2/PP3PPP/RNBQK2R b KQkq - 0 6w -K6417a8505a53dcc4C77enRuy LopezMorphy Defense, Duras Variationr1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 0 6m - 9cb5cd02b747dd0a7C80enRuy LopezOpen, Knorre Variationr1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/2N2N2/PPPP1PPP/R1BQ1RK1 b kq - 1 6b - U a6cd47abf8db09faC80enRuy LopezMorphy Defense, Tartakower Variationr1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPPQPPP/RNB2RK1 b kq - 1 6nW -  f5fee723a7567f3c > + %E8f941f0f5fe2b0b C52enItalian GameEvans Gambit, Slow Variationr1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQ1RK1 b kq - 2 63 - %Ib8d220433b2dffc8C53enItalian GameGiuoco Piano, Mestel Variationr1b1k1nr/ppppqppp/1bn5/4p1B1/2BPP3/2P2N2/PP3PPP/RN1QK2R b KQkq - 2 6( - %Ubb69c50c2139edecC53enItalian GameScotch Gambit, Walbrodt-Baird Gambitr1bqk2r/pppp1ppp/2n2n2/2b5/2BpP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 1 6' -%Uc51cbe385dca36fcC53enItalian GameScotch Gambit, Walbrodt-Baird Gambitr1bqk2r/pppp1ppp/2n2n2/2b5/2BpP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 0 6  j ` g }Ujjjjjjjjjj========- - /O46ea005db768f8d3C47enFour Knights GameScotch Variation, Belgrade Gambitr1bqkb1r/pppp1ppp/2n2n2/3N4/3pP3/5N2/PPP2PPP/R1BQKB1R b KQkq - 1 5  - /K6a83390e86bbfe87C47enFour Knights GameScotch Variation, Krause Gambitr1bqk2r/pppp1ppp/2n2n2/4N3/1b1PP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 5 -/Kd4c0cdf522a55bb1C47enFour Knights GameScotch Variation, Krause Gambitr1bqk2r/pppp1ppp/2n2n2/4p3/1b1PP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 1 5 - /-68b291e35c7905b5C48enFour Knights GameRanken Variationr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 0 5  -/-399dab05fa2fd58eC48enFour Knights GameRanken Variationr1bqkb1r/1ppp1ppp/p1n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 5 ) } - /=849f42eb68dd31daC48enFour Knights GameRubinstein Countergambitr1bqkb1r/pppp1ppp/5n2/4p3/3nP3/2N2N2/PPPPBPPP/R1BQK2R b KQkq - 7 5 %t - /md9b50f9596ba7ee8C48enFour Knights GameSpanish Variation, Rubinstein Variation Acceptedr1bqkb1r/pppp1ppp/5n2/1B2p3/3NP3/2N5/PPPP1PPP/R1BQK2R b KQkq - 0 5%k - /k42624d23dfb8b6e3C48enFour Knights GameRubinstein Countergambit, Henneberger Variationr1bqkb1r/pppp1ppp/5n2/1B2p3/3nP3/2N2N2/PPPP1PPP/R1BQ1RK1 b kq - 7 5 O$b - %ob8beb8ffde7a3920 C50enItalian GameGiuoco Pianissimo, Italian Four Knights Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2NP1N2/PPP2PPP/R1BQK2R b KQkq - 2 5  Li C qgQLLLLLLLLLbbbbbbb - #5 d28637e416b87dffC45enScotch GameTartakower Variationr1bqkb1r/p1pp1ppp/2p2n2/8/4P3/8/PPPN1PPP/R1BQKB1R b KQkq - 1 6~ -#58be88f868c45d5cfC45enScotch GameTartakower Variationr1bqkb1r/p1pp1ppp/2p2n2/8/4P3/8/PPP2PPP/RNBQKB1R w KQkq - 0 6} -#5567e57d109ee9e44DC45enScotch GameTartakower Variationr1bqkb1r/pppp1ppp/2N2n2/8/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 0 5Iu - /[e4bd6091dff85b26&C48enFour Knights GameSpanish Variation, Rubinstein Variationr1b1kb1r/ppppqppp/5n2/1B2N3/3nPP2/2N5/PPPP2PP/R1BQK2R b KQkq - 0 6t -/[19ab1d9cc66966afC48enFour Knights GameSpanish Variation, Rubinstein Variationr1b1kb1r/ppppqppp/5n2/1B2N3/3nP3/2N5/PPPP1PPP/R1BQK2R w KQkq - 1 6s -/[8254c2ec0755c8c5C48enFour Knights GameSpanish Variation, Rubinstein Variationr1bqkb1r/pppp1ppp/5n2/1B2N3/3nP3/2N5/PPPP1PPP/R1BQK2R b KQkq - 0 5 #( j + /77d99f95590407b0C49enFour Knights GameNimzowitsch (Paulsen)r1bq1rk1/pppp1ppp/2B2n2/4p3/1b2P3/2N2N2/PPPP1PPP/R1BQ1RK1 b - - 0 6 i -/756f6a573ff52d78bC49enFour Knights GameNimzowitsch (Paulsen)r1bq1rk1/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQ1RK1 w - - 8 6 h -/75c5e48c42a0b3e60`C49enFour Knights GameNimzowitsch (Paulsen)r1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQ1RK1 b kq - 7 5 _ - /)f85266a6bbc26c5f_C49enFour Knights GameDouble Spanishr1bq1rk1/pppp1ppp/2n2n2/1B2p3/1b2P3/2NP1N2/PPP2PPP/R1BQ1RK1 b - - 0 6T - %Q475e79a8bc88ab85C50enItalian GameGiuoco Pianissimo, Canal Variationr1bqk2r/ppp2ppp/2np1n2/2b1p1B1/2B1P3/2NP1N2/PPP2PPP/R2QK2R b KQkq - 1 6S -%Q81042e9e0c02704dMC50enItalian GameGiuoco Pianissimo, Canal Variationr1bqk2r/ppp2ppp/2np1n2/2b1p3/2B1P3/2NP1N2/PPP2PPP/R1BQK2R w KQkq - 0 6|z - #-ea91997b885bf3abC45enScotch GameMieses Variationr1bqkb1r/p1pp1ppp/2p2n2/4P3/8/8/PPP2PPP/RNBQKB1R b KQkq - 0 6 | = 6 1 .vnB - ' 1218d67f6ec2debfC44enScotch Gambitr1bqk1nr/pppp1ppp/2n5/8/1bB1P3/2P2N2/P4PPP/RNBQK2R b KQkq - 0 6nA -' 3b71096ed264cf5b[C44enScotch Gambitr1bqk1nr/pppp1ppp/2n5/8/1bB1P3/2p2N2/PP3PPP/RNBQK2R w KQkq - 0 6o@ -' faaea79071f555cbC44enScotch Gambitr1bqk1nr/pppp1ppp/2n5/8/1bBpP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5|7 - #+ 9f7bef421f63cbadC44enScotch GameVitzthum Attackr1bqk2r/pppp1ppp/2n4n/2b3NQ/2BpP3/8/PPP2PPP/RNB1K2R b KQkq - 5 6{6 -#+ 3f760c64330eed311C44enScotch GameVitzthum Attackr1bqk2r/pppp1ppp/2n4n/2b3N1/2BpP3/8/PPP2PPP/RNBQK2R w KQkq - 4 6 , - #;7f471e2544980ab2C45enScotch GameGhulam-Kassim Variationr1bqkbnr/ppp2ppp/3p4/8/3QP3/3B4/PPP2PPP/RNB1K2R b KQkq - 1 6+ -#;2a4abf877d18c8c1C45enScotch GameGhulam-Kassim Variationr1bqkbnr/ppp2ppp/3p4/8/3QP3/8/PPP2PPP/RNB1KB1R w KQkq - 0 6~* -#;13f029e6af6081acC45enScotch GameGhulam-Kassim Variationr1bqkbnr/pppp1ppp/8/8/3QP3/8/PPP2PPP/RNB1KB1R b KQkq - 0 5~) -#;ec715afdbf31efa4C45enScotch GameGhulam-Kassim Variationr1bqkbnr/pppp1ppp/8/8/3nP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 m! - # aab3a2525030c769iC45enScotch Gamer1b1k1nr/pppp1ppp/2n5/1N6/1b2P2q/8/PPPB1PPP/RN1QKB1R b KQkq - 4 6l -# 833ef8e7c251ac6dmC45enScotch Gamer1b1k1nr/pppp1ppp/2n5/1N6/1b2P2q/8/PPP2PPP/RNBQKB1R w KQkq - 3 6 - #/6d555766fc715e51QC45enScotch GameBlumenfeld Attackr1b1k1nr/pppp1ppp/2n2q2/1Nb5/4P3/4B3/PPP2PPP/RN1QKB1R b KQkq - 4 6 -#/983fbd0bfde16407C45enScotch GameBlumenfeld Attackr1b1k1nr/pppp1ppp/2n2q2/2b5/3NP3/4B3/PPP2PPP/RN1QKB1R w KQkq - 3 6~ -#/ 9f0720cc980827eaC45enScotch GameBlumenfeld Attackr1bqk1nr/pppp1ppp/2n5/2b5/3NP3/4B3/PPP2PPP/RN1QKB1R b KQkq - 2 5 o V E wA ;l --Yb39c162f9e03e173sC41enPhilidor DefensePhilidor Countergambit, del Rio Attackrnbqkbnr/ppp3pp/3p4/4P1N1/4p3/8/PPP2PPP/RNBQKB1R b KQkq - 1 5k --Ye54ef7fa37cf19d7C41enPhilidor DefensePhilidor Countergambit, del Rio Attackrnbqkbnr/ppp3pp/3p4/4P3/4p3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5j --Y 275d5ffc731e261cC41enPhilidor DefensePhilidor Countergambit, del Rio Attackrnbqkbnr/ppp3pp/3p4/4Pp2/4P3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4 c - -[f6e9af1ac6abd05b[C41enPhilidor DefenseLopez Countergambit, Jaenisch Variationrnbqkb1r/ppp3pN/3p3n/5p2/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 0 6b --[ 94536025845dc602C41enPhilidor DefenseLopez Countergambit, Jaenisch Variationrnbqkb1r/ppp3pp/3p3n/5pN1/2BpP3/8/PPP2PPP/RNBQK2R w KQkq - 2 6a --[15dfffc13edfab7b{C41enPhilidor DefenseLopez Countergambit, Jaenisch Variationrnbqkbnr/ppp3pp/3p4/5pN1/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 1 5` --[ 430d1e14971353dfC41enPhilidor DefenseLopez Countergambit, Jaenisch Variationrnbqkbnr/ppp3pp/3p4/5p2/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5_ --[ d8731496536847caC41enPhilidor DefenseLopez Countergambit, Jaenisch Variationrnbqkbnr/ppp3pp/3p4/4pp2/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4X - -M6af906c6401a4a73sC41enPhilidor DefenseLion Variation, Bishop Sacrificer1bqk2r/pppnbBpp/3p1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 0 6W --Mcb4a56eaa8fbe806C41enPhilidor DefenseLion Variation, Bishop Sacrificer1bqk2r/pppnbppp/3p1n2/4p3/2BPP3/2N2N2/PPP2PPP/R1BQK2R w KQkq - 5 6V --Mdf86250562504497C41enPhilidor DefenseLion Variation, Bishop Sacrificer1bqkb1r/pppn1ppp/3p1n2/4p3/2BPP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 4 5T&M - -qc31c0e0e3bdf5d83C44enPonziani OpeningSpanish Variation, Harrwitz Attack, Nikitin Gambitr1b1kbnr/ppp2ppp/2n5/1B1qN3/Q3p3/2P5/PP1P1PPP/RNB1K2R b KQkq - 2 6%L --q11b8b341fbe1aff8C44enPonziani OpeningSpanish Variation, Harrwitz Attack, Nikitin Gambitr1b1kbnr/ppp2ppp/2n5/1B1qN3/4p3/2P5/PP1P1PPP/RNBQK2R w KQkq - 1 6$K --q ce6ac7df5354badbC44enPonziani OpeningSpanish Variation, Harrwitz Attack, Nikitin Gambitr1bqkbnr/ppp2ppp/2n5/1B2N3/4p3/2P5/PP1P1PPP/RNBQK2R b KQkq - 0 5&J --q70293324f74a1fedC44enPonziani OpeningSpanish Variation, Harrwitz Attack, Nikitin Gambitr1bqkbnr/ppp2ppp/2n5/1B2p3/4p3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5  xd A ;h r6r - 9O da776be08658c576vC33enKing's Gambit AcceptedBishop's Gambit, McDonnell Attackrnb1k1nr/pppp1pbp/8/6p1/2B1Pp1q/2N3P1/PPPP3P/R1BQ1KNR b kq - 0 6q -9O f691d0a1668f1d4eNC33enKing's Gambit AcceptedBishop's Gambit, McDonnell Attackrnb1k1nr/pppp1pbp/8/6p1/2B1Pp1q/2N5/PPPP2PP/R1BQ1KNR w kq - 2 6p -9O 462ded179dc8d6e4C33enKing's Gambit AcceptedBishop's Gambit, McDonnell Attackrnb1kbnr/pppp1p1p/8/6p1/2B1Pp1q/2N5/PPPP2PP/R1BQ1KNR b kq - 1 5 rg - { 89f54bf0cad285d7C37enKing's Gambit Accepted, Rosentreter Gambit, Bird Gambitrnb1kbnr/pppp1p1p/8/4N3/3PPppq/6P1/PPP4P/RNBQKB1R b KQkq - 0 6f -{ a513f0b12a055defC37enKing's Gambit Accepted, Rosentreter Gambit, Bird Gambitrnb1kbnr/pppp1p1p/8/4N3/3PPppq/8/PPP3PP/RNBQKB1R w KQkq - 2 6 N\ - U 7bd30953462d977azC37enKing's Gambit Accepted, Kotov Gambitrnbqkbnr/pppp1p1p/8/8/2BPPB2/5p2/PPP3PP/RN1QK2R b KQkq - 0 6[ -U db82ef7e9d4907ddC37enKing's Gambit Accepted, Kotov Gambitrnbqkbnr/pppp1p1p/8/8/2BPPp2/5p2/PPP3PP/RNBQK2R w KQkq - 0 6 Q - e 92811b512424290a C37enKing's Gambit Accepted, Ghulam-Kassim Gambitrnbqkbnr/pppp1p1p/8/8/2BPPp2/5Q2/PPP3PP/RNB1K2R b KQkq - 0 6F - U 1ea5006f7a3d6befC38enKing's Gambit Accepted, Mayet Gambitrnbqk1nr/ppp2pbp/3p4/6p1/2BPPp2/2P2N2/PP4PP/RNBQK2R b KQkq - 0 6E -U 687ff8f7aa4d6469iC38enKing's Gambit Accepted, Mayet Gambitrnbqk1nr/ppp2pbp/3p4/6p1/2BPPp2/5N2/PPP3PP/RNBQK2R w KQkq - 0 6D -U 51c56e9678352d04C38enKing's Gambit Accepted, Mayet Gambitrnbqk1nr/pppp1pbp/8/6p1/2BPPp2/5N2/PPP3PP/RNBQK2R b KQkq - 0 5  _ B r R:B - f552ee1777658429)C32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Old Linernbqkbnr/pppp1ppp/8/4p3/4P+*+ -  d4c5b462704c058dC32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Keres Variationrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR b KQkq - 2 5)* -  8dab0c00eab1adbdC32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Keres Variationrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 5 -  34d834ae81c675c9C32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit Acceptedrnbqkb1r/ppp2ppp/5n2/3P4/4PP2/8/PPP3PP/RNBQKBNR b KQkq - 0 5A#" -  1bad8322a4f5f6399C32enKing's Gambit, Falkbeer Countergambit, Charousek Gambit, Old Linernbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP1Q1PP/RNB1KBNR b KQkq - 2 5% + 9m 7988e8673570286C33enKing's Gambit AcceptedBishop's Gambit, Classical Defense, Cozio Attackrnb1kbnr/pppp1p1p/8/6p1/2B1Pp1q/5Q2/PPPP2PP/RNB2KNR b kq - 1 5 J - 9K772a330d4e187852RC33enKing's Gambit AcceptedBishop's Gambit, Paulsen Attackrnbqk2r/pppp1ppp/5n2/4P3/1bB2p2/2N5/PPPP2PP/R1BQK1NR b KQkq - 0 5 -9K 165325f04a065e366C33enKing's Gambit AcceptedBishop's Gambit, Paulsen Attackrnbqk2r/pppp1ppp/5n2/8/1bB1Pp2/2N5/PPPP2PP/R1BQK1NR w KQkq - 4 5"5~ -  35d014e37987050a C34enKing's Gambit Accepted, Fischer Defense, Spanish Variationrnbqkb1r/ppp2ppp/3p1n2/8/3PPp2/3B1N2/PPP3PP/RNBQK2R b KQkq - 2 5} - 60ddb5414007c779yC34enKing's Gambit Accepted, Fischer Defense, Spanish Variationrnbqkb1r/ppp2ppp/3p1n2/8/3PPp2/5N2/PPP3PP/RNBQKB1R w KQkq - 1 5| - 3b3381b4edfd86efC34enKing's Gambit Accepted, Fischer Defense, Spanish Variationrnbqkbnr/ppp2ppp/3p4/8/3PPp2/5N2/PPP3PP/RNBQKB1R b KQkq - 0 4=u -  b143ada9d1b6f9f6C34enKing's Gambit Accepted, Schallopp Defense, Tashkent Attackrnbqkb1r/pppp1ppp/8/4P2n/5pP1/5N2/PPPP3P/RNBQKB1R b KQkq g3 0 5 I e2 XcHHHHHH Xy - } aa8657728d200ff0C30enKing's Gambit Declined, Classical Variation, Euwe Attackrn1qk1nr/ppp2ppp/8/2b1p3/Q3P1b1/2P2N2/PP1P2PP/RNB1KB1R b KQkq - 1 6 -} 7822ea3d4d1efd8bC30enKing's Gambit Declined, Classical Variation, Euwe Attackrn1qk1nr/ppp2ppp/8/2b1p3/4P1b1/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 0 6 -} 4207ead2fc50b302C30enKing's Gambit Declined, Classical Variation, Euwe Attackrn1qk1nr/ppp2ppp/3p4/2b1P3/4P1b1/2P2N2/PP1P2PP/RNBQKB1R b KQkq - 0 5 -} ce98e271903c4796C30enKing's Gambit Declined, Classical Variation, Euwe Attackrn1qk1nr/ppp2ppp/3p4/2b1p3/4PPb1/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 1 5}  - 9A1f69f5d5c955895e^C32enKing's Gambit DeclinedFalkbeer, Charousek Gambitrnbqkb1r/ppp2ppp/8/3P4/4nP2/8/PPP1Q1PP/RNB1KBNR b KQkq - 1 6  -9A896f7af78711d2daC32enKing's Gambit DeclinedFalkbeer, Charousek Gambitrnbqkb1r/ppp2ppp/8/3P4/4nP2/8/PPP3PP/RNBQKBNR w KQkq - 0 6} - 9Q564cd70e15bf3469iC33enKing's Gambit AcceptedBishop's Gambit, Chigorin's Attackrnb1kbnr/ppp2p1p/8/3B2p1/4Pp1q/6P1/PPPP3P/RNBQ1KNR b kq - 0 6| -9Q7aaa6c4ff568ec51QC33enKing's Gambit AcceptedBishop's Gambit, Chigorin's Attackrnb1kbnr/ppp2p1p/8/3B2p1/4Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 0 6z -9Qb893277c574ae591C33enKing's Gambit AcceptedBishop's Gambit, Chigorin's Attackrnb1kbnr/ppp2ppp/8/3p4/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 0 5  ` y 4aE4 - #Oaed80f488f356e94C29enVienna GameVienna Gambit, Kaufmann Variationrn1qkb1r/ppp2ppp/8/3pP3/4n1b1/2N2N2/PPPPQ1PP/R1B1KB1R b KQkq - 3 63 -#O38de806ac1713510C29enVienna GameVienna Gambit, Kaufmann Variationrn1qkb1r/ppp2ppp/8/3pP3/4n1b1/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 6) - 'i30ee40c476ea6ca5C30enKing's GambitPanteldakis Countergambit, Pawn Sacrifice Linernb1kbnr/ppppq2p/6P1/7Q/5p2/8/PPPP2PP/RNBK1BNR b kq - 2 6( -'i678fdbf8cc2d04ebC30enKing's GambitPanteldakis Countergambit, Pawn Sacrifice Linernb1kbnr/ppppq2p/6P1/7Q/5p2/8/PPPP2PP/RNB1KBNR w KQkq - 1 6' -'ifc7004880d11aa81C30enKing's GambitPanteldakis Countergambit, Pawn Sacrifice Linernbqkbnr/pppp3p/6P1/7Q/5p2/8/PPPP2PP/RNB1KBNR b KQkq - 0 5& -'i2dc23622ed4733333C30enKing's GambitPanteldakis Countergambit, Pawn Sacrifice Linernbqkbnr/pppp3p/6p1/5P1Q/5p2/8/PPPP2PP/RNB1KBNR w KQkq - 0 5 + 'me15ab37b9c496eaC30enKing's GambitPanteldakis Countergambit, Symmetrical Variationrnbqk1nr/ppp3pp/3b4/3p1P2/3P1p2/3B1N2/PPP3PP/RNBQK2R b KQkq - 2 6 -'m 5b180a9580445499C30enKing's GambitPanteldakis Countergambit, Symmetrical Variationrnbqk1nr/ppp3pp/3b4/3p1P2/3P1p2/5N2/PPP3PP/RNBQKB1R w KQkq - 1 6 -'m ff4067175f5e85bdC30enKing's GambitPanteldakis Countergambit, Symmetrical Variationrnbqkbnr/ppp3pp/8/3p1P2/3P1p2/5N2/PPP3PP/RNBQKB1R b KQkq - 0 5 -'m3a7548bd4e97a8ffC30enKing's GambitPanteldakis Countergambit, Symmetrical Variationrnbqkbnr/ppp3pp/8/3p1P2/5p2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 5 -'mbf1f6aa9d243e6d9C30enKing's GambitPanteldakis Countergambit, Symmetrical Variationrnbqkbnr/pppp2pp/8/5P2/5p2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 4  n  Q d#nnnnnnnnnnnnnnnnnnnj -#370d0d04bc0476c59YC25enVienna GameHamppe-Muzio Gambitr1bqkbnr/pppp1p1p/2n5/8/2B1Ppp1/2N2N2/PPPP2PP/R1BQK2R w KQkq - 0 6` - #Wd912199feaf73b25%C25enVienna GameVienna Gambit, Hamppe-Allgaier Gambitr1bqkbnr/pppp1p1p/2n5/6N1/4PppP/2N5/PPPP2P1/R1BQKB1R b KQkq - 1 6_ -#W8fc0f84a433bc381C25enVienna GameVienna Gambit, Hamppe-Allgaier Gambitr1bqkbnr/pppp1p1p/2n5/8/4PppP/2N2N2/PPPP2P1/R1BQKB1R w KQkq - 0 6^ -#W8b2694cbc2b443eeC25enVienna GameVienna Gambit, Hamppe-Allgaier Gambitr1bqkbnr/pppp1p1p/2n5/6p1/4Pp1P/2N2N2/PPPP2P1/R1BQKB1R b KQkq - 0 5Si -#37436bcca41c8ec366C25enVienna GameHamppe-Muzio Gambitr1bqkbnr/pppp1p1p/2n5/6p1/2B1Pp2/2N2N2/PPPP2PP/R1BQK2R b KQkq - 1 5U - #O81ca785e19e534f0C26enVienna GamePaulsen Variation, Pollock Gambitr1bqk2r/ppp2ppp/2n2n2/2bPp3/8/2N3P1/PPPPNPBP/R1BQK2R b KQkq - 0 6 Q -#O9c36632a66e4902d-C26enVienna GamePaulsen Variation, Pollock Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/4P3/2N3P1/PPPP1PBP/R1BQK1NR b KQkq - 2 4P -#O29c640572b094854TC26enVienna GamePaulsen Variation, Pollock Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/4P3/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 1 4 ({J - #'d590f8db845cce51QC27enVienna GameAdams' Gambitr1bqkb1r/pppp1ppp/2nn4/4p2Q/3P4/1BN5/PPP2PPP/R1B1K1NR b KQkq - 0 6zI -#'10a5d7719595e313C27enVienna GameAdams' Gambitr1bqkb1r/pppp1ppp/2nn4/4p2Q/8/1BN5/PPPP1PPP/R1B1K1NR w KQkq - 4 6wz? + #+ a1194ae6d2e0ce0C29enVienna GameHeyde Variationrnbqkb1r/ppp3pp/8/3pPp2/3Pn3/2N2Q2/PPP3PP/R1B1KBNR b KQkq - 0 6  lX ' <!llllllllllIIIIIII#Y - )14c501d8620d409b7C11enFrench DefenseSteinitz Variationrnbqkb1r/pp1n1ppp/4p3/2ppP3/3P1P2/2N2N2/PPP3PP/R1BQKB1R b KQkq - 1 6X -)19734f1704832688aC11enFrench DefenseSteinitz Variationrnbqkb1r/pp1n1ppp/4p3/2ppP3/3P1P2/2N5/PPP3PP/R1BQKBNR w KQkq - 0 6W -)1714520deb77563f7C11enFrench DefenseSteinitz Variationrnbqkb1r/pppn1ppp/4p3/3pP3/3P1P2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 5 `N - )_fc1cc55d56425f11C12enFrench DefenseMacCutcheon Variation, Chigorin Variationrnbqk2r/ppp2pp1/4pP1p/3p2B1/1b1P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6M -)_e8f82b236f810d74tC12enFrench DefenseMacCutcheon Variation, Chigorin Variationrnbqk2r/ppp2pp1/4pn1p/3pP1B1/1b1P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 6>%C - )s2ea27c15df0bd6bcC12enFrench DefenseMacCutcheon Variation, Dr. Olland (Dutch) Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 68 - )_a57ce153f116483b;C12enFrench DefenseMacCutcheon Variation, Janowski Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P4/2N1B3/PPP2PPP/R2QKBNR b KQkq - 1 6- - )ab27743e09c3f2fefC12enFrench DefenseMacCutcheon Variation, Bernstein Variationrnbqk2r/ppp2pp1/4pn1p/3pP3/1b1P3B/2N5/PPP2PPP/R2QKBNR b KQkq - 1 6" - );c266e5237ffa5059YC13enFrench DefenseAlekhine-Chatard Attackrnbqk2r/pppnbppp/4p3/3pP1B1/3P3P/2N5/PPP2PP1/R2QKBNR b KQkq - 0 6! -); 5ec5790ad4c52927'C13enFrench DefenseAlekhine-Chatard Attackrnbqk2r/pppnbppp/4p3/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 1 6# - )s 554638cb8f9515c4C15enFrench DefenseWinawer Variation, Exchange Variation, Canal Attackrnbqk2r/ppp1nppp/8/3p3Q/1b1P4/2NB4/PPP2PPP/R1B1K1NR b KQkq - 3 6 4b [ >p 444444444llllllllll1 + -K dd210cf5a411548HB90enSicilian DefenseNajdorf Variation, Freak Attackrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKBR1 b Qkq - 1 6$ - -m25449e4ead2b57baB91enSicilian DefenseNajdorf Variation, Zagreb (Fianchetto) Variationrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6 - -Y 7a22a6f64cd9c521!B92enSicilian DefenseNajdorf Variation, Opocensky Variationrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6& - -Ke151f8b18f5f4670pB90enSicilian DefenseNajdorf Variation, Adams Attackrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N4P/PPP2PP1/R1BQKB1R b KQkq - 0 6 - -Y f4b45802546db20b B93enSicilian DefenseNajdorf Variation, Amsterdam Variationrnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6z - -/cff87239fd76544aJB94enSicilian DefenseNajdorf Variationrnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6o - )E392ca071b9770c9bC02enFrench DefenseAdvance Variation, Main Liner1b1kbnr/pp3ppp/1qn1p3/2ppP3/3P4/P1P2N2/1P3PPP/RNBQKB1R b KQkq - 0 6n -)Ef2b09157f03b82dbC02enFrench DefenseAdvance Variation, Main Liner1b1kbnr/pp3ppp/1qn1p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R w KQkq - 3 6sd - )Ya7bd30f5c9bb40a8C02enFrench DefenseAdvance Variation, Milner-Barry Gambitr1b1kbnr/pp3ppp/1qn1p3/2ppP3/3P4/2PB1N2/PP3PPP/RNBQK2R b KQkq - 4 6  sg W 7_sssssssssEEEEEEEEEE.y - -41e93c4b5069fe9bB72enSicilian DefenseDragonrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 - -a 9efcf762d76a748fB80enSicilian DefenseScheveningen Variation, Vitolins Variationrnbqkb1r/pp3ppp/3ppn2/1B6/3NP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6  - -e 81c49d8c52293f344B80enSicilian DefenseScheveningen Variation, Fianchetto Variationrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6~ + -U e6f271b5a8b0a11B81enSicilian DefenseScheveningen Variation, Keres Attackrnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6s - -] 50345bc0ab6fda85B82enSicilian DefenseScheveningen Variation, Matanovic Attackrnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6h - -c dea2a534b3dbadafB83enSicilian DefenseScheveningen Variation, Classical Variationrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6|] - -% ce9192e59abd31aaB86enSicilian DefenseSozin Attackrnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6R - -O7aaa9ee3ccc6940c B90enSicilian DefenseNajdorf Variation, English Attackrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 G - -? 6a11912765bf5924$B90enSicilian DefenseNajdorf, Lipnitsky Attackrnbqkb1r/1p2pppp/p2p1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6< - -Maaef24d9a589629fB90enSicilian DefenseNajdorf Variation, Dekker Gambitrnbqkb1r/1p2pppp/p2p1n2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6  B S  _}^^^^^^0 2 - 356d020de17369158dB27enPterodactyl DefenseSicilian, Pteranodonrnb1k1nr/pp1ppp1p/6p1/q1P5/4P3/2P2N2/P1P2PPP/R1BQKB1R b KQkq - 0 6 1 -3526d767d0de35facdB27enPterodactyl DefenseSicilian, Pteranodonrnb1k1nr/pp1ppp1p/6p1/q1P5/4P3/2b2N2/PPP2PPP/R1BQKB1R w KQkq - 0 6 R9' - -39f065e4b0d24555UB31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambitr1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/3PP3/2P2N2/PP3PPP/RNBQ1RK1 b kq - 0 6:& --fcc54a4ea11b6817B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambitr1bqk1nr/pp1p1pbp/2n3p1/1Bp1p3/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 w kq - 0 68% --76bd420432fe9021!B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambitr1bqk1nr/pp1pppbp/2n3p1/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 55$ )-67ba9ce28e9fa7B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambitr1bqk1nr/pp1pppbp/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 2 56# --b0db872a19c9540d B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Gufeld Gambitr1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 4v9 - -fff7cbbe5f3a23ccB31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Totsky Attackr1bqk2r/pp1pppbp/2n2np1/1Bp5/Q3P3/2P2N2/PP1P1PPP/RNB2RK1 b kq - 2 69 --2d5376f19f04d1b7B31enSicilian DefenseNyezhmetdinov-Rossolimo Attack, Fianchetto Variation, Totsky Attackr1bqk2r/pp1pppbp/2n2np1/1Bp5/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 w kq - 1 6 u  = T8l ^ - -a b959c56ec893fd18B21enSicilian DefenseSmith-Morra Gambit Accepted, Kan Formationrnbqkbnr/1p1p1ppp/p3p3/8/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6] --a 6bae349d2fb305c4B21enSicilian DefenseSmith-Morra Gambit Accepted, Kan Formationrnbqkbnr/pp1p1ppp/4p3/8/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5\ --ab0cad86b475564f9B21enSicilian DefenseSmith-Morra Gambit Accepted, Kan Formationrnbqkbnr/pp1p1ppp/4p3/8/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5e --kc6bd2a5a5f77f4abB21enSicilian DefenseSmith-Morra Gambit Accepted, Fianchetto Defensernbqkbnr/pp1ppppp/8/8/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4  T - -g7362768ede5f3784B22enSicilian DefenseAlapin Variation, Barmen Defense, Modern Linern2kb1r/pp2pppp/5n2/2pq4/3P2b1/2P2N2/PP3PPP/RNBQKB1R w KQkq - 3 6S --g 71b1bcbc99da396enB22enSicilian DefenseAlapin Variation, Barmen Defense, Modern Linernb1kb1r/pp2pppp/5n2/2pq4/3P4/2P2N2/PP3PPP/RNBQKB1R b KQkq - 2 5R --g aad5504af13c5853SB22enSicilian DefenseAlapin Variation, Barmen Defense, Modern Linernb1kb1r/pp2pppp/5n2/2pq4/3P4/2P5/PP3PPP/RNBQKBNR w KQkq - 1 5Q --gf13b64bf5cc619c5B22enSicilian DefenseAlapin Variation, Barmen Defense, Modern Linernb1kbnr/pp2pppp/8/2pq4/3P4/2P5/PP3PPP/RNBQKBNR b KQkq - 0 4&{J - -633729db6a3fc628(B25enSicilian DefenseClosedr1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6{I - -5a8dbfbab8478f45EB25enSicilian DefenseClosedr1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR b KQkq - 0 5 { Hu AaHHHHHHHHHHHHHHHHHH] --Kd6b140a4fc712efcB22enSicilian DefenseAlapin Variation, Stoltz Attackr1bqkb1r/pp1ppppp/1nn5/2p1P3/2B5/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 5 6\ --Kff2acfabe43445b2B22enSicilian DefenseAlapin Variation, Stoltz Attackr1bqkb1r/pp1ppppp/2n5/2pnP3/2B5/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 4 5 S - -W35098e0ef8441f73sB23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqk1nr/pp1p1pbp/2n1p1p1/2p2P2/2B1P3/2N2N2/PPPP2PP/R1BQK2R b KQkq - 0 6R --W5e8933b110fb2e90B23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqk1nr/pp1p1pbp/2n1p1p1/2p5/2B1PP2/2N2N2/PPPP2PP/R1BQK2R w KQkq - 0 6Q --W28fec18008d9bec2B23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqk1nr/pp1pppbp/2n3p1/2p5/2B1PP2/2N2N2/PPPP2PP/R1BQK2R b KQkq - 3 5P --W4b4d75a8209a6864dB23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqk1nr/pp1pppbp/2n3p1/2p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 5O --Wfbf1481edbdda3ceB23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqkbnr/pp1ppp1p/2n3p1/2p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4N --W2095a4e8b33bc2f3B23enSicilian DefenseGrand Prix Attack, Schofman Variationr1bqkbnr/pp1ppp1p/2n3p1/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4 :H - --9e2154d673aefba1B25enSicilian DefenseClosed Variationr1bqk1nr/pp2ppbp/2np2p1/2p5/4PP2/2NP2P1/PPP3BP/R1BQK1NR b KQkq - 0 6;= - --103f9237eb05dda6B26enSicilian DefenseClosed Variationr1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6  ~ q Y C +U}>! - 'Se52cecebbed3b5fdA83enDutch DefenseStaunton Gambit, Chigorin Variationrnbqkb1r/pp1pp1pp/2p2n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5 - '7 e68c77f1a9ca4ea0A90enDutch DefenseNimzo-Dutch Variationrnbqk2r/pppp2pp/4pn2/5p2/1bPP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5 - '3 3b016d1828962a13A91enDutch DefenseClassical Variationrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5#| Y - 5;ee089a0e8c16d674tB01enScandinavian DefenseAnderssen Counterattackrnb1kbnr/ppp2ppp/8/q3p3/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5X -5;647092441ff32e42BB01enScandinavian DefenseAnderssen Counterattackrnb1kbnr/ppp1pppp/8/q7/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4z3 - 3 10c697bf3c4f0945EB00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Nimzowitsch Gambitr1bqkbnr/ppp1pppp/8/3Pn3/4p3/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5 - 3Q1907d48c60af329cB00enNimzowitsch DefenseKennedy Variation, Riemann Defenser1bqkbnr/pppp1ppp/2n5/8/4PP2/8/PPP3PP/RNBQKBNR w KQkq - 1 5 -3Qe95ac9c7af4018fcB00enNimzowitsch DefenseKennedy Variation, Riemann Defenser1bqkbnr/pppp1ppp/8/4n3/4PP2/8/PPP3PP/RNBQKBNR b KQkq - 0 4 y - 3Edb55775af756341dB00enNimzowitsch DefenseKennedy Variation, Main Liner1bqkbnr/pppp1ppp/6n1/8/4PP2/8/PPP3PP/RNBQKBNR w KQkq - 1 5q - 314249e0a8767c9ed3B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkb1r/pppp2pp/2n1pn2/5P2/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5p -31 19a7d45ddb86df45EB00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp2pp/2n1p3/5P2/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4o -31f56be0129901f682B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp2pp/2n1p3/5p2/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4n -31 6104868b2789db5c\B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp1ppp/2n1p3/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3m -31 9a939e29e56b5985B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp1ppp/2n1p3/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3i - 3162ba14fcdc787d377B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkb1r/pppp2pp/2n1pn2/5P2/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 5h -31 3954200971823ca1B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp2pp/2n1p3/5P2/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4g -31d598144633051566fB00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp2pp/2n1p3/5p2/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4f -31 41f772df8d8d38b8B00enNimzowitsch DefenseFranco-Hiva Gambitr1bqkbnr/pppp1ppp/2n1p3/8/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3}a - %-351cf4e052e6e700B00enBorg DefenseLanghorst Gambitrnbqkbnr/p2p1p1p/1p2p3/2P3p1/4P3/2P5/PP3PPP/RNBQKBNR w KQkq - 0 5~` -%- 5e75bdf0ac65509bB00enBorg DefenseLanghorst Gambitrnbqkbnr/pp1p1p1p/4p3/2P3p1/4P3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 4_ -%-21969f204f7907f7B00enBorg DefenseLanghorst Gambitrnbqkbnr/pp1p1p1p/4p3/2p3p1/3PP3/2P5/PP3PPP/RNBQKBNR w KQkq - 0 4}^ -%- c7e74e8eb03e0c8aB00enBorg DefenseLanghorst Gambitrnbqkbnr/pppp1p1p/4p3/6p1/3PP3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 3{] -%- b13db616604e030c B00enBorg DefenseLanghorst Gambitrnbqkbnr/pppp1p1p/4p3/6p1/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3} c, Fd6kkkk /E - /I13670af34b0ffe12A45enTrompowsky AttackEdge Variation, Hergert Gambitrn1qkb1r/ppp1pppp/5n2/3p1b2/3PP2B/2N2P2/PPP3PP/R2QKBNR b KQkq - 0 6D -/Id76007bba08f4318A45enTrompowsky AttackEdge Variation, Hergert Gambitrn1qkb1r/ppp1pppp/5n2/3p1b2/3P3B/2N2P2/PPP1P1PP/R2QKBNR w KQkq - 3 6C -/I54796e35176a4a95A45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/ppp1pppp/5n2/3p4/3P3B/2N2P2/PPP1P1PP/R2QKBNR b KQkq - 2 5B -/Iafee7697d588c84cLA45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/ppp1pppp/5n2/3p4/3P3B/5P2/PPP1P1PP/RN1QKBNR w KQkq - 1 5A -/I 95e63a0867c145b6A45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/ppp1pppp/8/3p4/3Pn2B/5P2/PPP1P1PP/RN1QKBNR b KQkq - 0 4@ -/I fb57dc39c70baac7A45enTrompowsky AttackEdge Variation, Hergert Gambitrnbqkb1r/ppp1pppp/8/3p4/3Pn2B/8/PPP1PPPP/RN1QKBNR w KQkq - 0 4: + 9M 9901b621682cfb5A47enQueen's Indian DefenseMarienbad System, Berg Variationrn1qkb1r/pb1ppppp/1p3n2/8/2PQ4/5NP1/PP2PPBP/RNB1K2R b KQkq - 0 69 -9M 74270ca622132088A47enQueen's Indian DefenseMarienbad System, Berg Variationrn1qkb1r/pb1ppppp/1p3n2/8/2Pp4/5NP1/PP2PPBP/RNBQK2R w KQkq - 0 68 -9M2b39b6935fe7494eNA47enQueen's Indian DefenseMarienbad System, Berg Variationrn1qkb1r/pb1ppppp/1p3n2/2p5/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 0 5/ - /O2b20ff9775f9a5e4A48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbq1rk1/ppp1ppbp/5np1/3p4/3P1B2/2N1PN2/PPP1BPPP/R2QK2R b KQ - 2 6. -/O58a07c6e74dcef47GA48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbq1rk1/ppp1ppbp/5np1/3p4/3P1B2/2N1PN2/PPP2PPP/R2QKB1R w KQ - 1 6- -/O520891d9a18506acA48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbqk2r/ppp1ppbp/5np1/3p4/3P1B2/2N1PN2/PPP2PPP/R2QKB1R b KQkq - 0 5, -/Off25d36b85da8e08A48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbqk2r/ppp1ppbp/5np1/3p4/3P1B2/2N2N2/PPP1PPPP/R2QKB1R w KQkq - 2 5+ -/O4f99eedd7e9d45a2A48enQueen's Pawn GameBarry Attack, Grünfeld Variationrnbqkb1r/ppp1pp1p/5np1/3p4/3P1B2/2N2N2/PPP1PPPP/R2QKB1R b KQkq - 1 4  L IiLLLLLLLLLLLLLLLL b -/= ff8511e6a483aa6clA05enZukertort OpeningDouble Fianchetto Attackrnbqk2r/ppppppbp/5np1/8/8/1P3NP1/PBPPPP1P/RN1QKB1R b KQkq - 2 4 a -/= 3ff9fbe3691f3683A05enZukertort OpeningDouble Fianchetto Attackrnbqk2r/ppppppbp/5np1/8/8/1P3NP1/P1PPPP1P/RNBQKB1R w KQkq - 1 4 ` -/= 8f45c6559258fd29)A05enZukertort OpeningDouble Fianchetto Attackrnbqkb1r/pppppp1p/5np1/8/8/1P3NP1/P1PPPP1P/RNBQKB1R b KQkq - 0 3O[ - )] 221936b549d7db7azA15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbq1rk1/ppp1ppbp/3p1np1/8/1PPP4/4PN2/PB3PPP/RN1QKB1R b KQ - 0 6Z -)]e72c191f581ef6388A15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbq1rk1/ppp1ppbp/3p1np1/8/1PP5/4PN2/PB1P1PPP/RN1QKB1R w KQ - 0 6Y -)] de968f7e8a66bf55UA15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbq1rk1/ppppppbp/5np1/8/1PP5/4PN2/PB1P1PPP/RN1QKB1R b KQ - 0 5X -)] 73bbcdccae3937f1A15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbq1rk1/ppppppbp/5np1/8/1PP5/5N2/PB1PPPPP/RN1QKB1R w KQ - 3 5W -)] 7913207b7b60de1aA15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbqk2r/ppppppbp/5np1/8/1PP5/5N2/PB1PPPPP/RN1QKB1R b KQkq - 2 4V -)] b96fca7eb6fc42f5A15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbqk2r/ppppppbp/5np1/8/1PP5/5N2/P2PPPPP/RNBQKB1R w KQkq - 1 4U +)] 9d3f7c84dbb895f_A15enPolish OpeningKing's Indian Variation, Sokolsky Attackrnbqkb1r/pppppp1p/5np1/8/1PP5/5N2/P2PPPPP/RNBQKB1R b KQkq - 0 3 WdP - +a831d6f1b45929e64dA26enEnglish OpeningKing's English Variation, Botvinnik Systemr1bqk1nr/ppp2pbp/2np2p1/4p3/2P1P3/2NP2P1/PP3PBP/R1BQK1NR b KQkq - 0 6  rV pP4 | - )?ba278e82f46a217fA00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/1p3ppp/2p1pn2/P2p4/4P3/P2P4/1BP2PPP/RN1QKBNR b KQkq - 0 6 { -)?7e2083ca1fea9c75uA00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/1p3ppp/2p1pn2/P2p4/8/P2P4/1BP1PPPP/RN1QKBNR w KQkq - 0 6 z -)?fb4aa1de833ed253SA00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/1p1p1ppp/2p1pn2/P7/8/P2P4/1BP1PPPP/RN1QKBNR b KQkq - 0 5 y -)?707365a8d1e3372c,A00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/1p1p1ppp/2p1pn2/p7/1P6/P2P4/1BP1PPPP/RN1QKBNR w KQkq - 0 5 x -)?f669d069b27f3bbcA00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/pp1p1ppp/2p1pn2/8/1P6/P2P4/1BP1PPPP/RN1QKBNR b KQkq - 0 4w -)? 58cd13bcf6ef8068hA00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/pp1p1ppp/2p1pn2/8/1P6/P7/1BPPPPPP/RN1QKBNR w KQkq - 0 4v -)? cab7fe53812f53d3A00enPolish OpeningOrangutan-Hartlaub Gambitrnbqkb1r/pppp1ppp/4pn2/8/1P6/P7/1BPPPPPP/RN1QKBNR b KQkq - 0 3 %nq - %#{45f86731d24a5d6enA00enAmar OpeningGent Gambitrn1qkbnr/ppp2ppp/8/3p4/8/6PB/PPPPP3/RNBQ1RK1 b kq - 0 6op -%#}170b139bd6577b4dMA00enAmar OpeningGent Gambitrn1qkbnr/ppp2ppp/8/3p4/8/6pB/PPPPP2P/RNBQ1RK1 w kq - 0 65 f + /= 712327992bc0983A05enZukertort OpeningDouble Fianchetto Attackrnbq1rk1/ppp1ppbp/3p1np1/8/8/1P3NP1/PBPPPPBP/RN1Q1RK1 b - - 1 6 e -/= 7967494dee4fd293A05enZukertort OpeningDouble Fianchetto Attackrnbq1rk1/ppp1ppbp/3p1np1/8/8/1P3NP1/PBPPPPBP/RN1QK2R w KQ - 0 6d -/=40dddf2c3c379bfeA05enZukertort OpeningDouble Fianchetto Attackrnbq1rk1/ppppppbp/5np1/8/8/1P3NP1/PBPPPPBP/RN1QK2R b KQ - 4 5 c -/= f52dfc5171da4387A05enZukertort OpeningDouble Fianchetto Attackrnbq1rk1/ppppppbp/5np1/8/8/1P3NP1/PBPPPP1P/RN1QKB1R w KQ - 3 5 P~ p cQ>ppC& - 7Ob87729980d11b525%E76enKing's Indian DefenseFour Pawns Attack, Modern Defenser1bqk2r/ppp1ppbp/n2p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR w KQkq - 1 6F#. -7c1c38fa971e13d0d6E60enKing's Indian DefenseFianchetto Variation, Pterodactyl Variationrnbqk2r/pp1pppbp/5np1/2p5/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 0 5!- -7c fa492b39e154dbabE60enKing's Indian DefenseFianchetto Variation, Pterodactyl Variationrnbqk2r/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4' - 7Q 6ff8f483e7ec128aE81enKing's Indian DefenseSämisch Variation, Normal Defensernbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6  - -/a33ea0c3f671341eA00enVan Geet OpeningJendrossek Gambitrnbqkb1r/pp2p1pp/5n2/2p2p2/1P1p1P2/5N2/P1PPPNPP/R1BQKB1R b KQkq - 0 6 +-/9cbd56f50c7583a:A00enVan Geet OpeningJendrossek Gambitrnbqkb1r/pp2p1pp/5n2/2p2p2/3p1P2/5N2/PPPPPNPP/R1BQKB1R w KQkq - 0 6 --/efba04c1af805347GA00enVan Geet OpeningJendrossek Gambitrnbqkb1r/ppp1p1pp/5n2/5p2/3p1P2/5N2/PPPPPNPP/R1BQKB1R b KQkq - 3 5 --/ 34dee837c766327azA00enVan Geet OpeningJendrossek Gambitrnbqkb1r/ppp1p1pp/5n2/5p2/3p1P2/8/PPPPPNPP/R1BQKBNR w KQkq - 2 5 --/ 6f30dcc26a9c73ecA00enVan Geet OpeningJendrossek Gambitrnbqkbnr/ppp1p1pp/8/5p2/3p1P2/8/PPPPPNPP/R1BQKBNR b KQkq - 1 4 --/ adbbd35701c601fbA00enVan Geet OpeningJendrossek Gambitrnbqkbnr/ppp1p1pp/8/5p2/3pNP2/8/PPPPP1PP/R1BQKBNR w KQkq - 0 4x - )+fa7516ef52cc674dMA00enPolish OpeningRooks Swap Line1nbqkb1r/1ppp1ppp/4pn2/1P6/8/8/2PPPPPP/BN1QKBNR b Kk - 0 6z -)+8491296972f034a6A00enPolish OpeningRooks Swap Line1nbqkb1r/1ppp1ppp/4pn2/1P6/8/8/1BPPPPPP/rN1QKBNR w Kk - 0 6{ -)+cf963d8767c74267gA00enPolish OpeningRooks Swap Linernbqkb1r/1ppp1ppp/4pn2/1P6/8/8/1BPPPPPP/RN1QKBNR b KQkq - 0 5| -)+ 17a75a754ab3f073sA00enPolish OpeningRooks Swap Linernbqkb1r/1ppp1ppp/4pn2/1p6/P7/8/1BPPPPPP/RN1QKBNR w KQkq - 0 5~ -)+ 5057af4523b305ddA00enPolish OpeningRooks Swap Linernbqkb1r/1ppp1ppp/p3pn2/1P6/P7/8/1BPPPPPP/RN1QKBNR b KQkq - 0 4 Q y RLR @ F QQ< - 5Ycceae3e0b2e6427d}E23enNimzo-Indian DefenseSpielmann Variation, Romanovsky Gambitrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5<%N + 5gd92237fc14cd1d9E45enNimzo-Indian DefenseNormal Variation, Bronstein (Byrne) Variationrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6=X - 5Q8af203ab1e3deae9E41enNimzo-Indian DefenseNormal Variation, Hübner Deferredrnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 2 6W -5Q805aee1ccb640302E41enNimzo-Indian DefenseNormal Variation, Hübner Deferredrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5(D - 5q 6780bd452cc80cfcE48enNimzo-Indian DefenseNormal Variation, Bishop Attack, Classical Defensernbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6 4u - 5=2a3b5a32545687b9E35enNimzo-Indian DefenseClassical, Noa Variationrnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5*b - 5w 3241fd22a34e6878xE39enNimzo-Indian DefenseClassical Variation, Berlin Variation, Pirc Variationrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6: - 5Se9e9f0117daeafb2E51enNimzo-Indian DefenseNormal Variation, Ragozin Variationrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6 v - 5= 152f83f64ef34772rE35enNimzo-Indian DefenseClassical, Noa Variationrnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6"0 - 7c70bb4cb1fa8c2920 E60enKing's Indian DefenseFianchetto Variation, Pterodactyl Variationrnb1k2r/pp1pppbp/5np1/q1p5/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6"/ -7c a9c8d9ea53fe08afE60enKing's Indian DefenseFianchetto Variation, Pterodactyl Variationrnbqk2r/pp1pppbp/5np1/2p5/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 - 51bbba5c50546b3b07E27enNimzo-Indian DefenseSämisch Variationrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6$ - 5ce848419ec14350d1E33enNimzo-Indian DefenseClassical Variation, Milner-Barry Variationr1bqk2r/ppp2ppp/2nppn2/8/1bPP4/2N2N2/PPQ1PPPP/R1B1KB1R w KQkq - 0 6% -5cd1f2d7ff133b19bcE33enNimzo-Indian DefenseClassical Variation, Milner-Barry Variationr1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N2N2/PPQ1PPPP/R1B1KB1R b KQkq - 5 5.l - 5} 19d06b936bafd399E38enNimzo-Indian DefenseClassical Variation, Berlin Variation, Steiner Variationrnbqk2r/pp1p1ppp/4pn2/2P5/2P5/2b5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6/k -5}38e9109576178193E38enNimzo-Indian DefenseClassical Variation, Berlin Variation, Steiner Variationrnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5 B pZ -1 wBBBBBBBBBKt N 9( -%Ka212d732dbd0ba0a A02enBird OpeningFrom's Gambit, Lasker Variationrnbqk1nr/ppp2ppp/3b4/8/8/5N2/PPPPP1PP/RNBQKB1R b KQkq - 1 4 ! - )i7644ed3011ccd5fdA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variationrnb1k1nr/pp1pppbp/6p1/q1p5/2PPP3/5N2/PP3PPP/RNBQKB1R w KQkq - 1 5 -)i 1eb9673fb9b0af90A04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variationrnbqkbnr/pp1ppp1p/6p1/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3 - %? ecae1f3e7e001c388A04enColle SystemRhamphorhynchus Variationrnb1k1nr/pp1pppbp/6p1/q1P5/8/4PN2/PPP2PPP/RNBQKB1R w KQkq - 1 5 -%? 35dd8a65d7723db7A04enColle SystemRhamphorhynchus Variationrnbqk1nr/pp1pppbp/6p1/2P5/8/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 4 -%? 4a3ea8b5346e6adbA04enColle SystemRhamphorhynchus Variationrnbqk1nr/pp1pppbp/6p1/2p5/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 1 4 -%? fa829503cf29a171qA04enColle SystemRhamphorhynchus Variationrnbqkbnr/pp1ppp1p/6p1/2p5/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3 -%? 3fb7baa9dee08c333A04enColle SystemRhamphorhynchus Variationrnbqkbnr/pp1ppp1p/6p1/2p5/8/4PN2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 -%?d603e9f2a56f1e78xA04enColle SystemRhamphorhynchus Variationrnbqkbnr/pp1ppppp/8/2p5/8/4PN2/PPPP1PPP/RNBQKB1R b KQkq - 0 2  - )_68c8863c72f522a8A04enModern DefenseSemi-Averbakh Variation, Polish Variationrnb1k1nr/pp1pppbp/1q4p1/2p5/2PPP3/5N2/PP3PPP/RNBQKB1R w KQkq - 1 5 -)i af37786bb8bef472rA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/2p5/2PPP3/5N2/PP3PPP/RNBQKB1R b KQkq - 0 4 -)i 6b307523533e4978xA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 1 4 -)i db8c4895a87982d2A04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variationrnbqkbnr/pp1ppp1p/6p1/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3' -%K79763bc4b336db377A02enBird OpeningFrom's Gambit, Lasker Variationrnbqk1nr/ppp2ppp/3b4/8/8/8/PPPPP1PP/RNBQKBNR w KQkq - 0 4 n` F @& s G wwww{{{{{5"!6 + ;/ 18137fd250fad8dD26enQueen's Gambit AcceptedClassical Defensernbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQK2R w KQkq - 0 65 -;/e7f0e653da48a6f0D26enQueen's Gambit AcceptedClassical Defensernbqkb1r/ppp2ppp/4pn2/8/2BP4/4PN2/PP3PPP/RNBQK2R b KQkq - 0 5J - %+59f6079c20f57796D17enSlav DefenseCzech Variationrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6@ ) ;/ 42e447f3e98444DD20enQueen's Gambit AcceptedLinares Variationrnbqkb1r/p3pppp/5n2/1ppP4/2p1P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6 ? -;/ 60468e5268443979yD20enQueen's Gambit AcceptedLinares Variationrnbqkb1r/pp2pppp/5n2/2pP4/2p1P3/2N5/PP3PPP/R1BQKBNR b KQkq - 2 5> -;/ 9bd196f0aaa6bba0D20enQueen's Gambit AcceptedLinares Variationrnbqkb1r/pp2pppp/5n2/2pP4/2p1P3/8/PP3PPP/RNBQKBNR w KQkq - 1 5 - ;O883608223c2215355D39enQueen's Gambit DeclinedRagozin Defense, Vienna Variationrnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 kMT - %;ac989c238f32ee49ID16enSlav DefenseSoultanbeieff Variationrnbqkb1r/pp3ppp/2p1pn2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 0 6" - ;3f3376ad4b750e562bD30enQueen's Gambit DeclinedSpielmann Variationrnbqkb1r/pp3p1p/2p1pnp1/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R w KQkq - 0 6  -;3 d1976c0221e20ca2D30enQueen's Gambit DeclinedSpielmann Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 ^ - %/d83ca420d09570f1D16enSlav DefenseSteiner Variationrn1qkb1r/pp2pppp/2p2n2/8/P1pP2b1/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 60 - /96b08745c53ab6a6D31enSemi-Slav DefenseNoteboom Variation, Anti-Noteboom Variation, Belyavsky Linernbqkbnr/pp4pp/2p1pp2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 s6+| - 9s a1b97f3fa12944d5D09enQueen's Gambit RefusedAlbin Countergambit, Fianchetto Variation, Bf5 Liner2qkbnr/ppp2ppp/2n5/4Pb2/2Pp4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 6,r - 9s2073dc83514943b2D09enQueen's Gambit RefusedAlbin Countergambit, Fianchetto Variation, Bg4 Liner2qkbnr/ppp2ppp/2n5/4P3/2Pp2b1/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 6h - %/946fc58211efe2a7D16enSlav DefenseSmyslov Variationr1bqkb1r/pp2pppp/n1p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6  - ;] 39572234d098bb47GD35enQueen's Gambit DeclinedExchange Variation, Positional Variationrnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 6PQ, - /+296042d22c779ae5D30enSemi-Slav DefenseQuiet Variationr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R w KQkq - 2 6 - ;O5a3031106e1cfbd6D39enQueen's Gambit DeclinedRagozin Defense, Vienna Variationrnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 {Q  .(} x[rrrr; - %-daef6e1297107e1bD16enSlav DefenseAlapin Variationrnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5 2 - ;135ac01aa81e33db8D24enQueen's Gambit AcceptedBogoljubov Defensernbqkb1r/1pp1pppp/p4n2/8/2pPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 5 1 -;1f1ab0ce26a6380b2D24enQueen's Gambit AcceptedBogoljubov Defensernbqkb1r/1pp1pppp/p4n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5& - ;k 3641ded45fe1c1f3D30enQueen's Gambit DeclinedTarrasch Defense, Pseudo-Tarrasch Bishop Attackrnbqkbnr/pp3ppp/8/2pp2B1/3P4/5N2/PP2PPPP/RN1QKB1R b KQkq - 1 5# -;kf01b89e2ef6b1a3b;D30enQueen's Gambit DeclinedTarrasch Defense, Pseudo-Tarrasch Bishop Attackrnbqkbnr/pp3ppp/8/2pp4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5& -;k cf0f5026f5cedaf0D30enQueen's Gambit DeclinedTarrasch Defense, Pseudo-Tarrasch Bishop Attackrnbqkbnr/pp3ppp/4p3/2pP4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4 X) + /sfd226030721bda8D31enSemi-Slav DefenseAnti-Noteboom, Stonewall Variation, Portisch Gambitrnbqkbnr/pp4pp/2p1p3/3p1p2/2PP2P1/2N1P3/PP3P1P/R1BQKBNR b KQkq - 0 5( -/sac9f27d5ef5450b5D31enSemi-Slav DefenseAnti-Noteboom, Stonewall Variation, Portisch Gambitrnbqkbnr/pp4pp/2p1p3/3p1p2/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5& -/s38f0414c51dc7d6bkD31enSemi-Slav DefenseAnti-Noteboom, Stonewall Variation, Portisch Gambitrnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 $( -/+43ed81ed5622df19D30enSemi-Slav DefenseQuiet Variationrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 - /+ f7e1778ef73017e4D31enSemi-Slav DefenseGunderam Gambitrnbqkbnr/pp3ppp/2p1p3/8/2PPp3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5 -/+ 995091bf57faf895D31enSemi-Slav DefenseGunderam Gambitrnbqkbnr/pp3ppp/2p1p3/8/2PPp3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5  - /c5ae5810cffd1a1d9D31enSemi-Slav DefenseNoteboom Variation, Anti-Noteboom Variationrnbqkbnr/pp3ppp/2p1p3/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5) - /+1a83398fccdf7729)D30enSemi-Slav DefenseQuiet Variationrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/4PN2/PP1N1PPP/R1BQKB1R b KQkq - 1 5| - /]b0596d7baf8ca229)D31enSemi-Slav DefenseNoteboom Variation, Anti-Noteboom Gambitrnbqkbnr/pp3ppp/2p1p3/8/2pP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5+s - ;s 7157e98e4a5b68ceD31enQueen's Gambit DeclinedCharousek (Petrosian) Variation, Miladinovic Gambitrnbqk1nr/ppp1bppp/4p3/8/2PPp3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5*r -;s 1fe60fbfea9187bfD31enQueen's Gambit DeclinedCharousek (Petrosian) Variation, Miladinovic Gambitrnbqk1nr/ppp1bppp/4p3/8/2PPp3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5  gP o 9 i 5g,,,          X ;. - 9Q9c5baf9235b825e0D06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitr2qkbnr/pp2pppp/2n5/8/Q2P4/8/PP2PPPP/RbB1KBNR w KQkq - 0 6- -9Q67dcdb84ada113a1D06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitrn1qkbnr/pp2pppp/2P5/8/Q2P4/8/PP2PPPP/RbB1KBNR b KQkq - 0 5, -9Q478e53ac34b20856VD06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitrn1qkbnr/pp2pppp/2p5/3P4/Q2P4/8/PP2PPPP/RbB1KBNR w KQkq - 0 5+ -9Qd5f4be434372dbedD06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitrn1qkbnr/ppp1pppp/8/3P4/Q2P4/8/PP2PPPP/RbB1KBNR b KQkq - 1 4* +9Q750030c834c2996D06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitrn1qkbnr/ppp1pppp/8/3P4/3P4/8/PP2PPPP/RbBQKBNR w KQkq - 0 4) +9Q774f6c1cda8296foD06enQueen's Gambit RefusedBaltic Defense, Argentinian Gambitrn1qkbnr/ppp1pppp/8/3P1b2/3P4/8/PP2PPPP/RNBQKBNR b KQkq - 0 3$ - 9M be5934bc0d347dbfD08enQueen's Gambit RefusedAlbin Countergambit, Lasker Traprnbqk1nr/ppp2ppp/8/4P3/1bP5/4p3/PP1B1PPP/RN1QKBNR w KQkq - 0 6# -9M 332ee8e572a57adcD08enQueen's Gambit RefusedAlbin Countergambit, Lasker Traprnbqk1nr/ppp2ppp/8/4P3/1bPp4/4P3/PP1B1PPP/RN1QKBNR b KQkq - 2 5" -9M1aa3b250e0c411d8D08enQueen's Gambit RefusedAlbin Countergambit, Lasker Traprnbqk1nr/ppp2ppp/8/4P3/1bPp4/4P3/PP3PPP/RNBQKBNR w KQkq - 1 5! -9Md3e2db56ab33d9faD08enQueen's Gambit RefusedAlbin Countergambit, Lasker Traprnbqkbnr/ppp2ppp/8/4P3/2Pp4/4P3/PP3PPP/RNBQKBNR b KQkq - 0 4 - ;Wccd7cae2adda933a:D08enQueen's Gambit DeclinedAlbin Countergambit, Balogh Variationr1b1kbnr/ppp1qppp/2n5/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R w KQkq - 4 6  - ;[9b7d13db560d2a2f/D08enQueen's Gambit DeclinedAlbin Countergambit, Janowski Variationr1bqkbnr/ppp3pp/2n2p2/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R w KQkq - 0 6+ - 9s761884655e793650PD09enQueen's Gambit RefusedAlbin Countergambit, Fianchetto Variation, Be6 Liner2qkbnr/ppp2ppp/2n1b3/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 6 j  K ; ) # /5A - 9[ 43daa4bc18cd3b1eD08enQueen's Gambit RefusedAlbin Countergambit, Tartakower Defensernbqkbnr/pp3ppp/8/2p1P3/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5TX 9 - %E3749b9ee098541a1D11enSlav DefenseQuiet Variation, Pin Defensern1qkb1r/pp2pppp/2p2n2/3p4/2PP2b1/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5 71 - %Qb6831a52f9e546c6D12enSlav DefenseQuiet Variation, Schallopp Defensern1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5}) - %1 e5ed05ea68fbde48HD13enSlav DefenseExchange Variationrnbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5( - %1 969daaa3c891d3f2D13enSlav DefenseExchange Variationrnbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4! - %3b1d7d83f4f9dbdeaD15enSlav DefenseChameleon Variationrnbqkb1r/1p2pppp/p1p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5 - %1b12610fefa83abd5D15enSlav DefenseTwo Knights Attackrnbqkb1r/pp2pppp/2p2n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5 - %3a4dfd79b62f693ecD15enSlav DefenseSüchting Variationrnb1kb1r/pp2pppp/1qp2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 5) - ;wa03bc8109cf1470b D20enQueen's Gambit AcceptedCentral Variation, Rubinstein Defense, Yefimov Gambitrnbqkbnr/p3pppp/8/1ppP4/2p1P3/8/PP3PPP/RNBQKBNR w KQkq - 0 5) -;wc03fa205075cfa366D20enQueen's Gambit AcceptedCentral Variation, Rubinstein Defense, Yefimov Gambitrnbqkbnr/pp2pppp/8/2pP4/2p1P3/8/PP3PPP/RNBQKBNR b KQkq - 0 4Y ,. % Z(b,,,,,,,,,,,`p 5a - 9Ccda08686aa809d7fD02enQueen's Gambit RefusedBaltic Defense, Pseudo-Slavrn1qkbnr/pp3ppp/2p1p3/3p1b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5` -9C5fda6b69dd404ec4D02enQueen's Gambit RefusedBaltic Defense, Pseudo-Slavrn1qkbnr/ppp2ppp/4p3/3p1b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4_ -9Ca44d73cb1fa2cc1dD02enQueen's Gambit RefusedBaltic Defense, Pseudo-Slavrn1qkbnr/ppp2ppp/4p3/3p1b2/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4^ -9C d23a81fa07805c4fOD02enQueen's Gambit RefusedBaltic Defense, Pseudo-Slavrn1qkbnr/ppp1pppp/8/3p1b2/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3] -9C 5e191ede448ff748HD02enQueen's Gambit RefusedBaltic Defense, Pseudo-Slavrn1qkbnr/ppp1pppp/8/3p1b2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3Y - /O 27c6ce58c387ac65eD04enQueen's Pawn GameColle System, Grünfeld Formationrnbqk2r/ppp1ppbp/5np1/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 2 5X -/O977af3ee38c067cfD04enQueen's Pawn GameColle System, Grünfeld Formationrnbqkb1r/ppp1pp1p/5np1/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R b KQkq - 1 4W -/Oc277524c0140a5bcD04enQueen's Pawn GameColle System, Grünfeld Formationrnbqkb1r/ppp1pp1p/5np1/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4 1Q - 9Kf437b38bccd1ebc7D06enQueen's Gambit RefusedBaltic Defense, Pseudo-Chigorinr2qkbnr/ppp2ppp/2n1p3/3p1b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5iI - 9K88b125f39cd2dd6dmD07enQueen's Gambit RefusedChigorin Defense, Modern Gambitr1bqkb1r/ppp1pppp/2n2n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 55 8dM 0  p {oCCCCC8 > - %K cdb33d94f149e26ajC55enItalian GameScotch Gambit, Max Lange Attackr1bqk2r/pppp1ppp/2n2n2/2b5/2BpP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 4 6,n - Oc1b6c7e36ff0fb40@C61enRuy LopezBird Variation, Paulsen Variationr1bqkb1r/ppppnppp/8/1B6/3pP3/8/PPPP1PPP/RNBQ1RK1 w kq - 2 6m -Offf97b5ed47970fdC61enRuy LopezBird Variation, Paulsen Variationr1bqkbnr/pppp1ppp/8/1B6/3pP3/8/PPPP1PPP/RNBQ1RK1 b kq - 1 5* - %Wdd1937963dacaffaC56enItalian GameScotch Gambit, Double Gambit Acceptedr1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6 8 - %[d4f3844ae6e0a317C57enItalian GameTwo Knights Defense, Ulvestad Variationr1bqkb1r/p1p2ppp/2n2n2/1p1Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 0 6 -%[b4f7ee5f7d4d1e2a*C57enItalian GameTwo Knights Defense, Ulvestad Variationr1bqkb1r/ppp2ppp/2n2n2/3Pp1N1/2B5/8/PPPP1PPP/RNBQK2R b KQkq - 0 58 - %O ae07d7b0c53ad21eC57enItalian GameTwo Knights Defense, Kloss Gambitr1bqkb1r/ppp2ppp/5n2/3Pp1N1/1nB5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6 - %U 638a82bec3095e8bC57enItalian GameTwo Knights Defense, Fritz Variationr1bqkb1r/ppp2ppp/5n2/3Pp1N1/2Bn4/8/PPPP1PPP/RNBQK2R w KQkq - 1 6 - %U e1e0c4aad071bc20 C58enItalian GameTwo Knights Defense, Polerio Defenser1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6 x - Gb05bf14c37705eefC60enRuy LopezAlapin Defense, Alapin Gambitr1bqk1nr/ppp2ppp/2p5/b3p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6 w -G868bd31bae52c490C60enRuy LopezAlapin Defense, Alapin Gambitr1bqk1nr/pppp1ppp/2B5/b3p3/4P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5 v -Gd7a4e9fd080414abC60enRuy LopezAlapin Defense, Alapin Gambitr1bqk1nr/pppp1ppp/2n5/bB2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 5 u -Gf488e73fe99029b9C60enRuy LopezAlapin Defense, Alapin Gambitr1bqk1nr/pppp1ppp/2n5/1B2p3/1b2P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4 4 - %O 74620a20f1d0a478xC55enItalian GameScotch Gambit, de Riviere Defenser1bqk2r/ppppbppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 4 6 6O e 9  }),:  -%S8ca8f2310fead7b1C50enItalian GameGiuoc" - /Kb9b5e24705c78d4dMC47enFour Knights GameScotch Variation, Oxford Gambitr1bqk2r/pppp1ppp/5n2/3Pp3/1b1nP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 1 6! -/K6ec88ea6bb83cdecC47enFour Knights GameScotch Variation, Oxford Gambitr1bqk2r/pppp1ppp/2n2n2/3Pp3/1b2P3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 5+ -/M e16bf32cbc1815a8C47enFour Knights GameScotch Variation, Schmid Defenser1bqkb1r/pppp1ppp/2n2n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 0 5( - /qf17ce67e478750edC47enFour Knights GameScotch Variation, Krause Gambit, Leonhardt Defenser1b1k2r/ppppqppp/2n2n2/4N3/1b1PP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 1 6], - /M 5cdcbd75bacfb2bbC47enFour Knights GameScotch Variation, Schmid Defenser1bqkb1r/pppp1ppp/2n5/8/3Nn3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 - %S5078897876dcda4cLC50enItalian GameGiuoco Pianissimo, Dubois Variationr1bqk1nr/pppp2pp/2n5/2b1p1N1/2B1Pp2/3P4/PPP2PPP/RNBQK2R w KQkq - 0 6 -%Sda7a13e4a6262f15C50enItalian GameGiuoco Pianissimo, Dubois Variationr1bqk1nr/pppp2pp/2n5/2b1ppN1/2B1P3/3P4/PPP2PPP/RNBQK2R b KQkq - 1 5S6 - #_ a7b5bab80bcf76bcC45enScotch GameClassical Variation, Intermezzo Variationr1b1k1nr/pppp1ppp/2N2q2/2b5/4P3/8/PPP2PPP/RNBQKB1R w KQkq - 1 65 -#_a08d277f6e263551QC45enScotch GameClassical Variation, Intermezzo Variationr1bqk1nr/pppp1ppp/2N5/2b5/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 0 5 - %Kc92a3ff1467b6aa1C51enItalian GameEvans Gambit, McDonnell Defenser1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6 -%K55a034066899cd09 C51enItalian GameEvans Gambit, McDonnell Defenser1bqk1nr/pppp1ppp/2n5/4p3/1bB1P3/2P2N2/P2P1PPP/RNBQK2R b KQkq - 0 5 @ - #5 e4f4a8fa26c75d06C45enScotch GameRomanishin Variationr1bqk1nr/pppp1ppp/2n5/8/1b2P3/1N6/PPP2PPP/RNBQKB1R w KQkq - 3 6z - %Qc06f162853535106C51enItalian GameEvans Gambit, Stone-Ware Variationr1bqk1nr/pppp1ppp/2nb4/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6p - %O70fb084546e22cb3C51enItalian GameEvans Gambit, Anderssen Variationr1bqk1nr/ppppbppp/2n5/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6 f - %C9ce15d00236e052b+C51enItalian GameEvans Gambit, Mayet Defenser1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6\ - %;768c3ac4890df01bC52enItalian GameEvans Gambit, Main Liner1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6R - %g7e8877758ba72400C53enItalian GameClassical Variation, Center Holding Variationr1b1k1nr/ppppqppp/1bn5/4p3/2BPP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 6Q -%g9e735f3ff577cd15C53enItalian GameClassical Variation, Center Holding Variationr1b1k1nr/ppppqppp/2n5/2b1p3/2BPP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5|J - #)8dc30a28012314e2C45enScotch GameModern Defenser1b1k1nr/pppp1ppp/2n5/8/1b1NP2q/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6 H - %K 5914efaee9034184C55enItalian GameScotch Gambit, Janowski Defenser1bqkb1r/ppp2ppp/2np1n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6  g v VJ[gi z -)W 1a519689570a88e8C40enLatvian GambitMayet Attack, Poisoned Pawn Variationrnb1kbnr/pppp2pp/8/4N1q1/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 1 5\r - %Q 9085db202354178dC42enRussian GameClassical Attack, Closed Variationrnbqkb1r/ppp2ppp/3p1n2/8/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 6 h -  -)3a6e0d982e03c501C44enPonziani OpeningVukovic Gambitr1bqk2r/pppp1ppp/2n5/2bPp3/4n3/2P2N2/PP3PPP/RNBQKB1R w KQkq - 1 6g --)977349c3e4312f82C44enPonziani OpeningVukovic Gambitr1bqkb1r/pppp1ppp/2n5/3Pp3/4n3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 5f --)2d7b0a907d17b9dfC44enPonziani OpeningVukovic Gambitr1bqkb1r/pppp1ppp/2n5/4p3/3Pn3/2P2N2/PP3PPP/RNBQKB1R w KQkq - 0 5e --)90cc44c97bc01eccC44enPonziani OpeningVukovic Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 ^ - #? d71c1e1bb8da762f/C44enScotch GameGöring Gambit, Main Liner1bqk1nr/pppp1ppp/2n5/8/1b2P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 1 6] -#? 1e5d771df32dbe0d C44enScotch GameGöring Gambit, Main Liner1bqkbnr/pppp1ppp/2n5/8/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 5 T - #Oe2814f604edc64f1C44enScotch GameScotch Gambit, Kingside Variationr1bqkb1r/pppp1ppp/2n5/4P3/2Bp2n1/5N2/PPP2PPP/RNBQK2R w KQkq - 1 6| - )Wc3ec1ef06226ec12C40enLatvian GambitMayet Attack, Poisoned Pawn Variationrnb1kbnr/pppp2pp/8/4N3/2BPp3/8/PPP2PqP/RNBQK2R w KQkq - 0 6{ -)W c3fd67f07a7b350b C40enLatvian GambitMayet Attack, Poisoned Pawn Variationrnb1kbnr/pppp2pp/8/4N1q1/2BPp3/8/PPP2PPP/RNBQK2R b KQkq d3 0 5 cbc G  ~G;|g - %/ 3ab519b7b9547546FC42enRussian GameMillennium Attackrnbqkb1r/ppp2ppp/3p4/8/4n3/3B1N2/PPPP1PPP/RNBQK2R b KQkq - 1 5 ^ - %Oeb2ac3f16e82241bC42enRussian GameCochrane Gambit, Center Variationrnbq1b1r/ppp2kpp/3p1n2/8/3PP3/8/PPP2PPP/RNBQKB1R b KQ - 0 5 ] -%O2e1fec5b7f4b0959YC42enRussian GameCochrane Gambit, Center Variationrnbq1b1r/ppp2kpp/3p1n2/8/4P3/8/PPPP1PPP/RNBQKB1R w KQ - 0 5 U - %Q4dac58735708dfffC42enRussian GameCochrane Gambit, Bishop Check Linernbq1b1r/ppp2kpp/3p1n2/8/2B1P3/8/PPPP1PPP/RNBQK2R b KQ - 1 5zp - %-aa8d97bf911d9a77wC42enRussian GameClassical Attackrnbqkb1r/ppp2ppp/3p4/8/3Pn3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 5& --Y5f4d16a568b27284C44enPonziani OpeningPonziani Countergambit, Schmidt Attackr1bqkbnr/pppp2pp/2n5/4pp2/3PP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 L - -K75368384645f3ed4C43enBishop's OpeningUrusov Gambit, Keidansky Gambitrnbqkb1r/pppp1ppp/8/8/2BQn3/5N2/PPP2PPP/RNB1K2R b KQkq - 0 5 K +-K881944050ced1e9C43enBishop's OpeningUrusov Gambit, Keidansky Gambitrnbqkb1r/pppp1ppp/8/8/2Bpn3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 -C - %E f0432397fc9ce4ffC43enRussian GameModern Attack, Center Attackrnbqkb1r/pppp1ppp/8/4P3/3Qn3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 5B -%E 8df43453c80d0bc2C43enRussian GameModern Attack, Center Attackrnbqkb1r/pppp1ppp/8/4P3/3pn3/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 5A -%E b7fc78cc7a4486388C43enRussian GameModern Attack, Center Attackrnbqkb1r/pppp1ppp/5n2/4P3/3p4/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4 : - %O 1bf2bb7186495046FC43enRussian GameModern Attack, Steinitz Variationrnbqkb1r/pppp1ppp/8/4P3/3pn3/5N2/PPP1QPPP/RNB1KB1R b KQkq - 2 51 - %? be2ae5fcad999841AC43enRussian GameModern Attack, Tal Gambitrnbqkb1r/pppp1ppp/8/1B2P3/3pn3/5N2/PPP2PPP/RNBQK2R b KQkq - 2 5( - -Ydcffc39723ecadb4C44enPonziani OpeningPonziani Countergambit, Schmidt Attackr1bqkbnr/ppp3pp/2np4/3Ppp2/4P3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 5^' --Y66f780c4baca3be9C44enPonziani OpeningPonziani Countergambit, Schmidt Attackr1bqkbnr/ppp3pp/2np4/4pp2/3PP3/2P2N2/PP3PPP/RNBQKB1R w KQkq - 0 5  ; d # tCj - y dbb5492bf313deb5C37enKing's Gambit Accepted, Muzio Gambit, Brentano Defensernbqkbnr/ppp2p1p/8/3p4/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1 w kq - 0 6"` - 9gc520b44faefb3ef9C37enKing's Gambit AcceptedMuzio Gambit, Kling and Horwitz Counterattackrnb1kbnr/ppppqp1p/8/8/2B1Ppp1/5N2/PPPP2PP/RNBQ1RK1 w kq - 2 6 CV -  a96f3f27da54242e.C39enKing's Gambit Accepted, Kieseritzky Gambit, Neumann Defenser1bqkbnr/pppp1p1p/2n5/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6U + 282e7c5cbc5812d-C39enKing's Gambit Accepted, Kieseritzky Gambit, Neumann Defensernbqkbnr/pppp1p1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R b KQkq - 1 5j@L -  87e8c5d15711cf0b C39enKing's Gambit Accepted, Kieseritzky Gambit, Brentano Defensernbqkbnr/ppp2p1p/8/3pN3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 0 6B -  3b3871a419bdc840@C39enKing's Gambit Accepted, Kieseritzky Gambit, Kolisch Defensernbqkbnr/ppp2p1p/3p4/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 0 68 -  997d38b50af92f47GC39enKing's Gambit Accepted, Kieseritzky Gambit, Rosenthal Defensernb1kbnr/ppppqp1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6. - 9E164e942a016e2dbcC39enKing's Gambit AcceptedKieseritzky, Polerio Defensernbqk1nr/ppppbp1p/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6$ -  b23eda7330824a87C39enKing's Gambit Accepted, Kieseritzky Gambit, Paulsen Defensernbqk1nr/pppp1pbp/8/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6 -  596cd330663fc0bbC39enKing's Gambit Accepted, Kieseritzky Gambit, Berlin Defensernbqkb1r/pppp1p1p/5n2/4N3/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6 - w 1fdc79becce5205aZC39enKing's Gambit Accepted, Kieseritzky Gambit, Long Whiprnbqkbnr/pppp1p2/8/4N2p/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 0 6 - 9E d286ed2a947e5d69iC39enKing's Gambit AcceptedAllgaier, Schlechter Defensernbqkb1r/pppp1p1p/5n2/6N1/4PppP/8/PPPP2P1/RNBQKB1R w KQkq - 2 6   x E @U-* -#/9ac6ff93bd47dfadC25enVienna GamePaulsen Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2N3P1/PPPP1PBP/R1BQK1NR b KQkq - 2 4 -#/2f36dceef0aa07d4C25enVienna GamePaulsen Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 1 4| - #S af847c7c4eafea81C27enVienna GameStanley Variation, Monster Declinedrnbqk2r/ppppbppp/3n4/4p2Q/8/1BN5/PPPP1PPP/R1B1K1NR w KQkq - 4 6 -#S bb480f9384044610C27enVienna GameStanley Variation, Monster Declinedrnbqkb1r/pppp1ppp/3n4/4p2Q/8/1BN5/PPPP1PPP/R1B1K1NR b KQkq - 3 5 -#S724c1fb10f2216f4C27enVienna GameStanley Variation, Monster Declinedrnbqkb1r/pppp1ppp/3n4/4p2Q/2B5/2N5/PPPP1PPP/R1B1K1NR w KQkq - 2 5 -#Sd634a61a03152dc6C27enVienna GameStanley Variation, Monster Declinedrnbqkb1r/pppp1ppp/8/4p2Q/2B1n3/2N5/PPPP1PPP/R1B1K1NR b KQkq - 1 4 - #S 1fc0f97e29f3dad0C29enVienna GameVienna Gambit, Bardeleben Variationrnbqkb1r/ppp3pp/8/3pPp2/4n3/2N2Q2/PPPP2PP/R1B1KBNR w KQkq f6 0 6 ~ - #K 2ec139b74c5f976bkC29enVienna GameVienna Gambit, Breyer Variationrnbqk2r/ppp1bppp/8/3pP3/4n3/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 6 } -#K 3a0d4a5886f43bfaC29enVienna GameVienna Gambit, Breyer Variationrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 5t - 9a5eb1f110bec6c2ffC33enKing's Gambit AcceptedBishop's Gambit, Boren-Svenonius Variationrnb1k1nr/ppp2ppp/3b4/3B4/4Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 3 6s -9afae99c9261dc13dbC33enKing's Gambit AcceptedBishop's Gambit, Boren-Svenonius Variationrnb1kbnr/ppp2ppp/8/3B4/4Pp1q/8/PPPP2PP/RNBQ1KNR b kq - 2 5r -9a467c5dac9f9d65c9C33enKing's Gambit AcceptedBishop's Gambit, Boren-Svenonius Variationrnb1kbnr/ppp2ppp/8/3B4/4Pp1q/8/PPPP2PP/RNBQK1NR w KQkq - 1 5D 5.yl ?  u 9 .w`MMMMM_rW -#3 8b6b61a841cb728dC22enCenter GameCharousek Variationr1bqk1nr/pppp1ppp/2n5/8/1b2P3/2P1Q3/PP3PPP/RNB1KBNR b KQkq - 0 5~V -#3 fdb1993091bb7d0b C22enCenter GameCharousek Variationr1bqk1nr/pppp1ppp/2n5/8/1b2P3/4Q3/PPP2PPP/RNB1KBNR w KQkq - 3 5_%N - #} 8b937fd85904f0cbC25enVienna GameVienna Gambit, Steinitz Gambit, Fraser-Minckwitz Defenser1b1kbnr/p1pp1ppp/1pn5/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR w kq - 0 6  - a ba75b786524ad819C21enDanish Gambit Accepted, Schlechter Defensernbqkbnr/ppp2ppp/8/3p4/2B1P3/8/PB3PPP/RN1QK1NR w KQkq - 0 6v - ] a4e04ae20fa23855UC21enDanish Gambit Accepted, Chigorin Defensernb1kbnr/ppppqppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR w KQkq - 1 6l - a f65efc9485695e1dC21enDanish Gambit Accepted, Copenhagen Defensernbqk1nr/pppp1ppp/8/8/1bB1P3/8/PB3PPP/RN1QK1NR w KQkq - 1 6b - _ 64f1a1676364d7a9C21enDanish Gambit Accepted, Classical Defensernbqkb1r/pppp1ppp/5n2/8/2B1P3/8/PB3PPP/RN1QK1NR w KQkq - 1 6}X - #3 ae305deb6fb093377C22enCenter GameCharousek Variationr1bqk1nr/ppppbppp/2n5/8/4P3/2P1Q3/PP3PPP/RNB1KBNR w KQkq - 1 6D - #o 659014dc3b530976vC25enVienna GameVienna Gambit, Steinitz Gambit, Zukertort Defenser1b1kbnr/ppp2ppp/2n5/3p4/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR w kq - 0 6: - #k d940a0a975ff0e3d=C25enVienna GameVienna Gambit, Steinitz Gambit, Paulsen Defenser1b1kbnr/ppp2ppp/2np4/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR w kq - 0 60 - #o60b9c6153333b8daC25enVienna GameVienna Gambit, Steinitz Gambit, Sörensen Defenser1b1kbnr/pppp1p1p/2n5/6p1/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR w kq - 0 6& + #Q52d9cdcf3081ed8C25enVienna GamePaulsen Variation, Mariotti Gambitr1bqk1nr/pppp1pp1/2n5/2b1p3/4P2p/2N2NP1/PPPP1PBP/R1BQK2R w KQkq - 0 6% -#Qaa0ffdb0b549b4f2C25enVienna GamePaulsen Variation, Mariotti Gambitr1bqk1nr/pppp1pp1/2n5/2b1p2p/4P3/2N2NP1/PPPP1PBP/R1BQK2R b KQkq - 1 5$ -#Q716b1146ddafd5cfC25enVienna GamePaulsen Variation, Mariotti Gambitr1bqk1nr/pppp1pp1/2n5/2b1p2p/4P3/2N3P1/PPPP1PBP/R1BQK1NR w KQkq - 0 5# -#Q6c358f3dda8f74b8C25enVienna GamePaulsen Variation, Mariotti Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/4P3/2N3P1/PPPP1PBP/R1BQK1NR b KQkq - 2 4" -#Qd9c5ac409762acc1C25enVienna GamePaulsen Variation, Mariotti Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/4P3/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 1 4 - #/a6157213c38a76f6C25enVienna GamePaulsen Variationr1bqk2r/ppp2ppp/2n2n2/2bpp3/4P3/2N3P1/PPPPNPBP/R1BQK2R w KQkq - 0 6 -#/237f50075f5e38d0C25enVienna GamePaulsen Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/4P3/2N3P1/PPPPNPBP/R1BQK2R b KQkq - 4 5 -#/37dbbbc87775352e.C25enVienna GamePaulsen Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/4P3/2N3P1/PPPP1PBP/R1BQK1NR w KQkq - 3 5 % ` \ 5.PPPPPPPP%< - )Ue97aedccb2ba6610C17enFrench DefenseWinawer Variation, Retreat Variationrnbqk1nr/pp3ppp/4p3/b1ppP3/3P4/P1N5/1PP2PPP/R1BQKBNR w KQkq - 1 6dl< - )_ 6f885037e86a9082C10enFrench DefenseRubinstein Variation, Fort Knox Variationrn1qkbnr/ppp2ppp/2b1p3/8/3PN3/5N2/PPP2PPP/R1BQKB1R w KQkq - 3 6; -)_ 146ecf23917fa0b2C10enFrench DefenseRubinstein Variation, Fort Knox Variationrn1qkbnr/pppb1ppp/4p3/8/3PN3/5N2/PPP2PPP/R1BQKB1R b KQkq - 2 5: -)_cf0a23d5f999c18fC10enFrench DefenseRubinstein Variation, Fort Knox Variationrn1qkbnr/pppb1ppp/4p3/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 532 - )_9d8a3633cb40ad28(C13enFrench DefenseClassical Variation, Tartakower Variationrnbqk2r/ppp1bppp/4p3/3pP1B1/3Pn3/2N5/PPP2PPP/R2QKBNR w KQkq - 1 61 -)_a7827aac790920d2C13enFrench DefenseClassical Variation, Tartakower Variationrnbqk2r/ppp1bppp/4pn2/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5 n(( - )}fc6c4e59d4f36144DC13enFrench DefenseClassical Variation, Vistaneckis (Nimzowitsch) Variationrnbqk1nr/ppp1bppp/4p3/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 1 6, - ) 63c5b2b4e7e14e10C15enFrench DefenseWinawer Variation, Fingerslip Variation, Kunin Double Gambitrnb1k1nr/ppp2ppp/4p3/8/1b1qp1Q1/2N5/PPPB1PPP/R3KBNR w KQkq - 0 6, -) 327fa2696c447902C15enFrench DefenseWinawer Variation, Fingerslip Variation, Kunin Double Gambitrnbqk1nr/ppp2ppp/4p3/8/1b1Pp1Q1/2N5/PPPB1PPP/R3KBNR b KQkq - 1 5+ -) 67c5d0c7baa3230fC15enFrench DefenseWinawer Variation, Fingerslip Variation, Kunin Double Gambitrnbqk1nr/ppp2ppp/4p3/8/1b1Pp3/2N5/PPPB1PPP/R2QKBNR w KQkq - 0 5 - )c b0492b9d541d99bfC15enFrench DefenseWinawer Variation, Alekhine Gambit Acceptedrnbqk1nr/ppp2ppp/4p3/8/3Pp3/P1b5/1PP1NPPP/R1BQKB1R w KQkq - 0 6 -)c9170509b49a5cbb5C15enFrench DefenseWinawer Variation, Alekhine Gambit Acceptedrnbqk1nr/ppp2ppp/4p3/8/1b1Pp3/P1N5/1PP1NPPP/R1BQKB1R b KQkq - 0 5 -)c 5aec61bd00e945f5C15enFrench DefenseWinawer Variation, Alekhine Gambit Acceptedrnbqk1nr/ppp2ppp/4p3/8/1b1Pp3/2N5/PPP1NPPP/R1BQKB1R w KQkq - 0 5  B w F :JJJJJJJJJJJJJJJz - )_3ca97cf526242003C12enFrench DefenseMacCutcheon Variation, Exchange Variationrnbqk2r/ppp2ppp/4pn2/3P2B1/1b1P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5dq - )I7a0f6045f8554461aC12enFrench DefenseMacCutcheon, Advance Variationrnbqk2r/ppp2ppp/4pn2/3pP1B1/1b1P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5h - )S 63c46580a6095856VC13enFrench DefenseClassical Variation, Richter Attackrnbqk2r/ppp1bppp/4pB2/3p4/3PP3/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5 U&_ - ){ 6a97ebd10a319a3b;C15enFrench DefenseWinawer Variation, Fingerslip Variation, Schwarz's Linernbqk2r/ppp1nppp/4p3/3p4/1b1PP3/8/PPPB1PPP/RN1QKBNR b KQkq - 5 5(^ -){9100f373c8d318e2C15enFrench DefenseWinawer Variation, Fingerslip Variation, Schwarz's Linernbqk2r/ppp1nppp/4p3/3p4/1b1PP3/2N5/PPPB1PPP/R2QKBNR w KQkq - 4 5 XV + )Qfd29d77d4606ffbC15enFrench DefenseMacCutcheon Variation, Wolf Gambitrnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP1NPPP/R2QKB1R b KQkq - 5 5U -)Qc988ca4164eab4333C15enFrench DefenseMacCutcheon Variation, Wolf Gambitrnbqk2r/ppp2ppp/4pn2/3p4/1b1PP3/2N5/PPP1NPPP/R1BQKB1R w KQkq - 4 5 M - )Uca56e30e532e5b02C17enFrench DefenseWinawer Variation, Advance Variationrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/P1N5/1PP2PPP/R1BQKBNR b KQkq - 0 51D - )[2847889d8803be46FC17enFrench DefenseWinawer Variation, Bogoljubov Variationrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPPB1PPP/R2QKBNR b KQkq - 1 5(; - )y5470a086cc858f4fOC17enFrench DefenseWinawer Variation, Advance Variation, Moscow Variationrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P2Q1/2N5/PPP2PPP/R1B1KBNR b KQkq - 1 5q2 - 9 3f1f9592ce9e963f?C21enDanish Gambit Acceptedrnbqkbnr/pppp1ppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR b KQkq - 0 5  Nd N  zV2,,,,,,, dF z b5 d~M - ))d2371fbeb7bcaa27'C11enFrench DefenseBurn Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 48 - )U4160e92a3eb6b39cC11enFrench DefenseClassical Variation, Swiss Variationrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2NB4/PPP2PPP/R1BQK1NR b KQkq - 3 41 - )e4d5e245da877761bC15enFrench DefenseWinawer Variation, Winckelmann-Riemer Gambitrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/P1N5/1PP2PPP/R1BQKBNR b KQkq - 0 4~ - )/ 45c65b144307903f?C02enFrench DefenseAdvance Variationrnbqkbnr/pp3ppp/4p3/2ppP3/3P4/2P5/PP3PPP/RNBQKBNR b KQkq - 0 4&~ - )W 66a6d1224590c5b4C02enFrench DefenseAdvance Variation, Nimzowitsch Attackrnbqkbnr/pp3ppp/4p3/2ppP3/3P2Q1/8/PPP2PPP/RNB1KBNR b KQkq - 1 4w - )C4cff815c706bc8d5C02enFrench DefenseAdvance, Steinitz Variationrnbqkbnr/pp3ppp/4p3/2PpP3/8/8/PPP2PPP/RNBQKBNR b KQkq - 0 4p - )W e8784f7afb91fe84C02enFrench DefenseAdvance Variation, Nimzowitsch Systemrnbqkbnr/pp3ppp/4p3/2ppP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4i - )k 7dd1f58bdde41e6bkC07enFrench DefenseTarrasch Variation, Open System, Süchting Linernbqkbnr/pp3ppp/4p3/2pp4/3PP3/2P5/PP1N1PPP/R1BQKBNR b KQkq - 0 4 C b - )m d06fe1e5657270d0C07enFrench DefenseTarrasch Variation, Open System, Euwe-Keres Linernbqkbnr/pp3ppp/4p3/2pp4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 1 4[ - )] c3b1aed26132d77c|C10enFrench DefenseClassical Variation, Svenonius Variationr1bqkbnr/ppp2ppp/2n1p3/3P4/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4Z -)]e46ea49fbb5d957azC10enFrench DefenseClassical Variation, Svenonius Variationr1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4 T - )76765f364860c6a61aC11enFrench DefenseHenneberger Variationrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N1B3/PPP2PPP/R2QKBNR b KQkq - 3 4T - )O 99e9d62035c1f39dC02enFrench DefenseAdvance Variation, Frenkel Gambitrnbqkbnr/pp3ppp/4p3/2ppP3/1P1P4/8/P1P2PPP/RNBQKBNR b KQkq - 0 4F - )k 33b242c5dd5933e9C11enFrench DefenseClassical Variation, Delayed Exchange Variationrnbqkb1r/ppp2ppp/4pn2/3P4/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4? - )[ 75145e750328578bC11enFrench DefenseClassical Variation, Steinitz Variationrnbqkb1r/ppp2ppp/4pn2/3pP3/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4 GG * bM6 kRRR33h`````t_!h - -k 5f804d155d8fa2deB21enSicilian DefenseSmith-Morra Gambit Accepted, Fianchetto Defenser1bqkbnr/pp1ppp1p/2n3p1/8/4P3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6g --k b6341e4e26003095B21enSicilian DefenseSmith-Morra Gambit Accepted, Fianchetto Defenser1bqkbnr/pp1ppppp/2n5/8/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 2 5f --k6d50f2b84ee651a8B21enSicilian DefenseSmith-Morra Gambit Accepted, Fianchetto Defenser1bqkbnr/pp1ppppp/2n5/8/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 1 5 7 -%Oa1b0f1daa007e3a3B09enPirc DefenseAustrian Attack, Dragon Formationrnbqk2r/ppp1ppbp/3p1np1/8/3PPP2/2N2N2/PPP3PP/R1BQKB1R b KQkq - 2 5}. - %+ab181c6d755e0a48HB09enPirc DefenseAustrian Attackrnbq1rk1/ppp1ppbp/3p1np1/8/3PPP2/2N2N2/PPP3PP/R1BQKB1R w KQ - 3 6$ - /E 8301b594404f73beB13enCaro-Kann DefensePanov Attack, Modern Defenser1bqkb1r/pp2pppp/2n2n2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 3 6} - /% 5e9b9f4749fc46efB14enCaro-Kann DefensePanov Attackrnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6 - /M c1583e2d2a5144f6B14enCaro-Kann DefensePanov Attack, Fianchetto Defensernbqkb1r/pp2pp1p/5np1/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6 - /562fa20a189c76fabB15enCaro-Kann DefenseTartakower Variationrnbqkb1r/pp3ppp/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6 -/5d6cb7b0239813170pB15enCaro-Kann DefenseTartakower Variationrnbqkb1r/pp2pppp/2p2N2/8/3P4/8/PPP2PPP/R1BQKBNR b KQkq - 0 5 a8 - %O47c120745f40e8deB09enPirc DefenseAustrian Attack, Dragon Formationrnbqk2r/pp2ppbp/3p1np1/2p5/3PPP2/2N2N2/PPP3PP/R1BQKB1R w KQkq - 0 6| - /A3ecf958145a4756clB16enCaro-Kann DefenseBronstein-Larsen Variationrnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6%r - /u 34026e53106c5181B17enCaro-Kann DefenseKarpov Variation, Modern Variation, Ivanchuk Defenser1bqkbnr/pp2pppp/2p2n2/6N1/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 3 6F )39 50194b153f794aJB06enPterodactyl DefenseWestern, Siroccopteryxrnbqk1nr/ppppppbp/6p1/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 E -39 b0ec24fdee78b2e0B06enPterodactyl DefenseWestern, Siroccopteryxrnbqkbnr/pppppp1p/6p1/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2B - %Ifcc78e295af16dc2B07enPirc Defense150 Attack, Inner Doll Defensern1qkb1r/pp2pp1p/2pp1np1/8/3PP1b1/2N1B3/PPPQ1PPP/R3KBNR w KQkq - 2 6 OxpX S Z e ]U%xxiLLL9 {(j - ){3c7ef8a8c291d6333B06enModern DefenseSemi-Averbakh Variation, Pterodactyl Variation Declinedrnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/5N2/PP2BPPP/RNBQK2R w KQkq - 2 6(i -){e50d6df36be3f7bcB06enModern DefenseSemi-Averbakh Variation, Pterodactyl Variation Declinedrnbqk1nr/pp2ppbp/3p2p1/2p5/2PPP3/5N2/PP2BPPP/RNBQK2R b KQkq - 1 5` - )3a91923856a8bf5cdB06enModern DefenseDunworthy Variationrnbqk1nr/pp2pp1p/2P3p1/8/2Pb4/8/PP3PPP/RNBQKBNR w KQkq - 0 6~_ -)382bf08ad87775a5e^B06enModern DefenseDunworthy Variationrnbqk1nr/pp2ppbp/2P3p1/8/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 5^ -)3 a2ed80851e6441a9B06enModern DefenseDunworthy Variationrnbqk1nr/pp2ppbp/2p3p1/3P4/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 5] -)330976d6a69a49212B06enModern DefenseDunworthy Variationrnbqk1nr/ppp1ppbp/6p1/3P4/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4\ -)3 17486727b3cbd014B06enModern DefenseDunworthy Variationrnbqk1nr/ppp1ppbp/6p1/3p4/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4uV -  )%a6d995e4e6943201B06enModern DefenseMasur Gambitrnbq1rk1/ppppp2p/6pb/5P2/3P4/2N5/PPP2PPP/R2QKBNR w KQ - 1 6xU -)%ac71785333cddbeaB06enModern DefenseMasur Gambitrnbqk2r/ppppp2p/6pb/5P2/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5xT -)%40bd4c1c714af22d-B06enModern DefenseMasur Gambitrnbqk2r/ppppp2p/6pb/5p2/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5yS -)% 976a861d6635666dmB06enModern DefenseMasur Gambitrnbqkb1r/ppppp2p/6pB/5p2/3PP3/2N5/PPP2PPP/R2QKBNR b KQkq - 0 4{R -)% 40c9067e51bf3ce1B06enModern DefenseMasur Gambitrnbqkb1r/ppppp2p/6pn/5p2/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4yQ -)% d4a660e7ef37113f?B06enModern DefenseMasur Gambitrnbqkb1r/pppppp1p/6pn/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3|L - 39a15e2154164553b4B06enPterodactyl DefenseWestern, Siroccopteryxrnb1k1nr/pp1pppbp/6p1/q7/2BNP3/8/PPP2PPP/RNBQK2R w KQkq - 1 6K -39782db40fbf37723b;B06enPterodactyl DefenseWestern, Siroccopteryxrnbqk1nr/pp1pppbp/6p1/8/2BNP3/8/PPP2PPP/RNBQK2R b KQkq - 0 5J -39 1fb9e952ae06e015B06enPterodactyl DefenseWestern, Siroccopteryxrnbqk1nr/pp1pppbp/6p1/8/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 I -39 40a75367d3f289d3B06enPterodactyl DefenseWestern, Siroccopteryxrnbqk1nr/pp1pppbp/6p1/2p5/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4 -k !  9VLHk W W W/:"xL -%! deca0ecc51b8e6f6B07enPirc Defense150 Attackrnbqk-G - %S3effd62a1e6e757azB07enPirc Defense150 Attack, Sveshnikov-Jansa Attackrnbqkb1r/pp2pp1p/2pp1np1/8/3PP3/2N1B2P/PPP2PP1/R2QKBNR b KQkq - 0 5yN -%!4476e67bab0d6f333B07enPirc Defense150 Attackrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N1B3/PPP2PPP/R2QKBNR b KQkq - 1 4> - %/570fe20e382018a9B07enPirc DefenseChinese Variationrnbqk2r/ppp1ppbp/3p1np1/8/3PP1P1/2N5/PPP1BP1P/R1BQK1NR b KQkq - 0 5= -%/f442e3d8d055f5b4B07enPirc DefenseChinese Variationrnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N5/PPP1BPPP/R1BQK1NR w KQkq - 2 5n~5 - %)68e17ff17b6a8ccaB07enPirc DefenseBayonet Attackrnbqk2r/ppp1ppbp/3p1np1/8/3PP2P/2N5/PPP1BPP1/R1BQK1NR b KQkq - 0 5, - %O2f260f2eb8b39489B08enPirc DefenseClassical Variation, Quiet Systemrnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP1BPPP/R1BQK2R b KQkq - 3 5 i1yP - %!fe14441b1d746328(B07enPirc Defense150 Attackrnbqkb1r/pp2pp1p/2pp1np1/8/3PP3/2N1B3/PPPQ1PPP/R3KBNR b KQkq - 1 5zO -%!d60c0b94dccdbc88B07enPirc Defense150 Attackrnbqkb1r/pp2pp1p/2pp1np1/8/3PP3/2N1B3/PPP2PPP/R2QKBNR w KQkq - 0 5# - %_b45551697b3517d8B08enPirc DefenseClassical Variation, Schlechter Variationrnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N1P/PPP2PP1/R1BQKB1R b KQkq - 0 5 - %W1967a904e0a254388B09enPirc DefenseAustrian Attack, Ljubojevic Variationrnbqk2r/ppp1ppbp/3p1np1/8/2BPPP2/2N5/PPP3PP/R1BQK1NR b KQkq - 2 5 -%W 7ad41d2cc8e1829eB09enPirc DefenseAustrian Attack, Ljubojevic Variationrnbqk2r/ppp1ppbp/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR w KQkq - 1 5  - /=c1548d227d400bd7B12enCaro-Kann DefenseAdvance, Short Variationrn1qkbnr/pp3ppp/2p1p3/3pPb2/3P4/2P5/PP2BPPP/RNBQK1NR b KQkq - 1 5  -/= b2d40edb7c654174tB12enCaro-Kann DefenseAdvance, Short Variationrn1qkbnr/pp3ppp/2p1p3/3pPb2/3P4/2P5/PP3PPP/RNBQKBNR w KQkq - 0 5  -/= c4a3fcea6447d126&B12enCaro-Kann DefenseAdvance, Short Variationrn1qkbnr/pp2pppp/2p5/3pPb2/3P4/2P5/PP3PPP/RNBQKBNR b KQkq - 0 4b - 3;6243de9eb8622a85B06enPterodactyl DefenseSicilian, Siroccopteryxrnb1k1nr/pp1pppbp/6p1/q1p5/2BPP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 3 5|Y - )#bbe382316d4da018B06enModern DefenseAnti-Modernrnbqk1nr/pp2ppbp/2pp2p1/8/2BPP3/2N5/PPP1QPPP/R1B1K1NR b KQkq - 1 5|X -)#2de50d132309fb9cB06enModern DefenseAnti-Modernrnbqk1nr/pp2ppbp/2pp2p1/8/2BPP3/2N5/PPP2PPP/R1BQK1NR w KQkq - 0 5|W -)#145f9b72f171b2f1B06enModern DefenseAnti-Modernrnbqk1nr/pp1pppbp/2p3p1/8/2BPP3/2N5/PPP2PPP/R1BQK1NR b KQkq - 1 4 - /E4501e732ca9157f4B12enCaro-Kann DefenseMieses Attack, Landau Gambitrnbqkb1r/pp1npppp/2p1P3/3p4/3P4/3B4/PPP2PPP/RNBQK1NR b KQkq - 0 5 :  n #|jV6& - 3=4bca7f2e437cffedB06enPterodactyl DefenseSicilian, Quetzalcoatlusrnb1k1nr/pp2ppbp/3p2p1/q1p5/3PP3/2N2N2/PPP1BPPP/R1BQK2R w KQkq - 0 6 -3=7270e94f9104b680B06enPterodactyl DefenseSicilian, Quetzalcoatlusrnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N2N2/PPP1BPPP/R1BQK2R b KQkq - 3 50 - 33 b666e1171b8f74b0B06enPterodactyl DefenseEastern, Pteranodonrnb1k1nr/pp1ppp1p/6p1/q1P5/4P3/2P5/P1P2PPP/R1BQKBNR w KQkq - 1 6/ -33 6f15744cb2fd553f?B06enPterodactyl DefenseEastern, Pteranodonrnbqk1nr/pp1ppp1p/6p1/2P5/4P3/2P5/P1P2PPP/R1BQKBNR b KQkq - 0 5. -33 24c01e7d1fa1ba7fB06enPterodactyl DefenseEastern, Pteranodonrnbqk1nr/pp1ppp1p/6p1/2P5/4P3/2b5/PPP2PPP/R1BQKBNR w KQkq - 0 5& - 3A738d809461b5b581B06enPterodactyl DefenseEastern, Benoni Pteranodonrnb1k1nr/pp1ppp1p/6p1/q1pP4/4P3/2P5/P1P2PPP/R1BQKBNR w KQkq - 1 6% -3A aafe15cfc8c7940eB06enPterodactyl DefenseEastern, Benoni Pteranodonrnbqk1nr/pp1ppp1p/6p1/2pP4/4P3/2P5/P1P2PPP/R1BQKBNR b KQkq - 0 5$ -3A e12b7ffe659b7b4eNB06enPterodactyl DefenseEastern, Benoni Pteranodonrnbqk1nr/pp1ppp1p/6p1/2pP4/4P3/2b5/PPP2PPP/R1BQKBNR w KQkq - 0 5 - )173b7f8c55f4990ebB06enModern DefenseGurgenidze Defensernbqk1nr/pp2ppb1/2p3p1/3pP2p/3P1P2/2N5/PPP3PP/R1BQKBNR w KQkq - 0 6 -)16ee966be5869319cB06enModern DefenseGurgenidze Defensernbqk1nr/pp2ppbp/2p3p1/3pP3/3P1P2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 5 +)1f9070435c7717f8B06enModern DefenseGurgenidze Defensernbqk1nr/pp2ppbp/2p3p1/3p4/3PPP2/2N5/PPP3PP/R1BQKBNR w KQkq - 0 5 -)1 8afa5257c0a359deB06enModern DefenseGurgenidze Defensernbqk1nr/pp1pppbp/2p3p1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4 A  - 331c0534e9e88a64faB06enPterodactyl DefenseCentral, Anhanguerarnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N1B3/PP3PPP/R2QKBNR w KQkq - 2 6  -33c576a1b241f84575uB06enPterodactyl DefenseCentral, Anhanguerarnbqk1nr/pp2ppbp/3p2p1/2p5/2PPP3/2N1B3/PP3PPP/R2QKBNR b KQkq - 1 5 \ -33 8fc48c3f12ba1796B06enPterodactyl DefenseCentral, Anhanguerarnbqk1nr/pp1pppbp/6p1/2p5/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 1 4j~ - 3I10eeadd58aac2818B06enPterodactyl DefenseCentral, Quetzalcoatlus Gambitrnb1k1nr/pp2ppbp/3p2p1/q1P5/2P1P3/2N5/PP3PPP/R1BQKBNR w KQkq - 1 6} -3Ic99d388e23de0997B06enPterodactyl DefenseCentral, Quetzalcoatlus Gambitrnbqk1nr/pp2ppbp/3p2p1/2P5/2P1P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5t - 3Id505cc56f096e929)B06enPterodactyl DefenseCentral, Benoni Quetzalcoatlusrnb1k1nr/pp2ppbp/3p2p1/q1pP4/2P1P3/2N5/PP3PPP/R1BQKBNR w KQkq - 2 6s +3Ic76590d59e4c8a6B06enPterodactyl DefenseCentral, Benoni Quetzalcoatlusrnbqk1nr/pp2ppbp/3p2p1/2pP4/2P1P3/2N5/PP3PPP/R1BQKBNR b KQkq - 1 5r -3I f7e141af9b064a7fB06enPterodactyl DefenseCentral, Benoni Quetzalcoatlusrnbqk1nr/pp2ppbp/3p2p1/2pP4/2P1P3/8/PP3PPP/RNBQKBNR w KQkq - 0 5 ($Z } 7 ! [4WS8888888D - -[312ee11760d25875uB03enAlekhine DefenseFour Pawns Attack, Fianchetto Variationrnbqkb1r/ppp1pp1p/1n1p2p1/4P3/2PP1P2/8/PP4PP/RNBQKBNR w KQkq - 0 6 } -%/ c9fd14cc5989b6a7B00enOwen DefenseMatovinsky Gambitrn1qkbnr/pbpppppp/1p6/8/3PP3/3B4/PPP2PPP/RNBQK1NR b KQkq - 2 3 - 5a 37bfbccaa375b9a3B01enScandinavian DefenseAnderssen Counterattack, Collijn Variationrn2kbnr/ppp2ppp/8/q3p3/3P2b1/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 2 6X - -[5b83dbc2acb8c3b3B03enAlekhine DefenseFour Pawns Attack, Trifunovic Variationrn1qkb1r/ppp1pppp/1n1p4/4Pb2/2PP1P2/8/PP4PP/RNBQKBNR w KQkq - 1 6N - -S58d942918fe935b4B03enAlekhine DefenseFour Pawns Attack, Cambridge Gambitrnbqkb1r/ppp1pp1p/1n1p4/4P1p1/2PP1P2/8/PP4PP/RNBQKBNR w KQkq - 0 6 : - -;b87997b80000c1311B05enAlekhine DefenseModern, Flohr Variationrn1qkb1r/pp2pppp/2pp4/3nP3/3P2b1/5N2/PPP1BPPP/RNBQK2R w KQkq - 0 6 9 --;2a037a5777c0128aB05enAlekhine DefenseModern, Flohr Variationrn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP1BPPP/RNBQK2R b KQkq - 3 5 w~ -%/ cad826a97d371f65eB00enOwen DefenseMatovinsky Gambitrn1qkbnr/p1ppp1pp/1p6/5P1Q/3P4/3B4/PPP2PbP/RNB1K1NR b KQkq - 1 5~ -%/ 6ad5c58f515a39f9B00enOwen DefenseMatovinsky Gambitrn1qkbnr/p1ppp1pp/1p6/5P2/3P4/3B4/PPP2PbP/RNBQK1NR w KQkq - 0 5~ -%/ b15e461aa586b2beB00enOwen DefenseMatovinsky Gambitrn1qkbnr/pbppp1pp/1p6/5P2/3P4/3B4/PPP2PPP/RNBQK1NR b KQkq - 0 4~ -%/ 5d927255e7019b79yB00enOwen DefenseMatovinsky Gambitrn1qkbnr/pbppp1pp/1p6/5p2/3PP3/3B4/PPP2PPP/RNBQK1NR w KQkq - 0 4 v - 5367e323c96d0a0764dB01enScandinavian DefenseClassical Variationrn2kb1r/ppp1pppp/5n2/q4b2/3P4/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 3 6 u -53 e4fa4a47daef0ee9B01enScandinavian DefenseClassical Variationrnb1kb1r/ppp1pppp/5n2/q7/3P4/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 5 l - 535a12457f9ca4dba5B01enScandinavian DefenseBronstein Variationrnb1kb1r/1pp1pppp/p2q1n2/8/3P4/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 0 6 k -5388e5b48c7b842379yB01enScandinavian DefenseBronstein Variationrnb1kb1r/ppp1pppp/3q1n2/8/3P4/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 5j -53 5381587a13624244DB01enScandinavian DefenseBronstein Variationrnb1kb1r/ppp1pppp/3q1n2/8/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5b - 5[ab11abb13aad3cd8B01enScandinavian DefensePortuguese Variation, Portuguese Gambitr2qkb1r/pppnpppp/5n2/1B1P1b2/3P4/5P2/PPP3PP/RNBQK1NR w KQkq - 1 6a -5[d20d2ea765eabeb6B01enScandinavian DefensePortuguese Variation, Portuguese Gambitr2qkb1r/pppnpppp/5n2/1B1P4/3P2b1/5P2/PPP3PP/RNBQK1NR b KQkq - 0 5` -5[ bcbcc896c52051c7B01enScandinavian DefensePortuguese Variation, Portuguese Gambitr2qkb1r/pppnpppp/5n2/1B1P4/3P2b1/8/PPP2PPP/RNBQK1NR w KQkq - 3 5_ -5[8f5fb3cb2588bc0b B01enScandinavian DefensePortuguese Variation, Portuguese Gambitrn1qkb1r/ppp1pppp/5n2/1B1P4/3P2b1/8/PPP2PPP/RNBQK1NR b KQkq - 2 4? dYcV D -  qW@DDDDDDDDp - '3 eacd6c599529a2c5A92enDutch DefenseClassical Variationrnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 5 6 - '3 e06581ee40704b2e.A92enDutch DefenseClassical Variationrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 4 5zo -'_cf012d443bab25a4A90enDutch DefenseNimzo-Dutch Variation, Alekhine Variationrnbqk2r/pppp2pp/4pn2/5p2/1bPP4/6P1/PP1BPPBP/RN1QK1NR b KQkq - 4 5 - %/236c75f206b88d2e.B00enOwen DefenseMatovinsky Gambitrn1qkbnr/p1ppp2p/1p4p1/5P1Q/3P4/3B4/PPP2PbP/RNB1K1NR w KQkq - 0 62 - '= 6198cc334d75a14fOA81enDutch DefenseLeningrad, Basman Systemrnbqk2r/pp1pp1bp/2p3pn/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w kq - 4 61 -'=e01453d7f7f7cc366A81enDutch DefenseLeningrad, Basman Systemrnbqk1nr/pp1pp1bp/2p3p1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 50 -'=9e6128e38b041726&A81enDutch DefenseLeningrad, Basman Systemrnbqk1nr/pp1pp1bp/2p3p1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5/ -'=2edd15557043dc8cA81enDutch DefenseLeningrad, Basman Systemrnbqkbnr/pp1pp2p/2p3p1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4. -'=f5b9f9a318a5bdb1A81enDutch DefenseLeningrad, Basman Systemrnbqkbnr/pp1pp2p/2p3p1/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR w KQkq - 0 4- -'= 1c0daaf8632a2ffaA81enDutch DefenseLeningrad, Basman Systemrnbqkbnr/pp1pp1pp/2p5/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR b KQkq - 1 3, -'= a9fd89852ec7f783A81enDutch DefenseLeningrad, Basman Systemrnbqkbnr/pp1pp1pp/2p5/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR w KQkq - 0 3( + '5ff2b0cbf10e41deA86enDutch DefenseHort-Antoshin Systemrnb1kb1r/ppq1p1pp/2pp1n2/5p2/2PP4/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 1 6' +'59ed8fea9d450edfA86enDutch DefenseHort-Antoshin Systemrnbqkb1r/pp2p1pp/2pp1n2/5p2/2PP4/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 0 5& -'5ccd8a0408c8c239dA86enDutch DefenseHort-Antoshin Systemrnbqkb1r/pp2p1pp/2pp1n2/5p2/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 0 5% -'55ea24daffb4cf026&A86enDutch DefenseHort-Antoshin Systemrnbqkb1r/ppp1p1pp/3p1n2/5p2/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4$ -'5a535550d39ae72ffA86enDutch DefenseHort-Antoshin Systemrnbqkb1r/ppp1p1pp/3p1n2/5p2/2P5/6P1/PP1PPPBP/RNBQK1NR w KQkq - 0 4# -'5 9c8fc36cebd63b92A86enDutch DefenseHort-Antoshin Systemrnbqkb1r/ppppp1pp/5n2/5p2/2P5/6P1/PP1PPPBP/RNBQK1NR b KQkq - 2 3" -'5 297fe011a63be3ebA86enDutch DefenseHort-Antoshin Systemrnbqkb1r/ppppp1pp/5n2/5p2/2P5/6P1/PP1PPP1P/RNBQKBNR w KQkq - 1 3! -'5 7291d4e40bc1a27d}A86enDutch DefenseHort-Antoshin Systemrnbqkbnr/ppppp1pp/8/5p2/2P5/6P1/PP1PPP1P/RNBQKBNR b KQkq - 0 2 - '_ea5a110715d0c41eA90enDutch DefenseNimzo-Dutch Variation, Alekhine Variationrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP1BPPBP/RN1QK1NR w KQkq - 5 6 F D c B GORBBBBBBBBBA7   ~! + '3 5fe9ce0cc7d5ce2A86enDutch DefenseLeningrad Variationrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 { - %/1e1fd6761f91225d]B00enOwen DefenseHekili-Loa Gambitr1bqkbnr/p2ppppp/1pn5/2P5/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 1 4z -%/b5f20e940e00875e^B00enOwen DefenseHekili-Loa Gambitrnbqkbnr/p2ppppp/1p6/2P5/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3{ -%/ca112c44ed1cd0322B00enOwen DefenseHekili-Loa Gambitrnbqkbnr/p2ppppp/1p6/2p5/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 =yx - %# 78395b1553266393B00enOwen DefenseWind Gambitrn1qkbnr/pbpp1ppp/1p6/4p3/3PP3/5P2/PPP3PP/RNBQKBNR w KQkq - 0 4v -%#f241535fc0c39ba5B00enOwen DefenseWind Gambitrn1qkbnr/pbpppppp/1p6/8/3PP3/5P2/PPP3PP/RNBQKBNR b KQkq - 0 3 Vy - 3-c6e5480501b4f2aeB00enNimzowitsch DefenseBreyer Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 -3- 4c9d404f92510a98B00enNimzowitsch DefenseBreyer Variationr1bqkb1r/pppppppp/2n2n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 3 -3- 89a86fe5839827daB00enNimzowitsch DefenseBreyer Variationr1bqkb1r/pppppppp/2n2n2/8/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 3 3  4 - 340eea75d445ffdf4B00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Brandics Gambitr1bqkbnr/1pp1pppp/p1n5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4(7 - 3 18615ee4309afd1eB00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Heinola-Deppe Gambitr1bqkbnr/ppp2ppp/2n5/3pp3/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 f @  q Z:fP + -U46e07a6c33e3c344A52enBudapest DefenseAlekhine Variation, Abonyi Variationrnbqkb1r/pppp1ppp/2n5/8/2P1PP2/8/PP4PP/RNBQKBNR w KQkq - 1 6O --Uf4331aed0cd11654TA52enBudapest DefenseAlekhine Variation, Abonyi Variationrnbqkb1r/pppp1ppp/8/4n3/2P1PP2/8/PP4PP/RNBQKBNR b KQkq - 0 5N +-U92567e015402bddA52enBudapest DefenseAlekhine Variation, Abonyi Variationrnbqkb1r/pppp1ppp/8/4n3/2P1P3/8/PP3PPP/RNBQKBNR w KQkq - 0 5 F - )56d5c58049cbcbaacA56enBenoni DefenseKing's Indian Systemrnbqkb1r/pp3p1p/3p1np1/2pPp3/2P1P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6E -)584e80b5fe73328e7A56enBenoni DefenseKing's Indian Systemrnbqkb1r/pp3ppp/3p1n2/2pPp3/2P1P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5D -)540ef06170cb395edA56enBenoni DefenseKing's Indian Systemrnbqkb1r/pp3ppp/3p1n2/2pPp3/2P5/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5C -)579559076decbdc80A56enBenoni DefenseKing's Indian Systemrnbqkb1r/pp1p1ppp/5n2/2pPp3/2P5/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4l< - )O 103c4586327db116A60enBenoni DefenseModern Variation, Snake Variationrnbqk2r/pp1p1ppp/3b1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 1 6; -)O b4642804ed6760322A60enBenoni DefenseModern Variation, Snake Variationrnbqkb1r/pp1p1ppp/5n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 5: -)O ba4eb3c94fa9742f/A60enBenoni DefenseModern Variation, Snake Variationrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 59 -)O855a6a0d550cb4e4A60enBenoni DefenseModern Variation, Snake Variationrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4   p c4d;&xn - 3 b46963f301561e49IA42enPterodactyl Defensernb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N2N2/PP3PPP/R1BQKB1R w KQkq - 0 6wm -3 8dd3f592d32e5724$A42enPterodactyl Defensernb1k1nr/pp1pppbp/6p1/q1p5/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 2 5 d - /Iccba7371371bae4cLA46enQueen's Pawn GameTorre Attack, Breyer Variationrnb1kb1r/pp3ppp/1q2pn2/2pp2B1/3P4/2P1PN2/PP3PPP/RN1QKB1R w KQkq - 1 6c +/Ib458d26fd507896A46enQueen's Pawn GameTorre Attack, Breyer Variationrnbqkb1r/pp3ppp/4pn2/2pp2B1/3P4/2P1PN2/PP3PPP/RN1QKB1R b KQkq - 0 5b -/I7d9f75be2d207710A46enQueen's Pawn GameTorre Attack, Breyer Variationrnbqkb1r/pp3ppp/4pn2/2pp2B1/3P4/4PN2/PPP2PPP/RN1QKB1R w KQkq - 0 5a -/I9beea410d2677c6dmA46enQueen's Pawn GameTorre Attack, Breyer Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/3P4/4PN2/PPP2PPP/RN1QKB1R b KQkq - 0 4` -/I36c3e6a2f638f4c9A46enQueen's Pawn GameTorre Attack, Breyer Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4^Z - /ee7576d190529f405A48enQueen's Pawn GameTorre Attack, Grünfeld Variation, Main Linernbq1rk1/ppp1ppbp/5np1/3p2B1/3P4/4PN2/PPPN1PPP/R2QKB1R w KQ - 1 6!Y -/eedff80aed0701deeA48enQueen's Pawn GameTorre Attack, Grünfeld Variation, Main Linernbqk2r/ppp1ppbp/5np1/3p2B1/3P4/4PN2/PPPN1PPP/R2QKB1R b KQkq - 0 5X -/e40d2c21cf42f954aJA48enQueen's Pawn GameTorre Attack, Grünfeld Variation, Main Linernbqk2r/ppp1ppbp/5np1/3p2B1/3P4/5N2/PPPNPPPP/R2QKB1R w KQkq - 0 5  ,X 8  :b,,,,,,,, - /U 60460e3ce90f43f5A40enQueen's Pawn GameLondon System, Pterodactyl Variationrnb1k1nr/pp1pppbp/6p1/q7/3P1B2/5N2/PP2PPPP/RN1QKB1R w KQkq - 1 6 -/U b9359b67407d627azA40enQueen's Pawn GameLondon System, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/8/3P1B2/5N2/PP2PPPP/RN1QKB1R b KQkq - 0 5 -/U15834e2b24d56e5c\A40enQueen's Pawn GameLondon System, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/8/3p1B2/2P2N2/PP2PPPP/RN1QKB1R w KQkq - 0 5 -/U4a9df41e5921079aA40enQueen's Pawn GameLondon System, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/2p5/3P1B2/2P2N2/PP2PPPP/RN1QKB1R b KQkq - 0 4 -/U3c470c868951081cA40enQueen's Pawn GameLondon System, Pterodactyl Variationrnbqk1nr/pp1pppbp/6p1/2p5/3P1B2/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4 -/U da36dd2876160361aA40enQueen's Pawn GameLondon System, Pterodactyl Variationrnbqk1nr/ppppppbp/6p1/8/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3 2 - %; feca7b24c85972cfA40enColle SystemSiroccopteryx Variationrnb1k1nr/pp1pppbp/6p1/q7/3N4/3BP3/PPP2PPP/RNBQK2R w KQkq - 1 6 -%;27b9ee7f612b5340@A40enColle SystemSiroccopteryx Variationrnbqk1nr/pp1pppbp/6p1/8/3N4/3BP3/PPP2PPP/RNBQK2R b KQkq - 0 5 -%; 402db322701ac16enA40enColle SystemSiroccopteryx Variationrnbqk1nr/pp1pppbp/6p1/8/3p4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 0 5 x - 357ba964ca419b728aA42enPterodactyl DefenseCentral, Bogoluboviarnb1k1nr/pp2ppbp/3p2p1/q1p5/2PPP3/2N5/PP2NPPP/R1BQKB1R w KQkq - 2 6 w -35a2daf191e8e95305A42enPterodactyl DefenseCentral, Bogoluboviarnbqk1nr/pp2ppbp/3p2p1/2p5/2PPP3/2N5/PP2NPPP/R1BQKB1R b KQkq - 1 5 v -35b67e1a5ec0c25efbA42enPterodactyl DefenseCentral, Bogoluboviarnbqk1nr/pp2ppbp/3p2p1/2p5/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5 ? x J GH44 - /) c50204575909880fA40enQueen's Pawn GameEnglund Gambitr1b1kb1r/ppppq1pp/2n2n2/3Q4/8/5N2/PPP1PPPP/RNB1KB1R w KQkq - 0 63 -/) 413fa59168283d3e>A40enQueen's Pawn GameEnglund Gambitr1b1kbnr/ppppq1pp/2n2P2/3Q4/8/5N2/PPP1PPPP/RNB1KB1R b KQkq - 0 52 -/)29c1f8d3fdc9f521!A40enQueen's Pawn GameEnglund Gambitr1b1kbnr/ppppq1pp/2n2p2/3QP3/8/5N2/PPP1PPPP/RNB1KB1R w KQkq - 0 5D |* - +# f13af378dd63c990A40enEnglish DefensePoli Gambitrn1qkb1r/pbpp2pp/1p2p2n/5P2/2PP4/5P2/PP4PP/RNBQKBNR w KQkq - 1 6{) -+# 70b66c9c67e1a4e9A40enEnglish DefensePoli Gambitrn1qkbnr/pbpp2pp/1p2p3/5P2/2PP4/5P2/PP4PP/RNBQKBNR b KQkq - 0 5{( -+# 9c7a58d325668d2e.A40enEnglish DefensePoli Gambitrn1qkbnr/pbpp2pp/1p2p3/5p2/2PPP3/5P2/PP4PP/RNBQKBNR w KQkq - 0 5z' ++# 8153e4a9beea0f0A40enEnglish DefensePoli Gambitrn1qkbnr/pbpp1ppp/1p2p3/8/2PPP3/5P2/PP4PP/RNBQKBNR b KQkq - 0 4 sp - 3E 3ba912f8c93aa38cA40enPterodactyl DefenseFianchetto, Queen Pteranodonrnb1k1nr/pp1ppp1p/6p1/q1pP4/2P5/2P5/P3PPPP/R1BQKBNR w KQkq - 1 6 -3E e2da87a360488203A40enPterodactyl DefenseFianchetto, Queen Pteranodonrnbqk1nr/pp1ppp1p/6p1/2pP4/2P5/2P5/P3PPPP/R1BQKBNR b KQkq - 0 5 -3E a90fed92cd146d43CA40enPterodactyl DefenseFianchetto, Queen Pteranodonrnbqk1nr/pp1ppp1p/6p1/2pP4/2P5/2b5/PP2PPPP/R1BQKBNR w KQkq - 0 5 - )3 76b5e13adec0afddA40enModern DefenseBeefeater Variationrnbqk1nr/pp1pp2p/6p1/2pP1p2/2P5/2P5/P3PPPP/R1BQKBNR w KQkq - 0 6 )+ !    y q i a Y Q I A 9 1 ) !    ne y U L } | t l d \ T K B 9 0`  (    x p h ` X P G >w8 p 6 . &    ~vnf^VNF>6.& + { xph`XPH@80( / ^ 1 bzrjbZRJB:2*"  xph`XPH@80( F>6XPsk&\SJA g C (  tzrjbZRJB:2*"  :  k{skc[SKC;3+#  A NN}tli~;~&j~cZlvlqMr/~P|J@*'e|z^POM"FC B>R=y=f;T;:3,++0(# "  8  PNia~R}zvqpoihhge;bY$XSQOAH<8U31Z*%"8@8d}2wvtqqwqm>kkKhebVSOO\MA==Y< 66:64d4X30})rs&~~~P}vvbN_!_YXRoNNHHJGECB?75!!UY6  'A:||{z-w5upEp&aaaMRQO<MgFCEDK+v))LJj}{rqeda`_PAMEiB1W+"&i_9 {:># |fyuyujqpomi~hLe_ddjbUaaG_YXU-OFFe84. +$9iK:62/zda;sb^W80(fc|v~}}{wQrphc``_YX:VUPDCo?+`Dvn+~L~Ds+q5nirh\O 8+(s[ )/I  j X B 0Fb P - +_39cb28cb27ee11e4A38enEnglish OpeningSymmetrical Variation, Full Symmetry Liner1bqkb1r/pp1ppp1p/2n2np1/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5O - +_d07f7b905c6183afA38enEnglish OpeningSymmetrical Variation, Full Symmetry Liner1bqkb1r/pp1ppppp/2n2n2/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4 H - +=be7ea6faa83388d7A40enEnglish DefenseHartlaub Gambit Acceptedrn1qkb1r/pbpp2pp/1p2pn2/5P2/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 1 6G -+= e590920f05c9c941AA40enEnglish DefenseHartlaub Gambit Acceptedrn1qkbnr/pbpp2pp/1p2p3/5P2/2PP4/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5]> - +9 1c5177320f14161cA40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2p2pp/4p3/1PpP1p2/4P3/8/PP3PPP/RNBQKBNR w KQkq - 0 6= -+9883e11abb19c3bc2A40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2p1ppp/4p3/1PpP4/4P3/8/PP3PPP/RNBQKBNR b KQkq - 0 5< -+9 79f607ade51ef295A40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2p1ppp/4p3/1ppP4/2P1P3/8/PP3PPP/RNBQKBNR w KQkq - 0 5; -+9 8a4d02022f177d3a:A40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2p1ppp/1p2p3/2pP4/2P1P3/8/PP3PPP/RNBQKBNR b KQkq - 0 4: -+9 4e4a0f4ac497c0300A40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2p1ppp/1p2p3/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 49 -+9383dfd7bdcb55062bA40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2ppppp/1p6/2pP4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 38 -+98235be284593c63f?A40enEnglish DefenseBlumenfeld-Hiva Gambitrnbqkbnr/p2ppppp/1p6/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 \ . 6 3Z]uuuu;(f - +m9b58a4fbe3e2520eA36enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqk1nr/pp1p1pbp/2n3p1/2p1p3/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR w KQkq - 0 6&e -+m1120acb17007aa388A36enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR b KQkq - 0 5NR#b -+ma210159c08245fe6A36enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedrnbqk1nr/pp1pppbp/6p1/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 1 4"a -+m12ac282af363944cLA36enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedrnbqkbnr/pp1ppp1p/6p1/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3 ` -+m 3e4a936b13b44c74tA36enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedrnbqkbnr/pp1ppp1p/6p1/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3 '\ - +med110abfaf5bbb97A37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqk1nr/pp1p1pbp/2n3p1/2p1p3/2P5/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 2 6&[ -+m5dad3709541c703d=A37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1p1p1p/2n3p1/2p1p3/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 1 5'Z -+me85d147419f1a844DA37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1p1p1p/2n3p1/2p1p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5$Y ++m1e9472f627e3a0fA37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1p1ppp/2n5/2p1p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4$X -+m2d0ffc6e82a9e2377A37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1p1ppp/2n5/2p1p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4!W - +ma777f424114c1a01A37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1ppppp/2n5/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 2 3!V -+m 5ce0ec86d3ae98d8A37enEnglish OpeningSymmetrical Variation, Botvinnik System Reversedr1bqkbnr/pp1ppppp/2n5/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 1 3R - +_3c873600914402377A38enEnglish OpeningSymmetrical Variation, Full Symmetry Liner1bqk2r/pp1pppbp/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 2 6Q - +_8c3b0bb66a03c99dA38enEnglish OpeningSymmetrical Variation, Full Symmetry Liner1bqkb1r/pp1ppp1p/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 1 5 bd x ; = / y8dddd\\\\+  -+Ab267b32dbf08b210A25enEnglish OpeningClosed, Taimanov Variationr1bqkb1r/pppp1p1p/2n3pn/4p3/2P5/2N3P1/PP1PPPBP/1RBQK1NR b Kkq - 3 5  ++A7979050f2e56a69iA25enEnglish OpeningClosed, Taimanov Variationr1bqkb1r/pppp1p1p/2n3pn/4p3/2P5/2N3P1/PP1PPP1P/1RBQKBNR w Kkq - 2 51z - + 7751fa22d9981d6foA33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defenser1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 0 6/y + + 1260813c1ba8d3d=A33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defenser1bqkb1r/pp1ppppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 52x - + 66b2554ed08b1f13A33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defenser1bqkb1r/pp1ppppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 55w - + 39acef7bad7f76d5A33enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defenser1bqkb1r/pp1ppppp/2n2n2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4  -+A861b0fb448670710A25enEnglish OpeningClosed, Taimanov Variationr1bqkbnr/pppp1p1p/2n3p1/4p3/2P5/2N3P1/PP1PPP1P/1RBQKBNR b Kkq - 1 4* - +y471a6253ae12236enA26enEnglish OpeningKing's English Variation, Closed System, Full Symmetryr1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR w KQkq - 0 61 - +64dc3b9ab0d286344A28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqk2r/pppp1ppp/2n2n2/4p3/2P5/2b1PN2/PPQP1PPP/R1B1KB1R w KQkq - 0 62 -+45e5409cad6ad43e>A28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqk2r/pppp1ppp/2n2n2/4p3/1bP5/2N1PN2/PPQP1PPP/R1B1KB1R b KQkq - 2 52 -+f4fc3281bfbce85aZA28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqk2r/pppp1ppp/2n2n2/4p3/1bP5/2N1PN2/PP1P1PPP/R1BQKB1R w KQkq - 1 5p - +c e3bf8d51bf599856VA34enEnglish OpeningSymmetrical Variation, Rubinstein Variationrnbqkb1r/ppn1pppp/8/2p5/8/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 6o ++c 1a8af6de904d88fA34enEnglish OpeningSymmetrical Variation, Rubinstein Variationrnbqkb1r/pp2pppp/8/2pn4/8/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 5n -+c b4588c10a4e900f6A34enEnglish OpeningSymmetrical Variation, Rubinstein Variationrnbqkb1r/pp2pppp/8/2pn4/8/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 5m -+c 2bb6f65d1b0c1daaA34enEnglish OpeningSymmetrical Variation, Rubinstein Variationrnbqkb1r/pp2pppp/5n2/2pP4/8/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 4l -+c259c6d90b9c209b7A34enEnglish OpeningSymmetrical Variation, Rubinstein Variationrnbqkb1r/pp2pppp/5n2/2pp4/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4D uu/wu{t l M 2 ]: Q -%m2d7d1fd1292e0302A00enGrob OpeningGrob Gambit, Fritz Gambit, Romford Countergambitrn1qkbnr/pBp1pppp/8/8/2Pp2b1/8/PP1PPP1P/RNBQK1NR b KQkq - 0 4|a~X -/% bfcdcf0db9e14d58XA00enHungarian OpeningAsten Gambitr1bqkbnr/ppp1pppp/2n5/3p4/8/2N3P1/PPPPPP1P/R1BQKBNR w KQkq - 0 3|W -/% 3aa7ed192535037e~A00enHungarian OpeningAsten Gambitr1bqkbnr/pppppppp/2n5/8/8/2N3P1/PPPPPP1P/R1BQKBNR b KQkq - 2 2{V -/%c130f5bbe7d781a7A00enHungarian OpeningAsten Gambitr1bqkbnr/pppppppp/2n5/8/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 1 2T - %mfbb122dedd532ca6A00enGrob OpeningGrob Gambit, Fritz Gambit, Romford Countergambitq3kbnr/p1pnpppp/8/8/2Pp2b1/8/PP1PPP1P/RNBQK1NR w KQk - 0 6S +%m4fd851e1aba9d04A00enGrob OpeningGrob Gambit, Fritz Gambit, Romford CountergambitB2qkbnr/p1pnpppp/8/8/2Pp2b1/8/PP1PPP1P/RNBQK1NR b KQk - 0 5R -%m1e9e648cc986eeceA00enGrob OpeningGrob Gambit, Fritz Gambit, Romford Countergambitr2qkbnr/pBpnpppp/8/8/2Pp2b1/8/PP1PPP1P/RNBQK1NR w KQkq - 1 5)J - ){301d598120a8cbfcA04enModern DefenseSemi-Averbakh Variation, Pterodactyl Variation Acceptedrnb1k1nr/pp2ppbp/3p2p1/q1P5/2P1P3/5N2/PP3PPP/RNBQKB1R w KQkq - 1 6T - 7-1f4514caba5419eeE70enKing's Indian DefenseKramer Variationrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2NPPP/R1BQKB1R b KQkq - 1 5  - 73e31222bb50dcdde2E71enKing's Indian DefenseMakogonov Variationrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5 - 7W2707444472a8cc28(E72enKing's Indian DefenseNormal Variation, Deferred Fianchettornbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5 - 7Y78617cfc935a5eb3E73enKing's Indian DefenseNormal Variation, Standard Developmentrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 5y - 7/ f6f782088bee2999E76enKing's Indian DefenseFour Pawns Attackrnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 5 p - 716550193432b5fb61aE80enKing's Indian DefenseSämisch Variationrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5g - 7Kd08513f3fa99752d-E90enKing's Indian DefenseNormal Variation, Rare Defensesrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5^ - /%d4925721361cd83f?A00enHungarian OpeningAsten Gambitr1bqkbnr/ppp3pp/2n5/4Pp2/3pN3/6P1/PPP1PP1P/R1BQKBNR w KQkq f6 0 6] -/% 901973c2dd800e93A00enHungarian OpeningAsten Gambitr1bqkbnr/ppp2ppp/2n5/4P3/3pN3/6P1/PPP1PP1P/R1BQKBNR b KQkq - 1 5\ -/%8e707dc1ffc705bbA00enHungarian OpeningAsten Gambitr1bqkbnr/ppp2ppp/2n5/4P3/3p4/2N3P1/PPP1PP1P/R1BQKBNR w KQkq - 0 5~[ -/% 6c1d17af33f82f5c\A00enHungarian OpeningAsten Gambitr1bqkbnr/ppp2ppp/2n5/3pP3/8/2N3P1/PPP1PP1P/R1BQKBNR b KQkq - 0 4Z -/%f080e8ed3bcd982c,A00enHungarian OpeningAsten Gambitr1bqkbnr/ppp2ppp/2n5/3pp3/3P4/2N3P1/PPP1PP1P/R1BQKBNR w KQkq - 0 4Y -/%7af8e0a7a828601aA00enHungarian OpeningAsten Gambitr1bqkbnr/ppp1pppp/2n5/3p4/3P4/2N3P1/PPP1PP1P/R1BQKBNR b KQkq - 0 3 f1 g 6 ( X82 PTQ!% - +a5497147d3b9415d6A28enEnglish OpeningFour Knights System, Nimzowitsch Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R b KQkq - 0 48 - +bc76a27430c370e4A29enEnglish OpeningKing's English Variation, Four Knights Variation, Fianchetto Liner1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4  - 93 e594fe9ac722e25e^A40enEnglund Gambit ComplexStockholm Variationr1b1kbnr/ppppqppp/2n5/3QP3/8/5N2/PPP1PPPP/RNB1KB1R b KQkq - 4 4 - 3Ge6eec3c5dd6522388A40enPterodactyl DefenseQueen Pterodactyl, Quiet Linernbqk1nr/pp1pppbp/6p1/2p5/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 - )+ 500fcbf03f855586A42enModern DefenseAverbakh Systemrnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4u  - /;7eabae7974e082a3A45enTrompowsky AttackPoisoned Pawn Variationrnb1kb1r/pp1ppppp/1q3n2/2pP2B1/8/2N5/PPP1PPPP/R2QKBNR b KQkq - 2 4  -/;853cb6dbb602007azA45enTrompowsky AttackPoisoned Pawn Variationrnb1kb1r/pp1ppppp/1q3n2/2pP2B1/8/8/PPP1PPPP/RN1QKBNR w KQkq - 1 4 -/; 42c3488c7c49d6a0A45enTrompowsky AttackPoisoned Pawn Variationrnbqkb1r/pp1ppppp/5n2/2pP2B1/8/8/PPP1PPPP/RN1QKBNR b KQkq - 0 3  -/; f8cb0bdfe56f40fdA45enTrompowsky AttackPoisoned Pawn Variationrnbqkb1r/pp1ppppp/5n2/2p3B1/3P4/8/PPP1PPPP/RN1QKBNR w KQkq - 0 3  -3G 4bc38177f93aaa9cA40enPterodactyl DefenseQueen Pterodactyl, Quiet Linernbqk1nr/pp1pppbp/6p1/2p5/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4{ + #C 80f745d7cb61e10A45enIndian GameOmega Gambit, Arafat Gambitrnbqkb1r/pppppppp/5n2/6B1/3P4/3B4/PPP2PPP/RN1QK1NR b KQkq - 3 4z -#Cce55236bcc3cc5d8A45enIndian GameOmega Gambit, Arafat Gambitrnbqkb1r/pppppppp/5n2/8/3P4/3B4/PPP2PPP/RNBQK1NR w KQkq - 2 4y -#Cf45d6ff47e754822"A45enIndian GameOmega Gambit, Arafat Gambitrnbqkb1r/pppppppp/8/8/3Pn3/3B4/PPP2PPP/RNBQK1NR b KQkq - 1 3x -#Ca150ce5647f58a51QA45enIndian GameOmega Gambit, Arafat Gambitrnbqkb1r/pppppppp/8/8/3Pn3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 t - #a2e1c91a6f1703bfeA45enIndian GameGibbins-Wiedenhagen Gambit, Maltese Falconrnbqkb1r/pppppppp/5n2/8/3PP3/5P2/PPP4P/RNBQKBNR b KQkq - 0 4s -#aea1b9cee1af086f4A45enIndian GameGibbins-Wiedenhagen Gambit, Maltese Falconrnbqkb1r/pppppppp/5n2/8/3P4/5P2/PPP1P2P/RNBQKBNR w KQkq - 1 4r -#a7738c78817ba1798A45enIndian GameGibbins-Wiedenhagen Gambit, Maltese Falconrnbqkb1r/pppppppp/8/8/3P2n1/5P2/PPP1P2P/RNBQKBNR b KQkq - 0 31m - /Ocd54fe0034da7610A46enQueen's Pawn GameVeresov Attack, Classical Defensernbqkb1r/ppp2ppp/4pn2/3p2B1/3P4/2N2N2/PPP1PPPP/R2QKB1R b KQkq - 1 4l +/Ob0ea9368450add8A46enQueen's Pawn GameVeresov Attack, Classical Defensernbqkb1r/ppp2ppp/4pn2/3p4/3P4/2N2N2/PPP1PPPP/R1BQKB1R w KQkq - 0 4k -/O8e648b221884e3feA46enQueen's Pawn GameVeresov Attack, Classical Defensernbqkb1r/pppp1ppp/4pn2/8/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 1 3 Q  S# u ]gs{- - /] 1135649d4cacfa5d]A04enZukertort OpeningArctic Defense, Drunken Knight Variationrnbqkb1r/pppppnpp/5p2/8/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 4, -/] d1b4c1a1045777efA04enZukertort OpeningArctic Defense, Drunken Knight Variationrnbqkb1r/ppppp1pp/5p1n/8/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3+ -/] 1481ee0b159e5aadA04enZukertort OpeningArctic Defense, Drunken Knight Variationrnbqkb1r/ppppp1pp/5p1n/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 3* -/] 950d71efaf1c37d4A04enZukertort OpeningArctic Defense, Drunken Knight Variationrnbqkbnr/ppppp1pp/5p2/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 2Dj - 5- ccbfc98aa14f7db8A08enKing's Indian AttackFrench Variationr1bqkbnr/pp2pppp/2n5/2pp4/8/5NP1/PPPPPPBP/RNBQK2R w KQkq - 2 4 q  - 'G bf852e8a9f7865cfA09enRéti OpeningRéti Gambit, Keres Variationrn1qkbnr/ppp1pppp/4b3/8/2p5/4PN2/PP1P1PPP/RNBQKB1R w KQkq - 1 4  -'Geb3dbc5ed7cd1ec7A09enRéti OpeningRéti Gambit, Keres Variationrnbqkbnr/ppp1pppp/8/8/2p5/4PN2/PP1P1PPP/RNBQKB1R b KQkq - 0 3 ' - 5+b01371a9e8b430e0A07enKing's Indian AttackKeres Variationr2qkbnr/pppnpppp/8/3p4/6b1/5NP1/PPPPPPBP/RNBQK2R w KQkq - 3 4& -5+ 83f00af4081cdd2c,A07enKing's Indian AttackKeres Variationrn1qkbnr/ppp1pppp/8/3p4/6b1/5NP1/PPPPPPBP/RNBQK2R b KQkq - 2 3b! + +_aaa1b31970e7365eA07enEnglish OpeningAnglo-Indian Defense, Grünfeld Formationrnbqkb1r/ppp1pp1p/5np1/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 1 4 -+_51442fc43af432f3A07enEnglish OpeningAnglo-Indian Defense, Grünfeld Formationrnbqkbnr/ppp1pp1p/6p1/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3 Je  v c I-DjJJJJJJJJJJ:IJu - 5K dbfea0d031d66fa6E24enNimzo-Indian DefenseSämisch Variation, Acceleratedrnbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4 n - 5Qef8df0d9bfd41de4E36enNimzo-Indian DefenseClassical Variation, Noa Variationrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5; e - 5[4f9ae9258ba96fc1E42enNimzo-Indian DefenseHübner Variation, Rubinstein Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5D \ - 5/c282719b8a6dd327'E44enNimzo-Indian DefenseFischer Variationrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 S - 53 a343d53ca1b78d57WE46enNimzo-Indian DefenseReshevsky Variationrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQ - 2 5 J - 5K e2ea9f51b01c42daE47enNimzo-Indian DefenseNormal Variation, Bishop Attackrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5vA - 5 6c83d205e17ae194E50enNimzo-Indian Defensernbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5 8 - 7/d2d8498da19313efE61enKing's Indian DefenseSmyslov Variationrnbqk2r/ppp1ppbp/3p1np1/6B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5 7 -7/14821ebb1119c827'E61enKing's Indian DefenseSmyslov Variationrnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 56 -7/ 2d3888dac361814aJE61enKing's Indian DefenseSmyslov Variationrnbqk2r/ppppppbp/5np1/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4!/ - 7]3864a5faf1ce101fE62enKing's Indian DefenseFianchetto Variation, Delayed Fianchettornbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5& - 7Icdbba83322f5cfd8E70enKing's Indian DefenseAccelerated Averbakh Variationrnbqk2r/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP3PPP/R2QKBNR b KQkq - 1 5  UU 6 "       9a  w - 5Kb112b1e78132d2ecE24enNimzo-Indian DefenseSämisch Variation, Acceleratedrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5v - 5K fac7dbd62c6e3dacE24enNimzo-Indian DefenseSämisch Variation, Acceleratedrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5$ - 9E122224b49e16deb9E12enQueen's Indian DefenseKasparov-Petrosian Variationrn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/P1N2N2/1P2PPPP/R1BQKB1R b KQkq - 2 5# -9Ee9b53c165cf45c60`E12enQueen's Indian DefenseKasparov-Petrosian Variationrn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/P4N2/1P2PPPP/RNBQKB1R w KQkq - 1 551 - 9{fde9cc451691cc10E15enQueen's Indian DefenseFianchetto Variation, Nimzowitsch Variation, Quiet Linern1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/1P3NP1/P3PP1P/RNBQKB1R b KQkq - 0 5 k: - 9 a3eb115e0c225506E15enQueen's Indian DefenseFianchetto Variation, Nimzowitsch Variation, Nimzowitsch Attackrn1qkb1r/p1pp1ppp/bp2pn2/8/Q1PP4/5NP1/PP2PP1P/RNB1KB1R b KQkq - 2 57 - 94bb60fa9f9270f9bE15enQueen's Indian DefenseFianchetto Variation, Nimzowitsch Variation, Timman's Linern1qkb1r/p1pp1ppp/bp2pn2/8/2PP4/1Q3NP1/PP2PP1P/RNB1KB1R b KQkq - 2 5$ - 5c977feffd761d1dfbE21enNimzo-Indian DefenseThree Knights Variation, Korchnoi Variationrnbqk2r/pp1p1ppp/4pn2/2pP4/1bP5/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5$ -5c2d77acaeef3b8ba6E21enNimzo-Indian DefenseThree Knights Variation, Korchnoi Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5! -XPH | t l d \ T L D < 4 , $   /~vnf^VNF>6.&VA}ume]UME=5-% ;-xphxph`WNE<)i"\5-% }ume\SD?KC;3+#  { s k c [ R J B : 2 * "    z r j b Z R J B : 2 * "    M r`wS8 z r j b Z R J B : 2 * "    _26n | t l d \ T L D < 4 , $    ypg^UL{+eJD<4 i`6PH@a~8W  }mQ95O2 e[NA2ya]>  w'Po~M{}pa&`ub[E=@??e)"V (_~}p3pol1k/f^]XNlB9[-q+!iKi 4Mgs~8~#}}v]pYRTPPNM?A;z3/+#"'}!yC6}||`yxoUni_iZW[NMM>>>93"zJyvr jgkdc\[SWQMMeIFA<\;/.'+++L*n'%! Pe  1K%#J]~~1||xRxNx iiiG_\[OmC@=@-H Y~U}{{mzyyw vutkeCYYWR9MK;;>3a+.&&o&% "G ~|  ~?D{yy*w4rr jbaYX`XQMfJCd<:M90.+K%.   ~|{CyljhTONIHhE$@m6,3.22+'' $ v+?K~} {vKutCrpa_\aPPuOMHFE     H       {FFFtk Xu - /+7af617819f8b3d17D90enGrünfeld DefenseFlohr Variationrnbqk2r/ppp1ppbp/5np1/3p4/Q1PP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5 l - /_6e08fdf8ef3f14a4D91enGrünfeld DefenseThree Knights Variation, Petrosian Systemrnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5c - /_73064c4fc6d5250fD92enGrünfeld DefenseThree Knights Variation, Hungarian Attackrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5Z + /a57fe87c7bea47c8D94enGrünfeld DefenseThree Knights Variation, Burille Variationrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5Q - //92ab09766a8e678aD96enGrünfeld DefenseRussian Variationrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5|H - +% 3e6ade075261f9e2E02enCatalan OpeningOpen Defensernbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5{G - +% ecce6348925f0b99E02enCatalan OpeningOpen Defensernbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 59{? - +% 37aa8fbefab96aa4E04enCatalan OpeningOpen Defensernbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 56 - +- f160c563622c28d6E06enCatalan OpeningClosed Variationrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 55 - +- 2a0429950aca49ebE06enCatalan OpeningClosed Variationrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5- + =?3f7a37ad42f31f5E10enBlumenfeld CountergambitDus-Khotimirsky Variationrnbqkb1r/p2p1ppp/4pn2/1ppP2B1/2P5/5N2/PP2PPPP/RN1QKB1R b KQkq - 1 5 G  c1 ? M eGGGGGGGGwwww  - Y 6e0dfabeddda6f85D05enQueen's Pawn Game, Zukertort Variationrnbqkb1r/pp3ppp/4pn2/2pp4/3P4/1P2PN2/P1PN1PPP/R1BQKB1R b KQkq - 0 5  -Y e2ab9aea075704e8D05enQueen's Pawn Game, Zukertort Variationrnbqkb1r/pp3ppp/4pn2/2pp4/3P4/4PN2/PPPN1PPP/R1BQKB1R w KQkq - 0 5  -Y 94dc68db1f7594baD05enQueen's Pawn Game, Zukertort Variationrnbqkb1r/pp2pppp/5n2/2pp4/3P4/4PN2/PPPN1PPP/R1BQKB1R b KQkq - 2 4 -Y cdb2d0b985883c8aD05enQueen's Pawn Game, Zukertort Variationrnbqkb1r/pp2pppp/5n2/2pp4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 1 4V - %Sde4532676184505aZD15enSlav DefenseChameleon Variation, Advance Systemrnbqkb1r/1p2pppp/p1p2n2/2Pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5 ~q - %/ 98127bb2745a612d-D05enColle SystemTraditional Collernbqkb1r/pp3ppp/4pn2/2pp4/3P4/2PBPN2/PP3PPP/RNBQK2R b KQkq - 0 5  _ - 9_ 22a016b116cc4d58XD09enQueen's Gambit RefusedAlbin Countergambit, Fianchetto Variationr1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5M - %11c0b524cdedc2371qD15enSlav DefenseAlekhine Variationrnbqkb1r/pp2pppp/2p2n2/8/2pP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5 |D - %'75211db6110316dfD15enSlav DefenseGeller Gambitrnbqkb1r/pp2pppp/2p2n2/8/2pPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 5 7 -Y 965ce44c28727d1cD05enQueen's Pawn Game, Zukertort Variationrnbqkbnr/pp2pppp/8/2pp4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3gvz - 1 626ee37e7ea705c6D05enRubinstein Openingrnbqkb1r/pp3ppp/4pn2/2pp4/3P4/1P1BPN2/P1P2PPP/RNBQK2R b KQkq - 0 5ty -1 eec8832aa42a6eabD05enRubinstein Openingrnbqkb1r/pp3ppp/4pn2/2pp4/3P4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 0 5ux -1 6ba2a13e38fe208dD05enRubinstein Openingrnbqkb1r/pp1p1ppp/4pn2/2p5/3P4/3BPN2/PPP2PPP/RNBQK2R b KQkq - 1 4uw -1 3eaf009c017ee2feD05enRubinstein Openingrnbqkb1r/pp1p1ppp/4pn2/2p5/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4h - 9M 572815926ce63d50PD08enQueen's Gambit RefusedAlbin Countergambit, Modern Liner1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R b KQkq - 3 5g +9M e46adf0f61b9560`D08enQueen's Gambit RefusedAlbin Countergambit, Modern Liner1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 5  p<sU l !)pppppppppppppp K - E85d3057c1ccb21fbC77enRuy LopezMorphy Defense, Jaffe Gambitr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5 B - I650f72c682ff75f9C77enRuy LopezMorphy Defense, Wormald Attackr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB1K2R b KQkq - 3 59 - S5dad3e31882b95a9C77enRuy LopezMorphy Defense, Anderssen Variationr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/3P1N2/PPP2PPP/RNBQK2R b KQkq - 0 50 - S363cd24edd72033f?C77enRuy LopezMorphy Defense, Mackenzie Variationr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B2PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 5z' - )8d7c86d0b048f56dmC78enRuy LopezMorphy Defenser1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5 -';bbcb748a38b75e4dMD02enLondon SystemPoisoned Pawn Variationrnbqkb1r/pp2pppp/5n2/2pp4/3P1B2/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4# - 9G248b1e27e98161b7D00enBlackmar-Diemer GambitZeller Defense, Soller Attackrn1qkb1r/ppp1pppp/5n2/5b2/2BPp3/2N2P2/PPP3PP/R1BQK1NR b KQkq - 2 5 -9G 1cd69efa6c38f687D00enBlackmar-Diemer GambitZeller Defense, Soller Attackrn1qkbnr/ppp1pppp/8/5b2/3Pp3/2N2P2/PPP3PP/R1BQKBNR b KQkq - 0 4 , - 9% a8fb02780de81d300D00enBlackmar-Diemer GambitRyder Gambitrnbqkb1r/ppp1pppp/5n2/8/3P4/2N2Q2/PPP3PP/R1B1KBNR b KQkq - 0 5 -9% e1f8f657b48533e7D00enBlackmar-Diemer GambitRyder Gambitrnbqkb1r/ppp1pppp/5n2/8/3P4/2N2p2/PPP3PP/R1BQKBNR w KQkq - 0 5b - ';2a8ed0cd144182eaD02enLondon SystemPoisoned Pawn Variationrnb1kb1r/pp2pppp/1q3n2/2pp4/3P1B2/2N1PN2/PPP2PPP/R2QKB1R b KQkq - 2 5 -';d119c86fd6a300333D02enLondon SystemPoisoned Pawn Variationrnb1kb1r/pp2pppp/1q3n2/2pp4/3P1B2/4PN2/PPP2PPP/RN1QKB1R w KQkq - 1 5 -';16e636381ce8d6e9D02enLondon SystemPoisoned Pawn Variationrnbqkb1r/pp2pppp/5n2/2pp4/3P1B2/4PN2/PPP2PPP/RN1QKB1R b KQkq - 0 4 ?  ^ -H: , -Gd5c86dfece2482c9C65enRuy LopezBerlin Defense, Nyholm Attackr1bqkb1r/pppp1ppp/2n2n2/1B2p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4   + S58c874168a1de5c\C68enRuy LopezExchange Variation, Keres Variationr1bqkbnr/1pp2ppp/p1p5/4p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 1 5  -S fe1b9fe3aa435c85C68enRuy LopezExchange Variation, Keres Variationr1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5(  - U 806ee4d7d6b08795C69enRuy LopezExchange Variation, Normal Variationr1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 50 -  d0449bc79d4e6bf2C70enRuy LopezMorphy Defense, Schliemann Defense Deferred, Jaenisch Gambit Deferredr1bqkbnr/1ppp2pp/p1n5/4pP2/B7/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5 m - [6aca47d271dba45f_C71enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 1 5 x - [1d7ec054f0368d81C71enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp2ppp/p1np4/4p3/B1P1P3/5N2/PP1P1PPP/RNBQK2R b KQkq - 0 5o - [ ef282444cfcafd96C72enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5f - [e787a7e863492900C74enRuy LopezMorphy Defense, Modern Steinitz Defenser1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5] - Q6bf3afeb31bc0265eC77enRuy LopezMorphy Defense, Bayreuth Variationr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5\ - Qf309fde4ccbb2e7d}C77enRuy LopezMorphy Defense, Bayreuth Variationr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5T + Q89ee5460e59aca4C77enRuy LopezMorphy Defense, Tarrasch Variationr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 3 5% - Wb54f85a3b95c919eC65enRuy LopezClassical Variation, Zukertort Gambitr1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 5- YrO ( f f2jhYYYYYYYKq1 - %c452f755a4088c333C57enItalian GameTwo Knights Defense, Traxler Counterattack, Knight Sacrifice Liner1bqk2r/pppp1Npp/2n2n2/2b1p3/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 0 5'v -  4cb2bc531132efedC60enRuy LopezSpanish Countergambit, Harding Countergambit, Fricke Gambitr1b1kbnr/ppp2ppp/2n5/1B1pN1q1/4P3/8/PPPP1PPP/RNBQ1RK1 b kq - 2 5(u -32c7c7676dc134fdC60enRuy LopezSpanish Countergambit, Harding Countergambit, Fricke Gambitr1b1kbnr/ppp2ppp/2n5/1B1pN1q1/4P3/8/PPPP1PPP/RNBQK2R w KQkq - 1 5%t - 703aa04e4add050d C60enRuy LopezSpanish Countergambit, Harding Countergambit, Fricke Gambitr1bqkbnr/ppp2ppp/2n5/1B1pN3/4P3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4Xm - W dd1a3efb8380e071qC60enRuy LopezSpanish Countergambit, Harding Gambitr1b1kbnr/ppp2ppp/2N5/1B1p2q1/4P3/8/PPPP1PPP/RNBQK2R b KQkq - 0 5d - ad97eae1c28f3f104C62enRuy LopezOld Steinitz Defense, Semi-Duras Variationr2qkbnr/pppb1ppp/2np4/1B2p3/2PPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 5c -a555d31386bfc5a03C62enRuy LopezOld Steinitz Defense, Semi-Duras Variationr2qkbnr/pppb1ppp/2np4/1B2p3/3PP3/5N2/PPP2PPP/RNBQK2R w KQkq - 1 5b -ab79ccf6ab1a68a322C62enRuy LopezOld Steinitz Defense, Semi-Duras Variationr1bqkbnr/ppp2ppp/2np4/1B2p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4 <[ - K 5297bedc092e45377C62enRuy LopezSteinitz Defense, Center Gambitr1bqkbnr/ppp2ppp/2np4/1B6/3pP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 1 5Z -K 2ce2c5e875dd9e27'C62enRuy LopezSteinitz Defense, Center Gambitr1bqkbnr/ppp2ppp/2np4/1B6/3pP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5R - Ue5f35083dc24f30b C64enRuy LopezClassical Defense, Zaitsev Variationr1bqk1nr/pppp1ppp/8/1Bb1p3/1P1nP3/5N2/P1PP1PPP/RNBQ1RK1 b kq - 0 5Q -U 4f06252f7a929f2f/C64enRuy LopezClassical Defense, Zaitsev Variationr1bqk1nr/pppp1ppp/8/1Bb1p3/3nP3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 6 5P -U987b49cec4d6df8eC64enRuy LopezClassical Defense, Zaitsev Variationr1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 5 4 I - Sd6cc2d06ef538d09 C65enRuy LopezBerlin Defense, Anderssen Variationr1bqkb1r/ppp2ppp/2Bp1n2/4p3/4P3/3P1N2/PPP2PPP/RNBQK2R b KQkq - 0 5H -S87e317e049055d322C65enRuy LopezBerlin Defense, Anderssen Variationr1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 0 5, @ + Kbc088c40a0af6355C65enRuy LopezBerlin Defense, Duras Variationr1bqkb1r/ppp2ppp/2np1n2/1B2p3/2P1P3/3P1N2/PP3PPP/RNBQK2R b KQkq - 0 57 - Q604c7e36d075e552RC65enRuy LopezBerlin Defense, Kaufmann Variationr1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/3PBN2/PPP2PPP/RN1QK2R b KQkq - 2 56 -Q1344c5da514ffedcC65enRuy LopezBerlin Defense, Kaufmann Variationr1bqk2r/pppp1ppp/2n2n2/1Bb1p3/4P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 1 5. - G 30c31c4876ac4dccC65enRuy LopezBerlin Defense, Nyholm Attackr1bqkb1r/pppp1ppp/2n2n2/1B6/3pP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 1 5 - -G4eb6677c0a5f96dcC65enRuy LopezBerlin Defense, Nyholm Attackr1bqkb1r/pppp1ppp/2n2n2/1B6/3pP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 * e A A |@eeeeeeeeee>>>>>>*'Y - %Oe522e024f48bd4bbC50enItalian GameClassical Variation, Albin Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQ1RK1 b kq - 0 5X -%O93f818bc24fbdb3d=C50enItalian GameClassical Variation, Albin Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 6 5W -%Oc8162c4989019aabC50enItalian GameClassical Variation, Albin Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 5 4{P - %%56cd37163532f67fC50enItalian GameDeutz Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2BPP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 5G - %797a4747740071144DC51enItalian GameEvans Gambit Declinedr1bqk1nr/pppp1ppp/1bn5/4p3/PPB1P3/5N2/2PP1PPP/RNBQK2R b KQkq - 0 5 > - %[3c11e09ee0085865eC51enItalian GameEvans Gambit Declined, Cordel Variationr1bqk1nr/pppp1ppp/1bn5/4p3/1PB1P3/5N2/PBPP1PPP/RN1QK2R b KQkq - 2 55 - %'31a2eebc2ece638fC53enItalian GameBird's Attackr1bqk2r/pppp1ppp/2n2n2/2b1p3/1PB1P3/2P2N2/P2P1PPP/RNBQK2R b KQkq - 0 5  , - %Y35f358c5cce8b47fC53enItalian GameClassical Variation, Giuoco Pianissimor1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2PP1N2/PP3PPP/RNBQK2R b KQkq - 0 5# - %Q5e62b4ba99b122e9C53enItalian GameClassical Variation, Center Attackr1bqk2r/pppp1ppp/2n2n2/2b1p3/2BPP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5z - %' 60ae79cf3b7b08e9C55enItalian GameScotch Gambitr1bqkb1r/pppp1ppp/2n2n2/8/2BpP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 1 5 - %Y 4809e32eee442b5d]C55enItalian GameTwo Knights Defense, Perreux Variationr1bqkb1r/pppp1ppp/2n2n2/6N1/2BpP3/8/PPP2PPP/RNBQK2R b KQkq - 1 52 - %1aecd27119255afcC57enItalian GameTwo Knights Defense, Traxler Counterattack, Bishop Sacrifice Liner1bqk2r/pppp1Bpp/2n2n2/2b1p1N1/4P3/8/PPPP1PPP/RNBQK2R b KQkq - 0 5p  A< m ; @ BCGAAhhhhhhhhhhhhhhh~i - #1 4482632e4ad4dcc0C45enScotch GameSteinitz Variationr1b1kbnr/pppp1ppp/2n5/8/3NP2q/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 |` - #- cc1dc060090c4597C45enScotch GameBraune Variationr1b1kbnr/pppp1ppp/2n5/8/3NP2q/4B3/PPP2PPP/RN1QKB1R b KQkq - 2 5xW - #) 4a7f91e189a6644fOC45enScotch GameHorwitz Attackr1b1kbnr/pppp1ppp/2n5/1N6/4P2q/8/PPP2PPP/RNBQKB1R b KQkq - 2 5{N - #- c172e1804aeee6d6C45enScotch GameFraser Variationr1b1kbnr/pppp1ppp/2n5/8/4P2q/5N2/PPP2PPP/RNBQKB1R b KQkq - 2 5|E - #/ 6f52c8c7f7a12289C45enScotch GamePaulsen Variationr1b1kbnr/pppp1ppp/2n5/5N2/4P2q/8/PPP2PPP/RNBQKB1R b KQkq - 2 5|< - #- 787ea30d0825faaeC45enScotch GamePotter Variationr1bqk1nr/pppp1ppp/2n5/2b5/4P3/1N6/PPP2PPP/RNBQKB1R b KQkq - 2 5 ~z3 - #+ 7b85fd737ae4b115C45enScotch GameAlekhine Gambitr1bqkb1r/pppp1ppp/2n2n2/4P3/3N4/8/PPP2PPP/RNBQKB1R b KQkq - 0 5 }* - 7Ef4b067f3611d2b0eC46enThree Knights OpeningSteinitz-Rosenthal Variationr1bqkbnr/pppp1p1p/2n3p1/3N4/3pP3/5N2/PPP2PPP/R1BQKB1R b KQkq - 1 5) -7E34a5c9df7b5c545b[C46enThree Knights OpeningSteinitz-Rosenthal Variationr1bqkbnr/pppp1p1p/2n3p1/8/3pP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 0 5( -7Eafdbc35dbf27404eNC46enThree Knights OpeningSteinitz-Rosenthal Variationr1bqkbnr/pppp1p1p/2n3p1/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4g4! - /Ga7032104beee6d11C46enFour Knights GameItalian Variation, Noa Gambitr1bqkb1r/pppp1Bpp/2n5/4p3/4n3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 0 5 +/G6b07128560fcf64dC46enFour Knights GameItalian Variation, Noa Gambitr1bqkb1r/pppp1ppp/2n5/4p3/2B1n3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 5  H D(qA - -Q 93f09f89067b8f73sC41enPhilidor DefenseHanham Variation, Krause Variationr1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 1 5z/ - -)b09c096a2b0dfacdC41enPhilidor DefensePaulsen Attackrnbqkbnr/ppp2ppp/8/3P4/3N4/8/PPP2PPP/RNBQKB1R b KQkq - 0 5{. --)97430327f162b8cbC41enPhilidor DefensePaulsen Attackrnbqkbnr/ppp2ppp/8/3p4/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5& + -_ c05fbabfc464577wC41enPhilidor DefenseNimzowitsch Variation, Sokolsky Variationrnbqkb1r/ppp2ppp/3p4/4P3/4n3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 1 5% --_ 556b43c966bbed47GC41enPhilidor DefenseNimzowitsch Variation, Sokolsky Variationrnbqkb1r/ppp2ppp/3p4/4P3/4n3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5 B? - -_ ce62188d855afbd5C41enPhilidor DefenseNimzowitsch Variation, Rellstab Variationrnbqkb1r/ppp2ppp/3p4/3QP3/4n3/5N2/PPP2PPP/RNB1KB1R b KQkq - 1 5 - %1 942fa0b7423635ecC42enRussian GameNimzowitsch Attackrnbqkb1r/ppp2ppp/3p4/8/4n3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 5J{ - %+ e39b2731c3db1c322C42enRussian GameKaufmann Attackrnbqkb1r/ppp2ppp/3p4/8/2P1n3/5N2/PP1P1PPP/RNBQKB1R b KQkq - 0 5 - %7f9be3737ce90ecb1C42enRussian GameCozio (Lasker) Attackrnbqkb1r/ppp2ppp/3p4/8/4n3/5N2/PPPPQPPP/RNB1KB1R b KQkq - 1 5yy - %' c11c7bc0c4440ce1C42enRussian GameFrench Attackrnbqkb1r/ppp2ppp/3p4/8/4n3/3P1N2/PPP2PPP/RNBQKB1R b KQkq - 0 5' 8 - -;bb570568d344acc7C41enPhilidor DefenseHanham, Kmoch Variationr1bqkbnr/pp1n1ppp/2pp4/4p1N1/2BPP3/8/PPP2PPP/RNBQK2R b KQkq - 1 5  e+ < ^w7 w - a 4be67a896cba407azC40enLatvian Gambit Accepted, Bilguer Variationrnb1kbnr/ppp3pp/3p1q2/5p2/2NPP3/8/PPP2PPP/RNBQKB1R b KQkq - 1 5 v +a 2bbc982badc77b7C40enLatvian Gambit Accepted, Bilguer Variationrnb1kbnr/ppp3pp/3p1q2/4Np2/3PP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 n - e 8eed73e629389947GC40enLatvian Gambit Accepted, Leonhardt Variationrnb1kbnr/pppp2pp/5q2/8/2N1p3/2N5/PPPP1PPP/R1BQKB1R b KQkq - 1 5 m -e 757a6b44ebda1b9eC40enLatvian Gambit Accepted, Leonhardt Variationrnb1kbnr/pppp2pp/5q2/8/2N1p3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 5 e - _ dbdea891af4aa04aJC40enLatvian Gambit Accepted, Foltys Variationrnb1kbnr/pppp2pp/5q2/8/2N1p3/3P4/PPP2PPP/RNBQKB1R b KQkq - 0 5\ - -G1f7890fba2667f2c,C41enPhilidor DefenseLion Variation, Shirov Gambitr1bqkb1r/pppn1ppp/3p1n2/4p3/3PP1P1/2N2N2/PPP2P1P/R1BQKB1R b KQkq - 0 5 Z --Ge7dba5d8e7e9d3a7C41enPhilidor DefenseLion Variation, Shirov Gambitr1bqkbnr/pppn1ppp/3p4/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 4S - -Y1612fc1fb86ad6baC41enPhilidor DefenseHanham Variation, Schlechter Variationr1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/2N2N2/PPP2PPP/R1BQK2R b KQkq - 1 5R --Yed85e4bd7a885463cC41enPhilidor DefenseHanham Variation, Schlechter Variationr1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5J - -Q9b5f1c25aaf85be5C41enPhilidor DefenseHanham Variation, Delmar Variationr1bqkbnr/pp1n1ppp/2pp4/4p3/2BPP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 5 ?i5 % Wl=h i -#E178508e2698b3a90C25enVienna GameVienna Gambit, Pierce Gambitr1bqkbnr/pppp1p1p/2n5/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 0 5a - -Q1322929b1f727742BC28enBishop's OpeningVienna Hybrid, Hromádka Variationr1bqk2r/pppp1ppp/2n2n2/4p3/1bB1P3/2NP4/PPP1NPPP/R1BQK2R b KQkq - 2 5` +-Q786795437597abcC28enBishop's OpeningVienna Hybrid, Hromádka Variationr1bqk2r/pppp1ppp/2n2n2/4p3/1bB1P3/2NP4/PPP2PPP/R1BQK1NR w KQkq - 1 59X - #Sfba60c254f9ef2edC28enVienna GameStanley Variation, Bronstein Gambitr1bqkb1r/pppp1ppp/2n5/4p3/2B1nP2/2N2N2/PPPP2PP/R1BQK2R b KQkq - 1 5W -#S20c2e0d3277893d0C28enVienna GameStanley Variation, Bronstein Gambitr1bqkb1r/pppp1ppp/2n5/4p3/2B1nP2/2N5/PPPP2PP/R1BQK1NR w KQkq - 0 5V -#S9d75ae8a21af34c3C28enVienna GameStanley Variation, Bronstein Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1PP2/2N5/PPPP2PP/R1BQK1NR b KQkq - 0 4O - #G 5b4bdd9dc26f0c7c|C29enVienna GameVienna Gambit, Paulsen Attackrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N2Q2/PPPP2PP/R1B1KBNR b KQkq - 1 5N -#Ge169a6aeee125ac7C29enVienna GameVienna Gambit, Paulsen Attackrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 5 M -#G 5cdee8f7e8c5fdd4C29enVienna GameVienna Gambit, Paulsen Attackrnbqkb1r/ppp2ppp/5n2/3pP3/4P3/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 4 F - #K4fcd657baa82e113C29enVienna GameVienna Gambit, Modern Variationrnbqkb1r/ppp2ppp/8/3pP3/4n3/2NP4/PPP3PP/R1BQKBNR b KQkq - 0 5= - 9Q5e1bece02c4ae808C30enKing's Gambit DeclinedNorwalde Variation, Bücker Gambitrnb1k1nr/pppp1ppp/8/4p3/1bB1Pq2/2N2N2/PPPP2PP/R1BQK2R b KQkq - 3 5< -9Q3da858c804093eaeC30enKing's Gambit DeclinedNorwalde Variation, Bücker Gambitrnb1k1nr/pppp1ppp/8/4p3/1b2Pq2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 5; -9Q f4e931ce4ffef68cC30enKing's Gambit DeclinedNorwalde Variation, Bücker Gambitrnb1kbnr/pppp1ppp/8/4p3/4Pq2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4q4 - 9I 4e9e58552287cf344C31enKing's Gambit DeclinedFalkbeer, Rubinstein Variationrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/2N5/PPPPQ1PP/R1B1KBNR b KQkq - 3 53 -9I d898d7776cc394b0C31enKing's Gambit DeclinedFalkbeer, Rubinstein Variationrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 2 52 -9I8376e382c139d526&C31enKing's Gambit DeclinedFalkbeer, Rubinstein Variationrnbqkbnr/ppp2ppp/8/3P4/4pP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 1 4 ~ tp r j)ttttttttttd - -) --%8ddbcc3103207484C23enBishop's OpeningLopez Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P5/PP1PQPPP/RNB1K1NR b KQkq - 0 4 --%fb0134a9d3507b02C23enBishop's OpeningLopez Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/8/PPPPQPPP/RNB1K1NR w KQkq - 4 4 - -)e609f72c1eb9efbbC24enBishop's OpeningKrejcik Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/1PB1P3/5P2/P1PPN1PP/RNBQK2R b KQkq - 0 5 --)4cfc8280b80f839fC24enBishop's OpeningKrejcik Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/5P2/PPPPN1PP/RNBQK2R w KQkq - 3 5 --)e7115a62a99e269cC24enBishop's OpeningKrejcik Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/5P2/PPPPN1PP/RNBQK2R b KQkq - 2 4 --)f3b5b1ad81b52b62bC24enBishop's OpeningKrejcik Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/5P2/PPPP2PP/RNBQK1NR w KQkq - 1 4  | + #]407e26cf6b9c4eaC25enVienna GameStanley Variation, Meitner-Mieses Gambitr1b1k1nr/pppp1ppp/2n2q2/2bNp3/2B1P1Q1/8/PPPP1PPP/R1B1K1NR b KQkq - 7 5{ -#]c4124c40ecf8bbbfC25enVienna GameStanley Variation, Meitner-Mieses Gambitr1b1k1nr/pppp1ppp/2n2q2/2b1p3/2B1P1Q1/2N5/PPPP1PPP/R1B1K1NR w KQkq - 6 5z -#]c32ad1878911f852RC25enVienna GameStanley Variation, Meitner-Mieses Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P1Q1/2N5/PPPP1PPP/R1B1K1NR b KQkq - 5 4y -#]9690a3295ff6a25f_C25enVienna GameStanley Variation, Meitner-Mieses Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4 s - #_ e0fa36c8a7874750PC25enVienna GameVienna Gambit, Steinitz Gambit, Main Liner1b1kbnr/pppp1ppp/2n5/8/3PPp1q/2N5/PPP1K1PP/R1BQ1BNR b kq - 2 5r -#_ 77909f94df26019bC25enVienna GameVienna Gambit, Steinitz Gambit, Main Liner1b1kbnr/pppp1ppp/2n5/8/3PPp1q/2N5/PPP3PP/R1BQKBNR w KQkq - 1 5 j - #Ed2b02748784217d2C25enVienna GameVienna Gambit, Pierce Gambitr1bqkbnr/pppp1p1p/2n5/6p1/3PPp2/2N2N2/PPP3PP/R1BQKB1R b KQkq - 0 5  6 J Z1l2#666666666666666r1 -9 e56b47b5cdadeafdC21enDanish Gambit Acceptedrnbqkbnr/pppp1ppp/8/8/2B1P3/8/Pp3PPP/RNBQK1NR w KQkq - 0 5s0 -9 82b9547ce0e4c347GC21enDanish Gambit Acceptedrnbqkbnr/pppp1ppp/8/8/2B1P3/2p5/PP3PPP/RNBQK1NR b KQkq - 1 4r/ -9 e10ae054c8a715e1C21enDanish Gambit Acceptedrnbqkbnr/pppp1ppp/8/8/4P3/2p5/PP3PPP/RNBQKBNR w KQkq - 0 4) ) #e5743e8c1e29c45EC21enCenter GameHalasz-McDonnell Gambit, Crocodile Variationr1bqk1nr/pppp1ppp/2n5/2b5/3pPP2/2P2N2/PP4PP/RNBQKB1R b KQkq - 0 5( -#e 768dbb70119293c3C21enCenter GameHalasz-McDonnell Gambit, Crocodile Variationr1bqk1nr/pppp1ppp/2n5/2b5/3pPP2/5N2/PPP3PP/RNBQKB1R w KQkq - 3 5' -#e dd606392000336c0C21enCenter GameHalasz-McDonnell Gambit, Crocodile Variationrnbqk1nr/pppp1ppp/8/2b5/3pPP2/5N2/PPP3PP/RNBQKB1R b KQkq - 2 4& +#e6048f6468e557fdC21enCenter GameHalasz-McDonnell Gambit, Crocodile Variationrnbqk1nr/pppp1ppp/8/2b5/3pPP2/8/PPP3PP/RNBQKBNR w KQkq - 1 4 - #U f4c0fcd1423048f9C21enCenter GameLanc-Arnold Gambit, Schippler Gambitrnbqk1nr/pppp1ppp/8/2b5/2B1P3/2p2N2/PP3PPP/RNBQK2R b KQkq - 1 5 -#U 977348f96a739e5f_C21enCenter GameLanc-Arnold Gambit, Schippler Gambitrnbqk1nr/pppp1ppp/8/2b5/4P3/2p2N2/PP3PPP/RNBQKB1R w KQkq - 0 5  - -%2b2385c9b74b089bC23enBishop's OpeningLopez Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1PP2/2P5/PP1PQ1PP/RNB1K1NR b KQkq - 0 5 --%d635f8c4aeda3512C23enBishop's OpeningLopez Gambitr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2P5/PP1PQPPP/RNB1K1NR w KQkq - 1 5 - -W e9fb19544a845ebbC23enBishop's OpeningLewis Countergambit, Walker Variationrnbqk2r/ppp2ppp/5n2/2bBp3/3PP3/2P5/PP3PPP/RNBQK1NR b KQkq - 0 5  Vi _ :VVVVVVVVV]&(' -  )O354f6f003a705401C02enFrench DefenseAdvance Variation, Paulsen Attackr1bqkbnr/pp3ppp/2n1p3/2ppP3/3P4/2P2N2/PP3PPP/RNBQKB1R b KQkq - 2 5 jN - )W e2dc87e15082cd4fOC02enFrench DefenseAdvance Variation, Nimzowitsch Gambitrnbqkbnr/pp3ppp/4p3/3pP3/3p2Q1/5N2/PPP2PPP/RNB1KB1R b KQkq - 1 5 -)W 39b86b173864ac72rC02enFrench DefenseAdvance Variation, Nimzowitsch Gambitrnbqkbnr/pp3ppp/4p3/3pP3/3p2Q1/8/PPP2PPP/RNB1KBNR w KQkq - 0 5 , - )Q e26b54edbfe555311C02enFrench DefenseAdvance Variation, Ruisdonk Gambitrnbqkbnr/pp3ppp/4p3/3pP3/3p4/3B1N2/PPP2PPP/RNBQK2R b KQkq - 1 5 -)Q b766f54f86659742BC02enFrench DefenseAdvance Variation, Ruisdonk Gambitrnbqkbnr/pp3ppp/4p3/3pP3/3p4/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5  - )_ d3bc801eef6a491eC05enFrench DefenseTarrasch Variation, Pawn Center Variationrnbqkb1r/pppn1ppp/4p3/3pP3/3P1P2/8/PPPN2PP/R1BQKBNR b KQkq - 0 5 -)_ 2eaafd13f6fb7497C05enFrench DefenseTarrasch Variation, Pawn Center Variationrnbqkb1r/pppn1ppp/4p3/3pP3/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 1 5 -)_ d7edfeb55b377d62bC05enFrench DefenseTarrasch Variation, Pawn Center Variationrnbqkb1r/ppp2ppp/4pn2/3pP3/3P4/8/PPPN1PPP/R1BQKBNR b KQkq - 0 48 - )Sd9e92f7d78030473sC11enFrench DefenseSteinitz Variation, Gledhill Attackrnbqkb1r/pppn1ppp/4p3/3pP3/3P2Q1/2N5/PPP2PPP/R1B1KBNR b KQkq - 2 5 -)S 8c535dd3aee45e7e~C11enFrench DefenseSteinitz Variation, Gledhill Attackrnbqkb1r/pppn1ppp/4p3/3pP3/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5 \  c 0 {c_!\=K - -+ 4e732a6fc8f41af6B54enSicilian DefensePrins Variationrnbqkb1r/pp2pppp/3p1n2/8/3NP3/5P2/PPP3PP/RNBQKB1R b KQkq - 0 5 KB - -/ db55d4fcaadc775e^B56enSicilian DefenseModern Variationsrnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 9 - )Cde0cb3da7222430d C00enFrench DefenseReversed Philidor Formationr1bqkb1r/ppp2ppp/2n1pn2/3p4/4P3/3P1N2/PPPNBPPP/R1BQK2R b KQkq - 5 58 -)Cad8c3023730709aeC00enFrench DefenseReversed Philidor Formationr1bqkb1r/ppp2ppp/2n1pn2/3p4/4P3/3P1N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5 7 +)C661e8c16296acadC00enFrench DefenseReversed Philidor Formationrnbqkb1r/ppp2ppp/4pn2/3p4/4P3/3P1N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4 6 -)C dd0504370a70cd90C00enFrench DefenseReversed Philidor Formationrnbqkb1r/ppp2ppp/4pn2/3p4/4P3/3P4/PPPN1PPP/R1BQKBNR w KQkq - 2 4 5 -)C 86eb30c2a78a8c06C00enFrench DefenseReversed Philidor Formationrnbqkbnr/ppp2ppp/4p3/3p4/4P3/3P4/PPPN1PPP/R1BQKBNR b KQkq - 1 34 -)C df8588a03d7724366C00enFrench DefenseReversed Philidor Formationrnbqkbnr/ppp2ppp/4p3/3p4/4P3/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 3 0 - )[ cafccc37777628eaC01enFrench DefenseExchange Variation, Svenonius Variationrnbqkb1r/ppp2ppp/5n2/3p2B1/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 1 5/ +)[ ca69b01c7fcf322"C01enFrench DefenseExchange Variation, Svenonius Variationrnbqkb1r/ppp2ppp/5n2/3p4/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5j  r) g  vK((T - -_ f93476b4f902e1f6B52enSicilian DefenseCanal-Sokolsky Attack, Sokolsky Variationrn2kbnr/pp1qpppp/3p4/2p5/2P1P3/5N2/PP1P1PPP/RNBQK2R b KQkq - 0 5S --_ 7517e990ba0d4af1B52enSicilian DefenseCanal-Sokolsky Attack, Sokolsky Variationrn2kbnr/pp1qpppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5 -  -Y4c4d592c0ab6c301B34enSicilian DefenseAccelerated Dragon, Exchange Variationr1bqkbnr/pp1ppp1p/2N3p1/8/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 0 5 - -O 8cec7a573ead61333B36enSicilian DefenseAccelerated Dragon, Maróczy Bindr1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5 - -g6a35f22cabb13ef5B41enSicilian DefenseKan Variation, Maróczy Bind, Réti Variationrnbqkbnr/1p1p1ppp/p3p3/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5 'x - -K b31bccaad13e5781B42enSicilian DefenseKan Variation, Modern Variationrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 5o - -K 1d8175aa2a5c172b+B43enSicilian DefenseKan Variation, Knight Variationrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5f - -Q 6a66ae741f9ff27b{B44enSicilian DefensePaulsen Variation, Szén Variationr1bqkbnr/pp1p1ppp/2n1p3/1N6/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 2 5a] - -S 649b5cbbdced4af4B45enSicilian DefensePaulsen Variation, Normal Variationr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5R --_ 3dc05b91371ad551QB52enSicilian DefenseCanal-Sokolsky Attack, Sokolsky Variationrn1qkbnr/pp1Bpppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4  9 `cC5Q --71796f42701e9c01bB21enSicilian DefenseColes Sicilian Gambitr1bqkb1r/pp1ppppp/2n2n2/8/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 3 5P --74c78c0d2ac13818dB21enSicilian DefenseColes Sicilian Gambitr1bqkbnr/pp1ppppp/2n5/8/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 2 4O --7283c10474b6b4451QB21enSicilian DefenseColes Sicilian Gambitr1bqkbnr/pp1ppppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR w KQkq - 1 4N --783d1c8a55afae152RB21enSicilian DefenseColes Sicilian Gambitrnbqkbnr/pp1ppppp/8/8/3QP3/8/PPP2PPP/RNB1KBNR b KQkq - 0 3y I - -59b7fabd02125bcdaB22enSicilian DefenseHeidenfeld Variationr1bqkb1r/pp1ppppp/2n5/2pnP3/8/N1P2N2/PP1P1PPP/R1BQKB1R b KQkq - 4 5H --59c997b83cc779314B22enSicilian DefenseHeidenfeld Variationr1bqkb1r/pp1ppppp/2n5/2pnP3/8/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 3 5G --5 3774a361dde63617B22enSicilian DefenseHeidenfeld Variationrnbqkb1r/pp1ppppp/8/2pnP3/8/2P2N2/PP1P1PPP/RNBQKB1R b KQkq - 2 4*&@ - 3+287d300302409727'B27enPterodactyl DefenseSicilian, Unpinrnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N2N2/PPPB1PPP/R2QKB1R b KQkq - 4 5 6 7 - 3572f8d15a111be7adB27enPterodactyl DefenseSicilian, Anhanguerarnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/2N1BN2/PPP2PPP/R2QKB1R b KQkq - 4 5. - 3;bbf829e509076a7e~B27enPterodactyl DefenseSicilian, Benoni Gambitrnb1k1nr/pp1pppbp/6p1/q1pP4/4P3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 5% - 3=7e134866733dab4fOB27enPterodactyl DefenseSicilian, Rhamporhynchusrnb1k1nr/pp1pppbp/6p1/q1P5/4P3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 5" - -U fb58fdd1bf4048edB34enSicilian DefenseAccelerated Dragon, Modern Variationr1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5,   p Lcon\2 -/E c6c4fb0d3a645d3d=B12enCaro-Kann DefenseMieses Attack, Landau Gambitrnbqkb1r/pp1npppp/2p5/3pP3/3P4/3B4/PPP2PPP/RNBQK1NR w KQkq - 1 5 -/E3f83f8ab97a854c8B12enCaro-Kann DefenseMieses Attack, Landau Gambitrnbqkb1r/pp2pppp/2p2n2/3pP3/3P4/3B4/PPP2PPP/RNBQK1NR b KQkq - 0 4 -/E5efaee5693b672acB12enCaro-Kann DefenseMieses Attack, Landau Gambitrnbqkb1r/pp2pppp/2p2n2/3p4/3PP3/3B4/PPP2PPP/RNBQK1NR w KQkq - 2 4  +/E 514daa33e4c333a:B12enCaro-Kann DefenseMieses Attack, Landau Gambitrnbqkbnr/pp2pppp/2p5/3p4/3PP3/3B4/PPP2PPP/RNBQK1NR b KQkq - 1 3} - /% 28ec6d7651ded6bdB13enCaro-Kann DefensePanov Attackrnbqkb1r/pp2pppp/5n2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR b KQkq - 2 5z~ -/%d37b75d4933c5464dB13enCaro-Kann DefensePanov Attackrnbqkb1r/pp2pppp/5n2/3p4/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 1 5lwm - /+ c725570ed85bd1b2B15enCaro-Kann DefenseAlekhine Gambitrnbqkb1r/pp2pppp/2p2n2/8/3PN3/3B4/PPP2PPP/R1BQK1NR b KQkq - 2 5l -/+9228f6ace1db13c1B15enCaro-Kann DefenseAlekhine Gambitrnbqkb1r/pp2pppp/2p2n2/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5d - /Qcd456df5bda05874tB17enCaro-Kann DefenseKarpov Variation, Modern Variationr1bqkbnr/pp1npppp/2p5/6N1/3P4/8/PPP2PPP/R1BQKBNR b KQkq - 2 5 [ - -M92d7dd30c1c2e1a3B20enSicilian DefenseWing Gambit, Marienbad Variationrnb1kbnr/pp2pppp/8/3q4/1p6/P7/1BPP1PPP/RN1QKBNR b KQkq - 1 5 Z --M52ab37350c5e7d4cLB20enSicilian DefenseWing Gambit, Marienbad Variationrnb1kbnr/pp2pppp/8/3q4/1p6/P7/2PP1PPP/RNBQKBNR w KQkq - 0 5 Y --Md687e61fd5cc0086B20enSicilian DefenseWing Gambit, Marienbad Variationrnbqkbnr/pp2pppp/8/3P4/1p6/P7/2PP1PPP/RNBQKBNR b KQkq - 0 4X --Mf158ec520fa34280B20enSicilian DefenseWing Gambit, Marienbad Variationrnbqkbnr/pp2pppp/8/3p4/1p2P3/P7/2PP1PPP/RNBQKBNR w KQkq - 0 4NR - -7 7425400f29aa16bdB21enSicilian DefenseColes Sicilian Gambitr1bqkb1r/pp1ppppp/2n2n2/8/2B1P3/8/PPP2PPP/RNBQK1NR b KQkq - 4 5 v - /Gbce99f8cbd25b9d4B13enCaro-Kann DefensePanov Attack, Gunderam Attackrnbqkb1r/pp2pppp/5n2/2Pp4/3P4/8/PP3PPP/RNBQKBNR b KQkq - 0 5  qd W T K $ q$daaaa:: "  } - -/ d89ab24c1b5dca3e>B03enAlekhine DefenseFour Pawns Attackrnbqkb1r/ppp1pppp/1n1p4/4P3/2PP1P2/8/PP4PP/RNBQKBNR b KQkq - 0 5k - -Ob1702410b44691dbB05enAlekhine DefenseModern Variation, Panov Variationrn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N1P/PPP2PP1/RNBQKB1R b KQkq - 0 5]3 - 'Y 50cfb79760b355c9A91enDutch DefenseClassical Variation, Blackburne Attackrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6PN/PP2PPBP/RNBQK2R b KQkq - 4 5/* - 3 25c7b42742fb6957WB00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Richter Gambitrnbqkbnr/ppp1pppp/8/3P4/4p3/2N2P2/PPP3PP/R1BQKBNR b KQkq - 0 5.) -34b765216e2318626&B00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Richter Gambitrnbqkbnr/ppp1pppp/8/3P4/4p3/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5! - 5] 356c76f8e4f0b749IB01enScandinavian DefenseAnderssen Counterattack, Goteborg Systemrnb1kbnr/ppp2ppp/8/q3p3/3P4/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 5 - -+b7425fdf9ac00e74tB02enAlekhine DefenseKmoch Variationrnbqkb1r/pp1ppppp/1n6/2p1P3/8/1B1P4/PPP2PPP/RNBQK1NR b KQkq - 0 5 --+ 19e69c0ade50b5a0B02enAlekhine DefenseKmoch Variationrnbqkb1r/pp1ppppp/1n6/2p1P3/8/1B6/PPPP1PPP/RNBQK1NR w KQkq - 0 5 --+ ff974da42117beddB02enAlekhine DefenseKmoch Variationrnbqkb1r/pppppppp/1n6/4P3/8/1B6/PPPP1PPP/RNBQK1NR b KQkq - 4 4~ --+ 36935d86aa31ee399B02enAlekhine DefenseKmoch Variationrnbqkb1r/pppppppp/1n6/4P3/2B5/8/PPPP1PPP/RNBQK1NR w KQkq - 3 4} --+1f08d289b2748577wB02enAlekhine DefenseKmoch Variationrnbqkb1r/pppppppp/8/3nP3/2B5/8/PPPP1PPP/RNBQK1NR b KQkq - 2 3 - -) 4a1e25192cd51a07B03enAlekhine DefenseHunt Variationrnbqkb1r/ppp1pppp/1n1p4/2P1P3/3P4/8/PP3PPP/RNBQKBNR b KQkq - 0 5 --) 258ccf4102ccf7b7B03enAlekhine DefenseHunt Variationrnbqkb1r/ppp1pppp/1n1p4/4P3/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 1 5 - -164534b53efb678a8B03enAlekhine DefenseExchange Variationrnbqkb1r/ppp1pppp/1n1P4/8/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 5t - -Ud5a0668a35eaf32e.B05enAlekhine DefenseModern Variation, Alekhine Variationrn1qkb1r/ppp1pppp/3p4/3nP3/2PP2b1/5N2/PP3PPP/RNBQKB1R b KQkq - 0 5 nG  K 6D=Ya - 35 a577a4901bdbca72rB06enPterodactyl DefenseEastern, Pterodactylrnb1k1nr/pp1pppbp/6p1/q1P5/4P3/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5 Y - )]953255cd63ac4c07B06enModern DefenseTwo Knights Variation, Suttles Variationrnbqk1nr/pp2ppbp/2pp2p1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 0 5X -)]ac88c3acb1d4056ajB06enModern DefenseTwo Knights Variation, Suttles Variationrnbqk1nr/pp1pppbp/2p3p1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4W -)] 77ec2f5ad9326457WB06enModern DefenseTwo Knights Variation, Suttles Variationrnbqk1nr/pp1pppbp/2p3p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 Q - 35 aacf1b77f3c42dc8B06enPterodactyl DefenseAustrian, Pteranodonrnb1k1nr/pp1pppbp/6p1/q1p5/3PPP2/2P5/PP4PP/RNBQKBNR w KQkq - 1 5P -35 73bc8e2c5ab60c47GB06enPterodactyl DefenseAustrian, Pteranodonrnbqk1nr/pp1pppbp/6p1/2p5/3PPP2/2P5/PP4PP/RNBQKBNR b KQkq - 0 4O +35 56676b48ac603c1B06enPterodactyl DefenseAustrian, Pteranodonrnbqk1nr/pp1pppbp/6p1/2p5/3PPP2/8/PPP3PP/RNBQKBNR w KQkq - 0 4 I + 3O7710f194b524373sB06enPterodactyl DefenseAustrian, Austriadactylus Westernrnb1k1nr/pp1pppbp/6p1/q1p5/3PPP2/5N2/PPP3PP/RNBQKB1R w KQkq - 2 5H -3O de029a42e22062fcB06enPterodactyl DefenseAustrian, Austriadactylus Westernrnbqk1nr/pp1pppbp/6p1/2p5/3PPP2/5N2/PPP3PP/RNBQKB1R b KQkq - 1 4 A - 33896fc9f8d3f96574tB06enPterodactyl DefenseWestern, Anhanguerarnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/4BN2/PPP2PPP/RN1QKB1R w KQkq - 2 5 @ -33501c5ca37a8b44fbB06enPterodactyl DefenseWestern, Anhanguerarnbqk1nr/pp1pppbp/6p1/2p5/3PP3/4BN2/PPP2PPP/RN1QKB1R b KQkq - 1 49 - 3C 7206077339ee9093B06enPterodactyl DefenseFianchetto, Rhamphorhynchusrnb1k1nr/pp1pppbp/6p1/q1P5/4P3/6P1/PPP2P1P/RNBQKBNR w KQkq - 1 58 -3C ab759228909cb11cB06enPterodactyl DefenseFianchetto, Rhamphorhynchusrnbqk1nr/pp1pppbp/6p1/2P5/4P3/6P1/PPP2P1P/RNBQKBNR b KQkq - 0 47 -3C d496b0f87380e670pB06enPterodactyl DefenseFianchetto, Rhamphorhynchusrnbqk1nr/pp1pppbp/6p1/2p5/3PP3/6P1/PPP2P1P/RNBQKBNR w KQkq - 0 4 6 -3C 32e761568cc7ed0d B06enPterodactyl DefenseFianchetto, Rhamphorhynchusrnbqk1nr/ppppppbp/6p1/8/3PP3/6P1/PPP2P1P/RNBQKBNR b KQkq - 0 3 'kD )  o 4F< - '3 dbd66edd12312e0c A87enDutch DefenseLeningrad Variationrnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5; ) '3 b2822b7ad74f311A87enDutch DefenseLeningrad Variationrnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5: - '3 b00ebf9d8190849bA87enDutch DefenseLeningrad Variationrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4H - 1-30160e09091c39366A55enOld Indian DefenseNormal Variationr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5 - 1-eb72e2ff61fa580b A55enOld Indian DefenseNormal Variationr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5 - 1- 610aeab5f21fa03d=A55enOld Indian DefenseNormal Variationr1bqkb1r/pppnpppp/3p1n2/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 - 1- a50de7fd199f1d377A55enOld Indian DefenseNormal Variationr1bqkb1r/pppnpppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4x{ - %) b01615dc6521a800A57enBenko GambitZaitsev Systemrnbqkb1r/3ppppp/p4n2/1PpP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 5 r - e 5b3e64029f006f311A57enBenko Gambit Accepted, Pawn Return Variationrnbqkb1r/3ppppp/pP3n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5i - [ e6ac4fcc839ca27d}A57enBenko Gambit Accepted, Modern Variationrnbqkb1r/3ppppp/p4n2/1PpP4/8/4P3/PP3PPP/RNBQKBNR b KQkq - 0 5` - Y 2530eb4f0709c5a8A57enBenko Gambit Accepted, Dlugy Variationrnbqkb1r/3ppppp/p4n2/1PpP4/8/5P2/PP2P1PP/RNBQKBNR b KQkq - 0 5 W - k 39a691df7150ed3e>A58enBenko Gambit Accepted, Fully Accepted Variationrnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5N - 'O f053b46e12561b7c|A83enDutch DefenseStaunton Gambit, Lasker Variationrnbqkb1r/ppppp2p/5np1/6B1/3Pp3/2N2P2/PPP3PP/R2QKBNR b KQkq - 0 5M -'O 9ee2525fb29cf40d A83enDutch DefenseStaunton Gambit, Lasker Variationrnbqkb1r/ppppp2p/5np1/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5E + 'S 241ce7619a38d73sA83enDutch DefenseStaunton Gambit, Alekhine Variationrnbqkb1r/ppppp2p/5np1/6B1/3Pp2P/2N5/PPP2PP1/R2QKBNR b KQkq - 0 5   s>v>L&p&1} - 37bad05f5d8f09763cB00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Erben Gambitr1bqkbnr/ppp1pp1p/2n3p1/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 45w - 3c9f7625b0e8544beB00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variation, Vehre Variationr1bqkb1r/ppp1pppp/2n2n2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4q - 3W54a17dae038509c3B00enNimzowitsch DefenseScandinavian Variation, Aachen Gambitr1bqkbnr/ppp1pppp/8/3P4/1n1P4/8/PPP2PPP/RNBQKBNR w KQkq - 1 4p -3W4e514441bbf2c5f7B00enNimzowitsch DefenseScandinavian Variation, Aachen Gambitr1bqkbnr/ppp1pppp/2n5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3k - 3aca7d956b6260b83d=B00enNimzowitsch DefenseScandinavian Variation, Exchange Variationr1b1kbnr/ppp1pppp/2n5/3q4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4e - 3Oc3bb0d71b4e1cffcB00enNimzowitsch DefenseKennedy Variation, de Smet Gambitr1bqkbnr/ppp2ppp/2np4/4P3/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 0 4d -3Ofa019b1066998691B00enNimzowitsch DefenseKennedy Variation, de Smet Gambitr1bqkbnr/pppp1ppp/2n5/4P3/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3 _ + 3O 4063fe73daf0e6foB00enNimzowitsch DefenseKennedy Variation, Herford Gambitr1b1kbnr/pppp1ppp/2n5/4P3/4P2q/8/PPP2PPP/RNBQKBNR w KQkq - 1 4Y - 3M 36549d595c7291eeB00enNimzowitsch DefenseKennedy Variation, Hammer Gambitr1bqkbnr/pppp2pp/2n2p2/4P3/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 0 4S - 3W 571cdf4bacab6c12B00enNimzowitsch DefenseKennedy Variation, Bielefelder Gambitr1bqk1nr/pppp1ppp/2n5/2b1P3/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 1 4M - 33 5501d62a20c873366B00enNimzowitsch DefenseEl Columpio Defenser1bqkb1r/pppppppp/2n5/4P3/6n1/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 4L -33 c8228d4c2d82e25aZB00enNimzowitsch DefenseEl Columpio Defenser1bqkb1r/pppppppp/2n2n2/4P3/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3K -33 a95b9bb1299cc43e>B00enNimzowitsch DefenseEl Columpio Defenser1bqkb1r/pppppppp/2n2n2/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 3 3 wG - #'7ea7dc5ba0e6b4a0B00enRat DefenseFuller Gambitrnbqkb1r/ppp1pppp/5n2/3P4/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 1 4tF -#'2549e8ae0d1cf5366B00enRat DefenseFuller Gambitrnbqkbnr/ppp1pppp/8/3P4/5P2/8/PPPP2PP/RNBQKBNR b KQkq - 0 3tE +#'296e2e3d773b7300B00enRat DefenseFuller Gambitrnbqkbnr/ppp1pppp/8/3p4/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3}A - %/ dc862c0319edc8acB00enOwen DefenseUnicorn Variationrn1qkbnr/pbppp1pp/1p3p2/8/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 1 4|@ -%/ 6c1664876bbf67377B00enOwen DefenseUnicorn Variationrnbqkbnr/p1ppp1pp/1p3p2/8/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3|? -%/ e035fba328b0cc300B00enOwen DefenseUnicorn Variationrnbqkbnr/p1ppp1pp/1p3p2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 \mC U ",_{\\\\\\\\\\\\\ ( - +=b354e513de6876dbA40enEnglish DefenseHartlaub Gambit Declinedrn1qkbnr/pbpp2pp/1p2p3/3P1p2/2P1P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5 ' ++=95ca640474ee086A40enEnglish DefenseHartlaub Gambit Declinedrn1qkbnr/pbpp2pp/1p2p3/5p2/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5& -+= 9d33c0d9f9c6cd58XA40enEnglish DefenseHartlaub Gambit Declinedrn1qkbnr/pbpp1ppp/1p2p3/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4% -+= 5934cd9112467052RA40enEnglish DefenseHartlaub Gambit Declinedrn1qkbnr/pbpp1ppp/1p2p3/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4- - #af1007aad40055598A45enIndian GameGibbins-Wiedenhagen Gambit, Stummer Gambitrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP1BP1P/R1BQK1NR b KQkq - 3 5 +#a a97620f82e7d741AA45enIndian GameGibbins-Wiedenhagen Gambit, Stummer Gambitrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/8/PPP1BP1P/RNBQK1NR w KQkq - 2 5 -#a 97b439698fad462d-A45enIndian GameGibbins-Wiedenhagen Gambit, Stummer Gambitrnbqkb1r/ppp1pppp/3p4/8/3PP1n1/8/PPP1BP1P/RNBQK1NR b KQkq - 1 4 -#a e434ba908e880c8eA45enIndian GameGibbins-Wiedenhagen Gambit, Stummer Gambitrnbqkb1r/ppp1pppp/3p4/8/3PP1n1/8/PPP2P1P/RNBQKBNR w KQkq - 0 4 -#add8e2cf15cf045e3A45enIndian GameGibbins-Wiedenhagen Gambit, Stummer Gambitrnbqkb1r/pppppppp/8/8/3PP1n1/8/PPP2P1P/RNBQKBNR b KQkq - 0 3 ^ - %S29945de9d65118f0A46enTorre AttackClassical Defense, Petrosian Gambitrnbqkb1r/p2p1ppp/1p2pn2/2pP2B1/8/4PN2/PPP2PPP/RN1QKB1R b KQkq - 0 5 -%S939c1eba4f778eadA46enTorre AttackClassical Defense, Petrosian Gambitrnbqkb1r/p2p1ppp/1p2pn2/2p3B1/3P4/4PN2/PPP2PPP/RN1QKB1R w KQkq - 0 5 -%Sf8f557aab1f439366A46enTorre AttackClassical Defense, Petrosian Gambitrnbqkb1r/pp1p1ppp/4pn2/2p3B1/3P4/4PN2/PPP2PPP/RN1QKB1R b KQkq - 0 4V - 1?d7550ca797a5afd6A54enOld Indian DefenseDus-Khotimirsky Variationr1bqkb1r/pppn1ppp/3p1n2/4p3/2PP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 2 5 -1?8258ad05ae256da5A54enOld Indian DefenseDus-Khotimirsky Variationr1bqkb1r/pppn1ppp/3p1n2/4p3/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 1 5 -1?b1bbd6584e8d8069iA54enOld Indian DefenseDus-Khotimirsky Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 G  T  l' GYC - +[7ea0f4327c6a6a03A25enEnglish OpeningKing's English Variation, Closed Systemr1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR b KQkq - 0 5: - +[780ae34bbfd89f96A36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqk1nr/pp1pppbp/2n3p1/2p5/2P1P3/2N3P1/PP1P1PBP/R1BQK1NR b KQkq - 2 59 -+[cdfac036f23547efA36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqk1nr/pp1pppbp/2n3p1/2p5/2P1P3/2N3P1/PP1P1P1P/R1BQKBNR w KQkq - 1 58 -+[7d46fd8009728c45EA36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqkbnr/pp1ppp1p/2n3p1/2p5/2P1P3/2N3P1/PP1P1P1P/R1BQKBNR b KQkq - 0 47 -+[51a046c1e9a5547d}A36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqkbnr/pp1ppp1p/2n3p1/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 46 -+[b814159a922ac6366A36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqkbnr/pp1ppppp/2n5/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 2 35 -+[ 43830d3850c844efA36enEnglish OpeningSymmetrical Variation, Botvinnik Systemr1bqkbnr/pp1ppppp/2n5/2p5/2P1P3/8/PP1P1PPP/RNBQKBNR w KQkq - 1 3 1 - +[676902f53cbe43a1A37enEnglish OpeningSymmetrical Variation, Two Knights Liner1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 3 5 / + +[cb1d3b5af1fe9366A37enEnglish OpeningSymmetrical Variation, Two Knights Liner1bqkbnr/pp1ppp1p/2n3p1/2p5/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4. - +[b941f0c8e2f2314fOA37enEnglish OpeningSymmetrical Variation, Two Knights Liner1bqkbnr/pp1ppp1p/2n3p1/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4m  A D /oAAAAAAAAAAAAAAg - +Kbe091857d87ddd1fA13enEnglish OpeningAgincourt Defense, Wimpy Systemrnbqkb1r/pp3ppp/4pn2/2pp4/2P5/1P2PN2/PB1P1PPP/RN1QKB1R b KQkq - 0 5f -+K13245ae5fc2255bbA13enEnglish OpeningAgincourt Defense, Wimpy Systemrnbqkb1r/pp3ppp/4pn2/2pp4/2P5/1P3N2/PB1PPPPP/RN1QKB1R w KQkq - 0 5e -+Kf5558b4b03655ec6A13enEnglish OpeningAgincourt Defense, Wimpy Systemrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R b KQkq - 1 4d -+K3529614ecef9c229)A13enEnglish OpeningAgincourt Defense, Wimpy Systemrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R w KQkq - 0 4c -+K b043435a522d8c0fA13enEnglish OpeningAgincourt Defense, Wimpy Systemrnbqkb1r/pppp1ppp/4pn2/8/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3^ - +[ 4a2091fd0f16de84A14enEnglish OpeningAgincourt Defense, Neo-Catalan Declinedrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 3 5 '$U - +i8d8196d2149302c2A17enEnglish OpeningAnglo-Indian Defense, Queen's Indian Variationrn1qkb1r/pbpp1ppp/1p2pn2/8/2P1P3/2NB1N2/PP1P1PPP/R1BQK2R b KQkq - 2 5$T -+id88c37702d13c0b1A17enEnglish OpeningAnglo-Indian Defense, Queen's Indian Variationrn1qkb1r/pbpp1ppp/1p2pn2/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R w KQkq - 1 5#S -+i681c7ff45f416f2a*A17enEnglish OpeningAnglo-Indian Defense, Queen's Indian Variationrnbqkb1r/p1pp1ppp/1p2pn2/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R b KQkq - 0 4\L - +a8357117ffecd14c3A25enEnglish OpeningKing's English Variation, Hungarian Attackr1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/1RBQK1NR b Kkq - 3 5 \  v E4S\\\\\\\\\\\\\\\\\x -%' b2e1a9554959e45e^A03enBird OpeningThomas Gambitrnbqkbnr/ppp1pppp/8/3p4/5P2/1P6/P1PPP1PP/RNBQKBNR b KQkq - 0 2g + /1 1886f25d4571bb8A08enZukertort OpeningGrünfeld Reversedr1bqkbnr/pp3ppp/2n1p3/2pp4/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 1 5 -/17ffd1411a8a4c0a8A08enZukertort OpeningGrünfeld Reversedr1bqkbnr/pp3ppp/2n1p3/2pp4/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 0 5 +/1 98ae620b08650faA08enZukertort OpeningGrünfeld Reversedr1bqkbnr/pp2pppp/2n5/2pp4/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 0 4ay - )S edcfba7a716d62366A10enModern DefenseAverbakh Variation, Pseudo-Sämischrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/4BP2/PP4PP/RN1QKBNR b KQkq - 0 5x -)S 837e5c4bd1a78d47GA10enModern DefenseAverbakh Variation, Pseudo-Sämischrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/4B3/PP3PPP/RN1QKBNR w KQkq - 2 5w -)S d89068be7c5dccd1A10enModern DefenseAverbakh Variation, Pseudo-Sämischrnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/4B3/PP3PPP/RN1QKBNR b KQkq - 1 4v -)S ab98d352fd67d75f_A10enModern DefenseAverbakh Variation, Pseudo-Sämischrnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4 p - +Q defbd773e4962b83A13enEnglish OpeningAgincourt Defense, Catalan Defensern1qkbnr/pbp2ppp/1p2p3/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 3 5o -+Qa08eac479865f093A13enEnglish OpeningAgincourt Defense, Catalan Defensern1qkbnr/pbp2ppp/1p2p3/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 2 5n -+Q101ee4c3ea375f08A13enEnglish OpeningAgincourt Defense, Catalan Defensernbqkbnr/p1p2ppp/1p2p3/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 1 4m -+Qa5eec7bea7da8771qA13enEnglish OpeningAgincourt Defense, Catalan Defensernbqkbnr/p1p2ppp/1p2p3/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4Y , 0 00000000000000010{ -/#2b3914352cef52d2A00enHungarian OpeningBurk Gambitrnbqkbnr/pppp1ppp/8/4p3/8/P5P1/1PPPPP1P/RNBQKBNR b KQkq - 0 2y - /%d76001b7646a1e93A00enHungarian OpeningParis Gambitrn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQ1RK1 b kq - 1 5$yz -/%8b6bff9c2d86a348HA00enHungarian OpeningParis Gambitrnbqkbnr/pppp1ppp/8/4p3/8/6PN/PPPPPP1P/RNBQKB1R b KQkq - 1 2 7 - %Ie6ab677c709bfa311A02enBird OpeningFrom's Gambit, Lipke Variationrnbqk2r/ppp2ppp/3b3n/8/3P4/5N2/PPP1P1PP/RNBQKB1R b KQkq - 0 5 -%I239e48d66152d773sA02enBird OpeningFrom's Gambit, Lipke Variationrnbqk2r/ppp2ppp/3b3n/8/8/5N2/PPPPP1PP/RNBQKB1R w KQkq - 2 5} - %'5b26622156fef124$A03enBird OpeningThomas Gambitrnbqkb1r/pp2pppp/5n2/2p5/3p1P2/1P2PN2/PBPP2PP/RN1QKB1R b KQkq - 0 5~ -%'f60b209372a17980A03enBird OpeningThomas Gambitrnbqkb1r/pp2pppp/5n2/2p5/3p1P2/1P3N2/PBPPP1PP/RN1QKB1R w KQkq - 0 5} -%'107af13d8de672fdA03enBird OpeningThomas Gambitrnbqkb1r/ppp1pppp/5n2/8/3p1P2/1P3N2/PBPPP1PP/RN1QKB1R b KQkq - 1 4{ -%' cb1e1dcbe50013c0A03enBird OpeningThomas Gambitrnbqkb1r/ppp1pppp/5n2/8/3p1P2/1P6/PBPPP1PP/RN1QKBNR w KQkq - 0 4z -%' 297377a5293f3927'A03enBird OpeningThomas Gambitrnbqkb1r/ppp1pppp/5n2/3p4/5P2/1P6/PBPPP1PP/RN1QKBNR b KQkq - 2 3{ -%' e90f9da0e4a3a5c8A03enBird OpeningThomas Gambitrnbqkb1r/ppp1pppp/5n2/3p4/5P2/1P6/P1PPP1PP/RNBQKBNR w KQkq - 1 3 6{_ :  } T"7 -); 51ddeb1811a63542BA00enPolish OpeningOrangutan-Diemer Gambitrnb1kbnr/ppp2ppp/3q4/4p3/1P2p3/P7/1BPP1PPP/RN1QKBNR w KQkq - 0 5}% -/# 7f4e511c3903cc09 A00enHungarian OpeningBurk Gambitrnbqk1nr/ppp1bppp/8/3p4/4p2N/P5P1/1PPPPP1P/RNBQKB1R w KQkq - 2 5}$ -/# 6b8222f3f3a86098A00enHungarian OpeningBurk Gambitrnbqkbnr/ppp2ppp/8/3p4/4p2N/P5P1/1PPPPP1P/RNBQKB1R b KQkq - 1 4|# -/# 5a31e7b9ead8a23f?A00enHungarian OpeningBurk Gambitrnbqkbnr/ppp2ppp/8/3p4/4p3/P4NP1/1PPPPP1P/RNBQKB1R w KQkq - 0 4|" -/# 7537dad7d8dd7dc9A00enHungarian OpeningBurk Gambitrnbqkbnr/ppp2ppp/8/3pp3/8/P4NP1/1PPPPP1P/RNBQKB1R b KQkq - 1 3{! -/#ae533621b03b1cf4A00enHungarian OpeningBurk Gambitrnbqkbnr/ppp2ppp/8/3pp3/8/P5P1/1PPPPP1P/RNBQKBNR w KQkq - 0 36 -);99577411d85f8512A00enPolish OpeningOrangutan-Diemer Gambitrnb1kbnr/ppp2ppp/3q4/3pp3/1P2P3/P7/1BPP1PPP/RN1QKBNR b KQkq - 0 45 -); 5d50795933df3818A00enPolish OpeningOrangutan-Diemer Gambitrnb1kbnr/ppp2ppp/3q4/3pp3/1P6/P7/1BPPPPPP/RN1QKBNR w KQkq - 0 44 -); d7287113a03ac02e.A00enPolish OpeningOrangutan-Diemer Gambitrnb1kbnr/ppp1pppp/3q4/3p4/1P6/P7/1BPPPPPP/RN1QKBNR b KQkq - 0 3 / - 5?401948e05b13d447GA00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp2ppp/5n2/3p4/5p2/P1N1PN2/1PPP2PP/R1BQKB1R b KQkq - 1 5. -5?9b7da41633f5b57azA00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp2ppp/5n2/3p4/5p2/P1N1P3/1PPP2PP/R1BQKBNR w KQkq - 0 5- -5?72f79e88023ab2aeA00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp2ppp/5n2/3pp3/5P2/P1N1P3/1PPP2PP/R1BQKBNR b KQkq - 0 4, -5?8fe1e3851bab8f27'A00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp2ppp/5n2/3pp3/8/P1N1P3/1PPP1PPP/R1BQKBNR w KQkq - 0 4+ +5?599ebcf884e7711A00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp1pppp/5n2/3p4/8/P1N1P3/1PPP1PPP/R1BQKBNR b KQkq - 0 3* -5? ce05dae9c102f951QA00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkb1r/ppp1pppp/5n2/3p4/8/2N1P3/PPPP1PPP/R1BQKBNR w KQkq - 2 3 ( -5?6e7cf6beae1a3a1eA00enVan't Kruijs OpeningKeoni-Hiva Gambit Delayedrnbqkbnr/ppp1pppp/8/3p4/8/4P3/PPPP1PPP/RNBQKBNR w KQkq - 0 2& - /#d1ea92c97d9377ddA00enHungarian OpeningBurk Gambitrnbqk1nr/ppp1bppp/8/3p4/4p2N/P2P2P1/1PP1PP1P/RNBQKB1R b KQkq - 0 5 ~t z x x ]'{=~~~~~~~~~~~~y - 5W470a3245950bd6ffE38enNimzo-Indian DefenseCl + 5Wa963b097bdd7881E33enNimzo-Indian DefenseClassical Variation, Zurich Variationr1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5 - 5Q2411c1fff69893a4E34enNimzo-Indian DefenseClassical Variation, Noa Variationrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5y - 5W470a3245950bd6ffE38enNimzo-Indian DefenseClassical Variation, Berlin Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5q - 5U16a20ba64d54cc41AE40enNimzo-Indian DefenseNormal Variation, Taimanov Variationr1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 1 5i - 5/5b3e02eaa382623f?E41enNimzo-Indian DefenseHübner Variationrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5a - 5=d6269a54a246ded9E43enNimzo-Indian DefenseSt. Petersburg Variationrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5Y - 5- b7e73ef3899c80a9E46enNimzo-Indian DefenseNormal Variationrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5 Q - /; 11b7c6a6588b2cc9E60enGrünfeld DefenseCounterthrust Variationrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5 I + 7- be1ff05927f1410E70enKing's Indian DefenseNormal Variationrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5{{A - '/2c3bd5ac189f4161aA00enSodium AttackCeladon Variationrnbqk1nr/pp3ppp/8/2ppp3/8/P2PP3/P1P2PPP/1RBQKBNR b Kkq - 1 5|@ -'/7f68f334dea88475uA00enSodium AttackCeladon Variationrnbqk1nr/pp3ppp/8/2ppp3/8/P2PP3/P1P2PPP/R1BQKBNR w KQkq - 0 5|? -'/9919229a21ef8f08A00enSodium AttackCeladon Variationrnbqk1nr/ppp2ppp/8/3pp3/8/P2PP3/P1P2PPP/R1BQKBNR b KQkq - 0 4}> -'/3434602805b007acA00enSodium AttackCeladon Variationrnbqk1nr/ppp2ppp/8/3pp3/8/P2P4/P1P1PPPP/R1BQKBNR w KQkq - 0 4}= -'/b15e423c9964498aA00enSodium AttackCeladon Variationrnbqk1nr/pppp1ppp/8/4p3/8/P2P4/P1P1PPPP/R1BQKBNR b KQkq - 0 3|< -'/4924129eb7ba730b A00enSodium AttackCeladon Variationrnbqk1nr/pppp1ppp/8/4p3/8/b2P4/PPP1PPPP/R1BQKBNR w KQkq - 0 3}; -'/65018dd42cb690b0A00enSodium AttackCeladon Variationrnbqkbnr/pppp1ppp/8/4p3/8/N2P4/PPP1PPPP/R1BQKBNR b KQkq - 0 28 - );3f6c0d29b16cda333A00enPolish OpeningOrangutan-Diemer Gambitrnb1kbnr/ppp2ppp/3q4/4p3/1P2p3/P4P2/1BPP2PP/RN1QKBNR b KQkq - 0 5 T wc X 4JGGGGG|A - -'b0e21e47223e50d2D32enTarrasch DefenseSchara Gambitrnbqkbnr/pp3ppp/4p3/3P4/3p4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 59 - ;-d0e87db6456ff9dfD32enQueen's Gambit DeclinedTarrasch Defensernbqkbnr/pp3ppp/8/2pp4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5|@ --' effca4725fca3914D32enTarrasch DefenseSchara Gambitrnbqkbnr/pp3ppp/4p3/2pP4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4b~ 1 - ;-b4ce4d4f27f7eb13D37enQueen's Gambit DeclinedBarmen Variationr1bqkb1r/pppn1ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5 E) - ;- 552b0f209561e83cC64enRuy LopezClassical Variation, Konikowski Gambitr1bqk1nr/ppp2ppp/2n5/1Bbpp3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5 + Qb2b1512a969a572rC64enRuy LopezClassical Defense, Boden Variationr1b1k1nr/ppppqppp/2n5/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 5 + Q4bbacfbd6dd26c6C64enRuy LopezClassical Variation, Cordel Gambitr1bqk1nr/pppp2pp/2n5/1Bb1pp2/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5 - Qbab1a9d0d1fb9f4eNC65enRuy LopezBerlin Defense, Mortimer Variationr1bqkb1r/ppppnppp/5n2/1B2p3/4P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 1 5 uuL  ~ i 2RbH_1 9 - //161a7b2a9aea82f4C50enFour Knights GameItalian Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 58 -//4df44fdf3710c362bC50enFour Knights GameItalian Variationr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4a - %3 38124620852460ffC55enItalian GameTwo Knights Defenser1bqkb1r/pppp1ppp/2n5/4p3/2BPn3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5Y - %921fd65fb5ce916c8C55enItalian GameScotch Gambit Declinedr1bqk2r/pppp1ppp/2nb1n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R w KQkq - 1 5$Q - %u9328e412a7225c2c,C57enItalian GameTwo Knights Defense, Knight Attack, Normal Variationr1bqkb1r/ppp2ppp/2n2n2/3pp1N1/2B1P3/8/PPPP1PPP/RNBQK2R w KQkq - 0 51 - %Q8ca8f2310fead7b1C50enItalian GameGiuoco Pianissimo, Lucchini Gambitr1bqk1nr/pppp2pp/2n5/2b1pp2/2B1P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 0 5  ) - %?4329a05d1c98bbf9C50enItalian GameGiuoco Pianissimo, Normalr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R w KQkq - 1 5 ! - %U7c9248c4c8e990a2C51enItalian GameEvans Gambit, Fontaine Countergambitr1bqk1nr/p1pp1ppp/2n5/1pb1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 0 5  - %7237acc9eb8e9c28fC51enItalian GameEvans Gambit Acceptedr1bqk1nr/pppp1ppp/2n5/4p3/1bB1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 0 5 - %7fc6d0a9b2d94c48aC51enItalian GameEvans Gambit Declinedr1bqk1nr/pppp1ppp/1bn5/4p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 1 5 - %M99fc00c5cf9063b9C51enItalian GameEvans Gambit, Hein Countergambitr1bqk1nr/ppp2ppp/2n5/2bpp3/1PB1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 0 5 - %W5b467095e4bee057WC53enItalian GameClassical Variation, Closed Variationr1b1k1nr/ppppqppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 5y - %W54d6c97c9b0a63e3C53enItalian GameClassical Variation, Alexandre Gambitr1bqk1nr/pppp2pp/2n5/2b1pp2/2B1P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5q - %39b579b1088780fabC53enItalian GameClassical Variationr1bqk2r/pppp1ppp/2n2n2/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 5i - %9bc1f9e18518b8e81C55enItalian GameScotch Gambit Declinedr1bqkb1r/ppp2ppp/2np1n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 J RE /iGGGGGGv 8.! - #G 8c745f08a1855a4dMC44enScotch GameScotch Gambit, London Defenser1bqk1nr/pppp1ppp/2n5/8/1bBpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 2 5_x - ## e8287255204078ecC44enScotch GameHaxo Gambitr1bqk1nr/pppp1ppp/2n5/2b5/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 2 5y - #) 51f945e120d93efeC44enScotch GameBenima Defenser1bqk1nr/ppppbppp/2n5/8/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 P -%O1d3c7e994765c0aaC42enRussian GameDamiano Variation, Kholmov Gambitrnbqkb1r/pppp1ppp/8/4N3/4n3/8/PPPPQPPP/RNB1KB1R b KQkq - 1 4  I + %Keac53aa94e7742a*C43enRussian GameModern Attack, Murrey Variationr1bqkb1r/pppp1ppp/2n5/4p3/3Pn3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 2 5 5A - -#bb183e9f41431e74tC44enPonziani OpeningCaro Gambitr2qkbnr/pppb1ppp/2n5/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R w KQkq - 2 5@ --#59d9c0cd9b19ce45EC44enPonziani OpeningCaro Gambitr1bqkbnr/ppp2ppp/2n5/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R b KQkq - 1 4j9 - -1958cc684a1f2d93a:C44enPonziani OpeningSteinitz Variationr1bqkbnr/ppp3pp/2n2p2/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R w KQkq - 0 5 1 + -3237f43836e38fd3C44enPonziani OpeningLeonhardt Variationr1bqkb1r/ppp2ppp/2n2n2/3pp3/Q3P3/2P2N2/PP1P1PPP/RNB1KB1R w KQkq - 2 5) - #Y d53658aa8e950569iC44enScotch GameScotch Gambit, Göring Gambit Declinedr1bqkbnr/ppp2ppp/2n5/3p4/3pP3/2P2N2/PP3PPP/RNBQKB1R w KQkq - 0 5  p / "   mZ2 - -O6b335a02760390d6C41enPhilidor DefenseHanham Variation, Sharp Variationr1bqkbnr/ppp2ppp/1n1p4/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R w KQkq - 3 5 --O 7fff09520d4887d8C41enPhilidor DefenseHanham Variation, Sharp Variationr1bqkbnr/pppn1ppp/3p4/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 2 4   - -= 8202880a6abbe8e4C41enPhilidor DefenseAlapin-Blackburne Gambitr2qkbnr/pppn1ppp/3p4/4P3/4P1b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 5 --= b1e1f3578a130528(C41enPhilidor DefenseAlapin-Blackburne Gambitrn1qkbnr/ppp2ppp/3p4/4P3/4P1b1/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4  --=2d7c0c158226b258XC41enPhilidor DefenseAlapin-Blackburne Gambitrn1qkbnr/ppp2ppp/3p4/4p3/3PP1b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 4y - -+ 2ba72533ef1397abC41enPhilidor DefenseBoden Variationrn1qkbnr/pppb1ppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R w KQkq - 1 5~x --+c966db613549479aC41enPhilidor DefenseBoden Variationrnbqkbnr/ppp2ppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4 q - --3af1c2a36b66a8c2C41enPhilidor DefenseLarsen Variationrnbqkbnr/ppp2p1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 i - -188aba50dbd137b1fC41enPhilidor DefenseExchange Variationrnbqkb1r/ppp2ppp/3p1n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5a - -)bc35912d4a1392311C41enPhilidor DefenseLion Variationr1bqkb1r/pppn1ppp/3p1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 3 5` --)8fd6ea70aabb7ffdC41enPhilidor DefenseLion Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 2 4 nY - - 6fb8b81580d4b7355C42enPetrov's Defensernbqkb1r/ppp2ppp/3p4/8/4n3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 5 Q - %O86c3a1e986596ec0C42enRussian GameDamiano Variation, Kholmov Gambitrnb1kb1r/ppppqppp/8/4N3/4n3/8/PPPPQPPP/RNB1KB1R w KQkq - 2 5 # [  |}jQ<edY[ --ma1368d5e98e76ad4C40enKing's Pawn GameDamiano Defense, Damiano Gambit, Chigorin Gambitrnbqkbnr/pppp2pp/5p2/4N3/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3[ 1 - g 94f0413c69fc0046FC38enKing's Gambit Accepted, Traditional Variationrnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 5 z$|) + +) 1cde50bf87e648bC40enElephant GambitWasp Variationrnb1kbnr/ppp2ppp/8/4N1q1/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 2 5z( -+)43308222df62557b{C40enElephant GambitWasp Variationrnbqkbnr/ppp2ppp/8/4N3/2B1p3/8/PPPP1PPP/RNBQK2R b KQkq - 1 4z' -+)2083360af72183ddC40enElephant GambitWasp Variationrnbqkbnr/ppp2ppp/8/4N3/4p3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 4{& -+)e809a9033ed8338dC40enElephant GambitWasp Variationrnbqkbnr/ppp2ppp/8/3pN3/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3 L! - )addc6d3b4ecc2f73e>C40enLatvian GambitMayet Attack, Polerio-Svedenborg Variationrnbqkbnr/ppp3pp/8/3pN3/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 0 5 -)a58acf1a07016b918C40enLatvian GambitMayet Attack, Polerio-Svedenborg Variationrnbqkbnr/pppp2pp/8/4N3/2B1p3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4 -)a e6ef055bd4081c2e.C40enLatvian GambitMayet Attack, Polerio-Svedenborg Variationrnbqkbnr/pppp2pp/8/4p3/2B1p3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4: + ); 342c555ddecf88eC40enLatvian GambitCorkscrew Countergambitrnbqkb1r/pppp2pp/5n2/4N3/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 1 5" - -m 629baff59e82efeeC40enKing's Pawn GameDamiano Defense, Damiano Gambit, Chigorin Gambitrnb1kbnr/ppp1q1pp/5p2/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 5  --m e7f18de10256a1c8C40enKing's Pawn GameDamiano Defense, Damiano Gambit, Chigorin Gambitrnb1kbnr/ppppq1pp/5p2/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 2 4  --m 3ac9522e59dbc4beC40enKing's Pawn GameDamiano Defense, Damiano Gambit, Chigorin Gambitrnb1kbnr/ppppq1pp/5p2/4N3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4  3a3 O +zzzzzzA - [ 3ee724d3c50daf76vC36enKing's Gambit Accepted, Abbazia Defensernbqkb1r/ppp2ppp/5n2/3P4/5p2/5N2/PPPP2PP/RNBQKB1R w KQkq - 1 5 r 9 - Y 8fa1a468832a6eefC37enKing's Gambit Accepted, Blachly Gambitr1bqkbnr/pppp1p1p/2n5/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 0 58 +Y fe254b5179e9165eC37enKing's Gambit Accepted, Blachly Gambitr1bqkbnr/pppp1ppp/2n5/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R b KQkq - 3 4q - } bdbaf5b55f2a543d=C33enKing's Gambit Accepted, Bishop's Gambit, Lopez Variationrnb1kbnr/pppp1p1p/8/6p1/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 0 5 i -  6617319d6664ea21!C33enKing's Gambit Accepted, Bishop's Gambit, First Jaenisch Variationrnb1kb1r/pppp1ppp/5n2/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 4 5a - e33c101af25a66e5adC33enKing's Gambit Accepted, Bishop's Gambit (seeJaenisch Variation)rnb1kbnr/pppp1ppp/5q2/8/2B1Pp2/8/PPPP2PP/RNBQ1KNR w kq - 4 5 Y -  4d68a119763145afC33enKing's Gambit Accepted, Bishop's Gambit, Bogoljubov Defensernbqkb1r/pp1p1ppp/2p2n2/8/2B1Pp2/2N5/PPPP2PP/R1BQK1NR w KQkq - 0 5 CQ - } 2e4193c769f8842a*C33enKing's Gambit Accepted, Tartakower Gambit, Weiss Defensernbqkbnr/ppp3pp/3p4/5P2/5p2/8/PPPPB1PP/RNBQK1NR w KQkq - 0 5P -} 17fb05a6bb80cd47GC33enKing's Gambit Accepted, Tartakower Gambit, Weiss Defensernbqkbnr/pppp2pp/8/5P2/5p2/8/PPPPB1PP/RNBQK1NR b KQkq - 0 4O -} fb3731e9f907e480C33enKing's Gambit Accepted, Tartakower Gambit, Weiss Defensernbqkbnr/pppp2pp/8/5p2/4Pp2/8/PPPPB1PP/RNBQK1NR w KQkq - 0 4`I -  eb2dcb4d615ed961aC35enKing's Gambit Accepted, Cunningham Defense, McCormick Defensernbqk2r/ppppbppp/5n2/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 4 5H - b0c3ffb8cca498f7C35enKing's Gambit Accepted, Cunningham Defense, McCormick Defensernbqk1nr/ppppbppp/8/8/2B1Pp2/5N2/PPPP2PP/RNBQK2R b KQkq - 3 4  Pe  i )P\PPPP+1 -  58244eda693164a2C30enKing's Gambit Declined, Classical Variation, Rubinstein Countergambitrnbqk1nr/ppp3pp/3p4/2b1pp2/4PP2/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 0 5\) - w 48d2e7d2153faac6C31enKing's Gambit, Falkbeer Countergambit, Pickler Gambitrnbqk1nr/pp3ppp/2P5/2b1p3/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 1 5( -w e5cfa389df0d4045EC31enKing's Gambit, Falkbeer Countergambit, Pickler Gambitrnbqkbnr/pp3ppp/2P5/4p3/5P2/8/PPPP2PP/RNBQKBNR b KQkq - 0 4 ! - 9U2a0114b4b36b3e8cC33enKing's Gambit AcceptedBishop's Gambit, Anderssen Variationrnbqkbnr/pp3ppp/2p5/3B4/4Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 5 -9Ub87bf95bc4abed377C33enKing's Gambit AcceptedBishop's Gambit, Anderssen Variationrnbqkbnr/ppp2ppp/8/3B4/4Pp2/8/PPPP2PP/RNBQK1NR b KQkq - 0 4 -  5dfd6f7d5033168aC33enKing's Gambit Accepted, Bishop's Gambit, Bryan Countergambitrnb1kbnr/p1pp1ppp/8/1p6/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 0 5 - 3df90568cb9eabb7C33enKing's Gambit Accepted, Bishop's Gambit, Bryan Countergambitrnb1kbnr/pppp1ppp/8/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR b kq - 3 4 - 816cc45635dfdda5C33enKing's Gambit Accepted, Bishop's Gambit, Bryan Countergambitrnb1kbnr/pppp1ppp/8/8/2B1Pp1q/8/PPPP2PP/RNBQK1NR w KQkq - 2 4 - } 9614dd8ada0f0eb4C33enKing's Gambit Accepted, Bishop's Gambit, Boden Variationr1b1kbnr/pppp1ppp/2n5/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 4 5 + } 443930919e6e2daC33enKing's Gambit Accepted, Bishop's Gambit, Cozio Variationrnb1kbnr/ppp2ppp/3p4/8/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 0 5$ -  e395cdae6951aca1C33enKing's Gambit Accepted, Bishop's Gambit, Bledow Countergambitrnbqkb1r/ppp2ppp/5n2/3B4/4Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 1 5y - } 90e4413301ac41344C33enKing's Gambit Accepted, Bishop's Gambit, Greco Variationrnb1k1nr/pppp1ppp/8/2b5/2B1Pp1q/8/PPPP2PP/RNBQ1KNR w kq - 4 5 U f t \4[i W +#I1b126187defecf1C26enVienna GameMieses Variation, Erben Gambitrnbqkb1r/ppp2ppp/5n2/3pp3/4P3/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 0 4{Q - g 28378bdedb4a2441AC27enBoden-Kieseritzky Gambit, Lichtenhein Defensernbqkb1r/ppp2ppp/8/3pp3/2B1n3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 0 5 I - m 1c6ee19d80516de7C30enKing's Gambit Declined, Hobbs-Zilbermints Gambitr1bqkbnr/pppp1p2/2n4p/4p1P1/4P3/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 5H -m 8e99aafb178524f2C30enKing's Gambit Declined, Hobbs-Zilbermints Gambitr1bqkbnr/pppp1p1p/2n5/4p1P1/4P3/5N2/PPPP2PP/RNBQKB1R b KQkq - 0 4 TA - '[5370fb91b931762e.C30enKing's GambitPanteldakis Countergambit, Shirazi Linernbq1bnr/ppppk1pp/8/5P1Q/5p2/8/PPPP2PP/RNB1KBNR w KQ - 2 5@ -'[c476657996c8a178xC30enKing's GambitPanteldakis Countergambit, Shirazi Linernbqkbnr/pppp2pp/8/5P1Q/5p2/8/PPPP2PP/RNB1KBNR b KQkq - 1 4? -'[647b865fbaa587e4C30enKing's GambitPanteldakis Countergambit, Shirazi Linernbqkbnr/pppp2pp/8/5P2/5p2/8/PPPP2PP/RNBQKBNR w KQkq - 0 4,9 - 9C72e5b324258329efC30enKing's Gambit DeclinedClassical, Hanham Variationr1bqk1nr/pppn1ppp/3p4/2b1p3/4PP2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 58 -9C4106c879c52bc423#C30enKing's Gambit DeclinedClassical, Hanham Variationrnbqk1nr/ppp2ppp/3p4/2b1p3/4PP2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4  Pp  v X\P????????????*y - -+ 5bbda2bcd8c9b103C24enBishop's OpeningKitchener Follyrnbq1rk1/ppppbppp/5n2/4p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R w KQ - 3 5x --+51154f0b0d9058e8C24enBishop's OpeningKitchener Follyrnbqk2r/ppppbppp/5n2/4p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R b KQkq - 2 4w --+ 8a71a3fd657639d5C24enBishop's OpeningKitchener Follyrnbqk2r/ppppbppp/5n2/4p3/2B1P3/3P4/PPP2PPP/RNBQK1NR w KQkq - 1 4 q - #O 830a8bd03794698bC25enVienna GameVienna Gambit, Cunningham Defenser1bqk1nr/ppppbppp/2n5/8/4Pp2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 5 ) i - #Ebd10f4ced030f489C25enVienna GameVienna Gambit, Quelle Gambitr1bqk1nr/ppp2ppp/2np4/2b1P3/4P3/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 5 h -#E84aa62af0248bde4C25enVienna GameVienna Gambit, Quelle Gambitr1bqk1nr/pppp1ppp/2n5/2b1P3/4P3/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 4 g +#E8356a0c6e244970pC25enVienna GameVienna Gambit, Quelle Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 1 4a - #K1233cee4501bf609 C26enVienna GameStanley Variation, Eifel Gambitrnbqk2r/p1pp1ppp/5n2/1pb1p3/2B1P3/2N5/PPPPNPPP/R1BQK2R w KQkq - 0 5 ` -#K7237a4f1cbb64b344C26enVienna GameStanley Variation, Eifel Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/2N5/PPPPNPPP/R1BQK2R b KQkq - 5 4 Y - #Ib414c1bad0407d4cLC26enVienna GameMieses Variation, Erben Gambitrnbqkb1r/pp3ppp/2p2n2/3Pp3/8/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 0 5 X -#I 266e2c55a780aef7C26enVienna GameMieses Variation, Erben Gambitrnbqkb1r/ppp2ppp/5n2/3Pp3/8/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 4  G= i [gmYkJe9 - )Wc6fb6c517d1706b6C13enFrench DefenseClassical Variation, Normal Variationrnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 51 - )Yfa2846501c830b70pC16enFrench DefenseWinawer Variation, Petrosian Variationrnb1k1nr/pppq1ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 56| - #- 6f1ec4c377b6f4bfC22enCenter GameBerger Variationr1bqkb1r/pppp1ppp/2n2n2/8/4P3/4Q3/PPP2PPP/RNB1KBNR w KQkq - 3 5 - -3 2cce36fe5b4d73f9C23enBishop's OpeningLewis Countergambitrnbqk2r/ppp2ppp/5n2/2bBp3/4P3/2P5/PP1P1PPP/RNBQK1NR w KQkq - 1 5 --3 7720020bf6b7326foC23enBishop's OpeningLewis Countergambitrnbqk1nr/ppp2ppp/8/2bBp3/4P3/2P5/PP1P1PPP/RNBQK1NR b KQkq - 0 4 `) + )U1cad2281a62d542BC17enFrench DefenseWinawer Variation, Advance Variationrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5x! - -%4dfa69471a15f059YC20enKing's Pawn GameWeber Gambitr1bqkbnr/pp3ppp/2n5/4p3/8/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 5x --%b67d1d51820cc618C20enKing's Pawn GameWeber Gambitrnbqkbnr/pp3ppp/2P5/4p3/8/3P4/PPP2PPP/RNBQKBNR b KQkq - 0 4z --%962f95791b1fddefC20enKing's Pawn GameWeber Gambitrnbqkbnr/pp3ppp/2p5/3Pp3/8/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 4w +-%45578966cdf0e54TC20enKing's Pawn GameWeber Gambitrnbqkbnr/ppp2ppp/8/3Pp3/8/3P4/PPP2PPP/RNBQKBNR b KQkq - 0 3z --%238a72dbb6b04c52RC20enKing's Pawn GameWeber Gambitrnbqkbnr/ppp2ppp/8/3pp3/4P3/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 3  - #7 68ad55579f09812c,C21enCenter GameKieseritzky Variationrnbqkbnr/p2p1ppp/8/1pp5/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5 } - #1 a09f96af64c498f7C22enCenter Gamel'Hermet Variationr1bqkbnr/pppp2pp/2n5/5p2/4P3/4Q3/PPP2PPP/RNB1KBNR w KQkq - 0 5  i d  iGi XX V y - )ic61ddc5c265e9f388C04enFrench DefenseTarrasch Variation, Guimard Defense, Main Liner1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5 x - )i9df3e8a98ba4deaeC04enFrench DefenseTarrasch Variation, Guimard Defense, Main Liner1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4|D - )/ ee2b83f65296353c>>>>>>w)y - /uee8a85a443065287B11enCaro-Kann DefenseTwo Knights Attack, Mindeno Variation, Exchange Linern1qkbnr/pp2pppp/2p5/3p4/4P3/2N2b1P/PPPP1PP1/R1BQKB1R w KQkq - 0 5Y - /-fa25b904ac89bf9bB17enCaro-Kann DefenseKarpov Variationr1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5Q - /34adfabd7fbc45bdaB18enCaro-Kann DefenseClassical Variationrn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5I - --b016a6c1a7a5f614B20enSicilian DefenseGloria Variationr1bqkbnr/pp2ppp1/2np4/2p4p/2P1P3/2N3P1/PP1P1P1P/R1BQKBNR w KQkq - 0 5H ---ad4838baa0855763cB20enSicilian DefenseGloria Variationr1bqkbnr/pp2pppp/2np4/2p5/2P1P3/2N3P1/PP1P1P1P/R1BQKBNR b KQkq - 0 4G ---81ae83fb40528f5b[B20enSicilian DefenseGloria Variationr1bqkbnr/pp2pppp/2np4/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 2 4F ---2a435b1951c32a58XB20enSicilian DefenseGloria Variationrnbqkbnr/pp2pppp/3p4/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 1 3E --- d1d443bb9321a881B20enSicilian DefenseGloria Variationrnbqkbnr/pp2pppp/3p4/2p5/2P1P3/8/PP1P1PPP/RNBQKBNR w KQkq - 0 3 A - -Y763bda08d93d13aeB22enSicilian DefenseAlapin Variation, Smith-Morra Declinedrnbqkb1r/pp1ppppp/8/3nP3/3p4/2P5/PP3PPP/RNBQKBNR w KQkq - 0 5@ --Y 2925603da4c97a68hB22enSicilian DefenseAlapin Variation, Smith-Morra Declinedrnbqkb1r/pp1ppppp/8/2pnP3/3P4/2P5/PP3PPP/RNBQKBNR b KQkq - 0 4? --Y ec104f97b500572a*B22enSicilian DefenseAlapin Variation, Smith-Morra Declinedrnbqkb1r/pp1ppppp/8/2pnP3/8/2P5/PP1P1PPP/RNBQKBNR w KQkq - 1 4> --Y 2800906e7bc2229fB22enSicilian DefenseAlapin Variation, Smith-Morra Declinedrnbqkb1r/pp1ppppp/5n2/2p1P3/8/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 3= --Y 497986937fdc04fbB22enSicilian DefenseAlapin Variation, Smith-Morra Declinedrnbqkb1r/pp1ppppp/5n2/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR w KQkq - 1 3h+x -/u5fffb7733927f8f7B11enCaro-Kann DefenseTwo Knights Attack, Mindeno Variation, Exchange Linern1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N1P/PPPP1PP1/R1BQKB1R b KQkq - 0 4(q - /s394918341055f942BB11enCaro-Kann DefenseTwo Knights Attack, Mindeno Variation, Retreat Linern1qkbnr/pp2pppp/2p5/3p3b/4P3/2N2N1P/PPPP1PP1/R1BQKB1R w KQkq - 1 5)i - /y 8e11e287bc9e8aa3B12enCaro-Kann DefenseAdvance Variation, Van der Wiel Attack, Dreyev Defensern2kbnr/pp2pppp/1qp5/3pPb2/3P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 3 5a - //5b31893fdbf51b42BB15enCaro-Kann DefenseFinnish Variationrnbqkbnr/pp2ppp1/2p4p/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 0 5|9 - -f4297c6ffcd73491B24enSicilian DefenseClosedr1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2N3P1/PPPP1PBP/R1BQK1NR w KQkq - 2 5{8 --449541d90790ff3b;B24enSicilian DefenseClosedr1bqkbnr/pp1ppp1p/2n3p1/2p5/4P3/2N3P1/PPPP1PBP/R1BQK1NR b KQkq - 1 4 Dq qi N 2  k@zz_HH ) - /a1864c1b3203b6d3b;B10enCaro-Kann DefenseAccelerated Panov Attack, Modern Variationrnbqkb1r/pp2pppp/5n2/3P4/8/8/PP1P1PPP/RNBQKBNR w KQkq - 1 5 -/a438af5468dc12cadB10enCaro-Kann DefenseAccelerated Panov Attack, Modern Variationrnbqkbnr/pp2pppp/8/3P4/8/8/PP1P1PPP/RNBQKBNR b KQkq - 0 4 -/a4da06e8b2f0f38b0B10enCaro-Kann DefenseAccelerated Panov Attack, Modern Variationrnbqkbnr/pp2pppp/8/3p4/2P5/8/PP1P1PPP/RNBQKBNR w KQkq - 0 4 61 - 3Ed681c955b214a6c2B06enPterodactyl DefenseFianchetto, King Pterodactylrnb1k1nr/pp1pppbp/6p1/q1p5/3PP3/5NP1/PPP2P1P/RNBQKB1R w KQkq - 2 50 +3Eff25c0e1b66874dMB06enPterodactyl DefenseFianchetto, King Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/3PP3/5NP1/PPP2P1P/RNBQKB1R b KQkq - 1 4) - )S46f347f5cc36aff9B06enModern DefenseNorwegian Defense, Norwegian Gambitrnbqkb1r/ppp1pp1p/3p2p1/4P2n/3P4/8/PPP1BPPP/RNBQK1NR w KQkq - 0 5( -)S 7f49d1941e4ee694B06enModern DefenseNorwegian Defense, Norwegian Gambitrnbqkb1r/pppppp1p/6p1/4P2n/3P4/8/PPP1BPPP/RNBQK1NR b KQkq - 2 4' +)S cc9526d1f6bac377B06enModern DefenseNorwegian Defense, Norwegian Gambitrnbqkb1r/pppppp1p/6p1/4P2n/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 1 4& -)S 942ac5a93eb3996dmB06enModern DefenseNorwegian Defense, Norwegian Gambitrnbqkb1r/pppppp1p/5np1/4P3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3r! - / aaca08fca77853a6B06enNorwegian Defensernbqkb1r/ppppppnp/6p1/4P3/3P2P1/8/PPP2P1P/RNBQKBNR w KQkq - 1 5r -/ af8453bbf71e412a*B06enNorwegian Defensernbqkb1r/pppppp1p/6p1/4P2n/3P2P1/8/PPP2P1P/RNBQKBNR b KQkq - 0 4  - )C9a41cc159df08ae9B06enModern DefenseBishop Attack, Monkey's Bumrnbqk1nr/pppp1p1p/4p1p1/8/2BbP3/5Q2/PPP2PPP/RNB1K1NR w KQkq - 0 5  -)Cb1e7e73d700c257azB06enModern DefenseBishop Attack, Monkey's Bumrnbqk1nr/pppp1pbp/4p1p1/8/2BPP3/5Q2/PPP2PPP/RNB1K1NR b KQkq - 0 4  -)C74d2c89761c508388B06enModern DefenseBishop Attack, Monkey's Bumrnbqk1nr/pppp1pbp/4p1p1/8/2B1P3/5Q2/PPPP1PPP/RNB1K1NR w KQkq - 0 4  +)C 2a53aa679e7986ajB06enModern DefenseBishop Attack, Monkey's Bumrnbqk1nr/ppppppbp/6p1/8/2B1P3/5Q2/PPPP1PPP/RNB1K1NR b KQkq - 3 3  -)C b8874195559aced1B06enModern DefenseBishop Attack, Monkey's Bumrnbqk1nr/ppppppbp/6p1/8/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3 +)C 83b7c23aedd057b{B06enModern DefenseBishop Attack, Monkey's Bumrnbqkbnr/pppppp1p/6p1/8/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2  - %A9a4700d63b64ce85B07enLion DefenseAnti-Philidor, Lion's Caver1bqkb1r/pppn1ppp/3p1n2/4p3/3PPP2/2N5/PPP3PP/R1BQKBNR w KQkq - 0 5 - %35ca68cd7b996de2a*B08enPirc DefenseClassical Variationrnbqk2r/ppp1ppbp/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R w KQkq - 2 5 f r = p X8|Z i - /= cb8a09b65e83ceadB15enCaro-Kann DefenseGurgenidze Counterattackrnbqkbnr/p3pppp/2p5/1p1p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4c - //423a30f8bea1e1dbB15enCaro-Kann DefenseGurgenidze Systemrnbqkbnr/pp2pp1p/2p3p1/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 ] - -K236e7c997a5d9b3a:B20enSicilian DefenseWing Gambit, Carlsbad Variationrnbqkbnr/pp1ppppp/8/8/4P3/p7/2PP1PPP/RNBQKBNR w KQkq - 0 4JW - -c14880bb3016203f1B21enSicilian DefenseSmith-Morra Gambit Declined, Push Variationrnbqkbnr/pp1ppppp/8/8/4P3/2Pp4/PP3PPP/RNBQKBNR w KQkq - 0 4X Q + -sdd605ed22cf4fcfB21enSicilian DefenseSmith-Morra Gambit Declined, Scandinavian Formationrnbqkbnr/pp2pppp/8/3p4/3pP3/2P5/PP3PPP/RNBQKBNR w KQkq - 0 4K - -c51cfb2a217692066fB21enSicilian DefenseSmith-Morra Gambit Declined, Wing Formationrnb1kbnr/pp1ppppp/8/q7/3pP3/2P5/PP3PPP/RNBQKBNR w KQkq - 1 4E - -gd352130c13e1407fB21enSicilian DefenseSmith-Morra Gambit Declined, Alapin Formationrnbqkb1r/pp1ppppp/5n2/8/3pP3/2P5/PP3PPP/RNBQKBNR w KQkq - 1 4 ? - -E60002b5ff0863ad4B21enSicilian DefenseMcDonnell Attack, Tal Gambitrnbqkb1r/pp2pppp/5n2/2pP4/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 1 4> --E3bee1faa5d7c7b42BB21enSicilian DefenseMcDonnell Attack, Tal Gambitrnbqkbnr/pp2pppp/8/2pP4/5P2/8/PPPP2PP/RNBQKBNR b KQkq - 0 3 = --E1c3115e787133944DB21enSicilian DefenseMcDonnell Attack, Tal Gambitrnbqkbnr/pp2pppp/8/2pp4/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 39 + %Ifdf6618260ce829)B21enBird OpeningDutch Variation, Batavo Gambitrnbqkbnr/pp2pppp/8/2p5/4pP2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 8 -%I c755f911eff55879yB21enBird OpeningDutch Variation, Batavo Gambitrnbqkbnr/pp2pppp/8/2pp4/4PP2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 3  /ki5 S _/XXXXXXXXXXXXg - -Q72cbbc9329253d8dB04enAlekhine DefenseModern Variation, Schmid Variationrnbqkb1r/ppp1pppp/1n1p4/4P3/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5 - -Q 61753373802e184aJB04enAlekhine DefenseModern Variation, Larsen Variationrnbqkb1r/ppp1pppp/8/3np3/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5 - -Qb2e460c74aefc488B04enAlekhine DefenseModern Variation, Alburt Variationrnbqkb1r/ppp1pp1p/3p2p1/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 5 y - -C5983f9ae76e55829)B05enAlekhine DefenseModern Variation, Main Linern1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5 e -3M 20a3ed1fbf3b9aaeB06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnbqk1nr/ppppppbp/6p1/8/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3d -3M 901fd0a9447c5104B06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnbqkbnr/pppppp1p/6p1/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2q - 3C609cc51361e10b43CB06enPterodactyl DefenseEastern, Benoni Pterodactylrnb1k1nr/pp1pppbp/6p1/q1pP4/4P3/2N5/PPP2PPP/R1BQKBNR w KQkq - 1 5 xm -3C 2191cffd45720ae6B06enPterodactyl DefenseEastern, Benoni Pterodactylrnbqk1nr/ppppppbp/6p1/8/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 2 3 l -3C 912df24bbe35c14cLB06enPterodactyl DefenseEastern, Benoni Pterodactylrnbqkbnr/pppppp1p/6p1/8/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 1 2 i - 3M39d338119879ece8B06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnb1k1nr/pp1pppbp/6p1/q1p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 5h -3Me0a0ad4a310bcd67gB06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/4PP2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4g -3M 3bc441bc59edac5aZB06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4f -3M ddb59012a6aaa727'B06enPterodactyl DefenseAustrian, Grand Prix Pterodactylrnbqk1nr/ppppppbp/6p1/8/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 3  WW e  yBBw) - 'Y1c3f48143790d1ddA83enDutch DefenseStaunton Gambit, Nimzowitsch Variationrnbqkb1r/p1ppp1pp/1p3n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5sN -- 440b93e0dc109ed6A47enMarienbad Systemrnbqkb1r/p1pppppp/1p3n2/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3I - %Q23c931a697bcd011A48enTorre AttackFianchetto Defense, Euwe Variationrnbqk2r/pp1pppbp/5np1/2p3B1/3P4/5N2/PPPNPPPP/R2QKB1R w KQkq - 0 5H -%Q c5b8e00868fbdb6clA48enTorre AttackFianchetto Defense, Euwe Variationrnbqk2r/ppppppbp/5np1/6B1/3P4/5N2/PPPNPPPP/R2QKB1R b KQkq - 3 4G -%Q 9cd6586af206735c\A48enTorre AttackFianchetto Defense, Euwe Variationrnbqk2r/ppppppbp/5np1/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R w KQkq - 2 4 )A - -Y d8dbd1c277fbc028(A51enBudapest DefenseFajarowicz Defense, Bonsdorf Variationrnbqkb1r/p1pp1ppp/1p6/4P3/2P1n3/P7/1P2PPPP/RNBQKBNR w KQkq - 0 5@ --Y b3b298d2897877b3A51enBudapest DefenseFajarowicz Defense, Bonsdorf Variationrnbqkb1r/pppp1ppp/8/4P3/2P1n3/P7/1P2PPPP/RNBQKBNR b KQkq - 0 4 h9 - -Y 22b8252446cf1102A52enBudapest DefenseAlekhine Variation, Tartakower Defensernbqkb1r/ppp2ppp/3p4/4P3/2P1P1n1/8/PP3PPP/RNBQKBNR w KQkq - 0 53s1 - 7 4b810d7ea7c32ad9A57enBenko Gambit Acceptedrnbqkb1r/3ppppp/p4n2/1PpP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 5r0 -7 9976fc8d40e3d205A57enBenko Gambit Acceptedrnbqkb1r/p2ppppp/5n2/1PpP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 4x 5 ^ UMf57 U 555d + -U 75b9ef9333e1cb3B02enAlekhine DefenseScandinavian Variation, Myers Gambitrnbqkb1r/ppp1pppp/5n2/6B1/4p3/2NP4/PPP2PPP/R2QKBNR b KQkq - 1 4 --U c101c9cf83b4c77b{B02enAlekhine DefenseScandinavian Variation, Myers Gambitrnbqkb1r/ppp1pppp/5n2/8/4p3/2NP4/PPP2PPP/R1BQKBNR w KQkq - 0 4 +-U 98b56c64a4d772b+B02enAlekhine DefenseScandinavian Variation, Myers Gambitrnbqkb1r/ppp1pppp/5n2/3p4/4P3/2NP4/PPP2PPP/R1BQKBNR b KQkq - 0 3 b! -3K144cb4cab6d12575uB00enNimzowitsch DefenseKennedy Variation, Keres Attackr1bqkbnr/pppp1ppp/8/4n3/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 0 4 - 3Ocf28583cde374448HB00enNimzowitsch DefenseKennedy Variation, Paulsen Attackr1bqkbnr/pppp1ppp/8/4n3/4P3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4  + 5Cbb0c842a88c6f24$B01enScandinavian DefenseMain Line, Leonhardt Gambitrnb1kbnr/ppp1pppp/8/q7/1P6/2N5/P1PP1PPP/R1BQKBNR b KQkq - 0 4 - -- bcd49c7757fae9a7B02enAlekhine DefenseSpielmann Gambitrnbqkb1r/pppnpppp/4P3/3p4/8/2N5/PPPP1PPP/R1BQKBNR b KQkq - 0 4~ ---3f118048a70fe36enB02enAlekhine DefenseSpielmann Gambitrnbqkb1r/pppnpppp/8/3pP3/8/2N5/PPPP1PPP/R1BQKBNR w KQkq - 1 4 --- c65683ee0ac3ea9bB02enAlekhine DefenseSpielmann Gambitrnbqkb1r/ppp1pppp/5n2/3pP3/8/2N5/PPPP1PPP/R1BQKBNR b KQkq - 0 3 - -/ 55a516de1bf0f8f5B02enAlekhine DefenseSteiner Variationrnbqkb1r/pppppppp/1n6/4P3/2P5/1P6/P2P1PPP/RNBQKBNR b KQkq - 0 4~ --/ d903768ac17d9398B02enAlekhine DefenseSteiner Variationrnbqkb1r/pppppppp/1n6/4P3/2P5/8/PP1P1PPP/RNBQKBNR w KQkq - 1 4 >0) - 3 31ea8dc9a0823ae4B00enNimzowitsch DefenseScandinavian Variation, Exchange Variation, Marshall Gambitr1b1kbnr/ppp1pppp/2n5/3q4/3P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 4" - 3Kefdbac687433a7acB00enNimzowitsch DefenseKennedy Variation, Keres Attackr1bqkbnr/pppp1ppp/8/4n3/4P3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 4x - -O b6919cd2ef647e28(B02enAlekhine DefenseTwo Pawn Attack, Lasker Variationrnbqkb1r/pppppppp/1n6/2P1P3/8/8/PP1P1PPP/RNBQKBNR b KQkq - 0 4oq + - c17404e1a899cf9B03enAlekhine Defensernbqkb1r/ppp1pppp/3p4/3nP3/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4nj - -- e3876b4271c5e158XB03enAlekhine DefenseBalogh Variationrnbqkb1r/ppp1pppp/3p4/3nP3/2BP4/8/PPP2PPP/RNBQK1NR b KQkq - 1 4c - -- 5b50339c316056c3B04enAlekhine DefenseModern Variationrnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4\ - 3+ b9ef5048c8932accB06enPterodactyl DefenseEastern, Benonirnbqk1nr/pp1pppbp/6p1/2pP4/4P3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4}0 - -' e09b8af4f3a02325%B00enVan Geet OpeningBerlin Gambitr1bqkbnr/ppp1pppp/2n5/3P4/4p3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4|/ --' 5a93c9a76a86b578xB00enVan Geet OpeningBerlin Gambitr1bqkbnr/ppp1pppp/2n5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 , yB  0 KG?]]sQ - - a71a29b71ce8e249IA47enMarienbad Systemrn1qkb1r/pb1ppppp/1p3n2/2p5/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 0 5qP -- 416bf819e3afe9344A47enMarienbad Systemrn1qkb1r/pbpppppp/1p3n2/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4rO -- f49bdb64ae42314dMA47enMarienbad Systemrn1qkb1r/pbpppppp/1p3n2/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4h -y 7adcaeb9a7fc9e9eA45enBlackmar-Diemer Gambit Declined, Weinsbach Declinationrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N2P2/PPP3PP/R1BQKBNR b KQkq - 0 4g -y bedba3f14c7c2394A45enBlackmar-Diemer Gambit Declined, Weinsbach Declinationrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/2N2P2/PPP1P1PP/R1BQKBNR w KQkq - 0 4 Woa - /M 66b7b018aaa2d90fA45enTrompowsky AttackRaptor Variation, Hergert Gambitrnbqkb1r/pppp1ppp/8/4p1P1/3P4/8/PPP1PPP1/RN1QKBNR w KQkq - 0 5` -/Meccfb852394721399A45enTrompowsky AttackRaptor Variation, Hergert Gambitrnbqkb1r/pppppppp/8/6P1/3P4/8/PPP1PPP1/RN1QKBNR b KQkq - 0 4_ -/Md01ec5426c660a6dmA45enTrompowsky AttackRaptor Variation, Hergert Gambitrnbqkb1r/pppppppp/8/6n1/3P3P/8/PPP1PPP1/RN1QKBNR w KQkq - 0 4Y - m 565b2e6e01e76d27'A45enBlackmar-Diemer Gambit Declined, O'Kelly Defensernbqkb1r/pp2pppp/2p2n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR w KQkq - 0 5X -m c421c3817627be9cA45enBlackmar-Diemer Gambit Declined, O'Kelly Defensernbqkb1r/ppp1pppp/5n2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR b KQkq - 1 4W -m 3fb6db23b4c53c45EA45enBlackmar-Diemer Gambit Declined, O'Kelly Defensernbqkb1r/ppp1pppp/5n2/8/3Pp3/5P2/PPP3PP/RNBQKBNR w KQkq - 0 4+ 9Yd Y o > wYYYYYYYYYYYYY -%7 ac4f791bcb2961a6A40enColle SystemPterodactyl Variationrnbqk1nr/ppppppbp/6p1/8/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3 - 3Ga776e7601479c3b1A40enPterodactyl DefenseFianchetto, Queen Pterodactylrnb1k1nr/pp1pppbp/6p1/q1p5/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5 -3G 7e05723bbd0be23e>A40enPterodactyl DefenseFianchetto, Queen Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4 -3Gcbf55146f0e63a47GA40enPterodactyl DefenseFianchetto, Queen Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 0 4 -3G 2d8480e80fa1313a:A40enPterodactyl DefenseFianchetto, Queen Pterodactylrnbqk1nr/ppppppbp/6p1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3L - /C606f03ed8b77b0eaA41enZukertort OpeningWade Defense, Chigorin Plan1r1qkbnr/pppnpppp/3p4/8/2PP2b1/1Q3N2/PP2PPPP/RNB1KB1R w KQk - 3 5 -/Ce63a4ed66cdf1949IA41enZukertort OpeningWade Defense, Chigorin Planr2qkbnr/pppnpppp/3p4/8/2PP2b1/1Q3N2/PP2PPPP/RNB1KB1R b KQkq - 2 4  -/C dcc3ed6e59e4b1afA41enZukertort OpeningWade Defense, Chigorin Planr2qkbnr/pppnpppp/3p4/8/2PP2b1/5N2/PP2PPPP/RNBQKB1R w KQkq - 1 4  -/C ef209633b94c5c63cA41enZukertort OpeningWade Defense, Chigorin Planrn1qkbnr/ppp1pppp/3p4/8/2PP2b1/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3 Tt - - 722ff596d204b888A41enRobatsch Defensern1qk1nr/ppp1ppbp/3p2p1/8/2PPP1b1/5N2/PP3PPP/RNBQKB1R w KQkq - 1 5q -- 70fc3fa49581b662bA41enRobatsch Defensernbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/5N2/PP3PPP/RNBQKB1R b KQkq - 0 4q -- b4fb32ec7e010b68hA41enRobatsch Defensernbqk1nr/ppp1ppbp/3p2p1/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 1 4q~ +- 4470f5a8546c0c2A41enRobatsch Defensernbqkbnr/ppp1pp1p/3p2p1/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3r} -- 8864907ec6496bc5A41enRobatsch Defensernbqkbnr/ppp1pp1p/3p2p1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3y - )+fbe213122e14f085A42enModern DefenseKotov Variationr1bqk1nr/ppp1ppbp/2np2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 1 5q - )9c460ad69810d7858XA42enModern DefenseRandspringer Variationrnbqk1nr/ppp1p1bp/3p2p1/5p2/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5i - y b25631b06e052eceA45enBlackmar-Diemer Gambit Declined, Weinsbach Declinationrnbqkb1r/ppp2ppp/4pn2/8/3Pp3/2N2P2/PPP3PP/R1BQKBNR w KQkq - 0 5 5h y Q^XO5555i9 - ' 9c78e15471e0dcedA40enZaire Defensernbqkbnr/pppppppp/8/3PP3/8/8/PPP2PPP/RNBQKBNR w KQkq - 1 5j8 -' c796d5a1dc1a9d7b{A40enZaire Defensernbqkb1r/pppppppp/5n2/3PP3/8/8/PPP2PPP/RNBQKBNR b KQkq - 0 4k7 -' a6efc35cd804bb1fA40enZaire Defensernbqkb1r/pppppppp/5n2/3P4/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 1 4j6 -' fd01f7a975fefa89A40enZaire Defensernbqkbnr/pppppppp/8/3P4/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 31 - +- 9844a13b133528f1A40enEnglish DefensePerrin Variationr2qkbnr/pbpp1ppp/1pn1p3/8/2PPP3/3B4/PP3PPP/RNBQK1NR w KQkq - 3 50 -+- 33a979d902a48df2A40enEnglish DefensePerrin Variationrn1qkbnr/pbpp1ppp/1p2p3/8/2PPP3/3B4/PP3PPP/RNBQK1NR b KQkq - 2 4/ -+- 66a4d87b3b244f81A40enEnglish DefensePerrin Variationrn1qkbnr/pbpp1ppp/1p2p3/8/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 1 4~. -+- d63490ff4976e01aA40enEnglish DefensePerrin Variationrnbqkbnr/p1pp1ppp/1p2p3/8/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3) - 3U28b8577fc96e1d4eNA40enPterodactyl DefenseFianchetto, Queen Benoni Pterodactylrnb1k1nr/pp1pppbp/6p1/q1pP4/2P5/2N5/PP2PPPP/R1BQKBNR w KQkq - 1 5( -3U f1cbc224601c3cc1A40enPterodactyl DefenseFianchetto, Queen Benoni Pterodactylrnbqk1nr/pp1pppbp/6p1/2pP4/2P5/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4 ! - 3C 17284295e00c229dA40enPterodactyl DefenseCentral, Benoni Pterodactylrnb1k1nr/pp1pppbp/6p1/q1pP4/2P1P3/8/PP3PPP/RNBQKBNR w KQkq - 1 5 -3C ce5bd7ce497e0312A40enPterodactyl DefenseCentral, Benoni Pterodactylrnbqk1nr/pp1pppbp/6p1/2pP4/2P1P3/8/PP3PPP/RNBQKBNR b KQkq - 0 4  -3C 7453949dd058954fOA40enPterodactyl DefenseCentral, Benoni Pterodactylrnbqk1nr/pp1pppbp/6p1/2p5/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4x] - %7c6409c4ca49c8927'A40enColle SystemPterodactyl Variationrnb1k1nr/pp1pppbp/6p1/q1p5/3P4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 2 5 -%7 1f3309170deea8a8A40enColle SystemPterodactyl Variationrnbqk1nr/pp1pppbp/6p1/2p5/3P4/3BPN2/PPP2PPP/RNBQK2R b KQkq - 1 4   p _ZsL88=!Q - +ebc0dee035458229cA36enEnglish OpeningSymmetrical Variation, Symmetrical Variationr1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 4 5P -+e17e036e145c9879fA36enEnglish OpeningSymmetrical Variation, Symmetrical Variationrnbqk1nr/pp1pppbp/6p1/2p5/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 3 4O -+e ec772e43872b0546FA36enEnglish OpeningSymmetrical Variation, Symmetrical Variationrnbqk1nr/pp1pppbp/6p1/2p5/2P5/6P1/PP1PPPBP/RNBQK1NR w KQkq - 2 4N -+e 5ccb13f57c6cceecA36enEnglish OpeningSymmetrical Variation, Symmetrical Variationrnbqkbnr/pp1ppp1p/6p1/2p5/2P5/6P1/PP1PPPBP/RNBQK1NR b KQkq - 1 3M -+e e93b308831811695A36enEnglish OpeningSymmetrical Variation, Symmetrical Variationrnbqkbnr/pp1ppp1p/6p1/2p5/2P5/6P1/PP1PPP1P/RNBQKBNR w KQkq - 0 3L )+e 8f63d34a0e84deA36enEnglish OpeningSymmetrical Variation, Symmetrical Variationrnbqkbnr/pp1ppppp/8/2p5/2P5/6P1/PP1PPP1P/RNBQKBNR b KQkq - 0 2 y:I - 1-bd74d8fdab43b5b2A40enSt. George DefensePolish Variationrn1qkbnr/1bpp1ppp/p3p3/1p6/3PP3/3B1N2/PPP2PPP/RNBQK2R w KQkq - 0 5H -1- cb032accb36125e0A40enSt. George DefensePolish Variationrn1qkbnr/1bpppppp/p7/1p6/3PP3/3B1N2/PPP2PPP/RNBQK2R b KQkq - 3 4G -1- 9e0e8b6e8ae1e793A40enSt. George DefensePolish Variationrn1qkbnr/1bpppppp/p7/1p6/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 4F -1- 2e9ec3eaf8b34808A40enSt. George DefensePolish Variationrnbqkbnr/2pppppp/p7/1p6/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3E -1-f5fa2f1c905529355A40enSt. George DefensePolish Variationrnbqkbnr/2pppppp/p7/1p6/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3zA - +)60a309a5c99153fcA40enMikenas DefensePozarek Gambitr1bqkbnr/pppp1ppp/8/8/2n5/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5|@ -+)a7ff3e04dcbcb1a1A40enMikenas DefensePozarek Gambitr1bqkbnr/pppp1ppp/8/4n3/2P5/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4y? -+)5c6826a61e5e3378xA40enMikenas DefensePozarek Gambitr1bqkbnr/pppp1ppp/8/4n3/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4|> -+)b225097cce16909cA40enMikenas DefensePozarek Gambitr1bqkbnr/pppp1ppp/2n5/4P3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 b6Z 4M6D u 86\&&!q - +ed00437e738fad1d7A25enEnglish OpeningKing's English Variation, Taimanov Variationr1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 5=i - +7aa30bf1f3d85a68hA28enEnglish OpeningKing's English Variation, Four Knights Variation, Bradley Beach Variationr1bqkb1r/pppp1ppp/2n2n2/8/2PPp3/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5?h -+55a5369fc1dd859eA28enEnglish OpeningKing's English Variation, Four Knights Variation, Bradley Beach Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4Qy - +Qdf8a460a5706bbe1A22enEnglish OpeningKing's English, Erbenheimer Gambitrnbqkb1r/pppp1ppp/8/6N1/2P1p1n1/2N5/PP1PPPPP/R1BQKB1R w KQkq - 2 5 p -+e60b80a51c3bd1a7d}A25enEnglish OpeningKing's English Variation, Taimanov Variationr1bqkbnr/pppp1p1p/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4 o -+ed548292c8e50c204A25enEnglish OpeningKing's English Variation, Taimanov Variationr1bqkbnr/pppp1p1p/2n3p1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4  - +[22ad7779c1e197b0A22enEnglish OpeningKing's English Variation, Bellon Gambitrnbqkb1r/p1pp1ppp/5n2/1p4N1/2P1p3/2N5/PP1PPPPP/R1BQKB1R w KQkq - 0 5 -+[42a91d6c5a4c2a8dA22enEnglish OpeningKing's English Variation, Bellon Gambitrnbqkb1r/pppp1ppp/5n2/6N1/2P1p3/2N5/PP1PPPPP/R1BQKB1R b KQkq - 1 4 -+[147bfcb9f380d229)A22enEnglish OpeningKing's English Variation, Bellon Gambitrnbqkb1r/pppp1ppp/5n2/8/2P1p3/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4.a - + 272b3a620aeb3ab5A32enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defensernbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5-` - + 515cc85312c9aae7A32enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defensernbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4/_ - + 36c8950e03f838c9A32enEnglish OpeningSymmetrical Variation, Anti-Benoni Variation, Spielmann Defensernbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 -+]b0b6cf6b6a4ac15b[A21enEnglish OpeningKing's English Variation, Troger Defenser1bqkbnr/ppp2ppp/2np4/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4 ++]546ec1627a71922"A21enEnglish OpeningKing's English Variation, Troger Defenser1bqkbnr/ppp2ppp/2np4/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4 -+]3cfc7a77f5df504fOA21enEnglish OpeningKing's English Variation, Troger Defenser1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3Y - +i 43dadba72cd8b9f3A34enEnglish OpeningSymmetrical Variation, Three Knights Variationrnbqkb1r/pp2pppp/8/2pn4/8/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 5X -+i dc34a1ea933da4afA34enEnglish OpeningSymmetrical Variation, Three Knights Variationrnbqkb1r/pp2pppp/5n2/2pP4/8/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 0 4!W -+id21e3a2731f3b0b2A34enEnglish OpeningSymmetrical Variation, Three Knights Variationrnbqkb1r/pp2pppp/5n2/2pp4/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4 ( sG F 4 P,7((9VVV I - +/170020d45917a2c2A13enEnglish OpeningRomanishin Gambitrnbqkb1r/2pp1ppp/p3pn2/1p6/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 0 5H -+/ 77044ac1c2ba1fffA13enEnglish OpeningRomanishin Gambitrnbqkb1r/1ppp1ppp/p3pn2/8/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 1 4'A - +wb2e374c9ce8e7abeA13enEnglish OpeningAgincourt Defense, Catalan Defense, Semi-Slav Defensernbqkb1r/pp3ppp/2p1pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 0 5%@ -+w 20999926b94ea905A13enEnglish OpeningAgincourt Defense, Catalan Defense, Semi-Slav Defensernbqkb1r/ppp2ppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 1 49 - +c f29fa014eb7047e6A13enEnglish OpeningAgincourt Defense, Catalan Defense Acceptedrnbqkb1r/ppp2ppp/4pn2/8/2p5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 0 51 - +W 84c1f4a466547821!A13enEnglish OpeningAgincourt Defense, Bogoljubov Defensernbqk2r/ppp2ppp/3bpn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 2 5) - +5 3455eac973e50594A13enEnglish OpeningNeo-Catalan Declinedrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 2 52! - + e1c91bcccae6fd3a:A15enEnglish OpeningAnglo-Indian Defense, King's Indian Formation, Double Fianchettorn1qkb1r/pbpppp1p/1p3np1/8/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 0 50 ++ 87d4897b1696f71qA15enEnglish OpeningAnglo-Indian Defense, King's Indian Formation, Double Fianchettorn1qkb1r/pbpppppp/1p3n2/8/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 2 42 -+ bd8d6beafc84b708A15enEnglish OpeningAnglo-Indian Defense, King's Indian Formation, Double Fianchettorn1qkb1r/pbpppppp/1p3n2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 1 4 - +]e40e5dbf22ffba53SA21enEnglish OpeningKing's English Variation, Troger Defenser2qkbnr/ppp2ppp/2npb3/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 5 "2 ++ d1d236e8ed61893A15enEnglish OpeningAnglo-Indian Defense, King's Indian Formation, Double Fianchettornbqkb1r/p1pppppp/1p3n2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3 - +i7e0abaa6a94bff23#A15enEnglish OpeningAnglo-Indian Defense, Queen's Indian Formationrn1qkb1r/pbpp1ppp/1p2pn2/8/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 2 5  -+ice9af222db1950b8A15enEnglish OpeningAnglo-Indian Defense, Queen's Indian Formationrnbqkb1r/p1pp1ppp/1p2pn2/8/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 1 4! -+i7b6ad15f96f488c1A15enEnglish OpeningAnglo-Indian Defense, Queen's Indian Formationrnbqkb1r/p1pp1ppp/1p2pn2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 41 + + 4f729b49f87d503A19enEnglish OpeningAnglo-Indian Defense, Flohr-Mikenas-Carls Variation, Nei Gambitrnbqkbnr/pp1p1ppp/4p3/2p1P3/2P5/2N5/PP1P1PPP/R1BQKBNR w KQkq - 1 54 -+ 5f191d41327d9495A19enEnglish OpeningAnglo-Indian Defense, Flohr-Mikenas-Carls Variation, Nei Gambitrnbqkb1r/pp1p1ppp/4pn2/2p1P3/2P5/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 4 iMbI F F D ,Auhy - #+ 34c7787672008672rA50enIndian GamePyrenees Gambitrnbqkb1r/p1pppppp/5n2/1p6/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3{z - A 3faa5b73172e8cd4A50enQueen's Indian Acceleratedrnbqkb1r/p1pppppp/1p3n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3x^ - #) eadc440280280867gA82enRat DefenseBalogh Defensernbqkbnr/ppp1p1pp/3p4/5p2/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 $o~Z - '3ed35b23ee2fdc755UA84enDutch DefenseClassical Variationrnbqkbnr/pppp2pp/4p3/5p2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3n - + ff2eca81f83c9e4cLA50enMexican Defenser1bqkb1r/pppppppp/2n2n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3k - # c6b9ff8c9e6de8f4A50enSlav Indianrnbqkb1r/pp1ppppp/2p2n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3x - #' d480e2be7d19c4c5A50enIndian GameMedusa Gambitrnbqkb1r/pppppp1p/5n2/6p1/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3z~ - #- debb1a297a48c379yA51enIndian GameBudapest Defensernbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3qz - 1 6d7984023bd57222"A53enOld Indian Defensernbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3mv - ) b2b2c3cd16ea30322A56enBenoni Defensernbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3r - /E 699ce59de7e630ffA80enQueen's Pawn GameVeresov Attack, Dutch Systemrnbqkbnr/ppp1p1pp/8/3p1p2/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3  }n - '/ 467d3b9742d3650b A80enDutch DefenseOmega-Isis Gambitrnbqkbnr/pppp2pp/8/4pp2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3}m -'/ cc0533ddd1369d3d=A80enDutch DefenseOmega-Isis Gambitrnbqkbnr/ppppp1pp/8/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2|j - '- 3e54d6b7c240e92b+A80enDutch DefenseHevendehl Gambitrnbqkbnr/pppp2pp/8/4pp2/3P2P1/8/PPP1PP1P/RNBQKBNR w KQkq - 0 3 ~f - )1a51120524a72d158XA82enFrench DefenseFranco-Hiva Gambitrnbqkbnr/pppp2pp/4p3/5p2/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3b - '=11757a6516817ec1A82enDutch DefenseStaunton Gambit Acceptedrnbqkbnr/ppppp1pp/8/8/3Pp3/8/PPP2PPP/RNBQKBNR w KQkq - 0 31 x Bb D  q.BBBBBqrr i - 'g7edbac5ff6295075uA12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrn1qkb1r/pp2pppp/2p2n2/3p1b2/2P5/1P3NP1/P2PPP1P/RNBQKB1R w KQkq - 1 5h -'gfdc2c5d141cc59f8A12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrnbqkb1r/pp2pppp/2p2n2/3p4/2P5/1P3NP1/P2PPP1P/RNBQKB1R b KQkq - 0 4g -'g7164a5859b413295A12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrnbqkb1r/pp2pppp/2p2n2/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4f -'gf40e879107957cb3A12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrnbqkb1r/pp1ppppp/2p2n2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 1 3e -'g 2f6a6b676f731d8eA12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrnbqkb1r/pp1ppppp/2p2n2/8/2P5/6P1/PP1PPP1P/RNBQKBNR w KQkq - 0 3d -'g bd10868818b3ce355A12enRéti OpeningAnglo-Slav Variation, London Defensive Systemrnbqkb1r/pppppppp/5n2/8/2P5/6P1/PP1PPP1P/RNBQKBNR b KQkq - 0 2a - 'Qff110fe306495712A12enRéti OpeningAnglo-Slav Variation, Torre Systemrn1qkb1r/pp2pppp/2p2n2/3p4/2P3b1/1P3NP1/P2PPP1P/RNBQKB1R w KQkq - 1 5Y - 'Uf8ecc7ce17088f64dA12enRéti OpeningAnglo-Slav Variation, Bled Variationrnbqkb1r/pp2pp1p/2p2np1/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R w KQkq - 0 5X -'U6a962a2160c85cdfA12enRéti OpeningAnglo-Slav Variation, Bled Variationrnbqkb1r/ppp1pp1p/5np1/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R b KQkq - 0 4W -'Ue6b5b50523c7f7d8A12enRéti OpeningAnglo-Slav Variation, Bled Variationrnbqkb1r/ppp1pp1p/5np1/3p4/8/1P3N2/PBPPPPPP/RN1QKB1R w KQkq - 0 4Q - 'W9241fd1bdb6214a2A12enRéti OpeningAnglo-Slav Variation, New York Systemrn1qkb1r/pp2pppp/2p2n2/3p1b2/2P5/1P3N2/PB1PPPPP/RN1QKB1R w KQkq - 2 5 Qr c < %  p3 - /+e4f8fe5084a5b289A04enZukertort OpeningShabalov Gambitrnbqkbnr/3p1ppp/p3p3/1pp5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5|q - 'a138b5ea72b0213c5A12enRéti OpeningAnglo-Slav Variation, Capablanca Variationrn1qkb1r/pp2pppp/2p2n2/3p4/2P3b1/1P3N2/PB1PPPPP/RN1QKB1R w KQkq - 2 5 -/+84fc94451f080fb4A04enZukertort OpeningShabalov Gambitrnbqkbnr/1p1p1ppp/p3p3/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4 -/+a81a2f04ffdfd78cA04enZukertort OpeningShabalov Gambitrnbqkbnr/1p1p1ppp/p3p3/2p5/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4 -/+4e6bfeaa0098dcf1A04enZukertort OpeningShabalov Gambitrnbqkbnr/1ppp1ppp/p3p3/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3 -/+ b5fce608c27a5e28(A04enZukertort OpeningShabalov Gambitrnbqkbnr/1ppp1ppp/p3p3/8/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3  - 51 3411a8daaed59411A07enKing's Indian AttackYugoslav Variationrn1qkb1r/pp2pppp/2p2n2/3p4/6b1/5NP1/PPPPPPBP/RNBQ1RK1 w kq - 2 5 -51 36c262e8e9509afbA07enKing's Indian AttackYugoslav Variationrnbqkb1r/pp2pppp/2p2n2/3p4/8/5NP1/PPPPPPBP/RNBQ1RK1 b kq - 1 4 -51 48b719dc95a341ebA07enKing's Indian AttackYugoslav Variationrnbqkb1r/pp2pppp/2p2n2/3p4/8/5NP1/PPPPPPBP/RNBQK2R w KQkq - 0 4~ -51 dacdf433e2639250PA07enKing's Indian AttackYugoslav Variationrnbqkb1r/ppp1pppp/5n2/3p4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3~y - '-7208ce2d3ec8191bA10enDutch DefenseKrause Variationr1bqkb1r/ppp1p1pp/2np1n2/5p2/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5x -'-4bb2584cecb05076vA10enDutch DefenseKrause Variationr1bqkb1r/ppppp1pp/2n2n2/5p2/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4w -'-8e8777e6fd797d344A10enDutch DefenseKrause Variationr1bqkb1r/ppppp1pp/2n2n2/5p2/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4v -'-256aaf04ece8d8377A10enDutch DefenseKrause Variationrnbqkb1r/ppppp1pp/5n2/5p2/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3 $$L }   `5q$$$$$$$$$auF - 7- 46e0599a50c02bddE70enKing's I`G - 7- f65c642cab87e077wE70enKing's Indian DefenseNormal Variationrnbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 5 ) - %K225127ef4f644580A02enBird OpeningFrom's Gambit, Lasker Variationrnbqk1nr/ppp2p1p/3b4/6p1/8/5N2/PPPPP1PP/RNBQKB1R w KQkq - 0 5A - #W 9b167a2d8d2bab2e.A00enIndian GameColle System, King's Indian Variationrnbqk2r/ppp1ppbp/3p1np1/8/3P4/3BPN2/PPP2PPP/RNBQK2R w KQkq - 4 5@ -#W c0f84ed820d1eab8A00enIndian GameColle System, King's Indian Variationrnbqk1nr/ppp1ppbp/3p2p1/8/3P4/3BPN2/PPP2PPP/RNBQK2R b KQkq - 3 4? -#W 95f5ef7a195128cbA00enIndian GameColle System, King's Indian Variationrnbqk1nr/ppp1ppbp/3p2p1/8/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 2 4> -#W 2549d2cce216e361aA00enIndian GameColle System, King's Indian Variationrnbqkbnr/ppp1pp1p/3p2p1/8/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 1 3= -#W fe2d3e3a8af0825c\A00enIndian GameColle System, King's Indian Variationrnbqkbnr/ppp1pp1p/3p2p1/8/3P4/4P3/PPP2PPP/RNBQKBNR w KQkq - 0 3< -#W17996d61f17f1017A00enIndian GameColle System, King's Indian Variationrnbqkbnr/ppp1pppp/3p4/8/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 0 2 ; -#Wd2ac42cbe0b63d55UA00enIndian GameColle System, King's Indian Variationrnbqkbnr/ppp1pppp/3p4/8/8/4P3/PPPP1PPP/RNBQKBNR w KQkq - 0 2 hu9 - - 53c5414494586345EA00enAmsterdam Attackr1bqkb1r/ppp2ppp/2np1n2/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR w KQkq - 1 5s8 +- 82b75b139a222d3A00enAmsterdam Attackr1bqkbnr/ppp2ppp/2np4/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR b KQkq - 0 4t7 -- 848d15e5e32f49beA00enAmsterdam Attackr1bqkbnr/ppp2ppp/2np4/4p3/2P5/2N1P3/PP1P1PPP/R1BQKBNR w KQkq - 2 4s6 -- 2f60cd07f2beecbdA00enAmsterdam Attackrnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N1P3/PP1P1PPP/R1BQKBNR b KQkq - 1 3p5 -- d4f7d5a5305c6e64dA00enAmsterdam Attackrnbqkbnr/ppp2ppp/3p4/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR w KQkq - 0 3h1 - # a9157a831899c583A00enAmar Gambitrn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQK2R w KQkq - 0 5h0 -# 409f401d2956c257WA00enAmar Gambitrn1qkbnr/ppp2ppp/8/3pp3/5P2/6PB/PPPPP2P/RNBQK2R b KQkq - 0 4j/ -# 573cb5faab86d4b4A00enAmar Gambitrn1qkbnr/ppp2ppp/8/3pp3/5P2/6Pb/PPPPP2P/RNBQKB1R w KQkq - 0 4n wBX E * { W9{ nqEt h 1 - 93592574922ea6f3fbE12enQueen's Indian DefensePetrosian Variationrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/P4N2/1P2PPPP/RNBQKB1R b KQkq - 0 4|O - #g 94dde4b2c45f62efE60enIndian GameKing's Indian Variation, Fianchetto Variationrnbqk2r/ppppppbp/5np1/8/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4N -#g 212dc7cf89b2ba96E60enIndian GameKing's Indian Variation, Fianchetto Variationrnbqk2r/ppppppbp/5np1/8/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4 * - 91692e5d16a508ff62bE12enQueen's Indian DefenseKasparov Variationrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 # - 9+49eda335fe8a97d8E12enQueen's Indian DefenseMiles Variationrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP1B2/5N2/PP2PPPP/RN1QKB1R b KQkq - 1 4 - 9)3f94070643b5f51fE14enQueen's Indian DefenseSpassky Systemrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 - 95be5ffef5873da583E15enQueen's Indian DefenseFianchetto Variationrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4 - 5) b0053d3ad7d87091E20enNimzo-Indian DefenseMikenas Attackrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2NQ4/PP2PPPP/R1B1KBNR b KQkq - 3 4 - 5+7ed377c7d8500e97E20enNimzo-Indian DefenseKmoch Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2P2/PP2P1PP/R1BQKBNR b KQkq - 0 4 - 553c842ab7984d39deE20enNimzo-Indian DefenseRomanishin Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 0 4y - 5;cb067d00107c80dbE21enNimzo-Indian DefenseThree Knights Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4r - 53 2a9b324e4da14900E22enNimzo-Indian DefenseSpielmann Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4k - 53 d638c6c0c8103a2e.E30enNimzo-Indian DefenseLeningrad Variationrnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4 d - 53 a17be3eb6a4cdd82E32enNimzo-Indian DefenseClassical Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4] - 5# bd4fd3445cc56942BE40enNimzo-Indian DefenseNormal Linernbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 V - 75 7c5ae5d4a7356fb7E60enKing's Indian DefenseSantasiere Variationrnbqk2r/ppppppbp/5np1/8/1PPP4/5N2/P3PPPP/RNBQKB1R b KQkq - 0 4 U -75 d6af907801830393E60enKing's Indian DefenseSantasiere Variationrnbqk2r/ppppppbp/5np1/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4H - 7- 325b696440075d7d}E70enKing's Indian DefenseNormal Variationrnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 f cmnB 2 ~ 2  :T?Of&D - ;qf25f8bd15b4cdb91D20enQueen's Gambit AcceptedCentral Variation, McDonnell Defense, Somov Gambitrnbqkbnr/ppp2ppp/8/4p3/2BPP3/8/PP3PPP/RNBQK1NR b KQkq - 0 4"= - ;e95d52dfdeefbfef7D21enQueen's Gambit AcceptedAlekhine Defense, Borisenko-Furman Variationrnbqkbnr/1pp1pppp/p7/8/2pPP3/5N2/PP3PPP/RNBQKB1R b KQkq - 0 4F - +- 3ec85a7ac061e57azE01enCatalan OpeningClosed Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4 - /+ 51da0eb69e0348c5D31enSemi-Slav DefenseMarshall Gambitrnbqkbnr/pp3ppp/2p1p3/3p4/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4? - 33 69ffddc04863aa322E11enBogo-Indian DefenseGrünfeld Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP1NPPPP/R1BQKB1R b KQkq - 3 4  - ;+871d3c6536d98d81D35enQueen's Gambit DeclinedHarrwitz Attackrnbqkb1r/ppp2ppp/4pn2/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4( - ;- 75e6a7016bfe7213D25enQueen's Gambit AcceptedNormal Variationrnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 - ;1 526341290d7773ffD35enQueen's Gambit DeclinedExchange Variationrnbqkb1r/ppp2ppp/4pn2/3P4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4 6 + ;1 a6f58fc8f9f08ccD23enQueen's Gambit AcceptedMannheim Variationrnbqkb1r/ppp1pppp/5n2/8/Q1pP4/5N2/PP2PPPP/RNB1KB1R b KQkq - 3 4 - ;;872d3612c75f06dfD37enQueen's Gambit DeclinedThree Knights Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4  -;7 7cba2eb005bd8406D30enQueen's Gambit DeclinedTraditional Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 48 - 37 edb3fe4510233c88E11enBogo-Indian DefenseNew England Variationrnbqk2r/pppp1ppp/4pn2/8/1bPP4/8/PP1NPPPP/RNBQKB1R b KQkq - 3 4 ~ - ;-9a138dd21f33bc2a*D50enQueen's Gambit DeclinedModern Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4w + /35d02cb87c9ebe333D80enGrünfeld DefenseStockholm Variationrnbqkb1r/ppp1pp1p/5np1/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4x / - ;3 235cfd118d43786enD24enQueen's Gambit AcceptedShowalter Variationrnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4! - ;7bae07986b5375fceD30enQueen's Gambit DeclinedTraditional Variationrnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R b KQkq - 1 4p - //ad3b9dbf6cde8a8aD80enGrünfeld DefenseLutikov Variationrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2P2/PP2P1PP/R1BQKBNR b KQkq - 0 4i - /'60c77a58246188e6D80enGrünfeld DefenseGibbon Gambitrnbqkb1r/ppp1pp1p/5np1/3p4/2PP2P1/2N5/PP2PP1P/R1BQKBNR b KQkq - 0 4b - /)5f29e7a7672b1c85D80enGrünfeld DefenseZaitsev Gambitrnbqkb1r/ppp1pp1p/5np1/3p4/2PP3P/2N5/PP2PPP1/R1BQKBNR b KQkq - 0 4[ - /]f973d836f92fcd1dD81enGrünfeld DefenseRussian Variation, Accelerated Variationrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4T - //18de9d0f55748f98D82enGrünfeld DefenseBrinckmann Attackrnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4 M - /;18ee9778a4f204c6D90enGrünfeld DefenseThree Knights Variationrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 Y% w ? J \ &!..&a%& - /O8def6f7853316183D01enQueen's Pawn GameVeresov Attack, Richter Variationrn1qkb1r/ppp1pppp/5n2/3p1bB1/3P4/2N2P2/PPP1P1PP/R2QKBNR b KQkq - 0 4 - /O4661809828e5d012D01enQueen's Pawn GameVeresov Attack, Veresov Variationrn1qkb1r/ppp1pppp/5B2/3p1b2/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 0 4~ - /+fd7984f7dce39c3f?D02enQueen's Pawn GameChandler Gambitrnbqkbnr/pp2pppp/8/3p4/3p4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4 -/+ 4889a78a910e4446FD02enQueen's Pawn GameChandler Gambitrnbqkbnr/pp2pppp/8/3p4/3p4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 0 4 -/+ 17971dbfecfa2d80D02enQueen's Pawn GameChandler Gambitrnbqkbnr/pp2pppp/8/2pp4/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3(| - 9k2ab947eb264f0c50PD07enQueen's Gambit RefusedChigorin Defense, Main Line, Alekhine Variationr2qkbnr/ppp1pppp/2n5/3p4/Q1PP2b1/5N2/PP2PPPP/RNB1KB1R b KQkq - 4 4 y+ - 9U d35f110631289cfbD07enQueen's Gambit RefusedChigorin Defense, Janowski Variationr1bqkbnr/ppp1pppp/2n5/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4K - %;632029cca8bd45366D15enSlav DefenseThree Knights Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4u - 9Ma5ab7512e78a3063cD08enQueen's Gambit RefusedAlbin Countergambit, Normal Linernbqkbnr/ppp2ppp/8/4P3/2Pp4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 4t -9M7ecf99e48f6c515e^D08enQueen's Gambit RefusedAlbin Countergambit, Normal Linernbqkbnr/ppp2ppp/8/4P3/2Pp4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4s -9M9ca2f38a43537bb9D08enQueen's Gambit RefusedAlbin Countergambit, Normal Linernbqkbnr/ppp2ppp/8/3pP3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 &m + % 8b952845b6d65d6D05enColle Systemrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/3BPN2/PPP2PPP/RNBQK2R b KQkq - 1 4n - %Ef5abc5b5d41f3674tD10enSlav DefenseSlav Gambit, Alekhine Attackrnbqkbnr/pp2pppp/2p5/8/2pPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 _ -9W84be879fb5a62ff9D06enQueen's Gambit RefusedBaltic Defense, Queen Attack Deferredrn1qkbnr/ppp2ppp/4p3/3p1b2/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 -9W f2c975aead84bfabD06enQueen's Gambit RefusedBaltic Defense, Queen Attack Deferredrn1qkbnr/ppp1pppp/8/3p1b2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3g - %a add5f4cd15c420a1D10enSlav DefenseWinawer Countergambit, Anti-Winawer Gambitrnbqkbnr/pp3ppp/2p5/3pp3/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 ` - %-c1d9890cf0a26fdfD11enSlav DefenseBreyer Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/5N2/PP1NPPPP/R1BQKB1R b KQkq - 3 4` - 9Wbe472427809d871fD06enQueen's Gambit RefusedBaltic Defense, Queen Attack Deferredrn1qkbnr/ppp2ppp/4p3/3p1b2/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4|Y - %%5eed6658dad51c27'D11enSlav DefenseBonet Gambitrnbqkb1r/pp2pppp/2p2n2/3p2B1/2PP4/5N2/PP2PPPP/RN1QKB1R b KQkq - 3 4}R - %+359a73dc4e004f4bKD11enSlav DefenseQuiet Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 \TLD<4,$ |sjaXOF=4+",xph`XPH@80( b~vnf^VNF>6.& y p g ^ U> M E = 5 - %    } t k b Y P G > 5 , #    kP# x p h ` X P H @ 8 0 (     | t l d \ T L D < 4 , $    }5  w o g _ W O G ? 7 / '    G|tld\TLD<4,$ |tYtld\TLD<4,$ ~uld}tkbYPG>5,831r_9$~f_X:3[YhYS+,@}1z~~~\~wojih"_(_Y>WPvNGF-A>>=2<;V73*6'%WnIm%%M~~[}&|$ziif~b/b]WT(NNMLuI@?;6R3b1  Lb8}|yrqpmKiUh gfcca`PNXJpE?:f7)!   Li}vtpsm9iaWaIWmQL;HrFE\A:77r&a"\ #%}{yJxuqpngeea_/\1XTSNIDB=9:994_/,#Fggp $^|v}soNia_Y;UN0Aj:e5 22k-,z#6"  y(beD|?;d\~~}|zspaXa]YYQ OOFCAt*`*D(%<ugq8mnG}p+pooIokk___A^xY-VUS65533H3%j I A=VX~~}w~wvt-rrqonlgb_^]aXW7VKA=A7}1t080.+m  q v  t /;;;;;;;;;;//I55%- - #k59beaf43a10dbe43CE60enIndian GameAnti-Grünfeld, Alekhine Variation, Leko Gambitrnbqkb1r/pppp1p1p/5np1/4p3/2PP4/5P2/PP2P1PP/RNBQKBNR w KQkq - 0 4' - 7Ae3798fda6610861fE60enNeo-Grünfeld DefenseNon- or Delayed Fianchettornbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 44wo - 7 14fbd86dee213f1aD70enNeo-Grünfeld Defensernbqkb1r/ppp1pp1p/5np1/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4yti - / c38a7b8ecc1465fbD80enGrünfeld Defensernbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 vpc - + 8b3879078d8c3d03E00enCatalan Openingrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 ] + +- a8b87c235b89e48HE00enCatalan OpeningHungarian Gambitrnbqkb1r/pppp1ppp/5n2/4p3/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4W - #9 2b27fd577e4932fcE10enIndian GameDzindzi-Indian Defensernbqkb1r/1ppp1ppp/p3pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4lzQ - = 1fa1dd0a662ec15d]E10enBlumenfeld Countergambitrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4xK - #% c3d8403b2b2047daE10enIndian GameDöry Indianrnbqkb1r/pppp1ppp/4p3/8/2PPn3/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4sE - 3 309165a2d29e0202E11enBogo-Indian Defensernbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4y? - 9 92b945b467ea7dbbE12enQueen's Indian Defensernbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4u9 - 5 106291f6789ae1e6E20enNimzo-Indian Defensernbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4ty 3 - #I 677b687e90a98264dE60enIndian GameAnti-Grünfeld, Adorjan Gambitrnbqkb1r/p1pppp1p/5np1/1p1P4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4 p~ x o g Bppppppppp\]^p --596626f7b0c378bb7A00enVan Geet OpeningVenezolana Variationrnbqkbnr/ppp1pppp/8/3p4/8/2NP4/PPP1PPPP/R1BQKBNR b KQkq - 0 2}{O - )+506bb8a6fb3c4404A00enPolish OpeningMyers Variationrnbqkbnr/pp2pppp/2p5/3p4/PP6/8/1BPPPPPP/RN1QKBNR b KQkq - 0 3|N -)+3ba2c64a96af91caA00enPolish OpeningMyers Variationrnbqkbnr/pp2pppp/2p5/3p4/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 0 3zJ - )?82dde89db5d61642BA00enPolish OpeningBugayev Advance Variationrnbqkbnr/pppp2pp/5p2/1P2p3/8/8/PBPPPPPP/RN1QKBNR b KQkq - 0 3m - -_ 864891b716449720 A00enVan Geet OpeningCaro-Kann Variation, St. Patrick's Attackrnbqkbnr/pp2pppp/2p5/3p4/4P3/2N4P/PPPP1PP1/R1BQKBNR b KQkq - 0 3 k --_ fcc1a1e6a3278d69iA00enVan Geet OpeningCaro-Kann Variation, St. Patrick's Attackrnbqkbnr/ppp1pppp/8/3p4/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 0 2h - -79aeffd3a2e4e86edA00enVan Geet OpeningDunst-Perrenet Gambitrnbqkbnr/ppp1pppp/8/8/4p3/2NP4/PPP2PPP/R1BQKBNR b KQkq - 0 3g --7344b3eef6ade3d399A00enVan Geet OpeningDunst-Perrenet Gambitrnbqkbnr/ppp1pppp/8/8/4p3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3}c - -' 57f88ac7429deb9fA00enVan Geet OpeningHector Gambitrnbqkbnr/ppp1pppp/8/8/2B1p3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 1 3~^ - --5afad8deca14d248HA00enVan Geet OpeningDougherty Gambitrnbqkbnr/ppp1pppp/8/8/4p3/2N2P2/PPPP2PP/R1BQKBNR b KQkq - 0 3Y - -+82689d4e2f286f0fA00enVan Geet OpeningNapoleon Attackr1bqkbnr/pppp1ppp/2n5/4p3/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 0 3X --+ 475db2e43ee1424dMA00enVan Geet OpeningNapoleon Attackr1bqkbnr/pppp1ppp/2n5/4p3/8/2N2N2/PPPPPPPP/R1BQKB1R w KQkq - 2 3|T - -)81738eb8813a6a8eA00enVan Geet OpeningKluever Gambitrnbqkbnr/ppppp1pp/8/8/4p3/2NP4/PPP2PPP/R1BQKBNR b KQkq - 0 3{S --)2fd74d6dc5aad15aZA00enVan Geet OpeningKluever Gambitrnbqkbnr/ppppp1pp/8/8/4p3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3~R --) edc4e56b817bee91A00enVan Geet OpeningKluever Gambitrnbqkbnr/ppppp1pp/8/5p2/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 0 2|Q --)29c3e8236afb539bA00enVan Geet OpeningKluever Gambitrnbqkbnr/ppppp1pp/8/5p2/8/2N5/PPPPPPPP/R1BQKBNR w KQkq - 0 2 PG + Cn WMuus - S aebeb6af7bf30abdC65enRuy Lopez Defense, Halloween Attackr1bqkb1r/pppp1ppp/2n2n2/1B2N3/4P3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4- - /Q88c0776ccc500b8eD01enQueen's Pawn GameVeresov Attack, Two Knights Systemr1bqkb1r/pppnpppp/5n2/3p2B1/3P4/2N2N2/PPP1PPPP/R2QKB1R b KQkq - 3 4, -/Q53a49b9aa4b66ab3D01enQueen's Pawn GameVeresov Attack, Two Knights Systemr1bqkb1r/pppnpppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR w KQkq - 2 4/~e - 1a8e7c91161416febC70enRuy LopezColumbus Variationr1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 4^ + 9Y 80ea2e369c8f3c3D00enBlackmar-Diemer GambitLemberger Countergambit, Diemer Attackrnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N1B3/PPP2PPP/R2QKBNR b KQkq - 1 4] -9Y7b06190fe8f2e84dMD00enBlackmar-Diemer GambitLemberger Countergambit, Diemer Attackrnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4uW - 9_d1c427fca80479daD00enBlackmar-Diemer GambitLemberger Countergambit, Simple Variationrnbqkbnr/ppp2ppp/8/4p3/3PN3/8/PPP2PPP/R1BQKBNR b KQkq - 0 4P - 9ae79be64de0c75f3d=D00enBlackmar-Diemer GambitLemberger Countergambit, Endgame Variationrnbqkbnr/ppp2ppp/8/4P3/4p3/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4 I - 9a 6fa2f2c0c0d9e5b3D00enBlackmar-Diemer GambitLemberger Countergambit, Rassmussen Attackrnbqkbnr/ppp2ppp/8/4p3/3Pp3/2N5/PPP1NPPP/R1BQKB1R b KQkq - 1 4 B - 93 d9989e5c57d74a63cD00enBlackmar-Diemer GambitRasa-Studier Gambitrnbqkb1r/ppp1pppp/5n2/8/3Pp3/2N1B3/PPP2PPP/R2QKBNR b KQkq - 3 4 A -93 aa9025b0d6ed51edD00enBlackmar-Diemer GambitRasa-Studier Gambitrnbqkb1r/ppp1pppp/5n2/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4; - 9/ 6cca728666678a25%D00enBlackmar-Diemer Gambitvon Popiel Gambitrnbqkb1r/ppp1pppp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 44 - 9[ db0bfa29c49fced1D00enBlackmar-Diemer GambitLemberger Countergambit, Sneider Attackrnbqkbnr/ppp2ppp/8/4p2Q/3Pp3/2N5/PPP2PPP/R1B1KBNR b KQkq - 1 4 }l - 1 c8cbbdb43361c6faC68enRuy LopezExchange Variationr1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4 uc-f: u F  uuuuuuuusssx - /-66f77fa2dc851be7C46enFour Knights GameHalloween Gambitr1bqkb1r/pppp1ppp/2n2n2/4N3/4P3/2N5/PPPP1PPP/R1BQKB1R b KQkq - 0 4q - //bb073f7150d86877wC46enFour Knights GameItalian Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4j - /-1d81a4f369529393C47enFour Knights GameScotch Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4 - ]4cfb47561e9368baC64enRuy LopezClassical Variation, Spanish Wing Gambitr1bqk1nr/pppp1ppp/2n5/1Bb1p3/1P2P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4{ - Y90d4ca6268550b18C64enRuy LopezClassical Variation, Central Variationr1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4{z - )6e883960a31e749bC65enRuy LopezBerlin Defenser1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 5 4c - //eb6a5af61d0f2d52RC48enFour Knights GameSpanish Variationr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4|\ - %'17d007511d13e3ceC50enItalian GameJerome Gambitr1bqk1nr/pppp1Bpp/2n5/2b1p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4 U - %/18c794a8b162fa6foC50enItalian GameGiuoco Pianissimor1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R b KQkq - 0 4N - %1735678d7e43b6cf9C50enItalian GameRosentreter Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4~G - %%1c9622d153442d9fC51enItalian GameEvans Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4@ - %3c0b9afe525824e3d=C53enItalian GameClassical Variationr1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 49 - %eee34e406d6aa517azC55enItalian GameTwo Knights Defense, Modern Bishop's Openingr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/3P1N2/PPP2PPP/RNBQK2R b KQkq - 0 42 - %S85a5087983f3c7ecC55enItalian GameTwo Knights Defense, Open Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4+ - %Q1642c6063bf6120a C57enItalian GameTwo Knights Defense, Knight Attackr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4$ - Y24eb089a0e7d411aC63enRuy LopezSchliemann Defense, Dyckhoff Variationr1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 1 4- - Y 8e532ade6ac913f8C63enRuy LopezSchliemann Defense, Exchange Variationr1bqkbnr/pppp2pp/2B5/4pp2/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4 - Y1a493f92dd56ee81C63enRuy LopezSchliemann Defense, Schönemann Attackr1bqkbnr/pppp2pp/2n5/1B2pp2/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4 - e 33b024778e18ea04C63enRuy LopezSchliemann Defense, Jaenisch Gambit Acceptedr1bqkbnr/pppp2pp/2n5/1B2pP2/8/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4 oX N h w ooooooooo_K+L> - -)364adf4b424ae528(C44enPonziani OpeningNeumann Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 2 4|7 - +!1143f8245d6832399C44enDresden OpeningThe Goblinr1bqkb1r/pppp1ppp/2n2n2/4N3/2P1P3/8/PP1P1PPP/RNBQKB1R b KQkq - 0 4~6 -+!af000cdff976970fC44enDresden OpeningThe Goblinr1bqkb1r/pppp1ppp/2n2n2/4p3/2P1P3/5N2/PP1P1PPP/RNBQKB1R w KQkq - 1 4y0 - )# aeca360daf1cc253SC44enLatvian GambitClam Gambitr1bqkbnr/pppp2pp/2n5/4pP2/8/3P1N2/PPP2PPP/RNBQKB1R b KQkq - 0 4|/ -)#42060242ed9beb94C44enLatvian GambitClam Gambitr1bqkbnr/pppp2pp/2n5/4pp2/4P3/3P1N2/PPP2PPP/RNBQKB1R w KQkq - 0 4{. -)#d66964db5313c64aJC44enLatvian GambitClam Gambitr1bqkbnr/pppp1ppp/2n5/4p3/4P3/3P1N2/PPP2PPP/RNBQKB1R b KQkq - 0 3y) - #) 505c7abe12414b4fOC44enScotch GameGöring Gambitr1bqkbnr/pppp1ppp/2n5/8/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 z" - #+ 15585389a7a5d74aJC44enScotch GameRelfsson Gambitr1bqkbnr/pppp1ppp/2n5/1B6/3pP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4w - #' 4535360eea72926foC44enScotch GameScotch Gambitr1bqkbnr/pppp1ppp/2n5/8/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4r - ) 95963fa8aa955be9C44enTayler Openingr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/5N2/PPP1BPPP/RNBQK2R b KQkq - 0 4q -) 50a31002bb5c76abC44enTayler Openingr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/5N2/PPPPBPPP/RNBQK2R w KQkq - 4 4 `q - -92aa7cdb0269b7bd1C44enKing's Pawn GameSchulze-Müller Gambitr1bqkbnr/pppp1ppp/8/4n3/3PP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 --9ef92e21a37525693C44enKing's Pawn GameSchulze-Müller Gambitr1bqkbnr/pppp1ppp/8/4n3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 4i - # 4112df7bd300d6e7C45enScotch Gamer1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4  - /11328ba7f31d73091C46enFour Knights GameGunsberg Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/P1N2N2/1PPP1PPP/R1BQKB1R b KQkq - 0 4  a& z hWWW} - -1eb3fd6d2e6f2e441AC41enPhilidor DefenseSteinitz Variationrnbqk1nr/ppp1bppp/3p4/4p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4 L - %K a5418b488576d129)C43enRussian GameModern Attack, Center Variationrnbqkb1r/pppp1ppp/8/4p3/3Pn3/3B1N2/PPP2PPP/RNBQK2R b KQkq - 1 4 E - -/b8a3ac2d3eb3afbdC44enPonziani OpeningSpanish Variationr1bqkbnr/ppp2ppp/2n5/1B1pp3/4P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 4D --/8b7d7d825b273c3e>C44enPonziani OpeningSpanish Variationr1bqkbnr/ppp2ppp/2n5/3pp3/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 0 4 }v - %%70103373e5f44aceC42enRussian GameMoody Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/5N2/PPP1QPPP/RNB1KB1R b KQkq - 0 4|u -%%b5251cd9f43d678cC42enRussian GameMoody Gambitr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/5N2/PPPPQPPP/RNB1KB1R w KQkq - 4 4zt -%% 1ec8c43be5acc28fC42enRussian GameMoody Gambitrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPPQPPP/RNB1KB1R b KQkq - 3 3 }{o - %) 466a9a880be8429dC42enRussian GamePaulsen Attackrnbqkb1r/ppp2ppp/3p1n2/8/2N1P3/8/PPPP1PPP/RNBQKB1R b KQkq - 1 4 h - %I dd06db47e02bb78eC42enRussian GameKarklins-Martinovsky Variationrnbqkb1r/ppp2ppp/3p1n2/8/4P3/3N4/PPPP1PPP/RNBQKB1R b KQkq - 1 4pa - - d20ff64c86031026&C42enPetrov's Defensernbqkb1r/ppp2ppp/3p1n2/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 4yZ - %+fbd062917a039c388C42enRussian GameCochrane Gambitrnbqkb1r/ppp2Npp/3p1n2/8/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 4}S - -' b536da19561976faC43enBishop's OpeningUrusov Gambitrnbqkb1r/pppp1ppp/5n2/8/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4 Qk U   }f7t   J - 95 db5c548b11c764344C39enKing's Gambit AcceptedKing Knight's Gambitrnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4C - -7 4bace8abff5ff8a9C40enKing's Pawn GameLa Bourdonnais Gambitrnb1kbnr/pppp1ppp/6q1/4p3/2B1P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 5 4B --735d9939f83ac23b9C40enKing's Pawn GameLa Bourdonnais Gambitrnb1kbnr/pppp1ppp/6q1/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4A --7b7ab56034bb84dd6C40enKing's Pawn GameLa Bourdonnais Gambitrnb1kbnr/pppp1ppp/5q2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3t< - Q 3b015fe368a43edaC40enLatvian Gambit Accepted, Main Linernb1kbnr/pppp2pp/5q2/4Np2/3PP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4; -Q fe347049796d1398C40enLatvian Gambit Accepted, Main Linernb1kbnr/pppp2pp/5q2/4Np2/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4  5 - s b769c342af0b2455UC40enLatvian Gambit Accepted, Foltys-Leonhardt Variationrnb1kbnr/pppp2pp/5q2/5p2/2N1P3/8/PPPP1PPP/RNBQKB1R b KQkq - 2 4z. - -# c20b343dd1a8a721!C41enPhilidor DefenseBird Gambitrnbqkbnr/ppp2ppp/3p4/8/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 ~z' -  -'d762788d299b7e01C41enPhilidor DefenseMorphy Gambitrnbqkbnr/ppp2ppp/3p4/8/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4 - -1d34591f810e93a89C41enPhilidor DefenseExchange Variationrnbqkbnr/ppp2ppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 - -c4057b81cb9c913b5C41enPhilidor DefensePhilidor Countergambit, Zukertort Variationrnbqkbnr/ppp3pp/3p4/4pp2/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4  - -7 e8dc0d90606c4a54TC41enPhilidor DefenseNimzowitsch Variationrnbqkb1r/ppp2ppp/3p1n2/4P3/4P3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 4 - -Y17f246fa401a2b82C41enPhilidor DefenseNimzowitsch Variation, Klein Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 2 4 - -G22931307c1950580C41enPhilidor DefenseNimzowitsch, Locock Variationrnbqkb1r/ppp2ppp/3p1n2/4p1N1/3PP3/8/PPP2PPP/RNBQKB1R b KQkq - 2 4 A Wuf q-- - -Oe9e7755ba05c6911C31enVan Geet OpeningGrünfeld Defense, Steiner Gambitrnbqkbnr/ppp2ppp/8/4p3/4NP2/8/PPPP2PP/R1BQKBNR b KQkq - 0 4~ X - a 82cae708ab313008C37enKing's Gambit Accepted, Rosentreter Gambitrnbqkbnr/pppp1p1p/8/6p1/3PPp2/5N2/PPP3PP/RNBQKB1R b KQkq - 0 4 Q - e 244c7c8a92bbcbecC37enKing's Gambit Accepted, King's Knight Gambitrnbqkbnr/pppp1p1p/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R b KQkq - 1 4 --O43254ba8e0aaf886C31enVan Geet OpeningGrünfeld Defense, Steiner Gambitrnbqkbnr/ppp2ppp/8/4p3/4pP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4@) - { d64538f5474bec2b+C31enKing's Gambit, Falkbeer Countergambit, Charousek Gambitrnbqkbnr/ppp2ppp/8/3P4/4pP2/3P4/PPP3PP/RNBQKBNR b KQkq - 0 4 1{ - { 4b3f2a8f664fc47c|C31enKing's Gambit, Falkbeer Countergambit, Anderssen Attackrnbqkbnr/ppp2ppp/8/1B1P4/4pP2/8/PPPP2PP/RNBQK1NR b KQkq - 1 4t -  df124cf601f19614C33enKing's Gambit Accepted, Bishop's Gambit, Bogoljubov Variationrnbqkb1r/pppp1ppp/5n2/8/2B1Pp2/2N5/PPPP2PP/R1BQK1NR b KQkq - 3 4 /m - } 54f3dbb25a82c789C34enKing's Gambit Accepted, Fischer Defense, Schulder Gambitrnbqkbnr/ppp2ppp/3p4/8/1P2Pp2/5N2/P1PP2PP/RNBQKB1R b KQkq - 0 47f - 9)6509102668f7eee0C36enKing's Gambit AcceptedModern Defensernbqkbnr/ppp2ppp/8/3P4/5p2/5N2/PPPP2PP/RNBQKB1R b KQkq - 0 4_ - U bc68d000781a9f93C37enKing's Gambit Accepted, Quade Gambitrnbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4  qS j " k2IIIIIIIIIw[H& - ba91d0db07c946faC30enKing's Gambit Declined, Classical Variation, Rotlewi Countergambitrnbqk1nr/ppp2ppp/3p4/2b1p3/4PP2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 R - c cc4b2843d7b9497c|C30enKing's Gambit Declined, Classical Variationrnbqk1nr/ppp2ppp/3p4/2b1p3/4PP2/2P2N2/PP1P2PP/RNBQKB1R b KQkq - 0 4 - 9M 360ed8786ba5b26enC30enKing's Gambit DeclinedClassical, Soldatenkov Variationrnbqk1nr/ppp2ppp/3p4/2b1P3/4P3/5N2/PPPP2PP/RNBQKB1R b KQkq - 0 4 3 - -=ad5da9ca479e6a67gC27enBishop's OpeningBoden-Kieseritzky Gambitrnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 1 4 2 --= 56cab168857ce8beC27enBishop's OpeningBoden-Kieseritzky Gambitrnbqkb1r/pppp1ppp/8/4p3/2B1n3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 , - #O 7ee52381c039b294C29enVienna GameVienna Gambit, Steinitz Variationrnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2NP4/PPP3PP/R1BQKBNR b KQkq - 0 4$% -  eab8f29236d1baf3C30enKing's Gambit Declined, Norwalde Variation, Schubert Variationrnb1kbnr/pppp1ppp/8/4p3/3PPq2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4$ - 2f8ddd38271897b1C30enKing's Gambit Declined, Norwalde Variation, Schubert Variationrnb1kbnr/pppp1ppp/8/4p3/4Pq2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4# + 9fd6b72d06e451dC30enKing's Gambit Declined, Norwalde Variation, Schubert Variationrnb1kbnr/pppp1ppp/5q2/4p3/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 2 3E( -  1064a577a17f2adeC30enKing's Gambit Declined, Classical Variation, Rotlewi Countergambitrnbqk1nr/ppp2ppp/3p4/2b1p3/1P2PP2/5N2/P1PP2PP/RNBQKB1R b KQkq - 0 4 g. h f a[M'Rc{ n5k - -_ aee58587d80f3b388C23enBishop's OpeningMcDonnell Gambit, McDonnell Double Gambitrnbqk1nr/pppp1ppp/8/4p3/1bB1PP2/8/P1PP2PP/RNBQK1NR b KQkq - 0 4d - -Gf614a5b376aaa21eC23enBishop's OpeningLopez Variation, Lopez Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/2B1PP2/8/PPPPQ1PP/RNB1K1NR b KQkq - 0 4c +-Gb02d8be6f3b9f97C23enBishop's OpeningLopez Variation, Lopez Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/8/PPPPQPPP/RNB1K1NR w KQkq - 4 4] - -'cec710527caeb29eC24enBishop's OpeningVienna Hybridr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2NP4/PPP2PPP/R1BQK1NR b KQkq - 2 4\ --'355008f0be4c3047GC24enBishop's OpeningVienna Hybridr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/3P4/PPP2PPP/RNBQK1NR w KQkq - 1 4[ --'9ebdd012afdd9544DC24enBishop's OpeningVienna Hybridrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/3P4/PPP2PPP/RNBQK1NR b KQkq - 0 3 a|V - -' 1888ce77ee8f1841AC24enBishop's OpeningWarsaw Gambitrnbqkb1r/pppp1ppp/5n2/8/2BpP3/2P5/PP3PPP/RNBQK1NR b KQkq - 0 4|U --'6e5236ef3eff17c7C24enBishop's OpeningWarsaw Gambitrnbqkb1r/pppp1ppp/5n2/8/2BpP3/8/PPP2PPP/RNBQK1NR w KQkq - 0 4 O - -) 29118a4f1fdefcddC24enBishop's OpeningPachman Gambitrnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/RNBQK2R b KQkq - 1 4|N --)990ab651c5b1847d}C24enBishop's OpeningPachman Gambitrnbqkb1r/pppp1ppp/8/4p3/2B1n3/8/PPPPNPPP/RNBQK2R w KQkq - 0 4~M --) 24bdf808c366236enC24enBishop's OpeningPachman Gambitrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPPNPPP/RNBQK2R b KQkq - 3 3H - #I 89973b6384108965eC25enVienna GameVienna Gambit, Steinitz Gambitr1bqkbnr/pppp1ppp/2n5/8/3PPp2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4G -#I 4ca214c995d9a427'C25enVienna GameVienna Gambit, Steinitz Gambitr1bqkbnr/pppp1ppp/2n5/8/4Pp2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4A - #m 97c6f83ffd3fc51aC25enVienna GameVienna Gambit, Steinitz Gambit, Knight Variationr1bqkbnr/pppp1ppp/2n5/8/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4: - -Kc8378ceba70dfd1eC26enBishop's OpeningVienna Hybrid, Spielmann Attackrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/2NP4/PPP2PPP/R1BQK1NR b KQkq - 0 49 --K66934f3ee39d46caC26enBishop's OpeningVienna Hybrid, Spielmann Attackrnbqk2r/pppp1ppp/5n2/2b1p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4  MM f d X| p1H ;r - -i 2529001211ee09377C23enBishop's OpeningMcDonnell Gambit, La Bourdonnais-Denker Gambitrnbqk1nr/pppp1ppp/8/4p3/1bB1P3/2P5/P2P1PPP/RNBQK1NR b KQkq - 0 4q --i 53f3f88ac19e06b1C23enBishop's OpeningMcDonnell Gambit, La Bourdonnais-Denker Gambitrnbqk1nr/pppp1ppp/8/4p3/1bB1P3/8/P1PP1PPP/RNBQK1NR w KQkq - 0 4 K* - )[af4f4fce735a935f_C15enFrench DefenseWinawer Variation, Fingerslip Variationrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPPB1PPP/R2QKBNR b KQkq - 3 4# - )g a11d1f363b54ba5d]C15enFrench DefenseWinawer Variation, Delayed Exchange Variationrnbqk1nr/ppp2ppp/4p3/3P4/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4 - )c9266feb4c910f5a5C15enFrench DefenseWinawer Variation, Alekhine-Maróczy Gambitrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP1NPPP/R1BQKB1R b KQkq - 3 4 - )Ue7bb0386e525de3f?C16enFrench DefenseWinawer Variation, Advance Variationrnbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4~ + #7 8a93f4204a43c11C21enCenter GameKieseritzky Variationrnbqkbnr/pp1p1ppp/8/2p5/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4 ~ - #1 56ace607c9e204cfC21enCenter GameLanc-Arnold Gambitrnbqk1nr/pppp1ppp/8/2b5/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4| -#1 20761e9f19920b49IC21enCenter GameLanc-Arnold Gambitrnbqk1nr/pppp1ppp/8/2b5/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 4x - #)7627916466b956c6C22enCenter GameHall Variationr1bqkbnr/pppp1ppp/2n5/8/2Q1P3/8/PPP2PPP/RNB1KBNR b KQkq - 2 4^y - #=34f0f036da4cb529)C22enCenter GamePaulsen Attack Variationr1bqkbnr/pppp1ppp/2n5/8/4P3/4Q3/PPP2PPP/RNB1KBNR b KQkq - 2 4  PPi  " 444444 kkkk$ -)_acdfb756a8e4306dmC01enFrench DefenseExchange Variation, Monte Carlo Variationrnbqkbnr/ppp2ppp/8/3p4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4/ - -3610fb232e064c902B53enSicilian DefenseChekhover Variationrnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4( - )3f6c535e0b7b848d5C00enFrench DefenseOrthoschnapp Gambitrnbqkbnr/ppp2ppp/8/3p4/4P3/1Q6/PP1P1PPP/RNB1KBNR b KQkq - 1 4}' -)3cc3c96588283e0333C00enFrench DefenseOrthoschnapp Gambitrnbqkbnr/ppp2ppp/8/3p4/4P3/8/PP1P1PPP/RNBQKBNR w KQkq - 0 4& -)3f3284f9c982620f8C00enFrench DefenseOrthoschnapp Gambitrnbqkbnr/ppp2ppp/4p3/3P4/4P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 3% -)3 fd02d4513ae834e5C00enFrench DefenseOrthoschnapp Gambitrnbqkbnr/ppp2ppp/4p3/3p4/2P1P3/8/PP1P1PPP/RNBQKBNR w KQkq - 0 3  {! - ))7ac2c8ef92bc06bbC00enFrench DefenseCarlson Gambitrnbqkbnr/ppp2ppp/4p3/4N3/3Pp3/8/PPP2PPP/RNBQKB1R b KQkq - 1 4{ -))a7fa1720c93163cdC00enFrench DefenseCarlson Gambitrnbqkbnr/ppp2ppp/4p3/8/3Pp3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 ~{ - )# 87b8157c4ceebfe2C00enFrench DefenseWing Gambitrnbqkbnr/pp3ppp/4p3/2ppP3/1P6/5N2/P1PP1PPP/RNBQKB1R b KQkq - 0 4y -)# 2d4d60d0ea58d3c6C00enFrench DefenseWing Gambitrnbqkbnr/pp3ppp/4p3/2ppP3/8/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 4y -)# cb3cb17e151fd8bbC00enFrench DefenseWing Gambitrnbqkbnr/ppp2ppp/4p3/3pP3/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3R - )_20fc2872ebeb9b6ajC01enFrench DefenseExchange Variation, Monte Carlo Variationrnbqkbnr/ppp2ppp/8/3p4/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4 <n , z:<<<<<<<<<<<<jDg - -g16a74aa53d3a2279yB21enSicilian DefenseSmith-Morra Gambit Declined, Dubois Variationrnbqkbnr/pp1ppppp/8/8/2P1P3/3p4/PP3PPP/RNBQKBNR b KQkq - 0 4!` - -q 812f3afc31dd9808B28enSicilian DefenseO'Kelly Variation, Normal System, Smith-Morra Linernbqkbnr/1p1ppppp/p7/8/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4!_ --qf7f5c264e1ad978eB28enSicilian DefenseO'Kelly Variation, Normal System, Smith-Morra Linernbqkbnr/1p1ppppp/p7/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 q Y - -o8a42d5a0d53c78b3B28enSicilian DefenseO'Kelly Variation, Normal System, Zagorovsky Linernbqkbnr/1p1ppppp/p7/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4 R - -q9446764cc9ee4128(B28enSicilian DefenseO'Kelly Variation, Normal System, Cortlever Gambitrnbqkbnr/1p1ppppp/p7/8/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4%K - -u d8f8f01c153fd378xB30enSicilian DefenseNyezhmetdinov-Rossolimo Attack, San Francisco Gambitr1bqkbnr/pp1ppppp/8/nBp5/1P2P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4#J --u 720d85b0b389bf5c\B30enSicilian DefenseNyezhmetdinov-Rossolimo Attack, San Francisco Gambitr1bqkbnr/pp1ppppp/8/nBp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 ;UqD - -e97bb628062d587fB32enSicilian DefenseOpenr1bqkbnr/pp1ppppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 = - -C 25af393ecedff086B40enSicilian DefenseSmith-Morra Gambit Deferredrnbqkbnr/pp1p1ppp/4p3/8/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 6 - -G 6a625d6e048529b9B50enSicilian DefenseModern Variations, Tartakowerrnbqkbnr/pp2pppp/3p4/8/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 U ++   ta<DDDDDU&n - -U920765f1756cfa44DB21enSicilian DefenseSmith-Morra Gambit, Danish Variationrnbqkbnr/pp1ppppp/8/8/4P3/2p2N2/PP3PPP/RNBQKB1R b KQkq - 1 4m --U496389071d8a9b79yB21enSicilian DefenseSmith-Morra Gambit, Danish Variationrnbqkbnr/pp1ppppp/8/8/4P3/2p5/PP3PPP/RNBQKBNR w KQkq - 0 4 H - -S 31de63f8baeb5204B20enSicilian DefenseKronberger Variation, Nemeth Gambitr1bqkbnr/pp1ppppp/2n5/8/2BpP3/N7/PPP2PPP/R1BQK1NR b KQkq - 1 4 --S526dd7d092a884a2B20enSicilian DefenseKronberger Variation, Nemeth Gambitr1bqkbnr/pp1ppppp/2n5/8/3pP3/N7/PPP2PPP/R1BQKBNR w KQkq - 0 4 +-S d736de5ef5ced64dB20enSicilian DefenseKronberger Variation, Nemeth Gambitr1bqkbnr/pp1ppppp/2n5/2p5/3PP3/N7/PPP2PPP/R1BQKBNR b KQkq - 0 3 --S c846424ffe95c026&B20enSicilian DefenseKronberger Variation, Nemeth Gambitr1bqkbnr/pp1ppppp/2n5/2p5/4P3/N7/PPPP1PPP/R1BQKBNR w KQkq - 2 3H,| - -3 d372423d4cce2f5e^B20enSicilian DefenseBig Clamp Formationr1bqkbnr/pp2pppp/2np4/2p5/4PP2/2PP4/PP4PP/RNBQKBNR b KQkq - 0 4{ --3 2e643f30555f12d7B20enSicilian DefenseBig Clamp Formationr1bqkbnr/pp2pppp/2np4/2p5/4P3/2PP4/PP3PPP/RNBQKBNR w KQkq - 0 4z --3 17dea95187275bbaB20enSicilian DefenseBig Clamp Formationr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2PP4/PP3PPP/RNBQKBNR b KQkq - 0 3y --3 610451c95757543c - '3 2fcd1ef7e23d8682A90enDutch DefenseClassical Variationrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4= - '3 9a3d3d8aafd05efbA90enDutch DefenseClassical Variationrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4< - '3 c1d3097f022a1f6dmA90enDutch DefenseClassical Variationrnbqkbnr/pppp2pp/4p3/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 37 - -S93ad04944ec0e2cdB00enKing's Pawn GameNimzowitsch Defense, Wheeler Gambitr1bqkbnr/pppppppp/2n5/8/3PP3/2P5/P4PPP/RNBQKBNR b KQkq - 0 46 --S56982b3e5f09cf8fB00enKing's Pawn GameNimzowitsch Defense, Wheeler Gambitr1bqkbnr/pppppppp/2n5/8/4P3/2P5/P2P1PPP/RNBQKBNR w KQkq - 1 45 --S4c6812d1e77e03bbB00enKing's Pawn GameNimzowitsch Defense, Wheeler Gambitr1bqkbnr/pppppppp/8/8/1n2P3/2P5/P2P1PPP/RNBQKBNR b KQkq - 0 34 --S3ab2ea49370e0c3d=B00enKing's Pawn GameNimzowitsch Defense, Wheeler Gambitr1bqkbnr/pppppppp/8/8/1n2P3/8/P1PP1PPP/RNBQKBNR w KQkq - 0 3 (sx t b Xw!00000000010zu; - %%cdf8ffe9c508235aZB00enBorg DefenseTroon Gambitrnbqkbnr/pppppp2/7p/8/3PP1pP/8/PPP2PP1/RNBQKBNR w KQkq - 0 4{ - 5)3e1a81bd4169e328(B01enScandinavian DefenseBoehnke Gambitrn1qkbnr/ppp2ppp/4b3/8/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 4v: -%%c91e93684487a3355B00enBorg DefenseTroon Gambitrnbqkbnr/pppppp2/7p/6p1/3PP2P/8/PPP2PP1/RNBQKBNR b KQkq - 0 3u9 -%%55bd0f41efb8da4bKB00enBorg DefenseTroon Gambitrnbqkbnr/pppppp2/7p/6p1/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3br5 - 5 6f47e12854312f9eB00enHippopotamus Defensernbqkb1r/ppppp2p/5ppn/8/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4r4 -5 a312e7616eda38e1B00enHippopotamus Defensernbqkb1r/pppppp1p/6pn/8/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3r3 -5 2f3178452dd593e6B00enHippopotamus Defensernbqkb1r/pppppp1p/6pn/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3q2 -5 c6852b1e565a01adB00enHippopotamus Defensernbqkb1r/pppppppp/7n/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 t~/ - -/14f10856b9cd5498B01enVan Geet OpeningGrünfeld Defensernbqkbnr/ppp2ppp/8/4p3/4N3/8/PPPP1PPP/R1BQKBNR w KQkq - 0 4}. --/9e89001c2a28acaeB01enVan Geet OpeningGrünfeld Defensernbqkbnr/ppp1pppp/8/8/4N3/8/PPPP1PPP/R1BQKBNR b KQkq - 0 3 h) - 5/6926a2d8cd60b3bbB01enScandinavian DefenseBlackburne Gambitr1bqkbnr/pp2pppp/2n5/8/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 4( -5/92a1d6ce557985faB01enScandinavian DefenseBlackburne Gambitrnbqkbnr/pp2pppp/2P5/8/8/8/PPPP1PPP/RNBQKBNR b KQkq - 0 3 # - 5318d9de84c69c7dccB01enScandinavian DefenseKloosterboer Gambitrnbqkbnr/pp3ppp/2P5/4p3/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 4x - 5a145bdee0e3a0300B01enScandinavian DefenseMain Linernb1kbnr/ppp1pppp/8/q7/8/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 4{ -55f327a81a0dab2a5B01enScandinavian DefenseMain Linernb1kbnr/ppp1pppp/8/3q4/8/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 3| - 59cd5a4325af512e90B01enScandinavian DefenseGubinsky-Melts Defensernb1kbnr/ppp1pppp/3q4/8/8/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 4 \)\a K 6 %  QQ-RBa - '[ bcb1f375dc07da7azA81enDutch DefenseLeningrad Variation, Karlsbad Variationrnbqk1nr/ppppp1bp/6p1/5p2/3P4/6PN/PPP1PPBP/RNBQK2R b KQkq - 3 4` -'[ d77f29fa9422a5a0A81enDutch DefenseLeningrad Variation, Karlsbad Variationrnbqk1nr/ppppp1bp/6p1/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR w KQkq - 2 4_ -'[ 67c3144c6f656e0a A81enDutch DefenseLeningrad Variation, Karlsbad Variationrnbqkbnr/ppppp2p/6p1/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR b KQkq - 1 3^ -'[ d23337312288b673sA81enDutch DefenseLeningrad Variation, Karlsbad Variationrnbqkbnr/ppppp2p/6p1/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR w KQkq - 0 3 + ] 377946779f2ce9cA57enBenko Gambit Declined, Sosonko Variationrnbqkb1r/p2ppppp/5n2/1ppP4/P1P5/8/1P2PPPP/RNBQKBNR b KQkq - 0 4 - O 31d052e98e9cb362bA57enBenko Gambit Declined, Quiet Linernbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP1NPPPP/R1BQKBNR b KQkq - 1 4 - U aee4bdbda4ebc09aA57enBenko Gambit Declined, Bishop Attackrnbqkb1r/p2ppppp/5n2/1ppP2B1/2P5/8/PP2PPPP/RN1QKBNR b KQkq - 1 4 - i acb9e7c3ffe1a658XA57enBenko Gambit Declined, Hjørring Countergambitrnbqkb1r/p2ppppp/5n2/1ppP4/2P1P3/8/PP3PPP/RNBQKBNR b KQkq - 0 4} + Y 60f0cbab4abf423#A57enBenko Gambit Declined, Pseudo-Sämischrnbqkb1r/p2ppppp/5n2/1ppP4/2P5/5P2/PP2P1PP/RNBQKBNR b KQkq - 0 4v - M b3da067d7c877a6foA57enBenko Gambit Declined, Main Linernbqkb1r/p2ppppp/5n2/1ppP4/2P5/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 4o - %5 cbf3eb5dfc14f64fOA57enBenko GambitMutkin Countergambitrnbqkb1r/p2ppppp/5n2/1ppP4/2P3P1/8/PP2PP1P/RNBQKBNR b KQkq - 0 4 h - 'C c993a9d5940923f8A80enDutch DefenseKrejcik Gambit, Tate Gambitrnbqkbnr/ppp1p1pp/8/3p4/3PP1p1/2N5/PPP2P1P/R1BQKBNR b KQkq - 1 4g -'C 3204b17756eba121!A80enDutch DefenseKrejcik Gambit, Tate Gambitrnbqkbnr/ppp1p1pp/8/3p4/3PP1p1/8/PPP2P1P/RNBQKBNR w KQkq - 0 4f -'Cb76e9363ca3fef07A80enDutch DefenseKrejcik Gambit, Tate Gambitrnbqkbnr/ppppp1pp/8/8/3PP1p1/8/PPP2P1P/RNBQKBNR b KQkq - 0 3e -'C73699e2b21bf520d A80enDutch DefenseKrejcik Gambit, Tate Gambitrnbqkbnr/ppppp1pp/8/8/3P2p1/8/PPP1PP1P/RNBQKBNR w KQkq - 0 3 o'   GA?jjjjjjjjjjjjJS~f - %'91df18507e2b0c98A46enTorre AttackWagner Gambitrnbqkb1r/pp1p1ppp/4pn2/2p3B1/3PP3/5N2/PPP2PPP/RN1QKB1R b KQkq - 0 4~e -%'55d8151895abb192A46enTorre AttackWagner Gambitrnbqkb1r/pp1p1ppp/4pn2/2p3B1/3P4/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4_ - ++ 486de994b7641ff8A50enMexican DefenseHorsefly Gambitr1bqkb1r/pppppppp/5n2/3Pn3/2P2P2/8/PP2P1PP/RNBQKBNR b KQkq - 0 4}^ -++ b57b9499aef52271qA50enMexican DefenseHorsefly Gambitr1bqkb1r/pppppppp/5n2/3Pn3/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 1 4~] -++ 452689d2611a0811A50enMexican DefenseHorsefly Gambitr1bqkb1r/pppppppp/2n2n2/3P4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3Z X - -E c937dbe9d2e2c597A51enBudapest DefenseFajarowicz-Steiner Variationrnbqkb1r/pppp1ppp/8/4P3/2P1n3/8/PPQ1PPPP/RNB1KBNR b KQkq - 2 4 Q + -5 451588ce6570f06A52enBudapest DefenseRubinstein Variationrnbqkb1r/pppp1ppp/8/4P3/2P2Bn1/8/PP2PPPP/RN1QKBNR b KQkq - 2 4 J - -1 1b02b34594b7586foA52enBudapest DefenseAlekhine Variationrnbqkb1r/pppp1ppp/8/4P3/2P1P1n1/8/PP3PPP/RNBQKBNR b KQkq - 0 4~C + -+ 46152fb17d18458XA52enBudapest DefenseAdler Variationrnbqkb1r/pppp1ppp/8/4P3/2P3n1/5N2/PP2PPPP/RNBQKB1R b KQkq - 2 4< - 1Sd1f0f866a552447c|A53enOld Indian DefenseJanowski Variation, Grinberg Gambitrn1qkb1r/ppp1pppp/3p1n2/5b2/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 45 - 1G7b46131fee181607A53enOld Indian DefenseJanowski Variation, Main Linern1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N2P2/PP2P1PP/R1BQKBNR b KQkq - 0 4. - 1]ce9319d82634984bKA53enOld Indian DefenseJanowski Variation, Fianchetto Variationrn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4' - 1]39114e6fae05214eNA53enOld Indian DefenseJanowski Variation, Fianchetto Variationrn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 0 4 - 17c7f2781c023469f0A54enOld Indian DefenseTwo Knights Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4   z \ + u3         6T -+k e1219cb2049cceefA16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pppp/5n2/3P4/8/2N5/PP1PPPPP/R1BQKBNR b KQkq - 0 3>%O - +oad7e537ce9c04084A17enEnglish OpeningAnglo-Indian Defense, Zvjaginsev-Krasenkow Attackrnbqk2r/pppp1ppp/4pn2/8/1bP3P1/2N2N2/PP1PPP1P/R1BQKB1R b KQkq - 0 4 1 H - +;3c02eefb51eed1ceA18enEnglish OpeningMikenas-Carls Variationrnbqkb1r/ppp2ppp/4pn2/3pP3/2P5/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 443 - + 3e34dae094841308A28enEnglish OpeningKing's English Variation, Four Knights Variation, Flexible Liner1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2NP1N2/PP2PPPP/R1BQKB1R b KQkq - 0 42, - +3dbd5b87f44b2078xA28enEnglish OpeningKing's English Variation, Four Knights Variation, Quiet Liner1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N1PN2/PP1P1PPP/R1BQKB1R b KQkq - 0 4 D G -+;5d7bf80655f0f7aaA18enEnglish OpeningMikenas-Carls Variationrnbqkb1r/ppp2ppp/4pn2/3p4/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4FA - -Q 795bdc540f663dffA20enEnglish OpeningsKing's English, Kahiko-Hula Gambitrnbqkb1r/pppp1ppp/5n2/8/2P2p2/4PN2/PP1P2PP/RNBQKB1R b KQkq - 1 4@ --Q a23f30a267805cc2A20enEnglish OpeningsKing's English, Kahiko-Hula Gambitrnbqkb1r/pppp1ppp/5n2/8/2P2p2/4P3/PP1P2PP/RNBQKBNR w KQkq - 0 4? --Q4bb50a3c564f5b16A20enEnglish OpeningsKing's English, Kahiko-Hula Gambitrnbqkb1r/pppp1ppp/5n2/4p3/2P2P2/4P3/PP1P2PP/RNBQKBNR b KQkq - 0 3> --Q b6a377314fde669fA20enEnglish OpeningsKing's English, Kahiko-Hula Gambitrnbqkb1r/pppp1ppp/5n2/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR w KQkq - 1 3= --Q ed4d43c4e2242709 A20enEnglish OpeningsKing's English, Kahiko-Hula Gambitrnbqkbnr/pppp1ppp/8/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 0 26: - + 5b0c28139958269cA28enEnglish OpeningKing's English Variation, Four Knights Variation, Korchnoi Liner1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/P1N2N2/1P1PPPPP/R1BQKB1R b KQkq - 0 4  xg @ i ,!xxxxxxxxxIy.q - +S5cfd63412e99e351QA13enEnglish OpeningAgincourt Defense, Kurajica Defensernbqkbnr/pp3ppp/2p1p3/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4 G - +;73fc02f0d8b51c8fA18enEnglish OpeningMikenas-Carls Variationr1bqkb1r/pppp1ppp/2n1pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 1 4|k - +#9569ba5bf4a3717c|A13enEnglish OpeningNeo-Catalanrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4{j -+# 1003984f68773f5aZA13enEnglish OpeningNeo-Catalanrnbqkb1r/pppp1ppp/4pn2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3zi -+# 3ce5230e88a0e762bA13enEnglish OpeningNeo-Catalanrnbqkb1r/pppp1ppp/4pn2/8/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3x+e - + 5e3c12ab117d3057WA15enEnglish OpeningAnglo-Indian Defense, Scandinavian Defense, Exchange Variationrnbqkb1r/ppp1pppp/8/3n4/8/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 4-d -+ c1d268e6ae982d0b A15enEnglish OpeningAnglo-Indian Defense, Scandinavian Defense, Exchange Variationrnbqkb1r/ppp1pppp/5n2/3P4/8/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 3 _ - +ac2f469bc8f57c786A15enEnglish OpeningAnglo-Indian Defense, Romanishin Variationrnbqkb1r/1ppp1ppp/p3pn2/8/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4Y - +U1dbad4ca7c1aeef8A15enEnglish OpeningAnglo-Indian Defense, Slav Formationrnbqkb1r/pp1ppp1p/2p2np1/8/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4X -+U 8fc039250bda3d43CA15enEnglish OpeningAnglo-Indian Defense, Slav Formationrnbqkb1r/pppppp1p/5np1/8/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3 !S - +iac1b72bcb4c1d220 A17enEnglish OpeningAnglo-Indian Defense, Queen's Indian Formationrnbqkb1r/p1pp1ppp/1p2pn2/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4 R -+ic7723bac4a4265bbA17enEnglish OpeningAnglo-Indian Defense, Queen's Indian Formationrnbqkb1r/pppp1ppp/4pn2/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3M + +Se3352aa01b5ad99A17enEnglish OpeningAnglo-Indian Defense, Nimzo-Englishrnbqk2r/pppp1ppp/4pn2/8/1bP5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 2 4  SS% 4 U/ge```#7V - +k a5ab0a09d39fb28eA16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pppp/8/3n4/8/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 4U -+k7ecfe6ffbb79d3b3A16enEnglish OpeningAnglo-Indian Defense, Anglo-Grünfeld Variationrnbqkb1r/ppp1pppp/8/3n4/8/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 4 k - +35b57e76ac32ad6d6A10enEnglish OpeningPorcupine Variationrnbqkb1r/ppppp1pp/5n2/8/2P1p1P1/2N5/PP1P1P1P/R1BQKBNR b KQkq - 0 4j -+3 f81ae6bc2b5f3bcbA10enEnglish OpeningPorcupine Variationrnbqkb1r/ppppp1pp/5n2/8/2P1p3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4 d - 'a115894956c871d2f/A12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2P5/1P3N2/PB1PPPPP/RN1QKB1R b KQkq - 1 4c -'ad1247e90a11b81c0A12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkb1r/pp2pppp/2p2n2/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R w KQkq - 0 4b -'a544e5c843dcfcfe6A12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkb1r/pp1ppppp/2p2n2/8/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3a -'a d8e83cd0e742a48bA12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkb1r/pp1ppppp/2p2n2/8/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3c] - +_2c0aaa3839281102A15enEnglish OpeningAnglo-Indian Defense, Anti-Anti-Grünfeldrnbqk2r/ppppppbp/5np1/8/2P1P3/2N2N2/PP1P1PPP/R1BQKB1R b KQkq - 0 4\ -+_ e80da770d2a8ac08A15enEnglish OpeningAnglo-Indian Defense, Anti-Anti-Grünfeldrnbqk2r/ppppppbp/5np1/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 2 4[ -+_58b19ac629ef67a2A15enEnglish OpeningAnglo-Indian Defense, Anti-Anti-Grünfeldrnbqkb1r/pppppp1p/5np1/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3 L@ .  { j [ @LLLLLLLLLLL{ + %+ 4b5f83590f11aa2A03enBird OpeningWilliams Gambitrnbqkb1r/ppp1pppp/5n2/8/4pP2/2N5/PPPPQ1PP/R1B1KBNR b KQkq - 3 4 - %C 86179cd8f69e4cd8A03enBird OpeningWilliams-Zilbermints Gambitrnbqkb1r/ppp1pppp/5n2/8/4pP2/2N5/PPPPN1PP/R1BQKB1R b KQkq - 3 4Nz -%+ 92b37717deb54126&A03enBird OpeningWilliams Gambitrnbqkb1r/ppp1pppp/5n2/8/4pP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 2 4y -%+c95d43e2734f00b0A03enBird OpeningWilliams Gambitrnbqkbnr/ppp1pppp/8/8/4pP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 1 3v -%+32ca5b40b1ad8269iA03enBird OpeningWilliams Gambitrnbqkbnr/ppp1pppp/8/8/4pP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3r - /- d75057b414ba74aaA06enZukertort OpeningRegina-Nu Gambitrnbqkbnr/pp2pppp/8/2p5/2p5/1PN2N2/P2PPPPP/R1BQKB1R b KQkq - 1 4 -/- 2cc74f16d658f673sA06enZukertort OpeningRegina-Nu Gambitrnbqkbnr/pp2pppp/8/2p5/2p5/1P3N2/P2PPPPP/RNBQKB1R w KQkq - 0 4 -/- fec1762484661890A06enZukertort OpeningRegina-Nu Gambitrnbqkbnr/pp2pppp/8/2pp4/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3 G~x +/) d4c6df0288a15baA06enZukertort OpeningPachman Gambitrnbqkbnr/pp2pppp/8/2p5/2p5/4PN2/PP1P1PPP/RNBQKB1R w KQkq - 0 4w -/) df4a54c27ab4fb59YA06enZukertort OpeningPachman Gambitrnbqkbnr/pp2pppp/8/2pp4/2P5/4PN2/PP1P1PPP/RNBQKB1R b KQkq - 0 3}v -/)5369cbe639bb505e^A06enZukertort OpeningPachman Gambitrnbqkbnr/pp2pppp/8/2pp4/8/4PN2/PPPP1PPP/RNBQKB1R w KQkq - 0 3r - 'A 97d24b00103dbd9aA09enRéti OpeningReversed Blumenfeld Gambitrnbqkbnr/pp2pppp/8/2p5/1PPp4/4PN2/P2P1PPP/RNBQKB1R b KQkq - 0 4q -'A 3d273eacb68bd1beA09enRéti OpeningReversed Blumenfeld Gambitrnbqkbnr/pp2pppp/8/2p5/2Pp4/4PN2/PP1P1PPP/RNBQKB1R w KQkq - 0 4p -'A db56ef0249ccdac3A09enRéti OpeningReversed Blumenfeld Gambitrnbqkbnr/ppp1pppp/8/8/2Pp4/4PN2/PP1P1PPP/RNBQKB1R b KQkq - 0 3  - 3)2d773ab84c8fd3e4A06enNimzo-Larsen AttackNorfolk Gambitrnbqkb1r/pp2pppp/5n2/2pp4/4P3/1P3N2/PBPP1PPP/RN1QKB1R b KQkq - 0 4 -3) e97037f0a70f6eeeA06enNimzo-Larsen AttackNorfolk Gambitrnbqkb1r/pp2pppp/5n2/2pp4/8/1P3N2/PBPPPPPP/RN1QKB1R w KQkq - 0 4~ +3) f01e65e58486593A06enNimzo-Larsen AttackNorfolk Gambitrnbqkb1r/ppp1pppp/5n2/3p4/8/1P3N2/PBPPPPPP/RN1QKB1R b KQkq - 2 3} -3) cf7d0c5b95d4f97c|A06enNimzo-Larsen AttackNorfolk Gambitrnbqkb1r/ppp1pppp/5n2/3p4/8/1P3N2/P1PPPPPP/RNBQKB1R w KQkq - 1 3 }u -/)b5181a48c6fc5b23#A06enZukertort OpeningPachman Gambitrnbqkbnr/ppp1pppp/8/3p4/8/4PN2/PPPP1PPP/RNBQKB1R b KQkq - 0 2y - /) 81ea0da4f2077ed7A06enZukertort OpeningPachman Gambitrnbqkbnr/pp2pppp/8/2p5/2p5/1P2PN2/P2P1PPP/RNBQKB1R b KQkq - 0 4 V ) + BI wVVVVVVV|||||| 8 - %M 9515bd0a93a17aecA00enGrob OpeningGrob Gambit, Richter-Grob Gambitrnbqkbnr/pp2pppp/2p5/8/2p3P1/1P6/P2PPPBP/RNBQK1NR b KQkq - 0 4 7 -%M19b3dd5e492c1181A00enGrob OpeningGrob Gambit, Richter-Grob Gambitrnbqkbnr/pp2pppp/2p5/8/2p3P1/8/PP1PPPBP/RNBQK1NR w KQkq - 0 4 6 -%M cbb5e46c1b12ff62bA00enGrob OpeningGrob Gambit, Richter-Grob Gambitrnbqkbnr/pp2pppp/2p5/3p4/2P3P1/8/PP1PPPBP/RNBQK1NR b KQkq - 0 321 - %? 7705435db9fa49399A00enGrob OpeningGrob Gambit, Keres Gambitrnbqkbnr/ppp2ppp/8/3p4/3p2P1/2P5/PP2PPBP/RNBQK1NR b KQkq - 0 40 +%?1dfbbc5698a46bfA00enGrob OpeningGrob Gambit, Keres Gambitrnbqkbnr/ppp2ppp/8/3p4/3p2P1/8/PPP1PPBP/RNBQK1NR w KQkq - 0 4/ -%? 9aa1b147adf152aaA00enGrob OpeningGrob Gambit, Keres Gambitrnbqkbnr/ppp2ppp/8/3pp3/3P2P1/8/PPP1PPBP/RNBQK1NR b KQkq - 0 3z* - '% 8e16787a0a96ea86A00enKadas OpeningKadas Gambitrnbqkbnr/pp2pppp/8/3p4/3p3P/2P2N2/PP2PPP1/RNBQKB1R b KQkq - 0 4w) -'% f8cc80e2dae6e500A00enKadas OpeningKadas Gambitrnbqkbnr/pp2pppp/8/3p4/3p3P/5N2/PPP1PPP1/RNBQKB1R w KQkq - 0 4z( -'% a7d23ad7a7128cc6A00enKadas OpeningKadas Gambitrnbqkbnr/pp2pppp/8/2pp4/3P3P/5N2/PPP1PPP1/RNBQKB1R b KQkq - 1 3 #~# - %+24d103b70e8665b2A02enBird OpeningSiegener Gambitrnbqkbnr/pp1p1ppp/8/2p5/3p1P2/2P2N2/PP2P1PP/RNBQKB1R b KQkq - 0 4|" -%+ 520bfb2fdef66a344A02enBird OpeningSiegener Gambitrnbqkbnr/pp1p1ppp/8/2p5/3p1P2/5N2/PPP1P1PP/RNBQKB1R w KQkq - 0 4z! -%+ b47a2a8121b16149IA02enBird OpeningSiegener Gambitrnbqkbnr/pppp1ppp/8/8/3p1P2/5N2/PPP1P1PP/RNBQKB1R b KQkq - 1 3x -%+6f1ec67749570074tA02enBird OpeningSiegener Gambitrnbqkbnr/pppp1ppp/8/8/3p1P2/8/PPP1P1PP/RNBQKBNR w KQkq - 0 3z -%+ f460ccf58d2c1461aA02enBird OpeningSiegener Gambitrnbqkbnr/pppp1ppp/8/4p3/3P1P2/8/PPP1P1PP/RNBQKBNR b KQkq - 0 2w - %% 2a62054399b44058XA02enBird OpeningSwiss Gambitrnbqkb1r/ppppp1pp/5n2/8/4pPP1/2N5/PPPP3P/R1BQKBNR b KQkq - 0 4w -%% 892f049571c1ad45EA02enBird OpeningSwiss Gambitrnbqkb1r/ppppp1pp/5n2/8/4pP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 2 4v -%%d2c13060dc3becd3A02enBird OpeningSwiss Gambitrnbqkbnr/ppppp1pp/8/8/4pP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 1 3s -%%295628c21ed96e0a A02enBird OpeningSwiss Gambitrnbqkbnr/ppppp1pp/8/8/4pP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 g l# P gllllllllllllp  |R -)' 45662384ab495fc8A00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pp1p/6p1/3p4/3PP3/5P2/PPP3PP/RNBQKBNR b KQkq - 0 3|Q -)' 80530c2eba80728aA00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pp1p/6p1/3p4/4P3/5P2/PPPP2PP/RNBQKBNR w KQkq - 0 3zP -)'69e75f75c10fe0c1A00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pppp/8/3p4/4P3/5P2/PPPP2PP/RNBQKBNR b KQkq - 0 2yO -)'ade0523d2a8f5dcbA00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pppp/8/3p4/8/5P2/PPPPP1PP/RNBQKBNR w KQkq - 0 2s{M + // 2bce2387f266444DA00enHungarian OpeningWinterberg Gambitrnbqkbnr/ppp2ppp/8/4p3/2p5/1P4P1/P2PPPBP/RNBQK1NR b KQkq - 0 4L -//8e1a826ca5ab0f29)A00enHungarian OpeningWinterberg Gambitrnbqkbnr/ppp2ppp/8/4p3/2p5/6P1/PP1PPPBP/RNBQK1NR w KQkq - 0 4K -// 5c1cbb5ef795e1caA00enHungarian OpeningWinterberg Gambitrnbqkbnr/ppp2ppp/8/3pp3/2P5/6P1/PP1PPPBP/RNBQK1NR b KQkq - 0 3 #F - /m 3eb859245cea2ed6A00enHungarian OpeningReversed Brooklyn Defense, Brooklyn Benko Gambitrnbqkb1r/pppp1ppp/5n2/8/1P2p3/6P1/P1PPPP1P/RNBQKBNR b KQkq - 0 4!E -/m 944d2c88fa5c42f2A00enHungarian OpeningReversed Brooklyn Defense, Brooklyn Benko Gambitrnbqkb1r/pppp1ppp/5n2/8/4p3/6P1/PPPPPP1P/RNBQKBNR w KQkq - 2 4D -/mcfa3187d57a60364dA00enHungarian OpeningReversed Brooklyn Defense, Brooklyn Benko Gambitrnbqkbnr/pppp1ppp/8/8/4p3/6P1/PPPPPP1P/RNBQKBNR b KQkq - 1 3? - %k b3daf4a655de93c6A00enGrob OpeningZilbermints Gambit, Zilbermints-Hartlaub Gambitrnbqkbnr/ppp2ppp/8/4p3/4p1P1/2NP4/PPP2P1P/R1BQKBNR b KQkq - 0 4> -%k 1d7e3773114e2812A00enGrob OpeningZilbermints Gambit, Zilbermints-Hartlaub Gambitrnbqkbnr/ppp2ppp/8/4p3/4p1P1/2N5/PPPP1P1P/R1BQKBNR w KQkq - 0 4=  =n=d+ [#na)zT - )' fb364415b2c0e01eA00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pp1p/6p1/8/3Pp3/2P2P2/PP4PP/RNBQKBNR b KQkq - 0 4 ,zS -)'8decbc8d62b0ef98A00enBarnes OpeningGedult Gambitrnbqkbnr/ppp1pp1p/6p1/8/3Pp3/5P2/PPP3PP/RNBQKBNR w KQkq - 0 4i - 5O feecb7c532e0f0b4A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Alua Variationr1bqkbnr/pppp1ppp/2n5/8/5p2/2N1PN2/PPPP2PP/R1BQKB1R b KQkq - 1 4h -5O 25885b335a069189A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Alua Variationr1bqkbnr/pppp1ppp/2n5/8/5p2/2N1P3/PPPP2PP/R1BQKBNR w KQkq - 0 4g -5Occ0261ad6bc9965d]A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Alua Variationr1bqkbnr/pppp1ppp/2n5/4p3/5P2/2N1P3/PPPP2PP/R1BQKBNR b KQkq - 0 3f -5O 31141ca07258abd4A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Alua Variationr1bqkbnr/pppp1ppp/2n5/4p3/8/2N1P3/PPPP1PPP/R1BQKBNR w KQkq - 2 3b - 5Q d06b4d33bfa51b91A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Ekolu Variationrnbqkbnr/ppp2ppp/8/3p4/5p2/2N1PN2/PPPP2PP/R1BQKB1R b KQkq - 1 4a +5Q b0fa1c5d7437aacA00enVan't Kruijs OpeningKeoni-Hiva Gambit, Ekolu Variationrnbqkbnr/ppp2ppp/8/3p4/5p2/2N1P3/PPPP2PP/R1BQKBNR w KQkq - 0 4` -5Q e2859b5be68c7d78xA00enVan't Kruijs OpeningKeoni-Hiva Gambit, Ekolu Variationrnbqkbnr/ppp2ppp/8/3pp3/5P2/2N1P3/PPPP2PP/R1BQKBNR b KQkq - 0 3d[ + 5Q eef5bd28e8b1421!A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Akahi Variationrnbqkb1r/pppp1ppp/5n2/8/5p2/2N1PN2/PPPP2PP/R1BQKB1R b KQkq - 1 4Z -5Q d58bb724e66d751cA00enVan't Kruijs OpeningKeoni-Hiva Gambit, Akahi Variationrnbqkb1r/pppp1ppp/5n2/8/5p2/2N1P3/PPPP2PP/R1BQKBNR w KQkq - 0 4Y -5Q3c018dbad7a272c8A00enVan't Kruijs OpeningKeoni-Hiva Gambit, Akahi Variationrnbqkb1r/pppp1ppp/5n2/4p3/5P2/2N1P3/PPPP2PP/R1BQKBNR b KQkq - 0 3X -5Q c117f0b7ce334f41AA00enVan't Kruijs OpeningKeoni-Hiva Gambit, Akahi Variationrnbqkb1r/pppp1ppp/5n2/4p3/8/2N1P3/PPPP1PPP/R1BQKBNR w KQkq - 2 3 S V Y P B0+"Gxoo j5 - -/ 9c319524672615b6A00enVan Geet OpeningGladbacher Gambitrnbqkbnr/ppp2ppp/8/4p3/4p3/1PNP4/P1P2PPP/R1BQKBNR b KQkq - 0 4 --/ 329556f123b6ae62bA00enVan Geet OpeningGladbacher Gambitrnbqkbnr/ppp2ppp/8/4p3/4p3/1PN5/P1PP1PPP/R1BQKBNR w KQkq - 0 4 --/ fa1fc9f8ea4f1e322A00enVan Geet OpeningGladbacher Gambitrnbqkbnr/ppp2ppp/8/3pp3/4P3/1PN5/P1PP1PPP/R1BQKBNR b KQkq - 0 3 --/3e18c4b001cfa3388A00enVan Geet OpeningGladbacher Gambitrnbqkbnr/ppp2ppp/8/3pp3/8/1PN5/P1PPPPPP/R1BQKBNR w KQkq - 0 3 --/bb72e6a49d1bed1eA00enVan Geet OpeningGladbacher Gambitrnbqkbnr/pppp1ppp/8/4p3/8/1PN5/P1PPPPPP/R1BQKBNR b KQkq - 0 2 V~ - -7f1f3278e3f4547b4A00enVan Geet OpeningReversed Scandinavianr1bqkbnr/pppp1ppp/2n5/8/Q7/2N5/PPP1PPPP/R1B1KBNR b KQkq - 2 4} --7 bfc56cfeb724f51aA00enVan Geet OpeningReversed Scandinavianr1bqkbnr/pppp1ppp/2n5/8/3Q4/2N5/PPP1PPPP/R1B1KBNR w KQkq - 1 4| --71428b41ca6b55019A00enVan Geet OpeningReversed Scandinavianrnbqkbnr/pppp1ppp/8/8/3Q4/2N5/PPP1PPPP/R1B1KBNR b KQkq - 0 3{ --7699fa3d89224bf24$A00enVan Geet OpeningReversed Scandinavianrnbqkbnr/pppp1ppp/8/8/3p4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3z --7 f2e1a95a565fab311A00enVan Geet OpeningReversed Scandinavianrnbqkbnr/pppp1ppp/8/4p3/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 0 2|w - )-9805917ab5224bdaA00enPolish OpeningSchuehler Gambitrnbqkbnr/1p1ppppp/8/pp6/4P3/8/PBPP1PPP/RN1QKBNR b KQkq - 0 4zv -)-5c029c325ea2f6d0A00enPolish OpeningSchuehler Gambitrnbqkbnr/1p1ppppp/8/pp6/8/8/PBPPPPPP/RN1QKBNR w KQkq - 0 4{u -)-d090beb008842620 A00enPolish OpeningSchuehler Gambitrnbqkbnr/1p1ppppp/2p5/pP6/8/8/PBPPPPPP/RN1QKBNR b KQkq - 0 3|t -)-38d2519f69e7d37c|A00enPolish OpeningSchuehler Gambitrnbqkbnr/1p1ppppp/2p5/p7/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 0 3|s -)-bec8e45e0a7bdfecA00enPolish OpeningSchuehler Gambitrnbqkbnr/pp1ppppp/2p5/8/1P6/8/PBPPPPPP/RN1QKBNR b KQkq - 1 2r p - )E c12e40fc118bee4dMA00enPolish OpeningSchiffler-Sokolsky Variationrnbqkb1r/ppp2ppp/4pn2/1P1p4/8/4P3/PBPP1PPP/RN1QKBNR b KQkq - 0 4 o -)E 6c03024e35d466e9A00enPolish OpeningSchiffler-Sokolsky Variationrnbqkb1r/ppp2ppp/4pn2/1P1p4/8/8/PBPPPPPP/RN1QKBNR w KQkq - 0 4 bxb N 1  6EV.Qs_v! - %#bd60e275d82f0781A00enWare OpeningWare Gambitrnbqkbnr/ppp3pp/P7/3ppp2/8/4P3/1PPP1PPP/RNBQKBNR b KQkq - 0 4 - -[ 68c85172444db52e.A00enVan Geet OpeningPfeiffer Gambit, Sleipnir Countergambitrnbqkbnr/ppp2ppp/8/4p3/3pNP2/5N2/PPPPP1PP/R1BQKB1R b KQkq - 1 4u -%#f8d111bfb9be2409 A00enWare OpeningWare Gambitrnbqkbnr/ppp3pp/8/P2ppp2/8/4P3/1PPP1PPP/RNBQKBNR w KQkq - 0 4v -%#6cbe7726073609d7A00enWare OpeningWare Gambitrnbqkbnr/ppp2ppp/8/P2pp3/8/4P3/1PPP1PPP/RNBQKBNR b KQkq - 0 3s -%#c193359423698173sA00enWare OpeningWare Gambitrnbqkbnr/ppp2ppp/8/P2pp3/8/8/1PPPPPPP/RNBQKBNR w KQkq - 0 3s -%#44f91780bfbdcf55UA00enWare OpeningWare Gambitrnbqkbnr/pppp1ppp/8/P3p3/8/8/1PPPPPPP/RNBQKBNR b KQkq - 0 2 B + -777096d4f3ea595f_A00enVan Geet OpeningNovosibirsk Variationr1bqkbnr/pp1ppppp/2n5/8/7Q/2N5/PPP1PPPP/R1B1KBNR b KQkq - 2 4 --7 17ac05ad62097b82A00enVan Geet OpeningNovosibirsk Variationr1bqkbnr/pp1ppppp/2n5/8/3Q4/2N5/PPP1PPPP/R1B1KBNR w KQkq - 1 4 --7bc41dd4f7398de81A00enVan Geet OpeningNovosibirsk Variationrnbqkbnr/pp1ppppp/8/8/3Q4/2N5/PPP1PPPP/R1B1KBNR b KQkq - 0 3 --7c1f6ca8b470931bcA00enVan Geet OpeningNovosibirsk Variationrnbqkbnr/pp1ppppp/8/8/3p4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3 --7 9ee870be3afd587azA00enVan Geet OpeningNovosibirsk Variationrnbqkbnr/pp1ppppp/8/2p5/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 0 2  - -5 d6eba3c22f4f67acA00enVan Geet OpeningSicilian Two Knightsr1bqkbnr/pp1ppppp/2n5/8/3N4/2N5/PPP1PPPP/R1BQKB1R b KQkq - 0 4 --5 b17ffe9f3e7ef582A00enVan Geet OpeningSicilian Two Knightsr1bqkbnr/pp1ppppp/2n5/8/3p4/2N2N2/PPP1PPPP/R1BQKB1R w KQkq - 0 4 --5ee6144aa438a9c44DA00enVan Geet OpeningSicilian Two Knightsr1bqkbnr/pp1ppppp/2n5/2p5/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 0 3 --5 2b546b005243b106A00enVan Geet OpeningSicilian Two Knightsr1bqkbnr/pp1ppppp/2n5/2p5/8/2N2N2/PPPPPPPP/R1BQKB1R w KQkq - 2 3 --5 80b9b3e243d21405A00enVan Geet OpeningSicilian Two Knightsrnbqkbnr/pp1ppppp/8/2p5/8/2N2N2/PPPPPPPP/R1BQKB1R b KQkq - 1 2 IQ  w o g _ W O G ? 7 / '    Z~vnf^VNF>6.&Mxph`XPH@80( ypg_xph`XPH@80( 2)ulxph`XPH@80(   { s k c [ S K C ; 3 + #    D } u m e ] U M E = 5 - %    } u m e ] U M E = 5 - $   y p g ^ U L C : 1 ( V; ~cQ    \TLD<4,$ |sjaXOH@80( xph`XPH@8/&q84zbLJ=`\ E]""~zzzywpmjbVb]XTROlIvECY;3E(!E O  lf<}xnj^9ZNaIFAD@>6,"spL? M)ulK~u}|*u}t$eaaSQLKjIF:<9*'Y"! eB;5>1,+[(.hZ  S OM yFd@(' 0we:~~w~}}}z|x~xnwvqqRokj?h5ffYXVVSYOMKJ=(::q3!,,*( dK*sV~Iy2rixfdYTROC;-d,*'B&T}{f}{rnfeBcs\ POIFD?->4>.)   t Z  f  '}zwwtrcrqmb@a`f^YQOK@ ===9+#U> ""] 1 J DH|DDy.7 - ;-655400e81d1cb05c\D21enQueen's Gambit AcceptedGunsberg Defensernbqkbnr/pp2pppp/8/2p5/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4p - - e1d63fbffd042d09 D32enTarrasch Defensernbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4{ - ;) 5c49dae4afb967e2D35enQueen's Gambit DeclinedNormal Defensernbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4u - 7+56ac851dae3c0853SD70enNeo-Grünfeld DefenseGoglidze Attackrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5P2/PP2P1PP/RNBQKBNR w KQkq - 0 4 1 - ;-51d220b5057b43fdD22enQueen's Gambit AcceptedAlekhine Defensernbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4w+ - ; d8cbe5b34fa1fab7D23enQueen's Gambit Acceptedrnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4}% - )1f0bd64f2e2d8a9f7D30enFrench DefenseDiemer-Duhm Gambitrnbqkbnr/ppp2ppp/4p3/8/2PPp3/8/PP3PPP/RNBQKBNR w KQkq - 0 4$ -)13837fbfb2b2119a7D30enFrench DefenseDiemer-Duhm Gambitrnbqkbnr/ppp2ppp/4p3/3p4/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3  - ;O c125cbeb5700ceedD30enQueen's Gambit DeclinedTarrasch Defense, Pseudo-Tarraschrnbqkbnr/pp3ppp/4p3/2pp4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4   - ;1 d5501fe2e563dea8D31enQueen's Gambit DeclinedJanowski Variationrnbqkbnr/1pp2ppp/p3p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4  - /9 95dd03fe7583f5cfD31enSemi-Slav DefenseAccelerated Move Orderrnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 - ;K 136b9dfec8e88ae5D31enQueen's Gambit DeclinedCharousek (Petrosian) Variationrnbqk1nr/ppp1bppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4  - ;-6ccea701fcc091efD31enQueen's Gambit DeclinedAlapin Variationrnbqkbnr/p1p2ppp/1p2p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4  -;- e9a485156014dfc9D31enQueen's Gambit DeclinedAlapin Variationrnbqkbnr/p1pp1ppp/1p2p3/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 t  i0 W G & \=P0L_M -9Edf83abbad7b76174tD06enQueen's Gambit RefusedMarshall Defense, Tan Gambitrnbqkb1r/ppp1pppp/5n2/3P4/3P4/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 + 9- 83bfdf059cefdc6D07enQueen's Gambit RefusedChigorin Defenser1bqkbnr/ppp1pppp/2n5/8/2pP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 G - /?6ac9b6948632a969iD02enQueen's Pawn GameZilbermints Countergambitrnbqkb1r/p1p1pppp/5n2/1p1p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 F +/? acddc811d9f1454TD02enQueen's Pawn GameZilbermints Countergambitrnbqkb1r/ppp1pppp/5n2/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3A - /I7abc580c5c53e961aD03enQueen's Pawn GameTorre Attack, Gossip Variationrnbqkb1r/ppp1pppp/8/3p2B1/3Pn3/5N2/PPP1PPPP/RN1QKB1R w KQkq - 4 4 ; - /Oa90047c89595f6d0D03enQueen's Pawn GameTorre Attack, Grünfeld Variationrnbqkb1r/ppp1pp1p/5np1/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4 5 - /=a8da6899cd2a3e7azD04enQueen's Pawn GameColle System, Anti-Collern1qkb1r/ppp1pppp/5n2/3p1b2/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 1 4 n/ - % 5db4f32662eda7a5D05enColle Systemrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4) - 9W39f27a1428f06a09 D06enQueen's Gambit RefusedAustrian Defense, Gusev Countergambitrnbqkb1r/pp2pppp/5n2/2pP4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 1 4( -9W621c4ee1850a2b9fD06enQueen's Gambit RefusedAustrian Defense, Gusev Countergambitrnbqkbnr/pp2pppp/8/2pP4/3P4/8/PP2PPPP/RNBQKBNR b KQkq - 0 3<# - 9Wf1b89d9208e74209 D06enQueen's Gambit RefusedAustrian Attack, Salvio Countergambitrnbqkbnr/pp2pppp/8/2P5/2Pp4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4" -9W13d5f7fcc4d868eeD06enQueen's Gambit RefusedAustrian Attack, Salvio Countergambitrnbqkbnr/pp2pppp/8/2Pp4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 - 9E 4df94655a077b2cfD06enQueen's Gambit RefusedMarshall Defense, Tan Gambitrnbqkb1r/pp2pppp/2p2n2/3P4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4   Q / 5 &k            X|w - )10fd4254dfedaf8bC65enRuy LopezBerlin Defenser1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 q - ] e862b2f38cf1198bD00enBlackmar-Diemer, Lemberger Countergambitrnbqkb1r/ppp2ppp/5n2/3pp3/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4k - q 13bfef17a14dc04aJD00enBlackmar-Diemer Gambit Declined, Grosshans Defensern1qkbnr/pppbpppp/8/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4j -q f17e11457b17107b{D00enBlackmar-Diemer Gambit Declined, Grosshans Defensernbqkbnr/ppp1pppp/8/8/3Pp3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3 2'e - 9) 726778cbccf219f6D00enBlackmar-Diemer GambitZeller Defensern1qkbnr/ppp1pppp/8/5b2/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4_ - /) dfadf4e019c346aeD00enQueen's Pawn GameHübsch Gambitrnbqkb1r/ppp1pppp/8/3p4/3Pn3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 zY - 9 e35e8949f3fb8ef2D01enRichter-Veresov Attackrn1qkb1r/ppp1pppp/5n2/3p1bB1/3P4/2N5/PPP1PPPP/R2QKBNR w KQkq - 2 4q|S - /G 5a4fac58f6570a85D01enQueen's Pawn GameVeresov Attack, Boyce Defensernbqkb1r/ppp1pppp/8/3p2B1/3Pn3/2N5/PPP1PPPP/R2QKBNR w KQkq - 2 4M - ;3f5522377fa792b73sD02enQueen's Gambit AcceptedRosenthal Variationrnbqkbnr/ppp2ppp/4p3/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 L -;3 27541a45a847c590D02enQueen's Gambit AcceptedRosenthal Variationrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3 K -;3 ab778561eb486e97D02enQueen's Gambit AcceptedRosenthal Variationrnbqkbnr/ppp2ppp/4p3/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3 Zlkqm~ v | ksZZZPFU - %; cc037fc78184eb99C50enItalian GameSchilling-Kostic Gambitr1bqkbnr/pppp1ppp/8/4p3/2BnP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 }! - +cb50867ce6a31197C60enRuy LopezBrentano Gambitr1bqkbnr/pppp1p1p/2n5/1B2p1p1/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 - 1a2a725fa09987c56VC60enRuy LopezFianchetto Defenser1bqkbnr/pppp1p1p/2n3p1/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4y - '755cca1cc99e65a0C60enRuy LopezCozio Defenser1bqkb1r/ppppnppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4y - ) 9c6e1a40cc53aebcC61enRuy LopezBird Variationr1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4{ - -72a9e0c0a06fa770pC62enRuy LopezSteinitz Defenser1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4~ - 1df7c1038cc9fc3c3C63enRuy LopezSchliemann Defenser1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4} - 3e60e32fab825049eC64enRuy LopezClassical Variationr1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4~{ - %+8f1175bf814886e6C50enItalian GameRousseau Gambitr1bqkbnr/pppp2pp/2n5/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4qu - % b663577df5f241bbC50enGiuoco Pianor1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4o + %/fb260c9f56b07a9C50enItalian GameHungarian Defenser1bqk1nr/ppppbppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4i - %=89895840a814e22d-C50enItalian GameAnti-Fried Liver Defenser1bqkbnr/pppp1pp1/2n4p/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4c - %3409027d3923aeaaeC55enItalian GameTwo Knights Defenser1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4] - 3cd09c360118be28dC60enRuy LopezBulgarian Variationr1bqkbnr/1ppp1ppp/2n5/pB2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4mW -  99e48752953716c1C60enRuy Lopezr1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4Q - 5207a3fb18c945986C60enRuy LopezRotary-Albany Gambitr1bqkbnr/p1pp1ppp/1pn5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4xK - + 1e045c54df2b4c17C60enRuy LopezPollock Defenser1bqkbnr/pppp1ppp/8/nB2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4zE - / e0feae4363864b1eC60enRuy LopezRetreat Variationrnbqkbnr/pppp1ppp/8/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4? - 7ce7954b5eec3a03b;C60enRuy LopezSpanish Countergambitr1bqkbnr/ppp2ppp/2n5/1B1pp3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 49 - 5d0eca9d1b32b4077wC60enRuy LopezVinogradov Variationr1b1kbnr/ppppqppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 43 - 3874670e848fcf962bC60enRuy LopezNürnberg Variationr1bqkbnr/pppp2pp/2n2p2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4{- - )82521fa739e0263f?C60enRuy LopezAlapin Defenser1bqk1nr/pppp1ppp/2n5/1B2p3/1b2P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4|' - -5fdf054eb8bc428cC60enRuy LopezLucena Variationr1bqk1nr/ppppbppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 $ z D : t]Q - 7+1735d9356be9d299C46enThree Knights OpeningWinawer Defenser1bqkbnr/pppp2pp/2n5/4pp2/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4z - 7 4a1bd6aa9e963765eC46enThree Knights Openingr1bqk1nr/pppp1ppp/2n5/4p3/1b2P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 4 4 - 7-6aeeecf7aeee6d0c C46enThree Knights OpeningSteinitz Defenser1bqkbnr/pppp1p1p/2n3p1/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4w - / d8b48b59789bbed1C46enFour Knights Gamer1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 4 4|a - %+ 9d6067001e67993e>C42enRussian GameStafford Gambitr1bqkb1r/pppp1ppp/2n2n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4 o[ + - f372983dd8e7550PC42enPetrov's Defensernbqkb1r/ppp2ppp/3p1n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 4zU - %/8b3af1bb09219b2e.C42enRussian GameDamiano Variationrnbqkb1r/pppp1ppp/8/4N3/4n3/8/PPPP1PPP/RNBQKB1R w KQkq - 0 4O - %U c89146a726f5fa6foC43enRussian GameModern Attack, Symmetrical Variationrnbqkb1r/ppp2ppp/5n2/3pp3/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 rI - ' d6856e317e5aa05c\C43enPetrovModern Attackrnbqkb1r/pppp1ppp/5n2/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4C - %U f04c2aeabcf6135aZC43enRussian GameModern Attack, Symmetrical Variationrnbqkb1r/pppp1ppp/8/4p3/3Pn3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 = - -99a78390f797b5fc6C44enPonziani OpeningPonziani Countergambitr1bqkbnr/pppp2pp/2n5/4pp2/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 0 47 - -51adb2c790d58de89C44enPonziani OpeningRomanishin Variationr1bqk1nr/ppppbppp/2n5/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 41 - -+3058e32b7c7af9a5C44enPonziani OpeningRéti Variationr1bqkb1r/ppppnppp/2n5/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 4 + - -955f96b636a09338eC44enPonziani OpeningJaenisch Counterattackr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2P2N2/PP1P1PPP/RNBQKB1R w KQkq - 1 4z% - #+ 73a52408ff286bc0C44enScotch GameLolli Variationr1bqkbnr/pppp1ppp/8/4p3/3nP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4k - # 26868226c23144c9C44enScotch Gamer1bqkbnr/pppp1ppp/2n5/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4 tB/ n @ ) - ttttttttiY/ - -O bf03722d51e58d8fC40enKing's Pawn GameGunderam Defense, Gunderam Gambitrnb1kbnr/ppppq1pp/8/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 - -+ cd6e38751ff96c83C41enPhilidor DefensePhilidor Gambitrn1qkbnr/pppb1ppp/3p4/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 4 - -1b4d1cca501d8a8a7C41enPhilidor DefenseExchange Variationrnbqkbnr/ppp2ppp/3p4/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4y - -9 bbc0a0be7b2b916clC41enPhilidor DefensePhilidor Countergambitrnbqkbnr/ppp3pp/3p4/4pp2/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4s - -77441f2d26859fd24$C41enPhilidor DefenseNimzowitsch Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 4m - -3 1d463b3c42a16a88C41enPhilidor DefenseLopez Countergambitrnbqkbnr/ppp3pp/3p4/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4Osg - - 9de52e4a3682ebc7C41enPhilidor Defensernbqk1nr/ppp1bppp/3p4/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4. --O 2b6c14b4ef6da051QC40enKing's Pawn GameGunderam Defense, Gunderam Gambitrnb1kbnr/ppppqppp/8/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3 y) - )I44f8c7480b749ed8C40enLatvian GambitMayet Attack, Strautins Gambitrnbqkbnr/p1pp2pp/8/1p2pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 " # - )G7f1299a83d236273sC40enLatvian GambitMayet Attack, Morgado Defensernbqkb1r/pppp2pp/5n2/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4{ - )) 52e1356c0d15f576vC40enLatvian GambitFraser Defenser1bqkbnr/pppp2pp/2n5/4Np2/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4y -))f90ced8e1c845075uC40enLatvian GambitFraser Defensernbqkbnr/pppp2pp/8/4Np2/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3{ - )+62f332feddb8fe1fC40enLatvian GambitGreco Variationrnb1kbnr/ppppq1pp/8/4Np2/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4 - -Q 6b9317ae79af322b+C40enKing's Pawn GameBusch-Gass Gambit, Chiodini Gambitr1bqk1nr/pppp1ppp/2n5/2b1N3/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4 --Q c07ecf4c683e9728(C40enKing's Pawn GameBusch-Gass Gambit, Chiodini Gambitrnbqk1nr/pppp1ppp/8/2b1N3/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3 - -- 1c4cbd7a250b517e~C41enPhilidor DefenseHanham Variationr1bqkbnr/pppn1ppp/3p4/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 1 4 S~   q N 2GvSSSSxnn   - } d486b8437f78f058XC33enKing's Gambit Accepted, Bishop's Gambit, Maurian Defenser1bqkbnr/pppp1ppp/2n5/8/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 2 4; - +75e936adb72ac0b4bKC40enElephant GambitPaulsen Countergambitrnbqkbnr/ppp2ppp/8/3P4/4p3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 4 - y ed118d4e192986e0C33enKing's Gambit Accepted, Bishop's Gambit, Lopez Defensernbqkbnr/pp1p1ppp/2p5/8/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 4 - 9Ofa0142b5f23d1b7d}C33enKing's Gambit AcceptedBishop's Gambit, Bledow Variationrnbqkbnr/ppp2ppp/8/3p4/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 4 - } eb040638d0617885C33enKing's Gambit Accepted, Bishop's Gambit, Gianutio Gambitrnbqkbnr/pppp2pp/8/5p2/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 4 -  ff28907cfa5daad1C33enKing's Gambit Accepted, Bishop's Gambit, Anderssen Defensernbqkbnr/pppp1p1p/8/6p1/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 4} - 9O4124dc1cd560dee6C33enKing's Gambit AcceptedBishop's Gambit, Steinitz Defensernbqkb1r/ppppnppp/8/8/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 2 4w - y 24855454c31314cdC33enKing's Gambit Accepted, Bishop's Gambit, Cozio Defensernbqkb1r/pppp1ppp/5n2/8/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 2 4q - [ 6c51e09d3fdd47c3C34enKing's Gambit Accepted, MacLeod Defenser1bqkbnr/pppp1ppp/2n5/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4 k - [ fe06ae1efc34abadC34enKing's Gambit Accepted, Fischer Defensernbqkbnr/ppp2ppp/3p4/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 e - i 53d35ee690c4cf1eC34enKing's Gambit Accepted, Gianutio Countergambitrnbqkbnr/pppp2pp/8/5p2/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 _ - 95 47ffc8a2baf81d4aJC34enKing's Gambit AcceptedKing Knight's Gambitrnbqkbnr/pppp1p1p/8/6p1/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4Y - s f9f384c295c5697d}C34enKing's Gambit Accepted, Bonsch-Osmolovsky Variationrnbqkb1r/ppppnppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4S - _ 9c520c8a83b6a356VC34enKing's Gambit Accepted, Schallopp Defensernbqkb1r/pppp1ppp/5n2/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4M - Y 554b7319b998abd5C34enKing's Gambit Accepted, Becker Defensernbqkbnr/pppp1pp1/7p/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4G - a d3704b90e4e74e51QC35enKing's Gambit Accepted, Cunningham Defensernbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4A - Y 42d61a6bb298ace6C36enKing's Gambit Accepted, Modern Defensernbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4lE: -+7719557b540a9d4bdC40enElephant GambitPaulsen Countergambitrnbqkbnr/ppp2ppp/8/3Pp3/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3~5 - ++ d5cd3a379fb30599C40enElephant GambitMaróczy Gambitrnbqk1nr/ppp2ppp/3b4/3Pp3/8/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 4 T "% ;  J""""hTe F Q - 'a73f61836d05c08ceC30enKing's GambitPanteldakis Countergambit, Greco Variationrnb1kbnr/pppp2pp/8/4pP2/5P1q/8/PPPP2PP/RNBQKBNR w KQkq - 1 4P -'a8df1bcc18b6a80300C30enKing's GambitPanteldakis Countergambit, Greco Variationrnbqkbnr/pppp2pp/8/4pP2/5P2/8/PPPP2PP/RNBQKBNR b KQkq - 0 3 vK - 'g20ecf89a41586ab3C30enKing's GambitPanteldakis Countergambit, Schiller's Defensernbqk1nr/pppp2pp/8/2b1pP2/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 1 4E - o 1e75381f3073c2c1C30enKing's Gambit Declined, Soller-Zilbermints Gambitr1bqkbnr/pppp2pp/2n2p2/4P3/4P3/8/PPPP2PP/RNBQKBNR w KQkq - 1 4D -o b598e0fd21e267c2C30enKing's Gambit Declined, Soller-Zilbermints Gambitrnbqkbnr/pppp2pp/5p2/4P3/4P3/8/PPPP2PP/RNBQKBNR b KQkq - 0 3C -o 3907e85e4d8e9356VC30enKing's Gambit Declined, Soller-Zilbermints Gambitrnbqkbnr/pppp2pp/5p2/4p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3? + k 368b6674105f01dC30enKing's Gambit Declined, Senechaud Countergambitrnbqk1nr/pppp1p1p/8/2b1p1p1/4PP2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4> -k 832b46bad5b10f97C30enKing's Gambit Declined, Senechaud Countergambitrnbqk1nr/pppp1ppp/8/2b1p3/4PP2/5N2/PPPP2PP/RNBQKB1R b KQkq - 2 3 (9 -  c59d2ba1461e5bb2C31enKing's Gambit, Falkbeer Countergambit, Nimzowitsch-Marshall Countergambitrnbqkbnr/pp3ppp/2p5/3Pp3/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 0 4 W3 - u 78e1fb2003db57ffC31enKing's Gambit, Falkbeer Countergambit, Staunton Linernbqkbnr/ppp2ppp/8/3P4/4pP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 4- - y be6dfcd000118fddC31enKing's Gambit, Falkbeer Countergambit, Modern Transferrnbqkbnr/ppp2ppp/8/3P4/5p2/8/PPPP2PP/RNBQKBNR w KQkq - 0 4' - s fafa8215fbec628aC31enKing's Gambit, Falkbeer Countergambit, Miles Gambitrnbqk1nr/ppp2ppp/8/2bPp3/5P2/8/PPPP2PP/RNBQKBNR w KQkq - 1 4T! -  1f6f0ab4f544e866fC33enKing's Gambit Accepted, Bishop's Gambit, Kieseritzky Gambitrnbqkbnr/p1pp1ppp/8/1p6/2B1Pp2/8/PPPP2PP/RNBQK1NR w KQkq - 0 4;  U .  ~ obqqqqqqqqqq^I { - #;34c6a4e59cfce8c0C25enVienna GameZhuravlev Countergambitrnbqk2r/pppp1ppp/5n2/4p3/1b2P1Q1/2N5/PPPP1PPP/R1B1KBNR w KQkq - 4 47 + #S2cf62636258646bkC26enVienna GameStanley Variation, Reversed Spanishrnbqk2r/pppp1ppp/5n2/4p3/1bB1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4+{ - -)ab8a6170b2021174tC26enBishop's OpeningHorwitz Gambitrnbqkb1r/p1pp1ppp/5n2/1p2p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4 lu - # 7639453c2f780b5aZC27enVienna Gamernbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4o - #a6063d387383e094aJC28enVienna GameStanley Variation, Three Knights Variationr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4n - #a3b8de77295c448dcC28enVienna GameStanley Variation, Three Knights Variationr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3i - #= d041e05484a90940@C29enVienna GameVienna Gambit, Main Linernbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4 Ec - W 11b4bc9ab09a6dc9C30enKing's Gambit Declined, Miles Defenser1bqkbnr/pppp2pp/2n5/4pp2/4PP2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4b -W 85dbda030e124017C30enKing's Gambit Declined, Miles Defenser1bqkbnr/pppp1ppp/2n5/4p3/4PP2/5N2/PPPP2PP/RNBQKB1R b KQkq - 2 3v] + o 5982ade9aa6bf9dC30enKing's Gambit Declined, Zilbermints Double Gambitr1bqkbnr/pppp1p1p/2n5/4p1p1/4PP2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4W - W ba9dac8cf9a97772rC30enKing's Gambit Declined, Keene Defensernb1kbnr/ppppqppp/8/4p3/4PP2/6P1/PPPP3P/RNBQKBNR w KQkq - 1 4 [d%xph_VMD;2) (7{skc[SKC;3+#  w%@ o g _ W O G ? 7 / '      w n e \ S J A 8 / & ^U1   } u m e ] U M E = 5 , #    CI y q i a Y Q I A 9 1 ) !    | s j a X OR. G ? 7 / '    wog_WOG?7/& g yqiaYQIA91)! {ri`L:XPH@80( LC:1yp@)! vmd[lpX|wg`E<87'FvolkipgcXV(UIE@x5,)_(-! W 1B&}|0zwppmDi@a`_\XTBO=MEEQ4b,+x)$N"7!*.nStg& >N}}}r|~| zybymEkkiaa(_WlU6PeKHF*A=<5I&Z G*Mqh#~vvFu~s0oml%icg`^\YV'UZSQ"OED861)~&p{ * 0f^uf~~d~<|Nxsbigr^ UQrQ+LHA3Q211 0%$"  jVe=- W}|von5iqeb7a^X]UcNML@6B01enScandinavian DefenseMarshall Variationrnbqkb1r/ppp1pppp/8/3n4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4s - 5/ 57e6fb0d7c16b329)B01enScandinavian DefenseRichter Variationrnbqkb1r/ppp1pp1p/5np1/3P4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4m - -Y 128a72b1a3725d42BB02enAlekhine DefenseScandinavian Variation, Geschev Gambitrnbqkb1r/pp2pppp/2p2n2/3P4/8/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 4l --Y 80f09f5ed4b28ef9B02enAlekhine DefenseScandinavian Variation, Geschev Gambitrnbqkb1r/ppp1pppp/5n2/3P4/8/2N5/PPPP1PPP/R1BQKBNR b KQkq - 0 3g - -I ad055d6c543d94e8B02enKing's Pawn GameClam Variation, Radisch Gambitrnbqk2r/pppp1ppp/5n2/2b1p3/4PP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 4 f )-I 1819379e0f7e6bkB02enKing's Pawn GameClam Variation, Radisch Gambitrnbqkb1r/pppp1ppp/5n2/4p3/4PP2/3P4/PPP3PP/RNBQKBNR b KQkq - 0 3& }}t\ ( xxxxx| p }| |}' + '- 8ed9412f9302aecA84enDutch DefenseBladel Variationrnbqkb1r/ppppp2p/6pn/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4~& -'- 89610bf643b24795A84enDutch DefenseBladel Variationrnbqkbnr/ppppp2p/6p1/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3{% -'-72f613548150c54cLA84enDutch DefenseBladel Variationrnbqkbnr/ppppp2p/6p1/5p2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3c - 1115f7f52e4ed2f976vA53enOld Indian DefenseJanowski Variationrn1qkb1r/ppp1pppp/3p1n2/5b2/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4] - 131c9694ea6ad208cdA54enOld Indian DefenseUkrainian Variationrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4~W - )/ bb26132cedd4f70c A56enBenoni DefenseWeenink Variationrnbqkb1r/pp1p1ppp/4pn2/2P5/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4}V -)/cd51e11df5f6675e^A56enBenoni DefenseWeenink Variationrnbqkb1r/pp1ppppp/5n2/2P5/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3 ~Q - )- 310016ff5db4ef02A56enBenoni DefenseHromádka Systemrnbqkb1r/pp2pppp/3p1n2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4|P +)- 8ba809e8fcca66foA56enBenoni DefenseHromádka Systemrnbqkb1r/pp1ppppp/5n2/2pP4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3K - )5 4df3cd0a16f41cd0A56enBenoni DefenseCzech Benoni Defensernbqkb1r/pp1p1ppp/5n2/2pPp3/2P5/8/PP2PPPP/RNBQKBNR w KQkq e6 0 4oE - + 32b2cc013d852b95A56enVulture Defensernbqkb1r/pp1ppppp/8/2pP4/2P1n3/8/PP2PPPP/RNBQKBNR w KQkq - 1 4k? - % 68beea8b14611b52RA57enBenko Gambitrnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4~9 - )- 7ecd72af97ee363d=A60enBenoni DefenseModern Variationrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4 3 - 97 651177dcc59f3da5A80enBlackmar-Diemer GambitNetherlands Variationrnbqkbnr/ppp1p1pp/8/5p2/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4@- - '= 3c2d20b9c29f2f9cA81enDutch DefenseSemi-Leningrad Variationrnbqkb1r/ppppp2p/5np1/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR w KQkq - 0 4, -'= d59973e2b910bdd7A81enDutch DefenseSemi-Leningrad Variationrnbqkb1r/ppppp1pp/5n2/5p2/3P4/6P1/PPP1PPBP/RNBQK1NR b KQkq - 2 3+ -'= 6069509ff4fd65aeA81enDutch DefenseSemi-Leningrad Variationrnbqkb1r/ppppp1pp/5n2/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR w KQkq - 1 3   u s  ~!1@IFm~ - /) 4129f12eba188d52RA45enTrompowsky AttackBorg Variationrnbqkb1r/pppppp1p/8/6p1/3PnB2/8/PPP1PPPP/RN1QKBNR w KQkq - 0 4} -/)c16a01f32eac72d8A45enTrompowsky AttackBorg Variationrnbqkb1r/pppppppp/8/8/3PnB2/8/PPP1PPPP/RN1QKBNR b KQkq - 4 3{ - !+ 2467851b24f3c0a4A46enOld IndianCzech Variationrnbqkb1r/pp2pppp/2pp1n2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4 - 1/b4cea2c614b61df5A46enOld Indian DefenseTartakower-Indianrn1qkb1r/ppp1pppp/3p1n2/8/2PP2b1/5N2/PP2PPPP/RNBQKB1R w KQkq - 1 4 -1/ b61d68f45333131fA46enOld Indian DefenseTartakower-Indianrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3  - %]215e8fd0fd38f3faA46enTorre AttackClassical Defense, Nimzowitsch Variationrnbqkb1r/pppp1pp1/4pn1p/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R w KQkq - 0 4 5{ - #-944fd8737f52b15e^A47enIndian GameSchnepper Gambitrnbqkb1r/p1pp1ppp/1p3n2/4p3/3P4/2P2N2/PP2PPPP/RNBQKB1R w KQkq - 0 4}z -#-1e37d039ecb74968hA47enIndian GameSchnepper Gambitrnbqkb1r/p1pppppp/1p3n2/8/3P4/2P2N2/PP2PPPP/RNBQKB1R b KQkq - 0 3 u - -5782ea9f4c034f9f3A51enBudapest DefenseFajarowicz Variationrnbqkb1r/pppp1ppp/8/4P3/2P1n3/8/PP2PPPP/RNBQKBNR w KQkq - 1 4t --54226e56b727d7409 A51enBudapest DefenseFajarowicz Variationrnbqkb1r/pppp1ppp/5n2/4P3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3no - - df05be0d7f37e565eA52enBudapest Defensernbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4yi + !+ 494714f8ef72340@A53enOld IndianCzech Variationrnbqkb1r/pp2pppp/2pp1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4{h -!+ 96ee9ca0f937f0fbA53enOld IndianCzech Variationrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 , \]|G7&LF -#A3697% ~ - )) 87e2492eccc9c6d8A43enBenoni DefenseHawk Variationrnbqkb1r/pp1ppppp/5n2/3P4/2p5/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 4j - # a8b2b82ccb2440afA44enSemi-Benonirnbqkbnr/pp3ppp/3p4/2pPp3/4P3/8/PPP2PPP/RNBQKBNR w KQkq - 0 4j -# 91082e4d195c09c2A44enSemi-Benonirnbqkbnr/pp1p1ppp/8/2pPp3/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3p= - ) 9408c6b8d405e88cA41enModern Defensernbqk1nr/ppp1ppbp/3p2p1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4n< -) adb250d9067da1e1A41enModern Defensernbqk1nr/ppppppbp/6p1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3k; -) 5625487bc49f23388A41enModern Defensernbqk1nr/ppppppbp/6p1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3l: -) e69975cd3fd8e892A41enModern Defensernbqkbnr/pppppp1p/6p1/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 7 -  )E f4eef6d70a2c1501A43enBenoni DefenseOld Benoni, Schmid Variationrnbqkbnr/pp2pp1p/3p2p1/2pP4/8/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 4 6 -)E 1d5aa58c71a3874aJA43enBenoni DefenseOld Benoni, Schmid Variationrnbqkbnr/pp2pppp/3p4/2pP4/8/2N5/PPP1PPPP/R1BQKBNR b KQkq - 1 3 u1 - ) a67d9243a753ae3e>A43enBenoni DefenseWoozlernb1kb1r/pp1ppppp/5n2/q1pP4/8/2N5/PPP1PPPP/R1BQKBNR w KQkq - 3 4u0 -) 7f0e07180e218fb1A43enBenoni DefenseWoozlernbqkb1r/pp1ppppp/5n2/2pP4/8/2N5/PPP1PPPP/R1BQKBNR b KQkq - 2 3 v + - )o c1884339d85e464aJA43enBenoni DefenseZilbermints-Benoni Gambit, Tamarkin Countergambitrnbqkbnr/pp1p1ppp/8/4p3/1P1p4/5N2/P1P1PPPP/RNBQKB1R w KQkq - 0 4w% - #% 3ff999593f88d168hA43enIndian GamePseudo-Benkornbqkb1r/p2ppppp/5n2/1ppP4/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 4 n]<  x ` 9. Dq -w 1e63b6f0c7a955366A40enEnglund Gambit Complex Declined, Diemer Counterattackrnbqk1nr/pppp1ppp/8/2bPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3I - #A8b9f9f1d1c6ed9f1A41enRat DefenseEnglish Rat, Lisbon Gambitr1bqkbnr/ppp2ppp/2np4/4P3/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 1 4H -#A207247ff0dff7cf2A41enRat DefenseEnglish Rat, Lisbon Gambitrnbqkbnr/ppp2ppp/3p4/4P3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3wC - #'74cad52b454a07faA41enEnglish RatPounds Gambitrn1qkbnr/ppp2ppp/3pb3/4P3/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 1 4 I.m - 9) 7e9da5de24c3f4ccA40enEnglund Gambit ComplexEnglund Gambitr1b1kbnr/ppppqppp/2n5/4P3/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 3 4l -9) e5627aaee5ff5aa6A40enEnglund Gambit ComplexEnglund Gambitr1bqkbnr/pppp1ppp/2n5/4P3/8/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 3k -9)3e0696588d193b9bA40enEnglund Gambit ComplexEnglund Gambitr1bqkbnr/pppp1ppp/2n5/4P3/8/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3 g - 99 29377ce7df144dd9A40enEnglund Gambit ComplexSoller Gambit Deferredr1bqkbnr/pppp2pp/2n2p2/4P3/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 4a - 9- 487f3ef52fcdb025%A40enEnglund Gambit ComplexFelbecker Gambitr1bqk1nr/pppp1ppp/2n5/2b1P3/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 3 4[ - 91 db2dc6135e76d11bA40enEnglund Gambit ComplexZilbermints Gambitr1bqkb1r/ppppnppp/2n5/4P3/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 3 4 U - 91 779531c8722b13b3A40enEnglund Gambit ComplexZilbermints Gambitr1bqkbnr/pppp1pp1/2n4p/4P3/8/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 4O - /Q7f9f011fb14025fdA40enQueen's Pawn GameVeresov Attack, Fianchetto Defensernbqk1nr/ppp1ppbp/6p1/3p4/3P4/2N2N2/PPP1PPPP/R1BQKB1R w KQkq - 0 4N -/Q faf5230b2d946bdbA40enQueen's Pawn GameVeresov Attack, Fianchetto Defensernbqk1nr/ppppppbp/6p1/8/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 3 3M +/Q 1623ba9ef76e902A40enQueen's Pawn GameVeresov Attack, Fianchetto Defensernbqk1nr/ppppppbp/6p1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3.  2. x [ K G ? ? ? ? ? ?dddx -#7 1ddd137af68b89c9A40enSlav IndianKudischewitsch Gambitrnbqkb1r/pp1ppppp/2p2n2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3v -#7 ca10b8ab187e6358XA40enSlav IndianKudischewitsch Gambitrnbqkbnr/pp1ppppp/2p5/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2ds - w 24631f4f771f60c2A40enEnglund Gambit Complex Declined, Diemer Counterattackrnb1k1nr/pppp1ppp/8/2bPp3/4P2q/8/PPP2PPP/RNBQKBNR w KQkq - 1 4r -w da64bbb82c29e83c :!c++h 4   - 'M 3aff09b23462353e>A09enRéti OpeningAdvance Variation, Michel Gambitrnbqkbnr/pp2pppp/8/2p5/1PPp4/5N2/P2PPPPP/RNBQKB1R w KQkq - 0 4  -'Mdc8ed81ccb253e43CA09enRéti OpeningAdvance Variation, Michel Gambitrnbqkbnr/ppp1pppp/8/8/1PPp4/5N2/P2PPPPP/RNBQKB1R b KQkq - 0 3^ - +ic094be02de144316A10enEnglish OpeningAnglo-Scandinavian Defense, Malvinas Variationrnb1kbnr/ppp1pppp/8/q7/8/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 4 -+i3ee3796d70f4f2b3A10enEnglish OpeningAnglo-Scandinavian Defense, Malvinas Variationrnb1kbnr/ppp1pppp/8/3q4/8/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 3 -+ic57461cfb216706ajA10enEnglish OpeningAnglo-Scandinavian Defense, Malvinas Variationrnb1kbnr/ppp1pppp/8/3q4/8/8/PP1PPPPP/RNBQKBNR w KQkq - 0 3  - )1 185a4d79bcfa6604A10enModern DefenseNeo-Modern Defensernbqk1nr/pppp1pbp/6p1/4p3/2PPP3/8/PP3PPP/RNBQKBNR w KQkq - 0 4} -)1922245332f1f9e322A10enModern DefenseNeo-Modern Defensernbqk1nr/ppppppbp/6p1/8/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3 -)1 57176a993ed6b370pA10enModern DefenseNeo-Modern Defensernbqk1nr/ppppppbp/6p1/8/2P1P3/8/PP1P1PPP/RNBQKBNR w KQkq - 1 3 h} - 'a881980574b64cebcA12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrn1qkbnr/pp2pppp/2p5/3p4/2P3b1/1P3N2/P2PPPPP/RNBQKB1R w KQkq - 1 4hw - +Q 28f65f00a61e3b97A13enEnglish OpeningAgincourt Defense, Catalan Defensernbqkbnr/pp3ppp/4p3/2pp4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 0 4v -+Q ce878eae595930eaA13enEnglish OpeningAgincourt Defense, Catalan Defensernbqkbnr/ppp2ppp/4p3/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3 ^F & S ? 2>1KBUQ - %U 8a58a142858b7153SA00enGrob OpeningZilbermints Gambit, Schiller Defensernbqkbnr/ppp1ppp1/8/7p/4p1P1/2N5/PPPP1P1P/R1BQKBNR w KQkq - 0 4Ou3 - /!c2423335b8ee84f0A04enZukertort OpeningThe Walrusr1bqkbnr/ppp2ppp/2p5/8/8/8/PPPPPPPP/RNBQKB1R w KQkq - 0 4v2 -/!ed54a721b65cb12e.A04enZukertort OpeningThe Walrusr1bqkbnr/pppp1ppp/2N5/8/8/8/PPPPPPPP/RNBQKB1R b KQkq - 0 3K - %746765f911f851c04A00enGrob OpeningRomford Countergambitrn1qkbnr/ppp1pppp/8/8/2Pp2b1/8/PP1PPPBP/RNBQK1NR w KQkq - 0 4 w0 -/!a964865f498cc0a1A04enZukertort OpeningThe Walrusrnbqkbnr/pppp1ppp/8/4N3/8/8/PPPPPPPP/RNBQKB1R b KQkq - 0 2yE - %' 251daebc095b65a1A00enGrob OpeningKeene Defensernbqkbnr/pp3ppp/2p5/3pp3/6P1/7P/PPPPPPB1/RNBQK1NR w KQkq - 0 4wD -%'b76743537e9bb61aA00enGrob OpeningKeene Defensernbqkbnr/ppp2ppp/8/3pp3/6P1/7P/PPPPPPB1/RNBQK1NR b KQkq - 1 3uC +%'297602e33766e63cA00enGrob OpeningKeene Defensernbqkbnr/ppp2ppp/8/3pp3/6P1/7P/PPPPPP2/RNBQKBNR w KQkq - 0 3vB -%'88ef6864a0939655UA00enGrob OpeningKeene Defensernbqkbnr/ppp1pppp/8/3p4/6P1/7P/PPPPPP2/RNBQKBNR b KQkq - 0 2 x1 +/!2895ebd581d65a2A04enZukertort OpeningThe Walrusr1bqkbnr/pppp1ppp/2n5/4N3/8/8/PPPPPPPP/RNBQKB1R w KQkq - 1 3? - %I9e41cd7a62714a53SA02enBird OpeningFrom's Gambit, Langheld Gambitrnbqkb1r/ppp2ppp/3P1n2/8/8/8/PPPPP1PP/RNBQKBNR w KQkq - 1 4> -%Ic5aff98fcf8b0bc5A02enBird OpeningFrom's Gambit, Langheld Gambitrnbqkbnr/ppp2ppp/3P4/8/8/8/PPPPP1PP/RNBQKBNR b KQkq - 0 3= -%I84707d9d22f184daA02enBird OpeningFrom's Gambit, Langheld Gambitrnbqkbnr/ppp2ppp/3p4/4P3/8/8/PPPPP1PP/RNBQKBNR w KQkq - 0 3}9 - %- f591821e8dd02c41AA03enBird OpeningLasker Variationrnbqkb1r/pp2pppp/5n2/2pp4/5P2/4PN2/PPPP2PP/RNBQKB1R w KQkq - 0 4}8 -%- 13e053b07297273cP"{ - )!5ea8f5f64b87c1e1C20enBarnes OpeningWalkerlingrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/5P2/PPPP2PP/RNBQK1NR b KQkq - 2 3aG -)7 aa45a7831101fedfC00enFrench DefenseTwo Knights Variationrnbqkbnr/ppp2ppp/4p3/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 l~C - )193cb6e92b241f0a6C01enFrench DefenseExchange Variationrnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3~> - )/d56d72226c3094c4C02enFrench DefenseAdvance Variationrnbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 39 - )1 ed7adcbdf2d31a90C03enFrench DefenseTarrasch Variationrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 34 - )/ 4f837c7daacc3079yC10enFrench DefensePaulsen Variationrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3y/ - 3 8a97f0e241dca63c  T 9*00000000lOKzm{\ - )' c71cdf33e914a92e.C00enFrench DefenseAlapin Gambitrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR b KQkq - 1 3 ~W - )5 e119c57d51ae70d3C00enFrench DefenseSchlechter Variationrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/3B4/PPP2PPP/RNBQK1NR b KQkq - 1 3}R - )) 6f70882900c8d39dC00enFrench DefensePerseus Gambitrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3zM - )' dfdabe50200bcd7azC00enFrench DefenseMorphy Gambitrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/7N/PPP2PPP/RNBQKB1R b KQkq - 1 3H - )751d2bf21d3e37c06C00enFrench DefenseTwo Knights Variationrnbqkbnr/ppp2ppp/4p3/3p4/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 3 - -)f049c8f168b86d3d=B50enSicilian DefenseDelayed Alapinrnbqkbnr/pp2pppp/3p4/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R b KQkq - 0 3qz - - 43a61fc3a9014ff9B50enSicilian Defensernbqkbnr/pp2pppp/3p4/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3u - -7 b54de1c6dd5cf1388B51enSicilian DefenseCanal-Sokolsky Attackrnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3p - )/ 77a02edaa29420b2C00enFrench DefensePelikan Variationrnbqkbnr/ppp2ppp/4p3/3p4/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 3o -)/ 8ab653d7bb051d3b;C00enFrench DefensePelikan Variationrnbqkbnr/ppp2ppp/4p3/3p4/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3 k - )S 3dfbc1246ef66860`C00enFrench DefenseHorwitz Attack, Papa-Ticulat Gambitrnbqkbnr/ppp2ppp/4p3/3p4/4P3/1P6/PBPP1PPP/RN1QKBNR b KQkq - 1 3j -)S fd872b21a36af48fC00enFrench DefenseHorwitz Attack, Papa-Ticulat Gambitrnbqkbnr/ppp2ppp/4p3/3p4/4P3/1P6/P1PP1PPP/RNBQKBNR w KQkq - 0 3 f - )Q 55e0868ec9231b1eC00enFrench DefenseBanzai-Leong Gambit, Pinova Gambitrnbqk1nr/pppp1ppp/4p3/4P3/1b6/8/P1PP1PPP/RNBQKBNR b KQkq - 0 3e -)Q 34999073cd3d3d7azC00enFrench DefenseBanzai-Leong Gambit, Pinova Gambitrnbqk1nr/pppp1ppp/4p3/8/1b2P3/8/P1PP1PPP/RNBQKBNR w KQkq - 0 3a - 1O6faa281c50d5af5d]C00enSt. George DefenseNew St. George, Three Pawn Attackrnbqkbnr/1ppp1ppp/p3p3/8/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3, `d # Q ' b.sCT - -We17837af571db867gB28enSicilian DefenseO'Kelly Variation, Kieseritzky Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/1P3N2/P1PP1PPP/RNBQKB1R b KQkq - 0 38 - -563ab2195d424d7a0B40enSicilian DefenseWing Gambit Deferredrnbqkbnr/pp1p1ppp/4p3/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R b KQkq - 0 3  - -=bf84aca1a2e2b402B40enSicilian DefenseDelayed Alapin Variationrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R b KQkq - 0 3 - -/457dcb1d319d1083B40enSicilian DefenseKramnik Variationrnbqkbnr/pp1p1ppp/4p3/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R b KQkq - 0 3 - -K2c6645c51e7e0e9fB50enSicilian DefenseWing Gambit, Deferred Variationrnbqkbnr/pp2pppp/3p4/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R b KQkq - 0 3 O - -Ic72b22572b26bf2e.B28enSicilian DefenseO'Kelly Variation, Wing Gambitrnbqkbnr/1p1ppppp/p7/2p5/1P2P3/5N2/P1PP1PPP/RNBQKB1R b KQkq - 0 3J - -M1b04af635de0dc8cB28enSicilian DefenseO'Kelly Variation, Venice Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/2P2N2/PP1P1PPP/RNBQKB1R b KQkq - 0 3E - -Me1fdc8dfce9f780d B28enSicilian DefenseO'Kelly Variation, Maróczy Bindrnbqkbnr/1p1ppppp/p7/2p5/2P1P3/5N2/PP1P1PPP/RNBQKB1R b KQkq - 0 3@ - -K c37a942ec90068deB28enSicilian DefenseO'Kelly Variation, Quiet Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/3P1N2/PPP2PPP/RNBQKB1R b KQkq - 0 3; - -M a8eb78519c59fe48HB28enSicilian DefenseO'Kelly Variation, Normal Systemrnbqkbnr/1p1ppppp/p7/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 36 - -M 1e5ed4028cb599a9B28enSicilian DefenseO'Kelly Variation, Aronin Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPPBPPP/RNBQK2R b KQkq - 1 31 - -K 4138ecba6d470b322B28enSicilian DefenseO'Kelly Variation, Réti Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/5NP1/PPPP1P1P/RNBQKB1R b KQkq - 0 3, - -[1f508a5f05a8e899B29enSicilian DefenseNimzowitsch Variation, Closed Variationrnbqkb1r/pp1ppppp/5n2/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3U' - -] 85be8400c3544c24$B29enSicilian DefenseNimzowitsch Variation, Advance Variationrnbqkb1r/pp1ppppp/5n2/2p1P3/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3" - -I 271aaf451eb51d56VB30enSicilian DefenseNyezhmetdinov-Rossolimo Attackr1bqkbnr/pp1ppppp/2n5/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3v - - d1f151406ae8a397B32enSicilian DefenseOpenr1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3 - -S45f8346da81fd0e9B40enSicilian DefenseFrench Variation, Westerinen Attackrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/1P3N2/P1PP1PPP/RNBQKB1R b KQkq - 0 3 X (z(s C D M:pTXc - -Y18d131ff31f2b509 B24enSicilian DefenseClosed Variation, Fianchetto Variationr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3 ^ - -C 93a8daf900f694dfB27enSicilian DefenseHyperaccelerated Fianchettornbqkbnr/pp1ppp1p/6p1/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3"Y - -O96494f594f7251d3B28enSicilian DefenseO'Kelly Variation, Yerevan Systemrnbqkbnr/1p1ppppp/p7/2p5/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 3  - -K7fd2156517a71e09 B20enSicilian DefenseWing Gambit, Abrahams Variationrnbqkbnr/pp1ppppp/8/8/1p2P3/8/PBPP1PPP/RN1QKBNR b KQkq - 1 3 - -O33b7f39c2bb44083B20enSicilian DefenseWing Gambit, Santasiere Variationrnbqkbnr/pp1ppppp/8/8/1pP1P3/8/P2P1PPP/RNBQKBNR b KQkq c3 0 3z - -'25023397068d6f52RB21enSicilian DefenseMorphy Gambitrnbqkbnr/pp1ppppp/8/8/3pP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3x --'fe66df616e6b0e6foB21enSicilian DefenseMorphy Gambitrnbqkbnr/pp1ppppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 { - -188bc27f9be1b01e9B21enSicilian DefenseSmith-Morra Gambitrnbqkbnr/pp1ppppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 3x| + -'370a26c77fa33e6B21enSicilian DefenseHalasz Gambitrnbqkbnr/pp1ppppp/8/8/3pPP2/8/PPP3PP/RNBQKBNR b KQkq - 0 3w - -/ c921f7b3c8b450b8B23enSicilian DefenseGrand Prix Attackr1bqkbnr/pp1ppppp/2n5/2p5/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 3 r - -W 20936171f90e60cfB23enSicilian DefenseClosed Variation, Chameleon Variationr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N5/PPPPNPPP/R1BQKB1R b KQkq - 3 3m - -G977a8b683950802c,B23enSicilian DefenseClosed Variation, Grob Attackr1bqkbnr/pp1ppppp/2n5/2p5/4P1P1/2N5/PPPP1P1P/R1BQKBNR b KQkq - 0 3yh - -c54b1b2c38418058XB23enSicilian DefenseClosedrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3{ Nn 1 - !  v*   sxT -%' 9c65e99bc9de392a*B10enSlav Def  L - /1b5dfa0ffbc013fefB10enCaro-Kann DefenseTwo Knights Attackrnbqkbnr/pp2pppp/2p5/3p4/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 3 G - /E d79bce28d1d04573sB10enCaro-Kann DefenseLabahn Attack, Double Gambitrnbqkbnr/pp2pppp/2p5/1P1p4/4P3/8/P1PP1PPP/RNBQKBNR b KQkq - 0 3 F -/E 3fd92107b0b3b02f/B10enCaro-Kann DefenseLabahn Attack, Double Gambitrnbqkbnr/pp2pppp/2p5/3p4/1P2P3/8/P1PP1PPP/RNBQKBNR w KQkq - 0 3 B - /K f0b7e15c721e9ad0B10enCaro-Kann DefenseLabahn Attack, Polish Variationrnbqkbnr/pp1p1ppp/2p5/4p3/1P2P3/8/PBPP1PPP/RN1QKBNR b KQkq - 1 3A -/K 30cb0b59bf82063f?B10enCaro-Kann DefenseLabahn Attack, Polish Variationrnbqkbnr/pp1p1ppp/2p5/4p3/1P2P3/8/P1PP1PPP/RNBQKBNR w KQkq - 0 3= - /- 7876dd7251145168hB10enCaro-Kann DefenseToikkanen Gambitrnbqkbnr/pp2pppp/2p5/3pP3/2P5/8/PP1P1PPP/RNBQKBNR b KQkq - 0 38 + /- 977c3639d315979yB12enCaro-Kann DefenseModern Variationrnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3 3 - /' 2311c0ed86f6eac7B12enCaro-Kann DefenseMieses Gambitrnbqkbnr/pp2pppp/2p5/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR b KQkq - 1 3. - //31606dfc03d2d72d-B12enCaro-Kann DefenseAdvance Variationrnbqkbnr/pp2pppp/2p5/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3) - /1 3ea89d30a7061e388B12enCaro-Kann DefenseMaróczy Variationrnbqkbnr/pp2pppp/2p5/3p4/3PP3/5P2/PPP3PP/RNBQKBNR b KQkq - 0 3$ - /177c6714cdda3b34fOB13enCaro-Kann DefenseExchange Variationrnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3r - / ab8e63a3c52e7390B15enCaro-Kann Defensernbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3  - /? adfde2bb8993f34fOB20enCaro-Kann DefenseEuwe Attack, Prins Gambitrnbqkbnr/pp2pppp/8/2pp4/4P3/1P6/PBPP1PPP/RN1QKBNR b KQkq - 1 3  -/? 6d8108be440f6fa0B20enCaro-Kann DefenseEuwe Attack, Prins Gambitrnbqkbnr/pp2pppp/8/2pp4/4P3/1P6/P1PP1PPP/RNBQKBNR w KQkq - 0 3  - -K7432ce4693770ca6B20enSicilian DefenseWing Gambit, Marshall Variationrnbqkbnr/pp1ppppp/8/8/1p2P3/P7/2PP1PPP/RNBQKBNR b KQkq - 0 3  --Kbfaeff60da3b82e6B20enSicilian DefenseWing Gambit, Marshall Variationrnbqkbnr/pp1ppppp/8/8/1p2P3/8/P1PP1PPP/RNBQKBNR w KQkq - 0 3   ! rlf I tiZ : - 3e 921956aea37f0528(B00enNimzowitsch DefenseScandinavian Variation, Bogoljubov Variationr1bqkbnr/ppp1pppp/2n5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 35 - 3) 1a86f5e0e0a79c7fB00enNimzowitsch DefenseHornung Gambitr1bqkbnr/ppp1pppp/2n5/3p4/3PP3/4B3/PPP2PPP/RN1QKBNR b KQkq - 1 30 + 3_ 8f758f16583a195B00enNimzowitsch DefenseScandinavian Variation, Advance Variationr1bqkbnr/ppp1pppp/2n5/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3+ - 3a dc942701f78aa7bcB00enNimzowitsch DefenseKennedy Variation, Linksspringer Variationr1bqkbnr/pppp1ppp/2n5/3Pp3/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3& - 3_ 8a16fd92786981b1B00enNimzowitsch DefenseLean Variation, Colorado Counter Acceptedr1bqkbnr/ppppp1pp/2n5/5P2/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3 Q - //d499373af89a0869iB10enCaro-Kann DefenseGoldman Variationrnbqkbnr/pp2pppp/2p5/3p4/4P3/2N2Q2/PPPP1PPP/R1B1KBNR b KQkq - 1 3 - 5-be52a85607992162bB01enScandinavian DefenseModern Variationrnbqkb1r/ppp1pppp/5n2/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3{ - -)7b5db6f277657c1fB02enAlekhine DefenseBuckley Attackrnbqkb1r/pppppppp/8/3nP3/8/N7/PPPP1PPP/R1BQKBNR b KQkq - 2 3} - -+872c7e0358d5d108B02enAlekhine DefenseSämisch Attackrnbqkb1r/pppppppp/8/3nP3/8/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 3 - -/f01d06f540ba38bcB02enAlekhine DefenseWelling Variationrnbqkb1r/pppppppp/8/3nP3/8/1P6/P1PP1PPP/RNBQKBNR b KQkq - 0 3~ - -+f098f985d938f8d6B02enAlekhine DefenseTwo Pawn Attackrnbqkb1r/pppppppp/8/3nP3/2P5/8/PP1P1PPP/RNBQKBNR b KQkq - 0 3 ~ - -Oa66505f8969ed3c0B02enAlekhine DefenseKrejcik Variation, Krejcik Gambitrnbqkb1r/pppppBpp/8/8/4n3/8/PPPP1PPP/RNBQK1NR b KQkq - 0 3} +-O7d655d47e7f71b5B02enAlekhine DefenseKrejcik Variation, Krejcik Gambitrnbqkb1r/pppppppp/8/8/2B1n3/8/PPPP1PPP/RNBQK1NR w KQkq - 0 3ny - - b98e490b8bfe7e93B03enAlekhine Defensernbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3{t - )' e596c2b5aef2b7ecB06enModern DefenseStandard Linernbqk1nr/ppppppbp/6p1/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3x? - %% 4794599808ef15e9B00enOwen DefenseSmith Gambitrn1qkbnr/pbpppppp/1p6/8/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 2 3v! - %! 4becf05f33908b5e^B00enLion DefenseLion's Jawrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/5P2/PPP3PP/RNBQKBNR b KQkq - 0 3{ - %) fe39fa98fbbc0512B00enPirc DefenseRoscher Gambitrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 2 3}o - )/378c80a2fe715e311B06enModern DefenseWestermann Gambitrnbqk1nr/ppppppbp/6p1/8/3PP3/8/PPPB1PPP/RN1QKBNR b KQkq - 2 3zj - )'7db26e3f4453e393B06enModern DefenseBishop Attackrnbqk1nr/ppppppbp/6p1/8/2BPP3/8/PPP2PPP/RNBQK1NR b KQkq - 2 3xe - )# 4b0c7bb55590f746FB06enModern DefenseWind Gambitrnbqk1nr/ppppppbp/6p1/8/3PP3/3B4/PPP2PPP/RNBQK1NR b KQkq - 2 3~` - )1e317a71a758108bcB06enModern DefenseThree Pawns Attackrnbqk1nr/ppppppbp/6p1/8/3PPP2/8/PPP3PP/RNBQKBNR b KQkq - 0 3n[ - % deca0ecc51b8e6f6B07enPirc Defensernbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3wV - %'dc3ae42544c35a4eNB10enSlav DefenseDiemer Gambitrnbqkbnr/pp2pppp/2p5/3p4/2PPP3/8/PP3PPP/RNBQKBNR b KQkq - 0 3 n W M xM$nnnnnnnnnn32pu -'M 326c51f38a462351QA80enDutch DefenseManhattan Gambit, Anti-Stonewallrnbqkbnr/ppp1p1pp/8/3p1p2/3P4/3Q4/PPP1PPPP/RNB1KBNR w KQkq - 0 3 q - 'G2df1e4502c9fc907A80enDutch DefenseManhattan Gambit, Anti-Modernrnbqkbnr/ppp1p1pp/3p4/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR b KQkq - 0 3 p -'G 8ebce586c4ea241aA80enDutch DefenseManhattan Gambit, Anti-Modernrnbqkbnr/ppp1p1pp/3p4/5p2/3P4/3Q4/PPP1PPPP/RNB1KBNR w KQkq - 0 3l - 'W623c8000e6c510388A80enDutch DefenseManhattan Gambit, Anti-Classical Linernbqkbnr/pppp2pp/4p3/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR b KQkq - 0 3k -'W c17181d60eb0fd25%A80enDutch DefenseManhattan Gambit, Anti-Classical Linernbqkbnr/pppp2pp/4p3/5p2/3P4/3Q4/PPP1PPPP/RNB1KBNR w KQkq - 0 3g - 'Mfdff216a85681221!A80enDutch DefenseManhattan Gambit, Anti-Leningradrnbqkbnr/ppppp2p/6p1/5p2/3P2P1/3Q4/PPP1PP1P/RNB1KBNR b KQkq - 0 3 f -'M 5eb220bc6d1dff3c - /) 8e9d6de036e2fef9B12enCaro-Kann DefenseMasi Variationrnbqkb1r/pp1ppppp/2p2n2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3 3FBX / u r 33eULD} - );b0e5c8135c22e5b0A40enPolish DefenseSpassky Gambit Acceptedrn1qkbnr/pbpppppp/8/1B6/3PP3/8/PPP2PPP/RNBQK1NR b KQkq - 0 3| -);979d966b05277e72rA40enPolish DefenseSpassky Gambit Acceptedrn1qkbnr/pbpppppp/8/1p6/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3~] -/+e95cf738bb1071a4A43enQueen's Pawn GameLiedmann Gambitrnbqkbnr/pp1ppppp/8/2p5/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2U{^ -/+b6424d0dc6e41862bA43enQueen's Pawn GameLiedmann Gambitrnbqkbnr/pp1ppppp/8/8/2Pp4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3Z - )9 8f1f409e3431dc2a*A43enBenoni DefenseBenoni-Staunton Gambitrnbqkbnr/pp1pp1pp/8/2pP1p2/4P3/8/PPP2PPP/RNBQKBNR b KQkq - 0 3{ -);270ddeef7775d1e9A40enPolish DefenseSpassky Gambit Acceptedrnbqkbnr/p1pppppp/8/1p6/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 20 x - k 202cbfaf95d3f255UA40enEnglund Gambit Declined, Reversed Mokele Mbembernbqkbnr/pppp1ppp/8/4N3/3Pp3/8/PPP1PPPP/RNBQKB1R b KQkq - 1 3 s - a 26708c96a6b8f61eA40enEnglund Gambit Declined, Reversed Brooklynrnbqkbnr/pppp1ppp/8/8/3Pp3/8/PPP1PPPP/RNBQKBNR b KQkq - 1 3~n - '- 190fca4dd0e76b2c,A40enDutch DefenseSenechaud Gambitrnbqkbnr/pppp2pp/4p3/5p2/3P1BP1/8/PPP1PP1P/RN1QKBNR b KQkq - 0 3}m -'- ba42cb9b389286311A40enDutch DefenseSenechaud Gambitrnbqkbnr/pppp2pp/4p3/5p2/3P1B2/8/PPP1PPPP/RN1QKBNR w KQkq - 0 3}l -'- 2e2dad02861aabefA40enDutch DefenseSenechaud Gambitrnbqkbnr/pppp1ppp/4p3/8/3P1B2/8/PPP1PPPP/RN1QKBNR b KQkq - 1 2i - -] 4b8ca503d560a070pA40enKangaroo DefenseKeres Defense, Transpositional Variationrnbqk1nr/pppp1ppp/4p3/8/1bPP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3d - )Q bbcd68ac2e3e03feA40enModern DefenseLizard Defense, Pirc-Diemer Gambitrnbqkb1r/pppppp1p/5np1/7P/3P4/8/PPP1PPP1/RNBQKBNR b KQkq - 0 3c -)Q adf742357a127b7d}A40enModern DefenseLizard Defense, Pirc-Diemer Gambitrnbqkb1r/pppppp1p/5np1/8/3P3P/8/PPP1PPP1/RNBQKBNR w KQkq - 1 3b -)Qf61976c0d7e83aebA40enModern DefenseLizard Defense, Pirc-Diemer Gambitrnbqkbnr/pppppp1p/6p1/8/3P3P/8/PPP1PPP1/RNBQKBNR b KQkq - 0 2}_ - /+1b6f0fbfe2bb90c6A43enQueen's Pawn GameLiedmann Gambitrnbqkbnr/pp1ppppp/8/8/2Pp4/4P3/PP3PPP/RNBQKBNR b KQkq - 0 3 U$ kd= UUUUUUUUUUUUUU * - +;d811da12c924b98cA18enEnglish OpeningMikenas-Carls Variationrnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 3 % - +=59296343be070524$A21enEnglish OpeningKing's English Variationrnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3 - +c50f5a393997da304A36enEnglish OpeningSymmetrical Variation, Fianchetto Variationr1bqkbnr/pp1ppppp/2n5/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3 - +3ccff966049b4b4daA22enEnglish OpeningCarls-Bremen Systemrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3  - +icb7e2dc07deee94aJA27enEnglish OpeningKing's English Variation, Three Knights Systemr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3 9 + +] 616753dc9731069iA30enEnglish OpeningSymmetrical Variation, Napolitano Gambitrnbqkb1r/pp1ppppp/5n2/2p5/1PP5/5N2/P2PPPPP/RNBQKB1R b KQkq - 0 3 -+] ace300916fc57c4dMA30enEnglish OpeningSymmetrical Variation, Napolitano Gambitrnbqkb1r/pp1ppppp/5n2/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 2 3 -+] f70d3464c23f3ddbA30enEnglish OpeningSymmetrical Variation, Napolitano Gambitrnbqkbnr/pp1ppppp/8/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2 - +C1d0f502cb0f2516bkA22enEnglish OpeningKing's English, Mazedonischrnbqkb1r/pppp1ppp/5n2/4p3/2P2P2/2N5/PP1PP1PP/R1BQKBNR b KQkq - 0 3 - +e 69d62f3b7e0c510fA31enEnglish OpeningSymmetrical Variation, Anti-Benoni Variationrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3u - +ca0f64f8425164791A34enEnglish OpeningSymmetrical Variation, Fianchetto Variationrnbqkb1r/pp1ppppp/5n2/2p5/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3 -+c 8c10f4c5c5c19fa9A34enEnglish OpeningSymmetrical Variation, Fianchetto Variationrnbqkb1r/pp1ppppp/5n2/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3`$ -+= 824d8fb5d6e16419A21enEnglish OpeningKing's English Variationrnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3    M V:eeeeeeeeeee W s H - 3) b6e5e4482ce90e9dA06enNimzo-Larsen AttackNorfolk Gambitrnbqkbnr/pp2pppp/8/2pp4/4P3/1P3N2/P1PP1PPP/RNBQKB1R b KQkq - 0 3G -3) 72e2e900c769b397A06enNimzo-Larsen AttackNorfolk Gambitrnbqkbnr/pp2pppp/8/2pp4/8/1P3N2/P1PPPPPP/RNBQKB1R w KQkq - 0 3& C - 5167521168b0ded8bbA08enKing's Indian AttackSicilian Variationrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3|> - '/720b98707a2ec8adA09enRéti OpeningPenguin Variationrnbqkbnr/ppp1pppp/8/8/2Pp4/5N2/PP1PPPPP/RNBQKBR1 b Qkq - 1 39 - +U3a094eba6f8e0400A10enEnglish OpeningAnglo-Dutch Variation, Ferenc Gambitrnbqkb1r/ppppp1pp/5n2/5p2/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 38 -+U fe0e43f2840eb90a A10enEnglish OpeningAnglo-Dutch Variation, Ferenc Gambitrnbqkb1r/ppppp1pp/5n2/5p2/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 37 -+U a5e0770729f4f89cA10enEnglish OpeningAnglo-Dutch Variation, Ferenc Gambitrnbqkbnr/ppppp1pp/8/5p2/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2 )4 - +Y78ae187aba08ef1fA10enEnglish OpeningAnglo-Dutch Variation, Chabanon Gambitrnbqkbnr/ppp1p1pp/3p4/5p2/2P1P3/5N2/PP1P1PPP/RNBQKB1R b KQkq - 0 33 -+Y bca9153251885215A10enEnglish OpeningAnglo-Dutch Variation, Chabanon Gambitrnbqkbnr/ppp1p1pp/3p4/5p2/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 32 -+Y 8513835383f01b78xA10enEnglish OpeningAnglo-Dutch Variation, Chabanon Gambitrnbqkbnr/ppppp1pp/8/5p2/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2/ - 'a 8aca4a650ce1c056VA12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkbnr/pp2pppp/2p5/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3. + 'a 66c2a31d66cab3b;A12enRéti OpeningAnglo-Slav Variation, Bogoljubov Variationrnbqkbnr/pp2pppp/2p5/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3M - 5/ a916d3adee63fa60`A05enKing's Indian AttackSmyslov Variationrnbqkb1r/pppppp1p/5np1/8/1P6/5NP1/P1PPPP1P/RNBQKB1R b KQkq - 0 3 }\lY ? : .\\\\\\\\\JE**i -3/9e8e7ad0bf0826c0A01enNimzo-Larsen AttackRingelbach Gambitrnbqkbnr/ppppp1pp/8/5p2/8/1P6/PBPPPPPP/RN1QKBNR b KQkq - 1 2R - /3 ee3916006327f796A05enZukertort OpeningMyers Polish Attackrnbqkb1r/pppppp1p/5np1/8/PP6/5N2/2PPPPPP/RNBQKB1R b KQkq - 0 3Q -/3 44cc63acc5919bb2A05enZukertort OpeningMyers Polish Attackrnbqkb1r/pppppp1p/5np1/8/P7/5N2/1PPPPPPP/RNBQKB1R w KQkq - 0 3P -/3ad7830f7be1e09f9A05enZukertort OpeningMyers Polish Attackrnbqkb1r/pppppppp/5n2/8/P7/5N2/1PPPPPPP/RNBQKB1R b KQkq - 0 2f - 3+ 1bf67a313f8035deA01enNimzo-Larsen AttackSpike Variationrnbqkb1r/pppppp1p/5np1/8/6P1/1P6/PBPPPP1P/RN1QKBNR b KQkq - 0 3e -3+b8bb7be7d7f5d8c3A01enNimzo-Larsen AttackSpike Variationrnbqkb1r/pppppp1p/5np1/8/8/1P6/PBPPPPPP/RN1QKBNR w KQkq - 0 3d -3+510f28bcac7a4a88A01enNimzo-Larsen AttackSpike Variationrnbqkb1r/pppppppp/5n2/8/8/1P6/PBPPPPPP/RN1QKBNR b KQkq - 2 2 9a - %578e615e117251fd1A02enBird OpeningBatavo-Polish Attackrnbqkb1r/pppppp1p/5np1/8/1P3P2/5N2/P1PPP1PP/RNBQKB1R b KQkq - 0 3` -%5 d213604db19373f5A02enBird OpeningBatavo-Polish Attackrnbqkb1r/pppppp1p/5np1/8/5P2/5N2/PPPPP1PP/RNBQKB1R w KQkq - 0 3_ -%5 3ba73316ca1ce1beA02enBird OpeningBatavo-Polish Attackrnbqkb1r/pppppppp/5n2/8/5P2/5N2/PPPPP1PP/RNBQKB1R b KQkq - 2 2 \ - /-4c287c6dc9525afcA04enZukertort OpeningSpeelsmet Gambitrnbqkbnr/pp1ppppp/8/8/3p4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3~[ -/-e1053edfed0dd258XA04enZukertort OpeningSpeelsmet Gambitrnbqkbnr/pp1ppppp/8/8/3p4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3Z -/- be1b84ea90f9bb9eA04enZukertort OpeningSpeelsmet Gambitrnbqkbnr/pp1ppppp/8/2p5/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 0 2v W - /=387de61fc215f7377A04enZukertort OpeningLisitsyn Gambit Deferredrnbqkb1r/ppppp1pp/5n2/5p2/4P3/3P1N2/PPP2PPP/RNBQKB1R b KQkq - 0 3 V -/= fc7aeb5729954a3d=A04enZukertort OpeningLisitsyn Gambit Deferredrnbqkb1r/ppppp1pp/5n2/5p2/8/3P1N2/PPP1PPPP/RNBQKB1R w KQkq - 1 3 U -/= a794dfa2846f0babA04enZukertort OpeningLisitsyn Gambit Deferredrnbqkbnr/ppppp1pp/8/5p2/8/3P1N2/PPP1PPPP/RNBQKB1R b KQkq - 0 2 { a g m w plxzp - 3) d662b1ec9a656ba2A01enNimzo-Larsen AttackPachman Gambitr1bqkbnr/pppp1ppp/2n5/4p3/5P2/1P6/PBPPP1PP/RN1QKBNR b KQkq - 0 3k - 3/ 2cfe85a94caa0b98A01enNimzo-Larsen AttackRingelbach Gambitrnbqkbnr/pppp2pp/4p3/5p2/4P3/1P6/PBPP1PPP/RN1QKBNR b KQkq - 0 3j -3/e8f988e1a72ab692A01enNimzo-Larsen AttackRingelbach Gambitrnbqkbnr/pppp2pp/4p3/5p2/8/1P6/PBPPPPPP/RN1QKBNR w KQkq - 0 3} -%35f949eedbc387fe8A00enGrob OpeningSpike, Hurst Attackrnbqkbnr/ppp2ppp/8/3pp3/6P1/8/PPPPPPBP/RNBQK1NR w KQkq - 0 3} -%3dafebcf920ec31ceA00enGrob OpeningSpike, Hurst Attackrnbqkbnr/pppp1ppp/8/4p3/6P1/8/PPPPPPBP/RNBQK1NR b KQkq - 1 2{ - '+b8b1db69247450f1A00enKadas OpeningMyers Variationrnbqkbnr/pp2pppp/8/2pp4/3PP2P/8/PPP2PP1/RNBQKBNR b KQkq - 0 3{ -'+7cb6d621cff4edfbA00enKadas OpeningMyers Variationrnbqkbnr/pp2pppp/8/2pp4/3P3P/8/PPP1PPP1/RNBQKBNR w KQkq - 0 3{ -'+9ac7078f30b3e686A00enKadas OpeningMyers Variationrnbqkbnr/ppp1pppp/8/3p4/3P3P/8/PPP1PPP1/RNBQKBNR b KQkq - 0 2 v - '%7871dfcb2b894b05A00enKadas OpeningKadas Gambitrnbqkbnr/pppp1ppp/8/8/3p3P/2P5/PP2PPP1/RNBQKBNR b KQkq - 0 3u~ +'%eab2753fbf94483A00enKadas OpeningKadas Gambitrnbqkbnr/pppp1ppp/8/8/3p3P/8/PPP1PPP1/RNBQKBNR w KQkq - 0 3x} -'%95d52dd13f825096A00enKadas OpeningKadas Gambitrnbqkbnr/pppp1ppp/8/4p3/3P3P/8/PPP1PPP1/RNBQKBNR b KQkq - 0 2v| -'%50e0027b2e4b7dd4A00enKadas OpeningKadas Gambitrnbqkbnr/pppp1ppp/8/4p3/7P/8/PPPPPPP1/RNBQKBNR w KQkq - 0 2yz - '+e6470a33e8e79129)A00enKadas OpeningSteinbok Gambitrnbqkbnr/ppppp1pp/8/8/4p2P/3P4/PPP2PP1/RNBQKBNR b KQkq - 0 3yy -'+48e3c9e6ac772afdA00enKadas OpeningSteinbok Gambitrnbqkbnr/ppppp1pp/8/8/4p2P/8/PPPP1PP1/RNBQKBNR w KQkq - 0 3zx -'+8af061e0e8a615366A00enKadas OpeningSteinbok Gambitrnbqkbnr/ppppp1pp/8/5p2/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 0 2xw -'+4ef76ca80326a83cw, - %%f317a085a8c3d0e7A00enAmar OpeningParis Gambitrnbqkbnr/ppp2ppp/8/3pp3/5P2/6PN/PPPPP2P/RNBQKB1R b KQkq - 0 3u; - 1 7272ff629ee2b3d7A00enVenezolana Openingr1bqkbnr/pp1ppppp/2n5/2p5/8/2NP2P1/PPP1PP1P/R1BQKBNR b KQkq - 0 3s: -1 5e9444237e356befA00enVenezolana Openingr1bqkbnr/pp1ppppp/2n5/2p5/8/2NP4/PPP1PPPP/R1BQKBNR w KQkq - 2 3q9 -1 f5799cc16fa4ceecA00enVenezolana Openingrnbqkbnr/pp1ppppp/8/2p5/8/2NP4/PPP1PPPP/R1BQKBNR b KQkq - 1 2n8 +1 eee8463ad464c355A00enVenezolana Openingrnbqkbnr/pp1ppppp/8/2p5/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 2gq6 - 5? abdd12ff99e3b771qA00enVan't Kruijs OpeningBouncing Bishop Variationrnbqkbnr/p1pp1ppp/8/1p2p3/8/1B2P3/PPPP1PPP/RNBQK1NR b KQkq - 1 35 -5? 62d902dd12c5e795A00enVan't Kruijs OpeningBouncing Bishop Variationrnbqkbnr/p1pp1ppp/8/1p2p3/2B5/4P3/PPPP1PPP/RNBQK1NR w KQkq - 0 3 4 +5? 2dd68c889685aa8A00enVan't Kruijs OpeningBouncing Bishop Variationrnbqkbnr/pppp1ppp/8/4p3/2B5/4P3/PPPP1PPP/RNBQK1NR b KQkq - 1 2y1 - )'4166ab5c65603e2b+A00enBarnes OpeningGedult Gambitrnbqkbnr/ppppp1pp/8/8/4p3/2N2P2/PPPP2PP/R1BQKBNR b KQkq - 1 3 :C8  | cQ?DcW|z - #322b4e052f18fab1dE00enIndian GameEast Indian Defensernbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3|v - #3bd7741389222a904E60enIndian GameWest Indian Defensernbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3r - -5e16ae0cf411a1219A00enVan Geet OpeningVenezolana Variationrnbqkb1r/ppp1pppp/5n2/3p4/8/2NP2P1/PPP1PP1P/R1BQKBNR b KQkq - 0 3q --5 cd8c5b8ea1cdca21!A00enVan Geet OpeningVenezolana Variationrnbqkb1r/ppp1pppp/5n2/3p4/8/2NP4/PPP1PPPP/R1BQKBNR w KQkq - 1 3s. - /1 76edafb2e2fb5bc6D02enQueen's Pawn GameChigorin Variationr1bqkbnr/ppp1pppp/2n5/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3 * - /- 3b71a6fe0c2df5b8D02enQueen's Pawn GameKrause Variationrnbqkbnr/pp2pppp/8/2pp4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3& - /7 86ee43a55e90bf53SD02enQueen's Pawn GameSymmetrical Variationrnbqkb1r/ppp1pppp/5n2/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3|" - /! dfd3bd62b4eff02f/D02enQueen's Pawn GameAnti-Torrern1qkbnr/ppp1pppp/8/3p4/3P2b1/5N2/PPP1PPPP/RNBQKB1R w KQkq - 1 3 h - 91 ea436e97432e89c2D06enQueen's Gambit RefusedZilbermints Gambitrnbqkbnr/p1p1pppp/8/1p1p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 - 9-6c36d52c27c43f82D06enQueen's Gambit RefusedAustrian Defensernbqkbnr/pp2pppp/8/2pp4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 + 9) 95e6d0c6f663d72rD06enQueen's Gambit RefusedBaltic Defensern1qkbnr/ppp1pppp/8/3p1b2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3 - 9- d1a9307775797569iD06enQueen's Gambit RefusedMarshall Defensernbqkb1r/ppp1pppp/5n2/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3 - 9- 21aadc60c91291fcD07enQueen's Gambit RefusedChigorin Defenser1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3 ) 933f0cc84b66ccc9D08enQueen's Gambit RefusedAlbin Countergambitrnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3j - % 183de96daf43e744DD10enSlav Defensernbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3r - ; 58413db08abdda1cD20enQueen's Gambit Acceptedrnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3v~ - ; fc30f6b3c0a1a4adD30enQueen's Gambit Declinedrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 )f) ' F EISXbbbbbbU%:#> - /Q e0ad1d7f5e4ebc56VD00enQueen's Pawn GameVeresov Attack, Shropshire Defensernbqkbnr/ppp1ppp1/8/3p3p/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3 b'r2 - / f0a7ede1122956caD00enQueen's Pawn Gamernbqkb1r/ppp1pppp/5n2/3p4/3P4/4P3/PPP2PPP/RNBQKBNR w KQkq - 1 3 or - + 564a5df89ac696bbC40enElephant Gambitrnbqkbnr/ppp2ppp/8/3pp3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3pn - - 48dfa09cc72e76f7C40enGunderam Defensernb1kbnr/ppppqppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3j - -/ d418e22b63fb9b70pC40enKing's Pawn GameMcConnell Defensernb1kbnr/pppp1ppp/5q2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3mf - ) 474f1975b89af543CC40enLatvian Gambitrnbqkbnr/pppp2pp/8/4pp2/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3b - -+ 1f7579a53cf9cfe2C40enKing's Pawn GameDamiano Defensernbqkbnr/pppp2pp/5p2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3^ - -/ 7e3d3bb7cc20321eC40enKing's Pawn GameBusch-Gass Gambitrnbqk1nr/pppp1ppp/8/2b1p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3qZ - - ea9ae98dd46a91f0C41enPhilidor Defensernbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3qV - - 88ce4b19abe8990b C42enPetrov's Defensernbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3R - 7- 78cda70e17837d9eC44enKing's Knight OpeningNormal Variationr1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3N - 5E 1b8252aaa629165c\D00enQueen's Pawn OpeningVeresov Attack, Irish Gambitrnbqkbnr/pp2pppp/8/2pp4/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3PJ - /I 7eeaea8aee8b14acD00enQueen's Pawn GameVeresov Attack, Alburt Defensern1qkbnr/ppp1pppp/8/3p1b2/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 2 3F - /E ff2049361eeb13cbD00enQueen's Pawn GameVeresov Attack, Anti-Veresovrn1qkbnr/ppp1pppp/8/3p4/3P2b1/2N5/PPP1PPPP/R1BQKBNR w KQkq - 2 3B - /M 778b8b4eca8be517D00enQueen's Pawn GameVeresov Attack, Shaviliuk Gambitrnbqkbnr/ppp2ppp/8/3pp3/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3: - /9 3b41ac89fdab7ee6D00enQueen's Pawn GameSteinitz Countergambitrnbqkbnr/pp2pppp/8/2pp4/3P1B2/8/PPP1PPPP/RN1QKBNR w KQkq - 0 36 - /Q c2ed06a26c834adaD00enQueen's Pawn GameLevitsky Attack, Welling Variationrn1qkbnr/ppp1pppp/8/3p2B1/3P2b1/8/PPP1PPPP/RN1QKBNR w KQkq - 2 3 MplMp_    0 06D- &0  - 'M 75111ecae3d17ba3C30enKing's GambitZilbermints Double Countergambitrnbqkbnr/pppp1p1p/8/4p1p1/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 - ] aebcdae2da9fc5bfC30enKing's Gambit Declined, Petrov's Defensernbqkb1r/pppp1ppp/5n2/4p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 1 3 ~ - 997038cc03ebb1ca0fC31enKing's Gambit DeclinedFalkbeer Countergambitrnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3rz - 9 1cd8d48946aa83fdC33enKing's Gambit Acceptedrnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3v - -+ 415a920371d20b26&C40enKing's Pawn GameGunderam Gambitrnbqkbnr/pp1p1ppp/2p5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3: - -; ff9841abf83f42d8C23enBishop's OpeningCalabrese Countergambitrnbqkbnr/pppp2pp/8/4pp2/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 0 36 - -' c6ea63698c858585C23enBishop's OpeningBoi Variationrnbqk1nr/pppp1ppp/8/2b1p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 32 - -) 301913c7eb4d2e90C24enBishop's OpeningBerlin Defensernbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3}. - #/ 583e535abd879e7azC25enVienna GameMax Lange Defenser1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3 * - #; 3a92e2bee7e1f35b[C25enVienna GameZhuravlev Countergambitrnbqk1nr/pppp1ppp/8/4p3/1b2P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3~& - #/ 5ececfe36624d1faC25enVienna GameAnderssen Defensernbqk1nr/pppp1ppp/8/2b1p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3" - #1 a83dbf4d01ec7aefC26enVienna GameFalkbeer Variationrnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3 - W 13233fb988228f54TC30enKing's Gambit Declined, Mafia Defensernbqkbnr/pp1p1ppp/8/2p1p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 @z> - -# ee9d0526da632120 C23enBishop's OpeningKhan Gambitrnbqkbnr/ppp2ppp/8/3pp3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 0 3  - i 5ebf36f566f4212a*C30enKing's Gambit Declined, Queen's Knight Defenser1bqkbnr/pppp1ppp/2n5/4p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 1 3  - a f26a73d0128cc7c4C30enKing's Gambit Declined, Norwalde Variationrnb1kbnr/pppp1ppp/5q2/4p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 1 3 + 9+b554ae02c530cd7C30enKing's Gambit DeclinedKeene's Defensernb1kbnr/pppp1ppp/8/4p3/4PP1q/8/PPPP2PP/RNBQKBNR w KQkq - 1 3 - '?613d888ec9eda9f7C30enKing's GambitPanteldakis Countergambitrnbqkbnr/pppp2pp/8/4pp2/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 - c 584faa4cbd576eaaC30enKing's Gambit Declined, Classical Variationrnbqk1nr/pppp1ppp/8/2b1p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 1 3 [    WU`Q~v - )1 ce80cc2d1f2b47ceC00enFrench DefenseFranco-Hiva Gambitrnbqkbnr/pppp2pp/4p3/5p2/4P3/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 3N - -Y328f365694ec2faaC20enKing's Pawn GameClam Variation, King's Gambit Reversedrnbqkbnr/pppp2pp/8/4pp2/4P3/3P4/PPP2PPP/RNBQKBNR w KQkq - 0 3 zJ - -%481b9ea4e3e9dac4C20enKing's Pawn GameBeyer Gambitrnbqkbnr/ppp2ppp/8/3pp3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3~pF - 5 560fb632bb4680f7C21enCenter Game Acceptedrnbqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3B - -9 f98dcadd3177bcbdC23enBishop's OpeningPhilidor Counterattackrnbqkbnr/pp1p1ppp/2p5/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 0 3 pr - 1 e389b73813da045aZC00enSt. George Defensernbqkbnr/1ppp1ppp/p3p3/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3}n - )+ 517a2cde6f5741bbC00enFrench DefenseBaeuerle Gambitrnbqkbnr/p1pp1ppp/4p3/1p6/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3j - /; d70f97650bbdf7fbC00enQueen's Pawn GameFranco-Sicilian Defensernbqkbnr/pp1p1ppp/4p3/2p5/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3mf - ) b41464df682eb2a0C00enFrench Defensernbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3b - )76a90723e5900bd10C00enFrench DefenseMediterranean Defensernbqkb1r/pppp1ppp/4pn2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3^ - )1 bb40e30e335d9d27'C00enFrench DefenseFranco-Hiva Gambitrnbqkbnr/pppp2pp/4p3/5p2/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 Z - -C eaf10d1b000c9bf8C20enKing's Pawn GameMacleod Attack, Lasa Gambitrnbqkbnr/pppp2pp/8/4pp2/4P3/2P5/PP1P1PPP/RNBQKBNR w KQkq - 0 3@~V + -+ 10d2e2ab12f5c81C20enKing's Pawn GameBavarian Gambitrnbqkbnr/ppp2ppp/8/3pp3/2P1P3/8/PP1P1PPP/RNBQKBNR w KQkq - 0 3cR - -a f3a744c9ef63deaaC20enKing's Pawn GameWayward Queen Attack, Kiddie Countergambitrnbqkb1r/pppp1ppp/5n2/4p2Q/4P3/8/PPPP1PPP/RNB1KBNR w KQkq - 2 3 15T G 4 "  raa: - -e 838263ba2658961dB20enSicilian DefenseSnyder Variation, Queen Fianchetto Variationrnbqkbnr/p2ppppp/1p6/2p5/4P3/1P6/P1PP1PPP/RNBQKBNR w KQkq - 0 3 - -- c95e54397292bb84B40enSicilian DefenseFrench Variationrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3q~ - - 86933069b8c862bbB50enSicilian Defensernbqkbnr/pp2pppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3|z + #58c4d0aa2682b5ebC00enRat DefenseSmall Center Defensernbqkbnr/ppp2ppp/3pp3/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 36 - -G 34378abed1256d311B23enSicilian DefenseClosed Variation, Traditionalr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3 w2 - - e9ada06dd8965860`B23enSicilian DefenseClosedrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3}. - -' df2dcc1df11d96ebB27enSicilian DefensePolish Gambitrnbqkbnr/p2ppppp/8/1pp5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3a* - -3 d440ef1894339c4dMB27enSicilian DefenseKatalimov Variationrnbqkbnr/p2ppppp/1p6/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3& - -1 665a3353c3c20a59YB27enSicilian DefenseMongoose Variationrnb1kbnr/pp1ppppp/8/q1p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3" - -3 b936992906fb64d7B27enSicilian DefenseQuinteros Variationrnb1kbnr/ppqppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 - -3 3551ae42f955d3e0B27enSicilian DefenseJalalabad Variationrnbqkbnr/pp1p1ppp/8/2p1p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - -+ 2b46c091d4380608B27enSicilian DefenseBrussels Gambitrnbqkbnr/pp1pp1pp/8/2p2p2/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3  - -; 569df553113fb99dB27enSicilian DefenseHyperaccelerated Dragonrnbqkbnr/pp1ppp1p/6p1/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - -/ 2ddeed6efd6462c3B27enSicilian DefenseBücker Variationrnbqkbnr/pp1pppp1/7p/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - -/ 6dde57fb8d90d30a B28enSicilian DefenseO'Kelly Variationrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - -7 e4c792fdc74a6a40@B29enSicilian DefenseNimzowitsch Variationrnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3~ - -% 14c47eea7b218ed5B30enSicilian DefenseOld Sicilianr1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 Fu^o _ h 5FFFFFFF5* - 37 20b16a51c7a2dea8B00enNimzowitsch DefenseNeo-Mongoloid Defenser1bqkbnr/ppppp1pp/2n2p2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3& - 31 cb0f3925561eccc5B00enNimzowitsch DefenseWilliams Variationr1bqkbnr/ppp1pppp/2np4/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3~ - 5Ib2f35ee6cc6a9e0d B01enScandinavian DefenseBlackburne-Kloosterboer Gambitrnbqkbnr/pp2pppp/2p5/3P4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3} -5I2089b309bbaa4db6B01enScandinavian DefenseBlackburne-Kloosterboer Gambitrnbqkbnr/ppp1pppp/8/3P4/8/8/PPPP1PPP/RNBQKBNR b KQkq - 0 2" - 3E 84c25d759c4415faB00enNimzowitsch DefenseFranco-Nimzowitsch Variationr1bqkbnr/pppp1ppp/2n1p3/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - 3) 66dac9dd3aeea876vB00enNimzowitsch DefenseLean Variationr1bqkbnr/ppppp1pp/2n5/5p2/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3u - #'4d5059c6de08c875uB00enRat DefenseAntal Defenser1bqkbnr/pppnpppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3 k - % 255d166e935a642f/B00enPirc Defensernbqkb1r/ppp1pppp/3p1n2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3m - / ee8b01ccbc8784b3B00enFried Fox Defensernbq1bnr/pppppkpp/5p2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQ - 1 3o -/ 8b5cb2b3d6337babB00enFried Fox Defensernbqkbnr/ppppp1pp/5p2/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 hs} - %1 4d324c6deb896b68hB00enBorg OpeningZilbermints Gambitrnbqkbnr/pppp1p1p/8/4p1p1/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3{ -%1c74a4427786c935e^B00enBorg OpeningZilbermints Gambitrnbqkbnr/pppppp1p/8/6p1/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 i~u - %#77f67991832b58f4B00enBorg DefenseBorg Gambitrnbqk1nr/ppppppbp/8/6p1/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3 + /11b91e7446028c355B00enGoldsmith DefensePicklepuss Defensernbqkb1r/ppppppp1/5n2/7p/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3 -/15a572a81ebf8cda3B00enGoldsmith DefensePicklepuss Defensernbqkbnr/ppppppp1/8/7p/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2} - %15f86f7d6e8e9ddf7B00enCarr DefenseZilbermints Gambitrnbqkbnr/pppp1pp1/7p/4p3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3{ -%1d5feff9c7b0c25c1B00enCarr DefenseZilbermints Gambitrnbqkbnr/ppppppp1/7p/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2z - 5;a4a562236238307c|B01enScandinavian DefenseMieses-Kotroc Variationrnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3 ,"Cxi 8 T PS"""""""""#-_q}V - '- c0ac74fa57251691A84enDutch DefenseNormal Variationrnbqkb1r/ppppp1pp/5n2/5p2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3: - 333e139deb1a69310b B00enNimzowitsch DefenseWoodchuck Variationr1bqkbnr/1ppppppp/p1n5/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3T 6 - 39 698e4e0c619d87f1B00enNimzowitsch DefenseScandinavian Variationr1bqkbnr/ppp1pppp/2n5/3p4/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 32 - 3/d55efa792f3180baB00enNimzowitsch DefenseMikenas Variationr1bqkbnr/ppp1pppp/2np4/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3. - 3/ 669c64526eac31e1B00enNimzowitsch DefenseKennedy Variationr1bqkbnr/pppp1ppp/2n5/4p3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3~}R - %36afed9d99ed5c547GB00enWare DefenseSnagglepuss Defenser1bqkbnr/1ppppppp/2n5/p7/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3{Q -%3c113013b8f446044DB00enWare DefenseSnagglepuss Defensernbqkbnr/1ppppppp/8/p7/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 \~N - 111f864d43981d6c3e>B00enSt. George DefenseZilbermints Gambitrnbqkbnr/1ppp1ppp/p7/4p3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3M -1195fe45090bf89408B00enSt. George DefenseZilbermints Gambitrnbqkbnr/1ppppppp/p7/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 oJ - / e370af0e597ad9b1B00enGuatemala Defensern1qkbnr/p1pppppp/bp6/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3nI -/ 2c60fdea125bdb4fOB00enGuatemala Defensernbqkbnr/p1pppppp/1p6/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 r F - /? f1a90d98ec4fb76ajB00enZukertort DefenseSicilian Knight Variationr1bqkbnr/pp1ppppp/n7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3B - 3/ a431a9213640f61eB00enNimzowitsch DefenseFrench Connectionr1bqkbnr/pppp1ppp/2n1p3/8/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3A -3/ d2465b102e62664cLB00enNimzowitsch DefenseFrench Connectionr1bqkbnr/pppppppp/2n5/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 2 2> - 3+ 3bf2084b55edf407B00enNimzowitsch DefensePirc Connectionr1bqkbnr/pppppp1p/2n3p1/8/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3  v Z z{|oV - )784991fbaccc30d68hA43enBenoni DefenseBenoni-Indian Defensernbqkb1r/pp1ppppp/5n2/2pP4/8/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3y& - #% 91fe8c5eb58422ceA46enIndian GameCzech-Indianrnbqkb1r/pp1ppppp/2p2n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3" - #; 3a3ef7d0103cb818A46enIndian GameWade-Tartakower Defensernbqkb1r/ppp1pppp/3p1n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3pR - 1 9a3e66dbf801f641AA44enOld Benoni Defensernbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3N - #? c506444b970719ecA45enIndian GameReversed Chigorin Defensernbqkb1r/pp1ppppp/5n2/2p5/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3M -#? 237795e568401291A45enIndian GameReversed Chigorin Defensernbqkb1r/pppppppp/5n2/8/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 2 2 J - /1 a61db7f1f4945cb7A45enQueen's Pawn GameChigorin Variationrnbqkb1r/ppp1pppp/5n2/3p4/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3|F - #+ a90f9daffba5eaa7A45enIndian GameMaddigan Gambitrnbqkb1r/pppp1ppp/5n2/4p3/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3vB + #' bf63d6fa3bac04eNA45enIndian GameLazard Gambitrnbqkb1r/pppp1ppp/5n2/4p3/3P4/8/PPPNPPPP/R1BQKBNR w KQkq - 0 3uA -#'818e3525305f3878xA45enIndian GameLazard Gambitrnbqkb1r/pppppppp/5n2/8/3P4/8/PPPNPPPP/R1BQKBNR b KQkq - 2 2> - // 68cd2840020adbd2A45enTrompowsky AttackClassical Defensernbqkb1r/pppp1ppp/4pn2/6B1/3P4/8/PPP1PPPP/RN1QKBNR w KQkq - 0 3 0: - #a f1d584dbd1328563cA45enIndian GameGibbins-Wiedenhagen Gambit, Oshima Defensernbqkb1r/pppp1ppp/5n2/4p3/3P2P1/8/PPP1PP1P/RNBQKBNR w KQkq - 0 3 6 - #S198921b9b770f8e9A45enIndian GameGibbins-Wiedenhagen Gambit Acceptedrnbqkb1r/pppppppp/8/8/3P2n1/8/PPP1PP1P/RNBQKBNR w KQkq - 0 32 - #_ d1739042256409a9A46enIndian GameKnights Variation, Alburt-Miles Variationrnbqkb1r/1ppppppp/p4n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3|. - #- 63800ba459e94c48HA46enIndian GamePolish Variationrnbqkb1r/p1pppppp/5n2/1p6/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3|* - #- e5f5b01f3d03fa08A46enIndian GameSpielmann-Indianrnbqkb1r/pp1ppppp/5n2/2p5/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3l - ' 398c2d2e700d7c8fA46enDöry Defensernbqkb1r/pppppppp/8/8/3Pn3/5N2/PPP1PPPP/RNBQKB1R w KQkq - 3 3x - 9 68ed28a13cc746eeA47enQueen's Indian Defensernbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3s - 3 ea3032eab9cb633e>A48enEast Indian Defensernbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3 :*y } r #{************ {qzI - 9+6becea4dc7be1666fA40enEnglund Gambit ComplexMosquito Gambitrnb1kbnr/pppp1ppp/8/4P3/7q/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3 - [ fd146060ce5e9723#A40enEnglund Gambit Declined, Reversed Krebsrnbqkbnr/pppp1ppp/8/8/3Pp3/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 38n - + 12339db7a2f65d10A40enEnglish Defensernbqkbnr/p1pp1ppp/1p2p3/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3o~ - - b01bbda1178222a9A40enKangaroo Defensernbqk1nr/pppp1ppp/4p3/8/1bPP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3z - /1 305299fbaeb34fd1A40enZukertort DefenseKingside Variationrnbqkb1r/pppppp1p/6pn/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3y -/1 b1de061f143122a8A40enZukertort DefenseKingside Variationrnbqkbnr/pppppp1p/6p1/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2uv - ##bcefb8bd05cacb82A41enRat DefenseEnglish Ratrnbqkbnr/ppp2ppp/3p4/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 r - --f4cb2ad1ad45dd8fA41enKing's Pawn GameMaróczy Defensernbqkbnr/ppp2ppp/3p4/4p3/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 mn - % 63030917fa43f764dA41enWade Defensern1qkbnr/ppp1pppp/3p4/8/3P2b1/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3 pzj - )-71f503dce5803a54TA43enBenoni DefenseCormorant Gambitrnbqkbnr/p2ppppp/1p6/2P5/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3 f - )M541ce15c9dfc1173sA43enBenoni DefenseBenoni Gambit, Schlenker Defenser1bqkbnr/pp1ppppp/n7/2P5/8/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3zb - )+91f780dfe7c6d042BA43enBenoni DefenseSnail Variationr1bqkbnr/pp1ppppp/n7/2pP4/8/8/PPP1PPPP/RNBQKBNR w KQkq - 1 3~v^ - )!e6cdbd2eb3410593A43enBenoni DefenseOld Benonirnbqkbnr/pp2pppp/3p4/2pP4/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3Z - 114b184dd6dfb16120 A43enOld Benoni DefenseMujannah Formationrnbqkbnr/pp1pp1pp/8/2pP1p2/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3 - 9'59be48f3a66389e7A40enEnglund Gambit ComplexSoller Gambitrnbqkbnr/pppp2pp/5p2/4P3/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3 M|.${! * 2-|||||||||ZB]< -:#2 - +w b402d0ee9c981166fA20enEnglish OpeningKing's English Variation, Nimzowitsch-Flohr Variationrnbqkbnr/pppp1ppp/8/8/2P1p3/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3 -/19d57cb793397a962bA40enQueen's Pawn GameAnglo-Slav Openingrnbqkbnr/pp1ppppp/2p5/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 -/11174545d70980265eA40enQueen's Pawn GameAnglo-Slav Openingrnbqkbnr/pp1ppppp/2p5/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2  - 9=ac51d8db4ef0d7f5A40enEnglund Gambit ComplexHartlaub-Charlick Gambitrnbqkbnr/ppp2ppp/3p4/4P3/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3  -9=95eb4eba9c889e98A40enEnglund Gambit ComplexHartlaub-Charlick Gambitrnbqkbnr/pppp1ppp/8/4P3/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2 . - ++ 71d8244c218cd6e2A20enEnglish OpeningDrill Variationrnbqkbnr/pppp1pp1/8/4p2p/2P5/6P1/PP1PPP1P/RNBQKBNR w KQkq - 0 3~- -++ 6c86ba3726ac7795A20enEnglish OpeningDrill Variationrnbqkbnr/pppp1ppp/8/4p3/2P5/6P1/PP1PPP1P/RNBQKBNR b KQkq - 0 2%* - +y 72b670d24f6ee556VA21enEnglish OpeningKing's English Variation, Kramnik-Shirov Counterattackrnbqk1nr/pppp1ppp/8/4p3/1bP5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3 r & - +k e0192d21a9636ce2A22enEnglish OpeningKing's English Variation, Two Knights Variationrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3"" - +q 101ac13615088877wA25enEnglish OpeningKing's English Variation, Reversed Closed Sicilianr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3 - +e 7c1318d279aa7b3c - +g a3268264eb0de57b{A15enEnglish OpeningAnglo-Indian Defense, King's Indian Formationrnbqkb1r/pppppp1p/5np1/8/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3 s b 6 $s}m' } -/% 60e2e1c7478f69c6A04enZukertort OpeningWade Defensernbqkbnr/ppp1pppp/3p4/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 2s - / 96cb8e5b00fefbedA05enZukertort Openingr1bqkb1r/pppppppp/2n2n2/8/8/2N2N2/PPPPPPPP/R1BQKB1R w KQkq - 4 3xn - ')4610feecf3929663cA09enRéti OpeningRéti Acceptedrnbqkbnr/ppp1pppp/8/8/2p5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3|j - '/767badb06d935267gA09enRéti OpeningAdvance Variationrnbqkbnr/ppp1pppp/8/8/2Pp4/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3f - +]372f42d473a69df2A10enEnglish OpeningAnglo-Scandinavian Defense, Löhn Gambitrnbqkbnr/ppp2ppp/4p3/3P4/8/8/PP1PPPPP/RNBQKBNR w KQkq - 0 3q -/ 3d2656b9116f5eeeA05enZukertort Openingrnbqkb1r/pppppppp/5n2/8/8/2N2N2/PPPPPPPP/R1BQKB1R b KQkq - 3 2 r - 5/ 8a539f4fa8f7b9322A05enKing's Indian AttackSpassky Variationrnbqkb1r/p1pppppp/5n2/1p6/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 -5/ea57f55a335a040fA05enKing's Indian AttackSpassky Variationrnbqkb1r/pppppppp/5n2/8/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 0 2t - 5 6f3dd74eaf8e4a29)A05enKing's Indian Attackrnbqkb1r/ppp1pppp/5n2/3p4/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 + 53 3e3a60148d59644DA05enKing's Indian AttackSymmetrical Defensernbqkb1r/pppppp1p/5np1/8/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 - 51d2a23215fd3300c2A07enKing's Indian AttackSicilian Variationrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 N - 5+ 3600298945f10555UA07enKing's Indian AttackKeres Variationrn1qkbnr/ppp1pppp/8/3p4/6b1/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 1 3~ - 51beabebf19191f389A07enKing's Indian AttackOmega-Delta Gambitrnbqkbnr/ppp2ppp/8/3pp3/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3z - 5/ dd67b0e079fb99f4A07enKing's Indian AttackDouble Fianchettornbqkbnr/ppp1pp1p/6p1/3p4/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3v - /; b490136696c0f4355A07enHungarian OpeningWiedenhagen-Beta Gambitrnbqkbnr/ppp1pp1p/8/3p2p1/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 r - '1 f412adcb3a01c5bdA09enRéti OpeningZilbermints Gambitrnbqkbnr/p1p1pppp/8/1p1p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3fe -+]4158b0e56b840da0A10enEnglish OpeningAnglo-Scandinavian Defense, Löhn Gambitrnbqkbnr/ppp1pppp/8/3P4/8/8/PP1PPPPP/RNBQKBNR b KQkq - 0 2 J  g VFYJJJJJJJJJJ; , : - 3- 2b74cce183f4562b+A01enNimzo-Larsen AttackModern Variationr1bqkbnr/pppp1ppp/2n5/4p3/8/1P6/PBPPPPPP/RN1QKBNR w KQkq - 2 3 v2 - %'719fedb5ca62dac8A02enBird OpeningLasker Gambitrnbqkbnr/pppp2pp/5p2/4P3/8/8/PPPPP1PP/RNBQKBNR w KQkq - 0 3s. - %%838557414b00460a A02enBird OpeningPlatz Gambitrnbqkb1r/ppppnppp/8/4P3/8/8/PPPPP1PP/RNBQKBNR w KQkq - 1 3{6 - %/1627331ee11868b4A02enBird OpeningSchlechter Gambitr1bqkbnr/pppp1ppp/2n5/4P3/8/8/PPPPP1PP/RNBQKBNR w KQkq - 1 3y5 -%/bdcaebfcf089cdb7A02enBird OpeningSchlechter Gambitrnbqkbnr/pppp1ppp/8/4P3/8/8/PPPPP1PP/RNBQKBNR b KQkq - 0 2& - %= 72fdbc58648616b7A02enBird OpeningHobbs-Zilbermints Gambitrnbqkbnr/pppppp2/7p/6p1/5P2/5N2/PPPPP1PP/RNBQKB1R w KQkq - 0 3% -%=f2be4c85f032e93d=A02enBird OpeningHobbs-Zilbermints Gambitrnbqkbnr/ppppppp1/7p/8/5P2/5N2/PPPPP1PP/RNBQKB1R b KQkq - 1 2$ -%=29daa07398d48800A02enBird OpeningHobbs-Zilbermints Gambitrnbqkbnr/ppppppp1/7p/8/5P2/8/PPPPP1PP/RNBQKBNR w KQkq - 0 2 " - /? 965443d2a98ad16enA04enZukertort DefenseDrunken Cavalry Variationr1bqkb1r/pppppppp/n6n/8/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 3! -/?17d8dc361308bc17A04enZukertort DefenseDrunken Cavalry Variationr1bqkbnr/pppppppp/n7/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 2 -/?d3dfd17ef888011dA04enZukertort DefenseDrunken Cavalry Variationr1bqkbnr/pppppppp/n7/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 2 2 | - /! eba8cb6f2e2301b8A04enZukertort OpeningVos Gambitrnbqkbnr/ppp2ppp/3p4/4p3/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3{ -/! 61d0c325bdc6f98eA04enZukertort OpeningVos Gambitrnbqkbnr/ppp1pppp/3p4/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 0 2}~ - /% 62312bf5000a672c,A04enZukertort OpeningWade Defensern1qkbnr/ppp1pppp/3p4/8/4P1b1/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 3}* - 7 6f1d80323c958fafA02enSystemDouble Duck Formationrnbqkbnr/ppp1p1pp/8/3p1p2/3P1P2/8/PPP1P1PP/RNBQKBNR w KQkq - 0 3{) -7 ea77a226a041c189A02enSystemDouble Duck Formationrnbqkbnr/ppppp1pp/8/5p2/3P1P2/8/PPP1P1PP/RNBQKBNR b KQkq - 0 2} Yg    ~wcMcTNQP wY +)#1bf79b5cdcb06c6A00enBarnes OpeningFool's Maternbqkbnr/pppp1ppp/8/4p3/6P1/5P2/PPPPP2P/RNBQKBNR b KQkq - 0 2V - /;bc36fd9ed838b986A00enHungarian OpeningReversed Modern Defensernbqkbnr/pp2pppp/8/2pp4/8/6P1/PPPPPPBP/RNBQK1NR w KQkq - 0 3U -/;5a472c30277fb2fbA00enHungarian OpeningReversed Modern Defensernbqkbnr/ppp1pppp/8/3p4/8/6P1/PPPPPPBP/RNBQK1NR b KQkq - 1 2T -/;efb70f4d6a926a82A00enHungarian OpeningReversed Modern Defensernbqkbnr/ppp1pppp/8/3p4/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2 }R - /)c83dc1df50bf6140@A00enHungarian OpeningSlav Formationrnbqkbnr/pp2pppp/2p5/3p4/8/6P1/PPPPPPBP/RNBQK1NR w KQkq - 0 3N - //2c30de013f5d22a9A00enHungarian OpeningCatalan Formationrnbqkbnr/ppp2ppp/4p3/3p4/8/6P1/PPPPPPBP/RNBQK1NR w KQkq - 0 3~J + /-3c53eb8dfc14ec4A00enHungarian OpeningVan Kuijk Gambitrnbqkbnr/ppppppp1/8/8/7p/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3I -/-ace75fd49980e4eeA00enHungarian OpeningVan Kuijk Gambitrnbqkbnr/ppppppp1/8/7p/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 1 2 ~F - %547967b48581d5465eA00enGrob OpeningGrob Gambit Declinedrnbqkbnr/pp2pppp/2p5/3p4/6P1/8/PPPPPPBP/RNBQK1NR w KQkq - 0 3 yB - %) 2c109ad8be338546FA00enGrob OpeningLondon Defenser1bqkbnr/pppp1ppp/2n5/4p3/6P1/7P/PPPPPP2/RNBQKBNR w KQkq - 1 3wA -%)87fd423aafa22045EA00enGrob OpeningLondon Defensernbqkbnr/pppp1ppp/8/4p3/6P1/7P/PPPPPP2/RNBQKBNR b KQkq - 0 2x@ -%)6f0e9f846d01e9b7A00enGrob OpeningLondon Defensernbqkbnr/pppp1ppp/8/4p3/6P1/8/PPPPPP1P/RNBQKBNR w KQkq - 0 2> - ;/6a4650de924f0d3e>A00enCreepy Crawly FormationClassical Defensernbqkbnr/ppp2ppp/8/3pp3/8/P6P/1PPPPPP1/RNBQKBNR w KQkq - 0 3z^= -;/e03e589401aaf508A00enCreepy Crawly FormationClassical Defensernbqkbnr/ppp1pppp/8/3p4/8/P6P/1PPPPPP1/RNBQKBNR b KQkq - 0 2< -;/2ba269b248e67b48HA00enCreepy Crawly FormationClassical Defensernbqkbnr/ppp1pppp/8/3p4/8/7P/PPPPPPP1/RNBQKBNR w KQkq - 0 2 cgUME=4+"zrjbZRJB:2*" }ume]UME=5-% zqh_VMD;2)  ~ v n f ^ V N F > 6 . &     ~ v n f ^ V N F > 6 - $   z r j b Z R J B : 2 * "     } u m e ] U M E = 5 - %    z q h _ V M D ; 2y * "   zrjbZRJB:2*"xof]TKB9pg1)! xof]nf^VNE<3*!wog_VMD;2) =^@. vtTLJ~||zxJxt>rOZM]C@w>:L!?k z iTjV$0{gXwwNtso+ieWLIA(v''&!V`U% /3^s[Zj3%_I1~~}wrpmmclja_[AYQY"X3URNKrD><6B5b20/+)( J^O' ~4{zjii_][YWPA3=;531&/+w#d`Hr7  "=F}Tu3srqlgeZUTN`F@h=z3 ., )(d'!)|lm  ie  x aavt{Nze -)+a6ca01fbee5ef461aA00enPolish OpeningWolferts Gambitrnbqkbnr/pppp1ppp/8/4p3/1P6/8/PBPPPPPP/RN1QKBNR b KQkq - 1 2yb - )'9f70979a3c26bd0c A00enPolish OpeningCzech Defensernbqkbnr/ppp2ppp/3p4/4p3/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 0 3^ - );9ee86e1fabcedf8aA00enPolish OpeningKing's Indian Variationrnbqkb1r/pppppp1p/5np1/8/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 0 3] -);775c3d44d0414dc1A00enPolish OpeningKing's Indian Variationrnbqkb1r/pppppppp/5n2/8/1P6/8/PBPPPPPP/RN1QKBNR b KQkq - 2 2s| -%#4df682e1e0af946foA00enWare OpeningWing Gambitrnbqkbnr/p1pppppp/8/1p6/P7/8/1PPPPPPP/RNBQKBNR w KQkq - 0 2et~z - -) 4fa8d9e9c2d3f5dcA00enVan Geet OpeningDamhaug Gambitrnbqkbnr/ppp2ppp/8/3pp3/5P2/2N5/PPPPP1PP/R1BQKBNR w KQkq - 0 3~y --) c5d0d1a351360deaA00enVan Geet OpeningDamhaug Gambitrnbqkbnr/ppp1pppp/8/3p4/5P2/2N5/PPPPP1PP/R1BQKBNR b KQkq - 0 2 v - -/ 4593217ec582f260`A00enVan Geet OpeningWarsteiner Gambitrnbqkbnr/ppp1pp1p/8/3p2p1/5P2/2N5/PPPPP1PP/R1BQKBNR w KQkq - 0 3 r - -? 41ad2e5de5420dcdA00enVan Geet OpeningBillockus-Johansen Gambitrnbqk1nr/pppp1ppp/8/2b1p3/8/2N2N2/PPPPPPPP/R1BQKB1R w KQkq - 2 3q --? ecb06a062f70e74eNA00enVan Geet OpeningBillockus-Johansen Gambitrnbqkbnr/pppp1ppp/8/4p3/8/2N2N2/PPPPPPPP/R1BQKB1R b KQkq - 1 2 |n - )) 2ac1422b568a4bfcA00enPolish OpeningBaltic Defensern1qkbnr/ppp1pppp/8/3p1b2/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 2 3ym -))a9d82ba5e16f4271qA00enPolish OpeningBaltic Defensernbqkbnr/ppp1pppp/8/3p4/1P6/8/PBPPPPPP/RN1QKBNR b KQkq - 1 2{j - )) 1cb44035e9764e6enA00enPolish OpeningGerman Defensernb1kbnr/ppp1pppp/3q4/3p4/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 2 3|f - )+ 40bbd0551119ff1cA00enPolish OpeningWolferts Gambitrnbqkbnr/pp1p1ppp/8/2p1p3/1P6/8/PBPPPPPP/RN1QKBNR w KQkq - 0 3r} -%#95c7e513cddb267b{A00enWare OpeningWing Gambitrnbqkbnr/p1pppppp/8/1P6/8/8/1PPPPPPP/RNBQKBNR b KQkq - 0 2\ -);b720d7411dddd12e.A00enPolish OpeningKing's Indian Variationrnbqkb1r/pppppppp/5n2/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 1 2wZ - )#ffb8dd4296fd8e388A00enBarnes OpeningFool's Maternb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 1 3 pELRn} m  &  6CpppxlaxC - + 84670c3e2dfb12a7C20enEnglish OpeningThe Whalernbqkbnr/pppp1ppp/8/4p3/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 2~@ - -+ b266e8294289ef1bC20enKing's Pawn GameNapoleon Attackrnbqkbnr/pppp1ppp/8/4p3/4P3/5Q2/PPPP1PPP/RNB1KBNR b KQkq - 1 2m - ' a603376a34ce0e8fD00enAmazon Attackrnbqkbnr/ppp1pppp/8/3p4/3P4/3Q4/PPP1PPPP/RNB1KBNR b KQkq - 1 2o - / ab49d914bfd3175c\D00enQueen's Pawn Gamernbqkbnr/ppp1pppp/8/3p4/3P4/4P3/PPP2PPP/RNBQKBNR b KQkq - 0 2t - 9 c26396ee700c22f2D00enBlackmar-Diemer Gambitrnbqkbnr/ppp1pppp/8/3p4/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2~ - /' a5299a7073f972e5D00enQueen's Pawn GameZurich Gambitrnbqkbnr/ppp1pppp/8/3p4/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 0 2 - /3 dd007750f36afec5D02enQueen's Pawn GameZukertort Variationrnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2l - ) 8a470482d88334ffD06enQueen's Gambitrnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2s~ - %#2557ad97bf8989e0A00enWare OpeningWing Gambitrn1qkbnr/pbpppppp/8/1P6/8/8/1PPPPPPP/RNBQKBNR w KQkq - 1 3= - -5a849703c42999f3c 7 0 ) "   zsle^WPIB;4-& ~wpib[TMF?81*#{tmf_XQJC<5.'  xqjc\UNG@92+$un`YRKD=6/(!| g.5N *!);(`G'j&>%#y`;"l!H R{e0<GS`D+b'[, } S$V  d9*S$[3A]1u!q"fv-})v1]kJ0|VoM; ScWY UyETY1MR-Wm9,RtQ{wLhL(O3 Z9We7'7XP|NWEgHsxr<\f7 /k0c;N]*^6~f>|W:rw <[vDu-l>{<X NnPm- h k*eNcOtU6|s7,Cy[?X} zdtVZsdDq&p So0l .Xqj`if^etbL8a}_YD4^D\sZ@}YXU>5 /1~QLOK2JQIjFQBAI?T=Q;o:<9|8_6&i4?3V2 0<-~ dA,+e*a)4(&]%B i#:"` @b~!i7 O(  _"@{tmf_XQJC<5.'  xqjc\UNG@92+$ | u n g ` Y R K D = 6 / ( !    y r k d ] V O H A : 3 , %     } v o h a Z S L E > 7 0 ) "    z s l e ^ W P I B ; 4 - &     ~ w p i b [ T M F ? 8 1 * #     tm_ C5.{X< QJ'fxjcUNqG@9\+$2|ung`YRKD=6/(! yrkd]VOHA:3,% 5|`D( nT; fL/x]A% lQ8 mP1tX9jM/x\?% qS6~dH-?|[ =fH~*} |p{Rz6yxwcvGu-tsvr]qBp(onolSk5ih}gafGe#dncb7a`X_*WQ^9\p["ZdXVe]!US Y6RLQSBOIM;KTTcJHuN<,,@'E8D C\:A^6!<8O%dF[7 1?c5u0k3~2}4W>5=/Gr.`-M9e*('#?+ ) $P9 &)mpM7Q1sU6}bE&jL- q S 6  {`D( Z.L,m6GC}Y:c2VV*ށv:wAu1pI+iM*߁X݁u܁?ہOځفT؁ׁGց Ձ;ԁgӁҁ1сrЁρ{΁QU/́qÁˁqʁ=ɁȁgJ$m}=ǁƁ^Łiā3ÁGF U/awG7r$mR;nTT%j]0X]g5C 0k8 J}Bxs+D1G4( pMS;hN.!Wka1y4́ 1@}W~7}q|7{ zPべy9xIwyv9a8AuBpt s7r qphoJn(l j9FbihQgfPe*Bd1c bi$1rta}`I=p_p^^]\,[KZ6;qYyW+VuS%IRQiPPN5MLsKVI7H G0EjDF,e F遚 AA@?>o<;J:>l݁1 0735|zV32.10b/F*Ёk-]+7 KKGe Y ] T BV4GLiqtVG - +7 55f1308113e4ab07B02enEnglish OpeningAchilles-Omega Gambitrnbqkb1r/pppppppp/5n2/8/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 2} - -' 31f73850d4b110e6B20enSicilian DefenseAmazon Attackrnbqkbnr/pp1ppppp/8/2p5/4P1Q1/8/PPPP1PPP/RNB1KBNR b KQkq - 1 2 - -5f327e3a27af70c20 B20enSicilian DefenseKing David's Openingrnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPPKPPP/RNBQ1BNR b kq - 1 2| + -) 7fefed62a159c4dMB20enSicilian DefenseBowdler Attackrnbqkbnr/pp1ppppp/8/2p5/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2| - -+70e9a1312a7d4715B20enSicilian DefenseKeres Variationrnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPPNPPP/RNBQKB1R b KQkq - 1 2QD - -177766c70147bbbd4B02enAlekhine DefenseMaróczy Variationrnbqkb1r/pppppppp/5n2/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 0 2A - -/ ba611b8d78a8d6a6B02enAlekhine DefenseKrejcik Variationrnbqkb1r/pppppppp/5n2/8/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 2 2q> - / ebd16e1d483310f4B10enCaro-Kann Defensernbqkbnr/pp1ppppp/2p5/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2 Vr{; - /# 9ce016eb505cf940@B10enCaro-Kann DefenseEuwe Attackrnbqkbnr/pp1ppppp/2p5/8/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 0 28 - /= 9c65e99bc9de392a*B10enCaro-Kann DefenseAccelerated Panov Attackrnbqkbnr/pp1ppppp/2p5/8/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 25 - /-bee2b56ace4129f9B10enCaro-Kann DefenseBreyer Variationrnbqkbnr/pp1ppppp/2p5/8/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 0 22 - /- 73f5c297a292448bB10enCaro-Kann DefenseHillbilly Attackrnbqkbnr/pp1ppppp/2p5/8/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2/ - /+ b30b776962a47f300B10enCaro-Kann DefenseSpike Variationrnbqkbnr/pp1ppppp/2p5/8/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 0 2n, - / d57359159b18bf6foB12enCaro-Kann Defensernbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2) - -3afd17bd84b1ac4abB20enSicilian DefenseMengarini Variationrnbqkbnr/pp1ppppp/8/2p5/4P3/P7/1PPP1PPP/RNBQKBNR b KQkq - 0 2ty& + -%f8434126fc59f25%B20enSicilian DefenseMyers Attackrnbqkbnr/pp1ppppp/8/2p5/P3P3/8/1PPP1PPP/RNBQKBNR b KQkq - 0 2# - -563ab9aadef046525%B20enSicilian DefenseKronberger Variationrnbqkbnr/pp1ppppp/8/2p5/4P3/N7/PPPP1PPP/R1BQKBNR b KQkq - 1 2 - -- e8eb2aaad8db2186B20enSicilian DefenseSnyder Variationrnbqkbnr/pp1ppppp/8/2p5/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 0 2{ - -# ceb83f52a4e026cfB20enSicilian DefenseWing Gambitrnbqkbnr/pp1ppppp/8/2p5/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 0 2  - -C e86ed5da4159e1ecB20enSicilian DefenseStaunton-Cochrane Variationrnbqkbnr/pp1ppppp/8/2p5/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 2 | + -+f8390714a7335311B20enSicilian DefenseBrick Variationrnbqkbnr/pp1ppppp/8/2p5/4P3/7N/PPPP1PPP/RNBQKB1R b KQkq - 1 2  u~ h X m mov/>E__z + #/ 38461b1c244f175uA46enIndian GameKnights Variationrnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 2tnqV - #4690703c36f83572rB00enRat DefenseHarmonistrnbqkbnr/ppp1pppp/3p4/8/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2wS - #% 18cb0ce7c71ce5e6B00enRat DefenseSpike Attackrnbqkbnr/ppp1pppp/3p4/8/4P1P1/8/PPPP1P1P/RNBQKBNR b KQkq - 0 2|P - #12725911884567185B00enRat DefensePetruccioli Attackrnbqkbnr/ppp1pppp/3p4/8/4P2P/8/PPPP1PP1/RNBQKBNR b KQkq - 0 2tM - 5 8bf0d910bb4864ddB01enScandinavian Defensernbqkbnr/ppp1pppp/8/3p4/4P3/1P6/P1PP1PPP/RNBQKBNR b KQkq - 0 2x - #-54c31263e9ad3b4fOA50enIndian GameNormal Variationrnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2~} - '/ ecf6c7897b327ed9A80enDutch DefenseRaphael Variationrnbqkbnr/ppppp1pp/8/5p2/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 1 2 ~yz - ''d13b881d095a27c8A80enDutch DefenseHopton Attackrnbqkbnr/ppppp1pp/8/5pB1/3P4/8/PPP1PPPP/RN1QKBNR b KQkq - 1 2|w - '- b70673e716926d77wA80enDutch DefenseAlapin Variationrnbqkbnr/ppppp1pp/8/5p2/3P4/3Q4/PPP1PPPP/RNB1KBNR b KQkq - 1 2zt - ') b42cdefd51a5111dA80enDutch DefenseKrejcik Gambitrnbqkbnr/ppppp1pp/8/5p2/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 0 2{q - '+ff9202957b7335f2A80enDutch DefenseKorchnoi Attackrnbqkbnr/ppppp1pp/8/5p2/3P4/7P/PPP1PPP1/RNBQKBNR b KQkq - 0 2}n - '/ 3b87646a590724388A81enDutch DefenseFianchetto Attackrnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2yk - '+d366d2635250410a A82enDutch DefenseStaunton Gambitrnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2jh - ' 9b42400ffadf5707A84enDutch Defensernbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2e - 3) 8324361e4a3688b1B00enNimzowitsch DefenseWheeler Gambitr1bqkbnr/pppppppp/2n5/8/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 0 2b - -3ece46c18fd49c9d7B00enKing's Pawn GameNimzowitsch Defenser1bqkbnr/pppppppp/2n5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 _ - 3= 1a0f921d89147716B00enNimzowitsch DefensePseudo-Spanish Variationr1bqkbnr/pppppppp/2n5/1B6/4P3/8/PPPP1PPP/RNBQK1NR b KQkq - 2 2\ - [ f2b5af44846685a8B00enNimzowitsch Defense, Declined Variationr1bqkbnr/pppppppp/2n5/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 2 2jY - % 7eb3229b3ea025b9B00enPirc Defensernbqkbnr/ppp1pppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2J - 51 ada3cce8c7736394B01enScandinavian DefenseZilbermints Gambitrnbqkbnr/ppp1pppp/8/3p4/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 0 2 M[w " *  , 2 ,M6 - +k 9b04ed80ae9dce90A20enEnglish OpeningKing's English Variation, Nimzowitsch Variationrnbqkbnr/pppp1ppp/8/4p3/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2n - + b6516b760a687f399A45enPaleface Attackrnbqkb1r/pppppppp/5n2/8/3P4/5P2/PPP1P1PP/RNBQKBNR b KQkq - 0 2n - ) 25f6f04ab333adc1A45enCanard Openingrnbqkb1r/pppppppp/5n2/8/3P1P2/8/PPP1P1PP/RNBQKBNR b KQkq - 0 2{ - #/ f40636064a754870pA45enIndian GameTartakower Attackrnbqkb1r/pppppppp/5n2/8/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2o - - 7bad8c9142d77d55UA45enBronstein Gambitrnbqkb1r/pppppppp/5n2/8/3P2P1/8/PPP1PP1P/RNBQKBNR b KQkq - 0 23 - +c bbf719d404992d74tA21enEnglish OpeningKing's English Variation, Reversed Sicilianrnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2x0 - +#869cad3e0c6f30c2A30enEnglish OpeningWing Gambitrnbqkbnr/pp1ppppp/8/2p5/1PP5/8/P2PPPPP/RNBQKBNR b KQkq - 0 2 |- - +[ d7fec030683bde3f?A34enEnglish OpeningSymmetrical Variation, Normal Variationrnbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2|* - K b37ef2ab0d9bbfb5A40enEnglund Gambit Complex Declinedrnbqkbnr/pppp1ppp/8/3Pp3/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2 ' - a d2125d0efc5b48d5A40enEnglund Gambit Declined, Reversed Alekhinernbqkbnr/pppp1ppp/8/4p3/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2p$ - 1 3697b0f7962f33b4A41enOld Indian Defensernbqkbnr/ppp1pppp/3p4/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 t! - )? cf8a1db05ea9b687A43enBenoni DefenseZilbermints-Benoni Gambitrnbqkbnr/pp1ppppp/8/2p5/1P1P4/8/P1P1PPPP/RNBQKBNR b KQkq - 0 2 - )91a9c4acc1b038dcfA43enBenoni DefenseBenoni Gambit Acceptedrnbqkbnr/pp1ppppp/8/2P5/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2o - 1 df772b4f61394cfeA43enOld Benoni Defensernbqkbnr/pp1ppppp/8/2pP4/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2q - / 1ebada711a284b80A45enTrompowsky Attackrnbqkb1r/pppppppp/5n2/6B1/3P4/8/PPP1PPPP/RN1QKBNR b KQkq - 2 2r{ - #362e8ce1433840615A45enIndian GamePawn Push Variationrnbqkb1r/pppppppp/5n2/3P4/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2t - #%1ce7800f41222d42BA45enIndian GameOmega Gambitrnbqkb1r/pppppppp/5n2/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 Y^ 0 z nmYYY \wl - /9 4a172e4f0900b75aZA05enZukertort OpeningNimzo-Larsen Variationrnbqkb1r/pppppppp/5n2/8/8/1P3N2/P1PPPPPP/RNBQKB1R b KQkq - 0 2w}i - )- 6c443bb7753bb013A05enPolish OpeningZukertort Systemrnbqkb1r/pppppppp/5n2/8/1P6/5N2/P1PPPPPP/RNBQKB1R b KQkq - 0 2|f - /%6b9c0ca9f7d25493A05enZukertort OpeningQuiet Systemrnbqkb1r/pppppppp/5n2/8/8/4PN2/PPPP1PPP/RNBQKB1R b KQkq - 0 2c + /- 2b64353380d613d=A05enZukertort OpeningLemberger Gambitrnbqkb1r/pppppppp/5n2/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 2_ -/169a4c1a02cf3de9eA06enZukertort OpeningSantasiere's Follyrnbqkbnr/ppp1pppp/8/3p4/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2] - /+ dc3255b209236e8dA06enZukertort OpeningTennison Gambitrnbqkbnr/ppp1pppp/8/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2yZ - /!73fc26168f300649IA06enZukertort OpeningThe Potatornbqkbnr/ppp1pppp/8/3p4/P7/5N2/1PPPPPPP/RNBQKB1R b KQkq - 0 2 }W - 33 949338ae382eb8eaA06enNimzo-Larsen AttackClassical Variationrnbqkbnr/ppp1pppp/8/3p4/8/1P3N2/P1PPPPPP/RNBQKB1R b KQkq - 0 2T - // b6919b2fa6336853SA06enZukertort OpeningOld Indian Attackrnbqkbnr/ppp1pppp/8/3p4/8/3P1N2/PPP1PPPP/RNBQKB1R b KQkq - 0 2|Q - /+1c456d3af51e494dMA06enZukertort OpeningAmpel Variationrnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKBR1 b Qkq - 1 2sN - 5 34d3e3bb02740bbfA07enKing's Indian Attackrnbqkbnr/ppp1pppp/8/3p4/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 0 2mK - ' 9416c7dea1ac7880A09enRéti Openingrnbqkbnr/ppp1pppp/8/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 2H - +U 9a7062ed0096c74fOA10enEnglish OpeningAnglo-Dutch Defense, Hickmann Gambitrnbqkbnr/ppppp1pp/8/5p2/2P1P3/8/PP1P1PPP/RNBQKBNR b KQkq - 0 2 )yE - +# fd3a6e7303639758XA10enEnglish OpeningWade Gambitrnbqkbnr/ppppp1pp/8/5p2/2P3P1/8/PP1PPP1P/RNBQKBNR b KQkq - 0 2B - +/ 670b17fb255aa6f4A13enEnglish OpeningAgincourt Defensernbqkbnr/pppp1ppp/4p3/8/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2 X` - /1 b2c02d564415bfa3A06enZukertort OpeningSantasiere's Follyrnbqkbnr/ppp1pppp/8/3p4/1P6/5N2/P1PPPPPP/RNBQKB1R b KQkq - 1 2Ln? - / 3b0348655ed27a29)A15enEnglish Orangutanrnbqkb1r/pppppppp/5n2/8/1PP5/8/P2PPPPP/RNBQKBNR b KQkq - 0 2r< - +g 4a92d13f908277300A15enEnglish OpeningAnglo-Indian Defense, King's Knight Variationrnbqkb1r/pppppppp/5n2/8/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 29 - +i 6a61256b3a8694d4A16enEnglish OpeningAnglo-Indian Defense, Queen's Knight Variationrnbqkb1r/pppppppp/5n2/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 2 2 03 xN q i a Y Q I A 9 1 ) !   xof<^VNF>6.&{ri`WOG?7/'zqh3`xph`XPH@80( EyqiaYQIA91)!  { s k c [ S K C ; 3 + "    ~ v n f ^ V N F > 6 . %    W } u m e ] U M E = 5 - %    | t l d \ T L D < 4 , $    $ |tld\TLD<3*!vmd\TLD<4,$ zrjbZRJB:2*r~ud_6U}IG+{Izw&p]lh7fTMLE1;8.)X{4;b  9#C4}}\}4pomgc6RJED@?4T4$((g(/$$w0Dr~~q|}wiijb?TKHA>=&:')! .Z\*}d|{{.xttWrib8`q^I\UlSMFv97(31-"$2Vr8V *~zNyxsrb`HZAY UL1@ - /)fd5b10fbe5da209cA04enZukertort OpeningPolish Defensernbqkbnr/p1pppppp/8/1p6/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2 < - /If63633fe80f42a3a:A04enZukertort OpeningQueenside Fianchetto Variationrnbqkbnr/p1pppppp/1p6/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2r8 - /37b2eab40813096dcA04enZukertort OpeningSicilian Invitationrnbqkbnr/pp1ppppp/8/2p5/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2|6 + /+f25970109b74e1aA04enZukertort OpeningSlav Invitationrnbqkbnr/pp1ppppp/2p5/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2~4 - /+a4e5ec8fac0fd4ccA04enZukertort OpeningPirc Invitationrnbqkbnr/ppp1pppp/3p4/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2z2 - /#172772a4ed926597A04enZukertort OpeningRoss Gambitrnbqkbnr/pppp1ppp/8/4p3/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 20 - /?eb2888df66550df3A04enZukertort OpeningQueen's Gambit Invitationrnbqkbnr/pppp1ppp/4p3/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2 Rt $   % 121#Lp' RRRRe - % 2df54c975eb48346FA00enAmar Openingrnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1h - + aec84ba6d432356enA00enClemenz Openingrnbqkbnr/pppppppp/8/8/8/7P/PPPPPPP1/RNBQKBNR b KQkq - 0 1g - ' da980a31bdae85e2A00enKadas Openingrnbqkbnr/pppppppp/8/8/7P/8/PPPPPPP1/RNBQKBNR b KQkq - 0 1o - 3 ca9df64ccc1c97f1A01enNimzo-Larsen Attackrnbqkbnr/pppppppp/8/8/8/1P6/P1PPPPPP/RNBQKBNR b KQkq - 0 1g - % bb2deb150f00c115A02enBird Openingrnbqkbnr/pppppppp/8/8/5P2/8/PPPPP1PP/RNBQKBNR b KQkq - 0 1i - ' 9d5f7aee7e779da1A04enRéti Openingrnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1k - + ca18093c559e579bA10enEnglish Openingrnbqkbnr/pppppppp/8/8/2P5/8/PP1PPPPP/RNBQKBNR b KQkq - 0 1h - % 830eb9b20758d1deA40enQueen's Pawnrnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1g - # 823c9b50fd114196B00enKing's Pawnrnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1{ - -)dda8e4af4fdec378xA00enVan Geet OpeningLaroche Gambitrnbqkbnr/p1pppppp/8/1p6/8/2N5/PPPPPPPP/R1BQKBNR w KQkq - 0 2+}~ - -537d486f047968673sA00enVan Geet OpeningReversed Nimzowitschrnbqkbnr/pppp1ppp/8/4p3/8/2N5/PPPPPPPP/R1BQKBNR w KQkq - 0 2| - )78cca89a12b8a2d85A00enPolish OpeningSymmetrical Variationrnbqkbnr/p1pppppp/8/1p6/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2 z - )347233b56a1b635bbA00enPolish OpeningGrigorian Variationr1bqkbnr/pppppppp/2n5/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 1 2|x + )/abf321a4f609bc5A00enPolish OpeningBirmingham Gambitrnbqkbnr/pp1ppppp/8/2p5/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2}v - )17eb40e5bc7e74303A00enPolish OpeningOutflank Variationrnbqkbnr/pp1ppppp/2p5/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2xt - )'78a1852d0eafbd66fA00enPolish OpeningDutch Defensernbqkbnr/ppppp1pp/8/5p2/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2r - )56d427c500aa5fdc1A00enPolish OpeningKarniewski Variationrnbqkb1r/pppppppp/7n/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 1 2wp - )%62e75d87c1e4bf7e~A00enMieses OpeningReversed Ratrnbqkbnr/pppp1ppp/8/4p3/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 2yn - /38cacfcf709012fd9A00enHungarian OpeningSicilian Invitationrnbqkbnr/pp1ppppp/8/2p5/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2m - / 6add2d59f64624a4A00enHungarian Openingrnbqkbnr/pppppppp/8/8/8/6P1/PPPPPP1P/RNBQKBNR b KQkq - 0 1{l - /'feb24bc048ce097azA00enHungarian OpeningDutch Defensernbqkbnr/ppppp1pp/8/5p2/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2{j - /'ea9edd8462f2db2e.A00enHungarian OpeningMyers Defensernbqkbnr/pppppp1p/8/6p1/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2h - /783697e028dc9b6efA00enHungarian OpeningSymmetrical Variationrnbqkbnr/pppppp1p/6p1/8/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2|f - /)313319ac5bbc65322A00enHungarian OpeningIndian Defensernbqkb1r/pppppppp/5n2/8/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 1 2qd - 5 7783b322f16685d3A00enLasker Simul Specialrnbqkbnr/ppppppp1/8/7p/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2vb - %'7119f157406c3c5f_A00enGrob OpeningAlessi Gambitrnbqkbnr/ppppp1pp/8/5p2/6P1/8/PPPPPP1P/RNBQKBNR w KQkq - 0 2h - % e57697cefee41181A00enGrob Openingrnbqkbnr/pppppppp/8/8/6P1/8/PPPPPP1P/RNBQKBNR b KQkq - 0 1t` - %#653567136a50ee0b A00enGrob OpeningDouble Grobrnbqkbnr/pppppp1p/8/6p1/6P1/8/PPPPPP1P/RNBQKBNR w KQkq - 0 2y^ - '-5adbfaec291a7a68hA00enKadas OpeningSchneider Gambitrnbqkbnr/pppppp1p/8/6p1/7P/8/PPPPPPP1/RNBQKBNR w KQkq - 0 2\ - ?-aa999c5957b12accA01enNimzowitsch-Larsen AttackPolish Variationrnbqkbnr/p1pppppp/8/1p6/8/1P6/P1PPPPPP/RNBQKBNR w KQkq - 0 2 @ c ! L Z2 sT+ ( - [ 96884725f533f1322E85daKongeindisk, Sämisch, ortodoks variantrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7' - c 10564105aad82f77wE86daKongeindisk, Sämisch, ortodoks, 7. Sge2 c6rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8& - c 822caceadd18fcccE86daKongeindisk, Sämisch, ortodoks, 7. Sge2 c6rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 7 % - Y 2c8004766c15676foE87daKongeindisk, Sämisch, ortodoks, 7. d5rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7 $ - ] befae9991bd5b4d4E88daKongeindisk, Sämisch, ortodoks 7. d5 c6rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 8# - e d92ead1f9394b490E89daKongeindisk, Sämisch, ortodoks hovedvariantrnbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 9" - e aa5e025633feb92a*E89daKongeindisk, Sämisch, ortodoks hovedvariantrnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 0 8v! - 3 d08513f3fa99752d-E90daKongeindisk, 5. Sf3rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5u - 3 a9ad7dbd2ee5d665eE91daKongeindisk, 6. Le2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 6 - G 23d575f7bd002e53SE92daKongeindisk, klassisk variantrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 7 - c aa3e4df9c48e55c2E93daKongeindisk, Petrosjan system, Hovedvariantr1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 8 - G 5da00ec3c1f3f543CE94daKongeindisk, ortodoks variantrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7  - Y eaf77b15a6f3b39bE95daKongeindisk, ortodoks, 7...Nbd7, 8.Re1r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 8 - g 8d17a0c2b38a2613E96daKongeindisk, ortodoks, 7...Nbd7, Hovedvariantr1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10 + g b0d1503d0162a83E96daKongeindisk, ortodoks, 7...Nbd7, Hovedvariantr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 9 - g 788d96fad1336020 E96daKongeindisk, ortodoks, 7...Nbd7, Hovedvariantr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9@ - C f64dd621d0625040@E97daKongeindisk, ortodoks, Aronin-Taimanov variant (jugoslavisk angreb / Mar del Plata variant)r1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8 - i dfc12ba3297d16efE98daKongeindisk, ortodoks, Aronin-Taimanov, 9. Se1r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 9 - u dc58a8ad9af3ddb5E99daKongeindisk, ortodoks, Aronin-Taimanov, hovedvariantr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 w - - 0 11 - u 4837ce34247bf06bkE99daKongeindisk, ortodoks, Aronin-Taimanov, hovedvariantr1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10k - / 8da7a73e5fdd72dcA00enAnderssen Openingrnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR b KQkq - 0 1e - % 2df2e8f47b022952RA00enWare Openingrnbqkbnr/pppppppp/8/8/P7/8/1PPPPPPP/RNBQKBNR b KQkq - 0 1f - ' 41dd464bfbc3d352RA00enSodium Attackrnbqkbnr/pppppppp/8/8/8/N7/PPPPPPPP/R1BQKBNR b KQkq - 1 1k - - bdac8ebad4737e45EA00enVan Geet Openingrnbqkbnr/pppppppp/8/8/8/2N5/PPPPPPPP/R1BQKBNR b KQkq - 1 1j - ) eccee3b4b02790b8A00enPolish Openingrnbqkbnr/pppppppp/8/8/1P6/8/P1PPPPPP/RNBQKBNR b KQkq - 0 1l - / 30e16e80c6e1f31aA00enSaragossa Openingrnbqkbnr/pppppppp/8/8/8/2P5/PP1PPPPP/RNBQKBNR b KQkq - 0 1i - ) e89f55cd52014748HA00enMieses Openingrnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR b KQkq - 0 1o - 5 eb16d4aa32ce74388A00enVan't Kruijs Openingrnbqkbnr/pppppppp/8/8/8/4P3/PPPP1PPP/RNBQKBNR b KQkq - 0 1l - - 288a7029b65b13edA00enGedult's Openingrnbqkbnr/pppppppp/8/8/8/5P2/PPPPP1PP/RNBQKBNR b KQkq - 0 1 lS $  l C5#*(a:D - M 1f38c1aaeacef1e0E65daKongeindisk, jugoslavisk, 7. O-Ornbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7C + a edd5a1b6279c2beE66daKongeindisk, fianchetto, jugoslavisk Pannor1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8B - a b4d51948fb5f54e3E66daKongeindisk, fianchetto, jugoslavisk Pannor1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8A - Q b4df106d89d2cc41AE67daKongeindisk, fianchetto med ...Sd7r1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7@ - k 84d56e5b8d44526dmE68daKongeindisk, fianchetto, klassisk variant, 8.e4r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8? - i fe5c5e0a38274824$E69daKongeindisk, fianchetto, klassisk hovedvariantr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9> - i 16af83b4fa8481d6E69daKongeindisk, fianchetto, klassisk hovedvariantr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9q= - 1 325b696440075d7d}E70daKongeindisk, 4. e4rnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4q< - 1 f65c642cab87e077wE70daKongeindisk, 4. e4rnbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4; - W e31222bb50dcdde2E71daKongeindisk, Makagonov system (5. h3)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5{: - = 2707444472a8cc28(E72daKongeindisk med e4 og g3rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5v9 - 3 78617cfc935a5eb3E73daKongeindisk, 5. Le2rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 58 - G 52e217d309ce67edE74daKongeindisk, Averbakh, 6...c5rnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 77 - S 9e9da6b188ca61e2E75daKongeindisk, Averbakh, hovedvariantrnbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8~6 - E f6f782088bee2999E76daKongeindisk, firbonde-angrebrnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 55 - U 8fdfec465f928ad1E77daKongeindisk, firbonde-angreb, 6. Le2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 64 - g b2cad11ec833e091E78daKongeindisk, firbonde-angreb, med Le2 and Sf3rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7 3 - a 52a55578345da5f4E79daKongeindisk, firbonde-angreb, hovedvariantr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9 2 - a 21adee94b567be7azE79daKongeindisk, firbonde-angreb, hovedvariantr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9 1 - a 8a403676a4f61b79yE79daKongeindisk, firbonde-angreb, hovedvariantrnbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8 0 - a edd46b2bb5c78957WE79daKongeindisk, firbonde-angreb, hovedvariantrnbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8/ - G 6550193432b5fb61aE80daKongeindisk, Sämisch variantrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5. - I 6ff8f483e7ec128aE81daKongeindisk, Sämisch, 5...O-Ornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6- - m 7799067f9855be9fE82daKongeindisk, Sämisch, dobbeltfianchetto variantrnbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7, - m 1cf04f6f66d60904E82daKongeindisk, Sämisch, dobbeltfianchetto variantrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6+ - I b71d978d7747ac07E83daKongeindisk, Sämisch, 6...Sc6r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 7* - _ c1f569de2fcb31efE84daKongeindisk, Sämisch, Panno hovedvariant1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R w KQ - 2 9) - _ 5956c23e79f58685E84daKongeindisk, Sämisch, Panno hovedvariantr1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R b KQ - 1 8 lV a R # Z1 zZA./ ` - G d6269a54a246ded9E43daNimzo-indisk, Fischer variantrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5 _ - W c282719b8a6dd327'E44daNimzo-indisk, Fischer variant, 5. Se2rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5^ + i d92237fc14cd1d9E45daNimzo-indisk, 4. e3, Bronstein (Byrne) variantrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6x] - ; b7e73ef3899c80a9E46daNimzo-indisk, 4. e3 O-Ornbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5\ - I e2ea9f51b01c42daE47daNimzo-indisk, 4. e3 O-O, 5.Ld3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5[ - Q 6780bd452cc80cfcE48daNimzo-indisk, 4. e3 O-O, 5. Ld3 d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6Z - W c6f09d54d5603ff6E49daNimzo-indisk, 4. e3, Botvinnik systemrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 0 7Y - W 8d25f765783cd0b6E49daNimzo-indisk, 4. e3, Botvinnik systemrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7X - W ac1c8c63658482bcE49daNimzo-indisk, 4. e3, Botvinnik systemrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6W - e 6c83d205e17ae194E50daNimzo-indisk, 4. e3 e8g8, 5. Sf3, uden ...d5rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5V - W e9e9f0117daeafb2E51daNimzo-indisk, 4. e3 e8g8, 5. Sf3 d7d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6U - c d78d18a3baadda5aZE52daNimzo-indisk, 4. e3, hovedvariant med ...b6rnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7 T - c bce451b3442e6dc1E52daNimzo-indisk, 4. e3, hovedvariant med ...b6rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 6 S - c 5a95801dbb6966bcE53daNimzo-indisk, 4. e3, hovedvariant med ...c5rnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7R - k bf5cf670aa975084E54daNimzo-indisk, 4. e3, Gligoric system med 7...dcrnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 b - - 0 8Q - k f6e6c21b95a4534fOE54daNimzo-indisk, 4. e3, Gligoric system med 7...dcrnbq1rk1/pp3ppp/4pn2/2p5/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8P - { 8cbf8d2d4a3fbd48HE55daNimzo-indisk, 4. e3, Gligoric system, Bronstein variantr1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 9O - g 8f0d23cbd60b18afE56daNimzo-indisk, 4. e3, hovedvariant med 7...Sc6r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8N - i 2e7d03da2fa32ba5E58daNimzo-indisk, 4. e3, hovedvariant med 8...Lxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 9M - i 65a869eb82ffc4e5E58daNimzo-indisk, 4. e3, hovedvariant med 8...Lxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 9L - i 449112ed9f4796efE58daNimzo-indisk, 4. e3, hovedvariant med 8...Lxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8K - O b5c10e8342aec68dE59daNimzo-indisk, 4. e3, hovedvariantr1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1 b - - 0 10J - O fc7b3ae87d9dc546FE59daNimzo-indisk, 4. e3, hovedvariantr1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10qI - 3 bd7741389222a904E60daKongeindisk forsvarrnbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3|H - C 46e0599a50c02bddE61daKongeindisk forsvar, 3. Sc3rnbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3G - I 3864a5faf1ce101fE62daKongeindisk, fianchettovariantrnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5 F - Y 80533915e338a742BE63daKongeindisk, fianchetto, Panno variantr1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8E - c 614dba9e963d2af0E64daKongeindisk, fianchetto, jugoslavisk systemrnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7 kv e 3  x dJ!aB._{ - g fbb955d3448440b1E25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5z -  fa4e22fb5a2a51355E26daNimzo-indisk, Sämisch variant, 4. a3 Lxc3+ 5. bxc3 c5 6. e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR b KQkq - 0 6y -  576360497e75d991E26daNimzo-indisk, Sämisch variant, 4. a3 Lxc3+ 5. bxc3 c5 6. e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6x - [ bbba5c50546b3b07E27daNimzo-indisk, Sämisch variant, 5...0-0rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6w - W 16971ee27034b3a3E28daNimzo-indisk, Sämisch variant, 6. e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6v - W 5d4274d3dd685ce3E28daNimzo-indisk, Sämisch variant, 6. e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b1P3/1P3PPP/R1BQKBNR w KQ - 0 6u - W 7c7b0fd5c0d00ee9E28daNimzo-indisk, Sämisch variant, 6. e3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N1P3/1P3PPP/R1BQKBNR b KQ - 0 5t + e e06b60ca762dfaeE29daNimzo-indisk, Sämisch variant, hovedvariantr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 1 8s + e 4ae5bbb723b3645EE29daNimzo-indisk, Sämisch variant, hovedvariantr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQkq - 0 7r - e 4f7b318adf67d905E29daNimzo-indisk, Sämisch variant, hovedvariantr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQkq - 0 7q - e 6e424a8cc2df8b0fE29daNimzo-indisk, Sämisch variant, hovedvariantr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQkq - 0 6p - e a5de7baa8b93054fOE29daNimzo-indisk, Sämisch variant, hovedvariantr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQkq - 2 6o + e e33a3489a02a04cLE29daNimzo-indisk, Sämisch variant, hovedvariantrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5n - K d638c6c0c8103a2e.E30daNimzo-indisk, Leningrad variantrnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4m - g 7b83e1f9186385edE31daNimzo-indisk, Leningrad variant, hovedvariantrnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7l - I a17be3eb6a4cdd82E32daNimzo-indisk, klassisk variantrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4 k + [ a963b097bdd7881E33daNimzo-indisk, klassisk variant, 4...Sc6r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5j - S 2411c1fff69893a4E34daNimzo-indisk, klassisk, Noa variantrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5i - o 152f83f64ef34772rE35daNimzo-indisk, klassisk, Noa variant, 5. cxd5 exd5rnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6h - o 2a3b5a32545687b9E35daNimzo-indisk, klassisk, Noa variant, 5. cxd5 exd5rnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5g - a ef8df0d9bfd41de4E36daNimzo-indisk, klassisk, Noa variant, 5. a3rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5f -  e249c99f81c0d1bbE37daNimzo-indisk, klassisk, Noa variant, Hovedvariant, 7. Dc2rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR b KQkq - 2 7e - I 470a3245950bd6ffE38daNimzo-indisk, klassisk, 4...c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5d - U 3241fd22a34e6878xE39daNimzo-indisk, klassisk, Pirc variantrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6tc - 3 bd4fd3445cc56942BE40daNimzo-indisk, 4. e3rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4yb - 9 5b3e02eaa382623f?E41daNimzo-indisk, 4. e3 c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5a - c 4f9ae9258ba96fc1E42daNimzo-indisk, 4. e3 c5, 5. Se2 (Rubinstein)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 Ji?   l VS+qflL>Jy - ? f9d00ca49969ca20 E10daDronningebondespil 3. Sf3rnbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3s - 3 309165a2d29e0202E11daBogo-Indisk forsvarrnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4z - ; 92b945b467ea7dbbE12daDronningeindisk forsvarrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4  - W 1edd0807484d289dE13daDronningeindisk, 4. Sc3, hovedvariantrn1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 7  - W ae4d40833a1f8706E13daDronningeindisk, 4. Sc3, hovedvariantrnbqk2r/p1pp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6  - W f4c22840c9a1a59dE13daDronningeindisk, 4. Sc3, hovedvariantrnbqk2r/p1pp1pp1/1p2pn1p/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6x - 9 3f94070643b5f51fE14daDronningeindisk, 4. e3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4z - 9 be5ffef5873da583E15daDronningeindisk, 4. g3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4 - S 727efc0af3751a43CE16daDronningeindisk, Capablanca variantrn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6} - C aff3e6e372297ef0E17daDronningeindisk, 5. Lg2 Le7rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6 - e 20b968c21961ced2E18daDronningeindisk, gammel hovedvariant, 7. Sc3rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 7 - g 2910a3204606afc5E19daDronningeindisk, gammel hovedvariant, 9. Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 9 - g 1921ebd65ef08941AE19daDronningeindisk, gammel hovedvariant, 9. Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 9 - g aba85640b9fe7f4cLE19daDronningeindisk, gammel hovedvariant, 9. Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 8 - g 1ab1245dab284328(E19daDronningeindisk, gammel hovedvariant, 9. Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8u - 5 106291f6789ae1e6E20daNimzo-indisk forsvarrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 - Q cb067d00107c80dbE21daNimzo-indisk, Trespringer- variantrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4 - K 2a9b324e4da14900E22daNimzo-indisk, Spielmann variantrnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4 - a 18e419d2406bb012E23daNimzo-indisk, Spielmann, 4...c5, 5. dc Sc6r1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6  - a b309c13051fa1511E23daNimzo-indisk, Spielmann, 4...c5, 5. dc Sc6rnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5  - a cceae3e0b2e6427d}E23daNimzo-indisk, Spielmann, 4...c5, 5. dc Sc6rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5} - I b112b1e78132d2ecE24daNimzo-indisk, Sämisch variantrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5 - I fac7dbd62c6e3dacE24daNimzo-indisk, Sämisch variantrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5 - I dbfea0d031d66fa6E24daNimzo-indisk, Sämisch variantrnbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4 - g b2923fa1e0a56cdbE25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 7 - g bcb8a46c426b78c6E25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 7~ - g 5ac975c2bd2c73bbE25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 6} - g 111c1ff310709cfbE25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b2P2/1P2P1PP/R1BQKBNR w KQkq - 0 6| - g 302564f50dc8cef1E25daNimzo-indisk, Sämisch variant, Keres variantrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N2P2/1P2P1PP/R1BQKBNR b KQkq - 0 5 zm q r t r af|`I4 6 - I d483e34a37d34440@D93daGrünfeld med 5. Lf4 O-O 6. e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 65 - I 79aea1f8138ccce4D93daGrünfeld med 5. Lf4 O-O 6. e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6s4 + - 57fe87c7bea47c8D94daGrünfeld, 5. e3rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 53 - I 352ea6739b8806c5D95daGrünfeld med 5. e3 O-O 6. Db3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 62 - A 92ab09766a8e678aD96daGrünfeld, russisk variantrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 3 51 - U a11f4cadad02beaaD97daGrünfeld, russisk variant med 7. e4rnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 70 - U 651841e5468203a0D97daGrünfeld, russisk variant med 7. e4rnbq1rk1/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R w KQ - 1 7/ - U 6fb0ac5293dbea4bKD97daGrünfeld, russisk variant med 7. e4rnbqk2r/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 0 6. - U 40ad304438b08969iD97daGrünfeld, russisk variant med 7. e4rnbqk2r/ppp1ppbp/5np1/8/2pP4/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 0 6- - S a3cc869fea87b040@D98daGrünfeld, russisk, Smyslov variantrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8, - ] 814ca588eccd530eD99daGrünfeld forsvar, Smyslov, hovedvariantrn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9+ - ] 29833ed5c671a23b;D99daGrünfeld forsvar, Smyslov, hovedvariantrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R w KQ - 3 9 * - ] d0c43d736bbdabceD99daGrünfeld forsvar, Smyslov, hovedvariantrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R b KQ - 2 8p) - 1 22b4e052f18fab1dE00daDronningebondespilrnbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3r( - / 3ec85a7ac061e57azE01daKatalansk, lukketrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4z' - ? 3e6ade075261f9e2E02daKatalansk, åbent, 5. Da4rnbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5y& - ? ecce6348925f0b99E02daKatalansk, åbent, 5. Da4rnbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5% - S cac927bbeca72d91E03daKatalansk, åbent, Aljechin variantr1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 6$ + S d89a55ab2c9142e.E03daKatalansk, åbent, Aljechin variantr1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6y# - ? 37aa8fbefab96aa4E04daKatalansk, åbent, 5. Sf3rnbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5" - O 2366fc513012c6355E05daKatalansk, åbent, klassisk linjernbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6{! - ? f160c563622c28d6E06daKatalansk, lukket, 5. Sf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5{ - ? 2a0429950aca49ebE06daKatalansk, lukket, 5. Sf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5| - C b65e28bd2b2ef7e1E07daKatalansk, lukket, 6...Sbd7r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7{ - C 85bd53e0cb861a2d-E07daKatalansk, lukket, 6...Sbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6{ - C fbc828d4b775c13d=E07daKatalansk, lukket, 6...Sbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6y + ? 7475aa039f8cb85E08daKatalansk, lukket, 7. Dc2r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 b - - 2 7 - K cc530f2dd4c5b00eE09daKatalansk, lukket, hovedvariantr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8 - K 4490e61e2fc1f0afE09daKatalansk, lukket, hovedvariantrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5 - K 505c95f1e56a5c3e>E09daKatalansk, lukket, hovedvariantrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4 ]y L # F m\K"(1BV]}S - A f973d836f92fcd1dD81daGrünfeld; russisk variantrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4tR - - 18de9d0f55748f98D82daGrünfeld 4. Lf4rnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4qQ + - fe70fbc5f35257d}D83daGrünfeld gambitrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6sP + - 54fe20b8a6ccc96D83daGrünfeld gambitrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5rO - - a862a0b9ae3344322D83daGrünfeld gambitrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5uN - ? a08f71815daca1dbD84daGrünfeld gambit modtagetrnb2rk1/ppB1ppbp/6p1/3q4/3P4/4P3/PP3PPP/R2QKBNR b KQ - 0 8wM - ? d3b26261bbfe33abD84daGrünfeld gambit modtagetrnb2rk1/ppp1ppbp/6p1/3q4/3P1B2/4P3/PP3PPP/R2QKBNR w KQ - 0 8xL - ? 4f01d6352c22099aD84daGrünfeld gambit modtagetrnbq1rk1/ppp1ppbp/6p1/3N4/3P1B2/4P3/PP3PPP/R2QKBNR b KQ - 0 7yK - ? 9e23ee3c421e2c3c -  d31d607642aa9967gD88daGrünfeld, Spassky variant, hovedvariant, 10...cd, 11. cdr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQkq - 2 9= - o 7ec069fa27e6f754TD89daGrünfeld, Spassky variant, hovedvariant, 13. Ld3r2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1 w - - 1 14< - o d07d17b687f107bfD89daGrünfeld, Spassky variant, hovedvariant, 13. Ld3r2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 0 13; - o 7ccbc2fae3590b99D89daGrünfeld, Spassky variant, hovedvariant, 13. Ld3r2q1rk1/pp2ppbp/6p1/n7/3pP1b1/2PBBP2/P3N1PP/R2Q1RK1 w - - 0 13: - o 23d578cf9ead625f_D89daGrünfeld, Spassky variant, hovedvariant, 13. Ld3r2q1rk1/pp2ppbp/6p1/n1p5/3PP1b1/2PBBP2/P3N1PP/R2Q1RK1 b - - 2 129 - G 18ee9778a4f204c6D90daGrünfeld, Trespringervariantrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 48 - G 6e08fdf8ef3f14a4D91daGrünfeld, Trespringervariantrnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5u7 - / 73064c4fc6d5250fD92daGrünfeld, 5. Lf4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 y   + 9"iG0(,9q - a 13db44a27e603dcbD69daQGD; Ortodokst forsvar, klassisk, 13. dxe5r1b2rk1/pp1nqppp/2p5/4P3/2B5/2R1PN2/PP3PPP/3Q1RK1 b - - 0 13wp - 7 56ac851dae3c0853SD70daNeo-Grünfeld forsvarrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5P2/PP2P1PP/RNBQKBNR w KQkq - 0 4to - 5 8073272645a02588D71daNeo-Grünfeld, 5. cdrnbqk2r/ppp1ppbp/6p1/3n4/3P4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 6un - 5 1f9d5d6bfa4538d4D71daNeo-Grünfeld, 5. cdrnbqk2r/ppp1ppbp/5np1/3P4/3P4/6P1/PP2PPBP/RNBQK1NR b KQkq - 0 5m - O 2fca5d5384ec764eND74daNeo-Grünfeld, 6. cd Sxd5, 7. O-Ornbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 7l - O 51bf2667f81fad5e^D74daNeo-Grünfeld, 6. cd Sxd5, 7. O-Ornbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 7k - O ce515c2a47fab002D74daNeo-Grünfeld, 6. cd Sxd5, 7. O-Ornbq1rk1/ppp1ppbp/5np1/3P4/3P4/5NP1/PP2PPBP/RNBQK2R b KQ - 0 6j - O c07bc7e7e534a41fD74daNeo-Grünfeld, 6. cd Sxd5, 7. O-Ornbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6 i - c 322c945fb949ffeaD75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 8 h - c 4c59ef6bc5ba24faD75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 8 g - c aa283ec53afd2f87D75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 1 7 f - c 1fd81db87710f7feD75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 0 7e - c 803667f5c8f5eaa2D75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/ppp1ppbp/5np1/3P4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQ - 0 6d - c 8e1cfc386a3bfebfD75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 0 6 c + c b76de2cf6efb099D75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc3rnbq1rk1/ppppppbp/5np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQ - 0 5b + W 651d25c9ca91d00D76daNeo-Grünfeld, 6. cd Sxd5, 7. O-O Sb6rnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 8ua - 7 be0ebcd399c77f0fD77daNeo-Grünfeld, 6. O-Ornbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6u` - 7 322d23f7dac8d408D77daNeo-Grünfeld, 6. O-Ornbq1rk1/ppp1ppbp/5np1/3p4/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 0 6s_ - 7 b74701e3461c9a2e.D77daNeo-Grünfeld, 6. O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b - - 4 5s^ - 7 c9327ad73aef413e>D77daNeo-Grünfeld, 6. O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R w KQ - 3 5u] - 7 c39a9760efb6a8d5D77daNeo-Grünfeld, 6. O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4v\ - 7 766ab41da25b70acD77daNeo-Grünfeld, 6. O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4z[ - = 2c74513cee07acb4D78daNeo-Grünfeld, 6. O-O c6rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7yZ - = a91e732872d3e292D78daNeo-Grünfeld, 6. O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6yY - = d76b081c0e203982D78daNeo-Grünfeld, 6. O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6vX - = 4511e5f379e0ea399D78daNeo-Grünfeld, 6. O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQ - 2 5wW - = f0e1c68e340d3240@D78daNeo-Grünfeld, 6. O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQ - 1 5V - S 512e65b8eca3b513D79daNeo-Grünfeld, 6. O-O, hovedvariantrnbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8U - S 225ecaf14cc9b8a9D79daNeo-Grünfeld, 6. O-O, hovedvariantrnbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7tT - / c38a7b8ecc1465fbD80daGrünfeld forsvarrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 atb I  G #x;+*18Qa{ - 9 1af5395cdc3ee9a0D49daQGD; Meraner, 11. Sxb5r1bqkb1r/3n1ppp/p3pn2/1p2P3/3p4/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 11m - # 9a138dd21f33bc2a*D50daQGD; 4. Lg5rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4t - - a9f0f68fff9b51e6D51daQGD; 4. Lg5 Sbd7r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5k -  4dc3b524c4e26bc4D52daQGDr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 6r - + 8edffe3dd59810bbD53daQGD; 4. Lg5 Le7rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5 - I 56c19e75a78c252a*D54daQGD; Anti-neo-Ortodoks variantrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 6 - I 295a5138249e71f4D54daQGD; Anti-neo-Ortodoks variantrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6o - # f23ebdce4c7810c9D55daQGD; 6. Sf3rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6v ) 5 4ed2f49a5bf6bdD56daQGD; Laskers forsvarrnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8 - Q eec36cc8c45017dfD57daQGD; Laskers forsvar, hovedvariantrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R b KQ - 0 10 - Q 6d31de153239efc6D57daQGD; Laskers forsvar, hovedvariantrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2n1PN2/PP3PPP/R2QKB1R w KQ - 0 10 - Q dfb86383d53719cbD57daQGD; Laskers forsvar, hovedvariantrnb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9 - i 512fd77bd691ccdcD58daQGD; Tartakower (Makagonov-Bondarevsky) systemrnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8 -  c0eb36fbcbbac59dD59daQGD; Tartakower (Makagonov-Bondarevsky) system, 8. cd Sxd5rnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9y - 9 c1ddc693acd0fd05D60daQGD; Ortodokst forsvarr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7  - a 70c4b48ebe06c161aD61daQGD; Ortodokst forsvar, Rubinstein variantr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 2 7~ - w 989ffeede38fde01D62daQGD; Ortodokst forsvar, 7. Dc2 c5, 8. cd (Rubinstein)r1bq1rk1/pp1nbppp/4pn2/2pP2B1/3P4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 0 8} - w 96b565204141ca1cD62daQGD; Ortodokst forsvar, 7. Dc2 c5, 8. cd (Rubinstein)r1bq1rk1/pp1nbppp/4pn2/2pp2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 0 8| - I be4609de2fc2a9dbD63daQGD; Ortodokst forsvar, 7. Tc1r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R b K - 2 7{ - s 9d25962c4ad44604D64daQGD; Ortodokst forsvar, Rubinstein angreb (med Tc1)r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R b K - 1 8z - { 41f8fc120f3aaac5D65daQGD; Ortodokst forsvar, Rubinstein angreb, Hovedvariantr1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R b K - 0 9y - W 793145936182b813D66daQGD; Ortodokst forsvar, Ld3 varianterr1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2NBPN2/PP3PPP/2RQK2R b K - 1 8%x -  269d9733c24d208eD67daQGD; Ortodokst forsvar, Ld3 line, Capablancas befrielsesmanøvrer1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 1 10w - ] 8f46bbe076558abbD68daQGD; Ortodokst forsvar, klassisk variantr1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/3Q1RK1 w - - 0 13v - ] 8b9f673152b567d6D68daQGD; Ortodokst forsvar, klassisk variantr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2R1PN2/PP3PPP/3Q1RK1 b - - 0 12u - ] 969913a34b8928b5D68daQGD; Ortodokst forsvar, klassisk variantr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2n1PN2/PP3PPP/2RQ1RK1 w - - 0 12t - a b967933177d7a46bkD69daQGD; Ortodokst forsvar, klassisk, 13. dxe5r1b2rk1/pp3ppp/2p5/4q3/2B5/2R1P3/PP3PPP/3Q1RK1 w - - 0 15s + a 445c52c821e7283D69daQGD; Ortodokst forsvar, klassisk, 13. dxe5r1b2rk1/pp2qppp/2p5/4N3/2B5/2R1P3/PP3PPP/3Q1RK1 b - - 0 14r - a 6598c8c75f11d6e0D69daQGD; Ortodokst forsvar, klassisk, 13. dxe5r1b2rk1/pp2qppp/2p5/4n3/2B5/2R1PN2/PP3PPP/3Q1RK1 w - - 0 14     ~ i|- - E 3b053218f098d5c5D28daQGA; klassisk variant 7. De2rnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7, - G 229500ab92419787D29daQGA; klassisk variant 8...Lb7rn1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9|+ - G 9205482fe013381cD29daQGA; klassisk variant 8...Lb7rnbqkb1r/5ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 b kq - 1 8v* - ; fc30f6b3c0a1a4adD30daDronninggambit afslåetrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3j) + # 7a7ee1102432674tD31daQGD, 3. Sc3rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3u( - 7 e1d63fbffd042d09 D32daQGD; Tarrasch forsvarrnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4' - c 8c87f2e3dccfe5d9D33daQGD; Tarrasch, Schlechter-Rubinstein systemr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6 & - c a06149a23c183de1D33daQGD; Tarrasch, Schlechter-Rubinstein systemr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6z% - 9 76559684f673d0a7D34daQGD; Tarrasch, 7...Le7r1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8n$ - % 5c49dae4afb967e2D35daQGD; 3...Sf6rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4# - g 884e5029c24e8723#D36daQGD; afbytning, positionsspilsvariant, 6. Dc2rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 6o" - # 872d3612c75f06dfD37daQGD; 4. Sf3rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4x! - 5 4e6c5f148ca8cefdD38daQGD; Ragozin variantrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5} - A 5a3031106e1cfbd6D39daQGD; Ragozin, Wien variantrnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6~ - A 883608223c2215355D39daQGD; Ragozin, Wien variantrnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5~ - A 615ce7bc38180da2D40daQGD; Semi-Tarrasch forsvarrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5| - ? 6f767c719ad619bfD41daQGD; Semi-Tarrasch, 5. cdrnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5| - A a3553dce297deb377D42daQGD; Semi-Tarrasch, 7. Ld3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 7} - A f6589c6c10fd2944DD42daQGD; Semi-Tarrasch, 7. Ld3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 7} - ? 1557dbfdb09fd564dD43daQGD; Semi-slavisk forsvarrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5} + C 10bb5f9522be04fOD44daQGD; Semi-slavisk 5. Lg5 dcrnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 - C d30d8ccb00150eacD44daQGD; Semi-slavisk 5. Lg5 dcrnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5| - ; b87a994f94c05dc0D45daQGD; Semi-slavisk 5. e3rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5{ - ; 631e75b9fc263cfdD45daQGD; Semi-slavisk 5. e3rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5{ - ; 15698788e404acafD45daQGD; Semi-slavisk 5. e3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4y - ; b844c53ac05b240b D45daQGD; Semi-slavisk 5. e3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4} - = de9443b04de8727fD46daQGD; Semi-slavisk 6. Ld3r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6{ - = 45284ee920e59f57WD47daQGD; Semi-slavisk 7. Lc4r1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7{ + = c927a821fd69c9cD47daQGD; Semi-slavisk 7. Lc4r1bqkb1r/pp1n1ppp/2p1pn2/8/2pP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7w - 5 39b3e62fe28c4b6ajD48daQGD; Meraner, 8...a6r1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9y - 9 fa85fdcdb945771bD49daQGD; Meraner, 11. Sxb5r1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 11 F4 A _ a f V,qO6-6FwL - ; 21aadc60c91291fcD07daQGD; Tschigorin forsvarr1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3qK ) 7 3f0cc84b66ccc9D08daQGD; Albins modgambitrnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3}J - E 22a016b116cc4d58XD09daQGD; Albins modgambit, 5. g3r1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5rI - 5 183de96daf43e744DD10daQGD; Slavisk forsvarrnbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3|H - E c359059bc7a58679yD11daQGD; Slavisk forsvar, 3. Sf3rnbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3G - K b6831a52f9e546c6D12daQGD; Slavisk forsvar, 4. e3 Lf5rn1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5F - [ e5ed05ea68fbde48HD13daQGD; Slavisk forsvar, afbytningsvariantrnbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5 E - [ 969daaa3c891d3f2D13daQGD; Slavisk forsvar, afbytningsvariantrnbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4 D - [ edda4aa5950d1a7c|D14daQGD; Slavisk forsvar, afbytningsvariantr2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 6 7 C - [ 6ec3232b22e813f1D14daQGD; Slavisk forsvar, afbytningsvariantr1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 6 B - [ b597c5aabb88f992D14daQGD; Slavisk forsvar, afbytningsvariantr1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 6 A - [ 1e7a1d48aa195c91D14daQGD; Slavisk forsvar, afbytningsvariantrnbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 5@ - [ c51ef1bec2ff3dacD14daQGD; Slavisk forsvar, afbytningsvariantrnbqkb1r/pp2pppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 5? - [ 9ef0c54b6f057c3a:D14daQGD; Slavisk forsvar, afbytningsvariantrnbqkbnr/pp2pppp/8/3p4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4> - [ 6567dde9ade7fee3D14daQGD; Slavisk forsvar, afbytningsvariantrnbqkbnr/pp2pppp/8/3p4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4= - u 632029cca8bd45366D15daQGD; Slavisk modtaget, afbytningsvariant, 6. Lf4 Lf5rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4< - W daef6e1297107e1bD16daQGD; Slavisk modtaget, Alapin variantrnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5 ; - Y 59f6079c20f57796D17daQGD; Slavisk forsvar, tjekkisk forsvarrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6{: - 9 f4db452e04aaff322D18daQGD; Hollandsk variantrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6y9 - 9 d1f9164e821838e3D19daQGD; Hollandsk variantrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8z8 - 9 af8c6d7afeebe3f3D19daQGD; Hollandsk variantrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8{7 - 9 66cd047cb51c2bd1D19daQGD; Hollandsk variantrn1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7{6 - 9 82acb71f1c886f60`D19daQGD; Hollandsk variantrn1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7r5 - ; 58413db08abdda1cD20daDronninggambit modtagetrnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3h4 - # 8325d146e25bbb21!D21daQGA, 3. Sf3rnbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3t3 - 7 51d220b5057b43fdD22daQGA; Aljechin forsvarrnbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4w2 - ; d8cbe5b34fa1fab7D23daDronninggambit modtagetrnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4l1 - # 235cfd118d43786enD24daQGA, 4. Sc3rnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4i0 - ! 75e6a7016bfe7213D25daQGA, 4. e3rnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4s/ + 7 391553073dce241AD26daQGA; klassisk variantrnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5t. - 7 ad03bd3abedc8e41AD27daQGA; klassisk variantrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7   w W I>%&$yj - 9 99b0f53f7ae359fcC84daSpansk, lukket forsvarr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6i + k 14aa73087e475e4C85daSpansk, afbytningsvariant dobbelt udsat (DERLD)r1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6vh + 9 fb67a1d34a70278xC86daSpansk, Worrall angrebr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 6g - M 24be6dd52f33bb85C87daSpansk, lukket, Averbach variantr1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7f - M 1d04fbb4fd4bf2e8C87daSpansk, lukket, Averbach variantr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6re - ) 2dbc8cedfb46a6377C88daSpansk, lukketr1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7rd - ) 7d0091a166e64fd5C88daSpansk, lukketr1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7c - C d4a4bbd662bb0e7c|C89daSpansk, Marshalls modangrebr1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 9b - C 51ce99c2fe6f405aZC89daSpansk, Marshalls modangrebr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 8a - A 68740fa32c1709377C90daSpansk, lukket (med ...d6)r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 1 9` - A 62dce214f94ee0dcC90daSpansk, lukket (med ...d6)r1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b kq - 0 8z_ - 7 ad4120093dde2475uC91daSpansk, lukket, 9. d4r1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 9}^ - 7 8087d21deeb4c0c5C92daSpansk, lukket, 9. d4r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 b - - 0 9 ] - K 1270997b796089d0C93daSpansk, lukket, Smyslov forsvarr1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10\ - I 2b6a0affff2565c6C94daSpansk, Lukket, Breyer forsvarrnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10[ - I ee5f2555eeec4884C95daSpansk, lukket, Breyer, 10. d4rnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10}Z - ; 25a99e6fdada2343CC96daSpansk, lukket, 8...Sa5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10Y - ; d590f8e8438862cfC96daSpansk, lukket, 8...Sa5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10X ) Q f25f4a581f4a7d}C97daSpansk, Lukket, Tschigorin forsvarr1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12 W + U c8bcddd6fde4047GC98daSpansk, Lukket, Tschigorin, 12...Sc6r1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13 V - U 599ce728c2e2e24dMC98daSpansk, Lukket, Tschigorin, 12...Sc6r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12 U - W aa348851dbbe87adC99daSpansk, Lukket, Tschigorin, 12...c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13 T + W 6825d1dbf168b8bC99daSpansk, Lukket, Tschigorin, 12...c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13oS + 1 6649ba69b8c9ff8D00daDronningebondespilrnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2xR - 9 6047e0c7441e877fD01daRichter-Veresov Angrebrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 1 3zQ - A dd007750f36afec5D02daDronningebondespil, 2. Sf3rnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2P - M 40b41493ee1a649bD03daTorre angreb, Tartakower variantrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3tO - 1 2bc301177acf37f7D04daDronningebondespilrnbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3N - W 5db4f32662eda7a5D05daDronningebondespil, Zukertort variantrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4lM - ) 8a470482d88334ffD06daDronninggambitrnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 vu W d ; 9~P-83} - A df7c1038cc9fc3c3C63daSpansk, Schliemann forsvarr1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 - O e60e32fab825049eC64daSpansk, klassisk (Cordel) forsvarr1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4{ - 9 10fd4254dfedaf8bC65daSpansk, Berlin forsvarr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 - Q 5732af0171663df6C66daSpansk, Berlin forsvar, 4. O-O, d6r1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5 - W d33f7739a5c9d388C67daSpansk, Berlin forsvar, åben variantr1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5{ - ? c8cbbdb43361c6faC68daSpansk, afbytningsvariantr1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4 - O 806ee4d7d6b08795C69daSpansk, afbytningsvariant, 5. O-Or1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5i -  a8e7c91161416febC70daSpanskr1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 4~ - M 915d5f70b3392686C71daSpansk, moderne Steinitz forsvarr1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5} - Y ef282444cfcafd96C72daSpansk, moderne Steinitz forsvar 5.0-0r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5| + o 8c24cc14dccc3f6C73daSpansk, moderne Steinitz forsvar, Richter variantr1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6{ - o cdf7636b5c05eeb4C73daSpansk, moderne Steinitz forsvar, Richter variantr1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6z + o 9a70d7f4e3e0a9eC73daSpansk, moderne Steinitz forsvar, Richter variantr1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5y - M e787a7e863492900C74daSpansk, moderne Steinitz forsvarr1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5x + M 54659bab913f9311C75daSpansk, moderne Steinitz forsvarr2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6&w -  29c7254bd35546388C76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variantr2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7&v -  cb06db19090f9609 C76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variantr1bqkbnr/1pp2p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6&u +  e33f4b318c6bb4bKC76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variantr1bqkbnr/1pp2p1p/p1np2p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6't -  378962d2cabef226&C76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variantr1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 5's +  68a2c913ec88b0c C76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variantr1bqkbnr/1ppp1p1p/p1n3p1/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5yr - 9 6bf3afeb31bc0265eC77daSpansk, Morphy forsvarr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5zq - 9 f309fde4ccbb2e7d}C77daSpansk, Morphy forsvarr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5qp - ) 8d7c86d0b048f56dmC78daSpansk, 5. O-Or1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5o - m b4c610b16230bc00C79daSpansk, Steinitz forsvar udsat (Russisk forsvar)r1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6n - O 30cbc889b69f527e~C80daSpansk, åbent (Tarrasch) forsvarr1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6m - G 1e0f50da334bf2399C81daSpansk, åbent, Howell angrebr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 b kq - 2 9xl - 7 fed32760ad7fa63b;C82daSpansk, åbent, 9. c3r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 b kq - 0 9k - M ea1f548f67d40aaaC83daSpansk, åbent, klassisk forsvarr2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10 y + ; S N O;]]s }w& - 9 d4c5b462704c058dC32daKGD, Falkbeer, 5. dxe4rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR b KQkq - 2 5v% - 9 8dab0c00eab1adbdC32daKGD, Falkbeer, 5. dxe4rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 5p$ - 5 1cd8d48946aa83fdC33daKongegambit modtagetrnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3r# - 5 c7bc387f2e4ce2c0C34daKongespringer gambitrnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 3u" - = d3704b90e4e74e51QC35daKGA, Cunninghams forsvarrnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4! - } 42d61a6bb298ace6C36daKGA, Abbazia forsvar (Klassisk forsvar, Moderne forsvar)rnbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4t - 1 bc68d000781a9f93C37daKGA, Quaade gambitrnbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4t - 5 94f0413c69fc0046FC38daKongespringer gambitrnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 5t - 5 db5c548b11c764344C39daKongespringer gambitrnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4u - 7 d3207fec0612d89dC40daKongespringer åbningrnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2r - / ea9ae98dd46a91f0C41daPhilidors forsvarrnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3p - + 88ce4b19abe8990b C42daPetrovs forsvarrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 - O 4dfb64b3ba21b449IC43daPetrov, moderne (Steinitz) angrebrnbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3u - 3 78cda70e17837d9eC44daKongebondespil gamer1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3d -  4112df7bd300d6e7C45daSkotskr1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4r - + 835abfacd561ff47GC46daTrespringerspilr1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3 - K 1d81a4f369529393C47daFirspringerspil, skotsk variantr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4 - K eb6a5af61d0f2d52RC48daFirspringerspil, spansk variantr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4 - K 222b33f056f8e570pC49daFirspringerspil, dobbelt spanskr1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5p - ) 1b7e13263fc0ab388C50daKongebondespilr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3r - % 1c9622d153442d9fC51daEvans gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4  - Y 768c3ac4890df01bC52daEvans gambit med 4. ... Lxb4 5. c3 La5r1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6r - % c0b9afe525824e3d=C53daGiuoco pianor1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4n - % 69aa6b7439623adaC54daGiuoco pianor1bqk2r/pppp1ppp/2n2n2/2b5/2BPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 6w - 1 409027d3923aeaaeC55daTospringer forsvarr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4q - 1 dd1937963dacaffaC56daTospringer forsvarr1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6v - 1 1642c6063bf6120a C57daTospringer forsvarr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4s - 1 e1e0c4aad071bc20 C58daTospringer forsvarr1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6q - 1 26d4332e603fe217C59daTospringer forsvarr1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R w KQkq - 0 9h -  4b1376a17217ee1dC60daSpanskr1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3x - 9 9c6e1a40cc53aebcC61daSpansk, Bird's forsvarr1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 - M 72a9e0c0a06fa770pC62daSpansk, gammelt Steinitz forsvarr1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 # ? N [  ~gNFS]PIE - i a7ed29d3c0aa7f02C06daFransk, Tarrasch, lukket variant, hovedvariantr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R b KQkq - 0 8D + i b5bfc9fa4027324$C06daFransk, Tarrasch, lukket variant, hovedvariantr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 8C - i 544546aad9f61ae2C06daFransk, Tarrasch, lukket variant, hovedvariantr1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7~B + K b0b0d130d9411edC07daFransk, Tarrasch, åben variantrnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 0 4A - U 13c0de9acd5e9320 C08daFransk, Tarrasch, åben, 4.exd5 exd5rnbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5 @ - g 6349ea8eb429571eC09daFransk, Tarrasch, åben variant, hovedvariantr1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6w? - ; 4f837c7daacc3079yC10daFransk, Paulsen variantrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3p> - ) 146d4888073671efC11daFransk forsvarrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4~= - C 1b7676b8fc4b6205C12daFransk, MacCutcheon variantrnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5s< - - c6fb6c517d1706b6C13daFransk, klassiskrnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5x; - = 2d401dd965fe75deC14daFransk, klassisk variantrnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7x: - = cd80c33c58adf2bbC14daFransk, klassisk variantrnbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 69 - W 86c2157be13bf85b[C15daFransk, Winawer (Nimzowitsch) variantrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 48 - Y e7bb0386e525de3f?C16daFransk, Winawer, fremryknings- variantrnbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 47 + Y 1cad2281a62d542BC17daFransk, Winawer, fremryknings- variantrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 56 - Y a0baf239e3cae648HC18daFransk, Winawer, fremryknings- variantrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 65 - Y eb6f98084e960908C18daFransk, Winawer, fremryknings- variantrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 64 - i 9ef54e8458436df5C19daFransk, Winawer, fremryknings-variant, 6...Se7rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7k3 + ) 844931a6ef4b9a0C20daKongebondespilrnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2h2 - % 560fb632bb4680f7C21dacentrumsspilrnbqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3j1 - % 805579149e46cac9C22dacentrumsspilr1bqkbnr/pppp1ppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR w KQkq - 1 4l0 - ' 6bf7273246b76f06C23daLøberåbningrnbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2/ - G 301913c7eb4d2e90C24daLøberåbning, Berlin forsvarrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3j. - # f3d38bb8ac163b79yC25daWienerpartirnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2- - G a83dbf4d01ec7aefC26daWienerparti, Falkbeer variantrnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3l, - # 7639453c2f780b5aZC27daWienerpartirnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4p+ - # 6063d387383e094aJC28daWienerpartir1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4o* - # 3b8de77295c448dcC28daWienerpartir1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3) - K d041e05484a90940@C29daWiener gambit, Kaufmann variantrnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4h( - # f552ee1777658429)C30daKongegambitrnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2u' - = 7038cc03ebb1ca0fC31daKGD, Falkbeers modgambitrnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 {{] k f d dd5?9?u${$b -  22c4b53d4c4359e8B85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6r1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w kq - 4 9#a -  89296ddf5dd2fcebB85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6rnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b kq - 3 8$` -  f75c16eb212127fbB85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6rnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R w KQkq - 2 8#_ -  f14329ca4d6a68faB85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6rnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R b KQkq - 1 7!^ -  82c3aa334c4f2259YB85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6rnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 7x] - = ce9192e59abd31aaB86daSiciliansk, Sozin angrebrnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6y\ - = b56619216d1624afB87daSozin med ...a6 og ...b5rnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 8y[ - = d5627334f6bb9992B87daSozin med ...a6 og ...b5rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7xZ - = 1c6663167d9dc976vB87daSozin med ...a6 og ...b5rnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7Y - U 657c4a078b2c94a9B88daSiciliansk, Sozin, Leonhardt variantr1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7zX - ? 1674f1eb0a168f27'B89daSiciliansk, Sozin, 7. Le3r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 1 7tW + 3 9a2250f4dfc8f82B90daSiciliansk, Najdorfrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6V - m 25449e4ead2b57baB91daSiciliansk, Najdorf, Zagreb (fianchetto) variantrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6U - m 7a22a6f64cd9c521!B92daSiciliansk, Najdorf, Zagreb (fianchetto) variantrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6{T - A f4b45802546db20b B93daSiciliansk, Najdorf, 6. f4rnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6}S - C cff87239fd76544aJB94daSiciliansk, Najdorf, 6. Lg5rnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6|R - C b98f8008e554c418B95daSiciliansk, Najdorf, 6...e6rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7|Q - A 4499fd05fcc5f991B96daSiciliansk, Najdorf, 7. f4rnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R b KQkq - 0 7~P - E 83660352368e2f4bKB97daSiciliansk, Najdorf, 7...Db6rnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8|O - E 50558eea366e5500B98daSiciliansk, Najdorf, 7...Le7rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8 N - _ e7a6f486c5d2aeeeB99daSiciliansk, Najdorf, 7...Se7 Hovedvariantr1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 10 M - _ d4458fdb257a4322"B99daSiciliansk, Najdorf, 7...Se7 Hovedvariantrnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9dL -  f44b6961e533d1c4C00daFranskrnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2wK - ? 93cb6e92b241f0a6C01daFransk, afbytningsvariantrnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3zJ - C d56d72226c3094c4C02daFransk, fremrykningsvariantrnbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3pI - - ed7adcbdf2d31a90C03daFransk, Tarraschrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3 H - Y c61ddc5c265e9f388C04daFransk, Tarrasch, Guimard hovedvariantr1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5 G - Y 9df3e8a98ba4deaeC04daFransk, Tarrasch, Guimard hovedvariantr1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4F - M b694e8485f295b06C05daFransk, Tarrasch, lukket variantrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 4 Xh` R ! X &qZ@*UX$} +  94ca2f66f3ef00a B68daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 9...Le7r2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10&| -  1d80d119a5955c9bB68daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 9...Le7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 9${ -  b2105b3eed55ab18B69daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 11.Lxf6r2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 11'z -  172f52ef364bf5f8B69daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 11.Lxf6r2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 11'y -  772b38faade648c5B69daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 11.Lxf6r2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10yx - = 32e187a7d153e515B70daSiciliansk, Dragevariantrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 w - a cff7faaac8c2d89cB71daSiciliansk, Dragevar., Löwenfisch variantrnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6v - G 41e93c4b5069fe9bB72daSiciliansk, Dragevar., 6. Le3rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 u - [ 574d21d2c7690181B73daSiciliansk, Dragevar., klassisk, 8. O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8t - [ 24459a3e46531a0fB73daSiciliansk, Dragevar., klassisk, 8. O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 4 8s - [ 8fa842dc57c2bf0c B73daSiciliansk, Dragevar., klassisk, 8. O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7r - [ f1dd39e82b31641cB73daSiciliansk, Dragevar., klassisk, 8. O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7 q - [ c994f44803272ea0B74daSiciliansk, Dragevar., klassisk, 9. Sb3r1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 9 p - _ 9fe4e7cc0be4da40@B75daSiciliansk, Dragevar., jugoslavisk angrebrnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7o - q 954c0a7bdebd33abB76daSiciliansk, Dragevar., jugoslavisk angreb, 7...O-Ornbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8n - o 750a293e26d69faeB77daSiciliansk, Dragevar., jugoslavisk angreb, 9. Lc4r1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9m - u afe6924fafae4007B78daSiciliansk, Dragevar., jugoslavisk angreb, 10. O-O-Or2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10l - o 8869b3903cc79859YB79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4r1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R b - - 4 12k - o 416da3b2b7e1c8bdB79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4r1r3k1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R w - - 3 12j - o ea369b3dade318f6B79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R b - - 2 11i - o d21bde1efec1176enB79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/R3K2R w KQ - 1 11h + o b684b4557b336e1B79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4r2q1rk1/pp1bppbp/2np1np1/8/2BNP2P/2N1BP2/PPPQ2P1/R3K2R b KQ - 0 10g - M ad2226cdb2fee70c B80daSiciliansk, Scheveningen variantrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6f + Y e6f271b5a8b0a11B81daSiciliansk, Scheveningen, Keres angrebrnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6e - K 50345bc0ab6fda85B82daSiciliansk, Scheveningen, 6. f4rnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6d - M dea2a534b3dbadafB83daSiciliansk, Scheveningen, 6. Le2rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6c + u c5554c754fb5573sB84daSiciliansk, Scheveningen (Paulsen), klassisk variantrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7 X k  x ` F?E'QB,'~ - E 649b5cbbdced4af4B45daSiciliansk, Taimanov variantr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5~ - E b66cad483bcdb228(B46daSiciliansk, Taimanov variantr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6  - ] 6284639ab0a605f5B47daSiciliansk, Taimanov (Bastrikov) variantr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6~ - E 118cd876319c1e7b{B48daSiciliansk, Taimanov variantr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6 - E b0fbaa7cd799ac04B49daSiciliansk, Taimanov variantr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7k - ! 86933069b8c862bbB50daSicilianskrnbqkbnr/pp2pppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3" -  b54de1c6dd5cf1388B51daSiciliansk, Canal-Sokolsky (Nimzowitsch-Rossolimo, Moskva) angrebrnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3  - a 578c1f9407062109 B52daSiciliansk, Canal-Sokolsky angreb, 3...Ld7rn1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4{ - G 610fb232e064c902B53daSiciliansk, Chekhover variantrnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4h - ! 9298abf0be4b265aZB54daSicilianskrnbqkbnr/pp2pp1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5f - ! 7b2cf8abc5c4b411B54daSicilianskrnbqkbnr/pp2pppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4  - _ f7d5f38a3e857143CB55daSiciliansk, Prins variant, Venedig-angrebrnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6 - _ c40b22255b11e2c0B55daSiciliansk, Prins variant, Venedig-angrebrnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6j - ! db55d4fcaadc775e^B56daSicilianskrnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 - W 130bb836930e04fbB57daSiciliansk, Sozin (ikke Scheveningen)r1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6u + 5 3388fe7ba6898feB58daSiciliansk, Klassiskr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6 - [ 1d31bf80389aa602B59daSiciliansk, Boleslavsky variant, 7. Sb3r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7} - A b6e25b280bc70995B60daSiciliansk, Richter-Rauzerr1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 6 - q 7c3beaf510240604B61daSiciliansk, Richter-Rauzer, Larsen variant, 7. Dd2r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 3 7 - Q c095a91913e599c7B62daSiciliansk, Richter-Rauzer, 6...e6r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7  - _ e88de696d25c4667gB63daSiciliansk, Richter-Rauzer, Rauzer angrebr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 1 7! -  33d240e0871d310c B64daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9" -  cec43ded9e8c0c85B64daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9! -  c46cd05a4bd5e56enB64daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9.f4r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 8% -  9eb1c566eb2c084fOB65daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9...Sxd4r1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10 - o 3a7a1765357cbebbB66daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8% -  e096ac14bc046112B67daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 8...Ld7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9#~ +  2575246665eb123#B67daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 8...Ld7r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8 Q q 5 Zq_>6AAMQ6 - S 1297b266d226456dmB22daSiciliansk, Alapins variant (2. c3)rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2q5 - 1 9fda525cc0b4c8322B23daSiciliansk, Lukketrnbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2u4 - 1 18d131ff31f2b509 B24daSiciliansk, Lukketr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3w3 - 1 633729db6a3fc628(B25daSiciliansk, Lukketr1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6w2 - 1 5a8dbfbab8478f45EB25daSiciliansk, Lukketr1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR b KQkq - 0 51 - A 103f9237eb05dda6B26daSiciliansk, Lukket, 6. Le3r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6r0 - 1 bf29a6086ab02bd6B27daSiciliansk forsvarrnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2{/ - C 6dde57fb8d90d30a B28daSiciliansk, O'Kelly variantrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 . - a e4c792fdc74a6a40@B29daSiciliansk, Nimzowitsch-Rubinstein variantrnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3t- - 1 14c47eea7b218ed5B30daSiciliansk forsvarr1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3$, -  ceaefc1e653a8f1dB31daSiciliansk, Nimzowitsch-Rossolimo angreb (med ...g6, uden ...d6)r1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4t+ - 1 d1f151406ae8a397B32daSiciliansk forsvarr1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3r* - 1 b29582ddabd719e9B33daSiciliansk forsvarr1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5) - w fb58fdd1bf4048edB34daSiciliansk, accelereret fianchetto, afbytningsvariantr1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5( )  b1fb5640840ff9B35daSiciliansk, accelereret fianchetto, moderne variant med Lc4r1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7' -  63024f7e68c7d95f_B35daSiciliansk, accelereret fianchetto, moderne variant med Lc4r1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7& -  38ec7b8bc53d98c9B35daSiciliansk, accelereret fianchetto, moderne variant med Lc4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6% -  4be4c06744078347GB35daSiciliansk, accelereret fianchetto, moderne variant med Lc4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 6$ - s 8cec7a573ead61333B36daSiciliansk, accelereret fianchetto, Maroczy bindingr1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5# -  3c5047e1c5eaaa99B37daSiciliansk, accelereret fianchetto, Maroczy binding, 5...Lg7r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6" -  4f58fc0d44d0b117B38daSiciliansk, accelereret fianchetto, Maroczy binding, 6. Le3r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 6! - q 72028b3c2682e3344B39daSiciliansk, accelereret fianchetto, Breyer variantr1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 8 - q ef21d05a2bc87258XB39daSiciliansk, accelereret fianchetto, Breyer variantr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 7 - q 14b6c8f8e92af081B39daSiciliansk, accelereret fianchetto, Breyer variantr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7t - 1 c95e54397292bb84B40daSiciliansk forsvarrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3v - ; e6166d08e8be95f2B41daSiciliansk, Kan variantrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5w - ; b31bccaad13e5781B42daSiciliansk, Kan, 5. Ld3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 5w - ; 1d8175aa2a5c172b+B43daSiciliansk, Kan, 5. Sc3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5q - 1 9f0c44191e0fc82d-B44daSiciliansk forsvarr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 rju r w | q x |4vrU - E aaa73ce37ee9c8a4A95daHollandsk, Stonewall med Sc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5}T - C ad02810c3ba230b8A96daHollandsk, klassisk variantrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7S - O ad1415bcca6297dcA97daHollandsk, Ilyin-Genevsky variantrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8R - O bb0dbc699c1b0493A97daHollandsk, Ilyin-Genevsky variantrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3Q - O 97eb07287cccdcabA97daHollandsk, Ilyin-Genevsky variantrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3 P - _ 1c0d67a1d8b4abb8A98daHollandsk, Ilyin-Genevsky variant med Dc2rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 8 O - ] 21b275e810effcb1A99daHollandsk, Ilyin-Genevsky variant med b3rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8jN - ) 823c9b50fd114196B00daKongebondespilrnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1iM + % 756b94461c50fb0B01daSkandinaviskrnbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2mL - / d9d2afa550eb0000B02daAljechins forsvarrnbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2oK - / b98e490b8bfe7e93B03daAljechins forsvarrnbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3J - Q 5b50339c316056c3B04daAljechins forsvar, Moderne variantrnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4I - c 5983f9ae76e55829)B05daAljechins forsvar, Moderne variant, 4...Lg4rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5xH - A 6b88c80b869ed3ddB06daRobatsch (Moderne) forsvarrnbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2nG - % deca0ecc51b8e6f6B07daPirc forsvarrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3F - S ec1ab16142d11580B08daPirc, Klassisk (Tospringer-) systemrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4xE - 9 ca68209a33a649344B09daPirc, østrigsk angrebrnbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4nD - / 104676bf8ad1922d-B10daCaro-Kann forsvarrnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2C - I b70c6acdfb843105B11daCaro-Kann, Tospringer, 3...Lg4rn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 2 4nB - / d57359159b18bf6foB12daCaro-Kann forsvarrnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2yA - E 77c6714cdda3b34fOB13daCaro-Kann, Afbytningsvariantrnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3 @ - _ 5e9b9f4749fc46efB14daCaro-Kann, Panov-Botvinnik angreb, 5...e6rnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6r? - / ab8e63a3c52e7390B15daCaro-Kann forsvarrnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3> - S 3ecf958145a4756clB16daCaro-Kann, Bronstein-Larsen variantrnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6y= - C fa25b904ac89bf9bB17daCaro-Kann, Steinitz variantr1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5z< - C 4adfabd7fbc45bdaB18daCaro-Kann, Klassisk variantrn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5}; - E 41ae97c7b9f29a70pB19daCaro-Kann, Klassisk, 7...Sd7r2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R w KQkq - 2 8~: - E 724dec9a595a77bcB19daCaro-Kann, Klassisk, 7...Sd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7}9 - E a929006c31bc1681B19daCaro-Kann, Klassisk, 7...Sd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7p8 - 1 644d4afe02564aebB20daSiciliansk forsvarrnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 27 - s a1786554139f67a9B21daSiciliansk, Grand Prix angreb og Smith-Morra Gambitrnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 g}s ^ r   qL&dUKWLgms - / 1761df2bb9d0fc00A80daHollandsk åbningrnbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2pr - / 3b87646a590724388A81daHollandsk forsvarrnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2wq - A d366d2635250410a A82daHollandsk, Staunton gambitrnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 p - c 77560104c9136646FA83daHollandsk, Staunton gambit, Stauntons linjernbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4no - / 9b42400ffadf5707A84daHollandsk forsvarrnbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2~n - G 3b3b6c5895c79448HA85daHollandsk med 2. c4 og 3. Sc3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3~m - E ec4acfbbb7f2cea9A86daHollandsk med 2. c4 og 3. g3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3l - Q dbd66edd12312e0c A87daHollandsk, Leningrad, hovedvariantrnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5k ) Q b2822b7ad74f311A87daHollandsk, Leningrad, hovedvariantrnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5j - Q b00ebf9d8190849bA87daHollandsk, Leningrad, hovedvariantrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4i - g ff5c9b72dcc104f8A88daHollandsk, Leningrad, hovedvariant med 7...c6rnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8h - g 6d26769dab01d743CA88daHollandsk, Leningrad, hovedvariant med 7...c6rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7g - g 96b16e3f69e3559aA88daHollandsk, Leningrad, hovedvariant med 7...c6rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7f - g af0bf85ebb9b1cf7A88daHollandsk, Leningrad, hovedvariant med 7...c6rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6e - g 2328677af894b7f0A88daHollandsk, Leningrad, hovedvariant med 7...c6rnbq1rk1/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 4 6 d - g 29808acd2dcd5e1bA88daHollandsk, Leningrad, hovedvariant med 7...c6rnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 5c - g 57f5f1f9513e850b A88daHollandsk, Leningrad, hovedvariant med 7...c6rnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5b - g e749cc4faa794ea1A88daHollandsk, Leningrad, hovedvariant med 7...c6rnbqkb1r/ppppp2p/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4a - a c6cbae7fba907240@A89daHollandsk, Leningrad, hovedvariant med Sc6r1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8s` - / 2fcd1ef7e23d8682A90daHollandsk forsvarrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4s_ - / 9a3d3d8aafd05efbA90daHollandsk forsvarrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4q^ - / c1d3097f022a1f6dmA90daHollandsk forsvarrnbqkbnr/pppp2pp/4p3/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3r] - / 3b016d1828962a13A91daHollandsk forsvarrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5r\ - / eacd6c599529a2c5A92daHollandsk forsvarrnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 5 6r[ - / e06581ee40704b2e.A92daHollandsk forsvarrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 4 5 Z - [ 9d74552daf835c9eA93daHollandsk, Stonewall, Botwinnik variantrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7Y - E ad1d698452931e4cLA94daHollandsk, Stonewall med La3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8X + E f0eb8c2d8438f25%A94daHollandsk, Stonewall med La3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8W - E 783fc034c02c6691A95daHollandsk, Stonewall med Sc3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8V - E 71c3d015160fa999A95daHollandsk, Stonewall med Sc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 }m ] K K H .58HK0}}| - A 6d3f102a6d9c2eceA62daBenoni, fianchetto variantrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 5| - A 522bc9ee7739ee05A62daBenoni, fianchetto variantrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 4| - A e8238abdee1f7858XA62daBenoni, fianchetto variantrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 - U d19a499c3309cef5A63daBenoni, fianchetto variant, 9...Sbd7r1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 6 10 - U e27932c1d3a123399A63daBenoni, fianchetto variant, 9...Sbd7rnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 5 9 - U a9d79a24497738efA64daBenoni, fianchetto variant, 11...Te8r1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 3 12 - U b5865d647b07dd6dmA64daBenoni, fianchetto variant, 11...Te8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 2 11 - U 68a4c683b9bae3e7A64daBenoni, fianchetto variant, 11...Te8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 w - - 1 11 - U 5b47bdde59120e2b+A64daBenoni, fianchetto variant, 11...Te8rnbq1rk1/1p3pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 b - - 0 10 - U 308ec3323481dbe5A64daBenoni, fianchetto variant, 11...Te8rnbq1rk1/1p3pbp/p2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10m - ' 49d9b32dd49f9455UA65daBenoni, 6. e4rnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6l - ' 8ddebe653f1f295f_A65daBenoni, 6. e4rnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6| - A 5d7b9d7bb6813b97A66daBenoni, bondestorm-variantrnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 7{ - A a06de076af10061eA66daBenoni, bondestorm-variantrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7z - = de197162285263beA67daBenoni, Taimanov variantrnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8y - ; 3c0ba18cf07978ebA68daBenoni, firbonde-angrebrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 9x - ; 36a34c3b25209100A68daBenoni, firbonde-angrebrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8 - W 53dae535c32cd7caA69daBenoni, firbonde-angreb, hovedvariantrnbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 1 10 - W 4f8b2275f15c3248HA69daBenoni, firbonde-angreb, hovedvariantrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9~ - I 7b090c80c7f66723#A70daBenoni, klassisk med e4 og Sf3rnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7y} + ; def66008c3b7741AA71daBenoni, klassisk, 8.Lg5rnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 2 8~| - E b29d5f78e8cd0fc1A72daBenoni, klassisk uden 9. O-Ornbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9z{ - = cce8244c943ed4d1A73daBenoni, klassisk, 9. O-Ornbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9z - M 75d6ab531e8df9c3A74daBenoni, klassisk, 9...a6, 10. a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10y - M 1e1fd5bf731e2c0d A74daBenoni, klassisk, 9...a6, 10. a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10 x - Y 770561615908f729)A75daBenoni, klassisk med ...a6 og 10...Lg4rn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11{w - ? d0b9e30ca64e3153SA76daBenoni, klassisk, 9...Te8rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10v + O d9b78eb64f30fd9A77daBenoni, klassisk, 9...Te8, 10.Sd2rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10u - W 431bd37be20c9365eA78daBenoni, klassisk med ...Te8 og ...Sa6r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 7 11|t - = 2daa354a42c67c14A79daBenoni, klassisk, 11. f3r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11    ! < Vk|%'#&8@1 - M ea3032eab9cb633e>A48daKongeindisk, Øst-indisk forsvarrnbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 30 - K c6d689ab591cbb06A49daKongeindisk, fianchetto uden c4rnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3o/ - 1 54c31263e9ad3b4fOA50daDronningebondespilrnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2x. - ? debb1a297a48c379yA51daBudapestergambit afslåetrnbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3n- - - df05be0d7f37e565eA52daBudapestergambitrnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4s, - 5 6d7984023bd57222"A53daGammelindisk forsvarrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3+ - I 1c9694ea6ad208cdA54daGammelindisk, ukrainsk variantrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4* - A 30160e09091c39366A55daGammelindisk, hovedvariantr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5}) - A eb72e2ff61fa580b A55daGammelindisk, hovedvariantr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5{( - A 610aeab5f21fa03d=A55daGammelindisk, hovedvariantr1bqkb1r/pppnpppp/3p1n2/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4{' - A a50de7fd199f1d377A55daGammelindisk, hovedvariantr1bqkb1r/pppnpppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4m& - ) b2b2c3cd16ea30322A56daBenoni forsvarrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3l% - ' 68beea8b14611b52RA57daBenkö gambitrnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4r$ - 9 39a691df7150ed3e>A58daBenkö gambit modtagetrnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5t# - 5 d1eda6f64269a376vA59daBenkö gambit, 7. e4rn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7s" - 5 15eaabbea9e91e7c|A59daBenkö gambit, 7. e4rn1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7r! - 5 2c503ddf7b915711A59daBenkö gambit, 7. e4rn1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6q - 5 d7c7257db973d5c8A59daBenkö gambit, 7. e4rn1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6n - ) 7ecd72af97ee363d=A60daBenoni forsvarrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4p - ) bf0e01c82c76da29)A61daBenoni forsvarrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7o - ) 56ba529357f94862bA61daBenoni forsvarrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6n - ) ad2d4a31951bcabbA61daBenoni forsvarrnbqkb1r/pp3ppp/3p1n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6n - ) 9497dc50476383d6A61daBenoni forsvarrnbqkb1r/pp1p1ppp/5n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5p - ) 9abd479de5ad97cbA61daBenoni forsvarrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5z - A 9c0c49f5af52f829)A62daBenoni, fianchetto variantrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 4 9| - A 96a4a4427a0b11c2A62daBenoni, fianchetto variantrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 8| - A 4dc048b412ed70ffA62daBenoni, fianchetto variantrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 8| - A fd7c7502e9aabb55UA62daBenoni, fianchetto variantrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 7| - A 488c567fa447632c,A62daBenoni, fianchetto variantrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 7{ - A a1380524dfc8f167gA62daBenoni, fianchetto variantrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 1 6z - A 5aaf1d861d2a73beA62daBenoni, fianchetto variantrnbqkb1r/pp3ppp/3p1n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 6z - A 63158be7cf523ad3A62daBenoni, fianchetto variantrnbqkb1r/pp1p1ppp/5n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 5 e$ % ? / 2 :BP]l|me~Q - C cb7e2dc07deee94aJA27daEngelsk, trespringer-systemr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3P - C 90901935d014a8dcA28daEngelsk, firspringer-systemr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4O - C 3b7dc1d7c1850ddfA28daEngelsk, firspringer-systemrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3N - e bc76a27430c370e4A29daEngelsk, firspringer-system, kongefianchettor1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4yM - C 2c69d892aad95ce6A30daEngelsk, symmetrisk variantrnbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2L - Y 69d62f3b7e0c510fA31daEngelsk, symmetrisk, Benoni opstillingrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3rK - 3 272b3a620aeb3ab5A32daEngelsk, symmetriskrnbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5qJ - 3 515cc85312c9aae7A32daEngelsk, symmetriskrnbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4sI - 3 36c8950e03f838c9A32daEngelsk, symmetriskrnbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4uH - 3 7751fa22d9981d6foA33daEngelsk, symmetriskr1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 0 6sG + 3 1260813c1ba8d3d=A33daEngelsk, symmetriskr1bqkb1r/pp1ppppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 5vF - 3 66b2554ed08b1f13A33daEngelsk, symmetriskr1bqkb1r/pp1ppppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5yE - 3 39acef7bad7f76d5A33daEngelsk, symmetriskr1bqkb1r/pp1ppppp/2n2n2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4rD - 3 d7fec030683bde3f?A34daEngelsk, symmetriskrnbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2tC - 3 7c1318d279aa7b3c - 3 3c873600914402377A38daEngelsk, symmetriskr1bqk2r/pp1pppbp/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 2 6z= - 3 8c3b0bb66a03c99dA38daEngelsk, symmetriskr1bqkb1r/pp1ppp1p/2n2np1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 1 5{< - 3 39cb28cb27ee11e4A38daEngelsk, symmetriskr1bqkb1r/pp1ppp1p/2n2np1/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5z; - 3 d07f7b905c6183afA38daEngelsk, symmetriskr1bqkb1r/pp1ppppp/2n2n2/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4 : - ] 8d6f8f2929271d8eA39daEngelsk, symmetrisk, hovedvariant med d4r1bq1rk1/pp1pppbp/2n2np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 7n9 - 1 830eb9b20758d1deA40daDronningebondespilrnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1p8 - 1 bab42fd3d52098b3A41daDronningebondespilrnbqkbnr/ppp1pppp/3p4/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 27 - M 500fcbf03f855586A42daModerne forsvar, Averbakh systemrnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4t6 - 9 657f681cf81fdaa3A43daGammelt Benoni forsvarrnbqkbnr/pp1ppppp/8/2p5/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2t5 - 9 9a3e66dbf801f641AA44daGammelt Benoni forsvarrnbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3o4 - 1 d8e08d47aaa29048HA45daDronningebondespilrnbqkb1r/pppppppp/5n2/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 1 2p3 + 1 38461b1c244f175uA46daDronningebondespilrnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 2y2 - ; 68ed28a13cc746eeA47daDronningeindisk forsvarrnbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3 h l      15SRGdsm - ? 8da7a73e5fdd72dcA00daIrregulære Ã¥bningerrnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR b KQkq - 0 1ul - ? ca9df64ccc1c97f1A01daNimzowitsch-Larsen angrebrnbqkbnr/pppppppp/8/8/8/1P6/P1PPPPPP/RNBQKBNR b KQkq - 0 1hk - ' bb2deb150f00c115A02daBirds åbningrnbqkbnr/pppppppp/8/8/5P2/8/PPPPP1PP/RNBQKBNR b KQkq - 0 1jj - ' 3e47c90193d48f333A03daBirds åbningrnbqkbnr/ppp1pppp/8/3p4/5P2/8/PPPPP1PP/RNBQKBNR w KQkq - 0 2ii - ' 9d5f7aee7e779da1A04daRéti åbningrnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1rh - 7 c6b14e1bd38ddc377A05daRéti åbning, 2..Sf6rnbqkb1r/pppppppp/5n2/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 2 2rg - 5 183558fae2a3d387A06daRéti åbning, 2..d5rnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2f - o 34d3e3bb02740bbfA07daRéti åbning, Kongeindisk angreb (Barcza system)rnbqkbnr/ppp1pppp/8/3p4/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 0 2e - O 67521168b0ded8bbA08daRéti åbning, Kongeindisk angrebrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3zd - A 9416c7dea1ac7880A09daRéti åbning, 2..d5 3. c4rnbqkbnr/ppp1pppp/8/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 2cc -  ca18093c559e579bA10daEngelskrnbqkbnr/pppppppp/8/8/2P5/8/PP1PPPPP/RNBQKBNR b KQkq - 0 1wb - A 5862e4d3225e8420 A11daEngelsk, Caro-Kann forsvarrnbqkbnr/pp1ppppp/2p5/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2{a - A 8aca4a650ce1c056VA12daEngelsk, Caro-Kann forsvarrnbqkbnr/pp2pppp/2p5/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3y` + A 66c2a31d66cab3b;A12daEngelsk, Caro-Kann forsvarrnbqkbnr/pp2pppp/2p5/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3e_ -  bc6ffb0d4dbcc7c9A13daEngelskrnbqkbnr/pppp1ppp/4p3/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2^ - K 4a2091fd0f16de84A14daEngelsk, Neo-Katalansk afslåetrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 3 5] - [ 91f63dc9f864160d A15daEngelsk, 1...Sf6 (Anglo-Indisk forsvar)rnbqkb1r/pppppppp/5n2/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 1 2g\ -  6a61256b3a8694d4A16daEngelskrnbqkb1r/pppppppp/5n2/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 2 2h[ -  1c16d75a22a40486A17daEngelskrnbqkb1r/pppp1ppp/4pn2/8/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3Z - I d811da12c924b98cA18daEngelsk, Mikenas-Carls variantrnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 3Y - a 3e600bbc3663b2f1A19daEngelsk, Mikenas-Carls, siciliansk variantrnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4eX -  40600176c67bafadA20daEngelskrnbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2fW -  bbf719d404992d74tA21daEngelskrnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2iV -  e0192d21a9636ce2A22daEngelskrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3 U - W 5e857b8f3e746761aA23daEngelsk, Bremen system, Keres variantrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4T - O 254bc53b323b2691A24daEngelsk, Bremen system med 3...g6rnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4S - [ 101ac13615088877wA25daEngelsk, siciliansk med omvendte farverr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3|R - ; 471a6253ae12236enA26daEngelsk, lukkede systemr1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR w KQkq - 0 6  V : ~e +}}}&8 -  3e5fc9fd6483b6dfD68deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PPQ2PPP/5RK1 b - - 1 13'7 -  8f46bbe076558abbD68deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/3Q1RK1 w - - 0 13`, - ' 13db44a27e603dcbD69deOrthodoxe Verteidigung, (Capablancas Entlastungsmanöver, Rubinstein-Angriff)r1b2rk1/pp1nqppp/2p5/4P3/2B5/2R1PN2/PP3PPP/3Q1RK1 b - - 0 13u - 9 d07d17b687f107bfD89deGrünfeld-Verteidigungr2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 2 13 $i - _ 1e15249639159663cD88deGrünfeld-Verteidigung(Hauptfortsetzung, r2q1rk1/pp2ppbp/6p1/n7/2BPP1b1/4BP2/P3N1PP/R2Q1RK1 w - - 1 13h - _ 4b020e6394293469iD88deGrünfeld-Verteidigung(Hauptfortsetzung, r2q1rk1/pp2ppbp/2n3p1/8/2BPP1b1/4BP2/P3N1PP/R2Q1RK1 b - - 0 12g - _ 25b3e85234e3db18D88deGrünfeld-Verteidigung(Hauptfortsetzung, r2q1rk1/pp2ppbp/2n3p1/8/2BPP1b1/4B3/P3NPPP/R2Q1RK1 w - - 1 12f - _ 276022607366d5f2D88deGrünfeld-Verteidigung(Hauptfortsetzung, r1bq1rk1/pp2ppbp/2n3p1/8/2BPP3/4B3/P3NPPP/R2Q1RK1 b - - 0 11 e - _ 8bd6f72c17ced9d4D88deGrünfeld-Verteidigung(Hauptfortsetzung, r1bq1rk1/pp2ppbp/2n3p1/8/2BpP3/2P1B3/P3NPPP/R2Q1RK1 w - - 0 11 Q - G aa348851dbbe87adC99deSpanisch, (Tschigorin-System)r1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13P + G 6825d1dbf168b8bC99deSpanisch, (Tschigorin-System)r1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13> P !pf bPPPPPPPPPPOOOOOO + G c8bcddd6fde4047GC98deSpanisch, (Tschigorin-System)r1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13 - G 599ce728c2e2e24dMC98deSpanisch, (Tschigorin-System)r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12& -  e0f62e21ac36d04dMD67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/p2nqppp/1pp1p3/8/2BP4/2R1PN2/PP3PPP/3Q1RK1 w - - 0 13' -  8b9f673152b567d6D67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p1p3/8/2BP4/2R1PN2/PP3PPP/3Q1RK1 b - - 0 12( -  969913a34b8928b5D67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p1p3/8/2BP4/2n1PN2/PP3PPP/2RQ1RK1 w - - 0 12*~ -  da083d53d00c26f7D67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQ1RK1 b - - 1 11(} -  5518f3e073767c77wD67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1b2rk1/pp1nqppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 0 11)| -  b5d82d054e25fb12D67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1bq1rk1/pp1nBppp/2p1p3/3n4/2BP4/2N1PN2/PP3PPP/2RQK2R b K - 0 10,{ -  269d9733c24d208eD67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 1 10)z -  e28d48ca0c8f553b;D67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)r1bq1rk1/pp1nbppp/2p1pn2/6B1/2BP4/2N1PN2/PP3PPP/2RQK2R b K - 0 91 7j0 (   hOgX4Bg - Y f15501fdab2e35311B75deSizilianisch (Moderne Drachenvariante)rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 2 7 ! - S c6cbae7fba907240@A89deHolländisch (Leningrader Variante)r1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 + K f0eb8c2d8438f25%A93deHolländisch (Stonewall-System)rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8 - K 9d74552daf835c9eA93deHolländisch (Stonewall-System)rnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7 - K 11d23579750e37f3A93deHolländisch (Stonewall-System)rnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7  -  72028b3c2682e3344B39deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 8 -  ef21d05a2bc87258XB39deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 7 l < - _ 7b090c80c7f66723#A70deModerne Benoni-Verteidigung (Hauptsystem)rnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 7/ - S ff5c9b72dcc104f8A88deHolländisch (Leningrader Variante)rnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 w - Y 3a7a1765357cbebbB66deSizilianisch (Richter-Rauser-Variante)r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8i - Y 34093f2e1a757f43CB75deSizilianisch (Moderne Drachenvariante)r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQkq - 1 8h - Y 9fe4e7cc0be4da40@B75deSizilianisch (Moderne Drachenvariante)rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7g - Y f15501fdab2e35311B75deSizilianisch (Moderne Drachenvariante)rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 2 7 f - Y 41e93c4b5069fe9bB75deSizilianisch (Moderne Drachenvariante)rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 [ - Q 743f10d24443c162bB84deSizilianisch (Scheveninger System)rnb1kb1r/1pq2ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 2 8Z - Q 72202ff328088e63cB84deSizilianisch (Scheveninger System)rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 1 7Y + Q c5554c754fb5573sB84deSizilianisch (Scheveninger System)rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7M - Q 66ec5c1ce2a322f2B85deSizilianisch (Scheveninger System)rnbqk2r/1p2bppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 2 8}? - E b56619216d1624afB87deSizilianisch (Sosin-Angriff)rnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 81 - y 249d9710676844acB96deSizilianisch (Najdorf-Variante), (Polugajewski-System)rnbqkb1r/5ppp/p2ppn2/1p4B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 0 80 - y 4499fd05fcc5f991B96deSizilianisch (Najdorf-Variante), (Polugajewski-System)rnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R b KQkq - 0 7# - k 83660352368e2f4bKB97deSizilianisch (Najdorf-Variante) mit 7. ...Db6,(rnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8 U |tld\TLD<4,$ |sjbZRJB:2*"  z q h _ V M D ; 2 )     y q i a Y Q I A 9 1 ) !    | s j a X O F = 4 + "     y q i a Y Q I A 9 1 ) !   } u m e ] U M E = 5 - %   zrjbZRJB:2*" vmd[RIA91)! yqiaYQIA91( {skc[SKC;3+#vZWTKsCnA@>0-,t  s@Ho9u}zUwvqqp jKie<c_Q]WIS}PJKBA@;::4H1-~5z  DB:sq  `t~}}}n{xq p``?YaQFB?p;864~3-1.t(=&A"MXF `x:vApplihhba]WP&OVNbLcKH64V, }V{xxw;sqp,jiyfaqWOHIBgA5-#))T!"=3 QEKb ~~v~!}{susiiki%eAc`] [YXSPHFB=='<;982#"-9J!H:woPE~~]|'xrJlffw]ZTQjOOwH|D>=9^4//'%"49 "7El&8\~n~B}|9{yvuqni`Q]WvUTLKG-J$j:  X3f<g qSs 4  _ S 2UUUUUUUUc# - o 4837ce34247bf06bkE99deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10 - _ 4635d00efe25140fA74deModerne Benoni-Verteidigung (Hauptsystem)r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11T - Y b9a05331f5adf87c|B78deSizilianisch (Moderne Drachenvariante)2rq1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R w - - 7 11@ - Y 7695071406dc6188B79deSizilianisch (Moderne Drachenvariante)r4rk1/pp1bppbp/2np1np1/q7/2BNP3/2N1BP2/PPPQ2PP/2KR3R w - - 7 11S - Y afe6924fafae4007B78deSizilianisch (Moderne Drachenvariante)r2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10 t6 - o bee3938ec826e351QE98deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2NN4/PP2BPPP/R1BQ1RK1 b - - 4 105 - o 2686280584b11f1aE98deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 w - - 3 104 - o dfc12ba3297d16efE98deKlassisches System (Königsindische Verteidigung)r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 9 - _ 75d6ab531e8df9c3A74deModerne Benoni-Verteidigung (Hauptsystem)rnbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10  - _ 1e1fd5bf731e2c0d A74deModerne Benoni-Verteidigung (Hauptsystem)rnbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10  | - _ 770561615908f729)A75deModerne Benoni-Verteidigung (Hauptsystem)rn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11 h - _ df6c891883d3f705A77deModerne Benoni-Verteidigung (Hauptsystem)rnbqr1k1/1p3pbp/p2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 0 11 g + _ d9b78eb64f30fd9A77deModerne Benoni-Verteidigung (Hauptsystem)rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10 , - _ d2d772380671ff13D87deGrünfeld-Verteidigung(Hauptfortsetzung, r1b2rk1/ppq1ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2Q1RK1 w - - 4 11 + - _ d4c84d196a3ab012D87deGrünfeld-Verteidigung(Hauptfortsetzung, r1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2Q1RK1 b - - 3 10 * - _ a7c0f6f5eb00ab9cD87deGrünfeld-Verteidigung(Hauptfortsetzung, r1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQ1RK1 w - - 2 10  TT na c S8 MggggggggggTT*- -  c3d84fc1259d283e>C97deSpanisch, (Abweichungen vom Tschigorin-System), (Panow-Verteidigung)r1bq1rk1/4bppp/p2p1n2/npp1p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 w - - 0 11^C - C de4f2388169408a3A64deModerne Benoni-Verteidigungr1bq1rk1/1p1n1pbp/p2p1np1/2pP4/8/2N3P1/PP1NPPBP/R1BQ1RK1 w - - 0 110  - _ 431bd37be20c9365eA78deModerne Benoni-Verteidigung (Hauptsystem)r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 8 11 o - _ 2daa354a42c67c14A79deModerne Benoni-Verteidigung (Hauptsystem)r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11Z - Y b2105b3eed55ab18B69deSizilianisch (Richter-Rauser-Variante)r2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 11 Y - Y 172f52ef364bf5f8B69deSizilianisch (Richter-Rauser-Variante)r2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 11 X - Y 772b38faade648c5B69deSizilianisch (Richter-Rauser-Variante)r2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10 )/ )  f25f4a581f4a7d}C97deSpanisch, (Abweichungen vom Tschigorin-System), (Panow-Verteidigung)r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12). +  6ed606b3454057c|C97deSpanisch, (Abweichungen vom Tschigorin-System), (Panow-Verteidigung)r1bq1rk1/4bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 b - - 0 11  - _ c7afddf065a43871qA78deModerne Benoni-Verteidigung (Hauptsystem)r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQR1K1 b - - 9 11E - C a9d79a24497738efA64deModerne Benoni-Verteidigungr1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 1 12D - C b5865d647b07dd6dmA64deModerne Benoni-Verteidigungr1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 0 11 - Q 273b83493651a14fOE76deKönigsindisch (Vierbauernangriff)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N2N2/PP4PP/R1BQKB1R b KQ - 2 6 N2q @ $ A62U&XXXN{~3 - M 95b82b2f139f1054TD73deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/6p1/3n4/3PP3/5NP1/PP3PBP/RNBQK2R b KQ - 0 7~2 - M 51bf2667f81fad5e^D73deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 71 - M ce515c2a47fab002D73deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/5np1/3P4/3P4/5NP1/PP2PPBP/RNBQK2R b KQ - 0 6& - M 751ae95e74fa0484D78deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP1NPPBP/R1BQ1RK1 b - - 1 7 - M 225ecaf14cc9b8a9D79deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7% - M 2c74513cee07acb4D78deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 Z -  45284ee920e59f57WD47deDamengambit,Halbslawische Verteidigung (Meraner Variante)r1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7Y +  c927a821fd69c9cD47deDamengambit,Halbslawische Verteidigung (Meraner Variante)r1bqkb1r/pp1n1ppp/2p1pn2/8/2pP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7M - m 94d0673195503f76vD60deAbgelehntes Damengambit (Orthodoxe Verteidigung)r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2NBPN2/PP3PPP/R2QK2R b KQ - 4 7L - m c1ddc693acd0fd05D60deAbgelehntes Damengambit (Orthodoxe Verteidigung)r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 3 7@ -  be4609de2fc2a9dbD63deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Tc1)r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R b K - 4 7 - ] 32f2da2bc4f28d7c|D85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqk2r/ppp1ppbp/6p1/8/3PP3/2P2N2/P4PPP/R1BQKB1R b KQkq - 2 7 - ] e99636ddac14ec41AD85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqk2r/ppp1ppbp/6p1/8/3PP3/2P5/P4PPP/R1BQKBNR w KQkq - 1 7 - ] 592a0b6b575327ebD85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqkb1r/ppp1pp1p/6p1/8/3PP3/2P5/P4PPP/R1BQKBNR b KQkq - 0 6 - ] dad8b9b6a13adff2D85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqkb1r/ppp1pp1p/6p1/8/3PP3/2n5/PP3PPP/R1BQKBNR w KQkq - 0 6  - ] 964997463abfd1b0D85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqkb1r/ppp1pp1p/6p1/3n4/3PP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 5  - ] 524e9a0ed13f6cbaD85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqkb1r/ppp1pp1p/6p1/3n4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5  - ] cda0e0436eda71e6D85deGrünfeld-Verteidigung(Hauptfortsetzung)rnbqkb1r/ppp1pp1p/5np1/3P4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4  - a c835035762dd8b04D96deGrünfeld-Verteidigung (Russisches System)rnbq1rk1/ppp1ppbp/5np1/8/2QP4/2N1PN2/PP3PPP/R1B1KB1R b KQ - 0 7  hva M 3 hhhhhhhhhhhhj) + _ c2d2e17fa910e9fD87deGrünfeld-Verteidigung(Hauptfortsetzung, rnbq1rk1/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQ1RK1 b - - 1 9( - _ 725855238662d58fD87deGrünfeld-Verteidigung(Hauptfortsetzung, rnbq1rk1/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQ - 0 9' - _ 9429848d7925def2D87deGrünfeld-Verteidigung(Hauptfortsetzung, rnbq1rk1/ppp1ppbp/6p1/8/2BPP3/2P5/P3NPPP/R1BQK2R b KQ - 4 8 - Q 453af7562916efe0E76deKönigsindisch (Vierbauernangriff)r1b2rk1/pp2ppbp/2np1np1/q7/2P1PP2/2NBBN2/PP2Q1PP/R3K2R w KQ - 4 11 - Q 3c68a895e9b2605f_E76deKönigsindisch (Vierbauernangriff)r1b2rk1/pp2ppbp/2np1np1/2q5/2P1PP2/2NBBN2/PP2Q1PP/R3K2R b KQ - 3 10  - Q 4f60137968887bd1E76deKönigsindisch (Vierbauernangriff)r1b2rk1/pp2ppbp/2np1np1/2q5/2P1PP2/2NB1N2/PP2Q1PP/R1B1K2R w KQ - 2 10 - Q e48dcb9b7919ded2E76deKönigsindisch (Vierbauernangriff)rnb2rk1/pp2ppbp/3p1np1/2q5/2P1PP2/2NB1N2/PP2Q1PP/R1B1K2R b KQ - 1 9 - Q 728b44b9375d8556VE76deKönigsindisch (Vierbauernangriff)rnb2rk1/pp2ppbp/3p1np1/2q5/2P1PP2/2NB1N2/PP4PP/R1BQK2R w KQ - 0 9 - Q 32d744cebaf81ea2E76deKönigsindisch (Vierbauernangriff)rnb2rk1/pp2ppbp/3p1np1/q1P5/2P1PP2/2NB1N2/PP4PP/R1BQK2R b KQ - 2 8 - Q 67dae56c8378dcd1E76deKönigsindisch (Vierbauernangriff)rnb2rk1/pp2ppbp/3p1np1/q1P5/2P1PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 1 8 - Q bea970372a0afd5e^E76deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/2P5/2P1PP2/2N2N2/PP4PP/R1BQKB1R b KQ - 0 7 - Q c14a52e7c916aa322E76deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP4PP/R1BQKB1R w KQ - 0 7 U#  w o g _ W O G > 5 , #    ~ v n f ^ V N F > 6 . &     } t k b Y P G > 5 , #    k b}ume]UME=5-%  }ume]UME=5-%  }|tld\TLD<4,$ wne\SJA8/ t( xph`XPH@8/& {skc[SKC;3+#{ri`WNE<3*" zrjbZRJB:2*"  %(Way[ V/TyM?o6"32)d)G(  %(W~r}{j{LzxqnGmefaHMHB?><=q;::3;,,)   E Mc[5yO~~ttGqnc`caZ9TQNJGA870(u'g%#"N"5o 0:ce9;}},|vtg4ebaLNNMMhIl;:r:(5('P&`$=? C i,T[i}}|{rm-e`]'Y&XONFB[55 3.,FGY D_s!zT YmP*~~}}8zrqoZmnRRH:866-+''&mldx2*@~|~N~~|vpnbybZQ7,t}QVC~~'}}}{7z.z&wp!oenj{ffZV^QaPPJA@?<.;2.+$"c"6~1 { 91I_h~~|y.v<tpon}k , s w y[ssssssssssssCCCCCnR' - C d19a499c3309cef5A63deModerne Benoni-Verteidigungr1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 5 10  - _ 61a09111b4980d377A76deModerne Benoni-Verteidigung (Hauptsystem)rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PPQ1BPPP/R1B2RK1 b - - 7 10  - _ d0b9e30ca64e3153SA76deModerne Benoni-Verteidigung (Hauptsystem)rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10 - Y b1fedf5895e33ceeB65deSizilianisch (Richter-Rauser-Variante)r1bq1rk1/pp2bppp/3ppn2/6B1/3QPP2/2N5/PPP3PP/2KR1B1R b - - 0 10 - Y 9eb1c566eb2c084fOB65deSizilianisch (Richter-Rauser-Variante)r1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10 )/o - ? ee5f2555eeec4884C95deSpanisch, (Breyer-System)rnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10\ - i 25a99e6fdada2343CC96deSpanisch, (Abweichungen vom Tschigorin-System)r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10[ - i d590f8e8438862cfC96deSpanisch, (Abweichungen vom Tschigorin-System)r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10-I -  45eb8369a1ca8066fD49deDamengambit,Halbslawische Verteidigung (Meraner Variante,Sosin-Angriff)r1bqkb1r/3n1ppp/p3pn2/1pp1P3/3P4/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 10,H -  24929594a5d4a602D49deDamengambit,Halbslawische Verteidigung (Meraner Variante,Sosin-Angriff)r1bqkb1r/3n1ppp/p3pn2/1pp5/3PP3/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 10-G -  a84f8f7f8274fbcdD49deDamengambit,Halbslawische Verteidigung (Meraner Variante,Sosin-Angriff)r1bqkb1r/3n1ppp/p1p1pn2/1p6/3PP3/2NB1N2/PP3PPP/R1BQK2R b KQkq - 0 9   j 4 QA00^^^^^^& -  16af83b4fa8481d6E69deKönigsindisch (Hauptvariante desg3-System mit e2-e4 und h2-h3)r1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9{ - Q 7491d31d4439a910E78deKönigsindisch (Vierbauernangriff)r1bq1rk1/pp2ppbp/2np1np1/8/2P1PP2/2N5/PPN1B1PP/R1BQK2R b KQ - 2 9z - Q 21adee94b567be7azE78deKönigsindisch (Vierbauernangriff)r1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9y - Q 8a403676a4f61b79yE78deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8x - Q edd46b2bb5c78957WE78deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8w - Q b2cad11ec833e091E78deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7 2j - Q 52a55578345da5f4E79deKönigsindisch (Vierbauernangriff)r1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9Y - o e258c88fa5742128(E97deKlassisches System (Königsindische Verteidigung)r1bq1rk1/ppp1npbp/3p1np1/3Pp3/1PP1P3/2N2N2/P3BPPP/R1BQ1RK1 b - - 0 9X - o 48adbd2303c24d0c E97deKlassisches System (Königsindische Verteidigung)r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 1 9W - o 4c4595724944c61dE97deKlassisches System (Königsindische Verteidigung)r1bq1rk1/ppp2pbp/2np1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 8V - o f64dd621d0625040@E97deKlassisches System (Königsindische Verteidigung)r1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8 g \?g L >i W++ W W W W W W W TTTL - o 90731f81146d3e96E95deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pp1n1pbp/2pp1np1/8/2PpP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10K + o b0d1503d0162a83E95deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 9^ - M fc7b3ae87d9dc546FE59deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10J - o 788d96fad1336020 E95deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9I - o eaf77b15a6f3b39bE95deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 8 yQ - M fc01117613de46d5E56deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/b1p5/2BP4/P1N1PN2/1P3PPP/R1BQ1RK1 w - - 1 10 - M df2d1fb4f24a7bc7E56deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2p5/1bBP4/P1N1PN2/1P3PPP/R1BQ1RK1 b - - 0 9 - M 8033a5818fbe1201E57deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/8/1bBp4/P1N1PN2/1P3PPP/R1BQ1RK1 w - - 0 10p - M 28623cfb43e864a4E58deNimzo-Indisch (Moderne Variante)r1b2rk1/ppq2ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 1 10o - M 2e7d03da2fa32ba5E58deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 9n - M 65a869eb82ffc4e5E58deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 9: - o 8d17a0c2b38a2613E96deKlassisches System (Königsindische Verteidigung)r1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10}( + C cb8d27bf1b4f07fA63deModerne Benoni-Verteidigungr1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N3P1/PP1NPPBP/R1BQ1RK1 b - - 6 10 - M 96972bdfcd79780c E56deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2p5/1bpP4/P1NBPN2/1P3PPP/R1BQ1RK1 w - - 0 9 - M 449112ed9f4796efE56deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8 - M 8f0d23cbd60b18afE56deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8  nz ln 3 P  L  n - Y 97cbd76cfc8c4f9fB77deSizilianisch (Moderne Drachenvariante)r2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R w KQ - 5 10m - Y 750a293e26d69faeB77deSizilianisch (Moderne Drachenvariante)r1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9 J - k ea1f548f67d40aaaC83deSpanisch, (Offene Verteidigung) (Hauptvariante)r2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10 L  - Y 1d80d119a5955c9bB68deSizilianisch (Richter-Rauser-Variante)r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 98 - E 1270997b796089d0C93deSpanisch, (Smyslow-Variante)r1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10r  - _ ce3bee7ed3bbda3b;A73deModerne Benoni-Verteidigung (Hauptsystem)rn1q1rk1/pp3pbp/3p1np1/2pP4/4P1b1/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10  - _ cce8244c943ed4d1A73deModerne Benoni-Verteidigung (Hauptsystem)rnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9 + Y 94ca2f66f3ef00a B68deSizilianisch (Richter-Rauser-Variante)r2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10\ - K e7a6f486c5d2aeeeB99deSizilianisch (Najdorf-Variante)r1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 10[ - K d4458fdb257a4322"B99deSizilianisch (Najdorf-Variante)rnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9& - ? 2b6a0affff2565c6C94deSpanisch, (Breyer-System)rnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 > 6 2 , x PPPPsQ , - W 84ced8537b7812e0D17deDamengambit (Slawische Verteidigung),rn1qkb1r/pp2pppp/2p2n2/4Nb2/P1pP4/2N5/1P2PPPP/R1BQKB1R b KQkq - 2 6 + - W 59f6079c20f57796D17deDamengambit (Slawische Verteidigung),rn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6w - = 7ff44cc959fc769dD27deAngenommenes Damengambitrnbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 b kq - 1 6w + = 18137fd250fad8dD27deAngenommenes Damengambitrnbqkb1r/pp3ppp/4pn2/2p5/2BP4/4PN2/PP3PPP/RNBQK2R w KQkq - 0 6w - = e7f0e653da48a6f0D27deAngenommenes Damengambitrnbqkb1r/ppp2ppp/4pn2/8/2BP4/4PN2/PP3PPP/RNBQK2R b KQkq - 0 5  - S 8c87f2e3dccfe5d9D33deDamengambit (Tarrasch-Verteidigung)r1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6 - S a06149a23c183de1D33deDamengambit (Tarrasch-Verteidigung)r1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6 + S b8c91402d8998e2D33deDamengambit (Tarrasch-Verteidigung)rnbqkbnr/pp3ppp/8/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 5 - S d0e87db6456ff9dfD33deDamengambit (Tarrasch-Verteidigung)rnbqkbnr/pp3ppp/8/2pp4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5 - S effca4725fca3914D33deDamengambit (Tarrasch-Verteidigung)rnbqkbnr/pp3ppp/4p3/2pP4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4 ! - q f4db452e04aaff322D18deDamengambit (Slawische Verteidigung Hauptvariante)rn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6 - I 884e5029c24e8723#D36deDamengambit (Abtauschvariante)rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 6 - I 39572234d098bb47GD36deDamengambit (Abtauschvariante)rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 6~ - I ab2dcfdba75868fcD36deDamengambit (Abtauschvariante)rnbqkb1r/ppp2ppp/5n2/3p2B1/3P4/2N5/PP2PPPP/R2QKBNR b KQkq - 1 5}} - I 6d7798ed17d2b3344D36deDamengambit (Abtauschvariante)rnbqkb1r/ppp2ppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5| - I 526341290d7773ffD36deDamengambit (Abtauschvariante)rnbqkb1r/ppp2ppp/4pn2/3P4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 4iu - k 5db5448e016c8c47GD42deDamengambit (Verbesserte Tarrasch-Verteidigung)rnbqkb1r/pp3ppp/4p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 6t - k f098063c253304e3D42deDamengambit (Verbesserte Tarrasch-Verteidigung)rnbqkb1r/pp3ppp/4p3/2pn4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 6 J Ep \ FFEEEEEEEEEEEEEEbbbbb~H - C acf99951555ebf85A62deModerne Benoni-Verteidigungr1bq1rk1/pp3pbp/n2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 5 10{G - C e27932c1d3a123399A62deModerne Benoni-Verteidigungrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 4 9{F - C 9c0c49f5af52f829)A62deModerne Benoni-Verteidigungrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 3 9}E - C 96a4a4427a0b11c2A62deModerne Benoni-Verteidigungrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 2 8~D - C 2354873f37e6c9bbA62deModerne Benoni-Verteidigungrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R w KQkq - 1 8~C - C 93e8ba89cca10211A62deModerne Benoni-Verteidigungrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 7 y6 - k 4d58e847b6d93ca2A68deModerne Benoni-Verteidigung (Dreibauern-System)rn1q1rk1/pp3pbp/3p1np1/2pP4/4PPb1/2N2N2/PP2B1PP/R1BQK2R w KQ - 5 105 - k 4f8b2275f15c3248HA68deModerne Benoni-Verteidigung (Dreibauern-System)rnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 4 94 - k 3c0ba18cf07978ebA68deModerne Benoni-Verteidigung (Dreibauern-System)rnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 93 - k 36a34c3b25209100A68deModerne Benoni-Verteidigung (Dreibauern-System)rnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8S $ - [ 53dae535c32cd7caA69deBenoni-Verteidigung (Dreibauern-System)rnbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 5 10 m { O B >fD-` -  4fd267dfadf4bed8D64deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)r1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R w K - 0 9+_ -  9d25962c4ad44604D64deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R b K - 1 8,P -  41f8fc120f3aaac5D65deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)r1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R b K - 0 9? -  814ca588eccd530eD99deGrünfeld-Verteidigung (Russisches System, Smyslow-Variante)rn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9. - K 9ad3590ba8997158XE18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2P2NP1/P1Q1PPBP/R1B2RK1 b - - 0 9- - K 1921ebd65ef08941AE18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 9% -  fe5c5e0a38274824$E69deKönigsindisch (Hauptvariante desg3-System mit e2-e4 und h2-h3)r1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9 O, - K aba85640b9fe7f4cLE18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 8+ - K 1ab1245dab284328(E18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8* - K 20b968c21961ced2E18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 7) - K db2e7060db834c0b E18deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 5 7 - K 2910a3204606afc5E19deDamenindisch (Hauptfortsetzung)rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 9 T o " _,sssss.a -  844e56f9e4b83098D64deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)r1bq1rk1/1p1nbppp/p1p1pn2/3p2B1/2PP4/P1N1PN2/1PQ2PPP/2R1KB1R b K - 0 92> - q 4d5774db19058a8cD19deDamengambit (Slawische Verteidigung Hauptvariante)rn1q1rk1/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P2QPPP/R1B2RK1 b - - 4 9 - q db51fbf95741d108D19deDamengambit (Slawische Verteidigung Hauptvariante)rn1q1rk1/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 w - - 3 9 - q d1f9164e821838e3D19deDamengambit (Slawische Verteidigung Hauptvariante)rn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8 - q af8c6d7afeebe3f3D19deDamengambit (Slawische Verteidigung Hauptvariante)rn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8 - q 66cd047cb51c2bd1D19deDamengambit (Slawische Verteidigung Hauptvariante)rn1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7 - q 82acb71f1c886f60`D19deDamengambit (Slawische Verteidigung Hauptvariante)rn1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7G  - c ae093703f4eb5908D56deAbgelehntes Damengambit,Lasker-Verteidigungrnb2rk1/ppp1qpp1/4p2p/3p4/2PPn3/2N1PN2/PP3PPP/2RQKB1R b K - 1 9  - c d192f84e77f90dd6D56deAbgelehntes Damengambit,Lasker-Verteidigungrnb2rk1/ppp1qpp1/4p2p/3p4/2PPn3/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9 - c 315226ab4aaa8ab3D56deAbgelehntes Damengambit,Lasker-Verteidigungrnbq1rk1/ppp1Bpp1/4p2p/3p4/2PPn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 8 ) c 4ed2f49a5bf6bdD56deAbgelehntes Damengambit,Lasker-Verteidigungrnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 2 8( r - c dfb86383d53719cbD57deAbgelehntes Damengambit,Lasker-Verteidigungrnb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9  ; Y$ j^j`Qfffffk - Y 954c0a7bdebd33abB76deSizilianisch (Moderne Drachenvariante)rnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8] - K ec68caf876584cbaB98deSizilianisch (Najdorf-Variante)rnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R w KQkq - 3 9\ - K ea77f5d91a1303bbB98deSizilianisch (Najdorf-Variante)rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/R3KB1R b KQkq - 2 8[ - K 50558eea366e5500B98deSizilianisch (Najdorf-Variante)rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8M - E d4a4bbd662bb0e7c|C89deSpanisch, (Marshall-Angriff)r1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 9L - E 51ce99c2fe6f405aZC89deSpanisch, (Marshall-Angriff)r1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 8- - o 601195726efa180a D58deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/p1p1bpp1/1p3n1p/3p4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9, - o 5f054cb6745fd8c1D58deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/p1p1bpp1/1p2pn1p/3P4/3P3B/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 8+ - o 512fd77bd691ccdcD58deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8* - o 3a469e6b28127b47GD58deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/ppp1bpp1/4pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R b KQ - 1 7) - o 60c9f6a8dbac59dcD58deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/ppp1bpp1/4pn1p/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 7 v; -  252c24fcbb48226ajD48deDamengambit,Halbslawische Verteidigung (Meraner Variante)r1bqkb1r/p2n1ppp/2p1pn2/1p6/2BP4/2N1PN2/PP3PPP/R1BQK2R w KQkq - 0 8 - o c0eb36fbcbbac59dD59deAbgelehntes Damengambit (Tartakower-Verteidigung)rnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9+ -  ab377ca133bc56f0D66deAbgelehntes Damengambit (Orthodoxe Verteidigung, Erweitertes Fianchetto)r1bq1rk1/pp1nbppp/2p1pn2/6B1/2pP4/2NBPN2/PP3PPP/2RQK2R w K - 0 9, -  793145936182b813D66deAbgelehntes Damengambit (Orthodoxe Verteidigung, Erweitertes Fianchetto)r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2NBPN2/PP3PPP/2RQK2R b K - 1 8- -  2c3ce43158027a60`D66deAbgelehntes Damengambit (Orthodoxe Verteidigung, Erweitertes Fianchetto)r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R w K - 0 8= -  39b3e62fe28c4b6ajD48deDamengambit,Halbslawische Verteidigung (Meraner Variante)r1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9< -  eb4417dc05acb3b6D48deDamengambit,Halbslawische Verteidigung (Meraner Variante)r1bqkb1r/p2n1ppp/2p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 1 8 * s G6 h9 ,'^**j - s 74c7084e5847d409 A72deModerne Benoni-Verteidigung (Hauptsystem mit 9.Lg5)rnbq1rk1/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP2BPPP/R2QK2R b KQ - 5 9 - s b29d5f78e8cd0fc1A72deModerne Benoni-Verteidigung (Hauptsystem mit 9.Lg5)rnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9 - s b835b2cf3d94e62a*A72deModerne Benoni-Verteidigung (Hauptsystem mit 9.Lg5)rnbqk2r/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R b KQkq - 3 8 - Y 33d240e0871d310c B64deSizilianisch (Richter-Rauser-Variante)r1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9 - Y cec43ded9e8c0c85B64deSizilianisch (Richter-Rauser-Variante)r1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9 - Y c46cd05a4bd5e56enB64deSizilianisch (Richter-Rauser-Variante)r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 8 - Y fc41957918f7eaf6B64deSizilianisch (Richter-Rauser-Variante)r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 2 8~z - I 75fd83ead38937caB73deSizilianisch (Drachenvariante)r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPPQBPPP/R4RK1 b - - 7 9y - I 5de5cc651230e86ajB73deSizilianisch (Drachenvariante)r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 w - - 6 9x - I 574d21d2c7690181B73deSizilianisch (Drachenvariante)r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8i - I c994f44803272ea0B74deSizilianisch (Drachenvariante)r1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 96 - I ad4120093dde2475uC91deSpanisch (Bogoljubow-Variante)r1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 95 - I 68740fa32c1709377C91deSpanisch (Bogoljubow-Variante)r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 1 94 - I 62dce214f94ee0dcC91deSpanisch (Bogoljubow-Variante)r1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b kq - 0 8 >CS - k 95fa8d363cfbc201C81deSpanisch, (Offene Verteidigung), (Keres-System)r1bqkb1r/2pp1ppp/p1n5/1p2p3/B2Pn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 7R - k f5fee723a7567f3c *T%$33ttt |u - M b658ae2d98b72a5f_D75deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/6p1/2Pn4/8/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 8mf - # cc530f2dd4c5b00eE09deKatalanischr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8me - # 953db74f4e38183e>E09deKatalanischr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 w - - 0 8 W + [ edd5a1b6279c2beE66deKönigsindisch (Jugoslawische Variante)r1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8 V - [ b4d51948fb5f54e3E66deKönigsindisch (Jugoslawische Variante)r1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8H - w 84d56e5b8d44526dmE68deKönigsindisch (Hauptvariante desg3-System mit e2-e4)r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8G - w 40d2631366c4ef67gE68deKönigsindisch (Hauptvariante desg3-System mit e2-e4)r1bq1rk1/pppn1pbp/3p1np1/4p3/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8F - w caaa6b59f5211751QE68deKönigsindisch (Hauptvariante desg3-System mit e2-e4)r1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 4 79 - O 96e2a616da6c6b74tE88deKönigsindisch (Sämisch-Angriff)rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP1Q2PP/R3KBNR b KQ - 1 88 - O befae9991bd5b4d4E88deKönigsindisch (Sämisch-Angriff)rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 8* - O aa5e025633feb92a*E89deKönigsindisch (Sämisch-Angriff)rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 8 - o 6c641acf74048e0a E93deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppn1pbp/3p1np1/3Pp1B1/2P1P3/2N2N2/PP2BPPP/R2QK2R b KQ - 2 8 - o aa3e4df9c48e55c2E93deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 8 - o d44b36cdb87d8ed2E94deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 0 8 - o 6e43759e215b188fE94deKlassisches System (Königsindische Verteidigung)r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8 - o 5da00ec3c1f3f543CE94deKlassisches System (Königsindische Verteidigung)rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7} - Y e096ac14bc046112B67deSizilianisch (Richter-Rauser-Variante)r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9| + Y 2575246665eb123#B67deSizilianisch (Richter-Rauser-Variante)r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8m - Y 16b99d160e954908B76deSizilianisch (Moderne Drachenvariante)r1bq1rk1/pp2ppbp/2np1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R w KQ - 3 9l - Y bd5445f41f04ec0b B76deSizilianisch (Moderne Drachenvariante)rnbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPPQ2PP/R3KB1R b KQ - 2 8   n D * sao$Mgv - Y 724dec9a595a77bcB19deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7 i )  b1fb5640840ff9B35deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7!h -  63024f7e68c7d95f_B35deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7"g -  38ec7b8bc53d98c9B35deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6 +7 - Y 37e81b1804b32028(B18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2pppp/2p5/5b2/3P4/6N1/PPP2PPP/R1BQKBNR b KQkq - 2 5~ - Y 4adfabd7fbc45bdaB18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5\ - K b0fbaa7cd799ac04B49deSizilianisch (Paulsen-Variante)r1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7O - S f7271da1eb55d807B58deSizilianisch (Boleslawski-Variante)r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/2N2N2/PPP1BPPP/R1BQK2R b KQkq - 1 7N - S 894087ad298d60c8B58deSizilianisch (Boleslawski-Variante)r1bqkb1r/pp3ppp/2np1n2/4p3/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7M + S 3388fe7ba6898feB58deSizilianisch (Boleslawski-Variante)r1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6B - S 1d31bf80389aa602B59deSizilianisch (Boleslawski-Variante)r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 75 - Y 7c3beaf510240604B61deSizilianisch (Richter-Rauser-Variante)r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 6 7( - Y e88de696d25c4667gB63deSizilianisch (Richter-Rauser-Variante)r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 1 7} - E d5627334f6bb9992B88deSizilianisch (Sosin-Angriff)rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7| - E 1c6663167d9dc976vB88deSizilianisch (Sosin-Angriff)rnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7 - s 1674f1eb0a168f27'B89deSizilianisch (Sosin-Angriff), (Velimirovic-Angriff)r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 3 7 - s 657c4a078b2c94a9B89deSizilianisch (Sosin-Angriff), (Velimirovic-Angriff)r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 2 7  + a 3adfb3bc92992a3B95deSizilianisch (Najdorf-Variante) mit 6. Lg5rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N2Q2/PPP2PPP/R3KB1R b KQkq - 1 7 - a b98f8008e554c418B95deSizilianisch (Najdorf-Variante) mit 6. Lg5rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7 t - c c67627e4d3bbb372rC19deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk2r/pp2nppp/4p3/2ppP3/P2P4/2P5/2P2PPP/R1BQKBNR b KQkq - 0 7xg - = 3b053218f098d5c5D28deAngenommenes Damengambitrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7wf - = ad03bd3abedc8e41AD28deAngenommenes Damengambitrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7{ ~ 1 pel+D .&| + s def66008c3b7741AA71deModerne Benoni-Verteidigung (Hauptsystem mit 8.Lg5)rnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 3 8m - K ad1d698452931e4cLA94deHolländisch (Stonewall-System)rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8^ - K be17cadfca95b341AA95deHolländisch (Stonewall-System)rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P1Q1PPBP/RNB2RK1 b - - 1 8pO - % 29a01b374dca3cc8A97deHolländischrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQR1K1 b - - 3 8pN - % ad1415bcca6297dcA97deHolländischrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 ap@ - % 1c0d67a1d8b4abb8A98deHolländischrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 8p1 - % 21b275e810effcb1A99deHolländischrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8" - I bd4962cbaa8d1c5b[B72deSizilianisch (Drachenvariante)r1bqk2r/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2QK2R b KQkq - 5 8! - I 29385ae6bb9ada91B72deSizilianisch (Drachenvariante)r1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R w KQkq - 4 8 - I 82d58204aa0b7f92B72deSizilianisch (Drachenvariante)rnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 3 7 - q b4237848f7ebab02C59deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/p4ppp/2p2n2/n3p1N1/8/8/PPPPBPPP/RNBQK2R b KQkq - 1 8 + q cab0cb43c7df72b+C59deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/p4ppp/2p2n2/nB2p1N1/8/8/PPPP1PPP/RNBQK2R w KQkq - 0 8 - q fb73e240dc52b440@C59deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/pp3ppp/2P2n2/nB2p1N1/8/8/PPPP1PPP/RNBQK2R b KQkq - 0 7 - q db216a684541afb7C59deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/pp3ppp/2p2n2/nB1Pp1N1/8/8/PPPP1PPP/RNBQK2R w KQkq - 0 7 - q 495b878732817c0c C59deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/ppp2ppp/5n2/nB1Pp1N1/8/8/PPPP1PPP/RNBQK2R b KQkq - 2 6} + M dbc81b5902bc0399D74deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/6p1/2pn4/3PP3/5NP1/PP3PBP/RNBQ1RK1 b - - 0 8~ - M c9bb8cfd7bab7d333D74deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8 sY 0 !  [,"sss~? - M 51bf2667f81fad5e^D76deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP~@ - M 2fca5d5384ec764eND76deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 7*O -  96b565204141ca1cD62deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Dc2 c5 8. cd5)r1bq1rk1/pp1nbppp/4pn2/2pp2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 0 8|A + M 651d25c9ca91d00D76deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 83 - _ 808d6f42510ed30c D86deGrünfeld-Verteidigung(Hauptfortsetzung, rnbq1rk1/ppp1ppbp/6p1/8/2BPP3/2P5/P4PPP/R1BQK1NR w KQ - 3 82 - _ 8a2582f584573ae7D86deGrünfeld-Verteidigung(Hauptfortsetzung, rnbqk2r/ppp1ppbp/6p1/8/2BPP3/2P5/P4PPP/R1BQK1NR b KQkq - 2 7% -  ef9fe73d2bfd2216D97deGrünfeld-Verteidigung (Russisches System, Ragosin-Variante)r1bq1rk1/ppp1ppbp/n4np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8$ -  a11f4cadad02beaaD97deGrünfeld-Verteidigung (Russisches System, Ragosin-Variante)rnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 7 - O 9c51f88f648b33c0E28deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pp3ppp/3ppn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 0 8 - O a5eb6eeeb6f37aadE28deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pp1p1ppp/4pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 1 7 - O f0e6cf4c8f73b8deE28deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR w KQ - 0 7  + O e06b60ca762dfaeE29deNimzo-Indisch (Sämisch-Variante)r1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 2 8{ - M 1703807427325060`E53deNimzo-Indisch (Moderne Variante)r1bq1rk1/pp1n1ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8z - M 24e0fb29c79abdacE53deNimzo-Indisch (Moderne Variante)rnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 b - - 1 7y - M 5a95801dbb6966bcE53deNimzo-Indisch (Moderne Variante)rnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7m - U 80533915e338a742BE63deKönigsindisch mit g3 und 6. ... Sc6r1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8l - U 52a4c8e604185f9eE63deKönigsindisch mit g3 und 6. ... Sc6r1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 4 7k - U 2cd1b3d278eb848eE63deKönigsindisch mit g3 und 6. ... Sc6r1bq1rk1/ppp1ppbp/2np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 3 7 < eT ? tttt(|_ - M 7a1d1fe6073cb8a5E74deKönigsindisch (Awerbach-System)rnbq1rk1/pp2ppb1/3p1npp/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8^ - M e8ea548090e8f1b0E74deKönigsindisch (Awerbach-System)rnbq1rk1/pp2ppbp/3p1np1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR b KQ - 0 7] - M 52e217d309ce67edE74deKönigsindisch (Awerbach-System)rnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7& - O 2c8004766c15676foE87deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7 - o 99dd36a42426b80eE92deKlassisches System (Königsindische Verteidigung)rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R b KQ - 0 7 - o 23d575f7bd002e53SE92deKlassisches System (Königsindische Verteidigung)rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 7 - k de197162285263beA67deModerne Benoni-Verteidigung (Dreibauern-System)rnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8 Q - M 9e9da6b188ca61e2E75deKönigsindisch (Awerbach-System)rnbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8C - O 714e8db1b84c5925%E85deKönigsindisch (Sämisch-Angriff)r1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8B - O a3b97c425f6ca1f9E85deKönigsindisch (Sämisch-Angriff)r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 4 7A - O b71d978d7747ac07E85deKönigsindisch (Sämisch-Angriff)r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 75 - O 10564105aad82f77wE86deKönigsindisch (Sämisch-Angriff)rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 84 - O 822caceadd18fcccE86deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 73 - O 96884725f533f1322E86deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7' - O b46393b24dcd52355E87deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp2pbp/3p2p1/3Pp2n/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 1 8 - o 7f9674d269e1da11E92deKlassisches System (Königsindische Verteidigung)rnbq1rk1/pp3pbp/3p1np1/2pPp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ c6 0 8 6   z i X=/AAAAAAAAAf - M 26648d1b615d2585E73deKönigsindisch (Awerbach-System)rnbq1rk1/ppp1ppb1/3p1npp/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7 - M b493c67df6896c90E73deKönigsindisch (Awerbach-System)rnbq1rk1/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP2BPPP/R2QK1NR b KQ - 3 6 - M 72c9914b4603b758XE73deKönigsindisch (Awerbach-System)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR w KQ - 2 6 - M 78617cfc935a5eb3E73deKönigsindisch (Awerbach-System)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 5  - Q 69ae3de8a0d581acE77deKönigsindisch (Vierbauernangriff)rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N5/PP2B1PP/R1BQK1NR w KQ - 0 7 - Q 8fdfec465f928ad1E77deKönigsindisch (Vierbauernangriff)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 2 6 - Q fc5f6fbf5eb7c072rE77deKönigsindisch (Vierbauernangriff)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR w KQ - 1 6~ - Q f6f782088bee2999E77deKönigsindisch (Vierbauernangriff)rnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 5u - O 8e8aa2801116dabfE81deKönigsindisch (Sämisch-Angriff)rnbq1rk1/pp2ppbp/2pp1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7t - O 1cf04f6f66d60904E81deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6s - O 6ff8f483e7ec128aE81deKönigsindisch (Sämisch-Angriff)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6i - O 7799067f9855be9fE82deKönigsindisch (Sämisch-Angriff)rnbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7] - o ab7eb78f6960d88fE91deKlassisches System (Königsindische Verteidigung)rn1q1rk1/ppp1ppbp/3p1np1/8/2PPP1b1/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 7\ - o a9ad7dbd2ee5d665eE91deKlassisches System (Königsindische Verteidigung)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 62 ' F :  e<Q#ry'GWWWK'lt - # d1db5e1005fe61d9E04deKatalanischrnbqkb1r/pp3ppp/4pn2/2p5/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 0 6mR - O 73064c4fc6d5250fD92deGrünfeld-Verteidigung mit 5. Lf4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5k~ + # d89a55ab2c9142e.E02deKatalanischr1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6l} - # 3e6ade075261f9e2E02deKatalanischrnbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5k| - # ecce6348925f0b99E02deKatalanischrnbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5 ` - [ 727efc0af3751a43CE16deDamenindisch (Hauptfortsetzung mit Lb4)rn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6 _ - [ bb3f950cb882d261aE16deDamenindisch (Hauptfortsetzung mit Lb4)rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 2 5  - O 79aea1f8138ccce4D92deGrünfeld-Verteidigung mit 5. Lf4rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6V - g fd896aa0d70589adE22deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)r1bqk2r/pp1p1ppp/n3pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6U - g b309c13051fa1511E22deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)rnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5T - g cceae3e0b2e6427d}E22deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5 S - g 2a9b324e4da14900E22deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)rnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4K&L - g 18e419d2406bb012E23deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)r1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6B - O 576360497e75d991E24deNimzo-Indisch (Sämisch-Variante)rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6A - O b112b1e78132d2ecE24deNimzo-Indisch (Sämisch-Variante)rnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5@ - O fac7dbd62c6e3dacE24deNimzo-Indisch (Sämisch-Variante)rnbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5? - O dbfea0d031d66fa6E24deNimzo-Indisch (Sämisch-Variante)rnbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4y8 - = 152f83f64ef34772rE35deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6jj - # 2366fc513012c6355E05deKatalanischrnbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6ks - # 37aa8fbefab96aa4E04deKatalanischrnbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 q ~ w p i a Y Q I A 9 1 )b  "   zsle^WPIA91)" yqiaYRKD=6/(! zrjbZRJB:2*"rj:2" xqjc\UNG@92+$ z ~ w p i b [ T M F ? 8 1 * #     B z s l e ^ W P I B ; 4 - &     Z* ~ w p i b [ T M F ? 7 / ( !    y r j b Z R J BRJ ; 4 - &     zsle^VNF>6.&|unf^VNG@92+$SOORUzUkS[L=O%OQRyM:OSNTLoOTLSO5SOORUUSLeOMOQRMiO,NTOuOhoOdOaOaOZOXOW%OVOV;OSONOGO7O1O,kO)O%O!OOgOOOOWNNNNN*N~mN|NzNyNuVNmNhNa)N[NSNQENN$NF8NBqN1 N.N-N,N)N%NNNN>MMMMM~M|QM{M{UMxMwXMvMsMoMnMiMglMcM`M_M\MR MJMFMFpMASM-M+#M0MMMVM MMMMLLLL5LLLL,LL~ L}L|L|LyLyALuLp%LnL_L]LWZLOaVUVOpVLZVHV8V6FV4?V0V.V.4V(WVVVVV hV2U5U@U1UUUU|UzUyZUvxUvPUqUneUjUe5Ub;UKUFYUF$UE'UC U:U8U6U+2U%tU!UU(U9UU SUTgT3T~=T}TyTxTqTkFTeT^TNTBT;T7T7T5$TT T'TZTT TTTkTS2S!SSSSSSS~pS}S|TSz]SwSqSqSjuSdSaSMRSFzSC S4rS*SS\SSSSLSSNR RR{ROR?RR6R%RR}R}RuRuRpRp?RdcR^RXRWNRURURRR=R1R&RRRRR ?R QLQQQFQ6Q"QuQt QqqQnYQlQlQhQY*QWOQVQJQDQBQB|QAQ@Q:Q.[Q$QQ$QMQ PPl[Pc|PaPUPQPHPB%P?P>sP<P;bP8FP7P;PPP;P PPJPPOOdOiOYOOOOOOrOOOpOO5OkOOO?O/OOO~O}O}O|HO|OyIOuOu$  >M>e :9 L >>>>>Cwk - = 5b01580d6b3568f8D29deAngenommenes Damengambitrnbqkb1r/5ppp/p3pn2/1pp5/2BP4/4PN2/PP2QPPP/RNB2RK1 w kq - 0 8%[ - M 9dd68d1f303cbd99C06deFranzösisch (Tarrasch-Variante)rnbqkb1r/pp1n1ppp/4p3/2ppP3/3P4/3B4/PPPN1PPP/R1BQK1NR w KQkq - 0 6 - M 7ba75cb1cf7bb6e4C06deFranzösisch (Tarrasch-Variante)rnbqkb1r/pppn1ppp/4p3/3pP3/3P4/3B4/PPPN1PPP/R1BQK1NR b KQkq - 2 5 - e 2714615a2e1f4fdcC88deGeschlossene Verteidigung (Spanische Partie)r1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 w - - 2 8 - e 2dbc8cedfb46a6377C88deGeschlossene Verteidigung (Spanische Partie)r1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7y - g 14061a8c293eef5aZC90deSpanisch (Abweichungen von der Hauptvariante)r1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 w kq - 0 8 = - M 40e1ad65f1dd171cC06deFranzösisch (Tarrasch-Variante)r1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR w KQkq - 1 7 - M eb0c7587e04cb21fC06deFranzösisch (Tarrasch-Variante)rnbqkb1r/pp1n1ppp/4p3/2ppP3/3P4/2PB4/PP1N1PPP/R1BQK1NR b KQkq - 0 6 ] -  e233ffe829d28874tD61deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Dc2)r1bq1rk1/pppnbpp1/4pn1p/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 0 8\ -  70c4b48ebe06c161aD61deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Dc2)r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 4 7 l. + M b5bfc9fa4027324$C06deFranzösisch (Tarrasch-Variante)r1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 8 - M 544546aad9f61ae2C06deFranzösisch (Tarrasch-Variante)r1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7 - e 7d0091a166e64fd5C88deGeschlossene Verteidigung (Spanische Partie)r1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 ( +  \(u^     - S dbd66edd12312e0c A87deHolländisch (Leningrader Variante)rnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5 - q 569599aef940b261aA96deHolländisch (Hauptvariante),Iljin-Genewski-Systemrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7 - q ad02810c3ba230b8A96deHolländisch (Hauptvariante),Iljin-Genewski-Systemrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 i - S 6d26769dab01d743CA87deHolländisch (Leningrader Variante)rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7 - S 96b16e3f69e3559aA87deHolländisch (Leningrader Variante)rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 - S af0bf85ebb9b1cf7A87deHolländisch (Leningrader Variante)rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6 - S d17e836ac768c7e7A87deHolländisch (Leningrader Variante)rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6 - Y 543f7d61282d2b08B18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2ppp1/2p3bp/8/3P1P1P/6N1/PPP3P1/R1BQKBNR b KQkq - 0 7 - Y a929006c31bc1681B18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7 - Y 3bde4b0aa6685f94B18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2pppp/2p3b1/8/3P3P/6N1/PPP2PP1/R1BQKBNR b KQkq - 0 6 - Y a77dd7230d5726eaB18deCaro-Kann-Verteidigung (Hauptvariante)rn1qkbnr/pp2pppp/2p3b1/8/3P4/6N1/PPP2PPP/R1BQKBNR w KQkq - 3 6z* - A d1eda6f64269a376vA59deWolga-Gambit,Benkö-Gambitrn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7y) - A 15eaabbea9e91e7c|A59deWolga-Gambit,Benkö-Gambitrn1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7x( - A 2c503ddf7b915711A59deWolga-Gambit,Benkö-Gambitrn1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6w' - A d7c7257db973d5c8A59deWolga-Gambit,Benkö-Gambitrn1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6z #r z Y<r  C(% - Y c095a91913e599c7B62deSizilianisch (Richter-Rauser-Variante)r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7 - K 118cd876319c1e7b{B48deSizilianisch (Paulsen-Variante)r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6  - Y b6e25b280bc70995B60deSizilianisch (Richter-Rauser-Variante)r1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 6} - Q 754f7dd6a24a08acB83deSizilianisch (Scheveninger System)r1bqkb1r/pp3ppp/2nppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7| - Q dea2a534b3dbadafB83deSizilianisch (Scheveninger System)rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6}9 - C bf0e01c82c76da29)A61deModerne Benoni-Verteidigungrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7q - a fc1b09641ddeb986B94deSizilianisch (Najdorf-Variante) mit 6. Lg5r1bqkb1r/1p1npppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 2 7 p - a cff87239fd76544aJB94deSizilianisch (Najdorf-Variante) mit 6. Lg5rnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6 [ - O 16971ee27034b3a3E26deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6~Z - O bbba5c50546b3b07E26deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6P - O d50bba61f4a1d476vE27deNimzo-Indisch (Sämisch-Variante)rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQ - 0 6hE -  4276217c9d52e4f3A60deBenonirnbqk2r/pp2bppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 7gD -  56ba529357f94862bA60deBenonirnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6- -  14b6c8f8e92af081B38deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7, -  4f58fc0d44d0b117B38deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 6! - K c37b2985d6bce6a7B48deSizilianisch (Paulsen-Variante)r1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 0 7  - Y 5423a57ad19dd9a4B60deSizilianisch (Richter-Rauser-Variante)r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 5 7 e - c 9ef54e8458436df5C18deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7 d - c a0baf239e3cae648HC18deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 6 c - c eb6f98084e960908C18deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 6  )z X : oK))))))))))))))LLL' + O fe70fbc5f35257d}D83deGrünfeld-Verteidigung mit 4. Lf4rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6\& + O 54fe20b8a6ccc96D83deGrünfeld-Verteidigung mit 4. Lf4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5% - O a862a0b9ae3344322D83deGrünfeld-Verteidigung mit 4. Lf4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5 + ] 1cd9471fdfb3160`D84deGrünfeld-Verteidigung(Hauptfortsetzung)rnbq1rk1/ppp1ppbp/5np1/3P4/3P1B2/2N1P3/PP3PPP/R2QKBNR b KQ - 0 6 - O d483e34a37d34440@D93deGrünfeld-Verteidigung mit 5. Lf4rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6 Y( + ] 1fd9e060c7dba3e>D94deGrünfeld-Indisch (Geschlossenes System)rnbq1rk1/ppp1ppbp/5np1/3P4/3P4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 0 6  + ] fd705cbaeb3ae23#D94deGrünfeld-Indisch (Geschlossenes System)rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 1 6  + ] 57fe87c7bea47c8D94deGrünfeld-Indisch (Geschlossenes System)rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5 | - ] 352ea6739b8806c5D95deGrünfeld-Indisch (Geschlossenes System)rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 6lq - # cac927bbeca72d91E03deKatalanischr1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 6f - K d1869dd70edaa5e0E17deDamenindisch (Hauptfortsetzung)rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b kq - 4 6e - K aff3e6e372297ef0E17deDamenindisch (Hauptfortsetzung)rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6    mZWOCCC kZ - Y 5e9b9f4749fc46efB14deCaro-Kann-Verteidigung (Panow-Angriff)rnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6Y - Y 28ec6d7651ded6bdB14deCaro-Kann-Verteidigung (Panow-Angriff)rnbqkb1r/pp2pppp/5n2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR b KQkq - 2 5X - Y d37b75d4933c5464dB14deCaro-Kann-Verteidigung (Panow-Angriff)rnbqkb1r/pp2pppp/5n2/3p4/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 1 5W - Y 889541213ec615f2B14deCaro-Kann-Verteidigung (Panow-Angriff)rnbqkbnr/pp2pppp/8/3p4/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4 .P - [ 62fa20a189c76fabB15deCaro-Kann-Verteidigung (Flohr-Variante)rnbqkb1r/pp3ppp/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6 F - g 3ecf958145a4756clB16deCaro-Kann-Verteidigung (Nimzowitsch-Variante)rnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6O - [ d6cb7b0239813170pB15deCaro-Kann-Verteidigung (Flohr-Variante)rnbqkb1r/pp2pppp/2p2N2/8/3P4/8/PPP2PPP/R1BQKBNR b KQkq - 0 5N - [ 9228f6ace1db13c1B15deCaro-Kann-Verteidigung (Flohr-Variante)rnbqkb1r/pp2pppp/2p2n2/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5Q*< - ! afd3c26e4620d372rB33deSizilianisch (Sweschnikow-Variante), (Lasker-Variante), (Pelikan-Variante)r1bqkbnr/pp3ppp/2np4/1N2p3/4P3/8/PPP2PPP/RNBQKB1R w KQkq - 0 6+; - ! 9669540f94589a1fB33deSizilianisch (Sweschnikow-Variante), (Lasker-Variante), (Pelikan-Variante)r1bqkbnr/pp1p1ppp/2n5/1N2p3/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 1 5 x    s8 x - 7 14821ebb1119c827'E62deKönigsindisch mit g3rnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5v - 7 2d3888dac361814aJE62deKönigsindisch mit g3rnbqk2r/ppppppbp/5np1/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4t - 7 f65c642cab87e077wE62deKönigsindisch mit g3rnbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4c - C 676902f53cbe43a1A37deEnglische Symmetrievarianter1bqk1nr/pp1pppbp/2n3p1/2p5/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 3 5  -  cdbba83322f5cfd8E70deKönigsindisch (mit frühem e2-e4,Abweichungen im 5. Zug)rnbqk2r/ppp1ppbp/3p1np1/6B1/2PPP3/2N5/PP3PPP/R2QKBNR b KQkq - 1 5 +  be1ff05927f1410E70deKönigsindisch (mit frühem e2-e4,Abweichungen im 5. Zug)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5 -  325b696440075d7d}E70deKönigsindisch (mit frühem e2-e4,Abweichungen im 5. Zug)rnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4| - ? e31222bb50dcdde2E71deKönigsindisch mit 5. h3(rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5w - e 2707444472a8cc28(E72deKönigsindisch (Varianten mit g2-g3 undSge2)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5}n - C 7751fa22d9981d6foA33deEnglische Symmetrievarianter1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 2 6{m - C dcbc22c0c809b86clA33deEnglische Symmetrievarianternbqkb1r/pp1p1ppp/4pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 1 5zl - C 272b3a620aeb3ab5A33deEnglische Symmetrievarianternbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5yk - C 515cc85312c9aae7A33deEnglische Symmetrievarianternbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4{j - C 36c8950e03f838c9A33deEnglische Symmetrievarianternbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4|i - C 69d62f3b7e0c510fA33deEnglische Symmetrievarianternbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 3d - C ed110abfaf5bbb97A37deEnglische Symmetrievarianter1bqk1nr/pp1p1pbp/2n3p1/2p1p3/2P5/2N2NP1/PP1PPPBP/R1BQK2R w KQkq - 0 6  )ppTcQQQQQQQQQQQQQQ~U - M 7e1ab55137ba6c5f_E48deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/8/1bpP4/P1NBP3/1P3PPP/R1BQK1NR w KQ - 0 7I - M 8d25f765783cd0b6E49deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7T - M ac1c8c63658482bcE48deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6S - M 6780bd452cc80cfcE48deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6= - M 1709895155bfc8c2E51deNimzo-Indisch (Moderne Variante)r1bq1rk1/ppp2ppp/2n1pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 2 71 - M d78d18a3baadda5aZE52deNimzo-Indisch (Moderne Variante)rnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7< - M bce451b3442e6dc1E51deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 6; - M e9e9f0117daeafb2E51deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6 A! % - [ 614dba9e963d2af0E64deKönigsindisch (Jugoslawische Variante)rnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7 - w b4df106d89d2cc41AE67deKönigsindisch (Hauptvariante img3-System ohne e2-e4)r1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 3 7 $ - [ 873c6b30697a218dE64deKönigsindisch (Jugoslawische Variante)rnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 2 6 # - [ 32cc484d2497f9f4E64deKönigsindisch (Jugoslawische Variante)rnbq1rk1/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 1 6 8   Y)ZUUUUUUU Dl - # b65e28bd2b2ef7e1E07deKatalanischr1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7k - # 85bd53e0cb861a2d-E07deKatalanischrnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6k - # fbc828d4b775c13d=E07deKatalanischrnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6 y - k 223d1d8d51b671bdE30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/p2p1pp1/4pn1p/1ppP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7m - k 7b83e1f9186385edE31deNimzo-Indisch mit 4. Lg5 (Leningrader Variante,rnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7x - k 42397798ca1bcc80E30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/pp1p1pp1/4pn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR b KQkq - 0 6w - k f83134cb533d5addE30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/pp1p1pp1/4pn1p/2p5/1bPP3B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 6v - k 1e40e565ac7a51a0E30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/pppp1pp1/4pn1p/8/1bPP3B/2N5/PP2PPPP/R2QKBNR b KQkq - 1 5u - k 44cf8da65fc4733b;E30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/pppp1pp1/4pn1p/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 5t - k d638c6c0c8103a2e.E30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)rnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4nya + = caa575a53e6f3c9E37deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P1Q5/1P2PPPP/R1B1KBNR w KQkq - 1 7y` - = 36a21bc5e1af7e333E37deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1Q5/1P2PPPP/R1B1KBNR b KQkq - 0 6~  mm e9y Cmmmmmmmmmmmm 5 - o d769c6167135a44fOD34deDamengambit (Tarrasch-Verteidigung Hauptvariante)r1bqkb1r/pp3ppp/2n2n2/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R w KQkq - 1 7 N) - M fbdd6c61846060399D71deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/6p1/8/1n1PP3/6P1/PP3PBP/RNBQK1NR w KQkq - 1 7 - M 6defa561b665f3ccD72deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/1n4p1/8/3PP3/6P1/PP3PBP/RNBQK1NR w KQkq - 1 7( - M 44742a6eae209882D71deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/6p1/3n4/3PP3/6P1/PP3PBP/RNBQK1NR b KQkq - 0 6' - M 8073272645a02588D71deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/6p1/3n4/3P4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 6& - M 1f9d5d6bfa4538d4D71deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/5np1/3P4/3P4/6P1/PP2PPBP/RNBQK1NR b KQkq - 0 5 - M 6c0885e1cbf991ecD77deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/5np1/8/2pP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 - M be0ebcd399c77f0fD77deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6 - M c07bc7e7e534a41fD77deGrünfeld-Verteidigung mit 3. g3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6 - M cad32a50306d4df4D77deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5% - M 11b7c6a6588b2cc9D71deGrünfeld-Verteidigung mit 3. g3rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5  \ ` # 3\\\\BBBBBBBBBBBBBBBY - _ 29c7254bd35546388C76deSpanisch, (Moderne Steinitz-Verteidigung)r2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 0 7 X - _ c0737610a8dad473sC76deSpanisch, (Moderne Steinitz-Verteidigung)r2qkbnr/1ppb1ppp/p1np4/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6bM - k 24be6dd52f33bb85C87deSpanisch, (Russische Variante mitZugumstellung)r1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7L - k 1d04fbb4fd4bf2e8C87deSpanisch, (Russische Variante mitZugumstellung)r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6 "A - w edda4aa5950d1a7c|D14deDamengambit (Slawische Verteidigung),Abtauschvarianter2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 4 7@ - w 6ec3232b22e813f1D14deDamengambit (Slawische Verteidigung),Abtauschvarianter1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 6? - w b597c5aabb88f992D14deDamengambit (Slawische Verteidigung),Abtauschvarianter1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6> - w 1e7a1d48aa195c91D14deDamengambit (Slawische Verteidigung),Abtauschvarianternbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 5= - w e5ed05ea68fbde48HD14deDamengambit (Slawische Verteidigung),Abtauschvarianternbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5k w ) |?^( j - Y 3a80900f66be8c68hD45deDamengambit,Halbslawische Verteidigungr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PPQ2PPP/R1B1KB1R b KQkq - 2 6 _ - Y de9443b04de8727fD46deDamengambit,Halbslawische Verteidigungr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 6 i - Y 8b99e2127468b00c D45deDamengambit,Halbslawische Verteidigungr1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 6 h - Y b87a994f94c05dc0D45deDamengambit,Halbslawische Verteidigungrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5T - u 4dc3b524c4e26bc4D52deAbgelehntes Damengambit (Cambridge-Springs-Variante)r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 1 6S - u 96a759d2ac040af9D52deAbgelehntes Damengambit (Cambridge-Springs-Variante)r1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQkq - 0 6I - w bf6c2b971c4b0ccdD53deAbgelehntes Damengambit (Hauptvariante, Abweichungen)r1bq1rk1/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PPQ2PPP/R3KBNR b KQ - 2 6> - w 71ee96c78d8f6477wD54deAbgelehntes Damengambit (Hauptvariante, Abweichungen)r1bq1rk1/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 6H + w e75598a0e9d30a9D53deAbgelehntes Damengambit (Hauptvariante, Abweichungen)r1bq1rk1/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6 d:3 - w f23ebdce4c7810c9D55deAbgelehntes Damengambit (Hauptvariante, Abweichungen)rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 2 62 - w 295a5138249e71f4D55deAbgelehntes Damengambit (Hauptvariante, Abweichungen)rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 61 - w 23f2bc8ff1c7981fD55deAbgelehntes Damengambit (Hauptvariante, Abweichungen)rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 50 - w 8edffe3dd59810bbD55deAbgelehntes Damengambit (Hauptvariante, Abweichungen)rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5( - O 351eac046a0e8d9bD83deGrünfeld-Verteidigung mit 4. Lf4rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/1QN1P3/PP3PPP/R3KBNR b KQ - 2 6  `RLA? W - _ cdf7636b5c05eeb4C73deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6 V + _ 9a70d7f4e3e0a9eC73deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5Bd}c - E 890ecd34fd92bda8C69deSpanisch, (Abtauschvariante)r1bqkbnr/1pp3pp/p1p2p2/4p3/3PP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6}b - E 4c3be29eec5b90eaC69deSpanisch, (Abtauschvariante)r1bqkbnr/1pp3pp/p1p2p2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6|a - E 806ee4d7d6b08795C69deSpanisch, (Abtauschvariante)r1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5}` - E fe1b9fe3aa435c85C69deSpanisch, (Abtauschvariante)r1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5X X + _ 8c24cc14dccc3f6C73deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6M - E 5c85da956b2a74beC84deSpanisch, (Zentrums-Angriff)r1bqk2r/1pppbppp/p1n2n2/4p3/B2PP3/5N2/PPP2PPP/RNBQ1RK1 b kq - 0 6L - E 99b0f53f7ae359fcC84deSpanisch, (Zentrums-Angriff)r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6 iB + U 14aa73087e475e4C85deSpanisch, (Steenwijker Verteidigung)r1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6{7 + C fb67a1d34a70278xC86deSpanisch, (Worrall-Angriff)r1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 6 wyn - m cd80c33c58adf2bbC14deFranzösisch (Klassisches System, Hauptvariante)rnbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6  W. * $$$$$$$$5# 2 2'#e - G 5a3031106e1cfbd6D39deDamengambit (Wiener Variante)rnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 - G 883608223c2215355D39deDamengambit (Wiener Variante)rnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 5 +  10bb5f9522be04fOD44deDamengambit,Halbslawische Verteidigung (Botwinnik-Variante,rnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6" -  d30d8ccb00150eacD44deDamengambit,Halbslawische Verteidigung (Botwinnik-Variante,rnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5 X&M - q b4f7ee5f7d4d1e2a*C58deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/ppp2ppp/2n2n2/3Pp1N1/2B5/8/PPPP1PPP/RNBQK2R b KQkq - 0 5L - q 9328e412a7225c2c,C58deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/ppp2ppp/2n2n2/3pp1N1/2B1P3/8/PPPP1PPP/RNBQK2R w KQkq - 0 5 F7 D + _ 54659bab913f9311C75deSpanisch, (Moderne Steinitz-Verteidigung)r2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6: - I b4c610b16230bc00C79deSpanisch, (Russische Variante)r1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 60 - K 30cbc889b69f527e~C80deSpanisch, (Offene Verteidigung)r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 & - W 946fc58211efe2a7D16deDamengambit (Lasker/Smyslow-Variante)r1bqkb1r/pp2pppp/n1p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6% - W daef6e1297107e1bD16deDamengambit (Lasker/Smyslow-Variante)rnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5 AkqE   u mvkJYkr - { f7d5f38a3e857143CB55deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)rnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6q - { c40b22255b11e2c0B55deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)rnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6p - { 4e732a6fc8f41af6B55deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)rnbqkb1r/pp2pppp/3p1n2/8/3NP3/5P2/PPP3PP/RNBQKB1R b KQkq - 0 5 | - ] 6284639ab0a605f5B47deSizilianisch (Paulsen-Taimanow-Variante)r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6g + y 3b0b7f23a77c9d3B56deSizilianisch Abweichung von Sosin- und Rauser-Varianter1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6f - y 70b80c1ebb4dd25d]B56deSizilianisch Abweichung von Sosin- und Rauser-Varianter1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6  -  696c7a6834b4bdf3B37deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk1nr/pp1pppbp/2n3p1/8/2P1P3/8/PPN2PPP/RNBQKB1R b KQkq - 2 6 -  3c5047e1c5eaaa99B37deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6 } - ] 4e62d8db5071ddcdB47deSizilianisch (Paulsen-Taimanow-Variante)r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6\ - G 130bb836930e04fbB57deSizilianisch (Sosin-Variante)r1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 4 6Q - I cff7faaac8c2d89cB71deSizilianisch (Drachenvariante)rnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6F - Q 81c49d8c52293f344B80deSizilianisch (Scheveninger System)rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6E - Q ad2226cdb2fee70c B80deSizilianisch (Scheveninger System)rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6|; + E e6f271b5a8b0a11B81deSizilianisch (Keres-Angriff)rnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 60 - Q 50345bc0ab6fda85B82deSizilianisch (Scheveninger System)rnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6% - m ce9192e59abd31aaB86deSizilianisch (Sosin-Angriff), (Fischer-Variante)rnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6 - g 6a11912765bf5924$B90deSizilianisch (Najdorf-Variante), Abweichungenrnbqkb1r/1p2pppp/p2p1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6 + g 9a2250f4dfc8f82B90deSizilianisch (Najdorf-Variante), Abweichungenrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6  - _ 25449e4ead2b57baB91deSizilianisch (Najdorf-Variante) mit 6. g3rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6 - u 7a22a6f64cd9c521!B92deSizilianisch (Najdorf-Variante), (Opocenský-System)rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6 y - _ f4b45802546db20b B93deSizilianisch (Najdorf-Variante) mit 6. f4rnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6 q }_!c  r \ AAAA Ue~) - K 94b8176de9da79d5A92deHolländisch (Stonewall-System)rnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6( - K eacd6c599529a2c5A92deHolländisch (Stonewall-System)rnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6;~0 - C 855a6a0d550cb4e4A65deModerne Benoni-Verteidigungrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4{/ - C 7ecd72af97ee363d=A65deModerne Benoni-Verteidigungrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4}' - K e06581ee40704b2e.A92deHolländisch (Stonewall-System)rnbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5 {G - C db24c019812c52d1A31deEnglische Symmetrievarianternbqkb1r/pp1p1ppp/5n2/4p3/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5|? - C e097a1ab826e4a18A32deEnglische Symmetrievarianternbqk2r/pp1p1ppp/4pn2/1N6/1bP5/2N5/PP2PPPP/R1BQKB1R b KQkq - 3 6{> - C 15fd4bc683fe704eNA32deEnglische Symmetrievarianternbqk2r/pp1p1ppp/4pn2/8/1bPN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 2 6{4 - C 49d9b32dd49f9455UA65deModerne Benoni-Verteidigungrnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6z3 - C 8ddebe653f1f295f_A65deModerne Benoni-Verteidigungrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6z2 - C b4642804ed6760322A65deModerne Benoni-Verteidigungrnbqkb1r/pp1p1ppp/5n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 0 5|1 - C ba4eb3c94fa9742f/A65deModerne Benoni-Verteidigungrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 5  - U 9e2154d673aefba1B25deSizilianisch, (geschlossenes System)r1bqk1nr/pp2ppbp/2np2p1/2p5/4PP2/2NP2P1/PPP3BP/R1BQK1NR b KQkq - 0 6  - U 633729db6a3fc628(B25deSizilianisch, (geschlossenes System)r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6)T - o da2dfe442fc09cc6E90deKlassisches System (Königsindische Verteidigung)rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R w KQ - 2 6S - o d08513f3fa99752d-E90deKlassisches System (Königsindische Verteidigung)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5yJ - C a50e93adbea632bcA31deEnglische Symmetrievarianternbqkb1r/pp3ppp/5n2/1N1Pp3/8/8/PP2PPPP/RNBQKB1R b KQkq - 0 6{I - C ab2408601c6826a1A31deEnglische Symmetrievarianternbqkb1r/pp3ppp/5n2/1N1pp3/2P5/8/PP2PPPP/RNBQKB1R w KQkq - 0 6|H - C 2e4e2a7480bc6887A31deEnglische Symmetrievarianternbqkb1r/pp1p1ppp/5n2/1N2p3/2P5/8/PP2PPPP/RNBQKB1R b KQkq - 1 5  - U 103f9237eb05dda6B26deSizilianisch, (geschlossenes System)r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6 * =e& riWxph`XPH@80( m vd X OwN<3\TLD<4,$  | t l d \ T L D < 4 , #   | j  A/{  y q i a Y Q I A 9 1 ) !    4 + "\SJ`  w o g _ W O G ? 7 / '     s FnE } u m e ] U M E = 5 - %    a 8*{CqeN10aI?k}`_F4)xn3  A N7+~'z7e]:"|~}{yrxmm3iAhSc a[YyUTUTCNKtBA90b+$$"Lk7 ~f|w"vdoChh\QFdDV=U6.54I2,*))(0 z   O$~~~wwvpjhgb!`\Z!Y V1V&RQ!IH={9533R21 'h, ~~~}{Ozwvq/ojWaA`_SSQXOI&FE]A'>94U/+(L%! .. U 3 \`~T}|zxjwrEqphjih=cbb__=VVRKPONFDaC8,+-'2&E"x?_ ~h|y"x& ) V f{fj nnny$ - = 9d6d44d615f43270pE38deNimzo-Indisch mit 4. Dc2rnbqk2r/pp1p1ppp/4pn2/2b5/2P5/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6y - = 3241fd22a34e6878xE39deNimzo-Indisch mit 4. Dc2rnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6{# - = 38e9109576178193E38deNimzo-Indisch mit 4. Dc2rnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5 - O 7212391ff83f7cbcE44deNimzo-Indisch (Rubinstein-System)rn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6 + O d92237fc14cd1d9E45deNimzo-Indisch (Rubinstein-System)rn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6| - O 47e8538f16b99d01E46deNimzo-Indisch (Rubinstein-System)rnbqk2r/p1p2ppp/1p2pn2/3p4/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 0 6 - O c282719b8a6dd327'E44deNimzo-Indisch (Rubinstein-System)rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5:{. - = ceb48bdfa26c4feeE36deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b5/1PQ1PPPP/R1B1KBNR w KQkq - 0 6|- - = ef8df0d9bfd41de4E36deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5r - M db50093062640bb7E47deNimzo-Indisch (Moderne Variante)rnbq1rk1/ppp2ppp/3ppn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6q - M e2ea9f51b01c42daE47deNimzo-Indisch (Moderne Variante)rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5^ - O f72af4db457528daE80deKönigsindisch (Sämisch-Angriff)rnbqk2r/pp2ppbp/2pp1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQkq - 0 6] - O 6550193432b5fb61aE80deKönigsindisch (Sämisch-Angriff)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5 h - M 8af203ab1e3deae9E50deNimzo-Indisch (Moderne Variante)rnbq1rk1/pp1p1ppp/4pn2/2p5/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6g - M 6c83d205e17ae194E50deNimzo-Indisch (Moderne Variante)rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5p - M b7e73ef3899c80a9E47deNimzo-Indisch (Moderne Variante)rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5|" - = 470a3245950bd6ffE38deNimzo-Indisch mit 4. Dc2rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5~ h  ^ u   q{)))))))IWWhs7 - / c5adf44c64a5ea3d=E10deBlumenfeld-Gambitrnbqkb1r/p2p1ppp/4pn2/1ppP4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5r6 - / a5a99e59ff085700E10deBlumenfeld-Gambitrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4s5 - / 1fa1dd0a662ec15d]E10deBlumenfeld-Gambitrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4u/ + g ecfb671f56f0a18E15deDamenindisch (Hauptfortsetzung, Abweichungen)rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5. - g be5ffef5873da583E15deDamenindisch (Hauptfortsetzung, Abweichungen)rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4{' + = a963b097bdd7881E33deNimzo-Indisch mit 4. Dc2r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5 x - O 16a20ba64d54cc41AE40deNimzo-Indisch (Rubinstein-System)r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 1 5 - O bd4fd3445cc56942BE40deNimzo-Indisch (Rubinstein-System)rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4p - + 4a2091fd0f16de84A14deReti-Eröffnungrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 4 5q - + 3455eac973e50594A14deReti-Eröffnungrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R w KQkq - 3 5p - + 20999926b94ea905A14deReti-Eröffnungrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQK2R b KQkq - 2 4q - + 9569ba5bf4a3717c|A14deReti-Eröffnungrnbqkb1r/ppp2ppp/4pn2/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R w KQkq - 1 4q - + ce878eae595930eaA14deReti-Eröffnungrnbqkbnr/ppp2ppp/4p3/3p4/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3p - + e26135efb98ee8d2A14deReti-Eröffnungrnbqkbnr/ppp2ppp/4p3/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3o - + 670b17fb255aa6f4A14deReti-Eröffnungrnbqkbnr/pppp1ppp/4p3/8/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2k -  fb633706ec77547fA24deEnglischrnbqk2r/pppp1pbp/5np1/4p3/2P5/2N2NP1/PP1PPPBP/R1BQK2R b KQkq - 3 5k -  2007dbf084913542BA24deEnglischrnbqk2r/pppp1pbp/5np1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 5m -  90bbe6467fd6fee8A24deEnglischrnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4   - i L {qqqqqqqqqqqqqqqqqq - M 1a53c39f42980ac1C08deFranzösisch (Tarrasch-Variante)rnbqkbnr/1p3ppp/p7/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 0 6v - M 6349ea8eb429571eC09deFranzösisch (Tarrasch-Variante)r1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6~ - M c8a4326ca5b8f21dC08deFranzösisch (Tarrasch-Variante)rnbqkbnr/pp3ppp/8/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R b KQkq - 1 5|~ - M 13c0de9acd5e9320 C08deFranzösisch (Tarrasch-Variante)rnbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5 pb - % 70fb084546e22cb3C51deEvans-Gambitr1bqk1nr/ppppbppp/2n5/4p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6pa - % 55a034066899cd09 C51deEvans-Gambitr1bqk1nr/pppp1ppp/2n5/4p3/1bB1P3/2P2N2/P2P1PPP/RNBQK2R b KQkq - 0 5p` - % 237acc9eb8e9c28fC51deEvans-Gambitr1bqk1nr/pppp1ppp/2n5/4p3/1bB1P3/5N2/P1PP1PPP/RNBQK2R w KQkq - 0 5r_ - % 1c9622d153442d9fC51deEvans-Gambitr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4 ^X - E 768c3ac4890df01bC52deEvans-Gambit (Hauptvariante)r1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6N - q e1e0c4aad071bc20 C58deZweispringerspiel im Nachzuge (Klassisches System)r1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6l - O 5ec5790ad4c52927'C13deFranzösisch (Klassisches System,rnbqk2r/pppnbppp/4p3/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 1 6k - O a7827aac790920d2C13deFranzösisch (Klassisches System,rnbqk2r/ppp1bppp/4pn2/3pP1B1/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 5j - O c6fb6c517d1706b6C13deFranzösisch (Klassisches System,rnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5   | j I }f________________ 2 -  4be4c06744078347GB34deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 6!1 -  fb58fdd1bf4048edB34deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 50 )  cfe5737da2ca344B34deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)r1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 v( -  d7024ea2935720a5B36deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqkb1r/pp1ppp1p/2n2np1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6' -  8cec7a573ead61333B36deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)r1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5 - O 3f75684e71170b62bB45deSizilianisch (Klassisches System)r1bqkb1r/pp1p1ppp/2n1pn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6 - O 649b5cbbdced4af4B45deSizilianisch (Klassisches System)r1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5   - ] b66cad483bcdb228(B46deSizilianisch (Paulsen-Taimanow-Variante)r1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 - I 32e187a7d153e515B70deSizilianisch (Drachenvariante)rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6~ - I db55d4fcaadc775e^B70deSizilianisch (Drachenvariante)rnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 OHue g oROFQSXf - O 832b3bf69bc61caaE43deNimzo-Indisch (Rubinstein-System)rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5 - O d6269a54a246ded9E43deNimzo-Indisch (Rubinstein-System)rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5y - 7 3864a5faf1ce101fE62deKönigsindisch mit g3rnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 54xQ - O 6e08fdf8ef3f14a4D91deGrünfeld-Verteidigung mit 5. Lg5rnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5mH - # f160c563622c28d6E06deKatalanischrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5mG - # 2a0429950aca49ebE06deKatalanischrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5 n|? - ; 1fe442a467d08b311E13deDamenindisch mit 5. Lg5rn1qkb1r/pbpp1ppp/1p2pn2/6B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5|> - ; d9be1592d75a50f9E13deDamenindisch mit 5. Lg5rn1qkb1r/pbpp1ppp/1p2pn2/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5{= - ; 692e5d16a508ff62bE13deDamenindisch mit 5. Lg5rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 e{6 - = 2a3b5a32545687b9E34deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5{5 - = 2411c1fff69893a4E34deNimzo-Indisch mit 4. Dc2rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5x- + O e33a3489a02a04cLE41deNimzo-Indisch (Rubinstein-System)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5, - O 5b3e02eaa382623f?E41deNimzo-Indisch (Rubinstein-System)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5$ - O 4f9ae9258ba96fc1E42deNimzo-Indisch (Rubinstein-System)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 SX s 1rM- i i c _3  - _ e787a7e863492900C74deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5 - u 8d7c86d0b048f56dmC78deSpanisch, (Archangelsk-Variante), (Möller-Variante)r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5  - _ ef282444cfcafd96C72deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5s~ - 1 572815926ce63d50PD08deAlbins Gegengambitr1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5N2/PP1NPPPP/R1BQKB1R b KQkq - 3 5q} + 1 e46adf0f61b9560`D08deAlbins Gegengambitr1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 5p| - 1 a5ab7512e78a3063cD08deAlbins Gegengambitrnbqkbnr/ppp2ppp/8/4P3/2Pp4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 4n{ - 1 7ecf99e48f6c515e^D08deAlbins Gegengambitrnbqkbnr/ppp2ppp/8/4P3/2Pp4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4yZ - ; a6783103fd7bdb71qD90deGrünfeld-Verteidigung(rnbqk2r/ppp1ppbp/5np1/3P4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5zY - ; a852aace5fb5cf6clD90deGrünfeld-Verteidigung(rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5|X - ; 18ee9778a4f204c6D90deGrünfeld-Verteidigung(rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4@ L - U f16562a44a7d2742BB24deSizilianisch, (geschlossenes System)r1bqkbnr/pp1ppp1p/2n3p1/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR w KQkq - 0 4K - U 18d131ff31f2b509 B24deSizilianisch, (geschlossenes System)r1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3 ! + c 1cad2281a62d542BC17deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5oz - 1 9ca2f38a43537bb9D08deAlbins Gegengambitrnbqkbnr/ppp2ppp/8/3pP3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3ny ) 1 3f0cc84b66ccc9D08deAlbins Gegengambitrnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 :* - ] 9f0c44191e0fc82d-B44deSizilianisch (Paulsen-Taimanow-Variante)r1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5" - c ca56e30e532e5b02C17deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/P1N5/1PP2PPP/R1BQKBNR b KQkq - 0 5su - 1 22a016b116cc4d58XD09deAlbins Gegengambitr1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5l - k 6f767c719ad619bfD41deDamengambit (Verbesserte Tarrasch-Verteidigung)rnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5SU~F - K 6a35f22cabb13ef5B41deSizilianisch (Paulsen-Variante)rnbqkbnr/1p1p1ppp/p3p3/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5~E - K e6166d08e8be95f2B41deSizilianisch (Paulsen-Variante)rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5= - K b31bccaad13e5781B42deSizilianisch (Paulsen-Variante)rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 54 - K 1d8175aa2a5c172b+B43deSizilianisch (Paulsen-Variante)rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5+ - ] 6a66ae741f9ff27b{B44deSizilianisch (Paulsen-Taimanow-Variante)r1bqkbnr/pp1p1ppp/2n1p3/1N6/4P3/8/PPP2PPP/RNBQKB1R b KQkq - 2 5)c +  4ddb43ddbc4d942BD51deAbgelehntes Damengambit (Cambridge-Springs-Variante und Abweichungen)r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5*b -  a9f0f68fff9b51e6D51deAbgelehntes Damengambit (Cambridge-Springs-Variante und Abweichungen)r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5 | F )mk g 4e?pWBBBBB m -  254bc53b323b2691A24deEnglischrnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4 - O 7d2975551ca55973sA25deEnglisch (Sizilianisch im Anzuge)r1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N1P1P1/PP1P1PBP/R1BQK1NR b KQkq - 0 5 - O d00437e738fad1d7A25deEnglisch (Sizilianisch im Anzuge)r1bqk1nr/pppp1pbp/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR w KQkq - 2 5 - O 60b80a51c3bd1a7d}A25deEnglisch (Sizilianisch im Anzuge)r1bqkbnr/pppp1p1p/2n3p1/4p3/2P5/2N3P1/PP1PPPBP/R1BQK1NR b KQkq - 1 4 - O d548292c8e50c204A25deEnglisch (Sizilianisch im Anzuge)r1bqkbnr/pppp1p1p/2n3p1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4va - A 39a691df7150ed3e>A58deWolga-Gambit,Benkö-Gambitrnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5x` - A 4b810d7ea7c32ad9A58deWolga-Gambit,Benkö-Gambitrnbqkb1r/3ppppp/p4n2/1PpP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 5}j - = 30160e09091c39366A55deAltindische Verteidigungr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 5}i - = f4110341e29c843c - k 7f6b60a16ee9555b[C33deAngenommenes Königsgambit,Königsläufergambitrnbqkbnr/pppp1ppp/8/8/2B1Pp2/8/PPPP2PP/RNBQK1NR b KQkq - 1 3 = - k 1cd8d48946aa83fdC33deAngenommenes Königsgambit,Königsläufergambitrnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3u9 - 9 368dbfe20ff63c3d=C42deRussische Verteidigungrnbqkb1r/pppp1ppp/5n2/4N3/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3w8 - 9 88ce4b19abe8990b C42deRussische Verteidigungrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 E?r b <   pEOBUU - S d33f7739a5c9d388C67deSpanisch, (Rio-de-Janeiro-Variante)r1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5l? - # d8b98bd43f26ee07E01deKatalanischrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5l> - # 3ec85a7ac061e57azE01deKatalanischrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4pwv - = 75e6a7016bfe7213D25deAngenommenes Damengambitrnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 ` ~ - W 632029cca8bd45366D15deDamengambit (Slawische Verteidigung),rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4zw - = 77356d332c7b7cf9D25deAngenommenes Damengambitrn1qkb1r/ppp1pppp/5n2/8/2pP2b1/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5vo + = 391553073dce241AD26deAngenommenes Damengambitrnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5g - I 4e6c5f148ca8cefdD38deDamengambit (Ragosin-Variante)rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 5~i  - _ 915d5f70b3392686C71deSpanisch, (Moderne Steinitz-Verteidigung)r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5 - I f309fde4ccbb2e7d}C77deSpanisch, (Anderssen-Variante)r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5 - W b12610fefa83abd5D15deDamengambit (Slawische Verteidigung),rnbqkb1r/pp2pppp/2p2n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5_ - k 615ce7bc38180da2D40deDamengambit (Verbesserte Tarrasch-Verteidigung)rnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5 W - Y 1557dbfdb09fd564dD43deDamengambit,Halbslawische Verteidigungrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5O - e 7c625c7ce074b757WD50deAbgelehntes Damengambit (Canal-Prins-Gambit)rnbqkb1r/pp3ppp/4pn2/2pp2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 0 5N - e 9a138dd21f33bc2a*D50deAbgelehntes Damengambit (Canal-Prins-Gambit)rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4G - M 337116ffd40c34d8D70deGrünfeld-Indische Verteidigung,rnbqkb1r/pp2pp1p/2p2np1/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5F - M a10bfb10a3cce763cD70deGrünfeld-Indische Verteidigung,rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4E - M 14fbd86dee213f1aD70deGrünfeld-Indische Verteidigung,rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4D - M 9191fa7972f5713c - I 1d81a4f369529393C47deSchottisches Vierspringerspielr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4= - I d8b48b59789bbed1C47deSchottisches Vierspringerspielr1bqkb1r/pppp1ppp/2n2n2/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 4 4 W <u f Hk<< x x x x x x x x x x HN h w N - ] 95dd03fe7583f5cfD31deDamengambit (Halbslawische Verteidigung)rnbqkbnr/pp3ppp/2p1p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4M + ] 7a7ee1102432674tD31deDamengambit (Halbslawische Verteidigung)rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3H - S e1d63fbffd042d09 D32deDamengambit (Tarrasch-Verteidigung)rnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4B - I 5c49dae4afb967e2D35deDamengambit (Abtauschvariante)rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 < - e 309165a2d29e0202E11deBogoljubow-Indische Verteidigung,Bogoindischrnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4 ; - e f9d00ca49969ca20 E11deBogoljubow-Indische Verteidigung,Bogoindischrnbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 : - e 22b4e052f18fab1dE11deBogoljubow-Indische Verteidigung,Bogoindischrnbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 6 - M 55a5369fc1dd859eA28deEnglisch (Vierspringer-Variante)r1bqkb1r/pppp1ppp/2n2n2/4p3/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 45 - M 90901935d014a8dcA28deEnglisch (Vierspringer-Variante)r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4 / - M bc76a27430c370e4A29deEnglisch (Vierspringer-Variante)r1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4( + O 451588ce6570f06A52deBudapester Gambit (Hauptvariante)rnbqkb1r/pppp1ppp/8/4P3/2P2Bn1/8/PP2PPPP/RN1QKBNR b KQkq - 2 4' - O df05be0d7f37e565eA52deBudapester Gambit (Hauptvariante)rnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4 nN l   } rVa  - c c95e54397292bb84B40deSizilianisch (Klassisches System) mit e7-e6rnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 - { 20c2cc5e683ef587B54deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)rnbqkb1r/pp2pppp/3p1n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 - { 7b2cf8abc5c4b411B54deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)rnbqkbnr/pp2pppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 - M c61ddc5c265e9f388C04deFranzösisch (Tarrasch-Variante)r1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5 - M 9df3e8a98ba4deaeC04deFranzösisch (Tarrasch-Variante)r1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4  - M 2eaafd13f6fb7497C05deFranzösisch (Tarrasch-Variante)rnbqkb1r/pppn1ppp/4p3/3pP3/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 1 5 - M d7edfeb55b377d62bC05deFranzösisch (Tarrasch-Variante)rnbqkb1r/ppp2ppp/4pn2/3pP3/3P4/8/PPPN1PPP/R1BQKBNR b KQkq - 0 4 - M b694e8485f295b06C05deFranzösisch (Tarrasch-Variante)rnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 4~ - M a8f8d6740e692e21!C07deFranzösisch (Tarrasch-Variante)rnb1kbnr/pp3ppp/4p3/2pq4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5~ - M 2cd4075ed7fb53ebC07deFranzösisch (Tarrasch-Variante)rnbqkbnr/pp3ppp/4p3/2pP4/3P4/8/PPPN1PPP/R1BQKBNR b KQkq - 0 4} + M b0b0d130d9411edC07deFranzösisch (Tarrasch-Variante)rnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 0 4lw - % 1abd80b77e451a77wC11deFranzösischrnbqkb1r/ppp2ppp/4pn2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR w KQkq - 0 5nv - % d2371fbeb7bcaa27'C11deFranzösischrnbqkb1r/ppp2ppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4nu - % 146d4888073671efC11deFranzösischrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4po - S 1b7676b8fc4b6205C12deFranzösisch (MacCutcheon-Variante)rnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5g - c 8cd24a961ba669a4C16deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/p1p2ppp/1p2p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5 f - c e7bb0386e525de3f?C16deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4  ioT  r.~iiiiiii <R> <6 - _ 51bb7fa744497c86B13deCaro-Kann-Verteidigung (Abtauschvariante)rnbqkbnr/pp2pppp/8/3p4/3P4/3B4/PPP2PPP/RNBQK1NR b KQkq - 1 45 + _ 4b6de057dc9bef5B13deCaro-Kann-Verteidigung (Abtauschvariante)rnbqkbnr/pp2pppp/8/3p4/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 44 - _ 77c6714cdda3b34fOB13deCaro-Kann-Verteidigung (Abtauschvariante)rnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3/ - Y fa25b904ac89bf9bB17deCaro-Kann-Verteidigung (Hauptvariante)r1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5. - Y c9c6c2594c215257WB17deCaro-Kann-Verteidigung (Hauptvariante)rnbqkbnr/pp2pppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR b KQkq - 0 4- - Y 6304fcaa0cd7c3c0B17deCaro-Kann-Verteidigung (Hauptvariante)rnbqkbnr/pp2pppp/2p5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4, - Y ab8e63a3c52e7390B17deCaro-Kann-Verteidigung (Hauptvariante)rnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3 V' -  6303be6295c8a049IB32deSizilianisch (Löwenthal-Variante), (Labourdonnais-Variante)r1bqkbnr/pp1p1ppp/2n5/4p3/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5& -  e97bb628062d587fB32deSizilianisch (Löwenthal-Variante), (Labourdonnais-Variante)r1bqkbnr/pp1ppppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4% -  8eefeb75171cca51QB32deSizilianisch (Löwenthal-Variante), (Labourdonnais-Variante)r1bqkbnr/pp1ppppp/2n5/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4$ -  d1f151406ae8a397B32deSizilianisch (Löwenthal-Variante), (Labourdonnais-Variante)r1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3o  - c 6f0fa80ea2642cb8B40deSizilianisch (Klassisches System) mit e7-e6rnbqkb1r/pp1p1ppp/4pn2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 - c 34e19cfb0f9e6d2e.B40deSizilianisch (Klassisches System) mit e7-e6rnbqkbnr/pp1p1ppp/4p3/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4  - c 5375c1a61eafff00B40deSizilianisch (Klassisches System) mit e7-e6rnbqkbnr/pp1p1ppp/4p3/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4  + c c6b7b93635b96c6B40deSizilianisch (Klassisches System) mit e7-e6rnbqkbnr/pp1p1ppp/4p3/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3 T > w TGA{ebb  *d - O 7ed377c7d8500e97E20deNimzowitsch-Indisch,Nimzo-Indischrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2P2/PP2P1PP/R1BQKBNR b KQkq - 0 4c - O 106291f6789ae1e6E20deNimzowitsch-Indisch,Nimzo-Indischrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4  7 - _ fa56a74555d8d985B13deCaro-Kann-Verteidigung (Abtauschvariante)r1bqkbnr/pp2pppp/2n5/3p4/3P4/3B4/PPP2PPP/RNBQK1NR w KQkq - 2 5b - O d923f8f0336d29c4E20deNimzowitsch-Indisch,Nimzo-Indischrnbqkb1r/pppp1ppp/4pn2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3{] - = cb067d00107c80dbE21deNimzo-Indisch mit 4. Sf3rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4zV - = a17be3eb6a4cdd82E32deNimzo-Indisch mit 4. Dc2rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4 O ) c b2822b7ad74f311A86deHolländisch (Leningrader Variante) mit Sh3rnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5 N - c b00ebf9d8190849bA86deHolländisch (Leningrader Variante) mit Sh3rnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4 M + c 5fe9ce0cc7d5ce2A86deHolländisch (Leningrader Variante) mit Sh3rnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 L - c ec4acfbbb7f2cea9A86deHolländisch (Leningrader Variante) mit Sh3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3G - U aaa73ce37ee9c8a4A90deHolländisch (Klassisches Stonewall)rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5F - U 2fcd1ef7e23d8682A90deHolländisch (Klassisches Stonewall)rnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4E - U 9a3d3d8aafd05efbA90deHolländisch (Klassisches Stonewall)rnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 ? - ] 5983f9ae76e55829)B05deAljechin-Verteidigung (Moderne Variante)rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5  sp B 5 "  #v y - = 235cfd118d43786enD24deAngenommenes Damengambitrnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4z - 9 872d3612c75f06dfD37deDamengambit mit 5. Lf4rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4 n + O 5d02cb87c9ebe333D80deGrünfeld-Verteidigung mit 4. Lg5rnbqkb1r/ppp1pp1p/5np1/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4 - O c38a7b8ecc1465fbD80deGrünfeld-Verteidigung mit 4. Lg5rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 z - ; f973d836f92fcd1dD81deGrünfeld-Verteidigung(rnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4 - O 18de9d0f55748f98D82deGrünfeld-Verteidigung mit 4. Lf4rnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4y - S 505c95f1e56a5c3e>E00deKatalanische Eröffnung,Katalanischrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 1 4x - S 8b3879078d8c3d03E00deKatalanische Eröffnung,Katalanischrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4w + S e525b1311587325%E00deKatalanische Eröffnung,Katalanischrnbqkb1r/pppp1ppp/4pn2/8/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3 r - E 592574922ea6f3fbE12deDamenindischPetrosjan-Systemrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/P4N2/1P2PPPP/RNBQKB1R b KQkq - 0 4-x" - = d8cbe5b34fa1fab7D23deAngenommenes Damengambitrnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4q - E 92b945b467ea7dbbE12deDamenindischPetrosjan-Systemrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4k - Y 3f94070643b5f51fE14deDamenindisch (Zentralsystem mit 4. e3)rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 W ( yAWZU  xWC/b* Sp[ - 1 4112df7bd300d6e7C45deSchottische Partier1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4rZ - 1 26868226c23144c9C45deSchottische Partier1bqkbnr/pppp1ppp/2n5/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4tY - 1 bdf888a4064a50dcC45deSchottische Partier1bqkbnr/pppp1ppp/2n5/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3Dba - ] 47ffc8a2baf81d4aJC39deKönigsspringer-Gambit (Allgaier-Gambit)rnbqkbnr/pppp1p1p/8/6p1/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4T - q c0b9afe525824e3d=C53deItalienische Partie,Giuoco Piano,Spiel des Polerior1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4 h - c 86c2157be13bf85b[C15deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4b - ] db5c548b11c764344C39deKönigsspringer-Gambit (Allgaier-Gambit)rnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4M - G 85a5087983f3c7ecC56deZweispringerspiel im Nachzuger1bqkb1r/pppp1ppp/2n2n2/4p3/2BPP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 4  F - [ 1642c6063bf6120a C57dePreußische Partie,Traxler-Gegenangriffr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4~? - E c8cbbdb43361c6faC68deSpanisch, (Abtauschvariante)r1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4> - E 99e48752953716c1C68deSpanisch, (Abtauschvariante)r1bqkbnr/1ppp1ppp/p1n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 A8 - O a8e7c91161416febC70deSpanisch (Abweichungen im 4. Zug)r1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 41 - W 359a73dc4e004f4bKD12deDamengambit (Slawische Verteidigung),rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 40 - W 98b7316e6a5fc7efD12deDamengambit (Slawische Verteidigung),rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 47p -  610fb232e064c902B53deSizilianisch (Ungarische Variante), (Tschechower-Variante)rnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4o -  1cb8a5f6d4f5263f?B53deSizilianisch (Ungarische Variante), (Tschechower-Variante)rnbqkbnr/pp2pppp/3p4/8/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4n -  43a61fc3a9014ff9B53deSizilianisch (Ungarische Variante), (Tschechower-Variante)rnbqkbnr/pp2pppp/3p4/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3i - c 4d5e245da877761bC15deFranzösisch (Nimzowitsch/Winawer-Variante)rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/P1N5/1PP2PPP/R1BQKBNR b KQkq - 0 4* - w 969daaa3c891d3f2D13deDamengambit (Slawische Verteidigung),Abtauschvarianternbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4x# + = a6f58fc8f9f08ccD23deAngenommenes Damengambitrnbqkb1r/ppp1pppp/5n2/8/Q1pP4/5N2/PP2PPPP/RNB1KB1R b KQkq - 3 4 QDo S I E MTQD+i*}! - = c7f2781c023469f0A54deAltindische Verteidigungrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4{ - = 1c9694ea6ad208cdA54deAltindische Verteidigungrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4z - = 96ee9ca0f937f0fbA54deAltindische Verteidigungrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3W{| - ? deca0ecc51b8e6f6B08dePirc-Ufimzew-Verteidigungrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3w - g ca68209a33a649344B09dePirc-Ufimzew-Verteidigung (Dreibauernangriff)rnbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4 Fw - A 9976fc8d40e3d205A57deWolga-Gambit,Benkö-Gambitrnbqkb1r/p2ppppp/5n2/1PpP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 4y - A 68beea8b14611b52RA57deWolga-Gambit,Benkö-Gambitrnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4~ - I 77560104c9136646FA83deHolländisch (Staunton-Gambit)rnbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4~ - I b10c56327999bd8eA83deHolländisch (Staunton-Gambit)rnbqkb1r/ppppp1pp/5n2/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4{ - I eae262c7d463fc18A83deHolländisch (Staunton-Gambit)rnbqkbnr/ppppp1pp/8/8/3Pp3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3z - I 11757a6516817ec1A83deHolländisch (Staunton-Gambit)rnbqkbnr/ppppp1pp/8/8/3Pp3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3 + a c17404e1a899cf9B03deAljechin-Verteidigung (Vierbauernvariante)rnbqkb1r/ppp1pppp/3p4/3nP3/2PP4/8/PP3PPP/RNBQKBNR b KQkq - 0 4 - a 8034df6a598637feB03deAljechin-Verteidigung (Vierbauernvariante)rnbqkb1r/ppp1pppp/3p4/3nP3/3P4/8/PPP2PPP/RNBQKBNR w KQkq - 0 4 - a b98e490b8bfe7e93B03deAljechin-Verteidigung (Vierbauernvariante)rnbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3  - ] 5b50339c316056c3B04deAljechin-Verteidigung (Moderne Variante)rnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4~~ - ? ec1ab16142d11580B08dePirc-Ufimzew-Verteidigungrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4|} - ? 377e5d972a3774bdB08dePirc-Ufimzew-Verteidigungrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4 * ~q u t R<VW   **|7 - W 21aadc60c91291fcD07deDamengambit (Tschigorin-Verteidigung)r1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3+ - u bd7741389222a904E60deKönigsindische Verteidigung,Königsindisch ohne Sc3rnbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3I-3 - W 183de96daf43e744DD10deDamengambit (Slawische Verteidigung),rnbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3s/ - = 58413db08abdda1cD20deAngenommenes Damengambitrnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3u' - ; 67521168b0ded8bbA08deKönigsindisch im Anzugrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3v& - ; d2a23215fd3300c2A08deKönigsindisch im Anzugrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPP1P/RNBQKB1R w KQkq - 0 3 Jj" - S 8aca4a650ce1c056VA12deReti-Eröffnung (New Yorker System)rnbqkbnr/pp2pppp/2p5/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3! + S 66c2a31d66cab3b;A12deReti-Eröffnung (New Yorker System)rnbqkbnr/pp2pppp/2p5/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3 - S 830608254ab8e51dA12deReti-Eröffnung (New Yorker System)rnbqkbnr/pp1ppppp/2p5/8/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2 .k -  d811da12c924b98cA18deEnglischrnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 3i -  1c16d75a22a40486A18deEnglischrnbqkb1r/pppp1ppp/4pn2/8/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3F} - C 8005bbd08f12a475uA30deEnglische Symmetrievarianternbqkb1r/pp1ppppp/5n2/2p5/2P5/5NP1/PP1PPP1P/RNBQKB1R b KQkq - 0 3| - C ace300916fc57c4dMA30deEnglische Symmetrievarianternbqkb1r/pp1ppppp/5n2/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 2 3{ - C f70d3464c23f3ddbA30deEnglische Symmetrievarianternbqkbnr/pp1ppppp/8/2p5/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2y - C 2c69d892aad95ce6A30deEnglische Symmetrievarianternbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2 - M b3a9c4b66aecbaefA46deDamenbauernspiel (Torre-Angriff)rnbqkb1r/pppp1ppp/4pn2/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3 - M 75f39380da666127'A46deDamenbauernspiel (Torre-Angriff)rnbqkb1r/pppp1ppp/4pn2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3~ + M 38461b1c244f175uA46deDamenbauernspiel (Torre-Angriff)rnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 2 Kt6  m H 6$\tttttt4nn( - ' 7639453c2f780b5aZC27deWiener Partiernbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4r" - ' 6063d387383e094aJC28deWiener Partier1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4t - 7 9c520c8a83b6a356VC34deKönigsspringergambitrnbqkb1r/pppp1ppp/5n2/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4s - 7 c7bc387f2e4ce2c0C34deKönigsspringergambitrnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 34Z - G 5db4f32662eda7a5D05deDamenbauernspiel:Colle-Systemrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4wT - = 51d220b5057b43fdD22deAngenommenes Damengambitrnbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4*n - / d3704b90e4e74e51QC35deCunningham-Gambitrnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4 - M 42d61a6bb298ace6C36deKönigsgambit (Moderne Variante)rnbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 - M b663577df5f241bbC50deItalienische Partie,Italienisch,r1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 - M 1b7e13263fc0ab388C50deItalienische Partie,Italienisch,r1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3 ?  - G 409027d3923aeaaeC55deZweispringerspiel im Nachzuger1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4~~ - E 9c6e1a40cc53aebcC61deSpanisch (Bird-Verteidigung)r1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4x - M 72a9e0c0a06fa770pC62deSpanisch (Steinitz-Verteidigung)r1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4}r - A df7c1038cc9fc3c3C63deSpanisch (Jänisch-Gambit)r1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4l -  e60e32fab825049eC64deSpanisch, (Cordel-Verteidigung), (Schliemann-Verteidigung)r1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 f - W 10fd4254dfedaf8bC65deSpanisch: (Berliner Verteidigung bzw.r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4` - G cdb2d0b985883c8aD04deDamenbauernspiel:Colle-Systemrnbqkb1r/pp2pppp/5n2/2pp4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4_ - G 2bc301177acf37f7D04deDamenbauernspiel:Colle-Systemrnbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3  y   grmBBBBBBBBB U ow rR - O 516d5d7406978d04B30deSizilianisch (Rossolimo-Variante)r1bqkbnr/pp1p1ppp/2n1p3/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4Q - O 271aaf451eb51d56VB30deSizilianisch (Rossolimo-Variante)r1bqkbnr/pp1ppppp/2n5/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3P - O 14c47eea7b218ed5B30deSizilianisch (Rossolimo-Variante)r1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3F L - O ceaefc1e653a8f1dB31deSizilianisch (Rossolimo-Variante)r1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4F - u 1ea03924cccd543b;B51deSizilianisch (Rossolimo-Variante), (Moskauer System)r1bqkbnr/pp2pppp/2np4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4E - u b54de1c6dd5cf1388B51deSizilianisch (Rossolimo-Variante), (Moskauer System)rnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3s@ - O 578c1f9407062109 B52deSizilianisch (Rossolimo-Variante)rn1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4: - M 4697045fe342bf93C03deFranzösisch (Tarrasch-Variante)r1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 49 - M ed7adcbdf2d31a90C03deFranzösisch (Tarrasch-Variante)rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3 4 - Q 8709e37463358029)C10deFranzösisch (Rubinstein-Variante)rnbqkbnr/ppp2ppp/4p3/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 43 - Q 4f837c7daacc3079yC10deFranzösisch (Rubinstein-Variante)rnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3o. + ' 2cf62636258646bkC26deWiener Partiernbqk2r/pppp1ppp/5n2/4p3/1bB1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4p- - ' cb8e0b6529afac49IC26deWiener Partiernbqkb1r/pppp1ppp/5n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3UX - i b70c6acdfb843105B11deCaro-Kann-Verteidigung (Zweispringer-Variante)rn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 2 4V - i 6ebb4c09d4e75ed2B11deCaro-Kann-Verteidigung (Zweispringer-Variante)rnbqkbnr/pp2pppp/2p5/3p4/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 0 3U - i ebd16e1d483310f4B11deCaro-Kann-Verteidigung (Zweispringer-Variante)rnbqkbnr/pp1ppppp/2p5/8/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2 Ynfnyl \ a  ? _FNNN)K[Y w^ - 9 7d553ff675f88fbfB10deCaro-Kann-Verteidigungrnbqkbnr/pp2pppp/2p5/8/4p3/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 0 4y] - 9 b5dfa0ffbc013fefB10deCaro-Kann-Verteidigungrnbqkbnr/pp2pppp/2p5/3p4/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 1 3v\ - 9 4e48b85d7ee3bd366B10deCaro-Kann-Verteidigungrnbqkbnr/pp2pppp/2p5/3p4/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3u[ - 9 cb229a49e237f310B10deCaro-Kann-Verteidigungrnbqkbnr/pp1ppppp/2p5/8/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2j +  e3352aa01b5ad99A17deEnglischrnbqk2r/pppp1ppp/4pn2/8/1bP5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 2 4k -  c7723bac4a4265bbA17deEnglischrnbqkb1r/pppp1ppp/4pn2/8/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 1 3 m| -  3e600bbc3663b2f1A19deEnglischrnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4 okv +  5beff6602437cf8A22deEnglischrnbqk2r/pppp1ppp/5n2/4p3/1bP5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 1 4lu -  ccff966049b4b4daA22deEnglischrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR b KQkq - 0 3jt -  e0192d21a9636ce2A22deEnglischrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3mp -  5e857b8f3e746761aA23deEnglischrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4j - O 5f114b59c366c494A27deEnglisch (Holländische Struktur)r1bqkbnr/pppp2pp/2n5/4pp2/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 0 4i - O cb7e2dc07deee94aJA27deEnglisch (Holländische Struktur)r1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3h - O 101ac13615088877wA27deEnglisch (Holländische Struktur)r1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3d - S 782ea9f4c034f9f3A51deBudapester Gambit,Fajarowicz-Gambitrnbqkb1r/pppp1ppp/8/4P3/2P1n3/8/PP2PPPP/RNBQKBNR w KQkq - 1 4c - S 4226e56b727d7409 A51deBudapester Gambit,Fajarowicz-Gambitrnbqkb1r/pppp1ppp/5n2/4P3/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3b - S debb1a297a48c379yA51deBudapester Gambit,Fajarowicz-Gambitrnbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 -k { F [>--6666666 7( YDTZ 4 - ] 4dfb64b3ba21b449IC43deRussische Verteidigung (Steinitz-System)rnbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 36 j - # fc30f6b3c0a1a4adD30deDamengambitrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3(zt/ - / 835abfacd561ff47GC46deDreispringerspielr1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3wy* - ; 4b1376a17217ee1dC60deSpanische Partie (kurz:r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3 % - a 6047e0c7441e877fD01deDamenbauernspiel (Richter-Weressow-System)rnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 3 3 $ - a a61db7f1f4945cb7D01deDamenbauernspiel (Richter-Weressow-System)rnbqkb1r/ppp1pppp/5n2/3p4/3P4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 2 3 # - a fdf38304596e1d21!D01deDamenbauernspiel (Richter-Weressow-System)rnbqkbnr/ppp1pppp/8/3p4/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 1 2 It - / 5dbaa524c7f055300D02deDamenbauernspiel,rnbqkb1r/ppp1pppp/5n2/3p4/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3r - / 86ee43a55e90bf53SD02deDamenbauernspiel,rnbqkb1r/ppp1pppp/5n2/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3q - / dd007750f36afec5D02deDamenbauernspiel,rnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2u - / 40b41493ee1a649bD03deDamenbauernspiel,rnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3 - W c359059bc7a58679yD11deDamengambit (Slawische Verteidigung),rnbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 2u - = 8325d146e25bbb21!D21deAngenommenes Damengambitrnbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3owl - # 27541a45a847c590D30deDamengambitrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 - i 46e0599a50c02bddE61deKönigsindisch (Abweichungen derHauptvariante)rnbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 b*  w k )>KT[]PTSx - 7 937a3003fe25c4377A47deDamenindischer Aufbaurnbqkb1r/p1pppppp/1p3n2/8/3P4/2N2N2/PPP1PPPP/R1BQKB1R b KQkq - 1 3w - 7 68ed28a13cc746eeA47deDamenindischer Aufbaurnbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3z - ; 2c6a65dc0941b8f6A48deKönigsindischer Aufbaurnbqkb1r/pppppp1p/5np1/6B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 1 3w - ; ea3032eab9cb633e>A48deKönigsindischer Aufbaurnbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3x - ; c6d689ab591cbb06A49deKönigsindischer Aufbaurnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3v - 7 c43d43d1d5cc0e0d A50deDamenindischer Aufbaurnbqkb1r/p1pppppp/1p3n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3u~ - 7 3faa5b73172e8cd4A50deDamenindischer Aufbaurnbqkb1r/p1pppppp/1p3n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3qz + 3 8ba809e8fcca66foA56deBenoni-Verteidigungrnbqkb1r/pp1ppppp/5n2/2pP4/2P5/8/PP2PPPP/RNBQKBNR b KQkq - 0 3ry - 3 b2b2c3cd16ea30322A56deBenoni-Verteidigungrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3mu - % 3b3b6c5895c79448HA85deHolländischrnbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3Ip - U f098f985d938f8d6B02deAljechin-Verteidigung (Jagdvariante)rnbqkb1r/pppppppp/8/3nP3/2P5/8/PP1P1PPP/RNBQKBNR b KQkq - 0 3o - U 7cbb66a19a3753d1B02deAljechin-Verteidigung (Jagdvariante)rnbqkb1r/pppppppp/8/3nP3/8/8/PPPP1PPP/RNBQKBNR w KQkq - 1 3n - U b8abb95854f52664dB02deAljechin-Verteidigung (Jagdvariante)rnbqkb1r/pppppppp/5n2/4P3/8/8/PPPP1PPP/RNBQKBNR b KQkq - 0 2m - U d9d2afa550eb0000B02deAljechin-Verteidigung (Jagdvariante)rnbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2k - _ 31606dfc03d2d72d-B12deCaro-Kann-Verteidigung (Vorstoßvariante)rnbqkbnr/pp2pppp/2p5/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3j - _ 50197b0107ccf149IB12deCaro-Kann-Verteidigung (Vorstoßvariante)rnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3i - _ d57359159b18bf6foB12deCaro-Kann-Verteidigung (Vorstoßvariante)rnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2h - _ 104676bf8ad1922d-B12deCaro-Kann-Verteidigung (Vorstoßvariante)rnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2f -  88bc27f9be1b01e9B21deSizilianisch (Morra-Gambit), (Sizilianisches Mittelgambit)rnbqkbnr/pp1ppppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 3e -  fe66df616e6b0e6foB21deSizilianisch (Morra-Gambit), (Sizilianisches Mittelgambit)rnbqkbnr/pp1ppppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3d -  a1786554139f67a9B21deSizilianisch (Morra-Gambit), (Sizilianisches Mittelgambit)rnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 } u n  . 4yK=Rutz - ; df772b4f61394cfeA43deAlt-Benoni-Verteidigungrnbqkbnr/pp1pGin - % 9b42400ffadf5707A84deHolländischrnbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2qk - 5 1e01da176c1035355B06deModerne Verteidigungrnbqk1nr/ppppppbp/6p1/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3rj - 5 aebde7a19757fe9fB06deModerne Verteidigungrnbqkbnr/pppppp1p/6p1/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2ri - 5 6b88c80b869ed3ddB06deModerne Verteidigungrnbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2g - u 255d166e935a642f/B07dePirc-Ufimzew-Verteidigung,Jugoslawische Verteidigungrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/8/PPP2PPP/RNBQKBNR w KQkq - 1 3f - u 7eb3229b3ea025b9B07dePirc-Ufimzew-Verteidigung,Jugoslawische Verteidigungrnbqkbnr/ppp1pppp/3p4/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2e - u bb860d312f6908fbB07dePirc-Ufimzew-Verteidigung,Jugoslawische Verteidigungrnbqkbnr/ppp1pppp/3p4/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2c - { 569df553113fb99dB27deSizilianisch (frühes Fianchetto) (Ungarische Variante)rnbqkbnr/pp1ppp1p/6p1/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3b - { bf29a6086ab02bd6B27deSizilianisch (frühes Fianchetto) (Ungarische Variante)rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2}_ - G 6dde57fb8d90d30a B28deSizilianisch (O'Kelly-System)rnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3[ - Q e4c792fdc74a6a40@B29deSizilianisch (Rubinstein-Variante)rnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3nW - % c6ea63698c858585C23deLäuferspielrnbqk1nr/pppp1ppp/8/2b1p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3kV - % 6bf7273246b76f06C23deLäuferspielrnbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2nS - % 301913c7eb4d2e90C24deLäuferspielrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3nO - ' 583e535abd879e7azC25deWiener Partier1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3lN - ' f3d38bb8ac163b79yC25deWiener Partiernbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2yK - ? 584faa4cbd576eaaC30deAbgelehntes Königsgambitrnbqk1nr/pppp1ppp/8/2b1p3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 1 3vJ - ? f552ee1777658429)C30deAbgelehntes Königsgambitrnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2G - _ 474f1975b89af543CC40deLettisches Gambit,Gambit in der Rückhandrnbqkbnr/pppp2pp/8/4pp2/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 F - _ d3207fec0612d89dC40deLettisches Gambit,Gambit in der Rückhandrnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2vC - 7 ea9ae98dd46a91f0C41dePhilidor-Verteidigungrnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3? - Q 78cda70e17837d9eC44deKönigsbauernspiele mit 2. Sf3 Sc6r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3y; + C 95e6d0c6f663d72rD06deDamengambit (seltene Züge)rn1qkbnr/ppp1pppp/8/3p1b2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3y: - C 8a470482d88334ffD06deDamengambit (seltene Züge)rnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 5+ >    s~ fu{ - ; e6cdbd2eb3410593A43deAlt-Benoni-Verteidigungrnbqkbnr/pp2pppp/3p4/2pP4/8/8/PPP1PPPP/RNBQKBNR w KQkq - 0 3# - y f44b6961e533d1c4C00deFranzösische Verteidigung,Französisch, seltene Zügernbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2p! + 3 844931a6ef4b9a0C20deKönigsbauernspielernbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2n + / 6649ba69b8c9ff8D00deDamenbauernspiel,rnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2~ - K 34d3e3bb02740bbfA07deKönigsfianchetto,Barcza-Systemrnbqkbnr/ppp1pppp/8/3p4/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 0 2ur - = 54c31263e9ad3b4fOA53deAltindische Verteidigungrnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2lo - % c0ac74fa57251691A84deHolländischrnbqkb1r/ppppp1pp/5n2/5p2/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3o - + 9416c7dea1ac7880A09deReti-Eröffnungrnbqkbnr/ppp1pppp/8/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 2h -  6a61256b3a8694d4A16deEnglischrnbqkb1r/pppppppp/5n2/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 2 2Vws - = 6d7984023bd57222"A53deAltindische Verteidigungrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3h -  9b04ed80ae9dce90A20deEnglischrnbqkbnr/pppp1ppp/8/4p3/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 1 2f -  40600176c67bafadA20deEnglischrnbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2y - C 3697b0f7962f33b4A42dez. B. Moderne Verteidigungrnbqkbnr/ppp1pppp/3p4/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 - ] 1ebada711a284b80A45deDamenbauernspiel (Trompowsky-Eröffnung)rnbqkb1r/pppppppp/5n2/6B1/3P4/8/PPP1PPPP/RN1QKBNR b KQkq - 2 2 - ] d8e08d47aaa29048HA45deDamenbauernspiel (Trompowsky-Eröffnung)rnbqkb1r/pppppppp/5n2/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 1 2k - % 3b87646a590724388A81deHolländischrnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2{ - I d366d2635250410a A82deHolländisch (Staunton-Gambit)rnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 - { ceb83f52a4e026cfB20deSizilianische Verteidigung,Sizilianisch (seltene Züge)rnbqkbnr/pp1ppppp/8/2p5/1P2P3/8/P1PP1PPP/RNBQKBNR b KQkq - 0 2 - { 644d4afe02564aebB20deSizilianische Verteidigung,Sizilianisch (seltene Züge)rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2} - I 1297b266d226456dmB22deSizilianisch (Alapin-Variante)rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2h -  824d8fb5d6e16419A21deEnglischrnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3g~ -  bbf719d404992d74tA21deEnglischrnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2tz - ; df772b4f61394cfeA43deAlt-Benoni-Verteidigungrnbqkbnr/pp1ppppp/8/2pP4/8/8/PPP1PPPP/RNBQKBNR b KQkq - 0 2uy - ; 657f681cf81fdaa3A43deAlt-Benoni-Verteidigungrnbqkbnr/pp1ppppp/8/2p5/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2uw - ; 9a3e66dbf801f641AA44deAlt-Benoni-Verteidigungrnbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3 D 1  S / pDU20\DG - K 5da00ec3c1f3f543CE94esIndia de Rey, variante Ortodoxarnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7 F - [ eaf77b15a6f3b39bE95esIndia de Rey, Ortodoxa, 7...Cbd7, 8.Te1r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 8E - q 8d17a0c2b38a2613E96esIndia de Rey, Ortodoxa, 7...Cbd7, línea principalr1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10D + q b0d1503d0162a83E96esIndia de Rey, Ortodoxa, 7...Cbd7, línea principalr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 9C - q 788d96fad1336020 E96esIndia de Rey, Ortodoxa, 7...Cbd7, línea principalr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9AB - E f64dd621d0625040@E97esIndia de Rey, Ortodoxa, variante Aronin-Taimanov (ataque Yugoslavo / variante Mar del Plata)r1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8A - i dfc12ba3297d16efE98esIndia de Rey, Ortodoxa, Aronin-Taimanov, 9.Ce1r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 9 @ -  dc58a8ad9af3ddb5E99esIndia de Rey, Ortodoxa, Aronin-Taimanov, línea principalr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 w - - 0 11? -  4837ce34247bf06bkE99esIndia de Rey, Ortodoxa, Aronin-Taimanov, línea principalr1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10|> - Q 8da7a73e5fdd72dcA00deseltene Eröffnungen wieOrang-Utanrnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR b KQkq - 0 1m= - / ca9df64ccc1c97f1A01deLarsen-Eröffnungrnbqkbnr/pppppppp/8/8/8/1P6/P1PPPPPP/RNBQKBNR b KQkq - 0 1z< - K bb2deb150f00c115A02deFroms Gambit undBird-Eröffnungrnbqkbnr/pppppppp/8/8/5P2/8/PPPPP1PP/RNBQKBNR b KQkq - 0 1q; - 7 9d5f7aee7e779da1A04deHolländisches Systemrnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1r5 - 5 183558fae2a3d387A06deZukertort-Eröffnungrnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2l3 - + 5862e4d3225e8420 A11deReti-Eröffnungrnbqkbnr/pp1ppppp/2p5/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2m1 - + bc6ffb0d4dbcc7c9A13deReti-Eröffnungrnbqkbnr/pppp1ppp/4p3/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2|/ - K 91f63dc9f864160d A15deEnglisch gegenKönigsfianchettornbqkb1r/pppppppp/5n2/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 1 2>- + M 976b1f894bd29e8A40deEnglund-Gambit,Owen-Verteidigung,Känguru-Verteidigung,Moderne Verteidigung,Horwitz-Verteidigungrnbqkbnr/pppp1ppp/8/4p3/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2=, - M 830eb9b20758d1deA40deEnglund-Gambit,Owen-Verteidigung,Känguru-Verteidigung,Moderne Verteidigung,Horwitz-Verteidigungrnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1+ - _ bab42fd3d52098b3A41deunregelmäßige Systeme,Wade-Verteidigungrnbqkbnr/ppp1pppp/3p4/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2 ) - k 1761df2bb9d0fc00A80deHolländische Verteidigung (kurz: Holländisch)rnbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2' -  e955d2400392f60d B00deOwen-Verteidigung;Nimzowitsch-Verteidigung;Baker-Verteidigungrnbqkbnr/p1pppppp/1p6/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2& -  823c9b50fd114196B00deOwen-Verteidigung;Nimzowitsch-Verteidigung;Baker-Verteidigungrnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1: -  ca18093c559e579bA10deAbarten von Holländisch,Damenindisch undKönigsindisch (ohne d4)rnbqkbnr/pppppppp/8/8/2P5/8/PP1PPPPP/RNBQKBNR b KQkq - 0 1l9 - + 3e47c90193d48f333A03deBird-Eröffnungrnbqkbnr/ppp1pppp/8/3p4/5P2/8/PPPPP1PP/RNBQKBNR w KQkq - 0 2yn7 - Y c6b14e1bd38ddc377A05deÜbergang in verschiedene Eröffnungenrnbqkb1r/pppppppp/5n2/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 2 2 x% + C 756b94461c50fb0B01deSkandinavische Verteidigungrnbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2 dd L  e 9|X'~(}E a - ] 9e9da6b188ca61e2E75esIndia de Rey, Averbakh, línea principalrnbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8` - o f6f782088bee2999E76esDefensa India de Rey, Ataque de los cuatro peonesrnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 5_ - } 8fdfec465f928ad1E77esDefensa India de Rey, Ataque de los cuatro peones, 6.Ae2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 6&^ -  b2cad11ec833e091E78esDefensa India de Rey, Ataque de los cuatro peones, con Be2 y Cf3rnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7'] -  52a55578345da5f4E79esDefensa India de Rey, Ataque de los cuatro peones, línea principalr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9%\ -  21adee94b567be7azE79esDefensa India de Rey, Ataque de los cuatro peones, línea principalr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9$[ -  8a403676a4f61b79yE79esDefensa India de Rey, Ataque de los cuatro peones, línea principalrnbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8&Z -  edd46b2bb5c78957WE79esDefensa India de Rey, Ataque de los cuatro peones, línea principalrnbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8Y - K 6550193432b5fb61aE80esIndia de Rey, variante Sämischrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5X - K 6ff8f483e7ec128aE81esIndia de Rey, Sämisch, 5...O-Ornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6W - w 7799067f9855be9fE82esIndia de Rey, Sämisch, variante del doble Fianchettornbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7V - w 1cf04f6f66d60904E82esIndia de Rey, Sämisch, variante del doble Fianchettornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6U - K b71d978d7747ac07E83esIndia de Rey, Sämisch, 6...Cc6r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 7T - o c1f569de2fcb31efE84esIndia de Rey, Sämisch, línea principal de Panno1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R w KQ - 2 9S - o 5956c23e79f58685E84esIndia de Rey, Sämisch, línea principal de Pannor1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R b KQ - 1 8 R - _ 96884725f533f1322E85esIndia de Rey, Sämisch, variante Ortodoxarnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7Q - c 10564105aad82f77wE86esIndia de Rey, Sämisch, Ortodoxa, 7.Cge2 c6rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8P - c 822caceadd18fcccE86esIndia de Rey, Sämisch, Ortodoxa, 7.Cge2 c6rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 7 O - Y 2c8004766c15676foE87esIndia de Rey, Sämisch, Ortodoxa, 7.d5rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7 N - _ befae9991bd5b4d4E88esIndia de Rey, Sämisch, Ortodoxa, 7.d5 c6rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 8M - u d92ead1f9394b490E89esIndia de Rey, Sämisch, línea principal de Ortodoxarnbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 9L - u aa5e025633feb92a*E89esIndia de Rey, Sämisch, línea principal de Ortodoxarnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 0 8vK - 3 d08513f3fa99752d-E90esIndia de Rey, 5.Cf3rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5uJ - 3 a9ad7dbd2ee5d665eE91esIndia de Rey, 6.Ae2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 6I - K 23d575f7bd002e53SE92esIndia de Rey, variante Clásicarnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 7H - o aa3e4df9c48e55c2E93esIndia de Rey, sistema Petrosian, línea principalr1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 8 vy }  `   rY:D1g1 v} - g 5a95801dbb6966bcE53esNimzo-India, 4.e3, Línea principal con ...c5rnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7| - i bf5cf670aa975084E54esNimzo-India, 4.e3, sistema Gligoric con 7...dcrnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 b - - 0 8{ - i f6e6c21b95a4534fOE54esNimzo-India, 4.e3, sistema Gligoric con 7...dcrnbq1rk1/pp3ppp/4pn2/2p5/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8z - { 8cbf8d2d4a3fbd48HE55esNimzo-India, 4.e3, sistema Gligoric, variante Bronsteinr1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 9y - k 8f0d23cbd60b18afE56esNimzo-India, 4.e3, Línea principal con 7...Cc6r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8x - m 2e7d03da2fa32ba5E58esNimzo-India, 4.e3, Línea principal con 8...Axc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 9w - m 65a869eb82ffc4e5E58esNimzo-India, 4.e3, Línea principal con 8...Axc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 9v - m 449112ed9f4796efE58esNimzo-India, 4.e3, Línea principal con 8...Axc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8u - S b5c10e8342aec68dE59esNimzo-India, 4.e3, Línea principalr1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1 b - - 0 10t - S fc7b3ae87d9dc546FE59esNimzo-India, 4.e3, Línea principalr1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10rs - 5 bd7741389222a904E60esDefensa India de Reyrnbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3|r - C 46e0599a50c02bddE61esDefensa India de Rey, 3.Cc3rnbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 q - W 3864a5faf1ce101fE62esIndia de Rey, variante del Fianchettornbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5 p - ] 80533915e338a742BE63esIndia de Rey, Fianchetto, variante Pannor1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8o - a 614dba9e963d2af0E64esIndia de Rey, Fianchetto, sistema Yugoslavrnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7n - G 1f38c1aaeacef1e0E65esIndia de Rey, Yugoslav, 7.O-Ornbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7 m + ] edd5a1b6279c2beE66esIndia de Rey, Fianchetto, Yugoslav Pannor1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8 l - ] b4d51948fb5f54e3E66esIndia de Rey, Fianchetto, Yugoslav Pannor1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8k - S b4df106d89d2cc41AE67esIndia de Rey, Fianchetto con ...Cd7r1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7j - o 84d56e5b8d44526dmE68esIndia de Rey, Fianchetto, variante Clásica, 8.e4r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8"i -  fe5c5e0a38274824$E69esIndia de Rey, Fianchetto, variante Clásica línea principalr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9#h -  16af83b4fa8481d6E69esIndia de Rey, Fianchetto, variante Clásica línea principalr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9qg - 1 325b696440075d7d}E70esIndia de Rey, 4.e4rnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4qf - 1 f65c642cab87e077wE70esIndia de Rey, 4.e4rnbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 e - Y e31222bb50dcdde2E71esIndia de Rey, sistema Makagonov (5.h3)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5{d - = 2707444472a8cc28(E72esIndia de Rey con e4 & g3rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5vc - 3 78617cfc935a5eb3E73esIndia de Rey, 5.Ae2rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 5b - I 52e217d309ce67edE74esIndia de Rey, Averbakh, 6...c5rnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7 lM 2    yap`+r^? + m e33a3489a02a04cLE29esNimzo-India, variante Saemisch, línea principalrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5 - M d638c6c0c8103a2e.E30esNimzo-India, variante Leningrad,rnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4 - o 7b83e1f9186385edE31esNimzo-India, variante Leningrad, línea principalrnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7 - I a17be3eb6a4cdd82E32esNimzo-India, variante Clásicarnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4  + [ a963b097bdd7881E33esNimzo-India, variante Clásica, 4...Cc6r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5 - S 2411c1fff69893a4E34esNimzo-India, Clásica, variante Noarnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5 - m 152f83f64ef34772rE35esNimzo-India, Clásica, variante Noa, 5.cxd5 exd5rnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6 - m 2a3b5a32545687b9E35esNimzo-India, Clásica, variante Noa, 5.cxd5 exd5rnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5  - _ ef8df0d9bfd41de4E36esNimzo-India, Clásica, variante Noa, 5.a3rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5 -  e249c99f81c0d1bbE37esNimzo-India, Clásica, variante Noa, línea principal, 7.Dc2rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR b KQkq - 2 7 - G 470a3245950bd6ffE38esNimzo-India, Clásica, 4...c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5 - U 3241fd22a34e6878xE39esNimzo-India, Clásica, variante Pircrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6r - / bd4fd3445cc56942BE40esNimzo-India, 4.e3rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4w - 5 5b3e02eaa382623f?E41esNimzo-India, 4.e3 c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5 - ] 4f9ae9258ba96fc1E42esNimzo-India, 4.e3 c5, 5.Ce2 (Rubinstein)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 - G d6269a54a246ded9E43esNimzo-India, variante Fischerrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5 - U c282719b8a6dd327'E44esNimzo-India, variante Fischer, 5.Ce2rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 + i d92237fc14cd1d9E45esNimzo-India, 4.e3, Bronstein (Byrne) variationrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6v - 7 b7e73ef3899c80a9E46esNimzo-India, 4.e3 O-Ornbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5} - E e2ea9f51b01c42daE47esNimzo-India, 4.e3 O-O, 5.Ad3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5 - K 6780bd452cc80cfcE48esNimzo-India, 4.e3 O-O, 5.Ad3 d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6 - U c6f09d54d5603ff6E49esNimzo-India, 4.e3, sistema Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 0 7 - U 8d25f765783cd0b6E49esNimzo-India, 4.e3, sistema Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7 - U ac1c8c63658482bcE49esNimzo-India, 4.e3, sistema Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6  - ] 6c83d205e17ae194E50esNimzo-India, 4.e3 e8g8, 5.Cf3, sin ...d5rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5 - Q e9e9f0117daeafb2E51esNimzo-India, 4.e3 e8g8, 5.Cf3 d7d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6 - g d78d18a3baadda5aZE52esNimzo-India, 4.e3, Línea principal con ...b6rnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7~ - g bce451b3442e6dc1E52esNimzo-India, 4.e3, Línea principal con ...b6rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 6 ._%  4yg t  w o g _ W O G ? 7 / '     { r i% a Y Q I A 9 1 ) !    y q i a Y Q I A 9 1 )    UL1 { s k c [ S K C ; 3 + #   ypg^ULC:1)! yqiaYQIA8/& ^yqiaYQIA91)! C(}ume]UME=5-% }tp}kld\TLD<4,$ wn=:f^VNF~~e}:vrr 6.$ c1($~~e}:vrr qii[ga]\!ZHF+=0V0G,%  =k ciA}sqqqcga@`h]ZXJHFEHE>:#4]4%+(h !]Zq3~~0|{[zexfutt)pokih`gV`_[1XH>E7)5-j5 @<jin}}J|xwctnk(i>g]dGaP_>[VGxC4.$$X_ vC/$?l~|_xwvt ok}gzeah`WTROD@>/=>7Z3|*%-$\ y>gG?=cF=~~~{xvtRsrwm]gBfda!^QTOQNEC ?<55(t&%l  rQYw~}>vp-omi:ihf8aQa>``WVND*;0".M+j)'OP 7/aNF>!}vi^4ywvnfI  @f1  x f > pDs`V@5 - U aba85640b9fe7f4cLE19esIndia de Dama, Old Main line, 9.Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 84 - U 1ab1245dab284328(E19esIndia de Dama, Old Main line, 9.Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8t3 - 3 106291f6789ae1e6E20esDefensa Nimzo-Indiarnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 2 - a cb067d00107c80dbE21esNimzo-India, variante de los trec caballosrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4~1 - I 2a9b324e4da14900E22esNimzo-India, variante Spielmanrnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4 0 - ] 18e419d2406bb012E23esNimzo-India, Spielmann, 4...c5, 5.dc Cc6r1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6 / - ] b309c13051fa1511E23esNimzo-India, Spielmann, 4...c5, 5.dc Cc6rnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5 . - ] cceae3e0b2e6427d}E23esNimzo-India, Spielmann, 4...c5, 5.dc Cc6rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5}- - I b112b1e78132d2ecE24esNimzo-India, variante Saemischrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5, - I fac7dbd62c6e3dacE24esNimzo-India, variante Saemischrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5+ - I dbfea0d031d66fa6E24esNimzo-India, variante Saemischrnbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4* - i b2923fa1e0a56cdbE25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 7) - i bcb8a46c426b78c6E25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 7( - i 5ac975c2bd2c73bbE25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 6' - i 111c1ff310709cfbE25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b2P2/1P2P1PP/R1BQKBNR w KQkq - 0 6& - i 302564f50dc8cef1E25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N2P2/1P2P1PP/R1BQKBNR b KQkq - 0 5% - i fbb955d3448440b1E25esNimzo-India, variante Saemisch, variante Keresrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5$ -  fa4e22fb5a2a51355E26esNimzo-India, variante Saemisch, 4.a3 Axc3+ 5.bxc3 c5 6.e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR b KQkq - 0 6# -  576360497e75d991E26esNimzo-India, variante Saemisch, 4.a3 Axc3+ 5.bxc3 c5 6.e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6" - [ bbba5c50546b3b07E27esNimzo-India, variante Saemisch, 5...0-0rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6! - U 16971ee27034b3a3E28esNimzo-India, variante Saemisch, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6 - U 5d4274d3dd685ce3E28esNimzo-India, variante Saemisch, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b1P3/1P3PPP/R1BQKBNR w KQ - 0 6 - U 7c7b0fd5c0d00ee9E28esNimzo-India, variante Saemisch, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N1P3/1P3PPP/R1BQKBNR b KQ - 0 5 + m e06b60ca762dfaeE29esNimzo-India, variante Saemisch, línea principalr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 1 8 + m 4ae5bbb723b3645EE29esNimzo-India, variante Saemisch, línea principalr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQkq - 0 7 - m 4f7b318adf67d905E29esNimzo-India, variante Saemisch, línea principalr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQkq - 0 7 - m 6e424a8cc2df8b0fE29esNimzo-India, variante Saemisch, línea principalr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQkq - 0 6 - m a5de7baa8b93054fOE29esNimzo-India, variante Saemisch, línea principalr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQkq - 2 6 tva Y d P J YD>@B>93@tGS - ] 22b4e052f18fab1dE00esApertura de peón de dama (incluyendo Ataque NeoIndio, Ataque Trompowski, Apertura Catalana entre otros)rnbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3rR - / 3ec85a7ac061e57azE01esCatalana, cerradarnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4yQ - = 3e6ade075261f9e2E02esCatalana, abierta, 5.Da4rnbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5xP - = ecce6348925f0b99E02esCatalana, abierta, 5.Da4rnbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5O - U cac927bbeca72d91E03esCatalana, abierta, variante Alekhiner1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 6N + U d89a55ab2c9142e.E03esCatalana, abierta, variante Alekhiner1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6xM - = 37aa8fbefab96aa4E04esCatalana, abierta, 5.Cf3rnbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5L - Q 2366fc513012c6355E05esCatalana, abierta, línea clásicarnbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6zK - = f160c563622c28d6E06esCatalana, cerrada, 5.Cf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5zJ - = 2a0429950aca49ebE06esCatalana, cerrada, 5.Cf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5|I - C b65e28bd2b2ef7e1E07esCatalana, cerrada, 6...Cbd7r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7{H - C 85bd53e0cb861a2d-E07esCatalana, cerrada, 6...Cbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6{G - C fbc828d4b775c13d=E07esCatalana, cerrada, 6...Cbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6xF + = 7475aa039f8cb85E08esCatalana, cerrada, 7.Dc2r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 b - - 2 7E - S cc530f2dd4c5b00eE09esCatalana, cerrada, línea principalr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8D - S 4490e61e2fc1f0afE09esCatalana, cerrada, línea principalrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5C - S 505c95f1e56a5c3e>E09esCatalana, cerrada, línea principalrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4wB - ; f9d00ca49969ca20 E10esQueen's Pawn Game 3.Cf3rnbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3rA - 1 309165a2d29e0202E11esDefensa Bogo-Indiarnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4x@ - 7 92b945b467ea7dbbE12esDefensa india de damarnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4? - K 1edd0807484d289dE13esIndia de Dama, 4.Cc3, Main linern1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 7> - K ae4d40833a1f8706E13esIndia de Dama, 4.Cc3, Main linernbqk2r/p1pp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6= - K f4c22840c9a1a59dE13esIndia de Dama, 4.Cc3, Main linernbqk2r/p1pp1pp1/1p2pn1p/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6v< - 5 3f94070643b5f51fE14esQueen's Indian, 4.e3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4w; - 3 be5ffef5873da583E15esIndia de Dama, 4.g3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4: - S 727efc0af3751a43CE16esIndia de Dama, Capablanca variationrn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6z9 - = aff3e6e372297ef0E17esIndia de Dama, 5.Ag2 Ae7rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 68 - S 20b968c21961ced2E18esIndia de Dama, Old Main line, 7.Cc3rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 77 - U 2910a3204606afc5E19esIndia de Dama, Old Main line, 9.Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 96 - U 1921ebd65ef08941AE19esIndia de Dama, Old Main line, 9.Dxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 9 bWOG?7/'wog_WOG?7.% xph`XPH@80( yqiaYQIA91)!  ~ u l c Z Q H ? 6 - $    ~ v n f ^ V N F > 6 . &     ~ v n f ^ V N F > 6 . &     w n e \ S J A 8 / &    } u m e ] U L C : 1 (   |tld\TLD<4,$ |tld[RI@7.% zqh_}ume]UME=5-% |sjaXOF>6.&9f zY7i~?}|yw'v{uutifFd`1_^TKT'S#SR O)NuLxLdF?9>-($#&  < U0L_=*6hW]0uZ=4E >-}}}}h|x"w:w vlvuLsqmjjiTbO^]]9XXU|QqP8MIC-BfBF=9 ('/# sI0  \x .K\2Nzzyok"i]PNINB<9 865l/0zy Q6Kl}1]B}}}zwhmmjjca9WURNNJIHA54/E"3,v g-MNA~{zVyw9utrqp'iieQd2aN\ZZYTPwJFA(6^'0&]#P mjKcD,)J8~ a~~ |xxzvbca^p\UkPNNFFDlB=683T/y' k6 MmK ; - % * "_.BZMo - S 78f0b894533b3c64dD87esGrünfeld, cambio, variante Spasskyrnbqk2r/pp2ppbp/6p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R b KQkq - 1 8n - S 6c54535b7b10319aD87esGrünfeld, cambio, variante Spasskyrnbqk2r/pp2ppbp/6p1/2p5/2BPP3/2P5/P4PPP/R1BQK1NR w KQkq - 0 8m -  276022607366d5f2D88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bq1rk1/pp2ppbp/2n3p1/8/2BPP3/4B3/P3NPPP/R2Q1RK1 b - - 0 11l -  8bd6f72c17ced9d4D88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bq1rk1/pp2ppbp/2n3p1/8/2BpP3/2P1B3/P3NPPP/R2Q1RK1 w - - 0 11k -  d4c84d196a3ab012D88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2Q1RK1 b - - 5 10j -  aabd362d16c96b02D88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R w KQ - 4 10 i -  a015db9ac39082e9D88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R b KQkq - 3 9h -  d31d607642aa9967gD88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cdr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQkq - 2 9g - w 7ec069fa27e6f754TD89esGrünfeld, variante Spassky, línea principal, 13.Ad3r2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1 w - - 1 14f - w d07d17b687f107bfD89esGrünfeld, variante Spassky, línea principal, 13.Ad3r2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 0 13e - w 7ccbc2fae3590b99D89esGrünfeld, variante Spassky, línea principal, 13.Ad3r2q1rk1/pp2ppbp/6p1/n7/3pP1b1/2PBBP2/P3N1PP/R2Q1RK1 w - - 0 13d - w 23d578cf9ead625f_D89esGrünfeld, variante Spassky, línea principal, 13.Ad3r2q1rk1/pp2ppbp/6p1/n1p5/3PP1b1/2PBBP2/P3N1PP/R2Q1RK1 b - - 2 12c - O 18ee9778a4f204c6D90esGrünfeld, variante tres caballosrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4b - O 6e08fdf8ef3f14a4D91esGrünfeld, variante tres caballosrnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5ta - - 73064c4fc6d5250fD92esGrünfeld, 5.Af4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5` - E d483e34a37d34440@D93esGrünfeld con 5.Af4 O-O 6.e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6_ - E 79aea1f8138ccce4D93esGrünfeld con 5.Af4 O-O 6.e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6r^ + + 57fe87c7bea47c8D94esGrünfeld, 5.e3rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5] - E 352ea6739b8806c5D95esGrünfeld con 5.e3 O-O 6.Db3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 6}\ - = 92ab09766a8e678aD96esGrünfeld, variante Rusarnbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5[ - O a11f4cadad02beaaD97esGrünfeld, variante Rusa con 7.e4rnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 7Z - O 651841e5468203a0D97esGrünfeld, variante Rusa con 7.e4rnbq1rk1/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R w KQ - 1 7Y - O 6fb0ac5293dbea4bKD97esGrünfeld, variante Rusa con 7.e4rnbqk2r/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 0 6X - O 40ad304438b08969iD97esGrünfeld, variante Rusa con 7.e4rnbqk2r/ppp1ppbp/5np1/8/2pP4/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 0 6W - O a3cc869fea87b040@D98esGrünfeld, Rusa, variante Smyslovrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8 V - e 814ca588eccd530eD99esDefensa Grünfeld, Smyslov, línea principalrn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9 U - e 29833ed5c671a23b;D99esDefensa Grünfeld, Smyslov, línea principalrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R w KQ - 3 9T - e d0c43d736bbdabceD99esDefensa Grünfeld, Smyslov, línea principalrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R b KQ - 2 8 zn m r |   $+:N^L  - _ 8e1cfc386a3bfebfD75esNeo-Grünfeld, 6.cd Cxd5, 7.O-O c5, 8.Cc3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 0 6 + _ b76de2cf6efb099D75esNeo-Grünfeld, 6.cd Cxd5, 7.O-O c5, 8.Cc3rnbq1rk1/ppppppbp/5np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQ - 0 5 + S 651d25c9ca91d00D76esNeo-Grünfeld, 6.cd Cxd5, 7.O-O Cb6rnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 8t - 5 be0ebcd399c77f0fD77esNeo-Grünfeld, 6.O-Ornbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6t - 5 322d23f7dac8d408D77esNeo-Grünfeld, 6.O-Ornbq1rk1/ppp1ppbp/5np1/3p4/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 0 6r - 5 b74701e3461c9a2e.D77esNeo-Grünfeld, 6.O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b - - 4 5r - 5 c9327ad73aef413e>D77esNeo-Grünfeld, 6.O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R w KQ - 3 5t - 5 c39a9760efb6a8d5D77esNeo-Grünfeld, 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4u - 5 766ab41da25b70acD77esNeo-Grünfeld, 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4y - ; 2c74513cee07acb4D78esNeo-Grünfeld, 6.O-O c6rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7x - ; a91e732872d3e292D78esNeo-Grünfeld, 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6x - ; d76b081c0e203982D78esNeo-Grünfeld, 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6u - ; 4511e5f379e0ea399D78esNeo-Grünfeld, 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQ - 2 5v - ; f0e1c68e340d3240@D78esNeo-Grünfeld, 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQ - 1 5 - Y 512e65b8eca3b513D79esNeo-Grünfeld, 6.O-O, línea principalrnbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8 - Y 225ecaf14cc9b8a9D79esNeo-Grünfeld, 6.O-O, línea principalrnbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7t~ - / c38a7b8ecc1465fbD80esDefensa Grünfeldrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4{} - = f973d836f92fcd1dD81esGrünfeld, variante Rusarnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4t| - - 18de9d0f55748f98D82esGrünfeld, 4.Af4rnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4r{ + / fe70fbc5f35257d}D83esGambito Grünfeldrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6tz + / 54fe20b8a6ccc96D83esGambito Grünfeldrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5sy - / a862a0b9ae3344322D83esGambito Grünfeldrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5vx - A a08f71815daca1dbD84esGambito Grünfeld aceptadornb2rk1/ppB1ppbp/6p1/3q4/3P4/4P3/PP3PPP/R2QKBNR b KQ - 0 8xw - A d3b26261bbfe33abD84esGambito Grünfeld aceptadornb2rk1/ppp1ppbp/6p1/3q4/3P1B2/4P3/PP3PPP/R2QKBNR w KQ - 0 8yv - A 4f01d6352c22099aD84esGambito Grünfeld aceptadornbq1rk1/ppp1ppbp/6p1/3N4/3P1B2/4P3/PP3PPP/R2QKBNR b KQ - 0 7zu - A 9e23ee3c421e2c3c - c b844c53ac05b240b D45esGambito de dama declinado, Semi-Eslava 5.e3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4= - e de9443b04de8727fD46esGambito de dama declinado, Semi-Eslava 6.Ad3r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6< - e 45284ee920e59f57WD47esGambito de dama declinado, Semi-Eslava 7.Ac4r1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7; + e c927a821fd69c9cD47esGambito de dama declinado, Semi-Eslava 7.Ac4r1bqkb1r/pp1n1ppp/2p1pn2/8/2pP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7 : - ] 39b3e62fe28c4b6ajD48esGambito de dama declinado, Meran, 8...a6r1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9 9 - _ fa85fdcdb945771bD49esGambito de dama declinado, Meran, 11.Cxb5r1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 118 - _ 1af5395cdc3ee9a0D49esGambito de dama declinado, Meran, 11.Cxb5r1bqkb1r/3n1ppp/p3pn2/1p2P3/3p4/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 117 - M 9a138dd21f33bc2a*D50esGambito de dama declinado, 4.Ag5rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 486 - 3 a9f0f68fff9b51e6D51esGambito de dama declinado, 4.Ag5 Cbd7 (Defensa Cambridge Springs y Celada Elefante)r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 55 - ? 4dc3b524c4e26bc4D52esGambito de dama declinador1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 64 - U 8edffe3dd59810bbD53esGambito de dama declinado, 4.Ag5 Ae7rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 53 - w 56c19e75a78c252a*D54esGambito de dama declinado, variante Anti-Neo-Ortodoxarnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 62 - w 295a5138249e71f4D54esGambito de dama declinado, variante Anti-Neo-Ortodoxarnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 61 - M f23ebdce4c7810c9D55esGambito de dama declinado, 6.Cf3rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6 0 ) _ 4ed2f49a5bf6bdD56esGambito de dama declinado, Defensa Laskerrnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8/ -  eec36cc8c45017dfD57esGambito de dama declinado, Defensa Lasker, línea principalrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R b KQ - 0 10. -  6d31de153239efc6D57esGambito de dama declinado, Defensa Lasker, línea principalrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2n1PN2/PP3PPP/R2QKB1R w KQ - 0 10- -  dfb86383d53719cbD57esGambito de dama declinado, Defensa Lasker, línea principalrnb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9,, -  512fd77bd691ccdcD58esGambito de dama declinado, Sistema Tartakower (Makagonov-Bondarevsky)rnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 85+ - - c0eb36fbcbbac59dD59esGambito de dama declinado, Sistema Tartakower (Makagonov-Bondarevsky), 8.cd Cxd5rnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9* - c c1ddc693acd0fd05D60esGambito de dama declinado, Defensa Ortodoxar1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7$) -  70c4b48ebe06c161aD61esGambito de dama declinado, Defensa Ortodoxa, variante Rubinsteinr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 2 7 zh:  u > ! Upq> z ] - a 51d220b5057b43fdD22esGambito de dama aceptado, Defensa Alekhinernbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4x\ - = d8cbe5b34fa1fab7D23esGambito de dama aceptadornbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4[ - K 235cfd118d43786enD24esGambito de dama aceptado, 4.Cc3rnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4}Z - I 75e6a7016bfe7213D25esGambito de dama aceptado, 4.e3rnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 Y + c 391553073dce241AD26esGambito de dama aceptado, variante clásicarnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 X - c ad03bd3abedc8e41AD27esGambito de dama aceptado, variante clásicarnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7W - q 3b053218f098d5c5D28esGambito de dama aceptado, variante clásica, 7.De2rnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7V - u 229500ab92419787D29esGambito de dama aceptado, variante clásica, 8...Ab7rn1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9U - u 9205482fe013381cD29esGambito de dama aceptado, variante clásica, 8...Ab7rnbqkb1r/5ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 b kq - 1 8xT - ? fc30f6b3c0a1a4adD30esGambito de dama declinadornbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3S + M 7a7ee1102432674tD31esGambito de dama declinado, 3.Cc3rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 R - c e1d63fbffd042d09 D32esGambito de dama declinado, Defensa Tarraschrnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4&Q -  8c87f2e3dccfe5d9D33esGambito de dama declinado, Tarrasch, Sistema Schlechter-Rubinsteinr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6%P -  a06149a23c183de1D33esGambito de dama declinado, Tarrasch, Sistema Schlechter-Rubinsteinr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6O - e 76559684f673d0a7D34esGambito de dama declinado, Tarrasch, 7...Ae7r1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8N - i 5c49dae4afb967e2D35esGambito de dama declinado, variante del cambiornbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4M -  884e5029c24e8723#D36esGambito de dama declinado, cambio, línea posicional, 6.Dc2rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 6L - M 872d3612c75f06dfD37esGambito de dama declinado, 4.Cf3rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4K - c 4e6c5f148ca8cefdD38esGambito de dama declinado, variante Ragozinrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5J - s 5a3031106e1cfbd6D39esGambito de dama declinado, Ragozin, variante Viennarnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6I - s 883608223c2215355D39esGambito de dama declinado, Ragozin, variante Viennarnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5H - m 615ce7bc38180da2D40esGambito de dama declinado, Defensa Semi-Tarraschrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5G - i 6f767c719ad619bfD41esGambito de dama declinado, Semi-Tarrasch, 5.cdrnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5F - k a3553dce297deb377D42esGambito de dama declinado, Semi-Tarrasch, 7.Ad3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 7E - k f6589c6c10fd2944DD42esGambito de dama declinado, Semi-Tarrasch, 7.Ad3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 7D - i 1557dbfdb09fd564dD43esGambito de dama declinado, Defensa Semi-Eslavarnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5C + o 10bb5f9522be04fOD44esGambito de dama declinado, Semi-Eslava 5.Ag5 dxc4rnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6  j - V ! ~33P.h v - e 21aadc60c91291fcD07esGambito de dama declinado, variante Chigorinr1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3u )  3f0cc84b66ccc9D08esGambito de dama declinado, Contragambito Albin y Celada Laskerrnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3t - u 22a016b116cc4d58XD09esGambito de dama declinado, Contragambito Albin, 5.g3r1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5s - _ 183de96daf43e744DD10esGambito de dama declinado, Defensa Eslavarnbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3r - ] c359059bc7a58679yD11esGambito de dama declinado, Eslava, 3.Cf3rnbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3q - c b6831a52f9e546c6D12esGambito de dama declinado, Eslava, 4.e3 Af5rn1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5p - y e5ed05ea68fbde48HD13esGambito de dama declinado, Eslava, variante del cambiornbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5o - y 969daaa3c891d3f2D13esGambito de dama declinado, Eslava, variante del cambiornbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4'n -  edda4aa5950d1a7c|D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5r2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 6 7'm -  6ec3232b22e813f1D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5r1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 6&l -  b597c5aabb88f992D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5r1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 6$k -  1e7a1d48aa195c91D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5rnbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 5"j -  c51ef1bec2ff3dacD14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5rnbqkb1r/pp2pppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 5i -  9ef0c54b6f057c3a:D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5rnbqkbnr/pp2pppp/8/3p4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4h -  6567dde9ade7fee3D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5rnbqkbnr/pp2pppp/8/3p4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4 g - ] 632029cca8bd45366D15esGambito de dama declinado, Eslava, 4.Cc3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4f -  daef6e1297107e1bD16esGambito de dama declinado, Eslava Aceptada, variante Alapinrnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5e - m 59f6079c20f57796D17esGambito de dama declinado, Eslava, Defensa Checarn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6d - w f4db452e04aaff322D18esGambito de dama declinado, Eslava, variante Holandesarn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6c - w d1f9164e821838e3D19esGambito de dama declinado, Eslava, variante Holandesarn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8b - w af8c6d7afeebe3f3D19esGambito de dama declinado, Eslava, variante Holandesarn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8a - w 66cd047cb51c2bd1D19esGambito de dama declinado, Eslava, variante Holandesarn1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7` - w 82acb71f1c886f60`D19esGambito de dama declinado, Eslava, variante Holandesarn1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7s_ - = 58413db08abdda1cD20esGambito de dama aceptadornbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3|^ - K 8325d146e25bbb21!D21esGambito de dama aceptado, 3.Cf3rnbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 e; f  fQ>|wpey + ? fb67a1d34a70278xC86esEspañola, Ataque Worrallr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 6  - W 24be6dd52f33bb85C87esEspañola, cerrada, variante Averbachr1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 - W 1d04fbb4fd4bf2e8C87esEspañola, cerrada, variante Averbachr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6v - 1 2dbc8cedfb46a6377C88esEspañola, cerradar1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7v - 1 7d0091a166e64fd5C88esEspañola, cerradar1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 - M d4a4bbd662bb0e7c|C89esEspañola, Contraataque Marshallr1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 9 - M 51ce99c2fe6f405aZC89esEspañola, Contraataque Marshallr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 8 - G 68740fa32c1709377C90esEspañola, cerrada (con...d6)r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 1 9 - G 62dce214f94ee0dcC90esEspañola, cerrada (con...d6)r1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b kq - 0 8} - = ad4120093dde2475uC91esEspañola, cerrada, 9.d4r1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 9 - = 8087d21deeb4c0c5C92esEspañola, cerrada, 9.h3r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 b - - 0 9  - S 1270997b796089d0C93esEspañola, cerrada, Defensa Smyslovr1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10  - Q 2b6a0affff2565c6C94esEspañola, cerrada, Defensa Breyerrnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 - O ee5f2555eeec4884C95esEspañola, cerrada, Breyer, 10.d4rnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10 - C 25a99e6fdada2343CC96esEspañola, cerrada, 8...Ca5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10 - C d590f8e8438862cfC96esEspañola, cerrada, 8...Ca5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10 ) U f25f4a581f4a7d}C97esEspañola, cerrada, Defensa Chigorinr1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12  + Y c8bcddd6fde4047GC98esEspañola, cerrada, Chigorin, 12...Cc6r1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13 - Y 599ce728c2e2e24dMC98esEspañola, cerrada, Chigorin, 12...Cc6r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12  - [ aa348851dbbe87adC99esEspañola, cerrada, Chigorin, 12...c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13 ~ + [ 6825d1dbf168b8bC99esEspañola, cerrada, Chigorin, 12...c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 134} + 9 6649ba69b8c9ff8D00esApertura de peón de dama (incluyendo Gambito Blackmar-Diemer, Celada Halosar y otras)rnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2r| - - 6047e0c7441e877fD01esApertura Veresovrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 1 3!{ -  dd007750f36afec5D02esApertura Grünfeld invertida (Apertura de peón de dama, 2. Cf3)rnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2z - O 40b41493ee1a649bD03esAtaque Torre, variante Tartakowerrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3{y - ? 2bc301177acf37f7D04esApertura de peón de damarnbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3+x -  5db4f32662eda7a5D05esApertura de peón de dama, variante Zukertort (incluyendo Sistema Colle)rnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4@w - O 8a470482d88334ffD06esGambito de dama declinado (incluyendo la Defensa Báltica, Defensa Marshall y Defensa Simétrica)rnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 hY Q , 4  TG1a"( - - W 5732af0171663df6C66esEspañola, Defensa Berlín, 4.O-O, d6r1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5, - e d33f7739a5c9d388C67esEspañola, Defensa Berlín, variante abiertar1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5+ - I c8cbbdb43361c6faC68esEspañola, variante del cambior1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4* - W 806ee4d7d6b08795C69esEspañola, variante del cambio, 5.O-Or1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5l) -  a8e7c91161416febC70esEspañolar1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 4*( -  915d5f70b3392686C71esEspañola, Defensa Steinitz moderna incluyendo Celada del Arca de Noér1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5 ' - _ ef282444cfcafd96C72esEspañola, Defensa Steinitz moderna 5.0-0r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5& + w 8c24cc14dccc3f6C73esEspañola, Defensa Steinitz moderna, variante Richterr1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6% - w cdf7636b5c05eeb4C73esEspañola, Defensa Steinitz moderna, variante Richterr1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6$ + w 9a70d7f4e3e0a9eC73esEspañola, Defensa Steinitz moderna, variante Richterr1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5# - S e787a7e863492900C74esEspañola, Defensa Steinitz modernar1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5" + S 54659bab913f9311C75esEspañola, Defensa Steinitz modernar2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6*! -  29c7254bd35546388C76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein)r2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7* -  cb06db19090f9609 C76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein)r1bqkbnr/1pp2p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6* +  e33f4b318c6bb4bKC76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein)r1bqkbnr/1pp2p1p/p1np2p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6+ -  378962d2cabef226&C76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein)r1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 5+ +  68a2c913ec88b0c C76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein)r1bqkbnr/1ppp1p1p/p1n3p1/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5| - ? 6bf3afeb31bc0265eC77esEspañola, Defensa Morphyr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5} - ? f309fde4ccbb2e7d}C77esEspañola, Defensa Morphyr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5s - - 8d7c86d0b048f56dmC78esEspañola, 5.O-Or1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5 - s b4c610b16230bc00C79esEspañola, Defensa Steinitz diferida (Defensa Rusa)r1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 - W 30cbc889b69f527e~C80esEspañola, Defensa abierta (Tarrasch)r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 - O 1e0f50da334bf2399C81esEspañola, abierta, Ataque Howellr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 b kq - 2 9{ - = fed32760ad7fa63b;C82esEspañola, abierta, 9.c3r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 b kq - 0 9  - U ea1f548f67d40aaaC83esEspañola, abierta, Defensa clásicar2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10} - A 99b0f53f7ae359fcC84esEspañola, Defensa cerradar1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6 + q 14aa73087e475e4C85esEspañola, variante del cambio doblemente diferidor1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6 aO L H $ ! 964\@8XG - { d3207fec0612d89dC40esApertura de caballo (incluyendo defensa Gunderam, defensa Greco, defensa Damiano , gambito elefante, y gambito letón.)rnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2qF - - ea9ae98dd46a91f0C41esDefensa Philidorrnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 E - a 88ce4b19abe8990b C42esDefensa Petrov, incluyendo Celada Marshallrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 D - ] 4dfb64b3ba21b449IC43esDefensa Petrov, Ataque Moderno(Steinitz)rnbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3C - M 78cda70e17837d9eC44esApertura de peón de rey (incluyendo Apertura Ponziani, Apertura húngara invertida, Gambito irlandés, Apertura Konstantinopolsky y parte de Apertura escocesa)r1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3oB - / 4112df7bd300d6e7C45esApertura escocesar1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4$A -  835abfacd561ff47GC46esApertura de los tres caballos incluyendo Gambito Müller-Schulzer1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3@ - q 1d81a4f369529393C47esApertura de los cuatro caballos, variante escocesar1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4? - s eb6a5af61d0f2d52RC48esApertura de los cuatro caballos, variante españolar1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4> - o 222b33f056f8e570pC49esApertura de los cuatro caballos, Doble Ruy Lópezr1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5}= - A 1b7e13263fc0ab388C50esApertura de peón de rey (incluyendo Gambito Blackburne Shilling, Defensa Húngara, Gambito Italiano, Celada Légal, Gambito Rousseau y Giuoco Pianissimo)r1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3s< - ' 1c9622d153442d9fC51esGambito Evansr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4; - S 768c3ac4890df01bC52esGambito Evans con 4...Axb4 5.c3 Aa5r1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6r: - % c0b9afe525824e3d=C53esGiuoco Pianor1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4n9 - % 69aa6b7439623adaC54esGiuoco Pianor1bqk2r/pppp1ppp/2n2n2/2b5/2BPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 68 - C 409027d3923aeaaeC55esDefensa de los dos caballosr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4z7 - C dd1937963dacaffaC56esDefensa de los dos caballosr1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 66 -  1642c6063bf6120a C57esDefensa de los dos caballos, incluyendo Ataque Fried Liverr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4|5 - C e1e0c4aad071bc20 C58esDefensa de los dos caballosr1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6z4 - C 26d4332e603fe217C59esDefensa de los dos caballosr1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R w KQkq - 0 93 - K 4b1376a17217ee1dC60esApertura española (Ruy López)r1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3y2 - ; 9c6e1a40cc53aebcC61esEspañola, Defensa Birdr1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 41 - K 72a9e0c0a06fa770pC62esEspañola, Defensa Old Steinitzr1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 40 - G df7c1038cc9fc3c3C63esEspañola, Defensa Schliemannr1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4/ - U e60e32fab825049eC64esEspañola, Defensa clásica (Cordel)r1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4. - w 10fd4254dfedaf8bC65esEspañola, Defensa Berlín incluyendo Celada Mortimerr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 q@7 ` W 0 ) &.qc - Y 86c2157be13bf85b[C15esFrancesa, variante Winawer (Nimzovich)rnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4b - Y e7bb0386e525de3f?C16esFrancesa, Winawer, variante del avancernbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4a + Y 1cad2281a62d542BC17esFrancesa, Winawer, variante del avancernbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5` - Y a0baf239e3cae648HC18esFrancesa, Winawer, variante del avancernbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 6_ - Y eb6f98084e960908C18esFrancesa, Winawer, variante del avancernbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 6^ - Q 9ef54e8458436df5C19esFrancesa, Winawer, avance, 6...Ce7rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7[] +  844931a6ef4b9a0C20esApertura de peón de rey (incluye Apertura Alapín, Apertura López, Apertura Napoleón, Apertura portuguesa y Ataque Parham)rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2 \ - k 560fb632bb4680f7C21esApertura del centro (incluyendo Gambito danés)rnbqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3q[ - 3 805579149e46cac9C22esApertura del centror1bqkbnr/pppp1ppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR w KQkq - 1 4pZ - / 6bf7273246b76f06C23esApertura de alfilrnbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2Y - O 301913c7eb4d2e90C24esApertura de alfil, defensa Berlinrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3oX - - f3d38bb8ac163b79yC25esApertura vienesarnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2W - S a83dbf4d01ec7aefC26esApertura vienesa, Variante Falkbeerrnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3V - k 7639453c2f780b5aZC27esApertura vienesa, Variante Frankenstein-Dracularnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4uU - - 6063d387383e094aJC28esApertura vienesar1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4tT - - 3b8de77295c448dcC28esApertura vienesar1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3"S -  d041e05484a90940@C29esGambito vienés, Variante Kaufmann incluyendo Trampa Würzburgerrnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4kR - ) f552ee1777658429)C30esGambito de reyrnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2Q - q 7038cc03ebb1ca0fC31esGambito de rey no aceptado, contragambito Falkbeerrnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3P - g d4c5b462704c058dC32esGambito de rey no aceptado, Falkbeer, 5. dxe4rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR b KQkq - 2 5 O - g 8dab0c00eab1adbdC32esGambito de rey no aceptado, Falkbeer, 5. dxe4rnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 5sN - ; 1cd8d48946aa83fdC33esGambito de rey aceptadornbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3M - y c7bc387f2e4ce2c0C34esGambito de rey aceptado, incluyendo la Defensa Fischerrnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 3L - c d3704b90e4e74e51QC35esGambito de rey aceptado, defensa Cunninghamrnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4,K - % 42d61a6bb298ace6C36esGambito de rey aceptado, defensa Abbazia (defensa clásica, defensa moderna)rnbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4 J - [ bc68d000781a9f93C37esGambito de rey aceptado, gambito Quaadernbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4wI - ; 94f0413c69fc0046FC38esGambito de rey aceptadornbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 5;H - A db5c548b11c764344C39esGambito de rey aceptado, gambito Allagier y gambito Kiesertisky incluyendo el Gambito Ricernbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4 e  k Z  }gdRM9e - m 25449e4ead2b57baB91esSiciliana, Najdorf, variante Zagreb (Fianchetto)rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6 - m 7a22a6f64cd9c521!B92esSiciliana, Najdorf, variante Zagreb (Fianchetto)rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6y~ - = f4b45802546db20b B93esSiciliana, Najdorf, 6.f4rnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6{} - ? cff87239fd76544aJB94esSiciliana, Najdorf, 6.Ag5rnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6{| - A b98f8008e554c418B95esSiciliana, Najdorf, 6...e6rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7z{ - = 4499fd05fcc5f991B96esSiciliana, Najdorf, 7.f4rnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R b KQkq - 0 7'z -  83660352368e2f4bKB97esSiciliana, Najdorf, 7...Db6 incluyendo variante del peón envenenadornb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8{y - C 50558eea366e5500B98esSiciliana, Najdorf, 7...Ae7rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8x - e e7a6f486c5d2aeeeB99esSiciliana, Najdorf, 7...Ae7 línea principalr1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 10w - e d4458fdb257a4322"B99esSiciliana, Najdorf, 7...Ae7 línea principalrnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9nv - - f44b6961e533d1c4C00esDefensa francesarnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2 u - k 93cb6e92b241f0a6C01esFrancesa, variante del cambio, Defensa Kingstonrnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3|t - G d56d72226c3094c4C02esFrancesa, variante del avancernbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3rs - 1 ed7adcbdf2d31a90C03esFrancesa, Tarraschrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3r - U c61ddc5c265e9f388C04esFrancesa, Tarrasch, variante Guimardr1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5q - U 9df3e8a98ba4deaeC04esFrancesa, Tarrasch, variante Guimardr1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4p - U b694e8485f295b06C05esFrancesa, Tarrasch, variante cerradarnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 4o - y a7ed29d3c0aa7f02C06esFrancesa, Tarrasch, variante cerrada, línea principalr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R b KQkq - 0 8n + y b5bfc9fa4027324$C06esFrancesa, Tarrasch, variante cerrada, línea principalr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 8m - y 544546aad9f61ae2C06esFrancesa, Tarrasch, variante cerrada, línea principalr1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7l + U b0b0d130d9411edC07esFrancesa, Tarrasch, variante abiertarnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 0 4k - ] 13c0de9acd5e9320 C08esFrancesa, Tarrasch, abierta, 4.exd5 exd5rnbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5j - y 6349ea8eb429571eC09esFrancesa, Tarrasch, variante abierta, línea principalr1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6zi - A 4f837c7daacc3079yC10esFrancesa, variante Paulsenrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3rh - - 146d4888073671efC11esDefensa francesarnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4g - I 1b7676b8fc4b6205C12esFrancesa, variante MacCutcheonrnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5~f - C c6fb6c517d1706b6C13esFrancesa, variante clásicarnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5{e - C 2d401dd965fe75deC14esFrancesa, variante clásicarnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7{d - C cd80c33c58adf2bbC14esFrancesa, variante clásicarnbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6 r   K W=2]3r - S f1dd39e82b31641cB73esSiciliana, Dragón, clásica, 8.O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7 - S c994f44803272ea0B74esSiciliana, Dragón, clásica, 9.Cb3r1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 9 - U 9fe4e7cc0be4da40@B75esSiciliana, Dragón, ataque Yugoslavornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7 - g 954c0a7bdebd33abB76esSiciliana, Dragón, ataque Yugoslavo, 7...O-Ornbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8  - c 750a293e26d69faeB77esSiciliana, Dragón, ataque Yugoslavo, 9.Ac4r1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9 - m afe6924fafae4007B78esSiciliana, Dragón, ataque Yugoslavo, 10.O-O-O]]r2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10 - g 8869b3903cc79859YB79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]r1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R b - - 4 12 - g 416da3b2b7e1c8bdB79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]r1r3k1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R w - - 3 12 - g ea369b3dade318f6B79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R b - - 2 11 - g d21bde1efec1176enB79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/R3K2R w KQ - 1 11 + g b684b4557b336e1B79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]r2q1rk1/pp1bppbp/2np1np1/8/2BNP2P/2N1BP2/PPPQ2P1/R3K2R b KQ - 0 10 - M ad2226cdb2fee70c B80esSiciliana, variante Scheveningenrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 + W e6f271b5a8b0a11B81esSiciliana, Scheveningen, ataque Keresrnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6} - G 50345bc0ab6fda85B82esSiciliana, Scheveningen, 6.f4rnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6~ - I dea2a534b3dbadafB83esSiciliana, Scheveningen, 6.Ae2rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6 + u c5554c754fb5573sB84esSiciliana, Scheveningen (Paulsen), variante clásicarnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7" -  22c4b53d4c4359e8B85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6r1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w kq - 4 9! -  89296ddf5dd2fcebB85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6rnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b kq - 3 8" -  f75c16eb212127fbB85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6rnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R w KQkq - 2 8! -  f14329ca4d6a68faB85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6rnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R b KQkq - 1 7 -  82c3aa334c4f2259YB85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6rnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 7w - ; ce9192e59abd31aaB86esSiciliana, ataque Sozinrnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6x - ; b56619216d1624afB87esSozin con ...a6 y ...b5rnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 8x - ; d5627334f6bb9992B87esSozin con ...a6 y ...b5rnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7w - ; 1c6663167d9dc976vB87esSozin con ...a6 y ...b5rnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7 - U 657c4a078b2c94a9B88esSiciliana, Sozin, variante Leonhardtr1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7x - ; 1674f1eb0a168f27'B89esSiciliana, Sozin, 7.Ae3r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 1 7s + 1 9a2250f4dfc8f82B90esSiciliana, Najdorfrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 yg Z / 2 :SzZM,i6 -  db55d4fcaadc775e^B56esSicilianarnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5$5 -  130bb836930e04fbB57esSiciliana, Sozin (no Scheveningen) incluyendo Trampa Magnus Smithr1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6t4 + 3 3388fe7ba6898feB58esSiciliana, clásicar1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 63 - Y 1d31bf80389aa602B59esSiciliana, variante Boleslavsky, 7.Cb3r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7|2 - ? b6e25b280bc70995B60esSiciliana, Richter-Rauzerr1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 61 - o 7c3beaf510240604B61esSiciliana, Richter-Rauzer, variante Larsen, 7.Dd2r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 3 70 - O c095a91913e599c7B62esSiciliana, Richter-Rauzer, 6...e6r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7 / - ] e88de696d25c4667gB63esSiciliana, Richter-Rauzer, ataque Rauzerr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 1 7 . -  33d240e0871d310c B64esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9!- -  cec43ded9e8c0c85B64esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9 , -  c46cd05a4bd5e56enB64esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7, 9.f4r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 8%+ -  9eb1c566eb2c084fOB65esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7 , 9...Cxd4r1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10* - m 3a7a1765357cbebbB66esSiciliana, Richter-Rauzer, ataque Rauzer, 7...a6r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8$) -  e096ac14bc046112B67esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 8...Ad7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9"( +  2575246665eb123#B67esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 8...Ad7r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8#' +  94ca2f66f3ef00a B68esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 9...Ae7r2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10%& -  1d80d119a5955c9bB68esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 9...Ae7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 9#% -  b2105b3eed55ab18B69esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 11.Axf6r2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 11&$ -  172f52ef364bf5f8B69esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 11.Axf6r2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 11&# -  772b38faade648c5B69esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 11.Axf6r2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10|" - C 32e187a7d153e515B70esSiciliana, variante Dragónrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6! - Y cff7faaac8c2d89cB71esSiciliana, Dragón, variante Levenfishrnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6| - ? 41e93c4b5069fe9bB72esSiciliana, Dragón, 6.Ae3rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 - S 574d21d2c7690181B73esSiciliana, Dragón, clásica, 8.O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8 - S 24459a3e46531a0fB73esSiciliana, Dragón, clásica, 8.O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 4 8 - S 8fa842dc57c2bf0c B73esSiciliana, Dragón, clásica, 8.O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7 qy {  y u @RW#R )  b1fb5640840ff9B35esDefensa siciliana, fianchetto acelerado, variante moderna con Ac4r1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7$Q -  63024f7e68c7d95f_B35esDefensa siciliana, fianchetto acelerado, variante moderna con Ac4r1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7%P -  38ec7b8bc53d98c9B35esDefensa siciliana, fianchetto acelerado, variante moderna con Ac4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6#O -  4be4c06744078347GB35esDefensa siciliana, fianchetto acelerado, variante moderna con Ac4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 6N -  8cec7a573ead61333B36esDefensa siciliana, fianchetto acelerado, variante Maróczyr1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5#M -  3c5047e1c5eaaa99B37esDefensa siciliana, fianchetto acelerado, variante Maroczy, 5...Ag7r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6"L -  4f58fc0d44d0b117B38esDefensa siciliana, fianchetto acelerado, variante Maroczy, 6.Ae3r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 6K - } 72028b3c2682e3344B39esDefensa siciliana, fianchetto acelerado, variante Breyerr1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 8J - } ef21d05a2bc87258XB39esDefensa siciliana, fianchetto acelerado, variante Breyerr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 7I - } 14b6c8f8e92af081B39esDefensa siciliana, fianchetto acelerado, variante Breyerr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7sH - / c95e54397292bb84B40esDefensa sicilianarnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3vG - ; e6166d08e8be95f2B41esSiciliana, variante Kanrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5uF - 7 b31bccaad13e5781B42esSiciliana, Kan, 5.Ad3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 5uE - 7 1d8175aa2a5c172b+B43esSiciliana, Kan, 5.Cc3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5pD - / 9f0c44191e0fc82d-B44esDefensa sicilianar1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5~C - E 649b5cbbdced4af4B45esSiciliana, variante Taimanovr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5~B - E b66cad483bcdb228(B46esSiciliana, variante Taimanovr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 A - ] 6284639ab0a605f5B47esSiciliana, variante Taimanov (Bastrikov)r1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6~@ - E 118cd876319c1e7b{B48esSiciliana, variante Taimanovr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6? - E b0fbaa7cd799ac04B49esSiciliana, variante Taimanovr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7j> -  86933069b8c862bbB50esSicilianarnbqkbnr/pp2pppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3= - M b54de1c6dd5cf1388B51esSiciliana, ataque Canal-Sokolskyrnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3 < - _ 578c1f9407062109 B52esSiciliana, ataque Canal-Sokolsky, 3...Ad7rn1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4{; - G 610fb232e064c902B53esSiciliana, variante Chekhoverrnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4g: -  9298abf0be4b265aZB54esSicilianarnbqkbnr/pp2pp1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5e9 -  7b2cf8abc5c4b411B54esSicilianarnbqkbnr/pp2pppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 8 - _ f7d5f38a3e857143CB55esSiciliana, Prins variation, Venice attackrnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6 7 - _ c40b22255b11e2c0B55esSiciliana, Prins variation, Venice attackrnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6 \Q 5 ( 0 : L  # p - W ec1ab16142d11580B08esPirc, sistema clásico (dos caballos)rnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4yo - ; ca68209a33a649344B09esPirc, ataque austríacornbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4nn - / 104676bf8ad1922d-B10esDefensa Caro-Kannrnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2m - M b70c6acdfb843105B11esCaro-Kann, dos caballos, 3...Ag4rn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 2 4nl - / d57359159b18bf6foB12esDefensa Caro-Kannrnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2{k - I 77c6714cdda3b34fOB13esCaro-Kann, variante del cambiornbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3j - ] 5e9b9f4749fc46efB14esCaro-Kann, atque Panov-Botvinnik, 5...e6rnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6ri - / ab8e63a3c52e7390B15esDefensa Caro-Kannrnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3h - U 3ecf958145a4756clB16esCaro-Kann, variante Bronstein-Larsenrnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6zg - E fa25b904ac89bf9bB17esCaro-Kann, variante Steinitzr1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5{f - E 4adfabd7fbc45bdaB18esCaro-Kann, variante clásicarn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5}e - E 41ae97c7b9f29a70pB19esCaro-Kann, clásica, 7...Cd7r2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R w KQkq - 2 8~d - E 724dec9a595a77bcB19esCaro-Kann, clásica, 7...Cd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7}c - E a929006c31bc1681B19esCaro-Kann, clásica, 7...Cd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7ob - / 644d4afe02564aebB20esDefensa sicilianarnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 21a - 1 a1786554139f67a9B21esSiciliana, ataque Grand Prix y Gambito Smith-Morra, incluyendo la Trampa Siberianarnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2` - _ 1297b266d226456dmB22esDefensa siciliana, variante Alapin (2.c3)rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2q_ - 1 9fda525cc0b4c8322B23esSiciliana, cerradarnbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2u^ - 1 18d131ff31f2b509 B24esSiciliana, cerradar1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3w] - 1 633729db6a3fc628(B25esSiciliana, cerradar1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6w\ - 1 5a8dbfbab8478f45EB25esSiciliana, cerradar1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR b KQkq - 0 5[ - ? 103f9237eb05dda6B26esSiciliana, cerrada, 6.Ae3r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6qZ - / bf29a6086ab02bd6B27esDefensa sicilianarnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2{Y - C 6dde57fb8d90d30a B28esSiciliana, variante O'Kellyrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 X - ] e4c792fdc74a6a40@B29esSiciliana, variante Nimzovich-Rubinsteinrnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3sW - / 14c47eea7b218ed5B30esDefensa sicilianar1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 V -  ceaefc1e653a8f1dB31esSiciliana, ataque Nimzovich-Rossolimo (con ...g6, sin ...d6)r1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4sU - / d1f151406ae8a397B32esDefensa sicilianar1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3T - k b29582ddabd719e9B33esSiciliana, variante Sveshnikov (Lasker-Pelikan)r1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5S -  fb58fdd1bf4048edB34esDefensa siciliana, fianchetto acelerado, variante del cambior1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5 Gh h k B  zphauxG - q 57f5f1f9513e850b A88esHolandesa, Leningrad, varante principal con 7...c6rnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5 - q e749cc4faa794ea1A88esHolandesa, Leningrad, varante principal con 7...c6rnbqkb1r/ppppp2p/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4 - m c6cbae7fba907240@A89esHolandesa, Leningrad, variante principal con Cc6r1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8s - / 2fcd1ef7e23d8682A90esDefensa holandesarnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4s - / 9a3d3d8aafd05efbA90esDefensa holandesarnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4q - / c1d3097f022a1f6dmA90esDefensa holandesarnbqkbnr/pppp2pp/4p3/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3r - / 3b016d1828962a13A91esDefensa holandesarnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5r - / eacd6c599529a2c5A92esDefensa holandesarnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 5 6r - / e06581ee40704b2e.A92esDefensa holandesarnbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 4 5  - ] 9d74552daf835c9eA93esHolandesa, Stonewall, variante Botvinnikrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7 - E ad1d698452931e4cLA94esHolandesa, Stonewall con Aa3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8 + E f0eb8c2d8438f25%A94esHolandesa, Stonewall con Aa3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8 - E 783fc034c02c6691A95esHolandesa, Stonewall con Cc3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 - E 71c3d015160fa999A95esHolandesa, Stonewall con Cc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 - E aaa73ce37ee9c8a4A95esHolandesa, Stonewall con Cc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5~~ - E ad02810c3ba230b8A96esHolandesa, variante clásicarnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7} - Q ad1415bcca6297dcA97esHolandesa, variante Ilyin-Genevskyrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8| - Q bb0dbc699c1b0493A97esHolandesa, variante Ilyin-Genevskyrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3{ - Q 97eb07287cccdcabA97esHolandesa, variante Ilyin-Genevskyrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3z - a 1c0d67a1d8b4abb8A98esHolandesa, variante Ilyin-Genevsky con Dc2rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 8 y - _ 21b275e810effcb1A99esHolandesa, variante Ilyin-Genevsky con b3rnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8$x -  823c9b50fd114196B00esApertura de peón de rey sin 1... e5, 1... d5, 1... Cf6, 1... g6, 1... d6, 1... c6, 1... c5. (incluye Defensa Nimzowitsch, Defensa St. George, Defensa Owen, Defensa hipopótamo, Defensa Fred y otras)rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1w + c 756b94461c50fb0B01esDefensa escandinava (Contradefensa central)rnbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2lv - - d9d2afa550eb0000B02esDefensa Alekhinernbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2su - 7 b98e490b8bfe7e93B03esDefensa Alekhine 3.d4rnbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3t - Q 5b50339c316056c3B04esDefensa Alekhine, variante modernarnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4s - c 5983f9ae76e55829)B05esDefensa Alekhine, variante moderna, 4...Ag4rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5r - m 6b88c80b869ed3ddB06esDefensa Robatsch (Moderna), incluye Monkey's Bumrnbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2nq - % deca0ecc51b8e6f6B07esDefensa Pircrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3 Oi9  h M @ O8.( O* - w 53dae535c32cd7caA69esBenoni, ataque de los cuatro peones, línea principalrnbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 1 10) - w 4f8b2275f15c3248HA69esBenoni, ataque de los cuatro peones, línea principalrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9( - G 7b090c80c7f66723#A70esBenoni, clásica con e4 y Cf3rnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7y' + ; def66008c3b7741AA71esBenoni, clásica, 8.Bg5rnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 2 8}& - C b29d5f78e8cd0fc1A72esBenoni, clásica sint 9.O-Ornbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9y% - ; cce8244c943ed4d1A73esBenoni, clásica, 9.O-Ornbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9$ - K 75d6ab531e8df9c3A74esBenoni, clásica, 9...a6, 10.a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10# - K 1e1fd5bf731e2c0d A74esBenoni, clásica, 9...a6, 10.a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10 " - U 770561615908f729)A75esBenoni, clásica con...a6 y 10...Ag4rn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11{! - ? d0b9e30ca64e3153SA76esBenoni, clásica, 9...Te8rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10 + O d9b78eb64f30fd9A77esBenoni, clásica, 9...Te8, 10.Cd2rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10 - U 431bd37be20c9365eA78esBenoni, clásica con ...Te8 y ...Ca6r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 7 11{ - ; 2daa354a42c67c14A79esBenoni, clásica, 11.f3r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11m - / 1761df2bb9d0fc00A80esDefensa holandesarnbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2p - / 3b87646a590724388A81esDefensa holandesarnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2 -  d366d2635250410a A82esHolandesa, gambito Staunton, incluye también Defensa Baloghrnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 - i 77560104c9136646FA83esHolandesa, gambito Staunton, variante Stauntonrnbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4n - / 9b42400ffadf5707A84esDefensa holandesarnbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2{ - A 3b3b6c5895c79448HA85esHolandesa con 2.c4 y 3.Cc3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3{ - ? ec4acfbbb7f2cea9A86esHolandesa con 2.c4 y 3.g3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3  - ] dbd66edd12312e0c A87esHolandesa, Leningrad, variante principalrnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5 ) ] b2822b7ad74f311A87esHolandesa, Leningrad, variante principalrnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5  - ] b00ebf9d8190849bA87esHolandesa, Leningrad, variante principalrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4 - q ff5c9b72dcc104f8A88esHolandesa, Leningrad, varante principal con 7...c6rnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 - q 6d26769dab01d743CA88esHolandesa, Leningrad, varante principal con 7...c6rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7 - q 96b16e3f69e3559aA88esHolandesa, Leningrad, varante principal con 7...c6rnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7 - q af0bf85ebb9b1cf7A88esHolandesa, Leningrad, varante principal con 7...c6rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6 - q 2328677af894b7f0A88esHolandesa, Leningrad, varante principal con 7...c6rnbq1rk1/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 4 6 - q 29808acd2dcd5e1bA88esHolandesa, Leningrad, varante principal con 7...c6rnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 5 wn [ | Z 3 sjbVJSopH - ) bf0e01c82c76da29)A61esDefensa Benonirnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7oG - ) 56ba529357f94862bA61esDefensa Benonirnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6nF - ) ad2d4a31951bcabbA61esDefensa Benonirnbqkb1r/pp3ppp/3p1n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6nE - ) 9497dc50476383d6A61esDefensa Benonirnbqkb1r/pp1p1ppp/5n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5pD - ) 9abd479de5ad97cbA61esDefensa Benonirnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5C - K 9c0c49f5af52f829)A62esBenoni, variante del Fianchettornbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 4 9B - K 96a4a4427a0b11c2A62esBenoni, variante del Fianchettornbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 8A - K 4dc048b412ed70ffA62esBenoni, variante del Fianchettornbqk2r/pp3pbp/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 8@ - K fd7c7502e9aabb55UA62esBenoni, variante del Fianchettornbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 7? - K 488c567fa447632c,A62esBenoni, variante del Fianchettornbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 7> - K a1380524dfc8f167gA62esBenoni, variante del Fianchettornbqkb1r/pp3ppp/3p1n2/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 1 6= - K 5aaf1d861d2a73beA62esBenoni, variante del Fianchettornbqkb1r/pp3ppp/3p1n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 6< - K 63158be7cf523ad3A62esBenoni, variante del Fianchettornbqkb1r/pp1p1ppp/5n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 5; - K 6d3f102a6d9c2eceA62esBenoni, variante del Fianchettornbqkb1r/pp1p1ppp/5n2/2pp4/2P5/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 5: - K 522bc9ee7739ee05A62esBenoni, variante del Fianchettornbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 49 - K e8238abdee1f7858XA62esBenoni, variante del Fianchettornbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4 8 - _ d19a499c3309cef5A63esBenoni, variante del Fianchetto, 9...Cbd7r1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 6 10 7 - _ e27932c1d3a123399A63esBenoni, variante del Fianchetto, 9...Cbd7rnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 5 96 - _ a9d79a24497738efA64esBenoni, variante del Fianchetto, 11...Te8r1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 3 125 - _ b5865d647b07dd6dmA64esBenoni, variante del Fianchetto, 11...Te8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 2 114 - _ 68a4c683b9bae3e7A64esBenoni, variante del Fianchetto, 11...Te8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 w - - 1 11 3 - _ 5b47bdde59120e2b+A64esBenoni, variante del Fianchetto, 11...Te8rnbq1rk1/1p3pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 b - - 0 10 2 - _ 308ec3323481dbe5A64esBenoni, variante del Fianchetto, 11...Te8rnbq1rk1/1p3pbp/p2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10l1 - % 49d9b32dd49f9455UA65esBenoni, 6.e4rnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6k0 - % 8ddebe653f1f295f_A65esBenoni, 6.e4rnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6/ - S 5d7b9d7bb6813b97A66esBenoni, variante tormenta de peonesrnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 7. - S a06de076af10061eA66esBenoni, variante tormenta de peonesrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7{- - ? de197162285263beA67esBenoni, variante Taimanovrnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8, - S 3c0ba18cf07978ebA68esBenoni, ataque de los cuatro peonesrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 9+ - S 36a34c3b25209100A68esBenoni, ataque de los cuatro peonesrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8 / B a W G ET63>V.H!f - E 39cb28cb27ee11e4A38esApertura inglesa, simétricar1bqkb1r/pp1ppp1p/2n2np1/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5e - E d07f7b905c6183afA38esApertura inglesa, simétricar1bqkb1r/pp1ppppp/2n2n2/2p5/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4d - w 8d6f8f2929271d8eA39esApertura inglesa, simétrica, línea principal con d4r1bq1rk1/pp1pppbp/2n2np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 7ac -  830eb9b20758d1deA40esApertura de peón de dama (incluyendo Defensa inglesa, Gambito Englund, Defensa del caballo de dama, Defensa polaca y Defensa Keres)rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq - 0 1b - [ bab42fd3d52098b3A41esApertura de peón de dama, Defensa Wadernbqkbnr/ppp1pppp/3p4/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2a - { 500fcbf03f855586A42esDefensa moderna, sistema Averbakh también Defensa Wadernbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4p` - 1 657f681cf81fdaa3A43esOld Benoni defencernbqkbnr/pp1ppppp/8/2p5/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2p_ - 1 9a3e66dbf801f641AA44esOld Benoni defencernbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3v^ - ? d8e08d47aaa29048HA45esApertura de peón de damarnbqkb1r/pppppppp/5n2/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 1 2w] + ? 38461b1c244f175uA46esApertura de peón de damarnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 2w\ - 7 68ed28a13cc746eeA47esDefensa india de damarnbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3[ - S ea3032eab9cb633e>A48esIndia de rey, Defensa india de esternbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3Z - K c6d689ab591cbb06A49esIndia de rey, fianchetto sin c4rnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3Y - { 54c31263e9ad3b4fOA50esApertura de peón de dama, Tango de los caballos negrosrnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2{X - E debb1a297a48c379yA51esGambito Budapest no aceptadornbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3nW - - df05be0d7f37e565eA52esGambito Budapestrnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4tV - 7 6d7984023bd57222"A53esDefensa india antiguarnbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3U - Q 1c9694ea6ad208cdA54esIndia antigua, variante ucrainianarnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4T - K 30160e09091c39366A55esIndia antigua, línea principalr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5S - K eb72e2ff61fa580b A55esIndia antigua, línea principalr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5R - K 610aeab5f21fa03d=A55esIndia antigua, línea principalr1bqkb1r/pppnpppp/3p1n2/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4Q - K a50de7fd199f1d377A55esIndia antigua, línea principalr1bqkb1r/pppnpppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4mP - ) b2b2c3cd16ea30322A56esDefensa Benonirnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3lO - ' 68beea8b14611b52RA57esGambito Benkornbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4rN - 9 39a691df7150ed3e>A58esGambito Benko aceptadornbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5sM - 3 d1eda6f64269a376vA59esGambito Benko, 7.e4rn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7rL - 3 15eaabbea9e91e7c|A59esGambito Benko, 7.e4rn1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7qK - 3 2c503ddf7b915711A59esGambito Benko, 7.e4rn1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6pJ - 3 d7c7257db973d5c8A59esGambito Benko, 7.e4rn1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6nI - ) 7ecd72af97ee363d=A60esDefensa Benonirnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4 xl ` \ V S QT7X7}" - a 3e600bbc3663b2f1A19esInglesa, Mikenas-Carls, variante Sicilianarnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4n - - 40600176c67bafadA20esApertura inglesarnbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2o - - bbf719d404992d74tA21esApertura inglesarnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2r - - e0192d21a9636ce2A22esApertura inglesarnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3 - m 5e857b8f3e746761aA23esApertura inglesa, sistema Bremen, variante Keresrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4~ - c 254bc53b323b2691A24esApertura inglesa, sistema Bremen con 3...g6rnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4} - W 101ac13615088877wA25esApertura inglesa, Siciliana invertidar1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3| - O 471a6253ae12236enA26esApertura inglesa, sistema cerrador1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR w KQkq - 0 6{ - i cb7e2dc07deee94aJA27esApertura inglesa, sistema de los tres caballosr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3z - m 90901935d014a8dcA28esApertura inglesa, sistema de los cuatro caballosr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4y - m 3b7dc1d7c1850ddfA28esApertura inglesa, sistema de los cuatro caballosrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3&x -  bc76a27430c370e4A29esApertura inglesa, cuatro caballos, fianchetto en flanco de reyr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4w - W 2c69d892aad95ce6A30esApertura inglesa, variante simétricarnbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2v - k 69d62f3b7e0c510fA31esApertura inglesa, simétrica, formación Benonirnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3{u - E 272b3a620aeb3ab5A32esApertura inglesa, simétricarnbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5zt - E 515cc85312c9aae7A32esApertura inglesa, simétricarnbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4|s - E 36c8950e03f838c9A32esApertura inglesa, simétricarnbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4~r - E 7751fa22d9981d6foA33esApertura inglesa, simétricar1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 0 6|q + E 1260813c1ba8d3d=A33esApertura inglesa, simétricar1bqkb1r/pp1ppppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 5p - E 66b2554ed08b1f13A33esApertura inglesa, simétricar1bqkb1r/pp1ppppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5o - E 39acef7bad7f76d5A33esApertura inglesa, simétricar1bqkb1r/pp1ppppp/2n2n2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4{n - E d7fec030683bde3f?A34esApertura inglesa, simétricarnbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2}m - E 7c1318d279aa7b3cC40huLitvánPolerio változatrnbqkbnr/ppp3pp/8/3pN3/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 0 5uV -/58acf1a07016b918C40huLitvánPolerio változatrnbqkbnr/pppp2pp/8/4N3/2B1p3/8/PPPP1PPP/RNBQK2R b KQkq - 0 4wU -/ e6ef055bd4081c2e.C40huLitvánPolerio változatrnbqkbnr/pppp2pp/8/4p3/2B1p3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4tyO + 3 342c555ddecf88eC40huLitváncorkscrew ellencselrnbqkb1r/pppp2pp/5n2/4N3/2B1p3/8/PPPP1PPP/RNBQK2R w KQkq - 1 5G - )/ 5b4bdd9dc26f0c7c|C29huBécsi játékPaulsen támadásrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N2Q2/PPPP2PP/R1B1KBNR b KQkq - 1 5~F -)/e169a6aeee125ac7C29huBécsi játékPaulsen támadásrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 5E -)/ 5cdee8f7e8c5fdd4C29huBécsi játékPaulsen támadásrnbqkb1r/ppp2ppp/5n2/3pP3/4P3/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 4 hl> - ) 4fcd657baa82e113C29huBécsi játékrnbqkb1r/ppp2ppp/8/3pP3/4n3/2NP4/PPP3PP/R1BQKBNR b KQkq - 0 5u5 - /a4e04ae20fa23855UC21huDán cselCollijn véldelemrnb1kbnr/ppppqppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR w KQkq - 1 6u4 -/3f1f9592ce9e963f?C21huDán cselCollijn véldelemrnbqkbnr/pppp1ppp/8/8/2B1P3/8/PB3PPP/RN1QK1NR b KQkq - 0 5v3 -/e56b47b5cdadeafdC21huDán cselCollijn véldelemrnbqkbnr/pppp1ppp/8/8/2B1P3/8/Pp3PPP/RNBQK1NR w KQkq - 0 5w2 -/82b9547ce0e4c347GC21huDán cselCollijn véldelemrnbqkbnr/pppp1ppp/8/8/2B1P3/2p5/PP3PPP/RNBQK1NR b KQkq - 1 4v1 -/e10ae054c8a715e1C21huDán cselCollijn véldelemrnbqkbnr/pppp1ppp/8/8/4P3/2p5/PP3PPP/RNBQKBNR w KQkq - 0 4zy+ - 5ba75b786524ad819C21huDán cselSchlechter véldelemrnbqkbnr/ppp2ppp/8/3p4/2B1P3/8/PB3PPP/RN1QK1NR w KQkq - 0 6~! - )- 2ec139b74c5f976bkC29huBécsi játékBreyer változatrnbqk2r/ppp1bppp/8/3pP3/4n3/2N2N2/PPPP2PP/R1BQKB1R w KQkq - 2 6 -)- 3a0d4a5886f43bfaC29huBécsi játékBreyer változatrnbqkb1r/ppp2ppp/8/3pP3/4n3/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 5 - )5 1fc0f97e29f3dad0C29huBécsi játékBardeleben változatrnbqkb1r/ppp3pp/8/3pPp2/4n3/2N2Q2/PPPP2PP/R1B1KBNR w KQkq f6 0 6 - !? 130bb836930e04fbB57huSzicíliaiSzozin, nem Scheveningenir1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 4 6 - !? 70b80c1ebb4dd25d]B57huSzicíliaiSzozin, nem Scheveningenir1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6 xf ~    Hu 30y| -!- af7a3bdd95689764dB21huSzicíliaiAndreaschek cselrnbqkbnr/pp1p1ppp/8/4p3/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4w{ -!-25023397068d6f52RB21huSzicíliaiAndreaschek cselrnbqkbnr/pp1ppppp/8/8/3pP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3qv - Q 7ee52381c039b294C29huBécsi játék, Steinitz változatrnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2NP4/PPP3PP/R1BQKBNR b KQkq - 0 4 $fo -  a9157a831899c583A00huAmar cselrn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQK2R w KQkq - 0 5fn - 409f401d2956c257WA00huAmar cselrn1qkbnr/ppp2ppp/8/3pp3/5P2/6PB/PPPPP2P/RNBQK2R b KQkq - 0 4hm - 573cb5faab86d4b4A00huAmar cselrn1qkbnr/ppp2ppp/8/3pp3/5P2/6Pb/PPPPP2P/RNBQKB1R w KQkq - 0 4hl - f317a085a8c3d0e7A00huAmar cselrnbqkbnr/ppp2ppp/8/3pp3/5P2/6PN/PPPPP2P/RNBQKB1R b KQkq - 0 3ek + e01dd88b152ed6enA00huAmar cselrnbqkbnr/ppp2ppp/8/3pp3/8/6PN/PPPPPP1P/RNBQKB1R w KQkq - 0 3fj - 8479d5c222b71558XA00huAmar cselrnbqkbnr/ppp1pppp/8/3p4/8/6PN/PPPPPP1P/RNBQKB1R b KQkq - 0 2ei - a89f6e83c260cd60`A00huAmar cselrnbqkbnr/ppp1pppp/8/3p4/8/7N/PPPPPPPP/RNBQKB1R w KQkq - 0 2 jfyg - 5 53c5414494586345EA00huAmszterdam támadásr1bqkb1r/ppp2ppp/2np1n2/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR w KQkq - 1 5wf +5 82b75b139a222d3A00huAmszterdam támadásr1bqkbnr/ppp2ppp/2np4/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR b KQkq - 0 4xe -5 848d15e5e32f49beA00huAmszterdam támadásr1bqkbnr/ppp2ppp/2np4/4p3/2P5/2N1P3/PP1P1PPP/R1BQKBNR w KQkq - 2 4wd -5 2f60cd07f2beecbdA00huAmszterdam támadásrnbqkbnr/ppp2ppp/3p4/4p3/2P5/2N1P3/PP1P1PPP/R1BQKBNR b KQkq - 1 3tc -5 d4f7d5a5305c6e64dA00huAmszterdam támadásrnbqkbnr/ppp2ppp/3p4/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR w KQkq - 0 3sb -5 ed4d43c4e2242709 A00huAmszterdam támadásrnbqkbnr/pppp1ppp/8/4p3/2P5/4P3/PP1P1PPP/RNBQKBNR b KQkq - 0 2qa -5 616edce0a12b8c0eA00huAmszterdam támadásrnbqkbnr/pppp1ppp/8/4p3/8/4P3/PPPP1PPP/RNBQKBNR w KQkq - 0 2s_ - W 68ad55579f09812c,C21huCentrumjáték, Kieseritsky változatrnbqkbnr/p2p1ppp/8/1pp5/2BpP3/5N2/PPP2PPP/RNBQK2R w KQkq - 0 5^ +W 8a93f4204a43c11C21huCentrumjáték, Kieseritsky változatrnbqkbnr/pp1p1ppp/8/2p5/2BpP3/5N2/PPP2PPP/RNBQK2R b KQkq - 1 4] -W 6b1a8b6a2ce7eab7C21huCentrumjáték, Kieseritsky változatrnbqkbnr/pp1p1ppp/8/2p5/3pP3/5N2/PPP2PPP/RNBQKB1R w KQkq - 0 4\ -W 8d6b5ac4d3a0e1caC21huCentrumjáték, Kieseritsky változatrnbqkbnr/pppp1ppp/8/8/3pP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 3 ~vnf^VNF>6.&^>yrkd]VOHA:3,% .xqjc\UNG@92+$ F } v o h a Z S L E > 7 0 ) "    ~V y r k d ] V O H A : 3 , %      z s l e ^ W P I B ; 4 - &     | t l d \ T L D < 4 , $  vnN&  z s l e ^ W P I B ; 3 + #   yrkd]UME=5-% fzskc[SKC;64-& zsle^VNF>6/(! CHHcFTHRCLEG CJKHJFI~G{KYC>G;D-H*DKCtEWH4F.CJHHF|HzCtE?G2CJKJHJFIGKCmGjD\HYD.KCCC:CCGC`CrCCiC C\CCC~C~C}CwCqCqXCj-C_COCLCGnLJLFBL@L8zL7L5L4L.gL'L%L#sL LLLkL L L,LLKKzKKYK1KK#KPK~K~/KoKnKlKhKg^KcRKIXKEK7K6K-K*K)K)bKfKK KKJ{J}JUJiJ"JaJJpJJJQJSJ+J|JvJpJpJmoJlJkkJdJdJ` J[QJTJQJP6JNJMJCzJ4CJ YJ NJJ3JJIDIII-III|ZIxIsIrIiIgcIfIaI`I^I^IX!INIHTIBI;I;I:BI8I6I5I0I0HI+I"PIyII%I eI HcHH^H)HH`HHHHHdH=H]HH4HHH6H~H}H}H|H|HzHyHw^HuHtHj]HhH`)H_HZHZHYHT HMHCHBH=H9H0H HH HH&HHH AH}G2GGAGGG2GGuGGGGG~G{XGyRGtGrGeGaG_G]PGY/GXGV0GTGTGK8GHGFGF.G?DG7~G5G3G2G.G. G(eG%,GGG G GGGF]F#FFIFFFGFFFF}F}FzFueFsqFhEFcFaOF]1FVDFTgFT:FIF9F9F9EF8F(!F'[F F$FF F EE"EgEEEOEE}E}E}E} EzEiEb9E`E`E`pE]E\EXEV)EMIEMELXE?E?#E9YE9FE'E%E EE EDDDD3DLD~D~DzDyQDwDv#Ds!DnDjDiDfDeDSGDOZDNjDL(DH@DAD:D8D5%D4fD2QD.D+gD*D(D'D&D#$DDcDD D ~D D#C0CC J " - = ) FV!J!z e1 -  20d54eaa6b368f71qC21huDán cselrnbqkbnr/pppp1ppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 3j, - ) 2bb8a1f68fd76fcaC21huCentrumjátékrnbqkbnr/pppp1ppp/8/8/3QP3/8/PPP2PPP/RNB1KBNR b KQkq - 0 3v' - 7 24fcad5d90d923e5C40huLitván gambit, 3.Bc4rnbqkbnr/pppp2pp/8/4pp2/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3 u: -!-fe66df616e6b0e6foB21huSzicíliaiSmith-Morra cselrnbqkbnr/pp1ppppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3g6 - % ab19cb3fa2d7bd7e~C21huHalász-cselrnbqkbnr/pppp1ppp/8/8/3pPP2/8/PPP3PP/RNBQKBNR b KQkq - 0 3s" - /46765f911f851c04A00huGrobRomford ellencselrn1qkbnr/ppp1pppp/8/8/2Pp2b1/8/PP1PPPBP/RNBQK1NR w KQkq - 0 4gwt> -7 f5799cc16fa4ceecA00huVenezolana megnyitásrnbqkbnr/pp1ppppp/8/2p5/8/2NP4/PPP1PPPP/R1BQKBNR b KQkq - 1 2q= +7 eee8463ad464c355A00huVenezolana megnyitásrnbqkbnr/pp1ppppp/8/2p5/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 2tw; - !-88bc27f9be1b01e9B21huSzicíliaiSmith-Morra cselrnbqkbnr/pp1ppppp/8/8/3pP3/2P5/PP3PPP/RNBQKBNR b KQkq - 0 3y - 3a5bf6cbef7e2c157WC21huDán cselSoerensen véldelemrnbqkbnr/ppp2ppp/8/3p4/3pP3/2P5/PP3PPP/RNBQKBNR w KQkq - 0 4o - ) d041e05484a90940@C29huBécsi játékrnbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4o - ) 552bc240187d4766fC29huBécsi játékrnbqkb1r/pppp1ppp/5n2/4p3/4PP2/2N5/PPPP2PP/R1BQKBNR b KQkq - 0 3  - =) d5cd3a379fb30599C40huKirályhuszár ellencselMaroczy gambitrnbqk1nr/ppp2ppp/3b4/3Pp3/8/5N2/PPPP1PPP/RNBQKB1R w KQkq - 1 4 -=)719557b540a9d4bdC40huKirályhuszár ellencselMaroczy gambitrnbqkbnr/ppp2ppp/8/3Pp3/8/5N2/PPPP1PPP/RNBQKB1R b KQkq - 0 3 v? -7 5e9444237e356befA00huVenezolana megnyitásr1bqkbnr/pp1ppppp/2n5/2p5/8/2NP4/PPP1PPPP/R1BQKBNR w KQkq - 2 3u - + 52e1356c0d15f576vC40huLitvánFraser védelemr1bqkbnr/pppp2pp/2n5/4Np2/4P3/8/PPPP1PPP/RNBQKB1R w KQkq - 1 4s -+f90ced8e1c845075uC40huLitvánFraser védelemrnbqkbnr/pppp2pp/8/4Np2/4P3/8/PPPP1PPP/RNBQKB1R b KQkq - 0 3u + = 77096d4f3ea595f_A00huNovoszibirszk megnyitásr1bqkbnr/pp1ppppp/2n5/8/7Q/2N5/PPP1PPPP/R1B1KBNR b KQkq - 2 4x -= 17ac05ad62097b82A00huNovoszibirszk megnyitásr1bqkbnr/pp1ppppp/2n5/8/3Q4/2N5/PPP1PPPP/R1B1KBNR w KQkq - 1 4v -= bc41dd4f7398de81A00huNovoszibirszk megnyitásrnbqkbnr/pp1ppppp/8/8/3Q4/2N5/PPP1PPPP/R1B1KBNR b KQkq - 0 3v -= c1f6ca8b470931bcA00huNovoszibirszk megnyitásrnbqkbnr/pp1ppppp/8/8/3p4/2N5/PPP1PPPP/R1BQKBNR w KQkq - 0 3w -= 9ee870be3afd587azA00huNovoszibirszk megnyitásrnbqkbnr/pp1ppppp/8/2p5/3P4/2N5/PPP1PPPP/R1BQKBNR b KQkq - 0 2u -= 5bdd5f142b3475388A00huNovoszibirszk megnyitásrnbqkbnr/pp1ppppp/8/2p5/8/2N5/PPPPPPPP/R1BQKBNR w KQkq - 0 2w{} - !- d9a0c345451898e2B21huSzicíliaiAndreaschek cselrnbqkbnr/pp1p1ppp/8/4p3/3pP3/2P2N2/PP3PPP/RNBQKB1R b KQkq - 0 4 0A E [ Z r 0+$$AAAA[[[[r - ; dadfba6dd24e067e~A00huHammerschlag megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/5P2/PPPPPKPP/RNBQ1BNR b kq - 1 2u -; a2f2786325beebdbA00huHammerschlag megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/5P2/PPPPP1PP/RNBQKBNR w KQkq - 0 2&w{ - !5995b37f31bc77762bB21huSzicíliaiGrand Prix támadásrnbqkbnr/pp1ppppp/8/2p5/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2 x} - !-a1786554139f67a9B21huSzicíliaiSmith-Morra cselrnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2|z - '/a6e050cf2a640274tC20huKirálygyalogIndiai megnyitásrnbqkbnr/pppp1ppp/8/4p3/4P3/3P4/PPP2PPP/RNBQKBNR b KQkq - 0 2/w - '5c3d8a23c27b837e0C20huKirálygyalogMengarini megnyitásrnbqkbnr/pppp1ppp/8/4p3/4P3/P7/1PPP1PPP/RNBQKBNR b KQkq - 0 2t - '966f5752bce3e56d1C20huKirálygyalogKing's head megnyitásrnbqkbnr/pppp1ppp/8/4p3/4P3/5P2/PPPP2PP/RNBQKBNR b KQkq - 0 2|q - '/a849703c42999f3c Z e /Po&5W[[- + i b0d1503d0162a83E96huKirályindiai Ortodox, 7...Hbd7, fö változatr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 9, - i 788d96fad1336020 E96huKirályindiai Ortodox, 7...Hbd7, fö változatr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9H+ - S f64dd621d0625040@E97huKirályindiai, Ortodox, Aronyin-Tajmanov változat (Jugoszláv támadás / Mar del Plata-változat)r1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8* - k dfc12ba3297d16efE98huKirályindiai, Ortodox, Aronyin-Tajmanov, 9.He1r1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 9) - } dc58a8ad9af3ddb5E99huKirályindiai, Orthodox, Aronyin-Tajmanov, fö változatr1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 w - - 0 11( - } 4837ce34247bf06bkE99huKirályindiai, Orthodox, Aronyin-Tajmanov, fö változatr1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10|' - M eccee3b4b02790b8A00huLengyel (Szokolszkij) megnyitásrnbqkbnr/pppppppp/8/8/1P6/8/P1PPPPPP/RNBQKBNR b KQkq - 0 1m& - / 6add2d59f64624a4A00huBenkö-megnyitásrnbqkbnr/pppppppp/8/8/8/6P1/PPPPPP1P/RNBQKBNR b KQkq - 0 1j% - ) e57697cefee41181A00huGrob támadásrnbqkbnr/pppppppp/8/8/6P1/8/PPPPPP1P/RNBQKBNR b KQkq - 0 1k$ - 1 aec84ba6d432356enA00huClemenz megnyitásrnbqkbnr/pppppppp/8/8/8/7P/PPPPPPP1/RNBQKBNR b KQkq - 0 1h# - + 2df54c975eb48346FA00huAmar megnyitásrnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1l" - / bdac8ebad4737e45EA00huDunszt megnyitásrnbqkbnr/pppppppp/8/8/8/2N5/PPPPPPPP/R1BQKBNR b KQkq - 1 1m! - 3 8da7a73e5fdd72dcA00huAnderzen megnyitásrnbqkbnr/pppppppp/8/8/8/P7/1PPPPPPP/RNBQKBNR b KQkq - 0 1h - + 2df2e8f47b022952RA00huWare megnyitásrnbqkbnr/pppppppp/8/8/P7/8/1PPPPPPP/RNBQKBNR b KQkq - 0 1o - 5 30e16e80c6e1f31aA00huZaragóza megnyitásrnbqkbnr/pppppppp/8/8/8/2P5/PP1PPPPP/RNBQKBNR b KQkq - 0 1l - / e89f55cd52014748HA00huMieses megnyitásrnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR b KQkq - 0 1r - ; eb16d4aa32ce74388A00huVan't Kruijs megnyitásrnbqkbnr/pppppppp/8/8/8/4P3/PPPP1PPP/RNBQKBNR b KQkq - 0 1m - / 288a7029b65b13edA00huGedult megnyitásrnbqkbnr/pppppppp/8/8/8/5P2/PPPPP1PP/RNBQKBNR b KQkq - 0 1n - 5 da980a31bdae85e2A00huAnti-Borg megnyitásrnbqkbnr/pppppppp/8/8/7P/8/PPPPPPP1/RNBQKBNR b KQkq - 0 1i - - 41dd464bfbc3d352RA00huDurkin támadásrnbqkbnr/pppppppp/8/8/8/N7/PPPPPPPP/R1BQKBNR b KQkq - 1 1w - 36d427c500aa5fdc1A00huLengyelTuebingen változatrnbqkb1r/pppppppp/7n/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 1 2v - 17eb40e5bc7e74303A00huLengyelOutflank változatrnbqkbnr/pp1ppppp/2p5/8/1P6/8/P1PPPPPP/RNBQKBNR w KQkq - 0 2n - / 37d486f047968673sA00huDunszt megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/2N5/PPPPPPPP/R1BQKBNR w KQkq - 0 2n - / 62e75d87c1e4bf7e~A00huMieses megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 2r + 7 844931a6ef4b9a0C20huKirálygyalog-játékrnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2u - /13bc1c9e50d45bdafA00huBenkö-megnyitásfordított Aljehinrnbqkbnr/pppp1ppp/8/4p3/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 1 2 -/1e0a5251365a3dc92A00huBenkö-megnyitásfordított Aljehinrnbqkbnr/pppp1ppp/8/4p3/8/6P1/PPPPPP1P/RNBQKBNR w KQkq - 0 2s - 7 fc48b7d60eda08333A00huBattambang megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/P1N5/1PPPPPPP/R1BQKBNR b KQkq - 0 2l - + 3b297c9743d8a81aA00huCrab megnyitásrnbqkbnr/pppp1ppp/8/4p3/P6P/8/1PPPPPP1/RNBQKBNR b KQkq - 0 2k -+ a78ae0bee8e7d164dA00huCrab megnyitásrnbqkbnr/pppp1ppp/8/4p3/P7/8/1PPPPPPP/RNBQKBNR w KQkq - 0 2p - 3 3b89e5e55b19174eNA00huValencia megnyitásrnbqkbnr/pppp1ppp/8/4p3/8/3P4/PPPNPPPP/R1BQKBNR b KQkq - 1 2 {gM % 0 n K&o:*V{H - i 8fdfec465f928ad1E77huKirályindiai, négy gyalogos támadás, 6.Fe2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 6"G -  b2cad11ec833e091E78huKirályindiai, négy gyalogos támadás, Fe2-vel és Hf3-malrnbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7F - y 52a55578345da5f4E79huKirályindiai, négy gyalogos támadás, fö változatr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9E - y 21adee94b567be7azE79huKirályindiai, négy gyalogos támadás, fö változatr1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9D - y 8a403676a4f61b79yE79huKirályindiai, négy gyalogos támadás, fö változatrnbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8C - y edd46b2bb5c78957WE79huKirályindiai, négy gyalogos támadás, fö változatrnbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8B - Q 6550193432b5fb61aE80huKirályindiai, Sämisch-variációrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5A - M 6ff8f483e7ec128aE81huKirályindiai, Sämisch, 5...O-Ornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6@ - s 7799067f9855be9fE82huKirályindiai, Sämisch, dupla fianchetto változatrnbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7? - s 1cf04f6f66d60904E82huKirályindiai, Sämisch, dupla fianchetto változatrnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6> - M b71d978d7747ac07E83huKirályindiai, Sämisch, 6...Hc6r1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 7= - g c1f569de2fcb31efE84huKirályindiai, Sämisch, Panno, fö változat1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R w KQ - 2 9< - g 5956c23e79f58685E84huKirályindiai, Sämisch, Panno, fö változatr1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R b KQ - 1 8 ; - a 96884725f533f1322E85huKirályindiai, Sämisch, Ortodox változatrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7: - c 10564105aad82f77wE86huKirályindiai, Sämisch, Ortodox, 7.Hge2 c6rnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 89 - c 822caceadd18fcccE86huKirályindiai, Sämisch, Ortodox, 7.Hge2 c6rnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 7 8 - Y 2c8004766c15676foE87huKirályindiai, Sämisch, Ortodox, 7.d5rnbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7 7 - _ befae9991bd5b4d4E88huKirályindiai, Sämisch, Ortodox, 7.d5 c6rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 86 - i d92ead1f9394b490E89huKirályindiai, Sämisch, Ortodox fö változatrnbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 95 - i aa5e025633feb92a*E89huKirályindiai, Sämisch, Ortodox fö változatrnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 0 8w4 - 5 d08513f3fa99752d-E90huKirályindiai, 5.Hf3rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5v3 - 5 a9ad7dbd2ee5d665eE91huKirályindiai, 6.Fe2rnbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 62 - U 23d575f7bd002e53SE92huKirályindiai, klasszikus variációrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 71 - o aa3e4df9c48e55c2E93huKirályindiai, Petroszjan-rendszer, fö változatr1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 80 - O 5da00ec3c1f3f543CE94huKirályindiai, Ortodox variációrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7 / - [ eaf77b15a6f3b39bE95huKirályindiai, Ortodox, 7...Hbd7, 8.Be1r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 8. - i 8d17a0c2b38a2613E96huKirályindiai Ortodox, 7...Hbd7, fö változatr1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 10 @iT Y S ?  xO/Z&@d - } f6e6c21b95a4534fOE54huNimzoindiai védelem, 4.e3, Gligoric-rendszer 7...dc-velrnbq1rk1/pp3ppp/4pn2/2p5/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 8&c -  8cbf8d2d4a3fbd48HE55huNimzoindiai védelem, 4.e3, Gligoric-rendszer, Bronstein-variációr1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 9b - w 8f0d23cbd60b18afE56huNimzoindiai védelem, 4.e3, fö változat 7...Hc6-talr1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8a - q 2e7d03da2fa32ba5E58huNimzoindiai védelem, 4.e3, fö változat 8...Fxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 9` - q 65a869eb82ffc4e5E58huNimzoindiai védelem, 4.e3, fö változat 8...Fxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 9_ - q 449112ed9f4796efE58huNimzoindiai védelem, 4.e3, fö változat 8...Fxc3r1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8 ^ - _ b5c10e8342aec68dE59huNimzoindiai védelem, 4.e3, fö változatr1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1 b - - 0 10 ] - _ fc7b3ae87d9dc546FE59huNimzoindiai védelem, 4.e3, fö változatr1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10t\ - 9 bd7741389222a904E60huKirályindiai védelemrnbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3~[ - G 46e0599a50c02bddE61huKirályindiai védelem, 3.Hc3rnbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3Z - S 3864a5faf1ce101fE62huKirályindiai, Fianchetto-változatrnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5Y - c 80533915e338a742BE63huKirályindiai, Fianchetto, Panno-variációr1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8X - i 614dba9e963d2af0E64huKirályindiai, Fianchetto, jugoszláv rendszerrnbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7W - M 1f38c1aaeacef1e0E65huKirályindiai, jugoszláv, 7.O-Ornbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7V + c edd5a1b6279c2beE66huKirályindiai, Fianchetto, jugoszláv Pannor1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8U - c b4d51948fb5f54e3E66huKirályindiai, Fianchetto, jugoszláv Pannor1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8T - U b4df106d89d2cc41AE67huKirályindiai, Fianchetto ...Hd7-telr1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7S - y 84d56e5b8d44526dmE68huKirályindiai, Fianchetto, klasszikus variáció, 8.e4r1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8R - s fe5c5e0a38274824$E69huKirályindiai, Fianchetto, klasszikus fö változatr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9Q - s 16af83b4fa8481d6E69huKirályindiai, Fianchetto, klasszikus fö változatr1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9rP - 3 325b696440075d7d}E70huKirályindiai, 4.e4rnbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4rO - 3 f65c642cab87e077wE70huKirályindiai, 4.e4rnbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 N - ] e31222bb50dcdde2E71huKirályindiai, Makagonov-rendszer (5.h3)rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5|M - ? 2707444472a8cc28(E72huKirályindiai e4 & g3-malrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5wL - 5 78617cfc935a5eb3E73huKirályindiai, 5.Fe2rnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 5K - I 52e217d309ce67edE74huKirályindiai, Averbah, 6...c5rnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7 J - W 9e9da6b188ca61e2E75huKirályindiai, Averbah, fö változatrnbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8I - m f6f782088bee2999E76huKirályindiai védelem, négy gyalogos támadásrnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 5 b. c 8  g>w,J~ + s a963b097bdd7881E33huNimzoindiai védelem, klasszikus változat, 4...Hc6r1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5} - m 2411c1fff69893a4E34huNimzoindiai védelem, klasszikus, Noa-variációrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5| -  152f83f64ef34772rE35huNimzoindiai védelem, klasszikus, Noa-variáció, 5.cxd5 exd5rnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6!{ -  2a3b5a32545687b9E35huNimzoindiai védelem, klasszikus, Noa-variáció, 5.cxd5 exd5rnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5z - y ef8df0d9bfd41de4E36huNimzoindiai védelem, klasszikus, Noa-variáció, 5.a3rnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5'y -  e249c99f81c0d1bbE37huNimzoindiai védelem, klasszikus, Noa-variáció, fö változat 7.Vc2rnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR b KQkq - 2 7 x - ] 470a3245950bd6ffE38huNimzoindiai védelem, klasszikus, 4...c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5w - o 3241fd22a34e6878xE39huNimzoindiai védelem, klasszikus, Pirc-variációrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6{v - A bd4fd3445cc56942BE40huNimzoindiai védelem, 4.e3rnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4u - G 5b3e02eaa382623f?E41huNimzoindiai védelem, 4.e3 c5rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5t - o 4f9ae9258ba96fc1E42huNimzoindiai védelem, 4.e3 c5, 5.He2 (Rubinstein)rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5 s - ] d6269a54a246ded9E43huNimzoindiai védelem, Fischer-variációrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5r - k c282719b8a6dd327'E44huNimzoindiai védelem, Fischer-variáció, 5.He2rnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5q + } d92237fc14cd1d9E45huNimzoindiai védelem, 4.e3, Bronstein (Byrne)-variációrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6p - I b7e73ef3899c80a9E46huNimzoindiai védelem, 4.e3 O-Ornbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5o - W e2ea9f51b01c42daE47huNimzoindiai védelem, 4.e3 O-O, 5.Fd3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5 n - ] 6780bd452cc80cfcE48huNimzoindiai védelem, 4.e3 O-O, 5.Fd3 d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6m - i c6f09d54d5603ff6E49huNimzoindiai védelem, 4.e3, Botvinnik-rendszerrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 0 7l - i 8d25f765783cd0b6E49huNimzoindiai védelem, 4.e3, Botvinnik-rendszerrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7k - i ac1c8c63658482bcE49huNimzoindiai védelem, 4.e3, Botvinnik-rendszerrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6j - y 6c83d205e17ae194E50huNimzoindiai védelem, 4.e3 e8g8, 5.Hf3, ...d5 nélkülrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5i - c e9e9f0117daeafb2E51huNimzoindiai védelem, 4.e3 e8g8, 5.Hf3 d7d5rnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 6h - s d78d18a3baadda5aZE52huNimzoindiai védelem, 4.e3, fö változat ...b6-talrnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7g - s bce451b3442e6dc1E52huNimzoindiai védelem, 4.e3, fö változat ...b6-talrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 6f - s 5a95801dbb6966bcE53huNimzoindiai védelem, 4.e3, fö változat ...c5-telrnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7e - } bf5cf670aa975084E54huNimzoindiai védelem, 4.e3, Gligoric-rendszer 7...dc-velrnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 b - - 0 8 Eo?  j 3  pKRdvE - o b309c13051fa1511E23huNimzoindiai védelem, Spielmann, 4...c5, 5.dc Hc6rnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5 - o cceae3e0b2e6427d}E23huNimzoindiai védelem, Spielmann, 4...c5, 5.dc Hc6rnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5 - ] b112b1e78132d2ecE24huNimzoindiai védelem, Saemisch-változatrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5  - ] fac7dbd62c6e3dacE24huNimzoindiai védelem, Saemisch-változatrnbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5  - ] dbfea0d031d66fa6E24huNimzoindiai védelem, Saemisch-változatrnbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4 -  b2923fa1e0a56cdbE25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 7 -  bcb8a46c426b78c6E25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 7 -  5ac975c2bd2c73bbE25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 6  -  111c1ff310709cfbE25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b2P2/1P2P1PP/R1BQKBNR w KQkq - 0 6! -  302564f50dc8cef1E25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N2P2/1P2P1PP/R1BQKBNR b KQkq - 0 5  -  fbb955d3448440b1E25huNimzoindiai védelem, Saemisch-változat, Keresz-variációrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5% -  fa4e22fb5a2a51355E26huNimzoindiai védelem, Saemisch-változat, 4.a3 Fxc3+ 5.bxc3 c5 6.e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR b KQkq - 0 6% -  576360497e75d991E26huNimzoindiai védelem, Saemisch-változat, 4.a3 Fxc3+ 5.bxc3 c5 6.e3rnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6 - o bbba5c50546b3b07E27huNimzoindiai védelem, Saemisch-változat, 5...0-0rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6 - i 16971ee27034b3a3E28huNimzoindiai védelem, Saemisch-változat, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6 - i 5d4274d3dd685ce3E28huNimzoindiai védelem, Saemisch-változat, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b1P3/1P3PPP/R1BQKBNR w KQ - 0 6 - i 7c7b0fd5c0d00ee9E28huNimzoindiai védelem, Saemisch-változat, 6.e3rnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N1P3/1P3PPP/R1BQKBNR b KQ - 0 5 + s e06b60ca762dfaeE29huNimzoindiai védelem, Saemisch-változat, fö vonalr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 1 8 + s 4ae5bbb723b3645EE29huNimzoindiai védelem, Saemisch-változat, fö vonalr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQkq - 0 7 - s 4f7b318adf67d905E29huNimzoindiai védelem, Saemisch-változat, fö vonalr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQkq - 0 7 - s 6e424a8cc2df8b0fE29huNimzoindiai védelem, Saemisch-változat, fö vonalr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQkq - 0 6 - s a5de7baa8b93054fOE29huNimzoindiai védelem, Saemisch-változat, fö vonalr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQkq - 2 6 + s e33a3489a02a04cLE29huNimzoindiai védelem, Saemisch-változat, fö vonalrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5  - e d638c6c0c8103a2e.E30huNimzoindiai védelem, leningrádi változat,rnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4 - y 7b83e1f9186385edE31huNimzoindiai védelem, leningrádi változat, fö vonalrnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7  - a a17be3eb6a4cdd82E32huNimzoindiai védelem, klasszikus változatrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4 jfA 8  } z t[gdYbgojw6 - ; 37aa8fbefab96aa4E04huKatalán, nyílt, 5.Hf3rnbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 55 - Y 2366fc513012c6355E05huKatalán, nyílt, klasszikus változatrnbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6x4 - 9 f160c563622c28d6E06huKatalán, zárt, 5.Hf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5x3 - 9 2a0429950aca49ebE06huKatalán, zárt, 5.Hf3rnbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5z2 - ? b65e28bd2b2ef7e1E07huKatalán, zárt, 6...Hbd7r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7y1 - ? 85bd53e0cb861a2d-E07huKatalán, zárt, 6...Hbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6y0 - ? fbc828d4b775c13d=E07huKatalán, zárt, 6...Hbd7rnbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6v/ + 9 7475aa039f8cb85E08huKatalán, zárt, 7.Vc2r1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 b - - 2 7. - I cc530f2dd4c5b00eE09huKatalán, zárt, fö változatr1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8- - I 4490e61e2fc1f0afE09huKatalán, zárt, fö változatrnbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5, - I 505c95f1e56a5c3e>E09huKatalán, zárt, fö változatrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4z+ - A f9d00ca49969ca20 E10huVezérgyalog játék 3.Hf3rnbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3t* - 5 309165a2d29e0202E11huBogo-indiai védelemrnbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4x) - 7 92b945b467ea7dbbE12huVezérindiai védelemrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4( - Q 1edd0807484d289dE13huVezérindiai, 4.Hc3, fö változatrn1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 7' - Q ae4d40833a1f8706E13huVezérindiai, 4.Hc3, fö változatrnbqk2r/p1pp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6 & - Q f4c22840c9a1a59dE13huVezérindiai, 4.Hc3, fö változatrnbqk2r/p1pp1pp1/1p2pn1p/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6t% - 1 3f94070643b5f51fE14huVezérindiai, 4.e3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4v$ - 1 be5ffef5873da583E15huVezérindiai, 4.g3rnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4# - Q 727efc0af3751a43CE16huVezérindiai, Capablanca-változatrn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6y" - ; aff3e6e372297ef0E17huVezérindiai, 5.Fg2 Fe7rn1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6 ! - ] 20b968c21961ced2E18huVezérindiai, régi fö változat, 7.Hc3rn1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 7 - _ 2910a3204606afc5E19huVezérindiai, régi fö változat, 9.Vxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 9  - _ 1921ebd65ef08941AE19huVezérindiai, régi fö változat, 9.Vxc3rn1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 9  - _ aba85640b9fe7f4cLE19huVezérindiai, régi fö változat, 9.Vxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 8  - _ 1ab1245dab284328(E19huVezérindiai, régi fö változat, 9.Vxc3rn1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8u - 5 106291f6789ae1e6E20huNimzoindiai védelemrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 - k cb067d00107c80dbE21huNimzoindiai védelem, háromhuszáros változatrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4  - _ 2a9b324e4da14900E22huNimzoindiai védelem, Spielmann-változatrnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4 - o 18e419d2406bb012E23huNimzoindiai védelem, Spielmann, 4...c5, 5.dc Hc6r1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6 xt   q U H<8AIBz>#S -  a015db9ac39082e9D88huGrünfeld, Spaszkij-változat, föváltozat, 10...cxd4, 11. cxd4r1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R b KQkq - 3 9!R -  d31d607642aa9967gD88huGrünfeld, Spaszkij-változat, föváltozat, 10...cxd4, 11. cxd4r1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQkq - 2 9Q - s 7ec069fa27e6f754TD89huGrünfeld, Spaszkij-változat, föváltozat, 13.Fd3r2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1 w - - 1 14P - s d07d17b687f107bfD89huGrünfeld, Spaszkij-változat, föváltozat, 13.Fd3r2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 0 13O - s 7ccbc2fae3590b99D89huGrünfeld, Spaszkij-változat, föváltozat, 13.Fd3r2q1rk1/pp2ppbp/6p1/n7/3pP1b1/2PBBP2/P3N1PP/R2Q1RK1 w - - 0 13N - s 23d578cf9ead625f_D89huGrünfeld, Spaszkij-változat, föváltozat, 13.Fd3r2q1rk1/pp2ppbp/6p1/n1p5/3PP1b1/2PBBP2/P3N1PP/R2Q1RK1 b - - 2 12 M - U 18ee9778a4f204c6D90huGrünfeld, háromhuszáros változatrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4uL - - 6e08fdf8ef3f14a4D91huGrünfeld, 5.Fg5rnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5tK - - 73064c4fc6d5250fD92huGrünfeld, 5.Ff4rnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5|J - ? d483e34a37d34440@D93huGrünfeld, 5.Ff4 O-O 6.e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6}I - ? 79aea1f8138ccce4D93huGrünfeld, 5.Ff4 O-O 6.e3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6rH + + 57fe87c7bea47c8D94huGrünfeld, 5.e3rnbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5}G - ? 352ea6739b8806c5D95huGrünfeld, 5.e3 O-O 6.Vb3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 6F - A 92ab09766a8e678aD96huGrünfeld, orosz változatrnbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5E - M a11f4cadad02beaaD97huGrünfeld, orosz változat, 7.e4rnbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 7D - M 651841e5468203a0D97huGrünfeld, orosz változat, 7.e4rnbq1rk1/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R w KQ - 1 7C - M 6fb0ac5293dbea4bKD97huGrünfeld, orosz változat, 7.e4rnbqk2r/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 0 6B - M 40ad304438b08969iD97huGrünfeld, orosz változat, 7.e4rnbqk2r/ppp1ppbp/5np1/8/2pP4/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 0 6A - W a3cc869fea87b040@D98huGrünfeld, orosz, Szmiszlov-változatrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8 @ - c 814ca588eccd530eD99huGrünfeld-védelem, Szmiszlov, föváltozatrn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9 ? - c 29833ed5c671a23b;D99huGrünfeld-védelem, Szmiszlov, föváltozatrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R w KQ - 3 9 > - c d0c43d736bbdabceD99huGrünfeld-védelem, Szmiszlov, föváltozatrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R b KQ - 2 8x= - 9 56ac851dae3c0853SD70huÚj-Grünfeld-védelemrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/5P2/PP2P1PP/RNBQKBNR w KQkq - 0 4q< - 3 22b4e052f18fab1dE00huVezérgyalog játekrnbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3p; - + 3ec85a7ac061e57azE01huKatalán, zártrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4x: - ; 3e6ade075261f9e2E02huKatalán, nyílt, 5.Va4rnbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5w9 - ; ecce6348925f0b99E02huKatalán, nyílt, 5.Va4rnbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 58 - S cac927bbeca72d91E03huKatalán, nyílt, Aljehin-változatr1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 67 + S d89a55ab2c9142e.E03huKatalán, nyílt, Aljehin-változatr1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6 ;p1qh~lc   yqiaYQIA91)!NI_Z}ume]UME=5-% `3[7 2yqiwog_VMD;2)1!%zD u@! yqiaYQIA91)!  CWm.)  w o g _ W O G ? 7 / '     { r i ` WVMQ O G ? 7 / '      w o f ] T KE*d;R C ; 3 + #    { r i `< X P H @ 8 0 (    QIA91)! ypg^ULLvDfbK?uPO6 lE,+)zn?e<-o   a   ! ,(F;=x;39hN[' +O~s~}}H|zvvu ts5n4lcbb1XUGNFfFaA<< 1)) ph\(W~Y}|zywjjh>e bd`o`9LLL<J9P6P5,+>"!d r} wieme b a6][WS?:&74L10+1))#^U E)g'~ovomlmba`[iWGF9EB@>P,'Z$V Rg~~g}"|!n_y^SROK$Fc=X84\3S/  g p(' ?q[7~{{^zz6wq_kii fe\Y[!XWYUQ=E??M+" xW0ML e~~}}|{x6m kShYggeb``m_WRREECBAT:874-"!eJF  &lo^~}|{xt*tsiOgPfpXV T&MTJHD Y h G % ( .7Jbihit{tq - 5 c39a9760efb6a8d5D77huÚj-Grünfeld, 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4up - 5 766ab41da25b70acD77huÚj-Grünfeld, 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4yo - ; 2c74513cee07acb4D78huÚj-Grünfeld, 6.O-O c6rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7xn - ; a91e732872d3e292D78huÚj-Grünfeld, 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6xm - ; d76b081c0e203982D78huÚj-Grünfeld, 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6ul - ; 4511e5f379e0ea399D78huÚj-Grünfeld, 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQ - 2 5vk - ; f0e1c68e340d3240@D78huÚj-Grünfeld, 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQ - 1 5j - Q 512e65b8eca3b513D79huÚj-Grünfeld, 6.O-O, föváltozatrnbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8i - Q 225ecaf14cc9b8a9D79huÚj-Grünfeld, 6.O-O, föváltozatrnbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7uh - 1 c38a7b8ecc1465fbD80huGrünfeld-védelemrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4}g - A f973d836f92fcd1dD81huGrünfeld, orosz változatrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 4tf - - 18de9d0f55748f98D82huGrünfeld, 4.Ff4rnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 4oe + ) fe70fbc5f35257d}D83huGrünfeld-cselrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6qd + ) 54fe20b8a6ccc96D83huGrünfeld-cselrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 5pc - ) a862a0b9ae3344322D83huGrünfeld-cselrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 5ub - ? a08f71815daca1dbD84huElfogadott Grünfeld-cselrnb2rk1/ppB1ppbp/6p1/3q4/3P4/4P3/PP3PPP/R2QKBNR b KQ - 0 8wa - ? d3b26261bbfe33abD84huElfogadott Grünfeld-cselrnb2rk1/ppp1ppbp/6p1/3q4/3P1B2/4P3/PP3PPP/R2QKBNR w KQ - 0 8x` - ? 4f01d6352c22099aD84huElfogadott Grünfeld-cselrnbq1rk1/ppp1ppbp/6p1/3N4/3P1B2/4P3/PP3PPP/R2QKBNR b KQ - 0 7y_ - ? 9e23ee3c421e2c3c - ? 269d9733c24d208eD67huElhárított vezércsel, Ortodox védelem, Fd3 vonal, Capablanca felszabadító manöverer1bq1rk1/pp1nbppp/2p1p3/3n2B1/2BP4/2N1PN2/PP3PPP/2RQK2R w K - 1 10 -  8f46bbe076558abbD68huElhárított vezércsel, Ortodox védelem, klasszikus változatr1b2rk1/pp1nqppp/2p5/4p3/2BP4/2R1PN2/PP3PPP/3Q1RK1 w - - 0 13 -  8b9f673152b567d6D68huElhárított vezércsel, Ortodox védelem, klasszikus változatr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2R1PN2/PP3PPP/3Q1RK1 b - - 0 12  -  969913a34b8928b5D68huElhárított vezércsel, Ortodox védelem, klasszikus változatr1b2rk1/pp1nqppp/2p1p3/8/2BP4/2n1PN2/PP3PPP/2RQ1RK1 w - - 0 12 -  b967933177d7a46bkD69huElhárított vezércsel, Ortodox védelem, klasszikus, 13.dxe5r1b2rk1/pp3ppp/2p5/4q3/2B5/2R1P3/PP3PPP/3Q1RK1 w - - 0 15 +  445c52c821e7283D69huElhárított vezércsel, Ortodox védelem, klasszikus, 13.dxe5r1b2rk1/pp2qppp/2p5/4N3/2B5/2R1P3/PP3PPP/3Q1RK1 b - - 0 14 -  6598c8c75f11d6e0D69huElhárított vezércsel, Ortodox védelem, klasszikus, 13.dxe5r1b2rk1/pp2qppp/2p5/4n3/2B5/2R1PN2/PP3PPP/3Q1RK1 w - - 0 14 -  13db44a27e603dcbD69huElhárított vezércsel, Ortodox védelem, klasszikus, 13.dxe5r1b2rk1/pp1nqppp/2p5/4P3/2B5/2R1PN2/PP3PPP/3Q1RK1 b - - 0 13u - 7 8073272645a02588D71huÚj-Grünfeld, 5.cxd5rnbqk2r/ppp1ppbp/6p1/3n4/3P4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 6v - 7 1f9d5d6bfa4538d4D71huÚj-Grünfeld, 5.cxd5rnbqk2r/ppp1ppbp/5np1/3P4/3P4/6P1/PP2PPBP/RNBQK1NR b KQkq - 0 5 - O 2fca5d5384ec764eND74huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-Ornbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 7 - O 51bf2667f81fad5e^D74huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-Ornbq1rk1/ppp1ppbp/6p1/3n4/3P4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 7 - O ce515c2a47fab002D74huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-Ornbq1rk1/ppp1ppbp/5np1/3P4/3P4/5NP1/PP2PPBP/RNBQK2R b KQ - 0 6~ - O c07bc7e7e534a41fD74huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-Ornbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6 } - c 322c945fb949ffeaD75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 8 | - c 4c59ef6bc5ba24faD75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/pp2ppbp/6p1/2pn4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 8 { - c aa283ec53afd2f87D75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/2N2NP1/PP2PPBP/R1BQK2R b KQ - 1 7 z - c 1fd81db87710f7feD75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/ppp1ppbp/6p1/3n4/3P4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 0 7y - c 803667f5c8f5eaa2D75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/ppp1ppbp/5np1/3P4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQ - 0 6x - c 8e1cfc386a3bfebfD75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/ppp1ppbp/5np1/3p4/2PP4/2N2NP1/PP2PP1P/R1BQKB1R w KQ - 0 6 w + c b76de2cf6efb099D75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc3rnbq1rk1/ppppppbp/5np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQ - 0 5v + W 651d25c9ca91d00D76huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O Hb6rnbq1rk1/ppp1ppbp/1n4p1/8/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 2 8tu - 5 be0ebcd399c77f0fD77huÚj-Grünfeld, 6.O-Ornbq1rk1/ppp1ppbp/5np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6tt - 5 322d23f7dac8d408D77huÚj-Grünfeld, 6.O-Ornbq1rk1/ppp1ppbp/5np1/3p4/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 0 6rs - 5 b74701e3461c9a2e.D77huÚj-Grünfeld, 6.O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b - - 4 5rr - 5 c9327ad73aef413e>D77huÚj-Grünfeld, 6.O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R w KQ - 3 5 J M f `/]sQ % - a 45284ee920e59f57WD47huElhárított vezércsel, Fél-szláv 7.Fc4r1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7 $ + a c927a821fd69c9cD47huElhárított vezércsel, Fél-szláv 7.Fc4r1bqkb1r/pp1n1ppp/2p1pn2/8/2pP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7 # - ] 39b3e62fe28c4b6ajD48huElhárított vezércsel, meráni, 8...a6r1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9 " - _ fa85fdcdb945771bD49huElhárított vezércsel, meráni, 11.Hxb5r1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 11! - _ 1af5395cdc3ee9a0D49huElhárított vezércsel, meráni, 11.Hxb5r1bqkb1r/3n1ppp/p3pn2/1p2P3/3p4/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 11 - I 9a138dd21f33bc2a*D50huElhárított vezércsel, 4.Fg5rnbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 49 - 5 a9f0f68fff9b51e6D51huElhárított vezércsel, 4.Fg5 Hbd7 (Cambridge Springs-védelem és elefánt-csapda)r1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5 - ; 4dc3b524c4e26bc4D52huElhárított vezércselr1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 6 - Q 8edffe3dd59810bbD53huElhárított vezércsel, 4.Fg5 Fe7rnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5 - q 56c19e75a78c252a*D54huElhárított vezércsel, Anti-neoortodox változatrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 6 - q 295a5138249e71f4D54huElhárított vezércsel, Anti-neoortodox változatrnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6 - I f23ebdce4c7810c9D55huElhárított vezércsel, 6.Hf3rnbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6  ) ] 4ed2f49a5bf6bdD56huElhárított vezércsel, Lasker-védelemrnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8 - s eec36cc8c45017dfD57huElhárított vezércsel, Lasker-védelem, fö vonalrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R b KQ - 0 10 - s 6d31de153239efc6D57huElhárított vezércsel, Lasker-védelem, fö vonalrnb2rk1/ppp1qpp1/4p2p/3P4/3P4/2n1PN2/PP3PPP/R2QKB1R w KQ - 0 10 - s dfb86383d53719cbD57huElhárított vezércsel, Lasker-védelem, fö vonalrnb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 96 - + 512fd77bd691ccdcD58huElhárított vezércsel, Tartakower-rendszer (Makagonov-Bondarevszkij-rendszer)rnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8- -  c0eb36fbcbbac59dD59huElhárított vezércsel, Tartakower (Makagonov-Bondarevszkij), 8.cd Hxd5rnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9  - _ c1ddc693acd0fd05D60huElhárított vezércsel, Ortodox védelemr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7# -  70c4b48ebe06c161aD61huElhárított vezércsel, Ortodox védelem, Rubinstein-változatr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 2 7) -  989ffeede38fde01D62huElhárított vezércsel, Ortodox védelem, 7.Vc2 c5, 8.cd (Rubinstein)r1bq1rk1/pp1nbppp/4pn2/2pP2B1/3P4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 0 8+ -  96b565204141ca1cD62huElhárított vezércsel, Ortodox védelem, 7.Vc2 c5, 8.cd (Rubinstein)r1bq1rk1/pp1nbppp/4pn2/2pp2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 0 8 - m be4609de2fc2a9dbD63huElhárított vezércsel, Ortodox védelem, 7.Bc1r1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R b K - 2 70 - ! 9d25962c4ad44604D64huElhárított vezércsel, Ortodox védelem, Rubinstein-támadás (Bc1-gyel)r1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R b K - 1 81 - ! 41f8fc120f3aaac5D65huElhárított vezércsel, Ortodox védelem, Rubinstein-támadás, fö vonalr1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R b K - 0 9 lJ % _ 6 oB8ud? - s 229500ab92419787D29huElfogadott vezércsel, klasszikus változat 8...Fb7rn1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9> - s 9205482fe013381cD29huElfogadott vezércsel, klasszikus változat 8...Fb7rnbqkb1r/5ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 b kq - 1 8v= - ; fc30f6b3c0a1a4adD30huElhárított vezércselrnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3}< + I 7a7ee1102432674tD31huElhárított vezércsel, 3.Hc3rnbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 ; - a e1d63fbffd042d09 D32huElhárított vezércsel, Tarrasch-védelemrnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4.: - ! 8c87f2e3dccfe5d9D33huElhárított vezércsel, Tarrasch-védelem, Schlechter-Rubinstein-rendszerr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6-9 - ! a06149a23c183de1D33huElhárított vezércsel, Tarrasch-védelem, Schlechter-Rubinstein-rendszerr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 68 - s 76559684f673d0a7D34huElhárított vezércsel, Tarrasch-védelem, 7...Fe7r1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8 7 - [ 5c49dae4afb967e2D35huElhárított vezércsel, csereváltozatrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4"6 -  884e5029c24e8723#D36huElhárított vezércsel, csereváltozat, pozíciós vonal, 6.Vc2rnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 65 - I 872d3612c75f06dfD37huElhárított vezércsel, 4.Hf3rnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 44 - a 4e6c5f148ca8cefdD38huElhárított vezércsel, Ragozin-változatrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 53 - q 5a3031106e1cfbd6D39huElhárított vezércsel, Ragozin, bécsi változatrnbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 62 - q 883608223c2215355D39huElhárított vezércsel, Ragozin, bécsi változatrnbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 51 - k 615ce7bc38180da2D40huElhárított vezércsel, fél-Tarrasch-védelemrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 50 - e 6f767c719ad619bfD41huElhárított vezércsel, fél-Tarrasch, 5.cdrnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5/ - g a3553dce297deb377D42huElhárított vezércsel, fél-Tarrasch, 7.Fd3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 7. - g f6589c6c10fd2944DD42huElhárított vezércsel, fél-Tarrasch, 7.Fd3r1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 7- - g 1557dbfdb09fd564dD43huElhárított vezércsel, Fél-szláv védelemrnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5, + k 10bb5f9522be04fOD44huElhárított vezércsel, Fél-szláv 5.Fg5 dxc4rnbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6+ - k d30d8ccb00150eacD44huElhárított vezércsel, Fél-szláv 5.Fg5 dxc4rnbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5* - _ b87a994f94c05dc0D45huElhárított vezércsel, Fél-szláv 5.e3rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5 ) - _ 631e75b9fc263cfdD45huElhárított vezércsel, Fél-szláv 5.e3rnbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5 ( - _ 15698788e404acafD45huElhárított vezércsel, Fél-szláv 5.e3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 ' - _ b844c53ac05b240b D45huElhárított vezércsel, Fél-szláv 5.e3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4& - a de9443b04de8727fD46huElhárított vezércsel, Fél-szláv 6.Fd3r1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6 RjM N J Y M E)sV0tVRy\ - C 183de96daf43e744DD10huVezércsel, Szláv védelemrnbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3[ - Q c359059bc7a58679yD11huVezércsel, Szláv védelem, 3.Hf3rnbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 Z - W b6831a52f9e546c6D12huVezércsel, Szláv védelem, 4.e3 Ff5rn1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5 Y - c e5ed05ea68fbde48HD13huVezércsel, Szláv védelem, csereváltozatrnbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5 X - c 969daaa3c891d3f2D13huVezércsel, Szláv védelem, csereváltozatrnbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4W - c edda4aa5950d1a7c|D14huVezércsel, Szláv védelem, csereváltozatr2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 6 7V - c 6ec3232b22e813f1D14huVezércsel, Szláv védelem, csereváltozatr1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 6U - c b597c5aabb88f992D14huVezércsel, Szláv védelem, csereváltozatr1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 6 T - c 1e7a1d48aa195c91D14huVezércsel, Szláv védelem, csereváltozatrnbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 5 S - c c51ef1bec2ff3dacD14huVezércsel, Szláv védelem, csereváltozatrnbqkb1r/pp2pppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 5R - c 9ef0c54b6f057c3a:D14huVezércsel, Szláv védelem, csereváltozatrnbqkbnr/pp2pppp/8/3p4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4Q - c 6567dde9ade7fee3D14huVezércsel, Szláv védelem, csereváltozatrnbqkbnr/pp2pppp/8/3p4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4P - Q 632029cca8bd45366D15huVezércsel, Szláv védelem, 4.Hc3rnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4O - { daef6e1297107e1bD16huVezércsel, Elfogadott szlav védelem, Alapin-változatrnbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5N - a 59f6079c20f57796D17huVezércsel, Szláv védelem, Cseh védelemrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6M - G f4db452e04aaff322D18huVezércsel, Holland változatrn1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6L - E d1f9164e821838e3D19huVezércsel, Holand változatrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8K - E af8c6d7afeebe3f3D19huVezércsel, Holand változatrn1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8J - E 66cd047cb51c2bd1D19huVezércsel, Holand változatrn1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7I - E 82acb71f1c886f60`D19huVezércsel, Holand változatrn1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7pH - 7 58413db08abdda1cD20huElfogadott vezércselrnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3yG - E 8325d146e25bbb21!D21huElfogadott vezércsel, 3.Hf3rnbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3F - [ 51d220b5057b43fdD22huElfogadott vezércsel, Aljehin-védelemrnbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4uE - 7 d8cbe5b34fa1fab7D23huElfogadott vezércselrnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4}D - E 235cfd118d43786enD24huElfogadott vezércsel, 4.Hc3rnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4zC - C 75e6a7016bfe7213D25huElfogadott vezércsel, 4.e3rnbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 B + c 391553073dce241AD26huElfogadott vezércsel, klasszikus változatrnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 A - c ad03bd3abedc8e41AD27huElfogadott vezércsel, klasszikus változatrnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7@ - o 3b053218f098d5c5D28huElfogadott vezércsel, klasszikus változat 7.Ve2rnbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7 yj n e f W %hGpL5}x - ? 2dbc8cedfb46a6377C88huSpanyol megnyitás, zártr1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7}w - ? 7d0091a166e64fd5C88huSpanyol megnyitás, zártr1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7v - c d4a4bbd662bb0e7c|C89huSpanyol megnyitás, Marshall-ellentámadásr1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 9u - c 51ce99c2fe6f405aZC89huSpanyol megnyitás, Marshall-ellentámadásr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 8 t - U 68740fa32c1709377C90huSpanyol megnyitás, zárt, ...d6-talr1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 1 9 s - U 62dce214f94ee0dcC90huSpanyol megnyitás, zárt, ...d6-talr1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b kq - 0 8r - I ad4120093dde2475uC91huSpanyol megnyitás, zárt 9.d4r1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 9q - K 8087d21deeb4c0c5C92huSpanyol megnyitás, zárt, 9.h3r1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 b - - 0 9p - g 1270997b796089d0C93huSpanyol megnyitás, zárt, Szmiszlov-védelemr1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10o - a 2b6a0affff2565c6C94huSpanyol megnyitás, zárt, Breyer-védelemrnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10n - ] ee5f2555eeec4884C95huSpanyol megnyitás, zárt, Breyer, 10.d4rnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10m - Q 25a99e6fdada2343CC96huSpanyol megnyitás, zárt, 8...Ha5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10 l - Q d590f8e8438862cfC96huSpanyol megnyitás, zárt, 8...Ha5r1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10k ) e f25f4a581f4a7d}C97huSpanyol megnyitás, zárt, Csigorin-védelemr1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12j + g c8bcddd6fde4047GC98huSpanyol megnyitás, zárt, Csigorin, 12...Hc6r1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13i - g 599ce728c2e2e24dMC98huSpanyol megnyitás, zárt, Csigorin, 12...Hc6r1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12h - k aa348851dbbe87adC99huSpanyol megnyitás, zárt, Csigorin, 12....c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13g + k 6825d1dbf168b8bC99huSpanyol megnyitás, zárt, Csigorin, 12....c5d4r1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13qf + 5 6649ba69b8c9ff8D00huVezérgyalog játékrnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2|e - A 6047e0c7441e877fD01huRichter-Vereszov-támadásrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 1 3{d - C dd007750f36afec5D02huVezérgyalog-játék, 2.Hf3rnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 2 c - Y 40b41493ee1a649bD03huTorre-támadás, Tartakower-válto9zatrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3vb - 5 2bc301177acf37f7D04huVezérgyalog játékrnbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 3 a - _ 5db4f32662eda7a5D05huVezérgyalog-játék, Zukertort-változatrnbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4h` - ! 8a470482d88334ffD06huVezércselrnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2}_ - G 21aadc60c91291fcD07huVezércsel, Csigorin-védelemr1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3 ^ ) g 3f0cc84b66ccc9D08huVezércsel, Albin-ellencsel és Lasker-csapdarnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3] - O 22a016b116cc4d58XD09huVezércsel, Albin-ellencsel, 5.g3r1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5 -3$ A/ } u m e ] U M E = 5 - %   ypg^ULC:1( 8|tld\TLD<4,$ }umexph`XPH@80( JyqiaYQIA91)!  x p h ` X P H @ 8 0 (     v m d [ R I @ 7 . %   S y q i a Y Q I A 9 1 ) !    w n e$\& ] U M E = 5 - %     xph`XPH@80( xph`XPH?6-$ ~vnf^VNF>6rpI$Yb'`V&|@lY~}}y6wurqApnba1]WVJH^FXE<87/,+'g s)qXF9C~}wslqhXQPO'MH5G2BB73.A%"Kd7~}0sqpumeaY_0\QQHENA=9],*#  ,)*Xm*EW M~~C{{ zfz:xw0po;kYig&a0^]ZZHRKGZ>:Z22^.-(2 xkK $  o ' E+K x - e 915d5f70b3392686C71huSpanyol megnyitás, modern Steinitz-védelemr1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5 - s ef282444cfcafd96C72huSpanyol megnyitás, modern Steinitz-védelem, 5.0-0r1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5  +  8c24cc14dccc3f6C73huSpanyol megnyitás, modern Steinitz-védelem, Richter-változatr1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6! -  cdf7636b5c05eeb4C73huSpanyol megnyitás, modern Steinitz-védelem, Richter-változatr1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6! +  9a70d7f4e3e0a9eC73huSpanyol megnyitás, modern Steinitz-védelem, Richter-változatr1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5 - e e787a7e863492900C74huSpanyol megnyitás, modern Steinitz-védelemr1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5 + e 54659bab913f9311C75huSpanyol megnyitás, modern Steinitz-védelemr2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6> - = 29c7254bd35546388C76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat)r2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7> - = cb06db19090f9609 C76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat)r1bqkbnr/1pp2p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6> + = e33f4b318c6bb4bKC76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat)r1bqkbnr/1pp2p1p/p1np2p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6? - = 378962d2cabef226&C76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat)r1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 5? + = 68a2c913ec88b0c C76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat)r1bqkbnr/1ppp1p1p/p1n3p1/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5 - S 6bf3afeb31bc0265eC77huSpanyol megnyitás, Morphy-védelemr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5 - S f309fde4ccbb2e7d}C77huSpanyol megnyitás, Morphy-védelemr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5| - ? 8d7c86d0b048f56dmC78huSpanyol megnyitás, 5.0-0r1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5& -  b4c610b16230bc00C79huSpanyol megnyitás, elhárított Steinitz-védelem (orosz védelem)r1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 - { 30cbc889b69f527e~C80huSpanyol megnyitás, nyílt védelem (Tarrasch-védelem)r1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 - e 1e0f50da334bf2399C81huSpanyol megnyitás, nyílt, Howell-támadásr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 b kq - 2 9 - M fed32760ad7fa63b;C82huSpanyol megnyitás, nyílt, 9.c3r2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 b kq - 0 9~ - k ea1f548f67d40aaaC83huSpanyol megnyitás, nyílt, klasszikus védelemr2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10} - Q 99b0f53f7ae359fcC84huSpanyol megnyitás, zárt védelemr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6| + { 14aa73087e475e4C85huSpanyol megnyitás, duplán elhárított csereváltozatr1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6{ + W fb67a1d34a70278xC86huSpanyol megnyitás. Worrall-támadásr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 6z - g 24be6dd52f33bb85C87huSpanyol megnyitás, zárt, Averbach-változatr1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7y - g 1d04fbb4fd4bf2e8C87huSpanyol megnyitás, zárt, Averbach-változatr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6 xp ; | a pw  ]pbxr/ - / ea9ae98dd46a91f0C41huPhilidor-védelemrnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3p. - + 88ce4b19abe8990b C42huPetrov-védelemrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3- - g 4dfb64b3ba21b449IC43huPetrov-védelem, modern (Steinitz-) támadásrnbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3w, - 7 78cda70e17837d9eC44huKirálygyalog-játékr1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3k+ - ' 4112df7bd300d6e7C45huSkót játékr1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4z* - ; 835abfacd561ff47GC46huHáromhuszáros játékr1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3 ) - [ 1d81a4f369529393C47huNégyhuszáros játék, skót változatr1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4( - _ eb6a5af61d0f2d52RC48huNégyhuszáros játék, spanyol változatr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4' - k 222b33f056f8e570pC49huNégyhuszáros játék, dupla spanyol változatr1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5w& - 7 1b7e13263fc0ab388C50huKirálygyalog-játékr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3p% - ! 1c9622d153442d9fC51huEvans-cselr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4$ - O 768c3ac4890df01bC52huEvans-csel 4...Fxb4, 5.c3 Fa5-telr1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6r# - % c0b9afe525824e3d=C53huGiuoco Pianor1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4n" - % 69aa6b7439623adaC54huGiuoco Pianor1bqk2r/pppp1ppp/2n2n2/2b5/2BPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 6{! - 9 409027d3923aeaaeC55huKéthuszáros védelemr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4u - 9 dd1937963dacaffaC56huKéthuszáros védelemr1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6z - 9 1642c6063bf6120a C57huKéthuszáros védelemr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4w - 9 e1e0c4aad071bc20 C58huKéthuszáros védelemr1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6u - 9 26d4332e603fe217C59huKéthuszáros védelemr1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R w KQkq - 0 9t - 1 4b1376a17217ee1dC60huSpanyol megnyitásr1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3 - O 9c6e1a40cc53aebcC61huSpanyol megnyitás, Bird-védelemr1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 - e 72a9e0c0a06fa770pC62huSpanyol megnyitás Régi Steinitz-megnyitásr1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4  - [ df7c1038cc9fc3c3C63huSpanyol megnyitás, Schliemann-védelemr1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4 -  e60e32fab825049eC64huSpanyol megnyitás, Cordel-védelem (Klasszikus védelem)r1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4  - U 10fd4254dfedaf8bC65huSpanyol megnyitás, berlini védelemr1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4 - k 5732af0171663df6C66huSpanyol megnyitás, berlini védelem, 4.0-0, d6r1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5 - y d33f7739a5c9d388C67huSpanyol megnyitás, berlini védelem, nyílt változatr1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5 - Q c8cbbdb43361c6faC68huSpanyol megnyitás, csereváltozatr1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4  - _ 806ee4d7d6b08795C69huSpanyol megnyitás, csereváltozat, 5.0-0r1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5u - 1 a8e7c91161416febC70huSpanyol megnyitásr1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 4 f  ? 1   0 'E vhbfrM - - 146d4888073671efC11huFrancia védelemrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4L - I 1b7676b8fc4b6205C12huFrancia, MacCutcheon-változatrnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5K - G c6fb6c517d1706b6C13huFrancia, klasszikus változatrnbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5}J - G 2d401dd965fe75deC14huFrancia, klasszikus változatrnb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7}I - G cd80c33c58adf2bbC14huFrancia, klasszikus változatrnbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6H - Y 86c2157be13bf85b[C15huFrancia, Winawer (Nimzovich)-változatrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4 G - ] e7bb0386e525de3f?C16huFrancia, Winawer, elöretörö változatrnbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4 F + ] 1cad2281a62d542BC17huFrancia, Winawer, elöretörö változatrnbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5E - ] a0baf239e3cae648HC18huFrancia, Winawer, elöretörö változatrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 6 D - ] eb6f98084e960908C18huFrancia, Winawer, elöretörö változatrnbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 6C - o 9ef54e8458436df5C19huFrancia, Winawer, elöretörö változat, 6...He7rnbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7lB - ) 805579149e46cac9C22huCentrumjátékr1bqkbnr/pppp1ppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR w KQkq - 1 4nA - + 6bf7273246b76f06C23huFutómegnyitásrnbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2@ - O 301913c7eb4d2e90C24huFutómegnyitás, berlini védelemrnbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3m? - ) f3d38bb8ac163b79yC25huBécsi játékrnbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2> - Q a83dbf4d01ec7aefC26huBécsi játék, Falkbeer-változatrnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3= - O 7639453c2f780b5aZC27huBécsi játék, Drakula-változatrnbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4s< - ) 6063d387383e094aJC28huBécsi játékr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4r; - ) 3b8de77295c448dcC28huBécsi játékr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3h: - # f552ee1777658429)C30huKirálycselrnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2y9 - E 7038cc03ebb1ca0fC31huVisszautsaított királycselrnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 38 - m d4c5b462704c058dC32huVisszautasított királycsel, Felkbeer-ellencselrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR b KQkq - 2 57 - m 8dab0c00eab1adbdC32huVisszautasított királycsel, Felkbeer-ellencselrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 5r6 - 9 1cd8d48946aa83fdC33huElfogadott királycselrnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 35 - w c7bc387f2e4ce2c0C34huElfogadott királycsel, beleértve a Fischer-védelemrnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 34 - c d3704b90e4e74e51QC35huElfogadott királycsel, Cunningham-védelemrnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 413 - / 42d61a6bb298ace6C36huElfogadott királycsel, abháziai védelem (kalsszikus védelem, modern védelem)rnbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 42 - S bc68d000781a9f93C37huElfogadott királycsel, Quaade-cselrnbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4v1 - 9 94f0413c69fc0046FC38huElfogadott királycselrnbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 5v0 - 9 db5c548b11c764344C39huElfogadott királycselrnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4 Oc ? ` _`<}_TOj - I d5627334f6bb9992B87huSzozin ...a6-tal és ...b5-telrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7~i - I 1c6663167d9dc976vB87huSzozin ...a6-tal és ...b5-telrnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7h - [ 657c4a078b2c94a9B88huSzicíliai, Szozin, Leonhardt-változatr1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7zg - ? 1674f1eb0a168f27'B89huSzicíliai, Szozin, 7.Fe3r1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 1 7tf + 3 9a2250f4dfc8f82B90huSzicíliai, Najdorfrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6!e -  25449e4ead2b57baB91huSzicíliai, Najdorf, zágrábi (fianchetto) változat (6.g3)rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 6d - m 7a22a6f64cd9c521!B92huSzicíliai, Najdorf, Opocensky-változat (6.Fe2)rnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6zc - ? f4b45802546db20b B93huSzicíliai, Najdorf, 6.f4rnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6|b - A cff87239fd76544aJB94huSzicíliai, Najdorf, 6.Fg5rnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6|a - C b98f8008e554c418B95huSzicíliai, Najdorf, 6...e6rnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7{` - ? 4499fd05fcc5f991B96huSzicíliai, Najdorf, 7.f4rnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R b KQkq - 0 7'_ -  83660352368e2f4bKB97huSzicíliai, Najdorf, 7...Vb6 beleértve: Mérgezett gyalog változatrnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8|^ - E 50558eea366e5500B98huSzicíliai, Najdorf, 7...Fe7rnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8] - a e7a6f486c5d2aeeeB99huSzicíliai, Najdorf, 7...Fe7 Fö változatr1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 10 \ - a d4458fdb257a4322"B99huSzicíliai, Najdorf, 7...Fe7 Fö változatrnb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9n[ - - f44b6961e533d1c4C00huFrancia védelemrnbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2Z - a 93cb6e92b241f0a6C01huFrancia, csereváltozat, Kingston-védelemrnbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3~Y - K d56d72226c3094c4C02huFrancia, elöretórö változatrnbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3{X - C ed7adcbdf2d31a90C03huFrancia, Tarrasch-változatrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3 W - _ c61ddc5c265e9f388C04huFrancia, Tarrasch, Guimard fö folytatásr1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5 V - _ 9df3e8a98ba4deaeC04huFrancia, Tarrasch, Guimard fö folytatásr1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4U - Q b694e8485f295b06C05huFrancia, Tarrasch, zárt változatrnbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 4T - q a7ed29d3c0aa7f02C06huFrancia, Tarrasch, zárt változat, fö folytatásr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R b KQkq - 0 8S + q b5bfc9fa4027324$C06huFrancia, Tarrasch, zárt változat, fö folytatásr1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 8R - q 544546aad9f61ae2C06huFrancia, Tarrasch, zárt változat, fö folytatásr1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7Q + S b0b0d130d9411edC07huFrancia, Tarrasch, nyílt változatrnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 0 4P - Y 13c0de9acd5e9320 C08huFrancia, Tarrasch, nyílt, 4.exd5 exd5rnbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5O - s 6349ea8eb429571eC09huFrancia, Tarrasch, nyílt változat, fö folytatásr1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6zN - A 4f837c7daacc3079yC10huFrancia, Paulsen-változatrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3 }N : f S*a.jN5  - ] 574d21d2c7690181B73huSzicíliai, sárkány, klasszikus, 8.O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8 - ] 24459a3e46531a0fB73huSzicíliai, sárkány, klasszikus, 8.O-Or1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 4 8 - ] 8fa842dc57c2bf0c B73huSzicíliai, sárkány, klasszikus, 8.O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7 - ] f1dd39e82b31641cB73huSzicíliai, sárkány, klasszikus, 8.O-Ornbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7 - ] c994f44803272ea0B74huSzicíliai, sárkány, klasszikus, 9.Hb3r1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 9  - c 9fe4e7cc0be4da40@B75huSzicíliai, sárkány, jugoszláv támadásrnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7~ - u 954c0a7bdebd33abB76huSzicíliai, sárkány, jugoszláv támadás, 7...O-Ornbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8} - q 750a293e26d69faeB77huSzicíliai, sárkány, jugoszláv támadás, 9.Fc4r1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9| - w afe6924fafae4007B78huSzicíliai, sárkány, jugoszláv támadás, 10.O-O-Or2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10{ - o 8869b3903cc79859YB79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4r1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R b - - 4 12z - o 416da3b2b7e1c8bdB79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4r1r3k1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R w - - 3 12y - o ea369b3dade318f6B79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R b - - 2 11x - o d21bde1efec1176enB79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4r4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/R3K2R w KQ - 1 11w + o b684b4557b336e1B79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4r2q1rk1/pp1bppbp/2np1np1/8/2BNP2P/2N1BP2/PPPQ2P1/R3K2R b KQ - 0 10 v - e ad2226cdb2fee70c B80huSzicíliai védelem, scheveningeni változatrnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 u + c e6f271b5a8b0a11B81huSzicíliai, scheveningeni, Keresz-támadásrnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6t - K 50345bc0ab6fda85B82huSzicíliai, scheveningeni, 6.f4rnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6s - M dea2a534b3dbadafB83huSzicíliai, scheveningeni, 6.fe2rnbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6r +  c5554c754fb5573sB84huSzicíliai, scheveningeni (Paulsen), klasszikus változatrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7-q -  22c4b53d4c4359e8B85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talr1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w kq - 4 9,p -  89296ddf5dd2fcebB85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b kq - 3 8-o -  f75c16eb212127fbB85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R w KQkq - 2 8,n -  f14329ca4d6a68faB85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R b KQkq - 1 7*m -  82c3aa334c4f2259YB85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 7|l - E ce9192e59abd31aaB86huSzicíliai, Szozin-támadásrnbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6k - I b56619216d1624afB87huSzozin ...a6-tal és ...b5-telrnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 8 }i \ T \]B'h - ! 9298abf0be4b265aZB54huSzicíliairnbqkbnr/pp2pp1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5f - ! 7b2cf8abc5c4b411B54huSzicíliairnbqkbnr/pp2pppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4 - k f7d5f38a3e857143CB55huSzicíliai, Prins-változat, Velencei támadásrnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6 - k c40b22255b11e2c0B55huSzicíliai, Prins-változat, Velencei támadásrnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6j - ! db55d4fcaadc775e^B56huSzicíliairnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5w + 9 3388fe7ba6898feB58huSzicíliai, klasszikusr1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6  - ] 1d31bf80389aa602B59huSzicíliai, Boleslavsky-változat, 7.Hb3r1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7} - A b6e25b280bc70995B60huSzicíliai, Richter-Rauzerr1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 6 - s 7c3beaf510240604B61huSzicíliai, Richter-Rauzer, Larsen-változat, 7.Vd2r2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 3 7 - Q c095a91913e599c7B62huSzicíliai, Richter-Rauzer, 6...e6r1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7  - e e88de696d25c4667gB63huSzicíliai, Richter-Rauzer, Rauzer-támadásr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 1 7% -  33d240e0871d310c B64huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9& -  cec43ded9e8c0c85B64huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9.f4r1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9% -  c46cd05a4bd5e56enB64huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9.f4r1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 8) -  9eb1c566eb2c084fOB65huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9...Hxd4r1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 10 - u 3a7a1765357cbebbB66huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8) -  e096ac14bc046112B67huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 8...Fd7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9' +  2575246665eb123#B67huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 8...Fd7r1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8( +  94ca2f66f3ef00a B68huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 9...Fe7r2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10* -  1d80d119a5955c9bB68huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 9...Fe7r2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 9( -  b2105b3eed55ab18B69huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 11.Fxf6r2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 11+ -  172f52ef364bf5f8B69huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 11.Fxf6r2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 11+ -  772b38faade648c5B69huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 11.Fxf6r2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10 - I 32e187a7d153e515B70huSzicíliai, sárkányváltozatrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6  - a cff7faaac8c2d89cB71huSzicíliai, sárkány, Levenfish-változatrnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6 - E 41e93c4b5069fe9bB72huSzicíliai, sárkány, 6.Fe3rnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6 c X A F R ]!7LaQ)9 -  ceaefc1e653a8f1dB31huSzicíliai, Nimzovich-Rossolimo-támadás (...g6-tal, ...d6 nélkül)r1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4u8 - 3 d1f151406ae8a397B32huSzicíliai védelemr1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 37 - q b29582ddabd719e9B33huSzicíliai, Szvesnyikov (Lasker-Pelikan) változatr1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 56 - w fb58fdd1bf4048edB34huSzicíliai védelem, gyors fianchetto, csereváltozatr1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5"5 )  b1fb5640840ff9B35huSzicíliai védelem, gyors fianchetto, modern változat Fc4-gyelr1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7#4 -  63024f7e68c7d95f_B35huSzicíliai védelem, gyors fianchetto, modern változat Fc4-gyelr1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7$3 -  38ec7b8bc53d98c9B35huSzicíliai védelem, gyors fianchetto, modern változat Fc4-gyelr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6"2 -  4be4c06744078347GB35huSzicíliai védelem, gyors fianchetto, modern változat Fc4-gyelr1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 61 - { 8cec7a573ead61333B36huSzicíliai védelem, gyors fianchetto, Maróczy-kötésr1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5!0 -  3c5047e1c5eaaa99B37huSzicíliai védelem, gyors fianchetto, Maróczy-kötés, 5...Fg7r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6 / -  4f58fc0d44d0b117B38huSzicíliai védelem, gyors fianchetto, Maróczy-kötés, 6.Fe3r1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 6. - { 72028b3c2682e3344B39huSzicíliai védelem, gyors fianchetto, Breyer-változatr1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 8- - { ef21d05a2bc87258XB39huSzicíliai védelem, gyors fianchetto, Breyer-változatr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 7, - { 14b6c8f8e92af081B39huSzicíliai védelem, gyors fianchetto, Breyer-változatr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7u+ - 3 c95e54397292bb84B40huSzicíliai védelemrnbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3x* - ? e6166d08e8be95f2B41huSzicíliai, Kan-változatrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5v) - 9 b31bccaad13e5781B42huSzicíliai, Kan, 5.Fd3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 5v( - 9 1d8175aa2a5c172b+B43huSzicíliai, Kan, 5.Hh3rnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5r' - 3 9f0c44191e0fc82d-B44huSzicíliai védelemr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5& - I 649b5cbbdced4af4B45huSzicíliai, Tajmanov-változatr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5% - I b66cad483bcdb228(B46huSzicíliai, Tajmanov-változatr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6 $ - c 6284639ab0a605f5B47huSzicíliai, Tajmanov (Basztrikov) változatr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6# - I 118cd876319c1e7b{B48huSzicíliai, Tajmanov-változatr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6" - I b0fbaa7cd799ac04B49huSzicíliai, Tajmanov-változatr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7! - U b54de1c6dd5cf1388B51huSzicíliai, Canal-Sokolsky-támadásrnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3 - g 578c1f9407062109 B52huSzicíliai, Canal-Sokolsky-támadás, 3...Fd7rn1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4} - K 610fb232e064c902B53huSzicíliai, Chekhover-változatrnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4 v }     }{lX - - d9d2afa550eb0000B02huAljehin-védelemrnbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2sW - 7 b98e490b8bfe7e93B03huAljehin-védelem 3.d4rnbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3V - Q 5b50339c316056c3B04huAljehin-védelem, modern változatrnbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4U - c 5983f9ae76e55829)B05huAljehin-védelem, modern változat, 4...Fg4rn1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5xT - A 6b88c80b869ed3ddB06huRobatsch (modern)-védelemrnbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2oS - ' deca0ecc51b8e6f6B07huPirc-védelemrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3 R - [ ec1ab16142d11580B08huPirc, klasszikus (kétcsikós) rendszerrnbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4zQ - = ca68209a33a649344B09huPirc, osztrák támadásrnbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4oP - 1 104676bf8ad1922d-B10huCaro-Kann védelemrnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2O - K b70c6acdfb843105B11huCaro-Kann, kétcsikós, 3...Fg4rn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 2 4oN - 1 d57359159b18bf6foB12huCaro-Kann védelemrnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2vM - ? 77c6714cdda3b34fOB13huCaro-Kann, csereváltozatrnbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3 L - e 5e9b9f4749fc46efB14huCaro-Kann, Panov-Botvinnik-támadás, 5...e6rnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6sK - 1 ab8e63a3c52e7390B15huCaro-Kann védelemrnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3J - W 3ecf958145a4756clB16huCaro-Kann, Bronstein-Larsen-változatrnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6{I - G fa25b904ac89bf9bB17huCaro-Kann, Steinitz-változatr1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5~H - K 4adfabd7fbc45bdaB18huCaro-Kann, klasszikus változatrn1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5G - I 41ae97c7b9f29a70pB19huCaro-Kann, klasszikus, 7...Hd7r2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R w KQkq - 2 8F - I 724dec9a595a77bcB19huCaro-Kann, klasszikus, 7...Hd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7E - I a929006c31bc1681B19huCaro-Kann, klasszikus, 7...Hd7rn1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7qD - 3 644d4afe02564aebB20huSzicíliai védelemrnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2 C - e 1297b266d226456dmB22huSzicíliai védelem, Alapin-változat (2.c3)rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2pB - / 9fda525cc0b4c8322B23huSzicíliai, zártrnbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2tA - / 18d131ff31f2b509 B24huSzicíliai, zártr1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3v@ - / 633729db6a3fc628(B25huSzicíliai, zártr1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6v? - / 5a8dbfbab8478f45EB25huSzicíliai, zártr1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR b KQkq - 0 5~> - = 103f9237eb05dda6B26huSzicíliai, zárt, 6.Fe3r1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6s= - 3 bf29a6086ab02bd6B27huSzicíliai védelemrnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2}< - G 6dde57fb8d90d30a B28huSzicíliai, O'Kelly-változatrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3 ; - a e4c792fdc74a6a40@B29huSzicíliai, Nimzovich-Rubinstein-változatrnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3u: - 3 14c47eea7b218ed5B30huSzicíliai védelemr1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 qz N )  q J4K_#Mqt - { 6d26769dab01d743CA88huHolland védelem, leningrádi, fö változat 7...c6-talrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7s - { 96b16e3f69e3559aA88huHolland védelem, leningrádi, fö változat 7...c6-talrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7r - { af0bf85ebb9b1cf7A88huHolland védelem, leningrádi, fö változat 7...c6-talrnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6q - { 2328677af894b7f0A88huHolland védelem, leningrádi, fö változat 7...c6-talrnbq1rk1/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 4 6p - { 29808acd2dcd5e1bA88huHolland védelem, leningrádi, fö változat 7...c6-talrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 5o - { 57f5f1f9513e850b A88huHolland védelem, leningrádi, fö változat 7...c6-talrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5n - { e749cc4faa794ea1A88huHolland védelem, leningrádi, fö változat 7...c6-talrnbqkb1r/ppppp2p/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4m - u c6cbae7fba907240@A89huHolland védelem, leningrádi, fö változat Hc6-talr1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8rl - - 2fcd1ef7e23d8682A90huHolland védelemrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4rk - - 9a3d3d8aafd05efbA90huHolland védelemrnbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4pj - - c1d3097f022a1f6dmA90huHolland védelemrnbqkbnr/pppp2pp/4p3/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3qi - - 3b016d1828962a13A91huHolland védelemrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5qh - - eacd6c599529a2c5A92huHolland védelemrnbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 5 6qg - - e06581ee40704b2e.A92huHolland védelemrnbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 4 5f - m 9d74552daf835c9eA93huHolland védelem, Stonewall, Botwinnik-változatrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7e - a ad1d698452931e4cLA94huHolland védelem, Dutch, Stonewall Ba3-malrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8 d + a f0eb8c2d8438f25%A94huHolland védelem, Dutch, Stonewall Ba3-malrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8c - a 783fc034c02c6691A95huHolland védelem, Dutch, Stonewall Hc3-malrnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 b - a 71c3d015160fa999A95huHolland védelem, Dutch, Stonewall Hc3-malrnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 a - a aaa73ce37ee9c8a4A95huHolland védelem, Dutch, Stonewall Hc3-malrnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5` - g ad02810c3ba230b8A96huHolland védelem, Dutch, klasszikus változatrnbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7_ - a ad1415bcca6297dcA97huHolland védelem, Ilyin-Genevsky változatrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 ^ - a bb0dbc699c1b0493A97huHolland védelem, Ilyin-Genevsky változatrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3 ] - a 97eb07287cccdcabA97huHolland védelem, Ilyin-Genevsky változatrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 3\ - q 1c0d67a1d8b4abb8A98huHolland védelem, Ilyin-Genevsky változat Vc2-velrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 8[ - o 21b275e810effcb1A99huHolland védelem, Ilyin-Genevsky változat b3-malrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8tZ - = 823c9b50fd114196B00huKirálygyalog megnyitásrnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1pY + 3 756b94461c50fb0B01huSkandináv védelemrnbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2 I_< $ - ' D 6,{rH=;Ik - % 8ddebe653f1f295f_A65huBenoni, 6.e4rnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6 - G 5d7b9d7bb6813b97A66huBenoni, gyalogroham változatrnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 7~ - G a06de076af10061eA66huBenoni, gyalogroham változatrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7| - A de197162285263beA67huBenoni, Tajmanov változatrnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8 - K 3c0ba18cf07978ebA68huBenoni, négygyalogos támadásrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 9 - K 36a34c3b25209100A68huBenoni, négygyalogos támadásrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8 - g 53dae535c32cd7caA69huBenoni, négygyalogos támadás, föváltozatrnbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 1 10 - g 4f8b2275f15c3248HA69huBenoni, négygyalogos támadás, föváltozatrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9 - Q 7b090c80c7f66723#A70huBenoni, klasszikus, e4 és Hf3-malrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7{ + ? def66008c3b7741AA71huBenoni, klasszikus, 8.Bg5rnbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 2 8 - Q b29d5f78e8cd0fc1A72huBenoni, klasszikus, 9.O-O nélkülrnbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9{ - ? cce8244c943ed4d1A73huBenoni, klasszikus, 9.O-Ornbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9 - O 75d6ab531e8df9c3A74huBenoni, klasszikus, 9...a6, 10.a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10 - O 1e1fd5bf731e2c0d A74huBenoni, klasszikus, 9...a6, 10.a4rnbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10 - a 770561615908f729)A75huBenoni, klasszikus ...a6 és 10...Fg4-gyelrn1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11} - C d0b9e30ca64e3153SA76huBenoni, klasszikus, 9...Be8rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10 + S d9b78eb64f30fd9A77huBenoni, klasszikus, 9...Be8, 10.Hd2rnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10 - Y 431bd37be20c9365eA78huBenoni, klasszikus, Be8 és ...Ha6-talr1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 7 11} - ? 2daa354a42c67c14A79huBenoni, klasszikus, 11.f3r1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11l - - 1761df2bb9d0fc00A80huHolland védelemrnbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2o~ - - 3b87646a590724388A81huHolland védelemrnbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2s} - 9 d366d2635250410a A82huHolland, Staunton-cselrnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2 | - a 77560104c9136646FA83huHolland, Staunton-csel, Staunton-változatrnbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4m{ - - 9b42400ffadf5707A84huHolland védelemrnbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2z - M 3b3b6c5895c79448HA85huHolland védelem, 2.c4 és 3.Hc3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3y - K ec4acfbbb7f2cea9A86huHolland védelem, 2.c4 és 3.g3rnbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3 x - e dbd66edd12312e0c A87huHolland védelem, leningrádi, fö változatrnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5 w ) e b2822b7ad74f311A87huHolland védelem, leningrádi, fö változatrnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5v - e b00ebf9d8190849bA87huHolland védelem, leningrádi, fö változatrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4u - { ff5c9b72dcc104f8A88huHolland védelem, leningrádi, fö változat 7...c6-talrnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8 t S 7 & " "1Jb} j1 - # 68beea8b14611b52RA57huBenkö-cselrnbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4r0 - 9 39a691df7150ed3e>A58huElfogadott Benkö-cselrnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5q/ - / d1eda6f64269a376vA59huBenkö csel, 7.e4rn1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7p. - / 15eaabbea9e91e7c|A59huBenkö csel, 7.e4rn1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7o- - / 2c503ddf7b915711A59huBenkö csel, 7.e4rn1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6n, - / d7c7257db973d5c8A59huBenkö csel, 7.e4rn1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6o+ - + 7ecd72af97ee363d=A60huBenoni védelemrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4q* - + bf0e01c82c76da29)A61huBenoni védelemrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7p) - + 56ba529357f94862bA61huBenoni védelemrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6o( - + ad2d4a31951bcabbA61huBenoni védelemrnbqkb1r/pp3ppp/3p1n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6o' - + 9497dc50476383d6A61huBenoni védelemrnbqkb1r/pp1p1ppp/5n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5q& - + 9abd479de5ad97cbA61huBenoni védelemrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5|% - E 9c0c49f5af52f829)A62huBenoni, Fianchetto változatrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 4 9~$ - E 96a4a4427a0b11c2A62huBenoni, Fianchetto változatrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 8~# - E 4dc048b412ed70ffA62huBenoni, Fianchetto változatrnbqk2r/pp3pbp/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 8~" - E fd7c7502e9aabb55UA62huBenoni, Fianchetto változatrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 7~! - E 488c567fa447632c,A62huBenoni, Fianchetto változatrnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 7} - E a1380524dfc8f167gA62huBenoni, Fianchetto változatrnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 1 6| - E 5aaf1d861d2a73beA62huBenoni, Fianchetto változatrnbqkb1r/pp3ppp/3p1n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 6| - E 63158be7cf523ad3A62huBenoni, Fianchetto változatrnbqkb1r/pp1p1ppp/5n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 5~ - E 6d3f102a6d9c2eceA62huBenoni, Fianchetto változatrnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 5~ - E 522bc9ee7739ee05A62huBenoni, Fianchetto változatrnbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 4~ - E e8238abdee1f7858XA62huBenoni, Fianchetto változatrnbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4  - Y d19a499c3309cef5A63huBenoni, Fianchetto változat, 9...Hbd7r1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 6 10 - Y e27932c1d3a123399A63huBenoni, Fianchetto változat, 9...Hbd7rnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 5 9  - Y a9d79a24497738efA64huBenoni, Fianchetto változat, 11...Re8r1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 3 12  - Y b5865d647b07dd6dmA64huBenoni, Fianchetto változat, 11...Re8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 2 11  - Y 68a4c683b9bae3e7A64huBenoni, Fianchetto változat, 11...Re8r1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 w - - 1 11  - Y 5b47bdde59120e2b+A64huBenoni, Fianchetto változat, 11...Re8rnbq1rk1/1p3pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 b - - 0 10  - Y 308ec3323481dbe5A64huBenoni, Fianchetto változat, 11...Re8rnbq1rk1/1p3pbp/p2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10l - % 49d9b32dd49f9455UA65huBenoni, 6.e4rnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6   3 <  /HLbG2" }P - I d7fec030683bde3f?A34huAngol megnyitás, szimmetrikusrnbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2O - I 7c1318d279aa7b3c - 7 68ed28a13cc746eeA47huVezérindiai védelemrnbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3 = - g ea3032eab9cb633e>A48huKirályindiai védelem, kelet-indiai védelemrnbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3< - W c6d689ab591cbb06A49huKirályindiai, Fianchetto c4 nélkülrnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3q; - 5 54c31263e9ad3b4fOA50huVezérgyalog játékrnbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2~: - K debb1a297a48c379yA51huElhárított Budapesti védelemrnbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3p9 - 1 df05be0d7f37e565eA52huBudapesti védelemrnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4p8 - / 6d7984023bd57222"A53huÓindiai védelemrnbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3}7 - A 1c9694ea6ad208cdA54huÓindiai, ukrán változatrnbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4{6 - 9 30160e09091c39366A55huÓindiai, föváltozatr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5y5 - 9 eb72e2ff61fa580b A55huÓindiai, föváltozatr1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5w4 - 9 610aeab5f21fa03d=A55huÓindiai, föváltozatr1bqkb1r/pppnpppp/3p1n2/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4w3 - 9 a50de7fd199f1d377A55huÓindiai, föváltozatr1bqkb1r/pppnpppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4n2 - + b2b2c3cd16ea30322A56huBenoni védelemrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 wo h g F vZ6#>zm - ? 8aca4a650ce1c056VA12huAngol, Caro-Kann védelemrnbqkbnr/pp2pppp/2p5/3p4/2P5/1P3N2/P2PPPPP/RNBQKB1R b KQkq - 0 3xl + ? 66c2a31d66cab3b;A12huAngol, Caro-Kann védelemrnbqkbnr/pp2pppp/2p5/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R w KQkq - 0 3nk - - bc6ffb0d4dbcc7c9A13huAngol megnyitásrnbqkbnr/pppp1ppp/4p3/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2j - K 4a2091fd0f16de84A14huAngol, elhárított újkatalánrnbqk2r/ppp1bppp/4pn2/3p4/2P5/5NP1/PP1PPPBP/RNBQ1RK1 b kq - 3 5i - Y 91f63dc9f864160d A15huAngol, 1...Hf6 (Anglo-indiai védelem)rnbqkb1r/pppppppp/5n2/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 1 2ph - - 6a61256b3a8694d4A16huAngol megnyitásrnbqkb1r/pppppppp/5n2/8/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 2 2g - Y 1c16d75a22a40486A17huAngol megnyitás, sündisznó védelemrnbqkb1r/pppp1ppp/4pn2/8/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 0 3 f - _ d811da12c924b98cA18huAngol megnyitás, Mikenas-Carls változatrnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 3e - w 3e600bbc3663b2f1A19huAngol megnyitás, Mikenas-Carls, szicíliai változatrnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4nd - - 40600176c67bafadA20huAngol megnyitásrnbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2oc - - bbf719d404992d74tA21huAngol megnyitásrnbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2rb - - e0192d21a9636ce2A22huAngol megnyitásrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3a - s 5e857b8f3e746761aA23huAngol megnyitás, Brémai rendszer, Keres-változatrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4` - g 254bc53b323b2691A24huAngol megnyitás, Brémai rendszer 3...g6-talrnbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 4_ - [ 101ac13615088877wA25huAngol megnyitás, fordított szicíliair1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 3^ - M 471a6253ae12236enA26huAngol megnyitás, zárt rendszerr1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR w KQkq - 0 6 ] - a cb7e2dc07deee94aJA27huAngol megnyitás, háromhuszáros rendszerr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3\ - _ 90901935d014a8dcA28huAngol megnyitás, négyhuszáros rendszerr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 4 [ - _ 3b7dc1d7c1850ddfA28huAngol megnyitás, négyhuszáros rendszerrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 3%Z -  bc76a27430c370e4A29huAngol megnyitás, négy huszáros, királyszárnyi Fianchettor1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4Y - ] 2c69d892aad95ce6A30huAngol megnyitás, szimmetrikus változatrnbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2X - m 69d62f3b7e0c510fA31huAngol megnyitás, szimmetrikus, Benoni változatrnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3}W - I 272b3a620aeb3ab5A32huAngol megnyitás, szimmetrikusrnbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5|V - I 515cc85312c9aae7A32huAngol megnyitás, szimmetrikusrnbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4~U - I 36c8950e03f838c9A32huAngol megnyitás, szimmetrikusrnbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4T - I 7751fa22d9981d6foA33huAngol megnyitás, szimmetrikusr1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 0 6~S + I 1260813c1ba8d3d=A33huAngol megnyitás, szimmetrikusr1bqkb1r/pp1ppppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 5R - I 66b2554ed08b1f13A33huAngol megnyitás, szimmetrikusr1bqkb1r/pp1ppppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5Q - I 39acef7bad7f76d5A33huAngol megnyitás, szimmetrikusr1bqkb1r/pp1ppppp/2n2n2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4  i u   3(m\0& - 7ed92ead1f9394b490E89frDéfense est-indienneVariante Sämisch, fermée, ligne principalernbq1rk1/pp3pbp/3p1np1/3pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 9& - 7eaa5e025633feb92a*E89frDéfense est-indienneVariante Sämisch, fermée, ligne principalernbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 0 8 - 7Od08513f3fa99752d-E90frDéfense est-indienneLigne principale, défenses raresrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5  - 71a9ad7dbd2ee5d665eE91frDéfense est-indienneVariante orthodoxernbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2N2/PP2BPPP/R1BQK2R b KQ - 3 6  - 7123d575f7bd002e53SE92frDéfense est-indienneVariante orthodoxernbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQK2R w KQ - 0 7  - 7Waa3e4df9c48e55c2E93frDéfense est-indienneVariante Petrossian, défense normaler1bq1rk1/pppn1pbp/3p1np1/3Pp3/2P1P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 1 8  - 715da00ec3c1f3f543CE94frDéfense est-indienneVariante orthodoxernbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 1 7 - 71eaf77b15a6f3b39bE95frDéfense est-indienneVariante orthodoxer1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 b - - 3 88 - 78d17a0c2b38a2613E96frDéfense est-indienneVariante orthodoxe, défense positionnelle, ligne principaler1bq1rk1/1p1n1pbp/2pp1np1/p3p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 w - - 0 106~ + 7b0d1503d0162a83E96frDéfense est-indienneVariante orthodoxe, défense positionnelle, ligne principaler1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP3PPP/R1BQRBK1 b - - 1 97} - 7788d96fad1336020 E96frDéfense est-indienneVariante orthodoxe, défense positionnelle, ligne principaler1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQR1K1 w - - 0 9&| - 7gf64dd621d0625040@E97frDéfense est-indienneVariante orthodoxe, défense Aronin-Taïmanovr1bq1rk1/ppp2pbp/2np1np1/4p3/2PPP3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 2 8{ - 7Ydfc12ba3297d16efE98frDéfense est-indienneVariante orthodoxe, système classiquer1bq1rk1/ppp1npbp/3p1np1/3Pp3/2P1P3/2N5/PP2BPPP/R1BQNRK1 b - - 2 99z - 7dc58a8ad9af3ddb5E99frDéfense est-indienneVariante orthodoxe, système classique, ligne traditionneller1bq1rk1/pppnn1bp/3p2p1/3Ppp2/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 w - - 0 117y - 74837ce34247bf06bkE99frDéfense est-indienneVariante orthodoxe, système classique, ligne traditionneller1bq1rk1/pppnnpbp/3p2p1/3Pp3/2P1P3/2N2P2/PP2B1PP/R1BQNRK1 b - - 0 10mx - / ca9df64ccc1c97f1A01huLarsen megnyitásrnbqkbnr/pppppppp/8/8/8/1P6/P1PPPPPP/RNBQKBNR b KQkq - 0 1jw - + bb2deb150f00c115A02huBird megnyitásrnbqkbnr/pppppppp/8/8/5P2/8/PPPPP1PP/RNBQKBNR b KQkq - 0 1uv - = 3e47c90193d48f333A03huBird megnyitása, 1...d5rnbqkbnr/ppp1pppp/8/3p4/5P2/8/PPPPP1PP/RNBQKBNR w KQkq - 0 2lu - - 9d5f7aee7e779da1A04huRéti megnyitásrnbqkbnr/pppppppp/8/8/8/5N2/PPPPPPPP/RNBQKB1R b KQkq - 1 1vt - ? c6b14e1bd38ddc377A05huRéti megnyitás, 2...Hf6rnbqkb1r/pppppppp/5n2/8/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 2 2vs - = 183558fae2a3d387A06huRéti megnyitás, 2...d5rnbqkbnr/ppp1pppp/8/3p4/8/5N2/PPPPPPPP/RNBQKB1R w KQkq - 0 2r -  34d3e3bb02740bbfA07huRéti megnyitás, Királyindiai támadás (Barcza-rendszer)rnbqkbnr/ppp1pppp/8/3p4/8/5NP1/PPPPPP1P/RNBQKB1R b KQkq - 0 2q - _ 67521168b0ded8bbA08huRéti megnyitás, Királyindiai támadásrnbqkbnr/pp2pppp/8/2pp4/8/5NP1/PPPPPPBP/RNBQK2R b KQkq - 1 3}p - G 9416c7dea1ac7880A09huRéti megnyitás, 2...d5 3.c4rnbqkbnr/ppp1pppp/8/3p4/2P5/5N2/PP1PPPPP/RNBQKB1R b KQkq - 0 2lo - - ca18093c559e579bA10huAngol megnyitásrnbqkbnr/pppppppp/8/8/2P5/8/PP1PPPPP/RNBQKBNR b KQkq - 0 1vn - ? 5862e4d3225e8420 A11huAngol, Caro-Kann védelemrnbqkbnr/pp1ppppp/2p5/8/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2 P) P k *WmN g6 - 7- f65c642cab87e077wE70frDéfense est-indienneLigne principalernbqk2r/ppppppbp/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4  - 71e31222bb50dcdde2E71frDéfense est-indienneVariante Makagonovrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N4P/PP3PP1/R1BQKBNR b KQkq - 0 5 - 7W2707444472a8cc28(E72frDéfense est-indienneLigne principale, fianchetto retardérnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N3P1/PP3P1P/R1BQKBNR b KQkq - 0 5! - 7_78617cfc935a5eb3E73frDéfense est-indienneLigne principale, développement standardrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N5/PP2BPPP/R1BQK1NR b KQkq - 1 5 - 7Q52e217d309ce67edE74frDéfense est-indienneVariante Averbakh, défense Benonirnbq1rk1/pp2ppbp/3p1np1/2p3B1/2PPP3/2N5/PP2BPPP/R2QK1NR w KQ - 0 7 - 7S9e9da6b188ca61e2E75frDéfense est-indienneVariante Averbakh, ligne principalernbq1rk1/pp3pbp/3ppnp1/2pP2B1/2P1P3/2N5/PP2BPPP/R2QK1NR w KQ - 0 8  - 73 f6f782088bee2999E76frDéfense est-indienneAttaque des 4 pionsrnbqk2r/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 5  - 738fdfec465f928ad1E77frDéfense est-indienneAttaque des 4 pionsrnbq1rk1/ppp1ppbp/3p1np1/8/2PPPP2/2N5/PP2B1PP/R1BQK1NR b KQ - 0 6 - 7Sb2cad11ec833e091E78frDéfense est-indienneAttaque des 4 pions, attaque fluidernbq1rk1/pp2ppbp/3p1np1/2p5/2PPPP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 1 7  - 7]52a55578345da5f4E79frDéfense est-indienneAttaque des 4 pions, variante d'échanger1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N1B3/PP2B1PP/R2QK2R b KQ - 2 9 - 7] 21adee94b567be7azE79frDéfense est-indienneAttaque des 4 pions, variante d'échanger1bq1rk1/pp2ppbp/2np1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R w KQ - 1 9 - 7] 8a403676a4f61b79yE79frDéfense est-indienneAttaque des 4 pions, variante d'échangernbq1rk1/pp2ppbp/3p1np1/8/2PNPP2/2N5/PP2B1PP/R1BQK2R b KQ - 0 8 - 7]edd46b2bb5c78957WE79frDéfense est-indienneAttaque des 4 pions, variante d'échangernbq1rk1/pp2ppbp/3p1np1/8/2PpPP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 0 8 - 7/6550193432b5fb61aE80frDéfense est-indienneVariante Sämischrnbqk2r/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR b KQkq - 0 5 - 7S 6ff8f483e7ec128aE81frDéfense est-indienneVariante Sämisch, défense normalernbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N2P2/PP4PP/R1BQKBNR w KQ - 1 6 - 7U7799067f9855be9fE82frDéfense est-indienneVariante Sämisch, double fianchettornbq1rk1/p1p1ppbp/1p1p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7 - 7U 1cf04f6f66d60904E82frDéfense est-indienneVariante Sämisch, double fianchettornbq1rk1/ppp1ppbp/3p1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR b KQ - 2 6 - 7Ob71d978d7747ac07E83frDéfense est-indienneVariante Sämisch, défense Yatesr1bq1rk1/ppp1ppbp/2np1np1/8/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 3 7$ - 7_c1f569de2fcb31efE84frDéfense est-indienneVariante Sämisch, ligne principale Panno1rbq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R w KQ - 2 9$ - 7_5956c23e79f58685E84frDéfense est-indienneVariante Sämisch, ligne principale Pannor1bq1rk1/1pp1ppbp/p1np1np1/8/2PPP3/2N1BP2/PP1QN1PP/R3KB1R b KQ - 1 8 - 7W96884725f533f1322E85frDéfense est-indienneVariante Sämisch, variante orthodoxernbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 7 - 7/10564105aad82f77wE86frDéfense est-indienneVariante Sämischrnbq1rk1/pp3pbp/2pp1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R w KQ - 0 8 - 7/822caceadd18fcccE86frDéfense est-indienneVariante Sämischrnbq1rk1/ppp2pbp/3p1np1/4p3/2PPP3/2N1BP2/PP2N1PP/R2QKB1R b KQ - 1 7 - 7A2c8004766c15676foE87frDéfense est-indienneVariante Sämisch, ferméernbq1rk1/ppp2pbp/3p1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR b KQ - 0 7+ - 7qbefae9991bd5b4d4E88frDéfense est-indienneVariante Sämisch, variante orthodoxe avec 7.d5 c6rnbq1rk1/pp3pbp/2pp1np1/3Pp3/2P1P3/2N1BP2/PP4PP/R2QKBNR w KQ - 0 8 w | 5 B (1|]]8 - ;W bce451b3442e6dc1E52frDéfense Nimzo-indienneLigne principale, défense Schlechterrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 1 67 - ;S 5a95801dbb6966bcE53frDéfense Nimzo-indienneLigne principale, système Gligoricrnbq1rk1/pp3ppp/4pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7+6 - ;s bf5cf670aa975084E54frDéfense Nimzo-indienneLigne principale, système Gligoric, échange en c4rnbq1rk1/pp3ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 b - - 0 8*5 - ;s f6e6c21b95a4534fOE54frDéfense Nimzo-indienneLigne principale, système Gligoric, échange en c4rnbq1rk1/pp3ppp/4pn2/2p5/1bpP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 0 804 - ;{8cbf8d2d4a3fbd48HE55frDéfense Nimzo-indienneLigne principale, système Gligoric, variante Bronsteinr1bq1rk1/pp1n1ppp/4pn2/2p5/1bBP4/2N1PN2/PP3PPP/R1BQ1RK1 w - - 1 923 - ;{8f0d23cbd60b18afE56frDéfense Nimzo-indienneLigne principale, système Gligoric, défense Bernsteinr1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/2NBPN2/PP3PPP/R1BQ1RK1 w - - 2 8.2 - ;w 2e7d03da2fa32ba5E58frDéfense Nimzo-indienneLigne principale, défense Berstein, ligne d'échanger1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1PBPN2/5PPP/R1BQ1RK1 b - - 0 901 - ;w65a869eb82ffc4e5E58frDéfense Nimzo-indienneLigne principale, défense Berstein, ligne d'échanger1bq1rk1/pp3ppp/2n1pn2/2pp4/2PP4/P1bBPN2/1P3PPP/R1BQ1RK1 w - - 0 910 - ;w449112ed9f4796efE58frDéfense Nimzo-indienneLigne principale, défense Berstein, ligne d'échanger1bq1rk1/pp3ppp/2n1pn2/2pp4/1bPP4/P1NBPN2/1P3PPP/R1BQ1RK1 b - - 0 8/ - ;S b5c10e8342aec68dE59frDéfense Nimzo-indienneLigne principale, défense Bersteinr1bq1rk1/pp3ppp/2n1pn2/2p5/2BP4/P1P1PN2/5PPP/R1BQ1RK1 b - - 0 10. - ;S fc7b3ae87d9dc546FE59frDéfense Nimzo-indienneLigne principale, défense Bersteinr1bq1rk1/pp3ppp/2n1pn2/2p5/2pP4/P1PBPN2/5PPP/R1BQ1RK1 w - - 0 10s- - 7 bd7741389222a904E60frDéfense est-indiennernbqkb1r/pppppp1p/5np1/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3v, - 7 46e0599a50c02bddE61frDéfense est-indiennernbqkb1r/pppppp1p/5np1/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3 + - 733864a5faf1ce101fE62frDéfense est-indienneFianchetto retardérnbqk2r/ppp1ppbp/3p1np1/8/2PP4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 5* - 7A80533915e338a742BE63frDéfense est-indienneFianchetto, variante Pannor1bq1rk1/1pp1ppbp/p1np1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8$) - 7c614dba9e963d2af0E64frDéfense est-indienneFianchetto, variante yougoslave, ligne rarernbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 0 7( - 7K1f38c1aaeacef1e0E65frDéfense est-indienneFianchetto, variante yougoslavernbq1rk1/pp2ppbp/3p1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7(' + 7kedd5a1b6279c2beE66frDéfense est-indienneFianchetto, variante yougoslave, ligne avancéer1bq1rk1/pp2ppbp/2np1np1/2pP4/2P5/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 0 8)& - 7kb4d51948fb5f54e3E66frDéfense est-indienneFianchetto, variante yougoslave, ligne avancéer1bq1rk1/pp2ppbp/2np1np1/2p5/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8% - 7Gb4df106d89d2cc41AE67frDéfense est-indienneFianchetto, défense Debrecenr1bq1rk1/pppnppbp/3p1np1/8/2PP4/2N2NP1/PP2PPBP/R1BQK2R w KQ - 2 7$ - 7I84d56e5b8d44526dmE68frDéfense est-indienneFianchetto, variante classiquer1bq1rk1/pppn1pbp/3p1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 b - - 0 8*# - 7mfe5c5e0a38274824$E69frDéfense est-indienneFianchetto, variante classique, ligne principaler1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NPP/PP3PB1/R1BQ1RK1 b - - 0 9+" - 7m16af83b4fa8481d6E69frDéfense est-indienneFianchetto, variante classique, ligne principaler1bq1rk1/pp1n1pbp/2pp1np1/4p3/2PPP3/2N2NP1/PP3PBP/R1BQ1RK1 w - - 0 9! - 7- 325b696440075d7d}E70frDéfense est-indienneLigne principalernbqk2r/ppppppbp/5np1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 \> Y } Ix8TyD!Q - ;[7b83e1f9186385edE31frDéfense Nimzo-indienneVariante de Léningrad, défense Benonirnbqk2r/pp3pp1/3ppn1p/2pP4/1bP4B/2N5/PP2PPPP/R2QKBNR w KQkq - 0 7 P - ;1 a17be3eb6a4cdd82E32frDéfense Nimzo-indienneVariante classiquernbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 3 4 O + ;Ya963b097bdd7881E33frDéfense Nimzo-indienneVariante classique, variante de Zurichr1bqk2r/pppp1ppp/2n1pn2/8/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 4 5N - ;M2411c1fff69893a4E34frDéfense Nimzo-indienneVariante classique, variante Noarnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5M - ;M 152f83f64ef34772rE35frDéfense Nimzo-indienneVariante classique, variante Noarnbqk2r/ppp2ppp/5n2/3p4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 6L - ;M2a3b5a32545687b9E35frDéfense Nimzo-indienneVariante classique, variante Noarnbqk2r/ppp2ppp/4pn2/3P4/1b1P4/2N5/PPQ1PPPP/R1B1KBNR b KQkq - 0 5K - ;Mef8df0d9bfd41de4E36frDéfense Nimzo-indienneVariante classique, variante Noarnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N5/1PQ1PPPP/R1B1KBNR b KQkq - 0 5J - ;M e249c99f81c0d1bbE37frDéfense Nimzo-indienneVariante classique, variante Noarnbqk2r/ppp2ppp/4p3/3p4/2PPn3/P7/1PQ1PPPP/R1B1KBNR b KQkq - 2 7"I - ;[470a3245950bd6ffE38frDéfense Nimzo-indienneVariante classique, variante berlinoisernbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N5/PPQ1PPPP/R1B1KBNR w KQkq - 0 5.H - ;y 3241fd22a34e6878xE39frDéfense Nimzo-indienneVariante classique, variante berlinoise, variante Pircrnbq1rk1/pp1p1ppp/4pn2/2P5/1bP5/2N5/PPQ1PPPP/R1B1KBNR w KQ - 1 6G - ;- bd4fd3445cc56942BE40frDéfense Nimzo-indienneLigne principalernbqk2r/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 F - ;-5b3e02eaa382623f?E41frDéfense Nimzo-indienneVariante Hübnerrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5!E - ;W4f9ae9258ba96fc1E42frDéfense Nimzo-indienneVariante Hübner, variante Rubinsteinrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5D - ;Ed6269a54a246ded9E43frDéfense Nimzo-indienneVariante de Saint-Petersburgrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5 C - ;-c282719b8a6dd327'E44frDéfense Nimzo-indienneVariante Fischerrnbqk2r/p1pp1ppp/1p2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R b KQkq - 1 5B + ;Ud92237fc14cd1d9E45frDéfense Nimzo-indienneLigne principale, variante Bronsteinrn1qk2r/p1pp1ppp/bp2pn2/8/1bPP4/2N1P3/PP2NPPP/R1BQKB1R w KQkq - 2 6A - ;- b7e73ef3899c80a9E46frDéfense Nimzo-indienneLigne principalernbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1P3/PP3PPP/R1BQKBNR w KQ - 1 5@ - ;M e2ea9f51b01c42daE47frDéfense Nimzo-indienneLigne principale, attaque du fournbq1rk1/pppp1ppp/4pn2/8/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQ - 2 5-? - ;u 6780bd452cc80cfcE48frDéfense Nimzo-indienneLigne principale, attaque du fou, défense classiquernbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQ - 0 6> - ;U c6f09d54d5603ff6E49frDéfense Nimzo-indienneLigne principale, système Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1PBP3/5PPP/R1BQK1NR b KQ - 0 7= - ;U 8d25f765783cd0b6E49frDéfense Nimzo-indienneLigne principale, système Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQ - 0 7< - ;Uac1c8c63658482bcE49frDéfense Nimzo-indienneLigne principale, système Botvinnikrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQ - 0 6y; - ; 6c83d205e17ae194E50frDéfense Nimzo-indiennernbq1rk1/pppp1ppp/4pn2/8/1bPP4/2N1PN2/PP3PPP/R1BQKB1R b KQ - 2 5: - ;Qe9e9f0117daeafb2E51frDéfense Nimzo-indienneLigne principale, défense Ragozinrnbq1rk1/ppp2ppp/4pn2/3p4/1bPP4/2N1PN2/PP3PPP/R1BQKB1R w KQ - 0 69 - ;Wd78d18a3baadda5aZE52frDéfense Nimzo-indienneLigne principale, défense Schlechterrnbq1rk1/p1p2ppp/1p2pn2/3p4/1bPP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 0 7 umL ' z ` H)wZ#Cul - ;Ecb067d00107c80dbE21frDéfense Nimzo-indienneVariante des trois cavaliersrnbqk2r/pppp1ppp/4pn2/8/1bPP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4 k - ;1 2a9b324e4da14900E22frDéfense Nimzo-indienneVariante Spielmannrnbqk2r/pppp1ppp/4pn2/8/1bPP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 3 4 j - ;W18e419d2406bb012E23frDéfense Nimzo-indienneVariante Spielmann, gambit Romanovskyr1bqk2r/pp1p1ppp/2n1pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR w KQkq - 1 6i - ;Wb309c13051fa1511E23frDéfense Nimzo-indienneVariante Spielmann, gambit Romanovskyrnbqk2r/pp1p1ppp/4pn2/2P5/1bP5/1QN5/PP2PPPP/R1B1KBNR b KQkq - 0 5h - ;Wcceae3e0b2e6427d}E23frDéfense Nimzo-indienneVariante Spielmann, gambit Romanovskyrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/1QN5/PP2PPPP/R1B1KBNR w KQkq - 0 5g - ;Ib112b1e78132d2ecE24frDéfense Nimzo-indienneVariante Sämisch accéléréernbqk2r/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR b KQkq - 0 5f - ;I fac7dbd62c6e3dacE24frDéfense Nimzo-indienneVariante Sämisch accéléréernbqk2r/pppp1ppp/4pn2/8/2PP4/P1b5/1P2PPPP/R1BQKBNR w KQkq - 0 5e - ;I dbfea0d031d66fa6E24frDéfense Nimzo-indienneVariante Sämisch accéléréernbqk2r/pppp1ppp/4pn2/8/1bPP4/P1N5/1P2PPPP/R1BQKBNR b KQkq - 0 4 d - ;/ b2923fa1e0a56cdbE25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/pp3ppp/4pn2/2pP4/3P4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 7 c - ;/ bcb8a46c426b78c6E25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/pp3ppp/4pn2/2pp4/2PP4/P1P2P2/4P1PP/R1BQKBNR w KQkq - 0 7 b - ;/ 5ac975c2bd2c73bbE25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1P2P2/4P1PP/R1BQKBNR b KQkq - 0 6 a - ;/111c1ff310709cfbE25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/ppp2ppp/4pn2/3p4/2PP4/P1b2P2/1P2P1PP/R1BQKBNR w KQkq - 0 6 ` - ;/302564f50dc8cef1E25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/P1N2P2/1P2P1PP/R1BQKBNR b KQkq - 0 5 _ - ;/fbb955d3448440b1E25frDéfense Nimzo-indienneVariante Sämischrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2P2/PP2P1PP/R1BQKBNR w KQkq - 0 5 ^ - ;/ fa4e22fb5a2a51355E26frDéfense Nimzo-indienneVariante Sämischrnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P1P3/5PPP/R1BQKBNR b KQkq - 0 6 ] - ;/ 576360497e75d991E26frDéfense Nimzo-indienneVariante Sämischrnbqk2r/pp1p1ppp/4pn2/2p5/2PP4/P1P5/4PPPP/R1BQKBNR w KQkq - 0 6\ - ;/bbba5c50546b3b07E27frDéfense Nimzo-indienneVariante Sämischrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P5/4PPPP/R1BQKBNR w KQ - 1 6[ - ;/16971ee27034b3a3E28frDéfense Nimzo-indienneVariante Sämischrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1P1P3/5PPP/R1BQKBNR b KQ - 0 6 Z - ;/ 5d4274d3dd685ce3E28frDéfense Nimzo-indienneVariante Sämischrnbq1rk1/pppp1ppp/4pn2/8/2PP4/P1b1P3/1P3PPP/R1BQKBNR w KQ - 0 6 Y - ;/ 7c7b0fd5c0d00ee9E28frDéfense Nimzo-indienneVariante Sämischrnbq1rk1/pppp1ppp/4pn2/8/1bPP4/P1N1P3/1P3PPP/R1BQKBNR b KQ - 0 5 X + ;/e06b60ca762dfaeE29frDéfense Nimzo-indienneVariante Sämischr1bq1rk1/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR w KQ - 1 8 W + ;/4ae5bbb723b3645EE29frDéfense Nimzo-indienneVariante Sämischr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1PBP3/5PPP/R1BQK1NR b KQkq - 0 7 V - ;/4f7b318adf67d905E29frDéfense Nimzo-indienneVariante Sämischr1bqk2r/pp1p1ppp/2n1pn2/2p5/2PP4/P1bBP3/1P3PPP/R1BQK1NR w KQkq - 0 7U - ;/6e424a8cc2df8b0fE29frDéfense Nimzo-indienneVariante Sämischr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/P1NBP3/1P3PPP/R1BQK1NR b KQkq - 0 6 T - ;/a5de7baa8b93054fOE29frDéfense Nimzo-indienneVariante Sämischr1bqk2r/pp1p1ppp/2n1pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR w KQkq - 2 6 S + ;/e33a3489a02a04cLE29frDéfense Nimzo-indienneVariante Sämischrnbqk2r/pp1p1ppp/4pn2/2p5/1bPP4/2NBP3/PP3PPP/R1BQK1NR b KQkq - 1 5R - ;9 d638c6c0c8103a2e.E30frDéfense Nimzo-indienneVariante de Léningradrnbqk2r/pppp1ppp/4pn2/6B1/1bPP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4 T Z f K ) pu1;Tp -  cac927bbeca72d91E03frCatalaneOuverter1bqkb1r/pppn1ppp/4pn2/8/2QP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 0 6o +  d89a55ab2c9142e.E03frCatalaneOuverter1bqkb1r/pppn1ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR w KQkq - 2 6o -  37aa8fbefab96aa4E04frCatalaneOuverternbqkb1r/ppp2ppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 5 - = 2366fc513012c6355E05frCatalaneOuverte, ligne classiquernbqk2r/ppp1bppp/4pn2/8/2pP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 2 6q -  f160c563622c28d6E06frCatalaneFerméernbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5q -  2a0429950aca49ebE06frCatalaneFerméernbqk2r/ppp1bppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5p -  b65e28bd2b2ef7e1E07frCatalaneFerméer1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 6 7o -  85bd53e0cb861a2d-E07frCatalaneFerméernbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 5 6o -  fbc828d4b775c13d=E07frCatalaneFerméernbq1rk1/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 4 6o +  7475aa039f8cb85E08frCatalaneFerméer1bq1rk1/pppnbppp/4pn2/3p4/2PP4/5NP1/PPQ1PPBP/RNB2RK1 b - - 2 7 - ?cc530f2dd4c5b00eE09frCatalaneFermée, ligne principaler1bq1rk1/pp1nbppp/2p1pn2/3p4/2PP4/5NP1/PPQNPPBP/R1B2RK1 b - - 1 8~ - ?4490e61e2fc1f0afE09frCatalaneFermée, ligne principalernbqk2r/ppp1bppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQkq - 1 5} - ?505c95f1e56a5c3e>E09frCatalaneFermée, ligne principalernbqkb1r/ppp2ppp/4pn2/3p4/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4| - 33 f9d00ca49969ca20 E10frPartie du pion-dameAnti-Nimzo-indiennernbqkb1r/pppp1ppp/4pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3v{ - 9 309165a2d29e0202E11frDéfense Bogo-indiennernbqk2r/pppp1ppp/4pn2/8/1bPP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4zz - ; 92b945b467ea7dbbE12frDéfense ouest-indiennernbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4y - ;/1edd0807484d289dE13frDéfense ouest-indienneVariante Kasparovrn1qk2r/pbpp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R w KQkq - 2 7 x - ;/ae4d40833a1f8706E13frDéfense ouest-indienneVariante Kasparovrnbqk2r/p1pp1pp1/1p2pn1p/8/1bPP3B/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 6w - ;/f4c22840c9a1a59dE13frDéfense ouest-indienneVariante Kasparovrnbqk2r/p1pp1pp1/1p2pn1p/6B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 v - ;-3f94070643b5f51fE14frDéfense ouest-indienneSystème Spasskyrnbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4u - ;!be5ffef5873da583E15frDéfense ouest-indienneFianchettornbqkb1r/p1pp1ppp/1p2pn2/8/2PP4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 4 t - ;3727efc0af3751a43CE16frDéfense ouest-indienneVariante Capablancarn1qk2r/pbpp1ppp/1p2pn2/8/1bPP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6s - ;; aff3e6e372297ef0E17frDéfense ouest-indienneVariante traditionnellern1qk2r/pbppbppp/1p2pn2/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQkq - 3 6"r - ;]20b968c21961ced2E18frDéfense ouest-indienneVariante classique, ligne traditionnellern1q1rk1/pbppbppp/1p2pn2/8/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 6 73q - ; 2910a3204606afc5E19frDéfense ouest-indienneVariante classique, ligne traditionnelle, ligne principalern1q1rk1/pbppbppp/1p2p3/8/2PP4/2Q2NP1/PP2PPBP/R1B2RK1 b - - 0 93p - ; 1921ebd65ef08941AE19frDéfense ouest-indienneVariante classique, ligne traditionnelle, ligne principalern1q1rk1/pbppbppp/1p2p3/8/2PP4/2n2NP1/PPQ1PPBP/R1B2RK1 w - - 0 94o - ;aba85640b9fe7f4cLE19frDéfense ouest-indienneVariante classique, ligne traditionnelle, ligne principalern1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 8 84n - ;1ab1245dab284328(E19frDéfense ouest-indienneVariante classique, ligne traditionnelle, ligne principalern1q1rk1/pbppbppp/1p2p3/8/2PPn3/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 7 8xm - ; 106291f6789ae1e6E20frDéfense Nimzo-indiennernbqk2r/pppp1ppp/4pn2/8/1bPP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4  n a i m4\1 xT+% - W d4c84d196a3ab012D88frGrünfeldVariante d'échange, variante Spasskyr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2Q1RK1 b - - 5 10$ - W aabd362d16c96b02D88frGrünfeldVariante d'échange, variante Spasskyr1bq1rk1/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R w KQ - 4 10# - W a015db9ac39082e9D88frGrünfeldVariante d'échange, variante Spasskyr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P1B3/P3NPPP/R2QK2R b KQkq - 3 9" - W d31d607642aa9967gD88frGrünfeldVariante d'échange, variante Spasskyr1bqk2r/pp2ppbp/2n3p1/2p5/2BPP3/2P5/P3NPPP/R1BQK2R w KQkq - 2 9 ! - W7ec069fa27e6f754TD89frGrünfeldVariante d'échange, variante Spasskyr2q1rk1/pp2ppbp/4b1p1/n7/3PP3/3BBP2/P3N1PP/R2Q1RK1 w - - 1 14 - Wd07d17b687f107bfD89frGrünfeldVariante d'échange, variante Spasskyr2q1rk1/pp2ppbp/6p1/n7/3PP1b1/3BBP2/P3N1PP/R2Q1RK1 b - - 0 13 - W 7ccbc2fae3590b99D89frGrünfeldVariante d'échange, variante Spasskyr2q1rk1/pp2ppbp/6p1/n7/3pP1b1/2PBBP2/P3N1PP/R2Q1RK1 w - - 0 13 - W 23d578cf9ead625f_D89frGrünfeldVariante d'échange, variante Spasskyr2q1rk1/pp2ppbp/6p1/n1p5/3PP1b1/2PBBP2/P3N1PP/R2Q1RK1 b - - 2 12 - =18ee9778a4f204c6D90frGrünfeldVariante des 3 cavaliersrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 - g6e08fdf8ef3f14a4D91frGrünfeldVariante des 3 cavaliers, système Petrossianrnbqk2r/ppp1ppbp/5np1/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 - c73064c4fc6d5250fD92frGrünfeldVariante des 3 cavaliers, attaque hongroisernbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5 - ed483e34a37d34440@D93frGrünfeldVariante des 3 cavaliers, variante hongroisernbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6 - e79aea1f8138ccce4D93frGrünfeldVariante des 3 cavaliers, variante hongroisernbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N2N2/PP2PPPP/R2QKB1R w KQ - 4 6 + a57fe87c7bea47c8D94frGrünfeldVariante des 3 cavaliers, variante Burillernbqk2r/ppp1ppbp/5np1/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 0 5 - e352ea6739b8806c5D95frGrünfeldVariante des 3 cavaliers, variante viennoisernbq1rk1/ppp1ppbp/5np1/3p4/2PP4/1QN1PN2/PP3PPP/R1B1KB1R b KQ - 2 6| - )92ab09766a8e678aD96frGrünfeldVariante russernbqk2r/ppp1ppbp/5np1/3p4/2PP4/1QN2N2/PP2PPPP/R1B1KB1R b KQkq - 3 5x - ) a11f4cadad02beaaD97frGrünfeldVariante russernbq1rk1/ppp1ppbp/5np1/8/2QPP3/2N2N2/PP3PPP/R1B1KB1R b KQ - 0 7x - ) 651841e5468203a0D97frGrünfeldVariante russernbq1rk1/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R w KQ - 1 7x - ) 6fb0ac5293dbea4bKD97frGrünfeldVariante russernbqk2r/ppp1ppbp/5np1/8/2QP4/2N2N2/PP2PPPP/R1B1KB1R b KQkq - 0 6y - )40ad304438b08969iD97frGrünfeldVariante russernbqk2r/ppp1ppbp/5np1/8/2pP4/1QN2N2/PP2PPPP/R1B1KB1R w KQkq - 0 6  - Ma3cc869fea87b040@D98frGrünfeldVariante russe, variante Smyslovrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N2N2/PP3PPP/R1B1KB1R w KQ - 1 8  - M 814ca588eccd530eD99frGrünfeldVariante russe, variante Smyslovrn1q1rk1/pppnppbp/6p1/8/3PP1b1/1QN1BN2/PP3PPP/R3KB1R b KQ - 4 9  - M 29833ed5c671a23b;D99frGrünfeldVariante russe, variante Smyslovrn1q1rk1/pppnppbp/6p1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R w KQ - 3 9  - M d0c43d736bbdabceD99frGrünfeldVariante russe, variante Smyslovrn1q1rk1/ppp1ppbp/5np1/8/2QPP1b1/2N1BN2/PP3PPP/R3KB1R b KQ - 2 8 - 3722b4e052f18fab1dE00frPartie du pion-dameDéfense est-indiennernbqkb1r/pppp1ppp/4pn2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3p -  3ec85a7ac061e57azE01frCatalaneFerméernbqkb1r/ppp2ppp/4pn2/3p4/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4p -  3e6ade075261f9e2E02frCatalaneOuverternbqkb1r/ppp2ppp/4pn2/8/Q1pP4/6P1/PP2PPBP/RNB1K1NR b KQkq - 1 5o -  ecce6348925f0b99E02frCatalaneOuverternbqkb1r/ppp2ppp/4pn2/8/2pP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 5 mJ (  \ )iSM0557xA - )! c39a9760efb6a8d5D77frNéo-GrünfeldAvec 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 2 4y@ - )! 766ab41da25b70acD77frNéo-GrünfeldAvec 6.O-Ornbqk2r/ppppppbp/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R w KQkq - 1 4}? - )' 2c74513cee07acb4D78frNéo-GrünfeldAvec 6.O-O c6rnbq1rk1/pp2ppbp/2p2np1/3p4/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7|> - )' a91e732872d3e292D78frNéo-GrünfeldAvec 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 1 6|= - )' d76b081c0e203982D78frNéo-GrünfeldAvec 6.O-O c6rnbq1rk1/pp1pppbp/2p2np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 0 6y< - )'4511e5f379e0ea399D78frNéo-GrünfeldAvec 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PPBP/RNBQK2R b KQ - 2 5z; - )' f0e1c68e340d3240@D78frNéo-GrünfeldAvec 6.O-O c6rnbq1rk1/ppppppbp/5np1/8/2PP4/5NP1/PP2PP1P/RNBQKB1R w KQ - 1 5: - )E512e65b8eca3b513D79frNéo-GrünfeldAvec 6.O-O, ligne principalernbq1rk1/pp2ppbp/5np1/3p4/3P4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 8 9 - )E 225ecaf14cc9b8a9D79frNéo-GrünfeldAvec 6.O-O, ligne principalernbq1rk1/pp2ppbp/2p2np1/3P4/3P4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 7l8 -  c38a7b8ecc1465fbD80frGrünfeldrnbqkb1r/ppp1pp1p/5np1/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 47 - Wf973d836f92fcd1dD81frGrünfeldVariante russe, variante accéléréernbqkb1r/ppp1pp1p/5np1/3p4/2PP4/1QN5/PP2PPPP/R1B1KBNR b KQkq - 1 46 - 118de9d0f55748f98D82frGrünfeldAttaque Brinckmannrnbqkb1r/ppp1pp1p/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR b KQkq - 1 45 + Ufe70fbc5f35257d}D83frGrünfeldAttaque Brinckmann, gambit Grünfeldrnbq1rk1/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR w KQ - 1 64 + U54fe20b8a6ccc96D83frGrünfeldAttaque Brinckmann, gambit Grünfeldrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N1P3/PP3PPP/R2QKBNR b KQkq - 0 53 - Ua862a0b9ae3344322D83frGrünfeldAttaque Brinckmann, gambit Grünfeldrnbqk2r/ppp1ppbp/5np1/3p4/2PP1B2/2N5/PP2PPPP/R2QKBNR w KQkq - 2 52 - ga08f71815daca1dbD84frGrünfeldAttaque Brinckmann, gambit Grünfeld acceptérnb2rk1/ppB1ppbp/6p1/3q4/3P4/4P3/PP3PPP/R2QKBNR b KQ - 0 81 - gd3b26261bbfe33abD84frGrünfeldAttaque Brinckmann, gambit Grünfeld acceptérnb2rk1/ppp1ppbp/6p1/3q4/3P1B2/4P3/PP3PPP/R2QKBNR w KQ - 0 80 - g4f01d6352c22099aD84frGrünfeldAttaque Brinckmann, gambit Grünfeld acceptérnbq1rk1/ppp1ppbp/6p1/3N4/3P1B2/4P3/PP3PPP/R2QKBNR b KQ - 0 7/ - g 9e23ee3c421e2c3cD77frNéo-GrünfeldAvec 6.O-Ornbq1rk1/ppppppbp/5np1/8/3P4/5NP1/PPP1PPBP/RNBQK2R w KQ - 3 5 V\ j  N Z8?{eYV|x - !-b844c53ac05b240b D45frSemi-slaveLigne principalernbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4w - !-de9443b04de8727fD46frSemi-slaveLigne principaler1bqkb1r/pp1n1ppp/2p1pn2/3p4/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 3 6v - !545284ee920e59f57WD47frSemi-slaveVariante semi-Méranr1bqkb1r/pp1n1ppp/2p1pn2/8/2BP4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 0 7u + !5c927a821fd69c9cD47frSemi-slaveVariante semi-Méranr1bqkb1r/pp1n1ppp/2p1pn2/8/2pP4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 7|t - !+39b3e62fe28c4b6ajD48frSemi-slaveVariante Méranr1bqkb1r/3n1ppp/p1p1pn2/1p6/3P4/2NBPN2/PP3PPP/R1BQK2R w KQkq - 0 9s - !Ufa85fdcdb945771bD49frSemi-slaveVariante Méran, variante Blumenfeldr1bqkb1r/3n1ppp/p3pn2/1N2P3/3p4/3B1N2/PP3PPP/R1BQK2R b KQkq - 0 11r - !U1af5395cdc3ee9a0D49frSemi-slaveVariante Méran, variante Blumenfeldr1bqkb1r/3n1ppp/p3pn2/1p2P3/3p4/2NB1N2/PP3PPP/R1BQK2R w KQkq - 0 11q - 3-9a138dd21f33bc2a*D50frGambit-dame refuséVariante modernernbqkb1r/ppp2ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR b KQkq - 3 4p - 3Ya9f0f68fff9b51e6D51frGambit-dame refuséVariante moderne, défense du cavalierr1bqkb1r/pppn1ppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5{o - 3 4dc3b524c4e26bc4D52frGambit-dame refusér1bqkb1r/pp1n1ppp/2p1pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQkq - 0 6vn - 3 8edffe3dd59810bbD53frGambit-dame refusérnbqk2r/ppp1bppp/4pn2/3p2B1/2PP4/2N5/PP2PPPP/R2QKBNR w KQkq - 4 5 m - 3; 56c19e75a78c252a*D54frGambit-dame refuséVariante néo-orthodoxernbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/2RQKBNR b K - 2 6 l - 3;295a5138249e71f4D54frGambit-dame refuséVariante néo-orthodoxernbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1P3/PP3PPP/R2QKBNR w KQ - 1 6k - 3Qf23ebdce4c7810c9D55frGambit-dame refuséVariante moderne, ligne principalernbq1rk1/ppp1bppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 6j ) 3+4ed2f49a5bf6bdD56frGambit-dame refuséDéfense Laskerrnbq1rk1/ppp1bpp1/4p2p/3p4/2PPn2B/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 8i - 3O eec36cc8c45017dfD57frGambit-dame refuséDéfense Lasker, ligne principalernb2rk1/ppp1qpp1/4p2p/3P4/3P4/2P1PN2/P4PPP/R2QKB1R b KQ - 0 10h - 3O 6d31de153239efc6D57frGambit-dame refuséDéfense Lasker, ligne principalernb2rk1/ppp1qpp1/4p2p/3P4/3P4/2n1PN2/PP3PPP/R2QKB1R w KQ - 0 10g - 3O dfb86383d53719cbD57frGambit-dame refuséDéfense Lasker, ligne principalernb2rk1/ppp1qpp1/4p2p/3P4/3Pn3/2N1PN2/PP3PPP/R2QKB1R b KQ - 0 9 f - 33512fd77bd691ccdcD58frGambit-dame refuséDéfense Tartakoverrnbq1rk1/p1p1bpp1/1p2pn1p/3p4/2PP3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 8)e - 3qc0eb36fbcbbac59dD59frGambit-dame refuséSystème Tartacover, variante d'échange Makagonovrnbq1rk1/p1p1bpp1/1p2p2p/3n4/3P3B/2N1PN2/PP3PPP/R2QKB1R w KQ - 0 9d - 31c1ddc693acd0fd05D60frGambit-dame refuséDéfense orthodoxer1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/R2QKB1R w KQ - 1 7c - 3[70c4b48ebe06c161aD61frGambit-dame refuséDéfense orthodoxe, variante Rubinsteinr1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 2 7)b - 3u989ffeede38fde01D62frGambit-dame refuséDéfense orthodoxe, variante Rubinstein, ligne Flohrr1bq1rk1/pp1nbppp/4pn2/2pP2B1/3P4/2N1PN2/PPQ2PPP/R3KB1R b KQ - 0 8+a - 3u96b565204141ca1cD62frGambit-dame refuséDéfense orthodoxe, variante Rubinstein, ligne Flohrr1bq1rk1/pp1nbppp/4pn2/2pp2B1/2PP4/2N1PN2/PPQ2PPP/R3KB1R w KQ - 0 8` - 3Ube4609de2fc2a9dbD63frGambit-dame refuséDéfense orthodoxe, ligne principaler1bq1rk1/pppnbppp/4pn2/3p2B1/2PP4/2N1PN2/PP3PPP/2RQKB1R b K - 2 7_ - 3Y9d25962c4ad44604D64frGambit-dame refuséDéfense orthodoxe, attaque Rubinsteinr1bq1rk1/pp1nbppp/2p1pn2/3p2B1/2PP4/2N1PN2/PPQ2PPP/2R1KB1R b K - 1 8^ - 3Y41f8fc120f3aaac5D65frGambit-dame refuséDéfense orthodoxe, attaque Rubinsteinr1bq1rk1/1p1nbppp/p1p1pn2/3P2B1/3P4/2N1PN2/PPQ2PPP/2R1KB1R b K - 0 9 ~y  n ; jJ kfAU + 5[ 391553073dce241AD26frGambit-dame acceptéLigne principale, système traditionnelrnbqkb1r/ppp2ppp/4pn2/8/2pP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 0 5 - 5U ad03bd3abedc8e41AD27frGambit-dame acceptéVariante classique, ligne principalernbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP3PPP/RNBQ1RK1 w kq - 0 7 - 5W 3b053218f098d5c5D28frGambit-dame acceptéVariante classique, système Alekhinernbqkb1r/1p3ppp/p3pn2/2p5/2BP4/4PN2/PP2QPPP/RNB2RK1 b kq - 1 7- - 5{ 229500ab92419787D29frGambit-dame acceptéVariante classique, système Alekhine, ligne principalern1qkb1r/1b3ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 w kq - 2 9* - 5{ 9205482fe013381cD29frGambit-dame acceptéVariante classique, système Alekhine, ligne principalernbqkb1r/5ppp/p3pn2/1pp5/3P4/1B2PN2/PP2QPPP/RNB2RK1 b kq - 1 8r - 3 fc30f6b3c0a1a4adD30frGambit-dame refusérnbqkbnr/ppp2ppp/4p3/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 + 3? 7a7ee1102432674tD31frGambit-dame refuséVariante du cavalier-damernbqkbnr/ppp2ppp/4p3/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3q - / e1d63fbffd042d09 D32frDéfense Tarraschrnbqkbnr/pp3ppp/4p3/2pp4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 - /38c87f2e3dccfe5d9D33frDéfense TarraschSystème Rubinsteinr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2NP1/PP2PP1P/R1BQKB1R b KQkq - 0 6 - /3 a06149a23c183de1D33frDéfense TarraschSystème Rubinsteinr1bqkbnr/pp3ppp/2n5/2pp4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 6 - /U76559684f673d0a7D34frDéfense TarraschVariante de Prague, ligne principaler1bqk2r/pp2bppp/2n2n2/2pp4/3P4/2N2NP1/PP2PPBP/R1BQK2R w KQkq - 3 8 - 3- 5c49dae4afb967e2D35frGambit-dame refuséDéfense normalernbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4 - 3[ 884e5029c24e8723#D36frGambit-dame refuséVariante d'échange, variante Reshevskyrnbqkb1r/pp3ppp/2p2n2/3p2B1/3P4/2N5/PPQ1PPPP/R3KBNR b KQkq - 1 6 - 3=872d3612c75f06dfD37frGambit-dame refuséVariante des 3 cavaliersrnbqkb1r/ppp2ppp/4pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 4 - 3-4e6c5f148ca8cefdD38frGambit-dame refuséVariante Ragozinrnbqk2r/ppp2ppp/4pn2/3p4/1bPP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 2 5 - 3U5a3031106e1cfbd6D39frGambit-dame refuséVariante Ragozin, variante viennoisernbqk2r/ppp2ppp/4pn2/6B1/1bpP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6 - 3U883608223c2215355D39frGambit-dame refuséVariante Ragozin, variante viennoisernbqk2r/ppp2ppp/4pn2/3p2B1/1bPP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 3 5  - 39615ce7bc38180da2D40frGambit-dame refuséDéfense semi-Tarraschrnbqkb1r/pp3ppp/4pn2/2pp4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5  - 396f767c719ad619bfD41frGambit-dame refuséDéfense semi-Tarraschrnbqkb1r/pp3ppp/4pn2/2pP4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 5 - 3]a3553dce297deb377D42frGambit-dame refuséDéfense semi-Tarrasch, ligne principaler1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2NBPN2/PP3PPP/R1BQK2R b KQkq - 2 7 - 3]f6589c6c10fd2944DD42frGambit-dame refuséDéfense semi-Tarrasch, ligne principaler1bqkb1r/pp3ppp/2n1p3/2pn4/3P4/2N1PN2/PP3PPP/R1BQKB1R w KQkq - 1 7n~ - ! 1557dbfdb09fd564dD43frSemi-slavernbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5u} + !10bb5f9522be04fOD44frSemi-slaveAcceptéernbqkb1r/pp3ppp/2p1pn2/6B1/2pP4/2N2N2/PP2PPPP/R2QKB1R w KQkq - 0 6y| - !d30d8ccb00150eacD44frSemi-slaveAcceptéernbqkb1r/pp3ppp/2p1pn2/3p2B1/2PP4/2N2N2/PP2PPPP/R2QKB1R b KQkq - 1 5{ - !-b87a994f94c05dc0D45frSemi-slaveLigne principalernbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1PN2/PP3PPP/R1BQKB1R b KQkq - 1 5~z - !-631e75b9fc263cfdD45frSemi-slaveLigne principalernbqkb1r/pp3ppp/2p1pn2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR w KQkq - 0 5~y - !-15698788e404acafD45frSemi-slaveLigne principalernbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N1P3/PP3PPP/R1BQKBNR b KQkq - 0 4 |xt e Z + nY.]! |/ ) 333f0cc84b66ccc9D08frGambit-dame refuséContre-gambit Albinrnbqkbnr/ppp2ppp/8/3pp3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3. - 3K 22a016b116cc4d58XD09frGambit-dame refuséContre-gambit Albin, fianchettor1bqkbnr/ppp2ppp/2n5/4P3/2Pp4/5NP1/PP2PP1P/RNBQKB1R b KQkq - 0 5l- - ) 183de96daf43e744DD10frDéfense slavernbqkbnr/pp2pppp/2p5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3{, - )' c359059bc7a58679yD11frDéfense slaveLigne modernernbqkbnr/pp2pppp/2p5/3p4/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3+ - )1b6831a52f9e546c6D12frDéfense slaveDéfense Schallopprn1qkb1r/pp2pppp/2p2n2/3p1b2/2PP4/4PN2/PP3PPP/RNBQKB1R w KQkq - 1 5* - )3 e5ed05ea68fbde48HD13frDéfense slaveVariante d'échangernbqkb1r/pp2pppp/5n2/3p4/3P4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5) - )3 969daaa3c891d3f2D13frDéfense slaveVariante d'échangernbqkb1r/pp2pppp/2p2n2/3P4/3P4/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 4( - )Yedda4aa5950d1a7c|D14frDéfense slaveVariante d'échange, ligne symétriquer2qkb1r/pp2pppp/2n2n2/3p1b2/3P1B2/2N2N2/PP2PPPP/R2QKB1R w KQkq - 6 7' - )Y6ec3232b22e813f1D14frDéfense slaveVariante d'échange, ligne symétriquer1bqkb1r/pp2pppp/2n2n2/3p4/3P1B2/2N2N2/PP2PPPP/R2QKB1R b KQkq - 5 6& - )Yb597c5aabb88f992D14frDéfense slaveVariante d'échange, ligne symétriquer1bqkb1r/pp2pppp/2n2n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 4 6% - )Y 1e7a1d48aa195c91D14frDéfense slaveVariante d'échange, ligne symétriquernbqkb1r/pp2pppp/5n2/3p4/3P4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 5$ - )Y c51ef1bec2ff3dacD14frDéfense slaveVariante d'échange, ligne symétriquernbqkb1r/pp2pppp/5n2/3p4/3P4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 5# - )Y9ef0c54b6f057c3a:D14frDéfense slaveVariante d'échange, ligne symétriquernbqkbnr/pp2pppp/8/3p4/3P4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 4" - )Y6567dde9ade7fee3D14frDéfense slaveVariante d'échange, ligne symétriquernbqkbnr/pp2pppp/8/3p4/3P4/8/PP2PPPP/RNBQKBNR w KQkq - 0 4 ! - )=632029cca8bd45366D15frDéfense slaveVariante des 3 cavaliersrnbqkb1r/pp2pppp/2p2n2/3p4/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4 - )-daef6e1297107e1bD16frDéfense slaveVariante Alapinernbqkb1r/pp2pppp/2p2n2/8/P1pP4/2N2N2/1P2PPPP/R1BQKB1R b KQkq - 0 5 - )/59f6079c20f57796D17frDéfense slaveVariante tchèquern1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N2N2/1P2PPPP/R1BQKB1R w KQkq - 1 6 - )Wf4db452e04aaff322D18frDéfense slaveVariante tchèque, système classiquern1qkb1r/pp2pppp/2p2n2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R b KQkq - 0 6 - 3Cd1f9164e821838e3D19frGambit-dame refuséSlave, variante hollandaisern1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQ1RK1 b kq - 2 8 - 3Caf8c6d7afeebe3f3D19frGambit-dame refuséSlave, variante hollandaisern1qk2r/pp3ppp/2p1pn2/5b2/PbBP4/2N1PN2/1P3PPP/R1BQK2R w KQkq - 1 8 - 3C66cd047cb51c2bd1D19frGambit-dame refuséSlave, variante hollandaisern1qkb1r/pp3ppp/2p1pn2/5b2/P1BP4/2N1PN2/1P3PPP/R1BQK2R b KQkq - 0 7 - 3C82acb71f1c886f60`D19frGambit-dame refuséSlave, variante hollandaisern1qkb1r/pp3ppp/2p1pn2/5b2/P1pP4/2N1PN2/1P3PPP/R1BQKB1R w KQkq - 0 7o - 5 58413db08abdda1cD20frGambit-dame acceptérnbqkbnr/ppp1pppp/8/8/2pP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 - 5-8325d146e25bbb21!D21frGambit-dame acceptéLigne principalernbqkbnr/ppp1pppp/8/8/2pP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3 - 5/51d220b5057b43fdD22frGambit-dame acceptéDéfense Alekhinernbqkbnr/1pp1pppp/p7/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4t - 5 d8cbe5b34fa1fab7D23frGambit-dame acceptérnbqkb1r/ppp1pppp/5n2/8/2pP4/5N2/PP2PPPP/RNBQKB1R w KQkq - 2 4 - 51 235cfd118d43786enD24frGambit-dame acceptéVariante Showalterrnbqkb1r/ppp1pppp/5n2/8/2pP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 3 4 - 5- 75e6a7016bfe7213D25frGambit-dame acceptéLigne principalernbqkb1r/ppp1pppp/5n2/8/2pP4/4PN2/PP3PPP/RNBQKB1R b KQkq - 0 4 Hu l d I s[O" yhHL + -= fb67a1d34a70278xC86frPartie espagnoleFermée, attaque Worrallr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPPQPPP/RNB2RK1 b kq - 5 6K - -A24be6dd52f33bb85C87frPartie espagnoleFermée, variante Averbakhr1bqk2r/1pp1bppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7 J - -A1d04fbb4fd4bf2e8C87frPartie espagnoleFermée, variante Averbakhr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 b kq - 5 6{I - -2dbc8cedfb46a6377C88frPartie espagnoleFerméer1bqk2r/2ppbppp/p1n2n2/1p2p3/4P3/1B3N2/PPPP1PPP/RNBQR1K1 b kq - 1 7{H - -7d0091a166e64fd5C88frPartie espagnoleFerméer1bqk2r/2ppbppp/p1n2n2/1p2p3/B3P3/5N2/PPPP1PPP/RNBQR1K1 w kq - 0 7G - -+d4a4bbd662bb0e7c|C89frPartie espagnoleGambit Marshallr1bq1rk1/2p1bppp/p1n2n2/1p1pp3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 0 9F - -+51ce99c2fe6f405aZC89frPartie espagnoleGambit Marshallr1bq1rk1/2ppbppp/p1n2n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b - - 0 8}E - -68740fa32c1709377C90frPartie espagnoleFerméer1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 w - - 1 9~D - -62dce214f94ee0dcC90frPartie espagnoleFerméer1bqk2r/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N2/PP1P1PPP/RNBQR1K1 b kq - 0 8 C - -;ad4120093dde2475uC91frPartie espagnoleFermée, variante Yatesr1bq1rk1/2p1bppp/p1np1n2/1p2p3/3PP3/1BP2N2/PP3PPP/RNBQR1K1 b - - 0 9B - -8087d21deeb4c0c5C92frPartie espagnoleFerméer1bq1rk1/2p1bppp/p1np1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 b - - 0 9A - -?1270997b796089d0C93frPartie espagnoleFermée, défense Smyslovr1bq1rk1/2p1bpp1/p1np1n1p/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 0 10@ - -=2b6a0affff2565c6C94frPartie espagnoleFermée, défense Breyerrnbq1rk1/2p1bppp/p2p1n2/1p2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10? - -+ee5f2555eeec4884C95frPartie espagnoleFermée, Breyerrnbq1rk1/2p1bppp/p2p1n2/1p2p3/3PP3/1BP2N1P/PP3PP1/RNBQR1K1 b - - 0 10}> - -25a99e6fdada2343CC96frPartie espagnoleFerméer1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/2P2N1P/PPBP1PP1/RNBQR1K1 b - - 2 10= - -d590f8e8438862cfC96frPartie espagnoleFerméer1bq1rk1/2p1bppp/p2p1n2/np2p3/4P3/1BP2N1P/PP1P1PP1/RNBQR1K1 w - - 1 10< ) -Ef25f4a581f4a7d}C97frPartie espagnoleFermée, défense Tchigoriner1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPB2PP1/RNBQR1K1 w - - 1 12; + -Ec8bcddd6fde4047GC98frPartie espagnoleFermée, défense Tchigoriner1b2rk1/2q1bppp/p1np1n2/1pp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 3 13: - -E599ce728c2e2e24dMC98frPartie espagnoleFermée, défense Tchigoriner1b2rk1/2q1bppp/p2p1n2/npp1p3/3PP3/2P2N1P/PPBN1PP1/R1BQR1K1 b - - 2 12!9 - -eaa348851dbbe87adC99frPartie espagnoleFermée, défense Tchigorine, système Panovr1b2rk1/2q1bppp/p2p1n2/np2p3/3PP3/5N1P/PPBN1PP1/R1BQR1K1 b - - 0 13"8 + -e6825d1dbf168b8bC99frPartie espagnoleFermée, défense Tchigorine, système Panovr1b2rk1/2q1bppp/p2p1n2/np2p3/3pP3/2P2N1P/PPBN1PP1/R1BQR1K1 w - - 0 13p7 + 3 6649ba69b8c9ff8D00frPartie du pion-damernbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2z6 - = 6047e0c7441e877fD01frAttaque Richter-Veressovrnbqkb1r/ppp1pppp/5n2/3p2B1/3P4/2N5/PPP1PPPP/R2QKBNR b KQkq - 1 35 - 31 dd007750f36afec5D02frPartie du pion-dameVariante Zukertortrnbqkbnr/ppp1pppp/8/3p4/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 1 24 - 3-40b41493ee1a649bD03frPartie du pion-dameAttaque de Torrernbqkb1r/ppp1pppp/5n2/3p2B1/3P4/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 33 - 3) 2bc301177acf37f7D04frPartie du pion-dameSystème Collernbqkb1r/ppp1pppp/5n2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R b KQkq - 0 32 - 3) 5db4f32662eda7a5D05frPartie du pion-dameSystème Collernbqkb1r/ppp2ppp/4pn2/3p4/3P4/4PN2/PPP2PPP/RNBQKB1R w KQkq - 0 4i1 - # 8a470482d88334ffD06frGambit-damernbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 20 - 33 21aadc60c91291fcD07frGambit-dame refuséDéfense Tchigoriner1bqkbnr/ppp1pppp/2n5/3p4/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 1 3 yoP C 4 % <,H h?yf - -c d33f7739a5c9d388C67frPartie espagnoleDéfense berlinoise, gambit de Rio acceptér1bqkb1r/pppp1ppp/2n5/1B2p3/4n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5e - -3 c8cbbdb43361c6faC68frPartie espagnoleVariante d'échanger1bqkbnr/1ppp1ppp/p1B5/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 4d - -W 806ee4d7d6b08795C69frPartie espagnoleVariante d'échange, ligne principaler1bqkbnr/1pp2ppp/p1p5/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5c - -+a8e7c91161416febC70frPartie espagnoleDéfense Morphyr1bqkbnr/1ppp1ppp/p1n5/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 4b - -a915d5f70b3392686C71frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 5a - -a ef282444cfcafd96C72frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 1 5` + -a 8c24cc14dccc3f6C73frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/2p2ppp/p1pp4/4p3/3PP3/5N2/PPP2PPP/RNBQK2R b KQkq - 0 6_ - -a cdf7636b5c05eeb4C73frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/2p2ppp/p1pp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 6^ + -a 9a70d7f4e3e0a9eC73frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/1pp2ppp/p1Bp4/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5] - -ae787a7e863492900C74frPartie espagnoleDéfense Morphy, défense Steinitz moderner1bqkbnr/1pp2ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 5\ + -a54659bab913f9311C75frPartie espagnoleDéfense Morphy, défense Steinitz moderner2qkbnr/1ppb1ppp/p1np4/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 1 6+[ - -y29c7254bd35546388C76frPartie espagnoleDéfense Morphy, défense Steinitz moderne, fianchettor2qkbnr/1ppb1p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R w KQkq - 1 7+Z - -ycb06db19090f9609 C76frPartie espagnoleDéfense Morphy, défense Steinitz moderne, fianchettor1bqkbnr/1pp2p1p/p1np2p1/4p3/B2PP3/2P2N2/PP3PPP/RNBQK2R b KQkq - 0 6+Y + -ye33f4b318c6bb4bKC76frPartie espagnoleDéfense Morphy, défense Steinitz moderne, fianchettor1bqkbnr/1pp2p1p/p1np2p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 6,X - -y378962d2cabef226&C76frPartie espagnoleDéfense Morphy, défense Steinitz moderne, fianchettor1bqkbnr/1ppp1p1p/p1n3p1/4p3/B3P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 1 5,W + -y68a2c913ec88b0c C76frPartie espagnoleDéfense Morphy, défense Steinitz moderne, fianchettor1bqkbnr/1ppp1p1p/p1n3p1/1B2p3/4P3/2P2N2/PP1P1PPP/RNBQK2R w KQkq - 0 5V - -+6bf3afeb31bc0265eC77frPartie espagnoleDéfense Morphyr1bqkb1r/1ppp1ppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 0 5U - -+f309fde4ccbb2e7d}C77frPartie espagnoleDéfense Morphyr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 5T - -+8d7c86d0b048f56dmC78frPartie espagnoleDéfense Morphyr1bqkb1r/1ppp1ppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 3 5S - -Eb4c610b16230bc00C79frPartie espagnoleDéfense Steinitz différéer1bqkb1r/1pp2ppp/p1np1n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6xR - - 30cbc889b69f527e~C80frPartie espagnoleOuverter1bqkb1r/1ppp1ppp/p1n5/4p3/B3n3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 6 Q - -;1e0f50da334bf2399C81frPartie espagnoleOuverte, attaque Howellr2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1B3N2/PPP1QPPP/RNB2RK1 b kq - 2 9zP - -fed32760ad7fa63b;C82frPartie espagnoleOuverter2qkb1r/2p2ppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 b kq - 0 9O - -Cea1f548f67d40aaaC83frPartie espagnoleOuverte, défense classiquer2qk2r/2p1bppp/p1n1b3/1p1pP3/4n3/1BP2N2/PP3PPP/RNBQ1RK1 w kq - 1 10N - -199b0f53f7ae359fcC84frPartie espagnoleVariantes ferméesr1bqk2r/1pppbppp/p1n2n2/4p3/B3P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 4 6 M + -C 14aa73087e475e4C85frPartie espagnoleFermée, échange différér1bqk2r/1pppbppp/p1B2n2/4p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 b kq - 0 6 RU= * 1  s N}\KOXqR  - 9; 94f0413c69fc0046FC38frGambit du roi acceptéVariante traditionnellernbqk1nr/pppp1pbp/8/6p1/2B1Pp2/5N2/PPPP2PP/RNBQK2R w KQkq - 2 5 - 91 db5c548b11c764344C39frGambit du roi acceptéGambit du cavalierrnbqkbnr/pppp1p1p/8/6p1/4Pp1P/5N2/PPPP2P1/RNBQKB1R b KQkq - 0 4m - ' d3207fec0612d89dC40frDébut ouvertrnbqkbnr/pppp1ppp/8/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2r - / ea9ae98dd46a91f0C41frDéfense Philidorrnbqkbnr/ppp2ppp/3p4/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3p - + 88ce4b19abe8990b C42frDéfense Petrovrnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3~ - ++ 4dfb64b3ba21b449IC43frDéfense PetrovAttaque modernernbqkb1r/pppp1ppp/5n2/4p3/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3} - 1- 78cda70e17837d9eC44frPartie du pion-roiLigne principaler1bqkbnr/pppp1ppp/2n5/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3o| - / 4112df7bd300d6e7C45frPartie écossaiser1bqkbnr/pppp1ppp/2n5/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4y{ - 9 835abfacd561ff47GC46frPartie des 3 cavaliersr1bqkbnr/pppp1ppp/2n5/4p3/4P3/2N2N2/PPPP1PPP/R1BQKB1R b KQkq - 3 3z - 931d81a4f369529393C47frPartie des 4 cavaliersVariante écossaiser1bqkb1r/pppp1ppp/2n2n2/4p3/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 0 4y - 91eb6a5af61d0f2d52RC48frPartie des 4 cavaliersVariante espagnoler1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/2N2N2/PPPP1PPP/R1BQK2R b KQkq - 5 4 x - 9+222b33f056f8e570pC49frPartie des 4 cavaliersDouble espagnolr1bqk2r/pppp1ppp/2n2n2/1B2p3/1b2P3/2N2N2/PPPP1PPP/R1BQK2R w KQkq - 6 5rw - - 1b7e13263fc0ab388C50frPartie italienner1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3v - -%1c9622d153442d9fC51frPartie italienneGambit Evansr1bqk1nr/pppp1ppp/2n5/2b1p3/1PB1P3/5N2/P1PP1PPP/RNBQK2R b KQkq - 0 4u - -I768c3ac4890df01bC52frPartie italienneGambit Evans, ligne principaler1bqk1nr/pppp1ppp/2n5/b3p3/2B1P3/2P2N2/P2P1PPP/RNBQK2R w KQkq - 1 6t - -1c0b9afe525824e3d=C53frPartie italienneVariante classiquer1bqk1nr/pppp1ppp/2n5/2b1p3/2B1P3/2P2N2/PP1P1PPP/RNBQK2R b KQkq - 0 4(s - -y 69aa6b7439623adaC54frPartie italienneVariante classique, gambit Greco, ligne traditionneller1bqk2r/pppp1ppp/2n2n2/2b5/2BPP3/5N2/PP3PPP/RNBQK2R b KQkq - 0 6}r - = 409027d3923aeaaeC55frDéfense des 2 cavaliersr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4q - =]dd1937963dacaffaC56frDéfense des 2 cavaliersGambit écossais, double gambit acceptér1bqkb1r/pppp1ppp/2n5/8/2Bpn3/5N2/PPP2PPP/RNBQ1RK1 w kq - 0 6p - =31642c6063bf6120a C57frDéfense des 2 cavaliersAttaque du cavalierr1bqkb1r/pppp1ppp/2n2n2/4p1N1/2B1P3/8/PPPP1PPP/RNBQK2R b KQkq - 5 4 o - =- e1e0c4aad071bc20 C58frDéfense des 2 cavaliersDéfense Polerior1bqkb1r/ppp2ppp/5n2/n2Pp1N1/2B5/8/PPPP1PPP/RNBQK2R w KQkq - 1 6n - =M 26d4332e603fe217C59frDéfense des 2 cavaliersDéfense Polerio, défense Suhler1bqkb1r/p4pp1/2p2n1p/n3p1N1/8/8/PPPPBPPP/RNBQK2R w KQkq - 0 9rm - - 4b1376a17217ee1dC60frPartie espagnoler1bqkbnr/pppp1ppp/2n5/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3l - -' 9c6e1a40cc53aebcC61frPartie espagnoleVariante Birdr1bqkbnr/pppp1ppp/8/1B2p3/3nP3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4k - -/72a9e0c0a06fa770pC62frPartie espagnoleDéfense Steinitzr1bqkbnr/ppp2ppp/2np4/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4j - -3df7c1038cc9fc3c3C63frPartie espagnoleDéfense Schliemannr1bqkbnr/pppp2pp/2n5/1B2pp2/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4i - -1e60e32fab825049eC64frPartie espagnoleVariante classiquer1bqk1nr/pppp1ppp/2n5/1Bb1p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4h - -310fd4254dfedaf8bC65frPartie espagnoleDéfense berlinoiser1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4&g - -q5732af0171663df6C66frPartie espagnoleDéfense berlinoise, défense améliorée Steinitzr1bqkb1r/ppp2ppp/2np1n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQ1RK1 w kq - 0 5 qo n M R * -K$q - 3Uc6fb6c517d1706b6C13frDéfense françaiseVariante classique, ligne principalernbqk2r/ppp1bppp/4pn2/3p2B1/3PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5 - 31 2d401dd965fe75deC14frDéfense françaiseVariante classiquernb1k2r/pppnqppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR w KQkq - 0 7 - 31 cd80c33c58adf2bbC14frDéfense françaiseVariante classiquernbqk2r/pppnBppp/4p3/3pP3/3P4/2N5/PPP2PPP/R2QKBNR b KQkq - 0 6 - 3-86c2157be13bf85b[C15frDéfense françaiseVariante Winawerrnbqk1nr/ppp2ppp/4p3/3p4/1b1PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4 - 3Se7bb0386e525de3f?C16frDéfense françaiseVariante Winawer, variante d'avancernbqk1nr/ppp2ppp/4p3/3pP3/1b1P4/2N5/PPP2PPP/R1BQKBNR b KQkq - 0 4 + 3S1cad2281a62d542BC17frDéfense françaiseVariante Winawer, variante d'avancernbqk1nr/pp3ppp/4p3/2ppP3/1b1P4/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 5 - 3S a0baf239e3cae648HC18frDéfense françaiseVariante Winawer, variante d'avancernbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR b KQkq - 0 6 - 3S eb6f98084e960908C18frDéfense françaiseVariante Winawer, variante d'avancernbqk1nr/pp3ppp/4p3/2ppP3/3P4/P1b5/1PP2PPP/R1BQKBNR w KQkq - 0 6 - 3S 9ef54e8458436df5C19frDéfense françaiseVariante Winawer, variante d'avancernbqk2r/pp2nppp/4p3/2ppP3/3P4/P1P5/2P2PPP/R1BQKBNR w KQkq - 1 7o + 1 844931a6ef4b9a0C20frPartie du pion-roirnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2l - - 560fb632bb4680f7C21frPartie du centrernbqkbnr/pppp1ppp/8/8/3pP3/8/PPP2PPP/RNBQKBNR w KQkq - 0 3~ - --805579149e46cac9C22frPartie du centreLigne principaler1bqkbnr/pppp1ppp/2n5/8/3QP3/8/PPP2PPP/RNB1KBNR w KQkq - 1 4l - ' 6bf7273246b76f06C23frDébut du fournbqkbnr/pppp1ppp/8/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR b KQkq - 1 2 - '3 301913c7eb4d2e90C24frDébut du fouDéfense berlinoisernbqkb1r/pppp1ppp/5n2/4p3/2B1P3/8/PPPP1PPP/RNBQK1NR w KQkq - 2 3o - - f3d38bb8ac163b79yC25frPartie viennoisernbqkbnr/pppp1ppp/8/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2 - -/ a83dbf4d01ec7aefC26frPartie viennoiseVariante Falkbeerrnbqkb1r/pppp1ppp/5n2/4p3/4P3/2N5/PPPP1PPP/R1BQKBNR w KQkq - 2 3q - - 7639453c2f780b5aZC27frPartie viennoisernbqkb1r/pppp1ppp/8/4p3/2B1n3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 0 4 - -a6063d387383e094aJC28frPartie viennoiseVariante Stanley, variante des 3 cavaliersr1bqkb1r/pppp1ppp/2n2n2/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR w KQkq - 4 4 - -a3b8de77295c448dcC28frPartie viennoiseVariante Stanley, variante des 3 cavaliersr1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/2N5/PPPP1PPP/R1BQK1NR b KQkq - 3 3 - +- d041e05484a90940@C29frGambit viennoisLigne principalernbqkb1r/ppp2ppp/5n2/3pp3/4PP2/2N5/PPPP2PP/R1BQKBNR w KQkq - 0 4j - ' f552ee1777658429)C30frGambit du roirnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq - 0 2 - 797038cc03ebb1ca0fC31frGambit du roi refuséContre-gambit Falkbeerrnbqkbnr/ppp2ppp/8/3pp3/4PP2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 - 79 d4c5b462704c058dC32frGambit du roi refuséContre-gambit Falkbeerrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPPN2PP/R1BQKBNR b KQkq - 2 5 - 79 8dab0c00eab1adbdC32frGambit du roi refuséContre-gambit Falkbeerrnbqkb1r/ppp2ppp/5n2/3P4/4pP2/3P4/PPP3PP/RNBQKBNR w KQkq - 1 5r - 9 1cd8d48946aa83fdC33frGambit du roi acceptérnbqkbnr/pppp1ppp/8/8/4Pp2/8/PPPP2PP/RNBQKBNR w KQkq - 0 3 - 91c7bc387f2e4ce2c0C34frGambit du roi acceptéGambit du cavalierrnbqkbnr/pppp1ppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R b KQkq - 1 3 - 93d3704b90e4e74e51QC35frGambit du roi acceptéDéfense Cunninghamrnbqk1nr/ppppbppp/8/8/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 2 4 - 9-42d61a6bb298ace6C36frGambit du roi acceptéDéfense modernernbqkbnr/ppp2ppp/8/3p4/4Pp2/5N2/PPPP2PP/RNBQKB1R w KQkq - 0 4x - 9 bc68d000781a9f93C37frGambit du roi acceptérnbqkbnr/pppp1p1p/8/6p1/4Pp2/2N2N2/PPPP2PP/R1BQKB1R b KQkq - 1 4 Zr^ # ' w +zikC&'|Z{; + !- 9a2250f4dfc8f82B90frSicilienneVariante Najdorfrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6: - !m25449e4ead2b57baB91frSicilienneVariante Najdorf, variante de Zagreb, fianchettornbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N3P1/PPP2P1P/R1BQKB1R b KQkq - 0 69 - !W 7a22a6f64cd9c521!B92frSicilienneVariante Najdorf, variante Opovcenskyrnbqkb1r/1p2pppp/p2p1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 68 - !Y f4b45802546db20b B93frSicilienneVariante Najdorf, variante d'Amsterdamrnbqkb1r/1p2pppp/p2p1n2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6|7 - !-cff87239fd76544aJB94frSicilienneVariante Najdorfrnbqkb1r/1p2pppp/p2p1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 1 6{6 - !- b98f8008e554c418B95frSicilienneVariante Najdorfrnbqkb1r/1p3ppp/p2ppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7|5 - !- 4499fd05fcc5f991B96frSicilienneVariante Najdorfrnbqkb1r/1p3ppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R b KQkq - 0 74 - !i83660352368e2f4bKB97frSicilienneVariante Najdorf, variante du pion empoisonnérnb1kb1r/1p3ppp/pq1ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 8z3 - !- 50558eea366e5500B98frSicilienneVariante Najdorfrnbqk2r/1p2bppp/p2ppn2/6B1/3NPP2/2N5/PPP3PP/R2QKB1R w KQkq - 1 82 - !Qe7a6f486c5d2aeeeB99frSicilienneVariante Najdorf, ligne principaler1b1k2r/1pqnbppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R w kq - 5 101 - !Qd4458fdb257a4322"B99frSicilienneVariante Najdorf, ligne principalernb1k2r/1pq1bppp/p2ppn2/6B1/3NPP2/2N2Q2/PPP3PP/2KR1B1R b kq - 4 9q0 - 3 f44b6961e533d1c4C00frDéfense françaisernbqkbnr/pppp1ppp/4p3/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2/ - 3393cb6e92b241f0a6C01frDéfense françaiseVariante d'échangernbqkbnr/ppp2ppp/4p3/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3. - 3/d56d72226c3094c4C02frDéfense françaiseVariante d'avancernbqkbnr/ppp2ppp/4p3/3pP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3- - 3/ ed7adcbdf2d31a90C03frDéfense françaiseVariante Tarraschrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/8/PPPN1PPP/R1BQKBNR b KQkq - 1 3,, - 3wc61ddc5c265e9f388C04frDéfense françaiseVariante Tarrasch, défense Guimard, ligne principaler1bqkb1r/ppp2ppp/2n1pn2/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R w KQkq - 4 5,+ - 3w9df3e8a98ba4deaeC04frDéfense françaiseVariante Tarrasch, défense Guimard, ligne principaler1bqkbnr/ppp2ppp/2n1p3/3p4/3PP3/5N2/PPPN1PPP/R1BQKB1R b KQkq - 3 4* - 3S b694e8485f295b06C05frDéfense françaiseVariante Tarrasch, variante ferméernbqkb1r/ppp2ppp/4pn2/3p4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 2 4+) - 3wa7ed29d3c0aa7f02C06frDéfense françaiseVariante Tarrasch, variante fermée, ligne principaler1bqkb1r/pp1n1ppp/2n1p3/3pP3/3P4/3B4/PP1NNPPP/R1BQK2R b KQkq - 0 8+( + 3wb5bfc9fa4027324$C06frDéfense françaiseVariante Tarrasch, variante fermée, ligne principaler1bqkb1r/pp1n1ppp/2n1p3/3pP3/3p4/2PB4/PP1NNPPP/R1BQK2R w KQkq - 0 8.' - 3w544546aad9f61ae2C06frDéfense françaiseVariante Tarrasch, variante fermée, ligne principaler1bqkb1r/pp1n1ppp/2n1p3/2ppP3/3P4/2PB4/PP1NNPPP/R1BQK2R b KQkq - 2 7& + 3Q b0b0d130d9411edC07frDéfense françaiseVariante Tarrasch, système ouvertrnbqkbnr/pp3ppp/4p3/2pp4/3PP3/8/PPPN1PPP/R1BQKBNR w KQkq - 0 4 % - 3A13c0de9acd5e9320 C08frDéfense françaiseVariante Tarrasch, ouverternbqkbnr/pp3ppp/8/2pp4/3P4/8/PPPN1PPP/R1BQKBNR w KQkq - 0 5($ - 3w 6349ea8eb429571eC09frDéfense françaiseVariante Tarrasch, variante ouverte, ligne principaler1bqkbnr/pp3ppp/2n5/2pp4/3P4/5N2/PPPN1PPP/R1BQKB1R w KQkq - 2 6# - 3- 4f837c7daacc3079yC10frDéfense françaiseVariante Paulsenrnbqkbnr/ppp2ppp/4p3/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3" - 31 146d4888073671efC11frDéfense françaiseVariante classiquernbqkb1r/ppp2ppp/4pn2/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR w KQkq - 2 4 ! - 331b7676b8fc4b6205C12frDéfense françaiseVariante McCutcheonrnbqk2r/ppp2ppp/4pn2/3p2B1/1b1PP3/2N5/PPP2PPP/R2QKBNR w KQkq - 4 5  | s j a X O F = 4 + "     { s k c [ S K C ; 3 + #     v m d [ R K C ; 3 + #    { s k b Y P G > 5 , #     } u m e ] U M E = 5 - %   }ume]UME=5-% {ri`WNE<3*!yqiaYQH?6-$ xph`XPH@80( g_WOG?7/'vmd[RI@7.%wog_WOG?7/'vmd[RI@7.%; yLb~}wogg_]StRJ@=r71 0*#7b#|lt4Bq[kJ ~Gz w,ddxa`]RNF)3-)e"mwKr3M!~~H~ }{{zRwutomllkj9ibba_ZZYOb?:64c.)Fu1`2}{sjfTLbH,GC:3)'J/ |MK|zxf_-N<~~5}wiih)]]]QPnOPNHF/Bp@+>::*/&@]m .@"Z&QLU tV~~}}} wng[XSk?C>=9X7/8. .,!  fI P7NJ}mQ!nl bwne\SJA8/& t |tld\TLD<4,$   k w o g _ W O G ? 7 / '      w o f ] T K B 9 0 '    b z r j b Z R J B : 2 * "    } t k b Y P } H @ 8 0 (    MJ+ poedcYNNK}J*H@b<7-)#7 H!5nSB{{RzZxvtzolgdNc_^\\)ZqV RBNM\K`GGB;<8662-E*$#%@jT# PM7u fvYz~|xZqYq)hhhfdaNIAA3+p>~  ng`>Sm-& |p$j~}{v pQ 5 [ Iz^/i*+T - ! 9fe4e7cc0be4da40@B75frSicilienneVariante du dragon, attaque yougoslave avec déviations rapidesrnbqk2r/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R b KQkq - 0 7S - !Y 954c0a7bdebd33abB76frSicilienneVariante du dragon, attaque yougoslavernbq1rk1/pp2ppbp/3p1np1/8/3NP3/2N1BP2/PPP3PP/R2QKB1R w KQ - 1 8$R - !} 750a293e26d69faeB77frSicilienneVariante du dragon, attaque yougoslave, ligne principaler1bq1rk1/pp2ppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/R3K2R b KQ - 4 9Q - !Y afe6924fafae4007B78frSicilienneVariante du dragon, attaque yougoslaver2q1rk1/pp1bppbp/2np1np1/8/2BNP3/2N1BP2/PPPQ2PP/2KR3R b - - 6 10P - !Y8869b3903cc79859YB79frSicilienneVariante du dragon, attaque yougoslaver1r3k1/pp1bppbp/2np1np1/q7/3NP2P/1BN1BP2/PPPQ2P1/2KR3R b - - 4 12O - !Y416da3b2b7e1c8bdB79frSicilienneVariante du dragon, attaque yougoslaver1r3k1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R w - - 3 12N - !Y ea369b3dade318f6B79frSicilienneVariante du dragon, attaque yougoslaver4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/2KR3R b - - 2 11M - !Yd21bde1efec1176enB79frSicilienneVariante du dragon, attaque yougoslaver4rk1/pp1bppbp/2np1np1/q7/2BNP2P/2N1BP2/PPPQ2P1/R3K2R w KQ - 1 11L + !Yb684b4557b336e1B79frSicilienneVariante du dragon, attaque yougoslaver2q1rk1/pp1bppbp/2np1np1/8/2BNP2P/2N1BP2/PPPQ2P1/R3K2R b KQ - 0 10K - != ad2226cdb2fee70c B80frSicilienneVariante de Scheveninguernbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6J + ![ e6f271b5a8b0a11B81frSicilienneVariante de Scheveningue, attaque Keresrnbqkb1r/pp3ppp/3ppn2/8/3NP1P1/2N5/PPP2P1P/R1BQKB1R b KQkq - 0 6I - !c 50345bc0ab6fda85B82frSicilienneVariante de Scheveningue, attaque Matanovicrnbqkb1r/pp3ppp/3ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6H - !e dea2a534b3dbadafB83frSicilienneVariante de Scheveningue, variante classiquernbqkb1r/pp3ppp/3ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 1 6G + !e c5554c754fb5573sB84frSicilienneVariante de Scheveningue, variante classiquernbqkb1r/1p3ppp/p2ppn2/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 0 7,F - ! 22c4b53d4c4359e8B85frSicilienneVariante de Scheveningue, variante classique, variante Paulsenr1b1kb1r/1pq2ppp/p1nppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 w kq - 4 9+E - ! 89296ddf5dd2fcebB85frSicilienneVariante de Scheveningue, variante classique, variante Paulsenrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQ1RK1 b kq - 3 8,D - ! f75c16eb212127fbB85frSicilienneVariante de Scheveningue, variante classique, variante Paulsenrnb1kb1r/1pq2ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R w KQkq - 2 8+C - ! f14329ca4d6a68faB85frSicilienneVariante de Scheveningue, variante classique, variante Paulsenrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP1B1PP/R1BQK2R b KQkq - 1 7)B - ! 82c3aa334c4f2259YB85frSicilienneVariante de Scheveningue, variante classique, variante Paulsenrnbqkb1r/1p3ppp/p2ppn2/8/3NPP2/2N5/PPP3PP/R1BQKB1R w KQkq - 0 7xA - !) ce9192e59abd31aaB86frSicilienneAttaque Sozinernbqkb1r/pp3ppp/3ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6 @ - !I b56619216d1624afB87frSicilienneAttaque Sozine, variante Flankrnbqkb1r/5ppp/p2ppn2/1p6/3NP3/1BN5/PPP2PPP/R1BQK2R w KQkq - 0 8 ? - !I d5627334f6bb9992B87frSicilienneAttaque Sozine, variante Flankrnbqkb1r/1p3ppp/p2ppn2/8/3NP3/1BN5/PPP2PPP/R1BQK2R b KQkq - 1 7> - !I 1c6663167d9dc976vB87frSicilienneAttaque Sozine, variante Flankrnbqkb1r/1p3ppp/p2ppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7 = - !Q 657c4a078b2c94a9B88frSicilienneAttaque Sozine, variante Leonhardtr1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N5/PPP2PPP/R1BQK2R w KQkq - 0 7 < - !M 1674f1eb0a168f27'B89frSicilienneAttaque Sozine, ligne principaler1bqkb1r/pp3ppp/2nppn2/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 1 7 [W.   g Ej{F a[}n + !1 3388fe7ba6898feB58frSicilienneVariante classiquer1bqkb1r/pp2pppp/2np1n2/8/3NP3/2N5/PPP1BPPP/R1BQK2R b KQkq - 4 6m - !51d31bf80389aa602B59frSicilienneVariante Boleslavskyr1bqkb1r/pp3ppp/2np1n2/4p3/4P3/1NN5/PPP1BPPP/R1BQK2R b KQkq - 1 7l - !;b6e25b280bc70995B60frSicilienneVariante Richter-Rauzerr1bqkb1r/pp2pppp/2np1n2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R b KQkq - 4 6k - !_7c3beaf510240604B61frSicilienneVariante Richter-Rauzer, variante moderner2qkb1r/pp1bpppp/2np1n2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 3 7j - !; c095a91913e599c7B62frSicilienneVariante Richter-Rauzerr1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPP2PPP/R2QKB1R w KQkq - 0 7i - !m e88de696d25c4667gB63frSicilienneVariante Richter-Rauzer, variante traditionneller1bqkb1r/pp3ppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R b KQkq - 1 7h - !c 33d240e0871d310c B64frSicilienneVariante Richter-Rauzer, variante classiquer1bq1rk1/pp2bppp/2nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b - - 0 9g - !c cec43ded9e8c0c85B64frSicilienneVariante Richter-Rauzer, variante classiquer1bq1rk1/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w - - 4 9f - !c c46cd05a4bd5e56enB64frSicilienneVariante Richter-Rauzer, variante classiquer1bqk2r/pp2bppp/2nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 3 8e - ![ 9eb1c566eb2c084fOB65frSicilienneVariante Richter-Rauzer, attaque Rauzerr1bq1rk1/pp2bppp/3ppn2/6B1/3nPP2/2N5/PPPQ2PP/2KR1B1R w - - 0 105d - !3a7a1765357cbebbB66frSicilienneVariante Richter-Rauzer, variante néo-moderne avec déviations rapidesr1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/R3KB1R w KQkq - 0 8c - !ie096ac14bc046112B67frSicilienneVariante Richter-Rauzer, variante néo-moderner2qkb1r/1p1b1ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R w kq - 2 9b + !i 2575246665eb123#B67frSicilienneVariante Richter-Rauzer, variante néo-moderner1bqkb1r/1p3ppp/p1nppn2/6B1/3NP3/2N5/PPPQ1PPP/2KR1B1R b kq - 1 8a + !i94ca2f66f3ef00a B68frSicilienneVariante Richter-Rauzer, variante néo-moderner2qk2r/1p1bbppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R w kq - 1 10` - !i1d80d119a5955c9bB68frSicilienneVariante Richter-Rauzer, variante néo-moderner2qkb1r/1p1b1ppp/p1nppn2/6B1/3NPP2/2N5/PPPQ2PP/2KR1B1R b kq - 0 9/_ - ! b2105b3eed55ab18B69frSicilienneVariante Richter-Rauzer, variante néo-moderne, attaque Nejmetdinovr2qk2r/3bbppp/p1nppB2/1p6/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 0 112^ - !172f52ef364bf5f8B69frSicilienneVariante Richter-Rauzer, variante néo-moderne, attaque Nejmetdinovr2qk2r/3bbppp/p1nppn2/1p4B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R w kq - 0 112] - !772b38faade648c5B69frSicilienneVariante Richter-Rauzer, variante néo-moderne, attaque Nejmetdinovr2qk2r/1p1bbppp/p1nppn2/6B1/4PP2/2N2N2/PPPQ2PP/2KR1B1R b kq - 2 10}\ - !1 32e187a7d153e515B70frSicilienneVariante du dragonrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6[ - !Y cff7faaac8c2d89cB71frSicilienneVariante du dragon, variante Levenfishrnbqkb1r/pp2pp1p/3p1np1/8/3NPP2/2N5/PPP3PP/R1BQKB1R b KQkq - 0 6Z - !141e93c4b5069fe9bB72frSicilienneVariante du dragonrnbqkb1r/pp2pp1p/3p1np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 1 6Y - !Y 574d21d2c7690181B73frSicilienneVariante du dragon, variante classiquer1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N1B3/PPP1BPPP/R2Q1RK1 b kq - 5 8X - !Y 24459a3e46531a0fB73frSicilienneVariante du dragon, variante classiquer1bqk2r/pp2ppbp/2np1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 w kq - 4 8W - !Y 8fa842dc57c2bf0c B73frSicilienneVariante du dragon, variante classiquernbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQ1RK1 b kq - 3 7V - !Y f1dd39e82b31641cB73frSicilienneVariante du dragon, variante classiquernbqk2r/pp2ppbp/3p1np1/8/3NP3/2N5/PPP1BPPP/R1BQK2R w KQkq - 2 7$U - !} c994f44803272ea0B74frSicilienneVariante du dragon, variante classique, ligne principaler1bq1rk1/pp2ppbp/2np1np1/8/4P3/1NN1B3/PPP1BPPP/R2Q1RK1 b - - 7 9 roP 5 8 T;'  XNr" - !{ 4be4c06744078347GB35frSicilienneVariante dragon accélérée, variante moderne avec Fc4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 2 6 - !k 8cec7a573ead61333B36frSicilienneVariante dragon accélérée, étau de Maróczyr1bqkbnr/pp1ppp1p/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R b KQkq - 0 5 - !_ 3c5047e1c5eaaa99B37frSicilienneFianchetto accéléré, étau de Maróczyr1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/8/PP3PPP/RNBQKB1R w KQkq - 1 6 - !k 4f58fc0d44d0b117B38frSicilienneVariante dragon accélérée, étau de Maróczyr1bqk1nr/pp1pppbp/2n3p1/8/2PNP3/4B3/PP3PPP/RN1QKB1R b KQkq - 2 61 - !72028b3c2682e3344B39frSicilienneVariante dragon accélérée, étau de Maróczy, variante de Breyerr1bqk2r/pp1pppbp/2n3p1/8/2PNP1n1/2N1B3/PP3PPP/R2QKB1R w KQkq - 5 80 - !ef21d05a2bc87258XB39frSicilienneVariante dragon accélérée, étau de Maróczy, variante de Breyerr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/2N1B3/PP3PPP/R2QKB1R b KQkq - 4 70 - ! 14b6c8f8e92af081B39frSicilienneVariante dragon accélérée, étau de Maróczy, variante de Breyerr1bqk2r/pp1pppbp/2n2np1/8/2PNP3/4B3/PP3PPP/RN1QKB1R w KQkq - 3 7 - !3 c95e54397292bb84B40frSicilienneVariante françaisernbqkbnr/pp1p1ppp/4p3/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3u - !%e6166d08e8be95f2B41frSicilienneVariante Kanrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5 - !I b31bccaad13e5781B42frSicilienneVariante Kan, variante modernernbqkbnr/1p1p1ppp/p3p3/8/3NP3/3B4/PPP2PPP/RNBQK2R b KQkq - 1 5  - !Q 1d8175aa2a5c172b+B43frSicilienneVariante Kan, variante du cavalierrnbqkbnr/1p1p1ppp/p3p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5{~ - !1 9f0c44191e0fc82d-B44frSicilienneVariante Taïmanovr1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5} - !U 649b5cbbdced4af4B45frSicilienneVariante Taïmanov, ligne principaler1bqkbnr/pp1p1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5~| - !1b66cad483bcdb228(B46frSicilienneVariante Taïmanovr1bqkbnr/1p1p1ppp/p1n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 0 6{ - !Y 6284639ab0a605f5B47frSicilienneVariante Taïmanov, variante Bastrikovr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N5/PPP2PPP/R1BQKB1R w KQkq - 3 6z - !Y118cd876319c1e7b{B48frSicilienneVariante Taïmanov, variante Bastrikovr1b1kbnr/ppqp1ppp/2n1p3/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 4 6y - !Yb0fbaa7cd799ac04B49frSicilienneVariante Taïmanov, variante Bastrikovr1b1kbnr/1pqp1ppp/p1n1p3/8/3NP3/2N1B3/PPP1BPPP/R2QK2R b KQkq - 1 7kx - ! 86933069b8c862bbB50frSiciliennernbqkbnr/pp2pppp/3p4/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3w - !a b54de1c6dd5cf1388B51frSicilienneVariante de Moscou, attaque Canal-Sokolskyrnbqkbnr/pp2pppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 1 3(v - ! 578c1f9407062109 B52frSicilienneVariante de Moscou, attaque Canal-Sokolsky, ligne principalern1qkbnr/pp1bpppp/3p4/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 2 4{u - !3610fb232e064c902B53frSicilienneVariante Tchekhoverrnbqkbnr/pp2pppp/3p4/8/3QP3/5N2/PPP2PPP/RNB1KB1R b KQkq - 0 4zt - !19298abf0be4b265aZB54frSicilienneVariantes modernesrnbqkbnr/pp2pp1p/3p2p1/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 0 5xs - !17b2cf8abc5c4b411B54frSicilienneVariantes modernesrnbqkbnr/pp2pppp/3p4/8/3NP3/8/PPP2PPP/RNBQKB1R b KQkq - 0 4r - !k f7d5f38a3e857143CB55frSicilienneVariante Prins, attaque de Venise (anti-dragon)rnbqkb1r/pp3ppp/3p1n2/1B2p3/3NP3/5P2/PPP3PP/RNBQK2R b KQkq - 1 6q - !k c40b22255b11e2c0B55frSicilienneVariante Prins, attaque de Venise (anti-dragon)rnbqkb1r/pp3ppp/3p1n2/4p3/3NP3/5P2/PPP3PP/RNBQKB1R w KQkq - 0 6|p - !1 db55d4fcaadc775e^B56frSicilienneVariantes modernesrnbqkb1r/pp2pppp/3p1n2/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 2 5 o - !M 130bb836930e04fbB57frSicilienneAttaque Sozine, pas Scheveninguer1bqkb1r/pp2pppp/2np1n2/8/2BNP3/2N5/PPP2PPP/R1BQK2R b KQkq - 1 6 PW i } _ _ v #"$'?XPf( -  104676bf8ad1922d-B10frCaro-Kannrnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2' - eb70c6acdfb843105B11frCaro-KannAttaque des deux cavaliers, variante Mindenorn1qkbnr/pp2pppp/2p5/3p4/4P1b1/2N2N2/PPPP1PPP/R1BQKB1R w KQkq - 2 4f& -  d57359159b18bf6foB12frCaro-Kannrnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2y% - 377c6714cdda3b34fOB13frCaro-KannVariante d'échangernbqkbnr/pp2pppp/2p5/3P4/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3v$ - ' 5e9b9f4749fc46efB14frCaro-KannAttaque Panovrnbqkb1r/pp3ppp/4pn2/3p4/2PP4/2N5/PP3PPP/R1BQKBNR w KQkq - 0 6j# -  ab8e63a3c52e7390B15frCaro-Kannrnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3" - ?3ecf958145a4756clB16frCaro-KannVariante Bronstein-Larsenrnbqkb1r/pp2pp1p/2p2p2/8/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 0 6v! - +fa25b904ac89bf9bB17frCaro-KannVariante Karpovr1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5z - 14adfabd7fbc45bdaB18frCaro-KannVariante classiquern1qkbnr/pp2pppp/2p5/5b2/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5| - 1 41ae97c7b9f29a70pB19frCaro-KannVariante classiquer2qkbnr/pp1nppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R w KQkq - 2 8} - 1 724dec9a595a77bcB19frCaro-KannVariante classiquern1qkbnr/pp2ppp1/2p3bp/8/3P3P/5NN1/PPP2PP1/R1BQKB1R b KQkq - 1 7| - 1 a929006c31bc1681B19frCaro-KannVariante classiquern1qkbnr/pp2ppp1/2p3bp/8/3P3P/6N1/PPP2PP1/R1BQKBNR w KQkq - 0 7h - ! 644d4afe02564aebB20frSiciliennernbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2z - !1a1786554139f67a9B21frSicilienneGambit Smith-Morrarnbqkbnr/pp1ppppp/8/2p5/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2x - !+ 1297b266d226456dmB22frSicilienneVariante Alapinrnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2p - ! 9fda525cc0b4c8322B23frSicilienneFerméernbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR b KQkq - 1 2 - !318d131ff31f2b509 B24frSicilienneFermée, fianchettor1bqkbnr/pp1ppppp/2n5/2p5/4P3/2N3P1/PPPP1P1P/R1BQKBNR b KQkq - 0 3v - !633729db6a3fc628(B25frSicilienneFerméer1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR w KQkq - 0 6v - !5a8dbfbab8478f45EB25frSicilienneFerméer1bqk1nr/pp1pppbp/2n3p1/2p5/4P3/2NP2P1/PPP2PBP/R1BQK1NR b KQkq - 0 5w - !103f9237eb05dda6B26frSicilienneFerméer1bqk1nr/pp2ppbp/2np2p1/2p5/4P3/2NPB1P1/PPP2PBP/R2QK1NR b KQkq - 1 6j - ! bf29a6086ab02bd6B27frSiciliennernbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2z - !- 6dde57fb8d90d30a B28frSicilienneVariante O'Kellyrnbqkbnr/1p1ppppp/p7/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 0 3~ - !3 e4c792fdc74a6a40@B29frSicilienneVariante Nimzovitchrnbqkb1r/pp1ppppp/5n2/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3~ - !1 14c47eea7b218ed5B30frSicilienneVieille sicilienner1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3 - !aceaefc1e653a8f1dB31frSicilienneAttaque Nejmetdinov-Nimzovitch, fianchettor1bqkbnr/pp1ppp1p/2n3p1/1Bp5/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 0 4s - ! d1f151406ae8a397B32frSicilienneOuverter1bqkbnr/pp1ppppp/2n5/2p5/3PP3/5N2/PPP2PPP/RNBQKB1R b KQkq - 0 3q - ! b29582ddabd719e9B33frSicilienneOuverter1bqkb1r/pp1ppppp/2n2n2/8/3NP3/8/PPP2PPP/RNBQKB1R w KQkq - 1 5 - !i fb58fdd1bf4048edB34frSicilienneVariante dragon accélérée, variante moderner1bqkbnr/pp1ppp1p/2n3p1/8/3NP3/2N5/PPP2PPP/R1BQKB1R b KQkq - 1 5" ) !{b1fb5640840ff9B35frSicilienneVariante dragon accélérée, variante moderne avec Fc4r1bqk2r/pp1pppbp/2n2np1/8/2BNP3/2N1B3/PPP2PPP/R2QK2R b KQkq - 5 7# - !{63024f7e68c7d95f_B35frSicilienneVariante dragon accélérée, variante moderne avec Fc4r1bqk2r/pp1pppbp/2n2np1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R w KQkq - 4 7$ - !{38ec7b8bc53d98c9B35frSicilienneVariante dragon accélérée, variante moderne avec Fc4r1bqk1nr/pp1pppbp/2n3p1/8/3NP3/2N1B3/PPP2PPP/R2QKB1R b KQkq - 3 6 Xx| f k  Z dBYea^XD - #1 2fcd1ef7e23d8682A90frHollandaiseVariante classiquernbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 2 4C - #1 9a3d3d8aafd05efbA90frHollandaiseVariante classiquernbqkb1r/pppp2pp/4pn2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 1 4}B - #1 c1d3097f022a1f6dmA90frHollandaiseVariante classiquernbqkbnr/pppp2pp/4p3/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3~A - #1 3b016d1828962a13A91frHollandaiseVariante classiquernbqk2r/ppppb1pp/4pn2/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 3 5~@ - #1 eacd6c599529a2c5A92frHollandaiseVariante classiquernbq1rk1/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R w KQ - 5 6~? - #1 e06581ee40704b2e.A92frHollandaiseVariante classiquernbqk2r/ppppb1pp/4pn2/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 4 5*> - #9d74552daf835c9eA93frHollandaiseVariante classique, variante Stonewall, variante Botvinnikrnbq1rk1/ppp1b1pp/4pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 b - - 0 7= - #kad1d698452931e4cLA94frHollandaiseVariante classique, variante Stonewall avec Fa3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/BP3NP1/P3PPBP/RN1Q1RK1 b - - 1 8< + #kf0eb8c2d8438f25%A94frHollandaiseVariante classique, variante Stonewall avec Fa3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/1P3NP1/P3PPBP/RNBQ1RK1 w - - 0 8 ; - #k783fc034c02c6691A95frHollandaiseVariante classique, variante Stonewall avec Cc3rnbq1rk1/pp2b1pp/2p1pn2/3p1p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8: - #k71c3d015160fa999A95frHollandaiseVariante classique, variante Stonewall avec Cc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 1 59 - #kaaa73ce37ee9c8a4A95frHollandaiseVariante classique, variante Stonewall avec Cc3rnbqkb1r/ppp3pp/4pn2/3p1p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 0 58 - #1 ad02810c3ba230b8A96frHollandaiseVariante classiquernbq1rk1/ppp1b1pp/3ppn2/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 77 - #cad1415bcca6297dcA97frHollandaiseVariante classique, variante Iline-Jenevskyrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 86 - #cbb0dbc699c1b0493A97frHollandaiseVariante classique, variante Iline-Jenevskyrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 35 - #c 97eb07287cccdcabA97frHollandaiseVariante classique, variante Iline-Jenevskyrnbqkb1r/ppppp1pp/5n2/5p2/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 2 364 - #1c0d67a1d8b4abb8A98frHollandaiseVariante classique, variante Iline-Jenevsky, ligne Alatortsev-Lisitsynrnb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/2N2NP1/PPQ1PPBP/R1B2RK1 b - - 3 853 - #21b275e810effcb1A99frHollandaiseVariante classique, variante Iline-Jenevsky, ligne principale modernernb1qrk1/ppp1b1pp/3ppn2/5p2/2PP4/1PN2NP1/P3PPBP/R1BQ1RK1 b - - 0 8n2 - 1 823c9b50fd114196B00frPartie du pion-roirnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1p1 + 3 756b94461c50fb0B01frDéfense scandinavernbqkbnr/ppp1pppp/8/3p4/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2m0 - / d9d2afa550eb0000B02frDéfense Alekhinernbqkb1r/pppppppp/5n2/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2o/ - / b98e490b8bfe7e93B03frDéfense Alekhinernbqkb1r/pppppppp/8/3nP3/3P4/8/PPP2PPP/RNBQKBNR b KQkq - 0 3. - /- 5b50339c316056c3B04frDéfense AlekhineVariante modernernbqkb1r/ppp1pppp/3p4/3nP3/3P4/5N2/PPP2PPP/RNBQKB1R b KQkq - 1 4- - /Q5983f9ae76e55829)B05frDéfense AlekhineVariante moderne, ligne principalern1qkb1r/ppp1pppp/3p4/3nP3/3P2b1/5N2/PPP2PPP/RNBQKB1R w KQkq - 2 5w, - ? 6b88c80b869ed3ddB06frDéfense Robatsch modernernbqkbnr/pppppp1p/6p1/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2o+ - ' deca0ecc51b8e6f6B07frDéfense Pircrnbqkb1r/ppp1pppp/3p1n2/8/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 2 3* - '1ec1ab16142d11580B08frDéfense PircVariante classiquernbqkb1r/ppp1pp1p/3p1np1/8/3PP3/2N2N2/PPP2PPP/R1BQKB1R b KQkq - 1 4) - '5ca68209a33a649344B09frDéfense PircAttaque autrichiennernbqkb1r/ppp1pp1p/3p1np1/8/3PPP2/2N5/PPP3PP/R1BQKBNR b KQkq - 0 4 ie<  T 9 72HMEg'i` - +1 b29d5f78e8cd0fc1A72frDéfense BenoniVariante classiquernbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQK2R w KQ - 4 9_ - +U cce8244c943ed4d1A73frDéfense BenoniVariante classique, ligne principalernbq1rk1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 b - - 5 9^ - +S75d6ab531e8df9c3A74frDéfense BenoniVariante classique, ligne complèternbq1rk1/1p3pbp/p2p1np1/2pP4/P3P3/2N2N2/1P2BPPP/R1BQ1RK1 b - - 0 10] - +S1e1fd5bf731e2c0d A74frDéfense BenoniVariante classique, ligne complèternbq1rk1/1p3pbp/p2p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 0 10!\ - +e770561615908f729)A75frDéfense BenoniVariante classique, contre-attaque argentinern1q1rk1/1p3pbp/p2p1np1/2pP4/P3P1b1/2N2N2/1P2BPPP/R1BQ1RK1 w - - 1 11[ - +Wd0b9e30ca64e3153SA76frDéfense BenoniVariante classique, défense Czerniakrnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N2N2/PP2BPPP/R1BQ1RK1 w - - 6 10#Z + +s d9b78eb64f30fd9A77frDéfense BenoniVariante classique, défense Czerniak, ligne de Talrnbqr1k1/pp3pbp/3p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 b - - 7 10Y - +W431bd37be20c9365eA78frDéfense BenoniVariante classique, défense Czerniakr1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N5/PP1NBPPP/R1BQ1RK1 w - - 7 11X - +W2daa354a42c67c14A79frDéfense BenoniVariante classique, défense Czerniakr1bqr1k1/pp3pbp/n2p1np1/2pP4/4P3/2N2P2/PP1NB1PP/R1BQ1RK1 b - - 0 11gW - # 1761df2bb9d0fc00A80frHollandaisernbqkbnr/ppppp1pp/8/5p2/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2|V - #1 3b87646a590724388A81frHollandaiseAttaque fianchettornbqkbnr/ppppp1pp/8/5p2/3P4/6P1/PPP1PP1P/RNBQKBNR b KQkq - 0 2wU - #+d366d2635250410a A82frHollandaiseGambit Stauntonrnbqkbnr/ppppp1pp/8/5p2/3PP3/8/PPP2PPP/RNBQKBNR b KQkq - 0 2zT - #+ 77560104c9136646FA83frHollandaiseGambit Stauntonrnbqkb1r/ppppp1pp/5n2/6B1/3Pp3/2N5/PPP2PPP/R2QKBNR b KQkq - 3 4hS - # 9b42400ffadf5707A84frHollandaisernbqkbnr/ppppp1pp/8/5p2/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2R - #? 3b3b6c5895c79448HA85frHollandaiseVariante du cavalier-damernbqkb1r/ppppp1pp/5n2/5p2/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 2 3wQ - #! ec4acfbbb7f2cea9A86frHollandaiseFianchettornbqkb1r/ppppp1pp/5n2/5p2/2PP4/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 3~P - #1 dbd66edd12312e0c A87frHollandaiseVariante Leningradrnbqk2r/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQK2R b KQkq - 3 5|O ) #1 b2822b7ad74f311A87frHollandaiseVariante Leningradrnbqk2r/ppppp1bp/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR w KQkq - 2 5N - #1 b00ebf9d8190849bA87frHollandaiseVariante Leningradrnbqkb1r/ppppp2p/5np1/5p2/2PP4/6P1/PP2PPBP/RNBQK1NR b KQkq - 1 4M - #Sff5c9b72dcc104f8A88frHollandaiseVariante Leningrad, variante Warsawrnbq1rk1/pp2p1bp/2pp1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 8L - #S6d26769dab01d743CA88frHollandaiseVariante Leningrad, variante Warsawrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 1 7K - #S96b16e3f69e3559aA88frHollandaiseVariante Leningrad, variante Warsawrnbq1rk1/ppp1p1bp/3p1np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 w - - 0 7J - #S af0bf85ebb9b1cf7A88frHollandaiseVariante Leningrad, variante Warsawrnbq1rk1/ppppp1bp/5np1/5p2/2PP4/5NP1/PP2PPBP/RNBQ1RK1 b - - 0 6I - #S 2328677af894b7f0A88frHollandaiseVariante Leningrad, variante Warsawrnbq1rk1/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 w - - 4 6H - #S 29808acd2dcd5e1bA88frHollandaiseVariante Leningrad, variante Warsawrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQ1RK1 b kq - 3 5G - #S 57f5f1f9513e850b A88frHollandaiseVariante Leningrad, variante Warsawrnbqk2r/ppppp1bp/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R w KQkq - 2 5F - #S e749cc4faa794ea1A88frHollandaiseVariante Leningrad, variante Warsawrnbqkb1r/ppppp2p/5np1/5p2/3P4/5NP1/PPP1PPBP/RNBQK2R b KQkq - 1 4E - #Yc6cbae7fba907240@A89frHollandaiseVariante Leningrad, variante Matulavicr1bq1rk1/ppp1p1bp/2np1np1/5p2/2PP4/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 2 8 _;   ~ n @Iz|{| - +! 96a4a4427a0b11c2A62frDéfense BenoniFianchettornbqk2r/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R b KQkq - 3 8{{ - +! 4dc048b412ed70ffA62frDéfense BenoniFianchettornbqk2r/pp3pbp/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR w KQkq - 2 8{z - +!fd7c7502e9aabb55UA62frDéfense BenoniFianchettornbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PPBP/R1BQK1NR b KQkq - 1 7{y - +!488c567fa447632c,A62frDéfense BenoniFianchettornbqkb1r/pp3p1p/3p1np1/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR w KQkq - 0 7zx - +! a1380524dfc8f167gA62frDéfense BenoniFianchettornbqkb1r/pp3ppp/3p1n2/2pP4/8/2N3P1/PP2PP1P/R1BQKBNR b KQkq - 1 6yw - +! 5aaf1d861d2a73beA62frDéfense BenoniFianchettornbqkb1r/pp3ppp/3p1n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 6yv - +! 63158be7cf523ad3A62frDéfense BenoniFianchettornbqkb1r/pp1p1ppp/5n2/2pP4/8/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 5{u - +! 6d3f102a6d9c2eceA62frDéfense BenoniFianchettornbqkb1r/pp1p1ppp/5n2/2pp4/2P5/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 5{t - +!522bc9ee7739ee05A62frDéfense BenoniFianchettornbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/6P1/PP2PP1P/RNBQKBNR b KQkq - 0 4{s - +!e8238abdee1f7858XA62frDéfense BenoniFianchettornbqkb1r/pp1p1ppp/4pn2/2p5/2PP4/6P1/PP2PP1P/RNBQKBNR w KQkq - 0 4r - +Gd19a499c3309cef5A63frDéfense BenoniFianchetto, défense Hastingsr1bq1rk1/pp1n1pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 6 10 q - +G e27932c1d3a123399A63frDéfense BenoniFianchetto, défense Hastingsrnbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 b - - 5 9$p - +ka9d79a24497738efA64frDéfense BenoniFianchetto, défense Hastings, ligne principaler1bqr1k1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 w - - 3 12#o - +kb5865d647b07dd6dmA64frDéfense BenoniFianchetto, défense Hastings, ligne principaler1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N3P1/1P1NPPBP/R1BQ1RK1 b - - 2 11$n - +k68a4c683b9bae3e7A64frDéfense BenoniFianchetto, défense Hastings, ligne principaler1bq1rk1/1p1n1pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 w - - 1 11!m - +k5b47bdde59120e2b+A64frDéfense BenoniFianchetto, défense Hastings, ligne principalernbq1rk1/1p3pbp/p2p1np1/2pP4/P7/2N2NP1/1P2PPBP/R1BQ1RK1 b - - 0 10!l - +k308ec3323481dbe5A64frDéfense BenoniFianchetto, défense Hastings, ligne principalernbq1rk1/1p3pbp/p2p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQ1RK1 w - - 0 10k - +5 49d9b32dd49f9455UA65frDéfense BenoniVariante du pion-roirnbqkb1r/pp3ppp/3p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 6j - +5 8ddebe653f1f295f_A65frDéfense BenoniVariante du pion-roirnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 6i - +3 5d7b9d7bb6813b97A66frDéfense BenoniAttaque des 4 pionsrnbqkb1r/pp3p1p/3p1np1/2pP4/4PP2/2N5/PP4PP/R1BQKBNR b KQkq - 0 7h - +3 a06de076af10061eA66frDéfense BenoniAttaque des 4 pionsrnbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 7g - +/ de197162285263beA67frDéfense BenoniVariante Taimanovrnbqk2r/pp3pbp/3p1np1/1BpP4/4PP2/2N5/PP4PP/R1BQK1NR b KQkq - 2 8f - +3 3c0ba18cf07978ebA68frDéfense BenoniAttaque des 4 pionsrnbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R w KQ - 3 9e - +336a34c3b25209100A68frDéfense BenoniAttaque des 4 pionsrnbqk2r/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP4PP/R1BQKB1R b KQkq - 2 8d - +W53dae535c32cd7caA69frDéfense BenoniAttaque des 4 pions, ligne principalernbqr1k1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R w KQ - 1 10c - +W4f8b2275f15c3248HA69frDéfense BenoniAttaque des 4 pions, ligne principalernbq1rk1/pp3pbp/3p1np1/2pP4/4PP2/2N2N2/PP2B1PP/R1BQK2R b KQ - 0 9b - +17b090c80c7f66723#A70frDéfense BenoniVariante classiquernbqkb1r/pp3p1p/3p1np1/2pP4/4P3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 0 7a + +cdef66008c3b7741AA71frDéfense BenoniVariante classique, Averbakh-Grivas attaquernbqk2r/pp3pbp/3p1np1/2pP2B1/4P3/2N2N2/PP3PPP/R2QKB1R b KQkq - 2 8 w( ? 1   5^fg`Zxw - -/ 500fcbf03f855586A42frDéfense moderneSystème Averbakhrnbqk1nr/ppp1ppbp/3p2p1/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4u - ; 657f681cf81fdaa3A43frDéfense vieille Benonirnbqkbnr/pp1ppppp/8/2p5/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2u - ; 9a3e66dbf801f641AA44frDéfense vieille Benonirnbqkbnr/pp1p1ppp/8/2pPp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6 0 3e -  d8e08d47aaa29048HA45frIndiennernbqkb1r/pppppppp/5n2/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 1 2} + ; 38461b1c244f175uA46frIndienneVariante des cavalierssrnbqkb1r/pppppppp/5n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R b KQkq - 2 2 - I 68ed28a13cc746eeA47frDéfense pseudo-ouest-indiennernbqkb1r/p1pppppp/1p3n2/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3u - 7 ea3032eab9cb633e>A48frDéfense est-indiennernbqkb1r/pppppp1p/5np1/8/3P4/5N2/PPP1PPPP/RNBQKB1R w KQkq - 0 3  - 73 c6d689ab591cbb06A49frDéfense est-indienneVariante Przepiorkarnbqkb1r/pppppp1p/5np1/8/3P4/5NP1/PPP1PP1P/RNBQKB1R b KQkq - 0 3u - -54c31263e9ad3b4fOA50frIndienneLigne principalernbqkb1r/pppppppp/5n2/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq - 0 2 - A debb1a297a48c379yA51frIndienneGambit de Budapest refusérnbqkb1r/pppp1ppp/5n2/4p3/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3x - 1df05be0d7f37e565eA52frIndienneGambit de Budapestrnbqkb1r/pppp1ppp/8/4P3/2P3n1/8/PP2PPPP/RNBQKBNR w KQkq - 1 4x - ? 6d7984023bd57222"A53frDéfense vieille indiennernbqkb1r/ppp1pppp/3p1n2/8/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3 - ?51c9694ea6ad208cdA54frDéfense vieille indienneVariante ukrainiennernbqkb1r/ppp2ppp/3p1n2/4p3/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 4 - ?-30160e09091c39366A55frDéfense vieille indienneLigne principaler1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N2N2/PP3PPP/R1BQKB1R b KQkq - 1 5 - ?-eb72e2ff61fa580b A55frDéfense vieille indienneLigne principaler1bqkb1r/pppn1ppp/3p1n2/4p3/2PPP3/2N5/PP3PPP/R1BQKBNR w KQkq - 0 5 - ?- 610aeab5f21fa03d=A55frDéfense vieille indienneLigne principaler1bqkb1r/pppnpppp/3p1n2/8/2PPP3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 4 - ?- a50de7fd199f1d377A55frDéfense vieille indienneLigne principaler1bqkb1r/pppnpppp/3p1n2/8/2PP4/2N5/PP2PPPP/R1BQKBNR w KQkq - 2 4n - + b2b2c3cd16ea30322A56frDéfense Benonirnbqkb1r/pp1ppppp/5n2/2p5/2PP4/8/PP2PPPP/RNBQKBNR w KQkq - 0 3k - % 68beea8b14611b52RA57frGambit Benkornbqkb1r/p2ppppp/5n2/1ppP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4p - %39a691df7150ed3e>A58frGambit BenkoAcceptérnbqkb1r/3ppppp/P4n2/2pP4/8/8/PP2PPPP/RNBQKBNR b KQkq - 0 5  - %G d1eda6f64269a376vA59frGambit BenkoAccepté, variante yougoslavern1qkb1r/4pppp/b2p1n2/2pP4/4P3/2N5/PP3PPP/R1BQKBNR b KQkq - 0 7 - %G 15eaabbea9e91e7c|A59frGambit BenkoAccepté, variante yougoslavern1qkb1r/4pppp/b2p1n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR w KQkq - 0 7 - %G2c503ddf7b915711A59frGambit BenkoAccepté, variante yougoslavern1qkb1r/3ppppp/b4n2/2pP4/8/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 6 - %Gd7c7257db973d5c8A59frGambit BenkoAccepté, variante yougoslavern1qkb1r/3ppppp/b4n2/2pP4/8/8/PP2PPPP/RNBQKBNR w KQkq - 0 6 - +- 7ecd72af97ee363d=A60frDéfense BenoniVariante modernernbqkb1r/pp1p1ppp/4pn2/2pP4/2P5/8/PP2PPPP/RNBQKBNR w KQkq - 0 4q - + bf0e01c82c76da29)A61frDéfense Benonirnbqkb1r/pp3p1p/3p1np1/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 7p - + 56ba529357f94862bA61frDéfense Benonirnbqkb1r/pp3ppp/3p1n2/2pP4/8/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 1 6o - + ad2d4a31951bcabbA61frDéfense Benonirnbqkb1r/pp3ppp/3p1n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 6o - + 9497dc50476383d6A61frDéfense Benonirnbqkb1r/pp1p1ppp/5n2/2pP4/8/5N2/PP2PPPP/RNBQKB1R b KQkq - 0 5q~ - + 9abd479de5ad97cbA61frDéfense Benonirnbqkb1r/pp1p1ppp/5n2/2pp4/2P5/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 5y} - +! 9c0c49f5af52f829)A62frDéfense BenoniFianchettornbq1rk1/pp3pbp/3p1np1/2pP4/8/2N2NP1/PP2PPBP/R1BQK2R w KQ - 4 9 e [ 9 Y -:4G%e5 - 5=cb7e2dc07deee94aJA27frSicilienne inverséeSystème des 3 cavaliersr1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 34 - 5=90901935d014a8dcA28frSicilienne inverséeSystème des 4 cavaliersr1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R w KQkq - 4 43 - 5=3b7dc1d7c1850ddfA28frSicilienne inverséeSystème des 4 cavaliersrnbqkb1r/pppp1ppp/5n2/4p3/2P5/2N2N2/PP1PPPPP/R1BQKB1R b KQkq - 3 32 - 5Ubc76a27430c370e4A29frSicilienne inverséeSystème des 4 cavaliers, fianchettor1bqkb1r/pppp1ppp/2n2n2/4p3/2P5/2N2NP1/PP1PPP1P/R1BQKB1R b KQkq - 0 4z1 - 52c69d892aad95ce6A30frAnglaiseVariante symétriquernbqkbnr/pp1ppppp/8/2p5/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 20 - a 69d62f3b7e0c510fA31frAnglaiseVariante symétrique, variante anti-Benonirnbqkb1r/pp1ppppp/5n2/2p5/2PP4/5N2/PP2PPPP/RNBQKB1R b KQkq - 1 3&/ -  272b3a620aeb3ab5A32frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannrnbqkb1r/pp1p1ppp/4pn2/8/2PN4/8/PP2PPPP/RNBQKB1R w KQkq - 0 5%. -  515cc85312c9aae7A32frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannrnbqkb1r/pp1ppppp/5n2/8/2PN4/8/PP2PPPP/RNBQKB1R b KQkq - 0 4'- -  36c8950e03f838c9A32frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannrnbqkb1r/pp1ppppp/5n2/8/2Pp4/5N2/PP2PPPP/RNBQKB1R w KQkq - 0 4), -  7751fa22d9981d6foA33frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannr1bqkb1r/pp1p1ppp/2n1pn2/8/2PN4/2N5/PP2PPPP/R1BQKB1R w KQkq - 0 6'+ +  1260813c1ba8d3d=A33frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannr1bqkb1r/pp1ppppp/2n2n2/8/2PN4/2N5/PP2PPPP/R1BQKB1R b KQkq - 0 5** -  66b2554ed08b1f13A33frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannr1bqkb1r/pp1ppppp/2n2n2/8/2Pp4/2N2N2/PP2PPPP/R1BQKB1R w KQkq - 0 5-) -  39acef7bad7f76d5A33frAnglaiseVariante symétrique, variante anti-Benoni, défense Spielmannr1bqkb1r/pp1ppppp/2n2n2/2p5/2PP4/2N2N2/PP2PPPP/R1BQKB1R b KQkq - 0 4 ( - Y d7fec030683bde3f?A34frAnglaiseVariante symétrique, ligne principalernbqkbnr/pp1ppppp/8/2p5/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2' - i 7c1318d279aa7b3c - 9d811da12c924b98cA18frAnglaiseVariante Mikenas-Carlsrnbqkb1r/pppp1ppp/4pn2/8/2P1P3/2N5/PP1P1PPP/R1BQKBNR b KQkq - 0 3= - O3e600bbc3663b2f1A19frAnglaiseVariante sicilienne Mikenas-Carlsrnbqkb1r/pp1p1ppp/4pn2/2p5/2P1P3/2N5/PP1P1PPP/R1BQKBNR w KQkq - 0 4r< - 5 40600176c67bafadA20frSicilienne inverséernbqkbnr/pppp1ppp/8/4p3/2P5/8/PP1PPPPP/RNBQKBNR w KQkq - 0 2s; - 5 bbf719d404992d74tA21frSicilienne inverséernbqkbnr/pppp1ppp/8/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR b KQkq - 1 2: - 51 e0192d21a9636ce2A22frSicilienne inverséeSystème de Brêmernbqkb1r/pppp1ppp/5n2/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 39 - 5Q5e857b8f3e746761aA23frSicilienne inverséeSystème de Brême, variante Keresrnbqkb1r/pp1p1ppp/2p2n2/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 48 - 5I254bc53b323b2691A24frSicilienne inverséeSystème de Brême, fianchettornbqkb1r/pppp1p1p/5np1/4p3/2P5/2N3P1/PP1PPP1P/R1BQKBNR w KQkq - 0 47 - 5+ 101ac13615088877wA25frSicilienne inverséeSystème fermér1bqkbnr/pppp1ppp/2n5/4p3/2P5/2N5/PP1PPPPP/R1BQKBNR w KQkq - 2 36 - 5C471a6253ae12236enA26frSicilienne inverséeSystème fermé symétriquer1bqk1nr/ppp2pbp/2np2p1/4p3/2P5/2NP2P1/PP2PPBP/R1BQK1NR w KQkq - 0 6././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.8054776 pychess-1.0.5/flags/0000755000175100001770000000000014614030425013673 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/C.png0000644000175100001770000000203414614030313014556 0ustar00runnerdockerPNG  IHDRIDATxt$iFklfgֶ};m[qƶm۶Nֻ>uͫԞT ߏ~_JZcHfg'_Rkr׮]BBzWޯᑑQQ!!>> ]S N?ω}] O&T =,lqAٿY7=><<"R)n _ 2C@aԅi+n6Y&3X\D-0a]"v:l>wmDG%q$m;<=xxO@ ;~_Fpxxx/򼑳m\R@IR/._DN+s! #ң2P'vΰtEy530^8D/n$^ [P9 R4eKq>M8npRm`Zc4 F*v4W[a/'iWe߁J LfgukN8GaRF)^nt SDq!]:#1VPLpZ2Bmyut`B8Wyp:Ɠ ܜ^MWa 溃tc6:_;9cPzTtؾs~ % _ZZRϧ{5|ʧGăn7&lNojj jedw#֖;$ 'BE[(Ǜlo|%$}uxÆ u:uJpcOT>}' Zݺ8tugwq$.\ _*^{~oVʮXb7nm;Æ͟?Qa+H.ǭO^B w$:RK-$R6D2  |#_Jmqi'A0U(P!>% X{ Ұ'J{]|IHpo| ~߂o&k3Z7:찅הo޾q†GMroiM#yyiBa$`I\2'IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ae.png0000644000175100001770000000127514614030313014767 0ustar00runnerdockerPNG  IHDRIDATxo۶QmDuTaݳڶm+NmۜOy&{2u?JqW^y&OVHU$+NaeR% ''W\5;R PII))@}`[Yzo~&&&%%'oPy**hkXE9\cnb?@Ewܸ5@7@khh{zjz<LNNMp [W?ڏjt`yy~UzێRNo!^l J룏.?~>q x(H]]j{HB ř;H>F=zʔIU 8J֒Qɼx J@Ч[@׮]t4~45p,%`|#IOqgw L[cAL4 Gl j$ ,%25v #FxJҟ|T#J]Hw1JzE$ p9.58X utBrO_S[tܮcC[_w?d}zsoQz׫|.+뺿Ar uT gIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ag.png0000644000175100001770000000234014614030313014763 0ustar00runnerdockerPNG  IHDRIDATxpm:m۶mc6m۶ͻصu߹̆SW<2ib?$&mh c Ÿ5?Oy;gO!! K& T@Cf/U?-0~7p<`$8K*dcs%jn,ߺrun0vĘ{\QHSq (S{TCL& y <.]$8sVҮyoex 84H!&hNRR͘=pBIXMڹv,@̵IZ>U*)s$8x6uϿ`-pK S'}1q9F >{VxӹՁ %/ E'/-:Rta e!_ { U/" 21.|aQwO.p*,[*Bg[TUрy7ҴQB ^i@#/.븞isrsD`Oǵ.Azk5|uQ/^L Ku@DCq K{3 /,S]ޛ}"zc-~k S@`ccC7Tq;Az~` p¬dRsM~N ~./0^A:xGV`u>dwOBXǦ ;fλxK,@xUE] [ۼLX7(3!!ҹNt7;',$!|,yvi DiQ؉P᧝[!7cn|Ïdm>,s?4]ZmcҥO\b._d)Q<9|@DeʤM0mD!0ӈ5)Dv~ .[:QH hAMAO EO'v&"Ŋ}.RɟR%[b.nmrVF Mj"(F z(E4Ɉ("h=ǐ8L Ϗ%J%@+W/9o˗ޣ':oA>[Mɩə+ʼzQI}:齱6;ZuѸśt:yNw;̀)IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ai.png0000644000175100001770000000223414614030313014767 0ustar00runnerdockerPNG  IHDRcIDATx[Ifqk۶m۶Զm3ImX{m;~tgֵ~ۀ'l&͛sfS'q+UM^TZǗ C\vnܸɰ2/|?8ln~y;Gn{,(^>.K 7?h^`2os0dz 0)扬*AMOaΪx:sg ((8bxɧp\alsVQ{^>Gي+̎ޫu~ɁB5nˢe5k2ڑ: 6R88hS*BM~̺!Uy-k_l -+`֮v: F|fMk2MYXUX\vO(l*D10P`sեk1%} ((AO sd+DzJ7'YacȒ3m~?N3 XbeS, E>@~6M %:ƲD xb rv>e@}k-8_Tš=Wεഌw֥Tո'ugu<:o+0b>I!߾Zst643U}uYkOv9W-}/5uH&W[[W~!zz70t]9lģ 7)?o8iJ9ay,xn9i3ozUwUVh7CxhzO&+@g54йd0zI._ Cŭ(yͿ:{yvN.piVCж 6_q}7.@S$CCK/$S`[|As^s:̺&ksTv7{.3Α$Wkhhn-2iTh8@ ^TX[zEɰxH6L*v[pwGEH˂ύ5nJK(1|.eqnCkEUpF9V­{ Uhg{{CzzUP›0BLO*/%8N=ڸ["~Ѻ @vft/iqáCvǬuFeZ!?ZORnfB|P(ض;|Ȑ`p⥗xᅈP~V\+Xq <;v"?+opZNT!B~t=8Ww)`ƌ~Rta ƍ[g!C[8]c8A:z4n)!>+U3!|]o _u(ҥ\?[v;XO8 p ? pAB{ 'v۹} :m7q1庴uUkC?lXu~ueބOִ-KX aQ{!⎸IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/am.png0000644000175100001770000000125214614030313014772 0ustar00runnerdockerPNG  IHDRqIDATx]X۶p nP7mF6m=m{rO;L_p#?L14&"tSp7EI$ 99E)ʤ$GiOAՎ \ u_]~rsX ? ظcH_-:Z|U?q ZG+8, ćVLXdg~TpXz[7v5 t_+:B􍟐$t<pnikZG/PPХKgV-#ua"IJNʦoniZs5hvnݺJ#Y'ӧL xXɗ$;P"? a׬LMIcNړL3s ':$ SR4h KݺUVp$`H׏G%С5EKEEu47$wں*6ifO/o]XI*y%`=߿\L$]2oϗM@UA~B k֭.Ju<=Ծԟ}=9oзQl@/2y]s 7ϧ1 0 Q~([IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/an.png0000644000175100001770000000204114614030313014770 0ustar00runnerdockerPNG  IHDRIDATxx+YṶm;Z۶m۶bmų׶Ym{v='sgnӬy#mS{qٚu:tvF55 PVV" 33KEUiYYh7ACVzsauIJn|d#ۊ_1Q@yEyEPwݭu^7))97P^_aUaq7RG{$!&~iΗ b8X̏)Dl-US":!WDkx+| jy9%n?~kZD} ":ZZqHL4V/1<-Ќ@ηt~oal߀~ 0dшo>hd ֺyo#7?zG̳T ͎3w73޷\8b߮GEGyvf rHx<-ubd"Tߙ]xx+'L3C Q֮*zu"ؕJ߯j0 sh83W;s& ]/$oAn}+^(`sdNOT&LhlHO xV~=G^Rad]Pf8q)O@(`uv^!9pba?1"8I];{+E+465uknq2;tQ̎S[$ogn7QyM#yyiBa$` !XcmIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ao.png0000644000175100001770000000144714614030313015002 0ustar00runnerdockerPNG  IHDRIDATxC.Gͱc{۶팵u6m|vzR91c6fuΌn޼y KY9 1Z[ TjEU QyACC~8u酜4D%.B 61@L/MOztY(?KgE^-V(~`Co]G^C~3>{kk5ʀkVjK,fyO>y_oVt7wֽ3!7//2a>۾I}t/K~Ewak~~y3lXe2`IYTU Ye=-E󼗀Ȳ̾֬xeݺ R㏪|]鷤!)6mOq_zi2YV=O]o_L?`8%^pA00PG[w_'KrrA#ddw\ 7:}5 5 'UdYM$eU4!9%$e69\z\Dp0n]ިG讻F~?S۷c8u'%+skkָ S>]u&AF"AIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/aq.png0000644000175100001770000000140214614030313014773 0ustar00runnerdockerPNG  IHDRw=IDATxb\`011E)di m۶m۶m۶m۶}LNWLGxDԨQ pEUP޽{ZZ3 <}5Y"D%h:l;t_ףfsFR+I}+II @R}`-٪ǁ3 U4 % i)j1(X "숤%dɘ$O (AgbM&ʀB"=d<G/>`MRՀeIVNh/>{^m' ".;Ն#e~F+K2.m.3|QϸvvnrM=F}5f>}|E4v~иqXC ͧ9-+u/n9eovYw#ۏp[χs9uJ׻[xP8[ $Me-}P$ XL>L 8i`{&wsm%^' 1w@"R|k_9${'6oi#1cJT` ۰; CA)L^ |r^Tky'_4|EK\A›7@~_X,6;NorqC6GMQ vPӆ=#^3u؏0 x}= {iE@] BZuw= tzX=˗ / ^{zT^ۿUewE?咷Іzr!a-/R/ˑ~U|'On("L 8oxla+ 1lx0ExM]d*.5L^VjfCJap0Mx<f(+E ϗ//I` F#OX1QKPItt/^Mۜ4k֥KA&~ 8Ā X*W0}P*}\(]T%ڷO勊e1a",eb=w|jf}lo'ŊլEG0-^33stJ R.@&I ߯g:.I ̾;3S1 Ƞ 8PkߣlT[[ho?ʯ)3͑CnV_r}ku(H4sNW= +#ƸIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/as.png0000644000175100001770000000227714614030313015010 0ustar00runnerdockerPNG  IHDRIDATxxi|l۪m۶mwj۶m۶n7ytg{jw<NreMlNa$^HTĽ{Ʉ<ǣ `@HH$G|y|||}3nugnU #Qm׍ȪU{?:k_ z_GoCvr yfk;c#F^ ^^,,G ,Gة:IZ+ՉY=}6*fK:w(]2~EXpF%+`_dל3&QK-uufaa89iwOŝKg0qpoo_߀tl؞. W]tι k[ޟ3p%l $OZ)mq}ܨy3ܰNAěծ-{䏐q|5R[Z[U +CLo_a 7AhX]nlZUms Ip-PI^;7,G]KJ VBB迪VQPm(IT:+t@} t-| i_ S6pBclKns<ofKgjGcT9 G T*U$aO>u`#Բ/qϔ_~iwcyo9r= %3h帤+55^o<lk˰IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/at.png0000644000175100001770000000144714614030313015007 0ustar00runnerdockerPNG  IHDRIDATxQm۶G1<oP j۶Ǭ j<g+6{vf;u|_$%J%(:P0VvXyJrr:#tr@\\<˕XC՞O݆V^QuEUYsEUxy;hxlx?1C}!u@X`r=w"up yMou`@ki;-uޔa `,,3`B+ WgA~mc۾Cem.]NbEElA u@ȸqsY=/!_Ce* w ~t40kKX+Ԗe\]vMuw*YۺO?ҥ3WTb8 .~\Y=}ԇ.`0Qq^ {ݺu5Gh޾%מ/5?aL_fRi5m:93('Qd%$Z'K{q$@z@ 5W{ ۝Mp {oCFD?dТ!~ƌB\D+#>ү 4IG%0D8D!R J"ŻTk o/k'sZ߷eu' -XP#Mn-ڡhNv˫Ѳ|4;;?ˋQ4Ba&AFkŏVIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/au.png0000644000175100001770000000241214614030313015001 0ustar00runnerdockerPNG  IHDRIDATx|cfnض/jm6Y'kL׶wlOmg1rsys;qmb8 .HJ2ùMpjXlH:e***VTC_AsÒ;v ?_zxj~zᇎ_毁oJ>=};,YQ3|> \ -_;͙&3?󇗩^f1~BQSs}^^^~O '{䡥P;m&L8z}}0V_<3ZӋTl5<%Dz0$%m -vbɞfxo¯kw³}ȞAQ )ʀ;^=sai!0>ΘryrvhKJG۵A aylY=1iyy>x緑0{NZb4wc] WlLtp{͵^#}aP|dܭ06t{)>mqDNq`y}~M; v%ݾ_4]}_mU* vs2:m\m}낤Nmd?T4)X'w۟'S{>Gb]g/6Gw:e1fTV-lg h9<Џ_k9< V[P@p8e2v၁J۶B `h _<\UZ Jhs};&**Ra2yrrrp8 X3 uZϻ* O@pGݣₔ]\DŽ~`oAz7H9lؽ{\V X&`8Ws= c 4m*q;Lh]q5 WL-٢[pvc}NB xq۔ݺ9|pkX*+=ѡk2=TWc ?+$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/aw.png0000644000175100001770000000157114614030313015010 0ustar00runnerdockerPNG  IHDR@IDATxp,YY۶m۶mvagmۈыG13kL;NW׽{KkrN>CiH Wb~q9 H%!x(v=@8b˖J΋~{sdYYvJ|aEyUb>kkk8Q"rd2){%p x:qKd}<W|ݞ^3t_:m|vؼ$.&ˎu~>f7uSOLꛅmdL-xtgwgek(b ^ɘ'={nHUjv"W<ҟѩ>PT$O~T8f/x3~76/_fty_GHgwteү7H.<^O\R묳Xh!O1R]x:RW__[iZZb_ouRKmF@ucP[k7i5eZ%VQ 9)eoyK.+^Wk1AF{;xIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ax.png0000644000175100001770000000152614614030313015011 0ustar00runnerdockerPNG  IHDRIDATxJ{m۶mV|}m۶`mDZm7}wiҟ:FisӜI )YIJ3Iy@aa>RRR@ZZ@Xͩ'A<' gn(~*[~@C4 h븮>߯wcEEvGvzw?}0o(߼t">Ku(*XfEm6m>;[vgӗw뮗{`E".}RkWϦ]e1Em X>;EA7W(Ӷ͌˯<&_a;]+UZ89 N<&P\IIzeRym_P;v G@gr>[*hWYS#4''unwunUwCwqXJ ^T W%/Ӕ䒘;]a``ZlڤLo 'Ge]u~Hp >%MEDۉ$:@ &~Osυ%x{䑯[p]55YNLnBH>C5ĝȓO'ࡇ^}R[I}CA$r٫JGJi+F?#N"9IJ uS%qcoFKo $&^ҵ^u[z[nCCs.{3s|#F}%DbZAFC-IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/az.png0000644000175100001770000000210514614030313015005 0ustar00runnerdockerPNG  IHDR IDATxiڶͨm۶m nm6ms̙oNߋy.4?iRI:b2|yDp&{wKpLDK~@Ǽ~x<>,nlW|W]r1{*K[NfpOrg6eӜ^z;vޯ pr`lT^Buk(.~ǟϪ8Roݴ"i,}OȾ4OWD'5mcEqir,Cߒ>LyѓQ~=-m#@yo49C)I.hl0gDMWeK ͬIcOw $,彝8裬Wb^o\oivcxάb)hlW*i*bDmY?:dϞW 1?#˗˗y5!k98;9_ Hë.ުk\?<sΞ|{ `a$I+q∍̙H q0Vz?x4E0e)u0 )R%i*#I7`>X-1u1 ! Jx$&,hl43˗`18`fvn>+`7 R `3^]c pN1q8jk R.!#IYeUL0.6##`$G1?c`|~4 hD ҽj(կG4͗XzbiZsaF;qⷃ7l7n0 0 7=IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ba.png0000644000175100001770000000231414614030313014757 0ustar00runnerdockerPNG  IHDRIDATx>ۮm۶m۶Lכڛm;Nޜ4<HI{wUm%lBU/_UͨYYiz'NjԩzSqE&E;,>@ۧv reY+VJ uC6׊哉v J/_m΍8t_?TbB&}V ]\a!kXb>qdoOҳX?~FR{9wJp򱶘yl7unm >?7yլa5B9{6.;l 9VE%s_~Y+Ԝ: uMQ'm`ZuSkai?hWHe†ǻ,c`밣3 m94,ﱥK;`um]|WG2B4K5`2kh6Ph|j[g)i)XOj4h.X X%`%^EBܾ?xWm2eR|;-RP-ۃ$` v3^*`?x'(P/ó! R=޴YSX. U='xU8QrU#`Hq" `aZ m| >|/T_Wh'?bߔ_m?Q~?o?]~m}ei>n弌+5(&SPIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bb.png0000644000175100001770000000217714614030313014767 0ustar00runnerdockerPNG  IHDRFIDATx#[*mk{Ƕm۶m۶mLi%udy={?8k_hAub ]lP"YR J8JhĚ5_"eʰ0 taQ˻UW&ÀlDxy ~~ެwz]rVH?P?.%,Oovr%O$)aˮTR .h~2 q ݩ7Ksx%UoA2W-n=(3rsk`ͳwE^k/7A h7@:bmC'r.Z8:$ųGpB!m!ͭtIvƯ@kAv5%(KWI,B>J!H@))7\>F6 \%9 `%pS@t<@Μ9L[V`AL*znս=©̘o CdMH5*= tr=3Cys%8&A'yg4:oqhw%K}TAץ(*$AċG,Z")) `д&ooRybJP](jJ'&??} ;9r*K3ݿot> pSCԅg4~< p y4thhLE"#q|ŋ-ZFSܑRRSRRRcy׭ϧN b_˭1.N /@%%@WO!]"##L%KjD躻˜z G ] wq݂.>Dp{U~^ UU+DϞ|ADG#>K* 鸹Pα6ziD%%z޷普U:qVSCtW0n/F|s(wIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bd.png0000644000175100001770000000115214614030313014761 0ustar00runnerdockerPNG  IHDRw=1IDATxb\`%X;( _Զl3n6Fڱl}{f_fbʨ|9pLp:Pкwv}Hٳg'I HqZGa . g.7; eQ`[4Qcش> Cqpt3g"Y*d0qd&m+DN'X3vTO')8"r{ N$I*Euu5P^^ %x[֭=}TaeqMUbkڴ~zlذAcƍl޼[nM6\SNmPGx~_DsXPwEG&:=Dչv+~ m5tqlE?/K4;IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/be.png0000644000175100001770000000111014614030313014754 0ustar00runnerdockerPNG  IHDRw=IDATxb\`011EO8%yH2z;a3a۲TQ*!J Իx{>`-sMv^`9[^Rd2:БȹF+`>p* I4A'HxG{;ʑ0Pٜp~$\[X>|{sz9+[+@_?@f\ '["z,'_p|xdQ- zK˺|oq$@Dhh4TzZMUAL٨nv\dbt:L&RTJ[+sj?ϣP(v<\]2޻1Q*ǑL&H$J5͢\.Zj!;h4BCEABݦ*vXyjX,t*+^T*jl6`Ph%_)"iH$ d%;JS C&lmN8~(5;ԛcBulWj} 1#NF[IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bf.png0000644000175100001770000000137614614030313014773 0ustar00runnerdockerPNG  IHDRIDATxCKm^]Zƶm:ymOTu3u< iU72{衇- 2Mu px=ޣ'KO=e"JCD}W;<$g2M^>TzHq V!%SDu= kF  [L35L'`ykFu||M௿|~'~~Iϥ>+,'`@d&~|l%k K}?PQQ@yp{U Rf2 O@4}N $oQB0χ~~0E@3=ҾUTʺwP%?SoHv/R~5 ^ Z\Wkwn+)+IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bg.png0000644000175100001770000000122614614030313014766 0ustar00runnerdockerPNG  IHDR]IDATxL~ٶm+hsómۈuvlmfM_3dL-^y??-\hi@="|SH?Gy$'H@jj$S ))ٟjk]x|>jz+(pY:U B֬ @Σ(,tYPvk@Σ\'jyհ]yB,PTNdm[;0_|ti ?)z6wve-yEE}52"Q!!RTƮƏK/4qhqZF, ϤϙJG(0׮ämJS,Z4L3K!(9&}Zz% L(G5bܹ~3 Fqp}χ^i Ozc C55|$=xM =2 U$6hFKB+J^%рXK: }n$`3#￁\N|Sgmq@%K^bsg;{䤳\_?`w8'k>[ЋMn9y\=# yhIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bh.png0000644000175100001770000000121214614030313014762 0ustar00runnerdockerPNG  IHDRQIDATxQmg[E^:慵fԎqAmk,k[s7KfWsW_[4 lK@;"y"Uқ7mٳ'Ba DVY? DV7lh:s;w<hGϞiu"58ZnՐx\s );@۷9:{!4x_ -43EFhS'#g",E"?[K@9=R.<++Sի8.\`%93dzүb^_~F"ER߾cɓs4l UuޮOt6vp|bJee%%eKYY?'`XAjV~SHaN{A Aup׭v `t#|LB' B_@B#`>vE,!㩏_H3@Pؚ|߷Ot,]-4uj;x#fHqu_<\oo=hryM/c$`IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bi.png0000644000175100001770000000225214614030313014770 0ustar00runnerdockerPNG  IHDRqIDATx{@m۶m۶3ضmYhg3uTb ;h}YRѻeېLj 5x0uwܼVM|{گ_zOOooQeq1rE߶`ACLҼyJ ;~šCC}_~ѻupoNpFeBC_r0F_\:틋0j́l±׬Fm9s@_lBD H eSiכ-fSEK̬V}7n䃣@o a#YU/Z-:" LXw3ciurVU跌st]LMzYv/{?x ,Vc]2$bŊj2e*'Ҝ>Uɓ=.{L$ U5֗-ifmi׮Oj L~'7pPZ1@Z1~J+WTB5Ŋ={,`|!k_ vQzyU_ R^S\ÆEDdd. $ༀ "헯Fys%ZU /޿nABU8u wNS`0rQo[0-Ԩ'4q?5e4wn -׾|D |?6W(f`4y WknQf*%OIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bj.png0000644000175100001770000000135614614030313014775 0ustar00runnerdockerPNG  IHDRIDATx]l6ۨ6bnڶN6n]۶=sSw޼L/?{}G}Ji> @ aO9 (--& ##S%Y)P33~4jjr< !!))9XUx2z 5M73[jLϨဲ2|hZpN5xTѿ&Kj1f\R!,52pgHoW#;Pcc.DE@8dui߫j5dx;"",zzC/H5%sQ˻Mdze!JPjRRPmlt96ZOLj6$otwP~龹<(p<Ժ|}ڜ _4"Y$hIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bl.png0000644000175100001770000000111014614030313014763 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`)&(ZFćwVWvLAc !!IʙIz>NX0!I`"Փ{ L#qLX<:0@v`5 Ç/G)T1Cdg$;{vٹ[+/z?jM6F:h6v\_ZDN(8IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bn.png0000644000175100001770000000234214614030313014775 0ustar00runnerdockerPNG  IHDRIDATx|[k3Fmm۶m۶m[m:gޢ1m7On=y+1iڔ#&Sb$!(~ɳgsh &&jaeϪ~p$>P(Tpv?ל ;vY^(FN]X;A@^ ʅj3ڂ )J%h49Vk~yßWeg?2m57gY9tKLj6>ti.VsSu8hI. NeHgǎ߷ՅUS5L{p0^yUM7=l<>v#厎z , G r5mx:VV(5MJ9KEYCPFL:bh( FgH"^mYZj5v}n-C}U=/p앭z[^oLϥg]?)N:(~:R^oV^~+{53q1 xJ6 Чb^v@ 1{[\yX\gqفs-Ɯ aFY?B&y)wj;x2:Pleg5d)%z{W @^`zM @ʔ@l22mʰ] ,4p$:="! zQejkSj nQ3%d0i;h(̖'+o9gT n WO1-m;Jɲt>p''G&C/ E*?_ggk٧OD-˒{oo/&sL͚>`2ZO"  P?J d2 ''6``<h*$?A/ҥH\]&M U\#JkXKCLGD@M~n'AdD'o6||B?| XR4.sPK?B{%N3eiΜXXk=.=bJGzMN:{K}\I?Ŀ"PnD"XIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bo.png0000644000175100001770000000215714614030313015002 0ustar00runnerdockerPNG  IHDR6IDATxی[ڶmĶ5ڶwc9'ݵ[SxO=ݑu&c~+I՗<d{w3MM _TyXv|KJ-;4j{ꐅ6}mh:qPalx^44j}^Scڪblۻt/^~5>F jKuݣ J]bt:c ɨ0P;G=ZE%D[}hvxXƒYE{_-=V`RO<0p>1?++80ecǷ#pV>K\x*"!0#=pI26xm@~b?AQ+=tD;#P:'o;P/M'KQ k~~Ds=l`m%V宩*VxxY?? <ܟZ25%W TA%@*~[HCo\\W~[ ZVǹW!ٴ>ҏ/]QrKב #2Ij$MMkK*:삉8󾢖,Syu pSSPg.8WK-u~DQ9WDD7 $**XNV`ٲ2KD-ץZ$I9_\Ж{)䒛nDq;^eTLcjSs0f `2 'Vndffd]{ǎmc q ȀLn{tǀL;HvARIJ۽kY[_^U +1Q$i_0u!I c-:B a/`jb Wjݿ=ރj| =b)J{R'j}}/)O֖o}W}?{ Lw"IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bq.png0000644000175100001770000000111614614030313014776 0ustar00runnerdockerPNG  IHDRw=IDATxZq䐌Ō9]f 88#LUP!hcRC){{/`}v[f߳[q6vbL(fj= W"H)H:"up?ysb_ j<a\@ `F`&@` Mp)LNaF`'_ #<8|أ .9ȏ~_E A 8peQ B@nZ-h5*W!u6פ6J%(0 DGG*EHRd NXsPZFCcj6p8`~.z=c"FɡtR!^F^W%áD"F:XF$I6qp8 PZ 9C!C5^/q#]!ڰ~H2]CYL4 tLs,E E..IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/br.png0000644000175100001770000000175714614030313015012 0ustar00runnerdockerPNG  IHDRIDATx49k߶\۶mm۶m۶1:7Zwܗ2p.$^~ LZBox Qyt_S 11BBB%@XXDZRCC`yys~~X|vZ^5ŷ>{zlמs9Ϟ=wye$+]FmܹrT_>5了/ÃmNK?óm eE9\HJxXqD57(o xZ[no]GϞt>vՁZfK9`oLq>9s, ę3*'>SN HͯC=X6x\r&*1[<6f7}nsù9:O8syyiݫ\/ޤIcI B  `~^ByE|T1tH*W~\cҜ0hC `a_Q0@K tSoxM%MDF}?%uQ%RIE6Spyg#"77NI8AG QY.WG|r.b\Bцݎ(;@'B/|{7"ŇZ}rsm_T1MYYrzIl͚יmoFŻ\9hJ2i0H(+J9@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bs.png0000644000175100001770000000172214614030313015003 0ustar00runnerdockerPNG  IHDRIDATxt,Izm۶mqֶm۶1[;ggݯoISxF_r}iy^pG֦/fj_>Qttt [HEvvFj|͛y@ccs1ٸzTuN М+]iv`́-mhhlljO?E  .8PjgW}JK/yQg+}9\TxbΥgBw?G˛ƩI;S;+O7= ~w_F;8*O& j >ce^TkpчdoUZm[`m'75FsD2JHGWOo|wm7}@(|JDyF_p`!oodJ}W.ԻKxxQ ԏ 0Kk_+]@_lzٽF&O^|ĠA*'k;EW?0V{&wn7^o2kmz7\ٺt)S޺sK.5jE|!f% TO9|ƩTVZiE1vNboxk oS=fn%n +^K%3k$z.% .#{{ׯ#9>"wk YI&,Ns~E@5TPA@%M5d0گ 袿__p@P@[HٷRro" {:c :wnI4#t)=ĉ?SA/ ]\ ow_zznyޔwwhquq5X&Hu/)6E{c_Ϛ<~@HX$,8mO9@f~ƃ3|H: ~S׳p.'ٶx|ÉjG65+$t< Yx#սCu-nx8'k޼O^=X4nP@N v;g$>e;r ZվOxЁSm&~ulcwc}/z6{~adT@=t~/և/8T'tϋh=Lz|@V @eź-}7?893mb*Z' q5 `lحJf5`\ce$퍵 0kW?i-6.z]@ӛt'Lî-j \ɳvdt-Ğv5T)gcI Јts>[>2e +T˖wŮ~ VG<4^8bO&Oˋ~>@-em={K+_ϋ <[9g<p m:E^ڰشsK+''v_t|3hVƓxբG4=Pn*{6cOd5bSgGb,xyte_t$VViˎ˫B\l p+4Iϕ'O^RE._>58=޾kdkb+T_%0&P(h\= J$ɉ D_;Pbƍ#| uԮmfֻweR`G#"Z&Ǵ (W/| VjU8'> j=UW4A:tP"J_y[zQe!"lsH; r{%N!@_ȑz} uUV|&N ?Sŋ)#Z+vyUUwa|N$D BSjg9% ((XBBB%Ral+ pPNN+{ysro,>f߃|o=wזj@B*i;'ṋZq^[uB<{fXWeõ .]zvRfD ;jY`XĪ7oz}ֱo@`΀Efv^[u*Qua "X V~c">9O?9xJ_~E, ۷epJ+/IV^⧓$98 Rv-{KzQ #,#`9Y/%:^k XO3`h,OI_^:u,UA~V0E, }_?^!2E6-R[Um NSȔ%9\ <b s$SJNi'/_ D"??/oߎDQ=XŋB~T^p,GiQc q.0>V! |~A~r;eͥrLHbΝН@UJ[j)U։X@I3%Y!)SS}FLBjRܹTp)'gܸ Fj֐I}o"` hO*Я_GIo޽[.]Fl-jv%,'`)d3^ԩӀ-$:LJ}u(2lW ;A2E2$LfQbΦs.ޞ9dr2 2 :zPGh„X?T֯I-$fMn'M4JUE&˜:AFli mIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/bz.png0000644000175100001770000000221714614030313015012 0ustar00runnerdockerPNG  IHDRVIDATxx$Yضm۶m۶m#k;*NF۷Rي{$'3s `@ F 7P\.dfc_ 9{!8L昘_ez:@pphhXur9>[y<'ȷn>wٵ|gQ'#?q ?@>gGPPppHrǒeF'l=!Ȟ]6y-61ug3/py"~70Эk5@jKzDqW9G %W'|. m{(Yuf*mk灯O'FVG|+p݁Wvx; |}@_ϙOO( mr:+HR`)@eDEMԸVsW bv]&gsϹl[|jڴkCœKw\n8Cj Ԍ9G I2@jjHHXXd$2mƂMda pQ /}>ҽ n<{ L_k 2r 1\XgKDb$iez}1gL\dVٯG)TmڼK|d׭+Q#?V3n5*ܕ* ZyEӄ0H(.bT _P&IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ca.png0000644000175100001770000000175114614030313014764 0ustar00runnerdockerPNG  IHDRIDATx$IEkkc6ֶm۶m6coLQw_Ψ8/6X:?#b׍ Nj@Vc4[(`i0} A,4i~0Hd2\>gO^_ow0'9gH1sN?Tm[o;?d2,'¯ P,zPAA A4o7=M<>/j+~}-\I;Eqg ؛>Z P,R[_;xVknxg׀0!ݻ=5rcW][loVO7"+(-*vmnw?SWkv:իSv7y>⶝3@_)'O&8^ëC9ɵmؾ7~X@e±oGL`@lvMgljEO"u]u3]J.)ԗjf+7"@SS˖ш`aG4atO N@Oo`Mo\eŃkC)~Ot,z /޺u+a; @O>࣏j&u@P4}1+XC".xs5 G/+;[~*AWe -WN_m|qaH0 NvR|2">*}?Y0 & e_&V sxzXmzQ CـS};д]@)V9+ f2e~'NS8ͪ<4xl8P,pnTTL̙33wg}aH$ D% j .ڐgLeaI&n),S"s-f'\Z5V`X,/?{tuy(c%96%`T r]WE17UZz*~˭PbSMgH83[sw== h'Wc?P vBaΆ€#;G:w ˡa^whn CC{?v\sǗ8J@XsM^ &<\RR8r@GIHBUeά߿&S_4?\X /`žC~+` (V,Gɾ!88(( \9gW_ z[!`¹Hh"EOepDAD|믟f|EFI-,BU >\&EQ$=; *'~~'*4ftM{thKlLY3GkkMO#۝:_'z)4J8Ӧu.`q\)G#B<=IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cd.png0000644000175100001770000000206014614030313014761 0ustar00runnerdockerPNG  IHDRIDATxX۶{m۶m=]۶m۶9T MOvSNш5PH@~Kd˖j}֭!…Kʊ|^WO̜9{9<&c[L nӯM26;ָ3f̜9k[+_odࣩ>k\@JE4A|L{EҰdޅbPsD'%"F+2PO+Ψvh଒ݑVB|LSKW' GzsgJ˨}x ^Z1:A6~e)O%S.vͻ*%DZ3va4T($sAg=t N7!mnNZ~M@{Wظ_$H+l0k֜9oH t_4K}8P yƩĉ'ݼhX6G]7_@_O|5*%# tՎ GqgLuKb|І ݺuUԩ9a-G\X,?Qs^^ǃhnqk]_Yp]7jȱ=+4@TVLQ,A WN Lf-Zhp(7?Bq᧞ڛ I4m?I`: PR(Ynwq'SѣΝ .x^w!GB҃xUA\ګٵk` &`&tڽs9DXL~AZDʛ p pN;Iۈk p䢋LϞ0kׯ=j4#tUU/2ݶNLwSx^9o 00f6Lxc:`4Ic, ^+xaz{Oo˴Y]Ihtbd䫁Óʸ/Vbwtzz~cAy!9GWoy*T @si rLq?V/y鮢W^y壏gcЋYy ̀<=J;n{ke&0/f 9À Xɜ}w Zr_Z[72  b@:2X]\mA}86bY qLD2_X0 9>u g]}h h[[w>BW;)j/L{uۻ~v5 i9 & -4zvaQ_Yw IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ch.png0000644000175100001770000000164714614030313014777 0ustar00runnerdockerPNG  IHDRnIDATx['m۶SxWxmS[m6H'⻾*MurzO>P@` ɵk(Hx\*%Ғ@ - `#pri7<_b?o|^wHݹsΟw8w,1Akȿvrˡ/+hrM߿PHII 0ݠvʟ}fWNQQ?\y>#!sn @g=v-ΨQ&rSۼ{B0@rr]+@={=rb0pgvy]sw]tv,h*% ~G>[x:lܴwQL30--jH>y㳲:? ug\!iwM洘,ϻb6(~D!asoHN֭N% !B%aaKS6xb}"W\bIyi|i9wqƪ %ըQ{.ida pPr-0xQ+XϏ` BE  ifM7=@oiK 1Xq _8KQ22dР)#33 "Xǃ&2" Ç(0`n$++gp' plj~Amװ 3gM#B|){^A %B{)γv:րcz/ݶNtw6}e fy[z>Q#usVPu[=64IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ci.png0000644000175100001770000000132114614030313014765 0ustar00runnerdockerPNG  IHDRIDATxOFmmTa j;mv:۶<}&m=};֬Y3y4 p^ypկ)?+:*3@ff:11/J[QYY  whKE͸ΨOv|‰S N^/JzmDm#K7.6 FCBBCo(3de20\iGF9i4s0Cɞ[n_y {j5YY@0 ;;44<<*)n,?:ԩ+ {R\\ %` Zo\x.?C@>Ho[2F2+?}QCKBH߾}!M>~wd.pcdvYϛsГ5~l0_YJ]$p# ɺ&%Y<|R>FuD 'o|~ek}A&L~!]O#!׻d}GBl"`3Un#`Y+]C9tjXXP--sl U\YKl3ڲjv$qn<[:k伿fyy򹖺Z1 0 Ȕ`syIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ck.png0000644000175100001770000000217014614030313014772 0ustar00runnerdockerPNG  IHDR?IDATxp$YF̫pm۶m3䰶m۶m V:տ{?tpg_R/jҩ@DQM"IH^OUHu|o y1Lz &^O$$|Z^o0;\Rv(N{CC, ޺p`񪙑/ٟh 5k !< wtV&$4 7\:`KݏBktdן5x+&=ΛZ$3Pp@99-x5X[7* ymM80cbO!?>ejV#(|Vn@8`{o33<p4sO9HÇv׍|WTV1 4xY 02sLgݖz7ܡ黭R^Zt#PK %#oNw› oH OjkgZT;f8~NL@OuL1gP8oqTQ^P9x(?{BU,X+VxZHȏxVg!EhPB%HU`>/7o6_st*lUׯ_K66L֬BF$0ȇk^Mx'̝0yXky5^JQ4+w nggBpv\%$%+$ (Ќiڴs߈($F L"7qt<.OXHp$q%yGR%KkgŽ V&DL!$Nc۳HAʔy?+R !#]"mV\i R"I+H!$y(E{};Qzo@8рzyƦK,L[0r+;8Pb[YZoF7wni˸t_E3X_ iHճԕIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cl.png0000644000175100001770000000172414614030313014777 0ustar00runnerdockerPNG  IHDRIDATxp$iYnµm۶mیζmmۃ8k[Sޟov:TߞMv_d̢kWp2 "4-B4o,n$dft邀U%&$~ql6ș=lu{0K 7cw5 &UnIg'Nlv;d.ߎ[{ R'hSfΪ?Joǡ/DҺzj܁֟MxMgت6grTa&д޴44+V5&&Yʬ?23x_Q rݒp,T}ue%jCځh\۝XXkuG3^;`Uu[a0},nկC~ovȏUQ㽧jW􏐑˕8Xk? / q۬=;!vu}H]֭"T.)_uuY.ҥfZ/>WX9,޸/,&4-AIL]^/a>?vw^}H1sUmZ=lṶZ.puuAAJ%@neUvV튧EkPRh>KZJ,.RiѢ[Pr Sqzk~3~:om=aQ{36IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cm.png0000644000175100001770000000146214614030313014777 0ustar00runnerdockerPNG  IHDRIDATxZEml,ضmmC۶Sw9I#=jHy{vLUµyiDFHK\1"-X,6 ZCŕ؏h{9Jk4' tdoΎ`'{|f?~lX|QQB(ʩSB>6˥i$Yϻf'QL#z@~v?z{4LdS#v rC9@\{A3f'$Q}!2@tj{ygR;Z4fUoO/bTU+#"[7 /g'cy/3"?\}Btaot@iBUoq[x|y%}WuizU7˄K ksc '~IqFZ?HҰa U &M03@a*e{ҥK*QU|RR`,$0fsn8O-X5=MwOklgAW"T5¸~DFB0D=vGHmLn65NM}uBG_L?<@l^ͦz~\oAǹ7kz'$`U"fIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cn.png0000644000175100001770000000141014614030313014771 0ustar00runnerdockerPNG  IHDRIDATx_۶Y۶Ԍ7통m۶mamۓ{z߹dֳu)ߓ[o]U#]Wk="yW.%%C|;D AWl<23mp\n72~("^:~/zxGic116\H 0Px*i:SkjOU=ivzM[9`0H_uÈT'QWE`ʍYl Ç| Zj_Z~eCyB .t}}r񧟫V0A˦oX䏐A=gl%n?K}8  po n~R9}N,Dy>=rv}N*| q *]J+F=^"O/Jf$zrSloJmtVt= `&5O'~c{'`! (IFl%cCŊ*+ױL$` Ⱥ}{~Y"Y\9kR2C!< w Emmm6HӦg$D(uh A; %EfЙ`xy\OjFj%6~TY?Tr{3Yys5ʻˋQ4Ba&AF=wIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/co.png0000644000175100001770000000152414614030313015000 0ustar00runnerdockerPNG  IHDRIDATxtc[[۶m Zzҳm۶m۶8IA9{NMjt nh2~w}_uɯ5)܆^ή]n8Pg]] `֕: i)il{9t_]֜hW ɰ)M3:f6S?!{gl+O)[syo޿~Os!t6L:vǎj |}ٖB6?^9|-?\i󏐕__}bJiٷC6>alvcoM+( >0hw[p@ٷr7޷\w-\m|5Kk'$K>>$矬4__OK:2I|\233$:dRv^!nZofޯ>"J6dƏܜKFFx f\KHӇɔ22ht$`}]ggֹ콷Ah#vOC'.+fܾ/G4i䓵[@ױtz%5*Jk4[ǔWUɣeeivv~ݣi:4//:M= .f&IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cr.png0000644000175100001770000000131614614030313015002 0ustar00runnerdockerPNG  IHDRIDATxOfm^t5vjmltgonssY^gK ӴW$D K*,N$x HHHdTQxzY뚢 Uυ4 '/y=rneg; 'w!+NgqMwW挟鉕]jSˈq8(}v?HC6u2v iya'`,CzcUndO#>B:=g귩f'rs۵k+}u`7"^JHhJn4Coҵk\czQ{_$|eORll4S I]}1_MZЕk?%!88(( WRee)%`9s X@<ƯpsZ5ݎ˓ x@=pTa1HLf >zzAoHILB4f1!XzwD?0gh$ IN .-o]»wDnj$TU_WJsssB0_Zyj!%im חP[k#( U'e"n2j~'Y7^|?%ㅲΓrs'&x{ n!RQ1=HTX49K@-TyWoAvٱ/$D]{dH !\\Bf ۟C SOz''CP֟йNmJj]{mْYuY[܍7%:h7%Z>AF^pIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cv.png0000644000175100001770000000177114614030313015013 0ustar00runnerdockerPNG  IHDRIDATxd9kͱ{m[c۶m۶m۶0~W'ϓD e iK(Qfܵv?]] =c2@xj_ Dmac Vv kX*D_鹼/w잻؞~O;Yb}[-q]} Fw.:绍#>\}@Z]>݀ay3׾Z6XkZxV0thk+cW7 n,ɦ/R0,PƮq_=#»>bgFXWF?spy$vՕ]xnOw~@(a Q)SaΑ#p49)~/@ /[6Y|]Ŋބa!0)VC }\K <[=J#44$$(LOGBmXL# ? "6wA+`y ?,B$&"spN 8Is͂|%0+y X{@c΢3՝@,~ǏQ0t)Z=z' eo x3֜|!@B`x9 ;"G2&.ۈ!_6iRlm۶"zѱc7tV"7o֬(!99$#IJなW= @Uj jժ՛7nXf ֮]˱ի>k7o֭[6mڀzX5:v mѢׯȑ#X~=.]+V`ٲeV-upIĘ!y*M6}u5!''@ffXX{Q|7o6ݜ>}8J,iL:ӦML>X3gٳ}~ƌɓ>L dkءDO&IҐ4ojf-(pl* Ũ((-rzWsi}IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cx.png0000644000175100001770000000226214614030313015011 0ustar00runnerdockerPNG  IHDRyIDATxp$[mNjm۶Y۶m۶hm{OT-u['J.Q#j(f\ fz?UzCh3'p yd7> ?{+ J=XolEN0[ʓg}| Yj]SL5R2Ԡ$C&:tgbU9פ&$$&&%i^'O>sOUo pe#lUyj3-Phq\"ݶ{i]co;YeťxzåT(x3tPw\mU49!@ى$=5HQ5W\DQK"HnڹỀc=F=[GZ/m넹<80ε L^ծɪ+nD3x,))%U S\'4s7q}XǼV{8 X9cR')/F9~Vr^r놣 -H+o .7ܜxty9(Vt( | gwTzg||##.3 C(`nxs\ 迳慨:@>n:FXB.>RοRg\|%mz@"Z-"Ӎ2VVa @̩ST8qBSLjԣDQggǥ'<<-Ô.]f Q`)`,Vs|4QdL%Ȟ]V̒%"JXIJFR;zI=HtA™||ȇw .Γ֟[ϕ EpfD~HD.nv΀beޞM3Ѷ#h5k&79>GQB}k:;h9<Y^yu~6ʸA/]y鹊f'׿](IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cy.png0000644000175100001770000000150714614030313015013 0ustar00runnerdockerPNG  IHDRIDATxXm۶--m۶m۶9xVIgRt NwZθq[=_yĘ Ә[LK4Go ӝuu444Z6BY_߫ pd^(+ix?E˭她s/--++/y$eLƻPX\q+]JdzY ch~XSvCoٹ3[33Ͻ݂=U ulxZx$>1%% +̗}]rm[;:7gUwSJX lyyeeMMLCT<|D'M7?x#xU]¯[E5޿⹮7~mmg`"L?}`Cgq2u`wk{,04Zki-$8p#1jhHָ:F.b.>ZlYgmk%6g_S.%0L`S1Ɵoe8nY&v⺭-p%ǃxDD`C;t{+mvZ3sf "p]'xWz"ZlkɬY #JܺoqEYD\CihKXęODR鞗I $|y a'YQѿ ~Κ} }vׇ8s\m5?ײ~[/X.:7ۨp.XhqɩF2ag?>0fIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/cz.png0000644000175100001770000000116014614030313015007 0ustar00runnerdockerPNG  IHDRw=7IDATxb\`011E%9(նmknڶFmFumۜ_l31iԗ|PWA=V@SByjz-AVFFbxs!)ʔG`-o oeK_=xG1 ۖrH`Ke%ۖ@cOBl r"vceZzMb`QTDDpŽ r:wTS ػwoU+.!pBaaa0T_ŻvP0~=wq$\\\/+B2Lh̘1}~=*RRRp}>}gΜHSN4_t W\App0z 6}&>0tuZǏܹs8r?G^-gϞŋ/w!'IZͨΝ;%%%!((|}}MD.!LPխ["==񧏏gzJWζlق[ضmEv؁]v۷K[s#XA;O(u'Z-d)ъhOtlޝ6h/5nB uTEEFIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/de.png0000644000175100001770000000111314614030313014761 0ustar00runnerdockerPNG  IHDRw=IDATxb\`%c4("D u"$Tt딭;t,8UqVU>9hPPEќ *(I.M}wi~)x{bRXRj l~CbX(B:?$#2Pϩb 18Fʓ]'\PT6x%K I*JM@f F3(پi#pļ"m-g/̀&roooݙdQ14qgH LRhT&J/e\{dzf(fr jdϋ"J!^/HZ&%|noot:ERAP@2D:F*Ң>7|>jz~+yJx{v' >z:ݮ>z ddۗ\V$IZJL6MÈD"h^8cJ(B0@# Y5P>/pKDUZ 8tR={ph IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/dj.png0000644000175100001770000000150514614030313014773 0ustar00runnerdockerPNG  IHDR IDATx@m۶ٶm۶m۶mޝu]j3E銤ϲU+Ȳ2$ Nv2f/xơ7>q^oxrRӔ@" ~w''CD`奕D??2_zj,'$ N?a>yzL<$bV i,-l GuD>ڏeL߿c/_.`,~,?iýaUrEQˉٸ39kc yǏ1,X]c.q֝N`߸&R?{{:BRBd4R)#3ZPV^/%/DWj2`0~^:t]60"tj\'^UՍQըbp8 H J<D"a~,B!7?3dOFd PfOI氵 dHYܷbpXE*4(T4RIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/dm.png0000644000175100001770000000220514614030313014774 0ustar00runnerdockerPNG  IHDRLIDATx$Is{cFڶmgֶmvc9x#u]Pzqfd5+L`r=eWKn ~o mܧ0K@jPVO8ovpjA<! @ֳ܏}ɆSu|"+R+&ү]}3ilkoLYak\Vu|d8ϻ>rTy%U(e吡6'xЦ-l;.i[m+Լ|"(Fݾ \r7`ڦֳ޶b;Wtֲg : U4p?M- eH<ۣյV]3s_.Xg`ٽׯxmG9GH~|3?X # q ]}Cb# sG?n} xn Tʛ(#omkA+ `0pʔa!/%D';:S$OxO K8^!pl=/l˸ъ=MC^=~u5P0{9:z0@ps 7:%ۄ's~"DQ;+Jูnݳga4r>!̖?"x"pb@ PzyyWH]j!71Ѭa^s!G3 'Uı~fQiݛ8R6qZ. /  l{эT6>nSaxֺ=~6{=4?08z`t)W@ʸc~uSu;og^z%^ҥ5u> @ ͛ae˗/-'Nd@myp:M Z ]G{OK~m6c/[Aqд1c4atlQ7GlUsx3Zۚ2=*?\bq nvꛕlOS`*YUz1uTߑWjW-O}iwҨxv8իv|~'k5]qxYjρ@ϻR;^嗟҂1_ -8UэCU =\$']7AoJ}`{iVvR&VOHmOB3͟W R|eI~Y $`||y>o>#E1& ]:C| ydɒ$)^w;C<Ћ&v0 LL3e \ 8Jaz|Y?dϮG~0 zb !ZКۆBo;:ߖbۄgC͚F-`9BzB Ɯe_Hf}=}ky,j|=ul FX IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ec.png0000644000175100001770000000224214614030313014764 0ustar00runnerdockerPNG  IHDRiIDATxt#{gmۨ/bmkvlmۈI6|NӜ3Zw__B|+_I (5 mIIO0~~ `X fJl@`_;`2 CsOOX<`M3 v[G{Eo[k4܅5ֺSsqY7F5 &A <ɗw nY/i 5(_DŽS)<~f *@漢al`0)d>:lsfjaThc9ċ}LWyxRe5HN'غbG.6Uk}fUu`uUݩαj!)u 9Xw)v^]|GAr}jRڗr~UruU= UQ h6_ ̜֍@^- t8לE ܾg^cӭ6`C~!] o!^\k[^B.鱧B D+_/0ѤIgS>㗁j76ziuu.Yss-Q(WK닪yBu_>Tc~. a"Tp,,Hـl_|x4tJ!SST yzGMt֍<#x7y!'o^F4 * iOn#dDQ+Cxwq)Jdʤf8#gv>}p%0$-Ț!Ѡ;#7sc<` @r J%Klҕpqy` LgV'`? RtT VW^ Z84ab_ϕ[!#wIr|6ZDHHD(&xG3Nb dwm2]^GJ˷PQ5%;wn .B8Wλ93~c} A6|#|$|-d˷IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ee.png0000644000175100001770000000110714614030313014765 0ustar00runnerdockerPNG  IHDRw=IDATxb\`X#;0?Զu6j^xٰ6blڽ\v&>&)l637s\۷oTQNL@U]Q$8Q?RfG%̊q{øeR`87#dAIB $$A5(((@VV֌'_'vZhp2""):kjE||_ܣyP`ʨ((&MłhFֺ֤ K\z}yy~{x}}=166p ML|ŋy&QXX}½{ܬI$::jw@@ϟcttB?Wz-,cXt7o0aԩS8}Ι3gr9\pA߻Ϟ=+8r'4i,7ՠOtPdb-NpW ۝VcGIIhf)Ƃyaa/*؞5}QIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/eg.png0000644000175100001770000000173514614030313014776 0ustar00runnerdockerPNG  IHDRIDATx$G'ضm۶݃پζ58[3:ﯮ>c_vgW9S϶u˶u؎8NdcM$ 0eT6m ԩkU8@4' 2ρ\lE}o5jp-}Կwk5nƕף%VqV@ÂPoX ؎$k rr,x;?[}?H8+W?@3Rc{of JaHY4on=j ~Ҭ#ŭzuM㊬%㺾VqV瓥]˳Mzu̻ARYx0 _|p~^Bm1x8HcDb$SgnQ.+*_],T SWTe!@^5]!]#U_Vۨ3@ёM#ŶO f'@:vՄxq´i@{>%^!UƃKy ?,ؿE%tb8ض>{xc9ZkS@PTD @AKcR˫NT8|竊SO=Ew[[nym&@ 1.7"~Sz~+!?8:T(™gqi{1ǬX1yhF !vM Ѝ7g9U8/+goI?+~#U} r݈m#cȦ4o8CC`lwi5[QcollCЄ0H(v`AIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/eh.png0000644000175100001770000000201714614030313014771 0ustar00runnerdockerPNG  IHDRIDATx$I\۶m۶mcm۶͵ڶ;W=Sq5> Yʷ;3)2#5dv!Fz,.^$ pIVq#n/FylnֿG].,8s&拟Φ4h2lw*4Μ qHe|ʬGs:w X0haޅakUѬބK;fX V[PiA j.[oAÍp}qp:t4cK%{UAV#}-_6K+-08>5 pGo>K@ef%pn\˱+\`!pFK% a)jr|Xr˧?<6lͲXxɸ7Z| V?Ov~ݣl;CuȾq:*uR! "F~3JEm;; ?pPl+gJ E=/+_~b(RȂO/{^;vԤ ]K}:eݧnX~K}g+Uȡғxc-a`K#4%`YiK;"vhCV= ݬ^{j#4~/q)%K-Wl%ͪo^>^9on|AӮܗ~}7_M*IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/er.png0000644000175100001770000000201514614030313015001 0ustar00runnerdockerPNG  IHDRIDATx$Gm۶m۶c۶m۶ gc>szcx{:ꨣ+.%a:PB(@*Ş=ń ?'i@rrkRo|8|7Bpv a.Gϗ/|:m鴺N:m>`(!~|~!T UD@^fu@. }ai&wwBk6rn0Q ހc[`Zq5=鶖ov>> ԑ?tvO;nܦm)^{o5J};̀1L7428D]vfuz Vnss(?ʀ̀#62=} Ϛb\?T=S݁{^ %`}OtN`|gwom>O?y ڠvJr'^M%_EzBD)WX{4kT+SqN(%'{Y82UknX1K'mHӌs+WׯTМ8@•V²KfCHob6$q*UD^ZhTOwFi8JF6z^A. hB1s6mZnrРJ?'$[XEZVuo&dҮ!-ͻvK>#  ! zn5א޽EҴ$ߦ߯"M9;<?N!``?ި} xjAP^<Ê)-!ee!"FcʫѲ|4;;?ˋQ4Ba&AFz$?IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/et.png0000644000175100001770000000210014614030313014776 0ustar00runnerdockerPNG  IHDRIDATxcY3f{=L6 kضmQkmcL09oү6k ӝp}J DQ9Pj ڵ}E;v\8qR ,(Ǐ& ` wf3A1ܛВ-0p\]S:Z,V+P81.0ܲ¡'3 }wdtt;̔au;%ReG ɼsfetz)s5ZFAOzF>ك^k 0O@1Ĺmw=^֛wo hN7;I# 'o \ ܾrP{qyԏGjOo5q@ C;M78_f \׽u%PZ#G5w|fMipف&E`-фԉ@e<ݾû a lLX%w5v֏?zpxg4pF|U˥,2Xx@J*偵 cN|$VP|hx5_! +\J8(Z_^^E6hD[[ `{&77to ŷQDU )-UE(g %2IKȲ=OyTP`XN1^A&fEG&{t1tٌsD /QZ} P&H >/P&PDfo}G:A^Dzecu.($-2O&;D mmDZUZ[hnjb4d2!88Xz3AA3Wn}m߿%%%(--eb>~uu5jkk144 &uͭ[pa#77ر/++É'P__I"$88hۛ7obppCww7zzzl{2 쵷~=̹KP?М*J3\!).1ߜuu*`4Bl[->umlyL'VK R7i,l]uud&`}%?2P<7@s˯\(PKcc@U?m"_`s u4븲<=p2Ź;_ t<pkF[+ݷmu^x>h5ͱGp:1=v#pnMҍ~4 _8(>z$ ԮcKԯ׶)k|]-GnwC.ȟL T۹5%`ny*-ɰ8XNaRt 4/8M>(~^^F7{N}= [}Zo򀕣SdLc@A]eFa`SzX~KTӕti5Zd%}WHN>s@VO/{۬- G8ֵ͖˳ `o#lr~x,@4_:Z\kgZ+Fp\R^u/3ɒ)byb "/WN.'rSu/wq9zǏon.M Q>;t#AΕ&M/T .])B05u*\V^"(J˔IҥK136e4ԩ(B54D@^Ul/_\2mf  zGp$\, <"[ǰz <:AJ3JU^%C'=&K+Ԙ[W+wxE~'(QKqD$HD''@{$}H5m_zAF Gl=7NL>sPQT~xV0.ٖlvjɐym)෩`]?|Q*bWhHua{[^Ae:nnwf 5>m W-CvFnèYgӗF3?$>gln޴٢NImGfF:WW_ӡdw::%CAFOM@[] &wV7]=C_TҬΔ!2텿BFv<)m1k;вiLT2Lf,Fl0MgSMyz= +*8t5L 7b85we Wz{`N9Vc73dHxyiYCi̙NjH!;;כ֦`jIc c^~&sܕI0~˛N°CN}CnV v^މ^Hygc}7J8ENYXʹL>'?"a39[IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/fm.png0000644000175100001770000000147314614030313015004 0ustar00runnerdockerPNG  IHDRIDATx,Wٶֶb\m-Bl'e.;=Zf={Ճ⻞LCO|䬳4;D[J+Ԕ_`dd:@ggndU' :MmncFu~z}>AFF~eQuPtjNi+\+;seqӉ@W)^εw*ͧ+qQۨ 6vaREp(ؿbrnNnGG8\Rcc>_ ښ$[Y+W^rw{v+vv*]󱝏)+ܟ/-d)/-^~Dݣ+B );t:;Sx:AlʍƠOr}q}1uTB>dM3ZҲ^} S>SV|"⏈:HR'F}׋D8 ^ڳ>D4ABN旞Y_ݯEQ_e˖l *%x[Xm6'2h9b !:Cq'{_F(ؿ ma\g"P@8yœ~,Q A9u X5`w,$j؅pǕ#Bxl]:'@ fKsaچ5?ME:SLK#4M6<}O8>زe x1ܢГЏ00~ѵy$^ :I~9 {AIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/fr.png0000644000175100001770000000111014614030313014775 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`J#G6l޼R>ՙ'`LF2{?o'WCAFd4dHPP/ oxM ^}5WA&MRҏkd GBNE@ ?&`@X}PЊ_bgJkǎZuK2j7O߷Vo.w5s{y[1 0 ]a{IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gb.png0000644000175100001770000000231714614030313014770 0ustar00runnerdockerPNG  IHDRIDATxp\mFo^X$m۶m۶mqFEPڹwۗޙN\u5)7|Dy*JTSzC9' 88D* 0@\˱x8h!kd??Ǟ€-uV* o/f]r1G5;&^Æp-Ʊ|JpeGaý}O/__??%<O~ZH-< /{l:kZ'MyǛANhQ /p<ɮgϜUчE7^q6u:שּׂӧ_XB y閳ԫyn@jVi^=w'ݓ[|U+U_U#A⠬=|k9G[yZ͡ac,/,(׮I bT>V=-;Xx!`eנHv20_b:!FN-6g kRć- ?e/(_X3?7aǚ#0c%c8`wxznj!|>B;. [q*f@1/aygo.O;]6V75/LNnntިyk*deƺ ܹ:-"wbLhbE9aĖI>AcSn]Joxx Q I(J*8Xl7ϸe,̝<0̪ê7lMwB͙'n<\9^Ə;ϙp0^_3z,}n_6' 0J$ʃ۩%sj*OO5?5Ϫ<+\ϗ*!"..Ϊ)+*UjIL0U4)B^{9 & s||BdϞ-[,k;߿+` (`G< 8%Er\E\ᎀ. $ༀ "/M挨H҆Ddz(宀`1O@6 Cy -{+ mkNo`t̩uK3eiccN[s{GGKRSQ$h)JYWQ/^pl6sIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gd.png0000644000175100001770000000241014614030313014764 0ustar00runnerdockerPNG  IHDRIDATxtoLm۶m۳ftmQC5w9=e9_qsM ]to1ݱB_8|5Hu۷ Y PYE@AAEEŊrW] 0{{lH4E5 $C1탠>#UmMV(yvOe-Mg:ot3:Gl/XҩB ==##3eճ__w3>#q^xдBۣUYl) پ5R2itSjmT\7G(ڲJb~e}ƴ0= q9P2 P:2<"vǺ#.oSj)JjW(P]S3< 4ͱ/7ܯ\v]n/0\@_}! M=<J<>w(߾gO&BG/`%B?c_zVQWW*` X-`8Ws= oavfieI5KhZ+Łm#o+\m"+kr4+;8_a/b۔\7:zw:M6%@֭4TLog<=m\to<f]y?:+Jj[g 2ޯ~ E_0sz^ٗ{~}/p1"9^^UN63CG;GnN/$@$!G8۝-[V&NOG$ź6tq ܄?~=nz`gz}›ö;aǶO[XX(DDQ^WD?]xٙ$I @̽{Ts_[כ M"$/E TJ&yzLݺ[&NX@׿> <XI @dɯ^J ,ԬYN&G/_ 0s0n϶AD(*d#O(xFxD{ۿϕAUS$ h#FzA$$(uGw,Ɠ?~ L|Yr ߷\ǿP/")i͔In6e0>y,:;Ύ4O{7PGE aQSrrIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gf.png0000644000175100001770000000111014614030313014762 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`#k.ׇq).)K  _z !X2KT|\Y=/m3X/5E~enSfzƞzΨ%8Wy̾}i3rQ+vvdgB HJT*P)) <+duEs܍c>!A"d2I:gZkL,t:p:@ OF#N!@,h4ZS (J>ުVf+ihFtnu[sSRVք@AEdff .ge*@!@bbrrJ wsoweo-Mc?unda]p>wi]w]ov\9:ii%ϸ'!!11) hF ~eBy,bW٦瀴 umkP׵N}VW#>һequtkӾPui0P7$|X}bSYs_Y(]ߧeH3ן \H85\>C̝OpsO_gy[j@Oh+y((h.o(_)^[Es%IYEz}K?u.̅T@et E|oGGb'EYF3L>ߘXw/<|㷋noSEOҡ}?!&8|V`PԱGߓy_>lt9(҃ufrGGs3GIx=Zc*PTd--z ;8wq,p>nфnaq!ۺ':>`vE.WVMID#fk}VZ,;H D%n];6#hv`ΜUn"v~b?N'-0 q٧d 0_Ko88S>&a&󸶼!|@b.2x/E ?J**GD ^õ:Uh&?DE u'8B'1 ~׀ኊ_{f ?fk {yϝdw %8{_g2`]tA~S)^Vϩ'Ms!/Fw\eԕ'VQ;rC|u̞hSPwljB뜑σu ˜Ltz<'7=NP=aZqOY {0IR| 3m;գGG"aWB0SϤ|"b?4~(Z߸)Bk 2edo͌M7yq¶k<( W ˅ Q@T+䮘1cSn,ZT-QW P%.R냗eY:c5Pb*|'[_ Z^u_mA[/MvкZ@^ uZ($Ѳ'T O^qN߷t_{F?BGK>to;]u-4*=\9 r xA0IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gl.png0000644000175100001770000000216314614030313015001 0ustar00runnerdockerPNG  IHDR:IDATxt[j۶g۶mƪm۶mvX7Ξu;kY_ᎌ^|PiOY֥ tk>}F@LLK̙_Uz>|c"'}1Lg}~Y?ZudfHf(]t:,3 2"32СÇ?Ͽrddh9'{ә OzZ6Z1N{Z@:V{+դ1͗;s7H6otwi˼HJ=ȺDɘ򛀁 ?y~mzܙrM??Pl7sYs_9eeq}_Wd$]H۶$}ÉJպҐzJ#{*}7<@YŪ5X֯ 9ȑcN. FQye5޵grQY_H9+zņQX0ʍ6V72}aM~7{SFMry`B{n] ? {w[HOV?]{dXc|Xg\l&rXoJ?)i?A O={\f ?q9*:#bb`@Γs\tn- -ؗ~ mK]+wѩ4.. .>'J76U[§|(hL~E/kŋ7V:b6-[#~=V`jU5Sg˫Ѳ|4;;?ˋQ4Ba&AF\oi@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gm.png0000644000175100001770000000125514614030313015003 0ustar00runnerdockerPNG  IHDRtIDATxOmmxUT3m۶۰vݾ8vl6̯;_~)4tA;(B)=7> O@HHKRq uT} s@rr&1JlCBJaaܸ1_n:iZPč7kTTq x(=z$K>vw%wuОWQIU6%f4'J6o!^{G[Z` ЫW%usN:t8ԬYNNgA:6szϷp[ҵk vPnn$oxEK>wXm]բ7ʑiƑQѷdbEB#`>*}% `02vUV-;jVS՟)k[mjɮ}]ߢ:wV~O?רVZ|\waSIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gn.png0000644000175100001770000000124614614030313015004 0ustar00runnerdockerPNG  IHDRmIDATx_6kQmۍnn줶x=snM2<|w|+wu|L&ij_ԏ);#:J2@jj2-JYZQQQp8\.]K[BU#F`6zgZdUn5tIF/wRSK8@Zq#k&ykݪ~f%v{pѿ%z!aT{tV;ͨJ8P5J8oV(NV B4/}yb "R!'Iպ.5j(C+Pz􈕀#w%w):hMBK֭& :yrSxdڿGМ5@n_%sGڵi3n\cQ8. l&`#ٷ}" ;ZjժGTXK^g<'%fү z aQTzAHe,'Ϯ໊5ddu٪.WP-,,}̅ڿBsͿ)?T?UzIsdr>:/p@y?AFx-Sc{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`hY]g;v`[zne*Ł 5,6y_ tR[^|Q,)+~BŵS\M2y늟R?Cگ)޶x{2>\(hǗ\r a(}ԩEs}/xw@ݚCKm.MyFm8D5e90!^z)aҤ @H @}}//_$*Dk|*Yx:~1to#`8_УlXcW_u}YFXzIgp ٞ{}#^$ ZAVV^y͖$ !@Z Fտ澎f5X\uO%?L jѺdkH#yl>>;q8pHu5DžEꢌwp91;;72tP5/ɪ?Oy:}uӥ[a[SէS9Lϙϲ.ei;46sAiX(JJB4q}Vf dp5y#z;W:ˈ$ Fe% :ڪb7T#$PE$yˤc}\zW^ yxZ}N3 b7dpW]u?ty]],"{0׿#`99k{\.]vٝwCJ@ $|_vF a}Kוd !!y/'` 9o~d3^$Lom6'-`X5_bc'= Hv۝_pu]g]w:O=C}z\q?+RbfMIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gs.png0000644000175100001770000000137514614030313015014 0ustar00runnerdockerPNG  IHDRw=IDATxb\`% 9( ~3kĶm{7m۶m;hfc}UmWntW>%HHyK*R)cl`l!瞊b/!w K~>,kurļ&읺C|ߣ@ N͹_NM|f=}B&ʚp%<guq3ұY$DAT+469` 0Y93`j6¸H @XtǡS zB" $`!p_X3VuHI%h9Рe(DeFH`L7bK+!,x[+JWĵqSHN+z(TBNcf !wJkN39$B O{{{"0#8r8?e1z8880$_+?[Voo޼cذa>|8 ʍٞ>vX?ϟVT^۸8;vV*nܸŋcȑ߿? p#F`ŊسgOčJdׯ_ǹsp>}'Nɓ'U,/i,_޹sab|5VZE%DVVGvvvk׮\oCINN\Gk=l(%ЏLPP О*@y^-G?ɆyR>69oz-JIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gt.png0000644000175100001770000000223214614030313015006 0ustar00runnerdockerPNG  IHDRaIDATxx#9&3,>۶m۶׶m۶mZum4}t{ڿϼ?NQ-^{-&²0岊?\oG1t_@FQ ۜ=uc/QDBq`-:[],4 ,O\0ج _ V׵_ڽ+qz cj–vؖ'qD=z-YoG_* X)1e99 F  #ARQF\w%o-XUfBQ{φ$/;%7V769@""r劇N XU{,k 8~R`Zpμ3^>_ /|/? E>JH5Ya 75a0j7[wQrJ65˅^ejWzIXkDv6z)O2<+?t-D;G>:x$nL z Ǟk=jY^h-ejQ%p-mefNJ=0F~'1lT/ cB<ۙgNT鏩 ~60P"s븗Mk' ߭=Մ]9XH9~`e;_  =!^Me&BD/. +w_;u 0eG6<e+ߛY_?a8C\Z^ 99ѱOKP_H`CUSwL%:A9uAЗp.- ZCPx0$Mc.^X$- ۯ= XH@T3>/ ++x]SZ9щ!a ʃKkSUSw?%s@N K2oCƺe 񰭙)/H Ul-B\BmG+tݢx[0vQQmSzQ`#A~&""CC}6H |9YY P=8o6q+YqCB_r%I V8luYȽ?nOW,+YxJAP,+Jnܹ[)FqJRyPw8&58|'v }yåK;\U:/cʫѲ|4;;?ˋQ4Ba&AF1@lSIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gw.png0000644000175100001770000000150614614030313015014 0ustar00runnerdockerPNG  IHDR IDATxY^۶m۶Um{5kPkmmBƎ4`ұ[H]|?=zN%M2 :40t9htxo5{JyȀ߾߻H!bǙZzOZrj&}JBeeIrp\U{jzHV-p-7Ev3O(v#d_&%vt70o~{)9}6J'HJ -<{{tZ?כ> I:H#>{?%C"0:+M6 -ȶH:hobmDJ=Csy_ %rSp3 w- Gtpu"^z/qϔt]{%Oƿ|"y=>wM(u94yuMsc$`.@FB_IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/gy.png0000644000175100001770000000225314614030313015016 0ustar00runnerdockerPNG  IHDRrIDATxx{@S j۶mm۶նm[ɾ=oN}SY(؋a2 w/O Yǧ p/^W4Z5KTo:66m~,UC͕[ƑCΏ'Nq- ppzA u( 6'C:Qpy09YemJѬ+@ܢS$\ΝǬ|#9 ת(+M5zj jT`NuQV{x>fNX0n^[+cc2r`ba!ǒ%{@|zcZ@ 0 g[ ͭ?fޡf-yVa( G_f82^ZyafOzL'q8-?{W`z r!҃<]WH({Lzʷ|+-/K?7$]wɺKxM&J֊[lٴ`aŊ&^$v%x/FkOldam6#_ [Ս8쵗@FnuD吮;pRt]z/$b\ (س (L'`} n4G3_b1ev\]fcn_Zuj/Ryy=F#Lӄ0H((jtIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/hm.png0000644000175100001770000000241214614030313015000 0ustar00runnerdockerPNG  IHDRIDATx|cfnض/jm6Y'kL׶wlOmg1rsys;qmb8 .HJ2ùMpjXlH:e***VTC_AsÒ;v ?_zxj~zᇎ_毁oJ>=};,YQ3|> \ -_;͙&3?󇗩^f1~BQSs}^^^~O '{䡥P;m&L8z}}0V_<3ZӋTl5<%Dz0$%m -vbɞfxo¯kw³}ȞAQ )ʀ;^=sai!0>ΘryrvhKJG۵A aylY=1iyy>x緑0{NZb4wc] WlLtp{͵^#}aP|dܭ06t{)>mqDNq`y}~M; v%ݾ_4]}_mU* vs2:m\m}낤Nmd?T4)X'w۟'S{>Gb]g/6Gw:e1fTV-lg h9<Џ_k9< V[P@p8e2v၁J۶B `h _<\UZ Jhs};&**Ra2yrrrp8 X3 uZϻ* O@pGݣₔ]\DŽ~`oAz7H9lؽ{\V X&`8Ws= c 4m*q;Lh]q5 WL-٢[pvc}NB xq۔ݺ9|pkX*+=ѡk2=TWc ?+$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/hn.png0000644000175100001770000000211614614030313015002 0ustar00runnerdockerPNG  IHDRIDATxt\im۶m۶mkXۻnTt4g߼wL}Hdӧ+Q@!&Ip^s 0:ǯb11 ))))Jkr<4ɓ_=Ng0OkXia= RuFB;Zw}޺@!fسbE*7€ݮE_qj. UqFv?}Eu7ѯ}vUT|R7zq5Xr1w Z6>uٶ !ԗNJv$a.0]II ߦķFbq0me:"fQ_v*ao":R$)6V@X.,9rE^d7OHP1УnPVdzFk|?8?$W`FcBpcнpC3`Xk /63ͲW9zmVǁw"x=x ǀzLLeP-]*`} qT][hڧ?Ď_SrW[Dޤ5Uy6ʿeʨͿt{uu0H(݅v0tIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/hr.png0000644000175100001770000000161314614030313015007 0ustar00runnerdockerPNG  IHDRRIDATxt$K;l6m۱<۶׶m{mvߚ[[N:1;#i1{Gy%˼Eڀ ϓZ;IRf99 fFW --=lɑD{wۿdXyyTT.};c3UKO{%nڹNaEٻ(L) rC :wm PA FW? اϲ78>Z@QzdX22hvc5@ԍ}e?-Amgf> [8]fJj\LU-箷q>x?}{v>w/~p3y?zԏ󒋁E6@eI'pq"%U+4埳lʯ+$zwtL_3dU`" Ysyy~)'3||!(ش6lzaZjx?K( / @saɸ;B># բ)]}$+:D /|T)45D'B[/`"A.-ȹsι|C`'l#~CkWX/ȭJ,"byE&cCw<$ھ8Bu(J@֭Zh1dH}^d!`7pi۶HsY:TVDs<@SW"]iꕏ/O 1Y䛳)K|ҏys2ctl 쎣j0KSVVleV֑T7h%z>oE& W1>_k7 xIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/hu.png0000644000175100001770000000121414614030313015007 0ustar00runnerdockerPNG  IHDRSIDATxAm۶Ë.u k۶cvl6~m{3o3o93Z_x-iRl%H DO!beKnA\Ib222% ++[)EL'&>_  ;c=~^~@+*-5,PV ؛7ҠۃnT ^] eRͣ *S0,P^ii@.q^1lY~z:7t: 1\jΊE]8Ȕ|>0l]W.1>jH[I$ \zB&Ϟtx|,yOIw}zYL}ڴ)S.-АGuNp#"}?XCҋ̜\d4iRBjl%xOR}UHbՉlP|~y"Vb#(47S}r5 ^WrMFqB?B+V4c2q1j,9'i=tыFM^;q:a$`mIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/id.png0000644000175100001770000000133114614030313014767 0ustar00runnerdockerPNG  IHDRIDATxQm۶2c^XamN6Fmg{sonwI_oҥ=H>)R~~>L'  I@8/ɔPU:'R<|yR}Ϊ/ ԣL7 &Zrk $CqYs=C/ ߚ}k6 BY!TVpY@ϟr搦;یnj~YB,qqV}(~Yq iL~ `DHe[ƦL/eu}52j8IUqbG?&ӴբEׯԪ0b x.xgTZ|BV>JI{U>|Զ\iΜei&pC&'AWU$ L`&U8ѣFpa_$.p#`sU5GFҋ[^d4l̙}(I$xORU?Ϊ4H͇1 Ds3>_\MbSk}3q>jvЊMٹ=zGrY0@zrUލ-AyyiBa$`[HIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ie.png0000644000175100001770000000111214614030313014765 0ustar00runnerdockerPNG  IHDRw=IDATxb\`0118/IH qRޛe0  À@U @-2-!#f(QJva[wz{`>~wm3 3 ,-in2gDQO090ᗷ:o5Ǘ:;@fFG;iU>[ (Wip0 ýwEý 8vYW&z  |9Ͳ X_β,h6?&FCQQ <$p,{ckS=L&(Hd22OR3|>B~ ^~c<T*!!#L"HwZ,2"qu2vtjnuՀzhC16m>N%Ӌxe*X,) " (b/G"E ? !R~d 785ϷE`սIKP-9V-X_ZB)IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/il.png0000644000175100001770000000145214614030313015003 0ustar00runnerdockerPNG  IHDRIDATxpoۨmͱrڶj!ڋmnwΛdsXOTzH-2YVODQO0]T=J@RR%p8"Bq)IJm=L$? X,6os&yU} ,nBH*,sHW8xj|jX%%dF|,>e3ʹdqlmǶ JؕX1n8'y}x_>G@rr)33N. 4(*`ǃзZst l@Q|QHK˜,51 7Wvϧ%߼rG=( p뽯]8x9 Xv{hhU* Yv^?,?)):~ OAE?e^:u%<S'OHBDQ5jd2һw/aiԩw%Cw' %׏\7^ 60lXׯOy: :Fp pFu CodFz zсE3>1:r42n/"DQwADk Q H &RBmD_w~3rh Դ7USZC_Sj6of6jv8^]tߏ~o8y}u>0H(t~IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/im.png0000644000175100001770000000120014614030313014773 0ustar00runnerdockerPNG  IHDRw=GIDATxb\`011E)@#GmSafڶ66f=7}y9G77Kf.R{jso߾SQIrFl%NH? ,6;0|jhX铽oN$+d-@7TSK`.sx$'tvl SQ̞c z^aN`9z&'ܜأ+`/p_ ) }z:bYvEVzKz5ɉD Fz^jh4*X,tM&b!tZAAߗ/_ŋرcvIQ۷og{Q__"@WrxW^ݻqFlٲ6mb3vwڅ[n޽{IEҭ0";;QWWTWWIy}L^NΝ;_^r%VZXzG֮]׳k|͚5 /ɓK~7C: h $B:!B>͐9$9)O9yD-9IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/in.png0000644000175100001770000000202514614030313015002 0ustar00runnerdockerPNG  IHDRIDATxtZ{k۶m۶m۶m۶ͱdgNVg}ŷO??H4k&W W(Fn BGO$Xk|?^|`fD/~@|:Ng0slЉPxt1A$;j=*:rУt`PUQeV}+L҉ۨk`\{2p%ֱJ[fp~UHqX@_*j^s}L_ ܾt@!u3 ڄN@ђpv&|ã5he۷>(>  Ȼ샳7Zl1 l_~Q_lƧOKrQ[egqlGS,ݲ8|`9gf֭R#Ϟ ^e')Ka޻t݈,@Ѭ˓\M>ĥ@[ΘTiD@2+rګ蟽ẗyQ0ӧON ˗grp39`z&ӞOcOZ`ZSɀMO%ؕ 3~'kyر#_LK @C@Ph[/˗7o܍ebd%0 Fף>D($#g2e^&G}"Z/wA*U (%oQJÈND# `4^whB(t"`} zyj˷P>1MNLvԲ33יΧզy#|E_ˋQ4Ba&AFϡ2&IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/io.png0000644000175100001770000000152014614030313015002 0ustar00runnerdockerPNG  IHDRw=IDATxb\`011EX%\0 m-FZzk۶mdm?m{{$S}ψ R/{ؽs ?G &&&0  0]'H#](.GyB䭫[_h墄ε"fA#MD` Cj;:':J0э_~/>m4?Frh]i_1 ڎYpl~ӇO2kxQpvt 0],yCo/*/wڐ3Kw pm#hG#>@:%"w[{%2 <( Jy{`u0*Y cM,Kؿ%=x' |E׏e/DC4 )s:N0rI;Kt?/r:swaCJ?$dRwe!wV5Lx׮^}޽{D @UU5 rQgIw ߻_~͛77FFF8::rlooϏkhkk۷A[ =kÈ3,--acc+++{Q\\KR\644V477 hhhU?˱S"ܛo1>>rw0̅H%Ͻˬ&>]]]yߺEYY=\NkGW@?2CggbE(E⫂hzM.Vu +HЫ1(!B˔p^w 3t641 Xv:ScMMYHg%hnn=rݭڞκҺ{ڮb_lQwaJźٮ9鼮Is>?]47ob@hX\5'oir1at911ScޫIҼ'>~_-+r>Wzg佝Errb&F¼ɫ)KklbM[Lz?z0!e[yzF*jO 䏐Uկ_RjXg 8Ѵ2L1x7ȗĹGhA>qyM8ȗYk)yEFG<)n'ߡ9?g0jC^n6XMKx==1hFӌuG"<|p(5  H{y\g5 0?$g1nܘ1 jHfhdsb ɘu Q.U1jX+`),c՛lӹ\s FUM|99h1MW3rmY6uyQkm˟)oS [ i5>d7ͼ6(9d`Py?AF uV NIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ir.png0000644000175100001770000000155314614030313015013 0ustar00runnerdockerPNG  IHDR2IDATxtG_߶mF1v!6m6Fm ^Iy{Ub}N{Fdggrqݝ Q*V*w&۷D8ǯ qz,YT,[\KpHm'Pm՞xhE.NO>걾sG=XWl+|#fˑ@h]@c o|kO;_4㧶g(sG=vWP*T\`~P7W.ǜ[y{J7'ԢEXhyk=^yWExf햡} 1~jɓgf7K]9#}_q]3)ڽhwhM!nxjSŅ{7wYN>dcRͲe98Ȣ#ECEEe_v>9'}K`0q]o ޭ[WMF@5_|M>|B?85sѿ?MӦ5rHO⺫ ' ķԯ#R~6A(z 0jT[I 4`wtV]&\A p%vx;СAk8 YI'7d[Z>ه:$d6ϕBy]2O9rz7 x:75Ksrz~ޱ۷Ѩc,zc[Œہ]9"\mFeMnP[L=O?,ߒpX ""f{\ L780ݒ;;?|E)*Xk9z~8y:`Z,nghpubj Wҳ5ߨd$q !XbȇL"v-=V@ѻ&S&drrz*<8K>o%Q]_bҼvFĢO: XM@ hIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/it.png0000644000175100001770000000110714614030313015010 0ustar00runnerdockerPNG  IHDRw=IDATxZqǫ䐌㺻ެ0p`lT%V*44 X)uNE; vyu{fwc؏M**Qf6Fb<7@^}PpJÛջ@n(c#w.0Sx55~[T#@#8@4GwDTedC+Ƿh8-)˱}ah>-4%MFF.SǁeY0=ulRL&l6+#tZyfzP@X`0 ($ ;|N(H$HRH&JWPTPV{e.l2n騻^B-3|>_/•QVefPpX!\H,C<Wfz4 o;R(:K& bpЬz)u6W]ņ&p(R- p(r~aX!G\_tIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/je.png0000644000175100001770000000116414614030313014775 0ustar00runnerdockerPNG  IHDRw=;IDATxb\`011E?@?333[r+nm϶Fj#Vm۶vcƢնɛ͝Fw4tg>>ׯ_ai Ur;.?P5' 8^P_k&Ѫq֥]}HV&>-_ƣN_Eww },zzFho'#""a_TOt">>7OQQQ$0_@#'ANv ьVQQƎ3+44qe9rGÇӧOٳFxx8HyM3588dzgpu?~{Ło>*}=vܹ )I訑?>}*TTT%%%(--Ug dsο_zݛ7ݻ'$m۲kbݺu֯_7b͞a1}tej$ ~ַ+Z">2ћ@ %jԵji%?IEjZho_/ի~)IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/jm.png0000644000175100001770000000220714614030313015004 0ustar00runnerdockerPNG  IHDRNIDATxp$yڶm۶mmی5Y"vrKw^TuXg} v_23%0@fp@Ҧx?kVxfH_ TSUKN_~_=/2ݓ=7N8͖65ak ȋga__E]?f~-v8q};znrGlGvwIxi1xᢣ11 `]{o28*}m9/+v.nm)n#N|nqpOڷG :ʶ~_9``}R~!H%0i$8\EYC&\m5IW6&: W;pA2S$~6.bxN\%5"YXoɽY$_zf!jJ#V<3}R-$$;i~Ez{~ˠ~L`P^XXZ$~{IG[N]&=1;IdM2%FHyGe6?}@A-&A/tv&y%rBC.d{UF5]CzDޫO˲uӥIƖ,YB-}z!,V_- Tfc4*4aߝwVKv4]/vսZlH[ɭC2NfH&Ы~7fm]YҥKe^($<|hɑ&5&.zq@NQ-$U*\uzxAT'zuL*nPPppHKOddH7xㆴW?`[_eTAP3Zj'PY{YOl +Z:.tY,ls(m]k'.7gF=l_j}]}kkr+(o@y r} pv/ HrnsTQiv h""lEWMv:h̀;{9m,z=1 ^?[~5] >s6Jr)mΔ%[HIL!?uY|QCm#zmֶKqޚV Xlw}Jw1:&`7'uwoh3V^W&ޭ[WҨQ?F0ܻGeRIY}ToRVR f@&5 ߿it>7oٲLMd-|ȀXY0qeO0ЛF鼕4`EInEE gŀw6Soojc|dA~&NŠg xʀG x oƪ ӧ VDQǰ^?ce5(1ւZ1ޒur6o[\[,T-{wXۺv!Jlz ~o.g|_uM1 0 m\ۋIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/jp.png0000644000175100001770000000110214614030313015000 0ustar00runnerdockerPNG  IHDRw= IDATx"QǧEr\pl{)3rpp 8DUN# =:R;w32{ohLs9kf{ȿ~JʊT8,hVȹ6%Xs|SPM>9Gd  Iw` v9Y,%6ιK@n_Ytm@c n}`1]};q@ )Fem#@AFj鈢i@$y ONޞ|t:ERA.C>}65io/J( cMwG?& *"R2 Qͽ j54. zt:v8K0Kp.k54UUku]9N- b$ $Iqp8P(]@pp <K&xO/맴275{_IjƳe_ّfIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ke.png0000644000175100001770000000214714614030313015000 0ustar00runnerdockerPNG  IHDR.IDATx|$g'SkfwmƩm۶mlow{dkыg%4?LL"^rܹM'+)S~eC֭;̌μmۯWp:nmےlp@FP]j=7G(M~p:].:+TW)RWzE6VJ H< kB)7_||10h|ku|nsCQ»/P]+<ï+>qsx@<ocQb ݛ3g.-䩒3 &L5& XX/ֳ>99 v` { W w$r'ߦ%ܚhE\ XV  #bGD}S mž7=AY}SmޗQ_x6oJB^^nnN΄ &ں&+ |. _AO;:HA ٌ^D[.! :V 2`Cx Yv!eG.# B}=p})ZD@a"nk>*VV:%?S?^)(3_W73SMju8uPmh0H(5o+5IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kg.png0000644000175100001770000000137314614030313015002 0ustar00runnerdockerPNG  IHDRIDATxKy_lf!mb۶Km6ѵ;_e__;:+Ź[Ҷ-TwDWO}C9^g0x#~>>UPHjk F#0~(›kgNS:j~:tz=x"#.d;'v~}NnDnӞ|{vr}"#_sq9m;{%;v.Jioy5#O!{w5U*< kϞy37+ksoU;}p? \; 1UM{?m%rgf9r)BD|{pg=i:z$s\kr8K#4//Gqui^^t{ ZW]IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kh.png0000644000175100001770000000203214614030313014774 0ustar00runnerdockerPNG  IHDRIDATxJEٶm۶m۶m۶m۶m#$/UֺX3gzz)WR"fԀu m]Ϯ9~MW^{pA,{~P_o:"tQ.>W\zF^^H؞ [a;8xRCH\M:Qeðb7:45ϟǡ~=_l͎TbOq(`m!ԻDjŊ_ 蘾T)N˷Cx%wO)"uqf֓iS3m>g:o+:aqѼ37qXLJtppỦg^ӳM7|y[vkHC4͘+dH?:tr"p\8qBLcLGćۇI})|#EBp%ūVMD4 `FHܷ}?? pI`Ȝ[ZH&u)+TH ďc,'X &0 !ڹz qIgBr%߾="%\ y!Y[ײ/A P='n=Dy]L.Ļ;zm P`Ш_}}A ;BZ[_SD13Ḃm{ݹ0U:vmCt|f_1 0 B=CIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ki.png0000644000175100001770000000224114614030313014777 0ustar00runnerdockerPNG  IHDRhIDATxIڙ]l۶m۶,c{۶m^otwUΤ _?@wgD5`$z<@^"ݻaa/ZCCU zgW3` x?vڔhEVX~_4$↢F~%Eu(~CkDk}3__H~Eu0+!7ޢ&iStDݯFAE~o[*>s$&m^=<`އl5g'xӱF>[ܻz5 80sk2 $c&v&Y(ʓ'n}ں98c{C]w~1=Ln2DNkHN܂޸:0ӱE#敡"ΰʙgpx5¦^+HJ ⯬j,s~#$o\`Q|Ow F H4$m臩/fǶ(8З..[j뿅tdY?8C9޼C\,?,?lj,+V9 ;2onJ`~ʂq˼"=sK5= )@_3KL7 ʅg)$5<{8JCˤ|2٠3|g^;aa'5חY.=Hysx}3}s+=ҋV2m/_\2; z6{ LXLD6oyDCHTi\Ru E11\iܘ}Od9(J߯G6( l#?F'Z'+6jP~~o-4vbӯ)ٳ͓GmN^5տy6Ji5_>Kޫy~ kdIIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/km.png0000644000175100001770000000217114614030313015005 0ustar00runnerdockerPNG  IHDR@IDATx[io<׶mJnFR+{{ͤs3:k>3_*PqJx„PvVxd2ǯ)p1w޽tz={~UDQѯ.uk8FpBLz*gmsciK0"k6" <} 5;.%) Ԧe֭۶A8qW8yA,ͦUmD[}i,ƽq7߮|~5O{ q >Tz_C>S~ײ28yWR L[>RLvQIp}csQY>s>pNĥ~{\xX)m ̽븹CۤG/ ;II/pTLLs]T–Bs go_T[q|L507t&c Zxؠ[ o۷~a7q}zLBSd_m:7W*V X[BR˖Qu\,*[曯V-U6mZjּVw5wݕ(C^0ZQ"(QLY@ ݻ-%ڷo[uqq-`aF.ehHNѵn}1M6X/`_"^^QiHif"8SD3M@a<^"/ ](t_5o =3}٤/ct㥞OH)5*?T .Zvu<ט l1¯g$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kn.png0000644000175100001770000000232214614030313015004 0ustar00runnerdockerPNG  IHDRIDATxIZ;m۶m|7ZĶ=m;UG:'s$]0b2׀ $^AH$&Ɓ9fׯ_޽CKU7oz`0M6xml:(e[N+e-zޫ[6(^ܲz{nb U@Upq5 ܶ|ҟ( 7/IWhU::8pNN <\8/mS_?GPTcy_ϳp^A~= CuyQ H84!=P>6n]j|bjWZX|!oI:Wr6>m;>s+y(1AyJ˧1 Mdq]ZhM\/gbn%=umM NX9v%PUْg)Z2g}o9 ܸaশFd H(t mpqؒe0'}" p{_6jU͡7peyq.ߧ;C: zx--qvH3>@^!X5jWtyBgHLyyb-V Pl9Z#^Xس;^{nL992QYo#$a2ǿ{X=94n;X(ѽd4 ^ro_kp:: Tմ+cj-2%c tЛe#˅ҺjyW%VP-" ""o<KE <f]aLA&ݟP ~рœ~_M>90;jFEnBn6乀.@O2d2'ɃϟK8 w,NVdI"g/P|ӳ(QK׼y׮+ J0bu?H_'|t$ !yʕ(Y7ʔ)]d p%2( 'uBIDD:HrAJpŋת>&u\%\$%-+} Ҡ"& "O|~L0" K֏$"'%@'fk0ƾ}5W#4jg,Y͙ܼ} ZoWh--7FG:h%]I}&#.|уIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kp.png0000644000175100001770000000223714614030313015013 0ustar00runnerdockerPNG  IHDRfIDATxy;ޭ6V5ضm"Vb'xX3kw/o2[]WZy;ޑi\`L& c$)wVm{=;/:,p kOdz' ,nG[`kM̫x5_mT#@tڭ6GS;}*M;/=H6U wݧqWa2g ĭ}?GjւY%J-2w4TK~rG|ȅkz_3 ЇUW@lC|' I!!rcr>QuS.: C qhfe ԕ.S]@^V%O b4!Ξw\_WjmeIz ᑑ117U5~m#`]sSsGk?s)S]b3Jy@PEաMXLa H\_ɒ5%~#~E:t2\ǘm(/ae @ᇏJWWťqZD͚7`#,`i 03ʶ~ N0 8NN_|QʺW\ds p~R++ZcL$UD(H0<((mX<29t*;" UZ}_S˕]Ŗ~xYzrwʠ6zWwí`ѨIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kr.png0000644000175100001770000000126614614030313015016 0ustar00runnerdockerPNG  IHDRw=}IDATxAmmAmFpl#j 7{mw{ۙ_n7~F+H$KdbNB ½5Q#~2,3QAQI)Q^^񣰨c¢D۷FGїWȠwѣxc)))FW vF=ErrpTeHކ֛a[g_4|1Agqi :`{n0hwP : yiE;v|CZq+\|YtY3YmehbbUW|/*..5Smq=]fffDPM&]O2%9! JR-ܜ#W۸q>CCCycc#nݺPQX9$$DQe~LL PPPccchbPCCݻ!00/p<~o޼2p}}=󑛛dff"++?b.'Y+>}n<}I'N\]]]#VU=<<׮]ݻ$NJ>?6.J K+ :c h+3J?I<)@ec'MIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kw.png0000644000175100001770000000134414614030313015020 0ustar00runnerdockerPNG  IHDRIDATxC|_۬m۫tU^նmk{Wm97Dɫ ~@l|=$D*{x+  HIVZ|4*(y,:;Ύ4O{7PGE aQ{K4fIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ky.png0000644000175100001770000000235414614030313015024 0ustar00runnerdockerPNG  IHDRIDATxIS7{j۶m/tYwU6gk65M罓/'LmoۢN۝P{]U_/%d2@b>| 8ĿD((-ݫJ,jsKf[p߃/[v 2@# MBo=+FJxA_ͭr>ozؾ~xTaYf^JU)=BHқ}B)S:]{'V! -Ⱥ .aw]c?^:|"X7+}#p8t1z+gAKZyEX}kq},nwp)/2 m5;vH5mnnָP`\7lΤ M+  #p׵w pX@zrڑ%K5j֘L׮0S@D o~ln bdTQ\~N!G^qGm% _BU 8-^A U P &}pO@-{Vg_#}Kr7gwӤqm?Zm}ew5w?L?=+ݿr_]/A0IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/kz.png0000644000175100001770000000204114614030313015016 0ustar00runnerdockerPNG  IHDRIDATxbN9@ɑFat֌mgm۶m۶m۶3Mlө/4}GD"jN6v΂9Vǯ 0k ƍ+7` (_zJe~u#ʂ<77Ŧ< ha6fys@ Cs5<]vrޛ=bȑ3k֯ 0{,?hNpZui/$NX1?}VA³!uW"sW3) 0{ +lhpCϥx5Bf2`(0*΀Jo< u~N Ç'L 4c8c++tKZ+Į`f z ̜&.6ׯ+bOJBz+ 0gNiic T NFzw3j,!a4eSk׎ܠA&FޟsET+x5* 2vj 2]3cCAIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/la.png0000644000175100001770000000151614614030313014774 0ustar00runnerdockerPNG  IHDRIDATx$;l۶m۶m۶+<{m\vW&'݃ Z_ t$> &zA􁵈 $&_ PYYN\PV$snnOA Ag ϫV|~?lg*]H({$5ZύHӌ3^ClLszQsUU x޽ YFT/~ڿamu^맊i93+Wm|[oj Z4ǽtoaա9v)8Iڇ{1_LM;㑜>R;FzgW fkj__6ۜ{~dٜ]WG[s{챻bD*)syyhW0{u'q̽6$kOfDTƯG+9s\g홊g#DJs8[ny⢋na_837 !wXI `w\̣ ~arWk"I/>$?'F G r⠃N=uZHXFXD$q5NFqʈE#CH8XH'~ S% kt.jl?B>zϔﲋ ϑ>xm7(7\ڬk9}VaQp[͵/IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/lb.png0000644000175100001770000000151514614030313014774 0ustar00runnerdockerPNG  IHDRIDATxpXm۶pmֶmk]=}'>W8Dk&M:""Rc 8?Xjk;8hh#DJK$,)WZ'@~0L&\˼qkG~6c_g!rsc#|u8[=+ˉQ`W Y{J.htc_@~hj2Bw %O_WR;m\ WX}ߡeⱞgz|GU-/*Hٟz!35uPQw$莊oR괴45M6U:$}y$DTZ:_!#KIUqqׁϘ1]:$ _L =-YWɚ_i `! w.\ {A٤UI}7n$[nd"8߼Vvgyxy,-}0][LWhK%|j8myZTMF|AN&~"PjMv~j9pyǞ>}Ϟ97rZM&/pb)T&[>,yW,8 /~^ɮk_oSӸ&mڼJt#W;$+]VϞe 0Z@K{$ٯNrE+1}gIg\hԲn CJUyl#G>mWG(-n[0K^ЦS1,Q c5r{ ,PuWN(ۤa%} DTxuާ.(t02޾׮q40_烣lD,啜_鋆m c/2Mڸi= 2V^ >|-^pz~8_" 0X.)󁚚 y_L,7H*hAm(yRA~z?麾Y@˶Ӟi}Cx V+SJy}5ҥ%DBœ1ĭ[ԧVB7v)Q3+QϯC_G%:tx:|ఙ1}Hx=}Wþ/8}p^ 1 W} HA3g"~jDժgf f0Lm:c7^?3% x-O\Hd`x0Dk[`?c b ȑDt]f3LP\A)WN80-vD@`&k0nf \tಏycjKl~\NT\NGgdμm5(xNJe y^}-; @g(߶IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/li.png0000644000175100001770000000161314614030313015002 0ustar00runnerdockerPNG  IHDRRIDATx$Y᷶m۶m۶w\jw`m{ǶжPUQ`eA7NÁM 8HjMZy Jmruf.͕J 6ʽ!TUq99cGʬ6'w?=8BW-*u{zR / >Ls*kB$M-x 8+׊{"IRO!}Ik =0>P]YY@! o֭ZF#2*_Z> y!a- Ѷeab1&fA}}Slrcxf˓>CW/GaXl3ׅb-! yb|VsKNgSSWp(mQ]9C[_*.䦛'(& &OXEXpB#8îv_>--E|C{BJ#I9TrE$`9XLz՟kA=WmBQFiy4394C  7h_AN"z3|[jkk_c/Ԫz/3euսSg~|Ur]u6<ϵVb*KP*IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/lk.png0000644000175100001770000000210514614030313015001 0ustar00runnerdockerPNG  IHDR IDATxjڶm۶m۶m۶mhm9YeZ A4?cĠgO y( E&2oÉApp"9~M7 rpp rrr,aɎʱ" :`4y 4޼q92 ;0q;]6:wKϷek^E_iJs^ڈۿ--[z~~|#m?8wCw57b'M愲?ך;}YH`{p}3*tf,}|cWu?_@|lVo>kP^خG `S=go>WWKfsL%/t}`A|SW~e(ϭ nYFg>~R?o_ob{zt @M["Ԋ.Qzhg' v'FLG‘m0{F_eM>0ŰvijvM+[#~npj_>B#`lOw鄀َ etA7>ٽ@nS/c[ םk H!ZA9EG ''.'ƫWKءUnf;fW~K_\^j?,[WuD@ҥ:x"%2d(8!z#-!zZ1뗀B"XQ˒l@ٲۿΪu iTEw?_!d@g@Y{ ]?z  .`},k *;Gh/򘒝3|d5<^+ƼfF.:Լqu*[1 0 )NϕMXig69ofo 48X~/ֆwvϺxsΛ zh\:Y:uo@r}Evg'dT4/]?zN׳;i^߮"n:6NE^Cұ+,Z2h](*uũ8g¤0,:4 O =X.W^@}˔ӨrA49~;_ ]:!LJq1L& t=CԶQvԇ;~bLuÔ ?CN;xd.0@M'f[ɀvMGvzrus$Ӵdg 5ʬ?sP΀pYc~'|I'p퇓ve 1#b}0 ::.1% (f@ vk}މri;iLv4_9-6ǀ̾€;tO>-cz?B/8Klһz8@!Ĭyz#}{YNh:^^tӼ4!0 0 "g.IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ls.png0000644000175100001770000000210514614030313015011 0ustar00runnerdockerPNG  IHDR IDATxhim۶m۶mmS ڱ)E&}?њO`iƗ@֋Y/o',prHbw?;J`  @D/,`hz}t4 v;SSo11~[7Ozbv wN%Wqwbdr2T pÏ;_` ~pYɝɀWXcsu޿njE[E%As׳RVMꆍY62L&22\~緜½)qS4:r?;$q Wց]j`Ovk %!IJb ^NmFMV`>>?9.EppǑДe%_2Bn4m.=1dȤI IJ"7 8 T#<+s\ phHJ<%uA˖-Z4k6vl]F:/'pa8H<FiZ&MwE\@aB@Dn7n*έH߾“$^yqUD6D[`<7."D +nWqԠV˯gJqŊUS\ڵs}z>nʛ(o+Y4wbܝ_J%bhOIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/lt.png0000644000175100001770000000126414614030313015017 0ustar00runnerdockerPNG  IHDR{IDATx$O۶qm۶l۶9XvռNo'3>۝ԾFnȽB)1=: IJRnU~4Ȱ=r@󷿸>~p8msσW,()Vْϭ{bbl;Ԗ'~jG9#yUjG@:nڽc;o4ϯ{~Y/>@xďjG 6>Dˋya _ zLY9W'I׍u}U /ToJk\jedJ~AIҥo.5k֡CQP6Ed<_A*Pcjղ|˗+WLօBBFf0٤󿿘'u3)-*ULCpܡmWyٜ__t=! ^%k#b)kP; dum =\϶t1jT %6ѿ2d:/RܷW>OWk{J4<*k=O0H(ՁQ5nIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/lu.png0000644000175100001770000000163614614030313015023 0ustar00runnerdockerPNG  IHDReIDATxt,wymNj۶mیkQm۶cwc;9}}/^[o4|AiƐRJ 5:ZZ(/@eeZQU| EEn)o|'gR ERwݩ$)MLifʷr=@aaQ y|Y7|miץц!=34Sz|~IDo]/Tyg߀/S/y*6Y:NzHu tn tr0M㗕wtǩǁek5jiy-{:Kה9N:@^yshk[j0@RBTV7_|9p0==Ycs\rE."46m_f1#d_=% [D@)e=ߜ9@BBٻv;?2:#&n&_o$'wP@@ր6 ""<<4t׊5k~D# |<sHTT喫k' 2 Ȣy_ ~{c f#)UK@%"CqE\L}{ p9?K9HXN<ѪϺ=֏ЙgLY]eVW ׭y=w;_;ms&AF҃s]IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/lv.png0000644000175100001770000000200614614030313015014 0ustar00runnerdockerPNG  IHDRIDATxXضm۶m۶m4ֶ km۶l:tK#;V@NDl} o]wrdrf$:% pq8q dk?yw/'MNj>l}SOҦ6Łm^ػw߾+v#rw/00gRQ牿%v  +gosIl& 6\3 / lL;7ox~xÜ-~棋3Mqn6O';"闞W? >۴f-~l,{=F|?x^{ϙN^ݿ#G凧0c^42wI3%KR4Y2[H&KidxJ_)rAPΤ,ȷM(8|g~G*1o1k1׈1+SqVǦqk( zu~A{W3e(Ĉ0"~\8qەS 8o+_3@k;9x]#~wiko-C=I#@!n%s`k4%˽{g&@f`6f{?q?~$JbRppB-4cn(|Njg |(gQtO,@> (Ii(T> | YYe'dI~vvIKZZ‹})={Vo IJ <7ޭ[WQ~ pCyS'ׯیU-WOJ5k&Okt6kVO5 BVw'&5*d/ HKE޽Qii"/xFSmۯf ҷz D@}|=Ajb3bgQC<~lRD(punv]YWholժfk2[ORU5RvYzX X꾪֣}x >=C.RIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mc.png0000644000175100001770000000117114614030313014774 0ustar00runnerdockerPNG  IHDR@IDATxl&A=۶m vx69;66>Զftiaݵ[Y_ٶ !B]!µ97#d|RRR% --]B55ըXTWg<@؊/_|>hA9pXk ~aBH -\ޣ ~0<(( Rҏ?=?B:v<LGxذR6V8q$D'`*ٶN.|ĈR.H@s Y=Sux}BNK^姨#`" ᮯG)'Nw/͛fhl.pU?Nyup%`Μ?JԩSL|HiĈ,p!M;< }(M3jk3 Da61HlՁl;" ~#o ԰;)&`/߿n$`%6֚>G-ԭ#n]/3o_&yGRf՟}\oBS'}uaj W{W%UIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/md.png0000644000175100001770000000175614614030313015006 0ustar00runnerdockerPNG  IHDRIDATxY񊝬;mŶm۶mۮo_wךNiQ+xUCRRNYR2o)+Kj:5oyoʼ"'78y3g'f~k]9c;aq6Qw~ۧ?:L"azUۦYI+}dO'NgzET͆ `v'R`{7Pq~p4]%ݹ {Ggީwky^Λ?7''ۀJ݃os.o,xԙ3{-0vumkV)t@QnkM]r"ȹodc(^1.?BL5 ^?B_J8+䉛ܺ廲`E)W1B[_$>w9HLSV>Pw_ E\ I{G!yqݐ =Ygy mVݕ:% P5W*׫WWVGvk{Hjk;E^ܮ_5ߵh\sPf /Wom|PXU஻| ~~/X_W/++BltK@Qxv"  -<`.# 8 [}TǍJ4cRB?/"FTs-Dl)~yV|~+ xY+`c+OcױGscʛnF +hvZۋߠRWthg V0>1ɩ)LN 3`fsqz㏠{蓭}Ce!T Ufj{, Y),XW)SnU 4:K604*QP㭃WTƻ11@S DR륃*3k66b'AWWWnbb4vww' 466@ihuJ9O_HwNNNGsssx-QPP x=PQQ^y>ޞgggG!##eZ4۷o:H<=%a7ဵzyE'O0!Xl)if`)QDc{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`r8gU?tUCm v8rk!Ο9" j}kw|uAh]O>NɃB8|AA:hZuOl_7ްTYq>;)?O x5 'І-_\!c$4j57!IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mh.png0000644000175100001770000000234114614030313015001 0ustar00runnerdockerPNG  IHDRIDATxx\k3\6'.mkgb窶ljڶVMg6b;`7sQ_tTm?TuJY _uA rU5TPX\*`WxTDT} ^_ڕTᇭ[?'\ !(xwa>9~ (`G@PP`f(0I@o_ N7¼% GBa$8l?_y&JJ ,`  X'5+ [Zrq@q_30 Hqi7F@0NZ<ނ%%7҅j߾엸ϔuۨ6SqgLy}seWktVdYyXvx:Y;nIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mk.png0000644000175100001770000000236314614030313015010 0ustar00runnerdockerPNG  IHDRIDATxx[̶TCڿm[m۶m۶mT6|߳'o:)sIto%+؇BQpTerqR2!sc|;]Y#w\b8q`o`4Lf3gW4/ bޫ:,8q~8W5p8[86DO0KRt-$ms~ iƏ{t7KysEA7K)=GWӶ*`q9@BԈ*m7oa> ƴ:>EUiya ($0nǰHur_ùnz8c?='rC !iOXZ,1$u6,_7q`a8Ա[.oF3gmpM0 xO펹2ezn,Y B _ ?pATT=Rx Eq̗#^ RgJ^n?&`Fg (w{w}|ʖP_~T 0X@ݿR^-x o 툀(Ԯ{']arT@xrpѥA@Gqgv]tpe+;by 9Ax 5o~Mrd޼,Tȑz+]ǵ==ɾ6e{~?3euJy64`z)!IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ml.png0000644000175100001770000000124614614030313015010 0ustar00runnerdockerPNG  IHDRmIDATx3xd_mKFFtk[ۥZ w}Lnv4{~h}c9S#]W'$+~LUUђJJHOϐ,IVՌռ[迪7ݖrhڒFk6lptTU]PZj<v䈦I {,諟KV˒[ݧ #G%opk p!޾ ʬV=5~]7 _ #H )3u}߅4P Pz􈕀%]] I_~Ѽ ~y4iҬYCI8FNv~^~>Jaa!!S %{DV6뾷wp[:Hdd RPP|jh! xI3=Zt% ^/9 Ux\5]Dtj6jmՆ>ǹPU׏M_bϔ,{zw߹과&AF9@QNiD:IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mm.png0000644000175100001770000000162314614030313015010 0ustar00runnerdockerPNG  IHDRZIDATxc+Wzm۶mԶem۶km#xb3}$U.8>(kk.\kkk$.>FWmv}}ޯX`8@'A. '8yEip!gܒ?HOʿ -NOz(8E BzR`0 7wǃd;ς&76 7L>fuD< G\j@^3cF@IUrs}(h noa=6s;g.F,rE-SR2'-3~X'J7mE]5t<8~?3oqoWg!j? x[gҸ9@^^(l?҃M6wYƴRWzaEҟLm4v@kGٱ[!Fv^gxuׁn% ?@^^޽DÆ6 +k>su^OאQqu5o^#Zto7 xu*ҾޠaZw}mۚ 6TiL,]|+D%Zz"U{RpO R0qbRQ#Gn]?ѷoqW Pps\Ui_Q/sab3z/|C(xW{}߭^ 2oi;eW >S>J1i rTݛ$Uxg`*3렃܆ÿomI$ZG訣v~?Sn;ur۽ޢlDS^U'EcqFi^^tӼ4!0 0 >f^@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mn.png0000644000175100001770000000150314614030313015006 0ustar00runnerdockerPNG  IHDR IDATx]6b۶]mضQbTm ֶ'ٮz{{H|Gy'1QՂ? ]O)II!@``H22(Ȯ@l L s/-\9ӧܿZUX} 7k{d֓ 8 W-q> =_0f3ggxm#.@KUk*Dr@AB< 9K*dnFbHUobԔ7>xE~,<h;lp; s^y=8tD jgj6^ҏ ,|ʃoĹ.&CRo-E? |[y?sn7( eʔJvcARpd7h1 G~ ȷ\?Pʕ~p[sRnݲFD뒞WDDUy~^ݥnH%눞kH|>[ P\Q\o%ۉڵkժQWRr8F XFXN/x=N 1[7HuZ-ː0<#<&<$۟ƿ˙_wDQ }yEDU=Ir)z`1/|7s:ؘ1sʲw۠Д)9bs(YFS?r0>y,:;Ύ4O{7PGE aQ)@$F !IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mo.png0000644000175100001770000000174514614030313015017 0ustar00runnerdockerPNG  IHDRIDATxp$Mmlm۶ml۶m_l;S7$ dWva[n( Uu<*?;~K"ʐ,I-32~S  ڵg޽X"f{=kRyyj췾o]v7(-.j^@MfchzcH"wiSF>a'Eˋ">w h'YPXl{hKOTk@;ÂVLzp$uMc },l Bl@/[,(|lo8 dg'׌[||%Kˎx%yn[_<I#26>~{QD@YY.gcR )3%%i/qűkqK.gx.^o$O-cHQwEE|xn]~$ FZV&W\IZ\Am]A/!AX9~R|zkOR<F_/ɼn[ A@o'_3q1G}7]֭>1|K|F'd[CDq59BדּPCC J6ǿ5?WO"\ "HQ IUs Ȥ^N&"U}WeJm xϿFF>KMԬܳM@φzzC35U"V{0ƿ%qlN{:^^tӼ4!0 0 i)ҏ"IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mp.png0000644000175100001770000000133314614030313015011 0ustar00runnerdockerPNG  IHDRw=IDATxb\`011EX% 8m۶pͲfc۶mv==]a0TO+W$X^|g3 ZR Uu5T*&dfhFTu&ίɰ CQ%QO:J:*XKBm8jS|k{#`ș"hI` 6S S A LK'L%8/#Kz IgbLv`ݯѰ^Q |Cc}xxao3"kXϿof$CHM4 gubǏ[L?P*UȻM,ě#pڵafN'Nlx")P"77$9994YYY̤ɜTK.d w֛9sf000!SkFĹs@ N&jqN:9PWW___CSS:::kldd KnВK.>sZTTT (**Bqq1cZ)mܸq^R-!!!dի @P8H$E"޽{kN\,/OF%|P3PMǠ^яG~+}$Iqx45aV ZƟbN6O0,6/gNmIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mq.png0000644000175100001770000000111014614030313015003 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`~M"dfz-/²E0{- `_n@¨!85^|se_JIh\@RR+J #,0pؾHik߼P|]Y_†O}H2$Ή~>+cėP@93_#{wTvA Ծ}/ ž*I ~#Q:K/ ?z:(+\Ozzlܸ%laWOO*foS<)q#6o^j_%6f_2m*L; ~>Oّ_S.ėK8#}~"'XI&Zai, kx=/}n۸b4__E4u_l|ʔ!@6Yl,mqESH}sR!C@̝+ |1ǜrtbyxO)'s]>^">$bUjXpy?~Ŕ)x!i|DD>AZ̙~$АCM]N$Wq]@A=CL(KF7o!m8CHZ\xnhumo ]yeG9R{8I-iӚƿz;~_?gf] ҫUIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ms.png0000644000175100001770000000222714614030313015017 0ustar00runnerdockerPNG  IHDR^IDATx YXۮm۶5mֶm#m;oλ47}g3{2Kּ KX1IJ939-5>}̀7n֭ۄ7o4} h4:^/^: &OX||bkV_'i6;i~EtShbzgz*:F>eFӧg/D}vKj|3#qS_*pi^hmˍ/hI`Ҏջ ںO-%˘+ٯ, 8f cv?%>.&OP[P0p&VݑC ckrf;yLu9 T#xڹ6IV-"GhQ~eItI.R@΁je t u,0B?Z?~LS`P`CWANb3t. dt(ڻP'hEer;G8 29< :Õ$Wx\]^dkusNE?U' 7ouJZW.V9v\l:F D#㦍Rs}l(h?B _DkA %#DJB8)xEG$(G\(L,8F b-T4x )'$La%2@.PW%ӆ˓q@=,c8 ap e䶧>),Hn+Wٲ~ǻ Ȁ 8ǀ 8Ò_\Y GLL-˵\Daԅ]ٍ={0SnO̜2),"BNM@ΏuL*S%$|Sr%y0!) Gʢ8K#4//Gqui^^t{ !qVIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mt.png0000644000175100001770000000217114614030313015016 0ustar00runnerdockerPNG  IHDR@IDATxXF3mUm۶m{[k{wl3mVi#eө|r$_]7ZD TnrM[p صk֮]'oBe^nlOvfLx{| $<.oy*n$stUs?wVe|gG~5߸?y׋>Xx<^g}cvf@(d<he YV x;m=i|+Y. . !/~i@7Cgh[PAxZi$ř:+iĥ2mifqS_h v3@,L7ϣRF5^.mI@=$dܡ X΀?Xa;.ݖ"O3@ իe~ ̀7[bՉammPbgb=#~eͰ yv'D׍׬NX6o>Wa0ѰIPs]tޒ˂ҺH7~Bq]/rk_O+\9&΀= iUa]8(NX^H_ș#2[Ns9<">>{~vs_SX&Ỳcw*$`8us&MWBf`'& l/# KD)sV%gIJ}[kDt};Qד!J=GIY@ q'p- 0^~޵@q>i'裥b5e}{]!ض;cӜ·QnZy]sb (y>qDIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mu.png0000644000175100001770000000126114614030313015016 0ustar00runnerdockerPNG  IHDRxIDATxoFmFt j#u7mSmX\m{>}M.35>wsGtN (7L0ExԠhZN(e{:ԭ~Hнw@{ZR)y R39ߡFu~c^6Yӧ}`&/U{Rn 'l lI T 8O\ ,Y&)F`7~Çϟء-5;ϷlT p9gD͟,}Z@ i䤸 .%ZsuIGY[ӸqysС$G`!x!OL Xve!M OG7ԶGj* 5ky ƾ)|-4V,9YQV&ƝyUO~GEYuY,<{l '(p_pjB;m_P`LԗgN]X{zMMԴieӹ[1 0 M>c}IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mw.png0000644000175100001770000000143314614030313015021 0ustar00runnerdockerPNG  IHDRIDATx\MضmF!Um.D)Ƕ9Xƶ_IϽ=Aַu3I&Mt#1!-D }>Ep+ >HK9<T}dpc3lG D2s%izE(Sܔ}**5֛+U^YYv{Hp&dn!GE.\]rF5xD#cCC׏qΰb.eK8֗{=h޽+T$E #΍!%cqXĞP0M+])RX!CB ˒+W %e %nd %d1|QlIm%mtV0grmRB_yzO% Ԩ}+VP\ǎE%E|vJO`} preW2e/DM7&kik}iHCKB+>HB' {2L%'n$΄Gf`?~Dшаa/1Ι/i^s s=m4tϯ1 0 AhIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mx.png0000644000175100001770000000233114614030313015020 0ustar00runnerdockerPNG  IHDRIDATxt#kY۶k۶m2L׶vT2m{<˛)Z8=mvm;pDj T]YI^^-B縘ia811U ҋ`lv;bȎϦMk_+fTͳ!S鐹볦>k̿gKKAkDwzc}J'zfjꐌ鸐cIe@Bb ~p֨ن 8f:x`&<85kf]ʫÀ23/rP6`u0A|v'q.}aUY ?p=@_{vN=Ꞁ j FnF~'FR.r,L y J4ҀƎ8j'_Vf3ald7_2`TI&DrGt8 yPYYYVLмD0F/,_m<05{y&`˳i`A7/6뗵 o bX0ki(.$9 (N -i@SzxcEl I ec"[IaA8këMZ߅en@߈JR4r@VV^= >8r DM9z>]ǖ|_=,^e@CY5yd}"/!)񜮞v?`h|Kjh5P_1+FIrYjާOoE! @(JW "jw`(eڴ*3tuD>%_&]WXH9(^9rĈax/ӧOqq"6AD׫{"v !<_6d(3dC"%% @s8K#Nʟ_lu!O<5!Jd9N#7FCjq@W_ {W_9k]Ζ\u\uV#OeĮ?Svlnbu|_?z\Y:onfʡU>W]VwĿW^&!IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/my.png0000644000175100001770000000214114614030313015020 0ustar00runnerdockerPNG  IHDR(IDATxiԶ͵U۶mIoRgӝiq6j+k35;tgVw>34ZA4Dm Ŝ \Q̭yIjjBxo p%ɩ.:^=@BC8}iA"0!CzջGoiLk΁ =~ƒ ~qpӸ Jv9K=Si@rG/t1N\Fkcxm ʱJs#U{~\ ̒l .(̢VP(eeQ 9@bl= -#?|65nw=Y:cWڀѯF$s8O0WF=+gg sٱDY q4ieĻk2$I]Ck$c3Cc0f.Ι+ u9z:uj3 ir8эE -`ZC|MfW[ 42g]bd@=g:{% D\^^]T) >f~*Dn"oF)zD+Lٲݘ]v&pk .#J!\ аacW~z޽J#@V'Jm0'ѢEr$q#a!o?dՏh6k)F&ūH DuX@2 ߫'"ޟQ:d&ȵXo=} ~ ͘C[5a*ǝ)O.7o[zМKZGx_S|0IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/mz.png0000644000175100001770000000174114614030313015026 0ustar00runnerdockerPNG  IHDRIDATxkY.m۶{׼mAm+(n9/$9g;x™oRgkB& #~!~ #QSņ )BagϷZUmīk Ķm8. ~K)jP`y i9](4`cYդ;gv|UӠɾPj+EyWAQn~W)zk4lmȀMUUP2eK}5]]25yx˶1.#8rA٪#:+~_xgyhp{U(-ŚR٧^OVN5]U{Uo^ܷIF77~*YYZ"UB A30wnj=P)t>..&a*0KLi?JILH&*G+;wN#` .Һk4QC#BUO 8*xPQ U $2! ?XO@cAhΝzBw k }G7lɒ+l%MǍWS*37VM(g\4^q//:M= Ʀ?krjl3 `Waw|MNmGrJVӺ Ir×4 Xm?~)NGi(i=p>浓g'h(,lGX$3%ME[n݊KL.XPL^ i^s̠W8Z_7 ?ë ѳ_dÒ'lm0VW8ٿ 5rs-T)ޕMzkw^j})mGR7[%BYhHR ,&7PwYRO&>VVUq9L9&E;۞KtCSΩ1 `h4r_Jx2e ||kɰ'aƌ$U 䄱Q|/g3%8. 23Ɲye<`/D2@SJʀɠA  ?0v ѫsϻve/ biĘ02jӦ`0e frz8 : %*#I7ʼ}"b$i),c^`2<0L";64*[3'!V^SV]z)Y9Ou"9rwRAs.o*>/7@oeIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ne.png0000644000175100001770000000161114614030313014776 0ustar00runnerdockerPNG  IHDRPIDATxHm۶mFam޵m۶m۶TM'uzvgް_Sڽ lJ@3"x"TRUU>~%%EgX,UKfd`Pc >>11) hV/<{س<`?zJKB@`axue/VnY>]|3>`Gzb>cZO}GFx]q{ftBIݐ$[ h+(+KHHJJMRۧu#ىղEؚ e3v~ Bݟ}e߼dsJˆz;4ҀG|^{(7=s{c{ هF>C{4y3y^W\S(+2dU+#"Ò x\vNg9t9`%0LW!7>lPKNXo-}ZoqJn"/-nOx_nF Ǐt޲nݞ=#4xTד~_]I@, 5珒0yI&l>2lX}}.p3Wp W~zxHdCpjh! (" )],_n#,$!r Ȥ__!w q&goϦ{.~=SIpy߷݆_ڨ]Љ'KۻuGP翮\O?(x;t ^>\Wk2AFraIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/nf.png0000644000175100001770000000200614614030313014776 0ustar00runnerdockerPNG  IHDRIDATxp-gm7mz{mm98of;S3o`6l-%R}"UM@L}=sKނR$-H!Y654'@\t= {S3lfuSS,=-x˺ e'-@0ry%OHˏ#?I@1)..bᢋn! + XE4WP l"N@>z㎋S,L%%W_-de 8kXDRSh=gypbS3hp o)3z&*rN(4?/# jU~0S__MFN&ZQ@7bn>'4a?q5y!zfFr=c-}?&|%]v-8y^}3~~ {Q4uIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ng.png0000644000175100001770000000132514614030313015002 0ustar00runnerdockerPNG  IHDRIDATxC\Kmsl}db۶mcmT3oFSN=I{ Ҵ' x]w' >3@aa>)) *Z:'@P]]0L&3cX靖.~R◁Mǒ7,oTE.緧L_~<{@ F#s"Ba&OZT3.;p!pXsX<ߴxq,@\mzz a)9@qh6'%_!Ys l7@R*ii_H@8iW^Ry pEzU˗mp"YzAq^$)o_}|KMNlu_Bm?u< {~l'BBwZ꫚,y,$`>{;x98KDF V㿠Lp;$y;]^ox4-" Z_c I9 x'0\~"9:4n &S[[[ulu+4toJ_(|c;_k_|W\]\ץ~#ZN mhq='$$&;U2^oY`Kz~/@;_n~ӱru>z}%2@s 4Р!:yp]<{6p婋[y{q#Q*8 wD,:%k GJ0\+m\7ϹO]6A>_帊z*X;߫ɽ֯/ -帊o8C`,U_DPqGqzzc<q @:a5_@='[sZ]BQ `7,"ń}!$Gwe%}';y`?,%0^z !˄:ȗ_Ga2@,D@@aJ ߚBQ"꟏ / 0(IBu G@WC׀TuAՏ/L ?++gZO]M5rGQu짞r͏W!u6פ6J%(0 DGG*EHRd NXsPZFCcj6p8`~.z=c"FɡtR!^F^W%áD"F:XF$I6qp8 PZ 9C!C5^/q#]!ڰ~H2]CYL4 tLs,E E..IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/no.png0000644000175100001770000000152714614030313015016 0ustar00runnerdockerPNG  IHDRIDATx]۶3m۶m۶mm~sN3Reʔ)rŚ$u?X/c1_n[[;66|Hhhjzxf_E->>[>2e +T˖wŮ~ VG<4^8bO&Oˋ~>@-em={K+_ϋ <[9g<p m:E^ڰشsK+''v_t|3hVƓxբG4=Pn*{6cOd5bSgGb,xyte_t$VViˎ˫B\l p+4Iϕ'O^RE._>58=޾kdkb+T_%0&P(h\= J$ɉ D_;Pbƍ#| uԮmfֻweR`G#"Z&Ǵ (W/| VjU8'> j=UW4A:tP"J_y[zQe!"lsH; r{%N!@_ȑz} uUV|&N ?Sŋ)#Z+vyUUb}w~#?͕R]b4ɛ0ul:45+ gDH-W&o?~V ? o9@FƓ0|K /ޖKu-~y^6k2,-)O q4]*W~0lϛ[{x\ ۆD` #-~Z/%wqke~c?T+8GLx5$; Ywjbzq!c¬(n#7t噹<@XMrx$رTh r3Y'aM@[{ v4ӹl{ImuNloV { mڤW?S.=0 wvШDdfjiiO1 Y-a 7+E!{N4ZQiu[,,6]179;qp&8:h9iE9aChЌ,}!Ϝ&As0%5<ɩSb܋wB;94X%:9ôfMo!WU{B̀zO 5SifVRoW1^XVsoS js FN?9g *@Enr*/w2psVGRSUa="3zD&V{A7+[W.\#GyA@rHN6 S&L?QO`-Ha}ypkܹʚ4ԩ_`j|cMg / 8&@ T̏񀽽M۶2 G. U? 0CirE_`8:>ZV|fNwI8 hm|/n]UA.He _ _IrEx]OAy i MM}Cu}q~Kl3eh+fTqy++U3u>Tvq5 -7oa&  @ )%%9 py9*ǎdH=zQ (;n9ϟ_~q=x..`L+Q$ /KtM}s ]v5}.]r8` 0K^?4խ}~uvU }mw(M}Rl}5= Z_7 nXٌyN>cee]}.~ػo <!`m;v\Smn_bZ LaہkNT]w*'{Ntmv'0>̯v~дٮa@n?1}}soCryٝZ0@v[O$$ԪUS*P@: qT:v lzo٦K,z#`Im_*g-2Zsg^<%'В |bŢ>x:%ϥ/%ϬX1^7MIʔiڴTwP 4{ XBRkm_L~k{W hH9W -[hѬYu:u23Op%`H]WǾgA.,gR&7TN?=-_wVV rZ2s$)߯ϑ=K8 x LO hK0\f߷٬,ױT2$OlVhZ5$vuzֺZ>oطQ+<.zy]{ ,4IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/nu.png0000644000175100001770000000171314614030313015021 0ustar00runnerdockerPNG  IHDRIDATx#[۶m۶m۶m۶mۼ%c_gwd*|c~dHq+*WVŢ?ܧzJK?B?pIfMwi2}Q Pć_\·[4ouAؗqݾaLO7U;V/rY^jU},kanҠYKQ1nfہWdЗUB|nz^X]-Ftj : vOZNycZ0HÎOI WRg'^Ǭ$>vͺ#=rqwK *=xW/&TdB+ q-=j- kRY% PU}pW'O X*U 宀EF %li!] `K dV2NN*Uċ0HPG X-`/6"5ɒG[EpZqtQ$~%XU5yrQU$p.g7=y [PQ|R@װ>>6AtcP=B-[~_SzFgziwv=A~?9O巑 ±<<n0 0 Ș)@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/nz.png0000644000175100001770000000240514614030313015025 0ustar00runnerdockerPNG  IHDRIDATxt\iq'e\Ij۶ֶ5nPn'kۻ$URۜ3Φsέ_>x>-41 ݹ8xtCKW2dz8#G>TQQϔĝ;\`H{w΅gB}L=o)hơ*-/Egb/è,eKoKm0:6wطop#Ο.ܽ*6iXT[a?{[OڣJiPi3߅Uj{L_|Z}͉݄zCf4: 6RA-u7.c =gpY`ƍ7RVb_)|au_OQCY\yw 266L) C=y|3;BxW (uGX^cx޽SSNLMCpQ ܠ:t0tw /As /OT:(gcZ9*HKҸ4e:[3x1<<2!. ]MĻ wMfG“uגD>XtPm/HEv6d 4N $.d Vi9-`tn^6BvC~Ly+d65 >fjfs`|H3ܜHvH@;Tߤj^{2C]͞ >_(O@y]]0x1CJlj90p8h5 IYBq\L7HWǫ umi0,WkZֵ07ɬl{T&{ғ v楞c6rpe :~4 #v\nn$yOOooRvc6 4˃.@4奾cqqW.DToRI ?;y`ҁIk̗__]VZ L4{:[K@?F `Vx/ڝd5 || `#nd{UtAJٿthc@͋ !A0hU})nYe$$ןH!q^pb+^Ɓ~FPȲx>7 8^<|V}=z8aL<7H/^\F:Od9ˈZ%pn5XGw&R%tRJh_23 p+0 0ny}96lAsŊլ #\L8jx___r4aL}ɋדD7alN $L!-?:mI}E[@4+Kuկ %VDQDԊt=u52E(n0ˋNr fLtIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pa.png0000644000175100001770000000231414614030313014775 0ustar00runnerdockerPNG  IHDRIDATxiNm;m۶mJz\U۶݆רV*ߓgn7.k}xg%|'QK:v(&d@"&I1["snqWg+<t:`G^p gӿrKOs'~m?3YW ڣ5z(>P< O-6p[?8g.R2T24 %Vu$r"8{vٍ4[-OVo?su6oD N>ENm):CBՔd`K.TdŀY/8$iS{{hPhl8O4O4B#%8[4gvoeМfޡo>jmzzu!6X>XD9$N`27zH!Ns*OVam |682-LWAv.u]=-mߚ_08]?Dѳ|t 赵2[A(' s{çpF>7߲nn9aB{sg: &q:sW(p:sE>\Mą$وpq`tM⃴cRkMC@3Ep* (jﭹY7XX00@DQ^W.'br?BÇGG)&z+zks'WsU4#"|z 2IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pe.png0000644000175100001770000000211014614030313014773 0ustar00runnerdockerPNG  IHDRIDATx|$I_f7kg۶m۶m۶m۶m=6}肗5ֈKd2N(92#I`&&W\ _|/)HmMObQXDr9:ɒo | ~ח~wοCFjkK0t@;_yƞ^,:zy adf0yΚXk ObFFؕwߘu™w0}X75;zޖ{Tqi-)o_ZK%_, 6[|`" b0'?r?p#or|ʎtn^. Yx8ˍ>~eC}*+8oiȧ/ F" OX*k>PǯL&#@ЈؤsR"@dS350)X*| p4 ҉sƍu떚@K) `[\nnB׻rqymVzDN\{u}ܗB,H$z3~+Y> zb~xVN4v쏩,[ߎ@2wbo 8&mK21'X@(!L|a؜HC-'? O?2Il„j1;QIO/ f7#b65wZM=|c=<*\@$`%'`,Z@$J`آJ)?\Qy^`7lxHp-8>[h͐]ww5$HSBS~N=\cfͥvD/qW]~Q OGc/(vIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pf.png0000644000175100001770000000163014614030313015002 0ustar00runnerdockerPNG  IHDR_IDATxI96g۶m۶1g۶Clmtj^wu_JTmVXY.(!*bL 512uJsK 2Ԃ\neӪ) $dΜy.Je2,L~geT: X`„BA}_cˎu0TT~pXiU_xR'/egwָʎ0a @\`ԑIY/qLROY Mx<;獍4w!C8pO}0/*PGeSama==nݿ>4{=ޟ˟O ̘;t$0>ncĉt6;hP F!HMfO^ѷǜM;Я#4OsfG$g+[@wRo9:ycĘ9Yo$VcxH*R|Tqq>n @dlBg:A ~c/qg*- rɊ3~/)-t[_sܢ5՞ZΓXB&h3|IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pg.png0000644000175100001770000000171314614030313015005 0ustar00runnerdockerPNG  IHDRIDATx#Y_:㙶Jֶmzw̵m66fսIٮ`?II -6DnnNWbj=#qM7W͟/h@)&+d99%d@\\< xk|yո\=bN}nv_=o%uܼp`\@ڜ[ρ~mjTUK~f}Q@}+R8qz%gơͩog} $K<\ [H<8Zи>:D#! #2m CE,'Hy8VzVr#Zd}*]mF!P:sU_r3Kz H %ʋʍv{ncnBf.?6V࿹Ii ;cڔuudOxd=PEQz6Pse=7/hJp:[hNʕ'v`RƓu̚+;ˇ>MmА)jjwTn9jwʀLQuUsZ$ժub4%{r ?zUFbj$F9€LJm}j O:wDj֜L&MZ-STɀ 3￟=_8d g6@~Jݻue֤Uˀp'a]̼i~cAz<3HgҩС-XQQ23(0 1[j4ѢS &'0cQIπV̀Pf ft2h֮j]Z>BB[_SZڤĨ|M}jomU^:wZc$`^c;IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pk.png0000644000175100001770000000175314614030313015015 0ustar00runnerdockerPNG  IHDRIDATxHk۶m۶m{ֶ6Ƕ{lٺ[UI 8yy 'W_mT"Dh-D8']]hii"@yyHKBW9^yqT^?:xW>zrΖ5iw=]qy^]}ԳyYڱڷY.,,*x습օ~f{O0ayፖ/95KN&\uˤ :nji^-v/lW/'mx?@k D`3?yGwvV fvHX=s`/: W7ykw^ \> zwW \;[?;Uy&-ceNox ڻ[$`ĺN8)7NrWhkx|Ґ@U`Y][ t+ }dU`%M6Hˉya!G,8s٢ >XlﴮmKygw'E@Iuc]_|_髯ҥK\Vz=+Y=K$ӲRhoJ jt=$` u<$B ?J恒%K(ViKN$`#sDT&lpAJNTHPJJwEMpڷ_ffM3P"_zAHEƑz\ZG_bϔџ6FZYvj,e/P;.jsZ1 0 GIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pm.png0000644000175100001770000000240614614030313015013 0ustar00runnerdockerPNG  IHDRIDATxtf?ԶڶmFTVwwM_}/[W' t EyzSQĭ[2r咀OS*5UO'^*M Љ^@BBRRr2L< `ؑEM?}KC2}7/ C'[}fq`pA߅Q׆Q>b΂,+nk/B..DH/\yW^(@| C69 8 yYe Ԝku&߹ ,L1zW}|M@Sz7d]ի/Y JY|^~X_G%|=V!6\`9Sk]CWy:ܯfMt]b^sQt_:v BvE3", ǿT/w^ U-(/YڵGB9 asDoh-8g&j5۔]cjRo7=`@BˡfaMBJjC\խF‚crYm4JyzMq/2R?v nver"fi*ͼߐZo6=G&7Y:yt[uУ_zb{I?weIXk*sfݳh#Iw/ rpy|xp^^DY?|u~X`N`Hv ~|@'a0ʙ󙃛ʝ[/ oT֭Oa"57L{L`'8W_NJճ9 0R2mpo (ky>QJho_ -`! ?{}U mETz}"3 /`'|jk')UJ] pRF2 E#x4/݅) p nm̤כ`̔Nڠ~:w~%N{L/CeJv~ ˤ\OMOgΜڢOO9)ѽ'>ZM򀡚IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pn.png0000644000175100001770000000240114614030313015007 0ustar00runnerdockerPNG  IHDRIDATx[[msP۶mfP#m;ImwTfzwY≯O/T99~io_}~SN+pYEUy]O~^/M}sB/n"L\48|o[5릆KOM>۴zJz.8v? ~ׯ7n<{#3..{v\]y>5zfطF |.}WLW O|G_0[bBM螙h Ds޳a=~7sY`{՗G_z 6tw8b!H-Wzo&M۷rW5U2*׭j^H_؍znm6y\@ӎu.Ҵl08aBM- B?.تIJ0723CyJas{rgjpVRmT}KŁ#j|gl h{.pf@@PЉL˽w>92f9DglZcwBL{܅[  Tol9 M+Ri2>+lcKHxv'wibQNsfzw(uce-Tz$Vky iS= Hj6GξE͐{s]7oƏO/7 ybri3gd-dUC- cT#Ǫg/dXnǰnA3٘Nom=. :gb[Awp8:/0a%lؔB- `k;_6VU;_@*iE*RT"D(-Zrp\0CAQu>XwpT@22f|K)=mԩ˕K$Ls0@@?_}$`/|TJʔ9rpD!_z~?W-/"4킀3bZit/xv].*\ 85hl`-8OE h8ǔѢ9;W]'vSɬ?^С7WW7+_NLxIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pr.png0000644000175100001770000000212314614030313015014 0ustar00runnerdockerPNG  IHDRIDATxp\mm6knj۶mĶOߞS7eI=3$J} o@jH q+  99RSVR#LP(D8 _Fbn4 Ce.jykr7^U.X_㸅[p܀+LYOSs>ǁ>O>jgB ;p3v(.PXx Lm͕+w.s88;ٲxkg(e.b)ci/U)UV)*鬡JS kiݖ I"\x>.NB-PP5س}ϾDK`hu>+k&_{w`WQz D]iĺweJ77qSf [\H.W*q'q Y@ Y5zŁw7O][W^񃻀E҃QY ɴi@ft]X3XYnn?'OJuc$@N>2JC;lSD?n$+P>MY9P67YUW}-:!_,_,\Ʀ7cf5E{ &5))`"; Iyi@G&eJ-$RV³$TNoRjѢlV[ALp0+5%^eJ_ ϫk׎kӶG#Qs0h??7b,%@ ^+iOx{{yyx|=cgW]IOAiDx`."E7W_!55%@4NWsmh欈JKx>_3!گ)u;wVGum}ǷRzXXoۢpK5YzMs} rN;IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ps.png0000644000175100001770000000135314614030313015021 0ustar00runnerdockerPNG  IHDRIDATx\QmێFUPFmmvZ{gfm/=19Pµjա%@NN'I*U\9!A- *`0+[VaueUM#1@n ?|Ꜽ –ggrs5LJxP:{-XuuUi?:Je֯_|3^B#l1@^^o4Z@.< }x^x|}C}i` «.k /[*uaz!DJb܅.. WMyzJ( ը{ҤBU|}%O&K,@HWXG@BE 37o>]eڴ zF 0!,6]?D?Eg 3n*. :dȠAgTѣ<1C `/a{pA72`q݈'P!@"kmlgAL5 %{%!XK{@_OXV] 1ʶBibmԉMd~^smٞۚuvFAsocn0 0 sUhIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pt.png0000644000175100001770000000173114614030313015022 0ustar00runnerdockerPNG  IHDRIDATx@Զm۶m۶m۶m۶mJueڻN7yʗ74}p£ׯ}-<}7nJ[%Yɽ޼Mu'Oy .]|cC6X۫ VTqcvkoC,.\OqgԃF2o3`ݓNȪ LY:܀wRVw;tWDӽ7o_ }gϾq`RMfP…_ jm|NL9uۧ@u%km蜸t9|B;g 0csrnꅕ/ˢsZa}w6H%wB O*1`^wGx˗]F,\jOn ^u}NFz8 [;$6)0;4__XiV 5 E5DUoLܪQ+l<r+my% & !nJnb[:0]ۃݻ 1`dQ9{L<z}\$ 9 A<\xX1`Cì"!p$g юD@ҏ{|GrڂgKݺV/]~ϱjUj/gjVDCrljc[<}_/_#$>uzaQ+v>IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/pw.png0000644000175100001770000000175014614030313015026 0ustar00runnerdockerPNG  IHDRIDATxp$[^۶m۶mmZ۶2=qz'5ǯdf=] ]Oڇ0.d]ðlBaQQ|}PTgWDwVnV,+c:j.*3M51rLz{nnCDE9@t f-ˈ(ys'vs%axn: m2l'3r r}^I-`mh;,0TYr431T-G;.F ;c{_9 nSO\smv`wdcj3@}~!4 V^9khfMmt>>@;C6Yˍ{/<~L to튪}3 'V_xhfjJ" =ժUUlI0 ?3V_o˕͵"c o˯Qu1K>KVBn ]OZWB6^FuHB r񢪀+zVzFI'0(YӰaxʀ"w x_5|>帵?; HMG)@ӦM4j4rdMF`|(uo xCÑ4o:HCAΝ pCUׄ}jzoJ ҳV@z0`"m-0s׊篣ga>n~֥\ y ԥaE90Bh$İb BKH@hYY0>y,:;Ύ4O{7PGE aQpDppIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/py.png0000644000175100001770000000221314614030313015023 0ustar00runnerdockerPNG  IHDRRIDATxxY3mϢHVmLXۮQV~{r'Zo>sn3#!r|wh2ɯXIɯ `:.r\;X.pJ:ePwk5s~Qsߗ -W]Ul5w9{pRL קW .{`/ĆgN-}sp/wPiS{1c], Hr>PA#Ծ x iТ!)Nu ׿Ϝ^`W:p'TK.z#0pG\;䮞M}/Cn cV13ԋ\1;re ) `7ErDf&2nO'z`Wڕ[F "v!$גWh;z=[cd%yCdKurmW޿%hL avi^Z|„D>.  d"%II88O8Md#2BH j WW;oɌݞ A~<^c=R+hV74&&2 [1u- 0 _|.+r㘺1q8Z 테3 1 iW2jFr g)S$ͿuuyPМ9>הC%%ys_y>iuky&w^ʠ͛Z6߫tK4AFt?L{IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/qa.png0000644000175100001770000000130614614030313014776 0ustar00runnerdockerPNG  IHDRIDATxl-i[۶mAphm#Zۻ6/j۝̛N2śg|FݝuYg!E%pSqf Np K2%w98h* ֖Vp9\dH<E,$u\O;>o"2. /Tn? i8@>B^k)5P3Gғw]_P͛K8oL}FDOm#Dӄ0H(Oi>IdIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/re.png0000644000175100001770000000111014614030313014774 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`IDATxl$ol۶F {ifpgڶ'soY\MOU:t`oRU4o!! 8WM%%q$ 99ET'@:|~?Q~WοN\.۽NrkNz(/\ 0WMVoqmdJqe q!~l Q ^?>tV =@A1N7IRrr y M?W>nXWi$+oJᾢ}I$|)vO&XHAMp o?L&,? L>ERpٳf͘txiܸtp `#8ܹAKӦED4~|"3ٯ׵$2RFMBL-O(< -dV}F%`9!<.&FװVU:5V Zz?wcpr 34rnA\Çq\0LQBԨ^=_WTݭ[h"DEE!::cHmD$''`0J*ڿ-Ԯ٫Bo޼e˖!66 CHHkիWcjH=RFVe˖}s \xϟǹspi9sF߅ԷD-{޽^fڵ<[񁯯ϩjk{nӧOFbL oD?Æ_4$?)BJ+.PR:mIvrv;Sc7JuH/IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ru.png0000644000175100001770000000134714614030313015030 0ustar00runnerdockerPNG  IHDRIDATx\w͋f#Npm۶mknoɹn3|H{/w!uHG$DCJNN& P%Y):}>ee9x^ uϝFO:O\n7: .θ1@eqkvju8埓C uWp8 72/4V^;]E@ǻ^p@,4xqpŌ˝n<%3&oŊ/}Vr$D7%J.ݸJkV v˒THBOZ^*V csY.]JY&}B𘀲ԩdmZJJڷ/)(Fv0iL!u]^9!T=HEBzQff(x@}pZwZVI+(" zAOH JpFݾt$z0<f33^zPGW/3eb]{T)kYq]-7_7OˋNr ^3uPIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/rw.png0000644000175100001770000000157214614030313015032 0ustar00runnerdockerPNG  IHDRAIDATx[~_1mbضmvR׶m_bЛ.d?$>ٸqe:zBCπL+DRj """#KֺBmDZǴ'2gV޾޿Y~Qg@1@бɏVZl|ԨzuRp^t xGVsH64S4mڣ< d@|,_YUkiH~L3) H`^!WL XLվޮU 0Uz4}6ui~k̡= 31ZVB+*"h8*O-+N,ӼM#yyiBa$`F7T_5IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sa.png0000644000175100001770000000171114614030313015000 0ustar00runnerdockerPNG  IHDRIDATxcHj۶m۶m۶m۶a۶ͪ=]O]Q%ߑ_lQam I@JX5<|x+W*kU%X^UAzzq8oV[|imj)fV[NvÇrG̅ DjB ( ݻOr`; GKuh@XGJ,IÁ_oC W#o1oaSR'f`}~rwTN $9`R@#>=k@K'*T:(~@Rs-6|_[\u<~v{. 7bGev:7k.kcW^m1?1 p,G4e _dvn@œ\٦O̘m:'qrfx8WJ"B$U5{ajwC~$ϕ,Yϓ'"ER|Ud#%.Ҥ-ZDIҤIN0np q?@*T(;J,QXm*yys#"` XH>^IIާ.1HQHsQXM~${#k@ۿ1huE2{$__OS "I9I;is'SdGО t~:Ƭ %t3f͖M7k<_>{ו-7Q4^^tӼ4!0 0 1ve5IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sb.png0000644000175100001770000000226214614030313015003 0ustar00runnerdockerPNG  IHDRyIDATxt\kXmwRۘԶm9Iֶm6b6f'Y4<~D'?1ezN3F6e9=2O0T.'@bbA&rB{ٸ{\V~̯>z\Ϲ^D`N9*50L=yR] ÈX@Z&Mjl39u) >LWr{ǜVw7kqe24j3QNnpXK6lA2da};k#Rˏ]m/j3fv4;=ܤ`[}jK+ k$ [g6- J<|XhJabYFD`7- \um!n0R wG4/@>>`Æ[1xxnco0mǡ,bç; g0QFc^^Fz x"sPUT5bEYy)TAU8_\)j]EyC6if*Bʮ ~ [8ƪrG'Aw/ |!0Sz `ERcUuI]V+T.iUY㌏c]~n,`mxѱPgN҃O6b<,;R/1#+*<8h|m⶞^kZN0Զ.ip7o||n{ { +nLºk+HZ*UE{ch<3ɸ.X ;0ûۏdoNN#£.w[==vs q<_baAԁ㋦w.Mʔ)t"ݘQh=0yָR'[cL}fϑ{n ]w+x2ͫls?C;4 9˷b3 qCoqK@vps;xԩtѣg.\+9:=#=3{Z\ŎY+Ve]J L0Yn Hr~@ 2tcS {+Pc0T`I?VR[&6wyy78`6QoW<)#?x׋V><>PZwݭlm#mʺ3?j ?Gn.}b V}0i PK /׉+ׄ|=q՘#+waWϏ>8}E]AtV}wd/Mr#~>,x#߭)Ԍf-.FkGkg}Zi>T/*W~K:P5~|<W_hZyA’,WY-xѫvv!"$%f'Snpg@xsY2 ,VN1sެ}0Spl^l\|_WH $=ӪUB0Me5VdD_7} H׮W}0meYqp#]H?GF' 0bD?%ㆁ oRG" pWHN/ ;>3~L%@( DoklL5#y;߅3\5󶷊.䜛=@W4ȊC[2<}}ӯ4sdT,u',}i0"3@kOM@3ӷ=eۛ6ߡw@zW.䜛=aL3@wwiiyyUp;o=L_"R?>>km6[melnk<"a5~t]QIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sg.png0000644000175100001770000000151114614030313015004 0ustar00runnerdockerPNG  IHDRIDATxp5WmcgTwx;Q2mkPm0mjǶ1v>l[ ڙ]HWXݙv"#ӓkEk`j:::;ۯK.QzkڭiҪ|T(V鵸|Ǧ`(y{[[^ijO<[MHݿWjhkj~4ȃqIϤn>.xbi$)Ğ9$ cG:R|OYG˲d`?I'sR_p絝,{]s6p@<^Ωp Im$R9|9Z(TR,kxɩ{Aw$OBv(9RR7k6-/ p7py7 ǟzI2L@34PK@N9lc R߯o;)u=7H7p+yǾ&r{%wy} ]Y gv?B]K|L=Hg$-ox~g?X<ᄋ\Qwuih^^t{ xYIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sh.png0000644000175100001770000000223714614030313015013 0ustar00runnerdockerPNG  IHDRfIDATxxjvcֶmɦm۶m7m{nϳ5ΧM|#Oًu5a2 p׫ߪxNu-=z k \~CQUkZ/@bbbc!R_k]q֡0.l]pؤ&sNʜcϭ?3Oqy[SЋ^!5 Tmm(U5!^!22**:ģGǏ?H 耱E!&v6ػ:Vd 9UbK8y@yV3!NJ]CK!~_A4au#h!ZYc45 vp9n.,{?p{z-'ۭv orOлs|Gq!i]!! RUCb5 23NUFܛ KCһn,0`nh4¤)3!pcG/˒d p\+:0\.jk]mH061 IՀ.toIttl;dz`mw68), 6sL6 4x ۟a$wv?e[Rù/+ջ Ԁ -__ >'OkbܠMnUjZV8MVXMa좚TyLu/حtHU/q'O2eʨď}K s ]\n9pFF>׷WŐbCy#-.Z0ו47/xBtJ@ ϞQ2܇ZϪ4\|21cJ.%dZhժGD pk U!vo!6|$@qV-ޫl(_\2e:w.,*E@eXIDnl8E{D;HŊ_)-*UnIxGxEWV{_Fiܘ"G8W>y7 QaI0 byg`n7Lv ݦ. /ŕ9B'>[>2e +T˖wŮ~ VG<4^8bO&Oˋ~>@-em={K+_ϋ <[9g<p m:E^ڰشsK+''v_t|3hVƓxբG4=Pn*{6cOd5bSgGb,xyte_t$VViˎ˫B\l p+4Iϕ'O^RE._>58=޾kdkb+T_%0&P(h\= J$ɉ D_;Pbƍ#| uԮmfֻweR`G#"Z&Ǵ (W/| VjU8'> j=UW4A:tP"J_y[zQe!"lsH; r{%N!@_ȑz} uUV|&N ?Sŋ)#Z+vyUU]t'ٞdxnwcϏ؝W_qM 9qӸ17)^xTkk/q޼2s?.v8fz{u:[dHwity6Xc#)b=츪wv%V~~گC{+ X||]ޏ[ b2@ZBl,Hιvygtsrwu]\7o޾}=G 8^{aݍ#!o !f7W~ve;~[Hi^}7] !̋•4x2"m7-aG\zs!K0gɲ.W`S?=6mY`e/Tx휝q ,cwͯ4n4\W0.}tiTXJ˗g"`IpRo'`=I$cRʛ7}\& @oƪk՗A H^[#u#ك NۃB՚om)ѣlɮ_=$j^_n0~WWe dIIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sl.png0000644000175100001770000000111714614030313015013 0ustar00runnerdockerPNG  IHDRw=IDATxZqǫ3vp-Y00`rU! DWq{vw[wݻ޶aS۲X,G,,aZU0as_fOp6YBQ9(lH!_űԧ_vKׂ+ /(>hj -M 5g+1G|x ~Mu%hF\8wv6LƢ=* =~^wvm|ow L hNjj*$ (l֒@^\d2AP@*B:&G2\\SvcblX Dx|ޘLR JFJ"cy9vtnl6jE%'&>N*}{EQr$1l65  .B% .zp8 ] Xd 0.yR :W2cp0=JԱ&I0 0 :R IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sm.png0000644000175100001770000000167214614030313015022 0ustar00runnerdockerPNG  IHDRIDATxY^۶m۶mmڶf3MΩJ#/Nջ3K˅cXF+_(_*ui8q)>feѣG $)tXMRyr<@>*wݻO}a=z3P0*]G"Ub1cfqjIAwL|ʴy2z c<5'e;08׫?@UXST()X-;ހw@я;j\m|ϪDpn;oqxer K`zFѴ986}cn}7绗:A>'x7eݷ~\Vi+l?j[Xxk^2ɰWh՜e,WτUᴻk^ʹ3_{7ktx`jc=Ǝj- +*)޸824m lhk6To+M']]4[]!]_-n_=}Zōof5v@i^5жmc%hk) jf}vN]wŬS.h{ (-A_Ͽ!@/8 T<{n瞻fiӆ|)S <-R+,@s o%` t"g-5ȱV! H˂$$8w=R}x@+?E|!w~쬮SܨЍ7N%.~7V&hp>|}Yix=kTtu_jp+1 0 āIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sn.png0000644000175100001770000000152314614030313015016 0ustar00runnerdockerPNG  IHDRIDATxJ<۶m<۶m۶msñ֪'[~̦6ʈlUVY ρ5HbWx]V#cA"466YZbaOA s>ѭx^` Yz{B02 G/Hc[Κ>1)n){t 8RUUQ{;iE/H}juYN8[vTc]?71cKi?Kh¾>[x^)^LS_W?MV7 JcHw`dm]-c:p?Rؘ.TcBvOrBg=#]Kdz]mw{챻eM @y|rslfYfQp )׷F4xeϵsUWMFO{~y=UKc~J=C:Kǜ9CGAI!c H' >2ȁ8(l!r(&?_кmSO56 $Z heXz')OQ}z&p9@v]o :B?'mSnNY:k/s?w덺FYq3o *IbmIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/so.png0000644000175100001770000000133214614030313015015 0ustar00runnerdockerPNG  IHDRIDATxC]m3Il{ޓ؞ƶF5m!j㼮uwէ+c|osQg[. eR R.s> M75@RRF[ΉqO~`865B7˽'z\xrs <1hY8+9 b˺ g ;}Fz^Z\$5g._6͌9+;W*@,uYk `^zTO>k<{_yΈ.+$`7nD`hkp/X.?k>Ȉ,,GJ$%^T%e5_}U89qBǎ8>B>q|Do*EŊ4~VӦM^e` f`&;=/`!.,u{Pj**u>L#&DL!$яg`+wՋTTи?$H%%\ y!Yj Ҵ,$y;qF`)$z%xG?8LN>5`;im0#ߔш^|R2<=v_rH< uMIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sr.png0000644000175100001770000000146614614030313015030 0ustar00runnerdockerPNG  IHDRIDATxpIggF6m۶m۶m lϹ+=5Wu=V`e.nYfjX# "T8?-hgq  x5lX̙1b a /h gI`)QJ3&KhFB:x^-&UXW'z#n&XH PPQ72332-a9sj8%w TdIa,_M'7$Zv}ʼnlA`y DT#6H`58TO'O4b},v"qoZ>BG5%'MX}|<-vq&5Jaܠ{ͺ behĀ˶IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ss.png0000644000175100001770000000124714614030313015026 0ustar00runnerdockerPNG  IHDRw=nIDATxA/j۶mvնm۶kTN2׬uo<WJՏOCVK.JT%x#))Eg~G|)0Yh8j6իdOėdE7+;T@]~q<%y;B1!#; n`{#PsL9 /3 łG0i& yE<>Yod,"H.ҮzWqŊUX|yID4^s/Lel6Zjhn,Q"kŊI &&ALt4#22/L&TTIr: *US˔)޽{8q֯_ 6Ȱuxmۆ;v`0\r A]5ɅjU+*Uw̙3شiVXիWcʕfxېM _/Aˤ:a߃ qX'WLN(CVJ0h;@ĉ%mL6{7#~38sj~ 5_.#^q҂ \/4LS?| }88pW)xWK+MLi{J<^n fo.koϹ#Y׽ݝo?zjժZc"ta=QcǀK|GVŽY|x ';xՎ9xb?Ӵ*T(5jT(R矋OG R|%JhP.^|ŀ&y`V%~xPv6mRѴi&YӢFSx; u~z&$k/ihѠAHFIH &7$R[k;R=4B1 b"J'{!^LDǺq}Flf϶lgd}B_cvٲ+U]kתֿO5sO.THټ. 7`lv;ap`Bv@eNhSlImSf9V䖫6ɷDQ[qFxg5-hJJ~Mn 4{v^  n~!b6 n1*Uߢv~8 n*xuTfV W)7zm먛̝ X> Ɂ%^>7 <^3.srS1wڍ@T텐~8,L)폿 =V }Vo;xg>1N<@eeVݞ GV7U.D-K_Zu0>2uע³'S?X#=iOUnʢu7Sks$5=~Z)$.d$& O..P{3¬>|ۉ^Zmv|olذM;1Y Gg}zwǧuOiuu>;LwvQ~>y $IyN>I.@$rjxh52kaD&apf {dÆ}F3Icw x1G0~ma{ 01`,̹0u)&9Q_"guݭ΀@cAO a?)IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sy.png0000644000175100001770000000132514614030313015031 0ustar00runnerdockerPNG  IHDRIDATxOm۶aԶmqҠڶk]ͼν|dڭ;;ho ӴցH DO!b_y)<& ))Ynݺ-ɔer']x|>x5iF͛ C`Bv0CjP tY iI˞i~S2BgJ;NQpY@7TM{Rp_;#%~t`};OjB, y~B ?&~*Ç1|8&zcqj?!i0諥'@(THa)U*#u`"YuK]ۥdּ2d9bŊJ2#3ٳ2 8}Ze')'$;'$5l '˗fm/k׭[I2%`!N}vW&*PSR*WTBKŊ}{,!`s Mں FQ,RjJRr wp\!"y]jt(ҼL >[MzqL m{ǒCL X X먉F80OnSVmeVT%Ju]zrw!^9qS]4!0 0 vV;IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/sz.png0000644000175100001770000000231614614030313015033 0ustar00runnerdockerPNG  IHDRIDATxtmmNm۶m;vR۶mUl'gn{k=s>w$#eL߾#gel(m My* u|I'O1@TT4d"-GGU@`>~AA!!>}mxl6%27䑲9ɚ2d٘0rMdC'/}xj`{ <}i# Okϭ1iA>IcrUv&uƫLԩ}he꜁Be^IȚ8|Z,ATh몧fLR 7eDM -.볿y8p(ΚvԿʮf[d/:bNGi b@@2 fe-$h;X 0i?\#P煜ژv*4rA@~w):w s~uX`cusk>3Ȧ~0[/ YpphhD +; l4 D^k[smlsh@Vvd噕c /5]-r9ZņYɭ`AF;Ѻe=F6/~$ʏrp ptY:=# &а#_8B`@1`ydx"=U{P.+z1` rnG sxJD\Bz('j3M]}|5\}W5]Rsm{drw;7:8L.};\}+e.w|7f#F.WU@WV(TH Ixy #Ɍn Ȯ/Sb=F+&.QhGC~4<2Xʨ_HǕ_k @NdP_gO5Z ,gXzze pn2 իG6n\!1märKU: -[ !# z>9Qsd& `H_?Qyf `hCB?|}*,}&O+?S .p W!TVKՕ/t?nK5J Hmy_ӮGE-URxIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tc.png0000644000175100001770000000231614614030313015005 0ustar00runnerdockerPNG  IHDRIDATxim۶OmEvR۶m۶z7͙g4Lyk'zK`Q&x{5w5@B! <.k ;:?j}b8|`U)`0khԈ7%i_1:? 'm+m+5Umckh!J8w.] ɓR86pR>p޹zp/{nyo FV: wmӲlzĿmH#uZ@Թ T߯LH88Z<}5[+on/P^m=uV3:[4GllFe8r&EN5tޙ0c. ]rs@q9`*BI5EgmKCPk&ԞU<ԝV> yG?{VhCۼ[Cr/Ch6waIy כy:0>pgWB=.!y0 tZ@24 zب(Dw!^/p+ϮbL%M>1OA= nX,ǿv zG@˩hLKQEVɣj CV#j%-GmZ&Iaо+uj)fB.S㤎m=jYD !wq=00͛Oް_ \裚DO($t#S0%t}RMd술.VXx|dypy$I+"2@ʱcRqV{HzPqxH+ <_(ڛMFRt͚ɅqOB#o.n (ࢀ9r!c ҥR%$Th 0HX[oOXdrHZ%M|  8+M?5!EhaP]7ŷ5=D & &xzEV@5{۬ߧ-?u\5kj/cl̘f3Hq}d\?zyi g]y]ku E|e_D<IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/td.png0000644000175100001770000000125714614030313015011 0ustar00runnerdockerPNG  IHDRvIDATxO۬mvFQm7m#통ٶ7tWٳiIK_r徧5u@Bd^ UxyyK$+eVo\y?zbZX} e 9zsk׺5UdTP]8Cu\d6?Pxx.H}tT/huխ݁]?wS i&US=[ Ul(@/_BrHj(?B.ӳW/ZV6#!%+d&-Z_e Kӂ^%s[٧'Sj"% W-[H?T2dҤƤ"`+Y-dTzh?XLie _J!`< Ljo>ǾPcՏ̙_b)ժUUkR'9r5ʼe4zaQ\ @R9IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tf.png0000644000175100001770000000124714614030313015012 0ustar00runnerdockerPNG  IHDRw=nIDATxb\`%: mEj۶qm۶vX]l;0M1|ú'Mi[+xkȹ"gg,ANVV~ph @X'HL%SgZ fnP+9Zw3QkrX\ pXȯ F@<N]9D$e @cFDŽ#;ﮩ,2bд74{yS+iߘ`x&+7e~"R)  xch,m-s֭M2<%ͿdAͰjݻwjlTT0B(B(!!AAA tFAyB]l1y*-- ϟ?ǹspy?{yLWPTd AD;{Qׯ_ŋ8~8N:'N[qߺp>|??? ]9ͭ"%% Cll,-nYĒN 6'&&3>}$Hj׮۷7s:tG1<(c̝; e-AWC@`&'*dBKB;Bg΢mt6"Z$+bZڡ:r43[IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tg.png0000644000175100001770000000164614614030313015016 0ustar00runnerdockerPNG  IHDRmIDATxp,Yl۶WX*m۶m-<Ŷٹ߻{P~5sNѦMg y t )^)C=#Q22Q8EU ֘yxzĝp%UcPUNnv'~NqnedpL"s5J_-sDb Pl =n{ +pK?+zA|l^~3g5\@A+|H j@Iza([Ǒs6N|G&tt/p)w uzSkV(x ˏzONt?.tn:ž5\ +z##?p'>BƵonƺ{.\KM#=G2{ȹgW C)v /8{MB7svBwˀuk٫^p~Gƍt"BnFR(7q'#e~gKkV7s0̹z 9 >}fPʎl/Ut nV*¯$9߀"3g(rEM&H"k^"eZqE_?&op ,YbWN̝;gάY;Q08 x xgvl;+BTfXz$p'`{)qMkV9Xу #L$ ^ED'n!{{?|JTiUWx궀ْzn*[_Sf5;jqJEyIqُmF۫mѠ}az!hBa$`][\.IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/th.png0000644000175100001770000000126214614030313015011 0ustar00runnerdockerPNG  IHDRyIDATxAm۶ݠFXqR۶6vm۶qly:Nd}%#G5]@>˜˘%y=c !!/jObvcٹϟ-U~c&HHp\1@dXr2@B9EsSք<* Os1_ -* V= XmM@15*c'u {7?* XNmP!y`X0ή{ϫ*Q׫W+U89>u083^ +Ӽy3lܠAF5$ICFĨܾv%~|"@c:ur) [jբСz"p; {_AOAڶ9׬YϞuHvv8>=5wfW {kň'B~% Z|, ]H|b,%v/"Fg`810n} fg|P'4mZXD+WQCgخo@z=ZWKm%Jq:a$`)c%.IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tj.png0000644000175100001770000000146714614030313015022 0ustar00runnerdockerPNG  IHDRIDATxpdKymͳm۶mlwKkضfns:骎_}O`5kV$W^g^D _!*ܼ(((bIVꯅê~6 {t? USUT=[ٵnw8Hm0\xЧ1GSz=}9W FP=YLj%z=Bܩ8 7|ƽ+wpo=DqՇz9@}g.m ]! "1l1_'u!~יa@J`Utv v!:֗ #ϕ9窫|e'OTy__v<@\\? aa!!^-yyut7|D76$y}o,# ݃KAAg;[ Ií/Am˪"BLK }OIҳOsΎ4O{7PGE aQ߬ySumIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tk.png0000644000175100001770000000210314614030313015007 0ustar00runnerdockerPNG  IHDR IDATx[U۶m۶m۶m3m{<ͳgKIɱwz#B XB #L3䄐4=ehסx''<}LөOt/@~q??G?.?L0ÐLC2]LW_qL4yБ0gRN}smyνwˆ_X 0 (B}}yy+*22D"eDE~D=Oj|q޵  ,S|%, _D /P&gD X?PI4-Ee.xwPlj#ۑksVN PJ`g{0uq(0p]:L/rٶmw~ζӬ7(ofN'1 0 "B;G+IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tm.png0000644000175100001770000000173014614030313015016 0ustar00runnerdockerPNG  IHDRIDATxp$yڈLζmfmpmE'YTy{IT5ܢP@#jՆB氲];]o05u,5|%v{<0g9&w>]|쌗! o e"էrA#kv|, {nC޻bv"l{mӆGC= VSJWJUmM mq-0vPp{-UV~ 5vYf_~8~2\|7s/!`>`q] Jnx|(Y?{ɗ+ZOxX=< "~,Q*Fk*\@-.g^ nH g=BgE,P'5DM54T<!k|׬9^I~J^ p^Цp_o8RD3YsF#i{64kuaG,Wߞ9f9{b@2xi60L|""<..5P7hyypsDe f)`u|ک 4ж/>"U3O5?_Bv8*?JÆ :x 7,ML0E$a^𞀟y" uV8vlre[ְV.t}DxDzTQi%?]z_-{5#S_);wGc j'$[<\ƿF7"¼hlAr u<SIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tn.png0000644000175100001770000000135714614030313015024 0ustar00runnerdockerPNG  IHDRIDATxpl|f1쨣m۶mgm۶v}6d̤~+)sٲZhLWO}Ho޼b@ll xJ]U|HD`eP Ef߱7o9۷t!c"ܵb^LmեUjx:o&r,-=+D\s}+SN=8*/:o{g@3t;'/Gm:;ሎV[j: P'͙4jЪAT|8>BEǏ;uT}~#FPs/Ͻ<߁wʕ+&D1Sr~~Uy1UWP p^bW}2B{$Wd9L?U-[2Eyƀ ǀ̨}.3׷>)3> PfR-&MU~~߿?ef,dtb f^w`fJAdUXXxx9cf d[}$"B%)]D 1#XŽdw42vbF21[7v{Gb?G_/3hQJi-2jl7Wy\~^F+yP<׸!hBa$`pRpuIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/to.png0000644000175100001770000000151414614030313015020 0ustar00runnerdockerPNG  IHDRIDATx-G;xzXŶYUKm*Wl[\m{O?S}1{LoU?#ml#=ۓNSq6::''@ww' @CCؐXOE&&|X E~]O=⯦}5MFnΡNj+k+3g|1C?D?/ϯEۢ .{ogA-?nb]:#=r-~eo/ttXJgH$oﺝwս╷^r-ZuWnO[6mYJO)/«"UDTި6ko~ 3f\؉[_v"5o^  _R,n-$)bHX PBv[DeD ^8ñǞ~zqVB I?D? L7{NylN;tR!?lo1C p/3j?Jw !exCqx3~&;Ӟs39058N^$DM#Z_CkT_G~o M۟{$p I r?qB]{/3zJֹmBg~l{z3~{޼A3rz_0H(fɹyCIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tp.png0000644000175100001770000000155314614030313015024 0ustar00runnerdockerPNG  IHDR2IDATx,Gkڱm۶Al۶Ķڶ;uSuk{'w-SoKcN2gA,˴"e|-e"'$:"@}}hllR(+⹡# @(ugGο L@ XOz#[F [jG (+m Acv;cux9$$2n҇Nn$rرMοTgU+w?tU Mi.E* ؕzƲ\0R  õc'πM6ݴXuYkOHzxt3kc`Midh,rB}}yy+*22D"eDE~D=Oj|q޵  ,S|%, _D /P&gD X?PI4-Ee.xwPlj#ۑksVN PJ`g{0uq(0p]:L/rٶmw~ζӬ7(ofN'1 0 "B;G+IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tr.png0000644000175100001770000000142314614030313015022 0ustar00runnerdockerPNG  IHDRIDATx,Y۶m3ڶm6dmkl^=VJMԴR.2^{21IR&+c#K S22O0Tzƍ0V XszѷM;>tMy]lXfi:J-;d]-_:_|g{658X] pX=@Ro慯_O=sOf}%5_KMOxd"5|08 O?S.WWΏɏ~P9h08il[>yjPyWH%I>{3//WbF= 1!B2IRu F[wQ 7j֯K/53 /!Ne%-8>~?پ}t19 Ӫ鏫_8d (e2@K˪ e2<̀;pbmm?Ā7R_2H;m0À?~eO 6^sպdp$i lLĄWսkp=~5L 8m63Z[ G]RW V~ߔTYYJdZyEE궱zynT~PO﫯l y!قIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tt.png0000644000175100001770000000236514614030313015032 0ustar00runnerdockerPNG  IHDRIDATxkbTضmضmض{ӧT4 ӤX,67x߲y:-[7spLν@`?d6m8S uYR| B5xL19CfS-(>;VعWܟNiu'G σOи]W{68Blh Qcnc۷Yl=nUT[P< g׀,p9 ӧyY{z5\MVG4_Ja&$:d%_RzIE׋yn~`i\=$+xQ%-Jn P' RM}c县\d kLO/58,$ODA ?JYjH2;eqNᗁ L@}-x(] :?u,Uf YeeX6+u0wJ6Jd1ӧ9G8E:`VJ/$ dkbTz `vʾ;S$)Vɷ9>w JS7i---_k?_l>o"s <=GCi ><ܰv NjbKZbgϞpvpK&={[{cNn/#˶݅Q@~ͭQzӦ dp`3 c< ` PKS`9ٟ>s F1@0fmuۑ 1 "H"R2Ϟ]b p2!8̼VA*TR2uF+򼄱3ae0qw `o_ݗ1 `S'MkguPՏP^/^b3es46ghsVnxΜJݬޏjsَo6{y_Vv@^xIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tv.png0000644000175100001770000000234514614030313015032 0ustar00runnerdockerPNG  IHDRIDATx[m۶*m۶4Yƶ͵8eyoUX¿ݳod8qjE!WjNeB Q +Y#"> ``Pp]췡:pC7[(`rpVkm2rHfջm @K/ ӧAA@uBc('zC[?T2{wʴ5xZM yTI͜::/zbʷ-i}KStG^`kj_?, 8[}V[^aSs_p Y}#.n5pvUwF66Cqּ|OkԨ˧Ȋ D0U+gy1 kS;\-ErwG:_ptp;tJ8<:pD5 00W歸` 3Мh⽊jdkDhf|| TVwF;~ ИxRiܸS f6g`L"UwnDK~@Mh6͟yf͚456Sֻw@Sp'ϳy\% /ҲE3uRh41xLx@G2?"z) 6B,"DZDZ#id ϳ~"u9H y h>}tWZ?kJlbT[*SG?Y^oFHu}e>߾NiIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/tw.png0000644000175100001770000000141214614030313015025 0ustar00runnerdockerPNG  IHDRIDATxMضRbضm۶]mjmSLbb3'O*?}=>ayeU%11ZB>/^^z?lxbZ O,`[Dw6XԶ϶OMt˂- DO!z~xBd6XXŃgkF>>Ko.-(=): <~;]gF^[p{F=:7Ƭo.6s$9t˿[E_:Dg/]tU-E (Udu a6[EǧXǗ "T_) +Ƽ8ooW3jU֕-˅)Sˑ C#Qx@VH="zKCj"@U˜Hm۶K;vJ%y_e?,r.n݆ 7+B{tX*w{l'._#37(''9?K\`u֯"ÿ#,o_ˢ{<0 >*GP3Sg*ǏouDa@#(I/rVl#3;pvwxPkǥ|-3?+f#K*|{UxoߨQi tVE_Y@5k-] !@*҈gהvJիkזx{<ϼ7ͼ~n6b+mtQy~ !Az}gIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ua.png0000644000175100001770000000121514614030313015001 0ustar00runnerdockerPNG  IHDRTIDATxAm۶5腵ֶnԶ:fww_V"V@6"v"^қ7Y2gOHOϐ۷HRfdx{?}y? ,7-?ѳgxy |9m=:ypK?=yS paHhF|Sêc ^BTݔwSFAW!m;OKxQJe)W.+}a"C}[?5@@cm.ZRBHY9VΜu=ENOJnORPP+V̊~zRѢ%WdD\摮{|/!`7 MU>иqF tZ]Vl#`It2'`7iAKiS>}G pK\^kW7 :Yȶ M_;CX 8JD'NpPT[@' 5>Bg~ϔjҪ*Vܺ5j}o5}\o_-P4vy]F  ,,DIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ug.png0000644000175100001770000000171114614030313015010 0ustar00runnerdockerPNG  IHDRIDATxd9ضmm۶m۶m۶̴mu&U5MNI'5?]N; q]2l+ihBx_y ?@似_~io`0N,<).m9?  f DR+='D?{Mz̵;XsTW t /%I4[ur{8kλ~W/Ds2R?b7,DQFJ#x x|n+[н'Kev<.bs(+ҥu+qs鍜elg)^W|zkG^9io\uŢdcs~[(5ʏ[g}qلo?Pr뙺ÿWg Ru S!u7$2eW/ɆmCv^U_}jx]^g C\׻׀Y/>mT͠AhO5}FkO>6D1PK'|wa$ fMwy&q_$|ͼyk1|Go &_sSYo=G\(UL|3$DzN$I$'TN׳?D}4v 1<8s0k؋Zǿ8"!_SGIIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/um.png0000644000175100001770000000153314614030313015020 0ustar00runnerdockerPNG  IHDR"IDATxSfmǶͫڸ9]mk3'lu|~qYFwYgKO=e!E9H _!&y9 H@YYTTTJx-/7U|,40`zBn~1Z;lrDžsKTpE&?xKtƨ[߯{.8ܵKit_ZZLhx]%ҁWCp2{zsFy(C &[-#t;r]׳䵞wN7:;챘?j!Lj%%pW|qh-?2G9k1#d8q⾊㍮:|՟U>Z[M["DRE¿$JRRb1ctU H@@"K@RV h7&B]we, .>{~z6)J-Miշ{q}! Y3⣤mXtɒE{l4cF__ Gi 8Cuɯ)1ddAJ l< # l2Ȥx_c s2RB{+Ir =4{iOA2n}ו'hWkƪ!'/3qi^}qYںucc+0:~y܄կ4!0 0 ĐnIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/unknown.png0000644000175100001770000000141314614030313016073 0ustar00runnerdockerPNG  IHDRIDATxcXZ۶m۶m۶m{Zc6 mgrN~I8tWUdUVյF㬮` eLmLXjkWSTAVV rrr]nuvu "eFD>E{3a$koM j'%ϱ=;` U^TTȃdKT^UI[$#!}O**ph8 Qx@w]&ޗ@%4,̚Vx% u^^WJwcpX,H}3 O7~,Ǒgf}%p0 <)!@wrvuN$p?eL+''Wv$oo(?H)8T96 ]{d `kxicm=ZIr(zGַ xk/t]puPo >Vjk{#;ooRoc}C=䐃=]{T/)xG Ua*_pyo@|n9_LLS0Y`{A<3reLuW6Hd-e3 U~N/(xIj\hs^㋶}]ם?B?%?S^o;n.m/@%6;^^t{ ".-jIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/us.png0000644000175100001770000000153314614030313015026 0ustar00runnerdockerPNG  IHDR"IDATxSfmǶͫڸ9]mk3'lu|~qYFwYgKO=e!E9H _!&y9 H@YYTTTJx-/7U|,40`zBn~1Z;lrDžsKTpE&?xKtƨ[߯{.8ܵKit_ZZLhx]%ҁWCp2{zsFy(C &[-#t;r]׳䵞wN7:;챘?j!Lj%%pW|qh-?2G9k1#d8q⾊㍮:|՟U>Z[M["DRE¿$JRRb1ctU H@@"K@RV h7&B]we, .>{~z6)J-Miշ{q}! Y3⣤mXtɒE{l4cF__ Gi 8Cuɯ)1ddAJ l< # l2Ȥx_c s2RB{+Ir =4{iOA2n}ו'hWkƪ!'/3qi^}qYںucc+0:~y܄կ4!0 0 ĐnIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/uy.png0000644000175100001770000000220414614030313015030 0ustar00runnerdockerPNG  IHDRKIDATxx# m۶m۶m۶m{fiӬ$U4Ys޷T7˞{Fn[/ϺvU1Q $}+Ik|Ut!f QEF{k{h[xbie>зc!X=dq^ۗ0u.K 7Z]>G]Yм^BzzJo\U `гZ`0̩PP#V:R9I|؋+r$3GuS" t @X'w ^fr(Lvq"A₎صp;V_7]G8nS$Wx,8h Mt@]ԐCjUrQRMǡs0a ^j[@EMFMlMD㇅N/ռiK,_68zQ=zFݪ&RPQWݿ5jg5u 8|gK$Q}OԁŘ$E8Qpcp`NjYm[Mj*m!$ȝBM-l&3N$V7 ̀LJ^@~&M FMt:."bejHL5$. b@I&IeȠ%K[-u+DQ`fӨW1QM €e([LR:v,H x΀ Xǀ% X΀LkZe R|Dڵl g/3UW׆4lJD!$;Wg3DILew`,Og1ǀ,r ߷~uTYGh_?Srf+|$1+y0>y,:;Ύ4O{7PGE aQ"4ѹIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/uz.png0000644000175100001770000000210414614030313015030 0ustar00runnerdockerPNG  IHDR IDATxbt#k\۶m۶m*ӽIdm۶͠[γoi6̞[em9wM84-é09vd* PXX$P`-[vxxa`VܖkSVWX^[[=5krөo27F!ʂo[-6۷s :YYNA55;8@mAf,[Z xp|bJŸH7w@#K[fگ%_ŅͱIk?-xO_J~V {sw=/lZX> `SjF%@Sm=P [h7KZKXҿ-_~ay30vт_m1 =4ms<\i#s:[CI:BKzbDCWN4,1 4N~:M:L8|4:Z[{62RU򀉏/_+ߛLeJ ^If+vd+i~ydPcqJW_'3//K1ǘ:ҴQXEEHRKdU"YA5,0^_l͵F9NlU TU?I'y+\r +X4"_#E: 4M?gZr7OQ{]MZFЃ w#G2 }{Kɿq뭷rMoyMJ B@/t&Aum{0d۷ rᆇ6o.! 4R H" Z^`A|tj%iZ)u61EA} %۾? t_޵n޼TK矷}L=\]2h`UW;V>ϸ6mQ=$㠭׵]>ضcGSiޕIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/va.png0000644000175100001770000000167314614030313015012 0ustar00runnerdockerPNG  IHDRIDATx3Ixm۶m۶m۶m6µmv囪-_nhygnƈ1 kLQu:;jjj-lBU dhW%$Ju{'}zJSMj7q#r8 cE&h[ֿ/gCb'YRGڟ~P k$ɉ\ih}!ϻz{~I;@w%HҤ<ȃՁ9yQ%4lZ#^|kΞޝnvۖZ/fdGƬ |m%˜no_َ7t, _rיs7sC~+%noY~uu9gLj&9?:>:Nm}bq?j԰vc.=ׁ `==m`LBqݺo^k;g |/H?e5&7t^>/5[m. 7 <$pU4 >" VZ)뭔ٱK-o?5|M \#pKx;bW <-Yv ,n-ؚk#t |'76Y}o261IN~}VAqbI'KvO{_S%1; ΁&o5,5: ה31IDATxX?۶ֶm۶m۶mۻzz}69Rlj_='?3聩޺nTD|.kD!*֤d6w$|.JF)BBtGkk,ëuAo@yT3aCdz쥍GC2Q ":@rYKB r=ϱy#oB@Re>GKBs5/r%);p`˳Ń014p1XpOzL~r5aS> <m2ԁfM8j>Ԃq ,hy 0躹=ƾUqD@ -Z2ZG><1G(Ĕ5@M]Nfl SNnʠozQׁgmcGÞҺOTն[,2mMM('EE)Ld2iH[h6wnV<ܹCKTG[Uy++{ N )p;?g3gnJ>%r9KDV_DV"+)J}.ۘa>}3lPP\utNUGEygwB޶FFe-kOvSp`QXvHKS|u&L@Jh_hrrpP å5=}y~XGbm3_?'.GIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ve.png0000644000175100001770000000223514614030313015011 0ustar00runnerdockerPNG  IHDRdIDATxSִ;[۶m۶5gڶm۶-4L}#?iPȲ:"0q|ᙧO1Ǘ2@``dc "{3yfܯ8ʐ wymR 0݀dwHց1ֱnO`OvOevabc6u`0M&+f}aU:U!z06SOVu}PXc~nn'WfV.V L_n``~eF  ,ϽIQčy ;v^^\XwfXߩN g0ܹ`nqw&[6\Åʉ Q˔]LT%*U,E_ k D9(/PBܨLE>'mbf? ~i'x׋NN681Hlt*1H9,e7 TI3%/mJ&OXlDձ5)bV-A]g4g0MH'ϒ =7IraؗEh#%/FW~Bmq59/ WOHto sB?G5tLm' %Sxfb%ziEGL.7Hmynڑ3OJ!RrVԐ}Dl|.Tgzԕ\N=zr2+'8q0./y2.!a2 Cd͚*QJFYk`2La<2k)[V2@0y; (ȼA{Hv3^b TڷWm6[_:FUkBݻ{T'M:U*>u~tiZs6cܧuT?_+]]6IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/vg.png0000644000175100001770000000227414614030313015016 0ustar00runnerdockerPNG  IHDRIDATxk;6ֶضmvdb۶m۶UlJL^ߩu-D?L5 83^%b/ #~ܼy ƍ//\Y6a[`Տs 8}|R9GMƟXiLj/pf IFLZ{ H? m%yڪK2KI)4-ˡaa@ɓ/ 駃(Tbxγ H*[`D .kv`^L-77 !#o{ݓ:ے=.b- "PO~a<wֿX <[p>4} s&p>[} y3IX*`3ـ4Ѽ֞P0$]$X=z@j -yV7jdD:<;j.Wz$Va{Gf-VݢQ@C{F TI?_jTg\5u7$ <{q*0aϺKifML^0K| KAs%ڬiXP)N=Y8_oyfjfVP ek⏐S׮\|br^SM6lľd!،J!&WȄ8H])|%Hd瀂9.XMM/rugϜ)0,b$qFz,&!:_1W~'缡}n__(%Á03:Wtq6Ldp8F?&Gff@>D(>ߡ Hܟ>qiT5,b 0QlO`I p<@-[a 00 ϯreW 0 u=V3~F$8s_'o^'Ç; p398g/^1)\XHtI27_k%N Й.Lݍz0wee 2(;<×chT#Ԫ/1%Rl'B2wsS/1~c|tAc5|q#"(/IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/vi.png0000644000175100001770000000223514614030313015015 0ustar00runnerdockerPNG  IHDRdIDATx]Զmj۶m۶m۶m,S-?_:"=~w%INzցN yKK  7 K& '~q\TaQ0]2]2"ڰ|#47=0F bpĐDeex{ aㅨm̺V^pyQ cW@/*QdXN4)56=l˸i@ܶ~;XUfFphFiF{{VB=K+-|a\@7L78|謺 xغpJb]  _;dbG954-| Kwuo xVRe0*_si @8g^&򳻡)Ώ8ۮF&e VMl?nsfm/Yg EJ+5 ?+?v -_X@U(T*?? {X-=:mu"o{?,/v-w8]yv2Ԓ]N.ֻc:8T-m97u$pAFE\zKk?!)8}O'x1 p K"tF7w|=oթ6?g8~|&f8MbŊ2i,1X| VcI22JVtO.a *@P :3C#'+S&/Q8%KB5coϒ^D,3b>'rX#,1VV0[Yp':'b%J"@YWS2oҥ$SDt{&F,'* ķ[Z@ xBE*UTĊP^b$&< N78$)WĊ4i"@8.{ɯXDt s&MD Ѝ@, 6LH& dL̗^ͷ)!P!!1bۥK׿$ףui|%2I&tJ|d$طkIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/vn.png0000644000175100001770000000147514614030313015027 0ustar00runnerdockerPNG  IHDRIDATx$Ml۶mvٶ'g`m۝zyk=ZVwݾˊG~uuKњJK 4lԈV}EMM Al@Mc91RW#m<ݿgQii+(+ (4@Ɠ4fsZrr?LKk1T);gIw#}NUPk8N-p~K9Ozң+eC}vsAD7^BZgYYUwK+lZw_]}~&ǑsqDƒw޹QG]F6n-]C6ܮ#rZwq*/8Ǎ{ q D @^wc=?&bdnQ o\}UW]qϟow^CCJG?]OBlVwkmrjl%`;NRu4 ߯#)"Ȣ׹ &췔|'G'~;r)/[oI- mll{V~>8gJz3ΐc~\[S(~8;h{Mtկ JfIIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/vu.png0000644000175100001770000000166414614030313015036 0ustar00runnerdockerPNG  IHDR{IDATx$I۶m۶m3Ͻmf`m[Tټ'1?\r\N6~\lRbT3޺d`AÜѹs응"wEZ o=~ߤ|z;a۽âKu-6Kk]x|͛9Xxn/#w<~D; Elyq=a߾潑[nD_!C0xn[vcY#͍2\yX-Vqܨ{i F ]ڨQW) -Qh%T9  g?WQ͑>hƕ2koѮ >Eh^IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ws.png0000644000175100001770000000165214614030313015032 0ustar00runnerdockerPNG  IHDRqIDATxp$ysmvl{Cil۶m`m];ޛK v/ɌefX1CquL66e[G֬Ye` .\*],zh4O$ ﴆwj~.qٌOρ3&PvE!oEx{|rE+ހ-gЎPOFc11kք`](_"ZMc z,Q}7{T=Z@h?/6%JD?T]rP]eͼ4Ŝ wP)>uSJL䖑:@wYB? p{e 8jȴI2rX(?vВs}W~1yOM ': izw 9uX"1w.Ft-ңX=5{LziJOx:t U~{ر5/ |eRnM5ȁJquXh~}$<*̞4jMxL 6uzx-xݱ#sz MEMymk^dǃ{5<֛(}4v]sͰO\3_IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/ye.png0000644000175100001770000000117614614030313015017 0ustar00runnerdockerPNG  IHDREIDATx^?϶m[Ѽ-cpٌي98nz{&=˶ cJHRf͛);J%]{>.b8ntLǏ["hԼcϞyx<T?,Ge^iq yyRzx" #`!Wy?B!xEJrA&$ere$^W*ުUKZN pV9wgΘ [gϒ"N hA>#J%.S}t5ȰaA%1Ii^E2$LfQbΦs.=9ds2 3 wP7Gh„/yL__g&:[(6q|6f/&כi>TqM^9n~n0 0 -8IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/yt.png0000644000175100001770000000111014614030313015022 0ustar00runnerdockerPNG  IHDRw=IDATx]AjZ 5XƵƵCuֶپ87F+It: `fh>c{wE U5|Oh<^M(4r-X1`\M.7?ٽ 7Za;%柇9/dNpc|>&`.`tQUѣTp +Y^{uW/4u5ipz5D@IϟcHr*?TI{}ZU郌Y>`iРTZHG]VjL`4"L#!߯wĨCB!`-U: D'CponZX۾.]:}}w}\oo&՗*7zaQ+gIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/za.png0000644000175100001770000000234714614030313015015 0ustar00runnerdockerPNG  IHDRIDATxk}Mj۶OS۶mvӵڶ{vm%{{;g~49iwqߊ駟ҧ sPAȼ@ qqf>W<|ae2U r!pfF;ѹ: _;]jq6W{݀:7ΰ:n,bﵱ 3k+jgﳱ_\[7="""#%s 8`7}ǹD(; 82hθ,ڨh6قy ر}PiЦvw\DžLzmwˬ^b}=`Eͮv,Ai^|]f+ExqC.-|abkr4Yjj4F=5[;u)eX5WW4N6n'{{hjNPlOs^{Xrswa=Wh^?Natdׯky]~Y+Ϫoz ϋǿwoonĶ)K=\oS3 "mvQ0[@Ol|z(h|g PMwXoSZ}˝s:!c|@llR%_b|`%"]S,V[0sѢR^=vj5`Ӟ"Q׏i\ c{5uvU묷w%kkŁ=r"@Mҹ;˃)SQތIz0O9j$AΗ'U0swf:u0-c۶<Ķ3m۶lmKW;yn|5"lәgd BB.B`jiD<uu5I@qq$+jQZ'n23sr>vK=ޓ>=߽}ߒM`_)^on-^u@FFffV0W #I'T4h | Ǧ9WtWaSyGB[;c_.Pqp=: `oNtP)|.iRN՗>7KEÃXz#TmwJB8А߯/5OK ݠv .81MuZL/36]XJ#F? Q$;+ԦŃ+~Hꃆ~5 4ƍ{di„m$`|9+KX]L$(f- 7eͶn#M|t1gNYAp7pٟ_O#|BdνCf'` XCў;цz1L('y!0CG7@@^Gkvź[@uյ]}u/qϔ̙&IV痢Yϝ~=>(vǍ]~.ny]{1 0 r\!IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/flags/zw.png0000644000175100001770000000173114614030313015037 0ustar00runnerdockerPNG  IHDRIDATxY7m۶m۶m۶m۶,:9yz\~?ؒ.]$e#{+qՖDFڐ.]4H77wx Ϛ0L&GGa؛GE=qbwuy'M^o0+qˉ,G^?WF`[ӷj{Òy~1굄dF!!\zU^}8x<ĀaΑv]wO+eI./Ƨ~4 :2@B>e;H^+ q?p#nm̊6oc)kȲBCFGG jeȫ xRzڞӕۉO.]3Eo\)-1 x3ů-$$nE\Ǜ/xEn{@?ҁb[lBw41`fK536 ͛781cQ"Z2,Ohqf;p2px$2o5~"xk S#IR+e8o<|\ Ϲ/x Z kKs %,+>=IŹtZp͛wZH/`Vk+]Y :!2@[I]QL%KvP˟_}pk .!< RAJpŋתDxO7xKb^VJcAHRe #ABN%t$8FKN)5JfQoToQ~կ)Y(͙Si^Zu`AuY[|ĉc6)S\/^MRh (Ud]XhIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.8214774 pychess-1.0.5/glade/0000755000175100001770000000000014614030425013653 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16.png0000644000175100001770000000110714614030313014602 0ustar00runnerdockerPNG  IHDR ͣ9IDATxdR#a<۶Hlpm۶mݳmێqUzmB `(0N&S(dwD;``XƈZT|>FJ"⼽EꆈG:K 0B"Йs' puo8CnaP,y1r]'"QטDb6?~yKZ|qk""cBԙ^shTH\ ([zmHwl1I$LLs$(xͭt)*ׂ]Skwn!VݯԩV_{#v{%R)R?}z)ד#w`+ZsH gϨIG7tMWp8b4- ^tx~OCV[4{X߿MiD!X^|_%z !ߟkz^ kXA{ dj2HCR[= 4[-p:EIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.8254774 pychess-1.0.5/glade/16x16/0000755000175100001770000000000014614030425014440 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-clear-night.png0000644000175100001770000000105114614030313020771 0ustar00runnerdockerPNG  IHDRaIDATx|RqATN83<ӡO*3bުyLgUۻ.|Rr p5y _lV)ƣBH}> }/..N.dC"u8Ӑ Y<e"=O*-RNP$: E[07Ylڇ9*f*C_ǰr~ eI"Lbz,SdȄ=F\K$2a,l9$1*LG ud٠ $5i> I[Da~4G6:P:4M#; I$)R^d>4M@ |}B]Q.FXQ_TL&ꍿVA8==~ZHo!(s2хP߹S(Ij g_ڞIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-clear.png0000644000175100001770000000134414614030313017667 0ustar00runnerdockerPNG  IHDRaIDATx5$E@߯j[?www !'CcB']Vqqzg>khtjCq.PE_~|ئcoigC6G8*R\MlESؠ${c^6kȆ,<[uaNM_:k~_͚w7c}禟0 <~vW·O $BLAr0>ckz+~zxSSvmdm#|#&܆D4j6LǍ* wΉzO t-7/x!V!9 q.jq=ՖA0,.1(Q)٦Z;ED e3jgJmcO1,.hZXUqsϠsO@ox+GOZ#Is[Y(~O[xAx| ~-/~fYdmLIO4\Aב]‡H҃ :鋩+UгC[sy6ح5= !yMmju/&Y]Mֹ[ѩS)VW\ɡ3O?53]˲&o)ڽkg? ,}\jKKիIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-few-clouds-night.png0000644000175100001770000000113614614030313021757 0ustar00runnerdockerPNG  IHDRa%IDATxb@ٵw{䮽۶G( 1P6۪mm|m۶w:I$sN \vͱ5/Y4YN {%aD,aqf f ^J5: 6& z4jչY}34*! $seWPȯ`1HH ]ʱøܝ0ꤰP)!:Lvkzi;8\W:̚d5u 8"#R5 %,F9yc XIna:!ĕ҂GW8ő81)l~D9xw+F>e >bAB?xDَ7gA&p{~yC.nqKoN8?X)f<@K숰l6LXMx|oߞ1ͱ&0# ]#}KyzX.0q_c#Se*EP!UTZ}psxw78^؏ww\(U_ODqv:dWIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-few-clouds.png0000644000175100001770000000140014614030313020642 0ustar00runnerdockerPNG  IHDRaIDATx4G_l۶m)Blm۶6{uf.v~U~=?AOhO>h0'zB)eEZT%;j;DJVܗ<9YeT瞆ezd~ٸ'^,;6f7YͿYw]wu{ q$ya{7=oxNn3`CM5elGyZ^sV }Clf 4ԑ?\c#N;,n7ϼZLYێ2^U'ZmH& otq ug[p5E'A#-`F/ޜjZBw=qu6L>@g!dñe~QolWnݓ 0 oOG3&=J|79ݢ<LS_j5Q(0KE4M˕{3lDН|3oQTlud:4ME<ZXj;SMK^巿㝽;ii!W;ϡD44K:B7n|U|V\4%{N=hSZqܟ8joۨFaTӬgh=on5쵶7ubX恉eFYd"cs{B y>>]1H$pZxRFƆo,2A*\Tzd8:>YgL9ɱNCPT (kҩ􍚋t: 6iwBX@6s, 3j}P5uOh1ie,g ifCOm[\Xjs5[`V'gDѨӉ99{ǹWt? ahPE!?̨6Rk>!e:L6Rp}'V*eXZ-Xl

#@2; A\%-5&hL2$)PxR<.& zԴ u^zS/DcROʽ\| s9cIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-overcast.png0000644000175100001770000000067314614030313020433 0ustar00runnerdockerPNG  IHDRaIDATxb)(ѷ,U$J a-W<\g,q^ݭII|YNNc`3AgdqN G7'ΝbrB3YYVΖo~,(`Xo3ZK%&'R5_.XDBT\u nOO$QDr7(CKOΝ) B: ωշ!RTBVjPI(j`FAx]` Q<A͡>$c\|1/7 ,ZmEKHV`Ówl ̻ d7i-dlj!37xW4h^neѵFIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-severe-alert.png0000644000175100001770000000116514614030313021200 0ustar00runnerdockerPNG  IHDRa<]TTՖM%nQWv? jEu®n4fZU,)L6DU$v˟+FAQd> O@{X@*I+-tFv*dQሊ Qk3fX.kOTT 5# L:ͤg 0 ԃHxZ۳WjD@'RO9 gfi *JT4<4}\kl9FBםA; Ü};9ßgsjn }&OlqW`+G8!+d/D~G^R|sn&46vzg0 %W{K =>Z.^v/a\,䟟z+d1mL0(Gw#}2 Fme {%zIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/16x16/weather-showers-scattered.png0000644000175100001770000000105214614030313022243 0ustar00runnerdockerPNG  IHDRaIDATxR3AިN_= "m۶wfζq'VP}|ɗcc3+Jbm!-d4V7^}? mq.CD,}+l: Ţ7!SIKmc ~W+}M~A(5ȉMuc8%ޥ\.|܋9i\gTAkPǶE.**IHsv&|wdk_ wD,EaqނmAGOOpÙ3gU-vlĕD{˳y}/6JP^]"nDƥU7,z|#as`ZF&L}%1'G׌VLI A AFJl." asz. \D]Z 6?kPXU+ؠ(5 N-P0gՀ5x=(x:Zr-V2qҪN4OFvΤV DD๎n\Ckp3{#,y"0Y.͌M7gKy{XD.m1uƵrðRAH>L>(h?;Vk,n&huFY_-V`yIIjM.B-]o䏃*f)Zp~6! uIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.8254774 pychess-1.0.5/glade/48x48/0000755000175100001770000000000014614030425014452 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-clear-night.png0000644000175100001770000000553214614030313021013 0ustar00runnerdockerPNG  IHDR00W !IDATxYUpHAS`&85̌ 罀l Ե]]=Z:bKǠW45_ l@d HBgA7J'@ PXz eE%@r/1TEm K $,@#".2xzl*Bx OY,Nl:*L.'sª#?jաS,"RƋ y_q;FG<:$ e23Ͱ5 Tʴs4&w_vFh`,}9D؀tZ'bddd_yCN?аy5Mb1d&yBWcO$)JSҲhvv'XYo6O:Ϝ|i yx^Oӌ2 ߝN>ԁd6u--3dۦbW[B 2ڄfs9f411,[7pOb@b)!@}ry\xJTZVg=ٙ%!re<4 *7D˟0xם|6Heز^>sm۷]r%a{PȰ}> W+\>Owj_4]@@RJrE\lˋTZX |@q^#y"i3-汨bDJ O9goqr_}.q]B[+@'|^|V+<eVTxHrs0s-1!u^%,>lٲC@\?wq)%gw5iI&vDB ! O|_wB#LSN>ڰiJ !]#ȑw995 ZS;Y-D"N|Dpm4uAI@8NMNPOwf럟/gL+_}{9hP0 mb>[d!I@;>Cl#IOMN>, /Lk}}B(4 :YDbFd6D%BUbo$_x~>, EuV+DH 0kמ440؍[F 1fㄮjYI2)ޏU:Wre, b}"`XaCehIDZ T`b`YG(dqLfcR谉\EDX 6J1_H[m qx*>\B7=3Lw=x^,qA+bIBѣz7!lIj⪞L~׮]c7gn bwdNwe{8]=$._U}+s/j~Dܲ4{"cgDzÏAܼys'|xzUsANc׬v ehYl=& I8j/ Rܜ,._s|ڵk/}[U>z$\uݟsV^fwtR~`UABKc]淴Te`+Z',=6 ]w q]鉵RlUZA wRz)'nQ.mś(w8lK-1j# f՚UHC^Γ9!".[ /~r90kZm)'&5 tlay$mbW󾯃K~6yJg[g?>9`opQ*}/|.[E:?2:b;;u'|TӪ<_|㣏{PHg2#1: ]ȗɽ5\/9T/[нbڲeЖmϩVvVݏ-z7l<ߧr1p l^wd87{;# | WL(kR^K@ W[}O^t &Fi+ԅ @f)]>߮|knIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-clear.png0000644000175100001770000000741214614030313017703 0ustar00runnerdockerPNG  IHDR00WIDATxet8*=effu1=;͘t&j:ͼܳ\TJqt,xmEߵy|)$c ҿ;a@roSb/i"=oaDq 6Ҏ1KoLOQo 'PApNkt(_o&ҋhfшʈAȘ;34""ﳠ;{XC[Wz }ƫx e!H6>I26+FؖW|~e*.Ҽ;1u:Lq*Ľ[^Bųk6"zQ_pޱeca +&6l246k=+9-q-/jyi#Wr(E [ ¬>6i]Uj52Bj&D̀plAI0V\x)ytrE'ܸ:q֙[ ,8ld4omF|h,f$Mt7G_˅'9 BXNb:zƏK WzNT%^d䅝'ݒxil+9l6=ډI&:u'6٫ߏ =! :|Gkj h_]+H9].'Qragg v}X&׮$Gvp"͘$6=$FcFgh9=b'5U (i[/&;n Qm_7e7D~,w`a-O$#k[3udLܸg'Б{Lۖ0؍0. ,!+]?D91'/9YX2Y{ 7GOblc%huHb.ucMAo'~dM!O-P _\Ja܎xHEkfN4ȯHn X}Lta 픲DSO14QH[fc r "bWXHeپR饂4c~gtp{;XIsf=4|WYyGE\׎_jCA .eC4߽+݌:V7Gӈkc"M4{KCoL躇 앏ԲP*N5.@1q+2ceP3Ur2d;>N0k? ~Ggv yTeSDW@R Tv5\CC?[<`tjnռ^PDd&ϷƐ/MŬ&lR^ft#HBRtP "k W + C#Gg=و/^9=s kzXucZb/\x}64fUA|p@%d][Ϫ[ιsHUBH$dtȔr?&GUNuf|哂^Y~:OdsݸJb4oSJl̦q#}TsEy" U]rYH5t{ e5hJԽ ڳaaU<! Htr=R]aE4h}"ԍPنr(rJ-Z>H~H2d>2ȑ%CA\1mҢʭP ʉ-nvUPؙWi@CwjcUAD}PL@g`ׁHҏ ƶo^DP8 }Rl _-}lks؛;rxUDai&֪<< %cgsnV= E0j̹K {^uTHaa3h">]5u̵CUP@A TX'no__ֲ<~-s"nzәSiuM*zcͦh7_jx PD#> , UE&߸CvW﹕3{h0(Y Vx^^ѝ C$\@TAr!h`ærW(1 mt[xݫsErkldK=1=IXJQ0^TJ/e^\縈iDq&vdnU)H|ױzxzz< (_ڙ3otؓ9c@$RO7Ͷٵ6W 1yU_ HU{\C]6J]Ivoץ%#y ӤSO4'wpW j42J^ЕI\qѯT*y!H .sƠ1h~,K"&s8jGL&Dı5}GtxtIlwOsZ D-j\ ~jth ҩ/J4.+tޥSC`Oe_hu/; [WJĪޫ2j/dM&(!`]AK}YqbL VߜWgc'#,YKjK_ dH d N ̴TD;Wẽyf|c!NǴ\8&qpQA>N{Ǧqqosl܅^2TԫWt)# ]4]T(iLHkgP^~)d~[>~G\}z2?Qlڡ?t#X>IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-few-clouds-night.png0000644000175100001770000000660414614030313021776 0ustar00runnerdockerPNG  IHDR00W KIDATxYpI}C)klyR&,[8 7kR>wKy`w^#17@91@#Kbp8 H8x>!"ؘd &:BH*É@E!_!_ yqc@ jzsו * #HOXo.oV`U FO呄ze_/\``L$7'ȟ}{ܓR/UlƔ**o{q)' i [{9s_|qqkRn$W{m:]Wzp q52( %jB(Ǧ6E][zo_8g2"O <ֻWtg[I%;RDUxC0 XJ5=zlMm-jjjpQsfk[__ /J-3&, sOqh m51؎w!`EDxwoߗ$'1}BP{9RwGfӛ_ܓ-|jK84L.\Վ}~p]CC ]|L&.zG~1fUT $ ;O;./_ 4Le% 9 YyhZHU_6A:=38G`=Sɗ@O@R*vfSg@yAd l [U5h63kMؖZ'F[XH{vvv.&( ½TO>5a`t9Vio !3Dhn{כƓ 0/ oaqa"Eq0&\`_mSO=z ąY8gɪ/7}kǎ?9ol cɨ,t) :*^!$6rG% :T(AǶDfz1̜5~^WW]q;Q"K`z@];Zl,U'|s4 (3 &iIt]jaA$ u$%-]vnxU A $p4pǒ:s,=onV>Y B |ݺS}C`Y0xd!lĹ sIXز'.,C״NDQ&5LGNotysɹ|* PBy#p i2L躄:A1d5[|#lGUBn:}W5l|T@"sH*EwGr">۶=F2j,1svw=M*եa#qqy-bCrӡ&![&1")!"@ |p@ע eʉyסKQdtgkp9s|)ju\ޟWm>33 )sA7LXijP5%0(q9!yɪ*jRE8#bV+QEyjFrN~,z$ɌRgDԇ%f(E1J|}E-+  n\0*QԛyRὭw[_vUGҙo;cf}[_hy )eZ惂ҿ<< !؝N n=wK碭!E\Ur-~6bYTKLK;wH)j,4(|) paBT̪)$`Ꞁx,ղ$cﱜg(`aO>U^/و<$}q= G?,v}ƃ77)' ΟzgVvxohHz$ih` rr"QzqL@i EInD:"EBDe@ܰtz֜q.g:5@[c7VEf'*{`9=G1HobH5L(jy$*ȲzE80>ic 4 C#͐5{{Rfţ>/g7%,Y566*/͞5 K>EI4q'&\@_uHa&5,KG&7 jkp.jinEo*Sj>; {mp\s[?}^(ƱyYzhz8Uj!E[@]¥-8cq+n~|wj.۴,$˰/Zgty3k6}_\gϧA@%RD\korQoo/qڙJ63|>GL&} ACc#y*@czZAh\; 5BU]=i9r?ܷkݭ8p`@*CBD?YF%+#BhShh1t]:0=F$tJ1 m녑OfF0c9$B<#s6۠pA8|D4i4R(tPSSG ѽw?K$iɜ̕'bW^HϑZ02ct^(i.3,mCP.{d};Ɔ㶻ǡOlr>eӾɯ[`|YױAbPX \m"P$سwaZVk~ᴓO+?ܝteDf9cԤPIQT._[}81u__y՟d۩\5k3sѓVFS|=ȉ#5՝s ZY1 ?QL 72Fމ1kVT\_:1k֨kqPp_?E z7ٛqPֻ^I/M1ۣIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-few-clouds.png0000644000175100001770000000674014614030313020670 0ustar00runnerdockerPNG  IHDR00W IDATxYt׶2s^f N i2s$aĎeL#͌~̡/k/59q&΄Z,?+ X--3 |*ϿopwJh/ ph Uuն'6 4|5\/7  '&Uqua!(]}ZE5sJKlʝww 743Pw@ͥj SqL  g  OrQybZ^-9\atG `tGȢjֻXy-bz5oMb]Ǒ+/S}AЊWDŽwOy[ɪ]Ryfn%ǘSWO<5=jy|<aީ^} ]Ƅ{ 4J8SNe۾Ǧӗ[h5@Ř5G -0 x7)ԽU}k {O 5 54׃[M]֟u FJ=[ Hk=5EF&9dH/wˋ2?45lLy:XO}#8%r6|859e9ee"}< $"l#^xL#ovk':2fvu>j XdxRBBB'? q.V 6 /qg Wy6-"l9ﭪ/*~"ƫoj驹yI-v#'/Skĥ<>>'' 9-،_s q멐 o4M}">sYwͺ[kpp2"P?zhn6x81'}5}8H/z݇c=-ׁ8A?ά$YvZ`@='5m.BVcp4sF__twZlg+*e@f Jer7Eiyz.Dl n [IES?ؾZ 3h,oL 5 _sIAJx/R!;> U Wrro6+~>fKrh!@kM?"nϥY.@ĶaJ݅H[A@ nBFh*E8fs_dxk\^x_4@]'Nhzᨹ{06ЌF?\m4'М_CsHd(e* JT,ЊB;Ǯײ{ؽYĶĞ#yN!1;4>_SwA61`& u!Yߥ/KJ{JJ*ɀ %(XMx%;Ǯ{ؽY@B f"q DX8ɚp ؐKo4,-ie ?Do?"T ``;v_ïe8?A697g%Y!:'1IAznIzf 7s6PVצޡgS,@.J%=TPQP|!=E?ޏ8B6?1r((5àT oOM؟/@W`+y}v֢„ |f''*+`}$x$Z&sKH[9^N6cgǫmV893W+ӳ+{W-WZ\"-dj5vThm Yn`"*>`9wAM+8"Z_ &|VNfvi?_nhr 6I㓰x<I CTR>Ў=ArJ;Bqe&V@>j_0IJxC4.&jUsٹe2qi0azG$ GG3i+tm9"3%I& #-'iƇOӃ  $-X ~;R;349'L.krh!e#;D(-A40*  ˔ I+?/ !F-v(8A,&  "@IscieifImThGѕGNiߞYC_[ W'm@N4=(3ECq!ql8i&uOÿOѺY7K'c"aU5+Ucr / )PhwBw>{-K%^3A1>5`Ҋ(.Fԫ^^n p[`+7*"*`. @RcRQԘK[kj2s*N߬_{<]7[9& r ;@qE:>XrtN*h;Pk$p,uG@[dkACK-fN@CcdeEƪM"Rew300ppW]^l6R @%ؚywjsA9r(#N$!>OacwT>nw_r--ٴ#HkFDdbt}myaNӊ%ǻ>8G5׳$KYN<:VUjuvp>Ye⩺ۢI+f{V OlΥ´V Nf0l-3ź6#u&M7uսfb&a1Xh #-Cd{zIng#+~mO]Y߱n 4v=uۋB[vX5Ć7E,;ArU=u)Gng;wR==oI666#;V<(.vU\ؓ~4LY}_7VVF0g E ;ԏ=by)~m¬Ȗ p>R76%А8&Yc,%̶ æ{m<~ߍe#n kbjXSg;pSQT?XgL3_FV#QUIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-fog.png0000644000175100001770000000463114614030313017370 0ustar00runnerdockerPNG  IHDR00W `IDATxU0 OʭDN@sVJ)fBRDgWj54h m,h}y즚ŜXkU֖D዗W,ZF> ~ۤ\cg?cc808LW=c0Wo;3w]k+W/2W$bQgFsj[G,-d{{Kq&g{Iֶf~㚬.˵WQNasrݻs5Z#󳲼$3YX=%.NQ2/|d="W]-~LLr%}Xb$ nU|> zšXb|32\ ]f,vtʒ\ #2a\5iim,]E/ԸLL=1Is;鶑nxr)zδ5ql[(w܃O+MP D:&6Ii*($k?#WlMJ.3W\'?//}ȁÒKK:)C+8s sCkkz& t`Gqlwʌ#'ϔx`?G*M0r),SRM7`/<-GR'Klz6vܡt:^a!F*Rn.;v˫0_7pZ220z g>8?WCNm>K .@ hſd?87kTSxVQuåځ&Kٌ\ɟw;sS#wj7艣18ms6ql)3;W5Щ^g^՜K+oMuRil:?5UStZ@5CTcZv #ix5潯5[Bb{G+!Xr 8Fs?)o Q<^~sca`QM/,JO_+h?}`8ܶ\,._e`evnZnܼ&;;D XSwy4JeSXDXBJ(TT|!s`'QKH$񩑈 pvEj> &pA%T#^}TOG9P.? ƶ"Fe<3Ѩ^yBQG7=rQlJnT)˜^|UsfgtG~)Azy1#PӁ@mTFdže xO8 WѾS%Ea60cPpiN+;1$W<ͧJO~wJ <ɪJDQ֕~2)Єcg('[.]T<~e^oh/*i rQ|{aѡG+-ӸF (m?2h"Ҕ.=9D> x~?=;0ȑ#Fp?+NX3ح9/B`X+BOc|> *|,QGA&\ Wfah>|*TT}D^hG [24$ `4"UyYVVdaÌpJl'!RwH*.xIegY|~]CVe5?\@MPά.C7VK6fg)U<$`Ѿž|K I:<V;OL֦(e]-XN:hX^>9ҵuuaikh!0|HaJ# h(4g|.4f|DZۛkȑM8bN`urׅ=zkR(`j]~:i08Ki`jR1>z!, O&8<<9J:,OBWt7~A{h.x0FzDM9*`t6Nؤ#;%͠_Pv6B(b_7 VB}km*0JA(o Oa}yIIɻqRtUuU菜2J> @cdr0+j=3oږې Q b( yA nfsTdɉڰ*H*y `dY&$^2+pIUjWo1ERCG.3g*P0D1V( D6wBWHQ5桀zj'H0?KvS/x{/Fwy)Ƽ(K$ Ec_^ چEg1.ET CM|sGruHѹ4&XXXnAm]=o=7Lo@ֲezKߜkլJ@|"q\6W *VA,YN4deA&dFtٺ%ht6Dg5OWG~g3Z.{|h[\ppxvYCı_1(F,ڽmW^fF{DoUxjtg_i؛9 QSѣӛ! Gd=VhvuHVV]*mQΚXwIpbWeYM1Ku_˖>?@AF;vwǼm\;~͗^Oǿ4aÐoᕯ|m'?fatDoWt@ђ='h((>34;+^Z.`ehЧs&O:zu|w̃pa"q9tgO_L]IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-severe-alert.png0000644000175100001770000000463414614030313021216 0ustar00runnerdockerPNG  IHDR00W cIDATxVp03W.p|1%c3'acYZԿ{~UJ]jiv3ˌa c0]B,w%r7L! YbET) upjˠ \ܝ8B"%gM}d!Rϥ y 77bB)A$WJaO dCn~&ԕT.9UFP˾ٴm}cnA&mvWǢ|(,,JXn9ZQ'qbR-;an6rNSQ]+^vU٧U$*k0*(-/UvrG"ȕ*UsqM7:*Պ#?ɽvh4ymC%vWm촔4]aWP% T^Gy˔FZDfe G?4U,VPQUeET/hiIzMZ-d"x _Dv遲#>]{khR^ e3^yi2Դ;:>8v0Olt؇H QYU1TXUN*M{L\%⮪ ,7$@&';{bKajtVd?QA,ӄdBGjfL̙3$%6ReH~B-=UU5o-NV=ɛذ7/, ~㣊pj࿔JZ-YUk-* QQS(L~Wy8 Q/yD0,68^͏gd@jFd*Y|RL+[)^~D/"5Q- E%PXK:RS^b*=+e"IsMNcRHJTT88%@e_G<pd\,!6>?G n%u4Ybj$C>EcYќL*+NC TMd:H4 Rrt ¤4}4Qr8X@  wtXfB$ubR)@ф(Y&HJЇ3GIIG)1R|Mi8=:Q{'a S ;, 9 OAHx `_ o?F{~V-VRBqP@sz&!aSh#JNCehH@%q4^Xp~3.1Î̅c)4{@:$,ƹ! ȏ Ap("atyƙ153]o9#46OoY(KLXBB @RsOi-ѡU7@W` \*887@LB o2z_t훹-6sbM=h߷oafboeT&i'׮jpi AD`=yƐ T60ď*]_+pF?GG- Wȡϛ]3̘ffnfgaezę6,:=C#.nN:ZYDsM9Z)*0"ŃJB+Qsbx/.mڢWƭ34th)ߚ~ԹsA q_ ZXgmZ/.425 yMD&&L'Fc\m,vc~j7;gL^:^Cxv\V;hspvY7m9{XBY:>DBه'mg/MhJe}ȃ*D?rf!eO0 ('%Ks͹eL#W_:^8&MXMK;k)h5;W4Q|v KDs]$V!usJ)5bST6h /ƓNY?Ms{&i>^A bKVIڐ'hk wΣOٲL4_Sm5Y 5F'_k\:֯}AԎ+2Hw\"3vGE+s]ra?+.LsLK\,cSǾoj/7ħ氰J|Rnim$7;1!Awxc7/{o;LIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-showers-scattered.png0000644000175100001770000000520714614030313022263 0ustar00runnerdockerPNG  IHDR00W NIDATxVs]Cl;i Vvflꮪ96m{wң{_*ow =7ԆPjCm J\~Vmo \l{e#@mvkꉧb@~T!C^cFe|znCz!YhnÍI*$w~`Cw7bR$+`xZ}AEZa FlT>2w6~nS<+Xݰ$23dFDc OF!}C_4 KVwPGXV,rsD@7_SG揜e4gqHnI`cv'j)C" x]s*%Ber897P某b$fQ CPT@r]?SPl"8V8?¢=Ss*`Rn)7%6GDRbI`0`=DFz~A#y]`XOۿR'\j+EZ.KH|TB1?#^Oy.?/ /2g,p[k 9bn_|K9u~0@@'tyiC"lţ(&.\s}-, |Ek)%q"+&È$"dnJ89K%Cc0!7xx{W3;I,"vI>P``a6(M$: JAХ )!!' D!g gn%31}Lj@k\vp4[hmzMy0Zb(\/sXb;`8Ai@nYSʉ  'ԟ 4c.p5A렾j+*JKz<踝*M툼Bkm^/ ƣX0 ᢴ҉DQ0rzODoLyHN4݄jj* PZ_j3ŪGNf\*oңˋ7>%8}Yo۾x毹x`bqfmi3xtL|BBb^ZYhBY_ ȡ}'CYʈsHK&7]U=Ms2#.Yj-j[v|ȉ e b"bb4b_5FL1T=|vsu%3Y}Dm'jZG tzێ8A$dl\l *>?B6x8Xrcb s=o)GOP,{LdqSga-ߐ8T|gֻ1nNLvcfM*~4994y)ac,χar=#ϝ$re'ʠѬV5IDmNڶL{m[cۈc۶mTΙ ן}.<Hg%4_ s0b1~YB#jq2ӋϊĄ.B1?!u">egXcmLrDc疜_ ,+3 J˒a[.ecJg|Zè#;V.INZ,cN+#7]@=½ғ,aWxgT.P Ub h5%}> :@@f,='Cy,yҏYvT^zqP;h7U`fkW]G-K'P3rOJ+$ b;wslC3V-jux#_,9m!dtvsQrڼޟ M;ΰRJE:y)+A + WɃ=-!(sPO.f^9O*>jX=n)3X1G$\7 Ιq8U+wy(IGJ#e1}a8bV1'HQ|Ʋ ֮MB&*м|o >}Nء4nSNyۋyCF:;'G7o3vrLgN5WEx?>FFqѵ\Բ9.Ɨ ȦV^2 .9')Zw!V.}[}a!RJEG׍fpltiG~Y,8J@ʐԯGڨi 2a%a^,ɧ^|AsYĀsj~Eʥ ߜ{=>+`Tf;}{4}6ke 2 I *gYDaQt* u]dp@WA^bBYBm}2Kx2Zd?mؚ{i, ϋED(A,~J}lCTLE8d2 USy~rN0ؖ P455`x>?\;%?-[#06 V \'uMuӴ  I m,.3D^Tήg1Zs!]JCf?G]uǙKz{p@S$Q8#IY_m" EȲ M\R WTD}̒% :.tC'f;bw_doIA7RU MCw&LeuD"|"(Qت ~*B! Y|Nxb'΄u]LME.Z"hhuZkF'j:!%Pͼ}$|n4P(bk Ȥ"m|F8J'qgڊDSfEC Æ~Ϣ!|(>8ߧӰ}}w 2isa~ӖGc-dP[єxsXjEtttLإl --Pٳ^ xb:,MF؊" v%5!%r?| V.or܆\<UJ,yKΫOݵmxljX4WoCD:?u-.G< C%~e|~LcZ> ,]?oe2T *uvjnߴn'yCFOT; ]= cŶj^0?~o;-m/]SH9v3c_9׏NZgöypWBԗ>q5u}ga^b:n9c'W{юaaW.@\Ќ0E*( :鬳_ EϯJ_ PS~ỷyqflSzf.x.c(U,}w{U ,jڜax'/Qĺ<ҍ@HΆ8&^[+F;VG6j""5)"xv;(4m+JۡԱTSF9@ TҼ`A?' -`g8H 2ʿ}n7'?.nUI&*eG8kXS(DDIqGFH%NM%FJ*4]]ND1ս+X-cR5m?ܚ ҍ!5CG)D0k9j5ǘG C\KR&)al4W!ERkZe"/aFMb*A6*9 [u?M3X iKP])2ƽCT8Ƹoy ӡCuE=_>`z؅1rS̵S r3퉣9 bb0BX bT?jZ_[rAAˍ=m?qdt Y9ڙH'm̺Y2L4^c6t"RL)e2m9rANQ\\O::v~I5^g1HJQŧ1Lm"zy)JZvM'Y- Qu⺡*0Y Ө(Cж<F8u#cMpl#:V5sZtx3x͜Fq)1J¸42N|w %gт3X 9i1"J6Nfbr܉’决9mOZa v?I\ /$J m?/Ggbhް8})[NZʡWrAټa&l`Uflo@7&DŽ 2ԋUKixP24R/&Ѽo^h1jE^NLb؈RxB7Gh[`;vUnFIyx+fӖN[ũ&8kի~O$8E'i˱YNT{vpTufT*:fHQTkiKn$-pg'\ɴg^acAz̄LztCe2hD2IB3"ye|QDQs=t m ;LP}_ۼ1d@EJY+㷼/nQ_t,ZYEPYf=E!TUXxkHaްtMO)c~cMso1fVATY` jC7Y-coyiͩo,P)*.ߍc<۟Eq䆃Oes]uwT枓}7ԋ杒 ̴7AjJW]X#w2]z0V]e{5/lRm8{ҴgX}ǿhEU9ם|"ܹ/P ĞOϿXuC~P saIMd۲&tIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/48x48/weather-snow.png0000644000175100001770000000333714614030313017605 0ustar00runnerdockerPNG  IHDR00WIDATxWEfC0g]7af^9f4 (:sޠ}}ʂ#uWU߾ݚp01a cNs#\Ho=M9Ļ.Dl=FG[~ 83>9x:8=Mҍfb8]cNb*;P pK@ثۣ&,41ND$B=BU"TQ f0@|;nsS-HF79NKE F6q\5U]tjL}1/ Rܢ& _gO6KR_q$4߾s.TYRNtёrgj4(\H:Ҧtrmذaʁs\Qs.<#[s㍡Cߛ|Ve> 4G)#1eNR-\!t6e/Hv\O/l*kZprzpwRFT$ #jdxܠFD4&:Fك>υ n#.w|x\V`BYɦ )$Y:(B,-tD#n! @l p_T }I4\yN

a#EgH8J'r H H p# Ñ I q=21` GZ(DmL$ &%bˎ ).{/HN[z΍/B^^ZJq8(?Ab\C~}O>0q&M|ުa3:Y4/QڮkNnU$wHQq=k.7Q㈩(jYhz%-#UP< E}[*Nq.;Mk"JUt/h>oUǞx~04…* QIϣLfPW'$}m[;qp(u9Z4nQa &Fr8"$k5dr{F'(NVAw5B)q*3SRC޶?J3( $ ,HHKWuKБj_(}PQ?H;3g߽?x=g\s͂o_4fy>YA#7V:w3ʒӰ5\L!XYyQX:LPXi2s/b/A&JYzՁ=iu{#Έd] l"r…60h-Kܹ=nϖMRv-#d5??x%8V'M퀑a'( X*wH|Fk1饌?aff1֥2f0+U4o[!؝[lSӐ?L#8-T9_%%1D$t_H {Ft/5C |Û+> ƲGL7@Zy+R@Ji+UAK(۝'s =L&H*WQUmCM|D_MbZ`E=L|T:ckjQ$(L$cF>Ld1 nJ&}OJZ1\<~xwI'6s_jv|{< ]>mcش ͏H]?װN6:SJ[(h#>&Mbs[:l1e"[C'ݸ~p}0dP]E'N<ȸ+Ed[h#6 3%Ǵa&?Y&-z1Fq{Eot5v8N q4lnT8wZ{L[BNKo`|?p֑eNG/W|[h[BGɫ B*m^*UOD6?Eֹxũ%U[|Iyu> ̣1bv C [?`ڱ   zyȯ>mU:[ .FLE&sGVRv IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/PyChess.glade0000644000175100001770000155234414614030313016241 0ustar00runnerdocker 100 1 1 10 1 9999 3 1 10 1 999 15 1 10 1 20 1 5 99 8 1 10 1 9999 3 1 10 9 1 10 9 1 10 9 1 10 9 1 10 8 1 10 8 1 10 9 1 10 9 1 10 9 1 10 9 1 10 3000 100 10 3000 100 10 True False gtk-new True False gtk-missing-image True False gtk-missing-image True False gtk-network True False gtk-leave-fullscreen True False gtk-export True False gtk-convert True False gtk-save-as True False gtk-connect True False gtk-connect True False x-office-calendar True False x-office-calendar True False x-office-calendar True False gtk-jump-to True False gtk-open True False gtk-save True False gtk-save-as True False gtk-undo True False gtk-refresh True False gtk-fullscreen True False gtk-info False Pychess pychess True False True False False True False _Game True False _New Game False True False True image1 False True False True False From _Default Start Position True True False From _Custom Position True True False From _Game Notation True True False From Cli_pboard True Play _Internet Chess False True False True image2 False True False _Load Game False True False True image3 False False True False Load _Recent Game True Load Re_mote Game False True False True image27 False True False _Save Game False True False False True image4 False Save Game _As False True False False True image5 False _Export Position False True False False True image16 False True False False Share _Game True True False gtk-properties False True False False True True accelgroup1 False False Player _Rating True _Analyze Game True False False True False gtk-close False True False False True True accelgroup1 True False gtk-quit False True False True True accelgroup1 False True False _Edit True False False True False False _Copy PGN True False True False False _Copy FEN True True False False True False _Engines True False True False Externals True gtk-preferences False True False True True accelgroup1 False True False _Actions True False False True False False Offer _Abort True False True False False Offer Ad_journment True False True False False Offer _Draw True False True False False Offer _Pause True False True False False Offer _Resume True Offer _Undo False True False False True image6 False True False False True False False _Call Flag True False True False False R_esign True False True False False Ask to _Move True True False False True False Auto Call _Flag True False True False _View True False _Rotate Board False True False False True image7 False _Fullscreen False True False True image8 False Leave _Fullscreen False False True image13 False False True False False _Show Sidepanels True True False True False _Log Viewer True True False False True False False _Hint arrow True False True False False Sp_y arrow True False True False Database False New _Database False True False True image1 False Save database as False True False False image19 False False True False False Create polyglot opening book True False Import chessfile False True False False True image18 False False True False False Import annotated games from endgame.nl False True False False Import games from theweekinchess.com False True False _Help True False False True False About Chess False True False How to Play True False Tip of the Day False True False image9 False False True False Translate PyChess False True False Report an issue gtk-about False True False True True accelgroup1 False True 0 True False True False icons False False True 0 True False 3 True False False 3 end 2 False False 1 perspectives_notebook True True False False True True 2 False 5 normal main_window Chess client https://github.com/pychess/pychess https://github.com/pychess/pychess about.png False False False True end 0 False 7 Preferences pychess main_window True False 8 True True True False 3 True False 6 12 True False 0 none True False 3 12 True True The displayed name of the first human player, e.g., John. False False True False <b>Name of _first human player:</b> True True firstName False True 0 True False 0 none True False 3 12 True True The displayed name of the guest player, e.g., Mary. False False True False <b>Name of s_econd human player:</b> True True secondName False True 1 True False 0 none True False True False 3 12 True False 3 _Hide tabs when only one game is open False True True False If set, this hides the tab in the top of the playing window, when it is not needed. start True 0.5 True False False 0 _Use main app closer [x] to close all games False True True False If set, clicking on main application window closer first time it closes all games. start True 0.5 True False False 1 Auto _rotate board to current human player False True True False If set, the board will turn after each move, to show the natural view for the current player. start True 0.5 True False False 2 Auto _promote to queen False True True False If set, pawn promotes to queen without promotion dialog selection. start True 0.5 True False False 3 Face _to Face display mode False True True False If set, the black pieces will be head down, suitable for playing against friends on mobile devices. start True 0.5 True False False 4 Use a linear scale for the score False True True False Unticked : the exponential stretching displays the full range of the score and enlarges the values around the null average. Ticked : the linear scale focuses on a limited range around the null average. It highlights the tiny errors and blunders better. start 0 True False False 5 Show _captured pieces False True True False If set, the captured figurines will be shown next to the board. start True 0.5 True False False 6 Prefer figures in _notation False True True False If set, PyChess will use figures to express moved pieces, rather than uppercase letters. start True 0.5 True False False 7 Colorize analyzed moves False True True False If set, PyChess will colorize suboptimal analyzed moves with red. start 0.5 True False False 8 Show elapsed move times False True True False If set, the elapsed time that a player used for the move is shown. start 0.5 True False False 9 Show evaluation values False True True False If set, the hint analyzer engine evaluation value is shown. start 0.5 True False False 10 Show FICS game numbers in tab labels False True True False If set, FICS game numbers in tab labels next to player names are shown. start 0.5 True False False 11 Show threatened and not protected pieces True True False 0 True True True 12 True True 0 True False <b>General Options</b> True False True 2 True False 0 none True False 3 12 True False True False 3 F_ull board animation False True True False Animate pieces, board rotation and more. Use this on fast machines. start True 0.5 True False False 0 Only animate _moves False True True False Only animate piece moves. start True 0.5 True fullAnimation False False 1 No _animation False True True False Never use animation. Use this on slow machines. start True 0.5 True fullAnimation False False 2 True True 0 True False <b>Animation</b> True True True 3 True False _General True False True False 3 True False 6 12 True False 0 none True False 3 12 True False 12 True False 4 Use opening _book False True True False If set, PyChess will suggest best opening moves on hint panel. start True 0.5 True True True 0 True False 12 True False 3 True False Polyglot book file: False False 0 True False True True 1 True True 1 True False 12 True False 3 True False Book depth max: False False 0 True True Used by engine players and polyglot book creator 2 2 1 adjustment5 True False False 1 True True 2 True False 12 Exact matches only True True False 0.5 True True True 3 False False 0 True False 4 Use _local tablebases False True True False If set, PyChess will show game results for different moves in positions containing 6 or less pieces. You can download tablebase files from: http://www.olympuschess.com/egtb/gaviota/ start True 0.5 True True True 0 True False 12 True False 3 True False 5 Gaviota TB path: False False 0 True False True True 1 True True 1 False False 1 Use _online tablebases False True True False If set, PyChess will show game results for different moves in positions containing 6 or less pieces. It will search positions from http://www.k4it.de/ start True 0.5 True False False 2 True False <b>Opening, endgame</b> True False True 0 True False 0 none True False 3 12 True False 12 True False 4 Use _analyzer False True True False start True 0.5 True False False 0 True False 12 True False True False True True 0 True False The analyzer will run in the background and analyze the game. <b>This is necessary for the hint mode to work</b> True True 0 False False 1 True True 1 False False 0 True False 4 Use _inverted analyzer False True True False start True 0.5 True False False 0 True False 12 True False True False True True 0 True False The inverse analyzer will analyze the game as if your opponent was to move. <b>This is necessary for the spy mode to work</b> True True 0 False False 1 True True 1 False False 1 True False True False Maximum analysis time in seconds: False False 6 0 True True 4 False False adjustment2 True False True 2 1 Infinite analysis True True False start 6 0 True False False 2 True True 2 True False True False Maximum analysis depth: False False 6 0 True True 2 False False adjustment6 True False True 2 1 Infinite depth True True False start 6 0 True False False 2 True True 3 True False <b>Analyzing</b> True False True 1 1 True False _Hints True 1 False False 3 True False 6 0 none True False 4 12 True False 5 True True in True True False True False True True 0 True False 4 True False True False True False 0 0 True False 2 True False gtk-add False False 0 True False Install new True False False 1 True True 0 False True False True False 0 0 True False 2 True False gtk-remove False False 0 True False Uninstall True False False 1 True True 1 False True False True False True True False 0 True False 2 True False gtk-ok False True 0 True False Ac_tive True False False 1 True True 2 gtk-about False False True False True True True 3 False True 1 True False <b>Installed Sidepanels</b> True 2 True False Side_panels True 2 False True False True 3 True False 3 True False vertical 6 True False 6 3 6 Board Colours True False 0 none True False 12 True False 0 vertical True False 9 True False Background image path : False False 0 True False True True 1 False False 4 0 True False <b>Welcome screen</b> True False False 0 True False 6 3 Board Colours True False 0 none True False 12 12 True False 0 vertical 9 True False 3 6 True False 3 True False Texture: False True 0 True False True True 1 0 0 True False 9 True False Frame: False True 0 True False True True 1 0 1 True False 9 True False Light Squares : False True 0 light_cbtn True True True False False 1 1 0 Grid True True False 0 True 0 2 True False 9 True False Dark Squares : False True 0 dark_cbtn True True True False False 1 2 0 Reset Colours True True True 0.43000000715255737 0.49000000953674316 3 0 Sho_w cords False True True False If set, the playing board will display labels and ranks for each chess field. These are usable in chess notation. start True 0 True 1 2 True True 6 True False <b>Board Style</b> True False False 1 Board Colours True False 0 none True False 12 True False 0 vertical True False 9 True False Font: False False 0 True False False True 1 False False 4 0 True False <b>Move text</b> True False True 2 True False 0 none True False 12 True False vertical True True etched-out 2 2 True True 6 True True True 1 True False <b>Chess Sets</b> True True True 3 3 True False Themes 3 False True False 3 True False 6 12 True False 5 _Use sounds in PyChess False True True False start True 0.5 True False False 0 True False 0 none True False 3 12 True False 19 3 3 3 True False 1 2 GTK_FILL True False 1 2 1 2 GTK_FILL GTK_FILL True False 1 2 2 3 GTK_FILL GTK_FILL True False 1 2 6 7 GTK_FILL GTK_FILL True False 1 2 7 8 GTK_FILL GTK_FILL True False 1 2 8 9 GTK_FILL GTK_FILL False True True False True False play.png 2 3 GTK_FILL False True True False True False play.png 2 3 1 2 GTK_FILL False True True False True False play.png 2 3 2 3 GTK_FILL False True True False True False play.png 2 3 6 7 GTK_FILL False True True False True False play.png 2 3 7 8 GTK_FILL False True True False True False play.png 2 3 8 9 GTK_FILL True False A player _checks: True 0 1 2 GTK_FILL True False A player _moves: True 0 GTK_FILL True False Game is _drawn: True 0 8 9 GTK_FILL True False Game is _lost: True 0 7 8 GTK_FILL True False Game is _won: True 0 6 7 GTK_FILL True False A player c_aptures: True 0 2 3 GTK_FILL True False 3 4 5 GTK_FILL GTK_FILL 3 True False Game is _set-up: True 0 5 6 GTK_FILL True False 1 2 5 6 GTK_FILL GTK_FILL False True True False True False play.png 2 3 5 6 GTK_FILL True False _Observed moves: True 0 10 11 GTK_FILL True False Observed _ends: True 0 11 12 GTK_FILL True False 1 2 10 11 GTK_FILL GTK_FILL True False 1 2 11 12 GTK_FILL GTK_FILL False True True False True False play.png 2 3 10 11 GTK_FILL False True True False True False play.png 2 3 11 12 GTK_FILL True False 3 9 10 GTK_FILL 3 True False 3 12 13 GTK_FILL True False Short on _time: True 0 13 14 GTK_FILL GTK_FILL True False 1 2 13 14 GTK_FILL GTK_FILL False True True False True False play.png 2 3 13 14 GTK_FILL True False _Invalid move: True 0 3 4 GTK_FILL GTK_FILL True False 1 2 3 4 GTK_FILL GTK_FILL False True True True True False play.png 2 3 3 4 GTK_FILL True False Activate alarm when _remaining sec is: True 0 14 15 GTK_FILL True False True True 3 False False adjustment3 True False False 0 1 2 14 15 True False _Puzzle success: True 0 3 17 18 GTK_FILL True False 1 2 17 18 GTK_FILL GTK_FILL False True True False True False play.png 2 3 17 18 GTK_FILL True False 3 15 17 GTK_FILL GTK_FILL 3 True False _Variation choices: True 0 3 18 19 GTK_FILL True False 1 2 18 19 GTK_FILL GTK_FILL False True True False True False play.png 2 3 18 19 GTK_FILL True False <b>Play Sound When...</b> True False False 1 4 True False _Sounds True 4 False True False True False 6 3 True False 5 _Auto save finished games to .pgn file False True True False start True 0.5 True False False 0 True False 18 True False 3 3 True False Save files to: 0 0 0 True False 0 1 0 2 True False Use name format: 0 0 1 True True out 1 1 True False 2 .pgn 0 2 1 True False vertical True False start 1 Names: #n1, #n2 0 False True 0 True False Year, month, day: #y, #m, #d 0 False True 1 1 2 2 False False 1 True False 5 Save elapsed move _times False True True False start True 0.5 True False False 2 True False 5 Save analyzing engine _evaluation values False True True False start True 0.5 True False False 3 True False 5 Save _rating change values False True True False start True 0 True False False 4 True False 5 Indent _PGN file False True True False Warning: this option generates a formatted .pgn file which is not standards compliant start True 0 True False False 5 True False 5 Save _own games only False True True False start True 0.5 True False False 6 5 True False Save 5 False True True 0 False 3 Promotion False pychess dialog main_window True False True False end 60 True True True False True False True False True True 0 True False Queen False False 1 False False 0 60 True True True False True False True False True True 0 True False Rook False False 1 False False 1 60 True True True False True False True False True True 0 True False Bishop False False 1 False False 2 60 True True True False True False True False True True 0 True False Knight False False 1 False False 3 60 True True True True True False True False True True 0 True False King False False 1 False False 4 60 True True True True True False True False True True 0 True False Hawk False False 1 False False 5 60 True True True True True False True False True True 0 True False Elephant False False 1 False False 6 False True end 0 True False 13 6 <b><big>Promote pawn to</big></b> True 0 False False 1 button1 button2 button3 button4 button5 button6 button7 True False gtk-directory True False gtk-directory True False gtk-directory True False gtk-directory True False gtk-open True False gtk-open True False gtk-open Default Knights False 7 Game information True pychess dialog main_window True False vertical 5 True False end gtk-cancel False True True True False True False False 0 gtk-ok False True True True False True False False 1 False True end 0 True True True False 10 10 10 10 9 4 6 4 True False 10 Site: 0 1 2 GTK_FILL True True False False 1 4 1 2 True False 10 Rating change: 0 8 9 True False For each player, the statistics provide the probability to win the game and the variation of your ELO if you lose / end into a tie / win, or simply the final ELO rating change 3 6 1 1 2 8 9 True False For each player, the statistics provide the probability to win the game and the variation of your ELO if you lose / end into a tie / win, or simply the final ELO rating change 3 1 3 4 8 9 True True 3 4 7 8 True False 10 Black ELO: 0 2 3 7 8 True False 10 Black: 0 2 3 6 7 True False 10 Round: 0 2 3 3 4 GTK_FILL True True False False 3 4 6 7 True True False False 3 4 3 4 True False 10 White ELO: 0 7 8 True True 1 2 7 8 True True False False 1 2 6 7 True False 10 White: 0 6 7 True False 10 Date: 0 3 4 True False 10 Result: 0 4 5 True False Game 0 True False 10 Players: 0 5 6 True True False False 1 4 2 3 True False 10 Event: 0 2 3 GTK_FILL True False True True Expected format as "yyyy.mm.dd" with the allowed joker "?" 10 10 False True 0 True True True 5 image24 False False 1 1 2 3 4 True False 1 2 4 5 True False True True Identification False True False vertical True True 10 10 10 5 in True True liststore2 True both True True 4 0 True False 10 10 gtk-add True True True True False True 0 gtk-remove True True True 5 True False True 2 False False 2 1 True False Additional tags 1 False False True 0 game_info_cancel_button game_info_ok_button uci xboard False 9 Manage engines dialog main_window True False vertical 3 True False 10 end False True end 0 True False 12 True True never in True True False True True 0 True True True False 10 10 10 10 8 2 3 3 True False Command: 0 2 3 GTK_FILL GTK_FILL True False Protocol: 0 5 6 GTK_FILL GTK_FILL True False Parameters: 0 3 4 GTK_FILL GTK_FILL True True Command line parameters needed by the engine False False 1 2 3 4 GTK_FILL True False True False True False Engines use uci or xboard communication protocol to talk to the GUI. If it can use both you can set here which one you like. liststore3 True False 0 1 2 5 6 GTK_FILL True False Working directory: 0 4 5 GTK_FILL GTK_FILL True False The directory where the engine will be started from. 1 2 4 5 GTK_FILL True False True False True False False False 1 2 2 3 GTK_FILL True False Runtime env command: 0 GTK_FILL GTK_FILL True False True False True Runtime environment of engine command (wine or node) False False False 1 2 GTK_FILL True False Runtime env parameters: 0 1 2 GTK_FILL GTK_FILL True True Command line parameters needed by the runtime env False False 1 2 1 2 GTK_FILL True False Country: 0 6 7 GTK_FILL GTK_FILL True False Country of origin of the engine 1 2 6 7 GTK_FILL True False Comment: 0 7 8 GTK_FILL GTK_FILL True True Free comment about the engine False False 1 2 7 8 GTK_FILL True False Environment False True False vertical True False 10 10 10 5 True False 10 Preferred level: 0 False True 0 True True Level 1 is the weakest and level 20 is the strongest. You may not define a too high level if the engine is based on the depth to explore adjustment4 0 0 right True True 1 False True 0 True True 10 10 in True True liststore4 True both True True 4 1 Restore the default options True True True end 10 10 5 10 False True 2 1 True False Options 1 False True True 1 True True 0 True False 10 True False start 5 gtk-new False True True True True True False False 0 gtk-delete False True False True True True True False False 1 Add from folder True True True False False 2 False False 0 True False end vertical True True 1 True False gtk-cancel True True True True False True 0 gtk-save False True True True 5 True False False 1 False True 3 False True 2 False Detected engines True center 500 350 True dialog True manage_engines_dialog False vertical 2 False end gtk-cancel True True True True True True True 0 gtk-apply True True True True True True True 1 False False 0 True False 10 10 10 10 True vertical True False 5 True False 10 Base path: False True 0 True False . False True 1 False True 0 True True True in True True True False True 2 False True 1 cancel_button ok_button 9 1 10 9 1 10 9 1 10 9 1 10 8 1 10 8 1 10 9 1 10 9 1 10 9 1 10 9 1 10 False Filter dialog main_window False vertical 3 False end gtk-cancel False True True True False True False False 0 gtk-ok False True True True False True False False 1 False True end 0 True True True False 6 6 3 3 3 6 True False White 0 0 True False Black 0 1 True True True 1 0 True True True 1 1 Ignore colors True True False 0 True 1 2 True False Event 0 3 True False ECO 0 5 True True True 1 3 True False Elo 0 6 True False 6 True True 4 4 4 0 alpha elo__from_adjustment True False True 0 True False - False True 1 True True 4 4 4 0 elo_to_adjustment True False True 2 1 6 True False Date 0 7 True False 6 True True 10 10 False True 0 True True True image26 False False 1 True False - False True 2 True True 10 10 False True 3 True True True image25 False False 4 1 7 True False 3 True True 3 3 3 False True 0 True False - False True 1 True True 3 3 3 False True 2 1 5 True False Site 0 4 True True True 1 4 True False Annotator 0 9 True True True 1 9 True False Result 0 10 True False 3 1-0 True True False 0 True False True 0 0-1 True True False 0 True False True 1 1/2-1/2 True True False 0 True False True 2 * True True False 0 True False True 3 1 10 True False Variant 0 8 True False 1 8 True True False Header False True False 6 6 3 6 3 True False 6 6 3 3 vertical 12 True False 10 True False 3 6 True False 0 1 True False 0 2 True False 0 3 True False 0 4 True True 1 0 wq_min_adjustment True 1 0 True True 1 0 wr_min_adjustment True 1 1 True True 1 0 wb_min_adjustment True 1 2 True True 1 0 wn_min_adjustment True 1 3 True True 1 0 wp_min_adjustment True 1 4 32 True False 0 0 Ignore colors True True False 0 True 1 5 Imbalance True True False 0 True 1 6 True True 0 True False 3 6 True False 0 1 True False 0 2 True False 0 3 True False 0 4 True True 1 0 bq_min_adjustment True 1 0 True True 1 0 br_min_adjustment True 1 1 True True 1 0 bb_min_adjustment True 1 2 True True 1 0 bn_min_adjustment True 1 3 True True 1 0 bp_min_adjustment True 1 4 32 True False 0 0 True True 1 False True 0 True False 3 3 True False White move False True 0 True True False True 1 True False Black move False True 2 True True False True 3 False True 1 True False 3 6 True False True False True True True 0 0 24 24 True False 0 0 False True 0 True True True 0 0 24 24 True False 0 0 False True 1 True True True 0 0 24 24 True False 0 0 False True 2 True True True 0 0 24 24 True False 0 0 False True 3 True True True 0 0 24 24 True False 0 0 False True 4 True True True 0 0 24 24 True False 0 0 False False 5 1 0 True False True False True True True half 0 0 24 24 True False 0 0 False True 0 True True True half 0 0 24 24 True False 0 0 False True 1 True True True half 0 0 24 24 True False 0 0 False True 2 True True True half 0 0 24 24 True False 0 0 False True 3 True True True half 0 0 24 24 True False 0 0 False True 4 True True True Not a capture (quiet) move half 0 0 24 24 True False 0 0 False False 5 1 1 True False Moved 0 0 True False Captured 0 1 True True 2 True False 3 6 Side to move True True False 0 True 0 0 True False 3 White True True False 0 True True False True 0 Black True True False 0 True stm_white False True 1 1 0 True True 3 1 True True False Material/move 1 False True False 6 6 True False 6 6 3 3 vertical 3 True False True True 1 True False 6 6 6 6 3 True False Sub-FEN : False True 0 True False True True True 1 gtk-copy True True True 6 True False True 2 gtk-paste True True True 6 True False True 3 False True 2 2 True True False Pattern 2 False False True True 3 3 3 3 scout_textbuffer 3 True False Scout 3 False True True 1 tag_filter_cancel tag_filter_ok 3000 1 10 3000 1 10 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/about.png0000644000175100001770000005261614614030313015501 0ustar00runnerdockerPNG  IHDR#ZU1HUUIDATxtgy)eɣF:ʼ̥yYomɶ{&9|siQCsR\z.&Rm\TADP46?\7O暐.Jq]mh)bMos+ C3gs]< >pT.54p\x$6;~ϊ b.&8'm.nP_O0"b!nWկkcAl4WrMăj MA":&~[S%czdblnm1]26Ki%Zh'es][1b,\Fb\!2?,>[FwIkd4GdN6,![lo+.^T%~?~GQM8Sgemijy9"AJtq@gmX0!drM&<.TZm 8=C iS˗ff]L%ň@csxKq>T!2GKy?mɑi&0O[ SXt(D*v46&w Q=!.q.!vm} ֺdUT3 'ӵ. ".aȔ ?[a Q|lꕊ}?Dbzq!sp\(7|%)Ut#e<04bdy 3؃ MPcTGdBKVN#ksuZy8qO)ysP:>:8QTQސ!-"IjKiFM#:-A'a"nPT:L`A!y.FgǁFaTLJFYBR-y|7Dģn THC*}MQ]{"󌝴AX%bab-nEru7Uwm%<: vb^Tvdk)j.|Dž+gS&~VOc[ld=}l͊Gm*R1\}5g٢%$Fe[}¥#?4 {Ζw-ht=c$KnϿ&2Q9⎹ BR55x6\s{~Y:LTY,O>Ӻ/! ^ :}fۆ+B9Q1,HY׆rx7ew>b=el)0GP?P9E QפY1=y ]|d)IF,Fז F0,:Qݥ ѸH=B9~-YYv坲V}ckB!蘡=ƌ;QbutzX2@< ` A ܋uO)ɗji5l1dⲯ39Oźud|!UQkbt"jW4 Vb9fAWb]}g ASG}64zR r [*vM*s׵ʸzoNa/!]*终y#+rD/hC?aY*yh~CC3<'WZ-{޷eB!(:dxq<:';Ԓk;Kd˪cSg7:TY +]؝U"(m.w=$חS ^+ږ$vd2xtiȜnGH& V7g,? Œ؎&F#h=LmgJ.Us5m)b{zY2k׮}K}k #E {PCQa=…%<& C.Y IP{qX'A2 [6 v0m^$/8'^G/81h+Gezj7( ;5m+FFm[~"<(D%: lu߱>%'ʣ %Zr/_ј{A.\zy 8c3.>烌 oP"C2=@YDz[WPa2l1Mz-cwѬ rs@¢ąD /8Є/dD->'@pMȄb0o0Oy;a/.5ikbAnaP@$IQű]~NmsP/s،[47x:A΃m7ӌ2pmKO[G_D&9" %t2Eׇ:-s2=6FFq)ҭ"iEA>UE׍ڰ) єZ-Omn\[:7ܯimSh` >k{I6X_R@BQWꂄ uNUX?߆ fvٝݙ=w~y dG/ݷ3zik!~{wzdW`y` >p~Z|VSh% p*%Q~nD$OS5((z*@`* 1XI])]Jf6ee2ޙj)#}"Op})s;:}It<@YAM5XP ӼQiT/u3xy"os74d9es\ղEp2!~A׍4NOdn15Fղܑp?9%1g`&ƲaD7L+Z_v^*#%D?%%z^6UW8؈D]FbJuD`7cjS ^ '`*U%=BrmE`xؠƂͺAx,vq D^7_3eNe&fb|RSgԇ֑,D#4Hwe6eSg8_?&+GDuE5ڵ?ḍ"La)&[v=aMFe6e!e+ ĶQ\`!xXfL;jvY0WO@6\fG=x?bKA<"PtRخoX-}0许5M%hA =@ދBdi*Px@sSuL磣&LcʒG#ec-[7~wjWՄ @F=1"߈ wSj@.Z4LhS@O5^wn81""s:u8hSh h , daŧ"(7z9iXO(ݟ)ҿYp#*%3IH(z ){e6Ҹ=?_ePw;dψH9*g0EԒ{QK"FQ )oDA`a) K>SF-QO q>jiC=6J2zvhY][ q~ߴf2(«}x.kT);˔esde?<PdD.fMIutBaW:Y.W3Zh%5Eڥe=3n^-#pMphVQ'-+B6i giM _s)$S}X @!^O}N z\>S*,>i 邑+>C2m&=4 'I&Rw)߸qق'_q(+O "/2en$Z=($*;^Fd\ 5 U6.xg{pu;@ b&tL=r=} |ƈ:ǡd՞H׳1Gnu"KBJmq))K".jJtR<C55H{-_htk |Jn6nr.LleФ?jni$ZDxC&} ul|E^mn]Ac?_%j|m+eҴ+MՍ~0,^4Fe5#8p/^CCD2x&( PEW {cq "}Zzmxk\WfU_s3 _~y{%o.fYODZ}ZxGMcw 6H CBS1rx}~9O~@*7c׮nBŵ[lӦMGb+ RfJS`@lΨ}.3 m\yH&5ZE\(( VmBu<߬+of_ֽ.tڐVk aU䓥BCN%٫{M_DdZ-~(C}H&@)!j,­ؔß͛7s_Z}!"i3oW0כOkaPTP0g kQmE4"ʒ &@=Bks3h`Y/Պ8 ztS:-x12ؒ`쪅Ԁ/XՉ@epqĝ]w* Jb(5cl=7?L_Z$75TdɚtgjPՎ\qL*c c^fY0([6jҿM>8l'Y'f,b=&:?#Ij8 AHYAF5J~O ..d=`[#%lh-_qm󢹀N@ [¬O OZܝ%)+^vi听^bX#m*[8`av `bf`p!.iNBtbYZ|HMm&cJ׷2@xku.p˞( @GQޫ4D3H=rZ{,׍<2d6,s33ؿ#JE_7 ёk>aF^M]nk鞀;2aӶ9): rnQ_bʢ>1#}ݨ\D6ݵBҊB4 #σOH'߿F3:%Qd3I6R~LYtFiu#VE@+@sit${kOE;RHkSߘR?JcnwgN;ZXҘ2FpTiE}UR^'Κ3KhGjK=^㈈1+-D<xP`-1g8j&h.頁s:| 3Bpc AR,:el(VeNzEٿu ;lK~7vc}^g$|Á&a%䂸xMf7nJdL]F`,֑΋ͩp\M1_2/u7/5rI^dJ{gS.rjNJc-qy HCKfϡGJG :N8@Ð|hp]H4o{BaS[]GuheL͢1yH-Y.u[/FdQ= bz )].4~R[ZMӔ zrOGdduHb(m~rRBȌMc Znf03 , nv8V1]fEj]62` $g,FIny"^|\d~<ՈҌRBQ,O-fhj`_z|`=7K+"9aP 4HE^+ق4&CXQb59|:D߼e~("ƾWL'"ƖwZw9#wRh$! / omVp{?Uk}FY2A7c޾{ 0kVdq/7.lŻujFbY$4lMu9}|8 ')z-Ь#0>NΝʦ <=h^)]jUDbPؖY+ wkZ(~K|8 y5Hu $ _ijVv n2k`wM~~>gk^,=u6ϿmkN1eZIE1z&6֔ CXE#' =;%&e$f{NXGݸ8_1%oKǾux^۶{>f_q]kܑ\sES?\~]=md7'p,.N[X?N㽞+jPߒ }1ZYi'}@3e7o} y}G6}}czZ[1.@M6weF C~mAܼ.;rM ]-<`V09PC?Vn/N#8Pܣ"u9^S˻S BGO@P-:Enlz|݆x`tOo>on4'Y)qG5ƶi' AGS C @# 2Avm4>l8&"+V ѳ?iv!|2!~ۦiѳIϟA{a\d4Pk¨@㒶|{([he $kbzZYylLԃ%p7mHKD Z#{PӉx"Ht6 ݍI#*Lm($^Ӓo_ze쏵?K|ƵϿ܄b)#yC"Ag-CNy,E%"iD/"Q%G&=R! D̯\%>z]o_5IkKlYї<:b 2H4x#-:ԸQѝsص9(%8@ߏyԊCxjɲߕO >dAE}´)mCB; F~M`jl6]/@$FS|m5)KSI7!6FAGP/;Lm =c|=[)d[>6oaS^MZbʊ2N2hQII=G$ *4HA裡o3XdQ7[>Lv]%5$Kè,% I{j{ҴQJRDRC3]y=Ƕ<`V("4ϩss,wf)t6 4M}G';o"Z=w'j R/uTk!նVOP1ntج[){11YGJh 8xhUaƥ'8J3 vglϋ0ǞYaJ9E܌@:Zl,/2pUˤgu u,/]|_1 pSYC5e{ݏ:OxVX {%* ]:e>q$"Yg5D@ mѩ>tDog`tL]R S0[n^ږm~Y)nRk>UxxHDFO*4HQB:13q`o+7*1EjEZKl)J=ODhkNwh MD٢/٢Jۡ'SSc0Ks`oPG'pq-q) 'O᫤QGd5tM AF^$#/`/MJ^InUj>:3CIGT@a0ߙhMU8AKcX}Yns>" ʻc 5 Ð{׮ lvmx]LnR$GDACStY}1$ퟁ5@G] dnAmx׿ԈZ)aGm}Ñ&iq-F H1':bT͂UoV~X? 1f[5ieh峈v70RO"# :Ĕ)D$!ª&?R(<=-qؚ5ǖ>j<"yRgAfYw+V@[\AT|'][[TC^\y;t/c(A6"6 s -,PlP Eʣ,t#0;Qv N9"Z+ׂg`d!<[&g~IuRD6+vA΍j/-TC hO_/yL~}PΌ_TԽX͊6s(`5wF Hܑ33a.uyG"xmkkjbம"v4ݠsr|nŠb'mW"ԵDF%]eLMXPzfI]#B{,;RODd/4'jRtvjGQ7o?|ѷQsGdb0ҵSy;ǗLVllU%&͇M\CP>Ϣo1sB Zk"|_g)=d{DppA\[uӰf>`eoXLJ+H[NKeO<+_u'wKG]'ט=$hykCҧx[,6}ke8MFOa8c_A?&`ԔrlQg@fAXp䨋H.Sc{MNd5!*[ o+"b& BMa$ ~!#!CM XL'h(>_pU|G=LF#pWt (}=혤) Y  _Vȶǣ]:E]/uiK"7# ^5]Cj|-}o7;$"(*Y@%̤P[T>y=4bsՈQspm࿂t`P{(_ 8S93Jϻsi@"1J7ZW:(_/jPq:n)ZXN*="Jvj$#A]l &\~ J+lA9c_1rFIQ2i>^5՝'RMo?#6 M,VY(?*j2I4"0 ja":SNY8M}#zA"+p뢋B^"'V(g¨.]r|gKj*$.xha"6QNm+h|}"Q94 ]-k^)sG_j#~8)hBZĎSFb^^j< Eh-ݳ8FJ !gE`X $ ާi}5$;MQv1uv>Z]AWjH"k5ou,B yD ¤ g!בe'_AB>-ʂC{}$#Dh}ZH_@SQ |dQY٩U;8#gDN>2[x;h wˍ` FH&~%DݴOG 4E )Ժa1♢DOh)]Ll_ftFVhԚ7kN6 (HDEb&'ᦾ 5qZtp$I f,[\7JfpK)Ub`%!4reMOS|z [G1aS|Q@ѡĭ(=E[gZ|ȜNסw`Q'Ǿu$c0t+[D9 (a5މ瘧ݘ;3t+SܑIfhemXbj5pjUZHP\ Xt Pql \,vOΜhE4+Y =i"z݂p`]yb=I|RuC B1ÎNVkBt:y̌FD\״$07"-Ôva7";4-[SFW?&A~'}| (?):n0_8ҶGT_ciLҊfgOg:$Hkhz9CJ&t-\O)eK&ӧDkn0D=ԯԔ.8v.%S.ּ ZJIB0V~W@ɽe|3 !B'# ԀQ9ꇂY 2m0u65FVqcw{sLw$;l'S{Xd|XMQ+H_q@{%p< ⠘% I{%A~HTߑW@[3L2W./ŠQuJ`_tms%uTf͒2]WHr1#(4bSbi.e`t_ H#޽rFY3;&:T- '5Sa4)d_VCW`4hz%v@(+5N2ufDF WUQQ?ǸJH\G4ZV[Gx+#aU˵$N6F{%aN Z'2'6êZ}]tx֘m_ecW,HXErʗ+D;m޴NdJnkv H ='`sq,rgu*+  !!]dK҅CLRKjJed ]>uמCb%U 5U0*Yb{܈"9+D :p8 :$ [p'@Zp.x)Me;P(*/v~% [|Q,p+(^_Y#ONuҢ:ѱL$@z"=7&edž}fr t1 my(r&T}![w!3a4]Q" )~U㯎/C|80'٨#FE#1#Q,ޠQUDįǢch̎A'#%g5Y0R(E֨H+4.ϗy["yXFi  Y7h<-ԯW4A]!*Ȁ*XN/~rb0,$ e^+36)m1~އg1[)Ż =9wW)l -T`(@d R]D-Bk8.1,*e &Gm3t Q!q3ȑGbH5[;=+1oJ)wf҇hR:!US$Pp:ViXp|k(oL 0ËU\@U 2,ݟ~BmOAƟ3Ӂ[R VÀPv ᓿq1OkTS$R H腑T'GE>kTX,BqЌYX /2{~%@Óqhx0YmФ9j&Q]> ë F=^I͏bw/&WH.&q뙍=C/!H\K+W䓡s؞4vf#]ľ_Rɴ)z Jfi%Jv,G#R w;k[JAvfHC  CgO No >ߺ0ݗ fai#Ȑ@b@`僻 !{5'ZC1#}fnY_M7DG@Ѷ=vf692E@HXJ,FtKAEUF,v@JItVk3}bT3\bj2yc{ThOю߅,Sq!^ ΣYVt{nXoqňM6Rm Tؙ9۰8*YLvRhN*fPѓFh]Yά,tCG QP7 F) bqQT9EF,NcNMy@}2Mu \Or''B n"cI6+3ҙˌ8nvh9"QJ."_:M,ߛӦ9np>ssf%}I2Qij=n!|x4U (x'R>!1HFQth`}`|}8oNqƽ"( l+ӿqnj\F np|cvTd/V9'Cvzj? IPwGg={%:-;& > &c0* d@8+Ѻ`Tv³EY q=] +Ktd2_k`J}FBb#|~ d1݌40H'Hv;hdiqsDqNI'B?LOi{|jJ[ SbObw\Ѻ)%SX+Z?S?KQ?bmTzM֐F(5\&]3ԫu`, m,=9>ԨHQ3N6A7\r1F{xF&_.ߕ9t ?D<};ͽBFcT;k# Տ4E`uUu]+8 0=^䤍* ,ՏNf3\V,PQ>Eƥ'PmԤsDz!myTjr_[KNxݨ alK3ţ^9Rqx[YCp`b. ˓XXk}{衠x&ާPe')Ïy 5bjtxd=*A'$jE8   #pjXֱv)#<a Fb$E_xr v L C txx,@p{?i4=lwC &-t)\vH\DFkĐzv4[yx:"K׏tVB4[ FEyy*A;U DG߀@*)o;u4R.DQ;}ȩsl`6*" $K%(Hul6H+7("ۣ(ԕ~/Ng:VMUS f0zSm^ecPu"g88> }w!{2Q)5gR*2zhNĬ@?2?ח.H#%XP*~QΖ` ;9zQ/_?,Z^B?t@gzP $D6*!}o zu}E?;1*^lLvzݘsv O_'PS3aK=I!WV}ʘ` CAQPpLMt"3uԋr!( eG۞8 ClEam){|CF+pC6* (+BlH 2a:ӄD5f|y#IKc鿿v+ {'lR8.R Jv)N Rltе\s$?D7LNv$Y{DσO|TO@: XGxySS5i@?J,){FԘ@$SDThfx0wV?c.s`L>8Ҳ}1SdbXAʵ=}jTqF!"H]Jlx%o|_y'#k" IsZ$F4P^ZM;(=ґNYѵ5Tl>CӌMd1A v,l g Udzo1x0勅L`L"@*rmT%ӜYC],^Y n>u]yùc9m&r(:8Rc#5OB9!zB)ұxDfK\KJBW~Sfz[TP,47M6jToQ[4TʕW,nߏ|tfXP\HMiM V;QFUNy$?ꃥ\1;=rL0HnưbRјu{UIa:V7d9+tͱV);TX/:KՋwqz4.\>tƒxn? GV e$sAK4"3Ў̔**% î<iSlsL/y&dgN6 %ySZߏs=oFFWJjЛ9W}te$:GOQP?;-(QU9ē)1'$͒U(P_ymAϻv#jT {vV?kqQC7朮Z7v0HWh  $ZZ{&o&vX(#%ZkDL5hٹ7h!@١Frfvm3ʃe Uᒽ5 gEb] ﹳ;ƸYĮu}(wXB$+=si-b9'!nt a?˯f65WJ߀èZN:Z/_qY g]&|-f p7Hح oeJi_J5 =oJ3E, è|UGCv\K"qb]؟+VULyhi ;8 VݏHz{vCIYyvCLIƟqաn_I#A;kYMl;Oio-8]v\~pU+O~\ICw,mOw1Һ3(l~{DyWۡve,j*[cqS;lBl]EI˞x9.{dZ"q5{9/7dVIJ-j%٣(X%: :hX́vá^$νP 9TۓC:`i]pUܣ;2_j:P5<A!D"?#QTxn=sn4~IN`?PKݸM'aTd|3=)2:V+TI_,;g.tNТ헚ܑrwy 2* |H>B=FFS LCUf&"#Hu׳ij 2*?j?Ik<-.K 5,w xt/Gmnv?>w!ߑS@Mྼ͠{?$r@'/u E݇w-= sN,h\3@ǀ|-9jKj L=[qw-8dxFetO+G ?%fpN%pE}_?iCNp.TxmzPu'u5~Z;pB~҃Y mNc;V:iFj{j_HSs(N+W\[#Y)SKnJGd)SK˻uiJ]/@ b G@D`(PBDaPY%p; ]in~ 47j..U/}O ;312e6kyT^J]^?"m>E]1ԑ, =GvC/f)SՔz-r=LJS,^֧ujJO7 !fu^| ۝%ʔ)p 9uʉ>bF̴W|S;97o7S̉F{J4EPzw9ݸe7ͧWJ-3e\Uc7hFRQj4A<-Go4$Y2e8ݽs:;3唬gEG`% K鿧QAdzfL_mȾ"/,m| [9^QΚ_t7)Sخ!ġ˞3c?8ӔRݜk1tHN:'{@{y=Rog#:ȖיΙrԮSv ;+œ=;h{2`'FIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/analyze_game.glade0000644000175100001770000003627014614030313017311 0ustar00runnerdocker 1 9999 3 1 10 1 999 50 1 10 False 5 Analyze game dialog True False 2 True False end gtk-cancel True True True True False False 0 gtk-ok True True True True False False 1 False True end 0 True False True False 12 True False True False Use analyzer: False False 0 True False True True 5 1 True False 0 True False True False Maximum analysis time in seconds: False False 0 True True 4 False False adjustment1 True True True 5 1 True False 1 True False True False If the analyzer finds a move where the evaluation difference (the difference between the evaluation for the move it thinks is the best move and the evaluation for the move made in the game) exceeds this value, it will add an annotation for that move (consisting of the engine's Principal Variation for the move) to the Annotation panel Variation annotation creation threshold in centipawns: False False 0 True True 3 False False adjustment2 True True 5 1 True False 2 Analyze from current position True True False 0 0.50999999046325684 True True True 3 Analyze black moves True True True 0 0.50999999046325684 True True True 4 Analyze white moves True True True 0 0.50999999046325684 True True True 5 Add threatening variation lines True True False 0 True True True 6 Colorize analyzed moves True True False 0 True False False 7 Show evaluation values True True False 0 True False False 8 True True 1 analyze_cancel_button analyze_ok_button ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/background.jpg0000644000175100001770002111246014614030313016477 0ustar00runnerdocker?ExifII*   (12isamsungSM-G925FG925FXXU5EQJ22017:11:27 12:30:37HH ("'02200D X` h px  |b0100    2017:11:27 12:30:372017:11:27 12:30:37lddd ddASCIIIICSAIIA16LSIA00SM A16LSJL02SM 0100  Z@P (v;HH  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz 4"@.0&4LCPOKCIHT^yfTYrZHIijr|Qey>"">VIV! ?x7R4q%d 8_w4[ jaBQ@-R!i1@ 1HP-1Z)fPSfJ) J(@ 4) LRRR@LBNQb ( Ci) ަ97b)I2aZřIG8QTHQH  Mb (LJ 0qXx Ҋb&hȠaE!4jLhnh!Rp Zb Q@!BRCi)d4tHNCTrBܯ%6;;K7*qj%+24JZCE!I@ K@ 3@E%!h.h 7pjC>)-4оe.w) 4;I@Z((b QLP!(4HchQ)xl-IsBI棸o;Zҫd YJsd>I PZ(4s@)wRCR昄4Hho4CKLҁLB mzx SBa4-PhicE!rOJ yA\g"oZ׼ƹ\d8kC,c ^2kc"ͼFw6wZ()1qF(I%JnȰ8↬ 6] RP`SJqi1)CR 1 C4f 850 1 KLAKEEp%R!SSi CM4R3)Op*7 v%)@?Za֥\#Q,@N+x- $:.HnTrU(z ƒ@Ep .^I''h@p3] 4KpóFi P—"+\'hy!N) iF)1&wo;s֜vId0zv ބ>d+1i_ZQtÐKiDQ aԔP)Sؤ 1 4CM&hJ)dGTY7 OܠdLGG2`* T,=iԏj3;( Z(D#$pA#G;l qښT5sjeÌIqվY( w+l'5xne_)WTbT*!&Nf(ޮ-#7ɢGS{zewV1I<Lr/g;NmHo|35B4z<*yzcByC3zfO1i7+{xv; h}M n>& яEHHBS"p4LC.iMԹAA564P"2`bF1Qޡ)#$ R0 MmvbC HE6D <} UpNjbqE2y^dMv8Rƕ2;Aa-ZHO{=LD#`W T2@hɫ$pɩhBcF)a4RFi Piy{M37N+&)cJI Zŷ(~p~@֫c I>)WnN)Z/m:ç,R`s>'%2 P3%ˑLFah#s*_:DśNZk*3FؐC)L(z1`i~=+^TeƵ[zT8ؾ} wHYDoF:k rJ6J<+Cpd'+cV2V>ҧݏH8%Js68S qJV+J83hLt4Qz}Y-l_P@kT`džK&QOD E0 JBqQLhJ Hҁ@(^5XDlt2UZV"un.-2:>Qaf~1C$rMY'waH9ZJ@Gg"-D U Lo@DӗiMcPڙ7ڵdYkʽiGMt%dsvYXw#UU<3CLu4DJw3&I Q(E~w7ҔvD*ጞD2@S (ULTiЏVƚ]W"e`i⨑sKb  ajJCCs@9GeEd*j k$w{բ$g6A$g 0I숻;N8ڹ0_!s&eFj 4f X$;9DP3Q3ن*+Bu6 ]jA3~4+ t1 ~\ ¡3>orasQޅ>cV|*gҺRD]TaoAMkXʹ" bT\9"I-] Dg'ER>eEh48e;iH%ԘS‘lr)$Xg'٤ޅGrNE:^WCI3x59ؤUk8ª;Tn8gICOuGI+B=JEbSvǽheͩ4QM@ؽaИ4-.hi z qSflZd2EM|@K3VF*ՙ!In[$ù׀1IT 6Rm.aqX3XW; b9Z)3XXe׽%[ V1jF- Ct%⳵+Ѓ)Dv\] W, }pWҺ0tN%#jʁOCXT]M`ީ͵.8r;+65=Ktf 8u5mѥ)Sjp J+v9jkLjgNˈCuƯbw)=ûnnkK7d+} 4&$huumvzPifF) JptTT\x" +yh<Pqjn<,'J*ir,MonH@AKlb`Sbc`}?8Z,3Fh>\$ΌFqB6l@1 #5wDl@8?Sbu# c#MHN%iSZlk6SQ ' 1Vb*eUjΟɪR[rW0O5ķ_9uMROc2Y ώp[x&']Qf OC*|vdELC67^ZIⳎŽkيl+y[vFJZZ4}+]/DI>=vNsYI?Js늲8DCHxU"OTb`ttJaBNh@Ii4 )Q@ih~Ete$Sؙ֦pzS &b=w<P]I35=+EC'ܤJg(5/G0r)~"yu"~q:18 نadt$p(sCe$;y(jsE4wd=UneS$5IZ} ]T}5"2WNV`pўaTɊ$&)Tp`"ǬWN[G%B?Z5a4I\yMm@ J狱HdHBO5m& WEBv5vexexW#g ^HU ?|(*:Z6MƸ*)7{ #@cKa2xJD8lhY.=+=ueUB=D>#Y%$LqQ9fI!SO \FRYwv mM%X牻n sakB/#䪪 0+<*pY nF8c\Ua2``FfP늰1ѹ#̮ˡ,ss|U5`u'+Ōf1^Md:5d%Hp761SN>C Nfj2TV.|A}j} nڝB^yl87`r Zgz RQ2j6X\2ϘHcY21l9566sg gwcګKvPJ""AL mmqENs*RZ(R} p$Z1]4)(-A,:*+?'֜^hV/"LKqo} x_$J& ڝuZث\wWSb)LR 6vU܎Pf/(b{S$ K~.Wkc58*-@muIZtIm囹tOC& I$?2Dʊ`$ )8k07L{ Z7'8\5oRP6=֝;Aj SxjW j{.qRFN']v'S!/++38Jtm#gqe{+X3 `Y֙5F1~#Y% 60MejkV')%Zd;H8g]'Xd}+hs"jȻ}>ҟq";+;A۳z΃UkY世Bz!9\]QX \ <[GcTcy}^ڊ,ڤI ƃ,M\Irǹȉv=j'8%dWRg#H(:(!ᙼ\c9VnSs"YLkm. C'54Y&3cY>EzF#*)=n:Y<<8SV,i=F$4%L4+!)Tmeqt-BzbSR0Aϥ ZXWm\Y0t`÷cMw+ItlRQw k9"tVX-8_EH\D)8DO/ FjiF>L(Vb@[,5sҲ*UEG!Ȩ,NJcw47|. ,+ [T|ñ*\%m;"RL h+2y[?0L֐n HnfJH#bxOj)0"GHFHy&9nS2Le[B1ܟZV.iv#Z:׊OaΟf5"e5򕉥~]Q+H.M(A;H69E=#L{q' j ? Eےu v1qtJy\%c&&pFxSi-b0kGnL\ۂU>-rj*Mr{i,Ld)Y)X-LK_6lN9lf7S ;p?VWԇLK|8[`WD3_S*""Yȧa^ %P U6GR=kҢ8=+9f\g6L{R]BasրGZ3(#zhIbFRAk'QIc@TgRk`qL/r?弮;ٶ̔Scoc_Mmved:7.J r@5%O380)?#RV. ֭ir0h꧞xNKE7/\Ud1w4ޒ9MV1ڵgʊ;R\rWL9 n0)v5&N3M EN]K;GJR4Q!1TI2GXs+&vʟZ]VESJtUɐ~04cHrwp'eqSXԍѵ)s+3}ǸĨ6*v6>g;$}޹eJwW&A(Hㅈ#8Ty;KR#yՔ|V[P+j ȠޕX7@.zQ]})QoxU $TSbBɌvl S20]5\gS%,as moUl7bAfb?3n+N@`HdQ4]6$X'85ep ]D_QTҘ@r~c.EeF)⨠${SY2˅QC@BaڷdZV.JⳚ\_C$KPxzb0BҴL͢sS}tխ0;TTq$|!rXõs^"{Zk"{fȍ3L}> GjEyX猊nّZַ&PN8S8q} *'F5tl5:zRإZ8-$`mN (nj^NF")<sMW2|zTntsRdְHn#Uʅp-D]暎oCBRG'q[4bAHXưQ;rqhAVYnc=hm4!qkwsW`tQDy\$ܤRRA*t$SlDmFBsFғAH0Op)s1p0/TMyrǙO\E. ~WpCm8M6I#_ެvyjFR1F3#?MݙFq%|ҫFMi;䚧r@&@ORxʨzmboDEޑ(I[H􇵐V%Wkji`R 4v%3QpTqcNH0ʫ(RMWgOQ( "SS)\mYN\*IwG̾SH5r.zwLyidfg&"1Y73Mpi34lCJ͒FNM8W$G1f\5+պe-J_6r{Ǿp3[Eɉlf]aPrU!cF%HOOjKs}-tp}aE$[hX\^>v9ⷊc)2,/4LU4΃O}n*xjJ茮rznsPB2j}bp*^7!/JK]/&X/xӶoQQJW<Zb.&<®:եr[2c0zdSYrzQʃa AFSpu%عًirI!E J\jIH##rDD?[P"ʬ:ucQ vfnL(`K|qrBs0CWY)ǥYlM:UB\JA$G wF-2ZSqީ]ZxnH6Ղ1w44wGW!qZ?/Ep~^I69!N>Z2>EF6S_t~'ϽkX"HA=9'v>t":=(xY93N'oƴwQ\#fwALOp3Ax8+p"\/U3`O\r*Lw=_TMjF2ٕb1A4!$+[f׭D)nt{A\I#k0U,;s\2=k2;Cf`G<}'/o T!m'z|=EbA'n+fX68YNJ5^9#zHGj IguG8Vu]ĨҶ;eyU)p zW,t!X'R}X&L"ZJnǜYJ`Z YNsڅ(L+*1X T"%[5q(} ;W"m,zWt<JT9O;\Mإv`$c2 fRIsnsEQRNyd:EUrԻabYnQdT1l[r5[Nw*vlQ*F&mX[Hjɮ9KJ%rMr U!lUIW|Ք9I'*퐁? jM6-d 1;BQfVԶNѪj9X9:r13V6Z婹Ob[F;XUght'XfRٜ/q(HI  Xq]G!-iZ BǾ̪O;Wc! ZVP9"9NJ%-~8cxU>QY7i$F*zn)!Q ͞N-c>ڰqz'ʴ)DJbzZٿ;EQs JL:RH sNm4~Jױ|UjoE@*zH+nv2^yUb;甤`dO. >R,(od+-Le2OI"u *zvB9KbA՛e'4/c?wqfGUT)7ВD ) ulU 3Wy M &ƇAK?ad.4ݒ7Q(4Tp=dB~Xُ(5/[Y?,PvU`H:rz1m6H#$cZϿ,s[t1FgVQ(qSB dU֘9HRj7w3YOcXn[NXl($\Y;+rbW1ߵԼ(=A^^3z ҬPTlio]y!#]準+wl8ftRiQX/ FɀpM-v6_$2 zJՆPEsUS-/`M#[GqX)#k6m8fr֠ [32nUttp5&m5HЫ?ڰOn=lcM2 $T#Rx) eIm3hp=l.mF)qH4]F- gn1Z7&¤zSZ6C@kuu#4+(yh39mSb1 C9Zq?:jF.ydS w#~بaNJ6=EY@.s1@hX(>TM gֹ&o1|}YWlH51ve5tQ0O8>?Q]Ji1d߀4ܐY"]?TS&;jsYE*lܱ~ b kTr4PHI#}GAXs1Y'Y  W֘ ; 8ۏ&Q&>2_VŒ *%hMmC YU zJm'} }ȱ%>l0rWI?kCc}S;pnc\ر&YC5rJN# qZd&;P0k 66Tj:J|Pԯ|"O\v NDρ9m`{@2X]iԴKhUp=<•PHB*WBa6'Hcav4Cv1N`cO?J,,YHg;WK\}xzΤt.uݩx}YS@ʡJt5D,aCHqTaFcUaUhpE [@n~85jiO֥bQS'ˑVo5 o( fMu3qkcNwzt7PHkNbVD$ãc&y* De8P)CEKY?up( ȥ Ϲgo;.+h쭰IFF"RdgHcAʟ*7Bq 8=?Z6P;(q&z3w@rXf @MiZC(XF:vT!Iq]<ɜ6%uND~6+1QKR54y%<2LrПVm+ý&EsG.v0H8RFy /L})P/S]h X -Z3(:2 m=+˹ӚozBsS3JPx@ަ)SBӐ 3׭fCJ0i\0}M79NE(d=&J̔)*KHX5"DǕeCYW. aÏƂ1E7jkp?JPJx[tf {`.FAa7 i"R=6ʧ8T& n;R*rd <I8&zQ@X>R=0` BL=B]M)ި<ӰzHlLzs@BB 0541,w`n|xBb2_LSF1YثpM.\ucUA+)D-> Y 4] g p x M `  q j 6  I g :  0 @ J  / / z S <  l 1w &o ]m Q  dK '* ! ?C6VV~;G W_| aaTe @@V\_@JKJK jo1m__OT]@Hx%޻iN qUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqfqfqUqfqUqUqUqUqUqUqUqUqUqUqUqUqfqfqUqfqUqUqUqUqUqUqUqUqUqUqUqUqfqfqUqfqUqUqUafqUqUqUafqUqUqUqUafqfqUafqUqUqUqfaUqUqfafqUqUqUqf`3qUqfqfaUqUqUqfqUqUqfqfqUqfqfqUqfqfqUqfqUqUqUp qUqUqfqfqUqfqfqU`3qfqUqfqUqUqUqfqUqUqfqfqUqfqUqfafp qf`3p qfqUp qUqUqfqfqUqfqfqfP0qfafqfqfqU`3qfqUqfqfqU`3qfqU`3afqfPPqUqfp qUqU`3p qUqfp qUqUqUqfafqfqUqfafqUqU0`3qUqU`3qUqUqUqUqUqUqUqUqUqUqfP`3qUqUPqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqU $6MMMMMMsq6_v@pH*S[w3_,Tސ? :mN ͐as !a}}*mY?Y'R.'R  UyU ' UyR ' Ry[@'/[y`@'M`y[@' [y`@'f`y\@'1#\y`@'`y` '`yc@'!cyb@'byc@' cyb@'4'bye 'eyb '-Wbya@'$ayc@'H:cye 'eye@'eyg@':gye@'eyf@'"fyc@'cyd@'5dye@'^"eyi@'5iye@'%\eyf@'!fyc@'cyd@'dyb@'byd@'_ dya@'ayc@'%#cy^@'-^yc@',cy^@'.^pH@ Uޜ_I Q N !x%J(*,_0?35K7892;q<=@I Q N !x%J(*,_0?35K7892;q<=@I Q N !x%J(*,_0?35K7892;q<=@@  $(,048@+`lylykyzevtlylyRuZ8Z8P@qU8|xtplhd`\:P gMC  F??HeYHeY  fVS HFS*`VZ8Z8 - -?21973 2016/12/13 14:24:50 s _?ssois63FM02 63FM02 63FM02 0 1 100 2017:11:27 11:30:37  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz     ! ?]rz9g4m`9?3q, =+2eN7zwjpe8$w$~o-LdܞH, N9=jGC&F=j̒M@|=\~u${v,@nVE$W\I9;ӡHȧyO ^d# SAN*?qA8TsOq78''@{ҫ`)3#hIv+#cFGݒF ?d݌Ӂޔ%x#i\4 }qӦ9DA 珔,9O `:2Gކa'*pFNZM#*h$ץ%;`}=:} I.ex8`8;:Ga!s[=Ѓ#9*5y.pr11۷>pVy8(ƒI>!O o1랜QTN[s#{Si1U20FIRw 9ݜA@b3qlRu#S:Kv18OAȦXcG^O t\}y#'xQyR Aa{ӀnJ  .sNx#s 8 ILB˻n`Td܊b\w C}!  >cAҩ2|c%~e=d4c\p: >=O\V:@đ@9!Jzv$*K`J=`VmpcSFh(y:⮮:.fןҷ[%Bx\cJNy<69[/ͣvyxy9U[c;bݿ=}i:9={5ŖA20OpqvT (߹$~* 13ir2>9'zg;Rrr<8=x{ 铎)ԓ'?t`uO2<P^>V'{I?  dk9LIϧ8<{ n:# h> ۨ) ?ʁWܟLOtӎ=9Tԅdq9OӥJcFpG}G$ĆS9$vB:cWszt[qH]E)oG^sKc py>4SQmHb q8ln!z8Y#>Syr@t:QKvH~b\>sg% c1ҘrrzqO\.F ^- B{S#K>~G'=6#p sǷ~i D6PdO#'$Zp0XϥBc=AvКy?=ps9F: L ,6?*U0+9Ҥ? !sBc6{! r;1n{P#ӎRqI~6pj<;hg z$3P>Yp9#󦃅qBHNV%n<20= zZnA39$0^9ݓ!rOO= FF@9 _/bI鹇L$sONi=\;1#*zn@=F0pXcH rõ/ϕVG909'nA8$NzPz NOOs’@rcӚ]OsO\pr3Ɖ?)b0 #9}CrprFO9튑G|Lpgu9ҁ9ݏ9S ?l =3O|;p28J0~qL>O=xt ӜdcwGSR9 dsA'{_29?ʝrxr8iCӦ}p{Nܤdxڄ qg9,қ?gRA7|w=9Ͽz`F0#) ǮH@zϸ 1bsԏOʆ!#}L{R r$i8<ppsz:c=:rq}h@Nqߜrsv9}(yǧV9^N<`zq?_j@/\T~qQק}֘?{1?3N<=dka 9lp1v=r =[HosҔc9\H@P:g#n}iS# NAVWO,}cCb0 =s@IFzc/ʧpON3ǭ WzgKg]xFps~4 dgc4c8p sG'<`Kw``1#I L۞sǧ_҂ a#8r(`&c1a[>b8lm4\H`}(@rzt֕xl`(a \nGh`z@:-x8pSz}ϧ8#O9ITӏ WsOqݺdd>s989,x~n^pEWBXv$}G۽3q?@R8!N{=8r}y9HuaOA' NyP2sB=o;;qiQp ݷӑϡ)ݠ'=TvNlP'O<>)0N;cdoJyy+F89w9 ғ;G|S >l'`n2#7xp9==x1 F9za8G@G947<02z/끊Kp#霗A }}E<9F0>\3' I_מg^:d>bI;~}ߛɩ9ϯlg޹Z=p:oOK/~q?BӯNF:'@c2; OpxlށQcr9?2H{RHdOtǽs6988[Ƿ 01b^Um=}=i3crq랴g)^NqN-˕*ri'`FGayɥ=wJ@q`h,_op8#>6cNp096pz}J=pq޹^>^Ϸ4 D < 9xޟ\|v={PN: ;sϥ(#]9 s#=@'8ڗg$u^@{{9\t?00=<9 Ԏp( y\2x~ S($9C2$qڐ9 l נ{ASzey3}zi2FJHsq$1҂;1܂3؎֨sON=E9pT4',3nytz&,zB;trX20?z^{q~8CB>P3бlM ݓqrGJ( Oמ)ܒAqgPi!! A~R1!͎6@ 6Kc'c԰(}q9G9?çcۭ;+7 :q@$nPO# '|ijS]BdmzgR{@?xny$_#=@_zT`zv71r0?t2$m!py#'y#=OzvrOH7Q.x>cc=1ԟoZB`g9xc;?1#=zC-l3|#n{rM9s39y1矘m|ߓ߷sHOS1} H 9c ;ўO8'y8?Z9 OB;S$_*X-4 ی.1_4 gG. aI<13t- er{`zI<F8+i9'AOҎǧa=\ޞp#9%BFW$ $Oy 3 ѻ#b-3';qI؀Hr}3TmO!c'pڄ>v#GAڃ'Q:S>8AO_ 鑒:gP#N=1<Ofpޜ4Gf㧷?JN?: I O8GJ08r 1:Htk`qO?`O_4 nFGp#is9<L`5 ;~^zG=N}Aa\rOQg O[w' naMl118 >y*s:c~AOq8? ,x FOo>[r GB$&8n09?ZlA{ g988@CŽ##tjL z~HpH9wj2d2@۷MC -9t;lS# td;B3J}pNp08y4(w@럧wy'c \w'*1\N{{{U~:rA2\qzN%) u'vs +GpO"qkdu#\[NF nb2ۗڛw%>C(O#;Ϧs9>JlCH)|; ЄH|`T*~8=Vnx9LwpFz IVpY b;JN s dt=zg``/b'c)ux=H듸ppO`s҂:>v\c\9NG簥W#{qq׭! sds =Ey'9<Q~JLHynzw PqNx瓃~a VS8@'6r77C bl 8tҝ)>㌊d$;$~_n4ޠ98}B$1뎙uF$3{h`'nOB7ppxM$zLI +F;7i{#pƥwn=#}):apH$X >ʀesA8=p~=vF3J:F"z>\}i݌F-۞: 7~^OWT`(c88N=9ǿqҥ#X*[)8'w`ݜN=U-FN~.@\H*AFYQ1^`g8铞+D1 8dz }MmQĎoҚziNU69#ק/Þĩr3#?mdJ $!UpI@91C3}Gch|dbB#oE< qQV>wtĂF 7Ǧ8y6r2K111sR)rC篳E h ʂ99Xzx+ q hye"ÐOHl:8%yϡf=Mu'srh+Ây֜ WRH8 }(HBg ;14qg" }aa)rq˰`ÚR7s p;z~sŲO^m <=yw;1‘CG-ǧL*N1!q>M*vxaN ӷZÈ(30v>iq:0zH\89Rr1=}ѷ=2a&;aݒ ->S0dd rzJ8#>ÏQfqb=:BqIs00;2Azl8bI%p i56 :@q(d}N95P <~^ }A1  }qJM%nр{m' s `15ug%B(㍧Wpo| ؽ'МnOZR{9~}kxlqr1*Fx%@FR'\۷B)@ ʞsF~+D@dp@c< aOpUE*8'F? 4 p1ӊxfPg';f+~C݌@\jB 0w~l\`dqg'^\d'4=n\+$ O ӁӑRuycߧANs=4p1 `;N2QG'ڛ' u#qB:|923G'w= ~nd:|qpb09=sI4cWnpiI}\瑌PĆA>)L6LrI}Hb0@@p2Jr9SЀ=}MF8aO?ң F;d$1sGA:zЄHP[v8jh>P~l9#~d(o €3u/h>i^sI)㟗N@g͜H#Bu$Av'l0HI'ӚHzv2;{h1nsI SpssHH$@ zvbD9!33s UФ7V`SPGSQ2:c47n'%H'$Avw9 tjO/F27u<[@ nH8IJ7Rw`z׭Np:wqr90$uǠ~4u m99#<җ|lp3ӷ BA'FwtǶ1)Ü =1㞔B!W dÂs($#<:? g::drGjB˟'.c=p?` g#|?QKBNqEcJv|,RF wn9?&~ 8Rv27u%q'>ѷ82pT᎔ T/RH끞x)vn@#?C4ߞ<6F?>qԓnOjYHEAq#Μ@Fc LqOowcngc?Zxpz{R) osqj\l\989dX==sqHǎG>`=rL ?C9Ltҙ?Ew>x<~}x@'c>J2H{*`{tN)=q ΐ`:F=s c`r9})g@8#8ϮOO/o8(݂ sLGl;޼qP!3RNt'\dg 3J?Jp}8p8_^˜Tׅ#bzҗ8=sǰsPI8'֗9p9't&x’Tn}gytƅ=Cw`T?7q:ށ1FpXc=q@$7<'+<Z`$9 +ISIG# F8QLBtqG)swv$sJ7'i 16x#>v$g T} w_Toץ`x*1zlϿ:gu:8u3@=8یM$m ۯ#nG;xSA;CGP;F@*F ;;>Ҹ8bGLNƄО3wqGOn(2W݂xs82N?Jn:gz窅`\a[=z?_ƞplzH} { f$2is(@b}zSAy v=y9w9zx'@2==:ўFw< bc뻨z88q ;z=w {zu$=r}~a8d|zLgОGAӚB=Fzr`>}  CI20NG'8#=i-`̾ ($`[>a؟_j }(r8=G1@4(I9(Ӄڟלt :=Щ?xS`~@Kؑ[{'@; ~ONFуnH͊F=y{TFK$~>`01@':1NS%H~$ϰ#$Ln)Ǟ=yn>3Ҟ8=9`s> '9 w<އ[*p8`7:r9![Œ=)G^sc;>4H=#$3L@2II=q)Îy=k8 gn u!89#ӿC)$}ҁoN[#r0H `=}:P@@q7z 1;8pS AGe qݩ3ӯA /P}灁PAZo<?^* N@200yL{dgvT}z4ӓ 9)~RG!$p#5#V ' ㌐_n@F=1I 8'z[뎂įnޑIr6?($m=7wa;N@=@=O) c8Bp@?*R NKҠ=6>ǯ^9NA6 "gO\qסcq8`{Աu"t#;uJonp{ӵy$ 3L׎v#}?z4)9qGnߩ#d𾼃PWA:-߿1T{H<N=!q3@=iێTt#$fs{;n0:瞧c<is|XPq;~Nj?.=s=>,1Z=89qϰ D .G@/nGN~RqA#<99bySx^#g<~49=ӺeHNddr:w`tO{nLU' Lu+i:}AQX\Q:@ $ 1>vH:g+d#TpApCd}=;\ףrG#ǧM g;FQyW=#>]z$#=yAmk^UcOsvѸc ;Prqˎiw<Oq{u4zpFz}ښ_҃1Q$ iGN~X 09^>s@c$HA)\/*B`s@Žx8 6Xy=H9,@BqN 4uʐ;>|;`>4x#( sTӯHB:7>H;珘w pWGOLFWpc}@l~]4=>GNgއ۸^LKqPwxSLrdYO&@A 哚h v rx$}=)=wB3z3Gwt N3=: xWUVLn:c\:<~2O-.1}}`l{vAR} G$r1O$'qE c9a*鞼zt! A@''|2qӑ()xr}2( O'r9' #%c=z\Nm1ۺpp2=0 r}mʎ9B٠h ~^ @:sۀFyç!sg8ǠǏޔ7PA c<̌Sx;_$a~U{m {q3ϠNt b@-<zq'#@dr~rG^O̓c*<gnB}~ zdAo#}N9ɤ$`tR>S#>jOcDFS9o\L$0ο O@=*hg')ޣ tRٓ_wN9֥A1;$}97n Ok2F?)]y*B>c;{1Cq$dc=Ҟ^F G߭Hu"<3Չ3/i#ppI#ۜqHqdz؀?“:q'9l;G|  7FyhN/c-R9) ښPXr r0IaӦsH7evr0a֤)?0Ry~\# \F2@y'8zN:ԌI}H, vP=11 le8Ґwpr0AcHa H;$猃3*<{;gh 3 ïrxl鎽GN"99Q+z ]uځ/lVϠ4w&ĆPG*Ariu@ycŸ>&^JN*:0$@9$V wQV*0N};e.rrIA9y=>CQw vX,@@@<G-A?nte(*@06ݷd~x5 |9ߌǨ`Gozdr9dǧQҖottF}HAqky'/FA<RB}ߛ dræ;`Rq!DZm@w 7zP' 3On f!x8,=;GP8|88BF\'Zw2A^?wvy\ۥ6~Bт9$ڗ0 'vbqEF2z\$C n#cOH+1l);~_]J )p@s^xi͟t#$# {{p8P}JlgXu~2vO\ga<8#_׭DQ(?`zҕ%I7ӧZLI,xR1? A##rI ?Lsq% 3<϶h#9<㎄P0s*H=ڏ18 y'piz(cWA皍v nߕ&QA<OnRd1^Cr9:$9{Y@zJ>13=@:NXs'=GGQP0s@aԎq҆;T+|Bwd=' |rI9Î F ?ykSXuߏqz:򎧏rRGi38,zpTn P7t9<@0~`@S ,Ŕ8cZ1~y^O·Sp Z$/zzq)}?.mE~9=K/E '=}jD) G ;&P ea{dJv$NՐ I$})^=8)FKg,GLA#8)D9'8y*s>ҝFAO#M>9Go^Rryy'qiCx=H㜃ペ082=Czc韗8tYFzG9ӧOG`qKq=[%Opz ǥWOg4$$7Xwc9}zuc999 aԜr.ߧ%Nzgv sPP^c#zќ9#}JH=qq8yڠN0s$߿M'q=xયP}?ࠎst8#ӏZh ~Ib:s'ךq;#"C Ts{@ ?w q=GZn_g?.86c W>SؚAWqMэ'Q¨?wc:Luc'<qAw瓒FyuO  g(sJNqH$`>z{b `P>? OOA>Ғy88#8pn'~sL]@zu?wpG=)@/NFI$$,Խ@ NhϨ8pw=1@3`+pnGڜ uO# :9ƉI$gdw=iqsn?,4@a@s+'W;й9 n<={?}h(U; pAN@'(qt15E3q4O=38drx'!nW<yF8$j.W6)OK8 q}iNfO^=~ޓ-#$<`zƆ r`ߥ3<^i;n çZL& ;{{01~89 K^v ;?Ig߭ O9c~3G8=HFy{w郁,?D :gBGb]?tdq69Ǿ1LL`  qԖ O^ԮFzlNi's$q5& 2䜎qi r P >g#h :trhGlrppFy'R@TtSP!8r{n9ӿ֝H'FFIn=29 0j ǩ5]^23f=x(͒s _z~ی?ץhUnF >c TԷ^hB|:=&@##=w{d`lu=:0۱<Lb qp@;F3$u!\1=3ҏAz {{_Lgdqg9HpFy8eӟ›Ԇ}Iu`Fy2Bܚo%߭II:/ERr͓7 ?) `ǰp>b9~4Qqci;g&43wI#@ C׌3_^#d9R:v:R\}yP;=86@z}:z(8?Oxnq*p9# g=h)qO֡n =zz{i ;i{<0ǡ֐4I4z@q w>x{Hwǧ89㿿{_|{یQׅ8HߝztS?P0zN=)Q t봂7zzZ1Ǩ91|1=~ҝSU!1}?szcC1doS g:OAlqs^# '@ @?n=83:qJ.sO8q ?jvwgaӧJ8}"d.'q;OpNPG~T``q׎ؤeGL1⌟| q#9Op 9'ݽzӆT׿׽WA2Bݺ 灴8y(C=@#y4! 3c*A:ӚpsҭG8sL~זFr~׸ɦ4crw}֞qOqǦq1GR֘p0=x0Fsc=:zS^)ug)w9>ӽ1z11𣨺sO^;Q;ѱ8? p9H /SdG+GRF0?\"=hzZq8HqLLtqcl)[O$zG4]<)ry`:h؞A9);,:`P8|F88[]H#,9׾i99pxR=q9=0O@FFIcps_#}xMLczCҚO<遜c4H@b+ G|`U.1ÀA;F9z$.WpzrxM=@-:qlfy`H\qc998Px ǯpTs#󓁆sӸ*A烎ts.3#nG^z?yN9S{8#q@ ㏼xb8?N10Ocdq3hp0Nu}Ocҏd/=qҗp˯33ҁ鸑OCB=~n{F>e?/N{}j<7|{H*s杜F0~cQrcˑ q88ϻzs>KwߥLw ܐzzS8Ӄ+/ FU;'yxiws:r1{`^h;$P{(''98\LuzvF;1\r`/lq}N1ڜ:mlOP'qy98 R@8=\翷2:Ā?M0qFu) a@H^Tdgjbb w9L Ͻ4#a۵'s=p}qҚ88@`cv4NFpI }Ms|8pրN@HOFӓޥ㎘ӀOR;ZM0@2-߭H?^ݓ^1Fv~ʜ?ܝ8yHGF/Qs@z;`#!3|pIF:d#9M;s0ROoj1^1N=s7tcJ\e~oA qnr9# _<Zv@$IQI 81@ ڙu g{cq:w3'<Fސ'f۟˥.p;lSޘPls :\ҏ\1OCҁ2rFI$q4}Vu PCv =<g}q4 wCN:ڐ1a@-Ǿ;R4]?.q`n'zyNy*9'$3 ˟NN?pF>oq0Ǡ=3'=}NM.<2s p}o_n)#?6#;788Cw'N1i'N3Ml{ ~uJ ?$'}3~Z Ӓ9#gzTIϠ#|u ;FGlq#}:NNSH:Ӱszn뎸=8 Ͼ=zRd#Ӝs7c:dvCӃH})0@>cpFp:Ӱ}=.?#n'>1${S28nW ïjwǹ;q' ɧs} LpT<1 w>OX|㞇Ҁqonabh;03 +@l$ /qҎ2ycܞ>ؠ=} $s8y<17 C?nUpO@#w?1nQ<ؚ`;y꣠qғ܋9ng@ ZBF3qs*J8zvT}= c q`;93M@s6blLԎn90u9Mz3:ێwdc<`N=OFďj191 w㞴 ӟ)81AHfۂ[玸8A' vtZ44s8a:C.UJaH8 4az7B* :s:cAӡ#y+w=z9'A}7#'ÀHr sJp#;z;f 3|u/qpqAa:u?IG\R>\X$ Z^H8vČ4-AߕBמaO֞;q byXH(_!=1svĺNw#Ҍ9FF=4?Nqc'1Ӯi:9 ر<sI c>x/<=C+9$ޔSNpO@$cӾq@RdNqzt#֘!OCr=1fr $O.D(Ozm$GcU`nq<J9y9w{(Ddu`;O<㑟C׵0lc {$/G㑌'@##pl{(#nw6;8 8. q׿=v? Lu?O|cĺ2 N320)'hv}9w;asЃSB8d@#΋|p2@;O>nv8>i$AQH8K:`s#U`$(}h's~щ*W猜/]$c'=A ^x#?ʎG<oq3p8#0\r8p lӱR?QGQıg U#i7T`'u#* H%@@3V^:T猀#=r֨\P ORFy9c?΂@>#i`H2O~R@= 9})P>nyOPK*F0Fw ? #o|- ;'9#n׌.yocީ0zt1:dԅrq _%s#zUHcWqpX Zp܎=N1<@d=|á#''=4 ힼp2)p=__\ a푞{~4czר<}*M0 wyڀFz UFx(lp>98]ڔvxM8{zphBi93ӧ֜IHޟ?CKH#'u-goL rN#5C(ybG_=M.fn2Bヂz`gF:`tǷ\Ӊ pF`sɣF9O\a4x$d݁#15wN 7u>ޤWh^@=H4u2y= <&$c_$4# ?O%Gs 89I_ZfH8ϰ[q9qO^OڝO_=4@NFz`O,>MÌOAY{99'#?^qFs68c`~h [*x*8<GiHn>Q^@quF/7=I#o9 u r?.!99SpݝWߜTrz-'~S{Εu\njKDjw+6ps=ʥW$H9#p{v'<#:!} N?{wzM446ԃק\ld2H2zj@@oX91ڃ<ރrN}!9<|sdcAձG-`XdC{`ӻ rNq@9랹 b0uv`v91[#_x!+?=F8{mv[9_Flg3RR! NrN1 F烓GNpzF ǣ|l I `FA۞*wzݘMn}=ECv7͆qwa 嶕nĀ:qZ, qUR0F_7{sܦ2p?*E$|˴89'ibp OL7z\\w?;+X&{{V0~|qia%0򀠝$}_rHA?)z@pR[gk` 7|lG=ZBgs\z!T#9pqނ6Npzۃs۞ mʮX}MQ g^rzn:dcܩ98-::yϧҘ1fA=F}z8L#0$y֤cьy8ۏsH۰8l>LAz:WSsӦU<I98t8~v2{ :<~t pAduw'}:~l8y84@=I2@ZwLx09%'ОKzg9ϯ?f; $Fs&q#ed`؞8_CЃ g ={-xU*1۱z(T8wgs9p; 7m$dsRT(#xN31N8- }x?O=}GG8® nG j>ny Np{sv>Zc~#=H<=Ґnq Oz\s۰Pz}z4. 8$퓎@an(Ha򧌀I+@$6F:Ӿܑ'<>>N{c~2>Rzyrq =F=`F$`dX9<<񌏭.rwsspLt4 q;u)TNI =4 oO_laG~^Fix MP.z䓂9曌ߐwd鎴u;r }OZA89{㏥0I>RO9}*2GAQ;P!:mN'NsI߱d;x{d7RINs}9㊗D0?NipB ' }NztGc=Jyd Nz=).n FOA5!?y-8u qe<`tzy%G29'<3Կlv8>7<3AqמSyO@wr499 6GןCIEcy-@xvux#N=e9Ҕpy= ׏c:'#׹9(s8g&vw`Iқ8r{,:3 9.p9\cHC7qoM\ @p@{^ 1?0~4I<s`@ ܁Cw'%q Aޙ>鑍sq8{#דG.gx=;vN<7$sr?)=QʝĞ?=F :=Q sE 2M898'>0A~ y8 N=І4wgs<1x##=)0ꣂ*r  'ՂRc@+F@OȤ$qq4#NH<s~iv#x<I$! mq~Rq $=GqvG#' <~PQ.{{Hcx=s:L$A!NI'^~16gœGv z&Q2O9cX=h'p}ҁN}wRztn}>ݜ;~#Ob~89qvÿc߷nh 8{9נ ُ;NsP#r:`Jf=zpzOO8vOZC9'dҟs`?nzvd2N?N8 0:1褞>٩3 ݎNG qנ$lp݀1plc2sϸ@|xʌ`NGltϰ@O?^(8R8aҟm$tM^{ȏ?7U<aNGbNN8&v,qϧJA`ێ8p8!qnqqqzs'"XPsbOv0'='(Qq= 7~X{0'iz^pק=,r;<:sMWW3ڀ3A?` sیu'zG?/4?P9 ?N3Z07xzzI%cqKCH'?C@ϷJ^N}9h.0H끞A\Su yj;w nleXPFGY =( ~T$q9?AR?0;q S>zu瓜܃ߧ?+09<s0 1X\=p3Zw~SuU\V9x \Ӡc*0zsfXto*O|RcXw [1cTש9.!rG$<ğ c;r;Ӹ 2:|?F81sBr88'Νtǟ{ qg`nv;f]0^z~=#1~8ΐKpuqLos8:As9sx^K 34b29SG;x @㓏\ހx큁CROnz` vg\܀J>}y4p8IӂGl~8#c:pzZ_r~L|`zd16qxt8J^I=}.e8'qϹ+i>|ۺ) ʓˏ@8c9hss@$8*:iG9;cqJ9?ǂ@:Ӛ@sۦ9 `2;}h*С88ag.4c<6_~G# }B3BWGҚ<^‘C9<}M{bx :6:sLNsBza*2~'*q׵ <m۴<As=IpCr;K򓓃+Y9ɥh9Qud#?{,jCi+ӷZB3xwtbUv@q'~HAGn3jE /# s4н@?_e^2_~:0qHc׌AN:4R20qzy;@1듐0G>lvb:; ]9I_JelHqtGңHd 9'9<`}qc ڔp{/Osh ~uSzv ;q۵/qt>z NU8\sҲ<Hiq팓|۶sKӡP3`P0<`mg8H~f)F3su8c&2{qG-}spA'g;z7׌S[ܗ ]J`nT$`g8i2qDFoM!$<`c`F[x #in*;WsׯHqGڣ8$s;P'~,1t#?c9ru❴eUAP}GP1? Qpp30y8V'*O=z)tn  9)H>nO͍䍹,}1s@fwF2G#~GGRUF9W9 UH9j(FH瓴P?t`{QӧFGb=2z.Nx`@~O`|w5`/.HgoN8.Fy%!6h郓Iu y#Jv@G'vۃڟIqc9L^7tq6I@eI@ F}?Z^z }hL`JN{ΚG=q֎.0F8? TsN{U! b}h (#>4H$>`[' {㌊L%X8cus62t'=)͸ѴyG?&Xdp1'~S8Gz9A[hrÌg ~9 z}O;B}F3gXesg1LARCӿj1J9RF0_4@r~|P B8#I *֞<1q`]7p $x>@$:Uۂxj=dI%dd9 @n&1yӑ=ǩɥ@'#w=i۹FOuN})$x>=iq ]E.8q֗zrn 43FwgGn})=<hsQs?Xuϭ%޻F8<>QC'$c' @y9H$v}9~A9߁\v>5 ) ^f܂*<>l~d88tz7[8^:9vI# c^o8ݒ9#$dp)U=;PRg$xKa)^q/CRw9dM-aq~J9IpsN8 JLsq9=ri2FX <:{)pC秿Hx8ܜq8aN89pH t9"@3svӒvn#yۊF<~P׌IC|$\m`aOJCC@ē8:LpvGb?M֠$y&$$@>CޜH 1qӯҤIKn>W HHy xl:,dL Rqg3pIIUޥ}9Sg߿4[nrHizC@y.@;?}zᳰ sg4 VW+(L8qI`NF 8hܯ,yqxtAQ\90}N.}FnN>_Jq'9ҘȊC j~`p sR65 n$q7FğQa0;`zfC[s)Th|1#r7}nЬxI9-:Hzr9>bO@؏V+;@2?/\(@\s9O9Qq76LkqF#Cgx5 T()VpcbH?*Fy xϥG^NHsהrg8 Pr68 qڣW)@s9z8z~V^0c$0?812pG##$J7+ЂzBzv x-g8s$ ݷ+ ="뻞c!92z?9+A8lC?hyϡp z{SO,:c$J>Qo@OQH>a>An+vGgs@8 _>= lpQq@$AZ g ݹր?NFRӌg*2?>8>ь3.OӃqJH0:! csNp㱣9w#F>nƒʏ~3I '<x{M1x#' O)я0~zI]˩ @GZ睤a1M!>zgn@p!S׌ RZ#'C,: R6x$@ x Qၻ$wl8VL8{{}jtwb=;*ehŗs7?)1ʳێIqZm\*<`OZ¸NIp|cҼ.89 ~nZ&ٖW^03S\q:vZorD<|9 OcsR냞޴_p1^9iyixژ:nN G_<9GZ7qqA'D,\ @^}i?,r}sϷn<`;SKi^s `~?w<`o8zv- tI?&=I+(y=q(`hH< qO9;M0'Ӄ u!`-@7 qB}i~^s3o`=y' vS鞴y cq\<$46~f8`r={ԇOtub}Ws^q!N+F )VɪORqg>Hr\GQJOjA8%{L $Qcd{'s8=Ƿ\c'J‘݂rBp=A2FA<{Elg(a@#8~RL$t0zb*yq{)FH8r8= pr9a4'=yLu㑐rFzzNM?#vޚ?6A_L`)sNI@?l6p{LAAϧ=iN3r0F ۯؐ9R+SIhVϩylgK7 _F:RۃGm^;}jQ?,~AƟ@#nH>9NJzq`sG@ c'@q4v Ny83Z'9F=R=2d=5䎩\\NiGp1ݽ֌<䃏v玄stNwt `P1G'3gǷo€<=A<0#FNsՎ;G˃zu#y!G$ HA튍 1׌6`" tc#zM#9ci@p88by:T{qI :`n3(9l0a^=:R}wy=r+ g Fxw45q6r#?4q8H'S8`mcC|l=pqցwzݽO!azg{u?ZQ<8z~'lg<`^izq91=8SNGQ}(=:`z

oBq#<O'#$}~ww1؂@x<dp=+vJKC 6r=}9RAۏ2GGF;g(\Jb=yOҦ~֚>Gay9>zLg?4A4O_~9 S7sF9<}(`?ŀ?+J<#AiDϨ~Hp8'?RqׁӧC# ߩ|=;a88>?Lp2?>m;>ߝ>9Krr`8Խz08ԃrI'')9<A?–=G;xP㜞;>#9{n:upAlv3i~r:u{9qnc{hJ;=JXg#$;ߏZd)BnSvzsbs q鞣ן鍹'<$vw};gtiG'8FsthN@}HhZFq9'ׯ m郜13@ 8notnqt  =y& '=O OƐO$@=x9@;lJuQ9n$dg(?RFAp84zN1 `zRx~3Jb0H@y*s IwS9^~O(>bqO\:_~i lw<?Bs@ p:)98~Jqq碿s)cL{pF>FrUpxҘ[=#)$nBzs߾{v.2{tNⰌA$I}?;« 6GQҝ=02Tݿ:sܑoLuXdm;O, 1$c`탏 #AyU܃ю@ڝv.ye'GA8=g @<4ܑ$G&{zR>ǭ$ Lz=auݷ?1)`cA\ss9L< <{MAq=@t$p:^WgE(1~޹?ڗ:$vnzÌ޼ϧ4dq/΀=x6FsޞO0{\n$8GL$| IqAb8qO8۟@>=߅&2МqIA8 ӟ^߭&tr:g`}iI8> #ݏO$]qқf<.U!''뿹cRt w~V?zRg1G#>9y4.@p3.ry}s"C:c֦H -}h:stv@ NG^6=94 s`@9H 8p}? ݃aK<^ۓ_JG)c.cg<8:緷Иx18$`ztRI Kw#r ~by#c$aϷZU䅏91d?:p22O=3ns9!:}46q.1:ǨJ!lXH8Ҥb2H i$vg c9JWd`9!sR$63QGbG(uBz9`nq14~Xr#oxj $ {Rd:yyڙ$={s #B2H}9 鏘t. גI(O :Wj]xS;q珯 A8JCg=qI's{+^v.h3iY4@[@@)\v$:j9ǜua8`cܧq<{{zwG$tIQGZ 66㏻2rO4 )!I`㟥8gx0'NC7QnNq<{FIJ\p@G8!NN8\q 0:s~n?*`w$R܀W9sA~}B1*jw 9zm7*qylj`&<#D$Lm'(oQӎ)ۏ8cwׁҗP!-;zzks;Iҙ78'x'=8*Y]J9 n?*gb@<jV1Y0r4xq?؝y8,UN==3N?R3 BI+@;.AR?(@y8 힄4"e0~Rq/}H?r< HwBqMhAxH븏 `@?y QBW$l|88.!tܒ3Q8}ssmgLqL?'1p@9?Ύ^3qz.F>CޘgUFB9=:XcNApzN83N2d'q'T17$rL'㊛0ǹ8SЗ'W <`1 K mpT8kzs}QZI1GN}ς1 `cλaP2|(nݝ9'OZ'y>+R=r큌LTOS=q2IXJ'z ` V'=IۏnW)W=O /#qA\ 9ܣ8=>߂wTn{p34ˌr0p[ yO[e~RԖ9.9*A'zP!@>'1zQs, ?{yܕ9O$~pGlH0 Ò3@Fp:sc1S3iu'4Dg6!B#'kN9FNt>#$c<1uۻ2 'h[@,mq03Б֢lm#߂Fyu{F8'ƙp2I?Qigmdrg;y\c`͂G#' g w6t3'q|}"Fv?ʳpG= ':!~`=L8r:sZ1ycd <{_/ +8Ÿ!烜/==sSr;t88{y `@\;(]X1JR1 }<((FA l19{pzP^tdtpX3^0ϱ7(1i1ŔON0QTiU9;#q鞞|b3@f@ d 99>xNG+x1}}z0݀>V3O>0r8$zvzRmaӌc8Q` uA]xݑ'o?[8wqc=h᎙'LI01QOrFXasަQA9`qzG'$s掃CYy^Xl֦s=zTA8 zR8r}L[OJ9S\!:g##<ۜGyց0'<?Z~8ێs{@1݂Y;pt@'vwLӌqA#O'.2=GRHy=)g9:cO ;sc>Au=ǩ>ן#?JBz z烎֐ 8 hzA}=zO[oLN?JS$~\gSs{fst~^R 8$13 xizqhc0v,98i1 F >ϥ$;9W#CnZw-1tx;ӭ8n'19&ݣ97߿=M0ps:qm4!MĜ=8뎄{S>$>) iぁ|qgN9==xP8 9cۡ(#tR3b8ӎ4yrׯ=).:s.'q@8㌂N};~z|Ozp:Ƿndp?gC>dzwvナ/=?qI~#yz{R} i @GL8;9cޔAgtyZ|ˀy@?z@L`>>;>8xQ:zw!8PGgOqN$pzG3@dRqp9t8{Q Zxp(C>wpx1S~G7g#y:SI @G<$Pd~9}1LcIFyA99n<9TuN18?Ni r@\)=u v Na+Pry|{Ply:cht?#(m |tڀpyS׎ ==/zzgr{N8G9d#/SrT}z7 z p>luܜޜą k{OMxq0p=zP1z$r'<|< 3ʎ8 ㌜g-AN:r0q<܏N8@ m3p=}{)N6`8>~ T<#MK8?1r@@"'qہe, q1r1ؓN#,=~c<hl`2zߥ?`q A36r#o?;QP!C`t#=p0d@C(P!' :gŰpxQӧR1( ܍۰N84`v`3N;w:*ÑqǶ(3C>vhv*ǽ/nyr}_HVq9~Uv8#Ӂ)L})'?)LN:;z|nGS#8Qss$sc8=0GSL28ᗿ<֑H 9\ nAyClQcPX G}9CspH{œNH'#ۧ'@ #n2܌ی'4gB9׷m @G#)d t6}hOrsczqn1ad߷48Iɤ9럦i̜ OӿCJ=rq:? u?Áp{*{}qVxt=3FqNg8-Gh@Gf\cknݴߘxzZ">638;p>e<g_\d,A9烏8槩CFXdmi<y?\ݹ'8lpF=GN2zүFy8?c< }(3G21 gJ2 T` #=Ա>29?9ێ\NP y[o_:ba7v$qR @ cdq_@ vHNx&\1mB>^9#9bqשS`93@ HS8{GQ?Q?+ h9x`B8t2={ןlSc# m$щ8v}i`N1 { $f!@B,1zz@;'8Iǥ0 rr`P=yH8<^٣=8GQrqCL}D uz\Ғ 1)1#ipIOL)s8lnfCy#GO0.36p'8 Ա$`ztG^Oy8R 翽799A> ?d1ߚn2{:n'֘LSŽH sN(c Jzcb9Vy OQdvxoOZg :)8ϨR?Xc:zu)Gg#!K|=y u}:|w!z$ :RE9'ǜt1c$lR`u^y9c@^[1BNsAܹ9r:cz =ct;!qxLB鏗ӌ~ys`pGjby簠r3=zXc{s9{s_/v#ҙ,3A+x$ʗ6st r'P1N8wރx=9 ax| g=49#{!z ?^ONy%=NOVvgǯjӁ 7J9'R3|IJ 1lvL9g@> =0~px=}vc 9$z樟 䞬3۰cUb I y9&?P`sǽ(}ϿOқ~1q>&r qB=O\3Ras;RA'GA}4$<GRGN{' NӥpɓJ\P(>y2=4'_j}S+)#ܐGO<|jD($󑎁IA{RM|۽N((A@Lq1;G q9?/ 1r>RL> @ۇӿс}ONZӎǸzg`vF:@ nH`HC#RFz`9ݞ{~1q8z w!pF: 2}4uVsv9ߏOV'9u0`;I8QHSp1֐Е/pFܒGNڣفbGc2 G+<~8ޣo'}@sӞsL_7w@Z6?*6@#߃)ddۿHhw c)w֙UTt%GLViwĒ8$Q@0N v=<*1h1I `9'U;'b>'3:`F6v:@F}Mb09z0˨Pw4c, 9^F<{i'0=i7p<H{if8@1qЎ֌ #ߒGJMb#X޹ϸ d˜Wo944.WA$9<~5+$vžH嶌vzT6_^œR@09}x!:` ˎ?:R@qO8=q-;[!Hn&wp ~o%/8#1T|Ķ~nFq4$1Tss@}6q##W8裮@;<#CCc OsL#`ArcOOqO89׷H!Nx;!6@۽Eq9 rs߁v'u%(WІ⏕r2?1N1߷4 8cr1=P@96GN9cg$9ߚ+'C8!rB ӜSsI=(H;U'% SwI*U}1&/@9@S `g#L6Sgw!۱`Iq׃܎QX* -qJA;I=Fxx6Ewn +1R6u*+c'q5bI,xGB=>W'9lrۆ>u*2h,CA {s}2=1n9 < vF@==i;dNp3SP[wn#۸jc [p7dE7Ob8M4pG\`h`1@8',cҢ鹲A<ajYhϐd}qTI wGg}K#դ G$t@u9;pO= u8O;W '-.r=pS%<Ln~d'^0{ 90?GJ8뜐y^?,Mwݜ+g✽0>oQ޽j'v[H듏~ 瑝݌`=Lskgpiqp1N7sP :6/Zr T#8UX7v:)OeϠNN71<6 9)~m1 𡀣1y^ @y9.1=0{Є #A'Pu֢ ~aʩ@Ca8{NwLw<)gdc9^q@3:w u$Ã֗nG :< wH2=NB `#zO`qݏpFI.:Sz y8N:Q@ ǻcH [=r{=@;9#%r܌}~ qG}Fd%x }q&U<b#OSϧSFN9K%0: 26>qҏN2:'pFK=j]vA;NpNG烴s# U='}h(@H8$z9=sG(!䁂;g~8?Zf?+H#8#N:Ӊ9l<F)>nr`Tu8'4hs7#C2P@9 'ː> >ߚ$1P {gr)C87nMU-m\9'ڈ\3N3J$tmQޘ1Fs1n:o<{C=;SP sݶއ/= g#<ӲIx90=0;g@gp8'i f=~9RQ<1 ӁSpTsӽ =>sp9s>rr1d<׭}8Pq˧Kg0q {q3Қ'P2y3C@Nx#z`!l3+ZpCIrx8| U<>{}NcJ#<# OA҅ p9=3Zy`Xt u,A4)dzv'<4Bdc{N66p@39#z_N #8^P16랔yv H8;~3Aϵ81#<`q94? dpʃ㚋7sADylr{1nqwd3T#>0HtOZn3t#a ess pga@=. ^<> ~7!qrqFH>V7`pyqIJ8x 0{Cp0y=G?h1ON=GL <{ۜԐpO+^:Ocy7L=FsN@!98rHcc ~~ '#8t#S culU=0=)18wrx Nqhs逞H'88OƔ瞧2F`z!}ߔz '>J\zFNsZ1;g qzppSr3yOCzOg8qzS:;b 㪀13"9c]SgLDۭ.pOV'# 8E>8{zTt8 9&*>^;}1do(Q988<P=:Sxgϵ1w?q6O=)WqVϿ4LgRc$T:@q0wg `>)69XhA^x : 2NGN4@`$;wcI;{f#INsҗ?.ʜ 9Hyg)xsPb3K2z3ߟo1=Nq?60K21#d.yzO>اlv9} 8ǧobM/Oc{g9z>DZ!9\dۊ#NIg9V$!B[`6 <r0z*?ΐ18+sN{ӾmlggA - ^IF/\?皠͑6f`qA$!00ܖs/,zv1{h^38qH:89$`g\c4 qgBжO_~JMzt^=x3q'=@ҝdpF?=GJQlvӑ9tx2>o^gw?xP Rz`({0r8<\9ʐF21BTs4=s z | tirq'?1*{RGj=Aq#Gn{zyv@<{1Kv^S@\rI'1ߚLv=}89^}Ҁ d @$>Ny89 ޔ78#ؓ߂Pqy=3mځXy*J\`4>_#R9? 1C8^+ljZm/$yeېz4|g8$}:\O돧Jp#qRHa<PAspy9x9nzu4QNG.OC$;s08ǧwG0ߞ(=0pi;yHpyzz9c9 02x4IOJ!A >)'pN1#1)G@qs2yl˜Po$x0{4G$su&dmTw}y'>8ƀz9}ivcO A0#B }ǽ/Ac{](8A1ߞG4(@y;s8n91ӵ#84g`:3u7v8_ӭA<)=~9O`1sМQ#i#|sA:gZ@Uzd?@n`_sL'$` OԀ'pN'8Ǹ=8 tyzx:= t9v;880%Sbw)Wh㑌xuEw 8>&^Lӎ=0rvKd=9*Oz #={3"qGs?:6}6w7860vNp ˭BIA{P'Ӄ9'C#23?LFzyp81qϷZn cNGi.1G,N0>1\rXӎ#R,: >T|2r~Lb10I ;G Cw(C$ˎ)'9@Nw.sq&W=~R >ӎ1szb[:@H;=9>ʗ]N֚ۧH}.NAsϧ<Ҏ6`ad9@8!Fzڣ7 $;Ӟ,sFsׯ4<0oPð"kvړtHrF &Uc'xr{p3GcsМt׷zA8O:X@2$*2=;@S(rT񒼝=i?HhpRIX<ハn:`;'+p{)'Llw9>qB0~oFz41 {  5'pʌ#Ɛ끑?n F?9;NǷ+ӑN:z]=ƃ R"F+ߏP)ۏ'<|Q_b $ ?HT;`?֗g:cA˜O??lF=>l{Ԃr$<ԀQӾF2N1T$@bq܍ǧSAƒF^ؒ` p~)ݎ :tϥxԱ:gڞ2y$P{3Mq3ߊ*2[9 0 9ˌ?@Juy4A+,qOB;{O'ݑN0 U6 ;I>z~) \c0`;A:>S9'#e,@ӎ)ܜGQʲs=Glr{o1988sϷ)vKsX)r0x3o׭?sr@LC.; N)8Ƿq_GW: gj^F`H9ϯ11ww[<}8Ӕ`<'7vS0`GNp}[<~z;bc98O `?0g@#уH=qϿڞsP0g?}=:P&.prOh cn;*7a >xH%nN0zrH˜90ytwX;'1GOAO})0O?0<䟦=8&*vvzF>94*npN 4 =xۜLOrށGNAސH8횓IϰE4!Nl(~:us1r ^Nx#{}9ǸS`T җ<9Q@>l:8F0Xg׊G@ ~掃y9\qw#t~S~Q=N9) i<Q;;g38E*g*N:;1րGC8: 2HnݐqoҀ{>)Osvx\ÎZhp1?t2:8Hr>_3)n8Fy3N0HNUπ8R(L_@G?sv< T;v1Q@cP?1pArA@Ȧw#˜ `KzsnʀN='Ӱ o͆*  =A _F8ym0CpJaԑG|(qU('ӊN$߮?c͎'9ғ,xx S 1^apv={zH38 -݁C/\tlA^4y$7@N6JCDR{r9= 9t7*X v#^'@!;>U p4w d6 1 )g1ǯYE|gnUJۨtrt jFG H8c'ҥf(ׁ>gOPTyF # :mz};C7ᶎcRdv @ϱHc cx)0N=GӜP4LtGXuvvӸw0폯!T H*H FxF9ɍօT1Ay%qHhB8xQ$1܅ ~7T'ޚF0O5Wr#wnރ돗۠@p2q{u8v+;C rTӎnq霷>RzXM`{cF3Rnv#ui#Ol㴒F.H=8lBo9` n8njvx?/8OfϮ)  !O8?DP2lp8qe\3sM`''q>!qx)sG 퍭z{{$ q #A*9sr͏qϡqqq*<%@?h;qiJ]1,Oś ) <q2xKspxeHn@?MFz 0SדԆ4 9R6㎠\cQQI cO+E x㌒>:9sEK)VP6 Qb3먋u9v#ъ~n!9'`ޟP6rON}DD2N2p = tGp pN9b.ꪤd֦98$2}8_=jK]3 묉ϦO'z櫳:el9NJ~S~@5U=*FIqZtg

elu=0=}(u8gGs{w9s]1:8znJÏ|g⺡m;c#Ր޿{Ƿ59d[FOnb8#qҦ9?tuR: vv~(adG_| sVdIG?Ŝ{SÏixビwg"*q9H;bǒ@烁p7zӹnAFs.@y做a$aXoJc3/=BiOirvpsO_ʛ$h0W8<rn^l`cqu wu>ߧz9:$0w4)oU8߅^p`RrHy_JBzޙ#zp)T 7?Zhc8*QҎg)g g m9n#10lzӲm<}{~237b:†oӓvB ypiO 3z\Kr1O};Ԟן=鱡>lqH}ls8Pc>!x<gt:ztn8ILdSM zF29J,N3A2J<}N2AR9Hl\g pF@M# HO^1;NJ0O { Lt<.@p:~<~"H8$=E<:Gn['<ҷ1ރ99qx#'Jp1@Q  6'}Lx+=y#=~8=p9ȩ'-T$㎴dJ{}sNwdaNz9<4u`S In;{;[9qݿ)I6G럥HÏN9SA< +# ǐH'} 0Ĝ:*G;A4:BONG m'PG'pq?R% ^M3rGԜFH^zc?)nu> <A9NÓ~e I1}P88^[@k`u&CגNrW4$,FANM9<8~bTܞ)PNGp1v#iV'=9'bgQ@&2O^׌i8#q$`ۇ#J98g (GS|ϯI@^ 7!qǞ=i/T`4-U@rW!%;zҎ'{SwsI{jCo2y}0$;GO=FӻhA`r<^Zn=@EpA'ҌmԌzP:8twcSbHs=1ӁM78U q<*xz7͜CH{nq@\락8er{qڌ'HA4vz3@ciLq~s{R8 Ctzc8b= m$=OQqhب'z|m}ASCGlc C׵Cj9v#ҕ猃@|gLQwgQ ] BOByNpxF8=U''uj~h rpyqצOc>b{??c9'X mLqcut};8A+FI瓒?>'9'?*T\t9I뎾ޔ̕`3}=Z^#ߦJ=3۰?\vR ǁ@ g:8ݞ`cSINHOFI=3팓WcN3t G@x3O=H3^<(GCL؂A\/?AO^i;x^IcLSԆ8;FBp2zӊnpb810#؟ӵN:A 3CL'9o}Ac-@suX aq횇$>^8AҐ:t'8<8 v ,;Hb`!2=38櫇'F!'37;nup;r0qN p( !xˊi+urx~qpÖ\wzgS=$nӠϥHe:O48=8'p(1<}7dQM4+~a{ dFAHbX׮1cӷj/^NGR8zx'#{u`?\[9M*rqwm\{CDxQ|FGǠ=t\9 wz@ƶ{nq /n{R^12qOcs}F?: {f=1C ! 3L++>a23i0 =x=W7ds9=?JN pv r1ӡ8Q<2OFGqLœw1l}ҐyCsRF1`aAn'Hb;HשOPz;GČ x{{uw<*8 }(ۦzz@`dqt 2i!\g 7rNǥ@03(D $8<\5*ʃ28@U T=v^8Nq;v@[CJATA Ts{zP'b1r7v>\ 0X㯦) H=G~ps $c%ޘ1) =v}1J9dӏL@ 6YA#ۚx#w888Kq qRFsw9cץD0v$NCOjPGn'4;p91MHб{r:c4 ڋA dg^1ASOq<~lg#Jb~Rmfg@ O^FF J'N,Hڛb0G'yJ@18ݟ׊BF9Oc:p8:9'<1 #%9Ҁӎ9?jqNރdwqzwɠQi@NN;gݱ@3'=)*@.=8>wx?20Đs>ϻ'SրJy>^c'6ށYRPz[snv?~S$s:g\4@nqE798p콂>,sO }*[>qpyi=tI3GF'!8ޙʞxe)3sp6pXr6)ޟ{\g7=p9@{ǎx86R;tA*Iާ';4{00$'֕1e 8i8` ǧ#\qv-(Y2qO n`6wrg=3ߵ y=)q9@AA5,`Wԃ.IF6K};M*p1ʆ=7z~4ۀp$#G_Hc.0FUg݈eqR< P?w\z%8ѐv d0={ 3djw(Gem0 6IX# nF ~}H p8='#ޢx'?qHh 8RCd8;΃3 g֐ƖA v çzKg9\ {2@b2>`:uzӰy< $nxsN1F@cfq;HqfK`BܟR^I*{zn(,Nf>Ex{{S@abܰ;IzI >F3{{R39ߞd3'Ny$cp39#u^sنyC<#l9=1Q8gpߡG46r`q8Q~r~~6A;#Z]=zwq\x{<@Bo?{A1֜ $} ݶ FI\w,28>?L6z=aO<֦WQ!X9sֶ8R@qUv9r rz6G /rOVUԔ1w@^)}X`6OrqdOҧGPQQ$'b_wpsG8;>o֩茜I2N;Bx?ʝqNIqE3Fy8C~iNCd{Ndm߿Fw`Jw<$qz?[!TdKm$Qaɥv! qܓèӖ*: 9>SxN0?NJ;< Ͽ?ޚ2s?%G דKЪIsNx0wgj\$@ʆ|`P 'A ur Qgl8 ۏ>l8r21M$n^1=3GpC8Hb*3:{A81rO9 =v;p-Q608pÏna$wi cn28ǯh`=yc$㧱߸d<1G?"k w)'v0*9-׎7=1 L9+qAH1gIV@\yQ1aAOϚ g8`pPAq2 .x?+@H| nc)]zcwJLQpxoGP>>/\c5WcÝ0 ry=AZry C5UGD,<3qߧJ^x t#5ug[عJ䎌=Au89R=&c쾇'#^h/sc'8%V9#qO˥^8dVVa=*@ǩ9>T+$ oWҵ['Vwd<ϧ^*~02r_8~8Vost+qO\W T/lT8pけcޘ9x%T1oPMs7s(OEǯa*>Ìgu׏Aڎ!~$c'n>q@qқA߶{ӏJp$prF@3҄  o 6뚋h?{}1sO,ڌg# pq@ 8ns~t@tNNz!82sFyldcIM?$w =8׽4z2GX:Nh$L^'9aqO*HLd׌ Icҙ"O>]})Cu99u=0܎88=;qdn@QB}E<<~{S‘$s cF;qیsgz=+m sO6z֘q.Ƥ 8gtv{,*Q8ž^A䞤ǩ)=:p{qLC iǁ##?ߎOjw\y8 @ Iӡ8}>֏Cdz@ ߦ9:*s;T랧=) o;=Br@9Ÿc99gC8#c4ud9>!x玥z=O~z>q?> ێsPq Ac֗<8Nî:<7oN8@8`>ژBy$_Ҥ(1GѽLQLQߐ-fx ?:`/;N@8^`ג A=OsګxdvGo\ryn7=zvPH3aXAy#nAn@H q:uLA8#9v:tpF;zs;c<$}@(Q99=z'ù@̜~V9Nax?$ z<{JOAczHCw܎}9Ip>cxz09;HzHzU FN3l^)>c'wKrǜc@ ϨӿZb2$IoLܜ2z@ A us='#ڀ@)<ێ@C㑞yu:`duP`%vRQG@799ߟt;Gc>>r3Ԍc=3Mʆ `<=={m#cg# c8*YOo4qxGo\f:9F>}Bqӥ ;\/'?xzg=0ާp) g܌L c 8Gq8=nCO#UGj\1y#~iy?7\!ힽsKH?)=B=FG^ʘ3vd'0㎙~ZN==3tr0ބc98nNAϟG?$gcpPct.8a7l@2<N2zrSx`Fpzq:P$06@xSd|($@ J?y9׽=I*xly_o#䟻 G9=)$*;dx![$Nt<`8i$1v=Ar̸ ϿpE0sqM @ir>pq&y%O[ϠEËs$Κ}[廜{zP!Xp@{/p=ןLu8+H\OO׵~mx_|ӳwlrd1lgc@1g~^s^9J@9%zuq9➄ ~a3}g ss`Hrz=ǷJO<:pOJKC/C\Ir;~})MpsnpzR99>zt;m{vzx9`p!8z ׮ h'NOJPH)>n2G#Dsӷ {s֝79#8:zb:tbT9@nc\ӷJp;Obx;G? k#^G`X=y>x{ $ zP p2: =R 8yEy럘sZE$`2qI |<9E?n$t*}x# 3IOj:9@zOOzﻠɦ"?S8<OȏAڀAwcæ:csIEz@ r:`񎴣 xG=sN(A9 0@#MNmN`eB(?r3d=9u`4$ct<9Gr $``6@Q@:rH4Nt`cHhGs6sҕ ;ހzdywRt'tonzߚL$|@/|) o}$TQߎ0w x)TF3#_ʀql9}=) gi?L~T2<<A7v= +P 0z=H=yҗvyGM9A)8<{犔.p9w,8q rIOo 8icr2N9=x?*{c9n@=GC?i9c ?+4ӓ$c q#z3ש#@?н:wp=O$r=M.Hd9's8?/ Q9`zce {w'q'8[=Fz01qwԞCz}=sӞp8#wg}{t t@I=Nh6^Q+cNzgYnzlHcIF@#+}7sr 'A(?ǰP>G8lrG3 s8G9qsnP"&#4sSr1\NcA@ c1 }2ןzwq[Fs>A̛ )Fzf8NO8sLr38}Pݎ Qӡw}(*o8N?47ʜbb9`` gq 3t_z bx {~pA -ׯҁ1Iy)>ԘAo9\(@ 7}3F6rPATc }ONdu ? @9u0CNp+߮OHnq$3ny0rKs 1 u~n qϥ/sr9c';忈)G=s {; p )u;29d(>rzǾ hFA<7a[<}~x6:C@qʕF3nZpl(?1qu{zLA##vpr39*zuA'1ӏZG'Q:c>`x3\RK}qOcP`rr;y<잧zP!89rp~{Q9ņ@_oA$dӎԭg3#oCȠb~@'Ϸ847d )ssip69$Go8ԝg347-댎2:Sy}N=O>4PtQirwW#)0w ̻Hg_Qs֛dz9 ?u& p@wTrXc9# ex'?(X zdݗIu9j@AP w= f㐹 {sJ CC d >*/גI+#8~?){qRA+9 Lc=G[-2;)r]݆13ꡌG`,.x?j 8 `95#︐ B3ZaۻרNh` g ԕeA1 ~`q$׊v<@vqi2>:d_,{PWN63֜O=pF>%zdn3iu90rN=UI3U=7ג2H 3ix\I6A  qϸ0FGOat~~cDlb8prrO+u$2`hېr1b*zzˌV_fd mdz .GP3-w5#rGI-fGowBWg dǰ Aa؞\sR6{cn3'ݕTrz ҦL`|62}{'s*aw pAS{Q- y# 1T9$`vݜ0xM2XW szcړ=6{`?9 99aOl`/'FHb>9" :)1qH<$\}̍ķ :F} Z;2|&z}Ð=AG#w(w#|{Sr0 rU޿tcq֎%I( ~H@~SǾ?*Czdn@#瑐sI_М ኃGJ~ݐpvp?.FsӞ0G= fa``0AȤʰ̎OᱜcwH w9{Pͻ3p:grE"Nxp<xх_;\'۸)~'^sZ rv[r3ǜv$uԎ(=ⶉAݠ$9#Nrmݜ(_~59x1 9$s 9#N0Vc/81zr)I=0}2;zҨBӓ88ORrO8s*9󠑛N?=F}N?wq~IG9^AڂPH=@zPx=:i8,PdW8bC$v*:RpC +?Ü48udzu O ߞ- ;A ^ 68I?Nj?qq lz)1{rzc?:B9@p9RG<9H`F rĎ|LO}#'%8ݜ;,恍$R9(!n#(A9'F=h7fq1w|r@H:\`zq2qA-pXgPs 8-t8'C8Ҏ9'?10 <79%hs$ӏQңlїu-H=:{6Ap dH7Dw{9$c  OA|3c `c#_(8WX gr:ی` rNsځ=BN_zx#8 x&2L`xI\ %pGLvb2G?9O *z`: sR1hry* I'>矼p~}3R}?2+!S89ې9S֚0#IyPN8#LR=2<azu Du)`1[րx=H,;wQۃ錒FKsOZydWFqsN p@#'4I88{瞕B2A#8}źdc A>yf3;AӸ!{ Nx=39uR : =sî)zN9'Ҙ8#֞IP1vv( \ d, P9d`})}Ho0GC=G'?\~x>~=8A8;'[{cCp;ӏjAyzpG^ь7g$H@<G+׷?!F91:LasuӽCG2wb{PO^pH?P sЎC92}hw8={gtpqր לz^ lt<9t=r?¤zI{wրpH89 i8@ ={#->~}cx[! vzp?919Otqg O8|.8A!=@r{ 2Is1O[z?Q#;{! e0%z}F8Ϩ<>9qXϷҤqt=!9#?tx\}\psn}qr}ϨcIrLxBvFOPA=IGCysPnzq!IF\'(9R9;{^yϭ.>]1qb ps1<ہH>\d<@ۂ F.p܌=ZN=sQ`($2mPr_r;}*6ߠRA={ Nӕdܞi yzѿ8 p2NFN(tϦH8v)'h.~`;4yi cyn}[`s~:yq'c?Z^9={m>_ONiLWCz n&1h*FNxwOʀ"_19)Bs}N~C8 q#q~`z?c x!]Ǧz.N pq,qߚnGooր=9gh/ӏn1p޸1?wz^Ӊw:-FeI`8\Ni_S@ St\LF8yQuxۿZE~J?8㟛R3!KGc~\c^p#q@IAwR zQp stx@?6yM8Vz3=*A ~߇zw,;o@ ،4>zQq[AN1Ђ<^٤T 6?:~~<1` SA} 3S d}8<~hC/=:@>a݁@)p:m SzʤngS@8 Oaiè ddpIri!`vݕhzJd7 9*1M1 >oqN:'\W1=mː޽csJG r8$a8v2qq#sLmO 8v23ց2q)9\scқ@Bn֔ uN99ށ {9䜌玦p 3cOP$;9<眞8[|?1$N`SiN,9;NpJy`}ia48sTdK9S8;qy'#=?=LV$axOL`vxޥW}q}ȣA\9'ZaF3=N8ߞzPc3׭Pd.du.s8.`mzҗ xY^@ ן`O=9SsN [|O f~<;s{ӽ'y4n $681OrCc+אz;r4w@|trx<qA1aA#=zTsc#<`zcR `r00?^s@ $!l F9IT(8?(矧q6rҀs2A玣לqA{g\K3ln9ҎpA@0,'2O14 H+|=?)`s_C@z9א3x`I8'ڎ_y;zz~TA۾q.X qÜйxSosN?!;$ginr3;S 80ێ>l?>޽izvh~\8K dg9p[<QF ڽy:I@$瞸8}۴F#ӑގ(;Ku;S^~Ѐ\sݹ׏SO\/<<==hz0۾qJ\r=^N@@hB{c$GS$:T~A6LN M3 m`N~!sw(8"8=G{q@<.q$(1#cׯݶ7=E'׿ 8cҁGs\_ژ{8Og=GAށ9ǯLN3Ojg8)00nHSz+yZCDggq#'@,~]`iH,Fde $`rpzgҚ98B8l^$qEB}\9jF<g\x(ݞׯ!'kc=M9A*9㞼tvqvp{1Rx\?8ݿoK?p m9$Cճ<OC8@}{RXx[h`{it(O@p={:H'p3G@c'䏼Oq1FH0 A=摎z@˭-CA'֛$`?4 =G <0q4}6T)'1KÅ\ᱞ'3M911a<p'O^&Wb0>n[@X,z p玿zHLgxP:~zj07:)'$zb}#h$98Bnw9Ԏd)quk!d/Aӱ=@+F~;rv($#$Sz;~'$0p381`2dj@ݹ$O Ófrgg'󏨧~9?Uy̷T˃`T~.=q) 1^y'N >Xuv g@4J2sǯ5"y`qv\gs@X#$oon1 n8?ɦb(1N}zx''h:s֋@1u#=:ߞ=*Mpxy#4 F \r=9黀}3Sd3pGMp21Є8?oϑҔry;g>@ v9'#ۆ~ >^19n/jEX3 +6;dA>Ps;ǽ'8#O*H'G'J]n gN u8l9;sQ~\`($N#(WdxF;x\c4g$c'?(89#r-#q i=W#;q=F|qd[AFHqHs^N9;F0?@uӃxϧ+ 8c>qۑ@Fx逸`c UCqB O,T^1o4r0y#FF@rOjy$uݻ^8sFx 03בLrPTzv9T90Tqz9Ag֥87z?q@l31Q!Mqdr~IAzFpӷ9Ƿҙʃ$w^I@'] 1R`r $t=()!G8%+'4[9;ԃ $3͎Ja=rpC†1c2=c)ݒARt!H <-qrO]98POE&>LFL_\qR/H*==J98lt|z1۹ʒ 'IQOsstHO?/ Q} 1O1@ ;G 2y$rGOJh' dsszІy'qg֣'gWI#|>a(2NvI rC܎I|C80瓜?Ƒ~3Ű=rA8<.O g;OE p {)́$}>1ĎHnM7鷮 #'p: aW9Ns: ץzpTm9i V_HB*99%׮ q9''W0r>P= :֑g! dБ=I(lc`֝ b0IM2ï99ۏP2Fisʟ''=O썝~Q8>eFN~l($ wҶРc7rP$`.G?4ҹӀ8AҁrW9R<F6~x c84a$'9$9)}7R}ZCg x?(FH3{v/8玢0 px߯< i`#/9Q^!nʃקLrp pJq>X')1lgyT=-76Ogi8=x4&~\}s  isցp0>n#{dTdr66qc[ =Kn#&Nv'\N[3dz{jew1~UORA0[:㞍A/bx؞$g9_A_BqϦ2q>=+'4/TmCWNl+,:p1|?{7S?Z&$}*1c$<03oj%P8^?[㟝I1}Dbл]bXvSp 'Ӛ102spz'v=irH~|w)`tdt`0H4:<`p?Oǐ v(xI)@\hp8voc'F}>*w\pqA(F:IA䞤czw  PÞA dy?aLc7 9Ҁc9$y9^F{}~A$3n3ӭIt2; v$(Ϳ6FূpO;=0zoOqILQs9zg1>Fin^ ZL{}OG).@pG>PrW+-ғ9%`SNfG\\w85,3p@;C.98 n,¥B bwANʚہ#`O#&|s㌌}O0@w3\ X_| }iXs?sHqHq6g:SI$3!s=N_Ҁ,c@##uS'o 2?J7zQ8apO_1LH8psIoA# 7sܶI8 bWCΑ}y8}3@K'0 qӹޙH{/)32??`Ҁ߸`ϵ Qzfs;Jh:Sdc3' p2y \r?ǭ'|21 8`9!z};f2 :dy021hNۀ8@nד(& r3QGlR @cps_7rIsڀcq;xA})xn8Kgi'۞qO8`|L~cqGb9@8OLV3r dd{< sN#_ls=g\c A9'?dQ΁dy=;N g ynޠg ןRc$8+3d{gS Lw>0q'=qǭK߿ 3ԍ tSy<#.3d7A<3g>0Sil@|ۗ!OC$1FLa\v8hi8Տ*yϓa998$w yx[◫q&1 'xWۀzTN:p2?9) S7;got8zwd# pOsn)Ol9|u@ %99t_a둎 <6~^̓z@#^I'М <{q{t>CTztc9E8$C9+rJP}89#Lq0GS1שsF|G A$J`g r 3wN;?H!lywKG|<q!@ sғ yyurNs2z7c9*y_<GP$Ǡ8z{^߭2E$2 ܁ZOpK7 AF=h!sN =c8=xJ}:8'2=3@z`R q̓Nc ) c\.q)AGp03gH'ssLbFޠ :}:!8/9'q?;'F׏L~91Z1=x8}OЀ1=::zTHF23p284db:h$isj@r i'p>0Lq?^.Cq6\SSgs1)ö:t?˵0Au#9N40;AN3?X c'*.Ӄ=HOLyc:OBGaCsD듟wn:sKӜ;g=Gցz=sבӭ.O1`{P",׽)=any,0x݅ ?JL1?w:\R 9pFGˌ .?) OOO'Ig8 Fqϥ&1pqׁ؞ϏP0 b;#3pA^'9<<`A#4 Q{!auG#l)A98#)=pGn1ր&H~$#y@Cr# 'zn8`L@=X? zs/E8$cA2l`pyRsw98^# 9w Ɵ>s㹦Hz@'RSc#=A'$gz =x=:r9N# `0qzdv۞ yzSǰힽs7ӷ=xL?@<~@=4w$u>8\㓑I:dIǨ:nOqcノH#V!@d9}O@Bc u8I9;U&{$rxp)x*q;po|ЀhPp@=8/cϠ<$OHc8-s 2Sv;W6`@~[Lx'8 t4vx {wM vF>cpz?l{O_@w=G9gׁ֘9O@A끃ϭ}3v#ldr29A'_P{?#u#-ہhzpN'zsd!Ӿy eIOOW֔6'{y8 $)?A`u#?OQ֘.ygi=֗eO3a}2NrG`{)zK`d qgx'ߧzdx `spH2F)  ~t#`0y*3ޕNw'ϧQgNŽy9<~'IHO[cpsҚwqӂv ZW̞O_N#q C3 szu8+>q\Fݻ}ܱ}xqr<ǯ?AN1͕x.!n9'#ߎ8܂1@~x悬=O=W^=Mm-9c =f$ @=O qX 4psyJH6$`x#8M% sp~R32h܀N@d'v8:J@$Lc8@ u=ӑx` wUuϩIiAavNG8b.v6s ;~|܀ Isx\{vm'=29z:N@Q:4ܓ6v=)M98'\8h?{F:8$zԠs#vIұDx699g*p:u89Ozo$=7 2pNtLx!%Gqڤm߁;/7dw8uG}q/LG!R?t#=PPAǯsZpzgބis9?^أ88-3ێi1 rG@:OlP9qu'?h F;csۡ{qH#Cdd =)3Cd91ǭP G\a׌R:} @x;P1W9=E.3Ԏ0T=(psl}p—?613Q#dQ{pq=xŒz`: v=cyOx&HЀ (rq?ۆ`\m,œ=s^>lHG99恈FH끎rjL@cu(b#~bߛӿԙnO[qq76AV 펔 ;G898׊@02 ^#I *$t8?8HbnG돧Gh ݺsC139>tҎU euP1yΓgJJ8SMad'[ׯ4 w Xq7pr1/\#NCv|{T ng?.NS`dS#iSs펤Revq;W' H't ˂IQӏސf>reO@ =zae 127gH!!ʌ s)#})ԍH Uewd$ӻ#J@F!y<998'4-wsJc6[>=nKHx##o\~}(K6\(9' AQӓЌ&\|ʻU-1Ҡo-gk[>@0H1֙vc?p7zR12ON@S<~+ GCsl8H?i#6z:cRNw`p?{ϵDNs^[NԘݴ;tF8o~i>^w9j{AvIs܎N''t=I0x w{19Q PBؑ# ݿ/jW2w2?JknNzAڐNIq9NqC1892H-Cd|p?>;T`x91zF\] s1鞃3)=H<`觺01Òr;d?#;O\c:יWvzv^{ `94J$`k(t&$qd޴TqN3o4- 1 r tך'::g5rjYS~V'_{[GCDP!F㑜Z1G<ufRWDn09ݒ" 'O2s6;"d\` <x%G$ y݃~5$ T3~4P1g#282sG*,.QO'S'F@>?5.N29G֟x`0F9HCx=hrr~ld}Zto3zzҮ>lq O(Ovԍ&X>Al3| f~\8*X=q@bܬFw7P0Ϧ鴑iFH<c@py< FC`pF|j]Jq-9qLq8q0Z ==NO=IcҤ&pr8aF )G\sxœdRw9\nH(-m7e 8h(率i,v1׸M@288\ʏӷZwl`qӞFFO>>Tu=H\cBNy0NB<93ܓ֛zHQFL.0H}?:39Oj8'F9s>?7*ǃN0zJE vgGn9Oރyy=E8r9/|>R>Vnu 7}=GAEqs IϮ Ēyی@{}i;eO?W{! 1Nyl>ԙyA#lFCg0'88ӏ˷D<p{L'$I+@=} ^:gsӵ'VA]9\\LzSdTO~=?0 zt9'NO'=Iž9⑀$zhbOC#N?t99$׌=i t\H8qq:#?wdd) uHw*[}A9}8@븓M;R@ONy:}hrp=y8$wc qOGQ ܮ#'vrq9i$consMۜ8PIϿ>g8{qš=Ktާ֝n -U ݸ=/OדRNA9ߑ9=_z\#=hB$;-x9Nssހ!߇Q 0q9x092AL|(}q$t%|cۡat3FH.HS2uۿJR23=\^= v#{)NGp鑓bL}M'# G\v8A9G>@!1I`ө9\qs<~]9}E;{rG\}H䑔't=i1n>-I>79_9^!pRzsԊ9p0#sH;9y?1A8ޚp;=y'sӷ[9+1$Â[{P:##cBst+=9s4c8=t uzT#}>$֔z|۞zC@{s:{S<@#THc*pW8dq#>q(y…:g?q=zF~`FG׶=yr89*ssc8Ox sԞ٧0:`チ^=ɦ&/q<`{?SO 'o4I8H1h:Xn=0zt:wJO뎀rr@u:g!G9}Z~qNyyP&FYs <۞is :zq w8sn7cH$ }q: ;p;Kv\qߎ?88А08As Oǁ}9&c8sǦ;] ?(3Cn9JwN2F9ւ 2ӯZQ ˀ$1g$i1x9N*2r~SӿZmEa8wg69T8sO[y&WprA3ӥ>@qNx\NFGL %۱18׷N*/=z+NqzZ sr:qtsq_qRgls f1 pFI?7^:ucN< z^PvpObqs~`#S& qЂ09? z}Ga5NJd '9w~|nqfq؁@ߛTv޽xϭ3;H- gc4@0=ziN~QrGQ΁ W ~7qxҐ zex3{ sSI@:nL`Ӧ|qO'+@zޕa$í&s21IL䃑i8rF0@<2:w{NJ=I'chwg=Br?/:g!9^-aA$t:yc#JOR߇8ls^X~n@u>JG^WP+=@ \0O@1Rʯ~p~'223@y@q{ ר >uN<#M ڏs;zךv8=[w1@?O$zr8HR$q6{Zn&1ۜ|ܐAd~](?99=)s뜞Z`=s~@9Op=rzA/q>n;C$golт`-<p8 7NpHPdm4 q`Nl|٦'Ͽ҂88 ڀz@s:c z4$>%Cw`=qߌq@#nss9Ͽb| `g *h {~=@GiNp au0,.O, qy:P&;dg|7Qց ce`sǰwr>r~`P6/'8O\Rck|H'9ց ۀ[Frlޏ@`ONx?\dW>ۺ|@ ;H v߿sgӯJLuO~R?H'O9b ;IG=rG'L޴pxa֔^} #4#9SF>v0Ԟ4O@Hn)#^ ^1 G=q@{Nu##8|I$@4n y;}H `ϰ8:{cŽ::dP<9班鎸2@9cq:)G9S#Iӷ'?w `9>d2O隑pFrԖ:mN:sq=}h(N{8dsOlNdNr>OS@ ;c<3 ؜@:qiX=8PT|{S G4 0x$ zqv==sN.\4LT?\z ^gIp܂7NNs w< FN<qb{3vy^=RnjsHMaÁLq9p}ӜFi7m<遒O|ރZ@+6q\2~9' p{s׸)q  Ay0y\{RR܁ =A, =>V楌idm*3\6FIldi\ۿAUr:g8 =T~TaOa$v>ݽ2TrzqFދ ͂KpFyqz`X*vGO5-;xx={`v#-I#R͌8dgx}@)~0I'Wa&{ 끖ށg9O֔?7 {篧ցNz}3ױ#=8=Cq= scpxqҌ9 ?tvRpOBy\Iq 8d~=@,c'ܞԘϾ`i8Pq;z/LӾzPI'IR~6s1G>l@1=h@#uqnO8 =}<#(, G͞|āI8NOɌ+8ӌu'4 ?1^8d<Ү\g =:u{zSdӐ18#0znQ/z~] #*oo(1~`q99 1ϥP1y)N:ޔ!@鞾)0Fs1z3ӃsxP݇PN=sqN^:;H짶;.S2oB9n}s@ ctTI 9 O8y3߯z`/UpG =3Ҟ18š$PH$z)܃21Б4}QS1 q($p,ۉ=}qOSb0#a=yf@QǨ8Z9) =OҚD. 9v7Nzmwޛo9Pz qҘU:OZQ^8ݴ=cfG##Mu@#S^pq==$82=`w㯭댝ǧJV8*x׎upp0>aI''m ӭP!R8 dsr=|p~P *w `q=)>^I`NX=(R=3dgq '䌶rA=yrNp ~r2A#$1.p:??l8N@ 9y';sn$1 4`Ԁ;|9ܮF~R99r{zցI7;''nNsg$N—3GsyHbTppHo˚L3s9HO͓^i|;(Y L:cg1'83@Nxapq( 9c9"c8qh=)q$'3O{K޽n`g\x tБrzvݧFAf {c$'K qpOdg-A |84 `t+@_E|Q3FI8'@g+Ӓq{S0wr9%Iq?ϯcr)H dcSMr{Я]2A ݱdv=9?tdxS֩ۀ^ 8=aqn玴 R۾]܅^n=M&ߝ0NXæO\RQ@wgshῺx$d:@8Wr=G_o(݅`O׮(ʓ8c;wJ .t@=qҎ3AϠu9<ׯbc.Nw9v'b?p8721 ׌tq9b3Ѱ; _Q}қ3O\?“Ѹ'Ն ӥ' ` :N~^9#gN\p#hsɥ;WF1ާa\`d n۽!2۹u<```Ԝ٩۞N=Ɨ $v$p<ޮ[@ prד֦OC0?}3j}a O_GNs$Խu#rC|rh#9`xONC mq \BqЗ=O*d1x*ayRm'X*I*[9>(㞵*͹r@\6;u b\`pH)~qRpz~q,:/#9'׷}~lH'zWe 9BnRHXWRM92ZyUbXc3HSß gdw-NY-f؀=#gSdp=;֊FN:3@Hr2s*]2ldpNw0zZ3ʁ|]NAkKDq ^=e]1} cQܞԄ`n^@+9vUrFqg1Sxx1'?xg@c{dg{`9Cpsӊ`~T;dʀ#-p:4&Tqrz 8USG9dz%r30\d?KapH@-ƓT$Ƕ1^qԱ1>n%@kP3 ۮd{jm$㜯HǷc_T{c׶i 'wEæ0@rr^[hhz't\#,HII=sInz?LE&0,GӞ[:9:޴<8ݓП9= =<皸88GC[EIO>0n; m^tȭ%#d;p 8=5o #1:VD$ `~Qp7d}w$kENѱӮP`t+) ,+T̞v['x.wrIE4%H88 n sNLBu9/Q>N^sxq@Lp@h`HNSqޔzG' {~gu8 0pČ㯧99PF:c'=z a#wFB֧Xr%yyc&OLqAQ >*{CuFpNO0|OC9=4m$H\{Ѵ?7 A>c79^ {g{c4t!L#fmdG;x';8x<퓜`Ӂ遴N73#v;O?4s=qRd`0\ކ2<'q<}p47#X!pNsx9brNsqq֗v!@'zl('9I=z<(g<w+ܞ1xKu#ާ&@9Lc1u ?N=!zd[>8)1Oà͸tli R1Ǹ\`uP.Ӷ:Q*L6U ǧ)zz߷cB9z )6zʀcz~tw9:R!GoNIs[=(/`3c>й'瞼)3 ::iO+q$hB>獤q杏m#>`Os6s)dʔ!xzh Nr0gxO=[13}~}ix?€N1ϮNiqdgG'@99P`sP!ѹ1ւOn}@=(3ϨS##y'=OR>}9d})'RqԞRt9P97u{=?h\q) 9Q0H>=(%/C׮OL;;RsG=3ߏZbH28  "ԃLl{}0\>H;:S9^٤O'oڗGnIpzvgr?7i$ px8##>  )l3;Ҍgq?x0㡡8|⛌(Ԇa[3a7c#Qж=?;9ӥ4 G2EHbx'q1a7rۏ2r2;y |''bH}qq_qܑyz㝜c =NzyFrawF3i8@s~t  AT gQNj4ApÁN@q>hx9=8y6@99cv@w^=y=8)>80rɎr:H\ 8J:9'=*O`#a@*ӜQFݼ}@O(98O_Qҗv8'+@~ԀMǁg~g=st\q@ pGyn< r}UCw< v`}3қvGPA=Ǩ< JLi 'A#=Ey'==BBnm>T{xn9=R#9b7^F; '= IC:rjYv!ls`'ߜ8ԁ!p@qGqn2rA=8">dr=ϧ(`㏼>lvlS%<.v c j q/r@;,9)=ӥ!4cOu?@=8i÷9pz:} .IyU\ t;)O>n a~a0OJq8'>c S󌁀rv9{;S׏{P>R@9מx1A瞝1U~a`olrrzvs~]sHb9gRSgwN܍Fl/:R`=q^)o^g13'Qԑ'qEvm' =飜v%OzO9ށB>R 9s۷78'zz:|0>cOI#9Ÿ(bd` 0s߿O41t~T0wz<Q s$aO q?^!n J:6c{g1Fr0X'^i cNGJU wt qz!vPKc8 wLBdۃ|w9>_Nq=Xs~^Ї8#$?@GqB~9BK`GN0ΐsژ Ԏ@s䊑FĂGU8f,F$r2:ޗ8cw$Bzn1׍&9q0@J:SЃ=?mŁIsݨ03ߕ431#oEycΤ$&ʜ9'?Lp8^q${P4&G#ۃԕ_JC9>\`dbH;nM3$cvOIBg|*䏛ӌ{P>,;e}Gq~2zpH<^r1I#i ן~89,wdp;8{P:'Z=z#R p2Cvf^uϠ"P:888Z*碏0sL|7ϠG<G9'!鑂E_dx9䁞qקJL# !v{zQv<.9^t8?r?FN\ Nz hbyܬ>p09Hh_Y#sqGI'ouqR~lSrF8;SpI<6AIנvWJm=9KpyaaGb8"" {>B~'80ݍ`Am^b.[Kd nn'm#|c1ǐ|wg=AcƒٲrF,t~[K׌#% f@݀3ژЄpRU9ON$g+x"'Qz | fy =H=k}:=1Al}x=p?1ib9ʎqnO9JO\ d;~_7FHJ^- m)8@'sʎYF8I/sӨ:}*`pI983? b6$z,~Yq=q ޔнuNю~^XN{z0>Jyacs=qgNA H댮9Ȱ g2qSo?tckqyϠ+3ܟç_#=j@ .;8 eG\2/8>~ 1 w{Z&CC!IBI8csH@^$x ?$ sqR(ANVG\S2=B*q?7h$n8띿_! y--=>P};qޚぃt=8}Az]F'L^rW#ʘr{8? ipA#߭1O#<H8#z{t)nfHp: rbXmrqv~k롹n$scOe68?xO+O~z:[:z `gߧjp ,zg t݀pBԃׯZw)0czס2AF ?K;I`yX`^'sg 09sKrEq8g$ld23|ǞW*3i9'sg#H  PP!y#뎸œ|;ި .Y@wM;t#r8頸cvI랿ih 8{vdz`ӁHG <@  t~y4xr r:P22F[$9AH/(ЏsS@󓜜c#81o9䂤m~` -r>ҟ C:===yZsсy8S߆Ӫ窌m}A@M#lI$)/Qc߽;n8}:t1GrA9#h89縧`6p2W;[t~} 9U60y vw GpzCRz@9A@ ##61sЎ5ԇ /rIaR#?! 9'@ ӱ{ӆ>U㞀`{R1N6ےFrHvd099gݨ`/ 8 r3aL$ :/>, IUN03qM#1pz7AҘ`ׯ .{40Bs׭/txݎIʎe{ӆYO>=0s~RN3={Sd {g$cq,'ӧz)2럦2ixh#sh=9@='ϟ8 ?.?i9lB>r2~z22?Z@/NIxیѸg\cOf=;~&vǦ7 $psߜT`u':r;t^`as`m#蠑RIviz,3ӓE { 3!=N 3OBOzA#<n'8z}1Ԏ88oN9sN1֣i#v duE4Fv3qi9{G*nsF1=r3)rH>ҒI@͒x GR&qn py0 `WIRsQ 7B3FT0A18:zNO8<xLzLP:99O#8l2Nso֘'`pr$h=8'Fput6y<1@V^/n(@~~qc=O~u#+϶qۊ<tzNzcj n9J=!=88$ܜҥ=RtP9}q%Wi=y='ӜC z}?sF>c?wo>Jb g RI<c=GҀH%xI=qK,rN=y\`P?|\ `qj c9~8۞IvAEP 9pwpN?Z$9w c#[SX`0<6[:۱ϡ ~1B?۟ O_N(l c:##\P@=x@1ڀ @~9߷Jkc FIc220~^ sܑrA~nuЀBsqy,pGA^xq!'ry?ʓG\r?)r(=ߎ1 ?=2FzuR8csҒ qǷjzX@Tpc,9Ԫuݞp zښ$f{rHs׌ ԎT^FѸ=R1ԓ{Ϲi('8RyAϱڝJ9ӧ11Gps;zm'<`i<$g$zשvn ?{S@#a9c r\t4pLqu@:s`~۵zrBOíG' 9"9HGҀ'R3F9=O@z8D;pg<)ۀKc m[ ր dcp`}s(,v?81@ r8dc9<ԞԎ߇é8Nޞv {1{P/L^׵/a8'=h!x>0ypG' ${'@<ޙ8=1pqހGR89='À=NGn qS۷\t4c#x^94as<)drsBq,@8SK ֣rNOϭC  {qwMzun n9ϧ843$(w}=>S﷌>{@q'=@xws׮}hyn>|Fr3曞)O#yBp[dzh`s鎝NprgoPg=s׹80琘-@Ӂס&wgA9as/zF:}ߏZL}F89Po=϶2hg1mfe;OR3GG|09$nOs eN29^>HXz'SNy^ ;ߡ>8qǿ}q>4Ny^:P"Su?ڗ9$׷Z`.qgORGXg2qHH91yOA:xwʷ8Ǧ:8^HLZ^1?zzP8l<N=ٲEQ"bNF8XuA9`Á嗾Ѐg'$ 攝Î{#c48$>f,};~jR1{s=ïp[ 3ǡb9ˌ{?~4~͑!wB1]m39f76>dǿon(Nz܌ǷC dC !:$^}jP@H~֚dz~ۿZ\{8HXsQp޽F3>8.99ss8 GʣԅK_c;zCN`c?7UA>z1y#Hc)FG1($p=~XSAzS~?\ ʀc<'#9sx@ G~A~f$V׌7{AcNsG@(9?\R=g׻`y49978lܛc0:gIGCNLn(sNӎ< v^{ޚ380q?t8q)zs#1A',Aʝv\xu9,' 3ۿaއ>.F2~lgv8#??n~lrN;j[$cFzdQ@33ǹ8#`>|@  >ޘJ}{x933 aGr(N*8\zgzG:d z@AA9q)1+dv@ d 7_iF r9Ϩ<`jPIJv7`r}=?i%78nv89@?1?OJp[@>O^A(Lp dqO#@O zj >c`s( \gaѷ`;@ϧZON3:xOC2E $@~@f`2>9VfjWd˜p08<ƔSǧn2siJ2ad$ߦzt9cNrh) \\6x O 1=@mRq~S= mQ?9,@rjX07/]Fi[=7qz E{u܃F8<| ~4 #(p}2NsOgu8`H֐F+q{czk?tTs5,:N㝧xqۥol~HlT)\h6@$} 8rpxPL{zqi@9{.;c>A003&pF\M$dgXc'Ԗr\yqF+q6ysRn >sC8]ǺdބduUpQNsӷ])m$L峕^VN{ ]9ni.#t9nux0?9힝;ףJZ}Uh1 0A qq׌TA 3k>;Vd$@9!OnU2>lwVf&Fx;z~*]$O5jD4N6ݝX{z{mrkT̚%Wۇt+m{#q8ܜ5hӎSsϥ?qoC?0r}D1 n {nǎKNx\;8 ̞qI8p~M1rt*Trpxõ#u{AϨ$g9wGLc7N:sܚC'= Ԇ=@sϦi瓓ug=rnHu띠mI?ϵK+\9'ޣsP93?cژ 㢏8U@G#=O͓5/e#*Bx8?>NvpI qňgflcI)$$t U>l{\מg&yŊ`d`j]sF  uքy`\s2s<`z~BN<;9Z^8$9#&'ipHdz510 poX\`HG+w>\c뜌}Z'ёn8q1zO? >ar0Ob02A d1C72'9ǧaPQTGA?eNBsA=FO^igAzs Rz6ׁLR$jC(Wo@:zm,1v\PG\eR~J}pR;w sL^ޝ秥0Loϱ83n y!qw;y*W_3=:gY8VAol?`'X 1ݥ8py$5BF8,[pT;qB'Hh\Ԝx Ss\r2= 9z=}FI.xum\ܞIwo=J17]0C`@f 8my)z8'?^\^go'pN\[#z~8R1 g#סҀ #? FNA  O{pGL]$֛129'\yCI=09r3R\a˟Aۚ7qex#5 ʜb9 dzԑLzQxO\ϧ2C$ [g8><ӆޡqМm>sWyGluqs1ӿ(߀sFpNR=1'ސ;$zs@;R:w=03cZ)=131NA'-p=?i8QH8#=?_ց^I MsO?ʐOqN@g>'8qSϧ's@ ps^@lg9ۮic 6 r?g1p>mHONH<)c1_Z@;hz}zd{g#˚cD}z t$FgJvy~py 'qC}=iʓЏZLI's'=ӜunG5 ؁לcw˧8 ϧzqFr{zܰqݨA1߂#u9s2=w=qgqSރH?ZLp3 uϸM[6H)yj#nagן8a`8#q48  q8)cH=8[P GߏG>sw=Oy$e{S}{9zh'{ H|RpI?S[rtA\sH\׎ ghAGNF:KԒ>ny぀2ӌPr>^ILSA [ q>b~f1O9]yajo mܣC?5<.rspb) :;s֜ˑ#ߝA;t9֛xNG$ c1@z߹qSPO~q?N9ϥ.vC7`yӭ.Tv+秷8Np{:|LLQm9>ǧn)OF)l?N8GgӸяӸC0G܆{ ӱ׸z9昬 ~zcОgs8:( ۂ0c zq…R 3_~0* yNsSޚu[v C~f6J玝;@Ip33펟QHhGpNy9ztϦ)=vp1Oj I8 xcԜ=sLC6'az1sN9pA  Tm軏}izq$6xe~:uqןȏj_~FAU 2t@Gy=0xwps<.<7~GJNwc@$4z6?x: mǷjP:~^H?o$u9ޗ. $c|Pt?x9=0GNcry@?xq=rz`&3lqw9}g 0clG=y~NOZ7<8+޿ZV=2ヌ=}*Ykq$|>'O;Tla0$zN@l 8Jp63n{׵^O\qǯ&9 9/l==9/㑜P0܎$`9=/ $鍣qLCzỌLc8<}9g?Q##?(8cqw4&;T/^I9{SБӑ1<ǿNb=c9Jv'*=Fc#ʌcssʂxa>1L{C?j~N;gqE' S{=~`F9OA 0z} )zcqMw  1񃷜I~0GI9c8>(=$1$=i83ׂ0M0SӐso|@@q} 3 ys p8x\p0pC/jn8󌜃=q_Z;NA*}8^Sz2ze?40=#tsltyS^Qu; c{۾)1wd=s8SgN  ْz;`Gi3;;h sy;nM/^t8=|P!zN|w?֎?<٠̃ӂFz.? RzAsr=yz\x8㟯.F2F㌜OҀgq13;pç~1Kd98ۻpGBq@ cI^9=;QO`0298Q@ rF:8 [:tG9 :Ent.s[#6NpA'K hc'ߧLU=s:zuZb8矻xR`u8Fr ]=h8<{cޞRO_sP0~NOaF:tpLO6Ƕ # ~c S9q8NyS29ǧ|T{2ԓ*q䂼/͆Tu'g*QГK|~3G '3=!6ݕ$^cq ӶI=0d$U!{#ۆ}߸";Ld1"~rprA W PAN灞. szS1Iy?($N;rpH; ?\G`7q{Z? O߮3Wux wL:>1 #>QՎт@'B8($);rF=c?)yFO9tƛ;r[Pn?/ q1׃OIqoP{y =@v` 2>cxށ= ]'v8O_:R`ރTN8|@p{R`4 8tzӲrsw>)+ H_'v}=):pNONii$ ǐ=I$=(8 lAD^ 3};8#Hp@J8#ޒ뷯9a8R`8A4`[x v)r?n1,X)Ds0$t!fESsuOJn9۱@&>1X|۽W#⛏!q޼sA.2GνpW L}  [g8* oP0#$qT|gA9F8cԽ)큸9#N:PH9  < ?Ñc!ma0ԟH ?.v9~lgZU=Blrx܊Mqn\+s_Qެz~񮣱g<Wn2y4"&<BĎҘaܕ\@Nq @$[ b7c~SoҘN< AN+i_rCoʁ.pq(l>)N= OUƄc8ꇜ?ZrN@q?:X1?x#}FN0sЀqs'23rG9TtzKZO$69:zq{1 Gqӿr$Pᱜ91^֌Nq:;VHFɸcNF:G^׎+ҧ3Ω`:je FI#+29ecà=s(ay<|ؕYA^:rx9?H>ǡVYOq;zc#9'ޚXT,>ֶR1kRP6L/zkQ7 smex֮/zڷ"vbqӟgڐA+!#p90p~DFA#@@w$t>lgLxI#pz#pXcO_ҎJNBܜr9y\.8G8r=]D8{htN'=i%ܝpNy$+ ~1ОA89H9+m#3v{/fH<LDu_䜷'=ILvOxJFl`I>ǾE"Xz1 vM?yON0}(4sA> c8uaA=$rH[#<?CL ~. q `w8iGP=O`zNON:i|ܞ1;8RIg7ngG_JO\gli x$`3>_׎wNWq{;AБ#X:L lqǯ 9#)ǎ8=0<׾(qЍc(9P=p1qu@=7㷯8T`p~ 8 8;q{ԊIߔN>oH}8 ǿnCݱ{c֟V@zztHxH?A8t=qLcsҚ:^u\>4$z^ARz,Hsx?Z]:2:vjyᏺ׎M79p21zP 9֓ato>$r0}= A`rysր8ҜHRqzdy{S2 czǰ(' 8\FN3O 0cG\c({&^cϷji1YR09:6Hc5 {\r3v *30x10P:3n?O;H<{R)ÂGl8q929^v@bs^isԒ}p@:n=h $Iڹ C@Ϸ͎H$`\|d??ZPr6F@zw?^zc Y@=\3n.r0sPd0v9mxQB0y{g@rpG͌}:Sru#1r:@98Ӷr{cG~0HO@X/q#7`pzQ`(G׊bs'8 x<)Cc}BA )ݝp=?Jx#yG4I=oZ{vd2?\q@잠w?}~\mOAzgLu99wRg-@8L ˞z ʍGS`g / zzL|o8#q';=_rP0p=>}h=Xg=:@.YX$}N8|OR;uG cӎq`\Ԟr1=h?<=lqIp;d a׎ޚzzc@FI'8탁sӱK\$ ;%eIsXga 9(Le㏨'֣֥P13<zSwc}GLv !9%q=i;\evN8 Hz`p=Nr2=:uşQ9v/\g ?ssӠ{ \mo8RAG'n8gف_P'O4r9~$dޠQKO q7gvsM(qs)^O ^U Qr[0@=2{F3r&8s7I!>a|>NXun1]>ByzvW?ts14'ߛ$~vT;(0/> n*#Ӧ:B 8#asRdx2Lh^Ǧ3cJx8n9=3LOלqFsFG\rrOAs@!}F{蠁HH=2`7a=Hӽ#ӥ8S0rĞ ð=GZ=rqSr{Iʌ:yS9g=({aAץ3Iwϭ&2z$2~cAE ';ZRy7 q':8I%sdϰaCqOL'{Ӂ*c(uP'^p{ӳF:.;h=?{R3^@ 20 (IZ2s8'aR`4󜎙?AǯǯQ gLc g;d]h(33@oONtA,H+N}w@Q@s#oEgՎI88z1?d|ոR8{} o8Ӟ?™qװdҥF}:t)Ji?7BNX7=W49q z?)xsǸ=˜Ü#8Ӂ ZC 9 8?/l4n#'qJLh܀8 y I912GA{Z8# sną#?ўxpIɩl ߀\xQFGf9`yPqD'`<Oϭ7'Kux<a q`sГz/<,}9ݹ)z<uÌtlw cvޞF,@}=(p$ &2ٱsM_^3{<چB$t-׌z}i䎸pF:uOs08G?st<8v> zrڀu^}wpA早N^{{vO>4,8nW~ ӮM;v3F}ź)h1p cgҜm‘ '=}>t=9lu'r=<;PG8 H9{{@z~\ 4 `X@oM3?L1qG<98#;OdR3sq:{c)Q^nIn#ZL }qG׿ q)rIHv@-9ŎLןJrNOuj;+7l#q*>x:9'?֐R3qxǦr1H7F)9;=?J\q 19)y$ʜP$÷n;ס =: vۆ㷡9!rq`1:pN1Ď=8 ~RHnT0#$$灃t@㎦&G$r:>~5&ׯN.`1{֔ws`O^5:ON=i>cc< g'?!y85f u{']'8=xB)bpGR;y# g8׊21OrOҤ1s48\sCtvẃ1s4.W'J oQǯ'zqM1=s r}iHcÿϱR8ʀxbs==jAxݞrpqۡ$`cB8fk?9O(:Glu=)'\G~JWqԎz/x sNʌrI uU'zwv|۾jE I'$w8Q"g$<`.00IO /*9䞘HL*N}s=?!AftF~<`1c߿>ߠ827z׿LI `J}i0[ 0G׎; ճz=h9g9鏭dw:v; a@ 1y-qsS#nF' N:/=>Cg8mr:~99(ҜW70\w֘ F9 9zziyמI9@nx@DZ>`wOcF2B׎gO'=N;!S 8vjE9=\r'sހc'Ԍ9<v?_@ q=~9C 󎀏Sa I)38b'<9Zb*F=9$c$ g'x36o?NFXt#8RA `?N(ӏ6p=@iF$}ߧn:۝}}9?CK~= P#$s8Ǹaϡs O^ws^08ĝ1J40388#8`n:dONԀ1>n1SrH@듓 X LFH]1% g6zpހ@SS9-Q3^I62r9L$p# c,~^=)0\݅s @'`3=)@-ސ 8s<{t#;w#F yׁ{)}9;db7#>х@$n;JC2@y킾ǐi \.¼ [c#ן!w=)X8<GNy)`xIh&ϡ&7r1}5`G8: {u<E:qׯZO:~?yq8;Jb\CON@aI#o9:vc瑟 >T'^u;A#S8~p̼wzc- =TDG\`rN{cKn?/`[jQ x%er;H q>[#?§={X40cAF3уcppOp{v1ԕI-@N0G8ٗ9c8!oVr3:R|(A\qtPR\;nϱM<?(+q=8ZSs0އ!^!,G OQagV ㍸ =p($9=9zg9?˚fIp2>r7F=')@>>1)<Ӟ@'73`c׾j@ t]sf£}C %r}~~q2%I]sx=T᳂9Rrp8I qй=9(cd=׭\3/pzWՇN0s;W})5#e[A“VS s=9Q6RFrHZr zڧ :W^wP!~c;ֱf nH[3oq@4,[Sб{RjV$W|:t(2v¤}=xޚ H8s r2`|y'Z6Y0xm=y3)`g#H<o c4G =ۣz0m#?IRyץ$p@$G4GBtS!g=A<{wqn9<`ߚv9y ppqXxA'8~4v9R>l |`A#b0F0A8=1M9dg=7=<889h(nW9bP;u S9lc>-8:0SUqq>f<@OFSdx;P3NQs랆Ìd8?^L\dr'el+=sHx:cs= Ob9 y sHCn~fqfaG r;i`9  vS@[0{vצ0=NG> QFw'=xۀI$x' 89H)=9<ЁJTpqzu' qm*dd:=H'#qSdv^w+Os㷥.@s0'(4˯1~iwnlzPH(qA>8NGFyvhT0H)W=Tzt8?@ttJ8ʟP3qaI=a= dMnA׮~{o9$ߎsRgd=?q r;23ߜ H#?{-`` v>ywzx\9AONw`^G   .J8{pH Gfg<Gr=0)14i=;-~E.d(;y%?S㌮23'@m!p$cSݺb38ӐOc!?P8~r0GJ<۽ )G9f֣8 pp3=8Jqc%OP0Q /S{`mQ};i:gzhrz0x?0N)ǹ;QFPst^;>aH랙 t;@bF }M$Fp3#Q$21{(h.<`(>Z` 8?JCOt''98'OǶ=q*YCzsғ8y,N& 1鑎ByR=iLu퀽eB9GgNs?2qHsޓq8돼TJQ`pIN2G.{t=/J`HH|s׊Ns=?Z.ߨ'^qA䃎N="F1t'v}#4x3'nրx 9#?'L``3Cd7}CoOLw>` ܎⏛#, rzug;ӦxL;P8y7t#Hb#v2w$8n=>P9@ rI[#9<pph8=AJz rx11sP~M }sN\\{'Mm93q=O=r3S xwiӨaqE1ǵ10Sy#qUl1py ;Z!s:kxF@zשj4ۂ {v qN}(<{z <|v&@0>m>/OI? plzw$]ǫOgcޟ#C{M1XAtsmϧlcb }qqC`Й~Qx8~b8ڝ&|22 鞾>9Fs'thX'=qrX`3*8n28 9Liܑ7/q;=:sR@!O|~'M0A$zaT9cc8>{q>q۰8@pH{{g4MOL _NWn@n26r=Oj=:c229ڜ;)G@b=r{NsqhG\(ROjp?s8<~Rm%r gr:@L~\8y$w^ۺg@01ӌ ֘ נߞx#ӥ''%F3J_yugߡ18cN2x?Oʁ Ϡ”aF@1s@ n0lcx9돗q9<;r#o?(=?H5&3 Ӏ}:BG r8bH풸s@ퟺzS@9*n`w;zu(&;z{v'Ӏ8$spAtڣOQۯZi=;pZԐ{d~*oC7nG| 889q8v$r',zE ?\``qH,7!$aTۀzm>=A<|۷?Oˊ@q b?{SL,N?9\E=O^}zgEлu8 4F:taG=>v' cׯc8Kc;0 ypsדScg9{ddB||wA$rGhÞz0W<a~#>} 09P9:2)Sހ zc8=28}h?63܂8֗p=m9 `~{qy:CqNc'N޴-aیh ;88)z@B?ҀO=GN)>vA (1h g 2{Zcp ?(;:b[G.L78^#R r{֗x8^0@d@ ݃ĞWgZ T\yPQ܎aӽ<<p~ZOp!'#~lO`wOy ?!.Sg'*D>qzЌx҆<#< =G|g#8&ǡ8#F63R; L=3qsN=s 0#dmc=A`sҗ$t?Bq9<OH}#cNҐ!nOQ^=9'րp-=H۷\PO8J`.sQI>օ0Hd3@89cN8 F8`g'ˌqRBvQЂL>@w}q $!3'8><{sA ()~b>_}*h]E<urO9@UNO?́֝Xeu9=@= ߮qq@8xL<R~"O^ > A BS(#I$܃?Jfx9[oNit#~G#ަQy$Fz {P!#l {%H$d=o_å( d3dAǦzw#@Sr$sPmpFN1z?u{z @/S ޓ׷@)]@i aO<sޛ~\|d#Ǩv <zxӲ+9'dgn}:ӲzNRA Pd3s:qGʀ$=r: 2GZLWprOLg'Ͻ{>O89q\wx#? Q=܁9G'rj^H$> p1q1gې8G'cGq1r>\t9=SҐ11-BG|iur2ރװ鎜c8猎ϿzE9#G͆#~<`#gۀ21׷^P܂[pOqO{ Ê9<Z U1[ s@irr:_֔`:3/C:O 88szb:u,1^zq;b'Q0x;#Wwr9uva 3ܐ:C=N}猓v8uz7gptzwӠ4¨'\u#M4`m @ y$}sއNEn>㯿znNT6 `ߦjQI ;ӭ&d۶0Tg0JXgׁB啗T0Gr8'+1_3$fe,0^ r^vN@r;ԭ)*7L)lqzhbH`p#׊7 8{ k~2?Jye$O֫$z=~eOZ''8#}v80'R3szCƆ.N#>2 G9 K0w*{idcȨٴZAlS0rCln=_ !i۾Fܔ@aMS  znϿzx c9Njzzqp$z#hq]Tڽ㖢ܶIs]˒sϦ=סMqTZN3?.8$Rd`q2 t=d̬7yP)?{u^NwIbm2?CV2 ZřIG 56]#hm aTdA9'ڧrX [ŘIn<:\A':wuH^w3n^ǑϷSZw1b˴g0=8)|mU #NsyLl# I=BS+1 {948O%AuPz}zII͌84!=OAirrOsuϾ(478ps:g^0qwcv|/a$G1,9ڐrsq8$1qLA '>PdpBI=~sQn161qMn~bpNCBpߐ0T` o#' q=rG9> P6z1y<{ű3yg\ɔgqҲ r$_kϗzt+A@CӚp>n~S֣԰9E=1W隸 #s׫jӏ\ds]1sLIž`r09֞@9'' zeos=FsӭH11;yLa2Gp}VBМrҵDq,@g9$ӗ9H$ 63?Ojdz8:> + ^޽R!W'㑁sLO$2G_ r{˜c68'K9 ܞ: ښ@'sO^1 rz A*N3ҎF1ܧq<:M q_ARmy=@nϯUh9>^?'o\ ~|uނl!I\P=GZ?ŷ q`g-'`q4!~^yq9,*I`p<'<`tӭ #q`G4 gwIsz\We;# *s?*w#g9s׎ )rOˑGNr?@!N94zB=zw㿽bmǠ FFA=:>)@W<}hQ<M9qG^=8eǹy99q^>VHnס wy_OlG=~/;K38aM)8ROBy.G~тs Nn'oUJ$1qO9`39bOQA,s[3s%8nqQǰ>Rqg~.s }z qǐOzu'rpJ(c8zcrl{ o;dTҔ{0\^i(G'$`_P=AN{Px!OnzqzLG=ێ7q{!q={ӵ/\#9= ~6l#de}Az|G=A9a#׃(yN049 w7d89'n0n:=j^3Мr( B/9{SL#9=@ 2?lsǧZB~:;ϧ#rΛ0zqɧbA}*Ar<Ӛ.9'9+N)z} zw zH'7 9~}MH12OHߞQQ㌌U[@@$')w 1K1x(.p>qi݃:9.0;828?3 :x$Aş08nsa9ݽ<py8#d;JpN:#><|vB}zz+/897{Tg:u6z^s1R 0{m遷}3I&>)1#x`w9 T#UNGR?iû#~Xw7$d'֎?=08lp;Ni[Q['ך0GB0 'tX?{zw\v6t#<swd`=a@ sl4:Aϭ?Rx=Tc:ބ&=88Ǡ<H?LDFsg\Rv@ 8ƒ玃R}:0:3 t昆$Е 9]x?w:͞h~xU=0:8#uNiRbAAsPHg=oǵFn9#3 q$  D=A7+Tq<ǐs=qҕo^;b́9<+c=ǯG@Չ8<`WNz6? P@'1|Ԝ1rcHNu1 G}cN'9!ё [O#p?d~ P{z`qx(iۜO#>npzoI20{і$m Hp9& gFx7Rpw`?A{P!s80rpH>|#d6GLg);Nzz IHa`qg43ӌGCqm$*YHaSrB䏯~sF;SӟJo#8Fpry)R,np<|ǐ:L}1;1?rm#=y u88_z?528<zwOzyF;\b~^38 /rGjh=0sSN;>O2A=ۭFA9:׵0de@ S}9+8<v9_A=LVtg zOO˚8 WOBO@X~sݹ'^A#zC;raTmPcZ^9\,8/z❒HN32Q#ɰ|eOsy֜xAE;2?{p ti ,˴:*l ǯ'ӜOQБ!prQrl)s:O^sni9V<_+'Xsl vqz.+ ['`1߇ZaasC=X=ϵ)` It бM14p0 8dp9asսQVc NG9cPqӃNR9Pک14;<J7<6nzܛ}-;ӗtLys{zSDx u t =O p18{tO=q.90W#s?1N><P Bp{ /B1בNs: L1a뜨p@=M FqK8z#@:͞pSϿ{g8e^z}}>LAӌ>2I+GpH? ܃`tnunOQc<;hGn޼cKv:)A:v3A֥z8Ƕj1RxӞ4<N0hH nOK$p cמ[_ƐI=<ژ[9'# }ҐXOgzqϸF0 c$sjJ |px=sS8HX> 9@=:Nw_)#vsBzpF8<sۊvvy8sH}q0H jLG$~=y8t^|hʜp=ssӭ1X^$c?9=OMӶHqGbI1<;=~sJA 8#0NWmO8#8QБ`qr6@?({,zuE < ^}Oۑ(0?Ҁxn#?6t$>€ 篥.Cq׌^HGOʙp-րw Oqӧ9#;~2{QJr3c9y'J3N8A{`Rqߓ#?Ԁ~ݣ=7z-۞r@:) P4)LP{0w9 \qǦsۥ/#t'ggn 2s7ws qP8lퟯ>Iߞ>no^'~@$;FG=AzPRN O`t4@=Sw.*F8GBH {qPr@qjLha͌ Tq FO !0`9ښ~3P;ǀNG#x曑O0 /B6I@x'  uXOb7w[ybp9ٌ`3zӕz8!a9@1F}=y'⛌rK`=1ց I|hn#BHLNHu0}qMԶ`I$PFG;N p?Δ{?6;xOc<pzcA Rzѹ bcg$֔PFHQIZ:1$JӠKgp:uv8'*AbsN{=>\n;\pIx8)8۷9á'@ئ `v=x6#?\m:`9{rq3MC'=3@u(-$*SUkc;P<2@g%y< '0}3c U&|zu?yuA=ANx9'Gi8m!CsI.0F=ty3ؠ:@r6:^ïLddFAuAM @FNGl{u8>N LP;}"9#g!A=sM2x#hcs=9{r^0{М@~t++qr8zTa@p2ğ^@@'%F?œ@' we9 2sܕ,BSry*62zqU:N}>*nlC?;iœĕ}Ҝ>f=NF0e!>>~G=;;}zn p@<轸h=$QBjƮ8œ Cua{wKz)Gװ:!KʁڠvT:g84RNy~ 5 {{N'#;;8qژr8B1pߒ=A8:u!G:ws}n;I Ƕ=F)3ǥPU $s۞(bq' NrQz89'9q@sڠ=:wQTNH ɐ y iFp|:!NqI{qޤہp:!9Ec{N+cqԀq.yR'ZhF7g$19(;qyLSGOs3w^~\H9=rz"'߁poN9@8@.>^[2p =x%Gg=}?ALq%p+x9E7 7F^8s3^G NG)?q($V듁GlӖޠF˷98tdǽ.9c9ێ3^=8iqs}N8~F9M ¶1oEl03rIh:99 s1q988IU9:<7R 4|N ^qOP`FOE? ]N =3ߓcpF>V8>y#> Q;rހ#00i`0>ݔ^0HWzP1vc9`\G?^8(#z ?3S/sƒr;mW_l`9c*}'5,.1Hu Bo@~7'xR}ր1*w rX LTm+{m8=O&R = :\}zWu.=^3ڐȺvAco?wtHʹ1#j x=9 ?j,I 9'j] n8S߮=:ReH᱑gJ۴g^I6h A)1'v\RC#g9 ;p17sC1a8Tʧj3$/TBhv7(%pđR0wr6ӓ?ݒxӎAldvғ}|ɵE Ac'ޘ_;Dv~#9<ד֔x9 rAPe/[#9%}Hn3{=?OH>ܤ7ˆʅiwr9*~]S{}h2zC=FդswgJ:$ӥJ]csz#X6=sWn ~n+x=} &9֮+6Tp2=y`G DMF>΃p9#IҷZ# b{9.wzqҚdH<~zvz'>LHpn?}}+G?[FZI?19H$>Z't'Q9tFFc:7u6#Ry 8d|z{+Tf99U8899;@'_hk`8{uiny`2]'1Hd0Iw< W``aӁ pq Q"gKrX1,qǠcX3>ny*:;~\Uޱ_G9#]Εz*g8#h9>q2GI=MZSбh?\qbsL >\x|g\N+;,ǯcמ5dN}=l>ǮzdzqFFAjE, F >J*T8u?.j;H᱕ nx sՙ1ۓ-H_@=*$wr~S}zS($Q^ݩ=Fr1O`dЎ=Hq8`3׮}:TA9=@q*O^֟d9qiF^nBvGUSp~obJspFGCF3;ׯzv tscHn:} G=v9^b9nO`AO9 *@\v3qyRi'ߏpsQC(NKg-8'cIA8;K ÎHp8`38`ds#cҐ@0x#Z` P0_Z4q ~:l8ۜ+g9q?1 $" 玸sB=}ӭ&i^1#=9pz>QӜ稩=qӌgc gB2@$|c#xGP s?.. NrG%qO{H>z.ѐ9w@<NapF1}O~{`01{})AǷ#LrNx׷^qܯ\=qp22yeҘ7n#^;zqB ܃B:4u`2NY{#}!rA8?ƀ90H23@1~Hc{Ď=1æIAێcWN@F|rr@:H$;W='c8?_ǹCLzӈ ϯJC; }A$ǧNiq$q'9QJ 0d UWc8F^}׀H?&>`{SH=qf Hbq8v:gIy'׵!9$sӏnjR~y614N\ ?BsDXg#ʤ0=Hk`㒸#9u c|w?M 0c:`2s|3ht dq̊\s88=>ޘhB |1z sKGc/BqP.}g둞zv[_,3;:gڀ#?Aǭ(`s^AӀzuHǿt##ppzduǾzR$(2 OE@ :O\%NN>,f[vDzޗ=3^=(OsHx0xǷzQ`dz ޟ1p1p $u$zӻg?uPA9cpr+1=d8D“鎜n3s& EB@~٥h$qW pqH48;1^{suOn?@h1$dFRS9鏛 z;.xes+ҟAh}1+;݁`rN -)v㺏2;ON93^L{I =Jv3<FFrO NH8@<$ ?HjB0#zc9&0܀N1?ғ<9#;3?w#9$q:жݠt~\`8^O cO0 GS 89s{sN_~i1Apy<Jbz>_Q${;В; y߁]z"7@Nx_jq~9=?@X7~h@#Ⱐ<*O#8 @ '4BÜ;$+  dx݀9<BzO% d}y II899ӭ)~>Bl cS8\?)2z{Єn8#bz{,c%-S=N Qg}q=~MOpaySKpѸgS#FI|?{ 8 }(o%LpiApO':8$,=rOzS98'!z8*@N:})cdcϥUbL$ cNB+ߎZh7;s@=ys4cni@NA=8d\d8;ƚle39qHX2yL?,x8'S` >l@AǦ0pFs$0~nҀ9Oz}zO80Ld>ݤoNjQ9g֝C{znT)錕`Gژ Gnyy#:`}RpANM ssAcsF9?@7)җPqtqtzCh`yǐá>ZLk8<^:x^?8P~N){0 s> Ds{f9E;GNx4s^x7qpqŽ@CADGzM"bXaq}1R4'OCqc=;9v#<^O^)2F# = 3ِs85%$Cc@XzQQ P٬Qs9Îsrwco=ϩ4p@pwuO9`{dT?m#Lsߚn}8'ێ>hd wOLvK}??^H;~s{NWA#OQǦ;T<6GAbo$sϯ׭;q^@ xJ}r})w n<8Oz;9RA F=:uzg9uRS}H'9w=8s`'=>n+y+9Ozuש;1C'dsǮ<c;=r2OR85@?7`pz3=EoCXH>=#N? )\cO oJ|Rqu$O8=B;_+n\cqOs'xUAJHagS37;Ev#>zA$݆0>I4cל h> +8p~nx#Qz шJvGq#cӊ9arW!#AI#2=N:@rX39۸d^?w0W=2*pX0p2b˕ԗ3lJ2{ #'<^^ )9*Eܑ61dj[s:r-#lcj`4pǪO|Ou$=zbISW8%@x8ߚqspFG?QMU~PNsrv=h킘6ߞ1= 8G t7x?. (|2CО:`S!pAېq@GAœ7A9|de 9`S>^XrqcG47p88TΤ `=:0F%S ^zyOzc giH2/|#Izcr;j)m?:RyqL#Ж € !8=}(8ӏJsw9`}q?JA㌀31܎(xw819 3sǦP PV=LqN8Qw-8A~56޿6Ҽ'qsځn<8aR9};1Wv9\ )2<8ۊL~"Hp8nbg g=s@+c`$r{8 x'dO<3@I~qC 1P1bdqRs9' .@Op;Pgq?t3`:Ou=^'9#yor~< sQuAݪ@S۩'lP/09wHb̼m7.Cd/۞()n觧_~sFv'N⁌xdt?, 0g A8 FCg9##8}SF v188㯭/3n?O~=,Jr  yϥ&122Ts=xrIpN@?F[g#A20sxO].\P y9A@ d/'І3-3 ÜSA0O9ORzLhi`x'jqM#,H[(0t=GrX`̓87r08e+x==J$39IN׏ӵK#'4ˁ*| <('קB1ޣu$9T@r2N[q?ʣՈ ‚Xcn~P;^Ժ^}p*{\ӗ鞸> +QHcw"=`pyO Ts E|zr{s̍aFT眫gzWv=&Htr^wncxU#>NZqԄ11c$sN*@ O>k.@L$ { J@ǓO$sDew#䞜=`rxO=Mfs xje^~Rd0NWk/<'ԑn#ӞA#ӯBV |rx'}i@:ԓTy ܽ~|}{4 q$eA99Gzg88n45L!9=Bisg1񤖃wxӌ;8$gqyѱc=殣*=?Zn^>`O8'?+Ms8P }=wz#!QHs#=3V0:8i[sbk1? cH=jҜ۳'gyKV1JI< 䑎O<^^߭Y$_1sNNXtH$eW#?JFNq8?6Nv'hu;B0sȦ&3C7#tI=:tSqzc8>aztzb p1 )#3zrO\Cߚ`dNqH9'i;u?nϽb 8m5yx: I{n瓆'I+xFad㑴g8M9;q~Q@_0q$=4H^(ӎ u|#_o8TN1ǯ_No`?7<zEݜsnr=*3rA^00qmۜg==v<OS=|.O=i @p:񓌍{NF09(뀼ӿZOSU<1z~U:G0q߱<7p^0O\w݌sS^spr{CAONގ:8'>onE2zb #$cyⓩ9ːzR過Oͻ<`sȥ$wܜ {c@ztcԜާ>'zpFp3؟ZaOQӗsǨJ<zwLH v`@m3=z\g;tl^'͟7sMlscO<)'䓁sǶC.2뎜c sד)1'9zRzuH~8tڿ v; ߸sx >9ڻ'oҁ.H!Gx$`tb7dqIu*1?^41NC0: 4sAOÁ =Tg{d~=4| rUry=zg)NOR9[<{(gG Gӻ{8=#ޚ};yy0 ={S/ 8`:}}=3!9霏!1sN1c~)>h$E11=@RW玽q@-O<}iBW<#OZN3}h8m-ߑO#$򧍧i9n< g#,ztq #E4'}r{3qRӜ-OQۚ'ʧ N{Oj2{dG c)>rƝ׾9c|gr`2ÐG9Nh nQeEQ<98GϽI9p942:sځuP3?1ҥ80(z`dOb=98<p8sK Xt\t@ Nwg@( u`1HO#c|ǞhÁN'?3$G\yoSy#8qK g9;@8ttҚw#1> nэz<מcp <ǜzdpIӽ7os997zL `99y?1zqm ǧ㎠Iɣp3ZCޣ(9c~b S4 xîO0 g$z9XG_| x֓<z.s@!p7tn7$Kg֌񴞝zs(dqHO>'9(#ێ=?ZLd:w=}/ʁ o'8\1:s<23GjQr?shx2y֞3d>4R0Ϧ9Nul`zO_\z%9ria8$?* <:u玙OL*qzNF d#g9\cǯ>rqӁ^:۰*)M8l>=$v',{qӭz@ۑS3Iǂ;sϧZq!WOn5080c t=hrNFw=0hOF#OqHA$Fx#nu 'JANG^ihHagqSMI #s u- 8B2: e}OԓnG`F9N@=1ҀϿ =28s'LԚC I#=n39#?'qHG| :>\cל1 ;$~s2##族靧OHʜ~yf$(,8ދ'BIڛOC@onM÷g8݌G㩧ez'$zONA0sRX?{$^0yT?{rwǷZr$`p9H)&~9cךQߜpĐc;Ln׌qyG8\gI㏯B:?q3)A'zKex)AŹ$ISHqذ#x:H͢L$c)G H3P!AIܹmߖzӔpF$c$[S2s킻r#3jv}O<1=zx }=Ž}n#$#?.2qjRW8?.hXn8@wo܀%{wZc>W>`m}=3ҍHc'8 w;88;Ƞߐx |7Ӧhs퓁~Xz4А``cn-|{zt{`,3ۥ1$FXS`d3=)0# p:sF:wc|A2߈q@8䑕]޽('{1sH8,}NN8S׎<>ߍ O8lS;#?^F'w94Ph 8Ga~9$qԎ~ g GXRm\d/K)!v88⛸=NAl'F?#A=i0@=FFH듌tl"$u 1q_>Sq#9灎FOl#%HX1:c89?+7=cG!@gq4'<[#}3qiǞ<dO|d*2Ǡ9@Lc) a:za8'2zr8q@ʜrN?T0}NN7us܆W?JaPrųRc'+`J t@nn&LЎ0N;8` _brzSԃ΁Xw\2 svǭq$Qs11⚬01#Gz=6Xvo SHrz8x:)#:wldJy< '?0*[*Whln#4〠N3H#?/P:sӯwog'rp;sϵsy(t) dzJ{q#0Lɧ: H#H:00}>e8qFy`oMgncz r{^q[Bc 0Ct#98#zPw}sӧ\ƌcs=}(;91R=:?t>G]h遒{F$s>#;tdcОǰVqXcL##9 =9#s4 s(P't0H3?Hf{q נ=nq߷O$C9'n4GPC2;*lzF3ǿ$,v!7$ 3=j@p)F'r?:bdW=sNP}dv83ڀ?!qI#=rGz2Aޝq A%1 g֐9?#OUs~r Srr{B7$qؓ}MAcQM)=y-N6F:qGH#L 1id6xpqrzP`O';IGl*1=xF{cr9#=N NG=@ 8OR2q3zU N8ϣqӯ'ڌ6S@䞽FF:G9J>nO^^s@$cݎ3rF ;6Q`?€<}@'$RPn@'G!r?1͆8',=?yq;Gs2Ox(Gv9w{R' @r:t')Â3I GL{t4O#wvx9##׎c>I9oDZL@^[Ӟwd8П4u#nH`Iq֜Ar3ϠΘ p܌=*7=6 n:ӯciaA8r{@?7A;R}pAb}=*D;HU:񐧿_΁b2x#,Gs1@ ܃>^g ø. ~)&#ď+Ѹ1 G8"#y^}3@dt#9F@cTq#:}iNrrGSRa08zd _Q^(?PN0? 9Wc ==9 gnpTN܌㓏:R`09=xitpv:zPqqБ +)O "<0A#tfcw0*>\yq)9(#&!wq@<Ǹ•c߱ۂs)ۃלw79|: 0OϽK##󝠐G#r8fea8)1h;I9*ǜ\1>iHoӦ*J0A\p=rq4$ (\b~5=BeF #^N)p`H` >^yvd}:!9*g88ݟϪ9 Զx8 Cep;\m<;~4ܒy%? s+UPM?>]ëd< g91Oqܞ6 r{qrÃ90{ceA\18^3۪A'S$u=x4 UAGb^[ǥ`u 6'ZldX8BĜsCR:rUN9[ 2rıӧZvx `d;r1iܕ8\FrC SHH$?u{OLzʈGc88 U6}2`ZUК'KCz=C:[ vojE<KppF:sxm(n>nݹ9$¶G sޭt#HNqzBwHL2T7\rq֚;DBN\`giфyݷPgfc p8 dwǧG AcHc8FO3'󮃜c8p=?Zh 4Q4)'dp{S{uz?ȪAmޤ}zOps:,͢eu=9'IR ('#'khRnXgs`s=`~rs'nz 茮yę\[y^Fʹ{}tEr$o9=;Rnp*9$tfVK`WQ0 d^%wddP>pH$wΤ3z<)j9 ǭ #'eO'cpN@x G^IrrsuӶ*$TLU,g@$`S=ב\5=~c89nN ~lg?GOwZe${nOJ(ar7s ݖ,h' $^;jQ2}1m 5@c=zG2: m2;ϰӨ:稧zӸodqᘰ$8oJ\NX}(A[9*9t1h|dgpݞ~uA=h$ sܜwq@ےOӊǡݏ'`bHAsݎ3JpNGu#,xIx|< πx!Nݷ)NiBq’` : ?1N8\zc3cy ǂnu-nݪ0 @Ns9N qn1C;B?œ8Fzu9Hgu' @W8s3L8rWpFL ]8Lt$~IϷpGNO^1 vGnQuc6w=Ba>$F$֛$0~Pǩϧ<rI랙'= >1:@J:I' NiF~E101c;c_Z(\c}恒Ќylzt =#x#<g9A֏ q@B8y~|J 7+`d&O3CI9CBq$=:q@Ӝ8y'ahn˞nsN3HpA\AO99Ln#N9<)~a܏@^qKp@A'u<` 82rs98/=27=: }_.F8}@&x#/9<#K c ӃG}Ecg8IϿ<0O(,דA'``sۧ#֠Nx'\P}QǽH` z:??18'33{M'/B8#ӟzC8GOnZdH =Gs)zc$Ox;H~81n}i9p;< ;9O=jMA^3ʝs9 Aߞ7?%S@jP{'0CsOi'9 1T-Q:.x'zr/Jw$RGdޝvx?j8w0g$ G_LB<'9sߠ'S`? 9NFp=1\dsqb;u@/>89 ;ȧq=23M =qNdx; =a=یd{ w@&rs88ZBNO3v=h!pp:)cAg$q=6{`O 0[=qqQp@y3#vvp# cHxq'ۦJ< @3O;}OAgOIHz4t03$`=yj@a$vOG pG#Z ׸NL8$PhzO眎saI FrT@_өNq+*pA֗23A=N9^X4d*8ۀz=}$}UP 89 ֘xぐ<ݺq҄+gČ`'@Wڏa;6z>3Nzg' r ~hBÉu >Iǯ{RX7 qq϶zzR>e?t7}<Ђ ߏJM`䓎IK i9Lrz:za7f2Fp9HЕӌ|{ WNG=pI'Nr#P}Xnq:sP|dzaa ~qQۡz;s~w uT2p=p;{8'd{{d4\V g pyl*w 1:s =xzO݂'9 n&I;y^8>SgWGӿlt:O0);{|nj׽0$î[(.31y߰Ǯ:t&:n<G)Tmzur88QvL~f'`1#'tN H)aIV\FW?7Cߚ1F'e!3w?4!'JAb`v>^sL0:dsulnJ\@p8ϡ|{wgoJh>S?灊v{qw sc;eOOxqO4#ݾS9FqG@qs׌} G|ܑg qG@y3F=~2pyݬGSÜB=2 $v Tdv:ptQ;ӷa1 1MpOb139;v-'?NM;[G ߞu 3g4.('0>nO|?^(8wI> nx¹8s:7?Ҕ&|{9GMX7Lnq<'ӊiʎNrx)8c5Bq(xHyFRG=qn>bA<HoƁ wnp>C^1^>[,>R;Rdc㓌_ dH~O^}))cއH9ژ8AF7I'dq`w 8#x##!$8n r@{?(9x,  yCN8g܌EIGS ?zd%}'qq'$sQd}JqR~ιGNO\SAqNґ ,^^Ҁr`F9ץ0u#s;z8  #;qs@ u .sKs؟La_2 HL&1zp;uHxO' pNsGA\h9O<~4쎅F7@~Q#%V&y{ON1q)\ G]à%_z`/O|PTdWr8{v͸z9wqJL-zHF~`<3ajCCr99'=~&F܌8ʁdKnbTFg9} 9z.C==yϽ@ 9CJ`܆^(n8u1ɩ`z s$,hv?0#v'49׭ b1<`^; SY@_ 9<ǵ!Wli&Hcށۓ c-TdAI'qbv )?uiNy͂xrz amry>E?7=I)q \c߯ң'8s߿{nP=s󨳎x;q84)nOQ“(@^Wq`ӁHhk!w[qA֓@iuF ӯ'8(I8c/bKa9gx!c3~tO֐i\w'@iNp=qORx>}i}ؓVvOP}Sa.JX.0:qO*>^e8`?>GQP9 1ܒG<r8go$m4ۅ6Ag9]<Oך@?/ɞ1:}9,#8eߌNpxj8N `?z5UTX8`sU$v`u\pN?~a1rABb`P~?7xz _F0p::}7 Gr c)͂vY>SQJ:߻%F n+r{R< $U=b$OcȨl#~l}Ӝ`}z脗A1+NzJr'{ڈw2Fq2F`sUm1T`'ǵhC &W^?Z*~&5:1 #9c 8TA]3e_*N ;/i<`vnkTW r}zgGzt&6r2{Q령'Lw':I󰭡!8 |Ć#+n<3Z) &Fr20Fe=[pH#Uq.%p39rF{RAԜppGrIT%8>v Rs@ldFOL54Ns7P˃OL֦;p}'?Skkhyb\cu,y.׷@1qZCy᱂FIlOq@IqM-rp7AH}`s3צ1Np0Bv2Y7 < cJG^=y?Z?( ?8sҌ)qB3ZD1ܟĞ1x:'#-8C8C`^*A go^7gy?ש"#qhw8Լly<\<6sy rg023I8zgN9s!OE<sjR:cz^ց1Or0$8va/89T99qOi|cj z;P9$  nx''8>d;zc7vN>1#wnd )`I\sҀy 7\3L$ryJ9b1x|и!vhxn -ノznAc94wV@ѿPG 0pISځ8\nHs)NsӍ֐ :Rn8 ln#ȦP>o=9\~zP$; Nzs '%rl;t~199#rGUQgq1>Ԑr9H89>H9?p|:he'*ey/b8?7PsOS {&O979䜑g=1>#m8{w&Þ<T~=#hN894aA`s$LsF6py1\(;::G'8=6?qw#ێޘ'?H= cw#yf9@JCNsՆ;GsK08+۷<~dz<`:SH9=8IwnoQ9l9=>[<-gt\Qq qIA=Zbߍs6 zu}Rs!0q@1nB8q4@psq1?d093ҔSv999=qMTN65 *3~}KX}q$q?s>>n:@ zg7:ǩ@K8`62OΚpzq:f!y<0(ʞ{G^ ?/ys'8qH잼py8py>S9;pr}9G$>q8c?Jv# `==7{t(xb28<7:ҎqgoOZp>lINFyO֘y< d;X$k}래^Iヂ8?q@sp>G`p Ix[q'9n;OZa]Ё<OqNs?t#nA i #@ʞxIr1@m=`=:nӷ=H^;91'@<}*#qz{s@+817s׏j:dG?Nz:gi=.GN=x #s#4ꠍ '8]Q27{b=:ק{u<௷JrӐ1>לQd׃@(;?JUo9vz xiۑԀH>ptR91b`>l}2 #ZcenJb$g[@q'Ny?Xppybsv0E9cxq }esEϯ42Iژ̱ϧMN8Jzc89ڀWQQt{v6yvOI`$g.F9vP8u{t =c~oLǥHg9=B?qܑ2j`з˜j@;߾I'+ԎLo|.G^zPƈ$ c 1>zw铐N[:4Wr= }h#cNA_N8Ny~=3냌+&R؀ 裸=18lW ϩ<#bqK9=xԎi`G8M>@r3껲Wۊq@ч9^1zqs{A0 F9w}UlrqƟpxΕƆz _oy#$ӵ[@<ne#xן+ו99ǷPi;$= C`)2;99Aׁ62x(_O=su<'ħg4@c)Nymd1]E`qpNp1zS~SGc߭Pnd8U~J? $= qGCA'1GnX瓂S13צOy$z} T"mt^PN'8aqҘBdC;Gr)Оܞx9Ssߌܟ)x' tϧL\8=wgw gn*E86=G&&^0 N?^={#pz\͎VI-pw*@sԒ9gU&KBcF;52  pp?Ls֨vNOO}N\6xTUXw 1gCx GLC>\`# ~u)01NA'uϿ v䌂G]֤=^3sӓ{PA3>i䜓9ۏF~sK'Ԍy@n(3@-ur)?ÂO$c8;q Hxn N_|no zq={=HR3p@9'N{~Qb1rON ȦtQo?:@9y 0p?Õ'Ӡ{R(SppNi*HT+OrH#C=@ c{:R0=}COa  ЌmP{czc9>@q 9u@O t3󓑐 Ct9pČOHJi8ǯJL::~os)8;~w68<S@med^i ?+>ƌPsxigԑ#w`ul'סc<8#r On8$z}1EQ\dX'3r@?#E(b2%sOlpz7$tx֋Cl0Oxrr|j 8qFCvbpylv6rO 9y89 Yqx>RD{'=iT1RVa SU{q`~J$7?œ8;p,n7:c ʎ3'=MKcH8#8[4ӂH;<?*sӯB{ qQNNW8'^=sRCX/I .:NG~OG<g@}E! ¶NӟA9: })FnsM'qw$rA#~Yl(wE'<#x\.hD9krNG<ӊ^$Ay'ۃIx!@Fc t<=H9n둍Ǡ`@iq89w=1^0%V tqb$?(\<%GF@9玧?(1cj>Lӷ(9ON}z{0zqwGg8NFH @/lqx=qu|)ո=OE'GrLn'\=On R9;PvAn\\QI8 מN}?u^89>pӜ vLI02H=E94q8dg~b>造Q }s/RpGuNJ  g>ndT0N2=q9N8Q/n)! ?<;qQlOQIU ?8zON gspp=)<`I_OEqߠ!sah_[s/~=L\eim?/lғL3'A@1@:cqo\#3ӓB@ 9%Isޤ^}@|t^W194p8`@Cpp9;epJc|pJgqv&F;'>P9zw؀=@{>J`/rG>F1\c$s{bcA? _i^ I }}z)s 'z@WR~9PcoB'"<<=@ ?(%9IsOUbI8p=A@\@sHOΔg;שzOm@7NsÀisЕ` }1S1FAc$ H#f0rA+~zg> 0ڛ{ p׊hB!Xyz&9B0m?&zN 3A@G9$1lpBCF9Tlrh#gO#{{w!^dgs~4߽ݱc:)l`ГԁABx΁spzw{/pyӧ^y\9Py@ m1K :Ni@<s:#=@`Kr )I3xJqts`H#?@n=Hߎ23}3ޗ=xB$Iێ2?֔#<~֓2~NzHc nNpr(Nʂؑ>j|Ǹ |0G U<1PFK989aូ1[S#sǠ<}іbGO#Ǩ^8E/#1韧z6Q'jf~^:~b8=11p߯yU~+9TpHO@?*N8#!xpp9<ǭ \w\ӆ= ;AycO~iJm83C"նu.x'\R12I T5Asuǿ"X9lv㸤4 qn0vIP}ё@~\~?:R 'nSI&2X`=#pa 1O=(rB1 J V !x9By= de@?Jtaya8?)usGn9*'r)vBSo׎ƟI~P8'i98p3ӁS@9tCFJ01rsA ~ GJFaL} MjSr@RN=Oey N[[>d$7)oF;A#?Mgl 8=pS[B qLrH?#oO H۸?sg+}O`ǧzKAÞsӆrG灜v O#FF2@?7G:5PZ_Д&z^8f^ c1'!$2JJݿ]>[q>Q@ ~nӀ1qg֬:'sw9$W$;rПnƮ5 bO'W?.OU]98$}+/cH ccޜFy.zg=!fn9<)9^F~hB8#Ü \qq) 9!yުAr8=*pqry=}E\%MnZY*uӓ=19 T?G^rJ9Gs3hx>}G8,N}Ìx{kty!UX[A=8*C󁵾0PO vdpy)~= 8-9Üg#*{p$z #>f7tȥ_']+  F>Z8<|wrrP:+;YFF2y瞽j9m%n0A$7oOsųqW82A<3}.D\(98|`$sL5 7;xk|Ls\:=3? |ry;}95OvzEl۾zd8$I8YGSwaF39>޾y3 tA]09*u4P39$m=*p@;y?WL9t pH@u8=xη_SVpNcA?L 1R:\=9)8VKm5h<`{6WʜgG0s1QbI8d6Gn02{4ߟǯN==(1cٹsKg|99큟td}N9#8S,59z0_N?hs`(F@ gqǽG>꼓g}=$8$@G403pTBFp1 w/[0sI#jkӯ]@28brHy.?i2r$H r$xA{=d6q=#<]}@R4'9gC0pp@OLiw8>柀AIs{f3A{RcGgSڀI` dc O{FOo[wN2Lvz:}ێAӷZ`l 7vێ9t=(x?Z>*28<m.m7zE `|y'$׎恒aqc=x>\s`##N3qvi+s0;g?2zF}{[Ԝ}W;䜓;g9ʠON0 '#*z9?61pGǥ$`=JRWp0O߶y# g֔u` rQ!8=ϯ  Өlx$89 8  u~G($11g2~l~#;?0=Г<{MlrFr=r1NNHByɦ!y##$~MWA { ߥ1v '$s~G{yNOcA 2@iÌc8@ #*[/ݍA<J8^99Qh9CۓN?JC91y:@ leH} Sx9=fF8@<~`zcIǽ<.1}wsFѹ`r)sَ< aC{ӱN-I =@i$mzs_SPYH'8sހcspg9'qO>npǠ#^88~y'=iN1'€:u4gg׎s,v)m-xwa['=S:dLwlu<(gP q?qidgaOl߭;' S~I^:3gZC P9$G!8r{tr8K8> d8L CB2;>I,qϩxlC70N@49'{}0CrTg~4[w*pFXAЌvþ0:1L$drz\~R40z;8җ9<98]z;g= 9_݀K+$3R{DPxlg8 Բ.ݔt,1{zg=8ÁISt/8'/oj@E ~}Olzh|nvN?t8<= 㠩0Fr8s9>8!rzL1Zw' q_~{1B1gqy 8v9b=z߿4q:s^wW8g4؅[r3yߊL`#''z!'GC{{:9} `!לzuޔw~bFrH$ޟ̼qFx擸$q{@ a`^iT'lG@zpF14p81sOjap:g1B_Kʏ89 lPss##$|#:9x$@9N0(zz zs֌p0F!FyrzC>#ր]dpF2{~rCut(ld$`u^ۻ~} 9'?.qz `?9d4^9c'oJRs9A<?=9s^F'Қ[~?NHh& OM0#+vHBGNQN09~4#n3גOn϶~О}I!XtWǜz:i'G 9@r1Q6$@xC{:w9Oi[wˁpp82?S3#Sϧnت!23N~ep??zrt+4KBFsIڬ3zOZdIh8azr'''Hp`a\ҩz~}ic ``zy0sE猜qg9s/О ௯O~4,x;l#'Zd98+rO$; c?xvJP=y~a4rܨ9RFϵ.ssJLd{} s!lN03I30l( {4NrXp>qNv6J1Cd~.Uv/9ܤ8'{ tv󜞄H@h߂y92F Z7} I?{zt MÎ8݌dyȢ֡׌0=^Իbrry4{$ 8$v b l29+ Ey$z]>sASX\O?3 )=Кxo[Ԍwy4\V$mFHssR >d 3ӯb6bz'1pr)a;H 9^.1'ԥ9Itxwa7RF@ldx}iC}ƕ|_@;~vsÞoCx^G9=0R}-@y S͎3:@ry9RH'Cp9㩩 #$? 1|{x=h3A:r>2('۸'۞(cpNp8 z323OONx8q/e::'Q2;ϵ.6vN !p$3j'# Fo΀<8>Ӝ8oq@qqVsLd J9sҁm< i2;L9ziO@6sRhU2y^’I 8! Q$.z}s=4 33(8?PiF=rq'GZHCr;snN~9Q{z op s9|~.F8 6yюJ Hʓ׌ Ч98uc=gI821E@;0@Nq"N9Ke <2IKco`rlA郃xJ1yAniGN8ǹ)# 7'U<߮@< pP)|ۀ}c<ϧp^qt`Hw`x>_rpzgq@v`H' :tH9;FJÃx y'8qx=iݸg|s):qsԀO<J'Np} 8=)GAzsߥxQpA` `LLqGԅq:]dnqی@?'G^0zZipI$NGA3:E \HD ݺ냎 v8 10 'zaCx3#48' ##vqrwcqp@F#B ǯLy8ޞg#qs=Z=Iߎ[1uO3۵<<dh3۱=y8ϧbsژ\g+:}jP@Sį'@ځ1@'(}@<89#B~z+b2MlM :u9rU!p =;I<(S:܌2}<м)<3`7U{o([r;nR9u3Nsy,q=}inN9llq㹦8昄O<A9H7tI$}>8x,?͑qH=3{S99SH1{s@8gO~ '91'\h :#֗$<0v?(c8$râ@w(*~oAR6ӃT\8 ϯo5IbOc9s•v7S'0I `vzJ`8. leN1>$>AG*`Ic r8N)ˌg e  `sR)##ێ:G0p0gE\^BHcҞ8z;O9#ӵ402\v=)Wʹ#9럛?w#lBu9qՈ>u8*sH81pqǶ})9` #' WcpƘ} p0y#鏼=XSBb[%G<͞Ҙ 0GPs)03 h˟By1rbrzq}E'Gb8<0=i<`Jă3>HCJdqNx<֐,l<(8OQP1Xs>}4dQ|9@Álq p{gހ y^4['7@4'M|r d랟&x;{s0;Ҝ|Æ#_㷨GPr@ϧ}:zS fPGG ל=GOzV+/I'&H clr:tӟjHגAO^isUpp<\d 1g?^В{9*1<0'נGzr;0žvғ9 c=RVPr w$1xqOz8HQ 0ma=:4pwt"|=~l`>rpylq}sJ휌UЍb1JC>+? '?t=0pIK!O~*@Î0!qy~tmbHҐЄFy۵FF3׀GpO<pIޠ9@8'+((p8< t ڔ``s'Ѓ(R3OAA\t X=pGQRQH#9 ӏ#qy8<oaŽiT8\\Sdg;׏OΝ; 0{W?/$ 'z\<d׷5[@|7<䜁Ԓ:y`'зB{ $q$~Tca r0⇿WǸՁ3zS̏b3t>X{֚LH۞ FOv9oF9q]H d8xSƂr?7^֔18' 0~\v_$F!A slF}5d6;R ݂2r:( {zR[RX$r=:C!=y zw֜|3dgۊe=.O#֯D+ߨ=9=Glܸ9#<pry I#=OOZ=f9ׯ_zǡ끜y>_K'w=@G|ӳ9`q]P;IqҥU@g׹ɦBN #ߊdpqc5pzYqvc;O\?r޺c g 9ju,98vSz#krL9ב1Q)@[8n'w==oe z|'Rdrn՛8^ n6q~bsV!A 7m#$=zBFÖ$G 3݇LqsA;ϥDc9xK; zq+?zQ#F<~. =s۞} ?+cGsZCEbŹrrNGLϯbaՆxGBO=1u NC|UW.c=IG`FsQ+DRqGS.+ϮwP9r>a>r9c+͟S֥)sOZvFy t#Ysצ1Eh*8WD69juds#<=R}s :v}) @#ldN#%cl ~19 sP0{{`1ϡj}1#؀pqǯRqs~#<ێ(ww0\1=H=xfqlpFs):GSǿL UA F:yG^}&9q(ܓm'x{EN1uǭN9n;gu;N9߯r~jo#} _'vA߷czJHb0Wvx[gOqސ1CLQ|z2qQ/R::uL`g$co \sޛI8#wR: ֘tiNI##ӷz0 0J@>0{c$0wq@ ps4w;v1Dz9\zaqz rO$˟zC\#9?sKu 9퓎)+'q:Ыs^翯'(Hp=CH^/_'q pG}#C(^ۺ0@L>&;|89uFuǀsژx)1ps!@>:G x ֩(\c$=),ԮO@P1@8u:29^)G$~FH98#\X}h3۹?0}ZCNq#w`~rz`800y9#3ܞ@@ 뎔xch [Qۆ39qO\q犑-{F=1?O#/#*8L]^9Twc@ ЏOĚ: bHzp⏗y `:w ݷgc֝qqz{ReKc#GLj23O@'CGQry9#o' a#'ݔCǽ&8wqz<}B8P198'#[=$4;: c~1V |S@#.I<0r{zvӐ/# :1=g\;S@8' u_J:tހ#q[sڜGN7z=hиnIǨ힢[z8ps ǯ@?P9b ?aH7>#I>g`n  0B$3@}:tArFHL: H99 sQs<` ʄ|89r84g?bx2GG1@= #wsߟj\yI 9z\q眎8ahn<ן<S<~x3`{ "@2Ӯh5r @xJRJmx1=נcňSۨ> <`7D b?&yt,;3wgd c9,zӲx#'#gdy<vț\{q֐|19H B:9S>of@by!H`8lɤcORM kqCc apH`G$n+L}yh9i^ipdg?6OݳH$c ``HI {|܎=F{z+)cc==Ҏz @3d1OA·=zi?v2>^9l$tZ@oSӁFz4#=1G>㷵4.>aqv3ӧ/8rv\:Z=3w;y7q;:188>CSwH2(;q1쟽O8GHwc0ӝͻĸMm 8$G֒z7Гvcx=Gb!vprI?{??=zp8昇d{#'vӚ@N鞧zR[h#>yO;8#r=sLS)q.2O^Ͻܞp9ސqzz2` IžJctc3r #90yyzr:vO~9#<`0xӐ:Kr;@ ziH%` s9 :)9t8Gt_#{H=x3qh(ʌ9q~:hLc8 `d n? NC I^ݪJ{c'0DZQ{dmxl:[R '`cH{g>~ ,Lsq֓s089HAlN@h ~_  `g?=)1zsϠl}hЏ'Ԑ:~=GAhi##Aq5|䎤*]xx=(=&q?Y=9cJ=~g.}sE=}פǸ#j@ws>op3Tatc' M9&qx逿37aRfrC psvn8Āv` BqwRn灞g<Q{U&K9? ʜ=G9gn1B=}G?g7\6zN$rI'?_Ǯ)81 NAq4^H023J@G:GG9(tsFA:~TF$ۊ.1y<}ݻ柒1$CΕo%nzzЬ [ q . 򍼑X4gv@s ;㟗opG={nx8zgQpcsDs<9Gqǧ^(tRp=z~s/nHҐИc|Ì8s0;~HI }>4לƞ98']:<郀94Ssuz`4s.A 2:ӌqGsy11ztO'#1 .0A8t \w8鷮1{= b(y80a;yy?H={p b\r:`8{q玧 snʜc$6?Ll1ПU$A`Ii?88䃏N:SFP%!~BvFTw8NبI |sq}=9Nr8Zw|p#rsךp9= q{Ӟ9qGztp{gb9H QNq'?\ӿ8$Rp#^'}1K}T;'LC{v9$K={1N:cށHap0:dO8<7͑9[? >\ғ (9>`=mۦ?Ny0p3P>'y 1hqRlO= wǮ8q @ z L}!Ar?=G(_p)>?,ҌpHC@G.$?<g=nNF;;߭1\$ #L8>J; ?^U"G~\~\;RpzqNv0x<Ϸ4amU.{v:/# 4mRr@R0p=A#|+c t<褮r8=3=A8 ߞܞn=BqFFIzJq\2:\P/1;dtᛁqL2r8qUC@ms?0aRF0A8=q=):˜?ux&H=A`c8>M7;'GpHprA';jNyvX@70#ڥe璧wq|qC&9<`=AeHݞxHH^8ld(N< zAiݣ rOBx03XrR8B`>$d$y-NG@$ޘ\_OCq?S߭3bv8?tR8}-?ڐu9F:bblʓv>iS<0]e{q@w-8>1 L v0~=3=3=j\s s8ӧ H n1 )y@=8#tMSԀ',;s~nOo\)L?.;;sG@9<QO\sžF}~ wv GGSҨqs@ @\c< > &ap8s 9=G#UlH{屐dQԒ0rUQ0GC`rycm}|Cqc9Rbp g9hS1s悆.:dc#JdsÁ@# <㌃2)Nr2CWv~V׎;c"+ f![@8ҤXpq:0{s@xv;ǿ@ JL܎gq Fx?CIm pF;]@5CF\ '1~ wsy gsyG ;w=rGOz˥!Hyx_Ú1[1!:p=;Ty!i8$xqϯm6#O})nK8G@:rء#nv>QT=GIF 'i鵉JrQ ۀ0X{PSL\`ps>th8?KB\du9c֑>zOLl|8r0HcHNv2NA9<u[8'4qH-:s:Ґ-coM*Wx {׎8 +0]džEC恒};T}kOОóAA9<\ Iޙ#MlnO9'Ss=>כ%8*J: gt*[]nLOsN1)ݒ1܂OlR3sޚ8灌8$sa!e\U3R'=xO^rhJA?ONny<ӎ二9?1zv0zg?"`$r2FFAXzݑ=N; s9Ƕ1o֞7g=IсR;æzߏSFy_OB88UuK]X0:VbHlCrNG*Rؼc㟺ǡ#֭~a۟\ui"9r8֭[01x3[Ey+0$$tDPcc߽Purp v?Q'lz4nY#+>az8_n[$ARt>3ET7%) ?tڬ)NsaD_dJ@Ԑ9885>޻ sI\?*ӐFYs@?sZ&CD#'z40B?hmCizS=qxU&g$NNyOۃt#^%տN:Tz |ǡZlbɇ=ϧN G>zkDf-ѾnFn@H=wqc8|֨zpw '*8ۏ֭Q3#:I'!('xޘޗf:beqn:Ԙ^8 __4(9ǎI);#>A"۞FO=i<ϔmc'Gq 8 \4 gp;s@=z֘ 3$={t@$''}=9K\pxǰSup {bß@@1!^cS}3iu?*`?hO /=H>&21y  $s=qFzg?/zc恽dX篨>yǾp8P$+dlc'$󊌑ē3:19dvZvptbʎp>999PtcN Hss=Zi#'$Ay2OF1ޙdzRv\`V9֤]`w䑒I'=xRvvm'qR3C cwpA4 p39<`^J:#CRLsoZx$@Nqxx >oU\ޝӮGP!8e<hs;@~1#f'$ ~ݳBb QNzd@%H8?ҏB ;PrC 9)'\/ NI;7O$JAסpr^tqu$L'$;n~$SvLF:sߍ)9v3קG4wӟRpA{G#=8 tHePsj 69823 Nc#$j9~?LOnpӦ3M$81Oǥ+F~\h3pTaGC$0?SYOnqh0}܀@Od׭+ ryyR 0 yy掻p:I$ކ>cB<?B)`sd[| #xϷ4ϠCo\dQ9 S[w98zz7$c' 1#98o&ۏ?0l|ӯZ9=@IӊxӕAHMqK')?i'#wpFqۧyn+ G߆Ž8zR˴=QN(`Ds:t8ޔ623;F0}#\``IGl򣎇=6ߗNh; s9sN˸q`=NIp)9<#KԜ\qgn:y;q8 qP=9ہw <w@d{yq2ݸ8q8s1ӟ™:B3HN:eRN(Ӓo(#ꧩ su#@ }s’ 949n1ԓnh;O:n3}TlpsqRzݻqϰd8רJq <qh2rzc23'),HNi!#3qۓq(H=tϥ"F0HH=yi{|}3RcaN'Ӄ֎:zGoƐ zu};:*h:qO<#_Ý=:{RessMԶPv9qI u=J:qӯ1s_<ir8@h1wHzv\sHbzzpG{ p'y8u}}\A#ס8cx9VsuA(X8V9߿O=AΪ87H<>i1 }7Qr{r 11tWVy>RW9lq wKD8Г<֌n$r0?T `G2}X i#98 2Rǜ 'c;nsr3ڀq QBp0dT,#c# ۥ;ęNq9~{ QA- c 1Ƿa:Sz㜁awi0?{zqT?( x:cU$}I?x`W4ʎϭPN p=GLTFxn9 OLcc- 7=1:s$zJWsGgnΘe 7q\oqi`'H\@^z=wcPQ\y>٧ XHZfsWb|tx+רA'AϧP9֓q>\E cyO_Ɨ=}בq;8;?ŜONG⾸sқ>w<=y=hd`.sN6{Ɛo9 yR?i-8 ̓c`?1#2qLfNzc>^6;w8)줓XtR]ǞvIp'p=y#SI8'zOH`3㜏7 qdH恢2[;0@#G =Or=i:yq=sqZ@}N? c8;g>Rol$gOWI ,@ K j=㌌ tғ?(R9?΁n#S|cH8ch[99qL6Gw" '$ע;Yq ?.; $ #HHs̊W0ӭ.gsO^F;ۜlmmn$Q{n\sg\,7go_wf䜎:yNxa=OЃljM}x_.p89;qϽ/y=88=.x<9Ӓ=:g&8`4,>R:ђH8Sdqx<Ԏz=0vr ϠlqCab#nqu<79 sRܓQn7z7u`rI$#8'.9 z>aWN}11$*ft#)^#F:sG@vz '=Hq$`8tAH+JPOsR /a@wu+FON<''AgxpqO ?O ~t\6p6z8#(}~c>H7dqRrTd}6ۚpNp P8M&}0;^#9 IxO0C{˕ $}h9n ǡNgG<Ͻa~f~}}qAnhN}8tӧ g4 >)o#ןZLy9#xR489,)9x!N1ړp'oku㎝O~h l9ӥ0{zu mǽ1< <=z7')˟j |'w= Mc<{}֓?mTw=C*[?_JQ}}9>'=$r:~Cq#'zܞ09{hH3qO:/<@q 8?I[h;qq<ցz<}ӆy팀x\i98x^c2z)maOp׭#9#pp2Ib6 =iN2qr =92 ]nj3$۹9#^2 Tێ>w[;Ԣpy$pscCғc'{PT< st?䟪fAIpĂAc4#׊E |<)H xl@qHka 0qwC8ϡ ^pԊLbLn$06HTflݙF'w>Wr*c1n{SU'=%@$3gp<` $wn*Lʎ gp2=q pv'?t\ ec<ǔ>hOΫ] rpTcqҢ;cNW={TĜ>.r@ w)$8ךc?,WH#lz0dw'8 9I8•$aFGCzU t F$gw'Hr rIx`T.c?1Qh-^w#?֘8W~ZN]&$p؃?W0~r9O?1G !G̓Rp?N@2z]|$|1$pxOzs|q#'I M9$O*>zUHxX'9s?Iv3=T!u2q88i7ҩ'\0= 5?S2ItDEFz瑌 5D#'Wؖ 6rN *TR:(9>Jfп1PǹJލ\ '2G$8"=8E 0y\rOCgڢl GON:ܕ~Hn0xv'@t#*Q8<W' r?ʼACtswAkqǸ2gGbǎz>SVwǭf#9[ gӮz}+xKq qW0y'cyg˃leO\ ~|PJ2\rC۞sҥ2]<#Ǝ~Q\Ϸ֞sH$t$~Gx^q|pygwx"X>ߌ8;i2G^@N}:P=Uv8szty'tztdbN'9siO^csA 9zu88ϭ8b[öΧۚyNy78#=:"`~z\8xsAÂ;z[!c3G sZgz^>PNOLPxzPq<` 9zB99Q6pӜduyNKr0:så.FIۂ29Z@#0I'RsO:sHhfc׌<ڛ7O#} zmߦO:R>A\`pOJE՘{ZG? *@_<_󜜞ǧ͌e|H9c[8N$ۦ=9\{o~i#O={ `e#F08d Gq@cr:v4q'q9jCp8 G$ci봃${pTsmR99a)/?uoO|0>Ќ׌bʃqr?.@`N{ޓ?ōF08#nu6v?6c3ڞrY gx41{c qϵ0;'N];`2qquANxϾ<'c~ocl2\qprۆ7Oi0s9'~3'>8!w z7v `=y< {7oU0 ~st>&,:t$G>z' Rq<@ x1=Nl vր9PzQq'Gaϡ߮v39{O<|tA> iǩ1'h9ᱎ\ʞiݷc rO?o`~;'<r~3O?Qא: ]D`dA9$dGPV 78`8,x> wy6:Ap>P:ހGN~ p0A6 J]O<Icueu<NO'4،w{RŨӁOWϠTeNFm98HGNNpH{J pG9qׯ^;ь~@p@'Nx稤8y@ 3؂yny91sr=q@$䑜~Lϭ  z0e ;u<0 =2wkA@6zF98}:s H# 'p4䏽ӎӹ~s (N8Gӎ;yϨ|M`9 p>rpwgP}G >$K`' `t `G#B@93OͅG#;}4.@ qx{ }I82?ǽ7tg47HdsւOڭILst G?Byrs9'lNy%Or80O4m3Xΐzrz N?>$=i݇qzbg$zo~䍧N29 8<ݲ~xܐy'ڀ8=r9_~1xz8.zЀ@21~NI># DǿŒQ^z`4u ?1gN298>|d㠠{9=is9='< tqA#v.z?N~9b;g'Qr`}(.{}i܁׶O{,{vY;Hq| F<xGz2XçÍݍp9:wށ`e'ߏA}ێ֛<3}93@u0䝣ǹ:S@c v-$1錶y<㓜t<{Mv9L #q=/o &n:z<~$qӧltU |=בHr3=O:w?Iӆ4 9J}.A ǶF{z8#y"Ãq #=t~Î=x<3Jds:Ҟ$Nx.Gz pNF68j\G93;ć2Yzv=G~=:Sy°n?ҝqFAONO”Ǹ^Jbs׷$s֜ã*a@ s;Qq4J<LT^=x㎃I铁\d`vj^H=q=hBc 'X8\8L:K 6) 1ӒM4Ȱ'';@#<0#_j=8 9 si;gLgB?ۥEnB'1@$DN6N;qqm<}rN_6݌8h8'XfTy$F߿J\uzB~ @>~ОHޜw-=sʑ.z=d#ԃߎhcB}GCOR;^{ӷ0O#Ot)g瑃zRduzݻhsu@$OH w`q*}ǯzCßB?ԇrO|1=J8$:rH1'=|}(qwydց8#8g?h͓t^:1'A<~r}(=r9Ҽa@p2xr2 EQǵ b2b+qJGdg' wQJ L^{ ug 7xn 0x$r0P89$=~S\$\thӠs=qA=G ߨ{gԙI .:gX&{ǪACF:r3^%}vz:`K*#(lrz:vb|FTr u>R'< !Fr{:@qG9awh;I8?Sҝzq拎1%Nx;>K:1ߡ'ۡ1<ڐ0|Ď_Z.; $/FzLӂOw}QpϮ 9~e]c90񏻞Cnzc\0{}yN n#zNyo^~> Qrsby^7DX.p6Hԑ.6Os~ <A#w޴L$c8ߵ8~xa>Ӯ)߈:u(]D&O'۞xZ~N9c>})嶃$g秥)0 s{ˌ$v<Җ?rx'~ݨ)89A8ORh@8 @(#2A)nڀ+3FxOքөrqyqޝ=sN:zؓҐv>\a4xFd/=iΜ}Q8I>X{Q` qӱ'p’0T 9cxq 2R9M;3$:)`ǹ#<B9 ?0#9Ԛ>`6THV9. $w-va$|!~Sۿoΐ8y`F u ~(8twz9,xǩ|{ԃzz$01t=-۟g֜þG9d_s?pzr=;s@F~c?UNpî㌀mp9F;8!<{ rsu85`@꤀y!2PTrxaӽ!\;<$apw 3'צivy\$9<(>Zr2ryzcX/z!裨89;ئcV:z=4cn=c$ {ҝ< AݟLvM s8<QFFKpywsӥ j?R\11 vt>+輆|N}:HgpCg=:gޤx_lT?¿^2x3#p : CLN?_\~J㟧0Lu<y>i;`y-Pq`!<#Fg1C;N d==}9/88$*tXg1M56F2Ba#cݨ6xH$֋B:cw#''4g p 6;xe@r߽pySc+<܌hSA={c<:9{c^” `3G\=SwvOV=9#/^}iIaׂFst* mIG3G9s78#AdsI'8uhr{qܜ|Ğ;uy=X >z1H*IyJ#@qǾq0cOO@y@`p: 4w# 'u`s(԰m s'>cpg$٦1OL8Qz1gB) 8'Oc4Xs_L '0:|pֆ ~S߆{ PPpA#l (,g8ڠ, HKf~V>3q܎Frey#'EԌ`qߊFrO;AO ~IDy׮G=9&W89jB}#<$r!'$+6{@p=`F瀇F0>csQRWAriǜ =x={1C|@ع@=WGD$d(#jF)ҧ,c!hvlظ;8@@o F}M(`b@`pp4SÕA@4$B$N(;vԐ<88@uwC@qߜc8:sH3یqy<(@3vpFALJw'n eHظ#O֟p/\~DO?7IМG=?Z)yF08={PÑ*qqW'Jos s'*o<}4OA3:u1i0e㝣1QP?CTHjȖ*P9Ͽ*;[#6J@sjgp@ ޶fRDg?OB:f9Î{Z3sMLӮ=kdysrqG12@#=>ʴLšwg$xlA9 '= UM8o=x<{t #R8 92}} 4rA9?qQ('m`<}}({H#!w+pzcg܂y'?S@ Kc8q*$% q\T=Hȸ @M7=ƼwP`\r YX6NwtT9#^eGQث_Г9ڬ(' tp8JnYq{Bp;ִ-їqXQv^ GSs9*J{3]8粃B[R>e9# R'۽mEאzd"d#8rskE ?ZpԹ]4܌scr>S2\#^TyY[$98 V^ >QÏ N?JN!6r6' [v9Ԇ  {uvO)L@Fт~n1=C{8ҁ~G^S '8'&w 9LSة0v}>Q'9'0v:ONzcGZq߮02x'),WҐǖ%N >ǟ˞cOnr)ߓب덧zךAߠ?/v<ԱNnr8'9Gjr {'Ґ8AGR,8e=q-Ӡ3~ʆ`9{g&c999d0=x}CcOnӎx``Azg=X^=i#s7cCq;.IIt sG`#t4p sׂr= @ cӃ;Rq-$t@n8+IsӞH0>_ל^{#ds*2? ,3x$獧֓N`s qsG z;gϰ0#۟3 q{ 1@ St9vAm឴c#888={f~#I8@ pGLsCr6n4sNJRF@8'=?_?2yǽ'qHϿޑ9<PpH>׭0s~Zv~۳{qCz@";GldrCR.N ;#zoqߧnx @@$?(Ozp1r9 ?(ߕ8$(8\>ךa݌/p@>(ܞ۟j_ג89#9Up g;sҜzCd9|~׭G8 >ׁ4/^ t;CF{t^(NG;ihXRy'=:z8aʘ~2Y[hG@wϭ7qߎv%(` <`929q@[#O ~<;Ruo ?&Prs887mri7gp;`秽H88<z:מppu=@Oxׂ3m뜌qIfm<8,:R1 鐽=sC qIґ]#㧽 {ӑ@ :ÜA9 q=sހϦss{zd <y3ОA4}Irx9uzW<46lhfL\G?O^1}G|㯭/?7?sC|#9G#:qL =ؾ siOP1Hp1֨vc$t}1 HA)*O>NAϠ>{'/_; s$;z@ӂ3q' '͏47Fvy*T31ӧsݏQ@sǧQ=8$pA{!ˏ9=s$u Sqs?{ E@)A I>u\矗 (s886:獠Nx=0G 83zR`;@1ӿ8#'y$@N~`Q矧*3?\ݐJpA\v g &1 '߆eKLsJs 78q4Ь?9H<<x ut::>$p8rGˎy$snҝLnߕz`mpqϿZ;#'q0)XQ?#q|]:d A8</#<ړ9<=GcL;qi==A\q;)  ޣ z=(qszr;}3铏g2?^3'Mga:Ԕ73Mq,;dFG{cu ' ҔrҐF 9㏨4bIux=;瞧(tsH\g|sj`9@}OZU׵$?x׎j<펿^I`H;v*Mߏ~qcPo{9=#=u^ I<R܁O;o_:t䞾2:{} }GA뚤!n+=Gn3 7#1~4u זz~< <On( c# 99f GbM Ls8NyR8O:hpH9?7#@jMއ-Oj̚$Bq8gL\x4zr #@Xa-#{$#$޼⋅d8<9~+::7CrڀY<`G#h ߀q/sߥ1 1r}?p2x}A6pOnAL vϾ) -~?N>4GyGL>'*3럠R0猁߆~ipÆ';r8$ dRF#'-i3.9ITdq@=ius#K=G^yۻdt鐠zqzIpFFss؞&8o8'sHNq H^zT 1q sϽqnO960 מz9=G9 p8<i!)2 >G'9){H%˷RR@H8w#i}sQ03s߿>cI=?AHq~Ӳ#z9>rGҚ8w?wӥ3צA?z]peOaǾONb6ob@$s: =2xztϾ3с OW1=*@FL6xqӡFxtǩ|`=9q}(=?!;~4\ 01rN~:I<0lgڔԜ`d?TøqgU=FO>ˊG\u xjw@p>hRĝ;sϥMçA1LHG?7θz|Ke$t *0i+霜g֙$J\/ONn $0F2AZ`ç$QqQ0vy'$ >Qcv[.AǶ8N8ʌu#=r1Ȫ 9YHH?BA?)zsF3A"r2{}9>B;G=Î)-19LF>Jx) r<$UX1@ }}{xs;F7lϽ!Fdr bg2r0qNrx#z愁doO;ՌrzaF8}{qa}gzR{r{ƁÁq=(琧i?H^֟Azۮ;QǒpQU?LR$\qЀNGldcҞ0 q,sO=*B>lrXm?JaFy38z7 pN0n@=O^=:d`u ;N?17|H/o\HA3zrcqH VH|W#rTcfWpx,Ix1@8EӞS49*,qzQGUP:g9=ii:>LtP$pA8Nۍx'1e :lg9ҀCw x1w_Q=>0@SM{gH99gnzgzP9#'oʏL3qP;p *yFFͼ`~V$@@$})17#&F1l` I98|g^F0@930 1;ޛ9=Xp7>c/r1g>=N_H:d88i0]0' 1;~4^pyl.}Gj@Kdm ex8!n~Z^rp{(#sFO=p8/OC`?(`z`aA=c򌁀yޥ2=pxlr\gʐ3z}HH1 3ʎԖ ~`A@ r2x8%tSvNx;~l s@<9=[n˞z~n dr{'8|3=3lmz d/ˏ9ܚ t@yNs&P 0HecNLI霎8ʌs׎IKa8x9SI[K8 : 23TdA#?t\ߝq'a:ݓg<Ԍ <\gTD<7| <08Trl={b0w |x=s@<PGQRO((Bܷʤ :?L pgz]z0rA?7= 蠑N;XXv}7ceu) TmrwdlL1v8ۑI>ɖ\g +9 sғ z@G~9^Kx=}:2I8{ >`y ve'3Oy9G\rw `qSgG8G?ҧs02kTՅqHFNxY4Uwy}ih}h8—azcH/ϰOǵBЉ6>_C $AbO#`=x< ~I= s=S'19pGN@䞠ԙ9 sڏQ 8nA?xan_}8a׌^*6͑a=9׊/mܗH^aJ:p +rTu}aXXI9{uV8}Lt=pN:pq,y8qkDsy mz}*O`x9& N8s?œ?Z"G`}s3G&x2s_W$z jKc~>S89?hd݀RrH' ԠzdQߎֶ'ǭ#j&,rX~O#$scp}qNO>LͭEN2s{ %u'<r:cJ`W qQOS~R':r~/9 uMi.G$}8۞1;1'kҘu>si9=nG?nny}9zVK'oW׊82zշ,DBD}FsJ4_Ir#?z >a}׵(3ۆzHCԜq<)>qRc#*{{߀ 3/CF{1AcӦ89RW/0cpOQ߃P G$gM`2A qszIn`>lcBq"~Rm:}i  rz5&3N09;@~$Tg+7)( @'G#&;{zu׵&y|N>^ǥ7p03/L^? =8=K({a}O(<}H_΂81ԞO$4 ‚{I >|qK g9{AuB6[9s{`{ '=1G yz=(\g >~&:9$A8$9ӿn1ޔy {;:BAI|Zpn瓝Æ9ҩ ۆ:V g&1vxyK ·C<sϧ^)Tc8A}3˖\mc`<_@2B0wcvG$<ހ'8c^NH88;I8'qzz~'6y$p0H8䓜$=֐ PNsrz ҁ'.9^> Jzu?ݹAJoU{r[>( G~q'ppGn1N|܏ځ 'x=;S78H~3QLL_OC4l;p{(^bc7vc=^w1☆㧰J`pspR183_M+A.OO4{}]ӵ81ySǶ(;99#lzd"]# u4!gzHe==sH2sns ܝu>=o > Z;`zet0+Lc0(`ԯ3@'c<HN쀥*=Opa4|\I7{sKn8A)x={y\dmvHwlgzTN^=3@ qzƏӧs,:ww9  : =0{q1RHdr2PNOT%gwS~'!G8OrO->Q-?SGRF`Gs߂CH1!NOsj? |rzu8Ν9=@w$?rJ㎝Osq3ցv#sHڙDa}r_΁~{Б˾ !lc)t(CpGLp{S6=O_RA߮ ^2 n Ox\`A=$rpIQp3e'w:&>^H'=:=N=2xCgz`,8nr*3RG+|ЇwMzq?4N=#۰(olv@1J=~R~G^ǡcn3;qvw`㿶{轆qg?@x?\ 8#}i{z=E Nrr3xn8?N= $pyw r:?xg >㑀q3x#'zW8g4g#0px8=.v9: T|dqԎ`?J@zun0<Ü=)n֋ w;0cҎy (N}?!#{z`~SAHc pF=FhQQ8 2y@C= 0Hݜd @ts8#g^ny 1tu#>=`y@*`8$遃E)rvI5>qRIh I(zy$gGL 1z?9G1gxt>zt@y |"DzМOݸp{7~ڙˀzt.wny'-ߒNNP#WH cX}Nl~t 9}9֜9O's_H\1=.h8#9P21rHz pN9 g #i>:pxF:8R9dF3py tt ŀH9PMIb=,ANԛ93ӹz#$zz挞2Ar; ,2x“}:gښ8?ux{ƒFu\OMnU?ӟ`h8'=xv~b=;0#N=9=OJź'bn1NsE돩zy=G$+I-cN^@c}sޝaNrI'OI=` gv=igpFIGcd{8cցzy1ϧZ]?8g )#1{}hXw'@H䓁9rr=?+8[hb[px\F{qw<Á{`;8#9V#&">y y :0 z~}jLA' ;G=@ O )=pC|mr z]t#;zw4\['=뎹7G=9#=A8ҹH$ /s;FyQ߷P/820=ϧ֙ܐI:#֐䃴;d`ބry:OSOG$;ORz:Ԁݤ: y0 ﻯ)R0 =y<)LM`nیtQHt ÷\>znK?ry }=8-n~hA81s$<nAzHl(}K}~粂8Kq877vh{ <')X; O<{zsRP>ryvDy^Irt{e$!#A{ vr`czC\evu#;8鼞~>}i\i 3/9'q z v{sq׏cz@!99NNp17>y'#AHqBaǦҐ g'Ìwx_0`nA?)뷮'ݎ:$t 99둌K ~Թd|wL7\}{:1Hf1 qH98O2:(>)u=s@#v1cׯa{u| ^ڝ편qҘe?=}RsKtG6g ?h1<i9X4쑌v`珥4)Ͼ֟8uzh;Ɨ=H灂Ib8@L<6O]:A0':zdzӿN@{րF{<M/Ql4<b20GzdI2OOOZ Fx3ӥ8 ^ޘ8c$1x#21M=FGv<=I: b9%IRrm篾GP9G\u=s xy#5 aG᎞'8;TG=_lfyl`uOC BFI#$z 7 M;AjGS]~gz`:H8_SN=E QߎߟZN'qsH<c94Ny n;p 2ݛۥ(A<~R9L8sܜ@',<~d<q K͑};o@㏔󎥇? n:do\p3@!zx\t*Nq2qK{9!xn m˥(W#98%`:t=i6r;S䃷<}1g-ӛ$QL98#>Q^p?)wH8$)x#=iq@qI$ +zs)X8>Ef^^`7^mNO?R$v9 YT3Z\rO~p=~o82X|/$8Hg1ڠhTeq> `T!1;}O'Rzgz8n==) 1#;H>@#`nO8@N}1=i>0Ig#ӵP C`N=7:bR32 ?QǵIz؏֘ aAG\x4mq{?tnlDۦ0@H==1fӀGI\Aa?Ӱ@$p?'i=w8GV=ENcy:SG ~rxH q2:0t=f3S/#׷1)$|q=caR[QN0s9 `:뚠'NВ9Sc |s=?4n?)~?Ozh)sx}{PyœG\) ;0}Nlt9ۯ# c=F>'tfAAO@:uW<`jbĎ~]H(b3AC4[ OqGAӎS;րc=r$~x7 \÷ia%ʌv9P2H?wcs`79x8>h?ﳡ#$zq9=zAhcԓ;Ny$}޻Hqh/9[cGOқTdRO&1kn('{:Ps23rOP!;$mx c94Ѵ99 oJCFӏN:pgaNG$}8{`y;^wɥFy㞸:4 @ ut۷\3Cnq2yespHUO~,s$u@ۃ9:u#^O926}쓜ttrc+JQ?t9{q@#3pI9?(鎸:QN 0[Q:g;Rhz. \O!'b^}wd>#9qAAXz{c4/̼9yuL# I pz:恆prH 9o{Sq`('GyzLG' @88'$ TX{#Im=~t=N}yH\㌒8I`rNF228OmǯtrzqiFm錊i'~\LLh [y #@\NCIP2Ilrp9ySs6힋r$ds3pwax /8qybGy׿F$0w )`rY=YV-=(Q7p8>O~yݞ8?qPd^9i @Rw>ۏ!?{? N=j!$>88{grx9j\wdrs |<^v%I@g?wE @99둎鞔^v$H)0RH9#t"zۛFv3LP p7d6+C] Km?nwr#9Lp?#@>=vKe{`ҐI]bGB>d ld MN2ɐ02+skW}c ~Qm>lwTrLu|ۚRLs^b4X}/ԕ#=)A8;q'q?8zj=''Tc℀cnH7$sߏ&fprdpAS铀y /Ӂ{֚G@Q=:ꀐgoԝpsma<89#AҐMOI oDy9 АXө@ IzǷ}u%H 8Aʃ6xN:{SrI?pFzO(<MhD7Y`Hu?Ɵ+?xw=@_55U2~8Ar:`='< \]id`Iz}p zucAQr@N RA=1b\$z)qnq:Mӯ=n:dds#8dzցy<GxSgI6S!*zWF3569?6[98?^ q 1`=FGcFG6qV(0qNQOG>:`)CqBO':?99E#-sn 3cbq(`h<7sgywd7?zf?yByGN힧׎'#8$מI`zSBy OLO;jvO^FO99ۑC8`vdf99פ.8Ig8a@dds}9M 1p {t9'Ss8KG-1zrǽ6_oUߞkq>˦xlzw$oޏ` $2{vϽrzuN^H'vE3qϨ-@'|`sO\$L{Ѹӌ8{0g Gˁٺd}x 8 =#Gz)9T <18#oH_NI8)ӎ0zdstǵ7'm1u"gԧn0.Kdr ނEޟ+ ߀>nIсb~r猃jC<`d7Ɓ 1:㟽 SLLiϮXgǿx Rۭ1瓞Gq3&;pqqHǯ!GԑԓaOFCv+WFy9=\qA(Nypp8< #9=zP޽8ww<i g$~=}i!ur[szu8$99s.O_N9ֆpHsL'Aw^zqt#=)d?@c6F1ӊ$B=׭S-NN3d{ҏE #gxi prxn =N7c :Iׁ6 c=5@/~xצpjw ~LN#<1БӔOqU 9cC=A"~+vIs`>@W-+tOsڐt889ǵ!>x$pFAy.{A{Pqg'ހgN8Px9Kddq1FvOOҘHNxj:t8s!y#9$t8 w6v1sN뎢I =R+/= cAvv8ߦ3֎OAx=;z怰q܂r2}8Hvz`I8b:O)lO=z֡c=I{g/\`2y878{`?&I<P;{}pêQ/LrH'i szw'P; qsBޝǯda=qیp(#N:z <qG{~i˜A$ q4 9$Ib91L?/'?ێr2/98# z篧z8䌜vԜsN8v[ǧ4r8 N{{S]S3b4 Ob=G52F9@ǟ;瓎៥/'8Nlg=C`xvǷLSS=xr9;P19#p=z NGN'3\<z=)N:00 y($7E䞇 hwn~Ìuh~;@nܷ8  9# 9%FH8?sf}= 0i\gN Rxl$ilG_b83 deOq94gzd9ʰ^:׿>n8]8#Ԁ~9$譟AMCAx`'\8Ns㟧yaVF9n,dg0 E+ A,NqA9~9{RCG@>u=pK:m?0 =3ޑAr>Ssp9ydz}3jYc6~z7iF3?ƥGgQ>?*9铒Fq׏.n=sN?ԙa}iyQN^q'='01'ҝ10<8\MO呌sN?.ztOlwA֔ج8nO|uԮxAy=:g'o4϶G}}qhd&s99:L,=Hv1\qCgs}9I; {1 ct={P+j)== wK:ܽ \v9?t ӯf$y?=NhF&4~Ԇ'=:/{拇@7ݻp :zRd!p>\y GZ쪽 }x֐#'c?OLRGAesXHs'-iInv֋ GҢ@Uz' qgVt8 t:s91hbgLg \`^=:Ɛu8%Qm 0 0' OGLp:Hoo_s{g8> 㪾'z@, G_z81М |) v?N;Tx{cTw0:OFá=iÑ3n=r204<7K2HB >R#:#?=8=qP2#!01JhAG9<I7c t^ #!=9'Rg'}*xwNqpG=s錚Li <8<{dc/_lH;0=Ga9mg?L s?Ӻv,:}GH#Мq9=z҂:UpP q1Ncq׷D=ݻr ; t;q$q1`3qGfgQ|cN$N{F?nM(Gsӡ㎔$fѸcq=x<) tlnz`:K펹0W=}1R88 =v:@c\sOr#ʞ8QĒXsR|ؒA=Hxz'oO8<~< ljaqs:)8vށ GF>JB唌cq<- '9_sM)9 LOQOa=ϥqߎǟS@A,11Ü> 09RwrGOΚODNN|@n y cIv :^M7Onw:y9e[=hbN9C{Iq، 9=NnNF O=ޣ\wqIq$N; O =hd;/F x'6;}zgHB#vA^5!]ԃ9b8c@ TNs1\@M8SOA} }N@$nOlwK\,G9ҐOAcޔ0p=3 ǯQӥ.r23d 9N@8q/|Ry#+I 8\֐ Hp,K;`_Cq)V0KWG\NM.JpOB1x!ك|ppzp)[$Ӹԏ}ҮG,w\Rt`qБnGOBO1rzdwR$( $3\dp8HNH$|㡩`'$m^3MÆ$i96mc篨4Wڹ$ոzc+2O;q 8#)tRc_ӌ8{ܚNy^ ALccPЧl7/=r1}ǡ)  {㧮qRu!xV3J"?UF;qz~='i$9oǰKܡ  _\sҐan`;cHhF dw8rq'OHA^xs҆Pˌ3~p)>9 @=8#$s0gԀw#$p`>d?: Ǡp |.I cg~j!r@Nr Aʞ~ 'is构:֯ЂMԐBc^FWI9c<T]$)w_{uTlx$z޶%08n21_G<늤O{N:c)_]px@)qd1D}9c=Ɵpzd#׹ =scҭ8ְ! <?F[ ddsq18ڿ61d-Z80;3v^ ۞qTh2N1IUG36K(9Sr8Sbd|=9xy=I?/V4#%Ww^,=uG8qO=>Rb}۵1S;/q __ǧ>`8,'$. ~| HT͍ndJPH?ҰgܟwLӚzǡFz;W=><'v&lɻd9H$rx5EPߟJ?m͜ЍۓZF|$We>ǟQYy83=*SsyOųm+|0F (Gp5$#ʹ#5BK186Ϟ5m˓!`pCg'^SxHų ^ I. csWa8y;[Q,|ټPc[iDς~e ۰utIf3>l$88o*f!` [ćҠk+Hf*ݻʧ Ctd:(ѤU;@,Ǯp+ |Edʏ/F^Q0;OYz0GL{}oz_3&+yHV H:1*ҷl9zd54֏` |'=T#9 dǫd$0:.ҕ[㏔`=ǷCqu92:{m=q׭HϨ'$篯CHR2zc~GAښ s@鑟\z炤䞠E : nރhbIq֗Fqsx21@眐 ӓ(qG$L`H87;tΜzC(0xO~8Iz}OjBC-OzfN;󜂼֎ u#sNӰMځ~@7o| / I899q@mǮ0yžǿLҁm^}Tc@ ;98 j#Kʶ9;rOeRg=<),'K9<ݓO>ӻuG>tsJ9ۀ(Cg#A$#:Hbt|ϩ## =h$=pI_LTY#|x#I r;g 49$?,}iw䁜?*2sݜL $H!vO8!TqГ1~5blq+A 'Аz r{sar88i';FFpA 8O_jNN3}@L]G`cԸ06A>b8hBa~,OLלi1A=F=hU<7S'8S|`8'NHۀE<=n5lcx/# g1r){9'}0ZߘǰRN ?9ܜӮ %8C@$mt'Jn;$r>9$p1Ќ(;cҗ'|=3w`pN wO'?.;'=8J`Hy8Frx#Zwsu9sq 29 sgL9Fd C݀r1`0I; \x#z.:*h@9a>I=#<~?D&yBvL2y9xa 0y9g7 Gc'Q= L`vs?I`qCT?:R٠ 'xl: @8<h93䑀7c49#IﴎF3HsS[}ib@q 0N0O;Iu{Se zq406q1wln⎙F98X~P1px#9' z۷h9,n;is<􃑐y3y9?7Su:(9dǦ{:`7pxyqN9lmz'Fq{y!#ϰQ=OBܑ0x<^z9ǡ8^XJ9>Ӓi1h<$1LCpN?#<3_Q#=:)G; YN=z@9'<xP}2sMc@у^is`#8<Sm$=zDu#zaFzu>OA09L7x 9=\t 0FFv?.zg擌 *N~~{z<ʆ>Rr3ws)1^{~Iq99>CHqFOz< ch|zdX>z|Ĝg?˭"霌zONLn8##'<#2s'qj. ӊ  EDFУ3pxI.{ޜ{zR12xSr0 7O/;H88 Ŏ#zPn]9K03w c1 ?0B{ ;8/L Ϡ3;gQN#qH=8Xr:zRr:x$t vi .88NM> 9Gqn?LFN0R=yp:q)9<`d4c P{} y bzcGu1ӊ\w97 dN9 z{:㌯Pv>aЌcW8=AsH(psyzgn9b4sS皖U<ϥ'ӯQҰ3o8?_x44{sz@?<縣O'8=i\sӾzdQcONP?.Ï8/9ӌ8QQ}@連Oz  vH}/OOǿ4gqy?JL= n;ƓwmNCR <>/3pvxd~gSI=>;>G׊3zc ,qCnzzޝ.zt=s?ɣwМ瑐sh$3J.MORzd~rwh~q 翮JOV;OB j3hg_ʜ=zd/C뚻?w8w?)ʌzLg}S8r;KzB'~{*Mx*qϧ=:=9Gc}hX7`{qsMqPFG\񞦨g`1cڑ8rN?\X?)&NT<#{SV>'b>m3#֐}ќ;ʝ p91}qӷ9XG=u0ϩm u9${p +ЙI'ג̸o#hN[A6 <q-ׯ| .+jr[z}*M q'. d c9=~øe {8';`qޓ<{P^HxF:SIXbƏt8=NGERO'*{zӻB^:~Fbp0H9 zRq=1:Žy90pOCǵ?\'=:zg==>^\9I߾y 8\<&8# ?0$pI398&9s2:U! ݇|`uy8s$G@Z C9SpCdЂ8?S Fޜ}OJ}@8caڝ^Fc?(@71^O\vaO<9'$`p~8rON06=4p0F/_cށ1sש^38>u#<`(38$ Br2 䂹8jvsdcќT6Wn;u@ .:?hA,Nrs03@=<ь]ރvxƐqWS9MK{qn=y=pH{.>޴l$g><_xC3GpϮpLg[q?qҐBG@߯#v9QKqp'>M6#wܼnr}Oc{#ڀC1q L8bN=Z@鑅<R}F:ٷ#qR aB0@\uwt?L }Ga+=1ڜ)' Ӷzb~3.0xq9l{8N8'{=88$&x w~_CLx8@ϷsGER02q܃12n㎣4|I94Ԯscig{n{'Îހ`}9zܓ1r1(ጁn\ϩPA''<}1֔`py8I8\sATuSON3r~SA @'F1;yo_@*wHNzQwq;`09>8'qqQt:|u5J*x~48lg_;  pq厴 _Nv0GAMH# AzsP$1WH$d090pN=;sځ0w}Jz=WG(ct^=aڗhTd`c zLq:BOJNþ:b0rOV yMpsy<pns1rA'ONH3~$~RҠ)xPr#}*{Qr: w4Az N8^6`s}H- uP/1 /@}Go@*XƞFKʓA[=qNN`䁞0rE 3do98ZL09c?(=3O]x0<}ݩa`F@y;AHsdpp!#:G3|UUOwY@ +q!qzS;pXnpFFO=q*XN@#h\0@ ~< p*L} #co6x!x#c)>*I:s?ҤB'T0'9tI |9< {S:`2TBy㿶=(ed*O )zzԽ$Lp@QӓN~nyx9cham_%vԑJvCn8P1?0$ o0 ;d dΐ ն 88T +ܬ:Ga2h?|vRxH2n@ tj^`Jp$7O;J@ f@ 'x'Q''*3:c"zBv8~ m#~y]q|ë('=?\pǃHpA%@ BT=\* `:in ``'`vQӷjURCw:|[~'۷*;`g7=3eTS FBT*`ԑ_/(|s8h#(rs9Z\W sA>5*}+yr8Ni R0I9#܎)5 2<ҫm#K[&7s3v9v@Z|D7uJ̬H8<؁*ggzdH\gq= r`GM `~TlrП^1tH8B)껰s_Np?(H<z}Dp9'94841=1=ON{zծzҩ?D4ZMqSs9=9bDA9@Ǯ*U%@}PB1[@Ō8'3GLcukq1? P3x s[I.8HZ<~bz8jA|CZM)<8Rǜc׭ZfMdg<7?J7q#``q߭ja`ϯ#v H0@f qzԨCQO]vkXr#B71X_/\g6W6@9S Is&׭'z;{X y! Xn偌8Aydrp1`vV;A ǠQT&\):.CT5#Fy$EaߺI(/{?*0|g8\8]KY㍄ Nx}=ڕQ 7+2}/1\ɣa"rvc#䞵#(oc$dxGX=28==ԭ8 ^I0qhVF'8`9rǵ<sg󁟦(%u$16}lIsH  2ןZv}FstÞ3zP P0wyl=4wP3=T Fo's'ғ=@МtO?z\dΏH9RGlԆ'4@+qޘ OT mM `=i7ϮLBy/'\ܞ#=};Qӌ8=)PFq#ݖs}igAO 9NFIss8C8s#jD'`r}= 1 }}(@3׷Ld!nNCpI J&N@0<^F 88{BaA9>~!`r3߷^@ N:2xcǿ8d1>.Gypyw#i?dN ' ӭoC8ʜzyAhΓ>\u}~g= ~) M#o9=>i z m\w_n {=94rÌuϩPݠ$QIt6q' @^A 0 8H䃀H_&z2F x$9!*za8)@'s@8ݩá#8dI힘`dc9:Q'c8~T-B=q^PQs=G>L0AݎAcӸ'd恱çsp޹=3<Ncށ ?.N9sӞpssh<͌ izazdvjU9d9_" VF:c'=LIw;b2L;'#.38#~B71:}Ih8+<~t=:p~4:̹v~%r:p߮8X =sɡ`qԱ#-N;P㜎qP.9Xrr289@ךh93H A1Lp#%A7ԌI9 6s=i>Y=~lRtsyG?s˧-gւy}} @T`O`0yǵϦ9I$c#hcx:094Ϟ)QПnj@ 'o<ӯ#{җ'󝼀84QHBs[o8a#GAߥ$<O?J3!6>b1}9z}Fzq-~zqϯ?wnIϩy^9;G|@ЂKtj.ryxRL>#=yN6 n }~0#8<1Xzr;R`r?q錌v< gOlڅ$<S܎3cbdvN;~alxǧ4L\OQN:=90: }h]D#: r=;3Np006z}}?@ Hq،xAsIPqsm^8#( qϯ?JH? g@I}={c'*0 9 F8~8pq `21FNIqGA9:ڂw0Oojvv$c9,OJLp[{N 9hg8_pz}O>;R:cPϘa2HLh;qOoƐH9=?FAuQv䓸dp>Lw@'גF#@NOA{#3=Rx;wJw#ܞ=)0zhG=3OO^@#?^Hwe>?8cCZd4v#Ў9mv~c'u'r0zc*b 8}:1o@:vQ'=ҐqztFw6Fpwg1gvttϦ=tKd ~TtC=#z~i:qw<߭ i'؃קP9ҌcwҦ#ێ~=xs3Ԭ1I2xz)44E $dcڀ9秿3PS<<Ldu r?:Rd\zt3x CzfCғE!1؎?\wxny#Ǡ$v>t;4cϷ y&; qg.O^aP1M2lI),=`@wz7w^q4<8qpp}zKuQcS6};~89ZxcB;󑎙c$0?'(p0W9:gP6ʐ:vtAp`"8 ݌( 㷭1X q\+|JN$3yNG4Cyr}?#s&[^O=c#MLg'{R&0{w}qvSp:uF{bAdGZ.+ APO¯p``AV#-0O@shOP[vs߱XoAԂ qڛH$cq{wR rTw8P)wr8}4 A`s9=;~9>ҝ!Icy€ON,:8 OLjW 't88q]-=~ǥ+s16$n?>*F'.\ӸX<@ ' /Z3tnl}F9N6=;לIqsqEzNǿM'$}<8+1{>n< =)!C9N}JLxm=8q?@?i9ڼc^% gdqsҘ gLd&1`u3:sڤ'# t瞝A#8jJo<Ӟzуa9<t#cp3k~L}}G3/9xNJcb~cHrz8q)Ϯ($2 ç^Tw2x0qΘ sX<<$qt`A CӮE3N =FGr$P>7:>g☞G9o=fǶ@\ 9>Pc9drs ;~T*rHyߧM! crܞ0{ ax\qp}:^Fz{sCs1p޹$1HFclv}It?40~sSwnQxci'AEn&7;t8?11п@pn > d89ϵQ#uu ֔}ݾ =Їrl6;dZ9# z^iɶ/t}x_rF}A*U!#9lx<xJ<N8^11?$ sOuS+csz@Wz?iv :nПLpvz/$y8+Ƕi:}p@u`xqO#qڙ2x<ӑʐILc^3 }rNG=J:A'+׎~\_Ҁs0W|gr~ r1(#h6n<< =JRQd z('!ztzpzsA㞻HWӟOF2v7;sL.AsNq1~184rzppTsc^zt4 pv O ;bA^Þ1ڥ- *:z #ۜs_Zp~NqO*zr)2ss 1=sLC{'#=0`v8n8(q7~?J^x{7﷩3ޟ:dze`~}ߗ9z8d/ s3@ <999pCdtGPS(끜}Q L}ё'Ҕ0-0W~==0$֚=8Ü>v@!J=8xiNOBGC2q98=RRr;xN~b808H%Gp397s5 dXFFFA{\Hߊ@ NrK~]H0W!$q@ǐN08 ێUߐ:sRP0i㪎9FkqJ_ n19#O$L8m<ғVdMlci#nG$u vߔɌ tcLSAmma߷L VC pqݣ`~4쒫v={ > yg=@8gk 'ԝrT3͜>|cY89nxJ Nڢ n8lǃU9G<v'ӽh-;U=vnSʑ d҆F21q? b,rwsCv)/CE&S a#9cx9; ,Rzm#}鎕P8e\cf֫Fǡ0G\`O8#S-LP98 .34x }N8DZҡ/NdzL6CJOFP8l cH bX q)ۜ,q}9V~;~ I= s|i5&q-˞7HWCزv7;2Tɻ#zw#6\ 083U('{L;VInKm$r@^ *T qyV&YV};-nrtϭihg"d@O] dA<V1}G/8axz?GlUHz o}j6iuID0/8+<\my$=:։~vz['q9OӠc9 s;'Ѳzzr:OƓeɓЃX$%UWfu{c&z#:=>L$z;L:{dΙ~R^Wy?[D4󭨣p8UL;b,y'5ɕ;l$.@u<:J}wS`0e9ҧF~%=pK!T '-=$rH-"$30\p9zo-E^VRݘIX1#'7dq28_'TR8:VkOy!匘9_L7)nW/\@fi\ 8ߒ'#ylx=矗k#9nB{czTQ$s.p X~;ݏJgg(ʎRBe#}}hlFnL!(09 c&[ mR] #/9$qJSq{aΚC߼3◇ffhH<`rOZþ12]= gMVAꦺ-[9Pm px+ k2M#ym'v?tvzlzjɧOH\nwiZӌ5ԦiU$`n{{g='##8$pzdYu:FNG  8͍ǜ169nTt'Jq`FԜq@!9$R1J>lӨ۠ImSރˎA<S{03FX;8c p {v h<>is=qsҁ yzp'p<y83@$0~m9=0Tcn36N%#Jx>qu݌`:Nc$ m7 ,I>@=0{py'3Xr0Ε5㞸<{ 9wA ׯ<{R޹) 7cӮN{Sr9$_ӥ;=qH$8JL a 1g 7;~vL7=ONi0d`}?4688:?iג~lsހ 0;y#slon?.h '0p2I1|ӑ#q!:qސu䜌gs=;PK%|;co:Gs{lR;;A8am'=}KA<1#y(oct^㓎x0ONLۏSϡ8Ӹ@## 799\zǯ\s@l~r:aXcRdg89;x\4a`zv_{bqϩ:3c'>{ ^#2FpAqךP2{6y_AGP@Η`?7Qx g;1x=Ϸ\bq~9< ïH? c@q~Z`p 9' HzmN6oQ)݁ Nsz}( c1@)ϩ\pI$}83< y==K>E7o3<{{R8~8'$c??Γcs=:x=zO8=#ޑ@p:~in1Ґ\ Nz?SѦמ9ϯixp:}3P3;~zⓩ;v(׎'Kǽ4nSq\楍u>w8yM!pL'Q\ǯ:u?SN?MA3׾*PA<>\ˀ`w#Ӳs/ns8&+=H8~c~oLch 'Ozz)LJdؐ181^ޔ,89DzzGO8'z`*KCߧ86xP9I94+ <#Jyn3g + $Ѓjw sI<H#K۰;*$ 89N9v>2O:R$>a9H QӧNwsf7$d׌gzzqR H\ 8ӸX:uFpHΎpppNs ᳎xǰzJ8 |wmF2yn4suWo^ c4UAc#:4ێJ xa2,I$?Bh<{{\\sqx2N1 @y#7u88n}xBnB}:ぜz?†pw}=<dtsw:`8t>Թ󌃟׊ '͜X? }Ash0-r#:g7wouKc=>t8hnrpyxr=;P;=<۟ʎy\ {\w1H;R ǧFxG<08qm❌z}y0ӧ֑"q?~Jdc?~byOJ6r~ABzA=!9Non JC8p:@ا2)szҞ݁돽\>F6du ~c#lsLH{v=Gjq$03۞`zp1~tS㟡#@8lUޚ ׷yN<ϯr.AS9#?HCzzcC: J=Czru qIqzR v0@wG' :G`9^Gn {gz 2x^ xAhveCNϦ:0qp;pߡ#HB x.09og$t; '  #۞p~zƟRE[*LM{V8qN?A9qo\댂1Q`A89^b8,v|XWvz3ǽ4t?|c$3,1cҜ^G9ӂi4+q23B8$g8=z}xN߰88<GI@rq$9MA~S;n ෱Anj\ք`'F$֤cלH9`a'F \G#(<8$)sR8yM s۱\nPx<:\Pic~UN@<.;{q돗a$w=@!moQ}s@<@uzoZ]F(܅vG7gۉ dp2y\dw=ҞGLcv/Ryzv l|=Tc pryw}:0\A;{׷O^@=2q>n0I91ۨI^@:sʜ|Op?w7L(s:c< `q=a*О 89#,z9}ȤHG q_F(#O=4FO@8= {;sp0<tz)Xcq`7ߌ{rir z(OS:BC_ϧZ^ }r}=sC d vcޠ }rvwtR 0ze;c 3ӊLd0Hlu=H}~f8q;~ʝ*{gހ#=G#<|śzNC@۸AH!ЩqN>n9('}x`.ԇ 0{}l1ǧ3pۯ͐O&u9\=1?J7) @<}}h,0S y3 <ݎ#>s8t)o'9s'?8H=7coAӓSGHpN@@zpH{u?Tôgw 9ۚId!r0Ͻ4qn%z8\@!9QA2x$\n88sF;G~nwP Aqtܼ'r$P5$2)*HB9%CxcՇ~3n1z ѓ@:&/C<ۜ}8 dcwfKPq@y'$t#jp$[3#n@W~z? v'< NE Vr:T}Rn eT=(`Ϝ7㓏ju93Wv5/@ ǯ^qH͒8#ɩ0BfU[%c |Nr@;Шr͸*ǿ_$&1=&{tw퓜8TMxR Uv瑻< b# Aq>[}[3Sѱҡ8c>K_dX$>;,x9ڥcDl\`#Ңl G."}Od HpyH@r~aa'hvv9`L~z|rϡ{/͐Ar?–A@䞜 Ӟ/LA t鎙;V2g`t> u8$ct#'>>cNlq@5D=OJ3UICch ۾?Z7wP;cFpO=qV3hp=ϦA#=)7c3Ͽ}D('Ay `}xAZ&CCFN83{ѐF:mqKB :q3 'N0q6Ex^NGɬy䏧JtR{zz;5yy~z-Ќ6pԞ9u=+o"v9'#8? Џ<:c[.Ե۞}0x\涥cMˀbw)lI=kˣvyNT#|M 6߸H>P!HRŶ* 7q-oA꧱#8゠s^yHK h :8!2C@JlrN8[L· 'i:R[ܛ\45oȪp(;׹hB?/$&xaӺ/'qjzmtғ3\g$s88 9~4=c8<G, =Oz:t= sS89럯#<d9p/JnXc?I#~)H9'ʐ02' ^x HRGL:w'q=_ΐ,9`Gp:})c#Gߧ4 7z~vq goH9$ssR@◌s+y4 @09'?_HA{n9{Rg'q9#@ 8vwzPRvHc gN1'֓u@zS,2sךqTv| qWR!pNӒIA~Ddp@ c8>zmnFu Lr3r1=8d g^znpnzO|m c8=1x 6:OCxF=G8aǭG<F{1KPq/Lz0rgPh*;rsu2p{Fsq랔w3~x#ッLAy߶2=pz?.(0>bz6v09C9p:>'C{:|@&Ctzr11=r: c9]pێBN{3R.R0$9ؤ26>L I lӷ5< rxs!œg 1=;/u=OC^NpA{:ӳ208qqwxӹi 鞜8OQN;1f;8<0Ğ #H$`#:<88ڙ3X ۺ`ЀnB102}drO<O*^:Js,2p} `'0A*}GS22GEc0N铷Ӟ.yT=haׁY*:p=zw $(%Nz -}ڤ:=pH$q;q}@C^zc sySV!!=rs~Oz{gz =w8ʒ>ө=9' z:dʠ&0-q9; N@1zx<$O@Є9aӨyϱ L{~c rpa?zL\t!A {˜P4$A>x=OrDZ$cK +8sGSFGbH=;@<869zx@1waI^Cx{X 9y à8p#ޔU;w Mߏ֐',8GLv 4Pw >9==3H 3{p {3?99}h1=᎔{aG>c'u9zz/=1;t-7׎Ըy;{s@F3=2?a8 }y?niH `q Aw8vyOnh\ttqOF'+szFs3|sLGu0VϿ;w?/n2H%R=O?N=:S6N?7O?.4[ ;I<`ALҽyO@1$\ d'?iJ?/ϥ[RݎA0~3ר @gO=qO;Tc 3#@ $ ~#=~p3sנ=ێ>1@GN F?Nq'/B1sޚ g8n9=KN7~1HA}7F3}if0sx'_~OZq88#>4۳LF2:ǮyϠ7NzsʞpOց眂 ==8 #80q9#sJ@vzL#g{19bs8'֛P O?*R#`28>Cu힟Z3Kᑌ`{zfCHcBr? 9GJ 20}sצ1)8ߌ9,cqǸ~~|øר@Mz`=)/~=a'nP9죰㩤րp@ק9t920?ҀtEʑ?/a{Re!׿S{8Ac3ۓs4{{ѓך@u#&~OZ=E }z 0ێ{]49PG9ϩR4(8978ҷ6.;=$utsQW #JE\~t4Г ߞr3j-Cc槌g^;Qa =>۞)qA=ҋo^8{^;ޏw`FGQ$r/›9CCn u9ޜTq=|{cҧˌ`{s;jo-ps=u='?&pn_n1N7=q>R@ Aւ=O'vB@I\ӔO_^4{!9,}O1~0#Ssׯs=OB2݈t38`1zgzs![9Qx=sqh )0-֜F '= {PϷ<۰vH'(1~b9ԜQ:Xu1 A0F܂{uv;r\vǰ4zySvAGr 8 w P!rF3>A׷=lc$u7ۧ\9#9xuN})޽'8OxCz>NOnN81(;M9?#=N0I>aI'vxcN9A:3ہӔy錏sӏi8>#;'H2O<||> zOzO'c'1{g#rv8@sHscgcƬ\!'(x>b㑓O|p@rvp1rP):v3Ua\v:r'jv==7'#-$p=)7p6vON @\v 893?\`ug(9IPX\@O]Ni\r;J`Ls<V*rKx?u'.GCAN$cSs{>Qׯ\cs^zg=sM}˒>S9g9GR:zfy$-0<3ϵ;v FqC@2 #{PGcr02 (1vܹnq',N9{Jl3qJ9$1mny~(}FxHR }׵ HnNrr8@Tqg$q= 3M۷pu!}}?LCgA9^ノ1n0F<9'qKv@$@I dubX :oBI鞔0PV?w~O$ J(luWz{I#:{P pNKgϿ*@Wl@ 9ݜ~n98 C?9?i#p}($3Gz{C2?8ϰ4™A=>62 Pq߿Aœ‚xnqOT[F9/GAq}&Is)?s:g#8}9u^8恆U~I7?,LЂ[gP1}@'#׃R2w7o sRy\9|p>?*oО=F1ϡ`>Jvr8'x#ҤF;}8)8_leHr H13žs ֜ tnzd 2H~ϊg~H74/;Aק4=0PXgoʀpYX]Yا'ʹ4v0 ?TR`dt,sn (p=p:'*CWy?ʾa~ُʅ^G͜cABrF_*̙U'Gl`3Nps櫧Ȓr'cCf;pz%Xtt<=h+!$n<r#4dIscGn2 dcU$q1cҬ'zu5"q'<:2L9}}kX3ŏ'p^[1㍭M9{7q+9lV8z<˞aO vuL˱n3x?=oTM0->G(l~88 ֪LV&˜qB#~2w{s+;xV)p:'ʌ~5/!oMiNzc@^5)H͑ ngr@$9d0wrOOX-ZNmQùkdssz?RD CF Xjz+&#s.d|٤XD9x5d@^]cV9߯51y+M3|<+gy"(2mڀ 'CWJKDAyy={be?6!NNCVLgex֞npnr2{Ni?C.@rp뷷z;rGq9<_1v~_ Q۟J\|]<9`w\ژ"%E h݌ץ)\IϷ\s/&ueNq^]7H;I]4ei# ѺgZ~b |ktrrH%rw b>[x5o|_2fVc`'K_ierźyݵ֍V}HQ$sg*bkPUdw$ecpGҼ e.Y^j}.<-q v6AnHN}2F9cڸNFr2@gf3$u=h'q1w[昀gܐsSQw#13О=2ipLP cQNr;|\R iV';IeN czF`e9PN3߰m\/“ zrs:G\q=:Ҏǂ@@ " y}x8#funp}pG֙ħ3 3ϨN(`yzs2U=8OZ(2@QrKt<1O3<|ޙj=2~s\`Lmq)ӯ<~zA:ss֛q$pIs4y's%Fy?N~) ض{vG^~`}i#\AR Ϸr1sqzry' `r2ss\rsCԱLgs?3O2FqN:wCGT񑜒W=>s'?7$T$t|Rz-<~H'?18Fr}~R@?rq3Hho<䌏_^9 㞇>Ha Ԓy3:8-~\1FvW#sjzdgÐW?sRѦ=>2 d?.in#[;'='X{PCpN0;wHrsrx*Qa;c<< sAAP<{{) #o׎~udzuǎh3QsCO=Ќr9q .Fsgր+zcw~)xS_=}(xǿ9oz9XP;r87FgMxA=^(vl0 R{?^Cz9Ԝfp3hs$r<84_@O秧9ϸO94v`)?AT _p8y8:`q}0Izǰ>A@$'sz;נp3쎘= =1sv}v8c~lS$N>z}9$9}hx' hR-\I8>4tsb~c~PO*hנ,9DZr}8H{`zsyInצ\⧂9+AG=y瞔\,0K$wNs+ڿ{6Oܑ#^qېNH}@ힽjoC9ܞ8*z:p1N#=}gGH}98s<`zPD#@sxsҎp uh(2݇ʹ~4FO֐B:0 q:QnFP :ؤ76pW'=h=9ߒA=h8__7xr p=N(<N:;dOǷ\~t3=qJF9 @"F~Ӿr7ǡ=9;2O2s>zL9 {ӽ7$ s? @2FrprO;q@ r{6>qAFzg_j9I0}93Cʓ8; pH:^gvFxasLwBs}:dsFS$m?e9nx*G|;8`fy}2}T;sǩ'G"<8P;H랙Jp>b;=>'= 9+㌚vzc''AӞENp?; cO1:w҄a$dc01z8SN=(q+$8c0IF8Ss^xdNz)7~gvWyaJ^>NMO_uR9L- :Us_zc$q=<9i~_e gw'8Pc*GNx9=lq :yg q)^z{A9q:fuc,'=0;qLDF1@H[Qx- N>qߡ昄agOzO8pzLNJmź9ޔ'n89 g8#קOy:`nnsQ}I,6s7lzSw|0 >Q؎O^sJcq)0G˜cOƞ;Iǽޠt$azS3z}1gJh,۞(HӑǨ\MW=rHӟ˜{ X),<68;3iAcHÞܣӞ*M};8AI x :xY=hPUN{/ӎ|dJ{tu` 8X><}(ps꣜cbF1ӎRc9GoV(cW$c?Bi1׾,vli%r~s0qzN=) xqzu9c#[ӰǷ9?1 :H\c?+\~' 8sri?0[sg:: {R63׌{`pzgݜc2zcF(zwLӶ錁<~tX10zp2qאǠ_\9y񑎇7=y󜎣=)X#8 ylgN={܏ցǧR}0ix^=s~4۱֘ {} 2}pG>C0A]sb@4\ss0:ӆsKgpGoBG sx֓wg`(!ܰ9o|~HF:c;r:=AH;A ǩa8>S8߿Jғ#Oסx8sI`OAc2G wv?{y;IS1Kg9#9oN)pg#:7u'ퟧZ xy9'>-n9O<c݇nz`RX=zt u÷<hTrNFN\܍ T*gb1~b}Gp}ۨnNO@rF1Aǧ_zh͏PO8~oy#ߥ83EA-|ա1;NǿOs׎Jwqrs׿Ni} Ѝ0 ''N^ǟz@r>)R9^2? Sq?.qL z$矼Oۭ4}2@cZhݽ)q˷1u/Ustǥ a?Nn9I,ӸǡӋ9q#RzN{:S$?z>ۈjo\rCӑS>éP0 `z4Kr=98<3A9wsҜF@I'*?zzwȠ1|:;?*gi>rq>Kpßn?.Ɓ1N1'q!$AʕgjeFsN$(6s4`yG :8>by׏ZcBq 㑒qn鷅g7@Ч ӯȻ3TvH8>'NH8$aJi_r9yqF/pp;r~a&08N0B'ץ.CH P}w pI=3sH:3نܜ93)s eyr;x!b|9Q@wa'h>ydd1nNGZ@'Y'('`RIۃ8`5` X4c1czG ' ˀ zzv>C`8_;m6? _1㓑jzFy2 N=hbv2vC{P43@c<{rHTy8Hd _ǵ3m#0Cqɠ*gbqct3 wN\T 2I$12ItW9$Aȡ5HŰrzzsGsӆ⥌ixߕ59㱦 H1۶z4:sgG?6y1Q+`rsg pycw7).zO ^[W^ zuQˌ ^7l &1H8yܓϨLjCz~nNw G&$ 7dOZ@P[*FGng41yG dOz@8;Xw QK *2Cݟ|ʜ7t>;6$`qM`;^xaMt=qNqh{!8p.rda drsSg?|{_L~z  =};{߽y6p=?d6NRqu<Sqypsߚ^* vTtMǨiinl#^?ތr??⾤'1cPxʆԤ.?5Ux<=i8mQm#;7UHUcpI?e- V# `pNI=`tmjkpvpGu}魴@#n~a߽@U)ʝ?鑑8$ql󃓜gS"c8#s;q{U/Q#<:fԑo?$`ߠ 4Qsd¨;G =1S+`dG$c=_Қ3:r+;`d{Uuܟ~U;H!HvzQ'>Z?G<^Bzgqjh]ٙo<gM\wҚz瀹w=ўHM+<|󍫎G ?/9sBbh2͌q=sQrI<*o?9|rX>޿ZzV%W}1ڔ OR;&CD>^={9B @0####8%" 8-ZΙg**jr crx @,O'Fz?yuwgCE`c;S.(!`rHG[ش@N{8_nO9N~V kǑ휃=OymӉg'p'vepvc q^W-sh]' ΦFtmc9dv}\Mܞk v<`P+ϖ䳱\ܖsAMg yq  ]pzJQeN NKtqH7:d`Fc!I%rzӚr#8%KFA<'% rO#Pr,>`06 q۸bl'D_3%v(y=}iہhWW ~`D eT#>*Y3ݔ w>7nAA ooquc$cG%pyoj3=C?Յ:eOB{M,GDQmwV׭Fp*ޭc2Krqۧ[*)y2 =HUi[Se}?5ws6Gd ھѵ!5F;Z֜nY 4g@<6~ S<>Q^㞘'o AS<z{cҘL>xi?<nsb1Hx9?7?;Kr =GM:ԒI$֔9d9ҐQRI]ǂǜc9$r;z>9zww#3_Zn > qBHgA8@Ir? LvO^=`1n8 8zXt*qFGQځ#E8xqN(QQߎߵ?#x vW@_~pG?OCڀ89NqۧQùeO8+֓ zPќ0烑ӎ #|w?=x4d=Ԍ :C0ANy ܎=ϹfHAs=3@3=q@ $` NqsN'ʼnx;Gh P=yfq{)@zm={=Iy>bԖ =Ϲܧ9RLx`=9zH}9)П_u4zp=sr=iq2@l1; sS7u~c6-P1q:/|`3Jzt`1dKt!ْ9G~A@=3?ZL1GCӿN1܏ZP~Pr3t^6l>c?)=qzsC‘|zx;8Cgs@.?ay`gH'#'מ1~V dG8IdBy1ۊ9䜓랸9'NG-$8 #PH=,Q8z!Ƅ1F:マS֛OE#%>Ҁel G㯿֏` 8v'pzcNM.O8u8N~tߢpI9>^@׽ӡ=0:8rx8r$h8y)8>e‘sՇ'4/$鞃{sqhOc ӎx8'?09 ; Ar8G? v霃ӜHH:;=NȡÁ=3ӟ^2xgc8#r=I<ܫeXuǧSFx[q{ W8*d:A1=@Ao`:ҝӜ8bN0q@X<#98=iTӂ=yOCxpHcߥIn3@4&O`c z׮N)p==p3}(L^xNԁP=H.x '#OPOn QN;`n<ߦ stP?G\z4c<8w r :wzTz}PAcOxsvw9OS֛{!M#A$>vǠ:8„ג;p<:*]AlJ'}( c8Ԏ< sd`v8^_QO9 <}~s ={V=OsOCȣ99` s׎} `dqӷQ`vO^(Ǣly\nX`㌏ rNI4{pFpzh 9?0p zpN~ބ AC?788ϧsށ9vq''?">l {dcq#g1ߡ}/s'xFH@ OJd{sy9z8y'?<{Rl4g=}@㌷sAg 9{gJaaI<`d zg֦l'8zzW0@Ps@=3~98=qz#֘#??_Խ>npYq?*.&e<`8wONCQ>B;21o)K|`푎xpO`q9q碀rqӯ44r9xJxE>֘=QI8>7qpç+pTFp Լ\}qK$8'8 >3 8H@8 `O\ޔ|SN#o^uˌcx^HiI~`R𧓻9?ހ##;{z"G`=~oӯJ'  I#,çhO^zp@AA@C'1bS8Zg xqҥ`y>Sxy=ҥNy; ҕAq<*qC^xsIӌg{PsulHN㎾:sHSӹ> xpsRCN}ޣ=yp; H ~yG=dyOzLxqoa=?_΂{ cI2LsCҟOluH?Q2Ǿ{9G9 Uq =AOn2q>;8 {S=G΀FO^@yT`~HOlO#;&񝣯tEU6מ0O'ڗq9NB?=1֧nnt88Z.! n#8ӵ<7N{cϿ֪Iœ_ߌpOD;#8OS>Cgq?^ʞN1'O ɰ}i3I,3JdyaӧnIF=i,&A?z~$};Na2w~o~x y8^z#'ӱ1X3gnsr9t&n2I3A> 1֘X_3F9zOC?˿Z.g㓌|?Q12 =:dۜ ݱY1 ǦG,.N@H$d;:9q9>ӸX@8R 1s𠜓ssU<9zsD[N@ݺ*0NzSڛ:R`/>Ar~9v+7wr9ѲwCpl S@<\NGA{R#dT뎴r>O$Oˎj@1בc `7:֓Ssz`=}NGO߷SF>cA8@ 8ڝR9<4c-8N;=`NFzGQ((L`~|r>a|}h ##9^zqJ9>6Tt<V 7S#>c9Ӱ1<9<?0 8㷮 }z rO8S֋ \qM?tt<ߥiGc34u8=ՒŃ}8m$|c_ZǑ ?s*q07<杀v92AbGp9a1A(`8c;1ғ~S9I6o1>`8`!zscM4;v=H'ҁfT 3=GL yM?S0LMqwC)ý =s (|2y9Owin9l/eR=A qՈqNU6ew`8N1r:ǑHAЌ І`sΎdp1z?T9\B~1^I9)\$7TBǝއ}8(~##}8 9`́#'_Jh$wTӇ|gNpqoNKp&-ϯ}޼f8'=N@Ҩ](e9}#5 < {/ӊfǏ\9z}i `'HI|z`ttp=3䃌 ddppo6w_<(\t37#'3,y)1 \:/0p2Ƿs֜v䑜aϩDwgp1?C8yݎ8 獿ˠw{1g͸0QG ;:p7u=zR}Fx<˯֘ 02sp1#<=zݳc@g9ךL9#,'9B3րq8CcJxOS*x]E'<;;?N$n9($O(qGl>s`c߯JNRʜc#':q0?sci'ޛciے}4!ryQ9y1#þ>8<8$@㠥܌{c( pnZ %qӞE 1<@9L7A[#QCsrSO#F n98 {{S8pG8 מ@NqJ8$\1 nn:) (9#@98ށLn@y_@ |<;àUrx$zp:4\A+coLcBy 'OЖ=4YIڤ<4r`BI9<})C)9]9nrOjI0ԞNA @# 1)Kd?`]@%Aڣ@ Ob8{x㑎 c}z@I# tp8ӅHr8=Bi7O:t6^09hsF\^_r:)^9NI׽H!09O‚Na_j@3<1Bc-ד^;x8S:'_s}Rnq°?* ~Rz<}h8᳟Cs[ۻq=Thp@9`}p.2OQۚ@B`:ۇq9@pßoSނ =qF(x#Yߎ{TX [z7T'Ӑxې3ߵ.Xssp){XW= &~c¨x'=;zpzԌ# 7ey^s=O?/1sGr >OO~a$-; pF>Е8ݒ[ӎ?q<:^SN;[8bp1w_G'L=N ӒW,eWs'4tA6q>J9I/Q{o"P&>lçCǯn8ݳtw(b"!HC0BNqqU9v0 9Hb;sFq^0p~ c}=ކp>nlܑBqOR(+Y N;5q}e`8#N7p Wo_ؙpI`O(=HT~O>R+ոuOb/I$7y c#֬ /.2@dQM #gL$_x9Ϯ?0r6_Z$)128HIdPq@'=|$`󝾕NE^A;Fx#؊F*#қz@-^I_Z$n9HQzz?l[#'8=`3GK#ΟvcxuMcq8 <}EM<<Z!o ՁqZt%~|zSHAOz0Npp>b"u8$N T4@vs۷jq38d(`ze D!x0jl1uS!cs=sNێzqBL9=s@z*œp0xTf%,WGlM[=qӿc ww~trG`F4&yu { :M?.qN_¯=HwP{{G|=yo>_psitx }iXvop}F2GҫzN8{cҾ#qq\$M\@HOnV?6,F*dsjDRI#w`u#>^JN~A2rA'#{mNY<ʟ5&92Id.tb 䍹5!HW A~:uM/l7GVL;vNp;;S*w`< ֡O@wN2ww7@^Xrs]LRI8'w@#ڞ7es29P}>r(qO8}=ғr' @8 1ܟǸ٠`FOdn@? N98b[x12>|8|tm`2$8p6uǯyGC.N)? 0*H~}i6\; p=Ґ\<ez4{gvn<ێ ?{st8ܧ=8$~t/2R:לϨ>0\;d9bHd N9zgל2}O|cȣ\c<I됽F?c}G4TpGj}9 ;tSqAys Td< x=I R/H>ʓNI?O q ,F0< ApF0Ku}zw8_NvLcxI$ 㝬zx}jC =*FHq ␜ќӸGL}Ce9nr-\ߦG l 'h냑R0H{bxuhvI%zwo|^z z`O$*Nsœgw?)8u .8 :F;H-R06O 2yg yR;:`F@x'M.qʞ?_֓$x98*N3Aץ < xboq4u=~Iǭ.1G?0zᱏ4˃Vn#8>RG Z:gi#9Hjss8I#vps\8@1CHGx91 \'<ۜ3Ҕ8㍙@ NIg، '۩t9SGy79` r{Ԝpz2py9'0# d;[rr }Es Ӟ8(\' ghprN0{ߕ=xa'o;c~a(8>/8)O=`I=ȣ3ǧNq<@v뎀p=qߐh G lOjBx;Fxa{ӆ99I'9wz 9 FN^aRuqzgQ(0nO N{yM 9 A  rr2zL{N8cISӧ:cn?zs>7z-la:9R;xnp{!8rŹ##1N?0pڣuf}KےƓ]Fz$pr~=(W^q`~4m2ݱI9#MA>GCz`:8=jUaCSJP`=ށ1݀r@Oo='#@oȏ4~cw8}qRw{HLarFxq0sJ&CS8G9x=}#99s_Z .sӐ|g831qsdPO4qA_C?.Xޜ`z8$t4 w8?\pu}ɤ#3r0si^($+=i1=sr3c<~b/<>4{}NnzbT-c>9 L{~`n98\QԐ[QrwslzӲsnG4!xҎ8IS@^3@7/ LV:8zM9b9HNO 9vҋylqmr0i9:s\q#$ù'>du;c냐x?)S;),G3שn sN8/^zrBLP<ާJv2?#ښѸcq})àcqR$R?{`3$BG@O@z h\ Ϧug׮}:p'c#p?0:dրy#+a`gN8': O `㜜zg 'q99QQ۵{㒬O=G\90$u?pSO8dE 9oAI+ic'8?֋ / =~0EHNqzrNsSڍc-;Ұ\;p829=I=v+9B#Ot=IG=?ic0:$㞞Iy_x֓@.;d\=0:#qІ3X}gQ#j@309v;O'A}=hIc{}) p:A>ހ C+9;sЎPF?t>BN$nwe#9@Tr}7cpFs@xI=~)qCyA@ #8uTfzN vZU<w:8۪rF#*lJA8Cc@<^Oߌژ b9N~1^v}󎔝O8\:dh98'֎[ =?9$瞧Iی3ށGN)qKg `< 38'd=T~rr9qlp1n:2q@ =퓍˓⍘ [w}A9sRp|Aʐ{@ Rydpzd]8㯽vޣ6GⓃl\w`yȤه<%]c8spq׎(ϧ\i1\g=31ӦGh/c: 䜜8c8=1 |1;q0l~V't3I'+?SAOsΟUbApzhLh=nr3J@\#pqc s}I7m$1}hslFR Âsarwr?W88㓁Cӥ.|`(H犢{{a=:z`ӱ  Oz}(ၓךBz$`R{SD=6`МqjpR8 =y CsrG9*ݩ{׏z`ԪrJ>N1@  O:})=H`ǯ tIdߍAv:S#xGaGq^ݳ!NA8jw~ `s}I1YG4$HN=}ߎ:=>lrq1ր _|PpI@U\dnKǡ#<;Ͽ"  3ӜJAd@3'1M3#OC@NARLB9< uАԁ9QRs@,>lzڀ#ob8g35pq1H2?#lP'8)w@3L޹ 鞼ғG)6y#ucpOHz^6p@=y<wuP=q8*U)S'9zOL)tژzi pTOJNGA?([?tv=GӏJ\202y. y qHO<9I'98a~)sv ccy.NWgd sA6>㑟q)3$>Qx=Z(q䑜=?> > =z~q8?)Sz~tq秨'}ڠW9 0rqR ۖq?4?994 xٗ@瞔8a= rA8E4dO\eUQn׽;#w!xO9o Rvq@n0^`d3p@<{ sߧ@`;c8b~ qF?@3'2NH'I8Ww43.G!u\x8wGL;Ocg$Ԁ1zsۯjg$Жqdm=:ǿqӚ4qluʜ<1+FNqG-8!qwp \yq'^v$}3 ܮCc9H<|Ƕ#O<|`㯷3K $sSvRC8{,ppCQQ9$3tM9)v9$Ǯ1#OH@F0\\#r ${{Ք^x:Q=vAzOnB[;|[_\v9;qjD=c2:d*~12Fļׁ =9Up8zԽOLw$1M.%Q:dz2O\7o}ĘpzLt5Q{}sYdL˓컛}U)>HN5#= Ӡızֲ:tt?^݆*Y[ ;\ԟq{~`*{|`` s܁ӂp4-nFG=xvTS1<~5krI-*‚p>u*H=*A$;G#x~Dw.x< :iɒ;#<v: cxQ^< v ?Zrz#9ʷ[=X{vH''f/3שNOL-m8'r)$wzg"88!c5Fx^=:GL-9' Z{sӯ^׏],<gtKF)y?JIS" '<*QS6Tz1?NiăG^{qЃZCCsAOs#8*JZs9ǿ9#^jtIQ7ils&999$ƱNK0h#}=hl3iÁ'0`Qf<.8Ͼ;⮜gv8FNyas7VVOq`}:MEfrׂ)'GΞ".]Wzmc>+fϹq0;PF{_cM>baIy{TDv0KN秇 +r~̃' 9rzO?$Dcs9py'8%Č@/\5RFmP(fcTG+gO)ƪ` 2{`n$S,ct6Y03$䓁 نsr7M`:)[ `YI!s!7`GmfHU4BAbZ ( .>POht?Z-K*, nc{ 1߸kYb2R͟y9JRrk)8ڥj$A>)uRpYtSԎT{`HI Ŕ#'s5-؎@`XQO'f|FYKnl(VN3($qy3z㱁 1žۊwPT0O-Ds?.;sAO $98>€qx#q{~ypOFzހ@p9 u {qN12x=Evp 0'x:/^8\8#npz1'҂zlsϩ1.03$d:y#}::;<sQ /O ?.2GbC '!Iv=8 Q)+86I@FvgtlϾ;MrO 0zg9CgszH920F3?ҟ(?wsN( ry3~>H{1< ?rG`A8=@}}3M9r{gA4==؀y*Am>z 7 Ry8'Ҟ{ s۟֘=A@9h?=pG^: g}i'#b19~4 lrz0;➹#瞃1 xO~a}ǀ{N}0=z:c<zc)8N[x@s<=s0n@NF2y1ґNx翱Z326 r?@i=@as@tn2;}N:Ӈ 2 SOaB;:NN<1ޝNN={q=>`ǽϷ> =GqޘcwLp 8OQg9Ps' qN QHg€$nwyG#8ߟ 8~n<23A>F{*qsh@8c A9n -`qTԑ9rqA8x}G(?:w=rҜ31B~(@'NH 3d80Kǚ$H?€JG?ƀF39Ϧ:sK#o wA{Qqs8T'SO8iN) zNyAێ{q)A˜#p0=(=XrBzavϦ=@<`csK<:}(19g<89gsRtnHg?ӚLI?'<Olqۜ z^ǰ7ۮxЃ΀$U%9g?J9>8퟽Ɵ0vp<8RO\v$NInx zS|i׭&3sqG_iӂNw=J\܀ zs#r9Ͻ.~9FIU'%=z{R#G>;dO? }B rA`xsFz}^N"Z_Q׎ޗ;zr\"G;pHǯ8>Zb$I>J=@=:):{zP!\)y/Ёǯ4OqgLӒ;qf0Iy#;4|ߧS.= #zP:{>h-ʘ 8}@S~zs\V ޻ `烞~zw ;g{#QEa;g`z3өrsER Gt1O 2q\UMG^dIϭJ:g9{zO'iH97zwV影ק98 z`8crsׯIF8*0}8Ogh$>x=q1܊v{gttIg=V8=3?JPNN@6c G\~nڝG^A?\S3ï?LRI7syzvÎ8zfrOPI+FWGH=g`sw#~3#Ϯ/΋ 8qdݩ6Ð; Ns^1ҝr@p}"[u4<=Ɓ˞qׯz,+qHO)09;P3@x8sGN@AG_@ q';QulsuH8╀NI=_9?QOpcB@$ߏ\z8H2rz&99yt}GOsNznx GЊ@p2x8ALQ Ӡ$ Xws#p{~qs&s@#=6 OSc8sBc c0NI =zdq޴;zAjwO~r;G1__OvA48){qة9(9Qv79<Әrw=;PxaN8NGNys7'Ocp8NއG\qԎ !Ouϰ΀N0*2wzn~*DSq83ۧNh0zL==z8'@'ǀ{8un>Sg#' sq|:~^l=9c'i}X8plC`rqgʌt8@ =v֏9'Az0FqsV ݂?Oj8=I#:HR9Sցa8"GpO;z n9 /CǯM$}9?g)7-Iץ'990zA(89bӱSoS9_4Kw@ AM3 ^6!O;u1z46dc\;Gn?Z]N1c|:)=0,Ā${ 6<}OaӜJOrv׌8H>QT=#99'spy<11`)Al-s֓`q#ɠ/RI#;O>4ߞp*]h0q<#@z`t֓B@ 0Iq1sӞ9rTw1ހ'<ޠsÞҔ#w$'!wgB@+8O*>R3}h!sgސ(LjN~stMOJ玜gځT8<GHe z }8J gх~!`{㓞$G3(N1LLgNI'Ƕ?*NA'3N8 NNrNxv܁ wtWAʀ~lzzuE6=N$xoTg#p^Gz/ࣞ0pxC.q@xs> $׷'N1{kr2x >>AJyc'^i\Lht'qHJ$l ǧ@H9OL{aų~ʒ'#TO9$q7߮?.F: 6q }ߘqNKcӷN;ր 0b2zp{tZ]yNp0r6Ry{ ֐Hl,dcnUpw 93΁{9sFAC'Gq;ʏ~vIn> $ 1zf" CuRTqy5!U=Il=91Tnib{{&0G~Qs{s232g8;Is֤=0~dqt4$/,2zʀ;~}*\8,K.F:`I$lqI֡f ᐎrqdq֗P&BJTOQOQM'?$>l&R 7ԃ3OЈ`܎8>OBb3aC{y6,.8mǞއM[f6FzbOԠ:4[G>'#9팏S86~ *:0^ѻ tqV^y>$ ߹}쑀I5LH t'ϦQ>aסQk)FIwpJvo$=VO72HvM9&x?zE"Uu^r :cRvB]|c\ ~H$uDVM0$ǡ+  ORr{<9hK,G,׾=(9$w=Y(/ WzoNLy׍>KO̒r۾`SžýS裠=09NzN }2j%vw#9N-{`cSZ~fd8ϩ+dz A+68ʹ8lWֳ鑜so21n0w@Y=+DXռ *8&^F?!02yr2L]{L J?k!x̟&_9g2p F* 7{#ZNyrO>epGl b.6AT,$gֽxUaJ#7t<AYX,됱umepzq^!Ĩdܻg1Nq~_( @Pv 7moOP =F 2b$]ہ#ڀ5P }C~NxOQy;^a`742@dfP(̤[_'? ߁=NR:CX!c6_[H}c#o'>ՖB%@;lGT>o2.˳PҖЂ&bv3 t_equ8ctRӌ#Os_RhD++-?F!זm8r;gf s18z:أ c cߎ:sڗc?CIw3b@Av}(\Cc_?# p7}06q|q;`={u}2 $;z=Ƿ s0stQ~ܑ=$m9#{zqN t4aϦGQuQg`xq9Pې*8sО3<~noR@P g=@=i6r2wz?`qЀ8^*<n9 spqG9MQp H'@=y(ndwے?Nz{ }:p8 9cp=8Ǯ?NldO'qߏ~jU!80'pTIǵ:S}G TPm>.39dq#9990 s8P8\*H?_|S玝>9'ތߩ;>~GGf G}ߑʌu!O1:POJ9鴃:^GoQryqf ul玜j@~L}s@ #>3{` t#ԞXgd^cxq%AçO8 p8=ZNG N2sӞ}#9WA=i=v2L?*  At>Óޘ㰅i$=84g9 ?088*9jom{HbpAHLwJ nҏ_r:xc3`y'ϯ8{Ԍ>f! /v= c$sϵ>9]w01Nݱ 1}11J?}{c@I'@H؞)'#ۦ_8=Zyn2OG13'瓎3ǯpiv|ysSNpx.1x*!+dc >\cRѰ,xm'!瑐ǑR):c$=O1'B=P) w{Ԁ3)؃/|}})=3ʏL: Cs@^Swqn>Ԙ8vI8#?(מjA'+9+?PVfHx^}65Lz K=1`=i gQN$y?HO<S)ˎ@[DO?s~8nӞP{dzz{R; ~=O?>.0緰sq؁ӮO'쑞1qz;B| |v~;zi9ێ)ryw^yiN8a<8=3R޾޴g'>F3^ϸ~LV{~~9?'\vЂL?! 1}(aޝ`c3֗#9$vjb%vqqNG9Bހz( NqKcdAq1NaAzsp };~Pm2~9)>zXo8 O?4A'Ў+~N;}iߧ=z7A7q:g?ʆ1:IRvx8yJ811~zSqN(:ӹ)dqߞap?P`'<PG\s^ğ8Ϧ:qB ~]H"}9L$q8Ϲ?zA88ӯ{Po?=8J`!LuAxG4~z g'{|7~8(<`Ӷ~&s>%vf8?igӀ;K`I㌂p0z)pps߁G@mNA}3/rI zg{=M 9#jrOnOҀ}2O2890qWG;bOvPq?Hpq߀Ӧh1ӎdqv1{h3.A9鏭i\vuG_b^{ZS׸#=N:u;zLb`<9uw1r^90T tGC s@'秵Bz>Sߎƛg߯+j ;cb=r2~zSI9l?c''#OJf:Iis\ZC gxޝ99<@AҀ!ϮA<폼NFc:P}@?'~\?֛II98#^ݨv?Ş<ހa1!OIpqHŲǩ;NxQځǩyښG$rq:w$ӣwfFH~: c&8x O`3=1B@0Gs9!#ųWsG91AG|p9w(9GN2~mܞ% zn_PA+qB Frvd{ V_H(RN0q*?); ㎘a@OQzչ|<_4;~\G@===M n?!G썼pq S@u3lp9A ׽;8eyc&>l6>MpL$88?JLv U@;wqN{zԌtpp99Sc/RpqMxsZ#I9Q:9)~#`SČgH֌~J$xA܆O<{RWp3h=O\tbז8cqO $00}sPrOz({Ԍn`HZ4z߱%UzO;9, :rr;Gj+=/bqڗsзgGt-\q:4րgyG$(<xtPyuxsՆ:qc1Ilzg@p #ӦA?:Ozcr38p6=)^3@'tv>_c>acO_R;zdGl=H'3OI@3#*\ߝ;'g{ǜ>nOLfG,$`;Pzosi0$H_47h8޼vc2E{q?8rH#4n!}@$܁CvcѸc <ۭ3g^r:`h!`@́k= ۟@p08;g>8^@y@ s Xe@4s~q2;g\rNOOGrs 4 we8 ;+c5()<0wO! =vq w$~d<4^8'w=sR-qԜgߥdy#n6?v`6FӷZ3=0[9<㿧zasprxD a= \sMqsק?ˎq[;HSH%:`ds}#r=h=NS;<p=:~ 8 ss;$3}@ rN9R8zg眀yOBGL79x^ ;qԇp1#'z@ 'G'Өx'0~b0G#<~43I- \Hڀ @8^IGQ97BRN?!Hc8xGN* IOL 2&~䟗8z:ҩ<.?v2TNjX ;ө9G|qé?h\ぐxq4g ONxy 8(q9뜜\㍊H<Iu(`x$(Ԍtp WgucRRܷ# 烎?֢rTc+$c@~$fA !cy8Aן^j{3' 'w=9z }҆Pnd'$zӱ 5]#X;T NNJʌ6nBu<{1vm-8Cn* F@HilI I3w,;Rc u<>O7v97ɞ;H,rGs@ P}O9,Ԙ62FF3Ґ A8=y<}E'`Fp{˞;m Ѵd9lmb1HhF g;H0 tT #N8<2A۳8~4#,?6~<gxۓ$xӭIrT n ’1ے vw?G)©'چ1IPxᜒx9^ؙeSs9,Q9qۿ?OSbwzD>i-;2yWzRr>`{zVJw' O|ңl}, Yf|NK~iD1dFHҙؓx'ڙ=D#9?*׏OBqO8Ts<`L 1O|S NH#ת{|JN=:r8OPQ[+lsz_jUq8U~yu܀O9էԋ ;T'=MHBpsOS@9Q!cڣ,I~&: 䑜1RӨݟpGn}. ]Rq;ӿ"\r q>8 `ϮN^7z?0w^NiIBB98dH9wB;h&o~:|p2 ;~;48)9iFrq@Hv#cRiPpxJn oLc{g'#})8;9:22Wcpǡ듟^J7Ԟ`Nq<c۸i08?)O^N0w.'?yrz``wz`(@# cO$___cL`=T翠p^sѓӎqװsב@8uP\=ǽ401&g8峌z;Z\h{<cݹoxHcNWz&\x 9#p<?*C-W*s>zi瓀O$ :#.{@pqJ}xABgʜ6Qm͜;g9 xl<~9sazPCG=~Nr3?wv9ސ n<~i2͑xsP{=Ppu<O㎃#{${q@d?{0@ I3U;@13׫g7= (zgO4 󓓑ۭ cx8$cG::us8)18<9_\i9yr@Cw<`i3r80Aphp\`OP3p{Ns9:`$u>_@KL'ax@(g$syp1 `#:>Lt'-p@8ayyA#zf@臶H#sh=r1KOϵI;GN)'ӏ_Zg|A:S#$t$~9:gӸ_`s@@NNH>#;sT׭D '18HSv8zcA}iOgcˁGLLzzR2wA} @G>`Hϧ=E/x0[ON@zuޔqOlL@F1[ܖ$`O(cq03=p2p C> IOAAaO=x䞼RC(#A8? 89+=㊖[O1ۭF2}Tp{o!۲:cǨ܌<Լ %}w";X02 9lsJ{;Ìr1AWǧb(U'j$g$yCby3˒NO#K}<p'җ}GLCz6 v8^1O8g==zqި9br388c#cҋ@9]'#Rz<FGƘx$sqFzu=8Ϧq9pzx|6;PvӊL: 9c֛Q=  9<G 7` cץMHcHFF<v䂻H_(lݾPWΘ}wNzR}2=c@u?Qdqy`R;FpGcO\cfaۺ 2xz 'B ݑ:#q<`?J 1c8;S <}^_8듞`V;D> `FzrsЁ,yS$_n`FxׁKtdb;O9=*9W֗qG"a6s)>'9v#'N8O<7c<1担NO|GcnFHn rz})S$q_ғS׮p Hz3ۚ^yϵ cQӅp2ApAP};`m>Ê #?7|u}M?8NjX۠끌gQG^@~\g >9'<$ an=i9?{9$R8=;czf<}F}ic SHc}?>3T}O R[`1cfԎǧߨ{ۨz{}QLb>qqHOprG~yiӱ;R2GSAԱ鎾t'zi Oϡz`pq@t$ J`=0~q֛}AKO<`րc'?>=i;ߌSD 1끞~\H'8r)_N }: szqM 31>N4 N}_jp>^" ~@*$=7_zǦ? f!s}?gr3~gӊbۯӏ_aۑG;p:ާC:?8:9Ƿ:71ǷP;l 㜐)wr2 qN '8v=A9!6O $nG99# 뜌SBxϦp30? yO< I8`?ZCbo z˧Jw'npS<H,~{;G n8LddϷQN%So~$dҁ ;Ďzcr;~T dr{w׊A<: ց6&xu$8$SM8^p;hHwF$9׊^oϪ~w?1NAۀN8r=杇 a88M3lzP1pNG=a8N>=g'7e'?L|<9("w.F 큎cJ,-r #uGqw=t:ցンr9w$C8lu89lcҚyԜshc} GQ!鎙=3BCCNc98ҀGsӒ8y!,1svH*2v8o'<A@! v8 1:cN*>~r:cP oϡg |t׶1@b0>##_L!,?T\qϭ)+p~9$0y'g#hq8OjsNIʑsPy xԜ{Rc23ԮXuP! `ONG\>FA= ~Tc8T'g#'1BF {ҁFtec }8负ôs#OP"S1TqLЫ#y@ #o\qHx|1sq=(Nǰ9Ai0ỹ1xx\IR:uvJ_t'v:mޛ8=7pOߓUzrCuP1#$p=Gҁ#oNZ~G'bzsxf!8z;>y8STc=Jx<87BGhp =i۱az^zfqFBl=)w{FXێh#A灏C&wg^H ϨwbCANOM$N x z+ס0rq;Gz;)kt\X=Jb'8^aR t<~x7$z$Aڟ@dw!I#?/Nzf Œ#3ߊ\$U28K{|1׵0u`䎝x4`v q@  p u@=:4ѓQw.y?鑎3rGWzsLǡ^zj738_֓z{{@f=0G'ds8:s@6 󷍹sH|c9 FsgbG#iA|P>QX8鷧^ 'NNc~&2>^<2#ܜg=FN1y8y89S27 suցC<by>8zx@y﷓lpp=p=:{ߜ*L铎H鑌m?^Km`F1\1^asМvKpssqyg @' Nh@ 1~8 1 ׯ|ϵ#?=#94~Hw8m\t'=ׯ4РpswsR2?ߕ 1'yӵF-''y `y:{P0=rÿ~я ;3Hb9 Q\`29 _nK ̠rJ:7h9;p0v('$Ap0 =#g1^9恑O##rpқѸ8ێ˽K( sA#<SsA;TpŎ@IHCtR@H P1^t -܁vHr:qH$]͗^?JAԆ8yۃcߦh8xw ֘ ACtqdxK2 vyt eNs CԱ.Abv: .Glu6&cPX,KNlҐ!8,[YO~G8<[ ߔc9u4 ;8 } @8݂A_F / y\0rORRd됮H3Զy5`!@l<$B{&T?Z ‘Ѓ5o3[$*۲C@0,6q:U[1"bm8Tj3Xp@xe.© g## =N߁RF=^z匌O$dX9jp$c$;{BvF@#>%ܲFp>NL+N3'm\( qU>95&oA26GQژAFp'=LqI [Rql9>҅;@ gi2B@?ҋkӃ͞NLmBSVF Ar?,WGB@u8*s?+ ?g8´ywƱbmd댜gDPI# $c_iC118qJ B#{q<6pJȜ@݇1N`Dv3]:.avͅs[6Xr䃸p:j[:m %flvIh"< ?{; UJ|{Xڑ兺8ʰÂQ g q^LvN9FܑN;[sېyֳ{1~`q0dž 9=h\dx=F>!`nOSӓK~9ϡc/ˎ? c}i Nps}q'-ۯ$Gssڤ;s$9)s@ 9qcz|z8j}Rqr sz/8:F~Qǯ h9$B# N;qiN3=}RmО÷ҁ-4 q$J/nҝ۾v`d@Ü:P.=id7`dvC =ۏ摗yG H>u\j09#$s# z{F2nj trx֘ tϢ^zRp7nd'fs2==(9,?18@0HI#')sF*stG9'=;> 㝭.a@ 3NN:/v ;N9穦<`uIv率A}}>QݏSN#N>.v|'#?Z@;d~}M ۷9=Ƃr1Ǩfc#w*ArvӞIKah=rO^cN;t})?-VHdnH*{dn$q9҃c$_@nv#,2?*Us^q$R8qIxg9~#wvA:}) N9=i8#Ic*9OJ';>n07ӏ ȥI p@%;֏$c8c`cޤHןNqۧ9wN UqP=vpOvsqNsgL]DscמNxz{R܏c{g&u+=x?Sc {ywuRz玼ǿJ1(oS ##{P98#r>\s0i=x($f#T%q=y GӧSw,p:ޏt` z]@=<v?nj\1~}9_1>Bc#T 1($p[ǧ4S3ؐ21f ~WGڔ2:{ր@@Q[s{yCJO]rH#=?4#ױ9?2ݷ1@wHtSjv[$ Q`p}h`Frsy`zSn2G}9zc@9@; y9yt;0 )#ӓ.{^Q'ny{y@ 9>xI?=9=}QP4 '2xR0Ԓ x8?!rs'N8#?oG'Aדր?1$ n1ޗ'np^P1H;q1 goRrߺ@ x^#$'HclƚA pAe}NcxG0Az' Չ0=q?6RCuF1gz}3Lzx9)׀ u?NCsqAV:qS[={S 8?^={OI|?)bvC?=:c)w؞3iF0qI9Ͻ/S}C #lc':s8"qLbt؞}iw~>zuc!xr1j3チL,7x=M?w>($3v\}tue[@pӨџfGQ֚d${RgSy;ݽqר9|>Izc'8<Os;ilHG?ǡ#9;לܖFxQJd'cx \mnO#w =s4&8=1I p{=r{cݻ <0==0EF}>aq@oO<ϩッǾ1@ q=ϯצi{NF3^9\!99=xPxt=t7'@rN`I [)c\O~((o|ӎPp1A9i0[8PinF}#P7Ǧ1׌pNzfy=u, Hv?\㑊= Ǹ!x99둀8sM;*F3ps>L<_C(o$1ϧ8952) ~HInK'=:\֐ud@? }:c!CۡR>>܏Ύďn@ǧK =x1xcGBc 猓`}:uf<{`8#'I9Qa_P#'=:cJ>Ȧ c>@?^@^Nt#c@1}ОN2):s^1|;~R s12Gqq?ȠO?/^,v*I玞z:z1Myt${L}vs+qҘUy`98;vy dQL$r$g̃dFsw| ]x u ӜZ{qg=<)l 譎yO;Ozp?C9=Zq#'z{RX=@8C֋9=yێ8x;'0Onޔ tldzԀor~3ӵ9\dgi=Q|“$uc(` zcn>E#Cۚӱ2@xK``:u@'n@`zf'd#;>@0 8 xژG CB\cn9?h$ic(ӌ?Zw$0 v׹ rq$sց_!Av,s鎟NO8(۞郁>Qz{0VrrxoSR(b: c_={iprH3N"~Q3^)GSRIM11'u<cp@9:qө?i3rQ(C` ?(\&ڒ0' SI9݀ qצ78>qFpvG\-=;`I8{gZ<=bp}Fl''i',B?`ˀ2A?08bu)AqHrO$߃`35,bd} tЅIm /CJ c.ݣ9R#^=G npT$ۊyߐgd.`|}j`Wv =3kdl8 s=7'we2䀹ݏf72ӎQldw;ϥT=zO!?t{=)Iӧ<6989O 90an2Cn~<ƀ YP)uѹKwA2 ?ZHRI 8;@o';Uv cv|/q1JCr39!}A# }84㝼aO'v 6=$x9:$`=O^ϥi)\g'0եa2GikX!rvYd`8!c|,& %RC)jN;syUNjI>>?5]u3L}ܴ;sr1V$/8=`{etJHFeʦJ䟘jvFK|}ߞ8jXݤ;灃p>$[uRI>c0Vc3S=)AaZ@NmP aH<{zmc\y^r)4w)$#,3c{q|Vyj:$Kd\'RiC6C +V<|´e2y'.ʸ'y9*>/2ޖ*Ew#)f`DϾk^PF aWr\iYoD>s}U3Pu䀸l?Zƻ华/Cydw88OH:67sd?ҼΠ zzwhې $FA탎'LqqG? qpx Iq=یsБNg2@S8OƁ7ϛ9뎝{ s:|,r:d}}1J>`>3Hzз)08-r? 8Ny84:{z3O==4\1shn?*xzqqLC |=F嚗0I䝠H8<q̱O7v y[dv8Bx;R9~$1S¨#p@ ;qӾ>1G^sWg?( >\9x?) +=I^uGЁN=x϶z2=1@CI'n=z&7u$ z4 Cy䜌ӧO]= LSܶO(}ya=1Hb:gv{g4ᴯ'9=iط.Fs=p{bru=OZLb 7RJx?2!F{P61$z߷FN;pOOc: SP?68ng4< H?XL2~a9R垙@3ccw@`M4x#ϓځ9v7,01֎0IA[?Nq@ޙ6v 6玧O8$@P!88d϶:wtnөcahaH<q1s=3q o8p?N/O}Z`6' Ay>\Cێ)`u'G_O@ϷN0=g˞N}( \qJ玿Γs9@<pr8`?@H8pz 7sߞå4A8N70H !;F1198iѴrz`q::ƒl }Fq߿4 _=7tz .>p1מw3@ qrl8(=A'_J7q }yI$#ץb.'wq rߧ=`!C$# :8NF@0';?” p2 __|<9 3K;$cT"<8%l`(4x2WrÓ'xqH`s}ˎJLŜ듃}i8q#i*Gq0\F썭wԣב ǹ & qOQiGAܝ't0gg l{}(CO`u$xyϭ)n>\&<9<1s珯7w pzA^::ց\nsROלRNW<8'P 2xJ?ÿ=_Qrܜy':R(aێ=>ϧ=&P?/GoAGN֤nl4Pp0@'\H{8 iJC3ۦ;uϡilvU 4^ 'K}PqCޗa}01Ni>둞z~41y}xJQNF8'ڎӶ0iӷHLpLbבV?N}yハ #~{}y''`o8cҶ4Qz8^y:V㜏3CsצM=qWJ->R=OLSG^xӰ?=@ׯ?'~=#>Қ8ۿT!G|(r}F1@q==ONLN:wzoGd`P~`J~8$rq?Q,Fr8I8{}ۓ;_JbHoLu$t1а 39L/AG'1n?0=϶sJ1ps#8ݻFx1#Ivc@`QIɦL#>ippF8=SFFwasCrs=R@79=1 HI? #HҀq8`q9(Ѓ:4N}ʓqv9G9lg䌑$z{K18Ґ9t8l>#;II'PSz8u'9㯿JL]#; r΍0^0=pFѕ?xI9# hx4&A!뜎8#r>31l! #$9}{3ߠ?Nܜ7f'Ks)?8?-'m9>᜞1<cR3sr)܏nAlu?ւD8|wNqנb݌{cҜFr9z?Z<7P@O{ #u<Ӱo-p1XpU" 1~c(@4A@jo``Sy3JAJ㝣ƒ`pz`Hu>111x6Jܟ\Hb8DA=HݜdJIg?ÓM䞀9*QQw\gzT`{` ӌg}zSG),\?_n)pF_Zvzc#2XrPsة]<D;9uA#~A9 1'?\~4\/QA9zz׭*x os@g$`NRGw~xMu,r8N۾{Sv8 OAzwC>wO<~8$~4cqT'Ю$ۗ;0}8Mq7v>\88׷OJ\`$3r2r0 FK}>BW# +('cW98ip2X;t |IFNi88'@Q(@.WvyPO9^Fr2qs>SmrE89S\6:=x@h׌~u" 0{4(Ўy|:Ԝs9)=$^AקKw}ܑ0F38l?NF:2:~l89=zJ@1Hp1qM$җ{`+t99*`'$6FHzS>lpAr38H APAy>çPG@qH@2xSN}M3n<OR;=937RGqԀ;'Z x@lr;4 OQϭ;h%r7r7zC3B 3sz]$u:aHҀ08ae0z㎧f8;O9{ I ps:ci ?{TiFB$w i 9ŊϷ\ !:T$``goCS9^8n=@8?z";xǁ01C2y?IC䜒qg=Wh:q,pFH 3z`yr;ޘ->zkacgs~@h1 9QZ %I.3QmG#ۭ1*G$h GSxPg<Wsn ~9\NGp==iv'\9MF@nrjGPw\;\T=]0s7 3=Hf@=~/{}ߎix=8= H% 3R'q=:~_b~\d'nGr|*r/ ΐpr6NNs1S"ṜI%yhA9ɐ GL[C`|A#E 7d*܂ GlZ*,n:V]U#;G^'?TƑ9F9c9ƶ%c8=`O׵J3;Nx$2;?n*pzϭdӜ#wzTP< 'N#[4BWn)nړ*@#Frr)* ׏JRr0x vק^=v=41)<Бڜ8z$zSC,\~oQwڅE*{'֩W8RG4~lɏ8#Мsaۏj# 4s$1gGg 9{w)Ҿ''ަXq#"0HE]h;ܞMRܞFzU4Bc^=Yϡt^#?xjy-^=MǖH#f>e*T;I6dgҳ}5utxpWʟiuS[@ܑ9+?09*T1 y''R+'.)_8L89`:<;*g%\Sf*O)\qJ wOb Ҽq0݁*_݁sGSGRoqlW9@$#{Qa2.y<{};)=n=}1J,N@@BHNgpFN(yGʎ2:{ \[(;PEW<;49soh H<r##K'?h@@8䞝?JPǯˌI? 9Nlx9;I9%sh?'.pݎsxyI܎3x#<7x>8fx=1۹y 1y ;:{@Swq:L䑿cAB@+c#:Z`gWӑR $/=:Դ438z>CNG;I Aa>\g66zdIg 08?@9#3:P>^ ܑsOH8}3ϥ;{t1>9c#׵H̜`drLq'zzuzs׶{E,' Q2zq##*LhB:uO>px{ uwrsLg8< jF39sDc{r:\Ɔ?/P3=:'G c{ж;Ӯ?Gz$`@!RL})ǿ 0F['C uxzt₤t9 H'=z /#OӥNqԎ3Us԰cw^8'>mxsi. cߞ21)sKu͎WNāܮ,z{ cd`yj@瑜m8irwo䎇@9'4⣧A#ցGNz}H }Q9G1z0x; z0qr9 alỮ8ӧӊps|x0#P)S'$98 sӥ7Up4gۓ֎nxŽppB@=a݇N8#P8?x{c3*s׏ cPB8:ԃsï=rpJa92?'錑N<(# ysA)0TevG<6bn xAaug$r[z9tr6<4mq9zHrwcdO;z}qLaxbq9)g>0>Ґ>.ߔm#'-I 97ߜ<+\ך q=2  cg?y88z}(!N9'ǯ+psF?#{ &`}7O;3秨$!e'.8FJ GOpF{>s.Gv=*a~xo\t۩뻟CI=:nNIӥF2I#Fx|߯q#+9s^?JzuR}  nsuR@<6?1iqNFF09#<0秮(/CjrAN}2zS193c@~ϾO9灏Nxc>Pdq=l8nGJy}G8ddr38};rzcb F@ϯ348 x'w8Nr 鎝Tg9$ݹpXq8QNzq0GЀL{uN)8zr ӎ)sǭ?x `=ӭNu 9 vK029OsuGʐsdzvǭxBG|{ޜnp\c$Hc}Hݐ18Fy#gLL@'b:>b>÷`gM@t@r>ёԗ N8NHF/~;S@'H+ӡ=p>w5sdvr2Nt*$dr=?41om:868nM'gʁy;`<gJz- sǶ)p;zpjYD}qA9r3~z⤥1&|ӯN}_@8rs41uz=x=ys57Ha#'N(;`}(#;\U7S}@i8j2xO\!+y21ߧZЖ?AIӿLsGR`qo@Aš N8ǒ>c$qճ? 7$Ax>G9S's3q@ ,0vqqׯJ7u~I%}~63mN@?9r:){dשϥ"qpݺ`&z䌏9(`g Ü6O99Vp;ߥ<Qߚmh+=.߯}G^hHDx3߱T{tyZFp23zӈ?NׯazJ3zdw}C1L}9CC<)g҄q0qԞx=Tw)6!^?>.;{vsSy9px^i3۶x>ԸL i?Na߯fnr;c8aۯOAsKNrI=R:cgiqӦ03طjrnjzcn9r9%c瞝hӎϥ&=2:c?Z~zʞoӭ>8 .zn8>y%(dN^<J\Ӷp0~#p3uTMc2q9 x=n{sB$I@ݷg4g?1'NW @?0i9ˌ7 98d=y{7c䞞lSBr:gTw'> ccқdY~ }sՆ?0q(B! ノ?ssY=yji\q z vp23''H衽?08\7j1'#eGӥ*xAs׷LzR`~{sZFA#=Hgo7w# GzSAq3d@>pAcGU42@ HFg?ݸJ,I8<>v#yz}y8 \ag9#Op@h ܅Fy`Rϻ}#J9\o\s0 ,;3)?\cޔtNp9=jl;# c`z6t#)N(hb\!r:#CMqFX8=֕p''o~ vMMBN8 d,|vy ~AvK6?{'sss@100p,c׊'$B#z6s;8#דH}Dg03gh3=1NimKIbqܞ(;GN89#{ϽJq A(O`r@sjA`rI\sMCg%p0?ϥI3cN30A p:dH#Km)4+wn10I#ۯjyu

^}z<|erzOoTK7SwI ;T,\/LnGnsI' U"G1W9#tu_ʐU q3$ǎdI2y `.1x;8zׯ4烓ߡc4n?}:~ӭ OAx8ǯc<נ1C##߭.Px' 1:sӥ(9 QÍH rN@^{sցzOvz|08Bʁ$ zr4?SԷ8;rv8$zRt<qPGv pO 1jgzd ?>}6HWL{9H<3B~'W w$R|(BO4Op=;Nz!&B0P8>z(r@+8@`8 `ҁOC2~@\I%F023=OJ)b }qH:|=x:N\Ps=s(>08Ǹ0sTrrldH8sn^Tw|+wgzn'){ѱܟsMz9LbC69rS$0IHc9<r8=:ui~^;rNw9=~n;8=Iq;c R۩;q큔+mtZ^.>a>Q#۠1='#'i u$6O Ggz!  PM݁2]ݺdw6HvPIGOPQa2$yA' q0A=a۵3=G͌|ߥGQhdSI`9 KgvҗPvp=pNXTtϮ=i:vSҧDgpn: 0Ts~ݏ]CIi7zc2I ~#]Fprz`q?Js1np1 i2sHr'Wh BdݏLH8㎜461A  w*wdw#=zs1@gvTcv8E"&<`3A##>ڔd @>9ՌBsgHrNy'2ٗ ʙ YH$0B3IUGcf`[`nG3nN3#qӡIO :W}hqpU>=Ocw\Ar)GSө`ߙn錎J 9ľל#ޭnwA?>ֆS-s0q jF NzzIobz mMwޗߧN>'a98>`3vӞxǧOojkd6HAN+^fV* #u0VmN7ȴe#')0Hœg"cɒ".r ss^C;)3H\6]̬_TW>|Fv< cqV{Gg饘;kQɳHvaAPv/G!FX2T~"]~~ՁCb|pTI8s:dSĐ/ 6UlqX%[ fBFX 9z͓q 쐟Q%sꏰ}}-ٜ*R҅ N=;'qpSwȡ[&ACf[a|coXhm̥I ⼿U[<`89qnS;;= cx'ڰeB›J̿/9{)_q%tԈ)~b**~y#֜Qm:r9Б aTYAҠ$b;9o"3[p HROLNN *yrGWǧ|v6Yݟ1p8(;UaJIi=&SFdb;u$8\'VP+,q]NSVI~:1hd!}*n[vi 8<һTК%Ž&i6"71#k#y`9b/; \O'MxX6zDU̠<jW/̧p6p>΍&k\2eU}S ;de,/'82⟲w)U]ͨc& rN:ҵ+QH?ycCN' ^9Zddc~Yu(JLى#r=TND|QLzԼ$1T`um{vN*Gp2T\5);32RWCy$zp?@OJiAdgzqPP902rI`qqH ۓS^zs4 b?7RI#zNq8zg>SbCI#'LPg`ySw~GPG ;Na{gz㷦8zc})Xu+qrõ7L`Fw=ytqyYzjJ@z`9c bx;r: *~\sp0'ғ<՛g<.O^IA9<9,GJxag9zGwmq=I_7 N1?ԱpXs2 An{{A==03 dCz.7zt=3@!qԑy8yi2Hx#LrG^281$r};AcA'=G84 r1x'Δ|q=#Cz@ޟMN:^#?֐3}9#I{iL /֤W$pq<N9pc9NJiaA8q n_s==Kg`rXgRJ~>^14tzNG#AK8ОN9S4 ٲ1ӱSB2;:q:(`S۱ cߠ=?:aw{9$1ץ4!9Wr ?w3c qI׌})z{sUOLgJB?>Ժ9o߼I>Hq <)?@G9qy2zqKc3یIc8)1$I9*r= 8`޾9nGG0~\0H)w-{t:.:7aA+ $"\rs [~li۩ltҝ(9$MJ?\w擓QҒ@?/L(qWӿq@1x I.ӌusA g9v<ҏb9$}c&23?펇py4tI8Zˌ㏺t֎zd `~9恌X-xӹ$ڸQd O@twutO?;dsF2\G`=7#sNP tܿ1F <Szu~dgz\=0ydznꤨ=38T)!rGMKӠ=zу8R қRG?_ӭ'yϯl(gSߊx{ғ'ێrG^qqx &{w14鑟DaI$g9cs*F0q>:<)=q֘3#N3?<t}^>Tu瑁} 0aH<tA'=JqL''ޜNG=zhL=:z3GK #?Lp9=9?OKLw>t>0xzo=Mv=OL6pq:wȦuߦsK׸zA-0z nlA؟)Zxc랔 xӸ<8xHn̐1cb^Jyz0P&Ϡw==;}iԎ# ,9s:ۻdO8p1Typ}qqSo9GӃL#:<| ^GP=~Lu$%@Gz{ @}xG\xFoaR qH^ޛ9 @{Qbİ6y׭h dԨX8$HyޝEKpmZ,;[ ~niXǡSyLj.'uj?N}ajap)^}h$8$:'nN!D8>ИQH< *Ans8q@t\,˜x4=@('i_8~Qǿt9h6Џ^" ݁G ѐGL:~Q@ 09ds(8}yBc׃zA go{0cLp@9HWw9q֘9 1{#qWq:t x#_Λs'#`]Hc(n;A`gh7H׎^Ɵ@GI=rOx$tHH#c=?;9vt{*z뎃8錜<{ӹ|)V>~PHӜPq=NzOv`rOH黧\i89B? wc *}'>ҍ9bGwfnpl_^OSQr:ǃӷP8zIR=Fp0 u=*~ofGc':@8 l+Jh@11Kv G~a`NoŏX$|`cM@{m-<ǰ>cճ$c9>T(8Gc֣ ~SpG8RhiўxrLgL~FyPcC:v ^qqs@ 1?NE0ے0O'q<3z?Ks`q`A2pq6}xm1xױ*`d7 =='.1Zdq1z9SBbal9`?RdAYBUh8zdgi?/Cppn1QiEn2IAto|t9}toOQ&x*2y}E0㟘d qr {y}LG9 6c%t9tp뷌=ڐr A'q; Qp xO'!sם|]@ApN?0<޽zfdg3ǟj s}zZnc#c{zI9Oa@bFx''p<39q w9H^w9RdNHq9LT-9?t׃rq1;A=OQ8r8ZHH`  u==NFy!rx .9*H y_\`v@pp(wI9 }; ͒9eaqr~t =2Üt\:4394a#mlzw1z(szqzi ~d12@O"w܀TϠ<9'c-?ϑ=:ǩ>KU6N\?Q4y䍤~ H NW q1E 'o8`,ǵ@[9%F8dR,A;z 8Ǹ8 uHOC$R`&7T,K2^<|*98bXFG9F~lIX"rwnv`=RR"r ;z`anJ_aIwArA`0'̩ @nzH d@܂x'OPuC,:0l89IR3@珥Op&ORy7v $G84 vF@ 4FI\ ǯvz<1pASQzw``c8U!;&ޠ{uL X R{n0Iu Sғ})~!I8ǯZNv ;8zP4z,w۰Ku7過C0qy}h8`={  2}qNc9\pzq@|q~#ޝޡsp;c) ~~H?:z^)N3zBgz}̎I< Cq3ZOq2<yԃ: 9x<҄U>b9U{3P֡W>S1w=OCS%o5LI@"H\' 1nQyqIx?Z^J1Ҟù.pqg;zU9<ϦNzfS)<;z3Rm#Ѿ~B`$>'n ~⎠|9N:^v3_;2-79 >RqG'8CQ1ߘgׁtK='8qLr[{=HI/ ܱCd,q9qh(3ӯ c[sۑsQőwcEv0q{b:s9c{P';X 7%x#9#SI:6 RRI~*t3)IN&IdE2;NW,TQ3m}|ˌIi]H~R\2NzUfnx7vdؘ37s=dw.i ]$=,o];H@FSr(ti^v*p#/8 .fhͻi8"V |#O^+h  ;u;T/n?{t!3s%嶎qE6z$#6z㠪?/'c>A~)?鑼;@`z _JcFvM8?? *[j;$w?OOn9W@ʫc^%$VLyksA3溭?Y5$9 T5udkI "FWw9LӼF`ѣ~dvp '8砪x%4h7/AeEʸv=62֮G+$ݺ6'j a9s-~f}[]ә6cfcvA#@#c*P1 j "NkT5H?ͽẹpqj +! P|7WsWʮ&λJݬaiYv|sǑ:Wi'̡ !1~4]mWE#I^k۸ HAc&Bj3sj[3pq>qM\.p0gu qGZ'wNg9'7vׅ08N9<; G8iwp'$,? #N|SvO >Zj?m(sz2p3î}~G??0/r?Aɥ W8rzs33CP1NjqFIxPc<|[=S)8ӓ<1>x0'=qJ=8>>U#)Lt.FI 5|xݑAwzu@Xc#>cG9:CcK #I#Gf2 v;7z޹RF>e'#``tڤb{`trwp:h8#62698=H@q6Nӷ#ui}pvz9I0r'_*1 éq=18saTqϧOaN88- w9I6yRN3F9҂qžJ``]T|8=jF/R3hzF189 #a'a`iKv,:zgژN29%:u;tҎ s@. Gwc߂QlAXqM=sLd HoisHz\gz)a';cwcr;&!888#9ܖHQDG`Ӟ~==ic=AC=(@yrpT[_+sޓ1q)=H# zci𫴅$ H8`;s<=)_LxF1 AAxAGM۞?(2O'p{u##q'#H#߮E!8vA}OlڎCIz+( ^؎AoR>#ާ?\b^0G=Oǭ/A$9Qpzz'R2A۫qç_g𠑓ہ9* =qzcئr?7qpOf?0FO8H:s9#^cIс֗9@ =@RTg'>SCntn7|n|0sc?)z|2}Tc9'@$>ïJCc@X9\w:dsQ׃qs@.OA cc9r1{SA\d= ǽBvn `MH?0IrFO1qp>w|ڐ=yϩL@<jLcԜ#`'a:Ӈ^=vO`:PH*ܯ`(9i=8P9' ހaӯ pwn_Όg =3N 3{n\u}iyg$n ~? L`9ߧJQ>iI9ҋ ^r}HN1K1ѻ8'd'ǿ=M 9'nبqО81ni7WvH89?JiR0`!tqߩ8<`S4BRHsH zuhwϯoRop1Z,v}:n~;X<ix=G~qGҗ1߷׾i}8'ԏ֐=cSƤcz@ǵ/S:R ny&P=ǯ+g8(8>8֓M\zi?^îs4/~v;v>Ԝu|*1߾{@Azc{Ӛw|q׸.'ޞp3JyޙLvs==i={p@ۜ vz@'gH}:tx1uy=J^ߏR{CP}9G$Kc:} q8sKazuLK:zcv}~qo9HQ =9C r:z1펇:^c+NOҗ>Ď ~\Qqg}87=qg)Ќ48N=zR3 ^Tcz #8$)W<ivAǥ;_c@팰OJba~:g9'Oq4Іrpxn3)߇vlvR`7Fqqs@ӃLg8'?1׽.ӊM8<?)qOۏo8N@`I)dRpp@❄;ns29 ^;gqJøs#B8㜟8#>-qNHL#>ߏiӐx=M v:hw g'GAE0gړoC?\1)g8_CM4 c$Ez}OQl/p1)lvwrO#p}}K?^>ϥ71ELzpH矦~>O=pԀoNx4`z{h.)zzc›__EӃ=O>ޟH:g8<P7߃zPHcu  lx:uwi.1@;>S:I9hzp})Ϡ<GM נQ=Wz`L ҌzzgA_Pln2OH3>3Ӹ991:SO@zv?ޥ cbǧ@y>ϧ\GAT=L?G8qA#'~ ǿ@G;>9tzdܞ0q#{S@I 3Lc҂q<*`wQ2X7m gR0>lnzg;܂N1Џq@;={ ci 8 p9= \`8Nx81t62=qx >=І @'<6'=rOl `cy;cA-1$F}; x%A' 鞴 LL;s# #F?3bH& RCc ;ԙ?7'vqӌN9@>=}3M8\=1ӎ})3{2HdwUga}|d@ ߞқA#z@#*5 s1m˜?$qBé?AGﻜyM!䏩>SĎh#<< 2ܜ>Rt6r݉9hxwrO_ƚ2Ͱhpv_j@p w8@LAGI=)g,G# .FW#(JvtNڅn8#}>0GL㿦1@\aS$ ApF}:Ҍc#!;zNPAŒm0Fp@#Fy]pe#$1\qMiXFO'pw#) rO:p}hf 1Pqר4_|;tr6=:u&99%r\Hb>d :RWs۽q clt<?/AӦ)/p31R:t$c?UmqN?Ge`NE+v:=} 3Grzrz֐u Jb 8 m-x(89P9iI$O8䑀^8'=i9@ : MsI}{ GM;8sʑ@+MIgۃ<N/#'H?J <OJiH\t9=8Nޝh\!?<IJ@pF8 9돥4K~`~Cza[pN$OPiI㏗%O'8-sK9{ɠ#!Fs뚇yRv`hpl`݈9rr;sxrXnP1>)8ǿ= ޹p~onKlw=HX+ zހq ,xbFi=9O<[>=3Iq90O%~=GB0OO9=Zaz~~"8X0>\{!rA8P0fONy)Ir C+S[c$A>1PG9d\;S% #o׿9$g֛2N쓎@AL:ultԃWgIW8ǧARxcu;'!A_0Бc3oÚvs@g99$׿@~b}@:^>;'nA?)I 89=xfS9$aE,2=x8hqxϧ'} tz:LN+Pr6O;H\P& :א9۠/sF=?Z(F2>pO~—s.02~׃j8Pz,820=x r@#98׵5ˎrXr8^)3A#9!GV9`Oԛzq3 neAQ܁<ywE82M;t'c=Dwrr01;p>y'Ò02pM=I\y|zPsל!G=?:hvg c81Ҙ SNx>8 1# rw)tHB2@QV3#֓9<Hny@ xKQ7txt*q7'3l󎿅<œcx#=8joOGoSjFOp1p3)NFzs?/ǎ)^#>ւ<g=#ڣr7 p3q)2s۞;~:Swv{=:d0'ڛ<:zg&_AlT:{OG9pҼI8HlA㎧ӓM݌NP(euê;g]489N*z0+F~Sq!#p0r8=zRN 3pF1뎵&UG@HmPI?4 1n:pqKe}_z>b~R8*NNz6rHӓҙ|,q#c$zI;)SON*L@Ї w=7瞣z; hU"zph<.x`{k_i0. Lu}A` '#'M!ķ˻o{2Rr2G98 <69l-ҕy*:|@zts2{GA㟭2FzL@;Yrpqӧ#oژ<n?xz~UQ7`IK"l7CyG Ϧ{ cNAzU8䏛 Ќ3?RغcjI$d j`0aqqB')C?VT:緮l%q`:V?8N1C#?3dTPb=@ޟp:䜓du߈w<9?¥ ۓO\g> r8ӥ;9sԃT!s׶9w(9G#ڄo4Зꚩä$,Ă0x=5ץ];Yyq_g-5gcU7Ek$uy)%+x}OYـWs:o-x goUghEIJ v2p&*T.$jlT2ĕ.ݎF\#KZVЂ,4p*!A2M%[~Ոg+ V0M^>;pNrzc[o\f3Gw7ʼn=1ׯ^4"UF9%nt NPg ق3 {sN*NA9t X&e `#'(% AI9w'ҏ} K(ar b~<9ʮqnjT]&ɍ# x9vxVCQF}*_s>T^Yd;rfWqx8cRB8 ݷ-SRK,W9_f9kr;8e_YHā#9S}O!`F0ːrBzw.8Tc/B\qU$%M_a^̳;Iè8T|߇LWqxł,0v\ Ӈף̶u=L(΍H7GN t|K̓yvyGSWEIm>{Ӻ=fJf%Ic1'!@.* zNm06\Hd:CpFR}+%sgxd5ޛ=\ kUV{eq_);qsї/OZwaO<`|{ϩ5@<`y۸rG(x'p;{qIϱ7pHs܊` ݎ́'3/˟Nsӵ? qސ`3:0pA<@=z<@M cq#۷|Rl`|&)Qc#t׀3S:) r}(6px9w{{J!;p0[ d9֜q\Gus8wp u8큏΀q)?)<Gz_X0s>asJ  G !zAye#ܚA܌q$2?Ò=y|P22 9lhA Ams4i#1ܞw)G<8#Ϡ9/^)=z~&1Өw >ԅcv=;TnF8ܧ>w}(y) <{#mzG?$}_ʚH #OzCF 'H ǿ=FO4z+p1O~E㟘}JvwsӶ:1|R5t~\c'q==irs/ ߏJ:Cn'}(|g<`q1sچH :~>@wc_~=?Qt=Op=iy! |ϵ  G6r@ӈ 0:r7s;ySTlqcrzGuNJI_lvsߞ T7 qSLqרz큐98idFxn=x4O~_N orRI1 $qM01GC8u> ԥS00Op:}s.@<`瞣G_z A~r Мu۽'VR2p6TqnOC잣#[woˎ(ci#;v$=*C'ӞGxHGp\uSÒ;8z?"COCԧ\r^>sv 䎹Ш~9)I-w'nM8*8#-یqǶqF9>n? {@101==;I ۜagE\1q:p~n޼Ґ 9_89CU'a t#ۨ!c<2N?;^l 1`zP!\gߎiŞ$d1{})X;q8߅0{OSR?:u89=.h9r>`c@' ohq:͑s9 _zisOLp[NǷAG8^H'( cpdcN#t'8n:1Nvz0ΌqcxJv8n~`ߧJ3ↅqRGns9#=rϯM w@Gc~>_oA03q'?Px0yzcipzGZ {@<^Tzp$sB##=0}קzgP:<׿|q8py=0{z$n# b#䞄z4mGNrAt+=~^98$t߃~N$'p zv`)#8ېq#>G^}1tHBy<Gs0 {Ex8<}93~n ݂F~cxGZsF|c#׹N}ߘuC@ %8${ώ)H#S}l= CAqqێw88o(zcϹ~øݸt“N9G9ӯVl19t#ޙr2uz])4U+Ԟ9ݏ\#0s ֡7nqߞG=3)=5y?;08BO_]+Xwh3\~>``d{sIis{Q` B99FAq$&?G3ҝp:G?O3#ZVއL{u'ǩ#'<!zR 0}sڄ Vw0N\`x1ccL]~b|LQ 過=&x=Nʐ>J_#nCҝ}Ǧ8L3;Ͻ)^BǞx֏tE O>3x=; c9?_)gqJ<1'`FG>~n8׃緵ZD)ǧ=鎿.דi}H{.逧$yʌⓧP:on 8qܜd篿 K zhȱy׽7yR/oN=>ґIצ20sEu0: {19Ls@1ޞ;6~y@<>=LN:7q(>QsܨHژ<ӽq׷8ߚ?_QiyLcT'}:?Jv@8'x4;$zq=(= z~4A ?=AyL ln84w$ i>) F=I-D{z z8'=I7'9<߯`9ӯu䎭xzRd~ϮTp8Lc'_C9 :%pi>۞<=^ 'G$G J cx2HT\rs3z`#$c c{GlKԟU\tS6RJgJi rq ?xsR8^=h\ׅ8Ҁy$~l`~Q8FA\0NArilI'y>$y_F/\gS Tc<ZhSo:\`rA~Q923< 0OSH=bwt`NB$ցVGa} ࠐ^8}}9 sSXrrרI\rx8aI) ،g$qZfPܜ4@냞'TcI@Oo?09)1ݒ <_01֋q\D#Wǥ.ܐ7ruEqAKzOS:dG9~!ÌcLS1qCƋw gHI>c5' } /=9$S眃n{{{pI9.;9t\zd~> Wy):qߞ)\t*\gTq1=)1q0A}Kv [ToS$`>Q9xn9zbb0sןE(C~{<( ?4c$L9tds{R_O4iϨ#uR.QFOPr?YlFyFx9'6:c8nB(g?$}9zZ??s>SQߊ`)sPgw3Fn;Ъ:6G99q8/9 8d`Iq@ g$7W^c߅3NG< J;O,qԸ'; BbA?֓#Ӝp0\#$7,pp884~8:zy$~}3ǡ@ÒF;89^pқpwv9JRGH>:y>إ$v`>? i>ޙ8㞼;G\A8튐`y6 hRIeU#=Oϥ68\ؓQvO) q9su|8xv%_nNxu#h>Zgp;w~HЄ'67uqMyp ,arq81c$n#)=Pppré>SM8zt`݀횑p@9>ԛr>\cr##NrNF>8^N>vʉIoc=)C9'dS- y Hq}*X2qJX06'$TiHDX:HÌ}HTQҚ :b8#U;c1vϠ?;n z d`ǟc g 1zu`Z}sq1M ˟q)sgp$S{O- :Ϯyj·ٶNG,횳&Lq};( c#rzB2{ny )z6KDFтzyb[:@Hi1ZF=cnXrsxӵ `d䎞 fpXA$s"GA?Τ$t}~b:NqrOo|4Nzv+6®'<Z[/T|Cܿ6ԙKHA$)AnZ|`1c־ eN7菂ZrP+fHՏ yko0fiۇcM^WvӇ,?90a,P͎[ #AS'wߎb/~y <+.jO T@;'=Z-m dI v@@%\ n>:xPۈu#O]qp8hqʹ9IsJʠd s`K8<Ӟx>Ty(V :`q:}sI?3(F:G΋ 1a#bw.xQf5(vI2N{'5 rxϘC=jaž9,@'#!kd ̓*2F[ U°I  FwgH@,,(2dg߭& O\ ?Ur(ۄ98} e8o}a"0ROTp #|8@`>a!{uZT,`8Q(qq.J)e'|hݒ A9Q0.Bj01U'<ry&FۏFz x+Hn>[۵!q`܎ZLs"KÄTHLp}WY2qDp^S>uLKGcKPq8k(4ue(T5S/v쥺Oq]_#| uiM\-OiMz! d=S5t =GR֝2Tgn7HЛ@>ypE?ƚp2313EP8m>dW; 9v# ?BHBJa鐿{'8C ;x=)1!<7N1S}F9F@3 O 'FAs8ϿnƓ l@>>&Ol|YO#8G# Cu8<{M\`B6d#sO~z@<$n :($o߮Y}=0xszק"ϧB8.'oA@ ӏR0{n+ךx;|2v u>GSi{㷿Jx݁A֛~^|dsBusӡ4mTnҀzvd=:н8ObN1;pČ97sK9sz`ry㜓G_~x#:( ךOAu2?^)xG9$v4gu dqMsc='A'/`8>ܞ z|$d篭0pq@0y=FNI#':mLhg'#S|w’9#=_ց?@OqcޝH;nzSD[9===Rs#p30;U0N=Aq׊q2zc*!DZqz~89{>nO~G'S߸$m厴$h\`AS q'㞝)4aԩg'I<6s89S qѺl9w8cۏ|`LB1T@Rá'X./^81\ZQ{w9q7L<8I wSM cg鑀`{OH3ܐxT4`( ;7$_?8GR`~P+QԓObs;v3}2}*mXWN1#/S$tLmö@'/$8'PA% wqqe 1n=?3aԖ)[ALnq<{dҖœCr#q`@83N)y^ 8ƦNGa#nM+<#&~{v+\~_犛CӞq>g::wøg}@zpp tӠg<;Oa㎙=JAqqyGwa?z}Grs߶8 scK{ U񌑏|~S:qӽ @Qqx#3{~4_C~?Zw>3☘c;z*AzgzբI1#H0FNvz4ǂG\gݏynAr8:'(zc( s91pIr@Fys):g0^)Wo;`xTrx-n{q)?N{qFF8Ϩ'4u':`Iv8948<{)szgN?A=F;J=_wQu'tSrF4:gɠqy?RW 2={ Q鸓o犤'u>z9ק8b;qGr ϡ' 8s8LCp[pN Ӹ9!>9OSѓpp0GSߡSy2IϮA' :z02qLwTKdtr<`9!?89 `gH3RGS=zU~`Kp#?˚nq`߂1Ƕ}%n|ÑY׽8\:OOa8')'H3ӎrq='~E#ק=NF;~4z}Rsӿ0 s =h$~8PU |ˁ܏lu>:c9 X63_Z`IT'#ZNa0@%H#4pXv 7'zюs!:䏧\gw>f ݞwu?iv@Nh#deWޔ@@ 73`9?C% zqA=Guc`Cӊ6 O1(P08P3܌cu>@;= c#pg{Il!vHxfHW'9o;q؞ Ϯ9L!rv; CsU0$Ns0:&)ÁFd҂0xlG?J>CP1GonTy%t?yB ׁ==i0r233d=};>򌜌zr0:ٻy9<ϨǵP.3*e~A,pI~9(@pprN=悃ܑ59pliza=Ѕqq9S={Jl)v@0qv۞3Z?{q'=8Ё>^GP9Nf)-y8 :]B8#'ޛ9Wۯ~{sC?qI*A?{tS8^3On;F;:Ǒ'#=8l<=SIя=\9?O g ~ upAQo'#׌$ 31Ϋ`:Fv 듃 w'88n-?uW0@'x dQa/:㞴_| ʞ?)  \q( ;ӵp8Âfϥ8u9##$ X\9< 灎;zg֝=rwc9#ӸRP9:˟^zP!vnJPA}%OOMi^9 3ӯ~5s>NrpOCϷ]Fg#8N<ӎhaFǽ!c2 w;h<cwӎz|3$5 -7|wǷLc[ Q`{ $cyfa:s4sѸcWlh6_4 <63@8N<$90:sc.~mj@8wN2?:]D;h#|#׵& FA`Q֘ #N 027`|]}d$m`~CjRmؑmyg# t:zӏvbyP;cL@2F@zqn6< <CwgqLA I 8561 1qO7 dԜ&? p ڢ>dgt [tJA889j$sOaLzb0S9 sjC׌ 1\`s}h2 sTy:@S<~;Fzr6zўwIyoƘ7;s'lb v 3 4xdžÎs8 t ۏT!~^rp:à$bO~=(@?F'Լw#7|O8N8ё9 ~nr9$}zP t#=FE!gマ;;#EQuI=cG<A='ӓLt^w@)g8Iw 4F6XHc4BI;@;=hqV;c<>Hrx#zP~\q|:P;p899Ϯ{j.H8<B? Rq9~S@qgp 8@q֙ ;}zPH<8:qҎ9cIN*3בHeN翡8{T,pCrA<r6\z`/$9S0W#z Qu2 A J`s?1:d8 Q7<MGpQF}OJG=M6O>J d0qrs\zcsȤLʌ9'8a01pUO#F>A89$'8?!#AG8\z~5CI -ӚiHIO^)u|og2 al{2`GzNI A~#̣@Q9r~>i,#'ؓe$(8!Wv9<`zdQ;g8~= =ݺցn0qלspqu@9}9`@nI'E#;XdnbN{?#g`rxE"& c 8v'ן @F8Q~Z`esp?@gOaڜ[T%<:޴ѹp=䑎qMn2:Nv#'c9`cw_qی|ӜO'}hC)9C>nx۞)r׹1a$J͞zd#q@ p#GS^8=qo\SV(z)S 85zh4s 8'<&Js3[pv?/#8HҼa"7)`yPnPPF21RRm0A g?75] `rwH֥*\dv8a`Gg9'=0~l1qړ!&z #A<: |r~UOxE^i#Ԍ{C񓃜w#0ƛ[d19inDq8=|giNI9POb<\\pG dA\xsOU>eƚI';FF; >j3^sz7yPp8=r$ӑSHe{9#>Z:m9p@7N:\SO b^{F8=)LӎN2sS9U-ܲ<`pib>/df@zeqy~=HϯBFQ'*]ç?7RG)HH^1UT7}xMp~NK9s銨Flyk鎟 dzpN5iv%zs :qE;Y\`9\cH}ֺph99ܪ+sdumrG9=uHRMBv5ԦCvĤS4GOR+B7/rz3UF`l[?7 [V_"DF:6`?9AÒ 0@~aOY HRd]?'8.)&Fx63/m<[?|" nY;TnZg%vcPF N9?m Ha2n !20+ݜuUd`v:4?ыe;qRC,gd\q9R'#~V&Cx;WcXԝ=![ pǨgaUXx݅' g50 19>T !U'O2 sGFC%F'2-yPpB`ڔ{ V==? :|8<) yxWG<7\gSLqun>ORdeȤ.1~V\/z5Mp@A t?8v0 y%܎qU$H*>Yw6 M֜c€F|Љ@㏘5:+C0;WаF0n0O^'ӌH` C), ۭjIw;+ZtcFa?r׺]_s>=It9DpʹϦ:WZ%sclt}f&`G{c'3sdr~8"pTdvҜOBxq`#44O])R0fxHR>ns펝 ]:N.G3y=8z/q }q l8Hc sizd'9 '(;IqW׃g)X q~J&H\z:QA<  篵 y%I;9xo2:q(F}A$G?;'WoAyA?w d Q@"S͆=4 0NT^.u^9 QD}8z}=w9@vH88?Uj@ egw.@Yqň+~]!psp =A@=xhA15,p6zw 2A'* p}=)7vFO8<ҐнAnWA?/^GNyޣ>\b1H? n c,x wm٤;T>R?ׂpN Ax$gc? gqNï4ϑ=7c:`c hi϶:Agq'``㧾v׮9'i1܌i;@d9{g~9 pIq[so"$cʁ yaߛ<}Қr$gw{8݀[!#'3;@N=rL;r2F7<*F$f8G8=O4܍3z.Ɔg3~?SoU'({+7n=A>:  ~PO88?_Z\u=A~$xsHFPA;Sq㝽9'?ZXry8d9=1.zs#qq@ @Ǡ۸psd\/r\'0'A~)@>OEv03p3~c2峃#}\Ms#=9rX+?Rh;hrOwv=q8?nHp,NH۵;8|,=ֆWdxcٱA rua<{upA$A֤gv@'\P&!IԀzs\Lu1@?׎)w' ߥtv~Ǡ`:s6G\РA;I#ӿ;rHp҂o8^828ON1LiLx׽ @1GRwgwkt_aGqI<`[?)@}}FG<w dXw yHz_@v'89HwG rSv0ݓq\@u!#!ySv_{?ʜ9:fq0#ӭ4ӏKG}{OGק?AHwgs=h#9Gq1)t=X9;g9%~jAt' s8>A'p|@8N3ǿ>ւӜw;cߞJqΔoNp{ ON~Syx=:O<яǶ:vLw=֔ Ǣ??Jn O#=}8q~3;sO>@ <Ƿ=G9>LO`{>T_ wZx'G1:~s̓p~_ZUw{s_C&q=ߗjQ`vM2RwcOSV8{s_a1z`Ӏy+Xr1F=rr3:dzdX=T1$' Aq(GS~th*Ԁg~7g87t{?J:;y:qdr$ 7_! ~X\ g3@cd#篱wm =8=."r;94ьd֩- <`[$~tp@<_A&Q ~]Џ"à <c:1SN^oҤg\uϭ8{N}(ʱAOs^P12;9#'v1?]sý8ѱ g9篽2X= w\w'##_ <#q?\p'w4OQV9O#7\qKNG@}:Ҁq =9!#r1N]#w==}@<0 #d< O4PH<秮N;!Ìշޜ7<1=GzhCLX!=qF3H? 1z)ѿo8}x Ni?/m?w܁##=1:7~X6z~zR3n=zg8ܓsp=#|@$_)d Fw6`g=aGAXHsGP18I#HN@$ z֋ ;FqxGX}}(h~G uc֚NS>`>V#>==2sQݒUO;Ip)Ҙy\[8{`yCGjvh>u: NsVtS)pVr3> h$8v0O)>q8<9#={ڤ*Wax#מN: sמX.Gs\2x??i.dϿ 9ېyOƤ{{~s3CxwvN8'קHy9;{x89{p3 sHC@<'.AxH>Qy rOLgu w8=y~aG#8xZkCdOPñ9o.ry 8H6p@=ZqPĞ`st@v#Hz~j{8;>4>A9=s==S?v `2;{ ##AG79n^9NGZ\ }ݒ~,N 8$0{Zwz|pxz)y q߮zsK?|PH8z=:ׯSM %1898`zs#9l`&HNGQ~x␃<9w:P/Rg6rA=GBu瑌}yJ[tc\;M8䜨됣;(IW$p?,` s$uZBA t: +T~;tR_ր9$|<:֎> 8@=r27g1֛c-`pN g3қ= zҀ px{1:j@@98r3ʀ#9yBOR{mqNH$)^=2hXcK#4/A|9!y~^u'4ws|/횒ONt<<=E4y鹈c:?NgG9GJ`~=w6s~` #0}H`9NswtX'rOLs=!ޞxrHcrzA*H3?Rwq>>A ӽ`9ќgw?֓3r d8ws`i 1@1 Z_M`n!CP$@`N3ѹ]zh8YXNsz>^ n7u!A恇$s#˓t7Px<*1'#t~y>@-NO}1mWQo͐-<tt} otPF9x=(!HHt#҄2=*Fr}@ ddsu)`8d:æ^Sv *NyZ`'ݓsž\:{SèǢ,rG> 펤gzR&2A O^ʎv*zdzgsZq8ۮ <M7=$Vt9/DeD] qW5]1]"nsOdeDdfn nT@ xRGlS{TiDۤ}ĒÅn~b H*we!ʍexWBv06g2 WsA?oZ 4~fY*<*g:K3d`<w pNpO90A@'9 N3>䃌vsX^PX$s, mSNrHx[4 sz@G'\Hzgt!1bA<ԞqM u q9!ۑ =_ʄʜP2^OsOP7z{?3ܖy#'>HX:0Gh@(~-H9Sqnr(`Cʣ'?.F?)$ P0|ǶP!>scy̞sy4ÞקOz9s7yR@9s@nTGI ~r1߭orTQI븆td?4?.c''9?! `8~@ 9g旐Fx#i9^qҀ؜r?ZF9 rqNx;zRxnG;GlxF9s9<@\ +𓌩>8=I Rqʅ_Lv${PA@ }(ǡ `v?&DžAHd/Jy2rz!dAzN4xaq4[p91bN23I-qn=9'y4W.1\܆x aONg $ 'Hmn8z1@)FzA4[@s NGrp~cp~Qa dJp`w/,ьg%OƋge1ҚrO`<R3E<{HN~N 9U&ӟg'=ޢ v w=Ν=x<GSqӯZyL}pA^q6Lc1^*=xw'8C{$9Ra{c';qL7S1y884ch;vIq6QIP'<1($c"\hONq <)qߎ怸g8$ ',)7?_y>Ԍ289 ^i2! R9HO^hǽ猁zf0@h#T?4یFTd0 q09<0랽y)} `ߎI+@&4 AR'g8LS##8=t*{rzw-IWJr3׃9P10x9cNG=x>}jRƎsq<9^JM 2>wpFzڕ;ǿ4?xLN=NqzB>x3!~@#}1=?>PG$8i $sO?xxNvԏ\sߞshs`g8=KOǟҀ^?_Ҍ8.ӯ=ӟ^={z*7ul.Iw#{O#;R':Qy+ڜ;G$dt֘ 1s(OQЎ4dSԒF[8p>=y4^9T.Ss88;֐q>(S~RsgPu=Np -zwёp:s9B9?\x=F)1 }hlO|qE3zsӏZ]ߏp1 bh]~Tst8G+ nǽw=8çn㜷Z^PxOjtߝ!sqtj\ddzgӯ8%S9b2G?U\N0zxϦ;Ro8b{GzGg8:{~\(vvhD 810Qcܕҙ,xq>Űy#o!qװ)'qQ kps8'<K8FrN0{uCl(8ӯq@'og `O:ޙ /!fg=#ӜRܞ/;=ց~97 돮M!scopO΀ H$|$=1u$QGa?΁RTw8J\ 2;?6.F23x3ڂ2ޝs3u^@?0N38푀ˁ$~=ҎFx@(3qaFM&3`9"ylۀ{cvFGLs@ sԎ#;y {g߱ݎ}H=qKu }ƕwt0x0< ֤m>3QڀG vO';9nA}}Mq'n'>g[8_S@ P?7=F6}FFH"$=bz>SzTc81߯s@7zs3M {Q@&0q g22G?zR7e2*r0{Ҁo>ߍ16=Cޝ=DZׂ=i q9N2qڜ1b{0$scq8j@9' ,9Pq<Q('oG 8??ŏq( $ _J3F2cnh*?Zo מFIנ#o^oIOɠ:??Δsn:w`1 x%4{`xjSzO~1ւAg'מ:@y vl~cNC ݞ';=vX8Œ1#Va{}yQ;n 8j߂OA?tFקOj]nI8@#ۯn8'2Aސd l8zz晁ҿ99Lhpr@<>8 asv25ӎۗ' Sy_|n?)<n409nI:dt c\^{HF:3c*/$vAjyP!8~ WG"NpAP{39$)9r0v֡.T '+=Ġ0͆#ǽ/H9` IwSCc=U͠7,B=ݱVwTy=׾Zr?#XQ_=$G'<Z"ۈ[o I=yrp=yN|J~<|v9w|( qEd.rz9#?ql/=;&;!yCv#L <#>sBl sF6G˜s:` =sߵ00@qL)=rTcT8)v$ю9$=4t@> ӧ8]5\bx?H#yǵ7ؑHnH#t8MCcO;ppzcsu4ր.Ns [hNOHs:,"#$ áI'icќ2G~ǧoP}juXuHfZha"s4-Nw^9]=Ցddsj]ǁ铵r{uUoB=y8K&6#i\y qgt~5~>y֋Ӑ')'#F3ץ|9yOQa3I_Q?uF9YA ݕ,cbnH UWl źlnڷGoB2) g9R\ _%CWQa!(8<VXo|l*έʁxڿ8rk?9^[d der z=1`x&pn19?XM|r|;OLd-u;w1$pp=9OS2;X1Cm ?Bs Hݴ^b1=Et`BJ[jfqNs֚0== 020p{՜T2d7ٞ7zl&@A8R09O`:LSiWs&~'~9R檴}fh#8FNT*o.#+)ۘݹ)M<#>vvW8xt97B[h7Tk+{uh#%*#+rzgӥ!UQxy<+f29F{?C;lgjlv? $Ө#=:H:`n=8''zjBss yҐs$sׂM9 3:\zwP s1׀Ooj9}1x$9A^2>ao'$-ӟ xc2rG9烏F>ޔp0I<ݤI )I:GwcPtR{1 y(SGBxyK 'gXjrsrx`2sѱh)ǾIG9Ž3Ď:wRq^GRC~mI$zsoza8RS=Z28rwy*_،GC|}p{>UNܜs9=RNa;tNR''w=iupyϾ>=L;'nq#0v[O891ڎI=^X0G=Awܠcǧo G\Pu Ǿ1O1#=;קB SO\]..u)ñ .y޽q9Mۜ>:'קqB:#{?_ZP9,0X @J=@y2Ga~UsG0=|z:2}1ۍ-{Rm@T9<Es01@ s2/?^C0y$(0ry DZNۉ szHc8qdcLvxNN@giǧ#i ؏'֚s##gNwd ad۸R>OJC?q8#7\;zIFNF}P2@_n'0փGp|Cק4L+O<`sJ6$c.A qǷ&ޙ# #=zwb}?d7Cӎ2+8#\b/A"{R)C''#S@ ?LpG~{wOBy\t R0 0=QخCpy I8U{?J^.;rH'1@ #XulN8ǧ r:1}@;P9|}OZn̎r~nă9OT6ܯ`3Nxێ1LgS:#<*m sFF}O Aקniv ԯ`:cdJQװy{})˕ qƎіܞ=׵N= 81% QH=}qAvOý0$H={NݞpGAL=4X}%}@^u8%PyHڀ qo}~9Kg'>=#; {s=F{~MGzcJr=!WT<1?#⟁$*O#x8?1q9_ '@@#8'vM(,TA#{9~?Gl `1B'w`zԆ<*@rGq8ƀ';g<)װH'ۿ4Ğ8Jg\q2yq>nru# =sN+G8pNP!vaGBys3P9<Ìn=88`Jlrx 1Xޟ)C`bsre{ 89;v1AzTd`s~sP=Iw'##oz3ǦO_J]J#1}jL;瞀0?ic\d'ӯNcm^cHco@BrFA/\ޓqIz 23| n?!9"y s~*YIۖOst$Zo~Y@g~ZayŌ$zprnA]G>P^;Ɔ}XZo\=x"=8\=EHNN44^`8'>>PF3LsQ֠:^9q@ cr{:t$=}z t#ښ '?tz_lzz׿zf 8>Q@s` wǵLwdp1^2RhszR+cpa#w'?_zhx$qՇn1֜gzqsUr9SzOcxNsJˎ e hBrO8$ӂ94{s qǽ>3< {sAPֆX{gv@Ho rwx `g)߀:3cg ;RPyH\wct?j_^ ryi^ϑ})1\q#4=M'G=I#~''?.9 ӎN(pC'=33QloiU`rOI d <PP NFG֚HNp#ECy'FӚw `'89p x9ǩB''^c8~l3zH>=(#?.p=sM\:?ڞ@NX1׮F1LӒpE.sP{r8''cꣷ3Bzp:6OYI3[vHt y->0x;1zpx9Fstt'g?(|ߊEN{p>HX1=) A #=(%zd`srG_Jwۗ ?9$tzr7$8 C</~$(t鎴 }h.ݽ';<2@1CHϣqĚ_[z> ;ߛ`r;{P!X\{d7l)ݓn2ޟ^=pyPz\qp1L;zcw`n'M_neF^,0?ƀ8V.8:ץ8us#p۞3zS\v$Tx۷a1'J^0: 1:ӇwPp@?!퐸&Q?drFy$y0ےr@dׯ&xGM?=Joȧ8;Nz {tb1=3cP'/ CKpx7 q&x } )K(Q #vz`u2Ihr3A$@8f'=v2;%9 8< ~5Hs{n`^ $9 =@m=;gj@Q܃G~bQϿZI :A;v~΃gj 9#=x&m g'1c 0rpL*OEp{^:=8$+@<㞹qsO;mz(a-\L2?F0 {go_ W׃ޜHnq{=yb P=' $y#JL}$yZ# 892sCT.x U@b:ߥC(a.?{G֚3aF ϧLF;.Fpsgڜ8#wcӷE/#ׁpqI꣧OZByu#g?Ф"2Ud;jw?x8bj@W m $4yBI B@uO皑?JH(򑃸yj\GsO_=i< pz}iݰ`0IRP<Jh,G{#Uc6Cvf`~B/Ӛqï [<\ae9y#qx(yq3 G};6#brN>fbyRo~o܍1տϽL;##>zUD 92; =3ӓTe8v$Uu9OWrAO[yqVe^H Gcֆ|q3s[!wsARrŗIc~丒A9C3x*p{V2q'jAq[@s#D OL{s/ORzq׎?}3p;SN{O'$ӥ zd:)8N =};SB!:9>^c{ 8Rs?NqN{9{H} ]B޽1U1r3Ќdgqz;qMm.Xccԃҟ O߯BԒž쫻YN}\b ӍXl,({d1y @H35EOA%vnQ!lz9!*O** GkrU 2gh!@<~~I2:f3؎9x{kn`GB@B) F|NHIJXBc3JWoVSI;\ ?WBbt,fp~jE"=s9JOBQgk"g;تs<09䍹R0yl ʝKzmQz89/?xP|-A@ 6知D~bKpFG<qOJ`"*s(9L m܉89+h3n#iU>7 3IpHsIo"fۃcr@ǹqNÎq>_I5ǂs 6y!/@dr J#fHbAoip`H; If @9}+`1T=. C9VF(۹X8*qSn܎mvM!Wn8 cU9ݒxS{jEIm窨忇<d4C)ڟsrwp%Ou?C$TH~9Z vYX  }}=KCß31yF$۞Ojf#dc=LD黅F1es zwׯ')$2cBrA  a랾kxlaWc*7S.G9%ʃmA՘Ajz/C%dU00 }Q±f ם{t>u+Wp#;OP#59prGH* p䜂HaR <@@I>ݳG3϶{sO^LF's}?hry=ip9pG83Jz㏛qA#ք0y'7ۥ4s@uysw$Ϩ☬}o%vgn^@?8;׾Z='ۮzrOq#sK'n3{shA$'Ĝd'F tpSߎgzz)f?Qғgccwr9$v=xts=~  q$|3]ݳ3hO x=69i񝼌dsAC?7'<8ǟv=`F@m{u{҆ .Kgi~ )%Qzޔw8<qs߂{Pr 6u<<98 pԏ^3ר3~Q#ϭ?n9>p:dc>pMtx'] iOw$Gl㿯J{ w''`J[?0yǯӵ&IzGQ&ϘIHwr0K߷9i łT`9"y;sz`ԖUvь~ENp8;4xR޸I{ $dqx z<h-^M C:8 &[=}N#=0NsځT<~s8;c49y<!<x#ʜ~\OItݞqӏ)=q*OBF@H*r7g@=E7iu10r8?/@I=<Ʒᅋ +A\y=+ OsKe;Twu1XJuƔe:r>ץcʾNz{ 'd^T `1g=yF:R݋2 LF-Ilߠ5rA {])dp9GR)9\峜/lgCב@$ g0?/ŽrrH=FI<&8FN?܃q^ޝ98z჌u+/짜;$9(qLсt-xu'I6qppsc& HOSIwҎ$6>3nMB 8 ;z񞴘9ʒscn;rP@oz}9SrǞ80r8 :`O`r{)|9P%w8W=vy>8'@:== FG$#/sQL<r91qwHw$0r8F{{s/=y\{${KQӎzOLN1}=<Ϲv1` ^9{w =cC!KG'LQ8P'ziP+sО9㸦*@ʑ>#'S֡G|g<8~,bd `'u2# RC0z{ZN3I9hCӣ`Á0}sQ9 Iy$tݳR GNAgxߎz2;nBmO8=9ϮOn`FޝrxIM :GLH9)~l@sשeA>x9&v)zq"w.J=l϶=^88㎿jL zz`=SF34wu>{@?Nz~?{s=p88z?1ϧ>v㿯@>8C(}{gۚO.Zixj`IӜ(ܞquA9㷿֓?Qj.19#==i1IL``sϷ֦ G`q=)܆.tsqj#;BAީ2ZӧLs '9^;uVC y;~\g;Á{4nsp?1l^)zuI=o9=ng4a9vP>)xzハ\rsnM}q=lrGӠ@l40_CԼOq9 :#F2 e<R$9n99錌#y4'6={C##;$pN=9ga@ Nn`p|RX*8$n# ˸'@@OZ4;n^׷ZgLs=F פ1O`:{Siu)L܎{`R3=$z{~r@<84Aݳc#?'8 Aobx=(v8GIgs~5:ydv9 ^0; ~yt1])0:8#99#= 'L@81Ni3qc{INt'Qsn9 Q^4:3ϡNhS9ӊ:g@?Lp:s@Xw:$1ڜ~y={bXR܌ORmid`{'`}}a=:GҰ|.F{u#g=Oz?ӻW'>=ێ㚟dco^5@0ޜSsԮ2:9c`P:`l1NןBns$v_ñdqL dsO8=) 9\^%\A͎vz}3R</ɦW<0A?4g\pr=O\J`'c{l%< i>2139NG6I+ ~)zG%3 c$`N朣?9Gqg ? n7dq<瞙 -ɤd܏CW_z,UƑONOˌd`g@rGm|qNJ\O##c9)-zw9zRlQ}GOJCBc ~#=眒G`rA^68#~I$dJnO PÆ9"w8=@)< ;W#=_֚  U7r 8ǡSAG͸tإݱ8uOj8$`?Jh=Hi0@]`R1cӶ灍7 :A8 sߟ})><~tЙ  9Ooփ{g3ա68)a8ղڝsrqp[i989֘qá瑏b?< w'tS[Q@ xrXw:Jp98#OQﻃ9 u擩().=}C:c'Nힹ7~}A'~G֎N=00[\sv{ @0{:spBNxOhzdu3^֚s?)=gCuϸ;'`` <) vu;qH89~U\pHL@ I?iFC9R @:`Tyn`zsRHcv8'O'3`q=b;H2{ G J#=PI_cJ`4T=:v<{ӱӜ=ǥ&Qc>Č8q|8:I?!Q$S.prB9=ǽ&l9 h$㟛tSnO_mf_s |9P$9ucC[\`g0U8Å#'a7dqzp8oL 8;OAcg)T0ln11U6!krB8힂w(yª|Dg@U XA&W9%rsboq`\ss(&If9>zT܁DN[n ;#zԂG, rcP4q%Wv:'WcHE`s$sӷ 3ך%IVz =Á8O^FO''i ǧN9:`$pO 79H=`G˓%=OJ@2@`28`J|"I ˃h7ۺrzcg  NOL} n]cTI?xd+86z zN=(09#?1eLd׭'sp#:c=}@z}~cj_^T ^sʎbGc'#қ}I${sʃ 4HRH8'=f@Psl3'*a@\9:u<93T`Kr 9*c=F;P~Pz;OL=)[8'99>E9r RK r8;by~nN~u+dINi:ןA瞼scي=3B|qцp09 1~ ݽ38!9;zԱ# ==ipqs}=9)pRN?Ͽ1pB8ۑSb`u,rIPGҗ>pr. /Gq#zA<t#=T n;92z~t$+pX8qL9NO^# 9㎣i8 4>;0\qp0=Gc0n~Qw?u`/'9zpzt\`3=O=nrsNqn~(܌c@99{R㓴@܃19<!ӳ?LBdzrpG㰧܌N;q@}mp?)q/LgޑW^;crgǵ.#݂@<?iG'6zrz{GRzz;u'H;HB:`zL$zaKG@|{49Lq41;A__^ 'nO'y>GF lp;zPSӌߒFOƎ3ts 1=:o':=4 s ~>a㎇S<j:C9>`COSR;rz~x(:ssP28-_LPƊ\ ˎʲob 9aq$RW0,Ț9n׫-Xq`)\dO98{$=bM^3NeV1e@0l#uSKTkdp}tSg̭<"➜>otpœwӞT'^+(MZK,[ lg/{n?tzW%utM|1'#ӮqUm/y-?sgJJGNJqjp.÷2޽["J7)P1Okѕ'gcUX.r9_`}A#֜^G#?B9z 3ٺ)n9>Hu@; 3H#8o\w w;qA9C}T*@c֐pG,;dx@)xԌt C9$u׌ 9W#4 }\z0| 2x/1_1w>8PqSӞh و#9 n3A u( $qۦz&:zu=:v_V341n$rG~A|Sc0@_~~g#^,PnCny#۽G`r0^?b=; FjR0 <@tG=38?(3́`=8/zr$`q@n:nhgr^{n8{P!pc$` 3J9#$rGau(/PNG}8$syCAnzwnSgВzݥqt|99*e'8T?x: t@z8Qs $`0'p?t:cpNz~çIrrsOy;8 d)stv灞=??r8=vI =^=zq`~3B?([9^rO Lۧi!7n@alpXp;zp=3(@\2i8cڐ.6qϯ8ucR^zr;PG#o_LQQߠ8}yaq'?OJo’H IPƮR?¸#ӊLcz9#{Rܞ{ u<1ꤜ{ }} 9 ~'{csN1a玽@Zi'8d&RcʪNG0"q\gpAA#&O8X搏ǡO}XicOc)$r8ql`w=z~=j#A܏cۚTXͣU8ܜޘ> 9?K4_s?9ۦAҐO|qR`'>ǩ?@1? x(i^893w'rzA7ג{'Oǡ?98}{s^/Ҙ c߮3Ϯigf|㞼PS48w7aQ]?LHϧ|v:}37w?N} r{?GӏLg8h}sWq&zt=>hxqۑ~xpx']qǶ:rXc>9Jܓ'ONĴ8nrT9 ?QAx'}V g1(8r}IpzsӡHܓ94x$'{' hFrA#&'3G|c9 cR Uvz #8& =sFp1cր <b;gs w<7Nz+GFp1猎q۟N4:2<tg[?/_ϨpH<}Fs=1 #==pޤvF;X#)= 9<=O?PsIdc?8?}sǞƘr?.sӷ8ƆrFHޠp~ߜB:=¤bt[Џo~O_!gs֓#oR`;LrNz=x'Nq{v?/Lۜ^h9qց}$.܎<v$13zv`zL;:4! {>};N;I>u޼zп |jn~*FG~}4qӁӥ1?_Q]/"Ϩ鞜=i}q?Oh'@Gz;?A\g=Z@/8=&9#0?t=1#>qM߁ǵ$yQ:~L=TaӞ9=@s9nө+=?@n.x_~&nz! <u3N;: یR=hݽ# !1x>=(=y9PH>/A?o^u߶Kl~^?O}I#84g\t4y3_lߧҞ _ass}3y㩧{qALM 1U^1Ԟ~SК|q$O *0).בp7 O|visۃMx=:=M g!siקQNO 69W ?*vvӌpOd3A9'sy~_pqצp;dϥHx9; Eq=)1u>t< A)F9sߞ??t8l;$s@uϨe?O|ps_Æ\HF{uGL*y0r:m pO$v8 H}zׂ6/'>- >ƛX`R8vrI8#<4-g䎼t@O̽034@xN9JvH az0 0O(<\x 882zRW-c1o]o^istw3קJh';r )~F@F{P!AyF9g{wO;=y'SNz]6GAgpAop;S<34 '~֓yrprx q?0#8`ps?(/@{3L:vBJ˯zcoA'"\cq'ztOƛт[?.;g=h^8|ޙBzv^>V=G pNTun ^FOBx={PGPN[ #?CsO9 N~6C#\=q=:v($#>n0Î:{Cm#89 )x7*G=I>ruSS]C{F9Vyp@v9cpBxl`81žaN8$Ӷnl~gPv8d[z`L Ny7cfobN0#xINy}f;ZA? u~pƗP zGSQ׎sN7 c0B89|sIhuN8"'I۞)wFp8''PS|x'#_jgR!vh8#ӊfH$ UN2yоz8&10O gۊy jF})ݝH8M܎98=?/c@8OQSÒO\۟FF}?(q Ar1H q=8zJoLtzg@䂼}I{0p9 w ^y68ns~91f?ӓԝHǦ2@ w8ϡғ8#|4wyn˖xOCJ^p8+ݻrPqR5#HrqRHFH xRr@ 1Ҝ1:8'J[dgn8 ~qLp)q`nC`Wۖ=O'=H#vwғ #˸ⓠp*2Ay>{) wrW3O1GC><T=@Mp'Re ï9fPGB\Rm ܞ2@gci#v}r}}8#8!yc]dgF}s֘>$2qHCHc?sNq98O@ CS?^JPvxbA##'#nrF6݈'<`QN;>6fs^:NM2<D=8`_0= } #u6ބ6{BA8?(_Nڐ@sAէD$*9Qq8J8*rH鎴 Nۓ1Z 'r7Nr8H nru ~]ꖈCsQ #psLCz,U : Z(pA?pQwA9Hs$H *P*A`O,>w#qsS\$v>'=jc8+d01^XSЩH?+h;IXr agOz?#VJPcFz`櫫_q,q pNar)˃ܜNGj]A @z`I9|dSޜn9<ƘY1ۏySگÜ9 HORr=۷֐z#GL oM< ׃ޚBu^t?0?>sCBЂy\fRxry#9'XN{oåL S=y)e%>CwN0($ppwL&m#OpySp:?iՆHq {?cUn6Z Mt + ϽxNƍAS0u^ KGve"bG$;F21,2^W^Jd<bP:.v.z H,oQrrSV;pqƒ7e\a`4OA^wr*,)a@8-s"u[76 ^UMt6(`p3x~JK&:_Fʹ!u95mBG>P$zfJ:ٝfeB#0>n3F8'# p+wK;F$ړ#/$AI=F+6c=3GLvyR9GN#;ÿ@r$er~n{}M;hQ{ w=Gd(OOr:L0:iA{@t80ǡӟj?Ł '*SrN:õ]D >p۱I#G'0I$`}1(22I7c

^l7\uUg;)w0b h;\3֌ } wx)+y8Fr:zs@ qFz|݇@qg*q:q`w>>wǂpN;׽!ld1?ӺgܝON=$0=2I8s΁1ЃsK X38!c`u8H*`?.HjzwJ~F=I Es䏘pqdzZz<41z(nЀNr2rsJC}9wjL: ;q?Zv=@swi ˂}i< tta7F׮h c g<8=hcb#8oz@8#7vQ5 ;g8$㟮?ZvF n98zҒ|#AϠ=i'rgq't0sc->й=x9! tQt"0c=G|+13jE<u-aqQ3b^;漃T32Ɏ 2 y*OBMLEKE8Iu[.X'kjxMH;_ d_[8۶cN_qxQy$l|? -8d&%tvaDg!5щⶳN.̜\ZwR>&C#2^b['fT_ j)sEs$mS5~ !Ul,jNÎ[Cw(u&l26H$޼"ݼϩ1mޕM%M u#WGx!9GrG :z~4#>ߎ0$s9^I=8)t=I^scTv< u7>_ Jc,F=St>@$ze# ryLj @$c^3~qP6<rJ>(`s Gkz@GG<ק\40IHOX?NX֗p z8過?,[Fq }Z=r;z O[ҀGS1`7=Td u]Qт6Ozxʜ`6Jr ky8G_^hpzs|$`,6py/O֘  -qҰO9GAq{Inj` }M0H=1"; <r^1 ;Ta[e.1qڐ :8_)TdFqy= 4|= g8\۽bH'\:9Frx㑆 4Ādsu9X6F8-߽%ݓxc#9'yL0A ?ƣ#8 Hrxqg Cs*\t89=H0:: a l7j01َO>w'{})}q~4FNIL@oQ;/{4$NJ8RtI O\HA28!=cҘT1$*GLPPߏמqMz|{f as88CMD+ጃӦz' s?רLf9۸qzz"vr(:Tثpx7pNyxp0N2&L PyG~:)w9;`tӥ1 v S'88v#]Cp]rrx'8Z`cGxx &Cz8^j>=y2qP0r}sqTCO\랸e  rzg81fqv<{IB CG 1=1Fr89:א?~~=Lbzӥ/_Q߯zCxAMs:fx :R~Sy}Ng霎ǏR^z~ga's9{?'4!ߧB9<“߯}1@3ӡ??ʓOd`#=)qCO(׷S1׷@Ocߊ_ˎtP?!㚝Ϸ^—'v<NO`ssI  .#NN01B玭}=)ݿ?zzcB9N{ױ;S=y}03NX2G$z2A#n1?ש'OG9ҝӦ{qK`ߏBNFOlH C}3ۚ`KǮy' 3OA2zqցw=?K`n oӾG1 {{p{Nϰ#nINh'xV9#$?#ހq9]EҪ$qӏ*Ens`@BdBrdg'ROST+nI#p>SR&X34ɰ)c ڔ6NN$`=@銫y'>Kנ89=9S'qzqr=qϵ:S9?Zh1П@;u͐0; NG=T+ W'z<69uA#v $1}v>鞔c%rN uN s{n2OL H`sx<'1x8d#{yd ǯcN1 ~_F@;v>ǩCӡB|zu$zҍN;8ކ!sFWt9[w=G$S#O_HiRT9}GQ庒p@Frvq`;<rcہJ00A{<}(2pJbǞ:4-gϿ4`g>g9zP9Uǩ:R߷ :3׏J 0@J9=W9=83׀99;m9OF H=}x-ۯ`峟x\;TzA$ZBx#q+灁;>n'=it0?_\O$y✣'nG~]t^h@>y'sS׌۸:psg94 Ns@K#'~K۷SCgQ^<L>Oa@v=8c2#1`._q@ 89Pp@rG8=w<?0$M9ONGL d#=zLI~`}z:v7u\p1뜏K+րB s":9y?AN֓sn<(2) z٥q0Gݒ@=!Ɲ~oAsҐ\oAtG~9>gJ;!_ ;c99V dqnc9HQAৃǎq_j!y Fp>L;o'}O\ NGc]=H;u@) ?8Os0@l`80?yd*3Lqzs89<p18@'?/:7瓜~:njV'?N쓒F~>\<&HA'w cx'O]8S{v <;gC^ Ǯh^Xtv;w'e< rG;H R&r8nC0Fr>GhpXFF1>*19 {{ `HLwNaǶy 2A ?Oʔs|ÁG=]@c \s\=G9??)c#WϧLqڨLq xLçjn{pzd޹!Ty9lsןa$Ԅ`pr3ؚ; c9'z=}@+7 8}sjB;fFz\Z_@~'+SҎBOCwhkr13sJz`N @F08% KrHKN{J@0pzpp | c:qf3@yT8#=(c6r늍@Cml!]}9+N*2<:8?JMpG8^è/1G`;qH{曌q8*pcp8<r;|Y@/ʜXgϭ Dd88NR#i9N>|s^ZLb c3zu9: ݎx ~RAD z#l+p>4 FszA9*8:@cc~~}sO8n. #i coLs?/^:cGqВ(98й9 z>by#fIR*s⤤.:/0u;N3r0y8+spSy[#8npr;sH:%=qy8!G A:w `>l{P1sOL_Ϩ@ x݃=^{S98+'<g!z/L! :0 y~ y#`=G֣+d3G_#w rG@M<1-L}}hN8q*0'_t8{sI~OSy⛂:  t[_#dJ\waԮ?1B#1-Q=vvq>=rxڕxR{ޗ4!0 ] 5I- c'8Jqcm) EXG 88kI1?{I>ZDn:@SOu~kKG;3'|*\m'cWC:vKxrCcOßC'ғ'MC㞙JfAܟlsҭ2F1p$g9xS[8=4L2 x>SOdLzu?(.sӾ0$,O$/֤# 3%$vہ֨C鑎?Uspۓے3=t%V䒼~ҟ8} m\`iSx9<ҋR>?ub~Pd:T8u[봅ld|٭wa*%srW^䠅RI++S<䎜¹K xd#8ɯR}UgcwF_ڸb}~!H7Z6` O!=}[̅ V1zax; jmB^1M k_<+}a+=\aeS_=AŀoeK7́g|n2 !%+"p7̠g@=+m I`CNpWO_Q);2)aCp w<~5ap0Y:@Mh oL0gX "ږu#; ~9ހecNB2an~ulQ7ͤdd9>#ӚiB3ߎi6 n@*H~DE_Od[\.rJ 088n犖5U_]mV\}ܞE/p~`dq=41K'gO~昺qK}d|җh8nGQrX i=>ly{E&8?pxy#>2};s)z߂=xG^ =sNߜҞrGNA-`y@3gc t#pb< i gÑh9< : q:=cڝnKc:Z\89${vx$ss'l*QC7ͻ?֞AF:c:}@/͓nCϽ`8F݀fg,45x2~_Nyߵ<7-4 uw:ئNG9\{47#x{jL6 $qH9Tx+y84뎹c,?׵3NQʞG;=ky$!z%hGOֺ͙/@m#q35}NT%+nC: 溔MaqpcnV[:V~[WIq~5cpYiX,GgH˂ 6r{),~>ԣ9'A0?R>v1OA<&B2㜆מ:U. ;v~ G,2[=8`|*}@\}Nx'8 qԏc;9ЌziM!;z1'xl'vG9ǷN)8*9z~|h?ǫ6r=AG98t9@Np:qopݽ>{Ì=r(L20W^v { tzu+`c\y@9'Nrr9{v8I=0G>}Iݕ<c=8 d r;<)FHQ 1|c}@|tl gXs}y烸zz`zw@wnGw8jG:#$c❂IO :`Ϩ~ʌr1;t }OJ.H'9;OCb?:r 1zz?A~bNN=gnKp8֠_W8## #3~e@r3MWy0 9ϧ$qjn2==={t0wqߑq')x:vs8$p:z#ۦ-^pOzH }@ 'zdhAv1ppsvv'EӾx#'QXqצ hnTpITcpwڣop8'pz}Hg#'h=qv84q09Tx 2H8tV`Ǟ͏#Gzu?JfAO:_Υ:p@4 ` p@OړE\h<$~LnsQbf2by'lz{P`/,z |}IFu݁ݷP}rx;HR1ӟJ`gc'=r~G9KE}OS@LǧךVr?Qrp9zRRc:c3A={m=IKOHgRqi ٥9zAg?@13ϧ@2 8oΐnxN})zSBװG(こ'<iuzg<F89;f8?Ͻ<}s}q@ O0N0N;ޝqL{chcwb8}~69HJ#1R"$=`IP1’: {qjORg8灞:g=h288HgNOl3u:<'><R0sA":zІglq3}1rsHd3Sϧ@ G'z <w=_7->К3LS^O|uO/@=xJLu=p$uPNP;92sq$=NGB:`&;ێ9ߞA0L{zӡ}ziw=Ϧ? P|Zb1Ӣ'o#2q׏ց ޔ{P7gx>$}=8E=:9<:8v==2O9#?ws1q#ҎF2NOҘ A=򣁁h' 2|b-31$xd'n1i\=pM799WrG}O:)T9<?FSSi=\a\tF{y?~x8]>Ã06=rGHxs{0g+󑓒+};Qm}W1~7| ~OA#$qs>\x\l#=AGps98Rr6Tv#\ 8<{aIeGiNybpp19h'p:{AH` NI xsM9CԏL&wzs봎=sJ1ۂNznq<}O<NN~`1c'@9$Џqs۶G@r6,q&q'G^3GIILځ219'##GN{ށ'#yi n줜@=qhq$XrlTI*#3ׯJpI }pI3GxS8qӥ&0,1w>$A8H pssolqL'wu(GzOJjdx<㱤PrЁ vDF7`cHQaOfJ~l9zsWyˀ(<ӊ6g q1?3t8 ZP|$n#=y`v8:Ty4gva1qNINN@a=A8HqG=n>EC׮I}qExzI8 d¨<Zvx/${~{v'>'Ic><py@ОmA0'~.hInaPG=1ؑ48rN0$zF;?ji!NBrHsqAlJpvrF98Пn)q@rF @9#8ؓt7-xǶ8<@'? ny/\$rN8#=Ng99hp{C_ I= 4`v퀪~i12r`gI w F8i yz֚C6GA,WGnAv`ALO?0FqZ@v1퍿{8)I]vcp$G.2+tR!ۊC/\@žrx9y3g=94ܑ܁'/NRi,z=1 @H9LQNA8pw&c=}!$TgRJc# lP1O,{ qv~5yoA@rwryN֘0نXg == B {*z8gڛ?(y/^Mi/@;B @z0z[[9^{c'9-:eGBQy`Xo mBzBH',1r4ヸgCvb0I3R1d6{=w|`y<=O}OJp }@#n8n:zyDn =dt1v3r˻?/4ul#q=O `UfNx9\(\nDJ[g9l{Qϯ~@k%72 gn>a2DzpW03;9-nX;Zq@•' M jXtV~a=dtp$B1r8;P'ft2rӊcs#w]sO`9 6dw9<pH?M' q{_2eC] Y c0zxfM6ޯ鸝d2;]'Rs7,IpljNsRB{̈́hT@2,N?YQ(u ~cr~>* ]ʜ8c/ۆ~B7'|q:g+4HaQw0>RG\䓑FZ3䟺dqAt+WVf0͈ !TOoN[p] 1a''4;a`ł`p@LN vv 䏔'\ȕXO?.3XON*a,O*2| #'ښ}XSo%#;P:<[?ypFwd0n9 ͂w\6PŒN.E&0$3튗BJ܍ب`|3}*@b| Z >ĞD ;f {s1#hl&"uޯyҜY%VTeg PtXH\zae\'GTrJ8}l6g .Y3#myq,e)b,)(`ӦyoA:ۻ(a7q#*s]晧r[Ur:R#qG~ӛ /ʭ|'}-[P*1 Ӛ'+zaˡ}nݼr7$zz޸3ǖ=LӇ\'Lm*: #I?SҐ'ԚKp;@'=HQOSO8wdx<SH#sGQp0#7;LNs֗P2rr #$`Sy`7`yA91=qJVl' =^}z) 3䁎1SN N 㯧.c3?=x<㎀J` #qlg֚1 o~(Q1$;@O$`O 'QoLHAt9g#<40㎇wgp$4|ǂ8PE&9 z8$ z~;ӓAL`8SӜR>:zu.yPH$pGHSzdO\.23Tm2lOB) |0Ұ#=}A={rIA뒡lnrxc`G֛@p /^ޒrFA#A/~r~ޓ㜝s>#3GQ; J:9yHҀBa@ Uf#5q15jWm 30pU{x:oʄ ӧ5e]Z[GVpcӒKkhDX'2 =8W/˵[kqf$tmާ=|#a_OK|anC#Żn{1xBAR#>QJ6;5pTvp%'Nznk:dVO']OB*Fw T3ٸn}x9VF_z5KTy\]#Ax02ti" LĂ 8"SSN>Qj~g0kv1ʌ]g0?8Ǯ3^9]o~#4[W_Bn[&16%թ2O{J _?>F7P X⾐׈D<{zXz=̻ԻG=2KʹrK`(`>v@8 8 sn kk'yq?/KosϿQ@=/#c9})vH?x{qTp=3׎ 8^h&O?7A~8ncH8SL: :v9pOvHlm89I&w'ߞ?Z^v89{fPr;7ӮqSqcww&ēr2S: v{t-}2 IqߚvA8g?j P@=WO_֛n89=3Ld!n`rqޔpGA>lv?(򜞼^=2^T7C_n=p&z3i'c>ÓĒx@F3R co˅8prH?^0{~?.rOژ?^;=@=ӿ&>㎼QG=;1HrT|w?Sށ6/@ݍOow QBFGR_s@w9z^ $׎@%<9QzӾb;cr=zPx?)#<1quiÏlrHl#>@ x`qfuӞ@œt@'=2;zΎNԨ{`P.3uN0IүV9xqdP v<.luptRp2\F9yJ3{p:~_@\:2H1Ԝ wh/qw;u֛ؓ 8J˰zt{u\@ϡcs w;S_|ݎGOjfp:rAa=>ۃN}03ׅ'Ӹ,?÷ xAߡQ 2rpF:=MݎrG##<h}nϥ< ?s\uP1)3W}NGN'$$7KNAp>Ԅ㯗?&n#1Oܓϧrsu$~ An=i'qR#Gtt`rl{w4: 148mqy rI ǵXIp=sOM:gړ$wq>Ꭴ~4<>,i)㞾Rm'gҋr5S(|)ے玟zұWG6~lc=94 ӞZ?( 7F9GOZ)2 (>3=:1\cUưggH$*7pňqxhwGώ{^\t{:6={(RWwO\ԚV z{zL36(?;i?ÑԆZC:^iOlq@ רݎ_>?@ r{9$v80=Hg>秨C~Fy烎xɠy-R{p1۩4:r3idׯ>J_L'G>_Nz{J8ocH89H:鎧OQUAIoH99_jwnA8Q}i2;dqTmHɞF1Ȧd^N2p8t5NxS91ۊqqzc׎ZLv>4K=vhOcǷCI{@#.0>lx#8^!9x'9$֐r@NKc?\曌d'O0Cx=IBizzsxǿ?^Ԋ= :힜 }9Ol_J@=xOמzP1p2G8 ^:9zA펟Os`O֤cs=㎘ӎs( ~9o^s Ӷ쌷Oj8'iIx_ސ'ۯ_L w=)HH;~<,>sק? @rRNO֏Oˁh`qgN2G;ڝq9rx޼{cҞ8x>)<󌃞RH2@#y.1x>)G;g#c:Q۹8)I =rF{t잧TH񓍸9?tsFsp:Ojau xP03F{ -?_;.M y1:ӷ9=qT1pzi9`(__jb*(p0Iʁ~G<< ؚ>ݻ~c% syמq4!98<AS6zzr1v SLV0 8:1s w$Ԗ<H^<֜ $N=/ƨ?p!b)x\lp3<'v?s}GOM=1zc{=yx}h }s܃9֜>@OLө>?䎴{ny\P)ԁu&FOSuN0W#9`Tm;Aꤞ@ⓩ3ց N>=I.zR>\vHǠ>#css׎dq@ w =>j_瀼(l!= O'Ɠz6pAC:/0>2A?zw9$@4c0#={rJ2> ~\0G9=nlҍF0T|ߧ{N݅:v oOJ AqE`Ns_m@x=? R08=񑌮@p 0ӯ xGoƐnx8I9@y`Oϥ hp1zHJFIN>l&xdcOONNrz{zKoG zyќ2NG*ܑ{4!vsƒOȧrP~^A81dcѳ“ =v89 UXl=w'ZS={ g9 g)g89O=q@tʒ3 rG9ni3@ / R:}pxր#zǥP.p|9gҥqx!l; ̧#(1dr@#0sQ94m1NqNOH=#8€suL})oz19o(8#;I$tc$#րRA>)tA\ŽF,tR@9˸ e ^jZC90pp~_iXc<?(p`קЏJ${==)1$z<|Rms:R܂C}8+1Q`~aT~ϯlӹ8x @9сߊN;#r>f }8=zg<@ z1'}x4!zF2s듌g+ۡ##N7i r'MQ L*F6e!Ld6T-`8sI02psI=:T l=KwcO -FyUSiH3@'z8sp QH; <Ԁp8W'9nORBO II#S99~=GOL`|br8϶?EN2N8i{ב88ߠ?1HdyHlt2PsP#19#*##“8nz׎sLe9znz׃KcwJq SdFqן\8Џ)[JO=2lM !q>\0l zs@|01:dr2Izs(FI__?E]Hz=o@iX'p˜)zKタ&yR2?:h'n8瑑TӾvg#$Z\A`vWTYgh㎹sRO=zI0ܠ{;nlGӿZ{x'dV1 ~yF2 #H<ߎ)<|<`S_`(# 1nƞU@ztg=@܀8ݓ=96C7n:v'А끴=֡UF#9=1?% d$ݼcS66*dq'qІS*H$76zZS.K q?_zj+W'ӮI(2Ǯ)փbi\r7$sjy FU=b%\;AV8-z´#@HLqZCG1ܞ 8R8 2sI==?J9Ԕ{|r;qO7z.>N1Ǩ93ۧ^8{| ֓D8<p9O(G==Ƒߧ;g9H=C<0F;)ܨ9`'A`gSOCH 0zXZrWg?t(ヸt }sMo XdŞ0pOJXu0XeAC.08)J{Cy,2(~E\m?xo ngW4K ~?nRv8gXOO I9܏LXߠ+Q;N ?2zT8݈+ *\?Z!Xh7>lpw0+ϯy2~de,>flKRn-=dbʎЭa `ur`>Y \Yv8<yW8~Nz FF!THvr#<BQr2NyUBXy69W8=IUGFH#=3 z0`O p8=?ΆvHw(SSQȤa(R:P( xRqˁW<Zoa}6 %zqW7Lfw2];-gc#$GݫOm} @$t9D4KB@8 ͕_lU:9ff#VC-rB{Q)朋?vő}VPO@6@"OaAO d"^EC9E9!KH{? Mp 0;q)MB w/eU'A<ž|'mRC^F>@rx݊<2 mLg8 }84PC*I, j[]:?v[°[z3 PѲLol)howၞB? ($2 s@{N91ېG')$#8? Lgs܁БRB9 N_#}Nr>q6x&N9=#sy{{(- '%I'=iؓʀc3{'=|dparHcz#AFCt6ܶ@93i3Ќ=)'$vl0qǓۥ ApN9i _^q? m?)BlscZ7O<g2>OJKFsqHI~`0x?y4{ # ㎔@+q'auǾO1JIH8'!GLG#N# ӓzNxN ,̽3:pzu󃏼8Pw9\*L~OA-;P9N$@$t18ۃ* g z2z=+;pi8^]Hodcshl<Fڀ2HҚNBGv `8l8ڃvNN{tqN9GJg#=  B< 9;g'|R:zs |,zqioyȧ8<@v灎?^ &=qNy8c03NpA~gFAc>]FJN7crN'8#=ϭ idp{Ӧ=hQ8wҗ ;cNr~O3QOBr  F1 'ӥWr67#s =[+esU6?Ãj Vܦnx¹9 ^ǿt熵5H܍.=<A 8]p1N=kkGo՟m=5~$МwzTӯ-Vw6yԤtm!r{#?wgI@q<`g\Ϩh(vxdݳjPs *x#?ғbgi9;G}3FW|?N:g93=;Uq/N!xv}##$w'Q\qg9?}x3̀\ey={4|x `cïCך`88$#q׮=i8#}$]@yb>zQ:wi.|u^ >ǭG^0syI!C79uN0z4Ӝ{eyRh}zzL~9aSb7i^0GE(L#i#9h8{8JFӟa< >&p2NqO֘0##'ӊpvڙx6)1$B'})44ӯC?gRu;49ǧN.?]zgt!1`zA㓖{st'8q뎜 N1`ۨ~\CQ8'8`yji9>`W܀Ia^g<0GO\r6yaN2;:RcC:z93:u'ۃIr:pq'1Lw@ S}b_OgҤNh#>g#p=GQ1I/Nϧ_! ss@'Ӿ{~`|n'OoS@?_ךCz=G'?Ґ=Aj@&9G#c>HkJb8=zQ 끟zyc'z鎘R}:v? q}=N1ӷ)ߧ:S[?{-Kwn;A=yǾ)q8?L>◿qOa昿AvOu#!{~_aҗzq }@ixsdO?i !S?Tc9 a:w϶9\'Ҁr3Fq$w?^hlBq8׾i'Z.!sR3I}N1rsT4?'#q{xRd ?ɉ:oQ烎>qXMޠLxbb#A|)'H?  PX?SӥH1oƚbv;wbOg8מ>op ])s8+89<98ϭz_LMV;{ܶ~g߂z2zh>\q~g u9?;c#q8$cAMç9F}vDy4Frqag4@C|1֠g8`Gdèz'3})䃒OQz4=[itR9A8n{zOq6.׎@Ҟ'/Np={B珔<zSP1rq9 f!9m8O€{[ԓqzt=>cF> rO+܃Б)'qMP=@q\p3PGp8Ё2@8oO ߩ=p;)tqOCL^sF1;Qpp>ԹcӣsACӞ'9$=X䁂c8OP Ԓx[#9'< ïa #{{&7*Fn n[֧:c'$Xy?Zl\8aB> A2ǩl8 qJ`?*;GirI=`S8'zR<'팁ջszg@ 0'9'` 8?'>ݏ͌_Ҁ$z)C8炼dX3@O=1vqqRu9JLr88;Ͽ#=F{t؞s u)6GPNsv`:^@$JysҟGE<;7קlS O~Wx:֐n'伐pwq{z<0{q:Unu-]B[ 6HA#Ċ ArpI=ܧ!F0;y8')!Ē0lz'1p@h }(H*n-ܜPxʜH ~q9'9+Xy{ 1l{S7(ʝ$m u9hI8Ϧs~&x1=~Y>Q"0xap)$@2x$S{= uEuvl=1^d8rxPvsH'dvGScUH02A+JG˞FO#SץG1nG>控nNǁ` I$ۥ!z* Cp$ےr14$ p9uu'?5sׄR91ǚrH GLu-8779`NK(nA\()@'Wv={mʞq}laWT`^@r#89OCa8ң́n dcE >pCuv=9z҂6N.Xy9)h=*rA^ޔЄ2H8֌n 1}}>`99sJpqF98=*XGB{ysuVے矗P QH`q>uj@>dIwe=[*L=@dm?Nq?P"1ӟpp8<>| qz62r;q^q2?pA3}i.vܒF@=7asGazmn냏>xz 㞿GOBxIӜ61`zuHv$/Ɲ'9߯Cրn&Bl`A1=x9b;@ϒ*l.AOL dqھ#mOÄ#8<7cS%N2w ^؝Ó'v>scH֮;SROrOOj9ےKӁ[!$I''Szp@`q2;'pQF}\ qHS|uZ쯹Br#74»+Gл 1@z1'=}mcG^x_&ǂz\g9'SI8 8'=pŽ$cL<)ds8?oʫx;u@T%z@\p$'p3L؊s;GaqLw3L>1р;{}6păch}Ig\RL>u1c1:sKƊ?hD݇okRF~`~zn=:sɰϡ99>x }(298O?:oe'p2Xt@4~A(.yL%ۏ9Ȫx$461=yM;Ms=_^c>Qq'=nFF}WU!A s?,vؐI>ӵ>&<0Ixj2N[>:P$tl횦؁zj)-Jr7Ar?ګ4= A9Nr7ې:dc>yЎ,^:^'kPq=+fdkN< ̍\ vg9c~\jZ(ؒP ~x<L=8>H\c`?)R:rhC| 9/:gp9׮n `c9#< p=s>V+ ǼЍ [l*J"&8"5MH>Yl'uG0Oj #Ry!A'?Hs')p>1'?qH>'qy#sép1ϵdO9!-ؼx89O=MaNX=ֆ1p2FмsAhzR䎣dvQ]Cz$s}H939`s?Ƕ?R8n{}1GQuqzqx49^$7C%9"{N`IQ铀HOAKH :RFy0>^qn9n#֌w'v($nG8;n<=oˎ3Hc8*QSzriŌ'9qN1OAG|Kx둍r~ <s89[<_'Z@88nzZf:㞣Lz+ gyˎ8\}qסnAr~n߭8qy<8I{LoAi@4 wPvs}ix g=~0c3d AG;@P2I= s!l$1랠~o1@ 8<=1{qF:$ ͻ.$0 ҳ|jm-.s!猎x|[G«)#=:<\0iW_3i{͜}a(ƪ1)Rz1f`#@{7qۥbI/{.XK|GDuͱ8 d^xրwʜ@%T208#Z*c9KK!MۀA%HO<ޜP[nsdNzP+m wq~`x*T=* 2ǴsFv!pF2 *oLƥ;;m:$(!lf#= }CH%g'!AMJdc:ZD|2ξ#鮢}3r($G=ktVF r6IۚOekqgȬ6)xN޾[t#98+㱑އ\ #pv粐~agj;ZqsϷ }GyaNܜrړ9֔$2##O=x#GLR8; SOl.zn@$=)1@1^<pߜgzpAu=~|})9SHx8Mw8G1#x'}9$7d>=P0=$v!'18}(NTS&G|qߓrs@9'$s֔rrPN28t@1=rshQp'c?4 zs23IdqT yv$2:yar2# S׿U =d_t=:sc6YGgzSH\A1_CJ\F^0w 8NprO&nv9Cx2?=)H?_a=lUz'wGGA*béϯ_QL#zTثG|g3Qߥf>A~?1}88q׹ t}E(AG}zqzH?NL G# 1s~$;~tOn9#9?/9nM|L U(ǿsNzb=zҗ^ba߂;9䍼8ǮzcKA8Q}hD91GQRdg+1㊢Y'I^qG@SLC$>^WwO98'Qix81udv8$d=NhB {p9c):8 p1=00؁qy5~u\`Hi03N0GҐp9'8-x:?9x˒X{{S@GV= =z)19P  z܎鷑zObns?t ?ji1<׃߯ZC3\:':dϧd-ێǥ(끌" ~zNNzf'h`'8$=9W>{~|_! >x$c?j1힙o})40~Ӏya_jL{zv.''NLqRhc=8h>?#=q{ ӱ&/^:}3&pǾ:rF o_.ߧ8?Z,;_p~})IJڀcn`zdӷ c?wsר `ҩ2ZJ8^ȩC@8? o ~n$S9p@n6N d9$ncr)=:;r8ϧ<3`s8x =wg9<Nsp999<~4pu~ ӹ6sg0`t?ўq' 3?Z. W#*8ےprXn@ӭ;blNzi ylӸ6OǜS$y }:~\,&p?SzOʔ. Glx;0G2qޞ0;c8 :QN[}: qŽsӽ)l ճ4\g9$#=:cց Nvw9ۑw=90ݍ+8q@89a OpHQ:wҟ n98sod}=~4`zzq׭B<7rG?G n=lR`[2 %;H<{4r.Tc~Κ0x׭!=q9'=;Sqqרh4ci{I8曞E$(rx1c=<yyxrO'v0FIl{OA(OrNiLN^Ի~\gOL.h{ 0@wHۃKb=jnSN2s#OmFz;K|89=R8'ӌ7nN+8^':/|&p8 .ؙ'o<ѾE}rsNA=1O0!Lz?rl`hgqڅO\x|x 䜜5&~р=xHA|q8ª3?:b@pڗtushќg L U뎝Nqǧy=(`$%ܚp#i >@ObOA9q I9篷z^s 9ژ; gM:c?$t#3ץ/dp08L#t 9w'9}y<uzp0 #9OA`{`s^Jadm<n݇Orr2;q'6#=y"Nzx?Ni䏺'8`w$Su@s2Wp>JLn R`sq8ߞҧvN ^Fz.) ?`('!s9g;dsHo naǮiG\ۻAH=Ix<pe2eٓ1~ ny oRx9rr0E 2ywcH!ns9u?A8ß^(~UCuqL1Cp\$1=0AH>NA99)0BQsۦ:pA@u\CF@ʎx`cA'GZLrAB;H~^goni \Nr>\sv(۸rT(<_8S@8rT\I~Ƿ>'lPxǦ}LApBtN BrǐmS0Ă猓T gׯAyA1Oڼ ar?a0tNN=2? ,ڛJGׯӌ{#Hr1֛Sd,p:vUqeGm=wf0 i9`?G/ȡH'<ά|Tmp0>P?|> Hk?ʴ7s?F 0ǀ1OK +pq9$gsk7(2?ANY6g=$]*qWe' r9$?i1F,VRz1xH>8sdЁ.6W.zNjŽN3F;`U7d2- shFBdbǞ\qVqO\qߧYe#zFF5!nO|~"ߔ߮r:X;8o}>F,/|q =>6>R̆ t+@Dţ8\gvF3ihĖ9}|G#2A_"Qk˶c,瀸UՁXfqy+S yf :dvsk:D!NorJ}t4OT!C80*:18<tpg$[NH'V>q:sܞrsHm;{b(WTl1>jm)19?"I (=$F ^ڕVz$ qIQ9?Nݪ?8cy&8 =^ڠq=@ 9,O͒}qIӞ8;p1;@Fx$`p}}3JNў;I$qs9>&qr:`#9%d'8@'86ۆj`? ss?{I:dӌvy\p2Àyz^vOA=I}( G?7~=ԜeHiw{}s}ixGqqOL 1Ѳr:q!#PqՏ]?x2 Q~xskr}y}GCvwjv $g}Nvq`I* ґ$0G9ABrNN)3Q#H@9<1ҢhsOR9pCrq1:cPWV!?($z~1Hys0f1 O_(8A<8*@QI=AzgwCր9NGQ{160AM–8=N1iz'Nʄ Fr>^z{rXs1>pAw n>?tsS@ā㑞^Zx@`vFۓڌt~=8h`;~=0Gz@l?(`/n8#99y=z}i_93`8AӌzzO@ z=N~w$xp8-r;Lizm{Ni88?œ׿ΛsJ)1{9::,:n)0FW$Ql93 {c߯ғ~ c!c m'pp w:(4S]~ʱ]5f2f9wPT}ZAdÆtq׵}_R1Gk hg=}5-LE V.I+=+oAʐw 3Ǹ*Sj#n ͓cM={khP:8 {U!T7`g@U6f}2isH'r}qO^sY_pV#'ْ2,9̄n[i#(ԖM(wo;gЎEznۚTJ?0f0r@w Wܵ6:KGKEgrmu^'6J;x/-sv"1wnӵ[hz8}mK|EF8Mޣ} ~$`F|M OҼc{uN1ʟ8yx?=pO|~ǷҚaagA=;v8>v9I/=:cЏOA=}2z à<]DN3Ocǥ0y9\>&G1r9=MJ~v7 rHx#bXfr䎊GLt#p2;>8VazvFG\P=F2z>;p͞:upA˞W;Nr0@~n㿧Z_'u=\tBA?ρ@ϮpG>A':@J6ft`{v 19 (?@dp{(M;8r;\@lY ןN88<1s @<*eSzg}M11H)s=?4\V''<~Ҕ1r@gh8')B)NO|N}pI8ld`wnH8b1ׁЎӔ9  7wCӚ~~z/Lu9s폭.IA8grs@q=i`N>nz7_ʑ~~1ԞGցGn6ݧz3Gq aOrNAN;C@1l9ǯ*0{܌sߞz= ya;\siwFCqM۝$69<&W/d#XT !Uy)X.BF0v=3q#82 w#8`ↂÕw8矨Th,W{giaqޚSNr8#*@v95`Iwuaܜ8#sg$zsVT=9_@?+aǚ-s )?֓#9{1ym9uo~sj,g?cNƤi_809/i{u^;tI8v9קa9$v V͜g q8=G$cFp?bEA9$M~$uw?Qa_A8?0Kt28'cRIe98 n$p9h܎izgj)1}z{?sЎ8?O;4:1^zF?ʓ(]N i׎8!<}RGRHvQC}8SǭWA13?񤘚u W'Ny^Laӟo|AL:q8NyUa)yxz߁THGv=> ?(9? z&.OAG`z>G~ppxMu$?ߦO H {t݁{Bé$0(F@LN0I>އ'||O/) c;tߛ==409t=18N0sԀxg'*rHIǰמg׌v~>~t Fё8@'RcB짶GcלzS13O< @ G{gҚWN{g~XO8{֗8yAqEMNpsoøx<}&:H}lX.&2?zq sӜ憂uߞp9ؓЖp8'i:}-\n;:`׊PMgM'A`sӯT~^yǮ*Z)=c~R:8'*ǿ=ɦ~9>OZVƟ9?hH[@ 8Ӝ?zA9=}:1'둀8&yԎJ:=J鎭 jI׹g<?޸Spx#Ojf@v瓑ځ o:!zCbgwc֔nv8鏭>;ןHǰG03שP'SG?Or=קN|>z{ҬL^9=Nx@b.8(LvӎH>OL:n wIZd^ۏN{hq2r?})&~OS؃}}E8~}hDw{_A\{sO򦘇1'8;.~@ o?==`~`N9ziA8b;3A898f;z`zӷg} 9ӹ6n{#KBr÷䃸z}:7?R }^>}s1~qSA'')Zqј1Ӟy8JdepO#\gLЄ/I `=2?{WBgocמxߑ՛p!3:=X@r3sr;e?9?) I'9'^Muzr;c=~܌qӆs<sw&±2rrs==?RPHOpHkڂ9# hp=zQpzdqԌy@G\.N~ (2@||ÀɤS}:-8}M'r9$}:CtddɧqXB=>OU=^}ΛHz {A<`ldz A=Bdz^qs$T&(rGC^1?ŀ 49@{a8 0[0<x.yOš0Gy8oAJv瑜yO)n/#qށXOT0Қ[v =p9=[9 <9zy~zvws)A' ~ցXhlH$nzq*a;TЌ{{P"BpN=!>^/'Ӿu 晒Nx=zIZ`I׶Hi Kݱr>b=Tܞ:0cғ3HPr9qRslsBqHx-c4sPSϠT38p_r8; t8E;;dgj:q; AZL rs{(@Gs+F{m@Al:Hb8'ӑ3\g8G=|L8ݞFW$v0F(>jC[ Nqq~sޗw*@}= A<՘M;Lގ+c#99Gz$A@Gz 8$Q8'9@2OL͜F8n߶iN?}~+{c8œN>ݞz2FOʘu8;N1ӏ\RI!~GN;j,dzoLiA>oԁLC_M8}zs׌q89O|zgwsx8q0GziN2>^ힽ:t 㝸$p$>zc8c#@m9͂vxRGdxg :?R )sTdޢ930.ޝ uG$zdsA/p?)9s#A׽!=ʰ$=q z29C}1փ c`p zP}l#8;gq'P;4wԒG\;;z<Ӄߚhg=ns Oקn:q@ 0:3'HyrI秹}Fa3^GdH*qy4Q`ϯR=?Tx d{Wށa9}s'LKm>͞>&2@<뻞ئ a=]{dtǯJNxu`1zP1~2;[ tny#<:ɉݍG <P[GOLԇa@mιF95_Ԝv1d}i1s;;ncIeߧ 9;O_Lۭ!{W$$qgt8\s8ih?T n7F34s9Lhn9zF2ڗh#q9CD}q;`8 ~NB 8r& rcy=Lns2@f9G׽!^N0ݞ@wP9>9{m9Zi=r:t<ߎh(,Xv uqCco={ÌU`~0[G\G$8^sמ49yǷuN㯩߃g{q@v03sG9#p1g:#.=Q8qpO9 }Gp{v4u#9'9IN}1rzs~vX1gONh;Ns_OCO(!G9UX?QRrHf$%q@RԤ3㌸=8j6wQp:pO`'p @u"lJۿc.AwO ݁ڟj{keqwҧd߃Cr?K'@B('ݻqS?6aX2?paOV3 cԌ~)ӧ~1uUrqW9<JW#8*8;B IIͻ#^{Uv@I+ n&N6 ~~iCvn'>zP [E;Am!n?Ƿiƽ 988#ŞJL&YR`88{431=^կO4sؤzcHAs8?Α#zpH8g7^ccU1c$Nu"ރoҒ?Quivq=:v=ݸs9z=98#Jldp>@T tO\oA|i5 o{*'ד܎znzey?7F`\0}juQ*!~AhBzɐ',N08 ZCs&Byzgި 3$}>bmo-|l鸖97gqD[J˻i A#UZB\9zZuOSDjϦy򫊠FO^2?O|̞'8ls֙ {\d0U0;v ݽ229cNI팁'@27;IA>tF: gRp.:xʟn}xc*O)'÷@&pp:$tNJOP<$crp0:uǩh@.$AH,׀6Ԟ“LXz ?8wrqg֗q|@sG1쪞-NszLz8=3>q'ГJy=Gӷ֑CN=ⓜ;G@;>⁉<o =zg/I8*X#SvIs<пwy$rI==z0}srG 3yi<2I #Ҟ=l Jux!s(֘sϑ98apHN( NANǜAރxlg8 g}@x(|.= ל޼u-=9^0R`4㜏^~cV*z9 #vƒל; \[ 1@,V펝qaddOs $rry=is@n\P6\c#=}9'<q} v<ӯL^j>0s!]c J+~lu/Ƞp(ߕS~H>Q+̩| ݝ7@q~&[Ƕ7kb#)!_]Q]OSS%<9;) #^w,r# 2z+*5,GDbb!6dv[@lIc^?Cv *P1ԕ=y* |`N9jrɚ(8< >Zh*w<3߶jv_ )3$\IsQ>Lp9翯j! %*@ DcݓӧLsu#kmVg`W]*} +RSF̹Xŏ*dQ{}jʼn2=?i*QȴVr1@N!*G qJ)goev9鑃^V:7gmI\VoD2Ӝw5!=r ~w{ r2O':`⓷~w =GҀp3'gӚ#'=I\3ד;{\zTOtx!޽8+#p=OZ\n8T8*OL_Sx 3NQ9\2@=)aQGҘ=, =6ޕI<Ǫn!vy8'zz9$8><H^0R98 8,w8w^yc\c$tSNNu=$}B1sǶ3Ӧh: 9*A^BO9?׃M, ϜL€8rX1ܨ`hqyu߾;S~9{=)L\ g (?ǭ.><ϭ2DXqʶ38{tza@bNW1á' [?)n81lF(8$Bu;~pHI4{c?w}=~_w 8q{zzP!89=94gzqEtGS`pqߎ Osz /cvQ'a`~ 17 nZi18'n@Xcxn޵ `:xO2nI$zUqޭ:F9OU@錂:g?VdrY gzyҪ!2ir2v<6ɨLo8 {9?+ ZrFPPpW$OʤYюx8;N i.XIx$1ױn nG?ZV`1Ojڸ=r@œ7ڡ꜁3C0u9d`%}#קBit,881;ӃޝydzFMOR@WzgA#)=0>Ϩ/^`(GQ;~+OQIG_Z^yyۂ@&pۈ 0sGWqN8d|軸=N?֘ #8ʐ?j~=y\CҐ&&;6H]3?Zap$Bdc>*0=90HsHN{wǷM8#z)N>T0;#p2܌qe4c/~: SEz`qN3ҲT۾IҰ&7o3_<;z֕q 8$PIcvzVcXsSy`nzGr6'9%x*z,QPxr>\RC LFs{M73 T?CE\aqzQ`gI=8皖LLc'i=r3g?˚LzdoSb'=`4ƞ>n}:fy< CB~tMsI 2>)8 1cqQ>br3iGn}=ri'8o9͌׊K:bqӎ>\t{X9ʎJdp 8y!{t[<バOVy6p{R98 m$N;~x$3Ƿpr}4ӓFr8 .;e~aF3tJ: r8=3HМWHGl y>1?`2:~r3q8#1@E@I'۲HuH3T OOR9+9N99>ncl`?0qsP3=3x=}E 9r?g8< ~b `r:=>'ilv@\Ϣsy?N+y$q:Ru'9R$sR\\s8?AL<? w`pGbs=03ϭ.]z\oZV L lcqJ7g_$#TR  lccF*Zd|}?zק_(os#99OJCdp3Sp81CA={q( vt`s~{:/"u8 }:Jh{がtQ@뎟I=ROFPSC>қW\``g-9SpH={9;~TОo׭a=v<瞝Ӂ@çr;c)AIl,=p9p8GM1XwϨ ;?w䃞V^H=8 Cs֛ퟧOp':`:7`wrqz^! py=zfXgz1!߮8Q<0}8g<րad$zQק׭<0ǯ\dERqאsߟuJ79Gyq$v_I$ۜwԁ+R}??=}:ԄX9G @+sO;tckqcz&&7t^@oh3-##ޝ&9}SLg3nE,)Nqsɠ6z`gc'pE;!8`3ۓ xz{Wqq4;y=A8^G\Ur ?63E>܍ǂ{X8s{И[.'1nAs rG'@N31Eaq}yJӃXz bCn9rpxF8=M=Xqs#: luГ힟Z~;ryۊiЪr~aͻ9'n;#>x=U\I 3<} #HI uz67.@zqnxv3NⰛqHSn'`G ‹N 91#2=U\,H7zĐ7pAg }NGSwҋ'\ Ӗ'2sޤNRy$wjhV ԁdpN;{nϦ:qצ84\Vv1#$0ICBgupq֘Xw=~IG#g`gbL~Q?n,0ݲylqi'|R3q֚#' %pir@;N209z\x6{ Ps:tǨ'prw"9#{rzSr͎ܒO# ԙ# wҀ0Ӄ O26`+X8?^{3=&($z84r 8:}ih$g(>P:-$ a <9^r?ҚN}Ht$=8造!qzZv9rNwt ބ\sq?9\}Cɒ8:?;?z І!Gg }#'׿B:Sz9#rqNb ?qc=9OA80 lpz|31J3\r'`r4`JAyӟΗz}1sxP8ӯ Ӈ GqҎ! mFquGUCDtԯ~cwtHB`#:W;O!x9:sL B3r2ry>tRsONpX}ޛzqԋӓnpXr* sٜA{t}EۇSJ1=@<z_ <w>sϹrs>t?/]g')pzs>t>Ls͒2cMnA90w =*^~quOp 8 gc|`~Ia_~M ns#GApO`zuN'#~z=q֜3^96P{ 鹾HϹwFg4d q=gf3hq Lnxy g8րpx8NS\Đ:x'dIf?ӽ)ϯ O9>?OJ~TxgrIk4g 0 =zh;t;@>R(N @lG'&1`=|ϭO!q÷#A鞣O:#!u探49l 09HO 2=n 2F8?_z< grGN<ԁ&A;~ 0#(d#+۠8^ '^?>2=riwC מ҇1@'hNwF!͆0C zoigx@ւ]'x413) @advfCyQdy=r=HЊ6 @+}.[=2TXǥ&P܂>lR8翵9;{g߯5% pGzғp`{Ceqy w97|EIDYa,x9p?,8=}v9P12S}9^HpOsz@ЧH9^)Auen:r*X gza[Б9Y:rg^Yo\o8r覤'Я0zrq@f9Fޛ.'x^y'?6~OnU^jm 7~BA.xe#$ϰSk/Ի!}qpڤ;y8:׭$a d1<Čz^ª?-yϡcR=OAǜ!lnwN$?+kD!<FqL93_SN׷-a`rO~V䎇r*&<}A#qx׿N^r OMï4=@w?/LdseRs߷' S(b?㏩>~ B0G-װ8?N=;g}M3' ߐ՝/+'QV2tS1 `Yv>ͤ{g5l=WwcԞr;cW]v0:=Ϩ#zs ~eA;՜ e>歪n'޴[ڌg/BKc Y8Ӝ*H~_ǷZbOQV;%s\[|eG\2G?z01ez~)u$ܑaw5שy-p%NzԜkj+o/4uʌGms\$;߆$a {}~J-rlɸ܉*x }5M8DcB#?]8V‚`\*NI_^خ9H z=dUC۵VcԀNC0sis_jm+.'hH=GJBsIbII2vt$d4H8ܪ `9y4ONЅT_Pxf i1*wd8+±<{sH++JhwUH̏qtSڻysAy̋$R<O8 R~IuBk1Zp%:85]2@=SN܎F/lpϧ-rq^ǜu 뎔OC^ZsxN>٥a 㞜=}i'P~Ryrq@LgA98 ⛒9P1ӀzROwi#9^09(* 럽9v'G?.7w߷ wN>;=(96 d^~tLsr0:TnOU8'=$˽ 3pFW4 :Ѐx8>1lnR}:g=wFsR鑌Oc ~ 8rHIN_s.O9?*C#==Ҍ=F#2= 4 _uP8<0OaznF؊F=$ <}:~΄3`Z 9Aq8N=#H`{sH=8ߊӎs$cxoE‚FNp`}_֥{z) ץ/*F&LTۿޛ{c`G:q@3_}Np<`qo~1=(3zr>OojppFGH{F2!:sQ`gA^ӱi!SɴP1T983+$'}~dxAz8`OrpO'438׮:|~ePF-ךiuqH0x=1҄39pA<0`q=sT&|wre2c?B29!ӷ ?Fiy=rGq߯oҁys׌ۥR&zNswyāӧaN~l0>ޙ(q#8p~`IG6pЎ9' pO@Jwg8$ }:g=}3$i팰#GN 7Lw#4`|c9^Ó֝ԌuxSБ?y9<҂p:7){uGs`gRrzi]Vs:/MD '\zw^9* #} 7@ ? LwtF39;OR2:d>z9 )9ozzg?39@qӿO\wp#>-ǧlqI*9r:)>hgHs=3KpsܮPt9ONr6G'lRtg;}py Np HǧQpq߯nR9=F1~cy**ÿ'>Tr:J. S=Gz33x ǡsB}z֋ăo`WH-3&d$9.Q g98 wӷx9)(4zgp;SR(> $vyӓ7~8PعFnAXa>ẏ\JQww쎇^=~ lϡ~+ߓ:ހ9KuQqX~ݞhiUex#=0;c*+q g?:Br=8r;zL}#8>HN3v3NⰅ[Fs ?ѿK,zp't81X\̟c搹c?_A5~UO>q#=Ϧ@%}:i#=F0v9,?J=Kdb0s}&A#s8=?:prO=8b4&qo^9ty}{c3БװV&zn98±{+g7~qEaŻqw"r;s㞔bpqsGO\gv@ښ 9*F;20H>t+ ߷y3ʷp>=h -##8v3`w#o84> yt;v3Rg:Wʞr~h\A'Cs=a<$Cps8G?ϭ;=zeL2UIߓzr8@?+scnH=OOpi/^`qaJg r;gSN}\*ppzzf9\8N㨠CHH}}ArG^>N2}b$FG†93s41e'pt8OB^ˑu"x{9lRO=?S۵ NGKg ׅvC98{g\&tJ܏ Ďpz/dp:=Jz$2򓓌dFG=*^~\c'={f12z |~#,HP>y둌$9fO;X?}q>`I928> $ z0$ z l|qNWo?7(L0;O '۶9^ qyO?w}=yp4ul1Cܓ}v9 d뻧MۅA8;WО*@{߽&G=sm$=czz`us7gs=00r2xNr}:6<@:\B8GP:oB})H۞r}f?fA98y}byݞ@R3ۃܚCPʞ'w֘q s}; ^29~qCFA]'dFp1=)A! z} )=`{>܎$~NOzӭ::23ڗvI_ARN0Ɓgؑ#nx=FrP\$2XuF}2, &2&l1#mc Ob'8=Ґ O)9{*s@ qܮ;Z2Nqжy<ЊR,H;``{џ U珥({:8=1hG9# e`^NO~98= #qiz8wi#96܏|׊/vN~:p:}ǯO֓,y$): ;v'9[=) $g:I'd78bС9tq4rF0;nn}{.tb$#Cj瞧9 Ac۞ psx,qu2q6=i $dXg#pJ3[ rr;Z'P `7'Ӧ~K1; қ r zniS gǭ!##rUH椯1<>Rs[xIך_Luр>aߏ|{tФB=wd|cM4PI/P?}:gR5;Nxx㷠q߭hs99>wcΘQߩ=2@9#.#cylL'|{9}Gz 0F1cWT1<Ƅ!O8Fy35x#?1'88H1p}֝8QS'A<)Sya9JAc\Tr7`d0B;_߷fX,{)ne#RKcBz-d]|$gՉ$ TF<qZv3Q" @W|'봌qh.!Xd|g۽"G{Ќ.+ӊYq1ڜFUy pvԍ۳7\taр' I{~&ďp9ݐ~Q4g8{U=b;qX`zRdF##h_7Ӹ#푂J Y[G9#⫧%tTqS`3yB%1 2#Gs=1NO` O%a3H.T`18IKR`0=y{T {XM&iPq$c- <<*O  1c*ddrZqeޙ##8 [+c +yB 7%s$1c֗_$cs?Zxzt=Gn?›%H<q׎!8N!>2z}<#c4z{v*QǷM$д3ݟ|瞝;҆(pOAA9O 921`v8R1P r&sAz,%&2J/}G֤g}6;YIQ6}{R!6@p ΧqsC*/8֚ԃSL˴, dSg9tݼ%r93K0OOXOQMݑ|^z !ڪxU-ǫdgzi[|γJGޠ# ns9oGh9l2R;+k|fy5FU #kמN=>7k<1P? ~<h A=iG$ FH?@Wא}0 8QHtNq9mpAz)F6qS=} ߱> M.32>= ~@Ч989zz ;g>BN9cvW*2=zRg9$p8 0~SܒLzRWŒ11 gnd|qi7cϷ0urx܁N?.GIK|0=ќ#)n ۸'$ c4l F1nx  ^~h`d|\qԞ{{zR*{sANG^x( K$dui@Kn;9 q'8뀤}Iw{dubqcԏj3펇$0 =x8ۂNrrq:q81s7csz# <@/3`''8dғqzԟsڂѹ< :t$sHA9$NN$AqӞp\z<2s=yF1@ }3d]zc 9<hіT8'%zhzp3Jk ~ay)8c wǥG#spGPq׎恣V<8]Ĝ۩1´QmYG9%^=\sVAn5Zp2~|; }JnrMyJPwfp*dH9#h, ZILQ"Q gFq5Վls|LX(#?uSYC2cu1EXH|eKep tWm߭AܫͅI ~n;w3cr=kg9;:(9 ޵VVgGj=N'<~<3=9j̰RrzvJײӌ 'p3~lC֗t`8y!xNFgۊp]~ ~0r}GBHϠ>çjUbOGދW' R? Ls03ǮO~V$㜖h8ܷcj~ rHG'A$g8@89'xxہ~A֜9;IoL]Ec$p; דM$$ggH˸zzc)Ny냁GAJ}&cԌ`AR8=zpyIO8wxFr{vq2xTusxZp098=6: pEd+RBGG#<zg֝9s:g"E$I?J>m [rgv=yS?CJ:s\W'8s@Cۥ)?cbݳkU *2s*7N{wCF/9F>^Nxޮqߧ54,{v)t qsPJvF=s@Gqqpq=qOå!PIp*8FFNҟ2 wuғAqÑ$<|S0xr21sEt$s;RNzg<#10XfvF9`{€"ؓd @Λpx8wG_tϨcs`㑎}{uh'3u] >IEͧWZfHA:hg|F⎽I?x8r;ұw#sTlgV#R_۞?;+3=O=)4Zbc8Nzҗ{{So!9Ic`{dKCC189NzqjE 8޴v{@:u^8˜ H<19's!\N=8>z 94;M 9c9=r@ܞ^*b+?^֔`@$ {;P!83Zw# VH <;)AGlI<6}1OPOOV8'%G4pNI?/S:u lci=9یm㟻H=Bp89'#rF> w⁑V'<zc׎}Ñs^!Gcqҗ7 tۀq9G|zb̅8@):y 0zݳuQӾH;sܑҨǑu c<}zv:2I=G$Kb1瞼tzS{czEq''xJn@0t~=Nr ȩhۧBORO{Rzdcۮ}CE A:SL@/^<wHa=3?9C21i;`zp8GPנ90=)G\ ;z~}:܎C43>3w#;:j:ϧH9~v_@1߯/1z4ݳ?408<~GhH<ҁ9y{(= =>)\LvrsL$gs?*&ߓq}pG88*OnH柞߯`=8@' qϩrj/0mf=Aֳԓr?ӒE][^i 瞇P:}3V'~_Z-A'~a?HlO1SuARQӞO;{{)+x#qm?NgyO22NGNq#>ݎ>bTC+M A~*glSG#y dè=:R9dq0x >OM0rq< 9co uBO^ϵ;aO3sـz7<眞{ӸpN0@?.Hs܁ `SL,X:r?.w1coڝɰz*20{8t|*0xB99& prHв?&ci8^jM'g؎x=A9>a@N9?P{RA9N@>1q'P#'v?@[߷PyJ8`u,sz> wt '#g:<'l^3]}yv9lrW^XFT:bsq pSz`py}1@Nxc#'#{cnGMNN?`8`{9hI>P9'po==( I dؒ;12A-p~)㑏Ϡ \c@׽18OBs<~8cytRH;bIqӨNgqnh#n΀SL}dH<ંLu5 W|9n'ȤmR@,r:z"Np2~Ҁ|t.?CI#L;w8=#Ig%qqۭpG ;GN9c}8ғ\pG~1/=$c@'9P){qO7tbO ;ЀBr~R?JfNO$@;N79,z{u% #"2F?iہ=ziF@8lLqTz玾,bd 7@zI N99sHRʣp3{j"}I8^zd Xr1OLs#q8qۊR %@89'sҔAہާKt1 |v~:cP> qcHrW !x =(S{r'3I)f~?!'8x# 9<8.E۹bTx:ӑQL $\Êd<:r?8!@9?Js PF7cI`, +u t$p,=†{2Qס ݊>`9,p uRg9n!r8qc e߭< zc+xiHݻvmRJݹWf8 c*X 8 A=Gl}hݒ)#^JA<=G6v z@`pyTM9d.OcS}r'ҚFlg#89#ϥFpFF2@R8~\np>}:p=ꫜ|ޙCOZM dPrj%;$RLiv89=z 6xSc4%hF@$u\l.p8_B:n'])c6'@G pF3sG?Z8o p{TG^;?.)H+ 8+~yQm}%20:{cKg?~p9ϰpx`g<}i9'n*'Ԏ8<}Ҝv'8(??b@{qن9э/͌p:p0=sE@:eIBCk@Fx uȨHAh# G>O⩿^##=Sиjf͓2G"a2s=XH,@pxpћ9ߏj[ؑqlj 8ҜIf(n2:19 qZQ!c=:0'c8nF3=, # {;r uv2N9[yd G^c ۷Z1s=x=ju CxHp׿^N06xϾ1RĎ7YHsejڢ4H I\u>k(6ٞNaQ[, · X֣%ch%X9>GkzՀ8\ 8xW8Np c$BpJIFcO9 P.r|#:r(ȔpB ,Hx>(0xIG#*ON" Tlo˹B7$@F 999r}OJwԕ؀v_G?J6cqqJCJIbzOU*$1G^I 9C-:n9pO?8ppvF##$xYQrrieN6A=8?{=S:WE.q1 B]DNrrl}3'C0@lgsMBx9<`.W;caJrq3w vL`v+o?#NWI2?*:]ǠӜ{P?x8ڐ$ ݒN?j6HQv U0$zԟjp`3cH ]ǩ*qӻmNOs֢nrq~#=Jn$gw~+{AIp<#6s6tc4z읧L zzgLtU$=2 9=9scqRn689:txҢ ?{8A1ޙs\Tdt>' =Xc>cd #:ڔzөn=TsϽ !@$g@^\ |184y9iqGQ߯8`N@vpzÜv#:pRzđ9> cr3@088I^1*=OjWq}9Bx1:}(=):d<1'?8s;O<N[=n =rFI0:gCC@x89@d6nx:R{1a)\[rpĮFy?0ίHRrAq0<6m#?gֻB 9!Yq1g#+3Fcf t\`=;c}>ˤd1 F gW[˟N*9mjmҽڿִs !wr#gR3К%aᑼqze08׵aM9M}l!d8!O",0Uc [ջҞ gyut$ n=~1Zm]v8 Tc$[#)? m,c!Q юq5ϣb=̊pN'`\1#5ɜxɍ<+(!'w'Ɣ~cn1b9;yxVY~RW$[4vH6m~[>߇wzS6!xUBȮz2}GГT8(|Qs_MFe ` ׍[l)y FF8^{pzg $gv;ОQ>^3xޣ>iPsؒ33GlI9OaFI=@=0sztNsa=yڼu❃۱a^ϩ9BӞˎ>J`wҘq?.3#<ԝ~ dPdsg~t`rI<ۚ\QԎƐ"0T>&8AGM 9WF28vhaOe9~4^8I @/~Ooڗۜ(XJa:~nw^GӓJ=@3gs9ApOchC1I`XJh'W_U Ǩ9'< v4@  $w>3w8`8="QN@9n2Cy҄K :/};ёa' N鷨$FGLց =@7@㎍8omߎHP'=v_Ž@#=u!OװOa ۜYsמ'OҀ`prz1bs}},u9€"`1Ƕ#{p9Svbrvv$Ԟ& ;tqq<7@Aδ[əsS`bJ6,Bd#Z-0e] ӡ*,}3p}zs4,aWݜx:c5:XnBEu!O%rIzވrhcԔאrGS g$˽mDL 'Q/;A3 [ά?犃B $c.q9{eXdve0~?qqhb=GLX|bi^nAc~\`Z^eq#P^F2xd`@9oJhHw`w\Óm9sOjaIcH)diOrOn=(=y'98A8$Rb{rx-~=)? 1L$zz} /G'CK Hx[c3I8\4Xw屃in9r,~IyAzg玾&Cq=pߞ9`C?!+SyI_ϯZ``BG޾EL1=3Lr)4=CsԜntBp};=[q}9HxI?tr}@ߚ.Fy=?JPq瓏js،d{c$a.<:cXϞNAP9 r򭑌t sL;r>K%Onx=id|F:s}矗['z8#zxN}Ic֘q^9y{{b?.8"9}ǿ>g$ަc' g}{w' ג:w9ç4 ^:Gng:SOsZCC2{q'?3qА@sC)\s`y3K$rwH&FA )N\lc$[ ;󎄮IIz{}*K\3LԽOO1pz9sK,a霜iӧU8fPcz6TӐ:ހ`{џǠ#CQ:&=O\9`]h8"(f~oOR{z|>`'L ~bLOQzq=}co P srXvT\u8?Զ0{=<Z@ۆI${cJ/x(#'8B=Lǯ9}=1M=Bāg,p✌3ӓb@黰 `3ۯ''J;$0ݺ ?cp=x< r#.qצc$u{ԪpIvx,?1C*;U*_ޤIq ARVfW.z㢁7QN##Ӌ㎃v\zSQ7dQ#P})ǧzG\_ :=2iぞ ҎmCnz;d~uRP>$^ݕ89ϯG1<{҇pT2;c}hPpN@QEp lq~v3fh]z3p9>N܁p}@q7rG!:>ZM00y9qXFld,8#.ǂxN';ӸX~S0~a[q q&7na z`zg%Gޜ8S<ր CX1uxq8Q<׊@78nrniyc+0=F2y@ 9 QL7eR:zqF7)T|< 9Qw:|pGh)iry=ʝ۪9=ht t@INq~w}zhߺqN=:?w;IHIOʕi O皏{'=#`NFrvcKۑtg cTg@Y[_(n!I>p9QVjy>\灻gtwNGގtctL<.2>lAp>aW8pG2=`dqzy`n3ۿ`ry庮K9zN}{@8NIXuTt郐p:s`3ߎ1F~lmvVޘ w'<z~S;O9@ <~yJs`߮nB^w}N^>\)I'<'E8~s>!01ԏCLb3< #$OЃ48I#Tdg##=4An=vn2CIܐ@Q{b8>7pz@1#'qǑF7s9 d{sҀbtAǰ:d:P4I{~JA0zs#`{.̀yG+T/sԞ~7x1PB]?6p8Ժ\c# <צ9'=') Gc#$%zqr$}(9 S򀠖;xoNG8989Gt^2WH9(8q@ 9%׃ӞZoV($ccB?)#<:;FNĒzϊ0ܐ}ʑqRIܓ@l /`H '#댏ϭ/]##8}iHqNLp> HlI’lv3NX@=Ss#%9u9tF:ei##=`ўHcB^>#m #>+g9 u!0Frj@p8&?$p1KBn18'@la#ҐƓ?07@qJxH\ c#<:1qه=IۡJ9ilӐ0`sϨ!S',p1{sR,921":n*v0q<z z9=i#{qqIv8Sx8i=@_ܯEZX |$w_=oDAg F t<}G^\(BD?)dq>l5!v$]{qRa?08n.'@@88##aK9wx8'߽He'UdpXc iWTp=9RN8n)~qqNK`G\@9qק;z5*}GL g?잼r3UA/ rG jikoA\v>R1ӏL+Fr'v" ?^}zX'wӞi8țw82)lr?kLv3~+>\sX7ֹue?6v8{UfQZ 88pqZ2IAzE-c=g'c%qzV۶y=ZrAю`?RzL/ ێS:cuWDv9L א19\L0Oƭ26d;|cuNr08z5D2<0Ǎf90rNFҒW^bgYKX$%pr<9ǵ|-\J| Pr=HI5 \SGsԒͭʻT52i'|r9sҠcנGQ*>bČg4&FSar|2zvb"qgi`w1=szEmb6|9p(Ilu\]/=[Ԏyr1ޚ WsvioD ϾGJQ ǟ*j/Fr:zw:qyT \zѰG2x3".xTQ$:N$78>R_LgW/[݀~SXpN&:f۵3F0 {N*3Ww=Bv>Lm‘,3cwktMIJ8=>jj V N Tvz=g;Ӻ<=FMRr8R2Gb>"%^~c8Sg<? (Aw7*y':P7 qh#<Rsu{ <S†q=9^sA;g :9 #XN:c#i-g$}qҁsЎ:?s8\~\P G$ni۱3 ^ X r~Ssc4Lg8`IȤ9lr:q3 dcU ;p)}C{{PAcLzQc8\(@GzrIcrg=:y3ܑ p7􄆞p:/Ar@0{i'?<`z9)RF}a#?7'`}^PIAA'Z@{z1'w<nu䓀>l02yqH t8Lg8Ҕpq( 7=O\r'zgӌ~8AQYsxQS3@@ גy mA SI~\'?;cAe it:#qHa۾:8'Mh(#>GsxH'0bKSu0sGAݰr;r3C=||Ìc=ށ}@2y??zІ^U#xqف,H:_5ZG\nT~ۭ)l[7㹖;{_u);Bc&zK[E2X#$䜫dt IBvSOCs>¾ XĴz."KeD>bXn.qGCk` TtkܭG|zo V O^ #o0dJYKߠOcQQè}AtY\IA|x鑊m%EA˶%}c,0x泖Dol%N``1xEYeh,{ BpryhE3E&Tr2p-#pgnT $Byڍӑ9P!nz[e򐺰 c܃<0{ג9v d-NDE{;| NG8NZ9#?0Prr: st[}Z9ېX(䎅Fz~iaĀeg$Lc>89=K׮@2sqA!|qNypy99 nKn>T'̎@qO^Wp2J_xG }@H4mH;I9칣087n =(xeq{eǧ8HI}:@:JO˱^ ԟcC8'ǯQh-@S!}2B?t )\O$┞s3c@!=8$\t}G*8zqӷ x8#}2'\}qTw?1zmi 9n;t'LB`=x#?i:N3psSdS8Avs8Qܞ"q}xgd3JԨ QϾ{u,/o ⎽9?^qp#\H 'xgkFy<=(@sЌR=qzS@\?S^0@ ~?N1Ԃx㷽01 c>@tʎɴ֫0#cRg'#v02}{gE ˖>99]i$qaSӦ2v N11r:uf1r2g8bvۀ<>T7 ,c#֫(q=Gl8$dn9qu7)Q]2$s#5l-{g#ڳ6qT^ hg'03p>=i87y <8Ϯi-8L}yzrryN߁?{ ) 2:/Wddpzy{rI 8zuh=q1?ޛsd <Fqԧ8l8?* 9$g3nO60>[\fdte&Fr8c*1'$gSqBI1xRL׌dq#⓯9S{ec$L׶9SK9;dg4ӷ#KSc( &!?ZBs@?4nJaw{z~'Q\~֝\C8ԙ8֋pr~=^8r{Ҫ(|{v#Mׁ?dJw&†< LqOau M1X]c;񞞴>s;qӑN)F2){ E{`rp9=\RItQp L> Rd?^9 C]=I=y<v3uCdO#h}922o^@$A03*AʃާN9 }>Fr2A܁Ӄ}6Ic csVH@z |#| tOד:ă]i8 N:='#/Jp $m( |7ށ޸ ci;{z:{ ^C['䏽ǯCI{qM!=:zdurHny=~\y'~Ԇu㎌=cϩ搜e ֛3{ ;q`=>rT!.XPypAUݸ8;#yֶ8Lǿ`Ap}jwP: L ^2@ zʫf̱1qҦW*q@ 6I퓒8ֲl-y뷮;nja ?79s=ަNƱWe18=qV$\mSS0 qzd8{ߊ||`p0:ws۰g>}]=O?Z<μ=9D1׎yP}}>;$;z~4Ôh: qӑSrzd{sNrzgj~AyiSI?ʞ#@O9JzÌuzv$ [l簥 : tw&ڌG=$8c߾jLH -g: };0J M / 93}M*A]Iz)\M 0w 0FN9SâGdc}ӸXaI^szg@)w`s4aAǯmO;rr\Pج;# 6P<=:r:c\MߎN .l#Jw ?)"ěNa >>sv;#t#䞴0wĂ@@U"\+89H })VOnW#1IDZ 3\rG=d8I9ǩANSۓNs^x8LMu?7?~>&lOb[goi>9#8#׎9H rv8_rA,I6~NxF<}Cc9coLG@ ,N~j]ヂ@ǮC^WAOr89>b1АF2x^9 ߸wxr$88('cۥ c<01zSY[NA'`zz:9a?QF: Ǔ=;@ <瞞sNP!܁sxF?JTݎo~yqq>c>~|}{>Fy8ݞ2AR(G8#pZh}u88?03N=99>N$뻨*GNށnvy4#'#s֥-9?T+czR#'vGPy>W-0Ň)1Gͅa =s}iHaOs=hzx={~ LsI=O>ދz#hG'#1 nqҀH9SO~NI8AGzRO_L`rrHF8=( p֐vz0\p:{8sFOx<}(}s1Nz})G'9 ƀ393;z1ǵ?36 9nhϦ `xSzRiqw'EBcu}F0N?iq'T.oҐuOols2=:sLd|yz=:A+qr sȤ#'Է~}219+>S߭ f_s{zHFq?{#y';9?6,>A8:c Ǩg bIpiI>AN=A\zA 䌐tx> @2 z^=iʣ䃟;u 1'ddgP['<;>㎙q=0 wK<8988cS|ƚt?1aa1ORAݞiB;H֗P<_c)H?y=}d((ÒxbpN3R;rwG?Z6s'1ϯԍt cqݞ=/xIܐ7 C)j |.h8Q~zIdMǀ;p*J"{|Tr8ǿK}z8M&R"ܜ{9'8fԑ1aN”dVch+aI8pOsӧ֑@I'13߷$qvߎiR?6O_ڂg=h^:FH뻎ߝ(z}ӵ;L:OjC'9n9#$|r4Q3$8/9$74:|s?*z6P#NM>`1B[Ԟ?җ(V>z=:pxNA=+ҟqLIQϥ(Â#Ilq}sҤ FюKzq}2GJ98n9{P8S1Hc8嗀1z1K_s5#v,}Hle* ?J𬏪ogʹ60N89 O,+pN:Ծl=p'}XgnFsW;u1 AAn38zaq`p'7{v9cp\N{ 0׻'#=Z <#Ic[#L֤t泈NH{:i:{:!>^R3zd'ha1͂=ϩU mr~Ob(=OL;c"2I8KO&K$ } jRpwI=SD+ԀOb1c:c`Xpwq:)POpKq{SaFK6yrOn9-x==Grpa6?8#8=C,)V ,PGS=O>U2@89<:M.#9 # ^rcM] S cR \SM1p}}M%B)bz`㜓ߊ;x##8pIt֤I۾F*&qҼ<`'8Oҩ;gkpwοx 3ܜM/$|z߫+0%U[ He;rq?Fn`3rۉ@CF}L0a8 e@yCOh X~S' G0|(@d3򍾜I(' Ya,>PJ %-g$dzq֠1㬪A#qLRElŴҀQB&FI014ѹ?,1T~LU#AB 0 䎔bWPHG!@Oc1 #I=0I OsPP2d*+?bOAqq9%dv*Le$_q-F@vlI"$n$d 8H5̨v/L<>-fLT&ƫ#„| Loi> 8PsN*~2[е0+͏ҽOD@}x s:׏Q)&) Iqqߚ]8?w鎜zKms\~)ñprpGE4ʐA8`;qs1o^p޹8zp23sC7n1A(d99@isx;{`N9lv<ӊv; 瞫zgޛ`1ԀAA1Fp2#=p! 7\}n8ltR䐹3#W?!@9~{W99IqA"ǯ_N:/O w'0t<3pszV= 9n8wqr8 '?JCC1Ѐ22G_Қ0#'zE <N8=Oor:`y9=^9b9'1Jpʘ !:qҏa/Rxu0r8=zu/Q3`T㡣˒9nw';>=~r9^>ޔ_![ @F; Q`}1A9<k;HwdlaV%yn'-.A9Wh ''r)־{Sſ}"!dʨnÔ!Grs SI YnW+ nXtܻH#vOͿ3GNY-jۛ{\YG]Ϫj-4f@g6@TZyXwG>~,PSs|c8ePp$;ְj[#&^Ss]}_ɍʞ+d``g9{Бg?rVUI6㿌":}+wa|M=g|t۶k#VS$!v!HV=;ck **rϸc1TVY1d>w-d ;;ڥ2pU{q2Nxkڨ :< gSSHKMt#*XvG|750{N1#;=xח= 3`y'{yUHGlcjG`}{3x=z~4?1T!=2q#:Ӱ{~}{gvܓ~69P1${Ǡ?0cx1T#=2NO#lPs~RFx q%z 9<Aʷ_q8מx:Fz*?wI pHq,222y}(na<)' 8 )ʌgm  E 8t׮ ?[~,<+t/U#I .x3#'=9D@18 8JLsOH~({.s;q <0Bݻ >q\펠vi w @@NpA21ׂrM469+*N*g(9+Ȝl; U\A =ɕ8=*8 #qwc.23x3TAG3TE}+N1=1V"$(Lq< j-KǴ$%N1<:; 18cg$Ќzq4 1$N)}:0x8#*Tװpa݌Oʤ ZyIU'*p=ԃ׌^qHJu^= v9r8玴!~R!=r@Z^18)z{4 ?)휜IݰFr1 [׾;ry{uM6(gnp}?i=yNƓ!898yN?903rGn=>jKBgz9ar87>a3\f=w'gӦ)Ry$ߝ&R# GQ魌`n탑s 7 g8DZe9p3qSsv犖1>:cKӞyH?: uϾnԘ3> &s##ޕatg: gLoKc =R=7~86vP~8&Cqz`I8RN c@ {pvic9#O\c>pq߂xqN9֝`-V=;~?~ߌ߿[㌃Ӹ418^zI 8>|°=;Fd#qGnccBcHRs39 \HdFn\VX8999_J@@X0㿷iO@=OFr?J;)Cq:dӚ6rrT㷁N 8I clR1s?R@Frz[/o•zr{ )gw$߸.y(|-F\c&3׷C}*[(n>z~̏\}2)\hi#=\=ty?l Qd9=:-!zJnG98:gڦa78 sAT;}zcgGZrԤ0$`Y9je"Зx'#tfԟP8R4ϮI<O.aR砨؃g<:PF'ۡ$wҤݟn r8oFCcpx`:b 2N:(.s>Ilscz_3nQp'O7rcvLgKwս98#ߟ0MsȮKTqԎz7}zfqD~'NZ(2nG35M8JҔ(Ӄ;:~Qb9D`dq@5_~Y1BPy 6(r9 vJ;p~Y4?"^y8=j0G@ (\U%: "|tw֦W>9?׽rZI`[;WO̓S9QG㷵O7Add@җ{v83G0r#sRyޞ>R_3g=i <(3# t ?(qpzv>A)&8tW'8;AϷO֩;o svd{w :I}G@(lg0Ks&yӒGBdzN3yRqGF8J5;p3׺4=29?#lS6%@' t8G>#~8+8CR>N;Rd4Iא61q:wc'=Ew ~7x{ϥ8{<`>{ǮNOCN'a0G'ҁ\v71QH$t$v\т8ܜy8ߥсrIz`x{r={d})80yX{䃐ß`XO9 c zN(<`qN;gӿ0;OPu4팀~_Ɠ##``s@ WԎdM zpOhp1$=Cpdcj`3wuct;[ ^ =:HO88q2y8t 1@0;H c'$}OZsrzく}mMz~}Q ?JgN#hb~$ qԏ@~)hQ#ԟ0nF7o,pGzR[$l.qԌPJ29<#{F`0 ч98n@Sqڤ99`9<|x>ҐƳG*O\|uyUHir?)y؎:={:;q %A?\ѸQq1pOB=1QHN9Tg;RnH9)#w=?{ps=i!`3Yc<yǮ)1NI98'@#;s:4 dxa=xK=2AgSw铌cpx"qdi;B 3R{ ` rp֗'Rx g0qv8Iӎס#H}뜅_lu擎O#푌Pƀ2pp~V=~C;HH;FFxit1g`P:Gp;җOOIFOnh!GnrHjz郞d~Td}=I~400}8 {i8ݜql{qF0;`gyI09F78Y_݌/3NSc9=I9ӧ>Տ?8UbŔ`ynhOB~\ :T/ȃhxrzp aHޭ!w!A`sjdH{ q?$~BF;gމ-D1\]2,'JF: {A#9˧jc ugG?)g<P>bm0A8=qV<䆤8d`ǭ5ycӷz| E00F}iqЎ'I_BC? ǯrF{KODx\8GztnFNI(Lc`Pz|3ҩ-Б\z1~Td9B@9&dn NQ .wԀN ϭ?^\u(2jc?zh#mR2=MItq v陲a |~t?H0F;HDyTr=GN9G0}">Ԩ9TX2`GQMl4N.F0p ׭8zr{~QoD(~l:Uǹ?J1DdA!n)=rN7qЦx'^1z2H'M\ߑߩ O֤h|sϮ?L6G_N9>st3gcAzf$vS3=ګ@Wb73ٷuGB;~0@3U%~0njsϧjp}1cϥZ9fh NZ1v=kHrT4c۞p{ ~*0?xz׽n,Ϣ>TddZ"H8Zq$cw^IORԫN`xJƚԁf#spA'ֽ=xTi=u>|Fifed@,;ݷ<D8硯z$1{ɱ!YN8%T` zzv3,Ny%T*A8ǭIW$~iMaoTݐJUsHep2q**g,ţ>_(\Zܡ VR~m$Ƞ9*ڡNU `/2rzS}j΁#':B l Ɉ’GA=:SU `ϼ .<| Hf]f21A3ȦvF6AqSAↇrOq1g p:cK#!_㞔K2Hb+z)NOҚAr}~W$39 yϛ# Wgm܈[{I` Fx"2gv1é4鞠9d9+ 8zF1ԟʀNO=pH?ϵF38 ؓߡxǨ _aFq#n2n4?!F؎ Fpp9$N'6w{`=fxҿ60G^GzC)W ݁KsGƁە7'w'N3G0 R3>Rg##C97 g\ixF gy{69vN6;ǧNh/Cd`8לSnh랇R|N9 90I bǩ?`t 9ySA~RI2>OA9ïJ^a~x{zr3ɠ}#92Tg!:On {g9sٚ@T5+~+3{̈7@X[yH\ؽץ8h(Vl$ 'zqp N+谚MN1~UٶQ1@b -z|gvgݵgGs?.~* gSjv]O kbOH<lD#ɻs6{ocOJT߻g|sJ2UhV`ES+'~'c-# *u\szU딉!@v~UeGz#8+¹Vxta#%AΡ#e_;r?:;nZy/sȥԩlvz<oHmʳoH9Wk_ Z #Pk7:\8ۅ~:mmq> 9# ?q:}kG9#9<J\H<ڨC\'#3< ^Jy9S)w#GیR1ґ"GLqҔ=c0`?7 8'ut9oA^2)cxׯ=@=<89J: r:?¸@<y?(89=)8qܐ? yO@i{F;?Ҁ g9 zQnc8晟lv@ OoojoLvz#ߦiF{gב(韻{{x#E篷8q#<8N@ ۮyN~&~pp0y)b|ry'U`:뎹nöHaaӚRIBsH 99n}i3} +񪸬;x!r7rKc`:uEN1$89t I\c;Yu2;ҕa u{y{wsӞhrYss۞zOob3`Qp3s<<nY;ODzcq~2d\|܁ ?^j #T$}|r*3kr'tSV0r9zt1NضQSWpGװQsXV5 ؏az_+uY*Q@q@ރYcϥ&s#=,ǿLgN9Fq|' щaO>ds=2hGLy'5O<9=v\ysO^#w'8Ӂ=Aמ( .NI=&ǯc '֋f`Nx^pF $EvPzr3?NA\zu=E7Gr=< z 拀#냂N:sh=K;vay>􄎹88G3c;֜xxqKp'#מ xzzxیcpy˭"g8{Ho~~^6z|Җ9`o_@%xc>I=IE(9;G^g8# _zW7`)Nw|8H`$ss ~g݁^[{) =r>Ӆ,^L{Q~q8)zrvy1IscCO89 yOONO`9hۏ֓- nC ˞G>T=y$w d<NMK#9=z9A188}ǥCa$nCe!3liqݱ)\vO!nT; Ӿy;JccT{>Rr21#zNGA8#v:8=s:8(qd)Ԑ;w,48{Hy>z?4"='q <޸ tW= zj93Q2NI*@RrC|;c~R+{Չy)Dc>zr8)cc1ys+gAnzq#QI|~hsȣvIOߑRR3G^8:Rӌϯ~38==*3bd뎸S>R?3w={|9؁Qͩ\7wG97-K\G}9G|{T DéeJQ&ާ?#~ Lfo}C89'ڎqߞpq{R6'=T !\08gaަU,ÔIo~ǭIN;s[Bz(\vz =A=y>ռj٘JYǯ yjytsp=+5"ru.'sМLy< $ 2>:mw:GmG*ON3ۧIO]yNw9$>RR<ͧ@烞Cp7;t#3RuC!G^أQZ=>\wASwJP\ AyQ;RycrH'^Ÿ9\v^0H<4ʂ 4/ 4* |c wAr=c֑eՁ.AwNx3SsKT:^2J cqf{Oמi`'`N:hSÐ`q  z1| z x!:*wEYPÀ1Ӧ;D8R:o_W۸xסEud?W ZrTr6'+z8SHǦ'Z.{_zSN99)&ÿ;})S9~uW8 zCp;zӿ+y鎼`֩ynM0hPx֗8l.:j983ܓ1\z~1$898I8 }~C|$nS@*9e8Ǿ}==0r,zgߥ.NqpFzN20Gj`~8*2c}}Nx>c1``dpӊit9r!H==g$~`; d~>)|z?& OͿ03׏Ǩ]ϵxt G9F FH$pyҘボ3'#גi]8>:\!>}9zv2q(#==a;,9@xÌO ިC9Tc ߭ Ԟs9L9\1C#x+Fi0~tsLbzsiNty 8~~7xt=`瞄{}iq8{>z`HS@==  0=?€ ^qF6nA<uc b>qr~Ny#B8-i#OZ?1g8~'NhZB01/9y]ހz$c_rA40ׯ}}Olцs隖XA1 N3?$LsEb ]-wqHz ,`; ]n!b{lI8'49POLR+\roփqB@!q v_|}i:dIlU# sw@ `׌Ss^҄#8A#isxgmPyO`)88Q;}I2G=0r8#Sy۞!uFC 99!zc֣uA~=iČ9p9JL;NႣ\i~c 9UR2N8Ϸi 6INB䎃\R|F$ac=p)N7ez^ v3|z3ڦBA#?ZvYA2F}άS2An5JQAq1zZw<+8`Uw'޵-c$yM@K-NXxo|>SP.XF۟UsO*t!U( {V'j t`:&}bYwbn6+0@ĽԹ{5U;JSW㷏jƌס۴B:1[3RF '9=mX* I>Ur]}8knwF]ʻ>na]t2k} *+=FdsBz~>GG-IӀ''kOp;5ߤ݆ߐ I@3߯u9,H:}x{0wp0H93Q r7r 1?@b2p 9^n;a.4 %y3ctzW='1!;q;s_)^IGR=}p) N;p~^o぀zvx['@^Q$ᷧ= Cq 2xq@䎃pG_^C$F 6r]H'@v瞝֕wx=H㎔GwW=1}xNF0s_Z7cnFq9_zz=,|F:{s3G#ރg9F~aAƀg= ʅZ\`/N@y@ qӚxz¦{prsz aJH}{)!g `Ӯ)z;zJ{%zTp19c$ucqb8l9>R 9s@ 9;?2xy~}zP9G nA@1}H{zO {玹 0  G?)OB@x0}i:G '$Z @n]bFy#sh 9?Ӑ>#LB>Z=@+=GROFn~00}잻zRc§$Ipug=z889zLCG^pG3F:`{ϭ!*1<>=Jo\69O@{T\z*RGr}^ˌx3TpGN'Ґe'8^GԻlyw6ҟ'z~409'_lT^ <B g'ۓڗ`1H''ǥ!=;pZV1u@ЙO>slҤSc I##ZN?JN=:й' 0 ';}){>1юF2(Fx>Sן_Zv_zzu?j/^r܌g{zt}jX A8 S3֘F@sC2XgvGLzJ|q3H=인n7~c nN1태P2}GFz  @=nu5PXq$9^4N$fy߱K6NٯG/s/xג)w3¸fwc=GJQ!\N4x NHǥ{4"CJdv&Iw8HUdv5]9ĘP@;@}޻+yMdL2.@;03 p9pMz50ȅwC.K!v+ߞCrEl8=GqHSm$TzT>o~,P:@A_cW.-|"J|0i+dro7;*8{]>#dC.;AH fmq[+.;(fHeh*X/rU yJ-o٤RĨ,THylsVaÒ `` }z Xl"c#{fF;r@:sҔ8rG';M;0H'搸=z ;8G`sNтxeG$s=G@ApI vv8R 0`I9~^p1|c SnB_={s` dciS{<g4b@Fr7q>`wܜʚD`q<})KqN:ibB_9cr)taH ;y=n p{Ig3]>qXoqA)ᘒ9Rx'JD@דA@$~*2zW8;X7Zf ߂3nhLV qA!V'#==a}zzvgH?9p$ߌǠN׭/8H$z]a c#ʕcF''gol~tsCA=GҚЅg$.S,W@=Ns7A` pzw8 #<*vG2 G0XM󁐤'zPi;H}j&psg=$Q)84q=:t$Hisӧ=SK#9csRRîNL2{u8䞿/|C}<ނׁؓQ)0t9<=}ii'8!GQ폭'"|x<) q(݁cnrǶ3qr>l O=Gq|t(s(Aǩq/8s{z\ > iw0r1('oq{s҉H+wPz{nCOzS \~*3(}9&pʌqdzqEqG?bQ3zsNNMLQ(Ӡ:hL8VP}OH'O#SG Qe8ێǧjgܑ`\ੑ8;*Q.G=I#?LW!$$KOA|RsnqО߈u^OOZNe'}iq#; }jy7Gq3&0SӿZ&gs r3c!nPF>ԹhZ>a#SןFs{j9#2qG>9rٔFe _;r~*y!'؞$QJ$'=?OԹɠyp1_0{t?J\0P#==G43g8?Zmq3В?“zhs| o^LzulgP>B1 ;`?x8q†?_4@3@B1ׁϿoUI9Ǿ3?t};JL9@J3\NGC??:5,pg:`٤2'#9 'E5[]@eS.}21:r9$}qZgm-v(?19ҩ(1Si Zl0L~ iOqVnlrFx?@}6x?=0/œj Spm8׏L~ Lku$V8*:y=wVn~8ce>ppNk=| x;z*o;yǦ9ap8nO'i9^0qjyA0grG^Ԃ_VzsuAn#9y {w?wvvL=M\G/'ϵT3 8ZFO{}*CDbzけdOT! $ z@N[8c unyL;$Fv9 =Ͽzw',_sLwvy+uޝrN?pRHdxNmH?*`&{pv1cI= x 3ۥwv8qI$~(?W 8\'@11*:tӻ@x #BϨ=@>n0{^}րy9q'jx. r}y$t@@{zs> 9OLQa6ݱvOp=)8zNqr;P1pN0r3y:x8nlgwぃpw3#?==z([ tn:n/MqЌ4/Gs:{fGc#(@ 8 \LѴv {}H:֛N~V?Fx#&A9 0{#cޘ#&y'?w3шz{Sq##s߯ ph꽺3}NNT =뎔 s#y=zn8lC@ .9$|2 ?{pAӚ7,sTwSt''8מpq9㏦y@ݑs<Pm^_ܓ13ߎ 2͑H yyڑ/rH!89#.QRáa1xȧtgO^:1 nき79'&O83*JB*嘞3)=iO%@ `NO>٠'lc$ yϥDrN rrx_؎8avH0Ao~FzcS403ӌuʡf9R=qӠP0xPrGENiR[G\wg9l&9#\1$@ICm>nzuA?OӶW 1AuUas~c Rn';;:jܰ@@g*\3X>9't#@:>.sxf$cJK`}IOJ?=`C~ :o#9*:'iΨdu#9Iש#@#H 37G z9T㜑sϰ$;x~z1N}=F8'}G9FG;zqU;{:~u%N9crFT|xYhidMwz6V19!x ӎkHnx8'9=;#7n>\s}`'^)ɫ ԜsTuXrW=sێ٭Q3V&dF9\Mpf@Q:kEԽ<~yqj"N>8=1n20@N3uD1Pq{sYw4$prxGby2&|zVYhqhld|㎵vf[pdmra%=sl  08U30cW;>m 3ֵ#7H; '#'g Wo)2;m bILs]=@ɽ쫵߄;Jd3H%#*)81Xr4^Yfw@9>~Lƒ`[a 'i 6O^fL8ٜ$ecMDh6?6QW,T8 )Ds3lpy?

䞘z9x c ֚9p=3JV>݂@>ϿNFAm%[}}sqsN[>498cM<s׶?2E8cہѰzy$hynz A'` i#}nJB G|r3R}UI[uQ29w=XN9\c2GQi(:9'g>=hGPx߰@ =sNQ8zqOnOA g;<[0t9'?ΗAKIyqӯ|Ѵ@$ AsRXzR9b_S֓^pHr:g΍i#Cdq% q<vuCs$cOΨL9>{qx 9$c8~Ԑ GL?L29˚@79@< y$'9=L1R@M= $h:7`m \ f1gRsV)|n$ g㷞:܏ja8n3w' ٸHcި?0yrvyi34˃H /=k[}2e@Ā!NJ|9'z,pm.6בᶹbp rsSIϥK~UFR2=zWVwGRqUu/6 w[&BWi$S ɴc4T Tcka$0ej\M}-G2T8ڸm=Fq\1S2%>Uwd@-+,JB1 =jIHLxlnw 0:G4ͱ#R !܌Oq>h3U-x+УSnzٌ;Ol1!q\\ad0U, O;]Rŭ46/F 'CI*0;qZ@vGX]۵qU{G}GdGOgog~e6G28l(*Alqx9Kў~g:{c>87/St< q_/q r{qvQG ێ3T!pG4{|(T^ `"3uw~ԃ:z硠GRyAӮhcd;gi29u8Ss3ԓ1\硥$sӽI r{Mn=z:קZ~b8:t^1G\~LszC#^9 x#G@xugzqކpp:u 21UUcTiuO8 Os3^?!F*nRC7~{s  .{ SSp㏿J7Q:$x?'3ҁ&Nx=l z8uHg# P-p> {_P&H_<~)wyRANasq{c7v'#r0qGAqXn83Z7 d1qץ; =SsH_reF9^9)ǧ-׶8wvO֟0r~lr2Ol(}*=[$3PNqq<OQޓ#9 r0@$3M \=8ҥ00:guz8Ǯށq?.q`gs A6A2ONݞ:}29|A89ґh>=>aX#1֢zu 9p{bH]9'9€r3zTזmĀv)3:N3\C{ux H=zZ8n9' v7uOӽ[]rOwG8*dq$>G~^FpIJy̽I<PR;w M{O`>=h/'A;H#җ0rT %9}}iDs.utsCr Hq9ƅNN8* `u'9&Cz <1 YNp9, ~ǽ.`%x$@\RycpӰP2t^{=i'Lꧨ={uar 2 -rҐKrvq nqgr@'R {9# t=:O!Ff%6P3~?zqy'9Lm~89R'sZ9'3N0'`Ԋ眲=F= 7'<&$q_SϮit s: 8c=A֫9 WqcJ$OsM2Hb7I|qp8 ӧ`Jr˒W){A#r2s~7O=,Onr8)#9^ POƗm'}i{Bx'wZ_0ut}S<7ޛ?:E̮R3'?׵78]dg1PBҌuJ#\{cڗ-@g$u.8Iӌ~~f:=;d#ʓsң7~8GLgn9~a׎cҥ̵?pyMAP=1MG9jrrO0 i<~͎yK'\u99'(2R:֎qnhs띹H}*ysZO3cn~b7\G$9O!oo{:Rf<x.AQ98GrrG|qO]7v398n1\p'玝y튐MvyGL aH''}qNWr]2Q?NO'p3I$u=07^2r>ZQp|u99=xƏh/g 8 t p2x GOȌbsALGQ翧QQ?!yOs=HO8#C~~iw>n?8=>u Tp@o|SZa c'9S5+ٍ< }E'y@;qI)Sc Y{S|GQlzi{=D=ZgA9^ߟi:cd?o£3{yǎ@>K@Pd$8$t@lqYjW(G@{·-`'u8ȧ9ß|U cd~$QA' sPz=1?<{rr9H'9=:ۦȪ@?=2oC> c##>A:81N3uyGNy<]@z玸JA8'SD'n:\}9ԑ >s}*pL#GTNO_9 Ӝcso^K˜8c )q}rhb<89Cy9#Ҁ} x9R1sш?МS|=~pOt\$F=ɩ6r6ws@cǯ{T\}s1֚Ag$Az>^6>b۱T ?apI8`s;rx$"_3߁{)qԎF8:94&}u 1Rggq=xt t['b_@N08q3^y=pAL88c3sa=Ͻ =N#Üqn?4&GRInAv7 zprIONҁ!=GCdUJb@d r@^1O9Oav6봞_zh霱9\rx'ɤ.pNw0xy!Ϩ Wv#d6|)yr:c1q3O~}zރӠP0~l恮N #szc) $) s8x-ߑނ<`#lu☈[cvOBG xyK0Oˌ0Ǿ:ipt< L9@nC(w~uCqؑܯ$qix$ ) F1p? F_@@83,>lr:w8)c8.xSۭ %:p9/9s׵4`QЂǁ؟h qq9I2[oێ{8!>N~PFN>y='`\rzZE#G<{r}2IaO`@׎;,AP`Ohup \vRr>Rxu{d`8W:a@Òy0@;,2uH돩cdߨ$c=h(c 8,O9H8 ÎGw8hccO}q\9C?b#<3N0{pz89Crcs5- 6=:qp)0I$s p@n:}iFzIY=O^)F:|g$Jubr@<U;$6:IsӧnԆ.A㜃 >^l81\c1zc?ts\1:(`1yǽ ܌ϧZod8=1$`7{HH \6pARF 8{=2r=Oa4r;d:l#-3HGN>ww6z眎3tj43%yxfN[ ?Nܓߏ phRFvNsGP8n1S (vғg!~,1^rxߑL8,r Fx}I'1>9<遃sG@:Hڛܓ!G М>s]C9rv_zBN= (9^zE?o={qsh r9q&;xs8s23ڄGy#kO˟z w*: %I _s?JG=aCp}yMLtX.Hx'F˓?ӥ-XSprzdSPsjU,zg]Nw:q׊Cbx?x_?R1-fpNau[d@$t>G$rS.F0vgܧp)$gnzJoBpUJPF0:]*\cpjRZ0^My;N !*' 1}4r` lI)?J0Qch|5Y9JMd#HAaz39=p99dSi=WbN+Ves)Ϋ~Sv~_zRyF6rpIs*OZ讆rj)Q檁r1Iv P<;$9R]_ ,H?x9%YV\|n$c j^FAtRF>ssu[Xp2;w=0z}hW۟0=UCv=j$UI6" u{vx`L죱 QTt rMFR$Il b7 ٜŚe w 2Ar؞3ӽB50 $8?0sڔUKOEņff*`yqҽ[ܹ'%9=EtIs@iWlT;Cq]( *ybWGx$T6a }N:?*NAn ?3v/k3Wp3{Axwpq+c#&q,Aqךb+q =#(zGN:R>Fxr)L1韪r}0ܓ8ӌ`}i= \tnqq=(b#wgtҎ 1 ?@xSz 'wiNq98>a. 9$qGq!89ց#ʜtSǫt4ܑ=Wi*B;NqӧrR;g؃Mln=@Ki܎ravdzczO r$?4w;y`Fђ3 ێ#8F@zz=zrq@qq=iXhgG\FsgқI =3~ZuӁ98(鷌H>1 wǂ2 [~RrʬFr=⡽mܫmF5 -18%A;ɸOF u9#4fc:L]]Vhc P[H^הb7Wq*W9#p}s_G+wy7tZnlK[yb c<`s]7˷k; IF0Tt=x~1JMTMOhRwS}vƃ;JGz]Uʉ>G+##YMXtbƛ6c9ɠ(בy+ƫv#`HpO9?cINu#QQ9'6GK)czEGzNŤW2c{S7=G:ϘӔ>{t\8J}Nzg<P9g 4@{>Eyo7|t.Q|޽Lnw?7!׹$c>h2lqp{<'g'8qĞ^s>Qf{{$`c_|Rs_Qo=;O'F{:aR{oX nv2`g;zdc8To;cO?^4pq/39=z})LݾUQ.A|ҹOoN =zZ\_7W8< ߿<!BS?(Fn30 ߀0+NyU:RA3$q_ ?@08hw3А1};Q#zyٍ994yg$}O8=zz w6=I9q#3GLkLR:r=;`p3u##~̋+qtz`W?w=3d~8?ң/a1=LI ֧jRldu7'>U7=?{qM:cׯӥL#H=|㟼}}(`׊h>@OW tȌ8@x'~ҒW%Uqלcӄc9Gl?jCt}}i~;c^A{?!v99Rc9py'Gd4ԑ=p?Jgڶ8<8=ݺ^Db8 ƜnrLq=A=z|>W=xs9GӞNd9F֚ۨd0Nxz}jO3>/AӏV*9opOQs}GGzu֥|;/~SK9眃NZa r 29LZa q'ӷp}1J(y秩''w`7!g'#==@z(1# &r *oI  -!@x$qS; 9<cGIA7=)ے,`I oR#G#889<z`p q^^CǑ'8\П@us&cp9#z=:G4 |܌c akX{qOqtS+ qc;~o^8U :`(sv8z{NQ#zSl, '=NˏO5WDNx+g'Ҷ!?7o\uQ9>->F<}KOҵzO8lAœ#Ʈ!s>d\uI 8ϿQZ//3qLz0Srl`rp~L<p{3=!szr #P{ `uϿ4~Nr0}2j@?uj^P'qJsB}hx^'Q"zQc<co3֘~}=sg;dc Lyzn"Nz峏&Nx=1)x׏ޟtU! y{gױ#֞8t8۵R qz0~a۹$sϵā;#0G=iF3o l gϧ''q\PHOA׵I0z uD4JO]vퟥI$ăןJh;^s㞃i뎧<X<LUGLsO—'Pߧ'M$8H{ 'ϥMM}H'ÀAt?xn0FGS8;ӯJaN@CJ$sܜ{F{Sbp='?N)NTN3qPp?So_ۣBO#ڋ!K!nl#1x͸ 1=-0v#$ r`݃L98%</zhBm?xҞgG'qJ0\A1#=G#9"xy,z/\6QӰ䁎#➻zc9޵@HXz9 p^v_Cqnj8;pH) gp`Ppp2qi`A9\<64 :c җF3=8 ^(;qF2r~$4@ ?6y#}9KS~]Z@8ALN{Г<)_z`U3J@q3\zzf ݓs ֤#8Q'/ZAltP?~FG6}@-0zs#ԏA2s9L 8ǷTo͜8?h:NqCy$$-A=~s1Oˁc=~zt밷@= vbF{z>d=9 ր#Q=c)p@s3z{S T9^K `sp:2q3i9AĀ8?Z@;gxݜ=);2:`T{k}2:}M8aӐ{f=A=ԡxNAAߜug#y?NlO#'zP1 m# ́c=2OJU_G$s];;sd })zl`c&1C88PTs۞I^q,c?쎋p<Fr=iXӁׂ@=w61^q+`nJj%bsװ h; t=a=Dp##G=)0Ü;CޥE't'ÑK$ӷОQ x xqCO? c#Ohpz97GL'A{'c A+f9'ہ$c E Hr~d9뎴 qcd `ߥ{z;{d CbpN?Z4q'pFG;*2Hr3s3CnbysR$nvLpag8ǥ)xn3>RqD=yiBq܂}?: }QҖqqrߖ? oNI\@<$˟J0$29"}l{wp}3P\i8mߍc# 0@'\nLxXߟa qk ɾ)L:0eǥWOvlPdvU ,ijmVXԞ~y'~/rt=9TbE~O(~lߑ@$JT[˞1O󠥡bvn?(\cu:ONrd;OPXcH9&^Kv x<#9튺0p3 ˒{ Sy7W*}Īp2(a7 zzd;V2^{E'0&r3{c=*yY~.@rI'ڒ[3wGmߦX:t-!&cL=%ͷfe%9rrA1%jMX7I9!Tk0#'o^׷Ybmr;qWȚ*m na N\qzko&e|9:[Ҋ"rYM !/sWikxf 8b=p)Y=S+4ˠS䪎<3Fq?^IwD|'iqHG`8PhЎv^2*B@c)b.S\}rScKsG+)۷wuq:ߝ1TO `{玽)8j cszI89<'nz*?:ps9<z`N>pG'>Rt׌qnRvqX>I:ݑϦ=:Rs@ӯZBxc#^rs@G~ ~l sg\= @49l2G9?Ґ:$xJpn@8%I9ڐp8_O€?㷻cߧ֔38RO## 4 v~sM1X6zumځ?8(8Iߜt s(;㧦MP qӦHggzJ29#@{@=p (08=A8zГs!qR8B \ cc逿NGg(z8-uq}q޼ذ8r2Os1yoA}3ǵ'H`1H!?LczlFqq9)0 19I s~O#Ӛ r 1Z_S=8G;~srFq#4y%3qip[`t89n8>Jh'IGLS[d/B@3SA@ l[GB4x@rA$ׂ=)O@NrszkA%HzNy+qQ1^Nh E|׉6s( rk"}M;ʐ~v@Ndqz1B3'o9 >;*)=R0U{\ڑ]v l?J}΄żA[F@1]4辧5IwNGhs+ Zs81a˜} cq^rmeX,b +n8I83^e{,Q*#ȇ;@_CKނ[X_kiϨ8lF8Kk2[/$4#^=9(#6ݷ9K- GbYG~:ԉ<<Ȯ A"ҴO(J)mi )#h,r}E{y08,H@^F2JI =ז[iQ$*7,i FAR pjGHԹ1˸x#ت^iMޖ.| zEHCc9OoNWz{!} zr}?.>~X 9,=)\bn~0Jp[*Rzt\mҋw`6~]vq/sϥHN}p1N9QHx9).q#p8#>)zWۇ6Ϸ;nq\dcHw+j8GA^ܜgi9'ߐ}34  >oۭDǓל1ݸu,W,19$q펟J{y9@bpxS21ASGfw{rFsJ&'r:(Sx#=x猏NSN9{A{1Qc82{8xJ>gs##)hǎϠ4*逸 sO=r @'߮8<u'x8L){_1"E{8:nk'Nw|׭K8O||yq=*~CǡqO9⟴+ ^0pzRÞN@Oԯeq<3)~ \zzU:y1?\ j ?~lǠ38a;;.pTqnHSUAn>\g2;ץ'ڱӞ$d\u9LO`On4|ӹqB?go{/j~f9pGcҔ&S@1'9ȩut0O8㟛ڛIct?Zhh2{?<>㧥KA$<gO =#RW!屓9ny^/'s)@i{dvpxlrs鞘s+M㞣_8sOK|8?NG4ɂ;t8F}je>( d9Ϸ^'Q*y!P{=Ґ0>OisM2>Sğst{RR /^O3x߶ Η >2*F߭'Cz ~f;=q@x''<,P4~ip=}xO=8%s g^ɦ7c֓v۞ppN: \P$霎r=isqP9ޫ9e>ǯz_3~zfr39'q?7Lm?ZS)\<W!"qtuK9=6ÔfgbG8>};瞾si(ۈ~z܊989FpH烎)7p98*rH;(sN}G=H㊆0[Е9}hqN1)iAKp<;sMfN9D-`?ڣzdU#0Av'֟=rz \sZ>RoR8xTOm=@ISrӦ3=zRoEM(='&xRO} C7qs=.s$q4tP99gNrzg30pyWBvF~) mʰ9/ޏ0$lz2ss?po~G9#M#g2:AAܫp:? h9O\`4 UPN{cU_Ȗ=LtɦF8lL, cF$Tc9zgҋƗR>@`wtTmp;A=s@*v8zc{T$7Lc8O<}jlC=?OZKv6I08?1'8<szm+> >iԞ'Ǿ=(xNx=FiN{c?q n<~ u>Ji=|N :;A uth`(opp^ G gG+Xq*1{\^'@z?9rsԐy9=(bp'P^}> Q]8dMu>zSޟz0Y=/>^]RӨϧlRn:ÞϚlq{?j\=9H_Κ1AsNx'q@ ''4Q'#P=yy9?tHz~_^ӜwnQ @?2G9)uA}}i}3>9Bn~=E/L:5@'^F8?皔 `L"X6WcA,:199?9{q'n1}Xm=8GܒL}xp>\sڜw9 9=i2`03#9݃*qpyO\~1N87g{g:ש8 ?7?N=9ԣ=psց1q81aӇPyGc9=~z!F q^N3`zw x)<{O\ 39(pzXӊA;8wOg=)$93{1i :}܂qߧ4|~n?l.(laGz8hyb3H1N9=`0]AϠx } #O=u0뀤daq'~6sF?C7n{ 1&Cr21ùPRF zbr@IR[$p n3r0H~tw@3=r}@180Os=Hǯjv3v 9րhqAݎr')xdr'; O@= xb̓Gh O8;ci2 s 1s@ }q;{c4u:pOP@3ӷZ&ۓF=8>җӮ23{OnI3?F3  ܎ғ'9cی}8@cH>(`G Fy=G^)OI=( | rqϩ=Nq1v0<$OƓ IT0rCOsgq$.M(yr3@Vb3~<A8r9?"Q&x<9 d4psT9z@I =@8#G|9NOH@8#U9$3FrscbpHnNcws~\8qԞqy<+ӭ/@#N{=)[S2@65+A=Ü< sQ u$ ޣd$d61f!rOyp8=*ܙNrsIU??ny0d Krr$m~x'o 8##G8OO9{A@q 푎t׮s:R0pzç^Q''#<{:0~ @w;G+ʜ9's\qLc8=9*==@8HLB8G{v{{.s0׏NtH>=~*Q䜐xsM<28>޼=8*6Sx2W.v$e}@}8p2sĞFW"nQ*wrzքG wp 0/1 3 z,ӭ]\j@j6l.8(a{~uoD6eѽ8O! .dЁka1P1֤L>QXBz1cڝ8?~|%UXpI3קaHؑ׊mcOp r213QtNy=Ih! h;{'ݩX8=I։XS {AVlB#9J@= пQ29}gc=FF}sv!{g=0Hw( *9PӮB䎿Ik^jkg;`C ϊԮm ،cx?C@y9J 2-'#ps|um=##B:F4`3|:r>[D]N?0G>^Ǧ9Eta[BSwsKc\ ֚v9X!|;;$* `~wRJH 0v,af&'|~c+ɫ9 klHgF'tpi .R@C=5EMj*@#6ثFh:zא]\(҂ [hpJz.w##Y߼R[wzbO1 ۅ;Q KbX]:N; I.b s׾M>{V TÂYp9<+bяe$ ;9h_tdXd*vo?iC0| z# ߴWvT[8.힟Msy 2#rz>^9':Zooĸbz4WJ-]B NzzԊg aڢGñWw^w:c$צ7!HboPFL1 tXg)u!~*׿J|~K܅ ~ں{kԒeF˖rG \q߁ִQ-G6Gvp89t] "T_/ ં0F9;[FZxKaBU6aN>P\VwLַ2H#1ϨNd\ (!{ukTmgBjj寽}H#EʓIzq\gC q<dƔ̧|tN? b\w wЊpwsǷ^O`rpzvҁ~p?h*=G'^\FI댎'`=zvܹۧ~M;wce#7gÌ`$qӞѐ=AolR Lgzy\cx8#?^ |F1r.Fv؁O`gkgnH p}ss=O4r0{nzu2na:x|t g1=1֦vq8Npnz`q?*q^;@?{FFs֔''Q߳tN> V-ӏ9O`sׯg os{99c|tǭ'l=$u?){zs| g鞃h898#@=up'8 go^l#wdoL?)9:{{~y9 @>#;m*38ǯ~7p1@ <GwgRr3ooj^zTx1sb8'?{7?xF{.{sq\t, ?I" Tv߇֣;X$u}sz|;qy?*>1}I5צsvӰMtE#=4 ysaӜyǿɑ=I- v{W#ǾܐX8큎zo`@Prq+Ш)8l9wJ>4)Nm's|M;,Q{v;wƮToL׈7Ubʹjڝ9u_+e̒*1g$nۏ=ش}4"x#Ap\ME:mX8< 0dz#خAQ{c9ZhZ(mbck.wvlP}=zӣ98-'8?\(BMZAݻ/ճ#׷'ky,Nx }=kͭBiI6\-Tbސr1;=5$;c%"P{x=9{R y$tA#i` )*2:Xzvsr;}sI0AŇLc 9p}GJ70$d QLA#89*Qzzu},8y|<p9t?C;r-rAK9=(/l xq;@=3zz\v;Z3}s3H H,N ~U۞=fZ&F_vG`G`ח)=^OAI890x~b J=Pyf)=PN?jo:5|=0;⏴vO$cA{1~=ztyx}=q{Kq?!wc+IyɎ ww5L_?cKyjO=@Ğ3w0?0ϯ)oSpN;z=?fDf8sמZF#s4JpN9 8'<8#~={P`g/_S8><͟@rƏhhu_ΔtcC)f/GLۧϴH^^x{׎iT=Ub}|ϣc\ JLCQ/!Ms8Iq[.x힕J>`W={nuA=}]Q"#!lISC/R8==sG~́$H'U =Gbr1Uq7p@ǭ/39犗S̯gx #EK^A2}#<玴jr֫i{/!faq1ݹ=hzN3j}{4;:Hp'2Bzفq ߏ_O4{1E<1y=~h?f! g#?Ms6g9k{1<StyHq?^g} sMyq-T:TȃOAޔa%'#Rq3y9$wϥO9\CL c}pzsǭOojNerd#*sR{TצOr>wh=brF fuCϨ>(10HG>Q@O㎤Ft#?n O6'8y}"_2I3Cr$F׊Q g?'"ݟǨ<4a'ÿ4R"yd3G^ _7؎N:DG'1ӯ𤘹Hb>ѕi=>\cG_ʎa2cs#/p38R| 7aSߚ7 u84]F9'\c9-g}C@KwSOiS9'~uW|su8{ [r(LH۞>׮)H珽z Dnt}!=s=1v893@ VQE.RBz4ޘ< s֋q~\LN^98&ր< 9Q“ 4\V#\zsNX?8 :dd_Zm/n}@#zzP #B.v .3YPw9'8<&ę۹#֐isTX=q?Jv1ǷNƚ] c=}8߭Z@.:}0:9$!tz\}iT~W1TI"ݏPSIL=ziFJק= '\s߯n3gF~0\>`s8O@nی 2@$O2qN:dq=1RF~cϯȪ%| )R>>`;y$z" CIꄎ';׿ҘVr~sOp18=RؖI18c%Gˑ&FO'#{S9zcp]=H$ª~}ŎpBq 4a39cڗqTLA`OtیpOO:G1?7 n?x A$u# {)'Ã<>dHP3Мg `(<AO'Oҙ.W#8 $, J1sݴ9'z6'{6Jr՗sIc'p(ӝz'`<>`8#aEbq(g?{sK$V.'0sϵ. l{h@>'}jE3'<6022xL$@m˜)?֤-CFsN 'eq:yI89q:h$c#?Ҝ9Nryў};=8qm 2y4;r: uvSy*2K} 0r6猟=9LC1'JA?-Ƿq}=ppA 9FO8lp#IbGӷ4ߎI#9:g gp_z|JS1nOo'lcwlzOA:.0 9铂r9d|9$@ $z{u)X>f,838A ?<!6`;v8T,G]ާLc`px1q=1n09{xئݺF0>,s쫜.#Q2gz4FTz`#n69%gӜjE<YfdۧJ9yp3ǧ=޾O_9ҝÁAns4q8'# O(\ݸm9}}S#xۑ@%fcnw Jb }r 3gwsр'${:3e$[giÓ=.psϯzo$`Jn3䌂8ZAI894 dL/⁡y\WGOZfr}@W#!"#y '#߱0 @?{jKC}803큏Hbg9$u=Av#G@BgGO@H4NLg8z3R(_Npǧ~Fīcc, HC9 H)= |{S(KL`:`G>\gN+#㎃ސ^X }88&vCr3۟@:A'#<O4?ВpIF:1vۚ08`Jxn8N@9BDzznn܍ v>@OҐ9ݜ~>^Kt`IN7zZϺe,ݹW1IۆېCg]1.+psqn}I+@dx=Gu='7yzE5(Ì#n1>lgҘL 9(]}Rw-q{ǝ<;|çLV5vgEv)8n;sI t>gMlPعzxұ=y9Hʤ^n*|/Ga,rsF yvc[{˴ԉHt{9jG@dg`zՀ@c~n8jڜR9(99H<oγ 9Ic/zG}u9AWL(w*W9,32&a]@8 u+p˖6>3.i٘*G/sxQT|űk5Nm?u_`ؚ쾨$|n[\6s'EDkNm<( VɄ44̳`Bg=9ҮC|`ɘnW94m#j;v1#ڮǥ"!C4h18G\mSEk}ޜ CˁwMmhy<"KtœzG3rоʧ>I,!, wjє F F~^sֺCݸg~i WztZg$Zi!獫HrN:g<42q~@=3q9|5zm'āLWWeyaxgx?(Lx|:G2FRlὶ%0Xux BDWln;\2f8V*1ԥNtJdm_b.\#p=zzVB弩 ەY>iRNڜ͍ͭ̉*9T$:sȫ\L+b WF30>rKU^Cl.ps@rw7=ɬ+Qmטh=>S8 zҕ;\“L+qg`*]v;2  ?u}AN#I6{vߩQ:cÂy8#$tovc9psK \c9?ZR:zq''8= t☃=x=~p8ձϵ{zцS'֜2WvցxF;t^;ynﴓw>hG aOd#׷N c>v38 cw늋zЂ2Ny+@͓#'Bϥ7208ۓzRb; &#AxǷʧ1w$7az##{8= ?.y8Nz N28܌T$s ` u~TBhԎJLp0xl>=^xs3Xs8n;rA<}qZ~q<z`z}x.@\sӜӲ1Ќeݩtvry ;dpx8O8qo+򁁓u?zL7nCAoc=s0y#=p #1\`p\N㩠zr8Xc8x9 g ?ހaI9tp'sI>8=2O;AO@G|z~T9靜m$ ;d~`O؞c?_Z͌_QO$;aG 9Np1so椡{w ؁{p319Gc8 N2A#t\@=F =yNO#o#9aRr9=43 s~q1Cg,3dju2:q$Fp3Z4J(sÐ 䌫HsM3w(P~ko`̱)=Y?ÝH}xȡc< !r;:RkG 3>Fy鎙gɨ=`sJ̤.s=8iǢb1?Z\A1I׏BgH9|9S{dp}jEɫw2Y$*^E<ʲZdž*FNzWwmn,$ؖ<ֽ\>Dyq=44˽NH@>y&H q 3G+TT\+JP$Uv ߚfһfvnN1OZ 3i(90G!79Js֤|pxm~otrB۹&~,v. -AwQNp Q8럗};֑T2?u?ȬFC%]^lt;C2VU#ҷNZM;H=eqzM+D9#r. ag(/k-:rN̮܀ ڸڏ%`NM,Tdut3 Wf =y}k$`ILn di"cU5;K? h 6'ٲokcscTjƣt߻_=BJVM JdƤf.D FvnMs%fYn+U8ioUHv3@R2Wjc= 5[:Z٧٣tx]X#(pv8=Ezv2ƞne꾟B; QΛpg2.{!==mo۸p|6(Lr+x9MpƚNm9R{^FUNъQb;t'|,rwk{u*C _ʸ]l&ǒG@Tcqރtے@Hq߿Ld٬j%ht6HCGe::7c]Qq1U6wkWN߽uL6~w*z=oe=:ui\Ibo1X`=Ah}݋H8WR3SХ] pv b??^jœvp~8*=JEQ]o\:`d$_jLs$>DZ${)z?w9z 'px䞝=q<#8 qӥ4 >cNzѻ~ g4a2;1wt?sЁzRe}#񴟦p)=9HޘX\s)9b G9=yCW-O#p' t꫿sZt<=:tZ̙R99P}z:iLid9m x*y F1{"Vn)lg'd} y?zsߐA1NW̼KLy3֥2Ijrezp ڝg}7Ð<㎼lJg8'ΏiT q#~@:zp?Zj :sԢN=C;:zwtQ.y=2.e+7=riq c&PdqOGNIGr ӿ'9 s<Ǯ}{G8r$#<;w2{`N=DG{R}x?ҥx؎0H#sʃ(ǓH{'4rNA8=tnߍ.;PA _ÔycpsO_vןҫ9HÂ981}@߆ާfp1XvqӃХ|LסsK>{21U.zzquLlFw|9c1Ҥ }cqݷ|sFy`{0l5 Aߌt9Xq}?.sW+fn?ryԶ_9^ :r3TDHuǷn};)w$cJ㶣K9?&wz0A"$G'N$'x=vh}y댊s#}}qF:}A8Sqs$n r@'ROQRrs3R~Sߘn @ޔg>p8?6z(Ny&x[rqF1ϡ9 =R1$s#ӵ?ד{>LIMc z /'<p Rl>=/jnUq9?P3 d})=pzN3)_G\tzw㟗֝=A t^N< }s}c4XAz78?˷oZNq3q+jçLfpOi\Iž˵ s9ߍg ~t_ "*OGO;9?W@ޟ\)}H/Iwa\oMj1?^J^x#8; i'^A##RqI8'ȡ19#>{x3듞:5/; szq/?<7'w*yǾI!oOHO$Zt | 9FF9?_. t r3Xu0zC`z>\zz9l;68{ P$?<䏽^3sK1< q@=3O^/1iL9#j1w#$gq"' R(`s=zHp1l})؜~cwdsx crpsadJzLdt?JNA9FюhQB?*p=Nczߝ%9gavAR 皯+g<`=:P{dy=s:q$&9IN;ۏ\-f93lzttВxl?Θ89ُOڙz Rc;(87$ІAb8҆\2OluOc!Qӧ^?0u?:ޔu ˭K`8݁ϯ?'s8aa z7R?>i12241Ü\:Q3 s"5Pog>sǷ/ 7cS[vO~>G39#Ѓ@9@d{!y$ultG0N&v#<;GJb1ŀ<{8϶G/@KPAO=3C<~=f,ur3ӎ+O]»Azk03{:(lxf^@>ִNG=Ah  tRڴmx~9u`G')6xݟN{ vm&CB>8zS@sRApKsv'қ.؞Ɣ@\y>{K_. =)v8GZ¸;&9S,+=}1g=sF?<4ӯ<֓iNG^ i M9cG_]3~p: zHCvn J#;Ѕ'4\](<r:vn|`CE $:?9##zc> yG7`@r`?\qA$=NA!ү>{Ւ=='?#R 򥘍ܞ1hۗs-:{{n}: ҟϩ7pGOp(z]Jp;r~LpGcہbCぃqhr:sI#@n>Q${簠>u:60 G=:vW@ꇰJ=~zc裷}}T`䃜w~;9pp,}OJqSO u1$zSZQ߮w9ӎ݁Wq83>Aqڛ/Rgq1ZwL`<\rr:3<ӑsWCCƁ8cׯzP,t9ysڗpYOdzNzu|w3;q{ WzqzJv}p㌎h~R  LO_ өۃQL|19aڹΡWs1gZW?+P1qPZ!(냌28f997Qe"?.ޜp=(pnc=0O;$)9Tq|9:;y ;Fށn!%rÒsځdrs\v })tp'qZ@*'sxzQ)g#'H@$NOQ?xv983dC~gJ $c y<?:(3ss SI_;Ò ?EnNcw Xq9HۧV9G7_]0r0GMq˟J@0>Q[9GNFHsR4{gs ~|dq΀b8' 󎀎=( .N^?a@aqzbԌ>猏~u$pぞ=8,O9'OI|g)^{9y?rqtּ&L2H8*6IF2Bs銫g-$Xn'9Zj>Ir}~n?oLaH8LϨ2wq|x`=!0N,0@uKH?L)ẟLx =G*c30p;5L]P} x<}Vzgj rȏxsvy# F/!7`#t}tCsp0{LgcrFdsg1$rO@1Jn9uW=wpA;`q:<4K$;p>*vGˍ9M4#3;iF~'QHas9㞤 >Wj{'Q?xg?N)W jko/<׵(*zg+x=)%g'tM,caU 3xB1\y>nyp铃ߞXwW$ssQ 0{_ΥKCz=鞣%ta?˭ bA\$=Jwu`3ߊmh/cӠ$tYۈ$ ʥ '=T۹G`=k4>#>sqgpp7zi[Tg2 ;;q TbL-׹ Vܫnӆ+ba>AmLLa~ꃂGtSIt&nGjy`n#=im*#8Tm4g ?*1lnk wg,:gP+0Q`Px^OLg0W,Oנ[gmew= 71DŖc磌1P;qLIn+^3zt{ئAP 2x tgpUgY%$wG ]v%W-xNܕn kRvv^A%V7WFBeW5nj<=o`1Ԍk 0ѻ#ӧ?1QmO=6Jh! 9sӃ]^XFq*~mE sE28=A81ҳ(CAAw9sKqӣ `ߏLcvԂy8~_C^g =Ghc8=9L~\H'] tu lz=ztG^N$0NN RAd??j\<q}7y gt=y njdqHT窌g,3Ϩҁz9s{P0z Hxm9)v}:|Ì_9v8 rAh `vʐWcs@ ;8~,s?©#0sJ88'8|~{P!s*9mohwG gL$ 4r21\4 ۷aߎsܚ;瑎`MyZ :v8-`O\ u: OZ!t;L'8$r=A1@GqGANgzq > áϦ#Ѐ 2z[ uaʐKx91qjOHQ'N9F'ޚz2zs3 s/dP\38$=yFA Pԇ/H1?4 g͜`d~tvxtܧFkiddݽI>jđ<2 mcdgZԔU~f)<;R&$Tm3J2GyxB*GLD>0[L伛(SQh&pqq 'PI E$F; ]T:؛foh1OsI1 bvWGB`yQk ϕE+ݞn\KrlcӋ82ǵ!!\tls:*_KgR\(8/Q@ LO2(G\̟^Nѭa 3%0žmal;X8P>Rjk g;5. :m Npk\_nw@ H9b/+i^uV 6jkjKi0$ l:1\9zͲN hXuO=jugI)OgZNX4Sz*whT@+-'I[UYd TcVA]8E)rtVWW2ʪ$䶾t;h7(pGPG=Qb~H#@:UjѪԮӖ=h)qRzōǖHsJ;A:]عsPFyK{h'.u:)k>ru! u_Z[ؙէMMki(}?*}䍾3֐JzŴsԧ+m!KOc?"&ҟ(#W:τf\DQֽ)ܗWw~gbRN/K[za[}J8a62q u5/)-$Y"#s,5RUwpaQާ!/ch!39bPrzvfwdA-{9'n٣U~$יfLk[3 TxB% SҎCOkYKA8 FGy ;RxT*zS{~fNn-?F$ w?bC40 @ztӺ_#x{nBG?pzizc3[NI',[ΨR͝짌:HRI:qg׽uv׏ǘ>Ⱊ4z<^onف1ӯqVVUloO$zWW:z{FkruI8'g9*I ?OӿJ籵0X'<=ONcq= q\А O $,c֤Ǧ9>=*|W=:3ϨBA1HQsI$9=ܜ: ݸqs2s3;v@}܏_S~?k9*&|r{ zY28ǷkTbN߇S$t9e9s>+=~gB7Hqgv:u2F;sϿt6:>lu9ԫ y*C%=s݇lsLͨ(bz0qװ)DN~hrAۇƝ$=Rm7yts_3L!׎'×QoF˰W'zO3>ަq'\O(9:ѓ3rQycr]'֋7~qɨd |Ã?>h|u'9K3j.Qp~/'8>Q z{ޗwb@=1W\bO "uӦ}s R;znO_}B ?Z^y9#>ƛm<<S=lL,#ŞNF}|zvui 1ߓ:zҌ0;dI2xCL^q+1{s(8w7^qOÌ`/8cЏӊeIJ!x^x*0{~9ǯzm2y'zv8v=9 t;ޘ2njxw, V$xLzdu#v0}pzOΌ #j; :c?$>Q#$zQpx$diǏn 7nGK;x>$?B z{"88<0Hv0; NҌ}}F9}z~"8۟jKb173׮=Z\Lw c8g8נ984[9a*8?J:p?< tA8ǨE/:}:JiN>\xZ_^b2x8M+}R($1''8PۇNWs0Li)#p FG$J@q9?88 z#{;ʘv~O}vy B:FsϧZ8:gmvʓ=3)rL9`NFG?0ߩI aFEBd,{ 1@zMCgx$qtաpǷSrHu99`u$q?CAב` )]:Ü:N{Q1O?(dzd`N9 '$22@ԜǨM {dpq>{ xB>XW#>b6r>﷡%}s@r:78?; ;dGb9;Hy$~.y / =`r3?X0霎~ i~^s㞔r~;nрl9#z` T2s q1$FI}߇Rqnr=@K& G;O 7cޗp˞0:Y"rbNouG=sx==A: B8ly)Ls6^?:I/;ʹ8#mǨ^2zrwO`qA,Q;vQN_昞Á;=xKgvW+sk#9?0 g9z:uA?2zc8 }L➼q]'}:sT #sH5/qԐGlp~9ԏssQy!9FH'ߎ1ځ:69,g8K0'n_Z1߈= =g '#'u)0Km<3 O^AN01sz8$ 8@KO;OZA:IS}s@q.=4^s?ց cds:s7#P8q'7==P1߯u9 :qӷ@C~v>; 9';=I9Qp? +֓8sqc#pLgyR' `Ќdq !NCs<4>oNY=F= +o%8Ox'3>@XS?{ Nsמ}S߱3`d={ޟ 8=X11W89͎y1vA݌dP:ܽ;mc?7sL rN9 SǷ@?609X~n!X`(܌rH{p(8 }[*Nԙ\`un=s' xsq9O˚Q;}O7'G?$R9zPO#$ gsN:{cywz~>\ ۻ8< i$q^gڛ `Gq{ g?ZE wsg)`x'##:=}}3Qz Ԁ;UxypFNF>ڀ A#'*'bc#!#P.} 'h$ןN5@rH===~ 39 =xB:u8ǯ?*?)4PNzNF=MC'$F2K1*F%usG 1#;~l䁌{az~Ԇ0r6c>0v$+4Jp@}psLAO< ~m@<2O=i$y`@w$k  @3)c8>P~>9'#?˹qHdY#;t 2ziT01 yH'C暣YB$?q@!8lH?2|I8><0;Was =Ԍ*Xwne$R:_ևH@w>nG֚Xcyz: ԔQ1@ds@t97 9Xׁ۸HF69>3:c<(z ^~m@ L{=6GQkY[?/CIshsP6x4m#9?1oqoK#\xyScَ3Љ'$đx@ǹeh$s 9'=xT{cx9r(#o@qխHO` gj<ӌ *΃nH$Lw`zqƔ1>^zO\NzjKC~q֠󞧸l? W|ry΂Ît;q֩m&E Gպy$҉8=8?Ŝusr;Hx<{ӽɒ$In"qέIϷx?8{mR3B==iFp2:` U11מ~ =O0GACps9#N~N{2;c3ӢX %5뜞K3⶯, GqG"hNQx`QOiIooc7_x\ ʑ=?QNzNis)⠓$hׂ6q:s398=+alxbiZ!3TN0Lu+Qʟ|H*ds_ʽt󸉧VybvA+n+?{ᕱcO2ʪl6XZ弑bM۲%YnbqC- *24ۜrq7x4eNJcEp_l ͅ:1z}+hDDk tc/9"19L  ;c#ӚsksZ[$ /={vZ@.dePY#89ZNU%gD!#uO_v[T#1M#GPN= ] Fϱ{f1t`U`I^Zi2y#0UdB1~8c {=x$MAzES.8EݏURܹT u8ۑ:nIp|9sp|zӻ(oӓǯ$NOPO8qߚh8'?(8|K׷_z2@*''a{A9F}sz@&1랄vӎ)1pN8$(iӞ1>n>^1֎=f qdBHߧ^ 'nv99Ө=_AN # I9>?3' 9Eӟ__'c9:t=3֐ PxF8݂ =1'J3$zF8,41#O?ցن: }?mnM\}A84݆19ns8>ԄIpsߞ8A<v[' q޾>Gn:q4_Q8<ϥx0)#R8ӯsG? 8xʜcieqۯ>sqHhp;'wA뻞\~nz/C^8o:q#*F~8=yz|g9>޴4`~H#:S$ɤu)7'NJ^cq"1@y׎^G.*MSi77 ,x8W;K_=J /Ip=:5/|D}vb;<#h*whcʻ/wֺ*N5$YWTX&>m`L˾Cf.v*՟n]||4eIYgv- J%hq4$Bo[k1<=:N6R{s*'jqJދ;6l$2}\v~lpk7DZjcN$ȍ2v0L+K8'fZ6{TO56ie4*7j$ا=Fs\N.M$hIYt}eY@ntb (Dwp8USd5NK\Yw )_P^m :;]=1=A=+F,h$dGHUFڎRw IVIw+;H1޽6^[ʧ*H\'n.ؿʗ*_}j6MuC}wce!򯟛p8`0n muo3fQ{uSrub#1!@8'a[; A_;,#Mu>!I'~<.d9Bmy#A+ _̉eUA+ǩ;:eG zFֳss=~] ![מr;qsxyYIj)9)> x؇=:ЧՏa#lRtAMq7a7q{s87cB3Ҧar9sʦÍi_Rl)<\s'!`;} ݸqݳF[=^}i7$?$cN1ޗLҕМߧ'RycSE̜`{h==;^IR4d=2{:_OA^@G\wg4{} {A{Rgw8{dxJ=?"~N8r5j"$jYGːpOH7*=I:Sǯ_ϵ 9v϶?ƁXot'Sԃ88{ga=Fקҝ;0F2IOQ؍HrdO֭>`\t Jh:tZԏaq)˝Oah.rNGr*pُP{ԛXv4A8:o \v=h$\򽱑0=iz=)t>=?J^q韮iߠ8$GN}{I9It y F2n? m41|9qPGx1I?! co|p g{P3jN1gRz^DZj? ק&:zvϿn{ WOKg02=&i㎇GS񣯩'w!-׌ {d0:㯦)̀Ws88֗Cu#;sHғ瞜grs3n3iwry1=Wø,NOz `Qװ1S?잙c:T~G@sO~D^@Ϯ/Ɨ\>j #H?)=?Fx緽POL):S|~c򤺋0y8^ ?ǥ('<)I$t=hԞFG|s:u=sIf9#9NZc;w oufs94'$v'N='NؚSzu:=#g r}xqc~=;L:>-àn-gc)n=8idd`IҤ#^mEc~ GI# ӯds۞zJ`<2:s1<ˏ46sNz ╃O㑒=1N08^K1>arw)d xnGPON}r9ӟ!#waCd8c;~Tu=#?|1_9{SR9=}F==)1zp1 eH2:9r@y?Zwn=3zPAϧ^x'^)~d؏Q=?xB`s9zz Uた}>90)w0f@8sקpFyJK2I?){qpx#-mn6q銓iqNҁ<=2W8/p?ϵ"$$Sӆn9#{<"2:_z}})Áz> O:֋@glԷ^v~!0TI^0q?F>Nj_viDPA-ߧh'# c̀}zp|#zvxNs3d 9۷8{0g׏ϜU$+8^9=INAE^[=IG;# m:r{4:c\c=};ӷq`>Єn1g  N|_jH#б$`'$nN>aqن3IA_sߧ|%'8nXGi: p>M _dԶO< RN}y=ޙ= @$b3H랠O V1Uw @=R* tv'׷)'TlȠ-pG@2Hݏ)2s0HGz 9M# `~Tx=iQ7PG~?Zk?@7nd`8G8@ Xm8?Lqq=y'}Ӛh2IN@>:; Z$cAc }:6 TP!1#98Q3?(zBzzk~l` ^ 19݀ĶOlϡ[=߯LT2]~0{c^  PI-oΙW'v) f$rNqN;Px{:+TH13&2r8$οßS:1zX@9O\d)!sՇ'\ {T|prpyǦ;t~G#:Q?w t 7/cI87dzF9 cy$ pN{s.Ğ>B~\%{=0:Ҷp2ǧ`=yHbw9u8 3ʙ;Hcnw=sgnNeHt}31a=`d|syѸ:<O‘DlAcn$p bxqi2|r܎89OJ!B#9O`X s3I + c# }旜ʶA%0Ox$17|\dN;g"N}s҆4IrÎ0jNQv_jI<h\b1''rq=Hd<84$m2@lz {C%NpO4psh!Q:t43p,} 6а\`z$d19:+d>e=? OPݾӭ.8A=F{ clm︜Ln;z)1 3=2w#9vGa!G@#N}iF>f9 Ü㎧?ҭ=" |RXt=X3H ҝJx@#pg?B7@A$(+O08NI+ėyېl8qۃ5qd:n=I95 ~a3ןµFMXNo䟧$7l?Na{ӏnr{}CwuBcGs~N1zU dc'GgAEx`d==8ǸJƋa3lyC\d4)[r^ l6OB1nz3t1;ҵRooFNWRp9iAN˅yosϹa)bbi[IVBr韥]Hd#G@v~K/ZyAJһ[X-p0~1VIbhN^ў;]Rs˫t"lݷ1Q9>?q9}CuLV~c Ú_w81l,A( T J9Z!&FϠ50mNƵRV:n>Ye mߎ=F_ m8gj=Qoċy,TzC 6V)%K(*+uV?r/ZD;_|qs4JV X22^"g,l[ƮP`1Cg6 ,JWbl  AEhpկ)7捶 9FrK)9s̗Jx"G+ÌtΝ=g =Oop+(f˻q so-nWWh ;\X8?++9;YxS=Yf R4"]r6?_fe/6`@@<)'vS@w# ީ R;vNkr}"y&Hft~ \|]tsnNTE0?**##{+Q8Թ(X瓟nG-:Xeꊻqq83^ϡ^O# ll :5j}/ba #<#jRĿ+adP^. wbUc@p

k_J|Y̶]=H!Bᐴ8~.} 7PW=RRFJb.1lv`Hc] e,G`z{i{_DY@1Ҩ>; 1.=r8۸{5*6/_/'׸<5B@gS[L XQZƁ OF!dI9q  sWu)},g`FH;J{Tl'qQ`0*oR#ǃ+yJZ w&IyHqԉUK?^+T+Tt'(m?,dVz%ʞW sO t6X45EKYOqۿjK}RU)ڡe^ҼV 3Nֹq\KV@ˁ<<EVBce>䞾'u>hԂwĢ ޭgrIK3ߌ7N;6MeRے1`zV0qQv{XwBo鐤sc;;g8/J~H0s>sg9cs>fbzR; `q׏H2Jsix8#'c8P?18#ǭ81A@#' !OW'Ljp?wq[H3KƲLn$r8 ڙ[͎Tz9B8=ZcᜌOoi9x`>sGOǷ~U` ='v17N H^h>PI)K>6px=[X6:`g؎QA@R#֠瓏c8=4>1>lG8ӯzT1ޘ y`p 䞟jL;<'??c8 ;8*NI'cz1B AxsO 1IlcۚldqIgv-~sq@ `z plg1JO`߷NrsیL9^?ƇNCۮ=j68$sӧfa{ǰ ӥ1 sԎsc8yˌr>sf2ǒy^=N?$8$mO 'I8?FNFޘ$\q? \zRcVӆ3#“< :sK&=X>20z;~"HN8rp4jrǕhǸY2cƼ\.d2G`!%B+|"KzX9-bL$bnҊv9ON8Im.Y+,cMǑ'< {Wpڨ^@;y !{d2>եOϻ/+;dVmf|R>U 1 YQvZ&Ѱ1ܠNg 5WNSO>)E]măN?S`H4w*om۷iQ=H_5vv,w%_Ww-;=pʈ`t#Hj1h4{: eHmvn&n$2j!kbXSwP6 _9-ޮsk} 0l* \s}*[Řa@YA L֛ѡxWKkV)[bݾDGy6rk_C`qgyմΎhPr]ﻜ=^ Ek]iˌc:A4s8Wᘫ1x<.^Wvs\Zk)ݝ9d5Mii8Ƭ0TFrK;H# F:ΙDul6\7hG)Ƿ^y^y?Gsrcp1M{zpx ̩6j鑦4J6ۀߟZ6sAYΑ9S?/$q?Jz}y9eBԄ5SI65ei׫zOi!M9Q<ެ/w +$o>6 灒Nk%%},켎 _@ѴIdJ׀2}ZA$#_2z{Nmzܪx{+O:eԦSou`s *KweXԕl9bO[E=igX[&3JcBUrO<U(K&,#AS#p,cSRo⚖ϵΒ?jЪkVU'C6>jK7.xnҶR̈́Փ߹ ޑ-6V@9B#j`CֆA-Գg19a eps:MU&qfp:le&AFßQ־6мY貕ek e K T2_4h[&𶻧<>Eeu o+Wkq`F]"QJN2:ӭOR*=}=SWZWK^\X鳼wwr"+W&IV4[Lz|E<7]{\יbѢfk}zW 4+ ̠#ciy5f椦~eQql t1zl&v::l .oq58mf8<=#JNey8ZA5ՇKWN[Qϯ^M:KVKgi>>FQZdpۘs,}:bAT`J4]F7=Ln8GO~cr;|ӽNOq=Gç4'C=={OS{1!y~ZN=8SCzd#T㞤 rM bN^:vNzC?.3Ԝh;pG\S0ޝN=4 {cs_C<}j3C}p#'1dv#]|9cy1Hnv_R`ޜ8Ϛ 0\x `Sʂ=:gW`HB''?OO/XRZ@H>ܜzst{s<mE#AW@j:!8${~^⁏<`=}@n{GN>pr;?s8֦}''Ulۇyx?#K Mu=;1C1J~aè:usϨrO@v8 #ӧӮ9O}x$Al;0nI&x:q3 :R>Dž?yt~dFAx)/'뎾3 zO׭.·3HA0?ZBOہP4&q؞1AH'gzS{{c\g@_^٩u Cן 9_|t'p:_ʅ`7c8O#ʀ`u=9:gQ럗} =h=?J@7ۯ֐ӟװ]!!G?_CKO;A˜؄t'8g#=x:1toW4A0AP7 0H8G\ >)ܞ=swc A:G98 1q9Rq::cOjlC1g)c~GJ}&x!o GOb=)!hۃߧӯ0җ'=^\PO{cڏQ7U~oN3G19ztizcϿy0p{TeBKqzv@ySwz pcL,3`pI<ZaF9$ZA''hސ!ys {t??E'烎iq;9և\>jC׌wքr}Odpsю$q9?JOv9qۍc޴G8z7hcO`uiqǾW3Jzp@&-2W9,q0:75'}q֎31?L} 8=sK=;ރ |q< 7s@翵;|=i F{ch㎀c\~Ѵ=r87~8)x6߁z4+*F@8lt3SsOj,;?Lt/}݁jn2~ ct)'Ӱ9A9 pp#N(6@UA=CԂ>EA8&={~G;48`BrÌdpZxקqߧ''>ޗi ww9?S(8(\7<98#SC9;Fy6~ p0A zrG^AW8=/5"p qL^19Qg?s8/~֩nHp A09}s➸\t=884<;֌gq$'i% @rqG)sӦgc{HrpOC͞NzH׌֙=: IJ [ fdߓMpbāg83}U^~c1${s֘sdbd2jO|ց >Rr{mƬCGS?)035 돗`m3(/sH! qci݁;U$:dq2 -ן֒gq׌qO>\Hr#=IRxs׸qHPdr(nzO#b}>,>pbx #C <L\Sct8"dRI$O`M/99W' t sO㜎Oῇnqp{`;$)F$۴dw; rGj@`KgLw=)vx#}H`sNx*Gnp2A$3ޞ4Dw%y'CJrOHߑW8,:`dgsH<`Ӟ,!#=v#<;ǩ?z0xN)sA (ߨ~}%g^(@=X9IQ}:]NX*:N2O\}){:>]<ޘ7?NW3 RGo@cyݏ9#+ǽ7]?s\=ZA\IGz7.0p21pq@ 9Eg #sI3bG d׎H$+p 8s3<>_$s}8=ps*@94v88s@{gi SAe dAƐep{߭7B0IN}M $c;0 9>Sy9ֆR"٠?zNx m䞠1tsÌ#$3Zf$듻nx㎼w!\z遃oFrP(ccd=;Sam+q߅P? s=93=03ߕ>})>$.q=:ӛ;q'!ޘ qxOPG@:`R1 (#<CK6Mo\mAaD#pJG#1xNkwc16y$l@˻AZhE8 Cs ALsR0^HWh<8ID1'9)H*\˸Dq*{ ~Ad$}0{b`\e}98jsܐ''(mzD. 9ȧ+;ˎ9>ҸIՇې=9=*>gnc8\5Y:2ǘ:v8 9x=kbLL~w'2ȧ,Nch4ѓC"s$߽hfJ20:wW9a H`y'(, G$Rq=jPR;xO@>ϰӺ>l|z WÒ=m>CԚüVd |ԡX͎#<n21Su<a@< J89权 oU}`sSU#4^3 gZb=0Xd8l} = vsE9~nG>>c7'z@ z68y96{ dul_^ p=I1I)xg `ط8-0֓ # 27 qi2=z#,63 F6<}9TW:wN'G?`!,B*@ZiEu#"nƻ-?2_~UƴmC/e#m|Ay~Mp eG$ sWKl [ PzN5"9$/J츐(,y`ϷֳdQv|wj" 4G8 =9 ;UMJVrm?zSz4I-#3,O$x% |8ZΒ˔坎N}H|3ݤE(h gk'};N?ն;ؼj6 Q[a̠ bKǑiB-Һ0 UQ[YSz5 T`!☔`6{=*و؀cs^:qr%~ip3mi# c, Bch`UebX2`īnEtF«X4_z]a}dݼAsZa5&Tݙbִ;fgU6rap/Kx4IɹG0eSQC)vϭq*sބ}]NDK;Ԕ ΌWaڮ:p}+'\@$4,Kp[p|T֬.f}N+'5ye1NAA\%s%bd,~I7:EP;v+.dnLEۗMu2_Κx$Uʙ 0An<`o{%-^Mꪲ9g2~QY:6ΈI;-Huל4y1Xq\z6jV\?ħ.;@y~RS$!\͌yUIBr>xgi2 <]"۶ `{QJU)Gn[O?vCF'n㑞s۵uPX GJ"3{5+agiWz5Գ\<ܑԱl#8)t?tf2 [1o6wUNr׶G--{{kdU=yS)9iUo Yj-Q$LF7u܌?%$Mx8=4W3$2͜gry$i"&=36nEzTڴխ<ڐwF.lck[\<օQo? jgYsׂ;@ǚtAJ{ݾ̭U)2ir[Ϣ|%+?E䳬WсBOw0|fax<\|rj̲XGiKI|,_SUSU<èھ!״N.T\gUʶ3s~ec(r./³ғv{#'m6n6y!_nXaݞ~SP P#F4Wج%IJ-e=N6NPhG$P͞Gֹ ./ήc`+.>a;VQmd֗4nϡN#w)2#cfCmc=sNƢpN>hڔedji[H$퐜(`9^x5xPleS*A(J3Wz6]+*u A~W%~Bw)-p:Z{֓[Lj-fS#<ʊXb8sOA\؜7c8Q0B0#rxQrH ~:R2 I=8'RGGaӯ_UPnqLIdsT_tzzygNdt}N3''?@@=r9GP@ >S`;}z}@M8$B(8es@:9ۧri푌g?$^O^1s~8 `'IH{u#JOa)_ՏNq8=?Ά%{d=֟@HoqgӧZ>G :*}ð:6O g$ʚ8''* ?<p:ӧԇ><8qІ3zt'gޔ]hO ~}}) v<@4փv'=Ol3~?ΐӜs9OAxR:d~5])L~y<)8sn9$SOA}7bOA=u\`zP168>i9> {cL$s\|npgޓPL~_ÏL{:MO\a z랾F=9'^;NƗ=y'x?Ӧ*n43=j,,7`cy\i ﷯\Swpx#$AF2H0<Qc냓(za03=F}:ҩ$uxߧ)7kGNtF;Ӟ 14b2gv:h!S H9-( {j\t8-~r;b'< 1O\P r{nzc`=@px9='pyR9Ryx™Cˎ:SFrq׏!チ@}:GsU->}{gNCR[@Wqbt}ҕ~`>tàA8'};ר~*?CH>3=A.GCǯS:緮~N1ǨSiNǀ@{zX^c?jk}x 4~ daߞlI(;ʐlgpD >=2N}GOw_ :3p3ߟL-4sNq܁ק<=}1I'\v̶;Ǹ#>gqBہg{R(xO81L9?NMDgnGϭMs݆xlSAo"s31Ӟ3Hs2 Hg;eO韥?8;Q@ywOA0?vdtq@~c#B1G=?qsG&$($`Oz13~Kf>K02p:Qw+ 0qKpI9#$#!99c FNzӜzJq=?NU~ ON;Jvt=8 OIn Ӓ^1 tl UPGrp8> sRzӎ2}?X4=0ylg'F[R@Q&{0@<ROh{ 3rzێ 1v9=:#38L}^q{u=>cO~بq^??ZLx#}GU܀NH?i$R/<lh@֭n]_סnz@zr ?~v>obG8(rG3Jzwu㠦:w c=FF>mN8=8a `7\)#0z 0lpwP8R~sҁ =hzOˎgL^=;v8'002y$sp9АH!vBlwsw\>€.Gl$~=zSC$ݳ=LL| A=K =qT$$)99p9qRw=dg=󓁌0ux'l>Sxڞ1p *? gO\0Nz)=8v:Bv :gOS03)0x^2qzv8#+_M>r<wNxU#$ ~?j`(9q遟QcЌsq1A{}y8ߌ`^zIcs 6T;})< hͻxQ?qP?{>Q1#F1=}jLNsVu'ss׿ }˖9\}*@#Q>9gq:qDgy_^O= 0r=^( f=F=3IxtyS;NIyyǦG?``Pc֛eHqK+yxǡ=)2AdgLAۺ'p8?nIivN:L~= `wr]q8,'9AbApzxwn`g=ϥ`3pI<fXW.:0E`}a<)p 'i9ocz}*s1ycp {g{vҁ 9 i jfӇ_9ۨd/V`q`I8g I遜dx^2@q9ԓG^`ƓAz6@$(9=y#ߌg$}jF myn2 y4n8Vw`18ǯK,A?+X{Rp2sy هMK/i8s~f˒Av/=o) `x8'Υsn'㰩rqrN;;}:0׎>>O=8_^j1wNg%p2O3ȥmAs|*QBz9Vt0` ' O)% ǧ8#^+7|23HF>V<けۥK2X9X 8<{i0@z-@#%W2<18s@Tsg$32r|bHg=}z~tQq2$u*;w5(c$ 6@ÌymqpzcC 9'vd9 Uqzp)Tg!G#~۷sxt<`'$G_^NOpƒpܓ#9szqN<ǜ142co\r SH8`H݌l?Ni%V1lpipz?=hI G' {cz}I AAj?x>d\pocp=gq_^)" v$clI#'Fv08>%9F@ϵ;?^Ԍ}h j68qy62NIpOBd`1%BuR1#`0y<{9b0 O_N+jP1dۜ?CGV\ϳtqJ < pm #9}1K}O8 \G:0:{zC+S|.KMk[71|8<0E{ދ+,'nY%x|[ ANm|/c+:T{SI. _8kt*Cb?'kٝҴc{h|&΁'Epz f붖SqASY(9 Q_qڇlC/ p|uڿf_nT`Im:@N+}ʤ{]yy-Lv^yݹS?|Gyp@qu,Cw}=*k%go1ݙr.sݏ8qpZ vF>Q$^k?3|>;-I eZ&2UֱU+*waBEC\y1J]O'~0R. 睧 }1&bNblE!r@@M\4_%չ®!|\v ǀۏ^(R-wy$ρテҡ8%n=Sʵ$U#0C#*ـhc%q}z536#܆-#vTKm06 ?^B'/*yHb~HBt cNӕH遌k2hV0p;یxV*]FCW'LGn,.+[x,u8?JT#! 9'޴Uԙ?O[ V_F- d` 3ߑ!ߙ-.-#mLH 8UeueU8 QH;O?_zu#ɷ}5-P; njVu`^'WrǑ5JS7ش8PW>٭M7Dڗ`  +c`g5l ^Cc9;ZFö#ċW r6JWLj<ϔqʇeH>ZU]%wؑ5;< t{VknmNe9C)Qv`m%XV9~/K,A%~`gЎE:_mJe(N%A^p{sQlD(;~c ֜j ,7_o@v1H^p85w%;zUJJV0B7^qmn`C0,AtsrgC`Xլ{t0gͫ3ZuD,ǰw:8ih}|ݏtфGy8,(':=j` =ji-UJvz;2lcx'UxPNӓ^$cܥB 9ʒxb}x K!?{q5{>"<ۺ01zt'I1@p~<~g}=LxtG9 U`u,azpsG~x d*DP}dz8Ivx)A}dӚw\rvG#Ht91RHr:cTC=z/i=F$pIҒ}wךwp p9pP"Fݕ'Ӿ> I,?dt$Op=NSPFh ^N>nޚ3c:㯥$1N{u@ޗ;pNr{(;a\{z0׌㞆hې2s3=y"9 @T(ރ= u׌l8lgzt@  p2=x-x|c=Nr9@ 9 d?Î)III#)1܌ ?C06sqRƝ~4NU ly]'?ZCWG;15.w l`#ұLG#pdS1 xU,-6?0EеC#O(9#>Xd E9Tu:ޟVqWԖ*Sjg%Zu=,<VD8Knk}fI$B S?J:Li$ %IP$:twob*|r-+>vL^)&IS8|Tvii G!»k5?F=y3~*^]qqOp~{})aӏ|>zuK`(89G `=1y1 㑞g?_o;?\cA𪾂|u8?F1;R1oCҗGn{'Hg 9 U ^=1O?Dx@<ZLhL0vܞ0x>Լn}\㯥/GLqq~Q9s֢9lgQ枤wWA88=:SB9Pz7M&$'ݽ9}O 8'0r8=' cKG:s=Ng#d7'~@Gϰ#}x0p#9 v'ui3x3ϡO){9䞴vԏ}Mȹg `FH 9h}z|^S=: ׊oS{f/H3L\#ГNs@zgF:zr?U]89S8ޏnې1lԀ19n?1קGuA`{s;}Fx{`3Ѓ~>as1:uAwӭq&~:޽~813򞇐HO})^pw9׷/^ }M28qh=qO }??U `0 뚠p1MG&Ѓ>]@0((nޟNpw皖<>ogsR1@_srs;.'HVct9Rt1@X8#;~=)㎙=ΎN\?ZW sǡ'##=O9$7w;S:$zu懿} cO{ t@?.~׷_A 9֐xN?L|ڍL=v998L? \{g`= 79=}A~#iFp}O1߁Iө$<520y t"y'$Ec;S=31ˁ#N{ {|N>'v'>dS2x=:cO@FԌyqi=NgϦ?AqrǾoO3>ZX`=ӎ)zv wB9۞R8нshQ8u#ޓ#qc#=NG)I^}XvcN^ǟ$pOB.O] #=W^ݱϥ ,!'GNSc')[;g(xaӌQPҪxbO#QMaPFxzx O< 搟cPSCKrWryRpTn~z!r2x It{?'iO3\cGo4:<L_]t@89wp9^(Ϩ7qsIO<(>!x*~Qg(~Ns{ t(>܊QӠ==91 w4F1 @|ZL{i-ז9{1H7<y`8{d/ N1ڗوBin϶1`GnzL;R/£=9?ns{qpGQSqGK}C?{<`}3RQH#=RrH cMnKsgĎ QKsZԄxkK]OWg<v<1?Q^'cˬ8 'qWs'<AyUmXc::Ntcc޺-F(n8䁹jxmC]Q`c@=*,p9$z~N(p}|~BAcNH㷩qQǧ9b9cޝy=3Gx@Izcq8#1ۥ1N[g0?€=s=PS\zjVc Y9Ěvs8@܎>Q@cӡJ '('9ӌP!Q:ws֑rW+ gS_9=ˌ#NsFG  2qcRqۜr~c)3Am IFJ-R9}Lg'G c'L<1<pbz]Lӑ8V#OǟjQݹSxri7`'bGք1TG jQI?1HG_c$8Rs׺ӡ )@#?xqi&2[*P~bG@ 7sO: :},rNcsRڼ̞q{H1ܣ*Ǿ>cS8rqW<{9G(`>Q,0;2s''Y@iВr4v[gv:;0 vr0@$u:>l=.{ڞ#w A8ڋg'=Os9{vqۂE1R2qx10 VwF#ivb%9^}ߓ㑍S~8 þHGzҸMñ<c=i#<OsHb3:{ ֣8Uy'ʀu0k[鞝OOK) :Nç+A@tHkr.O,<<<`jg9 H$8p;`=NTp۽zI#(z@h9 daATb=qp}@ @<=3w) 0:^Ly;$ ~8Hsށ,B-uz瑃]W;G !=p38n@lvx$wGrC7>al8 CH12㚍(8 N{H|ce8ێ)rg_QG ryV{&43s¤8`W< jE-^PG@x<Վsу1aS!m 7(Ӻ|'zPI;(/͎}i]X6sڛv̑O@sӓژTX}GqNNpNÖS @84F$OZUNܓʶsߡ91BСHS`^:OQGcp).Ag#9 ܞ7l~\Z/99jA#$T[?(8*p~^8T#h$G#=4ޤh#qҘ09 rPlI=A~pIьA29Ɓ܉9̧vOlޛbTgT) I<8$/^z7᱁q98ג) OR0TqIoNV*b܄ 3'*qޝ˒H8jF|zf08= g:O+O'9%sд Q*zpћ I~M6|ܷ;FG8#^EpTd@_iX6wqS b0v[]Q2s==) NrsӑI;w?ҟ ӯSW=:{ W 0 p1M <NpI'<s#;p='zT= ".[nr:}=rs <Ez{SS)b܏\Tv$]LwϠ梺 dz ,W7Χ<+$H@ didnrM{o*b,Y08bF8g ^$n%AB1>issn6$/Pn FC+7';Sݼ'rl})h'R x G@ Z[BMBWst!2&;<ȃ#*yl{`U8ݷ&Ns߭Q LDST$ҧ^E pCHI+S:hoɖ)N:=z >HyO|09SRD9RW a$|'9 ]0v㞣1+8mBuD?y AybQ55O)IM,d2p~}2S p% m9z[|KzerqOLGʬz/Pzar^[y<~a';sǏH.$(~I u|u!SO) 'ʟl2"DFݞ8櫝KBN|t^8;oVGRO;G#֪wFgu)aU?wydt:'(1d 2sܚQԗE7n=VO ܜt*ȸVՖU%)Bv+. +UQt{c9fVK#~q-`ɰ#m䲓ʎxϩڰ3f'}:j\ACc5j:- F=;UI (r[*b G סu'GC5U:mgOP POnz we${VN:c+y' ̾sNzz܎z`dg8#9j;gu>ԟsh9 >jc;_Ɠ<NH=1Ҁ`^;C' dvR !c`>(; sO ب}i'8*s֤Aw yqA<p3ԟjhO̤.=9c4OL qry@2zd}q8'yd#tGcL\{{ gԎGO |=qs~R''{N:uq)y'`iGQt{gG`AԞ3֥ۑ|c恐@''9=iA m99:f?.7~nF0}1?7 <=};P@'<3ғ###$' = s܂>i3ۜcWo'J@_a 6;Ooc=y9Ha s~1dG{RCCҀ<$G8Q?E9h'OΗg9;Fd"vb<h0#9|q[4maTK*}%.Y'?yꗐ)Vq3$bpIpG>65 _`Rdc =k[Kkw@/h,,°:溽;6y4r0R"Q8۽]dt$r,n[;W$q85{koum"̲HIcjs/Eڰ*k{iu!FhѰbpݤ:Av"M:7'=hmWmn48ьcGdZ&dXڛC`m*Ho|*n잡*ih?A`l. 籮R[{g91P(I@[mʗ_d@vnx`^?rdbbb)T`f.qUͦrje;{Wy0#u1c/p<|Ÿ/ whc{#$( d+-7˕`$ p11rEYdžL0+CwsmsJ/+o&PWل,2g}k=U"R4I3;3[iȚهTRbtXVQh}dN'a34Jmg:HiWE8`zR;jo71Yv(Yv<ΛpoB1=JdoOOmVԻZXvRS<__zv: / EFėwVu>'_HUD˳dn<:uh㹹sYR-۶zsW+ٿX׊8]r6g qUm^]58_*8IC $ Z{M SD3 \q,`m(tNsWe&C*F;/QߡSsl)]B@9Tw2wqXgZR0%ăw@zdPtƍ@YFrnq(||-׮8jPo;(0=3ڛbrU@HW#3Zu;MllS@ĮߕUpqׂ+HG͙[HCuV 򲞽OZ5&HHb~O  Py(h1hpd`AJJ9= Y[6ӓxcOxeHg"N}> 3o*pFqZj1>SsNZN"e##e?xg gWm{*AeVt 9Oҽ,>#dbVl54)#@qa_ bEr6"`GUX`0`q3t]Ys8Y)JGkhZ]|%q!Bp@\?7mun*4XVO_aWZߦǫ[OsͰD1UWs{7P 2HyV@@nnZG/~vWqջh3K=Lh.<N0]_CNH-Gثl|l_ rbfr9 {Guomb!4܏ r)~ofZIc r=̱n` wr8>r/m/%(Bgr?ħ۶*rؒ8r~HJV[z;{O.8FS(2a?9;=kjQ!~]8957y#YFtÞARݏjX' dnnFRˡiu2:`J.|݁JsPqwG;>7p#=}kaףCt|GO>dwt6DZ?0s޹:kqy}Ҕ#zq;ԁ50>TݺPH zr/æpqO:t#=Q~J\AG~>sק!lO֍yN8NssSOQߏs=Ohc z=<_dpsE܂0\`'8 L`1GNrp=?h9$c>O\Q#> 21ԟƣ rCs1:@8Fpr>,SAsh$w۷_ϥF:#ZRav.A188?JG`{{F>l{sP@C@b_;q9RxG^䟦izg8nFR{í_@3$9zs~j\cZh;s2GA3{AsRn1B ${xғs`;{3}h@s$qސ}OH}7qO<@o@- {B5r##4Ž #2O(N}q?VR3(@?4x@i<qF}r=i7Yӹ=q}ZlCArO Iv7l.vW)ˏ^ysNO^ K{u 'd>Sp:]͞ÂI9+霎qF)s|_xAs:w}O;n=A8 @0hLЩ nSAtd NxI=?~:~5'͎@ÿ$)Oia׿ dӽ<>?l݉g׌zRn%۱GݞIhc98iŎ;/PG`@ Aǹ9tr( z);,FI ۹,{y8~G9S>lyl^lg֩ƌRNx8 :BZ9,Nӎ=i8ݟ>P!N3qGOŒg?'#QlUy9O<Ǟ=pzvdr luGZ؁+Zz4aWfkŎM=8XZ$q}^=._H'}[<ʄq鎣sUo=0: =]P{yE#<O$*dmxd|߆x⺢Z'FTʐC}=jPO'=Xv8;֨?w|utzw=~C~ (c8<9crzsU)烁h-8?.88 wܜ]GJI'':4q1q8"@^=3qځupr})x< ?g4c<9 =wP|0;cp9ڒr{aN9gc 9FBO~;F3yê>T8 79ﴌ9401$NҔ'S!<݁=}79QuHbcx8} K.prN=ӽg(=s=hc8O9ɠ.;9H$==@#`HOh lI{{T{@9c9@08;} \t<Ўyz݌s;10s@:=:P D@=ʌd3(#n[8gg=Zd2N\g#܎8 1z 4"@ypO枠-鑌Oj'^&NOt`'ة;0%^pöIɩ $ϔs$T`x#vO<``ޜ8! `~t`8'օ8$ 9ԞCp:0T㟾)Fnݣ'$Pc(n,v0z郟 @CB I۰ c@89 zmI8n#\wQ1~l{t43#l sgh8mўM'|4 Irr~b<90I8> n_sM@ 8~&8mی<Ã)^#3sztw<۷=)2z=9aP6m9.Ԅ?vX/CH8B#sOzc1@ 9ݞrx둃:`R7c[pq~Ȣf{px=G˷h]A`s“gP:uuQ8  =T95?F3|SPpqٺ~y{`p qTZv~pz=}G53 T> #I9뎂NrAb m? ۾\`I=N3Ϛ@N9''pǜ8ڧ sȥx8 r0=gМӜt9Mۀ@- <#H#Vl g9מ㓌@`<66qsnTB8ЎsHq9Np2O f9ޘcz{JHvcH$#/}8sTj8GS)6Pn<`sj=0X9 [9H0āw9*h<0*Ԏ2{HhO;q㟧8 $}he$}G,E2J$`[?w=l`r(QI9瞾Z:!n<6:wjn q_LC<11x#{8T nn:;cz^^cֆ^ q0p=F~lH8c>QӚ" t  ,bi3c_ZEtNO`펴û<<`cy( 9݆7g ltn= xJ^7s$H<1dQN9ҞrOts@deNu7\ HÃNH VQϭ8b:#F:d1o$ Sv h}A.I$v?(88}(<py#zR`g9 @1^03 㓜:=z'ޚ@gv3M $2w8&^@)1R| =e nGˑIzJ0~d }{cޑ"uNU\z zusg=Pi'!8QlIJCn[gJFHpK{zy; Zl`x w0}U9$O_`Nz=>vN#q=H96<L&1ǜ`m@Hj2>n01䓎}Ԧy9<ߩ4s2vڄR>ߏB3zsRወ@?ħ?R#s>݌$i?b6?`!~l~Tw'sE: KnN~Os= CݗF3qRn'㞙dT%d;v$sֵ{#0x}ϠbQIoUe`Hs;|Ƿҝc< ҹhnvO0zԈN F}~qؖ[:q5cO96W̖+`sAUX,0?7JҚ0byD:$d22/GN@FO5ͅP2 庱}>f&.F0lW|eQi{c9W,%,0!*8Et;>h JC+u<$cӥ)i6R]NH9p)7}L䕙ug2 R#ZBciQ$`SMT}yAtA㓟1XxPznycq0vQy==z)6n* ihczaFCV%ݵЁ#ltf~G>?yM4-!c\\LnR2=;%ya)Fkc2EBB>øӜbřfA' ctY^D)Z-dmI2I~S9fJY>$#뜑YݝiX܃V|m9gyE-JpwzI/0~2UM$osO7V|0V(lqKː&/˵9ʒcߞQWPw78 vt+ <ިY0w9=;SghU9A=2N[&{\JR1r~ltVM >t1'=IM.]Dmt*îOA5xLc>R 5\.V*0RBqsY&Te;f9i7d#-ԁڡبг(p`g#=:  Wsϱ+7<Džo8_sP݀`@ cJbF'l#a#GsVlW 2@c>z&6R;C*+X;ʦR\^G@< 7=03B! 'HVy=^ԀP?+unq ;3bHP3rK==BTl`NG2*ⶥ71C$Nҿ$Z7-0K #dq5OZ p^nܡv(]dC~#Y7BL3l߭oE׳[P(G (8w uxKuO$=F j맋VS] \Fk64Jvݐ~L6k4RÍlʬG\`͇#kzY'ǘ5\yŧh^F|J{pJJ >J?ĴHv6eXᠥ̒Nky=JwּYWno%srzd+Px(=WrʔoƘL,Ydͪ VbXb:6n1\zqF C{/wVc8#hNhw g-' I^%T!Y9V*{sSrĒNqo3hRݷG9ebF23W!IW3ڹj2G\F sܹ8 'Mo6zק+̭M#2b,.IRWn ǣScqʟwBj*;H]d0#$1r9RgU9\W@<z<B?f6:z=O.x#*H^qw$wszxyt}? Ǟ{d =zQg2܎<ۡ $s' qx c' OL}s֗$|*=rO S黡yprSs+8Q 2O v#c،P1ߓ<:GRG;|׏qcF8,uSR.q؞F:yޘ.8'iH>\g9t㏥v` 8OPxǑrO@}:3B3<ϭ4tq߯yIۑ@8 })r81 <נloRF;8#zSxd cn>sItgGZ3۰1zx+ 9b0TI H:Sx''$Fp6$ӟSG|qא>i?=2A뷞=@dן(ݸ9I;jxOQs8 L#eUe- zW,rH <p °Svg:%D)3?+戦I#,%\$=X£{hE8uGF ;Lef# o=gHXxG.XN9^q3^qO2Z7]7Z̉D ! \6-!԰X:8 \eoӋưܻ<0Ͻ8$nq=22 gm7"ȦB.O p:=A3ʀ(A<Z^&X](z\ŋmQ5$8RCGE3XWsE5|$r <2G=)r BZr)䉓&He<ۍ͞WzO+1&C r=H .^/jc-LIUܸ9;15sy"|Y u⇠֠t;A9VOvqveB1kRUm=uu?ʦݱb$P@<{qEKO_%g,BeLWq91@Ju8nܮem"Xg+e&~N'欷m7$4#bb/U:s5Z]{,&U!BğE=9dl'jc˒灞sj2Lܓ3Ŝ 3©_fX9Yw!I=OĖ'Med,ۖi7l##Zb.ޭyL>aÓ3ׯj5~> $cd0y yyp:ve|W&rL8+1#I=GVBm_/vXۖ=>fyŽ[DDo HT+b'k穔 vUQ~Xnl$}:cB@C XpČ\8&^lܷژY?w)3Z͋Z;~Č B?B *71"=[^-࿑b^fl>U؇3LK9X[kjvHwΧ=W9'y3:UM$l݊ˀ3rkK<"WKHprÜn{Ԓ2q}:nI&F\Gl~$R<&ktP rVM;`iJj!)\eM2cI;*Pek"Aq#&X_ב^ncYe2kBq w?ްdRzgtǵ~gMzg -7^犋R6==kun921KԎuzz{T@ig;J#ԃ;RsK84$M߽Gq>ko=\1)z{sߞ¡0 {'ϩLql$`cta9d>?CJ@3ׯ_A7O{Li{W߯b0U<K`ry7wC灞?Iq'J7KcG{zqi OJ #s\t?֘XL<`ϧqMH<;{x?'='ק}cҘ?w\~IA8$4d /{Q}`:r=bn Parq#?Z}F(%xϨ㑃oJvO<2Ӷ3ק-ÆGOa>S֚899rqF3Bx݌_sJbp:=;{ yO]ȧ2#sJ1z;p??L{qaAM;g-;q'g:֧`&rzqݎ;>/#} C۶(OO` ~&=>aA <}!he ]JN02#ן©==r)>!N299zMq$T;\7׀9tN:{~5),!oNy˜eG=;OJrG~'X2>I7:(x;?Қ,) ';,H0Ag{ޚ\x&B<8}Ku;$q n's>O= 9_<`.R{S{tIn `3d0\4BNx-ӦySilr$d`tZ\Ts)'O< ;pn9siGMo#<M(,z~(%U8NN*.9;>߅&Ϧ>n~9n884 x|냜:#Cz1$qǿ>ޗ?==Z@.ۓМ inrxv%{;cqQd==_ooSG_ qǰ}x8v#=@װ?BzysNFӍ:cڜ{`u9}>q$R88>:St;[LŎ8=)?O N{[1(e +a*׌9H6G99?^*`p:c t<~3 "`}IO<x㓁4'9Ho#88 H9?0u^3v`Cg'FSH:eIN 9zq^'ړ8pNgp1Tr21qdF7c{@"38\9'aHa`vx<9'8䞧B8 $2iOA:>6'pcMzqxqɥ/d~wМsy͏kx1F~);O%y8ۑ:@380ro s$>R twv?)WwˌcG'8J8ss4 d|xb$GA׎\d~TEry<=:QL^pN /j!IA$U>smNw89Ӿ1R S<_i*cq玧pI`m#'~BhR@Rr8Kc Vn^FiDFz=}J/S{zS@Dۀ 霟G҂p WL>u}q};c=8r}AN0I9Gqn})096vp=):)$ag vz > 'by 鴐c{bӜcr1x4HI80{u@yTo鞂aN:s(99?|g<  s]s y~?ӪG\{P[ϩNqzm(>f1<`ts`yXG܏9j`>uǦ:ҍ$g^r9) ie?M9v8  @=IK{gz{d9 gz1ӷnG ku9> o1$vz A tG^`z`;AS E 1H'p#9/wFzg3֓$9ywRq c9R\HRb>r3~q;S#1Sǿ\{R]F?z {qjUt޴}:r1#<[9p18܎g4-vyd`8I?yHݟF#8CuwZ\9ŁO3֘''m F-H^T x8qFB 8o?.r ǰ94i ߨ޼c:OACbu$t>N9 8#E5x# NOڜ1:pqL`pĝ}FNg͓ 1kJ5`>#7N{PxxS$cl.2dw+ŒX>@멶=xH37oz O7crGFW #?Μ7)+s@N;07n:TʽN895K$p:G*&;pNc #}('Q('O$x=j>Fq$z {wSEv!;wg'w^P}*KDc'n9ǦyΑB nG )#S~^zZLÓq${;U B8LЮ8w>WR0NRv8a8sz >(;p\ jd~` UQ#rw/B9\RzϿJAG(@{SS.Tݘ!D~V9 '^s'@sse8#bZr@A,p\-&9T au:_ lu{y|f m!hRn>L8!f> Ͽn4?z^AT|E:g8Zirf0BFvx\5oo1bp q׸l-ɈD2!ʱN2#TUfR_EMK.cd0FA00+3 [liu7!S1l,&|o- (>aA{e!p3?HsG%Z.NyX@nd+#8Zؽ4c r6b 9,O3u?) 6sOp~\`q#$'-' <:q׭bN“j1hG0@ւeSW KcE?)'sG?2~do*ґU~ yƳb3) ᔫnwB:s)A[nkh-6998ԮBʼnMPp+7`T~_ʪڣ0{Pn'u'~$!W%<7bA#)NQPn`H*,Ďߓjh̥nU|pYX}zVmƔ2Q.DIFx jk9s eTT1%F8`TȖ展C(vH$.[ɪ7:TAeĄ%`gz܇ 0 ;T8 j#,*{R1Mqq 8'GOv{ Yn$p}y5P&N#^]@f=?Ϙr$3 ʫ25&V 2!y=J `Y pGѕcpsV|m{|y8W )>`#=9 80ObpsSr2G2rIx<+7;(`~Vy޶T%U88lr1`8z$GJ-5"(eISsv=T|bT7#g#~3[G~ܲɀ @죯JsFVe ='2'~J<6?6=O֔#Ҥbps91u;p{8L zq<1~ԑ#'Osv3a.}MNpw!y'b~lNG z1Ll' Iݞ)5uH/xU&YbC6TTg|wA^B*Yܜ U\O(>x֡xWg>Sӊ#n;BT󹑷zs׳55ǖ_q]7CBڱ\+Iqp\q={\;qFPdezPCl//=;MCCLQP $)*NP@TugMGA6$͹`0ү32U!\0HtRօrx`,Öv$zT#C ` ɬ{vmnYO+0O~)XTCČۆb ܥՋn-KIf3 G88L/A5=D݃6dsN[<f[*}1<{w#.Ab$*_1+73ЖQMI nIcu'a@vqΆ .wBoby탞3 729'mL)/51.n Kfby0RN:g4"6d .0Xdcݐ=뚮:|əq :g>]8y9!LK<~T!NY 18$vކroM|WpﹷzF@@pF{zSB&!T6K8>T$^PO琼G8D$dt; >SkbH6 $ ަc;I‚uL5VBygsQ6 8>D3rcJCK |($@5&Nѹ 9{ v$X't^#Jk1TcsG*ޅE|%s&8ya+Ss $c\E8yf}31X0x>+Pbۯ ɻo1.'ՁLfJ^LFÖ~Yo(>?}v9/`MMBN7g,wv*%] HF+Ü#׌ӹzs^f]q&QXF5ԭ>5i-#7 ֫x^7]3m,͌0 [rz[z7ZG occFG99o?䈴sݶYQnͥ9A9GI*:ݍm[6d` =H#ee8t.w .ӎ@N}@CPFF# Il:Vs%Hxflu^*݌skђ%*c 9Bպ9Qhյxinqry=+dܖ+*e. Escz3];2n8rKrF0917Idלs~])WGrzG#֓xod)nM.L==O8{t_Jq`=—'<P:9җ׮O\+ $9~]&Xc$`^)>n- 3@J@=p ヌs]Xq91$Ê`)99?L21Ӄ=Eag3'sC3צSғ`ty4[ǃ֓;p:G⎃'N=tS8=G-<;|qN#:Ѹ9? I&n=p9'2ΐp>bq֓`;q逹$Lq9PqLcpG=s9? Iaf.'G< #ןgy猃8.x矽$Jw?^\]<7>HϷqdw8=iv]>NlHvqӏi?r@>]7tCGzo@E0;zcRރ/n`~SޜI8?p 'vOƂy >Ut ':`g_G'CЂʅ cU^A=y=4tszb۳o:΋뀧Ǹ?ғۂz:(3gxΟ۸>0' @8~:~Tun{ HRtܐxA$zѻ錌cj<;#@䎽=8G9==P 'q=h,zG|bm͞#߇JMN:0U"F238:{ox>)EjBnG:uy<7 9߭Sq~#?Fr:ݸHV!gr3qM/ק@{g8Jh =8x,zLB#FA=2jPX 89 r{utrA$qMNv@=s2}O *0sܐޘ\3(lNT0GPߜth@@pFM.;:[92;ҖR^N0z`=wׁpN:y>01zn03Bn`s>jh#?p`osړ \^h R 8$d`zRSCY1zuh2FO)W^N܌gOƟ}q>=_t; c&s8 _9ʛOAi 9h{c+sץ%XM8 𾇞;'9p i!pX^xc:PXhІ#=})i_7^ G$twy~O_\=A 8<{$nyuzS>@6V??N1+ܘ~Ƿ'NI[K 8"HVlw=xx oa$KɩC ?1=dbJ<3y'`y270 hCDm1@y Wra㢎O>N=j$ P9AO ۏrOr:Jiǎ\$t=ZP@ ?)@~ m ďǭ0cR=98 c=:*wn9\R{ ׃)Vퟭ|$qzgR{nct StG3#<^fKtG@vzs).ѽHx=;Rt<9lZ8b %~^֓-s_G$p eIqOxւY.zw+ႣNN1N<=NNwgR9*=8;ך@ űIoéG1\R81ϯAOs x=*Nn=1JA r{` 1Oybz`=0;#=sI!q<硨?.0Is^{`?q99Y3d zSypH8Kߢ~^3I\y8$}iz8H>*zpV3FO8 u_ځo@h?9<$`R=Ocy0@~cT8y曞{zsz?!぀:F:993p pÀq4A܆ۂp''w⑀={L.^p3p2zLSӌ8ASENI p0:6@鞿ZwE#@m/Lnv;`7hlg8s;~ c^7;@ `2l{SvǍe:Ԙ 7008Z8`6\Ґ ЏNyM zCL0N rךOCF9(Yߞ)FxLzy O?(-vn?Tto~FG# @RH9>I,rO]GP8qxn۞xGoN(CP2q>0w gW֊|~]W!A_қ[IW z{qV%G@#wP2>3cʚ@ v0ORz+lIqqcZ}ICz c{I9=HccwRI,bOc銕qqz` IKؗw6@ebzgۭB@ppN]~/Ыdr@ N3r3ABwq `pxj;wv"POlhsK $tPzzHLՔ]Iҧ$p8gQ Q !<96<z-=<',:>(ٟv;אz:Ұ`?SOP;:U~09qϥ80\yd \t-tOߔs8qT{K0?G$' !ryFq* Ob9 P@ZܡFN=?Փy $3aÞֻ0O/x N{/1%f`AS m9"V-(R;hOC7py' dEy;$'`ⷛ.CHsa2AL&6aS?dY&`f$`;IUq192#"aaV;v犕.d(}G&U'̿ +\CdGqptp\񟔪9ߦjAWD#qP`F0N5f?623`U>C pC4C<)ƁH9$󷧥8kv7KLuRd'pUV69GĜ֊%`j8l1)ךn#0N%$8 qs֓B%Y| ) `y槒@cUd2;Q~(Ud qPݜ( Uo; {/B}=EI#2HsǦyu=3d/U$Ԝu5b\c6{Y~R'e1";ӄ6mf1f9-"WBP}k T`˞rqMBҤRNd_lP Ĭ|*èNx%Q'`m"9vFH*ۈiW%HW#@K!ABF]hG|ՈdžU$sYPm#P8-*[1+VX Ыl'}G6  ", ǠukQu7;d$F}pjZըD 3@A"]/R=&ݶ2qh@\( G=sӥQl.Fy"ZC82/!Jyœ dv$R{gr1b#'V#ŎI20Tڹy95],&xfoi]Y X! # F 8S?$TN_(ܧo\.л#򣜓9m@ u  DSKdn2Xm %l JCd2^>P*Xg㷧J`(0J!#S$-Ep9-umÐ'HT20 1b:cV[K 2.#;u}T0B CXۭ 2!G&e%$,`pi3)XT fVjJNHNĠC's~`sNk:(L*r8|GB 9$W'3gbM%YG]K7S+JQuf ψB6 G^"ݏE:$e!EffWeoa+fYk[.x9`H'mIԉЋVYj 4`89=+t;X,Qtn^ nYs<=_;Jr I<]&]fϠv0p8VOǡTgס sI?#Yr<_^(#}FG֣G`Oz{|?\`;O}zua> BOqd܌$›@{ .qaR\{{㹥8jb]^jo3^ǩbGRc׭8zc׎S" 8ǚ x<מ6W~2Ćr9nI;yΩ>0G#S1 qgғv6gߜ8#aFXPryK G8Qh{1## ;+OJ[87aJch׶?~;}})6F ^)+.><^`rx^s{0@~|Raܑl1< N3ؑ}hmGonGdcCzJ/# Kpr{rҋ7c}qJ}{I=}ap:d񜎇_`psϩp{'G;vK}1ğd*abU=Bsߠ9ӟ>YB A>ߍH98'-#=AzHO{Б?ɧJ=_zpq錃tR; ݞӧ5=zך'8872:w9m`NM >|qPޗy鎀 NsI?O\bp::9Ft u t=RϿLsF:{S{~8#ݹI)# sx9 8~hAm@pR>IR@=}OZ =rrpAnr9>@xhw#E7gq~ quGZwL@ H9o`Tc3xzOJ3H>ޕdLr9ǭ+ܞO^OsF1ÑޟKd=O'׊7>sI}A$g0A9lbX e8m=pry2Sך&ᎹqҚ$WDvz|<֟z=8ߕFOAzg9S?~z?zc;~{cQc1P$3~:~=yǯ #:JhP`g}G&qN0:P8Ґ0=ydt󡀛瞝:NF@\z %p{Zfrrp@c<)Xi n9# Sw x by;q 0iw9ۡޓ-ש9q{Ros<Xwl I>ӃzzEk}otw0h3 1CA`7g8<~_3'9 ~CL 833NiX,!|#$B1 R@S4<`8ߵ7waOoc6@3֤W'ӎ0={~>)~sO?^h<P=?3߮I+);Rc\D'Ibwv  ӟi`큑>/q=:qKqxqEH;XԃHd1>1K 0=֝!7$,{s]|Ɨr23z=:u'nqszv=I:3d$dri G_N<JM=qv =AQ\S! >r8ǧ)i< `Qwr`p8{4`9'ҎMD3䁑 n9z ۅn8=@U=A 5"v2aR<n2 :OArz}:b&G [ w$4ny)zgxٻw098MC, :GVN{}j¾=7,r~P5 $z<OSg8v0dt< i8뎼td\19>!8$sc{I~ ;pxߊ9*^'o֍h_!vߌN9\}@ZOAFGO$cQ57F5v6b>5 tZz~;1?NЌ0#Slԣ|QD䞼`ϽMqZEI3{}*ls܂OB*hG=d=zg F\S3h~A=s|;Q;w=y:?Ȇ GSWO|AV pscM2Z0O#$q1Ҧ%qUV8Q>뎠)IgQ$;`mOnF;A9怰͜7'7#8#w-3>T ֝qn8<I=20O(98 /@:cM2 6;i?nθ'v0IFTIr[pG_z]@vqP9o9zu\!prr$cvqNこc"1d~OH;g4Oz=B2~ҝvcsߟZ@4yӃ#ӯH9Hrsiߜ8^;c4sAO'zҌש=p})u8.0r}H =󞢗9p.^㿭PF LLrZ>^1<oA?xP8 q{^8'8GAN1xq'MI2<p )9݁ԫP NONHUb}opz^)Ig>>HLd$ 9< XL?^1ʂQO)7c12p0%ɜ'@9#Fy\vێwtjV,rH_R`g9݌e4G #<G4``'8&pF={{`'y#Œc$<9Ϩ?Os4|0Aa۱' 1@=1@Onw:pw1ۯ֐0:pOL1Rn}SAHQ.2Nz9 c9\m{ <@ :iI8#{i8 t^7n9G^ؤÜtn$/PGi>W鞇12_?Þ9ǥ p8ϯMݣ`zq< $#v }z:t@@= ylusNql`\9ӽ3#i'#ۧOҜ3i9펼{}i'#,p_#Pm}6OBG" dN~ӂ~\IGsi 78#;R=Gp(A`FpvuNg<@ 0HqϭEؒ }=I4 v:Tg 3i?ŐzB3r@cݟ^~ҤdddpO fIʠ c8n,h䎹H<㞵g;rÌ1 ?校q}=8Ssސ->w _zzr>vH`9JHl| ǩ#Ӕ z|ǣ04$v ˆۡ;8Cgh*@=CAevy!9J'SA dnS3Nh O~}SbHq`CG?/Onss]PžTaN0xѓ;cÞ07z]D*ᝇ8$qtl|ų$CqlO_Xn/bu9C}p8Kpp98{ 8)“7%z,à?|wr鞿=Flt<מ)y ӷz:0Wc03dcC$cp:IHsN:d%_z y-'F9R(N0AI$ }duJ`9G ¢\ ~^`U~`uX8^'3>?Qc;c]q1eNyǰ ?CLۆ3#~:R)N,FN}Zvd9=::Er}Hu%x#:^;[Ӝp櫥=2pqǥ/#1-lA$ocǷJb rr;^j, qnsJ#񡌉* z['?$)`H#$N>ׅ~G27~Gw2H|QDds5m[|H]щ,7?)k9YY@\\ݾjբr3 d60Dw#cK )`9 V5 =eF69Vʒ~rpsӑC("G]BAS`+sO|әl0S~Q-`Қ8Hy-Ю7Фpm㟧z1r5cp%N`WgLPcA j+б34U_$ MRq m呈a.m9+~qFZ$)|%sJ%3ÓK0q $󎧽S\[sl,`$pGUc=Nʠ`(z*>U'8^^ؒ7!U@䍮<֚ @!7)@~SqWlz *# ǹYvaQ\tWpq |`;R܌ʞN!Lxd3Ǩl9EKa h oO|g:éߒp: szPN: Fwgx 9 p P9v䞴\oq-AbK8$`z+WH>jCs/1႔`Wܜ;_bXv9a3nT=529bN?*rb>$?$3= D~FHw3699 1 A`F&Own?w 9;Y~ۧQZ<0,_frtJ}}EMy cPۛ0:{c%Rr>SZJ EeG dϦ=U]QrJ6J+dy]$+P7<iwv8wTte 8Q&4VL8e۵1Z~^Boœ~;Vw"dvv9`6сH"#>d䝣<\sSz|^+vцO`Ug2 u ,68wnGhziry@Ӟ}+ KF$?;˞2=29z0'$p'3ۏQ^oVt OQ azI=4 Fry819'8 g#lshv}p ɣ$Fv'@ b:gNp`'P@=<W~<1:HFNz4`s@q=sޔHW9I8N2=9?2:{Q=zq8-Fq i{1p;p(++0N;tQm3^Fh@8 0$  6<}ހONGLs;@;^qn}h/^yϾ)= I8=֐r9<۾=r1} 69<%T1Oǰvgr[zs2q;F9PyFq0;I2=A';pI!uwpI}Zzu*09?Z;xq'#sy?ğ(< ;sQi!XX}?Ʋif񧏼(mYi,ue˚6@purkW2}؞zɲW!$Fz# GB=Bp@ג#q)ۏ3Gڄst80 M]s|;8.OP`0 1<{ ~0pyN?:h-jH gN6x>1yqw ߑvrRFC**HۆU^qϽ@#+t+?ΚخFNqLO\)$XRT+9קJ]yX#;sI%asrxcOҦQ-Mמ7*6 FI-ztDۓ`F07@q 6Xvg]W*tsGGH'V۷t;NCbTNt+IM%ssw`0=azc'2qcיZCQKK|$u)acx=#9篦=♟IF:pt;'pHFǻO~PC>`3#?I=?bgz}@&v>=*F=Aҙ7=GpƢ`S"}rAmE:{v')xyu "2x"7FI=;npX'バqSyt$ަz!GSzu4.Aߨ|&csMߞQۥ+! #${iKrI `>M*zW)v~_(=s\{sΕol= <)7qt !f%yrq꧳p?^m2~pxnzXgyrq}?Jinqaۻg[z?J_0gL}@;°z$yRn-pH1 g酺c8w=)_PsN8ߠ'=*Xz?7z($d~o!w >tc$:ޝ;HI;@|<^=M+.;p;=:QndvS; m{q$c+ /rzc~T!o^)4Ìݒ{ 1zQ'\g8=(oaAYBx省c}i<۠>aI?T{8_RF9:Lv {{qL' nG>@XBx<+pa?1II_lzC>9#=OP =' y; !{o珟#zҒيڀ=KrrqQnccxz`uMu*̏{~@y'8 N`N{zRo9@u*`IX#8'hC&8z}ҙNOք 9}a=A K -{`z)7:OzǚMu=:}@?Gױ$* N&_y˜F:u)@xg'3Zn Gg0Oϭ/zu8Psӊn:|iRzN)KSz9]79lHڑ}ҕC.zg#Pe8{dm~[ .8,`:y#~ \a:s '^|)&tcC4+ua')[%zcpҍzsߜ( QԎzdznP }RyO=(yrI'.Yqߕ2{ǦOpr=C'L1=p;SL<ߟSש ׎jXA5{v ~y#=ԓ -y< exFOG=?O3>qJڒ&7<@sAt_2=EnfBТ>#'=JO7 a3'>hD'rI#cJO;߰xZ9By'^q8HGzOlqJe8a'ٍ5C ?׿O_ޓz1

R V@{py9uq:q9Q$0BI['۟~iu3 gl\LL99Ls֐g2qNN߯~0[<dOcq98#4`^InÜ񞹥# `x<{[mz}[qJ'$t 9㞁ӯp`py9'8 s@8g5 <zN_|A>f'?uGQ{~x睠u\m8t*H8@7gݷߌ/h݌`9'昉2GB'>b3dp3C8Ncޤ.2vL\vK% ݴ1Zz G͌ '?ߍR%t8#i\es?Z>R3p }85& Wqw##ۭ8sCgЎZ2 xd9#p?C0vב==3JU~# 8;HU c@ # 9#[ g#-SHO 8=syy-ۀ0x4Gͻ:z@J¦ Q?7'AGp* ,%GN'9c5gCNO8LgOsӳy^$]y㝡9'N{'t 12=9{qn==}F'b3sl<{{n@,2N܌qu>3L$R8JTQPh흁Rܒ@=)>axAД$۞$t$< =~]Vpf<`.w:p:báSg4g%xq)n[xÁӦiA۴ QK\98$OSMw# nĿ$r{ќ й p}.#8F <2hpA<s0|z(ߏǥ"9;B>A>BAv=\O~byٴac&(+x#HH9c$rzstOQpzcn05.8 `1qh ;x9$3:FĀWuzFxJ!wݿ 08$zq:KA9g$N#AXג8 Bt%FOħasxq: Zr3<_J@TaoXqւUІn0뎘yFWԕ8یx{}jŽp3wvw3{ APgN_ޯ3֥2G}ǂzm ufMn'0{v#chB2(#^3$9<L]ltwya{9ɣhr06Fzpu P;Kp؁$0? 48|zWnHTEr^ӥ/" p1m9Pg$rԴ;|w3p ,N):kv':s֓p=}FI; t8q /+n"aRrGx1:?R qCH\>1aH-~h r Lמ㧱=H`4'zds B{~TwˎqqhnᏽΚ, 2}*$snc9G}F Zɽ 8AE$ψW@pH<0pTO$ZDر%𻝰C=+U7|hr6f\mWĞ~Q c&l̅0*p+̋dzu5R:\œv)hva1WҲ;Aې;'ֹ$ NvC2>lvuQ *L4b$`v##r܃zM:>n&v+ʱn>C@q |,A;v'ccUĠ, r霌FF݄nFXb}IDrx D,7 T@_l>0 K#ive!UXpl.C$9 樝.Fxc$nFxV8?J7g#,# !yzBbTm8><.wn+7o5}(I8i۶0?3q rE#, V ǁ<ԄG 4\}G̣zg=2x$zTFqe{!sl݂XAGGK"EOv;♴6_$q(?1=ZKVFO8ӯCM1N~`6m<3҆l[ g_[y5) 9'F#ÐYPZ|BvޘHPG^QB }N2cU#+r0vЅqӎ*ʑۆBrr\q&*% dɔ.PX~zUy0*썀`1g߯4S)`̛:Sfv;6k_A>P (q$g]ow8 7MTwHw r[r1"Z3 6c Ѳ12r RV~PWZz\yd-T1LݓzA_$*B,|GL֑%屴x>o;QOyl灃ӿJ g18c߃ӭ7b -1n8<{z saQj5 f1_D #9f'! 'ɞ~R7qR0 }RrW9cqa|$g@p'ӟgR9sAcu<=FH> 'IA3Ƿ֤RrNq #۽`Iެ:qߌw)n;vO)`>a8=}J~N{uO8^M?^@~))یlc'r.(unzR^Np3: FO@;zqB=M=y3W'=_Q@1Չ=Xy=N30oKq#^=P@f @>Ҥq <#o6 x}@ss2: B䌞Fyڀ#`xs҂=I<H4GIu!qF *0{Օ$:<ZwM뀊R\LUT'+9=N0xNN Fߴ`RO#h-={gk a` N01bB6;#t<=:ո“XGOzOB}-mb؎Ǡ<ըl} ߄Aٷۓ\1АaFp9%A'SIpAݷ'x9ejcM8I+H=󞣏JwgiԃUH~mMl6w8;[F>8hշ3|6Als Jc.2 R8\g??*Jnp y'bfySBy,>NG1&ZL{995e[p`>^ w?)~@;9mp{x*j tF0r:N)hꬼAaN;VܤxItKP(é~HsSQTdpO O#UGL ~2) ۮ3~]k"S3^F%ɞ ǻt#qFsӠ1j㞘sޛԪscP c=19}s~ )F;rOlw5-\i,݁= #O`Jߘd^hx|dw8ir`4+ky<g=d<>lr=ǵ+LsL'׾rpsҚ_aYG81I;%x֋X{:H#E/GR|#8MHXiuO02q*u;.M p/\#9ЌA 8nӥ6;g8S2==}ab=O#w֣2tz}Ua<ޝ9?" PA; %0^>)(#o4!XgFcQGӚs{~ 2#8=׵(Ǣښ \_4w8y@1l{k9c랝32 eI>‰1cjT8qV ?9ңx瞘8UH p3`#=Ou~l#984( 4Iגs' zQR>1< ,`edsӵ!Ӯ2O$b~#z~ pJy~2}sӷ5֐T7; w&Fwcu?Pғx=Ix'%^O'sC@;N9' q8zhwړSrLPv 皏$[R3sJO0xϽH_8ds󞧦3I 'RQFg:r}O A1i¬<9.*z7C ,\pwyjEq 8gߚ]ys2s1vqqh@'pQӜOƛ{r:w$a#9 S$l|GlA LqH%ԟAhp]H@9/9qm$t3_4$Rou#?NAWzO]C#Ќu%q ʐ͑3 JMݞ@'8HzI}hq(a ג@GJ&'Fϡ=B/A7=}Hr_4H~cޤg<0=(p\_3r022=曰9;!o8>;sy5ar:gp1{Q(YH߇LP$\@{t#Ty\\sirkc9''o{~,O <>cw>r2TrNO;QdqZrG#tIAgՇ^9<}ONR;d.O q)|'Bb11{SpdpO'Ҕ1?,p3=yɜKvݓ)72H{f(\F7q4 PF}tҞ$:Oc׵ Fr_R>x=)r;&:V02rF{:G(8= ' p1ؓ(ߌ|q{:А\pH=y=^H qOA\<ps~>bOeyGOߊ| F['}2Ŏ8ݎv}*\A'|$u`?jvOA${Jj:qCsN֚p2py'?hpH8y秿jy<؎*?NB ',@17gb@VѥryrW +߶1Zfdpr;p/ʫy !F:7s՛:?5^\Kz|''3:Ο9Xˌ $g4q\=?W^Ay0GJrxҟ9qq񟯭jBAA=@ ?\;j8 :uWcNT5V6[ 8 u*Et5quO!p0Gi~V78Ǎϧ<٧v݄+ps }?{q'zIsa@G~xAG@? SԀ=}װJi/Fs1ǷLUrq~{[u櫳5S=3o_8n7Gҽ]*/G\gG=sڬ'CdpKroόc}A c8<+e=r 8'R WDf{p zK1'P*$\zStanߧ#r3#O?S=q@{TGrU?׾z9[h\XҵrgvB@'9֩2p:r7< @ǷJw| @9ߚ!NCpr#W#}?5D{gRŰFI8J9^q|3 $zf8?6=ʑGt'~}9 ;@'m h*6u|9ÖX~ 4 cIs1q?vpN+cgc#.'Ԏcw8 c{8#''`t19s`Ny3ۏQ뎔F90O<>֐Q 9GtqoQԑ 7۴idN6{1'hPx_צ{}99A9<`1Q SqQ0ûw۞i.z# pN9^h^@Ӏuރ@G89PUp2sp"An~m9oJ'}8Hx d: $pGNnv>n$ H'<H<;}y4ӂ8! ;g= p2O# c!W<~O< tt$sh%q`4BC%y~̂~\8l W_s$<߭Ih 0r21QN~ݱ2u`g88sw`esC?*1EF?ȣpO|p6g9G M9G\g<s!zGlMF{sSqր`ya_ϭ.쑻܌e1SaA_XlH=n${{Қ'$7f"r@+ӑCt韘RYwcs1$ӛn`C@j`'\rA p:*H8 g]xmT|q$=)۰2 c<(a# i,, 3u/^> <ϩxҝ;x)l0 g0ǡ=өGˌH`2{SB0?Z}p=OK> cz"F,ymAʆ:vL# #ؓ 秾x??Gr_O8 3~`,OQ@,1D<;9ӧ^BXp3t<zmr9x9$68w>Ly#'ێc ?L+@$q=.|?[$n`QTs=Apdfk"0nuϿ?p㓸@y8ު[ǂ@%zSd G9?0K~n(\`Qmʳryz! :9랽'AJ= Ɣ9AZKpDx;ƌӶ{n_7vNR+ H#HC;rr''S:gҀo>3Gs|3#5+i\0“AOj9$QI #p20@?ocvTc9'޶2-=3$;Κg=Ryn?*㾣Fgqb<]zH\b1ƒOkõ:9\ r9 ?Mz9xظ^G1)n:gq:9h*N<383^̽yXaԱY0Sϵϐ1QL_a 5GcQܡYF*Tc4,>dhHlbX2K OER |nm%S`&?8d$* s9n2;?DLBQCspCn2AsӞińpͿc:wv1coYX};9jHo< J\c69U>)1Rz8@D>S39=qSpSoǿAMvqz?}8bA9=i7+lHPx_mgy KnII~ChUzsR3߽X8ul2WU]ӑ⁤ 'q$)Sh<ZtcSde,ڥ46ÕT\KPwa"“hlrZCHԌ~t+IFA#qֶy¬1$4ŕ-2w\H=Ojۈz$Uqw&mB+l aʠe?t9J%Sr0sKp|@r I~j’X-[n>6:LUs\^ݱߌf$* 0O8%lbzUi^̗irC'ʻN}k|;yUV#w2# ֔Hn{5$j M<@'w(s`GoS46rz@2@O#}#3܎t)U<N[2 #ּἴEp*XuWd^ƲtRςVK;y'7USϞ㚅nQ IbxvFwkxS4fl'rx-3ҚY1,IF~sXrsA8,Hz­+ 8 2<c$OL)t6Yq2L:ՙ@HC1 X9V~qz 2xy9suNc@W)-#Hp;+0`/@*H9#$z eFNCn%ؒ$>+MFpF?/1TbGYG~ ϥ  FOZMÌ\dTN#g$иC :rzDНp.)I^8v` G\} >bA:-;,@-K̜(pq1ҔZܧp$xzJ l?&1MA0F)<0tpxq53 6 X Zc1ոR$yM0VQe _!)'$P!NIu\GQրŒwglJTP8eOG9ߕakPrA`6CZkB8[=yxRMhM xۜ) R)%Q8-דPd@q I6>n9y߰8 'ZûI>bs됟+@6zn=%rH9ǩ߭r6fPo'x_zr0˷J-WiPNzX\F Lwzhe :.zq^եi\G0tz$jՇȱ.m9 {:16'/ߕp֕;(-E#u0$w ߨ>+ΪnbKI9V4Ǒ3t5zӡ(6F~?<t>F1߷vr: 98ӮHojay}=h}@<l{ ۽f- pz V|Op;c9JWeNxSn8۞q2'g؁6 v#ҢNA\?Ja| 0i>}nYʒZ IWp 9nC$2=9n?Jz]ߟQSy9 R= >4L=;}HQx'RОga< ҏ5za[~Ĵ;'d @9pzug<=cy=^g\c8=OZ%8g9'w,$;y^/OP2zeܧ88dwxH$t#oe$F ~^A֗ ?xi򔐂rrI'p98>47du HfH0rTNy8>֙~`sמSAN2y `vCLæ0v#wK0q҉Iz{ߨ N"3?I=Hө@z#+`z~Th=[!62s?tQ)9ퟺGB{`gNrxېx[ApG<灒:ڔKrN~0OyXb1`CcJu9Ԩ'9.#ӟ7yz988 |:v? ҟ ЅdsЌ`׎KQ2x8Q$A#9<#M2wܟ@*\ ҟq#>MEqLp}r8O?6{gvϧօĘ8$GG_zt` p1fNOo;}Ep=9❟284w^GΓ?NT݊D3y?#֟p0 [M_RSQ҅\0:{=7|W(BY'i1=I'$_CW .0H:G#j\PASО珯_@3ߑC֚Nz89?(#ypOp\~cDuZ>ܟZ-߅䏠NG(amO9{֪ hG$guFx7q=8Oȇ!2` c>Oʏ[HxVΞ39 }Gӭ089UA8һ9ێ i:8NT>^zT=wDiDC;A8a5v2HN9wWa)h}1ִ`:z\vW:;Bx+Ӄ_;c#kֶ-+2@HG OAVϦry(#=Bs~٪D17vž}r=i9r0G4_F! S{qI _8t㓐ӽPGsw#\”s1p14.#8 ߏH}=O'?^)z3];q>F0Az`g /<@{cǭ;@S}sA,Fs8w=hз$㝹apw x=rG$NnyݧIGCCܐ?ԄrYpv>ƕs=zh?($hc=֓ c$?7z9GlS*1<~>Ixqʅ'gzHpq tS=+ݜZRr8`s Ҁ`}y:Ϧ1M݂ol~:g( 1O8;-ϣ(88O=Gv=A#pPӵ" $pspyLбݻ8z\7=87qRN~~c?.@N蠎00K`{€#R2rdG^Zw;O7q ~1Ҁa}I;9qL;Hxgh$ 'nH0c;<}GzLb8#sO8 Hr0@8Ɔh(@=x4` ߮?J@{n)IxIBh' }nABn;9+u?Zxn2>px䂠<{@Й{\O f6J۾1 ';z=~Gڭ'>Y[qGp1@$q:48!xR`=#A/9߭b ?enx#uaAG@N4?\nt<1@+8^HSRݜ801srH Fz=9Gsߏz7#xۀ:ךCFG| {P&!9JOHg?(BO\coN 2gt'\tu8|c?#z] 7|Lc%߇4wd%L:r8$}Aퟔy=(~Bv;͂ a(1OCccq9;Ҟqy`jc?ϥ<3 2GҜQ'.F2W{i;S:@XR ;vWpG1tՋ0x\?`843<6x#ۂq.BztA{{FLۜsN~1}N^)9|ޤcOzeݒRnm,H!FF}TЗ8b&N͟!&3#rbv@TLwڀ9aU$*9K)iz^@#9 7++7a'hn=3Q=\g׵RbnIؓrA$g:2͹2ƣ,>犡I]nC v3/*X7VT ;9< w9c&X9GQ>jK)V%pF0;zPW;NOc c$vB Wޫ8v玜 eCJtFw3s8@H#9:z-Pt%V>^d%TM @,G'q?7Gq#Q UNx\['w8j~ݻwcܝzr2)Hd#Npܠ=N>܁ۡnr C̐ X1ӖqbAG=HR##^.JKsO?SJXH9I/7RcjF9!IJi8;='j+7$ 䐟I#cUn\-_ZLƟp**>`E ?R$[,Yp+Xv)#mg׏53Hb͸ *N?ʶG㇧twT= CL A 7 )OMոL|nJc@y;E!U8 nݹ;zG@{ԍ [8?d}{t*;X8e=Hʞ6a v$ un_ @''\لc.9jrc#l\ۘ9\7.$dc$񕐎)F c @==1[Hygz)*"*@߳;#Y1۞(O#?;;Lv9$]Qje l acJ {0?\{vLkS f̀eUsy8w.9^x=I2=~TضO\8}Jy$N;gҧC0 >czPFy瞙<b{sG#?Ҁ'8䃎8'ϭ \ .q=֘'$$1F8>J`#;y)!rH''$g``nwg }(o~1~T΃$8nM0 t$cu-+Pr}8Zhp=:O_49{s)P!8T@=:~̟frA=NҐ*{O|T{kˌ0ȩpNH۷Mx]v`ܞ}8P1װ>!C`W߿ZNzߏ'4 D1?J] pcRFޝ؃:c #vc~bԀCIF9FCt0rz(p,s>7bi0AbGgۡu3Ng%t\]|%/òX\𣍒@&9z[?|תY)Fp{gA*qZ'rzg[H}4#M2{'Nz Т2F݇'N{p>rï?Z\1`x \tu\9Ͽ皧&#$'4nF{G'ҚKt6zj~=9A^~җ.`py1q'{T!'#$'@0~nr[hS|ހqۿ?ҩ@? ~=x q~r 6} 4L]0?/^s˽78ߛ''#< c9ID:2^ځ.99O厴wJyq4ˀ1>ߡ17 xdm>_8=$Gl*F^ /CRyg9'=ǯs7l=8N g~+ӮQ:Tqʓqև\9q\9?N??%܏8dڀglSn<*!p/r$1@瞝G=q9>ȧ G}M}NI|~8O9=:t&A:8wy##'SOLv8M'ߨ8#qyn ϶:qMDW&g B[F~r?1KQܔz`󌎝Sg#}_zh$x%Gl}G|Paԃ}p?ƛ¸;Fy==z`^i38<;=88#4sFI N;^\1>?ҒѠrzA'00:Ro8{>s/u;QaO 1ǵ"=ۿ͞杴\?\=F)N?ZVǩ{ڎ;g##ދhzqQǮ1}O_ҋQ{LH>$`Ox;v$wAP[9{}(\cؚMMy0HNxQs<`{}>wn#ҝ$s^W {v>J:=v98M zQƟ8I#8N[y9>)?1T.6;0h#󁞿_֭nHdsG'8=\vT `3qО^t_LЗdu8iv׎Iu%Tg֤G8 SZ6)8 bZ~\g# ofrvU$wT[QdsHa70zgaF=҃z}yCzӨlH:z =x>b>c>9|qϩF/LcdӇrA3* <)'P7@I~{"=pOa;ּ qlS~K ;yP;sSgoTcOVc'g$H9튲I'Onst}hǡqIb`Iy#G?81dǿj`2> O':cp=' <'9'Q #$$gq):O;;PKg1өU眮{qӏ֘ہAOQ:=?*y\9Py?Hz89#dо1r1O$8})^}6֚'%88ǰ{Rc$2?vץm iph{f~\gnqc1SǾG^ zgNr~^3x?#9  JC?={phQ{ 'I8O/aFys.7 ǒO9=ui'L$)<ysguܼhˑH1 [@2>p;n:?L楔 9l  IpG:T<1z'Ӹ^zzX pgN3qێ#88$pҧ%v_?D^{d@,{OLI#򞧞^;q=ۛk AqϷZ`"{m=:TOl{2-͎lsԙx8Ȥ( <sN@F--OL}ES=r3 qҌU`Ag:g`;`sߜӲ}Gu#G^#ذ ?&PW#A=Oj`€wOSl{R{ˎu}NSM|I=pI*JO';(>S1 Npq܏sP I0^)7-g!O'JNAR6c8d~T/ +gr3u֔}tPܐT{qׯLV9!^8;[ bGq#4=p=2> sױSRr==)#r0S^!nC A<~> @c~F3^Ï80y'p3׃),O7{w2)\Z N( w$~y~܏PFO^=)$R7=0pz{RL3+s43[$?1\~E{ g U:JEl򂠀9~}$o3X\c9pK9 (xr$}}{Iu#'Ϯ3@Oh$x ?Wn y=B$:3N۸sdcgz@?/H㪶~Psu!<1lu4 NNcOsm}d$1d s,;b{Asߓ_=I$z=?Θ:<19i3-^F:#i.Ԑ䄒y?Javr={Q[Hd=0OG;Fqz!DNя}xU sNJH s ~s0Њ9-#s?)F8*joDFA ? wvQ pʃ<Oֆ>9H= H=OoK7T?2c"]>Z^crڝB2=kRX0' 2xB79?.ҪI;JAL,U 5r 'EwȤ9qR7w`%FQF=ܑQrw p`I -˃UypL>G=֚7HrNq)b@a6NzӋzt R<0`u\)ܦ9 0rq@s縤DaOt4CvBrGӞ{ <32XmA}zdIl[pInyۨKaK*nQ?pRp3N Tg]>jB(2F9=sR͞ʱ;\pcIm7.@ 2yǽ&<'vPʩu8U1P=4k "(VMl.ʓ}G9~T!Bwdq;{/eQԝdz7|/@,s@8략YBTqXAު;6U%`x#i|H#*5r1 &Ah9 #p}9=EhɇcN3H:nOUv֘)7c90g I,9$xdu~Tf 6B"$󻎝QJFBcg` 7 A8UvӊjKcW'#q6!FX?j|<{ `h)l]8 c#hp'q~Cyyzoȭs pzS|1r!\U2oQ,KsCnӸ {{\};dzT=(۷c.Fv9.B1B!lOjd; )v d`2:q^gD"Y(lGLp[k+ӂUb!Cd19Fuirv'H< A z=wCes}OWt=KHdBHO *A^ݤ[*I;1@iibD"\p@$s]j\cqPsg:PǷM~ oQPDp#@뎘R0~^G}=([F7co##!wg#)'ڏ79󑃞i÷Lc2Ojaar>#$3:a:N)9WpO#ǯ^px< $'pW>8@=럽S;@ܓ# }9'@_r~ L';'w\gLsҗw#q 60IcH #vQLn.:$' ^ t'޼:gO8csXp'R}H2F$ʂvHTF0117 8<h1m$sO'g?xt׎t2>q=8Ӟ؜I'lRI}ϱ@bs##ZhOOFWuP#:8)Z#ʬ]pq'N@=9gO}2kWި~xK Wsz;Q|Wglye[da ` Hǭs$NFFM82;Wz GUZLo)8& 9l@JKOĘ2r-#q'+`*w09]`9'%fuKl{@7 ۊzn8bCSRV80*0<2zsҤTLupT׹ɬ@!Y=2pA0 4A/aON2z2m<v1n+pIQByH=~^Պ朠s4 h]AuJr!@ٌ@봎,HE&8A1y u VSɌHg>b1$L@*.`>Yf9ܟ0²Yuvp!ɭ$; g*XcRے1uۏL<-I1#!{vd4m$|<)*v6>l]Қ# /%?0*< c'׌u `gnH<.`Z f1ʕrpYG$9V@}vxP@=zcԆ #1ו =@q5D@zz p;`@Hs^x%?>ݩIq91ޞ3K3/+8=W E ?q븞yXFAPd׸4U\@|vHq lFX >_qެG}RoF7I?G@!`F<ݜt?OL"Dϐ 1s{L|'oBGSq5KSb\ǝırq{Tm9ǶA 馮SiDZ$_jV=3WO.!z2jo87`qsKmK+3 ssG %=:7^;n=KLGPWO9GB^p{9e%I%U㧯3#n9 ?ܓ8?~{gϧք1}ϯ9퓀zr~=ϩ19'w\HBߊj"ORLؤn={J|q@Ac>Ӽp8؂N ӥ4߇t#)8pLPX}NzR< *9l}H$}H8p8]{ӚqqH`2{}q%;nj~n:҅8gn<94BsOMF}>?*j?&Ɨр=Asޗ-2#v6&P{R/=qgcѸd1r՘q_FyW9?Ü^z{~4dzpO$p<c;'P29d?LqnrqOn9zanO=x`gG8ing##b-ıs''tJŔ !G8DL F:$}?*,>wNǑ'zR `zq8MP7z㌁ӳgnxҩ!uןnO'yS^~tqLݒ8ϧ$z~4.&zg<3h03[_{SpxLpO- { '\xtH=N; Ͻ;h$gF3I798n~(]8l$zwۚq;:R?NAX}1}ON N:u >mQ\zsPG+䑀[$ ȨW;sy䞧#?c99= gqt H= =i {zIR@w$PL 籥;ソ;:҄ϿƦqH=p:߇9N݌qO&;s9?֞  qas\t=l?Et;yEO,'+D9g$r9 uX.(Br~^8S׷OU S ;0O?PЮ%x c?{==pӒGoOΡ1r3r\e_IpK{xz~iث<ߎ8#cMa>10Q2\=o9랧N?hh\[1G\-Axg~r'#q=A=g'Si+30:d*? wz|pF@j >``c@#UԞv==?C_v`7nz~%|p._t<_AH'گ{#q='9=6AO#?_Nkzož{ԌRyu?zGx?ҟ 8T%Ӿ{ =OdUX~n x$Ap VdNrǂOgO_JOg>™,8u ϿojP0zy =;QRz~^Ӈ6$0'1G`c.8;NqLT{I۞F>dU_1cyt8*> $׮}M#SU*9?.3 z玘2&Tïr==s֦}FG 082`l qׁ*`cϵZV&=rJϵ/PyQ0v9oPI.8ǹ?ΐuޔ9p@aLT`'u$I{PKm'8G:N:A=?1ԣO<gwNOʾd?0'Ͽp ( ׎}pv'?94J#Sq=H8#=@ A$s`c88z`OB,`f3=*F4#jT㧨#= y‸`tJ@mpI{3pO\,{c029LsߛI=A==>3qH}= !3ǧ'=8I6G<({AH±L`rzs$ w}? @p##o$FIІ9{!,I< TBsQp9' ^H) F8?yN?jnH;zNFIK) l3 _Jaq9:TX8n wGl:>s0I,*Dy''HcI>pGq@یiI?> |$rO^x zH瓏cdx9辦cwLX~*a`>gQpy#h8 )'nb>S#rsHx֚qav\8Rb3 j}3;{{Gz#$tN?Ɠlԩ$zpwtA_|u 89 3Ayrx?OƱ\7pz##L#$B1B3ҐН:~G\nRn@ zΥ#lϱ,=;=1OrsP9=BЎNG?/q}}b' A=b(0,#yT7O=z~4i$C~\+z;jC39AӾ?wmq: <jw(#Ќ:c&2郃}!I3)3xyL~4?t<a<^(Bz7|fÁrNt>㞹8ᏹ=;=)Oyx#&b rr̀3T{j@Hl/'A A_~4Õx>Xap=H~r}Xcޘ_tڞ q8ʂzր( ߒiy8cЀfspBn 8'#4oq ) gz{P1P=q`$A<6}=Z=qs*pX:zgHǧ<rOMchP22r_z}z =z{fbo%H8*>C' 98@#q! *ґP" TP;@rs r#9ps׵&9#S 8z-C8l9N={lAu?1s$mH`Oo?p-waZ/Lhao1A?xcy%y+皨~FUN0rzrr0PndרQo@W(2T .7nٮ>N7gh֧wΡnCBWÈp9Z¼8s{7cJsӮI8'+ızxHr9>Þ䃆<"}|c1gyz9 9`<}@Oc Wq19s㞭A@n>?1T@n B˟>Lc'FN88}Ai t8OpD{ozS9c=J~P!`{zzT '>1qׁcM*8v>3'N:2ښ[= 8 N Hg<0wOL}zӽ1d瓒pGLaL-O^x#)ݾ\G'=L†9$A8f^rGʹ׎f:g$Squڟu#h sz0~Q#ק$nwmIrb}ss@ BaW8 󞆗'`[#tcs*p=Rc9(x FIPO"DusF6 `>)]_ĎTS:ǔ2+;zfJ/]|~lD,nhUOINkg04dyMÌ=s^Wn9kyWpۂ~I^5 t@O=אj1E;FK)B㎽b9'0;j4FtH|C6PJ0ŕSoˀ< Śd!玥G O:5aq3~\V#qJ<};lz,ua }fN>bKno J=ʱ=:19U =R>BA· 0Uq򏔃[ ^GXg~TT!YԆ(8 `T̄w.Ose=q!Tܜ0 0˟CRs(=7p=u' ;*iG|J2q~('qwcc"UHàYA<(jA$ӀbpCnI9 1d Hzc>B&Vb FFUi\T!8`tpx+HC.B@5/lw1`H[)% rþ۵mh;vXdbTd/Gn9峒Fl{.y{q\FI=0zwҘNW$9:(V`H A0'S qFa+=s8 Sߏ* ~bA*̥8*Ho= sHMnK)3cs`rJi.6qьv=rۛp&1qi qjA&I~x*,nPq'#zzzr$sAN?-mU瞾lQ$Cԁܘӥh+n]KOU#jfU2'@ M޽?Z9'#* }iD'n2ӕ#,#X!gmv#ZGvہ#ƾ5Q\?CUw<|y: # }}cJ99>pG}kDělcz;rG_|wݞ8p>x9FN'=~p+a}zzTg돭!0N1z'JНz]V“2dls3GlCUB} ;=s{a[o g|(L6II{}kAyu$ 7Ҳlˀgw fqxAXԴH29<ʥ1꨷0)=rzr{/R@`uD}?@qמ z ԥ`>2z99}`gzuy?@:O*f0rp?ۧ+{tIL?)c=8=O8|*G8=r>Κ2?x[pxa<<Ziaٹ09ϧ^8$(<;zU Оy=:x;z rIڕ;GoQzޘIW;sCUa\\q)\ԁMz:b09=y)}:d`vQu'GN=9s@`p8y_AM\v 8 S}hhpTnO41uELr7tzZn\ zŏ\S&}>?Ӧ)I[:c'O2haq:^IH@q8; >cH.(NN8=q׵ czҎq]Fy]&L7{ʣKs@#4"+psӌc<gl3 thcOn#M =sL}i Zi=\U^x'#=p\GS0y=iu/aMru!GПZqIFcϽ1 ïKtx<RjN28N93-N=sN\F?1DZ8bazu#@1ws߂y=>Tw=9OƗzGlLCӒ011MgӎSHC{ryAjNwFIϸڍoaׁp?Z_A#’xy;Ҁ}RQy1~  ď]. +1*rWL`mNGb:{=sׂ8dw d/rZTt  Nޣpq~sJcb`Cscx34yK;Opu19}H~9}{};jKzٞzt=Ov#%$ zNʠ]sN(wz9`u<ԀבuЮ4',}@”A~=;$0oA 9n :~'!I^z;45-c>3x;Ӷ2Fp{N vǜ{2 8y'AEEH"dv*zx'iZ9z`uaDc8lvZO(0ߚ P,08$cN~H9{SkA L 8''NC_,gc ~`n0~fm=( ,`z緭.# gkƁqK9pW gץX zJeh+Gpp3.)dn359?t^pJPv{R#u9=?zs1֛#<:0s⛰H9:c k` 09~@p++cs/{ }ɧ (pNzcS6azxZz#8=?4\g3{}*Й.GRa]QfpqK }x=+#lrP[8A$~oprjR(s8O0oQx\_ؑO~s֣Q*@ 6zcZqBcoaS˒6 V~.{tRU8i"u@~v9*}1G$Dn +gU`Qi͒!^?Қ2K|W >H 322I\|5r>8$ } ^ߞ{S[R`nvqx W9+-߇fgO$0A>yTy8dcR;Aߐ=zׯXo (=zӽ#9=}(%1aװc>|3O_gzd*:}' g< `73^18'w9)=ծ+t#O'a F.otkbuN+#fjF#v0𞧎0Ǿz񦁆N@}ixAr8ک㪜q9$wϨ=GQ$L O9=3Mv S瓌=F=GZK}pz ϿZRGtj,r)݂2z|uuc$[ΨC뷮p< ߝ pq$jQ8뜇;<~Fyd qB+ p>0'L}h''!@H9R3nFJm؎=q݉h`IH'TӀH=8)nX2`3KO͆  NTd OKy'Lp1r;}>82W@ ۓBWgӯ$އ+N8Ԡ$=}2xu@NzrA s동y0r}xq?Ќ__ji ({{ w8r0r3N# /Spi.4=0sK ӵ0*'+GS<Im䏺:pO\'۶3Ic9%}g3tpv!Ǧ9N~pu7|t\7sӜ9{Γ K) {}qQQ 2[g?:e[,x#5,N֡zݣ12sr ӂ2x!{)" : g9#K*rGeb9==(I?3Z98B۱䓜0 }9:yژ ׌2 \֧_B: ąn9*[3)2=;{ׯ׵7a߁nq$>׎s1R8 ׌zvbOy܋q U6=X <dds\P08;@rsܓ4 z4(lOLqߚvYF2IslInw@ۆ:^$yGGTc$>ȠLxミׁM;U-O4613\)G=%j?2{ @'V3P8#9'=NH9%@#<zS$L__ƤL8ѓۡ9ބcwrB8T`9L/ǧSMo q>n v:P6%V17LDyvH `#!8$ӂ^292`drH{1AIxg#R O$?Xr2y=qOn 82䏛 L恉'XGS' ~ vr>R[|4?s@H皐.y< 6x|[b` cG'9x齸%?Cg!<߭GPcy dps)I=9|O?{A <F2Hj>sgdRp:#'IgOw @+ vy\j~@' 8oQ׭OQ1 zgy.0 o~H  p}rsӷe>nbz)NnidQIj4JNqӓ׌UU%8Y9:@}?ƫI!9CĎғbBp*wrqr3!JveBf_J\=?_ƌ<y늶 *I%TzB3 =ǵ( yxafS"$^2r9 o~3T'R܌)uU'i\z2A^Š̏p8C^WHtm'ZTs7yYƒw=sl) 1Rr09'zs]yi|βQA9Pzw[b,% H]F8F1Վ3RKr7+~e^FX˯0 t+Ԁ;9&X/y aHrruc%Pʌw&0Ib!p%*Q s#\>pdw!jN|;U=FN0r県1OO:"22V w90c#*rO]13a' $zT~fNvyKoCe+]+.p2zN!~az9\*nN>ϦRU88?#:xvlH!{y$C sm\FJz{)f &X؅y2$Wk&} 8Tbq9 woی 8bAe:c9c'xZ!1mJx}jqYHgf?[[C6>V>>TrnӅ\rG?CޥO,qץCA猷8<`b\]g'8<^=ց׎NzO %rhܲ#oOG[Kx8l[ܰaws quIemǞ GOjh)g( SOy@W +aY[J8ڪܖb[8#ަEB$pzp:scT`qb:#PPlxA 2,fEuVoU iygК֒5aLˏ _r ~E`,(ʅpsӭuXǶ67!2sy׮yE0pvj=M"/qzN!pOlx+ߞ+o?R8<gnM :>HOV}FJ0G@ޘg$uǥD?'3 88GN r0GqL ^{esϧlDzӯב9CNF6bNp=9@SԞsww՞8#Hzp>雈Ǩ<Oހb}p88Ihr=@sn8vBv ~qց;6Tas8 Oӧ|rǮGp>=hA\3{ Lbrx7n@jv8>ӎ};sHu LF <nsI p{⎟ ?c 432ރ1ۜPoN:vqsIlr"s iI> F_Lzev1Q}h۴tc8 FV.:ڗ#>928zP10zy@ 9ʀn9\hw#8?#'Pz  Qrc=9-Ch+9ךbqԏʳRJs?pI o7Fc<;S $J~b9KA+Gcqq$.0qzt#9-8^O$0þ*U-63r1Ҙ9)HrG5>7 'n 1{RRR8䪯:zcӯ40wwN {gvb88+@ž#5.Tu0pr9+H +Z~x\z;Snߐ `:_^i̬sI\)N*n"捼;H;Hf#?ۊ$ tC4Ԭʱ%sg~rSqfcԃg f+HQH'~rp3qZ.;A!lc5 {ap0mMʗ_Q!s~>8o @59#;NB{}jݍ<'cJg"I~cӯNHP`g{8фpE$g#;zg&3'~(;{ 0z ɏ#rAԶ:g9Foco\uSl;dd׵(1/$bx8cEm'3.P ,YVvVmGr]X; ۓ-ٵȌ*~n3qu;++FEH3IJ2XDH1{׶Y{x}>䚼]o`hVXvq*tՑ]I}U+#dgJ_XS׹Ӷ94u' POo0sZR p;qC*r=x=ݾcsZhCB:Z@<|uif$$uPI pd_ҞxNn7i\y)T98)`^)|r9<N:p\(#8w,2*6}𝾙$6=ilv88>{バ9=yATtÆ1i r:?3KO\tl׎yE9}>K.GH֥:wsT C9LQpr:>z#m9'#{_<r9;<~Jo =}ivBE =s֟ϷҼɧ#w1\G^Hp1rN:whbi\N2z繧ts@aϸ|j\'8=:uJdy=I/ww4X.&zqۦ?ϭ&ܞ鎤Fʐ&G۾9ۿj~9<N?ӑvP 'a\f9Ꮈ緽?fG^FN*C2G!Oc'>Zw#q+ Ъx8zΦOϚG2B3 3^\9 0SsԌBw슊 A83ך>^I?\Զ~ķQ#r2Üdz~;m/qJ#;y ^8ګ\Ö"y2 ;XLnpF=N;H pN23ߌrs뎿Z{d1\c8}ߔ^)-C'RXv9>,nN{:]cO_jM:sZ_@G=L~0Gax>RϷM?\qx>P{- 8#$rFqG+%H"dNv9 M2䀹?^IrBēӹXp8 G:br8Z_/^rA3itCsF@6?ϽJ" q棔94$6n~5NFA>85!{r7suҗaО9j9Gq8MOaԘ P_\PfaB NW#0G'A<AF? 2NK`nk b65 OBG{ u~GҥopG;}sɻq׸99p2{ʎ 1s҃=[gۑ$ F?J@|^NOLfv#?n':y9Ǩ8t!t4=pIF{ִC? ɮ;uf|c8R[h{t^[sN8?U7ǧ^/cI88W=c{~3'F1oRN=ǩ珯a2E2yx1P 9 㧡߃K5K$:c}vD1Ӿx(P1#ZGc=H?(8 gz<~5dq/1xNzNzh%;<`R.0=2PC<z1A8|đ'$vmxzwl=9C@ #$czӳ^G=\c Sq @_A}<׿OzR=sg8={$!xzsA~ԃ9:}Rzڟ080c$3Nu#Չ0?n'#8$7=~^.smI #`8@sG#'“yq=6p(@4eNv^;sޞ39dǶ}>w1:}}=iUzx}`&v2zq=Jw!sۜ>cH}w1xߕ8HQGjf)'-t=;?ŞN)p3 ly49I;PGR@>{^[<:2F:Z@lc=Gy>޴Ӹ m'ߞ:Su}zq=zG< 8率ۭ;27`I3cҁҐ `wrsuOƐrWr>NJNP1'R:֚~9NFp@ #HKgԀq[ H?/ӌ>*Hُ(1|9#y*/auPD~ca^@͎8P"r@8 9J_ln4!'zwx{~9#:}֑V#r܌( pNH8&IUn>e L_Jv0pzƒZ mC,c$ $H>6Km' Gy3oZ9qz s< ~&@8=qQÚv7yޔ`zpb@08gs84~\*8@?@0p ừO$z0H=q $zsT- |$ 8Z'=8lN1RƁ#scjW9'˜ܨn Ђ'߯n) o@71 T B {R9_.sԶ so<g?ZWA8zd翦) s<`0O89|8ȧ6&0'?.H8m}ie' d׮GH}D$`=$Ծh;Ox p98l#JyH\yzcq@ RA=Hؤ88%t4 N <ӎq7c7-0Olޜq8pcO1I֝0\G9@?NձǷ b9?)ČgQ2[ $=k>);ܑc4NxEOgsק<Կ.GP,{?Zϫ0]1#$(ba7p1gctdjW '#׾hrJBI8bzǑdSIxn}4u}A;c= qtw\pXa{c'⮌A$H+׹ȣ?yczc:Cc!Fue8ޔrp};&(#pT`U1L7 'JWo+q3/] w{ wsžO4ӂB /rXi#=X=>,0G=9<Fw Q3~&}|I(sOZ%X]xelpO~^W~mFlv]FIFʎ1YfXB)-s^*CC)'o=8ɪ rF(9^瞵1[n>lI;۞j2T_l=G^((Ǡ#€.0N'$\2GNH pI8H[ (NA z7Cք9p;vϮ3=srx`.?_JUX$  <D@$9;G 󞙩*ݎIs)=z0{7lӎ6>Qņ "6zsdp?AAԝ᳐P<砫qX䜱g bG$zcPZWag?~1MA0pƤd|s=x2:vC#ܑa_N1u,"ȫme 1C޴F]]6g#wAXV5eF 8w^v" \`L雭6*r~,$:O\Uazrp0qStգ{@RTz8kܴ+'*3$c_ۊ뒲/ctq68O~r{p{zVB00X2@&)l?L@G?/U vgz8=FG{=~:[I#t:lqO'b=0p#9!y ;O@xsHD~q3BNM7AqZ1Üq3o cr9 0ǐd|d(#1~}G#\dCsg`SÓgqHd0?(#\jFAہ #2xr:s1@8gdg#8 0=GHr9g͏Im<=Osȳ|0zמ+ A<@9~s\|~4V޻zp1yzbHx^68@16H1ӌ9李{:nRzC~,2NOR}޹q#zuI~8~K NiH 8 lcq򎜜UYF9nmpR;sӀ+)Ɲ(h?O1E &Inq}+mnܤ Tcv)Q֧M3A,>퇡qӦy_1G8猌{,4YH}A,1۞zъԈ%#1%N3OZI]#^o8/׾2r'mjS^>&Oz $V::}A gncoluP9#>-!9ci ܊Hg#hL{wc;vBz !NFw)l>Jv1dNỌ<@$sy8x'yz#<rix;o^Wp=8\=:t=ч.rz3*wcqKvQr c\➊X2+CtpV/r!9<K0S`dd!$Ab ɸ1e͌~B>>B21žpp;9'񀠌 c'pxؘA@rpr1NR`#~S_=:qM#Lu>h[ cqzB=2I*{:Ej=F8OPQ^FG#8\ϩz&?Ӹ9ϦG^xydv8O\`,{{S x|{|SZq2A' Qf0p'14{+c'+?]_Qн$9Aʒzc9'ɹ*xHP np-jLK]ȇbEaYfG8\NPkK:hbc=dMC?)\߷JoF2#Ӟ덝W":Sv d99P˸85q2F@5,bl uGЎÓI=@=}vANt4uN}# 1S\1~GXy20}h@&8 ǯ^s8L;xϨ|{҄ٺ:1Tq>^N˒?s8$8# s5І?hOJ|МC8?5*ګϜNO9G֫鋜cRq=GcS_Aq}yM$pI(V擀wuu aׂq*ya@H=Fz9BZ\t_:>oQ1ۥC3 cazȤ1P}1uAQ(7\s}}zZ6qӜzvSZϔb1>^{Ӗ#؃SRxORl<g=Lԏ9 g-f#Ft[Dq=gǧ'i8H O?Η@CHqOpA1w}aNq9N{d 6rTΓ8p!N==0=}ǯ|E:qGG9("g=2OUsR|T2Lgo|A{$z5wҘ9i6x87=V Xp}i8l?~M#m;sCqq;qS`:IQGB3=Uc)$epN@'vF;^v0Mm$s G =|T{07nМn0=s)ܑ@ ʖ#z =NAmgX,N;e1p=j*n #A9{縦aq6HxΧMsW9z{*r1Aq׎Qڮƛq>=} s`>`c{Wb8^::S'H< `a}k2A^~1֧{u'֨L\:wϷ1Osק =j$|䜁9=U2 >qqorGR6LduߥZ%pJc$}}}RN8ܞ6z Rb8zcrJ.}I>w%/@$8##ǥ/QF1rҔB`Fm#9{ǵI td3ҁ1p@{@ + |#ۥO\99' {cR:z0O^޸i<9>S~9o F:cqDI{;SO9M18$g=WZ>lO^Xcjh;G8A\]uc}|_37n{6?Hrp~S>xp' H1F9 `4;? Ӈ~9=˯@ :θ@ўAc8ci@>l=8(osF4Lzl{cރO16u0G'y+@8z{c֋m$rxs =) 'd9ʷ'\P}{ds>'2|(ZhqasywI'qQ2G$co^E0v8qs#i}=I\v$)F=3͎9zP r1>_]xbzDZ"6sOƐ}޿>Bá'i0?:=%yq@iscp#GqScs9==hF:݌rN; pۃqt>6AJpI_ށ۰x ZpsX{|CxA'`ݐ9 #9\@g}CrǎxWVǞ}Hv/9 un8'=AR: (ؓN19b)!<)XKbezw|0Ĝpp;cE8M  7QGOLT[adg4' <OjSHB~=i ۑ3g3 ^zsI;?\?so__j]  ׃w͌˿J9#@;ԕx?tq OJqh;g#A~'=shqx! ^FI4' x0pO$uԀ(}z}j1ӹ-ׂw=J'ˑ|8i{sw=ϥAwS8ng{R{H#P~1瞽;rzg4\gd1@޽9ԑp9C323ܜޝ|ʀpqwipcS_J4T^02E) 89 q׏z`Mc<>8m9Ld=@\ `qqzӭCWd`~(!}xq3ؘPR}2Os(%ona\~$P2 玔sndzI-Bp7s# ?Dz}ཽ:ˑH>gwS=` u$arEg^=& FyƧ:Aه%=YU p0O69?0)۳ | _# [ #CܔD%ボ:󊍥|N;NyҢTv>1 p~SEwv1SvVm'xsTkg#z9#k%+@Җ׿?j_\'X[)$OPX+& `c6qy8GVr9K$jS-y.LAi)h]KH' O³`5 U@;ď,qj7%xR26D33j"6KT;1*r$qҗgg[cwΪs*+;S3n\78#w-5=ISb TyrK)N~PG^z`\돧^B|$qhep1eUI!*uTJ#'ոU#1"䔔s5؞[+B1px |zz{g&  =O^iS<< LdeA$qCt5d]!Uf(P%޻x)u(#䌻~[g]ۀ¡r ldrQ '=x#`<v\'=;P!@~_w9Jwr8aO$i| +ʄ!y_ч]wӨے \z6}zO2o<8j3*fQ󁷢c9U8o7C0$ǂ1߁]"eyU['AU`9S1 t# ov>)ah[<1\ǭX0'KUG'HԄŽ@U#v>VGU| ĐI>#;ߔb0=h@'699\zuJElGp'8TU9,ÓϷjy*Gp9Lf<8Yry'ԺY'A8xSlQpHQevRO!?01(F r3YrsxL{+=82OYpG8(2zz Gˁ-r`d8GZ9a' >P͜uRj1|h(\zxjap=3:c(`-^3?)#>Fax [s&i褀0?6wd|浡 Q!-u+hm}pT60C1׊=65/x yocWn}7~MfPs1\;UPs:%}l*+:[=*(NJm#A8$5m9!z}; ^=Gy;王99v4rH#8c~?xzp0xjcN1yϿ@#`^'9'Q :۷47{<+aS+BL! #(; |=hR2O'n;r@ҎNLӊ 1Ϫq0G\gvGq  |v>^ 3ǡ@cNsM?q9*PJ0N@I9rw>V᳞&%ۅ7rW hJlcig$s#' z;{`U(T'pn9ڷ>VX L0͒Xt'f843RGs:u8mX(O2F9q>Q8Vc8#$0oo*PYs8kHLj~o s<)cVLgrpHAzzciq 9=sq@V{;93JL`2G8p1Nr=J@p0rI9$hFAPz?jI' 5G56819iݒq)H$/Jb8 VW . V]mKCҬCݴ U 58O^:WuaL ŘI7fa+ЊhúvDgv e5n[i?*2@2n5P՚O rjew_ _S"_xq=9?J՝w0gBFz׮~e#!p A8$O?윌(8# шSc-_ʃN}2c`c$qH#>8`z=GD6@u9CG_e͔s7NOk| `wRz"eR cU#מ]da-Ǩ'<dsڮDl.'gҀF:Nx_í_?{AؚL{`,Wp0=NW-8t&(  ՟,(랄8"ӒNl`x> @'rv捙rӞu?jNF0GpG^Ƿ?Εwڏz?`<::Ԛ OosҦ vz}@aBPs}i@N3nH>:*9z`O#wSpp1҆9۟_X'L<:cIIG˝pn:8x}ݣ `N3}2GU=0xqNg Z"wG5n?8< 1z::np NҳL=9|xu"Da[m+}j dj2@]hʦɳuҷsjGaHFZ|&y%bNx9>ƽZ I8Ҧ,ԥ[ d9i0Ϲwi*U 71_n0lvo+OYom og8  @{T0]BmHʩp=?eY^7(-$c"ī 3^ik:k46\2c îTg8|DY\@~T?z_.nes;rpGJ"' @ r<$g֭,X ;nqT;0W ?:qLٓؓUEsSל`zpA>^x=/R013?*O g$з d㿨t#gGLcf1'#v$r:cǟj zc_| @0d)qsҽ]i8 ̓ʜqM1\ s ׮]zF9?.*ð`8Ɵ!0T~n;WsIr !AbO*zgg.$c8Úq-z8ENy38ws@Gr@'JwЬ0ps'3R¤u']9 }qNoc4Pq[8ѱX3~I_opX}ٯl>OӀ3z f#@F23`Aic'OB)vLx|>ܜmT{1߯=@鞀p=x=~ (ۜ`s׿^y?13IϽRrsbu.)9=9eq<JDu9p?H7s*u^1r李W<#_ޘSOA!:ӏ3Z&(Nq>uwN1</ss=?{=>B1 p7t9v`}N{g5kDC;F}Ǹn:7)9ߥP; p\m9=@ sz6$rq;{q~5&rNq^UG^֙ L`srׁSg's(;G#j23=qd }_zarp28q#'nӧz}@݌H31~fq*y9>Ӟh?( ,Lo, V*l<d c  s#旀FUtr?rpF{>ݩ?r8LP~?uSc>t+֪$ul`qO<v$P>n~ch8Q.W8=r:ߚdP8ۍÞ>\O>ҤٌN#$?ZCdHx<@~8페A~a[8K& l;d#^: xÑcd=;qT!8 cq.8`u^1TLvA rF9?5PpJOQǎ$NNǮ:gs?t#8'ڀ$s\uNO|zR ';@ z?O^==3Kx8 d` q2篰LQrA<u0@ `Uysց`t+::~[FސpV'wԌ 1prz 0 A)ޣuAPF@ $yc?}8#ߎ2^; x9 LצG\8ۜH@y=h@~c玟O—s;Ons>3ӊnNzc9$d60< {3x4Ν$psן$㞼t bۭFrx̓搫($g*zf `6>1~"}2=#?^zpysp210yovT ==(F8:[LvK 9ێ@ cvWHR{mr(qגI=3OA=>gHG<3Q13_OzFs+:FO䓞z/#ל?xzgҜ ep29-G~=x>olG>FI庎,O\[r1A T9Q~1@ Q؁bGoÎs4א3#E)+?3}ƌ!x䁏)Iuڀӓ HϨ#2H㓁4Fpr.2Ǹ<1i>e d`}Wz؋$?11pN6wzeq' N=ۅ19n@*X] dIcz JhFnHO~s۵E8HG`T2 ^zF`@;r(pD[s8'<w`pOBrpwz0H[?7?2:s9`FXq F=~dAF{C0OMɐG#vT=yP 8#ϵ~_@ǾA;l )Ato=I<@ T' O4-HIT3nrS3r9< s}:t\rH~Go?CG4ur;p[8ށ=sӠ<6?q?0>B>uNIBzC#{A9$g1ө8jL@Hl#)3ۿ"ܹ9p:pi<9~R{p=l@X@6nF`xH1Ӣボ~ґG<ݞ9=qR(rp ~\xi ;0H;sݱ7u}z1zրFFF{ A׭( Aց{w?Z:=X㎘>ᛃc0z(Z3av}%p [p{u)p<sUБ2Oq$<`oHFpwpNsOz|:0(1݅=:r}iKq{|wGR;t49=>9$r8g>2 T:w.}?9+bꨔ0OR޾q02I zp[ ךyۍ?.xV_!_Q'8ϧ r3i6r@fAϱw}sCb8z<vN88 w?ҎAwrAQj,= :YIj1*x<3ڄWB#/~ }sm}[[J99ʜpr=?uY ˅$mSi:Nw1$@@XϠ<:dbqm?{AQ6I39Rl} rFsM7\Qp#qS"r䁌g$25w9OM-@T#;@p-EHarYwA=28)iRpN<`}׮lpF1q*ǧ3A gTrNI*0׹HM*)mlU@#$tݎ3WyoS׿jP`s%PA:JoHO^뚻hCbmN2+CӽZېBߏl~$+ʣNq[].v@/ڷ.Y&c ~-~0[}mt$쓜C^e0%P02-[ ӓrkϙ+3VL|nEdyv<` V崏=Wpi2!q/PztC:oSlUv7mnJԃ=jNz0O=}1ڰFM$ JÜ#jcmTngÐv3#R@,Ts1Q~E+?hK1Y7' r6lYӲ=FAV;K[1Թpy $ev|cݎ"ՙQHHT3`0}c*wr6أ-qs9ͧ1d^wrrs } AK|>wc6뚐f“)-Lb!e۰.rvN@ϩ5ar#ᾜv=zT_oBF>>n`p@U9'5ka A&YāJcp pH8皱HS,T!TTnCK*x*J)ĸ tnS@ g+=Lr$v~l8 ی(1댎O^ao 9{T;r 7LqI']NA A(yI&F!FA u.!0v$ѓBO '?Ü{ m$ߩ:LqWKs{ qGV#1 `IPpA|ߩ|16֔0}̷eaPI9.\A8ϧ*C!]k㜺9zPF; 1P}IqOE[\z7L-9%OA=dqI=@.n=Vm|۔u>9#ziҲ*Pc}r>"  Pݞx vv-?/c;kX@$p˝OUli>QmccY#< s2ǽ^#ob1$OL&n9TsC*X73XF8KM2N'hNvqƒ2s}i%9(X'ˍ;w)(8<`?\PI* Q38ڥ!8;,^Gҫ1V6 qOˊ+4H=zR( ##a8S1InZ\c arrI<kJʥ]G*GsJ5"$-g#>V!?¤q3suݎ'f>YfIw|LWiq0V~~޻[ݢ( Vq:s . H,Fp@?c[gvWhF',Tu&ns.Fa:dI :q܂xǿݪD7o8ϡ 4Fq9׭>;8<@~]EKns `: o?y =xOC38 g`zOjxcN>nS't8G *o02>z^ 67 sё鹏_~On1@l4rrx!N:Rq=cֆq'ґ+G^'^Ǒ̜Ar=q n\9<Op^Lu@!r;u sNH#0'wx 8='m\a~oq@igGy'8Z: ӱJ>0zg׎􀏟W q~.BN99'29Uw<{ԛz11*@g͕Ԗ28lHUpx}ƃq>jw'9cJB`q9‘OOҔMͷ'9xhg;q9Rd`z 9`zgЊBFG∰fa'&AF:aGMv( 02)8s:A"v'xnGoB?ɤvヰuGG=Se$ςGҥV'YP20@#oNOeq-p0 ہ' :2rvA6q׊됣,94|mN[r<=9AWsBw˜#sҢBdNn)<|o|ۚ3Fʣ;t)௯j,ӡH{ӞM!6~1$422'Wy=IS| ʞUN7=VS0ARs)v6ǧz6}L$pA%ߌ~5$L>s EGSFYWF\ys5H<s1z|d;dgۊD*gTM 62:O =*Axp|qη"T0qezm pO*r[#CSzu\Ǧ;ߘNO'vF3:dsZqH䞄gk/ snGfOG 9n rӷNIT>|T󴜱#$኏lgH<@+898XUVm^s\:nVa㞕I1ПoQ-{D?Ʊ'9'lpOq ߩKs p1q=? \ڼGS1$##x=$ۮ Jz[ +}{})>gFsH랟83=::P P:^9Trg Od)$Xy0e s98g+l9眎 Wm ^‘ 䂥px_։CP ?0Şޥr0@tإP<{dJ<ԁ0ߑ=cM' YԐ{C.3G y1HàHa%lNOΥX Aa>Q7 *x t*ǂ3ӿ׀zc?Gԃ3vXw9'ׁ95(L;sNNP`8QCGMcӞOD@=v>JrUP`1sz{@l=:cBc#=#(<H<{J#$zpRd:}ء m->802qބ$1QNHęCy?Z ~REݽ;C׊t NۜtRc3#ZdqvpZ6e=TiKQ * Uڄw,tzx|,Lh_n/i֬[U3]  sPH.0s.8zW4i]4w$z?N[b@[L82nsO`_CG ˧C*c&NJnnipѰϖO8:\x&= Jb%a>byשB367 e3 69݌ aZEbVlo ~TGoJrG?4J&vUcttr$[Z/uo 3EDN]Z\();uSZ{IoEJU$mNգfؔ4Wj'rN8ku'F#*\FӢW+#5qUrzv2'$)<=9?̩ ɳ :F_z'^~+/QWQMy${\qJNަ %M1E78'#( dW {aqjvWM d|3KKbݧd޻쐑'9qe1㧰OʾZ\fϨQ]'<3 g3oLt5-9?A=144=8'9i7Pqqps9HxA§=3؞o^qy'Q?xH}i1tǨyHr8=R݀n< :vdڪ ~Cy#*2H? =8Tm1M12@1dzTIN2q?ҭ2$zvp}()r9ZEIw{'sV#H ;xϯo6̧4NgGrFH=>xnU:g4砛F:}R}Ӽ3¶1S%T^pv=O TO'$*%=HGNO <62;GC9Teb֦X;{gׯZjNi##OCצsS7Pb Ԟl&+Gz{O1<XcZp<:QO0q#1Ɯ"\J\<ȼC`m'1LL089R?Ao<F"<*oLӾ+9_&\jn?`֦l?ʉG)Tq}8|:nh`v=2::R|z#ֳqt5S'>1H##!>VN64Ō0*T@z b^zN:)hR8}O97fgKd;-\؎Q=}zJ܈ׂO=N;iO˞Oah#rzQ O vQ;R{rQ*p2>\oEv:E\돛3ׯNvs۶q>lqZWԭ (I9"_׭\V $fzOJ0&j 8 s@}zz!Rp0@#9 80A#$ ?Wt60[~obs \zOP rx#x8/9Q#߆*.7)*xqp\`p1i a9 @(Lx{yTKŀ77 9j9zg3^&a+Ӓ;pT\\N1ߧq UvNZ׎Ł00¥;FCgd 'b4O\tci>S0>;ӁN^q3WJk$:n}@9<upFNM.y8'qtcg zt枀q =q(։r=G1<OzҌ7^x{r:AAZ*Nq99^yw.pG\][G_»aќRܔ۴>(}2}G''c#>8d׆quQQtGU9Ӟ4#{ޘ=hx<^L.{uǧ=JL9}qpHyR Cu ?S  1Ps{䞍qd$`'Y uQҩ2Z`tǯ9翠qΤp~3y!0=3\oQKmHGd}8Q኏>CeŒ9ǯܸ\}('8 O~|w=G>M u;}[yF#8 {}1Ixѳg9=$mpJӦq鸎 9,9z~|qT9Fyqltts؂ 8zrEqy s#ER0`n'tjUPn@ׁd8l?JAǰ$/BW'`3߃Mr|8gP$#dj%;y03\@_@GV!AA{O=q$!''n#䧜t1F228'wR=ri<需odpq8J܃dP`x 1:z 9ǡ 8ܓ#cs;#qA~Ͼx#]pI% ?{z:xu>EHJR2;֗p:{=y@'Ggs*x?.wtqO8$ A\}>8>cG8@<׏t>} g֜B}>+`rݏR}`;8OpM;񂾜?wޛԌ=h$s>ݹdsO8 ?JФ`0g?.8~ð^8`z<~=i##8r:zf  }F0;d/8<sÜE5@یD$* h>q돭EN9^7v'C(S{t s@1ޟ@ ϧK*%s/`*Zccԡ pNHzTB㜞0w1?*%_r!rrGJ@Bz֙xv{b 9?/O@@l:@0xR8.=2A?'N~  }'TBn7gN}>yFG?P402?ZLU NGicp1G@3^z&GG#ߎq@ 91o80O8d@pPRwߏN6pHcOLs@8H ,9 g'j5ɓ =xsO# ;yM=9[=N1׏})K^NFO$z>ޓS<9'xހ1dA?Oݎ0<4`2y*w@>';Hcށ2s znFezAs@aCëc##M“㺌sr?`I}=q9?ϵ G P9Ѓ _jC;2v`{gOq *gz?;uU.q}`< RqwPznOL҃8vsq=ihz $tS":Aa1O OOJ~ ͔Sց;NI0;z^WTPUlLS~PF6~R\Tsӿ)oQy<J hA%t g?}J18;FreϯNjr9 ^JZC7(̭='P4U__g9kSd{UZOnH<(_OƢOK٢Jrh'ppG.3<Έģ$ghAŜǵ79%uM,(w?Ɛ?u)Apd~H[Tg}s98 qRZ]r6$I랙ڲ.ˣa=GZgk;l\g=JzX۵2/s`c+;ױi! u'gd9Tꬅw$b&Q[dv@ zR: v)|HNY3qӊ!wޠpz0#=~kʲ1 3NRHV=8sUWbL(9,F]/4t~/^I#QL 9wygA\c٢Xc8늶gcXu'#Zo$<ȧ Xt<sޥ#` P3pO=ԖWyQ'ۥ!T`F߾{gү-l`Qv(9?2?w]3\gh&ʁJ(x xu}jbEق:N[i_qfF}wdrrrrZ;9;=.|.rNOD_ЖBTq~]tۃ<*'h@z9ӈf !OqOʭq-{NTj$*DD_g@ 52v%BU r33yҤCH-ʇkdO'ޝ?6K$tv(c%:0q׿썻 |pM%N8dxZQIsv qNNjupx9E \c09JAꏩ,R߶{rR|6~'#u9kO ++1rJ9Pd>S!@$|zWB~X;vuu*F3$7g׮(@ o_%XI:؇_ ]~8e4a2z ŸV==yzfu'$1A}0vg׶s!xz_Z㎹^NӶ3ӊvHR\sh8=rqN }ÎqKz#4Óӏ\Q֟IOthOs_8q9϶Sy1SHK~RbF9rϥ! `8>)s|ߜĀNFO;s~\}zPE/'s;ޓ,p=pq4N29:SNu#?\}(c(Ȅ \`WϮ+/ZGs>X9I}:zWEEOk.n>cUsg=&[x r4"N# 䅑 sֽ3\OjsՏݺG3n]x1|hy[P00P<6'VN>OiIݝ{u@ t } pqk(U<ou#3;^‚Kt<{j4Y 7p0{zUNߗy;Z} bBo)9M1ơ 1 ?/,=).ĦC l'$cGj*8d9.lwi]V|A2@'{ؚH> 8c;uQ\XG@A_*. eh2wO˜ ֡$'?. C51eNG' 6nrH&§q\T1H\6?0#jd&M}JcGrsڙ"廮p xx$+{ Σ\Np7dOGPbqp'$ug dB 鍧% ?G5 I >l[1n;:q9PHrIP77E\q̜֐vq5,; zXA s {}+X)8ϑӯCqL*2zg z q[6dcv>{gka4F3w`vG'#真ƴ#i2pp99^`dҼ*^y bc8H|AT㏘`?0IGo_j:&Yx!r9%Hn3i^5n 7nˌ|1ێkOrʪIvN;HPc3VABV\17AӮj ͘#GbxaqxR n9d|%pӃ9zWeo x69 w=s^Ӣq dJ'<>Ůn*@.x$8KPN0qW5uGb19^2ϯ֚rp9sfn@׌uoj&^3>VSZCs"l ל}| œq^u}] ;Azws30{p\W%rq=2{ʠc9B^a-/ѺGx#K 6HGzړLRq 8=Awe.lˎwg?bNX8#T70zu9=AX}= vz~|W^^Bvƪs^ꧡ%('{Tcg*iGv>#Ќz}G&hQߌ3cЏʬ(@r1ӥgrp/#OVXo${`zd2SzS* sװ9-ΕcIcl}); sG41տjLw dS9= Qm|zSsiҙ)_#(y+z ߕ0/ Át7|BϠOޛ@?JLP1p =BO8u;d~^:s8~G< =ǿA\] zS7zrOP{Ā;/1q;Oa? p0ޕ&0?zw=AuF\#?{HSn9q6޺aqG)YG㞃׏900AzS~Ў+e'2Q8 ԞP$7QJAAאO}s?5yƲ3=-n 2 +GءӸ{KuQv8>h<3'<ڟ~A&70})9'<`As839A*`沕3eSC=T9;_I9>g$>iZh 7H-4--ӧ֣fOʞg]n7,|;)Z`ʕ2tL ӓ_-j:E^TvBPz^v8o,u%޷vny.aOLu~#8SPI6bs'@> d@~^ {}OEpW`$rW0}yz|ߚW~~eN{Iqڋ@>GwN1NZ\}jO,zRO9x;gS{}y4t `~t!_qqqDZ)rsJ2n' A+𫊾MDgӕ8w<Xާ،⻩BZczH֧ O»aNIԷQvd~chp?SO1iUP) cyOLqϽ;`Qt :f@kbO/dF }AT\O<<~s(;p@>J``9dOJGCUKb1x8F@9v11ɜA}GsB>в"]?m< =!8NN@RG9gj1~089 96 zt뚔G#0 IJd~_\ry0zw#!<c=yퟯLhqyGzp@$9iQO`AS=:d'ғ'tx㰩JScxiQK=<,\j F18'E'r =N:cY8nmLzu1rxNԆ '99'TEpO^}_Zev\r:p8Gah x<j8[$b̈́$d?*C$t >@͠c< pS 6$F?wSѣ  9<9ߚ]vq8'q{'p'cs(قHg8?s=+RܑOCϷЎ܎}sҴ'~ JA$8*?8pݣvؐ^zdZBb09Og#sqݑ{buu8N>Q9oÜc#c8 gpu>&urr~{:u2@=[`?׽Jm<*$T ޞ0z;0xڮn’@ d7d ~\.U\V'ѕ<3HK g&09su#۞${.xV(\Trzqj c7c8 c=sX|ų?˭R^^Nl}i@#o:G 9np0Avd8璧֚O_Аx)9' 0g'0v2}> nHJ 0F03JnOAO  |yސ<{uR逹' 48 ~}#:B ܯlrj9:b= ?尧 `x~FcI')Ax9'#qzT۱N8Pr=r{e7wN '9?;?2q;wB=3/\RFH{~0 p9NB1Gl>ۺ:Brr8縠<.10@~1r@K$zvzoO;A8rU8]Dp?\ui>8\yxO΁a0ʁvԮ^99=OaO ĐF[8rqϧ1g99O.@q'8_JdSdE=29OPx sq4 .TGӯLPs)?u.G<^ r3+cFÏFIۜʜl)8eu89_Z-O8z p3z=O(*P$?xp8>j.O_Cr2Ǔ—P0;qr;,IS0GNg]UðA$F}Tp<6[{"J9$c(ROzHS֦ڒXH.1bO=UvۏNI]lv0Iqӿ=FJh뎼g$8RrXVUs <"D.2A< qT:}~u3{N}xvϡ&tC9 3W=G~sRO`I .\f3㧯6aG-VgZ\a;ߝ|; fCrTǭz86xu^x^[H'pٰd0W ŰvЃ IݕO~<\{OIWoXDd|9tB9F7d`1=3B%&<*]8:p)w/k\*ǟcڏ.#09b ,=@ gX)2U]vm@'F;G8yLb=#[#}O9f=Aܧ̷~1;ڟ&U;W|֣#rrh#83PXI>Pc?GwR8l֚8P=}@c׵&'t cPG d 9^pG8?TV99';2X'#'ҟn6~c=T"H9#=3L¨ A0Ȥ\nX} g&H[w\{S8)!;8WenI^G" @ݜ*ߟ\ r6:}0jl7~l*?:GjpH{u0.F g335 Veu8@Kq?zQ $)MG˞n4[&0dcpg>ޕln6 ؼ'-{ S/hIAC.z:q;؎.ۑw*)8U::汗cx5{@rz}}wnQrn?OW!SEVLsO{>gv!1Չݖ=r:٭ұSCRْ| F$`"x =pGo˭cUܔ.1[{rӾh>n9ʞwh08ʎRy0991cӧpǠ Ql@x8m=y9ӊy@# :'n)O'N뷠㿽6;@:O( Tר ]DuybAGR;LHA n# @<:nzaGAn#8=AN ;Hzx>?wI=$Fze<'؎}_1ʞz3 gBNsx~zQI-#$qbHݞzaGcN9r `@ϱP+ӃHC ;g?őbH=9>bs7z MGg-ô%QAM?5j*k~]\$^8c3İ#bD!, 84jU/I|I(09TK| \8\A!$' C]T~^N=x6LY#r1'cD@Da6X۞8aj 9޸ /|v2RUeP|9v} 9pI<9< +v(I`lR]Yss8&l?2v3f<<'nM1C*TF:Gj3ݔ ,1ҪT\`ұlܼpXn9#NxjCe[8`G>ۉ&,UFqos9D'o>S`v}>).7w˟#B|.sR,[C=Su!XXNr98#F;0 # `?0^G| ]FHS<*_$7+` *1 u#>=F0q=V(.2X1c=R8RF2N:֩h+jVn 2rF <,ydf+D+X?Z+̼epNս\`ВzcϯuE&Lgo=F 50 0S浧aPiIٸ {q49Wj̅8䍣8*K`}rxIV <F@,xqHl\`rx=' =}GYK)+9%A(^ [y ~'=9Hv$yߌ\zY˧ 1L?7l['tZCHLcsz3H'qӠE8z瓷߭?/ ===P{ rJc2⩭vx>f#ן&q}z ];gT$@#ִߓ"N9~lןϽLtSnF;z;9~ǭ_OǏ{nI4d:W'q=G lϡ JɥF2ymJ>9'vt>?t3ca`,.v2:^8x*V=x9b6'vӸb3w}>%\~BspLu4<]F;A}{D@.(4㪒OrcFq3߷z v4U|Ț/0:}xfjyж; de3<+)S3XUq_\䜃{? O1v% qrFxғ8'nA_±4S#<}SNgF?]*%E01qX.ltNqֱhHOp>R{(>;u>EQ@\$=j g<֘Qx$~Сz܎sUsN=v 'F 1$(7.ɚ>veU$$ Mm g7Z||wec0+CH#RI یq^g'MDy*-S|myZ z3 )J:?ϝ+k}z͇ ^CݛFT$r)D2'@c $_tIe% $Hg1kʎYSIMtq$}a%R>쓋iKZMRMFf?1;aK sˢnʝ0V5.]lx֬=k-6滒i?6uݶ6cˎ+G $)i cwf-޳ {85N -o%7vŻ}0]kq2(qIw֬mN{hM U}*7Ya$Ѵ`fJUeBnlY%%>jjrV.~.B~𿔃 ,+ki`c3*JcB5qը[CZQ愝杶<3-&6:Lޱ5&eKKiPDKE.xl4Q[^X 7]3儂x㷨==u>tw tJ/K6~FjpM> =1 c8XM89zu: c`^:+8$#}8N.==GL{g$rxbԮq֔ 8^y9pq}*ۺzړn GˌcyN0>SW,9R\󁞣Яn6MN#=@Z_DD9$w=!ys8]4SM `u9'-{tULm?JiGV}IvqO ܀:OU㟗s:N5*o*@S~&9pr2nqJPUr>y /l~:7/Tc~ELW̙cP 'f#8 f.H(ˁqQɩ\xr{g㠫 <X0==LA6a~vNX`Tʙ`đFir9q֟g0mqaJI S@pz+r j@0Jy8OQx9'ϥKl? bqCx8}=*//=9\-HX:Sxtq#Or&¤>Sv'#zV508qx際m-!{su=H\g=SMt#&&ђxt\g#)09,3oy=j&TqP ## 4!$qО`Q@B͒9z1ښb* `PNzy3bqZ "eRsx@C >'?ʟ0=szӳ@Gק)b.1GaM'h=0Nr1Xxc9YsG9q4 >?( 5(':uu=Z^:p*ێGzTHoNȦ lg$qaR~X?_ߎx \SߧA֪ '-;r;s~? 8;;{B%sh. cp}3M f=p=st'0N@ Ibq M8{ `s㷥1 ぜn11<LgLb#8c#h>ur@\}sI$9 y|ޜ8wzs1y= z)<}FO׷s@*^3K}H;<팃9 0|c 8OP8=hI8x<9M*y3p:ހ$c  $sBNqMd} 'ړ3I ˃ԟ?3M31QN3۾x=CO|c9oPFp2OLf܀Aݒ:+ci#)/~h s|QCkzv&̽zPY arrcO18^?6x\m .#PަryAI'PцAn5  3|mӑǨ،Ϩ>G%dԑqǿCg8`z";1A';AHv GB. 'ғ=0~b0GE ) A9@ʃw9p}ӇLXp{ <{Ph@F8 __Jpy1%8h@={Nq|g(8@P0# {m$t@ L.763= W9^= v1:pcg=җ 1p4gt8=G?Κpv9~zdNF2y$NW9z;PܐA~< fבtaTr?Z@R ݳ?,h  w!?xAUn):9 ' &R q8W;zq;/!Szϵ#2OLs2zgzON3gOZ '@aU#L<7|@'[~3J6xqp0GR3K pr GN x{ǿ/L99 *~O nO_98u g!q?>#k;׿Z9$ǧ~qpN@?Ro9ԟ ۏҗ8Nc?ǁ*= ?1~P!A9pO^LTGq+.px<'g~{ԙ`:d[qN >#ǡ҅;qG|žbSInGsgqQd` G#0#?6qR+;0[#QVpVN1$_Gi2B/v-zUL,8 g$g=1J0nTs6FCc8* Pyyp#dzr LǘFyیy>Z.ѝ,Kϡ?V~;4#iհrR?ǵWyNaԎ=zdk8#nx9OM z?C֋h?A(%YH\c'nXu0<u>qhP:0NO_G_6zP#ւ20Ǟ0pԊw2~ e;{!Vц䃃Oʞ|ۂ}ѕRz}ZZ-,`(oH NrIx}N2]zCH "u\##9S'0x'-<O'{FpHs9c$$U!\%N:y2.*Njq8œt==)JrM8JMz*!!*6 3=ԞZ {OGWbݘ+8P>xl%UV1Gb@#N_|ś$WMGYRHIV$8n^eAl,Tt gڕe֛"f=s[j3 3G's~=u1ه9 2 GqUFId0PP;r*c$)=O QN7@g X FqTz ;:dc2699=i.m|%r7qxzb&['qˁ.@r@0c' I')WPFU{}=[n[F~ N s*xzbNz?BHE9 3(8T0;g1C"U{:ԗx X;2p(95ór:$=zwn˞w+׶j]{#dc'=H 9+ڤ8gE$`U s<пF&HIJBDk؞K>ޛprNTҐ\;IUaÂI9Ve\Tsm~چ3h<2AoF{y8; q@ 1MOa7 2L8(> Aܹ_p9<)20It91ː~HXXI$GCE)$1 |1xsl$ʓ@='V2X%Jgw)8Au#2v,XޢvNUw0$pq9)1S198\-;v@b\A [ʪPl`I!/ ߎjt9p㞤׮}*sW0PGr#xs8Y[v y䞕Hc #qn⭢rzr I ccY<2J+>Wp2w60qH$ʏ3ۿSW 표+a@s jl*Ӗ먉l0O7\#9fN3†`sҬ Y$g?O&"feI9:zҴmp PB|HץB-lUe<ö7Vqڗ8ӡg'(I!FH*H?{QqW,%AS>Ge谿7 !PTW䎜涰 \pq܄$r{Baoq ds֛OL'Fhd?(S\sc{y)F~t!zvzԅ( g<@={'\c>nJlc923ݱlwۭ7>ʜAFP X qz~i޾g8~\G~y~9pxgLs ?Zbܱl\s'@2zîG$"2A=rqIp8ׁ=^hwsv9?*_zph<0纍q9`889=NWJ:RO=;g<Jx̿)=zqz1{ry 8NJ;FHO sgߎ=Ȥ299ݒO^ӭ&;c;?ځ1~'8]֔NH&IJwNރ sH=Gހ_*^ğ}x䪁~~E펇G9 [=r/<1wcs={R~g_R`/R݋''͐%Li:(};V54GOt(I*,D{yOR:בYwj ݼsׂ+ iA_˭7Veg$2`N3m^iWRYܤ;*:8$zV7cvrd8Vs*239wqO ԑ1$A82O<ƥrdTc@3bNd1DB|qϠ H挪6 Jnj;@VHP[nB8t ==`qCVL( 9 q*/Ug$GQ񩱨 x`B튮̌0HvP8#@'zUv3eY)—QrpNyu8 zVUヌrޝ*0߽`C8۞Gs=)A$17sץSWeoN1Ԗӽ\G$v~s~bx=iJ7B${[;'ov=}jtm^29~OZp4f7P6i>xlcp}*(9`8A$Iw;8X:m & }!y([FFG$yC.vIfsڰ2sp1 z$=7q~ЖVzmm'IE ˮmتާM/P_T'rt<2A P0z IM+"TcoI>Ԏqq1s1x裑MR c/ֱv3!.2@18H w; 9A mO?7p6?[NO0۸ztL*ۢc=hIas8!ayu}=ǽ1G|~*}۞jF lpW# 98hǷz$wAi#]OROz ?ߺ'`qڴ 9^>[)b7:mlڮ qg>&z^ =38#4ce"&$ܓUX=9u57^QH9Ԍ>yGtswsvz58x?1u>ҼztecIʌMC=:ם/AyPz'<~gN 94T7N:؞xC)~l>:OV,`9x.1e^}h,Ɏ7FF vQvc0 dGBz}80pOS$q~'ڗqy^ԿPz:P^Ƕ(zPl}쑞jxRxVh_(S3ԟI8zjKQx ׃#scɧmnN:WmzƷ,scU~#3C9}s}y'fʓ?yR}޻zbp:G֓`ryݞ=r3=`0wSsӍ;9)T#h 'tJsrzpzj\ U|_N:{Hӟƙ3{drUkd+PF@8S##A:~FF>ldM8vzzz2ocgB3Hо8$oe*zƯygOAjx?@8O$Z5A76Hܥ=@ Tw'2xx\Ӆ^rlwRX?cU+،>7\1?ZƩ&dJrNz`53nF>Ax+p>BAB8#ޛ%M; ɞ`cp{ҹa~*1wP=9=9gk)}kksӥ+-28[g\ob$NIEmłϹUPm\B&ľ,gHp?(#E(8&æk>/:9^1z+S*1`VGsB3](isel9}2cUs&>?tzȮ/QfycT,K G=}}kuZlybd%QB㎹zIJW&c(UYTr@'<ԛm~_;&PrhpLc gsj]jQȗc}>nSV(ELj.@h,fR*9t$]=H";sZFSЭ aseAYz8ps==+o YhRarٿ3vútmeY7>ʽҾ٣j2Q_*Ш噑8lεkҜUu8*%Jf]ލYCx{Td%IQ@s^,zf?|:Jk}Ol/M݊ox2$wyqta,nG-`r>Sӏ_GVS9]몱o\4{iK34UDEBm$`} SUG0 lR;x“ӌy$]5RiԿ6ךtj-ۤ; Yv0;vt䟽 7J9ՈyGFQ#_LqQ(y"D} qӶ:~^PPr}zzT7{ W=8=OJmzs^q:t?ҝB;o˞3w`Ol-"z*3t:T&0N~`0A~('FO8>߉7y猎zJLxP?3Ґ}mg'=PA2z<'SQ=$vs:mןA4[<6z~$u;oˑpT})3y$8SmGG圓71sqxFE)"Ԅqy$lg_(`pOOrpC u)L@p3sNP8B{z~9j-OR//=q~7a GLn&ʡ@G8=zfq8z:a1x0=x FSqwErJL*enFcn;p8~8YltD;93}L# p}<++X19gp1POq$;ҡ =0O=9Ѱ+9t_#DB8=ǞӚwдSpݹAZƄ$u<{xxàG-Ւӷ99{gg8F3'0\ul߾)Ԟ3L=W|v$8'=ڜ윀ԏ\~ԚR#'m9#8*3ϯZ S;9~JC׀3lҚ{bF>'Uai5H98 =1rGGq%^#$u:U'f"#:F:<zzNI?6rAzgz9=_1{^ۮ?! ~?Ӯ2; cC;7( dt#>'S$ېA:q]-ȪI2CxiGq;;~#t~\u Adbj[/#Ȩ[Q}:rOҧ~9vc?l?zG=ڭnf'R銔NG\ysמ;wc` 猁,yɞ[n:u xD1g@~AAZp1sރSd\wJd88\|Ѐ@ی1Fy׎EQ,tL9= v&^yAǯAҭ\{}O*s3gsG8k=28D v鑏ϰǭKp8mzr)J2۹w'yS~.,3ǡ9DPǮ )9 ?SެD>n9یvi+c1ӏz cP ^v#bqHօo ql 짜 <Jy@䃞3N1،r ^?qJ9vsJb!;{a8P=rA'?Jo͞9pr?N}^b=G(=}?Q 9?('P6 F{ r{)zyސ-q<8q׷Jn}6Tzr=ķO|#&H`8zCp@ϮXy\ޑxqx`'NxS=N)1؞F0z=@D~G${ߝ;>R`G3@@'ӌ zsb p c|T1l=Q3ޜP@*ʮ9L I: ?zh)uhCoR9Gq#<{wP0$~vF g9u獠@}2##*Sߎ# CwOhǧBGozN#n0q 7㟘^1q'BRA^4q`_cq($!a힔ѻp<q};◀3;=~ 0gp;Î3ۧZfA0ǹϧ@! @` rJx摹#nT\u i9gϿF '9<|zc.B؟imwcRc$b8#pUv}8è8-:wz8* 1wrOH@oTFNH'9?G8( goA>^8\{A#vyz~ؼקNz:=Gcg99䓴pu|f]8N|cзt 2yX0G?xaL 9!?i gߎ 0ݎBDn>PG鱺' ц8b+I?{iu=֘::ޙqF[n=:d+ʮezuP0N0~P29ꁵӏZ# ʤ.Iq yc$' '<xcpĎ<Ҍf9PA# dc <>)I#HIb9^q7p}~pz($GA<8zzyNӎ:?Q}Xcq NF;qoAAn3LN#̩pHb9o_jnpO+[H ;.㓞dzPJ%' d/^?%$`AzS gG'!wO)uN:c7uoI^q'\g<QFNT:*?m1;@P3@Q*w^P@T_F\p~?8<=()uzqp};A$$q?]D#d Č2Ip?.x`=B;W9*}GJ;T "mS^\Ib2x :uI|08ÀVOp4H]ۋ,{I ʼjH'Xtǯ<!څx?y=GzQ Fvl#GLwJ2;l9`I|[8*ņ^ <2 SßX62r0p19v(+F{fDvв*$2H>6d"`c>3*@rI# tjNAe펤u=)9*0I8p<}RHnYv|҄&@G՜$Õך?+^5IM`q9#lF޾#54ll08<7_b/G98TG9=GTegc֦@U`OPps#?3TO;w;л;X&meߨ'3ղrN-ۃ=#۝\HnFH;l`ggW 8RGέG\P3eٞX0\)0?3dg&\,N?I`P3Y,#y Q 0 7bk4l0J@0U{H"`);բYE]w ml}:Wh֠m נZd;F0S׏QW}9Cߑ\2܁03-O~ ޤho\Wӫ`ӿ(x\39= 4qx2p=ݴ gpr}zc1 m$?0M39G'pqB`䑸2=~{Rs ^ȥؠ6O$\bnp;@9%.v?ULb!t'N9 <v\;{H8GFmd v>;I݌9aw|'t~N}3s۸RqGN}h$=;` c~i?F={4(8g+~>? :'9N1#{ 1@ X@|}{Sؓ)G8۟^(3 ~>+8?Rxn^Qq6x?)3)1H4 F'v޸4r@G9Ǧz=':pzwiø8c ''צӑө=(? gs`vP}7ck$w0C?@|z'׭ Lc9!wN0I'INߏ9!G,H {qמx₅qOQ1 0GLL32QЏ9sKqc0f ^휐y/иnO< ȱۛ8 ^ۅ'FK}E^w{\ڲ?$D8K;nVFWr1|_˽oKo8pr9 N{ddIig <ӵHVy[p=ػ g WӲښnʝF6=7zs֤J۷| ,8qӎjr^V,b{l9SS'j嘰̹s=r3CFQFԌ(~V[ SԳd4cm;'s?Na $v2yڽ({g9޸^rN1nW܃׵t qGZk`#ĒH…< c!>l3(;BA%u,9 ~GʪG%@9U"E7d9C`]3R+m9S;`=:zp0 '!Fpҹ ~r AQ0^x#&w aw#>$ vǡT~ϥgH~| |㢕')>(OnT;FpO nG5qEŷ(1@\/>BNxX'pe cpץ jMyGW#wA<ӲU>{U fEC\}k+ml pCg\`qz]'YIqF=OT; Jc'n=:g=qVFWuO#悇ne9IںeuFvn}~8YU6uGqN19Լ*qĀ000O8s[ ۹ԝaXHzWQeBAIV'9h=9b2x c#ҾŨ3EܬUl^~cWQ3ש 0<=cL@ #ޙ9N9ql1Hܮ3y8Oqh`Xm@3Oj?ֳSHrpשcXםٝwG7p2æ;=scq׊o 1d85pϮ8돭y=EА1c?JoFHӎqH玤r8.y|HϿI g9דT``{ӯ#jE#5s+a|O=ӎ*:˜Y2 g*sl 2[9#O>Qۧr`'>ڶL=y:pzb-ק}kI2@ۜ{~uZ#'dtqdtƬs8ۂs~\IN=aFML~GB}=eW>cf2HSOs3S=L>o894BXܜd2s=zP$JW0{ZK.208օe d\LG͎_Nh\_b=2A<?00G=`ï=0?j֢lxV9 V.stI玿ڜnc9J,Tht=*mā'ֻm9$d1ؒs:bgG9=9λ! :7A?Z~qEtrʧ<89iBt<N;kDɏlgҘC60x峂ۨu+e.}Gm|8'w9Qʀ0NW99d|s{+Xc=)Bv=Q3\ -H1O G1` ^̑@\HV3(Q9# 9ǵSqQz0Pq||<)\88OZ\s>鷷L~ kd*3{48#QFs5$9sCD<r@ӎ&>I[$GLk'5@83#fN' 1vB=+m>z$7hc?\#5tDexd`z8Ӛ9_JRFcA>{)Jqn }W4tes^랹 L`\|s\:#-7uo~Rלwe\ aZ-=3wcԞǰ3쎖|qj1=+8݌%֙d=+j'=wm8j&gKܛ`; xBm05&g_Mj9UU6NN23fZ7\G9#?yگNJ\]-ǜ3{z^ 2&*A$rFAb:gUj7KjG&t7./.c) ZB qgoTζX!bÂ7c=5MM"Rsݾ\¾Km6Zf#1+!ifGH e#Vu.Y'80ZNqj-+kXᨤOJI#0īvp+حIێ1y=*pm,~NW~DeČzԣ$=_2) sJ{)6@'9ƀ9`FxHGoAt L523H?@ǧLc?㚝b-$ׂ;j,qF:e`/jMH¥EA"^Lt,\slg9^ vVxժ$Tzu$o.Pg#u?+0)W9UqoNix0q0k:t%>2;p1Cc*N:>r=\bpmN LuۥHܯ`9 9QI r(cp2i 玠[=դf?uXNyϧa? 4pIJ$3N`ISA< 4 {lp |'Qޤ.F';O]8ۑNYsqNZ)2LqyJMx{ H4tʃg_^ԛ>L=}+g:689Vv4T`vׯl z~Y' wsON#Y.ORA)~ĬzU:wF4#S{ִLQ8=x8ӊi=Le.y;z`xԧ }Qv==9Ҕګy^FNkH!g3vFR~$mxXUc<^&1/wa֤xDz #{ԋ$?Sӎ}{qsOpcȡA8c}F3tvD1z߯8>~Ac'H8ux>ݨ@A3鎝({r+)ҭ8,wh@::քO|9S]tGlD:`G_?# :WKcǨ,͎;w{Oru3{❟a${qUԇ '=jQ=#߿zon~ s{S&ę#9xu>G^?>И9nҌ gOZk(9N}:CO scTd=(FI.G$g/y=1`”tޙ sց?I#@OLu<8|av< 8 ch Ǝ?ՁNI8#(b;2wvr: :}0xd}iBu9:dI=hslNzAϷ? :B=zx=qppA8]i8+) 4p'=$-ۯ4vLtbgq0Cy;*<@sQ $r~ <j@?0@sӯ<~4w<8c9pyc8Rr?u&WF9B@c@yƀ>?r;Κ6pF{ҀwRA<sǭ<W<>^FN=yCr_LsI眒z`;8p99s4wBzXyPҎ8>SvׯN(q8Âc3qAq?z@tOE=Fq@y͌0 W<ʸnrE'ԡg~8C?0A$:c9q9('׾)6pIcלv\2; a WHrN 9zA!8#<}#Ay149X/ & Jc=@Xu8pǀ>\Nr1nsRP9#*Tg%r8/qPƅn AП7' C2;Gnyzcp<Kנ=i0cH =yAۜ`sNSLg{`Ny 3cx 49#z88b=J8q yn08 |Hz'?hێ䁎HMP :p t*`rT. \zd;@8pq3p׭&9?) *$C7 ?H\p8+Wm\m1jT`w g N:pprySOq?bnFۃ#Z2@-:px$.717g Ӯ8!sdp=x?JsP1Ҙ*q,H$c_ƀ$E pwn0;:1##z /=x)9t'83HC#Kqr{n[8ݸq@xI8H鞜Tc6~s9,}ԒTrt'S9co8"}Є?#01q֞wn`;qFz"FFn<eǦ:Gah[!$B{t$` =~SUVp8M<} (n7d `&Bf<pGAY%4)Fp>@IrO)8?je= įq+o£3drp8P#8BzSMJ"x+sK;wɨ#yUT3v?ZbO@׭$lp 8qsߎP+2qQ܂ƒT~>QSAQ9#")Fpz`st*trz8zOy8;~4wx} 󊰨>\d09=ޝrVMdz qT')}l!`>͹;{ՠl\UbarqgV < tKsV(p>`nqӿa_BlLn'jUvp 7 m9=qԁn8Rs!Tq\|բ[qB3 yJ[p2:j>iӡ_E?1^9*]UYweѰ 9 հ pv r:sړ2vªF܇g[dI)_Nz}j>I]*HÌ^IT"#?2;0 Ǩfe% TLz䁎9=ML$esВ}Ї}U/MmT$|{isTP,"?.N2Np9 Ub D!Vݔ3nÞ[27ga+dĄ7ʬ~\ {f5HM"O}Wi6|eC.N}ǭlDpЭPI+ϿnE{T XP{~b޾h#|^.1qVy#=?r= Rv=s$4}޻p0~lR>GC$w8n Xy; DzLg)mE_N n8܁Cuqp =N84`P!轿T{g•q pyS'댞OJ$ؓᓏW#pACy=OF[ z`у}оI'B{9ە9=y'&9 `Fq֌rsrQԏ@Fx}y ݐ:?.?\rI N{>)8 Ѓ p<ákxǎғP0#hq>\ߡM#h';sK3'x<|rrHxsl/иn~~RhnFXyEJ %WR.rvts$Vys&kWXo_r0 vGyZR|I^2Xpsץzu1NMA}8?Zarw)$I8LWōÞX;QdY0"O۳w0Njl&2 FuCx#r3j҉S<AzشHq$gn= '=F1L~ywR!R!# М`q4v% H@뎔D12;U˂{fVUS{Y)+mUyGyV%Go^XKgֹ6 NIVU|nbT?hSP8E #=ϯJB* HOC;HG 8H.2qem:֪0bH < Ie3995 }\rF t|g=i8d"}:,1 (xR䑁rF*l2-CW Q;u=.*}:FtRv2[vcm`䀍GvS9g 6C)x UZ8\[()av &p=ֻ؜6ӎ xnSw$eO< xAw8(<6T,=qKc2#A!G],RE<'2\>]T6.݌tغ1v>i?^Q 9yAcXȤh0>y:=_?ՙ,ԟSs6rʌ^9ڬ(yg"[&PA p3ԝG\v)vQoUOr;~T__}hF2rsNt<ކ ?8#9G9};:gҤH0Tdx2rT#z9Qy@;ߕvӧRcu'\??u(lrN_Ӓ|yg$``[(`Go8隌 pF@V=@霎L%6U 'pd?; ȓ19<`GFU^ǹ드gӑjHAbq9 q<$pp'!JO| ;os0I<ԏӽSBRь`:Q`+8jyJv8㠦neLq֎PRԓk!~sRAlԸCF:' GT A]:T8)GFONq)D}\۞qRsEPa<81 3uy'2A>V2uBڐc? g?q s{+sQd2+ -R08 I$^ʅH$m'=z:ZHвȻV,;Tr*axmB;N?$**{-~g[ɭHdgy:D ː;|]3I-32|y85X.׹ ν IOkj5ɒUzHWRxM:TkmJs9D>zZR[_ӤQx4#;mF>rsֹ7T8a,ɍ̰NU.qIKKJ7y+6On qۆ>Xi][`yE吳!#+UlRsˍ>]֮-C l$ %;s$־qbs,s?Z iy䩴ܡFBk ݽR6Vf`TpOSb=7d 2yceH̅8H1r98\Qe'g3VkavKcKV'[b׉u:=r)#AI Txz#=)|{88H I@@^q=AGLg{08\}Aq.>`BGjLCa?*2;d?;g#<xz#y89  s?ƌz APzHc90{ T<h_Q }z>.)>?8;{ cӽ4qg88=.;er1s3ަEsٻ:ޘO}ǁ?nhh!1)p:g5QrqH}3Cf@c29>ǧ׊^Â>ߏsTvRnE{H^z;aPx83O=꓂t:W%H"Svc=?Ȩ_A5%zgg=8ǥVn9'aT"$tg+} ?7's wQq鎊NGo_ܗ>u{ּ=W92;(v#8'jv=Mg=S=pwg{Tw8>{`]O}?Ψ2y$#ޞ8LcB_n^ y~}N0E瞣ױn1oM=1Ҙ=Is^OaPO|sid9T~sK}$g$z?i2z=Bht ?څp{ $Q)s߃Ǧj&<`cN}*Aۦqsg?OJaH<ēxJX `͒OA=jZS p9T϶rK _* Rw+u^=2}{P1#2G=A㿰Ӏn d?88w9=dr}^cT13O\`q猐e=x}sX3:R}D\tt$~S{Is\N>q$(9r?7|?s2N s͞26 =vQeFTd*>nr t~n79M{{[\> wg9<ܞA{R$ o =<: {Jo|%9rs=q?)xGu439' I iuO _ʥmTGL ': FY\Q'.Hqg{d{4vqp7C;Td g~Sی{:;G,;RG9#<;IoO(8'#oAq8(da@d=)Cs}(~ pyd=Gn}{S=8݌^4 pB';R7p ^4 vx1'tv:O :e}װR pW#OG@y1Mv ?{#?CBP޸ggЭ'<2x8!@?6zdf0\cڀ#m?w#9nOǃ.q=7;m;~n(;#<0=n I8=8'=)̜N3yr~n9HNx銞 =2 #zO%`qӊO U' urIG} t{SґA8 9zJs~ƤbgFqלqӧ9dgUUA8= A~:ӆFO<~a$v \*x pAy<ЅscyǓM0;J}>4.юnI`:~ 3Ӓῧ>$Ã?;Tn2I^=h@ 3}R A,O?Q7L(zHS0Oˀ`#qʐq >$r XUX/lNԟ$g(gi۞`W }c`6sמ?.HnzN^;c21$ǯ ؘASsW'8.w=nHvFwc8Xq=y!}@=!HuʃsR$Di *Ic<TM/9B ""ܑsVg8oqJQ+Hۃt=QiS "2Ty`RFE.09 O'hCu8'8 `{a9?'Dil䏕O䕆|99"s+w?(CsǷ~O^ m{qyhT6h1YyQ)c!G[֔!s ^zZ I #1TA88瑊{A~s{U#ؔ|p19<0z31u@lp}=j!A8 8?1݄=:entr3H#vیK$sKKܖ|9rCO ssӦ1߿֪;͒H{oq/|n~"ǎ:>}j@=9AOM8qc$|U"szt s欋Qu9(L{' 088<~ӂccgښ&g??32UpXg#֜w?֭2B=|iF%\b<1k T}n-6dn$a'dg$Üܱ mq8ekFw:{vs yxpy l(hIֹ:r9*Q#21+K.eux< ܤAB9\w޴́F,~RJ`)eS[=HҒ*m)W U ܌ïj,8%O͵8B` yf#I⫙ʹ$ 8uZMdđaViH`[z#L'~$]q9^ ޘF< n\ rA11-8Q}M' y{vw$qҤ- JT!V"\0?0nY8$nPixq3ޤDXm_1<w0 SOU,XdH iq(;GJp8L^6B'q$䰌tU}+ĝG_Qim Ăy'8xF8W$mmq9$o~ou3`sC 1;Q' s׿<{ @'}4 Brܜ/$c}UJϕ~2 0=}sV1Y`ܯ5 $|3 4F FBX.׎*[y [팸$˃VQ=J%rX[$(@܆UBH<23Z 76# y<0s`d \`қ$䃀z0Hmp0ݿ"jt2^m94H͸'x8ԟCޅ_ݱ]˂Ha>xlV`|>YאTOx^a Ź }3٦2^$y $5+FqԒT7^}*^)݌W܂2I\UFذQ9$HxL0cڧwr@``錊i3ps50,>`Fހg$ c<cByrTn.9۴s(`:ӯ> rr\pJoA9zTr>[cJ8 \P1n'9J"C{oBFc y9'XFw `{`uY@A@ g})C{-Zҭ Qs0x rrrx&GcH\z|㌟N[gvAP>prt?UQ <0wW3zw}9"{ԏL 0C'@Ǔ>A<17x뎼}}D r023$9Zw=qx3t\PN1pz=b98{,11Ӛ%t8 ۶}d(8 ~$\TXޜLJ]F7x-y=xTI :?IXcsg׏@^Ò#~hqn 0~!=?ˑ@1#`9tƔ#'%އ'Kð7tbInNi\r8 Ny1Ҁ8r>ar(Hqϧڜ['h3H)߿_! A>)䃎 ǽ!-~Խ}q6hyxϽu1@0;>P>$l;ӡ9ǠcInpw)S?H{3E0 pYyR88_\ds]ǍÌ{ 8$_JvxcH# ֕iT:y큟z6@e_N ??|J_ *,Pt < C3_jGy%z`??28Gs.N8& [yge-O`` >W79$zq^&$ x,F9*~'9ϷyV0:wDpPKIq7ˁzu$:z #qc r3@zQqtOמ[%d| s6y?.ßhccN3$u8It%:t`v=@x󩾦orA$ʏ}3ӵ dc;N8=4\Nr8UJzgQENH@Tcz:|ӹ7{c\?CiNH;q] 1``NԀ{zuu qGxUN>{{d'~*ǎ9}xCV81ԍNǸ9秿סBZ0xʶ8$rxWvz1==zwZͲ@' uΘHQ<'d ߒwx :;eX pH OOzhFܨ y>=1ZDOQrWrm'=qFᜃ&dN:mpx3Lpqԟҫ-v1_3qp Ћ:t=O^ 'Ƃ Œq ;7p$玘Cܗh'H:ïz۰~( 'z>ЎIx rOi僼 098$c1#b;E\@Cc#-R2:<'h|•^:[cڗf[gt<SbBÐp8!G^9jP?R}K5Sc g9 '#ɪ[Nr@+tuRb" pn' guRNʬ:c? ?:kC}Rʒ*?5ۚqRط$p{wW_k;z(-}> V1߂GStAMgGۃG<p?.kI#^O8N>\#ҶZz1xbrrT.0}>ȡ=Nz 3}wrI޹;Fr1wkCB>|tk>aOq#?r$J~EJ[ 6Orb/59P r;uRr>b7} ygcK^: "ee#$GxUG<[hl@ߐ@$sk0sW|2>V>OĽ8J54=(†ֲ_ -Y}NI`v5MŻl"2޵֠ۮ%pC;(gc-9&5ŵ֑1(NHX }jdczQAʾkQ Np@'yUw.xKWf;HSGKa9"=Vq`r];n2vƻ±%rG^ Kē׌, oCǵkjVDL04jBItWӎU,٧4vTz.eygq[[:,#yfWTq+=k+7iNmjR pFH 99Sdq޾5~\vRsR'$c(B3?Rx0OQS(ۑׯ<ո$st98Uݓ)Y\Hz7\t7n֒@hpT^}>L瞄w$zd88n1:VщjVI8!8>P9\t9A9=9H'iqzz}xʜ8F+dt3IGN>Z-,c;Aqs5{:`qLD' =3ǹdmpy-g܁n0A<S,`N={szqY6jt` O^N)|33 ^^@[?=Av.>$9|`)^95a;2>=z_nybwӑE9ۃߌTekOB)0vۂs֪1=:瞽:&=0{t9Ss#?+X-Ɯ/n;93aH97%|Ǯ20:? 9=Wm3&;v3Fr>\÷.; l6^L+H80}OҠn81d3ktCFN} `=1G _Uq <0p$;(ěFq#w^;@D$1˖9*)c':U PH Oϟ+F@:g*}\pG~G_ҟqzvʗ= 3ziyӡOo𦺈ONăǯ[ޕs9Qר@!H$toq;=AӞI<ǧpryRP8]1u/\`1 cG=9p# =az߀q֞ S \qM:؀OjtH9$cx1H @vnϊ&<C7lO=E<8 s'Ѕ$;S^OFE=(0#py?8`}zԘǞ 1rzt>T9~]p8{<:0=0;\v=p8уI2x= ߠ{4c^88^(ǩ/Lu~90!oBr8ziӿ@098j6pA Oq@ @TrA#qLRߌdFs'2T 1z zqr@#)#9}E )׎}\P$,G= :&{` p~\On:~8n݌r7={~T 9rxǮ:gz g裺>ZCCzc1*pܒA-=9⥔7Ђךr~nr S5 02I$p~^~݌ sY$scPhnwdqmr<~TCXp0Q2~2sTPge ?QK08#=sh0=nvG:Ss8 @ ;+u$ud~Bn $0 sO͸vМS~lr0!iØd3R 38$*?^\i'վxN=)c#?6sӓ\ti9'9^h@)!r@9,^?4\t4# A.@i@q~AҀ1;gp rщ? $pGG=>^s0ʑа>''hHϧN٤;r1AzAzn_*F4t8>ӑ֓w4ay<Ocv_i'N iEל';t1Fi屜~&ib 8cs:PTp޸AF}l0yFFq;Ѳr>^aMHNrp{uzӸ?o@$h7v8` 9 ~X֟$r8<JnA ;߭?ۂzaNAɡ qX0WM&% qz :npF1Kza zgNƨB.x#ܓiÓ <==B~@eQ׮ivǐ#}{S( F? ;%PH`1)  M8_|~pxcs 37/%QGB '׎┤RID2 8RK+pCa@t}F1ҧCHب8ێ6Go"yNx)~Fw='/k(ڠ dsL1+דNx_6q`7qf;76C1bFNzOM)Q9l=qE) oRPp0=Q6p1dg׿Z-Ǡ/Exvԝ#qܜj^'AO\UǨ@(2D^yB󃎹2zT&8>p;Î8c$oC0sԳu^XV$m GN)L^I8>*I<q9zm[2.\P6=Q\1Lzq[-wo(9'?k~D r{68`K댞^7ϽK:gb$(Os${['P r:@={gDr=1sG>T?( t'{tb1o#YձsOm#rǿ5)ڢg=ux3ksHۜ j89,@n?>dDbćn7l#:ҽZIؚ}J06>GXe>e^0nO*ݹet J5V#jnقUH ShqM|Ǹ/Ų#@S5Cĉ!_?/ {1*u`\lm!z{4ی#o`NЪT{Lz`! &c؞*,#~`\?/OƖrXVGVpە ڤ ߃C1Rx$u_O@z`G aPPN\.$yBс;qӿCNmF rH,`zOL[ qSFOS!WnqKy>bK ǩ$sg8U%B N8#Gb aB '-)Ϳ4gm8WЏSJaPѲp&K͑if .V?S~4vNw2C79. /J&pa1Ar84`#y6 F'Ai ڛ%j49H*~N <1=9B|$=`s7Hla̡#'9oZA9p:s#튤.;I㿿z#]{2l\8&;D_#(s˜lGaOqy9c6|z[_a7dے dyE7 Gp6sި{0 <㞢@cpXgLDN@pn@TuUwrNӓr6˞J$e뱗8P\gs)]BӸ{VbnJ홷v:|j(܃A;ӟ’$q#vyy݂I ~'򜒪 Nn1C`xlwD~bIo^rds4.W$_,{l(S Fz gL T},7;gq9J?19Ƈ9+s s@p=w+jPg*A{}Zqی#~Aj$ ́e G9;r@X(rwYY#`OL䌐@n c׹VrUsZZ75rӭ%@ruapN8vp2?5w۳<h{4:x}A:gԡCٸ}=aW;I!zC01? B ˌ~`ȧsFvϠ9=('w?x$ӷҔ S{zA .OjB@ݶ_AoN qG?@8I$?mG@ ?3IրW=?K = t R20}yA@Wcpq 9>iryq֋@6vax9N}(fa ;u n7 {SN֕A~UI0yF3 }sltSa@=yJ\s=G8r3@98gsZg 0zRO8.G Ͽ(8)c?Ldex3:ׯFzA9c^`!NF8s۞(l=x`owc8_ @#B$v(N(irǧCzn#1oL1u=8\8 F(=^O@CG;v( <H?=iI 6O`@; QGCc[G\(gFxd1V|7q+fslJ[?AK.pdE3_CP@$9;UeS0!ޅ+$j2@FpySvn`NݜcpqZjB֊6$f @y`qȭA'i$G#zkkS7$TCc4GH~p;;9KRn37@$gAs<V5B$+1|T a!mB6' r:kC|G+ 9[ P`y9%<!ls䁞tuyڝ;AMwYJ/̓qӧ\VFMw YIQ tW8 R9ϵb1 gݫ?Aő~nF P<㿽YE܄0rFI>1ZQ-yۧ'zzv+>azFW/,UH\(|TÔsQR\aMOR 0bK{Y1T]%OVv66`p#`G,1#\3n32 GFOpN 銥l~.Pnbs2@aInUk)ĸ2'M{9~N}21 3G9=~){?w P1$cR6WcKr)seq;t}kW7#/ \޲4xmPc'=y~`ÒH9y(jz~l1ְ!`g%]S'$'$`sӱp&r F,yA{V H \# qsֹ;ToK18n}j!zH%d.RqؐXdКfp]x-F~|.zۊMjDFy@bKqؾR pĸF>S߱1In93P@qؒ=t66c3/@ʑqU =q\~o7n e8bI WVz؜-)bA\+9\ >>gߗ7<܎1{c4I?//zLI#OZdu9Ϡ8;GtLٱA`zt9҈uL g==}8dgNdZUDZT>s\czRENH8S1Ր=r@ u^XL&;g8;?*c=?NG^hy ܕ: t$yrrle)\i8A' ۛ@Y;~NB屍{6 ;Cۊ'\HAִng)ՈFއv18zPg؝(?#>R.y 0ӭ;^8\`S`Gv|c4;01襺W#syjZ4Nu@sqT ?y\/7rԆjj `לw?@z 灎.;EXn94cLkTSCr}pNqמ]\1r#<G-*J:8?> qI#sӊͬΊxe= s8iz[DԜܞ:/p 5Bp:8 ~z*=OV'1uZ<0]8e389$?1IuʮF \ME#Qq5":r\F瀽_0kR[4^$sdg'5~lj~]Z"<` W F7ju=.l `㡯^UE\leI97,|m@G-d^vC_$%HGWNHܷlq yCpp|G$+pN8s9R8k]8L.r{vu2 I?3̮bif=ҤewCP 냚Qj9sr9{V~դ:(mپ2(e-(p%wQڴdiYd H?8K-62F}SCn[84)a1,邠o ۏN*BT۳%s C+LBWlc CpLT.Cy!o2#Gd  >Or{*o vg:Ca㎴SG2fdbYvRy=GajZܸYHrI2'E?j4rŽԕo&A򔘟Yō22's#lg W0:X=>]"MkXEْ)ԌDeRV6AAx]59t ͪm;D$|3n-+4o9utۭr\u%ngfv8ܪ3?vv㵳-d'0iIUQrzjnV۔w뷡gºΉ\X]Z#3jXA[y%OUjNJMB+M r<`3N$^{]Q|7Rq8IYvH$m98cqL{WAO\ҝ^ ֐s=xLg?OX=q:ҿb0HlqMi}c7LcmtqצNFXHIfPv8^Ǎ^wcgm8-d$-76zT``9sOaq@=ю@5REVeqל۟Yx!qOҵ8Sg}Xd9=[8ʬX7 GV B; Jo^>\gu>8}) du<~"%6=+*;FUtgqc@=X3xV5dz<)IzpFLZ;i@^z`)$^o9%dsqB8nW$ܓOzGrssrIiv@?(9#Tnd#gp;u}yL@h@7I'vJ#SЖ<sv?܂O=\3IPdzwwfzcy:G,i+}sқ {9h#I\2aQc'BUm?ϵ* yk:g pN{2yf> pOoץ&`Bޡ$g r{_\f@S##<x5]9gNǮ1i9>`w?Lm c9y돥?{){)' qgAyJTcpGE8dtv@ŋ{=錞=xd}ON%b^ǟEtj\oSwnQj!#ps֐9B[qЎ:~5dwgr3HڤA猌6~<}zҘc# wOZx`mg99?7r==dܐ{?NǦG\W[BA7\oN:ӽg~|O$ y#SGߌzyr:GzL}NJ^1>43z >p}!$'ڐ鞜p9p=GI@9Noʧcߦ{st(;8R99}*Xb:dA~id=XcT{sd#8^zz46G{q֒~|uQGUqR 眞*8})q{(\s^8ϵ1`s;t?0 ){r0Onh=?CNqћӞ?1 @!=OyBN 1׷jN9=P xOOo…ݜup~4p;׮{cTp?ySޙ!0}q?N=1:צQr9{j\t9q#5!w۽?=ON#10Vk}R=esO~H\N}_~i gߟsj'VuTbjLqԞzQ3F표gbFî-Ex8Q߭ AnZ:wٽ98zu$Ks=sڗ- 3恍R pp8t(q9zLpG}hD(>\r9ppN@$89pz Qԡ9FG)Q00#'E Oq) v2<6 {z np11Δd8Cۜz{#;S@z:< 4H8Q'?_JRrH$~^zޘ ~6lۓa2117`}м>>l㑓xr29@=é}#L}s0H8XgZ1dH|{Úhn Ԝ;7c~_at7a'x89Rr$GR 9Oc'ϵIH`N8n3gݩű#Ry;@I#=H=lm'XgΤ'͞q%8<~)ryA$w=Z:'# y gv$q8;rx'22S[P ݠzryzQ%lssT뷒pCճ97s3O#GLǕ8דqځ 䃐[G20pK`Ouac' ^3އ;pd`9ϯQRhmO?ŞH#=i @략VNIV98^zv3s9\RȰ񜃓c?2yÑ( i;89 Y=xPŞAqFFFqq[lܱ(G%{Uw F6㓓Y49qt=1ޘ7cnrsڦFrJsUG3<}3I#`͟``&@'>q'S 0EIcrx`Jo~{~q<Ӈs398iOb@ `GRIRg؁F?Z < t#zsRcG_Қ,Q1S-Y\v3dzс8=K&䊫T@Ӱy #>[W\+E(px<ç^OJ!p;|zՍzc9#z֋oͱ>S=F;Rcqr8?M+2.8#җdm$dn'ܖ9T{TOOrp8 ۭVq,q{.>a׭(8qO֪$u9lΤ9㌜{nћ}GLOc O\GCJd_Q= 8Z1}܎K$v3ӱN1=L/ԖG&  v5֭2H (ϧք$s:d4{6zŊ'N57CŒfmۜ3Ӄ^ AYW>~m&"H@y *ݹ gޤlP=3֕T~Y nx_Qs֡du2\p C0@ (u#N#@RTmd0 .cHlaOr 8铑:U4V a 1?)XJXIQg㰡kc ]ž3`9Q<B%d@1E7`+{*xDyi9=YwgȡvtA(;?K۵I> \)9 6}iL~q v{Tqr=(|p7giK0'##e\}  č,W8E ~NFlV8 g; B  Uao{[n߹Er =9A!r2T sz9 v8꾟7{{?E~u H y^c* -PGaۯJl͖H#TP>bU8N9M;n <)9 $5Fprt*N-ݏ^3Ur9wnR8`g{Zh w7$=sW`NaFqZUB.d g 1>*pRYWvyh!)$l$`pFX:077*w^b{SJ9FIڣ',O[As&OBnr1d~z_rH#[$>Ea8In\\zLHPԐzhsrj䬪˂rBqSF=t^U7n9P0"9'oezuR?X㎸j aJ:w<` ~Ck}Lv(b`g9;W H61ܝ>*38rzvNi;\+pN܎XUV pFӎTqG>#'Fp@wvnJ/SvdN3g8)mbṤ5<@IRĞ98Ok򎅣v{,(qϵb΄tQߑR8}q2 |2[!y1ӽ\w9\pHrIAӠ|,%vC8?\޶czqvvݠ1皸v;)$iyso:sqy#ӿ~*1cؑ ҌRS@>2pH=) VHr3g)3NlՇ=1JRGl}A9aF1yK>$IP/fs>{0I'iĒs@ u;zgu?_ZB|XO€F@dtLNw.8 ~G{sroZi}x灓=o^R)@\{w@01 qjU%p3:-ל#LowLS8$dF4 gNTI< u$1$mq`bvԂ{NGL㹩"r 6x'yn}O>rCsw 6xxv$9 21qڢ> ܒ94:yWqN1s.2sW2Aېs gB;z \q׊ Hyt$sQc-1}&B0rOQ=/sp$ۯ\u2A ԑ=(,28Nx?$G׊ ev(Qp:$84'#OO_b`dddc`>%B' H뎘r~\cr2rǏ֘s收`x3W;Ípl9! #qXPvqٞyVFא*dO95Absd~).y=z}+k#]XdHBNprxuAִPz38^1W%EM=z$<9vd7r@ߥB-:,]h63sЂA`>\uz*vf*W~lE?OlS_q%B a8#+r-y$H^{}Gz7y|iIߜc՝)iӸ?Ĺ\n_Z#O#9䌂${V2q ᘖfB{rqְqd 1N+uDL 9e8#ÏҧOT2i%̹rԒ@瓂`gS$fxS=}AxFNqZFʘbF: JĜz_fv9n0FN@$ݽ+U9u`1=Ok bwgQd#\^Sݿꭗ'iӸ=Rc8 R3@#ۧ?֫??1@2 .j_0ѝ!:?DduQ&483$1c_]'?*y?+Ɋ89\Au#@m40/Syn6I E>GPsԒ:y=C}O*T>灀1֔w}=1VGS#@Qp6>`yM0c'9$dOi<8$uc=3O%zvlOOLӊ@'2zF84W$ rG9n{)!s\rڔG=$ cg6I'#zPTʓ p1gށu+睡x#qڞ@GSjG vNq'5tm S6䜢x? Uct* zϩN^eʵ+~rG;= Dn 'u:gl*G=x=u]T?Ϸnkp3B>C+@['ceQۇGE;I2=X1G8ݿ~lq8H#ԞOYGRp9$xQ==yL(#2<(9=q+G=&ݤʘATpC I'+dh\*ZG)ʱCs9P"oAV.-Uw+|B@MTMēJ-DRXdlGPO;Uʪ:V{ݡ/ s p'Qko6nU#IXߏ *ǣiD4G0BJ`@fKFϸ"Fʅ{Sy^ע7 졁Ϙ:ԏaOm\cvy 'W13Ԍol{P+FWBh 8뎟CU1p9a8z qYV!7/`FF|ggg9O}$* 5Z'rzsTN9ǨOJ*s٣=Mg3ɟ$ǞBФ@` <ϰ4+"1CnyqV]{ .юs߈뎞! >J륩% 9Sא19+2#9isbVȎcׯq89R@,cnv9!>crQyrr7qU `x>qiq'j0aqH8#9mr~~ R~3>r~bzҀ!$*$ߏ~|ۯ|{c6~Xu}u08?~qcɤ1uO@0~_sdx,G tD~Cvs:g5`r:vkԍG =c#?tޘoCB..>q׹B3:j7p:}N?L48)#㎹)x0@?; m=qOlu:WGqQJWs׌iagLAFA{Zpzc u9c]w#Ӹ8`3؃|tϧL^:;ssۜdMnH޴=zb>~N:y?MK9ޤ:vT< = R gzOTcr?;O#q=+Td 6/pye*;891f&=v瑂2|tiOsc<`9$jћ$8oW1#r9ni#;=I{?CeSo.1֗Ė/N3: ;㜑s ?ZA<;1/~ahLϥ0  6i|uppy& ,B8zr4'Ncc1!GI Nh{nG!c6A#H' =shc0b~68d$s@sهCy8?Lң>GL/4uu0rz=aHNJh|gpO}iUxz}izG<warrr2G?0בԌq.=}&s{w?JOA,8@4}:IQ8MZ !8|hO1iA眖SNál <3sמA6Sr 9~\'y?.Ӄ~gZWR=glonj.gJ׹j3x~`2#j B1<6xg<{:dgWczh v` to_ւÆ@2 1 zW'(OB>`{q}7ǜc`I֐Н@z.r>#n* 1:O9S;qïr98$3dQ6:8= rqrq[9I_ÑTun8=\W#'>T86wu81^ҐF Ğxߜw;ۿ#=.F3z'w3 >{N @l0A֤'ݐI)nF1HGհssAӮ(@$'+۟ǥ(*X\}@.3[{ GlB;4EێFH~jP88P m\IAV Zo! rr1 {N dAU=<.ң##q=:Քʐ0 @9:uߠNNF#9Z@=9]M~OA?"@^$  *rs,:|-pI1玠Ը,:`2c֪ߕ򪶄609ېF=:E\cݏT!M9>j08Ϡ#M#x;r0{}n% z/9y>uNFFA}ZFU,p9ҽ %Myz%xQ$OhT8 TNAX3J6Y"ۋy,sxق`}iସ\ rއ߭q=΅$,ĜJ䐤pzҨ w/V_$uHZ9Ȉ$1#iY3sHI8 3UGrA*r§UWN*᳄`,Nл~BS~cߧTN]FI rYAۑFSdcrdgvSK|!=Ijk`zFwmA?xnTA=1J pd'g˴`Ol~52ɽze at20x{JL[paI<ԇ;FKWrO\gf8ܳc`Q AqyN|dhde7yLH2\pIH=*px`gnE_xިnau#=0A<yT rXp}3?CKLyISnBAcc,N6[6ﹺ=x=v`G~0K䓕`tAombx=pHR)V<@#ö89W?SBO˗#8N7 ۛnrrA`dU_t,@^2́Ja*"I_#%! ⡑ ێqOܤn9or{R($$+Q98'Z1f>t:- _vH%PV?vsŒ{gA\ߧHt9LI&'p܂;c=9H~߶q C= 9{ǭuads<(\qیHv==z?zLbu立9M!x9󝣶=AA#<#=(pyprI>i<1&=IsǿH8nq@ u#q鑁ۚg@@zx`AEsx^fܬŷu*Aڃ!ۻd8=<Հ#nHq^Q9;Ъ<`s+n6H 7<*h+k;i= ! sHQ>SbGC3ƱF:7ucЖci ON$>`sZC0 ?g9ۦGJ|Hep0qZs8eF!NJ9A$sVtt^rq6zm8m>^'3ZDU0,-G9s n,s2g޺E"7)ݍmǾFHsz@;A w~آŲYdO(pJqޮ(Qc!~n$rN9{Gc# ,x:~5:UU;@#1ޥl.)\<䃎 R-pIc;ۓPh 6w9'Vl݂r0c-obp89L7b)G+8qR3drʅpŒ8`sϿ5~QH u̸,@L!GqQ X=y'h=.>I A2kqʹ*~f)9j%'5 787^*k9'$/sҳ&Dpj#8zVկʸE)Qvk5C2n~G4탞ւ`FrV2ݲ'#$m+qéɎtoRA՛H{d~Ǩ)8\=Kr:} =;T:dRL翡 \q8]<{uHs~4e(Zh!B=u׎5Ӧ:}p:cښ0NIۃ>c g+AWG8檚r,(#iW7LB68Nŀ'vqSc:_ƽJTGVl(z~?ȧׅS+9[>9$ʞqӷ5ж9!'q{U?xNXGQM&Ry'Ўg?:ϒ^?1u֩yݔ8_T# H@a;q׽]Vv9L@on~Z`g78n)6;5nX{z };U w$yÊK.\29=ZÜd6wT5!!GO֬+.1$:բ^d|ik.q$U:wO]ۊh;lSs`w֛u=x"Q8v=G=}S@.y:|Ǧ_UN8l,`t=pw pyzvΙ~8ONOzc^#v!H7HP:8yGG9=00x=z~8#G?Ŀ)`Jq׮)Q3g`Gl M Flː@?9N21W;rHOA0:fΪg7q8Y" Xpredu?Sݼ(YHS,98WzC#tוR_=H WaehGl业B2 #޽q?,-䲐7(32÷ҽ9Աi;pnoJgv;lg s9=:W<67d<0( AבZC"22AK  ɕv2 h"̮rA0>=k5/V9"F#i5HC;2(i% Ί=y$nOBFq{W~խse}r\T$ qi]NƜP0>9HЯr嶑_ FiHUnˊz=뚵;' 潺T<{-6rYIqI~\*=Hga>Ăz񞽪u^`- w踬i$yAw8s1Zju烁w@n=\02X9H !H85pqp'N2f|.F>SR #)9'hG 1ӷۏ<<`t8 Istp=C^9JquxZx2? =/O҅ɶr;s;Izg8=wzt 8$tNP˞Ug'ߚ,8T```ϥE!wqp8Ml9ʐsӦ)<~:.q9#Oc?*2px8'Na- '8H}}EG's{jMsC'֢e!z3u4 z'mIn2? y89$N:gGLwz@F A11.{Nwz;Mp>\/8*aG$j(#`}^ޔNT#,)'ێwgoojC֡7ܡ$}F?UP1 0Gl)N-܅dTEc˯LC#488IX2=2:ғ`=H3k#69)N00ӏJ퉓&99;?58. ^L4؜䃑'99#89q#*/r{=z~=<ypp2di g9Ac3Pl n#9z&=ݏiXd/Oǜ@Ud9>b9?ԣo_c^ٚ!9=?9kl㺇A#F9wJ>۟SҾvN&q$sG^ c\kPўz۸< s< lB{9<<8;GOR=}9G=OnqC"W׮;`Ӷ9j@Oq`u'#3_zn@O\u^ݛ$r;ւ/A潊*EWd)`)Χ}{z]{3~t Qzwj,o=Lsۚ;8PXr)1=:qϥ0p\cH횫if:{g@}I 3[4l Mi^<Î4orNw w#+{ ?ZOq` wYLN `{{g9;F ?Ҩc8돧wAӮyLr}/dgM~w9l>9L/>>~/F!\;}iïgMvؐntnsh} ^hJ6Ǧ`ʏT~`8Q>s2^ӯOH#q'20ro_J t=xqSֈrCp~`3})1q" ;1 Iy\u'ǿTK1r<Ӑ ;sU! zQscy#R%/(8G t=rQpqq"$)u#$=s4IKSPx!NxO'<unl@9 q֨sg8'0pFrw>րzn!G\c9\`g=N;m=1:zf^ymzRwAp^hsŽO<}OO,N8bNN>CNLpI=qӿA01dabN#8naS:`y֋Xv@}F~鑴X#ӥ0($RpPî8= gq뎴C.G{82[9c~8&;p޿1P$h?H$)<'cェp}{QI凱~8A8'y9 P=0G9g~ڐw29i})ۉ99뎪?\zxA91ڐ#\x=W"q@97# }㞔F@)u*HR`cN1Ϧhю@^=AԒA1ǡlc 23јn?j=g!Jxɩe9g%xNI^P1`g^EHFIy`_!(CYu€8#}?<`qg 7`I@<=V>I*Azdcv4nccچ1unU[8~7u^<DZNQIoLǯM-q8$(n;ӷ> 98ݑqӚ6<s9:Ǟ'n8SW鸂 PHSw\S@K`e{ 㡠d8vzdw=G^py%''9?Ax`zv^=)3ߦ?$zuIHې=T^ǖx4NG y^:CyV$h:N=jIՀ,1Nj,0\#{uj\ pp3ޛzú =zR㌂r=A }}jv`ӧ'99#7X1{0d`!v1VucÜBv{n9#< xTPp0r7'gObP8޹\Tp{ 3۸OjbIǮp2r&89p2 8U-h&[XAd.r˒[UR'~p :{G%P !99S=rHϷ]Ls~ <tuI,Gоh`0y#?*6:Ͻ5N9Sp1HݜdOt$I^suv?ГQQd2M`2O#Smu*7Г9T%c֥wqIއǯJt>,t#\'2\y3ð/%gǮr9=}C6 לr0:N+א:3sj7Om2:`9Bܑӧ=@J29یLLv1H6g_2xb!l ZP, M;d$a$y!n%vq{VFWT [bs*6ѫ:Q~Hqv@xGR@8Hdes1ݱ$:g8W:+l!?9WNGpIV@fmG*0d㚎u- C!9rˌcۚf $/03=Ht%=ɐU 37$pn?Mڡu`7M2BW#c9ޜT#~oFr#pE;k“IbAʁjaV;N$G <ґ/r#6KxC!FQx5*Cn?9jg8xIcBx_<# בQ~uQvGDz8InuN}?6T XHj}БQ:7#Nqx@&,>q>yv>eBQ a63݅\iU;7bm@y`xPq)Vr@=? C!c a(%#eP[i;rry)YR9W+#ds*KPrFO<r}i# W9 9SQ1-G̟:|#Z4iCqQd$сcl~; pXuvĄcir >ٜ!F^OR9| $ pO'ڵFr*?/KÓGD cx 8֋!erFv{wE[p@uW/8HoBs*tl mB2Ǎ=Vк >um6y$dpx@-NӆT`~**3$NAԊ+$e~yWdn)$q@#Mzu)ق1\yӃO8%pzjHv?x6Jێ9)~TUol"'֟o]~arpF9hƠh$ЌWFO9s'PiMI]}#·d8$|jc6zEۈ;qsH:U%2rSw]~4Y;ߴ;]uH^}F}7UJ0`{4vQ}9䟯;܇'xLpG';99Qn=77c:{~ЧI-=שOnCK<1asN샞8~$c $G= rm%rAϫҔt+c9H?JC퍠9느m>I 3 oֆDq#p?rWnO_‘Cytg[ |ӈ$ \t#zRC+8>LA18N 9'bquȠaӾ3I=N?<$GךmdKzqMu$/*oqCg[爯H'$ߨ 峛hsa!#+ExCp$ *e@29ڵwBX5֤aJXp[P2Fr8%TOA\N[SGQ-6(˻!H1X|c*72iPAf0rqןzns݈a eB󌌫c8SP˹R y9't;3w,w?)I G8:szNs+ @G*u; vx=Hl@H y\ F"K@ DwKe:J$J{߽?-FH?u'Z<ir39ϸ$rXaA`O@88㨫wXă)Lwu1;y[ԁ ѸVPq#+>?wv0x?s~c ֝R-I؎T[$9!<`M%bY2AP`<<~5UC09댌l 8m =uT%w7|:P(`u~H'ޜ%n98϶y5HZA l *0zzZс!~^ ;bAݟ^:R\K7ػdy9bM$v+XffdHwe*g?3랦g`N,1=r0zWE?橹GqcT8_Ds`:( 'p?p8:_oaCSE1=r/nӸycINxIշ0e'7/ Ña[ikgj',BcsY= @\pw_~j p\sKt%GDC~ 8Bӎp;AKCsJnY^ Jn d+b-8J \n|@VNrl`n3N` 8''Os\pӁzc'v9i<}Z:!on8#*0'W654l<{v8knӌ`\gm/1lqʼn#ֹH<99߽xx{xnC=?/;F1/GoAnzw`p֥ء8=3_s3F@.G֫< @cR.%7לs8@9gOz0|q$/OBNCm=V3Xܜޣ<}p8g5͎#W Ԍu+$l4#W9>)to9?ϥN )n=Y{u۞g)2as: *qǷAdQӦF}HL`y*ɇOldщOdg}^GRMw8r1ӦhC gxϵYDUkݑ}t#ϡz 5F "u8z:cy3^WkCͭR,*cՐ1#98ֽHBdvH0<($NHӀFz|\th%c?JpGby ㎆ev|c$qR{?5A_w N-̟s*Yո jE徽<9FlSۑ6N:> ʧϮӂ9☛#>w g#9u}~~4 eTgwr9'<4pzBaszLc wNCr3׷=3&۸`IH47~L?O1{dc9grPH zԡr{1c8!s9==:c7t8q0G$֘FG9#~R@Acj8(DGp1=sӃQl6'@ ss93HTdr3"GQrzgGҡ(8fS|ԏo=>'MxCNGBZy |lIIS\7#hA0G9pk*sJR~8pr1Kh@o9㞞~VzPz*pu@:g[1!AS}kIi(8;8N8H88cFH}D wtQdqrA#$) YzyǮzӚŝ9#%{~:O\ +sG<{}<0T H;^955덮  裱\^8CKv}P1[08r;k{W9 zܑ)?0;_233m Y6CH;*rQҭ>0,+6{*Rge|H'BU7!HA >k.y8$t|6<fNCL {drI黌^Ne#,HN=H ނϸ9͈*ߡYW `Ce8{ЧdRdXۜ AwZqVZ|䑏\t?F@@G#L# i#V$9'6hs9$w \tI=z>8N*)%c 9 z|[|"zqV@9߸e 񞥘w^0*j3yPgC4\p*@`I {銿'h?! q^cccn],DۀzF958:cӯIKQh\07(=@OMxMnL{#du}W8 qMh!T=3{m'>ֳ-19<׎d8?qx:f*d |āAlpq֗9$;xL4sǹ?o^Grho`q$dzuɥP:x`~P<''l??N*E~'qЅ؜($ 2 L3 .s׶:{=#:{S$ }<):PpyXc9N#=A#1?p܏~~X.!Cu'Sd szq;r)r `pGbN70Rՙznz($ |8Ͼx'ϯ^Wxd`g^NlzUl*9#Z{i6I#r9 t#cמfe.ױ$O?ʞr=9?cv~}N1N>jx98nY-tA=Os9O| C@R[/L8Nc9KAS9#yiySk8r:RH8- #9$$jQBc؟pqL$u==~Jx'=yփOR}GSG:v=^?na sN:'Ӛ};^ socǥ ~}1Ki8'}}iw=3~b3Ԑy^GBi ~^x*~P!;\U#6O` RpsO֨CNF~$qY`7޴Flz󎧫v)=@秭M pq<|/ZdFC z?ZvHf'==qSD/  t8Oc,F8֨?vr91 ]Jrz}2z'ҭx<: w'ۃ)X{olp~tNzrޘ?Nj.m~() spTcܜRsly8s'y88psp{h 'vI\Lczwd6ITI8= 'A>_)y˥0bg?x=:; 18֐ ߜIşקZV pO@?Q}^x#O;zcϵ1X8l9r = NG^ @ێ2'>+qϩou$~tN}1?.w>7t\JN.zo9:sx<8:~4}2G$gʆ?1c@.z`}?SM%G͂󌝽CcŽO^z0;c?Tބz0>*4p= 0r0{b *n@nlǃs@Fzq#',A\$p8bq=iӷ=@ "?NxcH PGnT89Sӿ^)A Y tsӹϡ n9 x{Oa|6y=r3)duq\NNqvg #4x yGTϥaӕ$.q{S4݁H?Ǩ:P45AO iۑ=uӨ9&‘_#q ,8=6ボGS۷z7'8?)q{6 UAݒ;┟LN:c{{Ѕ`g8?(i2y#$uzlBg䍠)b00IS,Wr9>~nÁN`s؞=@*Nxzd=hwgc4 qn'<s=y^$z9qF1cVԴޤvO^7 KS|\tY"Z#rHf#I=*s>^0U6ea@>oyz9ےNtR q 853+n$ ǀ3چ'˫_9VywߵJ~֬.9$ICT[z} ns?u"uH>_Mm_~H#zpYP:6[?"[rFnTc'SyS2?RB<{S{d u#{eM<)9>]{eF6`q s-A8{S3c=50{(9[#ޮ c S=j`3|rI d={fǏ$<(dqM+(>~X8E]lw秷pq=08:S$rN#s#=? dqߒ3קZ%mFH'Vy r={ׅxKu[Bg':}*gQ'Nby @v}{V BHTwz֚^GY{3 (T6A@ R#@zz0dI~s0F~E֟AB 6 C0o 7OҞB؞[2@9Oظ*S|`p;`VCpweNG\s#Rb[wvb 9#=})IONWx9'9pN(zbF Rz IPI;;F1#CJkoa۴` 鞘 _~1Ee`'8 H*Ȏ8$t1֙g!p zG'UtC|A07L1rAvPKd`)o^[ s14I)Qu R9}>ܰTXVڻI!ICF];-_Bv3Q$\ ,A 22d HG6q H~n8a00G=qNW"1G|eXz.Ht`s=P!63od(1xv /eialNܞz dd/݂GBvO#O0_a@sON%=|`dp'ԌVRzm~OTXڙq 0} i6ׁtgҚHN Sc~pkBYTy٪388;O#©lf-F|.W֬DC ,ATo˜P"ePᶍ8Ӄg&rU"5(B92ze$z3UFĐrIO(J@1#<sׯ gyUk2O^`.`bI|޽Bo8 9><=q]~rZ}A$g=ڻU/׮Ӵ8*Q3w8Qc8#Ldv?`Hw8N9(?)?/>y` G#1H$yzPvs0rONisǎy!qsG^8L*{g@u]K `{}9Nx;yT3PB=:~TyQ9䃞@=<`p8c}hf`ws{Agq8ŗdpؓN aP8nIzz`^㞠u#=x8 89F usϥ&0 s9t~ޛl#HhfYIqr93z.W{y`trrCcF2v={t-˷֓ؓ XwnsH=#n?.ANx u68lÓN#1\`q 9c' _î~mz s|Hs}HyJ^u9> xST |z]ɿL2͈?6' #9"F癶D0ۜs\rҤ}3j|zX;BFĀیM_bvCrG'3U8e|`~22uǹX?l…e͉$+Wvf;. dJo0n9_[sgmM#f>y;v `+qڻ>ϩnr[f ?<.G=EPcǰvU:qW?W"k PA9x#Fx r3Ԣ ߽\H!*ߎW #=NX!$~zdzkFTcCu s4M*Bv9Mv4{Fw,n!XG?js 3<ޛ2b0H[,Ϧs֧Svn[ {v aˉX IY1ʍn'L`tG!WۅPO'vN0+;k-Wkd\grӨ _F9VX g!Qߏn*DHԞF6] ({8uơEI,VF )ی.2GV8?)$q8FFzX=cASPܒ3gM;Yz(c9l4)seyݷSߚj,0U AOdXp;q(vn $9┵.>f Y \=zsbnvspr2CLY5^̑A v+}iH@*A##`WE3AI s@$mzs?Zr[cG_1\n/U^O~j#`8,88j͕`gu&fyFH#xQi-Q.aNrĜuƲ$\mF2HxWm>fcGߵB;@_[8w=y*\y x֛Eh#`w=kMpx^zrX(sqvVqqfls}*cy#cd:ϰeFpO?@iSuL?<.=zOR؄J=At38z&;8߿PG;y>|w#:sϡya);cwյ^;v"*<ܲ<殢}~.G&KCǯQ'sq_c<Nƺq:c#g8w犋/}@;sqD+NޙmqߵSiapAҴ2r3epH#<ڲ$$>coγ+ 88\_vvddt>gL?19!qA{i$  .Uq3w^)ʸzqֳnFuA'*ž'Ҵ#rup@[%R8dp >qZ+ ,P#8 91]qZHDzuunqV~7t#ϧ|S9ԝWہ3柴z62y4ɹ UNp08@hB`Nsd{֋`g19=qH'Zaʜp z;{q=CL v'w؏_~Mg㌎:N}2]y߽.8뎞Iʟad xL(=splgn kg<`\S |`cPu@uMd)=MXqNr22p3Pv08kǯ-lkMlF=Ar:dc9cz1Kd$Hb;vבQ``g׮?*;Qd Q˔b3T:{@f`L~sqH\^\EyR6ob8z~i&D Ž9߭wr/EH]56|ud.7"2!ܮ:blvG=1_C ]#ɒ#o6Hnp v'p9b8gA۟rN3zJp9: x;%CCAJ>ny韔c=y@\ x1$p#b\yKPA`- a8mٕ 0|ނH<c>r2ϿM9#v#+8YJ}I*1+w})8#8n)l#tkg!C3<@Pq~8@e=)q3N^sr#=ju^bC!GFq:VJE'i~nG$1lg ;[5-29w^dm6]m9eNX`isI6{qGB8 /@?A8x1uwϩi1cAs< vOԁtձG1#Wdxo]~4xzc*`q`G0:kۣMhxU=u%=^NG֟=92yӀq]Z\v= p 3ӯ^*h=njOFW,u9=l3r98$TaIPB޹$Gs+.`ۇ#1l_J& lq{`y۞C &9n2w/S M69ƴ.rv ;zu. SAP q'V ;Ӟzw5_Bbm X'z`Ԋ)%A{fnЕUGPg' t Z1=2 |2<ə;Nx#޴\ۺG|zZ5 ǢryJOqVr-lO#8^:%9珗isNr;s wrOXw g,rO_ƁuT.?uGoZqsc eN8?41ߩ~= @ +?yG`q;^'XrK~90 uݝ[sQ0 8fǹҫC {Tidq֔ۮOAZ=ztA^5= uwrisJꛝ=>nv0Jr9#Z2}RI޴n#'%s*`FGx8F;}^ lxC'{u8Z֏=GN~vǍ[rSz[N;k#=NN>siJ,o჌sۏz0}QI1qӡS~G8<=Yp:\ќw ߶gnisy =@7^ xN^8`6v.zMw`GL}?9'W ސ7NÝ?LE]8䃜I:H-' Tn}prBrH2:Gqq֘qF9~~灸NqGCxSWӧjaāp~_g8?w?1,8|siu|@{~(Ws:j >l2q:qҎ \㍻ƐG S7p8Q]we~l N$y_Zi#~`3#3#!\@O~du<|Ĝ)1wp0OQ`pg NWi>{*t>=-=~t0z*1 .#.w2 FW(8qRHnx mу;ӎF9xNZ0ʨ9Ў?0 m8?jMF;`849s^۽MvI'8#i[3>An3scC~ig%ns{b4P89.Ï_q'+`:~>Ԋ~cS&y9Pws==i>>U/\*BŽH`#u vlRt<@8Ұax%r csc#P $ndszGaOR8z9?ZB{T㝠vpp9S:aaP3{p;*N6998Ҙ.:>R;8 O\`*@~xHXU9=#e<:) \l&e ͻ F3E00p{^R)l7NG$q9BAX)IdӜsNHϯqSשANϹZ7cx8qJ'=xcϯz;Qp{sǵ{0\N@y`Hzsސ؃vAz:d@vzsS<ysw&%|ޣŒry ?9^Fs…xAZ]]x11AFvp8'^)A<0IѺ𦘇{<nѻ n݂NnL >HcǸ4opwXp'l@oJ#A<S%@ʁ2r>Rsclh'8g@'p;~ &y[?qRO!?VFO \prprpq}_@I8rqH°n\z@Ys1usi;}wc$gځaXc=8qzCzq@ ܌gOc r61 eI\3ޛGe =:gFM

`>s׌;-*ˀߜѴoAW%mI8llG>YSzҩvd(r?t'^9o`a}1R;npA"~gc2܏ҟeܟ2q6`md8c'?68#ILHlf2H-U~ P@G|<Ұcw958N.9B:NqO=9JyWc*= LS \;~^G?֤ۻo ~-%Y>a7s =0*z.KOF~d'峕\}Z{aq$d:~t[<H-ҭ!9#2<5}=HlU_?1'(ڑ gJV$YVq0~u]2 2y90vFzgҟ_#65~_seja9;4քF9fx</{U_&Hcҁ6L8%R*q$cקͱA?$qǾjhb2?:=%|ǖܹ#8RFA]@O#-sӮx\*QQ`9N{Ut@ pQ)H"(yl+0F8;q@bg֢;rTA֤d2JGsʀ8C֭Ŏ/V8_Z5_UWvr,zNgjd·*>c#loY(}" AFs:m(%]W;cr3~MiqOcٴ{3Dh`m@ 8Wz ;\(}ќ|ǭ_59l{ cj X'ҶNBߞx57v&/Sks)A\|ǡr8j3qmg}6ߠ;v08laOo^ߨ2Q6ۥ4qH#'PNBNGq{篿LRG KrH wd1ʁN8###m9$F{5q0:S== ' @p@t!g88dܞrOYI8?IzuP!'(#t";xCIíAoyFN<'ց1}s;3`?0;C(G'0:Iҝz9_ƀ=Ux$=i8F:pI{-?{RO!y>Ss8 qjacpO͎t=zw#zqI`dnss#<`K}v8Y zGI }[8EcێƔq$qm8 ='`1?7I<LSrymӧ$=FO?Q'%rA!\j{s2rsփ ~]= HÎ=l3 &#=*w.z 921=f=qR1ҽ/r(rmTrg=wַ%#j^PpqϽLֆ|*9/I GRg%IwRgkSv5t *`(U6}9ZCu9Hf|8T72#d pmY3f?LzL~Gg-xH.~a YINIe*?=kŀ=AV$6鑞;Ho5Q)v .7xr…9a`0?9N+u)1G^[qR`# q=8銢$IH\{ds%A,yF:nFlnAÀ玅q 6[9?bQ!&<}|=]^-y^nLqx=*m܇$#r" Jޞ. Qp>we `lԊ8A IMҌÌ}:zW>~_ݞJn/ ?D^z&p98\Xg)ybT62Xguֵʩۆ=[,98{*/԰'nHG##swb>xǹN >e9)l|vVS3r1HK52T#=0ú֣:s}k/{oO~Ǡ)8On # rsoҩ9u5|zOț;97`'\'`ϯ|ʼ^緅2A8=* =O\`{I^k#鑏^3' Fwc3&&ܜw w^zo˒F쌮JBv f 88]ҠRoމ0F|r*z|c~zVesl˄ oRfKgG ^8YmyLN:*O&E:u:3qRp;^3Hjt9O80O㎜~={1s5aq׍֐Wd LrN1cON@tcsܶ$Ȟ8*L}ONZkrҮ0 rpzqcw:*[#ߖ< "dž#wF2y>1M':z}yh`݈<3۟J탞0>itRaۏ}qܜ͑g$}:ff{0l N=}}bHlvXKSK;w烞[lrqQDwqRB349 n@2q@= I3[h!I$mݎ2pzԁ8-qz큎nʍUfsXqԓG#zFrFkv <x,?Oz:nfǢ8{d*ap1Az~T§?<#4cϥ7a{8^Y9R98wj/)y9rOlpǭk0 )8#>VUv4pH q[1 t]Mz3N`w cRCnZg9$mq=9#rk6l81OChns<' ?.>n )?x)lsR6?x%>i2 J)* 9?zޔωuauq 7nPsɯ$[7@G=9USסW&u) $, Ll` .cל{]zb.}ܹa#wy#q{gּb?n(˞G  s3ƽ^XHݸ+>y%yүĥr0=y}^ K#Twe!OB_Ϟ:Vr=@+է-xg{=lĀ@q֣od מ݀8Ԅ8޼ԈEaQw.SX`@3զXֶ9J d\cXZ!$Ct^ <{sSG9NpIq;IEj[^yI'pfT(#Li POawcrI@}*6(IgJ)c6)z(aԞ0i3 /FG'=^o'9p 7Ԁ7Auݎ8HW+8p:gi":˭Tl<'N}8֥ `爑IێHLڨ2h $c\ zjZdLn{f?1:}ΜugB*2$ 91UH>׷ccOBsxǯ~<KQ_O tVdHB:c9ӭhbz qD񁞙 b!=^y=qJ 8?xXeP?OO@#$S^grrvzӁtnv?ֳb*ss0x ާ8^?!!39n$`<?Կ3BdfzSG(czc{#;,.xscj`vs#^7UNO'9K^=Ұ'#J=Su/#<#<CړOc01v׿ZLc9;tz41IO Ir;@>'A)$s򀎃'~?43Kdzs8qF Usܕ$q z\ IǦ>8r3-׌g׭?,8\uyw=c8L^w )QsԒONԤAI|LdN1Nq=9Fހc(7{Ϧ=yڔcI_nB t0} {KA-e~*71u9B'8>PGs^dw=xrGp{z ;ac60&!$*rON2:sӁ브t3zwQqL xLm&098=Ij>y2r6n>Rx|p)xFTf<}~ ^Мr z 1צ$88KuӁm A9q錏iKsp8`T8/'<߯~iw6pvF~Qu4o|ۈ;FdР(<`c Z@7=9F>ԼŽ gҀNPOrpy'n:Ty%nhib~#}9^˜͜p gI+ٶ֢bNǰӥf$@_mQ qf,y>}i:B ߗhzpOrqQqyyH}ᐻπ{S~\ל> 8g stpG_s$_R9,dtzI d4#8 #ӿ^jXۯRs?@rHONʁ O ۱xU'}֐؎8ݱ_ђ1ی`9<:` vn1FpK6^(#'`3:g> d('| Ǯ=88y\=IP68co:QϸOgӥ4I(lo*#oC@ALLRry犇|؁׌nA&=;dqir7r RI=''Jygw:)On2݉ۯDHЃ hfx^[(*#0s1iyG\q xO8ڔ$$=rQ('wG8֜ bF{?ƀpGR2I87x8xq8?ORg郞<: X.:8qޗ?1˻c8$^v*{ޜ03qr?}{~DLLOr0F1Ӻt>_ʛܑ0'0p?^}lTc#'>'_ƨL]@ m'N0 j@}BZ$A<9h'#P Ǧlp=򃃎(B''x`?GJf9<?y~bc)Jc=;Rdyr0xޘzH 9ǧW$u$@9N;9?q ?O4ӐAсL? s'ځc CJr2C d <.se9ϸ}x nzp8?29=Oy=;tVrwq6>Lww8S3Sn!6:(Ka=(׷8l AnFCB{ 0-^\@}ZOO"ZqUl<1$N NxpIHsЂ@ lgy8xTXI׮ojJ0xO8T 愺*C8wO6ld vg`OskK (tnf$uȩA c<jfߘyr9S;s128Jih&GN@gG1IۭZD_R131Ŕ2ssVa?tcʁHRzv$ڡsط8}^iS֩hE$pOR=i@s# vB%U ,2Bg7V7^?[vIs\H^0s0e[wfDZ8q`r0=HOOQ,r9;#過?2XIvQ?ަ\t9HDž, 1'RyTܒy+ښ2`t^S=}qߜϚK' sx8= 7*qB*f(6r9gL:w< ǯNۃ1㧿?9n: 3cJsyzV=6` TwCBzm/%I<!T};ZK8G&p[+$+UG\fg"hRnR9 [8 Sσ0ȤD[2ĞO<:WV>NmMHn#xy*9 |38:bzU8 jzI7n7 H`rJB1 F@YX!SiF'hr܂L}In_81ʄ!Ko9 v?n)K}i\7'i?LcrwBUWڻ~Pi m8諹#[/=F>^` *A%$wh%2Wp%^zqE9l6г?7(eH1+QcOzD .Wtin#pV}'wOF#dK%! )ݜ}/$9%@G>}~}Ԍe@*Px]~C<T3HnWK*I#8T4 xbwn)أ;C~|v@>P4__ODLUsǧzUV9]+ ?~=G&9iÀ}yTe% n8F9ϩn>TS u ː0x }!u"o$A1Nga vm l&1pA"5 wX~1֘as '#+`r3Ksq#?J0I$ve9K vr-@8 ?!(9<|y>bY?&T(FX~vyu5*9*N3C۵4IaUՎrN}^@( K]dL\gq'qj|l+6Ӟ#n1ߊ\ga⫠"an6EvXls㞧<r@A$PsI0Nt=sԍ ;`$1+F%O@a^ .2A Ͻ7Gr#S²pzV(27Uq90p'Ұj3WyURVz T‚l#nT=s1O,YG s\z.y=I /Fu4r8^@-qƒߵ&& wbz ?.:AϠt*DH>큜t)ʠc9c';#:$1@㎄Fi aq۝ q׿ZLF 8$ {88zNrF:@1G%{8=ۀpzEg.XH'w~zTq9=>HY񸞽8PshsӷL1ӷ5.'+GLth&~0H*ܞM9@lgnr(?)`q~c>Cn8I֔ܜ_cNPIU  r'OZO\ށ '< z[#X#$`p~Sz ֜~c0WS:N! `wdrKxR x99Gаzۮ91'aač2r #N f7s'! Si8AN013scs`As0=G#r\#cS= Ir{{c? rF}iO= N1>ؠa~m8;G?z^0A!s1Z, qæ1`c?2qЁ?x}_4{x \'gcRi>0A9w v?ʁAxa 䂸`N=33rVQ}3zO>&KmYb :! Xcr a 8 spOz]〉񃷒0'=@=[d~^tcӥ6eSv A6xQ7 vGj3譾prG$O1 /E'n\>㜟J'SB;4 L]wnp(Tcqֱ{ ,xڤ`HGRGN)bx< -Ձ\ kp{,:2 1 pKl] lȄr nrsϰk&=J 8=2xk] (pFH NN#ҬQB} ݆a@׌3cy<,K*a [pP=2 6)v\7'q)Lɛʼn9An3郜-TLmR1jn@*+n W#8*:u3a=@A v7~zzu$m'g}*70.|[8݌Ӟ188 `<{w.$oS+:@cʦ*JK_l)#԰=pz}i9 a;ߵ4#^&Sqy@\VݮeY :!r>#$#* ysn}Hr:su?ZS:{?G*2B$dc8ֹk%ط˜Ɍ`?jҞU*Co>6+\c0;I8NՕCXܮrHxʃ=:{=r8b9}Ϭgu=0}ڹɗ\q9 {W{Xn<tȨ=qp9 o¼zC `sQ߯NR99$ʝ qq>T`wtEAc߿P$ c:i Qy>K! s?SSrx u=aWssx^O8A;}GZKCoR rx0rQBz`AfTi8r~_@Nz~5 %}rx\)H#su'#p6A ޹RHAz7ʹ8#%rA'g#g9!UGB9PÎ⡖B8RYGL`<z捿ONN}iзsH;F<\rsZq(fNyZGtg=8v F =x'g|6ӰcG{ULIw3H=EӌT rO^ygh# C1#$6 >ZrǏҪ3 8c {zlhl*#k6iz CzH9qvv'^1\Ihs399>$i9CQӞOjptdjzE#ge+8أH ޾kZGP=[0+b\$G)[?#ƯGI#ewl }pl !~bxlrQIw<$G;xe;@o_5ri 9 Nzq1TԏJ`7ٜ 9<"\d 1<{d##'os4yzGPGn==) ;*3Hz[anx4 a dG>秥^7*)ʸO_|9:1RYy<(c1v[tо7[L<6y=9,W 3cWv;F^M-]Ѕ.;Jw7(X@Asb+h}itܣι 9 ?>iMʼngcnWoOϚ*rwmgmK~fp?V2zӎ3ұn轗طi1|G^հ[~ z0WGď8^ONߍ]T %@lTQ֞#3H=:{9㓒1cAֽ-&d.p8; OcҪ8;vP19z풬d }[1: 7F28\n!.'֔@#lCMۜg 9n G%N6OPW0 #zeanP< N1[oPʉ,G>G~ߏ~Q7N{#Yd{H铌<~<ҡӍ[JİprAƯ*׌~?NM= ^{:=qDvx'rzl6u䁌A@Wz\5,˟`g8U< @$=qPy'80L}Z~ϮI-rIjI>@>tzA'a0Xcw=+M8 vqsMn g' 2 gS n܌vNܓn3g/?Sx$}G\L`E㌜߅p98$:Aa\nI݈Ͽn)Pgy8:,;eRKpGCcpqQwdA;~0dga'pGⲞ= y^}Xjzz';xqG3uG%tJr>:oO=)j:@N>B)}_N ?= ,v2s'G ߿_A ipH={:@&6|`?A~V&$VC@'q Rd<>)2xD~Gt!ۧOdq秶xu@xԁI9Ԏz 0F*OB6`4/ NԹ*9M`nLtR g2=Iltq\gq3ڐq:L\zS 8=HDɟ:9n=Ojnc[7 n1ַa61G_1Mx9#zgӏ{x}Vܴ31}O^tvځ׏;A3^xۚ> ww#{G~Onzdh NNzoқ87b=2;P`u#9_8p08xgqzi`t:Ӂ׷b}{2i=㱎0pq<{R}89>;i~AOZ3#~8tJ;I<J ӥ>'rG@GBҏ0?zryRʃ gS.6{ 'wn3LcL3h[=q~p*u#'<=HqϥZ܆3GyǮ}zV#0zF=9oL cyԹt^Ѐ89,p$;}>Ny+X8$垹ؔp?)NԤg9>NOp:*6g`Fp8#=O^1Տ8$?8|89w=җo^eqLssHz(Ќv'4p q8{R$1ssG=s'zcN[P?>N3#s@=VOF ׌?7N\m+c׏s@XoPpr@ObzJy\ 8>:dnF|pڻOJ8vu~OpqN'>e?(rnyoqFz#$p@oc4㸀@98ݓI38?}z |`A:qӀSԝݾhN188Cq;Sgv< "3@zo$`p;H';cX(~^3qyL M /̓d(Ґœt}zvn s+{#9ny 3מÿ4w'q#O\ \A0={tUPlnAHn:sAǦ;SK(=K`p{{}aÁ^I<aht(eFP8=#ZFnצy⡱46qq8@X 0zF$sPH'Ӟ09':>ё s'9pj.X`#98i]OzCB989^hl#(B q䞄q9cd2I!sߏBd3OOr/ӧcB|y1w.:K0AL~ "7]/͏clqvv 9'C0rpFF Bi#r9ҁu?0yA=8'r=~J8(MCc~H);88wޔ0ˑܳǞO T O'?ʥ8z&!~V'v8$u;vN"j-sc;vz n8=7# p2$14R@<ׯL3vOV9{gҤvu(g'HIFCds_RDxrNG3߅!9;98''qPR0g3`qK(fa ti`gɤPLO@ oz:0H/^8 0GnL})98@{cڀ2<thP99`pHAQp3uy=3;#7n>NH*>֐`7=Xr@=8 *OV'$1V9iH=sN}rx}/Ԗ` >n~cǦp#9N@OSV29y95 l@ ;Ёv-،9> NNzMF3)#@={r I#LM$0=O9֜1+Hb84+ 3ܯ2GLOCI쪽AsLH@県<2<װ@/<O AO3I\0=i%s+Ǯ}r~3O_Ǝ1r29y ۰l+R$pBt7Ej`2<*8c߭ZZ[0}!tQӶ}, #}y=*@}~#"فg2`=bGVCd+6pۺ E?~ '.9&m8'=}@?wQ؂0;mkN>#۴gz故' 10r'?·2(=O>k%`N ~<]1Xu,lq3ڤ?SHrIozs4FA9=GW% Пぎ)w=*$x}Aӟjrg8- lP3O=B`8I=yR_"A 0}@yl+!*N@<}sھa D߻~xy'jnڞMD$ۗCA3dz~nh8~fA,:{ZJ3ƂD3.Xب)8bKfvG׾3zUnTPc`䑀35Ilgi p9 W*/#$Cr k&i̲vylT |@T-n 2ۭ$ؗ ÿRX*`q;߆GǞ@G!wSb9,@U\FWI9PIGe%a$gq^x$UR~T,FNˎ%{Tg0 TIwNޱi0bc8Hەr=#4'??Z9?0BC v~2%Pd87{({ -g ast`CzB;gQ%d2r7g =`(kO .?>s~)0KRR+INI^G";׺c鍬61;q`ԙW y =3+p xuO ~HiګsQJ aT*|x} raO\}qV|Ux c s' #sʟ/ }85U'ז, ?uVé^] fd0{cH1Yws"l\@CHc匆;{g9nHHaX8=:SDX\I8U1g'-vWBX6`=N :!#R?v>% ! @`'=ߧiH~N`=@`Qqg'*U Ns< n#@fN3F9^:Mص 9|C\:Zj܏-nJ *unjBc*Xn,TSt6qNy |㎼TA^Fc4fyWn#pm"v\d q1A6O'{eޤz2ؔm.IUqpI 1<8=q\p8*w`J_}=b&(O =fyiB#=vq֐uާS$z ֔v ;~>!lqN= {Pؾ`r8ǀr(Ƿ@'*SK<Q1ӰF08^ҾBfԚ\&F:qb47 XdmrAl(o`C6xOƹߑKeH8=;zW~Fuw]Kni_<ȭ[6V~n`F0Kd1u6 oH %0p `;I%/vA' :{$P=W edngScۇVR#=dz``uj'(pvOֶ8[/BpIRK5$᱃ٺlzMgס8i;ۮ=p3;b8 lePlPy79GTKc'z sqMɗ9Runr=3=.'XqבߧԇԺqǮGߞqW'8==vQrՑmT y?VgJ1#έ-/8~*^0 d8;wfmī-Xw 9pTO^#R qOQCU񞧝G|ݍRܰ铜~1Վ9w zqL.&9|晷x y#.!^9mqL8xd ""灌<AdsןzopP8#ړ)2GϭV?<Hǒ|s1P*,G^ssG9qVhsЖ'8cw|b#=N A( ,Qs xxyX{xʉn_Lvo ?JًvHǿOyUuhFzt=Hw1_Jgy"bǥ.{a1Yn7pG#ܒ1owZyx8WVGe8cO/Qq=ֹzr;s\}(gqsڰ$l nx#'s+B㑌ӧ?Ve/""O,c9^q]JZyqO:cdu Հ±:Wjz#[) 8=J2CٽQs'+zyuhɸvJJ 9X?g`XP1d?6HAW>~kV(y20rpީR#PXn9 pjE su^IAO['8 v$M%[I 7yL- H #r} [UA?(|Qg):3 '9LFvr0_-oӾCֳcXvyYx$9JM[ =GcOzӵ S%5znݹ&8`001+K穅5=@vz?{4F(vTw\sWb+sO&}|^I6:(g=*>NOⴣL'* <,bg{5|ASN;8w^8NjZ{zdgh'ߥ@́x=NG|Ȟ|z} QCS"F>s}{2fQr61>b6 ޾-jZKBrYTdɫe#A \ r=Y9jV Gps1j#Q2Oz{T" !NTgs>I!sH nL{Ro)W(ܓvc 9oR3XRn gO_:gLUTi9@s ,rI6;Rr'#p<`tQ6H#oA / n;֌k^ϥ4KqG s79@=H9Q7%#r3hޝ>^0p=x x00G"z$͏\@ sI;~aF,1s=~}W'<gۧzp;<O͌ždؓT ݜ>8I$R;}3TI`7F;A8Ϩך[wl =[$t_JlXVc8¤R} զg$N;9wg!#P sZ#{ urF NNTǵ=x%HA{zDy_N~|f=۲{?/J,8@OUˎ8t{gӚ~ ^N{~񑞃?>)vsgzr>4 }3'_Pgp3>4\n ]9ϦsFy[gxO$J3߀:O'9-MKFyaG]?)%O'| ߐ$*3'pPbsYG̸Bls@ Sv1iO~mIߡ[Ĝ)2p@L`u?7S:$@N{cGLIb޼c=8o`T2t88R44sד# Ja ߾)1Wa==)/ $t gBp ^'}hqG#8㷧jC ǎ$p1y0prO<]c'#~<&1~69_cNQ~bKc'SpF19 d>:fqܓnU^GmBiēsӑ@J6x$ o=Ozhsg9~TxS٦;`[;ц]|nކ!W89 7g/OGЁ)\.>bIeszfO{\g $ ^}Bqsz:z~7w01Ҝ@NpN3R(=G~B1O׀@'?OJXdst'`I^B#C(o^z9ݞch /$vƈ=}4P:cJ?)\09϶y})g\RtSӓ?SRg1q8y]D79$#S$9C,~^ԇnC :`.~80>\{8?wuy?NИ#@9=GRh韛>}($'XRN:a䞿P'x©#{҂=Td`r=~,R1).dd?I鷸$ߏP N@;C֞8}:p1㯦yLL_PTd/N{A `2F3>($_(*0s$?8Iegzހdg*vA[oNzg~P4Eq9![}O/`+3q `y;0; 8oїP@9=OGra#s?9#ޤ~p$ :}3JnS} U$>~xFe;|ҮvrW~\SK,Xd`m' ZG:n+qqC_"B'U(_J qE$ڤ,Fp3@Ls8<~tX@(HO=i 89e%N3קZ,MDž2;8*u:K.:=_\T90GzC]{2P1:pyw FiU֭ÐN6~vSw;OAw|5IXLp$dFz{TN0@' 9OsJz۵8|f=G)SxoF<ʧV=wPr1hBaF*$p?ثtG$Uؐsr|vZv=NN1zb&Pp^R OD< N:)@=? ꤮w q# {a\I߰}~b#CD6?Uy~;?(nvw֑[uu '?j\vlӧ#gS )1NOAH# AR 9@/'#Bq>ϩ9*,QG^\sRӞ6}GҚ%Bg&=3ǿC9ȺYUg-o8Gμ:AE\\9gJ~k .h5|˪[*K#4h6۽sW- W' { R݀3_GJEwJǃ(U3BFK08;xykFY Q8URԗHgb O(xqWV^sNr}+Rc݆ʑn~LgpyyIʬ܁/W#=늘.d1H`` U= {vrç.rX>SAE sqR _$01L9$rHiE6@!BxRܒ6mh%۴ RAjA i\yI# #-ӯn;Ig$n' s94ǹ#v,sWޞэ6w7u3|B$Y,[nP) qRrO? cå LoF>NP+ x;~t3p3n ۽IoOǥg,s=@1]ؒlE;@2Y'v0 qel W13֬@$ ABTlqp{7\OLqM*VMi#F<{/VUQ1l?tR%݉p>jAs1t>񎵡,bA2[dӽJ̌$ 12MKtRpY,J0 >=8@XU8ڲ893у~U'!O1׎:tm`| =9d)  OKW:Fx;qN.NHߓ=z9ݺn$px,RÀ͜0޻x݃ϩZE7 c8>ܴ{I0 eeMu4a-Ϡt=%?Z dzSqQih[?w#=us=hVt+ӡdݕ9WO/E*B[ۯÁ@fcןžH0N:s3:y847#`Iz`D0j6A0 'p y8$}E7qtdwҁ9%瑓Ozp8$\|OʀbI Np1ءi=I;zg'p$Nr3\)ߜdq$׿$@.8 ݷ:r3Q9<9МACQv~tN: GLOol) OqcΤW'0WӮ9@u4z 4qAT NAQT9cۃz'0X:毊GbN A<^:qZٝGs8ǡ#'^}#~ pc-N=]Ko){'˻|c+x<v6`+/fzV*9$c @9$'ca>*٥)!0z{˼qT"$3g8t`g;W=@w(BG͏/Npp}j'N1l省ǿS֭bnTC#a၏wm*uqӿvE ;H#>$fl;K̛vz^HN2sP)lk"p\m@g*|Xup2h$] `?cN0NYxQ$'3bsh#=*08᱁A)K.;'qa$gX}{1޳:" X ?bUCow:{ F~f!]́~O ac=qP(UQo\F9]A'=zsWQ4yyPϐO1<$(=_od<Ix5; V09VzZbSlqG䜜/OL0r k91ss՘hP᳟|ffXslNG,XoC~f.@n uZ4?+`\n7}3] ٌ ɴW9U1Vq;g3lG2 nx]M 2nU88g] Vwr{t=x2r"Fkt؍ۂsqG?Jt z!{{~wJ#'Y1zOzfϗ82rxA1XOVcy;t9'=8'ӌ\O 㱯 >F= h>?kg9L'=0qΗA; 9`9۞ڐ8{=zװ)pH<nk`Ã<?ZKsxdMԂ@8GX.ywTnp(g<%y;պ3=;q`KnbFB d\S3u\vZш1(γe<0` Zq8C\R, `s'u^OZY` uN ݇8Zzds׃zqOH>ӹX_QROr;*(F22G֪:9isB1}*Q^> ~'#å]Dҽ<<5*ibpIt;x^:4pNqs^UodzZܰ#xPq)Wɜ=O=zP27m͐Ip8INM<33~5X=s`t5YP0?N@S27uG*d)ВF !߰?ζb<;:iV=T1^EZ@1=dי(D`G)Ќ{cI:=QҳaؒL{>5Mw2e>.z|tv)Yv##<Ӝ+ͬgu.$r=ڱ&o:d1\w= G;;PL.:Xps~bq{DЪ}=uTg\[mi$39(pqgd DcUhJ{fjsN6g'@hAK0t2,q*yLvR F 8uح*Kl'k9ٸT'=MBLLOg8%t`ݕ`ڏP7R@zcn1b"$vymbz6@dz{rD7$(pPr@,[31.Oë0FGER(l\0W;In9ǧА%fػ \k.s9sdϓys֓[ߩLLӧ>zd$BQLIU>E \.rRPDOqIvt+ijO#PFvN׃ǹG_3Qb!hy~b)wӜusGw3l7?L>4>7!B8s]0= Wng.&vLD ;Օ^y?3#׹ҩlO8ǻzqǚ11kdqxzJ@ Bxq̪8V$RÐ 'V0e3aqcH<)`uPXcҷ+i ~b,p"݁H$cn}0z 'wC3r%mDqV{0qziB39'$VO=1|Ñkd8$1'=)F c^ 2'=6qs?Lu櫺x݂8?N=w*קԏ~>\ۿi[[}w.0 ʎ{,|dsO ,'}^UR9-IlH 7RzUP:y럨X 0K [ Ӧ QOP+wϨg%'cn{(jqf|;ǯY x\su)hL7ǩϿZ|ԝ85vv0xAY`8?7w8֪pzqRztcלzԱ!G/O^nCǯeN:aN{|t=z) A#j9 @sRwpGqZx9\_NuP{ZB7c( sOA :v\qw| O8K&Nx8z܍ ǠG@tnzzR88wqҏ#<q:uB ǧ`Rs=sׯt8n~=@2c>^rhcՇC?S E븐qo$cQ219n [=qqh[`dלG@cJAH,rNp}W=@'Gڙ0}N #׶}w vS*1ך$= c^=*EeI' #qBb,nm}³#zAHp9y8~uf-<|NG? xcH#{zɔLH'`ui99'{6<u$sԃ}qR8OY_pu-} 9;T8< )=0# Ԁz?aO3Zd$>G >o$;A'Ӹitv{pxiF= $Ivz@2A=3ZB8窀xہpysjx8P3'n0:wϧ~)17,949 ''?¤\}I=۹4 ?{c `3O^2wgjw GL8Qc=3LP8 x#€oeAyMc鷅ǽ8rN##;S<8q`q$u{v3@R36J^; .89=G˞xtN3Trx#0GL9g7;f^|du09'=F=zh8,H_R3@ e=N~P8~|=3qrҀ |p@&p1?NzF8IAA< '=9}H>{N=}9=_£ g-9N8=hʼn9#{+@ݾ _֦C3͜Ny s?'Crv<=,P npG*YHkémzJiU9֦$422{sM< r b:x-H=Hy@ˁL<pGQyhi8pC=In:4XdOӦi h`ǎA'ׁ4# qӑN)1<ÁmGڢ3z10A#3H<~]Ӡ 'w;$Hj2~ߛ;zҎh-zdpi8Lsu#J:=Tа*,rN1;{Re!8x=«㞝3u R@$1A,|qמ ?q8$JgnF{~=А=Wp}1zӈߧG@=dvz(# bx1븕u9>p 8?*spI8$ 7Fz<?xFeqd^)#q,BlGP݊SsЁ#N)G`Rn>˞>Q}yvgc9$G pz{~y:#0Nv9#~p>\cvzCty{1;f}ߗ9O`s>7dԁ2O<.Iǧn(QR 񞞹?O[\ =A I{-N >\wƥU9^{}>'vZ\cp:d[^HccyzI*Ip1OzG`;`g9=4s;}sUvx 'k؟a{w.O,0C>r8ӵ(`hd8#W^dԝ@#G}3RCg`ǮN0*-Eߞ;d횴nN)A^>i~"#hNGoz5<"0zǽ)~e Ž7"?{{*TeXr8A, נ :ʬ+i s@m\N 'dԪ,sq*d@'1`sEHvq6E /PHc4$ x!1b~Ӧ:R'? [p㏛ FP2z}0~S@pl2G ޔ.]eo^ݑI^$FGs8g9d1=IHw)#k6Be v}M!Q2ς;j~]7%ŒOB8lH9V®'=CS67ppBx5he'$ sqP|iR3a2UN20;pNWqtQ;T9S|4K+ɻxʓASǽW=0ܞy$?j໰pp SpwzpǮqu@ |cA=G6cl8=9(H AsJq#wj?ayN5W79$zOL㲀s>Uan=W?NԠnS ʌHc:z@^Cqsן#FC M{HH==ziI4nI8zxǾi}퓜NP'~8dsG#lg{uJdp9=S@'{֜60 '=|#u3$u=8_bVUW0Hgs]R[Gs}sΉ?ߵ[8d'+9\1eQO$^GqWcu%'#q'y$;6vn#1+L;l<6XhLu-{r+ n{959`9j'TP9-p:˻#曍ۗ$c zMns1s`dAПάFI#GBsobQ6dnƥAus>\ x=JF&FP"@=9kT]OBazsڠ:M4n6,F?q}{qyHHYV z9WoS CF9fʨmay$~+ߡQ'nrT==޼۳B{ӎ? Ns8׵s=A}?A;r-ی?.*zc&73%c8cϞqӮkͯ9ɋr/#ҹ*Gs^&'a-O|TuU>w|}g$zRs0#'"1$ÜqԤ~<Á t9'=F3heK vB;VD99gjcvn8v;Ob8Cϥb9eᾘ+p}} /\p3:UF0Nzc> (dc>'<Kʻ=~?~<A$G#=k> 9jG3)ҌH>8jg\nړظ2n#9%syOGGxJ!2ONpt=9W`{sǵgסC8S_/q[S0ׄ',8x}q'׽whyu. #<>t@wӰ՘ ۑؒI01ǸP8=FlG )S$cUt<`p{ [νS$*Nw9Hʬ s8d/s'r1bS4UI۴01'UؔW3{4 ՉNp08^nkN5=0%'<}ޥQǐw;N?LT n sspIr NrG(t'NI9Ϩ֎C8zr>}8=y=@8q )$  {ޅԫAN{ߎ:ʤ ##q'N GO-HL?B$`pN=9L&fCvg#q{xLFAukѝٱ` F0I1Wv~k̜z)a8-?ƘH | N#/FP'ֲP[`suFɚƔopGS~p:9ݝ=z`6ў#Ny]H׊Ûsq9\=YR9eqN;sYz B˻:#`zכr-/14g6ıd&|=-듓\RSw㏥|S3Wb):VDl +cۑRsX= #'@{t⬏d: c{s:1qct͜+ܩIx9 Fs<1n. mr{ H3Oq3ڜݢڝ}gp (;yqzWQml( WknGoۦ2y39=gy<}p*ÙXO9Ht'pjDn#?<`u1yrô;ttSwG1u$'$A{):Xq~聀^s~n8?zj8zp=yU#^O !>@! 'o:D:(dg$I#p\u9:g,ԃztۥh8>o֙-8ݺ=ӥ\x'q3J|OLN((9cO>V?M'#8y%zp@ A<rzq{~\9 rAuҝrRJ6z8{`p:s;-(^$g$U }Sc? h"(8 sǩSr[#s@t ~\ӯA#hU$ qq9~),;bq8 x%NG=җ=>6OEV Ӯ:c88=0:~&69$1H  9zcz?E98vX''9ƎSqcn=}ylSBe @}B Fpy6OˆN=zORFywNAt񓎃c8<= aR-JOsIF1Y.G@L  GCѣ=J&0q\~DNu=S aӃڠlnByCGEƕl}I)u$mӃ=EObyb@MOR9RyZ`G-@G+ssJy L`h&*>$ڐyb1{ǥR#'h={?֘~dvސ;Y,bW{vj@9 ǯ=󘿉ӥsO\cӦ9ּo: ?`qipA䎞y}OS8?BsCu*LHN03rFsӱE=xh1xa?n=0g<J`,F39:`q 1𳤷\$Oל[{}2;^m<*kBoQaֲc mzEml$}FN:u0##:}k䌢g3 Ċ{wg>Qڎd[ q^yH12H}{1_jqdt'Ǧ!^ 璽s$N78`- =23|`$~4d|#TDQ33su=Re$'8aH: ~Pbϔu8GIA֢8s!\vK- =AR0FLc9>J4?` p۔ӎ>|o˜Ϩ./9 䃷As_S<ʓutS#'ϧ3ݸ1#'lr=(=y%H'ڗ@2?F};``899ڄ 9$ qd*x!Jw0rH$>c<ʏqqOz<Ͻ#=0#<L1;' `<9(vA:2yaԃRdH#<r}楍uH+28 zzi>ÏJC=H89=GJBIA$Qp8q~]:d5#S`?֝h+S G8a sRy y=X=( I#FH$#cx##jn:6йssTc=As~݆)?^d Iaz|Ԁt,u3Ǡi` 댜 {v y'9cO!N(?tO}=}Oz c#vwǥ9N IT `GҘ'z.@p=y玔ɇ 9Q=1 (#GH!rz'v4 o^: SztzN3O H<`FHN6'= =[98Agzۭ;|rA #q.1Rw52ʪ܍bs9$c|OwCMx̃jm<T8?.#OoZ}L/^3`u'ך&?{ }E瞤U$ssƯoSO;4,[nw@8Қ܇~9L5cǠtJpԜcA1t^Hu{Uzcj;dw>-q1Az{S dz"䊸~Nzj'2B;`Tg_%IҚ2 'g`dKqNz:S[ 0vO^N:jyG'nMqy޲P!9%8?Óy+9-H?iCabY)Vpsu6tI+.^}LNZ7cp&Fd܊lf2%J*P>-G^2s3&·t\;\zjad7+]sSIH QCT[9A䁐}* /e`2FG5HcnʕWhQ ‚1Bv sGׁHKwMˑ;S;I\dq= T*P``O֓;$ga =0;_ר.[=BpFYYBdu=@n,Bx'ݻ d 2rEې20 `G;F8* MrX^NOVϷ;/$|bN $N=A$> H 9t:Jw1ᱻ80:Q}Id*!e[-zv!;aXŁ1t~"gp''9 HyBn\tBNvOny 76m3IH2Ƞ;*"p`|`A)S p>NfE [i]V&;g9qr l(9rH֫}D O/ǥubDxTAAl?FIݎs$!>jnH*KB`L<.N}j!8$v>ʩ䎤`|7!0z` ۮGD pq?)Zb Tlᶯ`88>ޔ_rrv118.r.@j$z{շ]~qd? GzN{c=;U-eg 0= 'ؑ/9p z 9U1^' ?N)>a=06S݂ `Ap z~5v-Sz'kfyt>%w$+ZQ#,79RA+'Q-ຝ]JO{aXrѽw08zֳKR{JA-sgo}I%FL9ZN'0>0FORON:Vxbpy-kOQT~\!quT(v30IOF> 8G\~\gAPpFsS[pJ XuԐ!z zÐ?t!$dp[rys!A9Rg=1;q=(N@18AsQZ=ltqo9o9 1o<sY?օ#'n{qp&!g$Oby#qg<Rt`qӷn@#:ۻ#{Ӹsw@eS=zu`w ?x weHv\֟#j[l]$(ŎN` @pL9Ys2p?7VᏦWݙ)nHR0I62zIRa un>z|ޘJy-|3 u$u$Aoo͎^`r| =s`8'?Óӷ#W!> =;㞕 _r`TFB=UrHAӒx ɤ`@8} +O Ty=AKb@$,Wdc98k?;anM8뎸>"/S4DrRs:8ְ۷>HwLG#߭ʞdž'[=qNB10}y~[d}@y;U2xS'-֩B@q]';f p;Iʖ9}Eg#X[FԀF+g9}ѶPA(p փE {dIUQd#3](!6_sRùk Ee^\L:HO127 x5/oDR(I tF~SX:1=xMʐmp;8%<~p85ԓn{U㞞M܂OTcvޝlxL=<^A4`2WRϡקC?J9T>zm@pOn1F}zJ;`z wD˓=!W#P09wϧUHz?3x:zfGTZFh.=9=;UL+«/F]t|(rrG_|Wdxnsyj=韘}3r:(L#'g㏗N1N i1}IXus uL*AU_cOv8;c0)t?19v4<.=o[$9 'ۅ_<[i<0pzt NhY럔ETO pKv si1a2÷1/[$m܌`~Sm G'dI=A9: y' #SHGqӾ8w?£vA!,TR~?YzT&+|9deys# # סJ(Jz;m4L~w_:pVB#@co* _q]'lzYUvEVvV9W9,g~R:{*65c=:$T"3r?J̞39GLtw`riӎH߽rW+#>O^MtSܞ'wqrxǵqI&9$=@h(6.7z{G^6 ă{ҭi.W?'$gpABxq\/c8?na#rz/q҆2yr{z*&p1QjZ$<J񁎹Ɵ t ž?A~~q C=AI?4  AǮh`<rQ8#3$~xO?xc9^}+&@qOcU ◜caҤ=AO$E6>1#>56ӑoNOe{(w ;|zI^@ZӎAsZ遌q6'Ҳq;iOTgJ'ry׽Qe8}zvW-H{y r3Uy-H9\kS__$v8 n'ғ9גpקQH<c82#4sߞs ''x=qNGqO~)BC:*9< M~#z`O~=?Ed`'Cӌu$Mzr!ښr`W}:VuvCq#n=:ǵ3 _9R0Hzvs7c5]N/>>ԃ.91{xp=N380?Nh[~@7ҕ}CWbzrq=jPr68wditcb{|3^@\;֜QAszbA9O8ңH`yNˎ8;t# qϧ xs]EO?ғ>8dǧl}( 91ю@=I@ts' sקITQ7~Y  ޙ'qM8<(8~4av8#=~a|c=:Pyp=:tqZ`23N?j;2AjhL8*{AsQ~S ӰFOZi-:ca >nǡj# =M4pr@Gݽ@!z+0z{3 D|y#G4̃ߞӓJ8=SǸ con&9p=X{ +9}1"Ec߯czdjP{a9ǨC0dp@Nx5a[gogqjwdcWОvu4,?ק 8Fv,zғO/ryi1|*Gu'?Al`N0G\7=hs9$N82x#Bgǡ*F cpʀr{~lÜ}zҜ0$~\zc9UHSҙG0O<Tgxj$28 st`41qq5aYT2v ʢϯs2'=4 ??#S:;HK-! sS uGr8Ă3p tOOJ$4< 8d񎿞3Hx<[N *8 cwl f{^J*ÿr1d`SzzN'dqoz: ^GzBpi)S89$2~Ɓ:'nj-N=;}8cy9vO|@/nq  xA#'‡a(8cHNujht8iS=zuIp{`|dR8OIǨ퍠r#i#*x1nޔuA>޾-Lwc#=:G*w=A^[<8>#?.sМa# xSp9 w\8t<~4Љ$6ru(?.@چ!۲l)!~n`}=zPR c ,~33OW21\ryZXy\㌂r88)?66;Oց V{`=yH8'*xfʃ~rI/ 8+^(pǫ -=?ZR3@\׸~ r3ϡo_ƚV Q9<ҋkKi'=@ڬ9'jcTɜ@I `@=J}0x3Qѳ=^Q%PUA,;8?1SC d*T7#9pr;0ю~H~t/'PA.zƗqL͋qӌOL x y}Aru;mt ^jNi\Ld@IϸJ}A?p" *lFHf=z͵ 0\dH)0;0c81mލ@pzs$v)` pY$(?$]vJq7Q)vN̒-1sy# s=:3H$I j $8 )NNtqTC3z/qd.2 pܜ/HU0dzR-:awH=yni2XӦ#av'ҞBlӠZUILèbp IF1 ې[=Ǯjũ!]vcc3@=BW}`Iv@>늄BvV`.<تg*J I ciq ? 5} dyb7`(+@'Qb0q dRצsޅfV'y1߾yO9~ O[D9RTO=pNܜNF8R`hGʅλFH =e(7 `.)OQ9$IcCUڤ+-\zSB HFxгc*)f@#2ݶs~@J^T#l߮wcu  1~Q͟w\z}+@ޜ3NmGo0'(͸({V;B+gw p=9=*dtk_6 8\N{Whm0UkLr}$6{cĨVpy{ӭBƸ'nܕ>8p}hcs #q\Wՙgg)= =suL€r`z|1A'.8'Òi3yzsRr8 yߌ1ԑv8{isRNI'Gb:`GaN0:(Xp ^}3MqBprpO(?N`}{f?<9[E BO|v228_\phӑGA׏4Bq~F;}܁ =Ͽw$$d}9C.qsr>SqҐ[s>`yU#9`|ILlUU9$2?x{KHQy!FO]꣌ ӳ8O1=ql&zY 7 @g}ACw8>)9>` CP-ŐFtAќuqsi ˟J1vDW4+y $9?N+ ~HroP}N=sHww`dd댜+Z&sB'q]JƄ;ob0KzЧ'rARz0}S9LF@,߁Jg,A F8f$T ܻO{6~Px=9k !b9U1 ĕy* 0\cO9DrF$q", APp6s6@1xozLO|F7lޕi nd1]tѣ SS)8ɆrG8鴁_ARXȥ~B|qL7HQΣ8zW1ぎy)?9ÏLp lTzo~ߟJ?wCqYcHwG>g>:SCO 8:5n:܁;{oA|O~j=H/^zz~= |# 𦜯#yR#h`'_|cAɨ{~/bdL2s?})#de͏~a`'8뮘Nx9H W8sn8qtH}}EׯhӊlHy|Ud\#*EpH LⴐXfr,&A>`G\>T z;z?Pm sg\b {n}se̪gd 㹁79Qc ISKcu8,@ prJ2w8I'Us>oz HNrXc 7|;HyО3C<983ZxSTKpAH]ZINrqմ9/Ld`8s߭!9'#O?6"=2x$?OWe{>Sp=?Zr^:`c98"Gs'Toz{c*d pq=~D\gg1ӧ_Ӂ8^`9M Ҍ=9:ZH G^u 8 97L(玼S;9 sӑHa3Ӹ\s>=qϩp< w c@ ˎԀz{g t98 {iQ\󞣠;@ `~yHP#t"eB1Y8fUtیNF{ژ% 98aqО?YUc Г%򙗎Fsqg!“ېiI5u"c9>=߸J4N:z#'w+?O\Rd#9@Q u` myl=y>Esq?,G/|rtq*/Shx%y8taMQ8prN;w9SGm)swg'rA5\A:g޹sѥ3s?_ץaor1܀:~X&F9끐?Uѻ 9ڹ=;T9aO`3;G|וB'hں}N|\p޳p$_' 0!9˴ $ QӨ=?Uoz% ^rVNp\J(wޯ!A8H$q00(A8^ Tܻ3Mj=ϝu97ߺ$06.=p8H@˒$0< {\qXUvPoP<ݹdgۭZ2*:X{g#둖.E"7+n)w|ƒ<Qlq|0J85"r Uۏ*NR7N- &Pq IZtٴ[+m뷁==zG)VT Ve"{/.0\ ԌtkTg;V%}Sq489^xs۱?+}hrÅ%ֺBsy_ B)=@>*3}sԶ^asJɏWqXp\˥&ߩI\:fDrl1ǽUH*>=DYE:Rzz98HQWgGej2p6⻻+|mw%F2GʹmG^09F ל(ϷC\Llh"3GrՀ$sgSa\xC$`= k` pfa@f#Td0)u9d2I||mOq3팒yއz:>-gu#H3!K|`QGONj!'8y+c߷$w:7W?uw=멶PFw6=1Y3:A<3ӿ8o/LS[8;ӚQ=q=`ˊ;󃎘qҧP{pq}2=2IWu7 pxʁyn1p9 WW\f.12{ǹЙ \$>4w' r1cOPtOsl ~4'sF=hݒ qL#ێ@8w *=GdPFH #Ҁ-rN_OZP0H\9 Ǣ88n4ޘOduy snhO6F23ր{OAy3g$מP4WpG*<8#FyړL^A{g)~zpr\v52 x|P9sOASg'vڅdTwc@?*n8q u-5,(?8CzAn sߵgXT'רҨH}cΰ a;= ~3jOc%OjOg cdǭV A9m׮CF鋎s <{Ѓ c'PĜ{cׂ=H>ښr@};b[b3%8J /<“Z^wx=9ϮzUveq{<irO=|3~GGa 9r>sIԐrtZ?y$AIq@A\y`I>֟1S?z4#>=y>b#{'灟cG <03vWw>Z@@> g88ø uy&{g=99:yE=GNwmӜS; | g[A=?w큞zFlu s`Twdu$ yA`n8q` *BBր#?)=x?LW3ЌT -\ՏFCp3ӐB~kr$8 g4#2$wϿ='>u8z@?s 6:G^:z( eI~'2_€x>l'@T}c'p9?\S`~#oO ֜ ې~qR pI$M;|0=ϭ?-?MvJ=04<8\gސF8^yNnHܝt?/QǯS@^ܒ8rC 8.1bs)nz}jLp[cp#O@njI4PFH=8)FG?.[ v;у$ߌ1PHa#[#nqQ}3N; dICrAYOR8=z恢2Ẩݎs ${lA##zT(={\t'? a d(=\*Xq0x鎹!ޓ<0>_'c:Rm}=}1R#=?;gy;z˚CP RwIcF8 Fq@#sN qӐxs$.UzAۏj?Arzc9ңM͐F2rA9V{4rsuz8I |$8J1$k+U9>qHb㜱iЎ4'9#t }O\q ׌e#zv⤤ cua tSOy ;Kƞ:=2GRM7x;A~0Bq<zӶN9ߕ$E#v0ys&[w=;NGM)>wl.F1'L?*b*89+H>ץ0>Hc'=:ad "r1 P1x69 ui{ FOgx׎A ;t{Ԅ!ץ aA^y$xxNp;H9@S'|үRF>99qߵc $ QHy%m>2{xX|?B>Q+}; u#S@8>l)Ӟ. nrF9 z)NCu;G#?M~(*⁌svD˷$)*H׾iN\s=r ьtHOt n;^'ZwA׷oh$@SOjNx?2I~ԗRXܹc9=8BryE; pr8)z#mȫH_Fݫqϧ晘Ϸ#8z\Gq;OI׮ӁސvL:à;ݾ`:Bܗ`v9*??֞=sU 8 t#C"8=2sP4K'=}{=E?}=bG{yubpIOoZGׯ_/~玘JƗ@]VU7BOa^Z7TU i'cڡGO̖54:NPCϵyׅ;As=skء+ǝR6ː{۲~Sd~>ժc%wq6~SҢ5>ppNN~*ȍmBqޱ5jn%AOd3Ro;6>J?tuAH# z$1ˀ;Un@Tw) $- H)~=v.ܼXRpI@h7W  }NqTJe|ʒh9Trp q34/̒Bۣ£ᘰPb';30Ƀw.OK= \m8v8ڻYdc#'އ1[=;nj}(C ZT ܐګ=pz{SX啗o$nާ qJ1xsIG=F}N?/R<{ {b*$A2xpI Rǵϖ87\ փ~-NT$+e@+ې]=#rL~Y dHb| :mKoSʆH'ͷ$du<{`T|;/LJtr9! $ysMî-p>R2;jcGe^:ϥTd?7Ϲ@N ćԥԷy\Ry8;~^dg ߀0 q6W{*$9f=8L{pqC/.vrxn0?N3d!I#q@zNyaR6fl.zaڠ`G sR;wD m*@ASsŕ8qn;$~󎴛Lo `)3ޒ7.ᜅ B85~6p;A#tw5Dk2ηmv+ ?;ی u-d9~^t 0ϧB>E2vrx$ ПZ6DIZ$p`r@㟻t89[Bx#55A;3’509=AӞ>3{`Ip0A)9H9 '#֨9F@~R:Sq'd M7+qL8R `}rA8 .z<; 펝‚>SLpxϵDkGBq$ =q9#=~P1~~lu'jn96t9=z恱 zrF=x?эǃ6j9O\m=ޓ.<=I9_Lׯ)9w8ZRN'nrsN41O:΀ p2v|(x憍`Nr<>Յmp~gx  }x$x8xq,m]m$n#M^ Ҳf:(hcĝؒx,Q* $n^ٜ:aoFQ!\>}*9rU@l^1q\ꎥ ?ü3G5d|YCdpKc!I>aօٳn[pA< |kav0q{t}kCF]I$Fy fds`G8P bF$3inx4/ \$Qk&ǪNF 63t/r7+y?/c5hnP*Yq󚮫+8`r t:} 6ޤ>m)=XgǥS FevmrǀvxBS~x<@S ŋH|N:tmNX;BXsj:¡B6*A;rry<6WUpCnC$: }kUFYb8 q<{`y}yC3H'~j{@^G :3 l<¦EGs_^[ܟgm* oOLQVlm.8B'|twu6kZyo'2@#*6D c*:R&[ݰ͘}0H( dzw_P`pB',^*w9yqK ē`ְΘ*[iG9> $g#d㌕sJ{Tx猰2{N~^6B0=sV#_q1-1UЄi4[Ib|Ķ}1*,!X ЁݽGMcn \Sp߅i`G<- nUCmݸ| chDJ66~ٝH9֖cp~CG8<ֻor*ϧ*I#*w/ʄ `FGS_A=@SW_gn}}@=pFa4>5t^9cznA< `mPy^΀+0c\Tls g܃s3֬iO=ҼԷG?? nw8鞦LKo 2y8'?j褿[U:cI]Ut<G^ZZ3E3+;cڬ5QVKɊWoXyP1\N)O';1|^{9s:9R3܎'_֝Ho'>"tLpŒ̓s 9zgԞƧE(79=qʴNAHx$ubh`Lv#<~olw:ʙprHV.K?2N:\d}*㑎$2N$;zNA!9}*A;p: a 891‘랞ч$cG~]2 g `y*Hzh9&b [#t WMn^ ;>דZ@؋8i9 8SѻM!8=x}\qCR+zA+6Elq:sJh3d ';׏j+A׎L㌅>2GqH 0y\Fx'=yƙ$KA2N@$?Ϸc;8@sqsԍNF B}z p:`LWZ)Srui=G8=h)L{\s98vUO1ֱ:PgW9ڠ(}1)?0PrW.󎤲1 i7 du81I\I$nYr#WR|GI'6+p]T)Pg댜VuaQʘlה{v;g?Zlx대1Zӂ[99L.%,0;'[B83N{z=V\w:XiPycr?5ttt,sNL␈Gp2CQT$SpW9}@#x=r :ҵ@qԱ v+p3p8-!JObs@:m9r~\r;Kk/9®O9ǥn]͓҆ר@:z݆8<}ry+ۚ[ZQǎ1qBxCkR`9'dc-,9#9 >6?J[N?^ӀI$-t2 :qF=ϨGsonzϧ҄ ?:z)q2H#\sSD8 3 qI0R'L2F$1Tgڐ$x\0u >$XYݴp2@ {qp@or*]TP[wOhÏN =I L1vJp\ |80y~(ER?^{(G'q0qv8v@TuAc}}zVD۲Hg:9 (?WuXHI '!)<`5/_`@9#e\on#-Fx99ǩzsYTAO\rxr0cqo#գx ǯ<^T:;Zjy<Onvy-689l/;h`J7NHcx-?SIO~n#<Δ9H't?C.GFOng kj[܋ׯA+n!t[{^VݚtIOL}pz{b*/h9 qMN ǂztI[l^9n8QQ8p*t8 뎹#SRu|ǍSsp#7Ͼh 2}L1' Cא8Tv4 ،3ԓzCޛgK =~t888^:d@wp001ԂGϽ8,F>9C8Y2=g91>c(T&Bg'0Fci:lBSG*i=O^퇳r0<dmKrXsq}yHr8qy´OAd'S1S:zc܎yb$62G˞F۷J`NA=x#\ZbcԎA\'>'Ǹ9c8RHz9rrw ;(;p d9A=@ lp{\.s8=,qcڤvygjd $+@=}y4=0~ Fy #hz9uw~qq3>٠?uzt8>K`@#=?\wJ푎xEIWnG~Ӑp{PnpOϟNu76 axܣFhxUz|'G{Q<1hTsߠlFܞ7=Xz_Lg1M@=7OB>_^Bz})PG3H%zav[9#9nO=*C0x; 'O*QiAű7v޼ )'L`78$q:xrznؠCS`cuM/'pqAAQ\=K à\S%u0K=G׭4og$w]i.349?8?]@0$9!F/Q}@v8Xrӯ>0v ԑ C]=屎ק";Xdۿ u<0nNM,[z㱤~˜mm'>aϷ4<sChBVlH'=OZyq_).“?{jðJ=Py4db@bs:WA>}*dTg'U*I϶`^F/21S ;FIӌPGdzqg8I#F@OUL $J1.31׏\c4S: M"@sAsTF| p(ǒ`FsҞ t[Z.dÞ: Or8aӎ};P}F'}ǵNyK0ɦ&H ^xЎtr M2OQr/Ɣq =5QdnCRee=@nd|F2zdǷN:g'H=Hc0xu7lNi؁2yy#"=yn9>֧#zwj$=җo8$`*jKzpsSG6:dn<0z'l3GO§p9bp}:u~}H:Vh"@xq}OoƔ1@/ qEDʻzNk"x BB>E>崜LԌ9׎+fy_i*S(}g$»0WZε$;eV$~P1kR|"7#rUOs[DAIAry#TAяwpyϽs4l7d!Ѿ^#9Sw|?y2=ɢDeb 6X}G$9_df-d\2J7Sך:xFn(2u?ɣ s2zO~zqK rr9PnyQ>)+|k(P9r j$`HWSqr}GzhÀ \Wg<` AGK~d()x0x4H0imdUyN$R%v'TmhPK$UO_jvۙrr~PN0yqTB |^^?xG$eA?CKBKa aI8_JH)( R@<~("2H |ۗhvhw &G;e 1dc9隤 2|(US#ҲU@ Ly^vGb^c+0W+}9:R*<7` RD$avc9S/:69?bXAl#p=7#hw@qמMR!*@;s@2H$e ^܃AtՅa(  4S'+@ `*Cu-Nvp:>o)rxK`wzgPp'?NR*CGӽ)=쓐;Tl1N}9>i$9 F 85Xd{ ͖b,scˎ׷Gca,`+G[w܏il}iz]& .C *L|* G\қZM=IJTr  `~Q߹OZˎģ$d=*P\.I9`}(ISdd?O\T\VOp$m'=(4q=}Ҝ0q`m}9a ?Ttv^sFI??62H;Hۂ.rzcBq=@?/dc8&x`xqI91'v 9$}{h)|/|8 awxxq@ɇ#iQ$y(ר#4nb00=Qӭc7QV%0zz:8ג3zP1=2yvAҘTy }rOgFтHy^)13S;FA흤mݴz)2:dFp3I=)v#rГۊ u9>Qŗ;'! }O dH@ 3$8>(ngqsr>ҏmN>=z'yrq [?ۣqt U~\w^Kz#2szzf=:~"N^z cר~2ؤg:c>Z˗=yTdAp{YIA.k{9 sr:Yqںǜ; ï>ذ:@9x?+A[xNў=s5 e'' { qWPqߌ{n~=Hy;xsU1>N~鑏O¬=+9 KܿALjPp r;9J렶8=˨'9Zh39}ӻ]&av8^7t_J 8}1u΂z(9N3yOzpA9Aϭry>:Ε7c99'8'@ psν9ۓr2ՇP^%ObCpONaq Yc!{WGtNt|8ߞVۀۓr;+R, tsu]lS }Ϯ1ߞ=+g-}{vqO=:ʞ9eʐ ?+6pޥH=1&ޙ6'*bScБ;e<<.Mg$E8 $A@cJ/מ@Iy'qR}y)}sOڈhU88O8'xr288O92?ȤwaqsB& `t%:zJhAEs|z^;}zvdOn0s?ʙ~Ns%Ic2AL#UsE]Hc:rVf$#;st'#ONzdkE\vl#~G4гr91n@@{oʡaW玫)r!8syl`Y.xG =X71fqo29NOֱ&=TqaK ztY@2zw==8#-y?^>Pz;mJͫQy9;a$0:y|Mxq:61'.; ya̬Wv`|&"6+Yz,KL:#wpv};M%%Ў5(:JgDpYCp"Blj9,'c2vi898i̬>TcQ>ZuCGgohP>HݻfH qS6 e1Gcv#A~UeI'E==Td 8a֥M˺s_ѐ8] H9H&dnʄpF #u)=QZOuep,+8tȱ87p;WS5&vVLB6jvٞ Gfˬ 8< 99khWRXgxltyw/4R6x3s8;WCop3ۃaYkoJ?FFG 2:ztZO$Ez!ז z9WV# |Î{~k٣>/ylQԂyqȎ:drA8O[#gq xpWʔB8=@ p?=*%K~A9;8 ڊ:;NϩLc`x#Һ#*Vn_|uZ.(ډ}(9`{cjnpQ?{;f' x|t(Gy@=H#9>jgeA]JF~KOpN9H䓞nsFqנ; nlaaddONxZ;0FH9_ϐj$9='޴#ENN8zc;rE_ dďVFA,y3,!py'<`H#=O5D 1铐3Rg v8"Y&z98=T0gHF~Z=$:Ҁ%Hbazf;m;F\(Dž;! i9 \gq3}gGrpz;c@u9yJx {$4 gӯE϶iolt'q6BG7P;r(#z]h@_p䜞=)1ϧ\/r9€ l`;׊hH9S~x)1B&?pzåCqaw9zretXcjIq83n{*% #0pIϳ sT%n8# ? >&qc@5002NIq @Awt 玣zU&3Z 7'<)5AT\-Q8ݎT]FzS9᬴=:ba_ÿUN{<9*Yw!# v M+БH9ɬjl7*8t=17_x3֣0OF##siÜ7$L=^[B9=ȣߧLy㝿孼/@2HܟRs>`Gg_Nqv/iTx\sҀO#'9X`ҁ_v9GSߜTvOdm '?$zd<d;sNt1P44 t*FH# rj3I1⥌hx=%`qǾ C=@=G s>܎zg{_~NJCdݰn2A=?9>[91TI29 =3RpZ%7lze^2cCSImsF{chd{uzgU#㟽h#@sӶ 4&>9\\vH8'Jw&Oo'*_Ͻ!qPI^P3 Rq`ր#9<y/|s sހ8 ZB18#9ߓ#Ҁ $c FH<˅98~aqg1>y'Gӭ`7#҃0s=ZPzHQ1z^d Qˊ`/s8M(##9lsA@ rG$`ހ OvGzぅ;$c>*2@I>t€$`Ӝw8 .2H}}ܨK(=:{rvN u ;#縣 =q{ŐI9x<~x@1x7xv'3vGa@ L du)> Ij@LgFN|ioҟ@T#o.ORH'CA'@$2>`8>\; g6ߺҢ$g26;cu2Q篧FvOsh#,112?3i sX=*$˱ FOojg.N3x'=jKH,Gl(`SZ|P rqC4'yS#.sJi䟔)烻}*J#ls #v4ʎOo<`O?viyz.Ӱ?C*y==מ7U^~l5%!9}=~ 瓻 dmנ9#=Iݞ?|fb0{{:i #@8'==Z9נRA=!O'LpnsOd8;:w'r[oZ\riQxҀ@?{@= :q!OiwrFrxyDǮ:ߓڏ9 2 ÐINi6pIМSgAY92{Cw88s}y`A7m2]B;qˎPۃNOlw3Ԑ9qځ<y<`8\@qM$0s?Q߭&b=N,8x S^y[8n6`qKrO@rOFI< )8'i}O 8zL+1A,2H#?EHz8br!GpG7碞I'z?5 ϰҌrq/zd&~_AsFqr;ۚ:xn'ԯi2䂟t1Ni'ON 22G<`qi䃌mpxg=Z R*u'=:O`O*sCnsOS3W|M[xI#3T.!Rp8;N>dϾsHFp $O_d?('{MV@-ǡ79`:zDwr}d~?3Ǯ{t~ 軱 ;:{Ӂ$ U`qOq;gJa=~PN BW(`&9*@vO6 `s8nbpXS'$ |HÑ: lc軛{qAAp9מ3HmdǹZg`2O84 ܪ 'ճv5: s p;ztr3::dqbmp0F:c9ͽI@8y=~}.g}Bc `F{6Oz2Nd/=?јUcNzUxSP &wO:U؂^sX`#vF;i#<[7@{I>R8axz}|rQ6|<G_Zǩn1?Zob'=7w920 ?®;zĒU݌uqSdX3ȣknn9=9SӜH'>U11ap' I4\ޡOn E%KqP@Ni#?Nj, qSGc֩XAy#PI9UGK?Mni㎹9'8&ɇ98ObOW9۞3@:t򩗌X sTi$#I02> 8~'МI1;x֔}OG$z)M0;g'z} c@=F;qn9'9$JАoӃ銐~]qҨJ]=v3=@ON;\wp~IruG=xlz=zz}jwB] ~Ոۜ`g'>dɞ! be<96cwj3h@J)8۰L@pI'hKgn29 Mk;c#=i ݂N ̧/ Z~TnH'Gg8MlqX|8nr3ӊ]ɌÂwt-cInGRʎpCX  |pp2GSMbdʇn w Dž%b , FH?7ozlW+nOʀtQL˄qٜ)*Iaw0FyW$`u=N)yRBLw8,yFZpIaF 14-Ďnp}ȇ`r F>i reZBD/*gwj23f;qp۶e$7p rA^3Z$Jsب>AyߡdU#ۧ>czzcg_񪯻aCc'G?;g%v,8b0ixۜ~i\gn:*(q;<}phcE7``یUiU$3G⣨X<`d.yaѕ#$^Iӿj'fOas cԇI+8n@"À:Ө?/=;g:zzc+>=O}5;d3ddRiRۙ\7H?8WD럺FW ӺtbN'$+qr@>`:@矼C6@Ӯy;stHN=p1:??Za<#<=>@} 7si~*`+Qv@ ؒ1Ǡ?890*H9 z h C=w{Rðl`o?/#wdz}2M3[Sק~cyџ}G'Þ}x94x83xP4'=q}݈yހ|0$c@1F1~Qө}P0~Sy ㌊c^OOq1H T e{sJO܁Ӟ9$q<>QJHyOҘ1<~l:CX]n‡]t\~$~hx$QF|;1Lz0mWKȧr Q^pޫ} 1/lgs-~ys߅ڊ:}I<@[Ҙ`#S ߜIeݖ?` +'Җfd`烒Oӎ3h*˴l{OҶ3L “'涢~ 'pO'i5M]F s$#0:a\~eˀO˕fN+g#$FU33}Nl6,@ozx9 +P=b1zX\v(qBf:u(8{8iw+09*@cd++B?ݝyOZlOSm'Fڙ$gzĸs6v6ZnT36cW΅C9I?(8<>QA2 P=,Y*s߾;UJ,/'%q9Ǧ>*de#HǸg*эNys2x>rs|ÒO<H7-qc2}jWvAUۍǒsCؙHЙH|Gms1]vg#fT';aՁ=08%>T0 yq\bJvq⸫Nߠyϧ' $c#==Rl [i3֝kaU83n=AuY ǰxH.Ue'VT{9?oƩzNNpv;5і#P~H2G]6U)RH^JH=J;6ݸ ҺT wu' G"6r'5tc89RzEtn^Lu8=@A8io\x<0L Q=_ ']F{֓> <_JxQCN9^[y>Ǐc8O|~O͟|€l`ew8Zxx7'裠'I=Gn?O㌒h)>O<ɪN3Ƕ{ϭcQD̑=< 9>$?{vnsOÎ=+GL4=OG󬷃Rz}9NZAx=*r²:#|g"[L7a78 >s]/2 *6צONߖlK߉hcJZޞدJv 6ppNXۯR:(xN^7<SzׯAgh72UV$7. b=]vͻGF;C߿5MΥ!mvFfwzw|G|@ #s@< 8U@瞻x=)-mp鑌Fo? Obڮ6yϸ'9=x֥P}t$~a"fNt<~dg3T +S&Hs?.G#O^!т38zcJ1|֚s3^1Ӛ?*8 pqۭ0$9zGӊz鞄~t&,x9$vCK0(AqOc،=ay _Az8ܒ@9;{ p\џ}dg9>۩d+wAI89Nr$AC:u>^׭"NsQcNyPFw֩x9o'@>90qzw瓑 @ .O9u=G]y'X ApAӚ{브48l"*~=Kz*~\A'; veOO㎋"O#?tߎ Ӷ*pyS@E0'cU=^;O>]J9ުC$eHzvHifc(s~PA?Z@p6pj!`3IK'Vpp1>SL}5A2d2\XGእ" 1' iGs9qwN:V8=<8ў +p:# F?_Fߘlv>s#zS6`y۽OA_ScNxʎrGD0 e9s38+#r= %-: d <[篳:N3}=kn<^I=z}<Z>8z21h$w8;~SU]+#>c_S϶0Tw?x7?5r^ޝ x$nLT קRh@$8N;z#m#O`pFpys{Ԥ;G! 8GNt31S@HO듞E9s9<|zONOcLw5d8>J;~B:1= 8 _žNw@yJ^F3zdc'0<7#_=3ޛ8Ŏs?8zQgsp9w dqXA9<)gzc2rHn2x>Tc$S!z5$n$9dc9^?Q|޽<jn3pϯ' >{9a_O(pA$qgO_1L9ZNwc۱S$-Ѐ L8<g Z!2p@qzW<>"FRDwm8 G<?qSg'鎣0߈Z"U$zFAYV;S;HɢPz .=HOJ08<|=~D8GOˀ9#j~D 69z0zgOL90#?19Gsr ۸=S8;~c IGBxa@PhBc{j *;989 sϮ{du#_Z4w(e9o8rAߌuQۿr{opGLݽ9l -?NTw|ø9a }x9 8מJqo)#A<4y9FNyG@zvx@y0A_4 <qؠg pgmQp3N쎟{#;EPM{8=A$hu A z>(y=B:Qs=8FFr2w\v:`ǩpA?Nh37 rI#QҗzlJNG$n8ǰ>c8csCgۀ~֛pprW%v8]xR{ Ι;ut;(+d F:=n1@X3F  M9% OQ1i _ny?t<|Ìzc󝄀v1:6rG_Ƣ9r=:uFǑJ‚Ar@DO89#1NJ͚-p3\eW霟|26w}{~"x]sҘ@=Fq'#i铻;sz~t=(s91c s(`g1^_J1xPvׁԏÂ:s0W?N8@:zhn]cnO G''=;TP xS9Pw ܁(҂Dޤey?u})3m^Ҁւy(w8sz9<t&1u8r8?vy9Nzqӌ񌞇!d18պ}%A8W#=@sޓ 0:1 dFx,;cnqsd9X>YI<nvr0ONY@udm\A{h4J6w1\u$v<յ럔uqJN?I_䞽2#z֧[\uLrïI=I9 HᾢvGEPWa8*g&^QF=Ã*QOlAϭ_oS&81 BFAl# .y'DH:ǩco%댃SVLw;rNW<F q҅/'$tQPA }*@&cth֦ @-i! wzb Nziě=A^2OqR2'?6xK_6Qg"ރ8v'Fwst<$Ie<z2"; t_Ԁg=I}sBcvc]T|܌ GRA8=Fn`gҩlDcy4G'iq:Ӌ"%Q{0=N:usZ8t6qNyg}/4OQ;O~?LNF { '99}9dqflK$c>3NU!iǡM9O= h$rFqx( {v51 c''랟^ >דҬ䇜d$9~cw,s|)`qC~`NxLЕG@?twX* 8AO֫trFG`I_ JX%xF: `n$׵c5[Z>m"Pw2.¥kbY*Hٴc ۳{ ?-4Pw';?À=xmHӶ{ ;px~m܌Qv眐hB 0Y,xz7;XVb>$v3L1\gtŀ<=:sRqgL N[%9'+2f2CgЌ; 6~T܅];$@?1^֓Ԯi'qpjp8ݜx(a\:҂z[#9We;qL{*gezdFeNۃDʐ9bwCI#*6?vCbY8pK#PG Oa?Jl eHsN;  t^iQ8;I'ÚcqԜ 3UלG e0q?<$lO bu'5B(Fry=}~kBfvƾODNr,dT<㨬mKay00G|F73X)$I4 XO@d9=3?)8O'r<}A<}(`@W+g1`G#A>j!st+S"@>`>l2pO cyn ^p9:;(ʹ!oR#nzW{ʕ->z֊74=B'Q2ǹ g2} Zd;צ}={rvM=@0x܀HΗ#r1{czKbG~Q$s^ssd gҙ=DᾹ#҂p2Xu'@g7;O29s~q2^-}rqz7{ SCCc'yrp>权Ͼ3@ Аxn:dNpx\P (Xcy#ӷ_Jv2p1В0NFx}@L㏽sLO\] sp}vT'9#!<}zOBw9׏z8{c#r}=zs@1NO A!3Ӆ=sx G#8==(q1=qҁ;NH#oHNG^urh4~$ |}CN>`㧡ց\sR# 9z@wd$L=)0x$F0xQx.8{AayKF2@NoL7# ؀qxߚw#dH.!<O$g۞sNU`{0##׎t: ;B '~ aNyӱvs|}w'ccxqM;W9 wp8Iw\L9ziöqӌx@:r:_nc?1 H888z {sӾ;P13iACVu K29ZYO>}vc1FxrrKg=jE bA\=n[OShf 0hsPx"Ö0F9a7zsY;~%8`_v0}S #m;u۞9Sbґi]ILs'klŒa[hWR00:O}mß#kH^Twa r28y]qG-UNU'*˜@Wkx}]@ RyN$`eһpa^~^$Acéz5^>f>c+Q9Tch($Wq!sW*92 S-ی^1ּ==O/Ap8zǮyaޞH`PќLOa1D< x':w(gqc}P9`y$c\FTqtc';A{qe7q֭>] Fq+E1:G__#qp;8  lPG'>Ql ISj$OZfC*rW|޽Q$*灀 |zSlU`> cp9; b[-3O?uȬUu|'!sgQ/Lc l 2Wޜ5s`ۺI!vvS{Ԟ`JT$ @v:z*C_B@9ˎTxǽ10p\tn!!>\zNHss1Z`@9o͓vU==}k)6BxHƘs霓qR>8޽9Ƿs3J]Og sx#8<~]*.Og?Z:S[!?ttޔx psJn8;NG`G9 rN<BGۃÎxzIe9^n#>B4<;}=5>2vrpsu`f\g;9 vktOB@r{ юur+EI,3q P?AV؎ry_j]H}Kk3 ?Q8IӖ=spz ΟOn=~t6z`ޝ%v;&jE'?z֢0}[z(-"ܼ 2*8݂s ^i&!߷Ӡw,uٌŽ+998" Gnզl$HfgDq%>ziKb28;68ϿlpyZlhAg<:c}zVDžN |uXfb=ug =9B' G?)R8PθlQeS Ӓy° >\ lli&+1fzrq۾s3X#20_rNͣ Ph7׺O0KtQkHd`s߷ZJW{&|"wԇI71Eyf2J<^35.6䕥aO0v㔔'ybaH~`N }+0U1r .9t`stDp$Xq * $.A&X}ptc ߎk5 |vsZ,$Z,br;cocZסi=q)q)eT@B*юM4PCOvOQ' YQban$JF'*0pDa׹w6 @BN?ⰬO<+8+xE #!c#ׯӎՇ~>Owжdc8Ҵb\qzdp/8=XʴȔw(?ȫs###+1J<,m`qw;b"GV ۶z}x#NDX8Trl>#iC <a=}'2Mt9NvwZ?xgiP8 c_\qf`p0 wzp灀.{TQ1뜌;cs&b@>A~$d2{9ʱdlnӏ~UYc<\T6`x ={ s<`} u5m @2N}*Aee܁g?5|UH=ycH=>Sꭡ+TJd{ {v"_=O5 s1îN$`]Tt 1չ@q:9žH+߱$w>GB;`dc##J1~y<@I) pđ`qUg9RT3c'i>Osb$(9?t${qS3? ǯ1NcOPc1OtGބ!#~g(z㯦3Иߨ8t vO1Fx8۞sۿ\)sN8DZ:u:p:dm<'aP0A; s}):t92 3Ѕ}Dx錒:^ig{ /~qq5C3ՏGLp?od|~TXbcy'dqӁܜsbpX3=O'8<9zs,"sv)GO{u:$a9UJAӐ GH8@ٓ܌Uぎc<l+qqL`zs:J Q7h;R眞y^5v7eʬ$w(r>cwT2 *z9\a{3ԡR('ۧ {`N܏OU+Wy8Z yvIEro8dupz.trGCT?=I۹>(D yc\;tZRz =J:#U'zF9cJ-KtUa߮zzU#ЃqLG_|!O)l `sy8qGsF'~Bt=<4ާק09OEAL_'Lu8aPNy8GҗA:y?Jgz=PFy8 G@n8=;Us~Z}I鏯! rqZڞ=}BPrwӏ[p0q׮=kÞ }٫ CWz^nY'N~'?oj.3`t^iwL{VvZxFoNb=1< KvѲ:zRzcN9#'n#ZF9zpyHg \$t9:q*Or;ځ I=^z׊QAr?`9yt8ۭH#h㌓;Ҁ =crO+OgqL.&>C= Mh嗜{c'P{@9ʑ {zsH|N9?*wOp82#\rOl3~lsU,b`7_pF|ړ$Fq1#>ƒ`c>OA?7C9p}ь{>"[9yqO AyԃL 3ӓOS8۹t?Nj$A\p$5'9¡[ǥi~# 8zvr>b;_@+dRInvvv[+O!E[#nI#8hӓZ#h&rK{Kyv {(# ݏ\U)%vz| ԓR ,2[ QՕc1Tm In˜w ?'O~ǎs;BNnXv8'=I<8R89:`w4}9#vy>JP;緧`zgR'qr6` cJO? uQnāu=I94H g=9y>◿9tN=?Q9L=Ai@n܌`Ah`HdmGO#CPr1H'@68)sn88'=vx~4?(zԫ;w@|.:]ٺ =xO {u1JqP7Gb9֐lc*X=4;`zw=*N@|{ӕ?€߷r0>l ӓ2J@3O\ tzq~@JoCS{SO]܍F:O> pzp0ix9sI#'kq=I'9'Aiamw<"ps9}P=83nd$c_aSw桔g>mķ#Zqq 9\t}:J 2N'?. GaՋn۷ONԺo1 \d=*R2x=3}y1F8$ez=z~'@x|)^}߮3K~cg>1?Q֗p8s92T2@899&7c#8tȠdd1z8]jS9@!8?dh' x N0܎Uܪ_~!88¢ uRvd@4# gLNqؓ9p~876=9ߊ 0ʅPuG `Wll$c6'7g ME gg^zsJqdzzsi# s=c16n8B$^H s 9zu.ҧdw`9Ur>`p2N:{gКCc`<ǯҀ䜍g5_@9{MxH+c4Á~3s ;a@n9wsӒOn;Σ$ 9szKQzh?4}G;g49#1 qҚs؏+ w#?)'wFܐAH$J2@B.2 !:ps ցPG?!98zy)Iqԏn0@|qpzQ}q1B|uϸ #d c/J&8 q91>n?sG\ 08=E 9<ߧPi12zq@Řu<\3qO @|eԂnF3 z;nc4H>Qۊy8%3n䎼{8@)eFIqcyHʹn# w=st}n$) Ib=X6wMK NpqqK2\z!w;@\ =P沜m#X:됭n zbWIr0I<6 zJ]玄s[Z2Œ2qҮf !OMŇl)Ⱦcp`mۑSrT6Q-ݻՙɰEc#9 z@lg`ǥ&@8=U AM}WF 49XGDc#:z[Ľ~\`jH` %/p39N!A_{(_ zqۑ֦\y'rOTu pFI9'RqMI0 +E8uOFzQs9vAv Bjӎs֩@0$m'?|uCgN{T- dtE$p:5 w y;g޵[6:qԜOc֔L( ts:<:"Gw펠 zqۜǾ2:dU;8 dzu91:QqnG`F9(DZnU!2N铓֤r *#q'?-oq~c襏Kz`3}6H $; x[ r7dm=qӥZd@* <{2Q`=N;P(LF :dG^+Nܶr rH ٮlD3#prO/9ҞF7m`̮pr3wh"*8#'#i@$L/rTC!A w c n*Ϲ)8=&GNz:15 ߺO$.Ns;3ӡ w@G#ڶ @TpA\r͐IFX =@S1p.X|Hs{u{R\`'t>Dqr'i9G4xr18>pL` cz׌{bD98`sH =}\!@'9Ql3sNGN8{t_w/ |z#=6I 9p=x"+Ep y$AA^g1'۵svߍvG 1N0w[+Zqvǧs})=8{y= lay ~^u 8 #by=}5(Ϲp ?Ss^I$$`r K{82S^őqrXgy@ps'' pG矧:vL?mR3ӟ~)Ocш8?ցvׂ #qS$瞝py@9^{d}F=i08!FO8T˥<{R3@i*> ;}(@Hd_+,w> y?/B1n㿷^RGFy4~ %/8I$9q9 u<9)6#ϸ;)v;!;U9=r*Q=hc㑜=;n#z!W0pI Jx38x(GPSaCH6`g:4 C=I('?7A zP f*ssg'Glr {~Xp= z@'dǶ:ѱ89|y`GބwQV<۶Y#8,A8<` U|(},_`ںcJȄoué'N3ף[ASJ f*\ʽL#pbvV6 v\#@?|oa/ʱ%g"@֚'.;gʿ6YT)qc\u!K aKuBz}H-w''O+\RLt&D9qp ?O#dأ-I|~ c4#v8ܺW;6)q=Ccr6`>UPpsV{v'tuAڭLnFe.@(z$n=GP!x>S 知WHnh۷CشeFrʏc`. =sxTGr9<faK(9fFܮ"528QՙOBT+f!a]HnA,tN+Q7mTPX*pH}x#Rgܬ)9f?pz5g]vƸ@J 뜎2OJd(%N Wws=*E $GQϵ^qRNʳݗ{dM dl =Q*`Q OyP%pڷm ;Y\`=}M.5ɘEQF Rt"^33}{QŲ|v2r6eR?JV|!,wϷ#)i ַvoΈTГZG"Y HɃ>$FvXO}WPNA8;t! A/y>@F28 <*p}#}\z|#%I#S4;p3yNh#*s 9y=I泑p̔s{=k^à9 v:_SC||ϷbxExxz|i1\c@sx?NZ:[!'Q?7>g|t?{>أ`Oy= QÂq'u@뎹=ϭ&R)>y?ȬA\d-=Fr9qyk&QpW\6e,avrr $8[vg'WҶ#02wc9}cT%z<7>\Z=G|r=A5}3N A8K,!`*9$A ǽ7%ǩJՏ#ZW5 8b=kB@>5Pm5yqG9pZRF69᳞3ŤlGa;yϷx^xyz\6V-``TEܽI<#2)<`dH׌zfeCO`0\=}yi\g< tP6LU?xP9ߞ)Bn3zt<RH 00Hlqus)2G$ڴWpaoJ R8{ҭ/=AI9[#KۥZ\8zS/#?R,HqF?*: #8:sqEwo~9nOΔch7B2O c(zs[çd; 4lIh0}s0Ԝ95 ;ܖ鑁ԏB9$q@=AaĞ$2Pסr#7g$wwʏֱ- Ԝw S5:t9*r2z+RМ c 2x9ϯSg 9 v׊Ȼ"Ad p{v}7e=?ÚNd~N:ryt`I ?*I`0N87Yԭ>WU]E7?.dY "Zu$l%R:n^s#kIiM&r,XoṛpplVl.Ӹ:-Eg{t;TB6AzDZL]]F0~]ϖq^ t, ʩw8:皳qƌ%?qp9?bJgHcݴ3}ئGRԢ7d$X˸3RVɟE+H"xЋYsʪdo8Q8:vV(_kS%ғDZ:wo'{[bev]Ղ-UUNI9k䶕-;屏8PpҢ4ګka.Ixĥ +۸^*&c af23/?xfnK鑐@ӂj}q3?w^zVQC+1_cN:<~^ul_qNssۨ:T McsMUz矛S+a< <.N>8#?Z|y`;smRc9'hS d: ===k"BXqJ9%SPm`pG׾KcP\]Ȭܵ58'.ۨ:R<tI8܂OAHn =GnǽJ1I _BE!u Gܮ>z64/PHc=A(9Lhv1vAs'~ qI曷r@%A_;a2I>?i;@ʓs #<c99 0}n;~q<1Ӱdu>vBtvy֕qג8h?vGcz 8v ԚNzI8wiM 3Tn27s8H #rҫTDZ["*;9 qר"HnԨKR 7STYI#?1>Ք֌(͔YK#;c+늪xy=8atch<#;c2Os瞙皟9r21XT)jaӸszSv>'ͨw?ZyIހ+@=`29þ1\Uޏ죺(テ;gP・ .y^yW_y=\F0qs;PzϷ8Op@;zOU*〹jYB @'ڇqGN)G?A֕矻Ǧ10@cpp8 2R0A”=q_z 'cAv:}E#߅GPuOּYI'ێ{ׯ@+48_O|wm8_ji3˩eqn?AʤSaֺsN1xw*ON?908Dfz=H\8NTvcU!4< pުp21O{Zwԋ99c;t&WxcRi3Ѓ'}h90p1'Lmwd@1SdœN{? L@ 䜌ӽ1sd>=ߏQ?<gI83I'FNO9P1|.z*0wQ{RRtO| p{tLe19ONG^;Rc! z r 9Q#$O'AC@cQ# `+ОAgi 20N{gs#ס>Z =2;H:s?Θ462Ibq@[oA*`챆ZBU^CI7':Y4m1qDc+10GPR@EVEIu(ta Xuv[1_*I<7n._K-`?i%FG򞯂+/8Oqnz2Zy/ݓ#B!ln +Jm|+7'r֟a~kK[Z|3c嬿dM}ãE[Uv6+]wvY,1fO9 3qJy[V޻-y!(;A;շ}ˈnmw04Nhuu:>Zyw=z5yI6lO 999{{bp?C?wF0ĂI8 qtzH88ݽ׌+w =q߭&r 2;{{&8<}ipA8Oa߿&2zg'Ƿa~H랠(#. zzzi#sh@)>t>rTwp2p:(@z7g=;p1h~h86^BO㌞3鎢#?R~`q?̶rA98g`z<#v1v:px_LLǁ7#w˞}9g ~^:v0:p8{sȡ 1߮hVAfyO˨v9=3\=M9 vf#ԓ`}Ht}>$`dtgg^)Ǡ< 9vs4'qH;KrGsI;0x#֐1rI9v8Gr\ٽ2܀BJyGAF0i1$ԞGA9uM'S{:TD[=x2 &xcg< Sz }N眮''EK-}8rr= -c\OjR<`#0M rc'o%1ǭHȗg R@?Z@2Œ={S{gi0c#9mݽ8q0 I|Ih[(z1 Wå4 G8$HcrrP<uy$u AB!63A yZqU#=)*'sdd;HTcq%y803֘ ^NKt;H#M_c8*3| Nh`?@sPN>bI'~ <ZP11q{T.᝿1qy3`^\g[8cs(8N}zcyP銓vs43G7zJ:zdlP@GZ]p '4@TXS\sI뎼܌sR43`݂=h>G}3ib?{'}z~' T081Hz#<ʚ 19 —BÀ;e֐} {{|[8'azwւ$ vs9[kp<{zRk6~"/#%0GzLn1_C3О{g=;g1HS9Oe:_L7;s|1?SN)`O`?8N;Tx#\݁7)=}*2뀪r.Cs԰'ӧ瓷p`c c" 7o8+8<bN>ur``s {`wG`}5 '3Hw&pT5T b3 :sЎW@=A]Nd# 1q͎:+[JtIS=g'N`nL~T0Ïٛq@ O5@q?6 =y1%A?{{Rg<䌑t2(9m4w7lNR1Ў䜐x I 5 (-`$8( W8Gq22 (P7֧ߴTay'#;WʭC.Ƨ8⭡%N3YWHE9pzg?^DC$Auu]Mdoh^GÜ7>վdstq#5t 9h!1 <O<KuЕ<ױ$Ƚzr8?\T Iz8FKcyiyA\{)!ר#n8'?)VzжB.cn@GT37V8ʟ21Q gS' `r?^ A1ߞpi+/a$cH`@35܇@'=ǧTTgׯD$Oy猌c8$ϥ8r;w=3R7|ā֗؇8{sexzt1nCI_RwMʃow H8jBwc ]f<'R#BJű 뜊mN~4{%=LJ0mі.P0:x, T[s3l) l ';ˀ{[[;eFSՓnM/}ۊ|;q\zqQ($tz qҙ z) .GUvC!c$">|7r{ub[eNHt7qTQp27v=-lUGF~cn?/­GIPygPHݪl #n$1LoYQzz1- qdZ|r4E#GprQ9?(;My.l␒6gpzr@yeo0}vv09 '::Z HU9-sװ6 d:N j`iӖu[ 3*scs(>Đ]pr8$wӅSG D2BX 1# G ZĎq#)B|$3 7KzW8=ssu.\ t#)p}U#$>cv힄A9K p;O<' ПL <zu 48uirAb1?=!Đq@㎹iH'Hf=p}4$gQӊx:r>~G_\.9`};ӀzI JLPrFy=1^p9H+t=A  XCsR/^8uPzzP@A9$OΎ9P c={980CA|' g‚ǀwGp#U8ÿ=8w :bTԒOZ\}r8_L\u<6xܑs@Y0O'#߾) 2Aob1si}OלhCN㏻t' '29=;R Gt<Q!%2y悘#CzF=z%ZD9ccnx$e6X{#:qAKaNz 7Qu4 d` rs@ydp{0N{s4㓆 FOcp}^'=x6O}hc@O/zϺa@l'\dXH]~#~C+,[[BZ02х ץZxed>[)qmjB%rq5O9b2 -"*A(= ^qȉ͒:g;M>zj5㯮s8'I9{?wI`:q)d#[f\r=0ZƜ} EyLs ߌk'^"UC# xsMgx8P;w'9??=* r{7@ R/p 1q+J`|u=9S@iG|t'Z1\2pV3A^Ig?ԡ2u;sXuw<랼dwOנY"> 2s۟8p}GL tO 0#ϧlU <}󎛇#d:xNp99<'ɩ\^WFlc8O?*dg#Hqǵ 0A09ԇ93g=r>aG R~05KK29<'8^sz9r__rw~>8=CupFz$p9##zx#ݱ|p=8@F:8 ý`1F:s9cӯ$Z`=3t w `p3I>۷4ztOlP!x# {g58<.7sztz w(K:`g^9û~ӎ?QtzT:dn~Rip!NxYBft>\kվ ٍ+lRbU郹Np|ӛ)Dqj2m.~u,wbko?7r]c-9GZ䭤;scq9~~uVHl 9'z=;C˟$mXou yqt*c\g%ٔ0$O9O+̎nHlUAav=3(s!>Zv0sBDhG VF*QE}<8h[UI-bRJ%%W#?)9}j;=Fsifi"vİ237-;5٢Go9r}+ H#7#沫қGhj88fC?¼޾\[F >wsנkƮgA4yz}:ts<wƗ{o=XdNH$\|ԁpsvs)D'8%rI$cOʓ9APy q9G$è'^n(bnH$`a냎Hnwt4!YLs}{YF:H ~L^z|ǧO^yþO=#C4:`cRAHr0:csӧ^Ĵ(\Op3?u?Ş =Q-ЂxQA;' znNz} .cpH*8'tGnGh A\ggnƠ9`1A8^~ 9Uvrs zXμqmMx:Wq Ș}2jg:t\VIgs:֨<˒J0uM~I9rNZ=4ь=8>^4GQ=?Q펝= ˛R8 9 u<6owZgB2HG8^;ɩJ^r>¶ =r #Ks=\ԁڵ8霊lxfG8;ޯz3+Ӥy7?C=pzqS/=>c9n2/R6ңӖ@aVI0.?ČԠ9?/r?Rprdc=i cӜ yIzp1Rg#g#$nRv= P3׌v}@z ÞEH.{p7s] UހAN=GWӞGZa9+FNz`<ӱGA&~zOˑ;#-1 @>}q׵9T d[o$~9'>:1ЂzPs32XŒvgJL;FN?^֣xϠ^sPQ8#9鏧J{Oc)9 3C@go_Z\rN1dPĒO4,63u3s2*."-Y_nw'_OM(a_i4npcUVN/1k{u87eyWx+=/֫c^X[Ar7Pg =,"`3+ sW|E~X-So9 6)m4ӕqcU8+tNh.4\V4} 2/P׆+Ŗ ^{Mfe;Oa_O^uK }KkQy;bG>ˌ4{$]-V!(E?m6oy m=ݔØȹt8@9ˍ9Vm8ݚkފk U-~v ר@ݸ ן˭r<| =S$>|i Ӑ8'G~(A%^ d{)C`W.F;zdot4F}s0T\wg=:22p=1~Aܜs׏088$0=zh889<(s۶0Ay$^@p\i<+xnۻ?tOǵ!8paCxC1 `(=ߚv062Fx=bgqzcMs:s 4s;p}Ϡ\r@rON3B02z\ ccwy':P1ʜtzL%G@}A⥔4;pxnrIlcZLG`{~9e!$8>Ҙ[ >Q>{jlN(oO~:c֡nN FH` H={% * $~oʎ[Q]Bu x;9݆hr8^A q F=TpN2?j0{rqm:IXu#^8CqLs7꼟ƆI 5'n8 8?rN>8ns90 AcNry=Lc84p9 wfF3Gnb?S./ۻ1:giAwN;A3I1 u9'$F}4 a~a\ t O|R1rKnVNs@##~P#i88}##8N@#p3ڀ]G@3wL=NpG$mǿZCy=i O$z`g&<#t8==)Or͞ b zp:}BsP|s8jA՘<.=x3L]G(Vኟ@yuڐr3y= L׿r(J _Ă2$M/ t~c鑏N6I'#ړ%@AoBxZL_hI/95n'9w1cq gLP.rz ]zrO_Znzg=$cG\hpx]ǜgor8f^3 $cwSs+ʻ2{*BC;@o szs׌?*g< vci#:] s؍<=JRON0?HwhRN9wR6gs img1ǩ_o3ǽ!&7A8U#89z@bzcSJ q3М4 gSg'W@ t ☿t6v'v=Iq ϢpNq=je"prP=)X*H sqU^} pUyO3oB"DaG @=>c ss.S?xvS& zƂ מ?Ͻ' %q{?JHҩ=x`{VsM9wr8#O֟QsOJ;QTsTy =U?zs?U%z!{可Lď_ziexӧi_7>=?f܅`\ c8?$e%anG|{`^I#u1 .s;V-7.Y_c&緜V-ې Ėsȩv*8 KE m.W89+ohNSm\*ӎ*H B["‚`\|sֈ$ԏi/c͆T #sOĀ)R7Xc:Rxi&/QigvAmH="eeRS3=G8 LYy k fH).w2N0x8#h*Z6mt(ݝO@u|-dؘ_`J`HO:vYd$Ne*>5%h$p9- gh껜 ,ţNwSr8㹦y,ʄ@I}͝0}=u4!Bwv<;%R A^Ony",dˀvH,JLs͟'>S%Q7Ϸky'hЎK`E{D-)9M1aq'`t5syT>6ǍS֪4O6c]HbsmUA rsSKg!{2{UnF<,q.T͞8{qQ+8<nsqר_)}IIaqxL#17wsөKlrp<)x?Oإ7rT(n@ֆ̐nbI82 :8[q(lHv!I#<+$Ϊ[4Sxdeuj\Hn$Y e>\<3unE% " ۙkA ̍3B0O7?5X`^7{ Tzt\]nZ^+M,o1 Uܒ6hVbIݜnR"5;6 ]s.9# 9RAWp<;P(as2< sZ1Z7czMo︔ѫ{c'#9x.NFHV=: &#ER&c"13^Z *#@`#ӭu#hߩ5'$Nߗ=Wu[1#=^^{=zgsN:X~."`sیN n,1fAׂCgF`1zdtҟP8uN0;g17'+A 88=xf8||v:~,a y;SpN01v3$nGjAd($u#ԚhD`I ctԥz l@w>b8u:s'#Gg$z(t@mp^@Їp2:z FO9*O(t_nH}zcTzOjL+n8pݞ0{oLs; sgqd{@GP>B9~g((^1-8$g g#~.wdvr;c㸦[/~V8}ܜr=(vsAh9v P0N$ Nx"N(,&`3rzc\dRv>2=̓E*Q<95 K\H,1_HYs}uj+M= TQKB ]zin_0FU9-*;x3+vX0gti0nHrWMQrMn@dd#OS dq5ƶ7a-~@#ӟouYUKlF pOS/ DT㝭|vޣU*|d +=O5ɉvz 9$>z;8=o49s@lȉ'UǨ_l lˋΗ}}=60O3:-/Ts=b~Ooּ,f0Sű9cAǺߧ3so֪?8I5A^dccC]AAߒ8 9xZ.OR9>S֊ڹ*xNӽS'SW>^zrx>ʔ?Lкy'q?^ya$9޼ԽC1nzzsާ s;W}Oq `9)|`:6xqӿ~98C(囯ccޞcG9@O׸rFܢpy=+3S|99U=3۞*9Df+㧱*?<'M\{s<'`rq#sQ#x$u=>rF_oNJh 络$#?Ρ̿fCŷcw>ޠPcqTsٍ8IqǠG 3:CG0w9$# o^*y3Ic$`yWۑIɂ10<`n$ry۾3^3UT"W?-2xWlI=+ ^> k)V-~e;oZ|e>(r-d-V8)UO:9vG쟅,mlm B z}k>2mf3q(wcߟ¾)ӎ1rݯ~y]9lFsl9'_?_n33f nP)e}Ǯ9\zdu8nrr #%@8$[{2 \ђB>N:`qv#>ړA?cTK!2_1p888}+&6nb,UF:w9E]_K%1 Q^Gq:y{Ew)+p03aLi>]RXWKʚѬK|9Lq 󞞕v W<C ,oMݧu:U˥bAGo|;p&e]98f ϑҼSԠ˯s`{N߷p$`.Ǡd%I:LUZb=X|0 j;A=}4ƹ8 uۡ c5P.03v>'qtgӊN=GG; A\|@TwC;#{Ðh矽S NJljs(F{ o}c#<qg?ҵU/ԮBA(^y ~PqϥtS3G>$㞧z)񎇸9'd~=3^tGea:W=y`'>ǵvd=2zsHIU s> Θ<Dvɬ)d* 9n?xcE4L̇~+ۿ >2y7SҮm/M923{Lc4fO񜞇'ZӒ$u=Ah#c0O_{`r~^d/A!1@VtgOP_r28(<;N{ y6uOr0{\>g@0A};)p# NO,6r3֓q=6ނD~AFA9ϯJNlc<(8 I_NZq#O\(Զqן]&ݸ 8g'#?\fs}Ks5ITct lG| dr>AU؞z~b1OE= `F0˃h,I0HbNG gF=;ЀgO@X cʀ:S#jdDcʠ8C$UWס9 iK(^?ƪ0)}&L9:`*=~|9<qZ hTx#߈V|9=q?Z1y3Fz8yǦ:vhjrH#x G={c<8ڶ0pOi9a'm<{WM{8/w{77*oȥv3juǴhE}G3\KpS,q}_^ ͌&/;\jZن V0A`bYa,۲pMiM9)TnߙzMsU[._eEt5ÈAú KqZ,3OAW5߯OkbBYS W%J,W*+KDKu&}8%$[^KHf-4~[1=m;^ a4)*1--{W,=}{zri%hwGN2=WkGt5 JYk)--ʌcjWigo,ahIn"؈{WLmWW3ɜ'Ӈğ/b=^i4êxn9縺d<,W/붚7T|?'ڴ]D$SFm`i–:_7͵8U'ϕ)#<װzu ! 7./ *D9*KFvM7JյK<[iIͼ0x:p?WIAQK?#`z`kR|9nweYBҎ>9`s6) t#m_ 8$G4 bq.x u, 3>II\t+g?wwC=sRrxgv'<;GL;PYwc 9 erߕ;w%yOL}}i\P41i$d#Ez|Gï<*`z)V@~4r:zM1pu1Xgg! :S@.O99ݴ<suvNF>\}}TߌЌQ۩}@lmlNĀp=17.Imzi~: c?Rn0FO^3nP"#9 <=[ 7 zq1إ@;y .1PI$/N9#Pq@( ;te!>8A=OP8zp9LӸrzSrr:=2=A=z #`ni`I({${ߧj6?P?}BGbO8 Gޝd$O89 rx==M;oy^9䑌q>\Tg:f1p>b0@sQ}0CѸʂI ''=N:Nz}v8't]sA|w#7x xS\?Rp9[0Ǡb9#'I'-CBer֔d9wq;<p:#>L @z䁌 g'/݋r1=J n&9(F9#-1߯4s ~xOq7.I=00qxϭ;Y1NOo! -r$ir89u89=i OQ3M`9#>Ó|g+;r0H\' N>ӆw1Ìb1?7E'[piHq=sz4\Szw8 - s"02xލǝ6׵?w6T#| ցo`߮b0X94 Πq'OOnML'pĶߘ@6aqz~j2?s׏h$ʞ`1뎵K-|NNZ##4R^{~cR99Tx$ }-@y)8#M~^é=H}z?1=Njq{g#Պ}@ `OLuc"=H1t&y?ƗsH©2N12yqǷ֗?2>jjOB`}4݂@laH3g$~\$ 8B(Ϯ8$ t?pݟp@ר_IRA`|zg~BfN#rF=>Q5]ȎWxb0q^}*/KQyA\g)r =x(Ҏe9v7d,2=rkcK_#n9 FUFrN?"EhGႍn;QW:yS+AS9nvue4 @P D~ haaN^[3ǫ>Y4ADƛ9/8#ּĿ Ŋb:vXJa-PI5ͦ< (Mc!L W15i&>zWZW_qѪާ?4lnj$@/& 8e9\OS}ԮOm202*kIn N~E)FW78zwͩ( - zVw|1dw!ǖZ5W]2}7{{Ը"ԝMYC ˞Aaޡu$gq#nۤpF;Ԩ^Rc#|06a>@I ^b@;XwE>P BYBvvY9*@-!9k}'ԎAt5%o1F/ݱ2\ianpÒ#4*nȇ5wiGøIv>!TdI;ws$u9>+g(rӿa9vwSV>ciT4Ld1|(`B z残"8|Ųqz`Uz3K1R2\pq-B G 7;߶9Mӭ2;pnIl1 v9{* _{r|'⻄*_sCgӮxPz'aust?6@#>d{=; `r}Oj܏00r{s4`yo<Bdg# OacN?` 9;d.2ҝv?L_^qz1)6>i\^ymltw'`t烎8X=xw'wot݇4&>æ6ߟ~qp0rp돻@:p0Fy*}NI $qtA8#9ROz$);Nz}(c) gPO>鷵g=8,rpp=?*HcrN>g ql߭=znی}~HNN9q;y׎(G$IG9#=0Hz@=Uv.IOwSxr8FF@(#Вy8H8?b@?Nh=z='ҕG\^ $iw 9##åZcF\qFAm'$^+.!u0#ha$ wYT*lybP6dI#\" yBr60?N09 JI3+71ۭpl*LwkSjJ=:Kd|QvcMR>aܜqnk݌8U.ZL-bTt,Arka4)Hp@P8q29{ְt1L1fr8P 89<OX ^OQrlDBh,C^TV+Y eWU Tm8\*Zܴ#2D(IKTT <ǺELF2#p3׎qސܵ4dM8E*[ 0H=뒃RX ̠:PrHɭc&9kt>]ZG#>=5,ʪŷdsq⢬_9t˱H\0li'``HST 'ӿq;h7;Ocz~4F@ ! ssQbܑ ܞoLٛk(ّ>]\|ͣ)R?jݺ2ȥE99rOk6s38+6A'sM'tp%U 늦HvF$9ܧ*rv7 |'y1:u4-'%Al;.JPsTJ#q?) NsAMGO2GT>c~C؀9^uaF6]I`Yq~4qM_@܄(9<`3DDaxݵ`p?.(1/]Fٸ0GpJe " Kn n|G;PE@8LX gpN;.PN-YzXԅԓwoZ3D T=A׽tV&w@o#zҲvn{3q3C zԑɵVHG?> ӃYJkDisI}|̓ׯ隧T1ntޘ%Ywc'#ٵmR]ncAdO* ݙ:t8=:d$T ׍{[.Ϣ|-&+x dž{}1Ҽ3񵱃NH'zB v򡱸duO<L7Qؕ+?v-Pќ c'N1T. 9kC6(,>oHG8S}w($arQ ן\N}~l`ǽ"q.:p0~^?C?x#o9> 8<60W}[,r8~zcnޤ|0qI1ӏsqR2I$z?4t) t'n.8x#>41ݰG^z:L݌Iڥ-'c=[H#*N[8=9;r4ŐӸ?ԎM7!I ?犓$(9{Ɛ~I+Ag⥆c}\򭼒Dk} p^Wƞ?4j* dpBtGIz;]!3oB8TD I M-7kIM1E'؞ >MEQ|i+a굫O9|FL_#[_bY1Wu^nGֿ$WYM~,kSVU1`߽xanXʹ@9]To͞Zc1D܃#x;%z Cb6F q2A \[͝m,cp#c,>oB={ \ R=IsI C1:7jxݵFw6z3BqB@ȥy$x};gJw,ܴ:xF\OSM+/2^COHYG ';1O~z՘F c`Y @3{zЧhC͔4P IbJz0=W5lI2lN}CO#ҹ1tmd=[hj[nA$a{WѾԢ a61>mG=k«=jRF;,lzr1#㶧T$# y8u01` +bSwyCzs[pJGMr998WFӂx;q9Hx}s?B{W'ޖpOK'n; :44{0$j#' 秿lu~r*9+t_jLp1x8ȨduFWϷҲDPHqw3GÞON@*.Õ\Dg}iBws{LDi[r3z~ysNF29=i35!e88t?.N=i==rp:u+Fr)a&Čh\yֽ+GVm }Gkg>p:z{gzQ8_QnLz?j6F g0sڴA90G$`FN0z\m`yI/u93b;<`iq^#9W8=ֶuTwYl֝rw @qP <2#Tb~R?鑌)h+n\h6[)V%H$LռI9g=O@>a$sj5V 9 Lgh]3rp?^S0$t:g i_Ԍ:ϯ=95+G@Ͽ8 Qv{=?Z3AϠ\6Uzz~J~9#:pqC>iøzwNL` {z}*#'1F c=38|p8UQu$u?z$p@jvr{?ɮG!27v==<}}i:o\׭KzgnzSNyr=qқF;@\rn)w>'$qO><<4lb9kb::#G%w7#<{Vd -mn_Rr=}x^3ͩk?:Ҭ:zֺsg|CQOakc6<Þ1p[Onyg?֩ {<@~ gağOs5Kb{Ϧp70pWnGE1x?9OO; 1Ƿ| 0pqÎ2ø2n:t>vGsۚzjg :u'y鎙p99tid1GE C8r:($pA=R<~\gs͟ҟ4rprHqAלж~緩ƈr8+J|Rjhr{)* H<zT2trǿSy8wvsߜgTumb:T+Esm Wt@)_zqWV&Sq'%+i$w"Amog;KdRH}s$+;U KC*F#hDEskTz_3:{ ]S N#%I3О}?/ ƑY".nv#aFu8r일CNT]O mwK֟6`TO!Չ8'';_KHYU/ %>a LV"4N˦Y&{>?4#%wvJ|i!u#Ll~t8{*)l5m8lIQ߮++G%E+:5ʬ1\sЌk& O/~n]'iixd?n\ZſkutM)3[.)JoB~K?cm*Z}^ մRshu[ZD,%E5RqTQk[^[`XcaαDFfS =+&WJ/5\mOKyy~9Ь~šiv>0Gif~s].b|, OhL>ZO+gY 63כQ$~'BHd%dd |z} shW,γG'@9iSz~7O(˭_i؀e,{8 w\V`a>וgBn;#1ߥ 2ugvq\E Hӯb`F:qO~czxHp dHŒq;n9^I2prFF1/ʀ#zg}}q@ pT 08=8M4ozx$}E;p@IJ_vfA W;P s瓞3!'Oϥ`w$ ziR>^A'$zȦxs9xrO ~0 #39T<:p8 ;}h dt 2#cpOw0=q֐t*TdT}OCZCŽt>z<`C#1>qp{MN3NyoސvG8{`cZo^XJ84 zQ:'>r1AǰQpz~0@OnsGߏi n|'<8<XqIJQ‚8ݜ~B RcC3 tuvFI:GN}RQ/c|c'#'i?N=3CHi8?=G4c'< T96CNq҃#tOCulBNp=0p;} ;ir{瞃{1gOzaCŒ@P8nOpz.N[?$ 8>)\Jwx8<zi=2<ǂ}z>sp:;n t;F($F竅3G#1Ӄ'PA=#y?8>g79A9A}i96O|gsQs'z<}h9c@;9yϠ۷R3brUp8s0:b1}yŽAoo~pñס?)L} /A$c0?:Px8lA{(xx{FO| ryHtHpF8AQImOLu8#9frqIr8=9P(>+ds|.~V^™"9^wz)g=O>vB7A2~n[` Ib8=!ArI֟F| !19O9qgpVOFH6=;ǧiTl2;F>#Ny'^P;>\Dswf0^ԒG;\{78 ӹ~1=>o]H8I }1i(e?{Sϩ':Pn8:r;zSHu /+Iλ 9eW|֐I*v:wٌ c"?1 -'j\~'9',sRn qgrz+eC}ǯ!#yn0>u+Uպ}R0Nzv8TǎX[?~o"2CpX[V :ɯ?C,s9欢{`{bD4F2xA8繫 x1ϩLTc&YO`zԈ 8î*  9 3IRFm6ӾA8œ}yk]p=y9cǫrjl&HAʘǡ^1֟ddqr}Ւ('Slx=s,xޜu==Jw瓑q0qO_'HI'ojv!C)'Mˑ8c?.IB$1}ix999VKgpG:y݆8DHLx=N3x"zh͊^c9TR`A<njc&}{t"`<*D5*'=d##dNFhӥaufmM0- suGzO,$2v:|)8nƷ< F B`Ƀ m,'9ןJ̉=HSnۻ }cۊrB!XCWe&_αɎ06T~nq۫TsRg 0>(9Hª 8+БA֦Xlc} t^~ݷ,&rSn@c#$$vid"\g(ג33ÔgϿ'sK1Op><.2x s<{ 1==:Ps<灎yg;(n~xr@h 88Jr:.c>/c;h4s{c]߯~R,1'XwnԇgOų:q@Ϡ Ga9` q׶;P2S9<O[9 c6z r,R 6O|ݽ&׼Msn 3@gsp`o7y7Lk M{4G1&lp3|zocO221?.rkL baIUWiwopIrSݎNHs]헇/fm|y)T/3+vxbJ=Y8+ XX$u?)UqS/  l?]lrɷ]xzkb{T| \u{fgf]\ĢLc$ִM4Jg}-vRU<\Z[*!*6tVϭʒJI`vR<@ G )8ܫ9F;cZ00BX001F1ٸ3'P~gI\ <@pD į'>s޵[ F';E;+ef>)e26F豹@<滭6n#t8sF \-`{=^ϲ"2C'2Jp3ϥzW Tݣ.3* D۾eXk٩UEEV3/,c+G##ʉ>PT{k5Ofm‚p pFy~a#z׆Nڽ62/g9s{[F_{2qrG{*isc!Jn kQPOT񋋽bFQ$p8VA.ifmDAJeۑ6sF7K0r<+cAlXҽc:UImP|' \U'4R(tUX^"r7?:$ 98]E20,0w$w}ſ5=;m+l;|$|vpBh1t>kj.~y y9);p>GP}{lEG=:IB9ʶ19)22pddsc9)}@^sS)`I k#Ќ|ǑxXna9zd__xY쭐F=:i#>Z};t8ŀ9?[}i+G\ lw9\19V 83rpG?Q҂K8=2r@Sߚgl#ǿ'{7 㑎?l(瑐 F981Sl׹NO?P4`ЁGOnj d`n'ޗ0@d }g+}:UG w.:4LvJG+r`ztJ_+qfJ?LL*p=A #jo9*"{с=OH[0v|R1MKp>ާDv#c$c;~3F `}ӣd\M==I'u>cԃs2s' O|mG=30'W֚}GLӞ g t0<OddHzOG'1R\}rsAy$vx'rU饹?Oʢi=/RF~Q9.=*DO@39ڣ$ ;Uu?O΢f<\͚B= ~AN1.7Ax^Om}{ym6/3gõs#Q@38o "<AW>u*Α3%1U\I ~$t﯑2]d!]HpBbd`to +)$b:WM^ $66r*-ۦ-kH.Yr8GKhϖV#s,0r=>^TdfetNkǕyKN̵TY ē*w#wfS猟y{ĭ\u֛FOA{~2cnqr=9󌜒ޙ5czƼ{vc֒sdrvК&MXusߞ x'YjH'i#)Osv q mOǿ_>@)0x>^8q? n @FzgF1N(e2rs܁=I{tQE8 pѶGЌ23؟_ҽ"zf Jpz g}GZe/u=kԉK/\ gx=iN6͎8ҴA1~ߜ z⹋_=ʪ&se+.rH mQM2| ے1#ֵRH'1¶ht涭'@; dTt8c9[Q7Ny z4t5#,}=*Sr*ЋhL;nǾj1?0Oy:sI2y힃ttF+< _nGHc<4#AB2p3マ=8`1׌7#ێx=OF702:P3|7rH1qϾ;c'vz񜑐|P d'P 8眨#LIס=(?l$Fz9=z`g=}h,vzdOM'Ix\t@0מ8xQ J29ҀCgFOCsN 9 xJL:^v0x;"8b3;@9L|v9''G9Wc<8;Ww>GVu8$m9&zBD2pFr:gک:{gr3{p+-afLG#=}k9#v<{&Ϧvu?78޸\̩0cgx`UןЁr=>/phE5o3w>UGG&#ft0}ߨ'6dgNy {A@ Ԝ~C#<:~27p9 :zT#9 oSނXc8,s{ f8?۵2Ec9~r8q pz_ʘsa[9zu;`p <w ̜ ֙99'< {`Lzqǯq׎h^03.#< Ncp9ۯ?$7ͻӎc)Pǰ=8ڣ8h xM&Rzn9 ;Ϸ_« rsT,2>'idrc NOʡDY9qӡ;R2NsЄ#?_ϊQn|P*wr<]=d!h2@vd0WVT3Q>eףX h%1b^K I0m gҰė6Emkn-<̩wH1yf1*=>GQ?|  ҼGk;YkBFḦ́Iz(G/򴫦y'ekqqp$0z/{WE7')kvvVٯB0:34.L8^C{PeBNZ=^RQnVX.grHXGy7*?9@~P\ $o2nfF2j)#SZ/.|"[ o.c0did{sc5|"mEγ:2:Y@F$ \0IjW8=#Ei}Η^YHLH4@l{Jߴ4&#!m' K#qВgY.ih{m,^T&Zhx*!#zs o$lO G>8 uW[ mj~k.vcrJ+,[*OO+n6'yk~M00zQ:h]9^V7Wj䅣u{}H) j*FaRH(>@6]D rYOqʧ=HǒQ5kٳN_Gt`R|<7b@cbZH퍔O=gr`+9.l FU]: 쪥vz2;Wwg8)1 :w־z7JVke%%uz>cGxZw*$9$\VCel|})wd1'8a@9;{1H0G\zMX庀3ms&}O29܊@'$d{Ij`~^33jP y8NOl<צ3A˜?/@njM^vzL`~P&47O ֜n9@\@nF@’GQ.H} Ҫ'<hZr6 c=oPsBpu qG^9/'pr0 LB.y`@#=h,z{}W>8hB{0#ןN$8w'=֘l48M'4Ò;@Hh@@=:&f#` vҁSG'r89ґCy9<=s 3I֐ ۞@OzxV8SڤGÜ=*BށF3pG<@ fWwEqCsrz$@'ʐdgf=1;P10s1y#&:'q#s9ր#ʱ\g` 1'$y8?,@ 1-qQH#n3GJBI~U sDZ;RA3ܑJ e x GIGڗPxmtRs1ۚPFI=p;|q@ Aw O8Q?x' n?ALi~\9<)d8:t5qp>z{Ҏ1ћ9 A8;1@;cӃޑ==F'qBr‘@$8$ L(}{`vxj?W) dca<9i9$.Knpq@A9 ).x>g O#;}=:Pѝ{d# ҏ'XqTs=>;v9F8OR@>ð8=q9NG=2{g~5Hlr:cN)dǯRg8+Qȥ saRBaq=w)zc#Շ=ϽP1)1'<`cޕs@pyA dž#QpWRvJpx FRvt}9Q֐$d݀rIܲ;O^~Q.26ܠry^x) oAl:hN>eFc?Le7VJ/pG<9 {/8;R@d 9b=l.OW r'Ծѓ=@'qNqڮ9.ǿ# zr5:=z0 ZD6N?(1qV׎894ћ!QwS: <SIt yg?߭V&UTgCRH##rӥBXosxiqĆ Ns[I uR\鞧ߍHsϡ)0Atq֙7%O^$cN}:ҞmA6# +zg$?JGA'#}xWv=9gwwbO>__,z3; HnO捄}Τ _#__,F9,#50G#灑3zsS3#n9ծ$= ARdNc:q1یp9cU*I8=@'~Jݜı'Z#?=B2=s#ӳtAq?^v^@޲.[b}d`)6</W9w =q|j LnRc$+ %'x1Us[1aX qֵPT .r`[ӿzQ0jR[(Mpd\?r;]~$Ԇ M Fsl](GGgc؏,ErT06pOj~+$خwl|zMo`:Բ\XϘe{f5ry]ŚتH7bGrb:.0#ONYǎ6698<K.>RX]Ԗ=SM@áϧSK 4|y'!O_U#3R`7>FlrAN*nC9, ݀`GIݞx@Kc<|zS_MAzbNX7?$樶Vm1v?!nyϯ=*M=ž),;ٻjjcp~e۞A;=884@lxHQ ##RyPnX;KFסu-QJZMFM˵ĸn@U]=kʯ4wcO cSHc۱Y`#lc>0><[';t|S G{~\sMip96 t!<0I?Z3:6pyO`CFl5'$vH?/^$x=F3?(<`;ש*IY03]=qx+'Gxv cGPyw͜ }h9$;3A$r}x)\vrp:31g#q:=>ҟ8rIsjE;zunn|[a  y `=I 1BdcPG'swPr)9'O_8,{cN8ǟoH;aN}M#8Tu9$ LҔ}>^r~b z091ϧ?#ژG#^:1БP>oùiu`u=}y2=񍠓ۯN2=ioq=3V`p%8c#3[rߑ\'$m-]) T-@Ð9 "C ѫcc&d±ݴ3:Q.,t "B^[hVf w^kbFE1E1Xy9Je˯,K#0qp /p`ΡFbpۗ~ɡp)ز8nN~t@,a 8)LGsD1ybAJyXġN@ 0֎]zᴫ`r229RC+D,rG1 @ Ɍ{d݄mA:c֘4ݟ`sqGwS3#6͌m^s{g3W?tqF0KU+ S1Nޢ:ѫND>f#><^}.VNdI!r28ne"Gʮo|1O?7֞Be4*:uƸU-c:zm0'cҠݵZ<ώYTq^ǢG BpSsp"y$;S잚QOQ lqo2zs^"Iflsh$wW`bxX*8^JQq[5)TrʅEKs]ՖMhܥ'mnt$26@PyZiD%\4q' ;j\Uq^Mǡ/aE^k9./|;]wgyn$Qv^{t81xx גj&nMN +n8{ʢjM;teP2ZjC~ܠ e 1sVxeD8a%NF:]K+݄yܚKXlP󵗄|quTk$U~hgی`9a:fѣ/b7*7;԰r&,*P c{rsͦF񄖧Qk!Bd$'m;s rPo'g#'oJw4LܲJBveW#p {5Gտx@sq܎s11nzfzF3' z`Ul SҼӼޣu`,8뷮s@toz4fMߡ=}X3G}@opC3N@8d>klw #QczwU#Ƽg=4t> ϯN!9aR==׮9Z?b'uc O)8ぐ9g=@Ͽj̗cw?h:g Qy}+"NIq9{g'<`qP<#sۨh_2/=?qf\'RdU>b]S$v|u=}*)܎wK]ǮpNy\uǥYRp:u'aR{1(os ~@㎼G?]xu]?x9+&&V5u =cj^999{׷M{>vaf=?v7v8kdsI_^Iq\wCS]NC]p={L%{8" QУgwolvLW$}3aF8c׎qL Q8n^=GeA8L\‘RBHz:{z{r) PI9$>1^H0=qm8|OsZK wrAJE-ɜv8# x>qT;`vt<lr$0'p1NA8l1˜r}=*9C|8xGjDÐXH2:zRS)"Î0# c p:apA.=*Ԁ4$d䑁שzVC8*NTAbz3ֺa橳&`FW_Zqדߟqֺv# ?*@@889zL N::TRyBh- j`Oln14g _J ^J^3ۏn)#PmxG8֞1< ?3q?lNs<`SקZx'ݟC\юʜ:zzc'Qvz5E6'?g֫:toCG_t}v  `g3҆s܂G^x9Fl9xmGRHNEDkM3wp3*K <$So,&8Iv!1v) HK1rTrrzyi.v<5[eҾ20[f\~|VծrUd^Y20yӥ}]Zu%זvK>#uG!d(q߿_Iy#hErPO.pFGuRIZT/&hEuw>G)V(0?/#:mrJl}p??qP"l20铕S@ #$npv9\z⪧Sdp6|X:dm ptNF="ʘȐ7n$f2x=9Ia_Bhl@]H$98Q+<3_M/yz[Z=BP-)hX4ss +}Ofi@S(.ssn<ޒOB߆Ӯ#0bY1>]:$RcH995֢JrT~;q!8$bqk3n@C6N3Cs[-OJL}.bp7`/!@g|‚A$10icc8_Xux=zt>)G8^{```g=Z5n-::a 99'ǯ \s=:t洕zvqgxz [u8)rq6gi3ubrAS 8dNc%d ߐ2=? +u:rO5Lo99<@=uYP2F8Б~uSxG9{14{$s'iDxۧA}jN9?+[ l9T}l{g ln39@p9*l:I t'W6~>r ps=*gO<0vN<ףpHq98=pxp8:#qz 1qqPG$@fASʫc:;t8Ĝd6p3=xnp3lsrt8qqֵ |H!r>nrKvQ'_c?o!r0@H7Բtfc:t# 屌G5W.÷du#ӹ  ^M,r'5 𞀎H88ێ_^9LS;}qc I߫:m=2^{gzQБǧ"#-8@  :7HxG*{PyI>9I0}{t{paLbN1 R3<׮7pǷ#Jv?Nr2x&i=28E?r g=&U R:GYhFF<p;@Yq㌌sAׁV7xĢOAPy2}9VoA+z !~^<Ī89<Vjeg=ZןT솄駡㟻FFw_lRWx~ӱ qzNG}{Sn?֦Q8O'S_Dn玠8y9QGBq>Rq%jAÕ@냎=20Fs?N233ǿ^9z9'8Np'Cң 7gHO/BsNK 3?J'9sO|q,5N^hn}*X'2}!#n6sUgiYowKѴftq) rq1ѫuՄy$g6Su]gp4au쬗pVҦyMi˯ξ᮹*8Eo ِĸ+_5! &~@2x<I-lͫZJ\, OR|ni!w,2w^p"c.IZ˻dS*hٽ h6ael䁗8 qL4{(x-'NBr:W iO6oE^"5jc6_hvY[!>ާS:\:ՙm,R0ep_ҹXeIڮ-Zw6ݐ[47[&Uv*9;jVYND6Ą⹱8H֌KZڣcJRW]$oM 2`W$=+ZI]FsD{u Wzۧk幵(TYcbsPy,MJbǦ<87Nn3i;z+rq847cSq#<dp`Ln?619%C>\9sR3GJH:x`TA֤8 zw4I~\át?Z^.Fq%}7ct9FN2 b@77ƀcolSۀWԆzԿ)t+ ג9upq'RNs:Ўpң'/rsz@^:jX ! AY#?/Ady#3o!8973ש&ђI/@ON SאTsLO֛eu;IwSA$p)<ITo\:\юsϰx( qqҝc pzG<{~T`398 zrAS\$$8֐9r'rGBx~c1rA*zdc8$p{1$f7  nT ӮGb89;T@Տ#'uM >^p8Ze 389t9*Nw>`Gp}3ƆI#Nx%sȤ\g9s~sH3?(qNR 0'ӜgcJ2qW H>(QRp9^wžr8^in5NA=[1`/Z8$å g+''6xwZ]A>z{zjgn)ש{`8px\ `w8K:arNxqèH 8zzE #'BNO~顒 ?+-׵9_lQQ9spNzzA#z.$rs9bxӀy:p3קz`&CprNr>Q1<`S3`z?dcܷR>Ҥ w7n?Brs@FiI@'a'G@ N <{Қd(pTHjpO'q8)0G^=AסU9%ڐR$1ncW$`= xC#׸(8W9L#>sϽ0zۃ{ qnX$d(CI$O`pzZ~=s}ubg 9힇rpJ(?מRԌ/V,:>lK%@=pIʦ z :ڧad9Vcw s R O8nkr 1zݻܞ=ǭG92 6xHLJ19{۟qR cp-Ӏ=}HGSߜœ>A4dzARO@=3ǨzqۊMÜqCu9=G8霕=ӯ@x88աTQЋN oM`39=isԎğz!yqR#s 8Ԕd.`zgO3׮2z1TA.99'ȩ==8~t1,v=3ПS zcӃ]D={v;bJwt(h<>*H -SˠߵIUڬJ ʥGf[y'E9(,Ğhm*Xơ$W*z'W)b]$^^n~5r~gNxC9LӅ(++:=ySm=iop̠ǝ~UYoUN7mI'`e,p 'm΄NCi4>ی1u9 'ZHiWUyB8ɡn 'v9WJi頬YNWn㑸[UK+ˎp}NsIByu+P!1- cIvGO'jucPh@+`2Í{毶¶78{p~SWnܹR.Aza{Za86 xҴsĩ%Ы#Cm m#`nSftPpq2>2;RSI_̜]<|"39 u}hFq b8Vc#j ^E?Hd/aqӾ8+PV~Ywlڧצ m y?y#c u|viӮI==pGך9# s'FwFHMXa uuĜp9#+r}}A,2WAϧH<)`rHⰪHiF14u39Jcs'8;sR$UFqx#9'<ӡ)短0=3_49%sqEaa`c5)q:@ -UH$?Ɛrx\rX#=N!?AV}qzRМq<{gޞ'98vǽ.1tPn).zǏӵH俱Ǡs@x @Jv԰';uǮERQG˞H8?旞 1 :rG9&6}>N3v0J˞3z! dFy9O9q~LcNCpz}#de:aF=?&G9%zq=GHA?^h Cg#'8G\}h =xz`qOX6L9  cA x+>Yǘ)۲6IQ%tƝ<Ri.- q3ud#>񦳠I#eJg 95T*I=a5̯Y>SBw]&ϧ$ ,v=pOz k3}3V \;\cV?.3МD6w0HKd()9ҹ+&cm:\kvĭFa 1^|n0#a!0? x5[\oebB8,)^g GL E_0v8C`÷'uR~֠[Q\bW`.ѵpyZuk8dC-E4>_ mh>s%aH$ y8,z>uYlNvmvs{ 4# 08?<-3%ـ۞: x⣊I?)'HzgT{+w A\'g׊{\:I 8ur]6gE;YɘۘX ]_NdJr(`2Е`L3qC(KpcvrA }=] Te],:TBlp(87qCҜ/d`i?C+읈ہ&8=2R3:j<L -#7 jR-9xr=A i~ns8ɥl̳<>V'g@5B$W .H=p*L_V'XɊIcéo$m#ZjVqm$9F3bjv_6sqi7D$^=Ee0Ғ',߯#:mq9sV~%m#bɍȯ:.U%>-5e&V=Nֵ;tU>PDr0̝2:cMrb 18+Ulz4y۷>4NpNzj\2yR2N~b\oF+f̜BB]}K!r#ň\'5٦-&zpr[:c'kY9˴F?zVJaB4 YG3'޾uZ8V1q!\p6dc3VsԖg'93󊯎#'G~OylO=玠v8 3I.;VxcXs ^q\8CtsWOz7^}klw 9nxV'_JOnA܎ANPޜcz■7iz~|{g!G:}Z]@olrݏ=O`:c~42M8Ќ٬נ'J&ɓveds ̙22xFy OSFy={B%^::S`{J?P4#s;' 9*XTcrJ_h hD_=`m>?N;q#S=zt߷lP?qMHێ{O8G>'{Iq8ңI~Q܎^R[Aّ29qߡ| m׸s^^&;[9#s'ZlUݞ9?tqj_%n$G%db'soI vF8$c_u+-rzT&Uk9yw\ pHM~G[mNr1}}~<_KύvT=_wӮuT0s~YxW7z%`/T8x_7bGls޼;O:N0I= s560O^3_An{d7{qJr&BrHׯ9Ue׆ݍ+)2 tq:Jz=y22}ׯڙǎ-˸>J?p\sדѿfyp8pz2G zoO.0gS>&wp?BqU/MgqcUׯf4G4d(YQ pKt봀rNz4c˩#֯.n: v]q8ԕG#qӌ{8 c|؁1^N99gN݁x9_q㹜8[=@9> 's#0,@21|(@bXd+~\6JӜ0(]NݸyF1F3tPvأ=M7`{Q3H9='Ts; IӃ sq֫s ?);VTלgwULιt9bluYTI;>1Mv>;(52~@YqM=lVHbsA߽rY7{K{=&?9Fd0>]l}ztϽc7sh+aacڕzc/~?UQ 댯^r'.9s3t1 㞸=1Hc랙<IA##_LQrHOTF(mz*oG$\c`|tyF3{4:%]٩}=jnrz҂<#sR1ꮈG^A4Ƶ ^@S;ׂ0;Z,y==$GQ9<{dy#<PܒM>y񽗊Ǹi̹Kw(,' (,u q ̱Ug ָ~Ԓ-4շN_ӔZmIf'PRH^ݗkFGoP88bVBYF 3`qåu)jMvmQkvL 1#x^_a/F?y"px>:TުGu,kvw:/3mq=z|g\ fv/n}yU0u ;㉄MǽgU$`~P8ҴH%]]sp;׌W4;ThsG )9;Up3yGn0J(8-8#c xr3s:<El>wiܒ@qӶ)!瞹$m 4͎zs)$=wcq飦>$rxSDc9ua2:480%Nqw{t'c׃2z@ܽ'PqЂ?F{g9M属$מ:>i 91:G皃`) 99;k6>r3On9\g;'$8ǵ4#?)Ǻ@ȎO7c ^sQsjvˏ\`q1=O׸,kr 9#9ޙ=zi3IU# n=>ȤP;]èi:*'@u!2ųשǷېIY)ugm$cip[ >bry`GLQ8ܼw 'ۭ0tϧ'NAԀ׭r;zRUyO=M8dpCqHE=?0Ҍ3~t;#`K{)A09GL)Ǩps}0z 8s=7rNG^K߀{z BpO*Aj r?tոw׎RrE>@ wڄB k9A<3r9A^' CJr(3?ŵ3ۃ2a<9+) xqFq6NH rw#$xKc8c]LtJ @ʰOݎ` |3@$"><`瞦#GO܌T~K}<=2yH @Ccð=ӻ>NrO^}LR!OQs^Rrq+tgn0( sO#~ܰ`K{zlӶ(Ӿ''p>c m ASq"n#)@wzqL<誜l#8&?wm8l{i܏\ONZQ7R pAC:Wm<GnӚ: ӧAL.l9 (y~8zз9~=ҥx$w)ԖI#<<\{ ]HD۷c?BҜG^pr3jg!Hc?O$A>*mxH߿0@F{u?Oq sMlA2nJoy߁On ܬO@''#֤ %I8';9W;PO^F g?8=ЎJgQSϭ2X@HS>?̣:t }NH> IIG>@>sTbrq8={v?H@Gˎ ;Rî9I zv#ޝi:sǷ;0?MJ0=JFOZqqК&08^< {Sz|֩&6. ^>纷ḍ8݁mAY Y>S;aMV|Gs.VIߓӟҺ[v{5} }NRp6xLbFN܅ CW,ldI.>Uۻb'22jB6" Jˏ9<]ﰂˈ*+@==vJhF]z{rp)Momg m`qӽgE xHpI%A,7uq U8\L@fXobCr;6|+(F[& =+Um=* +ץLtw UJLgsҩSb9b1?r< ʃss=jp`*$a0NNj9^];68)$Y$Qzzf&xy>ZV)y`mhRsREB^HF r0;ԥrA)) 8)Fw4w~sqʞީ $x$dTۘ dF|jЅwwz5+H[ 8*AEpp9#fNĜPHc1E;qWnPT`*17H9sO=AArҳ{k)[(8lgp{]Vr3/B9=+FC&I$6G cQު%8>SI?N>C-óS,}3ܑT |<0Fvî8Bb-! ;==20}k `tXɜjXg$![V !cE쬣9P2$̣8&L7rmɘpq5*w=I.ӲV sv3^h{6P$ qr*rSGH EHp0 @}zexrF9W\ͩt?#I9rNsnӞ:==kD9~ĞܜC߰|}33Jb/pNy8><pF7 2B>H׏\uc d'vL'?Euxv  p88ۥ w';@ 99lc{ssӭ<8?ۭsЏpN><; Ϩ4d9x'$WL3ק rsrg>P=Xns6`9d9럔gK x{sd{Sy!$vϷapC3s`F>Q=)0gh#=E0cN}8@sޞc}F4( gJ1<܎'z: p۴r[=Ϧzh8pӸN As?wN'i#AAݻ OAgz4 `rSzy0pMJ-??&(1'ҕcOb}h48x\dq p8> i'p>c :դr@Q_Jot͕%Qss_,9781mlLgn8 :%kI><,/}!\kGB6̀>68#=~hYSw[Xz[ ^2E2Dչӳ ]l~.t-2G$I u`u< TG=>]j36Ъr]tS<[愘GVw*8yI-'gbwvnXc5mo\'S_烷V;}}x 269^w1t850kHe(ЁQ4njW)񏽰mmr:'i֋ 4d!gt=1ڛll^9Ph7ތQA5Z{$04I@ǂG4*8KZO>9*Xhce yzݗqQ;c9ބsڕЪt`q}$R9iQX;g>'Qؕ17m8ss34A18%g8暩95؉ <|zq}Nm;VFX|~Ni{Kɦ~u1ˑ$yPya#RC#;:͜n0=x>xO>< 20qӦ)J_r!RI0#Tyޭ.?:2r )=jEV>jH1Օ,sU؟A$qy392 _ߏQL9bir׵W5џ"D gl,NX\p$yLPG ѷp::)Av5237;19;S#ԂIn1$ɟ_TƠzcDSrNOsTGlϔ#^CcKK+FxwE&sE'$+0=xtQl~8yOl+Nk  9STG:`uaʜ{u HX~Xo8>ޠc1Pg#Ս7F=s_Cts-y}@MG^־=.Ƒ О fNNq:7z2x>ݹ< O|8>jD7xb=G?Bbr3up`Vh*{z~FW(Ө#fL>aI=%F\9z, 99baS6Cd<*9=:BNAzV$cdcs`8xiy8N0GpG_y^4Cn^*H=ǜv8;dqڰlLv{ 2=tP0v2Ke" e zJ"UדO㑎֡ۏV%ФyGLAZAFpOL0ǷJ11qɩGL݉N9pF){c8\.NyM2}rF^#ni= =S; yךQӀP 9p0;OӶ k9-ˉ q#6W: Ns=kĭ߇esz =?Ңl2g|}­YzIso_#K`G9k[ryМ }?*>߱8YȲ&rswE׹A8+ԴGX71 ܷij-^9RXO΋ˌ&I<5m "IJd{d_I r^kCqԨ[/ߋVkmuil\JTbN9=|1#\+I0+5˽+} (+AEZ&*MNuUvrrqK8%v^v=,7|OFO^=dkO^YdC$8!ldWCi2rB<|!ULqUtZyXbœNUSI8r2ҵcd|c#B*=9dߐp i:hh&Vduي&QCs'=yCGq6D,]>@ˀ$pxq9U<15yW@/FF;VuIR2g ]>I).(RNAz Ӂ\lzp P]֫$O <|㱯?3_-O_,zmvvGAaqu) dgl[-t u8[.WlHxPw9$c7nQǨ;L֯C19JfM<0's?o|I#݀\tRf9`8~ x~P{`{*kVwbwu9`qӧ=j|q#9^{wH9L'4NE?`Gzv]O=ns%]GNq+zF,K`.J@u 9p(9]5^>a/*=HӜ ǨѷLq d{l֬|窜HPts[nBǷ\U UО##=`v{xp;RZ$' O<ܓ@ ԑz{~=/`rr1_?Apx9 3>4x88#dOӳہ;篦( 3~CgLϜQʞ;Q~p} 0q@!8@<)4NqH듟~@{ppTqۯ:rF֠n 3`sҥ{gz{b(lxNxrfC:}:8ݽۮ:~;e8?{SD}N=8SS}BȦsy?n]qv# w8"$'䃌usUʜOCBsRaP@|5sNy88? #upzuwSF<)p#e[=3(wtuQZ`@ly?/_ZŔn%~P9zJq+F{YlcIս98+*E9x?^k1QwtJqqA\$⼹;3J7m uy?&yQ܌glHr霟zR=@Oa6ka9'=(Sx*T{P?ʎ4v*AOj߁p<*pbv7b9#C}s3ϵ{Xsī4?Ã^SxrLzqFj`#khJ1OqG5'=Ԏ䝺Nޤ#[d=888zcz=s7p:0@OAG8g'<iH #*H4p1q#/P@xzǥ?1@z^N3<{zF1z`=~  Ӡ=zӦ z}J.q6GlB1NN12z8 #$}hRz?}iwO_@#=rb?/N;|tnI8u?6sx_PynFA=O4=JAduϰ{O$N7I1!ӻ*mB`>W #do>uͨIm $ieDOrO|8JN䭉TVoe'G7Mީq [k:iЅkI DqqՅ)_K@GwSjv<ڸڗVӺ-^k?kuymjS&EaFfK2I-~'xKTZ(%QD$g .^SYNo#ȩ]˕&ݿ3|WgfѠO&-Qy#ZOݹ\>Nq^1yxM5εc26Khʐ @+}}Mwє{Wͥ>wRoUmt?Q8[tIPHMj!B1YqŒc'q K$y`ZNN5mo.UM] $tM5P.'!%y 'E:R~jVuݝLYHBweA>@ eی2yn*х* ﹝sil(*J~Iz沎&C 0VV,ABqӓ\'ܩ6@w0##o'q ppIOSu)ao":n=󎃓@;rܑہYʿXw M5?z罏R7Y[VEo1E&5K۸ ^5&JE@ qZB4*>V]ҷRA׺Xdo!f;[Ҩ3Yo#>e'W4>2PYp Iޟgq㻭eu*f"z)'SK[chIOv2UNܓ=* mONH2C4rpj)BWKuJnK{0mw҂Ist ^GcrIt$01iDž .x 籫!+Ӕ:FMn.2UQJd-? 钫ʗ 8hX? Dgt,j`n8GZK+ڵ)B׏O6vFS]T[3]5y>ld 3P sQ,w>dT_4Nm͂6JHOߺK"n-(ĞN|"A#&5$~%-4erFr 7_ X#5u;y3[M%;g.{<ꃐ>{#Ѹ>~;s8פ kzt9SvH#ց㞠d?Ol1vQǿN₄݃€rO''~)<{w gnOG0c$ րAT6⠁R{w*)s)O#qO\/fb;۸9iq=Nrv8u:G;ސ,qnL'su 6zzvzv12z֐ H'ӧlӳa8g1#9 fpwlt40e?ȡnPǮ=E3I ǩC @ۑ Aۀϭ/<;*q>߅ ǩs>?ZvN80sv.r܀zeN9_惐8R0gԋp# ~4}z sixlu҅9QԅpdnAbLc?잽h]$cߞ׾h[ lq$cA=JEd7na@BO`zcpx!{:S?08?n#bOߩc9q(+wpIFFryz$pS_J^k <z~e yq|wlzJawʑ8C`!a GPOC,O\u![<р5 {m$`@} H2 P{zQvPWPA<|ǿltQwqԏң޸ 'qxe!͜u$(szR,@cg?ҕ\ӑʟaVg 1 '_^< @<?Z0{{yZqյa&YEFs|\w1R0%8$:Um2{2]G˿N&N0=G#8} ܲg#lzcҬ =y=irqqfb0=H{*p19l.s\v?k^$~MFzgzvWc9=R#<~nužp 0@KӐw dm cAPN):p3:rœjz#'{Q͘#d1wN 0RF? L~рr8^<#׃s{G/a9ʩۭX䃿F~'8G9 9t%Q'zdg9DQv!,c̤@dg]b@aN9|_`%\tdi{\}zw'&N|?_oƜy?6G0 8##Oå8㟽$`w鮾yr2xԞiH:vs'=@=8SdqT8`zzvt=sPrGR[O ~dm۸pOVJe!8uvx^h1UFCTIʜ~T`$gwCԜW^Ժ"LF 9;8A,cdg3SɬƢyQIj@ck|,n \2F9nǶ0:]tn̨Ц1bXg9A+kuFݎN;QZzW5R(̧%๝F Bprl. P[ ԌtP b =8rzzS2GrI˜'✏t#ś+~`yd#y@$ӭ)?]}@9v=H}SÓG98;NK+0~PA=qOvp2>(\"®A_p9Tt2s]5ܧS~AOCm\.(Eꥆ:6r2so[Z6!b;#\ReFFT5: o@PM8Bp8ZZAMhg1Ak"Ы`9*8ӯJQGOg~tNTpWs׭FAFq 8P àg޽ zg9OcK' u׮9=p8>ڑ#1:<+F3Qۏ|31GRyzr`)9LA9` N@:/<@G:g\^O<@9wg$FA88 '``Ia;g 1zq}}a|BASpTz1lYZA`:H#8ӭ.=x N2Aޘ`)߆΁L:p3(= 9q(H+# ^1 ^#㑂:  j9 sŽ:X=`P1xe!JǶǏLOĶy$6~v r6nN:`qN]NU r2Af`ϊ+o$uC̈.2@A5fZ|0PYx8Xw7_q,໲DmDpOrSKduܮr'<ڻk_m qOa7"aAuO^>FoncFYIM"7p{r:/>v0ѷ$uqzc=yǵYʪG7a<ղ*"A"2WKo0BǨ.NpG'$`8EJdՈA8[* Iܤqh )Ӂ FYօE@Rtq ?xNpB G9Q.wcK  j+Y[$ǿsdI$H<玔w7eX02X_ZH$HAf\1bBw=v % U~rB@0@1V>1uRH< ˠ"%*sxgrqR)BI'4AԤlT(7q tTiy`$\AqyAFK1`5+N;nC9 tǵ]7  1AI2`Fo9׽12bK~S *3#O Rcu![vG;098sđʎ2s#鈲O8^}ϯ`F ݒܞg=4KEeWV8 9랜Ow# xoLwҗPYc䟟<>dy-S `U\vԱ-΀qij&C?{g$H׆'2y`0![@9]DJ#3; EEX?zSӊ{E`pp,y*7NyVT I=Oֹw3#մ+* Oؚi3AgP“}.XlE*PdaBw }\m܆q9<J8scLT@I3$tRe?6N{rA\9Pƌǡ1:u$y1޸k;(nsS93M=I=ExXs;Xb'ǩ^~P pquQ=Пp9H#a oJwPx<8MkLwB^3 U<ʒZw'ۨV|08lF01x-65]Q6q`<J$>e8=H5*N,D̙?۞*>N>\q㎠5XsN:j"}299$V~#*`\sZ Gn:~ZL ϧ׿܇Mk}9'WEY#ͮ5#AlR58L z~|W< [ܹsӯ_pi38=[H!2.>o pH8rWm$Izsנ=f3>ChG@@AO.kϫA n Wޘ?L9lO&izێqQǞ=yޥ^@drF?*s$%8n c8^GlQuzv9憅$܀2Ozx O=t=EwD0RH.8c{c#~P3OsNr8=>tuK@:g8?ONڀ'O?1 dcc 2I1Ӡ_~1q߽!sb>o~ߎBұh0w< j=cgD}9`?}i\קN{T2gu rA>ޙ2x7FH>׊B}<=zZ(gLwqA߀ dp:|J3t̠q^_P%uF #Wԯ+n?UsV3s~2OV08=G O_09c'7dCSߊnj\sn_Zl1T3J=tshS}1KϦ ]o;펠>F; 3ϵC)Mz H {{f s~"`c|繪T?_zi3ef>vÎ]0A>\d5ؙ!8̤Qv3py=sT+28` _oֳF0N~*zR:9`OpNaʹx^~#f{W0Ϩ@9y"&'8Iz-YW䓜-<嚀rrq㿵xcH 8݇] dlvޠl7pq0<ޗw^Ԟ:VSk't2?JilJ1ssNxK2ϯAzC^Hǎބ)q`֥aqZrF@@$$H`g_Ƥyq0{13ߐq[Ppx'=?Q]x}zPF9c8c<5 68t'az-mL;?:1A<~^ʽ(l>d092;(_N#[G0d gdp~>i>{#3&ӆ=~c;s=&l +9G7JxI8=^*N=3{Szz{sgI?($?\r( ~eG=;S7ؔ9{dϭ.@=9^2L1;dpzwg8c}Goz |6T` A>מ1d=80ǰ׵8{N:=;8#Ld|o~'9px}0{>pG):t-O|{i:c#=x9A78䒪2A 9}ZK0H]ـX{ i\JƄZt'%lPBZY',jy+;\Rx-#UF I"aFIVݕ85Q[5k%6ѽƕ㟈Ť+cFpvW`%(IO=VRϒOʭ"6l7PfGWNZ&_3NS_&}{I)[m@ 2 x!Rp@l79ɮ iĺ7̉FGBTy<zRM򷦟pI4y]UtyNJZh5+xfV\[I$A lEXDZ勝F5RD]A~7$d[ֿՌW8K?T5ʩ}J>shF{s_=j'$,ek|sU͒E[+OR"e~VOcw{{jZuM5oD_mODB=+>m*]Z `˭ 9v9uQ@5}}'.Q-zuw|eK+`ď|j |zdu}嗈NH:AE;V}+iwJYNS9)i\`d,X/''ol)02cX[ñ>*;!E.n|Ɗӂy0{d2pO5'r2' o@7urp:Rs4I!u2IBA7`{KS:K2Å As3TOmaq}P+\9s.qlGna|W,}+Xѕ4Q0l*HbzDN:_56E);6UOp~e#> >T^b^rʬd3j1ZSo&}=hn|#5kXjFmX%ŵW#5 ho5̕r%  9B52۳>}GW筏>*ZZinwDAlAiI[g;8KiHʸ3]R =[V6z/ỿqyi+9aWxc\MkyCEE^Z ;J"H 5lZW_ͣ?[lŬj#_$F$xu*9vV+{22aVRxkn ['Y_K5wdْVQZ/ut|mi\_NMٸnH=@~#O۴}F{ng[c*ARlOKMZO|8u򵇲25H>0hV54 2V,66TJgmdlǦAc]ѭ 9*uM#+bi4kqBd\K,NTp !Tz9 ;;a7Vez9ny\t#W2:#n>b=2=Fs)G__) {Nx8 rR( c 8zP/%qqڝq '${7ԩ9?7SC>n> lprT\DcқxO=3\v8<˟SӨhq368 ߜ{Zo'OS{GQ봎tN>9 ߠA ={!@ 63׌u'vapN@s<x Τ$Ip3l';y;A&OzB<zq8q41߃NNiurC=ic<瓞?X1zR>q9F3[sҘ 8q'< cmR-p@+H$ޚ#q˰lCr@m`.9?#ϦGxOROq" 628w 8㎣#u#' x no=9#=ZE!1;=9nONp1tE!v zIR8峸z }j@JW$qǠ] Ãn;ޥ$HXZl$ty%87{o^X@r03yr?Ҽɽ d8#\Gqȫpr2AnsOW<%A9gK_VTIڵ&h䝭=x <?5d+RppFq)0ی@NO Ď)2Y * N񌜑F3hLLsxjUXgmϮjcgNC '^q|~q_?ҟG 2G'緽 'q'.wu t&9鞤`c x\4]>PA9<`҄ԑc|}i( qTS)o9Azw*gh/o}”wuHIy<з=Gҫo"t8{}5.0~8ˌO_ %9#?ʰ`qz 3~DNHrO=jpn9>-A+G|چCTyuc֨s(\N8zE<6e.#aX *GqZ 7#݀8rךHrct۹LWC\ɸ0#Q1r@òX9QXzv9Y1E!T`[sI#Yp.xuT7wmNI^סW]ّ\ħ"pr|Ӝ*$EU|ř*|8Wo*ӡdcD;`8̉lުiXB"($0a*'${WYrͮT";,[T*U$v>]mN@f鷎`fzΪRTs,rrlVU,BA[r?$pGp\(7Tz7*~n9#K"G+qHFvg-N0e~s=@xN+-Gb]d+bwӎjCcKQm?1{blPH% oiI1ŎOA知Rā ׌5,}F㜰 p3fѻ.a,† -d8b4aBcut݂{ҳnnx;CFz52D_0Fz7v-Oڸ${>6ˋ0<@w8|Z )EuNI|h$ vҎՓ!u K>w-F Iԝ20?: <$~'ԌALsLvF^gi?n~ n}{]Oo_t@|: 2F3'L}F#d1y|dإcpz}x«.iϦO ONG.<򓴜@֒/qӞ<~4ݾS3ӥ0N =i=rNF~\mpz# !j;}';# #ۨSӧ~Cvq{ w`N}E:NNpz)'8/#qqל*^3q\H9[;;q = 3Tx\3N裿A@'zA#w.#mIsИ ߁=wrNᷨ g9gu?Q{$$[Fpq4H@?N1:rO q) nJtpOQl GVwӒ;q^@?I|ā9'8`PP9sduxIzrû#PE'~lyt<-ր9`@ 8)/ꤎza@ ˂qv@' U\L|>sQ=Ϙ>&v߼%6NO_ ke%Wu 0O}\w٣f}ǘ*BpFQl?¦GB&@ 71 c^Vri%\T8RO28#  [R SGrEHO3oFI'.*u2ا?2ȍarNyAv4Ea$;&mQB8,r93ֵl0lr#Dr2nX2b\XB|6~bk0${qڱOP3e O_sZr.Fw.Gi_0+mV1AmGg]N*[ܑ(,p0xvSJ)B4hbd1 2k9 93o9>&OY:( rֳ͟(Tg d0!9=yCF 9JBpBn!FqsJ"6h˻i+`*˻$_6K39SoA-Hr< ;瞄GXMI9'ZV*&>Xim#vr8dg SCd67 ۻw~4JDbj#<%1!||ɟz❺_͏Ie5CwH2/9T,U9px'oLsq/؝'ʻH$XzqO ǧ%<7Q+(IIiCۦc\ٌgh)p98 Z!xYI.G#Ro33}l^1\4MlxBX `ϽU[ bӝ9 p ;EwsFc$yn/\V) 3^ya 7+3y>׷Z^#7^ n}jP@ gq$>'g@|ps?H: cheE}laz`sɭ(bi'pᶜ+C2)+ vAIwdaGִn$nmy:+ D47-t>x8; W]gjDQ˾LwۓڹϡGѶ! <N3:Z`9dqy:}s'y8F9I.;Ўգ'q^rٛQg9lּ___P}^)NYc6dsN@09?zy2{`N0@ǞzPI%8wL^ ' VО#s\քI؅'F'glBqЌaZ4Uqy.3y;_U31GԀ$#9S#ր!(H Hr$g ߯@d$9=7N@L R3' ^r1v"~ {.0IZuS鎣'Gim8{MXFzGaߌcxכX]^?;sz\r6"/<#9CN#IN%$B(>lN*yy'== \w&Hns8R1H99眏s <ۭwLx^8ǹ'?ʤi <`s\~b`sOaxgЎ};{9>ybӏ&1ר8/l=sy?18=Kf}*s#8z &)(B)pUn<U3wב=GuWOtt| cװZַ~'szBO^9[idd J-~gl GBsVBb88zp? w|灌8<$g\`϶5 =OCRev9`r9zAF;.9<_a4m4x1^Hzuj/u}Ij Ex,1q֧ O]F.D בs#Z' Q}A:6 p 2:#Lѓ i8+?^ڐg\) cc&[ pN#G\SDq7>}͓8\`9u֨P~lyq{g5lO$真0}`d0Q1'<}[cMfۄyH_rr硭t*< d ete$0G#G֮썻x6ϩUԸ kA]jP@@ q-l;9:p8L x't'yMqv;=pӓ409aqsF=3c <<ǭ4z'>1<|t xNO097#Q[7;: u &H9Fxr:g'%O9{;P._H''FcGojRإq19rAݑ{ϥy&0sԟ_N9Q`>T`qZ">9uj3GmA<1i zx#Pd|͕QH^q[$Y?( Ldw՟zhIS@qY#gs=:\E #;{tk"A8R$7J]MLYl3NwPa6;AHd᯳=l+×q޻p=xXМɯŭϥ½b0͌@|ӶO^Js؋Ѕ9Ϸ8c3T;8;;R}V=?`inzsC+`ӹ}:8$}Xƃ0I<9u,?#8פ9T@<E4 ܞx9b$r8^=8Sǟ07t0s=븺`<1[P\r3ֻp=?*]ܞjG=;(#~X#OF9U#ROnzz0YksL`u0:2S<1dG\~?G'ӿZq8ӌ{zRcOL[2j'=9GQ_֟qux ~HsAvIIoÊ0 wN8gK#3iGq98B9>@q#>$oMܩFA^y㒼x#M .:I^It-v L9qmm8,Nzq\.wڕͮi~[im1n?t=tQ,ӯRh3GqO{xVHѥidkVbm>pǹ~;×5}'3ry R6rz]Y4mZ$enalCmw(/y>&i`~q,%Wq9kXʒ9'pw&5DmRIH&Ck"1zu[Z)`FCeđ2ʟPT9%vЪt嫱xZE(..GIؔ~x~)o[+*J\5b-GGQX%꧇mjwwNJG.&C̕ %iW$+ܾ|+QJӬXM.K^崊#q#MYs|jpMݺV_i扠iukl5$62aa+$+iGlNFL p})S*T]?m_-L:څN.PIr4iAx0,,W -ÝoNrQݻOjڱ$F}>291<kQ  a;³ )1^%?OyzNNݴ"ˈ*H@S ē 9T ݜ|o0\B9=:1}ij˖1l-'kex p8gseZmjKӔlOs?᷍J'Fs{h͌\fox_Ö" B.oEnPQ鎕>TwF{w̡]ӔanY=z{y-Rd7C*pdB08#Us<ǿ^c\58.p@?1@$1ىۊ{ϯ:3Rt>8ApOL~u':@?2zq9t*᳆=8@x'o v=)8 dP1wg9U`e~$ 0GN84n)ӑL `s@ƞP2xלAlm g8*I<=I~Vat<YqВy鞔tx 1}l4џW$o!cj@?{sx}qH6]v\P1`(<Xvd(#$^Ò{Zo_C$8cqy{{dgƂ2rOӐps9 7r`zS!r#99c=rܑ9.:dz༁pA  {]Dzx=8\|Ǟ9 ϯns@g1`zg= #=q}`0p>1ؒDZN} Hّx$)qǾ=06S6GSq嗞y rOZ]>>rqM;?j@O=ӎ)`ױ`:R `zNpu? fPz u;#=q)F9\LvB~`9'w<:񃐸' :c$cNÒG8#94~z7@#~w3n1q1N3NNnc(A_҇ 7ßq>P:`nOC ͸ʼnB_4t#8%ߩs#9@#T 7Q;#oc?_ʚ$iלO]cHC㌐YN8<1O7m' 0#/cJ['#wqxb'ԌÁ3!COr_83O(:=3x韽u 98RcHC_?{qϡaMpYK`ygth[ @A'S⃑ !G^N$2jF0w;= ^p?P1p>ړP#p833:qGcI$&Rϩ8$w($ Nz>A{qW#ӡ x>^KsA JmyxnKrF=8o^io+K l}H+N{=jۺĠ8 AQ?UvSzs<2wlrNz׮[d1820RJ$N0<:"Pp3{*A0DJ|s'i{9LӥS'[',S$gt/%=@9N:ҚObNJts=pz% 3g3H2' s4Kz}#JgouCԕߏ֞L??ҭlOQA8>7I$cx^(Bb䓀yH4{ySZ0= (w$o9@V@G͏N~?1}s Lz88㞿;TH؞KL,!=Ӟs4O^p8!z3hF`~QǩJk`9ECBXd?Za|6`y'^hDEezlQBF W{B~)n#Ń7 0sL`W_yw)4F96g>bh$ߞ18U=ĎVlM1Pav+V`:C K؍PB[8Ps &+ː OKI>SRr< Ɇ$ooՠ9˓ʑo=c9pwlLA 0gGz`8bx^9T#)+Jo[jy pW8{=@3%$@=f&R7+ C/7$@`p#g2s=έW FN>2z晃1n g{R1v=Ppv#8?&qp8<$繠gyPv3Jp' q@܁8ʮĎT18^8LiRAlgL+3R6x'G:9xp8g׸[r0ۈ dayv޹vJ猟!p~`~{֘@'<`~9֓ x9d `}^)'\p.G|㓸13GF=99RB}?J@Aݸ#=rxT @ @8?wt4?C*r0{` G<@P9Wz1L qϢ?4 dʀ8p3ۏOΐHc`S}x$8\9W=_^;@7<`rOϿ҅$x2yTË~U zaJL#=}.\~?6p ?b*G @gߥ?=9*O?0bzt<9j@FVH1O\;$ 007g0NFpݲpH'{g҅Iqw~('wqqq@ HLչ1TGBJdw :=h`drC`ӌ֕x=JO?B!A=Jrqz}޸: Cs 3׸~1n9@f F L0sǶ=9193q$|zP'#br=U{c?P1ߧLe#(P2DH` ]d= 39R0Kx'i(+V5ŽT|>oUhTS{Eh}Y\mfbX9-GRkkKkb7h;€c'@Aۡz$X8q;P0+ݻh' |E$H?.I8#l3{U{9po=0I-=юF;rsץ4XPV@%9B9ZHRFaB@qv_?0/ 1c K(Uu3,ބu^3q /8sY`t}I# ̾+thm @wWzOO/o특:/V[韔 =؎O^suNGY=qG=?L{4t_rzqI<0㿶N=j"Ows{~=92)<{zH#uQ9^2Wes3QjHFI\ÝjjCw91SRz=xԧPYץZK2q}ԞwHm{N8DR`#G>='{^٩q.5L٭:GPxjNO=2G\ՠuRs76 vLxA]Zsؑx\ʞFqwVIaA'玄rE dqrG>#҄3$_LU=}1L^h q?Q; bsd|t>֟R[.*p'5GT w{#gj~;B1۾;g5H*W;`O_) rIwpF=} DrMK{0xH@\Ɍan9BO|VRqd%};ӷ^où=HR qY&c:zGnsĤa؟ L''NC_ZQ$yc[]Nܞ½W&vmKUeUq#dS&If 9,ǖ֢_uޜRmmPYq7pf^@_ܒ~B39WBXcsA΍z4֪jIz-P]SEw "V `ڿ7"hXj!DHdH]fm|\uܱT˕C*aj-d͵o };Xk$;K@A q\dlapyFO ҼT9e4'xKvW6 2${|vOShsVo_y `HcgTq}s[=HI9+J.&]s :Ϸ~r+V1'zI^?:ਵ:yFO=°}nj|x g#NӑY":=@^*238 \,QCY9ʐ0Jq{P><`(Fz}i;dsoe$hͿN{zbN>רkB' ~1ޛ8$֥ obqoCsH'Px#f;28#g>=x={Lֺ-QGQ^v =t^-z6~Qzj!=~Q7͌9`WBG;dNvT {לzӀ=Q' jɸp7uI=xj3Ϩ9#펀K\*t*w~ҹ{ N8s Iךi&qkx+ ێ{2zq`xhXm YrA~`u#$d[:Mnqzz)Gl=é[A,0pP# zs\`)9 21~4\r{8lTgc~^s_\Py\8:~}=a{dcq@!*%3&PvAXV1 H>:GzgfYW?18%OǮ?ZƘxs׃}[,3OηaG_5ۇy\ߧ:uo>cZ"]`N'`H#?..s҄Ky a8N`9LC n38xî~;sA;u,F0WqR9rI c9};ЀiA'oỎ: Ӵ;G@ s&J`r`j'梮G6eN./˜71ܮ,$cOּY<{ 乚m9qaլh&9d0olשBJ򳾩umZ]]>7~{GZ'[zƑ犡yjw,lė*#+"$]-\"W՘ڍf//ij TD6~^`b~"ǫSV;imRGI|/;]gdMk_T{2[:}HW~pT Np+tm_O$[+G`yI2:a<)CAhR[9C÷dY?)Oq5}xmd?+m%C)8뎣9zPkdcNJwLĂ7l`Wkxov6WQ#k=T{;l2k$i?3ߵKm4"o7QXCN[qx=GjEDrX,X@WO|M4G/a]w `s?R<#߽A$`)!`n _IN~M}ɷǓֹ^uJ9*Jd;ʏ=qQ{E/Gsa7eeH҂ zVw<}gQ]2ym݆:KtXʩTF,zq[P{76*YD2>?Ot/*VmKˉ.,]6o gv0sx-ЁǠW%I#O/I#' cԝpzwu;y"az AL!v?ON:<}g$pWx2z- v;Tcr9b?qyrA8c d#'>='~@ 3Op3 }G9H:c֝9)ʟ`zP> pAO\qQO]nI3sҁ Hs׸䏔39wG{F{M&,98恢=܍Sq&F8㜀%@}N}YB0>`X <`ӽF[ [ G~t$!?!g=?J~@8 sL1O`1u%zǹqXy=8>)q ?#ޛbs;⁎Xӿn“ 8P202:8+HP0={OrT@@T+ Б=S ʜqjL86O`O_^!aNx}O`(98p9'צzr)9'i%0x<49`Í=z)8$Og2;`_r0s ))q$3#Ґ!İ g#=)9 䑌c>qIۿ>RB8LArFq9L$9ϵF|ܟG9=zTlwv$cڋܜH<q=Hrq=֐ܝGUUsL< dt&5ԉ8zvy{?7 zΐH8RF;ǓIoR6}@늛1LPT0sF3PƆt 91~dw{qRW<`qңgӏ g vzcY+es=>ᗀ#NJz˚b8C׾AGSi]d_Nld`N06O^Ezm#J)<6y8nz#e:dd1n8g>5ܔ rI+) |K[?(}J0[wg#ڤrq'8}h&Kxq8zn|>Kr1<8cAz/b]oGQQ s'4'sJryPFqSOrA8ݜ =C=y;F:-P8=r:?PqqE(%0FqiUu p q(/BXy>1ҁ y CnT; Oª?/a\$קژsy$Q$<};J:o폥(<OiA=;:cくjo^=NE5oC99-?^}1FCs}i= E)'ǯf8l) ؝eT't92{UeE8SP~Rϟl?.\f#0oN6@Jzj6 3uF;k:RIerTxvlҡW%onRA;B="p-  0:CT[+ 㿹nPrnp<bӎ@8<nHګ$I+Wq=U,9W?&6 n<`wNcmĆ@JGsRJ_pU6:}ĕES'>2yxѰߊmiz#>p9 { $q;բ*rO\t<ԽiKp d:dS (m;'T%t,e r8[B 6 AdLHӋ<9 mG'89tVT Gn {: `2ÂH=!ϧ\wuЮ# b?o^9 A =yម9) XsԎҷ&@c$3$R)n#=1׎*yPsF{ IZRsdyFyty*:zRFFl 9"㑂OL~QaONppH1GojBN00rO$V  Ipz`0 3w"b'nusA'98 d3N{sܚy6\gC ۸8G? Q:yR7|c=9RKzt)6{9zE'<@; 23DzzLBu䃐AFp0::zdȦ u08Q7}y?89==/AwnO'$z2Es2 9)ӎzz:Iq:w$du'P p@B $t9֌d``g#{2 nznr3n1.lб3u#'P;4r |?cnrv:<t£l6y#sH}GF1s#QF;u+qpx8zrqهsP{pA ր0n8r) ǂGN9#ބy=UFI9PI?s~t)n|E2cٻ,Dq>E}Ρsg9܊NJY|8TjC9-0l0zp`8`>{*ܤ7;UĤ|F bāqE\E= <͛-w9o'#I_#WKsp)n2aܹ3em˕Ic 8qmOceNWؤ'Qlc€#KՔcNI c=ҝ 2۾\ 0?p;WEܙ;4sK6A 3=S"Hx*AI; J7y6)bw|=x׭em^P ɓ!Nx8S&0Fy3@8dgz`g40:~)$~EP{cN3MivW?h&=3X}H,ܰluzj4 c;y#=N{ү=9ʞvFx>nbm 'pܽ2 q q'À`nGNFwI|yQ6q؎䜜q9:d9<7Z @8?6wNTl>7ΛܤdO1҂ofq7(1rrI(ܸ=Ւ2DUIثr6|=5ЦD1Pe` CR6œ.@'?=kd`+r9+%{ `<tl7*0z~gXR6qcwvemA @=Jq׽}q`#3 vhãl]nܟҚ;;`x2k3pxgRAdqۭB82:㧹I8go8o]LD,g3e#KO~ݽGsX&zcϯL>1:z]3OhN|7a}Fq՘8cYYm-#νGOz`p37sj$' q p1w~?a1'9cAcZӏ';2Arx ix_݃ z{jbc<*xN)ʝqGBp?[ؑ@>O{h-?)`zԃ^ߡ瓒ORqq?Oڶ[16$#<sFxd?2}t|:ds{{p1sKOn::B`zs3v\ >לP$<TL8#tѺc ~H=I* `mQ#;p0?L(Nu8A9hF@O }J&#rr8T5w#G|)Q;'8Y 3ծيq08k#bPK7Ooҽ F[8cm$LOUxA܇q"6#<U,げ63kr[A;~}qĴ2Nx~&GԴѣ1*r^DډWIvJ<-9Ȕ$+1" 38;twYxb!2j ⫻JJ6$uW|ׯEvl %p#c m1K%ܩeJ3XQQ{upUKG&.!~U9=3Gz+Yvՙ nv$XRJ6'kN>j1O"vfaGr}:b䎇%"3R#pq3Vlu *- l lZ>gyhϼO1Ju#bi%s}5ṳM4Mvo/l4̑GʹBO86VXgbqװLz%ݵ~'-j,+0XceO~;t3*J3\E#:B//.a:W~2X x ?&τ[ݧq Kk}ȱy#5Jog<'*~?'RJ]-ڌn]7:(mvu)ֽB_3 [ 0#'Cu/yS~=M1FCn*2o'Q]| HF~kDӇ>{[qy#8W ]Ψ+Ay|դǑzkSpBx##ziОǜO>)%~y?nBAמHps8 mry?JN,yfrXA?f" O֔{qbHL% G^<Lg8'aq\QFx94'N>1޺(Qؐ($clT:ȧ> E{tvGUٲM8Nyn>çn;TAzVpO]5ґ9> <Jf:r@_~HCz2٨ʐlcH 2ۂpN+CxHq?.0\]U$pu9QW H{|A#hӸr3ۚЃho<OLCڪHWm 0r`7d񜌃Zꭊ|p;n::.zݓ:sӯ\ 9<45cg`zUbsOO_J餵1x3AOˎ}܌NFH8WH/˻9 z{犬x(rI<~23]HKwO$):`t~O-:;:zzUͲL:GlҲ$N:FKqҞk t9V<1\uORŽ8<9n:׏=,2d“ݎFI?*bXo@>ׯh{5Z*xzg<{Td88J$v"OadcӜ5]dIxt8z `OcD88'8g1Anpxr=P092Gҗǒ1Ir:`;[1<{:z~T9Ԏ?=7Cӎr|NGDq\װX+4/$&v̥05I8,WPZyE>iSpYd);%]8]=mph2 6t+.RԗTap@v-i<ʫoa3sTy{7fֽW\4+ɕAvO-\KePgĎ>InI99J MQaImC9gS- by|$#n(0 (=yZc_A3gbH! h+l4h3\FAǶTp ҔQ2HYyB{`ɂF"X6 G1>aQ X7p01Y9WWkJv^T>NVeϯU=ѐ+pßPMKJ[C\*g$#b p`dn >rW NW2)cj_ny`C<ޘ\ny 21]3Fjzռ}z7rz׶|.<)Q6 2ǡ@lARnb*S狏O[3Ӽ?6?&ӥ)s]gKvv3E`ڸ䀙f+`2ێ=lڽ>QRpեXny#gU@OYIϙ `.3ЌkaP41 d 3tC]mx@YX:o;7Ҵ"K=Ck$R4dh uF9{Wrl1Cr-.HR69 撼jz+V-%iim|>~(oW76254RAZ1dI'M +`m<^}s}IE_;])rW{|mNI;;8?9EFw26LqJ:s' QOFg 2T9u۰ nE[!VB 8aBnCڥ= KRwU<`2;3d-FY!bp ~Ruؑ92vG u$'*7' %%fUtwOM]J>C'C{\~!i1jCH$T|Ƙ4xEeU95+omvSV[]|=LnfK)e)k{.L|9_OsZBӵvEKVg\N 'beιݯ"zm`crxiz؎oǏq$?^=8jQ s9N;бQw/4s1ӯQ89.c?.2\g9<N[0rF}88 9nzۜP! ?7ˑ!GQztn8$dcLc p8A{E=;>lg A}>æHぞp@8c=#s.v ?w09 3(`S s[7Ddm^JỎs8ߚ1GAю8ǿnOL+Au'=l1ҁ)`8@vc#@ -v3x9;u-{~/NN6-0?ÜB8=#{7L:`#xAsǏJ!!' ׮jPG>8^2?*hob!9)j\9T~8u搄,FwÂrI^gh.sAng7-{vOlʍ}8\eFy9gZrH|Ì(^\ lU[*v8@F:uG#^;dD|ێSh tGzdONoLns})'^ O}Fq`@ PrNG8RNI8cP/lFO38(3G2pAlO=v8 Ht'H  HW88FzzoZϮx*y#s'8$zN x9{s@%@Rpz`Aךhn9;@Cgǡ8A'䎜tsJ`.SϿOqnܱ/Cc! 'oH}NIN6<} nq#c$gAϿ4N ]uNqۓBz 8~'98r#ӎD=y<;;gn'QåPl0ys@;N~*V''xn_~ؠ 78#8ԏʕq0@׿Ҁ^(rG+W OPqHlTp۰n)0X8##NH:>{aѻ( p!' `zsH'#:3Ґ8Q9ɩe  y[> eH݁A9⍟ŗ$u*PO$>7y^:di!F~ROPͷ?8ǯ>7\r1 <̇wp:v2nlFn@rLUz9 kIG}:1ǿu!8è=JjU=z펵B{zn'<8qUͷ޿pCrXښ=38,GoW=Y>x;ҁcX==Bc;sRs0F8$Mu0 ;OHt>%0#n@x$u _J ;psM s>U1>>9}*e:=MR$89z1Zr:s>PG|S%J9sgn0yn }yzv:bOo_¬Oppl zuAW ?Rؖ)A OB:s4 d?4p=WR$p鎹9`׏lOJkt };?q2=$>S鞙_d8V )qxݿi0 rSxr;cOƀBd'8pT̑Oi)9?|Yǚz ǐ::woj o[`6rd!0{`sbLp82pZFqQ: _CiݳRܮ@qQct-sy */ *7;1zd[mP@%cЎ}Vepr$&? jf?Q0C 0VA 8 s@7uQTa/o,=;ש81wܰJ1zďzH `o,eCxܼ{+sWxp'^rqq]#BPFو1qyPX|^v){:pH 'rgrcG O\.6V vRxl篥BKx-_N3M>rT'9/ojʸBr['!}p>eEN`W<Ss[*`1ߎ3TJN =?Zȑˍ̤qhg懩SS |z=7PqjHgP0# ?&wT̸ycԎjAK0lyNy\V  n~=p@ᔐ@;9a<MЍpGF@y%V~^3ŹA1[z"װ.m(1׌1?%x8=@'|G>Y{Pm}ιrO=q㊶J~Mܝe64h[` M!q* *xt«F#ќv}zTlU ˑGz跺g􆖥s+cnяnXeםW:V-I?_(!yQڲ=N <7 H?AԿ([Enh 1ۆɓ cM>d;~ A#|zr>> H910'=0 6uc@OAsHcvXr:=q֛ q0Wot oQA8M8+ĂFHZOqf9 +cڂ?=xґHGF18) o ۂwnFץ+%pqtϫ{curGXw cr0=8$M;  V q soK8q( GCF35~`}3OVzVp:sr3ߦzqR ㌓:aQp #<xv=`:'6ײIN?:R {P = u4ߛZ~O#àOqqOwrxg~LcGjKp$}'SnJzA @s t=~Qj:|w͞x}O`sE/# 9}O$ܓiFp39O1Cx?/?N9ryH^yӷ&GSR~_$|X0p`pā*iNv d}*"pq ֤ <; 1_" 9<קzfm/;(f0T'9$/-YXsp[ u9^Z#(T.FCeHPvܼ>դ F$ʾRAfh ^Ͼq]NF1u9Óze 8XX.q}OV9ÆFߘrsҞ5B/Rx7#<^Ax rW $pzBZ#Q,6{\`VvC3F2I==3yg`DrFF0y\֡)umɱ$|NAk|E>F4glM 0%Md g0>]p:=+G?nTjqRH/8?R;Є)b#i9'@=6`(862ѩPH`Æeb?vEfCNY07n-u0ѷb0mc@NA*ʨ@K 7x w ۆ;=*>pw?SlS`x@s3|9);pHSrz0w 8d'<U0rpH8# zZ$F `rq''=0sr:q:nO!q ~zϥkہ&2 =q3ՐWp{s[ 6*҅?&삁p7\tJ,f޷9 S)#))=pNr6@'Gj_171׎RvAFNIy1Zm䜢gUG](͛傅.\)A#Hjqny''[,T7˽ upI$$ сcbw p\ĞMiu49ڦUA\)eQ3ϥmZ>q[iAu^$j:88¶t$b>WjJa߀Gq׊̇oWC`rA=8tGh;8< :sJfL9#y g>3xVF9{t=z`sc=u @v?;nqg8N)Xw9î3sO$2hw-Np|Hޘj[(8-vϠrB,%;Gzd33b:c!ך哻%̐E@sӨ :o*9H$;uG?J!p0~^:d~I.oFzY89׶*rxjJR3&98 GB8ϭcOk22czrEsFsw @!oL~'E]w|;O9 B@n}1s[1H1@5P^Ghj,JiĂ8^dxA3)3$>^FAa=s^%Ŀyc8 I8q*30'-F{޵Ԏ)x= >VnqNܤm)3~y2{3r'Oȭ8xݐG\fji>~q8o،89t/ l ܏SXx#<{SK3hW' NHoԁ_y9UK_n0ss ޜp;;P!8ORT6rOc%T_c:r{T:v:4!O1Gq{u#1N[ nh*c##> SG`q7Co y=vx*8y'؊H4xIӏ__Z`= 8ڳj̫t?wW(rt^n:\ |A ?M#8ny+0tsێr Lǯ_5Cc[c@O}Spq9lwj<zwiO<`q9 )|с$cϽNÂ=>'#ӌ=#И=0OS~)sE/ 5Bld`Cwϐ89R`g'+Luv<LsR;r'9@~8~}=8$cvjQ>=lg:X ֹ$nlۿ瓏֘@` w<O󚆋L@X0sܰmr2=1}=f#@|/VmmgG<3VUYFҳ)`* 9\6ϞudͰ"lsu~8 t?_[ 5KSԻh*ኔݐ>tǷ=+m]$vJVVmO ~?y}퓰#U$Wq7/8=- ?X(A;۱f rYr\ȠiF>;I$IaqPrL֕lG&Q-(Y$- X #iG*TV]]\^[mԒYEI3;G#'!o:(sǴ~_h9]E_Iz&kdW4[9HX>_R[BU\6'$1=jG6uy>:ͣ1DRf$B<=Mv'(A.y~-, 'qӎcߎg%R9$cUex<?c0Mܛ@;Iw7u{J|aA?(~x-%cO5 [w6?#fhPmS8cB-9p;UQR{,#:Bri{oK~ ,VT#lVt$vQw`r@=9.fiRKG$䕒?8";'C,sX^I_=0r1^rQ#O00<0W9^iiIl*T)۲Z;Er$`' 'LTܐ# ې 3g<|X^MENzy=D֑L>[gd;pztIWX% "6Òc85֏.vo>C`)OSZʹw`cۭyȖ <:nd c#(~}+lV8=L+\8=ALHkqo`TH#=#c<O_R"#vG |F#Y$z۔|}GޚAJG>u9ʸqG}Jon0$ă@}q۽FA9?"ۜo#8es+ۀ^f |pv\]?1F,HڮwPh'ЌJጌ~l0;p*Е>d `9t=d[Yw;q! A[gqA ;0$Zn'^zӞ})k3;~3Rө0;w5%_S~Jrxd z~I݌#A`g3yӯlutT'80o|Ҁ| <2ǂrN;N{o,1֕2{@@2sJ?qO^so0sqPQ9ל'{dlA۸ $t`=sXH rG>Փ.#ǰ8')<'ϽGRg}R8֛~x`({{`x=GғI⧸:{3cҔ=qǵB^:*dl1ӽ5b㎸<:k~lR#>n;ދNϥj!2#q:g$?&69߭0-GH5gb)>=Ep.UI຺* Jr33B8WF_813wGNH FT$WLHr8x+5]GUI߫@Hss WH--]n8{fa] 3o߽aw t2  ɠщu(G+;C,@{# \dڇ~CMnY&YH-d87mbÖ́fu+վ2\mvo-帳ү[[ɔ$ncڢRaTa+ofQŽGCkiir|D?w;TE7Y"RJybE9vVIyߩ;[{//I$Q2n!cn&9W=kԒyd[H,QJq2K @َWCjqim4ׄԩKJHbcE嬬4BLY68ÅWU3ÊGD}dG4ۑCb WZی,O#fRbgVp‰j+nu5ZfH7iMñPCQzW^䬑xсJHeGv"Nwlv39I$2h CT]0prOq\ww;OXcFŲ {sá1)yIe̍*Nj˙$JFeg m*:Oil6+Fm$3ӂ*kQ8n9SXS0XL6i$dhvn=;B9_Ƞ*z ӦjH>S&cEnr21 ~4ܹbAnTB7(Q$`r;dR6X>`{igoyzD?ٱCrҤbH3Jwn2BibQ{F9hEߵN':sWOҢYFx0X=Hĵr][% =L6wQ0;D6[}YoCytԵ%MNk h !nHfnH5|:k3BS~Ot}#C|Y:-YXv:E/mA1)8WQW+K[ m}B۲XnL|C`ݷ^ m$lvDEVT :7g49lrڸee#@q$'q;d-߅r `O& OoP6AU\Ӯk>VW-`fѳ#/0jPVcA(a!ڠ~5Υ_.1$-{zԷ)sFçA#4 =Q?9<9݌T^sJ B8+-zW$ny@'B @#Gnwo8=p0\z( t v}(q[q@;y=v1L< Q@H r'=Ҟ"$n9M1=8'٦bPE~4A#w,wg#3coS2is\@]kuǭ.8Or8$~^((\b8?QLp18&yqtRsHrFq ژ6 1r*[%>A9zzT 9=fGҞ27a69z恉(S>1Qn=QO~3Bp={c'4w1q9`ǯcoqߥ<I8O\>3A둁>nSFF?bM8'F0zsq898$d`O1 ĸ93(F=ׯ^b8c(q~nAbX{p:x^:{phPF; r )QM7ga𾘩?x q`:LwA"6}28^89{ 8F:>P8$pI鐼g֤-zcT< ;<1;z9#ӯHrG|pM9PnS0:=皗ԤP;xʢ aO_jC_69ےy{:Ч̬͹眂{c'pcsN`O<w>isןB? RNwg\s֙9 2?&Qww}/<"1CJݓ7cj񷝼9x6྘+rOFLOtӊnlE }9{sךvym1|-'=sC'vS$"{OΩm@cv:1ǧ [##<29Ez|$`:dq9=>n?{K*ww\`OAG8,xfXd1zu *,w@H$9T7 zryZdǩUG^)?ʓ=z0<˵5J=qžNH-uL\ǁΥ]8zI#J߉"ta=3zULq Zqݻ)=Oy%uNzOO8<?TA2LpO4r21G$xrI8Q| 4=Oy?Q, A8N䃁T:"lxO#@9Crpr=O*Ai ?q#pi:{Ndnz؜Nrr@{O#9? ӏj$=N0=qzLA{sӎǠj3@`x#Zh:qm82ï|BόIgnsؑ?_ďOr>7Ig'lkXIrsYpvdk# HoN ׿JW>GՁc7/*ۖ~fNѕ)ICt'DԹ"1d$RSy`y:=:2É1s 䟡<<*}푂v:`1^v<6%+QFᒨۋq_;C#F2 zX}"!6d  s9뚳hZ9U pyW9' z^l*_*@$9S\\^j9Ü8A.rqkbG* ac*9rU\0;C6jvųz=[bG{9vd gti̹APv@aGWvS8TxGCrXv"S,l+ sDAKm@WJڄ1IIQ r;U 2}6sکH /rX1Umu@@IMlGr"e aZ,8e;UNGV=sP(n# j7XH*Uqp\=qUYWq'UG}?ZpAޱNd;e?ĸM#>BI2vul~7 .@#}GZ͇a^3Iua1ţJQ{QdPgdmUޠVʀYOE,Gw'ƿRar~nqִc( -PsRٔԅ88J#':f{FeK Bt('߱&< vO5` Ėb07i8޵Tn$gp ŜJ+ci")`q,p@϶sW^eRrpv%En}yg*8ߧuĆB9 R +̬u1U $=9'' 4ܟr{qȣw휜HAלr Atu;ށny\hoqxBg#1hiv6 ?4FGnxx#9".'qǠH㍣=xdO83Me,2/w9oBI;bdey#o-1^4k `Ny|Pc#hc}1(c r=3oS@ ˝˞ztԻKwF'q@\{p$ BIu)Xh^ўvd]})0HٟOAߧPS#$mb`m<0F7}`8ӆrNlsH8'#qj l}Ƿ\0q秵 A9b2 ˖\89>5]8펿Jlx2NSp0țTs =`ZE ӎV#Mö]s'nwX0o, 31zoddO\R1Ԩ<9p/7FFrǡ&j96~sߒE@ULv1>y>wJ`; 8,B3si=<~Nj|{c?*q2:㨦?\g~ygں33d>W}#8POf UH 䟘6NH*=z:oJtbXl_BO\rF12 :)nnqZV~W=Vi$f@P sY\=rzOQמz o =/\8!N:c_ '128j2Č!\7N1!S3.<)ݷgXL>q/S!?: qtYs 12)O,Dž9 SB% O9c\n\'\c )b 3d&䏼2N 3 zo$|qB[$n pOZ|8=~eCi3hW1H:(*~RO1ݐvv=j jA!60`V7D`G9U01cӊ#eo&U ]9g cpkدVM~`ZsjH$e7+l}psǦq\dxm8q ԥ4_ 3IRF鎴E\3Ȳ bI[+;kb߼{DG#F1F[*8 r?Dɳ)8(6^ҦhޗS\yO#iqg;Edj)8RN@=i0NNG}q@*H8*F9%rIdzR(]ďv ?hB7 /^$cxϠ416\@\p#0qc T,܉"tӌT,nJ¸,?A<`m =})XsWӠ`myzt{c֏+ng#oEq~@1qޡ1 ǧIܪ u<5*Wi~Qq:\7DsZuFd`;\=y\5JZuAd+ $ =Jqpq2NTߞtt<yS띞qqE_^LvyAQ~"An?yF3zV w wmÿ?Ҵ[f/8=xzZЏǨ5֫kC^,>xxp s6p8%={>zH898?!<zx9LrfI 1``gR*n(pb2k#8= ՉFQOc~`97,En{z|֮"`|둟L~@EmI?Y\g>'^dwۜzU@9G}LzdyycK 2:vqrNCjUQ~~ h@8'6`}@TOMz0;Nxҩ (' O𫱯:=yy[ nY u# 'XROa$ uߨO`s{|1v!s)g=9ӧRx|Sϑ #$8 # @:JoQBx\Nx> 4Ď{s*$_Ϗ/OR8,y?R5=x95;;ch"x>~:=:CJEk[hF` O>$ZGRB@ʀ̀9ֺx~ystMXU'h+"|P7fdIT-R#c~c־9!o+˚~G_fm8R#fH[8w/Il:PgNy+CͭzZ`3(^CלS> I z](nD+j*ۑϭg[L|{RCcuvKDvk'f `U#Jkk4ݐ"77I6GjK9GG)i>'mn|'=-5g qJ<\<|סSW,d;۩m—:|vЅW,8*C k<F;.q2:c+$ܬ-GQ>/xzkqG-Z#oL]q 3q_]E^(hQ+eN:|۠+pM|]WRrj-;w6є,lv20!#ONNF ns-'2O>=Fg8<9зVJ8#]YoQ],:SZI'ڡ6 iBq]Te(U{Us ^^VK}rg̒ъ>_!Wvr+-/7IweKRGUOEW1i9+??9N Mq_j6= y՟'+1*8 Ik˭R5`GBabiM7m&)Ve,rd6^#-),qM+l~WǙ)[שM_a-%=GXMM̐]4\+K .<6O89^_05ęh3XH=5ub;Kz㤡,*Tn^|M21c3sȯ'hhheG JM[o#$`yB۱d{Վ=8ų_Z[$gI\GL8NvPGjb#zNF>Ryn;g}rOҠ!Lx_09yu=C:~\wN3֚ÑO*sԎNq^rw(=8Ԕ.}288&lcxw 2 |HL?t;0zO ێ8'7Hӭ} zEol,{Cv?N*`==8Lqz|Rc #9a\ 18q׬9'`p0 =魄N V p3qEqPz>ZGq.N;rO'p{by+F3y*B6HNF~b2z-S0{NϿ^Փ-% u¶"$ za < '8I_8x4 01} {{iI'8ه^}1@2A$1c'^aݞ20f$矩Ϯ=jh;{)lZ,a*O8=4⾜d>; 5Df3דz~ʭ#ny%&Dэ9Br0>oUxzdxu{Ve\у=8<b;{~]+x910H9 cB@p[=~LDGN9PcO>^ҌLɎXq׭U~X#=Q ;H# }g?ʳ_=0A9CcsE͓ pNNF2py͘qaO$䞽?W-SýL7$$c͗9spy*Sny1x 3r{ī=NT$_\}y.́Ϡ<`qǽF~G#<眎GN(8''feܱ8yy$zg1ֳ)QG4c#3});q^Kzs)~PG{)89I^}=)=z?FNQS!\pzc>Bf$Hc gֺ;v9ۑ@]x}b`r=clzRgC+<93A3ܐCAWr 8)`Hǿqۭ4d (&I/ڜ-lnfi  ;E{d|9m-]vE,,\?^T{ x4mVxmH602{KJ<+k(Ծ?+ RI3*Ln$9䄠}-cKRe٧˥CRIڤ zịo:I"tDqQ)ޯǪ\-&uuqoCSDSs0@y⸍/z}đ,%+k$#WM9\zg-)uekV(yy_1[!*:T:?i6c ,DʧC8+U\]qƛϞ5={R%vـX|3 ~5\3prmnv**L)RJs}n(=ݐ.33'3ǠgcDh &9a};ri$RV}ͽ1H_*3 ;`sN:`rzB)9K)8{gUD8v|{st>ǒW8ۖ_LǵR% B !wt1T@NNnw6NQqlD;@ 8bߌ>PÌF}}*飊Xѵ 2D)cV_1\`v;uxeia B!iNNG4KmTӖ)X yTciwY师-NzzgOϥ|EiӞ;K'69=qJ=|О|r3W=Nz4 =0pFOAgu8 ~Cr\]˺-\¨e>l1YVWHGֿ o5x×R$t}ܬb&0pY=8Q>K1 _]Csڴsġǖ0@'\RQW߭N6;2|y8>Ӱ衛pzFĪ8~sO`t*"sѷ#= `-@[P 828~lp88ҁI; H`GCߦ){z :}s@ӓ?x u^r}' c NsAN}=R{G tAC@یqKp:w9="{!Ls\.֓LNhAa qIzꧨg#}9^9#OO'В@=:z=XN;ҩ:3@s34 C;pTtPxy?ӧ|Zh@}8,I=2I=ێ{0O׿4=A9HPX@'<#y:tn rG*u`gpyHӦG?s(Pp) T /=?NR`9 8'$q620Cc90@=:qsN{AqrRO=J@[{ҩ 3l8q?) B[>Q䓜gCdy۟Q@ᐣ8n6+7ry?\z620:s#Ays~\s0' z0=ޘ=7nlt2Goj: 2 #\ ^G88z{B`q=$r2x#c >90s=!A_ru *9p}A'ޚ# S~瞀vdn ϣ7xaRl)A989LnWO v~H9*1t\wIwǥINF;6 APLQ 9-vkNPS,ARV'8zGr>Sqߎޚf\ *=N1H^H'ߥN &r#x/9 yz`dqGB`Qxa<7c=sHH؜g?{ozPd~q0?.zl 3_zE rGyzsAp?P8Rc3>\3qH{e<)A'?)ng ~zcxp{g֐:uPzNKd:I??S0Os c9'o5gٽI O?:'ZS\7%rN9?3)nX`rAU r=8B12zr;:鍽[@'Zk̗*=d 3qSOCMl9X x9<`SӇ>%C{t݌p$nݏAxqԒN9 " s8 H dU!1?+|W<ƥ%x*@9ᘑ9vqN3)A7s\zq}Iz8,F8?ҁuߌt>RO gp $x4qҚ$y灂qSqN2;OšБS s9''8'uDc98PGL6N;t}rp9R#9Κ >1X `0Ҩ4SCT{\;={K'OjHxqRqdg =G_֤Lr03ל{?vcϵ4.p<: Q$=GϊQד84(#8 񞣧Pg=n?$.Ua,1+_07nWy>汛r~opQ|d`pq1*UTuҽ~9#OڰѷEp]ŵF\|K淑tg3ZAB8lbǩ9 *z632\q p*p7`vl͝`f 9; a23) O"%r7όv !xOj# #OVV鍪1*q!z$*91W99W$uI $1gCU$tP >T$SYhF {B8Ȩ̤Kᴏ‡!}*% aϑq˾?ؗR`z +*pǎq=LV(E9\Ӛn{䜜g>.prGϔpNNI#׭()T%+\UP8 BY d!UP͌/O9bܞHccjT<wUdădA9)=4Jn]NPm`2sy@) UNO͌}KbPFq#v8Zc x\uVd3-Ǩp>x r+Tj*뵔g 8L`u,t 8NW98n}!?-0KN:'^k'w̧ qT^eu|Δ<7F863|s{Ұ`ٹPq{ Hz brvs U^#r90)XCC3cқqI`mCڋ ;y9$ѵF6drLs!26\c} @2>p1t{_vuz[`:f |6.O:}) a^<:op9G5>\˓G.J u8=}q:zuø @cOns0;_;A7==6Fz'?x.8&A' =8N'd` 3֐'i#'ϡ'ޙ3RCdqHL{Ќ~;;1sG␮rG<ׁ!aG;8;)p{~G ps׿4L6<`;\p)9K(‚Iw41i tA@FCttZrm׏{)0-3bO^ PvK`F _ߚS`#۞qq\y4q@ a2zP+rvRp1oN)q vpO@z`w8ǿ8Aqr;0\g_ ڔ 69 $; v3yg 7o's'`h G8?<11qHc(aqg;Nzu@\upFrNqp9pȠ/2s`^O@ "\vc$z*I?(?ZG@$c@H@7w`sv1o^*yg,rj֙T=y?RǮ*hВwm ‘>v9^YaF9+@y p8=k{MX+ +|ۜIlNd;[Oy%}&Mq< $j*3ApA>g2,>nY.+=%>+zӁx=xPNSUcM6 YÂA'p[=]w)Ur돥geAyn:zQhDap z9{O#I#JŐ#c{Գh g'vnqOS+XH-y(j OA ~uk' 9@;}}(d)zbG'~GntZ[^ë` 2e*ܯצ;W 2N:~R_3X4?"X=oqp}q;~x2uƁ\ >_cz3N:~eWB6sGolUBvރ- $֦ӟd2\3(zHc |Ojgn$}}1@ ?ו'gsM|r8$w9^z`@f*?Gq=&$3ߒ*t'v~lc=@rU57rrsssָ6A0G$Ryi =ci[ cx=y9#ⓑG8=F9?Z݃3c89GJf9N^iL{ Q=8dD#pgu<{rOwЎ{׵< =?ƀ3^9c 2GȏƝG=zd}O^ t;{ӏЁ]/7f^g7۞,QOlǏΓ@o8{6x9ӹLqNz\#`*Ob|=0q)p2~\=}}k<;S:$s3TZ 9ہ} ugFpw,.rةVkxY@8[#$z0k؊ݏ#>q_B. y]!62 I좴8ksp^<|;;dtnjgs?&y.7;3˼Ro mL[.d ,11s;%C=y4nJsTDr$ȌgX[n;6#dHm#jzֻ;#ڧ~]a{I 1Ά;wO,8>A6.H+5rtPr5N| ^gy+VNϫM.A\_i:q s ,3rZoG'[̛⼅]Ha?_EIIiԯ]Q\xJ#x|_Y`zKػBlXchҰjϙkc2N?zRKwk5bQw0K1{H rDݡ:ʦbH- 9@872)rԝnGZ&ލ$B+y 8?xA:vpȓ9cr,$*cEus>:[o8*L+3._ r }hGqnKx$]?+/R@e8VK_5s^|)֖8<;$՝i' npft~I̿2{g#ڼs g湗fuMſg7f۾[qT^rs1ZOr)VU`r9*i:{w= *u՚| m w6XcJoTkY `c >Sx(M$_|yz'(yscQآ g$`[Hd[[N4gEjiI%INw^kbS Bа=Τc+F̓In{Tׁ^@$pFA'=I,r:zg~j2qlczޓ) bq3?SN:w{0?0jH9<zP! Oϯ!A,\gj\ 'ןSzV~$D9yvs8}^Wd;c' 9zTt/_jF qzO/vXQLsg8~3pTpH=0qv&w>w|sֲf_bgQϽLn >/"@7+tz/RYH9[n<p;~oF zf{ | z?tvtF'pc|sY$^p3SALF^ s< n#=xۧ[1Ё~jenq%-86t$9yסH3#ADO$WGehz`Ԟy?@ =#'\g$pAyTls/8^nAQ_|nsm'=A93zZr:8?q@%O'Ü{=i'#۞=@oB{ )9: V֠  nv*9@?:gDޅı8#'}1듚FsepU y$p=ydsLNbs=jÜ\' On:woֺa"O=OR]P2gӟMng9B5͐L|{r@O"?FA3D*DnG8S뻧ֳ$7ry'zW%]nx @@d$pySAcڼO1d\n 㝵('9^^-}Rf{yEAN1s^]UcФ+z|Iz}2F2=_dEuy?pAepoÿ) $t⥌w\c8.lߎyx; N^ 䌁rj7y3rssdǭG\?g{u9O?^ߐ1ON28'{zHcv:`t9s]t7G OO݅jFzvzccìh#vx wVA㞙]zܓ>z΍㑞FzsWr}{Ԁ +/c׌uǧVy@0?>}j,Gr ֦X=r (Nݶjלsr:A8 0:u +CF<$Sgp1֡1C|#?\S33B 7 PnO @#J8}7w$*  ;}*1Spy (xAgA];=9(s*qnG<Ƿ?QPi :X0"YX)&3j tV"st$)Vw_5Nxƥ{]67^u>W_ou,6Iwp)W;`O'g>v"ZM}^ arI=ɨ7n%?X.󙙋r;fqG=U323FGvG=y'<#X%Rb'%05Kd2 !n Rq)G$%S76G+^tSrFKnSބq<8fž1qzSV];Y"96ě`)Aq^Fٸpƒ׌|)rg$.y*{UNw1;UBI+pO=zU}D mcs]OL*O,Kca7}vт{~, dcq1S`lury*Hs3E*Tufsd=/2)Xvo')=y+.@ &a!;YyEcЎgw55Xֱ0G?E#;y2I=z׵xGZG[fhFaA ?6 omu~Z=?˽^iVwZ,Z4䷻vuhz:t.t|UeK 9$W}9i>-pntݚw=\y\iVg Ctpb#j+ 1_=hȿ ԕ'88ܻ\$=*8 # `|!%RV>8ne? ipTt#\ݪsJznِ޼ڭw֟7NZǰiRn#OTrsq](;9u<5&9r$!qzc)8'LD 'v> :`sMݻil99zgݾ??p #hB =zrH6Î8<46|)pObq?ZLO\>n?ё8}@-JG^: ӿ/8^F`aZ_7bpxUHy=sJnxq8$r(`=19'ןJLq㟠?~;#!~azƎh,OrO៯J O70WϡM<+l)-e:# )9`8/9*L'p' >~TM;8q19t9mw۽4P8Ü|K2Q('&Kס>NݳL:PNO zzc'gg~7> ۟o1`^iܞ0{[OJ4$qܯ|z}i>9q=W=9ڀzx=p=9#ױ6mA-68@1Č'v>y};"ycԟ@a0pt1?2F2҆G$'9s0a:ӷOZ]ƒHEq'қs ϭ!+d9qMc?AސВ3H-T8s!I8rpxZ$ Nzd ={sjG Eb÷S>JFu3=C6H$:@+>ɗN  '1F>Ss0׵;m1lpH+!ۖ AR8e6:Ii6O6<E8xˎ̒`GBO5ox<8~uajO,}M8<z:,~`t$$/&3Nis'N: @ G w@ cx#=GMt$PA@h}ipCJ>4-8p8 ?p 3y$E3\cN')@:NҭjH##ӂ*P3;A'J}P`眜Aqon{GsaR}0>zךt8$2y>;=z dc|T=;cЌɆU9ہ 1v}+&Hغ7rnp6'^ǗKrWhIL@n=죖^Vu-QׁZAbfa~9^cq3O٢6ثp #qNl>VE`Y3xDaȄnYU]T\AW$~\s$;~I󎂹C)$ۯ^ԑh\v͝zAm#fǴs2/^+6*O`Pvxlm!G;{Ԩ{b0u?<*W8BGR=q[R3y篷J {+brv$*)S%@׎t$b㱇?0 1S61y%IU=1R(j&r>ۃ4Є` O$gq$ry7v@BFr H$*}GČo][ifnQy#㩦U$*Z?Xs11Ahpg8XuPܲnܧ>PHÌFnAP t=)c+9 d}*J$mmPR:itbFd rGl#ӌSݝ6=3iQ8`[##23>HE[%F^{Vv?( wzg! ;K[)w(I+{י_slX=re>マFG\3edqNF}$< c)MLq|9@qr[}zS;+ʃێz׿4sGLtulcsH{g8SP眃`m*F =N3J`0A@\SO3 x=O v18GA=@?qGv3 瑀@>>W<9Psqiz>ݾ v60q<Av=7uNH=3ZVw9?'c$vCw\;9 "lx\Oh;g~_on!<Vs(@#p2Fy)G8xyr cR21۩\>g|.N?p?z60}?΀g֜W- yڸwR@'9846Ň#8 =^aG~NcF7#>) R=N68xu =)>P~*pGK t ɿJʃtm }C28'J]kYfy.%#n2px`gm q0<:;uX|*r#㜊S=>Pp'9{iՀ#2pǀ8Üd &R@rT R[j KncWI+ n 30ږXc܌pFH=0rNV FK9#vA*8l|>o\{t] S̊]@^]VNy$:,MF(Te&'-r$H3ˏZ:M-l<}vyvLeBcq@UnH= b wc?8sq_?}U>Rې9؁}$I~@vKN@Jz/\~#{NGwa6@;U'9,02 Xg OL6F )xl_q+@pWi! ~w3ث r0Ad{pmImtY\@pO_-̛G۷%PsҤ`2ZۀXwi47V8͐z9aHˏrlg[@$c?3ssǭV~=v99\tT3B0v#2:kB ?ġs$з;+ݷ'sSn( eazu0+eF # ,`+NyQ3N8OSH?v݌91$N) 񴍣# qCnKtϠn=s֘~@VA 0vN~<{iUBK]6lxML\A 鏨(ܼ _ֺ{ ~b]^kliE1F>^=8=]֕"vrr9FR=CI04csUh Ø6 nf HyjSQXҎ6X6'nӟ^cv8tC3O\$cWe>t .8\^f2A<O*R8}*8 ڋ~Usק#mIjrی;q޶}9?c ;? 8=I 28qqW Vz ;=;s'=}FAktr@:Fxspq_ö{$ެl?@rOCێ4wL|wBpI9$ zztџR2Grzy?6b}y ={{۞Öc2<Z<2sQ]g4 8'^Ns1ц:g=?^3{#<`=)pTc##88OAMnH9Iy֨?=~gN'NJinÓ ;s0O<(鎽:ڔz?(<;NGLJ^wsn8~vb8?*@Hצ8E%{ȟL8x$g#@=qyϷ֚vpAI9ibzr:Ν8;`sc  #zd:`r,cC^08O#NP@<1qvRБ(8`tϩּ$D g6IuސSL9+d39AG0y>Dxڧ92FGLT44G@<xsO?/)w-w1f`Trv95!ddɘpvlŒyw0.onZ%w#;{݅+\מe;A+O B=}q_AJߙ^zL7RC #$ *B[$hg1@+FѹX1>Y푃+}yŅkz.EU턤vo2<+uP7c0m㟭uPWɫ+FGm}dh4Cqw>y>m 7V'-s `%y$pkoT32nm_Dr:v][`.&bK+` H|t5x2ZZeNTěv/=:7GTcykC?\F^ մ{In70۞X~]ᳶ QQhB1^MѻJZ%׵˄.fתZ+1Yq$gj7 8ψ}K(¬68.rL}yrOVt&ߥFu}٦Oִ}4Bl1h.Z_4rT^UmbgI-n!̙ }1 Iȫ3NE库Xvϧ4%P ~Dqx2oj`Ҟ{4Fiդ v\5Qnc4ҴSwEHDc7$O'ʜu}3¾ {U4[Y3$aeF"<G^+l4AMr63^G5XJZjpGm؅^q- -ʼ#`t),R:+"CN㡯 7գ -Y7&ZotxwJT_*)SO{Z|ɱjp W:8#ӂsۏ#M d8#>)n20Ǐ\{RYq?$O u^:yGRTF29:r;ry9 1pBu'r?4q}boPLxr=J;a9'8( ޻sH`*003T,K A8P39_Ҝ/888Ϩ;'큜d`jA@zS 0H0R>#ߨ#fE wp?\=֭c>}}A"{ G\ן=EE:1ҳdIqvq1ҢE ЁԒ;tߟZpHqЌ "e98#c& z0 8a.{s8##r'?NAř6w7^:z׽V8񜁃1Z7XGǯUr3;g^Ob(< 'o\dHwc< t=pyq1'Yv>g`~W32d sfHN='<j=s}iGG_yFvgqԓ#պex_zЖ?L('9={آ#acno^j! {8v+k`Dv 8?+6zm9+!9swm"7ȱgr*|ҍ3[W;(5Yc/'v%i(M64dSFkwxdtx mIaƝcϔ}o} Ʃ;;Ȱ#&хF%r7k;HftF,qag5- i,Sύhٖ9r1.s9'soyf. Wy^Rlϸ<T9ˇ?iD-f0p_Pwg#]&LSH%FF5adpORkk{TK2/69v+$m! G+Zv{,fDinL<Dc;h NOLV:Voe]BD@vI<y'951¢Jci=.xoD;o]M"Iew rzxe—)q3,)'-Dy_*m=$_&UF@ H=NҾЯ }'̻NhDܙ'~u3WV_os&I:|er~`9=;AGNKI/$#S C- w郊SBBTu:ڎfBpy=2I!brLRI AaH >U^z6lkJ@z!xd7qǥ4ݓ oA=N8.nKʯ8q($JB~b7of:3Jϟ<0 8I l==~cU~4'͝nwa3#䁟4rS'h{e}}*"pwdqI qEؼ6 (29#Hw<(>lsچ &ySIOzdUxWq! 3<0\(v]myVYC?YBdAz3ֱ%ɺ[CE{ͼ>gc0',28]]i$NM=7ט |nO'tїmrWIs}oj]2^a81c\ckk~%OKVDL6bu+ՌT>SF~w}akֺ{]gv O:I,,ÜvoTڅQ <tar8;{--ꍡ)Jt]~L+-$ݙ6|Q 7t)RFՎPs뻃|&~ݟYA^*mƮyDc'< ܑӊ{ܢ;o,C@2 ^A(7|8 tlI׎F8 G#8=r8;JmǦݓ==:{S>^}pA㎧uW9{>8Pdg';q Lh=9Plc5AxǑ_qFr>b0xsR#<<1IwcMx8aNy9㨡 c&1N01o_'=ddt}!u?.n p#ӱ}}Fz(q''I$}LSxW#}8sQZdv~`x`h 9S @v9Trz##x4L}Ì䃎Z83=x81M1K/^B8OvJN]OB6>|e{!NIad8OC'y& qrOqޣ8$tS=T. ner~fRJkd㞞=;I灞 #M<dg۞)bFzOL⇰{dI {{w1ڣs`#< 4  f cc=i8ڧAҥ7R=OUFyqGcG#+A\~TVSW%NOۊ?Q QxbQx'1cH#88$8)9^2O|v`q |t8d>h}~}Fȧh^HnL֨\dWm8{p<xv"uAv T U T2G`=4f]Lr xF;⬨瑁iQ3(v|grs9Pp{dtϸ["ʌsBZ.6 u=Fp88pQNI$?`?/#yT?/O<{2d~aĎe c{=ɂ:*:NI#x4HId`g8ʏQvsA\~O*2w9csӭ(^QgyǧTqx8<{@lg1szԪO^8랢mr[uH=K8$.I32Gq7rx'Y%9'ǿ=yH8U `ag ?N9\%N)°C@<XSBcgCtO; g#A$o-A{ts:P!۰;6}}DO'wp0pxU͹SxS 1]k<[2RxRłs cc//|;U+DJu\sBcpFg`ֽ?qzd>!";Y\XӂޝT(2=H%5sVnB/[W`Ygn7dHV rwukyؽ]nP#colڹ7ăcvygDϧnTyzpqd6(DQN9 <nC1tUO`&pkȊ*d!gCPjͺG6_ F@ 浊OAjӣ$1䓜+hfLF7)$rOv+h8nc}Έn`HC`H7(vl:ae'q=TpHOsC B!NzsD.vB3R@pYp؃ZR6ݴ9rADDhAa*cڤd"XpH8͟NIhCʛ Fh2 0~l㊈P̤ܿ!#-MN>S",Gǧ^p[C(xO :3*ЬX!HURɈBf\+ub0H;{~ ,F0@'r-2u±X0Cڭb0&I7T>NT 9+9vŒsxZli,R3]=xnpNTC0G#O962 H%82GU(.9꣒N({z# 89ރ~U<:4dm9G34ᎇ ӞwG+{ӡ杀NC>4Ԟ!yʞeq03gc$Oz\qo"qc*{ N{zFWg'?C\t wb9sI Շubl.I9?5?1#oǥ+2yruzSwc$Hz` ytgr)ێc?J"ACOg$B="`trybyIiÎ6S99?\HF`0$OZR9T韽: מM;H>Ĝu, Tf4y'6f=ІN `p06E˹pd21w<랝tɊȲQRĀwg$&dŽwn$3ПjLm9d& F1 8\@J $rO+6+Fvy dӜUr9B[k.T9ƉaTV!~S'x(1kz#ӵwu8F3O@Okz[1yb!2|.x|Cu H `3^NU%@'={ցqss8ӜUG{̱!!~<Ol"F˰$D>0C8$'r*ïs5 0nrNsn9UO8I'9%'pc888h֙W;a݋ 1Yw~xjNzd9V 9=1ӧj$]ƪNX7zn@mm'^lt9=5qǠx9,oT9S'T8-`|g޸Ir;IQT5+rWUnwd0|;qL OQ9éUb[LxujO?uWAP~0\T`Sϡ8-;Hyg@Wrz0APq6c'h~%#'*X` n@"l:pH98xמ閞 v6|]擱4, QNj)$DWc!g;#6ˈ6m9ڣ9O_z9p-xs2܎w<Ө:c*Sy6'N>^OB$9Ґs 8\ۥ0>?҂ȷ@z=ڙ뜁>^"0v׳'g9V W펧zM`I8_ӭ{0گW?9'3y zO>׌F89=;c>6[9 Bry*hA2vppaxC(QTXW ƴcp8$ӏ\U#6K=FORp?88vLr}߹ަz9#w}8Pv'c=>qH#9? P={Jdpq' {} 'sC[Os?MZNr{]Hˊ}s<URsA'9#4H_O| #Xuׯ^qhddy#=8bS;HQۊ1: u~ ǜ]08,kr2=l~_Ρ^{b: fܐ@#:Zz}q9:DCqw=rG'٦{uF?*yF{ԡ21ԓf% I>灁h'lP.1ҟlcۯAz*d9jQ]E'1v翧Zh=34ν9qAlGM'z#T/<Z#Y'Cwp39=*]ݹ*ڒd˷}qn9rVZ3㜎A})8 yדSvwGd 3?1^:n+CIz~$t7KCLn2t\Ai9#+EdhL]XS=*յ_CdGk+ q}:hD07WdAc Ӟp+0ܪad~vzjàiWh{3Ig-~@$V ִ]l{Y+-̻ O庺U.c]弙 27PciO]m#,GzdNyNarim<8^DoGa.yZVy.ճ$鑷 W.kKR\[Z\,<)G$1}kv%oWЪ҄v{m-_u&(Ԃ~:}BB6r&6n぀ֽ&"TҤmnZ1aVpg3Q"9*X?JSӏQӽR,1+9Aֽ\tZoјaeN uam}dM"Cy`#Һ8ta\-D`?#\;F^$ |k߹Ӗ"+Ȣ1;QX 皵g *T $)ߧ+W+;i{_D~]_WL|n^昛2 $]2[}qT*7m?Sҥ+n7eYy-Fq֔(zA׮tYaz}:QC1:r<>s,zcڦ! dQӠcvy>÷^1q~=>] c#'#߯5GFDe|zu֝69O{>yUw9<NQޝ1#wSysH$e\8z0OL=8Q#Nrx<ӌUx^ߜf-\g#đ\eϘI,v*g/7 ( {VMwpypyc6bn〪A ǾyLr9v:׊̢tpr=zc#F09=Z$qs2F}Kq8A]EǮI+;dtt᎙^}q?z c'z u(G\crx# 12r}VTs oZL~ 37ʹL<V&Y_L|t*~nW#O֨V/ǒy}1Ϧ23O´CprAu+vBa@wn: ֤c s;cosɔkvd#{Kt's?<+Fz=o8EF|}OLqӏ"e 3D-zt Uq:`ONLL^8[oug{g׏O Tdc$@s\`n1UYId3?uEa"F8> 3dgr9sc'ˌnHu+>lun[w0;t|̙AdrQ=zsGxg<݂׵rٞtfI;Xg#n'`198<p yaS 6 QY~Q퓌7j+u=%ǰ1U68#ˮ#Ӥ">g~R>L'x\؎}{dns}qsSx:qR0f'qӜw$zdm5ׇ`t; шwl>Q^'Rs8wV?x'B=-A=sQ1Tn>#"Ɣ(~Scm‡3#{ϩqqi\1m zRGNq1;O_Yg0z*K)~0]}GzXɰz.'=y*/+-y\:|ߘ#XW"0;O~*&FHӸ:ޕUȚ3G*FydvQ}< c:;U\dm8 9b64H(V\~2qֵJgll |\Yk񍥹/%嵄@`>ڶ=Z6I%&4ᵹ廷݋lߴ\5]Urce*[&g?t#+3]dN͜sR}0k1jtdYe[ko+"#ܷܞ܈b%W`i?Lgҷ½64VQYf.76%ôgavOjlJ$aY੔ 3W-"Po5J\l'yM3qT1ᙗbpp O4:-6FA^{e8SFL*Rj2C ]) cg2*yIknctp>`0OLO#~2Cq& ШXsyLk,M9p0*-u]bItO{tۗ0Kjp<$myRi(sDr麵&ܵA#cD`b]jds#$i#L]љ *5]=Nt[&"9y;AC{Wjs#+ Ĉb;+uпSTurHIpkTڥqg#$z*ڠ9'$`:cZݼ$϶j>H$ S&%|@*2 FGc÷ץ0oB\q1rsܽXA Hxgҁ ( 0vN(^@Xua\9O3scg%=^*)f| @0dWzsp(FX$sfslRkܾpNA`2?]xi(NGC۞9Kb7ei %7Ƭ \G|^YŬi;Zr񵤋]QKFIԊқIk\άy[Ŗi:?1xvI緂]ۣ!˟z?^h:";h%SzZ^wۮNN>]Z?} .9I#hfY]P+ k?L5+r EJUO޽WTo[~ҬDm>~Y9S";v jLa~V'^zq|)>w}zd09gc/]<~8ǭW!RHdQʐ:Ƹu$OÕ8nw WMے")|}i=.+>9'#I(gqah=H hŖ6pKyo\Gqh!8,9$OS_^ngeo&*8xk"5VT]5cT3x}qn^ֺV(0s<> L~☘ϩIsqn02gP"C0y=۩+ <\}3қQ r|=3u 6qN'q*H[WG7\w&16It;n9?3!8HKuʃw#Rܑ)0LtHXp ՘<`gڛ8yS?01:4#AG]לPO eL9?0AAH#݃b3cғ0 ߞc<ӹqlg@<1i.{y;Hd}pOW':؃ޗPH=Oӌ znܳAǵ09pFJ[0|Xs29 (n$#1IH;z; +TN:sOQ4v 83#==~aO?6?.Fq=qpOi <1K qϧҋӁʖNqЏi$n1Hy$^¤#'t@IP6A(q3ЎR9AN1LHhB>!q(N7}G%9ކcy?G )pFpp2 8Gq;qz0 A4Cf3܁BHnFpQӐ8cR'9Nv c?pFXtR sHVrҐmNG3z<Am#'#3FNCrO}oJh䃌 F37~黩8;}O~:c8 ?Jv׏NԚ]Gqq0F3N <&0$2;8[?lPAyp@)AXwnGހ7#38#duRa3.A@>@sSځ6{qҨ(=xy8#y<94n'#zנ4gqr/J`(`p{;C7鞹%}O`O#Ofqpy={̓0t޹:tn7y>gq1zҸVۏS;}w4  '\dp89cOq/#W>G=<'܌OHO ,qvysb s@pԜzZ} A->l#J1dHx*@q9;|Пx^(`8S)'גI9=] 8d0}zj(q|2:J!8F{uvVUy0 Bw-%qmMDp5*mrOy-vьsǹ889P2H8OJ,+%#;pX9NO^0ӱ sǐ1Ҟ@%G{sS`2ǮN~P^>1Ѕ r1sM bI%yשAl}қ] 8z:(8r@'5]<%,2x^A 2OZӷrI@QU_pG?G YL g$s `b:qyȩ@q={gg㎤1<8LO eGJIr0?_Un0Oǵ$I GPsKpHq{H w w97\f H y ,uG9=rrisvWK8݌c@MI7<S#y@gAiqr篧ҀO@iA۵fpB%z׈wD^Fo%GAYCϏu|vrT"3PFsɮ.D̾[1`H9@f<6J#xAF*y s$R{2q F L֤ws a |ǥwMy~-]y飙Wj̠#>=k*d #~Q@$qڽ9?#ˏg; O@7sw0^CSnYʰls?.Mj[&n%\!I8Һa>FwЯu*.HfL+wn5K,ʻYdH yj{! a72qZɕ*nG8W) 9W,c 9,|ǮP)<o;v<2zI+USqS-' <!"a6@pɐ9 ~5lB+ ˴c2 }:dP1RJ3qz06H3FFzWzf24"gsX s^d`S)$& 2srOTg}} ;Je<ӃޑỎ8Xo=K7qRir2Y !}qsOH@6$6p~n^#p99|֧8?J"w-tSȩ glt#w>((vޠQ{?O7:x#8 ^}M(8:݀9#}Q玜{^c9__9 #zq߁ۿc};9;{cץ7 gPv:8!`񓟔:n[A9'#'Ҕbg p1'!Np:g9\nSXV7z`c<L`;/ { 8øÌsjU]1ܼXa99Nz08>JMv<'#pP=TGza>8;}x$p2h0 ?ޤ+ܜch r;n(Oa>cs֝'ğgc搁HnAUY# XO+-=-FFT\|tp;U62<~zN֥ `ǀwpG=C/n~V$SAhp~lmzï%>\q99hYOps9'zWu2lRgڽ<nNgw-lKG$ < Q ISGN80_J-ܠ)$z~5ȤqXgo$9Q_)%32% G*<,x_,x$~d$dRGQLeNeNϛ#6HX8Rq|`<&7ضyc Ȑ0,0$'8*gV zVޤ.@ 2p $1.+Nhɓ~rc l~>9旱,HO0O} r`}? IN2G랝+?h?/~\gwVs*6" ݞ㎾ߥUo p0q<D cy x*;A 8ǯ$gGjwuL<`9-!9 _ӏJލpv<OB3۰Oc&dj5YY `Iߌ?ָ/|'݃B۷ARe|%FA63~t>aNX _zXA'cAR GU9V,&Ɂ%vF,q‹ >btJC7(;\AQ~$;s1He|d0xtK.!|J7T,cn07`gPkYB C+![ߎOhju99,x28<%Lޗ{_W D#h(X1|w#nfnU68PsO>DzΑ* tzBAI=4x1 䚕3'z^hl ==+AGJM-8psן^˜x,HsYGd}[8`.z<*՞v-)' cZsz@&/I+=rܓ {snsVs^c 4car NGJsm#0O#쏞7 19-oQ퍜 c}OjvǡpFr۸0*rh=:>H\m?p~]Оҵ-3`IH͚ 〧>H`szr>jק?;t*bèg>&ݍFpI_=jd qI=ry?4}sxCJ[Ө鎕ba c-ԓ]^y~OZ4Z\2rBWJ>'L'ޥ.8yqFzrsT\$kMЃ>I8As5s9=9= !<'_\Qc=xn=RB~d dwMopēc#=뚐 +u0N3瞣΢8'|{FVbdGE#Ox8`:g8ۑ{Vm 3*PO]Q#URG_x8Bd;֐yClK1E㨮GDupԖN `P!g}ys Հ'IrǝQs TTC!$m #N\+69*es&#>HFA }LtK[?,H؝ U;9ӑ׭tn$ِPXmI_X$腒ήrQ-/+,9BIVS2nK;gUSrIr:Ш AK8yqY`tݕG R{r*#65δiRZ+pe©G5o'úZXiyQqtD0ē E#ycEJ<'~M8ۯv[HQO2k 1_8:޳p$N|^T[+18ܧ3!Kܚ<ӛeC*8QIy5n i%8 Ĭ>Qu(IEjz=n/T +I0m]ɵq|% yQT0Fzvlb7l<9mbv #@l.Ѵ?Z=#6A1,H\18nqTjzl I6֬KgX\ $^tI,w F`?( 7g1vSN9iSO렢G%DLg嘄-qx]xl]ΤSl)*kS=J3lvS89 yVHiC6L(0#-= }62[|_Q:pxmmKE\b;~~~mÅT=$yb0`1Z`^z1s}qJLf?#{p:cnAG8Sa^ =N @=ʟGAVԷ^bQs<ӑ`;kޡ˫̐g1ԍ)Qg#O}7qӂN{ƀt@<Ǡ`y tN3ɠ,A>O♒NcP:@`G;zc!I3c\dr=34n$Xvb 8hu+6͠*4`u 8N9'iZ w~yVYb2Xs3nǭ4Dxq |ztzӍN8Yܨ}Aګ-z|ppE68a Xl ֲ;q < 08rVz7FSgu둁Y829^kˮ{x}ѓ3wS}xi[^өSܡc^p1ێ'U9Nr8"Dg0}sLN6wqOd^=G@0MDGc;m=J4=I\dqsߚa'P<9'H+@EJ/D{_>!GNy~{vQ81&c'$n?23QosǬ G͎aש :Uqsԣ$*FNG#ؓZS ¡AHqa<3]JHA+\) c 4 NGu#r-,];݀>y==G\tӭZF-` g'u<X `ss]*6C߯ڝ~ZZ}{3o4rpPyzHq ި1n<|î?F@I1>fP\?`6zǮ:b&(«a߯\ E@'wbG?>@Or𧽅Ա"*NWc9ݷL׷_˜2 oנ @^ JnOINF y$~ 9o/$sӭ@H<`NpGל!щ pAQrN;qLcy HuMRz"<}Ux,2 lr3:y!w. f՗ ʏQw9vOg\HAڽw쎀u[ֶWaY.FTEyRS2%o I ג85RF߃w|1V ~mA`g{޳&# szCh|-CKikF+o,FD@z1zAJ4֛ eK+ F@]t&<|Ši4|vzlsl30pc_5' l_iP- 0䌒1S9>^W?=ɢ*{ZI7v}ۇ`cۂ] ܠ0YrH1"'lוQpMkv}mLU1 ʥqf.p Ü;12~Df9a5ru_!M L`pˑ;Kf9^BFFsCӰ0HvqprG5s9L\5õ d; 7O5-Y2?G|9o Z_07K̹{{tfXH gsu88-T`(8#g^ܭ5%bU6Gp1 ~>^v s}s$;E [8i}1zFGB?C\3€q9~9#w#;7u }28֣<䞫#gߥ$0I}~[?7rq~4FpzSwQ\wǭ8:;q4 >\sʰ1A+>^ 뎼TFrb1d9g\~U#dg6N98ΐHu׭8'Ҕ}4r $q8@I=t@s88vZ\#n:q =9Ϧ{Ss2c?~أm:o\@XuFw99zdQR1u4ǜ$gS~Rt88rNh)oփAԏ|19* 8zcROi9}z`L #*{tǎ9SSӓa:1Sg=}vmz9wAddgCMmg#tퟘ{sGQ<`=:zzNy Ca}1{Sv w~DZ8޴x OoҚb( #vҔ63sHOt;|j|`x`q;Ǯ{zRcrb=nzb L:ixR#<;\B1t`HSF8{zӇ^A$e<~y$PBB'v$q`~X !~fSw#${sT/1FR>cpy<"y#؎sx uc˞sFrq.An `s0 Px?1wxt=9 : lCReGSCNG'Ҁ ' è*FGҦ pQ=e~9忋hr1<x*yƐ82A8@#` u0@ gցGe=Ou r #w *r7ץ(_Tt;pJj`Bs#p3qC #:mn!q.]BNyJf0/|qh\\@c=xL#i ' qӯ~xq*pAzi@R@.x'0=1&pc zGZ'!PG|+NJ>F&ICr p8uqv2cݵ練 Fy qRmŒc*CZHsNqv5t mCRgN}~1R88c $H=p;T8te\c+ޚB I82xzԀtVj8wC h3x9 9`q*t9^*z`񏽞qsҙ9 <}q$C=={\:z ~,ܩ99緥'R8# F?eҟ8Ԟ{}Zsyy}iQn9*A'# ?)sϡr s{fס 2Rނ_xNsNNH1xO=<3j ;ӏn{r??zh`q<=z hDz~|֗۞!G{z'qySӰ惜(4!؎@ך:uJW2><{1^+h6 p\|2xVOA7h3ƾtW1| 9Q<גr@Č ҽKQ<+VvI^ҮƘ#F7MEL^U6 A 1/q\)n68q;3Er$6pc=4%Dmv1:zQ%?R ' y隿A\o3unFxf'݁80 3K0|x7;yHOJμ+#M M,82rMp09Ir;ٟKOA`\˶yQS7E':c$0GV3]0aqUK,.9՘BkPāpDk ޻=ydGaۂ_NkH|lр2rL,LP3H͗(R7)`{1N}H~V ǷN=EVV Q_ݻh?4Q;N@vGִ2c}I1yz4)4h$vFG1ԏZ q0*Ac'As93!|dv<<ϱ9s :18^ pUTuq5HB03+²^ƞFz`cz0sҐ sg#1䒣׵8x8è$4:0<Lq{`XdY=9;<+uH㯧<ր݂F 暤 pAOt;dFzH29Rx8tyϩdq ㏭&z1rrXfr~>n ;:n=du8?yJyP8x=F;~u%\a~dTtMBr2W3֚G8׎r{䏨*91ތgiq E Ӂ'$ y曜{xr~ZVs⑰ 9p}1ڎ=LO?oc#zz4O# 03O0ON?ħ8s€xe9$`g^n'#q=OmC\F@Sp=p={{K 83G@= NG`{sǦzP}x|#=H=3M'Ƞs±'-#v"Mr~fsz g<-io 7'9E9Py 8Ԛ߀IwݺtEw1,%`)uܑJPL9rt1&3ӗ+r€Py8NƼ]GV#w H9'Gz9kgMWW/Ӆ@ pI$sRtH71'vbHTBqu#dvqڹ'nzӍ=6rK>O U=| |gd5HRXb w+FI gg*}WЗYJ7ckW_?Q')0| Nkm5dO@L'Էyj#}ڥ=?BIc NH99Q1=1 GDʛIewm/=zƕuxQX+m+2yճs9^Eyn;'tWc2G8q ?ҤԼAq^y_Vs:g&9:cx&9$g#7c?˽c6d)v;vzpg8-׎k"FϯJܜgv:A`@\gu93=U@钼#YɂԫsQ8񌓞+3w7`uGzFNT8$tצ+s4HɚRsxyuϵs7d|G=O5)QN8 m뎘>^ypp V\`\5zXjy$|FGQW r嘏Ӓr;ޯhCKLFs@SA=3ڋA@z댁M$ ӌ`yo?^0}A'*9kloB91= =ur99\)~c<,W_)qaV89#+ڧ>vq>@@'*{qPg$7`~r|wgG|f>AAagnInsH9=+b31;zqϦ>4S6}3\ ːA/>I`d^2Ӱv"mtH#$&Ӑ1؀nHweG+񓎀W4٤KH|6z`9zp>tYqL׶)Ax΁u"aG˂F;߁L#rN,c6Gs`s:G\s:~>1א@xjqR9 r2G$>ԭg1r17I`=d$f$ :NxHHHnAtŜ+}|ӰRsH:v3Z"l G93.rzq拓r|9Vr~J9 juݽ}O {c`t=8=8uHdO9=iޞ{p8?g.O^=sp=~y~}O_iSn]S]o|ye0s߈S?BL8be9am$М "l Ev*@'>O.0{O`Ёw$*9;G'n? EG'凲sJszzTcHBr3#9\w0'z ~er3Ӏxg iqF{H""HtGT@뎙 38;v5NWG4F@~!s}1e\:z~dWTllYҜ2HVnHq+GTGx@:($~kSEF ;{pnpH}*G sؒN>H&$/#9}33ӌÃS۠4Ϯ~,0ӯ89$R`x0dsxҜlޗM4P;xխv9=s3zӱň/{c0@քlp8~ ;kҦy5l6H/UYx1},h[ ϥkY2G'Kȥ`@R* Me+'Ť.!.2<:'#gCڣ4KrXIRpvAx8|Cq(Wψy,|l_KNj^j{9f!iLZ6a]=y5RU>$n ֝ qEdewdnX*1aHHmʍ& 5HgxzMj~""XAw,`Id9T,zbiО0Eu(oX61RgmcGMv1Z_Q,& T=#9F}7tޓ) NW1=|;u:0d8 9=1Ov8%q}R*PGVُp WHz1W$ps#(c 8<bwq8C1ܒFzɨ둖m>6##q? sTd cր03}Ja?w6!l g<}=XۀH^r:[:t˭!O$1AN sG(Czv= gq6;0O؞O]v338bO#w8N@9U?1 duQ}{v# 3qI; q dgW<8\J^#>nqր(czt<+q1dws8Kc@M px%{6IqM8c~20r:=p p);cpIrsFwsD3[z9$HRA̜m#zJbI vm#``c#F=zÓw 霝\]ל0FA s׌ f8 GzR`xIa[ t8`?J!#E9pXci^p@=B2>P Andr1 =K;O$=G^\x#>`n#=GCHv[xlq۠ƒq^NjE`,rz\L4; 8)8$SX Ir=06` r}sLq3@\g$c?F)=[D|ぜl{bKn8 9~{`0 r1)鞟 9pA2A1灅 ?LߧӠޓ2AOqڛd I szd1sθ9p;zFWBdz/ ChnG=>a0H'֤PH7Cv{}:*L=x2cc'}1rp-1s;ÎpXsк1ycQFA*9< > 5cmn7޿nM_wi#;"ƅ9blhSl:ca;NLCFss0 Cx#9#=c> G:֭$Nzxꏯؼ;x bOzO@{U-̛!'g$?Ȗ 61''Rh'$qjRX pPʀx $s`H֓'c*8s.=}9N2\7 xdcSrby#3qR6pb3׾? YáiBG<$dc50pYIQ ~(039ʓKK޸<{z~QNs#@❉c9яq)g8:r<" g=꺁 G~ԣx z{R}6wr}yR@&A[돯} 0q;w 8p='8'?B)'OA:pGH;c?t/STwZysc#>!}=h9C=h$~PyOJ3q:B` 7 '5?tG11pdc'RpHasOOXg۽4&2Gn?􃟛֚$؃O =xǃ^9ǩpq t{Ւ;z}@)϶(Ba玽K^ާȡ-p眅= y20K8㯭JW")>G[LdQ"P@$#p†SBmg?+n# S5}HTp|Űٻsqjl/8*r 瞟i&nnH w:FF yjVf [3] -;9*պΩ%́vl$oϥWGB1m噘c9}ߑ%Pr]qH\15Tdd.(,J*M±8.[ex;HNv@Mprr~RNG^ܟs%)Q4A)wY) [q.$`c=kM3Rh؏F̈`6(kG\LMwuvN:D`,Iv{ LB L *w !Gyl:V ln;RFQ߃j$x H{S)fdƪIV˨n$uj)!^QborAA$pO߭#UY>fMʆ?G-z17R2l19G\qRe(ŶʊTAڕ ͕|ˑrsOX*xP2UYn5\aɜG>,60#s暉[-dY!\8nr2;.@T_1s ^+hŴU-m d%UfDsiN|ǓRǥH?֣lt~NGMӧ]MmeILto; m\{G9#sӶpD9'Ԟv&ƜZ_)]Ip[!<A]}Ἃ}'JRe*\Ϲ&b!;m F#rzɒbKrFO-郞:j1o2D$'EbXahA@rr~Sʟ}U6FQ4bî77$9ϵmZi黄,Ř #icNָmΪIgpLǞ2v1s^d3W5ҕ{ΒwPO%G"r+pv ޼*ۿSa9mb S'cc۞jЧ9p:gԂI==wz`}lD؜{wxc4>~=)gp X<8Bӫ}ALSc9^fsw+'88wRd|#lz1d{cv {J\uH#Tw'Ԝ ({4O֝yz`=h(I ԃӍKl t^>t:}y9FxւCӀst9#8 \=6v'1K;T=p2r9=@ ߌ\r9hB'?,Z; H93:z}9 @!$63`qQt  d~9=s;#g;`ӝSI[0Obߌx0(+d&N0 j1NBn0e8Y[|?.[8zvzKdqG-o!qjMĒ*$GLWcj6W Zܲ[v&+ It5ӡ[u Jm G!z?ֺM3be,<$w`NsɢwSq_:UY FA0-N?l 049U۷g W9[-Qk.<[ss ڠ6p퀁`dލݑ? T1֍Ycf .X QmNVٙNJX˴HsԨ⷗TҮfD7L >gB= mdsGmnDHu0 dYLYF9ruJ*}KȄI9*-)s21P7zԜK.6ݼsn~o-Ԏp.Y8!Iܔoh=W)K{$d|ˊ.rIqa:_eۜymhg)Yy6J_#-ӐxZalFv67dɃwg*{s?4 PfT}!IGAԒ\,*Wv0 GNE_'e`IcT?0A c;N*p =ӲgNhsyO?;y84eMN0`%,SGXJ?\3ڴ /|K꺦mUŝ8$k{{̒LP6Oj-ˈI$eT: qWVq4hrvcyu|ɦd(Bgֻac*wgsWrF@Rx8==\Ip>ӻi9s=W)!m߁\nud=*ȪH=F;z{S:?9>)t"cl= 9ښQn!pwrׯj`lcwO(|W9+7a$s Տ9UI ŒlWdFdHF?cVCY:/O>SZ=Y/o\n{IۜH=kds6<2A4MvA:nuC^OϩϭmvdR!I0=sz@7\@Tnۉ'#h㌎<`t<8N:tHL[ySқ`3ߩ OL$۸㲜qx'Q}POL9jjBW#{[8z۰k 䌒 s*dZ5!'IQi:J;cIg=V n:9xynZ,{p989O}d䞤I*GqG,A\v9M< 0sЁ3Q܁%BN`:@OrPEB8鞣=8_zCE~[P\`|~VbA1qv"<?cFQ޷Ǻ;DI'q:z 1*w$G''# { s 냽i>IH x#5pWfߒ>z5ɔf_1NҸFf0dPѣ 𥗏8P..F2nЃJ-8kYtp+Pcxwg].qߏjk$ӻoBOzצK[9MfWH%sr@Ww#X&0b vQmo"I *X)(>9⨈AUgk`S=8&FX 6< cXsqߞ+j($w/!Pt9K[9uLS2fH~f zRF;Koxv$xć #N$dKR^76$(nT#qDv3ܱBv0d˜u&*2~pէ:WwHy`ɮKַds='Rtno4}jye{D)/z׹iZ5Vн\BD(V{h`{ޗ>\d p|ҭp0G^T7-wcs 9ְn%a!R3P'S{'o$~SysRUI@;0.n>Z4,m=b*N}x"e-SFbl P8NKsmso}GHGVJFًV\3MoKii`K`d༂J;ʴZ2M.IM8rw|mm(c_ZD>boYLH<:3_QJVq.QYi;Jvi3H|lonT$rsמ ̪2r B8o8 _*nz w*2H'v1`. m,%P- 7}ߛU^:FK!1e sֽ͜xwSGwS+W ܞgz uJq(#N'Uy탌?ɮT:`3q۾)p1Ԏ pOæqM38qO)x3~1SsRv=Npp1t ;짠~ϭ&x=Fq Aӎ\gRRc,j@;a3{洆b<z=a֝KdpH<8Zzzu3۞0=؎{w8p~bsS:{WjՄSU$ y15ws#=)Q1R@ϷG9*=ߜ =Dܮ\vA2T~cpb1n%8L'ӭr,>nKdp89zTqo{'Oqko$`L pz)աowA@>WbvS~0]u+9nz沐# ל#8-#A3 ך||gסsdqOS*6 y9?W2c߅uґBUԐF }s؏zu?w;S+1]g4 ^6W8= 򎝻9”Ar'< ^k:p|`8\OB–@[w$2y  zu'q_.tdy>3sY9< Zp:P8']tzU?~8Jy9FU O_N9+mS3pF#׊lPnpNzq+_kDAQ8zLz<+[vkFw^G@??JPGAFh(O|d(:u}+c;\ǡw*xvݑ"n$l0/6f'-px<-|G;ɣi644iwʲ]5eTaאtQʮv[δ)%}O=Qj ^@iRmK(8\5 xia/n}% Hoǧ2q^ :P|{<ڕmU{}?^Շi0x_J2ɨN.$G\1\V[6Ppi]wGCٯIRo{9\tpb۞`OLh:qim=rFrKIcrWqi%ZnVW3z$ vnQ=n\6.atu VVy2pc?d3B$pH9EEl:yu$6;yIf['$NIǦ3JXx?Ï{eւX+dX<4d ۆx!gDc}ak"/˜Aυ[n78n:_Cgq&?ݍmJ^}_s˯=g |/_muxI#O&Ek!Uqn2sӼ?8--MvuQ6@$\gzS~U~(WOޅ5>fh̒$d W5r3A:y2D̎9P;ں~ X]?GeՒzHZuG[%VF\q=*=ۆߔe9$_1(8ɞ%Xh`vUX_osW3iʂ\{9 Fmk÷0OY/u"$iRА%09KzU ČL=\:ןZ\lMNIcwQ*9dקzi8 'rz[Lv܎5&sHLs?,Vf@s^vw|R rqxtd4sœFAp:zZb%9=W'ؚ^TČ(q}8RxQI;On#{T$ۃӎIק|ӆﺸp HIaXc9 zcrvGN=sҀ@~``:>™rsrqۥ&Rk898L8 `@gg84a $g$Ӂonр0y d 8vw$G ǯH `99Ky`q<4ރlq'HN?Jo/QF{z c8㿱냌I<1ߟ5y;GO9h\rCFtKݞwI9#G898s(@O@㿰4#߿n:rc#OӃ~hbG=A??R9$b-;‰R>R=pG4AGF\o\> :rsSp8swʁX8粃O8{ w>w'[т}HNއ?C?;ОTc@ gr3lԤ^wtsߧBz`c FᏗ'O~l~>;A37oO6psRg'#+Юz @ ~Rz$O[A}(@5M߁Nz8 1r;wZl-8ۑqlN O~FO<~HL|' :gNzsz G~# wg{uM vPqs'd  uhr~Psw2wWO\;s@!\I u=gq3`slHcNzr*,Ca3sϵ?>L} 3ؖ8]*C1gیJv$3n99 >Br37̎{cKldcV+=2cjLޟD!0Tw'Rs|:y4 dF;)GF9⨑q?tS*2H?Z  pJq9cQv})v~_PqtҤpX>5W%x:|Ì֞g=x?ȡ=ViFW G JϚ42xr0%'?68 8\pDr6*,Pd1D涧N6aw%y<ɼrY(=+DUf?(v99=x}sSS䜽]qѪ3rH ;};c<՟m y@d=zmݴn2e>-T` BB׎pMt6Mɓp@vFd^Gj9jM{k 7̻qm w\$;U%1ȭC5]hpWi)Y 7@O:c޲8C) ʞO8NBt8C_#d˲$!`RGMov@߈wgVa-ˎz+f*z%4m%/8 l>nPː7?G*xמI.IvMCUB[dN}`j,>`p@8*6PF:Lأ KWAөaȻ ,1.!o9pz2| zO2r;SKS'+/NI Y~E۸M ܟtW6'\b,G~r61bF W]w0sO:JrV svA9G%L{~y O\w֒@rVS{z{xxBqN18vZ؃Suo}xC HN2=ntf 9fYNs\M-5i20ٟ3*KoK顟ƏU RPAN1@7)8v^dǷ JWA1WA͸pį7zoRKj8I6@P?3q9-[%HP:`t;[x,ȪFq--;F28'q+ !Wy 1PO37<(@sl`Dgw9n2NI`OJ_};PHQP[dtWimdd20 8=z힍t+/vNB0@988p6;Ku8194G# '$$A(b9*Grz><䃞l vlsJ2Gdqy?HӴA8G=j\>R~u 9R QIz2 xFsނG<o_n?JLt  M rCs vAzpNq94p rqF:ӆ{3?xh2@?9Ϸzq$rs烷9%Jse? x nnHg xH ڀsaNیצx9 2|9'gт:_ڀ{ d׽)9݌ AIN?JNLdcorٜuub9t㎝}0Nq}^}wnFи?0n$mf8S~(Czqy#ԁϥÿcy(㑇N@/Og#?.GR.NOOl~uЀaבӭRFHn|M1v|$.q`e,l! aq g:wgtbXwzVGw"#~DxpddH9CaHc$cm_CͿu.PcXnGTuxXKb8HV,9]Lą&R s {=VֵkwLGRwAo`o~eqp JM:yO;. ڼU[in!$U  9p_XTVڛ}N馝˖C)Ψ [[ؑXfUy)W61ڊz.y#zR{JʍhUi7 ǭN6k]t^c#A1x<@3Zx2v$bs犉+h$=W#ߩ?h Ğp;a un #wn yrx'")dwR t],{뚢AJ%|r0G\ԨB2`n㒠IRrFj-*͹[!28HR ͷ*zj%f=JOpߘsX 1#UF9- >U'K)(hABO͌!&0U%g<䳆? MJ܄VVUٝ0zݟ/ltTЫIZ]#  ݹ!gט+bB8 $8WJn75 N]:52FgO\w{^&iјU\cG5|4U;|;)iU|7E!R.TW=kOk*`dž8'o9|N8jX>I'k^ *vKzmťwbTqRX `p};ay˶W\|/מⰕ(J.f}NK Ӝeeϳ:3\Bd$}eVfV6/+o1LT݌6}iB1SH Oֹ'IjS@3g5K[N1?/z:#.Nӎ@$2WGC&f<=G=g=jkB1BT)y$R R5%=I`yGQ֮[;F8B$;WK?#^Ctq6f rNrau[QaQӯ''z 7OCMH/;n$;sO|~RF݌Ez< ۊ1,84TZ#け}2Oo~:ւN:1-߽Dk@ʬPdYF8zc5q6?)%8= Z%h)r:GR:$Q&+d뎴9'$2W_BuNzg'1@||z?^)8V }zg}1qB p@pSϥm (ggCQ2krG^kb?'rϩUq9ަ^sߞ?gӯ\dÎ;N0'?g=@)sL%xE<;8@ #zlrN>Fqq듃ӧO򡌋;dw*`89eRdF=W߾j92@z tҢ吰#sA-ׯҘO=Us܀A'g\XI3qU #As]4c$Uf#Y9dbu1ǹ?ڤK,<);c7#'Wn. QA=reY>tI8l=s;'EC:tyFx遑yŽ($t9VnF?Fk͖ȕWӮN<cW#BFNH`N{Ҡ"eg-do#H$@9o54-BS(@M'^OS[p/ ;]nK{Um NX 8{מwSr%ݠ'py%nߩ5Gl=XN^?_Xj6h\ՙR Ȥ RiGQ{Vpk ;{cm$ 0\,F8\}y鎩>$fbVRCpc/IX|+$zm0Aꯃ;:ZhaG1b2챌3pzz jj#l}iF*N {zuͨ5fDK|u1Mg$;;71;D'6WpC C8ɺ)#p@F{5o]QVWk-8/3"wlGs?;SB9ϗgָwmZ̲.wP2pq122f9N?J[z9 < AO}Y_8uJ_5լԟ4{jG qyJėh8 rH=~UYg=v*ԟpXJQmQF|vF^\H|Gq8|<Ƥ'rpTדUt:WH 1,JHIP@nXz>qKgIyDؒ i~E9`+ɫNgJVG_fڽiZU岧Q#BH$+َ01Lϊ.JwVTA9':hk /O˃P"@xO\0)13<؏L;c>*^4q@yǾ=i898@; cOQ"0x3A8g{6Z1Gy=~ޝ:=3^89 rqnGc\t'99dYTUo0Cdtj#gpI'*INqぞ{sדVl|9$J$ׁӥY,1O~l=뚸lq CSP/^J7P>]FA1\6IqY${/t]X c-֕pNNC_ʛئN>n:=z59$y]x8qe ~$`gMq=h.?(Aڮ/s(N9#q=r)2'~h$k7 PssU݀}@#FT+3OQÒ Qy:|~rjYqD/)Ö3ߕfI6yoROuSL:تq;Fsz[889yNs߯z*_^9)r={pTgYo:P<_q3;~U5C>OcT8 =ϧP?ܓx8@RYI @-،^A">{OO^P8=ylAo!A3ЎxN8랠}z@ #Qv"`34*2;ԃXA'j gt{5WPǀK%Q@ g5F(Pӝad>VM,N~#/x[(#ew$1-C8)s*Kud߉_vIB68Է@ʾEգ/ .e(G d@Ak͟9/OCӧ}rڤ@ ӷ|r#B2HeA3]m 7ZE%3%A+Ψےk=X#o-ᵍuqhqqҩȟm!\2_+*j̫%2ܲ;˩h`iN Waa5廾c/Z }ӼgE3]<݂($g"O,XY99WlvPN8桳[j\Ӡu6uSx&¬lī<8.4͎k6#n*N3c885]mnܙ{m;mgErn%0A 0vsy>0r\YkOfy~"O<عJma漶<ѶkAݎ5#e)=Hfz czqH9nInܧ$q QĆ*w=1:PpF[iU?1#1 FA$? @8{  ʓ#<bp7cF;dM=p[!9=qe.U;wʱ\֙"QFes@di1! Q0}.iPKHy4.88#²:ҩ*KdF==1PNRNI[sɨLSp>R1u4"F8\Hʭ{1:cүZ3 r[@&}5 (fc;c]CÒ-͍p6 Vld7JK0i5>lm@W\N KWIB|5gbgPː̎OUrHݓ#wH }D$K$  J=3?4 ;:ǃH"R\;prDHF3TMyԋu3[3{+h,&2[H8C c5%Ětl.md.] #e*Nv1q[ͪө$0?xR1\eh氙H\6onOT4q/604vDz7p ;eʜrIҭ--{j|QyΣ .2G\[= QTkmI J0϶6fp??N=>^kUT~€ כ-J_?o]Z:y4x!Gnx}wAl0H.>=GC.}Fy y8H:'}:Z2n1bq^'c#@98=*cpX}2s u`T 2F7xizpO9#(=^:\|#{iu(sxdOq錐prG\ׯnnۂqo4qG|ǯ^%$$g<׭FsuPApp7/<ߎ(/ʃ,7ߓTAg;@x>ݺ@g3Ӟ1HNr[8Ƕz`g'FE:æNAO^O9ʎ9;Ƞq၂y8'np9P>vǯ #'~:w#SNa })9+q 8? `q9=8;<`dt9dg#9.30'w<=3sjO /@T\@p I^0Jߓ*3Әsqqy9g9>Ҝ I$: s A8lQy#=!Q9ϨOO|u8<0'ӚRFm\9>4 #X`ی}8R=~_è.:N==x0 FGʼ@Iq={ sGP `׸8m ɧ =37㎠:$rA9?:v>Ӷ?7$`=O.sАGaqA}9߭ y 8BzL)=`@*dMs==98sFBԃz}(>}ҧa?Zb{0<8>ri*Ac4ǯ8 ia#c=z )yd w>~4S x㟦F1tA18Ax=6a~#'=y9NywD^+翭4# gn8$7cG>z0rsQ~_?>U?瞹N=9֐U̧Ԑ=sKz2x}xCz !qБgpXh3 iZ@x=U@'oS ^wQ1J0ޝN*GϿc@ =~b8r3˞F'׭.@wǦsRSGLr;^:Nx vxz40|ÂU 8eHxݝץ!!۰lpSRoңF>lA99ldE rW g;Aޛp<1zc~OCz}iI$S۞T٠Ӓ{G`R3RxM[r@#$K뷮Wq#iu(\ݐ=9R#Hn`)qy!Rc?) :?z>\g 6@:)!l5 1j;aA{{qPc' F4fz|c#{ycIlx/[=~WU灑ܞx;v2rW!OcZr<pzrǯnQЋUX3q{r-/!;1ӑҤv0q<xMXry#q ;9=;.x<^Fss3R1{c5IޤMG9<ې}~䓞E~V?ԁ[06`3qEdr6;:d*E8g:TK=3^qI1 .9@kA# ýO1|Óg>bc=rF{sӐ/j9ފ 8#hh..2A8†2_\ԞgBFO~#RX{+ A:1NJۺ1֡&<g ' 9I@x=L@s2z~U!Sǯ#:9:)}8; z8=84!{qc֌g!(ryE,}P@pPq9Svb zgXP)(%z|'Xc2kI; я'{(g^ԕʦ{O˅(>[.%pW =zq^UWoĂ/ {z:6YpPfdsԚOP8vdM`i^ZHR.9UzNԟk~fj{t$rB/Bt&_p&?<S9 kcεo&eo-+\@Gyl3('${Wh꧱- _,y2 3 eg$ lg`s}jΘjsF 9;\秵Rb9rjzwMCJYCm,<(uLWlKG6 ǨЫěvm $G'=FU(K~W*Ji^@#A$ A##VZ3SV+捋yv 6pnEtVϖ1! +9y5JV;\1ps'wK6InN{t*e^dmLr㎜0+f6(;㊟nܜ9H9hB}d=8cI@0sN:Hy?]D'9HO'zl~?o׎xd 7ǎy# ӽ:О@ ր@<''{`)0q0x<«֔o/ &3ôe'-^)4ެ#U#<㌊%;o5򮻘ٴ1 ! 5Nէ䄒[vGޮ709zj#Os}{5 c%xti~.rl'XJA;-\s8}2V,,UAYƒuUKyv_,1*/9g+U Boz[6>_Nx`ﻐ\k-OH1ۻw#ޡs"A FDT3($sۂ lcGԒ4x9I P2N٘ݹ@l[nGzjNSm̭xgz(8Ҷc!;y'H>`F8#ⷅ$ӹ:?ဎs3Q2U1B,6FJӷCeWϡk쥾_-pU2pO *_bWAUM)zg׃MR.ut ``c<`sI0frr0, 䞃hꌝuփWr,pex 8^sXRI]m&={RΪa(҄i|ϕ9=eާUᕊ+:SM.$kS{SѬl 9 g|7㯂زK$qȒ o0 'g ׭;kŽ[,'͇d.FގWZ\_|"|} c?νC:E6;Bt'])GG{L}CpT\Iݑr?Ky&1[}`Z来z's:uZ"uO(A$0{m$dy.eiMeG_=sV[=W#._"6m&Yl0;ЋQdpOҸE4vӺ-,T-vNr7 Tt5u='zכ)j&BLv1N9'=G1F40r=sUYzoJ%v\9i#yUC9rqzzzR-Dr~e<=1X##;rT%IdQ2XH c tKd\@lv#OsV: :7H!$=GLS$[r=zGna3rT{"➡r*8\{u\Xdžtr$wsFyp'86vϮjCrI'#&wIgz;CyJ"AzZ9asϿXZ)ʃp\zbw '#DKu9O\-ǞGPyy:FV8PrUqЏGs%:Ve$ 0zc&:a8=stz%8ey}?\u#$uW?z4#pI qs,w|ʜuϩoseI#ZJN['9>߈օcl`7Hqt0x=?P\؏;{񁎼ʣu8E MǭJۃ8N?=OS8װDcY?„NzLVcq6O뎙x2}s߭qF7sxJ[3#I;waqdysVcܩ?=zfstȸ zJc=vW'eȣ;2;x5xYC'wfSX@3gS}WJzew漌g FO|ה]Br2PrI' >^xPKUvm[vmsӞ3u sOL=jpTvOԟw O;A#}kwe('k?^֎9j68Aa'ic SKimiv(J>xn(~kH{.2kGGО Wm$j7Z4f0ɒ(GʹH2 #B}/U%e;P-dMӱek叝wx҇-I-]՝uZ6K#˨3f m. +,=x:>h&xؘeqJ'm)eYcs3_/ @~q[ws5s*_ɥ,#yąWc.s1޼j'SEѺ7m"F[ UrxRmN#XSsE .[1uNλ.7S. Ԯ ڮk̐[jwwGB!%P;*TTqIN_"y1>DNG?"~a;kZFQ/6|NCp= gV(mNHܺ n@<=z(vq(À޸;ҤgF-s|c2It|Ӣ܌7s|Sc T>qu\%6#?֮*_4{rzg팟q calub,+ޗ |{uf0'P~(|' 3LnFǎvkxJr[P)sg$2[:YT PQA'}ejÚWdZhZfC82c 󣬀9wҔZ{>8oϡƟJ _ 0br#H+t?. k4l2èKc((ZH²_g.A PP8<{k:JfWUiN*JMNwڊN3N:JP+ 1۽|3ACFUPG}ϞU8=.]\.s8ϕ3}^Z]D;pGp:86Tz=]Y%/=~Fʹr<BP(lHsG<݈ʫ09:b*힌3vv0 q%܀Xd@w`|w;HٳЧ+u}-ŕ+=tOj r)ʾè["XDip漬e=?Ny;PzUc ̎' qО*`$z:zֆ8= ոץF8 *@`=Hxnss'0: {Zq{ON8;Aovֱv}1sX`#8mF8k3ZgOlWf\psB^4SgNqת-(ppHaB8~sU_A7݀'kS"q1$>9o'l>}@AVdM:99a!nzv[ L?$qrphI9O\5|` 6q1STjI ߸n ;8a+;#PC+s03ׁTq‘qLz2A^H׌n\cS_)g>/SzgA:҂Jxr:U\Ďg8<c*9 vƳNB'ϷTHnPw9'H=3ۜVlcӫz'&wF.OΥ$<{rrk@sӜ:L#[ {v7r1P1?ZQzT0< ~Y\ ŸsՖ 㩦qшAzVNwt2=p8#jn;'>Զc8x==zwg# u;q8c\`߀#r =ߗQhqr)\,(;G<'<~ywdwsӽSw@ -6<ӭ&xG?? 0.FS3sYntD:uR 1xu4c>;'@8&8=R9'=50qAۚV@nۏև:ϺIgN=r:ۚC q`g|SIOVP`sA d?Zr3~[G9?)P8=xiDF3{#{g~q{`UNp_^:z\|N9ߟk;~f Ѐ!q0sa y9]T NJU+zuڞ,{ߡ/Ww`}*+\n1K*0C'ht.?uV _^HlK36WJ\֗I=7ɜm{nƅK}&Ex4KM3ผ63ܮx.1<2bXdn:´Qsg^87K$琌]̇: N,0KEZnmkb8^S\w="MUɥZV (aJ +mmZ),crFy^F+Ϩ7;0~\w$vp€rq'np:j۱~YHc;'Aɯ=lz ˸+6 ue8܊FH5SȖ@D\+G'5hMvDS`<ń"4ao`.'k.H)&QpIO}]I$4iŕׁ``E]&"0+h},(Vl'8Ͻg[gCNLGӧKKr!iVPo*OA] v,uҥx^"&(|cJK$?\đ/W}YxnpQ=-t/ViA@Pvn]x6 #("8 b?y}OrU]rg+T1n HR>ԣT^OhҤCNXaT)};M1|9/ ue9ltS{S|C󸢜R1Ϲ0+gfNT֍J+>7c?t{pFAx#8c9|;u;HVPna Tӟ1ZzȲiicɔ.2Xmm>ɽż4gS~qFT "%fGidb30 R3N/ĪZ(lN9q̹QwI>-Qz}*ԶJ&3ymǒ7^zk^@1jF H(0x_8 VJ$G.y\یݛјD˅;ՒPX1B ،w}I_kıƾRGidj['9P05H߾N QkZ{2y֓yXJDZD,B;Fsѿ >$$ $bbb8]8yY[i+7oy\.[[]yW6\1]d:t4k) }:0хyH|>x88E9N1JI5,[O^dӺT~AZ_Lvfxm\F(I 6w4%Yk"%0^yf٤r.diԐx+Ofa'v:,3)?dddnz0 |.|Vݗz>fEQa**ar3` XϥrVHKtϱiۉWەpp L שrB:wn{T<`/N:?1;c-r9'1N\`Ot$3FR޸$ dr={P!@crp8>⎭pc{-cq'qn=sE =ݥvT쏛~n~n}ɠyxa}qONi܂6 "zr[vz Tьv;uH7#v =}8#=׿Q&Qnۆ`==$mAc>=? `OaOn1sKrKcq<H=QҐwׯ h2COMsj?9 qsI:0$Ǧ3ǿ <Pr R~N89䁎Lq)PzgǨ1@'qNþJ:= `뎔#LR<``Ӛ@7q9c}q۠< 9?94r2;vq#L׷Jv݁2\S:c9֐t=2z>VknHhF8'9sx=s{dPpԞrO?Ń @<9܇,V>iNўqmN@gw'=:Fidr:N~oLCN팩yG` `g!{8?G=3@\m' 18~ В2xϣ}Hdv=?Jz%I#ԱnG\GnI3֔F>ʓ~cc>yCQ ;8lמ `)c=)$ # (?ɧqߒ$tBmCa($:s #׎B2y#?9 9Vx掀7  H@ێ@e`9#}?(#<g:)NYIwAzu:9 cF:MJ9<d%@yd;u8n`Ls00@Py k` |RG|ۻgn7NA u9Ҕyc>a$FO.dz}tP `ww9G'Onhq> $T8ۓ8,;X~|[ apz8!Fzq{Ҟ:8'ju=O'#F p#qq@*),o׊y@ 6ta} uҜr@8 )"el0~lzQI1o<>bOX\w뻕-2ϯb qOTxlsOqlpwtc n>mQLӨ88)W8ABI08R ÑD?'Sr;~8&Irn W8x>I;P8_לt9($3ٹ*ƪ;ؖNyc={TcorF@G6-,r@G8^=sO;펃qEn?w8RI鞤01q}S@\Pv ざ`jn: l0= I'i=`.@_sȣr=@?/֤d#q' pBb;plw</Cx(dR{ewx*i뜕8ҪLc[n8ϸڬ*eI={u!6(<`e N~SKrs*Wp3 <F[ gyPɇq 3}'{G[%^'P@v =Gあ1S(8$06;p9ޓr3vyA2E˴'cSz9#0psЌJq$v=:wڋ =g'sǽ&돦NhK&lu*8>V(căӯ;Zf 9|\#rFpx`zMj{&ypΙ"6bsק#Wqn(?swWu}lqWSTUw tϭu$"rfbq7'js^ 5N"ms?# I@(…UkƩ#J\Nk$![.ڟ3hc|RA >vL}H|&SGl}q{>]LoH`[\ cyEL3(.UI#h^1v1v᪨=v0'(#W ".6tcڽCSPn^ߞJjp%KGZ(2pwSp3]m`Wf4g vn TkgZ_z|Q;X/?c&ї3Cy*ʕxJ/vG JJҦFy,0W]b[(hf`,>c=/T/Ϋlc(sc״Cvn rIס۸dc?7aP1rN6:VbWl{=) #sϠ?_Z!I둎:Sr1o=;usLLA!tGrA8'-ӭ4H9#،vFA zn$'px!vdcR9+"x$#Ƙ$g 09$ZB8n2s0,?;9AP?ӵV8WhךC\|`t$ ol`89:c t( llnpp=P1NyNx4GlLG_J?w 8zwAĜ`w`I\NI?@1#ҀؐAzhO\#z(.:cҁz11郑1ׁ h>pLQgw JAьv2A? ;yz`܁IGץ3A> 3d^b ^~2I=סGBA>@힜``AH\pd?@\݁⁈WxOVҕHrzai #atB\#TdnpFq8q鞽i1ӧA9={zRzˑڑCy.p$3\u r:dmD¯Wp=I`x8|&[rR`8rx+:&˟ nFO@J.2[9 s^69Rzu1q&*os`yd%܌3{}ӎNko8=Mh,^`*OXո 3zEƿhxڤe$䓎_Cۡ\v tJ$M']ReiX<)*7 7B@x"RrvWTk0EdUn/=p*gT< ]ZH[}xKU0LbIôRW eI?|E (`c꜌\-%e롭 T龍7:de%r͟xڹ;VGvyD.9ۭE=~7\}ܐ V^F cFv F8Nzj (m$b'4gګȝ`w d.y1Fi.~95Ve ;0GLjh3ʿ7˲HйP̥rq=hRJ'"زnl͸wޚ!dpU,Hc\Xp*7Ie+!X;Tĥ9i9tmȉHynY>jݒ F$ +7d'5/P`UWj"dw,Ov{34{67X O$F +tA+l7vÌ"эh;+k̏STf\8^1C[mYT$;+Y{Mʚ{GrڝMbFD܆AS:uH"q:vvkjQJViƤ{x63tN׵>:|u < YPv/\c¾hQh²BZFIv[5#Q;?_&|L9=OY=M]Z cx12 k{c-/W|p]=ʹy\*#I!5FJ׷;0]iٻiЩxWN0նE *F9|t\GEOB;t}= ^ΜaKq܍T=Q:]y{oNY:JG~rw&7+qf#o#99?aQnZ7^6I*@R;Zӵ ٸ`9'p: pO[4Ϧ<z|Ė+}p=8gfF?$zǷz:\*0u` x9ǽ\ 󓝬:sl"OQ[>9<2;~yG1%%~c.z"v2?O|{9F_#2wKgs}1U H 7O=})H>y<۞TyHn$urlBXNwsd2[裟<Tt4ƛLSs#Aݓ+t. p3}~dgČ Jp#R[Tg㯧z)=G  KLn%/ ܃[?=}1qSP'<*OqqҺ|^'foCn8ӟLVg%\A\VF3P0q޽(l|mߨ {rx'y88c|ҵ_>or' N}:=OagmMH ?UF2ye700^G#V٤:w1LJC1Vg.qӟS9}2zzh?(3 BW=8'#y< g 1؞zp:)A#8'#fo6<|:gONUB8'+~Ҹ;\{Ԩclu9.Ug$88;si@ApH㟯4#/ `w烏Z' 0Gd桱NAs ֚dw*#<ֲC8;SI8>R4!fRszT{Kp;O=(R->gU$brHS޷-Hhsp8'`m8:XwRs^ lq[g==\&pWw=Cgҽj.=]$ g>1U!o0)'8bàg[KpH6J\V4 *]Iq4q :fR1\ӂ8@#|^%dMXLxPv@2xkBFT*H~lg;A\G\ףKOC__jODDp' ӧ8"w0YzV<9m]Mм?>cDI?y2瓓=}͍41sY]&f`|#+6Klg &/3Eealm}[Ǵ\`Hى9|I#S)D2dO *U'v'~X G\ {XF]H*@[+'V۷sמ\#kݠĻ#ů~g7%ՕNv6[g9<` Tpij2 HYw0( ߵt'|t7 5֡x֏g mx,95VϚ;yVHښ|/GkāSleVCqzZ1̏4xY$caQГRЭ7h]&(| z3zӡ]2L1ROoS|;"]LGѫJzb.'R H]dzu8=ҪOݿcԶF=UC㒪IH9ӎ+sNGs׶x4pz/x$hr&SH/1x<HI7 o/,2Sq~kR%Pʯ$,\1ǠLWDfb%RT=}cx߄|~xe @2naJTk瘢kXkyaUsbFpAW3(:T[w\c7kȍb <ڋRoUL]:>VREݽ.!{;e.܂>a^2Et.>Vn3ϟ$Bc ;T&Q3 N8lߡ4ɒmy S؍o` w7WJGh՞i偸:X;)qct-pK ZY,+Mȯ[Nke64<7wh+8]njq^n"q}{yCt lFG/&pry<'x^ ٵY9ǷBH?n9 xxaq$c֐1=pnt9Xi8z9_8>ZM [G^O8\Q֮,`sG8#xϠ=6=OЁܜu{;39-]ϒx<5JLp;' F93cf@k9*3g'zW202Hu] s"s<;sުfUPID=O;N0@> }+~-۟njR##ABCZ(qNM N3#'g?x|:? yn=j`9 Py֛R@XA1޳ 7 ǀHC636@{^)͎3q'gC)t9ۆ9\mWwҲ@(l1Ϯ ssЂֵr3>ڣ@,Ax?^:Rݑ՝}m#1ArG8ۯv9ќUEDZl`v{sޤOsО{Qsn 2:ګ\rIld{= =?(? ǯqIN?.3>Q{~p&8sM;;:d>J9g#4qŻ79ӷ7F_:7ҘٺǦ[? UvN2I㞼~FANI?wt[Sѓ66r>Xdy{Wu)\娷(y`G`}yIFvc Wjz%6ӝ3;s\ 9 9.3ڹB\HrI)n䌶Ȭo~=j1E+n' s^zpB93@BNÜgtPFyQtp 폯4`q펔ۯ;@OoX3ӞB3߁ގ'GWq91?5,:s?'G@< ug9$ *v;'ƙ^O{ `?Tts<}jaON$@ gNq}EiG}]489!~3Wۯsӊ!_ydb{+gԃHn?uԽnHAsJ v69$''ŒI'#o|w!$vݜtXbRT-'秧[q$v$cvo-'_6ybqwO'+εPlnnf++AveopNsP޾Fs[g˞!- 渻cepdb@<JCIsyh-82:-y(QcR|~{o?nDHN y2Hc-mBJ[Oqiu5ēɴyEEmaKgF^{9*&)-; N;$c"r9~F@i/%S 6{[Ik+$|rrEDCcĥ7syA,VaFW#ye[SҒ%#]j~og];Lޑjhk|~5!5U?hiHʠCJ֏$o&:-g6aѲz]mwhe(Mn2AWwZy,gCJy'V p{֛MoVw G!G`dB7J2j6Rl.mC#Xض1ܬp0A<jdLdwdΑ6I||er2+<%RKyH/,(dxk9Ğ[Jobiw䒻>xZΥpL3JQ>^ݫ&I5s$]ovT>=pIgn@nvz~\ Aۥ!p ~b:=4H`22?JgC“;wAҸx$?.Ӟ?Ɠ_39g;8'1\g=zPr3OHw=72yTN3#'8/;!XZCl<FGS(F@WWx9)u.~l`~JfI;q9~(Nq=r1M#8}(@zNN8r8RAg} 0Aߥ;#'? 3@{t@玸(ŎzdǫzpGqn>$>QAw@m<=u8ڙڧ0G^ߦi2qdpO厕&'q0:ք4G@8LGOh2 >ign 3 0l2Glh' nGOE!1@p~@9 1}h0јAh㐤Nx|dsߎ FIӂ;S 3Gzs_ZV *J0:~|vϭ7'B8x::dsАǓs#ps0=O@c^H3 xUNHӁ1@w$ەa䌜tgr{G^I*0A9gAd1uZW8!mcǯ-u8#$*N65R[`@:r{Gm%H @;סHwo˯S@ #1Or{{ Ĝ`0t'wuR`Tvx 30z{fYDQHzuG@A{=)k G=NHN8ޛMpy?Nt P/āqI 2Nx0x瞃S#KrKG\$/\ H q8=j@NW'RN:sg"LcΥA 8$d Kɱ_Ǒ׊sm ħq=8ǿV.<>BRz>M=Lsz朿4HpG$㟼2r{O0s=r)E#靧Ǧ{[A7yqUO+uMPQvĐ2jӷs q<+\בe Ђ.S>,F;c=r=q+لyb˜ t-w~8EеXYavxzp5j-u8q[_cF.E7(pJ >RH鎆_O񝲡 lN#?}4y++&Fi7k%G$YWz~זk??x΃a `<{tʭcms0^2?&Ab? g +gqw,;s iY@#h,#*t'sJֹMn9:]ˍ>*Y@ܸ'Q!V wK B ZjLbi*)vY7-ѭGr+~a #iq @^r;K8 7n; To' #*w=dȏ{㢹C*=8E#lNNҭ:n>xjxݿ`q=ntcK)r0g9ވҦ:+w[kc/jVFiXTx>G־fԵ,l (эuwJ}ӗBm$|69ڍ! lbF: Up)@?(<$s^[Ϥ4Fv`HRr6ppy7qۨk*w6N{59LtH+UYܑ#7C1s+) θr?^<lnNyV~qےC6wз|oRp zstMȤ\( X沚LÞӢ_꥜u `qʽJFP99~P}duc'H  78`OL6OrIdL1ALCRdBOL 0!Ӝc3=zR\ ;|ߘMM<{g. <^:<yg0yGnA'rsGzLrz@R'xq?;rv`oR)={ u=e39' dp?N Пސ <r{J`>a9]N7z|q> Fx~~S{p)0gHnRwrp ӵ!>g>>V:43'p2Jys@=sp( t#d<"}zd㎜8h1NN;q@擿qvu9aHlv8NIs7a69<)v<jXf]*6,O=G-XB;vHv)RIF[zVGIK`OH9\>6tgUV >(¤Ȅ ]b]d=;^`*yVPDwTǐs{׵O18s=glG;> ^oTvoZbqE:)cpk5Z-Khp2Ҏpy^2h/nJO;E6#̟T&vI$F~LpsʜcjmA/0+1g~9"nѺblK}ż)ʌddF$sr?fB~`FN y^}H(]g`OͅdW'}+;LHc.2Htފi/SPg[a(9S;SlN,g.O''ҭ@DQFGSq3Rav<ϡQд-F~UVeۇܚC.m;wA*Lq[[¬G$Ă{~1Fm?NHv}_k6mXU&O ݋R02 ,IaN 9Sץs՗q3OA9.wf#=sOMQvnX%ԏNi)r),UݴHAnRi 3|q{c<g82I5㝣%Dh v#(pjj9R;A eϩsLauZK #!\dc8כ^e!$mmplT(s3-Lí>Ws J=)ۇ۽|<{9ͨO M̭g,I-=Eum3:rP *N,SI-U\H̍ Q^zdS'I+ )xOC5e_xYsdcNgb}]aCdu

VoZ1j𛌔~2E0{DK&VYі6)'=|7+-RWIRV3k8]' }:zɨnGE4k'FYV?CӮ1^Vem;,@E_SzpbVziMUkK%r|ĜwaJK7U%c0@^k[`n$gc8+>,7 7?w ncԃ"5$CȒY؍RbAG",DI#Īˍxf3eMVNQW!:VxAb4YVR2p}P` #g/=:ZHdmgy89ǽ]V80@zIoSVOL۰yFOOj\ :\s&OS[9lc9ZRJ$-!9O=Qn'9q޳sj$9\gdTN>8ݐFY7̤B@c}GNY3~nLneː_d6w~~pN[ۿc#{ߧ9_^]\p0Ұ{ ".sOud9r;ƭi?`y=^}1=8',`{1 <9/#ݤpOJ߃1ӥua׼p6gE1{f!3k>oP##q'#'Z#8zpyBݳױҘs;|޴[x'Npzz`uIsw9,~b/$g=@j܁OU#sFbDf9ʞhCϦT't[>*D#h~f3߫P8}GQojiQ퀣#8#wzj+#CzքIsP28Q!ppOakz#as}k}MjFvB011ֵc|';WYtAhNǾ=;gIFlN:{bL 99ޣi1`8r g'H$?J=ʸ?0Y4L2GS~J1j$^fy3AГ}48olzg_) 0s@Rع'Gu!ouut+%Z\j'v[~K9;0I8#=dr+ZL+l.dTg{ofxg6D?t9'^ӉSsuۯ2(R6ls9+/6Tl8Bq*g;`d:55L,R_n7(Fn5> '&6-'ڽL5.vZN"wg؞6(v8 c:W[BKG)2]vG7+#otk,L3اk{:8ޢ+-y$䲢G̎皷gCg.|1e@ѳ:֬3 ʜdLug7]rO]znmA@a!TV ݾߒ[{0KnI@_)UF¸"NyG911':zop.[$1wD/r9d :1?Ξ f8 pO;1T|O8'֙惆$`0zuqSXꡁ#j ܞ:2O@8SoȎ]~fLbw|_O|H5_ DHiFS?|s]4g~δl|M-Ἱ$WIF~ccqOJ?тb$&2w]dc[$#FmqJ9W:'T˃|>ꭨ˚6*#n;4f!5ȼϵzfë3W1 vH548j 樂8ݭr\`]5SMN?2FU9d,w Lwhm^6?gٻnqUf'9*=U7rЂ͸᳌sjUE+v+ wugQaGn;=Z:,ٺKyl1єr긮Wԝ={L#j6zY e2t,p'u^)x!IV+`hߙ^ҮͶ"YKGq^"m9<yB_3ЧI9䑴2N=Jh>6H=[]#x=:iќ 1J.Ǟ$p vq(Ƿ.99<ԃ wd8:F0}quPNwvh<53bm ܊oiqA'hZ[CN)0;zvګ.@݌o zv8pGnHSV n<RhX:(``tݎɆ:G_rǎN4 ~Rˮ֘ݟnq3ۿjNs~C)[,R02,$I/'5͕b]{2eI9~THs .FrCoLY9:9=5#҆Cހ=dz8]e"۸ֳ2-d/Ө=[N p7ixqG=>^GS֟A95W9FIzc=*LT2.@Ͼ_Sq40 V`H>aHޞ?sUp$8mݜ )wscrLqW͠3wx6G/?_jcI`sݓ#r y?sr;|-h;?0*yb7nepzu>Ah${~>ϐ}Au=qֲe{< >Ìq*\g8b p}u1{ =?H1ۺ{R{\3XJv?1 w:P #Î:4@\q_eۆ@x8'hGӷ9=Oxӏ֤'}&\O9x}l?ֺrWٖ9NG{8ǜ(I"ys,n:R)䁗Nr3+u9SV䏗'UuٞSǠJymgd3k%I%Uv1һ!k=kVwuجCn:>s^]{yVLB#zxj2Z-<ڵTU}n[r%k1kx^܉^M< QѰ|nuI-[f`bh'$MWrGrr}/;/jI{}l7 jSA!$:\fԯbӿZ79L6ֱ13wRYhrZ|]@MlZI;FpeeC#G3 4D~T'StboCZK݈㍢BӲv뷱9'JNxw]λX.>1C#OmaUPv2sjK=EhTtKFԶ~nYg 1Y=_U}κI(ՈR;qrAOކ伆kZŌ`u4Vm߳׮[s\viܧ;$x~](Oc"Phۖ6tbO's'p9ECF =Vյ [k(o I.YY UInI(|9a.usk6ody $aݼ@3]9S=E/~j־/xvMCRK줆̶+Hie \){qJ/5V'3e;. z(ڻjWr93mqj-m9@9Tse%I` JH^"'(|"q*R傮>c9!`Hޥ9B %sV[EdC7f>3G!Q]ۿy?X6FrAtXȘIˆ>u[Kfs-ILʩ# i(w2GC|dW}1ڪ1^r?) a\DKf*`Nz11,W*#!eǘ;c>@ @`H'mzLs!^}Bpp B`y&Mn/$3|2+81}.AuqJvчrgC4{r~}E &6 f37;#+$m[_lK_(1 pG2Fq^glKۃ[q汞X+jdV?$|8M&X[W9$S*˒ |rUP]<ԍh1 F<ϐNNpMzwS joG|X`Hw ^@9 AtucG@.AѸZV' 'O?v I@Snۭ4&lڄ`xB`>p:"`XK( iƱ4gMȤ  8#e=V< /(X 3twg].!npXF`r+ :EX{1O*L+DczwA 0imwBkѡwX]O3iK51~fn[X'&Ws|T..D(R;uN\yg)Fά<KfϵsQ&@ڊ y֩ WcbEQMݱ=}A tHL$ノzj~[;9vUn@ c9'w zBI?<񍠐AMBFyp7zv~o$O@!v~~)uS<9u?:pr瓜w7$99oˠ0qbp?{#86)'m\rߖH`pv_$ztzԇc3Å@/\ !#=xMGNqltz ds{2QO('?('R`5l }O4s2^zz:1;ujkquϷH lr~n1J^99zq'8?8FO#9$p;;ch~f9qQ4 ?x:A=1@ <t"'#O}(S.rOE4 d@=H8w<@@ `1@;wR3Iz>G{f%qmȎ~FA%;>H+}RLm$qn9Hhy'#R@c`7lbd8H=T\cqAx9' 8n3M$=@>rpr{9Ot#=c01\~A88n sr 8{zSw8 }dd!vFpr06O<`qJl?BG 9n8 >g<zCrRA)(l`Ӂ^Z_"]#kl{M$^H (us֘ÜC #(;˸`#iP~^3F2=?O l #nȯ,F'zszct#=M4$F È۩A\ԯ8ڤ1  \WԈNF?n?>}j] oCv 8=G@r;;u9?:vD 7s;g ~oy19 d끴2} v!r}pyy<)8#$ORM#qsӇ<4=а`$o>ԤE'w_ڭ: rp:~5 ?\jU)3vu=osR;.:cۊfTBǟ~8 ';LQGsϧӮi0>Q2{t#q;y9 \lc B?RA:`G{ޕBn`)r6ERm#'h'%G<JA\b >'z qigig9 s߯R#'r1oUظzlzv:w:,qsmKya\1ۑӃGm`Y8sqJRLScI$ǜNI(a`_($g5Z08`WwO7){}?[# dl#hɗ'{J_ :1^98h*92p9ve#!ضX8sI>>t])8=1/"b8r2NH*JH%|ĂpF:tzOS Km*RVl%nY 1O=pWW.ȻxF`%zuz;cd(ϗ4Ip1=ޠFMUHRf*zp=Vtn #bB @N0R=pu0*ּ P sVѥRt/+"~M$[x?ΰ*IÕ|dORZO~9*APF‘I 9@Hľ1#"hy\b]vyO8 r\]01ۧa<[%Iic?wb6`1Ǯx:l$#>7y`2a';Tmbamډ'rTI#ڨ$ B[@?`٬W$S:m @X ǞzJRqcr)\Ȱ&'ŏ;m&8\< O8S{c⫛BTu.;9&5~1A=sڻ &|1`6Y~ۜ} ;)+ѡ\L009%1r9wl37'A^2:6"6L#0I 1xv㚴b9ہ޸RFݠ<>(!q 7gGD~RFrp#u==)zzF>WaVyRy;Tnc2{H?/ o~GJ*9sc#$َ'.=|@F9&3#^?!#`9+# q@{qGL`p8p:u39?_ƀ9?7ݛӃ)y `3ӽq3}}pI<o͒q94䌑 2zц:E`s׏zSՈ#Fs#:OqgӚyGlg WO =({3R`4Azy_uSB&z^;>F3;FO^í&LA=(pG8]32i 0F0ĐI`'3Ȗ/@v)\uhW?iU+,d+DDfNԖ8=,03ӟzw"&28ʼnrq~g.Y4I|M2[lps¯!(ܲ)r;)_DOvyEʎHS  fZ)0ÏN'י_Fz5ҍoz:砩ౚƱ ;8#a89=qhm% KVtّ F(/.$)u S4/遃޳bK)z)"uW,B/HnREuPn7 dc}`+GU$J0onNٴ[Tg< s.M/8SON{q|:)`Im n?QId*+hWrw ` 1m}{y]'|m^B"%A''s)+ӷ@&A\yAaۓXFFR9Jpx=zҶ`I:.нw8'Pubm'v_5U;!Xq9U,̄H~:=͢}OX I#;\z׿ى 0NQħ!XbQF'<:{5K`{R18$lȫkxcюxVf GFS=}>Xoavq;G׵' 6@`pGOL hBRcoBss :p9$g@=Pnj9}\U<: qW5ND |(^NH8aSrz>^sFq^Mg3 B`?¹|#9J?(׿<4#gq8g8 dfOStO~ M p2}>g{Af#lWZ#ǭ dϡa'Ҵ t9\851Xxqiǵz*sn>,]}ʹP+s_-ݻ''~ cA:\~H/pb29$ ~jT.P` ڽ:V9j-CP,"Qwy'k`^{7 Ы$"Zdag O\+ֱ-SGxCKY7؜@G_rhON#|eFN>SѪ'{ 7<8#gn 9 y8$t' 8F?0l4Ģ1;6N~'a[0vʌ\nڪOelI pHgy9@<0@Fg8 qrPyRe܀U:r+2ieH#$ʛܞ[39ܴd<|`OO1%sZe-R6+uUt%rN5'}U ǷT{B_6j+YDh̭Ac⯝;N[` 8~ȭ}pi=Il@;CZKوXɸqo~iђZ/K3J~~ߴG =֟(hf(WprzlG2lxiiC}Fq*0Fr泟ns%2A@=[yXm|{o;sk4_]iLBX&wH+TeWw$0Y]M>itJZZݫ ys2#>_fCr.m㸌$7Ȼ][Us!;dpFryB098< _Zn |1zӷ@I'$~^b-<ƞ_=1EC8瞹#ڍ69݂NN==*+\'<{tr}"hx?=vUIGv{?uErE8< GV[8>NnykԢqM(F8owEX]#a~iYJ`Ќ?UđDX`_v9ߚ,D 98zԯ1$ 3;qUY2١ai${tR [&V<'8%O+OlU~\8NHNt7 2C6q]$(=:) ?Cfv7aLӅA㑌݅}Lq'oL4O#d9}ϥ^\ gnFi=5H.ӻy9 \xssz~DGcA8\pxh *g9;2H[(Xr`A1Ӂ =kn33>f#tpS8vݏl끚x9dN6zd^N:TDöO& :dTǠ)w#9x&O`~u&t`gI=;qӱCuϿO' 8<R ۨ$G#:Az`2>$~XG6G!G|<`/Ob3_ʫo'pNz*-Ϙ`}>l:e{<^G^~Qz/l aF~`>Y#?Lz1z9>NJOir89qJoFvPZc ʱ23^6+<zA85Y'|^w*;"& 0=j9>z#t:;g=ϯ~m;q' 1_nϥfp9pG=k2\4=IG?71ڗPǦ;ڣ#; r> d~99=Щ:jL7c#N18iwCОx?\uןN瑁GSK@99hc֯Fz래n5H㭳-@N28YLnQ'ԸϨ8J{>VrG=Mx1?) N+bNMWM!n"$G?;q^`ֵgb}F#y$e0pV@x8 A5kI4|&5ɿ<-$Ƣ}kt$2'pdF"W: Ǩy?hH!Y\9M(Er螇Rŭ>]-/|3.ɋ`/WCh/ie[+mp_Ps[_Kv4ՓW\S̙!-EwT*erIؿ4 6SmA"K{0)1x@TRU6﫾"R_n49쯣dyYxc*7^K&2L\`qҾemu;b8YKO9wc8֪oTaVrNўs_ZTVb2:H7Hq' ZEȓD˵ż<4։k}l|_&>>Xb̻rC0nkfDXO$HŽ.E9rqڌD"tu#/%9Yחo$W8d3eKg^b';ۂ$$FĩFH{׌fֵ(_jF.exVX=B6р@RMY.JopU$pCtbxQ%FbItJT>UB'P:6F߂^yUjcL=Ͽ9D,-Q4aeFʻIo\u =e-Lۖ,`ev7c \GL",'h::GB)C${%]# 1ǹvJ`W#//u3|il9Gd_u@yO9'5۹Pvk|Dԥϛ- 1#`"v\*lcpevv2;>hX[bcp?/@s烂NyO\''*xNP:c< ;qҀb K'pgEG$û6;qwG jaX|HF:z;}ÁPȱs&"ׂ9's,2wl@*nB?N9?^ ̦wʢ8\pI~Q*+ܥ'?~w0Ł+' @s= 0(X xbJw8뎃)0!BgNЩj O$DHL9*#aG#N@ۧfc,IcY$Ġq0d@sޚ\F Fņ0ӌW[;_xzXĉ[k(*|e=hү.S"4\vY$iI)0IzGVwD:1.r0>w 4;xǷRW9b3ON 琀T=9旧tN43ǡ=y:K:p00NҼ_NqLpx${9=1AﴐxI(Ny?3oN鑎zM9wr'?{='7O_CݓIǥ3qF7g9'㿧ր$cxi2ps@%H<׵:F21ԓ?ҕ yF;vW$gnE<0O̓A98J\9wQFHx}Oƀ p>Qy?5&>-Hc79ڝ u0X {`z [$F8O$qH `g41>TOL`w;+.rq60sސ!M]3#~ :zS9Œ /s~tバr9G=AY0A}}zEU 8}zRI-E'p9uV9 dN89#?0A :c7|ǯb)x #֐=~8>߇i q gƌ7Ӡ#8# eoub36qWH2Ya1Anq|Յ 209?GC:sdOz$0#r2ҷBz sriH#Г϶{u vi$pp@-'Hs؀I.~bӧnNzz`"t2@q+$^>]\z}f@gOzU^w.A뎇뎇 cxI?ts#~N Оy><98E?6@rG;I:g}OӚv#:zz{Zjcu?4'08zƄ0I4"qyd,晆9v&8H]EP<`td{p@ђ?nH1z^٧d  wqa@& z XϯF1;$Oʆ3c895]8uݞx4GZaEq)$(}krp8IGAF(MMH[i'iR`Zʢh]Ȓ2<)<>r3ڽ<諳l"ddBq3qX1xc\Δ   (Z蝻 eW)-W8 c~55*i$u9\@Fy?JƱ0C2N f[ ,8-6JMсz+3I*7l*`a܌ NmxzPŀ<~u֣wӦE;ұf':sgm[i 䈢qof< !{Ȧyl:'L*>,!Dv\<eFue\  <\A Ad?U_0I,0YP|{sֳC0| XePGTM"݄iCK\i>ѐo.1֥[G" CtWƨܞGzb"ܫ;XunH9[,2A ֡=HnO'mQ#QqQy`ws!r1ڝD1Nd7q9g֯!Rۙ>݋Iϱ Ɨ6d;s7}9@X8SܹnGPDL1#0mIk@0[$0sͧr\glq@ GLT [F܀6:(+ȟy9#97oZww9ڠ?KچY,l˟1aU 6W/mf ;xjuOr`sRY䍭G t~1qWК":p)H?)GdtFp۞ >zP[y{<~czr:zH8Fp)81NN3@[Q2:SdaQ:g$'4 Ml`{{QcqԏS@ v ;py$r9NI9tDA^H<{߰4p07`gp:1, epG 7'@~zR=r鞛zO<b= ?ngמF=hUܧ8sLc֔ s1/(`0#%}{N @@q $2)pFH$R/垽篋:'۴ELa]p~]qs\㡤e~g2[4 FtV><lwupc]a*H'NvaLVz4eU7w0< 1[Db W$3=2)Us׆89>pjcCTO͜q\͝[ظ< %NG A89!8SpYrzd(}b/6>cG`?8's8Wӎp9&x4οfH#ܮ)Eܸ$dܩW[ 7T䧄~Ѿ[">ISrGNgׯZWL!>P2 t6;WZS' +da)|m2p҈47i T)IE+v8cQ ;nz6VKۭ+BB6NO#GXoۥ NBM]P'n? Jn2@JSxU,[P@w*8'\ }U>JyXRXap~֢jۓ2A rH#=H"nmG$DbG (@$ kpb N צ@CvC<X20|3}}*/̹!]VS02ǜĢ0铏lsɮx䕑s([cd;!{lЛNDwMȐI,@#B8"߽r <ގkOqҢǕlۗ͋l DC2V~]jךWwHb ^-pr I>PTmĬ3ҚVg|22qvw{Й<Wy|IcQFu#QD@!YQ."d2n෷|^Kyp #1j^6"k`/dkɺt F,w c4s\TUD_?H9iGP[- E}qB˰8Q ,R2'Mi'L8r ښBsYdRgץ\[kxHЧW Ҳ0ۗx{+HR\UAڿ0Z<2I,sc 6F=QuURL8A۷5@!#x'<ϷjWM# /V^$F#poш^rLFT7P`Cc)\[3 yUl`q\t]K*oC `n;FAzw'sqnkؔ`2[>bz4U%^d1U(8x#lzhΫ '8=q=ہǯA[7O?1هʃXtk $ u9'08Fv}`ޙ5ʰ*NG_{1+ە;8?Oz܂AS\3q`ɆAǩ$gsw@ 8\iqף$ #q\9P2Hf{A$r }埨qAHA>Pqp${Ə4dw\mGBpz8~>yv]8}g#ftaOXƶulm$ ݏJnu4@NsaVdB6}{A`|o pH!<0z|Dz3zZlr(?{##IϭJoe$|ܞH0[CY: cNr7_A'Ԉ`;y901V#b ֤Jpr8#qk.1dw'L 2[n0:xϱ>Un@ ` }~f"iFp Ãӯ&y .C"nF'ϥW+ʎ>c=G?~fY? O<{8hy1>:T$sp09 __@kKrG`3<ړ$p3= WYwd7?s~-FOnznl?/Vǽ,Gh{[n"X9ڟY+ p9㊥2"3Y08Wh?qzZui/;mrnNI>30~ t?$0FU]"|903y+/]Lݺ'gvͨi0K%^4l?qa! 03u6'F&ҝDn5TI#Kv3Xݼy(Gw5-]bѢi$ԗѯ˚XVs{uwsq&"h#Q{(''jՕDBrNNsӞU(Hecʻw/IEwbFc,+Yȫ32,#.nHq[T~+SZ\Go?tz0:>Wm+jHX ׹>O%Y-sM:֛/-KsQ21"q ; |շ s|ܜsO~i_BpH1#qh>JI^x8Aɧ}Ga(g]<}ϧJERN78nsӊ&z03ZkJvC~lثoyS=pq8*Lߕ$*8nT :p#ObA%i"e_<1wŤ\xz$qkXs^`W=c*H+oO%\1;`op(lohl[r:i|ͧh3+`kL.`789m\`ǀcn|j6gg|GK/.@[p8 9+( lO&h 3m*n#<֓ohRMb(Sʝ{_d|Sg v;{PP>*}Ѹ tO5%4}VDװh.fAB3r 5!xd3ۜqsփ[1yzxk[4֖w.\ !*4 sQE=Nk}hIg"hn⾉<{ zu+[4np$/;kCnͷIB < 2xnjo]q=:hߩn s:sN rd{zqJo A V*r8808<hhsӌcI=q$vImsFzܟ~x_)!w'==8On@U=0xOҴI1sOO=x.kS9?#󪬼g* z,קE)HY=<qz`S#`%‘`r}zQnW}gy<g c$I0H{~aJ֙?8{*4=el.qN"[ \ eHZwC4ap IۀI@cZ `pp;qmi#gk­\@QROF1ӹV}7q@'CwD@I3quu(8վSϩÂ8:x(=F ?G`n/Bq:ҶYB $fOQ I:sS-'#?`񷝤(zU$n qOS\Fzq pcӰ|ޤq؏[gj烎3zG`We8$q׿ٙLOQ$񓷹?u\7=qOx.9 A䒿TprTtӭzXw{|A#S(GGV5هZv 8+z==N:Kv9= 1<qs`WO-FpV1ہguF7G3.G$q|u\1孹鞾J"]z2We|woKGgkmmmodIbWq6Nk>B'RK`p} c^=F)7vm+sܐᙀWx'Ss$Oswv'LjpH,6r{rOTw;5˛Q 'Zi{gz3dāCG Pzv >eca 3 8'Woy%*L0VcwZZkc@H$w8n[kʑe\1ܥv׷ rJ+bpsOj,ͷ|˓+p{=jiJXTp3"3d)p8q+VT'#'ݽiI$8_6p}y!љTI sO_S)YD\w|>Dg2k -e|~aoXKq3 Zߍ VĀt1~@?RzVX]HI勦`pv)u^6e~X,v4bhcA!#9ƾuvh'=˼^rA 6(=r=Yd;<23(I\:׽Ǒ*pđH coZLpp}}h7}0wdx$~? @0*q2 ~L=U'pxskt=JujCDgWP98GUjYH~gnA}z~#-F1q2NO#R18L{&Rd^{8#'ӎ9y944u<G(sݏ_ʐl (N1.wg|ғ}[HG\⁊Aǧ6_3C>cqyO4I23 /ק4r cՏ@=8M=yu8;i1Pp1`?߽F9\`c㓑LNN1n&~?4z1׿=(#9\cdy4duyힴN g}x dsSGǡBb60xlaN$ALҎ@y8=,G\!t錐 q qoH:`@ @<s9#?,BN>889v #=i1`i9v@=;nax8'!\ e2?0{Ҏ$'LHwXR;=sKGLKg}' V(&ל 13=>:<73A `0q O2T66ǧ#8 p[)vQ ' z㎕nRFcֆ=OU?0+8N d =+#R_9>; Ku]@.qcqΞ38䁀;dҦA} 6}G=RŘ('{|z.8/0=:sޜ瞽iI;B9<KOgdv(B%Pz=v'BБ1Py?Qzt. f9OΘ\o<>sORv9=>W#\a<3tL?1q@8$csjh+H;rq?K =yTdlq5]p=3R珘c~du##ЃGRG9g?F1O)OqxLryB88=ԃ4_t2z~U =rA鏧\];XH#ȡLu8"91Yb19I0vP ) q\s}kͶ8v ^{3;Ey\U琛 猊 m>oRaiG~efzkՅvuc͝v"Cs"d2F8'AqYoUi"岅@UCr=[}Fjt[ROmح>c˞Oly%h+`2#*8Rujv6rE:sk^W+#Bwȣ{(cR?ZS1N e[ ")=Qa<%6%xLfdm[kHX"FTeCvG䎀\Q촹FId*'*'zj2RU zڎ{(<KGɸAփ`(X5XSnWjb 0 AjdۋTn8Ty`Sq!]ÁO:6Tn8IKR`W()TsOL˒+`I_|s*\Ôw /#:gK(  R.BV*d!X`8B6 ]KFo-3ܟ:nZX95+.0CH hA")>9>=1ޓU˻bC;6X09@V0rAbp:qlwqɴ8AL_qs_\1wu.TgF027+0y~H{VfBćb2pK'BUڤYb`ミRcNwmBzj977ޔ8ă,Td0Ho 2Y1jbh`1pus#a Yڠv~lcZ!]#8N 3>$ 7)|$`PUc|q=, uN)$h$6 RU<ϽtqJ7#q8$}}j%tȚ7-7> npHS}y5y@Fۘ# ׷JޛJ=CI ĥ \@/x8tX SϦN{zOwqpxݒAG|tհ~Px瞤峢ø@wCR$wL{RBNIf8T9 `c j Ti(CثFRC9叱ttwbA8= /^޸#^})>qLADZ#7MÀps^ ulsczќ>1@ 6`?:r89Hav~(۞$2ҙ v$SNɠ' T`t#>`#U9$pʎ'9A@#qږJ;~=izc?{@8Aq=SJ#H6qH V鸌(.$Ԯ <\f xihg]$gX0cJl3e n{]W*eb".v8\t#ja+D3Emwxz伟d}& Fœ79sk{󔼇iP[ /N7:tf $nY0ApT1’'I3V:KJ@. S>͎r:2N:NANzQJl'&T!A q<PyYYY:T]7)QKwN]GV[V,Oq:3,O/dqH'!@~O3; 5m+ٽ} 3s4ffVf noCYu!F1 y8?#n՟baF}r$_1 80sU2͒pUNydrxnu I$Rjo8zԎs ! x* md֥ q ͎1ӷ=Lu#<Pb`U< אE]k9Ē~2$#pz}j$esrЊIz>@`OG̬r89#sBH< )ԍ*w;v9%0R~?2v0 ?3cwW:ܺX T3dNɁ=:p3K-RU~cؐrIl0_ʚe+Hڎp2}:|gv HU *R0p2bIs#8DdqT s u#U+򟔶$5< §$ 9?{y]4mrHV>\9!yxw; d%V<*o9^[+tݒܼ;gxևP^iсʺȄ pY@ls+dHK?;0A'Խgn:TY W;BTzs< ͯ| DȬ]2Fc R3FB唹G [Y'&lqzm9G7q۱fȟWTVmr6AޒK^j;ob*Is)0erG$ezWcKű70נs@`sF:T^qazv6y +О; 0̋_{=QsE# [Jەp -i yһۊ VdڼCz1:;d{dn t!SOO-G2sӁs 99=8$~7\sb=kl9$cPOAץ7=du׮Q$n>cM;/v3|=T[,z g\L^ =)Bkp}9ǶkjFz. ]4>$rWΆ0q7`(놭xpn:WgW|/Vic'{1CǿN+ֆ#k9=p07 #ۯZarrL3[#yA'52}d=@@#N,up9ϯ=kV!#H99#uVfx3N9=kEF1BwwUӶԑN=p~מ(~s>),c$>'pp?ljL9=3g&2ʍIn8^8$21cnk :ǡY{zw=;^EE;i=@1@C 5cЈnyn8{U=TʲlYI3?(8~|CڱR!$#<{`D[3pszZȤ2 =rx7dd{\cg۽O1V g>yspNl'$N30IN;X g`ww{v!i8^QUPs g>VE7pygӱ+*y:  |$p0 v9~+ʬwd;֎ӴtǵpI3ks9 ?w*q|_U]f(0GD pr0qbkSؼ`W;8Hc3*Au hG\Jz$PɕRUqs߷_y;&2 y$J0珋zslf' XOnvEYJ0`qcڻ^ɨ?F~|[][A!Xgv9979/riԝrNFڶ%*ͮG%֒e[T?ZV*-mŒ4yqsҊW_+%N3ķ&Ϝ|7y%~e4ݑA+|Y+L<9Cg緭p*s՚=5E#ɉأnݝ;mA0K܄_3*/RIcsoqis,3,н-[v.HU y cE![8He=+hknNܠ~֔3Mqp9?;:)tghRFA_V> }y^ p)=MB7*YA9$1'8c84P!,q׮};`{ Yd (@d ߓ3aUoLcqE˨n޻_r3zr}0O5 Iv9ۂU3=> `gsUded a3ӁBC.mwCuk2-A'_ $3mz˩z2wjw?%wpvNG? Hȟʥ\ 9 uc͚'Z<\@vvsQ$d& rN~RONL=KF814Ӓv3-'32ZwiФmK 1R18Rh4=cΞ$`Xr29*FW?tt>^R(/"(HVaU;F?)֋(;:F'GҼѦ,[K|7ʫԐ=I |H,vJzՅԓ-Hb$^e1m`y1 @>V7My?鎒=o ǐ/L2 = Dnw72d{}h7g>Oaͩ\qyǑT>NwgqЂ{?ZydJxX9)NHߩk4%0` 9#Ji#nll4c)\q}{~5GqߜuJ_0O+mx?J/ǎ2^O=W㌜g;sC4#:~\@G8'B8ҒB.'hs>98 gu?/r_^j_L6rH n)%8@⍭i;39rNyq랔d;c<}@ȶ@'G>FT t;c\ǩ֦KCJo9b#pzvL 9:91qڹ&=+a[֜= 6өٮj65 sUn;qy3J~:p?tN93ʟagBfvzpzd?np=w>J$F~y*?UOP?.=p:z-Da89=F0Ii 1%G<ǥ+7#qJ[`zc4Qbݮ}Vh8GLdcn8wgMgdt FǷ ;'S\wtt!sװ1Sׯp:瑬G9<9$t9ac}=+h);W$s?JzvO8R/v<1@AOnIr1{}*{x篠8R=I郃9"3898 vI}? [9usFpzw<I! G3>`:c֫t&[L= ?'}I뢎q[bpH{Oե'NA^?3͙qN#Uu84Zg;p}vѥMqQ[N.ONǂ0oVdkwx[8Ϧֵt}]] ,.`Ib2$+1R }iB)ok|*FO-z3ֵKmQHm`Yp ̈~cۡ[%F~XqJKs ڇ! LuofҷLvBchHfVF#G}57dyʉv[( 570霜ׂȪ &S+;S~Ge%en7cV ld>xRK-FK p3q c$\񎕂]:I][P#,"K4ReVwya._kZԞ,V;lAjd<$g$M=R2kMz3\K{૘IXF"s^uvdrA@6@3WT]?eWjMa30xNڍ퍣9 s.wK*Gp8g|IH<1cir=Kϱ2MxM-Gow?5",7gOW#}>\ԯ~#΁аb3nY}Id+$|=Xyϥt3'c {y 2ɜn(ڙ;yzR)}SC#;C*az3(h D#\gPKBI.)X@9 pzPw>#YMM.ώHk (r:+c<5bɡ}ɍ('wˌ8鎕bX>ץ_JJ{xBz##w!,ⵉ),mCnM|'-` Xn`6{*b;`*I]!uRȓ q\aa;;V6N,̐včAsZI=R: wD9˘YFx˙4q0@r(Pބԥm>catnnS<$R+5n圭H4Cdf¹aO [}NK SO',ŸQ%M7&$YW. [tg&¶ynֈ.rj:[6M0T FT}Z>m<1k1BImV0%ڛCG!#,X{z/m4Z_.5G$ޑ;G L0`ޛCs>%ɵUX#1dcy0Iw*Web-cnrY8JːșF|+ aTj FAO=ڜN9P#}10X6F1 GN?"}) !a؞ӯaћmFnMØN I9BD#t:4;©fddf9Ȫث0c¸l =k[q 99!ND`6N)I\M}g&`jo[_ hDd}3_i4 :]OiM:zwRjI;ik<ɹRV'gʿ,u/ 깶\i6)刕D6Swvml\bXvFUhF'(=Ew>n|h%m孑-m"q U|r6\n#qZќ' >22FC=\s}ĉ`HH\`>xd}WsҀ{^׊p>98=4wOF#%ѓ;R`shGOࢀ;g=p7tuzJ1T7/b~as矡4w9#.:0O##'' Tc`3ЁI~lی/ӧ_Z N;r8:}i@/#qמ<I +:dϭ 1dF  I;cp9 nʃ=1O@; pr t]$x#J@&zqsʐ*Ls_jLc+g#j>A<9NGCHc1㑜za9 ێ愀FO\Jp ܐ>^'}hYlGjrv9 pn <_lwCЎ[.q#8=2 s;c8gTdsxsԌ 99#==Ͼ qTo8^d#ljBI3ò^~Ligj8'7E9>an08'<jgU' w/x=xGq׵'twヂy͓(~g#2@‚sO8<4϶uH@rTdҐaXrl{SNNFGC17  8ԹH>ߘh '3=Sc†g `cG?ΎP9^qf 3ր{ cYy^F=1N sp1SK G`888y'%ݓ`9 ~j>GnHh{@wci$8!x`9fH<4ӎyB7grTi #sF'۵8dx'9iPz1998\nx4c2yi.I;84g> St9)G>}\R>'=2^xnpJ\zt93  :OoߏlƐdvi0(9l =G^h;Gv$O1Z&2e*A7s鞕ŹSdX YGP:~u4dd;GSROs n E&pBKsǽH 2`@>ERa%#J3Ga\1l` pjL}qIq= S%t#װ&x#|u҄a{A`8AZbz2dOZrFp9lɣpcXRpF8>ÿ֟bn;=:{Fހ$u=;gڗaJɷ!<ǏzץWFI~i=2;shnqÚKVd 8;A=:Ͻ7>SӧgJ=0x?Ҟqqg :PNc9<-i 灞RIY$1( l={ y= c@AdQǽN`9h{6Rrr6@}@4j5`q.X@㧠jۜ Kp x9d5HpQclqܟ{ X%Ww_41ws͖ ˌ}=/<ۆONz@Lkq~b@$֡2B:0qfQTm^}R%BrIEB񚤮Ȥb nQ{9n9?18pXyM6 G97 ~,O \u.H$u=1qsSEl2zs'ND`d`@1’ ܓ=$U ''p28pi_Pdv㌜K$G>( )`$$EFrO뜏oN1L8ϵ)8 xxչ'upqaBG^??h+  wސ 0Nx*>}2:8(z<c5e.*qjbZҩcbrjHiJ`1@B`jCxL f3>$Q1eȷ D#RFs3佹{\eA&sfdi{tf_muf{$3##)|$|Հy扫\I"n%eREX]R!uHע|ilzXQ0ܩ9p]w%EY w̌{NzTFhĒv ԶxޒQU6I.7zJ(ĕeu b:9JcM~NP X/҆T-y cnf$8sj6=XAP*J@N?8lI'GWi%1v\`iDx#oU9Bx@*Ԗ\5YBnpram$d.v,s~n:qS2k]Lc' &pJ[X60 ?obRfpW` 2d\w,:.Upe.q<\'ܫ 1,yRa J"T~WyR@##91d+W?*ppj%H]a³?Ry atSǥU" ͜!<S0;]vŒAj."XB>s={r*$:9<j]uaߕmˌsSg B W jh&/iw6itksഈ+HxTLdo>{I qmc _(BQ{޲9s+A3 iPQJY OF# <xQбIQbh<`O` ^##%pAL7tO$3ґE͒s8VvBU!!2s`gY&\W9 d+bI\c;zEUfHFs9⾭o&VU" [翥iV64}Eil,d3mBI;s$sW{nھg=J{|Roakȭx Ipd'ќs=?r؂Npǎ0ԟǥDpRx=@ӌ5EH'88'HC<݁+t[}:N{j#91lgN:/NI'^Z&m8'vx1Ԍ`>裹_ftd`1ؒKss֌g8bX=׽{n:ЏUQ8ar=z{ׯKcO(B1O\ޥ9I׵nY<0\t9,_"a0 3קXu 7H֤ w}I#Sgöx s/rzgzU d'qSd:dco^Ͽ OҦGボuϠ=8B1݀݀IEN.z}8sI.z#׏U`dҹ@{`{z9 {c=}}˪glO:u0?9`=*ߑPG9_p;ui""y>O׊['n'a6Z؏ߖ9p?DOlttUؤDX粎:w鄞zOLP]䜞FsX0;棯iH9b31Hs=hZQds'Ω@`O#B?cdv[h%S}>^އv#dE $qJm;f:/THAG pGs>tOR:EXaxb~b|9q w$~y+x-Z'cgp'W (׫Ck=w'Ux@# 3ߌF8:V1P))5񜐦Ac<${WE{}} >KVSA ,S8ly_Fm,_s3~fG^J+Kݏ*wU'ɵIp!AD;TӹM|;wKjgELđf8#yR~7e >LMn7]%kqy۲0!iLhO̿!iMrp;bvH9=}Ƽ;^GҴwA"*fUsy1X7< 3QL^bvVCTֿS^̷6# 11rrınMdMHAC90QKoVKAe%)[*XHfCAe$ڪ\-˴-cvvFd#]QޒzKZߨVs:RfIVWPX,qxJpcn.qۣ.q@#}mK >lx\lYQCڇ-;zW(3ru RI:֫#t䖑 H)R3u'5#G`F;prTt#RXd=3w/z OHSϵ<9$ {4Wo2q.3=??CA%A<14\vqGq1zC02y?ON)]3Xb98>*Az:=VԦ=CMƉ3?aK0FEsm">dV26WCh=zXBu eoXrVT_ 3mk>X_9,? ~lmo1zt9S8߈Ltaæ{ՄѼt0.- ̩q'3*‹un^o$ @[~ZdHJMCyCdQygWD\Z]#4դ 0%IIY)]B6S&R1檰%q+iq׶2rr{_'G?iNWH O\zҕe!s .W!?GO^W8tQlB']0\C%O|ϷZ011I׫F#%>Ӯ>:strӞzNF28 {׭2lTvnH?{ qO1pzzt֑V! A'xӹt2bIOZ8)*=֙r3<2s]H{iu=A遵)ű[fA KgyU9ԯtoP1Np8$_Z!c'r2.啈pN<XX^Fx :Oמ{Rb-* /prMO r8?4 -9'=7`Lq:tCB`clq^};Q#=yCNR玠'0sq׷L0{h6I8rUf1G\9=2%\|$mϠ\rGV{'8dv Ȟk{z :7G,qUA zgx=K,~q`< ^=Mٛ# ǖ'Υ } 'ԓaNHGLPgz/r]H7t1[ v#TfA!ǜqr*XXҜҖ`Ӹ>z`} /1dd8'IGc~(020{4~8vKdO'?ցw둊:&0:r1דⷣ9^`G͎za@pg*$sV%6ml*HSI7^R&譱4dua1s^W\]_I*95X<*>_j-r'=)(ub *Gpzu:ftmn$E dqo-RStjIf ~T,8cR$ˎ6<%cqҔ5W}H.ZER,`BUcϯJ܊N.,q[l6 0ܤǽ&쀒de,WWfB8kC#vI_iț6HrQ 7P@+^kZ hj;)q]y܃Gb;]Mh&~e!bSsZޕ֧%h쵻u b[_[0ݫ.px[k:Q`|vvGh8#Z/*o9Ro+yͬi,a9+"E-=Ѽ }OXK+Fk=xdSu< '53K-/w[{yci2au ٢`rsjƣjB^}3P#*ۿEqԚI.|0q[9 &htK{F;GGi^'/t @+Na-Ԗfئk3c%Q`:W,n3(8w="n9=q Z x8w'+x Spy}MI6+#J )6c3.07q@Ik-ϐ zwuM7ay|1MPoX9a=|B;P!zB)ȷg dW2,ĩN73tmav%$1q V;l*vDd60~\V1ە "8@.25jKf]݄h`2v᳎zKk325ģif NiA#;{λev_F1kO_VἿ9D!LE@$O~Q~cƛ.Np]n^h pW$⹆vox&|s1))#&2Fcpi8 hxu$[ J~̊UctM~Bu9Kxby3}vi>V nbAPlƲn8Rҩ`N8gp_1؁#pll2G'}0c<ĀxLp:ᙗf8lFqPRtlUՕ 8=jэ 0VmKC#(DxF*y3n'xOJ@$=j-FB*!@>nIT'fаeL'm\ Zrro#@Xx.,;I_z| 5 .U~2"Ȓ 9eo~$ߩ)~%mlZP̳Ⱦ[/-:7o<y> mE|Au&?xHɯVn_s˝vzIYgZxYݒ+X0}s- $Q9G rb%mt7qoiG +ʰ! rGaAVFz`O=_nZg7<$8W8zuo-?w+?a$c n8:tB(v`mק㎠[3syiy8 s@9 s<{uNiq7F6y(=Tz?˸aW׌|?᎘0Fr1Aׁڣ ~#_LO0SH >Jaqsglop@=zdP .v xp܅$^/q$/ = 3-Ѓ®2O͎9)xx8vc3ǹ":w? &5a^0>ק#8І8sӸ~sg黪zsG@'$0$ds߸?,| 0r>zP}Fq~sЩ1rpNbM0p<o?`6Hr[8QQH6FჀy<'<8y㱡@FsN31ǿ@.3Ԡ{w$y8jO<rs팑9*:cP }i{A'=GhF8^:͎߭'coSǽ)l9^\R ,{h^qwzwLy#bsWwozn{֓8P:1$c۽{ l?@`ӟ]0`wd;uwI!`uAt4spRL:+t%_o rNBdԂ:gЁN=r3 p@H`` qHBݎp䃑I=TcL LпPa@lz0'@Rpsngo!UC<T)o_#8\$sֆ<3)d)pcֺe*rpWGjIܭz)뻐?Jx3Ϩ{rOJ㌜q9*\G'$c69?%<`c'8NN? FO=1?*ka\j2*9qd:%Oۭ?ϊx$arys< қ%$G'R@6%&0@>\t Nzsz5RM`Iln~\g;@sR{#NOa =NLA(O9߈2:1'=jrE< `ޞ:pIԤ&A{cG\g:A`<&O?{tA tA$z w&IӃL<r2#9hN9v;TLj!sG^H3'?%=^ Hۂ 8$c=1N n W9<}q۽K 08ӎU!>SϨ|zy?r1ʷS; *Y^JxR3:@8K@``N'wg#8N).hʩno%aw 7c9,K>qV2RpQjH,@9TN7DXx2E=ͼlFH@2YF%K)4d4n><0cǕ$Xr̊w!G? 7ey\#5m5d -&c@K}z`R2(c |9;N0z-LjŇ͝q8vPذvBq3V7qA=I Mm(RɌG{qC#3prH@21#08R Ā{(V*n˨Uwx*;v?Q@۹wycn@#zhF;{v~c}H6xqN@\u=)$"1 d} m + p}ymnd!q;?6;t[vxR|iNT#,#vvgt_('^)ۜM _c߹ pg8*X 2wEbN{$4Ge8\A܌c5s~w.NX.Nܜc Npr8aCT>!z1zMTWP Si2u:'#9ۖ~}:5c+F%=FFy C~G|S@$a 8Rv~"V8Q9Ǹ1,]nERNG03P$eM7usOZbb`O»OOrcNKoR:knB$9*f?$P:1_ 珚H 8\ޘXlP'r3ucG1eJ;D7.vF2 NC\z_ x qypzc&7<=~-Cv's)0GCoç,sA dVV(GL=*R^fsw=#JX6O9^h*̌3m 9pq[Uj*=K<@ Hz G#w u^EYO,Gc8#vs?&N^޵ [$Ǧ~rܓh9<$ `3089\ԯ2xHz>\=)qp@N:{tdHAojx 3FO) <8eޜ0PsqIzbF9@Ԫwg2n9"#! 7r4 G 'P0r2$qГI?p;s"<l#`鐹錟0'@n ;p5#:ONH9= tRb oy8LUt8 H`H8;ցxʎ2HInq8O={88y3E6g=8W$p cgAIAD WxqjgT@~gAGN3B9) GQzתC0:zQfxaUՔuHYr2sQQP3sH}E$wl$pyc~?Ҵr&hL ieeCQ/wCծ:Zw*v(Dm݁*ˑSF`Zӟ::},&EE%>BXs"(Us®  AWnCouc23rqI ]X;HE\8"H[W#1Y$Ir ;vaHR]k2pd EcN2p1 wmn7 `îpqנ!-[)1Ffqߌc&GLnrz NqI#ԋ˴7Szy⫠=l~qnH]BV?E,Hq# [x*mNz\UX/rq30$<n,:z#wbĚP2rϧ6 I%Lgn"l=70vW_CW"hU̥2q?U$$&gutfsuO d9'3rr>C׿ҔF38c*yjiik4cPȊ&|JͰ68cUUO1';022{Ӱkćv7~sk-~T9'Hxꢭ>ehB` \HN0]ʀ@;N!qԊX)GH쑋=>zT {x)6އ$9X zʎ2m8oϑc5ޝh%r?5OL J9Hּ);mrB2@a'{=qژ=>bH`~<*<5^Avp{QG`~s~c<8+l=GZn1pyOVAU956H=U#;>82SO'@ǥh=["$_xz:>1s֋>O^ۚU$Ԑӟ1"S 09=>Zك?.Ap8޷j3\Ϩ$+r$<)Oz+Gl d팂#] ps<?{4>sei7ʽ@@z*? {MXӀxgzh] GLLGǹ@#= ?px'_5$9T<Xsb5& ;'=>Q63*;yuǯ7npNָ*-P:u5 ~ 㑺 'y9}*#q=2<2O^q7''Y2Ɠ$c?lT8$r:Sв"H~:qO@{@8'GJͽDD'8 2sJ@3~?}Tg9ی1׾I;r1|zu хmU+7|@=I?fO,0@ʂ{L{ v_SZ/Dx31q8q5Cc̙`%[czIqC@;#;WAqj$߉xi߂22=XIi_E펙8ȿQܒzqb婲E:2>xF21qK,?fpr1؂z֐GR9g4s38=tT#`ǐ8i]@9=֩Ԏ9+ @@  |UVߒ2Q ==뎢hBrQH.J@pyZǔ+u>dM.'U1'*!w"<㎥O9_vMM&G-cבUku:0ڦǽ3.P| >_j8)wpg5tcJ󥑄dI9}+%ْB #lt)+dl zgrye$;VX DN3a'Cj/[?5ȴw(Qj`c.@'~hh-ĬpNb礥,ߡ:X_iZiz~%xVEθ…eV]}Ws\*'/IF`ZܰJ6P:ᾏԃQY;N0|֖[@;@`w7{zMXvnaF?*s8yh w$av ^Kzu6rbdsmCR/Wexo>w춃 %2gߊH-@9gO(L%hL_(oٝmĝON1VՔ?8}\ H-zEΟbPr:($zg:f'p2@88<3x5toey<_HC>GfD#j ÷H̻0I` 1ӂ jwt.hOݤyD8{Vۻ*ڧ;dH~af# Sg<"q"XȲFv#=wSr98 /\~=Ty X^$|t7>qI?NOA=3,!YN;B?2s@͎AW<{> ,Got,d;:@\cu4 ]BaW*^[Ks@JI|BwFYvֺ+)JT$p )k"MDe]+"W73Z\yEb;y\gsr>6lcQ2Om@Y"e@'SM[lF">08v>^H߽pG8=I:=y)jIZ(zcs:w޽ 9kHzg*pp6sr{/ٯftGY%^<:ZAs~ZN6ǁ[p)_?:;sje\21:rU\dr{9=.6{çNi< fc>?w$zwˌQys@19g+:QWxtʐm*qIs,r:dLzVhHbǯ>yy0͠:3wPy=GO``L5S~T#d^=8I@#ּu"`9G^qq*?1 dqԟjɅ#i<灟T%09䏼8gI Hぴs}82I;GL5-B9r@ ~Pqqz*1?nGӚɽM!ߟC\^yCMߒ{cN#=l?0t;㒸;7yv?ғcn8 3g98ޕadN)i pxךE% ly8\=vOzpy(IKĀ1@~fIẁ=O#zDpbH9 בSֹkXC19\C ש#usbK`st5xt>E|?]?ۊV t$r"NA=?;?ǯsn;0y Jx0~NHV霒r{Sg`-~?7N'=N?);?|=ixz~ϧ'_nҐx#=O4z8 9qlcң篧C듟G#=GŏQByP!J|u$=7CgoR3A@mdPؙWW'/u+9o.`rv,<xwȎky#OęHA $3! [94aIq/n Ld[ gٯ"~`[nef6e$ug+RAq<СH K6 D2#Y,1`@#Oikh~5gJ.-.;;PKHц刜*!Sw)]9ͷ{XX%"MN7sҳOT$Kgg/{.A'Uǯk"m&R3ëOuIT/9s.©Xzizl\0|<,O`pΚ y][+ ?Tlrry\4.3EΞX*%2" '9$t3 A;Ka%&L?uN8Rf1AiZ~m~n}Fbv,Lm^1XRFKnn #α0@r<-L&WG_d9mJ6ȧb!rΨN:V_~4p(<~qsuF`@5Mdzv9krJecïqs ${czhԏMLU)@zzt )q;Jxy5WM>Aۺe'rs$dq֣K)p]S0s݌eMZzhߓN;:/Jvn=v yQJIpQҔVrJ.ݪ 99{\x)Lcq%#HBleUN <s>ԑPN8Uǯ7{pG3"HRTAZ~bui$HIFAgbŒgWMwD^G-<BIrFrjˎYaJ"ؤi!>^G&VI>v>V.䶞{Iu mIG$v$W=\nF~A@,K`h8SKw~[-$[WeTYB8tɨhcqڍN l1Cq?'c.:J`~8ҶIBmB1aybH9Q&Psa'JD2{erٿOaVq0nv}Ι*u\E+~aՖ{K"Ix_`9[ =uZɫ^}n-EV &鳹);;fqMw l?/L&BFv7N0O^ӎ;sw<8uǗl`HO^L(&(&Ki ,q6Gp*YY{eDN 8% wR_%e&Se==)]F@`9ۖ# R5MƬa|nVY #>BppOn=h^^(6rpÎf+WZ6FY*+%qu׏h_4f]9>l0I`A'~yMH[Lj6-VS2HV<<| x|R`'RF.ŗ⦪r_{zQ,3u x SU1<:uj%~W}Z#8'$֜^拎睫%G >W d;aR2ݓq#qQܿ63 rH\Umcǧ>4=6/B0Gu\G>=zrJ.R!>8#9֣ӓeR7N|t$Hzc8h# ~ց8rA4I^9(-He@8qM89lUv4c[p~R28 t<ӇMv8iCFr@~K~lFx\l0;m,TN ~_gcyLNqGAlp[SpxŽH:wݞ<}i9fr@ r O&36zv88iNOsӶ>Pw̍9,y@=;lvs֓pyx>lCSY~H>ҋ`r{J{*N}s1N($^ %qz*y031$CY=i$.9<玜ޚ 7T=8l Ԍ`;Tfx ~@_:bs|{}hN 昁Yp~N@ ;S=2pZbe`rNyM'?w# Rw)%I$gYFK=AmlspJu9 -/xX>]T8 H׵&n9#u5x$r rN1+(;Fcѹ~9R#olV с. p;x?{v0v@V%yl㓍GWGqBUNyA9ҞI#q@!y#~>Ԕ]!wgZ)ٓKd8Pz@*lU〼)fU(*;pO<0;櫠]Yw0u HÃ@J`F\x;zzg$+2#G4 6ٷ:zsIx,p2sCW6ax 4z {h=R20$ӧN=9r7@ a>*p3׭;1b0:lRcn8[8O9NH;یrW13'n:9'֡$˞G#y< l:] Fv|98UC0^sgT}9 c=x5aYp 8'ol&e!Hqn1rqVfIHnǷ_( dg4냌*HuvQrŎ09t$$(8$/~Ԅq` `Ϧh=O$\vq֜prpg=Ly<1\ Lg?O349g$E/rF͍{ @;vN0:wۨS+h^y:zu3֘gN'$`i !0p3uWbǶ=f!~`Wc<`9N1:H8-#g}C`1sQc;s4?B:<'=70'0G':9]i|qO($ }GJ1k-$O` @w WbU]?vKU:sZ!aWicc=j]`,q&ߔʤSPpvg#{dmz 8?7>38~w=x'!^A@'9sp3Ӄ@NAvH:rFXosBq4oq'$rL('r3 i7=~8)y30љ,TE8?''玘Sw'p;b.=HLz7q qEXqG^8SH0iݒ 9>P7';JCiYp۔}Cz=h;z]%89$ vOqЏdt'WBFpFq0?yR+mp[1zS[;b@v-E5v1Dn ?P>B{)my4Fo+*$GO먿to #qY$q⋋%©ʖ9`^M g@' N$1郌up#p|gW]Ŷ87rHޱOq9βRS 8=uD1zg~26áE|gˌ~X\#9=p2Go5j)oFRN  AbBI* . nAqھ_|} G4UɗQ'y&{ӆ6q@nN?1^5HJbjKBqNI?.j/8ᏘO; #u;C@@ϯQu{=: qLbǢ^96'{ n3 Q|y8~x 9cָkR ؎y`~_(]ۀ'tgZ_}|ER،1\h,zR)9~2usӃݸ늶݆A>hi39>LVݲexs[~j32q[܌;[sWה[TagvI=k;7!OSs^-٦egܑG*tFFsdv5s,܂>\)>˹slt'# 7\LA/8 xkߎ{u}'FNFFw: bI i}=;P 2z$F:1NQӷlvJ*;Ю8daxEEܜpzW "3}yҡϧ#:sXHBO :>˜Ir8#|tRB=aҢ y#y{ OB^}02={j#ԜOyVOrY:Ĝ{֨c=A#r@=29^C©l 9?/s++9+;&Vbv>H'8j@y9G_UVHC21(pϽ1:db;~hpM/Cc1`t`t p>?S[}Zzr8~jh Qcd?jH>5-ǀÏn@ڨ:tpޭ (鎹ڹv+ygӑU[\\916 dl?O56 3kJDi]Öb =W*|1-ERĂF*  {\ק 2ϙl7M=u(7@X1fWD$cpWSQR4H0AW\ÞG}ѥfjqE'T|G BRPJ﯒<,MWKVodMfy+u5abO;u+FsV{+-M0YRiG.f7Y&,Qdf]@}lw? n:dtqv*,'VyXR4J!o uʎyڼEx$o8RqҰAhdE,Y%<3ۏ^5۵K6DmsBW,q#J]= *MKi糸fK&TL<Սg>DڳHcb>o,:8m. IHgo?̴hÝa+|7[G H~MduA&)WrYF8}yҪ-[+t TK224Gk*\9wSR EZ0!eR2X 9pn1^I0l g' =VI#p̿!Bw#t\b^ke(Q [6JQ8\U[EB.@$z{u6ҪϘrTlpFgXWfB7c;Gq.&dBYFާ?/P@ϭs=7Kޛf{ѯtycC( k[Wɣ]j+57frC$Zw5W^Amdg! G* ӏJ/+`F ]]2#~u9-gmSs-舩#׵9S8׀H#^"Z/"ӎִRV$POWWh={\,O'^x՞孾x:95`N:8uq68/{1z@݂1d~'O|gI!*3s%p9$MAz2n& =@h:#'`l֚vy/L uԁxJ 63N{?Op9VǾj\tNR~^:@G^`t鏮739*=q%zaN26sNG160A=;ҀErHW$sj:`" Yz?ۚ`x?)8'i9$1۠JFuBZq{|vzҕwH z`j*Hú8`('F;lthێNOq~irO^F(HQoy0:vǶ? :G)N K@Ӟ>uF=t^{xN{vJ6eG-das{"X?%ѝlؖw-;ׯJIZ)]#8ы2nVh'F'in=fE̠ YE7/$2êW{P}CI#\Z)h@8]-_H6i:iH k7^ѭYV1J]I6 ~yEyՍH͘Su*~9$i*k{M}WzR&V 6>Z"&iXp#SlCVo$KPkY°K- c'A@3o- ceƠ&R҄,qG7II4GFJ>E՝͊Zݭ#*𝒋Y OK܇v/"k8e@UR%p,9'I)=rKG2}8#uo+3hNx6m_K i[] Gq.[zR{.l&0:Yl+A 1$ܹjm`"yn"Un1$<|'A#CVԧugjmlqG;]L|qWZTc(_ =0A+9K[Ӎges+ە+<3kKKr x==/)%z VM%_pgtH&AZ> ͞$>_0[k|1»]vR]\4Kw,+Θv#_`rqȬd۶%uѽ~deUѹ䵺lHktipy_?Kskײj1Ki*(mb# 󂦈7gTamz5OX\Y#=q*qb1N%%migmkhw͹1 skk̯?+qp$FTvp Hԃ*2bp3LyܜT>|`׌zq֪>R>_;qB!G-M;CȘ%/5E5ᐅiВrw9(K/GV-"/wsd9>X<S]x/0ƌH מi4{5|NRYPNp lN{[<[)[>[/ G<1ʀTȡ_qxjo֛4Ds'oQo_'$W1;RR /'i?*}ѓ_?cA@#ׯҎ|`'?:/R@۟B1zc`|29H dッrx}ёv1G\9| nty-: =i3/C`㓒>8\Ɓpp9q84SGOԜʁ=H+L~te=ڗLzxF `eOA1v7RqǮ:@H<Zidcp3۞P0QNA$uځy9@86H{Jg8C gc'q7}iSc:'HP=M sܧۭS{9-O@Lrz2vsvƩA~{ H,v >?ʄ"~c϶sO9zLӕ,qۃƒϧJ?R[%Wz`zR?Ăx O֨~0pqʦ8igqN 2ǡ`g%G#:sNy;r09"`'<{)8?>r~ :$ۃ8듊 } Mygzsyy@z{`*lz$9;\wǀcu 9%:o*[* ȥayL^}Ξ*69WluuoSk9p " 0vS9! $st~F$XE&A0ܪ15 K%RH[rF Y۰c^̐@ y`*Pp~P{Bq[@R)!f@V}ѹlJORq9a`Ho2BrT@) R۾)ݞB|Ha݀pHICCWg u4-^Iт ; r:M r&eݻu Ǐ.= !`#;:5-2بbez^n$c*Y b\n/'! {}= t`p Ǯ{H..d+q֝Sk ^xnrP;‡#< p=ǵHc&'NHd (himخG:?w -c'Q72FSRBƞc2IΡqئ3+t*WrXtԃrrB,2VMI#l0@,(!:@f@Xrs"D=AaX yٻs.Ci?31ͨe,2PmܓRgC'*`71Oٿ@F:` #^ ?ß=AzfԔђN:`\bv7G+O%9aC9fV`O8)nϵQ,7S[#<3ڮX${h63,Ì;-gi#+y&¿ !qVcR.#*` g6~+%.p`r鞕).][OSv RYX}<`rIa.s{l쥹!71R IsU>KPnrKcn3~aevq׿ҹdd9WlVܺRKow7%F~*֛$$&_ *s۱ymf _{%Qȥ\ 7)ó;٬k)DdH9 h1:ta78,^(̒~:~N0T'QywWiaiXQYhu8@ x>4g_C=H oG<Aop~Ӱ9Lnz v88P AI>x۝ vz={t.1cA-qk9[Sÿ&[(vȁc!Žu[8Q BI,ˀVҤ ud2(%÷5WPⰅ7a:L0A#nWRqvt[U' ; whɷr71U[r瓸OUH0^v~\5Kr|;3tB;PP?p< bLT=;i"E, Ý?'ޫۮ[p3z*ᔓ=T6`HzG_\롺pГnϭ!Sg<ǧb!03׷=ӏJϐyc9@&rFC9{Ԑzg^:Z<``F&}`z99Q~ъ8<XS,Q @$0g?ޘXPc_+-#Kc:p?3]ˀ:sc>]ٰ\czՄ8VF_̊Әh#Ά<L}=sD kJ֢k`޽8 y$NdgiP2 @s_^G3ҩ0hNG\O}g/rQq׮=N/Y|WwnSgwpA8?7cy U7rXp{FqWZ[!c8$N͸ן+E<"+yٌs9T'/נѵn#?nG㯿ֶC[c+9qGOUgN oZ݅m\QǷ\r}:vStJ8:9wr:d~]S3?cUmcRm~ʋv}>1U3ןoj.+E׀P;>"w<`;qKhΑm޹<\ 9x<5I"zscXA(=2 \6qjRzW4?95$t/,tx d3U,9$lycTG@x=jk6)^E,l#!D!-i|bK? K~B=N*㓹;{wj0CsAQ́8wDj9p0`p@?)29z-,Dcn!ۏ$*o5S !r"Q #מ+c$Lg;Q|#a޼i}Zi~hKƁ2 =A9=jŒI@c:9tlMyB9fQv#v^>Wg|d` L|ݏLt =6^~qqf5ydz]zv$G\w9#DpOs3rǏUX xy=H+NACҺ{zӞh 22n; s=4y9AO u3:pOF:Omuǿ^s֟@b  $S9/mdslBn6;sqǧ3ôpOL*B* Xc" m1<8|=='< }7pxg~qH:3gu u8@rs?d6(뚙qTODF8`rOCN1S9$4bNx$؏zx_p@9ʒO@ ?@G9kJ#lzdN$}Aa,LEap=O/!@`2i6HIۀyJCVO{P9<`d_~PŸp{tO~??O~k: pr@_# Rp@ r ?W%YyQxϷ:䟦*$40aBݱ =:8="=L~ 8bI<*^8ҜGR܏瑏BrG8׽':Fp11ϱOq>rqQ;@?sК֚&oF7Xx3:Ud=r;Iavw $yUٝ)Vc_T* RF9 nTێ'{Gn屻nn'iS``^ ` 1z᯳kRsW:fa=?|3wϮ¯uzpxFOʘOӡ883-Fǟ˧]S/?kqu:֤>6;?xz3קq#{{Ƿ (@Þg!yzKn?Ԅ;b[Qv;3ĈHiA@$5+*Ĭۉ| *,pVzV}Q)%Pʣ2)?A: 8Y9-O22vR1qK2< 6Ld29{R-m^Mk.gh&| F5SW{_kE鹹r:]r %j76ʁ[PFFeG<5znw!Uc˾K}YyP*>c)2g# Ȇ8E8 &y=8ZϨ0,q͵~'4(7d#֘ܠ>̼zg< f l ԀqsހF2;yM|Jkwe`^[{d({[s'vѓ{O|Uwخ)o5P0XE@K:< _j#<Ҡ'88'sQm,*k6Gy,A".7* b+y,fj{6.Kg8[H>^XYcvbl{c̖z%.%*#Pm%#\;UWKvy m;Ves,q;Tn#=so!q0lsK0ݧF! 2BIpqױ_fvTTUR>l~gU!-ˢ0ęP۸By9RhlW81 cRԱnK>Wn?318#p3ǭ:f4"3rG@!J _nIף=+X=־{igEޜ_tCwrO𧟿8  v.kbG!x 1ǭ4eGG=8jӌ>ryl(w_^:ҏ*J a2y'ty8cNNFy_p_ʝU'%Od"N#۷z{8%x+רt+c^8 -3$8 I8x9$x T}=sޘT}H7'9drqsR? eIݞrČg`~_'CP͌`ǣ2}"?.v>֐v G(9Ƞw$n{ͼule79\O?.x^04 o9=G9ϨWrII$dP SʎiqNx$  0I1z_q>ڀcs n=#֘N@y#A@O;L>a8ǡ;GS@ܜt;vS؅ߜOʀ }BpZf:sFHbprsLfs60Jg1ϯ>N{{0q8sמsJOP9 -{R`=9?.W'oNcI$ 8q89'ϦqM$CzP{d㞊3{sN-C!'yvXNѐx}J#NrYI>Ԋ!q1p;Lۂ1c9t,pG ФrH#{zG)Xw뻨>J}Fǧ^$zg嶎m x鎣} &:p9`s@cgg_~BN':{mOmqr(Ѹ>^sF09s׊ם{T 0 9%Oמ3F09d<w1Rp1y@ #3=qG<8x^:y<Ѵ c>ݩvH(Y#4sr98a\~@18;c8'b?Zo2G;zd=\ٵm(Aʱm }{UWh(,C~b{Z/VШ5 $gie~Aϭ2M@Nv-\ru(K.Yp \6>*j[ W3pǞ%6~D <ϭT ,w.>Xoj},frjLXe0 1\NjI!R'SSriX5y7#8lPÅ;zs\|3a;v#nfo#jֻrMfr6HvhOE:˚5ۻh'n\=]ЉsRh^WbFO,dGPOXWv~[dFzdMcry53~d\Y­W7G'jMv0cدNzs5e'mY0R6*xRîr ϭE y#f Kq*R'oȏbW$+10W(M"99Id*2#p]C85$![<p#ǯ4u>E9?uspx鞄c+R L!S60:G RF^VYV 4 ՗xP JxlCCtv!F-XaaӨ]cmFPAzSPԞ}~g9kn*e.20l8~eQ0Tm%3ӓީáRv68&0xDq~dV[`<0V^sMxT4QĐBv8 <⹕+ S~xoz;OBO̫673w*ێCn`spGa-waX;S'oӹZ}s`*d9 x85A<$j iNT(nހN09nn{MH$h A`GC][;vѩ_ hd穢Jȉ"T{ E$+";pǞÿzMjZĪ ~g3dc=ucʠ@IRw&u<,5W68 A=G#泤 ҷϓ0F?W}5tmQᗆfWlӧNnh|4jQ ;c8aE}g?1T(G$< 1IFN {eӐq094?/T*xÞO1N8'ޮnBQ96B2*%. Y{@ ߭5I߯Z2ʹ ,XA^~Eihd+\I#ht郑$63kY'+$A?\JFKcmU_ޥv$(a'ݓgV7w:u"| `kb;>|pt'y`N}MU|qCpOL;LYHqN=x\Z1u!BT3( !HZl!rcjϒƊ0n'6q{TQNyrڂXy<:g׭.A:p9N8{!A#;t玽g;}sƀ9c nm_^`1#L?vzdu7 CHNA6J2pƁXn{va#$uOavNHW=@d( zqǮ{㜂}Wk_ gO9랔ԐrX%q=AN= 98 ʆ2p2 9?:bAZ}Kz6#*1 wP:֢ v38m #9PsFE8$B {O]Kg{)be+ LR[IG]NGy}QB˜s :{`u^iv BAG^aہֈYlodx$1%9 T^XOCB3#HPi~@ q8rn9%p[wPʹǦ.ι8l~ ϶}x*{㻃\\uz!!pNW;1b{dP_+6 x'vp9ɧM!(zS\+ Cq9Hs"ےIx*l$!ts^ƍR``8t3NwDuwq =1ܧytl$0E(9N2ry86OJpC(S-V3eUTcGo$zc%ĜA:<56Q <*yV &P(Y(.p>Pq5p)$i,G>l!|9Uqlќrp GNI$ٱ0[˙"F2<(ܛCؤDDYW>c.@ rjLTI_[yF4-w%#q\卿LgQ Wq龯JgvM9 EcC?HvYE_ZԬUxyX.~cHԻ40޳DPu\;VV}GaZk,|rCxq=֑veoSLJfB*0eE#>EhT}5j:T}<Κ */Mj$P=Pif ? =+1swm=AY?6R82jl;O->K_9IT$3!+R{vV~nͣ >L*.pkѴimlJ+`Uȣ{ָVKMwɫc]kfᲬ,y 7Xii ep\sucF܍6:bF }>bFҤ2@fF`E.iގ8CUszY˗r0sЌoǹ+k)r3xB<50pqkt^VND/Il2Im݆, 8AEѪ֗vКSLiNAGc֓NN:v'Qܨ9<ЏNys؏MK.,3ٺd=gtioz8fyv2>>PGqpx$zg9NUB1y#֏7eA<3V)eG?JD7du6ndR u]͝;{+ ?3Բ~˴( 1Nkہ1<;v}=%hCk=="zcӠ}OUWrXxYs L $Y̽3qwi x+YE!VʅEPX$f 񾡾9 H?twy>5Q!Ie7mp{WC.KG?3gC`/;9$.>sGXOO`y[1\ɗtQ3n1DTF8$u$WrPi;,-8YJI&PlQ浃kg4[Hb.o3$m$眂+ux#f//BȨvFAZ*E";rwfxxcx=1ߟA;Q |dA;tNrpH 8=vHbaJ-AXجI*?Wfp9'<ߧz-}d1%$PށtQnRF⧌=Unc}N qОgTwL%/Q){ f60a ںY5;jsr֦$I_8HId%QҲ-sgo`2 #<׸jd2@D%f'oOO+Ʈh %u;Lusv7t#LT$ ^]|MvgqGנ{э2}#L?O]iuϾGUcq;yE]eWL`vO C`wȮÕl?P09r}sR*F8ܟNj y?ߎݙ?ő?Jv'=R=t'>;8♎z94n'rC79v2Gh#@}{tm%rN:fP$͏sגiX Bt϶O';z'7:}$ &gpzCr7qIQTGu87dzRQ!CF212Hn*@{(q'XI FxҧUx򁎝:j[O)H?{=y.( z{ 緥+xzd{/?փrO( s}sEp ,q?ON]#=8Ҁ xw ?RG]ު4#88zV3 H>FCdq_T#L8Ӛ#*r8='#Ve$`wBןJ:ʧ0Aۑ۞rW$*3צHF֡`qČsdui*H}?^—Rg3xOMBOR `q~jJ'==aJzB; tL1I;qLC`~Uz9o <㜒? d8לz GYiy`J|n n'>kV̢,JBG&]͓Pzi=jq3 T0e2Mj9; &oA.ckE {:Ec@~_a&B)d#\J$sJǚIĀTyڇиL"C-К$[8 U”]?#9Y ˾ W?08f g?a[v@wZdFȩu]M5[mjb+6 %^aQJFX5SYג"[{(ƍ–ְe&ӻmy_1;#rX u=:b[NH4iycM~ni,H/U[q.Ya$SK& ;xmPw `@&\fBA8]C$zeZ~/o.&ܰ t$q^_*@%?՚a#r+ا-5E篩νytb .km*o+퐽ځd#{kԢT)*A2~^>`Y:;? on&h),VDacx$n`ÊU/n1w_̀y'8<7hv)G'~Y[`ul捉d ;mwh9V=N[͔U+)l;r1;O8'4L"} @'9i͡o@U0JlN1'6˴L`FW8Բɘ-',wuz c͞W$Q^]]1)bӲ" @#nL8uIA14"[ @_ HVl8-hTDŮ3?W$Ɗ.F!IG%Woˑ`8W3!FsH!mF]_v HWivn8ZqJ;N2O 0zQN@,w1,XTc GQ8 QӚسYg'#~R=9tme˸`Id'aǯzpMf>Z[{=݋5-"ڪǜz \8H G2ʧ*AC1{vM Dh~eu%v:_zcD02?0q h$Lr!D GG`)О C$|#vSdZs~d7IlcHI|_I/"o,͆{Wꖋ|y$D.ůƱmu+ xn29I'b|Ս78V'Ťp$"AOSD!bS 3+R3+MF:5F%~/zChD8#mǦ+,i~Sd{XmiGצ>{:Rzu drALx$azgcJUrszgӟN)}"h#>UAq0ק=AQOԊgO_p( vM#$ܕ9h;wAoѻ~b3.qnQr0;OA~=8ۂnIGbu:):qңl`NlU28뿓1~y I%ߥ'r:8,8<![ۥ(CsHOu3s ;z@cpwqc2@36>h;w{v=  pxzAG^xa`zcO-h#p=GNu`$eCip[\aFO8^;cqTeCNNǑ!F=A4(矘3WY:s@ v#zq;9p:xj3zpp^yJ0OB1 cwjb /^W#88LujNq8P3 p9~쁀qqh/ (#(s?)뻃psP47 xx1Zv6p>Qq8<~P~m=38ӷd ,!H;aweF܂Ol9AH3 |n rO8'qN n( 2`}:6#K c8ӂGLw9~Oː20)Ns wp>83=s@3N1|8'@:Rx8=1ԑ:sh#֏~29Ӝzzi=rF=?:An#ހr9q]G(_,K rcp@ܸ'N瞝wb| ABH?+|q;s^pP}}Rm,:=&7p>g*0~}飩۞x8=LJs 鞞t<㎹dH8zsқ'&o8@eBG` zc'?\lZ~q78$9<{iDEʞ2 @랞sz#G`98R>bF}a9 ww(oC8g>Qd_ub8 E#xNsAHY7BnG#7qUݐzp%Ȯ.[yދPA]瑎z:q19~^=)ƛHoU/`φ_r=&XFͽYF€I=i>M|eB^>l=)w34wZDS%rօN]gxG>2 E ɆR’A.z<)$XP~w=G׆V寢l絹|:sSp&, x)#Azj:%*Z͏/ ۑ²DaFj5ětɕ=ya}9Fϑ$2LzfolnE2Ķs竺zt'ӔnRWZE̪V+aw `}5_Y]DFeu$Q%-˥c% C1)w L}zdFpH `}̾v#g2^_s'fX&Fn1F.lmLg1Y#TR ۸Hzu)}$rr[3v#9Hww&1f.`(p NJ/+#kvW>>7y863|0zg~^)m. *A'1'޶KC;uzЏKʿv6UD3 $ ٷ] (Whu,HgǨaWDcduP0`Xr88}HF͝l$Ԍvw톈r-7t r;F=8i g,G8]ۣuk'-y:98B1mbG*7VԮ6*!#>TrFdgX@a݌dv9N#d,O=:RW?m ؒFI}M8rUW 9 ry^qICxN֚dx@3J.e6` Fs׸qtlr9 ` I+/L8H,9X?c 3HH#'9'swH8Oqԁ(/c\CU'ԟӚBIFNSE0g8n7(r}8 3Fޠr:J9ǯ43!I8\px46A'ң'$މO>`R9 3G'ylH׭`?xzzzR=9`08@9*߈z=sz@XvOp=F{4ϛ<<ʁ,?6q פG.X_aŁvFQׯzo87y0ZA[ԑ$׵(9z_ӠL89t¤ s?Qb^gyVf* =)``꺂A*3oƾqd&;K3Ypq= rTdmߑ.bڴW"2qa;72ri;m+uP}EݗiO ^WYB2n*AI?zV5SSNP`NN3=p@ځ* Hr2 Oǥzeu/2†`cRGjB烷 ҋwl칧Q7R:VʂYpH<8ze)D~Z!I |5C9+A-Q4rK<P[`bFvcJф͜8![LSI4ʲ9P˂d yvK[pwd L jm^a{X1LYl#^Op{Wkky\42}!1kd ~X AnJ;h!$&G|.> %by*Br=yTdѻ02ʥIMۛjOJ^M1+!_6<~L> o !:^x(DLAxtmB HfM%đF;`֓e~-Ӆn7c(]YT'Ve,3H 0;9VabhOٚ)IUxnj,yʖ$q~5iO0(9´|#pvZ)# ƥRRN9皅_1 p]d=* UӞ%:)ÒH!ч95]lG[EG}țLc~o 6D[M:t+ZL@H䪹Nx8֯ٽ'QZ馊& gÞzP%Hdʣ'4uoCvH6NИWhߵm7AA(Uo8 0s+lq-]q|*1Gh5Cu=nr II$!r WosO(!rŔ:qM+R;:*H\- . 4Ҷapr; g34 M@H^zϕ~M?-LKom't]QSL$?qPe{U] )R~Uxȯ4DǜU@>bFNsw5fl5枇ՍLu@ T,qЮ88w*:'=°VD`c:{ps tfRg+ua!XtמjH8޹g{g~NyG_\T\ds;)cޣHp'2:q׮=1ҙ/9L:Si@``*w£N~wvFsgν$Ӷ烌SP3Kko WI;clxSon^'$[s8jpOrEp8eO֤IOq{IӦC.@㎙> 4@sL p:Ud;n)\iY`9Fpy$(R!NhǏrzu%gҩxsp9?onqESCө>އҨ~rO=y{D]jcTg~)A''>*&z8l:cUhΊ[~@?=qצ+ȫ=y< @8ҡ#H@#kkSD\C;z`a`Fs$bV -_y<{.RsӮGv85ܧ`ܜ'FL{S׻qr1gG֭Fn'UW#89xq0 { vWE!6ekV6I u^<֧Oo1rÿbOWYl?N9,V5'Q@=|tP{0{߭qGJFj0'WӟǷkݖ%qM'צ~2,F0OLTvsX\V3O^GU#9$8ʐHߞHH?)YRH939|L[, ,q~o(ɇr9Č`xzb}3-1L3F RvZXc /̸n?}zV\<Ē3L`y0rO^!#>n 73 7=zk^])'(vzՖ\Ab Pصvs$ rY>\ktoe{u3* {*]P0EU9 Z@X8\`s>`ؖ,*rqt⯅9 rP8jlw#\Rzdu=sJItgV^w`qXu1nj߁}zAq9h.X=O.;uef#vd|2jèbI|$[P%,,#>8)[iKF]s{jDnGuX$pN:MY0vZMH|#h?{G䷗L.l3v 2P 8i뮞FUSkKIs.IW).7n2w y~.@  nP%G 2IT2r!c˟NfCr<~|SF8Hq׽L߶,3|T6#c>0{`y큜to`pTn#v''$;P,J' t$nZIjţ"0,o0s֭ۆ͍e%d0DR993sc==7K8@tWH/pHsJQ}gmޥAn^qWxgTtg2r˕#'G'O4/^7rF:{ gR^g}y>: z q~yO :F_@ \ @c{ZJA+ޠ<c9„rx u#{tc'Jv޸=0_i]E ;?.LJq^A{21\uaO8?ϭBF09\gG\qJGp{~Ñs@鷞>ڍ4 ,sӑ9Ǿ=x4<N;UǷRc'*vİgHHqN#rz 1CcF {U9g,8y=h@H9-ۓry|oOӊ.ހǃs#S.q~yRQ*|Ǹ{gl``~ZL JA%FyH߿z q9$v?JͰ,}=8ozb>lu?_Êa\89$\ Y郓a>\qO^ӯ |qS }O zu.z#_֢NŔc== ~\g`nۃz䨮2 sϦx̝{`z -N2~PN>RIsU]y0DG9+6Y'5=qӌthn:>~00{}8i1ߓ瞘 x#=C?*AtN8LIpң}G^G8 B>fÀޜ{VN w!z-.Xc9'\|ˏNw?玲G-pPs}띛O KF{ W=@,lT_y>־oߩ>70A>rz@<\GZSر8{PReRC`Gq=GPGa`})!ܑu1!8N=GAAHֳe!}{8#c#;nHǮ*ǒ*OLmg'ΘrNXÕr:wOZ@ILS9y==Eo`#p=HcqtGiS]I.4k9d<^#Vԥ9م̌9*29_A1~ ՛wm˖220~5J-["G4\0+'jty'W'#`cyk'޻:؍mB4;$J$ʆ?6q㧶sYgqU>Hr@u9' zm#謦ݮt%!?RtbyҽO162!eY!T I+ru`E,K2N2SߠMK.mL";>ܹrGxb: _E]Q/<\4{/+P 7F3[:n nW,~rpxNjmE!qXehl '#JA8ץ8Żi؇Z`UTje?(ގ 0!T=P廍K aUZSႝ<vqzz9sh(ơE "zp=멂Km"tWC$cKeV1ϸxY44ֆ΅y,1EBfA͐UOBWL-屸˦2qbshtm;%B󝞸Jvn e!@yk6FapNkb.<fZC3nI#7x]ǃz q16 1? Hfcp#a8G8jڕ~m/ʥM|\{vJ #~sfe-"7ps[IY4g td7*ᘹ*Pm'϶k \wc7q[4~!>`v~\9+@..A<ဤq 1F08 T>rwfEy !$w*ӡ.ZcFE 7*!9`Go(J  pFF7RG\s~竅}>s8<|댑zwL_qܖ28sO$cp9׷6xO ӠL?!ֵ+dc^ 0X«s: 3;tVjpN\0nϷ_4d ẓ܂G]xĐ@O8GI98B' ,s#_Jo `zRc8rLdqE8g4N)Gojf0s< B~\P0sC rNg;yd0av}(98r3sGi>Dmۂ?)Q֔cvsק~8H9r1rw7xtwt;}o^A$dcn'T^#Ґ rU\v#ԏ_J:Þr1n9q<w I=}{riO`@ێs0FwygsOBB+qߎ _< y*}zc n*pNGU9q,c_n3cz.}FiGk83߹2'9!A)YܠXd>^0{p'O5=I8Gb3ٰ0zg<q-zO t8S{ON@{>c:sJnA玤1yځG@sׅ =O=z|#iJӾ= LBA=3HH#xHBd p${i''pg=}zdnÞӞAI8v8@qcqC0l.=Gx@9ޛ9]ۺ z1@ pOQsr=:v?O'<Yp3ڪ#g/~Snjt#`(nlX``g!@އ$#w^rwrq3~ĨXmRqS=xJ0A*ǯNOZl`;C'![$7LyMP-FO<`z}X[!W#qi})=w )[ԑ9瑟_J@89pv2*=TФL؁o=xֽUp9?P3|?3|"ԙg@9zTx$28+{y'|0*i[1 'GO00Ԥ1h<jKaqnvjQxG$з!cSyWivsswWaLF14;=;m^OJx!\u䁏_^j#{a3ސ`r (@H1{KW}@(79v<N<9tt\r{3ܓϽH뜜^8`n^LW P0 sD<`I\pGN@>?hӓArBdw0h`97v851TQ#=p}B%<*N0rO#J -q l5(1-zM cwkcmd9!^KO2 {(g98qSB`~h*v~֟'P )&ʉ>ux=HL;}Qa>(nM5DFCY](18 I^x}I5Qk.v)?6z>1SCrDӷ-瞽yɨ:WFgiL88 U2v9Z"}ЊW`$;s}~#=F1&WMn/Ֆ9Z&~AѰ]èF|ܬbJu\.]zG1QG$ ݹYQ۶G@7m'*Pm>۶/(o\m#]tf9kI:v'\9ڵKZ\H Xyq]jiG+MmBm\+'8Fq]m 2k*-BaR1ֽ#L`R3@<S#uk1SGvz:e9`q99xCK` UaJ;{F+cj)=1 +ٍ Hu`C#c zb[eFB2Fv`|~Aǽ*Թj+i~UpiZ)(z:ts&Xe:eGםOa;nP+17ֻEIs.coIt9Hrcq IñLVs a3ç~9GE\z== WAg|p2pZ\bAb|hȠ:GyyJȸ睸`zfI)_lR*:79`oIld;犇LmM(W(6.A%A!`ch5)sn!@i{3hJ:{IQcSWi: pK 'a`LV3;)YEJr0Os֮``~ﯥqKGcq89#fFn[A1=p381q~};zd…nFFNAQudLPnr:-:I>qޟZn~9^þO sKېĞAڽ@ #=xߨ#N{}~:7瞝*e^꼎:K64xO5fW@F+}Sf2XY@An9ϰ T:Zjk>+,ZB̨LX~d {]GN_AK ݳ /Zexnb>Q+?ˏ~Q5ҝI qSm++ۦZR<<|.N{מqZI-IWXۡΰw^6|@,>RrIZ+띙]ʌ0zvXy6ףu\<GmʐF=tv8 Np(v3u.»I6n=`03Wyݶ6[ <t>h9eE<5rEIp .rxrymzMom%5YZ$cRQijZHS369\H&aI=sZQ+si+FM)_3z yp뜖GWѯ̇[j{@ Y w$ g%\Z . G2? F; T}z7H-&F"EgYar#gm䑌 Vދ3#k u a^p4h|%(P[!ȦBWIÎHФe#o/{#0G=;л'<„lXt?x j.vk)ծxfmDqؘcw~ bXD3TN jKd{zKMW[5x-..{̖ѺA"fI7n(vZVҩC2, ULsaNN-۾43}m򨶺~}W+C;N1qu'|M…\͓Xyk$i^'U)~j[fwr٦Yo׮9qʻK KY6[V`1Tcg%ؙ8ʤ隶K9QASHV.1<`n>@B" \%{%hj7_s|06{ S#W&_N,K4Isqo@SX0݀I0EcoQM_S?ZVU@YN@+O4&8#R}ۂ OEG'5Z%hZ۵&bgsӨZ[.k'܈̹^t9Io[ni _ ^ln#+O_/ڜn q-f$e VM!Y3`ןW%U5-$Hc%̅Sy}FEr[0,<}=*yW1Q7Spr7pFx>UI`m5$AE9SXNh D{V |碟lGzoߙ1Ccp^@ܷ qS mrx#ryGQӊ!=W$ٲV5<y#@A,NWwg=W'iE}j@fL^ 8O9'#ڱ(%w} =_QxCV)Acy^r8'>A-oVM(UnwWߩa~JbhP{ }*%H ;۷#lKrcpUPdJL޿/\Tg;]{bN1r=3SՕnc (%PԆ9c>ǚ#6d+Q ϥD`gګ1Vmp,O׊κG E!e$u<7ԫcP1Eb7bN$ぃT%Sl-c6SR1A#<BvF28/!ZUJ;9QUђq11סd͹;9wc 1LbaL2rA2$ON[=7$v[oW]z ڤV+*+YG@NJy' .Ìtx'< @%rU8ݹ#)_VU&2C3 { 0F8V;7ЦY&$@q K^UC3mgmK_C/-?0P7X(]T pdTFó(NO<~X]Oq R ᔏ3O`r{#=La=F,*s{j チyҤdx'ds~_˜wu]H\ݢ:e8>‚^\cGp2zSv'=:@ܜz`usJi#d dds O$*˸O⋍x^z9pd8=+a 8]i1dpI׷ޒǎ:2qRxp 0N?^gק=~FOޤˊ1<11Wc\#Nz;q֥9'[rc޴Q# gXɁuc:9$cTl1;H>41<Oǵ+nw㚌ǟc'=3S`:~5L V85- "g :` }=YG=99g-N[1F1?Qn(=۹pU[pe὆_cȪ}>`M1;@g88="?^1+n>#$ ˜zc<};T2+ӷ#\~69A"И;uqv{eO#۵CHu== v1@p3?\S[r,dp zbuO^ IyuBGNH8ݷ pONkڤ<ʌgcN~fz<+pI Vs>ꞑ"שNrX29ҹˆ6gtkF}& >LW0 yO~TӾqZ+;MIY!j |&R1ל`}~Ts'ܵ 9֜R3AI2>裁W{3ȩC38gwn0s?h`8s;i9$`vO~) ,Afa@67.wl;*8kh)sI}ǃpv°=otnt>+[yeB^S8b$d@ҾzE{ͻr;rJ\7H9hQ<N`8aaǧ~t]1CFpvI$5`XET__ZNZ"K]Z@9L<c\T>!a8}MJF|C;f4ި>` ,AO\Wh~#%O[oS3cN[b~ˠ˩%\x]p"A&WlPt5ܶ Vo:O]e,cչscveӦx0hѐؕfV=\.2wVoڥŦSY Wvm0L!%9Nkf]{<nDl㹖/ tC#vn Ŵ\SsXJd:Ce\XP[Y3NnFҰ2S˰ztV Uv3K6$p̼SInpTۋ]v6mM)Ȓ@NpU29T2E6{g{(!ΒN2=an 8w|sY-^DY5W\[vѣ+9ߒ %yl>es9$ךԇ3b{y0Gv@-sMt2xH`rF0G1j9b',16H8NOVY񐨣dN3~k0ת'EXsn9;p?i@0Os6Q^]y\y@RpOZCn{ 0zgN񿑥9hX9ە8bwpr;!C0w0m=ץgml[@e #2(dPX`sA''[W2HјD|@@`ށL]5mRM8ĨorN|';[|Ua؀mWr' p>b@9I-m)Ժ/oeʑRA! =O!ղ9R2skѵЛY 9]r둞<^QdK)oŎrǸy'CgG9=q6W;Oz 9L rCd7fuȟD#bFS5]82$wm1u*#ܯ[_1 W@b6ZH*\;N{{ E >\$> bvϕ&|aXc_`oS kF+%d "0=F)G,Ʃ=$2)$Q^0A9fOn{5U|S 9 ULuhZO @~g$tzӌR(a%Ax2N?q֎6G^=qtL1ǩAI#߆xccv2:dKdNqOIAR6)# 8x0;rO^Xt 2F!B6J1y'Q:\t'N39?ҚP8c߯l09; {` @:I~8tJs }v"uî3I\A{}Cph?C;]Oqvdcm珛9u(rz󞅇f>dc8'#<1NG@8 |p<49F3ٹbuL͎l!>$8=Go†O\@Qޘ$\c8=.(ۻczPFrTpr~93cCO!X2pq==m4㍤z׍My$qӃZzKt'H=klZq[v:Aڟ6$FsUcտ}@9?9*}:<R/L60Ifj@nA$2F0Gk.an6:ڼZ F B-ӆ|d}js͉J˪ڟ&w4Ra3YH'>ƹeA 6w~v9z1yk݈<`$dv `ڻ[[U[%ڥ5ױI3tVd$v21_3+-+ZTq1c$)Fs <әs)-c؏^֕4cQ89׎)8$2TyyhIOq Ԃ0;⌃2=q4V#V8ǧ w^r wtk9^8Srz`cy>ZcTyQnAN rr:c@yuɠ-I@A$sԁ0r2y p'P;ؐzJ3zjhs<{21߾;:i NpNy9$r:r{R(< ˭8 tݜ)<_J^z< L3y8:JNK'Q7RSxRy7e`*Srr@ ;͑`U|;u9%FgeŒPBgkdl?y巕$y,O?qCOԥoB0PbG\28 2ka'`$e>TmmT! * vr@}O5O I Fb+:OLg9g'Su4uo>tOsy 1G2 R'N;kcʭ}6F|= P|#:G?J 1h$OǶ>$ޗz}jfKhg:crF@#fMBV-G:~J[O&[g=s34992Lz.yxNߓR+̯Oig=ޞFw?):jNmrlb{9+:}ũKE";^ r=OQe=$e[yYIycFGCW~sjH͵0ȱD 12IxhIP>_cYÿ",Ko|(%ȱ"d~YRda ָ L׉ph8U9; 9Fd,`9#>Kcf5P6lrxcO/cj]~f"0T6ϿlHqk q(X b;N:`wqgverDQD*pIq 6~Ͽ i>[?0^p=T)=QNKV(8lsvgXmrੌ.w*|Ǧ}(I_ƅ 5$X݃[fAV#:R?vy[’yҩh~84eg[ |:4k~&ح jfF9(95gdٽF̆.,rDJ=(m>֤+Þ-Qi $j5vWS$)m4[4/1[~)Yu4mj&b9 @`WhttU8)YܺtRMj[y4vْ$V89 W"{[;8'yR@|a, MJ;]bUyڒsvH`\PA<63<9i݄ekyhivLUAR܇vO͞ÞMt1BάauQDZYsܕ^n;o M8n>5#Lk]@76Rxk{o=4q&~rRO< 5N%Sa/)8߽?/MK6pY.TfDJ׎f͵Ck=+hV%$m*;yRt&rZqI>wl/{ NW6@ P\6*diͼThAgo,Ԭ7v....s50 U+|-iJVoݕK k+a9FZt Jc#d~`Q-4@{ NvߐK[hn[S³W݀ 8`U|Vsj 'zm~#0\+<V[˧Ecjދq~)uo ;t?;kP7dˑYv<ץ cgZI~_WVP:ljA~f6}Jȝ](Y^5Qnݖ먞&KY~_l`# $ wN |sU/~5&"snH®\򫆩zh6d=5N.B%c2@3×+0'WNq~zyvRꔒ]4*:ޅ!d;Fp?EOnKm;@}zWS *mVQq]C܀9#ֻhqNYmo/{ci0|k?esYVo{|nmNf.yr _08P 7nYe;22w͞{8!zz Da/,LI #goc[\ L" J uیqֳ兯tl7sa vᗃ+suA;K/UpŘ۵btnɤU 7]\2Z7{~Us1m4b6o\};\Zl}Ks&2_p9: U߽sN7hGK=יtѐ0> >_'5WD!2|u9zם_h3ގ/ πl8ݴ{נXÝ\yOZWwM4P8( p0=&x'9`s1'9 sD,@9NN G5 s9遃dfʭ=}?I\6x`qr$?} D+"xi^A|sڴR>`1{^< {G#֞>x<`t'5Q}j\wҟ9?E ?㞔Ɛ}=#i.Gヌ $\t9ps?l2\zYԹLy'98'Q{H={+H0@`983{;r>^s֋s-Pb%,wb9R`N6q]Ywu0j;o:hs/ nڬwH= tajHc-U±76T?_]^ߺv6GQڅFNU Ԟi2ILv g8%;l[#:ck éҽE!8UrX)_Aݓck6rE úPv?j[sm)\9'+G+߃m>f<[$RYlA9OsTq%s mgG9=έ+6UUǕnf Ğ3+*298b y猚Z:( b3(N1=OZ4N'N~~9 OriX(<-خ8韹K:GWwLk =KS3Rv ʹU/ԕu>X*a.7NЫpndA\2y|(H) sA80H'XX+x;XcSdBEpN?juM2?8ɤвq0J㏦j=H8#p9@ǐ =@~F`aYT>q 8тEMo蔂 PUldr9 s= X© E$rzSoVT*N'9R _HӖWgXfqdb<>mo/txO(Y[j7e"յ7gujsW^}tHssnJ߰6QŽ@Ǧj9r Fbf%(AkIc̝GNbQK3q$\U6!bY \rG _]`8bq*hmvUڻ"v,=BهN+I`I~@zһOKSlg,Ira;CO#r 4ēٻ1="er֋]ʸr\:2mH&""`@=Nq/ϺߩU>Ev{V/P q:CFC`%)zn+M1dس`.ۛ8:?CsL^ < m?ZLstw}(#zg>VJQ+ = JpG# g8@Ws=iHs{tv<}I✣$@LuIq{velsuO83cqր9>~99cߖ8@gcg/O={dz})X.F\9ɦ}rx^@G(@E|sۥ8c$0'`cq#=cqv>Aq4}:r0?Nyn*@vǶ}3R`gFzqJH 1\_izQ2 ,6x 'x;rCw#{RƋ(s׷\s=ZQnܞ=wsYI"`d`?7?ZE01׷_|be̎}Q>>UC;'^8?ԘC㌞9j" {doCRƌ׏׬SvG玙askfH=v<{V[83UTI{:8-H8dtr;ӽqMQefPGd#@1jRO#h,Wi=[?C{qpxzYЈצ< Qסx)RaP$zF@CC xq>p;~**;OʧrNq S$<ֻ+?~T<{c5;~RT^ͨs7'yϩ{Oes|V_0G719%cRB py ZHDHRѼOwm!+nmf8b2{}8a |ߒDjۍ_S+%x#K Rum:~y^~(jFMu$׵-rNSPhX knb>[hӁԳ.q5i6-nU90E7IkmGAQP]j<";J#c'?^BvՍ2$h#HA@qfƟ:,n9/-C1 T%m,2lRQ [b>X7yRyY ݜp@$9̩2[$Fq݀OE<ګ& qp=jQЭҕQ W/塍goڮLTmwdn/D\}mu|Uیۯ|cd9f\l v%{+&9sqzw5Y%#VfEjH B ^4gQzzY7Ai{'uFCۃW-}v8#vЍIv^[e$2@@blX<6b D*J26 wqUI8 ٲS͉!<ߕsou;v7 r};WdsE9.cA e<=+m#ۜV%T#ware)#zVPCށOj$(-܏\~B[6 kxFAt0 Ϛ>/$}26|K`qvz󓐪s82Yv۸Tc\ezcڕIsᘄ+$ɷxk<]6UїNЭrxe;sS(}mMm<>fxUf қwyvLrN8{Y:aFs=89ǩ,pʶߝ@r)tdӜt(eM5` ;x5urs? b܉W|AhsHrN]Y +P:Qoę+w35-BK1UY5L>ف==#xᑕE11ycikJw/,:u<9}E,x?z>Qk{ ߟNk[+mdp*cUprW|>MI Y2et;[G;o+GLd+GƳ8@H'\WT "V|c9d'cP v֥AqrBչ=;䃖Ϯ)30G<.I'F3|cJ\c$ <{gH=qq/=JFOw˟ҥxSyA@ lg=G_ǧPy4AqԏI_J[c m<_{u .RqpAh1YssN#^3 $=|T9Fqyc[BH#p:.sr~m?ojPpqI?x;ցÌ`=9珼@$rst9cݞzqr@#?^>rO%z1#=0Gp>'叮A'qǽ ~U'#i>1ן`ɠaӐvm#w>I cBH{ ǡ݀ø@Fvs8p8>` s#`w{q4t `?IH} Ax#4G'q8zz" 'JOI v ($`:{#= xiVݏ`dm`T';u82 '׿I6p TNNNăӮ,yz#g^sۥ&!8'Ҍd}cҁ$|Â=Iza7q9&BH%[,NןSb11cz`02pT ʆ$瑀HJ灻<7i~Qx8œg>iҽNNX.qО{PA8%s<N'lu۵'S?N1$w|:yq ʀwH'?19ǦoqJS9Ѐf >I,: ~lv鏔}o'*|q=AgR.Svyぜ 8RI=9큎"_ R8xG@?03q$,Ir ^1 GǾs]^f-]M^*gd=+4_@l#6s׮jQ(arzc'}9-L`+y\B>'%p?ާO6F#\iԖ/m~qvjuF8Obuǫ }L~*sa03&0s!{ݜ@A\ 8'")\w9 1R9 9Md ~?Μ99 rc9`㟑jP#=p7w?LOxW8ONi[ -gzX3`۽CF@8RלvGLuQ ~cv9N=|:I|3O;˱p=}AL>eD@v?k)Mښ]\jcs<"A~e?ŞEhˁCmOn!v a vg~T+K%n<;4س 4-fs.^Ks' ,IU}NH;<M|Yr[zڮ7`x KӷZ\B%S>[˵XUfT1=sVb*i'#A djM?<2lߔsԾDHŰ⠐3G^jCA]YN9RN{mI˭g2nW%8v!ǙN0}͵O/䜜g]pܳ6w8IJƟ~ڠ|FK(U؈*YqW'Ğ\ͽkm5[0FVW8n% pRU%\7H=z24ܷ53ջmpHGK_j ė 09(F`xʊQ9je*;ʚoI-H57 ;p JŃS_S{G37]#J֎Qtnd 1~dyj] tXL0h>UXsy zzf@?/<^j,s#i64t#A{t4;pG99W?.Ys]gopg$@r{ |sO$sGAApm'')s@bxa eZ7t82s^޵.xTu bd9y'IR9M( p\L >=҃99 8 V/F 93z'-dd6_.`4sg-?R9D{xv{U| (z泞̸? LDrr[#K2ep× 9 znfˬA ;N8(n9m6+Plݘ[+ֽ-F|Lr$㸭9 1… "@z#svWX|w uߝ@w>0! |ck u&'=zzmg6K,Qo r=HNKHfs"B 29=z|%+뾶ys7XדKGk%Ԧ#?h8%@bsU*fRΟ+e*Ås֪O.dMDeb;cRT:Nj-]OcCmRGNz*o?Fޗmk_O]\-#V18;-e'YRȠ'q$jf}Uzf;i"X0|8e8xtKeuYJH>O΀H=C[ T˷Zz$,J,X!ܪ[qyYBU u8fDHM `pV=)p'$cҟ} qIRX@o'RV9uF?*/"]Þ^ip H-Lӻ "T $]2zh-QAh-썄Ti^M_o0:C ,0Е-&8U9^#K!v[\H#WwAb+~quT@Y3E)szիed}>>x^Okm; UY גt&V8U<^"'okgY]kݻ]>G>tHUӧ>tJd& (bIH$⺫ #W<-ŴQ&y[~) 03z=T┷_x~Dtdco!e$ }+Ӭg[8\ \&ᷲO3]iݶyJtfѾ)KF-M|m&d"8i':_⛏,iMpqeo#eH' qW-MMrW!s:zs^}F=vǏnJZ3ѡI[r PzL׭p;g;lG2'p}}j:^m`21pzGRG^G@?N+z*Ǒ{E x;ׯGgHvGbe;HW$q"^}22'ʛj| gqLytQ uF v:ZRr:Oq8CC{`OQ=֣O\GğGt8>;߅DϞAGco^ ;QI=1P<I`qc֥Rpzb2q1qU69>n2l]GoyjœFx'`=kIhcnl}=&Rx=:8򮸘2nnp~Sӡ=?:봁ӓj AV' z#1=ujɛ5>#>㊶qpAx5UճІ>a i_c# zB+R!)ܜuQӐqҠt :m܏Zd {J;g3/p# oc(Ős횬cyzua$k@S`3곡UYX3:H_a'=z; 2t1ӯi|p[9 =)\,Fώ.9Ï\8\鑳$t8Gc<8<0N01>Iv>6tD9ylh3kJ<⡕T>al$9}~tcڀрNX`X)' 8&|WiA<cnUO4TjǴ㌊tpí\Y[|pD!Wn{"m}$ -B!%KJrS$Hg'ҶkGIn08{ך#d>Vb0@9H gIq'789y~r@VAs܀O'vN++S==ɶ2n,F7<5(X,π88ӷ#9Ukqx oT`\ Hq\vұ$` r17ʟ<4[h󛉃6%s=V=hp 8 o9ǩT*JH`]X׎9XE9mpgd۱,QӇ!UV%p2z1:`O q) ǎxvd 6.1>5Q,*5*| 睘빕wNG{Qn( 8\p*LchDhA׎pU@!;Vmu* =9mu,M0fsb$sӧ^=̡2XIe!@eaֲ:kj=v z9cӥzvH 硯;/vG]%>+Yٓ/ٽ?v##CcHbk}918QMjFHrUz3Q6㞃v ޸횼==;^.ԐCc{sϭI@J}= GuO (=OH8.}RN:t<oG)CG$pK`~Hw;p?ƙ"2봌=G=:Lv rqܐ}tH )$׆ۭB0᰻``;qe(׷l,' ǵS$Gya@>޸A(|_,Cb2*=1ַ1+Hc q2 }"HE\^OZ(-綅LxB9$ufY:c1R2S)!_qRDG.DKai}ҞQ,91Qkffѷ,ЛwKI#@C#+[2XlqHyE*`6w!ZXż %]q߃^_y,36YYh?^x9alB\ 8<wگ(R>mOċ7@ HQe^9W75$RI3#+ 8B7oC"#_jT%'(~qW?v䒻Wiʌg97)Hn"df@gfVڡmZu>Z+.?C{%gs2[/6[9뛋fM29VS$`\Բn$p~knK h#@J{R*(?\N^DOWH$;\.1 ƽ~60BbΠeiNjTMZ>4ˎ~bs tn*v 8 tkCB %GOzS+&Np>l7'Rq:(! юѵ% "&Op8T}Ll䌯Ͼ+'6 FT6J31Q=~iMR!Į28zEE7'k$3)`"O@1nyp44}N}ŲInz9TTsqEz4ZyS_ DBTgiX*gslĊ+bG|s9ј؇"uIog+dʿIz95އ"ԥq6p1Z B.y0NF=Kq8YMdŲL:V DF?0fL/5']t n >}݁Pܽ2~ֺ; "]9[}O8iƫy+0.|I?1UWWN0;t`  IjA~ u:L7 tP[{e_*d(WF3Wjw4Hgm&[(bX~ۆz~Fx[-CM;yJ&16K`qߓB=37IolT/yW7 P7AI:c{9{[h/0@g]9ȑ'x Ģ Jۂ\ #9GP*}\5n AwW_#ZX(R+,JN7<;jgVYjVB.{hYeFsҸiڒ,stĘ&SO7G+4ae|Ry{]wC眊]=' ӵ6+x!OJ7`y#Ǡ+ '+:r9/9'Ua͓<6=OT^F\z8xzcYo 6Hay>btN}ϥ8$:` G8O8niA=;PA!qs)r;cG$w 10ːp =Ss#v9\; c6xcҘ9FO9B@M~P `=9zc~-ۯ.p0灓ۥT=G?NwM8gʆg9\G;vxHXLt GJ rN=vl#p}){pCmp:u===hGA g`zgsLbnr=):z知)O8ϧ'ׯ1uA'9pOw=ו8x pHG.cy':gҗT )!_JhFr2F88zSݟ?> ؑ8jbY6slqA,f@#Ӏ8Clz)9`ǩys@~lq#8=h|HbysHxjO{cz"W#2'>P|e xv֐vqhlpp{sB du|9@ dRyk{H\+xsA tr;OxO28=1i o*F0;wPILQ݂wc*9r1(c d|ǵ 8#^`}?|2X1W$\R+qg#pg/\|me%;❀s{3ϯ@'NqLzBvL.s lg m^}zjIrr@zt:s$!8`B&t9<y<{gH2:`q=-~UңsxcLq@ D|͞PG^* X8!q篮;23AI'3=[ :Jv8O#C;{ CX1$ ǐO8#x8 ]$:zu={SB0T u鎔B݂^G8֙8?tmstN=@zz#>zAќ2Tzxn8I-@NA8G8 }sR:=G^GLf x:=NN=9=$g#z@{|c8ݜ;$ӗ׾L:~ `Bu8 Kg׵ 4pqԩn? %d ɴx'A~Jgv3՟=_z?m/9,[l=WŒdh?)cjN$'xV9d01sХԼ1%I͓UCž+q8Ϡ5#)ع>]t܂GA`$9)*1n2L$]򠌯#A')6q98y?ˡRgi*İ8푞Tn8'wӚvAFIv *y d:1r8 Ǯ:ԅ1<`/"U0w_d*l>xRAF@?u\Fw,m(w(p+Ў1]XV͜Oɖ,&B|`ӵvpڑPY3Rpqһ==_-̻eP06U^䓊HB Fn^ВEha le +878rxbنٜms>A`K jrX<%\yc<@ =BǸ ;d Jb# P͵q|!3MW'UV( d H.WU=d39YytcY1&wW~ #\޸3%f˖_qhVGuǨ߹;,T޹.L}hNsy_Zv{t|_M b&bUdN)$vScM*bNRѻ[[avpln";KU ~5nd`MSnvE31WHʱ h|Fd)$F9`d )tidW* lKdm!]e}Э.] d ppz47rL6 \E%`|p#C+hR򐥊I1Q v S!L.9A-X F 3槝65b彖_iWfT*vPvWj U,R}.[v ?)9?f`r@dzV~V>Sd9*8۸5$L N=A= !J3cކз"bY2U2ӎծe+'*dPN \ppqV!ŷS6 @m`~{\0 Up@1ێhV*04Tb|Q9kmۘ Ue)Gޜ'mATגKy0UT~O=d9Vl72p'__+g3<~_e}$v]*O16!뻒I =hS7;naA\ A#8m8GP87$w#; N0iӖH@`܀6fޜn\_=TP<לsZ;mps$d ڔ?f\Lqr0sȮyFTb͌y#' *j%KR\@Qoljrp1>*_HVR:1<旵K/'If EN[ 9cZjT2w NXi8ThۆH=;"ԑN2 89TPT#Rʿ1$ 2d8TdcV!'+ z8QUOm S|M( eO\aڮū6p#ӎ%{4ivbS!*$:gJM`3 ~QlQ5t3tfZ0]9SsU[Ȕ n>I͏9gn nkFeF[tmwo_q]m#,pX|; 5SԉkTv6ڂybvO}==k4{6ۜ q浿4YTo34Yʡ,U V x cּ|GOR;RAI ci:#-CxҰcc>`1֓1\X?犑!~q v:qyDD =*<\}Z; <s1w 8nRDDzn =ir3,8d{R =1:cڙq!#'rzFӺqqĎpGA~zq F~c9AJ83N l|sONIwqJ901NHPz wi5p9sq~ȥ 9g}@N3 sϩ'4HN Tu}3ucJVc0Ϧ eyiťUm@YVGgR7-$am#)rg;S? Q65nH؀K.Ў@8%;HYfP|6מzlTk彇@3\nvhN/^3؞5]AR[[8N|f+[ɕCq*GW,orG^䁎s,+(6X,r 3U}Q)#suOƥF0%ds֕"iv6br <SK{mݷ0#w[lV2݇w$nx1үǹBY5+鸩qZ}-Mvig*ʪ ex] ު7WJ@QSH PyoCFU?/N=8oMsWms8ίR^F 7 yDFwJkq4 .dbO@IhCTx `B `I?P9@ȳhl H( d}2JPc%Ktn9 aܩ@~Trb *%8Œ;!RK4hTqtȪh0&B@,Ggiܻl0'#Yrnt +!05`ȅf}YJLHFԋЖ~yY'teH&2"!C#Vc'EcI[7ٔbkw )/-Xkngd,`dTv! 18`Y}'<X7Cl4mG%]&wA?S/oEg r^W[{6ބ5oᙁ#=w鞙N_cdr3ӖOҵd<*}~"K33(r<} ޺;y*;,H_;3jV\NڣX6g#'d5WU m/%DksT6V˩BpqSNfB2ppH[?+jSF'c'y2\՗eKd_JWz3>sI sPI+z"a֨I[2'rFȞbN>xk"ƪ `zK$9NץGְMl\G^rGGNκh~gz3, g#k, zǿJ?u9ݝd' 6ӷkǟ?g?~ .ed3>)s}?CZ&fЛI}Np8CP#i}2sv֓aa y ~Yӎ\,&nc.1!~lg=3Ia~.F <{GMu1ÿ>-Iݜ:'~yrv>JWFltqn18xybK߁g8~Zzǔ{~+"@0B@'߯ Wl"^OrynySc>y>=  s9\uތm(7q8:CoQ#n} yr՝&m_9'c{:#;{z28)cT AFs߮0lTHWnm5 z9lےǠXH$$1\1P27 .ۏZFespǧ+T,8#H{hSdy^ ?cZ;< èVZ2!~_1W1AݒU'8J(kqpHyǾ]>`2; g{(#90?ߊiO H޺ns$9=r3ܑmB'i`#1Cz7` xݓulǦ{Wެ#r6' <4lp8׵svZD#`q*3&8$tl9#R; 3=xPqӾ9=i6 $ϱiiQާ+Ӿ?C\2qǯ^x30a$.C$N1 >w0y9cqis|= $0@^blwasIPg#kJH~i_c#5޻o$_#O^}k 6h[_el$Ƞ5p -VYe 9# nCd3e%Z7Rɀ d?Jhy\s+\.'p8ǓF+)ZYO] mg9& ;!I#kSOL!;&FcAFFz8n9ev^H OXr)8u%, I>q+b7T! s?QYۓw$Pĥf\hlp>QY^XsMF8p9ʛ W`PSgu+h&a p9e`QfČ T63Q:ew*>e$/OOA ;wGTZKSǗu-22X} s^|qv< x#΋/&sO\jD9Б8W~Pf\=jq3>?Z(y7d'gG8"L@s sLv'Rq9 翡O82rO)tEӟ_N:MBܰr*ݽR%Wp03F 1ӹ yݹ1g@S=z[X''ci0p{` q~)p z y>ҝ۹`azqoǽcԖ?=cOHÞ}zzM>#'֝Bn瞟~)g918{NێN[؎8}64UAv@xj8q'4 1!H9?.\ⳝN:Ҳ 9?1^Xd`ҩ8#ǩrI#Ԗ'>֢#a=O:瑲ers᾽c5]Glc+/cMseʼVF㑂2x⥵haMtt)`m$E p3.f 0<2kkqB6ũ 4nrJ1Wrm{źb ~eӞQ$$ų V^f%OBiBO$#ɉ! <@jݕ(8G2G@dyXm}Ik0z6>c:i H ao8idފ9>jе$1ʑ H&3(WVB #a {%[t]2إԊ R1wˌֽl'HסN2KvbHAt ?0(7yuŒqs]_mLݯ+\K,-g@^sS^FGTrBޘY8;pI8$6ҒecX2m|ՋY2#9.KQlv<3^ݜҏ;` 22I=s@:ZϲVXڥc 7̧rsXW5ݵ*Mms,nﴲ 8[u m"$H c*FO=Շx.bF1?oJ%lG9lmu۞5qI^wo:9S\ov[Z`]%i3FK!m>bc wPėEP\h;51NJ';B`JI `N81IEj\~css$l;E=拙e NG8ԕ=jPcpS>h ,~A)ޤ86'IyZ=" s<Knr8'zzNhӂĀ9c4sqz`Uq$@qnOƫzp5Qzh͝=˃EeH#ZJ:I<9r3G'08h4xO拎ߧ nКG^Iq_N!XPq% n8ׯZPN:$ gP;h?y'8:|ʜ[ zd +> <~Wwӂ3N>6163qMS{֧n=H)fUpH! t40ϘncNpv@<\A8*.9;ӓT su1~_8LgԞ?v2`#;T 40rA?]^F HcA”=7v#i~T|'qc1'Gr 34p#A2{&ݸ=2[=( r?InoRF9^ӓ#  ~bGoL\èKzOH#N0px`'n A֘ 6089=H 3|fH$OL789mHyץ.2I\~Tusx9o\N}9@0,\r462W$2A( ܖ$pTLxrWq82pXnNs֛!P}gt1p0=֙ߠ9 ;t(y9oQϷg9'+ݳRsx#<'8G\€N>W<W8sL @NX󞧭]CnXg_ϭ9on19n9J~bf'2 )X A= ^I9.{LqO;`!a$ |G=1 r0GLyw=K\1N?VD[$휃I7t%`9=FjKc< }h^''>h?^[3G8+9F˞jטA?'#>8z,ϔW pxcU 8<8kds6.`W?9#֧Fl .<U2e#.1II#{qL4ns}'qs֨U7 1snzT(ۂ{)x~RLS0q tqH6s0IJ>R9pA:RgJ.˒2s׭=s|($H)"PIsz-|3p0?y ?Jbd[˒3vŲ_ lnx dTuⓩq#- @^ӵc8ө p~oޛpIqؑ~xA?( :dzD*r=>k'7d 51ElB#nc={=id>Nv8ӊʕݐ31>uR+~1rP7o{>$W8u€۠{RRw{\ѷ;eõ1\=oiCɴ,.ʡenGZ90m:8.&633UAqv+H*`v1`WS1jK#;NXcaZW8RH w*GF˹tp[fL[c(zrxKbX,̀(Ԫb\/o7Ҍ'u09j!; :kZ륑:iXr ČUg7sVim︶ܲK֎ס:R(4͸0\qm0^Eqi$ʞQ',0 o qSFΒ)yˌ$zgKĨ#FeT=H}KlG;EڱOϖlϥl \BJĿʹGZ]rЋ[I,M4cw:dYvnbvPw84ll`|s!.IvBwPw ?:um髙,aԫƲ2IAM# #w$Bv]n{5aRB=!#\z $)w-8f>?!gbSΕ0v󞣃9br]f~>?gi"(#ā^9ةX#ϭ'жoKmdڿ1.p8\Q |ܪaw@OZ!b fjb29`_ӿ^f; 899Su5g¹.W*6p}=sXP(%ON4.NK=A*Trzڪn`@->[rr;s 9݃?\cmR17/6x./"~CAY(f]gMwboa /lvϥBAve7(-NG`s:5#F~Vyٰ䁂rOzB1#tzpB ( 9GBN(hk]?9|Fcc;cZGs2rF~g;709\M{Rϛ#0>U2=6yZ2H<7`\H?/<)7 csO F;wo+mH$2HnKc?Zcy/%FMп!bBe޸N1Wf.rD-#ۥ—u,O`pj\/1#INj3ydٸvBx+<ܞQ1.v2r8LspLR8ySZ HAlnʌtn5L\ā@ʝRc%?J7m2 4%SJYA`ʨNI8lZ帑U&q'u]ot1j{a8lWC7TytC8P@' Nq^Uwy~pFI3=Ln9 >?d?  7\͌<(v=@vrs=8A#Ds׷ wTD0 3R9 p6qmwb=*[#%q0?9?~=rB+\^"Szq@e8ހ8t nR}IקЌ`ҦA#d'dY8ssOBshV#pzs@898ꤌzc>!_P;:LRy9.H8?JiFxirdU\Lv}xt!O N :cHݎz @N{  zez8,*R0G|G (>^m-xnֿ0|IeᏐ% ĎNq^6QB"+8_ev=#հ`*8?('<ޢN)+1B*G98+㑓[1ybHlnh=OCYm`8=qשvEg$~E~$͝яJnŴg-D/ai[bG21HyTҧ>ga)P9$JM! M6α`թI٘ӥ%-SќXX<$ qWxn.B_`rqb0p=O4{o @# @rC\MdDAm;ݻӎ:@n;NAlpH>נH.B:(*C rGQ"ʮ HRGIQUzR,7g, #wh^Un]=9pFޘuN3.@L7V~dr Rr:cWV|c?7'I?J98y `N܌Hh!I 03>q4ܟȎB& ($ Tɵ-ARznh'G;"ݤaZG=2O6G ITlc?7s֓"b cBPIv24m6_B}1kgP 3x+ #-NZN6{W~H\d|Тm-s}v hhάF{1p~џ ][J/0Wg7GC`:=M2\+։gkwXArw>>VtfĬ*|NR>^deͪ%&mY>$lvH]O"2L$DiQwfg4Rb2FAxF\j1PpF19]1UWr ŗ8qj`OH!vg8NI=38+]FC=Rr7rpr qҸ-EFsuT=sѣ=IC{p[9#;pkb߾s9۞e18#Z֛ƜS{3pS\ 9KoS=NTt s{`183AqʽZ >s,;a |sc?]zl v (@ߏJB;s׷L~5w" e7qP8^*e!3~;=@\Jk9F3ZbGs^zq߮3NyGC*FA7`3?SRoc'==P44p;|qj63XrHMH,Q _=?ƗsOOOS[bqqאO_J(}3rNyOvv9,c,2p=OQJzE ݑ{BR׆"0N>tǯlBjqv\{ zZ8ssqx^{zh\c _ZF`OcRld 'h2:ڡ2A gn}JD-L1R*?lVlv$k?^3r`\q2p} VkcAUfp;scYu/!#?9_Z/`rz|{=*"U'ߧ=B9$@{~Nrj¡ {<u\WEpUܴ@<gYr{rIMpy9g nH09۸ӞGsf!v0'[p$*L}8s\5lArGnqݐx #C!o-N{W4w$Cdu?6 W#/= 8*AonGck!U~GpǸ<=s#ЃtפGcYz Ǐn<F=>R'6jR \g҉Z[l*29nNGZ' ik͞)-`K;K岃1ݟ)#e ϩL~%cIu֙ T!P19@H95@(LltDZM.~GfKf۷'̬FAQoZM̳TP8Rwq?tY|nrA,lT<*G>TcVP.`|qc'k{-`6NApcddg߸eKSWh#jL--B2b* ^沥|0H{rH"9fB@ʟB rFO%$D.3S#96aICr_Drzۿ. Շ\ z‚<O6LE@FUNا,WsJ80C O `⇰݇O@)#3֢b:0npG$v; [FpT {>}G*a0-s4oaw -G#*sfVt1#)bѱ;pz9kX}Z5' .~^3ҒJZ/;fVppr?eqHG̑LĕPU=wׯ"bM:F#wU=sz~^kA, YCEyq qzIJ_V_H Bsӽo[,!r1H9R8ّy'k 8Lޫ-:M  zL? s4G `#- |tA8}15/p$`{r}rVڇB>wdsAs5v ̿qJG_|PO4teG85ܸFúo N zqʾ5= I6PJpu֢4F6g KɖC\A^M EGqvWfo.5hx;6Y&\v?קp:vv- pNr@xi<{nه:q+ qUО'뎧^nOvpG\zd1>0?;$7x_^ȤYr9T'>`B8a`8>:?7LG=N$_DS0FIsBt=2GB ` F?N0#vx.n@:AqF>lя9^9<1UԒG KUsN@@8޾%ӓgDnz\Ӂ@@G| 6H x1=IO03z(Ԉe}9֒z}zR9y2yH9<c9jp Ȱr:}=)fz}{``(^C|88c$#=Iyi~dc2q8'Rza3ON %^#^H=q@!ߜsܞ1Or FPOl?-Dރ6CeOL?3Tpo8OZs"dm0 \䌓 [탏z+DqsHS{jlgF0^3+cvvg$#p=pPOl8ƻH Ї{cgk.r1\OcшAxtOLc@k#D3S>^)c 0rhe"e}~0^pO<ǯҲeEST㜞8v?3_B3ӻp?}yT:y(<LzJ:aʓFӞ~T-/QI?Ͻ;1O}h'q^=jLrpH^/u%x#ԤtKɈR6 q lȮoQ[Yk-c8d{cy WdRӖ19Tw5wbW;\Wʷ'#ظ10=N3Fs"G#~ -Yv'g'vc'Ҳei:&Q#ӌ6vv^:IH9^ZkaZ<9 1%Žirqˎ:W6 Rh|/i/gcs(ʂ1l=NPuM]#[~O <r훒e erq9ϯJ1iI?ȖCsngH|c˜ltnǁ&dy&92 cya=*&!#i3+$}'9#?=BO(H$ʒ|0*lh^,`ܲ4#p{U,Xnߙ2r(ڡnڦk*. %9lr@\d1޲dvW~\| XEY7Rm©8_SY29<Wpsӯ99,11lYGhז<rNpIO|d1#e*UEX r`ʢO rYPew滍>]ONH }ӏqNՌftwP1YCǨ|QǕB~-b_0I6]6J09*BE${U#V+ =G;B5&Beu=樿JG/e4wJ'$g* uKx&mWֶwM5wQ*H' G]w4ӪbI4 "G˴FORfͬr Owj"xa7 :Sr4HgQ'`+ !46:rH54#&s;o@~ZV1I6Zt.@WdQ^ cۦ9#9N7n#;~<5c5*eq+A^=Xi {Wt,qg+<,'HS,l({zTqXnZDvbȻݸrއMw9D`k6$@Gw5ЫRCpT$B$b.,b:꾹mbil.u "W`Ǜ3$*HdMrevZ#}[C.c!h] :pPIp:A*I4:H[ kıD#2`"N 1Զ}(BF̖y6l*va[v'uw7>w Lgʐ~[>MQhf{yb dPX\Cq[:keE<UT)n7FNrVg<=>B ci+1$q ܌TÎ;9XrGds^Dr8$ 1$Fy#u=sdsqby`zw1ӧ$zv&0:3)<Sbc ;Opq| q\w±߻O;6 O~|˧u'^1R0IITsFNG'ޘ.@ >fq' ?ց\P>^``~9 r> 9gQЂÖ᳆A>'FϵrQӱ ҝߞzc*9CSzdtiA@}4\|wߎiNld ힸ!GأpJ}GT-a$pJMcrGy2Y?_.:ԤpNz;~ ,09< 8ǿ<Å$pjAArK{11\W=YA|{*XGBH뎛qOUF0FzJۜq?]ƇrA(qˡsvx#:{qӭ!ۻ@;~<*zAJ@FlR20 ;N:ڔ}GM$/B6\h\/<9m8s pG<}x@zI,H<=83ښB`gpw{.($mI&~m 0F'?ZCH=F~l vaFh yN Lg'w>Dp#=#ړe 3 {nnh#r{GtR5rҌn?¸:SvX}2i{<^g Bd${('[rO>@2*b\\csg't2FH^8?1NOs r s {p s략ĶWLrt F9>#9b0`u*b^q'qRRy@?Z id18`{q9rlc9JԴ99GT]嘎Tr;"Z԰%'9#wt 9s،(eRePp8J|Ԑpz904u_ !#* n s?RoIzsT2h!FAR}F;ռ1`Zf>{c9<O\2x'v:;j%8;̏PzK{FyT<}29y欢`wxKdK v8uǾM4"$`#U1ձt<PFi01 !_GJ @䏼H=NHҟBXJ2wvG ^[w![#*[9 ۞G R\0Gza$Ꮷׯ>cRyʜ9Qg9֑1І#''*N;~ )L.,TG~u#5:%TNN8=/ 'i<{ֳ&|rRGk_+r{@H|ݭhBIќopLV*w^skz3yW3`L1A9l 69 ==s^exڢw! RbGT?ܳ>@16| :.+K[f ~l 0F lHYS bHtC+F :jW即d+ n=5' nqV$'8eV6ABV`[o s.AzȝY  'Ě;+v;UČ2#f '#Giʕ۲>l9q皦gHBrz~:t,w!>RʊtVGi#"G<&b9ʍH󁜜zTR~*m\1 [X^r9#\ {J3J0͐]' zUE o^e0㎵7v,@)TcUln78X~Os߅ *2a`Qr!=2sR%rO +n9ZBlF?NqޫF=^9iͧ|Hl` ؘ9\;VWa'8$p0#ФKd@/XHDk}EeH319*;|qTwHcݖ3/RT*L 尠HC 7|zNRkBsT *,22c$2Hs\|˨]UckE* A})5J)Msp۸;|$%s@`7̤Dn}q֩Jr3rr6n:A]7}2!g!9QJlvAwyᘴ@V׸gcW;azJ&z'ssab;ʨb?* !]c߷8 lw6\h s#Z?̄[h>h@Z6UwxӃQޡpA29wE_RZ 9h6 QKći= qVA܋el67,}0K8Pr+U iL?Ω.?yۿi. `EY'$-#U#0T~s,{jQ~W>m#988#Vw)-y"]Ŀ#;ݪ_RZj>s,*1c=ӎ?*C3{ДRq}noPTj0:ɺU-3:Z0HB#G2Xn.ţdX2Sy-2Hw)Bۇ8&G︓9]n%l|>G 3|έӲ<&鍐q1=kӼ+*,1@ڻ~c>Îpvkjz6И>Ar={` z~_AURpʚ濙UTUP 6p:J`(c<~ϓzeAy)$r:rɤ4$ QנF9:7q۞lߘ cWc$pp~4}1N2:w fFHrNcsц=6=="qsH:pG9pp:G@98C`s=x󸎼$P9mCMmw>G^:AH@<9%G98zZPG@$p?{p<0Gc)w`8|nXNhGy})x#9 < sM2Q"bHϹ9jq`sNӌswD=G̠'&7 8qzphBqG댟 ьd&^nvnʛǯCl+"rsg1SfNxUb*'f.οOKq)kQW?)`yĒxcPEt]ف$H%@#Ԣ%;U+5s̭@˴E@nugW㻄:p_2 X=vZ.jl*ۆ"2"U}*1^Xr =>kZu{s߻{!7 '<z'VQ3I+XP؋9_NMy+yaﲪЂ#FaHeJdg' U tF"6w.'1ی՗rym֬ITp jva[%Cn`G֜ܵesr A劃m30@ 9pqߠ=rHX]{ aGJKr]@gQG9S] zw3C/. О~lg&n-#@c<0ڻPFF=1X6i˩RQHu>U"aun&LRcB9"ܩ<чOݹ! }?ZYCa;5EF(Xv~4;`֮$iLw?U:'~GYs3T.4a`| u䊷W 2|DH.nsIVvՓOgkR/'A噌E"tSp=r>_y֥i1O ,J^LL0~s;I%sIQQN*,3 !ےolzf^?HdߝF'2:'5{0H>2\䜂?{ih DYw0;JWF QWP"p]B@,=ǩU,pI `G?P+XwT.d~YcwqBTcNG9S}1B:FwN3Y܀mI #'MpK*`O<Һ*%['pyݴfpH'ի,abQp2=l[siɕʊC3q$}}kN? ^O"`f]}dZ_K*T]c`˞O^y5 fN;S,*) |p96&W Id!0v"#hy6 #xRB2"6]R0 g1Qu] osw0/_0Xې3ߎolhRD-Hp;_LǨLILaawB(;_=5Ӥ {>A1f5#I_WzX&z>#:gҨ0w0=H _+#L~rsӯA g'ׁX:1kSz}bv8$ W(p:>sҡcZ۠wwN1Ҫ/L9lt s}}+znPx#\~5qS<Wf:}=Ezm6p3?5OtxY/C뎀9z 28㯷ztއW a)=jǧ?:2QwxޘҖ?Ž`'OԌ}iSA؃% *#H*qoJ˗[ס'9溩KTg4e?^sI'OT1G<>9ԃfFz8~[1yIs\W'd$xlp}xqr0pI>S..3?;ש"qm9힝t!u< is$`ʓcEröϾ͚Ђ9$Ǹ'e" -O\?* {oʟ\CXH""[=9p1K}/X9_5Dg`<aw9ǿLj:@py{S lv/RYO8ݜ'֗n1߶8c(N7zwUxg0v6` wOZ?i--L̫3WjG#03q8p{p9n8gzq$@^ʍ3:d0y>:.InMomnOͨ$]۝]2F1X rlW}rEJww[v>FJg#ׯNANЁ?DvOl/7yJ1݃`8>nޔ jYQ*^q߿n-<8'I1`=stu֣7+,q[; {-rSE ., U=aI J}fݧj"֟_4)T"C=8q]IfK;~\>O˝?ta~KqNr~c>jJwSs؞qɪ(nmz yj̳/A(x둂Hp3[H𮣯]}2[h~^@yh[N{3i,O5; +'>*k};ۭ!Ӿ@宦@A"1]wv?LZw:ڋ~<~j4KCё@Y re9nVwEv:2_ݘUQI<rrc;O׼Xi2[]c1 Jq2>atֹFJw> I).֔fO[wk md#s޼*U~GBʌ'CϷqWSc3~"jx V;z99\ׯDjnJ>gh 尣 뎤O$dy!y?.zך8ryB8P ߠ$On~|/O†mm蠐1ݱߞS8DZ$H'Aښ%sy֣0 s=xwӀ}S*2:؜' OlԌuPY#B:+oSx_SqNsU?ݹd.ZU>XnsO9**n+ .wuoNsc~OcnΥn"ߜ ԜT~g\zTǜ`cCHi~O {7-}j-lGo!V97?ϜR3N;s,E 1#?ʙhpx9鏗^ݹr)"=7 jr_%A>Y%' q뎝֡;~HO_n:W<6E8c g^N~m0:R;sYHB{߁;zr=TEI;3ǥfiqԑ1:s><``ՙhms'q:ls1%&0'oz9nt&L8+>'*€+\px8^kӣ晇qVH''[8#9ǟw_CI8>Uer3\+d|-y%n17B;?USl $_5wtuN8L$`I#kuDۮI%8oOʫyzg{fow'< zA죽 N9p2 ˞9`t<dh q? ?p+)j$OSp:h0G8}q ?@A8=jCvs>ΜrïQ2N{ϯ^zpUq$3$Ӡ8nz+dNȥ^ўiIe~5Sp(|FA-sK&&5LXmaVhطJ!vcq@VXW<s'p^=-ZBG!I"\s tm"1"O,0ʀ?v`r] pwFqyV8r0R9]>JdHH:c9$g=wGWPP&イz1g64q_.)]*U:⺯^{.Aqos$WC\85y8KFoxĖ+H$AeC{pGSֶd|A.j#E"G44FS{i>k#qQOx=,tLX,hrL n|Njuע e v@nRkrZ%82Jm0Ko[ro/&hJI(n2##N43 m`XЂWcF?T졸Zm K7g! uH R[O4#G(,"S!:+WT$\ :sQ4u` 0sNy+AJcm= VrVe}&Fsr:s{|^ޞZoS)nge z>&wGAɠxsn2w;n;JaSFQʳ =x#=\@#,͌sӭtvvbUwl OgQ8^{NyܸybVeݹ\w:rqk!ˏ%A'.ǂ]wt~dF1̍O#5s2N.\p g/caFWHr:VG~] 9 rA'9'7L Jѿp:#ӊR>q'vwgqW)rv`f2#\r'ր[*SLs;OkiKIfO \oR*sc ~P: g8#gs+!">11\juYbW`3݃ӊ/vH#9ۑl &6$ZO/lA3(,TB (>]w>Rf4)*rJ PP1Uv zjSgsC NxHUmD:#V ؅9Vɤ!V/Nx!EW'cQmʁM Ieb=WwskJZ'.$[Y07 r@9שxPir1)# _GF+Z8g33 FG`U+q5OwL'1+~hGz#Ā!26Q8|8T`Rubw#sU}EHrA#i~=_S(3[dtSR!rI>aHacT6qxpjG(7/FWJ{ 6;u; %W}HAtNrO\wZ"U`H8%O<zw3]6n=Ny8 C1R)'ڼy9#5W V8'<=h9+:΋K`g$l*'FI sژHAA!QA8$=zЙ#ᏹ$ps}9H0zaǐr;NhrP}UPp3|'9T&. 8>^y8>|0=J.xO\>t9pW;OSd;ߧn1߁H 1IӁs.x'y#a>h!ug=?#~7m gr<80zD9NN9@ǨsHOOSL!r'3#@)*#'zҜqtoB#`w##;~=i0GnѐN3gQ!݈x6F2't7w3ÑoOʗQ.g9rHy?˥8 c8np@9Ns@uv!rI<^尪øs񡅿1Aum#zL'L2e/yڌG08 }s^N+-{8?:L L< Iz$iHP6Rx%:oNia$:~/BrqrrCrc3X~&I eG GR:gӿP{bG=?ӹcy@ 9?\tt~Ny QSc#g8#z>ئ&/RG9ߧ_~ҟNy `q:s8\d?I||1z]i*1v9󞾇4}O /#nFI<B} 3sõ7$@sА8x` Cppr@<@ÜcБN3@換H'9qӷJ@ syN9E#u:;s@B$_O u 6rszך@p1dBh$g xJ:!NrJ.GШ6:r@h2܆'v$NpݏA-~&2yq /L9TqaxR4G=[>;8;_ʘtSg}{ĂBF8$u8pV c2GF8*ހ?;4 iF`915n29P9tƹ+AIZ_x272:c;FpVesn\ 'o @H drzP(3SS)9=:R{"NHS׶G`{J ݸ9G?O-?(OKZ9 8VA1r#Eh"műFrqB^I㷠')lg(XKIO ;Vs>Uhs?ՋK'rzǮ?*g<` {_1&r238OCV 8ߦ?ή2!ȕ_N U`0#:[&p6Ƕ*nՈ y88<Ut3#91x'-^*s8;@ہTwzry轳隔I#ni$nYNzS%۷=s'oH 8!N =i͐ U\یӲo@iǁI׷NadޘL6ᴐ A3MR'9IG8率,v~NÎ\sж9}MSnJ}ÕcMRr9V!p n:>lck_Qʐ\Υ677`%?T2m֢ #;RHyޑɏ{.G 9){;H<)y؋w#I{W { @ugt$8EsD~+D !L`p1gEM ʅK> wha&](:n#+ٓq: 0#!xH=[c212!2$!\ߠV'B' ݘ@:6p9l`sTrcQZ2\6Pyv7Tg+JP}sב:P$+ >X G}szDHIb =(WyfMьAlZO*Wxnu8=GXMl|` 0,yxU X*S;dr?IRA88,q4ݕh‘v99sDNsFv+q~W=Wyr$ G.{L.㵰[$  P$rCW'$O}Î="2V5ކ%LM=-c#5%Irq<װ5Kr-!۸HfTvc7m I$\x&րw&2H$0z}iF0 (#HFNBY[w?Ò21Un!IE22T=O(+ܝ xv`mUP:Mi݃U`8<ՌVVnrw/ڛF  ݏ*@,pI#HI.gf 7B תybA?uO^6;e$H/JLj99wyI68 \p*v\>oR_6PET,O>8ؽN*];U >9+ݜ<-@g=CҦC;H0n}y=OE-YXH@[g <z1Vܱ, @X~*T)GM51|;7UW 9%B;p@[Z9#*s@8#r}:;T8 LSz+Tjݏ6V=HzGJU@J`ur\U]1~(!pYN7m`c}j/m0s۠p'KYl݋[jUi&~fǗ8? *?%v.yʗ۸'j4BCh$d _#?1lsׂx.-w?&FP;$&_U?#ϕp(:r:S_7b)(ForJzֺ */Q;218қ\hև0r*Hy }f,Pq ،sCI[.2föR@%6U!;~eAκx~yIˈp3IN X[u7p@tuPx 1%prB TU^8w7^Oe]T ,>S׸sYNC*Hq?.GaA aiF楻96GO*7V^@Syҷ#Pq doJRl4p@s'8lAӎBVv ;H ߞǡ$zIkYNC02p~݌Gޥ qNNO^Sv8R=j$*OC׭;=17ϵAKa>PHmg;dOlINx{y@3dq=S1z9$=Ќz㟺=7H99Aoお'x#<':zcp9ysӥ(3r3q@dw@8${` iq.PG_Ɓ 28/=w=>n'8'NNN.P9);i7qH8zg*qBq498A9aG'ĝrq'A>iWʼssۚ.He<G\sFs\`׎14&`=9 OˊhKW%18jL.>=ϒTXr]^E܅uK|/qiD?.O.DX's㎙pW$sg(-,H I DG|ŇZii>X) ,FdS6czcKxќF|-#)ynD Hс4Fl2!7]N96RȎ<r|cy+?C9G[61-lRegT,'q eU|i yb31eB209G:-QM/I9O1!_bi³0<α ;vB|0Hs~fn7g mi[$q0Gj|${pDM+\p$9gx;hnp#3B Oq֘Z+y ;I9P =i^\]MRY/ U?O)XeU8~55-R+5|c:Rk].7e7ݙ_*eǎ1MK9alvI] I'S]v=4(-*yߗ2ƛuf(eByH``N3z5x5xd#f+*8I`֯>(o%P-.d猃_`iYSwG# mTBH%uqIRn%,&Ȉ !PFW=Z{)SXcA\TE+ I$TҼm.-FT𻾙]]Z_StЉpn㎹T!~_4a}z2h˕GMh}87}ѣxU!Wx$9"ah+ԝ#3ӏJb1*vN2#kyxevr##ь0 ǥ>o1rks!$E|vwg'9ϥG*(l'ocdR̻p}:k+U$Xlm#n%FH!@h #3Mwj3z<~&$-+[Y"h.bX6mTڱ'hՓ* auݞjj}+yުf" X892踺IpWݔ*T`m خzǡJ ]wCjIdA*'NVԯ8܍gv>O$u?1Q*GW]z#+˔hTD&y坲7g#<_K,0YB@83ewZM^6vrE9sIF:3wϵpnrïVCty䑒1'~~k뜐 g8w 97,HqnI9ۃמݫHuo;@<` b&Ì <ːz=NND=:#@OBdN;9VrQ" v:3׀G׎9A=1zqi'8z}{Qpsdy׏Z('R =0:H>iBN$z{`yr_>_^97y>^) 7?)瞙RGM#t{wF^^f5c!~F{ ?'튃hny'æ zbq>7y01zu9?ʉuM$9rH3W`{602H=սN@ǩ֟wチNѲ#/?sU1#xDݑQEV`=lgxn\3$f^:7_jh0:v8zuk'#Eרz@*2<EHdw 7w$~z`:u'Nzxzx:3~% Tt=H:n?͌ɮ>竱 㜜c=_=}oEzg<^-Ow$cv'#MNw`G_#=}AWO8$~Ӎ;Ns`}EXI> v >AּFTv6=qs*~ p08¼#B38㓟\cձOV#,H ?)UQ-}1g)hTQ\y Ԏ_JM<`coxֹ\yFH^QZMݻx0*[F{?GL:'q^p81ʥCf6=s:rBwk,|k'2P1*#">sP'_w)*cW`ދWk扙7p+٤r;N>lGZ5<8ec7s=9$ >$]-v$yZU*I y<δbkJ7cMTR#Fs]N8*;GО3ц11>*v`p 9^ d# rq٤[5幓I?mky^Sv(V6F, xs,4ۣ&]2v͸Gw3ԓǖuk2v6#NV-ѕ{}nEվeEbzGRJ v aUđC-R~(a]h<;7/|ˋHF1+ږ9GuCYO>wȅjɽP6`9_\Q8]RPI/oR5紑1w``(Tib临K\EN3Ig# zסOui+4Vi%܃n'4NWVkV_k K /(mEŘ`uchLli Ϲ7^?:C:10Iѫ'1W8tbn^k޼6(i6yqʩ?C\؇h˱yw>ctynbuTgosל~Ivm8}G~Nwt8<;\^W}>S9՟w8p=OR>Q<qq'@N=mAxnJ2~n=#&<2 ldG ]_q N:uH'dNRAy$r;rJ3?ZN >\qۡ9b}p3=}y[.}Ȯ9΄ZSJǧ?ή;q {eY=yiLA "X}Ǫ=Ozw0H#064v|~>~ԛC 'p$$y $: zzqP;4`c g:epӮOJ|쟧sh~2 <dNRruN2H{›8㞞ŤD=ƫuN?jfB 98^A\qg p{לR#88y5~OPD \; 3=،v9* -x{uH88A"<@9vШgw`m?*,=G#{jᔎy =kdznN:܎(RwgvH>b Xcb=7zZn g pT g/BͅA1sȚyW˞11Qgӷ=sֹЈX0:qFy&a=:@qר#R9y׌`=D?X\H%dRF>8$g>vN=rIk&X:Q>l{ pCOH㌎)۳<ǷOK,/NIF8!y8g{r>sM'98 xz})zy=2{uKC"yS$rFI\= ۷'1\,&P6B׿}O]ӭ}tc:o{igma;j,VFV*dx| MќܗkX[$GU'sҟ-2r+ߜI+dh͵lg!ߌ!tHE#GGq[q.@bU1n>f9D TW7||XKٛ:BI+R9ýsQ)V pF-X#uvDFzΨ9f~9סwŎ1Q%hb&++$Yr.;ׂ8x } '=W^/ mЂ@݀ ,9 FpGRyy\qiHV gO xӊ1t \|îFzܷoX4S1ljJZXscYr;SWm89<ל' Ž ~nyEw4"p7n,P@c֔/ \~Vv匈uh+N[S<נj7UΟe&\M܀a[p9A5ۼmS9lzLU\|-W' V_ "2e+H>­~e"l CQs#tzjjj:>-նP L<b_ӯ?&{ycC6>ciOsW}lFʹ_SYH121H=N;b6l}tVЭ9;z9wd}\dvu.W(yyyUt\#<=sG0rhOolH#n慸p\s2?U\LԞ{#{j͞ dsO~w!U_p3ϵF1?!]ÜctިRIrx88cUـ9zºrp{{G8{t9 ׮Ip?wz^GSܜz֗szǦ:Ç=s 9<枬3dd.yu=3 dwqۜqXr =AFOPW犑Ir89QrC9<6yϵ&~adl_Zbh6;]y%9$0֝Sg:I'nw6| i†J ubF{~.>îOCӖ9韧j~x?\JhoC888>"9g,{(`; `蠃N'$wAGb8?)`x3Ѻd?=Qx?1*6Ani<G\q{ wʁ8hb Ht;^><)%I=_n""pHF>'zқ;0UMG>& q: r<1=1M I,prN#=)r2r u`8c?t}irqܞ2q۾hH_P#$ÿR',ˌ+sh\|9)#ޟa;8/dt+7eiNa=z^ By}i=C/vO9*} ۥ7o!zwg lwG$3ϧ&䀠  !+GQ'>җ@Ev`/ps׽cx}^jYc@pyCcOnz3 1c9\@=sOJB88!N9A28=Iܑ0}(T=過22??';nlgoJk!2wsrq8ۏL K`H->Ìqޞ0N@vv?yw$n02{Q6 n&nS{ m]q: 8 k<=q Pw9z-T/BKA_ǵ 䟔czi@nTɦm9=L$'u {Ҏ=vd9I93y9QQ0p,yo8&44+pm=):#GLcH?xF||=v?0ÕTH8$|g?Jxn``(330:c#;Ȧ9bWpA'<x=AuNAP;Q9'ybOOB(zt ߽G870'2N2ǿo֜288A7MǜH!y8R1-0z{җ=Q=7\sq@ꠕ ӈqA7;G\x*C $Bur:!zgޙN$8q+.8O㧭y=I8_p_q'П˵Nc!PWp󴞭'Rt $ɡj& wڦcnqM{'⬦ `;H=w/`8^OKTsz6f;0 ?/%#'cg(YdF}֭\pДKo֭7C:tj#)CȲ%zr827#ozKc>B?`Xۃ5u%'!p@'FOCq֪_eeq'2I ׿|TrTzN~{vL  ;Rw VK0 z{i<`ӞMIœԠ\<>1ErK.r=K?}zvçN=1҄|V=0(s :ǧzL(#gxnG8gTLBR>r2y8H~!rx?2y9stܸfw^0s{SrvBQ]ܱ$d|9ls\]ܩd$g9һ)8jջܬ- ۈq,~m WfɒX0SZJus0ڧ+:s>oR = 뿑.ϕbqn,:k{Xf9 JK}_OUF'A`:N* dv/??~E&WŒ_p&杮2dR ,Id5RM- B8F9Cc?(!v <4 Mo/%LLHvm_P@:9#qTNs &l ,E71}eݲ~l=eσIfMgp#v^ ' 7?U=k与^e1mBjSIg8#_k99\rH sZΧAbOBÌFq= uJI9FKMt7VVRONrf>v'#Џ m'8I:syݖiH&IS+&ѐAٖA Tʦ6hH<3*,*;V<~ kMr`# g sZHwc|=1SeA:`݂C`}*EW9dco0JbW XcLH[k'K6+;ha-z$泝xJ;FJ眞OJj:YFm%榆X,`-e;ԓRv$ln\mylYc̍[rl$aG5Iio qo;C"1]1nI/wERI%w2QR!-9,2NpHݳgcE?r_^A2AcnQpHRx=zf$|~2N;zm@͐[6g=jrF18h6=b!p“zK_`n9waUg grX8N9P:g8jAG;I~a:ϥ[R| Tu'3+B)cw c֛vqs>U\{GZ| ە>^e?6=yٜۡc8ø# ,HϨEsA#ev9]1n~pOӌ;zԱ*9@GAO?Sޮ}@p6^XAf6\t#"KƤKctǵ.b:];v2sۨðy* ~=)9?"&S=K:C)APX d1cu|5SǓv$a ^|5cu2f,8cJb D`'vg҄5\2ے  `:(zS="0P8 /KCR/AHÍE=}+BC_>^Ӆ9 AY9[SZ?cdp>S#>KF @+(9)9;^P )#*OjgBu4;q3{iH |W*1zwl+c8@Cpsێ`YFIO 8ask;B(gn9xFݙ3v8;qߊM܋:z{^GJ۰G9H$==? 7\rO8ڜ}pg@!8*2?/xӷ4c=zߡӊ9 Q`͖)B'v9$c^2k)3N~Ih n9Hf$/x<8=aןCK].E'  Y9{C z+.F9*^)㎴r>sd`s@An~"g=} 玝z!9'qځI c$05 9Rh aLC8= $dK$?@y}Lt#9>G4돻NIF㝼|qŻ09$OBH~U/~`?=Kɷ0 ?3 gQОzip׸S*ts8t+6V,ˆSs^K:U%@ qqkXo $>WO9U<р`6^܁w~ o7 rn_WFʹ'5!9;[& 6] ;F95%ӷ),LYuOtS$:ס FKt 4mPژ[, d3 VV^bquq2s,ƑoW8ˁj[V5tOiȒDe8]U±([ow8 ߽iwKvmseռGVeBfN:׋Q s8sUuq(%gE|CGї,H#lZq겼js~FsvJ|1{4͝6&3]lۼ#AƵ,qQl"ޛG;x)lvI4xJQ"qz}OM],N7]0oSs;+juUX Vpٕ60ɋY-17]I,qw~i]$~̠"&DѶ :iDICy)_p[*BJ΅E<,kfc"T1XUg-rQ4K(G sD*Yn}=G;]MUg[kCYD/#A!ڮ6`OyG/'ʁlI /R=dtO]e(}WvWv6=ѬHv:wfN7HeH݈၀2;ftJZzlTKp d)< ՘VI6Ag"w+W!b8Қz/4Ky:Y /La%QMQI~$si0Dİ,:3>. ?3F{U':.uA)bwm 2܎RV7\Ddh~bc;_BBZ럴Mu;RmvFd⻫VQ)"%e*<灊ryC9m$KHGtFI7c̄HB3zӧ4LZi{2%.Fݗ.K'IK$E<1<j/tF B! ByD#@]/uDF9 q*%S_O1rG'Es\Gd1'*3=z Ԉoyp _+ F=Z#?{^].7 ԉ7;&N}F8\&Z]4s;My$6jK{'{ۡXD΍PM$+1}ѽX/oR-ޑ,aMKY ^ԒGP:ҾI#p>1 z;ֵa3.#Zt Nɷr]B˒̲,OccZ/5 R%2(m`3+;r{KzH~}I } zEѭ; <"E@ኗ$K[Gi~1wY&q۹$끊b}-WjNgMEs>_`K(.&`6~`yx~:PYv\,{A6y݋ilξhgUX xgzzmtHl_pȍ(c`rFr qǦ9yG `3|Lz׀}3J䫳69a$m5?0dw_:=Q%l #yvk4=?CSm++s[sqqZz szzWX >^GjgY0AタLs? meO\ } vҖYnt9a$ut rI鑐ղ()=9VliObBn;m·!(6Fx^x=^rNIcۊ2Hˎb,9ӡ=)faߦ<O0'>tOb16}{9FyzKu6x{[)($ăN3x%;6;q Z)~sVf#$29-|2эh6A|{\琼d{`+نǛ%(r}<:h:׸V'?U-sӮ=ۿҭ'^":u+nI sHcӚNXz?X8Y?=rO_LSҩn z`W=Ed/&I?(@A'Zȸqʕ` y;'䫆dVvIZQKD}$9NA} b7o1q2~$aJ.%e MC!9 Ӝ 0? (`1oNj.I鴓8 xL{zWY遌g=}ke1 |3 OAXMFt#Nۅ+>޸nzcq8}R30jc?xiZ#p9R9=k?i3ǖB}kЋsͬ9J%K:&UC~ z9 _6ʲ8@HF`>^qҟ>N:|]^-X[MbFS"bid7ʌJ$C319`x 0kp<%PT'-9$ uQC]؛A,A `gAǯZXcRFO_M14h&8*Dm ?`zOV"Mwcq F< t嵤w-bEI&\遌[ tYJQ|h ͜;\t%}2jY\g$F 8<=V ~SsAIep;:Hfl+2l*Ns$.N:t\ #cqhlCAF=y#ԑ5NM8s;pA3T6REqm4NقH^t $ܦdܠȪJ U#pN.A|PRZ a3\O$r-N2Ta2wù}xq d91]nnHs$z{Uc vA׵K<8\ x\{5ж3dc2iÎ8玸{t@ 8~gr*>s11۞;&.:z8ޜ'7R;c'Jddv#Ԟs)@S_Q/q#O^yv矔OQ8v >=zRt "{=AH}v- 4}${PqqGgaM! ;g'>3ӂzՐ}{p994"o8nAt9 ؀ cp$9WfuAr:S=s\ooA}2;A#%[zdsޝÔӑdcǭBͷ<LuJEӌ2?_x-߱<>"c=^z|iNrH}@_ְQ#,qz3ЂqJM#鞕C1r:gCr=;fzy N{犞aOppG%n|~>P$cOb=~1܌9zDp <$oCӎN@8cʡvG#nr}iIO|(<$:IH6TD8'Oa=U HȮJ4sw @?}뎺 rIThS|u}rr OBsO^w=,619pGn$+Lr#fkǭv@q'zsù q>$@s ޿J4ޝNzN?]i8 '&*#\O?ʭ/zTKcE;=)ï$=OKDǡۭ;G>hr$/RdsЎ?J' 13hצp^Aӈ8;sݰ{TýOxs8SM&"{S.l@X2J@ȋc}E{yLhW<֤iгg^kv g?r1\ڱd[hqWE{#*4vr7 m܀O2c<I?^I߭R9 M)eT`rn dջEw pw#u N01kR֋3VwCa bH?;tS,KFJ$I+7]uvOF`PUΠ;I^kB21ݐI UWCHLc`ڒZikvqti:d9?8c#`'MْOel$t<g<=NfO##a?N}kU"]H)`N3'{tZ 8r S!p1;^;vr%-U?@H= `AܡFs:ZBiJ~bm>Ԟ5r30u~H>jtd u# cON84|7s+ȑlkĎ>@\Iq;F|,=('W gCJβʌEA,8=j KCܼ%gUXISk"TcF#Wg+>>QO7ȡH,Opp+ĭO/ !0~nF19UvH7nQxzN8Kz& mh#cKz6p񊐅rI,wg̞)ɭ]#U Cp+H$i\(VNAH'i(YbU9*xgxwi;G$jesX$5AuXwF7(tw8GR2sO\J]wWuE ~PH|z&Hn@`Q  7)F2qaJ SU&~8ljMnW [?;;lVzֳM8A\iZ9*)?3|r1ZcYUdvՕMNz#[

NI9H\c6mSǧ=bD`qɰXONH+ 흸;{vK9,n0͎9VUʶLr8ݸ4I2I啑@ć՛)P #MKgs6:{4m$%#fd]B+𾃦jAoafi% J}n jmk};h"zk`f[y.-cKUȊ^oJږPc0rdoӥi}^%JjXk>ieQS^/[:vj#M&Ly2wcW.*/T5'lXv+"F}I8=~)|ϫB0'< J&LtI=z#fy߹'9"3`1Zer1'G qQ[\(ퟛ犵6-`:FW✁#2_#޷vg(غ@occV+(jK<=#qǦOj邱$Yr}+QHӏLf1ЀqqO8^r;sd#rF9I#ǩ|Sy## rrs=@I{Sۊm{=T}~s4z眕zqƄcvxݜdϩ=TOPݜ /1MHn N!S=K2;wBh@@ Lypx$@{{PHh܏zG#hQ yn8Up9};w^1>HFyFKcӎ)S8mލߍgJdr]th= @x\KvVGb})2n wa'#w 1֐nV'$0 =>~ =vI:9 jGR8F`(i'=~sGnc#(=|Ss9d ;;'ݎ#y?+crQڀ!Vaӯۿ>Hg =ZPI׏ҎK`9<:;Q39f;RO8c7:1{2}}xǮz~U ~|+ q}3ץhp\SEM܀p3q*#Iss+&-\gǷ= rT r:{Pz#/\wrH# giK ԗln{y_BF}FpM'AKߓq ;MnN1 >:<~1$pI Y@,rxz~41֢_0N~ϷTx#N!$JۓԁVA==GLԶCV?/<,8ꓱ-hHe*K gS '0ƪ/S'qC9$I1lѷHknkN7,w 0jB?R涌0kRpvTrs7~_UTeT1 2zx֩e$8d0c?t`$.U{ _}=N{{Ǧi1aqg/= ~^yi*TqNװ 08B ޓprp8#ٮ!$ӕa(Z^F:9(yw$#9 }LfhS8q5B>n>` NNH` UkĘ$m;FUܝ~Vbbͦ3.ךpWfsqЃUR2U׹NpX#zKmRH_h# ]T`kje*uzg1x9]J]7%V0c([Fn}HzcPMKvOe y_JՏM87m#j?+g|Wmk7!R0TA'Xz_ 9a:3@$QN[9*bͧB G 6{dy3jۇF'9獽k8E葛~ihb mhL2ݏ!V,18epג:f}YZP f>^^kaBBf <cAfܡ(ÖFjJԔ[UV!@TtIG>OR%Mݣv.~^s[i+->w]o *u;c,8>vYDc{F!;Z'M?SIh-g,XWU8LJ0$ 7v\6:,\>XwXvcu wio,Ygq}yFF 9*0w{unQ^J Mوg'!Nq:L2{d-B&y֩AjC7!ꯐpX1gr*6%dtb]ɓOtyB* ށ̸ig0woPw'}EO#dU{ 3({8qZdvаnTP'.֓V=0Ö;v;2Om:PS0RTId-?ȍCѷUd2B q{1 ip ~oʍg @#iw KE`:ЖdPWg9 ( s߯J"mqlSXFz0pIRU0Sמj7QH9sP˭ʯ2tҠ0rN 6.ryqGQ8 Ъ*睢B+lRˁ׆c ~%.SYFq}`}h2I_;QKOR sQY9'{MYs.>D$f<[ߩHaK T$#2O&(=Nb>\i˖,vcw~ :2G=Tu|8ۻ*G<^!p)Ja.30zC FrW wq g3^meDS=2Z22Nm)%Xt֥K8kcI(wr2,!$W r:կD@y=w:O& x':N=z:F1898~6En*[: =T 8كO΋ w) q֐(eۂFO#9w $rnUg< `eb;dt0bxs98:`;c<:q?: ~h`s!G=hhp8 М8sڗo]<:gȘH*AI9GbCAqG4ʬ7$NGU7| ېA9 .Մ qfr:qǯ5X-$snmbǷ9$=rԀ$wy^P2zw=Uy$w$IGq 1Ґ~G'Y9uO€{t㟗9K:=H$zdc<\tAڎc21Oܶ9qj:øm Ij@xo8cm@t<&ZˊRD|v$rk<%ocl FI<6k'֍|2ӯPP"81{^ڷqcE9g{+JSpOgco^#c쓆A%3~ꣂ{sӥeYxSVҖ[1Gč>@t IpGzVI;!=lp qn^>[Lr&2}Asxy>P$l>0=ɪV}v!uSk^H-˦es\6YI6HTnXy>^]!pۃƹqG\V7Q1*ĢJsRhI`Im}>ݪK3Ȫܿ9EǠKi~_(B$?U'^Mn<ddWor@"/q]AY.m.J(p N+cNxҼf"TlYS*dbNwt0D{rٕQr'zm=}}MKg 1|1*cOJL,\{GZR<@TNqn;TrK HL7 8qV 6O4żR쁺,4B4WFVbT)מ?Zދw\* X3g[)jFmPl`B`Fq\캩OopЕ #!>`W/^q){7E{ 0 qKmK7*r઀A8FZwm AnmG+G0$d@k$AtfDm!09Fxq[StKEHa(ӧu?zʌRh5ݧk8&eb䟛!9=s4a8ߕAv󇅶0R9w6v0ʶB {I)~ \reE6 cRpFF9oZȻ|@8q`Ik"[݋VގT7<]T/L2 hm8c+˾& uyd`ހpK'5NDIPd}ѕ\1'&.XؙCTz-Kk4 yXelzVѭ>!t.0&@ÐNկcG!wvAڎeF;}zuhh.R]Ā0N~u2,lLTdyu^3U !A"7^sny߇dǡ#j616 G,Fp a9x:j4Eyn&ӷ`+Ube׺nuL/(أHU dsUՄӱ ռ(RxcXvӡYiw'2 R2pr[$<Z9-6D4Sf,6OlBZݙBR(Q:|,{-IqJ-?TɌt;g 3c &+e ĀH2}5wR{3M!vTŸ-KNW#dFbRͷ WKyQkGd;v'ҵg%Iv;GBU$ Gj~)ң,yd }ۉ8l}kr3& 98[^}LRi;Rqָq*g]OpL56T=p~AxO⮑8cדۓ=OKvq|=s8"NO@H\dg?ʳlrwdOKg'Ϧ?y=Y z}1gMHF*=::Ž 08<*o,? 9cG^_>S2822 9֠9 ~I8t+7s|>o__ĪC3ꀉ!vYHz9fU=pzpzBAxu#; 8C09vpNxgw #b 8V5Bv} 9V ' ztϧҼ~ \  zzUޅ+ҕ8ā~bKqԞֲSqِyا9։hU5V$t=lFݽs`ےsy{V,7 ߰ffrGS08'Wk# 8;N{zXKI$`+s?)捧ABAOڕĕj|4"Wlg-* MCWݴ`^ 8<0zw4zݮi 8 \ϸ1+2r=*%{vǷrw03t=MVb7]!X9'w !d*UT8辝kz b \GN2wO#K \ЉiMq9=ҬɲTO(l $=)s DºV~`P }G$??)#8]:R;2-[2%/*HbQڹ}"sIaop{3`jz -bI[Uv|A5GWH"-ηI>[J< o"[30+ls˓sד>~r we$7Wv;A5.vgv5K so%,X\ҼyD븩,$c.A#sD^wO1"!=isӧɊ%liS)p< pƜ?C8k_o}Q㚻LЃpZ9 c9~X LU<~$?;8#`H3Ӓ9OA޽G#c=O> 3'i=}8 q O=~uEžcuzpIBoAc$)3i;`RөX?Χ{9?rsx:F:HhwB6pnJ<ۏ֚vL4@wcڀǹAJ|ñ䎹8a r.Ab|>l-ӏL͞g²Q#fミ9QnAbvq9?/߽a)Bd9=٧o3Nq8ێqSW($;VrsK:@z. 8=?FppZ|b=?s=Ҕ8 K}00Oގ` s; $,9:zS ^N0q:x4$rft?S.bBXg99)\`qGz"##Оqg{ __Σ@ t T%$03H8$>k);a`Lf@9QsӞQr͖##985]:8UޭT՛R8I;mcW=Y#,m3x,Ȫ ={==+@r:d>g $^XuЮr: 3qDN $"FKcva3zw덧ҥ2@Ҧ^}_rGׯشL01sϠڜ3zp{t:ȴIیG~Ooʜ;Kha׿"sQRc ߐ2}9Ec֡ldt9{4O9~yL r3zuTG\g|=>fkup<@2n?:;X(AFG\r_|ͥN+:eL;0s=}+J]ۮ2B@_}Z#ӷ–]1yw ߚ :K&<#Y t3l䰍HccuR[t?rs dm9}yRz6j|dQ/rϟnUMlmŽ2@Fj/hFH#ev*s1@l'e=We-[bKc S%oHc8v$:̄I,w@;9Ml+'ZcCp!|=3K= $*$$=F:.V8.|v+ g I-N+f;vˮQvȅ@9>)uH_)ϥuS~9*+NKmڛ`dA<"Us)zIir2ۂ##}Gz,2> $fr\ATtvjNI6u3߭哸m H2͞-FM$w|W"a6l rW-*~fhn[=no~cߵcI2@d2vcw>e?x#ẑPב-Ј:rz8=w9+`9f[n7 q)NGewoFH؎lr>Qʄa03s{wqa؁j)8pZ2F:s^?!JaQ7q:g|D˖댑)3Xߎ>?^T+ 䑂AA}{r3Ԋ۳q>1}«Þ+g ~NszuJss|Rӯ!|z wB< g~'cש~zU\V%>IzuϸSLOUqXyto :gɧn9,sqM148Q܃" I9@S%6u lsC+}qϧIm^1ۧ&w(A9'=zқg`p1@i B99>~62Gq֜}pLHH#33zp H6FG@?ҁ~ޜN2H. 'r9@6 < Gp}pszgq@]{8M+鎃ҁy$@׿G\`}A=6ߧ>7'8}ytG?h#{A>$<:s'}q`(9m-QH4=3Ks (@g3ݝ29-Grj A:+ꏢ[nӶ)` VH>r:\FQ} [Lx??/yҵI)71+[=vE] *sGrݪ`c!sbR^O:۹(]TRHH8=.d#KCN9?A݉M 'nz?4 q??JsF=) 8aqӧZ; RHWs"q#:8=N~aW'8#%";F8ې9pՁ3790`A<@}Hpq)=I?^ďL}zΨ#s p9֮)3V;Ӽ98$ꮪ9U<ˁ]t!==#\*O8H6g ?w;i@ gD$:u}:gyHMjeu;uώ֬zOK{nQ12d9$d{ fQU;UGS7\ҹ*#I[r3 .TH@sr7= qVw4XE ݖsךҏjC傇1[A]MزF21 E\ ^{w 1,X`mں)u,Lw #fV`taZo 1;Et*70uSE?,D wr'*HF\ cߒz¥+icJuoV`]8;H`rB:VNq yPrsҹd(eR~^8=Oi0>lF a0q%CdI$nrNHqR-mӀ R{ӿzͻi܆88cO vAPy<℮1S>6~V(㢾w)8'42z*L%z'v╘ ;X:S ȯ$f, =;S'?U*P;K-خćK w.sqq*Hov| 4E-n$9 wM[1 us=|-ԈbbۇLtx {S}唒 n*GN(7dð(08SaX8ֈ g8FFXO9+:Qz)P@e8:wǶk~[a&I6-J@9bAÎ>N9(JQzWh:m$w37{Jh/橱7$68瀤t{10w*Q}*+3E̷b@_Ηa c\#7w#$gO݃Kl;v./ :'v(@ y`Z<91@lTy:09 8 bЌ}'zPKt=:=Or}ywl0qs|qmgn9]8rI3Ml2bH-lõ.Ď{ux8Ojq:;svlӞ}i?pF@`9'inKxW`qyT?.!NspyJLOydtǧNjL6'oL41g 8}).NAb=@!lr g=i 8891}pv#p=Lތ8R }2G<#^8#ۜvzw^)98q'1ԓ|2'}@1p9\cd~I۸}yJLÉMl?:d:sHvۆsǠ#pcny <Sry`Gԃz⥰b#V')_>v>OhU'zD]k]DWH ̭$3QGݣMJ;bwe0tQEj3ٜwC'<ȕ : Wm3lѓPw`*R;jFN!濮j[\jr;Fsb8gp4ܱ%r3mwpq޺m-Sı t#š,`ew|oprFR8 .nvdFّ wϯ JAityw4ln#Ky"3"E ,0z鶰C)7l Qpe(m-څ| U*:n<+H$D*ʏ]9qZ.rBG4 Cg 9[>$ xL%9qM'm Tm 88=}q7Xo,(OGA4߸C]ow v(c`nypku\ĻH6 a0 ֐3Ht>HYR8nJ:\ʠdYFE  cҸm28#( m<:s0N2dc tӎ#'7oBF3GӒ#g|`lV#9 _LqOA&;pp]T9)QNH9[%,Upv8cF8E :u5:<yRWִ=!i-Wqlomb8>\['1FQe!»3`qҭ/p pUUޥyя>$bOUG9rhp*rp@Tc#|Sas€C19皭5FЎBm,@6q߯L{m |ޛxʫ$ lv]奄Tn$ Kg gK\])GiLp%qڎKkԙj5\ʌ6T|1n*J OВs~隽Z'B5ly07z{jygԀЫ 0'qRI+CH%~}$?)`9*=U͐AaEԛ_c8͌ޘjT0CdO.HR$cY\JqמLVxvb2 KH鳃s߮ W&  "85^}6>pŶ GUi`kS'd' A( 2 1<Ђh rd :<ft6EnV6bYc-1wppdp)ҴޒDa-Gjqr]u=JMN̼rTܜrMw~mp @s @ѳy\&&Ω(H(8#12p+ɎlmrO'PdŹUW Pr O^jt GqJ{2fI=9ALOyQq^u]ٴJ6鞜&׸>ƻ[Yo$!#ǩY1~^9 ǾIrzay9TwL㌑>݌v<99)3~b{ 9SϥA p9ҳr.esOI zP\paXR{R q>iLq8!|'IiNrs7nSG&XPI< Zr30;׽t(er`I'~7Ҟx90OGJLaBww}p1%ܻ[rzdڛׯR393PIӹcVO^:ȸq8V\>y}k ɚ 9gw g~h:g!r =8\tntG9j6ORs*`0NSH8q98 8`x_*"*FI~gz ^NqՔ[$qzrkYIꋨv}#եF|WV=zzX끻WA\a`}އ'ךzd{yGN;{,cDGEyp3cwdhx:NhT霜Y0c ?qO{F:5=@U:ۿ[d=:;-/[m*IY}W:EX S`.97g"AJ8`%YTgzf0GAy_?)gnUrMhcY}J&:48%F^s#l c`+vV rT1*0[~e[5$jB}1v=u'NpvǿJ޶w{d'zT*9Gzq'pz` \d#^Gte©LМuҲc0{8lI/0ߔdi@r>`w $tʜLXHD˒CCCe d}*+X wFߗ;25bkC`-vE_M9DwH$uVszP98_FslQ-=qnB`p~LFjԾEm}2}\yqfC1)V9쌪@#{cTw@q7^1Z4{foݐʄᘯ+8ܫ> dLQ'e|m!d m?6׊O;6uoӦ+&6q2A?kY$f/F̐Zifm:Ņmu,ni&9sq'ocna h돕YA ¼HZyeD݂A[ {88'}u6Gb;)b]8`rp0J@-3A~5kVˌ` sOWn;qא8zӎ+Ƕu9dVR v#z: t&p=p;T܎à=+=YIhI}=)ۇaqP 8;BrH0wrTFN0Tu0}1ހz'w EБA:CJ$ /_ǧ]{;G AOyH1! 3<ܞHG^NC8 Rj%}n:('=zԂLN򫟺r1gڧQ 끂Xv18{g.Qr:)팀y{ :hQcRGFuԞ9@|u')9C&sЃ;=i 9 w.`T#H:gx\ 1לz{uDd^|g^Q@Wnqg#2c7ghA?O0H^}G qƪcx6>R0g;rn[~NY2ۆ*j5oq>9^H1qW3HOcs+xXJw=,-5ۏ>F Gq0?Jg|Q \{c=\j6\S=OXfȦn\ ׭Wg :((NscqHXw }2:=s9jq }G989h8݂{/q<ұ4CbH`sޤwsy}*X\Ǟg>Vy4ЇOxQp?֗9<~9~ғ;~@8Qz&nvdms$g,b%@\ ;QC qȯP29=z""T\W[XN!'NFki /`f6Uz̖Vv}q 91(V;2xRˣ1/cc%MFUdhq1RJsoKmX\п^:ַ>@pIsPrJ35N\ZP#=Yt'mn I;N. 'Yش6,c leXY1I vLlr$yhQׯ0Fdęe0 NrR}:{cցu4%Mm(s+zs *+A=Dj8m?yef8`y8qFB6 ?P䍽ܭ`?'9,߭haYZ@3GeIn3矡1f8,b@ xqڢ`cnA\g<8yBf-’2s#2͘#FXs>n 1h2ٛZ3ms-ilڗ >e`8a(2g?=8ʖޣçNi+@NGkBRrp0=}]c9'gG**eO ln 1Odb@j3?W grx9۷ܜ+lڪ3)Ȅ񞝺2r.f;K$ X̊LBO|vgeRDc.c㎼~q,N;|(=;4rȥ +"DZ {5ݰJ⯡ted>v/`&J=9|5q $ a;6aYsNj[´lX;IR [> h83Oҩqْ T\ k deac]K˻У# ]מ1U qMY^q-ZO~O$^,j?pAژ! 'R{qVv]Iۓ7cǧXF}sS=ɞ3b>yp3Է*{IۯCIz㞹? GyiT3r?ȠaCr8zR#=qXx9'?Μ'i7=<4KC/q0_ʥlu$r:z{^҆{6ӌnrZ G$9OlЭvԀT#oڝđ(`3ܝ#Ԏ7mQ*Fԑ N{er: zUHђ@@NfNw=pGƀc;psʜ=q-Aqs@<}3NO=?@ NW:7t` p('3T2NT ppy~^ORF9こ#4 tL Ѱ?^F{dwzaRI>s?\Oef:nߓL- ' ^?$ @?Chy9$ne\c $IsA,2=OU힧Rr#o t>)9ß;y9͎>)| {wߞa' ߑ׭@ ۆ%_uT=qN1]q61֣\0qNG*rNC#?$|iFTv׵4v'< NcryC}ptW'돧=wF9 qr1ï׌89P)1H8j\(=0zAt'>Y'q[FAs~p^Pwzus`}M)nGnϯTCL^zG^zr2{S{p'8 K:x#{dH9:.uJR9$d~lqG`]OξKg' q3ߜv$|aO?\VYN2Inq T0'֡2Pp <(3lL^(A$h{ =>ETOSs}jI+Ku< -&YFۄۻ9[pq}qX\tv9c Nns7z xO~vz:Aұ7#cÚM/F=O''ޥurGNG?N(^1>6L>[="GwD0>Rr@4mb`v$r;~)g?=ZI3PNX~^0p=N eG' j6R9f9=;;q3FN%s^3O@~dH1O95qfCW$=> oK.rs 21@HB`#Wn3QV89CZc;hZ w(qIp;NxǿJ`68t$\X@q\c7N8L#! [=8w㞴ژL2XªW-qq rv`g ǚ^G.*\bZ=@#N?N@PQJMn|:_(@69;8==t =8#i@=}+};qZڤmUH8{{Κ4kcɓ#ÈхthS&d*Ϲŏ>^33.pppR@:jLq,1rIS0>Z(gx cN.<)e`9Xw`LV$sWE)멄iz蛙F#ױJ@g9''5]J>'c 3:FGN%qF0ޣ{9fy Uj3!Qc\d:J*R@s#'r8f72(@T:'8Aힵ JPN ^^ +O5Ȭcd>`V<2=OJyYf mB0!sָ+|_}ƴrG r6dIl*I\)9,`r>O^p7tqZ;zA 9޺uG,хOu`x>„$j ! p8n/BkСNpd`Gq_J LzrIףhsʷV##9sӧWq;fӇ9ɹVCnX1bv{}:/.c;W q~_q_nTZЪEX%QP 8VBܷn56_p| x,K708ȧ9+A9>m>BLH#$ y=Հ=u$Hw.9)*~BϧZpGp~`=q|3|s@#^|P(8e Qܷ wt#bwulrO-VDLʕl#vybs=D2\uwz 3F F o1f N`*`(Q93p8ӎAaRݜn9@ȸ$(c+e8'i'_hRF 'q9d~ u%P(=Ny{Thz)0I1=ZnlMiO#fG8&'f%kش*;R<"zgkѥxhdԜ ˀFqЁ:ж6,pAN[?1j+3[x;/Ѓ'9*FHzzB`~۸C(H>㷢q|,O cgG8GPKdp2v$@RˏzOP<fwi9> >GnF2A9ysxP?Qs9<+)= "RrI8u8T)98v:gs\z0V+9''ROϠ?ʘX㏛; mb?^3zqH8?.Idpzn pI=QО8`1cƜn[}F>P1L !n?8$ @I s֧;$d9B2xhApyq~<*? !瑷 pO:5/`Aöyl6#[9`|Wuo`8zc\ n1@RH/Pp8mcVЌr6z'ۧKM}SZ*2}sߟΪ8q :\Y?N{晛ln1zﴝ@YX|Z[Fb`IP:u7ЁďIWf!Td*#/2*z<zf LVPȥ@b\)Üg81\py<=E X =0rAjySzn1К,b11t GW*>Ăb?6HRGLqqt`gps^F0x=xzcL9't?34DO 0}ɑKc$z\ s  FN@닿U$`wS?_ֹwGj~lexr9.cp}#w 9 ˿ c<6x8+-~G:W?;`x;ug.6</?qY^mk #9t?'+Ojnz`8#\S;$D^y95 oygQ'dDӁ߇֕z[8~ܓ<)zyH^tO'Oab`.~m*>sFIP3׎x:V=z/A ~oP?.a>$pb^nœ1\Ԫ`?¾4exgvNY\g$#ֺdL?va=)x9=qӰg)1I=< }` :sTGD ~}角ڨϱwo+^F'{$@rs?_©28-6zQwEvP>gێ\h2uL~)< q<zuҲ{G=Ͻ\t$v:ꢶ3':c;gh:pq^jF~fgzULNQ־O~F^,c9?aEq3Fy鞄?LCa'8 v Df/l'ޟ5<|Oa{wD1|88 )g31GG+8y?<FzݱRW0B1=r8@qR Ү0ԉH󟉚zvrI6`M}r[_7{ܥi |=q}G2OxN`ecazҴTKnk FHn$qzsV9Mv`t=iʱ'x,Ikqu<q=RBb@wBsSSTiO^ooV @xUGg$u5'I6 bFBNT=KñFzvU\d{z[Sg4$X  E99,`+9UsGlpy#I O;GoLJǛSU ApީX9X~^VsyAdd,8-d;8^kx3TS!ǀy#R@(TiVE1zV̩'rULדWo-oNA>zObZU˓ 1aqD#Tnˎ9'jBjTWݻfldzf$BBGBq;J34=Fޫd9' ۂFktbŚ5< ç5}?"F jmg'wf93޲֒rv*s=y 68F}bއM9/cE栕w#c>W#5[Kt|wɾYܔ)dmπ6dǵS~+=2t$' yQ+δRy9ڡD2:pqϹ)R9#}FD%wS ~$>nFx-ߜu~Z훝)yuW=?y/?ɝ} osU{(;{>ڂx8#H N==:p?ƺT<88'Nyc>spzYQAvϧv뻌w{'vdx}09NݴLBs<Lt#t8ϯ В9 ֙à8#CcLG_֚s'#qߜT $gp5A=H#Ǣzu,]8G<#;r)"|pO|`Q9Cy5娔ٶIv8##U?FA cOBO f#eN3NU6rO8\>ұr-DP9$8`OnۏR R+<^w+KnϨoPm g㌀: i_SXB$qOѻcԓ''dvSslpx$dz2۶+2=ZQJX1{Ӿ9tDg ZG8?JϿ52 x-C y/NxT 9{gڬ=;+4DBGj#y#9Yh\<Ҟ8$sۑ\?.H^کZh>Y9w]+H HWɪў}h۲mb+pPBDh˻$$z ~"` vf#xDEyZMʮa=:ѺUcM?Vq2eSNǡf/(cF#3wg= ;3>ә$eFQ"(OoJ/:|33TeS<;}*k4\%o2eӽv1r+F,:%|ΘKORvRVF)!+6 G5Mm̙3( $zu"Z?%}U@TNˁ޴fѭvXLlz{S%;C)Ot+ǝ897m^ng <5fԚTw1BT r.R0*r n8f$% A6\!NzV $m"LB0̝9n]zlrgrɸ`)pd!0;R&pT)ȮΧ!b5ٰ|)mBfEx1 SN2I9霟Z|>OIumw؀U3Tށ2qn*SOc=ʶ n$1~i;p<8vy5lKu]\u$簫P6ҭIG_S53z:HXI\q*Ilg+n''Pz*ᔎsۓZn:VƜo*3ϰ7By s1`_3ƜnXC!97x« Ul_1_&_!\`~?^zs^{8/&y9sJK]6V<$M|ęPs_AM7֕V\c2FWH9y'vj/VnrKs}MVf>g,9={{cD hVeh̙s1= U eᑕ-I9qo20 J#do^jйmv$j#Aq=OA[cu`sľRや[f!qֽe8ے 2,ѳmѳRΣBc\ U38^FGz}X\7&ٳ-㌞+ [y4õz 8#L׎Isq|ճ衲)GLtǯ>?Hϩ63u*-MgOګB0q^srf? )s# f&@돻y=(瞟N|ɻm=x8}dwv{R'~WbF q2pWӦ? `9Fc{qHzϱn.I`w?tdn؎}iÇA ߧ3 Py X+z68IG~;cL}`ԏ 0OuF8byjfA^{=Asҗ$W@8?21?w\M  #QGP#9 | z:MM׹GN "?('3B=sH0O60p8$#pOa# c꾄P8yb؃ל| xNpsマ gҎFxH#<2 ^׎NO* t^szv42F8 G穩;u8:pqӷ@ gp 3q`׎{LwAؑ|?<s՘r89Ml!At9n 9ntփ)c<ҬOǯzLT/E sN03cWO9 .=:Ç?73n Ң'R?. q8*7dp__‚sI FJrpH8h{19r3G'I{qR ׸*W=Z0A$v I0}8q@dP=P`leF@$?>0piIFуp?OsѲ69 {Uo rrrH& 6N~W!Gc 8`w0r:4 Q&Crr[W)rN2@K)Ի+oN6屜d*#+jRrR grL7;t'C9$g8xT~#l2$c=?[UrHb3ӎ}ip0<޿($g'Ai>þGې>l IƲ1 '`^!cqyRu c!Bx \A6=qR mlNw(EFJS}H'{:OQ0ppx#G*ݞikʹp/92;{{׃޴R˓o20Fz' 7gԅ#?wn`_v9^;}yxweߩ.Ƈ@ 7nv=z{U1drdJa4;X29 q f20l4-#|E3G=ZT'*Hl׾3TЊp>V!Ae}d=xH.U؁_I$'C-$>nvr'<|w֮.P};ݸm u:N 0=l㎝:Z6=v%T7`r}s޺*98皩|>esG)"r敱J`9'!FmG42+Qp?<^]_{wuISx(nOhFw&E#%~<Ibf;xs pyMlG*lmwqޖ6f1+**KCp8^kC1ƥF[9׎)'..vqn8Хe%~bmvo,!~L cxk<}= WB2`X ̃޹YfW.rsG#NՑۅ9K[c1e;A 'uBFz09$׋/i n$!p W# > Uhư#$mϷNG6d`Q#)yBªcc}9Oudo-Ol&n\BX Πhc2N?ǭA!| @?3jO/YA ,Ge۰3W (g$w)!cpT sA[:q@򓃗\r8!8xlBp~ր#>\rI' }y4d.s3@8#z zM <9=}z@ $dpNOQ|>}}y`BX9;O׶G5սr=N*Hl#%$~Gry$HlJe'8;ssV'RoNh?|8#s֜zpTwz~Ը4O9o~>QgzZ[waM̤ܰcޠUԔ''$2[vVN{v9w:>^v8$9IS8֢1i(HԒ8>Z6dR511]ǀ3E; ˙ x~0we@ d]B,cPNCJϽI" #ʹzD d@R a^7` :Êm2.@Ol=)C#p$l\$c=ii5 0>kAZ<h%Զ#p={1Frb럥O@Z[{w<˜cPXAo_|+ V!$g&4 uʙ!xǶsCEIYcePʬK sLW~A,w1A1XDod@ S ޴RRc _/!61ݞ Z`sJnM̮'ud0gbJ`@INEX +݅ `:rU +0Bzxlqd=9SPNpCX=ҜTpT r:H445"N0ƃ;7cO~m`0rԁz׏ڴw`c_Ts\M Ydg*7@qNxg-ۙ`W&,u ֒iԾDOw}+uwHt և3ܡ?]lJ܎@Fq( sՏojornrx hb>Sb;;W ~ ly z8eo r\{8]bbY;[~A9$nӚHa' qɯN]Y.E˒8r~L1'vxƻǚ֣q'W?[N;|$|^'pʟlsq?Ŝe% g#>kS[#R.#~Fяlr850bqA\ gqQ} [%ë۹ִ nwPFy`22>g(y}x6 1#8O! `rv~5Rr:$n85_! nHu;^8$6Ay,]xݵ yۏYo Ӵ_O~}kU+r5rpIX*XgBw*!8=a _kn+ ҬfHcY 7oEè?6qi{D -?(C-0N~_h[Ļ,LȲbAǠ'Kms,I\esjU癈$A)\\!G IR^a#Jlw^[gz4W+$J/V\1Y]! YBҧ! 1-]F|@(==sAy,y lМLtU>S[N}:vq s$7\V=Fmf YoP{ڢmBLBcZ4C ec,;w$9,IH 6B ^2յ vц {uǷeWcJ??z6FGW<3.\mXֱG{xW?3p%@~дX2UvBA@X|ϯ9{ץoYV\66HIl~"0)&'fʰ鑟Ίoc/M~[,/}H6>]pNkv؃U!Un>KX$ t9W5K:yyaz7\0=P9r=[01qn?Ɣ3} ={c[fRB Nm[ 9>Pw87<[ `1p?pGPA^q2`Nq:x>ǠprwtBA9<`z(rx'&2^r>F?>璾3yϯ#g'=HC8dʜ22`[@␈?N9#};MfAz6NϽ #8QRðqHלg=r)ݳp 2M!'TG=J{p>c[~QwϽ&O90Ga~QE#|c#^tB[p瞄?za`}##8^w?fi rN~n~_=ecrKq0~6+n0) cqQGuq)[yvF93ۏ^q֢OR"27^p$>S 3w|Z9+G'pF3¢s8ӥCriO^Ryr[oS9~dQϠD8$v2?9pq1uRSRݎ9 t^sY]^~d{zUZ{l*Vs~mr9%y?҉HڜL9oSbMr;sӮH=I~I*{/!op:A=K:jS+"9zrISイp=;Vep:׭Wn} {tTt4EVǧq?T9m `qO~T`p.:сkRAqc~c൓r26*EP9WpK2)ڻ"e_lބ`Q7l̽ J#{sOjͶYKdyȓlj;Rgz3g\2{xn9ܢ+jm̏#W\nvmym *dy5ߕWmt#(^㦶1|,P0`fi~w)}r[v3q*[ c:1y$E.n!>l ISSe1s:a,Y`dwHQ6Rn-RvtDv.v`E$lnI {sӥ?"7W* e<+g$cK F8;X9hxB ʊvm# NILr'f3cȭO0$`#~3n~~$1?/ag['?0\7 qɥr0@9du 8\VL~ ɷdpg8@zcZweBc~GzcvɨeQʹኂGCPd$ғç:a^#8?Ɠ#@`/8uG$ВzR<ׯ_—`1'P ~߮prHڀק|O(;Nx' dNsNZwAqNqR~鉡GߐA}3Ҕ}=3|cSLVI8B0N0}xשuny\};. 1zi ^3KCp`9'_4I$`gj'`Npx;~=i0y8dCEysjvI1?(F݈9S'#Wx1,lB6p6Uޤ>rTs9qҎ1~tBAˀ|=}{ё8`g.qphN=Ns)I4N`'C``F:L(^Hq߃ܖ<g01y'ЊNWzn('۝Kcz#c:SqRzs=(?O\0co3dg-x?(1ʌaT;4g|ב׽ 9$mӜ rs)֎0~PGKwyVFzzt3ӭ]@~Q8ʏ<Cg s#}) LF8%'8ƓtrYP!q<ZnT`e~Ug$Mu)CcyAGSܕ{1q;cUqr^p:pySҹ`JK9N9>)v&Jɳ/u& I ݐXNz:HpF7q8}6]^Ku>c0]"d8y}t{vFJ 8'Cї5-alP0$t[7 AߒtH'3vNLJ*nrGjp~m;cA*ah],#kϔ=<`V6byʆmX02>9F6\s0E=?*Jlٽ `!q9q]F[rFAQw<oWdcŸ:p8 GP\nr$c3\ږE\Iݍ$9'Ltqg|bj KE+8 ti{\; NzwLJ:fB`W1LkrdNQNβ/-#$=:DaY]yQ=1q^[uzvL;T}R8c}Evi9 s]_xMMftoTxׅ넳 .C #8'5Ɉ^:USx_; c"` |2kp}zVuw{8\+0QOpk ~d ˧9$%2ϩ=T繇WnUT8*r>iv%I`K qzGS7(#8uaSN a @ ʆ =y鎵yv: GVCn8ע0e;mrF~$O+]rTQA95rw)*#篽wyϔ)U|1#c91\4r;r Xdmf 4z87}L 2ndM8dp?>1נO @c ==>Sܧ(3L 7̬FѸ`x>8P9@GAC<  )`S^Aed,QF~\GsƐ-Sacݷ GM&T|Y.Fx~c(c؀N@=arjlT襹=h+{emTd"|NFN< ouAe-30GV ێO 8f#q JAc}nբDp~UuJ>g<1L O q$v\޽znIES*銰#=im9iQ~I>^UR2FzԲiF'ri] ٝ#Ifɹ\rhd8<װhk*UI+ q큀2 vgs G=y5EjxXgc5zv+=O~?:i'y I> 7u8Qy8O;9[=ڀx>npێ=:u#ydQx8zFx סG@#vB@B(Ǔ1ӆ3 ƒzgn c#`9'@ݾ4灃 JF02'LTELwaPGJWǨ*=N1ȤfcxSYwBR@<=qg)F%fvQt0~;8zg$csɝPV '#}`銮'p:3=*͚! ゼүNI >9J }s0svv<ē$qjx@G',sGaގa>ouu)r: ' gC|s$g:qH'# r9@tr;yx0dTq}OCq99A׶3@97=}м p948 G48^ ۾N:zMF}[—p[}s{OPnjxNҘLA?'|6?5%)s~9;l2QKG'i@NHGK?m9J"hN1I%3G|=k- go aKM*uz5Gh<s׿AV$q:zOp4pJdK]Ax<t;nrK2iۡR}1ՏS+_XrCqdn p4,zp%?#?jCdrz1{Ձ =;pA1EpI`{9}ꐘۻI@S?}:Wm&oESçB**ledIUDQF(!*r:uMr y ##i8PkK^Řq-ۭZN>zVʱ '"oO^@Xg 7 癷c 7t-I!r;z 1s~#HqrT1{Zӂ`}G'M-I{UaH8+X*\TK8^8W%fN3 `s;c9jk;~_9=: ɱ W]0- /#-8yۂORg`hvQ/A琈;CYlga&Xl 8{c-ᘎFH =q!dH0܆Ia qҵ` #xKNʶ8$cU5n0OAԀIn`l;.)bx\gk4y`9.UANjT};Ӊ,sT@prFF;z[+}gwL[889jLF1.^)9lHr~ >?!-`N@x)A@`W?ty> q+aX){Uz'^0$% q0{L:HH~޵!=yu‘qӥ@sTdqt5)t2d8O# <ҹh@Ho#c\b{\}xsqXT63PVx:u 003g ݝwGj@ B >wP>pcqА2GlsHrz< ckE=$<0v>F}]@ʽp{M^w@8FHO]msda*ݝmߘc`p0]P49~^CYe&ZYGNqO_ZNq~(۹Tt\E8/*!'zz5!>n$7Q;w 8 ӟrIjj0qy]Ă~9;N^zWLmH r?ZQ?(r1Ͼk-+f8`A9Ϡ ;H\5cŖOyĞH :Ӑg?t=8Q#F1#$&prx d|ǟFW'8pNxQOzNEZH`c'=jpp6BzƤԎ@$sX}A <וY]Ʉ|qNGXszp@ۑX `'ǧ9~3Pu csx480֏>>NQyPIጜڗ'sczgn})k1Q6$'!Zѽb cO M'eMEfvypq !;A wIRd](VYe68$. "evh^Wىp9s)̸]. 'p3<;2npvtkRln|jm_/v;@H;xɒwF\>⺄ P%ʌ8gY켮iEj8ph$r)'1Ӗ@IIx =?ZR^y)T}x8?J؋GdPO_%?*UT׼'P' pFr@<~`ɨ(q*a0č/ocj>٭*yr5ԩH6K&܌k_-aR/4?)ē1;3^V6gE]Q0'9=ϱzkL'p8PGfA9֛py8ⴅɓБeC~b1csVRE8I89#]g9j_VlcHҮ8=:^vAxsڐl4ItBtF{g~O㌎rqs6$c6F8<~8$>nO@,O6 =NI@zg=H}:1 sZOTƷ:ā=sHqFF0Oqڰ"8N1GJAG}?"=# ڡN>_+ZCGJxv#:jzgGg|z)T~ޠ)ݱOa?N9(EcϷߞ{wٲ3=:L 9$cvZjS83g،1~Cܫ8#i>c>לsEݏ_nq8T?)soC%IJpc{t+Yp>f-0z vqֈM\cx$d ?fp 8O?އݣ*If}TU^O-А ;d=Jq*۸f__Ox%6HyG{ uVmNu8'}*ƋRE#:瑒hhN1#ߟi׿lt*y=0} 拠Iu88mYKr'>x; 9瞟L?=x-؂9)y z7@A 8?vs6c$⎿0 r;56Ì){oj8[XAc{m7+yR=FNώktE .%K`3QF{WMiGўc R63L.cSӌ)°Unޛy d;h|\2\翘l`wgpGZ!x-B#2yy "c [SHηF͆آ?W 尌&lw걘x<҅tq u3Jެ5fv1C0<-ѳ]{ZUb6YO #HQ- bvՠzjTo2N}jۓv(0zɷi 6|@~E 3<;chmē 2a+/@?JJBh.X<8m rAO8>*~iˍZX!,XTU@0 ÎE8M|x%f@, ֪O8=HF=cZϹBC)PN29P3ϭL!nmG>!fڪ5;I}, 8ϩJ!-fD$ $)!w 8S2Q`YV$9O\u٣u9yTIl|zzHYvpp0Yv+^0X9G9DXZ0N0:8Kٗ'RTVuF]pXfە.1d;nW;)T8g_?rM2 Jkg,2p Ͼ!H݊Gɔlݐ3GIJk`9y` {3Iv<ll3w˷hrIp*.r[~8⽛Oiy(*8`ǏH/18n1{r+LR9kMڙr$9;S ,7/bIC?|'iKpy@I 8]RTHԭF{Ğ\l0xU74$u *%h ),Jt$89=tTePmv0 )m_L9u\ۧ_Jdef;D*71QYا>f!@ (/QV^P(>Va\/Ssښ oԙ&Eޤ ʟTQ) 0取6fHgt2]+&ؤh$AqfTt;mKU(`Ir,==YRa~mP8\'מ)TbF9;zznjg֜"IN?t=z ,H,"I Xp _x?Aje빎bw끟JZ(,oRwQמqMG60I 26WӿCҐ!>||ҕDni9{nGbʌ"@x0LvsZVr '$x=G ݋P(hdqS*zs_K=-{:L=ND[`AnGa\U\XNgD,[ bx8=+}u˼J:z^ Zg:MtwmRnrU}y{U>FOq1_5|dd*~ӎ\zW Źp;w2i'^qd@9#q: u'z]H߾O8{U3#ߧ"L<`G犝{\vS9Y }9z98ǧ5;z  \qȖ @==zqx;8OLgx㎜uˊbbס:$d 'jbG8nz]<q> tXŽp}=N1j'cww9OU03׃H3{@g5#q{RH NpF,9րvܑwp~Z`S@ޘ`p~R#u;}XN>2o cp9r8ۏJ1$u}}AzmSn~c/h,ʼn60x#Aʥrq(a888y9nO{?0H݌ղ7cv2 K$,hop= w|}”z(,2r16eA NOlN:{Ȋ ܎Ɠo@p[ #'Bcܫ9=5w=:pIکlCp*8FqN0}pNFq^}:å8xۃuž8 3ߓ{ӽ> u'ڡvۜ`y}߉܅ݐ@oyֵ2F6H0d )` 9.ib%Sʦ +0cC+7R/0N59%c*"\/ 88kmuA ߧ4'zv>KNWK}Yz2{y_rh=ϥeVzX51;d|93%)/'kq{e5oah '8ySM0frۆۻmGך5\0S 'O0%%G |۲v> q+#חBڇʬATrRK(p<|d*)F\\}}Lgi>1FxhGQi(nMl=n.p7=iٕ(]9cRO#$?wQc2p3׸=Owkc{=MX*|89],s޽Tx5iZе- Izw6Fۃa?XWWUrwң4m% :>iQ8%~1ד׮|%Z W#I29 0{g#w{Q`ȮShX3^%O  pQF&Aq޸~5me?t.Gbi*eU?c~^:LpU3#ly+Ļ;\㭡xbrw9ҽKap2T.tsHb0~C*sө4sfBczgڠl!yFۓs{SjX9ܔ, z4#`-NHՅ98qH,O${Z\s.08݁O='[2lQ-5)HFrK#Zh.~axӚ] !OL@a_mϧarH q/'}u'wc =i8mrߛ$t($I'K`ߧLzpG@d<{bc@;NP&&p$d*v9 a L(͐Aqs0qU{nIory ަ0xaЮpNJƛ%TpYw)$sT&NW\d@^Hւ@à^3ץ@''?3vsFqip|ٞ=O-x3tx5l{IǦMD`f,8-98>bQpK1ʜq' 9= nԷoes;`q{ ږۘzOd#8jTS>kRCuҡvcDF;1Ӝ{qҽ4SRgIl20IPN9v`p8'ק J+x؊=:"vnU#iRg89ZH̏ A㜨֪V۹MWOp:kҶ;Ivn:eޜH?# 9\=W{/ r'{?g<:SN͜\X_g3sQ}\(8ݥ~-PR \bXWHdвgzy6?Bke23NCcCXBB;X0 9.N<:w@K@pOczqi쎫C}'^[8Q( 8֩BCԯ'nF:zb8rBF R?.Ie~zcָ3H $Jn Lf j~Lxs΅3HCPsqϭr(#nG#z ^r2y#$rZIXiO; -FF[pNyfAy#W c8p}E^@Nx$v>`x9ֈ` X!!8#ߌ֨|F!0rW;[5kqt%hln;9Td;Wi#Xpp;Mьg(YU$v# ̧ _F% sڠN271n89+@em$,*!H"nyX:'9==HcU'E TNْ' >P 3<[˺B `Ae8Sc=^HbyrWj)1EBa-*v_~88܌ z>xV$*]$d1M6 s Ѷ3i[q'=sPZ͔n$6d3s8-ոv}io>r$% U$c(gh㑟Ǟ}kbCݖ ey9Ǧ)ùpp2NrNng֨+X |}H++ic` HRIP'reH6Î34#Cg={T z0a"@mm 2{r@@r ˀ duX=:PoEHb0mq3Ү(˜*PzOc:K_h屓z&p2CV Lw4#f]nFw ph}y͕ q90:=+7sלwO<2xzIp1GSmlsu@qڀcON瓓v9QgzCM÷ӎԣ'0Fv{vǭE=sgG˃ZQpY/r9.{n'$#kN큜 ,*ngBGi#Ms c~kd 3PA1lY9T8#nخz392?ƹѐ0p=}Kty@Nr<?>f'9P9ڠ8#F,9Q뎕L|9ϯ9i3RV.Ďӌg{s+f1=dN:WD(9+ƭEcq 2N79xfǓZt\d zd2=}oCvNYx $@=}zn<x>U?/8B;>pJ<}+lqi]CXwgI3'cXbUrߜSCRHc=9zt:Y?f+T 3ae'l $ Z=38`J!IXjq g[ v%|IOQlH׭ 2Eϣt99n*o򧁂ŁW#d ?Z^<ԚDwu#OOl4~S׏ϩ޹m7]u8vH?;\qPGLyznF,qqQ4}3ǡq3\GJeI{/F}X| cq׭2:9tƋ0pxǷQ: S m ٰn=jZ18G]?i88#NsƋ9Aۜ߿NkSëFtGxd*##֪+ޏi&|v<"UڂHl<;|x;HH;yqR,$ lRݐKW^ Չ43,HԦr sl\ǿC]4MŤqIr5zI0=qRݭF3V=}v8{Fqϩć8ʖ%~b:cҚySӃ 3Ce"N3Ue\zGAϭ*ig}2iq_r6P8?* Iへ`s|m0=)=v'\`M!c*pB>nzcjUP62vQќuۯEj01C:02"p@rq9zbQ})#jjql$ܤ gzUDZ22fdaЈʠo9>sǵf\%R@^$p+D"[IU%j47\遜}( %.FK>끷Ϡmiu3]Gsp}ONEUa8pTg3^yYVȓ aG=I┕ u\d^EESj=YeLO2t#̸EAc9zw#p᰾X{%3d8<޺IH6pCm*r.I]o.WnrG|& V;ykckH*'y4T*0 [}2 *Z݋(Bۓ^o[Ī Fƪ.՗w} ^l_.܂NC>Қ)LovB2N2=Z0_s1]Tafe)\Վ<Ϸ|g5f9G#$۷]Zܸ'#%zgcS^=R:G\?1Sx9N3@p\99'23>΀ӓzzROddQzH@mhgNG H'' cϮ qZ47gpOU6rx}zqa#*9#r3O#zXMhk:=3cOUaۧ^$ldlOj 3mOLw4$v#Եrs$z=z=1E{cޘG89?giw"#ϥBM@%f`Vf,ӷ?tTc1'9ǷֆwЂTxrƉGgא>$u<}MQ(>~N?J99=+)~ÎOs:/~r=< wǵ'$`Ls6y01?^ C3Idg< \㟮N=O^\P1؁stzg<ハLӕNF߮Nsc]KW:̪CwH5>&X|@RA Q^L": ɍcY }c2gtF9b菏Rv@'8'SbD^ cBOADmk3G3@ȥK9{⮛W$]=0:W`-~gWm#ILe [c⻍8G4i1ԉ{ԾN돮eW+avʐIdLmW |E2g`7w9'[hh \m!Bf v+c|l;BnAI$'\!)&$̅YYm@VfPF*;d]HKXz0Fkzbrtˇbr]i 9 sԏ~va}Gyɒ[?!f <9r),ӼjW`ad֋XMJa@x'vO~>x;J%' J} LU0:18翯QӒbp|E }F1S/g7$uVs22=Nխ>繤Vq%0nN>T(QsN@De+#93'7q֢U?.sҴ"^8'a'=fsdd|}*ev6#8Y=rzIK|<ߍgl:aKG ze)B<̷LI$ c9(f5G_gN.2_ Afjl7*o+ӿsʌ-Sqsl6vABI稥-u {__laQIV!v  F玞O0i“>_2$`2ێqV$܈Q ? qEH$ 岐WV̮@H#:V$G$.R~J$F mxu_- Vfnd)8s+9fzᘺ..8Uw, ңJQ@Tm*>b 8~Y&%v.@#OA+VU[bWqt-@>~P`-WYaQ %eq C})#7~g^XMo ^-U۸*g#|7͞x<\=N7&^'ϧL󝽽8DNw{Ǩ?OaVv.$z~4Nqb>^\h.8u?J~=sFrd|tg5l׃1랃WD1ϧG|v: ^k&,w  wRG^` '3p_ I #gVq9tNh3ߠlzz8C}iq?w2~n3;qgN~" w?=釟NL~xys`cҟסo˥ @SRpG4'Rs(sӧ#מ(<=h7|G_j^AПJrz=#'$~ip:Fx8=qR{t DZg4>n۟Θ!@w.}3zs]!2{G^8A=@=q(-A{s3I~xvH[3 iM $hzc`{Sǡ{>_Q1z=緥/gpAϭ?'ҚX'c9=~\'`'zir3 6f%s߫u)0$z?Â@%Xl&`v@GSq@n1=V *{e*N:$qS1f#'Rz| nI B)80{N0{& ӓғ=xs{g=WBg8pp:>sNrA#zSvg8=JqO=Lj7<ܐGaJNs A==pFxGQNB= ?{pIi'38_Gڔr~A810A1?tdϯxq}i}q ž{w|v!4d`Hyӈcu {99<A=w9.@OAF8'Ӏ8_n: 3؞A`x?=qЀq{Ty\1t֠}>A*A cOs zq}I4^q:g4[C} zPcԒv<.٤ʒ;=/x#=3I8 (f >Cuݎ93r`wd6~:!  sy/FlqS 4 ogОsJtϩ?H<'\$eG$c89U"c@9>k09 gi=GZ]F.88$q͌723Cs6y9<0i ی~c3hiӸ8nƫswjpR19rG8NdPNJ!HT|~uaU~)8r*`6yն$Vvvs=x]3dE 1$XsZ0 HV- }:z)C2{%,]Moz˧]z0zȚ󽝙JZAB±A+ޙ˖ 7˒u8\mnh+mH $#׌7xl 'ppzSRPlG 5tKNv`n)\J>nRCool IDI=(%3nw-\\>MDI; %H>9˧@ n9gp:҉Hۑ8(@N>o #cN2N rGcIȮR8eXtss#+N (=z>jD=:u` "=yힵOVy3^+^+SPޛAb2k9^{׌s!NA>Z'Rs*t[}NP7B2ܱ\7p:2Esr\.v dq>>RV2or26Ĩ!|˜!zR}lȏA?:ׅSICGB(i@T1n<忕lQHaApHׯ5: X9C1'ִp[NX`\;<^:Wsc(ڠaK.~Vs}}g{~% ;[#*v"e=B~`yO-3m!v ru?Lyc4n`N.ބA^^es=;mӜ2@1c>KGayz|ܟO3l LppG'H9۷7?2rA9ҢƾbNBx- ?# [31zQ@,11V$7\VTا T"cbuf,N3JBdK\  #f<=~vx?)'xҝEvTp@ ΪvdtzS5*$ |鴒X9('$ZrJ؜EHڤq1Wٳ!'aI'*ֈR&B99sR_Oe ,GyB]}`'^{O|g71銡F R]8$@Z GN:HeF36FTukLN*LY~=ҡK }WPxb#i jF0w>LSwd@G^k7#EJGwGDμ8RGBsv6 ,17r}~39'>4Fx< J<Ns]=;GPpFynWPy<(9\aFH!͎ď|R~$@ ۞@}=Aup>Ӱnz:ҤOuK\~sCqOPZǯ|g$8OZ_/с=qH~V@El1`OrfNpOAޡSܪo!Hf;AyQnxp~'yXRMިN dg 8uMvݜmm9gJN9Tf4seJ[rN:ZQ=ہp,O?z!k]]I!yH`wd W2hr1$s߱a>[&v3+m}zס|cg`kѕ;-%zgk6FJ q+Ed瓒85UY6Ȩ>oOP8@=}~4l9S*ak3B3xzwfx!yҺ髜ױɤzFéb ?SꦦaA㑞1GM4ւU_ +4 -}p=p:W2K$`F7n'ku{F[k} duA?p%}Һ+=Y;(?0`0q8=*OQՕwV:w%F*3[ *sӎ+A:ݸ ~yi*#wErEu0P i>s8C5R@B<`r2:s5' }9aöiKEvt9\O2tmQUH ϯOҦGsSkmyVgg29\4>0{;WD5N"hؖ:!si#Nr7d<zto 0yۃO\uҴ' P[1WeiNA!N@SO¯F<㪃:"ÈIrs^VpT} ,,A U-çPV<ﻀyxoIEdmoP=zSHS˜9c>g#0w˸فԃkZLتUv#q޶H)7ni y=j 5 kZG>cfJNgPϓp* isT3g9T>Ui+THMbC#TˌdH'={-Vr3G0Ir#Oݟ!O<Tн?.X>fPedE[ar,CnlNOb=qֳ{9IU;wCvڇ㹦@(˓<`G=c̻{6 Xg9ꍌe{Y:] `]3 +Y<.B n rHκIHA^w)Q1n?Zq3\UN[aR02H<ǾjTH$d=Rkqm۾&]rB〹犲7 Vbi8͖QWHs+W JI"}6I%% x栾ԾFL2O+&sW6apU6N;wl=9-:DssvsJDuzzzFFz#ր{׵GקaP`ggzԠsO?.GrNg9?ү*Fs=g%8 9G=?i&)&e$g99$*1pzb'80 cO5vn1;z|zT灷&2ws.jΔ69V65dpF>V[i;~?.{"Ztw~ُr޼%99x8 Y#xyn7ā۠ڜ Gv…p3`OG9 t9q}[h6z9xc)`g+b9 dpp9׵+]<V1F.NV^H"avI2:ZrHŒ1~G5N̠z?B31 #dr^Us{p߸c I?ݡ[hamw܅sŔ`\wM3.@#8nֹC"!lkqVx3u#Q*N01}3^N GldV G8:{TI #:ty۞zKzʖGO7h ?0ˁL.z =" :s]""`ci֡n?^⁉w1qA~9i V`]Ž`cʌ뎙?J[Yˏď2`ٲ~)k,(d8'\&DYUd ѩ媩!g+2W^}}OIEIEM<D=]b8'85F\F$*<^z]_k5 'J O13:Ŀ ~\񝻎3ө?heA"A3W<:iS#5C-ac<1}:I>R8'$rzqOZ]~baO\99z}(9==b _֍78t~ZFُ0 zN}kXȮ= Qq >2,F X`gJP@\r aď^xtFzf`'md;#'۩r7&! qȔۗwdϵDM$5,A^w ~ۦ{[K}Xλr{vS=)A93Z߫KPAu;p>S]3֨5㙏`cqa#h#きbI~5cpRsߧϿl?\A?3}NZ{O4OnĂx>\g=}*P1xq؏Z4wn`.'rٛ]l}^ szxkVz+p29>c4r09,{tX8ANM?5r> c99ҫ$s#GN+P6S"1r8c#$\apW '2+9< &HOb"kn;#R`ėf ini27kǨ\Gm"4sY@f0c#֢)rJfQ(Yhf1$cZwCğ,j.KxM!Ss^%"&%/GlA%z/(ZGdCqw. 7sZsiɖ[n'Aqb6u~ln8])-$ Ӑx5m$Ԏr8/rX 61~ ]1'n7@S.e~y A7*}6nRsֻ({(Y|څ`@'}s22"*pOF7sgIHb^>]Hצ:E FGr.F8f;u8aHb/ j йf‚6dI722}S 7 l38 [}AƝUWyQB){{gJV@#pӏsUe@ s`L]dc-R-""eALNFw2 Tc[k`[`Frp6I8 \--#F 6-6usA2ʐվb;TܟhmB<>~w; 8Ax03@3`{t0qI2_M'8;9Ҁ=sΓ0G\~'@ ߸=;'|rN:~Tg=pyǧ s''⎛G^-1Za~G:dgg1?s;{cC~뜮3ǿi ?qBBd錌CQz׊~bh8L֋-s`3I =s3$z@u#^)!OC>1uǽ s'pOEyo ;y$/t ?\ xqړ?1zNy8ΩDsc֛O8P3g{U&&䎃88zxݷvq>H l}Idc!aM9xc=Hl:#zg=38 zqϭgc!S9=}/;p# N€0x<#gMOR7}< ހp^3qHz'88>P>GA'?8  ۟DZ@$0qgg9,fnzdws,h%T@93GhN99~nJqץLwӁ?8 `w'{qR`xzȠ9p1T4BHd?x#MX`Ƿ`y>S)'pKTZInr[ S qJOCdkArH"ܼ1%2NzW3Z˶ջRO̓ <>YHݏǎ o4 74"e-~v1O,? ҮD 6r[1Nĕm#F Azxb.pT o_u, :w=*oyI+Ez' AWW qp0 cPy=Oj0r &njoG&/?Zi^݇vuG1' {}zT`'#Gl͊=x?a&G3T3(sbb4Ӓ$yN)lRX-\$t"ճ+_$2/vd^v$*FAp-lׯIyuV4yFe9$Zϼ| "qH׷{XjM6 B9ېsgd\ @s68Wdgy<%|wf8vcJS99\<9yhQr@`͞z`~ wS*T2gxrH!p7'z)/Y$&08֒u(Yx+Jg+nONjCpܰj3zWw̛=:1kg_ \Ð!?œX׮3\,QJJ7mjw/x~#ܢ[NOOe!䞼N*vR0ѣn$=x3mÑt0@\1`Һi|I8ꚰ,T6Hܯ ~Rv6axU!~a灞׷'usǮّrUF0I<xN,CCFdl1מǯ]K!6I Ep7,NXr8Unn|k&?#p8A-s\vHplv }%-͐Frs֟X@<9].tCߕaՂʰ#֢F*[Bl@A܀rz2Tx`Ff1AW. ܅?OUnR7c99 ߌ;m,~cסHEN7nqv3?xc>` $ pv׶0(Cj66`; 'ՏoVA8@`:sqw!-H|Îֳ@9ߩCdcch2q sQ09In=n6N8BeA9'&&F0ʾĈs *ygM$* #6W eT,UN& = 82S3jt9 =Ay8'8=HzgxϨ~<\vaԀJ0@7osߦ:uh[qqzJq/ʀ>QH p܎v>dv?dczu8x}FQT"A:UOlzJwcln8{$KalOz;AoȂ8%@x#;8QU;{i&'1~Ҟ}Ho+sߨbn?o16GQk)\ =`88+'zq @I\t'y8N1cW/ur9 >ⱘ*}qN0 r9HV烁yۊ֍ozI8pscp 篥eQ|lۀ}y]z#ͫ2U#;~+u9<ޑ8p u zck3r܋n@88HލGipskVش"@z$̨̬pzJQvӹX0<]jQrH6 dgZE?Ukjђ0ˑ^Z]A by;=}dr9Y4e܆O ~"$Yr~'zڢIN..1)2Zk7vJ.G s޹ʹS gW=Q:ʤ#FtLAB^ܚ4XebK@\{qu: >gJa/T3Z,q9 prr?JSg ]}}>{s1򟛓ϡޱ>Rrp#$A_r>#_L]Ain\nܘ~E+ī.X.@ h/9 󹔀 ?8$8ڹ[w.ڲIl`>s8chU'y-Δ(]˴ONz8$XL8K[=oBO?^*⑍avႱ,~n}Hp8fwn #ƪ01>$r|U0ɹ1RFO]v棙B@ ?;XޯMy8< #9'$ I(8ȨվcBNʀOv_a\iG"MvBcaG_Mo:T6CTjY,ʑϹF6ZL8r1['fc9ԤXQPX%=!P7\۵ ܌{T{Qʂ1۞a_s8FD7d8㚠y>੸c8HlD5.mmJ ĝ[ӡ 犱gNһH;I?8b{h{;$;{hP;JÛ [~z3r@z˪59Kwd*`r[ HaA$23]Q=qA$nP<~=*uwsd?1u@G~\I<`#+Znz_#TzvֺhnD9m8\8=ۥe&ih!$OaW,2p08$rǿZn\m$s>9y7glmNs@m$@m0zsR '$铞?sI\u23؂GL/Oo°soc$sCdt9qQrضu g#08z{ucIW~#f\\q?U}- W p0z8No9Ҵf`^x.HN?Ϸ=G~h-FsFx${tZӌ :snGcHq!^wZю8z15Q.)tz36T㜨N:;SrSN}^p0 wRL Ϟ7TUe_?㠮Ca{,_,+-uH )+ⴳ=qwc%p7(`n>=NߔҒ/9APA u<ݞ@qz^yLR*r0G"cR*#"P2Od:qI܎yϡz1X!%O@)dV>vJu3K eT¨<jNq!u;Cp7ミ^=qҷ 2s[$c3DAVe"9$v:0qVd#R!^v1NN1v}q<6b7O] fuLj38 #HE{tpOU,J]M4Pv+60˞xLVahI =O2? UtB*6Bn GZ-b0[NG=8?jvgd+5t,cAO${ pxO gb0aktu:QHK]F9@Og}9Cq?SX=Kr`rI>J # #黾=j.7_clў28=sO~ǹ=FsI3qr' OLRx#9 H㑁#v󊭼 'OCH gT2}/R+}s#ԞǎqprNV9<1jL9 B..I ҂堠pz׊H ;s޹koLa8cxF9(g`$WZ%u(nq3Hb?/fRRN'jcDч˻F{秾*\ R+sל8=/ t4SmA\u$prz~"Fy~*]?"}Ќ1<`MH$B:c1' .O'~3{Rr#RuǯޛHUx dc߭O!Jec2AR=3Q4m=S>*lhV(I~:_ɪ9#Obk&S!h$`>zqҫ'=5^A):t֬yw5R!py=~=3XGq8~Ս`9{p@{˥r'uvΘnb̹Ty8GV+;dӖǫGdVl 0NqSJ^X c{Vg@OcEaGPǜs>ZQ [J"on#b1<dR9%q~5]z`zIk5Ev$:Ko Sa<{gx8<zt:w;vȠc1a={`s<&B>=JtR2:g$?_CLܷɌy`IE֚YA\|ߵ}WK_OsSRpy*}#a,ANy^iK9I(prۏ# %$0̌˦p̑Sf>ePv: un@%ii41VuWBwng=@vےsh=8#8?Z;!7أ]GxЎrCI Up=6Զ;YbP`hnqm 28Gm#5x?kbUXB**`honLڻ^%􏧋qp-m24Ý1\Ze6vpX@TdVf5Ɵh$XZI-!DW`bD<^uGeep$t$ ڛДO>[jn2:rsk5G^9BlFAvdx$ntqӎ8Pry /AL1 c \DlN:K?~sqyT7n劇㯠;W_bNwm8@e#ZeQ g$GN?VۗWbjb\(<> )yu,yHɐ;JJQ X w⤵h|vg)~vf#nf(Hw<ު>@!X NyuK7!y'ڙenm,\1ǖNKzq㢹GnQRDž@x;7tB8cXn՚j׺rx;IOAHIx둓15yo' ی@ rzsc*p\%s?{ƥ:icJ pIsZ@Q_q?:n] ۸RLޥd2|zw8fbOf'HنT v'i lԷE"=ުdAzd`zVŌbR1?*u8杬ɿMkC'cD>Ǵdz'pD} V]C?UΡ(h#F˪w{_\ }}Pyy>tؖP}x GK;z"~G^9?\wⴉ,~8Luӏ:{VN9*\{;gUtxpzRw케OP= 3`*9}}y~1 9?ZQzc'א2s⃃'\HbQ@cRczgۓT ^uhi'=ڐwN#$gK7r1Cz^'>Ԙ׮N?,=:㜜O>~ԇ~r=} oNy>:<R1>wqП֓n>lq$N#}(Q?<Ǩ?; c#!4}GoΝzt<֠ߩIH=p{4 LtosGL$szsG#|^:cw؎p912@'x:<A l'n-?3A!OQyc۷J\{=}^uR99|`A>Tp8g!ĐFNQ9@16acx 0:~ I9,{Hyr;S'GS;v0$pppu<q=%Fɠ|H?2; a ]Fr2yv&$`<=E1J#s\ g' ugd0>c`cҘ_ 2 o_€pqנ)s?.r=)zgG1,PF\o9^I6cճrǟ-x84~czzNp8p3ԎG*>aצ #=J0x9*w%w=iŁH ;+=|朗JG m~،-qLæpN8UcCg\b:`WZb71*Q=qNY5{9'~"tCÓt;G2r1Uǩ?FZ} m\|!<`IRI8@ CZІ;۸7w|)`PJ{ DKz\ 쓜u;IVrGv ˟~ &aeP8^XvL`ZO2Ct^8{ OrdwOJE+:}:H ᱇ܪH\xNqU$(p۟WzkIg}Ϻ +HϘKЁ)|9z:b`e.zd9!ENJY8b Ѥ a<ܝ q׽H3d<i%@7w/T9H5h8\a9^:ְּ; z=3N9leG?P:F:sp 07rI#9ybŹ s h4Sdži#`];H>ɑr Y0FqW_gEО$bFvgnA!FJV`caN wnMiF<.ܳckM7@@V$c8%{z:BpvU1~vqu]џ3,v)Tb_pq_AK<b W:qYmÀ^}s߃EnRF*Lvm ߼񷌌՗lR$ Is&OVsre n){V@ dm,9w=ϨBcsҘFPsi{s@1J/8$9'f7u|p8?&ц>c=kL?lP0`qלsM %ʕE WEnN  *w;{&X;NT/ҽMfC\1=p@'޽ &u>𴡞5#eF#v,p,x]991J9`B}R#yRv:kȾ2S`=OJi?N=AOLv)0o+$.p#<+@0T1p=xRH@H /\0h:4OF$=( tqS8v'['t{JRC[בgZǜ9eێh}+))r8H[<8^y>֪ĶJU~NF 8h%N6*p>bG0}ܶ wj2 :cwN= S*Ʌ98ק"gG^}9ROzQ- 3+S9-9p:my|͐9 ?ҊtGd5v=L'D=%`q+٧IkmNYZDD.y wv8&?0 ctwpX|:z%ubi3-5Rث`-1=z=|Yws~xQ]yZ'|##j[9X7m$粨$c5@}Abpr>a^=ZviT=#Oԃ([ ' {k|N0 9NRNWiʟۑ9$u;\ $}+_(n2y) ךL6L6!Om6}sWwd2/$.:yԔ:[`9Fќ(|rNay 1ma]ǵK/w/%8#sV9H# מj Ek.a$7zcް=~͕B)9re$H9O<~\صm)J,6?*rA*GF8#cMf]|0=F=^סNq8^Qn-39ʜ@Pvے9RҙtPXېs)+,N uǰ8svR[C}@uL'$W>.G'9C{QʞRpq.FN[ ><;y8:?[%Iwr}S =' 9Jw$xs"oFr\sْ,OE {GւHc3zH~s8$z:wQqk>{GxrNGn}r _g)j4؟Rp㯠ީ9,I'#ڹH"=r ?GGQZf>ASz3e 'b9 #?4sd9C?tc'β )ۂ s`}cWch7 '$gn2t23Ƿ?V#.Ǘ.r231#=לxK;sN89_LҾ/Vε{+\˒Vf93$p~*=''5PcɩYQe!rrĎyfnN*QjSJv9+UZkF $;s־-{@;c{*VꏗϚGzcLF!x {cwM 0^'yjJ۷Rn;u}.sZR oktne\A?ʶR5fbqi'#q11\UΟ9䁌`wZ덤bc䁞~5:ٌUy geOmJմ l(2\?,`s_9׻%f>k$i4wz(?1 8k6#xU)8zt)C9[.CH?'zp++3F1InlTey'?[VhH1tzScCҺӺ1Hc?*ѱl=+F622=_˚{D(P[si c䜬,t g=E`{O;xq\s:c/Aj3ٲ30 hCq_aXRNsԎ;}i-F{zԋװלcsf4Ac=>yۊэnrH޸ yN\ %W1c{}jo4=uY6`3XR\uT; c> 0GG#֓xF9;SX3=O!v4; '<0O?AG39'qECZLӌ^)SЃr8{Eb2y?^>j=zR0:}ڥW'8Aܽj.>hs ?6?h? MǮitew+vaUX}IoP)|EJep0:8x{楯=zs_E$7+*)My98$ZRB# Vi%19=pIR&YGl R92F}y=\ >cϯҵ9D`vr cZn3S6vJRW R6@qH y#;Ay4p 2@+tLtZڝq^M',1}ONELs¹Ul}ZN(+l±>ZDi|p^P>S`gLRƩ!U%~owF, ?> )'^rBʻ?{IxbP!׃vO_N`.A?):~ ~b;Z=:bu_t=( wsm#Ա=ȐavLr8 ({냳;ٞIp{l#3߶8搙' Ҥ2;$1߁րрsstA-8|@ʊ;`'.;A9RM j`2wdߞ*ޙi%-ǖHbi83M^&;owWs73*t6qP%BrⲢowKZuсՉ` ǩҾc`DV1GWoR;מߴDR\2}Wq'?9+£c"rr0X|dèF+K?)Tnr&>L}xWxjC:pOsC5֢w9o{5$F d61ϥy͔@8>Uƚ0$&Bs9j62bF 5\"v6:''tRmAnCqW2B19'nb)GF|ڧtv:nUa $d?WKwnsW84軤zʹC~lZk/Pn>r}=I ҶNF 8=⎽ luDN ^  pNqka~p~Bz1#RXg[Nϔ}jn8?oR2x*r;" c99tDǰx{ǧ m%j3ϡ┶f$d!Gog9 瑴DGcOjU8 IMI3"b bRus 5|?Ij mo,;?X/Msj;WHIrNTn="+p`0̑+T$^=+}W͗z.pOJp]G'm<ʂO,&ӹUȥ=1ǥ]{H( 6n .O`riI;7QjWg>-?%-ʕ s\ Jry^7'afcv{tit7bLL ,w4a@ Fϥrw<1Č\fuV%cί,9(pGlEe|Tcg22Fn\tU$Lc߾Pt[ ہG q:pR$.8n@>@'|ݑr(7q+ݗ I+nf>}TH8#ڳSJ{$p2X s@r*b}!ا#s1My*K;Ae ]7dة mq|$-$69IY[FPmZk3GF thC>U}:K[q;6rvGwZh݀~vПJwi;0%f,u ;:g[*޼;wBIm 7LA E~VgPsrUOC5+silsE<>>.A^pI8~Cx}2Q ~`Gaf`,rNI$sϧS"2lXzSdP[$gL+#lYRӇp0s֬OmvN"3Q [ A''$=1ާX`6na,ϧYs߀>$`~k32s,Iҙ $'Jk]}gE:\Ln5A-CysҸ!|1T! zS]_%v/+\c>n3O|n!rd@#Tb¶2Q;T+{T`!I8  p}}1l(i8}܎x8$E9B'4l|^8P2g,xNqG^#`rj.;rOP>Qv9kD%p <c'9֓<װ$}jOp<z~៧RGH.;y z5!'=@8ǩy"Q;sN;`qKŎک sNG8OƁ0x8럯j9=0xzSAx:d*$c # Lp 8z qM ^njcnb|9v;R0q3ۜ1ߦNJ(`H=zSqߧNq(ӧ:=J@!Đp)g:S`p}?bzccڛۗPI1J:cۻ\ wc9 Ab<: QHW :1Bc .OpBӯ#۽HߜS$n7:12GqiSN9#~\1m;dtPqy皥 %q.r Rt^ |`p(+ y$|݌pSAG1Ǩ=N23H 6'r XzQ@tIrG橀1v>ӱ O$#9}1QV˴xy =cYq 0s 8X9 Gwt2:[rՁh݃pbKx;T\W-9aҀ/# c>Ԋ89fݭx3&*svxW /}v%e(9,9rt8WPK#ҙ|v>JTܔFrF$9L@O>_29XJ~Pmec۳T\qH@r:{R]A$@@;@f'ڭ#?H89<PfZB%W2xHvZ&Ts;<)9JeS ;#?wokA4q\|C&8zunǑ4L+.WH?*u8y( t@^7{ ]{rseb/bXq#lבk21S .|1HnNk6#hQ ù #3qW<(f`dq4nʤ&3g MF:׿56b'\K|Aڮr䑟g/dO=<w$s`qQ:H(h\2PnI01I$˒U^SЧ?+t[R$=p3Ү;'[ ҹ 2 qUͼd{bP0n`IS`gK'@7Hy U3Rĸxqȣ0v{rh"e'qa =Nv `d$dCa]lXpN3u-FwFs2がWCl'1a9ǥHX x\ݴOҽNqŒ@Q2Aهz+{ܗLpL:r+bAF'׃Q NRJ-#'z['t8ϧּ¬.삣t׏_|faxolFO#q֋T񁝼c-hq8\2rr;#'we܁O~P AaW=? WnldeimܐHבEvI?xxx4ûynp}2@e$B{t9#{*rsA=qYb#dq^LqܟZś2H`=s;){= 8R 8?~R;.Ldc4 n6=>Q=$g9OErMH23צpOASqrF07w`G͒GRs׷֗on wz $Pxag$?h u=XLERD76;ɩ6}=r]Wpzצ1vrTNJrOR~AN{|TWW9'y~|Ӱo9~J9@$矮97sǠ'ۆ yy;PKb8C9S5]7`wz7 NL{wBh϶reV3ة=:`zr@kfgcgc8wȯWI6;Su},/HVzjǰ{^ڧxw4SNiG˂;\6b!g%FBOkwqg8.T^G^I|H8 Dg$Nr0wl8(M~zA- 8~QUd B 9=#':f#.[G9RX1H+u {| 1 ]eZ:H׾A|Z;@#hN;d5\*`Ǧk#7dU hLJaw?tAS7n$s^Oj֛Rڦ푂qӟ\׫X"/;dN@9+PQꠟ!Fq#ڴJ$'ck1s]X>#.NѸ_6xJE2H#|sSoxwB^gWxTFÓI>9֫Dr#?xiy5NxEDfERw+z g+|-&vu'SJVh-7T\(Hf)rj+vޣq9=;s8]3է/uہxs+L7ac=zzWX4]&pȅ 2|d'^Z@ni 6lq9#HR-Cye +A'#L֬Y0'=꧹=Dnڸ{T01yåH E #jdR3<06QlH%226 ♵88sw;WTNynV*7Nw?3PsajHw2m-Iج|pY ;O n9,*6Y  3{tH8:sb\68^33Sg Wv!AGX }@r~aMe|# HϙH,#ʎy9!\!o_î*J/L$xw>$Jޝ~km۹ ~p7q;RƋH8P8UAЁߐ1M?/Fy!PjK3n8s>a1|VKmPT1C|BF=}8k\܊8p~uU-;ٰuۍq•'CBu;wer:5[97\} #8:Qz3ssAӠ r:p2 #gj?/'gLӏ\ՠ t8 ISG.FK3j%yەH<jID`KpT3#67/ %gv>kҴӵ9q\X`'*zlϥ%(ܘUbd89%c{vasyߏgq9+ 2}i;QsRN*F{ 2pC!=wgps;C`NWO${=~tF{ʽ9a׀x$G]@rs~*iciƦ^^=S=qt}j+9{uA"@,O|T{JȻ - ߀OڣgzYCHΫ8"-{MW,h<OG=r3OVWI<@xnq?l,Tw^Ib \FiXS$l9##NN+#u}BQM^\,XupiΪ{dz;E 9=F::WRF|4mvLt%Pr' Rj:cہ3zpGRjXsvўE^OP ?8x'CR2 8=v< u"伏_/H);J+O1-1׌vy5VԒr9#&ISba\|@WJl"xbs1^MXԽ:'CnQW*b2vqX'X#$"ўxqTuS-  dMǡקv錊:!@9Es'sqY y?UWW|)2k+FGnGC~5\{Gj[&BH$֕x tR}}{qBܫܰ;g0HGRqjK6sul^*cI?jQ#3w=݆' 9-^88#>ޙ۹ў21VFܟLu㯯OR {uegc9 9 8\@ɮ*M'x=N=2SH0:=#\gTQg C<#.RH8e8gwJ?|.H.%56vY^f6K(\Q]UOߡEf0ɤ@UfP|pO漦{WpF=Ն݌k+;4f>QHUN $G|YHInâϧi;vq0ޮ1ЎG$9wwҶ6U gx{Ee5+b3B Ҙn XQwk#b5ig#$z=};eIϙpCJWB$h*dp,918>٨e\]J/mH7gnpwdtW6rDpyDxc=8i"l %r2ݸc"17ܑ`ceqVNUI->ubHrv+3;EMRw ʞB}SP2nIFF8sӃjZ} BHnc6`ui[{>7mL" ae#gr@SS+$GM')аIfs#G En2-2s+}DDBq$Y暃bOW幘 ¼ x?/2+U! X3m K϶{{!\GucyeJF}{Tv<)bi$\ⴅ=O9H&2Ƽ2q@<,l<#i UHԎ]Womc}ݥڣLy!d$$c#rG<抟 h,%Ү5A[%W&H7vHul|*d~fG #4έV&Ѽ/~KF{7G(qNrS5+B+2I V׎j78<;[;C_}Qld[䩈W'$:q'`.VRUpGp{U{.x}Y«roKMB,Mj67ᛮ>M[`dz(\VT_m?}3Њ|Qp8 '8?itqW~Z*8@_ʸ˗NT31;W=첿ѳ 2 i!N@ 5vM  [#<ׅQn}6=Gײ@21'WXދL8^O'y9=r=3\ԶtӜrAg/rGC s{sg#ߥH9`scp6F;{tdOR2sW1b$`p9GPr>~ҍ6uy_JO(|돕( Ӆ^N~c#OZoH<Ǿ2+hq'4PpqЎy4X.ƴd c8r3Ht'o2OΕMqP?~SG?q)HSA%psǯNUf򑌮||'DʬdꛨT g{grjtAN #\$}j/,q?k6OR)NxTd{==k3y,r> ggn<r;V-jhNO=O±g,ְ=Nf vy^u#r?ϵM{BOpy߭b-# AU#֥GGO9翯ێ3>?< rBSTàv0Icӿ5L,Fx c?>*w@1N|bs1 ? $on!`tBOSRrlq=&r=jX+9?C?t9Wm]xeZt\c5eE烘Y#-Ge*ĤX-GӁfKkxY #x_y_q)E<]7N+k}sir6R t~fG5258 z^>VpIsV5ixcăGվmgnj,rʶU r{UOLd9q@.<juLqWX3nqלcf r%.v@ϯ^㥁Vc*A yPrNy6?mf۽#-/3U]@4ኰ%m[#^08"-54"1~qYJHN[R<b0796q{qگj*LB- -';#q=֔"6;|~b'gjeRzמf?dA)~ʍw>Cֹ'8#9NRV=9#=(A,y[ @WRPۍB6GJVonp ry8$ӥ4bq/1qEjuAV#(e$bs SԶ:Q"ṡ'gPcrLc $wZ|Bd99f}1zi-LYecoU`f!~"am{;"42<$"JFeVXƴ2g2Jdne's,lp1IdY3V5+#t,={(mXX}9.18XxYw 4dl}N:st:l( Q0Gy^6CD8nvPHK3HELL=Hب:s#SRT6[n\~\uswDw4Tܒ2xs.x9T#QLº:qhFۍJ-ʁrR HrO ˁsrr9#Vc6  c,6oBvb8 |rq۟\TTJ{Rԉ#J&Pnlg}=+b_.pfՓ13 qIu_O9U`*r8kptj[c 1뚹R~,@.Gnwɦ2NH ``NN=9Lє' "w{uUTlC:3@T$ZiܻC硭K=F7s1T#5WI ]JTMy-g8Vž;R Ԓ7Q߃;EB)]<RvCH?Z[Ao Yg72]$A^l{{'CWTsWK?Y_svvv_C܌Jq$+@)#v83 qۃN̸rYU$OK=$F{ p"2'=ilR!)8VYU+=H#'3}H[jT¡I+p U#/Xn3a[Y=ʵg;˒%svfI89>OSҝ**2`0$vޕ8 InI)A)F 89_/RY["|(fbf0=xj.3xf:tn_+V$kd9̱;O7־}B)VIoY݀29:?&}"$DA. Inڽ2KU{U&E ܰ31n $ qDU1o:䵚Sm,kwhPyQO%m^!Fq c^>h5=|feG$Ǡ>{T,=88:3^*Gr&NO$v1Tl8`Go_j `㜂Iێ:dOa֪##=T ?}Az㞴8'}*=@=s;}:Η=‚:PGB1\c''qB\VwSLZ0%{3?TON:qt0#<:~Y:( s98 >П֟@Cǰ_7:Ljn=pd#9B`|9;qu 7!$duN}`oO?Rr}) wP:s܀x; 8p3xE4МH@'ry#s{}O~=`<:qM3x=q`?a~>pOAg@<=13Қ[8ހ$qOA~=œ~`׃GQ`S5 =A{(G#j2xv3y84cwsyazuNQq@Ayc8 1(r{!~<ӟ/RFNFOO'<"Np뻩98ߓQ[1#M4 X-;IȪSlrQN9ɭ=3TbVGB>fa uq߶x/jMN3sU,ӿ5$bq2SF9r`پjJ ]rs\| {7D<(`8\ ssǁR1;+mU|>r~7lRksz oO^a][0$q)J皖Rzu8ڦ@3g(3r:ub).s1#n>Q=;#$Onz@Ai *Ggܣ=Jp~o28zgܳOu>ҚHxC o(> 1ǧ$6ONr1qyg9c<0s襺rYGI1qnpAq3rH}y?9rxw\eH^x=7 J{`n;}@C@ory'&p09zPx<grXn1AL.# 7 qϰ= dp;ⅰ@_QT]cNF&H\힞Sym&HQ_K`KOJER0T)#s0އ q'vK qz`~U8d+~n9 #Ap1VRUNrF?.94aAT>UP?#%RMݲ5 H,:qO?#* 6{U\F1ݐ2>fHbAȻNpp3Y7i,{ i RtG=LQ69<gמk^1=SNbJ2 <5yn<8\ީ=Ly_XHr+g%xӾjqpc%H9#9֓zBs:y 0P<ǒN3LuHʖ \c9f$(O=E%d C! n>X@xTu#^a$3 ngFRsy'Wo>5ߜ q(=6P1P ;Bp½-Q/ԗd\3(Led2.xt9 .v;O-A҃1kXW r$]w2Gy8l\B0@rA-Fn?6p ŗ$͑k9I wqr[I~DucNO=9O*`6VU?#ہ?ɖ@&|Əwʄ)k|4~ee jiM>e@eC#x;5)|oSJ Q)xf°ۈC}J @$ rҕZe}w +I$(߭T%ʔ`{pA>C}J"rŀ#y]*\܁_-9*[}I8\~\U4!rTŶO(* ^dnHΆHaJ 7dCwq@o8|yV#Xɚc?t2kN0;c(zrAs:Qy =ggxϸZЙqFP]n';qP<3o`k>X8:ֶTB8a6nT3VA `h [Gjۡa=95ɏ,i~.3 <7NA$z\ѿc8o^=nCH !pGc ♙靫a`1JFxJ!GA#$㑞5PpKë)rЁ4OAقd15u7q`=B\!q>lc {)̫ Ld,NNr"J2[A|(m z @s*PG9XU3Bqh8'fX2zM. 2nCH@Ӟ=+9$pxR;Db;"1~SNsmfN;zB&=IuSӡ$gσI>q\g+<981 r8}%s?ZݵTbvz0nWoc3I#h{Wo *{涄s=Ӳ\[HDaA,Fsc#u@`͒1 ψ];U7'9'gS}>`}?渹 dcN8Os -}xҋ(sF8w'uR7~<㯿jbxy;Ҹ%$܌cs9q3vi"ʫcdc>R 1w#Ԍ}h#~,sCؤWǨ+LN2nA)d{y9# qӃMظ-`pAg 9q}=< wϠ>P/#9\6zǧ^/8.?=9۾>l`zzrx9^0vӚO, 2I)+yJ Ns<&8#$gHWPX.>e'?Γkc9fa2Fy֮BeBފ{Fzzs@/98 {դf.۷;[n1AOarSQ2W_=cڹ|TU/1TyUrO gk 'v'v85XZ*1xؚ7vVv$8œ^>ݫǁy99^+jMĞc$<6э;WkP9ܖ#==z沒кԦ]FG,YT;t<\{MV!p1FssX-/wnwÕ`lCw%Ö휟ZQqW.Ħw`9!?1As޵8T*1L]Q  Ax랾MӢ%2G$_TUXzY#򝊀 Q NkfpW vxbai߹}[.p\:g}6nzNkq=SuF;Yv(` PSz^ ,X=qSQk;@ n# } uv `[ɻsg 3(S>^]uk7ˏEpVg U6$QH3 ec #߹aGHu=F Q q?HxG8^F9=htؐ㐼Fzp0j7׳F!`.=%dd7L@<`Is@7Gk,WHsϑT99Ov#JԀcpY~}O~sT~^y9;{szneɞ8.N;Tz܂O# y oe8uH$ kAl`|N}sO'r2s('sN9=p9'r}ہ2Cs0xJgy&? ue6'ul-+&S#9^NV3H n*YKqѱW>8^yp?;ByuYљ4D)$p \`=;9bxU$7'iQ&D\Px$G{گ;v9ϸMH7H=8LM!c^RFH`0 1I+beFVY_\1H9[i8]>P 0Y~SzbeaW\:KI ?$E]R"ʹoRTIrJ N2}D-ߩ YSn8!OlqsR0^라%.<`u$dJRPzdd}q=3hB@9zQ q)./\z tSve}O 5WE\3z1}w?>ԴHX{vzkY'^xʫpx e"*1rs?sjn8۞ڀx y8 21o?)VqM''1My9f4w' 1ϯ4L3Ԫ<KHN@1y9>9?uMKP"#[>8?5c߂>?f'm?H. g#8 2zqC>O s`6@ HqGqs' j S%qrA?Sӄ9$c =O\n1zU}9@cb0.`NFF}~_sƟ~uXc`A$\'C;78uP-H;[?FtPkދ<F76dG&#Uè9UøvF3ל .epG.Ӄmm#N3v`N.HKX(^8M7g~VJy©? zw㎔09NC(^xC#CrJ`?)@R?ۀr@RHq#yO0gIqۊj&"%! I#1P9*Aھ"z# \b*1+>tn PAQ JGoteQ(`3ƨ3 GOx\uRM=$@(ء$kvz>x,%DIu *gw `M*MX%A0o0}ry<׿i:$ȰbNI;6n?=+>Z<쾗>#;cdy.>qʫ8T;z tYxc#1"+nr>f8s׷z#::+\[[{3Ե@?g9ԥpRssz¾J>g)h $sκMRk}s~]JV0;cyw~~<^(T;oT(]n$+8$#o9'=h|f߸Fqy2JN-7MNڪ[txVg cz76;z`v" pk}., IS{~'q 7mr9U,w*cҾS PuG@ j8?'L9D2UD?0$ǯ#GXެuzֺ<J36]`zc(Rޙqp9=@\r1u czv#;H>ڧ\eNI< m wR%N3Q>ԩ0>\:_J 4$ ё8jٷ'}h.&Jb^s޵c^90IGn:r6:q~Îqگr85'sBsSmc<Sm鞽9 =NA!FFybۜǭ7onpN&1<==z.{'9zuq`gz8~::iP<9'#ZMw{iG@9xZvOs׎}n 08`~U891רpNNzۏ`+˸޹k@N>f }~:)nb\@ےz~~2:gP'O<X3)䐠dgoî+{~z{~GGӠ9N.lnvh w em'gy62\=ɨ=G9#ۏKb|灀=F3TgNqȫH@1!ԃ>9 =s{~XQׁ>qYHts0xg#jŚ!yN[0'!קNZ 9 x#3~Mk2sWo`Rrs<x{x/Cgx'j HSh^^5.w+0Gm*M$K! NGs_]6$W~9]GpvABC W\jSMJ%Xf O`{dǗc9u,!Ix~mS 3Ww֮Im4!gI$%6+2' /*UcU<0v~2-qlK,pcQZe @.DMIhaw9eS;֋bz/Oiv?vZ 12#T9Cpx ێ@'9e>1VPI#߯R~RK9f r#{1,C98=Lx⚘ܤ w̓AO>BFYd;dVG@>o˵99;/ulU>=>ƙ7Dg'#i#NjDD-z\`rH'~ ICxU6 43l.c%=wyn% r98bLlԂèG7esnUGN3׬^_6Rp: @{NncӞ;Xc>[9x=W8`8'n3z U_AɇQ.H tH86%A>.2 Pp\przN\œ{QGq4jv!~uE.qC޾+6aXh$iX{:<3e o&hC7j?8y𽅫.$I40SFKm֩;jsTz_ngqLȠ;e98/Iop0ڼW{S+8H:uIHLz"#zǧ^i\*q(aӐǿNݨsT#=3913U Ќdxןj1 qP :gԼ!2O˜{\B;{`6{B9@9?SuGP"n;]7r1]JQ@ `:)sAabc9o˭=Npzz)8ry=?N)0#oa8L@ nc'}߯Rqj@O= ` `=? 17G1۠iH緿P\N}1ӡcOמ{~ $O#`~`3ǚ[Qc>`)<63O7N$!cGo833GGLHdt9Ai3<Ӝz?]c$t#^=ztpx?Z6w0}:?an70u)ԉGr(3 ߱q,}qۯ5^kk̨ ĪNgںnͮ4hsAOR@YvJY݅0n:]Ѥ)ʇWV8lc9 k:]X }'#?J#ld6I7qjSIVfm>fp`NN}*]=!W.7˅g8uYV+8%~wrU@OU앶4S\a<߻q>l~50փ 3p6(䁷yOy\g:Zĭq}O' zqֳtke77an%y ӒbFpk&ΈW5TCc Hl3s޴ě09۟yEԋȏ%\ႝNpy A$rv](p8 N1ISq8?ns~8㌁OA#~`9$`?c=;I1å4?xq{`֨] O$;wGN3c€>qʹ2q@&dFsMs9`mۃ(wr0y9ќqJvCpqCssqܒ0[^rG4@*9=xAaRI}q4r`G\)M=? vHU01B'JAXG]rqc=(z~8,:3^?Ov`r}9ɧJ08HA;Ѐi86bI9qTr;uϠ6 2 g<Rjʶ U`'w*SCRq/0ϵL`nU-)B;Fz}*V .~f.qQf^wt6 #wc:SčmTPT Ürx9qҥp7qmh)$4I JW9aeG'iڻWR!Uwd/QB;БI9'u',@.;cY4F3dzǔG9 ݀89<=4Ջ?iy>yMk9#U},$-y ysw@dN}yK KGxns8Xl7 ,phW6\ b9z2I#Ą ,/ 8Ub¹=Td0dxJ=Yر}ΡX1`tS9jӌRLGO'5˩: 4UUN;85hG]X6R[AZ-hА' H w@qOjm]0x?{b*[e-6瞘Tfv󓏥fcDTp6IqO&uiX~JpA;O5ylYrOu80=AzldffrTUx!?T6͜U>aLF,71{ tPD_}B9*8v/fm bNSm'y#&RZRHʒRc}zR?NN uvAKK6JK*}T`}8<51ma-^sM̟w~@=cHn}=)8#6O R^Փ(>O 38HsHۮCuӏbŜwdQu{քrgvP|,Õ1ӊʦ摉Yi&U.*g8fr︉YF]?aN"aGQ2i.p0Ź28g%/йTl\ϴAMk&Td6B8#wɫB ?.WsܶbC x؊pۯymȐQX)/Pc#،}j4bFx={ҽoc{3f]0㍤0 g!H\>*x^{\xݍ01&]bG;qrD+ptne+O~;[=ێ~M*]Jn| ]Cr#> !+䏸X [8$g KōXbE$`I 3iR A>FG@*?Зv7W9lvFFӜn`2w|q~Z2Jn''oI8P`ucB) Y9~epOLt^kaC&CFh$b@ژ2K Xbk c.N} Oczuba8q)qHgޚ$vN0N2r;r1 L~R}q80y@KEXqϩeGh'“ޙb @B[?3a+ |8`x=zc`!c,I?/qv|luBqߚskܘvpwnA,Oc#QnG@pEaXX'-#z8?..}FzC޸ԎpHr=ӄ1A>iПs=R9w8YqX@:X#IFF~''Ǟܚw<?̖89:t׵14894H?t9'x׭qߍӓS2>H0G.x~S^i7 ;H$'8clG0p3ߊ l]A.@=*=9!O|d=A- 8=}i_v`b0IHRЯGI'8裠N¿(F9ݳx@% qԁOCi ߮2N@R['ǽ8ƃ?x 92;}M;=Pm۸( =z!Ga8T-brׯ8?—a q>;rS\$t8;鷕!>؛Ny sAR?NGW'puzJ˃38|rn۟\dwϭsRIn3~)35;>S\|gz1lp>^yZ`6"&U[918߳p'܃$lҊc%dH 鍪8L](cL>l''9r~! xJWq㻹AjiL<=.%(GcsY9+F>)9Lvx5e1TE`3팎MWE!BYwFdd#jЍ݅ Uy*8;H8*q=Z'&vc-89+ ryn [F! )<`v֬),r~i{~dKE;e2"''g.Fp@~~nZ\(\$yاi0_dہ*_ҍ]0*zgzb@x0<+ͩ4Bg*@l~Uqc<Q唬h# !Iӯ;'{8%I%bQ~:Q;uݏs5)]<>w7#9˯Z` 2s1ʞFA'$'pIA^§|9YTub199P0yuۻd6d^9,ITP:(`X xOb6,I,(@@z(r]w32x;eXuޜB:d}bULeثdA\zǚ,[7UA߁ӟ_6O^k,5elvuJgMu'ucY7 O~9e'<|VJu8 Gz}ǃc8jJ4g1Z't?[;)}sGlFF2ry$8-gbqg8N6=?*i鎙}=jz ، #ccFsxp{f.$,8 tQwؑ׎1،VR5D8p1d҅GӽeԲQr{6Cw#UZQN20 z5a~%eH=<'y隝FO\@Ny^6ΙgNN3RA3Gdt7+sgg48>ךMYdM(3|``S ⁧f[S|F9N #>UFO~+)D%ly ,K( zP"HFFzg$;YY(C|H4Oc<yžqސ˶}ayr1Ϳ d|Ҧ[21{cVsC<ǧҨOqNr@$7Ljp14ܟ;yԁvI cU0 G!* B˃5Ab{}d94K>"U]9%2YZF_.<1 婢pFၖ(@3Ss9#"m( Ԍ42쁰pw\ |^s`@8A'f#p1J0pO t>S y_~S=:h`3(,1U1#v}oz?"9p7{+BF9`73ð=N1d08Rx׌|`ޠ Z#A%X njKc cОOӽcHeyc(y$>RG#XQ1Z >Xhs4 k HĪ8e8k.Y8ۀzO*{ * *Hs:zU(]W0ĨFE893flqgG/ne~WA(0_0P tGhjH_#U6k a񱑞W`Z]ÖNkՉuwX\Ò{.H NlQU(!!Xr+9x\m_+E h#vT53cӴ Mo{\=$wnXؓxe:Ċ0Y®^"|eNfc˩s=5amqipv[n|Y<^k>r,>{W40M|m ؏k{4̽>K&= h b5>BQM`VᏔ9rA͊tq DSia .HqWYk&' \tooN}sEt{8 J!!8'g=OAn S,[3I>Yiϖ&2TUsѰI8#5a:hy^p b޸ ,/;G|}x1ö},}~)*tbK7?1'⻍/QxXrr29P>󲏼{XnX ㎜\s+-.DpOg [$Zte-͘Xr2W\OuyK8$ 9U88'YҜ .g$I1'n'90GdH[8TP 9}x5`s?OpzU$An qǿۡ>>*^!Ӟ'b2O(kZ<O 88kl艧' qy0=L'9ǿ\Izcן15Pסvta;=qM@ 0F[QuuO>9 =zq>߭!ߞzSz:s>8=<s8=GAөvOpv ZC>-ЏN&R+?l1wǯnߨ?54[$9Ǧzx_zd9Z晴 mԜ6zHn*Oc1;gftDqUs98bq93\o@T}2܂O]yP'u+]ƸwOB3ǜqsXTޓ\ss\g>9=ZŞ-N99Ϸ52Ӝd q2rusUA q֣ ? 0 {з AgHI<`C* =;qUG?fbR6GCֶoӪN?!O@r87xcq G$s=?α櫠r?=\})FNѷ9^s9?1O8$d'Ga#SБߎ֏cx9?֗8GG/Ɠ<?Lc8!^x٨뎃=?Z;\ڮC1 ?0?2[|W0:ӷa\' pq}>|>w4|jq$e>s<nmN3^j#D#J"#26VaA?ך9c|>Iͮ;1@Va?+s'5kxPAl:u8:mB27 26=zJ{kF8# *. z+bIy >Yѽ rI:Ӣۄ &RAyr۝ 2yON+FM1mE(f fl[*ǝG";E"`A5$g~l`^@ڭljYo'!E#!O $sI .h+ߞsJ8[ w^㓼@<40#|FF2u<#rtjXݎ;s\ޥhT;oATu4F# 7r9®03sR!~U!m6L$2y8OzLdߘpzr=@^@;$g=B8$p'c8PƋ9)mݤ]%bKw(!WfRǖ$99שjOD;[IFN#J.ߺg[0;cj/g3BX`! p:Q~coDD!.[# DZAȷcYji$A{{[>%+&1 *>\z6C3wbT| C!3qL娭rH;QI˼>7F̼Vuִ+uoe\ʑy-q]^_և*O?3} ;q\܃l$v1?,v:S9?uweps}qqP|#iGVt֗%*Hl2Ozr3C*[L $vo @H2 |I8'#O_EIuP`)oI= $ dv̒'b.COSE-%nE$_|B^*Kt&vd;p <yUH@\ ]#kppqG׎ZOqmbH(JgغI>Y8 jnNHW;yHʰE#9Z G:*s9 qۃJaS C |Nくưl(,dDh^;1VibHq*?1ثՂ%UQIqRم+ aJ^3Lԓ82 { ⦊σv`Kz vY'D!ۖ;gUڀc'9\vjskO {X$raQSy8Qcm-)ke0RgyO%L\vX*JJ 7R<{ץihs,!Kv RnH'̧<\'ZRUҥi77,gx$gֽrD^F |1V}PVȦIb}z xq@rFGQcWtA'wL oی=t0{G9r;q'<z.z@e^r6'TᝂNs)UJ[/̙ME<.U9d{sXwͬ[%mp$˶%ǵz\3W_3b5z ޷Wqc$B_|W s"02BH`9#>&QV%yCmؠ 6vxU)u &&v@N4̧TDm"@,Ėt#l#N=1w9>-Ku<'=4é0ws6֨o cלvScp88=)0cqN>\> qt392$Tyo0g8=qS:4ŽF2pT6Вr3Ϧ{ ٗtj.:0$1l#9HHMj=7ߓ?/O1֑Htav-w4Q%zsK{z!X႓BH`22Q25t;{vȤ*wq??^0y|A>4/Ԑ)<A屌Z01z2$xlwlFRج3v9x1Q!U$go0ӯ" .rXoP []0lH\UE}[ǚKdJLPzc[ޫrAW"We7|sMi%;IA랢Q2tE=c(3Rx=yo@ǞG?^3V0 0F1ҡuoT˓O߶yQNh]GRV9,Qqtq@̟xTt9錏y.QZ/]`=#݂Iw} `gk뷆91h<}{GbJ1,^.#=(3y` jLkAsשSm8-Re?wvG33cz:4k/ `!; rG9(8 63‚19kXƕF2K3 mNW$ӌo CPGAxb[ ;ႆ.H#krrAu+:TAfӯjFj1[;*J Q ?)5:I~?uc^OEXpF8[q mÂN ^zU'm;M2GI.:oiʀnrv⥽FO|,|(vKr-_(@ \uIwz` \t)  (zӿaJ`c$dzn5> {N9+x#5W۔䃁8JZʃǖmK=1[݀~BIzus*r\P:s?njs (8N1O+Yny2x|B,{ gɶ;j(`0A&vc}٧+t3b@ޠ 9W^&0 L2z`\x0an~B1g\Þ :ԕځAUTXaxRݞ-u,yU˧zЫ>S[p<:#`ك '6>5Bd\dqI p9=z2{Cwaj 1w7ӯo/@/N:s莐ă #0$S) +7qHXK{?" tUB~flo' >frܐQS)h,{]x0Dܷ0yXpPX}᷂>épv£1 :),[' c!K:=HLlE;68r:TA (`@OR$vr@ PB`az'N{rpGӞiuiX-'~wlaʞpXg#vGc$r2NI8M=QE% HӁבGJF38ʨunFuvQ0Bd85©dDą9޿0f-9i)^EyK/$`/] M$=W1(q {8'ʴqgu93l9rIj  }s1zutiNCH9< V#0護GOֽhJZ>"MjuۗoB3' s8rߔ`NW暰X#x瑃ּ{P#q^3?y#92FpJrpsr^;zMtęa 08el}dڲYۃ~{z&fk=@݂QZNN)_;kȭG[||U2n4ѷ^vy`~叼0TpQIn#S5-No X<{p27n'A<:hZ\0\W~U|`2:57.E<7''Qן_zr$L~|n pY YUx''8݁ qlqr98VhO~_0 sj3 w sUfȒ L.݌|8ݒǹqj)c:Zob6z0< W'r);O,ԏ#88#5!, ǧTؗR$qNAtUěpU(xPM|`)RpPodz`v5˓rXzL˱e!Op[IǦzV=KEiS-f,x*299=HFidFp<9.q޶ FەIܫ'?9(nhd01’AN0JMDV@6~l0XzcRx$3:VFIcq>ǭuCo=ʼrO,2ړ9 > u9*2 ;8AS} rF _z͚+ac,ʣz>lu=3ףd,_g/V\v=²2˒bzq_uxRMJ'FGpf%NPՑ'a<|␯9s#H893JB=[: 큐3@a?3s:O sN6@ 6{S¶q߹zzR{9Ooiq'8?+д<w㷷J^r98 ;x`On:R: g;6mr7QxQ8?MT2m#;u\3@_8i }y;T{9=rq]DZs(]?˟|ĻeY5So{dr1L (wS5 N0I= zEqՇ^g]s'93]R\INqsb'ˈO9<A迗iFN100y$61MBӄGbr8n+f!ԯ:.H9|u&ku;i`vs^*rpNHQN:pH 1ꣿ㞴8##-ӎR  ǁq#=Wan1R.,rA.@<`;6Er0G\a6c֎G$8޾+.ǮOQ?@ pB=|pG%}:KnR?3ܒˎ^=&{)>䓃<ӯ"yd<3[ǯ=צsU\us°9ORc['8*qILZny xEbPONs~*`qɕ s+9Dɑʜrñ^Rn9Q^=~KR`'A y} ~y:x5vg|d'>ׁ֣$`$~j唙bDX ӜHjiˡ"<ߩ#jOЀsq]4$OA8翧N^L9'׫E]#q 8G GjOr L3ֻ)2xN3׆1ꮂ)c1Ȭ0N3k1!'\Ed—mrW8Nw$x7l)\\o섹jխL{$^ /o6(+[pNp8=^)sR^GզN6%6#nNq)mL(s#=OU源D*`bq<̻!r?ЁڴgTRN2v8 犓B#q<Rr)5sHR(&ߐeAܘ#j#sNŹH1f3cõc(q<dԚV2B"b[a+sXo(ןċ~mG]qdy]$ZwR&ow;7qZβ\8dUbY$a$N]gr0@Dj h8SC4BFJ8C'ßlR,dY3d@i@GSۧzF K=2VuVW[xG!ۃ޹MS?#@adaax#ǨP~^1 }KFH6]9،F,Ab{ $< 8z0E^=)B":Gמz[,2F6$7>En>b6:y`R1^=8OR$Ń,qK.N1߯vrN#wZhO`Yc"B2YF@rs39 qׂ*!u.#+3~ZIՌrFCD# OPyF+Dc-ŸS܌wpV-R^ O\x (C# Ö<N  [PsV5-mLC%SuW <峜8O *=aQ覭b\* Nq39ZxS~tD"ʜG?}/Lrq 4h%IW,k`N ZH܊kh Y3 Boy<{,y[8X<^HN:I/S訸С&mm'w Nq]%x`PpOsӵ} iP,R6՞vk NH gGnNrm =k=[To#p[# /:`jWԳ.YG$u$ Yqˀta.}RN7^Ck2DT;sp+ִm& ZN28!~:ɮK:J|opNyLy;ֱ/3"ǥEe*gK2Od$rN:ǠTb"CN& NF݊@G>kY 8oS; cA'ҷ`T=\k&L8n;tn#/9@*tpqiK8p8nr_f7p'BC=O=Rxx 18c㎘zc@sQY'qjP'_E³䏘cמjɆ<34\,YF {`I p+zݞ R2_1 qD}y!C?Ur~ֹCrܶ@=AexQ# ҥU6)"CTwc99ʌ;˹Q.q=k.#IE >W`r23NTg>yS;}1W%nT:)8sN6erv I6enOvkB(O 7crsw &q`ʈa0sU+؍{C( eR3ޥjh_#=.y'QI Y.%+r30>P2x88-}?## 36N?8r@v=\4iu$w*gqYnizծHzm,`U3U& RpP`WG5wE]t%,BBR1d5O";p۹,\~Sv^Q䟗\\SLgf$1޺?_F9uV|2X (#9^ K*\dvS^aB=H OMϠtA#,Go^1Y"b:qzq)BKATnrOC8$JKB89]vA'CJ֛G5MY,ᶪ!S;EmHH!F6F;Wdets5fsIa\st֮۷;?3sR4{ݧNϛB2ܟ~{Vvݥ|0\*1[/r(#ѲNHb͵A nSg s!d P Zi 储F*=@;ֆw& 3wL9>@BÜ ry1kRwm yFuex`fH‚9vݹ #3Uԁ:`FpP6V9!q9VWc< Sg۝:4cUu]ܬ_e$t[ R 8ǚAneL`7nn6V獾H1x8q8B=ߥ;CP98$2zdr)9ԌuGқсI0F 0$4+p rϷZAI}޿60ǯaۃQF~qϭH G zzdp+/qО~8)#'o|?~;cCO^)w`vs9=;׏'8r }0t#C$#.r1ԎV5ƠDj |V'۶}f9r.I#Q#c{F!nN6 MYBNzz(s+$yr~=s `qq8\ƸNZ?瞿p~Uׯ'2d^Ub[j8$Ue ϻr8,uQ2"HPWuH9U 0q8sPn^g5u+oÎ?qޱP+9KsU=t!wܸmnYW̡N[%*Ԛ]X(Y6F#T&Gv:NM+:1aoUA5¾9fD bI:5Yx j,oݨ⺣(۞VZumĩ,EW*iKgNf=,. _$9Fr7R&UA+~`8'^i)tTqΜR禮K:?#ݲ';4);vv8޷ j|<of:cּ湺%r)nJz{gnNg|m![ 7{wbUBm%vI$O y }IQ봳7+{w=3?iEi/ȖB6fl@y\!RU~ܻ?08c\}(URȣ2q[!Җ[K#'7qԏt ~9-&IQhjv0 p?wYw6Z[f`H(\*N+E^O9c쮬R]#[h=`"H̪e1rG_TOdKg] e%eD+@ z 4LFVV!W=VGn;sps?.q@#~uAq3#*1.;ggx=qzh;AǩrA==:T98;H=i ݱ@H@pO8鞸A^9# c@#ג9H?ץ;ׅ9-r!7w_c1H7 arp;m$΀@0 {Ӏ'09A>DyoP,Oi ͻ3Hј1 02KC1'_;'~cCh$ 68ހ0`G|OCҥfG!2̎GONFN9|ț~G@Iovyڨ. AGlc 5îK2S#<I-.9l/T rBsǧn=D}9fű#KqX&81bڻIq֯v(eA0Uh3Yv *N\/j`'8*yfr;エ2Cp<Ɲ9gǨvвA\`=qҬ܍9.I ?Jer.R}~su 2:>Wܗ<Sy2 ~}+lys ,3#+b?͆ [rzqOJN  z]l-ʤw$O,}Cc <p $gkX?ɫxNޯ+);<:j,H pUO*UR%9؆Sv(m]~Bű}kףFF\sӵc=f!8NCTSk+;I?qjv'c|Ĝ`#Ҝw2C䟥ƗRm# ^r~j"8V 9$8i0#e|g_A[j(eXo*2`9n%dnQx"c-v (S2`ʱ1'?62`@R8>.êѾCBi26r sj&O8.x&^dz׸(`08l[ֆblrI\9~\`+z2Ećwb02FBA1P.&6ye07$cRNJgpRFG|~5Տ+[y#`Yd/-C#iky HV{G\ҦEd\dpF6`c=j !szu~u6,xN` >a'w*zֻa'%Bxq,m##Kc"X`@JN9*GsjOG2 |߈qg!6ݰN :,S~O2!eGBL Q mGqǷg>=gODf6XspYzx.jpt瀬2svTmܤ篧m{7>T#Pj_8gE܆Z{"v`)`)(Q>ᎀqpN?Psb+u+1>۹O^+< (7ZEnq郊- o0#9=hDI… ビ8@#2H?7|+ `#p uTF3KU;Kcm(@t{%~PGn: dc#ޗ<`00I8:g.z>^p28r1;F\o zR CShG-mЌpxkNʓc˞H?K4uֳ+ G HIֻ{Upciҥ>x ^zM *N11=382CI':g~m#1@9㓻۹M?ݵsӜtSR ؕrN8(ב[(7;\(Oc2wm@[Fz~~SmsqO^P5r>PF@sS8{Jba;䃓>Pt'ARźЃ. rrX''Wa9$䌌=yn]QW=>^Ƹ= NH/8;;qOsa2HrqN6zъRۃn"r:cV{܂Mc .Gw$SgՎ3^TJ9=9oGbdGp3*p@zU>|`=yY_n!8lAʟ~ժ9N: <㹮ΑJUe^F@fq*ۓv?tֈCp#; “X.ќ]*d`r02e_Lp*~Mmr[9j\ ,5uW`+ &Y ecrpOu:SO\ g#$z1"XӯJ6+%4i*XpO p&w_1A8+9 geВq/';Ob\tGZ~`y330xe"?EyҨx Gl~ Zr<3+f7c;X SC:uҜ Tp[0pN1z29 pI1ʜ+snǘfna}q 8+ݐO# x9ϠyH<8T&= 'wg>ߥH]29 {?='v789^j3czԳEoOfެ" !$:rr89⽂ȖE< gvqfQgLxi0w@;ǧ[S2$Uy`iU-{˩9U` o>.6px{㨠){u8 㜞Ps2s88qRzd$$0z1ޗn2xFq#W%GrЭyQn:g$qgۥpk\t^#7':x6SĒIpHW'Ð?6oVvEhA#Ҙ͎pXaA9?׭b٢BA<sz)ܮx3dlCk2.^6tVp''Fq: czʿt|ہ?6:)_Ut|&MC1| ںRv9;H1?J9WTǿy89z+..x Gr2 W>tRS nBsN B>bFI}{E9ZOu~Flx<;O,73֒n瓜lzWm`Bp2j=kC*ne2IAӵt0@^q~U{+WDh%BuqYAG:izӡD{zץtçbGoO_Zp'+#+I's0vס #9 O awrA:p{Xԏ<%4$ fR l2 Z2x<zvOԒϹϚ'm>fl#vG>kߝ3z޹+ e#خg?zUezO^1\*FE1 .xkYe铹xڛ1㞃8^dm:ݝC@:T ~QѷzsCKot򪭂8''<v'5,\LL0yϩN}}q_Hr3 <3Pݏ}Qzb4DÎS`#q׵w^5mCqNsNqSn9quޥQUZysgi= $㎽k8A</#0zzzLh H8#tϨ9RP=93y uFOSޔ4 ''8'ZMKTX $8AR>N8py^%4^؀<=;Uvq׃sWUjB =?Ϗӊx#$tG! @s9ǭ3oNN0ySOsDM9ǧ8*p?.pO^yG>A^ ydz}E_@`pZDk=˨>Qr0yy|#iF38“ vǧ<\ s3>!%_)e' F\ +?^6FټL2cf7<)(No}"e7$=k>=R0"Ii#lEGy\';LVEpۅ$chB| yy;UI]uf^3ޒm0eF9Ժ ǍäwsNrhHř8x_zϭEv9_pOn>&uc>K NdQ$\)"fCF:dgרVTT mvkLZ2*]3Lt!;kW7("R45(OS+. HN _˝cBHϵM">9?9 h`& mo+9qR @/N1ӭ'#X*{l~^)RHR1ǦNi+6oep3` )|T1F@sI'ۡsB$ cMGŰ92Nc CӚaab<ŲH˾o16*FGF!Ӟ0#2!^7`g5$bpz;㞇҈&[Hת~+uJTϸ`wx8;Fzֆ{UbY|]q3o4D Hpz1'ϭ&e%rp~bќ7_wpF*9\"spSn cUUER>N*sH\µ1z+&Yv27;p9^Y2*Lr*Gl{V5hǚhE+ HU0G0jnm,v^y=RrMrqfל('g&ʒG 1oj,r  qkBȘ^Acߐ#Ҷ'wRv_@ ~]Mme=3|#vvJJQ+CϩV|9SyӁԵ \%v =y ֭?\02|g I{d~uJs*"W 78-[ ;;Ȯ @= `$pݓtaAmÌdqǷ5֞RObQdCSnjz$6r[78~ ;9H$#Qy<8a9zA(q8zc.adc'P2}{'8{wZ99Ϲ$pr>zTE8#NG8ϮxTDaF| ⫳q 'g)$00I ~UYH䃟sRwERb1ܜӟc߽C,(#}bj0@^?߽sF[NH<Uq>#}*Q7AN3^=i8r{t%i=1$&vs鵾1ӷ'F2O# zg۞#Ш8y5 z#ZO#lz?Jqz\uPbL=s1=N=Go\ z:H1R{޳} q~ 4s>BuafC~O983Hg81ЬzXqOH9y& TFӍz cR[*~iU:`Z^.,7F fR3q_E%-gmx~Tc4B#.B06jrM~<܃9Pz s}7C(jyݴW™-$ВM$HwG\zz_ R4*GbQ씈~vqQ'eo2zփfj^\4YVK2_&!Ԓ9p1\v6W1$>etVd?C^['es.C$vAS]+Srwp$q`GZ(N.©yy`@ۗ9#J2mXG'$(rKbd\ c2Ae:n JcG탒|O,HpHɜޫ׊LH03Pq+bBw X`d052ظnjL!Ѻeݜ +d$v`@ث# t(7Р)ry<J9&IʃC=Db6aEf\>Yr09aWh%/\m 96^k= ifÖI @O3+dڄm—ܻW ~j/CSϮ3܂@2Wv+,瓸g8lm ֺ(3ATF -`r@<֍]j@oU9rsZDVHw`6۞XF9'VBR2oF{Ai c ܀y@ǿPJm㎜ל|t# B֤.j|$;zHKK`CH8J~a`Xe T.N=z{sV2hVW6F1뜓ﶩÁ+6335Mi32U[G'^ި9?#8HX_A1̧zdrxfI3 BGKkfy<2c)vey{kA9R2d7|x qʜiW## 8 h9 ~fRx'߿sfKtAT`{;r?}8kc7V 2:Lm<9=NhadE+ <qzKD`$  ~aw3>*eRs6A$0x  ׻+=QOr8WpT;qLqmpFEV{3ͼF-*`I<;26ڞ8;HVifLՖʹ7瓜~(۳ʅu LÁ8$H` V޹wI89RA$zsB(w ߜzO^?pTu#?^=hb?7FN1ۿ^ҐzR@Ss{@z}F9<`\1~3צx9 ր}~=89on~>`/31ړu~x:.~{=9 t>?֎sN҄I׶ztg {Oɤ{>ZC:zsӽ3P?La4t鞞Tg\Y0sQ=M{$!T,sODLu“dlg9.~UxjJZj|*z鮇+6 Tq1Ԁ9r12ol BZ#Β`H} =GQ@UO1Sz5Mp!!r_κ|27FWz{M4u[nq֮&_3 n3j؏lIH*~ڭrla-]s` y~ksyO$M1&8O'iLU[{-lMJQߩ%kp dU|xB)'|0_-:0mc1sa(bmg{&ʥ\uqPQd]Ag3Jʗ;F߼ue zcs9^dhwA~L8* gۭz6߭fy~=J*({\c,< ccajb*vW=j>-dž^5PXpx9'<^:!,r4 cp.9@}4dmVtƹu &5Ef G^WN;3*g?wp-\{ "JRx9mB3)\]Avrp+KY wcIaa¹d86:kT-(ewaJZqi7~иf?g+׌l; X)9EI^ڤ}muM;YYcQN@!H韭tHaWvA9'|<{cx<7zik:t<ӿ5c$r0FO u*9<秧nTxLv/%'<ӑ4*39OC0"r|?@*ERjgm'zWVKhqk*TXyo5&X!QQ!8so/Go"ZV:!i-dj[.!,'Qʁ^Eiizs GBXuMy.ovk+6{hⶖ$I[dq⻗wMJMN[{t4p:'=wz⟞X f랆v:i0˯J-m (R[ ڗ ǿ<App}9HG@N>`>cC}')  n9z&G_oBHz%zgA[9|ǰN;e\$aI$n@#q;G_>S8`W }+Hu<O{ȩ8S0;` 0zց= ;Ps~zS՛h w|;E'EO|*FUL13 ҔW?l 3 )f< pnI4ۜg`~o?=- Ay?(ہ{rz6[ 㻎3ҐBXٟyx) rFܝ3F v%SnvnxdGnU-̀@ߜ?~78T9B}c?ӆS :]!*gVd| SrH+c308~=zA"e\*aA%H9[~zxEv0pی`c>~T9lRk'Xc`i arO ~#AH jwID d!SV<8VhUP${72W%27Luh#cJ'Fy8hHJ" 7Ӽ<6=s$*'3@xߎ3)(c wAVذ.|0 };UW;x>wUCI_Q,*|瞝:W0V8 DsE#}W>SZl( |OO;UL妆>BSwArz2A'>42ǃNvמ*JTYp?/PȤmA3@6N1&I('8bz6 wd0?jj?˱zLszU0%_cpxu{& ۖ`j%q<9r98==+&W{n\!@@b>Qc9R(q/~b9d !1BjekRUc R(;N1j`sdz#~L ]0!r~Z+ 1dw1ںc.d! [07n=W{u.;GϜg`kӣ+$sF\3F(9r%v>FSd ʤ:_229Pxz+wSdK[-m߃I ߟZ yeRs&Ozg\^!2f $sV@p AP .Oe9 ۣ.zY%u(,dW Wo=89#l^ڭ UE 9VWIۻ'&eh >Bp ؤO_#2sוR;!x9~l$ӡxJ;q$y㠦Q [u=$e[ eߞ5[dEQxV8.$un9fRTN9'ғF-x1,73ye8:qawO@9#H4١# VA<{s-`OzF1 ( \W 瞜Qp9\ 9);0r0>_qy&1Cc#}q&KG>wUpjyz~輜cذ9=UCDێ9'Ҧ'' :c=ÞD%LtONx#`:c>ILɢe89#nϸ3SsӁ{hHp A#O%$ryU#[6?t%bE'1b̀v~>ݩI<01 @<|ˎYV=r=~>2 Qw~P!A9 :zLT/q=Ҁr ?ӷ]@=r:=9H@vy#1B`=s{팒:S61c' !#9;P})ޙpG#<Ls9S~lg9S1r u rį~e݌~?:{ [ 1!;g}?.1_?jɵ~c$~>VW-&}J򌝡OB3R=s"N@jqG䋔nOI1¹юԜ"P3y9%~l=*J}ũ3|M%Q9 gӿqH]vMm鍣[s =`9 |ÒH~1P4B_VUъRH%*H@6@œs۽rM #`=tp q,2Gg$r8 x<ӕ`QCerK)(?k_NWh $[HPwXv$։8tqHp~b)w qV Č ws*!w0؍67;W-XK{EĜ˷ݏ(d6p=a <\ch}o<櫛Oz9sצsR,B6Rpr2~e+n` }W*QzkcN@x9ⷢq,$8<潈M8RRzu!R,I$`lc7Os}q׎xFޘ+t)ZiKӐ@'bcwF8Rw11^gCbȓ 39<zqЊH }Os24Eec#=}II"'s/ԞrUzT4Q dH z';.UJ#\PӗD1HVC*0TϩWM Q&TCO^8Y[iܤ8';FN8>y@UВ?,sW/T;tM qc`&" +7 zu:{շ1;o<,l]pwl0`rJ+[=Ojo@Gb͈Q|sOb8 /]~nFGf29c̀OCM<7Uv>QT$x9 䓞3ߞӌ{(Q~ 0==c61goL#@x'#\޹Ɔ2 gzب\`8NzuqW-E4*8 d{ֳ##<zW]nuS T#^^٦Y"}G׊8G y#?v:)NUH'Y1K7~pwd8 9j+ۃr:}8'3˚9;61ljpg ^=k?fʗQzIrܨI^AX{늵r9 p;Atv,2~NF70p3؊,('j|0g%cqsAeq>8^-,r7dvǧ'8d>]ʹwZ+^qQ@T=pO?2}b͢W#w\$#L}*d{8 }.F:qJlqu?5݇z ';q3J9:G^M{_.w'2pF}sNHWQD>9Q39`FzwaV7L֜,(랇\zw0# ^x;,TugA"7 vǦ:~5\'xxuBEcSiGQy}?;jN"YF[BǸ'F;XmN09ӡ5m}ϔYcY0p>K0򑎞[z$y|6V*fDG\>^橉nrrHާ :,S'#sV!r|8猰l4tmR$<$r|##<"7_;Z(SbqW{dnIqѻr9ǭ46nH *U H${7 22`GRxJs+VV QXy13CL-spyȪd1) ;ڪA3vI'jO,XفzГ] ʛ?I'zt!B# # g Tza q 34P NdLT 3unV=JN0N0GNO$S1I_MaN[m.#i#Z[oS`=bEO#*89u p +oRznBczrO$$QԒ@x%xxu}6ǜ}{ҬCu5E7 Xa1pG':?37ZڰceGirrدJЄފP'8q\!ލeJJ]oK{k{۸u!G@F${0#n@*)\^F.6mXLbpF n>aw XF_+m,އ smI;t~4$ӄܼzr9QFܩtV#ĀC7+՝pHF <_*Q'OnjzǧZl8 9˥7gl~ICG< H=>E(HzVnerG<@8Zoy<q{ryPG瑎Wv}}/b0<APꏐcOߌ`mF9{O1.@01'OJ.~gҏhLGC~8M gʅ8GR"hLq}?a+[pr}xCFnA1`f,xcsԂ:7)s:`9yGbx8;zz'ҤFxq'_åAz`2#e# 3 g#~":8=ECFisq~Ys<ǷX5\8gx}듹@7`ycǧnQnz4G)sqr~W5*Oq_ʹZݒ2} _˞8jVrdG9֛c8~ÁYLccPʈs`vg_׽Vq<_ǿC5 =?J }Ea/|Ǯ 1Ҟ854z ޼Rc< >SqRPGm'=ۧZƵ0O !點xi*8RrGZ-G=٬2 *,1ӠnЎ+[&ArAHaf^YVKgn&c# EUJާykuc 2FgLA;F)w;~a 7푣ܭRJ,A#qAŭoνШnLzujx;NTઞ2/jYcʱP0䳮 ^H+O50!".vg҄cHN0JǮ>끌>Vߺ v`8>đ9I(@9DS80w78twd6(. n9D>HBOcHc>oq [_&'dxخ#T &˰oseWcgv oqm[|{ŀ:p3Yo2g֗9 GgqIJB;po' q_WYZ!,xX?=^>: kmS߄MЂQݒN98'TH;\}*:H8 H :19Fpq 0gz{OnpyGӱ&w :3u@?xuD nqj ۜ~9^;|Ӹ;pwϯ^wI@>ߡTzz玼qЎ?\曓3Ƿ`8.Td;\uVLյௐFfbwy⾃{C3N0ԌӵuBя4SM5>~Cj| z^:cz544ڱ:ڃz$~USgh䞟2`e55ZeG~d KN+Z4e9S7Ԣ2e 8Oט)k @<:& |CyaɻbWl=@vּPbRKq˫!v%s&ZJ)]N'BSWO׈%r8 2>Ƿ{͇ 8W>"*wyge~W*r;9x&,l+͖<)b%n^pֲi~ecT +p}-u%XE#l70^+l 57in-+ZU]ʟi1&G=W"@p.=15*TrPI$MnҜwI'=OZI<@]`"'Gk?i a$%ܱL1cֽҠӿ%%̫@:ppRV,%e8'{jmitU0NѼw'8 }/\j/wh{d E ]ӥWTz2FNG%v}=FG0sx?Zެ'-*:۶1Hp1n *) mb߸Wqߚ]ZLv%ۼmI#CRƪAVz.8*A92r21O-``Ju@kww Xی9)\-rrkf0`< mFER֓DQbtOLuzԏ$R!YXFO$5^7€' hfG8Ϸ(~}ܶ:ʤ~4RN2)&Y`l&FW,(3FI g}*a?x RysJ:n3KyPs;V{< JQ6|3G<x~o:ǧ^Է`rNpT`@x@YAN$6+nh@0`c'۩Cr?898>^bL HG|:V/[nUJ 7zliz/-p2ӃT.0CPGH$Eb#p}1F8H9z<iLH+q.N33jҶXb6t~R=Y2&. .I P{WؠUQ$bSrFOlw穭XD$Y;!׎kѦcP腬#b)Xt,Վ /.efFjFWlct#!e*d9z+.I•~͞CHF; dc5 0r^cJ7Dʬ*#9ޠf6|I,!Р/M:cPr?ZTqa]8*'DY2ɀXrrF>3(|崅w;|2=8R$%墳圗Fmઐ6\8 c"J :*F;:ֹ¸(͏CHc!)܀y#I&Q`$2yqA$]^<ץ9N/ѸրC}+bx{l! 01a z$UHoB8'PNV0 /'ӥOQΆj6 49P2`$$Fb9*;fz) mێRFxt<w30}y|BH_sSs{/'^CZny: $=L$uvry#VC㎫8z$qO q u8Ċ{#<0A?LT{t=<iŏ0uSy~=*P~3xjq&P^9 } '\qsǷj3'}7u1zԻ98d#i%#sBoz{$Aj3"MX7# ?^zRrvG ЃPA=)-ޅy>V7d dqݪ@Alr}?€bd=[͐r?<}ht$wsrs89@=q9Oo)ŏFO7 ~'T9}\C2H$0:J0 ;zS80I (޿׭d9I`nVdmݞ8ʓ=01ijyp"<3>g ^'u|ʹW'z(>|n]<Xs6zdSkZޥI~_1YVCI8}?:J:cyn_zk5g88?0HBKIьssZ] n39I#}+0e#*Dž\ ֳ~N>ܓ~S+vY@:frEG+zGqM'y-ny_p=i08OYh_(RH8 ye]*pP06WZDh׍$a@9x w øj|' 7/P*qM;HAQo\GeOW1dV+`8ߑu#V:p70T2d7c?Rnbw| Ib}Oe(Zq-\@;8Ꮌg grGQao̵ӎۇ}';'ev'>E\%mIj;@ Hq;3r1=kQu"v|(`H^5S49*a3G$H8#* oL'ފ:;|r8jr\Ӓ2<`W';]9-;sq ±m6L "XF[ ta2IBqSK3>q9\C{tVzјpN0x50[\}-ypzW-=C;ڸswd;1+:I=[Nqϧ55(~EzHl#`y؞؅]R}s޽cMwXn2BԄ7g^}8Vm$ 18>z﷕U|GdW \rߜz`Fyq=1؏d@ ܌ǦjN=rN@נ(鎝{zՁ?6ړAgVr=<kCx9#v;vXݳv! 9??QGoN08Nx^ڳ4[z:dҪ02~ A2OA׀ c=@?F^*˯yZ,F᎜Ϯ?aOtvlhNF p',Nr+u۸ۏdֿ2 pFC y>uu#0@U;8#'jlS.X3v!UF;deOvZb|ˌlc<}>O:$}>?*5C 6 r>[ey0^;ꊛ}vMGFq)^q^gϚ(?>@$r29=:ו\F1Gȯ>c0FiA121רFgf˔ \U9HQ ۴yq&E$ y{di4tv22?e!r3؃t9vpU7 ruoJ fKr$&,9ѲFz{j\ r,T*G@zO;zAl}F%[9@=F.j]r؃cQ܏jWrʆ s;ze)1H9"3E]I-Ӧ1׶z{wF1˜cZ0TyX6w7-OAYz" lp(שңrJ^=kg99 xzf{2sZCCc~9GT8ǐG\pzLO%XܸnWֽGOc<_ZXW,2SpkDqIisT?~q[$0yyU=uTsVV32}*lAӰ8>HF>bqz~=bpѺ?O$RqUsscNF02F=Z)r3gj#$Fq?Jɣhp0G9p}-'<O9?OZc.O;G=Oʚ u'1(?N3zqMnN(<~֮ qzH8e=ah ہ0ӟzox=zD4Dc=z}@<㜟GAקӭV18-1yISLd*O 09?yC]TcG垝ϧ&3Wn61-˨|v?*9=:^Ϊ[AJ6jE`<8wm[roϵq^&}ƒv֪^Cv]񞻯;4ojJ" It fRnnði4B9}l|\CpN:̫ہS̼N:TjUK>` O(soS [˫xn Q&a)c|=2&ye<vpcȷo bq9+Τ?8oV GA{zR3tԆBLo%v ޵nӭ4$kZ7p $KXȆY)D}ۆSˮRI>?2$8CwpYFܞ08+So=qLem5?q<?NHNx=0N89)_6I*=B3.s@O{da['pWnO#$ǧ uu#Ӵ;GCzצi©<#\s8^^]xK[6N0#,GOe=|k- v_gH9zWeٞF'#G|#,`qx㞔*I. X)s>++Dy\O^ZE{sR$ 4jht ͮ`#Ey2vߨm<\{0h܅EI2T22n0 p6:Y'q>_Z*g _ R:q)ňڿ(=:HIR0$B G~ce/g_jM,k$ sBрb+N;Ϸ253=SH)E O\fιvh@dqgLv*j V\2syJw/KpIӚ5UfBmVI'Jr2q򨕎2s1\9 :j!C\ n}89*@V.<ooG/gҳ*(ó=+玵1؇pn}{4$9c8V"{t-.7M!Cֳ) HRpĨ=rjd\Lvq) ?CFjqG)n3i?)N 9%Oq9:f{=Dټ[ZW&GVO c'" LKi!İwFn#Өw\Aa0A(Xd篪_3hNZ8b:U3ܯszApZM;m .W\֟y}r08^!F R0339)-;U~-/{*b̠?u"?,lFPn W=QZܜd9>g<0;Tt=L7q20mPpI7wLm!GfԁҟbXю!(svt90}85B{ ay8=j$#۴b<5,lRE#$ rskie A9Uh->`@tzգK+>qWS;䎤b70C"d+2$1=rNG3H Мl{psJ͐3sP'=)cwW<N;[-ѱ9YUD@p:e is(c2&nB8 K=n"ƯAFp =0p:T>6skjrܱXR yR6,V`=7o5i}F"B%a)n`yimrǒU79_³ߩt/ͷfd,7!rPmWlcSh>ٮb OpdH%!>56kixwNi/lJ6oQ*8Y} cfVpF I>O +P'$ یrKVGLWat}7 r%h.^@AP`xCsdmYwK d,<3uO1 9S\Ǹe.vcjV'PIN~bLt3mN# nS!Ewh"Oo,dѡ{[o %Dp8#cmi%r[fhJ2\/Ccwز)вHUJW`#L|5k Y#,Ŋy}ۂKqsGuF#8Gy(lW׌p1LjgLcO~sNI_nzt V`{=Ozcj1Ӷ=q*sGR8=r~@7qdp3}>)O7Bu@{q@>QN8>S{,`s8Rvyà8+r '0{ 9 طNqӽ;dsP64~l:wq7^b:㏗x9^NO_zp@d{U/qvqf#^xtsH4~8;x~GᎤsddgӃʓ^z8 H~R$h1cI◨=_}ۯNJ^;)L1ғy1JXW]iY6_Wkhg(WO_{zmEy$|y'6vy^s_xb<3rT סMlrJ3Nǃ2\Hȥ` 3kt|H3%M(=NFU==>ϵtfP 6 1?fs)rO !N7OW#H!r63=e&L)lCʛ{8/=;]hk[u)EbMItZxS*\eNGp}}լ.n"6TEy87;J_2=\=4^620?>ӗ%ߙc8~e*r%O4JeM7|h3#6=^Sy.@ېx`9'qT̖1mc($nNzҸ@r@+x:cz ܜ$}=:vjNBwV5tYQBrQԥ@%Y2=LiF7g1zbFr %5''i͎PĐ~k.wq `~]aM֍YdA>eS3)sFMkxU-[Xoo:;*}1Oj[q˽"#k-􋟴O%.l0Ǽ_KAG`)K@$+;)~]:"Ț%Lnl)^zbꑆ.rN%ۗF:"č5F*hYF:q-r=j-`h~TRHI8JI+|ذI5&W_qKnF*Gs uDt@vRC=]ɢhdc*wqЩ8=zf 0Hn@.qZ]lOȔ|'GhiQ,MaGg54x?ǎFlqN1خ[k`!1W$6?a~FU8!3SL#9!ފ=A= kdiJ$r#( <'pjJŲP3۟S֥P}xQ+bP0A#Bysj+C,l_ql3O0VcݎMpv!qzFP. n~K )@p1Hd=O^ixܼ 1$@'ZR KgS kԅppJ7[ckn8 {4 Ёͼ1qǿCSݏn tvҘ!,b6p-ۜOBG&ʐq{_ZX9l6N$/H'.U`~(ޛ&` .Gg<r' y$<Ak]>B" eFO{cҥh{|lL1$w^ơ+x?6 r}!L )6w]ĜԘy9Q^=YO0 sWT&, ok4xxڻv}TgTQ:swײ<zeX1;c8ۚB#@T{RL>[$wsZ\ <3`2!-92>oN4z3vcόRLvХ6CHx}۔a`; øRx cwV䊥$`9^9N eOpC?>kKb Yv|;:zc\.>] 0"cD۳ @$g=Q2"m@ %9)7{lۺpy m=Uwr9 99߱A$ }ޘұ(qHdcB0U%sCnqܥNwNxTpNNOιldAⅰ#rOB¨`x-'r3@0)68=F'k@UrSk3Wm r*diY$x ݅ݻv;'! `{* 0kAcLY>R8 ujʧr̹ )9G֪YA@z0NsB3GmcJ3M8AcNkz9aÏwӖ˹NqFX2T Q}v=}2w&XeX1yAOc"Gg 7ofimáAWehm,x^8ƒN1SQW|N_ X=>JÊvC 8f'`+ƯͩGDNќ瞝O֟w>Sx^<~b@q8=4ܜ#`{q<4!'n:~$dqaq돘gs2 {fy㌜P3PFNpI9oOA1~j_3 rrS,,g,NczA'o$z39"ʻtr=s$,} 1Z&c$J$^p>l=zj:n2I<Lɡf3zcJpU8ʜ*30=XXI.3Gz..R@ 2' #4\,472sbs;0j<`Q*r\ ^{{ |zqYz"Ȥ9zķjHZPڅMq-fm7SE:!Ja׽dۙ[;30WnH$`;ppHXE8m\>R=GJ)|{;{WM6DM&tH$oy?*Ns,G^xIAmH 1F s q5_Ib n0~l)tc1β Z0$i:1;@VsK #ڀg,gm=I=x:q֝pN$gj8 xȨ5f8=zu8Be?xAkRQ1'1'nb9Jo({!wf@o}qU9dcIbLy8``|Ē2GA-(Z`6=.9 ܎y.0~Q ZXĔ?=B3H#g8qq;ԕܞ=ϭO`r 27pR; vJFz1=p?j^82v(#p㧵W<2n֤_sKFUzU [me(~Hv{)㟺0~3ݎzt|l\zI #tpG r}V{F$Q~sڠ9:?w#XMTJm1Ԟu[` Nt*?t˄lČ10_>NbN2w|Ď=첈r3+ħ nfE`2l?x\aZm73ܴ˔Mgg'-oqg =^&Khu}`m`3O-J_I'cL`93*只fXjnu!=Br. c'$#?Z-{IN6V0ϼsOǽV2dp8V c3@dݜ^߯N+^ N;F ބy%ʪylւI7͏cmrfM^ e=I\qA>]9Px9y棚'M\1rs=ϥ?jj1zU9)M8펽ҡ3 ~c:b9F2a*xU V=~2AG6( Hn2$o9 t7#Q}={Wv,zGgo %z?ǯQOwU :qnClϢ=Sd*+KGB9'Ϸ;|B 8azי%cӋ5l1o7QvqnG{&*ښF{8'#ۦEvpy 9'e+ϟSt:;`>?up#G>q|~|WYݝVx v' rwvϰ{TqA1뜌!c=s5`lZ rFy_#F{vN@<|z5 D`q?_Ǧ}},c9XB91<ZSu- ׌rsq׵X Ƕp3?\wQr,G'GZRxB⩱qzs=Fxzszc-ȴ68]rI ԯ%7f8;730``ty/#jXh0*A|cqb]jgd6 rr"ruIhsc5 2!޸;L>dxc2s^^ilt$Gyֺ㲿Cqwv9SAմYKC-Ͱ,rAzsP߈tyDyu wmnc ;ȼNxozkGM ^uf.3 H((1Q$6Vo4bKq" "v q֎Z R_q^%y]"ŷ*>w !$';[%Ɵ_$h2F,R>I'n)kضxImJhυ-ՑBBs)[k^oඛIG voqM=wsҫ$~E|D3Ιwa5H8$=(+=zO0ƨG@8r:tqN1V~+nDM^ g3 d2 7~Kw6;kˋ2MbZ_v)98ӽ1=ˌ;#1_سoi7ɖ??2# #=+oU4(4MM6{cURp-Ч""`+"Lr%7K)L們KWW39_#TTB&gFvi m ʧ#=r9piQ Yo>ߧISmwmU\<Ոl~\\*;w I"%5RML3&F($lq֟a8E¶r2ݕyb1i(9ltwV1i h>_&iy@<.dV<*9vLd1V_>x'0$,2>((тH\H@.2wrľbM;ItɶyV` '8S !*CTFY K4rԫ>ї f nB''1UΞ$DI[mʮ7m/zJ9]&4O)fNs1?†<9JسJFl6*Y[ G\IrOCB.%vvg_ecӁRå,rL Js7$nօgs"(EPJ`k16\pW#j5%,Ιky ߉%Y#e3` $)9[h7p7,D~DQpp19;VQ~)`fqe F<ۀ9r:BP ͜ dgkHv;2}c{G1#%±]H&eyUU)!}@IJ~pЕL`{z=/K7v5- M=7\ݨqMDyXצ.TȢ2%l .I&DLZiI]*#:7y0qv6+Y6ްF o0:؎9(#M=U( R-|̬':$RmwP Na6T):!JH<[C-#W2A22vO;Ilndr 6:d OGRV۶l+s|A=}:տ?N :'mwTg`႕ۡuRy$6[ wuYhk`rz~&Cq\[\cOS&?:빱\U?OnG8?7'>c8{q(C2B'ߥBz^,@G<犁N0S {RcEr;>>{QM- -x qOz Ƕy펀^#;08ǷCb;IӞO<ZHu8gޟ^4%1igv=9>/ϸ!Լ*r{rA HF'*z?ҎcXGCS1ݎ1Inv=;``*fRj|,+''w7Jy9=}8zXv>_yW\Xn0e _ W6 }fHӳ-~RϏgʧZ#,}#!S~4<2 yUwd(;H' uK<'H#߯z5qd qq=5Q[,3s$\$9,g!R1zkIe_" #O֠P˕l?neKDh|DΌv9sX@rl{?A yO'FzXr<+.=z0sDJ{q_UA1iKm ;~R*4FHyzs8< `P.ê28'vQ7q1n]q<wZ # 2zd8j-JmGpjj t+4nI2 9Gb5&;·Sn4Sn]1:9*AG`:nq}\wVCU~涤8>N @{Œs^crV8ܨ\<𨉲F*i]\s+g=d/bGm/sO6`Q %8#=O#1fm#p}k X9n H{#' qH'|PW3Z] w6b:H!CxR _M~i #7vOA3sd^}c2: ?.dA=9:U61,sCG Ĺ ë:zV岓䪓yjNތƪJwT<@'=ްn@;8MϧnMsB`p'֛ؖdb+1#HFG_Ƣ1lR©tvB!PN Ȧ>]АѝoaK @0wg'ylŹzWR}-o#E $g_!BK~g!yu9$(Agʸd*`aQ"vNW(pMN$BҔ$J2hC|QvチқqO7 P1{ҥZ8B]ecLg{rX29W㸑!fCof;p=ZD2ܲwv+IJ;VL.6ne<7ӓJq'зl2ɐ zz`0p!)F 8=<(Ii*1KUP1?{#ߊzNanek{ɑ&167Հ1Er5"Z%砤>^]n0"s0:W%aXIgbWv%8J* $|>7m,R\󂃀NHE}),sۿaez|י?3gV$ t\F21ל5#"#1OPO< tzv8K^c0N9QӟM\{u ߓp1g'V?>@H^=sHcT~d3?;=3 B#u$rCv#S$8<ϧ|Q;cg`q?#'=}34~c8v_4d#(ԁFqz < JN?? @)q1qO`@zg20;s@3H8^iu{S}GAGjpw##{„8=Q`_ւ={3נq&zvGGA >9y(sHBs}9 x׹2yT:8HhB:B~is89 CI83}udg167}/z Y^p@u@W;GX$6s(FpMqQN5O=Z:#'+~ڷ/xprӐOZo.eA(]~<sF[RשvWBH@݆OrIV*xY@GDZ䫖lgn8'#ޕw4MĒIpz`"9uқY_B$˖;pдr>x'C湟h3_xVKL͹3滀дn1 ׯ}W<*Uf|Pq5ڳeK $5${IHemo~JǔZ9TdoVݫUSVOM:[sXxEME%8=wDd~#Km[*vB-YT/$$x[L\iZY&ӨeVd:t=~HʭhЦ/^#x ׃cлxy$vIH׵xoR~[!a'}jPI G?O KlF/K8eT#3"Ql8cǥ.pcW< ÃGRٶT FqWtl`r8$ l Wy)fp'ǜ~4-P< 8~r\j1 '<84A^dR>*#pg8Hbpv  KvVl8l={S}lpO@'<Րc|e@'~{s8n?pBc"^\_#~ +nFܪ8 nzY2nA1>s^5⭵(DJ e ,*\qjhhI}w s*ȓ82s> i>9\FnXsxn {WA2;vڬ'U91$,O# :L"$B(M$c5*g$cj& x噎0@sz' ;'>ˢ Aaמ٨I!b~9QϯWI ?0 D1b@:=zF7 m1lkK1nzd`uֆc+>O{7=9-sjb 9L<zw @DNOrO$ u8Kߩ eyϦG;q9lt7HϯZ0͎[85,A 3|ʹT!TҢ,)lHđ|`g9k6[3HQ±$pXOoN[89%Fu E ?Iq֭DWU{ҪKb޽K 9<'RsF:=? r?0)/|v<w> NqǥY '$HjV#qY>\Y`cc>xeJB7}q>=;T`|?6l 2A%zZ8eNUDV:횈?6x)q@#& (9V-ngN* <8 P72!e=kVٶ7l6W6,H<SZ!. O,e1C\ے[9 9=xϯ41lGqޚ[oen@8'rl{cSEV';W=43AHpq3szSA@ wm9=ntmqJG# v|Ӹ7M3ڛARwFq }gu>@dv-29gU֞SCzb2v'?\zy/y|v7ۧo_ǭCp[''͟`ЊnCgspHj>rrzg=9(!}ퟔ8a8y dSU#1'֎ar|'8A#Ӹu=P}N7p2N? k8<w'=O3drG|9+' acYTQ<P lof W-צG|]&ȐE Ah.i]="yr$V Xv{v\#;Pnq޽9F0ρF-FO%Oː=ѺR~R%Fa!;ciM~dɏi.2cL / ~G5S枤RXsv^~T J.FIROS+V^]Na Ħ3Ǩ!v2$``y^yyOn!8{<=15*b=+9Qds:^F#hB?1?(H;\h%$bp\7xcvFr5]j a`r1SY<;rH`$zqI'O${gvp+ВAZWQZX'8m@OzvA'pW=9RZ"嶆JDFORAUO56O-6=:&y=A` A?*RT,2xӥ+6O AΤd ~O ;!UC)\ ;֔DI; pF9Fra|^sG=ZQϵݐn_8`hԿ2Ѻ`/ e-ff0&I =RzN.$vpKrp8Pt9sSm +9*=7F=;6dnC E| 0ӟLW$>3_+ڗ^K1`YHc|`l8sH#+:Q[r=ˑ 6G. v)#M26CFplh'LD69%A W#>͂x|7_3uzr?ǥF6䎥~~c/+%LZDF 0I$sg=3ҹ^M*m_ Zz&ӀR?\L''g#h1`x9 SAf=8sp ;%WvsFw۸?ơ@pɐ)==N3E%c>G#h VceKd8#$9Ҥ}*@써=qU߆l0p}MCܥ*%X 88}lia2zZDLyQ<#'qf2`ʅF’U6{ޔ尣ƿ(s19)N0 Rw}=1ϻf Ku00{: `{=sIo>:WM3yq`|tlsPnob3 ֦D׾[#98%8`uO8&JܵĞAKwc}qS'6Ԝqqjx<u@> ,Iny#ziHF +)qN}9G˟w/\\ .%G8>MSx#u>S,F~R~o*H9H9oָdbH?)Uy2r[{:cZ,ȟ$gnݻyvQ 򓜱 ێ1v7/+񓸜Ѓc~J1RI):n쩯CϮGo(~퓜zfm:#*t['sدw Zҵ'Nߞ7Iꤞx/ֺHmez|_{'jN;9Dn<YNW=>V/WxkV)v@lw稡B^U|͎OɎ?zU2O~ˊnn8=N9 .@#NN*,#?˴q'Z~E v'И45ہds/`;v1O'ŸNi\} ,$`IAJ1F~=0=E>]Erj(rbAX׿7IBnvZ*}Itbuܹ߰"n!#nr ͎#RA$S e͐zq?JV:bm'7 F202FIԃ^b̬Cc*xcGPY#M9+n@8$p@˨#dYwP;>Sv~z xhH=;s1Ӷz~2:,;c҆9GNqYתs'ad' yH?}2Jڙ2;gHN3O^Fqbnz\r6"$ 09>Ş\ F1n7|9uIa=Qaqx83{`vF XkSeq0w _:l,dM:G8uӚq֣:(.yWr$|y?lC`\WR7Ҵc2ul8={Z٤M$˘av7,xE~,✭rq:$h$.Up~BFzS$ƗS:D' e0r`ZNWvf$ d w 9<֪6jڻ]X^%ޡm+2E<0\ߪ lt5nlu+ #z`W\QףG^뵿;u_Wq>>SR@]R3Ҽo3&[tJ3$Ѫ0a 1QQRy\Ȋo*Ru2, ڲeͼK 8,~^ nϽd1Ag_é[ApWWRq4WdfX8%XF1m'cURnyɧfE2t3 C`m$~o7V7p\3M, ,N;u#i̯R{K+!9A f IFdeL|8<zW~t/NbhM: 6gxd >nN3X0j!, rQ<[KϮi6w=!2vO{?{y6-u,3ڸu>hb(NGnJ1oE] ']Zx EҮ'ՆF9⣐N%O9%Tǽ>WN/[rWz+ڑ觠u>5!Q B)ar486E*~Ϩܑm1H# ? Zbbdc#NHt^:, 9$(zֻ+'PV^$|<}0VN+Jp&nC <<+8C{~9N_k} ߑL.=5ְDsμaK͝Oj8iH &w?/l!z ~7zGv|~_#eB#[8T(RU?v.Z&Gɥ.2撎E&ޚSfh`gx" b)u`732J]K{_Ǧ,E$~rvӡpQ4}QJ&[J6U{>Fy-wL n4r&Ȳ^V22B#k|=˟6U0܋x|*d=zkhR7Vq9w^HtKXfpH'nr8x8|yGma-p>W ;}`%, G˂߯cUxv`sa#93/A3HH? 'TR h+ur ˩ԶmB+}u< xGěi͒$*'0NV'y'YɈX}qb,8AV|@;qz~y; x*6021\H zjA9\7˹ssԃ$njq8<G\qXX9-#j!aN'uc'LH\L>z#7COOqDef7-ߐHNyʌ۞=G#kj2/L9?ЫZ.n)#qT:RcÞ둏ƳNm͡RrdV@,q>(qnlq7p3QtSZ[9z%*Ǟ}`6zJ7>xrNwoƽ^7sg 2F03޴#Ψ"v898 ^j?.ޠ{qsӃ֞3H玽A @'Ǡ%s۰aq=@i0[);mEoqG\ާ|.Gv8FP1>qG޸ׇw+qG~#ߵxX==O=s*uwz8:}NȐa@OT{ [5HLO+rm~̒qzN#cI .x@U@G>ԙtAO9pq]u G#{g5auG㣫!5w2ݸ©DW 0[%f]I?yx,ҡ|F01mgTu.;#єL);hrm~53بYp'iwuVBCG7t sp121e109<_ygGB@E`9*{ӡ4D~ Wng(ĮP0y5}e O'}:V[Xuy{x3x lEye+2U@z{g>15Z#ԯRw1 k : ßUMyg,؏oliZtQ.G+$`)}=+ZKv3tr?ÎeNfb{W"9X 2Dž,YI$ҝ3$s|D:зhf59r  8F*˜UR x;U&@ 2Czҵ~2c# fa}zSdN :/$p=F: 1mPel~;Қqm<džS !mwXԓETƌA dǩ%2y4s\(28p>zTcZq;oY>ƣQf*Dߘ/Z(t(Ȩ?;T7j[|1؄X}̎IR1s2H#1צi!y遌v== #;6HʞI,1njywn%U9 X8Ϸ9ƀݡ%g0`@˼ FBr!JCξӵlpO`] X).îa]꼉8]Zh<rGMF@ܨ$ t[CHDː2Wžݢ#%ןh.#$m5!_P>PѦBW?yx]|μ"t@NL=pF>H`VcvyAL#G\0 gۏLU#8\_O?w~t9~P.3FqtS~z恉y\۠>n0;Gs8S=33u#9׹g9N샏*N?h@'$ CǷCL8jL>sfǡ'?JcӠ <=} <ϡ&=_Q֤zu^3F2yZl:0N=ޙt8: 3`۞٤>1 z۳(ē_\t8Ru8O$0w2y=E<y? 퍼=Rpp<BaI RIap={fcWTo|zq隨 WysƑ[ʹ,0Caݏqp񵼬y_ji#Vxv+=~]s’%'G@}潚j Rru Z5Px* 7,EwbspzMt_V. ~V,KہVwHqȾ^#< [-jwvroYҠG-7g${WuccQ2̫2lV8aM_<|uR:O u2r1ީM7XmGzjo=NHuHIťD +G8nWBXZAQ ^xخǒ1V~qu}VrznϙJ\\b:3ZZN%"ܳEBnb1R|>$Jx O}|U4",a\z$|[zO1\9Cl$'W>dYcb+ 0q/M+"gKNky2'J-|YH,)w}4i"mo$u9u%,`rmb:*y. O\֡Kp6`#)'IGMߡjٲ#܍X+3`0zIw0 ~M9%/*^6kxyބ.!Xr*;Y!Q tM&*P qN:6& d8 ()u^וZ?ʛb@Wwn'ڛCyH2alqqWgLm)+;T'Rc xy1w 9sh̻p/|ߠH`.W tcB8PwdsϯB}U!00vϯ^i;`݂X`u?w֓BU"OFc x7M(] Cg9$)_aI>lwm99sR!0Q uǡh?P†6~b18<';@o A$!eT;}嗞'FGojC02IQKBe2X(aBzBFϘAR?>1B{\g O#=:]7cYԅ?wK"e\|9Ž8Ml8d(#=1Э7Td(^F98d櫧&YF0#' ;Ty\m<~>#K[8@8\w8) _oZ(W,U# @GlrqRƀ rpۜ4/IX{rTg;ORr\n ӥHX[Lv"^?@l?n)GY [2ʷ q SNA$+7-'Ȯr4<2Xᕋ 6yR8~ϿxrX:8^sB:>fyjKͲpnjd/#f vF us ;{1qb-؎&FNb\n={Tߔ!<.@(kN o?)9+؜g מ >? g FIR"ax n$zkB\A; q~܄b8 W$'"0Sܶ2s[3&۰\̿oFZPnΠ9EU6$$XH!$.2@^O=!d#^U@w3(';Ix߂8|WK|ӊZ9fcF}9*p7I zzVѻ3x;H l \rzm!Ig4IXMł;O`Xt'JųhF_,nAJ9>fRUOr7^Hנ,_z!W##.lTA8rHf<1r}h.0WtS$,i`r _8ܓ})Ա8KIpT<`G.AcN̯OӮGZD-lQF2 Q$2Ig'J 01=8ӊԌa9mʘyM#,,UP9\w2:W+999ĮTmUnFK7*Ϧqҟ@DAxeP c$  Ȥ'LqnA$~=.cAlpBuvsR?xO;3INwng;=><`,'rFafu:+n…Xsk'qӭvv[`#jHd"#;OM:վ̏p1JsT^c쨛Wbp J1A@n<&Q՛ŐRGQ0ycqx9565L*G8֘}#`WiQ%$>gW[z} RN}FFqԃ :09ryǨ'YA0N:ǡldt$Žby0GQҤi0w^G4 埑r2giO?8KԒ_U? D <9o?>dIH'+n21x= jɷ9 'ҥVb̘xۊ9qy%x$s ;=_#=Rc@uZV(;H<[UeQ>v<m={gZZ"r7 P'F'qUDVI(n~nF =RF*?;8R#AvnGW(lr-Iy'S99,T6sgyTx@@b2XI+%uN:6`;\y$tW$CnfMd sI{GjgcX`d-́޳*{1 =F=Y؀'v8u*nA@r{TR.< J>BOJB9' Cc\%1F{~)\ʂOשC%'* 'crp7mPOQZZy'rH9Sc#w}~gܞ}*m ѸPvԎy#.$c$|95-M'$>mt=;ҹ6!iy Aey GOo_jiKAх. :U -vF;M j] r][yǗ6sɩĭ'vp' a#c'ic n| W16"]BKq^8QsַPtap$F@#xv~S g}zvlnHWn:NOC'~UNSqڤ?8֎ZPX+.$)<{U,c-NPsQKbup9fqӾ0;;*烍($Aq'A?Ts?.Aݎ1~=(I`w?&{zwҨIPDk(A;tf$tݻWc1zsҡ'.wvNzܯ@3A* ˀI¥Rg}N9v'ȪӅNz+Hn9s9~jNy\d8ߕ9l8tP^s^y<鞵f\ 999=؎q\s^74[w vHpA98s0##ḑ!Ͻt9nC űǽ@ޣ#9㜟jgԙF@N< F =Œt `|pzprsғ\ey9?6$DFUB!^I٘yǚ"6u8nJapO1J; c${M~giCHU^E^y_Y|2;.gr߭&"ycҴ$1` d3e9}N@ޕepHc߶s=kDHYJK7d9Py'l r9A#ۓ֩2'Ig~@a'ijSʜGQrI6 xz\dcj&>B6`3Ӯj'jE'wB_ '?_Zgy?usj]I 91Q~[ ^۠9ݗX6~m ӎ{o@Ti>a`}ۏCބ~nϯ\{ҹV霌m'Ayޙ6i$/r9TR8qr7o-[W LwXFF.x9SwZE.1' 08݌$+r:->S};sIL* #8 szW#D]=(pH rWb~ #=8wO{טd)1Wվx zsxjGLF7݀q۷?Jx's`#'"={z{u2\q޳hi= n#Rr1O$>F gp5]8 ;z \T4ZdeHzlPps813GFz'$G+9G _T@Ď<҉1ps<k؆򧸛8pzp@=L>oz}hf7Ӄg%>Q93ڀIg9?FE; Ol_z&{~߇Jބ Agql{tR|voZa\`F1S\F9 :ۥIp~Sտ*cwS/mNzrk3)S9Lcԧc>&:}nhb>S1_։j=mDrKj$b#FcޣXZ4GYuke;&|+i1]cdc`pF=k?Kn${F<q#=)HI|*^vǠv'k6W̑$[z<玂 {D' 6\#* 9WԖI.%7ɶRʋ%H뎂C?-)}jڽ6+d';^N26ީJ7UFsON1?Z:4'GgٞF23yBw7*h4 4 RLaxkwHNOY]BqOVHմl%fq?=v}-G%x]H1Շ9Qec%ؐq#'9z_pg{tKR\ <8e#^kMN76GszǕ۹ϯSR. v9>lg; uϩFmjkO4II(vRzC)r`uT U%][$FF0 /c\D>ʳWlOXLFs(p`qg;K:k} jXCcmJ>Nٶy`t˨^ȡXbV/) 4DsqMe婃.v:4Xq)Xg]4X廒 $j6w}eFFr-#&i2O\UDDCm Uf^qqSz[SWݖx}~qX mns!2m99 [kv,1ly 9OBh;vkxGl.9I:?Ja+`,s3ޭY!jƒse[@y/ $gh ٕRv:9+_/+ZgKK.3p=qŖOQ%EudRvw՘z7iv[.w$洴s1ډI\Hf1ӜJ Y}Mkkw75ņ- ˏ >i V-F8vr!Cnu$d=N1tƮo39Cmٙ1..#|Sqv#L*瀾o f{˛ASsp ˙ FG51R(Oz;X婃Zr$uV)jߨс,ڼ g,z7̳Cg J4,&Q,of!=%Qy蠺u/IHiܯ"h6m# {[ֳix[L4If+j~#DXi r9$d'k!@\իqr۔%eo)'IJqVjP[K`1I&8'#U$,)aU bּLC|]jt7! ]q$=O,#+G|Uu'q"pG9So(y8 9U ' qV 0N6$sאyR79' qӁ^ lfŔ :u#z*wR2G x{:}*Ћjf; qvp 'ۓ&@ }nUp1ܓH#91ޠy'@pd(VL~c$$glV| %ӷ>&tARaӊq=/v> (p 6y{g85R+mFyiXf:CMXpszy8#KMI 9=A=>q۱'uӋ?}qۜP489G\O뎕 WЮ=zg{gJ q60{Ұs80sչcqǠWMhy꣜[9vJ1qF8l_lWDQؼQ#8gi^00劫 p:#{Tx_T.FX˞=F{{~TXЎ'ߧ(뜑y窏U7oR=Wv8e"zaH#UwV ~ }GpS_ޒ`z>SH?<bq>njcwbyQwRB`﵇v. <8GQIhѿ`cFr#o:wwcWNfXcRsӌ:.rt?ʼn#9_[%cK`䲿#.C/@k#qn6v7ð'zi4xHO̠`$uozSA{: 9aOiG%NH~c=!q$> @\ n#J}p%Y\* 2=pqɤD xp_nw;PϠEeabKC9,NHMvznc-gpd`r8=z//#1I Y ,621Dhk6LlQ#n@ Lef%8ۈeL AU븐5*$:#aA(< yWN\eXlt O蚎ڽ6wdR#5ĎЅo uy"9RC2~ ݗqU~nej{K$sr88+`2͍p@'JKsV2P',#i$8U;u<}9C֛@-3ʩ d9'J+cFq2*IZq:B|́xN9'Z_SLcq3wݴLG؋4 T(:mQ |_9';W$}Us7O$w#mDZjATbRN9#WiAeLwCCpA_7tP0 w+rN@9B&V3ŇQӐ3V.㴶;yL7s͓:jz')*XXG,v|$ݝ1؎IGU)+ہґ*.F`a(cgfFU(1z;TX2yQL}86`Vbz :{ehMRF[Lp,Ӕ^5\<{[{_9ib[wK$`eGD$ `%@ ( vq}]I 73 G}FI8XV[ rWY>彉i nL_jڹBjz֒Jv3!!=GDw=\ksfQ@bc9ҳɶD,Ŋi29翯N'y~X usLgQN{J:#?w8}:SWy'<89ï~hXRJHH=rw),(#=ڔdyF֋ jKJ|l%ShfVI q<Զ[H0w*Fj3;ū PH،嶉 P=`<5?=*w@JzR/Pmu3|6rP3X涴*T>ۆgR793fW;YT2.0p 鐸#la Ίv}>i[c%ݖEʡ@f 7! gy_&rNHʼ6},H1ޯm_=c*HGq ns^&7OMGjZIop%;C6ņ9_Cxo[L@# Ay5vil}ik=RAW Qׯj˦TN$br"IJ ?}N+MO6˹ ʨ\1Mn'<׫C&BVIRi.Nw0q_IGcܓݿRƧxĖB}(n+'lCb{xTTe?X=>J-/]O2I3>"C :Mܛd"–ݒ G_m}mbyڪ?2瓒8{~Z鶺COo]_NB¢2wbNᤦJiu=@-RƙVIoWF-bhYܷj呢r`?y$hqC)"Yһ>l2e:3Jыh&+D.qGSUxҴTuvچNc,>i6JK]]?}ܒ0yBQ\44n>f]XE(e) c Y>˪Z\ZA~e( >}w{J & E'b$O N[2*ByWEmD: B஋t{`˄p#e~q׷Cv~D(4ߙyj O2F6 (3*EW2;S20ǧ=(rRd@$u 7ndr2yڙ a:~ZX_;|1+9'p9ed38 Q'޿Z%KM=Đysflm@aqל?u{8݂aw`? D")Վ\&3{R]qAs 䲰UTv3JTFvhԏjCm'&F|Yn==(TvdSMrX 2〧;^7n;ՠ$U [$9㸩\kݎX> ,[7@se@PwrAwҗAɱ;I`aϱE2Ee&][vv?=C$'+ m2F *R2)w.|wnj/ȶY$9bFy~㊨஧v@eLSxp=;Q*|$C `[ׯZS+g%q${h'~lwWj\g3C؞ |{=E.Npn^$UW( WD^+`&|/RN+TVr988~`}2a:!$^XN.?kVr8]qXHͻ Ե'88 N Ӆ~3~bq a{^n0yassҚ~[ :r8۽0.y/;vIa9%vv䌑랂1bNO8#bORPv93RYNz8:c #l9w*$q`W<~*~RX@;@'ecNrp@둀1ըS^!^s@8c n9O@Xep1szkf3I1r88<6jz |H?(gmCxq*GU`FyuH`@Cuuǿ~m-*-Ү3GE}m-pV ) 披~W%g?:?I=F{3yrZh ;ã|Þ@;Tf<'$:m8]*My䜞s=Fcn8,1}ym:NzzdQa8'=jMqӟQQpx7sW=H22p0ObyH8 ޘq@ ##?,Oxp`yߏaSc3: #6x'8zj$÷>R94䜒9x 'pS8=A$t>7TҕƢ)=89yvRw/ g1H&rs8$<3~#|=*Q/lsgcW0r=N}siF=H|IORY2A=*@<ѱ'~0 c ֥p{t<C.rNs` 3G0(&qxm99{W+I1F~ОcZ~5>qLpy*p@c۴>+a{/,vp}1[fՓ8w|U8 Ns)_vTA^Zy6q$r{zO}v[T)-ڠUd븮y8yP>"i±ݵ\)|?PpA~QLuJD̹J;HGnsb ]JfhPly`c>ޕ]O Ie9v[@)09z{p0,yg{p ~۳zrF0O#銟/1Xny㎫ DbyXzQ(p N w# =Wp AlhNyTp#/|[n<6#=NWFw~8"-8C=z2zT  ^g)SZnr;PpA^N8ոݐ>N$N̠`?x8`A we&irJNV\r~ 6MB0 >szY9lrW$sR!S(3 ;` y\=3^č;gwAАc<vh+Я n'[,vF9GBr@18:mJU]#CW'U*P `$wzcc@G yE=pA0>S1n<qus wt,9FF8湣\)ʟFs9SzRV\CPŹF$)^y&re[2'IX.c#<ӟ*$l.1<snA (8;: g3A%O{AV;qSG,J U$"SFިFtYwf`cs"nwt!OzUy%? 0 <{Ȩ{V!!Hq뚨NM&Rg0+b20sۊ;q~q!`@N~rI|˽M yՉ`h^uU-P#@qco=韦s\mȺ8ʒUFd˲G8Vg# [-wC9;U~c$'=S=kfcԷ1pIvcv@;l`aǿ?E9PqD=j.7gl=*lfY"b> TZ;s\drتg[A\@Rp~^A9 !ṉR,~g?O1'@F>e 9_`?#kh27䟼WۥZLINq[c9 Я#?sU'=qBg=|@VxoH]xa1P6'z};*@z1SzFmߩ'O|d1=Tu݅ۮ9|Ғ)x.KvT @1=w4L# q{zg_!;{tҸ MScqF2'TSH,2@qc(h\^xyw]pU_n #~fz)KβY~ҰݸShrW'%rzRdq~1'@rIҎlcw,ğnqozivw{뎼qQKx l@pVd8ܼ`|VFM#Kn# B1O\یL: +e8~݇8 |:c 9FTp]2 O,w۷$j\> 8 ڒ(qug#=yR F`Cއ ,{۷8# rۥi؍xH8 RMMFWdg $c'ʱ;hOsO#ӱ%@ z@/%UWe8<`I-Cz*JIgJ_+R)v#7 oa0$g@=>>É$u`rNx VufRm#;p$'ؤ&8Yl.X_P -^44>90p 1 (&݌dMqII[n)+cnN+ .>:޸=P=.@IRN:`{z88#+{3VJ(yԁW5BvG˂?ӯ}hacr >n:?\] 8Ob{~Cֹk?t褵7\[3y~'F z*k#҃Зn#${JB#q2~Q]Șg_(9?U?:YM88sҡ`sqߐF;f䋸\gҐNМN?ޚBy猒9gH#H =W1wvCF9qFG<PzڭȋA~V"0`Fn ux~1|?TWWVuo"_>}#(墳Z|ςlm{[ Ks4[L뜬㒵Q+\8ApS޽<=e9jב&U#dH 8TpBsdmt6LѲA%{?7l5Ͷ\2I#$y&ʖ LUu%Dm hgϙcq֩Byuoy 8|0"7q َu(h@ިH8 uȨmظg$IDXJ*,BIk&ϕnAw-=V;KE[/#4pf۴d?0V/y@1ֽHW*N_}ߙsKɷH'ҹ )9T!qZwnsC(UbجpOaIq"m_1l<{_Fm[蝒ĂwFWxDGyu㎽(U4[CNEM1*HT|v]:83ZVZV1eFE 8t#?e}-m*l(7ĜC߭a\DIX7qw 7]4 dȚZ5cvAsֺa]gRGdz{A}{ns\q?9ݑH׳3lGY]~f2Ԇ:UBTK\ߜOs*z,Yc*9nGS4'N];ڛ̌|+Iq8*3cȺmSU,~ݞ9GZjz4YCMu$+Fy{^bmJ6S*A~szU"dEPdm"%V0X47xUWhmfI$2JWӷOJRDq WNPs M˅ﱕqx,șr=@ K4H&B )<p3Vw`F<ӟ_ZEr-[+3(21:w&'7Glx<:gFd&2U0rדڵ% Tޱ7z ݺd8+9'iC_M鳫CrH?k(:8zr3Hp9&Wqۮ9xNOLp1usۥ3$zH$v uw=6}O?Gn3a\k9`z{Sqֳes"qrǡ砮j}~azs\vg!t?1Ӛ.G}@6GJCýbe 1G%"Nߝ!^Gx`s{жhh1?wӯZ${$?Ž]g(1n u{੹MzGIF}raUpcqǵqW̸Pq +mRg>ұR#'W*rPÜ$NDor{*?}vJ(ReK+O>[iy0l<8dt5Pq)?0vKIܯ&K mJ qǸǭ5d錜nבRK=3q'=P!bw>J/2&9QG8ܜ{&Rm S@ڥ@t*&DY sI6c'h*e8ʃuAޚbޭ QH>tIVYm?y`7$֗PKiYC-o)>afjݤ?p e`v2ی{&.xr@;{~~^Y-x-(HĮ6Aq#!~T$`۹zB߯SUjx 1דW71*B苂60ww8ٖE0BxQ׿Sڔ!\dЅz=齊D; Lq<L*"rr'Yܮ].RU\6$ 9q+wLYd.>cIXcifjPˆEgZt#O|wnglȸDv~H\6v4q11zUy|60ڋOssX4 K NF8}yΡ+=;*1tgZ-GQ!NrwGu J֊,\/@R@*z=1+I;/#39je's P/ǹϽrMcCەOE?֡_n0G.2Gue2ݰܹ#;pNq늏dm-)3~ѵw12c=X ON*`ǡr0;^gH7FજS},6[-ЖRqibwbC~ KsV} OʐpՋƬdgsֶ^g,F<[ wJ6t30x/??Z-L^yKVE vK`yL IO3[?;a_ϥl`1Q{arsO^>QTci%H9jhЂtv O̠3zOޒ;^@H9ǯ4{s/!Ap6p{S!s6Hi+t\uFJ( "< nTWu ( nI"ʇ8b -,.>q BTDdRFی7#5~cbX9S\8áԭq3̠r9 Pzbʱv#gnF6L:SBL+yd.K9*0>iWW ,C,Km2йpN'9oJ66A;>bɥY0\$, !M(.+0cxQ.{ ǚvʾDʱ",噷nl5~MnU\C #HJ H1My4V;9 qXBWyzL|/}N}AcO*e a6B19<Qe5S=H%MHJqqx&;@yҥ'z $p?Qr39@x=2{  z w?D90OIlwhIA=#MNݎNWJw]}G[zvqI֛F::w Ons;KOP&}<`SJwx鎤y>Ǡ=í\;8#8@ *{t?' 3:!~$ޗ%x8?!OL89Ҍy}GBg׷ΜO'{&x1=GSd3w:d?/1?۱;q~{L8vV׌I68$8<~s^4ŭ+|lo*ĝ#׏Ng<;B;FTt+ⶌr4 2ps1Aמ8jK69P[t99te;N3*##>j ' ݳ9.r_1׮0=*ӳ9ڻ3.:gxG5n3JF2fl1s2K,HH95ܻpp0w Fz\ehqg#,ۀXW#+c3'P/^RbIxXH%bY{E,sI1q׸"SnE_ )c9p7aTKP 3hwp1r&{֤w8B79=5I^LGCAw@d rM7' ),TQvo0Q"8 B9 tATiFX' zLUO/Kz.w ܒJ眏ǥe/;wU;բPF sH#nǚJpÈNF:';|-u &K$svOԿ{nwp7rI{TjK8R[tq~ V,dg\˂Iwr#QG8ʕ9C7/SwۜG-<>֭Fp\v3d^eWtj n,['8t K"H1Fdjm9$wGx^=%M:F$c H\̗Iu*GlvzvkϧM_M-xS TSc۷BR-X%u3Ԁ0OF^5w.S3\o\ y̿/dTo]q4NWƤS.!$q^8=SJ-N%Q2zWi;ӮIVAD.Ɇ.X$U.E}dۺ;NgwPilm:4fRYbQq{׾it_ +] KP&u#CE( p]a (<P2[`}u2:KV7G/ktȏd:%+ ~ow0|_.$0|#x+'9<ʪ %MnHо!zI XRYy<#=\E&-%a ssNN]LBqZ^(~<>ЭzF:.>nppErZ I\g;p*1VoԳ.sySy p|OV,#әA2@Sgt=xWt-Kv&Ƒ ʜ&y Pԣ #&\JJ9q?kkj/4>}_!SSFZT ڄʃx_t?`8۷x өv!xݑ֖"|SH~N={$c+(U='#O֚:ùFV א5)&݀0$w.JԎ{зVym0*6+7I9R0A8IrHBs۵LF[+cg`=wn `mP6R#z.ܣ@{`;=Ku>ycڙ A9 ۞)u*$P%jAhV8@I8IuVo}*F/mbrNN.c#' d6ui0DeN pTTx\g'=3 * 2 :뜁 K{ Pc^I ڔ7=@}}qT$ݎ ~' 18vGGBP6sb\ (끌soi助'⌗'ji 9;I9}y@1@~p'Ќ猟A#IP[hp6 P=we'STw0H Ўv N$FۚY[p%s8 s-޴bOO{#?356U+i'^NmUnFK, {Oʡ2ZR'ʬIRr%z kn-c`q#MKG;) {$gp3*Ұ*PwF[bsң'9RrM{ ۻp>VzjpqqȻ;Xu$;ts#9G#:~Tpr03XOc+ 2Fs^W׃T$EݻNG@ nGl{₆BXs9cX Xrp4G>`G(!U 2X5Ĩ33t9zW1p `z0+x=:[ iR@2$O֐*6 hD8 `ݖ8FФ=p{R @ͻNu$8G{~ tlg=nSAьaT!F2~vzOS9r7$r>OT4uv8 i*a(o\ s==x} bz>JV#z_W;n&GXq,v94 \$c^Cg;T#W֬0 9 n`}~j X~G>b61p`}1ګ2`OO9PJZTg9%sZnIyx|=Z-Ho?x \Rln9/CurD$v?M5'zsץKMȶ$7Tsڃ>QGzwcc#$*?\ zg*ecAG~~(i8Gԃn緷^C 3M$篩z_D.{@Np?/.\SL` y<*z֩yzN1Hx2޽x}"M^I=4^sO֢wOC܁*a':c=G= i<8rK*0OߌzPޢqd@qA9lN~ho@Q3pl{8W3N'=r:v+K4P?Fqn8`~,Jr@IzwՖ6qb՗[qЏGD. lG8 oJjnGԱH€@X~Âro8$q޴DmݶxF3JLєW?_J&3&Rx rzʭ8ff-^QRZ&!It?w ;1w>5ܐ1 # 瞕= {rFNy8Zj 8'?/n3:%.!yϡ=>9*ʾp~N6ʇsճ*<v߰AO8$Xd猒~W9> v;dn}~Fsw.͎=:gPc8st楽ʶ!|r*89 pGJIDL~u&$a@p>oҝZo!@0*t~ʞ13ۀ޽8+mhH$c !d6;Ox3WSmVV'?.{QEȱfUsl2Sx9[F=)q+}k6\id-'nK =?Z09lI p?zVR74">E@8 ? g]BTarKqc.LR؟w.hD f6Öb1 T4½ jCTafD,ĝ=~[(ˆ$qwQ\LpÓ< YTR` x5΍r.>_BH I s޶`| 0Cctⶉ[bYl-°V8f\H+;qgDy ׽Sv<)T| 0q8\Pkm̃cjҽ09ߵUpIwe_@:zՠ7up#b۲W=p9tɗ܁vTu}VAvl X?P0f; g)7Ww??[S<8 g<PĐ@x,:I=}{?R` 'dGn3*'?/@6zO' '~9%8W 0k7B1J0Ax+c@J?F#~evte: Ż۩Il?r g''?ZYI, zdsK3F*&_g$7YGSDۑ1k6eHBz,a T{QFnY[$ ֔o v `ؗs(A=x'j8 ۔>8=KQUѤ6O p}i9;I\=x?rէ`Spӌ2 cm% w;wN{~*qU$pNdO̷Sx:qy?3 T$@P(\u'Nn&L. H$J[ ׁz88ӊN60w<ܜa#xq8^98=;=1]!II܍  vjRGp08X~cENָq;>VAǹFy9? 1nS: 29*zqM' 㜧$sޮ"-q<(qG }rMK韠9<;^ G; ciry9D)3Lr*8Ox9f٤F1by`{dz8t8<|æ=%"gZ20D)IaX9b`qھOW#q5,9U0:Y=h՞wO hsh(ttxŚ{n]8NT0fFL:_ls\Z;]BBe-l^B8z)=VͧG5}F+MJ O|Y7i'{^id-,8]I~8\8SSpԃ[\lQ$3ʎzzdc|/9\浱/&Vʶޙ tpҭG*H|C0Iઃ(%Pq׎ 7R?gA)d hĒge2R6xBH-эJ?`S{ܙSK59$9=GZS.g>tد,*dSnesBӾ*\Xn&0Ul} d그*>Qiwi52+K ApwBҲ5-0(# $"ҍ.:B݁QW魍 >,> r_s dF~< =Z‘X@dS 71@;5.z[mq%}w9iQ84 Ƞү5=^u'.XH H& r'bYRK;ɫQϯ' =zOiVm5>mIFjI'aLefv m_qw1B1`!]pîOER_6^odR^l.eZ8d Ls["o6A;V$*;RqThѤats\r9TV+zIR [$H=TڔCGO-;rgzc֧3C3q?6`;Ee:hfi6_wMurB8Amj0qn"Anx8aKt=yjݓTddZ06J䝤Xc=XmC;J`|矺 `s}‡m$nx޼+fةg8RHW4ݓ;=Sdu*Z=EG$F9x:cYSVQW,52I䒧nA{t?y ,p:s@Jy݅n0p*I } '9 `yN>m<!2y_ZHV?ލG~~E(<IҘX&ӌO\rG~H8Pz6'h4i1~sOL?a{WSv{z (s;0b31tp9M"!Ѓ3N@'@<¹ "&xԎ?DP;}F:g?ʰMTU}N\z0R>?)98WL填`xZ>܊8*I$vS>=sƱWO@8"~'  <qL9#'N1z13xr1֠=܎}OzR!lʌ{}qQd32wh#w99 p=> `;AqP[t ʹˑx, 81Vݝz <I=+ Hry%]W9yr:b}<3s q徕i= 9#s3{fG#q;SQswObd9'x8 x'8,==[T94ߎx2row"FҾV,Ã/%p!W9 t'8s9AOVaH 2v?/ z zc֪Go Â&0qׁ»Ӎ7;zX/!I#q;rzNv99lIn8?MM(w\dOˮ{X[XޜbNy=Bo9e =OVYZBJ<0bE#21= c^(Bstq:uʷI.6:cW&gbI^4%oIO8hčFЏzoJj:-=6r?h)'RzEZѹ2;'.R4݅)Gn{W~يEBX j[83/vᷰ@Y<p\ 7'$}&k\<$(9C0_Ac9D*j}[X$}s֬GA6C's5N`PA;X Ҹ9'hczvF,.N6m á'Ul 82'9>!Rp y'ק`cX G#֥ pܕ`xL( 63ppwgcqOp\Q( 8=9S̀N3p3ҩl ž\60zVc*HBG#)xz=YL +2ĕ G<`B~gTD@+3q]+s%ƱsqoDf4 ZLIk9.WwFC^9RD X6 yVaDh;c&E;<p\_QR oΛC{F~9He=9/$U0s؛iv6f2W,Fq?Jd%,Je;ダj  3im+շd2kGgmu; ʐˉ#"D_ʭf>{[)ޤJ2@W]r ?=͢iox͍ʜ$hq2xFFxp1c'={`T"Jz'8=0*H㔩;I9fSB{wg%|@*m횯6 2Xxלg$5#nnW1z>/"*6A^vqǥV(r+dƭ29a ə]w@ \ ¿m4 F B6y5:f$`icuvn9zoI_̘}Ne(v qy ~U%vGީ)oGb=H89zmϱ`cw4۞jR9z sp=)n~{zR8ۑƀÐr}rxOOc M8N~Ǧ~i39׎pq;q8B`/>ޢ;y1 Lzu&{99? .+ מy@$~w=?ӳE0?N)GQq } j3qh8?J9zA8=O'V>H?N?ҋ;'n2{?>84 sۓSw<`cbc=@)Ӟx84LyϿzyEN=sHMsi&?.Zo\s<$q֐ l(qs>^c-\[`QRqn@mWM]c 7aI l^FLc5OF0B9e8*ps_2Kp3?)1Þ5T-,ALFG9>ԥW{b\MmX?ʡAF5]\`$*3b}+44>!N g*I¯Pxޜǰ۱mh[`v#61FuVHWCpl7+ُʧ㿥dbзÆGX`/ z;p}gp'x;s݉QЃ[\̶@bHFzsx,G2a] ۏm!^uQyԯLng :SqUFGTsUL#;y'ЊaByݹ tj%vA8 ԶheYw03n@?#״L`"yTJ2 F?a!WjĺEV,8(AqzK3/{3n7`iߏCDg pO!(P  o_R 旽莥Dr%u۸))VfY~W9 ە![ 6GC^exziZGgX0ʊ2vnbW>&u2N JG5)=/C%+.C`e$8I9mM|cCpqyuv>K}kr:C\S,[ {u ׵Ƕќf9eR ڻJVcϩKͺԗ;4T:e;v(>sƼK{@ʄXI$av9k)=-N*$zh}+g\_!cz&2H=עD; ap]Ĭ$ms!$c#ZzDos#O1@b,B:}H})B03c}}54LZ0\SJƤ~lC5 *UޕIK)[Ns5|m-x|gjAGLqЌJ[/anH :21">ࠃ"rGa)*wbcoQQweB2TWq&UnPČIG3jH 䬟8}+#`mBvs=}cNb2 Y'Pu>ܧ?*}n|ϐ $2io9S튮Ɇ,+s*}k@<,pW9'>#%v 9-9*   N=)`$NykNBw(G!Y-Tz8X6`g `辿SU~ %O 0x<繧N|qScxbN{@iN6}29#ޟ #9Nz*KFߡv}6Pe;bCv}Ŕ\`W@ֿAsJp#xic9!Y?(smr6wSO^:޴fZ P~nX!csu<~s-x>P|&ߩH$)TN>wc8` [n;9FcsMRF$FNnh=0N6ecd3L$6Kr j Ev$Ԛ #139f20i;FRwđHۓڕAG8ǡ2PIg'wyh  dcǀ$(˴zcA 3p NtT%ԒM_\9b: QGlS'Y\?.^27W@d{{?*F'Oc鎔 B,ʤ's)|.9ހ{qL8ʁ-r}JGx_.8}{rE."xV9 Kxٿ Էb{bI OZ-&Hl;Fz1Q^Fwک򪓸?{¢;c12e^UAY3zBpsGppwg?Tg=(}=sAN*[ۏJ$xz=GZOKwe0`ɜBgzzNXU%+m\#5;#.H#9Us8^1[ w`| IK}3ܤv?ضJ=#K4c#;| @P\#洒v}8FG OFg93Pw MyVl08;wt#*z#=2OK?/\NjZ.,6<#x⑓sڕ*NX@M(6r OO)\•@!T~Qw 2HkDTd3i`G\gB9?,uW^žQ:r8OJE )3ң)Ќ}ԯN%@1OץfE9Ϸ~q=Ji*=sI#"39}}zsq#xВSC< rs֠h:}_A) SxTbp:`p~̎Xq xh؏d \碟}+h+|$;uz:s+?$a>y GFv`sERs WNqAﴓZO,p։FF2-jtrFI'>Ɠ,N_c A}ۥLTNUGR){c>&n;oQZ#J-:2}3I~e`w#chn^7cfyRT,1YIZآTIm$1[=OLtI;!s7`ZcB s0;Ov3=9Ci- y99g8J,L^Io6*N'ܞSwmʪ=qr7FER[j9s=~ͻ%H9 ~8}k1RP|(IfnAݓnӂ98>nvϨ9 c@Oq1OLC.FW?.NIy$c֤+)60NN@,0~}^>E]\ Hʄl=g8⽻Gue s?(YTS,Ja lWF{ەLFYn?w68ss6MCFs,<8#VQrsװ=*'eՀ!O9!:`sb {ӂeOmN¿8C3ҙ3ϿҰDɏnzdOˌr*'$7d{q9qRit*1g<j'@I#w+z%MS*HF38\Y Gx?c헛 ہ#gpAGKUѻE'*nL7MGakg(8Ȥ`I}M}E(?'wD )F@^sVĄwvs|U8_c7=z``TfC9< <8W˞?F\iA,c]TZ>Q F8Uf;d8Ӟ[-H|z<`qpx>񴜒X~G61sc9U_dԃgc5I݌dc c#rHnIg41|d{~|r#99Y>X 66c=O x.ā##SwRlml*H* }'?{ _Ar@*R_Tm篦hZLrI~vwr)Ox}u>l'pQӜH"TeIFv#?7>x`t@p2^O9'ғ ]p#nk]s$; y5q>lw<Q6B lH#\q=r18<~yN}pr;WպXv=sԏq^myhv;v-g Ny=h@Qߥyك r:.9[ҘypI?#8W1#Kay=s֣1#d_ZaGsA!}oQ9~EXB}@ݑ utӞ=Hg{vbzL' zwZGm둷31:c=<3g :rxuҞv.ćIAL^;py~.zzerr 9M\t:ݷcێٮ':8qӮAY6QHzV 眑' ¸gԶ& #HCN`?CH\glzr=Os#<“ؤȶnysI= F<gbG*Fra;tBTw|q+zuDV?9s!UߏON=k."X'8zϭAhg$F );2px?"%3`s'=b:ȧ#,CNjlkk kkK[ U|q_ljnP|v`+)+k WK3+H*L0NР8aqAC n2?Q׽X㯭rX8U8:N <۸*#Ydj'2Aq26} e,^0=j8V̅[k6rKSmw*yleFddluR< 8=qRk_Q^ϨF,R{8&GÚ$6mBHXwn;4y 9sRW+?7ܶ.#ly[8 ~r{sH@䪕۸ds9ay\2 <b8Aqo3h̏$ ?,Q`FLF[sn NIJeJU }iMP6FI'v샓>~T|e#RVdHĈYJ #Z4OTq0L˺M㈡nA݃VOqkӾ]^,*]{[E&G+]{s=KBl8*9~̐}3{ mp&X`n后s9 `"2)*F>S#r \I!r OaJK:讯lܭŴp2'$g;rz.43;Ɍ:NH=F8emYC՘G1 Nмs=wV=R0B^Z/3z뮋 # 1EP 6( j0zgSNOk'zk[tHɏnI9=[㧽gI$ +ԍON;tw68e'-[$q- ;~lep ^TLGB*q$A8քN]ԓ2OdtZzDYT*P7\~v;}<1<'lpGO'YF(xUʃ9Ot,09;A<84l <sCc?$秮xld^{UAj)= W:[lǯNsnpp18WTQQZNrqOZh=qӂ JHQ >FA^ {g9(h`r1Fqc<o~9444gI#$Zlupq=y׌gq* >='=FOȤ q'#΋J~3u089H21A:z q_Z 0?O^H%IRH$|ϷzFYL`s5u;B:[cJӖ]s rxV\Ik/8;p3cՔ޼F'+;fsp0@Ёס=+GH,EAnpw:W_I.scBOAz8 i6\)B]E0GRفq$ ݞ==kAӒsF8n: g.78QᎼ>\Nx0GCz1Lzg T7^pHǵS\h-ÜJABffDʞ^<{uq^\ZS3 ^=:EEq3p dn^>4/ԏ[01fؤ :zsVp06d`/n:_Jce'zm/ un B2lwSmLhv9RU6pZVh XA ߐVuc8 l$1裐W;<5qvw/N7y,8#= J E=nIU+˿S3^^b1e T(U t!lXPE!g $~e#|3JPqѲraW:zM֬q7MU*0B'ܐyXV9a݈%DH"s9Y۷Apguv[q( -lXy+szqYȱj˅Ur\rr?)My`7$(tFvbˀWJbQgh3FFr=yF$)f;kRRk;lϛ<CҮ :|ێMջt# U'.[過`[̥q?! lT OxUcxH;#9PN RAb?<7N2z5 lt;w )FG`:dy~{a_mU?1`gsyⱼMEg2K4 ]@!]66H;k9|2NO\Gؾ q@=~9g:a@`)I&z}Hj N)^q?z>q߶p`q=:8*MGGyb0qz| ^yP-t)7N9vjF{qyy~D''OS\cs֚e <~7{x(lsNjWTgb;ӽl# ӟ\;#:J. ^@\#'6??Ã{NQ/s~4\A#.}=sM;ޘJ>zcP:W9ǯL}z4OOoʒMu8?1Hpct :urDv*C7c>GOZU92)!8q؞oDznK<ϚIX'澍ƘQI x$cvzV IDYV`r1=w~j |F>PS=~pe}FH 7ϳ$w>C3p{'/$U\8!zsI,9îX:98Q ϻpy[gA9 6"K @N9{Q-!|z=N9ҷbD-se}'$u6䲱(r dv^`K;-{V-7G _mTH#EÒ0 *vl f!. ,18 AmO~~ PdOj d؅jpǞS~ࢌ>Af?BRd>Cmc9׌tFl$`^FNQňRrqщʌ|vKFTWQ}Y|>Ѱ6>S"+n{P:mVcԑ&FzRݮO.uF)d/Q_?r3]M3玃Ȧ_^HLn#y0024Eʥ4͘:*į݃N獠@Tq='A-*pC$P/']QQV־=7ћѲROk4}='L(m.k&4^j: 'ԌK:\I+?&p-{f.s4張v8c~Ox^pGȑm!A8ұI}l,P'nz7o~ۏ#F+dg+#6 <6v\{Ӟn>oFz#aI|rINp2)HܸWcnN69b:.;P[iu $䜟AL#c6Ơ/.d 0cv" ݌GɟoFzVմea4)y$I K a~O0]ю # 5dp=K:"q8fFU gzqM* oe9e' =sK ⛎:u]ܑ;'*rr# 1:[:{ǥ9BcTGK& pWq_\SJ`x Pnv69=J{)1br6۞Jtjq`\R1TȫH09E M)"m @x}*SGDϹuі;W`}:Ӂ39~6M J`c8ϽDwBA89lPkQFۆ00q#I9#^*MF7`:&/0Hꔭ3qhn%1 &,7(`!#apH| ϚiZM6a p@8sE=sQ\zF}'\UG'2vR}2}A``1OnN:1ښ9s.ڼz3ښgVn9O=JݕS'k/<('I :9;Hd܏gG wpy1HPl&Q?vpb3H c@7w% l󝠏n&FWրvOpX`3$ с=@br0@/?O*BqT,Kn9'9Kv<  x'.JI;%BK"pYq882N\r3Z@ >Aw6=8gۜ2pB1~d̠\|Ü>p8ߕܪn8$0F5sTe8<+7Cm;02>[-3=A-^qRWRI=C 8q>nxl39>^X7' qgw]a,]FW[F<~<ؙ8hʐ H !E Py #֜)$yA=Mb])!w!WpfW6Wkm7{+ 0O=y#7'w3luh$x ܸNO4syyc2~R/! 9,lyݹ֔s!ys{{I-3\#/ Em ''nx3sU5FV. P~`>O4""đO9ǷXp>lceb1s,ew3r~c`ߜN=pjz;IxFQFO?h|3֛?}ͽ =jP-38RܯN'߽"Y L`8B;fՕdm_, ֪teݵwR^Fߥ!G/q~L>#pSGtB}zm\}?)1pG?N@Ƒӿ>,iGLqO9P{?Hc3;Mq=¥-8)߯OY 8GR;c߾i-mvz3x9ǡ8mNB+I!SO]sw sۑUcQ{5#pO\(#=2O:CmbX;mdR8ǝ%w W'Bg@?! A$uHdkAx8xY2rNT9d˸>HeM.ܜqk]$vd qOjp |9_|tNi:*k*$}NA'=k.$1}[3<\naO`z>KZ``9!},48\fTsqRv"f8, ̀<KnO#'Nhߛ 78d=hq={qJ l&Hc:gN #;[۸4XRqJ9w

˜< NdGk9sRIV<e0I!EfRdV6I'GdZ|v1mc'#d2z2 |r1ߛ>i&YNǃ:S>ߪXtt"=9N:[v1lq眊?Yh!$aĞ B \z >_ǎLf$m<8U&9?62:H !\E#*bZ4`RA]wa*BzcI]3=~yxxH+ە>F 9 zN9`7`́cקZx1\ۻ1=qҀ-lz6 qֵN xfu{V3z0Is lT m}#l.@qT*a8`oOz㵴Ly$ce$$gV'kd=98; mu#8O\t=*|:[Lp(d0*=~int-˦G)Uq %`Ozzw99@+jL¡Ђrܩ#`^N3s8q߭t3 ݸ ˒Oqv0e{Ғ%0#8&HF?38$ u'jdi[OcFY:q#8ǭkbX!$)*O-d09j}WrAt'84En:+ŰHI9n/lpG\Cֵ5N`; K䏘m`>=u0nI-ҿwo\:x>ՙ48,v`rp>Ubzd~69Owm3~©8'x#ւX܌'OVgv1}'F= }jX։p'xʨ#}W>RuԒA眞j$0p U#3U] |As%v2fr?(S 퐿_Ϋݜ<qsHIg:XI4}|yg'[ t'@1?j{njipz=;R"=+랄jQ{|ild?v;҅@~aݱJV* |{_@Zo˸<~CL$y*IqTpFA''-M8>t3U9<9\Yh.AĞCQ(>n{h2-w]3MOF8zw\ `=p>q+_.In2*AWq~iҍGHI8SbiD,卌G<\aRf *H'8QL*l $@ `ۯ#5TJ%+F@qaWe6,]ZFCP*q6~ua+7Bsx8pW:XR8\!W+qVҨjy{%Codg1Aa5ە7cOOdoAk:)` nǠ89h"rFh;1#rtGVpFߓtg%=рk)lfVB;cC.c"K,$C.=`AwaE'˷GH9Us~6Tֶ1T+`\\c٣ek{DÓF9flmmaE/dO)pB88ۚ`d`l{c/ :;`|]wBc Cf'ιqO5QXa^8e'F~U%{U]{V RG0O_~} w/9Q䞃նJG!RFnZMPPOLQa\x-Y%mȈD:8'FM)1˝6'(8,}ޖ;(wɑ0#yIΚe"2s!n n1hw)GN"ZFZ$$( H }O~iqmf>nqskqX̽_5cQPs|QLKrq1d>%7NGcӞ3d=+KSEF|X=9=~2shY c`Ǟ}kj/#ry\'%fSoC㑏pi7hS>8* kB09wzUVp-0x=w\JqSx v$~TnrG4 r`g'#GNG)q`s= 8p*r9#JGlC'Cc1[ɩ+I_܆Q1OgVlv-sڸjQ<3Kl$|f;F1k-ἱі ;}+̌D.= 6mXr׌cn&pn@$GO~Фyn:> ;SI'Gjo9GP'!l$`qMy+ N:=rs|Dny `r>~#,x -=\@Jt#zvxpI?+9PqŽa-YH! T`1Όwz0PCDHSԖP sn vGG\Ry#iG@ =t 1 /O{qʂzc b q06õ^.Uc(ПMjB>Sx1Wg^rs=k7?9*{ϩO.*$2xUwsY)!scv TvrGZ`gjm8UYz {q!#Y|qW7PD#7`XǦGj0J 6zX}*a 8Qdg[za<>Y6]nr޸5+5kK>g#_%:=ɷf &Vc*@#Jƭ5({ ۱~Hب$&Lt@e3/L^5\?$=8kVXFTg#>HpkRKhb(?xvTӀJul]n1#z|q]~Vv~L#ҺP-Y H7F S A]YIY x(IW."oo"q{>nWeڌ!$X;84vjdHna.̎6c$}Gs=`gǨ۫G*pPyj݀ x9i :yqYla.zqF;B*)9p ^3L\ O58.Yg p:U-TcteC$3RyA"Xr{ N@#8f_'̊Ϊ%krʝʐ40Tm[y~O4ɼ!ah],MIPI?|InayW. #H>-^IvD{z"xiJy @\kI"P'"Rw|E4V5/ܕ+6G̊pZ`Um\8pq+Eg$OmNQn9TR!:,p B.mFwr~d7.T :(<x[Ҿ\_Ũ@r(L#G!ۓK'،RHo[+ef% ";rA?J; 8Inꌬ/1Պ||'5}}W_ֲy"zjW<:}isLw͞G[;8rH84A=x1N?Ά?Ss'֌;d9L ܓ w>N SQq矕Or?#c)78~me#aQӯ8uϯ =㟧=!1?z*'<>ƀ(q ?'O`hӧp? cqq;z#8vM L>~v?.z c98 b\#>ޞy};T!X_<=i¯91G#}U".:+狧-qʣ9Ey[ӟrwX$a00ve=ԌpNN3pˬX ($ө^&'e%#BX1$dp=3 ꌮJܫK=6KZ0mѳ zdyASO, lRb3>or7AWC7 lÎ[]3*E=L9F>9(4񑌞999+Ӆ?qz=ZKT pN[k2$`z03ssY*ݛWpydz׈߶I GDĜ鎜ְvag18*pp3|>\ɸPxA5N挶8!FrppC8i|ɐRH*_i746>G,rszVlC&$YrTrC`4։&N%nA9o]3^qt#{W;v5Q7oq @R?˂1son6"+8؟NsR8ahB6n9$8=san0rsIa;(r~Ԟj9m#o\~ߕ;\:nC|~Vo>%"Ď2?$sjݗP63r[zԲy |r ۞ZTIJ|%m n+?tl]VGeXQűyc`r*iclAec{Fwdg;V~V[SVO\p.Qˮ|{0ZO-"$"Xb~g`}0}RUݥd%p~cck/M#|+R:`}MgTT' l.vZ3Kl4aLg8 ˻P1Ny⼦ЋQ1O\7yq2rH|?x׭$XD~uh3׎iOI/§u*o-AϱKU\**cC =w7'}#]6+qor6MI*uLsa%ܒ#壕b9z)=;UHs^w?N'k:SB뎵+3H ocXO;|+܎A2|6>瑞 T8}++8+n\2B|9[14ur6ޝH`($8y"AlY gVz~Bg9rO=8Ҙ5N0@`I8RL6B1ϩ-H "0)sA2kٺ')Mih ɍ8c$ԊAeͻVΘ$<'[vWSyՒ0E ||ۏv%28AǚԒ#WXqSl>s~=i[Ro-鎩&p}K }W$0<J){g'9/rHS X 'S{p11Ce$8 > qO4ң==sҐ\oq9hOʤ?pXےX glj+hK;cǵ&ќ|$``KqXz!;%ry#ߊ~%'~rrvʚÀT(>^jGJ$3ˎ rqI탏N88#8J~QyϭH!p3~`6[!Q ~`3׊$DB)P m>9j$F>Xg8籡cpxzgIKoVllsP3ӊx Hۿ>mtFKN oFbcs&:8wP.]q<㌟N=q~c#nS#<e|8{$XVػ'l/Xk%XH088#5v3ލ[ T;0T# = |g 1F7nqgَ:Aӹ`XヵH93kZORWp(Dl(fAn px꣦Bu=w y#]) Ws[^z}&@'X)#p~iW<ዀs?)[pr8#> ,Ű{nz`}p=9Oj`pii?5.9Ad~gt5JR#fF;yթƪ|Bwq98ԆenBFFc.. 󷜊ځCaCΘpv<Ժv 09 .:(Lr*ڻ` eXr3i$\,d@ =Y(*Yp~9x{Ȭ =ArC`ӿ8]nޤ[pTI8bL47smf`G8Z7#!c#=38"B6$!qYOnSI9pp16m5]pFw# qGN)maī<^ªsr FTgpBI0'=z(}y.Yar8✎P(X ܬ;}i-Az<<qJ7; aqI`Iꬦ z ,FzuTvlbb8Уg4!u_`=yU1v8!>v| ZBK`ubB9qS rU1|֟vѾVۍ'ۥhHܠ2dmqoz`G2(i~!:RE"so6A gtOUqSw'v1ݝELrX}ܠw<A4ul2w0f{g'8>T.1:; +Ĭd ~leK c$uyY_)W'9wY*?&gxn-[p3KR=j T~Fx `w ٲcBgpBsI8#ڬ2sG5;TFy=)rszq410qكsc“Г䁎ӊe&JY<<Ȩy*;=lTcvx91pv=>nܓ֘n0w09qV01щKv\MHjϘF3OqVr=q?J͝-ĘTb[o~.F1V\/cna8<3ҲوoUCU!e'݊]daLqSWcP'~l۵upV{>֮-Ԟ^߁5i!_P:"Nh]Q'$GxjBTnsrR=06稬8ia\cql+RPJ d;yw%#p(v< #S>fhY7% 󜃐Fx#5NE'ݹp lu@"d=7gpds\TѩyG;` u#rOjq[IT!iRcsUp *:ܞ ?/銇 F 0z3L p,Hsq+RGڀ2଎YG+"ђ< qrʏlU&: l?\II|]uƒߒ^BI<}zBPb0pqg۹1e('qگ[V nB rG?7>t2H[q?@xinndavf2nVpys\ MF(ܒ2xGVBs1vPzT]ߑ$u'v5G^z {qaw€1sZ_%ewy"R >ibX%9?N0:gQlOPCg9zȐ r8M=}95>8o=G+!F,g뻷W^fL$鸁Fbu:V{n}*$ M!A23zD;Gj\d`/'|alG89jm._"0_|86U]sqS$h#+`l=:/i,H qs͚EjσK`#ߥ4OaЌc u/ۮPpg#Ğؒp?yFF=9452υu1.pMM}̰yȥZs ˵0VzbyLq[NX>19 7Kn<{v#BZܤ0b%9 8ӎc9Tg ґq_opݿ8,R3< @x <JGGCb0~M-n@x22N}EzU4QBlQԼRنI=k7#,EHn__4 6^V~#@6˱?Z- w2@9-' *p> eIszsz͚Ě XrUbBnc`g=#CrO֚@ǔs^Rzpx9Sh9XxGM2vF1'ĹYcf^0Ŕ@9<!6 oʙ-6[:F{T k%ϛȮXa@S<|mFPs9Vfl-N8>򦢟10}xw mZBofr+-G2#+0,s>mz`ޅIyNzgfI eWkD=GJjgsӝȤ$I 3$]\U6 )gyk4݈ELђ k`'@:wHiME cq`a_Y,/ ۷-8':g/m,vg3l`w'8q ((4-\Igk8$X:sţ#Q[iFr7[ F {;+_Qnp:cPqY0v@O}Eq6pHG8 g>a=plhMಮ>xq1<x>N ;H@p2UCcOBz{*/ctvGNG> 8<c 92,Fr0@^H9F:Ux p0N;*\}G#npN299sRjI㒃;x1#zT݀zp2Fy8)|۟H<* *>\`9.2b ,B;ƌ!h;p'S'q۩˓CA?2{sOڑY~bpv8>q_Cct` sttYBF@y9rOS=EqٛՇ4Y$fO 2w|r9Mkk=RvrI(z{wYNЎP͈n9 dOu^u*HVsxtGOV*:gj%2 nTCߓBb.xDr[$gsN*դFBT`G0&_38>nE-¹;iMY,Ob d kD{F<ל:Y&=1nAcSdsBt=9ڪĕ8O__V [`HYUEGy#T ,r.q=q1@0qcoOcN QIh=FFO'\T1r28qvAlsM; y9^'H=x#Mod*3ԟJaC19c/9ぞ{#%Jv#q֡"=xǷ p3MEuX~PG^+뒼g3PhLlug>Ң2zt<7%ztfHPc = PON;V,G@px8msyqz .b6A<?e%Ir#s\Đs$-Uc֣#ӑcp=?%Rz$:}0'}Uc3}ftR>HH'錎JEAu=1B}${<1NG>23'VLr8i}sNOQ d>gБơ"a?O|{ғ: I1Rz9)INc`p[y?4'gGc1zt>=##'_à n#א8'nqۀ%=19/Tyy(K53*s{WjOOg#;sɯѰ#~m4Hq Ğf90OPE@wH+_zgB8!q1Hx9$$n+b2 a` {Q1:2]N߻RG#?+״cX6F\kI$Gɻ|[zgw$nWN>I vk²^8RWDmq^Fy8鞔 Dm*;Ml#Mua;pW}1Tզ%|6x$Szϫ4zIfJ*eOTyd ^^ܤ#mRpBe'HlPz.B*eHa>qHPNAH==:r%e*Nn0G^Y-͹[O{Tv9e ʰ+@Æ8~\t8͒skh=my݃q#Tx$r#1sT{E3]ba@aR;I$v 7< ybl2ȹdd('n[3<7r@8U],x soE8=9tw:ScxI{I`͊;"@ĞFx޶-+yb@hFT8݃{曃xlt=jL|# <xυϯ-zu .&s8ҩ00؃ϥӯ#zqPYc0G?S<viy=>3]d{ v?=}?Ns1P Aqz=O҄M\`bO4n==ᏹ=&u=}aJs"=3  8& 3>M/Lw q'֜ ;Ƙ 8ӱ; ^,^|#'ܟL =G*Nh#;G~9raO ⳾Fr2OFa=*hoKrwn#4kv'Rͫ|ͽ4h`F_qarl=1]N 2Aq۴Gzcz2n?sXƘl$89^0Hwډ ˃xڼUr gp_ڷTFQnLNVl189x= ;Ӵ-{ןs+#ʐ@eV!H>qy6zA;8=q#Zh8hzwڪ'sm'8==j\P88F}:aFϕH$ P}ރ% sҬe˩ 0N9'̴AhLy9~8v>aEÀܟ#;C&7jϥ4EN ^`)>MU](RT'̡Ty,:x=h1Dګf RHdv󝧌(q 4Z\  vx`\:w_QAew C6A-n9 Px%p'<}i7q9cmhb!V}̜:fR\VI1+D;cG0\_\$6Xv'' s4JVKPQeWc,ÓÒ{Wr rFZ ͸KvۼYCӮe`LQkKpF'Jt\VgdvGWj$!ء=uK`we89YUj>ڭf#9|!FHoz4;଑*RKC>es$;@vA$Y"82 zV8^@ndP>qn98vcמ(%vF0\/@1JEtF ;b¦oҞrKwƻ~(:dOiy{~L*wwrO5ި%n B~#ǚro#>avRś`|Vrc6p2Xcs'GU6C8Nz98VKQchQG֪Jo-pC6rC«z[I@YUYGlwf2XU>h\:Qy>u>v.1#_s74w6g 7`:^zn2o[zABgŜ!rd,EW`lO,O<}sz趣D@rGՕQ'*:9N]kyHc9 ͞HPn22ːAeGIrpwHZ#['&"t 00he^~^8 ҕT58)_q?480OziI2~rpS:)>N &C`9=J7r9pzc iڹ-=D.N=b:ԥ9 cqXnx2Tc9{tV ʣ;[Wqމ>Fys!P *.RVV(2H$#y 9S}F0v8y#Rdd c'>;7 x7uu 9ydy0'1W9_U^Ӵ)N^Tpi_V;O98=ja E'{Ю;OOyB×+ 3( 1Z䶖+r9lֹRpo8Ԍ2$IHeo㌓6i8p6!rH<3n=9UhDFFH:F=zl=>ĺ9x<TcwɦgfS CTמy?4 `x[{zrzsS+T98WO _TPUrNOK9Sd1P9en;FrI3L h[ '6.qx9sGQI{ %P O~3qzS)vRHlzҗq!T|1}N3[#A?(3N݈oc$b ]va Ǿ~!e[-+63ϓ\=??'xe9$Wk~kT1S BCcqЌZ 6a pq2:wMƷ/p=zSdT9+^H9XP47f f10TgבM†Hrr}) 1ԀS銏f=8#$9ø҄q't47G  Npq{f; )9 =tU2hAa}>ͼc '<*YA厀cq*/$O~p3ԓ}:'qמb:zdqM1@1/ҥ @.3!O1qBq-HkE1lR8 2qJBp4S!h *#==G19dQ4R* 99PlsN/jC6QONJ\g"*pr};rqd6$'>!t r蛧_`N2}u0NOx?R*dˉ2HPbbz7~*9Ԙ8yN 99A#?HsSH>`Ǒ#qԏZaGQ߿L xہؐJSǯiD ''@2vL9ג`c^wɫJRʷBFc+3xM;Q!bi f*}xⷒ03 p o0 *ʙ/AR9<i[b){9ca+H+~*L0K0}G?ֹ:[а6USOnMjġ2N0l3둁ڶP`n$%0Xp81ְ%o2Xo<5FpZ$wۃ:׎ɰs˟“Ν+9%9F'9pHҬN`p}3AOS'AxӮ4>+o\a0裓Zgcy$ LchC<+s{=E_0Ac >nG1ol,H85`W?63rA'=B(=$ctA8q8'pEZ͐1Q`}=x)т9%}Gq֫+sۀrz$ֈw9NB˞H2q\ݛIed pFk&,X tU<Նs[S2Urp!-HNsep339矛=VQʜ#APյ(<g9y`k">MOVǦk |GDv9m O@v͖< Ur^x=iTP *w0$ux=+RIlʯ#s郜Vi{},ʿ屜 ǿ\UEr  s7HTF0qsu]?>lM4i2\3À^zg'8݌qRF>NcJ $rp>aߟ~:ySNxo>zz8'rNLJ=}Ɔ'ޣH=J`*yA#ʐ1-<~j|dy }*gI~<9'K%&sOT00 1鞙ݦQqQ! /n܎~H},B0r>a}tLWc䌎=cGA鍤v׃uC&@cӂp8'7O&4F1>L670aN7``ӞZS9n)qpr6vr<?^خ{MGa9O3ϸnH%; 4Ҍ1:O'pnçj/a#[F9:VrEinH=Hb$󞝁=89>E+ua~8?Lӿ+}OU\sr;pF?Phɔ>\ as^9Hܜ$tVԄ@3c[,h;̗f Fv189OnaR6:;t'#$p8߽jxscƺ=Y#I1q\$8KK[^;g|8ǰgP p;Q?&ߗ `sБR=j=܎#^^{P181?^izFz>lcNC[\%]m?!c]0[u-ȃvBEa&{~wr2F0z <7e '>rzkOwU 7'w5ZRޥIN7K9Ƿj-emTH>O֤Upy Զ`vXPXF' A9 m ;fX@lXԶdeyi=K岰r2N69QC3ZU9 x폛wLA* ^Ap3eu`y^I遑TB*;I#*j[v>f(6,?Ddt,vsu$:gwߝpO=4-BA>SL$߂~quβ\s:`D -X ?S޶[3ؤ[%R$rϜg +vȝJ?Ǿ:=$`nzЯ!#*:(Oo0F$U8jcTO$N;C>!݉T3|U]^׸kbn;؅1׽[n` %8ێjћF'TAOJq _}M&ĖN9I#@j&e$#%1L%)娓p~A< 1=,}i+wB@ 2zBLՇc8JHLt-|#9榇88`nwpy<\Npg*?x/oN:pUH0{8&c-z| tt*?=rN?OzV.3pqЮ~z֌C#,NL3K{Fݻ0n8$vrE<ẃG\B6=F4b'8fK*HFz|ǡ9ڼڮqEqr08?(}0A԰=xU  'O-P9?SMaF.cRYyeyxFvltQ4<'<1wQ70nd#jj FrRx'hq[sAN  (cF=gO]A8O 28pJΤiD@@;99jק \E6K@z3}?S֛@U d`<-ۧq9>ϿzH̃$HIP8cXJ&&ų r{fFd ވBL988֯p6Oƺy?9S9=y[#1w xmןl?Q*,uビۊPݹrx wVo7>{) 7[zOa=ߧ5 ]s Ir>8J9q9'49$`z{ >áG#O^[= /RO=q?<`#Ax9ͱF<kz;[g!JCC0(tmuy^;8!RG_J 41.g4fRX QNWlsV=W m>u>S0$u%014s9Uq1VJ5a m W#~Skuw̌)^#Tjzu0Wx 1k\OBʹ!0{q]ԫ+7Ǚ[ ]Ne!IA>p#װkp ttan;Ju]cnmļc.xc>^+"ŗq;a\\ \`XIn30}yYYvUf9NfoxAWnFwgGzk32%P Au:{H:lr +Dd2Ns)~o1qYI$]U$AP^ңޱfٰSO~{_6vȣ;x< 2<s:{Ԭ`cvV U<4:8q׌qe)Aw0sOҫެONI`tzVc)<7'98[??q`֟#1p3bq c,z1+#5ipx<{&[orS$0 r Ob*Lyٔ}^5DΎ['Xc|/'*\DNUH}+"6Y~sK}zН,pZB6TYzq/83xϵ48ñ{8aG 1-3˵^I9fܑⱤ. nm$ /n٪3Er?2s=D@PYwRWdTZr GLڷ^%y#LG1@°NOIV%GTH\;@)say;THW'no<1:RG<ԫ;7.yeジ9s)e;TIw0{ W0hײeGǁyx_O պxqBX \F2`kVo=0y uy|Zͽo DZɹy$Og8}:PŒoݬcb]|+ }kbI/**n (DQ2s^^5鷡Y%ٿR=IRE@l@ `ǀ;[cv'1r9g#9,~/qv@Ϸ\T_#-N}H=$(@)'Ïc杸SC܁HG'ʞ7PsӜgyn9wv9L@:qژ9{ۻ=i2~9׷jwcP $#;oʄ88z?SO8ϿRdA9Η>oZL'gS ^A csN0B"E{A{еb_.@2#}y0 rk¯qF&r$ `qιN=һD} o3;Uw|A;$)# 2$7I>,ʼnO`;Ѷpbp 01"Ȓ` z0Y &:@>^J~J˝FrntWrUUYrN8']@ތ7cF"#t01叻K OcH+dRr# RxFq r4{9 [=W2UF~u 7Lߎ;ӈ4F 6ۀse4`x ʑR_1Ѽ)`V* =rxIAN2 xR.2Db`0ڵVebT.RWsM=ƶsZ P˹%_{ >R1^vq(`%\q։68GwێH PK1Q Տ˞:VHeUca"1<k{Vt'k#hL#xc0E,=GZ;y-sAg\p a̧<[h< O6D:5ŷH1&63o o@V =Ѥn;ZS rFGV뎇t9i<ٙ*Tr>kcԒ-x)6T,3Aonjxp8ιnn3N:dljPg0/q`@fiWV24""FY*r7S7z-ȖM|Ϧ 77 {[KuhΡhѲO#bq߭x ɶI;X#3i'g58r8\pșF e$1+Elp8`>cKs{vYW!V|~]}zX|*}}3"cB(N399B@<aВÌc gNxn2r7wQAvNil*~wOSQ&WMIVqt5O?(0?EMM3IXāT) #2)VeH,l\r=XD }v}{Py$!1O8+ ccjWEQiqҽZ#mU;Ue|9v(ij~ՅEtifMUSac{MP0wn~+/|ۑIS|AlX$p3?#{e{ J lx+Ԇcx+:R`I#<1 `㎟?~S'cD7^nВ+r_ګpIQ=N*YG?7UsׯoJLgl&_M1[nY*)9]%,8e;vN.t??bg!,|ŏlm*p$t*x`AI/Fp?)Q,]%k[j-hܢ݃RI c?@s,ʒsV]_Qs*F:);:ךr؏7n$qt>9iݑzSnzӌ/:"V?29o6vhy#4c!W|iR䓼⟳hGraFヹa ܍lqT^iJ6)TEkg`Jx1 !Ap rֺISKbs7#+RѲk 9C~L ϼ#n#,X~-}5 'Ε<ٺ) <9eJb$ xHPI< ==KJXGRcåZnN7+8*q:u50Ue+ydJBNAIl1{O ͂c@pI,]N7r9qT*qQzVZe n8iDnvCnW< B@en$pwNITnnӕ! #j&,Dgo3aP>]zwCF>|aw<;]K's+ z:dSelFUOiß8%U3s8v韭9=/;X /p)2qQsn#9c班@Ю;K`gq/?"\g]>l1g^SJ\8nj1=3N*ʻWslhjЁWorABH#`#|ó @]FXʟA߿e޹ '{t5Վ$,qx,ֵ|k/wS$kpCد FS}+ #P3l`H'p9&%;AQu6;Nnr'*I^2H\7e,~e8ӎ[0Ǽr|cqZz|l?tr}GҦ-f%ᔅX 8$< i:3%UmT6H c1:)E+BuNI{pj:+1v~\Sc:mǠ#,=9ZU܎I<֬FNJ`ܸcy.|r$s܀yݐ}B'?J1 m 󁏔sqǶ{U%<| ( :g9j"@ >ݸdޭ, #.>\VLR Oy6T9?J͔Ag{S7ԭb2w N}csaP>BaNFdsVe (!,WNqe|΅9.sm''s͸sב$NzfU yJ91Qsz~Pߐ59䊬Anh~~:UHFsG?QH<#-#|gl<=YA{c{c7td1t ˥z~xNo :iT^ӡ'@X(~ɀ{};pʻTHY$Yˆ~@NR8G' ( +yfc$s94\d+ǰ̶*3g8uH>?Lv*88dg*U'1:ӭA##z?;Ͽ#zlqQ!G^a(H@_^ЎHLiGQN;Qv'yv{Rz>g~Jlߩ>/T9E?Ac,%Nǭ|I؈q!g*:`\sFOUvpG``W >H,~dnAlt8{WUfg$-0۴{{Sxf?x~Ȯ=<'qdT1$a׌tcp 瞸8M?)pGW+ UEfNKp ra~3j230U*Lea%2;d~5JYSp;x=HsIo\9''~|u~cd'V'Sݹn;rO8}Se(8 m歑FFHڸO˟ρXV4O-~sҨFK|݌<&r.^kp8zD~lm 8븏AiN9}11*YC2G̤g}x|V3ђA,Nz}(88$}>NDT0l szQ؈8猃v'?O= $[N?"-< tj4#rpK0<`+)p:]~x3ɀF29?sS<%e#| 3޾b!P sl{wvc]oO土x mJ帛pF JGׯ J$pHsG%tF srq NpN{ԏn`Vr-18^# }^j=GǧeZd[>S p;28˻#'>DM=1 A|z¢*8z^F=Vr+|?qm=OOd]2::H*8# xw֡Ĥ8?M2rrqN׌Q5 n! i `g=OnT,шߎ.E$EϮO-ʣ8Nw{6Pq:0NIz3n('.pO9.:g?n&@gx#9#ݑ&YY^$ dy7zrEod|υn aυܡ3yǯn'hmTM3*0ۈTw=+lpk0 7H =? Aq zNqvCc{uL*6Tx1;nª0B<T5kk7M88$z X:^Ƶz)V<=GJ#q6z{blWE=Y9=p:,nl\px> b H>lldcZu!&6fҊܕSORsyc!rXv:fѐFj8|Oڈ)*g#}ydȗP0 Cy>qSg*lp9F  ;44ybIJ;TmzPƹq}g@zU6Kċr\~MJg)fm,KOS*RH͸ g@cR] lgm^9RTw=FP?]Q+eEfv1Eo7ko6+1%$pU،W?OnnaP.ӉׂCqfwmpwCdA1O?1:t{ՙ7* J2d'XFI(y+ׯÃPl3SF0zd9Z:E¡t oW[3p@q{v*]ɒϒCyndl+ Ryr7̒…͉?j?_#Bֳh;^30xarI^nNG$;W&ϦwzJ̕yb9<Wr9\oOV?#$)O=?J,mƤrN:lug<,p)64OA3{ <0==1i7(Ly^ 9ӏL͓xpNsA1gI 瑐?9P~ou籫I~!91Ԍ7~㞕iM\ֈr?㌍ %yŁ*7ןҹ*2gQC),8<{v޽4U;v9oCk\8#{t?'Rt<>gsa-1ָ{ 6!kI\r0]c}i{o1= @ HyC\zr vqO5؇P`*˂y#{~[Sz3z@˜uwZ9<IYIN@' #G dr=ddg'k#ۖ<ʎGL{S}'ӥ(^U9w_¬=FrzudFp98wOӞxkB8'dsߑ}h'Svzc8 >ޔ=@$g17@'z?ǵDx98 0?e"2O=Xuқ`%AfC:)3:P|>^qч[fDlqA\GUI1txg ~=k)5'#azkNgq ӃVvGe-ܯ$q{2 sjZCr39s}R?OfzL0=G@G$S,8cҳzU'ppr s 4W'{J0I} !+Ry3=qL=ǵdΈ<01E4xǩ7lL~ dr#sP0<U֤Lr;GL٩(@9K`J$SRl)@=6?{NQxU^y̭$es䓌;w76۹AeHm3$<'l`<oQ.aKB:$ jp8^~*VV䎥>Ĩb9f:5-E2o&@fMMTQ[ .Gknst*)bW,c\;*VQ 8ױhٯk;ϔ999G8Mz ђ-A;FNW8;TG.H\!N8ОɶdG!NN~E HHxpsG0XMFB]ķ'AqG̽HPyvF¶΅^6I Eb]FL62qzWԔR~= c 儋1杙7HHc"(c*A#Њ,]+_?>qId%  y#Ŏs +OO$s^Yw 9fإA@Sց<{Wk)]ۃd1pd8Dhx2Bn 9TY#m\u'zyʷJڍDyiU,a{3q#uxbA#JR4X;3pGrqtnLk0n"Pۉ$k ;/QEY?=Ñss-xV}:`Gn¾P#H*DP9+G^L % >5eQw7{usq8۹#>@*]F1OXrI"3 S#': #&;u}:5dr~_Bvàۏ]#DB 9Ӿ1I@#O,vԓpp=|t?֘X]ߟ9=$OSϨ=Ѕ8G>"N~Tg xqABz$c힄~|ج9sߞSӂOHlf}=ϯz^7b7z3)IϿ~:d⃒zq'렟nz`u__RzqANPa=9=X،lH9Tu+?68q?4$EWhLF;V@;s57R2pprFܕm5aՠx8G-)Np>b1=bHVsCeC#a9P T׎zT*\`]qw'R7\ ]=t#0 O@xeɪTlU` QnOOvVd>ԋXÒ`p;q]'fba̟= Zq ݌dS[ •9p8<ᛓKy, @{s\]͌e9˒3CvmFԫ0x#xj؉nwA on솇L;6x' NGaڹPێLHpE8I?S= Vt ɔ3#s֡W{GsY6 k v޶r[m@$=:g4<.wP0Lr{qQ8e'}:\p2+ [9P@)ӑHM 2ȅ@PC)=qHJ*] dg;zwVRxgRn=sڎ$3k*X7w9`0~f<=N)ԗriQ #=M7V. |*A'qšѲFKxÀ>Uda=sr@N:R{T:]@pF=}^^6 9%Iw]y+ 7oP2WMD3W F =x4w*I$`9rq$ 5ZC`'%Ur#zn1ZKͽ?PF@@2o 1sj%YѹvfRqܠRyvaIn'H=#n=AInBY,Y7 iv#jSFz֒ܫza*X^2G9=@ uXeiF[v%b 8lp6OJ}n?5@ p{ӧ@ցV۔x)B-8vҝ(ry={ g 8<֣*G2@9=? q 3< tǽ6԰A}XcQ_Kg׆ Nx?JŻ0Pw'A8%i䪜9n)0nc!O$q+TА27;zʖܔ!}1N62qq.OCC2:9'˞"rr0~e\ҶR5-8,@ ޷mW r3Fkrh1_]NOď<]ŦAT`ҾD6Yz1q9^O;(ːϵpv GkaB~k7V*O>+nvX2AKt}~_#kuFSv:69!f|}qbq Y>[9TV.7TE)k{bJࠌ 3HAl?69_)*D'vҤ7RVʓR >o\Far)< zfipJ_ m&ܘ!_rBǑW}%4`!;N$1nÚӲLkX8=#+gZڷti U+9WeD"Ad{sF?UOcX3LܪVR]O'=K5U: `۟B+tmtPĩuTmfF]a'zz œOp5B[} @Xe^BzMKz +k+&UN8iGm9qi,Cj&ilʝݑ|r#G!2 Y'9*cRBQȃ )3(F6О=8NvŶlz =L~,PzvI-?{c iR$c Y woz1k!a8瑎ߜn$: A>րevϡ=sAuW\ҸKoT ݳQ`vNOOP1GsϾ3?r<68sL39`/R~TsAlm#qמ?Z@3$$z9ܓI׿RxC:Tn c 'TDFz 4l;@ǠJ73g=? fxp q?޻H?6AcCK?ӧN_~6׮j6qsAAHNN:6'_OJa*>z6MfW 0Uq`};UBӌCfa^wU܂ʐ1ǮZ̴ȝp0~\ _<;r?z}=x:H9qd}*2@[d #ufl8^t>ǽV;s/R;c_q,UI;Anof9<gB:{?Ȏy r>Lz w$R3WА@OC(،;<`9Mu ╅܋A8Ϸ#cӃy꼕8%{qE5c;@#1/#,~=q{289 ÅeOzSw~o@pe NW瞠{|Gh[h# +0Ǹ.NIA$q\5%fzT9{1NA%u{bUBd0BA9zd<;^ī\ĉ[aF_-m? V,W);~l Vv9o ෡xc[hs27elB˒AO5nLNW#a=l Wvu'Y|̠ \od98nVeVe eӃU/1]Tc BN:g޳/9F >S0sϿ#՘Fwn\ aqb? `p7c9?{P=qՕ*pA^rq^HH<8l:J HGR@Py5"c3}rq~ dFLP: ^IqZ?&1H!y^=9fHzd 2N~႖3G;An!PN瞽p*RT>`{dӧJ&r)#h Rpy xrGln;yOOz sbH9 =ɭS*+-&ͅh'ֹ_t#TV1;W: X2mNL9t8ⷦcP͸' 㓒px=I'ts`n2XN A=>^Ҥ z@3ۏz`1GRY~Q S]a@xqp1sX; m+ȥœ ,Îk-"nH26)kM&_߫ gG*s#}'%ꖳA1 ±o88b4G񜪁˻1ԏzьn9cیc{ |OS5S<IVYל6zVzhFp =wd 1 G36KáB3Sc;s{⠒\cg0G:p߭4}r<N' M>B3NNGɩ-rN}'Zh1F1T(0y zc#ګK`OMOBsSe}qh%Hc Kds8Bn$%1qր'wpCy*ؗ$ cvT|rzmm9݀8 srIrp?:g$c!}0v:*SZs:N@`I R㞄$= |tbIzb8\sצ+J.{03*[q:Оa8?XFTzcw۰sT{HtH,$23k>V]n{7Z[ VV߷;n>O=r03x\+uNx@N@lJxN@9#Qzg b@a׭}_Z0!_9<*=#=ǰUr v3s*B=11/j##p1LT*2;}8 r~n1DO9䎃Q)HaiyPqpF:~v:V2Ej@#ӮTo116+U"?/ӜU?8$ rG=6)PG#8;S|؎y<Q!󑃅 4O|c3 K|^f303={rj-~dGnz:&~{g^ަgv'aϿQ99gG̀{ǭMCJ74#pTCđF!2]2Ű'%c9"gC:ylgc)12dYWFRr˓Оi!s[77uwXLSܳ ;"g(pF3Ҧ^]àޤG9㝤9dT;\WOU)?xg9cОՕ'#;H9w޽sI:2Hr8>8+JNq:szuNj۲d-gGnN'(GG88qA1S?{d9c9A!OR1~U*Xӹ㊶OLu`sb?8I03,H@N{v;S9b}1 >è5v,d '8^0Y[ #zފ,NR0~5 Fxuwxkͨg|QF\2\r[?޽m@#?ZqOk _~F{f~~dzr*.qdSq1槝B1f9=G':s n{5]ܪ#]N}*DF$g8 dpyOܗKpr~\x=^ͥmp:/CǎM?V=BtRH=v IuW>~7:ҭ/=8skl]rx9H`<9qޛBL%1TEqq:uW *=tNj (8ϯZɢ<##UrNO s6TcNp}I<{hH=9t׎=i3>\ q m A~ .|>6F'KcHi'OP  {#8'`>E$0t=91^$؀;nH9x8?+gNG>ñ#8'<x;\ɲ3Xg9#{g[0*}3Ͽa=Ks'<9?joA׃xǥqsԢBc>1x?S֢cHp:ߜU~?{5S;"Gps$CC "`uHs@OWO*;c߶sy'<=199sӠ!|cy鞣~՗צ’:QϮGZ@9>㚛^ajz ~U%/:sn}3IpOqۧZ]8듓ScԟRx0'NQg L;prֱov#,A2}G^ȤGQ5_`6(x}o8ra,U]߰OeMoT;]m1٘7X@BțIH?jn>b;ay<ǵ)NW ~@܎=i\('E5P@O( 'U=@fFa Нxx#)u-A!Q%vVߓqɬI8eah:{gܤr,rdGcl{VS@ sO̤۞PƢ]IN;<1峁;p kI< 3뎦[cUy݌c%zs95#pkCqlnHtkNߗ)\?LϚnciyRmFXЩG,2ϺEגH 1$?C) 0Hluwc:/C;uHF ;OJiQ{`e#KYW B+T㎝d֔AW`i2S0NG@zԯؑB6  RVlg:c5Ka 38sbF 8ޓ!bRz8 14x)9ӁH+`ax?1T؝sO^ 玘37uا 6rmUI͍ K>{tk-Q*Ig>_=* IQ Xql}FkC"ʻ7n\,wՅx S1gN:04#XX{d*e8"*az2by{G(b1Z< 9=v' UR9uK 0 B\7#I?Zg2p 8-ߠ9KO˩oh677B{zQ. Tl+r:#-U><?bܮXۀ9T8irh_v ddI9*gr >XO9Z\rR2\+Kmpcް>XIS;`U^䍞0z"A ؑfn0l.NFrs'xJCfT*Wd!ݱO>5Fh[X!YmN>V |p~뒣M̸b9tBc3}f3rodfZf.%!W  Io4a;-ax*>e'W 5T~Qpsg>⼊򗩼4D$ 9A*q0ӆ=+\㞪@-N26'p>r;i<=7H#UVInZ3f'͓3؜ugo_zuϭhuCbt3Eqׯ_nƓ $I}Lp؞xe E'R}8(?uǷ8} )AP=scAi 1{=_jp#=p9POBRxbA杏hpsS2vN;>##?Hc# gϷJS1 ޙ"}9ǾHx9z{4&?ǡБ4;sN瑌sGJx$A"L9NA99ۃq1LæFGNy#=w@F}Ax?Ϸ^秶 v@;<s_]7p:t `9Oӎ2OӲ=`8?Rz 8#rHJ,H=Ў4qߒ:?^=.|vS%YO@Ch9.oִg[~r NX_0do\\rǝu+|qߞHk/πNP$wk4S +YAn =Vp؄ƀ' %M܌Z˓ 8Iׅ?AdžQ8 AJۻ$p=G~i&>/0Xqּ7J?20x?/#E9X-nN| 98  F1ۥwF*z{a-xy=yKrIP~+#Rri[OR$8TdT,f/;Ccpk~}-Ԅ8m@FPI8' .sx^f`㞹#A$slRa!IBHry?>B4'Tf@9flWNy`A9rpFkF7RxU;x`uڦ[N%q$h'G.VD@5VhzΠVm2Ht#;RX틑B9JhvȰe!#>l_ &| Gqnr§K=_9T$0Ԋy%[ ׌# OsԌI3A [0()̜Wq5 6[9?t^㎌gCg<ǟҧ8N{NiX#VIʴJyU-w?JMR"I`L0;P$931_,Jmos,҄!H1;0jpךՍ6)0eee WDD# @Bq-ev`V \-lӱ$\7 #*]wg Z56O)T<0Y2%@;nGo{;`$aRxL' Y[s B(GIN tatqq"6V6G/Gu]y+,eWxxsޔtfrZznKqyc݂01N{`HDrrQ :gMh|׸uq0B^ o8 csȯETdֵ[[E+DIY*=sYzrIZQ;/W:.Bo9$671\wa\p8g weDòN20ބpFj@݄+TU嚇H?& @޹R*Fܣ8|jKp"0Nx C`gc?('B46Hz/;P03ۯ:b.ݸ TcǣcI Pma"\ձZ6}A x}'@Vv_vpߕ oC؏ ~@=˭,*Ow)P6ÜT]K+I C*zAԅa;F!ઍF9Njt?U ΍ʶ@VN==YDQeWt܅w}CV*T`p2:ޡl{8Bgfv'Uc5ڂHѶÀa ׭%v.qMQqܣc!{uxCoߍ y'KF9og;Ny12F@'CXo<&'`XdM%B@]Oe>we$2rŶ)xIzi=Y/S Ãʑy8jNO z_4>HQb2Bavu1aP JpLAz<~ 0#=Bz`u9SvqxezV#󵂎=Ԃ2!Iq=W"P8A,eF -(z|;*p63:}ipF9@9mMV"FWCqq8+&1L'3(+ʞ=&ӯ^AQn< tp&Xl@\rGR@{ *N89Tzc/#>Ԓy9O֥J$hl=Kr?x$t"\23$sN #bly Es4.Y !2s})cn2[w*[%xی~4*p` 2nn[$9:mEFt-'!s2I0;r۟2c&Ec*}޿( d&4nU ®2[#CU gSœ` ~uܤ+8@Twg ԱHavI pGJ~`͵rѲ9w$ dL<# f G pI9h%xǗI 83ӑdO.yLH s|H2^.ߺH*6N;c]UHC`rOQngq~$', vTRc݁J^ENX|#vMlRVv ߑQ;3s)m}c#:H_̠,Cn >n@^O\Ucp8iUI,[לڕ`d`' eV?6?zqJ`y8g85pH#:zb‰rp팞OO֔\/˴c8za^X2N2@{<Ѵ` p1sJ`2pxϯ8򦬡bGz(wJʻy#C|c!qnCC1?#z2=}<=NzS9cJcq>r90TnF~zMsNǞ iź9q{qEde$`t?p~vy'#9+Ӱf*r9$rQ1OTLqsp*)x1U}98^;w?ʥ Vxߖi9GB@=8ϵbKr<}qvX}TrsiOFIlsʫ1r1q92sp3\jF1 7(u+ԭAPOϥy؍$9#q ׅj6.1;H`{r]L)An{CۑҢ $Hq~\b\u\sgsMZ#\p27e#ݗ1$3lۃ@`6np=1޷:CpSS Glko],dvsU8N ~^ ^ZITՂk2L79pہհyrGH{ €NWJ=TT#vyjr}9R8\ {9VMlu1B>_&AYKۂCYL^G H1B78'jhLsmmʪ2AcR q790yFlwy1מl6r19WK:ysn ޼աGHt'AG+GDv3]8ebnvyWapnz[S1csu+S7pyKKc>8c~n1 õ0DұTOW īLqMtv)'po-YnX%/KH-guI? ]6eY ъ'ksشdPlc#}/"o9+/$b* lA|e\{*{=08#'q\2~jq-8rWNpc'=OTYeG< B^@FqrNqpGNjf#'r@ Nzc hs$:)>'^G@F}pc%F8ϧQЯ|cAҋ+8ө#+F2~=r)}OJd{}:F{ yNß1{6zC)z:YysU=d^͡?7|_l׳>s؀v3gz`޼bA clץM4os.vrgiÞՏ_N2HN;0r3c?38y%niG7p8% s<\΄qA}3sӌ,'נ hf?,z*@ 9>\1ty=9] Q$={;@G_F8I;=8`qOj\O.3z4yzzr=*A8I9<z pn A-_PAUׯsdpryMu/x'qq9_ZэFsʅ8$dg?HGJKg$GLIHr#pn:csIv¶$Gf1'$|tkS+$Uv00H8랣~l>;?iT{>?{Ԃ{.3a=>\9`xPN{qNO*Me1t3f}cO*as) w LfN:pI^GZxIa\~?ViSrqz {쫏sĜYy$}=}?tsV|4yp2= $_/˜󓃐z~=r)cݶ<JxAǩ/}? ]JH }ֵ8Г)$`'#xV*s=ܰǮ1n=9Ԡyq=c$#I׏n-e=G-vwBF;v=+7!0Fx=:82I#8yNΡXghߏ]sA2 +2|C򺲷L%hdGU9p8zgRcEW'~`1>񩬵 2MEUI5Cا!N '֗Qު58c(fLer7L \y= q9>.FBqКFdVm_+SB%ys /@;jJGSF 09:M X_4{>t>kHdy]O͚A'n܌{g{'w$J0T<|Jrʁw A\؟(oЧe&(C>`A~8_2=é!$'%Uppz{Yՠ4=9c .zc Ĝ(zKw:`r1Xr+^<sFv`K =^8%`6v?Oz;#c x `ǭU*t`P31I%A:gJf'+=s#gt69* cqS#s:pOlq7&&z >NI#3V)cTzn*e2M9㓀rFTJK`.zzdzQon<}2xtirn8ԏڵ[u.1 AtG1'#tϿ5X꡹,y܀{cjҏ'<G9ן3;pBn[j'9$6I?8zOngxXiA'@wqAw("-QEXnGsNp1v1 =hNC'?'Gl`ﷀ bxz#~=78%J|ubqZi|>ךTjJ&w6X]`m=yWYX9?B5ާygoA?jaA'szһ)DJD qU/А3uNqL1sh}kB=SgZ=${,灏Pzcv#jw^#GOCO['py$zBy:㎽]cF͑.A>҅G@H#1ͽM+F8 s5rǟF8F3zڳ7O6A Ig.3ӦFHN#Ңq_W1? XA`a4zvFH :O8?~; ^~ngO#֠$:ݹ5grz6zdԞtd4I9tE <ۜ3;~E'<{.yaOc$GSz~u09^31?˭K(i'8<q4sלn;Ite ZPd(si~/\Ku$t>CВ'={ G8v{dsy2\KZ{~3t.HVϵy {r}]g_iz 1rvayƭC>8  x~hq=`dAON~vÂr0'p )+ا#If2VRC|=zdґ$'pGSvZ)e?tnZr 9XUKC^k6`6鎜M4Xѹz^=z[! .8:__J3/>2zsQZŎJċ$gTz}e󵶰'A!r1VքvRw -=j]|~}z*d x]:u 9^rTH @I2G0pr$t#=x9VRw&JrGGNz7PFr ;v1ԍ'1wu 8zғʲHH998ޔ\+s;WcX`b$`8qHd~bNbS9QqGXe kY($< ^ʲEnSJʂ!''c^.)^o՝=H|g|f4jy$Fm<JP˅@vN2VXiЩQ`j_ljWjm# H'8㡮hBlrqմ=9#Hc9SQX˖!pXmPyܓlqS37wr2iVfh\>:l,u;՟ V 9j(C`5 8/r=GV\I!bVPp<@8 g]rqߜjQF<x㔓,PR]J=1J  员I`cӭJ/ٰXi={w4Xm딕ZUqȬw">/\⥷{Py]΁vA’ܖsR-%@ xDSdIl1 ]8RA< Wox6jD;#vmۀq^jar͂N+h5]:[[Y!Xw(WqZzݺ@$˅H8v"qQWX?$8ѡMKkKssr4'i,>V8?y,z׋hH%ss:#䀹'czvù 3Q$sN}N6g2>^z\~Nz ,Zf<;d:QT^>:{}}}*ҹfGc1g皢>=;KGLv! 8A5I@<?z@4쌞t9$#N9p{^}I')*T tzЄ>S8rHQg7ggN0As}Bs㷽!}h `c;׾x,w.tNzzP C8 8Fx9mCГǿiH9mǹD@Jrsr{sKקP0a?M4OQ\ scq㧽'<)'ۑ<Qps$'xғ1P @x+~[X7吒I $}pFkr0q2灏`Ny`sJ;}zTBdQ%N@84$+<۹zU\<:9#֑&V/8PqGQ\1gy 6~` 0=HtFG$;ۗQ V&&E=~huLex={fLɫ  cE(L$\4Hlʇ SMecpO-;f.%ebQ t# t=)Ccp#9yN1]q&ayjxro ێ9GN\:88’3\`K<.=ZiXERE',~_|Ĉk&v,ʤ硫AoԀ>e2I)ࣀ@PWo.r6#*cz|7 #.Մl1. E̅N235uv#k\;J9niǸD6G6o\dF9QU"tIo$l.^l߾:Es$(74AA 8qye$-(B>9a@5߻s9OI)`$\s<(q9*_ԷV9@0GN1R=Qq2BPx$qr;c*0=uvO@dW= 7s`JG1Ǐ?m 6Si(OH| [3C3R=?mG$E"1sUs9M85nT,_1q3Qgi2Y?xё$\^yu E~'f-z֖$g$œp1^X|V qz$W`1չ{K2RzֺQI9?1'o½3Y5nWr 1tZF Yo'W 0y^ezKvGF oy‚Èٲ['9#=*fx =qW%GHRWbFH=[qt>I-͎@:W&i𠑔`:\;u4!l/FfyrI c۵iGNUEƳ' 1+y|y&Flݜm=;fK_M_CA7X.pgªKI-V~1]qhv7lQ32*.WG HZǠ7cV!sx=K \@v])WyO$O cz  w=)wX;c,N9㓃ORѸ+3m`Fӝ8Lli@̗UUv!N}ɸ?6HׁL]~F,^nGΎ0v:0R1L6pC{cH= o:TxzJ@eGEh,dswlcPԟf$eYsۜ?Ƥe pO9_\r>fExJʧt N=Whց6E}7 \pTpsO#QΘ+#dP9u :~_J 1ݕ6p@n=jƫ^ݎJ_rټ/@#%Nv {N Ã2XlR+S#E9;UЂkd g c WA88޼px#[=F@{}xԀG_-08킭?Jaд=@p>~~lv3V8ެ,HA!nf;FR%sl;w6  d>(|W!>3׶*Rx 9=AҡQ[#`7\`:cW<g,8 peG|UG%@rXբd`办TuurNԃqUЕP*ۺ =9=#=TqX dv!Xp Ky{u5].\ ?y;&cSc3)<.qۭ7st[t8<sx8OڸP_L~ԩn -]|Hہos9e59*| >IsktY2.pJ җ-nzCPYN 78ϵ}#b ~8 ,uW,0aa|ïŜZw(Tn' xr/'qjn~8oօ#\ 8w>ۊOӷ÷OZ",+r?9!3d4ȱ0CHl]>pH:zdZ.".H`OOQL뎇N9 s=~cA^[ y8!I<#'#9<8oZW2#'iVt<`scӷ$ rp0193Д[IF dqwߜ n̬z b͓zϹ9q{qϥR-nx.*"6*0  #<x'99zqkĐr{`r N㚔3wvrG2jz1Trvߍ(ppxϧ&I yz8@Cv͚On}?} D@y8Nzc^I8Q_r;u)2?/g's'uNp6H'>ް-2LwATl:) G9JH,xC^ 'pj[yzcҳw#+ ?*( Fz *,Ze@9R*1BzH 1'SbмmǠ'֮g^ip{uI١9pAH5}@鑸| FrxSRhucF19sNcQ}{ZV璼#Ϧ9''?ҥ l9p93O#9#9f]K"'iדu²e8cۓ6sH`8Oڜ91 {Ͽc=;z?ÃFFy=}N9`0Cn0NOQ[/"=rgO$f*$19 y/CdWXITcws$/6kWnE,B-v UKc=h+ܨũ-<%dB5xɇ`".g=W=x_-nB01F̮35އeq"[ v J!fUT 6<lyqܟNơ9$'|LNO89&J p831SPچԳ8yGjӯ$PU-i\uPs1X%C؞6Ss+rܜ'x8 fqG>霵^N!ůd7N-FU#sjE`e%RKW81Wx6vò2Iޱd-s~~oR}|5""H$<~jiWP]$WFt#wDOpܝ'cBqUO6FXH`'=Ǻ:KKBn١ܒcrI N*y+rM22mqWDL0X̫Nxʔ#ׁg]NeojZ\ hW"Xm,.%P-$]ڱ:~a]7rsɲCmrPH:I.B7vuj8 ;#g^b{۽C(~ 9XlL#%ICQ2t b@]XeIBeB lkǂ%@V5;TTqqt,Һ ;D"UO t=CSxwOJ{pjKȏ` )7zF8==+oOS y۟z$eBNr:#Ӌpfs8[=mzҵ+XMZݶyU8gӂvN2r +3ksO'dsrO BG0ϧ8ltZ̛`s}Ois<89#r|oGOZH(Q\#$ZnPrskCף #2F9e?ҧȈ991CQdcꩱ^q=?>j#8m=:{b[qs#T$'[Ε(JON:J͗T?;Ny/#h y?֔}qNԊBca\rF322ǟZ{< > A`y zڐs?)#cKSQp@JҰaߔG'J\DYMg [3b1G?7<¼RCG@Tqq_ez Wk ˀ2F%S` Vs}ҽf 3cid9'4ăà~'xP@\;@+ۯAN9T ǯA'ĨSq\S7Uy0NOCq+6b0-FbrzCr{SfIjdhU _k8$v 99I2(@8&9ou)$#IRW8An`z(JɶЪğ/L1 cX]hQm\qȚM+'g`<v>Q98ϭg[ _ h?OSQ-i 8+bRS ]q+&ڎYIJC (Q=.jڬn@qF@&НS|d{ǵg-a&w.q9ʄO|xzѯO @.U/&2vOu.w?g,?'ڼݑۛHyZn#Gi\/4 \P߻T wӏJ|)=,y^Yx¶Hm ϯ\{ClHX={WEGd8jtpg8!NoxRm*śd|'= b&h(~pI\Rԍ'%PdɦEY$!ѐv  sR >Y19/ C#*)I@rrN~B GRjf;zPwZX Q߅$1,I\q\d}:к$d~pۏ-8 cN(Ge%$}nzVS6wP6w+eG>'b@ 9!Q2F'u8N72p3)y;ӧ?{=1UeD$# 2N$ hE͑@9cg Tg~ң|7wmȧdg;cR0n%ӓ dDY nnAOq0R 8q'l?-}C_ߑ&oF"Hӑ '96u!RBeTE^<=ܛjб$assJmgC۝:"0n- gt2N1g5mm4]?mϋfaH$Z/3U'CdVFD6 7嵿S)7muE&E؂FCg?93y3u.BVE@&bBv#vGZӺEo-xxBygM>0E$QL8w(Uַٓ+*TVFavB!aA';\d[n9w94$Z0`(aݟb &5 ҵ زoȑrѶ^ޢp̑VވI1,e8Ǩ}mS M. "FOJhoOV{YFS-6ufBҨiR~Usw7zltZd~im@ŵ3aA <^TW_V&܁댎FyvLB'Gqtu[ qJNHߡ,N==:]ޙ0y?Ȧ@r'FGz9ԁ~gרsM'둞x# &H|GPN3^FrF1\u.G=GjNy;I\Pv1C=N883NC+.NFGɃ_?xR 䒤sϯlG!mWx F`qz0<VxW\6{qY|r0DR+QW޵RIPUlx9yH\QѯĻ-$}@$ ~n}=sQG]N\u#UQ2ٷ=wt<9u?.Sp qzpG5'/7]9py5a[9IsxRw =qZ[Rw/y1}eV9`,=tx8!v}Hn A9qQ}BdTcr5$ "Iêe;K;`ޓw*(VPNRxR9H'^q,7 8RzTin 8?p`Q ,e2n㺓$ sSpz's*U>ӈ v+ NI!b\=*VdLbq8'ڛ `Hla8T 0(|qԞD&A$8df;f=cNs8FI>T.29?2 p@,S#kmO-w6I)g)w.&!W$3 9v*vجA>4֖_@m@C~0 932rZ1G>CI"l:I lr~YV%*b@l+ƫGs;?6xu)dw2$lorF8qq4 R#;5PW]1s~[yo;I(ԹtyXa2p>jeTLQ\J6%FYIcֺ}N{%[m|!ExeT-ڽRXDXi$6I܋v~b8ە w$޹3ҠH]H$#㞞R*\ p) 1B+0$'n8(K3EPQ$P#E;"tYr@zָFAl! Md_铒Ԯ ^IjҾE|m @LcצEl8aۜgU)$}fOI7ktFѱ1Y[=v:朰18GhJя̓QI@'*\A';H#:I2+FsW0|*̠ O\W6!o<3H{,qB#߁?0`xq1%N+\,,fJfe;$|9[H!PFFFFvztoy8dg_| yٜh~2^pkt9c`F *A*6rW8ϸLuKx#m m܋ц6ݸ c,8qՓk$l9,UD'tX9{ek̛$_-/Xjŀڻ%xQB*2p(&LǐT ]Àӏzp~x$gnKk :o, n0:tkNkE2>1lo#8u`%8Gzs^EgqlKQH$p}pr>F 8㞃~bd>qRyValtN;Rj#|6 rA^sqTl/SIL pz $cs^P3$F *nI~9.mGˠS;qӂ>ǜ8UsOdd8䎇8799=psy!#ǰ>QrF:O88\SD\3zSQsq"PF 'ޓKlza ޸zuϴ 1A^Ž p87> #j?4Oק# g95|g$q#j${ؖc.M?!0G&2܃w\ -pscמ8Q U0F3ČAߵ"D\MN$ce qqQT'3w᱓Sɫ{5/(~8`tjV!@9`1z8;V]{آwRd;we\vȔ۷*iKWs='H#܃+ޘzc9p#^3R~AxjbI 9ڸ;}= 1ypG,::񎵧cn rNx#56̨r*0H#NFmᰯpN>2#=NUWgl2Fr]sf"ڱ"*NW==N8{Xx>oa"o\0<G]gLӯ\y5jDI8sy\z{v!gyϨǩ@[m;|ǎ*\a<'؊n|[oZarG7qgsv' ]<!~%>Sߨ=9Ts ^['jI&¿ 0$NOADHONp8ݖz1^/A2y=NF=qÜcQ IcO5`|xs~e sIxǥBcQs_BG^LiaU8y?&vPpn09kNczaGҬnǸȥH8=F͞Uoz(urNr1=jLI89ϭ a2 qH8 ךӉ3#gc})S<ʦ㷮#=)Oz e׏Z(އ8#=x1= ӞT=gT탎O=E.!883j.y9 sI<+ @GI\䎜ϭfyt/a8*F2}12*,x9_S0q`y?(uh%s~G뎵0 {FÒzg',rq>j=qۥ"s=HOp~z=p4ȸcdny[H}8HhG1xE3#q=xV?qO Ax'0@8=^9Lj@NN}G^y r@jNriAN7 sZ1{qɮJ<٬[XZ=ԉqI,B |s㯉wڬDX؟݇PmV!-d{L]evNdx^%X9;|Ű@Jki[T@-L>c4R–l p1ZjyNsO$vȡ'"#[VdX" K"JuRs溠B[+uẖ iF9>ƹC7`a8qL`jmHqBAA(Mm;3b?.9**gRvFdP1q|U-yW8Ejzqy`tdwapqֺ{kn@r ,1<P6@13ۧ~ط̪ڤ3uH9$r8Zkokq]^CmKjcK+Dʘ%1kȉd2Lxqz3܀Xu^_c2a2`PIpn#y'b8\oOtCz"9*z{$p{ eUJ.\B 󏠩A؃ah";e{C\b3i(yJ7l`7~CMƇXkrNZ-k1 pr1tmܜ#999VSk3N:|z\-[K.c!]]IrZhڻv |Ò^qL{'r9[kU`@MC ӯ7er^d+mL#p t, C,pi;*Tn/^ݗ[+_Zj3K/oJVa8=*Ι]Mo%qlpAhJ7?MКח^W:k;鏇fuK7kŔ&;UReJ9O-qXy6E,͙ $֓W:+|Xխ`b7ݏHiU-wPa =6J@\|L00T g~!+O&|=ƾJΘ'#/1~U'"]dt2Hn$") v档2揘A!@ z?8wz?A#4R\/<ǦOn1S,*rFy!~QuZe9o<\'gpr}qȪǡf#f؟xI 6[ ;tv>{nN2A< ~ޥ88#4KqKt 2Kuꧮzvn; R&q FA^N0g'眞zpxcAۊЃTU n$npH<NT 9 zq\5ZFsx|rpx<tV#,Jpy^g`z8F,xl-콇n z:}kvLcFq ==0zW|Mm鎃 e"ۀ1sc1ꎧ ٧#^?jFw`q;, {zSҤ# F9G zbD@!G~{IHAǦOZi``p?ӎ)u8 ~Toޓg?ӡbB;1`O~j:g oK)2&^N8I=zgxP3߂ 郞5"+6IuO=8tVM-Jϒ>V=NOf`J8J$ }95E·}VA$p9$O1=:dМj^ۍF̷#$q϶xbUCX⾋)|vm'ݜu`ܑz(vܒ*w ^_O>0(2 [r1xjv.2`JdUe 0H2@VVq`  ǭƛne$ t}#prU[7^Id"TNHp@랄}>5,Ke1;~GzEEs:0qv$=y1\U~L(ڈN@*AtN~pҔb͌`*۴ 89FE ,G;F~I(#`F{_s[\r<`?y5`6zAצEL1+y=Vcyl˷sۑ L~U^@ڹ#?|1Y-e8%~ubWTE11}*3%(>PVE* =ElKX,shEdq\@$N/"^|#gxW3o{ H#FND'=9^[p(eG\62W}zS02oNY!mb6l]=9ShrRrw8NzMe[3pAPvaQQBCB/Av8SCH!Qw{vk~jZݪ @ͷЊM3sYҎ۷$7P? m̩ss!s}i\l+Gc=?ƲkSk?n9돥F;ʧ 3g)x8{0d9в;Sq$'qx?^x>Ҷ8cIN;qS|.^A u'bx<䙰0p6O~(m"H%.rAgf%TEchUQXP˸嘝Ŷ$VFRй%I9\#. O }HfɃ0 K`8$Q᲌` 9nka|Nv27N~գkuTrC2c'5gwbMaql ʖ?BN)`9\1 n=1)p ?1{8g5+NA@;޲rԥVH']pYd$# q)ܒ0#A,N0E *p H%C}= xЊê|N3;U*#\?7I0yG;x!)c'8jы |7LczUWVw]H@۲ )^ |fb_w,x9ɑv,2دryvuENئ?Ƽr c5 1˙X.Mr1NUd>rzz=iDOs>ITCJa#)0r܇ln<✊X3tcrSp/0Qm$|sQe(``Myt/rDn&'@ԂTuJNDkw>xnIV72GA>P2O?E@dxcXNڄ =xƫGu#9b7Fკq+״6 ϖAtTѬc$ PҜ}>W0o39{-`0@Oh=DMz׈tmkH"$`HvMwPiI՜\+v{cux-Z$ GG,FQxmRnc+$?_֯ȥm"QhY9e mqcJ x*T߽{dQMBeKtO<DOI0Fo5Z͗y{VFJeA bYy ~eIR3T̠pBxvECMcFў:qTWr d '+m$X|OCc( CNKȭϚU'/ 6ԃ);3"X\H_9 [*xZ#M=aP8'!ڼHUB$L?1n1):y`i#QE3*d8ŸO8?<լMmT\GNǥXX0W?;FB3r:juWRm߭ϲVZ-x'Z@q ^uB(S! {: ު-EDr8za-88'޾lAwF6svӓԘ\~ÌrIP1wlq睽858\dq/G,H:: h pvҚm98SLi?{}4 gc\mg<;q=IO\|o*O+>׃ii!x,d`T$Ґ4(9'8P֜'#8QTA10CۏJ}>ǡ>j7^vєKt0ygmPRXng=N-nY>>c6$#b†vQgyEe[oʽK>dG_oť|:|: PgC ewֻ@:?KDxsjvbH''WxS7)c W-YY[/4|]nN f|\Ƿ\RC*y ќ㎵\1$1~\ n$'|qǽc\m 6VaJT}U0vm .=1jb+nL2We܅vˁ-F\)mh c)a6ocrs^;Ckn-BUY# So%Df*l%L0cO8> >sӓ]' Kc~_NEvRZZaG|.gl R{C LI?j]7ͅ z}5gVʌunE$C ÓW<GLڠ 񞄠NBO朹`+b &8+A$rnܼ"9Ta[s.tP@ǮG=~QL~FsяR\x]CKm98邠dr2uP,z @[K0p(g$ٔ`\nIUE9yLSN *wpCH•Vp1̼8Y΄KpgdoI&YHVL^26漬DߙN:$n'n71r<>8I9g:\q{tmx~vߐr: Qj×ccd@FFlnA˨&A^GB@bB瞇֑IO 16T@yj&^y9BC9=1M3qG^}}GZ90σ l 8}sԂH#Q>QibB8201ZNn[ >QzIe)8GdSHowOz@?OFj6@G]?=+'}K-͸#p ?pzluQUq׍:KCȵm3qH$#"mYuRAʟs^ۊSRUO+z 984zld`N:Z.Hx\ ӝ`8TViG~098<ݧ9'=zG)'})OyRr;T3D.G۷o2~I$>WEii 8yNƩjza! 1uֽCӶTWw'=sڲRW4i"|6ygkӭJہ /~\ׯ;;ĕ!,-s+Ty̍}|o܍c=IvH7%x̛A+OR>ҷyVlLFHʂ[+3ҽjOFY$28לeysu{Siוp39X[+1a<~Ss[Gc;13J9GL^rT{w#5F=J'`7rIԏ𤑸89>ҧ[#rKmepNIp +s U] TQKcWlPn* R9CӀOaOd 3d0f,ps;ޯ *nsR.Ǒ0W9@9і@TH$Fr[8ɧc^j !ۏ,[H''֢=H98S2={pz}cq8#9Q9NYw ui|o@b=XuO^NW2cJBܲf wa지1g9^(qlq׎QϺ$3'珧\{qsf>7lcS{`'>s<t99`݁F^sB``3~=zސF@9lI⛑#9c9_a1' zB8sqDJ<Ƥ_yw+;ujh6z 6iSǦ RE=n6x1O?Lq֛1 9>|~8S.N@^9p Pqϧ4 O'>9~ơ' `89sR3x-zx1֥I(29r5RqIc{+b ӎ܌VUkE^F*Bu' z#=MyҖwוyⱑHۑǐ:q9Y>Q&Q=:^$myx4Bc+g ^?L㎼FrRqޗ0( .?9qYI`1ӞA*.H'څ%Ӱ'pV 2W* w3Vlb⑕FTUX ־6+ɏI:zdִmwo C 'h%CsVıT3ɐPGp9#I+]rLWf ˣ|׷W q5qFaEĀUt5K&y} qsi"̑3-9 sU0*XYw|Q9$eS v-复#BkkB0(Vo0`(1^-4e"'Zb4Zʋ*B*9WkamfYI )Le$7=MlJ.]U 協''9$g@Q4hRfگ#h銴D]OZp7Sasi6-to ,d.?L>ev4V2Ǖ^(v#khᠷ "Hʮg,9Nfo ܅dURVح9㡤K{ [5÷xPO8+&]Lu{djW}}H1"nNwr:Q&͡O+YA Y,KdgAUl@r~H_0>PUJ_CY]OȲ.-JV;Hk)| H6?Lf$qf8'X4{[ӠD[pyhI`^y%k!ddt/iu*/.$ ɒyغ9Ab@ u(iS$rF9?1ޔBW9R@T_F2* ,1ш/ĶB8e|Y}zqȫpjedڄN{ I jn6=G)I7gU`wJ,5+d9Ԭ[hZ*m,b{{t=ڔq 4,4y ïFM6wk-nRQ[ߥλ1Kkפyk1"$6yiZFГ<0#!A8XTCOt8xuye$ n6$9;y=f6QО$/-դ X3NwƞO-瘫q%őaA'= FJ7+ Xy׭?ܞFI#S\c"9F'*Uql#GZ@&Q# ~?ZkKVzՆ!usǵv]gUPs^ey3L6Ԣdqc&8r~PTsFz]x5evr:<>B}{]n'?Q;:fVv=*1tν=+ԧϟVuB8<6W )?N8PyP]g7ӌ7s};ֲ.i':czɪ9{s:g=\T{b7<`)uGA~I޳QF獿ÜO<9rWP7I'sC\VB{#u99kT2qoJVR#nHdלcN:'$֜W<O_NJv99לO3/@n}2;sA9鎹?Z3ڦn<8Z>cx"^'=3T5hxzn:_8gÎއuw$~9'A83'T:qqԱgGSV΋"߾0Cg^yƩ.rx#_&"Y *#Wү5o[Ki C0#?)^A>>ã~leQC7O\W̝DEz%s^b2eu##XUåyLu\0T!`:׳E{#gt1n[{dSӨ≗O9NKqV#6 KH]9l\.vѻ$}}9m‘H$7r=y$AD^qɤd1c$` sM'),X*%z@8Ic@1xPrf lrV?R}E=N^j;9ڇ T~pwA;r@ ^W#J;T@wd3~59c'E[ܒ9PIRQą cJNr Pr=y27ŽFzun2pp~juٴa`N9EyD+dAאOXzؒ4i/[͑p Dn%GB|x6=y Q=qRCE,C0|9g'?)SsUfa9yR2r涂[83ZiO" 180?j+\J(\mパ8BZԪ-uFd 7+ #yچ2ȳ]]2DswH%s1Rĵ~>־Ζ&IJHt'9rm$fgUE,g0A֚Ej7I$#\)FpFN 8HX!8bGȑIrT3)7qi lu3H|Njk{8'v0B H>So" CR[d9t]J]]330)IEkyĢI()5FR hw͘ș^>r}+'Mgn7dt \瞜sz}}:W Fs FHs}?o|猀X^ i{1>֢cϸ=1hq2K |HPӑ?6^k9r sWϭ sXJs׏U#Ԃ{gJ)[y AFx@`F}֛jPے3#1*?$ӎ j'w/9#4H__Msd`ؖ3z_/e<{8?Xa}c)9>t ;yO1NGT!G 3ǿ8g=}ןƀϧ99֚Oqxz7$puۊVW$dqq2)=v;QT ֜|q~sԜMp}xI'oʐ;.Ss~t! ojj3#- #W]_fx`r0UʀÜ cE@[''9^==9ifDUpz.LTS`Q-L3d#r7}ߚK*Yʠp;{VfrE2žVOl:ԁqT ^8>t"NpRxA?1Tp1 xTVȝ?/p )>Ϋ1.1~0g҆/`ݱ,(Z{cq(u9,9m9ぃ FcQ\I%Pc՝p}jS;v'I Pq!X0vP~mğ$Tӊz)f +&А2v1lbG)`r6q$7T'rlM*;>g=8i,KsOE|q)8M:?ZzHmA̱֝%/6B@,XĻuD6fÕn#*s6L23'*6zqִ6K,I1'/frFq1nteFpi2A=3\ɳp(у3p3ZĔl- X''I~b9x\~5/Z䑂_7e}Um~Vk׃G1ih\T2'xU=rzsקJݑ CfsL*pù=dZW3u'16n ӞI>UM1W$f9DR0N[=^M]j3x5Ȅ?,H āy]-\EmBcP+g# r+ѧFך{~ i~n$\rP.aH^-EnkB ܂cz;Mf881cD~V1IWyp#PA$`>L]sQ1{V%ăUzmĭrs\4m|[ry\[̦8Nzz j#X {[mL1u:~~DT<tK,vyc@I6 }0FNW;#Oԕݜd LlB`T nB̞|*#sҐ6Θs>H20I,X p9z5Fa7R0UP=⟝'.po0sIYmq<pz=F:oxz~TvEO~W#8/z:~\ pH+niIZ/7G9f QbW8lƵa>Pi2rIN0T\ѳ!w td{Rl,8,;8;h0\n˪ubp\؃ǜAJ# l&dB>q #  <spS=8I]w>O׮=ғ`=>`g<A׷o6@- }IFWec13megx9[|xۏqs)Mcɨp"cU#5wZG$A xC>J䯱8o~sɞe*Le6. o2æF e3crUJ=8=2BCdgPrH8Aw zkx-lBFr~P%_zұY"G&J܍8::?̏z\l2~ 3`rN~yn#,hpTrԑj3ь*>*GRq>X ?Lu-gkdX*H>$b8-u]4qViKs~`8㜎O:7Sݖ<t&c^NKdU!xSl;79>Մb%~Yc;t wm_>~^>.kyI]6r>rŜς6]u~gp3O8Ba03V!Nq:do+ξ笋$F L$' |=ð<JI@m<_9_=J2Q^D˴' sX/${U?2MǑ\skvTK)@,J\f#;vG*1Kܭ :cʸ9z&aBIc6uG'D?wcN3 qz xxZVǥIhY@?/LԠ$qܑZpqS$n",YN޼:ޜd< NT!=1GF !9dA}  `8?J?1n:Nojgr$Gy0\O]Oj>gy'}0x}Ӝ|r@`OcBD>ssy9$sԞZO1hɄx#:L3~arFx?jӜ.XKsGZrz?Zk\?!\X3K[)J9 ^zp;4֘Ts;ڟ>p\FNTѿV9 0sFp;Х8, #$>Бqʫ\z~ww&ڋuK8@u/OӐֱ.p gc*ޙjV;7R@9岻8^'{i QIA$dd>쌐zdsqsRð$g@1נmaX烂$Xg{$SAxl#8'8$cS<ބc81sۨ+31~jea9@8OOJ +猂Tu#G*]{眏NɢvA\l;Fr?.}c8vݛD߶O43VB>zu[ xL{mGs4{Bv_@*HwѬ.sס޸1.q602GB8޻E%#P   zןRwFrGX}L8e A@' ~avbI MÏ_^[w?sQ1;M*玃=+13@*0r;WSfE=',r\|͑${jE'ԃ s_ y7 cq |x#lV[zw8>Y@$+h .2>RJќ$8TIs1߁ɫ0_Nq9qb?Tp*͖ʑ5&ˡt1wxA??H=Ne`o=798=ztJrH;B̀X=8oRK)Jऋ$/G*HslotgEIG9tjsInOq?)QLx=MSMh 0;CIp* sr{NUW# ($ ǧGrAHRBi{HǥN>${n#א0hԨ2pCrq:T8,7~;zS3E1u8?m @Qm_J[55e9c+Ii9#LOU0O@#$< - ˜ ݻ ܿ.V*þ=}N?G>Bu< SN#ђ~mxp:`1W8rd$\qNr\@.8iI'?D.\d߂{b9F~|}q@qK0\rTu'$c}  q9 {qY3߰VpqSPj&/yᘮ0ski,vsrP~ Z~gAi|ؕ T+ܒGLyՑ򝠒:ԽvDp=qq۟v8,;nq8 T~P< y 9矦sEa{z{ }9I|^W9#S_!N63SbMǡc7pq8<=hh|~XG\{y?3o~=JQxA?O\VK'>~;0> gxϗ"yd>: Exe$ɽǒvyu#5 m+ݠ8ѩ];FMe~Qܷ~zJH7s{0vo^ܡ؉MʱLQFYe(D*GR)IZi-(ScFU|tBm/R-k1xFH\2GR5P@9]* dxHto7 H̡(P3qӹU-R)MHB)ͩ'z^L@3ZA5RJ\c 5^\hڀH\>ռG^0Su׽R/"Ye܀3JTJp2 nA:n45d9]a G2Hҭv1#tA,g|Rثt3yAvKy7vO:M];b0KR0Ͻɸn T #6 L|{'6oqjV搾 ̼*qR6:[[q52$Lr*`jmѯwfގTZV+lek7q]ΗI$*34T<rU wO[o$5J".qc (hZ_&G30YUrJ6.'30:T$kqr('JBH'5 2m?No$2S2A'k{`uB[Z{򨔬qOȵik [Jәp J%_A r}^^8=Aa jOJ%/z%;^uu>Ѿ|Oc 64a 4*$“;pHozUy ^ػG16TgiO-{+fiN4Sڔ"6FYx:z RRНH58j=x;/\y6Ѫqij3H~|a6zCC5İ& ;SZUP5JR];ы NOՃm_46‘j::@[ T@pvZEkk$-hi".z+|zWR+v^:]>s4m"L(/ÌyzX/A1ri֐uRk1b8Ն?+ͥvΪz$dF c ܒTjd$alc yLz/-'UF[SD PF11ן|TƗY&9#D¼'9{\km|,<)\)&v AKy9錃0GP~POOlBzzՁ bq^;_R' s9\V{%bǁ= 4 G3׎m8A'g}Gs!ÿsFqb'=95 % d`Gu$GLsQ'FH蠠 A;G78;xːsnt5 9\7rq۩?JnȺq42pr=Hq8ݍ3U7ɆR!ܤVztt;hwspG;^X'#9ghн+{] {'1׏άyX`I;q׀T8A["XiA]mSx#mO04䐤0s'ҽaOCg{ץMcN w8;ִKӠq>YsE6~Q\RN>lIt2U8b,&0F9s9 IQsga~p8,.$Qښ02y$;};1`|ybMF[`1\] + c>GҪLt@"L p?!$aF b=LQ,g$ 2Ǟ޾QJqYJ%)*GN>pW۷a pA=y_Yg?pT7Qr1$sިuv {!pT`4|(Qt5FOr|?V*0)?Jw?q5fEgRp8Is\ŗ{(;H>>V#I$ X=y419R ?5qt9M L!s #9瞼S_ݬ<23$OLsޔpszV\0z)qbOCqF>9 (A厙 Ќ+!ʐ,j|A x뛃1GUW$8KQ]  6qd ҁ39-[89gTspz \q^:`;}1)_q^W’~a'9һn{Rd*Rgcw1jJ~m>[g(vƫ& (bH0^}+U!Jy=ȯ QQ[5v m xݳ\*6Jk]Ά!ݮҙ,МgyܕF@ҳfs ~ zqA8q'i;swzTʀ˩SsvOO$ӯJDkRrԃڣ<`9nqF*F&H9݅عCGק9RsIF8\qڄ/A#'#g?1'#s"8E mBW9^Y`|6s@1=xV 9 K)'/$lwV=J=h`j(P0 rEl:9{ n*A°22C VSlBIJ3 >O{8<r  992>srO\qWĊ2-Y |?PyyS+^Y FCn 4vd$Vyn&Q A3Zy=Xzmͽh%9H&?~^=Z' Bsd;R[5RIa M$ݑl\u>õi^,eeU)FΩ(@8b^_Xo1U,+1t) Giz|t9< Pk,A`#c>\5ihgkܛۀ2p9">衼.!dvQqޢkG=|I,HdK>XʪAyrj(@Y n$'y҅*1Њ[;y ḽqr09-"]opJFf,9@kob؝i\OLNjoz 88lQ޼!MH=G=Qy,pA|b"st#z} zrrz&HQ鞜^g!rB\iv~`r?>[= ^*ˎa0䃐9)sB2p?t ?'w;T;y <O}b^=+As2`O|/4ǵ r=2}:R6?t{c?^G F-A۴ 7Sq  9#9$qҡh{c=çZN*܃ۣ{9 튋 vzfZ[Ԁ:{zPX2;ynjd^[]`@B$x8OZR+u+Oa}.>Gj]Gr>1)FH#|;C@Xhb duc歭rnI pDd8$s^Jp9)V. P4g`R'zgVm3\G=;Vrdhfc \r1ع߿cDvؘBOҶd$1pc#V$H 89nߘ\ݐǠ,1A=Jލ'>zҌ N:f [ ''^Fskg?&26ϥR3 P;WtsXA`9_g͹[wd/9>yT>dsn8>VS>\tӭi[*TFJ )asҁ3Oq,#(r3;A`/i|s+tv?sҚX+;Fr3z!_=؟,vXG#ޢC36>aNG $R3606)rYfZ2wcҤVlg$}x4ZM>\rO;UX VƒאWy t Ү+lEN8I[vyxȧ}Ŏ>Sufa' Ԗ,͒׌։%m;yj?3d f`woR)?&דM#!T B#fieYTͽX5G˵0x$}TGmw.rHG5dIlϬ| '̧ шscOlc/$$ly0Uv6z٢_* Gc$ sszUT/ }̅]0 5aefq%WvՏnk7v  r <^;U Bz7Oű7@sp+ F)h%, +`22zӯ^= ).7?Wtz)8۸3mU'`}+ơO\S,9/+屰Me8 wsT# =sc2rX:`p<+ylidx ;I+ fu`s OҮ/RepX`?zgj`27#wcoOzrOKhbld^51=s8kbp 9$mq^Mٿ֪^dXW<3?Kks" ghQW:Rp͹rd98n1Jkp 8r??~h=8N2A<\D.$/Ǯ9$[|6G,VtlA!P a+ԞXBp0|1Cǜ~4ŏ#|(! |m$~CڤL眒<m:iz,ŕx]rK( awcv2NyBbQ$dHT;|d:.Ayp'jC8r 06rm:Ќݞ~jdsq϶:Q{}H @p cʣӎI(0]7#z9Hظ<'=GV>C!<98'41kx#>q;~Pɪ{ t2׏_º4uʉ $\yߍ;oO rs;W1l=1|u84ݧON 8?%dӗ#pH'c<:f?Gcgxj^2sm`j[*Lp2Ic8+}3O_BI&48W ă!u'!n ߀p8ubcO-7B %(`z$[<}ZJ(gIĜ6xn[1Х< =G8{2isߌr} QY 8O<cgz{Ӹ8<>v#r.{?ªh9 I>^Hw<V'Ix=O{ zg4,:]S?S4o,[<'};&֭U Her$ǿNzz/ў%0sf`8=ˤ:T b~]Ӧk鰔[KO3汕dש;~g$9~T'Elǒ*#yU:2QlX˩DRLrcNP*ctsAbjG8(<3Srz2Nx=3늦AOš0A,0N6=GzqO# a^)0#8 c ӞĞHtۜu<6Kc8x* s*88ǗA\`~$q>`Sy$U-q|[&읫[)ݿq#)]B2Z:=Ut,rg%z.8w3YYpm0NpGnTd }@c) 0=H-ԟҼ|dǧ*cઃ,:bK0vx=<י)hާ|P3LqvG3pï^+5=3V 4M+3Tm`rsϽI߅\b̍[;qT#@8$gdloBꬾ~(zG$r Wor =Nx/{ p1Bsh\`gޠ 'lA'+pFH'1R ($2 ӞݸaЮln'/Ey mFXqIXez`?/lQԦw* o }A)9rG'9x xyPy 96_flftb0yapAON}jJYH 9w,?汗S.`K)g9W7"m%F9 FZRơYcmg #nޡ9pztJJUFI$0܀7OpHg͜dq C@=rq1 Y̸K#qW;F9|Wkgzm*+\'ҖRj,0SF:WiUc,Uc+ My֏ש9Krrd&O?:9.|lmaO^O17y!Gϯ19#ԩ?J?1r5 sny۟aL7#GsߞsKW/#Vim? xbp=3QiA zߟ5VKzg|_3YΠNfb[;tzאv`6sc9yR=*~`Ho1ԎXܡsx\Wx=ٌJq}<2 AJ;?#[^a\8S}ᴑu'?Q} ǨsAJX(Os{Ԏ~l@P`u=7q4 錞涡, t9J:Kfae Go{dž4L#{7Pq+̨zP|=>pp.:gzUs(ӑSlpז_6+$ש7zy'9'?s}=1bl郌9y Ӿ@@ 1 `h 1OR}y>Y8Ϩק៥/,dsOQ.sp};Ӱ\v˧FSA# MK)1韻1Ӄ^x8=>%\'$9h'i7v8x^AP4cNn5l3vCg_ZVM DeEiıL ~6$ _:!KkuvU1p @d³t<y9lMf}/٪_znkA{kp#7۴y!nb?f[m:~B0P\ǵX#qs](ӌ望Zo/Opbު-+OKAk˦M^X] aY#iyYYڼ S Η`s_1H *$|ߜTJ5l_Xڋn75ߺw\47Yl`!N~ϵIIUe|*9gq:Ur_3}LIuM" 94UqIª Xs_Feg>idrU6xl*$s/[Qmpr|$߰y?cK9]|łW>wP|*>^ M-ҿx2PJp4ZV-·SYv.ऀʂ*WA{v67n~t"rff6~#9emZ勿&JޜګoZNmVY8'E"$Zo($$pk|#i\ ML$WUǽwxwWJݯOTo#MƶguJ\ZZ3-%`3z>=hB!TVdJ #<5؝:t+msͫBZ;o_X/qeh-nRY]x\o7J_duRn[8qr U_k04Ai[˾_f^i<0O{Q1cr g?iӦ.;RP2FA^=UPIvϯn(u4D/c%zdds5H~?1'8ԃN9sӷ4-8AnsV=r` ϧ_z馮d` ,'q89 -r:c)59ޤr -F,rH㎀Q_\Q+4gW9O>U>ae(' 8m}Vd~=ykq5@r@ tDߊĚ'zsuӑ\q :y8<{W'sjoXM]q63덹nqc`c>ֲq=*sgdc@<V$n9c]gcޣ >?ª0L gTqQ$z`/93?WcХzr}X݃{s~ÏC]Ba8 Ow0}# G<$w>89ӵ>qX<`ac t8iPHóeA\r;{68nQN~쉐 aNJ{7Lb*;; S}F˅+Af#?xr wu `$)#UbbAcdH 9vro>XmnR MJp't;{9|t}-$;jMͷy#a1iE }om )%%V?\=NZmT9#$fܽ>^qTm%zґq+9 F(H9Ψ*ݻM#[Nc y;w+f tWZS40"XV%TdKnR8MW,`lnA9߿ִD%6IB6˜nJ;%sb:sL &|ʅ9b;۸;ƷYV6qUЍBf,~]ylc=p]sHin?>I80tbg `#qPލфx'K6NVEedL^P/e`DY:I-[0!a[i$zpq^fV>f+L`)rm|'9םW$tGt]T~Qr@; $|=rxϵy~FH:m>x Isךc}T,q?\v䎽O"1=L RIc3UD|6˜u>(Qy99L {c .z\ZmlQcNy"["_pRsz`T-0XmLcHB}7qiwbTrz ^Â< ijEv d q1.Rnێ=3 GyR_9]񝬧os&y:p;g$v:T8Gzq?=)Ic$Zȵ2?)I'``ZgN1]N{'p/d6g Fī1'pC A!qd}9R:cs~鏯<98~*vblwA޿Oҋ{OҀԟ\PsxןUsSg'<9N};rsy֦E #+똎y\ .ׯ־t8͘|#؃Y^.GR ޺i-jO (_rRG;I<מ0UR6I)% ^6GSbWIb3EfH`FC9[-?bvqcnsO'@[nrmr99zk_2!yYrYFuR ݸtq<hv7̥vwU᱌nGZaFs x_; AǐG[!ݑĜly8.6mBG< !\3#*QG@^lQ5vp̬1L7,FW8`rGӧZAu1w p7)QwM"fBh9*33GSS^`ϘF7ae] !*2sGiȣ@g2!s3́)2IdPŵ#ZF(f߄^G\psш#^-ds`nj>̉c=.Y+BBwS=MCB\ezc{qҡqd<` Lӡ( 8el Bp5: :yyV?3qTc4Go=A" 2q׵N9??1>Y##p~9,)/P㏛h;F@^GA 5NONKskON43Lo*G?/:Wk%ǃw w {cǛR|Ke>$M*c͕X/9ء8f# ϡ;T89,ۀsgZ@HI`Og?zY $z61$6@ƙanAN8鞘뚰N+,>bʌuw3uc922OJXCdSwd}ьZr" BoZ@"c%$`ҹtR,LJpfE l`nz`Olr>TIrJرt8#*#- ͷ IHޕ,dl@Ý" x:~t9!Og [9!i\ gڹFTӺ$1|H8#oMh@߸qBl'`9^~#laӠ_|Ґ\ #pn{Б)^rF1Qi X1=tQ㞸@}4-ؾQP2y+nߊO+ g!FCȶ`z M_RGZqNx9t;TM}i_DZ'NVEʀlQA6ub8Udsw7K|%bG'Oƹs8 x{kpT#nnJ2ѮY/$dwqx]!sxW%Oʾ.{h|aR.ovpԎz5@n0 vo^ݴ>jrmNty|a2Nv=sYKH/g5- ߓ,3Aؚ'iRvzq}r,ohfq 9*=:}3Sm<17'`|Vq왝9H[;<7\m>FX.3GcdcR:{F68uPq'f U} =q֥nhծX;*K''ںHDgp 1sqZGtDCvrxzA3]u`m !FIFx=kx`ݎ;1OcC]lK?wq9]KcT _Nu˞xrFOJ˩,[<`uϠgPĜ2p:J$t~K+s=8+Ҵxǧ^(ޫvrA*9NHRC/tA«g$ {rNH3'U ;G)-dp#c(9Ozj w$=HJ]F٤_nPU~U8ʃs;Y<@dd׊^ld6*#!Uv '~;g"eH?(Wzn]>L `5Чsy O=^݃p\t$S#c4X-=Ld;yX HDH8vˎnH5yhٖ9n1Hb[G._ +`}Orr1]N =I"f: WYe}ˌt[1zOS9ϵK.GAFc<1agw#A8Aݢ7cOLv?nͽ0x\zDF2{`+ؤF@>aXI9ZO,=1Ӛh,!'q>B:*탃R$sIOAX_(c'ҬyY==6r1֬ym><:X^7y*PzAh'F31$${t\ ߾z|Wc6q՜f9 >VuWj)FzG{sN] MFg5IUw<PG4nعRN g gО8: SMÐȡ}hїsxXtgUq1S$d î+ʛKF5&[ łTF 唏L\Q0'ͻ^C}Oj!N)eʧbp?.pz*fF@=޲j:T=8;sf{(<~`?;+̬(VL |Q0\2y+$`݁RiGr& 9$#;z-bb[r> @\P#nF[#{ޛ[m>c%0'~9RW†azE5MrMfbPwº$grGav{¥t CD͗+ A.2yAW97+(WJTЕ^za+ Pn Xvkz;VocW9H=c:W7[EEW9*7.A q9GSgm̻Fqڸkǖ,>k٣` c+М9t^mNN9CNv^DvԏozY)3wױ&Fqω;^D^,!dI/Fe[Hߥʈex! UN?\ִH06Py瓟a+߭5e$IlN3֥E-@ucs\z,*3 H=I b`+s=9V9jn,r xObk.L? UmvA@;V q|˝p5;P 9/F0qӎ0MIg9tB0 sKۜn |zUgl`ml 1sy׊y `098ځf5'pcތ-nUO^ } PNǠ9;U'VG~`zQdf9u p6Ƿ NWԟk^GAv݌#9JQ.OrB󁟯= tb9>P xz`cǒS׌z/ơAs9)RyDZLq= g5%=C`c_Whq9\/^p2kћ@&hp&Oet z;s^5M'Eܞ9j 2Fg=z^띻!e`#|CQ{g5,`W$hynn N0FH<{SY{dQ5CpvVyzt~L@rI6; r0qg<>n$lsG#[ۥ$O9'1 rG>F~ ln8槛@^8܂N9~0ށ;)wi_C~`קO/AI O#%ONR}l,Dosp#Ңk:2 7-=91eOrNN6!r^݁\uoW%ʇ*}bO_߇ynw@*Fs:lF~{x'spSV<N=C6 7}刡!C,r =}nOC$g1*y='8`Oni7`r=s:Wy;v3͞F;jxm,'' \9q銏矕IQæN)!ӎzz惁 goD^Ny$7{ž:v0i>CsyS"O N{zL\'A =z3Sm 3JCrzw@>pNpp 12|A%xӡO@{g5kbY98lc)'Cht$9;HiC#85,k۪ 1sIknZUf=@ԎYBh[gO@2@9N3|;cA\1_+ʫ/zc}6dtۓNzj~BJVwбN3/hݎrqg[\5NzENP8'l~=rD[zp?qOzO7< gRf}prsQL@O˒2I\v֥j$~i\ccs=zo#qXO׌Rer@B9=OOZ?7\NX8܊!I=O`8XB<6 H)w7cwH?\OjWezrz<b"O,u XqlqFq^حTN!G8+ЦG,j?h"@<5/>~ Qt'۞;X{g(?C?^}zP:cChHqқ`hf}޼sҘW:~敄BWs~UQ9xCCLnz)s=9jǸyQ1Qq}=#|eqVarcn#с'Gx^Yn9xɪl% Ү6IPg$<ږ1Ӳ#4վ*|*QMNp?3<A12ǨE"Sff\!. g`H0 W]:ն^d7tx8tM؜vP^w4!]bRJn0<(+QԌƻ4IW9(ݦ59tf0lS)f3m8鎣M 0qcGE\6x bfA*x,95^]kl5 R[@* Y0qz%s+ȫ:RN tV5G$yta@\SKk\mpC 쥃d]B[W̱$#?& s֛h]i˒yvsrۆ=jX(ys%F͈$M:zNZ|)#Y`v g$ ی $Z ʶYݑ 8 ]<Ki.vBbh`pw_PO\~/<ӧL0b8993ߥhEme2yzE]QuՎH?+0BA2G~59^G|#h)8BOT+,W Q'ڹq~ǚkNb2q~v8U@=In .iG݂^EdBP3\OҹIe8cq+󌑞ֽCNnFp@Ǧ9]O#\ퟧg zd_Z"oSӶ=}3]<:rxlgdƧߓ ߞqOS3rN9rIqsއ!X_49<8sKA큓03?>myG\ǧ_zq;qS(g# g<;9x$qEFg {s=2{tWp1ϨiS9z`ӧJ13ws}9w=1 ׭)eNqyU={vҮޠp>^zx53zל3#lGVPg9#뾚԰ 88Ԡv8 Gj@OR|>{qfAԁ2}8y Q0~0@;tX3rKqsۏΩ26x$tҳ*,ö@=~n뚮:v{ߘ"%ByN@91 L,cI;s޹䎈3XR2A{bv~yR8bO:s ds@ݘ_S @`Zv8F>#y5/rHw\t~4oB!ܗs}xFGy?C><'8*HT˒#R1>֭.m7udq;ހ^X'9s^5'k>Zru\ރ SfʆHrI+х;J/iGϚÅ 8Ҽ)pG|c81ps!(۞#.2rF_zęv ndA8Ϛ>ifV=x0n8'{Cd}py pzTO'~FsQE~mKAwRh=l \w*_A1=@ }6JE`r >\"QBr[q֡E&6 pxeԷ!X9E+|qsOިmlvPN9ރS;<`9?ZRc cNhDyT=ܯYG8?_BHMV];Ğ9揼rs8PGR3Rw&p[\7 ׬*'/$vE G+\{YSj]ϭ֡Ec7]F6hYr< r׈.iDV`+'\Xo\6ٔ3=0 KxS=HY}}=1zHGEX7 tO/ 8W,wa>=_Qef?.1 @^1ִ8 1eÌ5qr`dq So9G'g}:&THN#rITp 91ܹ+`}xJܫ3`U%־^oiQ\Koܙ܋ D?gx#8ʣ6apbMnIxro׆=1L6 7sd$◳-T  <}LSEOb}q֣W>|9~ʎ{fapˑq:5.Bw(y<߉+}!i 0~K󖭿$RhޤYJOF0 kl9altH嶧? 'b9O{ˡ33˫+[6nrpFϛ -w3{ b'ljuۜ3{b>N8#B-HqҭlORT;Jds.ьN;2p?_Z#l? vq{V%Œ'p2 0۲q}9ֵ;rbJnj;zv9bHQ ]`Tsž9sHcNrJaK8}r;V>FfL1S MPala.07l,'dsWcm!,G' KUx$.]X|<9=:րD .0UqqCݞ"X|68S :`*‚z9 2Sw0hb1qKд\P툸9 vNxS9F pv #/׿ #JQvrBVr,Ue *2-Im8#: #9|P'^ +x?u\u8zܿ8$z9\Y֩o+Zm(Teoz]uDoە?Assg=+NK.SS\~Xm.Q.mSp*>c9٦Ӎu>iT*;XI<7^I|9sӂyHJpCyi/@~%~Qcx5h#zm#$Z(ݳf1ANXĊ95w1؅ʌs5R}ZNZDF$<@W>[$7`AI5OgS"TRY lʼnNz@zUsHWBTR6G9eۈb~rLn $ Z2ps6>_v@0; aA H` G 3lR]@j-Ͼ1FБ@+8=.297ۚm+*;I79ʜ䓓۱h;Nq؏ cA}az\ HNܚ!+G\`b.WG]0zчCwR$zIܗ;p[#$0B )|7TN(OV1 JpN q{ $ gz`yY:O=ǿj] Lv H'9'MqF3O mIoQNr2@qЌ3Ͻ 篨sLw!)9vL׶s{3U.0g9:oΡex;q9ꤕ7dH099֬;ՋU&O~دw+>f6S>v܌I@8k[3u|1OK>fuq]Cϑ05LO 0:=*|sw=JxUcr[t]|Pɉ,O|ʺ*'~ͭN_QƤV,I:b ZܣǦ@Ms3z ,AH|y+6Pmwv'ָ/v}" P ʜz58\|s1b/Rާ=>rTgk O,3 o+I᷌tU=BXnUt$8܌Knb35ePuڻ嶓:ƙhܝـn`n3[)\/B$pv$t\tlltPK(p1sῈU~r@~lw[C8v6 029%x8+w;zWb-Vhy?½ִ^%o,菼7-~Ul =t^)8q1\m'pvs cWF&sc`⛖ ~*07۞ǭP-f]+gs\eTp^F)CcڽAr)9yqRK$oJ QL:/޿4À˴c#Ⓟ$! ^fNp8ڡI>KA'(0IQԡ/͸pO^F<]tw3@:e-TolвryOtJcmU\$n'\d)l ~d$; FT]deނ/pHPG]~arpM@:!A{946gr CsО;Ѽ/eS(2{1d LqWT[qxI'n[ cG ă֦g=3984 BpwlyUY}GRqֺkF@ȣ~PBʎihW.F@=OnvU(IW ~R5xAӽ7g'}) i_TgxӰ4'1c6~_RZ >88V?ЌzqTVloG#sO=;ǽZD`F1'<$ӼNĎ#D6(Ss?ixzN}v[3 @̀z78yd;r9|ZOCz$2+-a*κFjX2붷Hm_8b˶畉rp䱣;99}s^{=E+FܝׁqxutVϥ̹l܂bc'$c;q)[m-p#<댎tzz#jVV2 9'o\sZG\-.Taq'Z@R7^ @~C=k"lo=W!puCnJ~U`lF>8O`ڥacqxjMvpw(oʼoO9汊hH',>EpN$gޥ'F*9=}d;m#F;<38SןH%@ l\m%U\N@#?1xW;7NŒ~1"Qʳ`0Quc[c]<瞠s[OQw3<{6WiPcgG#z¸s p1}$q JݎA?wӧaFW_#${M0%N zz2kM[r2$u<{W<:!'H-(smJBSgU3fw g)@=0Iȩcۑ5r K'ֹ3b Lrp; T$j [' g秮?*{VNwQ =$8{~VeA y"6FBǒͻ9<||N.e'qf$;I g}00yy8xtc$#\)b;sˎ{׏Ppc'ۯ'>lq@gnIoAI-wH{RaqQ#d9,9Q<П^)`!G<BTr=3*_r=nlm# 8ҭer=H8f@xȨ.!OL^؏x@Iq5Mds-g8ҢL1Pr:˒8B?7A ?W8=ys7p9#)s8<yN}*9cL^GN}Icҙ 289׵'1 >@’9 ƣL!sצy>er ih3xSs$ysХ}.{,r- ;ڦ3nr dO,,X 9We7V67Ir?1܄/\03F 8<ZH08ϧ܀*ȴ:~SBR֨a#(U'Ƞ(" >ߟ7ד$l S{p:ǧ:T0##О zlgC">?ҙ=98,cpu~Np~F%)^20RY`y95j@8i!9b^p\wN]y=1XxF6m_e8ЌZ y,C.hO-8Q&X6OCC׫\i[E$T}{uǟ'ȋ0 *\ӎsҏjSl}gj.e߼KeۂO֫UJlG OІݞDk&dd2g;U; JZH/YIAz! g{bJ\θ>#RfE@LH%l@'ךҎ[Į#+'F쀊~P}xs{ZE/[{U3`qԈͧn-n,ed%dbF1;QttUKǞVXCo}KzZچuy9- .r:)sCk mX'.Ͱ1`A=+wQxG;/|E%>p7p$}E>uNC7P\rajgԖPT}z}JT"V~I'҈gmBI$r#a.ysZ=7/,#(Jϓрц\bv~}= 擡xva1JqsX=+Ok7Z-QpZY۾RX qs0}+<#s#kG4S X߁ֆzicoV9xnz}3M'wr:d~>ʁ,}sXm,q*&#=rp?za># @^qN3ׯ֠ss q{Dw%#lep~uz9`I=>HL ygW^9޷Luݍyd9'k:ҴM)F4L(Ep\qQ#o۵d<#zrll|FҬ1@;}9uдlP۝Vy֋]Տ_G^f{mc9s]Ohzc9{v|}NoT.3 bO8w {JQȔؑ<֨LKB,'~UhSxR9'*J;>nt<:ҽ&g9ǡ>B.LJ㎹88tXr9N#ϡķ2y'6=c$s 3| c ztw>8 =y#dc8㱤u=`@h!lv> ww<<OK';dvSM27^Ao\<^<~T`3g;y!glp\֑J#wdq412@!'< lv8=I{l{U89 \m89zqZ^n@#5y:89$֮g<: sc#1qq1sֽ {ܴۡ##y'=38nylf[c$# nI錟=H##Pt8}A#₈߸g#?J |g#^}*$n;`qUO_oO0z\5DF:I9NOU{Č{3ZGC*h\GC;\ NO<vҹ 8 px!Wy+cN[u=O\=q fkCԢc nLֱdML]WVlgנ=֢e׷P@v#=19K?qXt厽9_˭)l}OT1#M8z|'r '/!3OQ<9xޥ匳aI'A=?.9JaoҴާyx$#ןJ A p;c{xhUy kYT\kU)xa8?y=+S<5=vȡSg'?P"FJ0Qwb}蜜P ݠ@@.\9mŹ=a?ƽ\3)y靧ߺhzu;'ۜaH =k^SץTId7W*NqVx/s$cQ& ^cs*=zGSӚɲ!С$˜ g'=׆K.}:Xk%icb2#(4?4}[|iҭg5䖒Y` u+mb|OGl I\Ԣ.mg*$m`ON]+h@R2 88]vWṅj0da%AW\޹oض$_)~\+<3wxؤpT1(2Tz|=:qZEu rx9FO9:\{TāosלDNݹW+{' 4XFn?ÒrZ|I,ĨSЫNC3()JP`ňR~UیpG?1w'vr2zxI* 1$,H#>c׭Sif9qJ](1v`rJ,sI;9 HLe1mG2'UrU*|aÁGZμ]Bo.iwJh]rGu+ҧnWsa 1/vܕc nf`7Wv3.::T& 㔴y`7#ruzE-Lr\p:}* S\-I $"95+YoAm;BG=pi l~YGx`VǘBcTٓr8LiGnTQf+*ڏ݂8|!X]Y[ZJgWvHr=TJp{u(nDQ>kf.Pǵܲ1W$@#tۋ9#4LeFR0N+> *|GorovCϮ@un5y73^CT\gy8^ʣX564zzÿ44aCŽ񌝾kT`d2Aߦ0zuʃ98M ͌c?6qЌj?,c9S䪠g#p9Z =1 z;7n5. 9W>R~Pw).X\uQ9Ovѵׯ9.:c<4pǫ _zHɱ8$m9&udr wm9^O\p:`s@wyS2NO`2:8 Fb1sҋl}}j%0p܎&r#v\rs|rO*# @,~c)Xwv8@['PX}}}#d~GUƒ,~_o\=3nJ'QÆ#ҢN>#Xc.P!>rJtң~m@OIĮmI:<9DDz``r2GKJD }ߧL0t?w|q;qE2yo쟠'ݳOu<§p$mA':1_q2K.=h8y_6NNxx 8aqO=O{Թ5aY8A3O x$0? NE<Fl$;@?_[~I?0g@^:'I^~Lss׭y]ⷘv>`9Wq7տo[fі9fXպc"ÃP>`uO1Ce*۷Th+)<6zno$B ʰI~GAU |8Bբ7ȣ 0jF޽HH-ܪN>]ON=GE+ׂN{piw$U~\,$6z|\7%O`Bs4W w!pާ|T ^ FF~wmRǖH # l{dg8q=n;hX;@ zoUPv%wks9*d1Hϗسr0zȩavlVnϮ1.Y \D21>'ڶ#7P>RKpA#n⣛V]DfMTT`(0r;SA&@A;~`Wc5.a& 6K9ݷۻ;G Og  gҳOEIhRf8I @ AQn-"JdHd r1?6LS my9⹦4mCdN@?*県 ގ"<_/l,ӁA!${G[CT9o#C,b%RwOWOqOSJ#/-+ѕm0+r7Xk",W$2Gs[o"#nfs$sٮ6U^@wt|*:i7;;x O `a[5>,㾷(JLAErvҽ*3N-U'5q5{Nb*/]ز̒|;ZTg,m(93GZ ?t\`y Nr~oF7U}u?͌QHʁS2O!\89U7gZ+zm asUI\%,drKЌ?*\kr,Bmsy۷s=OJ[ *%H<Ϯ =apI؋rmO'I7ʠ08 $}1Cz[8 7`?23Ir9 GYsqP@$`\8z.kf%;UxY- j w<ÀBާg$唕סzEN"V |,̣=y=1s576?yX?*gfgoA܀rAn@ PO7&i- bx$7c{WZ|}oNAYb'ik!_v>L'$t8kUϧBMH'9=r{s 20xsI-= U#'$qcvqT^%sbsry]= sۖbu*X/6pIN>+ME!?(<N^:ou1Qcy=+YwG`#5V,P|Gj\ \ הm ؑ -xפsr/y-ޓƒ S8L@**1 Nm0BnI#'9(o(!Fy-sP/}#ys|c8=9#ha 0'OC^䫱4la I' G8׭oEq+c9o0=k҄V+~>gn`XD+(WV;l61r_9GLiH KC4!#W[u#qpKvQܮS)' n>;~L A$1|,IE gqJs F3q|eoS\^'Na~b1q1& bٌF:gҝ;7g 7"AuxvGPQB1Br{qY!N~Rcy3ޚan1RT[:S'qD/#l!4$ ;nypXm!c8,8$G|˻$IlJHD0褮% bPC9l+cd ~f@r@ ?g:R}|ʎS'c`PȐyyv|6r+xmS.LX <R0p kCzwOp?Ji>{N:FO\/=@FqG@9Q!xv#)'L~Zon8hcvЂ}zdvg1 㟭:1Z1֢8z`'\~4qǿcݣ Aj<3HWy=+k;)zav'=y=j.NNSg~&Yn KB{#P$̥xrz8jߡ'Pt wQ\@1Ry Â;V7n*T0:dY(z9+[u n)QewF1qV6XTb'p:9^v˰)8ݜgGh{g;eqS7=8.e?ZTeI?0:+QX%+r͕#Č rok~%(I`Tx ζBI~1|#>~n<'>eanxpc\tO~ub"wCr6R浣0s$pzWDJ%8@CVT&WunYs@V?x n0M s 9#q8ˁLgW>+dfѩnUV< :uqq.z$d=Iz8-89_Qt#`9Q9#028֎MOM5?paS'pQ8;,n@JPOȮ >: pYFX:#vzszT8,I  <9n]'Nsؑ)J˦ڑq!=qЍÖu; NsJaZӏ)Ƨ\ (X#8?kuN[)c,bu^G1/,!U9b1;gұR>\I޾:z݀uSv$rsN{iTv>- 4Ϊ61p =G^Xs~\'|}8րq|1Ӝj=cϯln9דSwc!shФ`g9=O\(<\s#Ǿ{hkA\ 7ߒNpy?Cqz,1~c g4u H >i ߠ~S)䃒`&PpHÂs@Uяun9,{۷#Q7cfs0Twv^O CFG#ʹH‹8q<}߂=E}E^Zwd}@?JU~Tgc5}9pr=zzqK3܃9ת&އ}y`H[s=zvO VR$c89Wyь7 =SH8'v=h$αu54z#'!~98qu @Cp{cr3qO 随i\ >JA rIߐOG95Rc,@9 wǧZq#P)Bzڷ|r{n`xaտ-pQ u:8_~''<kzӥ$MZL'}O}r+@aB߃\԰'J>FHn~1KGIǵKs0 ?!? w?OON=1T{_\ZWB!-ߎsz=7c~ NOQۚw׳'#ڳlhc}ҽvIT:`8R-?NpG?SQ ZHf##nsߎ~&fӯQCH;U'<9V5W4\{GFcwͽѮ j5;M-mb1[Urpx|!2L6x]WȞPB>`Gw`TyRgJI\n{cGOݶk;rr-W:R'f Yp*"cKfW2{Ěı vWgt+Sy 2X6{'MZB ]݈ز8QrϮ=vhIV*y׽ ,SxtLHc|s1ך/cqqo9994F#$K!;7IU݂8Z' ݂O.Gːy휑BȰd0P8-8 뚵kQN}CdmK\RcC+ei1+6y-9 b\ڡʤ=(,^YwO#kssֵkwh8ɰHQHj\o"fY"*@bcڪˎz mF? ZFҫi&M )9i_Bmg>-:3 Iv6sʱֱ8t221$s+BרBJҼP/lӁ$~pcgC܌)A= vx0C Xu#ޣEFn ĞAB9ΑT*c)E `ײYx6jIQP|9Ƌ ?/L `c\}Gv  nxiLv}F0 =qp(-Ӑ 8'8#נi@Bnu8#p;1= s%2,LtBHϥXL rO$zɧV\VSIc=8j*7N9I6̺׮]ۅ_ҾxxU{A%?)E 10z0)Pz簯=1veszc=3{ ͌98֚3'qU"s@#8>ަbVD@Ұ 6_» 4 9O\85שz #0+\GNz㯵zi+>gZtpۨNG@'JX$1OC[TvL-Ql@ F:`|h'O+v?RycYRhn Ƿң d:h1Ǩ vǮh G^ ϸ⥢mcqr1 V)18zq@ `r=:Ұ9W$Oz8Jr @ݼ2}?_4V8=19=s&H89TuN#i /;$Cށ2MyIPs{FwHwQnt\9N :g V+*z ',>qZhk#p)LqwA}GӵK'k;h,he73B0 0I^q}GnfR3pP$y9 d#e!Fp6x n9 r9~|=9階EM:s.W {.?ZQ:"y#`qdn2k`{Һh93*bVGt %\fh{xGEqg+YcJ;%&.!d6s\r$#lwjϳbGcFƇ/ԐކzЛ"-:m'~Ьe.rDJ,p Nֿ u'&\ZP2r82y1tL=)X-Hrp $ MRyQZv)3KQg, <{Km`puzK$uXo&@E;\LV#̟&{<:%&rba]џC;Tk=I3knЁcnWP(Ğ"M ml#DF2I~|0ZniA-ͽĒCyr%/A<,U_gì#e/?7NGqT ppT%I~I>w61dZƒg PH2ivqp>ԑ0\'#wq{: iAN h+ |g?E798=h!<<}яҦ %@|)HU;if9n[uk^p1Pf2,<3rn޻{ciᶁ;~uڌY7ˌA9qgFH8$|gL<zq7)I#<<s^4^z| QhS0㞔\ z)̀UG<9{zdwv0^>3Iצs/A9L=3Q` 㪰=OaM!18֌3x$y})Xwc1yiX6lC+̧n[::ld"I݉#'<.0zc;p*/@Y1Iby$=sM*z}r:H׽ ,a6H889 ߅8 z`SԤݶf6%\6=uwRspH{yBaa$ dt^`T=1~VtŨr͸)rN浣p9|E3 /$S7`Q,܃% rxQ뱁!v3IuY#n6gz}xwFR>gmRsyuL 6X>b;$(=0w6<ڇaXK) X`V\䟘j~#UNGS\5TIxXyNF y)]mizt"PvO[,x8=q@U D3mk1'o\.@OV*EA P|w԰)7h,$Ic #ʖ{c&Gznx'p+/ݿMN,2~gYX#6q88Ojl}x T> ,a8=w*lI=22sx08PS}X.;yo~xӠqKQ!=E4ꬼcΟull?ȥ&(I}iB@s '*6E J$Z Q:(A_^=l+d9ק8trv;Ƅc8曃o_<~9IݺLX=pAy4J"+ @`}K己z?\}i`"8=s\ T G)8F@=;V=Pۛ!JzOokC㏜EO^ mbp{¹Wasԩ]rJm>q'pf9~n.xT@FnI=<{׃=쾍8 .Q|7g zpHO@?y{{^'}e="`0.07c l`,85n~4meHmzVq=QRC"FvXI@>f x 9 F8U wI'On  dpv3]Xޠy5S#Rxݖc#JիsEى7g(2+&d*}On}x5]nuR՜X? > B* S/sz ۀFY\uPO=] K4{N8 ?J3` 8ϩ] `06rrsjRC*q5Hcs89XBK|ࣃ dOZu!rZ00cF=pҥcnkv<`T, m8ձh@p+ qqۏ7OnƛAzۥ0n0{^(_0=3ңS۟a׊Vaz`ze@qUm,Exs'JL=FR`x:t{Qa܄9OM:N٪:Wa\\0=? qruϿ_T $FF9 cd{ԃיJIB}w\nԂ20;rl*Fx'/瑚nZGs^<}?>|h s\y<A+{bJ31,C_GIZlj]t7*p@ۿץq8 ^JtK,QRGޚF3Ű#8ӥjE*[%GH; /50~>4T*`*r0~pz*\rܪb#s\r0>J9MFGT`fiE瀻O03߭jå\A9br9ϧDRM꽓4OPF9+׎{Sc`@ێ+r:r= W@x^Zr3pw:@zM}HQʔ#;r89J',_ 'sOL\!jrT}YqnB>:}xUt^v>LŒ @_Iqap5MQ5izpq=ygwLay$}}ҸSgJM3`ʲ~5UN:O`+qԽX0Ӻ8 8_$qI>52> u< 8 \u%ߘb?̊e;s@'(rV}quzW_ds*Àe >C=jm<sד^+;Rؚ#jwPt"RpT^v8=N? Pl,F_y `Fvt1߯DSN999کlfe>Udo1MsI1gu@ǡGSYFFww;dc֥qa xքjٍpBx?>1PH%$h Vv+ĜVzdH~n{4 X~Ԟ_9$t=z!%lBm!XrO|3b9(wCVSf%x$ɑt/Fq% g{O29'snRx7}1ң2YV?ۥt̑g8%s܃}) HcKom<;$VAp;*(Br+2yHzs㸧^2:wj%%N/V w6}: DTӌ ens'5iy_|>?؎4X 21zc#AyJ9㓌NOkyq)I'^%$q#_vy.NKs/D/pH@qڞ$G?K0QH۽}FY#Sl:9m9{v' 8cđ\Ƽ 1'XnQ g_K݋K[X4q3y%C$dqUEc,v6䓜Hj43ŕT*ͥL @a Ht`2gzҝ'}E0nG#<sс>vv5pp3@ =sqڐr;gpzcz!?9q`ң,J@##H Nz>8;խ'3J`.0'^*}9qG~{L:z c{ߠRcÐq8Nr> #0ē^p} O19J: 0PrI9>JIy8fe1)JofD(6bӥBw cń( 6{8s_Hp d0\~L׀2k1TZ1ު'pL5 Ov~gq=9K)@U uԞ=yW#,TB_}Pz qgꭜ8?^z^t:魈f\Cg9a< DKCʚ՚d<}j'' -wSvFG47qׂsSyn 8<zf%uя|TpOOc+y=>_N3:|a'9 Ofmts<+K,$&S$E \֔[]5֧w6^I]GUOO^FH$s*3(b|yKpwH^uKr(B Ø-r`>.b{c!<40cP$ f鬤K 3D]b@qsSt6kԘs$q4sm]N}{:Qԣ6W +m ؤF9 fB#\c'8h\LN3:[Mh,3Rw⃖Imq\-'E<-nĦǒE5ڹ;F=:z҆Q@;AM9@!&<ۤ,mUN-Lƪ_`9q2m߀uHVX%go,dvq BҺisVqƛWZq^ʈ̅7(NB4㌑ ph4Oo/#8H!px*gz4ot᱐}V3s9㎵Syw~_Oq\iJSO,6}:$c;g #קDK~c'9usJ<ݜ 9<H2IaHglz2O^x*~`3)lጌd`:~"Pr@E1[Bul`2#9<߽YCrAk*CH3vԒO͂ m郚o&i 0> ^_*auO|=G*v##lMzżF8P8sM3NŖ .1j&[ƜpAm(,3Iddqǵ TQA(H#Nn22vcuzӧqǯz-휌 zp<,u}}qxaҵQ8y<9uS68?zdx$ZB8O^##.P#hО3;$4Dހz=N擀s 1u=yקQyG/HrqT:e) [G'瞀T^P/,r=sڳty^0FxԆgC>rq[qAR\sSۏQҏd>qO1z|nn@SRt88!>"<INe_Nss9qV ;1ӎOok2e:z<@8uCc88 ==̓.sz8Zt%$gn58W<⋊OSy{=ɦ2<<{qU&'zsLH}a#kr2_qNv&Nl l#oC?Z:wc^+#*;8#+t?( $9ӓ^4>K'vt1,.F+*fb3."mf4i^ { {>"2B W$z֔Nɴxk`ϱY'!CϧqgXr069ŘlRU^»Fv<~؞Izqt3=:sN=r냎ڀ09wm=:g#a:zq!+c<` g㿷P9 #8z 9ۜq%A:RیcrO=H88G|NU7tj]sQ=`7ԑ?((?&sb 7\^)/ebN[9@ޚF~oz=M|H#'~n{ 09{d?z"fep@"`y8MMeې$capj`q[ΒHWwSZNA#S "[=U뻑IH9 q 8ǧ?6zT 18Xmf`qOSROQ_qީШs9sCe!>P1LN8& +cԀ}G ˬ kxn亶 Ĥ|"q4%}VDZ>C)q8 AUWn0}=*E>V*6Ws1̻s\-T3|Pp %V۰u vuVtILnum7V'ڙ UZ{XRo!ʒy xlDff%1d9c6k9L@d(˔fҟ4:ݜ<>p1BG|s3E6B{3u ;Knkm}&ZF,%l I1a.T=CzdmV)Qq?mǒYc׏S}2"בcF|Ӝ} ۯ7*x9xmK`xMgr@Ţ(#m9U=A9Է;F`{rCfC&ۃZɫR{yBh6iӈD{摶68 *kvyBTAh:ߙM:b-bxڡMd)' oioo%|;׉Xu5 r5#}<zr03=r}֬Io髫z Np1}{fn9={+x\p {S=<1\ rxi+}()$gN8=,UȶcМҜaAq*qG?N  'H`6Ѓ]en29M\zqrfB**=IN^x~g?N֘2'؂~SCpFܜ0 s: [ۯJPyc \dz`t?Zr@=G^xxˏ_j!UG< sL/rI W r;sߞ[09#9B8mHS=,<1#t%Kd*ysq߭&ϼrDq&i? ^9cNiBd# ӿjcP$G͵_*C͑#c9zndofͭ򧔌$Xo(#r峂0NN;W ,mN[ql1۷o||߹*-={q$ҘKH]ar@r+/ӑ^68^@'!?Îqk3W;1.?2}j-HfpLdX4IR363a'eo1(f+{in#^Co:y@E1V2,Ѩ$5 pC}r>cppUssNG/I=<ǥ.Yp>{9H~_΀0$x`'ZPzr}8xH}E 8# rs^J@81Zomc0a8 ~=ʱ'jG#8!לcI [1 4Xqϰ5d0s6@p2kS|ۜHWW9?^*\ǎOx= 99N3Vt10;;"HO#'=G"2$ZvӬ mTI =z-`lq_JԴ=TZx""<,(*޿6z|gy7Ѐ:ۯN݈+˞w{T_O ;qЃ$zj_z9?ʄbDz ni|@zqM1~S'# ُs?.&G##1O8=TgWخ 8x/uӆӿJs÷9`z' 6~Px t~4G})79z~4q:<Ԅ/t3#})@=P~ǐ3csOojf2y `cRuCXm x<˞GG=?T/W?n{wy1K_ǩDdd ƱcܭmsiJVĿ2'd"ۜmWy"I܊)A1WexI'cj[ U_3xNNv U0K0bN^?STǍDy&C0i\]MV*ALܬv89hmo4r I?/,Q{N/bsrJh9zϗ~1r۩^MDǓ+ 9SҘŗp'j-ɚnVp`afOFg=VfKCr^Q%&9f\2 G$>9crW8x4::z'PCp#+<3}ZxB"|łBW =E'U}쮋N[i$g$z-ג3?bO?kW D>nr8 :/I9UR W)ذm v<-Q,U A%IS@*7#K3Ų}Sk Nu9m< ǹǵP!rqzqZ⚓Wљ @}jc.]O prF[,÷z+VqUKz\k H1F}1ӿjnݶܨJЏA\ժs#IAXf,Y y` SGz$lQ$rrpGB:%{f;/Aʧ8 Q{~+w U s~Ҏ%5ѐNpįǜ=-7*2z ϯL}-Q^9'=8=:fh"1ssZ:)'jpA/TgǭlgQ1`0zcZ6U,f&cŲ˞HpLw湹rKm+ͣ & '$8A ><αF`'92"Gwgh'' #<`䌏c}Rѫ#mcy; aX:e ᲹGa4Qg sV1,x$Ee\dxe".OAxp1Umg<0:CBtB6hಜqiݍa8934N2?/~WIG'so=AxJDu9 >Rn rsU5aH sjh} -9>^H<3`Us m8۞8mW:0&>寺pqgzdN*E|9 pp0ox'$zAW%rzӧlcv֍X(nUm]NGZmUg.OAJ.Eҧ1lr7HOPGFO9_K"q(}{c#gz#Дܑ$cQ~r93;q^+ZVzkis\lti[@Ot*0ܞ`d&z?Hu32 7fI=}s>ڣsOcAuM=Fqܞ}~A=JL=?ޚ_8=1?^ӱ]!F;4O6s*mw"eI?ݠ`qJmw#_s&#9+\ʖc*2!qi[@͸'yR#ҁP#>O }G=qjv 8l{QW88GS݉O#wLnq@8qLٺu?F9ۚ˙GOR9݊G1ws$&{eT<)5 lsu#t9X7ts;ߜS?Akc\w 9래@)CZNYv]-ܜ}I^&&vsP#hYɤhGsepO]X`;eA9r1NޣR_)]߰Wv؋g[ѱXxQ03?Zp򶄷Y8xu5x8B~f#=#aPH} ?{;WH`m)k#%v{kv&R&{ؑ\c=r:lWI_9Ѓw-GPNS\}d0䜷N3;qH91sM O?( 10m> { 7C`##,j}.jDziۯcgEmW/'U Zwrc3˞ySDV_ 7>۷IzBT@;}IzPQH'9!z מ>`zVq>z%G_1cנ'<ւ+`ْv<ҩg#q@0zpʛT|8w~?Ю'j7 $0xrHXAUOÏs K fNvv[J)p9RLg-ﱃ&W9p>elǔqlzgctP"d >9zqaƶbTg#B:x= W-o^V ٗw<ޘ ..$ y0s؎yєz|E S_\zxx$a5bVGM Z>sr?eg~Fw sȯOy7Ϟ dd?:z*vly"ݑ;Tu).,nrX<?Ռ(w8̀O# ֹ  ݉v=q׵pU_ݩ*T q+G}k<Hs]4ed7>emzw83*ے-}JM ob@ (1O0p{"-Ȍ $t'=8Pl s rCϾ1VJ}$.A'~"*J' :ʾKH=sLx*Јǒ0 8'3ߥ4ByBrp}*->F>, .~S.0gjJnDEqwLӊq};kECZzT9lcN+a_KA=g_Ex(,07*S1]$:\} 31FۀF m_IqGQYd>mx.G^<yީM]W1'&M ypH?)* rY16݌sq^TՙWBcBqi@}lzR\p: 3pOsӃJzcGNy$ ɼBx@G^UON#ێyXWќ1=#}:q׊mߖ4XW#6x20v~N-m_.U#p*00vµyc-6'=@[ZA (IR{>PTqtХ֝HS-VPDGb=#v1; Qc6Bھ Wzy#{;SA#%rHc$=A7dsea9a+[mMYhK ?6N9<^N}9Jt[hn}=2:6Ĭ%z1NnٵA y@$sׅ;!=kӵ->u#8zyorY;p}A_?WݓK\K'H8'5۞s#zd`?fH{Мm~;\F3#w ukoSѥt~H$y^ұoSnQL qӧ?ޚ$>8#G}@Ap;<'u(qg۩˞3N:?)= Q`PzSϿZ)'O %zsӂWYj͌Ӏx^.w:X98$#OJ<՚ (|qeRO?JꄎiDs׎:sR qN9l{~UEU=d{tޟrzp?b!Ќtyӎ}Ca'2z zI<z`ИrSמǎҋ(#$v㌌|~z1В}89F48@}zdT&tOnOҧ9Hnq>Us0}?SR5|O8=7n~E\̀{N1S}c:Y>|pbG8E2-`#CgVZM6!]7߿dTp($gC\L Kw׸5nf\Kpe2H'$ S-c~#{ t.hZKGqHwd˱II 3k(ɱM p2XA)ߩqmJyd (*8-2xl;q-A^v5o3H +%Fqب]efPpFw qVR2l~c$=F@qS@ q*ĬjnAKv3HEFgkc{*6hEyYUQGO2pqyBpI5tY.#72mA2Ϟ2ǎyԡ9kQ dﴶs* j7H"ӵkk+}r!KذLMQtlC#g1`98ҽlFhE˨u DºY yq| vcS8Ջ2G42 lm%^i3Csxi˱]޽%F>tLdl.:ȥޗoGe.bNbS]1N6kC2ٙZ \G(U},#dsP1׀exm">Dz$Vl,1'4N3rb_Ji!?)vKHnzםIo,$,1Xu7Qz חVZu8}_~\p(U<' [}Nz嵎ǀ8''|Zn9sH<LN3N9>zg@O#~I鷰^yzhɂ=r;sp3i%G< p׿5ظvz=`r2{}OKr6б=?xI0268aLtA@32|G{Vfvzu|c9oQb3Hgyl~ 2:x#ڔ]- `3y=xMPZa9˾Xiv;-<`$z cGL:zWХVΒpBwNkb(v?.8@ǥv')\{U-Uu=2;Z_/':Nv 1$8y9ʜ'|F~b~lJs'nTm<SԤ5+򜜁U^$18NGN_Υlu##БHF;8=Gd{R;#ӑ`qP+$cNztǹq@u' u=lzӔ㜎FX`g9?qp:YұmEu.A2('+?yc9V̔`PimcO:Vc.GTOz}}ܜ=0}xWW#pBv0K-\ݎ܁:uNvu#0F^y=223ݓxkr8ed%ܞ[L2)cpN 8B9❼tZdw!l0py<P1<;ve"w<*rq8敖# +O-UCHr@$u vgCqoH|ĎUG(ͷ2}ZB]>^xFAǵJ z60 m#s GM8cQC 88x9{n 3REP34<+Hq#E< dN߃׎ OP(nsN6p88@:$tg4$'' gքlc?:h^63laa`=W6r9$$w8ϵs&$sN>oQjnR>fF`0TXzc5ֳyEl,H X<>ST<-0` ?u߿JܻP?ZEQc2ؒa*o8Pjciaׂk䨊n$uW͠b{al`Ggpc>})3=I1`L۸_Nq># dڡlN J-Djc<$ g{yH~lrbzH s!cGFĬKr Ў95dD`m@1UPp,)ߩ54JmcǐY@d`?z A:!u]cF#j\p֓: >T<3~TxXY rwN[-:\W_,6±pi+i}(ϰh9b<`cjdѕx;nc?3)? qI=9kRN9ֈp+r*~TR"Aܹ^:o'ѣ+VNHp `P]1i2pŲ#X ߵZ_-J8dWWw>UbG#l`eڅ\>$/匝6=:fyHW rH^g9򎵫fOPc[|o|dgT$n݇0=lgI)I㒪v J~ @2͑).JXb36iڽxZd܌rd;A玹ϭ?jyhDwi2@:h)~v@\N6+lm(`ݟ22>nzc|*JɟPUz=qAҏ$d䌎ɚ!ąNA\{9'pFFF3}| 7do*v6~4ЅA`O9qNq)Gօ;=q }pܒ@ddս47d@gשЁWI<a1 F;i7z ` =ʘI1: zqO!q:usMŽCpHǢ/yc'0ɥcն: cp9'WH[@@7sF208!~4 2@#d*S=Cx& zcvz=VWpOAt qJn?t,O:ǡ ~;}oyֳd$I0 ܌jV, nQn9y絻&zNpB:SO"6b9FLN\p>\g?Ie)}B*/"O;CBw._0+qt=0jOR< Ͻ:O_/iJOCn `pH<qQKqa -gZ7ͿSGL/f%RaC=ynjAy*d sVj.B tee] ec?m%4!8`AsϽ̅f'!H#qxԖ啂K qcΨ&„ˑ*GcQMLi8$)-%I듚P zIp㞃#9݈ՏmicK_̱aӎ=kkR>dpP2z^tpb^Xqϖb$D}q#lo@#cIO^RbX)篸87kw9KH'?60@ qXF+˖fR,xa@A`SwBx `o9''ҥh-@`OЂ3S[1/nj9<9ӭ[1Q'tzv=T>uȏ2³ m c5MC4nFp9`LKLp8;J)H,:ש@7;6U~p7!OVf8ٝ2?Ȫ7Bspr=F8fl srIsӥS9ʁczRMR؈c$c-z{Ґ㍠ WtX###2U08Q#8FN9wS{ 尻BUp6x'u=jh]wmOs郊Io 2)6%nd 9sI` ۓ:f;cONYBB=Gv`\0y*;7v @R0@zҾڛA;T/E*2>%zX}i!pF'w` ::unEL~=z8'>gh`:zg)~=0_3ICHÏQfNBoKU:sCO\ ŀٌc>}y- `w8ˊ,Vxȧ'`Y|)xFɳx…#9|4&wLc'sqc̺O=Q=ԩc=~K>cx$p?/Ng0I?(rGRsҬ)Arc=x\gFVh՘nA#pIfX 2ad;Xn^:W=i[7xܖ. vF˃Rsk`SFevO].{)$m#sz  RCA h21߆'@#n21`nB9<G y9뎾=Z )`W8sq$cy*.G : 89ힾիiUN v GZB>C 8'3Xy]`F@'CԶT%y=Hp8cNs>Ҭ!F[6_;ː# ܀qI#L62Nt=6 SN(ϩ22Tz:nye18/ dc[-X0 Y3^~52BDX;rpI#~Ҷ9%.؅<2A#گ# g#hZb=q`֠]gc[={RLra#No*Jq'=J]͈SyeK0 -OekgKoȉm&_8F20FV=O=i؂+>wb7(<$FI۱ O_CKC Wό1Peztn ltr:my958՗F7I"Hh$`#JsNq#ֹjlH8 #c?ʲdR WGlv `Lw ۯ֢k^c c=;S!3չӧ'Hz:^\o$c:qק#=x~TB6oE 듃L6cg\9_ls4c$XjR\MX>ʊÜ|G`3q#G$ܭaR &fg88^~Rzun}y1sIpOt^>f"S906(9$Fk0>XX?wm6nltnTp1LaabKJ8/Bֽ3GQИDyPBA^OXp1` )%:(R2}µp{vŵ b(pq:\/;`f<+11>8$` z5,כ@ @$P\S 99&'=qBe|:9؏ϥj"(~`p?4&ǘxo8鞽;Կc~]Bc9Wby>ŷz7Ev8}9 IBs@<Ju9 Խmi+6Sd pHPt@J9CgX6HװG ʜџFBF-N^@leN@玆UmrmNqX#KֵٔnFo8 pXگG#=w\~C5C7c$cvGѵ"'?8&Ln{?a##SӵMC>}9~F==qnwQw>?ĂHgVCr2>Oϵy͝ :&z)'#fvMQY: z p=}{`:\RJ$aaۃ=G84ӟR@#RJ02=0gʡ"=i GNàGo!n7gO_tl4)- \qZ-ノ=NJyx9$8+z'8z\|$yc.zcO?VDG ֺ3He=7tן5.:֪drg=6( '⫝̸\A\~|8 8;RQ|:6IA`_L>Qltʜp?ÎT v O8'#ʆųHSHȏ֛-svs+9T(/fE=c2(fP;Q|/KqCt"D Uq`WFrR{(5ĩ1byCs^Q_)r&灖 `q^b0kuԋZ8,y/Fy?_nkC,9=;SIշa+ +$9¡V t39dVF#w LžO˗l~B y_.$(\2 Q (cns+ 3a2p2/lKX $꾄w5_2[[>Wz`8rrN283gib4tدu춷w_fP@M(qJY#v܅p Nuvi݁:uͩ;ڲȑ)H\͓栎=Ҫ&*fI;xPGY-km*H6G\`b*N9#<jW9浿CK';BÖ=0 ۓREK+MVaݞwIwR,g /7WWPv`OzEr|3pxaQa@fG¨ӮN3VF9݀bFV4LE Hꈯ# ÷|dzӭczI.7*N2P4qFJ$#_qPg!噲tP9 F6FAA0~k?F4U#z\ W QK-mwS׳x׾ikh0G=1s{QpA {vq_scr{<r##N:T~^19*TX=N0p =OҔFqǦ)X/7;IqӁMhtgA֕#-ӎHŒyǽD#Ń^-͝1B_R&sc^N{Uv<(9=rG=Ok9L͌;?ViTuiH1+9=3=~nz/17eF8O甍c}NX;î*˓xkTJ#ߩ@nkq:ۂG_Z즎Bzu=I>LwAGzN穆Z^p '=oa/C`gӜ m8eAN3^3ng׿zlRNHԒy )rs׹ 7ҋUo)ԁHNx'Y7cc)?SqǾ8S`[EHGWgasǑ*r⴦HcF1^ft9 ?JLn㌱n@ 3kߠ>nQ6~ʮ =G(>^܎W z?B= Q$F6P3|~u;H#HY(u=i~CL vJ5.>l9cU'L-+~15ß m+Z$[h!|浊DhB܁"1>*+)t=3c8s"]p99W}#Pkws4HRŊӑCXFCg+/!c5SOsf1.Y n@Т;I2) qn =Κ %;G^{}?`HnOQ0zc=4}K8 8HNqcq6{''[3Us`q 9rG˓#C(R@!0~?yqhy8?x*rr9tJJ$Di7ƼnOc?WF=njFpr;HQuKx1K)lR`9MV#aP#o5$sI<#sQ%re2rImp+VPLu GCe'[o`0*m|y  e$pFm֧1푏^ՓvLgУ`D;1PyRZOCΰIq k,ltLKpCL_!ɷ~'S $n˸OSJf3q*%L "Rg9˙'5WV "v D8f0ҁ7d`^ݤa"qd`8qvmST1xeCt$/$t֣ "2~- x'n8 FBq d==P,8ʁ[:wi ,18;pos,9'qS==j{ 1ƒ0UY/8J?vckj2TQ9r}+z;r5GHr#!G0=q y\"gPC(ڤsG:1j)=wMtctmYFIRI+p}A7F2y<oF_Wd^Sz8y$yZ8 8tֽ ;#c0O8&N20T9#=xHɱt'<gמơ?7sG_lSqP1=iF0TH9>ʀE~ 䐥HFH`bFIS<]0y$Go\SR(yLH9=y;QnJʒhVH&z`N0[si|:uFx{9a)#Od~T{m_ZO0 ʓ@ Q̂ @rP>1Lcc89H(CI%i+A9>jpFTxס)"ǏǷQI6N@%vYے ch*pvy1Rr p(˟ /\T!.% ˒sڦB?9>r1Rb% $)ݒI'IWis6_—coB1~RzH (uH?ԡv08j,r18U=ݖ##:dߚD>둸߷CP2–aU#j0ctrw >ꑟlj;t{֓x`e 3q۶zT 2X #8㹦$pAYA  ԓ99WRI#r:0'9IA;vG\9Rʰ&=}?Oha9bxKt8g-QXjI-@ "@$}zwQϗxp$i"s(*Xɹ6|ws\˘q޼: YKCh,+!^3sCL(W$c*SrZc2W9qH>^p0I\0⭽!HY@I'mZ+P@#AUsXNk ڜo$u@~`#/ wݬh3^rk̩Sj ڱ8R}#UUH.]/"am!!o^ҽ1?R垖:լrH$.% i6qwb,ȿcH '1U'j+CKJM-d|бuW2} u';k8'*TU1h8|6TJwO]GG"l~s!Rx;#ުK!c8| 1fʪAdJ2&pVhxg]}k)1EMl\ 6c(qn'>ۅ4\#lc#f˂7csHV=GpeX݂*SQ!8*i+.r2H^g5WAorXvMny$N:{(|[$r9!xav[v` 'ӽ0cC!aߞ 83Ԃ+bA>> l<GB9)qAH!87bNFYp6G;W+:In+Ԩ*Ikxy4*G%I `~~bsta1t)TyUc sN%3I+qRR>ۿr?s?Ay1޾gֲdg#q$0ОB?%S9;Y@J8,_.68 * jPX?7^mhhzMmLkEJ/Co*G*S'2ҮYI_oLXlmR}Q0MjbLMJ-tw(TǞ ^1y7K*r7.c9JeORRRfϘeI"v#kx֋bMt rAySrR7ȗ(M;$wۗ OnG <3I8jR;>wBo(@T`pcP %u=5^G6W`?c=}zSU"k&T䷋JGy0.eȭ_/g@9ۗ#?6b~\Tp8`Nyb\+)'s#J6bRcB\.mʑOrSNۏ+2A8ZCz5v")F!J  8r+T!S)`W NxLsWp>/nKBp GJ$ۏA~v{b-ϝ>ӎC~R=im0FHh#׊13ӹa',Ta`9nH ָ%gtJNX7˜8 8t$09Cb6@$v*ž;g@9}G~y~#,کoޡѳX{*>\A09H͒.܄$(ҪIpQշ"&E?IR8r#p$ ^žA㐹˔뻹9Wۉ~M|ś{nN쓎JnFFr( NO|T.1A',xB}}j!}( 2Ӡ;!%n' OҬGÆ 0A bp$[if]6jیgv'6&46I+"Fxy9sS@#%Yp<{Z}n H KchN0[92H##S[h9`݂x з+qp85sj{0ŁDmFaӞ+߼5q"l)cJ=.qN3+zw#٠u m`s鸁Tz3 ~p tb#=O9$zkug$dzghmĄ3 tz pn# ǀq:W\;Sc5Υdg3$θ㫶DyĖ2>bmpk!d;prymkУNgYncLrs`nNV rpp8簯BrIc ̌;G$g#},GΣ9hi1 "G3벳Aw$cs۞{} k&`HOˌqڽă7 OOPzk/vc8pHǎZ >oL`8E9R92NTl%:nԢ/VOz`u9?N gKԖG_`mpApʽ8؂~Gݳ,&8Q<{ꥄKqq璳9"&FFʘO_ kpF%x`S1U%sRovqv<2RA;ʍ&{hvCtx.8OsikoB @2 u:r3`;bxҢ_ y 3Hw@m33W:izuqp_y3_6^7M32o؟zኵGF%W`IbFnOz!92/L(珻ϭiWaF36F.~UO ¡Kwy㎵ʑ!vTId,`zJڍsV8_^8=/ƶ5CA+7ay'ׯڣ&9 0Bv$c jrs$gYq;>E;F?Plpz2''c3X1ʷV54\-<\q3O<TA3nRW*PTxC9l30 Јc^Ol r{/2*cs3 GSv3cH:.>O 188b yUG93S`܄ɜsxX8$2W$8 @cP-pXp; T`09 m N歃5n#icDz=] IrpKc')Z.d~R=bԊȑ[A.Țqю[j2#nx%Ndr}9.vX`QRy<q:WkpB )9 ka~s ㎟Iqc >l@G@nBu 6rϹVMםp+3B10 }S$AϜ1p<^bpT!${ty?TGx: ۴{dF__;Uo(|7?/9S3pV'2+rA.ct G\vl:hHf9ӞM:gq).ðrHs?7p9aAuS%uy1ǷRgCPGO~WNFǶ)GqKcv#3?kl2W:.G]ppV[\+2C/5wvfiw⾊T#e%gdexvTe42p4=UF',=+*=/\ekq3%aӜ3]}^i=$p1ysLm$8 &\4˂ HmR-p с'ծ.+qgI4j@zU6KY{ }Ɍ+<1&wH>Ȩ͌^OMB[e|#J$S4}v)YO[rs Z.#9P9*8< t0f= U &G gVu]7mw &<´l̩Dd.C"T9ⲵ:7-yZi3T'+^H(|< VWJ$vi}Ƨ\'TavTYjV#8Qq*9WkC8Շ5VYPp@Sߞ8p#^$5D3#𣌞A]7pHI@ZȖ2vƣ => YI_sIDcj*U-Aqv`|jƓe--d!3s }zGHlnݯq$ܱsJ#W9bjqM2HF$gYa)'k.x~m_kr̳7WY̺#7`' p)TME+ܪ9u!Er۪,h['4Y;A=8;ggJG$L1X\}k+[ԲZkJ!FKq, J rG\t{躂iMk0Hd!CűO2(n.nYR4I'h2pzյ:ƚ*v#a*1O=MnYm^.B\H"G=AiZ.zEPwb0e'S q~;X[8 v#Ư%K&r0VAV$KGXbG\MmLOL}Vլÿx]~ qD݇Xi7wНZ#u:u>m&x 1grTDP A۽iN{UQvik]{mD8'׸iDYߨ^yQICG,9Yxm8ZRiuj+%p͝c͈6ɢe/#w!{+-t8Q/nu[{{,4RecQ wv<ɜيS]COBm!GMr3K{a +KJ5-ueiA}88ZaV}2E##7 RN OcجOssQa(Ԅn2sqΤ $0 t\w+B0+rU_#(;r~,Qm0qHR8ⴧI2mJtböWkm<@XtdcV(VgYX,qo;wc{%"=:ҺY6Ĉ@oc&k;jz-|Ny&A]SRw ߸}_/WJ۞؜ہzTe#?yN=Hȹa>cG{Wiagʂ=F}ZwVjRF;)n8㲑g׳J6<,M]YAoyw+^(l{_]VG9\H϶8׃_T$ts@0l=q~z{{?i'j\pFS#Ú&8#-dzzJQsЁ鎀S\6;d?Jv==qҰ\iAG~}N*-sЮG<}@ߏqIu``zS َp>q}398 Gqw#ٷ';zt)>S(Ƽ}1wW1F7`epzm9鏥&Rdq׮qϽD=$&K$m>:)88:w럥ML0?=70N*r~cׂ3?.9=SLv5lepz64!|{ j@A=Xs=+)H"cwAʎ:#|B:$7@;βr4+@cpy 1'|܊P(\z'R8 dtB%ft;Б,G֡3u?L`mk#U7[} 9;-(H';9+'"L%d3Ǯ>ƞQ`psO|_jκH;+qoy;d?Ҍ >= 9WWv}h~8Q\z?80GP; *x8;dSϥL~vzwx\zOʱXjO/'[clZa^r{] ぜn~91gX@۽z$p8>>tx@dq+z1G$HĎ} %k9Wvi 8#=ܾ޵aĞI5ֶ9k9n1ϯlןHO]@ dTl\t6 ++!{0玣ھalpNA=xWmwҕ՟cɯ\ 7w p6Xzm<qۏC]gfeVA#9*epp${נt9 Awx2$08 rF0:qH]7u$᳜B87wwʑpy8Ivб#ؒ<`psϧ{iA>#c9KF2$?w֪ $N0y'ևwsch۷~GHx C ! ^x=!$OءgԶHc⪹,v㝦=s89j Ԏ\|zP7; sӦ1ZlLDĞOP2i\)g@X,^\Th Jޓv}cJGQD}="Kh;^=qʄ<8bjzT0ʳf[1U q^w/MA#]:cJȣr$. dq}=YWia|`2X͜ڬ\_2V ;y ` Qݳ1#评zΗ%;AE9PVua# }m&0x9^,zke ?6@{ ^ry>s]ԣd9Igf2Iמ;ni01A81];`8cjczGsOL⩀Åg#HC?FsnFql ` 2{9[99޹?`fP`O9!zd|4/9 p}{Uc:q%EN:dzcI+#r1SzeyϪvx:զiFg<rrqӞ{Q\OU^PnrA%qWݎzdgsG05܁<)=z~ZCs9nIJsJ9I(W8czeM9n #{s t:Xc8Q)G2uNyn28?QMH9HR1z68$O?'<';>݁=M\Y!xc3לgJN9p1J7@{Nԉ'mHxǭj\Oe9=(uی`d:f{=F8# 8G6rb2@Vk,%vzV{ vۻ$u${Zg%@ /N:F{ h y`GP~kC 71}UZ[+ ,6I2:8XGUbTTiNzvC#`\Fs3~Ə?tlCNNS)z>c7i8 @N":r$cHOOJ 't`a=8=B2CќA2w9ݎҫ )9]͖O$c<~"`#h19Ǯ95[ 8+x~-tK+ K)#y=/8Wg!wcN3Mxp(p N]N1V#P8ێw\*YH@ }9*M?Qғ+|>Oʘ an%J`ܛu@QY=ߙ\a G hTss ?pA=FH%G(C"3;rޘ <ҵ$TQ[tv|f2sǽ9 -vnpq±!nČ CVn(01{3\stáaqeMnp 0^~|XK9;aq98k_߳k˒?jr9xQJr"=SSڹg#Kv47>`[y0ׯ9:zS$01G$c`t}Sv1]=(`Uh |,fV*Cd`t}?´Rs}k"]W#,Â9M=LwTrmʯmk=%ſ}>_\k3x] p݂?ұ.<b3++˜uI~c!mm+m[}{t8-!s=P5Ԕ`S;+ 9|{v> Elcjf T840hn9;+wILR߻` =qZhQI,x@?(c3=ϾzЇanu##.`t?\vcnq8U}3U2dqOLr3OFh'wwր2 όp Nzemlsa#*F.N?JQ4nD,7'ХA\^+tvwn%rpOP>=ҸyYѤ\h!G8$Ǡx˫qhD@㎘41<ϖ&ҏz(#y7s洜ٌ`3wp;`aTH8 d%w?Î9QK2u-GDJ;`7 7|ÎH$vrsO/@6F3r92#n[>Ը*G|h2{U˹r[pwgۓW񓳐yEa~P|]0\t 9:I09?җQs9`s}i׵=>r?*oS:H\hzH'F s0<33ޤLC >r|?qߚ`ʹsʐ8>u5K3:8\qZr2Tqu;N=Fj-ɶHcq A\۳#1j` }S qBb>Im#+NGp8NBvdG !u c r3}|Sʭ \ $N{h}%~E= =uт1~nia;+Uey ; _H8cnPsӚ櫴;=ۈpOp=:g?ZQnuꭇIBON8R u@.?0w<_NN='^t'2OO}:zr:f Pz҄93w8lQԫl<(#>c 4"9=r 6p 1߂Gzu?$gst=O&qCRU<Z]7P3ך.$.scCM힄`34P=N3ѳ=뎞!>?zq+6;'IxM;.oU݁1ry8.`HĞBr8ʹlf%+)j8[ܽWן_\C`,0I=x .k36rrA%IFR.IAvG~} 8=Inkv` 8?x5iI9UsN֛) 큀HQ߱#OB Nzpy5M~\*C+/OQc^#_yy kn!w{u5'061L˒U`J>@6$WN9js6_\ K0q=WJVG;Ǒw*g?)ǞsҨgP1<+,Z+ddr`ڥsd|u]̃V\m.109`L;+#` F#9<vCI0NF@ }^cv66y_֯qӞ2}{CG&G=LTp23y뚒H8ہ@ީtt: M2`a8ҴBprq=IŽHۧ'8#!W?_s ն8<:F;RH'댨ˌ{s `Lc88zav[|1m@BN-$sGpWEyc@=7 '4PF#ѱgCGLB*mFjg{5&߻A)1p݌@F;?(`28 P7 A砧$ͼ;Bppv n-2 ]d~84i|1@ Gc;շ1?Ydqxl{~5e H$%WJF' p2=#=͏a觰?:>7$&P09>nk5VuR1r]Ŏ}9W\X,>V>0'+v5ÉZ3=/2jzIP+cG|s׻ zN*y&'2V~3lqx#Q820$g$gnn?QOlg鞄Oy둜'7Ij#F8Yy?29 JMjuE qmq{ON̵!Oǎ,j3#$cpFVi;p8>P4>zvZ!0s axIds׏#6#|Wpsqv:vdcs29V{p2d㞦4Hn0/7d1ᗁ~\RfEp댎V.bIʜ#=Nݗ#+ r?v:u޽?Nx"GuN 2*Rӹ \ɶs:-ŏg=xץq-O8Ll`ִG>"<ۡܮlA*X c=Jܐ8 ={dm8qב#$;d 㓎KIw)8l3:! H8 睇$ A<{c֬ť ˽rt)껀:)F)"~')|{v4I#`߰g9G\5|d9hmŦs~k@ pP"C Բqt#i4󏻻8{gOz-XUrT}xr2?u謻Aw:Lz uu+]ۢ"1(RZvG {Gsk{<x;'|gYϗ H#j='_p-BmhXU.F:cotCMNxʶwzn$|%rk͟o4 T@=8'Kr>:JY_s|ēӞ9I0?0#8rօ:iJ;VF]0s=k-$ohǧOGIwK}w .tG8+vs~:` c$1ךg.Gmޘ^y:2j^4"tuA=y=0qۚKS{8R1drxBmp:s۵4gjZ8Ϸ}&{Z1z4u&OCZ <η c;։qUoz8z0|28<}㞤2՚K6=O 3mҬyg=~ -j.rC O1V7'$ALVbhn@ 7>îFNԛ=?Žq$!8}z⛽y' ^=seXxI9 ׯJk?dc9#io;W#){3OMǍ?8隇1o9}p288K/m\4ycpއDX29#9ԹDl78ۉ U9_-xpg\4!H̶/mʛ[t0_6zcNM;Rs !I$Y1 %HOr$mx~\]n_)b2>Tr@;I*eU?x<Z87mC&DȫţT= my<+{Eo+k1v9F3U(ݕNZzs$^\dGUwB3Lhf .$Imz9F0G'q qڣbO/FHrބ#] + NKt< #$d;qQVnrÞ})qZI{+>^!42#Qd nv3뎕psHeI 8 y2kNOb^2!1?2w04V&xwGک=-[搴h ޶E'k|Eu~ueˍNHb|<o Edw "ZuVd:- [b[uem<Fv[K{^x[Wugv 1++[k+S4PHUfZ;Ӧ}m.Exzkȏ,pF=ҡkgP㌃wRoآHR@@ c5bJ1{}f9h\B\¸.;{Vѽ=c̾,xoIM,c+hWBA*_$˔vB26hا,1ߞE' Vs.-xS(ӥhtA_瞆6ʕe)򫽑 ~mf1*AJǓԑ u玼R-v֨<Ì$~9X sW=yCp6ꙸTW+q>\ҝnws{=zT-t9V9G0 5P!k0 q2V+ g8aϱEe:bLNq==}j8F{GjU ,F|0B&}9XcSԥӕ=3kyݟ r??JE4ssy^1\uR:_CGTrp;QY'8#R"n h ͂>kVuhN>ٺv#Vg=rI'Ybh.x'OEz5&Z,'N9oRtP <11v ;(^3zczCҴֽ5P:g=xE|>9/@` >o鎙q[Q) ׹M=Svizu@O=V8 `κɓGp:ɻϱ;] _jwa,O@OBcM$~cq?I 9`L;sڝpqVQs(@wO` L8fLr-rpGS_I|+!"g4@-ko %A#c&29ϊ[Fˤ]Ծ!cWqSWq$x5K8˔f\3eǠs\G~oUR c#V;F͟^洐6=ǡMlf5ođf;jPynצ@*;i|#I pw `vXl3q\6qtO+] ]A.9NK!yRNs6sǜVb pqI$Fi<,~b L)PIk *mrp'\`֪{ěʑp1] )d;[dS k]f}RYrɩ]G,lI(Bs 5eggm=z5#k-Kk7}6 -gk"ݾe#-n6סqfr~ʾWs{F /8V,/g帘cŊy.g8M1aʏZ~NkK(gMc5aUS!I%K!w6ȇeJ ˍm5gNTV@ PW FjRr߹XE,cS 8tIFe,de!=p8=Ú\S"nR]. xҚ6am;DޑK0I3ǥyZZR+MJZA{ڱ툸֥Q6FG:bHeN 8pqz4qAj\yʚHx/U\<׌ON t+ϵKDOBd8FsNHH*2nWd49$8/ʎqisnyN:uUBF3r0H :c{cB;?08x0۟<}r8c9$@㓀&4WyxWr;Pc0p6b)"[cpH>;O%ygxVO\N:0 @^8>]yg+Eŏ*pH uqaYSׯNp8R7QQ̤''7qg~:Pm`mQ_P;$qާf7]>eI7<'#B{?! r?sʜnp{49Ӄ)󋐗\w ֩;8}xSҟ:g/ڋcryӵq2}} <0yO)~тrO{_(kgpGRG ¢FKdm@a8sJ`;: O85h Ϟ92A(@Wzs>A|vRGAqjprO9PFGSO"Ar͍F̎E[  F=t>\b.{ FxF82qq?,On$vO^|8;w9NGrzsګ(_\d&NHyN$y~94v%B=q|;.2 vAZFH頵H{:g[nN /=٣bTpHUF2n{OS}r3Lv`;*eƒ+1\i_ 逩|A$GO¤p0_S,`KmhWdu#)  3Nz[0 >~9 Ɗ1.LsgS֦J`pyR:gRD[c*\G!N7)=lMu#`Wos@'#sUcq$``@'pT$)bF8ێI %9GV<(@8}** qI*3zsRI ,+С{zTyEcz}NM(r Az̿(n#+ơ o㑵y߰r{2K"˰e?)[ ps[Sj_qЭfF|m6 '5{ .;}jW.$E, c0?Ն=XW;r3JR??zm4 Nr )ۯ|V^ #$gzZnld3#єsijVXJ02O=22{ԢX6FB)NC2d=idXiv0SN ;7 jlEinUY10R8>[Xd. ゼtKhP [ 2<~=Xv4 qF RNP͎,QFBo\yEF~Ԛ3&lR!WْQ/ 0>GV$O3Y6*/Nn)#J', ,!B2$9be1N zg8&mI HH$M\`^Ƿ*/mo:t=Jی)*fwmp8R 122>ߺAG$$P:9 G;C2C{Vv1(o0{c R{}?C6+=3O=c:V>a䜀@7LL2g$Qڔ@Hx0GN1j~8 Tq7uH\sׁ׷RGb mK2s i9) ~ _w<_E9n r@ r-A=2sM2J Y@8#8co)y=Zl5 X}y)G_&xK 8|c5u*g܃P iA!e >wܿ̋69 CX >uLw"P Txeрd8 Ăsx?{Jm$bg?)\aO|҈U:T3>5 v=iwF?!Amvn%ߜ}=Jܨco?+RA8dÏ,gLv3'WJF lp0z3J%'c26#XH$l B sStR=g㎵ bʥ" 0 'k3c_ꫡX6H,X>hD !jgZjT3nUܧ-드g<Fr[s`Xx UVGN sniueB< sQFgi898qޛئi~npzdxjYL,|W*pAքIr_vlؚ+ NT~&~W9A 'h>T׍#O^-F@l9 4Rp3n?18$ qU;G$0Hy۸l ʒ>RNU_$g6P{9~W$PJs1Ԫ{5H:C*TmfBB$uxaV<}n:mPB9͟fO1<HLnOYԲlWV5Lތ$}#bܩS#[apL9$=:Zk|o{wHz$ǡϧ3̡Xx9׭JNI4#\c9#Tr?ƀzc pJ 3>tvpnlӹ=&$z=zz=Bs+zzMێ<:;6;Oq N8dW냓8JPQq)s*c 4¤g`2h.߯8z(+'=zJd u֍#H0GQpgN9ǽ p=1s#k>c2xo+g+wq!Fg=1=N Eܦͯnw(?1VRr:b6xlebz踤qSeO1v'pżIB23z׹Bd;lv U2A%}k !}ýuJ*)#m>O!P`׿j~eI?.U9[ך+Fo Y5, eA Fs}\ 0f+6ryg•C"ia/@89ny _cF `rF{קMizmi|s!O|{Ozy',pVgJcP7NF3O5[Q'g s:ţr@doYc>:H ,АpB<ְFszՒ0H^k,a/lq1?Cg#ymG|I$t#1B޼g~\zw|gnTO WWdv~z{l㌅ `g=~ϋ-eR=N_3H^.Qخvr<x ܎|ĩ߯85TSav]FO9 1iþ@MD@]Ww{i#\p@q\tOwQz dIY( ]r3k;әIܬ̀"Bv5{̸$gk uώ[!emPU:ZҷHW8ٜd#Ss$czs\uܷR>瑜6 O`3ȫKy^38+~j m12HqucΙClm*1+?JQkuPNK2w>zf9b7 ?v:A Zt1{\L(UV@/];ZdHI'>r "z$qn]0A 3{ձEbAroP"7y0,9cMfJ22^G'Hq3ʏdwSq\ 7 ݃銔>@6m@.Tsǐq] di9㩤㒤qx=1kNrpy8{UnކFO{g9ǷNB + 85FDwON3sҥFr~\9'5Ȇ{ a_QA&B)8m#:ԡu:KFܟ4[V9$evj"6$H\3~rA =J:4pBq$tǵz~+Ip7')99'Ŋڃz/»W$S=NޝO g͒N6g`nS>۟:ב:.ѓ?8.;NAiZ }=};T AA4Y> vyvxf#=0{S|'LgbqMD9G:~nd .㎝: OKR,_^zc׃^yrıNyFpTbx8'36U,#so^I#t?Jųvm8#+ڤ<"4<_+wq >p73'#ڤs+fS0ݏR]A`7 stA#*`SoB#ӽyU*sUgF*0_z*g'>NA\ğ1l9$qڽ<*+&ccL;0ʫg>ҹkQ҂\s zq1|w=Z,20 玜u(+-9X`H88]6.wf 8V9=yۃJ `/^q߁ϥt1iɴ(G~9gfrԙ`Y# x;sޚlwgޝ݌)~Pd'2}]nctaS^U]v,Y{ }'{Mx#{Ǩ'uV7t #޹?x3qTAkC)|?+xE+кy{ד|knbA s^.iMF\>7ee瓀30Cӑ HO#f}q=s'*g'cJqњlu|XKpKo,'z;=@ ~9W7}[ Sc,E'?Ozn8$_^U+e̮+g}3?8'j-uEf9黮)O7 {fh('0G'ғ<s3x4/h09LF $cr'8o~;Tz LzL{gq0QKKǯ#e8#:rUٚK'99ZwcGjeG.,{iZO~\]3KIx88g|я$|N\ınHP?ޟqhR3)z$`{c:\0Hoq0AsLGR8PId# K2@9rqT2Yp;O'׃ˀ9f,Ffze>jC.H.`Cz 1z=R8m摤$A`/ !$~ZZtז|ުp(1R˸pqҲ՗M*Fyt(/I}^P!nvɫ۔G7Ȭ2QsRvke}}-"ͼf@ |ǍF2s5V=GmIV}NAߓWdCRRRXۃ$,tLRKUYA*x`J@{'5jz;? skԵ[q۠BD#ildDlF7YysiSWIȝ},[߆zg"FӲl8nlYUMHGqktVp~'-u \oMЧ Vɥ'v,^eh^U◽{-c/k*KW\Ϝt鶚Ht>A*nrq],_ hZZTL{%;h47_2.F)v ѕjFL͵WM9ws7}g&{deYiCM4Qa2A0KhNT3irq_$f_{_Gj^m~Lԃᶄi.nmf%^ qa\vK$qYʒgg;i7AfĖS gdGQS*)5m},(F.wݷ זv_N$ynnJFr$e#Nq; $G`NsSR2[ӚگRZvð-ΥR.Ü8'$6Z}c/*ZI_t0[<>Kr{gߡtjPVE1w:g&nȏu>NULX4j|_pȨX670. Ѫ>`!J~m9\Sf-Ӑ Aשxi%v/ '9:gҹ䎤ljAuD(NH8In;LempmT v灃cVԻ?ݸִ9F{IS8q燦-$7)A8k ׼ʶ( v1K9b1cֽ^[S8ݷ}c5aazLquy)[Ϩ<7H-0s^Ҿ͔ömO˹ {$UIaxpE2rN |hO̯ҫM QҚ{U,On0 An0I g}N?.+4*J6}~<歼;oL;guwD$E=afsúL6kSB`= 8~=8$sϿ^k8+"kc =tUxpW;x5L*=Y9}~5l:$?QTch8Or=xOJ#8ތ:uݓqf4Dg?S:G^N0A@x-2&: _8sޠa}>Rp>eFS{IcfIAw {usYK̘uolgX3KqS+ϫ-YMjb0 s'vSֳ$( I޸*N}8MI>Rp:&rw* u#c53eNW|Şi0'y\{B q J Dӓݻ>ǷSYzWk?`ª8ȐpWw)@$c}sSް'9`ӎ.88lǿr>c;};W_=\:0eryqj1$r߁:qKs׆p?N0N@>:dy1Qm /x@5z5 SSKeSӜu*<׽pNFxQǿ'8=)}rq ex`~R1Fpr2;sBNcʺpKZ=BR{񞧃A52aS@ rnju8RIxRH9!~Rwy#Xlnz}>rDGPzv440^p@3u95'^b t)1!=~qH9$xc#?!KAuœq۶r;T39B3q5-ySi|F9ҿG{[=1m*YFd$<=mvrsI H#Gy BĪay!HR#gqOF7$ClF|URô0p1֝+wׂ9'sN=vnx3=c,w}ӌ=*PS埗^ B8Q&m-~ B2swC+anK1=Y*@w9=Tr9 =Pt%F'H?6Hx*#rW;nfkxh==JwPI鸟@"`w|c9rxԂ8iEt3)_#qJg;р<9j(8vqޔqGڇP9< ιc/8zs׌tؒ:di c$㯡9A\-r:s@<\Zn9ܓV` qmuv3)g)$8MRhI,>L 0s֟6n$nRŽz`;sĜ˴u'1Z7J'ONp8^ 9a-FeL8#Ldl` 8=pr ]Uv)NNj=q9E:rvd;_yjY ۷nh[ι9r ð^rO'*@F9w2{QCb>Q212``2xJboX sA`u\g$U | `OZH A*w7=3@$ZbEw}.8LAvNqM v1眜 |Ӏ=UIׂqC7;齘BW@֫E(sӑӧoZ]O I<=iQ{vیqZ[ `rSsJI?vHPs{R4[ lH qWА3A $ޝ:>Dׅ'^T8A( KC*ӥy؇tVsanX.v$<״xsA7<0p?W=hZ6jDBF'^l*mïƽ<O4'2|g~OUG~=kŷK UU,^/%~rXX&0<ڥ\%Dtq\Ēr|,#s:e%< oہa5'f G*E*H*wA֝㱋2dl 8llS =2ss\ zwa_ֺB2w@Fv^UwG T r\[nR8ީʯӶz`OX8KK 22G'i>QOӭBїHDW $?\c c. lI|Pd.A; F/Kr@jdG [&Q]0=MLSa&hd4`CQT`]NszqZ1L)9bp1)\W<&?@dgsґ9}+[ZFúen:dycJCO;p3㎝ƍs?wQI[~J8L$#[q(F2ۘg_-k1/5=(ypavOPsUӒAڹ89}v>vږWq+L*~{Oi02#6Q"%bvB8zĞU擉>lv0HT'$oʐ8';ێu9@.ӷJ K2r V,W$})K&F l)TN70;``1}^iq,3z)ؐcuQ!Uh{tnәUUTrO㞂{zzʹ| r;;~1+%s\"$$m` Te^'#+M?cƟOC^K$q*G=j@}q[GOǧ^; ~9N:(abPy$z O<3{T/G'׏zoa߃N קSӿn-l8=}i9Sqqum8?oEaq#b( pyp:d\wd)\~>2::}'3ojI㞙4tF:dzs-L<ҡП0x7Ei @0+%,ހzNZZݷ۸;syn$n;g`hq*'ɴDoXg'@f,ܗ;Ns^N+iz j_$ݷ< FxoQ'hyH zt"Tm}HӬ(n'?oJKH`|1#Ǡqv2Vs?+ӟa^]ߜNX.`W56L |vO=$xV v^ wֶ3f=s;NA}=1Ұn=?|_n"wezdy 9~&q`.եd%ޕ#Ϋc;'9?S5') '# $iN=G'oSO89:Urq=Uu.]7,}ǧJld gGzt"7GڹP 8SspGvWl=zϥoQ\󥥎oHǾ0:`E>f<{Xi/ Qk{Z6䒫-_̞Lu EnϥyXj (/Йn#<"Ern U?1 cn$!?y%_|^6F6kʧLC`ɷ\Z.7̒=0@^p017&BCrw_RN?ZM׎Aa<rE\S Yqt)gQ+G\n %8⺖'_IK Qv@G#ԟJn>U1%F wҪ#̊Q}?.p͵9W#%@ۓ}qS#Z{R8y>ޕf5flqX$|}֒CP3㞣<+g\88>]ѝ:FIfR#+jǎ  qQႾ%lX88"Hc^Nwڧ2y}A3vu8@g zu8ɪ2$!@<`f_~sfJ$9}z#@'x 1 r'rLT x@3O* П-D@6g9>ٮʰQp$]`Agj6bH݁s^oz}L{зC~H\`r=< #vHϰ3U3=@ ?#s?>*dcOÚ2q~+= ҶHe90Tny?$#$+*6B2d']Aa NK&{V}KgMN0mn s^2 nKo9d,OR;3,й)*2(Fssѿr$(1_n~2.pО}*}?z5㭏FHySjq':"-$|CЎ7~#j.DPǨۦ(1p:qN8jE!=0893؁Ҙaz>] ^CqP@qQOl$cD#q~ dX9`\y9s{RSڤO*Ayڌ3?@95a)CSFyr~e3ӿ8rm۰N`F3_ھ-c©;aKNs`yU%($8ji6wMۍN9vZ0\/ 2s午=;kn LۊZfۀ˜;+Ɏ= .;я6-:k_p;H\޽$lxX^LQy97=>^ Wp271z=N>.w9,v*1ϩȬ#h nKIcv%?҄`wg9 zdzf>1WǖLn޵q]Lz266pZ"58ݸrx'ד4Ikc)hkG]dleO@6=Y=L]O+7w)=#rFx6*X*81>եi=Qc6@td.H8c?Zi;]h#^# }O1J;+K9PqsS_(jVfyrIrQֹs|k{EWޗ2N;K =Ӛ֬i\wAw=_y9P͗sN)cep~^8x]m n;n{w?JvGvvi_pڽ0$}.tAG ?\Qb??:T#؁h+~}OA7P8zSL~:sxR/G%@sÊ |lg*ZA { \vn gb=1(*~`3Φ021ϰ"?jQ+&sKl@cEJ5%˛Eq`ty;)ߖ##'56yy朔̳r.dA6Y대;֋e h- W]ܲU=]\5,iyPOk]_GoѮ}m]*ݵ~OX$l+A>$dq9R'kOfvn-ߡǦn%qŦZJn-kPP3Y_}͔ypwePH|12@8Zϕ]vM˹JM[+eYwB LRDxeR*=ṅ;Ԏ+vH$mtx_q1I=0Fk-M3LvFsMRI[okh+5x{]DkhgBK,>ADӮWl ukn#I*qZmGwmޛǚGri^XN8imuSSrQjy0n:ͤXڙa4_%NX IwbӮ%yMseesfȊ>o>KsZY]5eݢ^]Zsu5'P' $b4B##elzUV mBT[a y!Y->eݼX\[4$8(|ִʰ"SaN kym08үZ&Mf1,5i[PdڍԼtv>,.#D:͵יz1= lry20xmLD>VHm1wmo ޜFќdޒRZqP̤,%ݸ6X_F}Mf : cM4nRG)'1y(rkKjsRY<,"06?J:~$s z.)UWCs-.#Hec <β*ܳXo\1NOn*2~zҁ1R=0QP'<>tD Hd297zQI6H=}y<`r8NjYh<x9%EWY0F2xuڰfF0sރ`s6NpL:ҼگVvR x۝9v|>y^׷\Vw)D~pGq[Zmd!A:gI92_a6?* dcI5||/{كw/0~=&1$F yjT@s__z#ᱛ׷A#מ i s3O9z20 9ǽYPOS'=8 rQ펜KyʧcOi0$Aְ=.)b.ApـAqv>;񵁶$e(0,<5U93ѥ;>_|: vl!ؕ$ZDOɴ"ಐNA9]oYf\ͽ cr'` P5@0IOc *}I=>Ezt l[tտ yvz.iỲE J0NNW蠻tU{VcHYg$mwfiJ|\vy낽kAZ]$A$ヷ cq׀+j ,vy\L}+y"`#l)S$` ͎yWy'8px*{θr]| #;=Gb8'3)P1A6m<~RRl%cvvXc#8Jdȱ)#GpLd͎zc)0($m#83ޝpN.W' z!nmp9~\g8j$jn‚B'MQ"< %x`F=wb|@\v~aS"H#;T@98=2LgydFM2-Wܧ8|tEb *YB,1Ey$rEY.ar0'qڮ+bZѺ/"xU#`Ǧ@鷥Ae}wȰiy$x Jlp6bG`'mdn N1>V|d។קNeI+q u)$^:r9B* d.^nO tX7(Qqy\cT?!Y@,@cFp$s_$o\`o98iPl(tq8cPpF8/^q"$VJ`)]W~E&$AARE`NXIڭsqjL#h^7fpp!$)nZ[PZr3Bie2)m,W?@Ď$ Aza[uzH]2l8-p:cõVM̬UH!vq9J{c@Y*\3¦<6,wڅ b bfQ\څ w+rv {VZCrZe!U %G˜vAUtc؈@UL\qTy$L ps֭ jhNX0*29sHxb~fr݄OCר :-MXR H;JIG'vJ^MweI/^sבz;%>YJ:gNs<SuO=I?Ͻcͩ1s8 r8SǨϽ9n9z{>JD@ N@sz\B {9ϧ~ij{c>Ao $zgHB.9$猞QM/p֓teu0{`NO(Oq(,䎣O?cs=^(9 $99X:σO9c߾G`\u9nG=N}ܜvcO].- :{5(+~shO!m.ARO rq?/iQ<,|K nx<.OTm$s5o}R'i Ag מOp.OʽIS:Wn<].V3ђ<6T2r@fC܀zq]}N0@'qW##GZy.wq,|?_;qQp8PS]cw?.Bm#Fxa5D%evQ Xi#mRC 3t(Ξ^He@hW<p8j&qGݰ(zw'<]hwy*z1ބq`e .탯'~qOާ 0۔gqI`|X`z4]xlU9O84 ʹ<('=pxBEa ׆`9p@;qĝF>` 3FGp;Knrzp39<.៘d}ۿ=8=337r|Dn BI@K|QXR>V lAp~bI㧦G9;CJT0N}{ZOa ] 7:m 6}n)G(oB[>n[AJ[L6+aF.FxXm-n:w]Fۃ䝻;sJظ  p[?{g@4Cr 烑{ҼO_CբhܼXXb ^C޾,`?}q+X'>G۔T^"I `p+AnAF{8v i)2P*9$ds5my6Ec 2,rXNGﰑ=i#JI7squUL6xblXG_Ҙ\ p̻ u#>q g~ዑ  KI2LFU\8Ud|$WӗrxR?]nc+9  f#^U*N d8S#:ui"]q0rqhQ 1IqSa-ɐ;I=>tg;=)l9(J7u.#dgh1z1@{~5,w`bpY̍\Rةq*2/ \8X!9jwq HC 79 -]7"8Qei3W$`rqҶ-+ɖp# 0q^==k7K!L@8?n㲶GA=4dzxNGz&?({N.20;p{rA鞽G4_c3'4l#sSa-\#S`dmԜZoUa1Td8ǠA3G|b_6Qؑ^3Krvd\qzBE;qlw 8sdq"Mm!gOڙ<8=6n=~Jy pH~Pr3'npzi@wo^҄89c'Sc_Ctw4u 玟f0r=28&QۮKpxO^*^A^nďg9qF3n" :q4A0'Iݱ 86~9緵`^&`w 7O;K `sϚa-WҩWeH3\#90sБ#9ʢF<|8;qw~zbJN6N:W]T^?C?17A;zOZ̬+++%ʍ8'|*νqНeq8>Y ϥInpԞblsl|c^t yT_8%@>~$Ke#`yk !% 0.">MXr~1U\ۼ*C8F㜒cf {tG篧J`'<s#?^8\`FrIPD9V=U |q5| ]b1׎c(mЕ8u|? t99Es [y#۾qڹ:=lј@îJǯr8od<U$zgaQ_DbS+2 ==D pbB F3Ƿl. ,+Ԏ1ckJ$ N~^z^7!|ёqadiPz9xiݹUo3w܌dw 7.~B c`+z{W'';7;Yт@Is#>ne'^8U%'e_g q^ݹsR`"ɓTm$`dgTu2JŽR윖7tcv~}*~m窳_$S)Gpvٹ*6"Ƨ8< P!`GC+A##%G@ǎ}cI;198)إY('l rAzrF{Kb3HTmR`6޽i e^ G9*]I(\*A $9nH^i!&؝n9犵M6JsyqjH)'(*I]bw&1c2M%k{vveH]uVD9$##)v:[P;e?)'޻9%@&@*TIxkM{{BweF:9,H09L?uSG6av:14(|_l*ymG v.zvJ;OOn;~=qFu#j[m?qӁ;O۟@=Sq^?׏Kӓ@8ӏRXM#N{\.NAqǽ&;،sǯIN8oAypcדM<zu;c63zcӒ1ޑooکg0A )};T؏spx9 _hܜH=[uVЛwIֽNz0}q]t'ROk9VFp9bsO@+"tp {W)C9 :ۀGQֲgOY/SoYiW=|F>yX {+2y_QǶ8j Tp8':gqc[#8p;Fpyg<dpsOl\׺ۇ ęxY(*vm xylw/'d*ּx> A²T#M˞90c2ztӥ_kMFb%syQxSۢ <tדXnC$\9)H啹 2srkXEjvSt#˜z fbDN$r4m]XzkFg'rG@\#b9t\b\mU~OukE$E;8.9~u](,Jc;[L y v1$+B?2 }9Ϧ:sB 5{w$r=J֜_ßa c9׏Zf+ Ol*U ^s/[呔`^x'iZITǡ 0zB6pr=a"WQ@cˏӧJ Q'!=Ak>&`nr3``Ҩ̧h+?1 0G91YQ=qՉ\.Gҥ tfpprxrp{bnA Jy]~# n$A?OLsH ! 7 ŗ0ߵy|sr9H Pۇz?Cҫ}PI݂}{ph 8ySP 'G~Bp% }SAJz {k Ap>Ű  2{NS]ypszg!_Oڿ9q֯YVӖ<LjWt޷=;Oc |Cg{uC"5O}S+\ENaA9v#l#=JbzEAo={֌hx1߷oՑ~;>ϡO9ԔFs8{J ^>W"lcw3p;q [>]r- {z^iWg9F:>99`[?{*/f 0Oۯc%.XkߐCH3$yw8 u^Z9)0.b孾GF>pڧj3uzg^fGCr:랄yiV\k9Wl.19?Ҳ'@= $xUy3yvrJ1gǥq769;_:ڻ9s`I, 8U* uTp}n:hQ6bp@0AдvʑR=ʦaِ`;OZ`b0A ǻ|iTsoCETp>'=yv 23ROOn)$rX=O8'Q'zgꭡ7*:zr*o `OfZpG ݐ:4]yQЀ;9z[u6n^0zcG b^G~frkjM K1Fxl玜񿋴gQߐGQ$EZ~)20NyYԊijriu073Ǩ'?ʽNa3>,]%jzEurnĪc1xҧgn ]XuG>é t `͉< }'}b:⥍|Nz?;==IqM1x³(f=9PLrIgnHNǸ.ry{:o#i09[\Ts}V1pP:4_{ VYNJo#}}*\vm=;Yg"Opr~|zP5 팟ӊ^Byz;p `F2;Ӛ M$s:}:;CSGNEq 63OJOL}!'50}z#[|;'%;=+wjMiNҿMϖ~+]iDAmu{7$>UByb.B89=ktkc3 }|0X-ن{+urZ_!fns9G¤a#C'ʦAq#;-* (3"ݔ l>s[M (j1ZYvnrh/29˦FG>k]4 7H䱷W>a?IIPp:ЯY|vvzE}8.u C.)*8#i%~X\&.%>xaVpm+guZFE HKshOƖ";8gEk/_4#8 U=#蛾M蹒Սx>x<˪*U @ypߝh?Hڍr'?vV|@'/j]V? :+Q)''4f&y  o|;ӝo엯jעܾ~"&t4a-GhpT\+bK>N")#mĎV.g _W޷j/bfپE.sQض!B& ;TC)T,<ԓܷ7^]k%#ĢmX “99{ηxZF_oH$Iԫg (HnFjeN*Q)rd.JK3JW_^SI,- ;us_g1}Bk=8i_tʠ?N_<*GݑpzWe B*P'%"X^I ?ݻWYZŷiCn";tdr2;^77$R2X?xas\CHugwwXļtED\T|/H!6Gj7mB:F*~;Uƙgk5w֫No-MzMgt>u^j+4+N3ӿJ宬:k+Y뾅KV).b$X$HX0S!C*z)%bU2JOKq¶U{Wgtvgx8vegF~5]@E6a!3<|Y Rc j1ӑby'8R).e0eaѺq֣t%˘O[8n0_#sM6vVc_SKGI}I]T/^O˅޻f/i?S^i"3܆8Zw4zI)={ԭx;v>w!O7 sKnZ<ќqx<d㑞1㿯ҟ0/O# Gv;/yݜ[.$$ǩ#qQR8!pqQ8S/8ܑ)ۃg y'o8<:Qpxx{QwݞEÔ뎾cQH;gj.;q>껰 9!7l}z}i6ZDey3*!<8n@Y9.Cu#_Nju_sx9'3XĪd) yq<)d9:kS1禕H gN8|~U\sܜ8;J-NQ9e9IϷ+RI9Hzp{[pa}sק_ֹ$΅hˮ8<z:;{Ve@]9]#S HÐpǺ5-jZö9L#m-"; By?Q2{8>q5v1 sаlcknso^3ꃺ;+}3AP1\p98 sE1:$0zR< PH<${)|q$ p~G|Ìg9`@9$Xax#vRqR@'#\dcxp>Agp1P>~@u9j3ێG$pA$H2qX:ym:ydA&aЍz[x>}E-,C-qS+'&8\q}󔸔;ۘuHּ;ASqV8'o9=GoJ6Vk-r,pw%8,zݮQᰣ<(SyWoTL 3oۖd$8)8,;psN:W'Sŵw.#sUKF^1r/AUXy}nƘK g;";S]_26{qRR.?ʕmmk=V듷yпP{Е||܌n##1}TA_w#Un~32sЌ?ħ G?0BH$&M %9$du֨N:l~Fqi /!qaHiP@=+E1\/Yq'R'%wU `cVݻ>4);AdQwD|-.''3I>fé>_ƛ+F'_C׏ƳRJ'1)~@GIA +PÒ$qA=*4Jv: 󑂥Ͼym ]Y*PDrw ;VK.(X5m2< 09 5_>RUrNU89 ; N K%UrIjyץJ$0*6cq)m9IJIW9T&%H<$9JxjKY#yDz'LKm#i+ҢeѧSⷕ B[((N0r[_L~ns]Md#3cǨ5vR$2$0Ž ǯ>Im|_= zF0%0ˎ w6Ϡ^@ .X7 7T'ARՅ} sAӚ& %LS)`3QA?^ɤx4p< Ny'9 8CpmC.8Ni669G s׌b5wFngEuF1C<7;GAuŅcG ]+崛WrN:Vu gk4 .ate˔=e$z]Q ,B H:ӷE^`ܳTYda 01~59z0UjKU0sn0Ec'={c[F^flR$ʝqPv@-(9"H'p0sԒq߁u~6ISʜמTsF$&o8Հ㧷aA'1aF3R\&C2`$'{$dk=?sSvT#fd&{;A,9$>mh˙\g#*::V{Km+׌sֲr;a dZߜ;z#5$e019W9:(Qz Hx=NqV?xzS39ǷP['8U3ۀ8ϸ[B@c>;$u<Q698$G;cBҸ!FN3: J7u9Avt8n0yn=AQJn;BJcB(aGo8>z '99{P889֚[:v^AI9=ƚ<E\mݻ =xc唲y$qXI#*u2H=vsZ.Rͷf+ޠq~c(O):svsS$o<fG42a;\WJBvs9] hx p6׏5ڮ!|X3nxdHBr<nQF$OϭeNx0vAu>~R-1oų+}r8Ccp~n&<߉M?Th0אp:t[ x:߯4D@*d>f|۴y$Ұ\L99}OsTE9Fs񁁎T' ȮP73NB*tfqf͕#v8z{Qb/0 ~:=JHRsB={SHi$dA8 @ێ73RH<Eq<УhP; GZjLNrANk@LHhrU#)Zb{ݼpО\`:R|!\ vA]3wIy@GNWtNxPJdے <9E!~rG ,ru-=je}c3tJw5 ~#,"v9F=2qNe>J1=7.s=}jKDEXPD;_H%@iix(EdtaIxo|N#s1Ӄ׽tROO#.LELHX1PHW^ ?xِfq}ӣQԃt,[1T3y$zdo=Y䒤 {Ojjj;@쪛#R{XʹfBv wʪ7}@1P?˞bVb̍O20J#w%zU!7`Ȳ?*7 q[ŝ6K㎝)[Eupۓܡx$. 8cEUʙU?Bzqn_y%{o#nF*9Sӷ#-孺d ǧ^Y2rV[[)%hڂ'sÁ2dF[LHvvO,J8PT1X뚮EanƢiI u!B<:t+40*4vnXUc* tse^/i-_1KUާ;9'-"Dbss2)*zmХ?3A=1֌A>x 8?kmO$gy7~x0GR89߶r:{c3RP8>_`"*,YA 6sR>89>U["G? pI)^>~;xt 3J$0Tw9Ω91<07)=} ~D!#T ï?\ھNY8en1ۂkWt30^7ɪ"BU`12珺qwՑ3;X&s=Mw",Vo+#d;2=2qmq'8fbNӻr\vz;prvHz Yr_8'5[DU\0w66'8rwmSjlUS#_AFw6BCId@O, w9QvF:.XR29Wn`#o 6H,$9Id†p, {QܡH}UߓHLzp~R ?>Rና'֨ pYr8\q!m `ځ O?2cCnzP:r{xt3@2 g@?*rc>b W2?*[Ux9$ti)#tOjK[  $q#8ǹ̌yG] 灎ԳJцy9TR_ǃY7vIB,SZ۳|G 8]֙9’TYG8QZ3joT}+C>P<9{X7r6Hׁ"=2Qh.Gq۞sGAJV:lL>?Ξ>8xOΞx=8=GNaؐOc#s0y5?>J9uh/^zNH)6rq8l ==IH=>4Ԍrx0tcӐ?JC\tLpE;?SRǠ# }2=}G4lup{ 7߰?Kc:uOQo[8Ü szP3;1\ViNR l$g~U 1->{fYI@2JL eʛ!G~קNdUnaUA89Yyi%nnPi<<],3c ROOӭtR9fΖ+݁rʽCzՉ5Db`w{1QfuS~Ku%ӌ;8=nsF0F9P 2rxfqg ʖ?)eo@s\85Bb0mgd^y9j!ns79<d$:ӁӑX369#s\V"-|I$.v#ۂ+Z S{rZ9Mq'<㨮n7vn3G1+h9lzӟI]'~:zd pN @v8 47wW*(q#@Td,ހ}7 y=0܂:|cݎ[Βu[s=:}DD$FMOzzp3cqWJVJ:?CU83<ۯ^9]&-L׏PPCg<U[HfܻF?/qU-.֤Gb'<뀢NIbIA=+nϥuzdӌylCppvAv1q=뮁$_H q^L7=Bx@Yy!lpH-'A] NH¶Ir?~?MMͩ -ˍFRp0z)_!N¦*z#]qT5A.$dsHx9+;y *(˓E[tfGL\4UX~eRr~IȌt>ezN98ڪ]JR;># Wnv;H$Z:8|c1ۭX@R2~'Llu~={~ :>bT|n{)_S>Lq• ޠ5. ;ʙ:TϿápqc>HsRWS~*PU;v|n$OpR1]Wq@=Nqڄ΍3Tc 5Ü}n1~;]yAq:wQx^~&`Ӥs'{vk*: tR^xxY3ף;1N_'RN{Jܶ%2?f8ߩɥbl\?s]Ep{8ɚ"6I&,ڢOBJA=`G8=T'$P6q9=ZzSN6͜6F0:vNj o-5ȌB6d%#JLV~n>msr\O-+$QC@VWmujۦtucHGgiP±%Xɑz H#xXV]l< 't+PK[4*I=iiơ >c8~d7qvZ\ʧW,J8RĜq5k MNW[r4._`2)Y?M vm6V׷G.Y ٱPO=諸֮L[8 9.9@FQnv>KɛTh"eD"6)QIyy!VM 敆N_qSk.[/szr6$ݞ=3WAvr>Px֪3fd⻘k3mS,#Ks5` g˗ZrZjL^ZWID)^ys~* dBn@{?{ ˥G.30"BܫIF^ҏhR 5kpZY&vFx9Q+k7m-i߂(8N?!UIȪ5+H?rItWwu<BMFX%ii8Õ'_r928 PIqrOjZ}=(@ gs}1JsF G#zkVpOIX%p{NsڶeO GUo$qppGzJ]҇ϔ9 v88ChTgkEwV'q( 7 I;Hށ) WSD0C298$j魮69wsG55tuEٝƝ{$E ¯Lt:6'̻px^6&WFZcxh3` 9 A䯷^uں6c;<rEN%PI>v#"ICR9#O\ >|kU"\Ip1i~H0sO8{ |cZi_;x}\zuq֋oqTiPFlgr?;O?N 8' #sJ9C)lt :N'yc<9A:;zp{_}+ryO׿G0rzrrxS<OoH䁓) ɐ}8$#: 8S)@ s#P ضA=;zPD7Nqר?#?BQ#'>~%s.[ FH=ǥUyGQdʱcL9Odqϯ''K  ;i-^|py'9$yӎk;c|`S.N'oS0Џ~=EL=z%إ2gP*ÃǷ 1g9?=QMOmeX9%7Nxz+5Yv;b_3kեec_תH =LJN2Cg? صhwѳKL m$򣃸d1mA\__9[(>k y|R0KlA#sI}fg;@Ĺ >w9i ȧڸ ;gVm屷ݘo>Ys|NJN eܭ +.B?G8?Ϸ+ɷvK0$w<ȬJ*H8@$\z89#8oVmt)=;Nzs5j4, IeAF3_ RB_<I8ӍwtINwtz=Ӱ4<zz0 ҠrX LpNHy; { 5+B4C&8'w'Kt" .L+7#,%s뎘R7G]kkYͻq,qqʩbrpҹ\epq{zDCVϗ\VG8VG [faI1AiGb"L.]ORsSFv%v%~Pp8?+!sT-H!szud+ӌ_!P P\/*NI霧BAe/X;&Cc;~ A``|{8#w'^ʧ89s? [#9~F6p6=9Ru6s2#gyA10O)S;3;367X۾mc4A{Au 9$kJ;'S0K %JC 7%GN] }ϩcZM W y :j=˂:Wqz|ʊ}Bw᷌trJ`Y \wV[dd@9'j˕C2r;X+ }-wޜ9GqКHIyC0}:dq=if@*=94wNzOޜ2zGP kQ\8?##ԣmhB|~Kt=;wxU[a8n?Π,Kq <#a.9# sJqmles=*n~H%sI.%Ǹ3Y]{i8e#y޾t%TXu%s0 G..WHn2(qg`2&&.[W8:޾1ʬSvPO>S?q w pN:w8TrV%p 77a<t߁c+Nx^!U* c4| G98cL6w"c9Ўǽ)`@+F`s8\19ns9NWמsȫ wc1㜕:9R[($ӟz$2I^`FECE'*)b#;JJ8 cn7ǀ j+E3T]l:#U\? ҂P6e gcCpTʛB4[ڬ+ μ3c_+:O8j^ʊ}ZVp*=;v=ie\S u54w"cs?Tn8?^AϽv{M~BEd#N*dޘA$5j~`s^,Ѣ"SsJfr#HWwwZe԰N obp SqoG"P懚SQ{s}ë8B sJ[d$VQ;1`WB|5)= TBV# `96@soAF[#$y5a#R9.!;z*f;0ўPܸ1׶)#&^,0&G,dlJx'șO!Faoܼw5O/ofG)-"/LN9\F#a9֒YisiwF aWhh,;en*~pev[8PB;eAm;oYHV]_y=pI0KCfTkhdp6>H(`>BÜ`}Z촏q&,#kʤÞG5JJ:v{ ʻn,̒9 * #k֬sl7G-x ^ťm?jMލ\o!$P`2֠ᖑ:kqfRAʀc=52?=~y.od-XYP0++5(g(oe zk Zڿ"^|lp'kHpKC *WsSgo t"6}fWHp7g*GN:֝ocUrcH98^z|M@ӊ)ʗ\{S{Rrq pH;$>ߔv.O(?pc´[?.r> yhN#=}j$z2 F})0}x'p%y~ގ1i+;#&'Ѓ(9~^aߞJ9`sǯ7`zGqD9 p`]q {qJ[O"M 'kIGJrZ~hy=o`0UOX㏺ =O W/[ϙ (YKY0=@a#`V$|ĕFi!k3iu>I5,ҳlUt&wdp$cl~@vNG#Ne-JIqqLp*7|dHpx yQT,3֗qrNFݣznfDu1Sazyr0 {qRG-9pH2z VR% [)WAquibI]Fr^fv=cKbБ眜׫YJp݃_=r3¿u]IwՃ}xaX4̧q$s m#n[Y7+#@2rqϽkG`22Y8/ cڦC6'aק1Y7u\SI9oJz\>sn7G\u>ួy٥]<{Pq';hcAGr:u8O|i=N:J8znܜ*Pzz{ΙN?Q;q`9)ӎFsHu8PN>O@11Z9R{?Ad ya\~xC: :x.}ݠN:Fjӳ>_4~})~1ަಁPNy8_@ "dB3pAWSWEAr8'wkʟ1uuxy>m{kK!8%p9$qr==p){Kɫ̏enGԃ\?09|T՜TaHs~1PKsӹ~b˴j򑞀Ʃ\\V?8\֢-\] f v㜞{sɬfV`H`sq'z]Q߉*I"-;:sRJFB\=:rw52/ B'sОjKnsۄ}9T6v7̼I>{K90 40.C{2df#i.)>籭/c!Yт 8r:n!T$)fR09/-aw.hR`~i&%AiL>E^^PG)ZۦȼAS#8ۑ; ݋>Gϸ0vrzי](3ԊowB.v Ig?)UAS t$kFBO:2!rs};+ף},garrO׎ؠyJU =s~хqח*= K !TYOd:=fGBFW3tU<ځe9SS _Wc"Wm=<Ҧ0n88^ߝyI$̀]$]Y|u^g2rv3r~b $ze{Ts9Z8-0/ ,V6V9G^uuˑ]0CuPN+NG}Lh&FFwa:ՄPNpz$qu~e0 oa$O aˆ13 1!~ scU*3A]T8 J pF?.9-NdHr;Րr13ґ99q˞drww>Zhe0=xzqY0rArrH*:_;8ٳB''#83t73g$n>#Dѳ9f'1~Ui֞[[$t{}k \*$zޙ crs=Idzqwl];):$ Tp¾z쭾CnzO'5#C1lu=? @2;²e=GQ;N?犁=?cg=fr7\t?@1ֳds+" z}Y=q1rы6{n+)-q Xտ1mبNN>֠RU`eO)ʅM9`ivA׌ v­?1:lD9qaE㹺~:}?Ɠdc:/FsY'aM?/Q=:wޣTtH#~Kdy<})y#АN>;'#n# tOD8zex t|6sdw#s*$M$`"21k|D2^u4w9a GyS~+SeEr:iydi Ƒb69+yAt=ټ5bG)n4d&7 4q\ wWjv[5h_wsŵJ㾘6B0HJx5e9`*P9s- ;/@IԖ[sn-}}s;IQ>$lF<k-mJ/t-5s^>[%vr+)nVII4Lt(otY`2grq.C$YZ->OcJnKϔ%!Aʩrkm鷮ڕ]Nýu byj.zU4ώ#nY } CﭙZcb]@411G(BqVd%pm~Fs['%k usӼkpkk/1bF5Dz)F(mI")9*p?q^~KE}9=vD7/9ӥ}5 ՀB#*W`Zǔ6.ss,@yTӧjh5qK -ܒZγ,4#R|.#ss ^ơeP'WG*?o=YAF6rN˧ø L >U&,:rZE9ٌ ōNHa#$o mMKqoyW[Iw ~R%N 뚎[nKRY$,Tf}qR?fnpTrOL;8[HYP;)$N@~=F)*m31ep)q)G^Ym^&i7 ('?*4M%q&沀~9]X?<`$:N9=i)#7NIZ{=,y`0?)#9  y\\r$GdKdt=k[B}%I+]ŵkvFa>Ps#;=T]D\ *QY\m@,A'{V*.=I;iR#l6} 06"3 Gl8sYqxb{ķ{}B;cF.ӂ1Qm9_BO._1F$V ӝ8wqmǸgv}ȡK]Q^'kv\YM (2MCqp* ~ gigaEgoioM!%y0S[*$so|C{yv;HԌu1JqJD̟U=?CIK74PJ=R8k-.#Uf$0")u 7|OBBsIW"P>xky" g[ $x&C22|=p9JDz k[C5Ngۥ$;2ǧK*!xrs滟*% \դkXh9I/M8L-7@:GqҴ܌e[~t؂rwc;}9dU Tq~bzƼizrqeE0xPkV۱JXd=@W֌,>Pro?.HxvGq?y]?Chn{Vc]8ds^evr-7g,=r1Tlm܎09YZ8^x8'ޞ `b3ֶR!Q 9N8֥ߜu sn64'>xs߁|sBF߅H'Jdgs֎pTssqwz3uAסzRsR388w'csPBe1c<^zFr6BW3Ss`sW&Bz msL9'?L ΩKr8?> 8pnGs޺##l9NT\QZōI gW=SC.ӑ q5qu,A aW IWnXVW.'m;kĹٚ q*clȃ pGjƯ5x !0y4摗_"X# +H> u`sJ6s# ~Wi`Nn=qqҲh X6pAz6sq#([$`nǐ{{ V a˙ d碅#Ǡ~Ofa`{}xJ@Htb8b pU.WV,R|g*)B9 qe+vO}N KtpIJ1v`"tjFp'VzB+E.G ;$.n J?w ңaqo1qQ'GjuYD.Tc*fn[tao؁Kg9lT̤\Br 8s=I<( O qKvV=2<ʱÓhpH3zC> <H'%9nn6y#~rjy$3צj@i IHK3m^[kaRhbRAmd۱F=q8hRݤ?8NF*8q]mLhOl)dO$y=qAhfDF mzj Twy=8ZF6:8y&m2v+{osR`N +?FK(=ԑ۲vy9*Pq}(` ?# lI̒ĆlyG_bE} mzZ& *I!V3Bk^fޭ[DI[j.;q׎5?:} yQr$,FݑȲ^It<ۥ1 9%1_P| k}:$uɾu]Z1pFNs1\XFNۿM‰#$H1qt$5L18:`U9 þqמ>4HdzUg~P8{ I8[B(d?ԓޱL39Y6N3Lnʓ{ٝ0Z9;O'S/78(5١qs>ޜq}ÝT3}il+dd'+򜜏78$ݷ-OiVlII?ǭf93מvZh̑sqZ'g8Ƿ^*ߜ:rT8i!8})Npzz`sLD}$zB##q1߮jA1338#9?Z~ry@=M 8r)=:`^AAQ.בzcP9 dvq3H?GV( [#y +:zPxR`lHS8kQ*݂wV=+Bb~JUub:knJ`d26>cW;ݼhX A8g;s><;\ @}kR8<1*9W6UgK5;wiS8:x#J:'$?iLO:d~j@8Kzv6PH#8Ick/ϵHszzqG"m9Gh'3өޥWr;cm7ǯ1Z%r@Hkeܴn1o]{l3ިhc.@:\g*)CGʹ(f^O<{gwv~<Twہ,jzq *?=Ni"6ꎖ%0Fr H?k3 A3wS?7Z]s2j+M>3?"vJP8v98k͵)Y7wąY8*eZ5g^og۽;{EpT9$_y"SԌ>njFrS=)~eǯZq?HUW^9ǰzq Ys$qӏH T&HH폕ǧQ߯4p=quFH`sK=8JwMqs~'$?)8JKm#r$`QǿJBcy7cǥI۝܁ s4' N@ eNA>ߍ?#<;RFܑ(zՠItcAJۨϧqRϨM'NpF}jA韻 #h&z3yjn88 cUO`rzt}6Lt~iC8+cM`z #q#`{SANI t-f!XaА{qz^tҢ<\m۸`7r*>͏Aʐ][h^lǯݷyܡ;m H#5Q7pÂ= W>Z[2YS! 8@ے7O<:sHKU0$$r ,eHpxwc9!6  p{{֮e6Iǩ؃)TrF9'ژ2 ؑGC3#$ 6v(:009lc;뵉=)+7_vTIKa"PNrUqnqkF&8[xNeb,!Y21pG9+3`rR@H5]t9g2x?Ofw(ʶ;ppBRz7w6o{׸<~o3o]A $ҹ,)&@Uq<[zG?Α\!A'8%{I7UN#gL\O@d1:rC}n'`5/qʓ7Оsi c3p[nĊLQ| .ݪ ]չO\sYǜS$9^g&T`m^J@ԌltWVGnUx9g1=9zg˨գ#!xۑ߽@Uw@ۂLOɈn ݻ98;Sx$`2Bg>BAH?WsZHUάcz 4"pt>eANclhPr3P$W3zGקiq@'qG#nK*oPBLm9  > LocVʲWpYT)U3JUlPBM:< )E 7d||?Cۡ*RKH|2`'ޭ!ٰY2GɷTI瑎/gY<`6?7O=%br-o|JV6ŠO9Y|ېvp9t"nax=,tw=@=x0pA錏z=Y랬3x~O'1yxS@CcwL)wzo珛s=Zx|u<{JI-Szuo^Ǔ90iwt~Ԯ'sz=0h퓒sߥ =G9^;❻'wz׿cנ7l^zvr1(39q{`g<$q~_S)z{=?#HB9oJzqǿ1sְny;>nMe7d"yvgX r8@Rkj㜸޸% r(Ͻv z8*q.yJaInT8lq؊g;C+;k{_fOTN8IQyvAm8jܐAp}2uQ %c1X-ю9㨩f@J~fdGNSvhdj&;my?w׮vnpeąTݲ; Wtyޝ7Z)NYb @pԋ.X koDLXӏI#NLӏlB&\38{v8@|ͬH;dxu\ R*6W=0{~Up7Bۉ P @9~_R8+)Z/2%v **M1p IzFަa؝ 玙|t Ӟkǯ~fe6NX$1{Wai1TzA8r T|67;Xb둎0MzUs-ߖO8NsIؖub c8o 5;>W*DZivTx>ǵ{>h3Œqfګ6=jX䯤*!wqԚ.W8zqzVaD8 & 9ϨNqJ8 O98ׯ?BE=b+9+4 \n'}pz[=k l'?J"c zҡM4a<8nZ=~)Xl>o򦓓#?o#́_9H227iÖNN<'Z9\apA`O>]4֌"肼=Ϡnx?Zi'vTg9y$C0۹6CfOmON(pHyl_ߴ0XÊ >ysr9j*- s,AV1w=u5ZO xg{,G<{UC==&};pFO_SGֲhn}qׯzzq+1c߿EzYKrs9w9UZLz!֬iʅ^= R=^Lq>,yN>tUfzty$gg4 Iy-p8#Vh a`n}}: 988?1<:cc;}ӌwJ`!hg<y#lu(N#X ;AP}2xvGҗ0 ن؁g9yׯ(rC;kdmb)fwQ=>my~ u:zP㟛ï#5A.B#*'z;*=DĚLr*#%?:(=֔:rӷ,_Shn&]ǩ3 ;Qx"/̃u`9T"ņ2cx+찕JjQkQOO>bi:ug_WRau _cB SRՕ.Dϖ;62)v:!%zmH;-x62\5/v61W4ٗWsG۞HS~5`>{U>m.C30]c߿9K- 2+ȖR/ɺ< < :'uUkaV82O= ElIX*H88%ކ%mO9Rwn_`o/학,y+ NG$E0$WBτve]r}LpjWUrE*M8 EsLg's7Dq"HsysHKK =yIА3E GXU A\ ҞFW6=qE o#@985rF[c]zF]ި,6pQQ[s*$gյ=*MEC "%Y[Rnd;[T[᳿vXn<+B9\cg!@Vơ>;:avJS^B.E#φWi1%sޮ]XıhQXM(` 9lO&zژ!F<1ifr@`zc=mxN c_my0O'r>+Ÿ%nǯxڵΠ~7.Whv&s0)"5nOx~n!X`k S +Ҭt>|wjN^ѲR^[*crEjE褄d88޵Y"AX.Tn>l/EbNM:[ V̷2H>HYr+:W?u~"7m r ܌3k.6Z[~%xKZ|3ieq+ ff^qEtTӼL,ە'u,܌25||Z1Jw:(OñOOc'-ȩ1T Gyr7🃾ˢ`.ڝxOP|=\v[1)5r{2!_ iSM?4{gF4p[LbEMJ] #\nL{0)FOͫʶw**Hs # 䓌'QsO GVC H)Nqz^=~w`+Ѥ#ī}E7221Uvҗ8_CjUW~\hc漏^lx'<4_,!^7滦,C^ᚕlt,n8Úμ-Fq G]ǧ5:>6`'###8ye%}}k9 qs}q]ER9<6G{ ָCFtz4@Toa-8WiBc31NǎbnXǬX #^3y =3''ӽy;2,,~?/\ J2|pq${tSß=~FLӧ*qgNq븟|z{Pdo'r~TF`2 # R' j؎p''5q.1(3_T19#CoUs,pH98VAhllD>^qX)IT\.`#Ty<O:Vs\EצGRgv>ޘj'8|ړ:xƦ߈ؙ$zu O$|F6kp1]DH^d7^=\n1U)/8ӟz0gQjYB#9$s~egߚ\kF8,䐪WLkĎXO=kj1u}o,w^NwIyko|bXc!>oֽzP6fbW䏫`+FqƖOLpq]qVGr`rzu}O^{+Bl8*nLyk.sT[Bۧq!NyU끜9+{@:Iںtu-Z4lOeFJ;'<&++" 0P0=T M{dy#wGALHv<0Us7Qֱ:9KAVPL0pI'dJϻ# c?\V/M1N8!Ͻ7p{N:ir^qgSӎߩqdX.[ s_& DN ^+[1ޭpÑj7$v>ҵ=oQZU2eqA 85 =3&->EίsqXUY⹪6_a+zM8oS@zyYԡGKEU[-p'EpvBN9'ⳏw7x첕>ZQʳR ;JX7|Bß?0<{V3B0Og#iykIHm KX+:l󴟟n<'8W!;ɮSF\ۏp9eX mPnOaj*d20y#y1L<U1AḴr c 9I tc s.Di+`4t2 p69Z{gn^N~lm~&$~X1ݼ]cL҆RB1 9ʅ6"vWA`saw`)d8 tw'+r c4~`0'ҒuM ~VOsɠpv72dpWoQ#Vbg(?0*0 '#P޲"ConLDd'===r7AxRDd>9~ M>Ĝ?ZF?.N3GR;O0*$R4`XnQ8 $iwT' fTWgb[!1?q(VQ~b{t=O9篧4>'}@y=ۏ7rF ~]ݹj?MFhG1HU\aV{L|srj=:[F3i 7Xc<{t{Pc/cyہR}j^A-(Wf4[t3*ʖ 8S|u#X\(VX(c`w Hr{N8(N'''n*;wue639FЖێ#߯ց A=Aqp!Ze͏>B:4@ςU$  O\J;v2IUJ(WiSP _ς0 ! p1p^%ȻPPyF9McFO}*c Gڶ7?֫c ݁st c9u8UAv;uf{3$zpTR0YϯJϐ pr2[}8+~1;l{bx<\}s:$G*A @g=kOVi,N8Ol߯Jazer #_N&RDM?˃$`z?^$1q#=;1Ԫt9?5JFRy5IC܎yĒzuĈn;H ӝ4txqߧQHGSP-' xOTۛN\FFz c@MŁqo0Cs;`gi# ݜ3ߌ Kv6B2XT*|ǒ+R(JI9mp&GRx?Kѭԅߓ`ԕ@w|>&{aCӎǎ+v쉌G;0n @ tOkQŇG?jrܧy9S>axv'?׏zI6N6C g淧/?BO7:UVR5[ioC_1C28# dmy ϞĻrݭc>d:^-I 6J6sͭXVYrsٸָ 7`$rʅٷ$ ~y=ײtd lw38JԶ`#@#@'bs=?֟`[>J$?=4Kc}9; : 94.x=2P=)?rq*K A xLwy}}A,3v 'L3׿ N:NN}_jg'cg>Lq3{vi8d9֡3ס')|㧦;=~b`=23͇^ڟ>zc=AD#0{vzLrpG߮;gҀXm<=z91C`9xOp}^G y'q+6?Q=T~Iҝ݂Es  rcOZKu_Q`z>p{4QmI x :s_.ig#lֻПwQW\#ltJ?6ĆzW^K* Jҕ2䜾0/;8x?3m>G"6 $zdz2$$=IBKh%bFT۰w|zt_i`מBJYKRxǎpG*g4W]pC֤^2x#<}ǷZ,V$rNc>LOHƒsNAk, .9\^{r~MCB)& |ӧ_z˷p=x#'yasZQ9;qGxN'X vcxZa qN2rl3gpy9 H.Qe=TN8ʕpQc-`ldt$+\[02#HΧ.wʪT>avHǧ8Pg'p('\g5c;~\HfG<}>X>fWop:Aq-ݻwU2":G=?jۊ3&9a8sc#T;x7.SOj͂J20;q\Rc{ا+*I9,7'ccn';YXɤ U20y?'֐vN svGSU|\)aRc$g$R[$61s@W9lp '#母$n]㍤Ϯ?q&_ðvdqnƒ׷).ђqCܘgrU[rldn8'lk6Heڲx\n4ƌc.fd \ޥP@,=$)nr[;}h]Dmʬ7 :N7~kuEr~T.sc}E/03c^zjg~x Akao zaBg'n*_͒M.BoRl6!<G=sSVw){s"n'fw:7?ڟ! 0$|Fn?h.T/LTgh9 `~5jl O=d$~` lʹnj{18 G_zEn{Nη4=S=ۀ` k ;GCy:޼>gz<`Hgi93J?;p:tZ_=ރyF9=OrO|SHCw:zzcH_JA!3H_~N>‹ %F s^|'`\g?@?`r~cG@{{{Ӱ\yx$x"^x!m FGR['GN( zto>=pOn֋ æFg3ʓpq2sȡ-X)#7l{=^v2s"B#rF}@.xs5h,-QNGs⼧UѼ|Ǖ= 8YۅT K3u_3Wh3  v>: "ɽI8\Oq_]>T蕏Rmr\)Xgp<1ӚURgBHPب-ߞBXfEFU;=8֐nxiV@Tg[8a^^A3O!AR2 2?1:r9KQ:dm'\ Tv:P/XI QO'|| C N';OM+~|'q=kہwmaʔPP0z5=X{=Q^K0R5 pz󷿵PU2OJ`(s~!A#:j$BHAJ-]l`{pTc#t=Ap &wpA<84Tmn(^pln;w ub8ڞJϟ޻-RCMffO; 1ʱt'J͐/o'ЁM*Ҽ~F)/;%dqy\l\H C$u,9mypZƚSєÁ/ hʏ`})EEO}9pwvcnݥ< 1׷J Ɣa<xW02@GNO^kcX._ (q ҩUI+19QnGL? j$.Gs& #h88UvB 1$`YCӎkySM}!N7chPrۻgzs\+6󼀙;Аs6 QGXlE9^#gyJ q8 ##Ιl] 6 0#8I8:UvG9@ϯNOJQ2ct8]T;(=Tdty>P:{`J2e^p8G<,Xp?L8 v`q,U:#c)$o$$k'Ps gc<;œwřS q+o#$/rQwvUrz۷gBc,_ [CH+俺k8a[^OUL|cMy%U#I`~Vf3غaǾ9(:9ttcD 烃”zt OZ#6;;c4{zzP!O^{PG|{ӚOb>ssyƶQrFd5κ<'S @=<HӷJR[n/øC݋>v9s%(t7|8󑝃eI܏^G [OV'$g};WUۨx8.O]ۃ@?.9Jadaո#ӡݛ9}R~l>\7^$);ۖq5קsѣW.~Cp b=8ȬVp 8}:ڞ<К(np9;rx8' pH`ݽ^]#jUm%8ǩ^kx` w0X-קyH Dl}0Ìg'=iKnrt*x =@2F3B҃o Lg1˜8P+[sLhJl981ӠڵU$m184Rel08O? x#?NBǘvS#pl`q7sYk 8g=*69a%cRx*2OL~*%V6N3Ǧ15U>J64V*4>OnVhd͎t&U ӟLT=O@?*nAdGlQ'nZ#bW􈍾8 {fks鷦rqrF 9OQ@G_҅+?r'J`#S>mʄ9B:6'~zOCߚa/ qvjQ>3:sEU.TY=};Y:d.f-ş%ʟc^UkMIhl_jWoS lrD\1#rPqT3ZLUT7;F+i9'cj-[m<@wHh!}Ui ʇa OS"~k;|J3$smt<^]"gBcxZTt&)!sVr_sKiR ]Ix G?s V#|7P 45_xr5SNhVm72 O xXCqpqܴ!V0n d1CW I}W][T󨸼`;$iBgtl䑅AuVi`Rlڡw\(<,Crk8l[&"P B߼U @DEˢML.,mhkG^,>#"h#U(y.dg5.շIiCnt(԰|$woo"̑aIe@Uqq^Si׼ vڟK|RI0oqRJ^]OPXt%c{t")aYq^º?-<=_U0 t6+8Hu}kno2_ ݎ*W< UtHLmmnF(ܜ eOw5o[ƋƤ?-MrOBkHU]Wa<>;$q$nE '$qbp9[SIU#YYB"A1] vww}H2=7U\G,+Rfq0Z-tĘʲ2n.+`qIMŽowB}wj,u)VV2!f9XJ6sU"7 iNU}k @99SKWv{RyTl2VRԢw2 8c/pi.ooYbk!B@󓓁hmݶ\+$؉b~nQY|#:c޴ә\3|Tx*_ZU';Ya7^\Y7]ф8 -֦Z3F<\, ($=+MXxc$dǑ5iDfeHJ# Djc/'$ SI_S<9;Kw_ow|QzWzv4whlSGS8u)5wq M{IGw9wT 1{2TفyJ)%mN8:d~X \NO8*,juCONN1pzOh'nČt1;X嚺>!>@' 9^zWmtQq ڦL^ga y'^,9A'2?J{OD38+*G־tI;K`Î#Ys%dS*UFQKJ A8qG8D2gs)=1֢2PzpLs49G :rόQ38=y959\<ͧ׌cI㎜{8iA):De@A߮>&+lT:fr(ޏ49NrF=>ߚݳFa\'$crc L|vc;~fl}ӆ  9c8쮒6h9}ߡaO{xʂUz o {ֱ29t7;0 rÍW?=ٶHUpFa9 +J}N\\1p` *ԎP'`\OJ{YKnʲv:c84@8-p'<Uj.%]O@#nj5,eM%ܶR}GzcRDF ̃SǦO-Q#1ڛ4 0Xn =\uJm$}D^$XbXRZÐFT88S^1k{Sӭ1aw|ꋽFqMy׼wtNGbѴ] :_(CU=wzO2.#1ɘeFaO8^FM<>~kCXCøOkV"ɵsNrlߚz/+VnF;IlzO *9럨W vj- S#o NТ@xל% Hpp\泉C pA^S{G;.rA3={Ёo2lqEEqlf{K6Bs$x9b2aKm 6!N9<d?^} B':PDE`NҬbx=6Tel% pHS$r݆Ænj?NAa؃=1-YLHzv~}MS ໰/]vښ(2N[ ~zja%V(q=1L-H*YA9NqIXyVK\ݖ1yoeLM+nac88&Yx(˩ALTHhafUIQ8 'PU`s2Iyļ|i8`F>(BdlNxc:3"@gPw ֓4z3%% Ns94{ѥ8ܷ8'*#fO 9}r` Jh`[!p<˜`W5M>$ztռqQĤBU 6F;+&azG`瞸IJ6m_̢ vߜI35Ԏa~y>UX8=\}3*]Ԁx[U<0#GoY(OB3Y2P$ `vXch0n yӧ8=g>s}+cp31rr3sY&X($~>yJ#'xӷ#<1}\1~2x#2#j?l =O\\{|ˊ!-ޙ8Ǒ,jRpҹ=>c@ 'x=<^=Ox=G!翱{ ?{@8?)9AǧjBesӽ4w*$t8ï=x8?nh^sqHczxw眐Tu^d#?'ax iNOH}HirЇ$@9p$sxw9"Cv-׷LO|P[yPq=I=i,(ژg 68 rz{'sԷn*I`rOLk-I".TWWc nf#'Sskeܒ,@$1+ئcr}13  yS]r̀6󲏽skrv<aܪ3žO^ǧaª K6j%J aN9#ޛ*n*3Js3S`-ؕ$B*uF<]1\3Md`p@m ݸB$ón#y9j#ʸ#`¯_9:݌6FIFp=8@Zfo3kBErO5v(KdM͖V Bճ#IC}щ~YO{G@92}wsy}S+gհ;y' ܂Ӟ_ߕg8bri'_tcc ֝xc'=ɪ4+|A <ϥ]2cN_Z#'h9Zk_밬0P,F2}i<B3!A( :wG~ 3ܜg 0j窑v:zt}rH bh@񻞟7{Q4c@u jS9wK>\d2 Kgy)Ai20`6g|#j%oɯO,'yR;1?]+8edwF_u(~ i$c= UH0er 0Ϧ)._dC`OBSa@n9c'O֛'+XV۟Jw r: s)w(cJ#=q9]cLV1xNX7=i3mtr,h7 A1r)s{rI N ><Ԛ0ێ6(#ir޽;Մʂ2YUG{ §ȴtN4dL\ƫ(<8]%n!Iw6 snGu63c H6ᐤqڻ!*TS<}{יucgG0]_!*;^3u9pprp AϦqӥm B;v݁gz3pqlFݹyX S7( Ё]K`uS3YxYYG5A^KƳ%wu 9k :5hyXW^]s $`qtXNO  J:kԄtEvb=f?3P(ڎ`~d;GԞN(hHD`)€pZV'f0 ۂ4Y90J}zč.NmP}rr2{_ f8b5g<89t4] }Cg!8&&rTsTC`K6V NO'A`qWEU Qۖn ~] a.Kbvn#;1P*wuNNp=68>2T$H`vA ds^` FFՆݠcGTL`psyǥH\scI#%i 8 P>cFja ІFA!=v%n>?;W=$;X=VWn15W)(2CoI v/ sߏC4o[̲tb rn2}tbp1אǿA`w{ۂH-#x:Q;`"^GG m1WI=2:keyz 2qߩ8ӥ4 ghG9SD& A'8N20 {c=f}O.:rGK{)g݌8!l?3Oc{يF@L]46AcygKnt$n1})<~wK`t'ӽ.#qQ֓@8xq3>z=;kMF8z=;?N+&)lgK9.8ϩCtsV|/Q g ƎBIoƸ>T}s֮U9~'MIφGƗy#,`=N=F>+ ӓxvpQ9°ö8H#9<d,F#y` 5#X?F䃸+8d8MihՖ# 8')NO{qS` g98Fqޡ?~RDnm(98֝, g;/fḐpPcU}5{峌-!T`*y =1ڗȞ`vuBs V+\԰$C}ߞ˷(8ʐAZo DaY竝ۻr$۝!d󊫦CzHGcT>zINh2aM|Tgi+aNB}>`KsϽOf@dH9폻뚟 ,H ˓ׁc 9:Vd gOj8e. G`{ Ny<֎iC edm~u'Sv;ViqJq91x#(8d:۷5nrImó񑌃_ƪ: κG´F&9S3.2? Uo=`GFrOSz_TyTqP@9onpps=CM1Xry'o;H>ا. 1@'8'<"z^OI9Q-7ni6 p'>uiQ}@V`Ogn i$*9Ӛ̍Vl/l+ִvEl2 #܌t D,,2u,q=1^ɢ^$|:6zxX?FzI8?Gk rrqt7>&idݏz5eG~㹔ˉs1׫tdLNYI#sMb;pp=x2$dcFg?zuG#/8@`??ZփdԋZG܅<݄I#$s^qssyʂW#־(ʔZEe7 9 cX9cϸ1PQWI5d'1ӧotFݻnB1ݾ%YEV?8'ӊ: ovq]8u ]`\sy#$c%^3.OqӭqՍFEA!prNr3:$ 3ׁk m':Rqirll*zxF:r;v[r@zdǑ^m^Od@%r#辠2zira }krIεֆ|E nà=y3Wm/Yr3*q>JkCJpiǢi.i*prNFsGr3p lGv;(cXߞ>b1mv e'Mm }O6B㧷P1d9j nBҜddzu5UH$e}Is5Q{沑HIǧ8qҐ05%{Zsd 9 y#cG\7W)Opr}y*mW#0/8gӌf0OL^>)23 ^OJu>n!=z:Q~O#zs_1Fya$rE43:jZwgqwzsV2>et uk?JFzR,@#;9~<1eC Gu@ qVMP MqKgM8eBlG*cڼGWK=9ZQ0UN@`9^1j4ݮ3UW4l}WFyVe̟D)#&qwW5k.]ih FD -QKJqT4[ºEjEԉ~cku $$kqms vp9*Tr:] m9B0@%VU!v;wft gЌ d̅swQ4J6 P7`W&a>Iblr!lyItЯexn#2ۏ0c?18a)Fvmu%3ӼG-.kH1yl$|vyr^#FYk-l^?4g;>gk馻}Ƒ_շ>/tJ#j:[_+5@'vA!_]=Cn$ڃ9(OUoUK~Ȧ*~9oͿ8_ N21һru &A;~cϾ9Pa|ivj KWrmtt%?H[Տb*=ONbF6dH8<>*W]-fc~K-Ea,Rm@ 7ppAYaņ5wB r2aHP栟~Í9MW}^Ѽ OWUxc-ѱW" "%XJ^i$ڽ84sr[}C!dJ/#n8ϭ[27C8ˌp1^ m׫>3.W8:2H'G֝#s}w澥b0VqY 냂 J-N:1t IO8'ϥcؔC%c0xxbtzVz#e#`ξеȊNr1 ;z]捼#yd6 xl"T+}yga=w]cu?r{9:^#J(߯鄯MS:~UϞ))Og9;cT8;s׍ǯONkӼke($X[*Tz$qʶm耘 =EqNUu:dOT3c#==k#xQ^uH=QԪ+nzV,4|da I~u@2W^~c$VѝXWykYAI#$p1U䓞zo9|v鸏/9'9_nr99A܊"\G1@ 9bӰ@=xGB#.~;\}Ӟ׊\A;ltҔ9?(?OV#gn<׊qyzҦR)DoL{c|N:ـ1Ӛ2'F=8sqtIcN`r}zRo?^Nqyn5U.E(3^_Nsҗ8H c?/'vxQ;ǦqE.}JQ!2B035;=Ԝc K?LrɨS9?COCw:TlAudr'yu$Z숌c7gғ3Hs׶kfD%:܎j//<9eKRc>ϊoIT4˸݃Os뜓ǥVe 'Ic `g(* cOOV57x?u\A3O=Ub8pkD&=:{Rd[]SG;ש[c&s Nvfn~I'*Ey9翨ڢG9=.qpz`G9qzP;{ F9l}ywք qNj81OFuO#gA뻩'k@h vֽ +cq=M8H#1>' n|=MwDdOQ: TuuuaAc98)'c9;G<TFڬNz}kϮlWzOuэGUTA0s-MsŁ+ $t zV8S,Iy g%Onu8l˖9R_C^w0e=1GT *>V89<}+1G'`NyA3zq'tc(zgTu$s  ۴g s'5qfr[`:9$s\ZX3ZGSRv5+"ĺ#\@ cg[ 0NـO}zi|[[_{0`ܖch__Oj#ۀ0G%1>c )CS-Cy`yoOy0$D 8(Fvt'5B25?CԵh)iI Me:QuNR쉧.y}Qs[Hy7X#]h<)vy5^ c~!xMѭrD:q8ƈ/lG[z5e+.7[]QaXmJ8$p#C_&7fwvj[>f5~acS*7eltv7S8! `tD* H:gdt<p aAq99Yd\E Nj;qH 0s\R%nǒpp81}Mg˹?OL8瑷֭~DlJ ub~Sx'2eUQ[l+N܎EIK4]w%HT?2oc#[k|Q 22ģ*9$L.6Trszw9;v$h?FMIL7E=͌u?t柒@rOZKsp2YY~l}=yҡcq P>A?ܦ*{jr2Tv~3T\ %zUs>5آy9vFU K|K9vs֨ ,`+1\T1$eoP3pqNIs, Ȍj$t0Xp0pr8}k6;%c8*B:񞀮#(rgws}]AHP@ݟPYG|1ryd9ۆ ܛn<:Cu:䷌ 5Ɲ4aWD 沛Gtef&{u&pہ$Ӵ?TV 0s-2>ՐMt-HFB't<+ۏ]Ju9!l ʹh9 6T0OjQfeRZqkʖPsXL6~_)x ByL#gؒ4qCj. Gg+ B4X)U*JW6--9#p-co#ƌ8Ś77!Td&@u^f2ZФpC1uH2LZсՐneB䒽"&\',x'b>SSsYwlhPrp7F61>6pjwWKK)נ$t#03ޞpxb=?©O0@$}1{}xzR\3קr} ߟ8Alu 21# w8`!uԠ~#?ȥ: s搄qG$q큆ch  ׷4csbrzsR,{F?=c@WQɸ^iyirK@&OIIŜ|ݪFJ IkY?)=> $\ߙҍHrܟg$6s䃐:~3R˸̓ݒ>LTrpxK}V U`0 W\69ֲ8!(KG%tb=8AϮ7v8 \w)nxseژ'q8*i;C\?7 uIU~ Qʭ,"Adgֳ%¡\/f0Pznb\`(0?Ǩ[hy` ?vόWβKRиu  rUpbR݇R{4`XY(d*9WQe4P1ۚ PT9BrV|- eW%@S6r=Z+6ynەQ"Ыg'HFd1#h/qTe:r, N$Fb6 F12Fx[Tx,)@9r=24$6`$W!dn֞m$) $Hr0I_U vebąJ{+6 HǞzJ~%_Ak;{OOP_8`1dBa h WD!q8swm:kG=AF# Ngkc3B @=J;OBMv6/2\duR(m/P6gO*VH27ݹd.x8<ZKfj+n{;qbҫpOuewS3b3lyj\OiJ1J瑎}_5dye *9ʂ8a^jc)+`Kt8 ?'5GJFu Y2 ~~P ۵n-fue9G۽Sœ}Vb(I:M.(F u[BM$D5WnQ2JJ%{foPFc܀qm?8YU/9dn2I?+#Fap{E)Q^HHǝ( m,x'v470V,͖X Ӡ_j[|HeʫrbCms 6rY RuQrzMkݐIGZ~8H!H~rzdzQ=5w6㍣?(^-i'%pdk\n\{:a.@(<p:d;BI;fkg槑\}|MAPnڤcl\W $߾Gz{U?KcONǵL <8ڿ&ݟvrpz\wcz`pr S};` rs pA==?&ӑDy8iO'q;.@6s\ẁ?L_P5?ӿNbRs bܷCIڄXʞ@\:?; q?ƨv%W!=tu>֚ws7IT,m(\}A1[՗WrsJ@c>g=>'l I9>RVlǘz/\9P tYqFcX10EI>ug r8l)߂fmy>*<IRWSbR9qHR ~j"F'pu*U8sܑ-24 Z0Uy[mP F=Fws'(z3GB[f9~\qI48sңcD3?:ھs9Tv͝i~R>PLh4Ss RUK6 e`~BgxֱpA$Wh}ęO ciny=?=F1}õjo)Cp;c#J}qڤ0N@ w@AW~\I3Xm+ At\n\B>`cɋW;pҴשw p =k@>@mo^+gMA.03gߏrI1V O~:nI$g1QC>2=3M Tvy䌖ҝx};cj@@IU`yӑ84FG#ڎPl';O׭ "LvrygH g;#`AO-:oҟ(\2=J;^}R/Nsry}1Ӄ=PIp8?x9~{J% ߎw9Q<{*8OzҶXƤ2©&2(%8?x9=S-"’;=s{qRXd瓃r AJ |S2q&L1 ۈcGL'汍ՎNF#,3'qRqTgNѼ̀yNxw+#/SVHb;O8\|'U7'f{TqIhl'px*;GWW@^3gלtLVj. 0 v'#0 W$:(gֶWfw(m._s#tb~(n<ʪFy`wa g񯪥]?&RX븖*#6 hIA08];^Ԕ g! fVv8UAi"*G,(UW8=Z46oCSЃV,s=Ur7zu#j!B. 8q9A@-=ƶQ9fKX܀ʂş$drYI4jDq`mw1k(|:GsͼFF|K$wt.aL/NYycҼ\b{0-o1˳rsSM)@ hwgZ:u3d$napɐ[-8HɈ9n;qמ8'?G1ѕe' rGC=Ѧ p9%FNˌ(sPdcy-%NG4,,6q؞數 K*:!$˂3gڪ ̌2vL%WTwH>c" Uq N~T`:1 zzbA"CA*!>WQW1D^>PO5hrz33n ݓ{vW O$eP` OPh}=LbyĄK+Usb=?s*SRn灁ڟB[=1W{qRxSA 9(3"zŅ1#/BT;*ͲM"< @@%pxv慸*0Đ1#3[dl1v껛o$Z<6ݕ[j497ǖYI︕]Gx$T<ʇďLsgL:蠞xNz3cq Iz3ҡ>dv@A(Mk#zg'իMvGA)HQx$ZO?OL^ȴ}3;}H銕HO^l]+Mvr{$t(9yLU&ga1߂p0x束A?˚w&\9Hox6z t<}*p8&ԎOGךvI߮@c=y'g9?+ inls8OoYh\H$SI7Nt< Ѻc?zQ9<=}Mzdc\fF1j!L\~T➼s{:fde2AAMك\qBi44=#Q8=3YRcvsF`y$x1}NsjTGr/n<~9Q' cJ+gz`c}) }xMlb>[ =vc\v||Oz_+=9O`q>b3{z@;RuU`s\T L8qR| 2zt:U$FEҶZ+ +K |Hw{0N;Cោgh5;i1}6ԥNI*z?Q5|QRW#~_Nz^%YEy½~1#I\ijX`TKOQ 롙J6Lʦ[?%q-s1|şhku҂~qm`93ڽ\~532NnKHnPSjfUB[s8NUX wPvv:שD']s˖?9r?t,VڤOA\G5ORQa,'pVhQ k䘂ޥYq#` QK;-.߉^Ւaq},w#3:FpIsӦx'89#mTd{bS~mepF7 66O@㚇a9ٹBv$#K1 z=yS'UK(%N<M>+"`ő0 ⡸4oaD;VOB1Ն#.r ij BfM˴ t=Gygr?9\)nI!o<|rOM'ʗ- m#+j>x܂)Fv3di?(^f'3W"5;ZN8#"5TY&l 7=#>QEXN[,֦rKVi'I\=gc'tcAs^eUg0#}vGޏ[ h"܆?;֪{@? tӡWI.灉M;qdO#7s$:+K\lPs# H'Apha*Y> cR''+$=G]L  Mrdd Oc{费ݾR'C𠨬 D<ϩ[Ӗ8Pٞ\GrAu9svI3ȯZG~&It#dsW*Qh# %G #!fHmlgӟo˭ ao/ FOo}=낺NL,4KU$J0E)';N{85k9X 6w~5P턙``CeǞ+fv@.rT)3w:=( NyϿz7qF$uϵxXh0Z>fML8=WU~=M ÎX19ZMG1NW>'^qH#?|zL܆'=9Evw襏#}GS xcX1YR (h2Aqn/B1.03rIZ<ß# g޳@ܕړE(l|ByL#'߇L>' N=? [O3'>wC =AR|a#h.8S=?KŨ 뻎98dWJgc=}\jfP=S1,z<^Ht#ELσgg8(n#n<>R}Ҩm ~cqc<{R4=GPE@ɐ{r>^yC4Lk"898:Q3=%""ң*9q&k~#޳8p/N?"֩8Ǧ:=Ozx׌`zÏ=G]Yؽ:c!WNFߗ9~`zx軔 L u# KbUW 2_^yZ|_ޮ]5y=Uw92G#L'"gOer9 緡hV>#LuZ,fQ"W0wb2"e9( Wd]ŘS0)D?vF7>v9隉es#tMDl@'^xsy,hpIn83MRҰa$ 9GXU$y8U$^Q$Hd(BS/gc;ւ8mQqr>8@ cw u#{tHp7rX'1׏ʩ= q\t)N Gg#jhҬJZ$eI# d2qAnUH-žQO@BzwkhdE9+9?De_rG88k72^~ 9xpOQNfZIsAO|er~Qzt8Z31'#d ?1<2קZ3r q+1"{}qs\Y I1ǩQ'O|g5v/ِv28>;x\rIBxY-$ '?.}饗 w>=55?S6A$rvS>'0DZ+s)Y99@;wϿni1#nz r;zTdtۃccO<1Q9U_A o=BQ}zp0{vOa7}}RAþ$GPCsNϽ9X=~lCVO  qdO*}@T i=g^_-|@'@N1r6[}/Ե-C!WO&K ;ۧ׳dy8ڳ6ip22qy_+#ʫ= ߞEzcokϙslapu`ܒ U7)~6wdy\ڕg'on|v2 nEw:7=GjVSy]͠UB~Amx֝V=2YD@p*Gv樅#\鑄p ;t D[x *\\vMt-N^qqmwW”o>a'}jr8ؤ1;OW>:v-t']$Y0`=MfN[$XNU7cV=H!"_̇1֮3ev͒ u@:bB6A˧j|N(\]S~dO ~Rhy c,:0^t ٕQ H9f[֭sck7GO}fFuSE RP 1niGBK0בړDTo{snh;塢%kAeQq(*ࢧяr8ۻXF #*cO8籥wo??F{w /@v4g*x^GlCWh[c,2O0e(ɫ~]x,1HBc'ב^hfĔXǏqՋQs4← &'}t2cWل.bo^`8-ؐ=k ūIMk#t(]XL/7׫X_Q7 b1׋j>w>-)$0Ik6q$:׵|gc)˙#soCNH9ƾDa';:t]<8'$}i[Ԓ]#=S |۹M`x s}o;qYN:?a^8nE0FCN~X QFX38msz|}tlrk4|xDw{\nz Pn$`]$Wt73?S'7kPhY ЬN#o՗%P_x*_vhMcI]ޡ3nSr3 Bʡcףl ص4׋tX۱9QI rmFp1ۀjaLkKp* ,*5ЩtOݜCn3ry#43ZA #Eey#9lᜨyM va+x:b9L"{s9 !WtjZ:G2v Pdvr ךCf~V\W<{U׹.Y%MJx,'s)nFu+vݹ,=@椷Dg&<*d\\|N՚ BH`9y7GHTS#NF2 NғĮ~s= Ҟ=IO_oƿ! O=1q'{C~QX #$:H~{+c9'ԟA˸!?yz{PrI^6U1z~qG?}[r9t$pA }jp8o^\([ ÷nN}rr:9?JN~`E8mA$]=_p5a7z`} ߩ zt<ӗKwnFR^vjkO%uRlA$IŸ`r1֫Iaʈʞ`ӎ=i1.\n9S1ܯ<X/`q}R2@-F? :WbG!Op2OOZ6|`2b1|c]5K r\9z~C=&)nnyg]x9!A³098W;f~ oҸ'P˳lpV4mGu'Ҵ3 6O1o%q֔$ &WʠN7gsVLCʠnP01pϞmnBwgvH=U!嗟$ɸ9Q#zzcqy!s_¥s mPGl xcrrCr䓓#/2A}wt$p@v8X`?79Au@yA ܜ (I )'M&$^C<!-K0< Wnz6J~3@AX0OmsdH,btSK0]_-&E><Ќ2A0M]O\8{۝giׁ0ϭs$i إ,Tۂ}pGrxW[J;+:d=?Jά9.^i҆(۸Ps잹\+kmO8Г#7=3܎>N=2'zuƩ!11:; hA׭+PM= =C$v$y\ca}{nh1sGplH8?;sqN ?^J,<2:qROO=6 $wqsJ,;y<}zu8{zq}sO{u`qfhp=rzҜ<{N1ךLcsS_\ Y'N@sqKtGlҡJ;Gc'}Fjaס{m>O\e$G89'<jgr}=+;לp9Q1o`:hkB!{ 98Q߿?*%A}:Z̤ WВ5j 5su9;s\&:#QwL)ۜ_=*"p1X3z0M{MNm;=1V$ AỌ<Ƭ*,3 ¯u:tGab!SӪdsӚ1јRV_ X$86)K)؄fAw%p;w  d8nyqSB.&ݴG* $}*.eGQ0 d>N>a=w Pnx$ 3hG\aBr{V1Y`8A|#rHPKW=:1qJD2J_>c 1e(r'gn!l@#9c5xen|moK <\f%r11.ѷN?_VJ#$T8‰r]Uqd[܈qp`gWV䓺6W+cyAcc2nq._mb& >T}{T<9z \8X gϽUɰAwu3G0V?Kaޥ3H#;Uve;gqP7{QClb3p9`w{;.Ad}O@%=7XFN# 1v#9PWA/OLbh+\d}$/)z'.ۃmFp_dݟ9#wzp;qҢ7˂89M%Vd,H3ۃҚ5lx0 ӽ.wwjI<w\U?(=9*= O?"%e<4sʗR7c9$ЁzmT~e$=;\i][ AG*1/A#׶Y|p Շu"KUXiOgBs:tKӴ\8*s:׉Y&֧is##'5D>Q[W⣱x;SӠt5&O~*:nsׯN:3<~ !qOoNPO^F>٩1ǩ0{R 8?S(RbO#O?1R#󞧠t} n? 8>4RcDxQ<< +Bq'whRcw=_zTi#RJ&O3439w<-GnFnݩquǮU\ >Z>FxoZ@hngڲgMd(9I$\[AЯ鶩ѿve8۽?C%x:~hn-%dP7`.IMs;tv TӭuBx_;_H)'S& [M V!*3_;k6:gi4"^BAtBc7DY"$fWR s^VrPuZTeJj&b6N$[4 yV0[D= +@T.͡kF9@Pwz ׯeba}ŵ(7a^3gsiw2yjhDG'`A s~i;Ĺ.] Klc9gL]Y wߘz浵LVKwA ɜG9N$ b}^HW.cN&Y9`g!w{x@FʈUc(;W miֻxuJAg敚8iXaՕ5j>x4]Y85!L@00#gDܕݽ ~_V?2d!5$JC vq:-yvKW$l0NuU6jϭD3oC[͛$(TػQ9mӦ1_Eiqk5դ$[X7KxBF!!I{VU]6:[GiY@.%|zW\Mq˨jfV$ }OFT+:?#ܴ'7k3ͽ#/z8Ymq5.Oo@~shv! ךլQE戧){d$[ES dl]s"> cjBavڗ/i^*!n9^ ֥K?90h+cYdd?>NIR(;9>Wx;ŏvNIv g%})CS@oLiI$0۷o ދ˯sdI̻%q%u+d1 o#1X 9-ÎMgmA#l[^qZw<c\XsNw0-qUwƷjPF9s[Vc BP898)kB %{۷~MɋomԕыKdIgOG557hq@!scp1߽r]Xl#8'?N.q>S*gE/y>ҁ#'' stsz|uYD.,MI$ 8*@;zӭ|}I/g*x'Ҭ-#qt)钭~SH/8랧n?ɪ' f{RyO@8>)S#iFq~0Vej90rr;:qN{:R+A<\z}?3HFyx'Hǧn*n5|޼q֓~~1I z:c#8$wR!nvʐ=@cӌgKaG 0S7<ɤjyz iqsJ AǮ3M2/@Fy=*W/NL}?^iU$AH]ߟcAQR2 SߜtF!C-xsP fֆ{g!URsyǯoF3}zlb3(FG\WUk)1r1=98ٳiBŇL=G`+p /R^l9V @'1D )NKxbʣЩqzg:r%6pXݓBzj$^=o?v7yMlep<`zk`)2ēRzs?z⬬̤3ea\ \Cr~SLu&c Iv0 3ԟRkzUQM`@7#l NEy Z-;E,6VXKxT^U gbJ|A('q! dnyNNڟw^I⽊{v5,?tKG.NG8>ϥF"VI}Evݸ#h=@ӧvO38\Ks&Rw0bHN9 ZFX1%T2!TziXIfA 1Gt$e-ʧ#ҹ:P3q,$xۖ= t0 T`=~BH׵4.܅!!UHF~e~0Fy!*1' `Jopd F[i#d}Иg* ɖ$t@1nO,0119gc'⠒&61wߒgɍ~_p1 8Еc#sZEo+9N9ܠBl9Me/XoˏҺh?6xP_`:w': ,G=t8:p:liͺ_!/FTօӑaf-c S39,wqS#XdGe*(<6zѹo| <+7;~7mfh0 >,8i-(V=+@p8%w O4d\q,0%5-@\'#*JZF&\zpc+O|Q^:%3xDƑwO>5Qٜ~=sѻ*f}:rGpGjcu\qRd`:gQj9b@99#Cg\,FWpO#vyQ0\ؑj0qj6\rOL?VdLtdϿl#]sspcg#$!fO+'ҩlq_oCzRmRdd`랾qg{wSOHOJ _#>㌌PL2 |@?Lq={x;hAS#yi{߶ޘ=ǥ49cQK&nI<psёIg(J-KQ.@~RCrT}0ONkLjdש^]oOM,p:eW%;@8%WJaM$xUݽ{.vdy x>Xebђyڣ`:8zꦵ8*KCq"gPxoPOc܀qǭtXoR~ SIO]k8'9d$\N٭ 1 @+ڎ0P syZEks)r (~<+JX7p@'֭+7uY@JydܐX_*#i|vZvqjb)]w$.@q#\9أEM"MD6EWs>rqh0fm`1{Wm1e OvG|-":ggz2Oo*LF}Q^Fo4UP. $`3FUB ۏkqR>C2wݣHuka NޥC|A p}*sQԏFų~q{Ǡ` -yQ4Ef߯JS 鑒8=?ƹ-k;qc:֝뵺 &?HdgO\rzkO$H$QO\9Ff5Qh4<9+E ø 2 .JiW }OL+!|H=2m"80!\&NpWNzqSWI!{r(O\gA&7 |9_)0qG T⎺u0 .@qԜA_@\g'9qM#hb3pHbF#0;ќv9G~<(O6;'zbB =H##UlVc'zt={ Q=d?RL9Fyd O9 _=zJ^q =Fy?J }ノc$sv;U1M/crH9=3Z;rӀ@5yBpҝE“V$MIx,GC` v۝*ww4^2zu?硦z; i#;$'V뚶 S׶ܜ1۽1@'׏N@;g?ԧ;X /^έ +pT6r~UxiDv6$c'Rw`(-A,H=1`ԃ}Ecu1Iӽ3y8 G4o998y4BpqgTVv8-<輐W/͝uhlx;gߌWkN|PCc]#9?*2_g(R؃8PcrOCr[1wdtH' \)T) /,A'9 vz)  1G +N!]o,ʞ=yC ׍͐7r>_R~dg@-׾ZÃFBKp{w?`[ öI^y@<ȠNUbH`qÞ[.S$ AWomHާh۶R8g!#n6K\v.8*UI8D-)udi985~E܇8V#1?Zthr0 "۹\|1ϯ=덑*l`qD޴OB$FɃ"D\R_ ^?Z؈0`:唌TBz U嘜+*t>8lp9pqׯS]gz7uJ|ʤ;;t$ް5=N~ԷK<NJOPUrU1?\ri.F'KrN~wx@pX,),vc w1שP vdFyz4=AԦm;FXw^:}y6ુ ' ucpz񁜂 yS逧v9o֒xn9$2'̀->n1ڵm CW߭Ydr66p.#sר\A=J3lO#-c5 cmXzF0h["^ű}}~r9A!@x=m(۲60^yc@IE@f "_l~G7a0MmGKo&o9 .yYx碃AEGO*s+9Pz鎹⻭- A*FN?03(j#X;K{r$UVm})`c9CR%8)93oy{ x=z=A#q&(97HopQ{}:?1?jOlA?j7o^'_)8R=}xn:sSi_N{zzj@2>}~u,4K,AOer+qwN= e Fq8|ë3#A'9n7uk}nxulv$r[3Bgkm%v:py{W3z7BpWH;7qm8I(fHG$5_r0L#'D2:#dk\ v/#֡r]-wyb8$1.۴pO$ǹBs*Ì鎼#$x;I"*:7>\)9;P N}8w%Z)YGΆ2FU*8=w #1ҋzIX3Ё Wkc@vd <5c :]vF6z{z4Cbr0Xuhz嵲_G<0ܠ򾼏~7Зc< q@q?-eby_$ @]|Yi|.͝mܯӱsWў'J3~G̷%CܞH(p[qPc=*(1<1_ l|eOGrF;XGoaSS7 N>S)a ԷxIp]ۯ%lFpdl0{Lz oC1#8#P ӐHmA#i$ }=d(oPF 18+ҥCί,/s)-۹U qc㜃[Gst3(۷X ?Ó>`,XI@.WOKj2D[wͷ!3.Xu8u^g0N6ɐ瞹cb_=#4,E=A,0NӟE}s~K}ۅ=;=jr!nwǭS+|w`e1e cw[m-q8*v>5q}c\uST^RxeP\SgcЬr0AP̪o :"3ce~sJ&H6-; g(MŽH*%x?w'Ua Sq,:1 N~e#=kdn,z31== =}u%I!,0A5kfO˜+/mguϽ` I=DVƕ3ʭ4Yda&k^<4ӂ6# 1O(7M݅q*EcJVz`}qB>ʮ2ynqu#[YXA2u^˦3/eT[ f<=q5(dx^@7 }yfnb2QvFX+8Ub,CCy_Hx.s!Fyb8^d ;Wfq^a??*H~s_zM0|cqՏӧ\CZ0v>tVB44;x;Pgӧ^ m؛ Hpsv 6~9هo\:ǷDʊC}`[5Ή>s҅G >7G.3-A⼢@ &Y7B =lgҾv %8fFʗ,H,,co|ݺuI`<3A`#9# c,9׶iY{c82CA 2矑GjʹB`Trx9;sM%V釰X]GĤ9_nwB.`G*I9݌l! 员|.B_l z` 9/dr1˟#9{܅Hnl[n2߸>QvvwFGKNK댒oPzg#ެhqܺ=Cd0gxU#|H\LnW[U%bJp*$ kof<q7!eomS]9@cԃI u;C63}1M Y;NUI#`})P$2my4\9 rۙZG|TzqRGq7` =(I\aʆOUrw?# rJv۷xۉq8;F0 ϧ4ܹ{+ͭ]PQZgh8wvx\A]$ }q^=i]MY4q(=Uv :bzv1ұ.sǯ?;>28:7=A)ӡӯ!~t8~ӓcGzz?F~F9⡔#䞼`Lc3N? Qn}{Tt?$+]M8;ե?[-'1F{vnb{] lzzOjB=qJ,+ǿOL:MO7I-Gq_rzdu ߃JQ?ZŀH~vsV'ń/"/|)  VoCE8bs$9N}ݕGx`68 һZ_ -Ыr<҉ "qQev8f ~``qߎ-6$1QH1N@ O_WIyo9-${)XmIIo1H' |tIA~Eh 9Z2FPcY7evqPO9b. B1p3ؚzbt6{{}kso[`sIޖ^UY(bF܎pqӵT6UI(woSx>Mz{O:JǜHG#ltGY6@07ʊd%I"LQpǚŒh3\vҞb&cv '?*o}6:KdE<T*Jq+)\\6Ֆ+<,`/C'3Q]$*@5V\#8T]|]8yjc*q54 O9eXd  3Wky1K٢$4 +Fm;Nv5UT)W,ȊO\q)($~N|o̢}jۆݪI`XOS=+&7S\ F3ۊ2{ O͸zyQ6T`c<9cPϡ#UF5ܶ%JLgTp:n9=E@ؙCUW!y<!NpOA t5~SQ},'Or+y~K; vvsu F.Ed6s:}:^ RBpH°7m}SFE}nS8z!,嘩v7F܀O~9\yOR.cȊww`dl4迄 'C>*thq/9ڣ#HG;~RPdOoN{PZW+&- lrO~լ5E s#OP?ZbtB6̬p8˞'Wkz `>`#'uo6[XrAFMwBd<1 I>Gz[K >Zyx:6l2]JXczVW58c6MmqLWdp!yg%tOgp~nn+m'^u]t}~ +N cn3Oo*ڷ|s2z.} J$#֩3 w#':gDU,vSN`}^R0?/Ϗ׭!bscІrw;q5?pLVȖs88cϧO'<?>ձ e9ێԌ5cd8h'9 ʢ.ba (?_] Q߱;T֏뭳rܞWcVެ#yrFJg⣫9KY r$`p?JG''澇 Kg]u p$1.zsu~YAT##|zQIFݏ&(ItJ߂~cx>COc$QЙ-ْ7gJ߻=rcҜ3:f>^8'=(!hno#=Fx=}1A]2W%yU;13g tF'=I\4H_+fHŸ=眊կ;u[ A$ }x_0vUssimƹ9In0{q׵i*|_U9=xϾGJ$A2sea$[a0"`eb,"c~F6I_sq^FOFybF?2{Wc|ێ 3?(~062 +ƩSҎ=}  (dvWBL;A䁞x5lj-̷«2A`~Ub~L]Bd8ȁ2Hs_+~ r3*i %*J(zW^:i5vf!2F(ӆ FjjN:syX&@E(9#G S?:ׯLS-!zF}8#ڃxqힹLw|K:&Ɂ 1ҵ6;~Onvc7u4FI'^\C$a=8ZX澥Y;;s1YHp G3MC?}yqHFr2:P2 |<x {⥚Dns$䲶>=y=9ڤCg9>^:u%$9YB;Squ8$u\bd8##E`X+wa}9*{Ub$ۍM!xU<'! {T;žAڲd9VHv ׁZhb@z(cRi3Hw|fqz'#N\r@ߥ" gpq=(W9B 䜁=mFPw#pp}8¦}&$‚i@L{gio{I9hYա-,TFALS2zS`}劍A 0Krxe.F#EH:6,YG?)c8s3R79yGrpq t,IIeg TF9 Q^SӭȊ8Po;P,GLա`K;b;Y[,hEYHlt5Iˮ9c)-'Et}e]FHAgs"2D8P2wsqבuȑ{iZ< D?/\t;f7bwǀ?֛$.|aĮYpF8֠Ȩ3;cB~X_A's>@ 8}*ٖcBJeu.[N+[Ut#(1ɯxS7pb cCjҔn:g!y]E]v:(n,м5NYTAڣ8873V)HV@ 1xYҽ*[DI3drH+&hpq73]&zTvx u0& ۔8?zeA$r6;tk*T0d 1# Lr=j1 sc^{~$m9Zko` py< ~t^_\s1qHWh g>b`g'>t_9zC+`wu&1>O\LQC{rzӛ9ۈ3O¥^G?.st֧r{`p1zBA<ۚv3};qʧ"PpœZ"@rZSg9(ų02prHA=Ӛ.\RKcrG;qz ,<MkT6ܒnTvV/Qc#z]?ʩ-}H(; 3{?HN>\Nz1[B:JFl<'Bc})ۛ-:N:9 =Js36ܪ[`a#wG^US ߯5im+<@e]<:5A8`XހzҺL rIV>ce8߾}̡{4>-WAHT|ILQͼ+y#Nn5գ3Ooi)7˴:$-ճzl2ԏ־O1tϧQXx*YFf~8^ ּ vuǷAGpsX5Ԇ3ٻ8BGU˩ g!S3A<?JH9I`9-@$xuk%Il^"tc#,YN'NA#/#;;.~e  `z"F1QNrV~hn8'x=fKiF#ݍIX^%̮<顗:CO,,r:i\6T`>Q۞_ -ުb˼N0yXB o3($&ڃfy1P"6Tǝ:֌RI cwª@s;uDۀ@žV,a[`#sҥr v$$g-qgTvCpCbЅ X$#L1#? -{reVHUUooT0{y>ȌJF3g$Zm?xn%xipH_v^=i'rbϐ6hןl*&{g\ *<:UG} 忼1R€&6z~;g߅&'+=q>uV0p88#vȪzh29yqnyX6睭 PzSvz%~w8yᴆx9:N;[ ~c<2^GlZac0yݞBܫ 7g,z3\&8 i:ɌFpA3f*:qqM-`b&8b3G9;'G y?{vWߑ'#0?)%p FXz[cN3@8G3ˎ##}­+#ytrs A(yrA(IBfǦ;gOzivz*3jS!lpMGNFJD>w8?*N *[%1`qmgʂq<Թw#\VmD׀ŎA<=?QoaNH+6,n|w$LcCy P6ÃgwOSu-)Z: {u\ް=*01qȯfd;Ü>o}q1b>mAr=AE~R-aBcq) B܆6J%Jf=hT1#%IPp?^-dc'H.;93yn1l|8w'_֜_Gxʀ*p r0[~=idPv#qPk#T_Ps@?J*+FKqˑxVe2I9p>6`bItHNh3 nj>^Cdg-WFI 5Nq6*; ޠt~V^Yr@=Gj r+g+"nגE&jvp'vG`4L`by֑H9ߎASrzqʆ[Sh`j v0([`7;[鎝륍bPvv,&X1yLJ k28^3RF>a:THy Aڸ\`NCU;ONy2csʕqث;>l)eᶶ;qJFr|Ue##~n`ϽBz2#;8wd@pW=Wr=kƯ}3pE<OO)A xp9=v>~z{zVj[av=8@s=ȫq8?;`T 1x9m'Ke$)P;c듟:ͽJCpy"N;s{q<8>ґר8'>5 ӱ9>Γ`{~>?N&=GTmױOơFt~r1؞ ~u8,3ϩ 9Ҹ1>od9[*Cc9=95򞻍I*|c'ӊ=\FkD+;ePԲڠ rs=G\㈒V'=sN272r{q:b*lC"0nld<cT1Ts3Q$y1vG|I-~F1'ϡ5he8pO`z8ksfݹrǨ:d]I%#A3 wm6*11Wgazdi@=;_?'i3w[M uLtȩlG-[>x6l+2{>0+,Đ{FFnszW+a#^ZWQޱc!,NF1O8`p  z}>~;!dzH[iϡg;H :Խƺ d H1[/* (E\ zQNܞ6JH񚜂A.H<`(^-V2ʁ z{y27 @3ߚ;bR-|iI\3x5YY 1[F'9=SN*ژ6 Ybcvm u7%.$`޽Z`/UdiFB9 / #7p3); %-zϯz;e"K ĎIL7žrN>Ic銀6{;g$ޞ}GRU@$ tg4 =O9?;x Tzds8\rx?L FA=:V4!TCO)+J#sޔߌg)c@r 8:Yc+98Cl_Gڳg@8Kz@A|p=—%-mB0n 7=澀ApA9+zW+lI8<S :r@x|k:/'qqZ3H|΃ ֥ӎ{KQ1#$sל)och|B?Jh={wz<T G;999g"lv[w?Z2#gsM2LmAzp0::]CÈwe:緯AZ)VqI\RS#|3vOʾxgJv)9Fs߭z14Yi' 񁻏Aֲ chA$qۚ)c/p[K+1̮>$ciw [id L(pw2 A{qO $Λs||ڸ{&I!HdbF2kX=S9MtBN,.w9yҤ2x*m8{BtdweH$AUd0ʰ*laGFOUc~U>'hl$m\ASwa=)Qh8SMwwrF<#V<΄P(!zuy"o5s<<'׶i7I<۸J <sI?9U:3#w8S@Cq+9?6#rFz2$?5!(gϿҋERʼO@89WTrp9bNI"J6T|'%J'9`pW ) t8X{vzcw*Z)083G֓ϧ;㚇q>8o¤T#IА\#Gcxz ˜ӷJ"QqR:OKR : ՕQg2iSn܊~g9nؾ_WT##f n!W5$.$89BdB}A>+x~BW~gu bBþPsp#k67|ǡ__Ahxiq;تP7`˝rvn=0+w0NݴO|P(8<kKCvT78Nᶓʒ=VŶP0~^s׃ZD{!fa˳LٵOTY9`r8 ; sܐN1=qQ؍p0B-P2 8S0 ךB~]F$=IF N v#č BnhHdd $WHŸI#vMLҵGr@* On=F2NkIQl8H$,p8ܙ "t9ǵQ|;svდ?_jV T$U;g[#3ǒS_NLGIm$VRj'=35<#hV$qB͖\xnp{vjۈ9=qRW2;I_:1 uu25̭2{i+ ~Vۀ =rF;jvRe ŒJs@ ck9-;8Ҡc§MV1 ݹL:{2VTkFgET8##8 qR>*|۷)Bud׹N.waFp>Rߴ;`9Oa3xFsXVs܁~~;`O$/fɃ fxw I$w^֩I5 Clxʜ90$%9z \)8pN z8zJ$UHA< =;21}=3JC31HZ1 ovΌFr21*9ءh%i2>SNMQUFlO7`uR'Kw+1R0yR NGz+dftɍL_i?8ӮI;a!} TٕuEY5Py, {WWY@YAB0nQoR"H.7'BX;`3HbWQ1җw]ʭ *{`+`ぎ*Y%rv3Yt :U*YJ֬T0F1 S]2Gd?(ϖlpH@>{t[zjQʞ'=ߞki* *9+?jfʖeؠ pO N tni6;Z@@VU~w`v'Q)>}̍# 2*x8aWrFps֯oTR58Lg՟1p*KVt=;v_oj_s=Zm`v1h=z~mßAל0y?k>HnIOqן>>qnqs_'r9>}ʱ]x~џoszqRRD1Q:v<}KXy:}Msq֢OR!v!PoN}s=*oNA{gރ'nlr;CHQ= ݉㸨oB3y'FH'qJ$9WvH럼qnG4(rqϱZn=;һ r,>b85LA9N!A>=&E׎;Uvs펇#Y_R2r~dNY'nz>273\3$n8^\BGqz*$2{cק h4?!j?'#0h>8'zsM6Vt={Yr$kMڙ2zg?Ӧ+=rmI֮f edqyM#'8{9w^qp9#Z<aJ\ec:|?w۞h*A-Ü1GZ]h͸X=Has:Eʢ>oy<YHY 9~s zA}v>j16Pv8=GqK]+Նc ץOHll/Ccqݎ1xT?fe~'I$#n%ycɸyFBkXQ㠊%s0<*v  r>P =uA{' Vpz񬇐c998#O|~uWD_R|ICF=?U@Lr`'=coF_nH\6~J"ǖH[9ݷЎ⭭vy_z¨U*xz^=]n?.mwa9S+s>Gai|Y; SؠGbpyqּk&v-G12‰ pA#:q^j`w8*HNAPz}k?!S5EtQ2ݬ .R;ߞ@>xaHnI ›#2Zd'G+5O&IK#;q}29o9X_s5 ̀f'0ǭ^/Ty]r\KHOG$f'яν8h9n9;_vte~A0?^[VuF1߿+nƲ.p<z҄E9igf9*S8HYn^FX*=?v1[r8sIsOp1Ud oK@}9=R6I~ryco^NFyVF`)RpG^}3Ph@z1#׊iܜNFߨ'>@FIsR gg]D%cN31s=Bq'ny Չ~F&Fн6\rqҪNI`W1̈;RJgGVmIfhnqŶvNJ'|_I5B]^KG9 U *ݸF@UR*W[y0z.9rq튐sy"^@jC.M~`Asw'Vl+#] ~u)]R:`c5 &,^( 0BjV;hg_vd'i'qf#Ԓ3Кn4I  K.AP3@V#lÐJTyA ~5/f6=E_$=x95sHQrm[68D6u 9[kk>fyMKdGd`2 ko-&slbFn0%ݷ28MurՍC{>I]v鞙ϥbtJ*Z ,:두{*HO$Q;vS^r+sď|1[h˴9;pp}NO&2O' py9S_YڬiK=h-.sǩ2zq#Y߯b&x#S:\3۞?/X u=ׯ.IC۞,8xN8=qzGc8}wF\2ApN+-q# pFF@ғfE7Acۜ39z{RN!1H8ޓg {Y6 `u$zB$qLu;bH]zd;~i.$}O^8 pߗ9$ ?Lgiq?1TﯠL秪$Rs_jݡ2nAJFAidXW<9Qn $]{$WeSU}zA=m-9 񂼝dJRFwݑG;Kq֚t<T瑓?^ w9&x#$~Bn=Oqs4sM4 ?^8zP{98OA#1#=_֜nz)41Nvz~n'>ت ޽ OP9CRX^W~c.?sq0}O;Vɫ {/Npd<|䌏C5ҍj^OՌ8`iV<T,8lp':TNYȣ#T rA' =zzHvpqM|#5 /rܭ``j]9ٌ8 pc ?yK}9`t!0Cc+ #9i!$6A\g$W3/9WO ld*eH!NN b|E@Ka{ԌwiE{2~q` {{t+uKF@취Zg.ƒ:m"p"DBFrFy^ >ǭtѼ쁐9W fCz;l#K\>cp}O),#>(=y~=t7oTBq@a<.pu9s9AV8#pn;y}ho4NFN׎d\@;=MD[1=9ӈ/q($0sҝݎs؂p@c$);2N:1kX=|=Xkq#εv8rL}3yWl< 'oZ<\ڙ͹dXh/͐8I 8s#19<__K_GGit˰pp\{# dt3 9ly;T>p?88 uָ}VD;qbݷ{<:zʼnK0r>\uZb6,>_A zw|}mڅ̦p!pr9>΀:\)1u(P߼㌏~3Niy839d Zl ['ӎWyQ9`#w9G p4\[$ ctr6#r'ӭZc2}rnl 8$~lmFW͒1@QA^j6+ЎW}idܞs5f?/ R /u$@B1w-28|?^ 8O:Shw-@ ,A'sttcHcBP6={ڃ7I:tuYz}HSߩ9"KcU+Fθy\3HW@zϑ|n+{ddNABؖ %t xո W}G&N2}, z ˀtS޹YdˏďW& Bq$ c5vlp1GF^&9jO{]9p~xz~:v8ci轺" c# ב9#pNA78Rc({v;u9=֤T># Q6N?.JpQ_`};~$ʸϯ$E_sg*e!Ku9vzڳԮRczv=sRO^߅CH) S`?>ztQEv30q؜qc=W#M|+t{n|2f;v2l$}^׹|>w@(>N35%c`hm7 b2{i<0e۞qzסOuq¦9۟mF pߚo$>b $};+Lyc{t8[L(Qwm\ܜAUO(8cO$t^%x$i46q?>{d֪8 yccz}皮"qslg cp@' 2i64e8'g@nBTEU$ēḁ)6\lm րs8$x^< qҕ!9Ar3f }Ѕ8'?)&c c ۿQۭYVʑ$sg{P$>yң/l4a0382##ץJ6w q rzݾ`cz=z2s8iV'2I*'׎sVB3ߊUƬvaH'oUm UltHj+4YXJ#G=>ǰv}i6t=GJvdcg<;}=i,4(p:pqBJ?:<ԶRBm݃i^O?)_B#A_ʂa׌͖z3t#T=VM]l!zv^IhCdʧۦVBw?քl_/<ێTEǎ3;o`A <r ?P<;{'Gc6ztBc|͟_R{zsuIwSq3j?/r}OԴZbl^ALؤ?ͅ ヂ-,1T2Hy U5=Rn F %̱o'|ll=C֤ly])ڬH;NrXp 9cu߃X#֝,[n;SzXʻYZH(q~ojs,15&1N+=odaFBzqpifLPEN] 1`.y#=jGimjWWqZ}>KI 2&Mwi6o.f$L{TIkκ&3:ݝF2OvvkXUpK̒rAK[!܋3)%'8u"G_560|8F+ "ͨFk(5͌H8 #ٺگ;)m,=^d^5m,m ׀˃zz֬ͮH"~r@7!ΝIgEswB/b1Pڊ9!T*ǮH nB"S 'p8 _'ۚ`&F>BF^\c<Х-&ՃHH ͟=g3ed+OObxHyfs ݻ?:ЏQX0F8sTԁԋR7 L}qӊL#-"mÀCN}k'&.q0;rI!zʥ[sr\m}76]9 y݅8 }z;q/YX'8zy'O~n7pykMl38+/L6AϠ+I24eͪ1u ,[ v֝bM8lޜ]P"mt?6TdQUI5yq(e\{*CCzֽBwylSiRO &Oo70%cFMthأ#i t quG?$mظʥg}k)2@vб9ϵMcN}ǥ7i~zU11pON:udݖ8NzYi9pz=i1LA&}HNӶ*6ߌw9)N1qI1ӞA9;sz1}OCqR1#vϿN ?Qg>Ɔ鹻sd$sg8vR(qTny9G&w;"RKrWiH9p~*fBsۜp9T. |RW4?N9ZFoɈF{~'׮EW)w8~J)I\>S~3==ߚ-no/(r9@*?(<}.z|D1 qq֞ #ǪR]XHA<،j9(˚j=_HFs Y3\ԊnX0P@9e~[K>GRs26m n 1tYr܇qd;מd|i]y R'Meس6)%gnp8:z낲9^3;`vU@+9ݐ}:uHuHYczGAn YxS`SZ$rss:=(4AJ3_UiIS'98Qº"3:P_\un}IԆaF oq:~UrsA~UCrAP1{rq]4KZ$S(#Ff`qG;PA2s>tvw1ggVVGn^FNIl?hmn6Vx#Zܒ],y%oE_\۸8դu]dhI9 ߞ OkGU$WH>5m;'+V4Ņyv2I< wcDH 䝫ץ%6J1 @>98ǭIj6H$󓁒 ݈UԴ_&uP(XpHUF⥖BH(v0q8רZPMYS%?sT[Ur Y3h[76K`c8<}Va>L6W,aYn8,H\`s׭E2lNoCO8c0Hq:g;{#Ж1M!2M8'N2_^zʙ?W̓'=jbw60͂,=`?S([up2F!#rFO& %fy@=ʽ6.C$Fn0g-;ȫWh/G O=j UFg-*ǖ]n8]x p AUTdxoTiFs8$t;T9X8 qp3X2dTOqFiIj*n9_"i$UFݥRų?jgprLoژA) "zQ!c!m,L-24v9%pGpkYϗ;p6$c=gm;[_DK|D\\'9z)u[G o$72:<,}|iןKRbVEM*Av:yfATi$7,3/#zwZ^8zc֮-hڐdcerx]/`y#m̘##=:o odNAĜGӦ4t JV?3\0 ێ=J F$b>h9 O [3M=NYDU cXUW.7u`0j.FsGJ3]i8 0P[0I?J6vlҜFV d]oߝY)FS66ww~\W6'xHۀOq^ӬKi @IA}}Ğ{th8O<57@Xpy~OQOm*zg'B@_ӟ\wv ׏ҝ;鞤`q}곮㜃~u1#dwA?˜}A#S_qצzԌӞd8qMlcp{=?j\dc*O2X>c؃VG?}*!xdtQm펃WDO˜;5*_NJg`{ێW ?Ҫ\&SrIzz{pEoe}O^pګuz G}HțG^29Xg VH' q`c)N c;p9ǭRbI O9\1[%c 2e`v߁Cp_(W*q'm2=t׌r 89]^ qsqϥhkC9V`9JՔl%-ҴRg?rF7 _[<=zq\CI`v8ֺRRHS[xD#%A2=P>\6G,r:V7uc>%$7-+fڱ PYNCpG' qتNGѰ)HPPra$ eR0N?3>aU+s@PGڬI*Đ_kbrQ=s=+ZF O*=23鑶O*`  08.'dz͌`,EH.|(~ٮa&rDnhZ>2.:7玙R`rw`1#Pĵ e#'e}8jsp9ׯQ :w XozuVspN:2GlP#.^F@ rJL (sԱOOz-=L!9!x=Njc $myoZ75 hYnuc9pj$r/  #`eQ]4z.p<@A$ NץYHr+IkJm4jcqԑs꿍ybU9d t[NOC0ʓ@a,lp03: NXxM/!'rʹ\.A% {| >x;T~#'G90-1+BAI9␾Nzt{SҚ e]`:zop^ۻ 瞆iR#OLsBɴt׶Cp0AjRՎ—0Q:$3}p$󃞸j0HBvIc=?JS1pI͑nzB 8c?7k;983)n>ha7ANF'N y*p~cH5KK9@v2=?@F1ztʴ8'OS2 `9IB˂z cQJ@aOצ+OazusΤ :9J_89=_0 xUCzq~SzG^cp"܀4q}͙fЎ裹>S B6;~\g$*.G^-ȭ%:mV`~⪌1CU;u<&+Y/S#vvҧLc ?uAzw=+Ql!gFK d#>㎸8{WTȤv*>皈C/}8Ku>[gAT:qm9's3)e_ZkGkQE}2Bxl / }qXq򪤀ySkF{P~ְ.lyܭx\m`Le|P$`}ir2r;pFKqP?OhG ČdCI$ٖ#'r ālU8VH$Iݺv*v04#xM={5nw6 (~lm|0F Sv ܨW:ը'+3`2(i{60 ϴWNq8BVc ._8l&̞KÒ@+6rWc'<.w^<8R9p={#'!Soa  sR[eBك@Ue 3ְHQdgc->٫RSwp#ϧAJzrq#*1r33 rG~}9>(u q͌,k#0hî{/?6sӀ^Y y~d8udt~95c+$׭C4[m \\bsU XKggV<(`ib^g%sVr1IڻLdP#HuQI*Ui$ _+]Mqdn?Ñ5k/TwUݛy's8TLzTHa=:^ U*]SGNL׎L# 8TTu'\0BY'##7+öuߵXT#'9#OlԹh5}szw?8*;˥Eʰ=1{wxuԁ9'?)q0?Z˛R;b1'Ҁ=>}(N=c#g~6iݱ8H>~)ğsrj^#8(>Ǟ?Cr:zvߜ;6=jo@@zRO{4pslf9 猎dsӍ?Z0qָ8&;wɮ Idr3C,+{sP=zT=ˑdn9$WB~m<,Oːr=).8FGG8yLTs 3uwHh 8,}A=oʨ['kH8ݹ`OgsM.:d|ˎöqң` 2O8lAW#S0TG\00O8朶6킞{zcWzⵅj<tdzZ'՜qn$d.:מ˗Rp}+=&+\d7PxO gҜ9$ `::k,vw ut N;7$3nzL.\ N s |DlPw10\}ioQ`ڡl;vB>ocX<F9{+>CH򬡈(=sӎ= hR,1%P +g>+ h2w׵rZ/:pd'=k&p7Le}3ڼ\W=ѣpI 0pA_Ҥ!}O8^/)'=3T$uq.tPj;yrN~Q1͖sCɬӗ x > hn;QObr}k57j7N71 gߡwRsiAǰ9F=85پnJ2A.B{ SҾ |x~e;p 2鑌GA4ɴi9-7 zzu溬sEcu9uPrKg$cq'V)ݐTIƚOl9n7uqY2b6m!yq^\qF5b%][G6(R8g^U Q_=ZwjJz"Ms1ǹcf'֥Þ9#{PK#>)|oC=WO)8؞T!1'ߎ޴8#ǷzO+g?LR(y]_C0H=\ð9\/b fsdyx}?0b;(r(£#5uO":(Мz7a's}>b @3ۿ[S=y? ݍu^d/8sZ-exަ8dک#<'q׷s`wh!p1u1;T8ö1W$~;r_+ JAy9}}%lO(wN;g5O#Lg u?^0iW_9q)2?/_~_>ֳh}q1Q ] p8=ڤ>gO\ T;_ǡ0^qSVmZ&8#?AҜG957h~:vy _svUe`a9*`z1jĪxSA?ZfMnp a;n*k^={V>sCGN~p\v0H= @nn>UsAo[uyC';\c1=qw!`Ҵ*rŽiGu1`w`YT@d#Q$$7pI<=A&rrq䎸=(YHUJ$;IAlnot sW_X˵ᶳmG|W#k6/S˗Y8*̽H'=t=R F :PÏs$8'jEq6 h7U\q \}@r U1'*ɷ?\+$$m''OLЀs#ϧ< K.n瞢=KMvwFROV8>UʳeQNx8B\uDv嗌?Hb2lQUm68?Fmu|e ^ %#a $ڟmC:39c?\TFf? ssh$ kpё(JM[< 9p}VM"R'tߕ918Ҟ׎A(cO$8Kh5ɒU.8volU9N3EQ. OΤ}9Iy'`O rʯC1ں[1f19}p::ӓ#gw y=0Pɻ (;vƸg^HaI=O(XrSaj`ּUG8u;oQZ*>9I׉(δ%lT:99ڲq1&9@逽`=g938qf}:2xHf{g֦$u=*9-M{41鞀cⓀ ==; y P閦C=ӑ8 ;zVnJc c4~{};#\l>2sPѸ֢Tе1O @=3){;C s x5.Nyr3t=8lr6q7uh;sgL$goAt0=; s銕[<ǷoΩSr7# 9_]dr͒pH{7jR=k[}8'S8dH6IǾsEǡޡ ϖO^:rxךʒ\2I=*' >G}T^\G^8#?wD3lf Fx 1$8'$IZl؋^NI灜{lz+z|ݓ>;?M)##?`kbFDZ{{?֠(pB;` Vnz\P S6Hi y8\Rshߏj_(d|~bSeN2GLv Sc׿9G-&yÏ97(~ђ<O1P8rܞ#޿HI+v>__C# d9pk(SuR{}#Op^_3/:8#U n\c.Nss53vOLFyk7y$,2Oyb'#DXr61eH-cFy9¡8#qUg`pF:)qY$unLtV*X|UgtY ˆNK|4#9;v O:apC)'z/U>?gґ%]pA g5mbG8 TOL@[3' OiU&qb{t{U9E7S;F6OGRgKn'\88?xN@G\֚SsF=x}lU A zܜVՉ\nwGO]stQKhC(MJ]ͷߩ S#j3>V>U2(`7z~s:$6ɐA;F9O$@Nye?/9g<}#"H.ЇdNUs:XL<싔`XC\7˜Y-n%em*J `0ު0s8KCu.)?̴[NIG1_,;E 12By*Ika_s)c< e&_^6 %$b\H ʆ#o t^TUe> FUE`L[JaQˎJsZ:5b7f26JxR]V棡i׷0'W#K ^6\AP QiczoUlp>2VetYӭ9/h'E91zֺ Ytdġ8^M4nyX1PGܞTL2Fm][Iui١) ĩ^F!2{Z3#B3kt >x23F .28,N[[BX vϯC~tͭu8ޝ'Ӟq߷\ѷ=ۀ?B$|=9Ojxp01cK @<ښFG#c֨1csۮzLӏ\tDqzqގt7̔4zOL 9 Z!'!=Xz犤==p{~5Xqa]"H9C߁ȭ/rq3#wڢ<ӧ=:~x 1yOLz>ny~8KぃOi'?QS}==@_Eq~mg#מӾhè Nx$58 >vއjXaNk5K{y(vG==HK Kf盋9]pѪ!9.*0H;Ap׊`xsw)3$ Us`檇 @]P[3ѕ&z7pN@λDvmk͔}0X(}wv5Q,@;w'm˹| R O O\Ao%v'h_ !qb0~ͪ1<512Jpkë-gy1t` ^y*]Ap% 譹@Ȯc|Gni* ;pwI\hJǥ쁌!F:׊a=)G|z1- 9HI#~hQ w$q۷ֲcC7g<jpO :Cބ YNrrX9!vFs9޽1+:=qoaQ% l2FA8cn%ߎt^Mr1mI=5p\N_-' [O{VO1jH瞽WwhG˓89C -fw)F>\ B  $-iٞO{$\Fe ۴-zn^+ӛL$c^)n$3~yH? $]GOzŚўZ[pl}e}ߛOZ4@2®7yH==O_=v>Z-gp+\u'W^'}Fɞ =9jȔ9}[۸lx6^V(6,؀і<qVD]RI^>\@80HDf2+||u:P$;r6W#s._ND~c+33 Yz;TpH}*8vG6;3HUYy$33 &>pK!zv9E)n1u7\Y^6ǹJM^aUxb11\^Fm=[YSu2ʯ g;oZE*T'qL~ƱՋϨFч PdE$&ø1W#xn2!8R49+vy{{s9 et G5NR6~sʆQ1sõ7!'-sױ犈OQױWQ:呛c=0"2 8$?Nkػt"7 C®>_xP8NQq v^3Q :/8%6O ϥH1#=M7粓iD&cs/^qPFK>rxJvH60laiYA瓂O8> ztБ( k1㯢vd'$zԠ quJ$r;GG#$i+9#''G7}H䝄OJw rÎ㯥4~Bp$ Aݒ>v1HYKozۻ{խ~ZB8ĝP z/L3?#L:qSxcHK'c֘-Snh9-#=FOJ}B$ 7zڧawrn ?_JIēQ:s߮~TXK6ONEMn93䁂2z=r[6[G8ݎ0;*eܵ;ddbJ 8lUaܹm ]a׃8Ȧ$lP7S`@1V/'Wڰ.?:vUa9R#b :?έm3^5gف$S$~\VtemGc[wL7N8槨t6+@6[j*q1e1gG6qT?k5@?t 99OxyċֳCu\pv{SPd)kc6HOy z=ꛩ .NI )F܀CT8^#$eU#z\T`c:g CI|L1-l=#_ VPA$K12r7>hܜRv2ߚ魘/NY<Ю͓g-ltc#R (Ha{z˴w`L M5:9mr[ߏs^#BTypI^q7HIg\ ӀG#־y6{ m>c@>ck>bLLF4  -;gՅt}U-aؐ&s~#H@9 ANӥ= qZ-Ƒ S21ɧ #3`_zx;>?Q@:}Cy{4{񁃞sRv>KקӮ<0 ~'Rlh^:>q?:oN{{tON-{#=PMI=ڒcAc֚xOzJ 9==>_Rx8Jr{=c@ 8d}ri,t}T6Fr <wR> uis'=v?bPӓՔd r:m i-~#?Éz\^,qL)l2?f$ue\ /23%̾ F~l($gzhfO |?j>ǻ- }ǯ_|Նe>CujdJ1 vŘuQ35Qs9xVi;8ڴQ8^AAO>v P݂}F@jOHn{DvTf\?)Amc$נʬ8(##%94䞼 x' ;Z?Fd727)6S*A8Pps9]:4tp }w)H]PFc%V[ROsMrˎ@zTo#f8;#?:c򦖦i܄y+I qU) `>a$w^9j^w@rU #jvP˗jzbв^34Ej d-7)A1%+>l>ܙlzV* r&vgq횓^@TUObw1=fks&8n݂T|9*|R('G0;Y.2&ϴNNIˏLqL@V8fqސrwz809)Wn巫6N_{IlÏ@2̸du sx zW"<`zyϭe4tQzu 21<1{_^6[zW2 7''T@ӌ+kslܓxHs۱LR[2NGqx=(;)#u?7֒@X ;zalNQ$X: qzREGra߮s \dמ?Ӏp O@ON:-Iw oz{׏xpy^;WV\ϕBY_nv=q^g&X1nO=:8#1eł*6s89$SrrXHێנJ2$'8`r2xax?VԤ7AY}] ez 2P2{l29= E *Gˑvzh:# ^lO? I wXCӿNNSץW61Ǧ8'Z_4u$cs Ұ\;9kJ8o@9?L׺\7e1NA# y9r⟐/C_QNm3z(g@@9ƽf! zk*;Tg%,^O'AN>Թ9FϮ9'<}2(OS?>m'GsèzO̞P 8K=wv?Z=n5q'OlzcIQ{M9yz!lGS=)}=Қqv<~tEWh@$lq_Ϋrw8+6"@=ҫlX< tL?^ Qۑ:2QI#?_Τ^c"8?Sӯ???ONsϩBx)<Ojɖ;9yiۆ}@=/!=A#})q"!M[`c?t=~RE?ҤE\|ɶW_,LrMzOl;S!Hd WB=+öX-@'5v|L#`}cMK>o?9H-鸜8XS<S` Rzp~C,p@#=Eq5[z~b"d6[=8]d~6&p8uWpr3_N+?pvr'ҞcbT`sc=)N g/y3ϵ/H l%OqE(줪 x#89it3(7@S!Iⶎ2ݕˮsÉX#"H̗ .#s댟QT 1b к;( nF<'q;J'V^2]y_\hfRI0z-c1YFJf_yixCt7cF+ 1;F$3L![c(9F9q.ŖI:}wc=UW$pﱹ۵~(OmߕiQ,` (=>&:X61O?5X## zlW5MP梱`T)P1zՐ\ j͓$ s13RZq1 O^sRq{_CI=9?ɮ?a9G4ci <=Hy@y4==Hv<|OJd^_ޣ򾣃=:MfZ.0x4Ə>3}+7Z#9ԃf,2JdE{#`ϯ֒s'9Vң)@Og*z5 } 9gUɦr"q{Txq @G]ݽO'ҟקENu8Su4ޘ#cArHG\vH')8oƇ1ӧ'?ֲz9^v%Z Yki>9j\d~<@~@<׍*Vhp)p;c~`Wz~4`ZSOK!i''ӑ40}zZ{u,Gy^I1D=zߗ5&R<|팆SJ=2On1pjpܨ;'RH8&Q+'fjhdxp»/P8?+R9,K9UÄ3ߚiK; TOSQTUbsGphqԗU$I?xw s:ⵡ`rq]<խ8YzZ  #`2Hlm{ۭNɷ3r_Nn5أVqU 9^qӏl皋@=@>lUCB$pKg5tѓ(@5}I.,| dd`9ִR":@=zr:-w.(.78Q܏~9+~lFq>ݩKRo} yѤ\'A .źd|>9-<Am 1 (2s>7/'BctKS;a`uS3.,țyH3XM3}#I(t$1F︳6.C: dtL6qZve=-}kǨZw+~'G7˪j;V$z:݁BFF2#)Fv&n)*m08:t]Qs xeLq'WU f8z$|ҍӨںCg% 9_=n6Q;Yp29֨1fa 1rؗ}5Z~Frg-7}A0w `*g߮2?JEwNr[ uU#x8=DZSXvrޠBN:} @rXu R@ǷJГ%r <#B\|~LzN9AlT?=~j9ާpy,rބJ-qݒHcAc~54YzQ^*‘8y<F8g8 |< MU d- P ByQdF )NUt 8RpT61W~`7ˁa~cBZ$r r66 t@FT$ff*>a_v?reJnǯ={ԒWW08?ynZ!&^2H`,08Iݱ@9l+Ӂv41Dq Oj,3U>Vl7_~k%wɚb͒xr@;XgԎ֫o57f$#z푞*zl~og^\* Dvyc 7*c8gښw.nm7m?E>pAս9w@2[Bd-捇dAsZj8*|G[[Une\YZW Vn#2Sq;pz3%Ւx ds}kX?yߡ֞V9[ºOđS$sR!Y! X'Z;1E%4-8Z gVpʒLV9{i/7~lD6ø窑gծjC`,).>u'步!T$:|rU0y8vzW^$`a*9+ j[{GvAbۗxqb2dӲ揤sBUxQvkMꨈ")* vja&&z~zlwMHɒ]žM~iVaTBVs<{w'5][= *K oJ<̑=1cGqK sz~stp2q?ȣ@Qd~#'$s֔1r|FAW9AW$r88Kߑq3J 8+Yt\@ uǩ3 U@}\)Oy=G5=oh7`y2GJ22ON3?5-~m I\wsgzoo!zR9HGPqɤQӧ4:prs;#q~c;֥č 0qS|ȫ[0d==?Ɨo=R9z1Fz@8?ZM<~R1׏PӞ:=Gد^GҢyq~qH?̙=qר;`N '9y+' `r8#֡+r V#e`3zpsq߷c? Hǯ\~?sЀO7I  !FHǹ]T7 7PrsCo{nHr0U{WZQ3U`+9UWx 1`~]îv$+HDe#smsWcgb#nVZlj;m@2Џ`?Jn6$ x=Et9?)>^ s~7H۾`H9b!=6~LddSʱ<1ޖ_20wAC0OR0x8%s7QE {㴾p ׯWWق[sz3ӥW5_z 1ljA\e[ҟ2@!@G z+YEGy۲.rĎ%@*dΊls(H@89N O`|̹/ y#<0= Ԕmx^gYv+]v?w}+d!,H?6H<) SםSeGbD;ph% 00=L>(G?d"$f,68G nl3OҪ+P#\.K f>U, 6< ?irYN^!}P%,<xKvzӧksD P~}$/^ӊʓvA;: ךpoШ`$mxAמU$<|Ð+Vl*R ؤ =tB `͉xG ܌߸~U-˗R~G.q aݱ\T̹6N,{+h6=$H%(X9`Ik,\;p{ڑOnOH6i u9{󌀪$84SWo _z&2/&#,>dL0+;RӞFB } zb>-ڪWZĐP'#U_qUW{6FϭN1csϥ/~n3g9P1"xcԜ}G6HA# zfƅYތߑK$?W!2/ˍ͌wRvz׷W}QMexܛ[ ?x\wdw\+s]mnMv5e%?{sVHdV;aI9ҽGcݔ+>^_rvcjϴ1W7V=;h2bC%Nwm mICS"oF$f݋F_4d0 rT^r?Zf<` ϠiXDlI9g'$a:>I !I 3c8-Q;Fܜ-E9DIxu "<[\qG|[PhwR2mOlȬjӻO.9!w%Ksʒ`/ˤX#,@acנnCD\'MGÓ=꡹+h<7m?FQ+Fv8;Su}:ס`p>a#~SAO\#"$Ix'<*BFy^['9zsR֢!ǦR˕!p>Kӷ>V0Wns:Q'SHHK1 F38#a;-P'zRr:{Fi_RR;=sztJAGASVx35K"EI ?0g=O>v 0#gHܓpqdj Or?B$17p1#w֞"ex[d,܃$t #$H8OE7,[q}45>{8vȹ]b?QJ˟~"O_i|dQv >ZNт+te%qZ|dn PKdϥTeRUr;c 2bMph2m;Nr̻e&FE>h9+ǧ5#os0Cp21߱sa]#oo[z|O`;R2A?{֨I%P+xdU5̄d߆u\*HONR p[w.td1SoirxH,U*jxwf5H"Yq}x"Krjmݰ*|$GbAçҶS!i̜LUdypK XVqbǎNBö JzqQor@N0j㱜er%0ؾ6GNY3o1T.P1GZQeQ g#r`{{ajJɜW,O$u8̽hx܎#+>P>Rc98է10TzppG>ىz[<2ytBK};Z|p~󀤠PTp-?Վã@ǂ <=뚳`9Qp$pw PΎ$!X $7*8 ;zVZ=~`wzsں 1'RiP$'cۜVLtڬwA=:VUUGD Mmw4gw?#n6ӱOct 9 8SLI ~a+`'Ԃ8$,v>f=8n M `:8jiEssy%Ns=jR7%A#%Nw>p}-U Nck P@o AՁu?!A?)rTQn68pOS9Ga }ᷯ8}.4Κ _nm-6r[c[rHPsk9mcH=ѫrk8 mnWdHSEh8瑎a7_#U1:Ž~{v_1QOm =*~@9+;#?L{z`v?QNéS)ӧΦw;c8Fמ>1=i^=9811O֒bx~֕L=>=ڔAg<{CcHiܟZ8N} H-3 矠PI)=F<뎧)@}Cq{cH׎gI#Zv:cץ/ӧ\{~ N@ϧ gCٽ3N>b@_{#?z:LH38$W!i# 9kXIIztp+A<:WZ!=[;AG5dZzyќdDَmMLd#d*F8rU#繠} ؗ<\2`1 :{ZdQq9"p|pAۑՎO# S-:皢;?A@BF ݌8zh+us$g͞C`u?֦T`s={9~[HG GZO$p9\Zh޷UtlB:kд7 BP{ky߇={L%vHO_z= < sO|a鰿=@@6q`Nu=3׭|7?v#?RAob={Tks6{`W,>T,Ss_$%|g xF!R $ l c sz6.d989c(@=Yʍz;pOR82$~\%Aٓ򃏛 9i&NIu+=9)nl8ɇpS#uls2z3ǽzV t>3Đ-Hv#!1qrA!)Xy;F1@(O?ׯWݸ8=<}=^3A0gnXQAf_ӭ7K_&@HZD.eP#!FsdOQQZ2"@N>\{ץjMB3VHr['pGyxJݙ`ݪDqdvnAts;w{$Ϯy?|b_Y.Z{cGJ=: 9ny砦99Yi'_9JE ӎ4ANp0A?v(p\⟴}}}֨ }}cMe'q:5tcw#<~>"7@VT[ե6=wa˶xHnHY: c'^]$.#j"dt#ہ}RߩN~/.'`br=98:t4M7Ѱq=)#G3@ycaۓ;`B:pTa^cIIas1;QUddu;T ~AR6SQp@tgG\r''q(%G+=N3֠ ܜtn3\qI,.c|pG~էj_?"$Isynje4y%b@˩͝A9?νc@n}#Hk@\*'&nFG9#_+Y^׺;qq ~l;׃u}Oa}w㏭Ub`8nNjQp>o_Qׂh]nxOhL,DS<~83h5.Z!.q֣g:&Os8ӥBW@QKqja_|>hoL2 41ԓ'Z~Q9=sJ#\T'T?ۂH<|{kcdcS p:m_0A~U Sc;sդdd0\q:Tsv3hW9Ov>*r#DLdZ,:ڤZ&팷U1AG6UhG2ɪNRzYL oÏ#%Sp>fxxhz{!@{@G~:T|$ZBƐtF=|BϠ=h^Ǟ=% nR`ds)4Aqqנzqn: qo)$u_%_XY±UJɴ5ek~T_TIr>]tݷ:f84dJBȻ81t>_eP, *܆ s{pzU.H 3 'NZoGL9\!wp3#r8^99,W=YbZ.dOގY,8ӥuV%.J<8".{v=+M&nԌ;5S_̬zX8U!B6& l7>{/TP$ӂ;V4~FX6Wk''<`ES{ğ$n1]IXor;F9 R6¯c$:ӡ _0 , !:K;c 0AcPu>T)ל䞘Yҿ.I%vR<1=y?)Cz 28TI =prïjc+;cqs}}Nl}wLu5?|rl4EİQ:O^}vn?3;{/kZH=Fxڭ.9stϵKZqzH=M\Az}A8sɓǡ#'d w=N;W#M=sV=~ߨ㊎]D(LAE\vޯBn!s9=:w"1s:5.=EcЏz=>o^G)|m`Qu)H:cs>q t-HvힵnYq31Ja\nF3Rer=zBw0߉=.PԨ1*9C܌=x)qa?ӧ=O9ϭ?8cq#դVlM냎qLG=GzӧUu=N3UٲS<~_?ʁ뜟nT A>2ޚ3Csr}V\''ڳGIheA-ۆF3U>8q '>=dsS9_O[' Xp>UO#8qcsTD6Oށr3 1=5T/zus>grXރ?ZnFx*:3#ޓ`_<`qy(=@۸zolzžrIwN{TՏ>e[iiFv{ƶKsM ml`~aqp;c*&) q?SWk}(6'##߯4걮,L z?vIn{/,v2G 8c.z6I8{?U).C[%R2X\tzWsIg_S F4m>3/bKM ,׊w ^tQ٬ܼ,eɽ=kΊ殻7>%jXi邳_@bEU^OQ]i ct=p?zlȆEie>}܉K8{(7,M$.X; 0p#mʬoobBYqՏ n4,K=g.0ђ0$zV}:T`Tmx#j{̷m$%\"?)*2 'ƻyVv&d]P|~\]ɵOz;0ggRG"x8!@zzzO;.O9I= GNڦYFp9ev,m:S8?Zm@d?/89'qMm;m;U0@$OOH|G_Ky3qКn~ߠ=jPtzZp?9jӰ vnc r3K1ç<9\gs5B$݅^2zg8Of\9sNy;Ob)<;Fݽ@d dc?P:ނ89iR}xM8?[)bL6ᑀHʵq!q8FA*t:F) Qcx8yF^Ny4ub1N39~PpF?r.8bm=F3rCr$cX7Oשy89p9P]ְ-Q1zpw6O89=!IY9:Sxos+ef <(,@q 9ܠqN$Bpyg5T}{}ۈ(y>z֩X $y\rs d|qU%%@O GҚW}rL͌p1pER۲B_h xw9] [W1[Hy]4#lI*=9Ƕya_x1pw~+&]moªq򮎟)cvJ1z8rP | q,D-P{q>Xb$lp['`N*R^> |`珡Wh}'>jҒhƻrpĐ8 27 xt{ zY|gvrm波T U GQ 㩻=J_6#\t#N|ƟQ[#$\sۥc':; { d<UlBC;W?XyqGNZT 0R2s5FGvYsvs9@uǷTF7+O9QޞV|H8O`x=;)q8s9l|v88WeФq;18=j1\q`yTL<.Tr =@Ci+r'#MK*.h4z=6`֮He$׵JW< q1I 6܀BtN\ =u#sQ]^/=bR`BgT`*x$1NN nt +G}neܼݎcNB_(r n*3ןV 3ԣ=V}rPqgwm#5ŨǨD@+CZdyyX Q}S5rz5ǀ'޾N9tz9d,X6: 8'= rr0~lyZS5rG|6OҪ\R@JD@,d?kB_k*ܗo2ѕ.3λ.%J#:m'[Zf%$}9^y<8ܑ2}O W~unlNO*_.US%8 x"̳ݗr9߿Z_R-]+e"YIn@9vᔲeC68?$f,00۴393]% %W@[oʇ#V%qPIV (ۭ 3p%#c1 Î; ) `W^F&Tgvy8sǹBH1 [3(]W9n`&Gr(gd~0I8jo _K>[7; ZPqܼc>Z۝H؅v >+O 1Gz,~`y+ E~c 78,xR;yan :ԅ…u^3j3XsZvHp0@#)2I Еߠ drrz#^A9;~?©C7dx>QLddSӿ6x3>RrrxLԵ#FA>ɦnr ?xtR@89#qۚac}sS"b~89 ( [!yҧ2X7d⤂Ѝp I<) nޫN ݒ9AEXc;=}hnĖ9ݜ9 X>1$eqyĚ- do<3p;|zT#JϟRnH"*'jet:s*%0%Xpy$9>7pxa>՛"q ϡA<OAR` ㎔/K 珜 .yӼH<J*I$/~yOo׽rӧ'Fs5j]O,Lh=s=־k/+9ñc~:ȵy|wjnv*+>33{6]CNrğzWe|_dTTvq矯~H zd:VXA#?<v9ON#WЉºUFLuۃ8ֻEJQv$L/;OAG5?_S(\61cؑڪl..HpiI<\9Y9rs|qU˻ ' u=JKbDG8ݰ9mA8Jȑι9 !cuP n=:gޝeX:dQ?å&Sf R^Y ˎթdN_C.K>.OlmkVL0xu* n |`Jo8ٛw#w;򨀂N:=b+7bF60 ޵JɳfnXGavס鏭t0Di Gڼcx5)=>F8`eR6f;GPC=@VT8U rp/ٖo6uI`2q9ku3f6#,yBbsU9%@2}g8|2U7?鞤v#Oa rHl &Pk9S,}%hT:8ٛ ,܆ 9B DT!Ns8<]^9~z0:H\ّp $HjuR؈|ӏ3 drːcn0=>.ZLe#@?6Oˎ;pj`#HP2|Ry8@=8]J.981+YyrTc95VeЧI݌0S".Ԝ`zsI.?x!$/^=}c&Oau3.X7.sO< \ r>b1ښ5nvf! yO99sXdlGwp8dQ-LyH9߁שg?*:T3DF1O;+nv:|=1ӎ`c֗I}8:.qR@ǧg=4 B}}ғw`zwpH]?}H翯|r˟ݹڏ$1 ׿hf96JQ$T{;=z`n3v'xԲ=9sdb)c.q&T3Wzg13XH @QrG㌌c NO ;gQ$mڝ$cߚ6 aF9ct< % ݷH#%sd횠)'n `3n>~T7]90m%S}:-d~`ܒY8= ܓ"(bp~{}*a $W#qB 9V\Ox~U6#*䟑ҼB%4jGџ8 ׸QgNr3|̾&F9g9ϭ8gcl:S'8ҡ"t=8?ҥ{;0P1Ǖn;~UHy8C.qמ;49?~jGۏO=0}=;sRnz`9<{^?n&1r{zcORdbz}88=Frzbөڕ90SN`>E$d]/q_ʼ`v^+S; |∈g'rp[_^_,w`#'y<9ѲsR]_(<#A{dsaq۠Nzr+G9Ap`t*rx8cqۊk (ڼ?Aaqҫp2:'h8?ΐ1Ax##dF)/8wt׎x48s0xTn9PH85UNr# cC$A<bv%X01T?Lu4>cP3q֐?q6H&-gw@8۾;N8к{S dU+ fY8>{TqWٟABdd(ҽb9L`_%]^IY";?|N8Xs 9(_^=~&I?Z~1c>4\DvI`cZɰ8>˒:q 8Ϸ8xSrӟR?NۚW #L83ҥGޝþF=oO#+>qm$~J.OuO] {pQSZFV!`=H<E~ ZR1&=z=q֧==p+U#6N=O={ަS)"u{^zU"ҩ듞Qjߌcב[``c9ڡ< 拉N}__T&QԎy}+9h2x~9`Θۧ~߯j;V ؈˯ݎ9TRb.O|2x=y8γԤ>y@Q&{{N/Өx[keuX^@oqcھ?wm`>}^zץdҍOʨy . wd, 9q).ws qs__KU>W̎UFEHV0K8t ug ̙ b8w=t#' L- qӶHew+.0Ĝz \OGleW‘ȕ`z(طXc90ca~ =vj° vtu+eGNjc8gvzt,.]D3!sqDZؠq D(w`z=X.{dܱ@9Zm 3JIoo'5krS;m]EYI)Qʪ;q؞^[smڡs|u$7hqEz$H >}83WxQ(U;N<`sP^8/Ȏco1S78F8}(hI+ n>$K}UEPF0-߮9ޤz+Daːs#y߉[o6؇$$uW<b~B Ubp#gt un")>6rǧj" P݌r}s@~v9}i8ثp'^,]?|c$ z"fxGc9N*ppŀps>I` ?x`7=}A{2Y'Qy$Cd8!@nT8+!rF(`xŰnI~ M(\]ݻ_*u NCjgxaQPp.I'8<#k}2c$m{>(Gw:ۏnտ p1ȩCoQPޤ pQtbD:F228t^8!}{ܞ 89QmLy.irsMo-~q}G#ڭǟ{ru1ۊ=AHbnN=<8z|?Jv&ʼw=9'tjQs=S *s{J#?u'>)lϦ}j2^׌5JD=?8ڣ11SbYO# zPqӯQ~k6-2/Oڣ+Z]ӰNʠ)8YΤczJM=8:$Aϕ?"ފ8jwi6H9@M\喼1`2luS&cjr \+U%sᆬH1ñYIpd{浭6Jz$9VA]zKvlLHrY%zU,YB!vc=TB$6pxbNqTa8r)%>].~w=J`FBr7tVsLр $wH͒N/jIrz}?dc$5dHrQpg\#R;9遟sMʒ% rYK1FeJ{dO\le8O *h,˥*Epvi*?:ff_!:rxYsUF|!3պ.Hc񲂫t\ 6=[zfٔ:3 ^~]iecyl_2'sFtfGXbvyU_sڨnznܹ=8¦vж2ޏF⥷S;d[ ]fI~l%)d+卅 {Pkm*7FIc+֑B^ɡ~; xY=$R]BL60G#3gf^k2E%D><|zJ*W[vg]ipÂQ]F' 'ӑQZwH"rQsg [qzqVe3#,v$(ݎ9'ַ<MV#ep8X_0m=suGt}O Xyxg7SN?xLv^vu=}Æ$W7g%(h :f/A@דq_Ms$ft9͞VOg-\̯~8"y=yOjq=OMq]EyD 9#8ӊaI$z R7\n FH'#?U*< `v'9J ĴzA5b>1# ª:oy>{2 sׯpO_l{`W9= ݒ{8nVIXֻ .I3@%B?뤇ZDl}1s;v$N4"U|4e9n:}; Xa}ӑpHh9itlSJXpOa9J1"O .䟻1$0C>tjw̕e_Woo0#sTvOݑPלmi3cXAUq ˝r;;T4>d͑s\bDufvJHWw%VE!D"M"M_-y^Ā.s<, BwwtXWr7L1`OC#{Wy^8w~pH8Ow['9=!\u9< g "$gtT `~<קi@g0A*Ot83XIC*m ts yC3Wߴ9:|-l<;$9\֛'NNy5PGpci 9 JPsq_zȤv I=UH<szз%7#h:2dJmp䁜/oVd:er $|9__xɇ,s {MmΈ.d8c**HR98}.ʌn;L pz*!|RZ6Tv!@'5zq1*)?>[ߌ.̭^GX#X W(tzﭤ2PUˍ(|W6"&1H\J zUG 98>ՔŒ3`޼\Dm[7x4dIQq\B d7LF|qU>#y׈:sʐqZ2',I(8\zA5cK`'(^!H=ssV'<}N8A=ga*m١I(bn9׽N;(?wwIqN7~ - ]Ͼ]z]e|>q3ܶU;|ƹYcgp9s_P9[~pwK0HMr 띬YCrsۚ?y~#oޫMsS*نc'f`Đ\(CgYwyk]"(#\(E8={W? BC,w ׎NyD61]ܸ޾بV-Ƹ,;Pu9@nW&>`,gg7d1{ y@'.#qR7v`I\c=z"HJc9<+m#94F7#BPcu_J~_0; I9HǩJQJ=BzWoq1cuV;0gMBÜFQB8a'ѷ\;gc+ aQN}qtS/9nB轰jEb+Vc?tqjz VP0:ӥK r$WN3_3ngn'ª N ʱt*1I<GPԶwdRq2Il5"vz0$q\)#$ibsp1M[8sjtِ\; o! x֗w,$rNgہCW(9#n|,Pq\Қղ7 { ݲ*^>R09!$K"#sw SN6NaӟZ}!Wѹ=jtl0=w& $sZ+'$nrANNKќ(:=۱lUt>bz"ÎP;Sp>'64dTszz @|?*RHs<ߎdE`~Zm>B{0zucU[1XY_,.XR8JRqrA$arqf; 3 W`(P#_˅r~V@qyA=d*$ʎ+80߅ }A͸giO8Qf?+?\WⷊH]R$wL W|>ϩyb6$'s+c'}뜐 vHaWΚ]= Sr?Η#rb.Xq:8\]~Gl~pF; Jr 0:s3ІMs' 8^kF KnA `vshgc3C566FK8AnO=(G<,pp*,r'><ɬ#Ac  WkE\G~m]2e,zvvLs%U g|/>= Щ }) sqL'Ρ01 Kbz]y gڛ׆bH^:zY Cwc h# *Bl9GaI>,pyϽ%F19'=5~'<67A8aO%5d#''֫iԁxsۊTP81l${5vNNOZO;[w*8*0ӑ>)>f۽ی~8Tꍻw?w%`p \E˩fl;mv';Pp(OLZ봙9ݎ2W$y z< 欹בFVhK&D' <OQ^ ۃ Lyfכ>.h'O:3}@}x nts`qMuI 11lK?SLR!O@ϯRpGH9(\Ps@dJqwc#N1F2}HsӶqg8 `Ӟju8N1 `SOcq{{(2<܊=)QAyђBHI N;Q>qN:g}qS2N[ŘqWv :9!22`!rF 85dS$N%yQOn*pF0JF^A9”qѱ ӦG$pp6P'> ,s:=IT6098F9<G@OщS^Rr@鍿t߯N2V#Q 07NyڭDrXm#8ǭ'ѽ t {g$_(?1W }~㾇O;A8==sя _q-Xg,T1nMm$>kVNބN}9q+էi+z0#)C?\i'1#=0-ӽ|34'$|^9h)v_Y s'1%Tn'a9 ֽn;ډp#[O7pGPO^bXv <kYfڭʁA; WF͊). 4)dg'r r+gnrsQ[SeFFn/ O9=GJK7; ?*qQ) 4p3d;tˌ.r `⵻w1neG'Hl ;2+nݱj63uGA^f!yY"EO9#kT3) c'9vN#bt1#sTu^qɠDaX 1e\cq 'YURPNzSՁ#rOʽ:|*ۨa ,3tAmqbFǷ?Zv zdq 3LvdcNG=GNARվS܌(c!X'yo1ִ}v^qġ;([1hlTf N=;Xq#p=hΫMeWzaYnAR13溿XoʍF6 ?8ZGf.i|¬c,F`H9Jl\3vǖJ6wϸzqRxO)t#ß@5>N1z5q϶GqQ)ٲ2nW;;v=TF^]tRA6Eqެ_t{#2q\Z]uW8FN z#ujwFi m}1iß@2yێG99+⒨ry=+AQё{u91)HkrL /,\g$3=<  fXMK7/>2CcI<z!;`3`ۥWfay' xZ pOA}6t)CqrI/9$@8 ԀrCx3=l83"?kE#&q>L3x5ie$NuI>Z=:[}hA]r~b:]Ѭ{e*h`[J{CF;z!pqRI+glc5zdݰ>amFܐԁG~uwV!-m @2BVzϵtY|Gx.1''uՉ8Q\F ar:}y⤳%ۀ3W>RB3'x 4j[.>ze)!s<~TPFxmeqH-(r1p@nftXqs~PH-ҹi/rI<>sR: 9Py>"m,]Xo_jQZxIbiU7ĥ+gdgޞøR7z ޾OܘP`90{ӭ)ry pT1sڥD{E[4oc(ă.C` u>JJF2qp,:}kwyq*nTm%18s ZLkbȥ$MdwYmoT0{91|xI] w(Ā?N5#@3cnF0LD1Qqw `*/'#bfo̓3*&f~lG}/fpNM z^n?ek8fC:P#p9n:GN!^!}򓁵<1sqZ`^dcg='Wzg$8Z3 휀spsts^Ip:ggҡ}ݟCs}g>\o\uQr3[⥗$nc^px^ޔ/'A1q&(8n*6r=Xr08s1ק\ʢXzx1}$t_?u t19t$pF3ҁ31lӌr $psxFW & qӏA{FhI\`v݁%X= +Ú-SAc qW_NU @lc~UbuT ;p:NUNN3_OJwH ]Z-,CO}E>tO\,N $\ǖf%sUw8V$lǚ1Ja$ӯp=z#TYF:g kwZFs4*2`6@ץs7qWp S#Ӵ ZEQ?&r U0pr@:pko>Ṿxݳۇ#ߍyXos!f$~myYAE9x692ٽoP _>:Tg$ ٌ!sű1cc5wvtR1َHl=VLd*0>RO̚F=V\ssAb}{L"9AR7#h=DfkeYiWnW;Ʋf݄. g\c;I8<@93XD!$۰:t?n08;y:(U?.1gn2{+AQDm;H0IS3X$F2nRHۑ#sLL{v1pA!qz׆_)Ce*ld\\۽f0mMv#eA+aSd/91sֳCO7ogU_OA3CW^ 6e02Kvdr00i l4K#FE['{wQ R_3>n*37vzu(ҴmGW1wBEhK 0q)ڂIeqn 0Wrg6Ubgʲհ `0: |­GE})6c, ^>pr y|Njb5 y/*&```2On*b-1]Z)[ulRYL7)29`Tc?1q=zQ$!+tjgϧs$H#dR07pjm5ps]d.PFJ ,}e}jv|Zߴ@"8!&q́:czXAJϕIKo'RZZqӜyi[GΎ#3Ź76ŽWCy,-:A-T x漺)>R~up~M眞خF!Cdsٷ_{J_8#|*C!NG9z;4~G#{r3ӞO)C~O6 A=CczwoRoxl*tl$q`q{֝>DXNO>qWQ=8a= }xקCS=~lvo޺Y&.Jis|qZI8={ i=~\ccMDwt =qU̠d-^:zrZde܎_p@};rny7PփLwr0q}Od94z=sx91:-c'M?A=y9D?ʚH =~H@GN38=);cیgҵ\SPm9VH͑ӸsLr9z։1ʜzzzwT,LqLhP#9+ϩ=i6O$ʐH\!d$X۸%Xg㿵{<,;v1b< <_!:wpUAlIt~|߽.H FA ڴ)ONrΣi#=;ⴊ"2Xƃ,& YqHۑbrI8ߎ},s;s3o6%Lq_#gjCI;PquJ#}od=;ڇ/QvQtX7Z#˂0WrpH 8}Nm,3})Cx )>nG+YTR>`7#nW'N)=K=J۲Gų,;v,e;mwjq 9VuAO?.2xSMgO s 6@ $tϭ^˴u?Nk{lLx2=d捅[=fR3ןY`ネۀt¢lc 0qfG`<qsM~g\OGPVb;;ۓL~JG |Y@ٴ9펹㊵3e%yO@?+"Py9Q L*㹼, K 6~`qϿ>R@Y8|ag3ZdB1rXOJi߁ Y)ltwPh(FF #(뷨{Wvz~*N\ʻP6^ۜV< C:{-=䮕Iڃ;TAbA8zRT1$qXUWPv  z30__q,=I@ifL!`<\gPrJ!}c%xu~l» `sO:h- HCp`ΤdP{TȮ~WK;pp@eyF3V i \fU W#U?R."0P8f#ҫB|=3j1$E*^y72$?My1ӊc1ʀ9aOh7 F=A4aHm,9rGUA898݌)| qTmQmr1=;g,W`^vK6nKyl@!u%v=j_R4ԀMÌg>#OB's: inu*"Q2n-׆ ^xRʝ}pOZ}^7ҧr~\^NG?/ ӧ$m( G~4Mĉs 䝃8X981޳ǔ?@8$ޞO<7<GYs s~^cH#@`)9,~/AGPr^æұHLr>R wsi輁\x#G'!qA'>래Ԟ1l0 p~c^UiyNѻ>`%ÙA C G GyL[2r9<רвXZkџOlbr\-'[* ON9L0kx ~788ufPv Cv$9q}ԆR@_a8)c \ $@[v=* {X*O9Y s$_R]Zpqے18$ e\$:LFx0Yٓ3yy$9pi)ۖ$/9R}&˾V22;R:OnVlpT(#qpGךn:H~2g8"\)'nKi 0:r9)yƈ\,@8#?x`uݞzjª3l !H 6;6:Ҳ5݅QTcq "ԎOX̑0yՀ#gyֹ;%9 U# 38lw)0;TJI$q=kgwgE B! U9Q zڷ!2x'ǩbަo3zqOCrps 3fV3x%q^ exC.Xna6XAX(Lz/\08YLJ8hM%I'sҲNF>bJ==쇠ݕf?2NS$V:aH\g!OsкGCfe22x>*\p7 H9¨uWt8j0dYfrrŕx̺?!\zPs8XH$ f;A tzЎ8m9?^*uA+Wo?E9TXB:x#8n+J=Wp>8T0PTN}>nsZH;c1ס$ٽirFtQ"GFSI=T1ϾuRJy"2 NDʀ $6Ȼr9⬀7chHr Ra9rs:`>t8ab Sr}G it yfP5cEڭ}'<r:\ new?'R4(ȅ r;gPν3B@?m*z=1W+<~ގ$ЍRTFAgxU#q`FsۃYe6@Oˎ`pݎA .QfFpYTsN>`Nxac q\o`[e*X%\1=;t5ۀn~ӒHW hЌ;Nr{viɿ3DݎpI?9#_OyG}ǖG0~N N7SnoGlTX.׮NJIP |sדz)(GS~;P+' @su'sCq8#<:Qo 䞧'7GRHJ9Ep<w敤r@qϽ+ߞ1to'ЏⓈ\]Sq'ۊVƇ8?{<b*@siG'/L)`z ˓p+`z-XUϢSm'!r^AsjNTr:s9 @lVNz#?J qn#q89QZDہ:q<Ґ ybC$`P ݱ|܌eP;S w>t49 =@{:Kk8HaXs@:pv;w`ޓg:``䎸X+=c7's'7mwt7Lu)^oğ6Tl{~x#.K1`s<.3c=k2^l_k͖2xA9hNLԱy9ga^N+]YCsf,IF} v;IO09sްgZ'RT( }=ӚlU~an'{mC9q_2 {tR6pS_Oz#:,uYTDyV\j#>a.8krŘbb猕|tO}<_j,ۙ@$0n38ѻ^0_3O/[9=UB 6v8cּ>ӡKp$e U:?5H },/${H>#3.zMgV ܌av$b+n#,]7UGF|,2xld t2ur>fؤ0yTCrA+9>xD'ܑ:28'ql{*h!$9?=k=\Gc۞i |Hwu p= ]spdG]3dH2]SYO15+m ?.xҹd Mr8qH 4a"Qp1zt$%O3jO@{ci{#9Ĥ)pDS=+F~ 1 vɜLEc->wG#=s )7cL33rKdt㸧 gR_-%H<ҁt됼t:OL#cG:9=q9`vfmb˂OEbd S t} MmT3:0rp@qSJ OBv{֓bD*FNN*rH줭8/jlғvKn2vz:}uW-I_w_3g=P{tǧqYI<~ dN0rMN;y:=H1c{T"P3Ϸҥ g1sY!{֢S)!8{zۏ'~Q\fUz~t?db_lsz x_b}FVRQ^`8Ƿ<4e{c}FWǞ9=K_O̤bo `Ldךk@ k q~h>'yIvU<ׁݰ72Qa~[}1?j㯠\@1ӿ\~LcJw=<~$K:tu=:T>ա"{~]K\z?Tn3=8?j.q[7SN-''Is~cqSg8֦:cJlhN>wϷl3991::b_~RN~ZH{SӧO!L> :>YEsz:`{ⵎ&^8G^+暹y$?Ҥ?:ǿu-i! z{ګy2AMH$v$zx>yY-۱{Kchz1w~ٲDD8Ԓ;S G'5 n8=h>=^X=Jvd}?^hg38'yXdqӎO&1v#81q}FFi3?\C.dex808 x?N.)E?j)# ^[gb?}r%rpmHP|W:*n$⾾|#%%r]&Lʹ+[*:zV7 W8)Snj z\OAm:K$屆M $.%6PwmGZ$#mc|צF/ˌȧ:0_W :qR_B(퓀FHN%Y_g3֒#BكJ!N2^;gҺU#o_F:uqҵ,>U8Ku G=yr_2o A1,?ioYrFzx8Gj6I#"6 [iF:l nʓ.  P28ϽL-~xԮ Ta0N8#Ǎ#s Ӯ}IC#ܬ33y,*%|\pG'e4ZOo"O"#82+ډX:Fv̡U]'<;-x w [hEr- 8^92* v|gclں., dWPP L*2I1pMzyǨaBx]+@àxsP5[|<Ԫ:Ҩ}998=FX[@w# gg>V}`pzRqc)mc^`/LqnQt9rgg<~G}9^ȸ989Հ3qJd:nzgg$Dǂyag=0?™ rM}999tRl3x5 Cӎsǯ=&N=Yh\KcBG8l222}2}&Y]v#9n3*͖F:tpqӯa~_h}sTe@pyKB+:wק֪9qZ74ϧ^Hޣ+}pzrZNE17Ԁj 3ӐpqnԐ0>F;uz!a'zUV84ERAyqҲt5[8 qbd=O8ԧt WԵ1ʍs pGy+~ jΙB4X@h` V2u#TcϜViePL˄s,[8yA m=JOH@ b]JMk*1~'^,6QBd+,\@/ޒhɑ5R7CoаıLGϴp7wSb6g!~3S¬rcN0|0T9Poʪ r}psҠemʎv= c-gbuTOj7؈b瓴Ɣ%Gm@'sW!eF-ʼWvUC--ZIf vT w׎p}A0=F=k&ZG`@, (Vc(8OçGrS 끎 {b NA%Cn$TqǨ42x nUѺ* [k\L1 s)rSvd}18Tw#s!ݷ2@G<Մ`@ZE˸7vw(J#m=HoL'' i@z44}M4n|2-!W 5 v㚣r'l.ʥa9U#17 72GӃَ2;8qpqR66I>2F7~AQp s11YWfr&X *fH@ /B>pK,3,F7Ey'tg,n8\h[vrFM5w6RB(@'N8IoqtT,c"F灐0im̚ h̶pKG͗'9UAjGJ3F%tNK}ϥsTjRfp4rz&7912:.~RF9).N;lMybV=8]E/C_'Efn6ܱǯ^^rAϯ8_vI-[#,3<?s5:ԀwQ@8㊩-<;㞧<t #ҳo'r l3NJ{N3]![Ca=oʭ+qs׃QsTenv@s۽xs]QrI?ϥ4ɟC#* =Ew}?kˡi8ӹ8ߒAtG/'Fq q=*Q * lw_;#נj\z|17c^1 M}zj? I8`A?ԛN'8둚]Bzc3sϸo3$RA#P&?"Q)083ЯޡqAtaǠ'޵^#ߌg搁Bs^jC##=p}|*zzd?Z,Du 9<[?p{'UqTFhrr`cۮ:zTeC,X;0u6NZܹovte_o |`Fy`N֩ KXR Qǭ@a' \`g=ϵfnLj؜ ܜ`:0#B KuؑnWx~Pj!y]q;Js+1D)NB$ه%x#pt:Z-׆dnHv,Ldt54H8PrB'`WDj$e)g9%^OBz q>)|y  >ޭ85ZԖ-?ewA$%p18jA~|;:=*2e}}ۨvv»x*,6=5/rIdS<% ~N8_ޔ! 89_Vk>BrHF:zݣ:iBff~\ۍ Ʈ3Sx>fG`|K#\R%m=FS8sR|TOQ~uY_== V>\uoa֩>psƠZF@1vVW .U81es4BI bVnYȽJp7g##3ֱﭙXLxd`fňWNǥFvќ*T.RXdzI<֋bٴ@Pc)^vj.ORٓȑX3+l2p8D &+l[v0\\Ewѭo$1]H|<m=Ac€9ۑjuߡ٫=otz Lù8w49䁐yʣuiоV1ry Ӥ $|bH޼rq٦wI-(VWZd7q-vFfF#[XR;F>*$xį =) msބϵHmZ1)nEظ# ]Wfy$21?t2HpGCץM1Ɗ6RqҽX+?QmS G o,ܟ@:cH0q6< \z [|ʣ \Q o13n?\U5[r< rvM?" 3Ԟ3C(9眷N:Hv7;V! ꥗܂(Aހ9s4gr=:u#-p,|ͻA`S !1O_ŽЉ[f rqǨlDR2 , 89'$Ґ-Ѣ0 pvO#;*wͻ 2:c_n nGIa鞕pk48 ǿ3xVMi>8Q׽0}A݊ŮkFA$`{w~ŏb8`zO0=6dzRӻQpXqth 8pF1C)!qpxӨbRqH\[U8IԉlD$LJĜp?*w猎{ +;@$OS&l"<_HUpxC¯M#$ֳ'a"v{g"yXAy opU= N0qX8 ˟VUR0*0=g=ǯ^ߩ 2OQAVD ۅ1=k9MwLd0@8j;D99z H??J r02= >:8$O_?O9Slͼcyp$_ϡ=qʏ`ON?'>cr>zL{߷uN9?\]rpr0=^=&ܠH楱 x?x߈o5r SNs`o/TgvuZY ` HsLs_e夼ωOr U꬀G!Zr($!$qBq}k"% ق625t$u؇. zNZ[B 3@`(g)?e##9$v!-~e F0#ڎRN^su)x+P7&rԌv"@~]+m#ӈ*q~Zeͤ\?( 'f8yP&P hcsj:; \|ź=:+XpX9W^<|sCu\[د7)'_Skjt>SPCgvp{uq\՘bip=2=xY~' d^]X`llt}\Gcq gw<-˯m\< Ww[%T-AbĀp@=tk8jg݅]AS:_E[6N>V=zYvo@g"&6C,;vx ֲ)_9 Uݜ6*63cH .ݏ3U's۔9@b¼,[ p ~PN98###nm sZp6O:;TH{n$m#oP$.bTb .RQ+?<w|8P:cߚm߸x#֛۳rRUp9B॑XUF UcJ\5Pd9NOn6zI ͼomSw9폗bӧY!l3gz\׉CNާz-Mq꿀'*=&?xeG<9$M-N:Ԛ'fNyIzSu3$;v$n?0M;w˞?ϵ$N19?H[> Q+93?~8q2;ҕqۏ|$]&r1y4X.{R1l`.ߏG(89^s$OZ,;.s#{~|1\sN:=Ii8/x'/qg53sq$-N~wIGqx?j]AzzԨK㎿UN9?)Dd!Y8 ==EqzBF~gםZ7g&%2N7c >־p!| r8?^r/-6N20A9:j+gp8_鎕zz`%xWo-ՙ<P3T'yG;x7q9}֚ݒ䃑Bz{qAԶpJ61h9N`U2H|ws c(6D3˷ 9\p x?.8aG=*$Ls˳ Ozy8>\68 œ( st ޝ%ʼed*Ftc2g>k;w= ,B#uG9$dOJm䜞;1ڼ j{e! y]}p9=1U^ON.R@ ҼW^pFA ^]&۟xaH9W $cOZq^_x^5z pï&vt`$36qCg6.xM*V8m1,Đ1s3Ą1۹ʐՏOn: d>`smC9? 6bQXt8J@B)2Jp~ozzDrXchm8z9uXE$ ^8jƭ; C"Hݓb1͵ !!wvGio58%9M2<9=+e7  xW\x<98鑓1֞#NX`M N8$FsFåh0 rAlw<:T+ qU$HRW$y=rP@#pzi$9Fсz4Xcq<F3U<?/) YQ'quY1Ia"JUKF-l(ȲץtZa6$=#jj nzHT*Đ]6QݽOs9qNz6h.p.ma_ 1;_{c&;zc╥v}ޚHn;c<:~΄Kܟ^Bp*pxYd.Nqr={tUiW@9\{VSv~vNS?8yHBN}0;Իr?oJRܤǯNxz֗\-nR.8;h?@}g'HP9ϷiO8WQ\vG#B~Q`sQބy BKd(^}Or}K6H^ 0zzB8z>0{?FC8#yZN8KөT_qhQ~#ӧtBz۹edOלՏ7=N9+KCQadrxCϽTi}u' (={{$ 4Hɑ<<~UK9U∏qO\sP٪X#Ң'JH`9{ۯ^FyzqS}&{uך~1}E ϭv<֥SԑNcpr8~t9҆ =*[krVHrUm$B~P(x`n<8>e~~&8_%d?Q$$/ZRWKCӎp}kil|#rQ p>{OPUQ@.:Ucnΐ u'< 61cT6qqyq:wW?#)Y3cLfWu=PFpzsK89b x$gL:yߒG;?ZY@8@T?xAzS9 Hڼ1qKn\8br 85 $p6Hc&:9<}`Cߥa"nKU1ӎ)4霰NnϝW!Ih+;pI\,mH{ {v둞j#ȝA l9VcЁVIĝ3# ps%ned!1c<6$ d001N; o(tdhoܮsnEK(46kΕci]v~}@sF凔>W}rzc=Oqmh>266D ,p:(OU޸5Hë83<9'% F282\7-N"+ t%9k=w$+'9qk˴3εb>nA}qV9nZ27g>QdqӦsGH R__׬xorRs$r<\uIFݣy$dilqI ɌTqߡ^yw*72dx+Tf1pypAW*{g>aA,;Y_݅@B:v8F72@^P;ԳEN@NX3;_~95K's:rƟC7F$uq}9Qr~^8ʉ y$p#ҢU+Ջ sosb*qa>V߅!s'=ErztIN:y8>cQWwPq>l :N4#N:BpxϾx"2 !vqqG;`z`c#8?Ωȋ g)\zGߧ9f~?.` B88եN;^'מG\Tʽ:^ߏS)LnFq׿?j8\z!rˎNq@83ގqr#gϩʜ=Hj3)D#<r'*bcjc(vprN=j"{1bF7ЃqPg8#Z 3gPiQLus{*.4<y wӠ4H'Db81QRH^NU u4s As!7R!#OҪ:sL\boӎ}xu>j&) xGB2 a&W*d-z^CIŒ|uJ9%d<}+"5z0le OLfi4N0?vU$|t#Qr\56 PCL1%#cus\W6rSqAr0~X]߼`9F8%N'P{뚑"RI čB9:n֤8R&B0V2q㊦mY!TO@KKǰ|.^u/aʙY7zgo^?o$J F\/׭eno+8݅tJ9 4 r2S{+鿃\k\iQepJx^/)/}|k1jrȷe~Sھ`o2V:l\~1p~•ҹ7Z#>MHfs<kpX38qqhVFO0#\sUKa,$lqg6n3`aT60霤])e 2g1zgٖᮡ-72 ) 8y+gSwh8?Q!Os,-{"+Ua"–`8"8B ?%9Ev@8S)㒬3Fi! 䁚d9@daN̓so5CRLJ6#r01}9%df  P_QTfZm8xc%p* [xHd!2~`_5O#,:VqN <b(_ }86\22 m ;7~bVcВT_rz[Lۅ#%}WiÂ0G@yYAܐ]Gg7N*kr@N88#YIXăzdmC3u(á-p˻Hv^dCnb{m=}F>:=kh_!M~콬_fRd[)6 fC (iQ^6f bJZe3F awc8=sIcLK ݣc>Hl(+HFbYE{ynm.gp&Hb9y̿hHo%\ 1O_lףNWԙ"TxNaUtbV y8usZ->DLpIa?1ߜsXI(Ms1oͨi_ZiMF6:wm,J Hf_*@Ićxu=*"a) 9 xzsY%qĔ`*ހϼ<~11Aj`&!Ϩ8# kKկ",fJl+1p^|icZqs[FS@R@;s:Y50 X=qbm%'΄f@$ێ8#82٣ߩtmJz`t @3+H[H`IL==ǽ9 Cc8&P 1,S.8Gco G?Z(<Okb[&]=L_@[2=:U.]; 3G`Ӌ3өGZ9#ݎ2X`}x~#8sUI z3؏njL}}}8ރsz]dیVܥ ݃x֐*yFc׮qM<{~bøI2a'Mq@$ ~+-3>Nw=~?G.by =38}*-ԡ2pO?^:9SQɁӰ=G^v#ݽsS˨3~dK<gOSJ7VNA'@'۞*ErO]OP䡆zpIHYriþ3 ֏BO'zqzD:g'뎼:բYR{$ëP2z"u  \9 8}}zW.{W֤,I*O8<]ZOx֩ x*>R9 q_Zّg9+ۢ ϝOw-twFl11;Gq]%Gi,~n:usq{SX؛^wELȬT 68Z̷bwY _t!O<{]پN)`Q8A(pJž{>`P2DJ"eGS])Ft< 4KġOYDnx=HHӂ2ǁ o2nMMoH]IP4UO.*J qgsӞ*ӽ2O^5uvcӿl ]1mi3L~n1sz)Z[d Ib}*p2WWiY9iPFIAUw;.pj1>mrcSVu'ͱM(~X1#t݌[j d!1cr{ҹ'վ5C |jSis&r܌nҠYfwNB={xo`FX^@e Aے{m=GBrc3yN(9Gͷ$AM•f\t;j&kbE#*FI#.?AyE@Fpgj'cг® C*FkE|NX9V=N rb0#)#9 z`L2c¨$k{L3aٔ J'p}?U $O~YK%N9Q;gyw[s®KG _^FvG⹾e;m=_1e*G,5wñuDaϐby\k+d~Y9R#f-CߎsSa'!*6Q\q鄥sip(ӞhtR-B;sڹ-Z]M+4y%q#KhÞ@O`Erצ}kXLZƥ?7\cOկ/i=GP)'"2@8sEN)L _5v hHw@rr=E|kRӋsg;nU?x(@> M(?S?i$+ndKsT%Snqn0_9r֍M8ߡV%],DI\:"^oVp&~#5AuJYwapFO+7) 0c`:שV"i,H ?/9#XznV ^=FOQj̉UpPO}Uܹ+}qTИpAwG sS!ր]EFcc=r9a(Nb,Gi$SLvXA݃CYlnӃBZC⭦d#d r^C̎rw9!*O8jo6e+!#f2zu民cLn-*B sWwN^GVߧҹj~M> ݷ+O*\ 9% oh-aU?Q 7E=y# Try#>{F'F1{~$]q_y#d֥s )`{#\ձ<8m=q-'yᚷacۓ?^,Dl/BV܃)^dO^JW/%9>t .s=31Q&Iy!aUVV%oԜYG7\V.[ɖAjg6yO0=C7~ J"9=;>q57Os `wP< FoΤXO;M^UrW'>ǯҜF=}jy}ЖJrG`=2}*W<38=(sK'HX$vs9Q9FO\qFOCB`u 9=w `sy889&z)9H * {.:T' JWTs{n;=}H[81^'E#iPĜc`q\c)+C #^E~ÖWKnt Fr:us)H\?NWs6ݾ |@% =x'"WXtT rq3qNԔ2X>pI%X`rG|) O#sєbۋyoA[aX#yjX U L{Gzh4!UPyڧuWUU XڭڮKS)3&Wf!JI.A=xt 0N-~B4-B^m1N9ձ^0(yR2Q;cNqu鞂R .:2UsIZBR1᳁GZwRH A|cZ_#vbԼZ8YO⻻ (aJl!aF+J:آA@>Td~{yp.t?4a npk/l adve(d˞~c׎H5(]cO4v^9Al(#,ͻEjB@Qp6'?Zщt 1sm G'd79\'nߚэ' I3֐=1|rF{ֱ N0m{c #~8'G*p;rN~p3S v;z\qڔxp`4RyQ1Ԝُ{wc~``pynнrx溋_~FBaWcǭh!UNx?/\utr00W{^#68=1޺Stۑ{WvR_7MNs_:xA·+ =JWZr~Gz%M*_Ԏ1<$e?+`e>eCNoԋ<ACZUVQ܎I=A3[Tf4H0PB;b3TʁBuw\АP2 {uYDXe`199=NzW^^I؟jv\;f`0T$'pA˃S#^{Y5.t@w֬ <9*>mʀF=>̽V(t'zfWXQX"げ^s^,<)|W1%pbKu=sȓ#$}ۧ,gkH-XG͂;]9Ӗ]`<湑țqC?(6Nx3_Jb*7zc'OROjl9lk0 b19{NA\=G~^sÑk&2ӟs$FvH 9dY\ /˞O>׌rrsgL pC@Ox4I\u%0m ǠuKq,|0srg9O8ϵu hʎxۓ+7[Y06# ێ}3F|Fi*Nu=@RNxDc_=T#`[ uɭx0; sGrkȬ'wC[Džհ "ѸGw¾Q(Sk:/}Oo2gSs)Bwr=WUsAzURzz:SaQ1qc 9>UC`tW-W }P{{}\e8Bzu=2+02A1y On*iџ!83>|tf$ _KK~Gg?ŗdm_g89߰# QT:Jӷs}!q.8~Al`*Ӈ-I#pscg#HoYlBy?.ܨ=?\Jé{{vgg9+Dexy}#?$-!8 >ԛcNJ_MK=隤CDs;S}yϦ>Hd2:_=F;2;>xOzy:(c679lr<&.YF~OAGlb0A1.F _!'ӏZM(X Ӂr:Ԫ$|0n}3R3n,sڄu9^G ,a+|?Z+Eg-ykE]/dvf.0}=jCy_zbCH 9rN=)) PpO*z4R#H?t}q> sϰ 3;\$B1;Jma۹<-t=J:*hdr] ax'\Ffֱ0hr63rzp=H+g7YSS?xIUTe%sQ³1`?^R==+S;8 qL4i\.p`Kf 3e<ջg L,U+FH<t#;%1±U:澚PM) |S8< >x?X2]1\u,#iʶ*kL1 居*E}ÓNp1J:v10wzn'K;J>#& WCש xvNL`swP Nx.fJsqPkj #n F\d23ҹk|8D`3=mϦzz#"#gUtn[a6:28{,.;])v㎾QsoמTF$`P=.D8^~}?D9HǥCdx϶}?—׃̚_Y^1ے?' D8w*up1ӿ犗3E'{sUf~fTbFyb: aG<R:dzws4Q"#{_JnSԷRHHϧSq >j} )׌duƛ{RsQ >1; eۧsIBH\S=z~|sߞ{Tم̟v6ymڸ=GK>X fnڤ<#$WL l#F'aFއYgì w1_m!;]%>k.ir5Ć ŒGq\xebT#*z^q;[87uݘw(@Ĩ|V$d ÒCc'N7 ; u#JQe/pS`chxCSRnEP68VeO֜gcsӌ~OjOPI'#]q}ە kUw9%OL*.XW'~;ka Ӏ}qި*@IV*z~?Mbsʸ8cO0y*eEgs,H#32nR鞊;>JQuX O,viFPFzf 4krcK!b$x_)#^ܹ1' 7RU|&'؋4tbY ݘP`g 2yfh䩒F-[cnUԪJq}xcVXs2M=w 9xM=>F̅ 9lt{ݤ[p >1A2FOrq[I L~\uX*ad^yNYTdXd1sOD_G!#=`aK6p6.rG2BsךoDg %aI&W7`!u[ F8$ezVr:[$eN F۸/Q°0g1]{קJ(cJpυB0[;A8<U6\ `t:n\u &y`*{c&2̍0Ko4LAHԊ#,FWB`7 #]Js9,QL\t;>&[()+Hf! ávCWht`($?p  ct0cp:Vl{YYTm2;5d=uؒy,?*1ogA0:uR2 u8<힔h* Cy3y{{5p0Fc#O=ojWgݓsT$cX/ZI*QВI\'+kn?8a '#=՜d7 9QgI %c ʕs3J wdh<ޞ8m!`)=~np1R7zAjcK)s4{& @ݏ\UE!UvHpʕ9SAǡTKq;pۜ'q Ԏ1w$b2rA*(.$gIp76zw%K!dS$U}Yw'<HkkƫWE۽5lg;H&{|1l9!Уy-EqL&pwKF`7p')qq5ùZXK`{9#8M5ⱁ ydHʼv X`ymU7Ʉ9]f?f2Ǔ nz;3GJUxKWs{!bAjM$ !RD΄\JGiǻ2\$Q7};G&ԉIep_!p:v2翉%Fh*o!1Êr-s#E~u9TS- I*Vu AmRGv[N6ZcltGE5Ւ\7wMάϴt=On:Wx"kFr  sOcJ̨]-!X:N;c{E Я'NZloV]>+PBb?1=km#㌅W< c#zRtlǪׯj!FNyb8zP0zg#8:Pw^:\ϱ?7\gz`9 HcyOJ:zvt]1`ƒ9^; O\`kKu"gpx`"L68x*y9A=Oh@! *i?pr/\Q)C=iC A @GBwq=? 79y(䃌<}MǾ3TJ 񜐼cVU$t峞{cڛZ msqwl&AǓQo qߑ? `OVb+Ԁ'*_=s\N=0Hr:pzNT}zu$|y ϿlKT)tw*rW B' q^)i>F :Oz0l#FSϮ4٢ "gfcq=ÐMl@bD;3w{ak;4hˀ1nU p>eza| Nn2\Qk̎aK-# Ba9D)&xHtA#5J|Sa'tܴݼunq&#Rl'IJ䱐EP=k548e}e -mxa˸# cC] QϘ 3*nJskXG$͈uKI$aܭ#Po! Wm^؇T$&r0 t)+lrNm>oaR[-2Ms! X܂zֱ{6.x53JH%]ӌ5|*2liL&9l/C#&cݻp>Kʟ*D0K^N 8i;ƒd+bׂFGoJ9՚%Mu[hVIvѕ|s׊o>f#!Jrpb wzKzܾW1&)9q3HkFX~Iy;Yvl!]|۹Bی^.se+tXRN'ǥw:57 Ta rwH;tJ. I&$FB{SLu޳[Nc sz֎NEi51q$2o~B3Ӗbb >A Rpzr>CK :pXdh0ɏ0)V NMuZ~k,fC"7TX08暝^Eibt;2`9*p&S,Kc9Id3#83p? Ѵ!Qr/Z;j]H$GyTnCו'8LYԒQrodΚ7lvz(&rNU-(w]99u'~Pt#LjXc8zMhX1G9AwP[![,ׯ^kU+-:޹j /),%J J:W|2[FUacPp;s]lLs;>TJjK-!fymn1# yZ,%VvQ99__SI&*V\!( g݆T\4@Ϝ$d$8{|g+|)pOl$FA99$vHR}}szsnJϡ՝@rB8hc!2Nv{zɪK7mٷ2)wO'Z`C6:ݓ`hH q(1N۟y,6nv8m]T<L<p~`G]ēC@j6!8zxpkf&/QbI;9pݐE9Ui8X c'UvdnS屍sӷ\t. ̈Yp;֧V|=˟70U9Ϧ $+fx9n(9ۇ\c/jÛF}zmn39j=}k'FmGi@As! 73{םV,UTE2G2O嚼rBI d{Sbvu^8Y唐mq_#w"m鍬s:7$C߷YZ*œ ~ ÎzsޭDyYJb.,a¹30?SO ێ?Nrszd5##:s:|BFADE jx.#n{s">Ojϟq\$i7Q_Eqp8 ׀x r$$Px18ɩޢvy2^GȦ%4iiJȇqb8UdOlH lczڽ쥦mzyyaCF/9e8#A+f̀ŕSq19=ҴϢ‹FVr]EPJ/%rd;*pqܤ H8ENM-<*UX؆h_d$'p{ c"%y/2kEMS=3c~:|*'nAUsz$-Mz'r!=ɑ?/x9b^9WɐmTvnl}*V1rT'h޺uQ?/'fOaLuFi#5HnkXUezEgxR}B62ޛ+0iA:zW՞9Ys~$sJL|2#w#9 Hd[  r}kaޘ$a=:j꒮sHָ_CѿLj&;]q̓uR;Ex3K6g>+c3JkYc*di4s'GM}cIM3d#N*D,rܪ7}상"2Up(A@s׮@qIVTq=z shva~c׎:ulqo7r:1#;N;<6 (%PG#>wj ziޣʌ|Ğ bp@ u=GaMO>yd>9A3srrGÐNo@qR69#A-{af7l0Q wⱫGS(A'zM'9<;ׅWG{`bOC]* qղyb,C&PP$UBFBMČ2Wbɕ!Qg Qyd`gy5 h#YOԿFݹ!N<涁Wb+_+=EU^LشfFnB_nLxljBeH9o\؊OVQ2{ZImf)#=s^ mq⟺ԘYw3p#+^ZGʪXnqq1k{7SRQەˣ( M `q#<Ł )Z&9R1m>4~^C`TeGNy@k#G9[ф\$& w=޼N=l:*u2YO%8_׽8Frx`:Nc/[\zyèSژR$dNr;Ē8Ca R@i-&R9V=1VBl'+Ny*L(PE8R۰GpqP$Yzdm~Dcܳ98p(Ui0N#-oN8I~ݷw>v.~2N=jReX؜z(d #_GsO wdg99ڰޛ\x#NGzm&d}/FᎼ/$H `K3[*9. ,t"=2Fs9Å`rv$8qz㚢?nߔs3bA$޸$ 1 T<`>^8Zru0 ^9֤H .:*={Wa;۔*2N_>?CUe>u$ zq \*0©VWsԖ0Lc;ǯiE|JT9bY lcols^ee;)Bk5fK2tb>rAƾ'Zt2Ҭ̥O3c>Os>~sMۓƬӎϚ88$ZL w==:Ezzy?;uQrH=sקcӧqk g{c!XY7'c\z{`㯵OQ0x8G'+9ң^fHQNr@n?RN31Nў o 9[#2}}xq] H NqO;qⲑp}|!^OkvgC#"ՋFo\ 75waۀ{1C޲.r{t<9#9>9ɤcrt㨮!#M8uu@g>n{+V? ۏ1e=)hۅâ6A)3۸mԀ:$$^F1~Ogo[E9A=*+v9x_$]O?q8ǧ|Nz4Ӟ;q(ɇa{=M?zqڨBy;J~}Q^; _r$1B?㏨LvHznwlvǓ1N g'+"rzr{Os$ʰ{8&QNz_K @NA0s3R3V!H<~HbyLy^EN;H͋g9Ry p7ղV2.zs`(290~vGں%'L 縨=tJ̅;1qUf<{g #2^'ҥ6Cqyp={y䟭J*ߐ\ ʙJ4/sԿ=2zl42 Δ~I pH~>t\Ϯrx4C=lVO-#nJ#pp a{WY%-@G0?:p^X?𜸧yȶ_ÂX,T;l< lg>@x'fWҴiH# f:t5S- lv 8zuZ=5J9[qۀ;>f\n';cr#r=3ֺaSsˡ"@^,asA|zkB$S.2:_Cc8Ts-ΐ32sڴm$CK(9bsN>nPwSl}~C /YD$.UUU^ tv=ly18;IrF@_`0r3gD>)89#q |nO0H7 Ğ*et9 c<p 7nbUAݎȫсF8$a$g;Vҙ V$RlS2 $391WҺ1 hWbp?2>CwCZy^sWu+ǯq3G? ft'~^SUߠ<{Ӛ| LW8wsFc9 }ǧ8 {v8䁎3w=JRJׁ׌<;SwzInry7odv=>ں uʯl9qJt|gAy= Hqϥ|2_gaCr:?czZ焋\˿99בӭ[dq^.`ӷ^sϽO>;ИX:Ns8=~0Ophys)2l;לON'RlMc^9qRNx2zvQqXd^ DZɩ=Ƕzb7B$B;J^>s[- ' CztUsO(۱rƓ??&vW)<=:ȥçNz簨E: C#ҳs+j#~>:(8COxG>P={õt)m?DS8uIzvQ<%=ʱ$s>:T&0H$:gs:&29E0>^Dg1= ~u 灎}3]7v1|JrmXVNGRA8|܏\םR<͛GDvqc!x霊TZtPFy$}hHHr~uZ2(֢s|QQ<ޜ = z~z3v`P`x$~nҧp%N{g<<9Bqzx?UfDn듞Gr֬F g U7a 8;U2OP;H03{ZSRi3zö2 1Iְg& Fv:޽>:II:TMYmx:W,|C#pڥz7?_Z.5 8P徛Ա '?28w#+m|[Y/T7>n|G֢~VDKN猘z7NriЀ20~pѴUU]v6 GY[`?QEnƾ񜯦wpV5`YӞ[N`>H׮_R0љR r *x*9Mnayo1`(H\?:@TqAVF_ޅ'#C*v$2HGPUwެf'vH;qg9뎾*9كz:jOoqE4H!;~V#i݅f8p2s t+$8nHO۽zPyBGVb2(DZZz))98aJzNNp}k&Eg+0e\t*c*e-d*3p8+;&NN@I{jd?1naT{6w .;Xc},29'G>-А0m^7W^+ew|#'ASCQ:Q;pO_9kiY&8,ht;2N= ʓ$/! Ir9V+H1IE3`[kv)98[hcy6&=N>;д k.-|K;`IFJثmlE̎@@T+n@ձOJOK+^;s&ؘ巳pW88 knprC!HM™yXwQ [G )W )Vzcv=ooK;ep'={hwP@XjXJ$n-ztL)t=q5˛b>kGdӎ Pӡ'#Hrm|a#1Mߊ[kѯaG`ȍSI++|"]YDi'/wEMR2*+Nﳱ5Gϰ^%=Zpp ~.iɟK}:G>zZ 'A#?rV:yg]@:c>P;5!^N@$c<"=#W1z*#|#7qF2OA8g#[}Ls2N8oQQ6R1dt>MOLL:pUǩZE~;s cyspth^asr?JP;z?h4J9Nu=y=?ƗLAuԹ>1z{z v3 Ǧy;3>g9ډmz&:EJ41qp=ƔǦ3 Is:1s隇g~~:OCTz`y':~( tcȩAG-M9Y(qwpqUEsc{};Ub 8z`T+L1R?NJsϯoʩl!TI@x郑M ~x^"(2r p}3HWsUa܄mؐNsϚ1\8'nX:No Xr\08$|+y`z1G5Ja5ty1h|ng{(D>ebsa }1~N}ZZ >2e1גZloˀ$&Din-8@Aݷo#>c0)``퍾sҺ#fu*j ]QK;TsP܌87O !,T+;褎­laFewFp1bz8j)" 1s֛˪6 ׮ K;dl8`]&vCNsLXӽ5Y&TIrF@!GldlibDF`3xG9Oڽ}+mI1>A$n6[87⮥ڎ:t֐t}>'aMݿt:'>=ɹ]z9c\d鞿Lkmt4|@7GU 1LZ dې89?nkML6֨w _[Jrr=sa\d$w< Qo8ӱ" \c115pdF awr7! zDg5~F"d`)>I0yU`CuH1'-mщSܻ8M.$rIA⹋9%\ $8 {O@Tal( >smH I+nTJkT&4.u @WQ $>íG(Rq o @rxW}Ɇ:\i['|dwEdqtWFH^{Uã%yU-' 7n ԼTvU =Gnipr$ sGuǧjҟѾ7ʻrIFI+ n}]!nS{f0l?Z'qxJ2F8:/lYJ-hT4{ׅ,k#ׯJ㌢%IcжF8#uJ%\`X"i#vs@1޵w5V8YO^>acJU4j*1ga=Y9 ӓpJnD/2yH'#W2-)k+`ZuK=?N2`$s׏^+p$=+lmOiQ:j(QqG<@'\Iβ@;qu9viBz>IF9-v0#8M< ,8ݱU6& I\֬j`2)Y9# *dObyñ]5Rnrr9sSBA8e: Y% xѪ#^X˹3sК発wrpzg6%=p?^3{m7'VwCN6ާ;C$J){- uu͘qHJES$cs^^6kOܐ8NOcNU )#ԞnxV{Ջ 錞r=;V QV3v{p8yzIےyQ:p*,ZZC9氓IeOrq~ ݐFN`HJoRY26 \Ξ/#B3vn?{s:s@2Ns:qⲾ,<FsH|ǦTz4PNvG\#8rO+ .>xTFy?)Hؤx /@U'pF1A郓`@dr8gO#zԞ [֥3`=}4.A~^!Xp 02|Q:=qD$<ښ[ Ӳh rJ‘x<`t%I.쥳<]5p6G^WͺI'ag>8hMu_o}b,bHI0c+9U'%rsUPp9ץ}K9_VJl3Č !*'p)팞ӎ=~` /nA0FUk<85LQ3)$)p֤\HPyOq˧낟)i\/# ։xe98baX$LSc7;jמ2zrM63eCpr۱C9KP$dHKڲ^:uEBb 8' g+$q[Kl>siI{$tѴn0Kb6p3+ݎ8;JaQb';k0(>Z,lc88Kј}OYĥ$fc$N Lם8$b4wX":J'&}=aCZ5ysnsQЎDӦ"$ubJ2p[sw:)j8@hĞr>k\)qԏL֫H$b>v|x?2;vԡX(?xz7𗥏]t<\w= ۟Z]A>s峖Py=:.#{LG]u?)$ =d%Hl׵p=|#yc#zu:$8O8 uS:cr n ˧Z6og#vq|q^>cȐܽw+ pzrO0. Q|;wp8Cr}M@ެ+ wqigy{IGBRLd Ē1=MX, bF)1zw+cNcGvPkyV2¶Knf*W`g*I ā91T$lWc Դ<ɜ̬BbrsG{jT MrM(ʙʱ+%sWYX@;KʅǠjݏɓQݎ\zg8ǧl+m!s={Gc~7~vJ2^ϥyX`U矗9no !8 ="*7pE<8ߎu7d>`' )=qhFyDy y dIaJ78zkF5|ǯYq`$FOC;`zcG8V-0SW ք𝌥W r;gnZ`BDaVCYpF9GRl 'rryrVIl0sRK\(|K0c+<5Rw POǕ=tZa]Ϥw0rOryیg\G@nm9z`8@x=H4ēqP{rzsNPhkP0y=_ڔw#ۯR~~g98!zӥ/^@Gt:a~ca霃A G}ZgϜ>ud6=9{ǩg..;ny֞;uԙ\G>R:g߽43c2{n҂y]T  Nrzq:sК; xn0H?4q|LU0Nx t={Pf339!.˖ssI+1DcvW8e J}:^\<,[E˱n`)G!0ؑȩÌe$I,yL0.ss\SSF 'v7 ib Oʹ q8:ho͝]܁8>*'k|`c$B8^n{cwcȬu0p:&0a.%r~e8p}BF hc?( :ajqʱ;A$봷`R:8\]Y v-|pO'wLRP%3I$rq{WpVK=[fd cQ~O_Dd(#<rN:T h8 y ag?QO{TaF9$6Lm[ݓ18sg`.``)Wf2v4d`6Fq9Ⱗo%ٶ#'ڽ9+#͋2M۱`9 vzKE€Xt$ަMeyR#6vg A?3 `z[-ˮ#Dyρaʷ~p{֗љ(eqڍ'̧rw8e^sX %x*ԐVwoz4Hgxr ܓсr~^FA\`\qη7;vv vT#%qI\/8GK/f:q圊҂Cw~$'h ؤ ۺ$(q)p[Oog9H~3 ,$ǯ>+pSx/ |8$nctq@/LznkFЉgC<|dgRآRNxPrc9E1; ~}{pEs@r3^}km@)E9KrgG?tXc8]I\Uq׶Hz@au.TqҎ] N``Ǿ:S1קL܏A:c4Az|I0zysn )F Ӧ) twd/Rs($͌{)>G.0%2al޻lg rך`].HJN9Lw:-͵G(wLqU#’7u=i?o^l;+Q(EHn38ǽnn76`Ćq۾+vRzICYu,$TrL*<0kIߩg7|:;tu~qgso=Ͻ|6 >n:PrO tEjP0S'8''qڲƴ:;nYF@p܁ c9IbZܗ=|_J7^j"zUKkϧ<:xa#t!9g<g==;qLB;s~◿a~qF°<lT鎟kf py7i zV?Ӟ #^}?Fsߌ?RՃp#یr8^y;w>OpqZ f2xO{7nZh# Z?tӏJd>[$b;gLKu\ ~$trZ:{9*F1=B{ǰUt^E`Q鎦#~'Jb.7rW B:6`W8c6ڦ\Mץ{9z'/K7rLp a/N3ӥsN@c3ԞG־GzppQ c<뢰̙6;adR<rʟ:XTܑBWPv7˹?xq\iCNضr bNyJYEkV9:J}邧o#-I&yŵw9T\{#jxA*@ X<G"vSg֭ 9OB@95,Ձ>|v xV9#8=ZG8䏮O x;c+OB[87`).\28!AV'ջC Fv376yUз-m Gp2 fZp'NTSc>󞧡hiR)xI= Gqg8校cg9 =v;0[|XX$nA}=K_ZM[AQ#,TmzO 5ռa$ӆsֆ)y; >2qwLt8:ԸŸǟH ~oR Nr=ȭh[asp vaԱ\}}L.K!f(✁ִs ne*./ܭ\xNC.AȊLnÎZ3Xj6IJNwl;:ם+S:sp8#9'(HA$铑զ_R3ϖ`U .y;ֽcXlN~*0srwpWa{`s-6A N`u=_C:C'NzzE\N぀FA9w'-FrB |H~}JB'te0O*Ė$8֫㯶[8Иzn8g< 0p98'ԾuwG 6}cA rw׿Z:ַ  r:9Qt*T>w : r}5"ǵq3۰H5u6x ꣱^gat15oӌ aYn''h=}UHϿzRN}}jS_sޏ׿:~ttcӗןӽ `rIԃN8^q"l?>#sNy^3~8AON?֦ӞSz~Jн;w>Ƥ8Ͽ8=MK&x=NҌۯ##HV=sȎW擐En;{T$䓌`?uy$7x3* h~y8?B>boקCT?N~ͥƐ£?>;vS4Fǯ\C5 _: NeG'\UqzkϨꌀT3h"OTLǨ:bLr=qnc q?CTh{}=(1 3pp;&|c<+2p'98>+mc8=8։'$+=玹=Z=28/vѲ3$yژfO?cY4 :S}q~:=?8$?֣g=;c)tn f_y0~GݻIA@󧬿{9#>ғ12123zJ'Q,FI=14kqzg\q֔2g'{V VW8}E'k$#/^sڽ*?Տ*wY|#>'Lp:kV8!'nwqӐ=ӢnW;u! H?9Ig8_ UJԢݵG܌QxOlW/=ItjrWev]F+ڥ< edPVMqQӁǷZgv m<4El0,F9q3zhr wfFS'wS_$KMceP`(qFp{q`v[?9$.A?jK-C1 8 8n"\8Ln$c4)ml$}qys3eG88xi20 t,Oaq׮*n) =;E$@XaY@7|63ϯZ#n I+>/͒R'lyc_(>`<!Ӯ5C393g^3_|fZz6K#}NB $mq$r: i\92STX|}p9n=:fE.zsӨC=&-v?w v+^^8!#v11g5j`lr1Tr=:W;wlI߻V'' '51.%[h9QsJ,E@wcH샷GN88,. F᎘9<{T ^{5 wVF]a@R\cPG2r59a}=*X͝_Alm@"o0]#^bַ7B|b GvyuZir]|]Y h8me%_Z>ZƷ|1ܪTt9r`gDe5?(Aޛj)*9T@yckiU\y``Dy pAGDyĶ?bw b]BrA' J; 8{瓟OZg,3~}}io|cE ㌍`n"C $aA3b9nПz8#N)G_~x߹Bbau=GޔzGR]~qR~S$pЁaXd`ds3`-8rӥ<7~7vs=Y~38Aϡ"XDZ3CN1cOY)<]qH=3Ђz}3ޠٷ8aQ1[q؎GlC ~wvm ĵs2~} 4sm`r0:oԉS9GFHsG?U;" \g ucuBvrΕc I?:{^wuaC[HOA.QbihwFz9=ꌚ/8.X}.Ps>x8]*_VeOmNl2OUfϦ:&/a$uKAW2\&*8ʹ;NlSN:Td;o/#I$M$*vvyġocH3RIs(yF0K%;q#ҥ1򢙼f dO w'(/26oF$LP{SRbQW,G\`Enf̊zc˪<.caeۜrz PW f_9RM`3yKUtg_ Jvo$g8>v ec۫BTe<%Bz+,rCLI)>!FUls ?IIegq|MkGoP3򊟺71NU[bKI4}qfPFBzg#$p:UV&_ۥ5Qzy/Iw2^~m׭D$.f@s\dxw`Ü3kͮƋ+Z]JU=Yܖ#ѯ8lڽ֌mPdw }My*ԥgcar9xv u9ξ.r~}OAU)8t~;'L~uRyqcv9ϡ8bO|~,ppqMqXLO q Ԃc HsGYg pv@psWT|oir 68;@+G6/GgMF%җ,+HzZly -.\OJɅwa" a.3ힼ~O/KI7n%=ӊݎ5cA 2:~5'vθhxi*rIRW>{-C=H99G|d^kz& ^^W e^@*Y (wр/ Q__AZ>3035HRWp[Gn=o5 yN*|{3vu'';noלtQv vaw g (‚?/# 8Ozمp@.v'ۥB{'_qJҖ>AV6W89b|G3|ɴlb(v96O'OaFBowۗt?xsXLޖ"yb8v`7Rn݆@߼)P995?5p!vw*''j{<`P͑R4~U?@q霓+^GB۞ksz}aw6m#,O#?%EAsT nY 1TuAۓEv"nj>BX/ֹe|Θt*2g`n1{ry!A ǟ`'Z~Fab[a $6G#ñ<23*!#{"\±W=sZ|2#-jXGm@R#kzWO\,ơT v;V\ͣk3@*3qy'$p8EO `~z~8ϷAu^~/_N#CcN'J:sܯcӸ-w'{ ~]q48 ֓x@Gl[zq8$ސޝFOiBG^=;~_ΣOΒCxNl?z+cNz'#~#$_i:p{ty;`׶|r@ԟlTIn;ulO*8"ל bJ9P9!pN{s\3Mw7\1m009+]amL>oA/>M+duc}7>U91'&sǡ#g|WEl` ߔlKq{g<8"n@3=+VdFDo$7 Kd+봚  X8+)= Pmc8q98jй?  \nPJ<B񻃌RF2qO(  ʶsB{s)e9`9py=,Mfcy+u%-u:k#*s> A1B>R7zn9ֽ"QcݟjD'a9'D 9fu>1huc.l0otRIOd_   O$q^(η9$d;I=q vԙ*2Rorgi-C+߀7`->Qw ER0=9*SG#i$ 8zT9``mҰF ~S@7#˜F1zq't3;݃e>:lln7dOQ5HFE`}186p1ɭ8IX#9ۜt3}2AU\* ;Tp*uKbw\8;uY#i8`@Uw*O8=zW #ɑmEPc=:[l!06C$SNӞ+cUt@+Ǚc S\[(,$ LVor.E( GQxp*kmSЖn\a* (zy.aBgӧQ'Hd7 }sӊdi•;qڛQs9`Q: !00Ǡ's(%IQ0q ӧ$8w $37rrO*x$=(q*(HtT>bwo'<=746.x #F:z UJNA#ҳzCVѡLn )!von, eK1p1zĭ~_y&n[ʮlN3z ]ɷJ)cdz"YgNWXJ@x3בk;u'<8u8>=:JLM<J7SsҰn'b@zz8`}8'O#ПwWZH6H9kqo3qRNy?iǷp97^AcOrig'usRx9 b-aө=2FO_ʱosDv:GQ֥2q'<&^ rm; ]y8?_^N{~Vo\4nxMRyˌi?+~tz ,>Z]Iaq-ڮ zL1ןҪ$H{i?|tC&}2H'?O'^czn=*FEc{ش4Fx`޽N:(1ܞz}zfϞ ) c\g?O֐1Szw?x:tcI=qz7={NI$R`Fy?|S?S"߿Mn㯯G\oeù0pkDx#Vb!E 7d!Xdvg/8_rZdXo;2瑊e1O/~Ƕk)'V#7 @'<;NYeFFڪ[gFGϞh$uԑVA,9z^GO[v1Pq 89:V^Ewl` 00xl:Vp2R1s׎ib!NvO=J٣47l2|9q^\3 2>`s$zgscZlt,p0秧es^!-Rϵhg+Np 0,;h$UfokdkPWa psۿ5qI:([  t9a rrH G$P:CC1dp8[ߟUQl nG{|^g#8q^$bW K}|U2٨PѲPQG'vNAFxs3|a=>];~t31IOBq5Ig\a%~{֝;:čb;g{Ȩ=M* &n0? [K^B\QIp=띝(ǴHX)i ;~Y瞃=k l%e_VPvs^~a= =gǂK1U=8g=|WݖK0UH=icޯ*Fwdg8^ rď]==sIcҽSXzKgHx;qp18 ӎ2~G'ԓU7P7pGqIlH 6N J`'bCl&L3FN-8~*ڟP9<ԙH` ?)#ߕIS77h ҄mu3ֺ4S,kcsB 8_fu|IFJ1s_c鯄MϫqW㿎Ϩ/GuՎc{G>眎X8ϷN߯q=3H,< IzJ^#o.&n}:q`$_֕ ǿSM(qL`z``uNֳlB^>joa2AǷׯ ǷlBG8O ҦhO\89?Qԯ ={zdH{{vГB2GXi=>b9iwq9{MGNs>:0G0#? {q8{g=n9M4ï^$1ӱǽEG}?AzҌ}8'Ih'緮):~|~)dx$\&\H2NGQ08#$u#jITa=r?ƩztgR޿ NÏ󎾂:bS}z#ӊ/89}3XYyry92`> "@1p{`3}[ Kzǯjğh9|A+bgׯUBs:Ǧtr!2`uǦHTF\3Ƕ:CKTnLT'9'ПZ |\c'gXOqCq<ƚYBAVl9'8q+  WVT|:vo$(q2A` : qp@{RKdvuQ;<ds+N7Raԃ9Pl Bdߌvfb qIqM#+cF~ӟOʄ&CHrFz i˜g<l3VIl̘nsu\Zqٓ66TSkrwFԟGNº9D"$(99pW/ =*YԣVwJ$ew|jnDߓD+5ѫ.ELl9략a rNO8TQ 'pvcpxg9Rz¢PN'd|#Mb4IDfG8V ԻdxM61%IEP&'[dE*"pȪF WKaX$h+~Vn{ -;֬`xnRtۿl1\夗'è(->Hxbx<{+ugM_g_hL@r1OY3؂azsޣ O\m&C^{0ߨOҥ-~sLc5]'#s9=~1ruqz}NfjDlx펜'* ס gSJC=A۾31dvn 323:'9=0? }icp1#PNF09OVDD=1G?Wa#(~aԽQמZ;tRJ&pMހJjuxRíl )-o9eSO'u?3FÒp0rkoH|.,3Bs⻩bW⮗M}LtWz†_n׷ )ڍ鐠$` $Ubnr}ZIB';8b a.rzqS+WXدnH>݅tۚ7]H+nmY2E l6sb8$LOːQGd(2#FJ`h="2UC9?wΣGY({B; =jZ.}Ѹ9 `X N,C` "n`'>pX6]nOQyQT^[LBB9] B3r-?2·#NO>c_g.yH!$ZȒc*sYm$'0@EM`Kd9^p#䁐՚z†cºǎ18*anV;؎ HE#UyD OˆʕOqGAM}F2ÈE bH\ZHV@ƒՊ]KCZi& X )q\VAȌVa,@?\gr4?( ?R{(]bE,͓HA#+''-YmmBLbFcv!Fyr1nz+j,P d lrK佸$_qqR0ﷶ L++>Ǯ*\j%u6TeF>h8X灒#$Vkt$d 9aspsQ{Ɓ*˴;R@nÂJhNaLJaI^ hۙPr 0==1+G鱬iP67I ~Op9I&_wGŋ)9VuB4D6$9|WӺ5[¤0˞=+,KYE=/@:#ǮzzӀ:זWn$ۻ8 pz8Fu =:dN 8?3z>l{<1T#<@q8%@B.e`Isg~zNXo!ܯlWdr9Kd P`-g952 R~@۪kgs%r 8y'YH!:/έ3^=+xє6rXnK vNO\ dfwR0Hۦ:R_"[<]N]7*p0*I!v1$ri>Y>Tל~45]9Q#2[xPF0*. dz, ;ՍHpKj6w}L#!XBom}dQ-R)!nwZxB۳ < b:*l+8nC4>O#?{`?U<vjw'98JPA &z iwSx>J.z9j7:^){?/ Bd 0s׷>0m9 ϵOqp˂G1mpyU{-,J'|ނ+JzJD}slR Ϩ#wcL'*Orr{8׭=&yIc'zи'=1Bpx(\@9P:gwA>ϯEYqT{c9#p:8h pN8OAGNw x REN߼y3=S>ٜq#{zqT cرۀ sY],G;)lWs / r2μWb?0^Us{yxBHQYÕ? >5v*HW@A9s~B|}zw4FXY7'-HΪ&l Or:Wdag48;푘c<!kjpqx=9breyGj' Bm`Ƴ1`z6(|Bz]dx;rw 1RNFy銜'̐Y 5A5qN8Nk*đ>)qîA [i9[Ȫn+9f:eРd8`y=1R.[|MgVcy|89Wrywֹg:i3c;N6@a~T7 $9lX߸2 w6Hmo9'n22Z$~X s xhʜNHTnWA]rr#=8DP6Ft#~Znǂp :0~ uV6hݸv/St:i=l8ܹ9'^zu4'NGQӎ=Z= ;kn1ߝdpGVKpwO`gP~/<p 6p̸At49R r:<^CJӔjI_tyJT9#r[,P=*Q gh|[opG<v \+1g{+*q* u+n#g{L`jOPI \twu1O0%k.64w`H:H 3E^l-k*.2q%1+uDqz.Z5~8;OOC`^bWd|v|pJnl·G*XXq^*IۜeJ8ʶG 911K& A#%OVrLWs5%JN ʐdLs^.!i=rn608 }=ykũyz Lש*@ߩ9\z\y9xQ(?wolc9?ҞOJ(}Ϲ=KrQYGpO84}CZ|ù 7zOTf $g? PԤ,F9R0sE܎wd?J 6*>f9f_,{;ddsR>b&l|qcPI'{~SKSǖ8_ooj-~23d p=ִ`^ho^A.pc?Q^M7.YӒSGӮ:ɯ˕y;՗y'y}9p<ӹ-zi-`y9OjڊPNNIwCaB#I'$ c׿Jh٘BX% yMBVo㝸 \N{֔Dg~\v#=sCTw&ug]Þ݆{cq5]ոP~n:)$[3ؐr6$o퓻/e`rs!M+9ޠvy'?'R`~l3NOaց=vmAyS9D!Z`PˀˌҽOClBpzpyz8y%%C`BL9}>d?|.{u*^ 8 slg50Ϩ>`?q䇉s#\w4ByvդI!'cMV$끌92{`=0j#=9P kŋϠZ;x&ۜcsSg8L_PsާGAqM-ϯ_LqȦzr <d.@9۸.w;{vz߁Ǎqw xUA03\㍭dɯ|_1>lFFA>kӰH!\}:SЊ_ѫ tB89>Oz !A.HڪNx瞿dk'qE 08\g#=k#s0$O* ~D m8#YfD edV m9s%"r0` G=u\ pqp r+6{(0p…V-N{vTۻv2c13Z.LVѐD &GL^ki4O V1I庆FWyCGIwsREHHЪ;v3T T $+=8' g;Bǒ[QI`:x2p{70덬78}>ap{svcw=qVDV H*p[A3چ>>bs+$0xH?ug gbQ" R"͸N1zsxZTdăЎqT]qw9sR4' sk##sLWSE3ڋ ̤l1#`s9DиyRG"Y P' zԑҴlՠDE:LgH_b8YҌR)bds};oaH.Gן0?a1@l`? ~W,y0;nnVxI?)m83~MHs2*9 maq;zП@+sARYQ9<Sޠ O98s%Q;F |À{’w}Ӑ j^Fk7|*9} cLOrp~n:ع3JW:둼RR1c߯]8.yHb6#g?m@ 9_Seח@~aty^;~5[fvPMɒ8DGs3auXb}8'$z>W$2sߧ_FjA_RzQ@P=^3L ]@p=2 x?9z3ҡD/Np^H?N*[ۀK;gӏ¡1>c=?HקSL>O=D#:ю=VEP<M}=O5- 9|{SI8ᑜw{ء^ c4̏`zsfCBO9jV~9Ͽ(Ϩ#޴V_Rg׃voNqu9;r*wcCqzP9LxON] Zڣ=0}֔K)=s=}gӧj^y oӌJ v=Isc\֠93ɽNBG=1}F޸'=p2\Phh>>}q|gSE+͑ 8^98~>Oz8U#ԱݎsLA<\yo<؜{~u89qʢŃ>͜ߊxbq۞@>O=qw<qO|چB}r:{Vh : p:2>p}=qLݜh P #~v]ɲIH\d~uu#]jL*;R&G>N)h'< t<۳J)q8VHtGDQUݗBȫ . >mji! qR#\؃%7? _pY=Wv 1o}U2s/ :#'n@VmnPoWY[p;'ڕ(6z[-f^%g+=9#G`zq_- i;Ja#`ŜJ3r+'~'3®bp 6%x\v>V[BN r#';WTv5lħ 0$0s#).(;5MҲM߳&pI qҟ=C6S~@=Қnf$11r>e͝$,q>Vbp BIPxtcSBLq 7.[q,s8'~a\2ۈ{cԩ9# &X ēpy9F=J-9$ 6=qԔtX:/ :ǩ8 6`9<+>- :QG,2OH|vf$|nj(Ƕ9<é2OByNpOZф38]*[H aኀă;.?)IJ_c*΍pqL㾾l,fg2  {Ot~;U+,N|gOZvN$`>?u[r2>ׄz䝒w,4U,7LIvc8K-rNK0dvۆ`cKە󡉣x#'*̥LqR4R%))>UVy$h1U6 S'7<~R]8M(wʌ8=}QLC8# wI;_$zy«͉YXʞT~nFoحߋ6I!h؎xNx5/C#}d;IH`zu8_=?c" rNX}{\g C>vN?ґH8=1P26둂89S-( g  Os sEd#JOuA+ö01Hɦ-RpVBG'#0WNj=zpN>}PupI d_ڃFIWU8IK1 F9GYxyc\,[WGlƥ^đt;~O㠯)hVc]H ?99<ҾY:jdxٔ&1hE؁ & 5 k~f@x"5~RG8Ww[eI;#hGWb:u /\789!I$Ns֡mNq%\y+pm0@?r0o-P!Fɐc9-IK+jrw $ʰ 9.QFOOs| L+0`6 dct,%مL(nhkvYa*Pnԓ!?*!n#H *T)q [nW`__RmEDžLuenONzjǟF9EO0 'Σw͓qZ)ipqLtY@WhC2_ʼnGWG 29x'=Ӹ4^6)[>94FC|f `'"X9 N|1:a,$玣5`i󪓙w9fN ?Qk>evI؜+t*rnH?N biTy2r*ÀFA1JMo"a(<ͼo#S e pُ,p˝J dL _%gepVq)ҟ^p(m ;E(Q`g5gsl _ +<)Y1_/xrF#=qrsDdLH@$‚-#ےJ9r;WHeXhfޠg6=iү!]Ų]|cTɦW#[O̠֏KH JEDQ=Y6\`;)B%ف*R;ֺYl-*.Ha#yoJוic.ͫm5YTrv8Oާsv2(…F*oTSg:2pFzz1daG<8|YʥIK͝Kyx?C{`dګ ;t;x֝gsҟa7n۽~Nᷨe*>RGn!OT w>O${}~rz\cg|v7nJ<ȸ $v݅F֨~ӌS@^AQ">ROLqǮ>`r)=6&Q>b3[i(yuq'9\8{vU"\ 9~2mSڇK)yb83Gl,s⫓O42pLk<ۀpg8=8̤m,c0F}@?JIa Ny>.?@= oc =:z}d |=J8HRy9N:qAR}8rGCn.-zpq$zz.G~{+_A {΃9>OU 'TU.IșJ̠+cG>k&mA Q)^}OZuNJSf *O@bױYdmU06>e565QZYII6Y*O 983zW᰷mtO$RSPf7U=0y0m|]X"uL\rXbM{qg&d~@ӭd=wM<|'띫9hGqmD;c#0U\$$6]qې\qBWauivDp<3{1^3nc z19ˠmF۝0s3e^+\`Cr0O^:( d29jgy+k/Ǜb8RSԲ;/{''+mN9H+u9Y9 6^m?pny;Z<>Fx(2:o8: 7뽔zb摙8a L+Ћ>G?qsm->AK^FG#ZApqNykOCB3qܹiF9ɪmȀ):lB0 qKs }VCM*1Lp1J0I?.1tRB.!9rF $8#>1&   S5 #')fW:Flq@'vO~بN*;B,@8_V #>]C>ըg ON),f%ޠ>Pllp K9*FǨ$ct,K*PBp;&yp5:-wpvzZd#~`CqzӎtG}Db]sqˀ9bg2)ے:}x;:=x_ҟ=^!艸s폧NC ת1:rg8^(8}jz_:ぞ:A?wit炸x v2:"228~_!>9R=~u@! qN}ݺl Ƿ#@6c?҆0R0'8{~8`?Δ) O'Ӧ1 KFa>ݲNKvW$ |szՍ?R|e9L"ǿ\cOu=xԍmbr2p9q괪>V[* (Qwn-S >b0g%} r_Qv@NFpp09OQxyȭf#2N@8&q|ێɤn~s= o/0G`3r8ulepZFRo=2IǡWi {u:3ÿyco͌r8ֽ>gʒv#?z cݣ;#m󊺈Xϩ2Gnޙ9tDae!C}{Vo(\`T#KhٽfU2HY$AsҽN=W8QҾqXo|@"pۙprr}1ּr(=QznFk wsbLJ!䫁cǞNMc~FHK9\G^;̊  zb3@ )}R@{TF+A?ۀH=6|ᱸw0J9A\rTޤwI#FA 1֡ W 8'Sy۟~こwI+m;! 7LP.Ux[, 9-2GHYUd8N2:VGT2GGC#$}i!8A#CS+ы'޹~*͌9|M"L`qV`rqU1 rs6H>{o$p0jUFޣNTYWyᲸϧnF7-1Alْ$6BTHL:dֱ]}IJ#xKawuWTQ!R'Lk&mxp8r0O~Mdfd,JenC2 ŽÎ@p%FTP1؎FTjn9.;80zAwzI&&LI\=ŭ»LX!*$DZǵogAS@9p=?ƼgOrAv}N:LuSd?'߸cRк+gS}xE y85 Dsi'?N"8q>9N6 :gxTE2;r3Ow!-ۿN褨vc.Ac3cLFsʩ ']Hp#h N#F,pC8$3 =sUB?K̪f;O̧w `?{ `XO$G5( >G+~p`?pqh#=kжN0X.?\DʭR0gtE26r`cq9$r!H,T*Np:`ՕUbʨ 9Aᱟ#OjҌ6쑞6r{OaY4Z4|2n A؎9犊HQ@$7q櫗Kه${r1 9,r[?*޾۳;e}Skqp9'=Ӝ$0ԬRv:"LcX^`^Hdc9#G=}AƸ:^ 6a<2}ǥ{EdIQA'Ϥ:Q'=j_8ssy"C!קWzp/C2Ow}LmG {s C1lru9Zgn׭/{N%LHA/s=!j;\`;g}?ze я'+L,gNrWc׎ة鞙'9 Իz}zsڜz~sߧ.rOy2^߰'BN?(y&Qz?C OJitb#ӷQߞf(ۘnlqM '鎹td3u2*qoo>gV/`OAML+>g;u< O͡v8i8< <ׁAzנy?_)^?C }9_D:~T;&Sg@c~{ @b w}L Xg 1#@|l.kX1'+m>(8Px+U$/$t^Wˎ*cRm& *Nr6=|Lb|WsԐIG5D*G^8߮:UOd{oMHsqCt$YOs\_io*U|7V)g}* 6p <{ )ă{N+ $)pr3qʯC0d0 09{t#5P97xlKp f9B98ۈuYFq69ź5rQO {g}Fkb>^@s܌FH7w!gGC̝G$08!Nrz_Ɠp•lc鞇5Kq=>q"5#NwOa'OṌ0O$pG^ lC0ZTe!FvPz8]fl…<P|8=TaaOɀ3p[}*ߘ <2dA2+95n&Baw>JRq. )1$`G#֬iӇi+!![q~o)Yv܃2Szzk77qB6*¸1W[yxqwsJ1dٲGXrOFې;Sh96m8$t'[i<ێgIJU=~n9Kנ0?ȫF:g=pz_Bq8ӜsW]3ͫ4=\dZ?t#ͪ-צ:L'=qHhܟßRz sVgmN7 ۓ~Vs>ƾf 7%׃ʫ7+|ǒ  ܜ+lx >4>|+f>1N=!9 Qlq%A 9z̑dDU R4#:95Kf;1φVzk&Vht[vyڠu,;)#r1f2nqi>iM45o2m- ɍ_` 2l[+zA״|,ғU6uknbo,p9eVbzofD>uk`!Uє4qGʚ7C|93y'2OLgq[xmţXqߓ#V/E]*u'hsLUػg{rgk?tggɻ W%oQS\)\a;FAm''I{5&mqg/N=3?63ޔ4ͺ qԌzt֜xW,ݏqZGQNq֗ r0wcʌqB=1c069*E~sD*r>9mW,T|Yӓ1O I/Ncd֥±%W~FOldA<rrW1=jZ]Kj7Ē9ہR9ǥiF]6HQ1'$)nR;Ue^<>)dE@e۷$@5ob:9#ؖ321PXLG9ҳf]Ac *IHϭg+aF92~cci $8$ gq<V"#+N}xTSLvXr`6dN~b>{ ppzVvQ6#9UT2rx\ dnRqOPDp  PG8y9+`(?uG 76IF8sp/RJ2Ws&;(NL<9juyǨF&Ҁ);qi5ӣ5xK6XjO"Ί!Q 9n_t;0hcȨH8I cשlOV=L 9>Y'#+9{tTesjM; >ހTt:xJHMWw? 9:`wZ&+lpӠs? Hb#A?\SJ/E h+z}3IqO!q=EJ89랔y^Sp}S=?p 㯯Q(B}sslϽ*$gNXb~?U=3!L{z@8s u㝠c:OteǑM]<}0(%-ݎ{';M$dx퓎x9vq>+g8T3UIQH?{sq9G Mv2{p1M#8bjZvF =>F1S+C??5!r18 ߷*㌮?89ۥTMzwGkʟg6Äiĩq5Ƶ٦bU[Kscc8n+=2. ̯2@ mN @VMuX~BdZ!|7c)Y4+d9Wӯ5bٳ;#m F?5#7%sj-vX|و*ON1&U PQ;GtBw?7|\~(qjT[ap[xkc_/.?Oƒ;`N.:TX.]kȈPf7+ A8eoY+,I kCMU@sڣ#t̅ V8)kp6}<~jezwaTc X|N+5/ԫhc/P7ʛINT Wގf2ЎO.$PO+GlgdSe$ceeqd-F:։HijZKkBpًӠ+"kxضu`7(Rr.OiF .u;^zb"?$^=*'SmJ9ѭb ۷& 1,0yp*_.-mŵԓ$hu&S`t}VGn!yi1~{U{qeraB#RRGsŤOs\!s@ ڡmbT@N/ STʲlhUn<6:c^Gg%^y`0G+V~D"w~%#:0+m mm#+fn/^\4߉ z(8]s#^_aq׌{d⼆I>z~jAONxukv T?OwF&c t~98#;zQ6hCTUeN q19ֲeqԀ77r:^zSu`9Nr2U2HppF;UR6T \ϱ.C}4FF/ۛp :G-=\~c:vLqU.X%06,1ea#sU֗:dQJm}V>yUY20a85_i,tMg FxȅePWk͹GG^HӏJQvby,InIo=d@ӼT,l@aoݏs8TnmjO]*xgI! r1 kS.*A8_2n^\]Y=q*U`Sj|osk R#ׂs[HqD}^_2r1hQzsJt-PLn̹ 6@zV֏ȮfyFy "@eTLMukQp 鞝*""oC@nIz/+p{;dDq0Y\2:V[rz8Q rH va}iH;0<֮ĽC_RrHS0 mHKq -؏lV:}qW,C s9ֺ+# FסZZF*᰻;׀k fQ1< =ۚ3Zk:$yO\gR20p֤-Ct %+_ =Fj7slUqkB H$рV)mm*mfR/r ,,K>2U6NT~`c'zm6FFӑ oֵ6U+#?ZAz X]UP2Jst+ N.v888=ng8($0;nbBAqdg?y;PsEq֧s8݁Gc2.~b*W*}pjV觳:kFjpp9+Scsk/hj *yx=+hzkԌ7mqfcfRT$X{\z3\2 9 ?v.%ǭrC;  *D˂ B.y#Lf(+oHJHWԴ;D`p1˟n)t}EWC)նnKrYxی|>#4qpr~!scy3- 2;r@˓7)>=> epM`PT#% 9z9Ue岦sB犤\Vłp:dH䁞+zdI.X7 f_39%0y*z`qɮHU E#|TiShlAfjWKרgJwnO^{nurO\|T}9O|}ޠ9㯧Czac}3m^ϥJg ;g?.{ T<x拈cJ/A# gSS)X ?L=}mw=ukS-"E3ǷΧ{=+ L!B`w{Tx1#ihL~O#OnGgpOǧnzq{%u[S*=ˊdV*0 6}~!h|YjY'#{t9NFr11#K8=>>Ñ@9K)V10c=:WEBSp=sQ- lڧ ''9b{z npQ; WExeZH+96H5GX2O##~|yݵUOCMq4Ta=x=ztygnda9랇卺#+#8-[=p1Pr"鸐ר$i-|֍R:@PW`8R'5fC30*Ჟtp7(IJ׭L~8i-"ίKG R#\m UAr}yWI(/|ēۮq_Q]k۸vT1*`k6F%G~L^E^#oC ݕgtN À0}+c?L&z]Q6$aYG>߁eֶtxqItɬlۉ`mp{c5؋ ffU݀%dc8LTqEA`7z׷j_RL HʄF7dI{{rW ?,U389'>jm@aX#?3+b1]sHc~ja=| $7K)FFAv$dgo˖L#֡D=^g栓 r9 O ';}j2%>,TT`,{s(3 FAk2\eBLaᑷ#nIg^d.ݬFƒzж9 w^A sxa̻Vl Zhsf'HI%UWqgS$@wu\cfc;99װs$[.FЁ9Us{R 3^,(-T(IrySUswq@o1wUh2"`rI9zȪgi;}qc3Ic*]zg*)Up:eH fI]8Bpq\cMzp1;G7aοG;0I OO %xRmřp92NQDG Sݾ+ˬ/Еx!J\pI8$u\a~Y Z[#>zO%xs50=I2\ddF?VQqaXFHq<:`99\<j`.cd 08GZ&MVee,pSpw—-€Ko'\QQ$#^ b"qeHpW#$AqNU+ӡpCz A P~mۉ9m }׭VG$rt;g͠LF)P##8{f Au\h8GCӸ'=*Ӈ90 (CGQf;^ Ydذs{tJ媷4ި-"C`2ry\Cg%CLzs9`x{Myuqz8ړry鎄yMJC s})C2=F1S'ߎA =x'9QF?' L]qړ=끜<.<8zS uCB_tp09e v4Rqg4~?~s y1󊲠^dit>g~c9$t$'ǯrsԘ<¡INn*ߞ3JiZfޙ$u'qؖ3g;o|=?ni^ցNG}®F}: w暑 gv(?1Vdcg}qwx#͡1铓;c)6}ߞTi3f=Ny9珧tqԺ|0ۿ|3N}F݃ҕ~O1B돩'S|s 篯|~]驅~ðsi|߭W0Xp9?XӞԼzj3^ 1l¯@!1s3y4UN@8׭I' u?qӚ\HIci0P_?=$dnL)Ϲ,Z&rN"*ri&>b9Rל&e$Oqs_QKG|E@VNO]C%dݹnsΝO=D (Z@ $#>R1@<>ľ#웶`͒#Hjf*n';X˞wv8J 71Ӟ1Ll VHgc%\]0}*hd#5,=Y9'X96:zkF,28=H9鏧59Q"'#'=zW-~3zr-S; 8p8ʌ<##s x<sz|_:2XI OU0n8!cv{cQ^v[9'q񎇵 A8Ppx[A};LKg NB'i-dݒG=)orpn4XTH^i1;a=[ pz.qqʞqSZm3CA rH;孳;htGS/cSb0a8c9"?z?CF :AtW,zu>܌<=@NqN^T^qv(si~_)9=qLܞ21w2}`?=x׿֜zvPS=3{ucDQ;2?*CqPz= >v4$8zyj3O g$rr?NHS=1ӹZhH>`]J 3c?`1=qr9>=?'N!=1z΢=?_C=֔7@Uf;1yUVۏ'͠QoO㞜9v+Q/^ؓP?/mgdn3]FjΘop1R1֕ w~ӌӏ֬EsVjlhŜm{z֊ǧ5Ocͫ.x>pQ]S1u]w8j+!N `dtU1 p>ug+[A{6WÃh"ڣפR`1#=_/3ze[ N}ki|$śsbOJx翰$'-T׾:blCz`q# sxm׸Z8]gӧz>\=$Ox/DCفyw=(儿vG=@WNFqQ$D0*6d|ǤYҬQ)GvPї!sQ^%nǢjyg'"1HgN9yp9kQd8$(,p8j`J$Hǭg$Qdp!G գGrHW=x<׷BĜB|>lz͏`*pr.N9EY]VC^1uzTr P9ݎ2:k#q1Tk2d6|泜q6E{;fp8V!VloV+1-[uB31ۻk#aI ۞p{D&[Be= İ 318Ǧqz2e!9m_S^]OW$<ߚ`j@n LקhdF#/]$YRIC" -jr80=gF!,)UqСclY(a΅'WSρ1kFԴ]L4뛻۫58\x?$]U9+ow87MhB,c&$~hv\%8>CVH܆8}kcuH,c$2'+OJtq4 HH %`g'$C5ox"ɹ$/|O(V++{J .1 'Ӝ yt-E%12Q`+~ZڙhI FX1PsۜgUd>g. DO+3q6GN<׾R9$aU$1@8z¾XhyȢx da2=. w/$J%.]UC(;`zneT)3y.'nry<_ -)%O,+nW*񏖄نW=mr}6|Ӟˢ8=30qA=P\n8SJ}юzZyqTc=ITRm# |꧎}zcŽFrsAk.o\{Z2:|`_BCq߾3JF{gR$A9<ߏ_¢1v8֊[ #*՛(Qyc=89Q<Nn'"|vx֫\Lx$uFqc8Ch 9 'On@T\,9(}O|ztmpEw2O#cpzOSC$sz}>=UbJܛO^JyA?,S=8'WhlORx)&R!1'?RpAۧ@V#Hr>q={RbzdgM8# 1{wj6c;s`օo\x#|qCbprNzy&y' GO\ /yU+ӒֽJ'>,2nbI1 c#yC yTqs$8PF g=F楍r~wvRɂBBƔu)b=Ns߱ՙBpHpp@eM\>ORW3`,8=;sҥ8\gX9g$TYo%GUv)^ĞcOrR4R[i..:j9J(sܓO\4/G`.I!0 *vg{\57L2K qqepyVjd29;/ܸpF=Mgɩa},0QpI$ y.0 ߠkAIu0m B8gݜUcsZ1*Ytgckb|].I!ޠg3 9T!.C/ɾ5}R돻np;U/r9 ` SHcv;`*7§f ' w+k ,[s}N b+9N~,b)ݸ0o"#)hʩ~2.~`{w89KDv7h8]pr?:+ suYYTAp[<}RԪo%7qf]dl!f ýoYZrW'L~bk%a75uy!yGֵUyz>ԗ3~Ї,%P8$~xA0suo5=c UN#9vun:CW8/!=LUw@ Ʃ"X䟛>l}pN18<֪ Oӌy=?vwNpI Ж&/=Jsێm~du+OGV 65nqss zqG<t G =ޜn99<x9WE󰻒(uU~lLz 83cFG͜SC Ǐn't?yG#U=@@@s09}GRC1~\%NX{Tqmyynz~$Vy8ރP6VHUw8>na1ޒ@#\<+vXde~q$r{TU+y.]v}jAb's5409G#<_ZqǦXdu1ZoIܮX`*x9OlJUHbqf+E"e L+IdL4k 埘ڬ%bґ$c+s U}_Oo@]YYsl 5Axm=_#Ub@,e8?\$K L@p rx-`2W-ĂYqŒЎ@(pãnp0;TFF*: 3H*{L= PWq ``m lV #ld>z qցv4сn p9 I q^[bq,XULs0=מq'뚯ːw܁ԑTSs'0r2pH^xnʤ*ȥ!=t'$`b3+ 'rs!3Ԩ%Y A$z1,$A 7dn++5 Yp8?9.8>0+ ̴ }99PrzZxNzs)68?g*r8>ǷJȡsP8'hq楱cI .ry?_Ke`G\za^?˜FrA99kn !/0>=G ke!#+{p1ճM#'-n$Qрqܮq׷qz'VW% HW=S 1'2@SБdж|!$ۻԃָ+Fc2H&KC- ofYF(<{g8( %~Lx;sY4kp~mܷ>`dF{9㎸8)]}fÂz$ڻ؅Z<۰>>[rЁN QG=s{u"E#8g#R!-}Wp3?U 9 n֟bb-NAo֙m !y|8v9}~Б 8(f ۏl"1# p}浉$R pr;$sҝpI+x~%KCdPrx$}{UT>vTq*9J*Z <vc;=~UGrJo! p8sY&uփ;x*rNn:bKPHUV >\,}+ vtzV.,|?νHO~zx ҲG[gZ>zgW؄O9Jnx33ʓ@r?,ڜGvXd:s*L* 0@#_~$W=9\ q=sTIc֦I_\~αh0 }SGoc9 ,*qå^D޸l"C9U}s8{{tczcH098zztRm9hLH#ޛ'i44מ>犕G'> #?*=?_Ng"u:#ՕQsr?>c&Oӟoa*]ӏ͡=?QۮzJqXa_N}Rmq gA鎤v tL' oJMy Qlrxm=}89WhJ=s~9 8xb>RboO ֦csן֯]}9ǹ?C_ZxpGVmsy8\|V'D䅶y,|猨x5 .#d'z# F'A_S8KeW;vv#p^C5(F6ҡ#!>WSWj*;_' _\wۖ4މ2N##@ QWkà&lp:= qFiq۞3_o[!rn2HQn8s:`UF#dO>KSvQ-qSe m8/ eQ 8<ヒҺd0[N98bq6JQ92}{XSg8rǏU[RY* 1߮8Qՙq<G#qZж.\$/\/OƗQ=#Iv/XvFyn![G1*m YA;Nq}T|Tsݼ~lNNA^*n09q!@rqy[:]SqEA2NXĽJ[ hm\yh F*YI[xv*zR޳?ȗQ/F/!wI#Jvr+9.98dbO::&%{&u_} >3@"Q nE`9,{?}6`z9#8Z™x/O`GzV`.r ?z{K==z䊈mgpqv,ep022_BNr? g;{i2#9y F;xn4BzF11㊗n28 HvJN~cGgۏo @wn`pO@p{s ,}= >^J\I$=cqJ!d8[3.A*1}hMkcsܞMtܓ#9G'rWٳ f>r-g-קk4= OP=#\9l~}ώ1q~n}iG9:Y5DOO^s p?"s&z>gOcv#pA <3Sw=PKjwGcx='d{`q)}:t=8Ix ~g$ɩQqӜnz`Rz{ROL3>#DGj:g?G-G??jCYȴ7ÒO5=JC?A"?81JLh=\P7co]"QOLvGQ 䞼z@k)\N;AU]pxr8Vr:Nx99}#g%ʒ3c3Yr1؞ :ҋזt0nd'+pÜXR'bE+~=zz 8'=AryUo_K"y!1#ΕGԀ@aűyڵoOĈѳg9PǶ>ccYAbNIqlq0<ۊm rNs4 ^b @!nisdWyaA8Ns3^: uciW.4`JI̠wcݏWrIS@ 9=:RF66nh#hnq:z։cT/9*?l #~q$u$,FUic B~UOb!9ns$} Ә7lAN<=dnSs!$B/\;Hxd^2T*6F6 }NElK7bWl4T T}D}hȈ( \ӓ])\.Tg%7: pzt7Ub8ܽOsQ1 ŀr=@q w8 68R[ "y F>UzsVXBc9@vn/1 vdlOsN6_ٓDom9* $xc'$ח`dm3h~o%qCc @eb {8v`2pFwP٭N:_[WZkLmiYU_.I$gSH8x><̫qKt^0LC M9b R0Rs!FO$lZ]":l8z!w .ĄJ;q\+ULx# Nqlx;:cKKgo.7G HY  #8&&,N6vB9rOrΪMJ+G OnX8`Q@1H*rAϨ}#Wha.{c+:)e5Ddo9ņX0fyZ-A;䞸r'hdm?C2nO5o4tkuUH9u+y:QN׿elt< dAMϸ qsC=1>A8#S'TjRA@x4݃}u v:GR8:qa6u*yH.<9?Qxl<ZsMx!^Tzzqڟ>!L8p<ǭRrdgtx;?Şjar#ۜ ivqsU.R2鍬I's;`zrI 9Wds֐^pNq:]_6.Q6gӞи<1ׁ׀hR9I6:ݞȣ8#695/m\ j#+o>^EU ' ^jB8ɴ<9ZݡNH,_Ktk=y~:du'qFdqO^THy =yӰ#N;& 8n`s52,N7\qHA\UQ  O b+pqiRzio$߭[=wW' G#x:uS 9S%Ld A1 '֚@={dԏqjpUoÂzyT|Dci pg|g{XǠ^U9oo_f W p aT/=rʻccmpXRt ~zFܲYVazN'˿ 98]d_k\{N>w;1ר&<,I0 [ nsֈ"a#waHlgC qVQݛ p~J]H$84H 3 W w^r2J$Tv1dTHr N q~2śfSAHNq5] ZQS(8rNA7=B7 #$Wno=88;wLR#dd`Iی>ǜЌgc8z?Ab_pxapcFتNwo=p=1ڬ 3;"x#}ۇ1#9HШV /fsR{"[#i%@UB(cs<ִ,3( [~2ATf)F @ Oc뎕 YK#ÞIr3E$Sԫ(RH$ĞsN0%f4Mъ~/ސ #*agYKc[ 7 `|:bB$IP3|ݿ\~AON P)=sMlWk78l0@Kuj |QQǸ*2#g`6)gT.l!pBH$V H3(\5L1Oʹ%Nq6n9[*N@Ͻ "Tl=9 Ϧygw9%W?),I9#>k)k۲H IF%>_(ve*Os[w^SH;Ny`HN9[' r kcc$30[ߞKC68q}FCc|ۉ;~l#66QۂXm@Vە}_^Ndw0 IF݌e9\iY$ @y Wsyv3#PNߙ]r=pyD=M9r1<=Ҟ}Tk$7[z(`+pwaOK[q/ЌsNQYׇ[>\r?-ĞN}N(={ t?N})u3N>wtx*@! 2{m$85"#w%Gl:4.e7Rqol=~з2l G!QriH"YI}Gz#sZSд>qVY>ܴt# u֨u H.Bz@y+sRCcn0`j/:Z:s Wt3ǰp|zUv8^ rzls T?s=+.#Vs=+Ka1ϡ`v9vw.9# :lZS=8ҹj+ѽo 9#Ԍ018-@1º{VspÌWYY|K՞O]tާ8 府38^z88w<= sqp`~h88\}UMv78$FhVFPڶ.Fzˏx53DIQ r~׽qKs;GXd3'+>P 7gӇĽBzA y2F:g]`3t=zqZW>?+՗9P_1QHg^]+M9$,NN8E*BB^0BV8}E's)C0`~\/lv' \.L1rBv+9%H#$7a5M48Ü.Hڙ_:@&bsvA'Vo0cFe x96mLJF ̌R Opx*)gT\V8r9$s֨F?0W89ׯZHH< aY`qf&3ݖ?'1V=zzwGfڹ3g'O*I<; ڜv>M [6Ny8pUߚ۱+Khx^B p{y$q龝ʖMy6q >F@h%}Wi|ǣn`0TUBGjK Am08 z*(b#yyݎ@ϽI=YJm*YU~23{)T2]70ÌP4dIsc/U o\7Fzr7<Phr9,B''=z{˂RRĶJcocu4 pa 1c:yh'$.G'(0YI.;~8',1uʮuiwcfst#j\msdk-NSŋ R$vv 2B/0P!$rWp?#-p`l8?/c RN?:wcnJ+\f<  q'״ikyiFq!;s^.)hߙ]+c {rQz󻞃zuHw9$zoTTؒU t}?>ulMg$~U]wz"lN7#zN3Mi<9>)00qܟLC1 s۾`2n1~+ ̃`r>l8될8㜁^^yٌK6|J2b;[rx%Gk髤~E@ hHqq`Ϡ3oBR9x?8=N8(>\)oyQZk`@z\7Rms~@{f.H$rI^A'7me-0ЃtX.\8#0*)2v8?7n(u9Srr? s8;zg+09{#À zNi~R0np~br]x=o\$ Nz~5 j\dv~^rǧv^dž I窻TLq'sq^`)ݜ~]+鞮Zlܣ =޷ퟩ v%3[z>onӒ08qq=8@91? qv5#B:RC #9ySuQ"^' >eP:qZ,t9i \*+YB%#폺=E\Uxc+ΜgEN?)SӸMSqj.=;マ?Jw:KcH\}:CM?GqBav^*=n.;vչp9v*A8'J z|Jm!_xsԏǽrE%<@3)RrkOCR3ݯH O׭2V!]*AEu5η*Ȧ3ۼlpFr\89SA228ֱl9l #9FH~>xyܛ6ebOP7yc<Ȧfy3GΥ#$7pO"6]; Jlc%u4] y7!p"Hz,11r(GQz?.q9ZQ錂8g56- r90nIg) Sv$p2Aմt>bK ܜw8~rTrry}نȋЂXW:C@Qi~G{q<Nh2;~箦~n:co_$`d>䉻0?(=;x`ԎģS#?Iz㎇U۾ӧf}NϡNp1(?\ 29ڥ T!sHNsӃ׮?U0=x> x9}{~'|c`i>8:~^'^yTw0:g?JCӦqy ԲC֤=:{S ~#?h`;TXׂO< "RSr3H*z䞝34zu>GN; t1^:a:㜞7=:CjX?^5{uZHa?Slq )g>P0$ZF*N0Ny ;sלt掘2{@Aד{'OzGLHNH sy+ wOOĤS=yA1#4z`{^Ӈ! r9IC4FOQ^Gk&k}$=?S9#ns'?Z7Dg'Ӿ 8Z/N8sۧ2Ӏ$b@z#48"z @ӸFHsq?GcDc}9gq׎2{~rO=~g<#M&LLsja׌KC2gzq2{+QH}; GNz dU=?rzVqC18>m1'nNyڞ:>:M8wǠ՘< G8'5NycĻzzO#L-H۸Aar ۮkFH_Cr1{czr=[Iu&l$K 6%'|?\d mWA͞lgVѴD*lMxk*p iߟ|#_h(ڋ/pAM?OhݥoB=SQ#F} [[6A3+x ]27`%C 2@#^֢G` p,H |x9y-9- '#9+܂3fk! om,N :T5Ƶ2@ۂ\>^MoXe%\#1翶k(سtTr _8Ipw76 )m,N:Ҵ&%&Rġ8npҙ3mS$>֎吕#dw12IcިR8NN9\?Tv=8#42c[2{m1R298P[<3*:vI῭T|o;p}mǎ cW [}3ʭ*=cp:t9J7m7X)) N:U.u8*<rXhRrAPXp9a)7m`x#Du)`z`~ Ou?.xs(=#\楁7!1FN2}Fy =6yY6 R('1\f4A.#)rpWKP-#2 rrrAd\UeqNbHtɑg;'8,g쨇v/Nyt^%3/[F [9Xn\V`m&_fEϚLYcbYFON(iI8mCu6dn:t'< qOlXm@6s޴\"[M12L`Hд`2TN*UX/(ygO!*ٌ|Ic WI (*&{'T#qlGFUǥw~Ԯ-nclmd[ȈHeT\0n+Ux=ihZMhR@cđXdzdrzTY"Ҁ<{ 6;~5i]z~Fn ncV \2wKQ8!z_/VS"O{Kj;ӫ>u8OxW=+nޓ?\ERd4<~=€9 7;T,sx >i7v 33c?{AN7{G'NBq=ʰ8#@\L\p:sU} Ҙ>#G֭HvfA'q'uc|°˜8qͣp88LzUsy=3=1L(qN1sM )%C8xvsЏ_syy8 Mq}I gc֔'z'TbA܂x'nF3rgR,{6AM(:O>qXn :ӊߞi3<'x?n㜌ۂy \ 9NxϿޟԜF/o@U) _-I vIqZLuG,`tWD5b!9=qNAlposGz=q&@'=:L<s?ޒ nx׈1FIǨڤ$`AA'$sIb*qcymˏ7PsP\#~|$&&;b8Ai<*Lɉ!݂ ㌑TݒG󓞜:搀r<)۽<>0lpA$>R_SP"\/(TUyrFЛdi [qIC S07œ.r{t2/P.3q$W{ Tx#vaۜ  #Ob3td1隦37* A*r0?0rZ!-KQ!܌1]I[pl Sdp[猨Ҧ] *B.FTŒ2tnƵ8|XRl|^8kLVP@PA@=<bP͖b0 Xv9?[t7?2dpp gʙ3 g.gͷ$cR>[uE24ytgg@~Hr3;W>%O:(8o G.,h1G9z 89;xퟥ|'K՞?#@/q9Oqzg򮫒mӽ8GO `+玸40:r{ϧ឴_žO9caI`}_ozg$ҥ2Abrx}{7c$ Olը#{zRwq*K ;x⹧Kr-,1>_ƭS1985(ٻ. I#'i#=8RLDϯ^90?,Wx ^#? C-X~*/-N:z2cVJ~9˕R+| fq2nU[ܒ9swxaаPl9ǹ4z#m-,QHmXc!*y`zנ^coJ)R]ݰ5"c!ۦ4-%Uy 3#*}r>T`@>h.X*RIaO^;@| qqE'^O=Pl`HN>UX{uJ ["tPe/I&x B΄wTCd{bG,Ƨr՘"a߁p~gؕ @: qOuw&YTIʐtmxwЏ ȹ}g OVoOJ P5^gaef8`9)dcO@O^b=UNH20 z*bFNa=9年6!|ԙy$zVы O<;fžy$<з2 `ps#FK aJ>Oa x 2s`pI r䯙]dN;7 qW=qHdzr>n2 N1Rnr3{=9Jpg9|o,09=zeNyJ x w9=p3jʌzsx=W}y#K gq Czv\ 瑑x148.O1*lgg׿O6hxCߜ 14qt9 Z_R 8 +> JH F7*zĎ9t`^:8jpjOW$ 5ˆ*0'/A$9wpjor,:6CaInQ݂)sɫPn|*IU 6q~ݻ1Y" `g>4Q/2Pxfnm!gUd,In]wd(`ֻbP79`nYv:̬NsSs6veʲ0@r1+j(0T0 OqzPPyA Z`v1 ?0޿JlXHoeH=:I78f 8Sp:U& 47t1 *nMM GVUvmq~&0ɱO#T%}̻ȭs9T_PJ# hW z U+&iB6_1E]*mv Ba-1ЀV?WAP_vTgi] &LnU@N YjͣW9-N`#s (frqӥy]煉 8xR֣gIZ:+c.8F!|#,Wi^GcH+xg$+pxU8ڠ$rc}k7f r#W=sf+N( =I^p2+2y#̴'+0+^8ʲo䃴JѷT-[~y- ;+fe(Y®`)#Gnp;+ɯ~&qӜgs0;UM, ;c}?oSއ½>(aF9TzdfeYC#oF)_e+0q995u WBeg4I;r8`V;x=:y'w' /'Z Bu r FL=z4+;s㧭aXUy !  r9nPy%~^2;Pި?#}?xïJ[s69 PgJ2W܀UVl8Që0s 1;p>s9SPi 1-W8+AW_`#*%Fr{{1sSp: ]mG# ʬF}zpf2@ 9RNjkTm$:^p&B#<Ҥ#'b P`x>>P08ƚ6*3} Cg^Ab 2pNAi m Xےy'W G`X˱yϯJ`bx !۷|rA uV?m,Is5/sDZ{3I pSJ?w䁏A ,j  a{.x2js(`:)_ÂCM;0UWvNzds] M>eQcInHbrܓOˁ?\հ;I[YGlJFŴݞ8;@㏡e%pJ)n?w_ 6+4{vv0~x'/{lyg%@یǯySƦ]~4|?ϭyGm~8lzs342rr{Ͻ0aI~E>aiq<O~>ݿLqHE՘X6񞇎'>''99^ǵJjd$Ҭ^H~*%㎇sVU=sۃҰ;2Ddrx<^:ce$rTvAFYA;Fs2j 5v"9frpUqѝ=΀AH sl78GgғzBTm?&@0'sqVd 9ss}qA]u'̎8(y\ǩ ϧJ!P~ `9{ơ!]xO\px@P<<írIKow`1qS5 Do@S I=Ƹk fGNp:1f'qqVvϩ"0F-[YS^mG J|Q yyfVbrU f֦|FA] wdN:ssw yZ#Z烃`{ 69.TQ5t;K$;v$'pOxn7\n198UjQG՘7Gʃclfb$$s=zל]#`#'aۓQ MwoCQ(H|ݒsdK#cݯ$dN+͛=8"X2p( sʑҥǠm0Nk]N ;`/$14c3d޶7"$16$ :NIlEWBąw@Kp3TRd \"%T %XGjH=8s0H=l@@*9S~2=續)9#{c;{fMu8_'I<=}i׌$sz5VB+7mr g#.o~##=scp1(})?tr3^GJY], E'h c- |*UFr$v5koQ4j*;Q+;棂Tʃ=zzTAoc 'h1H~^w,fEЗ Nw8Fp9M 1!$F9$|xc<?.Ҿ=>)?}r Ot㯮EJQ+pI` $uץ.J'ygg'v1ӨBy$mn1R}&5e ;\gש:U>pÞNv8^uC4,è]<̮|;8ֳ:āp͵ygL5Hș)8$P8QC85o8z]nuAz !≣PJvbX|;,Ya@BHs_νCIq^uUЖ:\sL2OVdfz<;w<Qs`s>}x88ϵ0?_۩9qR1s؎8=iH#A֨e y@դ}3)= KR;G>q#8ּmttBN߆02yյNzQRbmQsSbLx\{g3?{v:Rޤ{wTW݀'N_jKrʎ?ϯst<`pjpAϭq Tqq{U)08L?ZE# p 0H݂jP\{q޳{-z [9@#85f S$~8#ǭCsԅiCs#ހ[>Z\ӎG==;b{Nzzw4+?.Ÿ@GL4$~@/ǏC@J듓 o_N3dֿy#9Ǡ${r=i=B}}=Gui;sS!pqAG^:w*X$~^ o*.R!{}#1[=w3).|ҡv*p2zd\4Uv"\2A,O?^gU9_FT[n7;1{ԽM c9es֢8G|8GZcn1v8+z~.rAbˌ:sDAE+Fe1dvЋ (;qc8ihncny ʜg 9ZxJ?#^ŏ\K'li?6;8 Q۽Pa#'$D.CF:jȹcMB4ygȞݤt3aqҦTvWv';)w#O$S,w*ARFWQ\F`;T?{QG"VlW掙LRQ\}Qtj'k%dm 4i4 qt$2Oһ +Wn-A;A(ꨠ):MhѤ`v4{ 8rqpÞ88K[" Ka |ïlWǡ"D 4 "|&6q< <=|vov}ST zwǦ=hc_J@vhߡy=ǁds`=qÌ1z{o<÷1٫=9ϧ>1AM;>\sϯNI<:t>m>aaHc?c?P.9댎iӦϯ\߂  s֓hLBtqЃr}Kx=Nhi JA@\~\7@}Vq ~ԟyy>ܵ nsF?:~Ӟlc\~ԷG3t@OpZ|°҇qgtg=A=UW oO 8ǯ=RBm 8wǦ{i9j+m0y'G> :ԂIcѲ8n{{V{G׃9<;ޜɔJC)8qw9{8m8qn󛭙ق1KmnlKUl R|h,fLq |2 㞹a'?(P@צ3in7'hQG=z8Y%*vO>›v2nqF~Fzz֕UTq)nI=~(_pIF,7' I~?XR 13c52(j)FxP(?F#wy8)ntU|,(%F6:cpevO6:G'j!mIRN ;H#Niv g v_zZԒ,1RF\&_o>)NzVP"łTXϩ !%OPc)W]ɜc8sn#;B Srpxf,FwOFG̬1O5Ԟ;aÌPUTׁ4?h1_U~V\&+r:#}sC`W8cԞ9Wߛg/u88s48Idvw$~(ӿH_Q )XWѺӐG(pG@=J6s8=i^`3F[%F `u0\ /1Zqӟ(^3R)۰rɤ <9㚲wx\Y3έ0fVeO|HZ q\-?RtJ~jZe;wK#x۠ILh3^qx`/E2 0qӚ<yizG!6ц`\;T1qWV˂9 s~C};Hqzq e zHk19%@nzљ~2]˨'ܖi#%b>d_8$=x" b0'$gZXѴ0$I#F, T3) eV| @$=Vc%G` Q]~_7 Cu:.HS15;nqQO ;G1E ̠)8fŀ޵`3j'.VAIQڇӰ-X ya;ΠQ5ج_2*,6ۑAk ~&];s.:p?z2}|cGJZQiN@V9_ Lq,x$S^nE-S>d2G`1c-mxqn@sߧ'q˽ї!1$9{m;sзh[1o+F@q>wi{#< I4a҆QT #Bv_!\z$`8ƥ7P8w*K'\OZ/<èn*/&ێ:\ ~>8qz VM; "LrS $ [ %LCvH0r9#ڥ0x89)3 99T $H?ΝאL\ϯMŸ(#b2v1g|8ֱ& ݶE90qYNɶRrZ 800#5M.X46mT(ȫ}IjܪqmS$dqץQ7z+>W拒%\BK*+؝^Ap@#ǸKQrls2zzv̥e#$n7g$9ZfO:6(vb5W`_zo~b:!]s:Us`qFNTG^ryhҷP$c$pzF_!8 rΌ#9+t Uezufe( N<|ղf;zB@o0nzq9>}+,d(Udt0^N~(lZK%nWy\ ێƴa]*TjX`,H_s\Cg^l QnX1r sI0rN?ԃZ=폕 d$_Pzu流s]Ǯ #i J{wcl" Qc-z{p4r{LQ7 LPz[8#Ԟ~ ˂NprzN1?}S~+sirї{?eQi``>z6v 9_bzbt~ǹvf'#9!sjzp*+3_w?Ϡ\laܕU,#/$tj±e2/Nrx=sRlʰ`UN1co~{ V`Sw};`TDD]2@8ߕ'I۽XA`H0zdzt lL` 3p3rI>щNz?`R2 8di)T8f/ݾ_AS8 ,̔`( 8#nv m휀H$|qU{}z|FH#q'ʮ ogpO ) 7tHI*x>'r  h82|:>] ({sG&Ъ!\|~:n 6429]lx.;޵TcZ9YH_l@wכ^I%ݼdi'!@֤lʡKrëz30V*9F1ӷ)RO0(;?:lUp lo{';^?6G@O9NyW3԰G<M1c$gI=9+z,TO?ZjAatsTx;ˏB?)ѹ'_Ɯ$ܞ4__Pi=A{Ӯ8ޟ6V:p?ROxczW5WqDSi}zv㜜~ߙ30NyxӁ=8?Yu=Z?9<# {9=1#8)H gP;r@~Ґ <Ko\$ L=c(p1#@X89=Ζ#8zri ĕ،p9uG IϾ+':VմMi6W} AZ{RA u]G5NUAƚM})9k>m z<&;8{װՏ;}yn:H$Hj2N:1;~g&55 rl$NޕL$nor5Rܘ-,Y@UⴕQUY,32z3fՕbx.FZAt#؜P_2Js\{2!'*dݏQH8\* %]$O@ B ={'6<\=@3#uv d*fV'ׯCI=I; >Q#%K9Iٔ(l y=y_Ch3. ! n aGMBbx :q*Kd<'8x51:sߊ^}0^x0uI@qߧNB}?ƣloîOFs>{NÁx?Jln3rG c ٘ao*m}>_E7h\$tHF#l`sּ\NgBWHNT)zbF3ۦqqW+:;=SOLG+ОG}ϯj~ߠ܏g}JG3E=yQTIibn0{ ts+L.,JxTʀqqUV?S+B®{F8r*pw9$\ӝc{=?*?ϥ֤O<M/1ӿ`;`Xp1=zG<<ޓe ǽO@s=q:?}9ӎ80'\{xi0.~a{H͖T {!v=7S_RӐ=OҌ=r}z}n3 cS=t1c?޼@~}h9L :Ϸ~sT"Lzu=)z|=JOׯ<P <#G:s98o #ҫr2h.d'.HIܸQGN%ԥ9jZ  =9/,pV9UP1 x=kֽ< J}d̘=qeo#q ?;Q;q۲ 䎘1osnyA3:ߑ6L'Aӑ\ W'II1W}#Ωn=@p;/1]M`qۏζL+ rs>^pHcJ+n5[  cw2Wx:3 7.7Q5:?sמ?I.rW$:4eHc>>1C!=q鑖#LN}) ̤7܌)`8=we-yJn]ʛT9<` Ӷ~RpzrǮ28ocӓpvB-5McCI  9a玵S竨]<}@H$ 12ztЀl1 ccPet"u䍠늖<er2` Aǽ4Jc\l8 7u4nXWKbmb2 }MuLq)C圠'z-F]Y rX^'<+7uaO< ن;@aV#?2 & s>uKmUs'DKM FIbÅX0yzs"m#T,waO8$q+ NR fퟯ<֓HRj\Of2Pi #O(H\rN1Y#n!rx%}xQϥ6Q2+p8ZC ''?`9昣>' 8Vٷ†)dLU0dNW10@yOzY,sN2=Yi#随zw*dC {j&``+&Vf %!? p?@/<%!I)N@>mE-ԏ(w%Ig}+4>N@͏;uFM1@0( ̍@WӥsG8I/ 0$N&VQ~#9F|`CyH_p 5Wnp$P81ɳxלs6C;YyH܌]T(#jټ H=ץY-Jv%@=hGMn2g$I10 x.x9O|Qq9Ӷ||CXC?*;mb 9aUcO(9X`0sMȍoȱg[֚4Fu?8܅aw9ZuZKF1eCn9ہ=YͭT/[_~:vgGx#S e'|4k `rk7rEXۤBSvS$d^UE'Oѷkvz4VCrvFC(C篧{wE$=_)Sqo>+m]E G=2Wԓcڛ9W'Ocù:qINOQߟ׮Lt>~XO~{ПpR9)y=F\Ά0'8JjOOqM>pӷ<`{N'Ԥ4q=Hh]P 8=q~ߏg\djp38v zwE1Ki`{yN}&t'8Qyר#=s拀?z>}G>nc;;UEj؜aRt~<~=E8tJn9 *2zyr98?Q]|&q}@?: ucGQ, @rTdrq}P2 OL(ק1Zbh8Nßazҿ!xs`u<TgVx=>mo]E8g=iǮ= '`}z?t{~{Jb&y'"h1<䟧5]pjK] o=>Vh=tϱR Xa9k"mI\dK<OL8f$cҾvԥ0FN#dWG.; WOc8yT[!;p6xWQ˩#ma8 cۭRlnz{C]C*O:ZR$7 rpz:ҫD9# y\nQV`TP c-ۯCH: 1kA OwLeng4Coq@%s#=I;T8 ,!Nc}H< {t#8SrF{sMuRDlpm`Csq٫ bI!|zƓ).1$6V2 ;S ݈0'M )YO1,=8r#cB23:Xo_ߐxrjA0oc^zm(2@y.rמG=ke8*Y6.@S`f1͝5zêiwgɅwB翠Cjx7txo%Է'1~vf*#Ov^NNZK6=G&`8sJ` r9O9(Gc~j[`H׾Fy8$) 9w7N^y?J߾9cv^><y;E$d8([[ p39M^I20Hlpx<䞕Z(#Z$rpiqdۜ`}OZGuS܏~;YDĆ&g~ ׎ rF0r\zcXE$>rW'h1 tyAy6rHegr!kۡ1=N,ero0$Sc`X[FXvSۗTCY~eKH@?u.<+j@oV.cP%r98zlvzL[ Jdp8=I{Ur@rXּ{t=\%_zh|>:58aS޵iٽ:zIqϮFʟA,sq9+J> ^rIʌt݅GҥÚN nUJv9~I`[ߧ8LN*tb:=(TʤÞҕAn[ 8##cu}S'd8ߑ{V g 򾾧d 'H8]LO}i)n+(Gʫ;Ǯ)쇸C~X=Yj;l(A}1󊍇ҹ˛Oɞt84H*Jg7A*;OIqs?ӭ}& nO`9[j60 Kd! 2@s9e 4AI;~@ =+!%$x)K}Nob!Q b:^zq֜ui@,].ݤ6@rS98[FVL ٔծw:xʒs߮:tڤU1+sn R( ]VE8  p@$b+12ߴ'{S#@#v|^q9Y!s9eޢcQe+#Y` tHrsV ,2**nl0Aߒh9_bu//$a| <=)FUPnvױ8i%o!8BBp6nٞGZ*9Ao9`"`P+x\l))=0xKІ87/1ʞq< 35'H2P8rz7>76+ d9+"uTœ)>z/95#[Oe~}[v`j.v NyL(er؞?13D.*y2/AgNС~W 9ZL#tq3d}ȻC˃Y|p`mMJ[}oB(-zֲ.7Wj!Vu8*otQظp orml¥ 18QͤuVhۑ#7<}>p PI;$:1o|u?q/3B$>gqGQ+z[ Y8{b~Z[RYXDP8 8=5y^ b+TJPyw<׏,*(JTU+arqL,ö<xW GaH\V#?)Cm1G@eہ“~Q@`OBSWA>g9%]~l<:8?CV"`x۴&WHv4xێ02NN[#j͒A8Ge^}p:sYKE ܒ˗- Ӛ=Idrr~e <}jIN~e|pI  ~8UbT~fl0;x~cd9< 9z`NFaIT#h-@6U r0A;@=] po1ehV IߊȂ TiUwnS:gFsRT8U׌@ZLNA'k/IC>iGoOgiζ ~Fpz^۠^©Wבԭ=GZ>S?δJ==s_+='% 7 wN?.GScEn0=/oJN;GEh,W =Fs^N9=qh?ƟׯlQXS׃~0=)AT?C>_5SQ%^1y'KpqLdVv, OJ_4==*^ <Ix@c_ʇ8g~b{R8@@%B{';g<4HA/|s}#JIܞX?ǚJr#kt f9P59G$cr.F>m Owq3WkW;2G#ބ6@5e':mh/GB8@5"CF#㎸}=!D|%[i@*>FkϕHYO=p~=\*MtUl_eHxֲg+ᛟrzVcngNU|2 з:`5:`󸌿_99}1A?7S0pq߷ݠBF=6?|5,smI9P}~jhё֚FSSA=9$S(33vG%]ȡ/qq AbpNj:@@J 8 u`W攒ÜrX= R;X;;9cː  C#nr@<%M}zi:Qϴq%3בZz2(pp#=85( G|LzoXٕ@=$1UfRWOJ؈Pĕ j`,@=\l<r:{g}Pz P$.RP1 sWJŷ/鎦+˥Z3VާvEU?.I^}Gz} E*m+kɯ z8yZH{I|S!Z o\{WQZM%xAþq.2*8^FGqF*+uo|y ϦxGL%;8辿8<AsGa l'ލ'߶ <}3$nsׯZs<1v8 ǚʣ;?cӏƘ[=xgDeh\$dHщMb#7Cz]o0bxrήX`Nrq󙘴~\ry>m|2\~[t61 ˌq]6ls Q]Z*;#98\8 }$*$5MJ9(yfI;k2U3 2{trOZ2EбSGO^{ϥH\ `{cYX}b̀Cҷ ߍF'>({,3:gQ֛$C GBVd;ۆ\JI3Sw29lܩ Nӧ*B0Xr{cP&mHیHՈ:+UXclk}\>W4 xg;T*@>X?` 0*T4KW#ߵYXH=x<6}Sr{Ҫswjn㎝{\cuI|ҽAp= ^ ɦtzߗ>=~~PAcz#*;gQϯa4(o==H=3ysqϱr9bsTsO$u#6N?1ǯԹ9۞ʡc:~oUJs硥=!zzg/O_gGR5ug杜 tמ\Vzp8qJp‹6?ӏ\{vJq?UIH94w=}?©;@3'߽)}F9;,9`$qgNw>kPps?]VU୼̤rbG\^QѧeWI`suu3.F0WA#ȫvN99(yGGwq׊~bwQ<?x횧y Hs 7o~{=p1#GPW ',Hs]8Y* .\8ܬ#oTcힹ&~18y7x/x蛴M\T PN8zu5cq!n1n $zzסM}F[&] )RysRyp߻$9+Y G4 öX s1  ̽F3y8&GK,RRGzD-fOFv ~h;PrY=WUo-2cOnױ-i^F9==N< Acv${t oU9TH,@sZ]l\Nv^N00swzqU.8R,>p{O5k ,=)Uۭ`ԕN3GM㞕 2w exG41&eȿxO8vF;1oA94XS˂ Ny=kQ##=rN94)܃g3݀1Any=sO۷flLy0k 0ĂJ p1}+OSZDe &q@o_RxjoH|>n8)=N)rI_q=:'/{ zۿyq  ۏo]LBz_KP 3S׃׿K==s׎xn^)x=2G1Lܜw9#zP&99? |8sG(g9_s }dzsc2;ǚqa!i= |^-N;{yڢ4p~s4Q<N)Xh$G8iאr\)|ߠ0=+&78'b1ғZ!>53C}}+5 2zR<eSמ9Z}xwN9yzwhc>ñ8nks]B{^ +u28#~5{wێOןj# 䜎^W"}$ṙwH{9z<]I0 y\A(Q+l|WvWl<=ko$!h/omc i pՏA֮ozi> He6X|҈Ȉh[:Kndx"Se #Nk +nvH=JmF&*B>vɯ,t *Y m\ة^v2y7igagYn%^49Tr29|N^ye?1;0F z%o=.[#0Td$cdہUyq:ףe=Sc,ɍ\sֺ.`݄;XrLADCsp8$4fBh~N;+hG|#NX.?֋715IDi?)2u rp ϵqIu{u={-T6';K(P`nJ ޣ9!v:|?lc$|c##FN19HgT9ꫴe~A g$zsҀ +w98Є8m#Sb<zz`chdp# $ >r>F!cwQ= [k@=m-cJtO@9$xsҭ8SÃ;1I F݄H @$qPNqi[vZMjrn@"]KsCᕱװ߭c|3Oxϯ$=PIc` юzpON*AF2oZLC_ I LrIX/  Qq[\I/\b88=kE!flygeqkB%8,I9J甚]92Kn64>fˎ%vN〥@㜜 =r)RA Wh_4 011>Ƥ{S &r[d``ݽAkM#8+丑4cݶGe OOs1:zc!9^{J#=3fиg=y(#L=~BG3([8[ڗ?F2F8#'ڭu.98 cIߟ'x<\A_Aڽ Nj>&ndm03qzbw@*\9i Oc(3p'$`\J ,K0G\dRw!7rkֆǑSves u'9q$8,A 8[.+&UwA!\rI]Pʌq$۱5яh0}z =O#̒@U*>WW 2~Rzs֐"4 @SANx3shE אǓDZ >ev9`0x*ʸ g8uBFbv(۷;={ ʒTdv00x}YipA꤀CN`[z?K)0a7c-N|֌l˃7py# YMicHi#6+ UpN`֤ݸcPqA-w++> ?]Lb[pOܟCқ 6ʮFBQ[=5>eHqMyy;po\h(LAo~G8^u=~dF3sR/8 qRwkwA+7v><@$ul!@s܀pfOO^w@mp{zSz~tSP־VGO|p@'89GH@q㸎=،1PS،n:F 'yqЃL~p2OLZ =;ZHByl=(pB,Np1FN$#'=FA? =@⣖h <orH'l,~g;knjZ-: Xcw`=k.ݕ99ul6 Wqן1!r@#h|p:UHRALP2 3^3UA9Q=G<+y8b thdgHP@riB9Y|3w–I Q Eqr*ǡy1rfq鞝*9׆3pJ89TbC7! p 0xT.c/]$ cG< Q|z{U-c}}HQXpNh$XL!+Kc':E%UE(Yy8csN[_I݄?"ma8OSWrH?2Pר<A9zdJ,Mɹ˨q6^3Z}&6;2*:=+ \ytP6@ M\9;ꯝJ;=U-bRnCpU$ 0=Hj)Q] 'Ono"@Bm={ `z]N"8r횺y2#XPX+^dqX/cA.yNKH<#y`8e9i;j.ߘu*2rsUqp1ҳb@ŔT`d~=c @8/RE8#i=H({[hnJN|})Ѵqx'<.qtzg)88==r[CߠV:ȎAᗂc#; ;#>֢!Cq9863۠'Wb2< ǯ)Q-?T#smtÙ߽ ^0I Av6pL_U+ d}kyr!1 !gxq:q^Ve$:#\_K^:{op]SyJ֋']Oҹ|OT@,T36HɒC~hD; '%v9#k=~0^FKo fՂ0vzq֘~Azeq>=r8d X`IF,Iq Uр*29FI${qDm|qv#MATF#a̸>ԡ3b#- OɁi/\F7u:>bFUW `s{Y0s0,#cq bÌ 0 $jG Q$U~[pEea 0GF~yr:H#4ė)O9=28!^09\`w<q;J'wbH(t` MI9!Kg qB(ʎvj+07lz7bB^2K#JUv&C2~29#k6Z,دYĆ #w}8<פ{$UrT<6Oz OG:=Ж5Hd5}@~r֗gSjP^By=xz8'tV)mHyLq׭FwrxOZ}D7 T^y0:> ^zxlu<z_7zcO1r~lunIZɫox=<WiNbw6Nqp8 gs]q4wzWD0iX}rccXmGj;噈VG HP} 㠯9u=ػTmr{9ҳ˄hWFm~`jR4B6r;`e,ܬO3zOqPlض Yv!n9 m=W[n  q8$B2@T̥f됤ĂA=^BU|n3̬~SC $0{t5dBR"F:dhH.O(L 9q~ރ+sר!Qcx0N-|naækpfQM>&W["ĸ`φ8⼻[3D/S堯( ;#8N^@#Xۻ r9 ۩ү[4d ifHTlL ;%C2;n=*q?{qҸ;"in7 A9ֺDv\ QzxjOd_o͌j8ۃ^ʵ. F2*M88`S^5<[SԐA!P`'8UkΤ;1dҼgҜ} , cye98Uϩ׬[;iGI둎I#|5(=O+v 8?LꂱaR6-*I8'kgh85XtwB~blvtba*^qۥ5>YG^#'o# C %@P1ҐB9րSS$:䂪U@N:*:g\9U<3RhCO syз@q ~lcfЅ' }W*[r⣁)?#6Ug#h_<Nl@98fr=k)RT'q<=y fa?$\ r{3s=wssqB=.ت r!tLU oz.EmEw-@9sנ_br0 u8P-%B YJB8z`;|b*|(;62[ձw9IuVS;IY> #<@c˝qF3ǿ`O^ j忑68F>D8,:r8Y 1m,?(+[s-mEهó N3t6H^N?Z[S I#Er^vwM&WBts]=pFIu w#95Zx` aR>E Q@ϰНn#sN cGAV 8cc0 ">=G\?<[gɧG @?P9ڴO% 9*;qTab9{dzڥMdw9Ӈ{uPlg?ҝ{Oԛsq;sǶ8e 9׀җæ{ӧ$~G;c'ljЖxqFigS`@zG'S~qwPg郌ߕy뿲'T6Ƭ298N/_Q1d䕌`1s}1cʒprF:sҲ/$|5mz${rcՆ:=JǏ=; nV/S}]yRL|dpʼc<Qv,2m'±9 W\pCPP55y/Sj.**ǂBp  gv8//nz0Zǝ'j@ј`NHhJ SXr z{^|DEHlU=zMhE=ьYqF$vw܃=yKn$\} 6eBgM8 X*ddU#6pAݜy Z3 s.5m89d>֡9#_%=?Sҙ-I%;r:qUgp1 g{R'P#xH*@8;er12 `N/ۡZƭ*e?>C0KCӛ;0 6c9ÎIbx?Ko6 dB71sӨ84=OsRs>kA##<8;px?wA`rywiňnlq=8j'Eib {VX2,N}L$w IvFJcߞe&tXʑ )/<}=*͢c|.[8glI n*U@}9}:i 2iz}=SRZz$s#I#<֚qcx jkV |S~jR#'xgH(mzv\MqzqJ9Yx:iᇩwJv=FzvКV@M8J$8w|.@lp  3Nra}szgb9>=N}~*|~j}k9CsH=J&3A*˷SK~2F),={fRsH=Oq8b#'FZ9{u=3em#9>ԝC1~Ϝ CMhmキ:O1Cnװ(6::dQ<4w?A5rs{Чky!XG1^DG|/8?~1j9}I!h3#Cz^A9Scd+ Qp>^͟9Wbn/n $άJ3=&3D7$zT3gS~U /.*@?6AG׿jO`2G;9&H==x[Q0:#'hz9'>zmU88#3<lRp>^1;pOp+il|Gtx8';G\ھ/-vxKD7UPB`˅8qrQEgy%V)5$KvȈ`:p+:&evʷ~)YK(iuOfRac9 m8TCC4 +Wq8#?OJ<].RșZG3 _1!~aӥuhmePus'6ѕ18]Gz]Wz[a"UTQ rr:q՞Y3Y0Nҹ9U4R +#I9bHJX`g$\s`Bp?(;=5[!JA9\ʏ0skq!IzznH#]hPAFS(NCcڛFϑ=>1v2Tq0P[ώfƍ1 &9t1&8=2;֝*c(&T/(0W^Ƴb8`$ c'6p}3{2'iFBs9ˑWl[`C{j+HX; C(+6 >Qs$NcH\n Ae%[=M"l$W5 lw ;n |3rFJ'ȒWYx}$bBYI@5XIÁ'^*T6e#8{O^\3{=q8'z1֘>|?ӃS{q8Zf9N(=v$9u9(=O"l?oU\Aqc/|dP~u={=i9=r}{}iuG^'z4ӃԀzcv;PϿ=y>Ӹp=Q828s})8' \ïHS0Hqרҁ_U=ǦHvzNOowb{u}N=?=3뎟Sx=?>מzr1xp}x8ӓ҄!3cӡK؞p?cGqރs?֘ 1=OZװz~ӳ&O<8`;Esz $ wwawʢ>k)d*G.:KM?yG(i\jt~.Kl (@:l8؉|b-W Cd3ʬe߃M W,Fd}zQN~onRLϠ N>l(9E9 9M~6#)ᴖ(+=YXsB(G~qU$#ocv89d~@LIT$r@ScU7̫NHݫߚH?+ ,O#AqQm#s,zQ,8$ { 휓Ԥt$8v3ϯb*YhӃ+z֦,sR.; [@̿*sdXs;"5qx |c=8$ Rx˖R=9E'iav/ 8$װb00^G|W O#'S$SB7$rAc^de>w䑐GMt=[^>񃌜RԞ0NuOr8W_jxc<`:-ӽ9_uu%ʭ{1c28PJmEmrjIP$s?2 +q?p"66A {+r'z}OˤΫgpXt'= W*yA"`Pgjm'9o 2a_&89`UF9ݰi8}œu=Jsﱭ m6C8Zq̍7aGw,EzZ8^}֧gv@ z{^&M4\a ;x,NAБ-CDYKsL;=8ׁxN/ZLUFO`8=(Qܔ$nQcfR%X*W7LSvvp6$#Tqn0U* d=Z7I'9XsJK֥,:SM!LJ#J  u96㌜G zj]D<q?gӒ3ߝWo0.ߨOHocøGl}:Oq^{~ ^l&ZH,388xb3צzp=}i'!Xq6?+'!vTy*rz0 8%i!P089 O&s$N3~]ǥe˧xnG.2u㞞N[Fr7Ts|e3 zg|D$%XѦ@3ihpـʝxkhxM;+W8`rA;ʻg`ś\Ѱٟ##9)N }xjD*nWǡ]Ld"3݋/$c9<S[TmW' B0۳=)ce礌Ǔ811KRl FYNyynqA!A{95"kQ [?/ pH,y5l0Ҍ瞵m1 p҃!}V+nFx ā(nW#F U<|9W dp21a1iGh j:- 6HʢN0I8dz.9$c$U_@|'0߁i79Qó0bC?1h4Hr>IVsdsjj3t1+lqiMs+Y;IP훹;qSLڀNUʱ2uOWq53t(Eۇ(2VG/+>b8~xiM_dqhňأ!| $q~%lO묇B>l=s8[K' `(#_m >ޒi\!r(TvcƼQHH"9%GOz|&ONpFuQs#ߟS)wrmSO^zqv2OcԯLKQv.~O zPOsӭ[2rP E4=$l?6qf6+mڨ $>0''9qolu=:Ut!I%l zsH9\ ڸ֥n4a0á ͅ<:r9F0.?\֋Erb'h۷aR{8<sj۴9G֥X+N8ӚbNP68O@=FrIs늿nn$;OneEc^wncA#*㌁bD̙ vm11@nd39 P-lc]nK2 Aۙ8# "6 HG̓^SO%6!|퍗#?0y8/5ν2s>ҡ[PKKG }:S_ WÒ@8QyZ6dSCܹc+!ؽH8Ʈ~e YS4 †;r\^KƄĂUO;}&|C F_NW G]ٲ39gwrpTg4 IԜ`}#qEq?)\`zB:,cqן44GF˞>izryO 7SpsԞ8㷭+ g?A4眂FH >;#p~ u'=OrzػN䎧#ѝ#~~ $8&+@qs[>E9'nu9x)}>L0@c}y;2r3 ^E}UB-^ݏSܓ=gHжv,\-|zWiv 2 G+ޫUc+N6洑cr|ʝ3!N:W25IUnNܖzןWfM9iϖ( s#(P1\r*yo0v8;U2=`2e{|>L6rKp=>n3"6*+eWmsKRi 3KHk¢ߓimgEGjP\y0Gh|ԫdP 9|efo#S@ wc*=z2B}wdno?|zT˸9-17Nӻl19|VSXvAkN5 `@[# ZeRE- `j1^& Pɀx〠(3Lbdeێc ʘw78 r6a'v>~8zQvv,HDAaNs@pvq  VUI=qϽX$[a "GgqۓP٪tFF w;A;*Xn8<9摚ZVQM d{kgt]#wc2Ny>Jc؏9t+󁃿?7Fy#L3*r9 c}߳+B) uZ2ό#@[ }NMLW_mܟ2))"eb~FĜ`~h":{T)!J$}p3XS7: 8?.@G\([K1B?ʙY~SKd 88\` 8#EEOsӴeOFN:v3j: ߇\==3\]z =U9+uԜ{vz >k5koۉ`=WCލhǑ]LJ{[$-<3Һm'IVP8q)9[[XZTuo+2 ~b?:Ƅ۫'+8z L#F|A*Wu=3ܲW8o IsX<̮nmS7 c22p06ſlHTKr۞KreO*]J8_R ܠ3sێN{U0[V]"<36{cxMH9^TF +ͯO[gigu'#rqֻp9^*'h+ǯq=j$CO1+iuFI.qN}y86i3@y:~5iW83 CϷnz(n+c}IPs9QzCzB1פ=Z{?R.?rb9ee S\lż#n]ιocGb>g9EBd g)Tݻpۉ<^L44,lS̀Iõv+E"@rQKg#z8X6Xlqnû9=8޷c\*bTס⳧#Jdw*^!_j!?0r;~dկZ΁.08Si%*˕7M$7im 1!f_ ,,W!$O[2$A)iJ.ˣ{yeG$ ną|1}2jb2J¯\uz{y'`:zRݫ-It߁,0TCq1yOq[yRAn+v*I'-}8ǭ"ƎaǕ#y-#h1acuȭF==v\zr)ĜrJ՗\lbE'\x GL BFs88}8-nFrsW2yJg=@#0=h3LΒ.{/rF;)̀AێA,4Օ4Des@0ϵiGq= rעT=v=qާwy~q|{q>*&Fzg~:Y$䊬u]yJ6s4ƇwYX=N3M:MǨ^znxpsd䨮NI"qvǯL,A~]J~&!S]w-v1rz}?JSl Dqcss;d`wݱ8~>rddL: >3(UN+ Z1DRVI&]ni 1ӁXcO7~glᄁH{ cWi !˒>n`;T>]uXXôrޣުkXdaB^+ϩKV~MAtn2}' :2(nA 6s9^ce',B ܎ֽ8 a;s3ZՉ~^OsqHۏG `8G&t#|,r P0窓Ay 2;|B=KůxVaG 8*Hzszz{}ڭ xJ pdn0FA~'4 &rcsU\6G^ u^x8 `)%B>~zHIÜLj;[;䁸cAURpT(8eS rOM5!Gl c|$/U}8iŏMl#aQ֛i -dR&@*vBw=64j\(vpNYe3|pzf-x=6(bNI,=Jn9X2I!C2'Ԍv5&Pl/9mˌ'bp*=)a=jʕ<N?nhirQj5@g-$f&1?R6JlAeB8y3zR-^VB4]뒟(ܬ{ב[qݽw$|ץOqOZ9́A#U_,p)/+o\q n"Xȡyݹ6eLczThhA+(=`5=̈́3yW0 劃5jEo 1Cv \OVJMIZg EVoE2H]C*oo.Ev*00h!eQz>J%}c.ae^z=rE,,͹˅RH'a1Z+a  n\ r~?CZ(hGeT *4LG~ָ@%ty¤gg5m hmg̸l)ܦ؛Kݝ?pJ9"zfK{M23'H%ҥwuXzyA]PkXƟB+<`J0Vդ̌N/L}ǎ{rxǸNG}qy[4:;vcM<O|y8OOOjC\uޘGsHB?G4i:gAFs.>'Gp1ڙx>ֈy)=O9>2sg I @Hr?.Ӱ=?ɦ{CӞF3)w89@ 88ڔ(2zsw tQ.}i==982s>$}w)S0{ҝSaIcgs={9>*>^y<~Tu: P^;;{vnz:@tGnþz)@3׷zH ng$qۧSr 㠦6OM?O׭GL#qMlϡJP8ҁuIix댓=>sBlcӆ:s߯_p 8;sG?q'z`U0 dt3ޝ׾zz=qOJIq~@9=7<L19 _F=c'Cہӌ`}X6?pW9:WNOc1!]ԅ {.X;ᵊF/CP~9RYNp00C2{W?;ʀ61M2/=k֧veg;H#h>a8u=9DJp1$8rq7ۮsxJF!I.9# ,yp˝<_$808> |u$d1t!B4NNW ͜}hF>eN ?~AG4>_?6181ÎU G,H*ϸm;|v(p1Y9d3FX߭h֟"msB42̿)?jV)$6H9j:)   u8ֺDNT\* 7*zt+)G{Dl%#\0:Y/$gy.Ys#jI=UP]*r9 pPʜe#Z'L!0d'r+.^ W SC}$m!ʮ1ӆ9=@2}ĤawצyuHC8-c׭;{SBA#cqjB1=$i#R=N1"א 9 u8=3@##=[>ޥG{dvO9?*c3>Ҥm==xB%ryֆ9s֏QFrOs' N~{jr!]-\**З|4cR6@gỮ{&w~l`+^tQ10e0ű|qGsZQ$]TF]1ǭz8mשvgkg|ҾqLGh\B9$m*`0TˎAsL B U-trWgSZ#yc䳳l]P+dH߮*].p ?~TB͌wJ8ܽg(P0q>[,C \88xSI>̙.Td9z َ~R `sTTU{0Pb@md{0pXx9?Ҽ,]ikoL-{&Ơ?~]*E8Ax=HJ׎I9q[-BIgO|TјrwcDzt'We#~֢8ly$}s~C%R)WisvWJJ۸#G3vx@t#õ&9b=Cz^4!'X 4I?)8<#8n[`p8'2ki~\N}iD3r8 @}ML2Xq9!H?} !G#9e sN$yhDfP~SL F>b[A’ywyNqz;u8-Gaۏ Qac<=s8Xf5v>nG;-cjY]9{|h[1yq$>\HNqlιBiಇ.҂N89rs\F&dDc)u-qJ'`eIǥgӹh$2==pAyHb7r71ud2ˁ͐ۏ2|`>W>i.FSJUэ Psٍdh0<滥ަ$ʸa~ w#׭^1\9đ w/$r0A瞵zvvfc:w*\/_Vv=Hm`wN'^C-:crpBf7xyiHDڌUTm%OS8Jo-q8{"ZE!SxI, o.% *]ٷ`THנkɛQW3$|?tUL8 =w9c3тBo$cmP{sR`|Pw3烞1S^I`O&#(&1Z,{pi=R3<GQc$8JpPW=3+gif8 sc?ԙ+fԎ*9ݎrO^5p?X# z:x53"1<'(=7#eJ4rX9m ܌a=~Q0+0H$DFFTP%lrlf%u19 gf`\ڰjEfrLv rC㧯 q֪0y^ua9=s#㺫;Bd`c8z7>SF`itc`{fy{#hWHH);/S+ԣ+wg=jE Vp('^i݀ ;g'ӎ(2e1Q霞=ϽqΖN\kyفzfax'W!SsӠ9zL5#z0qLt8>J=@-׏l?hC{s^H'9\ {qG>Ɯ0}1] cOsM1VLzdx#7 ;YTLr=鮟0cy3JG>ULJ?q^C9>ӽ{>i1ۥ? &q{zM(?qqz(1nr:gzi=\sߧ|uz=z4whGN{P{܎yǽ>2Gdq9џS죠U\j3H`zRNx⁊8<>t-'O 8maӎզ ss-i>ѓ5g%bzF8,mzV2-dsk#(srO^H|W#>VPe7vp=X:k̕ !#rl ~ۧʹoʄ۷{oZtS|csv'9UP ^z8/H1zNrO# `@OhdfL2= bNI䜌*9Hb ׂ̓q6Wv~$c<~8fd3S\q\isn;p1ЏDz/@O=z pWB7"m(nbxL3TjBD;M+*Gq؞WrJIPbwK!rr{55EiD[Mʐ^P(F_(_FapN@H A߯ҹ0/ ׏֜j^ToI;!vc?.O~􇆢"̊0A# g%p?ZIj]*0I\.3x8^NL}9b/нn~f>b7=9]}͊Y #VRٛCttlr@oB@;9래ތ9?i ģs֧cn2z$IӶOROa>RQ$~.}yO_""ܜԑ DOՈ玧> hMǹNzϨ@۞f Msi=|Pc8uK1۶92c?Sjm `oϵ.s'ڕc7g'R^'R?r{߃ ^8$̛zr8N>N=gj2!#܁{jcZeFЎjj#hh]8?ʺ+rxq;#W>*?~EݍF1àUŌ۽'?}!Q09L:J̀w黐?\F1cT7h8;qnwc%S_~@si?A'ӕN\s^'JKgy-Tw3%0v`͎'NS<>zz֞B}g>y]r3 dU6W% c =2ARy$aNrzt=*b9=?ZgHE:1.=}U# :WDj_s%Ō:@O~9ml`uV1{]:}Q[0x\_=l~9,rCszul|dߑ旎wd\@,0?B? W6d]#H=Bq}>n~;iѽyT պw_k_4"_{ ~}GGq\XʬmfU~D '[rcc;GZ-6[q8r ąuztծJwW}<$q20rNw9Ӣh v's9r):a^pyVsFzD;\m0Ac=8쌶N7b6q6U Ԍc\N1sӵD< d~` zJn2I> yN7e@B~-ܜ qGU նs;Ci2qd}Ҿ-T{6jpS*xK08GWb!*Iy޳ear3\*C19s =EnڃXn8?xpsqP.J#QW'׌t~B#Oc:$*eR9 K xQ3@:kpe9 sTqrF2F9=IFp8x ٷ<ֺh Đ#l` ~cKc{dƠ6z f e2@c0ãX `wrqոt l;23^֑C! <3H0yy9S ;Ӛ"JdBe,2yoŽcݼcYб۴"rL;VC&`FI$O|׆{9-KvlTE$sw"V"{V#q(Fs#dn {X.dUUQd'% zp8]8e-]B>V9 FbUB"tGs~]ͼ[ #8ae)?6 ȋ|=TV#  ݁[F̊FRヾ^x"~`98[dlpNҀvycOy30lNe5 ,w8g+-!wzznq [`W !0~L\6%{5eiU2|B-8%Ps u{wyuYpcּ:cvjXΈZ[QCy(2\a+nu-F m@O$7s=sb$N$׆wދO*=?Idmf 0Xom 1O}7Ra>zwski~<\l$OnOӅ (g'h vO$v搎o<{>ASϡ0i㑃}MH:mNh8=$ؓ?ױ瞧>㓞y=*!pӿZ>aקNxҔATldr@???\~ҟ?82=OJ{ \1N3#9 U-881zӜqArsOGS 'ϥ3ߟxHycSr8?րxzgrPW<< };__gқz;zvOP quӮ$u39Ϡ=)v=rz1}'9z<<1.L1sOrqӊ^=OFs>FS~%>AdRԑ4|c[##N#!Hʓ %=qp3w#=W9C N~Pá)y'ן@8}KW>S#`˷<'NW2;O8v*$rKvLzW;p@+%~8>%qԌGNpqz~kqO\g%s@sڮh66'׌ܗy?eP08ʷ1֡"}ɴ#=Ǟ2ФmX&ܲm*BFo^={~P& t@Q^漜^+>hF>f$d'=FEyzr&}{߯JNHd~!s z&A8'#ʅ1:waO\9Gcp8Ӻ dw錜׏PjQ<~\jܒ#_Ɣr1~}sR?!W<^~FR#?94!#Q>'%Vrzmv c$nMyƬtR3o`9K #;iPo3-V'K} #S zcThp =kW)F bP0s8#ڥYp;:4uB72+W[_U#pA!R1O=bAB$ݎè m00zc5Vml~SN 0I=Za*63i_Dqa`7 !<$MN6ѹ}x8";tP+@T)Vc+i', fyQOARA U~i ȍ!o7g**ڴM}΄ 6s\1Lai%$@c Y t(ы9d$A{Wmyzt>ug>MC)2ɱ@z0Ozg@ԂugD'ec0eF=8랂7Oqkk 3^&݃kwBcI޼le-v{x*ײlnc89לյӃ dpWb)W>TW$@yڣbc߮4bds9=y\ҔLxOnjMIZBOn>ܜcA=sFc`{'NsRc, HF(M힘FO=i!O$Ԏ8i_ર*Fz\q݀M㟯Lwޢl!#$R8=su݈l#sױq{{S g|ܱ?Oʲsp4q8lku@qR{+Dꇮ30*&F D=X1߿55q="H9lAҬs MLt#xz*m;P7=yiRQ͓zRz]ɴ|y#䓅 ?WkRe>Iںrγ>to&H# ;rkncUߪ.@5.LO疻F Fm@»߁<j/컭|6K1ǁ } O㶵+y![#L 0%`(x$bH۷~cF#o t+gڐDa瞄T1//#i ϵ3fL7!ᛒx\z'pn' 9dç:Cr}*lpsc%B׌Ӏz@*9Â@sԪT p;A:g5^Д2ۋ(x)cOJbKI0xp9.qm}*䐹3Jc&8>0͑ж9kn Lc 7 qQqG@[ wmMC CzCFXT] Jo>\>qQ-ɖ O9r$r3׊2S (͜GC5 *Wv (9ZmVBWr3C [o3#82:`zacذ#jۏ8ppzqXF۶>ÁnxA > . c#uOZg$ W#:"m{;w,͠p3#pK?1s U!Oaמrp=>⁂\'8݆p\Lq3000$t9K'$IyubBu'ԁY0\d# S\ fdhuc9 qֱ2Dv';jEG>d=@=L Arp'΄6sF{G]tJk~ f  #sEtr>bA#;OIkWh$0arOc؍9(*==UNUF$co's늗8p2Cbp;x3TÆظ;sz۹H6W=y9%Rru?JȎ%Jf!VvzctVr8^ 3S$R݌<c=T0IWxp9>4DL *N2 #h<0;u`W  i*}IJ\#m"˿ Nӹ⽓B|FB- NpxywG;O *2mHYzSAaF=G5r}]L1LNx2r=BEt z9ScO\wCSy.~E׎ s#8L~Vѡp?קޣ'xʥn%=8ߵ3ic:*9ޔr3=MRb98 å&GN>b:CZĊ23G~,d>®yٛ;w;2= ! a`>GCzJyp`=Ii[a9bsZF\ڔ 7`+#N:su.bu=H 4|wqn-gԳ ʤO\geS6AH<{*|_3k$[pzO#ڹ$ 쥲wgh-bNĈz*<<8kZqe rv@n*7sv(\ty=U3" 0P@9$Ij嵎9SP3`6ې?^{Ry?1vzs83)ぐJî~4ןnYqWNIO9GzlIjS9|`cLo OqUKC۵L\Gw?095Zrc}.k[ϰoں|( 4JǙ(y]B:1ߎ8fPbHs ( sfs!^oc5čz$^=,ҳ%x+ɳfXre,DdlS>F_݌ݐ@UQA'$rk{\j|@͘a'iN<U@F˫19Dח[sҡ áRZЏ;\6n=z:] 'pps ,&Nx,Z6w|s/sټ[ A8(qbbEbzt 9$_j >^ƽOԶܤx\doNKgCtg+t'#sgyJ ןC0^wEʜN68jHvya:A݌S+) km ByzgpG$$pG ONzl !_/͓{ӝ2\, a v#{}'w XO$1l O>ڮӃ'z]{|1eHOr(8|d:wcPmt;R[u{g}Iy5֮XBۃH #yZ#9Z!IVFp-pGB;R&w:d g3PJ0188%F\!u$@ dcb>u 8?g6p<אeZK+D8uR+ Km Hc8O4uVOS% ) H|0w7Y8Vi7pA)4a*I0L8r6Ҷב yBKPq׶xs\!"g$7| 8h̬w:⠓sd$tn@X7(H0;|ǦCwήX3O$kq2q_ ٞcO!W $x涢mˀW+Bٜ: yV;i.CZG 0TD$ao[хrI76쟮}ϯCy"gQ;t; oUn$"}<hlV,;J~ϧߘӺ$qϯ#;]Odc1Qu9sJ{P}phzbFk\ uq;e G#=>Ti3vz G-KTaV+u͸N@Pn9ڣiazw5xZ˪>sSIkѝ ;!cK|3 F}%%so]ǸX Nʷ0HJj0(Bq1wn9Mg$+ɔ~R0–&@9OsBJ- .Av˵Oa-!b!p\>"d.cܢvAX>1PrHd1=}zzV)JZ eNXŽqzsQXL }FBq¥E,I8QLzm|4RA'#21?SKӼc1W5E8g~F3H=?*AV+ ONد9|&U$ON6;}N~`{P\QI|.^=%_kF2,Py9#r}x8B =5Ԏ#j;%Nn0}w-WRutGi 8:|c }du)y =R9kakKӹZjqpx]^9?˽|ed SK^D aަݑW..#g8:?Ɛn=x=+7rq?Lu}qn?ti?NpNG vM?}iw랜U$qөNqcVb{ߏ/O~9=85B<3})?j`;>ݽjAG\m@>Rg@}J8ԁKn1FsN9ޓ$`\^AI N};g(/ 9{r9i8S8pqlҐs׎?ϊW='zQ~8(^xcߑsL\zOaҗj!=HҐ'?4q!|~'ؠ "8e/cz־reJ= qcҷW6g6O3-\!Uw3~~JA$s*,v$G,dF#Wu~Oޑq’~@å@Wr {f-،qֽ5s־ƙ'-bb'ј¹$ }E}_$i>|w> Pǖ 0 ܩ;P@u!rK>hje<#8ⴣO t$ָ:3 :gUexp埔~GcAo r=1q:t2~3`᳁] B0OL {/^12F9`KdqORGBq^F6 #*OL/@.}Emqq|7 e3텩2G\} ZIB˔(0Mč;g' =몊$0ď%ճ0$cwb t˵Y#pfO;8rpN@烞9;\"l $#r>Hݻp x>FըUtl`0$`qKq@ #f% 0oғ4 Qp0!f!wpZn zL T8V^ӚY2Ʊ$XWL8WZLaA $à #nMqݱ]cP$S`@sHqKR־Xߡk2nf`y$W_ [7קaWWVgW ͂r qrxU#Ѱ8\2Zv)B@ߎBg/ym`rOԑ3t =kŁ x yPs۱Aj} }.731ҳ7|ˌ;t!gb1u޶  rA Z(l_gpsdݎr0qm8nC= JZ^0A9<+aܸH8nv=Oc3xn(A$һ"rNs=0nzכ^=L/ďy.VLˏ%vs0nNw}9iucw'89=% p9C Ҹy}zAwOYiH\`N}wۏ~bO"w?gt=Z2dHS;g>ך^V𙌑eSqv'`[w^_9?Á w]ey/_>X3@</|0.HeA1_e_Y9 wg }O58##W>Z#k&}UDY}n# H~j>$5 1/a /8#5JnXv_$tV4|w>CPMI±#8[$HU݆㯥t⤣I!Gxl᷋VcWaʜ|ӮHf&.AX1NMym*_1t$|FBrw6xϨ\r|0 g{q͍cpGN3x{ވaAh$O9;/0 ;#q`U< m︎i:Iu:FÐ<}g_T&srqZ~]Nu8?9ɠm0~l!wrH>rqSYxg=})-H񌑃Г!}=;*>А :@'S& |OcѹϯN)˳ktSXJ 8>2Ԓ,/I*FR.G'jL@s=?fc\gм1 ոЪ!A98<+6Z4#+Wc= _k(C\͆JO;Vkre~Vypci,Ӡ ̹S0ȐV.Pܜ~=3 dR w8,x'~"6A''|qA#c<׎UI N0j5@,eA1o9kJGdp ?9 7gUE\3ͽP79U\yjo~\ u;+`8r}@3` \O#rǒeY;Xm\:sJm^xöڜjq"#Gv-^X%]YӸcKv~_Vǡ]V>D<0JŇ: ʏ8㖖NIU9ryɬE>ww!kMB Gݼ<(cHO=Tz`bS{;$gs(em㩮0ʋu UܲbW<9/4[p 9SwU26<@t۵2 nKv)۸$ bm!!dkP/`^~">v:JՊmoks WrPgSuu~koIWU3cwY:sy8aj-}0|s>P>r*B0p3fOQP̀8hBc:cv=1=ƃ䌏A=[#:NJ'6Is1:{U"Fuyzc?:sѕ=y)uszqtǵ?BN1=x@1ҩvX`zG2@O_sǦ;zzhlg<)1n0:W'`G8㜟Sǽ1yyLxOnzڇ i Ϸ'A4NP9g9SOàMu'1ۯcp}2hbq1=84LF{ΫBr}O=;aޤAK{'n>PgsNN7qӯ^ cNq߭'ӎu?N Q?ӁGM8#cI`z}Nxךx%מiEk KS_H].I vx6 NFcӮ}_aɞV?CO8\Ts0+?:~c+qmw۟zTS3p'ps`x*( p0޼+TI`Aʌu?3SQ" Xݩ[1$qTgUW`vn\HצjQOc7osFJ]}z&'9{~}+G5W'oB8 gSy-rTOӷ~En |R9ǃɭLp@798沙74bmbG<1C#) b',k.7Z\(F/ z [$wf_tz|+2`0lܐ0 ^q_CxEX2߻\j+OHZP~Ⓠ=jz8Ҽky`usZӡsק>i`9?{^ bx1>0i98w/8xNtdpғA#'ӎ71:g>SBcp93){ޥwcH{0 ܒz`Uvysy&0 ?\y$}s7m3Rz:cpFNkK:޲j^kXD$o`@P|Q#oF0=Wm8|LnY2|z85_1 ^PۓʒO@ҽ,)b"ƻ#ڹYw[YW|cc^AkљNlopsǯᚾAd0Y< gԥtc npz!r9g㊪c`82s+ J}ͧo;qPLq#@`0݁*<*gP$#t=Yf'h ~Pd=pM fFdpXmO^9] # (p sS[K?4#-0]#35kvWseXaTؤ<{K@c*d@9USs[0Aő mpۂW;^: vÒd_+s15 _q$dθj/{b#^8 Wִ9 f WYgkr0$sFFO dtԽ j]J"8SZ6 G(*Ai<ڳKRj6%xPT?($Nk/;vp$3  {USvFйvOyuu- ,߻!$Mt]C>0NUz?Zk8WHinqќv 9a<}+=wn9#i=M} ~>gҷpZ})s('#kY.c8$po$6y֧[8EZgX2 aӍ4*GAj`cz׃w=OȬv36p9s 7;Td.HN="@F88 H'=jʪd+' n9#; x oޮT69P>\ }:TOMBGͻhKa;ONǭ-Q~ [ 9-@)yU zԽ86ܣB) Î*FK) I0ϭ$a~89U=3XME(w*,')"0f' <8yMI;s9 ~"VCrCG #רY O }(BUȓǹ|s=[9NT lj g#$s^=ji7;V'.#JȖh~]g#<`?<&01,#8]!pL$5FmAn2*7v'yRF$gHPy5FF8,rAⱑ{Qhܼ#o鞕i1.W*oOOT-JODw\B͵ y~5i *@#z\atׇ|zeʱ${+  sq|&GN+G8>wO>kno{ݜc8q NxQu&;91E'QgQ8:9=}dg #C=zsޛ8߉8ބ!On~𦓃=uCHl䎤SONПȫ' voN2@5s㷮o E?7nzvzd9FnluՄ#0-'9et$ps'U* /S(C=3qU2q$9 `=jd:($P5Qklwg q} &^ppݷ+ vޟn~*yMdm* gnGs]{Kƫ70*:wdVa,yh )xUI!Kfm[]+ c9>'uӲ>19\Ϧz2H=s}Nksj|c2>T|L<O<]Hԯߚ棳I)ߖ*.x_qחϦ"FЕYpRxgFq+J YI?x`qV[" tq hhě]h sU{(Ȼ\N+Ȝl"a ͟ c9hAA#7cCvgK$g#1Ozʤl瓎{˕>W7w#yNr2EpnF9$sb5yfwH* . < r{W+t[f n'lrzkʞ譌Lvd0H݀6IynS<l9z139QܴLT0m$we3DK1 RN~Q}; DŒ{Npa߯Z{ !m<`g?ίb['- p;玔Wf%wLۻi )6G`z6OZ&`A]@ߜ) 5V۔ [q _OZڃ$fS:s[AuG.4w2A"b+(aRuYB 0V8U$l+isA{]iC+-rҧ.?;*FTs: gR؉ .Ok6NXHb3~<J]E sgR~l rpO=nUϥsyda[%o,2(8 |Eg6sA!G, ?pp8]܅ _9<JW5/%Uw|2Ϸ#=鋫4Ki,hX}ÅU~ƙcE m$3)!oa-p$<]v(YDf\1 nbln 0r?bʨQ ROOOloZ~ 01{q<מՔ~zXV7 c)A ֶ>\p̒MGLL:$m{X{-̶ҫՑ7V@Ob:V;y;2eBH[4f$$ <8\a.[r2|9!~53 ;N>кd{ifa>n_}++OmA+#wV=Tqv9MVcs߾qU/*?N)<GSw:׭_SM=p2zcԴwcۿQנz.ZyRwM.xOӰP0IF |u'ּl\6f1.~'ϚfLAy>p(NܞĹy3Z\osߓ$ºIv`lq\SWg]'OW;SyB_3wʧ 02p=G!0b@9 ϥ$;Ipp9Gl~8\jmGvI;$/$cuM黟E#q^v7 BJ0Evz-`䞝xoWzzXIVsxR6Ir7r8 :^1׿\~=LcNq*XKq;v&s9Pd}=qOxSҩoLwӑ`1_֭td:v׎L`j'gҝnV( w:ؑ?π:_Z^^ z{s~jקcГ%By9sx?/î:RHsqpPG<{z})su4ilgt)޾}.&3gR\ /N?NK'&F{s u5/qǿv*iN1}??A}i8 Ja.:c|+◩πH8z#i >9 ぞ޶<:+C.7rTu`s^IL8m9a3od2&3K,Tg1~>gZH|3-;A$5;W9;> 1޸= B>d#%H@GWz$qt>\ v`zd# qp^x;wEE- 60yk0;=W~t𢍠 ղxۍό=L:3D?y0=h?3: +m8 !TG? )>_~ ñڑQ9W,r[ޫ.As}n8r{qvdѻn +l'' ??.*X3Ӝs+, :PT|(Mz4;%$As׃ZĄx|&m`g''Čm-w=x^sOV2Hmn̫o Mu9[xWi('YmJ0l#=]DiAMcGҭ FCԲ:&ZK )wHoac zjKk NUP#.!|d,H-\~O1b1!QXr~Z5čd r+Σ.Z߉W\c-:O 0rN?{gz{`\]'!^}1_MwC1@'|8mJ7qA2]`v02;wnE8e'A#;c 8"98ʜn;:qR@CRHGڶ#p18s=>"'#|m`FHH>1Tr~ I\{p*FI|9ۍ9z`{Wep2>8ǹ#>Rz )\|)= ,;v\g'=:gj7AN(> $Ŏ{]rqkvg=cG!H̛pX7oP3n+Ӝoeڨӌf=3^}uu/CKc49APzc֭e1/A?<$#ZB8R01EGQpۡRNIRlDY2la496r1@y"xv㷽fD;sDĎ#1ƚO:8=ƥ۞q׶@}#5b#AANz@?ޥ6z\ K`z uScHס+鎘Ji9=~uϩV"'$cw_Bn>˿RAێ:vϧ7=2t? p8/nN84 cס=Ϡ8NsU ~`ݏF:<1Pp9ԟh@1oL֐dבAi hmLZr:u=jӞ6s֝ӑ<HLwt xkLBboyޔS8 ~F8_qs%_#=󞝿L*=A`p{}kXL`w=C)늲=J=Դ$g 09=k[Eێֻ0#~&-oϔM('cu  by؝ێ #r;}+Ze]ټ0`rpGJ)>|Lݶmr.$yBi_k, k][bIUNݬFyȯv.qIAVKF ow=>g7kC2fucsTB2}|; ˦eLHc />8E~6']́y!8X.pݕ*s1J!K0 9 n ǭkq rYiT)rc ] `qZq($?!xPt[77,{;`%1v'VFb*8qַO#6d<&\@8?M.p nFApsީGf(|( 7. <2zw4QOӅ$%sz9#hAgocq>v;I$>Qqc" a$` vާ sOL@\8?{;LlɒPm :Ґ;g=wsz*3'^j%hE JLtcqZp moHgӚD.v'vU8V40d7$\)jncHA9 \s{ gZ"2܀pAerN1ӸJTnڜ?N)2݊y?po;! C\{PݱaYK(Gs$cڮ_C=lsB͎rvn@nmP1 x6œ1g4in. XqwqN7ƽ.ԒBa*2v :F'Z`EHxd>Caӌw|:%>6{dwǮGa$Ϛ}^v>lrH㍾ '<^?ia8ӐFiP zv9 ֈLON=:uMxҭj!Ō`sמq֛>\cAM\ccןL=z\t9B8ϰ㨤NqsZ$ w?JL |F:&1;utrA9>ء o=~=q4y#4y l8G!szw>g,`zv'~gG$ Kmz7 }=ps@ڬ={m'?j(to\SKߏK>PצE!8~qx}9FTGz Gݣ%B0Hy,Ni,vuJǁS"I>ͻGdezxZt9<2F}ccj Ć=큃S$whf8!J#Lr8J͐pYQ&l$Wrpq($gqZ Fӕy-SX=沖˸T$3lqO9gLCm-njOc? n@,I1CR lc3:z=EρppFG8+ZR39:+Tt,.ѸvB ~=xL%e FfI(wSߊFњ^aU [vP 徸Q+1prNIנF!1B9ne :vn0B=I_J9l0;?iϱnz'=<VlsL=?¶rOQ瓟izRrsӷ=Gr>ns'3Q5=r{d-M` cSڥnNpq۩֟]~$s9 HO=ۆp9{PX_qԒ;c0H0G O% <Rt88>i)#$ˑ>}秧Z '$OJa'P׀:tG:}q@3xf?5@`p'x,֘_˚ 9B{+$"v9PNcKGOɗk+C 6HO~UU?0}=Wy8Z6"P>,d~E9"ԎGe Io܁ֻ^apCn2wts&wjwÝωϿ#JGS® !hC;nc|)*1R$ہjvO#bp3 FPs@Q۷8+ϭ!9ۀ@댌!s֫0Cl$ qҬĻ :$zS%;dD7`lsVݸ裒0Aڢ )|H#l8P;yϹ,|7^.1S@| 6#ؓ$QR"˙Y@c$rNEz!g 0\$Ͽ[P;rod`sq8*!܅פrF1U{kcGc(eg Oa5.V,1r8Ǡⱔ/&kJVΊM {>mazG`}kyH%8Qյ7D K6#' LҾwVG7a$ d'NG1?W:N.KQJ(p1#v>bh]^zgwsw#UWܞu&3nʀ: x ?ҤO3~&XH9;}>^3Ձq:P&ג*l.@;r2w ?0%UPĂB ON]?)$H`g JFWzpO|r#+nzz~t~}q#gW=R*>M07L Ϧ21fɦfڠ-O\k\r8_JI[̚}j2s6T*gW\u*+s&7 GȧSgF^j8ua#nr$al@Ձd:s־wzl}{sXsR}j0O>>zR?g㡩 s:^2y9|\NrW0Qǡ^s;#ng|By)1ۿUn$.x;NG]4m PA$crG]QvvW',qysNTbUFH\H p1qrF@ >Q8}=Xg ;lp2N8XU۞y]sP1X.d igz Ed=C |ʽr叙SR Xۃ;'ua1XvwctԷF쭌6~Wb,w`*@R=kYeu{ݲy<2z_#j0QIGQH9`\1=f̤*TWӱ9T΋3A$ Fs8+l as>5V0@s6@_Lw vs=۲.zc4\lI>. zcJnp3Jd=hdo2Ϸ~7.68[D}JAYʃ J VS6קխI-gR>__PX| S]lc sZo& q{vǥuv%~| q^:JJF7#,h3vA@W sW!%sI$9gqSCHCЪò\Ko=9[6LgSN=*1Z슣4n_ 2c::NF)THcݱFx> 2OBKu'ϹWm3|d囁_5'vVn2pRW9 sCWZFP0  A'_WOM6̾Usd85ڡ8n}Ws5~a4*Q J9޹y?|*=xQ^cRZ!8w)~Usׯ&r2 8`03ԖҳgtK0@#.29tH)Cݜzgk0}sszR ;?k.Ȗ"&zAvldz{ H 68NwGvs8I`Ӝl 0`2Fr 1/'9Sv;Bm<ЎY( i-"9U1adZޖ"yW qa NzTKvGdfî '8<(*x؎5Ħt®9'T r=k\ޛ-NZGS1v{m(^*;]npU\>akGP$ 6`PzOO->gqp0H$1y>;r8*;qV1߸P99; tG9Ym8n27NN9a\lrX2AZ~kmo n?{i<§仟Hx^ *9q>WCy%9+W^}uLd ukļOx62[#<~Xes9^GǞ"A4s7@'9#^Kuh;9R>]pq܃^uwyCҒ9c*1ן;x9oSRS8n?-b0Gls\tv<:.w{ZL;>p݉ cX2ZN9|Ӟo +61؂8>hԷ-iK; h` IQ*c&®ќ]0q(JE31<{摔9n{)$֎Qs[` 8[9FTu~^Bd>㌎Jʬ/Щ;F+ IJg[tR*`g?OlS9O8`tǷJ\۟Sb}?^Zn!|zӳtUXNzq=_j_^b9$*@1נRK: w>@霁O!#~ԀwOQt9Ͽ'}:i=wz: ǨϮ=:R}sNێ1^Ӝ,*A|n?Rba:.9A?Vlu㯯ۧNb2Oqϯ y,NOw޳HbG$ҿ/,f9"8'a㟛''G".'v)LFFQ<5jR6H"16T6AڿR/v?>CzBHU.x܀HFv_r썧pwlq˄n_ s3GMT( OC9e#'fP #cq?qs}&r(dGU|'''5 W>=3XU@JcD؀[Gk&1*Ks|Em`ek]efrߗ #ʼ+W=뇿dpV*sʥIH㎜WWwr +i8_M`|)sOp N{WE{d4^Ap8cӜlPN2rOa3^.* zѾT$6FzOjӟSy/Fؔ6FG'w=lCrsduO\ZW9c<8ԫy'ǿj:gyJP3#cQ G_'=RރԶ!sM?\ǯn*[rOOl߃Kà$9yn971N::i83O̢OßKߐNOL #9SsױރOs2CPG8 ǟoTȏ 5_8<E[ޥ#v> cC޺kx\zWa% O)k?ۀx"q^}u=;ӸK=Np=x}f=i=8?֋%d=|gQp{ߏzíА:dds8plX#&Qqհ3!cj[wCU#t]JR 0':?5t#h꽗SߑW 3I&!Ok 󝻇$>\tOj=lrqڼ~cbA@mÞ3)LDg9Cjlݒ8ڈwss:dJSel20`#NTW8R ŏ+w g#!w*py82$`{}[>Y\ YcWʶ2dx*2drs LR$Pz6: NAϷa rd}р{?Jc[83NM166ʮ>l* 3ǯmҐ[mpN9vzMv@BAVacnL?wjrݻ9=j%q4~S[}֜m08qR7G8܌d!mNy IqbSG0 01qnT7'U$78$Q9k'GOq9 Mn q?jF<ܧvs|h OB3Bx9Q%wIe#C7]= s^Yp6'4';'=>^8b$H80fʝ!zc{i[dxFnyx5)f1dFcSygdg{n$T\Nn0Fz׭fjwi%xrcIYcž0N3[[[Iyxv$bXN⌠`ӊǽڱHZ  Fٱ=A'ֻYF~rw<֝;HNx'kF؝qҙDZB5"a8^2ǮOm)< Гt6FٌDB>QxE_s5Dα1%;ެgkHӾթ4>zyk< kqZh*дJI,dkc#s#vS/}k4k};ÖID`#>Ӓ=>VNT;)E)+~]YKf,U;׭z¨~0ʅ1m׍I|GAsן<ğ/V=㯿5ai˵1~$rA NqӜq?Jq|'UK܈@3׶8<~Rhc7A ~t#N|u 2sE7'2'PSR;NzgI8?e>dvI$r9B@>霁i$= 9s4npO#\w翿qևz9Ny8ss;N1G@9r;q!Am;@=Oq֜=^'Qzh'q={qۃߓ'OcIt&IxNd&8=Oq;1 ӌ<iG#=A=h0;›Ǯz:s]xp;l~8=^ӧ| qJqϧN==(@72{i\f pX}z7.Fy?^kϕqןּspUGVlBz=+0H1%G\.a0*Q@9S5;Ŝgv`/(Hp\cāξp~_}k=LV=~E`'`_^`𠜓^m/d/<9I qARcq ؁{$SBh /;g`_Lߧ󚕣GCa ҠHfm= À9$U'qszщ==gޙAgAp@$:T:NE9=0֐c 'zsGg>^GG3L2h7otkyUs.dwݸ+ggҢ|ŇxTqˏsS?(UU1 ?{knއNxxAYOOVUt*܍V'<ʐzjO˹1$@<2zWC̻8d9RaqqaQiT_3b8B`>tRqFܣ29GV2F>Xw2\`z`qJdRrpHxR8th*Hr*Asn;>Zdb%N ,ȥ7#=OZN'epq si#NV2+\;A;*ַqR:@;nw>I!I#}\NV{xjVc`*9:g^&;_?\BWEn X O6l@^uYװ S<r81OQ;zpH㡮~k<^9l:cʰכ ?u§+|qܜIt#`=|TswzT.lpLPF9$鉱G?@E)נj J3<g;}?TX9$ 沦=s<{Ӽ^8˒IVxҸJZ=.{#rfpW8k4h]~v `p뎹asѷ"A!#+Pm'>ݫN?>%2o,r:WcVG)[XܪpW˟h,~n8xbce6\t?xިp2}|v|8AWN8t'9pP~S=)F@%~3}T/$8ޝ<ݑx=  v犏k7#ynyzP9=OsSg\ FJ t gz^)`;x@"XmèXs46pIn uC$d9%W6zք1y1eFSso֩ma3qw6XQ M'sy9*޷XP8([sϭeyp~^gN3oJ9/9q=j@w UF+;ԓW5wN7ԛp7F2̘8=>a;֔qve,:cڹl2 p~v?ß5#0`y#`UEhǻPȕhQN7^ï*qeQ>})Cn% ?Sn,H$qIsܾA%ON}16 ;{6I浊4UA< -G@v "ۺ` \f4vq0|Ҵ9v^Hbp3_oJ,Dicʻ#|b~ ێ>!%T$/CVBORiC'$q=kqJpΈ2O 9~TcN͟m U cq_ןAV0PCrGsɨ$ᶏӧ#Ԕd6$`0AKrX;T01 6G:oc#v[?qX 1'j%;T\`*sGֽ IWhww7L=j2^t|w*cWsMI=>ln]=1֩9I9sdד;jQ TPұI$nw^@L|¡r9 9m݌zV6ԧdpP p@9$[e Iyl|Z"9mrw'r~E p@sIlc%vNOȤSX상Օ?2c78=yzSBf|,B빀OvvrNq~UcԊF8 Iq'ک 3l8Uj8aGȦRd^F,gbmCqUeo$󵙉9S.*ai8Os#- َno$獽lLn[ 1oUIԅHF{_oPyߟa 8QR;j%KUV}2*I\g>&`̈U@͔U?u8^6'=|"tp Cks33Z`*`1I+ZjTެv,>`ܠ=nzq]<$NeQ7gjH8_SW.'Cs6hy2\:jڢnۓI VNJ|zڢvy^J8ҪAcp0q<{zץÒ+wGn+05D|.u/yy6j\,1 e۱GΈFnsW]we^H靹ϭoWq`nbH:qU`Ou>`rg3Jz\`:0wl{S1%^($6NI'|R*,I$c#>?#q8֌i D̡Ujo d ̶TK+!eg)劌c8+^%YNK1/#GN)[@7>[mA4LN Rcu=F3Wy R$V<(,[i Ǟ㩹"U'ñڣXq =Zcq#;9RF}{Tݝ/$8wqN}im7Li'2yrڣۡh[ƙi6G?1*p76O_{^~C7cLw_ ;4*0<xeWl7XyY">8sۚ޳2ŝwRz+j{ i K;ըoW<1]r#?9:FVfj@ 77HGzԉ~`0F2@7B7;q `Y;HT#;GG\{SQ<ƍ7pq9_t2۸8:Uڝ N 2:C 9\}ksB^iCKUi8A.O0t g=G=~mBKtuȌ|p:瞵8C ]}Jp$O\a2O'Gԡ=?Zqw3uQ uZЋsx׿Rn'}zzM NzT1Z"?pӟn*y#׷Js=?2iGg>ړGw)})=mIO=0=i' 89&k=2>;S;IBgؒHFIgƄ8:4}x8é?&{r8c#SqOn&מO>O0SߏL{ *\ڎ'IO wٹ-{ YM[RäjR[IBb)=+DTpn5$ yR#Op7*էm.~rђjp{{+n џ8-v.Hydl>Kg:pG\w~Z/$؏Us!{>8v0_#=Y7n[x-|:sm[ӘG7bYnxef/ZX d,:Q߅rYqu_ta|kC2`Qep܁15x8y7rA+ ,0G+zGꏞ+3i Ls^YzOp,:P1߃ڼrw{y"As=;w`9/sO902x,G8zWc+'-e+(Xd[1psH.T<7'ϥ4_<Ձsy< E2=yl3F2쁓nݞAJ7=uHOHы6KǦ`pGC3Su rCc$tc(-=}NVP|nVEu2oA= Gz]A=~f)"yF [^{{Wzť@P\c9ZlcRB0abb"C^u pNF{%Fc$֯[Acϯ劮gco>O<Ð@g#9=sZx .2a883Ѹ*R| |v ͸fb3ʖxW=:*B9$}2h]A 21 >nCghNO@1Pg'sw* 9D[DvX;vk`NkzC+Q  }qZe۶W(O'+aH?k4h+v;>`S9=Ͻi:3֯ ՟ExB`ȓSEJ> vG'= vo!q8Ԁ>L;G9*=}qhDظ:t1=v@}8?nةb8ӧ?N<x#cLqtϽK{ \WTz d>8dZXgF8?ҙ8P}*oyO}i9ϱCGF{;H m' 9QxoSQWuzwaeF9#@:}Mi%4+qӫrs{JT_2qdv8Vf~aQyAI$9q{'!9d$vO r@˂=Zo$x}rHӾsҔА 6y4(#qQ<2ˌH &?6qi A obq*x8:gܴ_VoV؅:c$Ul)VF21_©+?h dn; ېs#Psu+s=qS v93u݅U\n99+\0};nL233FW<鎸Q{AR ) ;uƎfذvhId ~YRHu$0J N~s}ϳˍH8rpq@8#vg.P>Ulrq#?CH|J&.tB{C0Ǔ;qʅ_C%Iʐۈ `Ϩc@svH q#:V +|̥Br7py&lu4L9cirA9^FO vsOp">0hcW!Sw$g֛_dmv6K&.;pSDj?IX`2H693ýzhPI;~B`,z}*k;v bg;wRvөbf8.2 Hx3? =qC#^O#p=;zuc%)9alcӭ4V_!y.œ`9k+ F m*74>M>q*~%GpL**9Eru˭R-DeGNwSO_Jn 94iUY9Xc#P$1|W= =_=e1=`~YsoN6rzgWWUA_lcj?0l\d`)Ou 0N䜞zv=1ϡ| &g'Mw'At88=s#(\;穧y8v >]BRQ@Ar\@}#4ڟ.č'zq֦o\qߦG_4Qx9ϸ=*A d})%SȠ׎qҮQA\zn9OZN@4c?:;\ϯ{t{`| O;t{gП<xq~G8oҚBǹצ~x#'=O@tn!8'zS\}h;Og~3O^9|  T GfZܪWiv$LnfS8/r켕e~6cydjB6HFV rOJ2ex,+'sZQMbe1_LxV16SAׁ7 n{ҮtnNO֯s1x [/Cb){#:ԁ;yzӈuȡnG8ysקN@}?hvǾzc3|I>bBGyI0>#F;{ `19l܌{:cC 8p:ps}H=z3Fp{d)c$f-fz{ sNO;8څ:g^NCc8뎃KBe$cfIpxrp:\WA.%ZK|f鹗 )^Y!I$- هc^[>'sw3(\'ּQ˪ 278 G4}y8b@#*vfC՛Þ ۪6UB?ۥt>JbYL*:ɔt|+8z%uxSh7cV܎ysRNsThQB|6 B_ !vGLg=JR|#U،m@ ʣ'<}|hw+:%mw`㞝r}qJ17-p`M9&1SuZ>C F (89[g B\F3Ic>]=ˆO1T@/\`uL7 p@; ^[X(.H*0V)1ZB7$ "!elA{2щFT1 =K㯽\o,*U$y9lgұʂu @=2b[#'k.d˞W#`>#nq\1:Hۂ-&̧y$ zRe{ >9h[4aFDg83۰\r橩~V v![{y݊M\1 y 㷿5*{tv W8f}x[0n yؚg@V=dCcœ־K1=.lA$I+ǮǜzcbzϱHSn8`qۧ'ol`r1Vv᱅ 7@FyJV?($O4ۯޅCd0 6@#dsjJ&12.x ^ z%06T>w0n5CRoC#m&<< 涷q1ܩ0626R8*7w!2\VĭYC*H_ev y0AkL՗xY|e`Qaq*WvvSFP2Tg5mPU'W3GLMxFYzwc[/6C|펿zXȿs2v5ֿr" gT>csz˻b61 >Qx?7kg6Ѷ767 `Þk$## XpWzo飺^kE†q]ǡ>'}._xFz {ʐ7q\g݀J;.)ovQSAEFpNH9w&^A)!/ïЊqS%S xNKewN0L2>w%T)Szzrq}fݤ-8g< ^^@$'8;؁sǛk `y1#$Ԓn%،~^|Ǟ;u:"zwrqҐ1 ;2 \7o~޵SXArH'iZlr::sO+8Mm $䓓TvXJI2>O#esgڲ8ې$CF,w`QRx8Dns+}3tQaH`˖n!@뻏^p)>]tz[GD)>zU3I+ $I`ݏ(NK'RV!H 9ʖRH<޻]sxUId79y^]ka<R5D A۝=kanI K]K: w=j =:{2jv=Jrs'M##= ba=~u`P9c\zpE5;+cS>GPvGAX3p=rAC w r}ힵ-IRH՟5q =Xuݒ9u=(̩BJꠑN:uAaկCͮ%3˖F*J#vy,[Q.X@[aqQJGⰲ̮ב8vmIǚO0rA`ΧHn ~xnVmDtK L?Zq(y]C}+;=G/2IfJ9hNI%WRIU<ެfOQ$޼' J;\1\vct73txzm} 87=*apF(NWrMJP/!vsĶJr4tp9#i9[%[A$g' xxcq8r#p:Udn1^t֙Y$*SߧlqzYX !OH㷭g7SD,qw|܃<84JsF 7#ùҍX$x]#o-a 8N03Yl60W?09=`!V l[ ,h;ǭ.пs1qF;rHQeʒd~lc$K0ͅn=Nޤ};P6 `а:FH 3oϪceBI#'tTW8d_>L$_nw8=_g(psn={Ԛ<`3I*[;Ñ$q׵&6ňX@فJF?02r95-_Sn鸀;gjq'~p#1;Y 6>Sz;R+-_F%%  e6Vs sJžnev|ǞOkH/.FںD̎UnSy8`7pG7ǰkPN$WIS\g뎃qא:dqs=GtW@zTsAXmp g*lluF0 oT1y}({С'd{z8im&E#mTnߟI?N04]Q!J*AN3J[|C.` aXSXp}:trZzqx_qڽJ-(wv#x7Uiz"s1l*#m sszGs`lIQvܜC*G#<$΀)leu/MyH z7sq5FC?+棺=pڛapA>^N+x)Az#3UpIq*89K_Z=v>z5έՑz68=A%ϜdFNH } a9u;ҵLN= 1\ ktwbʍ\daK6JtoAl[XH!7 g-F;f[my$78pi{F0PCA+Blmoڸ9<'㯧iE~a8۸LV0:K|#>@6c 6MzyZ)uÈ՝a|өw> JI =멫+ 6yEqaC2c886R6ɜ;3s޼۱RяK2yM1P)Rs[m1@ RNqijٶ R䓴ށ`|G$\rH.$qPCq(il߈O);/"<ߎqnGz~T0* 8dp1:Y%sŒyHzr^#^5Z2{n&=O7#z?_f+}z ms?H @^kBd;5Ӟ*yzy8uX<R%`T{ H מAnӗ @<dSy8R%Y `ycSrqtzR!8NsT8杈% F}c߭?n;O~)5!wE;q׿jM<;?N߇:~?~zNsynYv;<҂;>g>l=3׿=Ãx.쎪zAzf&q?! rN:RKA,?_^i7s8[jO`?-c뎞4%__Z7}:d} [9#ޘ*{Gz$ W֠1'̒3 .gye8g_W:J?qݩR32`ǸJ8 c9ZL |0䁌:Wt6=~?υ8zcz*hWl@>WIи# 8 c3t^\V|:@ ޜߝc#hՆ[2Kg0xMvvD}PLg au`3,Go"~쓤RPr@ cNkܮ[o"[{dEre3r}NSqg7^q2U %H>5 d1ǰWR=rHG~q{zqE!z Iq$sֳ.󍁈C~N=qT[0i 'ppvH8f(;|,23aI85ԇ$}; '>K) F3ӑcOaIc1q98>FP``n~`Re#L4F'*3#$IM"6#={u#3T>aY͏ۉ89Sۭ0\.3D7TȠ!z]h|$83Z52[CU.ʦI7wמn>Ǧpp}Xc3;rI]We ?s߸ UU_0r{uU-x.GR 5#vFPiXR7*ꦯŝ¬u X`"ysۭc#h;X 0R >jQKDrFNѹr=yEyp_]o^Ir8Zbې.#(T-F*FӎLW{>H|wRWI*'ްFр 8ڠtqe&m0{{cI8çX4irORIOxkf G r3<.g] !3$r:O]|Hm^??ur8㎇sՍԻSF&"\y=Zido'cա+5z|Jr99^sp1`ay@W:WoCݧZZ qٲxҮ$0qxְtB}IDqu*·պ˞i:#$#^cAY2YQ?z !osORKӑy۾s=?JLHoߧ_Nuu34;R1I 8'ӷH;pxR_lԔ''q\{g{zEOLBF:`lG:t1;g'Ay]E)I_<{tWw?+xuӊ}: T`cВ xDtAz sАZ}Alƶ=|{j,zr?3MR`vcdkXO\ gO9zsȪy9K 4&0{O~SqqV+ ~')vqܰ9׉C׌zJ^qNwP;~ҾVކ_M<==N@?Ʊe۾} ?9J#ܞp(lP)l8y y8=.H$qÚO&8q>JCx;rI[my4QOMzcOB#0 ׁ_THLq`Zn2Or>Q۞NZ v2:~Tz5QヂlQ22~Z p휟sd;qn֫2%Q=yz8*e뚨[=Je& ;~ʾq]~0FA59,9&֋ϋ->j\ 1 Q=Ľx!q5.ܶuGwQ+NE(+]]ˊ[gۨk˗;0qDT\hlxX̤0 68ֽZkEr=9H< 0*Olnqs]Q92!cG't# fAJFؾ (`ǒ8 t zU@}yt(ց]x F99k:ع's2Ie?0br0yV*e6!pJ䌎~a tŰrN ?AZL ~\q͌0 xOCM?3!,A=Nۗ'z@8x=qSQx<9`wq8[[+\6~l瀼SdvY#hRD~FܑF)z؃. jD}rz7:泷U.7$9uUv8$d7g'TNJHe<+q=)P<``nAtDAxJN1Щ?{=AQXE z;ҵg^ GϦ1vO$ mA=kl8`˖B +:{p*effAFmːB}cq\1Cg5&nhJ#:{A%*  gw u./" . M8U^Si ˼+}wѽ^fڣ=: kBdǯr~Jɻw1or`I r >9 vn 5E`[2x'Zfh/)& |:+2Nry-QT&q1|G,/3o$В9xH8e8~x8\`J䜌'D/䌳:O NYd\p=H8h^Haa9b;Xq9⳩&5r֣4Q/!2wӞU4jU8)#ڼSJ+U+vjw~`v۷ u廨ףxjf&# qmQRIx"ܗ=l,o44ed>Τ29# x/7ϣб>=zR9>§./H=r?_Jsy=i*v~A}rw{?Zx=ON뎹x@qӎ9_ƎM?!\vu?w8ۯ u ry>Sv8~8ҩ@./>Թ#_׿|>{P|8\yלaǮOU[0}֓>}?t(.8C8_c'I.39締-:x~zg1;C\Mc =1zlq8<\=N(͒J8|O_3=3gd֟ g qqӃstg@99A`=qۏ=y5`rp[\g?8HsGS:gڭŋx$8\` ]*94bMc'g1=(a2O=9:N8vbMrrORg# 7NqzРØ@çqpx<҆vH<`1X]WI>On9X\@=:{}(-ߌd( nqfӧ#ө| z'Oy$ }i۟֘#㿡p9}x:P:G@OJA@3Q*,aW;'6pAM?^lUeh5|ˬ9%;*FCqҼBQx46Gb_~]mICۦ:}+-9!rxzqQKvA-8 #F1}sP~~۝{CkHXǘIX;zֽo1 K0|D~^(Ns(n܄*pvNUWԏWr3~4!˴2oKd1X-$*\+d?63ӊoD@A6?1֡f'UAb(xnR ;xjͻ cI2>(+SnwH00#;ӘoI!<{becn6g,yu sWUTKBp\#zp+6Z)ۂvڥxvT 6rr96߻i‘ʝI 9Cq#n+aK^Ocw`.@ < rGE}GeQ (y5vh0? =Ɍn9.}IGSB9{{ =gtx9.N^\/랼c>&Q:zF99 ҜD'\Ics3J1pg9H}IxN A?AP~=i#.ybtఔ:ΈwF|}9 xt:oÀ1XpT:av<껳R#%wwf?'Eyu3:ۼRo89V*G\ F?& m`1, <)v#9F2;gU=6B90<J~tE,X #D%Tg?RƤ 6Xԃӷp78ReF8m*r]w9vDC|.HA)A3/#~mwrT:¶mFYcx2=aY@ی!&=T?U1Gτ@rHK`Gղ!O[HCX9᳟ڴ »c nxD *6r޵Tc !\>\良N =: -g}A'bsfl>k}٘= gb =v.s 1S9NqAYvh|k@3ڟ)haw/Ӟ1\ >#:85Ogaa9neV㑜0߅ܣcO'hZwh$EQ\&W4c; o0#kuNim&o‚21ul rw4q]\ _1;qɪْJALaP|Q#ZjL9qqD_.=hkc ,;BvgH8BgMlT'6#u)mx<d{W:UعH96'vGB]o,u,2Yvy>!S> S# u?ƌLֹa O#9OzH_7oO`1Ͻ;~>1~v=6a.;یJc $g\syqfd`緽Tx2`R}Ig&R1Ej,+'OW CY949AHKI   j}wJ o nPÎ}v1\IVZ 襓|h/^Wr1U#( +?C!"3\:TCt\R[jFd?4ᨐF׏+;+'å_7s69 Y IRr=q*%_yRB1U >EW듌̊:Sz/@,wď${*yNJ1p@9|4r[)+BѐPmEK0݆$rAv2F:sץVm@݀PߗiFV)GBgvN'H {ɐt)`cS'UR|' z)?3YdKIGvr=?^{ջ† ɸe!]~\8^dÃ$|Jq֠:8L&',IxmUlp%{4*r(8 ?QׁT䔒99201+mD$a:Sc w8֋ҒBXYwrxzWh$F,` C.XyaY&vuo䪩XHU뎕qyݛ1| $jޓ1:F1򹏬 "B\`z#u!V2#v:wJ#V^Uea3osOL]6s}OupP]I#,3.6`'[Hn S\Fh6ݿ?ֶ8SVq0@ntᵫ&.ԙ2g # \$]<{)}}kpO?9dg!fRdbw<~+-o`/*1/emzk0BeHfI&/V $À5ݟEMs`s|yW_g¡+ \');g9HNPsiqeQ5# *n|)98>5*lW7$R:(9=+/:ƅ6ڬnΒ$cT_۽R?0 1b18}aDB9)l q끊:HH#ݐUc~0yB 92uWbtB* [es +8-Iե 0)cs=k>8q"mWvHP&G5- .Q` HҫB͸or''}3ړWBv+f8VW0xʎ0J*\鎞8&BC pN -\9!%s T1ǫ.3¯98#,9S۶qUK ^?im|.FP.0~`>?*LH\eurxu폥 j-4T*v\6OkZFC#?+zevT0%g՟2Iy,UNIxus0Dl"=[]7 8?0Q2>L}vB غIl G^ip^;%Y]m u<|εEps'99wORn%2}'}pz}qԃ*}&/G#:t39d^G=8?Zީ@ Rב܏ҭSec9AΧ];zTC&Yzun}}*q/ni8؆LcnAFO~RրJ$yNW'8+9 $ O?= HDQm<#ǭN3Ϧ1QaX_39oJGlѻx89^&L:ý9kc#?yQTp6&sNB9=O+3Wd؈Gb>w!pOS\$s霜gws_oGc+nUEvǕ!FN=?<՘x y su4rz1< ˵r>JܷKnq:c8=kmoW'%Vmu10TEla3ciB@Eǯ\n s VyA!d @L'L?s3ȫ~!WpO1ON5Fvg%f/5VF&$io1^|2p #`qa#l+#\G'mrGr YnG-du3А3NA98sҨ3s9rOqGd4.9yʩGA~աg2Ź;qCzq F͎qҥ=]2\c yJ[8n}Tfr]Iw88q1X zxTN"Ox~g1K}Ѵ#Fy*/# ݵ#,YI4ҺB!CXpZCD"9}ymksZK39s: S͊ f[\]@){'!r9'1<^LJ2yr+oo^ޛ=s|zH<^e_*qF'`W ?7i'{j׹/]cKH l`KuqT 2z2BǾzW^C?}7O}#4Ua2I17\'=xzA emXt>F>C烎>]݉㞜zd֣!T|Ƕ3\n^A;N0Gn4%Rp188=p U9G$v3=qPƺg=}I8dXW ڎrO+## NK>\/$\t1=x Z%FHϯp>3jM!Hmr 7^7v޻ 8kns8N3ZՒ\n8 tnzdVa' r9 P xaTQ.ĵ-f#p <Z܆[[}<ҹ18[+ٽ 0S'|UA}^UZoSӧZ35,t?!V׿oLw8{'2y瓎¡S9|ҥnO#>^=:5/)l&9$}1tOW83qcӯǾs8S`@} ^~B}yGμcӮ_N:{؅ߑoڗwuG?{8$;L=^N9z昑Xל>?Z7qqR#JBzu0}O n?_QS3uOOrzqP7 J?A3s;dJm'Gn<g#o\J˟\v qHRQ'8!1N{p9F;pp=]=I靾TÒЎO85HCO_}[HW0;c7:bsAah?I󎽲;w4/pd㎽qF0'~FbsZA}:i.8Q)> :VM_c2Ǧ?'=Hnx#< |C>Cq{p֥F<}Hna_+vc;C=J@e X'A?^]pw`6ÎLeCk;| oMѤ&q֎&w9.͹YGHg- ypf~Ҕod`f{2d/ :/+jg%vګs1b8ךጿK-:YgesrBmR~>$[2%c˟+cm$+ >w JWH?3;fFDw|f.3=>$ '! 6n~QxR [wg}jG!7btn08=$u9'WM9N0ݹwoh"g߮q֥A s1ⳓ5[u7Ҝ UlyeIyҥj3~f^p8ϩ}9"vy6pv1ں)sˍa`tc`0==*' Ys=0+69[R*59Wc'͂[iY#n8zyޥn 1ny{`#9鑟$ I vG\TpN!׮MR%7U9GK}҄?s0#ia烒>zRcF֒nGV%ȥ7887I'sn0- z業.%Ìnq#q޴Qx~lBTzڥ/rl+_2sɭ$< Fk^ÏJAE?8xfduRe.To ~QF19ҲJ9 pN:w遑Nwѹ?sf;g7L;21JڶTÖ* H L21L/ v8=>wfn8FR1О;g2B9'nxjmvxrc7LW lc'<R~6|p8KrgY md2:WM%I)!pi!zr: clK8 ՘mpYZ&oF?)>ù< Kv0^i v@rI "_6 nH@bJrxIbu*!f(f#$ Kl与 d'~C+©\$bv2a`4R X$J[ox탁GL BJPj *H˪m:dbP>ps9{ 4[[ $pucc (_xҸxnc{tJm(ޏGlt<3h> d2$g׻t/;qػXR q>YHFe]9  G~B3t5;xN˟p?qVJoGU5l>m(퐫D2W@95vh,,,V.V$VfPCgxȹz1M|Έ1n\L>&g$^2qu4~ASa,{Ϸ~>9M/Lv9[ s'loZPN9>Ɵ(006JLsө4r sv:Q<:zb 3NNrF;S?N59>$qS#n#(kByr 瞼c3Ɵ #8?8ǷG 9A׭7#9PH]U <4+rGrqסp97mTx:*}sy}TNC@r0N=9䰹$Gq@~v3ϽO's /C&F!Q#?IjBy'׮~qw9p~xN;Lv7<88&'y^Rَ9_OI|w'803?ʜ*O9,99ڤOLN}Jx0}O^^i= sv?M?{uu? oR9MF$';#2=>8jAc#䑃|Ktd2'[2;C 8ՖU+!݂Xo# P)a0m3c7g8bS8;FyA+҆ǘ(<p9lӿ0& R?1#?.{ֈL\ӽ*FrqN2pkggvWPgvv 903PTB1b9 ݹ}i"v2bz?^g G( 8'ha`Nym x)GWGAnc fTr`I.V86̒1NGM R@@`C'1qL2*y{QQA tvmО4TnRAPxW.cocҥe/ȅByܹە I :W;D.@7)î͚"nl|8ǿ5b0?0U9x\{} ;,Uׂ3_żY鰕qTp}_=|ǭUAًb^cq3OcǨ`'=3L/Æ'<ӊCs>eIIw`ж#݌@9R=1B~$hҝû) :t98z#銓'c_C) ^1T眎8 z{*d0 r0.."0usၑZᗽٞdɷ󁃆g9CI9^>#5_qUG vDQx23;br =9=Fӵ90[8G֜Dv\3+0$hS70p g#$z採q`*Q^#" 2J;3*7(: tsO?䌝RzN-4ad%UԾ6soDfm9Nq~X.[\mPry{҅bp@Wv9'x\]~gK؞=f~υ&~~'ҴA &1&XcW'9=׭9fyqy1?!8,rqzd~f*j:\{tY'YdSS:xA„98t8yw;lQk,vXlXj4YV6^wn6t(. )0euOcvP}HS@$v9Rc{`ʾX՘y!׆dw"jG9*0T U$qº ks',}z5^˥:O ptRO8㐠BpI?tƼ ]/vZw=%[$OqɒN1zu5]#_888'vw=i~\u a@yZFu?O~ry܎>KISp ma'#k珘 )$> @%[MeBu^q#Rx#30ILC*GASNW+Nks>} m=9>$FҤ\3^]swhUBќe8bs!vy=@䎵 p l*Q_ua9Z[>/0w-w`\O=-:$fb_2Euߝ9CS5Tb@ ͒gT)m$`+8qJ)OWlN[9ajOd6SFZ@aU nX@Jrg<֭5@̈́Y78ܪ@88$`1߯LUHك&U, /@NEb[j0+*?uH\%NJ u O5d͈iFô䎾{WYj*!<A$ C'́U\zX.%~lgb뎆;%|ܽne s'FXr渍U2+77pFzzviW1@qM~ 'nӰ ֕/x>lAJA$pHG<,GnKrFqǧL$2=7c!A!\aE, NnB^ԃ91 9'RAw B3ZHJG=y=jAIL)gU&?yg93ÌxWH2pCm!8TtFiłE pHc>qց$W *Fz'֫3T"=۽がۭ8r!n.0|FFv]vz1̠3e{x'ǽ_P4KΣ%eV>cnO9)R'/\')+^l2y鞼bFNm\ɂy)m/MgQG-y9 `1W*8[^X@`!z#'<*J5nc) n1FDm)T-œN?b>2F͎QYH:ZS(1*_poy>Q9j:-4;' }jXG#L1\1P9J湥 c |Gnp<~uemd)U<0V.p7;/F˳H 2!ץE*+ ^@2dq*ZLy-R@۲rqqӜbK"DŽ1rQ }N(IB}.Y~RdnmB ^ #dٳ ̛AQlecBBv)UE\*n~l:sxj|1r2p{6rzp= M&zEd+600N }[ 1 ?ş\\_chV\#dEM7`]G#2zJ;x9x=qW1cr^(㎜v#cy)Elzԃx3~HOoLOOL#;'MIN?418;rzgǭ`ӌO8 ^p{ i;=?-΃FO9=dZ˞8'hld|ÿNՌDl2 p@qڼWD &7?Lxq)4 4%AX,nI$۳ap22#=Ǡ˱W޻+QQ1D07}3B[?Ōn3?Rb-pqti  >'O9lss8] Zo rNx=O0T(3Ab9}1Jg bAc%M 2K;?Ï`r}o_?$fLۺRN3p8U{4_Pha变(%r~Vu.QBܠ8*:0r~tJKq}? Z~J;S$ l-Y82~: m2:g$0Xmf@K@,8 5߲8m]n]$9lY8\ZÀG*[Qc8^uoԣT|eS} *k'U1nz;bi3?A׏z-ӑ #$8ԃk8mFz d*cϯ5حA\=_uMS_G9oͣf("5Q5[~rpvp8IX@X`<8EmHczyGrU_4$b1Lzh6$qpO'9Y bP *>Rr2g4S݌# ?zK@`xU9ea1g >` }=sP]osܖ8Plwx yFr=^P'xf,9{=dqTC Azdum'אGJfS"5[w=3צ&#9 sJs璬8b ю9G&[, 0~]8y$9V9&3ݣKwc<7g#Nlx`vOl8Ti~<~nq*t!ȫ46 RM$dh"eF>;g#{WGWei]b2 H[;lOA8ݗLs*!#y !݃?/nHNjש=| Ё# җ CGAj]bg/ʧ<=?*o`5>Qh*o=}09E@m$hxUeԴ3g'n9[ pqۥR,] C1*H'p({ g( W˕Ƅ,A;V{mrpIB c.e+;ry}񁚣o0Oq|o3k_yߢ\$:l ^e z{*W9 NxyF3,8#`~VAҚ@=}NhFVӀ+4j?63JF9ǯnkDzQXXO|T,8$gÐy胲!$@ur;cס]5TĂp{rO=2zs#҆i˂gd.:`F28ssItB.ބHqNXn F ߾)x&xq\gD#7enG=x5c;XtW#Ӄ9+cetmo'9=Gk\PG dZ &ٝ r8 j==}k#@󷑂0rGC؎r#ۂ&fvnBrs~ÊĪpvzxg9lm ,:vc[vd c z>ѻ=OT:"O4i}Am!o{c}qc43=r~5 ;1SxD&уyҧQNp0$YidzdTB8>rAc~1}{dTLj\u'_İ$x=zxq=g(Igsҥ?Bh7ssޥQڋx^ߕGv9瞹ǯi Q~=ǜI`vM.QQ/>qaGۓBqqA'Lg#w~z|9y߶OL3;)r}zd9c'>J=Ga>9=T~:n5 ?ґg {w3eMeZ΁32=5f];C''~_G@}zddjy~'/l v$32(&c1\܄}7@2Ҿ7d;=wsw՘%}FJT>V{Az1I$3޺8Sbft8K$.=\{ uWKo|{3ֺ#ѕ=sd yLU pͰ ?*`%yٳ$y.%ĦG1ǒynu̇UXhq`:Q0C dgpQVn>~x^Y=vb=ڳq2v竨T$XxBO 䑸?(qZhXP6y9hh9{c4`>#qC9p9!;'rHۻP1nzMM+'Uo`QcJEdvA,2Bzz9w` mpI ^;Y4G$F#<.gnqmEQ h_de8kX~Vbd0l%8Œv^SekVIg eϵgܮ;_wfفsϰ#9#?vBIPzT8n|ͬN9+ \dWon2[f1̄waO$ץ&Kxn%>W W 2mO,J_ZkOD\^|/v.vK8G.qɀ}@y4J"ȥ 2 dם~\DoJIafGgFmQ#zHq0{5 Hfg Sz: syyjtMg^|c92%!|Ӯ1\*TsܜqrOlW; 1F[q8Nx㞕+pۡ Hc3'dVG<&#h8W8DjtI9(;G 5q"P pyCzh8R2yؠ;c12˂CO9rʎǓGO~lU?*~`7qCAro9;9Pq>%$G~QI۩T[;vI>U=m,,6ࠎ'q|gh9p@qzrp3[̊@1#WXͩbTbXVH03\6Tr`nvqN'e9hBH{瓟LtdHv65tsg[;rGB05  u;T}w9*u!RLfMq09irwjjRR_2ZI͘21ﻎt`.GǷJӋ6)K_Sq$ \U`8MOGcU +[=8<^8}?¹ 8IyQROqpG89Rԓ3Pʸ8L>r;[@ϯj6ݏ>r `V#Gn'A8>0rG{Ԁ霚``p>L oBI^z3:@+#9~?A0=O{})othic= L9pq}x4Q~穨lq+ٯhON9\>cCotD!Ŏzds*.y~=^_x:{_ZzqߚIݻ}Fs3׹:gݫEA8z߁}i}r$wEdm|sλF3zV5iX/ry#c=dc;`Wב[=2Gu\ `;k+GL`EcU4Nǯ\kb/`4#rG9}w- yh#q}yHg'G=8vuC{A< =zwB݌ $2;)'9z=!>c'ޗi gzdt9'( }q#8;ҌVJ 9{lc#m4s8ujw9{B@zLۯS 鎼Z#6IAt=yjP1ד:TʅRy:1߹nI-]$rI8NyWκᑶHl'8}KNmfxMZtxmg9Pyc89UYVᘟv읡HOzqK_^|[*+4Y"Xy0y8>6Uli1ژ/0dm fgWjAamYe&0f+ԥ=ɝcsʜǦ*!xxj" 6ۿi ~Fr>;~9$ d`c`X+0W;.r8Vڬ;䓴nl@>ⅨH9pHN]esޛRI}s`}JIX#vz ~N 5n7,9mA]:ҐЁ/#矯\Ynjq rU2BXm]+IG*@@ 'c}j㖥P xmAVÑUlTX|:mar*\@pyUY vUJ;_׃aRaBBFI9YG [9eǎ tR'F$c+(Ge`S9R88x3z_T)V`vל{W#??tORzҨ=H#l^W&6%_eI5~‡_Br1Q?ưwf4{Efo A= QA!8PT,b`y @Cr8dG~0==1'3ԓAcч<犤;=9=9Q׌㿮FyJMaңǷ {~]dq?֐ݱbAߍ;8?\qI<O Ox?֫-~In !`S>GNG%39$=9S㎞99_xn9#? zRMבb=#.~=AA#qǩ={?Μ#C9G & r@?(z}sVDP{zr ~z1 sJ$6S뚞K@A0#'Qnp9OpR$^in8qN{T/\s8;S<:O!a:2q:q~;Pyq~5<܆1\Q<9Q`0:(Ԥ<\\r#!N}k~mQAkt9mA1s`;㸮"@NQöN239юF"[U%f`uTgނ#f 2=k+C{=Nz#kN+njО9`띧n8<[૆)( qs,]:pd@ppH p8"鹇P< V3;peCWet[ TAM' v8I[Іe;TFfݒdߍ[S~ 9cKznJ[ ;#gCH@8Ҵ~v|耨]G-.%Jl Ծ耱`lWf?3z?)muTC=2@rGcCwvqΏNwcǾ S;xs^iG8'ކ)>c?0rsϵQu#' 2=m12GzS~(;}O={Jzg0;sUpaFztc^ u9=?ȡnd39%sҗ,<d~=n2}I3g;$x\?AۂOӾ;3M-~@pH|hܗA'Xg1[Wٞ<| e2}?qy⹽E``FFǥz}Qٜe̲ɰd$*gpH㷠/rToVW}8W8e|cpJ3%QIJ%rd+@e瞵ʿ!,X+ g;ֱSR?%NI篯n{dOʬpPxҺmL1ĆAp8ϱT/ʹv\)8iMf<$`䜎x7'eo\GP~`Ŵ*Q=sF7I69;)w@0v-IQsݜ@m!~EFpGf͛Cf(H/m(Q<>) D'kv Xf5cZPgJ|cxj 23v?Q泷ikJM},r1;=޹y-dF_\ LO䆣dX gNH##'4(~Bcgڭ w®xl'vg-MR:>e{ y`עNY,1[=< 2Z;IAz 㷡[);zsOO|>25FϮ/GqlXAztA: C-3u :䓐rqR P0 r1STQ-N~sg֯UgKm  {` V!* 3۷c׭F/r*B7ʮ})jp>`Bz{qɝp@l`r>Rx*8U3Җ޽C c'z4H%r@ :E-o'(d\"R@1#D_v]` `ms 3ׁzc Iw?ȩ*܂\wQՀ @lg+>l# C3? ]I*̃,TOB 77B9dQ3#0UN89Vk'S.vH<q tAiq$KiI*ʼnA(7mpqk\iwŸ8~`ʸ\9A߁ZF7vJrV}Z&`= ~`[ǥz ۓ"+/TnT!>ֻ7KE۩ňB^mw=7᭲:&@Wq&6!y{i>jey0]ePt=Ti%duϟ7dW99aʷUW%}G^k,lmՕcIθ qs!Gz}3G9qvUL+p VeH=O\1^;v=lc䑀@[܎@OJOe-l /f r{39?ʦ @Vc۠GQYxٷlLm$~8ŀXtE%_#]Ze ܮ* sP8@;VZMm]@Xq߃Wsne9۷ѠGc1PB9>۹瞕ZQ bU?JEs4NibB0 7,x9 ߞH30Xp_XZR|w_\(߭C9uȯ֗>*Nlv{|v8# s{Ӈ~It`t)~!ǿ?@cc ڗrs8ǭ>۹=q57ry׽7{G>7=1zš?Nsz.׮8 D[${V2hc] 0z>#^Ax+gp:'Έwxj-9tՠQ!F6A,:E{ 6)F̮S3?Zse yN8&SG(ٿR3׮2Cdy9=;8|v >3'qwRH!3nޣbnL=O@)Ŷ;9+Œrd _J"9P8ۍI9ǿ=)O'@68#ʰ~nA#3{gy=c^8 ~9;zN{u b} 璠?Zy*0vgoF90+oL^)`9$c.8g␐xv^u9$ cnLm|3ײ-o G $o\jH+&3`N3y9펕P` b@ ZZ.&%obkye1A q 㑚ЈoLV0$v$T~G4cR>N8lcrog|`fLOqכQݳӤ]D݆vzztӞqW;g#,wTI%xf%s yHT9[sڪ[![\rNy ~9<'r2zdF+Fp 8~`s4N@N6d΅9^v>RHmSӹ*07t8l1`Ԯ.8 VPx@cry0x\QkFz9o\P*?( z7´Krpz  r 烎ֱrT܀#1?03A#1&0FIPz7z%rHgk`TOʦS_l.I3M>Nܜ9% r: $$r@P:O&̂Xr.I yۊ;o;r:ʸn#$$[k0c0q@eW:l^O\VDI.$fz؁W6lcn>eFS>qZqzbL|7W$^F: q^ar2s@^ff*uTRA; v6pVvKo'!t4\K/ːOj-M[xTx}>Nq˺"9I07 -.%#ț̎3C/x<ծքWm5NS:;p05qn2FT {(evN O|W@9E^p39'zKavdD$ `s\gN*8# g)#h#cr;Awɑ$rЌU؅<(;A<sXKҟ3o#i#fS6k(߽r6C!`_c.hӝ08$@CfdPgG*'qWV/&v`~V@!^_#l@Y%@$2vlCSp=_>Y/ٲ0".hU`.IeH> &ri7{LJʒ,8a5sf Nq#Tqi:ROmcGʼ0#^ ̪IL@=~U9>15嫷Ss\5w{#-˟#88 #N*$ N㑸dx#}'t>Ftزׁ;'R sP{s<W1eչ@7H?ZFPrG q\Sh&w+`.#8ۃP4\=F }GZ"dx$~'R3 HlĞ@8j# $g !`*;y d$M=IhswNi(A>VB6\#j7G7n .Ei0e,xg=pT>,Ec q& "$:Ro wS>dY[w1PAaqN% $<ҵFrpY\@8VބKrfΣ;ւ^/FSv fATRwmfW9asRpC)XzjLiB2LdU=WqVڈ1yxlÞqԺ+ŤP;p@8899<s\ M U۶@8[ ;n;21iZIr>_,: M^T-i>[ť003Ԃ ~ogj:;Os?kqFcHj18J8럥xu$w}=xy9=i۞W+ZgwȧNzzŷH8'߯#$=>Ǣր͞1?Go^G8@QpqE28}*e8^=z W$ur@IΧ\Rd=ɁsL$0=<윎?8^<ΎUVNt&;ӿ~SuqflpqG(*>ui ;:g4?p8 =„|uron:~brWܣ1ص)褬ϓ~.^=ַefeײ k]v rX^FCdp=@ȕtY~gfWV(ן50I? <K?6[98ۀ pX` + /np@9xp~%r6Fd2F:dhr]B[<N2 zgbd' >lw\סKYmOtۤDqb/q| 9rO]A9Ö'"_Oc83`G\ϛ<݌FW*ˉÞP^8}j<X5%<;=2S1QRcN@g^6;8ϑ"2>^3^d7[o-FP_'';kHlovܮ;t@aۊۊ 1z`R4k麳iJlmu&/1"77QOVcCXR\t-@VPu;Ilg '9zz(oE'Wwm9ѕ<+Ky&]ۦU.:|'t=HC(>sL<9N)xI9"8cp3Ǩ@g: 瞞 J#@+tꀄ};c_Zk)z@d:s3=3ӟCMGzy4a9QQ'f'GL)tOVÞxQ<8~Cwd8aO2xGOڄ SӒ~xoA}_<0'Ӏx>S@8{*A9#Ԗ#^dQ 8St:tFjztq_xg)rOB=jsc_S٦Czg~QqyϩЄ=sϿ8##'=jE!q瑎3xԏZu#Hy9E==xҗ rA*yMb>zrI<ݿ§$c$ ǯ֔A}7ztqӓץLw>ip{>?OR.:r}Ş1unsק1z#&L8l{ZէGqN+\=7:]ȖM^˖rI9+۹b2O\'*hM>CR''188 tqn'4;?ǓFIꩫGx7>n&ؑM _H\*f0AS^^b/}.S.crJܛ` sٮjEOam.Ny2kO3{f;llN3&[=2GvJr7a2@=YH%G\^Fs,AnYnΘ[^N pc#܃(bnrۨNUw#,t Onc=噩o-N |yXw!6< mdcݹWE_/*=To_6~A |xrO<7C8aǝ(Q8#Zĸ Ht w~x$n<y vF9^3Vg}JxܯK*' r3nԻ>edqT>Rzyn ?.{1)q$\O`[>^';?ׄo?RF#qJ;š F^᳌gHH#=@2pB {͞IZ xn9@0m'sێ*Gpc`jT]e_H~Tu9] 2\`̿7:VS $/ʨ( qg˙,P`U;sAޥv-ffkۻHf3\'\9\Koz1+ E9g%8ˑ*I' P,L@v[^r~S/2',7dpqޤ{ˈlP{@#j?(#SFډ#͙b&]`6t@sbar81o0p\Řr>>o< rj';UVcyPʍWpS-c/2^>бtdxRBna@p3ׁValPH' I!Txjf<\c=-4Ѹ ^5 􁿫$Z{x7x8<` x;O`W>=8%A3Ԡ#a׃idqЁo@'GsžtLJ韥5)$(\=?ӊ\~:CGOUZ~^{S6Ƴy#/ЌjF@(Qe'yVuH;毞5(;Qwp[o8^]n&J{7(lJlsS/A3sOR~+=!=Tc8Ԝ=h<Âcێ~UI+,9#'-ˀʌe2sМ3V##1;mọ*#n<:KV3ra[[8P+)]܆arFk6OS:x]v9,9Hk6a/ (rѷ$cӌk6o@`0ڡ1x; @9ڻBN7snю٩eGsbW%z}??p@'+s%jz$z@'8#y?_ 0:r=Mqdz>3=$ qK8Wx'?JO2;S-8>/7 9#zq3y#6ӊhb<~;qzPQ;ל06#DY3& +*y{d5кxΎu ` w Ձ&[ e8mr޴ՙ" "l6xҤ [f;ve3שzI F$ߔz؂{L8Džl}"+;wR/sI9z*yB3ҁr ϶y g=:S[otn9 `Bb=I%H^0I瞟=6^\LaݻʨV8ָg{ѵ9rz7^@B$u8$?:Ɉr90s?v(cUbIv zpF㞵G,rCr%d<0+[xdZX3+(Q>|?N֢hE*]!BA*oDhϢ2!!#v1\M@2Π T F14D%fdJ"e38#hRrp@qun*Pm{1L)hٹN.0wz-]IBCGO\݃VGv`~NY@;{r=N;ܿ1?x{ھ;xϰLC08۹ 2R8\Fw 2D# kܧTvbYea u^kVXyRAːFp{ZƤbcP|ecm_^avWv2rp韩Vu8 n~RH\\BUyX ɌiVtlr=z ȕ1FBm{t#|¾DOAݒTϦ; b3ݱ շ}>D{9 xN :Ȅ` #$rq1ڥ=~vZ ga;::r:S11nId#֝ 3ɕ~VI?1?>8 sK2p[5|pN>9@9 5cr (uGNrbg fJ Tキ j,'!ȌyFm2cPOp8F\2[F1;Cp[8=ҙq X:u!ZQΑ)8gPv<+Ge\=H`v<m?{CYٷp'9b:'2 NFdR:cA~= ^٥B `̡9Q^x*nMŒgpw <*kA,MXi|'',T~fn[DS E<岻v6==j2ظ]>tģ `Sӯ/ۃ5>B PUaRǓN#Ipv2W$(R@/sPzp:vɉ2gf46ver1wx3ҪRHr7H˻8'j{qxd308;zҘ!?2g3CsPAé>A u=+R  Uf\1 T?++9C2pOӸcة,0 ?ýTC =~c(4fL3:J{P$r:cbo+Ǵ0qfs G (!`N3֡W Tckq{@oQnFy4\!B$呱<>:3)w%k:-bo]A`BaNcg/BtHe2zԮCǹ#VA,G;Qa={ 9PpS=)`ׅ=DjC݇߸#5S+,ʄ$$b8q8TyR}O?xke60AaۧJnLscnPpI>9y#qw};p/1)5Q> NI^A`Zg . ŽvUFG9sҥxӀ66Bz1I$ zs/-*C4 ?0;Pl|pJ+UGmA#\ǡ ah=1_Z5V<fA^HGt=x s)JƄ|}r=**B8VȆ5H+$;cz[X F Qep{zsWTF `=0=;T{"bE%Œ3'$|<0l:\qf޾"RWW#pgo|rzN8?Zkw>%bT}#ns[;p錃xW!|d ?=G4<چ8OsFk;4!'92>?viI'rO8RORc98ϹӚWЫwrA<Sя; w# gߵqwox9ds;,~#|'A }y^#rd8`'W[y.1&ߙW@eEؐ}(aqq[y=3ʗ1[֦A70FA=8G /}לK8=zr=xz1x!w1ҩm #u^}*\uo_>uǿ|dR[L`x$X~xe$N{ۥ' FrF|?Rm rxa @wS{*Dl0pw`s; 1,*Gwgqh՟CxW@I]f0~~qqPxӠl 8( F8^][ʷ;{IH˜>G^d>J*>@%r:WAm̃ <)z;V]Ȣ0S{cp{jhA ڇIk̗юp0m̾܎1rAgu5"猃ܹtÞ#f;WFR zi!d IaU:cpQ9Op1^VKU|f}L.0B).W+17qUCC m8':r}J[79>DcŒ=󫐌O+dwXg^ڙNv׏kpPO'ӊce 1ETx>Mhde.wHX{}kj2U*AMcW>;0\F{j(ǖ=w0SsiAN HRǧ>ǰMM>bq9̠RWp8R20e8Uv3Ǯ;SB Ϊne9a}X皝Vl.wIlgt.q8&9u%l R'8ӹjC6En2Ňf >ﶆ<0*pzN)ƣ];\ $ܠsj躍pCzA*G3t-,)l6v`|sjInSgɵW92X5UXIP1l__ʮǬpys=[w/b@w%qN:U'n_HÂ>l:u Tj.Ml]h1`sL֓K&ޤÖ83:p rW6󃻿ӌg%rz HztZ=kr$W7Nxn3u9ȩEH;N[ԎI>ܔL6A0p}nbzCu<];U''<*W?F!xStHXٜv`l?.sA9!B1J:78)Z}Xew1)p;vֹ7#501?7=iߖ`z9P9>pMd۴2x~zoXI`09>Oa%NMMhspaҽG`1Skնw=6{]hc:{y4<'O}I [\JLH?jh(8=ixz1)B{#ӾsK0=O:g~4gԌjA<  ?Z]@ǎU듓Tbz`}c֩9v4ܐ'As{qzg։lL>9c( ~y0%.8cjAw>=scgLӞ @Ew:ѿ=Iӂ1@!>t?N~<{cޚ(RsӓސV< wzJA&}rOsMVq:Jnsn? j+ ,GRd7װOz>DE=qzUwrPAvo̢x'?2gO;az'CWa0 ӮMpjRiw-eg>:7>"# #?2^ǽxZkDftX8. }W+;םO6żaVUN;;W2@t88-Ă:}{{y֥U *)8#w_֒;SPBĆ}J2ۇٞn1%ʑ[$H t+'H0-@#޻]ՏB<Os㜟_T2eX02De$<v)79<$(#8W6`6qyi*bByev@Ǐz+H69sR3> u8|`HH튪01q^ ;*$(X'1ǿ5[M9bXq?nx#6Xȼy T,ԑҵGyn~P#O.$ N mʸd†澠,v2#Į ܊e%Mxإ=|'حGE F(A2Ozw$1{ G5}x:V;NO+3W4n!Wq1 }=LK%d)\c61 dUN Jnk_S:a FGx/`3xtSiǀ3ϷӾ+-n}=p1ߌgWErXHc$Gλ՜8:&z#xibK=T!Fy=0kϵ=\? VAm[^w(+\$d~^铰n9B=+jV} KlvGLtp}0kcv =*b4^FxRXXsS}G}Agw=E&\d 9}jPwdr r8<:dzӵhGI%ATҀӌGǹk)S{*`1sI`GdSwΣOq*p<^28G^'谊 `A=?t2󑌟^=PLdl?>ÜQ8"0$`z<;a4CAI={64a@ti: ߌ#=z(lON}?KߧOz21ϩAq߽!ݱ :{z9z?p0}NOoO֓^ۆ2.| ('8={߹z9#4&J9\p==G_R? Z!g8gS(=AR898Njʀn:yDïOc=R/r89sZ͓Te8j8ݵ?y@Z2Tޏϖ>y/?{>v7S1S|p;G#{7Kvcq28cFpi$yqM=zi܋ssO#ʌfrbrkO}ܮyեݥR[{[c ,>\R` N2AZ;7H $ُk/Qm۶=:j]>㡷k`LY"Ey?8$D}3+Z|[7yw$bTV[.4ωKĺՖq]J =H|~ ZNмg(ڡGo+ւ"'S,V5rP]N@ܤ)H xZs̬̠Y2;Oo\uRG=GVvuIh gj#!R~B2WӾks-݊c ddawg+A ;vg+DX?1Av:t?J9¾'یtGqoR L+j̼ nt6;\줵GާDR0RW{!C, ˠR*ٴsJާgԤUq,A>_Ӷ>I8d}ŖE|2z 8k'=C dˎ!s0ߌ/zm8ɩ5EԈ1&ZU ! 2r1ֱmtCC xaҒ9{TT KuyՖ;rCؚ*|R}.z#66es=qJ19ko=yOOQ^:g/T$qSڦ_pHǧNZ@<L`ϵJ2Or8҅Ls?ެ:<UG9?*pXF;b"w\ 1ϸp0=wj%÷s].x3˨7ݱQ#?צhKP1=W'!::ϯ۠'=hD\n1_֘8Pq}& 9'#{`;s=[=Z"[==y3MHqq.1?69=h@wu4=9?R9M"Dg~9i?`4G^۞8q휜,44>` ~ӠG.)߯װwzt?CZ!U1zIkIzCQgt'zQ%A8pIwT7  yRQsA9죵5ScT4v)@p6XaICp;XF.G;c&[<{S2n>bۏwT`zgҐ"t,0;}ݠORy=+F$V1儚@T'-'#'dvV&U2VЩ콺VڥIo ǎT5Ș*=iĸ;An^Lck)1[0| )\l@#h;z?Ο`a* qSb+'1#soN9!6xmA6ۜ1f^^UGQRYc3+VivնuztWx_7.Q"69l̑ [|j㡭 Fr{a .sv`PHOBQG~ݹFFU}*i]VMpGw0~.zw$3>Yoq?"CCdU'$o'J) GA󞣽WTn;@$sJYĶ"d @ior*ShQ!Vᑎ:y$D;܎]tزH-mt$ 6H,$k7E VL$7͐9 :& >gKaEW9ryWf%nS{;ѩ 6DO=&'tͦ"DME  (g cU$סSՁaĹ[bT]JP' s8u~XLa5JnGD%ê+`;NCVcҷ<„B[j>:aBsfS`#@b/4{ 7\8g{N я!W*{u늼S'}x5߾ݟ_E{ 3Kar7qsxTnX`@Q뎝~u7$F>~]UZ62H>G<֔gԟWoz;nk ܮA#jI8U%J3ǯ]kG0.[2 :u#\9^@W+0`U$w%D+! sӭlYؙZ7sIʓsJ&NtQOtݼI w=G^FTƮx e?]i]5_yZ~נ ۨ?5ZؠPFv' ;u޽y2٦bتsӜfݑH<ѹ7l;Aci8H?x$srFKnb0Hj=py Fv1z zq9ᲧpI%xRtڹbﭗȁьqzg#׽A#JK.z?{ gv9Er9[yR/lJ-'FlQ@2ǦzqS'S̼ʛWoܑ)@w3=l5npL"GC=(10܍G9pG ;tpŘ WzfuJ"T-³ 1;z ~ԃiO`z䓞>\Xyͫϒq t*H̛CT>Fm%KyB;K`=jYu'5,+Ln+$vvJ~Rckn8 qޢF-!nx>HQ|ý&efC&G#ҤЉ;.ÂK7L>NƦC˒c`HQ;VP'灌Bvdf$TL@Rrq.ͼUm$>ir1܍$x #xtɨVжdzERWOH[h/0%Q3lUyJw0PY"sAg>+k= qu͈+ʧpPXdEk2n2cny89 De7R &ހEc+‚~w ͘ 2Nk3qqΜdB&HfS6 OFzU9$o Ir:m99iNԘӊ+o!vݹldUS##vA5Rh#!q[-ǧRU%8q}kdsUDʹ>Qwm \\N#Xrx9⟲WtPdFJ:y㚿+`PrvwIGyT u5U9ݒ=S9!У\VG!yH8ӯOY_ymE͍3ꫜ.ӞON*q^CHG*\,1mٟ>|à-t\VFW!1<9eQ␖.[?(R1@\ FB{2+hg=]Ξc!#+[+9ȩn 8PI<)jɾT\ ^3OJw>vƐtSӥ95 \d{\JSi6cО<{gYmvrNׯ5Ve]5U'js'#ۊfWe@ s}* Lp6 ]7a8b=~^qǿ"FHb~Pr~]Ԏ)|"iN6qUBbuG98@ \vDP*p;T!ǧ@B1BHܻA'LCDPrI ;LqNP1'gL2vW^6FG~գ2nY ` ry 9+ޖ,眮Cgv}rrGai@Fﻓ#ŚZ np8Qu⻽,1P2@`tǽ{Oƽo<|k$I0>Fs3vT `G>zOˀH?1^o{+nsX/l~UOShyY=3Fc=\<3`a`mI0z"} >%0gӗ px~G'rU rnwl8uF࣢@oztiRB3)y3`G =;p~bx nLdcevPwNF@9?x0}hUn n tv~e Xcَ;pOJl60BCc,1מ{}kIݖ޲]W0mFN0Cskǀ8=:Mēz tbpyMbI%A'$7 -Qڪ rNc'ۜ7~~Whsy,TnBǝ.sNq1֢*WS8x֝n71*)vSyS^tr]=fAʇT~9ֺm#P{Ig_1f!K !a?w uOb䚾qgM&GZx@nrr@eoBklKkȇ̇?u xoz**Zk&n49s5Zdzg^n#moF_d|JoWfb. ÇRrz< Fm-msoH^F\ :X,]t|n+=sR~GV6A\d$zn۞npsr$9C8~L8#b[ː:N@)E ,Y]Oh?0pJ'9?Jڪ$,NUW9O43C#ңeFy鞕en~;0`#V-s>F:F15cD`aUv"[Ra+qӽRF/ l60 @=3(,7`g9-lӓN5Tm#*]]R5PF=%T;9":.~B<k6]Hv*y; }}}Ż0D-^*y%OT?ژ%r~axGr||v#x5ۜŀ$gNygwBc6gS{ZMDᶒ8 18󞣭0;cVg989G5,3$ߌa9sI˸:\Yv~:RH 7mRفm'X1DI!>d{nrSp8>E8l^=A~5/X|CLu?^M5 8Q0ۿidgRa9xK9GsHt??GT?YE=8'{j°~Gp8Aǡ4$oPN']L9n{PK%}8{A^:q^sCǯxTAf3#g9ǣcsM ?$89?Rzb8GAI!ݾJO㎣9G@xϡǷ[5g=0}=.# z5?N~;O#i`d۠s r{{M9U# sϥP ϸ9=NLcF2}2z~T= @>qǿ?|%$+q>`1U+5,ZϺe)#Y[ TWAC1_u-8щsU49=Aէl%y85#$~<)/RWAd U⼡?ɪgP:qc2>eq [RGVp׸DgwK,ĮiC#܎ⷣ qnb盋Lȥ y9# 0OA{mSA:F Pxs^?^GYړ7$g6fxS%|zNNwg zя>*lc*1wZO)9i)z>枓;sw˞G_HnIgN2Hʰ݀==r:bu.؂` 8J6]8ȍ\m\UOc. 7?ɵʕw\y;C|pr;*0OZ͛ w*9:󜟛 \J'`d=t? ӜO k9is[$z5FG KW9{ټ;?,0rQUz-0B0A?[E{3{Sjb-¬ʡxPP>1^!@ T(rsޡ0wp  m'̼O֚+18uPO+H xZ,Y.>l#4=-~[M$t*@-zQCg*06w8梧BGu.1ʆajz?AzDGφO` 'C^V%^Kz7dsU4A&<;cF| y\>A@sA'׷Ҝ}ǯ36q9۞: <e7^W jg漣Sxܓ66:_a](fm[iQWsqxꏡΞɹ@Sp\`ϞrkЏAY#vn) 6G^Mbp#H;8ZV} ) ݜu軈VQ@p ngש#U&E_(gERw=G^sv2(8 iuvM̒~3<7qֶ} ,YF{A(4U=$ZLP9#\|s]C0=ZZge8^=FL篹JM1\:6 NjwT9铎4cOsc敀f$;;~;؎;鷞G\g1c_خ[IS "rHϹnzr1QO#}>08+q?w`$:vJR;#"nl }NF=p9ʭ;kN62cǶHQg #R~Xvw3SARzjmk'0Ozqߞx$w?(<た=*Ž<="N} ӎ H縫]W0uKYd㞽^_qt۞}~GAr5Zcx.xʂy H<+.Knv-ЌH 8WPV>RnOdf`~Ve#+~iFė:XtZ8.$# 1VeFssUݩlyo+p2l;ҽkG"mHʒ#ܹx9vv❩cjM 2lq~g55_1ф|FAx{"Fm_:\j c-%Iec0}8EX d23O\} zYvFOvpL*3Jd'G$1Y A\M|1$u ꦶ9꘣2:#v}xKI X Cz}9thsG!WgF7m=qWXvnF}rKؖ"cMp@ z#f=ӜmADP{q) pI*݅Lzcw78$=jpݖg9[{r aN>e r1rr {2'ֵ6=_̏͂,rG1U'/`r2}G9Esc8>brQ^|+L^n*IdJù? {؎jy'oT7 ң,Nsycߩh7pG*^OOJ@܀3gHI.|Wnpx8 3p:ǷrijeWB&'n>U=d =:Us)nk-G<>"ZYi]8Ly3HwmA灓ZEh`j|9eA>`[,:tTc8 s'LHlZ:T*`{ݼчn֍Ŵ.#X*΁dV9g-ʉ-܍gl,! YU᧜<}vY"VݶI 8$n8pb=Z[ƬNBb gtȪR*+L%r +CWw)y>6"*p9jf?ٳ9>^8rBE=j[KRI]_OkGލp"oFMDVV͊X۳T'OȤ݁+X+J03Fڤ( c֞aq'߇`?:LcCq(Չ$QMY ǡOQJ`U1giP>N L=@$H Ʋ;IoZ͓B<2 ʬ?֐s2`"@ >l9utU`A23 3$wiQ^7.wbU󚵩NQ專@#-Ӹ^eE;y?'?ReU*"Сwo(0szFsqG~~b=0'0Gaޗ{gp^\zw41)t: -ؿw\zN}iy0G㞧ސÞHszdtzfXS߈㠧mv%3b3:1Aǧך- ,>RFpO\R<8@Ϊ$!n9dtQ8=Hq郌wӵ1~rW:M㞼>֚$c9>֜1c*%ltr7~8郓ׯZL~#M^ߥiЖ;gzwBNq>Rl/>8?x;r:P?Xgyi ,FIt9>@@g=AGU4wlqw9?FHy_sIzy88(ww xcx0G@x8{JG'ۜp}qv#<ǯ41pQ8lo ߅GP<`=) s'>4P=߯qKOGI3דF~ $c6#Zh:ywI ;Qq pI\w gZҏu~IĝIJ\aqr9\cLLprRBs vJ#ƾiܬIm n3Wn/[ipr䑍g8}VdU&5]F.BQ]478RұQ+̥sX;zO!I i9v^G8VTT|'nFR{g5RZ@ 2 ' ܎jUPxʌ5"L_cR!IHq鞹Sǹf\HUCӦ=JJmcxDHgP ] kZ)Sy|UʯRIsx<˩or9]6A{ ^^\{s\.)*A8{T5tjf9:IoV@7۾OSN*|lr+nll`.KLp-׀8<> [f\q洯Kj~Gϡݾぴd+i{sw=pG͎k}+~}?^&9u$=G)<>8#=JN1:_Ɲqq} KBg=?<_^:S`Gbs}:?c19Aazd*;4-G6=@cBT͸}RpK=z`~ׯȏl'0VVT+mNTwH58+uw@J.1@r<|ʅ\sj\-`Iwq̍%pc߭UiW`fC 0+' Sj-طmq(l̈0ԌOnXj9p df#zR4R;Xn//PYgxߥindCr[@ktu0ceG̐pwq up]@ ټG'N:3,F]n_"h;[ 0rOJmcDE4q.\`cV6ɧSWZ)L@khFv3|8y\qXcx+u%k8CۏFW)<La,z_[YJϰS\\룚0T3lGkeCS}ФTWM֚Mo}~L 0' ݖ'޹93pAOpGC־ABWxufi.2oaTE'向;ҽ[zL[ZHKe}3nfGHTaUHcxvч3ϒӥi|}}P@ ǵ{6 HW9sν*qI~֩vDX s֘U2:s랴Iݜ m &x#ƸmFohrG⎆RgkO;An 7 +1n|}ݼ ^}}nn3H>V`r9=y4~AC$bTTS:c֪lSRXIR \ % |ȹ“@x{WBZ_frTTRA~M{g-lp$IEܷ|DƑ21_,,# +aEʲp:3\Ϊr LGrیsqNtn䏎JPU1Fj-Фi2P xϹUgRv,Kw9a9]ZHޱ0?/ {֨> w 2=H'=WoSrn毵E<;A遗 |cCq |ۛ%*pFxcJ/3ɳYNX~b iGt䃆^?zHI=b%KFf`>?1~t\fʃ吥w\ knm)A̍,l+G4qh9] \ߐv{¢kWq^[obsݫs*?³Ӝk1d0c=r3=铱=2F31p0>V 3i9 #Cu[ >R J#>y][#['@Gߝ I #5V~RV]Oje>܆*x9?/ӿz\jqhZlR>Sk1ק$i8Ǯp2?u)<sӜi='C+]I*H=@}iH=z aۡp?=qr @9>QsdrT(#Ml]qQjh s\H9`T#v~R$QX }1ԎAόH'<}V#e8$ep3qMĒ `فLh^2Շrjodp3W|=BE:2MG=ryX;n=3:QYSS57l yG*0;= _?;Dle orzz塬fwS l9oc$Jю6˝cHb=kҵ8'̢T]yO=+n<ܭ=8Z寵*!rzN;g?Z$66FA? 2k幨9ڵBxSUO>ֱzC_շB (򎿨tA9q C޾)sZspѯ˷ςF9H{U(NI<5Kor֧3goK`x8ƼS,^Ic&E*u0IlO0*Ln*G?(oPF3X쫓r3w~= y=|(H6˃$cpxR 7pdp~A;j! tazkEI8N2Ð0xf2h2MI pTv g:S~rtFH@1ˡ!X@lX~eDw4NC; @r\2?`7x 2vq:'nd 0vH!CҪ:IEph.j xQw >򧒼[g݅ʣ yAڴWr@%7 ?QR О{MKGM@s wEe%I{S{;o&Cd#[aCl“t @4/֞RXHrxa1V@{:}ǀ}= 6 `BxI֥dy"B#a"V$>W2ho% %f |ǑҠ~}ѝ\*瞿ʝ: ]sqϥo*e6am sߧ֫c98]TaU3 `}q^wrQF1I䑞UNzGVo,cp\<nTC Ǟ)'zPjb8 w r9@FxXXS86)둻Qw<q@C'$ʜerww99!Ik#n#8 m2 nXqG9\O*-} == f{?6a&pXr7 Xf$sԐ GF? Ct $1po= {u:YGtD3ȰYUsO:Qd:f7R[ȩ+$F]wnAǽtzG&_Y Tu3$OUeF_.3<W~X7[m^mHٴzi6$>_܌/8Ӄ1M+y-'K7c exII^ݪi%#~M_2#X s(|v#ߊaulyXa7n5#  EI>w<=W$u~;w>D2>73؎^"# edlϵ~U`>&r>X0ݥ} 6c^9팏QQ]GNvRϓ5 ŕ7eCH޼LNU\Xc{}k7 UOy d x9鞇ӄ^>f.FNzHbc9qcyg!2Ux=GLж9g>p;{s.ޙc܊AmFxMl209Gl2p8Jh8 =J '9IAAVt7NGцy=abˌ0<?H < GnyyPTFK1+푹#:ޜ# `l`}z(leF0G< D>l}ܖ㡤;aoI%G^9]GRԯԟz!NUyI'w,sIpn'9Ёj(B6`3zʽOA A>wecZp34RA9U=tn 6v mAʾoX7;(짟N #sE|KOz #yǶOn=0@=*z n7끎MsOJϩcw|>(8ϨE 9vJ29G'O0>\^܂9?=9ǧNcfc*`w>)F;>?l8$s9)@dOɗۧ$Ƭ~]zc&ӓRL)c-@p{TILdpVvWa/7gi8+?6JӜk;!nW# Ob9>Cd*0|̹Euvn#H^_ fD/cU)VyUIO c1#N;ӷ~1.ylNB[!~n3)2iH¾[wEa^"Ipdp71Yva#wOt=fH?"܂5$u9'lW0u7-͏^coEyɝqО߯5g#aNO죳 Wvqwk3n$pzzzqVLY=7p c}3ּ}jG_jg?wyz[o4bN6ParG~ϱԵ,4 = vcߠNq z¦E"U9@IǷ5/v>lH'<`gy10`mܠ\tqw g۴#LtJ!I=JYb~HNtI=ۧ9^2gp{y!'#F81dGҍxzcy$QqՁg@9$7\PʹQw=֘FNGFzTeH=i#Ldv^ gC@>}=?oN*czqOUH2:qgZ/BHOAs?T89Rz(F3?Znho>>zЉlv6یc^kxu +F;NGn3$¸~LHqOSNoNGH0:0N ǥ0&lu?"s'ӭR$t#OR& 8fСO^3{uP3p g8_ך֜B1MI/o6ݏ#׵qEbX8lּV$[(<{^6Skmt|>4:Ѹf1\V:?9!6?^z{Z#-Y^NiQJNqQ}El2KNڅ 4eUmF}j1][KlB}dϠt{9Pnhe׈;\=oľ%Dg#oc,8==ƒOOT:n3(4ϝ̗WyBK,j\)<Uw,㐆sg1Һpk@)ɽ=vtFI,dG 5GT1㟘!?0(3½oqy$pdbHQp^8H;qUE~P0$sǚ橩 dg8Ҭ̛@#5ZGܝ##=Һ?Mǧ·W,C,V+=39εd(\"  Eqׯ>r˫ O8=(9#^5xdE [n0k/lRT.Aym&y=#PѭZ#0˘f_>`Wra~#f8=@7a*w##ݵpw9#2a;:w9NOBqckghv?{;/Qc?X9LNh۴08b' 8ݳNq7pϠP9ʻH'q`v1zfF4<''x8oA rx 3Na{^#RƷ/. ]fwrC]2#P~Xia[b g }qN3ҭc [wdq18ob\n2Y5ՎCYL[\xs[PF7>8j4: > p9y2O0x4n݊TV TE304(I1N؎hFUa  dǭ{E6vFq* 1y7tF+PՏ23ˍKY`*Ԉ3':qnuKreEFo99^9 l쁽M'dTLq .C6dk.>4{(^ "#e*JH$'D3* 0*!UFw#+Zʹ|m҂C;  sWLy]I9^Dhء]r w6:x]n r\eHggpqv,}z/#Ѵ[{cYdʔ: {8zNkr"GhlfVR*$4H:Xn2oʃcVmF+ ^F}ʞg"n(EDU<\x]玽OCq?_x#=I:1$sמwpxHA秽?'yA sSv#Ij&9$& c׀s9t8˟l\`gn=:s_zK`#rq8p*) !:p3< 8q}am?6:ztO-O^*zӏ`8u9A 09{ d=y'>M`uNʐtgSzt:z`gsv4+ض[)N^p"Yrn^A뮚*U,k*\.tRWۡ2#v[{ed~scb2vjxT1paTvܹ ÌG$kc"wNˆO1݌ {xmVBos#FhJ.JP P@ !Qݍ$0y*'mmOfzFػՁ띸nw\s]n(qIm$+|ʡcW ҿZVE3b̌Ǐ*2{\8ݏJHC Z @)U'ē{~UΑs)Ta|NEBk&dF r1 0=8ҜȾypg1sSe$U%#lḧ́v䲮 (?^3 xqdbES:>kA6jrHLF<+Z#lVM!؇?&$У i\w&9$q<`t֡ѕNd>QBrAE|J;3,lJ=7Ca]8w2j/v"E 0N;N=?j? d/I:׫Gb]!{URBycNVL,Co0 ~rQN!^GS71ȡ@ $3}:͏9| &[#z?Cؔ&ǂ `2ጇ1q41_vt>ۆNsV3!R;vyb7b@m{!7q(*{m#'>D}NF \͐觠1 pTf~Qc4 Fz ?0\guwsy<'(~RCCI<E(1,NnG x89)=w%I*3r[#$~5JUj4,vcWy5R(fV/#޹fs~m 9?B{qҦI Hf@ 3 b{}z8;r&U7nvyA~Bk5j܅aыϥ' M&EdBǧ\$Hً\ vM?.բfB…,< 4\ԁWA2@~{=H_.y?#3Bꡁ"`BtCk[IsS$7ARb5BV}IЖ5UuY9uZ͟p8ݙmpG_\ö>J ۻ3W=;XC# yEZ>:$QQ208tUM 22AN?|;E%}v_~GUM^:3uV88=9ҾFO"8J$f;>vYy8r9VcW^8t¹ $73q;֑ղv9#q"P۰N+͵-EHs3ťO?B8OƳic\`:^o{0$dzϽ9+G˚=kWe'q7{tWeXݑ5U~c F,~p\`wPsl6B2x8{2 |݂ ǹp k(̧|U#2;:u8J;hLby\gq=x=xH'9''*o7ls'#{x4 )*T+gjAjo7,CT }̼V* A \2'PկR)߿{vF38yk>'d!r6d129J싃w/tYǵጀxh/YX@TFcqr:PI[s>MrFOFddW-C6d2L pぁЎJ{_'Y=NVRiOB`rwcn{\YYbBhrO˒:q׊سkm Q-,$gp[ 5EnA+ja_32HʀqA8 ܊p7SܟjGYH$͌pA &@^3:0nwru{zU1 僀rų,QHY2/Ńc֦6 ]6*(=}iԑS%^搰 aX%Հ<`c*̙ub0,7SBOEV7듞TsOb$!CuP1Z ܡ1Bw.p~Е݂OAm HǗC'mk$ v ;Ip?:]*NZ5~wV:[]&Fznc EHF27\ F9Tmu8kԲgi:daz̤slJ7>R:4e=08Z˕5YRgoeI>{Uu2;`s g]Lr-HaxcV2&{--$}tN;Xr36XoؤrT`sưu)84>ރ uC)Jְn$R>\\0h;Pc peS5r/ >|2;PSey-pkYap?&i1˸ '5]pp ;<^:7)E) ОU9bJHnē\ƶe>ɗlde8_JZ5SPq/b ׹TiU%G\.]1{!w@#IbWPF%둗G\¹kp6 #9~lg3J#"`ӱ@gݸbz 2+|Ԏ8ZƤw&Fzx7R*S",D9 }F< t/SpBOr{,%8Ўs;RoG #qz8r2O'ק #Tu{q|`H:q -w`m8<֤ǯl_jL>Ue$ S [?Þv ;O#ٲ=hBF2[zl=AР;wrTcؚlhOہ\c5#w`` gߘ ;v $awt;~TFqy<֜bgcZpUxWPI1׵P,J`\Z=V x=?g$+S-zaD88nyWe1X@y=y#g5Cxy'b|l諎@9~JI݂_*n!Aϥ`͉XR͸)8%1h/u\?TJB(\QiI_Il%$9FS簬$*0v`g4>[)ܸ8f8S[ 3pjSrLANA_^qQ7 O<GNݩt6oqFUA%``W'VP8G;vN~`A*05|\A%v 9^*d@0rF:>^P1q(vxm靸 㷷?SC͛y#$gԑ`5vuڈ@,<(nWS.Ć 6F0(+;Z *#v=OjϾWfI$ON:VrVfao' Cc= ګ;us#a2zn,:AypT9~t%ԔxãP?aB`ty=+$gw[|: H*;<ݩ*\)DU㏛ׁJZC&Ո8Ŋ`xv;BN2MOWLpa] =57D ,0ϯN+5fpәU{F39;`X7` S b;Hy]@ xctpc<R RsOZliZB.BP#Üc 9^[މ&kd؝KO#sߊ’c:n|m7' t?.Kys><׬̮yjBXj:t^.cecF({w-.捖Mp#5E:R1nQZy&`rQngT-SF1Wx`Ⴑ9䜌8|4R:5f>hJ YK q[ʂIobP2ANxgk\ݧ#ߛ9]q؎_?!=(}xzY0OG 6w=xH+:sJ}OO=8) g ywctKdHd90q'AGQ{O>fܜ'$OL>l?{q'9q $+jq12zq*S'=?8=svd6>n9:99jBC>]|a dG?NOZ$06vsR s#ڝt w뜏 6ٻS9 #'<=Pg9'=V1t[ӏ;98uֹjLU='LpON<9FnSסb ʼ#ѡS%\fc$d^*Rgg}j22x :}}녫h;VgnGSB 5vO8 gwZ1KcpyҌ sJlv9=G8988϶0?Wj;{@?= =$3?/Ji1>uǥSz|CN߯^`Wa]NgxA3',s=;j?N}=}}n*l!>'<~_\AځGNzEH! 9㎞3sI2sצqZ@>" W9vg)uw aߌצzQ=99(antЏSsP'<: _=qyI_a:s 191ןo/L}1qOּ^FcRD Jc=sH+|$yTR1UuGzÈCo,sdd`>YA6{ Y661#¿@Xj=Y]r60X |zr3w8㟙qz(cgcºn2&3;ᶟ]J9|W w:nSzT|V<7ǬY-2Yӆzg2kɑ,J r=3\XzF[9-39Ǯ)Alt8Q׍q\1='<'r7sۀ0B+.o0 2iroB $c5RuWry=;}!gpX) qgJ1FlyrN9ێ@ˀc 8# `wƊarrz0`3=Yp 0$`*liaPb2p[kJ pAk< ̊Tn8:9Ғ{nllt)dC<c0'q;=xet-#>ld>¼{վXؕ_apUpSIE[w6 V_LN+Oݱ[}~G;".!Fb*3qj]۵r /<.R}u:ԔQ%.dV**[tx4qd}(M_i KOMɀB\oÜq03_Id$VׯM=^Lkxn()]R9<&7|y$`㏐AEe룈s1K182~r*~S#-z*3Hd`OF8ۥm- \>c!{cw\Y w#nv 9{U}?u$q1}Ꭷ8Z:ro:RsWv}-H՟$pFpIt&&(sz`|.>.> GS|K:r8ǧ<)v}==^w1aYہN֚cx4¾^9O^8N:~G:㎝Q`cC3OBI!@Oc ӊ!Ӏ*+}J\qp!aG$uz1W\1sQK=8s8DZ:ノ=Bt q꿐I tϧS=z SBb'`cZC58ǯ}rG#C~ĒF SCC<gQ폼?p1{wlxON_2 h䃓ӐW59>ʅ5^אN9g95ew"OC-@ ~޴qIj+38!c~ `_kȯ+&tjTnH>gDdFp+ê's[N1ޣ>G#l;#M5<GOb/^a9wG{`o>^i o@N{f{c?ZEkQF8͏>?1©]ב-ッ0AL$d8ޖ0c<{UZ5;7g ^\jS|*;8ۍ ޘo$߇ZЮu @xs^M`.FCz>릞K~S\5bϝe}fj:q `A8N=+ЃV[JM~^xީ~\?}s+ʵmpǽ}"菜TrщUv3{ˋkERZx9,(6/8kkD:u{B-BxP W˖#նVז~Nў--$95h[]}# VLJ۾+MWnE$jSN޸&GZ+l5o#eRb]RRwnO 8\v.АvەUg 0*y^u8^~'<U#pL*ppTO< un=jZ%rI? m@囌 tHH&ZF@q'3Z2[Q:?1$s cZv7V{X}@Y*Jr]VGۈ=~@PpLt$ըAYA±DMLVo֒.ƛs#@f-\C!+A޽\ssUE GLgzՂ.Rl\1MZ1GBiǏp: "4h~*Ys֗rQZ=_-6`7=s~kn]JPۤl`blGJ}NqIV6xrƒk#:w$>#ԧ\0M:n|2ԭq%6ν엒>5,r\0[hXhPx ^zt㎧@'@=O\u(E0}33q8^#D83[ %>l,i2q(؆Vy'8~qNmzu9g.3ׯҕaOr~&X?I7qӧ pq=i_QXPGqOǡ}qWq4&LGN}?#N I0Hy2؜ڋ!~sӑ }?ƛz>݈z]{zʄFA`^ʛy=RKs9 xPLr3ӹ>>)!Xvq8ڜ6Ns׌? O{zC cGA> cu$r34v{P y< <02횞!mwmp:ZV;BN@1^7K庿C Xw89v< vyܙ$6w.:~ҍ<˙\8!]pV226s\ͻq "]w0~󮘭TyD9!)p:qOaq:R-[n}N*($7T\.ùESկ/&yȒIƫwQv1(J"F~Qk~eDlː9%Aۃ<;s[$~^t'=g3z1 Ŗ5 dK bQHHŹ|3]jڔټ#2<{ d GWcAY6O*ypmA3+EHB,6^>a;V|@!XD$g*Nps0jc{QIp r($sEV|*Xs@A`3I%GڳlN#w͂:`ߧ6ZD߰ rG̥xm}xzd1sN3n=¸ٗ\L_sm:B ghIn 1'8_fEA@F{c?3tj%#Ўts#=8(!^W=zg>✣Vcӎ)27w s9=;끜caG#AtR(L;{z1~7aFO'K'ڮ䐑x9q1Mנ@7ީױl8tȣiCO$z㜌<| hu8y* _{`f 3c"yU'k 8R;|]fV݀~`NGS@=<1J =C`7kD2*p 󑜁 [zB1Gcs\6Ίe6LBv‘=G D;g@pVXr N+Gw2 hlVUն˝そ+YKą>l8ҟW= s85ʼ)+yڠqәD1+I#;WvU&oQZ8X͑/8 qWX% $]& `X/N߉2g},@,Y"l k޴g:I&0Buoڭ*P[zieEBRHf,8c_n1R>b$ReV/ y'q95$nPT>Qߞq=X,SHg>|g {=Lv0FG'j$ϻ˿ucӷVG(Hg'_)VϬX d#<\#H7q\{z眎09inFXcۭZ%nQnvdʣ@x`7Q 9닒3ot=*/5ChVbO i5_ÌS$mm >n}~<$d)WhSK]Jw1bԬ#3f%zYFH"3`YXo}p8ii#>v9d+,r?+s+ֺ0r2'%ZUIr㜎wu^ɥ˝r[i- qlz׵$|2NO(8 sk]OSOZkZw,rz~aOuAs2O(G2-ɳ q,c[w,Ge^|T5Dx>+7$dVQxFFN(Ϸ^ywgQ"=T80Nw@Ý0v gE&m>_ }xQ.19Œ)N9ϷTv`JddȬ0NTwdN29d{TEk9y0ٴ.㌀Hy=8#qP rH#1F+dtJ{|#>QP(pNl־%19,~PW8L$]6ʣ =G^՟6ʱ9nW۲8?͏0ǒ}x=k: ݘ (9s4m6olpʂIw)#+oc;@Y8G~=DmWԆu@ K錎k<FrԾux4Bor[NWAUm nBXtܣ=:p(E# Qe@c8$aO$XYD11G94Dr=~eu;U:b>=wHy6$7t=hlizD\̄A=1WD1) AG'qr7ΨW2id=;W<ƒ$ +81'Q XC0I=yLSʩP$3Ӝ?JS`aă18S''~Q)q GcJ,OvBp6IeaE?UB7*8'gsޛbM"me90;A0{y*g"FOEZ{t92 #W VAВ3Air ;rPqiW!8opaV8?̚.A ;cî@Q@r 1 ~r\|ϰ0pF6;cl#0v9G#$ac6=0D9GrT)pLGqnr:,~ePۊg I f.H0Bdy8][b A>\lsctǭQ/E{bǚ=Z"$I-zpsjc'c=lo.6նV0%'ޮAk}a?i[|nr#F^|a*+X0;K $'`SƋDITYewFrAM]͒%y q=+n%Rέ.^zzV!y$"USZ3Ӳ;#'{kEʈvgjqt6;V=U#OJtM1x랼U9^\=k%>S6.r3_ƽUq3*=5+}Ey{v&aO0ٗ1c9}zHH4#9Mvw-Vl.~c=vy' N #9Oֲ#9h8ͽ:S<#ӭsSꛘ7Y{;*yˋoC%qupX 21n1sYJ w3Dz089yr8 Iq#fgmNd r3ۡs9 sLO]L\3,F~B*GwA"o-~nIt~{;v&VhU]?9FrNz?x+=N8HeI)$fynilG_%wRbqw8ws88zW'5x~nW8Zlӷ׫g^ q_Z'Y*$뻧c{Zzb*]3 *IA  :R QXH##L澇 KQgYKҴ쭳\;`p}+լt}Qq;q_j1H1Sv:u@6P`@+Z@ ~?5RJ/SoN6`vp=W\i0w3sy8ӚfϡuN,xRAGq׵en,hi53#k}T`s{c⫒T)8XEcVasQۭywUpN`$y#=+U6mFz`J$.IEy]I$* r9㓻:V@3.IT#G[VG$Gm=29FUY]_CA=j~7y2Ua=<`WjpXîpq}>2P0YIuJ!5wNF>U'c0 *ۣ<'ғ6 + kC `\;~`NH穹r:3䃌9?8;[Ŏ!F̧,հsiH $u%` HS;yHD+d յrzYOi-XvlĐgkLcqwgߠ8ڸ|_ݲ #`z =*Q2UfÞ@cj-M߉h%R!9+n3cUCK(ݻ8C[Q[o÷N2 Tg8ۺ69J/jCqEl7B9wb,[89 2ͻ?J礬 'TonFj~$R_1C=p9z:#͒g7N[[ȣ7C&\}JA$tsҪՌ-2iЬigc mGL|.9c\}_s^#݂l8>F~JF]oul.;P\[[VE 18n:z8N#Jo$۵zT@:Tͩf9'(Go^ęڰ+'/8׎›g<pÔAHdeG~IO?$})w<=0FW#q)A$ghLd'?V0O=֐u#9 'HcӀrK`vZpSukw;H'=)װ'p2~ژy?+g8@oRqH{ہx qަ w)':~19ȡ"w*Y'v# >;t@!dzqhߌwc@0qȠ4P)ϘpwO:֊%`*;:c#X- ݆9?犝_Z&?`c<uԽz篾=~BCq?Jz'xڎ%P?yܞ,cץJ0r8lk'#ۿJ;uϷӌfh^;DZzJ_O#9}h@8$;M89q{Ծ DgP =X.;e-twsOLޅ׳)2pps}O=ΗQ"/p u=H#ӏEc$}=^?LTL0 nuc *^z#ҨLI ׁHY.cҠn2s^veRs+a_Yy1@ <kI07'od#ٯ)zκe#06ӻ ?.jZ8$$6KbQS=]rRTǯ_JoRO6G׶9Uzrz7>98Ag;H>{OCN 0 p>z|BbBJb(AAsۚ01ӹ^.%a۠}}~ ?If'pNF tv#J?_>`yF! 4br $;$s?yy範-(^9#+ߌ=Lcnqs@X,2۾S0`#MS%ZVKH2UXpEd95n9sf q S1}CLE˘Cn'v{wQlxqƂ.'ʽw+Ng k@w)rn}s B$d]0>U~It#Lه<5-jm(8R̻Iw0ޮǤJT TH*1 j&ģSƄN6d qڮcev&>"%W##c&jcں}NidQ?/B)T&fM߈+`>`8LW)q\$`H cSk%'tTm;I%pГNGs.&qp˕遌1+g+ژY Gzv~GRGE?=@˚Mz:Rr2LzC=E q1>Ϩ=31ާuGOd>Xw:cT~^3Cd{cjS)"Az~FxSہ=3S?1؈y˓:z1@Aɧ:x$si>6waKn;sAjp1ԷNE5R;qL;{rO 9<:NG9q=R>Ph?.l$~})Fxǩ8G aXe0>aϩֆ6\涅MHt5l}~OҦϸug}|u+9^}won=A7e8H>~_N1@M6Ψ=뻧Z`n2p9eΨkx4ȑlr>WҼ$(<W 9ہ`z pKNJ$P_2o9#n Qp+&kY>\Q-wW?礝RM'0J?zfV Wv S2O]lq7;6Tg`,pq:\j `QwP0WD˰]w \s:q^@D8)?@3kҤ/C15s4p_N }ޜq9Zb$H*W''קdrqy<(2.I2<~I]؇do/ $u=v@ʐ1ž\Â!>J02\Nh#$A*|#T޸zC埓c;jRZE q Y%*} \ \2nqT^E8rN8;.6GnjD7 K=&3wnYA:V=@0or '`($ f9LGL嶫z ۯZӌO d/ pq…zKOS65BsL_lX_*EWTzkJV-H w"89V# Cf|? Vֲ[ܼ]`$;q^|4Rw3HY:d`N;-c$Ap]챓XZMXm<(*^Ea>1["̈ۻi,AUr0yd'#!䁜PĚrjr~bc 8"vҵ AL7*w=k5;hI4[Ibu$uҽJK(tGc ŒdgNkæg]?z}ѬVĠ3!j|c#N{|_K>c@<ߟQ@r=Xs>=~㎟OZ$w89M=?3p~[bA֥Xue gz}i$1wSҧNI a:Tb3PO,6q=xՀz/JyO֬?QU̲sRkT̘@@9ߌ tb96qݷ+oGMBHlcGPOM ę8 'ө $0yaXÜg^Ԟrq\i }z穩K2Ͽ$&c=~1ֳo' <Жw1׎dׇwI9)$|mdz`+$<\loyRB~Lo.+\ӌp$qp;׭ Vs< R˜p~N$d Y N8g#h[vߔfF[qW)#R2I$ Þ;慡2zC mʃ?:fTU(\1ԑVj2:L8>r0۴axs1Bcd!N|~|+ܥ;_<;6l8=ztJ̏k,r/,G>ד]V=:_ < n:QۥBFA70spc`[ f(2dO#v g0'j#9v65̩sЪ8;G Ɇ$+ry'z`SgI tٔ8N*Oȭȝ>|*$Lq_E;4(Q ʳAǩbb2hs"*c RBwkuHJv` }r@]cebFo`FXsIY6T" [&OZɕNNn'_\{:]/ 6q0c AyiӋE nO^n&rCdxe횘|˥-cqǃ;p@## g#9QSB<6:qNj r vr;T@9qFHA?zHbq 髀=qnCxIxx֐Ü9ϱz.zgx$0_N@nSs8Yc$.ݥe?2s_9ŀVp2lɎQں%'j.ՠnFE+U?p|lNvp0Bu,^a9+>o3| :5v7M|ˍߨ]Z7ÿ~gM+B~vV /znApY@nI#Ҿ3 ^KB+-'˪B.`gv}|Or[r[?9sD#r= jnus^rv0qx?ϭF8$w1j$Δ+\_`\\+;rv?+Jp5%ʾGe 0Vl{oCq\֦Ӷ +~WXK%).2%$)s>DI3rH]$&ޠa _Q?O76Rߝ Fw=GOolr#f>r>QF}{vjC!Anzשiʳm$9.[j0W5Z=ֻP (lzz׬XmqJ۟zؙ^aHqqW$*H>3qzG?qxp{6Ò9'\E@|g 9|kRQoWA^^Զ9p9#zz%ӄu<h8{9$qq=#=+AЄCwo}RQ"\m,^8E)HFIob 3L5<#Wry@GSw1_semyz{.Iw#mzqV:v]ȍoPvӞkt }ӷoF:%ggڶv‡+Ϧ Lє`v?#u 8>.l'"'rB8^Fsr eyI"܉ #8;9Ͽ82ʀw;*ݪyoVG9zUu't.Kgkq,’J?;1YiWqIHc(bxQ?SR ;"F!6򊎸!ycv ؽ/MAcCl|3φ1N1Ӟ "v7[0.1Tgf2@qֹ9>SeoBxpTgbXOl{Ϻ),i(p2 [F.LDV"`z{hWqN(%)^xZ8%{,$Mm(UNӯlƢ09$ "V-Fyߞx̑#ݎ3ޟB~Pʨ! @)Sz)!RđrG͆± 2dې<~Uq۸$FBsֳnthF H>=1+' ic3 Uƒ t#k1|y~V=YxT~96>gF9@u`qsT˸[;w+mi :&ô|3;O+o : gސotBxU?LP> [j;lʆ8rX(~9QīUN X(N'Z*|,rXøE7rJzJ^߉2\Ȃ;ٳ99ڪ=֋k 0r|LP;n`=QO@`\6} !;qg$`ԃښm.'K C?^[]8 A鞵*nJoNm[$l 8ڹۭ^"[.p.HY*-GsTfrIV qHO%yr\sz3_Sѕ.͆ n@>]/ \T$d*ܑuަ6]bܜ6pw!9Io'sV85maIN~MV$]F,Ic:jZېyv[i2?5RR&sBGo0ʮHf'8}j 󽐶8 GQ3֧ة} nJzҘI^NpGfޥ2|݀͝F^zUN#W(^;:֑/cּ?b{UIol̹…W^Lhe1ry(1m\}X ss_)IFDG''8On 10F{-p)9L-Ӝr͞{Gd]Уs`d x=9pwcmt-y=;rOQa77l^ܻD{4ێ v$=1I . I yZV7:4 YPACd7+æLd`gH9 tQxS{ۂ+"uֽD𥭜^l52Idž\MeoۡR>Nu}7zFF΀.y9UoFݞP`ҁ.{הλZ cŒϧGe>H"tI8xxUH0@#JJ+Sw~mv;>V qpzp=kilnmƨ,A qVBd9#fzt.w=,:ؖ cUPC'ִS0'dӁpIz 48;|uJ i ?xuvo2vG_b68' >=Ez#ykxk3s:|$' ~^QY| n_GOQ^/I^kRno?)nzӞ3I"HwѷvU?xy]r'*I<qw5_n09n{G*@|t}=GK7sdx)2K1{`p8׭_]s`P =dfh:.  f*$ R"1˲Hr JImW:Ҳ.FQ/$ķo\14yže?2N}a.2ɍ 8SӡԶH9% Iw h]u6oa#k$~zpx"ʴd۸ I#~dC,P,+l䁞3=+k a_' A蝱ךsT!8 84g qmqsš1[qGԉ&SV0f$ 8PANM]TUvn'88(N;8tQmfݞgt=*՚ZJqȪ+BkgohܒoRL%A>S?8, VebBˁކ &J*S6'(cM1ɨJc#' c MMd#83`0'׎GީnR*69`с>G:֒c&qǮ:ZUu^{ϏZOcAN?{&wnn?@Qq\{\c QӿFўAP9OZ6Ƿ\1N xpywGVL%]'Ln>RcH<z׍QYzwB99Rc F#?(ӿp=?ZǦ8>O=&9aRCsJ@F>1GzB9qq;sS`;ݟS߉gjka2@>}qS8=Ic}|{q{K'>z{ = yf6ǨA€>09؏oGsc[xLR\p{|*J Cp>xPA2鴏_.8=6ש4G=s*یƞӐG4@z;T=O~N= >p;}1rOW@'MUg-/#EFzק+fNyz>6ɐ_u w$h8#d8 ?q_uKd|?Fͼ@ +qg%|xЩ_kA(fScMl眓܁ӓҔ)n] A$sЎ[kM-bwxh&唫 NoƲZ&Idqb|FDe?xN ׊1g^q5TBUd$wvzԢ;=Ok~n$vk@ɐ?.1W_&cI(g iok [ϟE:+{\@'܂Ar;ӗAzzS_N8ǯjQ"lW qǡJہa5uyz"1:ɅÏ$L3ҘΩ6@$edٌ{V4-9`[rC;R{2 (8]Q!G=>j@ VO4B1Ɉ\ߖNڪv>gd\m H8z>BI|;F@Rr7uS|S ֜.' ncs!YC8npGzϟo-~ 0u P` ;*4M-um ?20lxIX|97q9!$=NP3N'NңAÜO_΋[B]wc9~;8n;0q ћ玜S4HlexI;5X-BsG+$K*'ExWӞd O ܁i 3:ޝU%M}Ac88'#3#wQ@,G< .1ߐ:G/w9vPrCڒ>Ndp8{*!chҶ69#'9( ӥX[ $u.J;qR}w&; Xyz~g5R-L&#ds}]n#ݼ[.#^k0!Å܌\+T`KzgְU΄nإ c9=1zWN/Br'gءw`Ա\O Cw6y5*4ӧdu}b+Jscӯ]: c.YϠ< q8f޶,[>!r:޽JvpN0O'>xNkSlm"`sǺW@צA97rRA<}<:8{=y'];'{N8[?O'(Qq}KcH?^sҎ3uԜEwOnp?5-?ZǦ}G?NՓzw''op8rG}(19J2ծXfӒd{>Tf?N9=ijr=OZvssڵRVU#8y#3 F:<r\e(\r1Ҭ~'*_"d\NOS>%PG_#:UM#Hrx_8{\\Uֻǧ:u*?wֹrXOIgҔ]Pjg}K`ٜczOOsӂz9bOQwLtȠL;c3JS*Q}V/<{NNsz\M=l{Ukw㞽2y9F4\nI]jz =zͮc۲*x^k63!5t9Iu#Nyvc8L{tܪks~f"7v;7NO~=='lrxNΫWf>l4`nV\Nߵu;987:b}8*W|̡^"s>d$a{=k.A'9=8ǿ } |hsԟ4^\~g;{jV.݄`y 9 =}Ԏqݜ*gv_.bj dܞ=+zJ<ެޏu73Ll+3oo*ݹ9>0HU-"w4S~Fmi6}`3"eXf wu_Eks ۥp'юȾ#[@$bK+ @eyp8?Z$] nrJApq^N6b]ə &}.&ccڭyky\tۆ$q9wQZ5slK)##*TF7~\p 'nZ}76{Xvd`kR {U+Vf* 2ųc(iFG"a{;ڢ\* {`v8Aξ)}vj6Bn88}]9 _Ñ6q=㤗fաX!vvOP4 0°1t^-OԔJleBqu9`N`] qzsNePVndtןMq)rۅ0 1;WOMl@SEiCc x5d1!8÷FT'gr 5>aSl-?ީBp<fw! f@ǥ8cZcĎ=JOg aiqӞ>1w{:u8d"С9gޙJy>+r^r]d}b__ps y~T$(B2W o$ s#ibpGQ:'o<==qA7vktL^\mޤ\)J<_kZ=<3/YIΈ̟1 tto(%rS5ؕddI #am*8׭W2,H= ,k" QcX9烁ڴc`+ J8hqLGO1-MoKF#2"@U#r$VT1]j̒Oafd >{hu}g*")$R ÿ́CRw`GAӲz";PF>ϵeed!!PX@1_R|; ]SiP|_^CᏡ8צޟqSfWP$uc$zEHWGLqz>׫dt'?W@d,:Ol/n$TN cԞRH\P[A?7֧ ǡ:}}2e#OJHcE%?*OV1x1qȜ19=J|`9QM8o0Ol{{_lUCC{{lRu 9'=@wБ{w=t={p9Z}#=)Ӟ @0jFFx.sA=L`;zzlJJ8oT225lHhn}1ja9g:pOM gOCیgpqy:Ҹ lpQpxR`&7Lz0:vy':La9G>az \g#PSC ;r:MMCu8#?:x*xXq 8鎤Q:}*Ic Rcas{L,rNxqJc 9~ 1`z01Ϩ?Θ$cv{ hO!۞# ;wc};{iQl䌴' gPgrt9;zVGI'>QŽI< FHyB&N~}ӷkFWA1# hSeI ~` ϰG+NSCvҩ-!/JAەpT{W%ucoV"@6`RYm9ާp8mp;c*g'n $`\q'o2ul;KIS<;*6{j9~e5{.e`rrqO>@>Qpqw=s_?^F/XMH~=I8$u9 8Lx#'Nv >zS@8 psE=G9N1M{u#L'8)->Ag'##I1s~})G!p>LL@8sc4s= vF''攷h!ʾX0q^vI3RnSr'.2.S ڪۯZKl:s/2I<*IO¸]ۛ~XKgx6Jׁ.C,ddpWgbaإebBۚcĻ~b0mv:Ͽ=3Uv9[]oG^G|ႌD8Ec*I;>rY:*Pc 0{֗>GMm+8եrstmK3J;LgUyPg{9#)[Ro$aͽx ` fg)$Pzixod4 IS9=+T7M"iq*$py=s^F23p]fЂU$̛>Rd9NA뎕lAvFI5օϢQU,&_Lc G|~Bw 9^uY>. %1_<}֦L78+cbn#=1Qd0oC=C\ՒdN Qq\6q)ӑG 04KÎI{=s+R̡݁IQ ڳIn'+<-5 qK2n<>sqSQcH,rLwM>ںܲxGHlg=l)I=L5T/Feʮz`wGOs{me6jXxX(+po Qm<˚ =9/迯'*44HN=~'${3%֢\dG y ܓ7)8xr}+Ϭ=|;ZE)p g#: l[d"06=A'Y#eu2M ''ӦqڥV'i<* |@@!F8acFG`j 9U%A6p=PcdHC'߰0Wd5r`ʓ<,RW=]9';:lMU r9K׸9"+ rr@9=O.PKrG̸nr*/LHAǠhC8RpK>N,HHȣNztoq8ٗ [S(A p :}qXך*.mBw'{P(9nj|&A ?\u2 n{=V$<쟕@,asT|ttw:ܭ+N2ISq^oȪ\[mG5ryݛܥr"Y]I\##'Xk8CmRywdLdϧ#]8"z|sW3>m'97\t>դlsMlVk͸PiGv2@@'U Io,Oba⦎$uhP,ÚQI_PRl41[ HWc m8`##oL5H| pĆ\d*۹~5_0.8m!P{MT'+nKkH4lA@á1]M1eǘ|yInzQ d]Wnӓw8s7v+f ̈YvIF6}EDbn䝡dBdJI랂򥰺1qnHEY#d8e#1ݵ.7#($/㓖S?OOz&#`oo0*cd{)!ȷ1\$@e O\SHaʩV8#H9[DɷeoPo")LB+I/ KܚIZ<]Khdv~>R%Ơ,ycֲH\׬G`'nOL랞`r0=FUv҅>Jc\]Nǹz Uh]`0*p{8TFFh Xd`JVpBHAxq9Q_W[a Pp0q<:ދ—?(;v4J ,yO;pwɍ%g2Wb Sxr5:_‡6_jx.:|ž "&v>n@P∣\FA%AݹW,sAY΢W}CbIm.C`~PqߌW9.vpW"J襆C uY3 >x JOӀ0j)|JpLX0%3GAXʿ =Һ ̇hlp8*"F;h1Of~׽6Xa FsԌ`\q|?*2NMC5'vd$'#Fq +HF0'p!GCN)6Ψ-lqd.0pCwNG#oǯ;3d󓑌0oSݒ=lRQ:zO!$oҾQ=_BQn<qSy?) x끑܊O1=9s߅Vhc@+8w$8ǯJF2II!yU$< {p#Զzu}h¸Ԁp7t=W/yr39֢TF\.>bwz{r;Usj 1ؚ3ƭSVsςw+1Kg:c{8jwjǍrn!ڮqT=cY$2:qXu#=kܧI-<~M/MUoAbǓ|^ա |yKryGWairSCqOvJqFqk!7ljz\﹓ Tێ:~qڼc\2I =Z1R_c.n Ud`wˎpOϟ^n:mUa9n^"KV9ڻ8lP08'8ӥDx `07J -Mo'9mHtWPd13_Zq=<>qmSh9$?LW=pueGN:+~ˌ B8A>եdἓ®p0{wr_XBԸbHBvѕNNI{.!$8W\y0]γ^׹CPt䓞r?:SԅA86J['3Ԡ$n>P0F[ۜ sos,S $?TW=9&ﺡ` y$`-|Oo$zЏ8lu2F3W;~cFrA'qU JId/ʹ# ry<[,:ǽd`BϜ0d3j';gPA2dn9  #皱ky%9=׽.؁ rH 3tWfۑШH׶zBcRm!2Քw'޲a Y*GVtvf8T9W@x`,drDg1ڴ[>6 a`AO'>\Qpsצ@#9Ԃ[sI=9 G#xLmm V';sқ6]U*H`pիjKb<%YXKuw4E^4Lk,{;8>_S<+֯ck"\ỈCp j/Y`a_7$  Vfrr2;q\ A=H+llӽv~R6Ϸ~ybrUݖsT/>~I9ImSlsS?Ԛ;vR:ǜd``>~V|@3}xWe!#'N=jf\ ĐOy"< +yjn0/'v_%8Nzc[wN=)dsJuEڇ/۱I~`߈fYćHn *YKfI"&8dهO: ˑJHOd%F޽y*:OSBtbK)1zu\"> 8҇۰8"rH8OSJo1pD>Aֈ q#YB *NӅ##t^Ҭ#vTA95H+h667ʮL׮82s O׎_KwwKku@{zgמH.Y,JN0|*_5d}d1''[n$m,A't޶%{&Myە??̪Ď}}+.'~ .QG@ wgR8<8BEt%.GQ '>dn$"=Xd`r;=Tr6lmzZhdX9+=n8c @s &;rI9nϭ7~nF@L>RO 9϶=iW NN0IA|3ڄ Y2X8;8sf"@\er{OҺl~rrvw<{ncN9nrv ǯsqU84R/AaKyIaۧN9t6;sn@:u(ٖͨb (L( eq㷿ҩ 6 _\Vm} ѿ%F< ߱19Πc3Vu!xKCwnR`=9ךw< ~^bos\݉=pyY<__-\~З48<ҤsqֹM;dt?_aנu9}LBQ?<{xx#zN0OcV vo8ڛx=q~*a=r#O]=*Ic{wcSACC@{i0?\*䁎3&~8{b{8?qA楍hUnsߧazgӨR_JD9zrI:{r8sE82sF2@=;9y<{"#q!'n Es!@@@t=>sFHw>=768+' }}Ry.udEf,f9T½79I/3WjIw7iNDaڼvq├󓜎pA`s \Q/Z8-H';Go^P` 0K rH=p1Y6r,dʥmBz`08<:c>՜47YDCr6O.I' {s]lǖA2p#+K])w>uQQ'bc"TPL!lN2{Zo 9PNu皯3or7q݂*8uP9$`gA~T=ʉW Jn\wzqVs<)ǨCأ:F/ HbA{sz|d08G\sXs:T#~iWRYy0UHa2,N>ў5c$[I.-HQ\{VJv0GimCKX:cp]p>sy5QAId@Qx^=y"ۧ@`$ 㨦G yFoB0Ӡ$:q߭*H7,jp]ssP#-!R@ƒ+TxڰyRUD *,m P $gi=z3D?f|B?82~Ҝ$=4g$(^16gXZKF`RIT#&ۘ/kJi[nU7z7<}Yp *B e[ry#z.:%)/CЀ3r0yǨ'K3ae3?Ȥ5IvF9ϫ U\\䌃H51ry"0 d(ϒ23w/.$#9?(G78XӅ I9@犄O ߐA G0r{8HG2Õ2yJ9Ð5N>0G͌G9Ue՜Ozr61#95?2y<ê1?7~b1Au#Sp2>F#ǮAs?fU}MpysNh$zʷB:SϩNz-f'$Ӟ%,dBlxcLrqM}T{~YYbH@݌`>φI#+v5Pn9ݓ$)^:ri~q0hsgRW.B`v ^29u6&8m#˖ =,.z]ݏftY&!{Һ&*pd5SGs(5=>&:p[ yR-1L1֥2A'9dw=qYq'~^ .7<3;9rGL 1cy=zq҆ۨ[{ޡ2,O#5q{9 ŲЙ};L8?69zgӊ͌8{s~=OBy(GQGNzm޴{nX<1=NzI.vڮWsd01,`nnݿN)~ՒNt3H.Hsx=`;y`Oz%K_Gx~^`pH~R%/v!q*;yb~g`=]H`g?ʺ0)bR!-9ңYac9P .H+x'bϲA ιF?̇Wq, q6,\uu+1'י88ҊGqk7nm$md^EIW'nvN 'ׁ礹ݝr쏑5cTBOcB"vc d|>^QNO8Np*;*s@ys\dᢷrPۓA8E{᫹sADgd9E,}mı!8 vzutYR9eO?']߻eЎGt+C{߈q㞜 <3pp܌ڐΛN8;ē2G[F8u3ԃuZ8ѨsW?)cFE`j!"ѪX 0͎C]Wcr3rm,v1I Yc*s}̞c{pO`=]ΝfgWX pTͦ3+$qڕv͇dÃI'}+J/9!#Yԏ+hҜ7V8a@{d WWbKnpq?0=AJ!N0߈AoJ!Į!3|xLՇRV( `ۺ`1CCC ow veqmntIe{c%ES' ۔e6ǜߢs( bm j=-?muo> 6 l50hD9l[r6}K 35|p k,oI `!9#"9.F (g5 Va0fRyo}*c֮y$Xʅb!+{9#7AQ`0 YsU| R97Oǧ`QGAn`N3i}3o>P7py G3a#Z2vPcbU|AcwJSm$n ܨۇF}܍wBֺFW^T7-QTn5U<9]->KHh؆R>By[ח'w;)'A4c$xr|^[}er iyeT1.6(N:QMyT>pjlcQJhu9Lu8krϨ8>_'Q0Fz2;buIdps~u}C'۞O m8 u%~}?4x9{z=S'hwsCN^珡$r3@=?>@x,8O =I^~h69#OUHLSg<sdqg#tdg~&w==\Ӯ1~{U'dI9ҥnǡR{`:c'C1ӧzKF1p~N3~u?Ȫ;\}Ot¸t'Wdg^O8xdG0XI#TûUKQ1'H8y=ךA3נgh"GAOA=qI?֙DgF޻Hy7sVzTO\Sv qoƨMhs,:{$,ғ`0K=GE!{JG1׸ϧCӀN9ppJL$昖ݰ0j(#naqqΓ+OL3=Tci :`GZ0נz&ؗ(%pEhw(^Ǔ͊i&b_ ]1$2^Ijnyzr W}Z8V<_T,# _+,FsqҼ<]JʠJ>XVSw8MEG_#ƫ+`I'Ɇ$cjگ쾞sUO+fܔb*ԭe՘ddscҩ3PKa $rz]нm/8p$].n \ U ?(CWJSU#ΦgR`~\ǹjoPD0.6#?.*pG+ظ$ک'g s{$i% n?ZYT8 ِcԕEB7͚A8X:OJURA - bpJR8rVF0H*i۠;S#n [8%0B^A`N1zTIS!eaRn#[VtPP'nXv?ҩ2yl*AzwegDuIrp1ZXAys=ɊMN^xrbv&B`qo{}E|}hrKCQm_Δ<): t9XCv~C8{})w9CH9iPc8'!q}R3Ӟzr֒dcߎzsGoq:C\? 3cuO9#8ck`OzAA眕$d;M7'<008)?b@|R/s矈ֱ&% U`@[ Lw7FA+һ(|(οOKm]1a(weIdzn Hi`'i={uC=Y˵cȊ۸>F =8,"BLnv>۸ֽ%S=؟/*_pT}=k Wf9r!2؟hQ`=*tw.3 [w@O`l(z㜟A 1Fг #<㎴]\dF0[/Tg8]q3#*|>S=3_s{b% o6cAϥY n۲n =.ղo)#zw tU#,B] +3ggQ\u5o»8p ppA8뚝 GI5Gc!@>NBTm93sT%-!lX_2 O~[Rn=1xvUlG$XK8v_9^?*ROP=C`TD۰a~lc$C㋻9{9$;UJg8QYBX:ygCI465D;q2l#x`xgM*bveI(┥ԸRHȽ׭Ta +F(,rPFku" IR@QrF:7,_=6ϞKE}IYIlڥ q8JIfGb`UQ|ʩϿJ][n܍+#p1-YWPXJƢ_K^ܳ.A\[ʽT*YN# {|q58LwH[>ld1y ]~G<`~/^zAK;/#1b =zӽy^)%*9$s9Zw54g+zdmH_>N -==}5h/D|2U++,1-xwFyy+UE~Ye鹝e2<= w&W<} ӾsS6L-7K Xci z}cٹ9$ x={W7R1`pz|?1Z^`N~\ tILVq} 'o7^gk ʌ 8hdss;݉%RdGcۻg=*'`prIa'$T`#KXN݌Yr0$u$~i[k-VyEySV{h|nUr6ӌE!(z[G* 1ԃp]y,g8%g lO=84Fw Hu H;p1wU7?,eE;p0' $Z}߈щ;|@KӶ}f@ʇ=9J5za}ӏZ\9+ Ïze gs*0(l[:`g#/H'sQ59bbI?t(8)`Jl5be/E`d@#r{ s5tRZq;=gkٴ-YJY?0'ӕ͒ɭdr" rAI=WYm:+E朐VO^A=Jg}%}Rq~ܬF@U鞭=i\QMl_8YR#b$ޮUv0QpzVEhbڻV1y#ޜԾGF cNsVfx8ul' ;6w߅U0tlo$)Yٌĩ(cs?V< +Ĕ8V>JD:3h(P$*:?h,n X1rx5w!+Yñ[8a׎TrT;NAzc[en $ 85r o9s4Y@l%@1Te`0(a݊f n?(hB riKĪ?)GAL"BA1`I#9Euyݵ~E l`aT/U N6$If'hMl{SG6(N̐X=q^MMrq#}J\~6-gK;n}hV{r32:,+FpH8Ȯ=Ob +ߎ[y* DPQf^Ie;wwdUղJ#}b0=:w-Ec˕8,R $Nj-E%q 9ߌdg5&4>a*m?6R{s+9Lqus>]kceI.WR9 sUӫ0A3#`㍣<Աm GSߊ:c60ySbj},fKĪv_&rǜOn/‡Wv=ruz֕ C,x34_;DoTG0 #yeɔgNɩ61p1l @;!s'MX,D{H#yk9/H—ij3ٺ $g=9۝*+%HA'kmr7@фc7}5WjZY #rAֹ'kgD)F6!xc!)1=idncSp< 7 * `rKr#NN FA,wm˱#&Kc2~9 QR0Fah'&;jMFpy;Bz׭L}Csq[~c)!A'9Ln@!Հ !a ^Xfg֞#hъw#z\Cqf͞v؃cҾ~'=vc#{NAS\}zԀ0F*N8ulkrF3cEB0`OuǯQCDP`=@;y?G.[Do'>?u^ }} Cwq[6ѷIq?t1/9뜚mSq.~:х<՘73,2wP 0r[x_ O["wv3w/031Ǩz43+T9PCl璺f",ct_fRs`fM㞽'J!ezmomp=F:sWo-sOJPVG%Kcsԏ}+u&%?d01\cZ[y^+<YAsq夵=*]P U$ 2@s]96#8ܤ/'p:\^qfO3kgvt֨$B8<بI`~#٭>Xʛ,R1}Ꮤx:VMΣF=9%A~@sW{8h]r'%8<w$x$}3k˔B 1^F [1 ^A@<Ҽr%U"2p><ǧqҼzk\ā6O<88`8l+Jߙi>mj5 \}iWIYڛg) [o>Jm$gnᷧ:%J /NPf,X0ǽy݂O#?|lNI|6Ԧ}Qvw$ˎǷj+g9㐶n\.P~Kx<0Pޣ뻂=Ww;(ԁiawL###8} 6 T6x#nO@k(mH:}=G54Π$F2#rdqI8$ s׿Ub:gA799W2OG't9gJOAWX <NG)E2%F;0':V,+&v@n2%NyLHV¨݇pxj"E] s}iˈDȭ7S!A#Q}|qaCz񎇡M6m'͌,xg=Z$D뱰1&2Yv͐䐯r9x럼.|1`B|-Č.vYB*. -"Xߦ3]nɔg'##?UIZeVڻ@T'N*zMl1xR"Z~giOmSp郜OJ X''9秦k*FW f˴Nڈt*H]A]cmEp@rpSQM rwˀGSC%r32(p`cҲf9Y9ќc sJ?q;I=^9R`^~b5GY#-2G^rĖ|m( <'Gzty8N[=g *A:tޥ-#2quZiaN9lGU:w[v9P|+z4*QLl|3u:6 9Q Hp3r+ߡsdݕVS<ߞ󊁗',U{|p=Z4Nٟw$U&63m^p֢E'ftVwYp3T>`z v7_8ڧ[Ўb)^taڝխ7n8ֺRŰ@?(hM5kӜgw8(p0?:蓧9ϧA3*<{hG4sP=AӁԝOqӂz{cZؗ(2x;b}0G_>0[<Iz~~Q ?O<NU, d`~c!݇ӊ=wî yݎDz7n]< ǹSHfz#?i3n=$26'ӎf r8Ͻ4g8?9tN3 d~z#<}(M GϱRʃ=n^ʯc<=y0`広$޾F!,IIw39=29r+rX.Z#j{<(O?+ԂsF9ݘ.0Âo}U3<)x{g=)lvmއڶ8B8E;*Y p<:tĝˁ~aSͩ8  u[q[%W'Sj 5kU 3شe+q+ONj̺ (<^^Z*W>Fw|ݨ.13i~9 ?ʴ#MY(@2Ѳ&XdOy,qPČ㑎 Sb8; PWF尸9ܜ5qQN71=3?JF I^sx'ԋ)c'#xF՚ $rzg}j sy|^xٝW nݙ=*mmFe =+--Ur I|iNO>}&'0x0]̟RLs:G&8a}jEaRxΏσ=/ cԥN<@G#y~h>^_2FzOҤ'~={Oå13#|$zH }}NQssYrϔMWqنSg8'!qp3=OҽyTw!RU~RzHjW93c p=zJy\z?19!烓7R1`oFpT>CΚqpĨ̀ J|̀q~V ޺g=G1Xa~)np3߾8(.yG@ 1z[ٜ IFԜZ&|Q4P6dzu9K֭/4~icq  U 랆`Es6BJxھGROgajq 6vds9 +#v6>5U|vO.5f-/nj$d6IwL&3 e7gpPs:b+F Ynx''5G|:FAhr0eV?1=+%Ǹy#E qm#=x5x`{S| 0:vT9'Fўzcz{$9*3<8=)!߄,˻Npzӥ q0؞w6 O0)8RWFqjs:'~Q(c9Qopw B֧SvvUP8@Npۭ FwZe 4Nj#Jg>%сu)8 Dyx#i@TT^`#|<|`:گg=ϑG'f -$jƞA<'7s^\f Y@ ,<]އc*/G #Zu.:W*w6qߚ3 0+D>Q%NJ򲻱$Ҥ׮G^U?N2T2G#}EF#@sC_nC"6IbT=rHJ\y2B|rM`NY15%hwk򐉵(N0=W$]R~l;gc;*`cx$|k;HU+5Jt \̥-Bc=k}#XS6ml#\,GmA*d|`}|Uf3(IJ;%o^8<ݾ!xz׎՟CUwu dj_C>ga`sIo4 goAP}?`sS}n9`c}t )'NM'sc!}p=WA@=0;~O^^:={U{u3 pqI>֥#WЁ3lzSGsj- rs銑X0S֩.NޘOLuM2zלv5WV c>uңǎ1289 8+oA@ N:w$ #9^c89&(8OB0c8#pAO)AG=1}1Rc>x81)p(9N{U-?=U&:c> =3 xcM2uU=~TccptW #ֻgs.U[ + w c](^ik3CXܪ1dJ:Ւy/@pSסZ5j]y-IP1\NK eI9ߗ'-Qe݀TNK cpˌn Krϭ`ln/]HJXWaܠFU0^~ͻ"Z̸/_Aˏcjƛ sAcҪ[~%b~dPH!n^rH2N!lI'Tb"^ypm~j$[?˅Rp*RX'?wݖnߜqU6yR2Ee> ǥ2`%Va9qbK^Oى ?.p<8Yc*4pA0рxz9ϵg%fTvm"2Cx*҃zΕ)ڧ"798,XsS~49(U^;_@ivw 1_%,>-iy$Gp SVq$æ=ycӑN/a2qO@'s}cg9!Xu'iN7+p:S#m[;{q5(gׯNpzv'ԙ<9?zC'wϧzzӱ|9)cFx8sOO}*BOlum _q؏Χ.=@X 힔B&Iq ?F>Zw? W x##w#@?»(葝g{zo|~0x rO99&w3sinY׳+v:gKP!sx=b@p#y6dXK '>Gՙ 7'svYFqK`vRF0GE5(g? rG#nz98n׎-0$+I7=G`Sq~r@V9'o`С!AA6ߝYrSv#-1&KsD2|Dz$bF);% qr#$`9.!FzqT!_%X`\ICY?BouQswv8ҹ148 DV̩#b ܰ\tuu11XC+`/ qBHRCIeTڳY˂C"9?ZrI3ZQm0X{w PH t|DN+?y11_CԣO{r UdrzF39ڱ$'x]Ҿ^nɵ=8H*;kw+#UHhb}3򌂧+3;JHd,;78ϩMkr%Ԁ:M$!omBǾ*Nc 8rU,3;Fqd_[ D~m QH1px1X#vV a0xYV~V=cOqqm댂O GWq|I ` ־C1o׏k70'iU zhQA/Z>dAa9=F|9H-@Ӹ;'cХKWps!dg?ZMr>`#8yחiD_7nr~Ö@A]~[eK"ʨF<c+ < Z$0Ö鷖=4sԪ*1}HYWay+A,8- rCpUpcʐ 8jy9p7|m:g7.Nb2NqM'+x| 6' |ߑ\c«.pVLAR TN~=9ɧ'[zxA,BAn qֻ|M vM9Qұ[>ebK paW}j8u1jV.8A+9i\7ʬ_.x8<Jm|].zK0S#*ͷ#^7:ko&%;;'*I<q[ @N=[2qPzi;*1z722&"TVM4aYxֻ2baܶXs`@Ҫ.a^I%GpU0RQC/|WP qB6KiA9U 20~\~<)a*C0 /P9$d,Âp}yjk{:m9N>3/ˀwcsYy]" edaHQpԌr0Ӝ;V';.*Fp>Qܯec^;2\FIn] (]eXYpH1XL ġQn^ǯJ~tIw*#d(9Q󷜀@<y8栆eLA9;"U*cnJXp̐6=Njt#_$ڽ,.bϠzQ0+{e*eƖK%[`A9l8⧶"$vpN23Qn6г<p3mg 7css77kߞ֓Q 0n$1brW %^wm݃цG:Ժ7mQZ (;ySqs߸mZ9+g9L9VY:{f0XQa6s>a۞ޕ\yϔ7C4OE} ]tTzśqVbؒ `Xa=_QIKu*˴ 3Ǯj=NbR(O,Ĩ I1AY^!X# KXNaҒ_ʶ<2N>iy\ʫ6͹[|<3HGNr9=Tڮz,r>L>ǜ Ή˕Xzp8xS}KQWbep",)pG`X4ӱfbĆ"XgwLxI)E Wsh'Vqvdz0iۮ)lԱo#E(*cIw ק=9#ft߹)?ǚ\vM[w W?)d$+g5-Mù F0I t.393C)W 6'~gY2I6@ߑ㓳~)  G>ƥ.ݼ}2F1)UL(6<t4H° !sONӱ0[!e bgүĪ ®}Hu vAtCs+u`3Oߡh.7. J$9qwGiv!n}Og_(/O 9Q=^j71Y{=cs׎<`}s^ ;ߎ:G8lhuc=qҠ<}08mEnOþ֪8AYhsJq5L; 'q,u\2v^gO_^a{+%y^]0ʰk H1˲.|ǝy^ī+ɝQ!wn ;Gbx^ߢi c3ھG*MF6&{ޏDʜAҽ.n݊bl892nex㌺˜yW>W{8PnQFu^&)sMRU@ltFRr}=y3YnWr@GG~9s=VۭlYv)Nrx̟l`'9L: 7p:dyk,\4QvKؼc9 {uiЛbTn9_9~UzݜXF0Gr=G*܄8vo3*qPT<1C#bH@~=3 /il(ȑ+H۰d>]  WN`٭;rdf+z yLeīFdxȇpa>UA[]9 y;sJڲ:eʳ2Kp==W9- 10,շ)pFCv<㞞OK[RQ`mrVR9L2.ӂD=#FI| ˌV6dl1IN̎ONZr؈?ytYMi#eVh*V1ֹT #&"T;WIG\v $sPs:dG$қӐ0{@F=OzFr=y# Pgnr=[GlsM%O\9,2ܰ-S$u?{=һ >`>_v瞭9ϥlɇR_s a2nֲ͏6p7K#[<QQ$Y*639^3.P 9C*(қMB4*0\;ٴ''jں-|GlⶌRF5-6h21dیCX3jR0[WN9 y<u++*arKsyM/bIeۅ-w'x>q[6z5v,AA\iz\RKgWlYSA6)L$1ap<޺TUR0DAhQǮ=Σ~mcC!Tx@ U}?:I?|!߼˴4NrI!޼l9݁$fRFAk=8KIvD2ʕI&j5K!gEf`3ngtK .R`ʨOqAӁ[ɷ :Ӄ&Uk۞{xاQ 'pGҸm 6 U) ϯ)˞+&df~S 8c'ڐ8=ÃПsYZN`g$? dQ(lgP0")mN8=pOM.KrBY@t>S0Y88]J0Sv3Vm{;KbyAT5N՗,1/'wяNM}eCԔ&S#F <񎜎?YE% Ϡ5ɍIYf*Qs?gQKø?iwz'3׵|[rC?tu ޘ$*dL>綧Dv.0 2>& cqc=yz!}FOO{c?*"X׌P?_/88jprw?N:18q?ҕc}w|U[Aztc}j9~ݪ Dmdt'898*'>9G7=3QC޿u}rsL;.'q$`'M90y}:WZߺfgh8QFy 3ӁHps!Kk}M;~s\ڑn>lGpuIƿ(G6Ad~e?l;yrսr@-ES,1NxmIyj;~WGs c;?+Bx>ct(KP~¤m_[q$ח=߫=:{D.$,̻@e' !HSVwؔe@s`֙OLTF+uʌ8G`{sX2(p1pvӵ1 #*wSteH*[EǯȰgqrO*>Vv 'g{(Z}A;F"eX ^I;7^xt"OǓ9RI79'C%l9hLt 0<.8ֳn$x’Fc98$ZŠXN 07N=GZ.Kn$ϹW%z̧XaqG01wx6qn=\r:#vW3Lsӵ4AF8,09=}E$Gs܌S6(ʮY _,098wy*HbY?J[@W#z##qҹ$eK«fN;׮Mdꟙ~,c0͂Wp /m.ܧ٠d8P %sŸ-oK[O[@''OCAs J<: +МsǯS56Lgz^އsINiL}yoƔc?l={sN=SI?L^)zKcG=SOuޜ>ҙ;YHa\>^3cՓ- :zzA:Od}m鎽1YФ0:zQzs%!1QxGLC~=3߭7OL=u{c>US=}?’M~1L=q֡0duwϧj1ן\t? ӓ;3\q܊?=㎹mc3֬)[guǀ?^SZŸ^9݂sug߷Z[:#U9bO@>pOa^N==jBGgZIݕt?.;u8A#1=OC#DH9ڭ#S% >{{cۑL`8wK'Cیs߮1W?~IQr2˜c g=׭w֧/2A3Žھ)|ftYzK3cnӒFa[kwҸ,Fќǡ{Ӆӟ)Ci-x`v0ҚP| ~y<}ްLگ!1Sn_ҭ$ ǿ5* >uO^19P8>ǥF|ɵWe]V<wF:/Cm] B )K@P\U<.rw^N`Fs]VpWf/.8w#rFkVL琈FB`go=s^kE|{r`GB$A$=9G l=oY*jUVm`7\$v鞝)ë6Կbe6 UXPNB,'v88!Aq#֜*DG)9sS>U'p&=c hmc 8ڸp/zk8pPFW^Oq#Km77t{a#\3ub{cz֘ =N ڤr3WZ#eE}v I{ׄ]F^@ g =b-eGI I$`;n86Pێ;ךյ=#IUvsˁN#)[s .8RտL}8Ub<ÎK(!@98l~|v~`:Cԑj}+2Sѵs:fv76KV瑷tb'Ge% H:-H gyan@f!\A"XP*gIA]zN#sT)$a r<$ c@kzjO^8Ж2>r~I826cP==Ohef(0$nN}ǧ~'qFR[U =\N:擆ل=ӎ:W-mYd["@,vBZ;N׮[HVN^ncrjc8bOSϡ㊙nEH3n~B=I@9rݾlvČo+۞Tj jx~fXgLc~N8۸qTl2< (|Ғ#\Gbs/\|uarTiOHDos8b`!Z?ݒS-f,nm..MƎAv8'0h:q1P$'>k:vwGvF0@ `'\ryqW=,$% ɐ]d *Cm 9]3hY6<ɍ323trH~^k8L Ṳ}3끫|}%ļHg9 eI 簯}-eF8͸b$Ay,;VX)7ן_Ir"F˱baE#AqYN13+j}-N+1ձgja.zsǪ|p8\g~EM۱d'+&yqcB'AߞҎ}A3jԓLh O&LMǯ8뻂pNA%8pO Z?zҫ#\q\>`}ߘo]$q$zdTx'=8?ʋs'=8Ϟ`J;" ~cz@r~Rc?g{E'N#dqe >ӿ^5KD=s8(89ǷTmXH׮3#Do֘@~=?N)2u8?=3㏙z<aONO'D#>ʚ@>v?ç^79pp1A,^_ʤ=qsUCnrz<i=Adm.睼>EUFqں)rգUh;Havx2)c#ۊhz]q:*o 3FyT{FI=yl^3Z[c'1B1yoM9d/pqls.q|INT ܫ^OKS%Xn`rcϨj2Zmø9=;'޸e'W N6<ҼjIxf,nc3#ZĞBF>a63 1U# G lFw{S%"37u;N9`zU/Щ&f@'`>B7rI~j;8L:2 h·8X}:ֶb*qNDgh)X`_ci9>Ti֮mkk~"FѰN2pF+ ks3vX(+:/]"dC # 89KICSWR>_`sr)1Ib:>z' |%AvqNj*NĐ>`@㎔1ymd\vmcxoDl*0pCcyUۜ~ުǘ\SVjBl|zL,m U89ӵg=ˎ:(ߝȅC`[s:dm'?xnc98<})=`^*z+`qt[,P0'=?|a YtK'jSԊ@xi'^Dsn@2NʹI^t {vAcS[st#CQ8'/=1s3y <),Oq{8~W>c,d'1+8z5Y2i;3Q kZ#ћtf9@9UP>t'bL>FXF3ⴎeA| w qҪHH;FXg zl U\1nfOOr@ǭRA2 .=Fr})QnfPT;bŒHI85.f!ՙfVG9!}F#UsXح7lbXwz8JfYʺ dgR4CjcIIBcd}J.$ v9Unx9QF# >n'w 3Jwp}1֟}[X{yͱNPn'wL¶RD>*Ǟ %U{k4^4x0<mAK+8#jd79HTlHFqIwB=C1`e%L Bl܅ w= >%$~ܐwU`˯+qS$i' 'k$sZBABwsMTWHH#! 0Xzd\E Ho2>vnMUN?k'di ǜo;Xc_iX9@TWo"kr&ĕc39CNH5l^pç>J a~\¸^ʌzqiY,dy=7)UQ8-N}{*ʑ70nS{RB[FbsW:֬Gk.UN Wa8={qD-" v)n 7NԌ:US xGcY-^r0}(IwPO|TьIأ;YNI8+H6t:TNἁ vfzp;#/f{ﶰs1Gaq_Eiw%|g8\䓌qھG8Gw}A1u?FX9jS=&+s8 ?TEq݃9?Ns.㷑Y~GGPgnyܵ-"JR ZVb*j1/.>Cn`2p{أq^)H79I%効X|o)t?Ze@0U X+(W?9ҽH&칟c},H"|tA+ lc^9}4cu2ond¹Lm3C 랽IEj1dY1h@w=3":#*8%AYcyZtϳˎ4a#8)\{ִݙ]'9K"SNHy`֓DqGwq3v^b˥_bxdN]iee=k#o2cڤ+Nޣ YMZ0#gvNagд#c`F77f\rWl`FwoFr~~uĝXdޡNGkErհ]A;T͌+*1ys"կ*P^#ި3v#JѼTR@O<^%~F~oL q^}}`_c(*T3҉ɛaU܊+k7>^['g?7G#HIyO@n0zQ;$07 cjf1Υ+0|I]}pJOp,NB“< gl$}I/pFR=Zơ 0NA9JImnVlд*uPvCtN)R5\ d@ "ci<Ԯ+)Xlprի7ۃCc~lvٽFpo|d˅ؐQqQKbx1#'%}xl9p+y"QyEn0?Ќ{Z3/бFtP.Ջ ۄHFvb{p@"GaoyN29o ;ycOjd0Bգ%W4v劑${|0ٳ0 |gB;#6mFC#=|e6$A}8` 1J~?{j];GQ( f@vEaޡ<.Nw90:{Qap*w0ýlY\L>I2 ?OA}hKR[֑3['ˌWӂ{VH@͜AQ5%k"$?(*(p-U%Y1'9V+;rFrB8Z-C O0@Sf`ynӎ{gieڴfP`A ʙں{k$q Ֆ<6iA(w1_zˡnit# 5:ID(2H +/lmd= e L*'5mm>f}OBf0s2;jOLx;v791῞;STm=ϋ` B.F2ƼWXe$4I*)}n4τYxgDŶ.w+ dێAO"  ѹ2Gt6s طLj)! 9>ZF D|ޕˏ%*oUsNP\| $s?Tj3[u&$($`Z3ߜR7fG,UH+1v2`@88u֮ yI8BTr1R9U-.=<6qp b[=p}1Z ?vUm̅F3קZvFn)Py;(zhW@ !Y:p]!r02`[p!x#y^ɵG1G\ףif&w=WJ{|۹W/<Ow½Tz7VɄw T|_&d8ؿ6TtqS~xJ,tk>kܣlamp3w\{u&?0' ` B^l|-_iNB w9n3Q=Vq2BQxϮ}rafRF5 "r3 XObIn6 7qWOsǛq%cnI'܁7^1ldA~O]k=x;3j[Pgp*TX].0Œ0sW_x`p0b nў:ul[H+ w|;,d&Fw {F}뤝lR4 Et}8{Vz>)Rw>^-_n P+ qڹ'~Bp $F$`Gry1S[oHuu-8?fGR3/?\bFY X\{#_z0#9ADU9?tG,lorNM, sR3tD`0I#=8*c X6R3ہq iG#g>+n`B屻`׌㌟nõdKzg ʃ>s5/r4:%\aT?(9$6\39<,3?ZDƦK:Vv \6!VhH*Hx&A߀F8={Q;n9ۥiԒ/n' lgc?7 8#ۧJZcp'og8ZzBaCc-g-btVDS+|+\HSpD-o Rp6,l>QOeDbT!}?0FxQֽgD>  W]֋_̏^,@>`QIt tV? ~GդכAR[;?{S׾( F~F~FN~=h`?22z:9`s׵#9c9#2:'Ly=O$)"9`z1Q[h#'!= 3硠bqOP2{Nr*aFF@=f xp3{jG;A;vpO+y< IP[o^w`d`=e9tQgp.OJ@n*Ò= 36 yr>/~sq׌gvp˕Fyss_5f %9# c9jls}ǿoRls~s@3Ǿ>f)zcI`@OA cl?Gp%\c*N@@ yb#NsECRvs#lv'ҥ⛁׎zVM}qQހ;>ȽuN:t88lz`)cn;qDݰN~n=Ң[+۩9Oc=1I ~cFg={CcDDr>cl`t>pyH$}* viXݩ AV6MuI<.|ElyWyډ[M|2?f%( @1G5_ONTI3Z#OcXdY I#*1C sUeX6xsnH9]ku8c.N21G\q5iHܜ9qcyZi~ u6^PvGѹNrA`T m=pߟ9l\w41<zt#we q_$޳ZGso+a~ Q>q*xc^M;jc ?uk>` I++9տ&͋@X#ےӞk5hM]\mݞ9RzzWV&޷s$'•Px%['뚡Ўr$2FOx%ax rKZrqsZQn|?{NqJ2p~R9RA_J , e+xy*!s`#ӞxSTex-m9<5sl1=%#qu;.(^Ѥr<`PeZ3i-}b܆81BrɍP11ץT5 4(KaX7+OQϭMi6a$68f0/y䞕+a3CWѮt] "1W_mÞk3RuDɝۡ YH#ڪ*3gIT{H.%i7R Q;kq2@oᕔ(fYQnĊIC vD;BL%(pHNcMiz2Y,"g\kp#Y@N3ީÒh;d7Bz }k\i:aX'76Ān Z/#Q[~$cU!I>|ۍ} $D8> BOO^ZɭMT2Rӏc~OR!ua8㧷9x'ژ y pU8@as Fi'HTO?:vN:ϡnH1Srs/OSg1V~<'8c=WO2F};ԡ}:d "OMĞ1;SA#B8cn'9=zt~Ds{ޓ+̛S_Aی{z;<r=s֦Ğr9y]X۞zs>Ԇ4CӨ:pOST8:dQT${8sP}3Ԁ_jw cNO5 ۧ=x"ddds:΢y4u8F0 }O28Uy|8NpAN9G#L]EyNy?>Τ=?N)tԖ118G͔l]H,~tVJfN=@ރ9LAS?t9S׶=q]хǗR}pFHE'ӟ^jQ*Hy%yӜJӔǜfO<~`ny#dg8:s9ua)h]Bw vqdXݹgNvE'eT i+Nr3y)G#}+:u4z]ss$aI;s4s7/Jrՙr TٰQB/i^cvI8R:)uw3ڴVٞ9(azqtZxcFG2mm!kj1lDiމ3m' @-z׳K~`>n:xXvH)-v#(8|~Ak&ʮܓ@p~'8(Fv}9N7sSƛOIT~]|viw rV!"o(+B;}@~k Ѷǐ`6 3):-\F:w=3ԓA8鑎՛d=u(>@;c$8`vy#SFJ=YIA\ nLa?1\\paLosί2 Op+q%UTȹe9S[F "|qؓߓz&!!‚eM9<b=)t#O1=3^߹K=8s;c›N9'0z98ӵ{1A$>U8tgO8չvLNz?=FrS?JvD-8zqQ{b@錀y}zU-Пzdv5) 9 sH.8n&b?w8l~Ənff/s7ǖ\ ?V`cdpB`y 9czwHc?xSN-wixg$2N;+|1gݓ2̹\ghϷֵR$U C aؼNrc5<\$J7|+.5Vk+.S*X?r,P ӊBW8rN>S9A1)g<08c#9 [Vc 4d {~4Оc=Oʊ0WH懸s``oR;q҆7B 1pN5]2B|m89ϥm#|xC-%$V%vG1WbN1);s)O'CX;Jm9#>VvaT˶Fec3TkIKB]GbNFOz}zw> F.2N}BU0TQDI/ mH<}3T&(%$^ONsYJcEB1{lerg(lЕgUK{!fCAn7'ۧJ/t4D2QHArO nTu4,̊ .Q s\~bݰ4hd*!waA㞼Nn*zH~n$UH{Ғ6RW8P .UB>k][GGnLmFXee Sǯe)ZWF` ,XN'⥚Yd2[ T>ӌ4qWb2& +W,2\@]Y9)F z8$j"FМ1%߷JWmϒS!#nT_Bmbu]P͝_OCۯQR-D#)ˠ! MD.q\3~EO,sV6GS94\\O2r?peVit9$Ү$3,nFX+ `gw+\|C1r:OkF7,|r2y ,TZ zU&0C`` pە# *2ry;˘ؓnArx_rW rbA9i-^7ɸi>Qdg9+3@;ګ@f$bˠ<992g))HC[˸H[oMl,x' 9YVs<3DWqFcpy4\9DFa#jWYNszJ6ncuz ^ןJb6t 3ڝuD;sE+ (#d`.ҞǑ[=\|8P8aAJ\K`9=j \{ޡ bO?tNr?‶Dm͞NTtQぜG\}j$V`w/#-ߌ@~e _8בT&  $;0l,<9@zsBgB8WL8Kv9oqGUc*"ۆ˷OWsӎoG&Lfm*psNj`8 Χ(~ozT\O-T|<`E'q d㟗 )ʀ2J-ŽrA>~C@ˌ 1q<:Z8 `cgۏH ! =:Mt1Y䏙t8`⇩Jyq|i'yH:T Ah9'1ҡ"p.bq@<<~U& xA'Ҫ#f݌JW$\C%FzvEWʨ ؼva^6$\Rnsq_EhO9km?_s4z?09#q?'q9#:¾KȼӒG=@4^yx6Ƣ09IdAXncpQӥ'= HŸ8ݐʭ鏘W\3 :.I; wQG7Joo=H?ÜcU~f=GA`0 Kn*9If% 9 >Gؤn;$sϦG)CD8ĕpr{>M;HzFqzg{X(jx-I4ς?L6^sk4m4T' H s뎜c_O;]nW{ݪ3q){  }i6x|ҹppGB}:vyjgA#^Dv@n ǿn;Q^+[?3q'Ln>_3F ̴ue gJ%}rDR!AfxT 1d~qjqa?ZZWܯ#Aʱs @lfQCe-F]pۏڙ s]§W;Y<ӃYo$hG|<+E,Hv-G?:p!$m׸N9FBg$6T-x׷apzWid2 | ~ȭ:\/ܿy9HB/UVgach%ҡa+ރF-Clʩ˒<>FV\鰧p$OrA꣧#kM];E^6WV[YZ 39\ܾ9/-0p9rZs󳎙^#hxOM7:֟ast=Z8a+"F A7<dWƬ[NstuPb8_K+|J\$ QHl|꯵XFN{tY]7tzpvZkbRCXl7CºHa\|1+@\lg58s>ږcR) X.w1=8'>vtfJۻupI+޵ԚT2xK[y%6I<ۿtpAzT<_|\m|$uU곅~oFöIR=km Aڛv,#&P>E؜`Fpqqrk4wE;.8=y 8#qn䍜I, (qqߧB3fwiF:SXgP1KG>X*{C{oeaȏ# r3 qzo|1I=Q-nde+HՀl"ZRNrJko#qA"Sd]$ʠB<@lESR/9Cc$n^K+ {Vīt!!qA9Nvp.00r# <1Vs/bqq:BUn_X;qT-pY@]^[<jВKS†EUA$sF;].NqhS sy!xiu9o%YH%PLI*aBng*dž5m[IpŊ"@9v=[c'޾zoQy۬M3Uls9 rAo'sq*6/e},=^G;?|h8MR=:uOJ'o_Ρ\2GL>^ة@'P:~Ϧ{d}j?یc_Ɠ?O|}^X9?Zbu8= :51hD :`g}{?Z:1ߧsZo8(\aUҿAz9Tdw?Aڄ!=s׷=8j#|5-lQA~3Ct8>1۞>HI <)B3sצ=i)hF=9@jAs\Â{w1,&85aO&sE1lxzP1ȲƁsB#0:;|zO&}&3e:#~FI%zNOm`ɷx73:Ґghs#2*@M0{;R:g/ayq1~Aیsӎzͻ1}:ǂ?ƛzw4'Fq})>з -HqsO]L6ǘ+P;_6%뎇'޹k˅7!YF#3[ߑx¥02^7צ+(5ԓOyR#\GsI潬*~瑈5KvL#v$rꪸ8R~U'ڱ&dխtin = WtC{T ׏dn"X$/7*I@T)mCO3HĹrHN*=ys_"X KV+CO-$edȲeXOzסη&q3*Ir0A=pF{UXbTaf=QKsB}SВ8:W9 ǖ *2 vҲf 7 :FqS r8!pHDV~iIekЭC{.q<}{x5''͕@;ݸ'w3ֈ B~>Xr ]գzoќ:WxQl g$<8ǵW$1nB^켶G9s@1͞둵yr9橇_lq3!H 8lדZL6$`B}j>K?M$dm}'J"dJ0H-9Yz~^樉,,K&42:* vAFWjr1G5GsƮvh&9<6I \ֱP" X;}+Zɣ  FJL*ŝ0E `ՃTⵛ9-e6TIݐ\}T<;|ʃiy?>9<$_xl8짨rqV#eS݌W$=5T@<ة#m$1sqTW2R$''Yid(;Ywpp}ҲQ3*v,\YHsX7.dpwJ9ڢ+[-l˲E 4*HןzЀP}:Vؓ0XĈ2.0?_@5cNt&eeQKd鎵UxJ a!s_j/3QK{sImo"2#X|8?pm6SLvVPK ̒䓜y ׳|;y@90xR=kt4G&>%RrXr;cTx9$q^5)oEl`ǧCީ=x9曱{ܩ91 *}+5 gyϵeͱЙ\p>#(c*aaNx qy=Q0{: R?w2?OƤINrzy[HϜ6[ s@?7٘Ws*Ԏaglg88fS(x33=9㞝:n0v`s?OLBw'1Hǡ}Cӓ: xөߓ(P :ӱC{pOoN}*i<B34W8zcޢNG,1o@cN \rs׶?߱Q3&_$g< cc8:f=I99 $9\;%(<;d?$lL"g܎6vz`z<*ĎFqN3ֽS\cŝ{^Fpx9;a? U,c8 x};Z5c>mgwԟv8'M' Өʌ' @~ư6ۏJɌI) ([d)$ufvnOLsYꛃ@$⚍vyơ;"0*il|JI+ #/˷;xǝvݕ8p@p3;DFlgI+Vfp˒gj$‰n{>[y;ĹgeVi;@r#"(\]ŕvNO|˵ 3,rn@=zV`m#2@fO*@K8*wE5Nwxs-n )YXggЎͣf͛ug*  ;z֬V]E#*yǨڅ x,\8`Wv@;A%"@VaqیN`zUyކB[P68 N,6 xG `OS N4vx /;Sϱz/#r 9p15vvzOfq$cܷ9?)27chV_#';~lg8;p~kSKÏYN39p3ޓOCZQ#i 3j_9}hkp#`dGn@!J\18GopǨ1G\#ק)O9O_j:$'q9$rZ]En . 988M' !yazb'w##lF,pi7c|e,BG4R>L(3=碐dQRY׏.>X,pbiH步WHݒ6zqS ۼPϴu*?}{y#=Y)>hpr͍z(9Hy[2Ibskס`%FNF$u=2hx*eU kHO|I'ˌ1)F}mSwZ,|Tg)QNs{Nyٸ8\'N?4-Д0`s?eޥ|BY}c71è©PGJ8nF@1 |ȭ1]?B󳂞bH`gq1ZUgL,y ]Ğv#MMka{Rʡ `UPsWcI$El@B3U]v| J4b޸EY5KTˆ8'vs2ECٱPi8zF9:ZDeQ]:dUQ{sYF #Us1x6°jn $d~g#oQ˪;X cb\Lrr5;YGa#םow=,<mbݰ&{] ЩC x*\(Ö-@`dv\r׮zz֕B/ƣ'\3r8[pN;z&N׶:u^):T889=y?44+I' qST$9\mpx Өp{VdH$FO8WZ`ߺNrzW3rRW~[yA+P~g,ރۆR{%OR>OZ(>ZPhv9g&NI,˷Ӄ6z]pR Q!Wp~jNP'sA(ykxTRs7ivp 4ߴ 'm=u{\7bvC |;g#|Ƨ$(H =G~)$Rs?P J:r<t `Gr2HsUdpd ,YX899HrH"g bv`}{LUDܠmT/y$*łll7<4ɷsN98\(W'99I?fEr  {tI*|2FOdSN5q6@PvO=d˻]<3r <%0#9yS~}1B(f֩>CP%Kϴ/;`Uv?LUGs&r 9^hOAR ] V'"K?aP(xA Ts{{"UTn$9\p}\C)M2cIAǽl_3oH19ʖ)9Vb;`ʘ W ;}ƀ-hSqKgw 8;O}Z1 HW  9<}+f4QZ$ͼ(F wc\IA@n:dW;6{\=|λwnO@:U/7:qߵ&ʆb.o1 ={i0S؃?zqCRxV.YT za0bW@;[su9RB`*FnjSR2&2#;yےqVvAȾX\$Ğ=8E4 v$F3ʚ{!<6ˀ g`F gwO֩CH$Fxm9\sғzP9%'9NsUqᓜ}r> O:Ŗ`QdQ i myߌO4LǷnr@QKm=كB,l`JD`6b``ÿlusgpw.O'ݩ`(;3? y\Q19<҄ɰ" ̸-O@Nz C@ W9R|<$cӊd1YNFqS}:_sGOCGpՑewpx@8~<\v f@=:sڂz?g$=28 FspAN a*Fb@$gd v;h0ۀr>S6s$ tUB댜8'<> aҮ$@ࠁ zR0#^ps׿Uʒyg8#gҥ8+WzhD-m)N=e98c;ZN>`1m\1&= Z Pd1$;1l0Q#fqZW,6SrRX7#`K%wcb!rT@SprqN@<NhE- I#q)\$v' $._~n9<6Sf(d Ȼʤ k~;K.ݹE3E*3ȮV1 ONOc>2Y8W ╵`@>[RFm0c#B2rd'Z߷ɱ؁ |Xv(,g6wpGAMc7/ݵ,j(;Ald׏ƽ+H'V2 '@k{J2ՁjixyB~>٬W$psH#++t}57{z$`1?_U49\[B1-ZƒvJI$ǵ$ZG/suxa1߽p7|vs[TZj5'ʏ=/:1+̇y8vH?.:r8?Z-%xݳ"0bF>|p= qwCGr89 zgo8dm8b#$QߧuPId8=cls NKHkJ=MrYm^t4)w&T$n q_]B%|:hGӶ;IA =Rt;W<O>W7m}pOc~5TEkdrYFUwTXGN=(Y cgrq:zcJ@ ї"[98ocǽI]v;r'q dڻK8L22X08MlsZ|F8;6s+@p`r8'=V>G%y]χd}'ϩII 4A)mH,<:Wa[^AܻpVR\sć( |m%+ɭM-x =lP*ʱܽ0~e$B#g)[1j̅+I+BXcːrcC[%r8xUvrkN[1G(avqqj{!?$o%|\"H ddf8dpGkZ_ $er%usQє'ksˁ#(# spp\nOc-q|(Lnx Č.W ڝn.HC*qQZ)˅EBϸ3K#wJ$ έE?'R*Tx f=~sך_EDh!5,hqQŝ;} 8WڳSs mTYܽ9boPJ|QHnX85eqtPȁ %c !}lv&9Uԁ)䑟aT<$luD S 2Wqz[uLwK lg`:T$RGӹ>iizg97'+֭ؒ61$rTd|PI41ctt[:nc!`0c%:szPķ0,1*% '=jϐjX%a~c+"R9Kgv P6}3WT֊G?h6ﮭ-@ uR#+pPu<ǽ7v`F;2=9Jzʷ6Ed6rs#s1#PN@by'zV.T*,aM2mæ ;UX,o~l0{׊5:/t y$ nʰoNsK-kلC?y@:t*%&Ul+[+{FTr1Uʞkn[#D G̫ f7#ɶ<ƒ၏.|۳gՊhŎ>cSUNߜ^͊Ѵrca'$U{GM쎱 pcޅDE|6X8ڣyykMq28m.^\n](_;܀(ܻ7<q^c&%\0 .27\{Y4}:SI+}h%"Qcn8lR rrw}*girSf&(@ WH^Y:d<LҹpX3J~; u d=?Aך#  霎k+B(~fB[v9mS`rX p}ЎkrWmYWinXc\{tG㑎֪;&;u=Pr{ 2sב$/8-v.z\zVO~qf%wszt#3-pp `$z p,ZH+VmDX6O=U-Է#i.q1VvR/ ur22{Vp@ߥ;#&V-|6y@B94ʏFU\>c'h@Gu^8z^=zvH΢YZ1q]N'}ۃ+&;)G;m{==*}R.a>J~d-`WvM`7~R>gǵ|tH'HNɏuλUZP{O2۟A={Zt*pN1xOG}UH$!f<bԆxޥ۶9>a}Y1Đv7QV(^^֎&#~^ q8{_N?| Ǹ{L>VLdc)*ncqR6q cU]|#lX݉lAT)$38#9lG-s=xlM-W >V8zF3淣9\m+I|%[s~W=43??\SA~caƚN;Z'{Pçn IsŽ1JcI$zcq:{ qLC:~3?'ڧ'㎃1:S_2e{`pwgV?/|?}v1#XssUSqV{>J;9 u<6߅laga3ЎfB b2y7^D)oT?NOJy7D2Łt ^4yy;2sI8֕rH=3#c#3Xl\p_W,>DWkRr3#0 }=떧S:S 3-@v]00O on;L4=%RsO c1Ҹ$PYHÔf^9{3}}wn kǀ]@Eo`{v\}xK ̪C9 Uqv⼊{Gy r@@s䎁#\osnx<u9DHݸa`LH~LX` q?\F2@U-[Xs9] ` g<4-{^lcsk-R\ ciC $Ua܌[ pJ\C$A"_ܑ8(m99n8׌OdHL{w p3֠CPX*8k'bjxv FCs,"H`|s*0IehVbbCWo?/pFrGJa[tCLb9C+dWxnd\hd-:~w7:}NTRۨo~ǹ<Dq͑#s^:7cqcCHѱuI=ApÕ-o1w ݹ|pwp~)h2tWA<>@爳e'5遚I@ uf$B `Y3h=**.8akN:)! syҼdlOS;C?f.m'62Kmus\(>L9$8_QF(1 E)LzzrYy+wgpx1' /<%o9q<@~92*@rxFLnjm㎙Lg?Lt&>UxG@4 ?+ܩ*_ h݉'9Vr8nx~\wd*@ v!H$8=3p:|P7qC'Rq{OALӞ@ߔӊ'"C-Q\`trO ry$ۥW+bzqڣH%W#tq]0\ l7@'kr8OHib;nBW8qcVQn#@L9Vouv*2|r:gd6ҿum Gr=:s\댴ꭦؠ{c>uF=1^.#̝gk+=*󁻟NZrqZ|M'Jm>JjqpO^u^A?\Jӿ?Q}2}LDN?jiVϷ d#'a'G~1L:┆Ǟq?=93Sېu\}*^3dGNGb~P'~@sߟoax9iOn08:Hn8{4w秮?za^=;p8=97sqziztǡnh?zU-@0>7|ڗQc=?h`A:q'ߝ g샩3bpF3^d8Wn^_2Ovt=⾎DGw=6rLnW# yǧOJhcsHs9Lg0$g rx=0U G:~T$EG@}@ds{Iv%Շ2:NxOc-Ht=N:`09>69jͽblœgu&zOr;g'&nElKr>cZ(MJ̫U)>OnDn0bH9jشvQܻTdp q_{UH9Η}tj@ FV<TOkI;Y < ?ƾ|Yjswq#,d0*yzcsEpAJ8 xJm\JROXm`[׹W;AE8gVn6gD&-w!d+Z2 1ܙ.峐8Lb8$_GqOߜ9w )'?)xj/iceI*ۆ,3޻{FkymojgF )}zq\9?q{S5,Fгsp6wpFF01u>;UP=Nq3|ZϯoFyGKX`pη2fI(랜 &&`vdA 9tj(DetR~AhJ*}܃3\퐟h }~bfu yvFǀ<ֱ䕂3(IHۆF8<⺣ާ_>K;OZ5bK2Y#\nA;c\I;Q0슑  ޘI&BKR9 :@O4?7B9=>D~q9wNSߊ ~F@b199?J7CN(rGtB~Q=+Vb +ÃbNE,6,{۵q Ӧk[evbq5Gi!mA+g?2B8ZSʛe}ѫ|>z Fެ.KFPUC%u}AHzwx'#`Ay*5V"qQm#,2ޤp11YbG͸Go<.G$c=q֙72\A H܌}sޝ2sONO'R/V"H9lu* Bzq0jAO}1Ufvsp c_Jm"?!3u 68=Ozb㱍2C? [H8u.6f3qz|\SE](R O iphL~Ego̾mlpd`Ue+v/)2J<̮YA/>"(a{ qu'Ӛv!8Ǟ7v&w#=p{&.Tm; d' >QؙnPs 68'O[ȁwV m)~fyF݈]OLП+. G d㎝>FMY+i%kvP.ande*} {'י@gbX8I6 n/Z)/lǓn&2Bě#[> մxdIбh01r851v)Eu+}"M5t侼.csKue_lAf2g @-hZmz|ޞH䈂vdR `}ݳK:㌞VFap=8* c} y$vGˏM}W69p=9'ۯ4}^FNpFNF1iZi{:TFqztGLKSZp#I~ܖ,^3ޝ+-c; z?A :9 $l7\Ҕ=FAP8aM5NF{g>?'߿w#1sGҐ.rqǥHG>z'w=\=@81ǯ^U \+ny_ #Ny[r3̻@RF̼;¯E$PLe8 x8ڦq5+ܪ%ϓ3MV&8F vT-9L ǘVI'-뺜Y%3ԯIv0Ym0Uv^h0tڷ7 o qd6r+!n1<&anP!w n8_ Ќsz*˒0 pAqlm}J`:qZKT>f#'1n9 Ml CEY0D~MT.A}R@_2$df"=\խ# =)1-y݀sN@߿V6qm?)_nDN7P9l+tI<ps[" iآ!$+SnsÚRѮmᐺK`oh n&G%3H{p$SXreuƻ76NZfa mAR@|nOqҴ-P(YIC,qNw--L x?>:`{Wq >xN &7s $TЮ1,x#iR=EzrGr8+Nzu>_u/#U.9<ۜ zP_Kgӧ'']!Ryz񎇩i #9 Jù/'#' fycihU8RzO8=p : [8랄Zq#$dqykM38Plm\VַseG eF6={96<`8\)OȚꦿycz{<JG@!cRFlq ..YoRIі|;)9=k(+%>rKXͼsb1c;"=XF?)>$l)zLCb@fG2p8 sy)*2P7r i-50쥔I7* +9'q*.A%9#8rh+TĒr ;LM܀'_],' 2b#I`~ӵrG ;r0n2@ *SB7w֨ jhqʎCyۋ2sҴ`V_y `cZow6W%A~\8>i*zF@NHڤ\v%0eVi%ӠB{; "20brJ+?"0C`*2S2#4o%zf4!`Rs$Dʣ9@e@ ;nl;p8ց iH_-FqqV; 3HNfu"2s2A#L2ʩ0>g۞I|qRwQEV<Z#_G6U3|py8^9WNNy4"@lq ӜV^fzc+\0/A8ԻFG88\sb"@< <͡PpKw>PܓzuL{ '@ڴgSy. Xs 0KUOruZ6*X ('9 9 U7m$ ̠u'3ݚLnXp 3 ~cUiXnU7g 8: >DU[فi/1&q rv'n7Cm<A>5KI6֛ܥ L e;8=xR+ 6Ilҍx'gS4ІrGFvϮ(,^8A3M(?1;A8V*zsRz}ʗ@"d;Llzx@7BrF 9$@$ϵ?qۜc׮@8v:`ʁ01АI#{))=)n 2$2S=ǯZsqձU\Fi!sr0:=眀G8{('  *[9# Ў탁9rzrGCR3zS[z:*F` y䑖8>xyPסe9b yˌ 9Sʱӯ@rTaI9;z \q9% sqH~Ep'玽1-Ȉi2~\lvI,>VQb3VmG<7^}iUAq8ǵ h ʱ'?<\ x< !vcq|ܖی۹~W9Ө$*d.ܹH=T^ie>e\|ІId1Qnr2aXpHn0] qӓsZ`69ˍăА!$m'pc#{ՕC1S)Ǧӑ~iQIdi$sA$wo;O ؤ0fOF:9ugMk 09%XO7/*~^=3]e1((]ST0x v}r1T吪Б qʾ.Vr7>cQ\=Źn o^3jy{.pHn7呞YiOF6ԎGMvfE s {q_Cv_H*1˧z0K[=M0H t c ޼*~ # `N{q!HQ8u%dxx0UK#1_4 /݅>1m=M:bg\pX# Uӎy`vzz%m Фdq<T,2B䢷+Lsޮ;ۨˉg Fwx8"wHgh>nV+C𱃖eV;3k GH\."wp?)!FIzW[YJ~[2JebS98V0@XwvZ}YZJ uU܂;VU(_B2o+u<UQHɓ'ۡp!Y's*O Aj)ж[Tg'%z1J0n둜R1Y2$T9UsP;w+F=z)b t!dzǧ\[nʹby=zک cFmHT܎@ٌc i %}B_,sCDoe %2rUpz~5& A^Yt.O?M.*N켚:o9B@sִ>"IO=Ieh(qA#\P|GF׺,oa"KbFǃU@֬eZ1 9r.ekY'N9p/cq06Csy}fR,2z޲V1R ;n@ڹ0^o+ '].[]L9[930& \jHiW%hg"ooRW)`{d?5BK9<p2pGAnCtSw2Cr 8;L֔m'#?Jx [,;aӨS0l*o7z7lw|zicjF8)c3=i[A9>la0ASO^o~_1RD~V=s)EwspTE0w1z=yqxD8_Ϟaܱ@%R0jHIHÒ2 ,9{QԳ'A#RNOP0Nyt">aaxq׊aT#i76HR{Hɷ[p9׶*rR V\M S%BF79Aq޳v(c1lG@3O)vuɐ OB@wv:څ-<rf+!}q[.~.lJ* E1sNkO I}IHFc$HP[9֜_}0h^]61#As$hdRUI?(`9nÅ2 6힕5NKaTv7tfNoV'0Ťf'JZ\1Z4=wCAh&o\ĥCAtf M{ǕysDVf/"aN\)#<{ aRfџ/ͱghEO? žNg-ɛg_ٵi[{3ዻ}ZUl#zb܅n᷶1gIaqʨst?~5mU0nS/X,M38Osb?'^F=9*]fFһؓx( nꤞTZ͖ sOeg{$wS`y2#BAc3vmԥ(!t# ^EA W3풁>Xq7ByNH6c~цq}fѤfm|Kjpi$bbcT؟"OQԟJe]BKF up.ң=[ñhhX~$Q9b]㸯e]/O͟¤(`O@HEVёQc4_M0-|j{{%#q\+ `#9J .V3ʤ,[P.PF99 GȞ Ba$~@y81^)}Kan%RGA듊*Z%CFYXAad:AbcNrLW.:~Ν8Hջl1@dÒqv|\N W!q/+l6ܥsGLBϥdgHÒQ=Z.]9e`r 9z.^g&6j̩O@ׂ=U[1Kz t9>WXe#ax'!zzY}XN0:;]@w`.z#rO0e^EZ5Alz1RGyBH\9fp~bA$# }z[Nܜq8??ӷz#iŲd`ey 珘{+Ԭc a|zS㔬v"*g9{cEj9WQp+6ˡO0C>&:gGZ @'^֚`NHeg97wS!uT|9 qZ2>v׌}kj{-l[#Ls 휍8ǿνzQbcy3}OqcdVSJ7Gr=>Osn:z⥕'9rԫ'l18-nlڱ Rs 8 \W]iuhF$68zW x&FV;Kw`0IwQ=vv\rAнs^sz'gS=xYP8tcSBg tH=z fÓ؎σM8 sZ!8dg884Iz~Q= z{O#`]I99~`?L={Rz` eGZK-/\qzT1ӶS3zs:*Bx<rxJbc q{dsP1}}0!'@|L۟ VrY:j#霎MOԄ8co^zH?B{vy9A #އz?Ԝ;`cǽ *mp6d緩J;s 6yvdm9>Juk<mU˰C9ֻpramg8sQeK.K.N>Eikxdܡ NTOt#P`ѠI;{tJГ`gvc$ۏJhNрO$LU`Tg;Po=hIð.6qj\Gm\A$ȸ ץ;Gޯ2:Dd'={t-N9*gqcU~ryWy jݬ܍f>Rc۠ y1z/Lt^Idy槸بw7Da($G9? e,[`,>ee<q\uM"DbfGg;A]#EjIP7@N@;慹e'd*w J:)p+59^I :ӂ3u83=&6|#ۥITTRe=N;d <8YIWkOV!Nc=jY:u\*2!]˽̃HQ GXܣ߅ F'p83V:]uګY 2;1w˻3C H1YpN`RTTv8߸"CO t1My'F3ҩl&<8Hzz8T_0㓞[9{i-xLazN{Z+|I^7 &[ݿ^0B$$S?7yzޑ"\@C1aK:8pk9t6S#D2,rNH;-n!Mƭ4afd $?#pc}:u;K=ߑp1SמÉ%!nWoLkB+ˎV7܌v<7=x9vg6J~􎀎G CBC(:u#ch68>RhW-D$d, #f12,A pz4ƈӧ_euzrr >VOfNU;zs$sc~O[ 3fb NHokJkrzfÒ0@~ 3Աh~G<Įy?N:V7ᶡ##$snb+#?-q9ۨ*tXܨd+Q57mwn5J@}q |}  =8Tft0IlǿQk(P# ;us\ҧt:aRֱe[^g:lzs W=kg8qz sjv'>_(vgLt8ӿQu{'1=E1=1=v1!C)=ZRz~x=x|Ld"Haۑ)'S5) #@?v'J%2:8샎py@^w}NA/ޙlqu? nޜO=:uJD<{Ƿ'JN3ojӦ㎼41$4OG^83ל_jf$4/o9G?/_!8cЊi\'?($`^;W'tꥉcp2z}+Y W ~~(H9ATڲ(iPDs0N3O=83d8'?xKs߯_~yⳑVz1ۜZI=In˒xM1s<>ԛ)"Pstҧ /=}R'N|gҭ{zN;2v;:Ԫ$R h.mAgg'_ƹ{(lpA =Ҿ-ƺN{&mXJ/XʳC`ntwFCNF~lW1Pgi(IhH1L.c`*\x64Z.qG^uBO6Zب3Cg #z"F*w fѻmd*r[IO +VdH 0` pdž;qךʆ'19^0n48;cR̅H;~uF2t[g4!19=rtwHQ98>՘-$@\:׎9Hut$8Pnڄq2ۉyw9u6rݒ|qP/,[D諸vϭz5~y8WzhߝGLt3\+!RAqP(8WY{,+-X~|9rw̫dFNnB;8b=29VI~Ser#$RO@pJi 88p3=@+r@$pq9Iz/sk!C(BFN৑ڪ)] vq_Rlp0+ f\2Kv=y'5[[7vNv A)я]pZOk a;2AnUK8"[[;u;̤1:{˯,\feT q czo$:W(bJ#VP$H}Vn4?,Ll\.ГE19oO{ҞwG!{jKAU_u^ cqdqh$ʈ' ?jr8c#> 7D9Sҟ1^=RU+w#ſa!Gp >O?`- UΒ8p$ {WkkҪ.ndl6r2 ޸ޔo[j,cgMw-I@H_d QSҦФv%r6q뎿u-I> ?zɕ0: r<Ϋ;n :Y=qtZl>UB }@ߚ:J9<׶H#Ǧy8뎇Q籧(x$҅2}Fpq O$zc=AVv#{exh-׶=%֜m׎?t\`zwUdq:>`>`{sQ`quϿ4F}c A/DP d| @.p:drOA9IX2E\QC;NzlOB/ @V_D9>7l 9*R~+k껇}>МK0㑜 gM6מO9HqnUL]vOO犆S!=2H`4Xh.~_/z: '=d2čFGL솪G?+~G-q*9%ytUn'&ywgs $ sJ[X1@rpOQj$-; ln!N{sTSи  'g>nʸ\3`ҭGC6ځu.U㙗Ttֽ-nA h8QCaSh8sO[V;WcGx'= yQK4Ӟ{\kjb]oڅ2åpL3oHcX$ԩSr$4aOWsְ՛zD.X}>5Z ~_`>bH+`u֯X. } ʀypr*ڲ/)Y:21:Ub̨ *$[gz3Hsk db"7FUQwn/f< FTx5uL,v67eeTTf ~VV. aR½v(A^gr0=ּS{ɴg'ǔS g g~OWRln8=q]RXnF c 'RpNp׃xGz6v3rΓWgm*Z27_!r:`dulgR)Op;Yu,I=}ѐ6=ٌ2}3w=;4{`$ҷAr{r3{K`Px~=NB?3`s(Չ+) Uq%nqZM|nLʣ\]_62A,Nwp~mz/P'$*$9[K7m 8r~(\ @@RI*T`s]]X#ےF $+>v>lz7rmn@ @܍r/'לC= ^#'>Ldߒ`aWn7zq:b#$`9 g_!JۡxDkV #GoOL' x:[7$^3Rqְ؋NHtp{ץTP7nU9 UW|It|瞼wlf){8E9 $ s׃\erҸ0 %~ldg rO&rX>S$㎿D~^$\zI=FÁ}9#In d>T! ۊvVL~s]6ARB!$((wʼnV𕕶s$wiEts)@aJ|unGlW-$Mg HSYww*%_g{=y=؂Wޯ:|O \9*Ia8<΄i`m 2Sq%Kd؜8q)?wӧNq\ji} oS-~@sBjLe`H%aF9m*$D%7+^Po8tvħ|aԃ隃A98$#~4FIp'ɩiQ`'ޥV|.@sQ}6@ɠ:$ [G3`Im$=y5窓 çL-ԑx8qwdN-؎N~nz;zޟPUB>f8Bss" w t@Ov\2ߞzTN3$ecn=yʝHǿw0n#X&'<?:W!}Vm ĀO%rATdܚ0|L6v\c$Z+]sxz:4[MKq TrA, j-3Yh7_w#\^a{8,MMWaq+{#r2I<8't|'6h(M4}b9aA`v?q7wmu t 2Hz~Wө"{s9>gOݬT$s|%.Xv(4,zx¹`U۸@=xZ.*=uqg ',wqc۸r2 y c=+գS̔q[ y$rQ3zl8op8 cM$ya>GC3{׿hAW>bP3ҽ>zg،Aۍ`վ$P:#'UݙdP=HR|7mx9ǯUz"Yqp}+¥ؾęN {#erf[Hg"F0/C z)iuuQo>U\mό6xls\w$oFV%X:Z守9;=~59@@c%G\ Rp~aݳ@${ /:$"yT rN څwb|1Ђb*(V\BvOA_nFkݽJd]^ǷkMsTM5H+X0G+LG嶜FñWMOZkRh$,lsnюH5jl2˂,o^S#:ӴO T%4RI#rP>u q]ݞ57D)PH3"25I[۵մ# GCgxw7x&dfPp"E \9NVVWߡJW%bQQD"!׎:י\[^9DMK0 PGHUL.2]AٳNX@.9 8 eqv8ef Փ9W k9 m`Gq(7E/nyQ~@\u 5tK\|,Lҩ`z 3Uf)MueŴlؾq1"6K;ʰ/<8_OR0l4_;g1TIXT= fhpyک+ [ӃMRg l8R- YM[}lU<Tvc*dqB%ke%NIEp~n[ߧH)n@ϖ|Ih◨ݽLSsg+Uu3 'c !>Vh-+lw #he<1זQmўO3jVE!"s CQJ]UTB=`řTnr:qڏd#Ffp(B1'9$kYٙxf4IURKFxٕfd}å֑$2FWuۀ$^;Woi5$Tֹ1Wom V:9FWw0GVRq=y*ZNMN-4kCfV 7pS%x4TyWϊ qܟm-2< T's_kcRVjZ[r뿡a (ЅHťnђMB=׭sRZ\?+I$.FO^HӨ)A<`cN)M+42P#54գ.=M!Qр6)o#>:V..:|QS0$ 7L^@fDE>a |l>^dmbo1 9ƒo`՛GU9]HYDv0(`Ozk>M&f\"L<~~B?bؚ-\iu0Eq3ym'EZ6g&N?=j'~ڍV\$1 6 LR]ZnU2ݜ|\͖6~eIQ0}_1^*ex%#RGlV*ܨpy]6Yԩg0fX8T4wtb)fRnF $t5*gE'o^iv0^/C<U/u&f0#~v ^]6Y 0NO^߭|\-{ܱwraTzm=?s1 N x!ʑb{gl}d.OPv qF3ש+?":3:`dgc {!@PX2NZԃbOC4;^X"*cX0WhOj(bC5Q"8.p[pGNY*qU$1rEkXRqdXvo^פ# u?7@Nz֢8<?`%s7R1AT0EkL:t}:u5vmgJϷ5/4m\(A"5N,Iif|{jT rry|.)NkѴYmE:0weFF3?exd !wSz39ʍBzzpMXGg3pASB)Us6T7rH\JC qN #^sQ>kcJP?F9A+prX0ClLc税nfEܬ]`u#h9'^UzwB, FF|=qҶL2=bwrIb2' KZq$p>^7?©$zrsޥ;wgA8hI<[Bq@r{t:dJ[s~@#jLuZԉnZS9J>#g'^}0O^=AP!f3*#J n <0%@x#,zAyrfKE (AN9ɯ#q2)HC'xq_W=)#Ź0 F$PNӄVۂGs:Uh׃Ъ!I#ߘ w&{/BS9=>y7gO9\ubI';$dFz23 yӓR\y KdSܔx$'w Z`>WbXs UFyrr=7FE^pUA(2aQA=NyDѮ;FO/ Lxg=ECޙkn HaF5,|zֹ1*ߩل&u>vk8݀XϿҾDp΄[\ <nцeTfx'0bNz /NpNyy I 9$IV3 { ӏRzc2SN?[=~^z۾),e1 dO| ` OE9aNq8\ `s99wӌ)ᛌFA#Њ[\o9_bzIwL@Tm,O}=B@f%J2>Q՝qvO 3㧥hdw+ǰy7:6-n @}{c`If8^33YJ;GWcvUf^0P:mqڽO1㑞$z^N64KK _jCm/7sۧnk}$S=z|*$ݶ_Ԥ,)Gl9OojNec}>~?˧+={8}j:}3{SI_jRقzs+;R;zO\zuRs8;F)\#'=R٩`TgO&ƅ ={W@qۃOΒȶ|t :RƑ4Ü#$PXc#9_'l QS@?ƛh3L_@O\zR0;z:Q&${hOp~{y똛ݐNIHUath>ru1$*GEnx{ޟ"2#xyNz=s3?} Pwwڦ%XԎx$cO$SRlk8N<VlpHx9'ʥO`p?Ec!ʀ9={ԥ8^{'<㲟uSqש\ۃ9A#;y+ aN>p+견cY u#;x<@7SA 9鞧 ┩v\vW:;ލ]}z4ݕ.mvvQ5uݤC37G+;i'iD@/ H#+NɨI1BGlB{JO:+m-VBHd y*Qpܤd md=RgڔI"K z9I G)nȫc,C6I`O;3P۫9vi#%Y~mypz㎽8gĎ f<vRJU3bkv.[̸` ZhݡHI`uo^H񓼮qzad$.:s23q\݀2\C"3"xer; ֚I_$6.YHQmg\ WJ 0C ]'X18wn9O\z;u,2t';F ='$sP.K:cwA׊׉0TsfL}߯5}Nh q;hI q ׫Xd2m;y1^ZqvZ8:_ )'3gj%h嬟rˍa8z~TSF;^&aTe,vg;Cs$(r-\7%N\aЁ;wnq}8&䑾GUBct=)[;I]!o-/8IQץAj-We*-Ժ**GANp3^Z||3-g2Xʌe< _j2z;XaqI:)]OT' |3n+#SҠ]eA ~ 9UMZ6,PFYTH8_8u<S#$sQQиr r} avvrm4.[iSPKP2\eyZ,0G*e9]n5#9Nh Pe1#!ꤖ\PO Á^h@JYKy (Zm58N1CG0?R{[:}@Ѭݵ7]Pyy " Nxh=k[nF(߸T$yb{=fU4Z+YM.Ȧ4? r}5\x󽘱e t5pj̖g*_ LҔPr@c#{PlA vwnDcvYQgRNvGD*;i[겡VcY gںKX78߶I_vʷC yѿSЦ_k򽽼,lYG ew^G3bYY%g zb1 ~CZ˽} #dp '=VTN=WSftSZs<k%pנ>5b^gAI֣=p{=r;Ryv.sa]y>9zց77p3|{vkOY#*E]@:d^20q`{dp^RߔIܖZM=r\s:cZnAsq3=  m.wn Nx,by#9=\(wC`=x:5"0wpO'zXg]39e8'uߍi Nz98#E@ ӞϷZOS2XOg4x8:}i30x08O 1t2=Mcob={5\A^>mb2`yϿT%pzs4`0$zTe}~^Ia)h}z=)>ǷLtA A&1 v u4s4Alzz^iK-ʰH#ӹSn7}`~=)10o |pG]s)BY ʝ<jV_-bX#mk!+?\ H| 'O=m0S9;w2 }EJ^e$C!ۀzsUZ?'9cbWnXHG|k4qbv9sR=G~`p2p#Wؒ yL'cFС% = VD(8|@9Ebk mb1ŎDI&"*2r# T[Cm#"U\d==1AnG?cV7t,@ .L>g^gP15iWβ02.˳0xw=XTZhReiI] ʎA ׯ<+ |ztPeJz'܃y08p`:܊1s2 yJMdm 0Jc:1I/לS vP) 3뚰&'PI\U!өeqo :ڤ< qxFΤ ﵿRp'ݜڥU #*Gϥ8rqG=Fz uq8888"ʓQ[cFwiG\=xZ}Qo'eI  n]邨6 J?0zd졬qĖn^d&\+\d +nIJO"fm« qP=Ui}3iVv=x]+.6F%Sc5ч6"! qӾ*€AY<9[,= ZqyA_n=\u8 u cd9EpF=Z {;U 1;\s= za`_7BОayUaղ qZ۷,O˴*3{cg/{ΉlreScz=j0b+9qj{;I\yBOq)%YC:T g$,"XI`OB1#:z[}[S(]VB=xQy~ (o9 Ort'K®Ю$YN~USc1EB4Eb02Ҩݻ+RG<}*x6ȣa8TܡI$aq)/ٷng^ l;'a#u/LV krI@]Qrg**z|crqwϒ2oM~v|éztQ5 I a]g.)gyȐd6yr۱~}\㞕i6F}$E8Sqz;sӭ`ѸϦyϽ'#DWcF{"fl6IP~2Nrp9緭mvݓ9+Gwr?*= x c1b ݰ澃Ez.W~$Čm #.p2y$F@ yyL'dׁzpZ|"`ȍ ^z7$~añی7gi cD1o沝aYzzqU@WRz=Z Eg _Z3WٰܶrĜ{ld]d\>HM &R Dž#I0mc]v(B09P~f|yPp1q;={z`)#v}ǧym#y'O$囎v1}Pqc+FH|Pre|$v¹N1r ‘y39P/@rX\d)#,C18>8y<=vg7cצ7!_pOC9@uspnJ gz 'h[Cl'' XZ|AۖSקZoq I(/PAIj8Y6?x78p;UE7ca8`wQ$ w9 kʵ ,w$hXW8-۸vwgJ|ҷRcٜ: / iƥg{/%Ԓr_oQ"֋Yح LϷS֓p;I,gM`4p/&1]Wp ˔ȑxf@na#[xeD 71 `Ņ1p%y#gJX1#AUFyxb$3*`=(e H*IU*АyQ:~4 B3C=AO6G<җ9l*J2!=h1Aav 0@ALy$>\ {8dO t A?Jgג2wdI.H;p7וp}}T dKgIqܑߥ BU-sszݥ=1(#'^FsOOl;?xPD |p>֓cF{g0CsOHa.?Iϭ!m!s\8Lb"/2ehcJ3+1F]9?+{O8L6 H{xi˂r9{C.O$sUsy֫.pq+rB19=LԘ3eKpIH'':L#8,zڣ*  zw4^Iʒמ8⨑>݌79RKInt@vqNOО CgQ3}zSS@8x8i&;y]cFwc<֡/Ik`qО~V22G PJ,If:nw z ÷j}Gк*Xd| hJZU88mCUrE)E1x4)9YUWp䍤&ubAzl3@sHo$*ZJ1s׫u8Ҝq2!rAXq>tgO l er|e|qiqsknq <|ݜ`0#&z6#9x VdD:̬U$<\E VAHN96Qmks%;E=2/X  ޙH(@`qԒ+ۥש9%;N[1py?rWw8# q{>95RJ霜r 1MV%e 6J1Q^!{zzvܨ.Jq\2 Woy^0ǰJ,W>zR@r}`3~]1+Ȟ3m\l񑑖%5Lž eJH"g?7ުl@OpN#KN< r8']ˀAE=725qZs.*T"\Hɓn3ghtM!7?qU]vgv_ӓ=nԬmB`vNCm9#NxFvL&@@a}N)㹳HzcZmv` g=VwVRٌ1%S;ퟥwVw_(꯸䓐1ƒ?^淨.ս-l؃etfv}@qv cp3^LNZ/B3FcYV=3j6 W'%NH\'vC~ Ex ۃmX/C2{.².m,r19*0@涔ng't"-—)"Un:q?v \Sy{9Qn-J-s7Ռ:H`PHǠK}0G%7g׭J3,r0HᗍGu81Ev#`qwdq׶AȱzdVjky|Ӆ~loݓpn޽fw` -ftDq¤pŕ+#d0pB^rt83mBH_B6#*Ux$jN!4*My}d=j7!j<|p!2}ԑkڡcmޱ$csfյ崖i. 1Gq+ghNI<҈Gb9XC"ʶA/]‚?_չ5"ps $qghQDM9ua lݜm։q6Kc|M{i21qlq4q X{WxeZ6`8R~\amN]`0Ɍ1uj@/`#NֱObuc)6{iQn XpW>(;q U(c&;V ݵB.w6ܥnYѣtb`#$; TTSV[yiQk;^z?)URĮF1"Wt;LOlcV)5e{>:kFZ_~jϏ$>վ0=,@9=+3P>dqU_q,X g9:VSVRnRMty]xx~i6^[@rqq/k[6ڲ>|[MZp0u'AZs&I'F"I9Qd[\!{}o91!6{NW+6Ҋzoc屸J9`QM'o# d%Cgp@ZW~@1 rnE…U'S^>g;GM%&S_qzI|2jGhm1Pb>vztVEԒUYmdg7$t^mK=[=*z%+Oo -c\m 5y4!E& [%C*'i\N#OoefM)9\cNko!b#a9U- aI}] g3Qϥr^+"~Uݜ@i d yOI2HmQ[m:+RW1:pe0zsN~Uztֿv6 6py+&oPYAyrO_Jb#MzxL4봒uT FD@63z^=4=䏙#<WJYk}<Wåe*cpw=9qG𦒢Xˣ1˜3G9ZW^vU@qm*z^ѧGm qp[r+_zc|]h[+_rddw5ty%@¶#߷5zU#'y$. qӧ0ž~o@@ } %d",U *,3뚤pd q~Sߛ#ʻ!9 t%tA\2q KF pk!Q 6 l 9 is $cv 'ׯ֦#f$#8J&aA?1*Sq['8zISeIm#ɪ. {bO `0rcm^ Slg'2n n/yLsڬ)@$2Nazy'wwo#8'o>@'?(RH<=G:zR*srx=w78ǧ^Oz㜕9V3W7KcnGrֽ0rB #?J;ܸJj*9*0FN KpF Ϩ3FzosVjQw6%p2{t9yN~o#;qLM/g6>Nt=;1<ҌzޘX@:߶*\]28tbU;=}*@c=kE,#dzr?8oÑӷ)Cܓ?GN<{?ȤG}O {?Jñu#U4|jQqPH܁p~O~B#=E"FyHzm}oȴ*~'Uqsdn) Iqu+n" RHZNsd8Ls_^0RX;X1Fb=:WA:ӗnfB˫K##0Q_lVd9\nnrI xGT9]A$h~BRs{䜏ҷ5hRĿ0I,ɮű-h3gS90S} m!>s_Ί.A(_T(Ҡ㏛^T6Dvp3gj)?r~둝 p~Sʶx;}*aN*6)#9=yя9:ʛ3& ۦkzٜ,xP!J޴]eFILL,\.ҿv1 k5nx u'=GJ V⣍; &rʨx$H |fUj@J$: jl__#t SNO9$?IH Mذ{~mr1ַA: $M&ܫD *]Waq{ͭV+2CpMͳF<ȝHW ЧyܙB+JTyqKOHJg{JBqܟ^fQY٘66OAǰ5@w! J4e-f?@$ǦGZh l \-l=\zSb# ݱ#n3ϧQkْ/+Cdg=~R"#ػ!R?0 eT\kUk@\@e|O\c9h,6>q;Ǹ[Je2m1_9V ldHC<.T 9+цvSۯ"1G/q\PW_jp7%sIdb2{zX5ufkr#;HqrqqIぎ;uNk#:v_w#mg$z.9ug5#P8f 3Aya:Uw'$'{==3ҕv:@34I'Pqɠ 1~lz`r8}(?'d8cAc[ qzN~\yU*Ooh%+>C+`SH ]f_]9;EϷt9;\]B-]&z@$Mw  0j{OZ1B1ǩ} $c϶1̭W"w6#bف$FO^sqK%EvFWkf[)$bޥSf%nUqO9$O\{XYjn̹mڻc(tBGI ۷JNGF:k1NGq 9oNZ&Bӵ=pyJ[K뜎v?|Vak%{'#p5Q^GA r1{~uyyߎa|m]u=9{cҞ{O==P,vp=sK^?R}駷S r?@v:/=7u?Z/}:'=*)Gq~/[ܜ61ٱZW1NOjp2b3*:lr0yYLyWM苉˓?~IY@ 1YhƉeA?OWT:7g̀~(<}*E͟>߅$bOl=8'8kul\Cc,X%gRS=/kJ/܋G常/i5G]g7e pLOxyH$}8 EZ)o2|ԋ2nqjiv4 dzdFLYF2 Zfrc|4"XW8un09Qܧ$!_Qּ<¯4ھ䴹a)lܟqQ͙2s W+$cR*~P#.}`ͥlz' {KuFAe$vzσgT)nB6zq^YG:-IBz$ ]h2mb7A`vy[))rdžjM7(',=ϯxDԂ@0rミå6"h;GsK0{ ~t!|`/qۀ8rG\ֳp<ĒPI/ 6}}m ;J 8aJ7P^O\tLd:fB2xp=3O-כ=&ʍ.0%r@ǧQҹMKUIObL x85魏0r3Re*Leh<'$2xRz6J  IOKCR}dC r>^,F9{W-czp,9ryҭGXHp8+.JNA{sKAP;KԺ ű\.JCJ*czWdN͹,9RWӃHg3$o:39t9;N $yFc<[$gFǨJ!. l͜!ȏ3ۊn{[bH9,|#c׷P1'NIS)[2nP bpCǦ;Fq!PrO҈]S+$C|pV=1ZV6/uv+7n+82I7x27.vq8>tR䭡>FFy'[9H[dGbc@q>t(ic HAcgq `h]r`uF\TQ @U!y%OLzQ%C GPtSvct㏥tzuH>R8c08*t-Ը#>9+b\ ʳquJbbhfF[r A5_٫YLl[E8}xaNZ}`ȩ@f7_\z&\M/󍀂wX`kuu-J,K;9,T@9#Y#GV5Ӝz3Em\e!-*@v,[QP |˓G',O5CmAse$cJI} 0D8Y>Yn?*ȝ])rG s-ek6E< /==R&l#rd$Gi 8k0I4k(IC9Mfct^`\>󓷞kn`'yٿ9}X >gd dpĴi x';̟(%͌YXNӍG'<$ul=:mM?#֙?<cFq۟J%K[ 0$^z av@0zRܵDNF[y0s@>b'=irLk+ѓr2[Ou2Cc- `%7AzsYN:Xl"щF`P zƦ3eVߘ1p0zbyugtezmPFL;F80=MzrƄ \F~:tԮkЬQ(L1* sFV8eE FGn3RՇ$rl~p)dAw7)+ Nn Hʏ8jxQNTctt­z+dq3'A @NHqTm*ݖlsJ:`r-=zIq?*g-N2֨}K/㜏h8H{Bv9+yGl4jΛ9 yVǹ8"H. (\8:]@g--#c00zdWUqb8M㑷*dq:^}4 EFW9& K ]Z܈`pW+e}dt82F%Xp7tfa-* Ϯ=*pNH%NI2tX63烕>R  @te sz#ڗK-QU v@1ۅkoM 0R7&:; shD#AƒPpnrqҬR"f8,f}Is#v3[i_2v8Ze"]2 }:c }$ܲ#HTU$>P:*هjDl`zjo~ R+e.q:UݣuqEÙC. P ۩Ї]U`Yd) 188z\[\<1%Tx=E ]C%f@IyXdVnN+ZfX@`b~qRV}٬dzVA–=@lY$naӃM|c]DއeX˵NOZ"2zrj1{rMK~U/}֜cNTdN=~D 88bx8=8=xkcN:vkX|FU>q7 c\t5#r[rʈ(]Hqh~G_%)N\PzG󲣶w(_<(9$^3^=s+nf `oN{uzT^FdEex(vH<[S[nC,>BxwhoFN@˜Rzաb)>e*J.p3p> *Y@eUBTt=N }A $Ȟ}B ,w (8e;F N|Җm$2S_u.7 ;K+죶3c Nюc+83Rԉ@,Q6*A):rv `:G@AیuL31- 9p,>pG͜yTsG Np9<=$$ . zsޜ29f qX60=:g@0J78F+gq<*?1u~3ڏ0%.İuP8aю Q[]GL9'i$@rsNMiƋ|vN+]LřK!+avNOrzwrl3(^# d. ݈h{EYfba#x#ZE%O\zYHObL#>arǧ$gDY@R_q 3z/hFw(l$bŷp=zwL8es3\Km ]wni8aUf!1ϩ<Rm HIdz"mYH|9r;4v7+ŽZO(3nfl>p0yɠL[,ű1*3^M7ixsǡxtd^W\9qM+'t®G\I} 3AA?u{|@S{]E؏w` T\o1@u)!22p |Q8<֞6!Q0yz(B2JA 玝ic88vA#LT$YwQ8QwW9p g K6[ .@J9.W'#$Zb׮39FOp#1@wrBvwv}O} 1u z# Hi UHw vz_`X23ב']s$r͟ t+ːTt; `.x# !;;C899IH$G! I''S@|^T e2=qTv#vU+`W yś'sIv qGe)G4?x=[͍a!2;`z +x+&kbs:`Uw={T+o~`rѐyORxSvW6#mr!N]'wxOZЗNL+#(O*#>ң{EW;G9f 鱉-0=rjb͸g`78f!TFD0!~`u޹*p3G*H|&Pr6(b'B`ivs5.$Վ"c Au?yN2^CF~BU,N9'>z5-)Sm͍OazŽMHpc㒸1A㎿qK"H-631T؃0bvvSaDzB,8ǧsNKCHfɐgb?5 eg{(.w2T #ڦ*)^ml+vc{5rE9q+F>N8ML7QZ( d- s=eCkS+oָjPQi5wSEAhHŒzXG)n,qp*.Jr9~ # pOO\]]g^pHϿ]$ta<(-S'=1Z6 .WGֽ:kcsӭWO~@`ہ  `&ЃqcBz_E\^={M ' vx$c=: -<@$5Uh"KX;r9O8;](3յ/-YoB@蘿 TOM@ɮ E{apsh;;$|IxE1޸SG~8qzP\ݴ)ȪA!=O\8-1?^VC}ԱCc]:smHU 9̎Q[vse `yÓF@xy'$l>6@X;sWc{' HfˆP+ִޛ+!S?tvzU>cF%؊2sq)V0>{$>ꃂ 8,UfaQoʍf*O Xv:UEwܓ{.xW[i捬YI&C6B8?wvZđ$r3da:3dtjKcϑ̛TqH랝x,bܱ*;q/s>Qqn[Y3taB>p:ں{\Up$o0AV]L=Z.AR1rWxǧaWj} >w&. A8Q4}6~Bx /ڳ{&M!%As< ~5mpîsxxqjo`H+8 3r;q5NLq.3s|޸xh;hqw*K![usU#fg,j K !@N_8A# Jy=Ad猎qޫhKyM,p=lr#t͸A#q9) Tj} ?uJ#P+)b̹s9zZBW sdv'9Y/۶f@'1Vc"luEM\s(݌O\S%*aw5ʘRWܩwĨ0g$V9Žwf:H2+d ved-mӫ+<23@zS՘b'9$&{#zcWABXd ܨ q'svh!Z\ṛ$8;s=G:cXFq>zl$`6{ŜVt׿5OCkC)G62A/F zb ʮ}ljR]qʋ]F3ػwN-|`#Daߐ6y&TO^Ikw19$G@Oҽ2jy+2 q"q쒄rCaOKĚxM9;%?zW/>FQy6{򱸊T!SCvRݾ V|=+Bq yPƪ큑=:o~ f2gn_\ueG|TlE%ENnqZ>}Q:=JgCOܚm{]L$+zPi$~ze^;&&-o/"V2bDaU@iOTܻ'687pr NM[g%m: &Y76.d>bar0W7}ె"bu>ZJ7:jޝLU-ᄱ/3z3O⡋Ķ0+2xXt{88\~v+_fiѺHBT^4׷ע |cJ( yuLRr7AEgxwʷ⤕*F8':תk~"䲲wG剭u. =99W|RUfd|.{<1vX*נb3 6O_lW6޺ZWJVբ07 dvX;7:i?gCcydp,rN2~lc>+ T aszvjԾGIշws4QVX<FʅbV9xqJdy>G)r'!q=>c+. p#LaF 9=G@9E! avA黿1ҽGcŪf[dI<[n|$o{WB_I3Q?uH?Anf.yRİU82\WB9C6-3坹 t888>8d@$B2zv218`I{=pv$dA=iXWvts?sϭ&q>KpPG:(쟜O8b#{=:ְ'' ``LE~Hܰa2=?j].Vd mϿ~ރ5Iٜ5w=.@Ì`܁/DL':?a"(aPzpJ`dw~6` q=qSp~lg#ǡ8YgWcvcALGBqPys]’( CZ Geop9Ϡ'1ۉ@Z,~w>S/pA@>H}8>yHpsFI~z$v78^O8?\cN}93t":prNMn |28ڦS#sǩDqsu1VCM3678玔I~x*ɰϧn{ x ?CNx=jH՘r23cH’4tq֨ʏgLƉT}z:c{vBa>9p==~ÎN˟oR~`s>( &7H~2A=`]jTfpʌ޾%I<|^"ȳt >Ӹ,$dq pFԜ}:3׭}5%w9SM#HͷDY<_7$v,zO{tv&`Q8Ta?Z1[˴ݖ Ӟ>$k?eOFNs8+/\yV,Jr8u'潣FOu>:W/z 9kzj‚9'kn'9T}G:L^ lm$9+;SsU^HIb0%YN^)rKrH u=}1Ҽ3`%!3xn >rsӥ4d c׮M!^X, 'v7d7snX$9]̦ŁDx$?Fkr6aԆ8a\|O[\(o7BQqT7`aF1ro3[뻭?PK[nkZPcgֶ[ͫ_彖9Ht8ӴdO9-~f QmTk~rO۷yA鎕3m~[vX Ӟz5:8ofK86) gV߂62M$:8l,Wpri4.eU>wF^54pa<ZZOdRNfPna]yviōC40:ݍ~`1ssTѝd'?6'ymoGF '9ꨞ b=Q-C:zsM9@oRhwDT\v?J1nj{@0GQgϹK`Mj=(89h0~^}xߧzV}17?Bp1Is8?4۱Nuz3v@?H`~ZC1"8w\3uGp2Fx}{;`_QqgLN=? м}yl~rxy<s:͙s`(%Iԝy+m'ݹ\WIZţ.W?{7 ZvA'ckԤ-"\'DC=3۟Z݂qўrRp9@[و#p1]BqN:cN^;\8FN +>x@@} xQ.áޜʐq 7?Yء1Ncޥ\GCz5آON=>U3=e Hn@=T2}Q-1zu\vi28ck.s>-f3) ?q߽xޣIvY09uc56wnf+OOن¡W|bIRHbjjr~UY0O~k~Ǎ^H\Jm=JԷL!2I9;ʄ.SGaʫ$YSx AE<vKyyrMkm p2I:Sj.H=ӼCjngM!ibSpH\ 7sv\v*AOwCF6eĪ1&NFvmkõ [?*dkdߡ`G S\aq>LϕRytbq+ԷC.8aY gwN9la>a&񻞋kwH`J$i0v6AO'Sڳخ_9888ު$q,as-)] .CpX0 ;hf&*q9LuUs1Ԇr.AcS{w /q]MU>`'9U0<= OK{Hna70’r=O|Us`|anH=Ku4cO- T >cqקhG"0 1+$]ϛc_ΖЅC?1<7'5+w!]QuP1 cszҴCvz==|u?RPx lqsޛG8ӓӰ[$Qv{UcI2q$~cN9SO$̱\ZJsZpmJwd03#qƚCǦz`R oo:rj/cG#\zqӎU>Is0O#Jˡ=:{x? tvd28 F7"۳96\Oҝ'?Nw?z w<׹2#7Oʰ1qzU]c%{OQUn _}DZAody=:<z:CbsަޟqҘq18+Ӡ9㞄nl UNׯ_E1iw=NO;>c9J1>ޤ:sNbQ؎ܞ@vQ"BG'ϥy.đKn'+R߷_3x8Ow3Ke3C(?2;zdUX56I݌\_} $># [Mli6HېpIzz V 0grXzW+q8`ۚMȧWc+N{Ȯ :aFӜoǡ*;:֓Jmn]~UU`FrN9a:;Vv 12b?W%խƝW}D*䌏cANqYrӪp$:p{vBnL^&hg?.8qO8jDvFxdz`G#cu~h2]Bryڹ˫++F c| bT}q'hQ|jSӟ22^m)>X9q }޸gC,),cA&2ɻ ~`Fߘl30L+p;U}BhRSI |CkE„';n+>S:? i. kfQ'zՊ$F!c1U`x`޿32 nrA=MqױBz/G9ݐGpUp$`ۆnƝKnG,B*G\wY'r 3 dAAWW 3irH`݃s玹x2 Lf>֌I3Z9GA|àGDA0H>QJ7 Jm\ӘdjQˮ2dIU[(<+'81/@G'Qܫqm]FT33s2rJexHOJ܂M._ߋiFc.zM\ӧ.DH F.3C;$TΝ4UWsgr 68ֽ*?5Hr$VWmpURөFiHcl/+jގEH-rW92+{Q%B@8mn)۴<xG9ҥݣ'F[pZo8$.GLtټeǖŲ29GNBB2Ƚ~OQ/#hs=zVꀩ_|zw:L#1ggG>Ҽ9 qnrFOqӁkG).{Bz})$8G<ާ $FZCg,}Ny5ޣ$E˖89 vF=EuVjj$6bGAG^kqIpAϥoE{ެ~G!a!b՛y0pN:۽qm}ӻc8mz֌Hb5޻W̌mEAgi~򥥌.i\"תvx8H=*;2YvcRwy3b``ϧz{Fpwgg^Q-zȸګ/m?*:9ߖU].~e=I+ ]-r9'VĠ**1+Ϊ;03Γrʹ;g{t]~'TǮR8't X+2% qFsWkwFz#vXFpbr +۠Q :=Hu9-L,!q(F_\j잠Vn|'09o9,~ $G|1#(%@zsҏ@I'#``n@)pI t=PfV1enK0uS[' 69>ݕPalQe `&G0X nz_c98dߘ)`x9?LQv?0gӷlȤ* m6cG|y9@0m8;ӂ;QAldc c;[!B"@ƪn8ԁW*dgBH=x܄{֩7fYB'k<}j;1خHӓT)I7 y]۔ab7c0Or@>1 N-cgVQԭ˱dn$ ?ڬ>0{IIRR 0J0F9'&H970~p2(qƑc)bیdY~3$u=Sޯ͎BcC8od@S$P?5 NFR%no`F1 Z' H+ Ў+(SIrVe%*˅'2{!Db8\c9cA';U|Τfأs厥y_QZU(bW=)H 1M69: n67W)pG'>GRz |2,CZH,`OSV~8t9N :qhʞxK9+"Tf݁S鞕:ܘx2PTaJӹi~O*AzR3ֻ]3r$f*PF98zNE}/v.6۸`!NNMh_$2D"A'`99WiJ,nStlB7!$_]ݎu2?c'*k?v:nluGlv,ۜ IlRpx5$y{ðr8λ{16H,dW>){K_+kMmۤ!y2T x5j?'M HXܐ#' u8^wik+S0Gl̾||"󆵽" ~esvuShrGPN 9pk]̧U_KCOtH["g9Ve rp 8ysQl!1#$#' QԒc02'1*zz&o 9䃞e=]C7"Dߐp:[ >mKw&7.EeK8Z5gR\]fi1jf`VKUUg#ֲ%Ѥy\^9q" E {ur_S?M;2D#i3$32m#K68ݔIe2}I/_j9~ʮF"h~wrgigC(/# cP3ݩ> 0 K* XizjXJ@ \M۱kjs#ܤN-S)1P#&d1qDH }Ja8A8%e3ٻ9P!RB?!kBQv3ExRI/,_Rh]LCkcks ⼜qZr۲ǖVټ;(U$~բQI<gRFmrmK{tʢ!q۞}kKA,PW&33d >UIs7{ȆJx4m((fٰq St7-SG- 2 Nyb1i;_kSW[qk,YnruyK=kE` ǻ D.2ܮ0GzOGMͩ>a%E޾S3XXyglsOZZbmxFlYM&O˷$985B4,ac(=`ǎ `߮qJ 5M$71ƹ$YB3xnsi8ʱ4Xm s=xD='z>D#&;%}p8xoJѡT.ba,6;9ޕZzݭ5fi&?gIxP 퓌9kHϝo%ywq|jҒN{(z l ] 7 ;^f%{ {(To%F9x]HHvWa <}i[3ꜩG=kFӷNޠeҾѬDA>@8 ?>O9j>&~ؓˁ(#fޠ=Oa޼W1' A'?^ M[gJF]1䝠q3` tFRrU'={ ΊORX{z6qQ^5Twl;<}1QpÜ0-2=uz @ vZe86FK\cqV0Dr$c<m\F9Qy8tl\g݌^Hbx׃q7  .HH#滭<9,0>@zzc#'Z֙MwJ6݌HWyǨ8u1n9?7p ޝJfSzWvu&{md>b X >PҦP2[:]Qќ5Op=?3VIϧq9=Һsh߁P IN+][!Axa֬Eygt"!zskv˙ے1*ۺ5S\ԾGV\}އ)㟛%rG=/3guѳg{z 2p[uTg x!rF3 c>As8$~f!9۷Ң[t!= J;qWdAF$ Gֲz*ÏPȅ85 H\gs=8kFiq2;q=H׭Jy#zdqk2.?A<]~s?:nNPnW9+өȮjS;7p0pAc?^uSgϤ˪;ϩ;?ҥBry>"6R8oQym؞ʤ{P$v過jG'#Lg<;`Ì08HOF\tLݳu(#w'h{~MJC=ɃP?ebiF`U}};t\td:#ӓÊ,{zҥ!IžF=~2Kw1p]~`[לr#Mn"5 _zu< [¨2.IpwIp#r2=@泋CЌ`O~Gp3 `ÁuˁP {g|ultU/ǹAso=V$d t2OSՊeſ=KsI#X1yc!Дz('pAzn2AJd< \全r;r@ gW9=)wgWRYvn33_ORrFqڰUAf+4jq ?WJ_j)'erI#>zy[X89p=MNm9&6$+1#3J4,ws˦{]D%8[N2:Gw14c; ~pO G/>RE|1I1sc d_2#VRђs⫾`9$2`*J95V:+18*۞~OXm 9ⴄ}GѾq ; M$i^4>U6z ;vrq={uwg5̫qOzN4u8j֋,>Y4CJْV=;\SF2N_2y31ԛO˪SJ:Ld}\m84psܭr8 i5㥹;O~=*;nA) #泒;QJ@;U'\g\]%]ǻ`)ztUUwП+Givv'܎I2x s@>9I=6M쎎ߘ~e[$z5\]SurCҏ1(Za׭?灃׃=qk7C{O9Pp#ۑJ!#{~R`ǯ8<z{sRRoG'K_3PP:Iۀ BG1"W =Nr9N1]=;#S>S^}(=y;>'~qӧ\U #G:ҥhz=w 3U5y\6r}=H+*gNɯbȤW?V8oUa\>wSVFGzP`#ZԤNl '\Jis dzҾ"l;,us:ghyґhBF8$uOOSqcVׯx5ȗq zg=לg8j-.Os'nx{VN~a$qϵweTpbr_txVmɀS2zURvT>fԞIǺZEJs}FIƒ9GOZoN#~by#5z~ @,Fc{$x7u6` T^ޣ%*8e W_Z~]Ʌ-P?کn)= +0\eD'qī>rElKgvP73w>^ȮY`>, 8gEs( _'p?xǩ5Y~ӧj@TXc(x#nz)q+ Wv,e9\WzgAZ+ؑ Qv*;NB瓞9+~1@Q|ǐAp9_G^Ifl6+C";8 rX枊>;QӁ8ސ}x ~r ?/r?.jbz T۴h^4=v2`)'pc4ܛvȘXݜ/9<(гMEm\62>V[; {vZ޵|dHI(.#cҡ+t`iS7)júT!<Գ70b85ZL:}Ė+ ·pH Ii=WhN/V&$oLQ|FF;y}j3)cp#n¶ԚW6SX^^6mZ e&wue*Ae@WFXhn`qjSMkk~%WdG'X Fp:qj2~@vh#Rrp[d7 pSOh`d(sI~LbaJ2.2AN?δ.K'tp~|*2ޣ)ꘞ׿p^L{f<ˋyh9ߥ\mw "7p<}z\mQRvzF&:* 0DY>8>Rc\ c qȯ?'n硆7MJ9 :nzp~x=js8瓎s֨3P:W[VNȄ:0:cGp=kKSBvtyA=zg'_ƴmcg< VIƲZ:y7 *dvmL?ʾ|x{tg<Jwz'0 -nZݱ<Ͻ'; S)89 瞇YIG|}k NNTfqϮ6Y#6O@r["*8[Rniʹo`'832A3Eq#G? WCo ''?qua͈6}:;OsלA^.\6Ux<ueh38=kfs.E=?cOTl^r8錊=(R?QsGHUffG= c= Qr3ϧNFM0zۯO_>ϰ-usI!?~{{t`{9MKwG:)cߏ|AN<WRZXtW!_]Yʼn'Mkcش (t =+R@pʼny*愚ўq,ɷ%TV$#sRh}l%pزO'=Rih\KyP`0;1!޺}JIvߵmk=gPVTH!cc+JK- %1#2]!%Ah-'],V-6G;%dg[%u9ZA.S'͕DqGQ>K7 NY$C:Z,+卍HF`')q5B@ `&vC.FYH9"6D uD˖ЁimBQ,rT卣+ `YG+iev ѱǯb8W̹ ;l88'M\D)Jdz>%S9U9<v''*jðYXda$GuJ$GRm"@]ESڴR!I«+Fusҍmwe ?uX d8^7m.TÂ\ 3)Oal$VnwH\ ?ӎkҾ ;H$l4]M^nr׮ŽDzr!͊))C ȁ6mgsT~dXc5w~O2zikeXc|FB$}1\q*p;zYTɭBNe{N.#"XS$<{V<ւecRw?SX~f.Zn /{)lB}G^gvߖ#h'a}43uARPXH|-|zSA<x$?.[3֦J@.c O<xzG\dRȮVENrpG|[t{9l`8d͚`~A#<)=T@봃X zu5*PpA 99m W=+9nt'kk:B68 G( 3lx9ッ+Gwv8pI۵93܎<֚xdcdҧq$ppGŭNsw" *rL 7mE|lު-?vSVa7K. ۱N0q냼 CଁbH ǦGӥtPWɈs:6#s  uAAb_4/Q\d*t{T~ĭ񚻗 RͽG/Ny9mGU 2>FkbH& ݯ͓ bfAl3n:sқw4!2y9a0@s֙J22Lϯ3cn2n|1r;P?w+0˒6-+n"VD© UB=YSۍ]*}[#!LkETb#|) "eP\}2s助!YW~zQzvڹA,FF*t$ϖ$ CrGS _KP>ViP?>bs ]Pͼ F9j,`mQ`CcsNҳzy!V 8Q9e:l7b;|Ǟ -۸*#?.G|{{fJop`9pOCݑ]@,9K$)U;JH.L6Q?Œ[ 1f%GPyg#4t)lJ}:!{epv8G5eP31=}8"vh all>_cb$vBJv s$zfOs>TWO Rn )gf<`o?CznONuWa0APv_|4}^9+=_?ay$}.]ڛoZXdF;TnsZgF::zqJRvVR1$c d>V=ݪ-0YGKF.m fb[㞣~w7e$3?=k˪.<ǝ<(ʆU/̥b(fSmq7992k޺OFUMncX}N;ҕW A޿.=@dzUGta'8l!F!>c=I|ʠPO$Fryp:prjf\Iydʤ Nx‘K4 vӭRyX;S;H/W+1ϥFX J F pq6.:ă}G6'n *3?+TdcO@ݺK2<JF[pV1@qgʸPᘩ[zgBZ5ʿbd1P' +tmY~bĶJ 28##<3Wm="H0Ur1.gL.cr aw`RcRЬ,|[ ².@NA3P"9UcN N 1_rcp Tې>aϠ84!;Ƞ :dsޚB2ːnGʔfʩ a>àwؿ,K"l8g(%7`;HN?%p v# uNX׮coN3hԐئ|f =9==*Ʉ}(ga90G9LPvq*n@`pLn 7rCg=@/mS+v:tZpA>@0&Xu穠ErJ mVF!z,a=r*4r3G<wШm.8p q8Xrp3ӹ=9ԄșOybH8U \@=};SJl{˂ <Ž4*U[s?H sV$s.ت3Xm g<߭I > Tom/Rj|2F[}U/vzZb6qq8+HǯrTOH2C޸r1I#UX yHfP8-ʕ#7=X9'u•g%yg+U#.)RW9$+V/jߌHR +mfGJs*8Kvkj0LɍbHtb2<0OLh&/R@@m!@q׏T :XU$&{hn3HgpGs\Uj ܅ `뎿,֮qمl}X9cK:<`!tRFQ=~I># dsʌuB;zݖ1`dR qqLl'q8ۏˎں]~errW#w' G<.G;TNc9$$v8ZBd|ÅQ ˓`wVW2f$r_s,秗kdq wp~s2IA@5tW8*C/?@5Y=JpH NI֩F% œ3s9ЏYʌoVz+ 8pO=jV8B9 r^vF~P9'=1~(ɕP6dHq\jQۍHS`4-;Hr7{޲Սh|HW0Ns"3s1uX-RƢ4(8I4e-z󦵿;cugh1H|>os3PZxeIySt$Pgid>S3:*d`i[PՔJY@c$9n@#=qKA3d}`B2&q{TE5s[̑5&MFPHzVLmS k w n6p79TW2Z4 5)so%20 Sy(w؟Zrn%s4+mHKzhA9%UbđE}sw~.DW;Kuɥ&X*'n#ס";<Yq6$?ݤ1R)zc޸߆r!X-cǿAғ*3qg37gz[&8;+Ӟ|:շ[1ĕ39%Z^zc)/ڵP摷yAtGCT? ^ݼN$lcj>ᑸmzb- 5" qď 9cl7x\GR;ǂb|sAIN5Xt/$EU;6 Qp# |Md|mI`-48=5FQ,uZY?R> $yq =!< !qgn2qEn&+G!WGG<>G's)S9fϧ}IHݿ>V<ٓtǍq2܄Nx=$MCTR@ FFsR UogS|2ag4P0W,APrK$`tK]Wrd[M=:yׁ\-hhr1=<)=}{5,푾\*2%/#i upډmr7|@qU W~_#9Bƾ\Zme6wS~5wTR9x u'sH!>s&%CwmǢP.Vl|r*ە+ڰn{Rܩ>Z KwhxkuKc/`ݕΫqX9^Aa=ۺ`33O#кnYʽ{4M3_ٳ42Nt,A;rx+łOS/Ϊ&!67̮r fXZo&֚3T]'0A=v'8$WUsw5q92$[Px韺=8ֹћ'QϹ~#J33n@8qϰF?\3зP!>=r?֠99s:=@BOqұ%P=3voʺ=3اL /rGL+I 1Ov^q~Ry>ӫ $rx;Tv8ڶmz Gk 92fjv؎]I$qیM|4+H0FOsiOX3Xk[ȌnWA#ӊNrH- GϯOjqJGl{ bI!T 66BÎq9 -遜 zT{lPG<\vɩe&[\|Ipxe>Jmr+55ĘUTS9RQG@=2IT[A5bd s##sӎz~U O%aҲhNt? nK6$Ϸ`+bv30wjftz~gFIb2'|>?9s/:2q V|u}JV$7zs5x80ڌO?IQnGc@?Ғ}:dg?OƢkOv`A4cI8 mhᑜ9 nvȍ3Ar-,3N?)AFH 8ԞA9^~lVHMZןx9#p1N?3Mwd^K)=AFx10zwqKI61n19#qn6 1׿^( \=j،z ؅~2F E'K8$ NjX HT#OdFI q)θ [kH@, IϖԀ;rq}[L5%ݶ|6jxI~e.̊:9 ,['T|NYe7nl*;WMjx1V() ܍˷hNTа~\λs<ˈ I7s5/Q`ˀQSYU~J+4 /,x+3Knp3Ҧ C`.A9l0[S;!CKl2Љ>Ф;Ǻ@{s^R7rs8`=q?69-ЈpX`Wr|23ץpKC zӆ1>Gnn@==qRTcbrÕT1`w9]$ `2mV͐W-lIyk:4̨*'m? ;m5!yk"_hI6K2n1뚸ȓqW׳HL!+-~GzʛJNg{mB{Ӏ6'E|0I94Е+1>fFww` ЀMd8ܛ2qcx8#np83X/W-2xqֽ)\'t߫=HGE#$ ss\wmG" p=Kf\\G.%<`88s)Fq`tN=ocrz$ H9qNsOJ4#I9nAC;@L'rR00z1@n3?2l0lh[XnZ6;p1onk:M0TpWШ9)_90Tf'*‘|BlVG)U U ɓ.܀Oq[F?Ai=k× `zWZz7M9#VGң=vԮ#>=;}G9&asPc`{ y {WxM)l;Uv"?֕]|pq׃ؿN%p;wMN#kr3T3`ӂÏ>n@qU]s9: ǕSLyq!r 1h9HKqScG"==GڥCzw韥D_A֑Hf^;*=F;?ϟ_4g8?j?h8'^~#>Z0' {bSvFs[ؖI<m袿#׵"ɄHBGI8 'gi0ʬww}ry}q^w< ocSjeû#6XI!Ar~mI[Gl䖑+_?6pyV9#tf5;ۛ-+ 3zi z6GJ%V";Q &R8bv}{qHDH]<[2^1㓞#S.rq]~֐hHaq@'XqXBR)3=]e@ W!Vc뎙ɮUAqKz>8>U )@۹[b=6VNܤ9=>eyf RFz9''J򤌌𯲢ki9y;vu B9;:zjZ 6;s5ώқ=\n堌^F28cҦAvA*3=~gGeq C6 Iq8cW`qK}03ҡ+hfd :X`sӜvqc’ ǒĎZ%cIÕ?1 deJ/ pz=`=hWOYܒ,$rs/9$բ*7AUe5JvJX^NYZ[,Fyc\wp`Pe z$~8w^G 0$3 sFe NsʚV{)l@ ?)!(ZkRwo2O-:K`+1@S;G|֋jEILHty2I1o%U!X#1>a8򟽜u>6oLgH[bѝ;?mr+ۮiܗzl~h8\rb \RWm&&D@腉@6ys_dY8 9_|?*gJGInϯYbǹOn^r=8{3[՝#+ϷSy϶W3Zo=zG{sGr@;:~Vc#&jx#SW\lԁ=֧SKyUJwm }qsҏ?9 m<}^y?ơ3|d>;M7)R"i>S@w\k=~\ΈB7|#>=/HqEe'ws+!; Ӯ;wC$cHoc2pOҜ|n:g,eyVR n$=o)ϕԍَpOnzgj<'8]ybAp3OJı[i?jLA%I 8B]$9z!bX1=?$Jzq[[G6TKǍ.}9秭g6o&;!Rr3ߞzZ_MZuc (7;F>USqT f gP "N6p!fX!94<|ʿ$"YY܌W;Xع灐0+)BC[tE78)/sowrCu\.`y$nhc l%z SJSr隬q X@#0H#YG@,[UlQl{}Xb. $x%O}sSI>8S c#13ڹVOIO@u-;vos,;{ Q M;QX ЎKbmQ`.v34ߴ=T8*#gEՊIx uK$2 ۀpKqF=k nhYZvv36:ּ RTV"6N0<Þk<|%3)$ ?+tyU,6.}[w_85(/C}Jexln>qjfN0{U9Is[ ~-"ʲc`<34,Hu-*_f ƄHP~r(CE1KrZ(.2d a#2(ʜu?)2NީǺB䕉3!W$e표S)&Y+䃑 $m`W&#m$fVk˂# sP89&4UW!|d8Sv5"*v8irܐFz (JV,A^Acj"Dʶ~T+=j=c!Z@` I$AԶd~LS{Cģq vB ; =8 KOD`G#(; {l[@e%B6*9'5i脻) yCp`e'w|u>֑VLm|1:{Pu`9 9G5ϨëjW!`Fs$:R[l{Fu?/_ <n<ִYwo 7PpI称皊OAʻ76<@x<²n Al#awɮe6.ЬJy#ߵhyA>g@ u׏\V[ܻ #+6>WE|Rg8AyKsSIP8V ) `>a^s殬S ̤9qkxg!;k6w,N~ncج<(c8R:0 r84gTj+-K!fW1S׎ƣ&"@8\g9`qU*mjK\pQ1Uld_YIï;ʰnp9 mzsK˥HA&<}v88ɪRҍ᠚6KF^5>4+)|'nUS}ܱxC6wĪ{*,epI-ʩ;:#SB8:uDut>[+)xPh3LnX&e<@!y֝i#-tՀB VTUN99SӁH`.w | ,Mz!68<֟(*dySl.: rO9?J{9$S29<>PFAg'w[0|`T98$9lsG#V+9'w ~qa6>Tr $ң6UQu%p9ޟ"=؀.qH;vG[S3&텂4i9hP7=~ɵTmRqTpz^colTᩚ¾f'͐c; ޜtDT7U ׌RXl@pk^K4&clI/=9NUJsžAf {l']453*m%BHOƽG@985IA[b{ڕ)8=3WFGA<+n5]I{4#c*8<7F )=@ls`{OQvC'su:dp02:î:WE㮗@?>P9$q1某CB6*S8rmd^z0f#@<Õ#=alAn1F8rPr:)X[nnoL=1#淊آy9'!"ɮISjJNjܖL[襏E Ww> rd8ފxj靗j#ЬtP Ynp rW$*~$ēH;$a \sy}SL,SҮfhKĢ%8 :#޽TG0ed ($v2 AMmw^Gmi%%3Eq vܕv'; tV9ENLge@.k}{5]n8'˓$9"RF@b=䊙T6xŌH\a'#".D\F?+qR߲+C-o!h<.<˜+m7Ҩivc<7U$ۏɭem}$LHG!I<rC^sƫt%\+H>a8:Lu-c綶H(] A\ ʮaee?2Fw3/y&XehCeOmzvpM/5r8y==)1(Ѣk{U8&!->zԑ||LvpOvrzE"^RAb?MU;܋Dpe,q#g̣pA0H8 <8[֢JS+m#42BmA .p=Jc/-U!UyD8=cC$9fp]xm7C]u`҉g!y끌j$ҳWJdkdyt ]@2ڹƩcrKo qLq5hgM܇ե(A $⼞M_NT]|#C&8A'QO2e]kPˏ4"+0vG~s { >9ma89vؓYm,R@T e3 G.^XB(Q#/+x8Ltd_[ä\842ѡY%|6Zq)BH91c{WOoLZd1BLsJ p 5nWžKM$ & >2ν8ɯ=ab+;q!eVtR1öED6tUzEOs2,dڸ݇`fH̦SWf?r5JQbmx)BYm<{ןjާ6< *\ݑK k;kb8fmiX_{ m<.'Һu3 .]ZEa9rnMnt:d9؝ b$brN<ZRb:q0xqNkg+]4((ԀFN2vdяlcԱĐ8S9shG[ Q]VU7=y9?0=\I\邹ldg $&*à?2|Ke=pőC F버yu9j;:lF?~Or7(SϷ~Goԫ#s[9'=;YD ?us9֩u .I K aXs8 rz!pwQ'GoPF1UR S6T{|ݪ6ARp^mqZH#vZQ=Ӓ;y sڱgEn}{qVޤOc=pNFOz4Dm $]7-Vg<^s\1; YA+ā'>X>`2Zs8anH 1~c~^*z{(kϘu{V/(~fWђI+?xuW6:KV3 8ۮOUTp(#?^EyGt.H;r[' X~\  ;FF}sPZܼsg`$]iHNīֶm `>zDSA'>x=:TJEצݯۊGz(_'$ < 9ˑi>~ێF`[s:M17S:iI+AXh?)r?(?7Aj`8N:}¾s0tϢq^ga 3ȫ{x>_^V%Ϫ½ sۓԓO >{VJzc;Oϗ9zt`ؒq)gsʎ:)&` <u{t厇N?~⛘9~ltLbILq,/<ǡqZ*!6>P5`g p1zUW6ç89?>ʫ8N~SKBq#皓J=z`0NzqMZ()>dM6;9~vW]\=j$p3uRu Esg :ڛum.nHi@$tii+Kvo?7u[<],gz'V6>AGK.p1۷5UjThGh߭.3FAG/$Ѕ@:p1ߚ!`$Gi[X0zS^%UMٟum?2rzgys[>C3R 23nV)؋M4l]['.@BTg}[WҽU} J8d`ۏ4e#MH@噔)`=kS8uf$z֥={ۊ>]Oj<(?v'9N<އ}kGOB5T9#qaO~}CrpFA=L2i-@F6>G\`dqS 03<8+z;3ё̣nX11Zsy~L8 c|4@Lȑ`2Pbv@:LTnILSdcpҖ9Uc(sUz-H7,ܿ qAQ8a\&ц7p]NuV6iP -2t.c'bR)Ht^㞕?wZtQVM 䲖^9KKKFIQPg"H `眑LO;yyIPNP+3U@unP4x7g L9r1g_GxwQ^ :wPon睊gbU`gns]x3#'S4[pzԏCޝל񚇰AG3J>㞔:zzJN?L"<{T;~c }1S-pz߁Ȩ{ 㜜T'=rE8>aO\cR}Fxz¸8;Fս^c,O@94x-̗ ukpw,ڻSI=k/M9Sm 9% MmM&zp9SÏsu rӣwZ=ъ߽ٙGUT({MWGwRG&$|Ā9n > Otң%,g#H $fFqP8sT8@enOoZ6-N_ Bq%zu6PP"nNGn:WsB%>D,,1p@}ؚGBLՄ}y!Ud_An1޺ 9kYL<@-Ќw`R>s%z3]ѧ4 Ċ`H 3J(ܐT3pC/n}L[N[S`Frx^j%v#Rĝ>Q`XwS0w\CA9;Iنbz3_7/`^jX n6;ςJǐm ?&G9+z H_4!o'g'N0p0w9jRww+2A9Z-{`UFGEeΠq0H'$x'I}6+9$:Tn.[ƖQT$nːX'0`WXTݺ1*}ROw%N R+g;VlӰLcq0 m=[9R`GIH~d*^rN9ǽg-FI!ls߯^)>ӈP>Q %Ìxf 3v]clHT8Rz}GNNp@'1Iԃ.8f8*TD%FS9g_պ 錂h)%+ cխ5Ⲹ7Z0~czKB4]FI #$1pzVy%ĶaI2 N{Q[#=Iy[ɋx@qS>u If_-;8c$辘&U[*+GHG [vo{C1AN;'mʸtJGE`Xr?{$ޘ*)$t#bz "=/[ x'HFydd^)E lPq#=iR욌r$|ghNE{?m+Hgvxk4A 㣘p{hLm>GZַZgk v*5Ȏ0ۻ<js7H ,JG.YqqVXOu?#Ȍ1'|GakTߗ;A 7aבzݒWR΂p'G9{=w<:z)^w\3쎅sǯ^㎇Z1}{d׊p\^1Ȣ߈1~z=WL09t^Y}ϱ=:r 8ܗn&zӯ|v1csM9u){p}P8=BJ$_ߑI#=B?Wr1~^ZO=@ߞrO)xG+=.?2sϭJ#vv`E=2= y)d3Fw$pO`9_}syC>K9{*߈'vfvkBNLu 8=GN3*__SD0p3߭!'߱~%O#tTuduժ 16 $zzVuϕ3^nXl n=c^ DWpIa%*;[_lRr /Af\m?Zyp.x! G@̻8JH3M.>UfH>ޗ vS]!ε-۰Ud&@~l1s\NH.mA!1a, *;KŠ|S9k'}Mn(]yVU#i ]TE6,*\ۙ18angWkrӄEd&w*1dISץâZ"3qs+(m5xҶ1/4Rr%B 9 N۳HBHpu8Ҕ:-hj5Ȏ'Tc"f(s}GZWRF|ÐIckq tR:eP-n-󑴀Onⲉ88x-3nʼnQ`z@9s$y/Ҽ=Izx uU0i;OQqYUZz R^;,DX0'|w6Jֻ~!}!,B,j1k݂I !$PF@Vpk8e99rv#EdE9F$Ƞ9UleE@5Pm:v~̲yCt)؄ܧA=HVBiͨ,C+ }p^ gL"pFGܺ qVd%Ƽ?+=' TA${--| uDu#v  ]Ǟ*q*Y}lP/|o^=ڃ[jQrJNq+͜tLX;vf Qϥ^ O,Fg#b]*8$ 5EiF|#®]3/7sV\9„<15#1ۻ>60AV71DA-(]Dq`Qt,`-gMc@Ae*(#}L?"m-?>99[Bf^&;I,9ۑykǩcKaeUsHF]p<23C߿|bmd- gwʹHA.s gayYnݗ*`6)* I$x_L=U?i͌'9=B89k?+pI猎:J\yRq36߽ ۥ ]E'=`s xpise2CqcRR"'7wzOUXWP,w#z+ mn:u9)=\#G!eb/#+|b"7N\-=NzʢN66x3 #Iz޽[%c?ygy 9%c /cmr1KdqWY3 !6ITl1uOׯ)Ň)w [ؤ u4m dڎ1<թ+7Xȼ RxulVEcsD\Jܩ5I|!u xt-Ǟtu NNEL03~'NS#~m#@  yIB) FXD2@`7p}qQs1e;Y27|cr8=:P$@,P T ݄<qfTBS <nSZfb<ǰ0b+. 2!clv8=q$BϺ@_bہ66>a*߸tl{H;=736i7N,HROPT7?/_ƸWIH7/8Uyzc=ݩFGԖgj$Ͳ5Qe!S'BOuzW'%ʪiv^Ljݺ,BZC22n= n\=;sPM:R lqЩoo#ج$9xy܎knwsJS[#Nwu~nu;Je1Vno菝CgY% OldV++nwuQr\ǯ@:UʂN XP"$m+9Oa'hێ V|wq A =1TcK.0G9L\\ 2MŸ-6'߭^X. 4E 9 A翽4qYS&ML2q߀@-V?2I ̒@92w:~jd.]ܼ[i!I䌁ɸ-Mę˸f1@wXA򉋅 Tpں K ~v;ne9.Z4j#`fKuº"đ_ql|Z4(%|6;jCE!tP9@;9*q§\szy!$dqӰ-)ʜ0WߥBirgZSarWIخQĀU{eGaנjz}.[YNuQ>`8 8sdJ0e2꣐8ڸaIȯ条i!`ާYT*,1~rs@}e!e*I`A#2@Sgn?} oƲ1=sG>ӏ=q.NH=rG|QО+YFA?;r@S90fbsB0eP7|뎴r䟻ܐGEϿQp@1:={i #,TA%#}2jO/qa%Qw(}=sވC'͖]rg8^楌+JT(rF3!pp ('(0u#vFO! ,r+n@E=vᖩOk&1K)]9ڽV# GsӶsj-oɝl7+`q#s]Zl𥳔ZגUߩy07$ jΟ]R9|c$'?\T:z|^eKy n:W+křZBywcW^ǫOEw-#rČ}NJ.Ef*kHd&3G2Keewg}1t<zqc.]Jcgvo=O8S?zNrsmn<8 v`:.@ te?\,{7@38?CUchy*~,nzp8 2.71<ֶ潼"y>C26GoCp@@09 `HFw 8 p6'^L6FqלShЭOq쀒rG^SZ0Il|pXӶ@\X󯶙Eb:=f(An+ t*Y, `W#; :r0:wO%NAˎ ,V($eA*Q269ak L,c9O-LdSIy]y֢G%T ,/[tEy7" NdKOkx RsV349\۬cH6G¤dt=v|?m=J:L+R/c&٣}o;.3(/bzƒje 9^Fyyfgf&TNeE,u{~H@JW,)yh [=Oh&$7dW_Al"mcڊ3b ~tmTҎ,yC) k2FL9WE6܅#3"yl=ܴ1-|GBGCyL8`S׭59t傒>T+\Tݕ(i7 ?fiB)3^sa7]L&ؐcRB9*Q[}x6h|q (+WڛLH-3wT暸h߲Ǒ2bU:Ҹcmcl99r6Iu JUvƭF##uli2dCnF:Uɣw[w:`pY9:W7SXy7W{&9)Uc qک5~$7nWe iPcrjqH^]΁Y, 1 "'y5i'ܭ.]˳Ɋ J랼W[5 (@ rW.[*fӳ%D7Z5Sۘe(ί<J5ƒ{n<>  frZ8o GEB^W+V0ǎךG='cY&begۋ#O #+EdM){qnhB۷=ě}9v vfkfBH'}q:t]Q_Bu\I46D@1{;;;`a[@ Sc9{߁b82QoteXȐeQG^vcYYkBX7~3z`cqwv7#XhFM˻zrC85sOeevV &y<RqO7Ԭo(Fc#l.>w#E7e>VeE` $dҲuRP)'`Oes1%q_zאܛ2A|dْDnAr>u}*G"+hncq|6FqWh%mEa#C$cp+fQ#'׭ FT$Zp)hYq:ה7\4A#ǀE?Cwt#ػF ~r%a<"dc<3HI[h#`}yi~a9dңbG7,NX1+Z;GSV8{se$<99saaNP c ^p{VwfZ` {Ny]H!' 8ϭCvZ\PF-09Gjr@8|$m9RGqPޞ?H@Atg߳Fb ^O햔^ Hfy'R@uG :_:_Wi+'ٵ_:h3);dD v~HkmYvѮ5sQ(۵B:޼[u9M )N~Byaxı1݌gלZa= 长<(S;Ҥ'p9G"H+|r6z\ s`j#n[Q]䜵 # *;G$Vt0|+u_ry#tZwTwKd~̻AR;ު#1,.W~n }w?.8l`3tRظ,89p:dazgGC0=C.yH.tv~%U8y<O8Md[%N@$9瑎AUOF`@kp# 烞BT0 ьuS_fK s{Jp@2ӡeq;:r?eG>(Lu0Kt8$qۭK<=D _LsT>zxP?aLw) g²fMq۞Up;DB6pOnص 1`aGr;9v2:gֺe:8{{U&rb6h,e'n3#qѽzEQ'>T6ĞtΊїn6r?{Kc  c>2:6l~60 2ʼn=k,B'8gjF*k| #='h8_/E{Ӂ_s( zp~^3b&v<CL䃌Î:p?Ƌ1O0y㹪p o!9>܂=x?Ґ~'Ǯ8ZOrzr1sXV鷓Ϯ^GQqU+jB}:g tMJBϿOҞyjM~N{dwn==8U5 Ƚ9Ey3ל}}hshb A#ڼ&,4BF/lɝaXsη?i^wnJ޷ EGڥ\]Irc9\PXF$ (`XYz{zFܫ_>6]A=L*`HR# wk v$rL#e!>`0 ztG7$Ey 6_nsۡLvϡ-'{Et-Y ,gs+vW+pbψ##Ӆt}@hp@C ܀FFskElv$&Kے08sx%H$s[Gs_M R9x,lzz99=yr?ޓXyvg$tt,v#BwI@OL9zc10EJpW=6t^9nXA1N;T |s74ߗnU'WFq V ݐ $S{"H#L 9*>*x;N ӎ~4)䍡'aBAb2N}@ӡvl`#yϩJZUW!WOPA=\Uh^W#o…ܨ Ied~ӸLtdt4UWdV7r85b1ﶼpϵ>d-X'zȑŲ) )#=Czg(f;n%0+?9 d\HϷ@{sB.Cx@] nN4D$ v0뷑ڮأ;KRO$Tb,gmaקj@zF0chzdիPFYm耱d8*灟T)|HOU%Gzc'=*_[tYr <l6V^|+ 8|TvE!d9,<8 B x$w78=Jq}?#Kݒ<Ɛ,zv|09n-8m#Fpef8~H s׿oRˉ^*AV\UUz`1f:g4HfaL}Fj+[$ I?J͑8태Шn`z{Ԫ;q]?L^jIbJԟ{Sv8{m8@_B&Qthqӯr(۞񌜓1{U9>e n9#-n{zWsn;d! =wc5O`O[709'xzv+Ca]4h+}C ~r=9]Fu-n>E<ٚsA{Jq O^eŜ>cYw7rz_8߯Zޗבhcw#[rn}3s91V $}:zt0-F}VYSW`/HϭWڿxrz@@}:{܈zs~{z"ϧAӯ4 c~19ӂЩcsje dP$zrGzW;pz#]uwF 9x9:< tc׶I+פ#*xczVC;sYH#<~O\w w'<z:aq I/tf783=@=; ^ g= <}O!{uZDL3qұ-UBRX=WQP~vEm'hdlc+=O#=94U"wǸCd)AEouC/GK>i1 Mw xb[*}?=ěCof*GN+δj-m%5 5R AZv0KLbb[FTFߜӊ̟{76w'h}F8<;#"U q5L_Nvg$qtt W'k0\Bzq88&28(_,6͎p8R3@_]0 '=:T*,:ޛ51U<;خV;2B8N=MqѐG#qE spyBۂ;y\t FGlu`O V#, 1N;= u~G֜t:Uh3$^|y j|3}1q$v=KlUQ3܏ >z`7nWiLhzDϘ$*>2OF285 S1o9I#U>6ϵOO%0_xRG#9}k&~SCeFPyB b9?t\.$}iۿUTrpXt?OB_By3 n#O<>\C3}v?\2K6(xߴmN8x194f$*xSc=m62?G3Xs*p2(;U a·<AGuJ}ȋ1bOQd߷&n F3[ׁڋXs܀x=9o,ݬ3BuI*HUa$ݵ3b{D+0 ;4nXx6%·@NI4&|Rro,O}sT!bfWë!(I,>P?*4ake9W7!8GJ![nߘ##NG4^8DTDp{s4٦;H.7de%_" X cؑ߰pvQw 3U-i!;pxnUMq 9I>Oɴ𤂤ǾI5O $ܬqpcXJMÃC&[XkS٥%'Xgz W!F.Yh #+T&'iZ@oP,,}8]ݻPH A'랟1WWGɣh#9j裟~6ssE}5cU_^>G}OR{sᑺc lzOzǨ橍:Jn>:qR[qAr1hOaA9=zt'np)a=In:HNi {9QW{]!Î3wtғzr9#'?j9VHvgL 8=r0:cN{?Ϟ8=j!9$q[~qҔgQs;-;#lq?c CSg J's@q}k+ |ר>O𪾄 q؟|g\1U'pHnF}#rqAD|s8'z~{~Y{ICH=?ǜ\{ԲpcgK==:qR1GN#9ߕ/0&ٞ@W=y{=Oy99P!zS<:ux9oLw΢?\1p Lu鏠#Rm$'iqve@Z)nr<e,$p8<V;=7|E üry`Zx,w@0e H7H/|duICn.x $`f|@!]c@~u@8j.c-Ьvw(PN\MP1F3s=Z塗}=J#ޫ23u8ˍU AW gN3ԗxmFXᗐN8vd2"}A7e'ǹo5Ǩ"y#`ƥ [NͥF3w{RsErljꗱ1~uȉ uVO0TpJp IPioD4dNb^ n01kHe,S%@I)Ivۜ .Ს_i#VHS4G|<2^kHBe~g/JF⧐N]{d ps82*ފO#Hc0*UX6̸#ZJ+Wў!)gchgi @NJG]銋P <^jǵC*Kr;l2 m93҄;#PXR.%]#c XڡjשϔMv׺7BCs#=Gq\ܲyq]JFO^KG5p{!pICg8=>ɴS]͹lbUddz#'C]f][D`I )!BYPzlqQY?QV('GT,Nz/$Ri>B6*kHC(y*ʡѱ~fBC)p*.%ݟc֨Ed>h%UpIA$ұ$Ÿ0 cnzLUrኍp0쪣'4e2T؏.9AL@:UI DwAWvƅd+60}8 1SwK6vlP=֞#ZrXU;PhՉ# ̀#>[=:[S^V]d(ln;槍Ìl|8s\+TXzWFF0W;wQ cT K>a_8uuJ$Rw@A;^jIŦѫ+Om@A;cV#ڔ *gX؂Fﻞ8R唻\V籘sr&$0|UtW16#aPG1j{jz;uV&#y2@~B%뻌fTN3_Nȋ9mTg92m9=)Hb`s $ztY~]T8ݪ)~c9c`Wic:b2{f,ach|q<uݏ֗@Ńw'p M(0=A>a/JA 9Hi=C̟pU99Lry߮GVlA 99?7L-=b>\,/ I#smª XNJnrO]cGbF1^kNrv~z+QUa-:Ъ$zn`38pv#+SWu>L_ºsijϭbJK]QBuu#)i2[{¸ ۵pC``7x|!Zl(0\)%72ez˟+j_UH,s?Ȯ[v'~~F\qN3UҮCh0zI%i2IGUjFlv%8$7^y(,7c ">duqp9119է!t*b@ 7ҫASvpc;woj.+kaqd GA·㯥9"QIT ? p )Sl,B@O9qQn9c֚䥪"!3giJc/SǸ#=[bh$p3ϷzMSC6F nC|SH38әݷ)sTr1)6y?7 uLhK @ʾF^SNp#V/#ճ(XU۰6;cspI $9P2|'ҳwf:Db18 VEל̀N62B!>qeo2)F)c 2*cZ9p4l㊤2.H{Idj>|Jwt玴 v4u%6 1=6"O,X0# ]st@m8ʓ\vWqYʰqtz K4^pݺE'9T&2>cezOs4e XnAf r=x=Mw,HcU*犿`.v[]_/I'K$ HeTom=zfd'+m8Mp31nF;]Nڌ`<׫M+mc{Fb P@“@⾔]R5*_E.|y%vM$[0 SHw}cs}k̒ʝס WoCzkc6GQ`q`~EsVw_֧){pI1ڼFXU* +0j8C+归11ܝ2T}ym?w͵;޸kɫH8Nf`< ^#9,7eOCHoZ}Cwc2qH[8 qo8yˋ03UC{xj`FXG #BO54D.2B~\qןZlqԑБRDR[8ߊQӠ<7'#AHl g'9?Hne@bA$Xl\fw'JmU6IԑHG{Q`+eA?CS=MCP)!>UpK5013q'7*ubErmavރF0q]u Gp #;T1;]4ec9-4b.1&s <zMq Kb{*53qK];SO#~AeQ̊𡶟c]Яj`zL|VW2Fd߆*(I9ݜcs9ւ[G7+4gMynP;{zW5> 1wӦ2kϯQ4z\?~5-w31]*zlGި=JNtVF=1 הa+97c|H}F*?xr2s%-Cݳm#.>Tm$pzm\*PW۱qk^K;cRHg#P1,s@耐AMȪ! FUORflnY@힣>@`TWh!03' \grcU#k ˒H˞'^an| $Wip'uǥK%;W J1pOV✄Fڬć@FTt)74ِb1/8lsLUo2ڿyEe*lJ u0y}p:T-d-z]a:I-x%#+I8sq4 Y"q[O2&uP8Lݨסa:\0vI I9j)a O*2r x89cQN C}2y0"C$A~=)`cwr[*W9M C F 6 #m*pG8ɧgo,\]Fs;1PcEF=V7b/=̓^"J{מۍqzީ)Y-Js@Teqۊjˡtva!]zw;i(x8%pdn#zSwiֶGsoi\ĉ`J|p8's[xOGf62n; AaW*^f~#|O3cEUl+8li T$qyɮE$ "2! MWgTO hW}BTmcҮ]}pqYz?0;7~[ &eqY$m%BQhc&9#'fkGGAxՎ zVkY׭ΚBf͙re'⹫fMc(xNqⳕVތ4V#7:G^brsV[Rւ{o2ˌdpM۱IYe2 7@%Jl.Y s@YHTU_qk_\GRb 6*N0qjv:;64vL`yS|dEeium\Z2yhk$ap =1PMG7++|=^gQd|#.*9*p8:bi۩0LwrC"4u7$\2aiI#")ev'oXʣksЉߒ?C${sߠ+;ch.1Q57v#m8?)<񸂊Ĝ}QsJ!:As) sO۩;rzE v0c@HBq@y0I8p 4HiǍsϦN? :u :3ؓg55ZKĒqz9p+j,G.q9bv7̄p:ANkJn Cc gg= oO5qnܞCPNCsҢh띹m% -C.YC{W`X%eo.3(PrJeN+c g޴ rxoL<ױm*N?ϩlnsݻdzS6aG8ۯzm9+3ucHVd `d}GLU9YlH */Rqz`V,9 r{3ҴE8 HXjn 9R<9洰иcoq9vU$` d3<iӃvp륁v-n0zCD(FN2w|=}}kBm` 91*$t9#v@sGG9:'p2OzL gaة$<Yy:>ei#Y.h?kZ!˲۳s9ɯ-hMSZՆ"Z8caS'dbd@ P@8$ui-Nk,Y[892s؏QGrN_:%N WI Q6Fya7=G\tiA`Tp_~wMF2,pAeNsp v$p0A##xM;CN2> '8V%mg %f%vaܒ;pyl;( l[kjf|$ֶ:$두:zUI#Wwn ;>^1g'ӧZ#qNI>91X Ͽ=1z7 }8l`2=49n1gAhp:NG1pKuۏ^LCuQ䟗 l 9\k^gxs@HdDጧ \wzd6gXePJ=⾯vψ/[K TJA O $@fi9#.Ĝ FFX&d(,샕R'#ׂswM|%aָ$zܮ\|rzrsS0\.1;Xm#3ӎȺ:g^)8zt% |Ï`t S,O WM'9KCrI,Blc5rI UQ"* !sP"_*)w$}`9' b 9'A8(0qYp0NF ƌd>aQd=X|܀@KZ*f,g?6r2GL]vu !Y  5w lIlׅo9*O ħS9uE?c"1㊵kEѯ>{P8+vr#vwSֱ.&[@t|r|AOnʾhiV`pAyٌ}ȳ/~Q3|qdAsP1!vA`לi*ʃ8FHn9z׭I<4.W<<ϥ+t=q3]A^0rIxe AHi$r1̀98GrQm@8z?0yG~92}9 N4z2Q[ |ެx|{Ɍa*HT3sۀ$}yVI8SO=Nx]{L@O_1Jn?S,z=> ,MEu{m z5EpK}zGr?:k?#˩I=wcՌ\@n@=θA(*F9Zޙ{mm }Z.ҷrfW􎭷^94lXORGtcrfT^TqlpylӮy $|á;zWKF}D^@ {0yӮ=Yk9W.q}Kut!n;s79 ?p3@`:Ԟǜާԡ<}`K=;rqK s }qښ8ܐqiKT4Gdgv cqR? Rp3ܒH':NONM)B{t>?T~GN9C^ja= ?{a?Y_\q#-{8=b$=zz-Shb'r? p:xRG"Hu3y\zgf*AGq~q{ʘ0eAQ(v?-x] dd`GS^#88R#>@zW`nfj奭sXWvּoSM/'i=$|5Uu/Bޥ?$y+O JFSiĖc88N |hګg^,J![ sx~hb*T"C oԴ]7vc*xFڼԷ0I+6I84m:2FŔ-a GaRL79R9,OۥhM[1ܷw~%4dX}::ԽQAvͻ8w`1Pq rFӀCnӌqȬٺ r@of ==PrI$9*37QQ 7"psA|+r8:R'w?K թn[h;rT08~\מRz~=9'8<Fqgi*L`N70'x= zf (JHnvI Da9 ?_l㌃WA zP64R?2G. .sHdwdj F$'$w=х0V FA# pP=-eNm[[vܓɟc1҆]>CN~M\MGoJF}Ŋ~ROǟ^?g{hQ61\&MlrEV^POҶ;[˱eS({xÔg$`*:1N2 ONw$Em̒GYDj@zOa5s5m(Ir̲Ic܌+¶f aղVSR\e2Zai-O*HW);Hr@+F]i =*qez}4b|ct< d*-$'۟z|Bѳ#C3HRrFx"3\pkϖ}@}sJi<+2L^;[:]?遟Nr;δBc =L旙#<>ʙv(~^~֤4}zAAj&._'LgG<~~č`^=FG?>GQc8}}OLtRR8#?ʕNL1R;Egӭ4#҇H@r?S6 c='8jpNRIj # ׀x9ބ)q8+M4=z |#+O50*%\+tO_[A7~l779#8Q`[?OVBU`ĕ<<d޽ |bǷ͐1 鷩^EZoMngRz H|[6,nE<6sē*S `O9/I-픖$c| #%J{ȥ #1CH'Q̾g*rOb9Z )9 |?wpI ،dNFsޔb7mWCOϖAQUҫABQg{K'ϼ8TNr{N,ƥ'm:jvXڼI4dJWV( 4!x|(?#:sʒԎ@:ּצ=~kzFNu#FGLH5CRlnF8ϸRĎW}BV "Bv޳xr2y=jmj90 nLbgtSf1>r +hg2ܖd$O'ޤ!=+`l {zWm1Rgȥê49U`Mړ$86*"gZ/Ȗ:b2m"f$~`c'Mgn[y(̀{e#Ziq2d,X^3=:YðmU_ =Qݩ|rTt=1T3ZtE,m&z2 xbY})=[:Vm;V-ȤP0PG|ޝ卋ʭa9E>C5̀7mF㨨gF9 2R-"«PxrH؀=XB@**Cm@<K#U^0Sy$5a% DdH՜ݏu;VSW_!'c]l2. 1X2=?*`֣%FÁ?.ॏ\c<+Tvף=\%z`sG+1Y~qҼIQq{=캊qs`*Ȭa]0 #9+Szaqi?2ctz׫vb~/dBȨIiPjBids呀?~\fPRlL>dppH:d֫WRK2m @ *pLo q#Zi6]v z:i7e~IVB0Tn1Jq K6ߔp\u T] ؄~BR[ %~46 v1r`qpb{۽83_S|!1p@9)2:/<|pǮHI vKN1籨㟘ufaI;{SAW O9;B;1=v6(@f@S?0,H$ǩ<UGvgSD?&H,yFgwGV_  %EQjq0uIC- (+toaPI(`[0C,$qҴ!j} bpj0`8Z#InI{ڽˋgVpX(2# `SU\O^ %"v;!nݺWMiW(N.p6p8G^;_/ӕv>焝hR78~k-<lkCvڌ>ʜz> is%>N2&r#M=n:zlޜ.y31P >[$1l 8ӧ&T;U`ž\d(6~Uu'$ w^HKV,L\bqִa,6b1X-pޅ7Ɏ[o*#>+nUd2N8p3ԜPoc'-HIg%0GBoNtK`Sºn\vaZax|$AR}GB;ps֛ZɅ+a$`lqcӊr*Me'nT;X\Qn9QO+r <قk$.tp9>k7ϵt9C۞?pHzs|&v{z#y]yd;N@c['֍sS20l==n|>99QdeQMMCrFs qҾk-Z ]\Ď gz^/>Yp Cdzz`U AlFqۨ+&FLC:Wn0N@ӵU&Nh#sҼҋz ?b .{=}*^XvF<~5SDW3秷#N;Tu~T2 09MG'ZSA.N?ϊ <$ 1(3Ͼ{wf̉% @(@8' u5<rrxUR[zr8޵-]$G#i?xz{ >cFM8멛p7Ws#c9Ы9UD&ۍs9QiEPRq9Gͅ8Fj7>mA(U?U^ap_]8$ A eCdmc5.mYT'\nۖ#ue#r0Nsj3Xfs;XH H5ۊYy\`?G55n0BSuӕ;{dqӂ TƩ3BñVevaž9yNX݄=qV c(aNsL9 v6ތw$sR) n#qsvSmqn{֜&\YXo 2ہK=I>Ӗ˳|;X䑞csUJR^*`5 ̣9`H`1ߌi| }p[qc#9O8u!}A&rzm=TIV>sxێ9fRv,7ZuW!}r3ֺ  H!q@{bvFŵHfd+ m+"s+ʵ`Ok}^r;UmT3-R3/b2Ysէ #0Fov< LFΘ x<`ߊIpb}HHc)YvSW']a8QaֽGK0M mIQ@#$dOKysUiɖmBTzWA~l*ǣaR;GeH$,p?xtcLW-yO9VLTA&Nd\;t1䑆[{w Φ C@i꧜Ǟ*Li#:o!*̦H$d Qі LۘFFK|W,>Swċq$賢" /+@ӊ+iⱒ6$/$ D3žmQ/M3# P3ed118=+˱w/#q3BQq}qs򤠨nubp2\yj r6nfO`Q{5Eiʆxc˿#}pҽ#Bȩ009(\qcVK23H|T3q^UxQKH HQ`-黎[v-j x- !e'*Z 8.VbH+~hds#vn]a17+<:eK.XdsmÑs}yao+ @ q;g<כ;o2eĒ*y1\q3ӕM 7}Fąv՛U5 [NP"Hۃ68āNGS[/gXgPg/Ӧsѥ Z+|H_%cڭ7}^Eb$G?h>E FEp:[k }ʡRHn\&Oo]^Il\$&gR5(^`I*F=zTx}?Zr5 wV+`!>*aǗXno8i8.O v#߷+ק| g#'3ZE26 }qާR#@mN:LVr",yrXB٩.џ7W8SYCX3.e ?0Ӧk'h!7Fޔ9m*7a݀"dǥu,78o/V Ǧx"$;\ݜα<+ I\>3~>d#1?+ҩUrnyTRQ$b[99H8x'g|0 +I I>XѥmZЄs;8gsQq=xN(jv^:{{{Sy)<`dcnzӮj*3/ #[hJ; >;rGT<9P5h *2}~`yq~9PO><3Ua6=Pmyg}3Ze~98$2W?*-WdGI`{O$W1O;}9:U=i*O@<y{nC\r o:s5*3r3ÞzT6ZR7qcy~)9ZkrH gݾn$n7D'l8U`u8U=Iz۸`Ef@UV8f3?vo [0FG8v{_fa N2'ko_B2n$i)F1$w\[Kn 5 cKtYAI_v52\cvI}A=sZ;Wfr 7pb`}u: sbaTy9 y_ ; &b7|o_l{oHRfd}21ֹΦ$zކR]ԪEȬRdxlq}63sV<7h)8"ԜdG(GqGw?O?k1Ip``jv' ۹oSK\3^|=XX0g; y=@ 6dt\sbC>=۞N{z|^R9?ʘanݷa8p08 ?7l޷S d!.s8g,2Yd:c= 9Vr>jb9<` /|vbHUzy# {c8P[/~zr )K N@<|ݸ+yC ] ?^RŢ^Gq)/=i+\#UnAHw=2\@Ọ*9ӥGe#vIn0p|HwVgEM?'vf]dd5fc[bpggo('霌JW*b`N"f B/ >v1yc9ǷZ؄qvj ەy!9!7`qա3r mB5$RJjyBał\`9s3*[H{~K BqJOvJwvl+u$. A#ofc+G-`ڥt*dpLo ᜮ$y|<*9!Oz@x%YrVLTc>1S/Fxo6Ƕ/EBPR¾}d$a0ONz6Z: f `}>2fH~ۻi9Ҽv2yúŴV8zVDq$KOđQPiaUC‚>cF}{W] ! { %װ_v|弍qNK7C=KI?Mأ=p.1sc7vN@#t%+y~;T9$ӑI_.gQ8 dU8$'z 1n2v@f8n9D00O8q N WBÞ8H;=mHhqg;t5&Pe@' &.h60}I Q~jf&s|Oˀưu+A$X;_hbǧN>ƒZ>xM6G\G___5>CˁYqZb#Iܕg <7ds|8 \a${{ _/V>$ia׎r2*<z?—8%1ק4޿Bq Clsیc֣:duM`@?9vǵ?}}U%0؎c9O?-! d~{=jJDG ב9jKAcӱ?I=p1~1GOQۃMm69'<{+=N: GC 1.%#< 鑜{VnnW%l<{dj#I'?JPBrc#sw8'y϶y&[HcFFr9<{vns֏N. AOMDHw>yyϦ&rs\cn?#EF9={[vwAu7׿^r~l|1Ny=xOlo\=*O|{? h4kZҕgO8<y$+ nvӽuais>os f5¶8FOv?'Vy`aǠNz׭F>K_['qq$ ;@2N} v9d rdcq\8!qjǯT}sL;"{~6rx+vA^]I-& )%I8>5k>wJY1HÐȸ$vIHFݎ>_[kRwFj2 !0H9g8^{c޵EGvK$4d @Cp]W WΡgX9|r%Cw'ښ'08dz~c ךԇ2&ib'szmv*9IMRy??sLٜ3ys=hSRmqѸrO;孹D 98n{v bA\d6\rqξc A8Fb {t;RA&pvϥuPGݹWwe6~R=t hgX'$gCujzQ˹8Ѓyzxy~l9M;dہE]e&1fl=s9+M˝ė .@빹'n?*O_IHJ` rs8!3}Ҫze]8=V/TmO8!x'60zwMCV$l7;w҉3e@@O\`,y ?9Ar1ӳm i!p=93> Aԑԋn:x^@b=xۓx#㍼NБK!8]װϵ&26NI`{ HOs:ATdE95f'aWCK*@2-£;i$/ ē-,?8)tZ'lr\FdVa^eu\`1M̢g,g+Z8x`_c{kc60.cUgAh29sOFO=ӻt>Lo8Ǯ.zp9Ϸs1N0:c>}iÀrx>>~#=sRzqؔD}Ow EC=zzӽ:cxڅ8;F2~0sKgG2:Sns@۔+sU']fRW 0_C#'͋.dP+W{=85%*;c;99`}O4!}2x$|%qI |Bef8Xnye|Z0fjU%s9oCQ~[H\ g:/K}^7X/>t?yK2#2~ZNrn@PvyqUxT'MwOۀĎJPmD2}GҫG,NT #`d7Ml=ts2\0Yp~^"8e\N gӋOTJ-SnJ&M ;9'sn銠u8"ۍeKnSN6IlekjF#e'x82H`Ϊ9̤1߃Y*]4ՏNodʌnn1M狭]p9'NMik'[0%"d+ EٞXx5N :vy.z78­^͖hsa4"޿N+:q,Ģ˓;Gu#Z~rZ<~~p7gwq$dWmvfI]nx= QG)cZ(Lv烜wF-:"> О=O֢u!Es-'̫i#ʉFTT/g5~I7\6rV2`dzwL~=P-}OytZVKDr+#hg{VPymiDbebY7mz)rh$ /'zGjv6nW||;#km9d'sw}F1щ-vkNZ֤p}N1Eyߊ.8d$eBp#yzENZ̎!AY7m 9]A'8y0b3ci9[˜69@0c?3TtdɹpN@}޺)Q;Fc^X3:W#ξ9MWrXA^V6rHdەec?n],<͠rF d sP[IOnf1TI=*֨Drf݉U|%'$;ʅ;:{{*MȪ1 bF =8U9`,1 }޸qiۨўu؊XB9€Tܾj n1u[:SyLD Bȧk#KcwM$jOӿ͞Zmc#.́ԁ[qr07# ;|߻CU=>,}}E';inGc8d܄2qK"74 qiWqye񷍑7LcI oAXA$zS )E,e%Dxde>V.Ow~~-/ e2Ot!+?[j,9n8ѥҰ0m#>םSNBQWcx;CoP:Xc~딼\#d1 ̻I'Nvhʻw9ɼ3n=ڨ.hv^Gd20wMaPJ$]c>:U&$Hny zt986nB7N܁Tr SR}rv$dO쁇7` ǦyAVrcGCzoQ$j:N@aAlc^+H;Bpo\Ҿ11n U(81Ns1#'8<\ۆ<;_!(䌕 z#vTG<8i5(2 *@]OQ\#p#VQ!_>í9-A;#7LY^2ʥĞFN=*Ǖ23nXu`ϥH'qTr˸ITan9gw9 UqsT ;LKg"@vTtHC.wn#if'Ao@1եj8;t3#8ٶ3Ẅoo7SlHe\yM%N1{Ag;P7<nǧtqb0[~Yg&v#񆠍 )I|A{%e }zgWHX9sitZ҂xO?MF󓴪6/qޠzҨ[ˎv%~pzV|rwUUs=sӓVfdF>l |f3)!~axP6 KI5̿t +6tqVa%lLF(*v rI+iX,@ԒJۚב[ȗCaMۇ6wqσ]dL{Xo,A\6-oAЂ؎jX zzsYkO0KH1,L=w`>h'(#PT#94#ʃiIcW%ss֤o/%;9mW~q֪V;B00 {u>_^JBF7r^J@ a܊9 $tY& pr,:2Kgw֌|s\n7&*Fx8<SS$ ǩlqޥ!6$ =IPq;XqҁWp#sǴʃ23]W;\6܀A1@6*̜*oP1oWJ?/@{aNx K$ HPN8Vas߹vV/yfds* >颮V3岬m |jD[$fs173~Dh-,ub#LQ!y KA8.Vcut5Xu~ <)h5N2XgHLqL=I'BgKP"/T0W}8ۊ,q`D iyǸ<:T/.7z3 >hmK `|`v3jQ\* &-I7/wʇ`C:u>d0:d ەϥv1 wXH'cc=sU#F\OlzsPr$>nWGLٺD#xnŒ[.J(egѰ4V2h+G+6Y|ңwCG!G !gFr㞄zQv)$nZt.d#~EoAl?[RqDVvm)C5]44tօݦ7bw}zOia Oā9ݵ'͒^ݣw# x@r!}rkSȻg *+a SNz܆ :D9+gu!u6Jcydt;MōlGS#(V>Y(3Z)+6ea36ȝ~V8(SOQæK@ǂwsJSH\5B1LJ9;U#ԀqZjD ,L,G9N>KaQiEd3\$$2޾IteW2g0ʫdԩ}ƢVⲊ n&hC(e gavpH+6I*S,O̠)2h10gPq?ΛzU}Ҳ$0N1fp6B` X߉N(TڡHGJ;{PdrTRwy0cA,[Snc(9 HB2AʷIUڳ5ԥfyg| E-C/I!r>Sc-&3\7^DBɖZMXJw3.$@۝QB^5 y= )6ٲI27yAqRƷ*|>`@}~FN~\F5&@ ʯl$qi{zr1gC` O!OoF 6?+BA8x'nNǸ*Eyzg&bEP?ybS>R8 7 y%B1XjYHBwnSd .ǎ*])C#,zd6ёVF۞8'?LɘFy; usYH#&\\"Ɲ21ӌYiurF=F gpe(MpkR\;d8+I4sΙ`ynWm,F2:R♊Yar?H?zo5 ܌7g=.w1v; R$wp| w W{Vw)&y >5"RA 0SYieK!U#;q?2x~s9 3<OCٚB:60;UŻ]Ɵsۑӧ>Ƽbrg*8<}p=?)cك1,N;ߙ)SVllA<߯׃'Xv{i #_E=G_^Gӿ3>x֛.}GoAL-ϡ2=RQ7\q΢RAm}~Xly6pA=z{W玵)-ěaZs&mLs޾ӄ{ISg y)TuUfGqA!i>PpB̭NHgH>Cdyv%.x#qӭOe*p8Y+cC $Kpzt%b,F0F>yյ= ᷃<8rrWsׁ|`+0nX|Jq}Me>hѓ0)9Ww44 GͰqJ`w}?Q>nZB\ ؆F^?YJ6~RA \W6-Z# Т[.ʀYs׌`~5i0j,vssa&2$pIdi@gL[)MIwEު%@Up'ڧEl/Kq #u8:;O[j:=ǻVb*[`s$\c85x},Xyb2pFO $gj7go$#Iq'K@ Tnj:p@RWsl8=ep;;*?N:sc>}t:0B_ޱeI][ YK3pLҼ;!oq$ev3ӭs:FkÉuKΦ%_0 az]dqt5gqT`wN3VqNH9c#'(#9ۯp q3ۥ &{}*9 g4=s@Ғ c17s`G?PB8#qxǧZ s>\) Aʓ}kO8#-!ӯҺd}Uef @ `ytҲ]yGv溑sFp'n g'?zxc>iA;bF_pđ?=kt1'G<`z+Id]˂7rs==8>=ZaX#8p2?_5v:g`}}+>;%d[];H׷ULd?+I3c9=Rsǩ^tI;2xpyZ{ u#hzϱBD?*ˀ'>正`t9$v52ZY+ʑ CqWKm(%IשZ- 6A88 K0P?k*>򃹹2X?Zu;たS8Q=9@ m.j*-(瑞3؟\z_:%qԜzק=HNi6NZ\#zR$n}^NzzOJN9=z?8'{̓ג0z+*S9=}iM }G_aHr:t#׭Z"ҹK;'_ϯ9Z*Lx  ]i3 7 1Ԇq\˷ښܪkSOa':i qzQlzvzs^}t\B,Fy^p@1W9SR=0{sp8OSQ+ |9BJAyϸ*Ix dt<;kL8`SǚʭEJ-VU@TW;jjONw?{8J*c1)JM啶nYP 6yW4nl2eϘvr8 J!I%''Ǹ3>\N{uk! r6O#'Ͽu.ñu\añbKc)=ތdb1铜Jp1ʃyj3( $sϨ((#Rs^5 ȞCUݸ R6su|YKs0,2hE 6sNpEtAd*D Dr nI5bXeb %;Vi KUJ*.𖾈 ~"c-KdmBr;׉fM4@91 Uϫ3_!\ؘǼ#1r[©#䕔?"8f x oݐX}y}l׻|l~&S8/ q$^}`N';y#Jڒ=Q~n bkCD&qh<Q*'i@%{{ŮdL ,Kr慭˯6zig!~^y>>;(\?8sZ[Á39Tg7bXsAQ׎sD1v8 ӵo֤q?0# >ы, xa!ֺ &RJ6B H3rErVuQ:(T6&w*sk_f_IF@l1\OsGs~1q֨^JG#'s:WE͈WOб5hPѰ+ ^F91?6@;~־,qGg+<ň6|qلv8XV4f +1IU=9Jc|^~V? ,Lֈ7 .rA-|r>ѢҰ^x}q2=UX/|G!\z w<0p@9ݜrx$~⥋+ӟR鿽K!:bWn<ҥ_.A,s߿oJwp%9UK* n{csДU l1۸>S'*98p8+3DBN2w G` s'x$cNϽH\PNCLs=j'P` NAbs9S[n/:psN'cqlW iDQ 6qߧZ p^[$>vUfKeCs0"ֵKIm"fVIi2Z'8zWӾ7-By|e$dG"`Ud^ni{?CÝzRBq^ϯשLl&p?JF0k$u9i3+m߷ZoL z 4秿g8Ǐʔc{Zԑz0^⛐u6sl_=20@p{A7Q<6H뎙ϧZAOڃNAϯzlIǿoBj3׎=sךہ<.i1ϧnh1#jA:OnOrq~֟YxOqzF:1Ͽ8{R{U_Q19}0N4x8N:Mb:Mbjc^I^8qyҏThzg>4W#9Ǧ?޴t=Nqs?J@;ޟQ1ۂzLo#=d #*O)K0 |#jRح(qӇ5bg>Ty cx֩"naTs_[(B1uv{,} ;q +gy&*9ֽx厈jIrwT@_jQZ(|7/Pp~Hrz/C"dܻ7xmsVs@vqg?oL璹@@z e=qu'ZaFT9'ȭ2kCBwG5ʹ䲐$0=ȦA΍ѣe}.s=UIC6C=۩X?2wlvH uaW!'OoJ*5D}$c/nrǖ><=8JZ̖$}}_6Qm`ܬ$%q Z;#瓀Jlm ӿ|/pVcs7qՕ3g8b\`r@$cFw@6 r9z8\/[V? <٣, $9j[hUmTpNH =5Gte?<6̪|)vl2n!aެJ2{$,(܄rL\! 뗑pI%\ Jc361wڣ$n$qqnwVAjn~EL2Fz$=}ӹ@;[g=)R}#8VFn0ps+ڼy',Nr1Ϩ<v;R,A=~^O'ZW;yOav:8|ʡof`scuDiYls6$8\Mиf.`ăF:\i hĥI¦ W37p[r̲ +d`G!߳hIq sPv4?I|g!k뷏c+JyN=ǭyGh95IoRK7C9>I #cL?\8Ϭ'y#ePx$|ӥTu d{W8O -T)ט̻T #GPߥrKsl0#i'9*7|v ާ@’sG~\bK dc(Uw6NUUc׵Z\&^)]d|=O dZkS; ILs-TC>Y[%@T *-T>\o$(epsIz AK#MBn N:m;N RgB}J=3I Όw;].>`U<ݣ2RGOz+R"GR|nܐ\]9e<)8sޓZ ke4XRvqrz ̡֪XFngp09= ._k$­#З@Hv0wIWp;L%y N+q#YgV?uA>}p[#2W OazY\ʻ* <\Sd"%A2LaUG*- \<ԞBv\ 'Fs v+A;~犢-fHwIVQ!IX+hg&6EC&K`cv$årHb 3׊sA}:m v$LXDWleY@bI_j(-s: -K`Ua@-85.s$De#`#AJdIFr0oJ)F+-ۛ?ifGWF܅ +_ @nWPè;ʭ'^8jo$(#q vZū5IZ/_Yx>q_2I>U#:GyV3*wbX8c''cj;T1[|c:M&{3[43n;iңg\` ڔ%Pwc%f#Yrh|#d>z.<( 0wFO^U .ToU N<՚7FS Rg k,ϻk761kXSʲI+16),3橐ER@99=)R 0f lؐ8 r1p瞵6Էۼj3#C!ر?!9Pu J 88#88*+z\LH)Fr[QS_!AcێՒS`$` :vUPǜm t9=Q+y :pFĂA?29x5eN @_cxZ Ǒ?t{XT`'VS<0sv#my$A=* S.2I@5N|k2*p:gICr탔oǽ`nhL##ɡ-Q<] l'!N#51*xsw 9ںtI9 0yf>ML ձ$c ֑Zz"̱,8=?\IR!7.v TW,-j67nY 9ӃW7P^5îp;^5u6ePUS8tJ:} ǣ Z?qz߅`2Arrr׼9$?|T=۞[^tGg`R2GP=-u3WLUf h;'%[ `H>9ZD=ϖ&XCc'z&o.26r `n?ZX${ "B݈`9 x3{UFy"sdmnGz$U],_7`p:w튪cշ!%s P+="HbnA HڧJ %8sb<z$>V82܀1n"l;DKpGrGlm` S?.9:\l9_}x'mYY>R6'h>ay뎼 Ij;t2BYGͨY76~Ph# r̒yR!6ڠ|dBjRh$ 3e8bkVor UHfѳ(48s`l8l/"8.ў ׭'XI\T[hmd\=G^ BgR&+2pwܕCa1sj|l=W`,ECC -vN};9>tdu2L6P1F>CM'8!zgJm\9<䓻A瞔O^I9hL,y@h,p8 }y; 2cy9''=G|qOy;~*C`}M440=0 Sw=AxrN9|s[hc߹j`8''A\==zRCS`99;gR `N8Jab=Ē0Nv g8JYFpy#{9=;@4,G͓cH=+fD>iS8a g T!mREFpO2Cn\Zk v.N+#ZI{)y6a2 Fx /4}mY705Vn[!$ nֺh?x7v8BrY¯m8sV:tyv瑜TA#ƹHԓ ʕO<(+ZD k a4]wq6N˿B˙­}棟W2Ga#Y;xOa8rjɖ!n1g{jƒrs X0jI"ffilWz;A~f9fs׽+j; f|I1`QU;=3QOQ.(AGAP=FlN90I2 4KWq(xaAˁM8DW;*~R8GKU_J Y<Rw'9]:d vI q(`0 ~n8㊝Hxx@vJ@`6%ާ?) 鞽*<:c^z`nk֤8#/\s֭(\8xcԮ*F(\=Jw#L*GET䁜G]r)~Y_8RxǦ;/an ps^AT0 1ó 8^kxn$!8qn&ppumlvwrpxS~}5(,LegYK O~˲3c#+Nfj:h-M#y3bJ8\;mIıaH}yj4WKʫm';}mZx'Hwy$`qzӦTMo l ЊOEnNn- >T y?9l@Uc$oRc;ێ4m63Ge$T]ݳsI,$1O5MZ=EFRb]ʡ8ʝ>ǵqZ.qMyU $ɓ+4VPs1'^r9? 9-qM͜v A?.02zgk6K) 1 Z6ǒcG`^&D0Sd+ UrH"CG m: ޽ bpFNqtg 0[0`uQ51w܁3=zUA $c=Gk60nbhX0Isn;8Bq[hܙ'{qdbcf(p 28$*`\j۳'9YβF5ө^ى(t'y"gq1^N3=scyp 3qs>-aM{}{ʱ'Qd{gI׎ãI=_ zvzw^vAj+ B12zuO<C{r 8ǸSs9SN1ߎ_SQ?\;sz[*x#' njҥB q=*$]4<i 7pXӓ+<3}cigl-6̆ڿJ{bQ'os=ח#ր.Aup삪v)=qɨ9`BKs?J^iFH'8 =(nXpY0F~`O;=)/ $'yjdJS0LMs,rF^T33c܁ on+0[$`1 sdczњ(&2o|з!ﱝ.2S#Fj6 @Jy%oLm2eIٖçz611TXSYq}G,s^0bϗ2H<[ftgs8(`@8<ӥg#z^d$A6&EY6FY0wR1z'I3)`OUI_ޔ??ȤjAϰiĶwTx=q)ІP[q#pV#HZRzg§fcFKq8Uayn^m9:<>kGȲPq uWm<{9Qc,s=3ljNݜ>T{nc1#zÚNr0=x<Wg$@I=Aӓa`zu< 4&g}@>ycI~c˞>`r1 b[3.KFI8[#k8gQں}эFH |gϭwSyʞx$V݌j+zurOqRq^݂"\ӓ1]x#3Ң;~l  {X3X uJd9|E Ǟ52|׭iLܨl}kum<#nZvJ2n8Np9#rN[p?N{p8>fx rWԐu* W9KH8#8lx<G1$u,H 8oOQ֥ܳa8^=y>[ǩ'JJ.[Jz5A?vz}klosg͹ss8y=Wo$0c=|W'cUiO@ߡGs֘|w򯅫gVp&}U&z{tujoj &HN݁9=b@^h=;v>,Hh1~8MNn9)V(9׶iwquzVoq.~=8?=G8=)1a=;g{נ$׊IϨNf?}R ~:X5qif8r9E=r H>T-!O<:y2F39jA:l=1OO0q9$ Ҏ t>LNxXrO$#OxcQONICЌSK'qݹ.Q' c2=3_Ck>ݴ̼'s3F{Dұ9'6x@'פ5ndimU̞;ҷRvv* V +nۅ=x`&~n'E:+KlbW.ۇc,;qڠ$#Iz<+# Np}0x54L%p\qU-z4vapP@9U`OE=vqRsX^:LsKCҜ48\ptƵt}cn${C"<ܙ@;P~_qx[qz.w$P\bfj~ks}=B3lixkry5zWlX%]C-ՊK,SFcPym'H=+Fsc([ <_WQi黹3ugV dGZdvi,D#M$$rpOj4"WӫȠvȡK#\$T:AʎcG4Ԅ9;NgnO׽@̧/ЂFvgӌV{}IG^s1}EJ7A#L;TD ox1RDž`9ݿr-խŷ+(YdhT)gs'8S dd1acБqҶ^5xCcCS. f+sʆ5m5 "9 3_[Asz gwo>Eۈ yPGF995^78=O.I96-daNpq$'W~|`/ զ6 MG$VWf1`X%?G(ޜ0)9PIea)$ Z{3yV8l3pA[=0܂3ڐ* Mʸvq3ӥJbC2-w'$tjfHJ1O9$ҥ^2r:an+գ왯o&=l}t6p2\fOSV3A'-A׭Z38y8G,ϯQ=0;~xtd{t}B'n`sNޓ_j7AS&Ssdgs\pF.;U|G(F81W< +|ݸ߸n쉶Bp@z+H3nOКQ9Am \qٍwL㿥e4ga,&̠×?1P98s HUHFs=sT&2 89CrNc"/s-r66ʈl{=L…$`3ka-2ėU -Qg'`PIbeƒ:}{F' Pn ''gBs"ʊ70;ϯ$?.6ssULPH =60s#=h{ lX $m}Ӆ H9n\R='ڞ \e0`O͂Tz*hefc<炼dg=s80T:v9=bI۷Xcp1>=nP0n 8#hy}'F,x2~t1Ŝ N@5-?.9*?Ռ):GC2zt;n9vw,WvyQ-## 〾uHQBc``sl~X ~9q߾qOϸyMv/p;af2A 12G<_Xjj/ 88<s6Ra~a{RQ؅*w$g#Pv }2G4t1L!ۓݙyW7N"[/KRcH<8o*x @Xಔ %1*%Ó0 &6cZ.$'DvFO6"dX0D'w9DL32ibP3+ۜtVkwE+ʎۍ sxQmV0h款*fz(|㞤dכjsn) ߜWgzq?,8ݏ-'Wpk.W<==9S#ͻfbcL#$l1'ԜbW" kw_mL~O,TF3-q;gj->eE2Nzeo(9㞢M#Ђ]$Np}\!(*&ӺL6 #x!;t%RXBJ>S#!=zRRx?trp#QzS412!*Aڮ)_t,Ȑ*0JebpOrZ2UʹVp9bRkQfCgP2*mpN3YD"Hto0ÎyǶh.NVFx(+Jߊfij|む~\3Iq6]LTOp9WIsy*C<)ڹm `r%R)mvOx>.Id N9!ۊ.TtFwX~|aY8B2qc׿ZfO1F'ky{>tO9 +N&!T)VT S! Gڻ裡g ]8d1`\~8S]v 7gtCw @i$M0Ca[Z9Rj:͍5;-ǭYoi jx㞕WD(c0ʌČcP(trSd܀HI..g'ۡ'ݏ,|1sulSz&BpAWlnpcݼp083zlA{m\=; }r@@1]j:ls_) ?23ǮM:W^y Ƽ8cM-FM&%C%Kyv$NۿWpzQ$ zqp>QJp#=s} E8-8Z+(6 -b鞕5nhM( 2錶q=&3Y~_W!L}rF1 O3c&}#-Kõ : zz}!ci1Fw8) *ϔOrtN08޼:P;B'v\+{5u>2 鹻t'H{"I2Gf_50w;ʆ9' zq^UWyKEiЧ$y#pa* Ӂ u۸r@Oiy<2Sy9{T rX)o̼q=Fcks.J\?89%rrxe=٬z a u81#=sXdsHHҲ5G;+)fWU9*jvm`Òx-:cm$ݑ nw`c'R7?>` SiUp#(0a|sZ0\K8.U'[#\4Į/HAv6XmݓU=)n[2{#_O  ݇7cmF>L?2$u[Fcw'R:R8w=9< ʲ T .OQxun ׂOOb`DWsys`Uȡypc.܂;RkRKY 6:i`?wwʸNN<)! s9NUH'ܐxoքfݰp :0MM g…Xrg֛^1aCsO֘W!ђ? H_"y cfX& )ڧ/f<„rZ@H啋8* 1bˁ\=B 8g Gs"^@FRNNX1R2ݸ=pN~29Q\yntf#GQS]HcÂ#9ʤ݀={8hsֲyPmP 0Nq\ϷrѯP_ӭp^QUKpx.T1Gn>@88'o"ƛ 1Rz_;|ߨ \rLG)fܪ\qT؛=SAeC0 @@H+ﴕY0+(ag8חmՏ"Jr\W3=u $2wtddUVKT}O7- [A|Bs՝KdEa UrI;Wmf'v6F;s#5Lj\vGrvs>ʐ@eH_jR5}TШ'dHyJ^H@ɶ5REUr܁vH,mY>={+dT*]H`) 0Qd+ө֢uUןR~m@f3<}è'1ӏL01?SLD6R;8F2zNF@9唓 Qϥ=s`*r>]wi~8DZNNųnp9?JK_6=g>SP`;[:  IA=zߓPJ>;R@Vb6 #swd<H#p {9ժz8^B9l>F7h͓ҥ, N /RI9 :jL/Yr]s(ʛ $w֋^qVI''Tpz*n5*W$7e<F@fVbrJ'${ti Uq >^sjɖ`{Q QȳÒwvr~P~sZݕC#gڪSBm0jn G 1?^5 AXsN}5*׎s)14+?ϩ&v?I J2Oqr?)?vqߖHAV;sɼlhk/^1Wzoc,Eh9ɫOW yi-é20h N=k6$qY+t}FHϯpeӧZy :"[;m+5d%e3IU)Yz$nJQ&zw5KYN=!#{0z^cSy :#Uv8'^1[zz >e_#Zq^gLNY~s[@p}~G=?Ƽnz0VI_C0pwl=җ ?wxUs<[ h 98@rK1])n*_i* d~j:S]4?=o{>|Бכ_0|S:?#0O92rs%ӽ]8*O]Ð0}+Ι@<͜nf<*. qA0sNՋ6TӃ)zIqH4@&yLX ݅ǡ=O\Hap:1kySv\M8ܽ8w91WU ހVߕ%p:>nGTD&ͼ sjѤɿΏu¤{FTa'9ݹ[ YH KNBeܨZ%g*HQ敗>[ Hƺt;d!`0FMɶKF ez8'8\%x>Eg۸U:MKN+KO>EOYF#<*{VSk饽ˎM7mt6䞼Zm>-{~Lm)$1&<^F;@dEUXe ha u\dNLDHTa~zÿ3ֻ]Ad1F;l2R)t f2!G.#csNGLapW! *%7g7|5X(#(t&ͽDȲxڀCsB y?ȩk W-*YAW^d̳xevP+7N7,*:8: Zs֟22F Kd.PrGֶU;?1_EFXD3w+)Ǹ=qFC0 84"n=HG=)9#pO$s?)1uuwhpzYwm'$czB[8=[I|ǒX}o_½G񁍼t@]Tx׼X.1@GLC|FO>zKR`VC8m7zn=0< nB?qj<2q^+$Xϯ?gs{},8a |FET|=I\88?Si+Ч*7O^1S֣TmK6ҼӽdkB0[P}8yG~.1rH'sҢځ::`u9?xq݃ӱ#&ߌ0#:V2g>^r (ysՎ&tS~;r>V A1ߥu6WX+=?OּY߇H.IG<0?w>E==?V}fW$ZCב8xǭLq9#q$n!;_.svNh؁g=b3֥_LSx80;׿' IAb=;ǽ8 C8 pzm#q: '=LHzGZDG㯥 ;׊l]6zi8ՍvW##= tWzt=Nq'O`On=9 6]եf:dR |u8c}k2 xrqQYxǵԸ"_ 89FU^)r<#NA.F:s]>$9=jW tpCBq}<:p6ZCsF+V176 Fr8G&&,Z'2qbm ~ԱWöc׹]UFrG crxsJܟd__׽N#g7)32IIl%8NGa݌_ls[$GBNY>{>H8݌09^i;DV2zنp2:mLsV~Iu8;X@"U2X8c힜։b0r*OoZWQHN@%$swt#qֽ;3Im+m&HK41В8<c~h/*,}<1+2 |SOۻkj@Orco2+yr-@'EYARXc~ͯ$$%r=2zsLa$(/tάXٰAE%8n=frq㞤zo$@_o- IQh;vURr6)gqmЗO$ lf+9ªNvmoc?Zp~v,H`:~L)JΎ:8_Br,#ZXKs'$J㨺P:R3eH$goDIp20NH9?*4rK<NEVUINWC`iҖE:$ܫz;YA=jZ5jAgayRGZkl(+<#(^7^}y\+68 M{M~-O;V2r~8b0y9H7+ F@t5󸟎_>B|뒠X/B1dKQb,T2^Yc=Mc;M`\ebP0[ϑ}ֳŲ yx<@bFO$03,PT`Ƕf&ySc#Xe< Ը#'0=:l|6Anv}NzT}hJ ;)$/C0@=)-DL@868'9PAPQ&̕)3'CY﮺zv3R\esHAk`wR\X^C=J!384ho&FU6*A9NY!vr!:tx:ܲgTw 7wkgo8c8]Al*u֞tH.ЧvIpI$1_B#VO#0liY49s/Ck%p\^Ǖnsr VEγLS{( ']H)G%1yHS܀@!U>:pw~5M>⟑n&2$rzR~Z>>w_OJѽ݉z3}ߺqqW@{qӦz끭XϠץGÿ(Syϸ9Mߏ㏩'J^cΞ1gǯ^@zGRtuKc|z!>w8#lu֙u(q)?ЂxP%=#֟v4;zϡ)I?^f}H 3{v9'<7 ===8}Nzxw2GLc #߼p?H[XS\j2?q߷g}J[ 8Il1~1COnNs:Ӹz|֨?|vsG8<?OzJAi~X~g=yzzt퓞_jj2<䎠u軭7^6ԵU\p%0y^2JMSViwxvbv`᳸\ӥ}} )S??;EWऱPϿ*0c>afѐAx ?wAhr\l8 ?we*z>?ϕ O$0+J1e&Kt9mHH8i%D2O@FcdP@} {2F39hD>Zd/%ՀƞA_G@~a<:d5f  `761QѱHO'w94$7#9898'Iv.Nr,XXxa^p[,1Vjb%Ac=?Z!s B)#ձ}m`n@n0N=*[Dp,J1|',rmRRJ1c9#ӽxwgg;TR7}8ݕ` , + c$ `'_VI6>Š>_`l=6U(rb?3X=u9TZGnKRl88OR"lzL3O´YsTpcV Q:Y#KvfT W.[rG$Eu_Ztֺe'g'2v uD$mʌִR^g MYVvcUP0)^p=Oj󩜖*]2\8׹{b_M{~ȡ׌m=Ŏ]v1*n<+rhUsS'֯džۅܳc-fq,}gIGTƠ3PfP)c9'Z}GԶB *IʰqS4ؐș-@xP<*$a5K!ĈV @>p(0+F_@OOKB*wN:ը8.z.sҎ4ɂC-c' F1,͙;vK , :z<7c!Ƃ2KJ#H>R3TX۵$/}:ƱFU%BNx省Zтٌ!;RR~٥ .0|1xNn9^bQ?ӿ뾩n~ _Jv4AvbsΧFP ךC/Y.}NrHcGnIpY2&dmA;0ÐHx8<0W,j0de9sۂ8 3>Z͖(fUL ς=O4͖&s% ,[nO;I{{UI;[qRNp3Rc_H#MCmFрzjʆ9=T :ce^n9 0 ܎^>Zbۘ'9 Q=f6Pe')8 ]П*] UrpAA5-lgK:#h,2@P1\ ˸`?z r87d'ȀGIl;H*3Wa;|Xc֭F)j.N6cފB"lV^GnA=N|W5hݛS5-p8PǧNOƵtiBkmlBc$9=ItPp܂zvGlѴz{t>zT~Fl2@@$bie?l~HmSzalmXUzz bUKOciRu $w61=:iG 6\894}ewH2ePFʖ'=9;DT. "8\1*BȂM1G 63}=*DN6IB =xնв;';s*i s~v:/u[ĩT0 )Ws|{~p7 R׵-|D6 NF}+}]F *n37@ҚmR(v'~x➠ JlrT z{W[#G)(wt%;ɤtzR\v 7y<M=k׼/i`1&I^0y+ʩˤO/>H5VMq@s' }k׭б>WQծV&;Alq_%xYȘ<]gr1f?S!2 *.N@SOb0O&_ycQR+ϣؿ\ XL#U1$a˞*6"b.BFQx<m?xdNO>BvjC:a;H,Ēlq^7oCR2XAm^աt%xUqNU<}t[B!`r^a^#= ϧ^5x͞ukԨ f<4@ klqfA@jS~$88TuV3+g]BTvFAy59I$vl3 6}|Efݎ0A$qg'Rj_~u!7)AR 9sH( !a<کY>UR$ 'gҲh,.#81 @sFNydM['\dg9,;tskB68h,UH?.T %3OcW@7mSkJ ƈ`q1ӱ4W^r0FNH v@u 2s/PA1Ӿ1)QF1}s֧y+dv'Ydovvb:FɎt#d3ےp~I؄998ڼp@?ʡV!07#^5 rĻdgo}3בY3ZvH!7) }xQfftivz`Ǟ;SPʒ3{ivV&o4`s}(Cd^c`1|)< n#o:{MƩrHI{q,8$'{si> @99}:wqϱd{I9-* ~'C;sqH000c><9''9ǯRĆo6#$gNynz]ܟ6ۊ}q G s9>Է\}{S*|p9RrpxxϰiuPz;Nxaċ 0 ЎN] pq~rjNzhL͸^1qtB <1uD 2FzP *񼓟^x($qpl0~V9:<|g9TgiqH H$;Ip n9T  A<2q=@ y2yYzW9ǹ#xcva#APw cr ufwʯ~N_qRR%,aw1n)$(w`?9dhI`94q܌ʍ K;YHD?+> u632%KcW$c.};FsA$2eum}H+4sJdY>d$Ryn{cOZsHnwcpy>j6lCm|(9b>B=8/zH,H qO۪̔#yb%g}:ǾL[#d9R]@s8V F ?z.iwFA `Gkc%g~&b)ha^:s*7vϮrZh!pp) =1횩pVŽdq"es rO~>SY@#{FpOpyϥug2A*cO1qNNq޴_3kV^%В79bdb葒pr3U7pw@]tx߶4&*C2#E\f`=W#;t+[l|̪Cŷnb9:SKo@2g뜞zP]m0a|v<֭p( 8;H*GL:US9y^UnXr\N?T)%9zS[iVGڲDwݽٓx ݪ;PZQJ0bPb \)|T"MvIl瑎:)ES݉$ec^ۆͪNTs52T} |d8R;TnQq6~b,LV~::G 9x8yxUlqz=flT[~J'`5E^3pT ?s/ij3ZmNr2wd i5'&F#8!F~PH֫j[dE$pP2>0QӏlGzpbO|ps=b^ `H N5AA 9€%V/"z~QǓׁQGS,I 囧-="{6c9)c<}/ەHhX Mw-QЄ_G*$aw+v$ړ0B>\ȻNBOsߞSHC/8x`w c9(ڹ' uǿ^i:W2).[9!B_ʫIuv1$` \p<{¦ēySv"Bs9ySrz&rry?">\]3?2# }FzVL/!@$d^*=:j NS8}?:޸~gzl(uXq~|xnO@@+ 2!{:r;h9#<`Kp:ORςGu;qByHG$}i[[Jsi#~t~"GGIs$!~8 OsO]Q<Ͻ&sSK`32>9as}t/GR%cŮ72 :sr8a^i{4S唇 1Pߏ=My޷> D2Icp=L;EAWZǥV =sЎv:89Lx1XbbUo38 9c*8l'w8>霱#9EҤv9{gyH$wzj7-.<:)`uc TX{3<)eÁ\7R9h OLqRdA|pnqR\`gS4!(d $:+"kfF%xb.pAqJ*nl0 Wv>jܧAc۞3[=+šf=R@짻nQbXUkK_ZKA=H&A$B2~ԢAmbn [|;; 2M?)݅*J^=^sB+Y^uV?n4}>YiԼx9;A(j"Kw9W߸(#5h{^Mi30t$ԲtWa2c*naG^$YmD%2mTsūvc9+<5@^IopUyj#4=wgj#%Ϋ籯-#!~eTd!T3yS1`m=}֬\9$"ISz眦r^NkQ ̷vc~H:ξԠV>+t+-f)БY>grw#'ڮt%y8؂^[u^]?{9cy1P=8qLw^ݨavy,NFÖ=r9;)t0x88~8':l*+(v `}~(P9y'=xDǏwF,\zXW O\={sl1U Y*] ';@HX l­gi;dϧZ߻sҬ8˨RKtz0ݴr9,:s].YTzrIn#OL=p3?ֳu a$}2ysuhj[ H>~k^`)rsrF@9xJӗKݜ[0i8m|nᘨ'vX3`| |nX\>mK_~)G<>ڊN>`< sW=UM5쓷A9[cxm|^eu3]#9?]+!;0H@Qu?y/V}F ]xGMX[~g>ڼCӰI 0?p;~=*Lns^z8COL}i4yǎ#:s'';g([ u#/Ll֗+2#;NnzPy1sT6&ۯҼc8\{g߯ҕTc4vݑ7۟Sy?'zH3jhJ c< C<>RKR  vxHמ988}isk}L;GS:u{QaR~~z>PT?P;fKzYA㚯GXSU$&BORN}=Aey#>,؟*Ecʦ ~TOs]d7B|1ڮ+W=&,1\\t^?0 |t]9;.O?x|ggWC1l7/N^:=F~gQNa'wdwH~kd}S{ 8 "%cncʖ2DD<#qNp CZU]]5G$ğ)(t`A>ѻ!=bYer2lې~=xUWwPSvl-^Ydq#a R? P3{U2HcnO^y+eqe }ysTwC°>>FI k; czWC4;p@[&L*'+'8u z|i*JD 5v' He ʝYq 95K^ːbG<`pzu<fI$y6| 2foJeΈ+;9SpP[䟗Qpߙ:V;#$D۞\jzׁCSؒ~X}у~Ϧ*P *@A#8R#9 7Qud`Xr-gЄ̻>y;>fe~N1Y,*<@rhoUUP;C)ljIjc ?frdO9=j)E򟙺7wdzq:RI?RCaPCd v8Aɨ_n B=IxRor76vATA ֪BVRhヴa{cVMǤ;0ف`5)\Ҡ8#RFJG'n 9$F?QҦ'mǮq4|c|l1awlq֤I  }ݡN8+st&SZOw82]ꑒY6tll{v'r^V 7<>U#'Nxf#t+̢[$0?=מjPww py8>ev#,z=3dTHGB}I-*US<}SIjYnUs]psPfi 5+8 {XX+;&p=+Դ;Pƻ_.cE\8Evz-?w7WVX} w+4i[ EYXC,D Xv1鸮(ޏZ_plo -26g>=?5ٴ}7$\F@A@8>ƹHb#08 FwTu <ƑNkQ' xu06IF{"+MB-uzH$In$Fq$u쭸(#?3c@}ktu;"Y1]a1A $pk.22_ st緩y`T4\\ĸm*Wb9<)T pw@'*rrzlUDp"WێBF3;-we^2y O+G3'cR>ܝr9*(H($䞼Z#2`Y[,<`w1^;w5\0ۙI;"L`JIk#4yi `WcF739늰|mHR3cW_B’X2 2lm= t̲e Lԛ#)mR7q滘4>hVX>|&֐}AzCT"Rh7Tf-#q Ȯf@XG%yF{T3RMDëp2^Nt4q8F2v\zޅj9fڻX9 CMX݉V] :EUۨ#8>V p+RǩɩB?vOwd1ҤfSA{u',Nmqп[QAO$aQHo !ACpN0AlSpAHWwT${=sP rmf`PYToc mӜbp${vY!DR8# xZ]蠴UFR*Fpw :d} `!ӃVnZڂBy+$rA qh`vfX ;qgwaBY@Ð20bSnEl06rҳ-.4; K|+scz燐G{<TWqPs?٩C@=z{I%;r-^6Bl81 p֭Nw:)=-ܙ# :2lT9 \+8ayK\HxY',K)d =0@[wzZd{RD@NOʣw@9{urKT;8d׫N7+#b>1$" k'$c9+q=+ëGǏwpt@6 0Srjܘ!~op2>cҶFooz7#/9ʓ*&yLj3,7;+SS"pM Dڍ3xwU)dtݝÃIsT?u o~WpA}pNN *73QYwrBҐ9'$LB.psgJbHSy0B9`zg1/v S0<ץ'BN-#T$ G$įta::P O]({nܹ+Ao\bX\m=z*ol $'=})*pX3H,,d9('koNsZ8E *eU :m)\E>f|dH%I àڄd$#H=fU%ykCu'?q7Q`ov3Ӟ+w%eo60m n\ w}Å =;ׁZMFPTINsqYҝQ8mų%zyGMRʫq<e|>apHo+:،vnvɁ{-NK$܌cQY4k}?@9Rs"H¿"$nfˎ7(&5br3 AX7+⣫Ш#.9?|󵑸Pne9ڣ ϭLEƤ$w<`⛜kxE$aQ;1`sw)g:ݷ(yxjB0y g=n3Ha^Z61UJ`)UId X3H}t.6#Bm+kס\Jw@݄Llǩ5y8>V13)<{>4%t[>5X:&ŒQJX(v,ʊQӐ{LVI16X7 aFsʟQwJd9;$;|bqFݘm==_ه`7rWb`eO9JѶVwCLC.ݬ;>Rvؓi 8b۞rŶ΅+N['\m0|'`#20澷*ɇwy_k=O,~F @=+LDU1F{SߙI}VHIs8t}k/bcWxˊj0ۙ*~Ͽ+<"PQ O 9ϧz^UrH8Z֮g-#"TPg UB`ʦ}_*?ҷ1[j aIR~b('z ;&0 M'nx(:jnl(Wo^ *[-C#`vIpz*t*U}3Tp73.K;3 'y:'5rc [h4*[yaI'<94[)2;P6>c8i3HUIVNHeS~H299K؜R[ H0wt9:wJ9 ʟH¶FF q{z)={h% e$<3}^!yp2xxO9g Xq1֟8?uAIS#w_9?)C_jb0[ N~>z;\/`[BN91*YC y8RnuD9+ϥVs!rFN +"7(<pú'<{S eX *`{UL?f68c-1ە8P==jTtpz f`;}23^7AS#w1^WQ%etÅ<(#U+&p̹U:W`7?,j_9`y?WY #qZ1pxm2bov3׽^my9=` ? |]7yv#'U>3VڣfiT)t\*Ķ3]0󁎆/Q틦W 9,W\s}*w*Wl徸WV=5+d *3/;=:UdX8?Us\jmjݧp$6݌uHCR }[z2H= d7\(<r9L >G9=CRÅ saDeX!xy}\VΪs9K)V`1l8e{ұخF60m~97Tv#O9{* au }>I#B N) G\[Ej۶h!#n  _c3oy7x px#_qSZQڙcUPzN\#vDctZ$\2eb[QL+2N#卹g`3;S>Xa;?} 7 p1a[`6ቌy9^T#уkr. -. NK vWKby"'9>'vݛTs@ U㷧$)l+V8@$ Elc vT,U;sqVq.8 D+enX]DqW-PHPS3b`<pt֓zԚ%Ca%QӊQg9TNU9֘28Ÿ]N?zқ?\Fpz i1pB1AF;ss I`j-$uq֓2r0gL @q;< fQ"$|{QqK6hv9!Tc jrb,B9 ߾k + 3Ɯew#IöUeÕڈJ.X.A;O֩Rb7y8+F9"TQB+ʲ`2*PZ*j̅SR= 0Ǽ,wkޝy #\#mrw$Gi`qfaaܤ|c n]n99Ž$c _1NAw9(vKS{/g8Rp$g8ۭxΥiu-ͺd>b~ХrrÍ}Lhז24w\0`c ]k"V\6Hs@&m $( sGSޜ̠#B+ckdcM?Lqnp̀\@q7cp0'6Ʌʨ#z{42 A=TZ%pv'b_G=rhf.3m;z63<|]f8rèj92{Z#w$mæ:vOJ9},dmb}:SMvd?18Rz QH2ode*r<=BEn Yp~,.OF~1ڴ.cT,dV+n}~,P5T~fRkyǖ"h&h6 n=ʫY=Cf7cOBHj>(;IoK؞T=>=qF#ӸH?ge?Wz^;黱A:W۾x𱘩7%eXkP;7GL1jSmkqy -Zb;z`)r4h۱xsk/+9fffv9iYe+H'S$co:F%ej@g-utҟ-TkKV_Ko{h! VԨ#Tlm9~XNZD^)I)nNLHrN9NUSD>kiZ]ɬn(AqjrDF#k:sb: uQ8Qa\W㎸?n;vT%<.Ȁˏ2zt#1UFd 'brzAFoC_uquH=GNivUe#h=I1= +ߌC=@fXe@1.*4(a\2l uC;mr?!Iչ  <#䜃Tu$t\CX3F)H>_H=ss* U< ׋v;KUw%} d`ا]?xY9fziǿ>8=Nr:y<{V,,#cJáKAscc֜.?O_֧@IpOΘn`p?uGFpHpIr󤡻 ձg8V>r2Nq:{%>v}3}<OPǰHpB}wlz]2p[>ӇN5Q,O.K* '==ư!m6ⷭJ(›l.$ddR v=pGͧsVeF3 085^]9SuMuJvOy~nLqVCX/oN9SڼųЧ+6p9TQrEdsĞp=x nXLװl>6R6qK]7ЂKGtʢ[y۟Z.{"H=O$jF319]obO^  A8$r~_A\* drAQcq k/K!X¾0ہw[9Htb pFW ~u,lx3KxpGa߭f3pn{jABF9ݒq P3ہʩ3'7nuןZ(ʌKs';q:,wrioG!} ^篽Qv۟;<"~luǙŒ00w`g߭fIrkGV2r"ۤo3*esxj¡x8E9ǥiއCJ(9990j!b: s=9Yp]ry'-=x[h&+)J(!@s׭yyΘ}秒/P77B9#V83,;t#'b٥fx'nQ^FO Ro~BӌمĠ6KnfX#V(tqs^USڕg\am 'F8AbbB̄)Fc"l`G'ec+VrrA1n#bXD9^҆\Eq+Z{4;G"$v;9q Dݯs4`ʱ^=Hs HW Xw'}Yl']rw(Yr7H?#IQ^Vܽv'8 6{G(BH([ C1Q}Ch aۯI@T8n9qsŷ@덬qs1NstЁ}ԃ ZT DgI ?.V6 |'ͧC[NPc'vy^#zL33=$|s{73~lW ۣ+*W\<_9U(;gx饹l`*Wl=1LP:? LV:/;Io_z0F:5:6p1'9_R1ޒ Tp==*@l鸠|pr}h& $~`@[*UIp7n|ݏI.oL.7:d'>Kvݡ'vBۜ O`3gVCHo,9zr]K>7A!wChv9?0^= LAXA%*rK0 J$mROU$lS1MRHe*#f"6O*aՕ$Rq~1vq[0+ۘ#RFFj, ;:'$6yn#%c ~qH] JZ1sʬWv- _,BQp3'+O=|e|Ve.YeJ4'*T)#dQ;^M3I{Ы9yCHch=WZZ;MMGOQOFxPV sXfL-F~#Ͱt$g Vr7ܦ $]9]ݱ׭Vu7v2Ḇm䓕\K~q0ߐsMl4 ?@ |-@^21 4ԋ˷;o䚬si1 2;ǁT7G~H:: XR@^'ڽu|Z^OAiI1k. 8kwoi%+~ (Ӛ z6Ri/Z51L;_,+7/rZ85;uyR8.$li`cg>튺:zrG>N> B 5v69OXrT z8oJ߂l݇ cוQƈob:}q~ӲInOcZ4Btr@sקOO?C`:n38>޴篷934z~TbiO}?:Sic~^9<:8c!=?Ҕ'>%cϧo9=01랧~9=9>{.z{P/\zSsz?֘rO u4d`dz7oB9zqӂi=~^ix9cڛ9uPl0oBp9S' s=MuN3}h=y㓞Q-t9OQA9ls[ ^ʞ <ASҏKeSlo NF:מ_jbM0d*Ab',+{[Y y]FFIq}j0y㍥N ~T^#dx;A2Ć}7wzUz(Qd99ڨ AzѺKbV^qr n ץcλTm22H3-1\VoSuRd|+q3W`\G)8I6݀|zgs`ɞ1kSjl&1ܕ*,z Nzd~UZ֨(s|z9편鎔2o yP G cr3KeuRGP}:rA;ޠ7 HpS,G 6ON@2Q1< pASvzpnv?>H@yՖ;y3C`@P忋r?Z]m*0Rw+OJbH<@mƪ bF8a|d*s Dy=jWO2I2~\񞙫K <270 z8v.,  ===]-,lp vϦ{/p0޸aUGϺE^إN{cU.$L2x#;}i$+p;<Ȉ'# תMF'i9|%qTQ;H־ZI4S;ݶrv r,1W; F9F0<<潜:y]GQ³S>ՍoFiKW;x\ \t={tՑUw6&+/,#$6FN;m?@!rA?fnGBW~X܈žH %&Eȍ' ҙ%E& k0VK{t*(e5.[$?ٕh )YyYO/ g |ca9g Ĉ˄mǗ<{b'۱~Lz\Pw¨ ynpsM켊"E!3Ol}Nqڝ̥NHܥH#_@?&?x*098^L|!@ !`~P0cM%n`TCdxTHGU8eZ穹{?tٜ=~l,JHWnՌ~/\*?P>8S@i}sQ|~FWWYcS i]<Ƴ5]"52'O {W<\z#(: Q k/mKC}r$ 戰i2"G\cX .=1Pl<%K(/̓d&9ß8n+*eSU)60 vE=&mt{Y88=g={sHAf'$)pwܨiFT„rp62 Xb}gE,.ȾZ2R@F$vuPr&o20cکpݷ;qlHm=['NjdKDj(]$gG8݄%=sҶlriryn=k#^VVrmƒ=q_Q^g^)Dr0 pg#5|AI9J"tR21c=?n )A#xA0rnA 50A|8'49={![R*~;OH#%w*|ݏ6C.ě|ȣ`JuOOLUKpS,6 w O>NR^V\ŸceT2"wg mmeaA JUN>:3Gҵ`e ݈8b Oc`ђ˪2As zqֽgid(qUٽrݝ[jX*Sqw#`\8V=F3Sz]N\}=zFY~\##⾹Μ.v.UUsm+"<2D|V:YfGB\gYEFP@Áԃ\/siɧ>3#Id #A&2k?Uݰs29+S/tw4oim˿@O-gק5[xHM'5 {= pJ'!A }4ݥK`psӽt- 2E(pf\qϧ^I@쀀r0;dqM%YjyHFs'r9P ۻ#^G\0ʙ.pX9zztrYK$&5;rmpT1OVlL*@chj}@;_ SsϭnE@z%xNIaUR8+,\Cl_LRSDUR7|vePT|b)ó'SˊÂ7/8 Ӟ 19ܐ=q֮Lֈ$ 1'W1W;F@\rǥrc28Cd'֗A rAX0N[ a3S Ӟ1;O=p82^ăcs"5xiy (;qCߊDT!x\Kx|0@ {RK0I#hj|)nR9%q\s{}+3r@eIM#o x,6@N=FR%?1 c߁ǵb]Ajό2 OT C̵˱! 瓖^~<gF-foCcc8 wirr8=y r[%[>ÒqNUuWyuǨҷE=xHQW ?ㅘvno?B u& c;'O~5 ? Jlz$҉_ CZ|||@ RH9*M+pDvwl~Xb~n2Y8^'xpW_1>+ *HUy"ǚ,f;҃*'AI眓^3#M9=_ǡ?tevEHi^ԏsmj,r8;[=Gy}ops9*_We}*MF \YSg8*%8ˌ=Jᚲ=;d |00矩瞝*"A%rI;FֹY11 Ys jFPAԌ22s-#YȤ!/;q$0H=F*Ȱ`0' 8FYapH#'!pNx<;S!=6%@<$r{g9Qʦ+Sj`qe[NqүІ= L Tt/D@ˆ9*.j͎*$8K/3Ðq{<1h_#aaF [Z1 ^yy`9^=Fx>{/A͎AYC0RH-9։W3bB8<.`t涕wm/nD`# Z2f 6sߞWUKiJ㟺Ws18ѓj8cG Hldǒ7AUx'<|i$Q8AQfNjG/.Gr˞Ugny_)RP\~R;䚌&$n ݌{$N 'NnL}2P`'U-;ƓA7gHP0<8?L}<ǚyPeb03p9Y~&hi%©$i-Q9ۖ'<dYs\Xʙ&6`&3І)K.w9l>`sr9Fg rr?x?A:b.3v8JWe6`סb ȹ$@ ČQm9Ml2?07BQp=_HE]rĶ$qX *4b;JHr , cAFF 5]DJA18<ƚsPRs=Q=~cK$scDprv1^sc*GqG@}9Tv'iwaw>SB!N7c;ʠA'#z1Ns0d}Nq:8R:vv2ѳ`PK"8I=>۞ӻqӏ=28  8PIsZP%˰P89cjX:C1 +8ݜaބ}MR aH۰ Sߨ 1A='"2N>]tʧ(KgŸ~1vFAa?^IIpU=3C 2 lGO8x  9{pMȹvGS  x@#ҩ|12 cGsxJfaxѡr)d c0SgT{y.W yX1sG+l vOR}O-m2<2O yjzVm}iY -QKQEI8^۝Ç>` vd$ps0T!O',;,c[ CTw'sTdRMá.>B=[8ǵjf婿ޣl wv sOr ^'8 |$uinv!RبO۸ +.pWqb=zOC@Wr$9zcv?,#CˁO1kX˘ S<\Ô,^6Ǹ Z  y 9-EKO r8IV<ܣ'{Nx``.9rkӯ ) ~Tdrzuќ)T*Qס\Yu񓹀\ Qg7LK\iWzClbS9c|{xCNUsnu;U3r:VR&h~HqH(w9s6=E[.,8\gI8tS4?nK0VVS}Aw9\>B85Q5 r{c8֑2T8||c"Z*R9ϱ:Us'۸`۰=*\B{_3,7w%Bqd܎sJo s֡nZHNs؏#<}Q׎-Ńr8fpsۜ3S LRN=9VV%[p (ɴlR $pAߧo©$Fn ʃ¨=Irxa/QJҺ*?a8 ph99c u[q/֝3S=)X.Hn$0;q{=v3Pi$xo1#zUW"k|snMir'$eA$А\ag[^g=}#>[` @:F㿵4pCqO.W#'˷>Aq`@, ۀxyqF8ݜNyEӛi:#j&zٳrmA3݁H0[8o|&}<~q'g'8cS3ӡ$}<ZA'=ǧlPo*2AbF_ nXXvw#鎟Zr-ҩ%<~1BY- ] {\]>m3Z0d\g_aöՑի+=O5˻ Em..c ZXxE=;J`ڦ,7ylo 5Dzh|⺳f;+X7n"߂N#žUێ18ዞ3q޵)2Uexw9{tN2T6:d֦nƵ #ح1v+;Hxm:}+H20+x6HNkފu~e^p'qZy88=N1HШL͂ rA<^rgr3^Sx'Stq12Wџc`]xŻ@~P__<2DI?xn=g1ϥypxw*u;c<5Wz}~]!9'q9Xx$7Gcc$G4= b8=^fԜdqʒB#)eюW?Aa q62Is)ݎU/69nZNX:8 9lT6n G̤j̳ cp<Hxc\C. nĺ.dHXxx|̄  1WZxOYO;ԦYq.a; XׂSZU\#ݙZۖ";HƠ?(% <D$;R$@͂XۯNՆƛszlJ8H22z/ QtӢ J<ͬ`rM)X z;~Sy7uۘA ۤKD=h,w rCm^*jG^d8rKǮx_劉gw\GJlr^O_O~E5/N*2S `Sgʀ9< ӟƭ22qϙ?=?.[s9|O'uSzwܐy<6}qNv#==kFU;+?vy냌׹EF鷐NսFi_AN\WfBq u}K22'Vͩ'І<|`SH',:=}kOivׁҋѝKjHZR;0?L |+#8ݗ]e*q[ِ/y;ۧj^z#w^dG gn78?zy>ޢD/}mNyNqs)WCp0y~6)ϧ\֜2+FJ abБҢjw&IFA`6 g'?2sZI6yCuwv^gQ \  q|Gˁ k3K:zאo3}>NXhp>>zt9b,'I@{qH>t;[Y|v8mOZ\l+y$@9;G.I9qRIm';8CC~r0@}8gy=sׯCҗ $Zez: }+ sDWW z&'kt29V#9K ?2=rhJ>X,:$W7u89zbg-NZf  }*)F}O+m8Ju.1Ѐ}UV~Ppp29cu} H.GBX9=HޥU4#6' j/s |`SGiܤFp gsas(# qO QI7Gdssװ?'ېHTc;_Sf?['Ot;+ S2䜏0rH [}߭}&|&t%V '?JL>l@r1[L'©OR8'sПq'Q=~lĜr*PB9ǿ}+XH#0 vɹrrϧ^ Y`\%q͋ rgzMdK.K1xʰF1AI,Q c쾜SW;{bw;(P tzcִ15,!fw|;*\TzcEv2~^G)jK/{orݸn2{`:⵶,ĸw㑒Yv8fVG_I0Ucד&zS&QmoR/%݀#ۑ˒+mK#yJ72(Xs!ˇN۞m5,M)([hpR$<|pIl=zqQ3N]w.]Qq#ֽPnkMI9vrxI]*]3z-{{w2eRx vgO?tZ-{^_==;Vlcvܑ`8 tsϥczݴm9 z1Ҿ')ݎI_m?/Εlsew0$uS9ץ{/Jl7VUPeNE¼*AA#e$v 1קJSwqd xG]؊|ᑑX7(PHzp=)"E ~}1a ֐t6!`=r\ Ʉ@]nad۷~Ob:/ewtN+a$Tnz5neF#SϭU(93W _~cY vU @޻sIX.W<dmp}u|cךHd:]Rdc8?)a:uRnTܠm%TF;h HIo TFxq 9`QU+)OqD1N ʣe˰`T/9Rծ6: w gӮ:uj|VHA s`@ dרB.14q!'>i8m1 csUIfx![U#P [ qڒ-;9 W`;e݃qǰ $~^u)izΗ1RT7ڥ#[m3b0]#tē6$+9=cXi'E1 _&3s#ӼB - F̨A*N1ҽGY:xy%qGQW!zzW-fmjGqxeRa݃;AѳZLIu,m+6 a;Uւ7[u(](l %~b9#kqje30r>ӹ> c4 ;=mz׎s? = D/ӱry \V-=yoGcdXN8=a:ASEgb;ʄCwz9;ާϵnGZԜ务!ۏ2{cۿۦ9_l q?Ƈz:S g >#n1`(`7=^;N'buhx=};qޘ}xGR)G{js7’9 o76ā@`0v F#=tWj77n+[ȣ9sڳfB< _/9dr<桏 n;tOON-lm.>@l0@({2L$rp${UJ`i@*Ix|^4y$O^ܵ$ mp0X҈$s`7ob;[T1q[T n0}pNx'$9#9u)49`2,ޤ^:(h@s8 ׁ㚉%lK oݔ F8;O͝I0h>n=p:qI2epy=}i;+FG$aRגjV #*Ҟ(QWѕsC oE*$NT(Ny6"7$b F^ QpLR,{]hÙ3GQ;(KH;Z$g}i\w? NWj$Z v#=0t8Ci&Q`7RSE>˃v>̌8-*wwGWd2JO*F ..}$j6n9@O**>o3WB(7`E[j={1<&h3K$p18FH Oe;F9NqS-n&RF8Ny[+oqa9ڦ*s`oSqF,䪁'``1ٴp Tê&i*26 "ʿ20HZL@w-pFJ橿j |cOOߊ7npyb~b0F{D4] *d! mGM85j1*1R{O׮zli>im-ld(>جH)kcu[ݻzᓩO<^$X :v=RHztַ%8w+ӫmqsZ !A#wf{v7 0Q=39kўsr&^ nT+&A=fʜ $ܜ؃bzjb Eޓs0df' \UNU=^tկGcUCC :dqӌ"@؅E$IbS'N5o*u m wwk2;@AR`|CF7 <ɦv*0bNqjeԥ69*9I# ҥtc a[z>zTVcڀgǨ\F c8Q8?yCd/r޿7cD|'!U`2'=:[iՑ2 [$*A'iW;x#$Qy#eBY71p_qE/BC$wef6rK\GLS |Fw =3pI U+\dq_~_3ZzlipUޅϽyzS݂vUhhь9g @峍}R^`c6ԀD3qyYA:烒ܹW!ႝ̧cjHmhYܸv%`1u2/Ɍ!BdO܄Ha tA<0{Z׭yApAAqcp8>1p29s潸+\/vbKܷ?ÁʶFp T(`sG˞AZ-h@ ߱ #c' ۆtfUP7 s3,(+~[$g q5 CV3OOt+(l^x8sP6͛Bltc,WZ\kUPCJn’vg8KG;[@򩎌4<'#.wW_LN*W rNc]L a&gRNܷ2pUsmqI^ICФA]Iٜ`5IrIc#c 8w23'vX083X1݂̑A)Z9"^?^ia;yNڷ)'=YwoVq] (gK5xoPvI"f9jD}<v`ȧPh!Xapr.tCZtT2lⵂfrScܤA 5 !g) G#85}:k@TpBߡz+lڽUԜI;NޥTGgO-1@-^88j2N\0m=i*Q)mݸ`1g$58_@`aH (SRsH wz&Cq0ׯjqma;F[3ßΟ@ \$7ˁ^A@FyǭJW)IYFiq'5q{H+ O95C_qw!{ˍ!\8\N17|zi:i!sdNC%B鑌?:[8l608U}sD2iwlc8M 3M.$t1Vv6Jɵ<8?txSU,E1wy1Szߔp0 P+w5 R«'rbpXR^'U]sזCnN9Œ=ZTqϦܖEm\p0qkëME$gtՑFm Sffb@<@s !$m~lwƈa9.GsqǭT0;FFA㌀zDFq:c^ۋgGz@2[$3$\qZ?[ r =2O?P9iWgs|7dJ=ܨF w(ܱzHMƷ3wWa+vy>F(1 p1GlT(a-Ifjɸ0ɍRw qCW*eNvx*>|g3x|,u®1RB|ݶJsn <qo^rRrx}Fx>l߂c߸9#@NpX3}9?AOW[9*FxIz>T.lqמG^A4pwszr9>h}!pz)l/@;rH'@6<̄s8}qLW)X–pAM!'<'<=1iH@8S'3Ha raцx ~Y)I$0 e-]DyĎ:mA?Ǎqw c(!Pw1b =A 3-A;Hێv@oP9@$23bG`@` qWi * OnJ!B)8 yz.; I,$a|1U"<s3cI`!?.?2Nzr;ryPbs>c(̈'7ljsre͂Is˦O_ZD6Ve FӻbpGŸ@ȟr񂎭FN1](ɶq?2ߒILrïQӹ[!@pɵWJye54%Xċ~ksшnug[VI1P~πłD88#+U8@ў3 (3nC1(YABnxg$cjх7Q݄h@POu`˩OgOF` ^>':[hr9r{8z{aGt 沷CF4|*#%y8 Fr#Gh3`Y-%I$cZ`.:sF t?@+=0';O$`*@l)&͌WU1U䵡ZkSu31$d|]Kjўs^#VazU֟ZVlP Nܢ9\=8=XϯPI?t@OLv⹎8!y)?BOn#`p$~n@'`DnT͌OAz '0#hn+/1\oڷ' =hKOnHj,U qGYYq/a~eFzzR\Q1ߛ,O9if?$B:cSKQٌz:(z]G$/FIA{АA\â=)?@}ӎzS6L g8}N:c4`woWw7<͐)q݀ӎ¸+T62x gb6N82T2:4qn?~b¼2T`3r9j[=1gM<.2wq0OgqBB0n3rx@2jE!G'g 眅hc[YB8%Icv&lgfiqO=;q:un 8VCA:u&X@lc ܜx>ϭ^22H@8_֪0+-_g1A'3`>3 ˰5v0P8@s淰 rxy'}1]]Y6vazr275瞬r6#6T&='?'8}W=0J1wi5ꎲ̖ #b+O\*tgs;Ϳ 9izչkMy1М]hg=_GLʓB'N;<z֗?g8ws$I=J^@6?=!Aϱ;cך: 2w6'mR??0\rA.@6G'xW:Ծ6moa W^NU㶸Yo5qO#r*/m_ @XJ/a6Y#ahHyq% HFh֡i2In[ٷ œt?N)|M߳@9I`gK9 yǭh/#+Nexrg$b>xH 6O1收+9蔀Cp31žN|ӎ:DႏA`9Fm|7 |1@11\w/!䌓֛l7\*dAz]@ N ;GR1ҫ4Bp;7sĎۭ'f4j!8$<x sV"z*TM͖b1/~z˩B߂<3y5=JԬe#R*<O~P݉縒g&T7 IQ#Ƴ(I' rkF(ԯ+ЕF3z:^T(2J %;r=+%KcU_X:1֭2^,NۑfW@ }݅[Ǹ=+􋯙9`H9cZztio%ss5Tg8d8*.*|QaG$8^ˆ#HXOw4eM6'ʼX~a3tݥsOA9'xg=8k,lyGUp|01pYY>{TprG񯜚sDu$n6#U$m)ېs@"h bOp˂G>bOSnBI9<_C~+5Ak|w32GZ)UWgK qJ=+yr{n38מI=3^v.%SEʤU*3k,vpy+tn 03_ <ܼϺǖ^Dz}h}sq\ihn$ #g#zS|vCr;psi=>)0> 3TM1yzx@FF~4[~BBz? ?3td8!5חzrM4IGi;`}+R@98kX>VeRɒsc2׎֩NƵ #{NlȼF3ӓ\sOPG1uWyؽYmuþF=e$Cw'<חT]z ̠ OU>_79=- <;'oxqY9$E<xZO&p rNNs3:1=^E|Ñqg<9.,&N6>Uلݿym|Xd;) 'o)0JAǭom \ y_8'v8+ʎ@G+-f'sNLe>f9'v"3lA# _=!2(WJ Ud;[(}:`9LzbtW޼ӊ&OR*~lq8gs֘~`z>`9f-~yVe) 8ܸ.ZO9⾋ 6z 7r덬;.;pZpYI?|Ttϙ rᠿonXDZ"O*;$QJ ^m mHmnSۥoG~>b4wYDIU+xz5^K;ǙpVKPP8Z1VyI

:uϭL2Bu%zY͍"Y'u1lcE#ʐҲn1]Ab , rFNqT ռq<<~uU_^ZKxHH!i3I01$RS=P:i.-nMp"rW8Mx_V|gSh׆W-s ^媖.u%ioKIbW*+>GX26@ ^9d:}OY ,RՀbdӧrJpT)%&JwP[il8ڪq`GL=Z)6ݾ^yϭx/跿#=g>Rp}Qlv9ہO\qf'8{w֘OsׯzS1zg}޸r=2?ǵ? :j/20zކ1Ӻ=~2@)N=(=qlTNuS'Js8ɤs遌Q}prI9}Ii,?.F9O>)d03G@?Z@tE4wy^G}qK 3ZےHc$(wמ8$Q^IpFOA:Ҝ&rC s6c=ϥrw䑆u'JIwµNT_ߺPkr +px}M_j.ڣqAHL+I⭳m۵g׹J)WdqlwR~|(T \ҵc\珝p 8?t lJA۸m[#o1y?z`vۇQw݅ o ls':wWl% > bͱĈTa\!=O֕d\l1O5Wû}Ƌ@x$( LlCaY~׊lWrY̙2X X|i,^5m[1H9`K0apzrpp8Zl˙_VUմSb3'O?u+]Nքcp=Rg9=ȪMa'9j3sr.U#9NoVl)|,yen{]8^](Y\f;#,*ňlvRFONj&D@\sV!aeI?VQԞ89W@\@R;|& i=6sIm }r)"B=08vfq0HZ7 uYS (U~NSlf'ly+ʮH#r88瘻IS'{Wz7mX$c5=Oň.AJ:r0}w.nuɦu2쬼k6$Jr3 ]-)(`P y'w<,\Jr1k˳*+ԛk[륙Әx~BVM62[Hud8;f.ޤ`kFvEd,Nͣ?)ooNkjZqC &?ɜQ2K7'=? e:0%G=j+V}finƐʹ|<tQHD L)0TduYh3.ᝮG8^S2ۅ|Ʌ`̠d6."qs[;U|H#`ܒr1[jOqG2 ;=sLzgw< qŎ$P2C$7 p{}:S ?41NXөRN\n9ة<̣* dIRO xq+ 42H?tuՇ ]f8` { WZ<"۞n*r'95 #~Obr@3TMPXnjc,y_Ʀ/_"6[^;O:g+#GCH+ {t(ʬVC`wyb+v~mcyhI#5Nj֜ד߃M_z 󴏻wH #;~u4Oëӏy}1u >^֬y C rI\mmI(8=FpG{>i'`zmF pOCSǦrX٪",y9*9=j&I]]p9l9'bP<q>eoi4Nk]R7էAolUq8$sZ՚yٹ/eWONZE[˅-z}kӂ߇J꛼u]]ѧ x8S9|]HLh$䀭}k)wIAvɞKm Ƀݰ}GZ;ȃvSE9@xޝϴiEyC/mCh늴IxN[?5ijX>2͂w6rp[=O#<`qʂ?p0sZ$Ю{3j Ӓ`q+Jx,O$NUc1[v3cj.3:M؉J(s!pc8)[q-Wb q洤u.@Rrp{ p4dAؠ}fSg_CZ+r7*I3k].r|q$4eAC)żA]0מ$cvy2||T8^ҷ]C&pK0~#go06N/z drIZ03B̬p_3[ꠋ CCp~)ǽk#`s8x᫬l䎻Gɻ*1\Ҭp6Umr+7B=qY1n6wq띈);0zYLbYL  Tw=G>~nKxc9Ap?L֌0gl78h}=a1NqrN=:i|p } OsZӗFmKs%\;3Vۆpwd'85ͤ$c(lPwmmd7L3ǽ0'YS;PcS9QV62F0Ĩ99Ud_-Xp gzQ `3Kn8pq}벛Zk$VR0c$zt5@$P,00>0;WwG-H{`r9$ҽI~0GC$Wc'Vy.]FTtsTs>i3/[ȑ\6:qZ psn><:a'o\۟J^[RdTgqjꥬNjSp[os$T@X2` Iny1k`rd =p=z5տhN3dU@/ 99$`{c5)pGF…:Qw'+0>9Ҳ{zs냆 'wLoewH`+3D g("l`< lHn+7P6w`0G8j̰CUxbsy"wDrFr.=\'B:p}sXټzz ;zq*s 21`dfeW1x,z@5P9I#XKsHdv>Lm$S& ( zviZx@[.T^vf~BIm+ght#XkrAۑj`9UG=s՜]UX8`V ̾Vs# ۉ˖Nk9&$ 1ʩ<6NrcH ,͵s9; : 3@ʒAא{o;$0cУqa(Q2w*8'C*w8)ܦ`IYxv'wSr)FnrCc8$vEsz#~vFyHʜ?Mي<«b'&^MH"F^#+zߠFG9rcžniڪ3nh㺏?YG%\N~ZiiwY^wd݀A{W^MEاj8 ˈzumONI7faH (PFlqw3,2T1Xs}Z)Bڑ^|݇`$Řd. &X玀sW'iKJ*x(鞜]v6(gsR 4.A-.p{N1W2DlJOcKovǜȌG8*e}{. kp#Lll OjK4`(wuS3f%UI,#X!xh \X9*G1ҹ%*w"IH+lNz3x~*R-]KF|C#A&2b1#ih>mZ2{!Aa5،]2O'Was"gdÎ}1@m#rv$+n G&̓ލ#L/xy@8Tq]>TH<)4;;?Ìd`v9;~gzdw$FBq1u=iGl@NAeG>H=ѹ+  =f!XX29rF9O,s:0Ҙ&sH$>دH;(Q󏛟ځcxՋz`qS; \IU*1i]b9,U 8C{d `wO;„fb[$QqG`@O *pj峀6f|ъAa~lױH`Ayp=9+\0?t#t89A軎ᏼ䞔Pu+Rg#L.[qpr\cی );E<Tj_Nz#S=>lvX68UC|px9?:4:|?upNF2l1ww(vjEm0 }q^`#u98cڵrdUlA?A ]ʹ&o !P81x:Ta?:̥6%\sjr@nI{9P3NAz޼qT3XNqg'<` S6}cp,s@kte'(Wv8uM'g2:zg#cw08刱8d. GZflDdDTy38k״0%iJ4{Ǹ'#=+jq͙-ϴݜ5Ӻ@'OQqyk&4a9C[5rUܠ!rF2~Ǩ8mTrqg("MF9c9ǧZԵ.nVX' FѲш8a*y>EZz?֔߃ c0eU\r^W.yۿr \ l$YI*ۅ]('隙@@u`A==H(;!uh\2`wd=*䁑/'sڸS~Gq?\=iǃrÌ3#rN$GG'#=K;Ds|J]'zQ;cqI6`߻sKg\kv<{S)->tgq?1<Y&Bs dyH)aNfRM3w|sz}f* ~\zk'*X`v'ֲlccp#p,ıR=sM%;$WzhЏ~?ub? qs獤gF f ߒTqž[ n폔sv<˜P|0 ~=3GQ_8Qa_q2237`&V;Wźc^G8=id|T.rO8E8(@H4wT[pswmϾ;Zo| Nq느w?0p0zJv5}s}jb\)+pO c:r> ?8yl>_B;({~=Na1Jf @F m \s)œ7ĜqIeB a79G=3@OL p}9 P(9*B7* Sۍ}+Ri asTߠ^ko9 ӃLuپ_qe`Aw*DfJX l]0 ,ɦ< @;O^TppAys;q\Xq#8m[J#rX1Q,CgPތi]oŰUrB>.TH3v5cʞ9e+.9=q< > dsIIC N] c$z߿ҴԜ{}?ԋIT;F;LԾ1w猌~^T$3'Nsá t)/}gqu<}Or bҘ@sc>!"3~^AARP'8u<Է%bxN+2{>QFq?wӚƫK^Qn/B0NO<7~&ői$Y:n']j$ yk(8 Fy׭}֛:Z?yC 8Ԍ62Y=Grb2^{0GBs=(ow|089כ--NS(1e9SxEH W_4dѧ{Y^XT.?LK[{a*m=AT~>c='bVvFZMlE cr2 ?{p[^b|>\<+¯}> ȶYZ)J6BFМ ^W=c#J pTed|9\Sn Iv`>wdyrH 5cVpx# ֞ ܌g T$_v';';^ߘ%>_|aXOZꤟ'Sc쫎a'l6ќ@l`ԖYDY9sE)ܯ#Ly t:lDIݜ9eaǩ$NsW~.Lj $ GRZF1 |ƻNwbl"̉ l=b+\wwFf=w:vAxR33p#2:mj1p+;O#s[g6+ƀBۙ 3B3}2=$S*k9(\Sުjh՛pYpyUrZSQU#qnIN ;玵mX/],BB \dda=O`gO`guab6`?չ9#\.Kk2[]J d-ӎ8i84{[k h}bzrq8?z93;dUqtjgp.nn~kд~n5Qv"QgiZYsqخ:sQMi 9#q}+#̨d`ۜ.WRNOڒ_2;Nj`[k8 8Vn5[≠iqGֳM3U%cǼA؀$ @,2@#uZrB@\ 1XCwR6s^yS;NA cHR}@*!ar{z^vK/o&⥎;GsY|x "†#y2]r5Lz9M‚*V|待O {Vj'E; 8yp#8?H%bG%F~2N˃MSѶ"˓^.3qُx9{Alrq:9//$lN80@8oj%.U{19I|~69"RАO>,;X8;T~wAO$@P~eG =ҩ3sݎZ n O~]3dy8ǩKf\ 7 u 9?x=$Q#) nz3%$o 3AbNs aq=zq[ʲ9< t@qzqvr?5>qZ0J X* ;t]-`8oezzP8߷+Qnp pO$zVVF7rr\^yIrFpFWե Fon)EmO3x6{"+I F0ּL]P͞CJ>'ֈ3?*2Py D4$ؖ/ ޘjiC~bkUI? Myey r>oC{(;EUh(L"?VV`m<8dzWm4kE0P3ơAp:ڴh+CpHL1bHbu4 Rr2 p!:`5 __Rݵ9#djX[?0$@=NKݻ| @ԠwNH$bz䎂 aq=؜VicypSPO*[`r胂9Ws҉iDXBTlZNI%r㎵0bzq;\t!3^lB 5,҉$p|_1}y8iቕ8f<=+f/8#wd?B\ oLX>6f\:uW.ꎃIaq*>PEQ[#ߌ42-J;.6*|w/[:O4<%#q=*gc$)E{VzWpC_0~I no!VXRQF\ּ KF}N7iw)g110q)g9;. )q曺U r8<`AjFJvNpaNsf5a(9=Ud>_# ;clFPbP[~y.9#lgU V!F>5) v+(au޵k*7;X8 y5N\%Xhqҷ(wsMJSēd9SH+Ey '|ÎǏg,8Jon>)XldpX 0\^9>4<m5?)'(зHK6!EVBU}HۊͺtY["P,vN)гN.#sS7NVKBNqdsI}Bg;Fvہ<`~5!e䟛9  d)8#jeo.4AQ p0zsTdbo(Ϸ,rT~nVXI91O͌#HUՖ9gByA=1R k~#E.ܬI.2WO*U; _B8)?EY^;Ķki:Ci B6 =k62I1޳!u FǞu$Ͼx[Fa#܋2!SrwgUmDtX&x$ty{FƗbO=Mt9ڣ' ߎZyq&>O::dbP y::gyx!\P:Dփ{Lr[LN*1p0G73:gSx43>p_U8O,}N64~cG'9R=G8$N `|Sq>s9߀!׷u=s~zGU;gf~ydz?{`?4y0:`C@\gN?tcCCqs<(~`ZIXc[?S)3@.OOi\`IV${Sұ5$ɜ};(Kdu1\M9c__A{ӮmUU#߁~ȋ00Wk }NS{s)= ! w ;qϹ1fr'c}sVNFD[ H]7cCtO<❶'Γss$y*9*q猆مXcvWԡ&;; {g^Fl)fV PSIFM=ıgI7 js9<ȫNJ 'E=#*25 " Fr\V\,}IIRFTF0:[%ߺM B );`gt~Y;|,-G=jSz$0 K0~Wi#1MA8@}Pw^[6XLDk•P#ZnmpHHl+NKiS!v+,7n\8ɨR]3rx: kR|Iiq>)=Iۄ,f.N@h7HܮF G~IP͍f |u8a:6FC!ɔpFp{ʘVg A)r#>>CqG\@0 ±#rm9X9{Jd :)8> G~<|ĜyA9'cͧv6@Opz}j#TaXrs\uyj|fR._hd@Yy۸mS3kegn Ü猃D0Dc ڭ$!~;no':6`?T1;J.[rpX$ԉ7^[A9cR w,N@whڠdS!]︱%9 ?0.;ҋhf3~j 3:VR3Cp~3P|BmLxH#S`LDN#euV h$q⡺T۰2#rk@L1E1h=rzkt~O1\;kc8(QreS7=+Ka‘-[~A#WZ\А6ʕ@]0*Ќ**wpXA;➊RCd 9nx'`;#x4` LTW!Hm9ɯ*5vڳ`6#nWl2<^xW.?ʹ!P0"yyY]H0vaNx^jnu2N1zWS~ɞT䜾=V6PH}ƾ&p䔑I$Ѓz`N8z. r=? ψ}멫I#Ũ9yK hط€p9=>-eIW0*Aycߐ+íouqse]CmPJ=N-ɭ'yH,H Sֽ>u<_<>A)d |''_k*(f;}׽8%h$G $K"q@e\oa gdM2>Aܿ188OszS'ƈ̾`L2˻ d8qL|E(%r795[HA #Xs~j7n $tۏ4w 0 dp1N$wQ9ƶ&bci= ṣheTVbVL|NEn2$dcvF89>6 9^wcN[jؕwc$QI{vH Xya\wFlJos / ߗu8UL#:qڜˏiBB` XpAnTˮO$c=ǭoE_S>HxN#yy 3TA#3ƚ58C}¿DboWGrk~gb]ZCw *+F;1+'3N)R^9{|_Asu޲4B:QwBW,wd L|X|V'Vrȴ; ތ۸ж8=IA1˃CZZF ${t>=G&ؘh Hl-FȶappC8N;*\`6 JAF:Ͻ)K ܻސ^E$wO㷠kr":n XqnZvBH$cg1*T,gWNzQ$o*ŀ>ȿ::9s\`@ے}:W1O=LF2~S{3nkib,`ޞο=ſlSE۷8aԁբgs@7jݙob+qoZQrǩ|R {m Nr SתDnPc*?Zd0. ,rt1d=q5iBYpwr@PΩv^ؤM7Z}O%qc;u9]%w78880{|fuGv{\ni$.195a+"09W [x<%}Ma L# YC@ nUy\ҙ+rvd\t&(H#:XPO{ֵr;c8?x2/Sz݌ @X'ҽ:2:~vPNzk餿['Cw8)@e ڻKr{8ǚWTR݌(Rw*ϯ?}cM9Q ?zkCs ޣWРrTp8:]N-axy?snY|#JDd?Y$uYeb9\zt,dg箤̴֗xev72e2$Qלuyz_~DJ/Mu#֧ф @9pN@zN+F%0Ac)A2 qVKFS$%qu3 ˔Ua*dPdrwR>[YW ad 9:{by/'71{t9PB2dГЃsZ[- (ݽx#px68ǭ9v&T9wD>ͦ0f%TN#ɥiJɏh(JҶPUs&w?cxǨ*@ aPpF<҆77"Â3{V;h댜wN3SKHX'],F܌6B;tg `B3Cp@ǂ vN[=9=A!,T,6629;ձ?{hf_1JKwۭg &SH',>Aǥ<0wTl͌;awbYq Psܘ,sGqy l.B2H#wN1QOL0>80zPORcFz9>:9v=3Cu^Ozs}:u봓 )睭ی횣&X9.R6!0wN=iJ5t,X98Ny5g(xh̸P {1lzsHv<3ѶӦ}WR5cS ?/$r8yXdUU)-#w8毧g,b̠mo@?x] v7`rUI+\g`g޳e2c,ьTer {Xߒl@' {<dr9W?3mQH=7[C* TNsp{d+~ݙW>y 9#RfZu6ql*Ga=MeWf8A-nNFiŘ\ʝhP<qs#?>fzctJA13p}: ' Iu=GoưlV[ >A&6@ioO3ړI#v sҘ9:9!]79q`[',@A$@=l}(B1`@*}2E;)V'Ǩ <Җ9tt;'p(vgp~l*` 'oF#齆wgm c# =Mzf|6m?k1k^Y[EFĠvZ%ެ@EqMsT^GJv^MpgA*PF6~fQ5@totDXp&ܝ(($w8)lO VW%H"kx*oTn!w +tpH4$ȽJqA'95F̷!LGDY*)=W+n$ {6eV;rBH!WjHTI8 8#Bx瞙PHV27@%O'%RS;6NUBpz`}:+.0͜8>[Q\;@}*8S"9>ݹl$Š˹xbxV_81M\؍';R3#F2ֻ F@?BTu(]HǮ1ZB:\K#ladSQ3y|ŘFݨC1Ӝ֜Û_\MrRJn`l] sWLC.H^@?)*ߏj[qnb)sec99sdsG~7ՙ~_bp !l1?/>1ZP\398d[G B@W:ʦLCG*9G8䬵7)$* ~Qq=*WVe$(#$#A᳷=N420/~R3>*'wsDF& nQ~$̹W Ƕsww%̫ Fs:ӻ3rD FjszsVe%{=4幷d|4j2y+}{A.I" >d 'qVsFVҟ,g0 A#F7$vu>UOA~9N\\dg^ߡ0y9 :\vgnFp:gs@#:g pIdqx?Zbǜ $W~6H3sOZ(,Pq6לu:T98ܳA9>'"bZdnSnYU6pvb6+U[c.bS!Uun}3oH@0A'8$=rhQz.s¶"C ھH֢݁R`JSI|X1"Aʌ#+nJpW$Ϩ5eD.ݹv+8nrwN8U/;2I7c'r9kSDlZ6dN3;y'9d(j*F #9Sv'K"FEU '9!aMm›sPqzrdZRDltwwzϷZo$sׯe:7痦[g1P8N}ӽzlJt#Wx^k0IzvVS;GLzuG{q':Wc*{IϣQHߧj 8=z%Kbd0c#g/OL_JnzxҚz~cۯc>֐p?1qM 1'<{~II9y q:9G׌zzGL׌Ia_”OӧjXԯ,#5.\}_:1kIA(Y `UX ?G~$ĩb!E?>Duk$# 3#qp;WuJYd X #(E+y#y`v#Km Ev:6獢6Q$e@ߕ0èzЛ]ҭQ6XPʈ`IH ss9*::W4-"8A#yzSaHqb9?:rNǭES<qB>XS5R$׷7(n $6p-Ʋ?@ ׊4 aoq})iU»"}N 8M;O*vQԨy$뱝>IP9$.FOV91䝪>z-o,qs=!X؄,>Ak c#mNB"u$wPlѤ"6 *)q=+rx s31WR[8ʾB~n>bO G<))FFFvTRsy犖$BM0pw˝~uUVQjQKssznteM>VܙK.7[ &N$Yd,'eڊp 5ض$Ƿ\##ޛR#$ڷvtlX{WYeT~=]vۢ9@N2Iee/=3im3gͷK1$&ðkWm.yms2y"II l'V=09eChlxE, < {@@]~A$qY^b)cߎ5A]g8?t}M9sʁQuzfɗ(wtVn6e)]^cpb PpAp?Z@`JWӧ' hxb;8IFf$ǐ$Sz<[\9GJBʽL;z#ND\~P vp:0n s;8b V㞜`U2%XGA85L^1Hv㿭f; M.eԒscַ.DAvlO''?eM8 TL 8浸`2r?Vo9>A8}34_xDm*zqר:U=n7d`}q gVI&88,ax,zg5+Xc(d]` r%cQ8=Z'Ʈ ##HUyE\?qMY1rgo]ç,Gwx>˰]bpy+sފtwpNTǁtmDv θw9Xqצ+96fl\.NKWx(,wX;yaLK :>v3|p{<>z=Ju;*ޘ\r$Xumyk 1־{wwKy@H3V=TmӭxinX+~?ݎ>JmnczjoNtJKqN>_?TK烑ϠXҢ|#\wDDUУ\r1㿭wRLs'ֵ]WL?5p#8һg*9=Oyj#G=IW}⛜} <=<Ǯ?N)ߑZsA;p3?C'o޹k˥vǵzM>zkXrRzy{y[o#F﯄`NH*7?/ౕ*ydF W~9'p=5ÓvX=+߄yl3vCIlLOf-p\>US)@9pG!s+S_ILW @9``cG\}k:Y[~ דje7cYUK2+B-`Uk)qb Ydp> /=uWDb9۽`᝗Z4D %?2  g5T/YTt ?FMG#|ls^Wx̾YW  Gos#bFp['R@Nxj?V}nJivHpv @''GQtͱv)%F3ךgm5z0@nFH9'ҦݱK|K L ܓP{0!dUsY2X$ `g#{LQRrLhd!.:Z99lm ۍgL41l(p`rr}R.mQ[ڣcxϯtc nxFF{39.aO<]3,Qzp߯UneRҜnXϠPfVsWyJyf\xUXWiÜ6zqKw$wywj$ L2yog D M̝< xK/DBA;@-F^8ɧDw$D <n O0 `T!m9/,yx āUyN0Ou 8#n\z{yى!Bqx uKy^14R ca㊆~g39q*Fff %ۻZkYdpTBwd2d455Ka;u ӌ^H9pN(~C󀽺g5weBѿ2eIANwwO>|Xpـ!} *M,7DEn1L,A*HLe@ &V'M43 }*Q!ڌÐX`qǜqޱ,.bgFݾ[p ^'׵Ec;:HX~By zu|/Yؤ)c(LM**$qIzφ2_YDE(Pf#v8݅9~ N}^~PW21J9kfݼfaiiMygX\ ~zXFĪ 8f~K @\o=x_¼seQϯ$d`ss9zVrKNёc vAG\xsG3~&dq^!9BH)3.l q^i9{ z%yѷ<ST׎Ad1?\qץ'n;fyGon1y:z׀M>z#{N;t9֗GbO}?Jx䑐s8=@^=s?ҙ=yMBB'c.:L2 㧯$=?h7{ G^posG׭H=^FVKAtq}*#9$9yOcz-$NҾH6obŲFBZ}Wԇ 0zK7m O|F7|?}j $9?/͜ʹ#Q;#&F>_1sœuF"c(*nOI @l~V.mPc#vTawcG+&^$b4! \2Uu*[>d|V$GR}RU*w?#"pk͜[;!4/ ) .?AǨ:Q|g dzPJrFMq {[M ]J.w}*c>b"F2nv{*=D0ylTsT4C2np1&|eX!K\q吠.|9ݜ(j-2CM/nGM9=P1PW#`eI~li 7I2!B9^K?3mcٿPK$vG" I'$S{frKlW9QBbLq,BA$z`szHFViBctJ38m+kEa*k!d1fFMm.9TP`I {qV}}} K]%f$l8'.z<ZOb*Ѷֹx9߸JJ];R}F?PF6(R8QblYUe1q'xZ4ǔ {#+$'UH, 0PH0߆8Nb#kztg̖]S,FXP'qjG?s>\^5E̛!Nc>^3!f##}+S(Nrᓁ:u\B dH $!u z`zV4X~=ApNa<C734M\/  vAy|?pܒrKCufj+g0z`c<;ncлD1o~k䏊ڃ\_GgH&5 $ʻ|̪?u+elZ:t#ް5a9ׂ-gyٜ˶R|\s!J;<1Irij`+ؠn珈w#UyWIeRpz[AI寔ĩl?7\sz#.-JɸmSЪGzꁕ6n;1f sqDuԗFJd IrsО'2꠷s!8>h2Ye WP(1~JQ#+j2q>\.gnd NT71֤o%q|?)SN9@8 tR.=TpO#gbs,sG^CwSX`J8u#(U$'8ܓ[iXXۛzچ4XFoޕ%yʑj v` ܾ=#}Xw *74@s`I#Ӗ;VAoIJy1˞WCcϩ| aceeϖ8'޾5 On,ήmqֿF͠燚_%R>OAӅ~g%g%ٴ~xB]2@# _TV BIF#,HQ5\1\Kc8^dlϙ/-;pr>jcpY`猜ƺ/cuG/,M GBsd,ϻ?31BAګ郐l5Zr|8FVbPnWxwUS;X{a'q9g9rۘ-ӷ\u4,~!Co^k6w `ܭ{i܃9%n@9f˶rON.$|1_ sR;\B9r:gp;йj4- kb@%wRIVʳ6>ujb\ s8 y+1]Z2yNso¿.wv$s=ʤpM1.0`098;cVDb9;ߏǥ`n$S2U8"NNw# 脽Grm%T \vZĞb =;~^QV2n`:d4ϰCg99]*I6P8 {61)bq_^+*JQ>K.jΦ86rz~x7&p8V\\׶~z`PyR1,Fz3QGprA^F"=Fzy]X5s쎽8ݰ1*{%RbYkO<{o168%1=qRz6v~jpg;AqzJ~R1O$vf>B{ PG#89>Nk5L_̘b(;N qs,Ā8l7 '-g;$xʿ 3/2:qgR$3Cm\Jҷz $0p 893*mtBd򡒈)'Y;͍S;Xdr(Fx s墒:VP `ǹ#'g֓-F3ҿ7$@b7v'cpHXMé1psڶe3E+)F~U(>~ztevM>'_X|.Ta''>䚼AA@|mO` g7jz`8'*H&=Aq 8$A"Aą=?6N,`t8O2H1=E]%]s+[6nzh3:n dG8 Xc*ya7d9p1׽HB"XmϛL9UT\RB'^s\TGVLNz29'p=HS`<ƻ) Ub_xoF?)S$v' R_ezcoS7(z#w9=N^^S @B8`{s^61=Res9!:Whnzm' &(3i~-Ș#| օ9ׅ8]unD ~n`s#X$sy%lU|$۳ .C䞜׉_G@>3Ͽ|zd~IuNWhfHv9唁'1B~^\G19޼ϑ n瓸ZN8f?1P A6ΔoA X.4}yݎzc'_x9zsNi qcГ91RZy4t!$gx8Q$3*uuH a{uG-2gp#C a)ҳ}Mc@T?1,{Aa !Q4lA|ㅑx$gܶ$ ]ʔT~#=Ȫ:ۏ|yȸ<=AON oq1l=#(U]n;㎵-\A8ϭ$ȑJڬ|c{ӌDQs8>FV ǎ1'V;n2@IG4EIp6GӵFT ۴mek3tݳ\ ,T Ǩ A\Qx'\@D-qÅ\zjL|79  O"1tcR ;`3gƽ@(Ԫe W.qcZMF6I^W!Id78T Xy5:%[*P n'z 7d,tUW^|׃9Z{ڑ&xJ.gQA287mϷ oV-Il=#3c[c>Q%E, @%,HOztjagu(vrq< ZNLC}峓ztZ7Ц򂲲0]O8e1W&ʎZ6cɦIILݴ8ʲ?O*K0<;@rv^f8$)ܩ(w2ĺN: PTs8auZ-]؆FA Cp}]*n:3cQ+p3G,r.T9Y37U )Sʍw(8>AȯPinUI"1+˵Xp]WRLf90̠= Ҍ]q +ĪJXd0998ϖ+$)ל g_+G63w;@ l6Dg<qt5#UD 7>kSxI4`?.UNݥ9jLq0<;LDtʠ ~fۓߒzrUVA,I۴)8qOuu#o1.Τ.1uHsډ'q+1´$uZRNpv'FOZVʻ Pxךg $q}*Zw+8_^ B~mܒC>nR48s]81gONTO BXCIsׁWg`Hc9*0aߎH&>BVThՁ1I>]乞BT\(4 I$cjk&ORF  #O dtZ(&R#<i ̀qUI舤`əN6R 郑TKYyl(7,H;W-dRJ1H$8j*Fd&췘q5v]F#BTr=튮Qs jm;v*+vٵ8b o^= g6. tbpxHJ=l܁/8;w3TGڥ2>l,{vkVGvJ]I?*Å@Us:9BY9YAru5E$} TavQ#NCn/ ](9wtV:{F7dH''E'NI+[Is3F1;)[8=6ݝdU>{W":V!*ON0qc_SVhxPܠg qRЯ0JǜQ\$aHw8#֓sV,43\J#1ǟJ$G5:^ شYbr7$nc5712[u>/|9>r2&ÓVre'8M0)TtП4VЕGl 8Y7L)ێ7EЌUpfϦ9'>yل33t.QB t9X }b1}7+ gsM&.O@ s?JhVq<󁎹>[bq&%X{cϚAJHbqaۿ=(KN3c\S~1# ʕz} 2,Ge3))sNSΓ"I6pI '\4e1e ʌ݁ߊ߷ Y>`2Jswnӵ9d`j}HXK`H18苶h ) p9\r2ոQQA^\{J]xB+YPd{R-c뱳 p0rZn$2YQǧHoWR -#(z:Tܕ/C|0feU8VW wE,,6*pSrP02s(hʗˌXG' {5݀cc^w3xjb5*fa *I mmpXztm2fʲv)`AߊpHsCv_F ~) F$QS; Wj˥M"9 ݁N=x3ךGa\c@_sc5~翗&ggc:a9@=}yi-:Wf8JS֧FJG*G$sU[JTo:Or=kIG}0sXKR&cLRǡjXMzp@zx uC֒BN2)9>۩)s^:Rv=Tz? RcC c}>z^Ɛ=Gy nӯ4 wϮOqV#M"DY 8b}1-9.r14D==ٿ Z#88\Gё$t: nm,$UIb;[r݋.4\3*_)Ӂ׌"IS{ LÃ"RsȢ%56Kmĵ)X3 XR"a1OK</p1lg'n([ݤh2[æ{^iX w Gܑ^]hJ抾uowi ]EÎTcw[׾Az8xf 8U{9AɓpRK =޳їmQ\OLjO wTbr~A ; Py,Ccׯc-M2 !c83<` .}><9nvIۂRw 1 b>b8{qE=D>\:0Ʌ$Мb юGl=O>^k/C[ˑrp s> >) g:JaOB@Xn^Jwyc+1Rķn_mV<[C d'<]B̬W(C"TI=9Cf9GuvT`qs*$"q.cB4bkEG^㊺igk=6DF%xfcmG?B$ wxk -noVs?̞}Z~drAb>{T[RM;rCzqJmb$%_ڸS9L}2{nPx~B9=+B]0ZY_1[#>Qm۩S.z{ܴW]oT*cv銮uSi[>Q@~]ƧvYNxO3tا&NJnT3c'=3UmS+r9RIĎ;ddvj^oe# ̒C8' Nx$*{ةܕo$`Jn<&?2ppH %q5VN &}E[ 1߹~ݚ،f8Pb\qϯN*qJ wuw(2?XO:۹B FA;ۓVV5kld#_.@8ݝ =2Eq졆q[%/{v5-Ē*y5wa e$勐N}ǯJIdې tݜcg;-ˋ>8Jr00:~$F8늫E.kۭuG~5s@FWdp#׾z׫ S{{gƼE+F$g)1^|նA8=圑'! H OF^G8'#{ݑFy :ڤHFx? £<^3?IH?` $dLhfsiNN;9} L9';Ӗ=*7;VO[Y9@ώ}x8~ju"$c=s}}*lH'_j)ps_R h#4Tuo&ke:vvLv`dt^iAiQ662KgJ_WY&Avd b>nu#,r2Ăǜ SIt#xNѭ%ҒakHg$/c~Ry10ZjZ[io:8B6+FI9ATri;#`EY|r0Z`:~r2r7ew8>޵g.#޼ 1 `8dʫ7)A`t'qSIb+HY#%Y9Y}y#ӠRLc;A]æGԟOZleu͑8q!O1eqGaCw%Ψ76 9ǦkQS!nž ^} L)b)ei67ӌzk C,YLrxJkEY\B08$.>`qֹ8e mݴؚ u2\39V TEzE2vwAǿ2jsbZ] P|0@vlq:qNjy8[ zk;BՃŒCr*`ح Ƭ,p*cr1OqE c؅vߟ}-3,@CnGΜzv?ZMvb\arϯLmOFAܥrؕ!&:0cjZΥc鶐An`Hm#qy-ÃJgKfeii.s8I!i$Un ᑑדOs%"US0R98 G#iQ7}Iؓ2}D (h#g꣞N{VgAhkw.6mFXX$?{u`\Xi[+8HC1OZI dثde*Q&:=} FוFFzxSAJiƌ:yyw'kc#uź9d iJt>t$_Ydl̓ r=kү ]6T+78 *$n'tgqB1IHTbg67l!u>SѵJ ~dӶ>l6ߖ洌u&|w ޕxgneH{Ki. sHE~Qʬd09HpCgkͶO ӿDCIH'O'qR}=y;^gȔ=*\=28ϧ^jdC$Ac=7t9N<ѱ/Cf9AO^S?ҵ9A<1ב^+f^:s#P=k)x㌏n`yOO/8x@{{4'tORx@}H9^qsSMXz*AӮqؖK`qGZnrzȔEӞB3(#@J$9Qҥ1< uztzs k@LOK` ~}}-wܭ L˞OS޹3ץv9UI4q׺3`q+Img /#" CEֺjv=Tr>lA;TwpH,?zb<9Qݳ%bG =a\w\bWo/5R4x'nqU:G'鏮*$7q K`g,yNgUFS}H} dpso ’>=[ I8XO`fMFLa8}j)}Tq"rpA±0$6T?,*"%?(w(;žA=z"s", nNubQݻ 07qB'ko8ar nS@p{ּI<8_Z 69-XX?6$w=khQ2l= \̮fmt8oLՔ %p t 쑵J90O̓Ҥk~$br#UH]̋p;R@ t9dC9cc1KEdvn݁b0bkHϷavm>:`zQM{œj. !)=6hU'b *᳑H' uuc=w9 dcMcoMnrr$^v";)MʭvQ"R̠g_3d:0qq7sUS!BsA8 ;f ڙpF3'Sf"3 A<0$w9 P.w7;}# KEi]]/Fb}!=pg$FMLgS[&.X2^GP? נn l0 <3iusڳ=+`'s8,,qnrٶ+kF-ٜ2PړZYilD-JuL§BA9WNhY5 $@)ާ$SG1*7eU(6Hۀ}OPJ7`p9n+"]B_,|`Ps 1tvATF~ GBZz^K?aHr1)/Y7Px Zqj #Hj^M:5G؍j%y9Zƽf+r{549N?ʽOո БjS1$~r~kA"*CLTگőToorr:xҧosק+$kG (pPg ZqA8`7Å$\ӆT'f嬩77݅155X (ti+z]z^希}:c9}kڴB799۷9(A2v=| n[+{g;!la{ t8)CM?>K)BI0N|gjK3-e UDNr6קMIƜM6C6>m> `gRye ex'SWMWT  ? B:9Y (P|e1:׳WWF!ٲs\|!6:qŁyNr@o2:5./n.*Sl7L'q m» C.\21SV@gXy UPVX \|$a)#+7֭onĿt{b98qftA*c F[# T֢}˖̑QTgCJ 6_oz?@ bvふPeS~Bmc#gA=Cz{PIrNݪ8CHU#+ey3t9eVI7 he՘8{U\ /A7oJOjЮ(!c ޷bjYvaYIڰ|"$9V?lXOޒKFs!3ҧ1ҧ/bڨFˀI`*d|zgf>nFyl]49/xDiB 6wk? jc,!RX }r}k<\9Muk?&/gV2>Я~`]q+}+5~6UוS EW MWB֧lo,d6܁rFN`{UTq0ٻ}&w#/*k]>)lLRDeu,n^C}T:bz U[jٌgk߿E>X&-&VXNB򼟘yj|n){'`sߓּzc]ت(5xLҳq He 8;@\2G}.9Ja$!;Pc=$g>mUa~_g-nT66'i@9ێ)gvr[;r1:V $dc+o9²]׭M9!2Ð`-@i4RbyR~`Gyn˟U wQVoD.qJAbH֩.6 7ͼ `y D3C#9*׎OFz3u-+9iwiM` n3<a֐HB;A$g(:)lqz:L+^''<$nkZT:y[2ːלkt匢KnBfkg+JUaI l1ߥ1I(=*j5}dk̪(vQ/s?*q&2>UPN=>nC2~PʮNpy)h< 5% iI#w;'Y<<=A8犧 tIAgi68MF4̶̹Զss1jR4YBJ$}{^iEg?c('[!k x t]˺m}Z X?t)sɬy_"q i|m$cU^mːȧqxQsZwNtp0 _ExkBVe>n.0}:krrJKԺNE#,"8c^ٮ(A@;~&/)77'59FH 2;wzH#qBOoJwr{;*>SyE2ۄܸ-ZVw&ϔeIm{|zVZw7oIl&p9(GǷs| )n9co'KeaӅ'k'?u0xb~#9=9HLg#i*s@aAONIyl@N?:Qd2fbϵ=Wp+SL0__nߺApB?X%\~c7zg 4 o$r:#fcѺ1ӥ>z yRA9w~Wbq982$*9BUAB{ڇ~9z>S•WrtO-a+?iL.m.~bI#xgwW8A\!c vJ#-d`H{n5i˿M{s~TI989}*wqʮht?w׌M sr:~8jkD 5[6R4@W?bzgq\A#rTߞ6gNWHM'k68ʃU큑ǯV#!$dp^8\kk>+L$dۻG=ڹri`c*G) ="= Գ1ʬz&ܶp~Ie,2qv`$Y+6\J`3#Rq\P@ 1 У.[j J%2瓐~aҢIJmK)`6\GF=},tj0b0ARN[ `0p $kc; sn HǍ*õq1(dOAn}(X&V NT,Npr; g#,1w==+vӱ2R0۴""7N{rx:+54u:n7 }N>V8#ǵ)18;9=3O7q c [q3{N11C烎9e<9O(y+@y#9=s}7ʻFq^é:坙vQ TPTF3C i\ΤZGh4/ HLI Y|ͣn8m-c nɹ[UW"VifcR7TlP^xB v^9X&1g+tFߒ4]/k<[@$䎀aPS~XѓF mTcV~w9 7]TU O'qZ*̠+q}FsE˅1f\܁jɂ%m7Ψ3 =¯q]Ss0L&U{, 95\d#bv9x漼BlՑ$2s~rǦ Uɥ$G>eUI>ƱlUKKN4 4f106H䊲4y-'1w)Aqמ~V&ʓ|cV9;I>~C;ҧ{7c UzCMh:gicdK>V]x%s+-w&@ ӝ`1__ҵz\Ft2yLGQ^a],lDOX)\6I+{jxb_0*VE$݊do|6j1־z+Il-_u+&*ߐڧ8=:U$U$#rX0IJMv;Ԟ6$d@錝>LO֦1h8 pqdC# p1kClex?A' W6/P,yONUG݇e7sQ76eI>UsVӣ͍f \ #$r9暁bHO/ˁ6q"80/2є#c H 5(y[zzq\LzWϽW..ve5 W;{rx9?ïWj O A?wwQ01VMudhS$~V `drx y?( F1{֟ Ȅa "pR3r=:j_)xcf\.ޙ?^*-.ZXkvV. bOlO︭cd4SCPgq+@39 {Vm#c 18=ꐝGj31x 3?+(1JHvHF~@p9=kԍm"y*, {c޻ՠi| tnzĹՎko~f#&=epܶRb@bSb|avi~drOQOJb0wbz6|5;Xj*G1pS B>2$eerg{2:}9jӗ4on*2 byqdcc;0u#9 Nq ʑ#ɪrwîX İ=O< e!Y\*tU+O'iCĖ O[~a'k_gLKtЃbDI鮝K)WQFcc Pɵ c#'55PߡYݴS&w| /i~{té'|tqJ6gu8= ۩`i;l}؁:Ȳ_8le[ӚK+ ޿Gߧ4V=cK֤ܩEfSsRBn$wN@ކ&G@, xN+&m.ݝ $.cW`t jc]s+yֱAڸ(EFRȂFLg>c|ᇵT 2˄ffI=kijMxA' .͸ Ώ N Վ:Ce#gF;T&s)r(_Lm.gb0OfP z^*bRpT᳝?@\zؠˌgӃ9jxOϵucPA {/'*Fɀay4x|#s3>#$)=2 H6HE,;[,N2[ {SI6I>$`aϡ#41v( Iʮ~eǡ^{S8C`FH \iXW¢#:9pqzjr @lzg6RBŷ n܄R߯CLb~}͎wW#89;>P呱aBK#ӓM7Ilzgڢ/R5&<8c.zLZ}A0>v=qI\2wfap#U/`CO;Թ)t9`~3gr˜wZӦ[``<8''G1|4KmUp2HA#QMć$cir>QQ8 A.Ub $y>KSK>󏗏0ی]Ur 'aS]iU:]9+ ⺈tA[,O9'Aj1۞,jWߩS7g'[pÁdukoh,[0s#c'5 %n,|^_o_yM0)y@r x'p;MZڥB]<˹A+q,(L0q] BJK/˂`s5Dc*I<#=zffBP޸ TD'avH+FC =zzdՅR'  9hc)]-(ycҥQ vzV*C]V6ʝݾQcjU G\'+Xrf(iۏNG5p9$v$s.:9gR͍ȥ1CpO9_®MD6۹wn*TsZ*j3%R8Y7 1l:vkTm,DlI-f瞙?~:cY&H79k;}EX N$lsyښmݤ]W욺w;TOS "!TP2zā_9IV[wgF 2`lfnrJNOMۂKQӷ%iEo%Zpx`rX\)mpYr#d^kWӓُFhf\[DoG Fo vK=Y[ď[-ncZB"jaThh>6NLZ){cLqUhRU,K6HzJ7)glk{lƖyv0k9-F7Hiv끌S.^TKwiu ZE9!feϦSǿi(*FX}ROfifʈa=[zFJ$. `e6 ʸ9)=((x̧?_N_'̍gnzi0~f+a9e#&$ L7!jǸpB3~\桇"{s{%Tu*m27[yG)"i{'zxIɥdW.c/K\EF av]Y  Y `gt0*KG_?=LukRV}I/xH1r`kCnJ9P8{֥v $27!V=ʨ2N9(98 E¹ d"VpFr09 EpM+B1v8WS^y5 "6 a88FjcN}>&4;A,"RQ7Nz^*:EūȑCkSRBH3Ai龻->:VLHAb]08uqaS!'ÖUcx(i:\;#"MDH*[qk1ŘB+7N1+` s*]W՚B̸<7vvQyӒ1bp#93\қl46G9OxUX#I{Piʆ9G Z´/i KvSci?>X`ɯƮZ՟_UuFy[jG+u'=3sRFsg#=Bg#H۞} 73/B;ʫd`Z 1szJ=d9}빎Nr{cn)@c3UH1I/Ȼh9qqQ1 0aߞOT9 c0A]frs'r+J{ \`qT20'׷sytWe;:yT2 _˽|v!RgIhKw%@\?«19}?C{KRzM $29$~|ұB @߶}iŀ8#Nz|>޶%nrI=yU#< 88=ϧJns߻o#ʯ'.AWڤr[ S0%)A'ҿGëB>rqqp`p;?ʴD1~V ̜r}p:lf?6F08ۧZd8#vrr@sS6è1Ҁ7m?9,+>tF_g8Rg%td$3-%YȽsnZÝBhuD<y9E1cpuT^]y:];E{Ry ڑsVx 4[xۉ!+\wʯ98vw{QQv~Tzo˾m34 hO$ݎkCIs+\ʭN׆N{嵏(mFI@2 r,۹OlV!Xb TGpOjۭlr#hpzs̆"/#0,d x랕UD$w1":?30 @9k\MGfnzQ ې7;br}@9?&'$rx*rG դ`;Ky;})bIR ǑYLV6xjP4yRr+gz )zgjK}]BGܜ`8o3Ха!o T8 ߗ&-B /E3BawدPy\WvfTJY%,p1q;T@O?Z%[k,I -ʒ\~TZ3gaٴpr Ew7M'\z\3wT~pIl4c8 S'9Mo 첁~U}}1] ls0nʀA ӹj_D,KrYG<{y̿8P >g9tZeΕyx 3|-H9+8Ggr|VWHԕ*r˂n8uL}$ dă{`(omԗ7 $m!|= J]Vb`;rXsTKf%bB50DEYw.z'_C鳝E@\^)\L1$hq&9k>n9/Dsg $ 3H,1c;cйLe[oϵMgsZs8sFN GCݎ;z_Akr*@HD^]V$ڮ%Q¯\s^o"85%w 7~C3pZf5FЊ^L{+ 8k|2^C|S͊!03!W.H.g?↑%DJS3o;^< 0D#l`G+ͣWs&Uis@>'`s4`ʩ_<{:~uir3g{ cܞJe{ a3j~vO~[j ts1sqW}43z{SG G_:QJ\}xǧ^1=bgS1F;s9|ðӧңc~,@#})@I 8(G3`~/ӌ`ҕn029{U0+}8#qĜ=*: vy vx֐t3G87R;|rOoQczӻwϽbH91={}I8O3\r0{_ʪx;[ q-C 2N7ձ 2dĜ`s;UБG2GJxH#`RD`%rTar:sϦI"$gKfeqqԏh* H3c+ѥ.pNZ1!mA9&8ڣpzIj.m8 r0FԨ< /8$VV!SV1_,0^31{T: c$sϨFVlƼB׻2z)w 31m1 zZ|a-?гeje?0Jl[OJbBU|/򑌃3+9JLs|r>sU%~`I ynǎq]Q[]ZYy&3>n8܆@sd;w ck)fQ%Aŀfn[ٞ @c#h2I`|: G\2zjTNK Ոo WI`P+rab3,fUT֪K'lFV.W<7R+|A-ԫ&b$%铜}{/F/xUޣݟ i}IRR[qj`29Jqm' pP]܁*$fguLmV#;_$瑎iḒ$/.#Ի)!pKe7<ޚJQ.XaRllxr "}cm`r]؏F:uq]D-H~b91UN9q\w^y#̹c zd+q$)qOLWDl`Hypy׃\i\sIsa!La~A8ʟ|;_s(A+)¸S1K#nL|NA<{֘g1pH d}1ׁpN1m$hU*r rWV,uR@ a>^ߥpVz~\Mǹ|H^zGjXp[ap:S;0i=JԄp|ǁGB`9̣'5XaAk˦f!CGea<13"FW+r:8k/dO;Ǖuw s@:p?6Z>~t g' #qֽ*yټ]7IWȨNܺlH۱_~%(n&o)+8%UB^x'Z6ٖ O;6ALn 'BJ8$lUhmɶ=9$c1hA[RYC>GsAYgIQw?${d 7p q۠z9#﷞dN B9zts8 OsՁOa&r3=1f&,HT ddu&3F[vSms]!c'G'fHXe௯Z' A`3JB0$U)\C"jSnXן8<`c6YO)9d{Dh 8I 8Z襲sw}pcycpO|v_ӵ0NXݞ8=~UnpZ>.aƒqa}5GQW/gRw_=YTn?MHЃAzx44{n<Щ|gT˜W:"dPFNN:c۵~Oi=j;z_M.{rwv)RO+](d.aj{_Mc@̘,d'5"` qz߀޼K'{w3/X2:bfX-v;#[z `VUQa?*0,9ػ|,ǾPaA^D/#`%s^ fٌeq p8* (Q9*!_zU[tiČ&ptw'wզ<֗Ԫo>l%pd#pe@W^U#W0S:zq_Ah|>=CClj~5^1}c7#q\/ːp_8I9NA#o `4$N:(輡8=G^tR\FAP3۵Qzm;NG#H 'pGpʌz95+$G9S5Jzf@ $0R 82yV:>rvp ' ב]M4Hٍbö Y;TrRee % g9@4Փuɑt9@rT8m;Iƫjdp1(FaTdr#8aCBM H@4X;"QGmZ+o_3]̤4 uoo[Nt!z`Gm/&%߇hQ`(m=vӯ֮ xUd7;tW&K.. eF3׎3֗rpp<LS{?'`G`qqR>8R0@R?Ҡ6- 7F#J=y8#'(f3?>xb{뒭_D~@ p2p:G䟻y?CNS09999ӑ488Nߕ9T08HNpr{xׁ/;w|Tqg9#,%p#kd|J ʳm?L қes2ǻ RWgc<}Ҭ9{ӊS<9=?ďj'~ld{g [AFYYleYz ~3mȖƦn,vPBn?,u쌭4lx tҧU 0s84_(!xl t徕bRI!!Wj!nvsWmz3l&6)P>E"L5:4˸>Psn\yΌnϠ[#]r]V8QּDm7Yv^9N3+x⬩Qv[tȮ]J`W8$g=x6 ds riko0Qp:]{]$9n당MFJһr0OJIYd7m8H`I0=f4aqP<^:@!T a)a:oj06{+%Qz&Fdǯ͎5=G%,Fh]k4y4 Ե< UpIyr0#5:2*U }2 N0}yϥϥ.X&c7@QC#Tq *MlV?E5r $D$\\1eɴ\J=aң/,l mۦ)=H\`J\ g®[{mŇ8nFfF[m%"cz*+x  3$NI%G:T#HUc\ұw!f.Bn°RG*A$*]Fzfn7.r9\wq-Cm8N2*l29a|#zATjҐ 뚴Do &Yb6.Swa[s'̤ wpǯ8Y֊6v xbx1 D'#ӭi.ƬbR `08^?w;s݀''ӕs< |Aʪg?;Wk7A!O?Ci('-& ,pYyr8˂Cg5R[y ȁWĝBq)l |pT{~asvIKd6 m\>^LpAz4s)ɖ&)S|jFiB<1Q8opsz S.,dc6 uǥj$>㍠ӊ޽HBS^O_^L֍ nCe,,Nrr:=arpdw=G:rEvU?ŸgR$HWHܧ N/8NhQЖ:]6MVwW+= xSq g}b5JC$ĒJA€>Tchg ~+9nk ki@6 =Bt'rW=sR5Orۗ8;z}~\ ЫyQW{?@q֛!5\=dc0:x'fo#]Imacnrp7RT7BǰQힼgu,N[%IVa9Jg\zcq$|q\#EmAgkO dck0gbCc;RO^nDV g PᶎUT98 }NE/aofee%6gW q;fCM#f9HٜqJJkm0r |g; W;t3)T8qw[*?P`iI(*;=UtMnO]lDaalw繮j%mO+"|O |L@ 6pzVTxÂO#+)'n38>՛Vi+߱lgÃ3鞂rnIBĻI(bĩsqQRUmK*IR rʎSV XN9*6סJEԉ%p't)ĤlI~9~UPeݴI,;ay`B 6G! 0̩0¿Pyʉ3E}'g_})<.S+- +}E:62P=I2\q,=p+8=GHKè*˴$v,r>L;Ng oRD1^ޯ"i8wY>_J/nNH#;AJYW9ٴOO]烞+ N4Ao8FUy18^T}U[nT[Z!R,qV ݈qLf]AAy϶15s:S! y= &9CL{A}z`sɂ 3)`2>)zgQ #ȼC{M+kf&Wk[m#?fm^:G%+)rIA_^k, ch~Ey/OY:}+F:y\ޖ]$'mĠ_ݩC+g-|c.oZiP`I# &15It'-  9Rj莩=5\j )ks^F)Re) >'"_ŢXA+=Iɂn6FЭMt(ޭucbF8yȊ3[K 7y=ҿM  x98kJ>#۽WGKCBdE;_Af @8r'ė9tgԢpZ3TmOӡ=zӒYm#'@ϯJDguy *`3 GrNxy@\4TWUJϷ"FE]$ID[]^Dw_XHi,n 6T8R=[[i(ۢkyr!_p%^f=aooPFo6I"BBʭ.0z KzX]{|/M[Feb{q,Q ptr-m-!@ (_E>#gIJvM-y> (gQҔ{;1F B䵽:{VM6C75+s4W , 0 .[N9=gN\T.GSBJ 2(⚵_Gu.ceXlDܨy12܃nYA;K#f'}jP(2Z'VE^Y[qbT=w6F6c-jmN}cߚT>=uF0P ϰݠg9ioR~0=sFU Hs# v۞jnRq *yu׵s?W8A@îRu<'k98=qA# cӱT8ޡ+HBȻx`όԂXbvIlg Eii奻HHM* Uf[n tqWՁ"KW~~GV>㜎ӧkɜxm<s$!̧kn>;5-wBAKJ |`ֺ乒FUeSMcPSwsMd4{q݆go3nV=HdӳO\n( ݶ\U?0dܪx 3܄inO!Tgi£~}:ylx#-}rOsI9iq QM[7:m+f f$(l|ۓ` qǥ/]$||(B2>\&BRF28\riD8. t@$cr&̤/f޹OdӓNzNz?0N9 7䌔#i3ڨ5$#ަNj6#wqSz(?Oj]v x Z̜NBN w6\`<*8KgD.>9BS8?R Vx{u< ޹Mq܌sΡlG=*ɾOb~U玤2yr%V{rqq(CǠO^ ס>z}*a'n@V'E5I>) 6:t²K?ZXzU?!YI`6ֲL~r=-a2)8D.G7xn Ei|uFulgx/M4v,G[䳪6|`ÓW9Ioeu#м+ube/DEQ$h|S=봞Rm񤷖Sm;D^&@߾T!-nZNZNmmֽæ_ϮA{le@ieٗhlgs_];3lF(rz$.Sӭϲf?7ZŤd.1n2=I%_:jS(P # zv#W{Cj.I*!UTgV-uTQAo `|V'hbNFӊelrWj6w:l%2,G$+. d]gn 34!S=W (Y==Iۏvs9@J<ı듒z;սbi¨)W!v.zu"J#8[9sg4.pBkprqzcq;Q99:P"sMĜ/}1[66enټÝc-$1 f`U+`;Zӈ;$rF*[כ7vz4լkD3{m H}}kH9RBP?>g#%wr2: tK|}cڪ-3Ѽ8 w'@p j8C%mV`PG5oa3?X9'ɽº I*nzc<-+#)&!qVLFs8 7>Sq(F'=j U*0mݸv^NC9/ z]fV 8.r 6rڽ# L@y*'`\vuFi"Ex6\g?7ӚZ\.W ׎N:Iݜ F̾Y`FOTb$6ў݌[W@VwGʤH}&4&0¾L@d$8Շ|_/寬גg/E*rFw 8aTc8S 89]AY]6pCg$|'q)QH%Al`qq;C50 c( @?*R1lȸ VET n{NKt3gk.X7-kLʪ_}U쏪ÃXqӏZ³g$FW_#Ε>7m,z*i:xG43쭌'[cˆyp@۞PLrI<무s΢vj臹*qA^83=zA=z;v u`:sONߏ599'=8θJ0?Rۑӑ$; nn=*;}wR#e8^=`wjI}N?.i(q?^=?#>\q3:)vž0ӎxz=;fr1߿~sӾj3^jhhAzxGJLcyaAB9z~}vƍ9;arzq~Qcdp'k-ޢ_p H|f{@N@X^yJI[|6k?%Ub:'+;9R`WMǮG\Wcn m $gK.@yybn޹@W˕BRєO./Cm6@ Bv\v `ְ T+oh9f@#XFwn[G$t)}3]E۩^NN"2r3pnk_06B[8㎕ѻ #c"|唑$T# zuinflHLo v3yM" $@NHC]DQ׌#'?l⹫&ykp; (>Lc ,}~v8Y.B֪0{w; JS H/I:Rz2?+{ 2AR}2w!xқzfM1ݮ '\Q j9Ȭ>ΧAp2#>~EcOPVܟ8q H9<kt'F`=1"I#Tr^9Eyu?p;VO@31 4D;P[655ufuAʮ70dj'QiQr@V8VwInǓZHrmU&Ky >]w rȸG*T:Q.U93wU `ힽqvsX67c {/WUʦqb(>\wÊ󗉋Gއin 9>Z|##o!6 >WU^ۏ1ԷWMҪd=qZu9J#YfFȤ}typV@I<0Pn;ւ"Kdʹr"wbR@m؀i2|| ޚEԠ` ^< TX2ERI'Ԏ#}Av@Qn䁟 Tk,y*[<7`gC vCGmON[HR`O0vUv o|+T$| >V n=2SN/G2hFT- sבZ1*np]VTf}nuAietp3#3\s)}MH̀o pA$j8Vx${+qq 9@k\sۦ:891B> 2Gv=?^3Iqn\zM-EАpCcw͏A۟ZFs(14%bs8VUX&9'ބs]*u<ʺBJ572JNܬlǡM^vo[ 5!EUd6r7'o'}kJ#hq󎆺ȆrѰgw1NCd֪;X*+emϝ_J HW 2%'zڎ73D ˂HiHv1pA ?)8d Dgl",і]P$P?=+tA)qcP$<'8S.wv{X!TxkI2yaf:g޾E-aO+ih57&"U߂OZ+*?\IF,C _wPDj:`~Uԗ2e][s³ptkEK.[˞WIe,aćg?2 _J͐~PF. 9`Tt pkzעM2>Lzss8ǹ~ld pxhd@0>^C218=z/N Mn9w =$@?|slT-6wd Mu\%1QT^BX*e 8 |A⣨ 猏Xm3+pŸ<퍽"](Fez9qJ͟-TmH97m"< ߀ zUMsDdB *8Tʩ8C d]H-g?|:zc=?*t=Ur|huF pѪnRKvDL)<*Ls?ȋ^Dˇ6w)a9Epںkr i1,I_zj&tvy<G_^s^ܸ*;Kc-+=}d3ʁg?0zu |vFN}8?;K\dceזxKYeV6 98xt%].oӈ>ocZT`z0gOP\My\3 BFԎ0 }:֟YuKGPr'j q֫J 8rNQ{Z#5(~@PN[n[z0qYJ:W,3/B 6+ c"J$ a${kCr.qNqҫ͐9A >/˒ŊYT`O=e69{zVohE8'ٶU7m pwprAzuZC ُ}[Q Clz0'Rضk Lzddw݉8Rh,N3[.҂{; q9ʮ>n8gwn?qbhEg~<ZPeUH˂2J{yjW*vHnC 9=s=ar6WzԹ"pԌY ;xR޽W+g>p&m>R(U.3'cN-CJ$Q'&R,[N`{3 _/);ۣ2zpkР'+v0XG/ zpzW^\eAs!fiKa ݟƽL5;jxgwd΄Ikk dmV, fʏ-Զ2ָ뇎YpCkZ_A*\42@9(|RsQ3'$+HGO!=Kd'ڥtg"8pW[VަP#b(f5i>U'9b9{Sf>͹1ؤaۦֳ% Gxc{}j)G6tPĈdysGn-!xc6_pc۟Z=4teKNިNO"cfW= [_h'=k)zZ *BL1 7Luuu Lmmh(G׃קJ⪭TcCŋE1QBHUHYA85SlSnpOާ/{5Eܽ ̩`d%2F;UrpXg9$F8'>]ySބ]Ba#l7A3CB1x \N7|唠p2B#Tv/6sr\G QI.~*냜ڸF؈NûOO#p{pLHl 0ӑ(H0F$G$&NUW[i6rJnم$y.9RCD J a!{d:~V۴$OF9 {!ܧ8h*؟QV)s;%6 (zw59Dq$r.:Tc1 d@U=ɱ.~O^(ًjB=I1U.Ld.3tcQsOgYd.w} 7 T Q991ry& 0d_$u _2X~fS|RۻiS>{ujHQo!7aX7@@{u9DD|pUc@6ZT񍠁2C9q+Dv8cm8#>a5],BN}]{~՛#+A1߷'5++9${psUy_Pterh/+뎵RDUMszt3)~[T;r g9=T$p_~;VNToD|g~y+uIjk6s 9gR:3X;4z]̒B%Ln̑2~CT#`ڬS9_:=ՙ؝]6 #XdHx xsP[YaJdFx&MlJ(ǘw=Ocl/bم;˴,܆rV-n? Y-MO!ocY2QCx Ir ;p`y)in7_#?%7+嫈UrM.ՊHbxbZsJ D\ .qԮ;*'@&L8q%A^.87<BqچIyÐ9\gz=GҦV8)0CNs4GpO;s'XY W%|l=Mq.ޡOszlc̫{)sB6R[qӁ۞ǶiV9Cgh|ǶqtUNJ1x>o )9᳌#6QebX|F3C=X9'9=1QZ!f.T`V={~5XFI ֡HfY0 }O=4:rQ`uL(ZEӨ$TR} [=FOgj95P-N=9UnfʐOس/B=pk So(4f,xE0{ZBeN:= _ּ\N7;|{ )+v{ Z*x$SuǽY+GQ3ۦמ遃=.nӧ=}r?GnS}79ܖ<`1M5R3QZ:j o,5MKwGFh7y <cu95zfs6K*Qڤ#/C24>vʍn})g8s. YYD5m"C!?fȇs|7n8 W (ն[^pUs}'aHr1d9Pݟao-ӹPq@8̷N).^;[h^kؤ0˒Ӟ3^x:O2uA}3|mL>sְۻZTOh5 to$Mb]Y'OmKn-kHgb@IdQxɮGۓlaܘ2~-pzk&^# y$PZ~~c#D/U fdT}s~g燌[_-VZ5rlyĨpp5 2 xB=?ֹ+IbovY䀬>P=}SPn;HnJ }֬.SZlnqPG?CN9OӾmGx۾3>Q{䞣N'{7 9܌8'N;SlvC) 9 cp:Xpzgc֤v>Ќ0A(#ew߸@28sz/^Gң~*tXEϷ󡡀~88x9'I=j3 F `8q߮ޕ7=y\qg3¥^* 445bv[gŋ۟jچ8#nuUT q! r)LMK 7*# ?VLcv湭{'aBq͒;28}d$҄tmC'z \z׹Vb\ OF ҕEh?B+)wW;yd^zv] ?rkIPM*8 )A*ŻY:<`=;Ux=}=O-;Cӏ>\OU_OĥPA9tDFy3{dt9N?_Y8oƫNVc?S_שhF~C**ݳ:g?a:d\ۯ^-l :~t UmtI]s@FEd`ӆ/l0a\O ]'#5*w=Xc_~(1_pGUXcc־V^Q}yGcwc=֮}3$d=CM=Tgr1׿֝n:aWzk^Vb6~_b0ZSpg=I'? WN/C̣x3ɮee$|tTMҐpH9N*yf^~HLCIz2d3 r(;9L$KnP7k#S]vϿU$ldm$Q^Z$d̷1e<?CX2ߖ,=Dž?CZ=Nzæz|v.pLAg'u˩eH\aw I=9l`0p1$@$M}Hqӝnxȥ~[w^ 10P( Ằ@8W in r$ ^wTPmr r(d &1Ť tHlf^Cwkɞ)vNѽru1բeav".8^J╌qeVi.eb?̖}i𧛭neQޣ`6N܃ȯJgVZk[RUcr@Vdkv#]v jXOs%–<1ט=?hWep1:V{sbc w3Q3H=Me-edf;x7^9Cڮyo1C lJtӚҖ3>ZR}]Ђ;Azסu7EXm@,XGK?8˚&y 37RxR{q޹EH>xtrk{Z8]w8 fFc%Sn''&N=WkϠ8o.m%G?">OUXwt#&Xoc-;W3ꎎ[jD0:|?8V=\$jWm LqA2 01sg!L)9ojqC$8Y4!;I9'S4Y$Ey"Z]\ʓۨF [d2gp zޠlSX;`+# Xtb8D[bEhzdxO[ lyu/pqF)HnjF4S8q[Vt߁śRKc乊3zzU='FJ: d*yQtɞ _2|##p:`m5Pt,YQ+s Re3л]3g6p$61FS `RNzz}써E܀KwہQԏ\:{fp}'5?]xߏ=k]? K{MN_./.lE${Np2sҶA<_86J9Etw_;}\)`F2)%?t.=~p9+?@D~Bpi?jAj;O<#$ -9x͸ 9|IuySR{sn;晸9ϭ54Bqߥ.=2zJ: ]VM4$r@? ^/ n;YW>ח^grL w9|oxxږl/oF!wqPUsָä$awn`1߃_IBb%'L]]ef~csQ,r IܭHwpb=롘t48llg= sq<)2ALg݀w4ط|+OқC1`qz}H yR0C~V9O8-n¶Q^^ Vv3dtD@,::uo={cޙ A9hc&Ӓ {0JwwjɹZDDr庅E\y,Tnִ3+py>pm^rHr~]#~&m_ЃiW\VQ27 ʎpH>+nqV1qssj˅@q tS'4 nBxⲤ9o \|NG5"f9R3N;\Uuu~3=eOOHS|ŗvc bP«8h$aݼd~y8 nzgN*Mvu^ %F3+ߤxlo[IJGo! J:ڳ/$D$V ! =RXu`Hr]T@W':֑A$aN98<ղJ3;ӷBAܬsu8*dPFK7(ԁ!_,"M $נ'ޫMx'qq"Й,-6 }Y35P39r0A :q+ t3I-D)d 1>"Prw`g;=M.PͷoU@Tt)n~'if"I2G$#)K".0lU2 y #v 841 4^\E`+Wq4}}Jyds`H~w+ӥ^Uh[feP|UH7,FJ'p*SiI\E]F~1 OPL s*{yGd*`:t_?:GtT7 l áx'[7s#2_ 89^9p OZcթ>y^[oY A>wq]nxu_ 8Wvc!>]|Ϯ--,s!k#E~iRPi٣XUƤd[% ,{XFGq,LbY/1) e{zgvY{>N1? e\ ێ8;t2Ӫ-#1/gkݩۅKjtwr vû{Ȯ~IU.2S~a'ާE3.kͮwre=N<{Ef|0X|쌩ٸ Tx*(h 2ـT9#e;tLcvl?$mSרIԻ;!OEKipoʌd}MG# H$r퓌utSGm1l*,ppޜKy22n!rۘR)qr#/B)+1Bd~De 7] d =u$|Ux6I.>l ?Y3w_!_gѵ$D;lNX| =+Kw`Tc#pi"CA'~5*2>bG MDrڢH"fp*[|29+_ʨZ*my|u_|ӱl9ϠF3bF_0AgyIWgwF6onW+/#Udp Pws&+u:鴝0 cBeH;FGQk@$AW#o #W`߷)boZP蝗sNц1xj|^N$/\SQR\ғMɏF$~f ᔓ+7,Iı]x>døpT$z_Ӎ%9 2psM;1g t~5J{m77Jpr> ܗ'mG!qןN)~e@1ԅ?+g!00=OyvyGԊ+~$I@D0'x<8V3pk倾1?LTtQiؓEĉEO8w9WK-7ð[EZĶ]XwĒFId? Ys8$ztet9~}Tg*Vrv0rF9+Us;bAeQ]ͥrʾr:qֽ 2q&[=H8]0*8׭h"GP cW\ʏ˝W(p'%WlFsʌ?¸vdՎĜ.Nx 28Welc vR_c~p*g-ET IrMB}S҄eSRO\L'@iE@=xM]_'915&Iyp-N/ͣ<Gn=1U۸@G>8dg֬JT 2u+0@䂻I<ʸ;a섆\t<󞟭C,E.]>orn=Cb{y>P݈uāp=[|e_3Wq=QŹ ߧZBZ$5 'SxP c${u;4 ܣWfr`A`W ݊@TFsК>|wrH&(2.Hu89d#w#dX,8<==zzUϕAqߌgZ"I蒿a^rFx;# d`!{BOab*]f#kR妛Z9Օg9:F\t$ zs.3?/L<JI}̹d@Fb\r;c4m2ѼG'# Xv$ӰeYz9L/<9|zqSEmUr[o ZYi~J#>G$dy "2KE=q y\FsՆsӟ»pg $`$9dBtl՗*h撏byYm84KIy+ 0dGnd ^"M2$ʩ'9xQ,}r o{ܟZoy Lq<*•lÆqϭ+r%G`=8n&M`|ٷh1ێ*%r6bF*;O@I2ISU2WW6'r3ߚq) hP.AIeN1V 2mHpcFEUf*ClT9("P`XNw=$T]g㿾3ȧ*X|dqT3q۔}3P)3-# $n 1L n 8GMuYs)"XqsҴLYՙж!o!)<`~X$8֨HU^8''Gpxѣcmn-ߩ?/׭4!v1ErIv=ӵD\p0:so@Yy8'O8*X_%IWo/ہp0z"D2!=`j̪ybBV~>ⓕ&7yd9(n@>\>0U'<sI] m$JAg\`p|u8[v gM휃[ix:ظS7(;h;+] T.؁3zF?aW;cy8w~T)?J|qSOU8,O*dG58S ws$~aGL`qV$ r;g=T$b|cQTs>wqv'A8qR=2{3Asတ81q1~pH#'>#ۃX})vr| YSNun#B.$q,q_z# !M.O_%#Y;H,r+)MmSkNւ'rwR H,s21> [+1H 1}AϧQ]БsQr2ӥVsHkJF~L&S4 R^(m@$p8>p3tsZ$sUz/,H+qṟLέgV^IHD\أj!nYBR؏2,:0\qSՇH𤀓ʕNCR++|>]tkؓH `~+)[IL pF;z0kDDc p;w:eY#H#~1-pTnOLY;cIӐ2u#Uo # .]Ybu-u2lF4yR1^xpYm尖E,e{=ToĬ6.pe()&*v#-)orW0Ү(3Erykt'{}.mϮ1+JQʣ~zqW]$a `jzt:=휸IU"T|/qˎǚp\O Z:2ZnGrYnȬPO_ZupEPa :g 5+[Ӗ*+eA^ҴkO8mftk=V!p?Jde$jöe'Tv>ئ00x^df g<wWVvZ\O܍޶8ٜ6I lem9*Yb }YReʪ]NDeO0 :x#sw#g 3ᯇ+j"b6vd=kxB-o-]H;Enͫi{DIfcAi5̘aDq# *~{;m.ˆ)40J'ϴ=_o _"pZ׊ѤI ԏn2DR3 8ֵ9jmhn7džDO2NNG/HOSzjo'񇌞u+xc$iLVdgH v7ci*NlWY#gumz*Ge>H4Srw h;kP/s8 apFzqnyg9Qܓ?:DW,<}>bښ>LGq`(tp?g=;$6<%v@r[~Pղ?/P2g$ޚ s.Aenu8$9ޤmI 1!\:sX׷,Mno$,6yNFx-Nn? L|zO:RIDqqVK1Xc$ǥyDvHӍr#՛EJe~Q630qXɳ#vOVckCʠ0n?4nr9 ë3ӎvrY}WG5G+X/ Ը G_n}%RwI\R6Þ2x79=#iT"; < ⠀ơ{!O*+h0F|8$U✚_υVv]^} wڲ}QaB>b]ϴ`6OO{wzҋ¬ -6 [j \t׽sZxO4Q,#e,q5i}[rT2IU,Ѿ,5вKqY?s}nb=Oʂ+눤`DSʭ8u&txMTdy9 vWl]SŜy*8ˣv#Ʀ#Rb HR˝It[{p+4dLfh5Csq/q)du³3/n[8c{wg\_{~yuac,29܊?ZD*a,@ҹhf# ͝n@&BͱrH󍭒y gz/{o"+ӖBt(3ޭ5C+v9 orzjo\gA0z昋a>%^@YC3 w m`<RX|P~ Amԁ$nl!r+:f#Y0cFѕ,I8-'{6y!5;ͱ #סZ/L_ica7r'+9RM4J#IexPL0~+{c?!Pv1Oz?ĂF˿)9T  9;IpOaLe\c.>zOu|1GjGrW.Yr~R9}kF2#frIq]x)C=WȨ2 tJcNҝP +8'#"ztV0GVf`p,}1=EhĹ8l;:eN m9秽eyTA"7qI fS;dnۿ@;F_V$c"超ŶYゼ;!hmLf?&!OAZ?Uv0Td?\=(X z*6o\{}G;c;uҭa.Ge$ӯ>Rdh5xh)\F"`;IAkwt$7!(;<4,U69dg#v#'YĀp <v'ִ,hX ;PH-5+;@Tљ#sxLP{瘼2q2 Ƣnt4Ijw.m e,rVAӏʷ+KvFј2 r8r==n*􏇼/c}wk|Ơ;e c=Axm7^(ﬤdЮ$7%  d$u7ZZ]MiyNN)+}C h-\ e^9W0@91ZII?Ll-M|3~C#zI08u=A'ڥ>1Z'hP;>ޞ¬@ {?ε;=F6O^ZQ0yr@BL&;D}<`4KI#Ws9SPpt汦}1qJv:aSUX<u8xy9+Ν-v쌴$(_NiN8?՗'|c cߌg~AzR?)-㎆$'OPx*971?p9F{#\mss,Ha3cvrF=}>w@e]{gM2S`r}I 27T3qr0CV;(yS+g79GWN QJIE[;x,o 2Glt>_R򖧝Ot9 };q8Aߜ}g#>:vxsԈF`ų#m!}OQ( '֫g< gzzS=ˑ2nHph(UX 6X9!yj&&0I8>9cJ׿JG;H 6sۮOJ!FH@U#ߒǷNU"ܕ.7K)ᶨ C2O EWmgsp<WvVEZ|Dg9@3qɮ orb7Fۗ$cMSb@,sǡ#;b )$OWlI!L2={uR,|ǷaOSOx!~C ;Wa@xPS䌞E+:pzt!v;}qI&rq|@'Z)[R |ܶwdnrߧQTqq [ܿˆ`B ZǘdH|6p SF>iZ-[\|F  XJٺNvȢ R.1ҽ/uz;wmnd¼蛆>]b 3d*)k!bK4, HXI+Iy!ߺA=Hjӳ倍ZCؒ;qǓW.aCrFz{Jb JMXgB:y#E(d#2 NkNm.MHic#`z@#6#a3P3o5 dd`8`(OoM~Pt~>#$tzӒG*CQ$|)el9Q$\c|NޭAzmu5F$r+ c` /@}{Jҋ<NfmͲF<`N1Tw'+>KKtTmF:x=k˩;;I. : $.T|<+-nqbFU-rl4'/ULw\ ;Idぎڢ2iYBW'=S]bT\wPO;5-˰GqF?v!Qfwnb`$`GJ$Hl8w?yUGnSCRS"0sJ%ieb6l`2$=jRNF9Ȥfp̹C.C|pYzZڷbFIC OAțSڄ"3*;x9z`o(ZHP1޺'ٙS֥PYE?6 Ny{K7s_M^yiAynrHNPqs1ӿLW2Z0ۂۜ^0v2_9oQ?yz'sYw)rC8=jCckҔUԫ9>#nZ&YrIV~QǙCnJ?/bR#ц!W_3/,A ߨWk1pps:~5Q&SK.NҨ8 VcgkI!/d@'ױ%= T@r 1tH!qe~{oK  &yl񞇚4yJzcoso19)}l{Gc9;⾍4`O\mjOľzQTcj $=:Fy׭s} dppr779;W@qfEA2?![SVO79{举im $N폥Q1P(;~\N}nYVFd3 \Fs܁!P =d6g-$q8($۸ }O~Aړ"弶ϓF1[Ai"D@ǖÍ'elLJ0U$9HԔNJC` .yb 9es:)7NFC6# snxǵf`[,@XJ <,Rۏl(g=>_Se?uIc OkH+|?G<FzG^|}3 t3nͪ 9N2b02y }}Ctx-]Xy@x랇5%2o;#å_PJ0|#~ߙ!p9=qڕT󟗠*{n?w?,ǎCch&G;]Aʀ:ӓG1YTv99CL\+I##dzm(88##RBC!bwS*z*7`p9ցy#8n?Qޘ)\ \18\T >ò0YW9tWI^_2<Ix{7ϠyG3);\s}kD+HnQ̘;d pFq]aaq̎^<-zzfUn-E8^xz˅(Ǧ=Mtөedy} I0Vϔ=Irrkz]#޺>3A KHgXvnx8=skS bݢ 8Vo_5[.Yw-K`ʊ=^WsԲ^#o}6*Y:('<<܇ZT>{l< zWw~p2qW֧Iєiy+"n  eM$$rATIhnݝ9)2#\z[nUJnA9+X{Tc&]&qʫ*c,G=)o0cU'G">̥uj nhx,9ׯj/?9V99 W%-f*\ٽ˴cȪ>qbG8 @㡪~ʬy92ΣnQZl|t4bM4یN+yGWY#a#B=x[bߒYFK8 cy95b҅ڪp,s*ܳ'8TI*|)987èBw XmV݁g''8.&/K~ޔIY:C $9nknK9bO.z­T{m<]ˀ5'9ץHAp 򍸁zk[|.{Zo*GN0K ۹=c_$2F6yCˎ+ jNjȭk1] ] |Z}hI#;O.*[B0]'p@==*^|hd>EKFx9^8 @AZ+ +ˁ߯qMjM\5Vs}?j֎"Y>e;I{` V35!け0$)uko` #-3sֳh$amVT |ctD1{߹s98 8qu֋1pzQ61$ {z^_q Gun@ǧԞ cN61sxVI9B9?0l)$8zօtx9ڑxʒTg?ƨa9NprT:C. (8 0:A+6d$*Zlg2' 뷐F 0 _==Ս9!S<ךR:2 >].H9b^ڙmz 'L`?/#9^ Xd;.2sSJF U[SF #zi 0xp x=~^7S *r mރvA$R~F <@8=j 8# 8Z62`MgMn#;zfG5̾Zg8?.p;lZ•v*Tp[ׯe瑓nO=5X|.})T[hNvcg8sϥA*E qI=0=qҵT1!s{c<-nf#+)3V9x{g~l(pH A$B68=zMa[y R%/r9܃ޥm 84*J ))yP}[9PXArpTܜuⴻ3le0F6Ɨ:CHѓ//svJppKY95ѦcsyzW5LL!駂74гrpJ=qN{®FHy*GG-z]= `pF>}x#2yrGK,Is5"p %z$֭4NI\㞙;m/{(c<`gA}+IlBw9ƩrmDl=v >qm }qW?=lXˀ2G=={T-m w;RRH@\dG2;pP9AֱnLx8>(Qq4X\w#?J=1r?㊴=3H5XPrPzta/CzH6N08׃S@:M9ig3]Gq<~^Ӧ0{c) i=R{ t'!}I={*p3A8ڇwr?ʭ w^O;C&=:GZ]^8'ZI3z{cQt Ldʇ#߸uk!W=8秭mKuM) |e(c A.<-< 2]۹n_SI+2*Ξ2=fZ!ɝƻ)|? v̷%[k3$3#=4]1XcBZnY䁍Cma*8Wts[o'JTգ/-oje4fӷV|3^ F?N+,=>_YىY/og(I%@'~V(u{ЍHR5;5baW27xf9`TyH( Lb͙JiGPK84k%$K̶s ȌCg;Cc^Kbt1}[ ֫MWvf]ñjp5+?i #2~W3ֹm;@U}͵2ȩn ՙBG{r%]]מ4{``"laGj:-[E @ q:V[wK*[ۆTK3p_< նa-dԦH`[kl(hz:gFK>Ufˑ3+m{=p1D>e6kbd8FR3ֈc~-ȳU`eBT ;柧$;P?ƣ'H2W88dTteg,R+9@\ߒ{7w?H GI >ib:D\B EJ `/sкy"w>`W1:ԏY ǿ=9ᔐHݟs%X4i&o p]ʹd&Xw8{x+]BϽȁKmx89VOUu.۫N*vוt8$|n5:ecAS1vmkk?pq'ך+߷sv..l^FPNͤ {; YΰF&F 1lN9=+Zj!ٝlc Z('TDdۭb,vnX1"?{+ WjVJǟ2w5lj%s@e=Ƭւd{X1Lgz=k3JiCq1Ֆާk~agڑ|܇(È# KJ!A'099^M1?@@3H8 N88׵=AO̓6W 0&AG=}psqZpx$` h(-s}OZxI'IxAT0#{0GVsѿTpɑ8=?l̖g9^?ozAVx\0+%[ۜ'ӚrYzuҚ-䜓n3I'8PJ`tk˟TY9FW drzy=Rro\3 \{f$~8?W!v2YqԀ9Ns'jVqǸE98'~J/.$sF{8kdc3{uL>ЎzcW<Qz]E'scJ/ѭۉ.;n89#+tQccgosǽR/\I/$\{mrGQ݂2ѾEp>zӚiȓ3yr>\cG#ҝ9A uObEpl8=;69\ŰQLK;H¾cq2x5U~ cPh#FyICs[\4FHסK}> ,_-\͓߻oQY%w.Yc}'N0K4*}CÕA)+IT+i!"9Yv e9{U%y3fԭeB:m#j fL,2O(OHzһ>z|͏ GZQ3]^<|˻8'5(}.Ho<oيwW3ʤ;]IvOrs_5'ɟMGd@s#>c{WCU`pg<.NqZv2Ľ `;n$#n8B\, w7 r8ғw%e(lr8*ÜuJ`;R>޸"0r@Or1ޤߣ6,!g T aǡ⶜.0Of L\z{V AyvXc8oF:֝=kٌ#d{[n7&WڡIȣ$)9Rvci"[6m'b7aWRޝ zUcC6&A'== $4xǜF$ܛ|w ͞|ӽTp=p/` eo2R9Z1s&гu8@o'UḊxo&L79\3.Vg/\'P mlֲ,lK&&fdO6^.onw7.͕_#r0ym.XRܭqCZy [8#*;yJw!rtUduPK$rs})Bo 68{ƙpmd[1Or{f 3@gDe#:ׄX&d|Ægn 9_;\n hdY3+:\O$"%܁`yJ⾥u=;>=Kxf@ :ƴMJOmZYUc;&?.O9=o_z8j+.Gx2_ 7 EqIm O9WjO <JLU}>*{?A5,=;kh~Gr{QӸԎ ڰ[ZйzsSg?p=+KKCF380$}:Eqd=g{zV\`z7S]tXN\d@O-#lVL7`9}A== ]SB9=y#ڹy~s˜6Wl?8<=B)_&YwQ r?Ƹ;, c'y#kKRF. ~,6sއOaSxjώ=29=*+\w^g;@bO"J@.9۾>jg9e'j+?e\­93{=>,A5cv. }㸜uU[R[gV6 d ?>1h‰<~s)9iKB tV 9'61Yw]G7#C| Ԓڸ!C:5$f6?u sҙ%X6sN猃d;so»~V sǜ[AVz~[԰8@w~\c9U&+;F0+s/ɴt8ٰI]SyyI^ϡN _'{)cq{u$WQ!{}}xN GSfdCcTtFFANJU9<~c TUXxr,뎘gNnW"{XP[*+mWjʪpT(ncH r# H#\m-{ EfHl뼟M0xKpH}*WWI)s.2^8Awؑb95c3@(9+圀=n*qpv6Tc?.ぞ*֥'EӨ FUeqYC+x=vq)H$oFx/@peF@ rqK6ěX8ˍxu5FH )P@,KTtz \[zZ%*+#=hxYV^gg߅!0`xzj:8*IO'#89+Ě3R(,jB#h<;c5rXۈH=xQbkQ7*Ѳr[WiPւprUBeΘKDoϸH۰q^8?OVIVoBbFX-=Es>f]v!mޅJŶe⟴ݶܝŀ`IUWo=*ZA,G d=ֹ 02(޿&VL௟n fa8 ,؎8nghw(A~-%׳c^(Å.<`lAvG|5IfEu**o-8#R'Uv]Qrs̈X ר 'rHp.3f9S0\Hb?x`9JXR-Fv}sq}=f #Vd fI>#nWʂOSϨ=yP.b)ݴ|q8y7Dp X݀0c{[TFwѷv!q7\ik@6ݤSv 5#H $iqQr=z-cs9RF5U~'*LUXЯ#VB~n\뚴hpT9 :1lJ!p>-L` 0UqI㹫DcXpzqX%㭆45ŒFvC;N1֚|Q$drJrw6N]o+e׌#u&'Iݞ7t븁ێzWu7Bǎq%_YTF1g^.T>f*j " zɹL2{U+en[+:N+/SۥZh9nK8#qOvH=QU+ w|E kQSP8#\lxqFr>5  j` ʠ` QX͎y /_Ey&@~f$~Cg 0lpLJ?)@0 휃לR䡗 S/qB%F{RNIee;q*.d6/U,8qǿ\dRyV0۷#'NBɼcUPG#NqSp]d 1F*OB:g6vڡ듒ßTJHHGadۅ'$>Z˙_Ϡ'svXQWiwbp5WʀHjr?7/VqLˇ\._vq]FS +̭]Ŋm;B]v %͝=\9lpr9\MdMvmİF02:+Kt3[6i*rw!I y ϸ\:˜OcBZҊ0pw $if4nU<ߒ:Nxǥ)m~g{kjXܷ%}xR{ջ+d`)FqN)<&5B쬤2!x=3NO5H$ely=+Qvשfu}l}X"W v߾3^ )޿)3-ۚnݏ{<}K+.J>§c:34qb ']`: ''Ӛ;BOj[x4Ι;dUNqC>"I,BBK)զtB##.FX``3o495Ї+哓9G^A\p -ҺhϚq8.6zaڬyF(0HFݎFq~#溬dDrQ'4rܹ#vOC#CZc'.eB{?g7^]3H܌SQMv=lg#}k[`39z)ZvJ3D[!_x,uc'8#v-CcɌ|ɭQ0-lGR pC H؆O>H?h\l`I7G^pP1[hp Ӹ yx;H.yܸ8=(BfFmJ`p~܎x~"ï¦\c|VݾhlD%`p;@3Ǩ+~cs$`{s nGBpctNX6Ns\r1dIn aj©#ބUϧI 1 FxqSBq@$pJƏǮwȡ 2Aĩ8S8^q08ذO@O>5!L6(;CI)y#GqTb3W o2 JL*]~bNs^ӕ rI)Q3)$X;u\~ n*sg>/>#|`A`A<Y|h*w9:۹ZI)c71k#$ӓzl?0pRtq&'T1rk|j߉$rCcj6 pϓ/^G|ZEjB; ' '3ۯ^Y*l 0P0CzCZ+#En*'jld?#3J੷1ٱ?1TC̖Qɓw,I8ֺQg+xzNo{qsNoBoH(VXLwllSmw;[HzG I,tja&bvh5ʬ-mF.yڀY%@Uc9RFn"Gy{sՀ/c^0k);4Cp^vVcOQ@VL>bw9>{ Ƥ*͜lpK\@ͽoˀ>c 'ڲgKl|0ox8=ϰ&6Y@۰.sk{ @]nbd_}k# >c=k%u0ŃduE8Nsj ˞z{VI4t FϪg)fC!<܀0W1 MNaC!CuصA! FzJl,W@۰=1} rjSNߡه5dGN0:˖<0ZM-!_fX^YZj4ka*98㝽kJc?^]|FJvO~^1_Th+gm-Nl19m?*vGeƷ+,Dm;po=:e}$aa}B[FaĨvGQޟ!ě (݃kAU jx*;~r1p:U~K|dʼm98QԓJId)d^PCq u]h!Qpǜ=+*8`8Pņr lX3˷h %BGAӌp+]^ݿ{V12so+cҽoEPF36BvugR?N{JsMBgcv̲4RuF@q>x_Z ]IM:c֖|veh،yy?Q^9_m+lFzgz&#)#y=q)gv8؂ /j珓> }{+ϚoMQ_" n߉ QX 85;vǦz1o,D&Xd$}wg*^ޑ6Ldpñv{ڊ $G$ƒd1;*Ĥ-"FCb@@T'ϨIhd,*HfŘw =U#~R&Q?xjgUܥ6 ?cӗ?x0 2>^R,I^LŔ8xcPR;|Iޣ vQXFH<( nOđ҄ .y )EXD<$О<׭UYy%Fgga(S rr00Iўz1?6#  z%˴.0PO^~1XaڣbI$ Rg # Cr⤰8 Ad` FI'ժ$%OH. ) Qº3D.(F2{34J͜ FS> =Bv=0qKy  su97)\Gxh`FT޼s94!Y6U'@*}s[\I s= +9ШMѷmvN~ǹI ˴.Hy`9?UggBIa|)تt9n0#ǯ~ X|cOp:秧=jD?%L'FqmC{g;+񴪌u,A$E9*cvKnPs+#%N8䕍q-tNЛjh}6 Ã$kY^TOtg}UF*P|ג0FN ( Ȼ>*@ [#wǽ\O 9H!%Âr#zͿt:JbvF8POcLWVT8l4FEbUb?<huO.A#`0d89'pϿlIn1<}f*{@#>."h£nOYKt'YkFW$ c8K%9Osx=7˖ʮ1ۂ@% gIǥ_#LdA$:ּJI8k;GO AI+ۀcS?+ }3Ҕ<`ǒ9x~dJ髗%p0rA۸7iWêw@' H4M5iR?]98'φRHn8խ1``׶u:Yd5; }91cltP:qӚm#r[^_@ Tcjuy,fnZ۩i4FJn1*G*w};яCbHFW8܏HE3;^=l[mKlip y `Z4v=>f%LtjuOP UQDa{tj/t}+'+7@sؐ2p0sڜ~ɕ>?4c9CZIБ&F=RU?S!pCqFN֧ {p@= O|0?co랝JW(u=9WPO.Kk1G@y#5`u<Z12\˨_ý(БӜߚlA(vLqy<:PgǥYp=WPN"xJxu'=GU4f6xN+q^"#ǾOhCvy9xaקօ52=ӎMcͳr$]߭sNwgd⥁ݴFG|.Ťkkѷfyqyw.R^s ~hMĺ4KHc+OX|އһBOn^Bʫ;'_`ֶW>3ںoT/<:J[]$VKt2`)%G8ukZ546wL6&9IiU]tٞE޽kP6"%WG aAPH=k[?r֖('{->W&l;7!HF3Z']|yF6Moij+kAnﭦ'xPkۺwY ]_޾R&ݞV߸yK˫j_x_5ZPviB$rl~l`sT4m;Zصmdkm",e@~ba;z /wONXFMIy'Vm`sbKw)kuHeub[9i4{RW]&kCiw QXf~Wq y<;o ɰ7ϼ&:v5*mI&bso.5%x㳻GU[06P@BzfmSOK~FWV}O'PA'`r֤ 灎r U['؃q;8~Nd;77N6cTw2gtcr)xZD3uv39F B!II *#%9#C}i>aG0ygo'V@;`u"J+"9I):5HDee@U\2esz`KmR`V_dZD`,pX&K1һ(-aumeRpin|ōePċ Tjm6 NVy=ĆZG2lxzOE涋m)s_) J3(X60?2 EdI-ʆ✖Cm}3V~0Kivq &5Ԥ~΄Enry=k fEm)lHK?'q^zt>cUE A'ML r8^[MqivWN N5Qo+r[䃍i+wޝt/- ,QJ ֕|"εXt䗢g8*QԢϘ>-xb{k?3-[R7bI0v9oC_>/4tžK;e:Q<"rt jeWXTs;5guuocW~颷ӭ V=6mŴ ^psƴ1ض$IbyTH([ r3qɹSתvkmQKMWklnm*;Yл˳iy$gw׾*廎Y#vE\>FaO3XE{#73Lj4:[rs_&vR.ι>GJ˿k:dO=,efV<7iݬ^.E6e}$®Y[+QfqIZiGOcZKaksjSߵ͗WN-4y"OӮrIKܳ3:{kF/4X$ [|˿qrBא*~7>ZE5ˣoQ .>jSpnåC\ {tmY6<#ӊt8qky3n`ha>\\uq0~%ۭ>Y|՜̞)ֵkIGoih$6Lt(W9 %ͮ%$(os݌ UwV[=hЅe?x`㓎3x$>_ߧD}@8crF>g#q Ґ E:=1ہڟ9=UiAvhn}ngc>Jc',@Mn<<T(!Ou#Ǐ·DjNN>bKduG^iP;?H͵w;q7f:U gnzq׃W"3nv]Y(@ p}y~?uj?Spסu[c[ aWR;r1^OZVϠqXwspGEr Q`E2gT !@$sT G>:(k[ʱ$y#;O" q@=Dn8掠wiܭw9: w>t;-Vۂ~l$}ka"88X/ޙ GaߡYFy3Ҽ\dܛab\ӏZa=O^TSt vws֦$oZ"?G>Ǩ>=3ǭ6Rm=8_}01wGUcjǐd8OZ=nIN9`q=MzlwωԤ]NN9(~=̯mwh2)Us>n^:p^}5SpW+(Bw2T;z. @' F\p}^>NR~eeRȈ?7Nx>Ww 3'Vi؝WhydwiBp2`NNxcNzq.1'!gf>8 8?30+}z ϸ"(^XzaFGYޜD}uc[Y75]dBntt7wKtES~6cPsq޼DS[k}m5 u:׊^-vEkk"&8iqzlsrdžo\%՝wDq=$18Q3H)TU6y۷jݝ Z>_&evM )v峍$\<9s$ܱ"4,\;Zҕcg UURۜģ89Ko$E8`&Y~Ek8ynhA%} DʸiYy;qWݜAT,lL<(Y~_njdK1媚:[͞ma] hwM7q-Zu2*1~A B9d,q@{rx_>Ԕ_Wm7g/7sOݾGvִg?&-!glFQ>Kcnbp軷1SrAl( t=MoR[ u*2WqqR6O' p? hzGnNF$1ڤ6)Qo"i`!R$|B1һsMPKxoyIcADԣ&8{mm4"Y$ag"8XIs]&yqgp̰ͱY+^sוg]-)m23SQ 270 mݏ\/[\ H6` mBmc1Oj\fS~ `cxi-Vnw*B!~\$q]c4s -Tb@u=pzU,frc' kjgo.ہ$c \\0].@ 8IG_{ ?X2,ـ-!Uwp@*:߱b@D۟;\dI8ڑw~UaԝFy7ZܵenA}8;]9皆]쌩Fۆ^K.^߻UFx8$Ԝc #=n(}=(]\p,G!'9'47 &X?)?sAPi#vp%@ '~77.2DǝWqlto"HJᙶH ;u<2O-BPI$r2래/}wqD|i {sMKkzʉp[hF''{tQgq$sp) 2s?LҮ͕8Y|o 0WU) w5B>h唯4 <\,<8Rlkc9RCs@#^& pr;sJڵ"[bNoJemƒ2zp:S3瞝v٩4O[B3Ru:~OҴh?_Oo_&8}ИH=O^+>l7_Rh+Om| >ںԳG4r{y{Z.#<(*qIsׯj58/eHn8܇usژ;x8e / 3NN;g#Ρ9ΦW%z#G~s$zpx fߜ7ggo:Ը =)u|u)l4.x3Qz{|#2Q6s S`qIĤJy>QOV>rA@'Շ5_J p}\q}l|1jMv #8*3>hl![3HA#תĨh@^f;R4acSǹ)qnO>^A#mnzT [L`y#1OI`8- /iwg9z(cޫp!1F"A+|{`g4Sh.;r}A l9$r2@\*d8*c6ᑛձߌc5Ɓ'˶,NM>702*W>"$9#NzsTǍo2?KLR>l,m,Nv8Hb;B !PH 2?n{j pE1'9;ʹ"s*T==99V0,A9zr;`pqZ2"|&.YU|?>)<ς(T Aⶱwek)wQLʃsNrُɯIҐm:w=Z1gvp@* k57}UWN8?z hyՙEvI;.Y ˕f9k*3 G8Sll(6%]s3OFP9ϊ=H 2w!Nq(潇JT36Q_w5)۷apn Sv?IBnzy2D1Nq+F1ˮw(w})1F6G,Xgj qJ3ǵ!B9s8P@`tc#;J0 ==%) ?0p26kpݨ%s[a'lQb0[w,}0D{i/@%ssO\ϑ  fOʨ'?>Tm;;X񎍷x Gp{~uV3UX$~UxH(sKdSk:!%!ۏπ+ gAWa =yQRwh2` {W^!گ尌s>aںKHǙ39)#'##VV8*CdaK}܏_A^etyPl<%,{gҵm0YdS.~]y55Tg+Z#1vQRv*p: p|ΈX}S2A<ו^)l{ex/#r">#nPG :; `Uvnzzv^t  bBH.M3袐2bORG^2{Ma-R4!GV/gxx\2>#^/+xabrJDU_vnurՏ^zuQۯ cU U 3g8j{,I$|c#Zj+7pr]v)$#^{e0d-BϽtaˉ2sd 3 ~=-[/:,!P7Nx7d%ydnˡs2Tz6   ey$"$s"7go@E Qws( \8 c1d*rJk`FIrIb<~SI 6b.NU$W9'@C0fFS 90 n(pp8$Uռ<c@&#xF 1;iFh#d`8(l22C+9Vp@bob9hǷe\08=y(c*F91G TdmsWʅlm |GKxjk,{-䍊F% ȎO^2lPI`xT64zP xگc pNsy%`OEWy9(+9Ed†XՁ {q׭p,"%$Åeg8i;͜\¿@TdRf:Ӑp`jw^e['/1rFxK6{#85**:yH8ڧ=\*'!\Bx+٩>b"Qц:+5CDK+6ߙG\R 2Ѫ3;v)D$`r0#=8 sSYv\ GOʡ@4j9yYԫ7msFHC}" qS-DG\#lYI$rTt>}W;])YƟd^7l4a@BzjEeAm 3;-?jek6 rA“=:tW* #W'<8Ei?#|4}gwlL88##wY 8ݴ1 [ߩWjq4cUqq\rj F]Ж)׃y%usH䢮Y>_|r{wPdG#?'bIw*lsSNp9cJGyn. r8enʨMqy~ym7$23ZU#8 9?1P3߁z,my4w7;Z"ٞs+7N9 ($&7 \+*~ulǃLQm}m뜪 PB|s0XxZeؤl `J/% V <8H]ƙBCA u')jJgi0_#n )\p6ۃJΊqupby{֔ay%)Nɿ#ݼ+oxm8FGΧk;Hb5@ ӊ作>[QΤٝk^x{zt8ƶGN{rc8i&kCNܱAzg_'xwBX;.IaH≻Rz1å+vd'p]8$Һ]<3 g%kqt\sF(m+` 2 IߧhfytC9'uiRweKS#;k >l⼺8Ps ^z֔kK7$rFݸ׎pU8OmlFI ϠK!bXS}*:Uay$:ɮػMoÅ2x\cu!kdn|H 0HOlzU=_}6'tޕUY Fw!23ɮ{uEיY"7) l}yv@۶L(9 {+]V GTF:dֻ{I0NqR+`X# ׊+3E-8 =xNʶc3e9vPdqg8+\.,11k =4^bEWBFX>T\pJ"$x,Cck̟S39O}v7(䎣1YFO6:[qnkuo]O'`;S \~$0#ty؃AdqϞ1[w=9EsS9[;OP{7_A)W9=(# #r8h Xg~B+#!|m+wsX5{)Z½ʷw!T8swpv>Ӆ8 mߌJse-yUI (3L{pfQ  ӽG){ +1͎B'h-W#M 2v `qaUtSMuVbV䓼c%A-Z_Hˀ3X3oqsQi.( >gc883?hc(|+]t90#;B׶}0H5KCkrFr{ ~!oGB[Jʅ ;ٴ{=^)\ɑzsǭr3*diPc<~-(G?:ONW741% nPF ,2:湭r+wxrVX`؁5%oNWm\Lќ0rwB95r[U13,F@78ݾѩRrZМS4rȒJKL7)2*.55$ǖ IEByq FdOޝu><ѹ$f$`.z@ϭwѪ9RTjΪK"`?t}܏pG]S)-;zxI!.tZ\O$0j)!#8qA,E$p$>s_U7+t>{5ϰ4x,}>,N7PobHϯYTMj-j %(B W>0 pۂN2~|氓9?ӏU7.C(G̤gשYMp7 ފ}xKg^΂]9Ecb7>;XW19PB99y5S8%<vN:z{ҵ{|#{1ek7q1\Ieyc; u'\VbZHpʪڠ_*ف$s?($ qtZՁlOVAEᶰ`)9xuE&S+~NNLLc )6}q&P#5UP8w9[r|ijrq@#NCaA]^ѷx(Jv8F7n(8w=1#k`zL~54!ɂFI 7B;Gj\d%'LZ͒pF3n=*+X8@*z84 m,ی`S('/ON:(9`) [G(aN1a[ u$wqzq(݃ I VQ9F;[#+`=3j_~fEL]9xB]r08#ҙt-p%3B}Ip=G3nn8#X灞{SNG'A䌃ӌ:@@HnF2YBAm7&O zgh^cx(2xm$ |b8;>GLRM"|3`100/2 0J9ϦqV#*D;|%~=OF5#Ep9YKq4^Nk.[x3k.Py?u x8Nc'IzܮRYcF=kB;@Xk:ݴ~CQH\t]I䎄)5Q@#i6tT3{#RR3ߠ'qjlc8$09އ- G|v/=N2y4)j =42NORA=ۑ^O~OARka"߁~;q޵h'<|uR}mgm +axs vP[^+.yu[Ҽ_uDba|UĞ[21Jw>{wuXo5mWGɆ4Į!ȋھ;si Gy. Qh@ 3+u=mya2_k7B:epz*͝xX9sy2>#e\ KK9P1,y _m QԒ{Gs54K"J|I X7A^~exUdE݀Z'fR(l dyϾ7wI#5..ΪFN3ӯ$-[_eЬ%\, /=.RppWi. wۦ:PQ!xZkaR9'o*~ڷ.7Fa1_ sUj]^&F0eV$dPy&MrGڌ=ĀA׽*$ơ11]%m4B@m 4Z,aFG9iaE[s`cَpjc{֊INf_ IFM/v~uDڭ܂1aw#md8és[>8 u%0KKHAr6Zzz҄oyE'u{^yi~Agwd w ѿtx9Ӵ/%o 3&B]cX3+Vi%t -B<\j>Y4KZ,^K`fJǮ{WOa|E)0c ĸO2\e^j42($RO/<[%֡k,hdo۴r$1r+ռ3mm)Ғ[6eY,0trj*jnN7k#AmRɞX.{hy\ۖ/5]V! v6/oܪAw}ks}cҥM馎MNiR8Q-dh oc҈O^jvz6Fk俊9,Jº=ݥcYBIfwc?.4ji7j dY%$BZkGE]Tͪ>Komig YbҔn>WR՗kNƆADvhZ FRpnHWZ5}Pn仴KmtI,0s-WU#WmcՎK X 8 !)/٬K;yʪ$%T1$9fϯzTgg:bkΣxԜv&OT\m8XH쑟 $Sھ~m^SNJ)$"Nl0+^yfV䑝%!!Oz 8G.6y:GQèhإ~^wy=y]_yh H$vNٸu-w8Ea>BB9=sc8?pF>a~(݀s)nSke2Apsg'7Bʩۼ*lSHWq2q:#Ӧ2idOAԃn3׎8@3I 8s.I2(Z\mr@-)BFc'Iv㔻CG8Sgc XI9Cnw+i7sܺßH >;@Jwo81\U~;!"*U$&ϕGOI+]4&;sb>Uv'E:5Զ'XŹQ-2qүxDd,A0PIƷ<Ϲw2 c'XlI>kWXVtSƋIRl9 1f=[  s,Zi\ދs 0}JlCOָ1Z=L ?};1x'Ar3q{Wb]3(+ESv9hztz3 =F|cj9?zᚻ#鞃׊ǰ='v=8G8\rF $3֡c;CSFہ={xo{UnQpOd#Sz :}q8qރɠr zAlr}z jX’` z~騥=3GdwP38qu#盲gUoԢ'OqTy^ޢlFTtDӀ8Cמ?-E9q߁ނHp39ǵfs8g v=qUf/Yrr1:&h3KWsN:#<띒`X0AzWS"II# hÇ9]@Gu[nflà׫ʒǙݻulT,`6$ !"[ #9 qRDpk+nIW O⨳m\Ib: VҒHe+TvZƬ~ep|06rOjrl4psa(`bӼ5x[дYIKˆmG,.IS΢ou?K/HӴ);8-VE»_v~3^Q Ai;r҃nq^dw׹6k^#'[XO%#*8+ e3=PP 9=*$vVV{6mmU%X\9z5˭_ Z!ivD.В#=5)PT|[N6rE9( xSq"xNHXH qqU+[cr揟b[+]'IN!8 (hfqR+ľ?w#H\eJ<#)g!LIes* seR,.V?x}F(o^e-[W 0O&@kk7*1 oqy]ՕovYEB3H3} }*-G n=S߻9Э#S{b|D%rA,Uy7k*NMRudc!f$ [w|TwNzk ִ+]62E4J|WyH<GrQ& $e`1! 1U%e{BP>BryU *qb' v:y![ܵk$[(ؒ ֱq d8'=@R8lƞϥ<IL$*wv+ nt*J2+ɘ<$(Q#Tp8kkoE:ۑ+۫lm-Bߴm$R+|יl4.0jXrēҹ|Ge.EbH8 qN}z`JxHܥ `/{!! IVi5T2O^kU,76r{<\zHޅЪbqpxX~ d*ř1 @8*_͌ ٞA^VB@t]:+b #i\$z~?>Oԁ8IXIb3鎸kV'$e>B-FNVIF80:[b]v:[k[jFq8 #\̇;V7,{>ϵݴ)|`pJԞ}b_i0ňQNZ;|$jrhܣ$rz~@+H'82>\ nx8 FI$$Iii|ڄj8̭,d;cHr1HsA%Cp)9Q3[˻fGx϶O5KCˁI` D*@Sjr-Zmf2r2W㡩0c$rGbݎR6# Ǿ=楢$YL@ .W+dVBuBB6q0y'p:T[zۈB4r+KdphVA*6VUq Y<2fފ}{S bG1nUY$9 T,A 720\qHh»GF DZ4PdHSdt=֠[GRάkq<++ݤދI%QwH {#.OdT*HǏ-^,\{8brx's^\ѷQZW22,H8ҡ$>S@'IhTC Aۡu,;y9'#vt?0AАzn8vu<$/CE8F{u~>u3FG<7#A鎕cǞ;g91ӟgޓE&4T玿^E&!zF9kʑ.p0Isi 'kq7]dԎr0sּ;yq *rx}½كqJY*q ۭeH:ɒ7 a=^VĖ&9WҞz  ?ZA:!p8$)SqHsbs'=?Ƌj&+xt Xe7ڠmvВˀ8<ڝF:BA*\q`NFG1Zorb~p$2ncʐPrlQ A]n#iR?g$#E$ W< <X|4r>1q=Ns\VLT Fg qj5^J6#$cN֤J#)l?OJ즴G%GȗalL}FsP7LgxsZYk#*Sİr"בkSFXl3a+)$7ao%+nb\$qt7Ҽm%ەAt`x+폥tq͑pX9n~5#Ep=smA0܀QH< tְi;.UӴ䈈d5; ј^?^PmYfX/ALwԌ%U%y7wWlȎ $d2;t⸫.rAݒIۃ'<ם(ecǹHh7 q\8>xۇ)nMoswІ24vmf pX=Iϭv&ڥQzd.q'{+g4w8\HH\)ݳ$n<}K! tE’@N2jf*|؃+ c)\`du/$23SGOjoo|89V|t=NƨF7O8rsJ [W\#8׿5XCI@9A8PW*.F@TU23> v>l_0(F o\eFA9 e_hod`7#"w2@#R!+)=~c!~2 \Ib\)]7ehxmp1@EZG. F9bp98J\v,d '"Dޮ e68@0j(ڎT$g@3=4[2ݴ+<qAV'ps]cuǡ9J}/ݣ+ڑ4 b9%sי`>^'+z5 e3iv @¾YI(_TCeQSFF@7}K6AFsV ($ '8osqY*82ɵY x ֠PdCgi 3JSƝeXc9@&!ݵXťF(7}ݧ9ϭfЮAɹ($8q׊ p,TI 8RZ1*nR 9 { TopPqXN}#E$uޢ(m,8< q9SE*&RTllc \TlUm/9:zSw qП3nX?:Ml4WA> szzz珥I,202W9&sUy,Ts?JȪ ]e!\:ڣ+IcN8Wێ8:h$foorFr2{.q?^kN]WhrfIjDNMhNR W@V ˒$.p 09'JZX$n i8q/׽aOK$P y*@Y5-5EdYQ,XlOIJ4ʂ7 pr FqYUμ4o%lیLcڻXWh\7?L7B?|*-zSB6]|ǭVi|yltE7,6V8+^c cʏ`; J3u Jz⦩ѓcr sbl`9`r8Fy_iS]Ts1Xа`9 ӿr`ṛ`2Ev#ϚBnS!) 998;pkUbr?1#/ {6?*Ȫ&#98*Ie(`WoAJoF\V-9AEqv]ղhp X .{P) ^v(#n&[yFr :Jz0p檗8q3ߩtȣTf`dwXvp@ :~5V~+VwoͳbFkW+g#~vЈ@A8gٜ]Q ?. \Wk w1YZ`##Z.hS|.6C؄ |a*H,YO CTz16I\Ro~VRHY7ױD>~S}08i{~g~l\vW=qOQ'Ҩ2wX!q2z FsꣶR35^G9=A⣨" c_8`Ʋ' jGzx '3Rm@<':bd1;wԏJ;,;qO=)~`>^;v?!˃T)R猖,: O^H .gEg ;q{TbYՇП‚z1""62$clLDbbۃw@1[ZcЬEBpcR2XO Ɍ2xg*Rf7$A%q ʣ<~'nwn vq\Ď9_H *1Rg$dxsR`pc {JKdaqd*z?$Hx%N P29Pvڤd'o8q† Zv ݕۆnx$p:IdCsA$7C%L knv`~nO1O$##!w [PckdvzU6\>_29u4uvX/.0#!I'I?+ SbbuHGoDц6$dݷ>kA#JrFONc>Xǝ c+Wk;y̪AHAv| ͜.8N}b:\苺l ؁ڬd/V`s81tgSs~2ZRlRqQk*HP?##5nrs}ףӷ=WWo(ʤnӊ3{3 ۲1[sGJ8,"xR~=~^CW z͆=P13^hviszζp1qV4ヂ=Un2:KS``}?ZR`lY6w+cy+gm*wNЋvVk2Kd@D|KßWn-ÃrF2J{Nk"ӊkk+e[$[/0IT Mbe;9d>J+N[G?0ݐC#;]pXK'9=>J|4HZ<,7c;~'$eJ'ԐK׌r=qXL)y*0Izx TsEsKs;/ X~JkG# '!{7JyeUw~W3qNb;'Ȑo~q}dXpH3ӑRH<;s['rぞ݆Ozc9B0UT 19 9O֧ȫ~drI3ď1 d `g=>;/NoQ^3ۊz~#䔆Wh=2?qJ<T- 7CsH F~( <`s~bx+yu}6[O~FJ=M0Vm?)'žk{ccѬnA#7'qNks__}]aj˱?8O/=#r?/׏tNNN:3Q(ڍF^)OG !VwW~b0{g|ébI.X'pf8k.kN)Y.~z,`%~e,7#V3MGl@ۄyhPz[d]F.;}tY?dF OQzi i #(;+.#9enȜ+rNNkՊ0~SX6}zس=܌dUqs䎾eںlE"GY<k0O+=FsNsK.ޓ*ǦzWIa]cP2+@f$=FU \62Hbn2p|?xdǹ낮玲uv2d*"A",l& R7]8ҺU fg֎p=A}9;)ca%r۸TK|s朏p1q@]dv#8_r}*ڳ7=؜h8ԥp>}Įo pF?OR[*tSz# w[=Hkqї>է` xl?>gqTcM2wtrrGv;zq:!c9lU}ԞL"k $x I +lY10Msd-m2;\c;[coSױb{{Kz12>PI'F^_|;q4.݆0' vޜwnf F:duhJo?tHaw0}jLgOBF 'a3 g n;r['>ԭР89ƫT \}G.b,Br6q88ҹ{HS-#-#$#h'X|NI!p::j*В22pS<~iOpNg* n `Wq_; )l ϮqM]2;<8*7nw>G7v|)YXO!Yx'b gq; rۜ e-S"d,@9zCqקTf*hq}yP;'Z`ivdz)w8DAՆs؉F6lR(F%=0*4խEW~ib\oo&ڣiN!FF8bxׯb_FPCO*͟ZN*aV+rGpu ΃k)4L$rj&v`rHkuY>wٗq ӶZ898ס}8n=LnҧT@=oqKq6N3یzVBzs۞sZ#lpy WMOIDY( wb|*݄F60) =0{ף Zy3Nĺko$@1ݓ('+\ԚG]-B$,,ĘI 2#k5\z3{C6{ux\GQ?m:h+lܲH$@kE'p=JU˽>}?3|)}bIc{X"721;4QףxZObMFP'nILiN2]뷡ʺbWy-^YgV1#n/y[xšu}wGq [*29_=VD!T/ZkVr[BRsr8 ysͅcLmyiDٓfAF*ҋli@4<\G.脒e ܀I$t=knKh=jhݞ C. Ru"%M83[m$hs: վ"lcF*o .6ӭ/8_߁ ;pN9 onJ褑WΓѭ5jXl嶓Wg,[ < $)0Kpy>#[j jK=2 ,V4rqY:koaQ-4K c]dm&)Q`>|{1䮤:鿵 %n-ټFJv5*Z֭ctfL΄\yh7rJOe޻i_On9  rLU;7ߩk15;m^ b{Q6n3GWxĂMX-HA85 <`5Vv5&SJ[弹U Ŷ7eQg! yߚć▭mk"[F+5bmNx=;W'6?XxӷKhT;SU$MOO>y eWt*"T㎙Z6uMN,`_4MUIyEFѷeܟN鷒lZ3`sl˅$H^y\g5&tFIf_\ʒ.%B2(^p?rAfc^Gb#8 URmQTGuY(++yG8zWs38^{cׇ:Sf{/n9/\6q"v:γLYS~r=x5࠽d==*PNNByBד8vX#$xkZ% AnFqq>0zNf~wv;i#u8|˴v 8܋c\g;9y9I{ G;RP+. 1|ǎԢ6v+cgrgԞZv0r]] g# zrֺx|'q&(p!@퀬sf3O4t >G)n G yp[3,hp ~f9+IZDi#2Ns\-+4в f11\.9R4摞Դz&S1*@8鷎yxQLVC$P1zcVIy7o$쳖i߃gR0Ht1&~`w8_Cͣbß99\`pe ~֔o|@_,ps>{Ԩ< qg8996/9 Į79q{V28|΄㎀\]4ݻbxY; N0v#=%{ASmm.z |dn yŒ"rr> E޸ǡ P098_{&L$= J9߮?㖯*–wqW֐wQ@$V~8l :j>0x<4Cvr{˜sq'өT#?BxtgP,6N3xjҹ\cH9vR؏n<=r`EqK_L}zb'0A},hQ^>J<;ְq#9|nz}//̖~5C1as^9 gv-|@銀qzӊuvJ鏛˦f@'V-՗oUP{0Gn ;N<qޱش6-tM#R8##(.qi訪Zf*J6Αգq 6"mbAo/~䬒Vݽٿ"&6ݺu6gxi"77XdZA夒W;xS ;K;hB' 5ܲ2r@g$}V6|\m,6GPm!NӒ0+1b0錙R z\|S0Cl?3#/rjYrC1ʶy$u!mV8,U~e9NqB5d2C#ާE)/v1N J|Ðjl\d#*;i?jYې>B$)^G̡ 8<1Y?Ø*ʆH;{s5b\s\-e2Y: )l'?Qε`!on00}N=1ZaOK9qQ:fd$@^@rn5 UrՏsҿBëF> ~l$',X0'%8:㻺T .T<2d3K;{GV k~8}+ TGϷ?r{V|Od-He ̀DQ *W}N_yvv>HejrA8,V+Y TPpw){fe{ukmCrkX';ÒNYWT8$3jkotbWT 9\OΛ / s̫CF $^3K[3]]}͎h'9lǸ=$g X r䑏N$rM]#p#8߾)$`vKf$Wop霐${UP6aUeʍb2|呆U۾pN:|́asGD5@@[8}O^H4ͧrW Ҟ' mH#w`pxRNG#;șt.Ҍ3r>'% j̰I .d(sʢ :](/%ԡkkk9+TD "$M}F ]!Y$$n(0fO)h#2+ [n C~V-9r6*O}k%R[jʜԢ=KOHzwQ*gk1w(I]YW-쮅o)3v?\p<sO5 9CppN=J\`<I\^߉/J^sԁuxBcIcJS3n89Z0O?G!l!9L2>p DD>VqLu 98<۷\FXNH@d&zݏi=zuGg}Fz)wwc8z=jЀzyQ\S{Mj$WWjA5 '$RjI׃pr8k(rGQUUޘe%nS|Uw傞0r+iOfI!d<#H#{uFaq<2Bm :;wqP#޸=^)XpvCg8b@8]jք#rEbH̳?/W7uʄ*6A[#'G {7< w}QZ!˟`y^NAhsEJ1e'?.O9__Ħvn83ҍzv#7mr ۸Nx',$ w /=6W*KyPOjЮ9C;w0=U7pHl;pq~M4"S*?&J,wlSI%8Wel98烊_jqQ3vCcA r 0,ySd6A,J@<ݑ+cM)mE>tghWg8%0B{𧎃?CU"_lop۔s: ۄvo nNq+AfB3n~Pb}+t;Ҵo|}+g&㯔ȏYv |$ xD,xR@^9{uzuoCٲI‘G99$p9fQ:nZXjmG'Ϧqڢp@ݗ߀i$ڌ[FRʀSl!Be2D$QwT* 0\0ۀ98*BL6 0$zߔGo(YF8SÌNP1mуp gFN R$+ w>d)x@*v^$yn?P[Xb}X)~c Rqy#>pjz"?e`'z Si9D~_v8>Xpʨx\@)]BHp|uyGF?2|@8cʟB4.g7F#~$RGNOoJX_xZ0He' 3#"S_m9H݁ 8] hF-{Vu=jBu&ڈO+KzYqݳȨOG4$rp vt=qntal 8G[h6,|2܂wZjʇl3\TJHp֛=2ą(Q:`c'Ԋꃪ9\N6q&/V}4#@ܤ2S5MĨ9L}O:v,pHc!_NСϵx3mrC3dy ׸dT]IʣZ~p;-:\z OJHc 7AOJJйӖJ+leN+sߎ{$jrs ı:uNd ܂8b=뢍"` &K`nxҮ' QMǖ#9C'-`ø3:uƢOCHt;xWjK)UUO9?7o$90_ Da )ݎ11{tR.FK1q'^c<|j0>0;{\ROC~kNgu'v毯8GA- 3ǓUy؜{TEb':n9`Sڹ+svRj9t9MdKe$opQ8fݜr!;A#3#^(MخC* W&Œ-lA 93WjF\0Xy8Z{9=>Y*0G 1=9jʅikgUcj[, [#n*Ug#T8Vmq3ƍK۵qz泤Ḽ)c; MSm\pgі\ppnOaNAFl@Jt8#ΐ o;x#if=*ݵvYP0YB uܠ%Xg!s><+(!I T@G84#m0y0yϧL$>Pv9cݤ2AcӨ"Ql"@ I#wޤ]ےp?w-^ =s)61,Â)ܤ=n' '"0QPsқW$ ,DF\vr@5cc}vr 9py5HA"93'B tZq :cѿ{~5BM3Z3̈`3|˴=I5w 7.C7 ና00kFxʌ3,zr@Ad;ZEepw~\ p`> \RϷ?5 ճD89#ڴO@:Ϸ4SZUZM*rG|4p8=?HqGw9gq[XЏnxXwwG[9榻I`t`*~UNUb֚ͅ寺]3oXԈcʹr=+[1_ #XiЃ|=+N?6R 7p @L^{qؠI3m9gBW($.vӜUGcw# \{UF DS88%Or}UfS FCzW<7\8ܧUq. sTS3p:NH{d_)x݀O“[! +Ede Fҥc%#u7!]݆Ϙ3ZՎ0Å%͓0Q>;(F:kb1os`6 ?/@댃kʭShSg_F00V&&_Snc^1LW[dƌzS9.6iY&z w.sslgrӀOo}k"Mf^wpq<^}1YBŤ)$s[?ʽ< ,V&)/uIsbk*g7-|J"q14gKq\b5<N>Rq5vW:TkE&˳D՝I=.h2j^P!*H_0)TgTx^ۙaeL/87$:{FMwUk{5u$g2-9R}zޮd*r P< }~>JkAH6׌07M} hXٴI<[ЮuGIjpM 2wq\t49w-=sFrl$ 9ڥT9 W8%ղ rc>iM^GY awl(9|Sh 6rMqsddem,pZ.G7qp axHvf}9W)ו7nУ*:+Qh]#+vyS qo\5aGvR[# H<A$IzU0 X7twp>cc:sSm0ABm *B7xy={;#ryt-! )P H~^+~ZŊcaT@T<4ϟoL|Ac۞҇ޤD-$ 8Pwr+N  2?>jt (WpϹ ,@}8l%_h.Nm,#hD/]1ߎ*n-%q lR 8;sqW] ߻Rw3 wol5MΚ2Аc'OcK6zz};zfE?w$ GcqJq>P@983%Rz`u<-J@C:|ǂ_%yS:u''xI,QAVvbҤ8fɤmSwx֚M9v:T45h܄uR$ qNՌm?p B1S]zk2+ƬfS1lּ.v;S.m8ץbZ8F[̑bgo<:b-M&HTPL̨F6x?GtџO}nn PN33; _~zT$h:Ii5 8>a1⣛AiFrHnqץ9Si7?+;U^O+N;MppA2sN'װ#?MxR{~0}H ''s֙:׌gG?֛q np3~*,=`zs4C=T`>c<g=`ϰ-G-XϦ?O'[`9cC#<ҁu9ӎh{Lǧn?´ ={J0cd}*Ia#?ۧoҭc's1tLs)r{cgmb.83rA=Gcj-rqvփ35^B~vcz3Ҍy"fx *:cbN *㧥ks61$('/0~ں xUe%v +E`GoX'%x-~ʚv_u{',w;Wl0P1^T Zb aHc"vC=VynĺV[ kmA)f۴BK ~ckַpdj*YEuF7+7NoxcRKXknbɶ9so vG_t;YtMJP͸H&A夏fHl)oZ5Mn J༓i*km/XRLrIKéZGcob#\fw}t2Jɘqi]s+%F F=M_Kѧ1ܑmAcN+OhDb?wf4]Jٗr~,lyyGA]e#אGjѼ <~U}9K8۰ɢdeyvA'#8\֢&Ӵ崞9f[Z=>WcQZZ.݌e 4WOtc%8noGY[[}Hc`OևS{@6Y$Q Tew& Y)9] sE F<-#GîsUuqFZa8h.oA[.Fc9 v-|Zv9hrIO1ODS\V߿iag] ZTưʡ<;Kcr#w,B$pb2r,nGEih?bd .HҦX6s;N1 VOSmEː#c“N1UFn0m,;Jrm sHOz}1Miǣ2w:wϮhlQ!\S=vvң-ߕN IxICnyJʧhvf' sN}({ҎNzL(!Wye'etӅc ǎ1^?*ռOۂ0a< p} yŶzh4;:n>V“N1zWBw` @۞rqetGbd8IО8ۜtg1zoujuG?~j֤OH՟g3ӹ#<׃c` v=+62_7zA^>Id'錎N=5[d2GSp3Z4rJ7b a=={V>oT _Km8Z4e(z\>Y!Q$z흼2_IqzLc[<y mKW܏QmYp AvCEy.?+&c3 \N:Ι/GCڦak?Pٮ4`%Y r* )ێk PXmIev'&}{Nђ h1l 2N帷1o*]rdtiIA"HIX{1Xc9_ϭt ,\eIU'~Q$S|{wd01鑬 "#Gmڀp֜Y CUid0ڬT䝄v&__#L]^' ps[jynL/ydEfۓ%)eϘ3]T 9Sd[^=6it51C歓O$#;O5i^^](xٌӓ Π8ךkB,]Is mY$ct aġt<R76)0C$ĮJmK /L0M ~ "Eyf0.n]A ʆ\\y;6 `z*Tz*.n1D>Z&.G+~K)VPW(f&"E96)#g+)Ow!G=rEE(Q<F?z|FAEK\'kF23;?(; )I~ga.Z}Ѹpw@'$ۯ-~HEbq1"zҿ@*u5нɵh1fh!+p9!Nkͼ?TI` 2y$*_׫;1voqry#!*r18VF,w*A?) mPyUw~at UX=j|.9@{`Y{I9ʏr.ŘLUI pЎ~fQ͐G=x]9$cmDQ,KOf 9 Nrsy4vi<F"PP|ہ, 0ē@C{|5[6qUB! ; `sj+(  J م`;}sX'E=st;EX!l\710s3ukkKb.KA)@7+̎;T(+x掚7Q&`#kṫɹp1z:D,\@Hq2ymNZ;2:u޳ FNrNy>O~+ZdryGœPNCtKݔҟ;cnߜq~ o|q3ƶt灎MY8?wH !x;֣WlX`+ݱ"5p3 g(lr0O<Z9pG uI.,8xͅlvxB՚:;v8¼?WfD8P2 Sn9J/;ů#d_;FXb2YvL*bM$3ǹȣ?}+٥&ՔH󿜆|UՌ$xWV,#H}vw՜Yf@`#iq=Xy_!pێ0z"ɑt*+qZ.vl½J&0s ʳ/#抨8PH8bw#'sSM_n>\IG\OB@`;y_#f 88(n #`ʳ[;r3*HP#90}L:\?>s͐'.sTIܫX}go8|* ڪ9e"~犧Lpq6JMJ15+'s1=LRK_R] -=ҨC 9NI`x~8p>U)?6tUu;,T?*?h@[Q/˸`#'ՏFʹv`=OU+FFHzsRB_p 3 @=#<A*WO 韥_O$PO˽0IAۗ=ǽzNw%PFOpta]isJxT/GE ewnJD}ЭT@J7[¶H'8*HۚP.;p(ݞPuZy?"&cFiحivשǒMw=>h)u:hO6J6Yz`sZ܋yFwm8sCGAF^$ע,lt-EqCqt%<@QH\pN9QPZJKkE>gv]\r@|2xֹɢ0Ht;Br= z{_-M($@<;e2UHdəѹQ6 ;'AM3 z>J$e,fFoFtXWb#1?ю>F9ܧw9 xW *H=~&6aRXO \'Z*6nR!"RIu۶[+Y/ss䑎~y-I rUW96 F:T>2g,A8A9㿽 pt6O ./A' ԅœy*-WǓCn g8[1n";r 6eT6 8+okdhNY~Ic OiLLFrp`6g<V BCޔ2Un*c-u4d*7Rp[n;=e}Qd(rCP2c 088}OҭFMfRYڄnCK T@+S(p0s]Չફ Iy/yyŻ\.ě09*]/x=yf+y\%C ;Gy(; ''IKv]gr}{U 86ݴn~+ڱ[0o3`#^lVSv9v$ z:I0[36O9Rx'L8&6o򱕒sQwMG>=;F܎EtǕ%rWUqQۊzo{Z%ؕb]%eaӌpGb=**`08‚8yNOҦU4T̎48( m}LkH}!$j9(FqӭzjeUP6);F+)X+m Ww҇ӮK  uJi& 'Cn Q?ێ#ڄ @vG?WV&|g?y/S6MsN3+F`ñtv dds>oA'ӿzN^fUV9 ry#zvS/Ȥ.rrzJ͙ s?d##T1$g9) XvFw1-g9ey1|iN{cU`C8N;r*Ho ۀ헡0z Q3r8)шg<`Іf+` |oVLp19ڧb)KqG(#nv~jFB<!GɅ\uO\PʥQe=lzc%H8!O'=ˡ$1 aVzGqErI䓡ctNt~$i.da`鏦}6[ `ʠ2w㱥 zӔQPĖ$Ǟ8LeTg'9r8ǿ=j@KH'R9|\qz N80I8鸩a/VjmeO^Wx듹$N<22vy;g\ݯS5g݅߱HgZ$|͸ 6->fZ:c' ?){vGpA2#UPƹH uʌd{Trhb0TOn\|obI!H%sNHc{qœ\Af8xȮz&\U2Z\OKez ;c&]ߑkNdcb"i* >d>ӽQ2y9'~~ǠjSSZ#7^1Ƿy督s8C(ɒz1P. 7ױ-w83|d8T-އ$s@3I#k*zEHF+ێ9泜1!YNG̛;]`dHܱ%pNNXZ:п )(! rz+]e|LaQX8o95l=YF2c xX@,JJp_;$׵ŸrѸcCϧono;;4 }ݏnל^u}KˎRXs#=nٝyZ.pneT;]JȔ+a 2 OLҸq2OW.Njyq2DA;N[*vG\0S/@0Ѵ=jb@ IF׮q5+ )Rt7Zz3Nr Mr]Ӝq\5xd`,YG$x@5]ͩ<Ўw `282>ہ w@=6Z $0R0˩LZ99]\Fa"ס~6@NvF/`y8U6n3lq0ub60Bnkn vG񓸫21ǭ8$+lr۲ ݷp:԰'+VѱnFqq8A2F6''n@=OJ㩹] C}Gs_L% Cb n*:L\9,_ c I&t$:LSE ynm~\zzP%̗)$~n 10@>ێ9wDܰ?tm+Tڌ9s ONysQC03w ㌞:szT`zqZNAe$=Р9zn@9Oܜ$ۜcZkqw끐:Szz* 0 뎴*q#8L<;Se0HA;j(8 `tL`[~Fszi)d#p>rO L.9?'u=G9b8-<IT0cҚsیp0F81[#o6 x*Lg\yu׭1UG'T Q6\)T\9dWn! x*ݳP$s dݵd$`O>+*U>69s9J;Fy 39~hiټ!ʌ'{d/ UXr})c|\N6%=N8OjC.i\sǷz鞙pz0#@l~V=%=9HO,00>dL1zR%]񐄓"Â2Lt9⺫ TCFg<cHF8q^GN𝠌߆; 0F09/QN$ t p;s֍Q^T$ ]e}: E#;C@(0\#$q U6nڻAEO r:=F=I*pd]=H;IO!Ӝ*u<nk&Z(TGO<铌t⦄G̤6A ۃ=jZʽ%ZWvgӶ8h3"o Bxi u%McFओIW-i+; Nq0],7nzjk)Y]VCm1IXu^˞9'G31_][hϯ"O]E# FORHlu-*^Esxc{ԍ }S?wR3^T z<v3Bmew 2zu㌂{ڛqAX=@V vߟaC-܀;zO$s FWiyʶ7uB_P`<ycʟq0ldoҪۂ܌pyg3ϠNrqqǯ֖勷w̓Ձ#'֬* gP0,*}q:1*{>ZN,rOSP0*pAgO#o{{tULr:c'TNxTqӰ9=hZYUQ>5u7Tȓ%)BqӞ>¤3|NiYr@;uI5oO$8q;U:瓞s߽*{cS=}n*)_b;g>ct}1;㯱8<ث-Xd{qTNs1} 8<a]ޅ ըE?#df' `nudv,;b>}JnrF01KTýW;vWӱumoPx -&/\Ə%B<zuׇyhYw8YL`dZƪZ7e<;mr(e$YQ% >U9dfC{=ķ~B63!_n -Nm#FIj/!/Ȣ[,kwL'y|@-R$-or*E8V ⴍFSҼsʒi69WIE#nk: ݨѯя_9(w3^3oMI,hfbyGOp+.nj͉fnP0_; GQI<_.iYG*Y\q޲#m}ü] h18ٛp㚎neƍM7ǖEpw'YKQ^{>j0KT}~Bto |BEK8^_&m  }?O5K_S ug46NJ=YV܇IHb+a|N=\ub'DdR6{T)Gڗ;N\]^^LFcP14F#"B~b9&=[ŶW=v)oţ% ꤪ ~^k{nKtV9=M4-.ul5KRKkBK%fFgtb08NG*ڽ6/['^l~"Kg[O2R"+  ֲOG [X.T:eI=df&<9eM4BlS a h'.nHmF_@%` UFv"凎Z_/5עv׵I[M<-NNй Jc5.,bɦLGTcYʭ۰Ok/#guu3Ox7^{fk]n Y/ k%;{"U0ZmbDp?{/OZ~XaiD#Ϭ5uﯬmm%xg$$n@AL;)RQ,JDQE.{Wi3NNY]msֲ]ZjmO][X|ѰqXDӡbZ=ͻ̲ܲa{ VZijۆŘOak)TI7؈GxY;Ͻ[jv]V5; 2ȭ 1xfGl/1tQ;Q I<*d^N*~=2EM!#<'߭YݮQm8;K%{b3^hj4IwgBv8*BǭA/n =K4Ǵ X+@9I zTm.Ѹz2 @.K.ԪeO=\nY&qHA<|$ al1Q2ng\sTLd׏\H7dg<>TL3pr 9;Uȡc*gC8?OQp~n}}G޺ 6GI3޺ 2prx$2ryjoP Lw|c=\f9zЖ#UЫ}28Pj6G>ۺhQ\\tL;ctᗾQ3^R1JA|H9'?O¿C|h;3ox^:2NO|sz㥑ʅIwkGNZ]$|RiYݸn(yX%rq8 Wrz q;1nFۥ )]X\Ĥwpzf p6~lTwOǭZD2m͎Xd sڬ[K&f nu8,=QүEOG]\Jy~Nkqio``s%pH TF^ilheIgQwmw%S#IpBCnc߮úkR>WM%khnZRivDFeK.XdcM$[sRMh֩뗷YfUk(5+F q^&qtޥd{y2QU֮kOam,̢܅XV4o. J'bX+{VqA>7ua.& .O gX#,ucH d`~f+*xjkwrL`;8##8$[]ۥ5_k*5')'81fT^ã݄؄X'%HRrTg]GٵCsn;YF\[>n7yeʸ{Q IG=EzmUmA%0M!fh;Y ukK*qn6{~Xosa=Fϊ9M*mќ#pea ;wz7:u 1G{rs,M )J둩'^SSdh}jw71RAM7M0 ږy *+2[^h =g$M!݉b\i7m[3QR\rmVKAjl`x`y"0cyA=+< T J_4$VHCdpH=ym6*.k-o/4Ntu$oo0WPè*F [d7~UFv=lBA<ƢMʣM7ti[ghnMI4Qq޳pMJDHbT,8_Q] UR#(켝8UGHTª\lّxp9j1|n<5T^kNZ"ҺrI=?:Ԃp3EQ$ᶟ1]x޼lqf.Z4'$.GۂGl<9½n+K+Y-.Nq2d|ǓzY#2Uat>k?= 75ۍXZ3PxVRĒw9<xտ3ݥmvmn)9lݎrp:9 t|$[ aQm.Kz}c# yT.rH8rwsӌ^41(bBaPw1XCo1I7e`>PAM+9[i[J^Fa)Ԝ2x$r;v3>d_\ϵ6~fCoQҦU n[>.U%Udo X.Oo-ĤQP[OE)c. *2T-x#Ճcnޤo?6F8>ȤCx^€H?T'H3ym\ux{XQ#p-yp:⣎w4! 1N:1Oz' ǯm6%6!uQe 8DROvW%is؜ryMr3Y>d8hHdTlqR({mmܐU8 \zޔ>?Fa} ٬W,d1?'r}~x ݊aتD.p;&Ia,bEd!LsӒO皫+ $rn=zu@|0R#l'qtʱ/т\GiRX27yBX=kL1^G&p)o I 3ʟʢ5=*iZV6 w\iǑ7eHBwa yҹbS+ȵKY d>bT~4ĂQ<9IXS+ lp`b'r]xߎ-LHVffB%\yg͆?1h5 \?٧$ί߱aZXvjm=oPOZ4$jTϮHxu=ODfVw[Y(* #rgsGja7$5h7= Q}M]2H9޻y?.r x?-II+k%e(-zq׎#\N.8njތ:Мw\?ϸPqqБrOn1=ǡBQh6.r:c⹉ nx}ئG:* :p:q29t t5vR:cKzg9H 1ē< p:sd?CR088,z9V@SoCI=}HB7eAFYIQ}AzUŝ /&b<Ł8S~āBp0r8z>R8<1ѻ+oX~eɸ’`gr-&*0ez͞?{|{[I?>f9?sOzӽzTH*;$X0Q; F=>Sڦ[d.A䝻'zLnW nS{3˃o cW'dWcn8;w` <5Yï1qO$1OOcvXIN?iUe5† Cuu95mA= ŽG]QC̓(IY80~'fTgk+ tҶtęJ 0@نvRpG>nxzbc`.¥As|RёԷa˸Ø+#`8%2p_ T|>^yJՔN33z/ݯCœߙ_v@2\an9=k*sNr^¦]M/\ӌg꾾V=#FA0}BĒ2>bH8 Dek69F'=ǥ7h%eaˑO{ks><Z`Uv* æ<,v9`ޗT$I2yݹG/'=@UQ`G#3hV+.Br7>==ϧ$d0!-dMx9bG+^x7*X bԋ>9?O5Ox*a#RQ^HdU2`r,Xc9{ȐnNF9$r=?Z,q ha;s͎nO^jYH$9څ>Rwy0$ ;B~Ҏ'O-՛=ꃩE@]n 1vLn::capDj$-O#px"*ŝr#) r1H>nv&ó2o(r70 s+IN\HHwsszTsѾQ8 ݷ͆b25ox] A Oz}ϧjۛXd -'>oI,^lO-Q 1avq˖[>E-ORw|+nrkMt=3w\>c'j) "Lcr~]y塬ΉmĆ2NS8G>zQe:l]qWC#3] :G `zd~jS,䢶]F|m #zGj|em2r_˭ZVlws5A3'esVIa7v-ܰz;gre&[c X׵DJ7$pRg$߭'m pv`{z8 89q {ΪHNAa>0(FQ!@e8؀|`1#g6;)7ndGrJ| 4#%P8猟ҷ\3uJUvFڳk{4i$a`@˅A>+eVy8SNW:{\ H(DP7U@G`I7+ͳk'2O/ǖO(6c5کT )"ݰv1_9XHUp1A^GH27 I•\dEo]_`< Ʉ`t9 [ $/}Ύo (MN1yXG+M1 Fpy-=k^6$s{f=Nj]vp?ȿȻʸQ},Ǖʿ+'~NkI^R6wm'9~W1Xi HVHzU 17b2_dYB=h^ Xf1=wYS gpYJ z0yר~$INѴ6zz~BFx^JsS Hzu澖i|ޫ=JL?~I8:T8pN0O9$*pxq6p9g} 2LX{Z ,O;;w/>`prW@|/zd; q`jҹ73d^3]=A x8'owr_b 9.\{@Ppsʒ^}86m%y%y&u0۔ٙ]ݟCB6"9x;wޠ(P uNzƬ&>뻣rT1ϯ> PC=F}GrOֲprGʸ  b|P dFa'uG l2F\ /~s+nv̮H3`!pj 0=Oo(ĪBd #*WoA(63`^:UCbv8v3 q9=si-$|@B2p2_ur4 2Xl$r *%. EA9; 8\ Wn$O5c9i[[ 08 gg?Һ{C$c2991ڳ7@(S#r~X9#\31śt#͒:8Fjݴ9<*;1=e0X=Hȡ~}|I|@"Q3^:i0˜U1.Fr@c+E0\#= }OB2)U~aI?0:NGWRzl(GCP$u 6 RGys1]p/@[;hd)8!G]<;Bݷ*22zL]T4H]ݠ銈0:`8Av/Grxlz} I%10]NW8Z%zFB,=8=i,!9C;ykhn7M'uV+nnrބˏkҴU0ݹ-ʌ]ys#4m[h\z ϯzEv2O`{^f*4Z :̃'Fy>_oPsu{W:rMim}M=ﴕ$y8yku7 խ9rhrJ=Y@!@My-ݻ' qr{W/{S%,p6w8$Ⲥ'.A)2F7;J +Ջ3AX4m9< 9JdoQz|r;;7#8/-KQW$*8~S߾ErpnrNC(#;W"jԢȽnA78\zw7cq%1;~Ѣư z)'zsҧDy$zg O|cV{.q:Mc|l Pr9ɯ]Dn{F(RA^ORO|g8YTdzc c_N[[pX$@,Xt5z.sJTP+, q)X avI\1Xvv9d䀽ԯOs_JP39֫6=w~{#vv@.s{Ҽ-c󈤿tfV*K(RG9z4QKGmv }gV|\Naxxu`2yF%pn-לWc+si=Rm&JG_1n^l' p5=>+ ۻ{sqZJ c0U%cS֛Ey 9;B,Gu|Åa:+h&=.`;Cffy2x6Ea >$y氕wRƐymۖq>4h<,~e=j^+EܟݍpNs^1U(]`PIn2+p|a]8vgj@ 8P K lyֹ;)pDKH@0{j_Ǿ!_4D`9 y8G~gϦ|Xn~n߁<̐r܂1R8*&DryqAx㞵U^ 9?mJ<&]Wwx(I,Hzq4|p*$0yzsJrp@RO^ߝqڂ҈cD1*2`-sXKVt9ҋ Q*i<x'{дgB 8; QwsvGg$K 韥>0F0Jp3;D:\v#>B (HG~?fK/'G;A\'nw5ÐO?}md =(@(8;2 诂~|n9HFHRx`(Z.0O#g"9/#Qv1llzqbӧPNs3Kݴx9ӂz gnoJ}$$(*Or:{Ӕ: =顲SrNF vj\cz1I`3=>`=#P-=w >a< >6+qc@xw*8p޼;`?xdJ@w{֟A e e#*7 G=Ijo݈[Lny )m8NqJ98^2=;  f&EއcQm`28ZYB£s!cQ:qAnN{%F\uzI 3Xr3 ̀^= &+6CG,>:zu(qe۟' 6`qԫgEW*Cp s:b=ņ/;,r 5r3:3 ]C^ނ #q[V۷9:،v#=:e"/($-{鞝jeN2 7Qcc׊ lcמ;~5he_\^0{C0bNqBy?֕R#8Ogj%rC~1"c#۩*M?q늫ipe9==XqHȼ1*ʧqǷ## gI8#99y}9ӿ4"}}ӟδ}Gc2ԸבF=qf{>"Q#AۧO֛wweS'<~b2l z{Oظz Ovp:Q yi!=3 {t0xoDًuyGO=k$7͌' g}Yswg,O8R^Nzٽ{IXqcӧS/"9l 3Գx/.꺥Z* #ܚ]kK'&k c*?<=K&աJ/K4X#3LIk7Y{s9]wC wN8(T}.rRymND}0Ü{ ca)s[~#lA"X߾*r79ێgd(?0!p&!v;pT6OS%˖9N=Aj?wc?ҳ"Ò9$7e1K0TA9',z "i2CVUxc>Z6eǏaCdEPj7"c JF]VT g+֝&<cǖ#ׂG4pFs>gd.1}q]|i][s3SbQ򢌌dz.[-|A:5h!cPNsqxB+K>[vX7=xM5,C2ĤX.N8uG"Ym"uyw漒U$zNI aB𿇑,T>%ݜ,i<ȼ_sDYNs+VonMsm$RT9ә;ܴ#{?'bEXVGE*?<`=WR%WIR$7-q=.T#{.nmK+%V,IxR1d2@Q*0܎| yKܫw#qq֢hBB0B ey>Vw 7x ̥O8{[pmKFڱ'3M6Bj;. `FDZiFXqNO@hrFK7(ydNU mO'ߩf:ҵq#*#zkSJDHaƇU_vUpx8ƙPP09?7˟Oz7IǛ,/eßNk,/nuV]zLJZH.nT\^O,F| "Q{kYZfE8iA$jH8<,Ԡz>KOvwg14J9~\8DN>\|gZ# 86瑂xǯJk Jш~!XFʨ<$8d)9'9X68x:UqX~Np L: ~E+הyb23i\,FB[r^\8u:~=hLv;Rww t#g֟jK 䜟SSKb{Uz 7~>8^{lþG9~7 -$=h:dHH}O@{`81LdQ$` vWT1q۟Ҫ;8=9V6O;W|`tێ\xsϡHL~9uOvz{@x=u<\&j͞ު{cJd謭&p?w'F#2p \#Mns'ǀsU;299d-8dTfgL62y'91TٙŐ =;D&!HN㳒Ƿ\қLp*sSطcxH|i*^16ɹR9$=sl$ !ǵT`qeiyrMf[K ;o!čc<K{,]N &ՊdR6Ba+ъJVɾ'ÞEKQ}l}eyO(.3Yu Ws{nV+bK8©ڇNRzo宆[.ۥϠ#k4ed%b&^%TPIrwCoNǯ4KK]\֝ڻe{`HR-CPQ&3k!y#${s H U'm=58Nݻmky֭Cf-4dDRphsi׉6QjCI#b/ 5㭎ԊG1$7blC5`nǯ[#1UԸJHalpy ddΕ5"KhLm r8b >^+ :J 09\޻Pc=.]mLZѬ;N"?B!'!s* ktƫ=aAuRqry"t,kNJZsbB#'͐ (]Te {vV #0XDʅ9aW簩{QޛXu\UY1۴H BۿWà N7`p1P=tSnv InFT c2q\ 9H*_&0I8N;qSVe}K;g $ScDK<PU l0A#8i$|O}Anț" &v@O$+Ԥdt;Fh[tj"Vb@(M۵G"^B`!(O<ZUI\-(I׎EOttzwP]$%!'ʠ$60sʒr Hu"wĵصi^bcZ1U䑌51]FKJ])P"!G^9V[5.uk'HivUNs Ĥ1= HvY cR#]yH폗>k,_@ŌVf &vpNzvdR $ +v:c *דҸ'IbE_Cn'㠩#T\o y$z0c H)!pN=*W>G @ۈ./|׭f;,%p€"qckӌu[߼00\g#G9u;O&2HbKn,F1 [=~|WD$\`)<7@eX &+d]Cq5%AIB72$gk }vEmZw(#X:MC5Tqj%Grkc<k{]gO&Ӻ~4"g#^pUOsֺ+-RKL]^>PRicҬu{kP&>\gvr3ۏtGsܥ.d(`ycOnk2G>.7A',?*}3Z3';ArOAuFA#Gױ91vGr:zgzR#lqWKٍ 3<n)sc@8u=sq=xHJ 8;NGUcե鏗3g9&K^~*6?8>Խ22yR#Iz$O e>@|g$8u#|~rCs t=꜌GqdRѝY4yEoN7z'cyPI$ p03ӽV^qNJpڻ[%I#!MyV4(aYbz5Vr疐vN'#cV dg$2z4p7#gr D<b gt,Ks}GC=/IC vFu$M2`pOݏ9*ewn R$pc#k!r>PNN20zz`B2XnbIˁ:q{&AÔ##0y&rJ T%O\uڅ 䪄oQsLjh1+s{]PlrIazg,;8w=C g*ÌsJKRG!G#8J: +]`y8>{U_$d8A#<}8y@[W쯂#T[^qa$|v#M;mo:dEPvFܶtV.xؐ=V\_lcj]F3`1~pK$+Ƶ V%P\0t?0 p([c_K|9PpxX22O)vc'1-$o+O27R9vbd1à #җ(ˁ O~# #RKN<ў=jXWuh֮w!xOIMX(TyO=GI!e ʦ&E9 O?Zx+ PC1^C9o/n9LV2;l% wozTپ9wwO' '`3nDi_o'Č,c A#pr8GZFsKV ӡVؾ]pץoQ"0!]|@jyTr@%HwmpxEuBN3ֱ܀=?ϵ8GӟN 94b*l@#YL77p ܞ=P[.DH.nU #9G\ݴ3ܟh9jXWr.2|zeR1QXmWkUbŲ=j`ğ0@z`;۰t5ι W;N# pck!۟P̻~c8GZEgRzsX7 6CʌE+gH9\{gzz梞tHXdȠ(V*y+{Lpb7ߴ@z& o2R[p>4X91̪Im,1Mc#z;d (܊D`r @*>ne5e0iO.2eFy#MێO }<x /(qT982an1N=3[LЀg$0G8uV(U1ᑃ w=+*3U\AH99rOO^*qWoASո$gֹYg$av$$~\=jT qr3x)l"sNӎ*dc'ӂ22 QC'jO6Ҟp܍y 9L(q枃ř`퀄|3c1GrK#p9sGrJpnyN>8)<V,7x瑂C300H9<~~4co8 A8bHlێ Qdp=~03F.6:$n=:RH~^@~>#z4 H}K`w}xUgFQh#[h08ǹֺaв c13>ڊ'A鞢n1%9}jg9RCmnʩ;cJWZ,z睪ğ=xߊ$68sM8ִSڹNI |X ˴" #?h[\K z)MԂ: I/ ;9ea޻[;љ<.#{uwH*RSrT#sqϭ{:P[f뎿Gݹ1Va#G u92y^36we$#O+.G n8I\IsAsΪF>919{Ʃl8R@<3vVp6A )|FaS~eMhK'O~5Kfvw"Tv._f*y >kۼ/7`X^Ixf)Nw. Rr)h~ey"z..tiEo-cVP! \Ǿ,M֭u..1n2(#دG_Y+EvGWS '|~^R «`)}ϪPǖ aQ23z>`YuP 8fR[ q=TU˛qapPH4BK"ۙ3^51rRp]:k[-홟so'*Pq>XZ>8*>RY$Ǿ3և.*vbDQ9#ӱT,.p Gx\l챳9A$ q9&O6(p+}m̱Gӭb IWi_YxKI*m!w6y `g ^sVSrG'hZvꨤFA':NNKڪ?̂GV2OΧsǥ|7ޝBvwS%AFÓ޳`\҄=^;DibA~PO~Ya [ !zsS`ɺDI p (b[9֟adA smyRTa03g$^$Vv#kt<.Nrǿvg '8?d|$ec=2yQ nme=U͌pFT=( $N9/Lf /6 cC$⛴}{׃^oa;d1jxzqHl$j4V*ͳ>BǸ'4OE$=$lRs#P3)и6*к(^^znq\d'%H9U%r9 ؃qޫqc1$c#S\t9~}*U'r'_{x 't=9yQ%{ ^r1խeFG$`ad1=6>}L2y';H^Nx{Ti\"A]sۻ#rjD~E=qEkʤ9`o"SI`"dv sS\Kq,_Փ?˓Sm~CNSc~k,XhFy'ێI .{ p>稭+t8nQ ,l%J)=*)ݿ''g\P fa$Ooz8ڠ9&X/< W#A ~=~BqzHPÜN:泙T^1$z@HoTr$B @ F>ۆ\_Ld#pC(a݁í4Rd*q$6iIpNC`e?lg=8'=묌<á0ᨬ=`?#_R) 4rS':&8G?C5N$$B::Y<|Sm#8Ww~`Dx#j9m'}=O}sGuhH,d}LՐN=O\R-(8<s۱=9a=ycoȩc.zw}l2ϧ:Xp67%7'BKae YbB1Dx͙@'+62w@UM+OI 3v/RQqfl[[崹qPȁU 9SܜvލH픶0H'hr0q˅H&2ÂGMAh\ב0~b<ПNscnA`x9n\p#"VrA Llcہw>cG˴dm'\\),vl^qәC( dC0:uE$E$ n TEϴG0.<up 9w~^ A.3XursrA8U_@4bk|> YZ9N3d*0$sȢ"a+v_1l #8+qb?w$e\~ϩ2fmQ0+ 6w(gΠ0琦%%"ӴN2MwjnN+D=@9gZ%NGhI$s ErWXm<$[xmdaH|91D&n$F s#|jq ]!?|őۃc<Ni)[`q5ωZT %lX(\$an5Xx^{VeAĮ]X;NqڛA%1%^vB4[ؤd?.8hR8a/Pg=i\|O#Vg2nab2sz9a#`wo+mJ6O2)mKg$FA<ķ en;RЇ>O9T [ 8ECt2G#c+VH|ٌ۫ؒ&Fb$0?1u7t$2 +|\x<x=0ӎqNw}ߗqx*n@Go8u|ܐ $*İ8hĞu#nq{})#hE GM+vaNqSzr@m^O;vR }~`8=ކVHrz鞀*G#;rA[VocD]F8*2Ɉ㞙u+Ӭۉ7N@1rOּDuЍ䎺E"m7_\vZqFOxm(NP##`H8}:sQW!X 38Li!SpFɀpۯj\Y k38$p[ҢgeAnwe7v0pVC9e 3\uȖU!I`9<)pOVr[Ӧ奉sdg̸;xt[.dnʯZ櫉V,#-tqۜO#=KU *a *"\F#WM`W#6ɐ0G#WmyVʌt=GktzV:xBA8[8 &ɹ6v%:un<:xdÂ6 mRG$z&N\<v ea2CОj@kz3=D*(zOoV98u#80IP;)⳶23wS;'$7<89>-=谬Fevd:qתĜGd/ԤB aA0KqU l j>1I(Kp{Mb7ddm 4@(˴ :U=#sKוq꣓X+˯>fB(=0 8?P8ӭyS"{랽BF:$z-4LNA88Nju.تO4F|x0Ov끓1U.891ֱ'aOp8zzϵ6sО}zk3 =[95:WctG$7 Xqܫm݁A`J|=2I8$i)E|N&.z= !N1gqg'yD6I6Ƣ5s [}V2{s|ۅ-&EV#F99'ʗ(ܮBX ;NG^;. lq&B4r&wA$SFT)$t>WN]ZƔљO&RAYs囂v@*zkIGtg>#X̟z6kWRKbi.[f^o\ם붺͞Ay_CJ%Vl[OpbWT9vmvwT}5xjC_վrLA3ՊL7:W2/x4kөO1'l -4؄G\M46q (zMÓ\ҋK`R_F tOw | `VȤP:Je{;lm #n"HxF1 h@j4 Brqz=iɵ&s+1PN~zGFxmc7Jk+[Q}`ВmGld 4j[-O+VG'8qԊuf+;ƚ`ʪFV9gwzot;H&S`eQ@罹Lfӡjzh}nQ1I& r8jqIgms#%ԀR3mCuqTtHU'guf`]êdmrWB6y{s-wQ7zmŵͭL! r4{#8 r9Y>$f.#}vN#`[{Yi6 rocR 47UI MKQcLr'=xm&atvbnˎ&_3ڦ՗ DVgbU²2!{{Vճy9] FqtՀb+ӗӱhMj"ygv9cLqUhmW9v>6~Ϙ (76%PzcpDە 0e>ۚ͞JiyY@b;s@ d6ȻDC>7`?c k ZB G^Juر >lA?Cj.d8)@D7Ws~#pkGK{]J+^[4̅rdc)=|GLoǩ}[DqP[hAcԚă$qSv~#9=ig53Z3QNu9e$>O8& %I ^/s<cipݳϭoboF-mmo-ͷ39n0)Kgo:>\r n%dhO39\6F{T-*;oye;HHU c$㎀v/؜4X! cFA0S<:z=QR/E}qġvrI^Y!3!.Eab2A`P˹bGi©,CRFV=xy nHj,U! A-X`K`{kh"]dmAs(ӷZ ,͸pyx`T18@A^A`Lͷ i װGu9Tޭa,jZ# R!̰dgcʪ49u=+.RWpD/-_ |`c54{OSɦnmDY)/=dFHMnV.V)GKx]J7b߯f5u]kĺfse̔#p_O_D3JuɵtgvnMn7P:cʞFn[x[Ӥ$4޾z3+`4H ~VnVyLDS,۴5gMhƘ7̜ч9h|1 NᏽdjȕVR;ߎGgñC0pbv:ӭw}WHX! =LU Żlwj8vLI-~m̮v tJѵe 6/q=E|aCAktL=K$vy'8&0Wnz׀vv?.N'?ʝq8xڷO͑p #qv+fO#yK =mH$NOw#ⳳlֽ>!87\wP;Ԁ<=R6.qu#*&ϡ9'߮JC]Iv|ϰ5>A'1lv><ԙ8QxS5s##}928|rxyg@=P4J tF3SZW1CLԟPϧq+)t`>o~{ X瓚T7ݾl;^{סeR4ZO+^:Tr'+^3QunWOL eqq]S{96W/ _8ZnŃ @zVto Ahpqs"X*2Gԓ۠ۥSlZey`TcHF;Tև<$)Os,imܑ'acV_VȪ2&#^VNRjn/}=b*xx<n+`f+r5IMg6]rH1Gwgq bVBRTR% *x=kѳ4O3їK*Hp`q_^Xʱ6Q@"RMt3 Hei"UNJIq\mȆ01*|[hvaԭO02|_T# S|^/z4qМpd.un[ cd|FOqs].!% #sʱ@5pұJ+GgFg\apH\2 Z fS "d;6]NH^R: *1m )/>qZ#*VV4cw% @ ]ֽ: U6l$)=O5\k7LcX?0IP[UF_[@1P>_0ߕd5̅ߣ[ȣ!vL|c\آ*8iWPB9RϯZv^N$QZxrgn6M.㞕#M2ns[yv5=} Iشl8egGco8oBpj0+!2,dsG͞9hq#wyF o8"kK)f-ORKu:Wʚsa۶wi)dc|7z .ߐ#!AWy=OME.梯G'*xS|{On3t$^6dAݟusg >CKVI!%Iczuuc7ںr3,O'fZ92,۲{c۠#IW.m$pCyCgWH±1>\ǰ{̭jilR?Fj7mݸ(Fax_LZ[U 32;w(lbBߑq~u5ehF@yT1m6~M@n?p=Y] .I9P8S+%Spe'롺TF'XDKFkjq`s_UI_D|et۷slW_k'=:疗ytvyӡM6yIEnm%` 2x8 wqKnN0; K R}NkLGۏҸ@XSS9w<᧘nhqz+*b(Y>0 Rp}Ҹe-Y+wxI$1aOAǹvvGB䩫=$9bAs'9I9w'ފE p s랂魑Ry0#|.``qzf3^Y \9;s۽9K'$cPIOr9JȑmlF$\Gi7UFڧ*;^:犫s"0?U]7}q?!ҭ~Fk=jpy/$USO;;pA ANNF ъ:c'9㡩؆v*vleqKe~ʩoך$Cn09xЋC {{U 8@|RkhUyH, }sӊ%n @rAfLdUDS}~mf$z{v~DkŜgߎϠE^Qǂl \2nNNKg#8<8x:crGTvDv'VI$~"%|,9q899Q˩avUP19"ntKp>'.d'žq=86NY g¨8p8aў:gw 6s 3p$:|ۺJrwڬ$el\I gn U@9$R/4'rUXAbq^)Y]XtzFvдhq`c>:NFUp zuQv=f{ỵ囒Ttn{޹+<ϻ}=$sSL M3(GJhv8ۆR/a=9^]JaKȡ-Jn+qA㞽);#<602X׷5Rw3 ‚NP9'9*_O` ,dV KwgO͎2{:f A.sMOBu!vp \YOBG|bS;`('3J+=F^RϘmTPlZLE_%_=ssMmbʑln8yU,'jJen~e,q^3۞kI+ 䌀B*g"38Jnsmtɫ mQJc$B,}{ȩ{*ps,u6yCәJzd _lXӡD@]|ǁAIS[6L4\{uGNī!F*=Nk#Ry8oz4})L6\Nrr=51tqmMʹW#޾- /gcZG=~7&2݃UN ?{kK7N+Q?C_T ~?/NuJC40IJO~p8tSZ7Љo_^_yZ!w!3N0zw1' 1ߊJ֟yhS\#gHˌ>VܹFIךΈoWS\.p n99OGPȿx+2˿ϩway'mC<79xp};h8U7ʎYc$+ۭ+S|7F;e0:Jӝ(-8b>_Gc(8+秋#KO2 L~u![̺7yhS?/C`pqbAAʖ' sWKHCЂ;@zZ{NנVW'jOO#= eT J)#nr3OJ&$vƝa%|dDM21~^>\ڼY\#F,B@zr+7o^U5m{xᑃ}!XrIoI4+x-m?/,np"r<͌,bu)t*7w!'ɪ0'~wBA{G$k2cpV0;!X9 UO¯gZhBqd`s9&3ve' ~\=1p[6Ðw%@-qhpI0=A;P"`H'K8p oyg#'<ђy$g\ ̄}/BcO^hS?:<CI^qS 9 1=T.X9sǡtR_h%vF oQuLp7G)rYs uqM7#te#G׌Z fXzcߧ8D[n26mۡOO w4P=FP~`x9$a$Wr։M*"dǧN!y0s; c'=+2FFNym[G`N9"kʋgb02gt0eT-؜dHbFΈPFYO̥TsX^dv]r\Wq#q0?_1r)[=Ǯ:çIlҋܴ8pyۓdVIp 鑜zVc80@WM&c2θS?ssz`ǘ<:2}H##q@5V`q>{1zpsƐƍ˟Sb\g郌zSҽLs<Q\:F{{ZRB:{vݑ<O5&zqJȸTI9 /f^wxdSx=Jk|>l:njN nG21w=gH9^wVd(z 񆵥igkwu;"23l!7 M>dmQB7NzMFwZ}M\-j7G*L>FT,V7˃~%u-02<e<%7ym{ٻ俤[ !-&!Yp>Rdu^h 2HV # Ӝt3_:8e s1vǭ aBs##n:{ksqzxc=';uAOqmnK'}9;xdS"c|ܒs1S ]'_n FPc6gKct$=FO=)& wq~>œi$L9}8q2BJ Sϵ<ӌc$yOgF=G?dsң#ߜO=GAÜ~5^} {r1֥X;H$6O=G#>%Ve;ۺUi;2CcfܒE$6T ';@I1:d9!BG;f ˜;~epGc ª1o0HNv䜜zg pjc pNyX%ox8zZٸn$`0=L=ЃBcʐbw(d}7n7~8AavIcIFXpGNi8@yyۥ &8ۍ rq^‘p38,"]ņzzjc c$L䏧SLhDIdt:0}!a6N=9zB$]ŀ\NsRx*1@!g '$W$2G^PP˞Қ&! `yfҢHݒ08$9UrPY7;c %Nrq;RXmdm2|܌` 5r+uC@dvnHctY\Vڵo)CTƨI! g$`sWaF]aP T*}3^N!nN3R%u$+^[Y=+TVݳU#]9[؛xM;mqrˀpJ]f6MMf@BHpx#zK_KDGCvYT1S`Q\kk,yOɵ)>}瓹^8O髧A m&g?Z6봰#"UpOǸpn [mh?Y"C(@\m gg.ૐGE8WJfMp_"bap8asJ.uTHX| }u늆ƢـQ`H\#gۑҪ%JA w=4 sر1f#'nxUS$( d#A㟥7F.KTpH+Z1_ rTR)nhSs<tg9niX6 FӹާL19;ҵP/'Fq*]Ì #3Q`C' R:5 k@S9'`a9$t(`cQ=O'c42ӟlziv3ȡ+~7sМp3jE8֩ ퟪ랧V~b>a0z\gI [?CҴ`[*hA㡮rZy5V 䳀wW44Gy.|Upv@Xq`xV[YR2rp9#(h1{cF3@n 8҄w%vɎ};*[>Ǣc#<`ѳW3`bg9.>ӻ{HoJ xIpi3( !HFpHŜ;+BP[s%+nlg͜⻋Gah}2JȰMBz0#څnfvO?H$bc'Y%]+ʪ'`O(2 01U.39 ?#]fV0exڗI+G䧚HՑY3sO#'ߜd4D_,g-򜑂}z*3ݷ`*H dz#x]#t_`wCb3#۞:qT N^,8L :j1p4w6pAcRPGO2z6I!LJy9NSH WOcυ^cn8>i^,'nB8/',ۈWgg$1^y*F <؆5LqI#yuby*ONnB'͎HgbZ/̽QD99^#+2d/t8cB$+Լ;F'Pc;Wc|w].8KUCVXv >Rq#Һ_Z[UBC SWhjtZ&z ;y"`iiRRF=şZ7Ķvc8wNl7ݭlhmNf#HWe"XF8=k.@-VI Xbp ۏzN->Ϲ1Oo3Ѽ1hsjI4ģ,Ș9YM>l`گo%ZyK]sGk2+^zTqS4_Kh?WVພ5IU̳9bfBO6aI|z cqWi/rbg$ގa5}tR`76oc2d_6BT^bv<~W)۾9-kY*a,v=\-ڼ:rB|p<%hzi{uZ)WArNm xm˫JC .ǪpsڹFg[jxr\Nq8=A+mObhbU"!9`b+k4y[73yI&dPŲ9JHQ 2`{yƗ{nDQq#KuP 6rIU e}7mEPX~'3[6;.3pI-wZln-6|=;98ilZVw0'A##zim;YI2 TwffUDy&E.Ces8ҳ6pS#{nloncHשU+ gN4g''pIV;y*ݜq-<n_Am m~JA*w2&7s+#!HKiQI# scdQ,Kd`v~ƿ[<`6A9$qXݤ1.RNO֥] }̺#Ɠ/*uW=V̗ ɷuUS&BT.[t$NV27c*?0r*mW7:6VW[N6]N}I`O۾2#>a/?.prqffUcDYԲ4z7Y>a;@=]%e)F c\n1ܟzjpw/;$ = IՖ֒w2v*m͹sp0; DZE q+條Ӵ3H[.#ۊRQφB.w,IvwNvq}+XZ}ʯ7\mqX-]S~F[O>tHExRUTCޢ!6hsI`yW}re$kuxnW:s{{Xૈ.#+<x@xRnP.Y"RĀ% J슊Mǃ(ޤշf'eg$z23@`<叛{8@\gJ$ڷCEӋO^%a0ٰ(x3ҼORWSb>'=hO_R]KTK]mo,GMWyB$۰d:mluR.g)?B!<́^"o*BѰ.+A;斚j{8lBi+zޕxom|C` r=+uHAUcڣ.x>>0{|Ed_".0UI^qڱ/-#9{sWnvlnmr9c~oo{W;${Fp3(=}+O&Sy$u'I) N'۶:Y&xs7ArH9HhQ{/Ozհqc s؏C@83Ӷ4g<>'=Kir2l`}qj?y#q43r;y#=Gҡo'y.sN~ZLEV8 T#c/xSӱɮ:ψv9ɦPenaaI1z\PWMh-__7;>x\<[n,3zgӥmQd-i @uG审re\_}:jdZh[ n WS+.e6<zǭ-./\9nPۀO=0rjHN6F(,X:wKzM'T]ZOx#8^g=[,y *|xkZz4j\P10оn0ڸk 0&S'h+?xsNATV^vtmDїw†q+3s M8XRi8;}+2N9EsZ(-e$JDxnʟ}VT2kfo97 nb$n'Ώ 3ִQ%o| ªд!b}r m5;Zy.LCvh_ba+DK dd-&O|8r K3aAݸcN*miXԝU9<*7{dqH^'no9%GCӥmc-ǂIXRpBq,޹:UԶq J#*@)M$#GG^$n}a_g 睈gd7 wl6q"1FN9#p+ЋVԧ3 RvnߕqsmNyv7rWF:pe.j9=I"޿ K 0X'#{S2BFr`Črsh-0 +`2]q$滴Q;zcֹjG?WJo^{uc9e$!mܮ8㷥d[ #p 1#^yҭ,rq]=z֗@(9'ܤ?Zda y#*0z" B^vz 9c@;F9.d;{ `seRp0nO&zd{xݹH-`mZyPq8bA@5a̮~obQvRG9&Q(oOB ! ܐ@O⪾H%NFv;0{UqV2|q:&Pn\* < ׊;RwVd0M2F %x#ϓ9d*NI=qz318鴝q܅}'?0ے'9GZ_Aۑ$6G1:P##sq#5) lV3B2L6gq鎕6I"FՐCWe-:܌0Tr<{ެ4[EFۃApN;U)#iح sU':ϖ#$qy bQ#7m0ʂsׯ5|1ޣgq8 _\8=>嗾nFZY8m@8JΣaAP{zcrK1c!prjƈ6H;'8R$w nd$NOlc-]~KuRIBb肍0`#Ln<`%3C4P 57$0wǵkJOo/_39ՊBh!8MaUD3aC 6V 1NCK&>+Ѕ]NfK $8l2wW*X GlK6C.wAW8GJjUoO.JcS4N0fy2Z󴑒Ixymf=3jY$%L˕~ALBT'[uCor \)eX#] -ViLv!*FLqFl(!ܿuQ40dc1l79Az];xBجG3$;c ϖOHa!%y'220o_#mk:};(27wAkP8漜N/;==Xu"s?1:zZ#8UrTsnWo~ĊO?hlc>>󞇧89Ⳟ" qݞp>V??ZXrsN?ұ1d!$H'^a- v JU(Gͺx.K*$SY4*9`qvW z/޷e&.fco9v/,0p;5}TW$Q\zַ35` TǖyϭB 1̻eLrUv;5;:ق!nRCn8'㷭u&`~6pz>f Dߌ^vSGt0WiuwʛN ,8H5a=ʲ20R/UD#Ѧ&XY*˴>*e0I䌒g_[w>[6ZRV˕!?]ͻMxNǻoW,9Whyh#Ԗ"Hn^Ts/ ]Q*:};.1s6 GaRWFR dY )ϴ(\@U=3>O6. 1ϰ1V8l8'*y9׿4Dt?/ˎ2?&;' &s:dVђW1N3i-|ܰ3ϵ"PMޅq'qJ$ c*,7OC׮h3hs`zv;o 0F3sDanX>٪Qgq<3Mn+󓀸rCq98z/!<32Z6qWaK(ld0䍣=v,ɸmNv )]_"qʲjgv2rAPrrx!p=00G=M"c%hRF8ޥ7  ɹu!H@={SZ3 CsHx `ddTԨ*\q uބ}?Z`X㜂r@8jC"(*dà۶kjsԂb;Q L(;vU=H*FMw´mk)] hu9nv:OJTpaCʀz9?{uq%\4kxܫ*o +nS0dKf-9~*zQdSɽtIMd<=N##;C+3emTθbZ;kGd=u("$GjAն7>8 rv08),8{Zu֓pP6+P0>bF3ָI?mY8Iq!BWvo FMb7cYܔ?{yuVc9ɶߩr43HeeCgMg@_o^G5*(FHvNF8=N)+T۹sU1rLcnUCI Fc:j0 D'rX1#XCyX)] |xsN;ϸ$gx&`#!IP\(ېIW&}OvJpqN0H[v[" mO]$Vq5{͠i[Bh<$ꬁH$y/b8{!@+ZiƋ|HL]ώ?&m i ?&I88 ێzy-nz=SNvhڧ8?0 g$OaW,tY:a~3ۇ^+%fidC. Os[B7ivF0} |x=qҽ?H:l J\w#spRmj|>➇^vDrbN&X$8si^Vkv \ztk[ n) X 'cE=!߈ycnQc 㞾L|e 8zkNͣʩ~2vUB*brsf灏18JJ=Z/RaqВ0WsB:U)8]m=A~'Vf# ɻ@,6~=+7 S Gl3*,tN( 瑷% ziDʒ[c1u $zqQJu՝pK~Z!026ܨxx2:ԙWr9v8AWdLGA8?U+!%rG9=#wF3}sUqeK$wI)u-1x\dq(,p~ld F!FӒ[J횺fijswe~mxnxX *"հ˜lSbS5y^6sg=rJ2[>aŽ07#e$va8*x>鴞:ҤgcH֢d}qB7[ :d z^!H~;'BO$RFr9'<94&N3w Ğ2NO=jO+@su?8b9_ZH|{{9T2r[L\w;qAi' }0Gj},];dy}:{L',+j͟44 tqy93F;*<nOG'ߨ63J&19 yqI;yB?*Ì"NO`~yJG^0FdcԎ0>`qum_W0'3mJBmwUs;l:t|HÎ?1ב5c;4}qU9vYKB +n8 vz>rU<㑌ʧ=8 ~D)P8pM(>NNҥDC،V@GSd6I{z:ui뎧y2s#Bxcÿ?C-t1Q=9?z]r0GtC/;ecR \qrxsS0Z4tchQ 5=dWv)4i(~ZC+uMRxm2 q':s5w2fs!R@aZy!pA sJ 1Е}3ԓCz ;##8LZ[p0'; 3n'p:d^Wbvo9a sۥ&r1`'#qNj_zON$|çNy={/^O\ܒzghl9:wS>>]XvqUrqR0 ׁל!Im}1>0Ӝu=:T>8 PU2(({=%& ,0P;9dWKirjp^\̳֙4r 29'bF$8lͷdzFh{$\Sy ?JX'9 a-O|C?##7rBp@ib0(8y(xySN{t9v[R9:dzjQIy!G㊛ ±gkƫ$R3!R p1<ɾ9Z_C"|IaEa#r~V苵gCV#h@7`0`.A>^GZOfRܶIo&T0 y9լڰϙ!T2ʡB/`xzY>[XɻMmt,'ݲ&Iz'y*dc``8U=HUahF5Vwe &r/U$`qY 1#{WuoHP6UNYرǓՆX㥎R=:v8ߦzVc<ܧ^}XY\R75ZT  gGRƾ/mR{w<3@UdA v*N3[ao檮8*f"XN3bX}9DRsk57lN#aP'ewc\O')@FBZr-!Gi?s3JϞʧڭ xW0i$N11UbHv@ SuU%d뤖A9QW"0v`89(+ WVuQ;7r~}_oNmF87 cN8kϫY;>V $[5C9{x펵yN0ca=yVnJ;([v 4=x#'59vF:qW3zMJ2:WgE=kNNS.篷e##ێpOO7HsG@׏FS$tݺ+jJ;r+#8_cCwL6#,W{v49,Tt=vǭ$r#^@9o;䟥2<1$ @w#=֪{ &UR;Va|qR2U0K7CִXʭUIN/@:`t8qb%{mK<9UN3=3j6uSZ"mþ:_)=qJs;r2q?;s<ZAב@c8U[[49=Jc6GqO?Q}sygJ#7ppq"ii5w}~;י^?OJLV^8K%0`"1e~V 9y~|x3jeܶr`pxs.tB9 &;dw^'t7>msżێF =86oٰDPB`ݍvQ%m8[\Q 0܀=G~Փ#y푞+Kd98' >\scN;yg'ߊ.Aa䁸gzWHi|ʥXW-} y/u?qI)MrhRIc,\N[ ,*<ǎA31'GN+Դ}6Sִį93$UnUG^3)Q}mfgúU[3%vpmcKQKj cN\zqֹMzy$SO,F &*(>0i&zF⫋yk}C:T7 k7pe<BrphjѵōbEXc!oQqzkK2O+o͊i욭 I sg=-j $˦gG% *`SGJ/2eU_mg| :7dhR?9؎Gc^)}zUB)6#6y+Nգ߱*$3pFprSwwu[,^I^̼򡻓9hzF1dq7_nh$@p vyڬy#wH?'%u\8< !ߵU_ZDd$eJ6$Ϧ:UӢ0`\YO˷ATYy`Y6@!x-OO7cks=]Rms[˼9'!: ݳrnhZܫ|8;$v v'EoAO;J GC7+"XH.S,p\Tc'W|/ovAD?(' x@$U{^>rض^Zœ:m9#V~S{ar".2yBZ?+o@uϚd{j'T#t-i"+f^,Y<2oluG8;]c2 #mK;HUB7Mt*|я+ik-q-xs$#o1I=xkhAQ庪a[yci^Uۮfc0ޱ`s 4wuZ:غ7ܓKu ĒH.Qmt76$A":rQKk䭥9D )v$<<޼G_[nM>/nm``,(cߩ] Xo”j)h=\O ]o3F$ .3=x%Ib07o!8Ytua9{SPq 6 ˉ2 BX|gq&6hI+e\{$N [҇JԢAqjJSF;cSү%G0Ȑ7z^m=blke@E9s/teH(`C;pjmzu$BL,@Qe19=G^2{UV }782s5 ~OV(b3Ű:ԅ2f$.H,Iq'ɨ#uw$y2 ҵ$a刐H$6 IlʉSF80)r~4X`|0tr KUAHFFM\o=zLvKi}ȑĂۊ?Kdw ifHbZ5.{T8cy&X.?xp Hnqs*]>`2##l #p$qN{z}]EiHNJ.W\+.yJ|~`F U~BK*"Bق@Fڭg2HxGMjy$>Kq"`pLHR$Fiz J}ڻΑF-$¾s θ+$"@ۤ=kM/5sNM3tYG>ST*$Y̩#qIItwS^hM0d sr yw#qss9^I|"MMc$wg[dk. lK$\{(wLHQs\."&wt *]8^kU _yjomXN4jO%dھ|c*@VfrG$_Lu vCar!{׏(IhݶmFwm֦KepQ2@g- ^{N]~?+;dU%kK,99O{pMYqގ?{~Qtñ9""Z͟0 0ꈼ9pyr\IW啶{x& : X!sÂ⺄݀^O ;N ' uR2MI EgUع0ɂ d?u*$*cHUe~Ҽg^:MU:~Q24r7̫0ӂ}}ެ!ZH$u_` uFMogCq8YmcE Ȫ;r&sMf_c]#|2(pI~s_jsIvͿxN:SY27trX` 0ذa'8* @ |%Ga2[wNsA*t9R*+22c 89iA/P1P=ӮNA!RȭCHIOzME `F7d gЊo𷛻x֝HgLj_Kc&XΒ1aʡa䏐^KB@*dy 89'OlWM&sWv5Ĩp9PO:gM[O?{vI>e5,>v}'Ҩ[KZ*O\˝`KpA>dzq[#\a7RzWͥy|Ϣ3.r @<_I$ם^^%h3; "e,9fVc8W.[^NUOM=7w89*e|8{WwT_ݶߕ_3Y_%N&C4ccԎK`֮(qjYb71v; `~mǚ1@#x$vuCHJ. 22ք6#s€I WHFFUnp%sN5=B]d@JyLv2;g֑TIhW'vvg'%Haގ`H;Oqq߭A2ߵy8p3`5~aՈ\%}:kFnyqFWaUG!ޥٌ6 ͒n 1ǧ#^Gq.989:_96.Hlʎ}*Uw}͜tF+"Џ<`ʼu7T(,#$rr=AUU~;= D !+bxst1ƛ6zm;ma +SGbe*Z]LdNB\`s^e9:6*JU5WI3|+] 12ExP{g)iDyPiZE'a{MtƓ3YCiGJ y㕣z<2H83ɎXLawwkJT$lvl<V*NOVG)JI J_p"@0{;lfwGkxǵ.>" 2@267gֱI%˅QDnHT9=je^׷a^M&.\52A`zqYjTdV; qoS\2)IEPbb2prFr@*yh9\q 9=1+&ƣ*G lv6#6A+9\8إX ϭg-hF6;8#B[/\3*RKTYIB'jZ]K>|39LaAimt札F @~` ӧj-6fW\K oA"AnGWKިp|ry89C4ac'grII#\7"Jqc*N )Y0{g3]%mf8H=kܛkd}^V/pqv>ۂ {;W6kQQש⮋r '5#u,0@;KeqOu cTNWW]KoMK JyG#[7y;q+&X+uLI lv\VnfOκpOF3Jkɟ+(L!`'#>{2# TBbzr@|=V瘈8ՖYam͌)ϖF?uJRLR0 K(6᷏@k#O*nV% X빤a+cq^}G~ՌdR:{ufaȏr0uuF䐬q<]͞YT ~QSޤg|G p@#?eaVupWd3*-3o3Lȭ贘=L$7 X88/m3Ҿ>jVb**€>u4Fsõ)sÎ##'S8+|K2*6,꿍T:_ds֓o;?,>&y!IB߆N9ӎU ;6wr9NZkF߯Zꪑw8~$grGҲ5n'Y6^sNt5On sc\ɽ9;9 ~Vz34VȢ $IlqQQ) c-8)U|~#ӿJ>#0 H9 ^1PeJ 9$Tdz񚀻/m}qMB)}UPrY㐤ZH/p*sވ( YHvv`8ҫ.҃עaբBQl6z ?.ӱce;I9h޸==i.ȉ$ewwH;c8(˸.ri$xPhPq0pF2:v~|n-Kc,=A@HD>䜌e=17rhc'^SD29P9ew\v〟 ؁㞟ZIHp?$oہEqZ1r UUxr2^=[$29ʆx( 7zִd0 5-a-i;wn라ӧj`0A`҃-g?/<+dvrJ\6?(ӿzZ?;zH9Ǯ3ڝs.>Qr~P8˩w{{Աe@9'#8GJKq4[ Cd){S#prp23" U2l2 > RC99{= fC5a l=8yT@`m, 2` PFv}OIqSQI8*s;_1 1|OLzQ3O0R{#*On#6J!L1傃FNCwX0Te`~b^=och-Nrvy,aIfpH`\p3ǵqq1_F7Fr: n+t,%IRTc\09@cae|ē8RzB L1VNkO|ev\d * 2j]N~X|yc? rg"<(%Y2N Hy4ܛjevVr?>FcGSUqn;\SjBo9W Bg88}xjMXY͹scҗZj G;[~ll%IǭTTv>Z/_rXm6+YD]H>;$|#?<0HD߃X` \sw;D#;[q#TX=Q8fB{>Q7|x ;jH?H`)=1v48rp y'H$ # pwt<5禅(_H@6xx*GOT npy5HrvU@^q8Pz 8d֥TMǘ -#sϐB`C'oCz*l"[oH䴘 Vy. |sh&dy f|~oGQ)pz{YgY|@p1oδKfܚ4sԴ2B?G1=7tj2+>F}krӒ9rk~>@s4vS8 ux8 Nھk'9psW~٬bm`rY37Ax{/*I _8cBQ7I 9&L.g$_BkZ0$G [bP*qJUJWe>5˲H=*Ea~k;cÂZY#[TJwrih`K3I.ؤVcHUXEniD`$D! vu?jp^-irſ&{V&z# uqҽz4\E4+Dtݒ~ ,Tܦ<1Gq &1zv 2avS\-ݿ6br@ck|G|dvF8QF4ʣ+|Hda!~eR#WWpͷsHA-؃>;MFȆUTW9.y<7On;d⢌Zd*cvNH'`g~9#0G9>䞕յsr0,rR1F9Xc |FIK5K:H[#̍N N;`]T!Tyb33:sW^FԐ"1%TAц pr{ynNNx9iܱR2g9=ǧ*;n`!@b%>|Ǯ=UXXeتrm4z1p9H Gn؞E6>vʧ'-ACBZurp>tF u)UC~R::`ֆ2,$.79obT?1q[kgߵRBX̲" ps榢\&bFq>@Jfʤя_OZhFB7P@a#\ 0p8ǾOB qF[FÌ 2NC F:[,{䌒qsO?28`{`]H # 9{p:U؜N0T+I 9 {8K^qx뎕(s*럡Hp9$󓞜չ/$gߏZhCIВ@ p3.os1.91ҡc}qϘGqϭQ#F {vspEnî0z d!8_T/9w~ji]sdXNG<_+H9@{ۊÖW@%X+r@/?:V 1<,~^yP6|3tqL&#qp'-V %wpl_7( g,?(ς!rx @luw o8瞙ka͎7GTu{84Az| o&LL2Y1 m<0}*[g Y 84[:`,1GcqD䟙<wxW$gl]$4+cp %=Z,.8$E=t)L.sp[?1`O!g:T[  $==IOP;pG=sϧ'6F:|ux8稬獝@C d`>k.夂4hBw3m9E8` $!HfV(@=0GVw[8_S1ӎNo@U ۞dz %{k2L$ǒt!?xk{E_.80d,_p~4OS591a< NGֽRh> s=r3\Vwt^un![V\| 8\ܤU8~ r[OT=MXZEQ?6~\_Ұkg"9n?k[3=EHlZsdy;Ҿ+?W?=׿9+=N3}xOIN9%sH~v^ONrN&'8N?犴%F72c'\`I_m h|wRIČ1geLsV+=Nɸe$`}Ҍ:;\:HZكW@]ǃ* 냜ZrNg9~R*} {`w3W1.݈ I'9'q6=]B8޾,cC8=sҔ:]ۡ+Qblʧ8'*fGGFH*0{")_@OPz=jO,v+׏ڵЍD1 vߟT<8# =[}ċg= Jc{sD"c:`}Ǔ#Z|1zm@9_^O(~g~`Ծ_SQ%ȏn==sSJ;b(\O=Y73,hG_Sh9栽n\_So|:ÿC\휌#p[?X LPsv# )'K.T7Lh;@޾MSҼOj"cSͶy_3I8Z;mDԥemn#x&vfǕ(|:|Q1Bwz|ńzn2gҜZE 7$jF%l`1 7bȪ1%$0#wc?ZA{I8zw; $cޝ͒ 7p:hf;erC1$:sP sʮ ,pqg$O;j$VFw#= qӵ0$BYrh8~^@0FGm\鞦nszdmg'A8$}jv&x'H8 ngՍ x' l4$@fsV#`ehQz98IU3H"#o! gRI?1sw{Ib>26Ӱ6I|:Ra`Ctq6;bGG¡0Rϟpr[ĺ$Z$af#m0߽aJ[ߡ5֛<du+d*'m=6H!Tq3~k/o ſ92Aʲ=qS-NvFy\,*˱ こxw|)}A,#cuf,?/( ATǕgVhбg`>*z9;ǭ'+>nF HNVu2@#α7lٹt 8 8z{NNqG~Zz ,`ˡU%I&V+Cdy߀9{ ])e/3:rBl1o`p( zW;B:QnsZ.t~cЌ5lۑ†xAmUXcFO{Q:\uhݞ{Џj: Pz㜷tW'[?3i62OO"2@:> ~<?R'@w7x'\L])2 @svnyG=I?OWpcs=~ˆ]Fޤc͌ gkwmO_?\t2%̧<8,NOLr1y+Ȭ;i-pu c^):_r>wn~9M-G,п@^C׎ Y#'8==*fH}' v⩱=\O[uǧ=gJ=;~^iyu(pOC:W_& Faj{+nCNdl~HnҨmXNIZaw21@U3y=ha-$A郀29RiO qJjH$uC\wBD)8s畐#0{W Ys=_^ E]sMDnU' B*m =q}/.( 6j67b1aFMn$Ϫ9JRܬq1P=*ݵ[kkt? H *"4v#2 x?_<~9pFc4Qav$A`~hviwkFשv /tCz242*pC1c*zޒlcBp m^ 20#pT԰# sִD200\1!G/\Ӯ6DQNӐWr3OsMo~jzOdc̎ |d8b~\I*S[V7gTpv78)A5"$[],5L -,* y1p1MM1,ك̣ v=3[{9Rr֣,^j1 Em ^@=>in .`96q[|)>juno 7k x P.4^ HJ7[{McrlV"Mi>_#>bz4kI-Wf9(;5~i1-߆HKI`1V6#U5[ccsiD\Jz9U:IsǚdPNv4[NJO[[Kye|ƕfRw|8SᯆJ`YxP¬s*%5u'fyNs({v<γ9%Ke˧uFW끐OJe>`rlL*]JSnrp{W<=yd_&zu~=2yJ䕌FA5w$+0tVm˳/O{rWݕ\$L̳(c22yR)njHްfFPxҵ\YdYH7x|'EȴX8ʩ(F:u u1N-=q zk̑,;f 7 |.RJ̦"&" J89*=Vqs!8WR`|o9毲=JAI c+cvl'I_㍤H*LyK5Z"spPjI=zO*| HE @4&8[c֑2c,A<<⇵Cq.6۝{Vv6B%D\}cb"#lr $1g2};WAcAۈ'n3:@SỊ$ 74@_-\<,UPkdجJ`IU{QAbJ-iF!_BKSXK,xg\/YKSh,/o`!e.1#5H5 keDc&e2HsA=1Yt[꼎X!, ;R &%21Ἵ |"n@u%9; #qsΊtV Gma|`RSd|THG^=Ơ S&(6b@,<>nH,O΃;%=;M+r,hX~YI=(? n:p>@yTysiOoF'n^@Qn®IpcIr gjڻA;O#7 s7{03亸7$;sa#^᧘ M,v8^3[Qߑ.J ${D~oݨ$t =+&-R2;,H%(qة=rJt vvԑR%gFG;S7GLs$c\n>G]9k;[Y@>¿:;c8PNCs+29+\dv+3"]9M^Y(|<13B!2A< x^\-/*9R+S,a %6[D⮹i{stUX#e1R8=8O\$s@k+FA|sR~뵾&m{?A}jͭd:A r#z|+o] 7H;d bJjϭ;pY^\ef <F$vL}:t_և85Ԣ٫\=[I>Rӎi\kC&3N;=3?JiM7<9ɓ,pF}:RrIIR؇P?! :6!lǹǸ?1$$㓌L>8m|rGs#Ԏ灟V2}1O(y  }2;PЌ 'IbBcW5Ӈ1F!rx;&<<[w:]7XH°p>Fp0_>wemqoRE>hdy:ש TG֛ݝa\n nA߮Ey}yXPkc8PONtMi~;;oE>Yv!X( .3nԟiU* In.΃=+J4~FpOIB8e #T89<ͷ?)\g<23Rѵ6Qx#ߑ;vU'+tep >@Jw~VŽX郍F?1D$v:vN;)9`3( ]rÎi0,Bn9O52*bͻq9)$ ?V%W:j! }vܹޔ'Sx'g31Oи| g's^*v x3VB9'=i ZKEu$zl;%ۗ,+p}{D<8_1zI?Wup2֙6Gܩ;,r/xL6'VR۶_^3^&+Uyvf 3n2{| ks0*θA_p_ l|͝ϩHD \G@Ywsے3֭v1w63=9fs\lV=:([tWqXhN?ɮ*ޑ`;xCF(`W|>`AT7dV|,c8hخZO ۟jG|'Yݞ5戣@%^w-/r_+p{ \`ֳk\[ۘɓT-#*ш}Ēw7>õA%3 El0S)9^r*{RJI[BK!>]rܞMym0&U9;끑T7}uا-1l+, 9J)'%NAFϗ݉Lѭ ƘT`l%@Gzf팧 ޡF>֟S8rBǭ^ylb8 7/'*c̈K?ۀܱl 8>*cvQ|Uh˗0(op8#'f|RFX%č*x>v+9oޜ<Ъ9>Q~b ''7Ng%Nϕ8)Ü}+z=;@r9!As9=&)Q7:;m2enXUIaMbNA?pך4➶=6ٻp@;NF:t~5bБ;xU?[LgiRrKg:bT؍۷3qdjN yPpӥnp(Pþ0H 6OL3)8q9`dda6PIGCkN+GӿOv>9;sЖp qzU CG:qvҜdi8E+8xOEOy҆s׊W!BvTGF~VSF'2TRh|ʗ%Yu4-މ=ij`Ǹֻh+rw3zJǖ:|팕13r7qƷRRh1 TuSW<2ַ5[;IԾ;}=o[Ȫ $JrI^x-~c~@rI݂[`p02+F92dZ9>5nDr*j.`=F+^Xrوf{~?Ŭ*lRv >t|E#]'__SYj+nǨu mn `T8S+Izgx|K-2N|U]܉FWW. }7Q۩EZkK ZO)I,Y擐[pzyvq? ܛl%em%}TJSjw7<5O<&6%Wbw;ޅVW#7#;a^FIqVRq>ZqۑZt3z&;# /O79OAqG r?t&z`zvUspW -'3}*Dŗ~$1P8?71Ҩ321>f#hIo y#0䪠-É,GA֪ X#e㡪+f1FB'Z]+vq}z %U2MI+s#a8R-DKm`2Ce={:.J}wt8: If^{Ͻ8Jq#}h؞3†BK/@xV*.'r' >ˆ.$(t7}3߸oy*0I%aqsxV%߀TuǡjÌdr>㜞*=Np '${jdĆ<( ry#-y^s'GӃK8%0U@$ׯJf*Ē7 1Gs;ڞT~e# zd=)vp0 $1_E3ȧyA³X3>(]G9C6\89*#*H9[K8aTO@%`ޜ/lMJrFAݒ3jfqx!W* =OJh8ہ֝n=Tڛa`d uI=XEo %wp#1DZgFcUޞYR^oRsqHXg:*4wi&c+8p#9UһYI%W;\uvrOS/ivB92A8:~5 %'Ѹ>6Tōo09#qssޘeGlF1'NޣWw |sUfnr?C:TlDW?t9x9=p 3G1\]~6[3PwgqQyqpݴFpk;r"H Q֤  c>$hva -dz&N[$/]ПҹJQlKsvdcݪ(@S\g=k)[6/%J"˵m'wv˜md0`; yF ׎2k2{3tsҥ~~@+;|qyBr9R#zpzvԛ} ˜wEـ r~ ܝpp2N}iȖjdr9BvHx=zرw9uH)ջ#Un@v#G* `<溨|Tɉ^Pf~NϷ:ӴceT~waJer1FINWӷӥr7!-r6Xd9sּlSs I3ܖ8l|g/622Fr\s^b.U=t##bX z2 }?!xh`׌y a0$]1rM=}jgtljdNagrkڥ~k1.f@,U|޻)JWN2ֳ 6yJp*KasfퟯLV)e#;c535Slػv0uIP:2oƹC{mɍ8`\yǵzVۇ4jS~fճiqzvync==JKPuVG+Dnۼ\1]ŵؤ+FtYJV;Q="Y;Ka?{&XzvVO1tc\w }NNX] XHwWv9^A؞5@Jxd瑒;5`֧Pv#,ņH!71'G-ynDX $g,^/7>VrRu)"+yvFH==Al'DInr +jISG`9Z? 9zKUۋJ~gtIA0Kp tN ^G34q W]>B8wqqgJ ՗*yj2c7q.#: 2 ӿZc`$A[w%GtGfe;@Aۻ8ۊ,tiO-lӽSI2 ppˁ b8p8}ОaGv4@(W oA臅Lr@^:> Vk*+qD UL3\UqqcT1Gnҟ=O'=FltECp@p38ǽU`:c3s@Jl$mp'V;R6V^ioNOLK`Fs~G5mG> 13=1ޟ؅y䢍# O媧0B>< _OKsdn2WRr9큁yq؁BC |9зjCvRm: UVOVI=O*z`q7237>Ո&GBFHgt;HЌsT""9|H]vv쏛sN GMܕmn韛GqyqWxV$$qKascP3ROӉ/M_cFY8×Py~VeG~S:m N9ִܮ pc!LܽrI~a|۔3B+r̀89 :S`pCbwd}Wh;H=FтG~; g}1Z*Kme0c$ 3ֱLxЂ 1QϨQ?{sުg# 16O~eoO#O$bi~8E%8۽Cr862-Y \b ^8̩x'(`F=C2rGC[Xd(WT>7m#1sL'h۽g `ҊHmVVMq`2qUm0RBA;kf aU[2i/m4f@ nr9'qMrB:2t ާj:NpnahŨ"@/+SQjm) r7'+54ko3]a޹zc'=2@府8_Ǹi=_.'p=3tU!d,#j/I<ͫʱC8'_0chԜsՌ|  d皫f%yܩKTn3 8T)!i'نEi'i!`\}I^GscM!#SE2Udҽ>]`pAg±Y'?2ƒ(ݸpxӿ\_3\l89#?Ҵ⍜%.3W:{$T@dɧN8ˁv_c;j9{"}wg; b>cF9'9UҦMZ$e- x BI$}7r{c#޳fc.3'W)bqK#> ?ւWrG=d VKR30Gh-0q8݁{֊}I-H'$cԓq*Wy ~"fn:1~' 2i:j ÓPr'*dQtI8<VG9Wbߜ1=T%s_zt-i\x\I9ϥ9uPPrNȘj1Oc=N ky\tڏdLky U':V2y FI3Q.;M2 #>*(Mf5%Xd6g898+ڽ(0ƀ"g(1 "zIt59G`$!q|\B6sK)?^ =T{2&]T`cǧMOl c#CRJ3?LnR3:y@ Pݸ?6`󎞕b6eH wayӎX {r888R)l䝼CۊLLy'Ǿz|s_cl-]PfV$g8l px ŀ'q֥u6F#'$o]٤nH˴9!cM Ֆ$eFrFY%k;y>@NH89bd,@np8P1Ox q#vR1קnP"/CX9㨠& _@灻sީl#N BG@dH$g; Xxqۡx+q3p'n^*F;}08fRS GeFF y#uc}a*@#>lrQpz:w{*) +.9pb\eA*[e?.rhr(5U2K8SIۀzUI_tn2DlF?8xKV̸ǒ$:9γT`.ϕJr s/Yؠo%9XW#{t)%tG7*ݒr8 i-HU7lNJXKmh[<ƿ(0=N:V-/2l$P 2xSXђ~'\UeepWh yr}p+t}P?Xc{F) ezgx;q#81CzA`x+ZVjWFsS-#BOz0zڻF.[6.U85In#ivOKg -ݓL@f;6~vzŤ= hZ1 .1sx jf)+7I=S͏-vikkwyZCfǕgkg0\0e扬˗!D:%RxJR`ʤg2p,f&7ߌ5>RI +; ಆOLv&SypKd1z"G{#(e V$ ϩn6wob%$@٠̎HUw0zEg H1gn١~89sѠ;W SvudG )zz4 7[QF9Һ]њ+-hl-Vì%E ۚ6eU|qVbJ;*K- 6t~;ٵ-< \@@(v c8+Ѕ@)n`R䟺1kWvF s(do'ami7Oݿg(I2 e T$:>hβ+Žq 9zW;ZkĔE<2c{ pTEuVe, p,qa\CX8~<϶סwIWI.#9̖e/4 nF y4 )6yuQ241G$~#4j9n;q[#qvcRQe/+9sח4c??QkI}}j{$eW30O"FC i k:p/-E ;_c9()SkUd]'?ߧݚVKfF߀UQR6c~iLeHya'φ.&y\ÑRoOjKb9>qr08{sOAGP+?S#pzk"D8 3޽H"^9AO㏛֨h00z:0ǭWm>U`>Nݜc$S]qӷp?ĞJGg 7ׯNG| /B#*ky `vOגk$Fip9;2GzX]3y經wG [}kIqG?ɻc2v5Ajt:7) ! U+e&["DdF̌>A$du.cnxfXH\^\pŋ)ć$t#dQxzgu*yi&? ~킃"5Q؏nݜ7dFg^Fevnr nGUQ$F:NsB $̜(#$SJ-NwOqhBۃ$԰A=3܎:(Rzl0,os0G*2F5.+02T 'l&wnۜ皮Up0;u猀G<sS3!tOJ6-\KmrJ0cRiNJB8g9=ZN*ƍ@rc!~Q5y.6bPO.1tinrΝ߁wUb#k,1޴WTWR:F21g'+HC9Qi6 X5a,lc?Ja_ 2v7 #־6yo^eP̸=FO_=.匕}z)D;#./!BHʤ'Z0ӘPk+0?0>b1 3Ǧkюߙj_jc*l:i'|n$I;n6@g=+ɆDڟ2 a猪xDfsm"ܤ !(\ދn12kԵ˝V$1Mcm2t fL;~k-iqI#nʁB I5\|$<8 +?x>o%'8J$-< O7dw#֓N8edXm =lSܥVB d$ ~c`dd4 4[ y$G(CySI=WXž̎&NDCc Jx&^L}NX獟8,222tʪ.b@<Z~a ltbE)N2X, מvi8}ܮyNݾW'ub2%q!@#;c?_ X)|æy *^d+΍(NFpxCVaVÅWU$6r9+~=&XKn]8QbGhv$du^W#.J%V|G;8c"G$ |ADg-#WZ=&סƫi7I,ÍUC>O3F6bb7 )jjgiŝ޻=O_S\ N# GH{f-"뼂[<6WGJt"N\s\R> #>Y!U:sAJӅv~ :Q}D ; {{0xA#tqE1j߀ޥX*T9ئvn{'pұZ}z5F772dqВԇ*I#*?ՆH,9cf#3ex'e#r:?P] =O0e!I rWxʮ =k2+kY#z)J1U#c'y,H1V F 㑁_MRWGF:%K呑DhV'٭U1 `̊;[8yh8#g1Qp}HяLw8湹4,Ep][+!>ϦEj%)Q5ln8rxa<jjWhFCkr@2 ,1zbxVe+'+냏csV,mQ1$b,8s^xvKdt}WGKR)5h?y`ń`6#JN8aBRj6 \ u O~==&xeX7Pt?JQWoCэ>HWv~b$/d::9ŝEB<YL Y.9q©UyJ۹``qֈL\3?L`1}j|OE$vsxFL\yyJˑrvۼstJIcF2vn-UyYvq=çZO} _`MvVAP9W~tv"0` %o5qBzd<XٻIq!qv[RFuQ`J?eȹ| F=p9qJV#N_Fqf1g^jQ F8<9=ALifv0~CTɝ8q u4o*;g=B?%^?qq :Q` aQߏLtac8\sx6XNӧa9'_Hr_0xU&l޶yFI''*N\ZD: >nzqU%ec6ظy۸ A=0H#kṈ>^9⹞H I-8RwldF})Kȅ-)%>_-@ӈU7RU 쎹x?vq|ȂI;TqZn8=O=;Rb1%0167}H!{.9{T#vwܧr8݈O#!i*߼lVp:Dn^8ߘMH `ۀ֫'Ϻr3Rm@򐭃=~U>\`g#KjQ)LlchA-{c֪AMϙ@; 3׽CF߆ܣ%O\;7=0ǜ( .מx׹Si@D ӜctN%OA ]zTkny0AfgJ%v pB6ܫ1˞O#Z)YnLcwG,R @=3o nnPHF]2g"Z-庸ĶWxWWŒ)6: zV qESGw|46Iz lm1cx/<21ͥ\gy$VP*&| 9NOEY\ۗyt]h xs;XoAE#/Xy5J7&K`Oe:Fq[HI`NI䎀B+ȵ D ?t)RAsǮ< \8*$F? ǎy9^v#s6bxdn#=~]XYNqr\.8ۓzV,*-ؠn =:v7Dxݴ.pyc-cy;O*$p9s&.qn5/Qשiv&ʻ}83 t DId,TTBq*;uYܨT!!sGnjJ[c(~q]8ݤ53ӭ$bnm1d8zu{c uߌ`6AQ=kW8Mqzu{46fE.@,=8q_Dq,qۦ8 VcSƆI[5Z{zX)G41ҭ!i_f ;cNy51AT3W`B#V)`۱NHӜR-"%##б/cNO|v94Xd'*zs#֎Žn[r<yǚUG;=я({`ÈFNXP84PEņ<Z['œ{W>5f0wo`~oÊLrI'0T=OYY9wcje#N'PLr>cOnխI]ø%33*2pwz{Zw\y9\`׭sF1Q gF)(w O'~p{IDRsӭG',>b;وJ9wBA)A3ʬ#6y9wJ]qД=JqnjghISA'zSBe\9e:4q\Nqit`'9ޤ*H c/n8A$!>}}*('*[#Bs($S]H/' ` ag4$|cp{ڨC,1x:\018אi2"020;e''S2C8ٸ|1[A}=Pz}z.&HdXߌT`r38zʒI,ͻ‚G''EANz v9#I*n?)z~r@8  6pzS] x?xlX3>sxz~']I dq@\cۑMW6ݭ1{giI`Nx#aYtty8<`㠧;hbNs{9$U[TrFw$'1`ҨEcrnm=~⇺B2y t9>cIHѱ &ѕ ;>Q׿8+YRsr=pMsMYΚ:arIx*X8NAHX''7s֣8b˴`O޿)n4 9%!'NFs=|ܮlG>!*8q3ip}؎Ì{ud !1 QXIAg.`œJ(EٗL}='ӊTzwBrHǯOJJZ%'C z'QTFzuNoU`<k1R rUb9zyLYelJgYUZB8[*3h+Ё؜GR?+*YKt'DtLu?¬OR08'{׼jJ zsj6#eҠ)OC~3_!C}D/kWSi[;VڤQ]啣 UenCqhgkJlƛ@8 /9dp'oJt%{[4$m )wi0s#;⫱ۼt҅8TnSwmɿF%d,I2 ۓqrWwm)Lć]yⰔճjq9AaNBa_B1o1X$T9rAZVԊw#@3y727*Y8<ת"]͓T TF9\b!GFa9ڸK`CNGaU ɛʼn꫌#[igGww*YuVj`6/nhi$f}/=08MY.&T\ fQǟG^exaDnVT-HuI/Q Q]N\W1VF\ub'8x(6mr=yJܪQMݧn}ǓjWaҼf7 s^S'隼]LVX#8 *emas=y*nj2[kٗ@wwFqJ0aC׭N]R"PrC'=kլzXbNߺ#n2Uz i{s}kk d hfi\`){;XZH5Γ5_$s\DvQ6s;ry4K4Ѓ,NlN8^9ǥgcE+QUț`/';0x㎜♻jwTI7o̚F>n c prx(^wa~S#,;gn=;?8*]7`(n@m{bFr{Cfsr<U*}xT7A+avǠɨ]] 8⩰;'۞i1ѝAљ-0{׊"aPsۭFhSdP#}m{V,[Pѡ%n0 #b5VȔD5Dd)~ 6qیZG/fFfai.ORrT`0>5{O2<#&s^RO"|Ibidi1˱Fz z}F9Nwgms\ѷxlQ [F>Gnq^ ӓϾ;r ۛkqP>=0L!g97ăfIR@C`QoTxΣi=dc&p8I'JschYYuQ}F$R$I\lLU<8kK>8߅B*UIA\wkBo؊^F zqֺkIu#'>kʖǤ:hepby8#鉾g#3`#ЯjƶZ9TO mNFN2 LzבSFc58&QsLp@#H{\D=8=w#q{*ӻp<9wqBs>\ǂO'<9>m$Z셔?9`v~Izx׮x?i[u5F_ҬAPW߿֚s@G5Դ9{zWBSjS36?FJIӯ5nssзVs~eЋcl=N~z=50w882޻}R,Urx{sWI?{JHAzcjQL=sI%2;M<}?r1=?~ \2ǰt r#,FN 1uڥer q*ENn@xy6vw+~ :O^Szi)TPr }AṾfq:;юFcӧB=xh~==kҖlNn ?.?u >0:vۡ ӵ8^I=GT֋R}IzuIӎ1JEۿQ8==}j(#=8uۏҴ&$Ht >]P$W>C߯j,ezpG? "\nO,2w)y[:>9Ü`~"R<,…is2<[~x'gvI#* sЊ(3^mȖ&R@\r63psҩg:~n=mGcݸ}Hq t6άv5ԕNެ-m/Di.U4 <n+q{wżks[m]+0u&usXIP&i=43/'5Z d8{a$2+)M85{6NJ7'i*/N#HX1ӌ WMy\L"ej"O Xt۵k1-?w)\BQm藟c?]7QAZZokr>mL~`/Z@AR܄v<%-g4ZNk뷩֦B+gM ro"Ր>sr+_w0^ܲHUX `vSNWo= Z=:v< IUvsU~n0dx0m{!O-rIr1!j'}<׋&i@[bw(W<Z˱k ё#* ϧmcN龗:]2=c HWIJ2" p=LBZ\G;h\}붖SԼWC4 A.ujQeB$fUf}ÍvܾG~[bK\':Ec+o"Ws`Lmn$&t#՟[iF+D5=IJIJLw~~]j+C,ҶUXn#a2r*cY.&K,jmP(͌d/8ukOMh7`$du[|n_t8#9N*wDdIkom[*f唟'Zclo+n8g^H#v5fFME'g|7Lvѱl4%^خA>`5M$?SjXS[uGqL Ͱ0ݸZ_ A{h%xb^}ZGK ]P$vvQrHwJQXdw3RF0x9F=jZwE{Kŵ}m5nwK(F$d>{q̊@sVD[*#8hjÌ3Y]^'l; `s 宴BIH)hY'y<5SMK58i#rGBngq uzVŶ5U u$ڒ|]]}vI$6vS|!Q;ItȄ r$gޝvMT['c4O 52%-ǚ- 7rɻqkos?l.:^8JKJ~Go/h*dV#iTg$,->XYX":UXAfm$7'1TlBv[,NO-O8F- i7`sX)}܌9~ބUk-a?2 Fx8S@vU-f_teVmdw=z=]+gl3e|#'k2@C"xxBF\!}h}>iFvUCpc6*q۷'ZgR$$eUÓleAEi8 dgKbʠϸ<' 8^Ei:֯i$~v )e9kuiÐ4υ7ӛ7O!eϯJ{?,1, uSZI=o}~G;eg}tez!E*I nx֨ns~c.\}[w?N4zAzTv<9>E;Gx~5BeHl `# ?AV?#ߡZ#B=ߏƫlqhGC `O9czÌZfsC g^?**@$HCr1D82m  2;#7`B2HGjv@A~G jc+A3H K20ڃ`w85#ns֎5nl#Uj>S1s zu*X\rr`q(+3WzJRZǥqX x 遞Ǥ1O=3*'9RBŀdc'9QʺJ_-{"Y$2>8m62IބF3$w"mTaL;J33^[#(r?9 q%v;dʗ9CSdeUNsO7C6F6@9}GSk9ˬ+`VŐ2i'*,u$R8R,U>ZہLB0cϱpꨣ<~pXg=oR Xl.>MNOɌ rzWFv~ݒ3bۧsjOȒ2R#%9=z 4AʒgDh{w=+xJmc Ǚ{"C$Kx N:8@x H#Ue2p푳f '8ZaF)-0]aȗ@B_qU1i`v E>\m#0@9!0rFs߫~I!%ʆYNFHZu1u`6*~tfP#nj=>󲬴82HgXpE#PIܧpQ%+3o Te+FydyR(ã6T" :җdQD2Wcv)( rprOLS, O|X/O)Ć6kN|#b[1QmGc3/$f8Ӟ< 2c;XesSU;xRR𭽚yd0Ϙ}zԭp"XWify$GsUk] b5oP~9;~w*Gj֪I 9kԺ!|6#p׎mCEE rOs4[uKVNVF6C _9+^݋*!V?NZ^!ѝc;ʮ6AԜfU rd$.II11_CkC7nJʼn %Ձa(du=0y\#6@\7f8+n9x]K՞%FYbAgnXbazc#x'."c z[;[I%vbi6+u=.@"H ɟp A&1"6ˉ.rFv` ؇Of"*-`l9 Rh9G`mdAy#ڡO*1$v2L* ''p]9=nm1W.YW˸Alç?(!,x}SJ qh8أiHСrXsQi(cz2 /ʣr بŻ 4]m7Hq(G09Trm߹¨[B٨hl} g~id/ws~k˔#Ѕ>U&PU'qК Crsӹ塢BV?(eX|Zb89zԩ-YvسbJ>srBpxfUWolqʹO'Oe9/D ᙗsPs+<[L?=sn?3RT29Y|Lc~zΐ!#h߷eNeIT tw9 =ı;y_\bĠY$ ݆% 9㞕h&ۘ:קgi'+8y:V$K 9 Fn#$(f1P iQTV?u˶}GB[q*5230-FR':E(v'$L}i`( O'$‚yG51G s;|y'ZOa*(*vͿ `r$D$doFzUF>f<;cnnyȭHWiBPH9ɫ[yjtHU{xeYw ʰ-wclF@鎙ͪH;W'Rs?# oBڠ!qZX*wn}ni|$AtSm<ҕJ?v1*~P7|Xs9 z`8S}JA# $q~MnFK iݩi(Xܝ0>\رlUc89 uGN_BZ" 2AvGmqY_ByR3yݍo=,d[<:瓼F_yav6 7ܬA';HhJ >vN\ m|3]Ax<' PsJ׌ p1\`a|cRI`*u<jR'ubu\ 9꾼+ǞgCH+ Xu!Fs֥˴d(ppH+KXZܸJs$z V7/. #<ӥ7&'t$nUAL 0^:UB$p`~S霎#\ 0^FT|1Y%6FWᶯ<ЀR7~ 8cp `t׭.Mq d;/LsR'Lx ^ކ`H#9)ݿ8~pc9p?7Nqsz1jzyXR@1qtE6Q#uxS낽}ryeʃK!O-#9 a^T0vz Ԟy^=P7#g%JL2,'`ǯ2T?w[ 8 0\`qtOj?͟8cN5ReNFjz 1%7UpO9n>#?x8ϠE"r8=\r98ޥ4eQfx';SD^& &3HSmbpI*Š u?CUFz"ɓ +8?hkc)>c+~H:\*MDW~X ןg*8mHO1Q 2Ade#nŁm޽8|[hш#&)hHz\:Zc ;1q*Ԯ#VXܐJF8=;f.לqPD$g㎞3QiENAî=8ϸ:d`2:pxCFNYJ `5rr+-.Dy,T/qO=k@+vdEm:k [tO*΄m:sg T[1 1VecZ>aSK ApN2\JMN( ;N¹_BMV&|]vVbd+G㚂I&fSdb#v9I37::[GfGve<`v^ˣG(F=&6cI9GXkBNv$WSmOU7L +Bݎ~v-k(p8iyRe\yBx9kf .;st=zxmRfx+cg=2x.W=Oz?cS ~C9<InlZP7YͰקZӒw_6X_ֵRc'vJWpr=d112OR;uԦmO`F1x'+{hI8|XxUԞ0zg $LB8FYrI;$zU"#8:$xSZqJ9$pN9GD8~+9Sd=}BpzѪsCYs~:du;=;Sgs?!eO^?~Xqyۨ+Xrw0unv-熼=a,Mq[!H#HcU)+28yV @Fm$>loSۊ+WUr%BzH$}@zVVЙ…l`֑tDOmk .X ˏ?L)TF=2'bnjs:e{]8? n@grFyZ<7,E2P `NmѥQ{KQp1'ˌ`+? # o?NO\Q(5L)cPG̟wZ$`@$_JIݑR1|s'0kUbT=YYT]SS[DL NIu\vQo;hĆ0 qߚeU(/,CNx OUxt`aGoO:r:s8<8NF0=5N9h %9q2ӧ5\/\m8=iŊKRʨw8XfE sgȴ]8Ps~=X?w)!Ќ rqڰkR̸G%QqEG*1W:Kːr3l~=cV<NΩ"OpqY 18ŐF3Gp+sӧqM00ssP'rI8=ia#UBstOP yg=ww'\`}9>=9R}y猎=~ߜdv4 9q:zgD9}(%Љ}}?^VUF_PQ֐$g7q]n®9:9kB5N 9#FM͚ȤH^U''ϧ5j:VœLW~5j\V8-'*W99ʹa\  &!N>oq$ghBz ܎8u:LNb$IyfBK|<,:O,FwcL2U]3e'.G?/͍炣cZkI(f2Hҽ*owu}yp+E$,${q*Ns–+ʧ/z.zcus[< I.|7CexxzI32 XmkpNꏛaUNn=J#жYi…}Cm,+6Z}ZK0%p@kʔegck^vNcd6Hw(g $ Ap]( W҉xr=6H5U@lL.Q,X DCn۟C,=PU]e$j9jEQ+lZ;DY~ل}̿g;wa+A WRnc w@LgK $nǛY87.Yi:ɬfe؂6y9bU^_N,y\FJ8Bש q>{Q7Y64]ۛ7?0.YIǴ=y-}Nx ՠLzzJSIJӢVԧ$^K^WZ6!kY,ĒxqBZ2,A`GF o%9&ۿSR8nn.6X܍J4>t=Bܶ䳹fp7$sJ!:nb ngRER'5%~g TDJ\G2Vu> 8sӊS{v4\yNS FwmҪ5$=[`pz'S{G6[l2Geޭ~\rrGZuͥPin_ʷ qP2TAgܴbys"ڵg'/ͅ~YB#q`S4_\^d!!8!TsAtUiD G'] nz4rh bwD#!C8 LOHpFX}F^S[K]f}h10 8jA$Tye% u 1?LޫCAw4ss,^931e=r01SkzӦQj omqc%g>3e@YDduV`; -KVd2k EHÞ\5@rle$3z 3?r;Xv%'93ֺ q>!3Ǚ3ǾL3`zdu[f &`be^$}B)Ӽci8e* Q`:=rz3JSkx-vmɼfd;s޼/y=&^6Kspq9B]ʤ일HKYi:jI=~d\z{k[H%T *0>*Ts浄iT%RM5wסYx&'i$S;ǔ 3\A8*v_#? /<[ʒ r|f0^~^Ҙ[{K1f0G3,VM&&$L^{:Ƶsg4 ΐ%DkR|8YHpvŞC%ԲJۚI*\:`u֫w-}9ҢK::E.TAN.d L6 v#)`ts].66"29rwXmE'JCǀ1'#8Ut2k2chce]7 a+{U"DgWcV2躶iu~`Okqci!oܱm+;tD vflkpi85Jd>݅ק\q]n]}]ޣvEa 73M 䀄ں5#h<=>^9((c>JhB>ԃלtJOu ?JS=[ 3x$G8 ;nq؁Ԍ>̤Y}xZ@fLVv0zׯ Gny3뮞 'A>@UAtbB\tۃČm_=p6s.Gc_քq8IRq@3SQɀ'zw'-zd@F$IdYv:8*I* ?qWT Szr#=>YÅ>9=Hǹ#ZǕR:ʚgF@sՔ0cmnQY @@BOls֛3:IVB=`rwL m,#'kL#6\a$pc'P1v&V/`̛Hc*9ls.]8KgD)FV .9qS[Hsʀ2 6oz8!h.H+<eFq934$ 0qs 8#ӽFG[7u8{+*n<@ya>JB'=5 ~\m S< [j|sMEqR0Kpz!#j]sqS@lrSb腇N2}A9zTf7z'8+)'Bl z8rW OM88w[ka~rp8?犅2O%Ou=}q—PL/*A#pQ<Ҫ%,[6J=d#pPOp 1uRRM(Uq'=V y#a/xƢ'{.mѨ\r8n91,#~dLSgox4ռ`ܵW@[H\cLSBI2X`sA;)Gz̥E$8#?/|s[ws yW}=j+ncRHhjOn*zvNV*LtT_kfE-$`<~ xd'2)0HIq]Tn8^pF9LƫP>S0J{y$l+bHОeiO;n杷F!OY?xO(\V"[ȿs[a#'s?69 ai"b[o2:s]76"%ٱx l~Jiwa*N&]ƥg#jd21М*?M"nqэi$.j+#lzd=D B@9v%w|)MWU!daS7Elܷ̪GPA֥_NЪ׃sn w0+隫9X7ҶS c 6cӹ=*OK6~zx uY\:!vڹeUF0YNAF*@b?3u >B[Sە@(rUu:mwׯ7 ,{#8uc+𵮕iV1Euu%Бdf݁3oV^xR]FAw(rN,)!]|w(MWww#O޼/)g6ZK)7EͰ)'QwzͶ>ef_GoMȥ@||OZͷgwߓG5k(ATdzUlQr%;ga|CbxZ뻏ciq8$G^ # ;X+|S$% 1?Ÿm&kA0 \b:[břH*>_~ⴧM^5J:m$q:(\#ae8=~:y2e)[rdlyxWߓ^wsvr1PHpuq^_iO1tSJqZւ TA;rI5Z$;VM(p0r1_?5iRCWhdf'Cd\Jy15-g t 8 NErLn[ >b 렙č8 ) 9augrzd(N,ŨIhpw$'kVo|y{zs[pWΞ۹>=9 q]tvv9'rdߚ<9beqP>HaPӥK-qGw\9\]N 8ջ-LuFAu$):y !St4Y$\o'<@! 98Q,~^?NJKF8JaKp)2 r`^+~m\F O'weٚ\$p7d~arkQ(`~H#<$V6(kw؁ŋC򞀂{)Ep9v$=yHć ~Npx#AH\xep9Bzm  1#h ^ pN8BF8ک2R" 6L{zs!+U+2iV7l,.X jÕ9U w!,qʌr$8"X%'nq]YO*[km0w.*>qW'H.'!7G@{Rm $O#qNNw {|!8-r v gҗ>,hɷs`2PaՔr>b2櫬6KOz=qMNȎV 2IMfu`7WnGs_acK^ l7JjCq2 `@ uǮ*TR$ke#FncwpA99^D?fGи` 20DZ;s{t;E~b s8SFO_Z\< @,1=m' yvD n~,JeerWj\ѱFм\hSЕc#wA1FqaNriRm|]8Phr&>TǙe UGˑn*XHWяn9Ȉӓ@XO'99]N gtd&r>^N0:nƩ `7,Xܸ2l U}85n21Svs ۭe)FU8 AC{gX/eO~O"Jcx aU\0G'}>@>Bw}*٪9gsA1&I= Zw7 GӮ1Soxpy!cssq֢zHqR 1d\!r͂ ~`Hb9zRԵӂ-߽in@=;zqNߞ\(#x;1wvF\$Aԡrz&xXz9u(>(tgq`Hu;r89kN)0%y˥^ry3:Nh~CH)@9';ih'n9Q>9R[Jf#<`cojI`nc8RluXH;VVb30F#UL{Vjm v29%P1=`z{;9BOcV3Z*FX$c{U\Ln' =\w\bdVû)}'y$ʨ̸&1!,7o<;2!e1˾bFz錜j4HlC{#mp GQץu(AV‚:1N)yy0Hq׃)%'=x:jݽ6m#$1z|]]~]H#Qu fͩlK6 g \;(++ g(6S:dV)^KvD[I+x )w6G##{r-6e& ^>R'Sv<<ƥ3dtIگeI潗h}^ƥC 'o#~D 8 [oqt<զ >Q=©nbu)o@1W5w0V 2#$( O1CZVRî]NҪW6Dn%GE ?>AtE?0`Ud_ {sޭUw1czR 7͑ב܎ ?.NQrYF:ԷҚr9 7b9)1p62+q?7H傒wl׌cMQ?s{Ұ/".0@Onc g^*2Cxdy3d󁞠9$`e ۓqu{m'V y` s׶y@^\68$HZVx_R[N8SB!h8$:=?Ni6nǽ_KKc``c.Bq'ք4gF˞K S#5:hB]@ b ۴8ˀH;*EH Yw $}sNc7k3If=6%v$d`~tӜ1}sӊ.Z Y[ 0>Q*[q9ۻS~9L`07vsǯ:U;/nq9=~IqXp~acUho˜m w(}je*:3%KmQl-(n(\1;8Y܏LskZ6@Gy%I# ӢA Xq.w msMtkcq}!$NP %7p8?xkUI n֚[B#{v){,'85^[ؐN{SֲB?HG?"9' ϿU50}qLG\|\1`эlҊD_BV渖BL *C~[W2}fQцzuޫ c>fipIv rs'$jFr׭i&&2wr{J&NYyI6Nzgu's4$4pxՁt<zh'Hw+/#'r$ ㊟#0ObOp !ܜ6f^Pddg~H)`h9{SmXim$' PO|Ӈ]lEuJx}p ~ep9݌#k, @*0rrHТLewRhIk $cy֠c9^9'Nد8iBQV:0 qn^j 3϶zry W4Ւ!ϱǧ^OQu=Mr&[ic ^C0{i>꜔+t;緭i,V& X'iFU%#)? 5kny#mY6C OP=pp#?ʈz#>JJ*t"G縺νz^ѣ~_m7>RF3ޮjI $6 ׹kQlM%es,řAR9)8ם7ێaXpBsu(ϡJn(l*9oN.j'mԏL~7dsVvѦ'6V9o@1#ڲY~oE@a9r:V+_ݽ>!X?*?>\̮ mdpT dr?.z쎇Wv:cG 7;4l?/\zVz,ɎyǾ;Wsv} d#2;1 \ '>خǵ_=o|Fy,IQА:wErzqo_pyXnVPT53KM Gݬ%Y>fc{lg5L;m?y[ 3cx+J5.Оឹw#H m$g#=s8z'Cn9_eIqSf\mx/2>N NC֥Ҳؿj Hk!]BvmW10/NtږihC81-$drF}qS웶u𶐅 *$L3r3b:x^~VZX"!\G%MƗKۉvsμY&>>l:cJ ֚r`κci{ut7ʓ߫4UUw2.s^ASNnOʣn8IAqDHoՈ+i</:HJ6 pG,Te:_t*}>;Id8EcLHl1OٿJ;e@e\Bc"hPc*͗ /m?Z6(/1PX_fV%.LGݜm%䁓G#"E˘@+CA:SMŕr Œ sګٱ{XOp@ke`uLM{h6}AEb080ymyeY9[rҬ`rJl:<18XyydzN K3{}Įk( Hp@=sLԦ5vUkygN6q(oSR_rų9,ɒE]\9Lqߖk=fVoJs#*p~ 2{g8etA<ֱC)7H2X@C^~sl_@hdՆ\1,2sk Cv矉VPZ Vcbڗw mEtFnNrw+ 1^ǒny{s5l.drF7+*c$|0=%)0 c8¼D-&=\ڢiLL S[Uxr唀OZ屵䇉s2Jf/%+e&@zJʤzNF¶a;2> 1^kh$ms,=L率z}%ΚzuŸq: ZhR3ױP$•HJE&Bo~`6J <'#hRDNp>H*s ;ŵ8*H9Sfcj-x'r}}`Qveq?79V<,`4 \Ђ qs߶+R+Rq N@ϧ"g@zr6 j>9oLw3-Tf7 ㊜&$LmD؛phncjxg3ډƈ?\sO(;N:Jk`@{EIPb>qV9)#L{JCǡ99ALv#9 z#0+G.cWcs0rTURС<ߝc}Śy'=R}dLۉ?X'wln:~NO.%LԪJw`O}4i~Ut-C&6c$v$ q{WPKwv9-־kc rwm cI;K1|X$s:DSON1^ֻZMpGY-QW#|Ѱ(2sֶm6+RYR_T?m.^9R)$E.芷䐡H}hD\mu98E܁T`^qJffuƄ!6 ˌuv\ҹ4|iH2TWj5:\S!,!\!zrE:D`Bʅ]ONMэ'.BĤ+ !p8>v;m.!mP'!rp9k+J#+Lr\o#e*$c'S캴y Ml+yɦbMs4jYbNѽ =Ny~˨n!L{QJS`E&<4c;X4E#X"jF$?|8s=K]\_3KLW ^th M$ ,sjհε$I>gmn,$u\MʱF7Tn?J箭R[rdE!;:q+knKcfc;n@89;4!F ckl (195I4ųrۗӂʧg VwbH1Sr 9[Y~-91)"vϻFq>%Ŧ#G` kv:8{Q~(]Q؏>*$xHy?N[ qȇr`w3OCu{VI%77,i޾΄$Y | 8J7؃8 w]ƇJ_Al~/.u<dbIjܔi~i e06`(\ϭy.JK$E@Pd|Me~'0<3|%h*yRK H`%uk ?^&][K+Qwgmǵx9=q?_Qgee3j8߷#  5aeu5Q9ZXc#uw_TI==~1Ңyю9] n1F=H9,G<nj}M0p<`%O?)3w!UXʅ9*@'ˁN9j9»`6|Gs ӾzusL02(',q#֚iƏ$Lkʮwo'9BHwkRGCdlq߹&iAp19\J񑷢d)#Sʬ nY=}U)XN4袞mYS<a+קD62KǺRr@8<瑏QMxC*exݶsi"AtڸL6y'w_Ƭ PI`v#i%@=G$}iw^]8vwH݌ӭ4)\^5\LJ@{̠rpzj@0}2}GJj_ - |qʃ`;UI"d9ݸsǽ[M%ìz( |rh9~Oć8!U'yڗ?sԥr] lPpq^5!p834N6 ʆi@lX2QZFTFqu9یu5'/`.rN rF#%7.6[s$3+=i8LG:vۻ'U46܀s瀤zsz$u',9 ⒩w>'78ފ9lSY"lpq,JrI]Yl]д}O]ԣ0Z#I@&E^ 9"\Ӗ[i$K*(V@4̪rTtog4y&_e[[i3q9:}VK"Gx;9l vUVz\\F[- O'8N!ܑƅݵTw47RRW-+e7,N{ XWP>q zg M[=(k.ShtB"p+N: ̻J,:<8JVSRvx ';85KInKۣZʼnoÀ:U7e}Eos!7R%4dr9\=E +"LQb:Ql4{ӝ]1䴾\|GIjm>$f_$rdždr 9=ZoFNtTCʩ9"d@79q)%I#5ys ,37PqJed[+Fsn܀sCՔ%QJI8<ל w _ xsHcKsѵM6`eH)ϲjH- r1\nird2x;s2LJ5;LMVՋmNnGҸsy'yDaEs:`qJ)ܦWZw'܄2zGp=s׽lF;~5}v*R0Е˅_ h Iv$arڹ3ݹaxaVsGf`1u( (($g˒83sWm0Pnf8 3H^ץUyaece\OAlGn1בP4_v<[EM۩䈄;0uàa:ӿ 3fhl;1,q]n8~s}uʰ`4ce!<䑒aYW̘&uc#|V^%7U/1HOCMRp!m%ʶ>Rruh-kB 6K);aSqNkC;!YcV`7m$;CPW;|ʒ\l duIow6nl:bGdUы&\|8^xRȈ!%wagُIs"Mb0Yd7nxC]PVpȠHG"kiMb;0=pqTd+m\n{PG~KXpr <~>Tgv-l* \ %JP=iA2C7*/[y@ evw7npsS̕lg9#nv8皳*vsTeI[eKqN.qӨv=ϴȼG<c)XǙÕ'o `g91 CFCC=MK*dOtP9/*8֩5Ғ2~`C_σQidk Gr# ׁЂi>e?6y\ 1}jvus~FFj/s4!X q.m jwwF[$8/ۘ[oPs݀.k|37 e 289KȨ~`MK;|_<@8q8=h36ܼSbsשɯϞId2:.JpI쌚e)n.ŗ w/N~)[K*K2Oc #HUWG=r9,*6.PWp'$F7gOAT2DK0y9`2<~$wd('sdMw9.zzd{Rs)@/&lg<#O$sNͻ9=k^3UXq5n~byB^=Kzri% G@y+b8'$̤NA9>uuԤ crGr;Q/P N럥[`^K>Zp@aنspH:/1؛=0#WݒI2sbduQXGÞ*[Iy'9+rĒSvY8y22!*81PwqBvhbFpץ_ ،|,Ǔ Lc'5IDQ]1ylOSdm 9^ܕ9zT{<{ʛx,čzeF{1ҚM"$0W;#qTd 7;`cQ3Hܻ2\s@ʟ\r{Ӂ8ooFw<1jP  GEXªpYߔp/s\hM;p*9@yi;Q1Ljʤ:gMŻzcvÚZ>L||3S:ʜ]ީ;:.r<]퀻N:.kɭu%c١IB Q`1# O2:rNEQj㖺,x `F[<gR9Ì|s,9,{vǦkLMmlRPR;s9 %vzC{ SRF8vv_{w fKrKr6s'~kϾ"xMo & p}? ISA~Ud~i(ʾ:ws~31#Ms QrG6\(uw}8%# \H[<{޹Yej9`̧C+9v55vCz׊;c[qd/^rsw5[q KcSZTDʖ9ܱ?.FI21 a4aJ@g*<`Vi >3Ӿ1m$docsFO_(b9"4m(NGv}?;qcV9\c8N9:de̛pq1^cUZEy5QҬܓщ?0( {b1P~i`mV}>dN0N|3m:ay)}c==;1qMV`27 GB?֒4%##I*v=*E`FM r,R4gf _.Zثc#F$3pEJ )@䒥џLxnhq*I(!Rt@X!8$[Qd f5C:WSzlխ"yVRgfORӃFn,9ӎ=Gq%s#$tc$jx$%=Ғbd0`jvہ僌pA{z OpBnU㜱#p*'<{nM-518f9qIVqFO=?T% d \F>^c HX5](pX =@2 Íz>@ 78]<7#qN;%А;<`zS@Y  w8j`A8Xcϸ@F9yG3G.qTd ׯhVF#Bp6ds횡KqpO`q戲bnl=8OLг;*>C[n +uw+uNyG NUK n=MV6덓mT @#dO o>QZ嚳gT6J2݄8 .s휎B*Gr.Hס*YFF7rGj<@m9EݓgyE۞r8cțUrAqJL%'IcO_zL@'E?0:ԝ` ̾W D*9&'ERWG ' F|܎41-j` [ƬĖ*xCTAuĞjS]OyM&#Oe X68ֽ>+Y&L&lȳ9c6e6/OOH{ fwA4y ^:́X*IIK2}Wcr hf1,g;N09WfxBmVg|ˉ,=yGi0~6#=1^ei$J8'dZ*Wu?g~i:1O 22tkS#rHXg2-9l<>S`%o0QxL?CPēI8nV^d?t{s+F~U9<`x<ӼxpOIJ0 D:!y^f' ('|8xUNGNO zZ=?1rpy=)eI$vU)+Hͻ9FF\`m>Є Wrqy55XNr <}ߧjRW3O%x$Oz=x;gUJ:}@6`O>[Pd!=1`sN9 {{bA:x=OM鷿W<4I^q5Imn'&v zq`qqvJ֗*:{5c@9kҴm$1#98=x{ [;y1b KAS:uږyd)3 mOWݜu 7|ǭrϖ'*TcWg%}>/h=>ݿ:m{VC ~\}O"'9 +)>W8- NO*6Ie?"<"=|C u2|R+7ϳlt%73ba(*/c D[e.7(R>Jӫ/Ow+SO; =V=Ueߡ bTkbacH*~2s58>nKiNJF:ywn%7 5pnr6C< zcƴ?w/4%z>|֧ex,+v G<ǎI#NIی$qMN>b2a;Мe]ٌq3ߊ Fö^F6/JΚP)g/P1qօw"o-yN1DhaHF9]5}Rd9wWцp=9޻$F#O5̚3y/.@cݒ9+k-bׯxo_|)P ix);@O=i(ik y~rBA*q{ԟbn3t<Щ7Y-4nf43ːrw 9o^ZEX!pַ (%{dqI&3x4;Z ȤګN㴐nPF{v=v?laeE廼b7yXHgO^qaJDqc{VYL9FYO9ӿ#g  x ^Bbb1mlUؐ1T\ڛjɴ"a]%cw8Q%͚~1k}FS)^9<``k3^t&[,ͨ U,g\yݒZwQeCվ:r]KdJT^]u(:]3Tlqw#'i5J3vH-Ouf.n: cg۷nqErE{cB!ȯnqkdODR!TaC o3RHe=--@c>k.#R =;cS%5qh.]v. ۙSnI#s[Gxu,2Ur[q*{ym9y+ |ATU`]Hgb՟;7 DIhNspq5:@&.0 xQϨ\'cУrK>R ׯ5[)0|eA$jji}f2<O z{yXт0;Zѧ(5i[82sWUL2d IsU%)\~?sہ?Θ dqROq^#h'=xҥ\tNzdx=Z9`1P[߻;ǚ#+Z{drrxx<N21ڥ 8=9<>r8E2F)AbÑW<F;c95 +/XpOE;qEj9 - {t#pÑyUS\dsp a08#f%XCH!1B@補FG* iq3҇+$" z `uU9 <.rd =MA#+^m {x݃a7`89LQRw!SAl8':"ШW'#_7d~i 6X`AT09Ph|P;W鶟r3*w0I,/uVB Aq^ey3m`K}&8@?}xoFK|op7lcڸNO8JQm_Tx#yF擑_^{WkL"JV*LHTNGL:tJog(-{NS 랸6.Cdh#jtJ/gJI?#6aIaCdYnLwC+h;|0"7I8\]"ؑ h3c` 0AR3kT֎E|Yik^T޴LFc.FO= ߩܖ̲}HHS^Jҷ<\N>iS377DkjPȗMr+̀1x^zeĖ3Gс _`^2A5Ӝ[_Oe]g-炣g ky!Go~SsN+퍇<-w>CNw U͋ T0rG5ХkFe_[Jl̝K\ ,;1F`7uݞkoQ񥕆}gm/L0F_3|i< ^lrQV_̍7汨IE@dIT1ЊлkeuyaPsEU92MEznz~X1H]!b:y 9޽CM4+NOKv~c/ a[95nݎY;t<{4 "14[rc6;-Giq[@IIBqP:ռ*rjs7r͇8f tlzW=q)䉦B"\ۑkӡN>Þ%l<]ti2ICףxwq}Oխ?u;|[*H8ֵ*E$Tj6Kc!6C|9 ;Z]鋬Z7٭6v[xI#StsnކЊoW6y79lJ9?) dɬr|PUXh+eET\wWNݫ)Bi4{_ݢ?iVdы\s! \r7(y$mvbT'[%&}nYfrgU8@ chXJXW4SyZ]~_imI0Eʖ ) ܆=ǵZ`3BB b[$_sQ;⥱Uqԁz/[Drm`2(fF1wuO:19Iԕ%~`X@MkéG))^u7ܱ*/f\Vy3 ' 5BcR/!@ sOF9ݎ y53[*pߡ~(.#y9$}e&x2Fb~ql>ƽ<$]#%9ixQn~pg[i=2ds]vR+cB?\WO-m>󎤓/h7 z jwSZ,N Nʍak[8w\;n*9>^P{oB#2,K `9}N@$Fmz2& gn?)(ۘ6UH@ x=Sex1.8ɐoj\]d.wP%e6 < p;d p%S(_=$J;KTmjR}t`b SL⼛>5!&cz;Ȯ_ $qZK!uClo~ws'%,{R}8[ [:ٯ̸\w~`('/.}1 w♜`q^$~g<=8K t֑,c.Gើ\ A/'>]YZFWG9*v݆k=¼dNq^3vfK\V q*q{ [d'B:8$ONi;~}Iy)23d=)-3 ؃TfU83p 5\J[f3nܟnZ!O(`q+*0g}` 3d۲Y𞟍r,p0pߥvR814)m̿w <^ԑ}7';$+{dfd\BsC!AYH?!ڻU>=?imi]W A,@=2pKGbqn's='OɄ+<ѐ@OvH2JFF@Xei|]d`|YOS) c9n5^ڣɯFT}ζht-Nݙ3 eJH P{uxygX%BvCoV]6pzcĵoDKD78>TAsMpẺ'(Q|\Uh-:Ф8<"L~x bpSGR9C+.[7Ќ mʓPNݼ:8bT|r޸#n8 *Hc$ݸՋ qKwxˀh\=*/.VԊM2v2#"%nNw/2H$ mT9*I)kI'] g>FE "$k@ Ar3דҔFam nNA:9csA 2dGwczo|Tp=qHIj1yoR6'=3.f~UƇno'Fr:t<8+0O$u q\HFNGcw p[p(cܐHqfJ`=@=9AF 8 `؞=צ}xqxo|^3K$N,$(<99֖ t32 vQA뚐ɐ0Q<ކ"3)/Ԏ3J-!F㑸g c#-EadvLdr {~Si;m'T7 ʳq0zsW{T2G\H?zC`ra%9/NK8I`1{}r>-+ АA;UϷtoRA;Ѻ=(塓wh`-·Қ3&Mݧ>^Np9V]n&aϒ8#9GB3:2A`IǠ9C~V9fm"Tʜrzy&9M|( ,FO͌Jn_+4Iorr1u5.nHnܮߘw>>XO%]@ F )9[l BrW&x?>:S j:zAg~YZ-@GGۈc@+`n2pA8ue-S ?ORBe$a@ѽ@02y77$cp~8kՙj71Ut,gs՛{I V(p2}L8 5KZ&vy< sګ 6=_#brOTi-qK"*!Xr1q޼N f-xdB\Έ 󡐣 nd$L`@$JUVl ڵ% X yf=?+3lszOi6,Bh|$g<*$n{뷞ieTYd?B:VI6@lۅ,\ӈ.Ж9_;-!~v'YNYyGZYPNJ8>Ven|U2|ǃ^)>T~`  =;?yv8F N?~Vrta@ XaF#i5B4)XbV2NؔB-XaA'\T)wD,+|0jzAJ\ۿ'z*9y@aٰ߆15vEp!1`z[q2n &FQ,~籮Z_*QSvQLiG#xpG$t~u1mQw\ܕyPYʹ6 隸b;~9wԖGQfcvMyӹ#ں5IUГs0*3OV?eE%;f\8y ] 8)5ᵪ2Jg#+eйڑ |u$`%ׂQ/mi'&::OonI2+)92>qYZȴ*#Ldq8Y䑰p3\qRiٿC _q<:t@ׂG{zG}+򐫎{#rJ{RVHF[81}]wV$ݸpӞVMb+v6w(6^ Xݸ{P}onԹt_rw)M!$d၎ Q,[OR4U`1 2#AAFzPޏ.(@={;v)|>^eͳTZU^Ȭ(_l#9Qs"0>ZJE %O8w+/;N  [ ؙ;,r~S 5/I뷡vd:u.-bcc˕IIsAlU[9!~ qҮ+ cU+sv%?{a!\l``|@G,3m8BgitcCeYso*I2._8j w2 r14Q}dpz`qubϘX3(en0?2E9sB9"<=ӥZTe $|Ð͎ףVһnd2l@x+Qw1g\YwK0 E G#f\ 'ns %$ՔB*Q=g֫<i dH*wu>iTf poʩ1,xqSPzzsٖMʫ(fCV2{9~ Hm9*F:9zj@na;1w=nMc'xsړ(OU8#FO 1ҧGg8>rPe#Xu8cKtYL@d> PLc?08Ў?uUޥHf94rGf=D 0<2q='!pH?7ܐJ`q$y7d) 9/㟠= U?!'=j" rwm3o}ZQMڛng1o~P9PpIn.=+jWؖР|'u\2YwnM68g,]*c K-l[i2 M dl3zk%ws%`CNO=?RZ{J8'Iw82ev ^q| DѢ`&e^0y0 p;ֽ U88 r݉-ʂ_qq,!~>VP;}j=|;#ְz튴NV[GʀA8~lQ60aT=Iw`v8/ܗzrxG׫iR")y0°$w־$Xt;;k`TmS+|§:ۜrF:'ܚwyǥQa`mr ֠;Fv)(CVsqsfm^7dF3yyIs[E<0 %s:U7+)¨Oם}f<909e 6NTҠQ!N>R@'# ʳƵ7u'89^R 9j~` Ja.3V#++[߃ zUK2Ŗ+Ԃ ] s@i|#lqMBӵ(02ch–bH#w.v} Ԗ u8\$9­،ucE"R 2px _̓$d&FCğ´]̟rU^qדه^0=}B遇lrsӞz ]Gb9䃻8'HAdg8bey.=xkDK.ŌA6nG'kb5;sӎ e3=epSK(HVAdG֔ $ z(׊ qԱ#iJ/P99sOlAT#vJ;?O>A:'Ta;`AI4.UÆu@qϯAS ['@ݴ^NMcvpsұ(;W >F 쓴дkDC/#A+nWB[:sB6BmP#u''Ҍ2liE+`YYPˌ 瑸6ea`)@܀O~Sc[h*pn9R:u9Fx;Do$nv\If<yȯd8Qֲk ?K6IxSpPqQ@ dgsסl g ߿V F3 Mp0'![$ =yVb9aW$utm7)%]=}2ea8ݽr`r#Ra28f qۮ:ոg6hc``+l'zs5v,'scsBLsКٓeECRLj%KK[Qsw"'PpkEgh^-o}~g|F.51tBl7#ḑWLT3n^ ?+9hc#tM11aq'zz)!I99'?yIEy6=.G~h(3`?Ìk m*Ap=ůu<=K{G~‹]31#<^s.W=2}^zZnMyw'ӞҰ';pOA*SV=zV+38a728*֨1^sY26T E(+"nV sZQxu֯ !A@ӹz y8'9cґ-~eFpdu:1;Y^:M(R~_?1玽ub%H98qc犾{ R @@='1N+'gڹd4wi ;=0Imu)huJWbN'5Ǒw To=jK8Sul

>MĿLq|菊*sMټTr1F;bXW'<}8?j2쩽z3<.ys2ܒy$pOP-A@<S_.Y+s0 [|΢f\ QA^tu(gq$`c=oY5ԛZPDԑȧ:PZI%sh-nKV#x}^씝eywAr[ K8Q1ZČBtZF'{M+ GC+lx*q$y೜Oֱ]r6Sޕ5F3HP>&G><)޹@ۿNtRWw} &sYB;qIHWg?u?vF}xdzח\ޙ\3/vGl+zKGc[V\56;wgT 11`)5bSD n9"O쎃?ZG,t3eibZ/;3}8犠#\rOF9?9U-њvEcTv*2:u#+| 5{n%"$@ӭ挏I3F0 3^ϙ$N<|J Sk}mcD~%D`.#o-dIAB*pk2Xk.FTOkԄRoGf|Gw]/C2-b [I U R̢\Lgr+cCr2E%X A*Al8÷djg6Cp9<'`f)YX#<˓s樱 &H  9q5)]#,Q#KgxcncWK# $SpPAx`sBIv1t1M:B1\mzOo`zI";* H{\i롤g2t=RFjxDft+#2'g%@4ZvN@@z{bN(#r]1RKB\Ǎ=dm2# Ўa,%Bu\x4u:]9$nd"90X26׉5Hm&WxKX8߲Ea.JZJ} i-v w]֫&[rUG,T}RHjM#e" &GB@+ОqYn~eMuG^9Ͻ5>mjVv$.$d#sVmq NkV\\$p܉7a\3۰ϯOQM?(+чe==+{Ќ Ye%$zu$fU€8}cCqo*d` A^=m.Ndh sJ:;N`/;#:sO}>#%EF $k}%?|c#  %nnwy6B T3~a`~m;n|OFk;[1, >{{& N8$ai ~f#. ӏbr\ #: i^2žn?0?txrZߋӮNc;@+(#Ule 'zwD3G [#^ǐztDOQSzV2샺1u=%Hlo/l'y^²HK@ G8늸AM d"Uϔr`~㜜_`+J7#ha7gq[rSby-puTB`1HcoG K|8 mz(c]!A`đ=\Ƃ,(" v]Rw^E9<iFWwabR}7b@?(u~#ܡpGN{9j+ )`9H qnCN׷R3q1'<>ӸE$^y8=u}Ž:<ҵFH*yy9=@n 899^7ֽ2=3UY=nH튫TH;zrN{Ϧ Uqz(IAS۞F>bp3Tʕ$c#=bR@I@_]r1}kGk cSA,rI#ҭ*jm .J #zuF>_@9+J֏*+tǧL䌀{^;ܨl~n:'980=?Ժp:zP '`?+~#C$z 5 vקM\|_in;ds+"}:7dg9'npk ]i *s^ܸohos'椮gcJ\Ҷu§:%?0H湛gyc_> '%ZVwH !lھ*5!tu0z6|?h;.Y乒8<䲆v;Qx5GYl;#f11WSUշ]Tֶ\q?n5]r(BCn2NpW=+$hQn 8zdt׻ 2"gk~g]nWGqsp IH!# aOem"篘Cp}^)~Gf^Rլ`kT29bv{Z᥹MBwm:"<%<@=릍wN[_cS_d^3S50-4~h T=-/ÚƧ^i2G&.&OM p"7<)T%3é 愖h45&Z'rv-S^kx.|ikps08l{{5[屏ˍR `\Wj6j [meKIm>(`5񰂧 ?z卺an1 XX ꡆwˆWuXB>AC繬!# ܘqROt@tm#dfR#ʰy:$g®K}< \_#ga4OEn[{P*G >P>V=\wg}aa.4'rxk[kF)Yc6YkrǠ5%S]X r~UeO25Un[sڴk ɚM4L{> "+?/rwTf!Vw6NUa}=nmR2ǝLėQ.JV*A88ק'&kX ($8evjѷҞvڜ0'ǀ@ߩ CӴ]%\ylJ|@V.4ˉMHo,6f%!UT(c999TRZ}zs 90TR1nI湭hBI&|ʻ|ð c$i<PAc⇨QR/1˕lRG@{x\NEk[m$Kz[{ iVqua:y̒>ރ[y$jeewJd> Uʉ ǁX1m\yYg]ȍfvS@|-*zwkݥQ56ȍ@;3ֱF$N |O?Zmxhn aqe o_1F]i7x}:$)1fˑYrq!Cٽ=fHK+XNXNOۜfG&G7ePNdOVpBxҐ#Mb*bc+jN1FrXy??iM"(LA1]nj o:'2 f Hs?#뿅 0ubHmؼp+NkE5LZH6L1޾ eB쥯/{w>+0VkʃR\K4,ǂk]t-+X"yTca#siŨwpBWWzkfoC Eu2\3 %#t^"WMVxt}Ih]BMm b|Op1ujS\+>)*&N{_ ")<=m̈́mn'KF\3w|Yo1$!SI_$is5(J>:IMi&Oۚ0r1ڸKRQ{+CX0xݰ;V=~w%=7<{T׬H/tdy$f"$&#=Km:OK$3\٫H| Zp3κ:QEevڷ}igMӭG1ķs#ƺ@'Yov 0pPҊV/n뎝j>zzoƸT}sp^9?G9㎽ lc0c<;qTn>Va8=:QX/]wAuF[U2b~ks^larÍ R_[E(覵gtdzd9rW0;W8`129(NrY!C`+wr:U8_fH]2aAb5h3f@#I;In-Td9_>e=kd6y2 P ox0kh{v!K1 6xU7T1p*$}w6G̸ή[j3@χA,s 2JJhzn⻵Pi p8ݕ?5CE<~I2d;=Guu]:?Y {rs8;[KS7+C zjrR~L䋔%m[0`),l8[#8LH41Kl+a 1ijwPQz3th vyĪ灷}J=C‹ #Xp[{dv$@=N"zC.+-'\ w`YLmv@g#'z+kCьԕ匄 \0|sGR"8`wat$t=Y'r5`\P FG`}i@2>BT .FF܂3oS =y52C Cߍ0<{w5;z|8'! :deH;R1wnbYPF`y#} Gp~#QgRdM@耶A-O^xcާ 7}=Mp+ш ~8Jr 8-1ېq;w,޻qzc"p\Lly׽$A)QK$3c 9V\߶j/R@qrpE WFzLCp*.e`ӚFb;G0J !..ߜgr#99OQѲ' <NsMl&@dl|W+IEe3,?6Т?)?#XWB?+.> ~&%Rͻ?ãvy#$w9N-.xd%%.Ϲ,Ll/;->a:кMjdn\rqJz$a;@`'={=QKcjː+0wf*D 8Xyrprܢ>wcOnz3?3g),8sj=1U~#uC{ese9P Sp褜c1[Ơ䜹Y,uA\u+d.!fU猀N;Wd FP#$ jXTq0EÑ>xc#?$r9җklE!p˜u0#%~bsGGw|Wi^,#QU`;2;=kCq#brlzw.˂W獈Dg,#@y$x sUE?10J|r3^?',g`Uee^f A>L#=:v)~"hrOL׵=aS-v`J4̨ļFIS|բxB}p3ƥ?]F`Oob8%9RQ<~8d<\HnJaƦ!Yr2A@~) pNFx$d8>/ڧ#h.q9ߞ3YK oݙA\HҢY u&1ܠ=r8<_aY HǵX#~e瑞@iKXցԲ}:dLm 97l$uzDZN\`򓒡3? ls{ "ȲW'9 ÿjZI̫)& 0+6H\mOj#RѨ y!U &g%Z.kGd w8 HǽY[ Ⴋ $>* b0G fNkj U_ H9ds|N8gr8 QZ pNd玹:f_[2cw{2xP wڧx8{ rw-"v/3p54 #L{թ[gK rv|Z2JK)'w5yRScݟZayU.;PGWVX  }zWy^܂K*T%׏sː\oIaBc\iTsh5R9Fnj'dV`ßUL- ILKs «|o 9\v֏²nOpzMVul @ 6m{N?[YRWRFyr !.ZVa<+d < g =u)z=LnI PH+wvc:*?7r<[QFC7HϨj̥ YQR~ ~I:t?$`$rƫ!M3.̛# 3֧vS.3e\9 MT >nX6w[%ݤnUlc/OLVB/bǛ=9$$2n,Yvم#n==jNF~̝|' \rռfC6`/J~;L[|G(9kfU=z5#'R;qe})]]HfffmFPC|f 1baiCqITPǖfAvl$1<{qC5 }Hgخ\̿y[IHįF2Bd cj9݊PԴHqvC1 cޝ@skbdduFr2`ӧ>2D׏]A XUrUƽqQ*SmGBJW q;23UR1lvıOBN "# 1Ӄ)6; 2[#(#@=L1;PP';7ct4X8 ;H9W.x3L9Cq(m 1 ,NSq1k4&F^A0@qyȬϕsXqWӦ亇蘙`ʩ+$8=1[A(W@T=0x$9Dnp/2.OL`d`Xw8Uq[pߜ '!8 6M0 26:{4#.pN!H' )fЪvO#4L>QzT`p1'9NqC-\cFޛ܈~]td POUaIu;dKmgr;0]{;␪39* S)%_.#s2ńʡްJFB3N~V]Bx/pI8<>NA9W^:R~a$$bNNq18  P%1q~^0s9w7prp'N}ނb7'd+鎾{gh$sl[:tdzcʎ(9G13;O !989j ab>`qqv6:۳$w@; Lh.T/*pa_,dv15l#s6~by=={TI;!w"J0rHc铟fu`83?Ѝd R~!FJOs85X1*~YCn#+:"p?9^X1`R-^Ppq0xcj.,m |u=l[b3O^01\sکzzcZ{t*Hǚv''8 x.p t j.~QzzO3f4ಜH' zIJzg%KeSs1d0FA-/=7qO~I9>~L`sG<{S}m T3`~=߽RzO8$}21ڶ`w8$>l bKpp1q=iUKvR2x'=A=*[H۷Gԁߝb$\c<`sVݤ$8 GVjbcc g~k7/eN8?T֟|?;{f,J$=qk4C*}G|z*pK'R}^^nh$מ.yRyK:I'6q:Q^O_NSvl]?0?@w'#>[u5Q3N 2ftF۔8_ x1WU@GӌJ~}s5SZ;;?Uqu$~z6xK$$y<\XpH9F,$1dUgڿ[ Zye~k0bKG3ЯN3^iwq$g,*Hڜ}V {d;{Q6ky #O˃ՅD~/d30PG3ԑڻ-*޲ea%ѱTXb[2sn+׬ hw  ֊w k֯ %\|MȮbRD pevTݏ*kۡ g̼u 9LG g }dI8m*y->*yL^ǰ"c-np1Pq 9~@=+F%:2E(9p˴Ǯu5ZdFծ=đii%ۥ67<Ӹ 1$_~lgG/6$y޻>{I 0z8[[wfc9)Z7dt[O{-`֡Qu~P閦Vn˒o`zWhc*E m-B9eUbB^YW*K^=粖)|i{7s|ϗn=WNuUFZk\'GE9+$Ի!_$E!HkΫ$[i=OH6ծ|ml% y#j{3|}t4I)~qڹ+FOo/utkĉ \_%_+D%JܹH<`dcpp:>W g\AA>0; ccI>h0\dTwsck.E^F~J;C.dE8Fy珦+? (7cIe?.z`4~I6=zdOz,UeYs@ʨmz~Fd&FbQ.~TlKFW/$+n̪ !pYH3޻HUkw7Z}16L&ڌwHw O+0r#gQ+ 3$2Ǖ-( K,YH3c\[w4ЕbْOp', ^MZ*=РA,1)5-g^9nxj T9ێG"X(*I t>-$RJB(QE8X?e@# 93$@c,N8XH usIIBFs2z\m8[GzzUZrH" VO {8+ 9e\,!C pvOґziFUr)lmϊ9gscG>sjihƙY˱Y>axmR9?xvme c 0$UCo畟D aPێ1=yU\`x\g<MnH<3#y,8嚰&2*ڬ'Zv. aI :-р~gQ&2Noȃ[aR:_ezr>o֭-F0"EϰmPvu8k$3r>O-{{z^k>FG&wZk &7P8y$aӿ^ֵP+pq1=OPxj;ܕzKc jWdU] RULe.#h—+ʮNs3ھjKW}Te '1㞧i$w"E9,Ж qԜ{lM5DG.S+"dc9UVQц9 ?wֹ:dK,T`^wi)݌edŒӃchn 2:.#&Gbp8:'Ԣ)c!vaLǠOTדF3&K#htj %{׹iwŻ *0?9aR/$t^Mw7xBA jp:11DnLm`\#=z^MD w.O0BW0[|x5KC+ʸ\'!q:Z ss^dlv1במ])8g',9z~e$R7 qrFEblFvd3 7/#?a,A}Iuz jU=u.6r$`kBp;NXqpMq;#qӧoN1Sfa&!t`b~ld(x>t]O'S~2g1@9CS>N{;{?8Lзsϧ˞x9ҨD^~o>_J Xg8Tan'7fLˊ1Go`;2hc6ܠ6]u UK=:># A{u1Ѽ|d6Hߍ}659W)6:x:DEC`0m)N3ZwcQ!eS Gg JIh_T\/ U&f'f;s1^,&X~ҫ ȏ&UHge3t\tu;{V<2Ii'Ex}YXIʈu{TSZ^ڕ(_[}]`bSx$Tn3Ց㋿&1=$b 0 FF䁞 \jd/7}3u2S"ߕc׏^9vg ?Z7!>`@^MdH/r8Rwćy5Z3cHt1׌S62J_I;rV$;\t<{u=*@\Ge- `}gȇ8q-DhΗ0Uѐekv~%x kK]2t6I^DYs#M۝'XqV%gN*}|*>FFG[[/ʏ qHEkk[Rw("$2S^Z%ʫfw;9H8ަyJ?bV):֣m“Q&dWnbH4?v2U̮7o# 093mu_451UC1H1ѣnAZ꿅Ɵh;>|3~V \3l{W7F]II!{k| 6ar>qq_Gú#(J0gfu,UDғ}4mXeWQĒHG*`S'ּ`FonBuI0(C6YzTpoM+-&uv}?[}o*OfEtp&2[n@9=m5-ZZk rxA_Ib7̪"9Ulg_xMc~7>3 q9J1 5*PiJ72gQ~K^NsA%a㎞#;#|0ls[F\dt$Svϥ$yPGJtzzUs6sw*J]'\Abzd~h>f2ZFFrzCKs2>Svc216$,j\PuMہU#N9ǡ{ Ϲ\h9?)_BiG#}#'01l$c ivGUf;I<`*U78†@;ވƵ#x A @SwHd`I~V0:kkz^LбrsW8+UpYG'nT9IHRC"0PXeaRL P6}2Jè'9su9tLxP0~kH)R8.ǙQF20Ol;9 SU>bVR:uNzThAHnFVfSWL׷دͅ'f.}ͭ=y'2v7֞٥#F&YOCֶarczRwv=B{t (ی9{~6ӿA!!p>cʅ<֝NI;q\_3cPp2O;9%C~`;8pX= viC`P;t+j]e,Wz8&@B~C~;o'F9y?8yL;.1x6g Iǿ4H#ps̥HxϷz?@\ *4FNP;$.ӌS& 2?˾Mzs>.QT:>hqcc$).Y)@$ Jd .gc#.3lnA9*2j"HerVBF w3x{?0SH9udE⨯d>RWk3s1ku~V.'͞QS%%1̓X" FĒ0 do9ΛNMt-~p*ބHiľI'F.o&#qrc ,xuiUF w[-K&6t}*ܒ|8 Ƶl-qo ʳvFe̙8=#-\&cAл7eS/29?*@xbξZ_pʜq9]E7QٶKpA*8,zsSm!G˼= WyڗP{I /nVʅ28鞢J2(ځKYO#?SŅLCK 1Sri8lszԿA ~g+g2G#uZ-ICHrTdt,Uy)뷦3ZqCp ۝ۅW*8ĊǖamA:զ¶7qaÁq֞ƀ2T9'c=BX*T9-rk3BUF pfGjb? ʜ c@@.'3]ͨ*He^+;̛TddGC|ܣ~r2,| =шvg[9`YA>bzƣ#/%0\Pvʗ9<A4Ԍa:PpOҿ6ZPSylp@9B\8E膆/BXI<877}U6 W'҆1 UӀ[l;q+3h!1󬭼9;@=cø`éAKX}C =*אW 'h?lW݆cr9늧>n1֣W\= Z-Z&RL916q4l| ?{k"Rn2W',J[ *%QyGZ-lՆ26x *kPwh B7Zvdϐ ?)+sҴ%d5R$pT_Φ(AGHSN;{#MDArvpx}F:W$=X{69'/@gq=W-LˎvAI;gۃUd)N8}k M&mr6 1 G?~M1%9ON}]MU#Uozc-VdL;ݑ qӯ}I+M|lek,s&1^3bۀr:[OF1(uecn풵  nŎ޼U\3KXnӌ:cH.[ i؏@.#'% GJWl=nOeus&HʡsRKsz*h\:n 0ӷ%TWEbJQ{MDkqeP`oYQY. e;UxfCI隞}_( vUi uwf?8O*rݪɨ4L2FDGbAg/ P)ztcHF,FԌacAI1U|\(߃zW'ʼn7oO89C$I0qJ2O$Cmd眞0pE4xnWqm׹qXBqr1qF3 =acfmIJvDpM+'Ҍz9;s&~\ B>㜨ۃ?0E8FnLPÜ'P>a}qErL]LU*s30?+F:tKBO]{H @xUzAVlt봒A8㏮i(S <1NQ>vOdfE(hmGpT$hE#Hd)opZG ۂ#+4^2uVȶ3`B.>Zxך߶NJ@xbgqtӦI# t՞bGu2`2bwhFO si2Iã̘;dL\ٸt3RK[$ad" UePC`Ps$H!摕 N%PrA^~\sO<ф{u:R?"( @EYY瀤>plS|kdNqTWšv}6 xG)-?ͯAuz) FK198 \̒3ĕ#>'+ZU$z_ҠFl < 2HSPdx?+0@ evлrAw2קnkbYqOn)I"Tރ,8GCIpB?6?/Jf`\Fs3B0GlZ ,HLKHsN'p=*{R;@1mÑzkm8]Z `|#4vo1G$ŀBN񴜶GAUv_kgq'-:iaP; G 0x9< 1yF3ovrsP22W(3\‡?K3e YI q*F=#nC*|oԥ9)&p7ߛf{ ]UhI׭kr5 1~s3۞B#,qU+¡p<2;84#K/W~^T +v V'd#nP ^0pV͔ ;c-{)FUY1\|_<8 Sh!^9P:rԗt[/"*qdKxY1"%JtPɄ^|+>C]܌Wbg?SK*U;>QLS~ |ח9CW)Ӟ+ٓߑU;Cp\M4LS3.%!rp0x8+Ɲ̆1'#tzo.{۷RIQ)G:AdUSڻyH爧! r1e|n]Oyt~M$ua=Ъyp@y95Aݮ%h1U"l(W=HJpܑ<W\zzqTƻ;WxRI^xG&uو|5<*9XL;L7ųzԢ0>p$cy?{4+z³1F{+/pyrS<1~kz]M!Xu'1\HpUR#p?ZѭKa# @Jg@`yN3l~8e-ǀy @gYl>\`x;ss4Xu7c!{d8q~m `0HU9 +ܕ}=q0;F3zg}5Pс` 󍧯˟#hE'> a2=L{WOO2ٓBwnL2q]r#ďP QS-d;(mくQڝw'`@輌8R n#t7xqpG8+pevrW3Q댜{U7~YX>:sؚ4F,U&8ln{4+dևWRF2>jag,p 3뎹RK%R3gz"?z# ?hAS2 }R BGN~\OSzDgF91ULX/ ]CB;jх\>f;-)` C+ -ӚϟrSy.#ѶW(\pC$r9A=)v~w9?R= Q3g`i6 Tc3sX/{w:,,Hvn1#(qWӶAov^}ծa ``L }NWMq#ޥRCUˀOqve;ASGt%rMgdd¢uS^ӠiJїh09=:z\%Wrm') b2VN^W?V erp71U9)7Zu8{D8Xnl>9+>K1ӡSp#Jg_?m~gT#R'xv08)!v|UQN1ݍ>@4ȲT#_-8YZi"'~Øpn)J{魏qnwE7I.uZ.%܂C- JnU<+ M>?6@v`@ۑ= 9澊rxWwp1I!=PێGl \wFb=ppzӥiyu 槸z8>Q~5=*>\nj#Glz5ʽz摧,Q`8=Ǧ$ z[>QqWO>&&tDRյHDf6dѝFҼp2@IZڔ/fify@teNүcB\B>l/kFf|GeWVـXNOg'+FGnzQ!^8”|J׸*yfli*@.p{.1g֟օjWId6E$r9z卽;e]()Sdv8Z47N/K;>+5Ze+]~g74g!?#>\Q gK۵V[nᏗkwĎItDFi0~-Om}ϥ7&`LFNT2Zj> ʀsۭyQzLbm#Iq>b0ww;ן3e`G_@1\{K`X_-;mT0zcW`cF2s?nku=9+h2䍼`.OxێzV%fMnrG*뎞 D=91v1S9%.%y,HcO<ں%=E^OTvE.s0'ק6$$.dsom`~\|czԍ!yrJ4lHVsʒ>FI8:sW;rdVj[3^?N s2r=skbg8 8>泪Ik#+Wr8Vm#dJЗP2ex+5]@I#zΥN͞3/d`?w=?ڒDXQ n$n=Gb<ֆaTH$<PhslCgG^a{֩h#a*dpɸm ORG?p7J'eq;sGQW㹍yȥdSnH"6wֳ˨+ҥV-i [ykŞ僔FX5\NrAU+#bT.=1KDQg; y#;X'Y쳂7,lHt9%)3m-ت͜XE{o|UAJj^KgiƱ, 0T򞅿 {fX;o+$21`cbWp:,d*;d/* kof~LНH<)$b]aHv9vr'*Nw.B&"uZtfm:r] `)a ϧDtˤ& N'r6 d~EFnmV2dG.x8ϽiENBxVbxzU=byc8p8>?ju9p`2H!Nx9$rGH63㒽p\p/'NHd\snߙZ\%1p2?>nK;~^78ޓץToNS"gt/{t> TrK@Ā ГO'O'hc޴NN20zc&Sg=s|'CoArz1ڬ<P;xPsꪈsOQV#` 89Ġa21 Gp8ӷHő?8縪/<}:u"bTA8qDg;;Nƅ7%\BTzsЯ zp#۽. c (9 #t(.s8؊:zM&rvW:m6rGb9n[hI.j{ȫ) 9ǠΪ/@8$As\rݝPNO@2xҐ<:XݾQr9ǹOlm{}}3ʚNz}3@ug:qϭBsܜ`~J Em d3;~g/cץO.*<#&HTA=&c=1/TW,lA2{sq#bO~#រAcHU[}SӯJ: S2Gq^jl8=zt4'mb gj8:sO9QנJx.m1܌A$sBt! _rv xs޵oF #!Xg ⻫<q?Ozė>on(9C)9^+Csl}VpVpCB[޿GRTJOquI͡I<@͖'i䎤5M\ǵe}8$d`s[՚G,ٻio#Mq"M jNsڹMHIcu#۲ j,P1^mKMkmGO݉g--d2=U݀|"d\.~vp1G"XECF-r pnɕw1x7 $)essZ¾DI3l42(YUH *Sz V@z8TTnCz?i٭e(=n2p]XtGj <(篯J艌*ȥ?(#fwo8-۸%M9˄FY@q0lLyoǽsc`*ǡ`xCܕF9 *brд zz 5}s,TPɻ=v$23ZRٙ5^K%# ʹCnOAL٤+Ri颻™,1nOֺaUyG%|:z+mv:}{|Ib,npTxʦUzNm#kq`ӭ5;rnT8ͻ>IywpN\y<^ TyX9kߴϰ88jܽΉX] 1,>s!_ZS\N |]GSwo#@ndr3(W ޸>$d>"O$N2C0E'q;SBx|x4hm]Ar$|U T+F`Xb%InFxerlUFՙԠoT6+dt?yxKk<߲<$LH|ew>J;+h"Wy'X˰ 0$chmzQC2β]LX+y`|wc)|*dF6KӥrK%Q!9Jz-eK$' tn2UZıʌ*Yp:J|~ 'nWbsֳuUjrrjrۇe'~㪃 WD;Aw`4P r#!NF O8Vdz%8'kn`iw䲶Ul.3kּAh$n9Fk>#K A% x> 5m^u{mehxcݲPrAoz`A|'u !8峊IDfXR6nQvŒԹ군I|34iVԵ+-a.85GXQѷZM;w;}5Q\Ż#ou%(a!+s^5>Ie+ݍ39ZѻvvFhapWpNj#"AWmA dz b07 38 :<O\OtoUA=NE G-t(,AQ`g֧iB.%y89"Jޤ$m c#95] %I*wXgJW8xpm q=j2X18| scI 263hQɫM6 zn`%HPO=#WK9vGP*q3EQqg* rH>hЁ6FFĐwc* u:skax`s+(f91̖$d"Fܨ<9ݟg5]&u;~> Ө#40m[ɦ}GLYy6!p~$鮟f/YnʉCq<0Bd [I}p]<⽼6.T0ztIjϊͰ1&Sz6{unWLȠiyZiܳv IGIu5WU;o?/P^pUXD r;c57-¿4ʄUV wRi~3*/j{1Yʉ`_.&j Cc#=>=q1Y+248H}x8>rJ-&Wv)4gIpa0Xy tk:sg vk23eTmq2udz_TuF)-V?2Lk+D[J+5u+EL%NZ3pxʣOC"X$wir!'z\4H~TG 9ڜ&Ee 5?dA,rKH~j*@ˊE,ZBY-\5Ӧ'Ubߟ-Ma K%ďOV)Wx7L}?N{QywSb7\_;f)པ4u%>%}_iS_~'nA؎zi1gYJ֥ L%zAoLwvwQ#~ d=vs =*{$V=v3r:W#plugkU|ܭqē <*3Ў}=l N;~o#nrr`HWCK`$x qS+aשoZ̞%`!f<:隉?k9ۛ6S9>\V#*l SRSY)D~vQ 8~UOzT*y8[`ՉNT˼9`t&$Y6țU-FGNsڽ[ơ`) 7Bq֬&0́0#O+[3K͂8\03R`P ORvĜS2(*sO8?ysqOQm Bw` aBa9n3 ϭB s z6~l@cϯ$ކG#'9{…&͖y $q=tN=-iSmv#צOz/H1 ۭ sw8Rc== lr: =7F >ߗ'F3L-J+0OSNH\tzzQ17$=8քqINw9ǾH:%s2́umB[9\9xu,seQRwSޛCX`G\Dܱ >w5,rB Y0ӊFPX N  6ѐF:9R|rq@ 23 zuTTs*&x{W7cvthf9:GTpyqE^]>:= RX󴓳!,s]m(drwW Nj}[ 9'9 /p{{M>"@ېB֑[ʻ\S}`@æ?9TČ8'Ͽ=ub~ 9j`;zS@CdV?6q1j4lZ]HT`?78jC\.֔E+pTE2.bzZ"3~G0U܀Գ}csx.(Xx!ZϒI""f05QݶmƎnE$8 gi~U>$8k#CZ79c 9=sةJ e®2\3J~eFsv56+!'@8\g۽f!9䞼Z"fQz{um0 Aþ:}h{h<\צzz}kAmI?瑁MܭE˾Dr36w .A:+f78,>ZFuTSS~ + y+u0Xăx@z䞇ҹ[57s䮧qg;fvM( #);vHͱz~O% 2F2x,I&2eT*@s<KFl`B˓QOfANyn8#Z.47zd#c$ qI=¸ xzl$_뜆ң r+ONi*b0xvܷ<yfJ&V/ %' $l2Wz}9VI?4[ņh#f}62 v֚na2 6ƃsUrԫ9rWmWld* w7B7zq⨢v1\#~֮iu2Tx2$R8IBVLsӞ̈́,܂Ca.q9XUH饅rJy޵wyfHd Tp^m ~e br91^}Z{;#֥B1Vi6{L҂<:{Q)wʧj;$4)nK]te瞇=}=;U*pHU&N|cӮrkc9<S@$Hv'?lO͵bABw}) m8ǶxSnl`Ar2>>9`'8vnIsSFCO8vab5 1g^էƾcpr`!>奍nwqds<Ão]d SןO2zis9= Kތ{) JRH1};s|;yzabX22`ȯh\ ;@C/=xѐr36+.]XT6N >:U* x$ԥ$ R_G񞧓6I$;!WbFn98Gd-MveYI$lC30lA1qw;|O)~V>ԓԥ8#l8^#ҍpUCp@?Nڀd6ն tG$ ;gB" %'לƒO|8wdS$`j. 8~l`vo~0HpLdqU Ib7d*89CnHL 7\uJU\ G"27.y= (:s~Kt 2x* ~n1[9zXT` tg* -B-V$r ӏ[qHr@RH$z9~1q9ǽ&4P r0 'yW ׽r*|t`}"CKc1C3);"we@P2i\ڏ2!FqiK0V IRN)|!*:?~*`9'rӹLػfF >_ +}q׎A5Yp<:@!=r 7=Nx 9^T c]Hb6q8'5/a,> q/Ž+>@2qOAc\ܴ@FI%v@cIfYuMr;i=ֈ>aH >@@۽LYobe_Ǟrʫ_$mۜw"hbFlHz HzXq ,eTDg9=k. ,F2 =;kE8Qɷ;kF7 p wd )zۀzt9b C6I#kaOj d6RǏݜxzw+vo3m#?H޼5nqr sw_M{nt;#y'S/{ C.8; >GC_R#y1 vo#Ltl$?C˿ ݠʃ@GU̍)`99=~q8ڣvݳ,F!O;q}Jy ܆5KCH!bq>#'8~MtGD-+DsON)I{S4䪾Ռ/F;q8GM!V/xpAG?ZOAVВ 0$` n:Ր9 SFNy89}Fj"{J3p *a*xU Bsʂc}:X7v!?)`F)2zzzT2rNN8>?N)Qy#$oRON7ic> `)#vvG:j 7MUOqzx|Osk$GhDAD.'@̊0hAH}$-|'Ro͜,A^An'p;Wc}`piu}q>_19'ݳhÕ$SgOUY=xǧΎآQYK7"ǏOjSǾ9 %fٿ[n޽Xƛ2aUnF|=NҸ*Xsoi6@~IAʨ'_ӂHuZwoU;mUC墫*< ۆrV{##;]&Tr6xBVkP2;3Ų 88EAjlɪX*IoB{tR E bǧJsIN%y?9ROCk  JvqN:8ɮ$۹超3c%ќn3mwNzTF#).T^IPpN0+ ѹfυ pPs$;'ޣ Aax);"ܶRüHb<.G0 Zi\jrť"/rU%eFpW Fq^R"]>Tg$'hy+}cILV8P H 8<#wC(մK M"He dm0Fz޺]u*qMtOm6rqwnMo(ýGR1"m>6b1 ð Eѝ#n3}@=5VÎ-)mM%qY.R cG*,`;>o6Fd9;򯏗'瞸=ss5 -%9UpNFmN dKjV %Pn 1>S6_+TuZUю˱Up0;N3z (-ZlG qgJjO#f+RJ;wlʹ)F7` y`8玹9j6aϚUxr0sp>"N[fxy:[8q^CĎC<gЌZ|$?SJZ ll[j7̦N60Gimp ȥGhAsdǽsKFN;tevd 0|q^v%o*U(Gj V3:MkI==yU1͎nTztz֌'Yj[:6! 8$-[,d~0@?!]s\w~]6zG5d|yX'*†^Eda9%NU~*>Y6zxBc Ȓȟ+m~yH,Ќs!ÍV7 |}:nǵpvKCt:RMnɒ74e9 ̮F3lR#>B^;X62[îܪ9HN*+;J@IN>m&C{GҨqn\u;pBi{KY5#Ep8 yQzgjCp<}Afǥgr⯩,88C,ҝko(oLG8ݟ҆+=Qqx cNjvndREkJ;%:k-qUb:gsM\pcִ]nk|\CoSrJ>d';XO|zzRf5kC!\gv8V}N>mc\<ׯiDӷhuaCc*G>C`t MܨǞp8<Gcޠq9}?Ĩqlz?BɞtR] #19=Ȧ\{sۊ=OϯpƛĄ0#Nč'Ny㧥EgMJ n0@^ `⠑6ǯ_?'?Sfc'{sQ'?e-θ<׮@Iжqe 1ǮH{⃓یzS}z<${7Ǟ 䓞yj 9*W8R[߰ƅ#Iz鏥\W cߊ鄹S"͖c$cא?/J\z(JȬ@c̻ebF\{8^mNBXƏOcG0U* wȺ?NǕ껡7IwFVH- V|? ͠m"^O)1Ʊg.}c[S~[c+2E$Rc].݇h3ealnQ5.ޥ;HvC$f g9<(3A^1|ĔƮ 9GBe=£"bJNFm>ҏ|%gO)9pW= WLco)^%&oH 3Lg9'47kwFD lmK䊧 -*[td6l \͞3Juɍ]LWl.Kkc{%$rG嗈n G _֩;~x`IHryIYvs]\a' n6rKgU?9r-28oO'[Dl!ؒ{Pvg@Gq[؆cpg|:6rX9@8ϭmf4D+m)17|qP=\q S(1[$C+5(OCF~qJSoCEhZ]j68hO,saP8 ڝL;OGyo3> ?|;9݁^z77bzUW98Q*VG7/7^_Ĩ8c'lL漏S XgRyϖdwy /.QKpH1q]_B%#%}ELr\jqˮ$XX) `k4B !tg>\>`݃ߓcN_!A fUkAl '$GhVm">[7@U{ Z^mDyuգT;m)qb OoaB>䏷϶{rOr# O9ԼI}8$KF!-'#һ KͲum҅PfZUoNn\ }0DGkF:?7;;+Zw[5FXhVrO\~}4. ol(;n*0 5]Zj+=^́a x $6yTM1I'30BGPhj3`cIR@lQ}]lo\|6[A%xcEDF7H9+$w:Q8f-}[mXFUWGˏq\ф[CՎ[*OڗSy<$<' gWg{g$.:g־OZ״V>F %wտIҿu9XPۂsjU Ax_=:&k=4yp8N랜j{r{3=AN;7ojwמ'BN,Qput?N*CIɬAtaj]䮙J8߀3TU(e:u~} 5Vc]6QeF9_tubO]SOQ=p;~fqwRC!er=8lqU1ם dqMr@ 03S+. }A=hO6\:'s5G@$῟5->IgFݞֲ.-f@[d#8Bv3jh3d`_±s'8蠞s+,ԯua>g(2@ Wi Ұo4҅B2H@PNF=J쥉?3ʭz$V~ޑW9 pjk+o!WqWy`68=kN7<Ӗ(dLcۆ8lJ짯R?#W KۜBxhQ 1q;fMޒHZ0crg~ϽFIOs3[S>Hfb3a#.X qQbH VAd|iR+0B9pe G+Z na#-w 鏼{Nkkx{۷kli[o>n(+bBWXx%S]^әj`赪-.n|Galj2% yq ݰrtY ;D$1\ѨBnQ@:Wˡۆo!@<+<㜜mM1OX Ymp>ۭR@dhMBPTƟ(PCߜ rz|b1%3D̆xa^FPߛ#=H'P!rz~]k&]O?CMZ*JFH}^O@_l3 ;z԰"SÓA g6oS\0ҧDqL*C|v44}H0A*2;mC($Vr|@LgwO;12>A6f}; *Y\8 ;Oo9vr#8:dO }…q8ʐ195?|qT䏺}1ބ26c 6wO8jf1`۔ *z"60x$p9݁rHۖ'D)-w 񎆞[N2Wv7c d1n8}dnAn9xR'bI 9^2{?#aO`1;)͟.r˻'8<`:c Ej 1vpgzv7#s߶i=8Bs08HU dv=y<}LŽJ䞋A$:8FdF@ ~Gqސ;w.Ҩڿ_L0#2H=OʩwC*ߌ 㯹ch#=?Z!\I8g|`b4 c ՙ``b3'E ?m֤t!O'K[![ctdlUwqbqE25ncQ[xIYYL"<0WʬjܠNp{m[8]D`pT)HsxΈEn#hf'+,J\#5KICw{$r%%m\3;<6^8^ qvy0Hav)d# WҟS EDȋyl7lAհY2vO'=;Wvok6+H@%L`ߌVfIjO 5ӿ>Ʈ:5:?v*ϻ`g>ܸk7Kst_ElVIv(U\,Iagَdw (_֚vĮP vz[){Si\@nzfG'# p6s=GQR{ L 7rpG]`.C(P1$aAUo#{RURc#$gYO#z~Cdk/e ⪗w$m8?t>!؂xeA 9篭 b m^86b|q'fA$z楲cepFws@3C]ZG8`8͜ukdiǤB3h<#J`Q $$8{j{js7]C&?SҴ1 Ԁ3ǵp`dp0w94ݏb#w4NvI/锣!wl `k9 UC܏Y9\cnf88F7 uOҰD A=^XHC`ەliIjWH'*~?('N8i7{$03ǵTw$Psքa `~[;@=SwfR3Mc-/kȄd?B+ROhD T Nߎ׊OoK#^zU`T4rJ#X u{W;n3G30uSW_sFNfc2j(h 8a䊰 +eF6+g X19ug#e.]oOү=6dC J;p+;]mbpn'r0ÕOwrxED!!cqoz#w2j)ٳ<+dg$M7 yHswnTbQr](\uP%Gr[,F)?uYuǭX+},Y [ B@7{i sNFQJ7sxqU̱n$R>P}})/k.(%z>2e6P eS9#p;U8p2|FH'0x4r8#% #1OAuHT N 0<ۓ43WiUB*;~aq#=ĶUWyӷZ"vP8!YY_2bArJN=Wr% t [!A8pN0TBcaV|#zsr<ͷ,p[ FvqJ!u%WpdbFKnݟnب7n8_ ݻ0qRw}^xzo} 9c`.JeFGElHj!'RW9N: dȣ n~] 9GP2E'@lrJAqe$:: ('( '\`w.NiMIg8ݻb}ʑi>`z]b['杵! `2[8=zS.9 SS❉ -рpSĐsǦqU,Uc|8~ qV#z~8 ͐2UlEu}Y d0Sp21OՀ!I+q4[KypvVTw9cՂ?6u9Hl΅ua,@R)g0qۥsz'NI-_I{J !|R?O \̾wPh FNܓɮі[ʴu3|+c\IʢۜYi{,9-B}Sc s5R{]iw6Ѱm5 $Ui|am 0P>[:p۷Sq,,pImHU1?{`qzPcnY0J{%J7:[vk͜Lj3iqʙܩ\dnBֹn}lpZ"gdYwuM-m8_2k MW"YPr $r{u [ q9#8{<<sln=x:BN 9jKE4`Tv'ZF U,6 #ަU-S+԰Qc`WQd#hzzszni]ڤ+KeH`'5ݨ\tÿ''bikȌb`yyU~w?vbc Td+oq+aen+.2r=qc/O#9Z=*P˲2@ F 袷T;z):kk~gkhAyFڪPJ3믔k t/lr^sX SKmn#2$mUBިn艰ݴ.r~7x/D~kQZoxZ =$kӴMFxPv#i8g:\%Ie$VrG*.ߊ96c2 nsznޡnZG8$(rF[ne2pp'U6LCrЏI*nw[q`0r3 ӌӚ¬B\@*$H>Z>$1srk%$lCT㑂I>;}k"eTgJ9=P9I_W? A$p#%z:WygrT.P`x5%c})]=VܪRIXwl}.k50C`~kj,^Rnl$`<$rv9=_Q\3}'6hh2(8Q7zs_5 ya>h* H=rN*nE(R>zݼv@?r:[6E< 3LיϪÖ]9bzm9I"dFhMwj{\R9v]Ar7Tg;Ny]f-̢0?sc$ۥ`hgđ(!u1l*[5dT`gOyp@~sS?Eݲ""$4ce'zc1rqP,usP|d$ )(DB @!J H1)gݸdQR?{r ?AךTG;g'?4v0| #c֑67QwnLEb+~=*-s\:9TR1IzzcW-Q8S;{=8W$pA '2:Γ8cJd}z灃WbF$͎z08n) od1c q~95\\rc=IHDvyİ_dSPB|2r S!}Ojͳx[#vVC U{ w8<]>*|1;o.M1[R=h sGn*3IonH=CPk󁁑209ӿ#zVvlo$({Jw,d!׎sQvT}0'#HЂp[.vYܑOcvWAxa'95[zz.~횑r!O-{c=j^sz:ܣ'xrrW89ƒoZ̻Asr;G,2 y-)ZVK#$۟0rr 6GR HU6_{Ar1Oj+v;Y%㟠2ITݴ$d?v ,flc=py.kTN9k-h<ۈ#zVAr)x ~ji48B#k6,0Hn)+;-V8xԂI0,qx^-*P>Hc֙mY&>l;6<Č?\$GGv~O\{B "I$EoC)QcZ"AN7 @.dc'nxzUv"EmmDgz[C8Am~Oc.@~ z'QtSM#Dv2HA<qs3AZ'q-l u6b9*R89=;WGz39r0j91xU+VI-'UH +E ˼zw}._I 9{?Sˁ)Pׯ\\88+W>]O*{1\쒖=G\8#_byIsptyR(?ݏ=ȪH#zt3צ*$o^* 0 3QEU84ݎd[! Xv+ZטZsqEGht#Y>ڝ*Xa1޵Ž;,RAÓ׏VVϬ쟡b8ps&sc}ji|P1l#F+LԧSVJij0<ǹ;0 玙5]˒~lVBpBp߁ӊ衬jFMbB9T}=2=}q]oL`BGJ88oQskrpO#1~DpqqN :|玔r;l Bˀz╸ npt g=xGQ\08Nz*r1zNq֝_ۖ/<לzU #d6z21@4">-PH3Xzh!J;6ְ [;F2rV"7PssׯswGW[vPjm?8M&E$'$T0?( pN~2[qϩy! 89*}̀Wq;`{v#aB[\[Q 4jvnWczsos\$ KiUD}.>\w^WRϒ[?3:Q'®bG/l%keIm7 7e @=뇻mt#ё[n1ްΊ.Ʋr*lj8ԒP} I޻=W/=FOUKm\q?ƪOSOj%0I`0PI'xzTj-u=(pr{Ν&N0;rkOjFd=A:VM8y9yM2Ԯ0S~ZDb6w qKS-sq|qǕORf)ݕ9}* 8<O֬19<G?M.;sԑj= }_a= 8L<==< ps==pxY~UNLc02 |NODW['I>^@cf\HS`cyQyHV1°RџJeX cxݏǨqWWɀ:Q-~si*67˟NkQ ;sҽsZBzyn?I;^.NJ|M--ܬ+HԄbO5\FIgwl9 75]ThӊIZ(0֖FEs\QE#&褬(Xr/n3_Mh0iy[F%eBvʤ+ocFV}\FmH[rk"Gf〹KKE'kJkSDӐ9*Abp$\qD3#(#ys`7c-$;8"q9[gDA`s+c!9;ֱZ|˵ 6H P!NҬHt oG;<稬E-{4. oī%s_N1]a'\ #y0O:+ꖧm*YB " d8˞c m) F2gcְ7jՈU(\ mlr"#:0pp}x $i~e1~f,O_les۱2z"dvmf%OYJ`# =t.C9K1KZ]aKKw`946i0<}ݡH qqLGunr >FQHO!rAT%\r@=kb=j7lA80sdֵZt=A}k)DRG )ڹsX񶏬Y=٤ ,YvY&#*W$ԕ9 >x_"ho*4-+=nHџ.rބ5W[|Ȇk=&B=e{g:VW,wR|ѕ,daA lj՗cQjAll}[}IC ltbnB1xsw@^gҴU4ދ9 7)nT,c6u^0Ì'Č\,| 03zq] InBMnWa q,cv#+Н#(Ē}p3`NN_jWBQ舼GZԴ8RY6ǬINxȤ>O"樖1WxGkD; +RGhM{+TimVP R-lԯ|7}  Uqql 6ȯ8Bko^-BEtG@H.)j!YesLIubuP`/"=/\`}b6P@~RIkmy.ˈKlݻsҽ|i⌧._KeHhxy^nYu;`pUb <һjʥ8s9;%V6䋊QWPOxuHwfv>cWv'q"$[CRrmtfʌ/^?h"1ҹ#;uYB ޘ<^=etuj/GoJ6Urw{/$JӃ$~fs^x%n2Xh pr3I3H3ZWN0c8+]J=ZTcJ#'n*1c69fgU2Obgngsӣ RK|?@qWv $ GN{WzZd`Rr _*'yϽTq)nd rI{tR[0}2A /~,s!~Q 瓜`UGO=z<>Fh 7S94]b9ye8>c\8 }ޚG,+Cp{N}=9{RH;W#vkM_RsOǧL>9^[y>UT2+H0XqkG8oe6,8`cğp1Ym-th0_;=j2(Ug~uۼql2 sXW21ICjhfgOn14]3t]*œ6eV%199Z bͳpHVE# p89ZJqߝvt8xnzUص) H֑fRCmpřYua&A/9d8H]w;dOs3>[6 La` =A*|6 ʜm O=x0euqmo򓼆 H۔·֨͡hWRb mۊ/jA!\<qX^&IQB{b#6R]KM xʨ뷮4mKm]..Դi. ̬*>c*:F>|an01߮*z?O_|ʡClW*Ur1 GM 8+r6 Fq4l)z1.AP98l##9$84->)d՘dT~aUXg | F\ cJڇPt#NG=[pG֘7$`g{;)S{9TE?)^ߧJRYmTŹl`2xӭ=,Jm p+>>ZWԎ;iYF +_pjt#ıc)ďOB84v.sG6C(cԎqޢO3PU ӌE.>l4@6AQ}Vcӆq0م;~9)_ɹdha"]);6!_89OvC#O923, aT:Uy{|ZQǔd;q|zU[vJM"LuyObkXvח76fgnwF;3O$I,JCYWT|݈#;ìVV1~c8!x8#5}jcQsBAl6:4QC)"!(]=^V eYyɻ{Rnr]FIP7n >UCAb1 0E l>p>Qט\pR3qiX_iSk${2nZ5W O|1։ lijZתtI239o| '$θ|+)Izn([y V8{*9U\4+ p3Zsߗ[2Be$\D V:ZE)2 \;rMUO`K|)R+*fpsë.H@$@z/S=ṢT7 0P$5I*J͓pL VoxtcsTgpېʹd}E2bk@Km$ / P㐽zy4YRTy<ܻpINSS;hZRd28[ (Xp `ֳE2d o.9 ı'GӀ6 l둞9=J=~;kD!P:,f:}Etb%2ude s9p5#h+%>6KwzKkܤ XWiC:{!U+>,f0?*g`1$$)G.3-mM*sѸ5G?Vk(y*O866~7?E}I1:2n:fp10 uU^kGd-fB `'j@$瓎J{{+B2N?g֦!n$K'qZL mGNrbXu?#0ǹbq \.O`@Ǡ#};R |%$ b|3mrz<}(9U&iC \|ºt$!h+ sTmS@ ZO]Nzt9drIS>ᑎ~*< +*6GL~+M"I)!e pr:)X(SdẂH bCs/$bxvF[߯5宆&yd\zΩ.ԓz6 2T䃀[nsFrJ_w?0qÊCK=7vqǵ3I|:~Hcg#p'= 0hf @;sI?vN31'ҳ&brwg ڔrqlpϠ Wj(0-x]$"<*#Uq\Ո& u!ym0GmR#z7 N9A#'nK¬JNw{KKi',VPvi#=y燯-y' #,ҩM+Ncdψ.U>9cTBF@&@/*vAYkCYKC^Sg,K**8$\W"(#C2$x ּߑk3q+Ada.q)RC1Rxlg<hIy aw*0$/ G` g*'#d)aVٻ$#4źa畐xJ3J-w&y[x.69uF~{v"xz2qgJc1k!0؞sR?-K*0C9.S72spigX] !H>{TP0¯8e#~8!Us9OnEu O/@NGJAn [r[1W>[1*Q+ԠO1}@Mg_HEb}}(a;mh$8%!:֡L6Awq' HߊD3>Yו$1y9.;opP܂;滿nW'99E 6qPM`De@ K oN1LiӷpH$ 2&}IL*6qPT9c9۞ָ9fbmAHM!64MeNd|tz/An}A˖mˌgך9AAW'!PN@ʃn:Ҙ#,[ SHD껾\sbsǹVc#N;dgg6E=;XAP̬0^yRI@nr:qTM[sRG#o R:Iux(<0`%zqiݬ]O%wyn IpFqއӛ' qIzn,@mv`zNfc"X;N ^G(9t.ͬ f'@M,:sYvC1K>&ފ5'k&y 9듃VVPWw@X؂qv5I}M-Vf*7C<ۈ3Fv$ +E@b„s$F)iU7%E# pB9m):m&G.ţur3Jxz=}l-|)4IAW;U7aO^%ƉnYᵳSثCT )G=kцVFI9+ƞc!%;vSU}9ڸop[h| sr8^2ܢum8V-;d.8a;9x1d+OR[oxޞg+.n6 c\񺽟I,R#wnFqsʴ쮼Κ4TYL/#g`HUPxc\w.vLzL mΨ^0NFypNFrNE?@9n'4DZ$` zӯ(9@=Z@"$za褰@q ~s]-,{FiPpráj`qrIq.1{eX@H-RryvOʝ \D  JyePAoNu,_ i $Z٠-}d(i%BnR91=x#1!rCdDVkGWQ5ߜԓDݜUSmvk9I$@^#$y's]ݞcF;v?3bI.x*Je]Ie,J 7pǩB5/D~i]/i/Sy> ʌ*'pH8|4}&Q8C7[qwR y4Wu')XFSxk3岬0gdw2=L$Ex|߯ӊߴF* Hػ<)Ps=Mg)[@2%B(zr3tp|H;ǿ${5I\iFFmܮvml=3iv?|qrOz?EPb6r1 ԌWw=j;Cdwg8?~5EcN#k3[ڽsKe8]$y־uV-j4E|t@I,OWydiRA`blj%=3H<^mV$7A_\e% R2}xw,PFyUQ}J&;YR Rw``*יDOZ˙۪>夙H<>!H\A^@f8b3FyzuI{d*OL#r: rO=qZYY`AP1׎ޞֻmZylc9hĄ\+zj%~9[ndrǂOnpbU2v$AN̠du T@)"dI 8*G WJVc=2y(O玹9>U(I_J(ppy9x5) ;7#rF)2f=A(.`˯5xQi!@Cܰ Fq"$RW;Fq׾s*2-)ax$g~0FGLr9(c~IP GsȜs`+ ϯJdA Ўokmdr 9=A9[Q-J=Bx?*F}`hy8v=@N0v$}a==3̱?)ISX :PdK]R>Cn@?(8\hn8< ;D{bC|z׷<*ri=OSr: ߅?pөAO|wǧ P 8<9wrG^} Ď8HI^dpN0>PtO{1*6~c{Ro 3nyQFP AU܏BS?w?gI] /{M?<)}||۱ӌ~4ž8xlҢʐsչ~1 $QW@H*;/=h's$uzu6s- `^|ҹwcr3LdVs7^98APIsִ@Fy ԡ<BBb[v8FmMqǿNw*?^OH9O_JőE%\g{B9R]E؂22zU}B瓎Ԓh[xP=O9jIg'`(8UIW?ǒ0 N)vCc`Ig뚻:: *ǽ߫ç\DV`p۟f$ݝGT \4w8/{=(-ؑbFaq=6śy_ЧTW3ujInVVGɕ/A ey3zv0\w@wc)^O"\;;;Bd c#*;'~C3RvGtRWaSD|( .ÀwULֶࣈFS%?#.i=ŵUTa@7K?jX/MRc? _&0C8}؇@ֽ9hWoճju*{HюB֢F3.@_:c.ت:vb"u ZhL/I ْ3nyYܞCu2RHn oA2v0ō\ 0>Y~޾[%r-ܲ}֕ ^}9?J-Z$6sõYيadbDb7TO8"I U'yBTOoI;|`$U #*|nJvIld0;P@N$ܜjer6$]U}NzASN~Q$7˴T9լ^OHx5v1zu={ xef/>P1eO >PN3}9UnN 6qϸ,0+ ̅3l3Jd&Sׅ$'Sk| Gc4\۬ʉ_jpJ뿷M:OYEp$ ȯ`Jh8-eըN5-zoj^iNe#c9W,R8+ּ\lfII+cʪ8Tk>V%G6ӐǨ 8'ׯ|O@c8'%vz?1\%p0u~fF0mIdm 6aI7r=k*ԝn#v\*pE%qa ~Pt'n;('psWiy+ê=Z3$hI+5Cs,g<|oROSp5m(̓F)F,OvKf~ʾ'X)hh?${t9RqPg< _ғd$Gs<ǽLU~ iA<`381*BF3~u"p>ҥ)"אwA6~wSryP8@2j&StZ~Vȍ v8?ʫ2'8¡XsBVUd*=Jb`~3tŹ=RB\*dQO\ֳ_O,y8 ?ֻx[D'M|#< ǥbe觌zMZ#kc[AϥG->ꃷs^~T*uWX1< r:zTo @f\`?CtFR3uNb@2qlc03yZKt_:'dw,\z p0w8<}OZƼӋ^B+=(X9#_ʳ0rNx^T^2cS|g$c:sHcیzU9MÚ :px'ZopzǦM7orHqӑq{8ARC6%O?砧mF_s2 8OQ99daGQ ~XD9)WtW3¯[X.Ar=r>OHwF_n_\ &)7՝t 6a.rOx>՝ͥҭ (Gk9Vu[Ts bܜ0Q Ƒx۔VcsI~Uksz8!-I$3P&d,B7n)žl5hHզlI FW{qAig~V#@I2 BľS= MC~ ۉ/,O(.OU]H`xdqzOaWbZc.v%z_ƫ`CnqN;sشC G*wPe6ߪd H^s\7EbNRxUv=O=kinK0r1ҩ3%we5q4d#.Q'=k]Ss3yq $fQKdZg%S YV>B@v?ϺSpe7 [wB>'5vm'x۰t18 Uoi<aPшgkHJ1tږ۞_y74B=5FCLI lIQ!H#j ӵ:^+_@HPfٟ ækE֐#HYLFY Xrr=ih% Vk"\\^[\}P5̆Ds4`tlAe== ԡҞeA;F^ B3v6ê_ee [>z+E.l)A -KDu}㞟JLm=`dwqCw751mao[F]RvRJ- {yhGݜ_@&c2 ksѬrGGl1OƇ+[RnXn0A|HIO7cK8qML1H_b7r1|ڤe8Us5gn|G?]= 27G)ˡ[ѡpY#5 SՎztWGWY(- /eيJűivU<;I#M#n ߹Q; ߑIx/)+Y%f!R2~*Xm$}5 KvM-7W޸G<#b!-#̍wEܟ-n@{Vk7vsPԄtq[$`BBu>3(%P˝W<l}t߉<Ѱ :GA/z~+3-F˜F mnM7}r4fghčbE''5sgun%1FG\z3DCRv8MCRB4QbDwb-A8?W$w.~Iѹrq1fǂx;C٢H*Yw?Z( a%<0s {'q]SE [Uolq1KoOӷzmhZiߍҶ j26.;dw=UOSU^J| > kHܡPN{ \NċTFYv*H$|ۧ|U}( )=ֹvv{PƴDKkĬ^p3@\5gdw҉[| `;n<ףY72;(2bQJI6lGJNդXQB066@$?H@=q_Z֓;z_xЀ~>{+I/qSOcv6㞹9xf <j@ry(’1xtP"?1:@yhK qs{3 uNSvi70`ty\=|V`#ױt¬L#9H럯8<>b܏|cjr s/a3{_皭"#d)~(4 тxtxQMqWN͒9;A9}G3/ep{ԏZÙpN=:dw!"6y GLO#[Ÿ t?#&&Z ?a[d {b=Kq6lpTq1'j `37OGN_Lϱ+OFK|hVRNBARz`g=])53S:k;LYJLۍ@r>d*Fq^xm0@~B!۟n1X o<   uBd~5b'ziBg=AZzE$D*.{ 9e15a_Lm^0ds߽M5䛁]L62``Rx##T'l?Z,6Ĉ/a.q 8zUm@a|^@!p81_'Avz*8b^C€A7uϿQJ]IlĘ L\ww 0K>Fdt!Ǫķ,v;<k[[tT(S +qw+7w0\h,hR1sX %b$ear=XIa$stoi">cV;YXd^S]ڛǸt"1A# 18ݜ]E"1$A!`$ۉpIgN3Ȥ6P\"[20*a[9~%HuL ,;tЖLp0HWx8<6ǎ'*8vaq1bo%,X gfn~RJgЃmQC -;ⴣ -"#Q >0xOT-GԽo(+9`v8RTjcVPHv 'ȝiGI~fu_ݧi 1v"Erv8[?r182Hq_UGgoۿ'o7kG̀(SzZ4c+v ''^^1vϣ%\6I,q^Tx{R7m6l0G<7=5&2Wj95n%17r I"Y3gϰO'Mu\#ϿUű29'JPg9]*7{ 7,> $wʩa n2@i(~D%KwV3 l^w.TvT;-3t@g(H$m'9[ֺLd+<m9*ӴEkiN?$߀ @׃;ȽC7F{?ɮY1dfmO0G89t͌dRIG9sXIwgFXzSr3ys~})=MylTbц2#i??έ)黖<=)BՎrÜ v$Fc jH⚠8,rLc tx* A9i.@D<RN8#**0%ǠzoR9b@s\(9=Tc?־'>Gu`(~FZ6Ee[" rBѱm iElg8Xcs\mIܫc~X.\(cVTK_1$MpUcdZAbHa^|>zwOj񐼰g2GE,"QoK֛{ 6HA!|p7#rG\ޏ"Xd)BG<2x Qkce-:m!UaAo|qBAr8C1Ba[=Ozc2_(ƃ*'᱒?jBHT/%! #<C+CIm+q)ϵfA/v[CcT2w`$w8ɧD1wƄ TsJW!Ps'/^3M0T$6.pCǧ~4Vd w>zڔɳ T6T2ҎVG۸;4֑wp@xbD6le1c׿b1l8Ť+E錎{ϭ;h!7hs)Z6PR'9=#&=RXdg )!9%4 Tq68i$`,8+?p|ob[ۓj©6$pV\{ uu,V<}<+2;h0]&Y*ynII]lU\g,v 8<$M 6K*2Tv>hvK`n;~AɐR@81YDb@R2pztj 8`3PƨFOe+a!9dS17͈řeyzWN\*ǘA끓͡C]LI.$=v)˾A䜷LsQyχ1fVcr߱РB0 ÐC| #")7n.oj$imH'p]ӁxECsԁs)&R&ڡKmNn1yu$r; \pĜ dN֦E $}8< Pr+,KeBsNޒ0PI۟B]py` v01qzLm/8<G8PrN]x䲩G_˵g->l.N0F2ݺ9 .;y^?\z61 0 Cd|''{Y3#w>9ٮ1Fp~mR2sp}R0όq+>ch&0̻͖WS->i+ΠJc*F)|1MEDBaԹv1ArNOOA^`TnУ־{z; g%ZPI#Ա?JӒ`/ᅯ]Gҏ,Uu9t==y(b= u$?!^lSf6+vV5$ӒޯІS1`yOjǐdJ*G^WQR҉ˏugwsJ.fP* Ȕ{;TтsYF OisЧ.g清zweŽJ_«_}kѼE5J lk9K.WNJ4R<;Q)b .ă7vw`piUfP,rFv|-[:ea%`<f?.>vq=\>^Y gs՗,nkM^GKlú̄g J@rT9]O5sЊ-&_,p]{dXݠ'?w_Ǹ~\ dϭFIo0H*Ys+LJgE.?9qlkȚI_7;q}8˥xum'H%GN) 5"GT@L^QmR+Ky9 <׌`W,w"ZGZNFe0,T_r+aDjOzI|M]]C1$pc5l`Oҹ%<  ;=OynuUVsU9trN32E\Hfd {=xp\,jNj)^pO NIX][^yBجïȪyVi`rs-\#\Z,Fw6igHTyq0ǡ2fd" °r/!+9H O˥'Hby1)0 &O+%m!M9ic<.aqMttb@*d\n}v262z\cS\z 3Z,m)v\8f!UU.<23뎵f }Ӵy'wUέ趂(9, OuӁZr=y;qXrW@scFwbC 眰1qƹ3F]B@= 3w=N~Dg'Qi#nI.NX8@Ȧ<%g7+\od?\?['l,7i7/\q1S}\rH55.Wf9.Tz2D!@NqOR39F0GRA{pXpNNou?hxKA27PwT>F2FR@$? 7:o9~N2=y+򦺏FW,݈n0$Am*~c xc9pVS:֤Z:=qLfz >U +9) : 8vY>m猏c(]Gmm~|搕S+ ^1z, [˔aHTP x#Y#G+ue*é[q'n8N:sM ccYGN}!u9$c;8>c[\duJA|ߧ$P$:u*Q}c( uF<$sqU!b]F%xb1߭g#HXx`q+p}O$B[ŕF|ӊkcUР9N nvɦw.qCݞOHR@p r|r8֗p'qsЇw#I=F8Zܶ.FP>l䞧/Ȯ6dgp3#9ӝX,qFCe!u 0I2N3[pa^]UO-# DZRP ~YC]vn1zO_PQ*N[eE_n9 jg@l#9ccM ݅3TI&xYc9! \׊XPtW\pۙH{M5Ш^ڙ䕒4Leul4֑`39,NA+mtV%pr:Ov+#Fܙ P8קٯ:=L:S-I*N?n9sן² A*[wNpXҹҹ{jH;D5qXž\nC[<P@?6y2:ҵIX Ý$0A8LP|Xc 4] AQvq۽GNH3U"11NzgNc_ZR&$YHnr oJEDNzrO+~48*ՒEv$` Ԛ۷Ѥwm|)qM(QJ|LhŶ4# 'a˨> idحX 2HbT0uzu=$ 'oiJwVIpDK{KFmm-\O h-ȒƠ*XrخL$߼!Q Qd䜝VZ\.uWmM\DE21ǭEib#YfwP%"AMNdvΖNWuD%"\$~TþDu4f8PBzS]۾^}Y57Q]>gƣs4H D+eTz<:ΠXI|{==Ϯ7zXʗC>1ܥP鰂q}*y$s#rǡ6zǿAY[NA>] rq:vswmެHo^ӓL'?w,yQCd0?Rܪs8 6ơc\@#kb23;)gn@2wqU3o$>Sr295qr%&cNd _^?xIY0 >h=€# FWaT9.14$`zsPY`Ȋ#\b\!S>H;GNy5ketV IF2qH#!tA'iXx,K`AJ=e2Ggmr ^ME+Ԫs[Rƕo7a$U]B1yqvݐmq뚺JoΕgS-1%FLdyROӁU,< Ge'¾nm)[m9;Q+S9'X;pQKd)<֯)^ dc9>޵MM 9б`XWww6 c2A\fu{:ͱt?43P1 MN9Qۭyw牥N s? FrZeƒQb[lCX:4&`C=%0AE!oS.{e" 92D FnA`{p:׶_1iVH̋ %̮}dG^3*I@;kE067 '9ww9IMZ1f XVz3 쌒Xs.?!t9%N{[('b>XcC\nw,X'S8]ܒx5J=_B-,|ͫ21@%nR{ֺ&I0JfaQpddտ˹\2deeKzҪ6Aya>ۑl Iy$|pyQ.vY`ssASL RG C)>dS輰#g``rl8xNȖXM6 |@2YGˎx,Cn\"9lYJASd9 w63ϭ9O&?ZC)ݕe Ob^r1銭%z1/ Cޥ$A8g^}iH98rWc9qԽʍ'I w=̈v'@8~9Q@-K ' a}7ecgJ='[xNq׵ ]S(FCe! o<_HC*݈}*yX[1Iq.969^>={Cp IM6TI{/NDIg\玧devg8\gtݚfn[jw@!؄62c=Ãؑ\RڸTcO>J hbXmqֳ((aFx '=j9ܘQ/'klo-v,sP 8SĻ@C!Q^j*P[G*]~~s9;[)`Pl v?m[5򪪸ARHUUmvx_HJ01GLjiSif/ bw!{Z`n.d̊2 \wqWZ0]GBMINzӬd [1)4ae&5?wRg|e`vp#yz~5ML)eAt)n#ZѽC| a$P xqmŏ\P/v+~2]ܞy=(ǩ0VAQjDŵxNA\6T޴ԅN;2ѡw}_#iːv07Lŧ:$Sa$\ NqfsxzgeS0 [7"FV*ilzvϧjl)qUIvxx*FAHR vA|UiKnX@Dѐ7ƮI6쐝 ;Ӽ6;"g;v.Y cWg˴#'Os8@YCIKwovyj6v:D,9`{zF0? u=Mc!Ec۞KX(ֿqvw:/5-&lј1ec0NkT0'MY%g+sra5ߑTR o$G w?Jx!|uUldqG`37E#d:W(Fܑ3޴5j( qNl%lk㻀B?xӶ)ڹ~r2}UɜeN;`8#=f) NHy@?QVyPir2|L`zjo NʮsgrY:3DijۭY nw&k+Dޱ"aHl?_w-/$"8&%b>x<ּ+^l~556б`2;Br[:oNĩ*72}|ͅ=*RSfw/;2裞m0fV3 l13^::2.=Op͌d1C7,<~N gd%Wf..<w;"k*st̪UrXy{9nb\TCp1_c|JAA6p I'=z=Qt'ԀnRpsW{5rm6sI0GNjBh zۚX]̬c%J8-M.Cɻvm]N=#Q;|q\t^=zUtN򱁷tjsNIlZBV5Akd ;ryygVڸ1=^9w~\Cih8L(\`}OI;JO+,z7-*@>y-{urܟ_*%F|e@`O|s+uF3V++:b߶ %Ӂ@=ђ" $.ݭx8`;4o[3='p%`Ge_UC#P3<}+ =.uF+a^l4wKi#?YGKm yO^#xqGS7^{ Յ*G~ynqN٦:G[L'$cNnO=qOyiaẫ dOSO$:ztac=r}9<LPKc%F6sS_SH'##0;f.%E'H>__Z[|nV q%'Yk G~ʴcL OU݇;3Ĺ&B#=s_O}⥸ 4dJqL#>荿z~e};Ruk&E SƼTtȰAm#g)$o-E/|xk!OHP0-MŚUC*m#dc VKYQmTS{Vy3%5l{b!}E76b򾑨ڣEY7{1TQ/z8v)ݰE,Rk*L'$qG5u&0=+MbXpG$qϥc*R9ɉГ;^W ;HݸE71#h 0~ރTKךb.SeRqNGl{zwSv1y9;awp@>q ug<>'2cH'x`FbNyINp7=>y `B6[;`ٽBɐ')•'" T ݴ'z;%y _,ϐ"/_zt5WԴ5Vfw9瓐8iAewH 7Wf~l'ZRCE !2[Qsڜo p^O=:e仞tRT1w|}sW4c*RUOH]l[ rA8>szU:u'ָ:VӉ68'?>,9[< *v vWK r02{?Ͻ`⼟V"MvE?ϭveZ)"yN=_z>HE̎Hx0:T-q-ϝ_!6KRFx:+pە/Ec|eLEHg&++FYYPV91"̍0F3kYܬs2wyR3)SYVۑWҷCQKS0GX)mq}!Aʜz`sޥٶ\|>aHϧ9ګ~\?8\utЉrz29vZd%T~0 8,/ z$$vSRb7n9<Vn=3[/KBC۞Gқ$\Cn~Rq?C&fͱ)RKs؜;Wrǻn{`˥Xٷ><^3v$ \#@} oQݟ>f6w ;9ҾIn3ȂBb]!1aY="b笗㤩˻<3@#9*e06:_\:tן5ϧTF}Ȍ6NNkosrv&Y~̈e!yVx7/vtXR"-:4 Ux`$&N!k3aK @%B;s׭,6FrߘS9hwE_* 3K&Ͳڮ $t?/>gv Iw52n.$#&1%Y!XA9W(PS.} szlU#)*pq'9qڬߘc©lcc s\T+np8\~+ܠg;㧦8)UOPAae}Nް4=9a;b{?}9$}i89 093N{U\`=2I@;րr`ﻴ9U 9G^{"A# *eJl*w1#pFkZjG  8n'sW=K899R H<˯IuxNHC& N2qӸQCdFbXWy=EH |9nvǿv繦 4tĎ6U70A;2~_ 9V;`y)'cW#}ztMe?1:89A+;sqB'p[F8l'G<{&Gi <wuWd/ۧM cc;B<~['tǡӾ)hf_Fd^sL``86+ #!#p p;SsQ \~U}!8gܞsJzN88sږ̜N;~5+~dL0Wh\KdeO:6pNBBWRN*T`c82ҹ3dqdu#qBmg? , ?@1|Xq(Ҷƃ3mf{sۯvq+.19d@ KH>u&l'nעj΍j.Jc%<9;NR#JSSr9N1Is +פG >>"͂v3r>v+7 x b2k&T2ʜs-GAc7 HlZ3Ccu8*g y=kׅyuDOci 1Dςr s*rwy}l|K;K+;ryۯZUg.K)8z=%ciFIPR;t@OOLGJ_p2pyéię1݃=@4G6I#{~3=Pd OlV[m*DɎ35P%׎?$7~c8`3Hiby ӜA`dqSC+#psǯiT4ݞz`GAq}락*,RZ_ $z> ~ȯ7eUE=v:^ S^W>W3ŷvֺuA?xz &=G$!%F =>I(3S6u^t$޵\7=IÕ=O׷95y{s$3ٴs; {Y${W!hqJ'ֹ[:Йr3ҹꫦZшf]ҶqF@?5t)؈R_iesrŷc⦖w&~NKgUƼ {呋ܜ c~œaViKV|Fm%1VGirJw1H7 Χ+8p(1Bǜ` +џާI#7VL.I<Z.(0CHR9>ߝBW7K`6Jtү[ě\.H;c ʑMGi"$2mL$1$g 떗al}eʗXsT䞤rLzqM '8?xpr9t'ҵqx@0HdbxQ4Hꫴq@#+确EPܨ<{`_oJEͱ{0p=)Hl]=ǖ< #&V9 aE kF:d06mBHdV򣴀ʫ  JCgc^,"4A܁s½,4ѿu|֧cdtIؖ"u5 xtG M\TcvDP8y0p T;6f/,×;JGBך7 k [ƹKTx2I*H>Ү? ]"Z^PO"ZI A3I|\yٸF:}חў]\re- h6p9^b|203Qyl#`~RA.p3va8?BƇ`$ĞLu*{a,N2;YpO^=:Qpp=GyjZDH W#nxVsT8U=2#9 r1IXTݚ6,*0u yxZAU7+ U9J]NC'=[IUVmH*NN(;ud΂`Ahߍuma0AWׁy 3Bm<2:㚘UR+)_ϒ~.{ *:cG& rz`6U`ynM=pOF8%F3uy:v1R0:|LS8.N_RyWu?v'$>`r2׭* 6屟ĜdO zHncң Өۻ{S@# d`p[#<``qYX908{*&#  A8<~};U.(*UsH 6>M$btW9MUlmai.[ #;  ާn#e[ce^2;p*s[$nU O:N+  ̹n0z:` HbWoP7=T9"t [jrcϭEZm@]E*> ;IdzBA"B 6B)lО찓I#%z_WfmMʼn-HVћ2ĖR`dBQL$CA+Ίü,܁J=+6a(hn] #ˀǗ$j`Tk}SPh5aJJp3:4ԳOOocYW[ ֣rv63x”q< % rTsU0DǠORM{ >rXN37>?mKú;w!*$O֠+lFKga>E#9cN`z `sV;ӥ Ǧ:Q}%S灌s{R$ӎE$G?t7#Zhvi_ByTtq꨻Ih?AӀ2O?zq9=+gM<ӿ\K ~ʀ0CW?@j2\u!f'=1==?JNO?1㊻+ #'sC}i21=gZc hס?ƩXO+EQg4};uqV#28^OZ{A4YOs=/#b@댃iEIq-=1~GUP~:Qޜ7^I%d6QЛEݖXsH*enz``9F-k"rC;VCgfXucF;s9*T- pG|S;Ef"Brg9=jи?xְ7C'ԃ*Wksx<6E-3ݭwl(AR0v*Q@*=Fz.=mp*Ix=7s'ETx ï^z(o-Cz80y2}V9ZH#| qRsǶ84 o],l`9kļUty\2)Fz澧puc7Vca+;ZZ{Bk$,ZksRO.?&%,m|}'$O]GNl ӡo Lвgv-M~Ä>(k~I,F>n]'_#ƯadMOx|)YK+/oBJxVQ4RAl"wS[氫vZM3(Do-@0pfϔF2yf#<;{WSveIsϩ\ňѕN~lnjSH9*$6\ ƑH0g`>`#zsXmȖKѻ%,nc8s+wb߼{J[{s#ҮB1; Gsk_DE F2r㊉--G$(A{w5MWF8>rI邥pNz҄l \\cC$M+.e9\V *vPċKc4MdO6T03MRFFB `5-ibxHݱ/}: )E^Lx'~LZ暱[HlF䕤Q`~d}T:+Oe sˎ ϲ(YAym }cI41"~\|6=3R[۳'j`m׊59H.e#`}ȭ&W `NXz{(#F)!mA:|*nq{{ncnyL;H&I`z6rFy~:R%9fS2>SoNd[x1+*9d ;PnG(C d>9p >RF cHoԶ0>l$g۵9%ܘYv+=G~S q#˕o1펧8<Ё=~ 0@#ߎp`J>݃/lI :9 EQ(s=8Z-Z9RFºWi6zW!H0B9ЗijIIgE;xXxeX$ w!x :;J)XK9#?Tu_f>fɅ%o.{5s2?>\N7j!\]#v$id]Ċ)61+# *+{%d 5u|$VP<PT~Kͽ~%pqڙ'aBg ?s.mSu^3>ı؊$p0mrzuR,H =yx@Q_q{R\DqvvI'=zV6Uҭ#>ȑt۾I;_9WmFH(oM.7{iEd/u(جD7"}n{>[B#&XݥTBU#,8lwpoUUH Tr7ĎNzgL)f1&@Yy]G*XbI-!8|2~"+\F+w7m~Ie²i{ufo/TIqZ{}XH9UG4 啉\k:ĻՃ,9 *o'!BϽO@Ĝ Uw҉o] \07v$cҼVGEo s {AYd68^SBI13BX*c5]EUəj*mkgy"^װ^Q0<NpysHD}O|Ҝ3y4&ny'>>L=p1y"h'9ңupqsډ~@+{zU;8UH~SmI?4G w䓎sW=cᛁ?ϭ}|sI3SvZCNJOlY˴X.;Wz"C*9Q#qw'#F ɐ$lqWwIے3(*#7:9*"N '_aM$HY!|W<(;~_㑟WHjŅ8Ig=1֫x1!3n9([.91U`?0RP p0G<}kks{Od NcRx?봏I\'zV+RRF48ʯ}=U^Ř2ʰw*MHvL*s<ʲ.!ܥdI(NN:V7|Ia&Gql,Wjɏbүxİۍ:c=wu/-\<t=Bpzvn{$41`Xqܮ}sotwNQ{cxHO1aq׷' 1ެp]V?-[J kH39EHHU  PxN)Ihen`gk;@*Q$PXemFך'CT"}8iʚ0GJdH p}y!șã md1k\q;o{yHgcq1fŒrzRrIg.23ؑSL4}pHl{Ԩ >]У֡qYRUـ(+Kp~cqNŘad|VxpsU}̇fFӷpr=~eFce.d8/ F1)k&.EWهF@2ݷ=y|C>38RI~WVnG5$TD*NeCg$/#q|K ?;I cvp;HZ+Y|Yx䝢lvf}x,QXEO}͇UXP܇v?p8N uY?NhK;+o'a1eOHHR=O=+ViA*H@(wn~𬜚z|$(I#NI8@8 w6Y]6iDj ɣFz~9Ҋf29Yq=U4MiHĖp6 w.'pzq[+ٻ$FU@bC0Am/c<\QZUy Yi#6-=V'w /ro=.RM}*w!lvra3Vҵ\jn6GM ;+\nmQqʞ*&ܰT@BIKYnPF~z/ľSuwi#mq2 ڇ)%;H!BqȨM{H*[x66mr+;a93~ +ym0dS3 h7G2IQLĭ̄9a[\]K0B H>K ΀&jۆ|Nc/Qֺ7o&d\1Ӟs(Kʚ8]6m&@(#=:'ow}!N|9lcK6in#+'[;c~F-rdVlv7`~"_[~$NIBXFZB7!I͖Eaxspk{{IUĥ(e;X|.݌n8<&ͤE#<<IDsL2AcӍ̓lL+ʫ ׭Tw_qХ$ &5@a ROԩ.UX #HonۉcRW<u{]V$IY~S7GhFfkؕ³C|vJ9U.9%H88kXCue;T|N@>S-ocG@rry‘ҭQգO$HUdovG汯s䅖K]&3UNGqRqwl9#K=VnmPR!Tx"6MsHtu$+KgG087)%NX0 g'pN8m"U>Q˸]8')辧sޝ#t㿿_m.~ڽd;H*3JQUrN}=~|u2u"mFXX1ַ"ҳW>YA1N4<륱[hۇ AA8Y \&3 ,z޵.XUjǦ@ ^r5#Av99Vrn9}J.d$9gYG1>h[)& L`m#gYo4)X' 8nVt“Wُ%~\Ac[7,O.YvvFCa'z-)1NpvNpym:#qU8>l\F:ymL?Z\~plvRgqu6UGBIaP;:LDm߮9i{05Wtm@>ӊ(\ 2yR=7G3 ^UQ99FO=j6?Iႀ8ƪ4xxhKPQr[$URN1dN762F?09/wc%1}¹E~vFG {岲Oy8t< Gܬ`'q\̬Ѩ*[95Z.<6ߩybXYQ&RFvIp͒O CN[+X1{% +$ yϼrAn V*2(2llPA鏥Y7 Óe88UſԉE}b2XIiq~5,:ͻ :ᑈ'>J(W^Mk9>bJwT4{`ֵ737 (, "R8cu:U}zֱ*a?2x¨E8*6]ɶx-D dw2'w\Nq}w<NZn}ʹc D_?6E:0 M^̗ɾI:n2 ePz 26ᐂP$r,W8ⓃK7U֨^TD833rTP2:`T'xFnss85鮿3e85_1C "-SoWhbyPy +mڪ_%;椤"Y: c? k>arIyʂA@ʂٗ/6uDg~_`1jʩT'n8'zc9?NC;efw`Uw0zՄdIFD2ۇάp{H)] ;*rNgJDk#6&0e`H#3ۃU^P0hD,Ð: 97 4HUd#<mFQIUҌ6bXs 'VdbI S`ckI:^{w Kn*$o~8T3a!UONua-F\y4q0|$p22Z2}Bϻ u94Ybs0<ۤ3m5?^ 5R#1wiW/CZtOA`fbq"c< 2|-$G* 2yQgov E&j!&A}c펙Ejk@ 4 + aGݹ@b\X9̄P 3HI2V5,jUHU][h$|}iMlitVI.>]džCzr}KAVd'Uw)'w qVѱo0G*DrWĎJ۷}"|aRJ.'$=:TLq~PcLq8O =cNq=Ot铌R29pz?;1O299鞀{PqRNyRsN@'6+jJr9GxF͍ ~P{t7 켌c8hy'Ӟ3wG]nYFgi{axo]،X! 'pZ+ߙp0Ÿ^sV͓puņY%IaOBvka{>v$= T_Bc$1g5tD#^ddwkMݣ*EVvf{`^lVkzWӾ(XŽ}V.4o!To`+. wCii JrNzd{~5Wh$Ek&n=;_)WbGqC6"g 8Ybe G-Vsi9373qJx>lʥ@$ sC׌ݟHky̫#`>H6OUo1a1ظ^y9<[эsT")YةnqwovXg-wnPq,8?T8i*7Ï{T>-RU,b]d$1U?5,my.";b'8k .g.6BDv G8܌do|9hsrsb=Mp^PqF>azdC .~f,F)'g}HWrKrPp3{SQˁp-~V鷒0rk:zR à;Is~מjp\ߒH9FAXW=jWnړ%0FTab>Y>,MN1OT)n qམc$WCޑgK*]Î@玾KrD Tr 'pӥTFeqy\p֚W ?9_Zp 6wt'@;*qOppqyzz1[=x<=wm8%w`m󎃠>{cYG8/sp ~tݸ㞀*V9Sxm%v8cƧfCrxn89#h8Nx9 ZLU* '='ֳJ0A=1QhMJ1[9˱H; "i͵U( ] dgޛh=5->oܻ;W3֙8 Oc2iaл 8#+:d  rjo=,N7f?z9X*A `NOF29z8-F8#> (9bӃB~>hڼLt0 nЕS/&EdrN-?1Cb1],ULR2ĪWp$ FwTniIԪJLJ^H77P6Z6ۂrI_˙ɟdtb4 p,2 w^//n3_1-dϱ["dFNwtӟJsIԒG?N)(`#tkHW<  kBe=āӐ8?_OozWTzҟ0W,ɱ60@wd@R[ ]~aQ`T!q{{'OYA`OrC6}}P6|9cd 'lR}zO׊ַ`F@;q9Z'+G:dž?Nv}GF16o1VM#-dldmǯtzvpRqHav|'XYvg++SdAX!`ssǭ}^$R>cWns!tĆp *>wxcRkݳ(?(#y⹧%~a򥡘9$uUfzcۊ&+=ׯ= P{z~?f#Dg97P:╇ 'Ţ1F=z׷WBI rj{<5I7ovW7SpKyf0b}:^iSv=i&dG]H:btSm$sM}IPk\Amp3#?a Bm@GS69{kϜU&=F}6vG C4v5umvKgk|,0ԵV;mv'[0jI |?7dq$`qJ(o''vM\1G1̍^]A\$2f\Ieg`p=蓴[Tj\BV)6O Q־u\]2sPg?ZiTiy9ۀ cU0U/۰\=[=I;hWu- :20WvVc}# 5@U[ay'9.7NK03Xҷ$:Bx9שM{s ڭTzt#"n I@?^w6eBMFqqRGTj+I8cqڰoG* @=H<|}k;ܱ.~ ŋԃ9G&Je+)zޞ3v43 =H9  sn+"E{`!A9HE#Op7c?:@9Juk'd`#֬1,I_R hIy s֛mr"UqSߓwlp8錎ր{ dT=H<נ9 @1ОHL#&=s:7bFs<r1ԜsҚ98$dB0{)n>j`C,J=#?JClSCCѷ8Q dOG؜  y$:z1HdrxGs{cvCux}*tj1u!ٶrr0p:sƴP"#Gٗۇ\A8jQ'-#2,y'8U"Md b>z֥~5b!|y!@<rAOgF?t9J{BHom^ :VJ!3$^0ZK7aim  +v?U.We`0ݿ.CیbcKSN$ɒ5e `3Z^$PY@`PH $uǮ:"=Q7fiD\8}Rp{(dg?C63>CO5{huӷd+jgm) n g9Ը R2\ JfRe8&6f A gNbǬp[;[գiIvlJ^F]/l-ب8ݑNN[S=EUqg_3 U_-3%}^: OޤN5`0Ќ:8z?NC>xLZW; ?ړw8c'ޓb]3d Nu3h1ws\Tn#'8^D7z@O${?j`[4:8 G=z{~zPOS׶p}qQVOcbr^zd>-c?C۟ǽ#r2q==XM'9=1NrpN9&-"`NpxdR$=޿Jd%;G'q7w}3q+ PTs 9O杂Tʤp?{ hqXԏƪw!3~N8֡GR$3HIdMi; g=?E( rx;jAp#뎵rK%;{T%a|p N{ҥB`$bTn\w sյȁ0=CG4 E9c^qcL08zJ4Un JV!dH!(|Aw otܪHrCǡ+u%dr?~NتF# n\`w)J9@aPxŮ:~\ϳ`mfq߯j&z7GI=溡9;ON1gjHd OlN>L;^d)1qMT2bPy=*aX9l|yC{՘fBp1VI6|;={hrˀI L8T`'l29%{uV3  1rwNOyQ2s"=;g6  ĠR -|t;y v0$V9cjn-$eV,8~&ͧ\-jb)@h#qC=֣XDS3 @V(1?( =  c_wyVh lȤ\Wchem KDs،v#c30,=O yu{>m r '1Ƿ4@CRY)VrHL#ןY90僂v)o}œp<;G8ǨPFMv#ECBP[k+ ?{<{Pq8y?uqێ4"IW r㊑%e!ĜpsہD=R>a݂#^Fz;gwznq;NGJkn%S*7ub Vs y@K6#m',TA/$kظD >^ w}.nwVB?%{|"]6Ug9P RqQSנ=3q]Šd#aT/H|˸ wK.;>\ӥMaKG' ǒ2*=x>F0UP`Ԣqsj4JϹdD2۹sf K"9ad8JM7ȿp# 嶅@v֤2nlg!j($jH!R1golǰ' 9'#cAP(am䑐>'n&}2PpHOZ;3<NssrROnA׵\,nWݻrMɌtg*FCAy,B{t=q\Kb*6~\W}=kv #BaU0x>upTݚDB(srK3VS9<}ɱظzH9tAqv:m9,z ;~55֊ |$zwJ =!8?pN0tg?78ӏ L߾zusQA#4$@II c~^!=dGمwۏ1Oktظ^FI`ts{mNIa֪ #=?|W{E N:;=*#$(y@h{#O Oqytf'7;N tV= K^d~ Pm;g'o֛&%Y\ <`zRwR08m_ݪDž<'̽waN tV72 :zӞ2N) >aBѷ^XH$L#+QЦm+15xkvV@CSSZ${Mƛ"eY6n'ӷ#ֱNmeWlxCo;cZ5{æ_]D4'b41Jzs\JZEx&iA7@v5dpk{Io;1.P쥣T/ 85iBTU+ ANy9六:}}N5+g ɔGA+lLd{{Vlڤ1 _f{}M ll.dG?GjKU[)^dj9Sxo_RAwog.Jʹ 6;+L`8L [lNzjۍ`r#vmޮKNF:֨mNk۝##t=m:K䐐Fmy|q tfcPATb((=2r)&A+d)>2e p Z\d Rʃڄ$HZؠ v p3Cu`1ӧPH,c$rXKߒ2YrqzR2JCixE D̍ $2Ps)|BP0?vאs3 ӸEu`F;v-`9Vܲ*ı^7n { rD C{FvH.\rF@=kBBT2H&Tds#'5z*M&݉ݑl ;z*(%~ ĒC'څ+ʉ,흊B1'*#w"~d`@C7-<+ʬZXh%$ Pw|]~3@V'!c~f{؎D_]vX>) \ۈ$UmfۀNF6mqUHy|PI卾Q, n0V=j$r,~ |N}MdՓDOoʳ0c`|ĜxkaL<1VV QZZ׮-QB3=LyI $A="C;5s$Y|99uV#О=oۘ7TfHNa"HdpIݹBӎ+ORX !BT^sZA<R(:G8ܶDql8 Oo;s[1Dm6ܯNV2о.[E`H="FL' 鎝zE4s7{β|{~hG']}%d19aN9S$ymH#''{I+4 PZ'PLM7TnzN5q6*u*8_ٗN{knȮxc ;yk@|l>Hl @?qb/ՓuӼd2ݽO"׾D-.>\A5ZMNb<Gr v@1q`kwhr<;ҸqQ՚=8V:8`0SsU2!!9 p3z㟭r[(KvcknN9va|O&BW :y {rrs"pgǘT?uv*n#1Q qf'M|,(kiGtΑtm Q/p5"FRF޸zIvcP;n{i"i\3\ZgCg >d#zqg8- {ZΓ2- whb<`1CӃ\Σ,( gnGb}sZVQrHY׺}3F`3dIؖбA䑝dž=ӥc=MV;sAoq`s0 H;*G_2&>#HT;X0x%Hk Ny< $>՚,Gٱ)$d|қrv@zw$:`isVzdi9'zt&۞{s:`zdקzR)`0Ct<ـ zf1( x 9$P@8'_CvQ˻(gpfXp6$(c4aUCo؁8.A$k1 ,`R^wRiM46WTWlͱILq=Olj&LnP"U(%;Bz#tR%$. mF9q}2j%`ݝ?/>*PEܶRy Onz 6n`܆.$$60=8"5.T_>?eh;F 9N"E#=: JRWdJo%4!eUd ( XZo-e6 5x98Ц+zn {Krˀp@G'Zʢ{ RfKX98ܪ1*y1KjM(]X^Sbx81K2>kҼ5*W#~F7tlW;i<bXE`޸v!='沋P ܮ  IQqRı\[C, { ִ`?--l>X!C{p7 iؕ@@ͻ'hic.Fq_>*JG:0'֓Yms"1˱mQl9=k;Qխ*$g;v岂:f `IeGp!Ì(=I 1#B,0mJ87fT_Ib;ʌ~c~<r ¬d9SF*K[Tjmb  |IXFn]<*Y_*) ePb#83d>_;FzEG3+$=B3:T R\a qz>j[b6ܥ0m$ (yUT3xڝh@X)s?ЂcQ啉~c_LgM;`x<T63sS%[ Oz; l#qPFc݁ҜUeb@R$׊mlP adQ)1|X 7%K_zzb9 9'xYFg'$* ~c7v8=NFvl',3}2p^w|y_ǮZb$=20gh,F4@ڧgr3J'FFAv4+cc%s g=vRVUdgӼ[SbY*ķBHSqcIئ\x ,azǩO>:ش*$ @*[isd}3ӽc9#HegE6mbWT-?0_q9G#"WA"ę5Wi‚8ljϓS)")Q7UJ#y#i,Æ qZR.# YX]T7q6Ky܎=f:gЀs׷B}I&8l{zC'͕ uRGF?e-Ucߨ񞟥?w<׿PBhnz>lg#?s2a7dZoDxwUYqӞ7lQwzΊmy5-zsi39VŽ߷^~Rq;5겔o},|ġgbbCU8*OJҒȺnTe95̻B8=}3kͦ$OVL˰, GSgm?{1ƈO zW!e]'LqX~+O3;#_K:#cTtGen㎾r!ۿU9 G$O wR3p[FytR ‘Yl^)B{$ w^ל9U >z=7sHۜ}0?35 ?*x-F7d`# K#c<0F;XߌqpiR#Nzt8qL*z]'8\zHN8g8Kcv眨iSxW:{qGPN _=>2G@rq@ӁҨF8pHE?i$=T dF\Nv98LFÞ7t繩{fi8n`zu,Sl0`3v9Ϩ2g0)8\av|d⡕r+N"J^*Ʊ« + AoBO'Q`im˷jGs߿zWvԫ8 spKuG$0H-zT,D0X2vzJ-!q!,a,6U.I])-[iT1rv$Qx<iH鵢G с=A8pVھd />&ԢHȉ mı D1&pwTvwpGXFcT2LYN|2%Wazsv(R>nWi;1S8۷zl dCl M0`㌜U<''[8ֽiZ EK͘LOrs_QW!s;`8Fk3\SJJevfKbN}A#9|]IM>(r{^ܟL󨑬HON:v'\Jlisv,p8$뎕WGQd(v8d#%Gns~K)ZHIҞc_-@؛ *s'=^qX[j"y(9aDZ#Ҿo򰎭w =)N`O˕'TA]! 0nJ~hltJĪTm#wE%ͩ.i3Iaݶ vaҠA\9,y8pjdر#?˷rn݀I#-q3mE *O)#G=H&c9#Z5ރ(A 6TON koFniCtI壆}+K _ΩsI٭{opZ^PL^`g*FXtټ+8A|BG/uJ׷۵cV" Fbp<~>ƹKީDFm[v0TW~[3\lsgtI!fyg9*;WF@c,;W>tZ6:(F&idn9w\p /2'P\f\m$c\⼚ڟGV6~lI= ۷_ehl_ˑUΙ=JRrr=ny) ʁ!BbFLN^ۉps yڲ>2A';_zt=Ч=b~by/=:Eb{ړ5BBG<`'9$EM{c lښܸ:A QKz A `pݜ41xL86:cۿ41@e~pG|r(0`I'

Xf~ef-Im,2H7N = rݸ4LPl'Gqr[6hwS[<񐀅2 ;IV:Ҭ\ ޽WjvȹA(1v92<|(|=~e%~l ΥiJ`!Cx3y2 $.qmwHc<NI;7g\.[cۻv#Pz; 3t8"aC$,[$c!۞Xnq=)-ܴjs%}NjK'P7JjIc!);6T@pAʓ=>ԁnCuYܪO2<`ybȻVVRe#w<WjF(HCK9 C iNNEX\ Á2r7\(A3lT's&ANp3C]?C;3<'sm,8USВ }Wʝdl>;7$:zW{=MWQ[*8s.j*2ӌcS{@3}k[CH+צF!N^1#:ǒ#56nrz uЁ svԌ=zxА68'hTݎ>l)T>hnޚvݻxҟpjdD~ IGy G<|yv>䞄S nOFzނxsۓ}2< ww\R)#~#=Gң'^q 8#O^ē~,hstlOyW{cFNzcqM+ݶr#* %nw%I4s&лg'0ӿU2i9=~tbv\|`}EfrXs>)2Tr1x1HXU#珮yoPeaz;8ڴ&:9?6y=*qgD'pXxV<LpN<8\*xU'dp}Ud 0?Jz=P d{~zT11(+؎G7wET ~mbIVV Eps#|tֲ4hQ'*3p_ ߢvG˺$˺x)܍ % xPk0GI gg8eG'~gHLZAPyhc :A1,T3-P}ykɓ+XUT QLn8^Hf%m{Y#Sml\tWg,Y qmAP!Q-pG55NZ[³&Vv$ʎX qH4\|n'լ_#)&p867}¾&qac^yPKpl+(ܤɮgo5׏*\;>Yw,@'9Zo8CqbF>Ԗn6ܕ>HeMYTgv}дrXe;,0Gs~%ϖ .B:M_Sb ̹nHOy9C BxA\6o#tUj#Wv"cnZ@N<;IXM쎥Br 0r7sZ-8UCI*?*B1*tn\22CaNmN FsN3j!\OɈR6vJ`r1).evyqjqi m1 R ||m1>)l#'9{wtYFةl0=6gޚ2c3Uog~򲟔\،S19 rCc1؎)RNGʠdcB~`Ar} yb~Q3ք v0NO8Nzzwp `O~R1AQw [ U@z3` pj큰?'w=}jz%c s{t,<eOH #x tzрfm{'<9pqF3㞼Q>F%K3NOG#دq_yp>)+#= ;zR=Hl6.xG dg87,G#,lO8G+ }:惎?ˀp28= 9\QH#zT,[*cT^n$ԎORr 9#'^]$ FH@1q: (ft\czgZ|̥K*X,3wTs|[o f K*>VcӁwP ݷà!sjd5 ]*p0I.ҭ,|_=Ƹ:VтMܨ<NOV$2A݁85SNp1yD9c&;y,:nsR%,V  gJ\싌24)Ol󞵾aNǍdj;z¿sR;`B9 \gA6)6 A sXUD7pBAzW%'Dqt0y)+U~PO;q_Gy<'6nl]+$aT,X:UYWnأF`[qB^Sƞi 6eo1@F2ak< ݼIPO< #Q=J.nrHq;1˵#*98h}1G3!6/Vu,"2:t{vIu'.|'nX985|jKh ' 7#jqxߓWt'4f4b47~NlՕk' 2wcjnfT 2O y 9, $SJ~#%+;7Zt(@r-0O~O9\\,*4Y 1znbFy4662Kd6ŽBm{0G#a-~u@ߓǥ wzl(*sCsG|Á,8ܞV#"RHĄZ<+FHnqV!nJ,L{ 0^(Ov5 0ml|m?:NZ"DKC/]~_l#cL3)xq( ѣp2TH8#r9."$K+c,I^YCd:wvUI$a@gНt qq#HMR&Ivr9A<'m )#fE!Gv#k ]H!UXrvOR_ ĨV6'f Ku:[;1!%~fۗ=鿅}hvۭ+&sj78c\휞tsOr̗OF [``W_VՙYY7cn?*M̻6wyO=G'n+άڷ{TV#ۖ>{3G߼@XS! s[ѕD5 ^$eFp pO4J[9\V'˂gWU*SnaR-wm1ý]|?G9We{sl6HD}ɴ$O(DJ#3g-|vM6=!N;k }YivwrHcef#;v_OZ D_6Yُ_ʺ_#T%Gi^ڱrv\m끏^> H`#Ws7}vꔺ~?ґ\ONūim;ʹo7^s8ڃ&3p@#ߊ^qVRPEålRmnA]Fv3_>vw$ ,Ky!^*aOi7sXS$O&xXO[[(Z! $ &_VI4ȑf(\NkjiKWorݮyNe Kooo$Q2)s96nG1 BO5z}RQ\[H$lFp(W۝Q tA) `zܞ@y<{Qa*0p9S_@r =nrFNw]rwBOnÚos#*0H`G'g9 `Į7u1F]Wn7H<ξjיR(<*H ~'ZrCՀ`<"ia_3nwAS\cp8.\{уomoBIV# >RzW9v*v=*Nqל UGFF)۴cA,QҜ$rvNIu;OQC0U6VP9bO9<+VwIF~v ӌ>9Kޅ:y9c\`bKnV##N@t> Sot`*:xPrcZMA\ \^~e? p3&g!II{=E:XKHVVroI&Ơ}Bg\+$m,N93KmBeޒHd$byىR}gS lAэіTxԫΌAn0zsԞBҶ7<0S+9I I0GZ.0Ov3Λ흩Lw*/݇-rܓ=3 ~E(j /.  O)br9Uq"f2hQ0O'nqR[BRvRssREs3U' QcMCHHJzaN2Nj\J|mSgwYJ(237ͺB>Clbڭ Q~Berܿ9//hw⏷IP -QoGCJ˩,\*qƃ"7H cA~Un@cn<qR7p`n!yv 8#;I^ҍ>~FN7~Y3؜Tw~#   (cIxc8*l… t!6Hˍv _dژ 68YTlļ$08F7UfN7sOXlţsta nsfM˻#ps?&וőkq&OݧVi%dKNR@q>Ej&RX#{ ww#׽h*.]W<)AX:m"V9c N6|Ìҭ;mx0 ɿ#zH^:)Z=E;k BYWjt0=빱T;|2^dyzQoS|6u֑zM$6p7/qx+L8ܧ}ӊ()[=60i7vQXGEvTs2=c ÜyYNBь1\ 8q?sG#B$ܜ{փ.ynvӨǵ1V"qc'>tDP|5-+I`Ty}8$І1O\}:3@#[?J.4qf p ᱃}~;77u!If\~>2Zu qoUbCsF9WE(9J1IٍZт\`#~n$A㨯:v6Mp}FkoI&kuƄ9"db`)n̠W ^2*X=sOCcy;~m9Q9d;'2H]X;U>b2FsW9n͔׾s=os5I apj:9%fF` ~[iO! (Ӛ-~ko ;3;`wdc$DaBvrJ!1dV**+m֐]$-@ em}ԗ'nNGq~j\-p#|vܥ.'{-p% c'0'wbNH==i79GӧJv{$ HOC&0GXbHRs|zl3 C= +A N=?>I!qϦzRn';Hy34, ةVV^3,h.@Oгiږp_@Π+)$h%D?U#ҩSQVoF1G9 *?+)d=3.&<0OS rq7%Cz}=u؋98S$77Ldtd$/)<@Gw;0KdmPw ;Nՠm&DR#n pb1eN\ӡ8I`t 1{zӚՂ\#^˻FNӵ!wi˴4yd*9:m8cPz=yi>^]btga G3viFb-Fs)'i m pj^(GqRw(둎'Vig!+>{sovB Fm͆JH qr6qАsXkg;p=1O3 qNH%qr~V#Kng=~j"ŘF9 K}cHוR>_lQ9ᑀb=*nPp2*ecNsWۡ# elx^GBG^.JQye  +v]L6D$eqӷJ7-.Ov[]Tr[8 c՞n grn߸v[CRJ#r׮Vk-*B/dž\[B=_c)T #/N;z^q޴V9 mL.䏗.2="sVdUhYcWE e@z3O.ǹ!H >[Rߞ3++O#k 2in[C9fBQv8P92xY6)ڄHoϽ!֠H?t k㙦lɹfe p QNW{*JNu\`B k7.@>:w%YiGLFanWTsx:-=1<;] F#?3)0oAn-@ <spsr=(+4 էa1˾BpF8'ڪyњVqn|y-: . ]&lmw899}GS}c~^I| gp/@9?ƴp@ǧQGC93z$9y7dr1+;;=?Kc- GAk8d6w|wֺhRG/B׬ Nぐ<~ @Tx.%3AFGו)!%3z(5yz;P;\ʜ^ӷS܌p}=Ean/? C*PþgQoKPUp:)=j«ӳg7rFFb 䜌zgJaN1%|3K{>Wl >2AO˹F8`{qP. OJM^#n_[ϨsЃ:uRW~H%+C/qx5!'rC8˷_BqLuԭA8kE@9 񀠓VOsXsgsnL2q 9;Ocz/e0b+8⥈|jOĞ?Z2<8nB9ҶmS F:[&8O2wd@ ab?wl=yҦ^I囨;t\F3ӕ0=8$I<{>=c|f;yiӜTAݝ1Sh$~b3 I#46'3޵ouMCVYu+ȶh!S1l r2hڗT{iM/8z61wA?\M=@*~fb:m_c8nz.@랞9| Bg8'Hg=}1R!!I-qM CvvўTedJiaҢ`"|nw,6srTM]7:t9 uK:Jkl8!QMG?,;uϜr`!oܽIoݑϽ~R\.Trjm\&#RFR4>OqOz w;OO\piG &@k1m)`A }'OWebĆ#$ q[7^9N2PSHt5+M$:#'OS{,LdHn9 T<,/Y|Q`Tc;\#h5&@8!3%x{:WG\v?tdd [6C.\u8HYH`Y=pr8ɉ|=va=r3ͻztu}'# 9O>S,UPFNM5%aиa&mRi̲*B`2;#81BӓA(Z9.A"YF^7mVM_E wRJf0N[B;W4SZtg՟wɦk*8?|u*3=9]vs3'*w'|&KCR١ R+Dxf*8Su~WY`ǧ־,kSK2etOw#׾{~5O8}:|w=-}{;QtN_F?BpG1Jy뜎=ztlr;xqQNAw$Ny㓌*pǧlt{*dns?nIXzc`O¦#P(:m<=3ߐA09lQ āG_aLdx=KW2qp8܎dS}~9؎9Ǹϯߌv-ƅQ9d,uL8?UMqǞ=?>qUk= MNA8RُםHCd_l]-*|oOeӝnqEWD~bFq53lY[90p{^7zHzzu=95-K3FQ[e @=ATS9'#K-dΊ?2o<3El 6`ޭZذ軔L,Fi8;_N8Оoт1:qԒF);[9<^v1naT^d}sjXdIx<1E-#ϓl [m L{B'타8\-If~YԶC>RHzkSǞ#MIi$y+Go '998w}6CN~vtOqʕUwuW=b+HZ9p(b6y^ %yF1UskίR^Z8Z`iEQW/$ʕcp ?t*a\FZ۱v R#9[5?@Eyܶv̼J[C5vREX渕r0>F$ >o%c;˷V*>c qלƍʲO.Fr@q՘?UO jpbC"F!fiesA5LpJwwey5@ 2zvt&rp˅y1K,RcbHH H 8cq>P|(vѡwO c80r h&A0rM gA6M,,q0|.;k6HdS);ð?*yXtF!48b+ ܼs:\u![ c03Mg*|k# Y #;w7=luGwET佺4@8I62MCME:Δ%s}>KtU1INxFrF xT|e9<*rM]Fӳf8<#6Wޤ1.#+Jp=02*J4 `cF~Rq;,{Uwu`<0=zFE #i1^ f0 G!.NwA9/r9؂#|Ўт9pOzB 8Sß1܀p=sW8,{K+n]ULS8[ODd՞@hs5͹4\mE t=zWN%Qa U;HcҢw&nHA;|X 8W<±`*3l(˷GjFTb$SSg~h]˿pG2Wӯ`U fI.2 =iC<1f`Iz\G8n}ve9`{qRytX1rcS֓Ћ;z|s$#ci.B!#kG* zҍ.퍷8!GGEV9q! /;;0G7:c#|@FnOJF8W qs׎G#wV(89;;jВ vB~`rp ҪTB$?1}}PeBѩqLJt{;N.w3|qW},"P<҅^VBWpӡ>xn!h?v6r0A9A SxzxHm M5m,lC}V H ɩ 1WjGץL-"uY >v+պ"䍝>l}lm Wݳu5%,rUVso% ?{a(ݍ2RHYFY2g?U+TaOUY@l uڡ9USVc<uFZ[%Yml#d%(̮F'qׯzu7 OMy_ߣ:psY֡f5V8Mc$8;($a#zs2D[g9nrF:$򽎈 #@@I,u3ߞGJ߆m W* r s8][{[cZ[:-u) Yd(ɗ+PvUm2|K38p[ vz^.<:Tת> ]TkԶYIX=ʋֽf1ʸ*|N}k lbqPy'?BkFj)=uMh?W.e1#,[8M h\L#Zg9%c9X59ʮgx-: TFYX_~OLv46R5ʮ[%L׃Vm|ǐwt=qp7QexqCs^crHƒs㷵6*;$GVQ0UJg@$`m>BiƇ4du:@2B{Q+zj:{QG ;Ƞ$Qg{籦סRI)1 Qَ<7A^g#=iJEf]$~T S' >/VJW8@֤K.69Hj" "}>Rymca3 <*}kR'~BRFÂ1/B8jw:zjDr4%X2d"Ɍ; 9o+}Ib`D/rIۜi8s&e2m,$s>_C J/@OiQ&XQ!,He/NO^Mh5Mۘ|WQ%;vĒH95QM|cUV c$4",~h`9i%Xc~~h1Xѝk0ڬӌsRq) ' "?W2گ; p(eq831 6/H38(G=:U`|dpi]>lUU;FA9$4`Ȓ,H Q #޼Mb'm!# 18vfM:DҐ<#"3QO&D1aYq "9Ag># QA OAOjbZ&kF_!G|u<:Ys{\1F*ef )Yl+_3n֓P0'rlD?)tn8 v>W,DJXb6p{ӌC $78Q4 ,QWp86zSo@@8ڧlԞĢ8}pݖ}OXv,F v;s{SI!PreIPr~RpT898%<&`K:ۍQd+tˌp)1,2O;vx 2sL|HR>Rqׯ%?#2TuRCCDJF8Qz|iY2Q KrÐHCFHp* Kq&*Aaaݏ4c'q'f'907=Aߔni2PN:Xr2}4wXq]ߞqB'䃑$r;tZipÔ8_@ '&68q^q2Ks1>d9134 !Ƕ={ᾧ~q+2= tNIt%:a;  LqnhWЍ¹OIonW9>iD8v-VPI?JM_Ө:? `8 r8=*_0.3h-jϸUAl8 9Oppi>h˓T*[JlʍA`"1ۨ^XA7L&x}=k'=J-VC XUHa\gVM.䅒Qc`y@E'Qܵ[::x*FF8=x! Ř,w͐~Pxz&*B x@cךgۣPvlu HV --(}j9/N}zTǙ ȸ#fdT*}Z,/P1'o-Y89ҹՅ6֋k*3kE:{&w$ AA$6z&am}O&Ffxiٞ,{zme 8 Kؑƣ )''_=_:R׵n*)$tvG NqO*xAsNOө:iIwRT c u#${=f\2~ۚᩩO89}|TS#)2kFO?JUPwd I?]1j8ۇ/NNGAS#?)g$(#8^$u0}==9sFJ*nyQ^;aqw0N|D~9U,Dlr2]OQi'T xnUs\1`v8/ˎxqW{K,wFg^by2pct'+&ܱ9lt'aPԂ3\m[ύ|ŷ'],NqI!ʓq:k=N)$}ީ07vc뜚f:~oo T[py%ڼ" ^hC0+cW}vM)[ӱY68 d|0dz+իIrO;IP݅ت3<{vj4ڙBsYgKDr*2G9lgҝl%W034+YUT`:7MOi9-\Vجr=x >2J30<"=0sH` (Wĥd:`@ۑ8#"XҎ@}lG eLZOp%8MbH:>Zǧ֢($ gld`? |dI^{i}L7-Sqy%08ʌN5GB17O KRvFHy H; ;nyf{1H̀v1 b9' @8E *0:zԭ1ؑqzgsθ=g9?/0%e$z [nrB {w9`8{QC`Fx<J89WqbT@q*qV%Wpv8asE8G:1׎G|7UbO=i3;sC`5]Hrs ppYcȦN0 d^8[آL FqH;}3+@1\rT=NsDvRO $RzF9mg?x׽%Ȑ exLG'#ғOQH Czh}:9?0'wBϊo/?ڴ<}#$~\_vE rw6j$AIs+=S^֮R{eFGg6>y?{cvF;OkEIl] VEL]J8 Wj2BgӚ!,|22rCW<䑀 `zxʃg>QJ gs{֍HD[3| (A/>ww-'3+g(7 #HE 8# cޤt02rF2@'5-4G@ = b@jfʨlT6ѐ8±rhqZaW&88`b= #kj¼$,7;\JQ6>8=k9H147V*s9+:[Ď0G$|PY;s YoARJ+q}T&gmǞpI<1SWl#) Dd#OP{큂 98'uRvm?O$9a+J@-R;ߚO~HB@ќLߓ]"yyتpiq1xX`ʖQzӚ^^W8y`9.[B9$rF:~Z5{Asמa:Uǩ| Y3"2X2UCc+dyh1*8F Uaw6C3Jhh =pA8#ҧTy=ޑ\ZL`Cc bIHSeݸw?_^zf{z 2]ǒ8Yx8lWN=K0:JHߑvrj1\z?v^%̜ٸa:zjWgcj/sm`[Q%1( Õ֘UN- J$|NRө]rI4K `} yFbDo"䒣]kIwM灛>|CI/%o2CnU=A'^ˀc qdcx+ݎ#z+3ċ"ɆV1{0 :9;ۄcg!>KJ,pשK0[3][ S;N$z|X6QJtW8ˆBm#*H@HI̻F4-2lz{WD"G=I^DK#Fa3ﴜ" B"kDGREpݳ7)$g}'Dyx۸7{ i#1ۏ*UkɈZ_̺D q=>jUkK% `cw u#>\eM:,2˶9YU;gB_硯k{V(g,SlJSM$I|$$b ErIqFϣ)kʿS+V%Q36c,Ϸ\~t/%3l@"Z ;j_f':,7R5l*#bx"~Nz8#Ge%W< ]+WxqBdbܝ?Yt2brWA8$$A%c@0A8Pr9$}@#9v,߈$8ץZa2*1f9Bgzb[6-]D!@VFc$G989nxY~P\@Xvz0Fp )֙QFI# 7!qOzϽ7*H m<4n;saHwPt G\ͺ,KF219RHS*5X/$s?9`E%dCy SF[-~` XlVVQ:j˲]('ogzz?#_g8|HK#(#l g+8)&vVr0A-GnG&n5girӀAX@ rX/|~Ճ9xAK-=JX] F^c~+B#jPrq884L[=RCC[Gb_fgpqykV;+pqgWdG:^I0zu u&ɣw\p0GOp|vǧU93Ip@G98q2< 0 G޿mYOwF8սsڽY܂L8* YIw;- 6}13IF'٤' zh;~Q=2/}(U#b'*fmQב֚z$8nvtS/Bd >z9ic.]Lџw8d d}O?+ Ec*R~VOiQpOoOFf'b98qqEօLY¶w5a:]85N2r{&xyd!g2  AAQΧo476nȅ]ߒ05&YCjvwx(N󝖽sEzd>b?7_nkU_!S#H?vzuVy!dk]o4#{2ܲ[\y$*ϼ68㷥{<#]`98a^MiVzg 19;td8ڧrܜ3Ӂ=[Ҷ~M Y[wVĄLٸ}>ڴz֠M;?"(w1yT.oil\7WyUmHKzc>ւ d`e8'#׭H8.v ǥS P N t-߹pYeG )c3szci$'<9Y,\gP^}N2"I֐T@@Ui/*ǜ>R[c8G!2\Ws12:HhrX V'OQ9\y?6rvOPx} :uqHBb0An 03;$09qD>曟\$мlx0{ѹ9(I81M:A={~&pb7dۘ3:Gfʀ 냎Kc>y櫯$0Z>%XLVHI?ĸŒcV41|UJN J/iyko 9[fX7/$sfUMQrv:qKV `ä㒻^*}pK~&B.ve"UՉ,w(N{1NGj&4El0K)Q;7NnYr`vҹ̒k}$/͸ݩ,6w݌pɻְv>[i1-qQO0KmnPswt9+W12%@W9tx_D5GZ͸2 0FF]c@y @rjm}+]GӣkDKN#@\'IH}vch* #+pZÚֶKdV2G; ]i26sc۽pW.m)^7c`1D٭NEBdF`v^,Q)XCsm1ܱǗ"*Cd3Zc{㥎̹5@w9xh*ޤּNm-h=?fh€$d>Zv' V~|SehpGg-[Of񀱲462.G+$n-CuyMDל_1ĸeRk-{'5O ՜9'N}Gh|gs_}Hsӟ1:P:sOA6!sz dp?Z]=:pON}!=A鎹Ӟ:To+epA:6M'hfc29l%9|ps׏ʬg'?kEiRZͤ86./ 5ӚG3 T7geIneYKrۆz`n>\`Z>K`8522OϐTܝ#p98Қ;#{g#rF1b<%* dq~;?WF亶xRacY9A: 9rև5@uI 0nNa1QT⢚T$Eq( hg2t+ؗz`ڔ=T| HUf,Jy#y~,YYGH'9;2t^3 1XH6 c=}1Pm'=*S7˒JQWew\~=)Gs#H s֬RFjary%8.Abn@rN0}{Hf#zr>JX6s+uVkvS|U~bwyG- ĐH`TԒr O{܍!Æ, .Py@:u=xЧ{jc*6eU`dald zc֝mHٟ;UN<zbRKTm},/≝k$:sM$˄ÃaX / >RNzZqj[;%qoQb739ꁎH~l$JX#b=j$VdYǕ7ܯrzC[]m58R0WA)0Дk.u@ S 5N3$8b$eT'ȧ$ׅ:u'ִ ڬd3.qzR a(c$B]_!ʳGSБ۵MEHBm[!.9q6_nnzP$-l fEۅB5gba"cq 8 MN9T:Glvd xz ֓}BvYą ;c(dNHJmbՙk+?09w츒4rxluSJONՏ.${˔mS ;,Ã'U^EvJ.r}, ~]t|-7Wƨr,wuF+5RExb# 0Wj);2 db  pNN7_V @R:.vg1Jar2U@T#E99\#z; ˹`v0۷a3T2rn[d#Ɏ|*4~lJO$aZEl35ӻեݑ(B=CS$@'vx8dva lIgȭ!7$͛kc0dtVH <ѝo :qt' KYYa0i&Rm`1 _iA{or" f!>`֪zz8_[b9nIr*vdt*p3V&%sxu+/O LGTrfڮc1+^{{Wi%ZE/J?NS OdaO6@8IcxfP k5$PT)cLב_-p-זl(nTI Ԭg\nƴV BAk˩J7GK>N*ݗkN=i:nj,۲ZrZ#AarLf[PX&] fRN#$1ai8is[K<'P&yvD&Uuz剆61 "H9S>_~sͧ&yK3VL#*8# W%|ғ(T?2f *Oj7{z'͒. vr~Oj,HtTb 8瞿sru;1' O63Q7ws>Ӗ~˩ + *I=3`qUҺr d*'nfjkmp^P 7}Ql0T 7{{;Bv*0{_ycR,xQ HϽJdUgs=Nцys} +WQD3NU O*ו(mij3N c㰨 H$,Cs56uܤv\s?_iuH8A: 2;=1T[݌;V6A `0NޅN8MA܌PAHH=W}z{Ա?i?* ;F_œ܂q(HXBr'N*[l0G~-jFނvF =D}wY@>OJ}^a9܀%x~T~3PzCOQBG$isؒxHZ26F8'*U 1 G>*dJgׁ\~"2d(T cz\V շr|½ U9Z29Iq~gZn1 e?(ֽ=U+_ץkܑ~e z3Nfe 9@鞂4Ӌc}3,n\re JϒH٣X$~EtS؞EH+=FU jnIR03kry`m9,xÜROBYBx >:Tk夡v1c rOj07;"e @rusСd0 rd6l#;Eڸ[}~U2~T`0w(\#1>LdXE/rT ߱Oې1Qe0J;0s8Z'c6ɝ͕O7CJ{UIޙy5W):4OHBe<FjQز9q;k9S8;ULoQ[9^N3:gRv93,;0Tt` 999`pX gHT*QmN2;tA2aJ?0X 8$:DJ]x#qzi7UH0ڣ#Ǟ.Y6 g~׃h+Lq pI\qĔj[!{.D,y=+I'!9)uh~TS4+3@Oš[IYW+._HFB6X(8 oQQ$`2|z2Ɏ@$s׵K9q+#,1rr6vT1܀;8npA҅~w` rTl֐#0 eG$cpUPqTo r#X8#.ʤ*`r;=)Uqņ` ?ß^3A=BӞ1M #q+N8$U*\3dn8*rAQ n`dHwpvC(F`ӎ'(ާʶ8ǿ8yM ~6nCpU#?.q׊Vq݅,O41pW^2aI=J܆<8 zt4zg1xԥ ?Ÿ+]q󑜏T nU8ĞסPdnV(1l<ҋD9R>YH*1,NFfv,0T;I+Ufߥ'$.YVHʢTcC:֌6i w. u4͘b]dNw8M22$ӌGƢ(U8u94QXK*}Y3'՛<`ؾbn>'Am} r(1%3=UFs~At,ĹryLiu\ UG ̙% e^Heם'FqҒkVKZH iwg`6.=G;V%puOFS9-=TWIegˉ[̛͐`+M4clVl3ϩ?ו o=x s.dwKXS(I g9_Ndc˙bA%m-.ɍNs1+W vYAwi>Yלw#i\guF8#4 2I#z~(dnpG\ʳoR$לcS(=׿8; NX=sIbRxby9=ҭEB_s<1'1PYFN3J cf}J䝸 v:7nߚQ=@8?AD.\OGLs\)uXh8|rHݐIݎ߅oCdh*\UqysTΤK;HYҼP2;msۏzPrӮ)ky}'-*E{Zt~3`۶e.UcCvv#C#,jJO`8k asp~h.ڒwzwɦ*9o#j#Vm'tf?¤kC1bm  xF~Hq%8EjVe]GKD:9!,Frם.1&.4f:[Ʊhc |z ǂi#$G "2{"#9x5b(AAwʹPֽJyue,,g#2u+cO~ќR+ݞUNJ}{> c#42.QZGinvr9.#ּm@3ĆB)qֹfuSH5Ǚ.>P~Vs>lAn9[$\֋c R qʹsd`  S22u?61P6{ 6p:HA玽jhIe7zs֨ʕ w|'yךd ccr}jLspr ,QL>) 8cN8HyD 9R6たCz!"wy+,Q *kr0Vr34B## q6 |'8@QmQFyⅸiiwH;U&F=Bu9 w~ȓI ?z"* Q̮ppp8sY[Nj*qmSQXd#frv7}޾:lmL霂-=x""v}*M՚gk"{tڿbz`g-ldוr$ᄙqS#RmB8CIoaӌ1!; ' 뽾=@>'h!UT|;VngOjZɳp _yH.rN1n+Umn z=̩=&<8t_J 8'kFdrBG@]*X- gmqzG'xX2Pw:\|_;JPUI &wZRIZ'9p~TP9=6OS+B p>PN@#ݞs+F+IݞqtJVSױ*gto6z$o'?i8{X/2ӎϧ>7##%枺Tՙ!w>nLW$l*ͷaOk`h9OnnS{.XSSMV0ny#=3vr{c9)K'[9B &ݙ叿S[PKx$\zkawoi3G-DR]D jha)vWl=sitI*fH-╒NudےOdίEk j{i[\CRuQ 723v>l+7+-O^J7~_᷉5aP/Psݷu+ZGMQݍqgE]wF5PzNXe0pH8A3_7kR\ݺ݆ *nLGVwg!²Ķ$9LWߛ㶧GH؂LBN=N:1U9T*xo >99# -oG^MlKe;hIvp(l3d zv8A8R ?(ne<eǷl?.rp:t+G4y =\tY䁸98\u tZHtO,Ȧ]@F'=(4eHһJ\mLE a nOqާQSqq1-=0B}d)@ݻNrW2(b>I~e\0#w:R&2yzy JSeVy:~4\3d3;rAn1 PG?x=:`D[@Ӏq';qn8Ǿ?1M ~X3zg8g8q=G5Kp",y\N1qAPfOqn Q鞸n At'I61ty?ZS⋆/$w㩭m2(2\ZY}C-HHs1qE~#UyW1pr:qX7K ATFrh1  [%H'<ƛG$o\1* |iEЋQ х`"xRc'5$y$ْpP׎~1=Gk[ vH07J fWiq pWfp[+*[u;bL3˲@ECo #Fxv;短T)WGڹ~B܅y%^@b0~\XGp c3;e'2?WskSUv/Yd *-:I/1Zsr$6Uٷ$nԺy~pֱ a$X+y~YjYպ;짂dV$$Ʊ0`I k?ޜDN(ovS@ۓ֒)Nwov\B8cG$ӥBNp0;cS,5b+ `T4 (%9@#vyK56>$[߷Tdݜ_6 M{<ͷ YnLzQWF3cZz¦3 v)7C t$U @ ;@rsߌҺQ.9=֪ݐ2_.2zzYKn@N܁чs_iE60ycҿ9JJ*V} 8}f({?`~G#_# uRm c>Kr. Olz\E s-RdXc;G[{t/agzusG `sBx БUg~~u[Gox1ߎ=}+%l<ߡϵ/1מ{`Q9<}x<`% I=OOJ{zo5=IzЃ=.dk3")`!K,f#Yqw=ivda,E#<{Ӵv-iklŷn!q gIia;>VTV'vXpcNKMY/C;O&;4R.,E hp'zWi/uiɵk"1D1%T9"ٶWM6m|}FGvުIu^r~v4oSb~bYTcv3\g .6(d_^)#9P[bF~H'aӡCm:)!iVm#QS͜ Na* c6@ȽBG=*4`x:WhvzUBqR3c\Oa]PZ/#Ѵ~' |)?N6K1j"rb.&i!M}ɦI*E;I^0JEz=vlsziwiߪS(bF','<$HIRTI'=NMRI#?:r c?N,w,p[3rXmO94==@_Q 玃j"y8nQFz'CZ" (è7LWMW$Tdʏ*' \{UX !Hs\ReRwtQ"@ ׹u z+P'=Cd^qrW<@Lu'?/?=iD08SXm2[',>8$9R)D0YO$mave[`cg^3ֈB塔L6UKsaqV "͸ U$dGSWT`9%6،| H qkjmh ;X2U&JǮZD{BI F0'ypOATk"+@Ō|Ī){ H!M) a&+lX@>F2#܆CI' {O5NY[wʎfxgWO"2I^}Xݝ4-o|ȬprUW?tq纅B 2X緦lj7h&FDW333Mx8E2IN 1Z+ $?e2ۻGsIݹ:j[㋯ kD%1*678|„qZkUF}WJ^M'8e 7pyJq.H~_~g(JQF֧)Hv>\}=3N֎(?\t=~&7t89~'ӭPG#֎׷sI==FGL#;4.DxVNqA֜^{3R~9= zҼĩr==N*ٴG̈\19tH^2sLzw&t]==1ޱo-#'?o4[qI^6 Jr]z'y3Ie/8zRvnKT׷Av'"'rF?0ajXyR0I;qU-fheއ(65KvRyq^AztӕYOqY)ZN/JzadfI. |*X q>{,t yrOV#F[Nn?KsJ6*q;~bs5ʐTVs׶:jZСbAU%?gJ9+h;IN!2>jCe<лI~\gv?/ ~.oѸʱ+d 6H+U ׁtF^2u"kU!\a <ϩUgn@c㪃M8TզgNuf#zEm냐TyOZsC% pp =ϭn&[Yjc=& 30ڧLS.I :Kk5Tй"0C'5R<2a)$^;|ºhrrw$⤣YZ@H6CwV @*tV>m-ʚsѷpr:N?N+6K6$  Fz5D]=[*T?W#D*3qu?C5Ij7DѠ78Goj fdH?(ekE\74oo3O;rdSZQزGF,q^U싪s!UYrY2>q"l9{XC"Dvc E$ty$Y6J$ִUcG"+ʛF0pcRg;`}x@2cӎELE'AF- :.P(zϦjFg<|8R8=HJZPHIFap;JI{`n#c 9s|˹FV00mʲ.2 Xua? +iجcx`Kn ]њf߳' .8n_ʻWc6!h9 u<ޗd+8<+$e 6\p:Wkn$@ϱlf AsMI>N<{ХAnq(Qs;N2y'hiy2O@@y#ԏn<'ovQ Q/n6{d@p A?sV}N'cN]P7<k; <{Di7K3N{ +j)#*pPss8[_LH)w!8'tt*kwlv]]ʫ7V)I%0 =z14}w7ʞI#q^y$9Ϙn6q=(Cc#K%}qϥVX9;Zӡ!`QNu3T2 B1q NiCԊ t '*H[0_yNRSh3]9aRZCuo67$p˖IXp_zu r2q&󸪒E*q].`dX"Ƿ-oZ U@_,#ɴ- v8S3pvJv+12J!nON`$l SvF?J觹oȹon-yf۹KuCU+@* YY6 O ױfދC7; ]D[az.܆S]r*mVhX)2 8#9Bq .gms4dJRI_ YcnNuE'GPB>n#渫aR/DTA՟qHش (xvDdϡs]p$$m8\Aֵ|3= nK2ꩻh_SNNy\]u#M>T< gf4uê%NJ0dkVZrP);UFIU;媎zڒI-V?( <v:Ua۶ef<0\wliC,pȪe <}ڒxNXnbDc=+F_ UId;ᶒ럸eF: _C^mNgd:JxI䪒x(8?q?2ǜ㚜J3-@{T8Wn20[?օEaN$v in<OUh=L#$6p:ѕbUA`qzNy v3$Dz/^IqC߀@Xc9Ҫ;ЎK}[ nHҰ%̧ 9x7;4 ,S$ oθ(I;'qף%Rg/=L6m::V\sHz)*s^,FRi`ͼ)`6U,kF1eaȴևԕ֦͸TU]A[:a:Em#HvYܪ.Zғ]9I. dIncQrqDp2lMK ~8?vpJoBi&Q<`܅<4X$²'tY73xnҷRLQks.@T0W)r 23L v.̓8Mk]RWc$^<N-u@F9Du p;td*EQ2=e&@ڛF>g?xHV#ph'?#=)F3%Csp0l1 T*ݍ+qII^zOSLuJ0P HN2h񸓄1cigUN3.e>i_13)^8P=M`}}Qz~yp8#A1ךHk*l`f0?]`TUr;Qݏtw*T4;1/㐧FS$@)Mo,>d2unzu_/8+9[A (ϘFy]w`pIޙ0X‚3MpDX#:0ϡܫ9<qQ+NNF̑o<;Bc#@[2/ĞH3҇ 7(傀'e \Ha K =,YQdO/pެI $/Oe ~\`mUy'$5r@FnRŹ^Fx2m6XWN9R$[k?.9ZAwF ,Jʿ?HyؠpROӥ&$+.\'y0_❲NLy^# 5Ԧ/*vc2H;=9,| [oGs-CHDlVݵ;J3˞2 ow'OJM򏕱kgCpee"RwlF㓎5zv-DbIs SLhl7 _3Sl&nr{*Dn\il]5Gݿ dVn:lck)I 3Hk)M&u/:?۫Թ#cWqaߎY&0`g1n䁜1G6ֶ=Yu8)?:8#GW g$dzҺ](p< 3yyڕSŸ٤ }ۃ5R*Jhyuqަ^O:p>_P*p1푞z~eW%x g֦z3)=rH";~$;ssSlLs:Oq;qݱKO^#Ԟ?Ƭj1`f2F3rǦ?[\uI:rqrqN1c2)UrJ:cR ay9? A!~`czW `Ny#>)Rе0o}{zV:˸ MWnWNW3jtLt泯uxcnH#+х5dߑ')JDxֱ'&V%WZ*[=_Z0Xde-|$pz{+VیAl/prOlz׹EZI"109߉B`edd%nI=+|-[i'k~U@'9#ӅsT]~&Ɏ9?PzUr !X oΦq:!54NW@$!'$,9׌l Gp3L6u4"3-l9J[b[I $GnUEf6w.,8V8=b?+#s:v$EJ28Bq$r}=3S3Ņ,V vY#@KA-M2#2#9c=J+]79?>Nz(|3.08nqQޤ%Է*L}ӎYjy)+.]1۸-^'8&79@@œ6zSU)J ZȣbwmUwJKg08YD7pY`3(cFNd{h9A杪S`U !2}$u%n)q,zf/Q)4^`cvN?^3Y3mNpF޺lNkbvg$ TLbC&23YKCX/ͥײwF3y9xs6e,̙q2[d}Aq\:L2Fdg99 zYR#BŎ$|N_c㜏ZuCqgn7?i 0y{R \gԏd*z=v- GVăi6FpW%e.;.O*TӃǔ,Fy{~Fr2 $dtҠo)F 6rpNq&qH2 HלiO˿,W xL y Js601N@;qzV'PT%(y\ryZP!fRVhE$csKb%t 6[?uI Ʈ~] <ӎ?.ym];A2nJI}ᜑ$2q)?W'nX ׯ"Itn||X(80<Ɵ a Hq8.F.3ӏj.I )l|Ǟxя]e;;F^;VI @ͻQǻXzukAܤc2 r=sJz׌Su^Cf0BcZ0Y1 ;f4T$2200=)I= 鞇cLԆu==NSvlspI\>ѳ]y}IO8`p8 4,`#yjI8zw3XzH  RHX|pUY!Pp7|q֫ ܞ`F܌9; I m 4(w\dǦ1P n^Tn`J5Tm<FOI{KF,-pۓ:Rghp˂FK_U>j0kR4]1¤s޳ƀHUvX=N9R-.C`jnwe!K`zu|)^p1/#$8kY~i$ݑ@~f*G+c':לWl끎,1=s~7 j`62 1=@( _SsK-$; I MIPpI$ޏ*»rsrx#U^nzsKwy īv0+=2ޘ` X!C`S[~x^3ڷij#lF|ЂRÒ1VTړ0sngZ\̑ #&fACsDS(nYdo&Esr1 u>gİ[ZivXc*IwEY|<՝I[_xe"TK T/57ڣLbą'88jl쎼%i&^4B|H`,I~u[h?H `<ʲϤccfcpX}wjaʜ]xSZ~b)@r~ۥn.9 rog^Uws谋X[d*\eHKsqr6w9zqR2?X@gVy3TzI\} OrMH\w9zVr1 qMsG@?ZXF́0: V<(`pG'KO,|19Ye¦[vH V.OH#!sOWCG*3p;z9[e~.qLV;t 6 1SXw/sڽ=y=d~o`42X=ߊ$ %=+ڜnx'=dn߶pc>?{">9#Kzz;&Gϋs$.GZpӨJDdb!89"ݍRRHNrs]KcM$/[:sY@coͻsD#g fKyڮ)rJ^kVQAT5]*p=t+ er85rxZ}õLc77*X?)m.=.O>$s 92HyԿN E~#Qq;Dc}Zxnev2{ qhw3H.Q0s^*LwF$-{MK{Y_8fRj, ׈u!$ nqgڸ$B9@xopzGrBA]bVITSܞ:VsǑ ǫ[}:_.Usc9 8 ӯfn'ԎObYL63'ִE7`l`[lM0H< (=\2oV`eSrG6)%|wF \ Ĝ/p `y9,VL~zԄF#;rT9sJ ԅqp|t!׸vZ.ۭ4*ba+q'T˦ۗ-UTBKlCI!',s !UI秿J图vdZ?t(23S;Aj<2yݎy҂I@?0 uG?.y.|>U`>f/)s&gk$ci%h섰8GfGDLr*c_tZ[%fay p2^:<`^]X2nЯ~Kzkٴ^Y|ϕcd9'O*rvG?N;W}8ծɟGߧN }j9<=ҳhy6Ԏ9pN~gqTu; u*Ǹzu=OҤ9*8o~u3z~'k1q3Hqr;'9{פ =3*dy OO(^2=Os>:gs׷52]t:m߅K&2NI2@?J{2R$Lj(qoc6,u,1~>~BBb:'êb3؜WHlIWFU'Oֳ>`3yTu#Y|3rɜ5Yf4vՎsے}:R*hYfN𬋵cFrsۥ4D 09'kv{zf 6ČzR<Fw$㷹?A<|}}qHc+@0}{TK*)I\t 3IbLFH.xfLg^eBi$i 0>9ڽÞN‘y&T6\3܊;icH#30ْ@8$83 f1#e%BHZ- q#/@gW khb!(eXg8溫\.(v,~Tm(d\LUmo Re+ulgҢoYw7 I=0;ӊЉ20`scmUIvAU=BrxL@=2#'p}3JzA+3ZW,}퐤bygWUFsֺz}nRw0t3>LfD.w߂p\ZL1+R/ݖ85aз!DIC *b6X19F> غ^QYY \^S+zdo][,܀z2Ѵ)?,BP;n(1z>Z|VzMi5<#NCG 0 >@kp6ʛd|g@rXvI{mQ~\ p?^Fhm~n8"UޝzF{hڤ|) XyD־ 4bws=ȫN.NeOC/T_6t}6b_p?.H:1s9-I"OCZ~z7iY";ipPgWasz7miVZL(apGp3|z^SJi!l%B.UVv`| `d3~\\gzЂI.cF|QyuRBPORr}.ӆʕ`]vH$uJ7z yy[h!HU-v#סqЏBp9b8LshHmÂ?vBם8<ڄMp@q֔))N6/\=I}:XO2bq 7B856{͒O%p'SQdcUXQ\{.g*X3FPJ+\xq*>Pua{e$0Ai[AIo 4raA zƂ=۶D#C@`H]rfeEgj񜟺@ཱVMkn?-rH>*6zec)6x8#,y #֣Sx1T֍lfe ˳m> xS O>Ԗ㸏m>^,ۓx=*Aǵ>TDX+lܕ`p@pP9{6ZhxS>lۗ;S;!_ї?x}4)1F9oy^gP|"(U,`L0Ube;s{Sxm*xaT@zs=Ԯb|c.F0O=f%T`  } n 920LcE#vB /;ݤ}d=zLjQ=r88'q<Ԡu\ݣuЮ?ubrqXzsURS|İ lR}F@4kf9邼q\FnT8ǧT]K>k)P2J@N}Sl@'>(9铜qU3@HgsEEyT(AT_JcO98H3K@Ag$oX , gk[jm,RCl "I8'$aI21=F:{s$ӎ#:?nryV/$p7~^55T6rmGqIr$.޻}K;xXw hVLrq9.wܧM7{XKla*axyZKxc\9soöit[cu@89?K}n`pJeXdO5+4iBY yc,qm`$:U.ΰC&H b>w#dj6v ysʄ s9ǵi XdЁsn@nZt`\?1vVۻ25tc*0r( 9"`X}#ZSuda_G:|R$rEPHXǶ{W:~Р1m 99NmTä(eV  ,8-|~Sg'7E#bT6|]Wb _pqKo*c#)񃻂sU*|4,z"iq;Gߎ O9+mO=k!Z*"N>XƫJJt;L_QȊmlIUܡ 25q#JddjۉX \|ێzs]~HܹM y%:uRJ Źw*L<=?󤵹Mt.Q\eۍϯsy$. U' ޲ r|cvx< )%=ǂOq8~9Z/O:yV]+ (,@I?x:5e|4V5.e!bT(erw!u'*%3g b9:T[2e'8~Rz('*s&9l@wZlP:So~P."qTHcbB:UFlj QO*`S I`=MURrU‚SVeӨcޥ+/]?Úi,Ҩm-u\Az(ȑ 28*zQ^]NDXXyP Zx]0+ʢ|͐v` ?tS͔-/3ӵi.P/ Urh=F1yIRA(nǷnFZRs~##1sl6>\%kB*(/挦ݣ7js4/B^6xS`F\>%Lay~+:+v8|ͨ3/G^ȐLg_2y$/쭱hZRpJ'eUO#p(mZP^c)DzgVKCB(u_Hgf`ǏL]$Z| bNAm?7~~$9ܖӎ gj㞟?1TveHe[2<uq6 `֍q؏$~P=Lv;9)Ȍ|O2O\=}PP6 O=y©^r p;ϽZ7g*rXtZi nr$p7^׊s=r,nL2=Kl5DyAI=vZQM_Nq>@R*`Bm .߾ıB1%8c[K%hanfXƀ€7)rsӦ?½J>U寙_ v)sm"k @JƸiiFe78'ܚ$=X$1jr[3I8Ec [ޑLfU£rGgw'5{CՍ16 dz LES7XGHmeFrW%m*7أkZbh4ueVh97Psds8+& Ր(,\!xmp:gΤ F;Z;2eL*Lg@YY*9ۜ_&eʔ62囐0e$0qw"هJp9+ݐg9Qy8NpOƪ32*'ʸf@suPGyY*bP[^HQҮ}MX,$/0ˇ_-#yr*N?"rÑҕ2 eS窞40X  vp:aX$N7; ~s8$c e^6YH#hF{>@Kcwb*!AFyvJ?.H$Bg3`dN iȨ!=Ͻ%Kay-(uI#8wnjyyi!T784u#Hn` T1vVMPSuW.T'q琣 *G9[w `z>qڎЛ-OUns)PʥF7Fx0[?6F9ǦGSSAÂ7Cc*Ǔ$ǵ $W>K)}) q#+0enQɺX*>tx9hc#qHn0çB@^9/\T0|$W~MBY(Yxc>M'^䴎Pqެ"%eex8y H>? L6U!L%s = 1Lmga jLc6rI,s~J;bXO +cv-6TR.XOWUdf 7 F1z R75е6\0bf/ 8:T eco^mҙJ5q(LӷKDd1 F!W9i{۰lvr>YNNSUoBĈ$+?2n`EU{s 'lH$5̛ ц*  9h3wRNAv 85$vhg[%%XacdtRs۟j5E`!Xb sڭ?'~ 줟*TY8|~V)ohL;zpnZoпe&HUpswVdP d`큞q9"jn#e߹A64.k):NѸaO˽xu9Kwg`is`VCA't0"EAe>v>6SVr}z#wt/|uQڠsOFpH8prz Q B2Nz߷NE]p2HmpFpO^x\2SB^KEsPb۠A% r~V ڼTCح.T"+c3kTX$gN#[?tN3׃=qzX {8,39]ziu+zlq39: ([rn UQ5Q`q pHӽh۲ ?8?wp1y_3 }_u1fyK9~A>-vP(} QI>略ٯ?Ķ dB1g _98 +Bx e 1Utafs8$|П?A=n*9NbҹQ b#$'YrO<*鬵/.w G 78S r%O3]M.X-Y !!r;㷧z+՜qwZhgi[΀0Pa8 ~t6Vy`;+ڧO5[OȍoSꪙ T ۈ aXLAGD']ݽY+*sGl'=},PJ8#sNHcs9 r23ӑȪ 4sml6&]Cc#,; 䩥Θ#̼IXNǀp0My[#IueTuub1I=k[;-uu FѦ09[s1Py7|9%v|` 6JA\:s:w0[9*qzs&M: r0O*GQٳ׎G4g'~\?ľY"¦8d|HYČ0&yؤ`}GZKv4XE 1 @-Ž!t'H\gw֓~6CY( UObsq$+6Tw5 6$v?W*3ԒXaO8P~7N29ԜsCm.G݌8c#%Ü8$rpqN'\•8{v}Em) A g8z]ۀ,A9~Qս}3C`4^yOʹq>vjO5yٷ'rCHǽ&4@zé1L{j@Yi$`{tЉPFA{6kA1[ivhp079#1GbnIevr- m7 `A7?E_qIQ 09'^RKP>'Z[lbG~-1+s)zgvTv`sMWiI8?y|uN1I&` q#eXWnD@ I8FFpُܹ@Z-d+6q{qj\TnSRlye'gm6k7"V7t G;Tӌ~E:VFC8Gôr &It< `׷31G̲FBngTJP O ӓQ[WGHnJ BNƹܵ:`2K%g@ -.82xc )QjvAG!x$O4F2'Ꮱ,b8m' '" lpB^9뎤t }0 ӐG\~eRxv gyÊ.@$aFG@;bK>FMQ/.Ћw$$}}h] Cgv3Dls,>cx昊7̂_>\ u$Kr"ROX<[nr@ S&0RؖIqxy^O;YC[r Ǒ/f9- nr2yZ1rQZ=#A}sE]I}a$#=9+ xCC65Tn a G@ AֺC1USzVv[qeooBpFN9^1kw< Rb22rҊNRWZ, w-#~&(Fx@kͩ&aiw`KѶc;?5zM8 ܑ:'.稻#Ѭ-H@vz֗?1lw3+ɞ N~DowRz9w\hX<(v8Ҵa`ok.:(Gμd ztsq#}3-_05RGy>CBe@cވVQFG^ o>Ty_5R$mgGCD>o_OQzl$Y8׷i:d aUk١IF7kbj>U(\u;>=sc޼²j 攱<q#9zqz_'i^g Pl]yglT'ʠtn]=p >9p]jr15}{!pЧvTuqnc}-[Qm'}b{ǃ9~uO^$u8{4ʗr>?5')R qEsN>%Z7a@RvpǓ8 {V9*  s{}qW|:԰б9|9dt>g%/rr8:9bl:KH0#~Q׎Cy מdl8'8'V'@8r0j Vp:pN ^eY° x8{yn`ܟl=kza,T008'<'$ hSe{1n\DA".2p<Ām++rsǧH 7cA=OZg=ۤm$nG,3죡SV;m?5DD%Yfv9>#[X-F8E}P90r?zNt@5o9eJ5I B! z+xGm$g;:c\S~[>pNy= w#gd c{g-,18]n?jt_17"xT7|w5dmIvpsUeޫQdhP?SqGQ#VB 1I*20T|YJb"9a$z94B;E_#3"0W\;`bIyqVCm:W|eXn ^;…și4"mr7ua['@k qlÌHhcLi2*ÌzT4n1/vkwqw^lcG)"2ٜqy I#oVTI8Zؚ,Efr/J=}ꡔm 8Pev7l5!OF8:wpPgדӚᨭ#lC %.OXW>E ii;d.S3pN05bmY6G6NG_J˚ E\gx^3]m*A$dqwp2OQu})3A\p8U@9UG {vgz  9t8 R$8}:8֩k&0}{H;8Lj)/ݞ>ނd\'c{ǿI {s;c3t$|{?)vsS.\n<Ձ'b²Az҄9ELΤ$mG7#rF1z=b7~=U%ʖ;3ېOX眃i'+| '~)ۦ` =RdX"TQ:;`1YCax9{[߱0rss$Rӆ0HБUa{T&0x'8oF觨N>>; ~j/?Xx#=zz԰ urị[۹;7@k!pd8P{d.y5y1ӌ#$> 0rH zJկ㴁M@'F#'=+(Z\.s$iY.f1<L2T1rex[wLr5RV_3<)ᕿ:ۣ}431u^I2QAܸg^.UȕDG@b-vesxE 0ehª*rᔦN~psZ[EOR|Im@䃀[8 7N*%S>p7rK ܞj2KYUݝnPA󧲅]#JisvdoD!OLVD]۵W+FkDCwd. #y9=N洖X7Mk̪/M-A/Q҆.neog'ρ6(H*j]UrMzxTI[N珙pFӗe}! pcPQiH5Pň$ 8Ȯh|]SYY7^DZ]39 җ]ӗ3R0"X,)ܹ#HónpUR{U?½SZΘf&WJWǦU)>S's9[miV͆}-Sf%j*=^⦉-#"0&%.1׎٩C+Co-I YHqȮMԦDxܪ́L@3$!>Un`sF%2w#~\'oZRıurA8"C)ԒXC,@*FA;/} Tׯ[9m%˫*!y^-XOC۠ߣ3#7>c|Pwcn gOm@- *)Ga>(m#H+zsБHd-qtwm1NL*;"$oZYٷ^2?6GF RP+A~c%¤w&ѹtϽiCvV@"GW`~RTp}I֢PH鴽N=5;{뻝 ?g*$yzW9{\_\I56nܔ=Q>]Öo-u!$*FyYUPT2W8̄(͌lwuZZU~-`b魦B q`$$laBNx1PԵ2hP1F1`rTdヌڕoK&WHS 3D3M3~B: fj_2{-w/aK0J.p7g ǜ @+!`R e@C(F#9T]Nj`, 0 LfѼ6%_qJH H8Py Ips&b>U#'sM +(L*H!K=ڣiV >c*NQzD6O8+Iɧ*N<sj=@q1J }@@1l`nr>asp)~VSBt#;q 0X9+du9,O8cXesӥ-Ri_gNv~z_*BS XGXSrB 8gOnVeʠÐr6lEn #,@zUn;T r7}$g$rw…\wԩ.LtS ֈ3N32āJ:cgI8l{ ~|V, w6Am6F2PD6P:ݎ on)c$-Gn1<5=j74511*xdla[KU(TbbIc z\։vF^RN sx句gG7 aaz /C5. %,7@s{.4*u}IQ/< ^ JFp9'.r*;:s݀'>Xso*yc,нؤvIq26`Ad!N(@ǵbv jbm['OZ@d:Rn'8uTq(\o$rI O8Z$G:cF)=O~\6Vbq珯D"Zރ&=xNs*!V' ;UAM,c0ITR0qד{YLB6oΩȵ*9?hSB2߆ pE]^0¶O )*rp^#f2FXZ2V"74bCm<c4[eEVw9Xa\+G+њ--018?u*Fc6b2JLdޛXR~jpʞG r󑓻ZFZ7~Es`>R0A(bt}Bw%T`7mq=;չݜEqDDihV9+to@ۓیߊзM$ն;JEbF%Fsuȕt;C:L?ή#_?92Oޜ T nX[o3sc>Qaq.=CmPD sUvDFfNݲɏB?nG,j)r[N+_2BwaTb@9jmCG"$$2pжP?qײ32UdbG$eQSБPG;1Gi>}DA؎6w[kk3+q8ZRb26O_:w0pBuD[+nPbܰ$`A#Nٛ>j!P %VnL;(I#AbUq=OJIF29upzSrs^ `.N3:`by{ֽ|3Uc 9ܥ= ʌpr=3@D]*L)#=90@z |ZI9ǯ4^rW5ar &Ur#ZswB+H4g3Oq޴G J^-ȑqGa;°;waX]Bя9o)b$q8$dsKqmlA>Tl?~cڰeYHMɜhwl<{r×߹#̐V;XdO. _n0HtPݿB WtZts$@'89$I1[(?J7pׇ1f}B _HG ?7N{\*^xn3:u}9"Dv3:S=F++9un?cabڨ0 w9[) F;Q7!H^tVLPO2 6Y Jtݥ 8!TnsΛ1p:lMF<#<=89,&b,1,בӊ)I{iOu~f2K#`xd Uy<0F;Pݏڿ5i4}ddMC1#8QǵQ:,,vCbY#8QYؿ*1pQ0Wン=*}a؉4P*EI ߏj4a T @~9kqL*Il 9}?3X U'^et&rm"nszgA F:L KXb/b:U&w‚~u7Te]-@;dt?(o8vF!D-8$}8UjG2T㟦iE;y>t@a\q[x_LڦZoÕs9ksq NiqoUf-wsJ~R:8 o=(87P>n SYNzs;s֟q\ @T6azoN]|Q8G=sސ6,H4DWw?/?-IMo WN~`FOq:Ls1u5jV1x$.vX9vҶM"):)QaԐ1>n nr2q޾n&|0rNrҳAw8 t}ZFU#tbj\2a JǞǜW'ױC˾HaynNFpq#׭`HI 95ڜRN7&N3Vo0FSVJȣ9u p68:wb"ծr΄8%$(PKR8l;G8;dk5qJ1khdv>s1XsZm+C!hd~焎#^T׽R3ZSLDI"|ت8_±.%O)A8  z+To3;& ڮ>v,oqz4Ws3%;$NFG=%2<=x,&2b\n*l$ABmvMMى -rBNWh$:4th`ss1MIܞTb]X6*);nU 8N:kEB/E1q?i'̺7(dmjqXXς`ć8* abB1UK]l/7 ~Rc`䪞qcC>fmgNGW  $߽PI G̤jyA*as~H2;RrI%J6ܤ1bX.ߔP33Yp]`pp8ȧ)qGdnsAyʮ+yەG{`ӥ&X`J:N ޕ8RLrʁy$})XC-GFy*<2i 9ehۂff8~7導rcJ-_m.q {v0} 1B.X Ɇ\nonV*A%8$$crp+7S]:*me.QWg@'pO TJR$l /,P UnFNEjC*x!l$;C崷.8[?.!w+xcbDb Wb܃I֔2HQq}3IHؤK:HY/#.{.g>Ub_@wr%~MNq"dRN=j>$j$ՙVn-  S>CWw FQJ`Ҍ eϘɆ$'9sl77JB$]SpP ϡƱ)R}QnP0U&bzâWx:M/GsHPzQxkRTvXDu1qy9  aJvw{SNj~ xz1tmDT|`LS lS_Kz/S_N7m_oZJu܊ #ptX+G'S~§;JW;i)~UK%. #`赌aB2 ۴"ʸMNt Itm\F:15cM2 @99'YbG!#VFA?buwdq:t8XT$䞣1B!ps8@2d#O 펜9|:ŰHק>4;$tFw51Gu#E@S׶zq2y9HI펇88Z;HAH#z̆Iq(8'8ǩJ[%z(aІCp[w@*# #k 鷮i%=tu'8p8A<.YT̓3o:Z0QIF_8qX׹ӴxSJ)pEyH6R1f@ H W(VH Vwwz=SĒy,n\ ߱$0 l'^Rw==;+7X9'=~Z]ҝ9KpxPNqjuuY<92|zǜv]zP(pzztQ`ms@9Gu'{\[CB>\#z{bB3Eo6?ʜl>O!pP>x#Q3Oϴ3pǂxDi$W-(QCzgy@7 k( / sێkϬuB.~v>o)f'e۴Ǟn$?hNyڡT$?JGenHX(}?65;?0 Nz{U"ƳO p1Ǿ) 8 LuMs\gFЏ?ےw#*X 8UД(bv <1:b,ca%Gfe9w+*r)3e6HUBt]u@䊌eڳ;3\|P;"/Fdd*A5IGr =) {Pn>ܥ8+W6IfٱW V۱`Ŷ @2k?\r؏`KC6@EFF0H9Sv $=yf6$ w841=2F8F[6$#2~R<'?AVBTI#zMAX J`3:1֣q1`~SO KF1`b>)7PT7}Ңp?uaz۞b"n*!<$:H#ֶ-1*7`e84 ԓQ/%6I)K NFzW- i$  ľqzHI$οGȿӈ<NWC־>ȐbNv$yݜdTݓ{3ϭ]+e Z{\G"FM-6=W2i[YYc$x.n nOy$_$X `F=pe9/asp^Ujדk E(ZjŬ&C/v@:mX;lDoڀ㌌vXf9nv=+J=&IP(n bƾ4XUL=kKs:ܾgQO(#@?4f_09 $#8j5իdvt`Ʊ)B{:˺'8$syºIB L/VqwE p=k|d'c<~U"zE2ceNG遲2x3~SH#Ӟ{gҫYcM#3z."<79cb3?8ZeABFH(enUҴ8G(\J0ܣ'ק޶,輛7*]T6xc3F%A?({l pz*h盲 ; ODH&Co.vcjJt.*͒@#92@(꫎?ɣy7bhEw݊&"T f2P*sNҰ|3I/<9RIT>"0幛"vǻ<ƍT~5Cv r cSQRIi4+^Gzޢ\]%UH\dW=!t2M%yp=q\u'wcp8rI0,F:9BrsmG55RJeF8䎙>&_$rT zU51HʪۋW#=G<͙f9vC,zG[鎧 |?0MA"~\v9g\~DnQ]oʎA 9=Fk>ilp^ f"-[Ȥ\# `ǒ{`۾}r*z=jb%Fn2LbbI#uj.>O\sZ2њ r:0`1ʗtKۉw$+e CpqҶ8Ж{\̭62[8 F8Oap\uj)?RTsVq^$|(OB_R;9Um!vI (9 sy'Ӟ М`c${N}qX>b&rą Al DZـp8 ◌r gFFarv;R㢁LPNIa (I OnAjhLa+l^\88Fޘ玆yg$6`= BXmS(T;O8+`}:IBH9-lq]Vd$dAbLŽq@A=xvV9R(gtiܶD,pGZɾxfƓI-y^f1҆"/+)NrIx;-V$AY=iޅKIݎT0foPV` j.Ԗ?N s2e5(nV8 s$D<ۑ\,00bN@p:U5Ԙ&{HZɌ`rp8+$f$|7+SsXȤUmBJ~f]ÞUv܍^ya1lnwXԋ6|ї|#@y֬Q.c( ą]ǘF,A %\ϵfNRJ #Rs w}BNa| =NMsTWӝck&$UHy*qQxmYJ&Ims__ZURO^q{UI xb,$ON~A= &T^ާ9qTrݺsՎnCN   FU".ݑDbIp\q+3; 2I$=B&>dqrJѧ1|`a!ʃ#ef)+!l0$)3=Aֽ6]N߻n#h|g[5set&1s$lg.\Ed}{7>idRSh2@[''޾CB8&x1NRRDg H'tZy`9c_n7ӷĤN; r^7ۑO8Kq?5}\`c=)sy^N=)x^qۯ R+_aRwЎFq۵Ugt=0G=+>aCΣ=;@瓜~t#u^th6I$'bG^ϧZ}Q=VgӮ>"Dz1dycAC3b3:S rOӷ^_gvq%f V<`1l;2Q;^D-bBwC98sВ2 6 VC._kZvq4#8komsu&1Ȳ<\7.qH?Vݞs^ [ J S=jե_\Q$lL)'bݎN@=A~B@C)9]H]w6Nb*89# gۿJzKFM7x8ǭg%45ގPv>+;J9qUI>oAU8OBtx-ḋurJN3Nx.M!Ӑ=j?k^n%IO,v99ڼoUdH$E, ,w:^LLpѽ U.0r`TjFnn@ }x(:ZYPG'$r9xp˵r}y]x{K𮥥OW Wٲ3G {5_5Ԗ"8` pDb8pi7427C0wÎy#:UmR'hW=z85_3T$%8;AqWoڭo X'yx;V|+c] C&*Td22*  W~<,KOzqu2Ua!|rq8KMK;@C`tFW_@8gnP94XGT ݱ{Td1y;).xM$S pG$ }M@99-NBsdcAJ-!qҔ&oc%ؾ +w936豐W0Ñ>BV:5[g+,yڻm`fbHt KXǝw+)>t{_yrbF(I~N^Dܬ B\_55EK(#aqX>0dJmC7@muE-`淥9q ֔ւPH(#\{RwTm#Pcp+cد2vdíePl,^j8W]Z_{?GhT1$8R2{`1¿39G>.MW!^;H8tyq{t=OLҋ1Оyx<ZhmQhS?8v$zw10I]')Tޡ%s>ѲHW{*F}j #cyΠ9a޵58ljTҊ*+KZs S(FOoB+6w+`8a>h&vG)yb#%W8'ҹbP3.:@ySr:JFq㧷Hv& uT>=NIxGZKQYc91j`;vC*$͖sӯRsں{3nywV9Ĉ%y%ObvH"l1ɹA?xqBoBZX3Fduǥ:9 t᷂F}i;۠$S1 Bw $ZFSD @՝B`AW~sE#zmq0 =+A!C 8# ? [ 0QFOf4.0U# ύǿrz|,K 9$mnsұ戒 ppv߯+ZoOH~A, SsqʱpWZ6bn}em\Yۼk0YH01wlG= PH\Ǡ fBȻ gw=j[ jK`ܱ@U^3Xe >P^2׃jib%2C;~y?w<瞵 ːu=8W\ALp885Q²$|r$<.73Aj*,_݆a*p} (R-#v~^d96Y'h&SZ~֝kY$.K+4VIv*: :t(Gl^e.q9.H)HAtXIL 'q :R\ȴ=m$UO##9湻%@*XaH_N+eN ]`d8aC F0rs׊ w4|Sn.UϾ3k -Վubۓ _gFDgH -$hˑunr0r#|Y=H;j@ЀB2wדLR#bp .7qV9,6tE'̙ 8zhX " t Sl69|+2zڞ0A*v57 #"JQ|SEqyĐ>qCCȏwB !.܁ ˴+/ Fr؛lsu8F*>_ *Keܸ6[fFÎH$mr1js] L$LX}֏x#hc7[=M#mXB;n@.@]m$2G>#QBrT 9>NMEsnPhkv2ʗ 0jjV͹26߼ c9{q2OOȋ+@ZN6 br9^}Z3 %V`ѓ LI2rnd=ߘCwG*rU>략.Ndi!Wra]]e9X;U6*(%qfȸUǘё$‚GVi40,!ݪy`&H$΢ܫn޾tlɳ׎zVSˆ 0<:Lz{Vv륻ʚ}šxЮn>`K`m҂?^1T.d,d;'pϮ9cZӞS?R>^~E a`]m#.r{f?Z^V5.aL)dVkD#b;qD& Ċ-\g=O>MEg@b#c+Krob'}]$>\=s¨ns@:}kV75Pzw18.$ʰa|yǧZ{HЕ _n* ݿ>՝%HRacӓ;hAPd' 0߅FbVH@`ݳ}kFbm!W$,|y8銮mL[ cQ܃$m<8gv8 $<=;}*Z :\^OEO|S6R.p۩=ơ3~l㯮yc5{hN̦@9,21cHlvlRkgB,H8ۀ22IuNn:+=~`A/A=MUx{qwzt&,q9ϭ9-i,Aa7Իg7;'U1w׏PAMlR*{x v;85IZtE7xnUNPJmñ_8֛8GI9tbJ3\^y=;qҮ.&!Rڪy9 :t̽ ʺ#в7(4gd8m2XlX\*9_2zۭ1nvVե'gIdOޕx uNnp8#5.(@G'y#˗NB `Nx[S4sO&0LaqǸ{~9t$6ܺ Rh㢒v<63G7ў%R9~u^k ubFyWKNVףRa%T3kA-ϙQ N@ce(r 1RCdgzSF~g]F|8X,0@GߕG䎵 YU1FPv(Hf' ۆрF?ZbSyyUaF}R+ xx#0v~YB.?Z9DZG# (ܻܜZjE U.p6p2Zt"VOZdIܠ}T]%!= 27g Wm^,J@ b㊔-#Ԣx$}V\Y^R"LeU,T6XdԃJrH#WdGptI nO^Z&8%J(8Z]w/B$pqmVIљSj`|d9rr8L}hxXrzTJv_&R,jsǐPf_iUհ%{}4OS69>?=a_~ߘ&HcAA nF+9b騻JJ[56^X}ّ7 0PKeOj̛2IL8WJ* %nt:k&VGKlaE. gZ1f ?ՠ9 3כ(T;P3I݁ A|c (?Zљ"$n,T*X@*b1n#u8J,d2~N3cڵc;p)l|_'qWfEEtľc(w&1CۡX.vInHd\pՙZd:]RR vFD4q޺]rHC[Ѐ{ _G.U~`Ԥ6ψLC 2z53SA8꿑^>G,rbI~$'1`c O84 I-A*  r:Թŭ:#EmsV@ Y ]9 rsk%Č"YZ832S;WUM8Hكŋp$U9Ɯ.ȕU0{ 3ޝzN I[88 rîqRdB?G팎U "aANON: Pcf 9޼A=E/' 8\awD,xUț E %I ۮ1JVU–U^G]:tSqʪc$1$cYMIrB;`dQpmۼ[7mflBA rN6fni7_v9~M{rPUm݁x~}D~rA\eL+~f=*B-q~};Eg#p$+?6O9$wK9 䌎xR{6)2x0$:zjo#;S)BU9=y┟kvoό8lF2G_Θ |0؁{K` A4?"͌)\!|BJ6;'Ғdƛl^\*㌦~\`/ܱ̗`vBxF w*lk\[4jA9T3zc8޿ դ.p#S$rqR?H9\B9t$d;vˌ!ˁ.H; 99LBF0'_#Kr[Rr{%mve cl?Pj &Y>yr19rM)Ax֯V I o-2H&2BsX-4 9V=pi'oF߻!kpx#rA3Qλf=L}%m`8l2S8@2sޠK>#PH\u=sYJfѤQ7X9 2}?UWFl$q ے+H$#a10x-ґw3rI `ӰL+$`@i@Q$ͨ6nmŷ zx[§88&ܔ ǠrN|{tK[1/1859;w%)pQ(l8Gكl`FAҢ[Ÿ r3y gȣmJ-ܤ?62Iym_|)0dϔc힕$Q>nIq -j1gS7TiuNF:I\ ,}Fr>5n63lYQyrsNĶf4.8q`NNg=cf!Hÿ88\N:~` ֯,EFJcv7`sZbLjBG>G8Ӝic–_5DVH2GSӚdQ[MypD1Ag,`М,?,/q6r\xBr>k׷LENX;nϦѼ=y4,#"ch?w%xJG`_Η[#̈́eRw}OP᧐Dwq8Pr'NA֡R|UÖ; =$8^J~28 zVD$ 'o{RR~Me1O ^c<lqӷHl,6n;$f;G\; 8,$rzzQsEN/T{EnP.$HWm0E㑁9^D>gWsWMҦa,er~f<׫ B81 {+ׄ9bZҷDP9䟽Ojn8n5C KKo;=>篧Jbx_ҾrW}^*^J|QF9^#&U$8|$sѲANWKmYJc. F~aSyUm IrOP3jNwG IsӦkUO[t 0:}jE3}kx(e$ Ivp#iA|U3uc%rs3|3vQ6Tճ׎qךQ[tkib`3/m,,dĄdBs#g=r~G\K+Ek1"0OǡJbRbp[ӁO326cJ; R (Fp)w `r:84"7d8$''r2?Ƒ0!ʨټ18?3hOE I2~Z5 #6ddT:) a=j3-v6¿(*r#=}MOqꮈc[BQ 8{s]o4q;et/l@$5`NdLL)Mіm5<p<׳*(P9oS[Ww>u]N7 r>VUVie6T0)Cl=뛩_e/hn 'kpm*/Zۡ}z"䶒M#sXͷ>B]U4O9FVnf,9 ᮦk4|ie21PjpR}V^YB'-eKJA qex9n, b%\ѲWo;G*ӼzjwQliT*H!gYۂu2+n[ysu(r:<~NP2]YܭEܗ"W5Z[bޗm-^g2rےbA|0$+* jݭm6HwݫT8a.c^($;;d`G y19azuI8;3F>pH9鞠jD3\yN'#to'=2FR x(Olt=:1RprN7ddq昺=zd`3휑A߃H?AHa_<|؃#!xz|qL]F+YgUcUYfTt)]]u*\fi~HNZE2м9VpU#7y?tm@+ %*sՎ|ul* FB#>VoMc;Tsv=]$W 64YC%H.h!kg o'$,F9Vw}߶sUQ d܀mOf]mXB>R&Yw{ gqV%C&y,G6n ['9zI+5N7 pH/52zqZM|&nN{5-BK[0N6t3^e=c$ ,"<&Fy[~k[)I0#<:t_pN֍xc94xkKJ=G#?oHt ӧ;6RLx1l8Ox'Ԗ{,c<|}s4H݇zԩ?N3)3@O^~(ӠKv8ǧLL=0@#ʛNqמӀϨ߭*c z ;j,XCN^3db8ʭL `G愮f4mK,1~s1Hg=Py03潼6#ͯ+Ԋryf228=~"@pzǿ]B+'>Îm{g;~u",y{ 猞Z{=Hs>V<98{z*H0,p1we);}Uo lk$2>ḏ7RR !?t7}0f}!7}C$S<)U'9<hhI$e%āpIR;Q^j0RgH'5yU[32B^ΆYyg?-ܓ4 䌕b\ϱVHW;/I>n;u~"Weq(2pF`II4!吖*8\`c>9' l,DRqJ}*=6B`By#k8nkwޚ]z(QڇeBmxd5S?T3K?ʻfqlir7ddkU1|o `Ղ`nS lEoiic (܃(`y>ssӭuӿ.w74x.p󌽪>Pdc#'sp">Znev]1 g(Ltɀ߅eV; w|`zUM_3ﬣG;w|PkDL={׈?jeeYNmo,]DfɎF; 8dEl% L[)9y泎ih{FJM$+kKP>F2GE78vnBx AZiзmitdK(* xd:\mcբ{P$? #[Au9+K^R-[ҵ{F5uym呙S}Zt8.f8g؄IU>6E3𮎏9mmyJ $HϴrpOLuNɨ@GdPFd w7~+B88"G F@±\?Zݷ9ԽWA$d#cc8#s uuC$;9 oW<֝BUg+lZ܎! ac' K8[f7uĬ3m9>Y&$z8gnW.}g;zWw+,D% 9&%dJJv> n+ eA9TN?8'*䌞>845b6 A QO0?Zta7,9<OO^++_' p#;u9_^s.N B\px=0r>U 7I\ڐM)[("S۞qګHHr2<+9Ü3UA"&øy1)5t -mEo9Db*.s(V.GD>Qˉ@Trk|2Ga Q37,F}+1=wd`c\ >~pz'g˴|;H #sR֦_ȂH} wQT;P9!=3.SHa J,d6Tdvrۡkjq $)w{8uG1`UCaћ+;qVY"8Qxx+:sw7Rئ grj}98 #aqƼ1D,Aw]IJQ|Hu"۔l1nR1 }:c)p_U(ܨ61i[Er$'ZovLf%%{_Q6f2Fڸ8=F3C3`0Va@$ Eurg8VA%:N( (GbBG+) |\s 6RI_7v*HFy=sڧ@\'Ry_*  {(qܜ9zW<쫜 #eCXp1ڥ[Rvf5vxqy|7s^MJ1;r2988'VKFsET}[ǩXAI88i.TnI?(98\c<9J4,6:7<]ϽTU(\m+w~//~2ǃ=x"6lg@ q^HN0GqS%2?sF@PW ӌq.o>@'F@韥\G 4_UIs׃dB1@yZvk3O  Az\`K|Xc J3iʮ(YJd$;g=kTpĎN^SУ+ąB 3վ>0T\xT6l3H,y_jʖ>r:sǧ޳n^$c3ع8 ]$ \ƭ;La=5~E[4yw $y{מ]ZI c<{֐zҞfr ?37;G?Jk?+xssMfSOCgJp}A` P'<9΃wq:#+K@r 3cJ_B)>hgS7# q_&ܮ7o9铂}}q֞ر6cq^%RQJW{L+|>h m]s=}kT 亱 H%pA;֒gb9R ͓!v%UI# i$ Ie`HO\\W~TAeEۆb۷ ($<[2jl*J'yJߊ& 8YSݏڪsr@eUqמIztlM+тﴢ*bVl?̬K.:c&zy5YCdA. y *3~ iA #e6*ѭF L2%!A#[O(1Y: J&(}eβḐr2ƻu Ѭ2KG1+w=+ԈQ2*mHeq [j+bٍl0v n(R= su re 7L <bi1Sz RIqk4-!$UX # 0^ XDPCz6ScV31̐QHȪj~b]IJč!d(suth[Ma$.$0_$q[7Dt_2yk[BVr=kQk6ܒ#㷘zZە&U ra^r|-'-}lMkY)Xq@;UBԂc8}++]i&g$B#pO~8f< !9A cqחpآs}3tLqGp@8?#յ:cN>9g;?%NCve\u@͖G֔  >k^]7%cSQߌ?csH:ZǕnZr>c9f}jFSGILcaBHOwu=O_JO:stN*jˈD#kr~V$R@$N+hhk [b0lr@ANqZhm_q^n=I4IN~ @5!HіxDCOZbJ O 38WB @O{e'|n K|шsB-Q 8۷zkHBe'tf9ǯ8T}ɔQ, [iUWRۊUxX-/T~Lav;wt pelr5r5Y>~l#$~AG+w9)d6x8Uuq]|$rDp߼2>}:BfGPܪ#}ڧ&޻ ~ ̂df}%$Ϲr*7<7Jp$wvW_̷-FJI%~=S(D.p%AwT:;s/jߕLZv39a<~}SO#iѓ,deyGS*Wi<%\:ȥv.$6qsZ ]IYh!9qY g{2C#ZhcF>PĀ>a@Atn7(#_A`ds}-ЎzR2@9prJ'_$w>*2_q,dp½G=Up\94.OBt~R4rsNvzF98$cZF@0:tw?[XPsY# /$cNqѯ:p7sw$V6sӶW>߇j[ ,$$ Ǹ>6-1MmB<1KlnGS3Ȩ-ء[#@{ae\yax ~ws<~w }<^ѥ?+Z9oJ}y'*Xxy xQwsӄ[jRc'f T=? *~ 3ߏokmkF{P>׌*&(ۓM|y7 DbQcҨT ]A-t)e !r2+ {6ֹ0fF#6J 1wಜO's9ⲉje@w(|.HA U?12rŸyLObr3J{|fPfYw:LY[wQN6;XNF9-쥰p1d}rE\ON ۆ# {kNvhqYFA0m\ (;r>$Ξ^TxR{רAl%]W,S'qV;4p{ HHϵI5ZˆC$q0Ƿ#ޗ>:sl+q Kn,wml*ztBQ,ec pUIj)|˅@Ϋh-z2:5 ;siK6rf)9:t=hu8(R$T`gJ$V%RAӂE.cXŇUU̥I >NIva7f.[i6**' wTi/܈mFOrJ=_DݟgB0nO zzP͕1ʅc^'NdYqÂMy>PH99hU0YAXR``:Py?3 p{Or%mw$y`m "MEJؓ咡^G#=(.& W~EU7A*1Y2:e!L/1',Ŋl %z 7 rjW,@zء=Bq.0hB̼$>=*q"PN +6?QIB.pH^NKdzpӭL~Qq;.WͻP=1U}WY:9<$jSeHӚQ0$#al *8Ϡk(lpGqȄ±˂APj/0Q"@V*N+סU?7 ` qƝA%ǐ(0\\ uGQnI[=yi[9`1)jHY*pUx ÃǯzPG8 QnNy 89Uc ={w>Бf8feb$pBsǧz|q# 8eqZ2azc׃Q wG RBnbJyVPNr0O ޑ 0܃wd =;~9;3Xo­[ =0r?l~HBdPGNx8Ym|gg1A @oo6*5>nq5~,;7yֳmk .,HgvV2-RruJ&의n'3NsjKq@ߌ+*;)c͌g?:N?/OOZn!I <8KjvDGs\8U ;xڪA?0ٜsӚt{vo+ {sJL)ZI`~pXs܎3ڵDPĿ#Hp Iʤ21+M-jzX) suێ>m*Xu/rHVZ3GTlyw>8PCZ1<㏗o\2gH7»q{!H7WfTNy$@'Ab&D*%a9"(>n t?/J,wRÃvnxs[V*8> rsR;2MGb{N30Vq3S}qOzS ~y7NUER0w~^(ӹ&ht""#nc.9$cʻ@2_wr9!sqֽz6(O'~d4۹a2zTNqIםީpAF~5o_d{u=Sg1!,CU{g_ VOUM$_OjkH8n6v޾ǝg#y ЁH9x cUSƏ~OSv'<z$̡wv@:s6O:r2c߮Ϲe/]\<;v#GqR8BARA~3WӊQ\|@m`}}q_3x;d*ClcI W2t-$yY}#}B))PvV'x0@|r80}OZVg%Jgps\wlV"} 7RFV89j4ጦWl[:`Vr` ;tI~'#_=vp+N#dnUc+jđ UFKjW}[on\6wyRo7*pxϯ3]t>W&%d;S 瞽Mxt9͒C|ޤgӜיU{p$DyAbo;5.rqI=5{-ȴBNwp ʦO'Ab8*07힝*̙Hv8T1Fv\np0>H4)lcpqryG8P8Yr0rp}G#"Kv8]mȏmpO'#3XH}w78?C>r(Fs~s܎yʲlW|1s@ۨ5,u؛7a$q@gAsy?1}+H)nK1a.܉Nǩ {j7pxӠoe$pȫ󖏶N3ֶy_U_U P1z>Ru[lvvCg9S9~F>cֶ0lr0O=#Z|le\qr:N84靹 vv` d$sA8{T8>88gӎ~c/@N g8ghrA\ҏ^gy\z$2s~ҕ#~a9n3J#P{',;u`"19wsji:}m%$$.;n#2Fuw4Ayqy-ԯ1s#4yk8' 9xik!bG移qUC*0Gca#{ QhniM\l1WcW۵D(q*کD7c<p2zkr$''t:fW d9eU^7:i;hk [8 sWc`w}zGR'lԑ׊͹ 2** SeBE!$"AGfV%5rXv@rp{戽"vMm]c{i Nb1eO\NWKc(ddH@r)NY`uiꚟ&h6FYVtC^uM}UEXEAO/\(;M}o ;I i#W|UVqg~Ó  ` t}y@_Q.CpzПpjfFxmqy=S`5} B>\)Өp9Ȱq8#ӽ XI>л)OȎG_ḑy8O# #)v-sF2}O=銤`ޟV}N3Uk݆{L./mq9^\rv2;T#=CHiCz'9l~5*Izҧ"AYVfj(OX!fw?J\ /^ZRwo:qU#i6uAY96ss&V,T#]bLpDc ;nS&{\.(!t)["nbJES\SOlN*+PK JٛprOOBm9I򲱽1;zW7rT8.yeeb+ 7[wq{dw\#F}hH/ĵr{lJ;FIq*9S*Dq 7*$Lzg[p@;I.:ck ƚ~]QTsӜ B scZ嶣n#w `r0: ^ʶIRs@??Ν!܈F17`17O( sa>}m.5Dǩ'n7u늀)þTE`FܓϾ)VAI .p1סRhi'X 㜍x'v?j1Hp$ wP9ބ1ػμ`z{.[ceUw`8-lkR$;>v Uk *,m%J>iB!HF :#k4$&z1=;cht2F3T]E-V`%{dvz*]1VӉ8@ۗ}qUt ˵u6޻}{1nB;.Bg󁊾5;FO28NJ_cq;1*nG=.T6nH$|zzSOhN#Dݗy$\\3WrqoH;22 O%)=nRcXȤ.H, '1zjōr  q+cLZnt)*Y ۰3'ݤ$mc8@f'zT3Z,aFڢ84r&n)(wuCLF^F6սS΋,YA!Ld9?%)l,~F9~9`Qǧ9ib_lR7.1P?/Rew^$'8!h.~F Ǹx)K,gi*Ks액saOE!ԁN>[m%Aݎ*Zh`p.I cNJ}>g!U ̑d=Ah9`vu㌪yߓ\kr kA"[)w"q ZLԆ;J!~`;c5;(<m@^Xnry>3Q1# 9:W7`ߥI!X e@s\ MX-WQ]~<)U\OPmawvSq{qMW-_Nk.Y+u CZtP$6J,%x=ֿ]<#=7z-m,DI,@cqE(r5\O|]Qy^!J-3w Q1n 8ַDxahznOwѰFo@y_!d 4o ~}q ?aL,q* rx֥*vz$sӽ#xq} sV.l=QiyF={S"yۏ{[^W~Fd\!PIlw滩7drTWKTfl ^ms !-u-{עtКޡp3H5ilǻ?w(T##\;V|8 3ʹ$=80y` XY9H<JŭQL$x #xANMrqv?8 :HLlD9³_~dMH)rC.[zTF%,YWAcuI;\A\]{`b<@O/5XfA``Yv!@ *dnt=R ޹:) Hn 98H-mTD 9{sDCBهs)i4Eq;08_zqo8 jT52#r~]1S$<?N}*%%rɚ !ls>Mx Gϒ +Vxė|`sֲAea$|fRʲ܀?z[wo7k#89WMIX#>N֩n$==6IOC`X<qWk4ETգz_raR j8#8r D`7q ZÛv&7ׂ{}t\0ž=jψu=6[Ь.4{xw I/.GI2R;nz\3jK9b-J/ٷSŻ}DzP~ ;q3ҽoMӒɗCoޒP2}Gb_ ^ꆷv‡'vr8b!*Q@F:cr gJɗ {v7kqq8SP;q{V6Rf-6ݙo4o'3 8\ 7fRA qds]17Wf|€qPZBdJ1^{+W_ z|8 mTGvxY6GTzpSX-؊E.rhgqPrf\1eA e407 N;Z|ce(;H2SZ>Qc4D+yC YFH*ާrlA?.AB$N:}Owޟ0.x\{NU]Q0Eg& ٴxUFNr_zWvS­ 9`Y>r~O/1R[ q*K_֪Nw3'8=7F>|ƨ:?xC'T#FC (|+ą${Sxd^yUڥL~pIF[۬C<6ʜRI)]_1{yxyWfYag=W%Ad/ JWҧ̓BIōř1I9'YM?'$k̜.uŸ:klonrv# }sW\e^8?zNKT=+ɴE0S!AsOaޝ9i^ʹ%7)6 9$:b{g=3J5Tݶ%hU yl2Նv}hoЖWH<#-;P%n8;q6:jQ܆XW v sʕ\qzP ۞}6vFmԃOIsy`;U ; :89XH]ф8eIᢲvr=q'RR]A_1qRs95O.vlsk8F%e$X8Y۽qTNOyt7X-S@۲Xeƨg, @xcp{cXT㺱+]b'i%1>V6{Nބ}?"W+۸zd Շ5cmd ƛlk iTp38=3KX@9;>[;aUIn5 cn$b?V܀sw56_2)}~0cy '4hOE8x>ކ8sSLY8Gy+n:Rͦn@CrHT8!o4S5;vGLW-rvs ~*a+U&6x:o*-,y}JlA~IOCU7T|zUz"* Ng$RLcs߭k7ԮB#o@ nGPc(9$CU*<`N9>79W=9;2Hgb d@'Y܉QMZې6vp8vC=iSO } `Gk U BW9I1ccjioC§2ɒQGRFϟitԿPX1TL`:$]V%3 @ UB9LɩX֝2 #VcqNM&f&, Sx#REZKR~$ؐHs(Un:E{ 9;5 H9 `c?O= a̠"~m?_+n+p͓@9n2zolV:mcRi/{ў#U¹ DY'0 I=IEnsF.m_xDy<ƒj]GX!},'FޯS ̥&4-N]=6H8Mg\^#w?\>\ dXב.--IJ%@8>qמ9 rkkY[R؟C =yzRy$/҅c[':w[)'NGZdGR n?AV' r}9'8<҃opeGflsGE>lvǃ\3cBO?t95q g,PRT`x"yNvLKp[oYM܊ Z<(e=댃tRHLB"o g΢L֜mS(0g+d ۰U{ w81ۅgp?rۿmc._K(# 7<sZ%nʞ6|=dc+& 89>c{lPf gzښ-ȸ@ ~POUI^=Y$–#`0Jr>l<8烚[f2p KsV!L;~קjqr> O/(O2r8Ͽ+3zjs 9c p:SeTc pp:eC?t¥gO]: p#9ǨEz.5pf?%3F݀t)֛g(huV Ɨ=ܦHnt#h?lpHwRۺŸiݠR~E'.IR}aw1gIv9皔] |@ާqQU t퓠n9=3tv-/Oz{zP&ĩ|PS Ls֬[)C'y`Q*f︺˷kony1lXbDzk*g-tFzoӶ\}E5d\0H<rH~9yDusʼpJjA=}9v](tv$(dwH^zI*F=gʼp8 pyI\&\ݻ1=X99*0UKmlp<ёXҢ*@®>7t5279s);. gF1"#yvARC*E@>f)qgu'4⊧ -8ԎM&U0Tg 2HRsgQƌ~RaL$ĐV;0 V?1O͕#6*2ʬ`R'<8~eu;#=)su&p~mx FF@=R޿6B pK g;j\J3vN쌎^6Sz΀# >q.s\;I9$1}TƑԮf=K$9#z׊Wp2{p`s!Xʩ!_X\ڧ{Yahk0rwZwa%hk>؝pgdoOv˱v~`@ ^EJ׹jwi/#Ҵ]&F_4bFO>ս^Q-R5(v%0221ڸےzъZvs)-@Y#?܍<:䃆>թM3o^?֟?;iI,X(` `歖8ʯݎ>\,9rp9FxYlAO\KL-#l6 W:n ws!k>H?^7!G9ox5ۅqv;T?wcuyB]ȗ7!1v#5NXdnGּ2σ}fwJG^6"t#\9CqBMU"5ߜ}sn"tk$&;fPLH^k]HRF@~݊]b5VzR: g+r,Y~*gzl[IJQ^}Vc,p7ʧ< `f),\'dzWQMkcJZs˫l {md"#0)4q !PʨHBgjRj6[/\RnyިO#/sܳ"BJy@;S]잟y2ۡ`6, ,z^Ix #q=^uK;ى3a#dlr:$gָV:F\.2pN@8'JCϢ8f9={̖a \g`\HL$ ;x8[Nu'vDwq(3sںLVIxf8pFѸ1V06<{sH7o1Rz9cS823}8$g+'Cafyp/9}35G . IC s+Xfk'S}vLQRF# 9l'$@ 3A.9T׃C)BŸ>ݤ <~A3Zo+m_1tQǦO>PIJA$n N {Tdwiݑ$<NFPzbsۑj H& . +8ww(B<*oTpnŊdL LW vTY׸QVU@*OY֫a|$;xU\Km 0@vjIJ7BHvڼqO &3R1,\f@Y@t[U͘>P3ERc^;Kw Ž\@%?Sw&F(KgE9yW+8y: Vt| 0AލEy#yl"B +xgNI5qn.$#O7*n)a; z*o˝Fqu ۭc+$]xD*PI=q<{:2?;H}XȤ\2Wk.y e{zgsK;TUc@(9 9؆H".N29=qi3.(ev27:V q]Gw̴1Ԗbv܇d;#q\#]ma:ޤ;SʹШ8ve.U Gϴ`l9n[)9ۆ sY=Ԩ>{FΤU+nAp+tUacHǔ*pztgVnkºJpH 9"4_p;?+ZʶacN1]9n2:XpO@z'H=ߵ2Y4g,39psW)Qy;H3ONuLg Ԟ2^}I Bl|=[OOtx% "#aWkcwv,2ǩ䓁Vr3t9_?WI}6,)OLt!ϱgUc$d ӊ͝#5ެpݰ3z4'r[ b~L*:Sa|3WJֹ-Rh|I' OҳIxۀrwv_B$CkfN϶ypnӑޑ1^,vq6X#Qx+|A"$i)#^]K^b$Jr{XZtlqi x2XbGe7snOJH$~qUWf]kbbJsFy{5)b)0B<6rFnjנ<,1Jv/\JЃ`ts<ܨ@ ʤ'⺞jV{EE1)(I`.$ ,?B>=:W"w5Os=ؿ=Tr׮+{lw3888? Ԯ ImŔqA\c&o8Ss>sl&gssr9K) zVINf9 :ήߑ]Zn风;keJTm,n1G1ʆ';<ФNl;}R@R fxPZ}Kqa +qyTqލ g *Tv3M!3ec+"8UY .G|Y0A=rTI [imbڝ- 8nF"5 .ؐq;+g]+Q~ֽ ox;LԯRU},#*HϽi0Ep[diL*E$DZtSRVn[a4?-qsxm)&b 2\i+0Z2Ą*'t4j2* 6?xz-Z#h߫K g]sQZ6c(2HG`6"dp}+M+9}]DEE\TcҼ?UekhAwOȭ'3'fzXXsIz9RF2}gNq^?|KWw31, tk~ϯh%s9N*.A8׮sVy#$=?Ҷ0Oԭ#a=svnF a})$T7K%C )K{y8bFAϥnֆ؁2`@x 8眎$8wܧv $9͢ք {BG$ԁwIE B_c@(BgP@2quR[;Ӟ<)e- (8^3Ԝc GC߁V€Gdl '&Q#-6q +eDJ,p@xr&< ,ĊⲜW+~{ {6&d =>%2MH,qNM錃kΒ#Kdl{a{k.-M8\n4G$ :b h_-U`RMlCzXu2PS8#<)u* '![98/CyDr9# Fѷrx)P!I,0Y?0'߷L 4WE=#\T[zْÀz{Zַ 6N*qNO"6yzO9SjWlm.5+OP60,F~y%^9z w *+*|Ԏ;NOߖJԽN~V*r㸮PGRpNqH)d>CpXf@xJr=+߷c$ubt Čq҆TW,Ăۛ'y1UnN +/v6.ݾ 6\':a#p "y|Ea1Z xTmy]%b'7qyٮb0 ?8Hǣ~(^mEx2,OW6zg@$8Qm3LԂ@38'#hj$v];CrۯRIGz VEd`]!{,OAUȎA[Ury"1J5%c\ǨCW!?ܱ+Jgڭo=:\ұ<Gw aCAzJܷcHFgoGWcMӄ%UT>f%@s\-ʘNA#lneFgNl.2:mO}f?!A,:g?ι;QrQa j{e;-c~r?N>]K[3xb6ܕʌ㎣ֱ标+e{KN6J5SZB#ξhL->+KA*3ȡ9;r:UFqhl$$$G>fۜsY vA ֟Vz7Uyc=%' Өҡ|n(0p =(MntFI j *:#VM * KNDkqAsjԒF˷nXr2#ڎ{ Li#:ڤr8;2=AT-joX0rQP ;T|ʪgcw8\tǥg)v)8S!ut qުE9pr.O8'4_CXBWaF j%Rf*C9JV㽊~GX MX*!I GOC4&nWz}1(hRO1$ޥ\m)SE(IZ;(#o*V܅ec1e,9Ҫsqpf0kӁU< (s9>}F5 [',:}2imC0*~cӁG;%21""m$ ]VUTBC4;fS՝'UOC K-UI#瀹n7 U*;Wɞ@OCBH޹,ݜtu -ȑ(FHA=A5Hx$r8\$j6A9<{zs]mr>N+v!=nN܃tWd;Xw.1=jUm̹f<4jT)*ۡIK+>rb(,r&[޹1)N 2UV'LRMzՎo1&w #r;Uصf l*S kc6Im:_J׵ YzA1Nz&-0vBfz|yR7@Rry֌ y~3](Ό̑y \~U{Wo3Q/clxzL| 1FGP?yu_- >` dSd㩭/̪I]QX5zV~Q_;9洿fV S|\}ܱ;ڸHȖStA-I=+gU9=@%3\k[ar'C\̀e+ ${UaYYZ)v|Qǖjĺ {HImt5n[XONWQ)KljjPĜ|RyPzz,ݲF:%N)F[lObY :M&=F$=x} z`HR=8WlU4l&mnz9biRjIU\BrDI+Ռ_F-_D|E /t~nýD8 ˁ=yckCAmv?YnWFCze$4*(,2BnAR8;6𝺔ZȐsPF>$hU8*H9J~Ց4nH 8SQR.qg[7X5Bʝq݀Gb3\֭+g $Sջ*3_Ob:J|(blz~7Mv 0h߹g6#Rwl<*Jx=s[s)J{i+ONA鞵 iaʩISر8S9#jma7c;a:H?RJK#+9}e5* ="}~łHڣk'z*_z\bٝrz1'u;XrmN2r;P'rŇ˴A~Id ڻpO$} =h $|۸\3#V rڠuϽ 6pu?*yr?5>D7dA?΢UƗHcirNҠ"GqTɏ̹K/\SUlH~߆8TjzPH%l{T&Q*| qUpze橈iA!NS)zct]Z˸Y1iQg C+~FTݐJxQQ{L@9.܀>o犁t}61aA9<\Hu3-lYNqv{ԋhA:'jwgK LbPx]Urҕlۆy993uE f3cڭ, GA㞜gU.D ޥPW `ʘX3dNԔev+FI篶:Kg,s\?*I}GbMv錎Fz5&KpxI`!Ny)矙A#?d3Ӄ9XHY2~LVU}76q~ @#cԁYfI=k{6,k|<<INOm Ob7y@+u\c>xB6H˝n,@;s]h8۔zYc`=猞ϫ <7?ssN^2_zq^D͛ O++>@Qx89ʱWzU'hSd{q^^_h0ZsOhI˻iAAuM 3HCAQngbJxayU\;vR{՟}X(Ysel yi6qU0\qaӑUiX F$Nܯ8w|1UG(R[ 20Qn$uzԷ| _x19UPw*۰v88UOB MyA =0G<`1܆# xV&9#99=R)&06><4p2p0$i̴<{Q7r(['qNSlnhʦ4c`# tya~] nʒmmCea$P^qTR$F!WC3"p>cbOs3'aB%6``8ozRNt>\aC`(^zNsWF۰݀'nqg.k uf'x<70}iv:u@r?IKQVR6@7 THs0޸#x>@89dR6#^H.ឿd.9\pޚbH7uR3;m'\ ^z8$F3d@C{ڐ3sǃK$eBGL=8z :nF=:R}s5)d0(\~>NMBĪ'ヌ'"2m01q&.c>^H#1He7K`u9 L֞zc>u`1`spI?Ni#|nH8POQwFH$@fôH' M& 1!۞ZͅYJ0F2YAdbbL6 a=8$i-7DaF {R Xߡw["m૶6B\+<3 }[/dHC̩wmD~ge1uѤݥ/qUx{E4M23i+ک\z'W-x+8YM2{WMI-z4's(%,r;<1s@Y_{'Ws!PA$cu"K Vt al~z KrC7@H[1x5'sJfW %st\20*&appw.T8LE"=o-ey6[\`x [U}Nytyp Z[o}4΁Ys [K*[}P(T<9 'ކ3+Pv&Gq©I 2k2$/+7ca:sYd7ifB/*wq]e1bYQr ^F&忩i{zs=enb_ۄP.ɴ+ﵗכU4}6N|a0hO.FG֜/!'#>nxg:`uRyV8$g=?5ͻl^JS{bNq^MA,IYqOozU$d)ԐPc\'̪2ˀ'9<ypzVVqwqjv?wnH8n-!JU;3YlY KHn&i͖.Ӱ˂v*`uTDj|+wyۜT['[-fL@G+tySs]L"1s9-Ž0W'$ UegFm˕fCSw`Bsg v/"sЁ >Py6 OSٙ7>T8;s@U81Fxuϧ|"VĘ `8JW9 3վNǏ" $Ho\<'O¢g\ 3c~qN3Ê]9!@^AqW:tԑK`gvy+6xNIڐ{<6$gG@kNv8S4L~еж qKG=9 3{m?j}CPq,}*@<Pz3MGPFw%Hݰ)(* ;з9qݰ9=*n<ϡV4QDHσNzxӶo-M̖ÖHBʅb9Sm]/Tn,ELH9Xjʻ@%rqy듟ZM e Ԃ:gF _ʂ@qzX=O~Pvvm]w/ǎ3I߯Z+/=:;'<ϧ;[[l 2 [n$0QC;IQ)3 L~ci&d2+l$o^K3+SUcVǯ8>_2xM pW?5sXX[>G w%w+S  OU̹;Wbb>X!9 IS}eoLֹw7$qtKq鐬WlIoKؘ1p᳟?H:4o鎟9OBY dP뚜&G*=ԕ 9 ]* 8@qӓ}:ovpΨaI%fReU9!܈WzkSɹs>:͚I2˺ P`{Y~Fk%kdAtd|<87~mB GqNFֱ "@<0뎞tY%=\MJJydaB*'QzVW+X6fVw$:=57ݑJe'8;!pzfbp\Jᰪ9qWR9f8v_Mڬ<>Q @PFPx~+c\daGӂjE ||'rzqJAp1*`񲑓dޣw(ÄM 0F\d~'5aP*<rJH(O9HLrn(G*FOnll7ޗ߅f rIIZsɭ:=vy9&@3{D ά\aA{qҩm"ͳMX$Pc+sAKK:wU-('y$b{wC4E=ۤ2y^Iϩ7 vY7ۼg8=K9T wgppF܎Wa H2yۑ52p)R0T$``OU8w6ewmN `wyɲK]ZKg%"ލ1\r flug6Mu9 d,d2|7*SXhpzt˜)8atAa R9M¤`#A#^]UvڼZ&M8W!SX 3c=koI=H#g(.X%+!WrKpA9U9 =sCE]*&zwxG_RrFi cCn` ^Trݫ;_^ hV`) ApA$ԎirPζM#n5f F@@{w)8>f۸y)0Au3;@\ AX`r8 Oo^$4_r,1鎙sJI7sbX9pG=n;e9 u==sRdp{Gi:}ܑ* 8{_-..9GHdED7(c=j* E y%K_ːh 0+d~U4-\3*1dQN/O/BɈ.1r1zRa3dPǡ (N mcV>^<=;pvW1ڄi'R[8$F7pqpyQ4C(!qzIm*[ 7`qR'$!R3;vJǞr;Ӷ 6x$~rĆ㞠֔R8Fa?RMYċ˅@d*[OZW\};|FOZ)28\HrC(\3ۊ™@nOPpLMgG-O$1!hr$60'=+˵ ,{a6?neFĞZ'wo3RUcp00i6 #9'HzGK#SeRtryn \u5j+pi%w*YL[nqB$=kC>dY?8#,Ks31H9\@' ㊔X§$|sw=5ZO"MvȩNyaL&gKq0 #DSi[t X4\}̶_\JJi#Ԇ݊T8qyu=*oTS An=2s޹b:$\j0ڠᷰ\7kGd+1q1[m czk+a2m%v2䪦q9Wvc mÀۭm1~]s1y!YOǩ)KG^Mky( 'pH̟/ʂsi:jtގxUtuz> .Gkk,K{{U3eQv{V T1$pxq ҃}]U¤."0P q]Ho ZkSmH=q]0QA,8{T%2=cϑ H}*mNzǦ8x*@*T~>@bv应;@8+ѴmRy ʜ:t͊zW[wVFTRܒ}J˸\GacBx]jEm <`A9  F31IcDv5-I$[H.:ԭh[W^{9?]亙SxkGe"(0O$V_i.D-۸`~Ty*ufG 6Bmu=>?Үx(3yG Jc=k^|[zKh1wlN~i!&{r8^k8VZJƫmϒ 61v\m6ܠml+u۟|SkYԨb}`^\'ۺ (NP%Bƛ>ZnUU+kkޗs h/x `NJ8a#7^kh.:$"["3!RH$) - 劮[͎>滖=]["o'`P$23V@#=s+|g-010_ݗ? ONx\}B!H+C(<~T\H@9B .:`I ӝ|zKoBSXI^[#67Řv>P3Ync'<|gpUyg~Qld˹0@%yO5+eQp},歪:HgUWFp Sҡd(?FlS;f97SY˜\DNsǀ@[ O>%;}qIV 5+6JBryX.r>R&DUE 0Ǔ`Ao7@qF')jBꬹonץc1hg/<ˁ|.U|"֭HG#'$Z!؀N {rSp'aqz_Rmп 2.p9)@*;4Z#/3c[N9o0. $dzll˿BI#q,UH-$9cpxZ[co3n$!1^$Gb8m!_THH؊Vl45!̅K#%wc{1SdԞV@{ZHPKzwiϫλmͅ]aU}K[ [ɒD*71d^[\vݮK-2,8\VVIͽ 0SpVY6=c?LV8np y3v7q5U0 %ŧ#C!MOT;$$ia2,rK"2q>Rc b402؞+XnfRFI3p6a{c;JxEB2Tj;cbƦn0XiYFc\rp}lUxR'.w ';G<~5za4bӱ?!{~Ē"m-b>כ[c"!v3q\Q\fjhQ'qQv"9]S9c=ԴQB{ޘ`Ⴙ+J?JYAcA$*Tr?$8V|[n_)$rK8#zzY&*;"gkv*ü0Sp<̖R7dETspx 'gpE$P[MkǩHvOL$gi>L'Мk0>By ?kE/d!8ldBMcbwsCK}Z(-&S rF*78r8 ۜcOвس+0 ޜf`` 2nrhbnez8ر^/vvn' G_f~^1{?"T .q{=qUq'rsװ#S[Vn vO`]dzNIxϯzϛVUX\u}U)rO'񁌌j'+-=JX,S9>)It| 99; gI'N1&yqsC9U&\cacON:mAV99I^e i`s۠NLkxߍ1;qdzNMld6#~:YFl's@rU1ctoǓNh.U!Oqק.9RcqW?j Pw0Xqsޥ6 c`}ztf}ڲmn*5J_a' b@ʅOn+ r>c>{FSʘ{]pX /  ;)ߨ#mP sj6 S9'

3 u',zztYn4F1ÃҴ5P˰0Vf$>9KdEP.3vpzT^ZG:Ȭ$2z 9L W=Iڥ=ZNunXcu*qwrO*]Xg#ܓլQ!Nv>ާ&6T/dGXLx$vIhm-u7~SƆYRIcj^ ms9^5qįFv98$隈 :䑌䎆+\Mv@cc=x ;qBaNTΞ˃ ~:(zgz랴؟8֭l&1ʨ? rqOvq%x0HAAnG\U7p[A=)Gq2Q1*0s7dw( v{{8yKVlUGO#n 4ěB 1~U뚎Q* 1q]𦩫[S:j4s/;$֢1l$ΞG$40SϿ{yk ,*.!>Vz~4/+awu#ªݹ 1\gqcyFOLzf! v"ێ9,rr s8G d#9b -LPA0r6^դ7FSˆ(?\,%{d!Ttlq<_>sșQEi'.~^81 "/8&WIt\'}xӵh8<1^㊴.IGg炾0@7mV8#rkB9t]SwYzcӞi5 !*,gO\0 _U=yjWz!$`JcA¹{-m*4[d Qظ[3 9!"pNj(cq>a݃rH=ϴ4md ̃!R=V71flYP9Q%t ]enݔ+%qp#E)}o3BgO^iDVIi2AlaG#ߎ[Ȫ ?1V,F~{{S̀'w*w(t%z=߀zW%)c 8H_9OJvmE ub~VBHXռɒ-,O0'x qz1 "6Jb;稦ak~|p<@ 8J H8= Z@N*̨w7c'=f*Iax61|r+yǜdo 7ÌT&8 `+N*y(d߫np9>>ԾgJpsO7 ~Cۛ J}A㎙RT &yҎa / 99~KpddyP|.~^6ȨۣݷO%[nN{U HG@=qӰlvdp9ܼs8~7 ܔ9  G$`ҸX07ȑY$XԼqoB^gkF[gʹ 9LT`{V~ `xN O'#*O^3n[' c # W$䎁N#/+zT/1^y3ʁ.r i~` bH%2N1H'vW 9~P~e\=3݇7$clvW/;͓sgG tc~[vF=zԛ%a$$x}*3".FI<@U@ѻk< ݵ5;YU`PI󞃯J_f܅EBxդSzt03d ۂ1'>h=݅XBs8y IEj#ČYA#pzp[j)d>CѦ(因kB(UʣSS?ZIVj#,q':D_8$Bã^.3?7#71ڹ1ۅ'9\') blUV("9D} d?JYb+ ! :z558ypbL+(ј3=gMe0@?r^2wrRFWMJJIs+uG$~V9`f(ؗpD-瀹c o@&s p:QҴSc (P2>nº[[EȀ7} wP^Vzg#荛ש o8e;rH"[{$/,CdH>괧@v{{v!hdO!+[#;|6~nY'* -U}8J袌.~l楗2 b±BI}H8 Tò=h[,{Y BF8gS=L 9b19?(i9Hʐy+ v<Ӌ/c3EtS0q)ӌ=N+VɞEf2"Oo|dn*?u-du6;FXIO\c)X:Rxvx޳ϜD~MΉ!oLI sм'jΖwW*9U]sry5yg[ouknbq䑻;Sҹ*մZU*mfg&X;@':&t6PjW|e.z+[>JifM_j۲7#}_ fkg |w*L M%F1csfNXsǂ͒C2k83=Xʎq׮y"sxVb7}zqӊ=C;9J= ޯd 8'Uzc{U%-;gt}q~" %CqӹǷj,p1'#_lw$ :cک;S8 opF@7<{Oz;rp?oꑄaG==I}&K&o@3^ \n+lwile<`|@'q%A~X#tL92OO]Imjח47]ddsұp C1CwoBp8 )$\qJ:]z0\g4๥h%+F^S/kHL) PsJCnVi#) gqҿFh*xx+YSsZy+cz͢KX r MLy;95A _&V )F1޽[ԯm-c $.~z6b!TfW˅ 28ʼsjQ,` DiU^rAO5za\0ް[̢X $ 2>Ir%88֢H$g1*q(ON3aj .pĨBK9¤J'Fܭky~Ap;YGLHm72gsǡza֖ m )tzM4s*iXwqIQI?C X;cLSH#[_ {U#ܤ`EXݟ*2Hz(H=G4Cup Tp@cwsI{S4s]\o #D:W8 I;WUY ͕N#DR̽L F6}qG)"Yw+9-H:p2*Q)>Y鑜~5,YK)9sd`nB8dgm^1E1) cpqSSc=Td=NA5kQ3m V^k3<<95C1cݐNsJĎ۟ fX}ߗxpOF˃rsҳ20$%|J+6r^dgOaw,$dmp('ҝxX8㨡7[QT9t=)|.VWwrT>C*+VBTWn{~u?Psp%O=)v}wۆ\*^v᝿"Xi{cjF U𥟣;}O~~ vNAz©]s#ނz$GqޠFr~]V'#vx#v|*=OF@[N b pr{4=ОeFܹu6 /" xt Ϧzqd]Ƀ]{IO)E5Y;w3q!>6azh `(` cӿz} .+ 2H;rWg};Ď1${$OF'ʄl_zw8q0!b,g ףY d&J#H}*G~n#G ?# +++1=9GZO yseb0;,˿*yY#8 vu;FUW#5Pa9d$`qӷQP@ 2_7K S-خ1>\= 6 dD ňBY1ӽ>{oQ+MkTcڣ&&{{ -Hb$ ʎrG `3Bۗ}>&{Z~7g܇yTwlIr879*F͎ڵ`HA6flQrzd]L0TmaW+Vge)]nQ[$pq\sӶG5hipϩM![nFطb7\\2RI (*HTwU!@ʂs3֩ĸ+>IXTѼNҫ W眎k V+{4{i;n Y6 ~k߷ywYECm%hbȁSӯ}ߦcf2\+MXܹs_PtJcy޴$r{7iw}JGK$n)ѻ ~ VI>E-rwQCTfe`~<$VIz\yrq֕I`N=7?Ė phqRG[jg=rN2=Whl> WԞvͧyh$L1ѰN~S=x~7S5E TۀAI5}YG#$qygZ Rzgr+:KH]{uԶQp*F:`I?G]98lsޡ6HZHec8t.9sTIpJXf?7 [';V~Qy}lrF[ sNO44h $c;'$l69qӠȪgºh$ĐDbAA?bhϹZ_ HGd#*?vcqXS#Mv9F2pR@Jaury%Cn qtZ:ܤEr#85AsӞ+TՓ"ڱquq%sPxɧͷ\l|-%R2ҳ[#: ŗ'_5xh5v{; !E 1$f܂QsZ7˹#Wc?*sȪSgHP:ZJgy#4Qlm.Cf/\nG_+Fw[¶|j$&[}u"6=t#,{V}4bo%P-ϥuE]#+4/HrF#ݱ xdWC+ ٕ${ִS;q3\H&U d ¨< qpF8l8's8 ;`Ta\T9ۺAK@!8o};ئ5bj+,4H &(둟f8ܤ3Tt-۔ s4!{@13ׅq#E2|Fl,l\qU %FD}EmBTp}k2[U)$:9 hV|G<6K9;WUC@p6d><8],ǁJOvh9=y_njmHK*75F8e󊢪.aʲFu1boro eFct隝Pr$28<6:)Y$;(lDI O f gˇf0@T'wr> X`ަɱ(761Њͭl8XRv\ W<* h,s)qADǜW#R0y=霟;,p)=D0dI\qGf۽cpǂ)l.R1 $!˪o:=)Ax1ƃpi6mW)JꯕÍq$9ӚAF# ;rēyI+~e]w n`WcF׷?Nfʈʣ7@\6Inni?gyaXe^1V[wGp8'9ⴃByJ^`gA4h-I1bv.ϹCWS~xr\ؚ1ij:pIy'c 8w g9&];GGEeQpFIOBpI90H^mgGtv(` cP>\;Y .3wuub.`0K6oReJ>9/fyTF!7oڡh(:?ED9v"#H\g#@0y8f$qxD{vVnsz$Ǯ{&V`@ pvݷv3᷐?6GkhMj1US >X z1׾ +K w擒_!+*C8*x#L5L I]R7*ۀ13c#?㱫B2. 璸NkU\K@zaH\gVTNrI[=V3Z6grêd ?H\oSt҈5 IV#)<=F#g )1=2FpAER-T]D F |AՏ'TrۊRLW̬b,run>jvJU<@RGgJ% w'lTإ$,!U= ۽ے:=ꍔ5';q{{;Ԟbd3`<:I8ګnDx Թ$`=wRN`n=)oB~ǜ>SzH ׂq=Aa4Oni=j;ps܁cؐyC{"0: ?{$GPO;X~)I=Ix\`4HE6Ucq<~ q'6sNpA>O-2Oo|ҘUncB#?:pB2x>c0/ds~'hW 2K6IRry;~,7}x9e=AH?y q?Q'zNq'g9pOӃziORs'L{R;A cw POr@Q~q8$ 2PÞu$ԛBA9f'9?JK4;O\3oN .oN0@''AWiP\`w6md:TފC0ŌsHc?.[?uBٖ#* !9鑎- G^zzfzK1/lu8=MJ6vø\O@pz`˽ZD:,G^q:OԑkNDdr2I3.2(2X3(85a~nv'OV'V!;'[i{??wa0+i~z E$HLC˹Ga]j0Z3Ēi7sz׹J;teQԞH䑤lm~mzt.5rJ:1NpΧF} À[q䁎S+HW!AVY.ngUSʯstV ʍnd|V i]#{׭Cx8}N6]]1i85d91.FUW=y4sH7͍#j*6uZIm6?lxmO3ִ-A6'+;x 95OKZ?gzJri5^xqgx{9j.:mNx'>915FV8qsn?SfW%soBy@c뤴Էaw`rySQ[vuA5Ξr2}71ݻ#88_Z X㝗vVc|͜gROQƳMǯ!Ya1HɐF8>PUW"39J,8 2ԖL87q^y>5eP*',J %H+4i}K _?/^x5oQd})W; z ;k)"c鑃O0g?x'8ێ4!=M@^v#} sy>ݎ@ϸW:% 0JsC.1c. Îp:R䓷r}*qS'(< 8u9^F7yw%"6s|İJu é 1Jk@k.p2W #BKx38 <)Wg O }:p=S،sI(&l9^9~~g8o~pb..qerOPcQR =F3qӮO\OM3שR*Xu'|$uEof<O+${GO㍬ _R9zaK/ ={ү,p2!F1}}zsi88Q }rǒrxEb=(sur0{Թ m 3F4F=P1rb;мw-p:|]A!'1? G^2T }'6mEcy91=jfB YŒ238)&&#I9bUr*I)-gbv9>qQ+ t&ՆU d@Y=;S1?c'ROלc@"eLxV%vdtߗ8eb6Kg lx]<s 8У- pq=?SH 1/S0q؞(ٖ8Kyt#ӾFc#y0>Zsm`P=2 Np1U"Hr9)  { sҋƀ۲ąHuRB dTVT,dR8;BltpJ3#|{a;sumrBP>a9<9Nߑ<Oj *#Pl.~R?P[vȐٝ1l=~l(I;Ab*d* H<dzUIUuPH`2M#5kaCT )^S{;/8$  ׾)YSÇ?wvq9?6>X0ݴ.Qj⻘ԩtĐB5EVF>c)\kStE{9-l*8Y$zz瓔_yn P0%gb8$d+%#}aT`AQ92}TB!q`ƣp#l~4Eq8BC|#[h#7iOَXcԽd KP4x]V 9W3 r0`t\KpXwE+R:YDɴ >RO^ԕ!N~fא9<{_kjH;큎+Tk}܍|eW=89`!$u,>+zzFH8?LojGDMT8^<ÏucL$LsRf"#1_ v}cw^(h`q[(!8vYeЎmle߁ x k8aPK2;T`G6ϡ/no}˰rSׯҴ{yFAنwZPR\Ϲ%Nk͵قE*$!8㓓zOba4-׌Ͻz⯱u|pIuF9qIH6rO#j۶rznerr\Ekmp\6ŹJI=ϩ˰IeTAn8'o}ܛA$G#?j`@ƱC63+n;NVr?Z+edMݽj|⭠9#ty<+|=zĺ9*z1dʷE%s={mt*%\s/^c}rTȻ9^c3[\,l󻋆I2Cg6pOLtK:ծ&x8sdO 81q]*TS 5g]/kLl ^ړfwc 9== DTU+ 2n}X c!ف3K jvlٲK$i^Hؤn]G#qSq#<ÎalP2WO'4`  90 'ӊزy_ܻPlC1zu~ntjrG*Ao^jѸݺ}kʖ超Qy‚GPyҚ~nNy?(z>};$ c;2q皔gsצ813maKTeNOL)dNp g}1OW0DSG a wsM;l\fyp#I0xU1hr2 i1{ܪ+]HGN:G` PXظzr{1Hv(Yp>PlA뎭ǵj3l#{ i4cf}lBJՇʀp\85 ?PQ#ȏjC\v`ABhcC)-܏ʌlxߠ9SĊpU`e;۞/~pBFnNѳ nw)1ʷQFx"l BWYKGӊ|JS8PNGn|#1:Q}lSA8p΅ A u'@ t:2NO|y%};v0z=2?*V9GґG?ӥMZ(I3V 4^,F3ɨKS[`cg_Nߥ \cc:Jd$}]\#ZuFS.s]q:.sv!#㞝'6  dj LrI]s5~3teo-R( m#f$ghR\N݌lhːJ fҠ.m$ϷL}M$1ŇgH.]ˍswWݷ-< ]N:sPUGB=O֔ߞCmmD `gB|xЪ\3)b^[CV\eUJ&ӵϗv,H$r?qiZI$"aOLRx5>c;>e$T^}ȴ4ʊ8$U? ~c@=z?@,ۆGAM[Y&ج%*YKwzzvUW 8 b :6a)|I)mt~be`=qeH9P̠Tc{Vwnk畮w_v@v9>nU2paAqJzjoF|ǵKaas^<#En낡D 1]4cy#~xKHIl "@eH˲k툐%שuz}gYi 8<'+_jVAU$v*ϥ\~+M<Ӳ]GlB Bv+8+o$0Olu'X͖K33nn@3W]3\V6@IF. Wxtay>µ*3k-ٖXB&pV4sbZQ۬eh<#'Yw+|ya$#Xd^c,iTR2  ڼlw>([r͗++#aO ׸>fD񯚙P98܄׸U:#~2$zkF9zs0X:W*m<([tGcD79͸A?xduR@?1la p:d?,9;9:qz` FQ(?1;yP{t&ilDwl2$"XgxYVwwt)Oq }I# 1ދޖ0oQm>NFь>nHaj_(Qw1y=0؝Q) CIr2v+c?6YTYQ%N@ޥ98=j̱4k  VR9֤Lr8ݿM,2ZAqÞ2y?ކ4T@#%xl$m듊~ދSr2HApTP͝_w)ǷNt(e彻H-R.[ NzDk_(tL('ns}j !r>^N8Ng &w/OH8a@[HDd,@b͜y4o<A&#ivNϽ!N0N?.pI{;O8 f %ܐ OL`qA& `XJz4l۞PUNSndS ۜ#k;sOo"VbOn$󑌎)2C6 |ݎR &AaR@|?_~)UH;x8Qz H1!'ȹCsTIn楒f ncؤe= 'S/N#Ԋ"`ӄڡQ5AV\wm#!=;EZm%P|pâ*:84La ^7G4EE$;Hy07cOP3]e:vEt\D#'<@ɭb"~45-CAFLbAS^[$h>bp?@HRx}{U7Twmo 8GU; Fp p *OHmۑΘ[Zw_6 Y3``G#ۯMr2FFOGZ}7 ydܲ$L~| { 9*]@q{׆O G% ={MjǮ 1V3c]x'Mś;FTq8%u:]r#Uu$Jessj+mLɷ(y9CUI$+)75}dǡO9Q9ϭMqVha#p@zZĔm =QFN;氩<&Y)nX=3E<\$m89>kw^Di@ =zT(+d=N9?jjx821aUU>{~fvEWoe~naP%`r>W3Z\.V6'g8&gxFWObqӯJ?0.3cN> 2:TZDDNS'9% Ӟ{S<1pUY:E8X8ڃhHy$^(%-F0ps1O%sQ pl>ڎaL}b'qYsXDKU<;ҩ˯aݔL [@IWcOm ǾzqZז]h 't~fw(9YkMh"ʬqG*^n]n8Jڙs/M)(pY@R##O>nbli pj_Zֻ+ÚIǟv P(c+{Ve.dbTxsȡb}_k.૘T/znI=D|6Ow:ckNCmü~)e$Ǟm)+κ.8 fc:U,1MJ^O.5"%~_ }*K0ʡB2+6Q!wis*}Yx'xK^mMUHw(k Nc $HT5]LYݤx}#]qj QE<$7#$ ֶ,uW1;6f ?ZR2i&=.o P<"CQ?Im@Taޑz8DUwZ2NJ|_I[(3 xWEh&p6г G(Z6SjʬvwJ [AX19uRBf dFUF63t--F,#6 `8e|{IbF+~fe8r@ڴnu1^G$6P C/Ԓ9M@iTd''ss+#b*ńc' ƒsҹܛAyRVH+*$b|2:9^c'^u"cn X WGmKal_.2- d^TyRc`we߃sՉ9G[,Y^11vjd;[2p-Ojl3wl< ·>6Ș ƯG9L*ebc30R3=)'#Fv$jr(l[uq-sHwpgQK&ZBc8⹭ >S9 M~RYP~;w<1!qc{uCdCo.ߝHӭi nTn#9gx+܎k붣Xc`!wy rJ8{~5g-FpCrT򑳜dzҷkq|/ Fp~]#* 8r93-?aAw: <If}sN:/XuԨH>Cnخ{ TW჌6's{!Ki3ԨInj۽,LUvS~m%uc6Cgs51 ñ=>霫 `=w"9C 1T.{bا\up:MCD6 Hw =n/[i eXT3rq'T32C0Q1b$`{җڷq?_Rx:HU(8QǮ76]38\ -:z5OdY ыbAvi5Px 1͝]gnr 9,z@# ñ=zW]L("I6rurFH~3$H{w82;VLpS9뎇d|*'$}1?:ͽuE%s5l\,N@QUQNV6Z!eݔ>E#9NjSpxRxs*j+|eמqx8R9a?$؃y @-ʶO9=8_3*Ⱇix-s䃀XԌ* 7KqkRhu$w Jԣ1`_3!ϧvug!<\IKn2vۏF|?+МqֳW)-GI`vC@#˷#!1MI $z)[n{weܸ6v<ƣf*W ~\u.3>lgj҇l?vPJr[zRRM!:)ZoP@A$ sޢ%>ȑH 3Y{3T7׏YNHP͸@p?J\rQHb}r8E'FWT5|z_؂O`HF<~=yHu+yyOEognNJbɚݛ%]V<*T4n'pۏz.3Wَڼ ӆݐ~\nB%V•ǧ~1ҵ&K@0@Sc,I9}j8x$Ǩz܅3x8CFdc' |ޜ]hvV7d#P?Fmn+Nr_=OX#f˗\|p$#Z[z&UN<~PHCbģF}}X%ԛMdӢ]L3eW]'# LUImE خGM}I,Vr ڪۉsXʙ 1gUݖa5vjk5R:\'$¨[9  DM#+ &#,}A~px\g>çVk <0s{cNhTe} % 1,GP1ϭP]C~>΢_q]m͖䜑FO%p{@ qꬍԑYշ68>8'<~ nj$񑓟ɪsy?5g'c[*OR}Rm\^ғe\AH9 ާ={֮v99#>*SM7GbOzҧ  s81<66O#~t +$B$rA\R S2?Pz_D039@b'#۞oΫ"#F2A=*"O@?N.[ NyTtQ4;Ha1On_[~%%r#1/ G@[99'Utq $K3[9QI'88\Ӷ#bG^Ket(8 qۚ|lc'y[4 wS63QIAp:cs֟Rv&Dy냎y5d/N) rsӞCNd^9jHpq,T۶1 G12z9߅C ~WHP3Ҟzm8$3vH rnunp̞q8`ΫNK8q54OSbGhA=s^䷶j(2410M}Q+UsN#P]szx漣RY?t6r$9{n"+#.uoëep0+idXcCD *|Y/R7uOrac22T*ONkEnY<8${qJA;7|NxVI۹H nu e#*@Uyю GL;1Nbo3WqsdqOjnSߠUFA)vWH<zfxؘG)[qR1l@9<ɗ 18BT4oIN-4R:U9'8䀹IcGZiJ/䝻O;#^3[&j  8q^xDxpȦB]'x=y+hjsVS^BGcQ;rGC0'=yg|gr} } _X~Uybjgl 𮭥bIh]Z4; 1H2X8_淠QPMy2ZXzՖ 0%Upx"0^ZGLr8M]}כúǾAgp+ h#gȟac۶nwDa!Q#kVw뷩*۹:krJP"h7Ǻm[8@z0h^Tu(Y룈Sk]tWB%t:cjƑ3ʓ'˸u hl8"pG:cze/d$gvB灑<A֦'*sF17ͻ]N;-< ۼ F5KJ&]#b d.܂~ӽ3 z݉ۻI+Я ӟzxQx02FՎ]A>uirIp$nSM1 @'#ǸI:0lg n` uȃvN(9B1bX a>a\pϷ'Bv8nXɃp{ڝ̈ug OP÷p)T(X($V>JD"IXT;J)Ur;E$ SPTaUdH+y۞qڪ¸9#$sԑ#j3pqDZ(H.*dcfTq@=cd-_f8XI2 Qp9TdsQ12:OLuJO'̖=<:cyz$өj5V^{p2k i<ӭy5&>%HrwN@퍾CVclWh/(Ի?1\dd"\TiNǿXifmLd6߯].aguc eztLSG*Ϳ2y.R yI3>Yz [d /$V+zz}+>꿑79Kc$wn|8Oj3LZz $bǾ=I1,K Ÿߗ 𘺼SԔRCmOG$ڸc|ۮFF=iTu 9`=EqNArjcaOIh8q8)7{ Ocwgܜ#Fu9(]@XGSlHⶤ{\/,=H^=?mJ&+m,IA _iNfA`qQ錯$s~9%m]2 ƚǷҴ c|Gl³e?zL, Ho_z$Y\12Gm 2,[PU yt:LXN32` ֽFyW;CSȚ:;y2DH2GNp hRYUW,3Ns~+ƫK.Z_iWql$pOnGJ䤶MC,3ܠʱq3V]^,Ar9;uvX5\ҽ(I5tyיM5 $M mq:c ^8fD ]Y'oD\}:rp3sMd߁ ;1\g3֚-$ g8-%smsH|*G+TWeSK 8I4-YzrHpI?'3BqEvGbNöz a]\KԎ D ;YF `>uK4dYωJ[ y ֜\6ʊimsg#8*<<: 9on=*I:88>Owt=%@!H 1ߚX .(H8wKDp8e<Iߊ~8c{ylq8=mۖ'`g'>H:\wNP(] ^rv>!@A%}\[.X`:֓ LDI$`3M#9$bHkaF8}{vs*aK-2jLKಖ~O͐ {u|#w#>{}h@H`9GczFv=ԒP@u=*F;yt[=7ݲxR'|S?we$l ?*FXTn~u2obiGß &IC#JA]FVzjtTQ0DTÕ\}3 Qr=ȉxy%F{Տ*Xy^#]H*7`z@g+KldB3F㚴EC.oS<7tG0@+Cs<"a;]y;sRJE F$6=֥X38 2MHL2Wvñlvϧ"KhkRǘYF8dGgG+[/ mPUV.Fx*4LLe8+7bc+v!W!J]k4SZlȶ2T`9'=T-VR'*Uݵvg?2py<~5e]8?z-OK҉uԙ|7<⧩trrT`6r{IuW_2O,/*`rHr4d|kb &-. d @a~2>xK{yrʻ2\d> kS;BI!8_M\9[HSkݻUOgM AmE!p[$}:WAY[-ݝH@v8A^ apHlïJU]oJ=N٭v\l#Ozݏ@ruG 1ӓڸ%\۵XlQoÊv1S!Cd@1ԏ^տDKʹz)p ǐ{qR'vK?+u;zfd^b@X0$UieQi/Njzt93D,'avANNov]x7zOypPp\`>ޫKWl'?/o;j.䐉!(/-~ǝzQs4Vgh#F;sWKt.Y ŝ|W.Ѭ/wp28Mb&$l&>iN;r^i[[|N O*5JT9}L|Rbh`@TQ7})xÛ _-Ҫ5$d6J>iukiaHJX" tWխojjsRw\O-q:r] -*^~UQvqꦴeOE7݃#rr=kh[~4l!6@a^8+K.:,$}ؑr@S֭'Q$㑸ww+#祫= k԰2J3@2~s^,i'wxF1p@O$Ot64<#'bx_}WcDl`(a:)9V<'8pOsל޼6C7Ir:u$eN;!qrq &4]v lU5]nx;NFvyJc]8y9C+JdވҐv>J(l~^S"U#yA#}M88r߭$GP.<0Rycw92|ʨ srG9<ኃ=H@Ju2; !>BG9:M˝pFs/laV 98 H`¼c}vlde%9#)rs(nʃs؎>؈!`FăMῄ'ߟ¡ЮncIt}ǥVTvCҸ:>a#RRm['9G\'NC*)9–#yj0qç֪"L[?176E O-($zScFЖ2G `1eᐻoʿLm /@P֨@?;$He_1w!=@kZ^&|IP<`p9ֈU2:mwVY*;,r>R+4 {hm,GqVASMO[NBZ[RHk5{ 2(;YXnffOxK~L觢}޾zF֍ ۂpWPO]D m/he%_[GHESC=<:Y_[K)oin@ 8)vqlKvSokK"z8Hvw/bmr0IN>e9u8F~^K`yPGNGZcn$q~ h@l z u O'P=y`๳C8猘?s|Rbjt:n^6ly*b6]:{_8Pv~^y'z33dMwHNש1/n8`B{+$J uk2ԃs4r;01ׂOLLݎ9+6Vߎ=z^;RW*c:VE1wְ4fK,IL|%URE=8tҹv)hLǹ4 $zDb)سBF}=hqOAֺh3}('==H!DZZgWnb ⩲ϡ>5-abOZW@NN9IX%118C 08'lOαoKщ9\?ʣIpҎmbLNaP'_NqCHrO *A>Bœ)ݒ$6Sbj)%@>'ӡU$U8g"ͫՑ4ny;G}jrr 'Oӧ4~|Iq$\0ỂxzUo5C),͜O 1faXY`)w?\U?18 H9Wj"`Lxṁv++h]S8ǝ /)H ̯"ǺVH$Pdw]KoBw"0[|O횾Ȳ'̀? qpq\Z4u;v qO=` LB8C݉bP;&8l$<IR'T劐9 =hb7LTAs֦gR9Vߧuzb8If J| FT=GnIv/pzF4M%X9T>Prvsר\aC`B^z3LNC%8N9=2(y 28T< k ; ,f?*nry*9̻O$ K4!y<0VԵ:W2clE"lW%898JoX,[2g-^;r ZEm"D?1{= \J&dŇf('  GPyS݋"EFޜe9ٿ=$߼F%5=P0SQ싌.eLN.1fHka WmÌby)b2XnqxfzagacVJ1T<8+ўq[*ĘP8:^1gv] ǜTnA2?CdS;j̼H$XI]CW c B`ŻzeO)v`Fb#'Uq/s9BwrGOұJ9E#eIg5"L\  '-$=iFvc8$ QNbybwrKg'SS[gf`ۧI7K{Mv8U)̇N]yqՔ0O^>)Vތ?pT4!Gۑv2 p@P2pylg=Giy]x-2ǠEY6wܞ*"mA#hl'=2} M`9#')]܇ gK p9VX2*=x@:~d%nKhNc0$;j&B?uv*z^ՋfL|{1p[TN}nSQqfӀ0^W60Gs5fZ`0׶K֝xczes|.y `s=GUh)޳)^e6뷓qj 38 ngk'K*r0=N}{sVD|@A: zG9z+ѩf`2F#ojuN[$=rsވu~0)y`J` .CcqRȌ? \Y?QqX8+$`*ϕl]ǸFLs0Aثݜdmmg?7>MZ5'vÌTfO^q@n83d 8@ǽ9A'p6z~uBFdNOs垔9A,g'$'=GT7er[-̧2$]1yatz#bQsw6k`6izԥx뵏 vz:tt~Tr'%Ф JwmsA_i,!BB#H=W#xK *5ہhw,p ncڴQ3Wռ!qeq0ucX"ps 3'QBFg9e*. k^y7*c;Y{tO"w9H]8TNy_k{JrI_CŒG^Ԟ.0~+Xϯ#pc9x=)";N}q;\UM&$Jmaѳ:$!FI9!Y?6}3I؏1 rA\`*;gy,YN9Sr6ڨ3ssP=*2I)!x$q2FPXe``3zױ@*e]\Qw{>j 䌯x߳L ۸79@vG=qV‚fPv?.23ҥj&˱i0܁ ;'RCwgl|$ 'prUT ¹#IcS3! `dϡSdC d@PR&@ ŸZ?1`CXܲ.j˒b~,  q0mRY@da>J y'~vTz{ۑ#UKx qh ~ k?"yL3ۂi&Znjm>#-˴IlzTՋD暤*r>[N4ʸ6.N@LV6+ѴVvxx4ڄO!հ.+ƵO\],_ƻDr=Iu+Ǔ]jWA H,L+\wp[$wuŸRX r`Y*Xsǯ4*r1ǡ>#k 3-: d6y>̱xaShrC #8'>)r $6s1:vȠm99; _A:q7py^>l+sqԆbIedXш9Fr랇]+4o1vVv>oShF: d""\Q; ヂ=}M@'8]8k5v[HŹԧ*>Q`@בҰ$f8?6WH8fDٻmk*`|c'ִVo =Oc85ͨS>/ "5܄*d4+Uܼ!=+qj As=vcھs[T}v MI!DXRH3s߷?Zs~zJ%wGN ',3">aל:qBz1%:T#qb7 f;y`&yh8uCFp[I`9s(8'3A5,qFQŞi3+D 3Y2pcs\˗؇ J#<U'ysz DvѴ oNνL/SsszRqCePŵkb(Aq/Z*̇m60:e}#ϒ=Z; eJF5*"r1 7 AՒK= 0?kbܜ{z>qڽϮ!:;n8"{y>ߍy6IXz#c9*@ǡOt=HB^oGQx-ĈZ1ӇʰOMxz֋aܨH=;>ݪ,Ozӯrz&RH= IぜR}U11:T #Q]o-ݫ0F:}}xxYI8!?/cY*)M9s[S߀7{ɪN1Sk Ei}~ꝥXyFQۯJH9zNZ׎v2s^1_l*{=~Ye$(dg<#ҹy E>+JJRfʎz l&X Nϛw5ҕg $]s PJcg$I( A՚{/65܁PrH,20O=<;A댰=͑nV; w=*Nvze&E?V0dN:SҦ,xdy''hef%omp@?ϥj rS~kM rܯA8=kA;>e3UV!yl^{wܞ:Uнs^l5{m o*lAR9?/9֥ ۋ8sacf=明Fr m ppS`qGɻp2HF3]Fj,rAQ3քc9>{dz⪜Xn*w\߯J Dl$0N@Jː3VFLJ"R76q#@N8>Ցuڌ"3 -=VR>ћ&y's0V>/TD>Eqק~:RD:׮p܃W?'2"61e'O(ҵ$iUvRFn!]]tbԦmhJdi ) '}~GJˌvH 009Ĺʯ#`9T du>%=;)fG9H"P2aq֨ĮQ!ǭL jfL0.NA@۽[u]0csp{pBAUiI'cS71AeoK 0^% ¢ɴ9YK1^8CNF#9RJeF0̓J:麵<@AX9_,)=sך(Puf/;YSeJ+v='d/VV%(f$.NO5ʌvf,qq})x>}yV %Yq8Cdpvu5TUa!q2k82C&f4Ri8l ե;:Vd~HV]S۵@;LKaz@F>fu<{ [=#9=ϭ;<^9T! GPn=3U^ P9瑏ړ>DZE=XsP⎭Ԥ5>s=b'=qקnbeGYQt_j1lkd6ߨg=OJQ^[+Tye9 WF8#Cb~}LK1^*1a c@L{4rapXqc9&GS 3=q  eԩN:ޟgw%]!9IFOJMxwǞ$ '$feR@rx5&}/M^yB(QJfVM$mchtT~Gգ:=b=[6fi6SMZ PƤd|}Hv0:_L>ejwz}v z 䓜r2}DaA&_0 B>~S5Qݳ{iBY#3 [؂CEߧ1L'؂W9@F6ܧ#S8v^3h@:1+U:Āv) =s\4@Uw: N}I?wRsԖnJAQr9fन@wU 9T/nNMn9ޯmI,Vd" IVmv`|[#qx n-XQ˚-(Bzsj{I.k%<2 (p2Âs'#"/./Q0;0⺛ׂ {r~*_aq[g+ίS_ǖ0gywVo,+HׯȨ0vf,#nXs=#; Nj\JПY2X_#޲pJ^!|zK+x00y=+hzHnp{0sסê~\* NG'׮yjLdC7\Ǿ3NϽUFKBJ) c qO _< h=8)5:W9 =M.J)Pۚ0FI? & `dnPFyZ\W8R2;;:p]F}0vhr|na$/lx?Z<pG\Qț wہ {v9"U,?oˎ{gD¨8کcQq@ʝx1q`;y0LIP3yul( l)K-f{i~ dh ǠfITb,ʬv_lqU~FLM-` yG:FU"sӯJ֥dMm@%#ҫxd/JFW%8] :V o.\ rnڎtFVKMa ިXګAx=t`miٓr=8ŦgKywF^$\+F3]fk2CiF/'9=@j/*+/)cU ۞9׍[*}:{h&EE$'nX*@OG0Xs09 |lwrl'<W_enOœgR-^"FQ0sT0*7Ė#ځ'䑂20@#{SfEv.6}cNt\dF@ی`gL1Sgx;9g}Oҋ#;dzd9<1H=Ȭ&iUg##xTqמi[mb7?7,ORc?Ү2T p%!%)n۸8-tکMjʰn91S+2pA"1z8> WFEr@<'Yԑ#BOQJg$0 ${}*pqӞ;t9I7&sӌ95X@'8tI7hq{az_ORsv#qެ3^qR}G9$B;ߊ$WF쁐?jJzu49Ps@#ǯ'z`;R} >RïNzx܏^Z@yn>էu~[R{gr T'mT1} Dv3f ,#T pqre1<xk ̇N]NBclϷB{n.0A\:{X)\+};s?ؖ2۲ў |{9q qz;x%mN<#<2rz}*V!s*] I+| 8QDOm* HQV5 ˳k.vcW~onkĺծm FF1:)D~wS~N`n {gBԥU&V󔓅%ezȐ¥!f K9:ȵn@^p1ⶉFٗux>QY6L=y8'Xڍ!FnUx 88F+krWx1fs:VRf)#(@ 02dFzV- 'y(B5jc Ų!5M v5ƾDj]r>槖+a+!%H`;ulcyī݌C#U$:t=i]pJc8wO@84ǂ6- O/&Ot^7И@TSsYVa/!@v'jS'.,N:H!@lUSݼ0n pXd=xTo,o1C:;1=Ef"_t%!`{z}.l(܇p21qV eI-$* ~S皶D^M$ Y^M\$qR2xeQʒob;U%-< pT]:(z f\b B20:ʗ 6-abq  `ڽG>Q sB qgYxzRolR|ۉ{vM9# pTFrISg瞝+0ꕙ1O:Լ4%ȷN1X/>—3DV2r@&5\4=.b%;}ʗ Hb!s g ϸHlmv#sc#׊RqmkҪ->Gdzڤ4I1\|%'i+>Vy կE$,ldnNЊ:m$1D9ȕ?t2pOA=Y5Ŧ"e#f`\;` jtW%%9±Aޣ8(c+e"9.άPaOzdlɾF% <7<+̮"M>c,6`<Jd `(#]Či"Xl\#I呃.w`+Œ[ɝ.Oz&g,Ǣ[Ggwwap`c*rj $?Z.kQvr;g:O`ޥ6h8<6Қ.W89u'YI# 9f̡B=zMv cfb8j%-nE⥳P gz80~7| QR0C+qsœH,{^N~i&ZZ''I @ PG9g#?J[\h1$7mNO\sM2@+#9i qlH BI'^B8₿HWolyJN3Sjz!} rp#>[ q2xޭJ~z!ٹc'#=*z%^*#px9 d6; #nKa:rOAOzӡ!\~pN19$ڨ%`=lS[ nV>'ؒF{ q?V)mKp8뚨,$z6I2NN *m%szYUWOn8ەٺPG=jM:'@18<(qHg?H>FF%w}Đ8ErnXd 0SAGa֤{pe1zТO-_v1''+$iOT`y.ss9 p}/m +A8i'I-NLQٕ;BR7`jo^9 \sۭR6q:s_QL9R19Q8A^:Rcs1<4浟;i2'|\=#lԙ\A$wr<- ؞Q}|I!T'_J~b< 1ҩKerTG<܊@c9jȴN2RC3Vvf c=Q]1uBq1CR< } T7/wfV 1ZHt''#Hȝ"fABr8`݀)ӵB=pr9J)~:*i#=GNzg,T|9$^ j+̙;+|ɰGRyǽuoid7HB܋?xv9n+u)e_fG =NO~1ڬ`da y3׷&dl B>e#*Üdqϩ5w`nb7p=>gs?gt)u,r+)xٜq8+iJ>w(Jr:s]sT,;IdE;2e#7 4ԭdMcn | cZ]scĵ#vEb8Tn_9N ӭy-*,x#?PUk^ ey3+eΕC1s;j&"Xb2p_RkOP6<[}nI9qІ=ȮԻwn5R76@䂴1RPbHIUުr9"*vR0 qJ\.dY9h.s~IH `ntH" l!I'nьgyvWXwEp2py3wgoZfmقrXVmHVm"XC󞄊A!#, {9簣9[2 JxݎiCp~#9p};0q d]R$;?yA>` axXʘ%RԆsc9ޝmKkry2ʣ\,yuSS$eo_LtV!|l1;U`xA$yxc9 \[`SH\ÖI:`9X:r0{ҫy,1?7%Ny۽ai~eO8khE'#/N 7á֝Aڤ.FVrF9:'h Rsez+$NPS[z"߻マ2r:aGN*0HV Y@i0Qrr2@|̱S$-]ēA.UdSܖnIs1&C32(bpoL~ژ P0Nr7uny*=*<ʜ ` 1JԖHUO3k(9[y=쑳 LZ0Mr5Fz9< YO倨Pք$HTTm]r9ҵl ~Yvh=Aϡ ʓ^Fva;K`FI yRS\)B"{8S30W-W pzMg̝rIfp;\@ޅnm}RSBrQ1=p#!rO`jXk_cZу{K1>CO"㓐 23'֮~|^JR8 I\@q鮽TPaނ0p+`1׎kXI&EgHM;eP kM$b srr'tw$` p犫_읷I+' 3]+$d9YeC?tɩq͖IķBK@7gcϒ yr:Է(RTde23Ԍ&Ф <}*eCrI?0]~8=HP1}3v*À$ Oq'ghS۲h3c8.c=__t{CP9xAJ720:ZF: 7XZ:,m5Dcj '[RIT;T(Q~Մc)K]I5Ke=>| dgǨmm&Dl;x%8?皻H б\'n}7b3XD#bґ!3$=8yhDiH^3+^In=M%ܑ,y[AmڮT-$w$qȯuv}-8ˢ:mB8T0%YG*˴t[= 9HHKizuqt7k1^d zwx=#Oܲ#UEk4^2ߨL<{z}EX>'zܚ/oгJ y G8ޣՕ~`nNzP jIy_8$⴬Z@evp?J̻u 9SPulqZF5J /-!0Ea$Ӕg[,*k'8{ףX^O$"޿6yӏ["/p:)TG8@$ I 0GNOJ/@[3'c 3p܀1<~7vqtG& t/`F:}H8#GNю>µ佈dBܜg slA!+Ӎ]-Js8G*xe; ۚ.+DU'{`qp޲6${V~$h)x9i5z泓 Bdg}SS}|ot춻<ɠ5%0G0vM$¶p%F;yI&d2d#}tdKcYddA*zm=sZ3,X Pr19gv2Kg—|6溫Mmeᲃ:+uލnIyoڭS|MFF.PH%!kF'i%vEx;[M]leT9{RqZ̒%1FG%rL9bL#jC.MRv) 0$cFǦZG-Kpd@>Kr<7zP$m"nbd@i%'\x$v[Ү>ӭX:M329uH7B.}TeD+߹G24gv]F[v/i-´@Fr4H$5Bm;y-t5,LdK/[kYM8ۖ_O\WJ-4I,Ѷ\`qЎsYZĢ6009# q\̬eFymwg#@ 1u֒J1I8׏jUcs1"(ZI8^p 'GSX؆Qȡ#g@co^cˉWi+s LJ!%{85pO9RIm6[SۦMiF<(\nX@=rzVMˡ)"̬IRq8\^RK7hҸV`2xbp#l hT>hn/y<Ƶ1nS"L P.9p z zg"z- h$PPo OR$F!';ћ"c򂪭2,`+B5'@:sZ-йqno鑑k@!#p+M7R2wӡα;1?g#k}p,)-t!ۡ*r9n~`7}0yMp'#1=?>88<`%2Oj,JD8;)L׊'/;y9ԞqR"YSzL$`ssNpq@yp=s N-P:ߵ1Igpǧ5(8㞼'}) -zH8#zђw(`,o>X6Hژ\,F I\tg$z>^Iw8&tO\7QzbWB['j=H'@b,9h9njR#ewHP:c= AE4dHW\9^8+& rh嘐 \+PI H-1u)lmgK*c =;ҰL[wns(, /6Hŭ :F#'ʈJ?s )[Ip\.vD`9)fBI'ynOz78^OMQ:Ԓ_|=JS9i:LHO_~o># 7lckė*JB3dQP=sM/RR8'~9:qN78 Fx㌏CN< d!r{)$g8 s׵2?0#rx_T\~u*p:Ω LsWssS_c܎~'0dlquFiSg#o] EP $ݓpO^*F=:`pQfЁKg<~]8$xsȯCڝX䮯$Zӫy'=0zkl;v5UCJ);x铐^(m2 )3׭r-BP:Gz\\¬eFOi=m.{=>%z;=OyRۏL!-wIOM`a[H, mY>RH9ʑ`)97jW9bNF~j2v-@!s7>]4zFݑ56j7:ְ0bd,~*AFт{z>6u$r)W #( 5^W\5%mW~gKYI~e{F" d׾H=+ˋ(n ؼ Oқmuy{,ɖg~IJ^ÚҜo!MU2dcC8 7݇eUlW8+~q]#n17o6)aЃ35g6*7L.x`u_W4os O,H/ vDCP _{zbƪ̬[qpGK/%x8ۈ+ӌn4E@KN{ՇP*@ B7==:Fo:+-Kb=ݩ\g!Xզ qAUIjI4g&vYQX(U@S3g\;\2!,d1FTo%اfIvg%GU1|9;`vӚ,gVY2c*3|}k4{HWsT6"w0~=Kz7f&;UqצҾӭ(bn ,rJ P~`WF<+_5IvHaV9$@ϯZݍ3&Qi{gv=:ԇIkTMP &\Wmtgⳟėd\^dDV0:=bU&W#g8RE=#6Z pJ ;8'}NkcW,F ^:!H'B9S 2 (8^ewZ]Q / 9':s"Èf3* qۦ:&:qcRa& |gh~o~sM!n#Qt-J?9_)# *Q C( 8ujkaXE- 4hmH8ryt\S- =v8὇j #G~$H@;q;Pc3 |u+El)Tf>g) Bv< RTKwbXgoǎi {Oތ|eHlsO7vYٌOCGL(9U0A댎qd?d98wrP:tA۴}ql|{R*:HJ{!Qq9RpFG=Ieibu.R(O~::@#0\pr8yo 3ø @y T2y98<? >`{vdmrR2H>uzOJjnA;eI!u4Ndf]X+Фc}AL=qn7.*g*1 F1SjqdPI]6rdP9`Q竮g={g4?.[7|ZC͙kHLcfl׊~Fb݅=#qar2rzA9^0:r@h[Q(m9# ~ldqL-NGp;cq&UQQTƗv#y⨲ܸ`<0JF sR=B@F3g0jeu #0ƒWmp#'-qrz{V]~i#&$H [rmD1w$EiNWqܫ` 85s!dsߑf/s'w$s'#ٵ  ˊ nu@CT qkȵ'; n$.u##vѕ^6wx[]`2n-;G"mԂ@۟u׺V9K#(l#ykA~[;2ʭVQZ95UCo=$FG%̊6!'ߑs>\^b6Wh#q֚$^)j67 $qޓh |#}ikTW6n;8@vHbGҴN hhٖ/1~Gˌ_^><"877OY{dV7n{d8q؆)<:q*>P$Un)Xtpi}Y<|TQ}1sSB6۽ǥTm̻ͪg<dgہ:ceQ#hсK|sW&H Ws9OМ!Sd 7Fr9T|EKo h%(A(FIJrjz%"VӌG¸9$w{Vն ippAN 8>Lr6<#?3_x^,BBKnXF-g[5<'vi[쥡fدgK/zwz5c%%n4',y&P ZG(fT6eX2s_uR\E)?̥o1#qVelF7*QY GkKf;f_ۏ'v0:Ӌ Nq})Xٕ5!X$12x QtfnیwޜDޞ4r$pS_LJfح.9BF 0`HĔ ӏk;n.Ze'h'Pl9k w#N Br6xy1`ʶ$Ѐ6[v8Jkb\v <li{ҜV)HW܌( 6G"O>kQ}@{c't_@T7rTnB~mz`qB l]2Fq[=AV͐1Pqr<3Ҷ5vXc~GNԃq?4&8ю_n9*pIZ9߆;v@&p0yڦC ˉkm 1QXX-beuUTHz󊾄+pRb%F:`gq&ʒӀ9=}>KF.̜}rsV$TlF7 >UdݙWi|l 3cw S\CM]|&0gCldۃQ]ERWI!LFԯ 0+85tE))V8cV]nix4AA鯙d*aU)a9ӧz`grLR|($-oyv QsJ- FPX`Z i͞n~3^M|kO71ۊ] ,גr(9?t?77_ΪQmuЩivlifݓN:kShֳ- Y~|6~;rU$ m?$c>urX92;BŽgu`F[ (`Tl62Ӯ66 s %e`)1Kay$e&19V`$t_fϰtc6\)g7g4KBr9v+Ԇ<;b%'h U} ɄV:ʅ/88s8,g8 [? .6[;x1ONZqqGP2Gp dn~]7slJ}D3 y>D\oJ?҅ʽ] 1,~jSn6Ȥ: 9<4̀ZVRQ߮0d"s{i`0=Þfޥr)w;bNr9SJ r=؞Ҷۗ>3fPŲ\n=8Ȥrro=~ K|`e$,e=tS\ک41tЦ#S 9ݎz}E7q^G=J=.JZzqUK;s=]6Rx\=:x=p3j2[9? t'ϧ?v9is;J,T2GPX79$pG->[al {d9BZ[M݀qڽ`{A ϧ\zv[">qӞI ^9`ߗ ^O!Rg ^*Msf2nqZ'c߮0<]xUN+s2O9ۑN!'hg,S= oҨY U^BOv\^oSIz;,![ҪK)؀zR{Ug(2,A?+ T/20ÃR19_jM}y7F;d{UJ) Nx:>ؤ͢Ն/o$0yP;B l'P;r~\㓌uZ@:n^zU :1~?j@r:c=: #vx8ʜ=0. #ӿ8Gx1$s֦@;'F3n~#qsRQGS@s&qi<ǽ yQO9- #ҝ׎GLvw>HEF l?*҇bŶKNH9qknt8u#ʷK%1WtqeByp*A(my CXd rsF4; FP|[A ׹v֕s3]Trx+1rOʹ'J/e1ːq}1YR7nsǡ~)cط A~gQ#> cR6#>㚏pO'i}G uCbpG Y7nz``7sZ 2OtU :G)/|șϦs|F:Uj6XN`5L#~28<@V!qyfN 7!z` Z%#& JV:l b(Qǚ-\R$9< ϞX=!Jv_ҩyȋo?+(#qP:`:qG:מjR[ g2yϵtWG-' agqC>( q ^tT\,.^1rvaIjFF 隊heU#W ry5Uy1*7 f0UY?`Ws=E|mbP9 >^KpsrAWN1 **y>e rKw&a#r 5gm i M#Ǡ)ȫZ9ODjL sZƥNgG%gA)Uxs뻜ZGda7<|%=1]\\Cjz5SOX"T&2P<{[k1rŽ:, I :ԒZDg$ '7 nn + 7,ֱOʞ\R (ڹҝU+M:-I_U9ak[7l3$G #|uZs[M>6 g g5nzXra\.d8 ЌpGWA>YQB7€= &<莒ų4AMV%B`Z+k);ỳcI$R7s{R[} w!gUN #˱|渽am!hO=%T7{=+$mNol;0`dolzJ$ J!g8Yw!2# g*Χ&S\(*e& 2ޣ DMkpɹ[L)zCn:WӰ+yG7nPǵKieuw2G1́*vG^2sھCc{xl~F鞃ad)uqZXNz }j6T+89~61o c`1uUbfA;ɐ7p{(PPX'Q\<@Hx"d@88ֆ.zmװ8Q,OofԚLeH ]1 f|ƌy#kXڃyQ,?&9Qn8=isaEiv4\ Ozp҃qR u94dVM,s21%Ag[Uh"]vU%y#9RG1uM6\0~\c#e`˒埦Q׎xTJ +c~:(,UwnE]V} 'H wux 9j)R'?Y+?Sa;Kyb*,W w+Y &AOx~m-ddh<,0Q\ =9gfdk([`|x1┽m6WPPcN;XAVHi#ܖ`#GERk6C`q#ێ 4d<"'QVHcPrgh'zr?* !y1'ZO%&Rhs9$7 B *$x8U9=kcg=0N_Sןz^;;kK"SӦk+j˵l}5NSH*ܐǢik0g`^+Ñ S t2`G+R"d$mfr3j@  ZVOўS̫ ǵy]_h#}1ھTYc̚g_ۆ@xHOļyʠg`w =K#YZOԅܠc"p $0ҫ+9ےF@tF O<798Bx/.$}(H,4mhVDV(>;rr {Kn#ppy\y5;4]cF$En#ITG>X ;}Хz$J=l0گ.]C"l'ɀ1W=^j x' a_j#6p0`1̫0Gxݴm`@ǮK t>ER ~dy)P`iڞh~BR$cSu3AEq! < jZKmά,z(R> zxvV靦mHJX[(~\n^W$+Scq'JxhݔvTd޾jWZu?d*$p ڣ:\#oGAz mcsnr0I t9"3qv?HdɆ<[pqˆ% q^)w,:HUI6ZE3vlbH%0q2~:F}ޭP\yP"o΢.C+u^Ir^h#{6Mw:kE} 愼av1U%~f [."25^n 4e38>cl*ñ1 & fB==jW#hh]QģW՛5|U>bW΄('*#]q aO;GM TJOuaRypI9֊ ( ;SbއҶc7wn+lIn:i@}}Oq" @x?!2y>㊛w~3ۥD$ 8*y*'=r=jq/SQz}G$P,H9l#cΞ\aqf t'aO{c N>au;}B {q3pSNr:&X@;q)Î $q4#?'NAsM@r@p99DDHxUrqFxs)l`0d,p8;㹨nV-+,I '5[CiodyS̙R2Ⲍֺ9zJ;I,A8귘 1!Pp2.E(iQ`eN$0@ 2?3`vs_j\gO^O\0y;}4)(ϸ#GC&[jVGKoFyN7vPy>~v @DS@$9S:`zs_BÍ߫>gZ;spx8޵#eP{cCڿ,nO$p8$cOQd09)X8^が=i3׃\8Nzv?_aqןZt%n.1ux|T>x88At=ߥRC9랿^UcsL "b:tǡsc^{RdLZ=1t<}})̟qǁԞ@}SANjrN\{,H?ۑ&CD 8*Nz㯯Io%!A FW~!.>{זDƨ-cv on9r='nA<ƻ+-_{MiG^{iIHJׯ^ G37\N1֑yRׯ]<71B.0H=9Vb\/>@>`Sm᷶+Rr38d:[ۉ %n|NFDLY@ O$%"RVWNѢ+pk AxQT |݉֜yAyri۳|KYn$p76~%eZ2|VYX9ۥ~V]q% x!`6ʆ߸p0S^6S{`߼p1DZEEݑFAY@8j9@ d"jޅ+cC l(b}yZ#Hx h9b>TzgjLˎmcs;r[xO9f|/aTA`.e9n8xn~9jPw9ǯcҺSɸ G zdc֔*Fa_")@]NA;=O*y͝BvnxUH7L7nFAzDl'TF|sDc^G#׊_ (#,L uOVSu'o됧U+4J)U*߽#qǷSZ0— Ĝm\qM={\n׃#0 )8mg5dz\e@!OAE{[If0Xcq AP9㓊ٷ|3YrǪN:/OC]c*>WNGdj_,`wۅ=O"i.."V>e\(iE+ r<3вc,XsQ򕦧9?6upryT۱_\yHavqO Q'8=$ZrIVv:`K[01XpNoNuppU9<=IN+ƴIzÀSoݛUݱ@1{zVRu~چ?,i:$5l 'TwӗΙVs )* ƺ&~=дo+(jgzsBUVtC9~r=|;*Wok7%@qnz{s\<a5-fOzS^uձ!|˕ 03cJ2nRrr@y ݀h'G32>b~SFy OHFP@nByb0=h+hswx$yǽP_]e 7@k]F0 Cn6?6@=>9?60=~^p uiRIH?)lsyQu V  ARbn3,qkG '9=pK)%ˈbXU`1@n1q, Ij;X >H4О?8'#sqϣHPyH!q1lȠd)E[+4p92#1*Dm$>nyNVB-I'dcTdg+՚E s88Ӝ) Ѱ;C% 1䍷o`Ry8^_B"xr3SŸrǥ/lo)(PE2=r6ᑔlpZh_X9ps6=w?Hz|? Orp~w$/ң*HLp0*8p2}%p>fq\`d>:Rj֛c%v Cdݑ9OztgboslسL*JG *. ;~f>=EIeF({nN~^xf?ܮ`ˉrn8dYJZ?3r#~E#%29FTme:y̋@RPyS#M:\H [m'[5ؠP{`g3+v<|`N =4.N#2cs`ݐ2cZI3Q v#5Ti[=(qMnn[6S2F{vnJFGdwcO:F1U±p:>JXqIeFe;d IӯzUӞ(7ܧhǨ+x匲LQۿ|чH=sњqg=ɚ{0!X-`nLWEjj{4#,+Sk~e~=:o>-mz8" p@< vW昨{?RܫG\ f{*J濼t-W|ރ(& I#AHkMJ [ܞYI#*Tne%r~Qc,o$<~bT3+c>TsSnftAdˍ۱֌$m6zsj%8#֮+vn`=zWc8\Oڹ'oaϿ_ ,Ag#_86NPǩcm~G`6;23gpZfor&FA>?>nFF=jX+#of 9>Vzzoi#?Q~tK^AxF3nwLw0t*bjFj}PoCŞ+\yV؇[KWr+1YSp:^wڗb1HFY>P{_e#šQ\KDݏuV[Jkn`m;( X$x}ʟ0qJgyy éN!*Fzںd;KEc.N73@;=X4b2Xa ~xZzV9ň$&2Csڪ5Ͻi{/$'E1r67+o!jRCvbhF_P(qv^ct ]vشn¬8nb~j 'sSzlL7f8 Xf!U# r-N;=k2d0.!H=:OҜSbNF-܍q U0C~ps(Jzx.! ﵣđ'ы1;&&FrHۡ>HjŲ'bE1`o>)\L\"1fmr!Fof_.D6J[=:fʬx1V9a>Fc@SS-i >Y(T*)is*p?բՙ˹,J4%| Asz9Un:G"%[S݌[Fmcg 623V+<"\g8*O=}8GـRGz^wԠpBAߛ(\?5 -xg u};W]\P2z<T6yb ϧ'w*(h2s׎{qۊ#G9l=OQAk$pcq.NlePdc $/Cͅ9WBH;@*Å[̀ '@'}N=}e; ##$ r3^u=y̘6Ny>D~'8#3סI*x' n\S A؟C(`H *QVDG`Nq㞞($@y`2~b#$/<QA+dQl0'}ې=|c;=}j@<>;@b;vc #wJ//c\?:s#sێOu=@*AJAGcqcb#{ д pqyW 8)WztG/|iGTY.j@$#lzgRWi$Tqo*>LnOnA+Kf`H'ޤ—n*=yX ?w eA?x峀=O4wjYζo vj{~l}=#qr92~)22`#ڵcVlmeTuoZ'9S TU'HU{qb!O-0IϜk6U摁.Ny'GR[w!s/N RET>#s $#TQ#i#A^zY$)  هyG1*~Y q^y5K/]ۗP$b O^cJ4)QR< AHF:PͷiT >;)c -rM у(np:=,%N0VyBH#Ir9GDx'a &P9A0sz1q rTy$whN2\O5T<yfZhĨ'y#i?\z3~9 a푛 =;bL6HREO YGS[ʊƼza$TgFUgnvk⛻5[$/g]?.xtg4;Yx¬r@y@,F:vxHpD(8 0IcJ0VgROE{_$c+ F3^{|7XiBV)'Vo-'#xp[wu[uMfaKiÍϹX 3L &up=8ɧ[믥:_vgѯ^q.[+rq=}*v#ȡ;# W)&oN,*m/#<\*yS~E>o,e2 S̚{׶Dz#2 )p;g#v9Kyf0U5)91l.zbPlmv!$$dR-ʱ]",Y N;{$},IuF; cQUƳ)fRːP`FI '4\wwj09f$sjT$r$  [דi1H]pw,OsSİٍN\t= +ɸa$zsScd"nR7lCӰXD19 F q) GB2z018َI3m  ǹЩ I89GZ9ErMpTYH㞴4W%Sp] 8'3Td2jdl ܸ$;ltUz dO8rAe1(0 \ g#HCR%f#nH\ˏ-@T*?8QAxuV\p$9`:v{on򬞣؁Y^I;P]9-xn9I`t!r~E$w;Յ9`s3Z>Ircw ;F2y N+HK!g zlش~cڃF,3^v6 `%ޕfO)#l ڹ37ul'25,[T%~}x=k/hҽI6; `f .ۡjkDEͩ^Fi X[)h >H\ *ϰHN."6ھ0u9.q}OMݘcy=3K]HI(3֡$Cd&&J[h8ob}}[y wH ^qyTp|Ēx `AO e9b:hS͒wW:xt7:β~r?ƷtxIyg8lϵCe(ť@T+fHаlދXդ@pZL8^"yRbM:sJ䮯rGHO$ӭ4̣9;FzeUX2OQqq1$͸wf]Y1ȣ*p)bvssPE(mpNJ#q<]姇y*Q c+,99V+zIiĵvPLFK;hO|޼WRw>oYXE; JF-X|>+Z*l  H#$gjos1I?h.!$u[>ӑ+ϴ=p}OCFy3n}cꤤt}VY2́{YF@>ihѳ*<;Wfx!nIӁ\xb8Ͻ=1tuǧŭCB9<12w 1{ִ/>k %Rد͌q\0m8_K1<\w9RwrG\=7 fG%$RNn|[ÕX|v9bK#w ʂ5`b}$zze$`.˕#xp)c*O̡ w$h;/Skwhmy.$$AuС0UȑzW5Xk~Xq3- B=zbTq 9:Y*Y6X3 g$d~R}#0q};T\9\ Ƈ=z{v5Ƿ99+8b317X'V m~7cl#[Rz&9R00T ct <  3$*2xaބO.YK$Gn7 1'GQE%e$zTU8pof0@?{}zj^2C.8G9LsQ-`vrAirpVY 6*<5nmy^Fwq;{!r hY+X3d3MXIGchbː |`'2LabN0QpÃ{zQɩ!UU7|F8{+fn m6"+ኲvWYBr2Kci9j_I/A~rhbzs1ZʺTGe&.<RreF<^VXv;b#u3^ϨOoo<~KṈ1-&${aDoIq$lv1ɐ6ݍXe_>Vn#ӥTb! ?T0A!A YIZ$Es ʒ09##sҳ: :)&F6Ӱ>p~^XV#ps!%ʜ$y֤pYz,_hI9rG5dacldkT,9@vl>s 8UI+/qKRJ2w .y.GcZ8l~lM}Bٛ1_6jy]Q GYӐk)շ\)ݛ[*]%AVM9RCʿ01fjz_O[yrG$+zsY궶/+F#+I89ݕtE_j>%>L|B1ŞfIQ.rqN+N6[}Nys~H㴈BnP#!y cⰢNe Ɩ12 Bګh橹2\Ҥ2%0nIGu8J1X 6;WDVz8H/4o]3&V*ڸvGo<'Z:} |9$U-V2dqD i0:$s)u-~8'qЃO'@F;!`py*ž9=}ު&rvOZN}?MH.s=wy ѾR\f85bdcLŇ~`ďj*|rwFU[IӁߊqެ,6\XӌKJmr\Kv5f Gcrwƒ-!ۀ]I+::=sZ5FMa$NIq9w!;rr2$u{tη:m}~8a_-^)_h8p[+z=QKHGŚv͹xw߀=S\S꒴ҭ5) y_a)~cwߗtvF&7uRvH'׌s[ sw\Z#3KB;60=:qd*lr2H+cӿZQ2,d KeTmu$ [E]6GʺH pEyon{E890c=)B-\ͥeަJgMAwԷlbyS~ïWJK%8Yy>pI#(9Ͻh(U6699#SKRnnۓx8^:)yXyAqW7+RmhV0:laU8_ʻ|6;;Y6 ptBg"H;{"[}0{Svz}pĊءwyc"["^G=HztWR 30= :¼:L{,[$p諷.əV{Gb찁SVln9$+Ң ^8MO՘7y"˱Hc!Iv2ʬ3ȯ7ּ_+5e.C02I`*UFF:Bu_iD>?)z׹&+~Iytϖ+I;G95KUՂs:@ y$ G/r`ےv`qO^3RL`%n$/Jg9.+,wf$`[8w 0n3}+D.1w}3֨Tl'fI#?7LUhcHʐˌp~x T;[83@UOQ;87PweB tۭk[ߪD`q\.gRϾF`L<ZpYwF8dgxk<>?(so8T݈ۿrx\xlyQ7si,i vj#u);1Tt=zQ;q n. Som -vb$s[zg-ã`..]0:R-nVX;oLcn "W ^2vl3)*[8 玣VC'F? !$rx8z Axc-Ͽ@s)78}5iדR{i{o$I2/3 :q0,_Fv7rԃڛg%IIN8a#A(DPī( dcnx^5]V򜯘caNV1 8gC[v( X«d}5hXt^< Lx*q{G]nc_=cߊn{bX dA!Tr3_fJ,G˒O|}ACcs^]u! ^$FQQ6C\02G;xϫ=ub.Af H Ol 2Z 1GN$_>芤U8#"7q0+6 R /,{Qێ9)KF!^J4o9joB3^z zRWd*> z HoV2;?޸f0kREc~F2} @+npE%Z tcAiaOLr1T㸹pHBh tltjonGGӑR`p0O>Go0bpHIZLw ss%bFW8>OzTYぜc<'L8}r}=sG_qN>18b1܁B3Uv?|c:B()x=A#Onrc ʟ^&<`o}P7 /.|l)g*0'|_VHgf$*or?ppUS|9-fإ seVI>O?uXU&vFUQ ?8mFO-sy|MP d~v?JN,t90 ؈w1:`.FPp8zDZkh3)el(# dLrDq~Vun}F2n #qq*8'+]w>1cuRlr v|-`ibUS/A^-%Ce GR7xUU #?vt2ѿm`@pNNA9l8V֟#XKS"Wg dߍq 3噽gyx붧F:쌃2<`dAƥ39@0:ۣ0FG$pI#n֠y6|'rm0۞#5dJVFpJgq$`j.4#c\w=3>H+"VV*&Wvaw$ARÐ͎Hr8`O*%eԪjFpʑ' wï:Y8 h,ۛ:Ժ++}s>98##jT|Žy?K$O0pT>ɟ $U"\pG8{|jHc!$#Ix;C9,N߀!FI8?V!@^YRt! JUV#I^{~U/4[(W`NђI>ݳQ@$aړV\Oڷbt.7 rqͻ}S1ϖ,9|feTIk5+=z;vS\ٻzR>22.6tϯONV}@+*#n Y Ȫ;P| 3ӦivTvBWZϠ͸>)BnQ00G\9{rE"]8$%qTǎH}KT2WZr0HHj"9L \9Uw=Zt`Fji 9*~N 9$9Q2p)v;$ 5Y[c Phq$8'3Oqf8<dQMX8(,N`Wd^pW9nݨok - 6r&1g9PL7cX m?0u~=I3Vq׌t V뷧}>QvCC<qLץ6[U7hXoj[6a8]ο(鐞I\Qhx?6۟_p,ǭ]/%dbpONdפ%H"GޜUTK %I>24n"33ɩgD~2ݏ 3: ^0y*UGauhT\nGPAzk%dwg0\\*\ǜ3F0yS2=% 3 %<WڦR p*y7Xym8҂?x=Fr>P3 O?,J \FFs >&*ҟ 1i塔3BNWasžO9`9qI8Tv(E%l0wcGZ`7whrr~Q_MI۾h>`A/֛,QF| S}sڮ:﹑[$[oͻBd1] 6@*_ǎu=ђyˎǭtE 㧵hCU,2rY>yf@!G= 7w5fKwxiN20H^} Aip=p1\ZD^Z;8;InҫLFN(8㑜Ϲ&ZB'x.IקbcJg=GO%+ 9ON=OY^r;Ʊbͷٟ<CnSqׯ{>$`T ;ښpޝI٢8 ֆcgonEP3Ϡ,q?1#UdaP;O|Ul[ r⥃~wr71wNǴrH! .x?wa 0Oqv(DB-nFpw}[>H9m#ON:>2w6hVAQ0W$3Q`Ȫ3<OVvg5>,/,{q?4F#\zOiBr)F笀r<ޓVΩYsg~FQ bh󽘀yֱ-Βv_Y!"t폩 ZOXZECgkXbر9c$Y {eH#lTټ*~8?8ne7wD4S!@ +$$'I(  p]on*jb+`p%^y1cr'eܥG<׎=sU8rqTP>ϚkȽ}F䞍z@yb9'bI$%8r϶97nxM.O^O̸$yw7{9p$:xB6Oizp}:񎔀A< FwNG#;zu$011 h`9ٴnqfB`A^椖j ę@>fs;,&d/ʠ`mN<7kkKv"ArǀPpzҴM=g '( 3.).l*v[A̤g$gkVxy{*ڀ) ʻPnOn╬3ҒvN7re@1҂N"܅7o Aҵ-tNOonk)Ռ:oJ=4oC[$ NztoX;I.qzW lM %]I Թw qkXe' =+ũ7&E+:>^8"%QIDjp9#GlHPT+e6psПwI#%DZu$cD36rkj#1ydpGmFC#4n.wu=;PW ;w{z0yaМՠc$pHG$w).K9۳O/# szu)1tQT. 5jIqGnk Yt򻀋ˌ`@* -+0̀F}1fRlM^H;of{<%>2J&!],YѰTWmqb,Uif#=ʡ%Z]v-*JgM;GxAy7`'8y$AVAq_;'NK4g`9Rf8b:193O2~g=09u>SJEw;=8=ǽBrOs؟n?rԕټUy8 z89-nxNslSzzsp^>ᆉ#|7$;~GiAa=>pEFc6eNGT wxsS/ԨVqS/N@0 AAr=F?0Aߠ" 8$Ґ^M ׀s:ǶjnGUХI9s=5YzS9:*=ޝ9( 5u t8z./<.2*gO\#g )û'gKsuy꺸 .CE Ӟsڽ$lϞÚڇʯr_ pyHp`,B8#>ۥ}9sA3f&ʟ:%pI*&TaвAV'opj;:MN-5HuN@n:FCGIliͽ#q t2WC:;GΒ"HDm;fP yi^"Rw JA汜t:!R}͝P.vy*0 q@rp fIsuh#??!Ay"yC7U"j^f8$K1Cqld\RxàY/汚s'· 2J?b@#B8QXp1 ]K{l|+ۂ2ǡs5)a,ws{khKbtFB0̿Vm8$e=z8}{w,5 1Y)瓎'>3Jv;vc轱_9P6oI֞F9x䃑ץ?o{jq1ʖe$+}sWB#u$p̧@G=˯`tз}v/duʋ#b.dQ(1ԜsY^S8Y]BqcJQXJ9 - #X0RTn9= `Do9-HS.7'Sk?R%bXg0ZU LH⽇HWger 3zS* (>Y\<0KJ\CQ sjho8@\1I9MNKƟ ɾF7G׊ؒF_-pKʹ)@ՎMI N9}c^6-F[p#NGqNZ&vQ ʤe7 {fc:w\Fgh`nvؤ1b21 .$|X( EcIܰ=:8縝=EpYdS!vG[}GR@Ŀ$2@XO$rOSIrr+A,3Yw2y4}""G#RE020~\DrL8} ?8TA!NxCbq$Ώ62p`r23ϯZrsgYH nlbj5 Bʼ J )fE9<B{yMuepDמʷ5=E <|Rєݧ 0Xpʹc5zcI7g(ʭF j/,Z8a'*3 .mRx#eIX4>M( R y Υc ~bwϾ854&hʬN:bXfI4{^iw@-ԫXJ2 ykTzȻc \1FYPOH5P[oR^ 'odټ2',ï uHJH@V$Ti얿֣oZ_&$ŒUH Bɒڲ\|>]F5p=Q*u*[2k@U|v?/觝zf|,|Մttƚ D0n ;c3߭ mA© I~8ܜDpղ*čʼnTۂ>RVu=3ӏƧ\|dr* a(xztM-8=aYԞ8jkGk#ygy#?œ~()0;طBH+lF̸+![b¹7g6(:w@N##vt# l¡-K*;{;k՟a## ݸ^sֵs|߯?C3_ ~B|1 {+Tq8UEou'{P3^u vOHpy z=zc;Ʃq23y8`𣠉rNgԊz*Kf.Ez|b"9NN:∭Fބrq8TawjNLLR8t >'=@$S Lg'*B1ׂvlC&Np@'==l=7)+'05z34.gp3eP/g=?)&|՞U KpqmfH8S\Q06lcp jW}vV]YVڻX&yz^vGQmYNUveN+-sj|Kt=/jتZ[g$,!olN*ecn4C!>ۊR)ikXU M&۽EuidMG'GZd9}YxrOS~U|=<9m[ 3,VEߚn\b>38%xL}p`1=8Ŀ4s>BYaSl+XozV3/v^ŞNI);ݐx'hiЉb7 _DA䑜&ֶ Gk_g;>{~x Wqc^}iq $kT֗vrBK!Lf8|b"c׮F t1ve %,\6~\sI"u r\9f2*;K,Bp܃9MFfk-0V9 7̰.ǜxT3ՏzxH+1T6l|-qqz~UKgӽt̯_wEc)8rXN}x6B4e3up\³x4J^nߩM~7n1;~aD)<+)B`p +&kW\-BBGkA ---OӧuR_9j4OwI `aNPq޴$F38 `gqW_34e !u"[ymVo^N)Ϡcg9Mb#OVU%{+EVq:G^8F;Ezc,Ilr8QyRQWiJ9YHve HFA+Q␀7prx v8 x8!v,:펵[g!29ckR.2>\=P|=3Oe]8³1 s`w`9*Fs7')B N@9_ש9*㢁TO.¯V(V t w S2zbQN#d2Ÿ(Y*={ⷣ8U6iSj_ܨ-w 71S페=I773|zhMQq[&ʨÜC+&98fW @>Q6 <8B,UJ9O2$r@ȸ6W32GcU=Zoa"',8ʀ}joAH,ɒ;uz HKqKHm>O O* ,w 2  081av(-C=AV*+Gw N6:CW=@d@6+k&R3`7ק9M~-|\1h8,1n-886;NY@8@P>-(@2@V Y,~#+yekeI 2fG#O6sK=! ʄk/Ya![`g\02z mU;1^Ӑ}8RBCjŗp-.3G6a݂\Tt3^l=(t-.|xkA<H ǽWc[$Y@90+6j9uGf1oy'ֵ#U3xRz8M]! G lX:w6̭-3a&Pp=s]VW)+ 䑎sGwؤPI"ʩ00z9޼L0k _+nI\Ć6V oQKn$rxxpAQ_{շ1. );vFqw7)V=>٥v?qeqCo*X :VxFSvFo $*ǵd\*XTY71ܳ0~Ls`{r=Hp>v9i|Eut*3N2s|t50n0I^G|܎Ge=sBW& GySp{q橭#{}Iv1ГY9H<x9$(2(z]F)=3R1y'0y<~{Y~X1U#@`gɨz|"vq<zqN8Nw瑑R^4]Y a/Q?ϡwc <0OJɭH[q9@~f$GOJ/v»F%y= FXM i7R<މ償[;9#ܤ[HNC݂|ӧɩJfG_`Џ*\]i&ahl$Lci`@#$gV[xf}Bd;ʃ3N9+G eG΀`83\}fyBclBOs銨+3va<Ǒx ;gH,v?0d0ݞp=XH}C`\+|ރs4; v|Qv˕aqW](^FleI 0ѤĀaGry+q/bU~Bdyz溚!wxRiwS<ݔR3'J-q/@aTH˯X܏]50a0˄řbO\=_>еJf[n|׏r9R:#~< *@X(koQ܆(YEXSR>⺻]7˵i/FFY#&s0?Ź2C.\ҧlKgA_qDR$ 8$sϹ_nbo3)9GDC@9>jdawydc{էC5Կ1$xs*iHbrT|@<cיdcӔlYʕ!dʓxxOە%Hvܸ.@Q½z*< Ƣku}O47DI =G# 3Zzy's&I8 @8>rw҆3p'kG/hO0۝Є}=]D#2^:ח4zw_:l9 Xx:f!!l07 (spGLWbT~r7(Ջ:3acT3:]v7~k4[iNImr2F2k|'ʁQ·θYCv5%:= KCXH1tW=T 1X[y Qv6?mI8>k^e| @rAS.L5ykԃfy^@za A6fp9zzSB@ c8)X>Wë.yˆvݜ/I { U>֟_ s`q֥|e  y+ԃߚ᱁W;sTA#,y݃ܟn^s'yʶ1_ב.dW<͖ʁ?皥pЛF[@RH~oyB<'##8]8k:mӯS9:;!}J98޺ Q/ӍV?$R9e-+S:iB9 k9p}r<r*!J,Hd#o;[t\îI3V\(LpI,|}kf B7r !U ;b}yRj執D e' ?m rFzJ2ZB6NPS=8@jbbnG$dA{5[o+!}`01?H=x瑂~`4W4IzwzSpUAr92Tē'ܮ?#O3nʬavCg;޵I |nj FNzc9I6lZ@U\zB?|sp;/̆ OC]FNNA [3&%EF2N~VD,ts#>ܚN2h6͌AFQ$U94Qr 7 ^ϩ&RO i@`C Cb89"NWy`HJkAGV'y^xzWiH]ar@PH3ǵЪrnZ#gynK&\&F H~ H5eEhsԑ=So5me{Urӧs*HEүIir =Ny'etTjݫp7gӾx f&4``[烁ֵ#YY lUb=rd _&^ſx<]@'RA9΅G*TޢC{In ZxO, $cqZ;&y8 FNoZM]Jʗ/Օ6/![.AVj)H\2o8b>TًtA;c,5$#ǚ5-Cz֨/gݧ氝}UZXڭ@ "di~\7$^s\J8I^z7{}Gi~Q\[*I=x8㚣x|o6 OBɜ3G #֛wmlpMC*VUq2ǰ&g2nH"9U##3|gdȷ˅w#*=kVӐC-gVBN}+[_/tY 3!䍊1+^\ۣBzaB$ 䐟:w4: |93\6-eVY$;`t|<𝴿CB}FA_PxԹvEw,>Ee{v!)9@gaOv3yxBH Ɠ/o;T˫|2~`f9#XfY#=?XқV]Ĉ/m[[1Bƥ˝lqԚ24eX՘E:ɟ^23֪:G!(!f^gJⶣ}w /D,_*9nvG"=gJZ ja#F490fGٿy UTnocӏAQwiXɳnÃ1뒪3C;S9J{|)UbYʱ*$BvNɨJipiYK [ QCvd?3yr۲Nzq0z"\^؟9Hy]8K6s6yp n}%X^]Jmprl{p;Jg\m)>6M*cڙfeRSmݒ9y#n9,HAԽ @Yy#XtO$nF`9lrG~zzhlrO<:cd8I<硠arH^͎N g+1ZOo/?{p8#ڪ 3fGD3>޽uЈܡl0 ~Rz:JC%9dN:q[! ۻay`gqYKg;+K!S 9p, !pi>$v}O;?춚A-#iQ1G\Kz7K;w~{v]r[A?z3cs+1\ͷi$W8N9$o#d5mc4H'<<*U'1늛ݗaT aښy}y9팟J`89OSK'G4pxR<-ޠ{"s#9E8KaJG9گA,F{Gzv1M\s:y)2?㝤}*y^s|g']Zo89 =ϵW9d09'b g'׺Q`[O\ko/wLߊfݧ9dv'A\zzp&F 6F~Jo_FD>&2%x FAq^[i(F|`h|ŕzWmZ/;6@׭UVRHs^vikC"?ֻ bՍa/Vm>qr6ѰQopy,y$OoƇ͔Y׮-ABL+(r溨5]eEr2 q0s:0 28lqZ8wd܀N{䯯_J6d=iPl {sNB9Iefs>Q'#|H#2boޭ؞NM;KaIArB /C i ϰ|s꫍Mr~%fxe+E,q}9s?1 yR@.s=HҟAcCks/xvo8''5n=K'$m<JN 䦉q{r,lHXdbzn^i ! 1q8+'령u:-FUpu;U N+1q+z 5rvGljzcE$mʫgw8ץ_X+1*9*[W0|Bc2^<p*=(;,pF2NN>kz f $amハNr@a1/G2B\}a$#FTrp=i: dbqP{;Æ[.F?QJnC+ T`zh1u<0)Eud'i9!~E%Yi#r7I!3 +.^r pvgׂ5HpҮ`z@ lʃ#' 15b[gHbc}.z= ɜMks[&YgErb8%<^v[E"Ċ F=l/B qdbG*NX#%x3bF&tb 7cs ƃn>a ܍[lGBm2U֢{iQъ?+e9\d`|Aud7 ~eDIT@8̼ eN3w G] ǿ쑵XtJ?^MSi |r ^5 J>ZI#* 0`7QӑsV-Xj_1kV2nhZ@<$j5473ӱݵǟӞE} mfdc{gp]h/.%c8fb0xⴊI}-φWȷ:[bcivgv%W>JoQ%d[Q:\ʏqr#|._ :L7{yʬV\Wl䵝zWgfib2j`UX8 לk1=n>,F8Fm+5pvŌwk+(8A: 6{c|2p ^==;{q־bK;jTmRKpרzրN1Ƕ}ЕoVMG=qM,#`u2D\zvǷ^: Ly r1Ќ~pG|:_=j"? 1 8ϣuե>n1xq*\dSyf-}Fz| AӮ([90<s}*D}+hk:(d]f~1y {lT6y8JOɛ# "ƭvel$-ē_1 %loڧ8}xAG#{rcjpGAB_S\Hsnp|>JFxzXcFk5_f;0۟QO7B_?}\{z2Z>}ȏ 0FӝMse%s 2>u#wdȄn"A#N1oTo$[Arrd`rr3znnqtUynӌ8~uZ#)\A<b#F=pOnԒ˅bn#' ['U ;@PĀ>h0Rpx@I<|W]\ho&@.mG,-iE&2%bY.]2FO9cۖ}0.0bE#0ٮ~YfR5s"QU8Fl\q#5iZM1)6Z7-x|?-4 mbdB>Ċ~)/9 /?lMBp'N {ZO/ ,ryp,?S9霖=3V 4*p@6oftZɾnjX!yUN3>XϦ0+V1/.8cu޶Xj:z'!@P3W-c?0ٕ1^U}nϡ"՟Kyw$o#\rUG*OR Sڅ@Mn0N2z8YSئN0H>߁~`F; q~RZʝxv 漯2i>Y$G$04A4hzr90e6W^yqmqdd|`Ban{3|ܱsӱU*6vw(cӿ^uRm rF;򄒻c@мO 1o.Bz1,G3(܌VV>^ǭ>X۳Ix4UUQ!%~RzR,͸@H !xqZGEYbHO}0k/P& q ^ 08dTy<ʹdEGB09oV [Ylz6CkH1`iP'sPY<{#0#l;ϿCovr~v9iPU5XFROˈѝI H_(!+kftRۈBci.ȉ噟f܎QҲɍ#eXn*\Fi5Է<4Ap `d|ĝfhY1XĒ;~S־߅t/ >uEUΣ0ۈ&i >tf+А(i;]jZ>Two]O 5KNyG+;x;t@$^d09ccUMckldjS#*_'f 6W HA7=Ƽ٫?z+n'8g?Z.e:O#Xܞ]TC x\6G\ۊo;g8!qzGa3َB;YYr V Ia#ȋ/L\njC <<1R 9AR3`3ұh2D^8PFO{wczV3Z~= OB=HJѺ؍^9?JZҒ}MM:K_Gp# #B+#QXTDŃHpb'۶:֫fiP=g \~V Cc 3WI$0. pD)pT[qs`wʅ2+Ix o 3zdaI;I v*Ho `6m+ ˳۰ \z8Gș$9'c {u)K2 y\1=w8LjM(ꗠ+7tC֬\,p/V *x=օП)``F7"p ÿjB.0×A H{cQo5wNw tFE pw\3[x5qzI!7aU@`8NK"Hw[h#,s=F2sX1(K):bGHCj`nАG01R>VC f9lP9'#-=cd@1>grPǹ*,yb܄m[%P8L6 aySa!] =s[RWg.!?^ f6$ʮI8!T e/Q`޽JkGb9A4!kt 9@?°.s7$*1/`Z;ł^gq*۴H_E\1Tf97 r}Mqw;pT|1lt9&s«[+IaC'HֲB$&Q9_!*#psא}B 8w&=8 >zi~n>XyI Ac~tKf rF=F68$< ^:7R9۳R|U#n1@6w'K䄳>2;rGQǽLm( <==[01؟OWuQ=`Qw^S-Lbtt *1faĎ{{֮Z#=yY$̸ePFܜYr)F z9fˊfs pNzTYw7uoGʡۖ u98Ąu$!nPa1zb pώNOb@~ҟr;\?6":8,:9o1KXqc={[1~%HK'r9#wX`ɐqQd;SxG<:޳Xo d*1ɂVdDT>b 93Hp{2r'Қfj:dg݈nn9@O|cw2~lz. ` S0y8cVR) 點>O0<\0b3'JԵ `f%97ȧ +q$~@Ua #vVzTk&y< lu㿵h}Lɀ8mJ`˞krΊNC#$-S$VD~^%~.W#O=eU -ps:unrJ9bv'2d%Y7U rO'q $ITt\z{Ut . wr<#Ƿi-ԐN*v7O =R:Zȱw]p5xKF@y !zzi&͑;TK#F@X#@v\N2w V]Gcp<n0sTԢ ANSlFsTJY9..6͂zp[s@=q+Bns`2xڪHJ˰F9#Қв@́+u=*u< #? mh-[nq^A ҏ7-ԐZEb;`s|oԸ瓎jkMBU=F]My#=^mmtvEwUl).A#+v Fp!A zVNkoS3f=lEzo Q߯W#VڡNs</ʹ]&+ɗUŜ8N{퐒ywv P{7bw_+>7l  }]`v ?6qʑc\I>b6@x8?JJ IJqϘ G8*1R;*o8Z=Ab9y=:SV)d\ nOhDl y_~2cN=}VDHx rZC I8`-:WD]֦LqG뚲L}I;@']%fJc|c֭,9r8#&݀s7U Q(ː0`3+ pcjHv<ϥWw=~` 95PZH iL(92ź'銃D$X9?Tv5&u~3*lq1?ɷbKcv7*#s}V_oN}RFQ!瓐UeN6 T'?Oz⧩Qos2{Jś88<š>+ks5NfELEJϾ+ob~l,GEUٵARڷ[6hWc7n#o1dR0U4 O30]YU=NYs@kU$ղ:={ LVjcLHq6!jneP67[va$RR}DFI|;r獐sBgPOol—Lh[KseGN߽ :ld u9Qm ql񎕧1_fG!a`!X2GjeT{=+H QI'9_V+ΙXmQ/ $ uBNa˜Z99ph'pǯ#gӖ\c#J%4PH3R6h߻=ݬ_f !=R]qI3/Xp>]8W=y?gy6e%B|zWxd6T]a8.:VcԌL90=N#V)Yݼ(_F0}=j.F `bAogC%h.'V|6o;.@WCgHE<X$5KSҬ}ɓl+ c.:fo-e;ہjeg\(.:sXWK(.3ҋmb6 P)@Zu!v8+&Xn 99"_pȱ_21;' ]L=J(fJsG9]D~,$>Ns 2ʂ8O.K3Q <2HcaN3OʲVW &@/L=@T]+\;v#k0svdBYp qC݋b1a沲͖cHWZ%´%, _9l{g+Qӂ6gqAs8W/m}`!QҚ`3.yH/r`s+"`LL~T,;3N6 $t)$;UaAby52+,l# K'`'&BUԌ@RoQMؠ2 6A?xh1UeB2?>B?tI"m }38##q֘Y gZ X*Iw|~(=vvZmLV%^ c@GB:ҘN z`)ON l99"I~|1#r3V2;Jj0bAWo@J魝K] 3Rw<h6̩! 9BQQג25Dm*`&b0t4_fRтCsiؙc6Tz/ }j+8 p38'iqF+9V:!CT:K{x\Xc#Xo-T7RH6VFޒQ$12dBpGV:@FޝNFqxps9&QjƘ\py2G\Kt`srTqҡhճk-co%dfRA?\tS4Xt3kgt6\#'cNYF+Ce,FI4@==1޶KsRYNx9#4)`=~$:O&X į>%VP$8ެoPHF>r21Qx4b ?0#Zn%bo5x۞x',I䑓۷)@ lw@92O8g[r{sIՋ c}3ڤ Ny=VH`:s\GF8lОtV|!Z^wM8I'+@#l;c"I3̭^{|˻%1#[:9+I#fP(}n0 a2Lc$`g.VM2ڴdc'rU(;U0a#nzp:U2 V =,oL|c~@q`T1I|Nj6w rH `1Mm!@0;lqѰ:$gr<˓뎿_j=- 1UNJ!Szz[i?0ې1=Թj"d@%\JǠs[fVmc>,Or>TA#@2P718sֱX(\:H`IShǐ> q['sT>QPm쁻# Om$pd`=9S2!FN-Fst5Tpnm38}U%N2˰e\0TAn'֗\dH}=Z3xn.&V]X>9#<թ&TעG! F`0Sǒx#^ss ,7`0?4*SfLn[fv4q+V@:g'?h}s)يUrAO7{I 9!ɴ"p>s.G?ig%IDKBr2S֋xK|_:gcsd^wrq݁ⰤkVP`CB9PrqA۶8-eP\qӌwS+I21$힠sKت O# QIQ(Wj0$1N]N8$ ۯ{TW(2 |Y[p'GJG*K$|ɕQ^H=)9\|ERK1bsҬs4k&X2g>ƔtIY6$ a# mPq:j9G\2AeO; `H0pG8ONE1yaF%+::3ܚkPFT6FqZJ=]#+15vO/cN}jGQd*e+˶ͷ?(;>PxXKP,8’w jC(ܓ9, #93wd x<#hllJmcs+p`s)T#vqOJ<О(`$w=Sww\?zi_mdqa$t$0pOQǰ$V{siӞO 1\lԓwJ8OSQMiԝdU^2:LA>[󡾽&ۓ&#c' 6 # D7s/AϷj , $8ڽ,k3"}/Rߢ<<\4Rem$]hX'c*oSrI3U啕sGW?&s^HK1Q;ۓ85gw0n'rdž*7>n08RPd=C׎ְWbnY%r#MF~dUW|,?(1]V9&n~q/'vTALޣ6͒?;+Boemscqq%Ʌ6ڰGH;AF j.B+T-ޭ 94e` T ucXxiʒEsTOE_3'>3*o0?<P""q'q4ǧ` g接ͬ \tqLs] gb;B#o=8<֑2z$'D! 9+3 ̥B##v g#}+k%sJv9pp r;#>N{弁FȬ ɻ$!N+HZI~5DvM+ |ˁ$V+}0z1ŽZSZ{~'xO˨܋ж<WvC6zd_ixwN8n}7[9OһSϞ:i-ə[t\c督m2)b;r!FjHZP3뺰v&,3'#PG߭9h>)KZe*x.6$`R݊Z/SoK K?>+#S}D ,1+;(%$4IcpTE21W<\^Vǜ]y!VR0˻Ԟj2 l }A<+̩+ɟMObH.ne)eV!I)H8\ JHcN7#D7= tʀ`it\;>Svdc#T1]wR'wa\\e< LsӃԮe-ѐ9rFF8QHܬHyS- WáeqJz3lĊYNY8`{f5Qty!}s{sG'9,[h3$l3S1%NFs*`w;G˴׭ ,G r`Ƭg10˜vq&CB2 F`__ÚRI+FdϵPXطsnN@b2p=ZU&U0X#\6~\ >qiRFT \r#zbᱏ۞7>=*zXAN3ҙrz$t70#é֘{d9c'2> A݌H:rs)*Ǵw#Z4&:=c6rP۽soQIQ'XH 7@遜s{ 1HwBz`< >V{PW~~< 47uݤcq{`(z9H.Wă9P4cs+DID<{垠Kn,zI7e%7*# Oj;۹!ۖd-䎇 sXd~9S*KZL8P~eȚH]EfI28d"B<`0f鰑䬇r3!942>eK#=uU{fF |*= :;0́Up;$@*Z(핤a2żeAel׊(7]yLYX88"xe,(nAxVbPSAIA,K* gV @Ӂ區§q=uWgIYԙZTFV61 ?}kݽ"E8PA8~˽+˘e9P^0]z+0Huᕂȡs;$5=F]Dٍ% r(Jȣ%}HğJ!Lv8Ľ0Kq? _n1O|3A?/AQw9_NRİy'ItrP,}j61pTpNqVnw>k)݅g9hqIVv9"G;ON{楑* m2wcQw(1o7*Ls?1cָFڝqB2(C՘\.B%FIǻ8>rKc)}ŕˇ`6xl/VfY8]$=ikbqstg }+4[hS|X+|UXZkmѦLyw*qǧ9W_#.dp[j;qA]oߏ "e3~.h.$~p$#v*<<W AA,H8_a*[YTs|W""\L AgԛI ԑ?VS4[qv#jq\py{B[q^{ҹж)#x'0pOl-뚕ر9==i9'`Kb9g>z]" 㑂O^J ߏz6^Iw<z=j<zzVFmX or8';r0;ݳx'hB(x8tSJJ^Ns/Ό${sJ[gr?5HxǠBWHU+c _=@ I#9>:qZ猒G4&wl7Oҵm򙥩T8˞Br:dXϵb[L]=FȦprwtzt!,r#>GdhaCO,1#>Kw%wU6䖭%-^8T6 6]L0kry]&%*8VA_pFSM.fKM>+;x.rAl6TqԐ3S;I;w;} z>Wf"xW~9fzW7q1 o#JNzwUf=礹2s,z.YqF3j &cgtXd31K.U-x>Wۆ?7B829{;;C7dVoJyNa9'~3,=ċPnTt֥Db {]fhۘpT60f6TJv03J42INqȬ}$u$'Lؤ8݌ ؤM)H q[lV;kp2p3~7@1 zZgBrF'ҳDVqDNj4/ "4m'9$uI[RȂE_\ gjyhQ$` p$֑vb۷H㏯T7`a/QܟYrc:9zg5+6vn x9馬è<K *` s=A1M_"*c>cXXc?my4&2( sT#vvP #^в=xc MJ`TC? @<$<z/͚<*жzUeяBIu/2l̩`l  {juTlǧcJ ʹS #9|X ;DgdDSӳt'L.O's9 ɐp\d8#皮UB1d8$  }"FrJq ն^㌁uM/RBAIQמy} [J5:C$*vp{UpA/C8n*(z>m!r6H9^zoLa~VP Dv~ cANXU`s` 'VN:ŕd3g3Tn'Фc9JS_y<ᘎ{*3ʦ9ϡ F{ԪhN EԳ:A\eC `Ky:w{ ]zBxc6#y?Y&89㚟b .ës!ڹ-3zb֠UF1s T:N$gK~^NwtS}90=5jsʛDN ^Tlb@R?߯S#=hB]Q^݊ʨAb:*v]qWsrvю}MH29PX}zϳ 6Tq۵{TG$0 `iqpy s|d  ݷ#<`uنx#:7>zRٌ~#FONOOJ[ʌ+-;`qY7w㰬O`ې9w?9*8[ s*Q r ,F0H>=:U|*n0=FIQN|^6,hnI* EMukm/hF`IiArwKوlIp 6@좢6lYp@u$ڭUL[ E*OnzT0$p‚ylW>.hc<1Va..7aI=1+%Satsڴ\ zdב]sw 3ӎMtWb9g$ip,yzT[7ru8,QߵzԪ(GWTLʰקYdw`UzTU6eg5: RX) 9zyˡnNcd< !“Fsޭ_,K d;KgbF<棙7t3qv! `;GzjQB9Umd6T=]td⯩(>\di髬GBۼWrZq]γI|[&4+H==  ː$g'!yLE /t;d uyGB Wڣn s䤵x>[2;ǃ_+D0egbw[j_$v,V$O<'.tĀvl|0 3;hbJKdg#&Ypy,@WyRw IrJ?Q1G9_?=ic>_8PX`Av;\ .2gjp[6=2@9zf h#` >RA9ƥNc,pxcU}F>PYf-[ u ƣ)3SJ `?.BXpFqq@)0ל'=hlw. ``;)rA8AT};SLXdH#$` vIb2yҕm@APv rO#0yS ˃Szrl?v?)9$:szqH~r@Q8sӯPPܐI@BgxzԄ{ J{`s*:^;R~_-s>-/?gX@݌mʓMz8_x<RKN @x0vRgOp\c,>S fn>2x'=xE,odQaP|,}3ޔ[/2 >P: N\RO[g eFqIR\ɝ4`΂yfy6r1ۚ kP1+enj6 ryg~a[!CF#Pu8X&Sdp@9$fj_M*$*18$Ejg8TR0Lmǰ1MSC;;dsG5ж:VȒXf,?.W?.3gSr'7O^ZV\e՗}h)n]7BO~U@ܞNOz$0sÀ`=*A yzԿ bFw(0]q<}6ڣrG9,ÿ'װ5bBB w"'Þ9![UpAw/W[/1N\o#&$>A4dxrGEFFnOw@鎄^33޹|s0302}0݌AMqϴ6ʜ$s>^}= 9#|8Ux8'$}GQE"O<{S75jG!2qׁփrEV,I>I{bĂI??7zqR7dwUq=[Jn 1'֤+_h؇q^?8L d9?4ݻIqӯz6֌rx) QM+ ˌ3x%nI1f}{ 6Ib%` 9hW~fU/X,n6G-!0HO</ZCi۪IoPV3['l.K>`5mmgMm=4,!pW?E<MUG<@%Hu_9?qEKO_3aHd??O;4ai 'YpZ4 FI`;g?sjY8򪲢|7/_|ţU$6)@, 5Ac10g$U]ۑELk581ϘATp1 <_IaI$OZjM2:rIy @#9#AsWᾆK^b3-6>5#W-M3fۈ`@y\,wg, cbU<õܫ0rgzNPլU&6Ac'-b䶵Y]}ѤRmYx;e?01` cq<)8қc,:0 ]q8,I=2;ԱbT`vבSXe=s3`Ò~^: <a4(Uӵ$#tKxԨO`qީ b;az$'v%G9UrZ $tݐ GzjCAFTSގmF3at0q;Ҳ31`NNR+;Sn>sYǩ^cӋm##M=>CkA_\ ;NsԎ=j.>m2 =x$dK^1vBܟJ|ñp3<:{Tq[O.9*609I!j6*G!HΟ>h}23SPqL5\? c'zO-p70px\Rc<|ˑu t'< qGUC,I2) ޽8ͨX%d9ԟBFi';rI=rsEaqr0IAsnu<QғcJ8_]<(l=*@9Hs+ǰ8C`r3H9 gRowL}\h ߐ8|`:J$ #I4HhdJmzs+ԦlQ#4- Ob99_pć\IrOZtA>1PvpJ7@ NJAz:ZבX`s>a*6s0]~uJgp/$`ǰuVo7b7 dU]f9S>j9lU.T![.A\`?B]>gv$Xձ~lc&&SsbH%H @1#+,qx#?NT"QXHu,}:g"bШ9;>y\ ۄfGCք!6 i3#ɒp'Oʊig>N v8*,mdU#M͐k sӏz-+ֱ%]ܔd;@JK-2eiVCHC1{F{ןK]K#wE_*B2*~\ⲫS_"R|ٜ;ww r=$8yx0:"y#Q˩PI"͘c*30^#O1C32)X`/;׍ʚ[wc O4$!\d?*2q^e2+c#9_9ghG-\rLEKagCdq5fσQQ:tqTX=;<4=s??:q=؞z]/ԖY\B}3Ne>8hOR 0s`TAf=x5,!l9&2I#rztk ON<.܎;O|vOrYC un Kԋq})ZAc sT{ulv/Iqwn0.p StMĦ4U^Gn Wp Sn8S<^RD(m;wź=+櫛9K)pIG׵X4VJw︛hc z;kJX(Ɛ[=~W=dHTg|~LI)l(=J\$RCV% zqt/"b#yo5e%wwk' <$t5YG,q9 gY#N*`dkD>xP>Ezd~6sJ~V#ۿ58Gl+ ;6yWC˨n$W+'aNWvrrz2eQn_c5 8dzfc]@, B}[&UӳrXSDYsx;vdd]:ɵA dry{٦|5ކKlaFO HoIy˱%Xłl);=Y’wT=qQ$iwk[kv+e2uf#]L˙.n+XVHBX4)^C/PAϧZdHc\mVTui3^\ӓZG\|*P2:Wukϳi&| 3rF co%т~켑[YNdv;C31if!rS#tsj/5QT0 ,q#?xs>N HUslK]hrFE;qkƫtU*ۜ+֚3Ok+_'ftӎ2/l]#߻n7cMyn&eRa/]n\L: &{/C{d*`r3ڭapVݙ|J:$ETϵk9'-R,`Τ}Ċʐ)/ WnAW-L9C,mu^zֱL{$TpI4= #]`Z B@p:u:-H^* [˃ fxI 0 !n(㎲! $]۝c^x Z+K 67FDvcT3mn+3\O*=>lg#֦8UBeUsyw 22m T_=8ɷg1=6)󱌐\gg47erY~,@ W:P| T9jZ(ed2 sV##`g=oܛU0ʂ@stؤ*` 1991SWUv>Lqs֮PaUw7W)#121-Cr<10z~q8=^4~\2~#N<[v윷7|Wp8|d6>t8#9 q#{#<zug#'i[ xl Oǯ>E;@r9}zҙz`'8?681 zQQ;$& $3g9&AͿ#pf(F"`pĀPz.s(_.eΙ,i-+q hhˑqZлC$RO`ڔtVgI8&DA6$xܧ*~n J 9<47p;I=OQ5 \d-pv~0jE.$7NgZk:j碯Gni nVFٖ#yo+B3Ŷ]9c=7Jhob6ܢs)P1c#k;pV;yP;#X-8P''1'3T{GS&a$ƪ9gNgbNȀP p(ҹsF%vv:՚-kث R6BU!p1NעX,Ѷ78weGzkv9/y_e٥ʳj #B s V~w)EU|$2ӚJ脯oCB600*Kt8rS3)OƳ{QkLlM+y@_$V=+$cC$3 u=Zٓղ;H"j0@#x4nc{;]JR`3d?12#{`bVJQeAPpr:eCl/w[axcLg+g{R'db8?0ðو v i=C/s/!6H\3붷b+$nRe~+BVv:P?8T;%q1mOӚ{ J?*e 9$HX2ʏ Lr*/$db4믲߆Q>\47SW:dzo-n ϵA@>f> y9R2\.Ad|/OZ^3Xcy'{ ~8_5w0\eg i)ao(=U} r1ԃ#Arpwc+"ݮϣ-<:1k6[ar~]9t㟯A+A>]2ycULkRQ! (8993{TNy\5X@;`~) B='ȲO'TǯZSX98 ӨJL#߅0|9;X1+zO[Wqlyڎ:N;9E@[{O*T'㞟JwL`g;F@/r=;* hOv8qޣ8zJzقL{UJAz٩_EyCpGA?Oԡ`zt뚤>8FO#qӎ8ҥa1-{~$u2&f9#p۞֭ǶD`+}5@8r3H%臕 ~9oWs=tv~^!$0ޞSա,L4nsj傟^F97m Qg*yAǧIZEiVl9MN~`8gڿZSE&|V:Vvz6t&]L=EL WVH&ۀ{W!|NXCpKc9sZGt%N)|8jy#`A:k+Rܡ UV `@Nrq"nk"D& e %0 M8SrFsIMq&FxXHǠ準iyr1.B2GF22=*vM3P$Gmmؚr7:1nǵI_zWmH|!$7ϼ1&Λ`ouFPeǒ9Scm8ŭZ\\M5|/G4UM"XzE!¾OwSLq3pWչ)!4) mf$`C@ I/$?2tҎpbK+ *ĕ.ztp2{]e㍕gHP\0<Mz 6hiϪqc9lNG=Eceە+*ЅT cMj2{1W"v 0(uNzM?"Y0;s*>z0a;XU+7HO(?!!88'#"#P \r8285igFE!Ll2OVdݮtg" G9BC:bxAlUm"ugvh|Ul.r0qzѴW<]Ov]4gTQC G"" 2a}+Bl?u~wnHc$d\\`y'޵v87S]`61ӏÚ 1ǖdU*rW{|$nn qڸF`b#F㓑^eWHq2YyddBRN%0AG8`Gڎ` J|PA}c@nl3|Rmg$F9;0HU9+x`"9PxSH>eOPe3`A8,%C`iH 1x5"qD)A=H*\&1$3pWa]@R?I{F8'>#8N0T#$`~~r=vOF׀eON(5icR##<žy{Q2[:tE_R?[q <?jF0Fy@S1n-'ЏJԆWHSp`I}g'ؖ΁acqU219㚯<1!)#!Yj%fܠáTPqUr;=`>564] +I ۾j€VRrѶh ֓Orldž%C]3QfNG$gyT2`O5K0@=zt@zvsJ>~2r=R"tF [5JFnG‘4R(q8ϧE؂ǾA8:(` {Qqs>M}+wn9Px_H00Yܒqc'SwD_sRߘLo_c'^~{NrPx<|z>T̙{d`_h"ݎY'tݎS=P@LT=tqF;v0#1錑8=3ڠȨ$ @cҔz$qo<1{lv%w>H>!+d2GL L㪐3ׯQ>ޢt'=zhu\&NO_0j$8]=A HNpG_#9F"J+QlFe#nG;NVEt4@T@=9# x v9%JgܶP? *}ex<Ғ$%,"\.z6%88=-A/Ǿ2tgTx# ~FJױr6 g9r 5O`mgg2=V.2_DgRS+O#=j'ꝌNQ)8$纃XӸ`6Ny'/^*.0I88g 5d OrAG's3SŘI8=9 =]W-ѽo~񐫹 9u~@_ rF9WOCP򄌫c į|3ʗWO!Ln{u1[[w"KJ䃀N3s8ݱG!Y`G|zVKh|p;tF}O{gIڹURwoTi×b[ZckZۿVR9n1cQSf'8Ms M&ܲ{V')?nrP21~*NE3??*Y2`Ǒi<5;_r1i]\ k5K;o@4*?pǟJ]kevv>vwp :3,㌃ןqڹ2_Wۂ8EfǛtg8+ y̧2܇-YE$zorOAP+%[4r/>Xqzщ8=8tWQ7\*8ݕd֟[Mz]9 zt?Q}8wp0t5OLP3$a Fp4ӣn'v9[G,H.Õ==qr1]ʂOWv=u9zTUbs=OY2&mop(Az+;rǀz\292jHf2 6VDݴH[5s&L֧G"(vO#kW&JfO-[S4oH8W(VBrAZ@nyc$yprI c>)_Tx#R,0P={CH ry1>}=0`.ឬq1RO~(+l.pw q} x<&$GJj;I gM؜6p<66A{PTc<?'

{@Xw,: āH~=;QB=A9<91EA=2;{RJ 0M;A`zq 3$u '<N>aOHp v'#8ʞ;s`p\:>b].z$۞瑎rgCaHN3Op(9<|TPȪ,ݵs;fʬp[0䓅 dªDHNs*I䃀rI;S׃}=qQ#8$,:{j€^Q-d8;%p{px橜ndA\=iY$2v6NNA=+!BBi,v3hDr_(\ȧ}U8l 簪^D *TbqoNH,0M  zIܵDl* HcwrTH> [`6^wi^Rc.'ʷ+YeC`7c3UBt[i#C0sz=MV㟼[#S915f;I(=I+( <ڱH]ҥ)EPQykL, gw%g 9$}+xklp#Z쭬-<9E$瞄c?ZᯈrM#TO"It9d\m`0e]9x%xd]Q8'pퟯW~cji[$BOS>і@0,ջ˃ L Hê`oKRL+8IO]_WUP!AgK4D"@rY?*1zb-%r啾\L_"BB1nk(Krd$ `?0 }4z׃|AoVn N=}k纆[| lt?s_;)oetG-W>E-%W[<H=='&ΨG$Fp88$?ޫ jR ܜ{p<Ҁ=pO?{<ӞԊƖ9Ў{TI^NOe`8՝I/SI$fy&f*I}3dZn ;\1T㿷_UN=ϞPh[[fS#n&\O' V]-f%0\zzs^%oKEX)/4q$mmgI`[Vq1>b1:p? Ն+r+aN"|G-v/ ;4a8'sH 2,tcq'159ͮ_vy oqu48eNϭ>ڞ\J&Vx+ 'h(v求 G"7`qҶNϯNivQAǽkMS4ea.3ϐFGړLbe$ 0p\N:Scil:}qO\ʀ;G8*Ca.;Ć*Pl x20QrK}=~lGZ7=v[#=:q4;w 2qt晒T Hs:h682ʪ2N9nN9B!3G$PV +um۷z`+X2I>_}'zXe W$8z5 8X3gWz/<|=IRx}1MF K08=E9F샳'hbVRw`m;uSH(pW9,F WgҕFs@Qё.j=ĔN9^о}hd9x\u{ԠuV1e98'tZ]u7.X8uRLrV8U8瞝" rdž+#c#e @V/p ~ED`t4y %vc<}*\[ygծ& X،l`FR8ǿKar)'9*ŽFoCco##qQ#RГhG P/$g'l{֊ ؀I'>X$8Rר!9As$ddqׯ4na;n9= ai*r͜$囦g<⬨ Ĝ4N$ @HOJ2Oc}>0%.PYbG^~Tzq#\( 0ی=[ Zd,OABry?rkbɭK0#n_NA$g8KvFk~!Hn&g_"G6 F޵?􀷳>"!孬pe+NV֊G-j}صmy+glsq7ω>\.C;pqjOuХRoMly^I<,(89dTH;p>p;dq\U&z*j65-I.я䁞z:kIMm'!Q\5= *Ҹ-oh\jQb>svN伆v vr-x5NJ꬏o@劍s^["Ӄ`v&g-,H4MF:K-;+g=HZ\VYX&Fr jFӎ>F8czzk7tn7vqZ]ʤ@w\]CboAp @PW5^_#U{,ysּ{:\Vog1rOnѧ3")[s tcECm A/=8ptVkQ3A'&%mj^<ϢSGboE[EZZ$wNN3u7עH$d PK?4ߴ]6oUNVR +`VG7 9Xlzu_{J=JAy{WG_:MKR: w=q p CӑQo=rQG|8 t˄*+&IHlS8Fb``q+niAxbrA$8^ԣ w'n\6 _zpQĂq R&9e$g9Lm4A}9Qn9eYlQ CN˃ө8qFT 1T9! O\0~asMR~ua($J9`0`pv\{]QaQFI;r0U`m7d,2y bgͳ T2l6⯎NS֝ 㜍z}(nhʱI#N͌cdTCCgcrrH 'EG)?Jo% ,랴!y'q'G̠ FT Coܣ 1$=2*^9\`Flc`9+#ne'$s1Uhڅ0cg遀j͡xYFdS-OӬFeHWv!RixԜ[g O `_"2ZKfEWʡݐ0߁ M/ŽfVfb$FlW,>XN v&W{pK6ye`R:5ZAGΠFGiE=ד#DS&߽ۃK /-6DmIE,_(̻rzs['l,n[hIft7s_no:GLqU@W_4WM$WЭm$lr3geC-sLq7C}|"c1  BqTrq=k0ppNp_'=X|<6F8TT.ݜ'ADqyef@ih`UNjI;Q>R~`gu'۵y=*rR9Hrx#xRwN*{~+; ɳvً2su5[|vycs{v@;Q&WCt=M_-4S!I3 dnkG 1LH5l٤lusI=nz1bO'XCg.*6Fzץ!g^/?h $ :iq3=cKȭg:n[=z<Â}3p0sӎOAhNGLdux?5ex玀gƥ鰤&2Fp:qsP?\@88Ojk_VB!'.|S82\y>~lX͙aI<ͥ p=:qҬL&B#`?`2{V^V>枻tt1[dam<.854 +FvisùD }ų @!OZ$_4ʠ(ak6g{V@GrH2:=Ԍ\(ܬ8)zdcgVU`(|d=2qY. Cc’s߁WTLٛ.Ly N 'AwB`|`]A'?Еԏ8/pv`ȸrrT|$P=8֦N4%Xf[ FAPg>VZHᡙʼd bے>W0h_Z$!+QBW0{5 PJdw'zzP#FrTцB%cc722$yX!I8'ۥ6Kq!2Ɓd 3al=x8X.Oq?w+t.yᕓj\9Gx%@Px<0}fW< s;P=* ̍ĶQ#M"0]B>OS7atCjHlyl-E{DFMu;p=x9E뙼@|d\(m> )/.$E -(RdR98' S䬊vA$0kX-Ejeĩ*NwV% "RI(*gwt>ҩȤ X/ )^{~RXZxW*p%H,z9;XךkQ2–tLr窜d#px~;]\qӃ10f;ͳ9ˀX1aס^5t+XeUL u N0^эǁk}'c*?(€BZ_">GQF}gG{JBŹ'sf嶂@<@`9nz{V2yd ۧ+I~Y%c88\GCd`߅7!l|ߏƼQ} >R ?jj=7ŽEXI qqBS #{ܿl$f!'(uV,0 2v`O|})Xѓ6!+`>u,grvuDP񆍲}Zz3+!mM V8ض-%;GsMQ"%r |}ԊHvT:*W3gCԓSơAˑ޿ ٟ9#yyNB .>TRޫ]D~=A zsONB{89{ʳd|0rCgm>U7''lj6eVCzp*fBhTPCt>QYI٫~|2P2~,zlq֌Qp pC3gOBX"P9Wi!Wu^ KّNn+ҧ'ϝp?dp;Fqv#0!2QPHќINx\|wrse)Urm_N7e$^fH߻9$Tf,y$᱌ǥKb%8'h'ǧ\cR ޔ_9wQ䃎q1%Ic6{hdyeV9' z2^n$p\"TaNw=yܜ=ޔ\CdbTr=(5LrW,AT\Vh`u'#jKB)۾{sjה;HϷ?MK^8ךxDcqg9D:>\tz9'V&Rfrp/AJoz `lrUw32}O޳`;lԨL$X_j vB[gǮNJI0}i C>320F3$#v߆o8ß>nqʟ*:'.O!~Ϯ;?KKx8*pp \ M +n\G֙8϶9~zdӏQ?BROϝ#=GҪWz?& CF um=ib`G$Hx;@|znG#F֨#~`\  @=TE $c- 1׭RSFNp :{_H&O˜(pG>m 1<~5Iu|䟛T6cNN:R@؆PpsNpT[ g=6`yn9NvP;AR9Oҫ}x#z#Jܬ>nu:%x,Cp7Qt-<׀@-N d9 e8}+ўJ]J:,6:duUDl0㞧kȖIa3$#O^NI W߈7Ι)r3^npO c׭[# s+d}ӹԦC*<h6O/f$clg'c5e\ c=95Q[D1tyqʫ>T2WD)mH Nzu;{)d(p8~FMY\osE $dW!X7q szyXD9ǮqR_9 mSwp׮Qv9ś<6}OL?3&jrOr>l+ZйqCc>% LGOi3+q {V0p<{E4ЖJ/pOE9#ڬ}'ЌϿ*yh)C,:rq585 1#9'=?Jb]V?Ǽqzs鏥\''qSĀ8:j+l%Q}OU8+}r9e'Y1 @C ) ]О=yV[ F9|OVՂz$#k~ʙ.[p`t$O\dǜv=9ڒQ,$RsFqSh<. ?w?0yӊxS|Ż:H]@#Hr?>p2Tq7On$^aa# 2O=)P?>}AD^X#syR9G\é,;Ԫo@2aB̹`Aq8e6hfuӚ8}YA!P-$pX=NӚ:Ta+P6hLxw6jI`sֹ*bԎ1ycږKYs7$T(𥷁8<|ɖ9ndH=x+ѧK_g#m1`d`cnXoI ?G>»(tL77C }6DVdNv[+*:5H\@hYO pɮgX)uų`Px^5#*38 Ӂzʬ^utoA+A`z Ts,% 6W?79^*4hB {MFû;*I6;~`y Օ,9 y¯C).b9##ê!7Hs+Yb CqqځH@ )P"`6w峞sӥ!1'98 r~6ބv0Hv N t&..O9*0?,sUAz'G`$nјP6+H<l!zӚ` 3n~ecpQ bv/C"@rSrrR8 T#9JhK3һqPIu=@I7מz;my֝1KVǦ::d61ʹ8w0\M%$ pb76>C?J^Ϲuiy;Wrr,pT)fKn <`93`z@l1|r 7m =g>y!.ą|1_ci܎FV6-ccQȈ'p)_qLRcs|ò\cYt؍ G)4 ;slSdlAw"5Au@Xp=ИY-eN~bD"oIv*8߸ak"ħo%@r)c5VEsP+ VOWqĈ Bό М0+WnOSᓊvUnz%~97'8\WJS֧I.B.ܞqӌPay#}jlm7^_=98a/˜9NȒ傄PrbBǷ[j‚ ޜkRK!3:#8I黒{-m4qNǒG$à#ֺ;87vs)ȨrO#rr9,prqg'<43N&€'a8˟3۵yfzwQ~em7K֮xD,N/bO_ɧCerp @9;C>xfk1`` oۺ4ۛ<^ qOUӳ[t*=J N6qVnQ v1IkkK7;gl۷rT$hZ?%G s?ZmmPc=H;FxNG"kEEs,qǩZ&)u: Fﴳn-z9aqzRƐ27͹q88EG$d8z2Ҩcف/r{åH[b#գ?#?>s9$Uk]}y ڭrx.OaQg!0'cH``~Q%vrN}c*_~<s5O <3dqܒ88L˵%~4s׎iGx6$pON~sӓہ^sӟLTϮvRFqAx1t9O'#nz) rěXy$ڰgPTr{IZSXqǷZR6sL NG-qjd0FzW55rr pH?1Z'trx6h.2H^W{l7r8kb-$r(lrKyhAb<v62J0c5xWޛ2ء.%902){c ѵ>pžyQmyMUi2!- 3gFlF#xTa>t#B m<{U"G ~mÆrpFx&(o;{m;j3zzǯJڲ|-  G KINOJDNZi6t9=sᆣlv'NHY!,UGPAHWd2\.w@RTrp~oz~=e%.Fmc7 2@{ւMd;N•קF[]NK)G'h9Ǘq^|Dה:P¬1d?2 }kk[ 5\OLI87071'V998.÷QyDb2mʱ@&Ђz2mԻؚE[~VdǚKXX. vbV= >Nu9_n!jŝ#32EUIe $q\Wlr!J'h5G\*Сu,pđB"Xc!:."8gby$P198e30K".ݲϭR(GSv]3n%N<8sHҙ~P9l(; '`sRA sOzIX:r .8Ң;ɂs l57Au!cnsϿ# )R/0pAӅ~`\dzz*TFN.e7mcqОx9݉n\zvRq+V/ $dqVy*/6/7v݌#ZB6* 3]'?s X5 w pM4Uq8Ǚ9,aN #|m; 1cA@R6qWy*0 ~psV#8;FWa$8$`߾zNݸt?0A؎E;Ɯ0@%9V+`lda`1Ih01c>p7`VAMګ:' 0KSGqIUeflaF8: -F^3H XdNp9Mg3ϡx+ʉ N<\w(#81$H "4c<p*9sܜw늮,G˜uN:h&V)rFkm1IqqJEp~R~Q0zp)nDg.Պ6py90MBnbcw)<PIkHt'Ң၌dU 8BnS#d`Lr%W8=HT`. =8KP-Lg$j̎P ӜvWoPrUUz 89+dfUa<(׌0(ݏ-dUOUfNJmY}{=G-j<5N-HGla U;Z82&ak/z۹,dzF8F2Xru|@Swt}OFkQaG-Y[!G _]M7pW5V$#$>L3x/i^ k/S,-6";P@@'UGaOe:M=G*,70ypT0]XUr¼as;$2APOL}+diHT1uOOCE t7=q %~öyWIXen8^ONFOm#01z`pj&`Y~\|wI̍$\V='RysjY3#9Đ]ȐEgJP:&v㬅G~3^{^ i.fYdc y["j7miWnцoM1{7)2d\`?/q[DK aGΡan>Է97,t-  >f`gyl>$0oU&iv狎~?pӡ\ҵ-T1#qN:'//-ZRT2?ze#LGNٖպ%IHd IǿLWksy( y!<̪}溰YKw~Us{^-?JKiO*JrzsL F/x#&vϦGW2YAlNP1Ң?)SI8G@3ZG{G x`m-<5P; 'מGОg?qH<:v|9ӓY`^3v>;֑9Vbw`gI\( y9 e|2,e GCM45j8̹!NIUcƞp0d!}{!@dg7FcK'$篩8:zvv>ꃍF8sӪ0c0dd!|X~JmCQ$:;J^]i9 qҹj FH >%n9\ӧȐ F; cʶ:NIxnq##́x1E3˯(_Ñ_Ѐ ۞c=D { s |9$?(\sq׏H9rr 70<>]1Kq(v>bUc~vT/$y4' G?Jkrc_c=A3{J8:cg̿y$O)NLŷGGf0VXrp.DhuN'3T$nOSS!ǡ? vGFxnw.>^98nUZgd 2 =:wS#x.@_~mrCsY#"#;yd >V*J\o 3GB;KaeeTsz%bMNKU4ǖBT>vTs#Ҭ;˷lJv6"5B}aRQʂ@x Lu4m6.mp rx=G/݈_x=cd7FaU*~e\ x"U$ʕ@w!Ì,gij30r$!~ qT5YM(eQo0!"3w:s=b'7DnnB@\@P yc`(.NAȢzvd͔[cpn>qҲuMM91`& l<ܻ3H]Jgvм㡩mS9lzp)t*3!$88wS]~Ӟ~`~=Qxan!nC6:9+Ѯ}ȧ.6pzP}hj~zw;3Y/aH2Fss]W+vCfA&0qN::ÖO3n{p3=XcPC.x$`v[;N3,A^,3ל~$`qfkTtZ\G[l+w*+һ֮ʅAxY[8 x>t2>m4BE6a6T3tGV;X[(=x# v4v~_|R12BcX>KWC}HfyK!3ۃ_a+7}(+}ۆԠ x\g#V>ci-8^ oo3К* |8*Ϋs.@rT28 M=B)= I9?{[Qv1H㎼Аqݽ3ۑמ{$d}1|ҔthinGWkUIQ 9[:cc'޸qLd${s߹#؞Iˠ=ӎO”`~4־ZaN/t&XЯ$u F^{؟_Wr.3;\ OMx!e@rzuNI 9~l'=DAIl sП^M8~(298ϕFv3坋F@O'4'¬_ 6r@+t:TKm,6tC;rA8aNiel' K)!=ْPqR (]|q^ *488A# ge[y,2J/)AU)].G$wNGyX7_n3ޯ2w{ g?SLae7 au/>ÀNs})Y202H^CP8|DU on (l`dF-ҩ=1NZŒY5{u98a ':~U h<PފZF=}*> zxԥsBݸ\T@rW3څ-JċLG|S=62A##UjKb2sNORs3ڡnr8 qZ/ȝ #SUO98lt6sO]:F,2J.ݤN7Xta#iN mm|1 \O\p*O$`xE+PF[k35Wk,gڟ4"rFw1S ;1CMv.>\qs>*yPJ1S+xw(s3gvB1Ȫ IK9srJ*Hߓ9qj/V$[h=n+ŽG?Rmx$ggc+2g/L&`,Y@g̤ *<õ*)1[|På K_-FۻtrϭGE\HpY NvߙYr [=}*ԜnҐN<R}#9'޿JKah:v.T<U-I \'`df0=r;8l``}Ԃ?*Vx=5C]bU <@#́Tϰ9A ORL`>I`psrxiqsF 'Sbd 8~̾ *wrIg~x[r0qK,Cd>1${B!pq9=9=jypOoJk=43~'Ip:@Eܶ@Z$c^1[ojJ#jfu y9zy^0( #] ᜳtTv\mҦD9#kOR=@1֧Fqr;Dm8cn8'^Pݞ.*mdeD%[w hT|ۈ'?1R;]TӕL)-㎿T㷷~Z۔Nù/#΁r;Usb>Ozur0^A93JvF[I#uv"Km(@sNIt{9^皙?]Y6uXg#\Q*$@`r:`PlR;H#EuIS}Wq?(XvB98]Õ`3-F7_;U?"}p aU30Uy8qҰ%mP- ^ '3qKJIn;mld ycaP2Î+{7Jb#` x䓁1ןzc)}1)9J64A 1H=O~ՙ([<皞m~F\Ȟ"v<=$#>9=k Z뱲Xdn=y(sԞe*ΤN90ܥ:KBNFN>UC$zWNȸFQuH:zgM`~Xn$ pκciୱ6e3g>ʀLy|9<ףKkY'4AvȒy%*T=E!8,]BL8ݝoqCZxD)_44bn~ @ML6ј@O8⧏@7VfE:ylܟj9_JJFX#g9R.Xf>̙ܐ+W1j+3"ԑ"Ȥ8ǾsG0`7w9iT'=G GΥz1 `qP :`]vE'{Xn Iِ$*l 㜃E sKC<SMN`%O$bÀ8jia J] |?8f+);_ 9?(;!ǡl8= O9ۓz u¤U TH?P_/jHWV=۾Fqy^B,T Ԇl6qxEFe 2rIg׊9\{' ''x 0Xd=GlGW{0=?u<±4V!vw~==AqM<ϕWV8%vt-Gcqu[dv89r1O$ņͼ'ǿj;Q@`v}ǸI=%r# a7Dʩ460u;,lr[R%9%=? "v[qlڤ [iQ_ib̊rKsu*[!Y7q)hU@qyi&"Eu {IbILYש/޸|(Z ESQ@,xFATS Ec!s6x zcve,YWVR`m< {o}t]@ ͞-b4I6U^{A'- dSi7:/ڤ|kG9 4~r200㎃GzަrcTWlqęS]v2!p6sJ䫈M47}NI)cMw]Ã^6,@(#C$ pr۟LV~ZfiY*nֻ% rs~s2C7#`zW:-4 QI&%T6dwqљ-0q59X͑#1`Tw"|X'{|+ZoQMh9aʜ @*K^Wa{-~dpƁc. ؃Dc%c1S;DyCLơbI!eF ^;ڦ:04ph\v*v!C;v'̑̅Q"Mm~>w<50jp\1+rKT֊6SA#qNMn{4x+82\O Ӛ iُ8li^hZ{>KV 6AHi-O0XxSvWfpi6Qoe-(mdPVF`KtITwk U-Hъ'';Cc:JW${\f <%3sJ-S} [M&% H1Ã{ԍ][l$>9SԄUO\(tlt M\rO:欳c3LopD AۧҬNWs;ds+wԓ T s4BH9 3ƠvO_{ޅcHp=?2:cS1##qzTOlùUT'qۏ;G^8Ni=~؜8`C r}(c dz`$aճi'\e*,H\8Q1O?'aK١'cm<9T01ںL\F0'k`<2=2O IYts}iV!6x wV6%vڭy{{[R7 VFݻ=עA$ac+-,O(2܌ֱe9*Nh/u(m'ɿpru1&;+=^@ÐF(*3zZ*Gd?qQ{w#ĚWeyB)0x r,L7gpm{OM^]Vz # B9aƆ4?AV zv68Ka"Q$T`o϶zWCimF'\>e xPXGҮe8:0B+/|G#95v:RQؿ,3(-m7Q=c06a5. K*)%pWrtǨdHVڣ=N8EpZl #o18~=*$=sv9`O@ ;sQsq8E $ p8t `?sqh# $&soO)cqb;]Ǯϥg^܉̰TI?.N;ҥG[K|Q.~n8.hS؀8pTq3%3۰- @a=n`p#2W=F:Rq38a$[.Lp}ȩHfVGzN(jL>߳n<s;wlUF"o-I>9hbɸ10I\B}1UC 2+2`RpsI`:),$0bddvx#?(Sp;2r lלFu7vB:u(7/BG2!,@RzBM$cIӎE>A9=ӄ =qԃ:T_l|6m@`wȭsڤ[P.bV8t߁ozW=r98Ο/ N2rA3zM9=ȣWi|` $$ QсvڝM[g838&?.b@^:D_Ms?Hw#ڙb$-Qp9#ϭ 6mŠ]N6*c-csn^Q[ 2xb0d@:m<)F{U.!.H] H!V6dc+zƬ]9IV9> -LcJr䥟``8S2l$|k7\.G3#M !?4n n=0>vWn~d 8A CgWk2J'06*AW7N;Is,|$MĮьF1?ߗgkI˯Э w+Ggk^  ׵zN7V|oR&Gnw i(Z_p[aZ%KkyG; kו!2;[?@0s3 x+U9zt/mmHK.[Z5@y#=+^k'W]Q V8cOZ%^1FWAr :9=sTh_՟H0Avb;c95k{6zi%oCBc\"HwEݰ:# Fz\;mơ:Ens$HUK@J-tE£QK0qvq֓M4㳷140/*|$p8 3߹EaiTyw$ѻ'ץeR&ΪTJt"  %q^[qmHk3lK^}KϨO1]eHg#5 ~PA95SvZFC>$9V۰qcZߩ-~Rǧz~=Lɨ|dnaק>HF33ԀNğO֥cysjf$aql1ǽ3q>Z܇۹͎G~R@ۂOs'E/rpCLXװc9[GnU-&Oo94@mÌG[\<5^R303=*,S,hqA~觹?j5RʹNI{ϱI gG 3g8<ŎId9GTGǕU[@Ս!9f7&<0#׹ŸNJN7~H.WĪ$6DU2.>ꁅ 1y?֮\.k cH5c<#?sϻL(88jbf$C.pG[ڼr@(DG~o#5QVM|޲G52ec\9ެu|lfnJv[v;O6ݍdjp }ySw̬ą%pdpF{y55wME(cpʹO& $̅ªwYP tvB7g"|}zqn&b̉$eH,xc|@pZ mrO͝[ FYi&c $)?3Z#v>yFиPz]+kXƈH:[dIO 1ԙ9K$,8'1S/ :zErsGg,g9A 0ېdc^ԁ >W^H1Յ>Z<3|6G@m@\Qs9uX'0 :0Ji- a<$@-0xCL`q9qh2>Cl2F3ڱ tݚGuNV|:##Wn,1r^ '|r94zWwcNgfo5-uBu|6zֳbR_jP]W2O-,(oe`UَD]1Dg93ӑU>dq|q[_魫Zfq7 u4 A_1{R#!gK-\c +LZ:ชM^cXIs=~H}^5$l\ {W]iybSqʋ %$d9]uV}Gʬ:տ^SrA؏}މٛ#{q޲|6:+dko7QFU*9 ם5i59 x@bCd2~;8Ӝ=l:: -Et1>N[͐x:VWs۾NG?J=Gӌ`ش*9O?@{}*W8 r>y0@ԷliXݞA2OUJ=s7HN :z!:S}}d'*GnByǿnxbdM {~~t愈(' ;Xp=<}0zŦ@F=sߨ r`–WpǵB*HN I rOm{El$TvW߹~򐤁xj.W$~l`/?Z.0 q @7T2!A pڞķ+ǃrsWWpSgsS)$0e%z9L:a{sއQ 6*drNGzg{%t0glneRS }O UXR~d1ަa73?Fy $K2nUڜFs{zԧs-Jl;Z;9RgǹO(ܫʭ@<$]cRs[GV.JNrq8rzq^="_?RmFVvo &@q~n9leK٥$$$J|mhk E _[;A xð|BC.$#gjW(۷30c!K)y_QuqEaB!Qv)ؐ\26Wgrs1c$vjkEcy!FAQrO(|9? Mii<dPe{),>\z-,Mma|e|:J_8m_2:ZgL"#aϭRȿP*Xg8=\Vy,[$SVo0C,vܒ? `3sYKu x+Irjs 5FyH'W#p1z(94Ȯ 1O=zS: )ͳ`Uۻ$swN!GÃrr6myҘ& c=`s8(!Axۜsޜcx>I ݷp(Cc-<0'#z"+RpT{ˌ?J6)ӆnխA%#EltoaJ+r09dc>NOanR7*C0,q'U2*ےri1`x=A W gG'6 ;zbpNq\c>GOĵ1ӯq'Tm+F 龅\oٶn 8=^v{<^@\bu lCF{Qrpq'=SI}r$9}眩pyڮ!<: Q/RGPX[FsښaF6یgچʹa#Ңi.}!G{!2m\`xd88 +ꀄz-'oHqUǙpւ>U !dܿ\ҰFPH C1랔v$qXr7*H)`9"샶NMV')ti ٵBr[#U 2ep1OZLo-1;*Ls?6Sd`Yws$,rWـGkrWQ 8 N~^a5GnpFy {S"0=];Nq;ᇽfH99 W끴i~POcIo Avms>P=99K#8\0 KҜ &A2MPY\|?i7 1ORzh}GYG$9Sp@Pqװ9\vq'ǧ֘+FO9=;4}S#ra%{R3`nSw`'yW NCZ'BFzqg8E^KrvF' +T'UwJKɲF<\#<I0rN߽osM},OW/Q<۲#`cvp ';Am]g $d}[p~8 ?ֹHr[>ϭU(eo^AҲZ'[E߂ܕPrx'JcO^c޸:ޯZo9%o1~:k)Z_y5H\>9sH$1 O8#\?CU(MvsZ"|r!\3ߩsԖ0q'9#?'Ny?ӵe)i4P%RAZ&0zNzmp'{{cRۜA9`tϥfN-ʼn 3:nV1zzֱC-}O``J_x-ۂ7R ;}z⹥I>4ZK1og\5'@#X$?Й5IB 8bTZq=]YTRN>z5ڙN:AF r?oZR]'נQj2[2d x>dO#0듑ШM9>+3;O=銤߼w%DU/`e4B pzj[9PWA+o" s)YDF1:+}Ƌb[už9\N S{lg;I WJץLgW'h6!9NߩkVc+v=3׌Ʃ8 UNQ*}WG9 $u^[8V=Aoߚ%?P3ܾ_$gf :4!t.1D4H,woH݌:u),fv-uhubcWFC4}vh HᄬLXڧ8==j^aߺnƙ;@nGB2>s_Bl59&,xi:7'18)*\%co0Cc F:=jԶAjǰ#Um_cU7qJ#n,p2`,:cU׌reBqpFx?})@<nj?6F9& {g??ZL#%pN ROr;~^ǭDe#8NK3Չ[ y3_鎵+؈7 Fc}3\G9GcZ-cBR1s}e0?J{z8T~:n^>ex40EEbF2>#?֒ {A? ު ׽\H2I;H??*qRdQq1UJN.##e Tg޼c.Z"I+d'#=k&zsbhg'd֣a+r*8#_eĪۼpvVI35Q*mR"?66//tx'fwgdR3ג9r+N3ʜ.g1I5Lm8\Z]D7M r<) H72($n q!pvwA<֗2`;T;i =HX+H$;MWL1-sڹ~!6YQw sp@8SkjJ|AKc $+珙m< Ԭ]a30Fkt$T8I82Zu_xֻ#Ī{{0(ƧHRt _zŮAqj(]LjwmkZnUtF\$SC(D;W?!>V" W#b69$ mu]ݴDED-b$Wi=p?ߚ}ܤv#dA1cO$RdZ^O V*81V?*gyѻ0I>Qz*wʅs'͜ E2OYd2F`=ڢ贬]:I8;GT r|v7\'fTw2cr"dgH,q&d :qW6؏PCM#43ĘT5RD0?y2)<qN%E@oclUyc(m±nlG(&D0,BOsQ:gFUhX֦ڂe6*<'#89pn x±=Np*vN 'ُq8ޣR3@8%q=JUz0ZdV$m=qYcmYA,u uP S)+l`$ ܸРc#"(Xxܡ4 8*ϽKa=CZ">͏İ{Ri a0v23ONxnFF2 Fx*Gl逆݊.Yp*99cvLrrQ܃Ev4{O8d$u׬Otxtm*Om_C!N#Yws8BzyzYs;$HbF;S~#R8*Fe#AP1^ki'>pEF*9'8I'we7ҶhC E UXvXOnƸWIH$HF=O|iJ*S{.Fx(. qg;6|Jdq|i @'UtӢ+{2$EjOs9in^Gi|I_Q܇id ֹ'NAE.0]b^72={Uc5ZgRp>)$t{t57R0l-mas>[cKڲ>]@۔3ӚG;MhȚ;5gI݂NѝFuU˨jQo27!qIluO^r{-NKj:6v \1ML9q^kQ#. 4{&VT0] ZP; 2@ 8r}笣d\qQ!>\Ojۀ}AQ7#'LӠzҷ0e\ c0y'8ӯK{j:w⭉}9c?Mu1sޕpA >{S[y6 Ď>b>E:g1n3BDn NI>t[U׎1hMXA\g9v3ӭBw V=z֦lE@j,v8_o-Ŷs'8b6"BK2:U8#yTԊ~9tx˴b-N&%d dʣҰ5 [TQɕ|I`FK9 ~|_^:՜̸v0F `|qWϾ2N aG@|?◫>.Et,X"299!f$y>oЈBt#|"ݹfDr99$gV`)\Lc :ӧ5Q'3m[NdU(: S!  se,K6A$p;c8wj=r}1Ă{ZrÜHJ+61pYǟqZڌwVDĬ!Z3?>8^M}|MYSy7vC'tX8'=b9.!Jr@l($2C u<SOɑ( XuOlĽIU"](BflV͹eQ(R( QC{;!|xYTHX4)pN;\ƑN⥊c Js8XJbPb][9,;T>6#Yv cp>P1>qߡƱ*0~\/Qԑ6(ebI1d`gJȉjl28\8$18$Q^bwIQ3F ոes^:uF#>X6}7&HV7iJmzkQD'zJL+֡$!oBp[?;l p0\=rELH#g&ǔ-0#g$vJKc4Ub !r:XDz+K2H y^)bx` JՍMW>ޭ\+J*E?3)<}1]Qdq7;$HI' <-nO'1׊´dz{8X2]86?57@|ĺe ^Egu&vzV!y#1*L+drC`="Ŷ0?feϦiq岶2K[=[5NK v A.$@^Rؕ\"!G̫ H^"nu6mۏ/\lQmd*# g>&C3$98f1O`zsӾVAqenzS␇SqJl517?As=`#v(IMc> |?nAllS=9$8'攐 =>nq\wҩl1H x%@!FA$ԹNm,cNUp ͸c=:]t+O_<7n$́>}.~^4EyYGHR6V*E+ȣ9-xY5N6$JQ@].pri#P{ ܎B+%}]♀O i9i0PX{^tdaeH.˜sJBkx#<9IE(iH1j ;lM#Hwj.[>P<%3+<fuF.-z R)nE2- Jq,LX71$t8)j%rwu5#8^U_"*ɒ{>9`v{r8Ϩ[0A$緯auTf`7c#>c~GdBx瑚߁9y"$6Oa:p:j{hgG\p=?΃q>{@瓜z8?ޣ  ycOo(Qt۹L#9‘?^]j׎ z|{p{Lc*mzU]CBnb2IOs?7u:'=Б:'z:ry8 `ps1Q~`#${k-Jrт98`u Zip2߇9'zMVW#9G9-ExsV`B01?K)XtM 4I?꛻f389ֹXX<p7cӧ55. * 8ǭdI8T.7bW9/vg$|w)ɘ)}f)JeĻѓXp $KKbAwHVVx3ܯ>Ћ")+ '{qUl r;sMNol)S!bcm7O>bGnkl pٖ\p)Z6m+qB`m.@˘uU\#yk( 0XxH+B!6ܟ#9ZMlǻn;\(0%IQ_Z.oun4^Lln.: ;Kw12`OD݇IkMR `>q+˱wJX`# NE)Dx+fAbrʙPHRI$q\Q[GOJjBr0[%Oz& f698皧F9ɿw&x<௯ҩ+ƬH۵^9=i )$|?,r>[irU N[o@j@'$BP8ᔓ~ Ӻ?Ye1(®zI>R8,G,ۀpgV"nB+#i6E5DtJ`1Ԗ=-?RomH g=1"ݖ?ʲ^泗K3HIfIk!0N0IfҜdl,?_ƕΎmǡ3_A¨sZ餈'n ԅQڡQ^WR.V8UYe#wPf v܊z>w \xz9ln+9$ (>0@KgZ=UI$1duSTЌS{_ps#QY"%WW 3}WP@ |?tC"G|U`:sNS]'\N [U&PʊU 9T \2N\ -rťF@u׷)?Um껗/oJh|ôY: ?7ߠB2@ve'U Do1s;=t[~"bqC1$iv8䜌N{SH NzsJ'!Laj9;rXT507'S'zւıX#i$xsIЫ<UԒNqʟZ/ wK*"9u*/(B!9cӭ!Q@Z`ۗqAIlT^I9<~}j'x@x 5IJ7gqG^HLW$+DS;,{4ޣfJ.N8׵M9 qҫW O@qc< 0ṀNGE\u8hzm ;9'h[*4@$ʌ|6px${GjoQJn_F lǎs>91ZKqxb /<j N;ys\Cőӭ>tdaPzl8 |q=*'7meamqx5lZQa;bEgJWg$[ Ͱp5 jrs{e4sՓqf  s5ϕa~!+ަGULܵI 6'~Ek:52QBErxt9Ӻg+1s oh0z.x?`Lx8Lc8ۚichXJ`*> M A\ }VS$! >28>=2|' ;+ hdc9'HF^Ar:~uEX+\p+Fp?֞p#1}$b<~ݾd'{(9w޻4X9$ONHԯ$';q\:"C'Ssy㿡5ƶ7>HʠAl>J6s(?7ck$&'#oNqw c |͎F9<7v uO==EYOI$=wюő'ӡi"R:\Rބw$D&veP^@Hq/r;aqsrQpG A< M]?^q$;R<̋c98-jɻ)w.rT(p${~TqqG$RW+qdBnWZʰ,$gְNX63rH%pz^٨lYʞTk@_,IcBrFph?L.izhЍ6;Wp2WFo:uJ&^Npcr8Ue>b~fa==ir4!Es߿͸۽#K sr~^.je3N$d+`H-,2P`t$M[)Oqsw\(\|zmƱw*K%KA1l9茵(mRѐs`UXd ~?k,% jim ubiK(=N r?>2c)b\zPՌ;~G Wi8 ڱf߸%x#Fe(K\#&9&PWNXi1*9VFtzs^ە+8*egњ46<+6VsY9 n~nA#=5̣&tߩ-;f1bpAORb@>rȹ8U?3!#i݁ץd8*aMٯrkn !UzIPlƲz?l,.?uno,d3if+…9`UV6@@vvbw0GK- wG,㌜meC.)##N816iCIYԓV\?Q9GqIz 6H68iˌapqM*8 " qšq6XȮ[p@2 ?$Qp2l\1Q  ʓAtWXM"qzehL PccYx;wDQewR#(e0^M'fxT퍓us:8dE9S#V ~rj?N TrQS2F\ÞC̖oW݂+r ('k,GOj-n5L&/7yHX0:NjC }>7H0\q² T=o^E@&HɌ'ʭϡ솢_"!)$*%OP#oQְ^s3rJIcvƣbja,0eJD3 u>$J'({ $m_EN;';YnT0f ?.` ͼ%'Nr ւvoP/n ϗC2 g5b+<1bq`'nLAӜJRk,+K@03la_S?Acz+X9(fp z"2">ʞ5 xةP]*{l]IuiH^;HV]bNҪk%n^ZB]bHI#Ir1x#[3n-+>N<+z[=:Uoefg\Q(sn+} og 029pGJ~+w7+5Y.[vI)$^Y3Ehp>ezjλ޲&}PNppwt9?t:24琹w֎R/}ă ThG?{*y`8ӏ`ekKؐaق CsӀkD\  fe87UL䓴((@'?4"ٚNc ~>- ,:d>ⳝ2:T4Z(\=I1վEm0D #zɦț\KJ%8 ggʔR:bqm\ate^k>yvfnF *# Mn%GLF˚ePֽ v2:y{ڭʹ-fs)E 8#$qʷ-C,1cG_g*-g l_$[ YeIya{ C7Gli-3N.Qw>[u4klNy".قǒ~yzkkˆ3pG91ھ_?N [/2m/B 2q ~qRgz ߕ|>OܞsҢv[v9@ǧLRlv'?*eP8W˱늸|bIqL5u"P(P3ԊȾn$ظCq@0s㟧Z"`}c99H>ec9?7 ,0ÂI'c#Ohnю.y;W8ۂGpǹ&7t\>Ui8ld~Dp;}*+vEd9julgC:;z8c#xYV:!M= ϰVeЊ4Xu99 rj>3D0 na)nNxwJM5Ÿp\ 499?3`C52pYz p99\2@22WW:f(9Gc\4ҥ(61y:<  =O#B@.|dz1m$ 8#֤EѰfԫDWiCmX 737'P)Oɂq!yN 6F>nIz4aۻ?teQJrϮ8UB>UXě؜g.HVJe紎 G~a<}݁pn&N/A*(B̓sF*称Bjv;CۻUOB^[#4Kc] q>_"(=e\rNH:Sra%ݙM>. r1e+1 p8SjE3v9Ri3,<4l"Y72dv+n\bGmI0z>,֙"Ye(iz禛W)ILJx] 2npsYK+mvIk(Ё<1`>gV'%cӷ!} rdT|?˱*;T8,@#>?ZQSnprpc')vX8ŇP*!뎣 LJIk)ŕ2Ie@POӊ;6pMFʆg(d?Vy ex\ּqMrs2JC:HIN~W:"4+D#]"3 DhÖokg.9I6:\vW`©ܼox?K ?j}8Usmsa[#-ɴ0bvXP21ߟJ][7x$+Ŗxc1@2 ԩ9#qL9gz-硴H==2~/bRsjsHȪN[׾AsMmp{fqө=F 00zNП8^=~ޝ>Z$~Ns?~<Pytz(B\*-;+W<ΣUR5:#糉s5䎖Dz]a#a1N zV`řxP9$7L? |u~κƧw=ג$Q@ֹTEH,?7, '|6W.(5 xwvp>Q?Щ u=N_'#\~4FBdtb¸iє!|2 Шک뚵= Yݷ}~U\!'Nю?*kA?1.v?=3=&ʗ[\xf=ICdG0c<'^j[Ȅ6Vœ! J2jo"étϗ|WȎg,UsUJ4bXVXB7+8=}+*J>,VtfE6ULrX#_Fc4ޠ`yG'##]2RR0'c:`^ocO _gR7Ǝ(w}[_#/~QZ]Z ;?s$r@24wJ:¼2dfCcDסՒ_ *]I]p88U< Ls cH0pۘxA8sJr8!O;9'wpEEܵ# 㐥; 2O9g6F_7 !HzUwBDIHH=Gһ K5AK8yTO8?79Wo9$Eb̍gf:{4`v9=}AGq|je\i#$q?Z ~8Kr2v=1/t6q$l2FG_nI#z8ϝ,13T$u*-) nArqVOV ^ī+c!K(ꡇSX;I7`ǸӵpV_׃_8{BGgx=:V9,*F~rp3gqϽs3ܸAAܫǡDR/nF8<jAV,_0 kfn>Aѷ(``өՁ+dQU8Hq?ly&qByf tN85ѡgu8a0NiN:rNpݺ4#2 # ]C F9 [;dRT}턕3u> X'!Y ~v K9;r:ҶKR;' g8irFHМv 6b>0V|zz4PF ہҟ`,$l >'khp|2qȌFFvt9|V'*5ʽ2@| \ڔ"C0H$scҳfr;;O=> N~nqp:zd~ v'wZR9+pFN,J߀_~pʼn ;Yn;|>T.rng.F2!DFey=n>7GϷ7$90t篥MlebC.H ˀ3hYܑ@ri"MqԻ E"Oݣ!ah:T# b)'|c9;lUQ^Ns?hňԮ6#?\%ASE0+\(pol RTnwd~b7p8GQV,'p$[O^309LsG_8[(3L2wm`X-k|.v3ff~\t%Miđ  hԸݏČ WT&J.5ɹa`tCq|³9$1 z{I9P61{$mzf3 ##䟛4#D=x t#̿cz4z t/eDka|C9cqJ82F\I1;G+S-͝m?jX`6ߓl?~<׻n5I+b rH G~Ǝf- pR z5pFdUeiTm #zz#z/C;yPqU\O˃:vXPqv1 d3wKA\#a |wzaƱ 9RUr\qk kR%򖰶g]H'rx 躋|q~aG?Z֜}bcJN5c.nf+Pxy=k_RhBH19ҾM}a\4E'4#y˜nrz~"; Y@k\NlGLvin. j![T "p VQ"zҭV}NzwrȻ4Jc;sw ^lΠrr5z[l,Am~6[vHq;U[cLQx'h]}0F0W?ηoݖbC1\ a`c޲{z#Ϫ}WtYT?;9+m<ݏ9WA"/oUdfPNsj-s9#{P:0ʰᇰ?Ώ G-fG ݀#)_Uj4j[.>0Y[?{{sZ @g.lg>bLMi;[Dy)!  \6=O\Qzj(˛uf H>f'w$v AE{`|Qg nlswnw5UأŸEJn9ONt&/!rs|-= FxӥDuV-sdFbj5n8=qhR| q>j= #Ƣ_wq=ϩhЈ9O gwˏVX$7, m(O?tapr1I 0VzD7'y6vn[ۻn˕$C^u5^tnR W Xc=QAaBg#r@^'#HJ) WN;v2G㹉' RG"$m r1I{ čp Xm*TW|1񎕲d=ȑ cip)9K4Őd P:h#RNv3ǻ$v={T^iN~bY@9Ҿt?iU`@|ÌqןaSJH#cH% ZC#MK/ ȱ :a~@H_ 'g} OGt`Ƴ.]q5v!1%s;{UI#.>} Nܨ|hg"=:q5ۖXʗ{އѐ!\)$`!T?^\(? Cfz\aʡd,e9#ֹPFK*''ҷZ#4\毘!uO~?psν8USIEMhs8V8HUpsӡvLe$bC+wTz3ӡ> HE#r _*d38wE*2}u>Hc LeRc;|@*pĀy'L) #K?t0 D1Vmp)Qbø$/42I{R)ydcf@WX2N]v'U.0RnNGVH2 p 0 tQb吘#b$ }3YxJde*DBDpS01ڐ4Ą1c3g=Wq?s&6Þ1Qzlא3(ظ9n\Հ9 vuV y>qԮ{¦_q+1*6y둎<"w#V_R@]R`9rۆwϑަ]MP\ ơ"7H18 ztW.˞1E]FauKAs|Zj`s$'>7lB?E^Kp1ȥ:S,??c5.Q2& SH\y$bL觌NKOZww} y`g8#樚rw`J%`l)nWGjHgyϸ)qYܫX$H$ ;#'$ϦhR( !t440I> x-ۏjAn=vdn|@!ޥ7aۚ&&dGt*\mаs֩]Wq2;AN1y zU9#x7wo8H45Ly0]TpNp~`*V ȱ݃V?K(~s; cִ{|IW'dG]9JD)P[#%@ǥLUƺ@#s)ҿ_Q~ 3[V6R7+(eo،``` mdGˌTւ3 p# ! 9.<z-Ԝ s5HCЎy<?Trv͒xAsr+5eݗR8n8oo]}2Uʱ$y*W<0T㡓ORFWn ]Sg'8Ȓ89}% R1< V#ά݅*x}9"E&@# p38^y*NvZ-- ՠב;W»`1T'/%:{wߚ0*erqN8XdUq.<Ђϳf5 #6Wn2 n՘Lr#>CZА[T R /֨X r.~LI}H3\@$OJ:|{qEu*v8myVO#N(7 p-QHGOUZePHOS38 XS9݀J rJ{?ÑlFW(1I:RzWԍ`#\SźJO41cE f1p3A yd3{P)2B1'3Q4tϞh]Moى[`,opI Ws$M K6SI.cn>jEku: T c8=Sũg;c(SɨRF"hRܠ;aU?繪!xH<A )OpԥHv$c~Zu瓴\u$θ= qqx' Lv#=;V-O#xc.瓓8UV XbOLPZ-2ˈV,2.I.%aF\X;T6R~,7핇u*HX@} 0::Թia2a {c:#zuzw\lƠϳ~M뎫3*zg^y[cyqArO$z{VKpާǦ*oVQu?]]qߧzϯP!CcN9?_j;6=[Ri2;<0r={RW3)w7!H#+W8;Rmks<8 r['$.9I iƒ#Jܥ,Gf3T98c}*[6my ۈ'EԀ,sQoi2*bp2z\i.Eز\m'8OҲP$)`0A?N$߀MRu$y.Kl2&%0pq^8{F{m>:p:ҤYeێ !#5*KBm+.p^iQ#IC=wDDN0 ;u_}x껷9Zy+Wp$xZqB[O?ʤ5-pNziI;d@ț5B}6v/9PA=ʊw)ʂ)m! ,?(㎽98k"T@?Q͵b;n߱6n(Ng/ x9_FG46 [X)vf\g R-/RFg+ *y ӥRQ;*.TD1((]ZR=W\mNF$èں!-y쌥BQѢ nirHU*G#ӊسGuyEGsNW+WsyӮ\e}UAd$fAR`nVIHM;(7նeʜK$㠢FգS(18pJc=jUz*}GjX]~lpҖav&2[?xgUf>Z2hy8$׵mVݻ-.a 1Hc px'U䷕ՀB@Q`>U߽+yN;6IKzJHF*fP9"֊k*{@mKT'q Ts87P*3nFSHOڢo36v@ d#YDcʏ28Vq=)g=-y+ ˛RZ핣 ā}\qY`J+M[A,t#h󻧷^wOEm( 9'گnuyЋKoG)9Ix$0ɞ[Xn9T͔^?w9 'ސ8;{Zs<OXG?OP}Kdd6~\p9]I>i'qfvbZBO qGJI;嘒91Ma ])8#p]zu%o=fՁ;Rnɷ EI)LF@!O^+#c4E]yڸ$J6t丘/32TzzWh^rہfaМtz\+]|>zơŦX#y#P^iGNk[ա+ySj[+ $&:ҍ:RH(U*+y_NWK$I$Hx OAY=9O3,KV蛷~ҊJ-9;Ƅ9O gבGgI^_=j";=#Ҙ.qGSS@QOEO T28<AqK܅(i.q(ZT |tUЦJ1H__o_Hb u[vX(DܭtI 8p$WL*Ql.NNH~j)?NB89qM$r?*@#ES$9qsH~av>ST'>Ns{Ec c9Oda;p  t4wLCx*$'~wNH{sP c^OK _׎x'QczЊ+ 31b{<  ) r@PFAR@{)#x<\gUΚ]]~1nb+*G#cKF8rjoIA 3?GjaiW`.s';3^i`G82T8+*N*bWi_t7P!\O$3Nh^_q <J.&<\n NH&weim+OM֦Q+I!w,B4p?ҽԌ]OAMQiy*2 7)_͕"vP d=Nx=fq:x2_l^4HalIuM \Fu"N5N_#tv28P3\c4x2gf\ 32:VF?"nX9; AA=q`AK瑴zuZ[ \0۹t6F{ ?]ݸgq9=: 9>mw+`m9#2Vi#2&mp=^cDXHF*ɞ[7'J5PCmE @ 1#~ laIgSq*pfO9Q9{÷V dD>\Α7 kG4n6Q~"28 (̉(SIon8 mg>RI 7ϘqL⥵Tj|ߗlS@A|~Qii'v&tD7' 9)VSFDM>dG C͏@qUlc+OXI~$% .Pdu-77< JʬzjSyP 00H| yp83Jc•cO}>ar2gNv2^"ieW0>[r1j1S?0vrG"hݸ  yY dn+!ʉ|]ې2 /T#Sq$3Ozc/HHl1=[0Hgv=jq.rVmRɎC~,!l& \v=ZF9>|GYWs@[^1J2p;{sRFC"$p[ x7zoqFrB9<dG08K#I)s>}z9 3SdP&Ʌ ϧ|(MI#w Ԃ3]'ۨ/qIh6#v Pۘ Ŝ`;5jWhcޛ0&]*8lc?.%΢n lA$9}MWk@+:W8t?6BcS,H*Aӓڇ&]ԡh. դ#dM*t!3ץdvG#.qr})}tZxoNȼ$$y@<n)ډJphHo$bߗц/Ov-ŪrUd'#EoXGP+=n"\`dqæ94&okP{{[YRHw];\s"+[o#+]/GˑiN;BӪ׸-F >VUgÑך8p Hʹ$w5ork̬r .#zu5v8_,n(9GLz电5PO9щc1׵ .FN b39xmB85<*|#s>R`փP0ef!rnO\ǵY'$eN[Ǩ9i_q4yq f=O++r(hDY O^c8"4㳞az7l(8UH5EvqJʥKh)ӾD$E/##d2CV%܇qȲ n;i/Synd ɹ3쪄<&0>kޫyf28-޸qJ-[lz|3h0vA9LO_Z+U*^xwASYt>ARʑsn%-p>??jkb^2 dn2[ =F3| _p楴g)8t̓\j#`wn}x8;yF}.i~NF~#-3sN1IOҫbHpT>7@cqNq29ޖߨKT\gzc1VkݰOBy~Rv^E %%OU뷮E8LIӽO1\y?NU:}zU% (zcМ`i}VO9*zc #KO Mӆ?.pFpzߺ>e.˳@V`0Y57 0IvF \,lSs^OMm1%@ kS~z_ZhY%JӫcWpP^8;ԗmO˝/$ +~\l08{Vl%qOkǘG, ci96a-60I$7"cn3yp%;^ؗ$Nd'a8N1OQIv)QGpHg ׽)F\w*#0zʓzy3c$fs]XzňܖSMJ{l[D(60zWoxRo{̮L-B#[[!rX^z6.ھsEZw>ijykr,0pH yZ%׶mʫ($ms9[Ry m<`d8<sS .%*Tȃ~yRTžpy*fV>W[űrU'A/!o2w)?SC#C>$-ᱴǭOnp33OZo%ӂ0x˭B3`[>Lnt~Z/;-.t6A%z/Q  +}( ؃ՎG1[^mfIY`6F󸃐-g"[PV f^ g<ҹvp uև։_f'=H#i7 e;‘ӌsHYv# ׮1C`1‘Ѕs-<\V#Ќw5Mp-*c94?!FOCcr9a}>Oď#Pe+X=42)Iیhae( PxJ ’.9~F-Mzzz{RtbH_q۞(!0 Ԗ<{<~For%G{uCE"+ y0:'BHۻ96x8h1Lo ̤S;vܕ$`ӡ"a(9().$ d;r^:"jǾ-,]U|3+ccE$9n8a׿\U<'О#+}Hh 7gNtoY<_!W˅=WyO~\/Eg;6w 3`%qT7 n`3ڠ(w s=AmkP[U?/k˛'HMRiA$[nBWC`#u OXzKaF8.A Q$^,IsYh^_y*dp}SṖaP(CӵRVY[OȥÁ9&E.pp x9Ȯ:GDۀONAr͞W%;?/89w 0x琤NL$ɷw-8 O=9#8¹Bלӯp;=1צ=szҵ.dS#ֳ6ɟ#v JN;>ԨKnݜ2F0j;*ydTcy`3ԩ# q;QoC r?r0x㎸F4KEŸOiLJݱsN8 >R1V ӥn3 `;G|@i~3սJ3A< =}UnA[$cJc犰27!rs˽Q/c~5Xö0U'9ARvpAWn>,LCҼ%qx.CHU*$0GӯZkZZ#~mm^y'zu|yUv۱>Qþc54"c \d7sm$7SӟZ!D@Hy{[Ӧk2gN9\Ks'{tYz!es6]3! c8Np@ #8f89Ǩ9&WzXh.ߏ1\a>U=ϧ~z`9Rˎ7|;~0]eFsdN1U%* ˱݌~8MDUJYpqܟVdPPeC3"ĻpAg4(YQ-х pؑC{ԡԑɵaJ{6:=Jڔ:M 0I=j|D(`ɞHlu HY]F^8Q"d IG=zک/.SJFy8v}F/2gHܼ*:.=3H"~r&ҿJߑIl(HI=I*FH8U'sβݚhTeE,sӊc\ 0p #⳶FےBOC5}0pNqdq5}:c[A7d ꩘>ZN _6ϧrP:H02HB $pݱBZBi-;;v{>[ib=I~H\d7PGӯNT u28'nG5,.p٨7[dp[ؤ_tXYFsghdp3=6O4KL[ppI;ڔOr#S0 s8<\VlEi#k3r0GREDXr{=.GO O^?< 4 !_3׊k|'.Ϡ#^_}X B@!I`-Dl7d@89{V8#/jA!́Tr(˂}%v@>P:'^q~< Q}'0[o'NDf`i?.#oiÍpIUd.dc>j}@]ȗdmޤm,F0GosS(3u~ޅ\i$lk[By.@#~TJB%pݟ_*)+*˵v.m?^*O +7:p 5$ á89Im)\I r22Gly#F;T(HGˌAR$dvtbĕqJ~fCCw`8#{𧕁 $27e~^]Ȧ0#V9\H9>*[Ɵ9/#+%3Qv;aR@psأ3$fP؎+H5] \qqAݞYaM Xmr =Fzu{&e8{})zt~7ס0O ǡjV lj턳p=:Kz UG`c;"c, t<^Qqb[rX-:{ UF"zŅQw$z񞹩W>}0wA犿t&@-(7;J qn9R+{m>,В9g8zUf PFNhL.r޳8vo3NXֻ[Dor9Џzp4RJOV#U6#<Vc0;+T>Kk%&EDź$#a܋+=$2&$>RAf#N_ ˴` G%0Z%̇ @$ozέ[mPJZ\˔֬q1A׉]LRGP pTܽ2qs^dҋJ=^t래u.H< 2GNM8!c;P.9c.`f(#;qRW* flHP1r{{VSX60p:xUQV;i+NgᛎpF3Ss"v#AݟCګ> BNw'Q}l]Ebp_DjsO8jظlGʧ<WFzOq[E$~NHBym\ےǠ'{NA$r~UF^ z#vT/<2NO=j\)8gt9rUzԀq8]= oCۮ}O +߷;}*%y^A JߟV9?ʀ#8$xU F@={R&لی|wxʎv=O?c0G7q^V]Dcަ *^䉊9@Vƶ¿),ۈNzXY\u99zspz`H3c3cIsp ZEX'!qrq^A>^_ObgޤHⲔ_3V~̅nԆ]Jg;Fx8^Br;s䎽z6CC. v“ 3۵?p|g Ʉ#(iZ+"Q@R6$08n)eM$zgҡn gwgg+Nzw) 6 x@T}F1W;VWYl#v!0s08TL\~[GE\Uv(f@OA&Xb,kS]%Ec>e\uPHh))=v;Ztv${JpqTׯQsV?JcWчրt{< $ ڸާYIv ~>l(pH%NjDHܸP^>\{r OrK.@w2p>^ Fw{X%e-!>Yc޹*'bCz3a,$%E&cj2(*sg`Q=\g=B]1̤s?A^_<.P;oXr~. |: 43V̟A7hPU FUH* A(*6 -d?gl.ng{ |lXKh_ F>}>V!B J$v~Rx]ړP]?# OE0;b0 #ݰ> a 睠F2 vf o53>? X7AnVM2@:k.L),q"gpq=/c[-̇ Y_.2qzpxȪj04/^J "?mҾǦZx?by2UX`Tzr8Bѣyҧ4gn#v8Pŷ`]QeK(*7co+mUsQW1Z{`%ʤa9*lAoeQT9ڸq *Ċ03[8CMthlCDK,8ùqV[q?$# `;c-/ܥN[f1';r8ӎJ<b}O /,Cc=A9@TLIyQb+rXEummwwsQF o3 \r2:;VٔDam`Еʋ,e 2vFBO#Rcj"3ɸǸ?>Ka` eCLƖBd+"/>`H8 r7˕2pTALd* ga5Ԣ1\;zץZ$Qm..9OUG$iaI'yib1$wwc]4voo.pB:N*Ԝ䞚WIɾg 57Z UC _}5}R2gjaF@/éiS#RmsWҿ|%KKg_ZmcPRtg0\TQپct'h5UQ8<`?lZVWosw'.>KNH8Ry#Uu qY:hГF0=:ԃ2 99=(z8]ǂNsZ9aۨ|{|㊄1;v$E-=q֊4q'|At7Ba>s#yϭ8:q*XAA#8<[U-Ih0:f i돔f쀋==M=Q(1sey^jpNe~?Wlo8^Axy}u4Ac׷Z#`՛x8 \m8lo~:j sw튟r0qΗq2zrp=W>?7A88f+W IkSkM2]NI'vNќJ׭s*ԕBJe' #c,0=΄#*`ϴ1i8"\ⰎRN,͡y(ǔܹ̓0K#*G#}UB$N>rԎֽ*5Dx؜,Giear4.c YqH>)˙-jE# Jd‘=I8qg(^|D.T*rG{w_%lndK<ʞ>qhMjg0nFdv~c8&E8H^rS5:%qWx'LI Tg $ӭ$Gebqzz~5 &LjDG9dR=hgB pԁIvny=0a~*?sK1rvs8E$._hHDHcN m?I3)vґ`pP+` Ic`FG㹒 ˵@wpqSRm㜶ѓo]94SIfX }lieɵ Y#y' s^ǦGiHnQળ=#ۊRZ.,;Dr;H NG ڲ~I Y[sQ(S}=<bOueY]Og#x2E)ͬ)SVyzwW9 !DLJ79qL*W2JA*&TM˻<`vn7ۤʆۉs=3\ƁȊ+Bd2 sIɧ_K밒)`$!=95;$bI>m Z@VNyd&R Rs<l;|0 du;RL,\8 ngsa,88~8 "hu v1:)+2n|9%Q=GRC WyJ$1#ק~AG\ɑ؆ 9yr2]$(F9@ '6.VX$98+>TM1B}Sw@F퇞A3*|AeqӼ9B$ֱ*!V?$6dt w1ؘὸ@"p0[2y]YjzEzOZg yET* #<_#kr>ԩX{H)ʯފ8v><.<.nsw#!9 eHB cJM o<=;g*R9]#px+7uB%c2*l k\:=깷;8MZ$fsn8䃞0j#$n<3ٱ3GTiDLp90Ž[i^>e=~Ml~ w9>ܯc`ʑc#*O' 9MV'9*W(-9sfSC;<|c$9|T+g );q :Rz94 n; BA8i1{d~pri<ϺbIlZaB! D.y9zנEX l\"0wu'ZQ-T4m[pi?4>]u{ԗ^"Mo.@6\?$ssUHv.6bܳ)'wCesFϱ(:;\M?ދ,zFЧdzWSm`.?|+w}BIYhz=cn'ý\11~!Is- +x@t?)M㏽Ut$[+e-b8.0$hl`8mDž>V-#7fܞyv'MtQ[v=sN+KzMRVЀ ?(8:A#=98G^'ީ9㏧<(?1NY})ÐIn{q'&ڑn s犰Knz.θrO8>{q Q[L >j[O/!>1ns gs+U;qz{T1>Qޒ%"lcV >' N !%Qmld,%|m$Һ; hR[,Qan=k̶kJͤq ;, 4q#ny'k$YX!Q$uzGZml[%@7'Npjn72>lykQyܮ yXIy xMlOs3=(B4@Kr]9bOrM2A . iE)f3?2 rywҚ-%AȍsUE޿lpx@|JFr$`9R*xRX3B@V0r_Jb!?0꣜瞟D\# *,vEă޹=;USN2(k=?Z2Z~)j+;ds"̄aGtKemrUrq,g\"y-#"W H[TۯҽrHWd[$rYryfqٞ[;_5 pcdlܜnb:9y *wdܓ4sW^BLIo"IFmU*'&5{ U?8gf-jn Q3E'uV9 UU^R2%lqS :nw={1Lliyub` ɺD |6wpxZ0\jS .$? ;`v#lsMuťՕ̷82;3ޱc8ė14ʒ4$1${ivtHk,0&5瀜ޜ8=rO=l\6$q#=N6B;J6^ RBNٓNo-TH._#>fGPsy~~ #gD-w^dv`aa)='#ލӺW}O79'Oz^-C+ͬBONml#-O{Οn.82NGϭzWk})9Fm|LK2I^zZ@/õ\G~MBu¤|"(b9UmK;s2Q׽f5?2O92 6T;}7 3==J+f%ʤI#^ms rsgʶٔuocT#nHǠuPp%sbPG7:{י=_\:ϐ<5\4Up63ߓ)G;V@6089 8 Q\*R:1AmAg6 Uh,NyCLR-'ݜ8"Q s+`1=i["8N3,9\WM3ϷQt]v,Il'.1:}v$H 7e~)k*:=j^Du[.Bisԧ=O=qӽ3Qr3z`!P`_vN i~@@6JDg<(I9S22ы 8 1p[~nѢ|pgAR:=‰CrԮKp px¨SK\` )̜HA 7~ޕ/qv='*zo¢o0ܜ`nzzf8?Ĥ(Gg> [!RXG<lg)ʟ>@POܯC~8ڇa H".Qry'zgUtF!Br0ø8h.40+nd!*(Nq!982 W 96(a_,_VouP^>`NǯJvUFLm<\fAY _!X;敿f wb$9sw3awx*?qGT`N=FAbOlc=$U${ӖFDTYN[$;bĆ\)mܘ g\gR YTGgU'pcʡN2 T+9<`Sz gE\ KzcֲbZ1BqܞPktr+'n#!c;/'bzcppyⳚh3s ITHGJ1`%*N|ېBѾ>`UrǡI~_AޠHXӘn},0A&3nېw(NI8M.eu;`$8zp ѴR.Afcr#_8jZŲ+BAGlrc8VyGgKiw9-aggWؾȆX #^.mK*o)>gE3cl]Ԑ[0Ww o>is7[ 1׽TB( 2qzRoݷaгs+< \) 1S׃V}fFҌ$0O+_y\FP:WԈIjjv2aH}1OiBcbUt#<ZاAՙ \&~dIݏLupGep@ m}놥'e%f0($ݜ`zt]xl{~ny/8 AI\gx3g$8֍d:zd1Вx:`tg88hqp l<|Ü `ƠN8'-Xaݎd¤pXzg˫kw3&Ld0c>>K4OBʌzt֥h /S?Z+Gr8W8,M lXc*ĭ\.<Xp*T# ޸sU=ZWp~6U\m#ۇJ4V6r2YsB}+.I;C~ =KK}Jdk'*ϮICOGy6~@S2C3e}m2A2,A w|T\Mf5aܖ7ñ㊱s4{Q Q9v o\b J`"3"Ì3;@G䖎Rtna@ {S[z&h]#O'z2'wp(uܥkڬ2=:[H԰#sR NգU| #{Cw37V@,Âqdj۶|` ב5H]HԱ$vqebF9i۝1<:pGj 0[O[<ޮ- AIUW׃5NJTm嫅pK1($`p*6Uu9s+x$u['e F9Kel#]q}^OF}G?bɅ88??#=a>ζ7Zw6x8P/ ?U06O+gJ+zzwI x#玕jS%T6#lVoK.U8VH02H횋<|۷} 3{|[vm=218x^#gTfG>]62}h%”q0M1+/$ǿQQEc!Xr29Sff(a )>Πu#N%W%O#sF, XsuhZ))rơ31S47#fYXrqڤh@&e-U7U!'?J(pQrH9CGnoSIUq4߲˨K &1b*0>9n~ՙEg(ۗ'Nr=:0A9=+}$Iې1+1Iv@E2D|$)+B9* Amж 3*1NE1cGzmh%>U=I+OA1$m!_:ߍJ*#b`|P{VN4c6 qJO!-}X@2tLjUmǘJ>EM3?O`Hgo+8q֒aDqE) 7dJ2 J c? [D73#q,:ds2Z_q>;TH==$>[ڑ ]!ʔE8f=p瞻Ya dzT0E`GhF8rs#E;9\lgS¤s{`:C'0?+R7D. $?ƪ?(ZE`6z8Z;!\Ń|]hF3kM?"d)xUw )]4V[` 2/@HVwg?A D63F;ڜ,+0ŗ<[jd\(@!FY^ rwlsց&A!)Qms8E% #nWh[RH1 xWUo{g2C$ hJ5^ildE #۹ۚgy#ޥRVZ7`8*纃hg#^_҆Ƶ2i$  rPہ*Hde%p'<L h:nl0'^()!8Px$`{d6iyΏ 2,vRRW^*m?Rv+#s^f[<.Hɮֵ5n$]h%({@G,9X; s54{q 8Z=@gV{;[vGA׊d pMAB?{5.q3*bW)gۊ$ c##= >V!ԞB Pvd*NHWSҗcti Oʺ9s7 dҬE9%ʦ0{qߚ=..5pxˎ0 ǯLvd.Om?fF--(Fyy$qHs9V=}JMΒ=mesῇjץBKi( IQS֧,t($ AMoj&I8P0<'ߥDƻ|ܞ~#x)== B,j@ rq'Ҥ deH Tc~ Xpܯ_x<\{zsJFFnsGdV{`y'fN l`8) >e\?|ҴUA4?\Tc@*A<L)r L{ gc==* K"9 )zr8>f898r9=5xAڅstc-VeW=zw9Õ6I.g3oh7` g2~G7LS8)l ]1_Nk|)^ݍP)(޾9ϵsϡ1&ebΥFǡ5ԕ)<\{1A#5s[g`Q``p3XGWx)8?c;aJ:o.{[~3l8_ZـQn}$xθՐW+_Z9O}"XG޻[xO:H%<_0AϾxwqFʐU0 }kЎs-lŸuo.j"̪>XŲ0N;svPg1FpwE/9\NuQ¸Jxݽːf_p8z#>\M4"u?zyY8ʏzJߑRzlI\Kq!L8NsTG6X'8;lO4n+6$7ddhG~Qׯc[|Ww7gQff~#ӾvjXL_:1HDo;f[2gQfH]_$sߵZv7XhXZTUhn1uq` o+q8+,ONKȺSOF-آǦ3mX78磓ʎ/|yYc0K6[mWyp3xӧ"ʷf7r"Æ zs]QBfEqk%s6-q׭!Edv_V 'Jjñ|ɿ{r߻Яl}keef؏bk}3ׯM׊YH?" ,c"A2U'vzո}gluA 래}$L&ީI$2N#$`恭ΊB!O!\/|Hd;y;{)$F5T"-0OgG[' kEk 1ee^N#N3Lw$]=)?=[s&N>`Gϑ[7H#h!'0܏\mZ~SeCRŒ9ݓ{{~U# t#+riwhQVyjf1›I zzs_CKA ZxTK&߱4gdJsD TԮ[w`cLA מ+gFHϽE';(Rь~Q}{pIk ųUA zGCt⥱H39.=:h.K!HGOGsԩ?Mc=*$(Pb)2p1:W3=#bz6=!68>=˒Jx^5-Y:lp+~S\PVaaOL$z-=5+--D+o^z UTOVw~^#=O>_ZIe#N8::db #+>c1w=23shZВk$*a-~uHN?:Wc\'#'iԷOc9%=vTcV [#;NsWP{^Wό1fy]i_un N;L1E2Ux 'LQ5cOyJGu$X;^ij Br11(Xd$)TOW Kg'G<x'v8ҳpFv u?F=3׭"+O_nXQqr 2>s8cHB(:#  HNe>GҸI#uT}N9pzN؉0b'p`qڞpğ*s&> ܲ$|db[<}j7)v`M>'6FrP>o.-?*NˎGI|nHnt>CRǬ^Xv=#?cU)hrBO ad yyuԓ7ߌ0U=S:zt0n5?m\`y o<`yD s+pGˁ{VVDl_OVd 6 c=*{;!vn)skryR0sI0d'zP*dc enݐd0+cUr> j6v0 6U9KX4$;b쁎G͂9KcX^aw#zgAm{inEPM;lLyC wV;tUMȑ,&^1JRȾFcV, yd(z+2M^I$0o1 gIzD#xAS-^}*6f;} qpFp;'Rns&??؜ӿoה1'{`ޥt+kr$Y]F۴9/8s0P22 clrd][,pmO'z՟S=fXPyϽ$ p3hl50J@+T!1)v s0xǭC6[|?7O%v r9Xmn%w<-9UFWgavP-N[$zԀ+($=H#F`#(Mbg'gNZ\͕Fb0O=kTi7K6>H^Fq'KSRZw+O-p2dn-ێZjH#mkvVOVkJ#m!(b1?x#/ T45+GݒV%a\nRwzJ*G^__n8{x[V :ZȏE膑S.GN`W % QH!9fQ(c2:Lΐ%O׶+lwܴ;&;U2:8=.3]P)sۮsMj(ِi+^.|`b%B+DQcpG9b?*kD)%n8q3Is;~5Fs)+.% pqdv=Ңɸ'WZ%-SJ..u*;$fvd9A>eHޓl´"_E"I$d6wzv.$ d3h\ٷ'ֶKMNJ7I8M\s˽-=")FUv)S'2*e 7FdR!lyhĴҺtpqG#YġTQ dhӾx_8]RS41s98m80>Zz\u)rNx6LMјV>dY99^H+nd4"Y7dyΗI,r8'p^\ڪԍ(|L=57ްasd>P1׷^,B[@TO-@:WQ-{?C5i6n;n*rH8zcked:OvU\::ëA35?x9?59 9J7z#Xrxc=*6?F=/MOn*[/j@8rNxPA¶8T+f$19g.pۏ<vP8PF' Z$d9q>5I8!FN{\"}N9}Ld`)9۰p?OB@a`8;1OίFq;g<$i f2_rv.Pt֓ؕFeB* A;j< $Maڧ_lw$Y|=~E8=y!VG`3J.r>tOdwe_ i zXpG<gs:}zbVo%I { 29xܙU9@HV% ۸I+ zc;x;chGؽ QLpCg\VnaA$gi pP#2+ʨ:X jl15ѱӗVϩ[IE\~Z8|7c>_o&$U ~U' g{ cj.єvUP$#~x϶k'ݍǻq;F ԞN+H*T|$kRvn8<*eWR{h8TH`9%ǡKn`bD^(K)Awl9$vlmmm^x=׿"ҺoSh WG^PJ`Hn1 JUXy@4R$; Yaׁv|v ,Kpx9=iu)W]@@ےtZX~\,6P ySe!G9@QUCrqNx0Nv㐋Nz Co#!\ ̹%W$ѷn?6MB7@?õ|M_ާֿwC]wc%$?+u 87*A*pJJ;MYoت0s7e[(a~a Mٸ~Ϊ9@k.8/dNBͻh$L `To$ۻ1Y|(9:0tn#[ V5gQa3RY^M͘dRkn WZ@. ̏t]9E_qN!5ќ.)2xR;ր4Qy^D^g[WI܎3=J׭r&2c8$@Ͽ\Y(0`'Ҙ˂8nH9[''<ҙdps;9t #c<S2,UK}_ Kg$ClXƘ|BzYn#Hsތ-+=sZNsv+;SD%#ldR`'96tj_q|۱n?{|{c֝+qHШL2U~bB=J7 \zO>$Ѫ I'B HRN7esG$*'،pph| z<\|cnU1F w6'J$NrXc xuu~o+ v`_L9ARq֪]Noz෩p3֮vϚzqqҶE?z .1';A\rś>SQ|B,nQͤp yɵ !;>A'wack?323r>l@Wr~Ue,ɜv3V=.ɀ2G1$ zǥa;y~PI|?8lHjpZXpFsk9M˶8SmsקLղ3UMGWt$QŲ~m!Klۻ#9 WV*@>T`0Bdp6e-! nߜ<ѵ?3W ,SMݵ/5`O9'v5,ce$!Qv#xktؤH&3,!NH8={g`8=@>]5ܮ2BZRirfﱺHQ192a3WEE u}%V!$gsۭVc rUʁS<(e 9~qpON*wIwT RsSiÎP. '8XM=:l/AD;})Ʈ2qR d~jCキ12}j/ s矻:zjz8a*àT($!J_7wJ7pGW+`Vݖrm$`rGٮKJ!wS:qϭCaY%@wMT0*=VB;d!l/#>1G7nUnFO WDg5QbYfG'bIEm[u򲼝q*=CdAU*edųBd5mOuҪJ2A5 \7LPgZI* lbq"V…g #9nLhS s1vȤH./ >`qˉrGި, "]Չ!P69vw2KAvc#}8WeN%/WKrqT'zJvK>CD[r,aKy2jA)ލ$2?]n 1Ѕz9ly9*{|DO8fbOL>.K2ͻWLA,ZD9 2r 6Oz_(?A䝸r@⟼Ҡԋ>XK0=M ǐAzp?pcEnI/9V3xZn+qeq5b.N{ 9(OLH*_RD!$:tn+o2C@ҸtJqnNT69P#9~x{W&oBL( }=>۽6% 8HzgTDyyX7؈>qOᱎ9)I-COsڏ G?rBҒz.:#[3V;p@*ww p:.1 Ӡ7kۃ z=Bd= 8lձ=yqZ=N}B瓟N޵)-NN8oOPB}F{Tk8ǐ}Lu#8:vԴdȥN$TI8bǠ ,rKz6o~Ƞ+A#9֩ ?)\.NyejAmb:7$`gIݓfgH lsCUo093z_#r`vNxq(^yYa8fB{cZj+Ӗ2GHnD'qN}\m=J%AK9݉axN#9|Uh۫7 ㎿Nnc6Yg.,Yr7ڼԑ9FN1؃A$N^xKseV`FePg9JJ.9n?۹PGP pV>ޟtƩֹ}_rb%A9vO'K}? 򩎜C ^,jW< 4@pd#R 0rF9QGOΡϧ.qO99'1Nמۚ9Ý%AV]0Y0rCz؆f^8cvsh =*B^qiAV\7QaqfP9 Oʯ,$m#=*qS)"BvH<#@>cW8=wp Dvޤ:`gj DOr@^:Vbk; xSOl6|8f;ћ` rsIA#9] I&DΔj̊`*>ӊM{Ȗ0~. #^I&m 74n[_ I#T(Ppy J뭍(r>CáWkRն] F=zY-ϖ4UB6Hwӭ.%i+7v8 G*z˽8VQETENҳЭQD6. b4'$i9(lmUIӥ%ՙ%JrNf 铨hE|)-R.$ʗIK4_7Q% Ghդ pǧjյzI7~hgۿ}\Fa-ZBaO-x-I#\Nn.ddW$G׊$ޝ6њFZ-?mr H/B0N;g:hv43. "9~spzs]jQII_ThR+7pyzҩBDY )'?*Q4V8H2_ G w~I_Q{ha;a$@tދ8Q< ۜgkf45l^eGvyfDoz[W(ܗ]999 ץHlg֭u؜(30 lgJ;^1N׿jf:tA""zw?3gznRcc]0GׁWOB9Ts:ɞ& Շop3UT 9'~'޳J7p[UNڹ:ED(iv$I1ӥjKu4񈤚WPW&$QURp4)hG$OnTdH}* ;|;`~c)^픑j+` *7vV'u;N{rjr|``#<x{RoG&?|;@+WO-sן~^>L*p1>Ίn laZ}6#}@uۯ9ZJ5r,svs[01y4_sr?7>סKg8s[KqPHY鋞CuOZ륊jJ3N멙-~0A\FzO#ҸGL34fH_Yș x!0uv<|N kd-MDi؄2sTW$Ik 'ڧR2_ (z^b0KYeyQЯ|z=lTEcvr WB9eM= NЧw@zOD60mXM9JG Vg )i4 5ĤF̹ʻy)݂*Θ|`689\oV(.v?Ke۸!e@I9VwcIuv"fMOPp9xm|<ܼU&CB9rzxڗqe$dqF=8a: K?Φ99`L~pi(l. PӸ ~):rx8`Ž$ۉڠ_H]L0n =(b2l q팯9rNs88 8)̅<O\9<-ٵr8R;U [S8G ӎDcNzӾ~ :szzԃ 8q_eq380Ǒ㎻J}34DYT ,Ǟ1ר㊫'*8?0l`9 zJ1Phex븟Q-J=# TcI8}cgRӫ(.NwrAWt.Rgh B9f˶Onې?v9@py9lr9œq(\ Bdgp^ܡ7(# r{TifP;sS HxvUU=Onv<:sg=g4K JFX+7'{tḇ$$[vC(|TImAͻ9# MEqiI A!$=XW 1]Clьvt", Qwp=Okb-:sScg޴$Q$ࡺT#KօkƟrkyNUu;0Մt[[Myf62`r>e9!;tKE5K[uX㵵#i+d'񞃵qZ֤\/)TUo?ps~vcRyIz!`c#gIaLJS&7L~C{uq*{鎝cq94ޗ>▗ӱ:sv<~q|0גOVεl\yqT0 )֕vnDnTzרz)-Y9:TTmR2?u1cZ/="n9Ž9<ӓru?_b?TqӾyn}_6-PzS[82sζLtQ" gҲ{˜:IE_%FcxH4眼 脐t > :\8b,gQz͑Oz8/Lqٴt!xF>@62%νZ\#$o?S6"Ƈ9Ds¶pm_¶rNpL g |Jm^Sm*7PU;dp??.5f2J<^1]cesUySݟNY(88 Q@?Y"*H vܿSf,#UKqm\nxy# SP 0 1+zTd| ^ҳz͔i`YcrUHަl&m*\*weZ6yƥ>q>89 InXt/"BT`hw1M9HZm?QP >w.{f3.] #Ouwg:0th2Qi '$>2T<ʒ(J<zq.<8+nc;y`rdm?9ʒIڈ݀s{4|X8[crR;͜7rA_LT4_&F``pe9UI]FJBے8@9lz](pl+pŎIsszr0ܤK.@F>_N=+X.F| {^i[ 17oDjoBK%2UX<Łmz (@fk'S$1I=3H-"0ۗRprJA}kVؙp|' NOM; 1|= d6Xb==Mm• {V?|pTgs9?W J u9?jXky]Hڇ!?9(AEz3֞n_O#pvhY08wC7 aH=2Œ屜c8I#O {p(`FG?u{ ވs6aO9ۧ~@=I=Bя=) XnFUG8N~nbwccIz~#dAwY'@<+U%<ϏWwUݪGrwm@GLqXXV>13pSp8o D[ʖRg偃2`J3DI;07x$tMl{*0JarI $z8 `)븐pN= SP+ bG7nQӡnc3<`. =>bu=>H {;+zd HEجGDE`qjی(bt6W ٴc$c<`Z숒V- O"* ˳$#0LJkU (le9޷| t JUa_JJ? ^GZɮMGc HApzqYWcAkwn2푉wr<,-#TKT5tھqu`|іçOtrjm-2#l\,g$ݣ*ww)۝erXsJ~3?d{+ϚKx 1SԐqn!799U2W{ w}hs w\~zR,^>ޕm9#㿹eqG|9ލœ|\ӎǧ5ŐH?ʥA0x'sRaN~E#p aN ?^XWPG{Z墸8Q{w'TrUy!G;$qYm '~V!#gz $UG9jН$}hPҽN,G#ל=R[A<ҐG<{~? d`Lb8편% PzR5yRq QZ[(K짒x c HRmKN3(<R=(h(<*cSsqzilk9#w}F䄑w##mv񨟚3Ʒlȍԙ/^)ڼ۾_+'ja~VK߲>k5eWəm`W̊H@~Y'X1!9D~d*0z󜞕jI>..ݙjgpn(wf! ?9<#T7Y$vu5EW4_BR)$6ve'#0qʞnU(ޥUVA8h@)hpOk|g8U9 [I*ಯr!kd2]c>\`856>VE1ԾzgkH(dln!W $Vؿ468FT L E,%mu1I`p*,BϩGE_&s'3deVR8c"WnA3D08'Ϲb% Foa'A܌:FyS)_ Ql0 `V<-%bGe ;MhOPf3#$ۧ8TW YL"sp@f' +EV W*Wj3Y#6T*NN2Jz˚h1]@΢F+#=i#hF MFXo'{UG2bwU!Q3L$\UxWUwsyN:ՉnB]|vAF]-@Z۷] ADIdkmM㞕}<[yy9ҵ=WοGh#aNC`+ xq9e]dy;Xm'h]>c1쏠a#&l:tD 0|:|~\<Hbr FFI}o72716kEks `$XqÓ=y{W1w*Ŏ :i$r7 q/Ԃ W!tvq@+ϭp%qm(0c @ys"Wgs ݻiONY_{4#d)Br6a}Hm=M+ $T"A`߿~v-Qqw'kwTDrym"Tt8N`G` .X)_ OA׭Br1;S_MnW_K J }wTcx,X;w m#jc(nrX 8#Q =2)K)ͷ?uYczYS?69y+n zgJvD,N 9'OT2! 9-Vzs7"hR9nz淭QKݒ6o8ҐKoAmwztf&EooZGoW9U@##io .Gn*2q'ĎHʱ_m,jRz*]VHJ#qHVcR}u`pNz$zXjϰ]8H gܷ?Z&⩻\ 0zI>akN#Fw8 AȠk>xiݒ!hVzqVôefD`c?\UmEVFA8sX1fcULO,Aqm|Cvy#qM>X6H8b \[л[-N%/æ,Yqq{]deG\+Mr*l8ڬz3⣒^s\jׯBcZ层p1?0q,@}@# ׵=[yO6(,w\Z2!iL SO[ BrKc3lPsI9ȩ Y. V|0prxgm Ɏ2X s4#NOOl~u< ce˃9+9.bA pҠ۹VħFn? >8S8#w)^6qF:MUiv:aR%Yۀvj#"n2p N>+*XcT@1VqjJXC | _U3>s$Nd_Ϩ=/AN8n֛) K'hO%{v~mghU;'<}*ᑥ[pWۼ鎔*1瑎T9*ϸq׎(k _Q\`9>zNahA&Fpp2G9'Ў4qv1<*{qB:|_PqsSJOHbIJmJ(9U.I =1SZ zlWx6r8{{zeЙnBT -zrGT#1$85QTPn?x>nj{cWR^邱 Upy'޴c0XF?*q}!-(;v0<+9K]CQlYCpy'm"y3UКD-ilr qԏ^H>H<r2OAG<7`cgAk|\wK瓒1~C!)*W8@.wܬǮF ٤&7^Zx^ g;j%ʗ6Vm[JΠ r#ү6yWR:ٙ8jZ:E#H Ur:*O@@d&o.S `z}p:Mn<  R?IƸcbɞ)8uW1H g%MȊQoa,Ehߓ {-b8ʖ#lTFzXr\H6p>a;:e^cs=7;P20853IϯALf'< pO_\lw7^, yQq\ nyֱ*8ߜ|]IU3p1 ϡ#jo9?:5)ip=nsޝvtxD)ۑԨ N?ȯ^tyTjQ֐91:ڮbq8?gS:r{BYBũ0B`<5qQk޶Rȷ1̐+0ɌH HwG3R|#x$hSe51Ve%@j$UaNI5Mo:  ӯJxѤM:~e]CZO.xcqRU[\0OT]܄یӂkRI185Rkφ3XFree~2Fx<<\%@K\ί8C q

ۏ'R6Irb6d#Ʉt-Ksswe=->:fm՘hW+g%pxV{X+,[A 1zojeQSodS8ugkfs\ICr9;_gXmJ쮊F*.1=x3HQx_ADJx2s  9zu))cCSM~'r tKEn 2G<H ' {Un ʓ13odgjP 9&HTf-'2HI I8SLX~I=3xw%q 7>@F>MBʂrc]Av}lO#8率;pxVLw6\qSH^Nϗ8Oh` HwSЪf9<1בRG'^zzZŀz1})ѭd0+춛qa\̚cĀp0`׵CvyX-ދrF~TۘےFҭ*Xt &w9j67W{<ژ)8%Sl0H'=:?NE^#l. wqNne{a\[\4AowU1Us=I5e'ĻV\=>Хwsʞ{ki!3q3 BeЭq]YjbHUPV+AI4I8۲hXa%H(qNCdcg*[61\Qiv1'uVf\΂3H$d;)##&,IV `Pr2p[ūu0).^Dmi3QdHlIU#y~hʶCgڮG+[E0'N 89'<O47t^V= ߯ZQ I\tl'>1u ӽIweמKm8p2xAzЀ]UAG!P9{Fh\:7P\}; u I?9RG˕agNy<1vF;pq*@8 0lvO=Zr9&#=9 av#'ۥ" :-.O cΑ QֵU4o`* :Q] Hg}"*BŔTsҖKU#-3: ++6Z95 fblڤe`PvM>TK/>s*Dw.Q2={5>n$8n@+XSo+(9"MH|==ܠyLJWiW{cp*Av8Ũ=^Տg ;Zw:9mo mb3s?uvlHǑW71b1۞(B ҥF8FCer6py%Dryy7,1\*x5Ud\qsXS80pEU~cs%@Hݟ  TdRrnӧ@?MSGFv`u[ЩU%}B> b_9qo= O3`c~C^f6q: X&6&K+lϗAO=3rHN˿;zי\JBmb`R:HXh3ʩr;KyvYHrpHm1yNK!Npհzd0=+)? "A39 8w[  r{ΥOK{\#T9y=:ƻiZ8.|Tay(oF QdCO7Ɏv1y Y7ǯR4O՚yʆ0 ? dXRH);P1܁Y+D/2F(럧yΪ |$ONCѼY\Z qe99 x 5F9'Ў2=DpY0~\C^v0-gӓہKw@#hq۾OJl!T &y@< ďE+1<؞掬7v\ 0}gXnm!2sf-DArHcס#5tdve=_I9psP[-qbHPW ;|J錔\O'yFb6R Nt\ji(p n6K!r8<sc}{T88 8sǿFp<#J\63RcC8%5.y%A nW$Ub ۻn7ا'?ZϯH vf8w}@GC'9B4]kK⼏SS{/lm~srdi|FT;b E#51 JpY; p20:CNNNc u0zi)r%$n`D:( y՜!$ †<Hg^:*\0m*\8T|WBڻ8ayL,oL+ȬC~l8 jN 2،#ȃzzrkJ{G5Evq^&7Yfeܧ0jԗf9T )qyUɫ[qNKQPyle?.A’z#ћ:?ݤne'ws^EJVñ`G{&dRn+dߓA?3`F ;U[o'&P*`U2v:a?8aR5Vb(>לzöm4dK 8HPFLqBP{]Ϳa®4JW+3ӯ_ld._0ڪqǹKxyBpTXԷѦCp<ŜȬclBO5n;nE#3 srMTRRn^Flu칏`tA?VYb39Ϲ.t[$ϸیT'yֳkTi}unePʷI^Vk3PwpO$TKFN7RLԺ&v%pq>Cnڹb:娯&/)v*KnоdpN n zm;sLIYq$T5pGbCŒy瞃{#lp~Z'=? jH"nގ`sY[0;t)t-xxU r1m>|犛jt*#BK_OLkcJN$I\d$uM'5wj:n|6V vG?6ppcFNi{M{ʤT6o.;zF#v=1# Nz{Xw.aAR:#ayv6,1I㞘z<3([20Aq*JۀS>ޜUl;~6Un95l\z6e w'rmKr} pq8e?(R*⧿Zt(e9<_CCW|дL$R}뮂Ootx6NOZUC2*.Kp r=8H1pRŚ#`$>h ӑ޼ukdž5>.TEn>RK眞}nh{_'ciM(^؋) xH%*d;e^{ۛҭ$aռ܆(@A犫]|osiʂ>a8ޢ|HTf%W8Jl/2B9m Ad+H6(R\h0j?H|xZD0n$+ݜ#<FI z s(/Gϒ1oFTcy\]T3munW (B6NsּF{h-n̤(_'gǷrNry`uolu9G(2)32JCvy3Q"߈ʲ6򪪧Tr3֩3- s} ao9'{ʔݖ n^qlj(Lj+i޹;x'#$*FTt+^Kb井-͟ YFG+8ݜ+aT/pMJѱ R"+65O9UUHFm3{?usOhhAI2H[oPW;$v9U JgKci8gK(`\̎]gOrE6D#f4e C {z\vn \Vo 0ccf/qN<afSOLwlܙgh$28ҥ ,r sZ3./@Y>PA-d"d1n|s!umÓl}ïЎ+39DO=s/isޞ%srq~}ˡ:&좌Xjcr+8iBȣX6qC9#^$vKq] 1T ߟ\gc^sפ9F{ Yku$sP{GVĤn}|ޛHe#(Pݎg#9 !7>0N9l㧥QYI+0%83Fx4ԵdmZ[)!\Hcl8k[T$7asTJ%4[ċ} h|eHݞmi `H<= [?Ldӽ9U^);ے=J# 1#A PsSe;eglEzcR/.ҠDZV#,gߜgA-H W,pF7>z?!nʱ%()x=?Oi%Yr>KAG M.wG{i_ 2?2;x9ϧZP? jrJ/Rw@dpsP6܅NGf)'; _zgz ק{ |GF^7'R;p ۀ=Fjl<2}kڕAT mA]dR0Ɍ7nEb٢gB/T}~-ܜϏzƣy&XHI /s#d*y>eQ#9=Lk?F H?N*fqqG~4:a"tX9)z?Xcw'?m q@{6{ʃX6:\Áq12;ECE6(-1eNA;˒}~$r~P>Sse'[Q.@ &Cx]a>g%m}zui롴ByYDRddcJӂ+o6#8=N8"Jv43 }Ck1H ?J9eFNlYپRwˁV[y"Dͼ)޾d1 JA'Ư 1$*z|"}oP"8@!}Zğ bsOTˬU"x Ĺ'?<_%Z\P @ [qV`#j J c8mNHazuЦ8Dp9{g50w|.,ɁN2Rm}K6&I-d$sϧ3j2ڸP~zmքB >W#p nwrÃɨ܋8*v< w(Bm? r.O\Ė'y 5+i_B坲@H I唀sVuyfrKaAڴPSU١g k,IA@uMكsnOQY5c4)Z}^~gv+[,vp8nyǠ83{}m K"hg-]6a' 3r0?oeg׈x?1@\/Bs]^QNI=ON4؈PX5[3+ǿgd|nLySs%I+ mJ^u-s^(k }JnWmb}{mN _ 2Ksp+oGˡIרּ1 r|n@UR f}I~t'?e+lZ1 9}i*;jϝ)0XUtzhG$?q!y`Q󑜶B0{sTFв0NL׮ozEPs{GЂXqА1U8= l qܝG^=ᚉ]=J``iNT&Yd$+>bO~}j陂=O>q2t{.RЉec$_$qntNy!t$qOQUTlcŕאs>IP@^g; }+eݘ΂n=Op99z7fZ7zY=8-0d?O֭u; Yí]<]&TlLd ec#Fx 9/av0؞ZU^yLilXkIs#VuIvU⿲ P ; q$'SI'u)SM+\RŐzåMnPKpz145)-t%qZUdxN`dU`Gs\DŽm}9yTo`Ĩ#zj/WM!r˷eWvJ/ݸi<-so$dÎpF3c9x$#}HB'y<%9%OR' evr+$³1ZVUiںydyku6^\/qs>d}2~V/6g^}[_Ŧ[6zAxGv@>Mt9Q"D0FE g'y48rW:$G7 !rUQ$fE9܄ϸl'`oZJKw=,bn7NSv9~^DBG%AR/`; pG8I8'=A9exOK ) \K`vJ!?t =29ϨEƞ0y?+_+߸2 қ+`@tɪFM1`Ṇz}Uq8-3דU6XE}$Y.1 HHu9=QՐ8'۸2 ݎ=I?,Y: 0NFNq+^}`?=awpy?Zȇ+^w3 k2ed #'$?:R+!\daA# =e݈l+Ǡ'}qΪwX2Wny铌_Q{#0xLlB09"LolvRIR34̳)e%lÌm8dvb̮TGPxI>B61 .3 qϧQhd>Y<*6OR:f.p˺ EÀpc#?Ub'bE]Ėg'zPKsjݜ= @篿=+2ha ocy0qӋԍ݇yʪvF$Aǟҳ,?ϗݎF98j|[jU5ͻ!ޞYf0D#מ-xiFX}Fzj3!is*6~tm涼l[( NNq N3Һj6Oe"4b ` }N}=#$)9|8^:로E99\ Wr>hI *zqy౜)?=O3N$f*B9J}q3V0O P?w!6I'fMk+kjঝ/$BbJv]?.OsS>@~B/-3+5%x5n8lvxL"dtV^7Wpvʡ;zSi)&#$ߓ5[R'DRH1OQZ$*> ?tN:rx֖LC&)Y8/ tx3׬b7iȈ |cRiRZf p *rc#x ;IC|q551k-Cr(>R)pS26KV @ jD݉tDo/  pwj\!A|,Y ϷjJG+-Ab!} $%Xn[܄${b5}A/#pFGL܂*T}"8 @=G__jjIšv1,w6у4eT{ 1׷n0iؿ8FsiGM3>Z_:xƝrl5!x"C =+GR{ppۀ2:mjOawl?7! qrI0jPNpr݃rpGqIH~`Fx\}Md͹ ƑmT#i@: %+mPS89w;lZq-t39F UG:{ZVП&53XV$!O{Vnص)`\Tm.cr$ۏ ^rBUÀïơ;Vw]n0Auܪ)0j_462jN`})Iν@۴ݼqנ85[|i:3r8%zRi쟡~}k(D!?#rO=P;gӭ+|4ysVI(UvuX3 *8裃~(dtƒ..;t[ 9ıc~Ea[N[x9KFs4 >v%psOC0+M$"`'Q_%:|_a𑦒…QG'#hַ&P n09߭x1bfXCbp@g5 峒eӗBĬpKzx$F} Inbr. {:\/A\W9Ѹ=z`S+^0A'^IOWܫ%ݏRI/nnHP7#tu# ,*@=utsּ}KKyuMS+pSQt,z=jʸ 0.V8=^#vm.|m9ٶƒ8'?0ˊ[[bpOȫTSxM"2$-ێ@9ǡS}{t%]6@FY VK ~Ri=nֽKPIJ,ɇF {x dL"?0m ԥ yKY$oTcw8^=d5e3ܤrp+jZMy%x;lMO|ěo:1['".56Jc-._sH}Pr1ڷٕ4ԴϪYxHР+&gGF̩#ךd7۠SFiGpy8Ay)JIC&|o \hr;G$mlf0HCg滛+y{GYVf;vr[9$;.UmM>?ü+Ն0#pnZ[R6 9aGVuvn$@8=+9CUmCI0\SQ𥳴ޅ\W?m5eG.ڱȌ$pUsWkxʜk@C(.Ոp`{נڢ'YcW_|]$s#R@_j"B>\([b1gTT¦+a 2{m\Li!2 K㑒W#9Ҹ[-99T{i[qOY*7 ',GO]f_ܴ,{zc'j W*Ow*Χ{S[Q Y@˓8랃 P|8b: >&IxT9#={uM߶H~RI\JxSNTڳy qaxY$d'I}{RGqFH$2 N7w`KP1 rH$=;"靠ʝ{yW9R1c3vH90}sMr9$ep:qjfRA1v{p(0#.ݻr0m92@su>,p}=BzT?ͱI ; $w^r1[Vy4cUʋ;ET=Iegj-rrg8:=3+pہ9BJԨ9 slt0aa(9ʸB ` )px[nHVKʂyVm?VVF{`*͌eBH^A{P>Čdۅzs;qY1e򫌑{cVanф<>ӭTq˸+{t[ȸ#r$~ǷLt_ Q,9 n, ɢ[Fry۟Qn1GUl}ztCfSeqA3^Is2}hkoH728pqR|8Jh6hLjac^k{N@@B2A=j:k˸ev.zqکiiko2-dy޾$d=]|QEv /|):p@+ɖXK@ĝ%$ c'0kܣ.hkjvoZYUVI*z Z[&Aϙ#޹ZϸbX6Dwxفj9eKu/,,E%CN;.8g̈%CGI0Kc$W_nRAzVW$#uf#9w/òGQğҐ3̨̃}  %4$$'9?Ö5HRr9g~ bx=9Nj12(~UlcROwco*bB ܑzk"u i…HCbI_r#<}=$bRNWnw"$1T# IZκ1vcAoH!]yn>%±|c] |W^G]9n 9^}yYrKcmw.;cqw=$Bd.d( d0p#R,1ʠ7BoRܵʸhGDd;IL=sU J1}G@ M#ݵr#dެz'P~0BKy?O=NrMWOrJ̐ -}uP70sr];QEWza9?tHF8Ud0G#b7pv/э u2>s3ۺ Zi[lXǒqѓӯ^iXe@9q7U^i_rDo <}p76Q{1#\qAw& $ܻAđ<2r<1$[w ^ǧ{UwH_ 8"(pI <.Nhelмgxg}} #!J!nj^vv voO=*78 pކ-cBm]ƒv3wTX˴zc V.##<vunČyȊR:~+.N7 Kkq3;nHR0[sPq.20qTZݿlX3+ |>ӡ<* a3I'o=3)KC$n)lݞ'F ,{YAl6ݴ`ڣR=sm''p9y҉1zy!P3mlHH!s݇J̮O`=s۞wl^mɗqIbr:ҵe]˕%.?_' ?kiJz`ϱZV^F8RyB*pY@YO9ćz{؉EɄ9$jOT',t9#օ/gg`d'z-3[pO|n G)JmCd r$CV1*?t K_"ޚpO<_ #$Hn)wm(Iۿ'H"Fy+6YOE<کTn3F *#,@?z~T`(0R`s}}啋r:Q䣼ygj-נ~5\V@(`= 9k>e_Fp~z̓Jz#8=*X8}zzЗi̖ۖ$06ĎIAqTTٕFrA9TWfSy찰v䳴erÿ֟ϵ1pHvqJ͔,ڹn|62F\5uD  *zOtf#k. /gP}Mv"w\uQ$ٔϖ i/ێ_zcp2'wU$RVZyQfl gզH€p{D b d9<-Astm,s,0]UM׾ .>g%9kCF7;'i [zj;rr;q>QƒӁc7%#uTqC~'gM!3>@=:PGX6vOLۻ$c qx?z!>EnwmvO4 <bEBޥM 䱓$pACOroV. ɜr0I4qI}{@6afFH<6id6W!JcIuNGFlxUe[b$1|`dpyqR(|8f-/OJhbɁ9o}>,2|T16O`j1M̎cd?Zo3S6a+߫pMFȲkn"c vȹGeaMhJ&[wľ`!LuK3UI낡NyV!T@ŷq'{ZXIT91'j^{:x"CWR@H#DuR 䑵}i!Q< GgjFs($o4 FU.Po1d?([S'!YqOO$k9lAl-XB㑅ꀂP8v'HhG2Qg0݁{S6r8 A 2I{^+6L+2n#I^ms8݃{$&nDS91sM^A ?ʹn\H~a裦1"3H$ d+65 OASw/n qA壷RJICOJA q} RZIdɍ>쑟:֥%xa'#,@?OhTP_9H^aU\(,y?8y ,f -.A`Ү~|rCq`6@cܼ/# >w=ER&Cr968)m6s襸&;Uy<݀BR BoOTsc=FPp:t*"(p{lt8o^>^5 J>^/rOcNB/R8;[g=47vsw>c`{'ӌbG G>܊ǡE 9$ԜsU(UPqT k6K$8cj}jumF :4w+k͋w|dקiOy # tBEцX\6we1<$b7: |RcEB 8mִaN?NNyy آ'evmFgjm;N9Jf$+co>>Pv~V0aΫ.qMQy%P.IJnQ *MY2}Zf=&5\*`Ign>TAW;x` =?N<Ƚci0xbW9 OZ>؏$刢lu#ߚ"/vFd3K aI=&2c(8)]+tCaY9]qA觜u&qas q M1Qg;F9 #tW03..Ns4ԵirwH{.dn{8 7\dn2բ$ZR]%ڑD OpQ5Θcݛ1 {g{|㣱w$yWp9=ֲ@XyGJi}\#%b}OcWŧH~;Y3p|[9@P|>yUe1w|j˖-M˅Tdwx\X,$Q6>__FI~#Ux@:.z$:ԃOלuÔYf㌏2O>1U#=wz'aeh !c7a8ǃsj!g ȍI_#<){VO%Nニ`kw>)x_ڭL# 觵Zؿgm;(`>wye$sV ٭Y  8W9=)w 9''׎*\uʳj,nCA }0NN[rc+mrQo3\zڊn鴟J#F!{팥Ap@sOҷ-[u6g\{c9^ԬfUPDl.shۖTn]^=릌ϕ71&W8 ?ƭ.98_C֦W t I9TȬxAo=*@hcVU .p}R>V9_o??”[%L:.ͤ`:^q !P>omsO"'sHnyK98ZM"2Em.iDpQCFOζWW?JVO+ӥ#,9[W)0eyxT&Xy26^@Z5/k\)Ӕ[~ͣl̛v99g|<=1R x_Dk f>PxJ}1.31{Hsx]E>qczN??ƣhݞoq75N}'=08m` xnvjNh& W,}:7w6YA?tݻ>'obC8< w? gq42I;FO9_luZĐ39{)9=)&ˏ Oln8Ϯjx<{8-X#nv=N☡UIy=3s<`àhKHB6 }q)_K2&Hv\ &:BI~I Y'Lw`9 zߧE&̱ ;~BBvqIVUlc9*wZqyr<|cz(SWjmlq{J.̛oGT6.?ұ7nv\ RVfVgpR }+0T/#vҨ R,HDPR~ BO? "OIi "h-1ĊnqtdݯNvM1bNw(]>^NzqUO7@=0:Qy^@ĻӣI3d†#G ݫn82׭GV E1j#@e\0q# SbU\|ـ1Pu0+/D*15 :7aXF*xVGL꤈?w ͑ј^ cSp~SWh8tuKיnٰ"VB3[q_2"Ɗf r,=G+Ӳ[eǛ2Ѥc/%s\ND2He6c `x Yht}ds$qyh2Q\#df%vof#E_ҞP sˏ?q猧ڬ>: -npr9<]8JͯqM'2վ"A\@=jƌa02ByyfU< kZF4qAKszL>#Ah ,H*@?kcKF趑 ³k.9v&j Y8U\M|+RJMݽ>3Ӆ(h,\UQCBNѷ#sNޝysf6-8vxx~=*{(Y)墒啘`d+sʵbSKc9S$g~5oay' 8ƴ>8R> cX2GTqy qsBeI|͖zga@A sU=AmGURt  9(z}fvRzw)Gr2^L'dMd0W%s+ɮ#򣷸*|Qѝr+h-}njjݭLF#ǜ;*m^ծmXҕrrC־+F=CqH^3O,YwVY2+Ѐp+5"fo2A>G;{{bs9gV?"k Ew$re@DӇ ,G1^I\I X! S#@q`1e)?i";i$HZGu"X,<^GHBr{\evW/DOץnXOr,&L533,;T&^~yusIѠWd/p<. bAW4Kly2a[$nuKS3QX/@pspݿwr_猒@2AtLR ۏ* cjvn2 ?0b_먑j$r`e@D둖 k Kot>"I-\PH0HNXW޻ųȡ'pa#K G Z#զWC޼?XgE c,ŁUy=Gc_Qh_`^wsHc^ 8>;0J>vڻ'p֩OvO ^}ӻ<3"2 I'nw1<{{Q7qEXy..E"W(F{ֻ KeYʆHV\ʳs"'q֭P_ސ{Fʹ. `ǟʼyo'P$X]8xϵURZyqv$a`>e.Vc@ 'FuҍhNLb%d 'TPrUp7g= @8Ad> T|19~q'_'FA${TXVu#joGy)u[kxnyPQN7* Lb6hp3ؐB}㊁A+n ͞}õR!bN^G.z?rc]yx8ު}S=AvFYIss{W-*Sx߫>By0#`pH:ߎ ~v +?s.pn*IR#Tm|H ߿9u].m&FE}:{օ3;h=;lyڔ(vÇlp>Ҹ #,J)6==] eYZX3pclarpr}뎽Frc'hUFm(5bm'}ZDZep>>Ԏ5;N2Ė"f%Юnlsԛ>@B8IM#_m T瓁Sո5 lv@V#`c)9 M"b;W97n*v9s׿KUʅ$ҳ_8'z=yL\0y9SrW2l;r9Ƕ~?z 15. d6dRsԂJ>5婘EqXq9Ey>yd>[hgG {Mh ,m'>ּ{UG-G}]U1SM0I~u!L`AW}G׋R}mg6`g2K0d*ecCٟ8$N<ݽLẁpF" dƅ _B,rGrSҴGG*@=}{V=EX PsCVٸwCoop`sr9R&:O-3`r09NqUv 0UnFr TuFc8P>`N=98PrNͻ`⯯a=x]YUP ~*ҫ vT GT F7 9\ߞ5eS2KxTd [hFc+܌$v="yӄp6nI$cV16D`s ӃRڌqƪCל}RxJ4De0<A)6x mXϛ2\2䊴me#c8Ԉ\*yʖ=GZ l*i*H 8LWĦ$ m$zUh)t5W3*񴞕jnӵKÑⷛs礮Ig6`O^>;V{)GT*(aUwl>cN),q]*#?;i\|d$A%u鏡j{Iy~XOⳞprI}999o1`fkً#v~P$'n֗n8͌d6A{]P >8=shzL~L:PɴF r] 1 4lBs늴-Xf?(PXN+46Eet!\.HG_BD*rXCX8YBBsp=Oef; XUHf8t i.#B+W({gS%s1Gt{nO 0ϯֿwR#_Bul DZ'J}$9]ܪ N6iIlӨq+| 2w3[aO\gH=w`z`EL_pHTgv[>#qʚG<܌BW? cON?¥$AFi2,0?x $?1]2VNZX̱ z$gU~O]_.Kg8\F*˅ ⩻Ж} hʱ )%FK}<9 7jѮw/$d*e*MnN#+PFX;~梎Q q H7N{ khLd0xw y^j9\ -$zKVK[31]s@@')d^?r8 GI_o4;eX;`>B*w5LP,FF9I$|ݡH¨(y\:Uڻc:YU@#q9jcc"YW8p> QJzuKNq۽8AsOS$-ܛ!:\dnLd bVGK Ufy:{"yBw:p98Aʃ$p9E\3Nw[`r=q6%Է#iؽu(C!8~qT$^\0Kn#vL sݾX(v`vOaCwW)@e.3^Qpsi zRE; ?@{ѰFN2{[_Ͻmv)׿Z<߼@ݻ] V ^TL3u f?v?wh FF~nGOZܿ`Dœ1w>jDP?$9qקJ$&Vv[n9SR?*n`ǐ9BZ|Ўk{TlNI[%:},$֢A#훃Ou_Nw`6I8h1M@<7^:vЎk"ΪLQW ' d##W;Yl׵ WBHI Æ /*nي(PX<5ebF[g ch]q_QǯM NV|`$u(p |7[ZFU% o;&aՀUXV^^;+_coF^/r0;P3:? ɖ hR)#ffiu#0\ƿawSuȫʻ9cy܃d@׎-}zw~Uma9d1 #T9w=vQҹg|b48*H`p;trr030:WSTH F? gj_~P#$+)^.[jgⳌˎ{#;r9+9[EX[Xi Bdm-Dj\HsݚJI+#PHWSݒF{ӽVf=KC4@"f#Pp1Ϯ;{Sl'nx^2ʽc"Ƽ+qEhc“bXf$gl< 's֧}70Bڠ>_uQm_OU+|c'q = 8dB9ܷQG 7^ߥCkZӎb9\'դ79 9<BdI܁sFs_j˕;\:{sᡜa GQ8UH=V7:[:9=1Q `o\1{!1#yqAvaH\)3K')PF 0N7;zw_m~2\+9e>Gq-Ch[lr6\ Y~fFό< JM>\n9jI8͐rThI+>tloiuf8nB89p1)IݎjE8GU$&>@2021 _fD2)c.7ۆio O u=j.1DLө^׮{z:t;֖2bRA@oj$s}Zj+Kx!T4;sG?J?coU=W!7.6FI8~+=RG$=O>&9NX< k.3Y/ L1#sU+<a(T!^K ;1K2?ty rGHG˟;Q5/9*lth`CDSl?eWXw+e=A+=%Y<֌Ĥ0y GEHFWEÑ[{U^[e._b)bʪT|)(JKKv@<=R{b>GĤ0>Vj#ulOz$8;)c"U\uǽ+n]}Đ&]t}6 8\*^CzW3# t$Ty'4aeI_zdt2>[v9d_w6TU. ߵX}0<ݢы7PU隶Qefm<8nGQREr)u}w|u=⥆U\`V;9#>ZL;۽1RN 8gQ`=Z"8c $]Z$1g''.*݌x_6Rd91Eb>&/az8Fڿy *~\p;~8nP\1 ` ۷䵘}# Tc%qZڨ23$s+9y).Nm(+:V#mw\s ct?NrVqq'A,v亀2wby9{Z6gcb|{k]' 35!ڼI$lcR9/r*ONtNX1ϡe FI+Fg*6D>,;8 ޮ-HvF=XPyÖVALC~bASت8=O#LRh6DP(H[HO9ҴWTuE}ШmpMmGEdwz0?;M]@Đ,0伪ecT3tӢd+vV 4|-' cٰtM[}BoRQ iqfZ)67 ySf2hS1e++~n8?jzKlΨ9y%pzqPN7{uGm41]c8P,[:08!ryQޢ٭3i-)2yp|v)m{/$zGGCÚ r1ݲxphO%ۑ``n9j3kRI<ڞxz ;꿭*Ana9j>BC}zku'jJJeOppwnrOZ8qg$0jO}.Ux!ap3OA=ynrGoFiLqg,Ā >9ʻBt==qMV|_5{8 ֯,G$8Q?m(]VɩD~DG9'+y#Hrcrbl4լO%@co~Қ.]zRsϊޤ,ƌH%F:r`֡{!o*XtQT+y;bzj=de0x;#J5[3WpÕ>QO8?(ЙXI$2ç=jT]:}wo#T'oÁ A` Zvw3|n@+?Jk78`0@IchS8  b?*sө=Hˊ\1l ֭l~o㓞ZV^0Ac<g723OcQfBobkBU$*F-D'q͚DUoe~;=2_J މ+o|1# IL G#.>knH[<}Y-B)sPN98ЙJ%B'#29Mv?)~D1_eՔ::+ivS'$/=R))^S8]s3g+wn9ⵋQ˖=  rrӧUHmD[r ;[opz[6Z[B' 31DR8H^?v \' 8yQH( Arۏ =Y׏aWj;#4cn8oc@rf$bfLg%8PGYٯES'@= ^*Y!d61 Ԩ /L< qUnlm*{ZwijQgCNӐTnp1R$vzt+Y=tѝ#h(ZL<121M属v8=2tc}.;[iJU1qUe,SMѳ`dϥwQT䭂ӺdȐnT#6ܜcۜmn cߊi\lĮhBtbï+9 )p$qԂsVډ4ԇ]==72`W?v u>zcGYyK5sl8#pqںifQQ}yrB7dфMoCe!+ft+qS:F9H8ק8u:iEƣ gYA& Bv+8R[ f*1$O9;?zߏd{щp8^ 1c7L8KmaZF )e ~j&m>!:^Ev[|Ãz 2C@xV8=BeGݷե'c@r2\m8)+3g7ap*]]l/`sz=nQlܱ-+o$Hgġ"Q }GJ^^%Rm ^OvqcEXф/ O9:v\NV֖$g|#*$1nfQ RMskҥ9Es'܎H$sޅ4maTB(DŽ6ѷ#޼UVշw,BoGۺ vjњ.=F8Q#;NrV޹Y5 -v޾88˽^s8\"dŘpnSzg&mԻL`8''AzdgԧaEjB%<ܜuWz$)iM"BPrP1S88 ۻ)FF1Q}cnFJQ/7eJJwG)&"G;}HqTj+o8  's(,W'o1Rۜ-qjoɤ=n<Iy?+ <KRW}i`d9'{jNF@]9=ƭoo븤$) ,M-q3׏ַ[=w ~qޭ-=FF~=:7 gۏUD߸dgkQߌ)~DˡU1ZD;6 k:q $sr}8jaX(3O t9^ǡ]Ih9>)N9N}3q2ywt:bl:;#+-y zjq鉧C(Q i gZ?fF}*<OQ^yi-pt2<-Ww~u&*!Ys/:W^Mԓw.6I%t{jWhC8AN9TcIG@: sްضjEFms@G⑒b\&s 1 lctI~b:vw&r ojLINXcV+܂8wcoː~:H]'=s+FR0b;#RK# |f!}UfBd؀'  T"WMj6ghY#U Cz3MqqFdrK|dzVwvD5<\]%Q:@W1V]&9H7 =s1rLې cd29<bz˿k4F򺼭 /9_R1,]SRC)}8~yHR'b- _x ,2C8ݍ+zZ^Gںk[4>?o4H,4G9X7\[iy.#lnـ暳= ~M N@Qp:)h펹$ˈYItSjJqfw> 0ՄbW p_}zZyٚET<ޱiKRfD!dVBSnߗx$EWt`R?nѐd +qVܻ_?ʓ.uߘB_QߥvZrj owoddh집1 Wx> Z*)-s쟕NCX޸D1?kjj1Iy;OIb0z(8zEf1%F={+^=šnHp)vgbbv<YQ`NA4 [Ӆ9# u8FXA` *Wrw?(Z`3 mˌ̬F~P dBdU'$1RI2/lg9Bm`ġzHsYS .UI691Є("0@sۃ?:datP>\7q= -R8$  Mg)GBbX1H9W`>E'saG< 7@}Oj+,y:`zԍ,hFM;3XRd29(A޿JosAR60@T㏯1!Yw>ݱ  f\SF퍙%Qc=-^Pv/*xl  q$u;pWqAT60l ̟*˯RF91Q%fw"FV\m%c9u5;.Tv.ǯ9\B|{`T6Gsi4&m4j*Fy:ߋ4-EŦ˶lĒBmJ E}Z֣gZm:?in,me0y@_!b3T ܟ~v笜JEJo}3E/'U2U(BQԎԽΔb]^NrOeݱߥD׃f qA"Nv.y%GUF8_dc) Scg!yӎ#`)n<4~F9=gCA\ unzkqܷR7S6C/Py'ywszd-`Fr@bON9JOU"ov6{+Ndyj9\ޡqQ# F~XipҬ!p21`@(ÀTd+m$Xg5OY|E,N@k$n f6R$F:v=LÞ(88\3\v1z)dwrh=r8Tҍ &csԓ۷]HzAw$߭?%;s*mBot!|~rpIڢ'F@?7ԤYr7ӌ}iY  t*-{AUH9I8~np"þCF>a }9^^p>oOבqNIQb/N:[ܙu: P1\tǭbwa̪#3 .ne Ev<;ⴥ[S9wr2T$U^-̙J3!j:`R{c*2= g+v_X-88<;l'R,[pG*|ݱBr0s gHm|]}}TytI2׎OQߊȘyJp[|LbHC3R22Ջp\ 3ҭ2&vXpǂ6mJE}"Ÿ,Fp=ksג`gZ/ބpNpݕ ׽~ͯ8kG5 @0 s;gadB1(^k谵W>oFv"yX˵7 g胱RkhvT 6(8xkp2"bBČ`$b+7,Rl)$h2~lpAzբJȕTۉ܆9zdGA"1%ֽ72mtDP ӁMn@$g*1YO٤$XL*̯.eݸnS~S yunu&FzaK>mzsOXfXUl3܏Nj40Q~]3do^rx XReE N!Q/Hn> ګ3f8I&7f2A1>^eBn\F 0=N:Vhf^Y|c2prTlQqUyn_{|䏧jHa@Hۋ$ʩM8$y5^$~LMt[x*< u-#/Q{׾zVXBIQ\n.Q98-~q&MjjIʩ\0}sW0gi24 vA}517ah^U F?:ܞ]Ҝ::T+v,F n8Q#ۥaRJ=: 4JF9sƣ]9.#k;=G5T֣>  bYuCL㞕4zO' @SbH6d2stjԯ1Uy|2mXQfU{5D|\"ʾz䎿QorV w`~U;}]Rtpv('RsvSZli,* lX6'sӧ߁jbErppPO4CKo2ಆT>50x'pS Ilڧgġ0ŗwq?JpO9Ҵ[YfXey$Fў$was5mhGvA'q| OqQd7LҦ+ק*N~zUG˓p21<:i pqo|zg8:{RHv '֜%5pF Ti\/:[-JYyy*8u:Vna܂GۊMQ \w8ujG¸ c0sNlIKiFͷ<0cyyѩ(';rOAgo"_C~_j^}q|ӾND#ow%7`G֧jYFybAB՛ꐒ:QEfQJohDr#-N<.~Uv2M(,I\gϧf;8@Kձ|1ʇhԕdb0qSZFʪv)7i2/\";REApef]2ŗmo|n=+bB\|ZV'rL(Ű6}>\f4!#?+.3gשԥz7 \}cXeS8T$|.KMIwة6TJ  ~} >yd7뜏OҢ3%y̞YGP{GBl$RCGU?\rz2$$Zkԭ(ѹszV,\ݴ1c.=y~=ެ/N*0 NX09*6pGL{S0-'-CQQUl:duT)KS<; ׎AUqsB' ޠ{6Z[jzŬ2ϐz(e'}`<,{Cʜ ӎآ]RB0O##$qޭnKB;[WpU>뢟Qt!2#Cjr*p򏘰#ZsCtsT20. Tڐy۞ aKv8lޤ$),ry(Hw %F9 O42|pTh]Z-{vvtWӎjSp W>߅Rg< @9'ׂwʨ'c 's*$#98f9j.bw;p9+29$'2ċp8^On?&qODd^R27;7@=ϭi59x߲ƄH3犩Js;v3n."V#sq~uڜm)KHew u-"޽|'c3<|aEjG!wd]fywr~-9[b$ʂF2 gtc:ך2[T wݽ!l~fPzm=7ڡ-ad9#fQD$ۂq\i?"q^'=4ܟ/V-cH)t?! #:(ao_a~k#-igHӸ݄`t’\c(6Pݞ=:k0Tdo}N^iMA\,pדԎǩ0Sӎ#Vfܡ$B W5I``IYUB*B$I\༇b$y88|N{SL##`*py'siy#noyZϘgWnwv'pc9Vr˒qbt.[*6I. !*I Z܂(SxEC6HwI؉FZPzoN:6 }Osͷ+t0z3ݳU9G,F62zt+Z{V;e~?Įẓw`' V荬mI p_@'ЏV}x)~B.dcGOCu5?j`A$xmĀWr3cڰvpAH 31fxiښܺQlA%7=*℉P <@<r>-MB ?Z&* Faav XsvYID];}zeJ/yNwS.@;Cn9ZS2DQ6Cn$gkyD#0e|tr5o2)/%B`9oG'Wp~Y/jJ} +<9 c}H/W2n8 >iJ=+5n9@TXYyG;VŮu6ߝ zV|Ȟ2`2T0dt{qN:#?+(ߒAm۳Ojs9qBֺ=H\$szާ@ryI\랝*=0jÚ&Qݲr18LQ#'^>ˠ\sBAߴ$FHaVQ :OL֫{#&ܖXLr~} 2=e#* qs`)8jM߆oĖC$,'}ߐzzbЯ9ewLB18'juC8'[H]F@?!BwBK/y~yS GQnȚ1f?6#P:黠5efJ`qpKw#1d9 6pH逸Mg 9<4|ڏ=?HNgӶ UvT`v{UII~rc֬cXRc+6@2Ay#3W5UVA Q215vUςWXn93Y3I;<>c,bFB<8N!ی*O֕#t+')HϚ7m9*QǦimb;;Qܮzy ڴʎ'#=iIWd,TF{`d4$0XnT~modK -89dH^4E}T]0e6 uoNGrsqX7*Z<+A1=OzFbge`a299^{PTʹ `m_CV4rB0$ kp q6`㠪WVۤhC/ U'|K}xa|Jxf$ےn ~svgBN2H$;++TiuwX p}r}NGJE/܅zz·rnX{d BѴnllKF]8 .9?iF^ar ڒ+b4\}:;$.tl> 3z-5*:~W*62Hk*kx*qp]Di:[ ɜ'0Sa  |(~5O)XÁS8۴pF2IUk` `nlc5mנ2vȍGCkCcniFgU[KtnXݕ~f,<'-؎.y9$UǰZӯ$M9RtB8D Iq;YHI_iQHc?Z⤢#&,6k , K9{{btTvt|v|mc/A&YyLJ0霌k=u~7|d`+ƞ*kIc<g=>MX"&$.`|/+ _QM6 '9};U~^@g9JlH鵗8犚(#q~nԞ*Ч̗?1'ss1B8 d=ۧC>"^€3xQ{n^;v@=HSӁS'AS~ƚ "}#!Gl8WWĂH8YHLvC,WXy%wQE/mbBo1awރ־g.;픦:-N*e+k-=[@^ |ЭHYL,Cד^d~>M:wqFag,*x>Ro$nNX RI H ́,q(W%Gc,Vws"di0YCJ:UW zyyi&y68׎=wW9}~[ ʎJ{>_QqqIm?&y+MH02d9Ӊ'_n$~`gf6^ N6̝Cn%~=dU-HW Jq#䍙 X 1Ln3ZP>Qx ^׽e=ȼrNq8C郎 $sF0`9uD`tvf$c ʛۜ:yԔt`6VSŀ%{Nlڨ81G'zFDl3=g'9 8a@9m uA'p+N;a=9)'ϥ0C%u#h1C[ Bw'R~fbI}Q׊7x"M6T 8<)!`p2RGAq#8bx'p~a6sIo~F@-ay$QR+nFJ唆sl>maWx=q'gQ8냒x8q:eUs蜅m'i=jFC(p%F3$Ìǿh-%NCn8 3?zU< sr8f@KDRܪ2)G#BS6nP0?*pG'jH*8 ({U )m#%t UYv;U$=y㚖(|pArwnS#5e9mT'ᔜ `:({ R`#, $<rrwg*3-•4O0jcK+pqR\,OL3| =`0I|.E$UwK>b b%cRAR3Hoc^mJlGv]lBxcOJ %/lBOG+9}m4T g1(o898Wdj[INCe>f<*EYGcf f$׌tn"Hر;c-,OQhHC.Tm {sPխ(ߑk3ɻj#a$F{TB΁21'}SNĩjzvrɺeSL^L{fggqFw=bqr7dFSb:ۆ1~TQ K1q\So@S:0^Б'@q$g.alw:b/ 8H=N=AH1W2Y8>*7dyYKEf 9 7 n:p)3ғ2N#ZlɃ>u$xd ux=qTL(+ӃFe`2l^'wʠtuԽc q8- Pr9PݱU|s,x8݆}HQ򸤶-/̻#wN9sң~^A1ss'֡w2ȵWtJF:9UntnrLӒ` )=ܨӆO0xʱ/Y^XO@xoOJb#|0136y q$^b`cI2@`3r=1"z0<t%me$`@NR/$:q$v=xʣӡczXѷG0M%gI=FYے7gɯMW]N~k8xХr {W=qF$cvUqs%$"|^@w[8ӚȆ#lT0ܪ\%}zs_KB2Zx5ޛ2[𼒪;b(䓀+;VKZ )܃偖=s}+?CE-4|7u jN\?iĖ "q$_,hΫrL cGkF ߃"Kby]īU:\oS?ҨF$ 6gc$<֩u\<6ߏ^yT˲)hΎܓb>^v#} @Go?u>96㱫u3{69%(Nyx^V,08 98'hdjq7 XRLAqU9z;;h_eqeϑp3us|opt6ϡFyc '9qҪ.{v}Ҵpv?tmĐ۰sҳx#hPqR} o1{r ː=ĹSJ?7iD]q4ha!? >N4L ?VĞA=W`J(@@4 S Tn S7uf%9PUʧƛ>4"K#()$:ÞF+H[,dX6V8WdҒ<z%a%dXuv r77JmR, #쵱s +6z砨klS rǷ8,WMbV~@ܟ8FJ7ش?`ʂo7}?:zFx V}~c[HSn6AR?^H#8nHpy P;3ӞN21Hd[w?r>ՠ a`G jrAm#=\Bn/~Mۏ^y/#baQp7~wRm*~ppw~4ИBBā9暫#s?9a)7!9f {3>~``zGcGO'G 3ִn>mN8QoBLsoq ۏj ##9QՐfn8gy8W|'69 i/ą08!N0}=K$۵4fA3p|g%GU'~3U#8=sx9vܷPHL{[A{Z`8n8ԑ3M- V<3zUVD1; ^ rhvS ׌gJe*F16 OFVF$,>]@'=OSV#qpFK/1#O2-I{*8#i2b6>)Fj(@C0I^J#e'9ϯ<E>-A\'O@?)e0d^0Gu ]Q:6]639U#o)V_.X@[`@+|dL$9gNSnmB]U\*Hgm䑷<*%T[͜>VPTq9^dW֑sA#*z A׊n0b q0N>{Vn#عNp9WDRrng)=GT`WQI*Ý3mk&śK6)%x'SG#lI$uPRn=#g'ׂ)K;1.0q\]Q"BP\H/ҴQ$G0Nx)d^0XߌJ ;>b FqrzT},h 1mq’1<}Bdآ^2Lלfц*z7RFW3S{!BKsdOӵ=HeQI֒%"Nu`O=HHUsԎT~zoؒ$?6܀\i^nw0'8ג?ԯȫjeK|I)e0S:ʒzO?ʢ%dh$Ȁ<7NpIs8}!Nip sb̌LyH';t^ĒۨxH2 !#y.IM,ۏ$_݈5{ًX`6 0;و?/?},NV{}:И7qdwCr\r?JΒ;HTY8o2i`@9[vS +(A\;@ǨW`]FR_pg͑O犷 7mMyv˜iZe>xPyP77r;jP[m6Y6ώC! yMÐz2F3VUgeܸ;GaݞZӏOfX9 s׭\5~G,oR u# Sc 7\n1M?ɻ,3WvW'/'$$3)=]E(o,YN*= ? 1V?.<ִnwlʻjI*;<Ua` 8ZnL`2fcVV h PSkBQ3D;3cNMSQ*23?^*!(ܑ$ ԅv: *-ʆ 3ԟS}ʵU<(܁j3N6q㚖IXj.CГ<{לW=Fk.Y7w#a’>_ #Fm 'W*}t9=H\շkR/QT <=R<T&g؏WcT;,OdR q'Q- p+'dN݃˃c֐㵈 2:qVÅېp:;1֭؏wͣsx*3RTm;w z秽Bw) bYw(eeTf:hnӎ z LRb[9#q> <,dn$)u?)e8w4hⶁ7Kp3[f*@ dVdHvF899#?/ҥmBO?#t:U8F@8ZŶ676v <(=:@>L;)s>Rh_-0x9=r9M&Vb#;hz`u45^F-Z]gJ1|ҘFcA8)ʥ-=uf:\{:u@pt,šNwqm=k$7(RϐrF>rQ[Xp1Pe}nQ7C02 %A FO:QR%[ac* r2 ,{a_2q"0 kH$Psb\g|%V@xY'ԽԋD{^INpg!Tu׊[Qy +Ĭ&>IE} pCoiXnxqB皩$:API\ތUofŒg ?^ibc%rI4NW jMUUι&ʎ#uyY%ؤAIn{(w8;zF)#^({˲ _R烎@W#I|BDCt$zҗe$0b"mLwF~+7b>\c*?4yD#6dpb,#U8S_%Ȑ/)ǂGbŸUE iWb% =;&VE*" o6A&<` ]ʬr9$gZ K]N-m Pc`C,|FP3C= b.~ ۊ?#!L PɓUt2p94D3:ی2*[1TPXq=Olè>cdRC >~Ur瓚*>U0G;&E&c#s1#vTPZ,Ȩxps\qۚVěvfEO8$9*Jws؆$.9Z4#gMw9cO͞1 @䪣_ⳛ2mWm`Hq?/{Tb,7bwnag=ZE{ٖ3|zbJ8P8 787_]ԕ6J6Ex> ecn=~3D+Jo!A1(kJ цA\}ĎH<,$mW? \aKnjRj[IFaBA*sO\SLGnUAP,p2bp>ea6wNի%"urGopSi3ǧĭ$ c߃V]Ny5|m8'>ޢ{ǚkNKn-iK> w$9~?m;&Fd_ZkSQi4rw|m ӟN?Ph'ʓbA%WVw\O.>i#"~j-JO8䫆J8eRoUNl:+淘BufHlSdԐ3a'$& ,^N_ ) IxG֜ I2Z,Ҿ[IX9¹lqZ#abݹ :RR̃䎜tQ"$cbĐT;eLl 0O'wrUuppx9aIYMP7}zUsOayp`0S<=}JP\ r{twFIQJ7Z?/Q\,r?y'p[wmMU8nL1$LV\rXCfp9<-WRpr2NA [d21A+Mϔp띬BS ؓ4[T*l{HQvSR9}rH 5VV;w+RY2)T^1'($ 1 q*Pn VQϠ*;jaԞCэw̹lAi򻳳>xU!x%rn$5Dt+ǣAo6 G Ct'hGedg2RG8#Ts\Łvc8CYicoUv,OH$'8;Um m 9ϱ]*KoiN1TNo"]ZQ2hU}\nZk$RT=rsƸPJ\m ;UosXcVݑa.2rF( i[nЮ0m 62v@qmTz9کGqmedEFrqay&0({Pcv4}zȮfl/8#?~yVOY |hp-}GN3_~i~n^z8[ƛsF$` o8R*i-brȲ8_-.G9S؎mRknp2 w`<^OZlhq]fvr^91YϰF{zTJ 6XG9 '0,1tH?Ķ[(ZEY0NݧXm;N5ڤJrprx=zӖ"ZY˛F@<:pI\vG,Pl 眀OA֋C"v6x>y֬ŤgˌLܸ )@}oBq}qYǒːp2[h-[%Fr Q}FNHLTA9AR.TO' .^ԉ͐@$ p9^/V9<=j䵯»/$HH'E,vč|9uF} O,%~NVDŤ/F8N(B*YCHa7wtR%!  MėC1XpsU=B?/V98~4[;y;g* ON:qm .:@㑎q&W:0/t1ȇOԏ\p=T~ $i=yGEǏ`8zխq<1Shs$c>u8 g펿O^jRn#R/qR=ԛeO=xOߺ_>DswϥI~8_]DDA@~^;:6܃rqMu] e@nv IiHV^`9ʣYy~>VMo YGwA_¼nvi 9 y۟QҾw_k&q}9GiUO-x@9n{ٕ:a*0Ԯ#x1bOBg ^FXI+C7HBssOjo.ۋ.rFPG &\i6[Cb(э`Q"B#Hn>Mfݑ,nǐrfѐ8*#c N:sث5=_BO)Lw+ӯjv{)GB@jf!a*욱g -<&Pǯj'vNz=Fq^WyffˌeRwuzѴ$%,WQRVd ;T|'8Os# ?''N÷W45vrw-g pxݷde2A7(wtZG[,̖-'=8搷 q`o\w!=8m;Olc6XSB(b}dIB6;|󬉌h DVcʎT>[8P2NKvrO^j̎Ā'~}QeF?uA O+8҅qslgamfdWqݎ`yTx@@xhys AzvqB$Ku,>2pT(>Y2yU `wI D)O~1Z6J@P;g'?\ѰiJ!Pܱ 2r *X01S$|?(?+eH޺}h`p}²-lM/ŏR bF80Ipq\݌i:w!H =G_>7U(w0>ZNޯ>؛hzm\bNA -y?(8==H;Oǡ2:Pa9Ay䊞1\KI zR~`GJob'נr>^G@E#x$RzC#r<'%W4n-mg`s]N䃓8SpxV\GozKq9돘 '>F=cRNF>pg?1z}97*rqPKc!OT{x<(bPb΃jpFqӥF;@h9laU#B2699$u֗p[F1)ǦxbE91J$ym(qHcLH02>_{F;8Em 6$b9>dg'\2Yr~fT6T*֢ea5䏃;HQ8=s7 9Ww5p<7F@23֐=W .88 >Zkִ,CMƤ.LSڂ>#1Vn2ܜ`潋Zi嶮F$0 Ss8Z1}R=ZSqĬb%&5*H\玀ZVv +J?'Mnjb+j_ЖR9#=wqnKE I+B  !>`mw% 2q&’̣F# K9]+O`A8,wv o~-ͯNOό2cTY!;A17DGv;#vV~$WQjJld\WȔL+lFf'!'jжCeTP1%xж{?FG9'8w)+<}5fɵBT>p6NX5’8< Ƿ4Ax#;sϿnj 'qԄX`y$MRzr '$q3 qZ|Ɲ,܅NL?Jn08SZ$CLP۳ʎw<`M2B7.NHSe9’3=:-H 9ijb!C.팰Oޙ#SSm< vrG8gӠ9pMCXј(ma yW}m>s1CrYT ~j-ԕ"^_Wdn I$ɅK"ݽJ_̊8,NHXņIgooj$^akyvm݃$"ߙe~zns6 SK09>z ̑@ NtV4F6y8)We}±$9#8׵E`UsXldcנ;󱉓 ul`dt^,OKu9_Ig=yG }<ɓp, d.=AJm;lc?ά2Cm[ְf>p8`#ߝMfwG7pXd`2mg9\թXo$our8o ST{bHeRpF[ckpnU2;^FL|AYdYvpċv)a#u+F'%F?>jAUB0_n7L{$%R7ȲF99FXjO^ ݈e=W\Wn$Hq8>Nwo;IcRw w)V;tjI O>1ک%wolYXcw\)^y?ή( `U'93偑,HR$8uJz&:1^O#, NўN~FG #F+JgBkVRH^O,lw(#1=1;W!F d*i`2P8MbF6 O]ǥhЉ˖T㍿CxQ vXtt1$ 'H* d[JjN2#Y_luȢr rv=3Lr) 6 ntp +/%W#prù/E{#F)n[;q( o݀"FaF(69߭5%ځ\b"IhϦ('0P{p2y9+`$ %%b`>v>p轪 ㍭gN;#(O#6 q2dI@ž8?Nioȹd`@;Ia-zdhl m+QyQ@Yp@vPI1YNv3HrQ%"CI`Jp gߌzڣߔ%@`S8"NS@ۯlyv{zTu m$4p`-RHw峟Uk^MNAcS; &3=[Kkq)!H#O $s۞VzHW[a/N#g#svKH?8H]`1cӧO)Y,x0:d`~U!8 7:PvJn64f19p;gڛz] .ߔ/ Sѽi^vq5i_Qyq8ݏʪ4x1z/1gvU,99H#[z ngx;z:9Nq}0YPrS`q$r3'?7M԰ ucaY@'G-L#)#ޞ>Pg#?z,'LU;C7 2 n=IibH#9 gª䲂' @u ~/=Pw#99ӏΛz N֬#wĆFt |{ 1av#җ`LgIf•(ByAxjT(D'9s"[0iR?hf!#)9Cj|hXѽNI~wsӹ̸bGJq؍#.[9}h[)eWBϦ3P?al'#8֭?#I0rjP'# jY~BJv*ᡜ#[=1xY={p1Wn.[FT5wznX <1¹dWD=wHmExAqF0ezRKB0ǒ{~UxFr{#өb##6F11V5V%'JǸe6H'KVV>rAk\lc}hj| r:qӵ4o|n'Dtg `BpN?m<ͮ*wJ:u춶3' \i^GcSwSZ]a rG^yV$)D #\>i2 6y<늪 {1$sq99nYb u\ڧ1j~38PxsVrE),܀z֡km|ʹmݴy>$"[T8 yֱ[Sb'A=jR)EKx'n4ۙBvX>ܖ4 "3@lvIqߦp*Y#<( 1,j2X I`=T95?d=TH.g\^Gg+fZLD'QJ ;+prkzMM>.%h Y3~i *1%1RA&0xLg!qUe733;?-+N?Q瀼c=tpr6AҲmBG3 g&)H>RٔISs80z#t֦lG唓+z}OjiLimE&G'y K|W!cN*`* } |۹%>tr0ە~d9Z϶#`w69FF11G/|wc?UHrQ<ҟy y8*:Źdl0V.3T \e aA2ƐoNI;ZP'$g1GYW%{Iiq.A,*08-ˆGf$2)s$=;U(@r_-؎K26ySB#4ڄ9 =(npjM]סzngs#Dd)t*;݌ud\a9=?#|= ?zҾOkhٷ) eAӭn-~eQJ?|9S)Y~L-t)5䲪m Pu e;:̫U" W8̇:DI$GveXnۚ^O$u#TU**T}J{F?I'VCo!ЍX9=q_XȑiE°p,=35eܬcm;IR r.[$ki:|z[++89S$c32+ׯ(Vɘnny6QK6 zZ[_UU#Ek/36603xLVd%#U ;G319N;wߘB*9*Q>:+XI׊n=:PFr=-Ͽj@kxy~`#h>\.?.Z6Ziys#,_2iȟ/tkF[ 8zh7F*Òێ:PRchӀH}ON5 }崉+ rq4uBMjkĭmofQ#wn}jaIʂ@9=0?KWsNj+3 琌(<1¯}[ض x$_)YԆԴ_3yS]¡F1X&<8fxݲv.l1ݷ(_pN9 :se-LݤEۙDvS r3c=?:;phPAS#+ XQ­I'`ϱWv9r:ΦORT@'=HG5H[$w3iYB1Hq8P"<g_²@\T}MtvI:1lGܚ3 u]K.CҦQR9'Qu޴DٌfڹX?x|?,tPmuw#lF 6ӚI6AMS+sNx =+/KBÓ9<1V!9ScZWNB\&0H=9qq5 C[3 S] (Ө0Xv4>X91gkO6%KQX!8;O l u9;ǽ/l7{g,;@d8yX|z|+ylfahGßJNw@8#cڅV ̒WB"Un*mN_7@pGRީyٲg☳cQʉ"1E]J>3Nk9E[DejN1{O[eUnٯv*mӞ}ܒ:9ǿaRbM ?c`r:M*b qoҫe98TKqĵԂM9L>A==sTb7"7|;,穇MĦ%0`cg9FjK!t TF9qXʓQ4e{c=t9OC{'V R1rI2:{W'k+ګ/ x`{ߎ=iZ.>QMCQ{Rm0~KF|A<8hJv[3.B,ch'X36===HsXiYE ~\IZ ~rhrN;ExC9P `Gɡ灀AvĺvTR;Y:R[I{rڞָb6pqGUm/1dTBg(ZM8BU#1C&ѧʶp;P|ZU2)&T.J 6qzl>Qb9$={G E EA{1}3Yky9Elډv&el;I =2^\r2q8%;=ˑ8\!;aO=O>)ɽ8ϗ [$!w;{Bjc8 <@M g# |6#Oʦmz 0#ƪ.4Hc GU9n!ti Fz{v*nVȺ `6J۷Ij?!#?4vY D۴1`:Ve!ӷ ' >bF?53wZ m\8gT.: >*WU@=x:I#l*' v1rsӏqSOb@=$tg<9>n0y3WST.cHO,bN{kɝ-:tdU*8 /'h _^UpYr8Kt׽_peG;%*7ЃWPJ,J3aI<+#*b;: M[a惴lGE7b($mv#dC dS5:BUSUg#Rd2,NU$dzwСdD#>Sq&YAqBRܤ`+; yj(Kp>BH vz3u veF\ ֝#ݷ*1*::ɫ$ pw<QU+e nb˷<=iKkC&!)=g3K[\GEFK{@2[Ϊc6| o<ifHI(@NzՎ'ﭦI-{}UIがtO|anx9&kc4tuZzʎn_;.bszWcK&(ⵆ=|}.KN:zmk-#$|jrrNZ^HO@\Hʌ'p+3Rյ³`2 ~ ;j׸p6J "C7 G'ד-0%ڈ]˧$q3!]N8]#T;eIeI`kg39UO[[3!00x^[ _N]ݡYl즚9dD+"C=)E6CRQWn͚ '_*AnI'Dʧ`W EY^ "~qO/Gئ[ЩSmWfeG#r u[K41S r;⚕)ۊ\/m$'!Gj^EGh#r g^*jrUmU L3 zKs[c(qqJ }xק ۜRbotI{#cq מ8Lw8bjcy 8{q{%$:*8`@ҡBI\Hs*AO,^8#8# :sלTy%l i sUʃkt}ҴD!lnm;9 6{~&J@Lo%@`N>&)(`xG=0 y:Ϸ\w ݟj3AVǡAnk`ϥ#ڄ\1t^W.L,$cߝT;8`y9RرeG2G=<*Ұv,I }'sBaqm#8V86:zj/rl`8'*A o''#? ݀A y?LP,q$qx4-A7v1Ip8+b,oSaze-aJn AW h N98lz'$$A3ArjHʮpԨaOА9yO3=:Ԋ>\cIh2sR3@ &F\v{w8u) 1mfSvss—9݂4fK'8OnjAf:`g 'ֆ1Tcw@ 1gRzT|p6ɻ /CǥE2cuך}ЬpʱpGJvۜ8?g'=S *&T<&T&xAӸzSz5v}m)K'JvT=1͖ ۂʹ>¡Ry?&r1שVR/)WF޸06*8cj{R7` 5g%?X w [@J1vf,PɈ)`X,8YȧʓNC2H_39+ԟM#d@f'bӰLb>@UJ9(6?Tx $Ʉa0p1=qI?bGHdRK!6s qNP#B UnG3tJM 〠sOץj cmneGe݀ q㊪z_{ȮI2Ġcѱ,ѮI.ܔR^<ޞ&|I'vszzUT'}02ݠp?Yfc'0°8#ӧzj&.>Pr9F:g$c?({gsE>O9nf8-24Jvr9oCjkO{O0O̡z ۉNQ;W(ܩFx9[5JE '+zOv.ݴtPuNN0)C5ڠHIc ǏL XrI#'M+W1)2G6a/ }@$yp?&Y 1 N|\crZWPeKvXY0MG_OR JC4CBzTin_1 )xT!#lEc?*/ i~Ry_+s|#5(SpM]N>jK{e~]N6g@7vp* ;"ҾgVGw=̆҅N 6YC NYOu-NŢfVu n';G5Xۜ *^ڨTt۹CTiK?аPrll t}=(w%XsTqϠA68/KÎsWdB0]q$q9CWє#!H)V ;˺TZ1ÐpFu7*0m{j5URIȮaUjooktzjHHٓžt}!hJ G9?Ҹj-IWKn֥SC=s''O˯J7xڻH?ZB{$zuxޠg ߀[#:S22GΗPIr[$qw}TBxpq9p*h.@'nEd)ZM`B QT͎9Z&?NYb;mYQXd}=jf"G^ TF:6=IvȴZ۾O'*\$`g1[{X>i˅V ˊIϚ++}tZNv?'8AOQ8cu3cK޷ج'1dU7u=c)+Xhv3#=268ZJNA ?7U6*A¦={ib~P:_$glz9wQѦ;PS?ttx B?^ќHuj|'zWl<9Qrqpktx9#9OɵR6K^\.(9'GIҩ%t;et q=TQ,aA>F$d˲ߞ6Re01_`uTY#.' $b6]O1[ aN719\,qh8kUN /FO߿FқՂn$! ҙ8<4F@2rݷsֻWjo&^tXnd L~^,rXBrCՔF>`A8ҭ[Q!.@A<lN3|ypE4&,C'B|^MH+@HJ)8e x#Z,Өr( zUHO1O-sО+dKit7n!.0MJ@8n)P6w)j9v!]PF:%=@5~dTy \[ҋf>-R22NHPy5ul۷BIONO\ Z Ծ+ |/`7=;Dy q2,tIvD]U_{)E@ARN/=+4-,A6'*'9z` N.i!&I|?˭uPqϷ8{UǩZ+qv8Ƿoi`9'?.38[&ǻfH@NZ9fP2sukE2e_$ I#痎Q ROw1U^#zV^7r?:=T+>V}*`$W[V{u{/+w{0bʤ0NT'2w\-(r2 ñ,N; FzdeHO bzmjBM;rq: k hUĘ-vPG8cYHf/G;sujQd\!@ #縪v-7sgJo5a0rH!w88sQI ?:c t⯷Oo4r)c'F0v'8cxqpC*\<8sI.I9%b5ԱBz,rS> 41=6JYrN ,QzU%b0Sj>~)R8̹†*9*Ǔ:v1_h+"),[ 9Rʠ8{~5W@PyPwԍ*rܫǘY$VJ8BkOnsLW&xuv)=wqLxr`r6x$3סl ~b9a`&PI;A?Ȥ3H9a=j6Nx1I};9TO$98UBcЁ)aUvC(u"|> +_LK/zǸ2#_JUR8X9.d&ʳ\so` zw'%:$sS4۸Ұ_b~P3AjW  /~2z{Ծw"PF8 w39'q n h!1<Џs<ɴP>\' -' w>ԡ)bdr΋7fT(>gcN~Σ{BTs&9>ꖿq#rG_s=A);rr9ΟAud{sqОr9% ]q ~P;灚`b1aqLuӚ9=~t'Ҫ?dBr~saG+zj!]Ăgc} 9Nm FL-,,A#v1R;9H7$^UF|`23e4 CNdJv1 ݷ8vxBOpGJ, PrTr0?:**lda7!C2v"A)$ ΣTUF8rғ/BUR}ҟn]oJ_ p1@ 4+Up|I,}~޷"/(ʅpHI9>"j璝ڠu}i=#ݴ>f _-b@#? R:]" ?eI2H!z{85T,e$*waN9Ѽn޻SYh% vQ+YFY Iy烏ZڞC.{AԈr\9ᡳ$fgW㧩f'9=-&F1B!o=;ȡ~lfe |Mw.ʀ|9ҴT(v9,{WzX߻ wgKV0ΥUl*%PEGa>2O'P~F ݆qB^$e FJt$`EmF)\;6znӵif6vvpG҈DaJl #ZG+KG=sn 5},~s,K?>CzꢊeyqrtSBS+~7-rc1w$ SC_5<dߩzXywHppsY&9DlֳiSrw$#'ϥg88PpְDJ^CP\Khwo#nbrOZ}?$Cr%$FOQc#sf둏bWSD;w9]ܑ{I;; ',EURFǻnbBCp?>Թ&ݸ\X1S38 cqpy(lqe{0XNG.X;3zh]#$.d@>tHWzdWL #:?u;FYGPz â7w z}$>;~v'= 硬ƚW݁9!E8bRer|ʹ|ۉJ\ԷCkRբrRQLrK,ij5Oh$7s>i+eA#'@ۀjDU292ߎ3UA$͌Z|mة4O7|?Ϛ˔&c/VV?q:y@ӞxU2c174Q6-mdh˿ɴKs$֑`00=2=z/Ivc-_F{`=\zT/q=n㜕Je/CU?52q:dMFR3('bknؓv:: qQ5R3 \0ϔ2: {kqc d\u5$2`T(9#z{^]lJM#6JZ5Rd%&F1ǕxkMvyJO$d$ I$rsQ(>¶0Ho sZ 3nd 1})J6]NYP]ibVYHrRűīs.P=mo4"X&eP#V8ɭ`]eSf;yw;'$sӎԆ3W=z3TdL/-ʐprC ŸMn=G\cdSUUОb8Te?(c^yUw!bv.B+BFkI#PI=3׭!.3bo,;<60rҳaq=K%@8LʪRvܘFFO@8@e- $gJ"EMQ[7 ڡ F#WךI]#&!OeA P *>rx P~QUFwf+FK.Jž2\M]2N =\{R}x$}Ո䃡=8W=o}#Gn!;㯷8C3V`D'}1jT޽Jt"l@O& f810Ts[ETrT'5nq+F폛09G=1@15#&J՘.S{?t}is{M?FC C(%GN )@^=r(wظTTO 'ێخ~7`62^\6i ddT~AjcjsZvH'+墖ݸ?nCg=sY)hcC`'QEu+,alۊhI M:jA@sץK̕5<"/U'Cܮ[ހqߧz|`<.ӓ('9JH7|~n8as槜2D~9'=;T.Uy'*3p'βJ^}т'SN0Pvmzzm]);$)c`O@}qLU `'HJ-F8?T v6^C0V 0Sy7zhD+@`=1d3=[`Dlgpt㿧NCyY6az~&5,,,iAʀcNV21Ue~3Sz"J3OsۥN.9$Gޯ;gӽJ:grer\R19PN@Օ#hRdy#9 :{S _2)]7J0NJnz Bs~.#ҥ;3 ;) ]4hDt̸8,q`sJ_U78$uw݆zV"kƖRʤ+Dt?1Z)JV'h-yE~e7H+7]oA!$UG#O }[]# W8q%#+O(?6c!N3ymnWQKy]6DHGѾTvF=AW|x[mkkK9bf*%9 Qs8)Sk,**& vGq:D3kF[.B'C<;D3;:F ~]J1%HD݉ArWz'y[H7'q LrGf`b |.c"F=)+rNy>g-:;Ic $p"rNțKd8.{ճwq !1.O8~2}pzmnwcm˱-;‘cN*1n%]1)z'v4n|~viy`{Ρ~Yƍ,=x'N݂^I,݈͊ S.!NFsR%ĿgU-$'eqzߊ-m=.B010^{rK,,fR K#!zi9 14o_).k_VN B{ u#8(r:<| 9Ov ǽEM[Pz5 Z!=&-5$!wH@H]y85:00TtaW׏Zm;w^uzu\}FKU?iS.⧡oM[h˹y,N"9Ly{ӼdstVג6yQ*=A]o馯4TbL<،_\֪Z]'MujpU^7u9)\tONW9r _=Zە;E30d~>TǯNݪ_(^q:ltA EB!;K`Xd9)P[$PyQ ;BBT2,ʁ8##Yn#ik3)+y/ r9dc!mc-G\ZcH3xׯS߱݌=m7/ k@#ǩNTbŁڣB~fp=nU e\ r)H9ry99cǯTBp|$U,Gr8WE``S,S(\>:zqR"s{$1Tqw8j e qD]D|+nCCӾiXp88$^*o}dGͻ$Tp0ǿ~ht/X w(Uq@[1(;0a9ƶ,+˒rGl 9z\p܌0 qaF0NOScr1ǯrrr~ގr@rrzw a2d.r<9%[^1c X]HԌH@=;~7 r@$9f:sKpvmO' >h, NDJe9z:F !ϧpWG s)-z9ry}A}NϦhL `p*Ir=ќ>'9n@AMv#0cӦ@9积/+vq Tcto_ #?($[8:sOp>qǵ?Wļ6W==GBI-f$nv zvVJoFH3El cld2  '?{z| g#D]\q#;}x*m'$(?x4b?xd.1`7$%`8!zdJ:3"<<}3"Dptf.{cZ4|s2N'<x)9*V[8\1ӾxI |~vm%HsI"wxۋ搕>py]b*" H# ;%POn8uX )|ہ`F YVX"w"%x (9#:\<ʱۤA k4ʸ v^)7 ]^醖%$cBvxf.XFr;W#ܜSLm, AߌvE KpKzztvIKSN '-O~UΖ?@i}ͼvPxAJGM2L;IXwc#UplCn3fϠ,h-O0N_*E'h%Hq $u<==:R[E-x@g3s.FG*orN_2|Ivc +GGX(9gF:ۀ]T*ʞw@1Ңr88#{u遃I>`~wS:g]oi# P1rZ`3''h@@?nOzrKNSM]&ix! 8"IJ $`V44\#<1bpޕ [_׮Nf\ p8/O+|F|4d0]FW"oTe\]z.IQcڵ˰Aë+*$s bſ{hU]Td*R !O}d_Δdv՘ȱ1'u*Ŵ&g)#C01=o#FSNKXvGJ=}5~ˌm3 ׵sUbܶ{ qOS䁎WK?WI0GCp=TH^:ؑ=joqǁrS>ԜR{XcМ?Pw]M#c'O_nzsYl_c guK0F TqZoQGs V<F9ϨIUͻnLuD:9=Gn 09sQm-&RỨÞI'=}:Vjw pHnZn)C)IhFn%= ~qαzv+9ncD'Չ44Ucz2x#RC+1.:f3;NxOgFlAa|1sgԞKH@zm>=N@S|`s9⻩%vOXl|#Gԯ9ylvae䁕z[p;Jq瞺0bFq\DT'Ṙv:g!=3GU )o'}=9KQ rIoi2h izCF%cIU-kA29*э1<知y]Uesc l~\gL*b62 nd#z{wπŢiv.ConV/8'lLO#:F]#gO$*d0p9bŕcHVӊe"L6m=Os:# m9 x<KKOQp3:0#';T#>֢p̸!$|rXqj{~dr#ۿLdnA9'sVw]%cM#>a7ϺDYeYC:izFܿ1N8- =-#.t,D]l];p3aS3RyN\S|3ɟސz@ݕ9QF@cp9XtŴ]u'$ZHwflc3{0{CVU[$}]|ʀ Z==EkjPlDN㸓e9=z8~ d{RгqʹX^߭Xlz֢ROrV@9X8ZҏLE]IE@ct_a^Qp%W06Up@QgΟ8NHNxNg?38`pH cKɢ''q8jm)~0TM > 3ʖAo[ ^Zcys9 Eie01V  @h{V'=ܷ:Os89/!u)Tg:dTy: pUB===DyBK`2BH? iP`7~'zqR_2/%?Sq'Q=D@ yu@w!H/xyZ*FbR.*㷡3& XgUfT`I°l~R^K6Ю&,x<<{%zz rNyC2c `3Cӊ{/RB眑rOap GQJ;bHA7~Wl,s7C31V'BO /=`uopq;ytN-C (m( tQiycd^FgHyL9*yqL8ڧ.?K);m<"][j!^ ,rzv>d UFݻ;= vV8n"=Y ?NxNp0P7>j ,8⮝@c-V`GS{z !:w;f03ZGg9'p?: Eo2qs) 䓏LV#fTHgi}1Kkoo< 6z=zWB!r/qDۭr{7)]sHw9-@ Vk&s !vu>OVvV[;N@3MfgёpN^5_=N? iJ\8L+M1G^yݟ̍Hq}ѐ7n:\VDy zV`edLmۃT7Oc5Jܳc +T%FKgմs;) vhkrTf, dtW%0A?+Vz-_M+JYb&^Jq):YqZӿ7c>*厛ZC''`ޭ]}m(PqF1$ ٸtpGJa+g' PFKzOJІgҫкQHW%@cFq0/qf|f3O3` )DZq8YsX԰-2@#XOWӭՖhqII$znJFȠc 8lubW913*0NxpTb85zTmed9a?(؊q 5 )M" ߹N|g(LW3p{^X(8`X<9GM{ Z <*{fE~4-,`8eF0sY\3 847co' ?VUA8S%7G91M-᳸`_֛z$k⫛s$ N(o_Q4䪩^㏧P]z=qֱm `͕3qO^yH9G?GZ+Up;F0 g5 RJ]m> $r3ӠkG\0,IIG>P6H;%GOpl"w 8aP)Вs~}->EF99TTV1`r:PMυm3-@4/>}k `O͞oZZ`v*zwjVE'qnpf (@ ($CHc=IqPGB d7ic36p'zB-2x琻I?*"b2>n2+fHm~; 5Ԍ軇yUmkrݨTU*Tb X gV0KHÒ*:g$ʤo͍YfO(ai;9si7ˇ"?2>.L׊Kᘝ rttޚWeM'ץ4.[0`JwHaS yc j2sH^L"O%/6א{9SI"@NY`)=r>(QHJݙqjJ3#s`9qߵ 9bwcS~~5X/ cq\jܾ9|c;=0cC8]{/LcBd܈m;_zzܯLghe>bI v)neʳ+a>Ueb2`rWPA'ʧf6#*l0Ӱ^TyPw `ӎ} V3B7p$ sPVU* \!)  [ lP~bF x Y$4Nߨ-fd$}|pv8J઻'=jzh\H'Fwɸ+|\:3ZQ Cn^c=}& T ߞQnE¨ +UϠES%եc.qןj_+['pO={ӏ^:?UTW${v\4mp<1 /`UL @9Sg ߁R9= %";m*0?.NOlV#C&I9+}jȖ 2:cB r+JH8$^:g_3,);P#nwzֺ_Αcln)~sQ 6t@ .!q\݉3UONG|p~WrmY'm<隳]FFN\? W 9cK u#2I|5w?0zzuBn}wDGYESJ(<2vY,<܄lgZFf4b d'?Şm-7c$`[ƛngs9RPȁ1J\ݴ6$ěFK3687i瓛Eh쮤rdV >c|ݾ*qwݮѤ%b%r2>x2f0ۖl<ƚS7W쑑ǩ t9yr?/㌃E[*fXT5o/~$܀vlG pNK7c>D*Ȧ(N #qnfJDᜌ+<~bgʌS)X['z*Vvoyڴj$EK8=WGge7]ll ݲ0Ok+/S|CNF ӾԎ՞ =psF%9&vx`3s㚠9#ҩnmcyx?@8mNJh#g8|սдFhԮ :q^9V 6sMTwF8 mAvd9לz1B 2CztzsO2`%@=QQгBUI8%';zThY1Yx$2Z#xH 1#W>ʊs~{GҜWb)ݾ NWd휎2?¶ē2EMZr"ǻө+kxBsݪIQJ߯2̙yI%#/|ǨR8?Z O]*nZjF 듓ԓU_;@#'z?,5uHҷ\G Zi4)VmH)FOjq|B10J1 *ʶw1~Mu@W{3vm,t }rHix HRqZs5Uwa\N>zal-`=9Gjg$NBѕ.[*UX}yXyn ~UscSMS0t2,MW@A,*9Hi_1Z@G8 ;޵mHJ7RI?ww8~%7b@dc sRaܑ>}ǭh|q$e"Am\icoL%W=_kUw`tQ΀1$ ?ZQjq1ԍ?h!Cd;}I4{Dj]*ʿ1bpAbsS,1vr}OCw&E1ɴiD*Õ9 I9UPr_CR[$e<|QH:|DZTܛp>^O5 EFұPSBRr[d`>}rGcG"v/K C)8tmܜd0YͣDIQیln %!^쉴NqzI {G6*MudIJFT'3W(,c;{nR7[VMd`tJFy wsW_sڬƣq$桶6/PG`MpTUuh5/ԨGn}'pۼcLk>MС&gQߖ}+"Pe$G=qVV3)Gm#mg09?´L{`u Z&n#`ƤSJX2rJL̻̃$qVT$u OCEat黆py q<Z/6GX`mS*&X'9A8϶:sU}Es,}ɑresj.6RTu3۟›{U]rcisղ@BOƴaSP9A+I1-rQ93}.A'vu;Bv_#'3sq4$gz;ܮrG0{ z ^U8rԴV;~l==Ec7~SrBpzrzUFVw5.ZZfvaPI@jDoKcеtc99 zg5_,=2ALTCdu3* `z8} dNzzLߟ_JY",u#Z~'waWO\L,92'1x0Fzqcޡ0`HSIjZ\3x\dƣӌ(8~dh׿;Wl(N;Yp8c*NGmc2GW'pu3ֵ4edҌe bP®Wەo^݊OKQ g'f89PL$vkf[ I^n*OO~Fx;N?Z79Q;{i;\X77 }=GJD9$rO>P H7Q7c@+YRL-v8cMܥnT Ã;j9 ;ǡюśYBRL3E7+@$wvb`csue W,UsB.98Cp\O{.Up77?pWE7rw7?+Z}Q^t2[GeDfe/Q[ꗶZsFX}W-~^M);S_{3/h%Y"28n" [Ie2F ߴJ0p0pGlktyYEYOWh%u3!dsP)#s{WxMҮ^@L&9Q9Ȉn.=s#W(5oT$WrġфNsrXgq+m^I&;~b6{TEkcvy,Q⼄B-!Iwc %!9ǩm| FlaWs=8qԮʳ,i*{sޝH7 'j^P5-5Y|xY1c?0'hnXo0sP/^Cjp0w /9¨'秥,c+U;G–ۗ5EQbrVx00-Sz4Zuh嶟@iNwkMWXqkGegE%T`z簮V,fc dd⫟i򗍑$CN@1]4XF#y)h6~c90ζДi!#`,>ø"[9;&yv *ʑnxzƫ̟#G \/$Q5AIFQ^ZѤEP}r1>8Q1ұ.![$  =3sY_srI m}1Yg>'ᓑgZs0Ķ 9@>S' =BtF]0d1,31JJ}&b)S 3d'%G1& 78#_|[5 ÀRw0H 8˓w)rp(鎠%xbp~^s:MJ8ܭ0pAH cU$YX#*\gM#A*3cNynKy+-` ql 99{߸#F}0I79sӣf䓆xSw.Y>pq`;9Bm۴rYب+${w'0T#bs<})s$Cc8xD[wӶ=( C*$tǥ/@cb#'̼䃞?Zc6 fOgR N>wҞ3:Wr3#&,ϴmE]İ'o'?@78JYFTm<ط"v9*g=_gJXxS1v'wzǷCO8 ,~R̀CRA(j/\P2H)i#l ;Tr)4t#YGbqO'C r3cydps=u(ۆ·\c (fqѰ7;c''p3[r< *sאriܥ!T^Rxf?x v!IVCOGf#pOjq) n~^ 0}Fn9q9֑+F HJ{v $@> QcԂrvy%@!z=jOCQ1c;/oLҖzs'*{TJ\$`cM7@;vU<ܢRdwK$lPbOFx=WօEmbe`rw1ϭo#3ܬ0Ub@-%T[(x^>s4s=&j#|asTءW@89/q4 vqUz<`,O*{9Q#9B0tLQצַ&rRP ۉ`/z`{sƉgk7~V1+q2ryبn.U=. $m$1웳\4V$jn7\OAL\gNsa8, s3לcZgdpHn:p9@4 Ҵ^[;c λJFN $󹟀%^2vONԃ˜cj:5HbaZh%Ӏt~>YcBC:#ZTe3RKMUp^s5ZCgRw v?w \waBބsM:ZC$̖ɱUz$+Oș.C ֌ JRY>D?0;n{;<6M^dW]Ψ"R(ʖL(85q-C®Wޜ^ktE-)U''9"gC0޹Sqt=_Ij4Fq!%w~ld`@P +X)Nr9?uĢ9iىnsR>g\"u1L2C>_$$^=}Gn&HR$_t IϷ調2FOoj¦~H淋O)dATSzV/L'\U4o̘;/>ϱ_Z8 =N;s7rhCCߥ\=HzӧJ# >^sssҢ{FΛWo=3%Z>翠'CZ2>lZR۸@P=1O1798XN;]n`O6_Ö) :~n~bSFeI v;I zyʑa&t;* 'UbHݓa,eO @I }*7 mQmWD{@=:1:wӽ)ii$C ݸt .O_ʲ&C6 ~qNzVdeNniEY4N~R3շSqV{G̓spk W]wOW>cvSO̵tL"BU$ SҼS K#}vˡzp)tLh&Ep1"|4 BhVFqYA9 䵿He\e@ רRns!I aOn:Oq="¾[ K$ӹ\& ;_$FTfŷaBƅ['=["WṞmͣvTm<=Ӷ+3f GNpq^em+}$F[#+Gf3}7bIq*%2Bo_Q)0/@B+|[rm䏔wqۮy9v߸䂠=?:LbW:J͹e͟UrA>CS ;#P`'-fm<qYW2)|.8g__Z轑/}ݘV'~ditU[wՂ?Bz A%]ِBq޼=tL%vi%cUQ^٬aA_qEd"}y678}l㨫YUVl-F;+lC1ge}i 8cz\Fv+lOSӽ2r@i&G?1/ӏN84ʹe,\5/a&]I0 $~Y$r$A?۵Pb`6`]ԍ^1 R >P \o67GbziG@o+K8:NXv,NrL6frAF@>w1F@n(P]xTp8>Ep;c#@B%~Rb\_.<h裞IM9ϡܘmPOx98b2:nl}({\Nڊ3coN}^*'*Jdt[=)7*ftBA8;T<=N==;P5NQT/  _z*2ܒqzu HGL둀}jHrŘt0L䞡}z9. c/,o,ss0b /}=Yپ)I;S `ǎq5I:*r_ZWq#UR0v|?>y%!0OF?Βm6r@y'wAwv5j27˷##*Q1Jo?0k8[w- jٸSב#U+cNI8oAB7 ac _WXg<[9_ '{U_8 [V$U5'b?.Ti^YGo7G0/p8z~y?nQ~^Oץ8Hr0G8'1AO8==Tz¸٣T-匒CF8 ǠCaGpI>ǵRvO:I}p}~SV<<8cGL{f.r3؀$=Ja+Fu$uAש582GS}䍧!`p@Q̡TUT9QRD^n?&y*95T3HHܻzc&ؙ֥9V vܣ85Ĺ,#@*Ǯpyӽ]E7gl? A*x9ޢh $_51%vGʧw;rpb; -zO%r?)u(9Q@>K2!2)p8hO|TE#AzE& B\ln!sqT (,1G[+{!Y) )uTg8皾/r>֟o2$:M!< d,J2r\eG\\Ҋqh;ZGQǑI#R4F 2 ̀ӯODU*2 ǹnZ_wD^WAAR8JEf u$g6ߛ ps>ag'0e?/A\d8NWתQ. ێ}~$2T) 8dE0$%G,yh?RG)1EB$ @ W[ =m݋PJӶ ą#3+SPFB82~Ⱥ9)*]#0*pg<=Aw{أff;F:ԜL`8꿮*-x0v?Jp篿#;O ]}`|:m4g `1MJDerr33qצ lq#9'D#c%y\?=N)z61V؜G J;;Nlx w j'VF^px0{ eݖ ervZqҴ  1vObIu l C#!g}kXeR]PqcK j؜qנ'׽hO5hFf3N1< N?ֻ9rc<0AqP=HI9=t#4Xm񃎹c]S1Hp+v-$͛}6ۉ摰qb/`ӥuv (\uM%VMj2n7r8E;JʖB6$v:VG\#3[I SqVE殊[FԲ0?OXi-75\WL8E]ӒrqŐe@$eޕP]l_'8$ k6Nv|9CH~G}jUv, !b x*C>spq[pA%~l=+[Kv>^>E8>߅5uvwoP?Jn C!g#t M؟G Z+ PV[?kX𐲜g;<:2f; I{s)V"u/ A 0W~n:MkE^(yDw1=zT"Z 2 n ja' T~Pi(T`~Wedtdzϕ0rFx׵R۔?ʧ.~P2I 9G`p>P)'ߧ7ZYQϟ ʧJ<[ ~ #npXA'кmX9eX2 ҩh@zQʌgkׂj$M>lN qלM@fbbgv3@U!VhGu0.Kc'jhHjB%(I C1PV.j*Jftǵ erc~`8ԌS~'q$a,:ԞbԵhr,֒M!<.YW`*sߜdVΝqd؁sz}hkVUs{Ϣ0%2\eۀ%HnGb:NrFUd靃c1h̝.&l.ҸpNr$c5r xbT y]I$M 0Re.rKgAV8;6s' ,Ƈvn`q;S~qWD8^G9cleB9sLS m1짐F u>G\;qܥ~'gJq*ǻ'h!ozsC ٟe>fI$'0 H 8' .W*L* wdK+hKl>T© j2btu+HpRˆT:=yfv ƀK7A l!=Yr١]bF9ۂ:`U& T 1'?(0z\<>U\Úb~\yWLV . {TpA 9#rx3ެDn\͗$U(9w5ʐ2NOZзU xQGZSg5JL[\p{g"|JI.cm dyvJ 9v&mƑP͗$);BL{T{-/SrG`GR3)͐푞8:c,%N[~ʘ#I 7 O\6e fa]=zC\gsQ eMn68m9H+򑞇52#9w5Mnݍ;{$$#A8v 18ja9G)`~dOZ˩Q0n3F3# v |֩y]_3<: U: ˜`.8-dOδ-ۧˁ9 A=*Ó5]|s qjO ]Tx#5זs-F-<%quKOB# ҄t=K8p͕x]H<cLrﹺ k@9a/Ӧk9ne-Lq*lFPo sQ07+.v hk̛% ҰvYͻf 9<} D+7$q$$zS6 J3uҶR-n];Oǚ"A2OClKr_zv':qM;]pNO^dT왤`}8a l] p30x_dֿ3)Qܢr}9VK W@1EA6+k Pwqi 0~EH„3WqP@޵prz U4lhIsQGw%ˏCG7M6j%w!'p> i<1 It5oo#5J.WkcNn6F@=Iwz ʵE7fi8؎K aqDyCا鬗.)?ԏR =B 톧 2gBȾ|ϭ=B_hL }dt^k~fKƠd hKA 0ǧL 94I5e]Գ`* y8@(cxI>JId, !oAQwpUI'؏z>򋅓//<Afr1׵ QdeWA\8adpcO5Ы6~R `|ebAp 6ǯ Mv&h\wQH'!x ڟ;Z"U>рpG<љ:qz:k.Dv$۞O~Ҝnx%fBhKݨ>S!x߷ sH89V:֫sq$~E[:딐ڿ+0aa 8Ԓk3)̻i"6B\m8`1s>0yNKvW _[ЩMiwm3ͯ ?{?op6GbC`çzϸ.Wu08#]043f*!Q#}Xe yru5S&[g(=t-c'uRU{'z~%l6ﷂ9^N;#ikrمa[RE-dc ͳ{O8UbCUе[hۺn dvy/mnw;в۷E2O+gsheT89l3W[,ve};zqZPu q&bNe}s:y|oup`7uSnO +'dvƼUٞb#qr~nqPM=z߆ްqQ2Uw`Nr8=LXz8u%vp=k"7 q`4ql(`n,?:Wm:m\7v)ɗus2;okr@-V {{ +QߎNrNڦ6F36l!?[<V]̞d" g)J-#Ld;v< e bE5PGV :cZFTw6 {{Qd<=H\ iX8 䌰=;s$rqITӿD2:$"`cӎ2N{zMHq'=8zdvο 8RFrw޴q\Ϻiܠǡǯj|$BD\_y _DWb| =8vʀsmV$7/̙ )p:n}jqNO'9cғa L m?@_c9+^OkrC`~$aЭgæsҪRNlЀ:f%.@zfぐ܎C,3@l NU\q]Jw*8\qmRwdtMX*zf$E%<jET|Xp#o~kqiG?anNAb>eL:!@ಱ#)z]ԫzRr$|a(i<TvuޒOR֬$yw:Gx۰1p3=E˩9#PJ gpOSOq [{Us{c-֫co*z5fpp’9%rN1_*=;}*%Rؐ;.l+;I=+BGq r9%מ[_=R,O_\aqք bp08y¤Fs6꧎8?Y_=q\ nǧӽ7A,'  f5zN#\ ~DpVF2|(i͜w#@<؟׊ObS'>f5`z8[-08Q鞽=*c#ucz)$sݏ__T'<שM;qVC3ߧSZ @'ҚЙ9'< J@'$短H==;?J. _V㰭 xTH'z⽜67sĻݏ"$l'-lژ$ɯ?⍢~ 飷 cwNtg20—Wf^Y!ؕOJ,cĎl8;F݈MJuI )?#ۯy`8*@nKu88zSISh g|}jVYgX1~r8ڒbhm,2-?\G±ܖ1)m4ᰖ5_c8r2F;)Y#̍;,xIu`TzӈGEi6*5?Aw"!clK7.J5`S{TI&֨楖k-iu뚗d6mHǠ Y]M95< ,la~nJtfl e1r2!ҷfN7~ګn\Ί`7 \9]+Hҏr1rʛ߹TRK9BSp||sn>U:(F%9 s_C{/^MZ^Ćyu+x$d\\BY+ncC KcpJ6wȓrzu9y I qylUX3cImS~ ڵۙUo/;y1 pg+jIмGi+A  0Gc`w]\p]4Zs$|<3Xu4{c lr۹fF0z?4[%15P-]۾0+&ڽ-Rk j?%]kdPTsUJZ`c/ J9GQ{;gYnb3G"[XF6񜎁3 rhڅ2P$}FjZ)I-a[{VmG2 8z[v7?}w݇'q㊇I*.Av'nK}zqڬ7,s{ml~#>#CbAr\6ŁdGp[^u2~Ia]̌8+ңYoWi_#Ms+Ei6Qi'h^j\nE0$/AS*;M^l'Q"ߓ' I?7ך !c1yy̮;5Ffwm.RUxr0IҸMY@~w t=kz3Zz 0eHsSle@+y-cӸSsEȿ !ڊxY:KNpk)/N[=A5+a\c(9qsQ@3d =:jK~bR2qdӣ 'į,Jz)g:U2Q\[?*``稧lPsp'ez' "E?<e,d{qڥf!3FaF1Œt8x=KX( xWp6J[Is m~]v ՉOB9=kG\9#B@ 1c'$օQXBY<`p'< #'2R;VR)ms|O#)p>\ܜ`x1\̡pF~^#qH>Q-l{y#+1<{#:~/$@9;L<\t)-O;qt `3r@#)rxj%9‡#׀OJc};!JA8cu2v0ay ÒOI=~^~22WU7BNԾvU#8dn*qgx$ni@&Wī*7 Fq&#@99^lJ8$v9I㊐Rn H$nL知'1y8 z ds<bsA˞I K QOf㏙\$ g@u$gI?(Q%OVIPN=N g@ymۇOk܂l(XtaƘn<JJrpǟ4yls< ǰzyoϥܮۻ/zAwn;P?!Q1#$S)sK3U?( s=GR @Þ {d}!D~.:v-py=ބ$Oʠ r1s2;Z^R0\N8q58"Q͞&;dlR~'ק=*npy'xy g9OP_x F:,9T#cɴFy$=J6}V5ĒCpy!r:;qqYYbB( 28\A.;Ҹ#kf6P~Ső :9f폖bR1Ɛw7 ɵP by1 sB<sXmvpxV6cq31R䢛}1^gsaB7U,!7cq+z]2HO  2Wvp0z+1\-tjj1Nڝ-A"W+;1vx نj7!P*sqzt"Qrziӗ~S\4,7 g g(Uő^v)5/-0uMYo!zװG,~b:^j #.u9'ys+X̫YNTП\ֻGpEU L`Қi+uw%s.ÓKDΛ܀v 8wۤ1payѢ~OAJWvq2V>A`=1WKf ȭlqi1r?I)mrHRb-18z^p˼@NNFݱQ=!9ȍN+9#1ўIH n҈o!{t*5jGRH veTI e9>V8?zИO$_Z΢Iwz z &sq}GxMܐ6H6K~dןSec(RQ\~ʦ99W?G婫&Oۓ<?88{E%flg?7GA=iQqz}P"=z`r;;xQA8Եks_H@h]N;4yuOoUpzr^;{ӏN\ΎA@sߎݩ2E<6[w眦5E1ARW9#ef;FSuRI''z{2;Sh.N ZE3kT`}aBJGG 1WimF0<1yjkD Qjc cYc˜\XvyHd{ ~D t'UGG9ndI+)yt8dݻ0>v҆'圤)+yV UP"#P:{Ҿ-K%#ݞq4,9_ R8<}N e;|HerGCp9-.DyW꧒Qӯ5mzP ʤdURM:oHcBU?C敭Ѷ <;c B7`;"nzM`e`%@-*VsFP( < U [nR WRFW9U?($r8oj̒ 'ʹ)#ǡ92qaV73X"2!)E=~Y|ð0` B$ҷCtcEpKJ37>aqzwEWPXtt9+mئ[thYpN^jbMH# hNyb1Iݻb7=G47?u.Td`dv= MFEg FR_0C<5_UwP8`9b3=bX峁q gt=@|A+Ja?ΩyIntVX۴2duŕ7 !qRNkA]֮?#IPH\' gVݣ'Rd\ ?[w<%7\u}Hֵ)zh$5srYXg8rG#+jK,ܮ>UձaְovѽZzEY~U@rGv#<yyJ;sHr[$n͐9=Ns\e;9Pث ʌ|y"r0A$NAbI9==UU!Y r%XrF;9NoRrŔ*1 tLEW$j` >жEe\Hvܙ>ln%Xۋl J@{tYc;I\8:U@?7d'rN0OO^E)U;l- lgq#őxP5ɐd`󷓴F.籨aF {`̃ 'Z6mI98'q,dmezqSVmVHυ o$Mѯ"p1pJ(<#9d]!@f^F(_ǭ֛>u`-{IN[*G8j_r#*W n㎋:^3LdV⡾FlW;N)^r>¦ O'>O>iSn/=k1AlRܶ-s1ت~bG=f [$t$:T[Jy:I@ d?.ENrwѻ94%,(=%.,@pG%8F1m!FJ1$t"[@>W /9|U)9=m!y7I$uEd{d/D 32z12ߒۜ^J]‚ӃOՍoaԏ9UpXdښ3l|#66`@&NDK2Ўv[>Vr8&3LDmzrĮ[M$Y.[q#'qV_cG@f圶p09c+fdq/sR[OBa=(bx##5o`b&<V21Ο r1{f{ƊI!,`AS%m2OQ[_QXd.sF鞟jH\c!qӭCݐffzPQF@܌8#=i5$A2{Te^]H>{sִeyr3"Y31>TO8 ?¾tmж YI@W6t#=kbt9;⥫;|oCImF*FWCMu*=xjoR1帏bZF;q*Ɣ;8 {R٬WrPPH\ dd \}HK!&L3*o\Y.E˨`I*;tS.#ܖPЩi܂ReFݎؑvLqOE%?jM $rNJ78_dkvH!$eCv?:rLu(2Sn8$uf8-bR<iT{$eK#I+&Nޣ8ijF]F|(UPy_rIK-hPHRb0:vS${}AA8BBdq x\x9Isbh[hl| L6@Bsǝ3c9ݐWGS.vߊT#'X0Oړ9db0CFz`OJ8du omP>zl=$`p$Cy=;~^֎#F6 N@ӜU/25ڒב|$ bzr{vΙOcB $sc;WqLol |23## ؘOQޜ BbPI.l<SbX¢&[j㺒8Ў{S_;UHC)"v>v-C\fːwsx#=E1e9,dۀ d.sF:fv37R|njGcrñZLG nJ7B'1QHI.# $S'q\|Tq1.Hl.sӎ(Z_vPˆ88cTw^{'|C R3cm&> tu}j&bc+rwnkQ;s-z]%N_YsWk9,SqT`gOؤ<8%x)|SѤkkWV^m]SM R}>]f̦8Q02 7n$u11~}4cP .7`.[P/7 sIn#&S~\He4em9-#n%nRqҩ̈́*g. 6?όw˒UTbr 뎤'RI#pC 8bD)*$9 [C{@e c'2Tu A d^Lv{4 QP:0£_ -V>^4ҳȰ#:*mwwFCgЗe #Ҷ[9Ml"Y}R@xdNw|'Mkѿt݁9O0s ʷ ŀ8D*=jcϯ-T P.T8$e2?v(X$(0? $B$g9ԂJ|A-DPe~](+T.9hһz-ba 8In8%Td䃌;ZJ./S$4R6Y'~+2|ZRV?ۂqr r[kMإd*͖8%O~$VtE8黠NvM=Q+4m-S7=!?ctv~F+Il:4󳁁;~4>Ǧdr2,nz^GvwtT tP<7̨]T8 eJE L Z-բF0({d] ېr0RzϠJL(ǃ8+[ !c s>bGQ޶ +[&9r|c'^q֥=&8Ȓb 1cӶjo^ 2Á}RE08">^{~=[D_CCn68 `s~7Adɒ£'Ҷd+ B?if8L<]9=cy.[O~zMZ[bN K:ӯZM+c!UpqM^@ޞB6CҲ&̅J(g8y-jL74D`=YĈrO@Iퟭo/ƳvFLob=FA%1'}ڜf(\1>/㰫6Cv}\.Kk 2f?.:>'rǨ>6THlʆ.c xP9$'6fsܡ<)TP} j± ǐy䜞?JM~dY[^[ۡȖE8bwⷮ`aJD58®2G3{/vFUBA{cUOA'ғZft~Y䒝FAO򪶅I+T`1ےg_¬qqH9uf 9,r~B;u8Rq8#涎cOLsy]['UpĀ=? ]j0pH e،}A^ޕ-|VԃNX8ퟭ4&<9<ⳓks/ ^b1p@VSPnzaХ$K?О?u9֤p瞧ER9$F )ٳ'u*+0z\u[yȂ]8|Is PHvO8^;TO!h `ߛxL=9ܶ=Yha!H9OF4ry=;hvL1N;!Kd1`O°]-/9L\⭬esn{E: 4̧"pr`1䑌+vV Lǚl5t},y*MUe9f#$c< ##wd8z85jJT+s?1>;dp ;5tsO. bW8=|CùFzuZA( ON7Lqnr1ԆsךW܄S2[}&Oӵat*ƜP ï5LjҪqGU)=/WӴ[h/Y̓h-zбA$p\cN+NRI6Hg8FRoO#%PYsZ 8_;VMVm$e͎=PX[4 us28J>L3;>660=>})rac߹];(W}cL -ꄶLmOS%FI13L+kv.C*0cr:sPKc0 '{i- ە@eoqTfQ] w*⓺EƢlTs84 O@F'T_:섌sӒ ti̒5wd3ۖD_;A(vP-u u<jɽwY6xm]>m3cLS^EsmFp\9pH89#UA+eE䌊۸sLVu ;qԞ Z.F @ݙg>JUp1e1 8)=HzΤg >Jc^8-zqڕ"ܐy;O$#oΖ0.ps$u颋Fܙ*G;($z 9q :g6d2b܌I8 ON})  P IRH2x^2O_ïː{ⴔhǟk9{9Iv+9\A#=B y= o syJRI~6 v(mFvtۧLү{dyҙAz$'ғsy9`v0-RԌy REw98{ԭ3Fq4o+B9N03j8PF1_NsCX~KŒ| }ގ g[j(w6р_;OC}1s:3p`?ֽ*xXf72w ғI < Z 0"y T2dzv˺;*Ks23Mgro=gS ܣ)!uls=qu;;N7rrqJ5&!#2ĐH9;[% v(ڨ+s7c: VJEwely=IG,#|1{+ǮBΞhcof`NiSnle EH h?yNsBq[/ծUGEoCeG1U'4_T7eKPshrC6F^yya{l yE,e\'$pszR-3NNı߽Y: bKnZ48 P~aO5lc # QZp˹~R732ڕ$aC` 6.z 5cs.;@7|VNF>#]cΚ}bb*!c9 t<vW @돥tS_XFIlpQ֢r]Srzgt+hCWd16189zU>|[v1^%n~-*2rʇVl.\;̢F-1Ʃՙp~ך2T~L 8 9铚2(,I*.Eyq\ƶ̸"vʄ7?HҦ:ByGV}ˍGCn!AG)"OAI#F$Pzx$pGz_LwH9a9 Nߍ=́iʬg a7Or~ ĝ)@A?:s+xȡ eT^Wܷni^I9=>H6x(gIe%9=E3$pBAߎ9.e8G̤p@lA]?,[e@B ی;\3MD~Q;h$*,AF5ȵh&Aam÷n29郜`U_XrA^ߏN+ksswdo95ym7*d8bHO==*:/l̤@,ʸuILFQ9LU)`n#"8,çiY-vUڠ1e|i_ϥZԖ&6 @(cA\r, ,(,ztzr[Q-av((''85KkX;˒ǨPŽe/"jKqU9?>r3@285bsP99۟ƥM54ȧK}t\1c$=So%M63ay9%%IsJO_y0`C%.P".v~Z~9rn-kwd{402F` n0#$<-U osSqDZ,r81os;z@'uD[_oc?@4|r2;^ԽJۑ[OZB俠\gs)=| 8dU ?<եkpqb~R8v<޳$=6uvb~bI%I< Oˊ`v w}^xf[Bh2Blg隕=HuϾ)KzmL$s=Ap&@B nr:qqӊ=o&D:Ǩ^3 >ISqyytoKѯOo 1H6shsӯִ.,@˷rwHƪ wc9FB\We- ǔmr mlrA8Wc{c?Z狀"_ 9{34';0ҼZ"pۦcAۂIq }%T}+~erW1n5\\A1-s`u{<>N$+bps֣UX;X6$798q] 9P<ٖPA?}'jFГ["]MUpU:g'm4QԿ'W#⾆$|vdS%e(c =-qöHsEY 3(b>S97`=(->1u'{uZ#=t0C[nqÞ¬T7kt%w{ 8uvK"ק4y-+|`&1 gqGz xmQX|$$tԹA ܏_j?MŸ;XjȞg'les9%@O<@pY[qR##$jSVlY}ǀzWaXa)|0rm ,c 73 tFӴD!X8*%';^5ڧQcIH-  zg4|l ʠCN1҈M #1F=* NFAU5Ik R8ˑ1HOOF1Gpj=9#q1Ҥ8w9VN["ӕNIRsޔK< dA*V+0i<:&.ZSqW?Jm[y~Ps$cB"}+=s8Hflfb ~Jg r><C >SǕs-ߗJN?ElKU,>@杻'|CTȘ4ȏn;RER6_Ҙ[\:/n*5)3nÞ)!P0#8>-):~ih#g\2t=©h7P*3~jmП8V8>kZ #Fn10qHzH?*<+)3 ?v F͌|zđt `_njoA 7s qߞ#g xh իֆa>nI8 /J]GT Nyc׎+%F \$1dFSOζ!e, iێ9=9?ZOs9'b0;d299sҫnvP@HHJ+4_2:b{Iw9\Z|+d!vv~jAtzT-irÈEU0%aYҳ3iL\/U7ї%r)1EY$$T翮)v~9p*LjI\E8np@6#ipyFWe;HaR1 i[q\Vv͢{' !l;I&I S} Bv:mog9_͸ A{RJ#Zn96x#n3~m9n׭>w2D$;SI*<4{PF 2;qN1Ї.EXre*>R9;O\~ Oz[G&߉I3;)~'q[_a,hp˱-b4rA.&>29z9r6Eoy(\7e nq֮*spHے0$-.m|4~+;q o)\@'xMv4.GI9C*jf$qFFqUq r$2u…x~c9jHhRGͼ}EL;~ATpӧzU7'jsp=GN HPpdF欩< szR]I%>mT80WN~cp2O^9G; =IsZQOœvR[2-G.9#6K0?J[mvgiX.FFW=9W#L\\c4~lY|1(3|PNxj}$_.:nnAJA*F70*%g؄C.C'Zظ62*p`p~Oeмqg>Fcf6y$`㚉keJ*ї-[rbpV88(dLlr:_3SN2pNq: qVp+JU3;Ԣ` 1~@egSʃ9BaW`qI犠r;ӵW QC`69sSJܬwd-B?$O ہA`30P2`nvQt$,/ p Twog|aڤӎO~1ުHŇ xnkNE $oI|8+`/r{OٯS^Ut;1~v,m bI 8ޱO[B!R~fti#>!F8ٞpnQUʓ\I+fT,vyT(Oہ*$DZx@桛Z8̅.z}nd-.{grSB899kƞ^{V_\xe7%6o9䜞{eM +# c Lۡ&/Pa"(l|҃c=aWqn~qGҴ]E&>(fb[8ZՖo$+sNkoc:) Xciˑ6ӏxK8'f&r~յ)^eͥw:lfn0#(,#2;1 rdtvФ.gcʯR{w|:|~.KOnx#һy.qڛ#Eb+d+(=\w)m4{Wӫ~˔~fd/F+]5OsʽghDT GCsA?3]mk7d[ m%g@Ҵ([c)KGފ̈́Q n 泅1'`c =yZ$h,E J3F*7nCAyz~m @ c*gsd`}OxU߾z43d\ןS;dk9L|屫P_<:VW Pv!sz2 7vsԒ3?CKz\")D0@|csk3q'O t]lC2<2>l댒O r7_;|#q1?vS8p:ǭL]-Y=~=aA?s@#?;>Y'|qڡtsl[ے8' X䃒6ϮW+h,i9\)$5 1SNb\f%#?4(H!3.~@pH{RfN] ̙dB0qRH#a:dzӒ>A'p0Ilz} Z#K–~'>?]@$*&f?Q$*vz,q6O )fw'c63oLdNN8Ͽjg)Z̞L+($Ͻs\" ~l(iع#{ 1.9#Tn،7.W$qp;~c8-vH23,} ~U #*Jܞ'~jW~G:M}S g>n0lʩ~iYD@:vqLɐc@V>Bbr?SVq<:ʚi/[=Spv/. 3^~KIz䞃񭤹b4[G_=ɘ<}$ߩp՘Vyr XWe p08\tuWhLy=7 F}H3DcOYws'?uCLrW 7~z}*璤% AXz/B| =Un8Nw==枢u;esn=,~l#'B'@9}/æc8C] J>;3Npjd;cxG(5I$t^lV[#8z;uFȭ.̾HU dcmSI)YN] \˅sc=y`Tǟm]ޟ?AX;n´Z:6PdpysT[Y+ 1Χ٥Xy}ƄZD97s Uav"MCO0r;^jJWVރz?ԓ^qx1S+|̔ZCǜ)=x$z)T'Nz!2;dB^N~yjmwˁONvҝOQm!Tq@9֜n9Q]X|eZrMIΥm޷Ք',lWԜ~A$;u$qھU&"#v6V\ ya8'0ڎ693=zbꮺEVBW\$dT6>X*;)G2?!bq=bP; c湪])zDZ工X[U w w_Y߻=2.z2z皮0NU{54K#L?_£ӯzʑoMu/ys*f򁷍A6>b7J|sK;&ݞqm޽iʼ ߞq4܆\[^X+ js=Sב>ݪ%nL6W ?4YA)$ԐpqP:fMۿZ_"U2z!BNzz =Rg=A5Tj;ܢ4 Y!ps),JWInH v?J˗Vm2=Z8_NH,69R&ďh,d0neechN}M%ApDg*[<5ĊFx\{']!^ՔVL0v1~<Bisr[M{>-<=+N+TL6H~׭tFV6rV,f?[ {6{G֠`WUDG#^:w1ӀێJ\g%J{i2Hb6x,Ju$Q;M9-ǣs=Fz;ֺ Tc׀xE;}c\;\cߎ8n3l `=i-"P'cLF120g^AVm `19b>lrz}yמ}iX\ )ƄoB\vn8ݖ{Scr~73oˁV)2M A^Φ .3GNTŻyS$qq?z9w韯_FĈvܜ㝠c׽$Q8,;m\ghK^H#j9vl#ݱr#$qj;1}j{[ ccҦN2?,=UcN7 >T88n؟zs[?Nr:dv %y8`;`g{Qհzr[?ɫ q hdl=Kuҙ9}~}Tu` `9=,w}@}~B,Tw'=p9M]ĶFϷC% #+rt#y( 玃5'}ߜ6H\o09# ~bE 'N+ފ5 fA*uIƼR!L`A98~5T >͟{B] :Vu+7GLO?ǯzQ㑘FN^U }@$;QIX!*rۗ_@5#BWg]g}iI~"R$~ml0 UR+nV8zJq_UR'U-"%D]2>94#gdfXs AyUЭIٜ#b>2)[S02C0+9M2oҹylgS+^^ʃ!Uvj+nQ}<{QhlU&52T(Z0@#(kFs Wk3+n(ڊ ֘ES\xU#G+XHr`IR~=ٰ }E}_ncM# .e6JHTɵ71BBN9ZU]v (FQ7Xd>iFjBw=:dzVf"K*E!HE`]r1ZErM ethdY 63p:Tl\*lwooPz`8%S n3J 8^kP:Hʇg]ʝ zWG5('-#,͖'nFnMz^NKe.'U+`x: ٣,㥏-gL{# bFKB \8 _:]K\:mˁ# GcNhqkJjQz iq)nW,A) :ۭ{.(%˴Ep X ϰ hpqzwz<=S˭m .dsW~$ ,m<162A 鷷k ֲ<P+!#Pz2`Q_UqqΘ腷F1@8 )z)[XGM9,oF@h0 {H*A냌]Sk3ܤ~|@G"801x'Ufyr퟽xZ;6)ja:I5ɵ kiXO`XYSxqQRy.3>k~BkNw-Rv .9 ݇RFh^NU~g*Ŀ9\$ Tjf!+7)bLrq[~R>oЃ'h/gÌ̠p $}@5p]᷹G;T 3ETjjd'} L`tvf;*b \dA$͙:v&oݷDj7F28Sq[Y VYeزjc9ܬ0a茬05)m r*0ʧF=kn߀Tg@Cqme0wl `\P=Iy2~V;C8G͖:``Y~  ⟌\`&2yrqU7`$3AF1_OW0+}97 (0{/8Zc ] r1~8ZRzud1#C`pMy'", r1(+TиQ[qzTF=Ep;w@J ] @L\Ss>+.瓞c9<旜aπqz@u +py?AƣG@9xr8!' O<Ԃy=:tg3'8 2I<1.`O<8Ƈg G\ۿj[9f;Nﻼ~:Ѱ1(J,@SIh  1z>c KÌ(/zcV&cf }?}CW~;y8UKp29)DEܡN2x0M&7 ‘2$)w8!(*b,@QۂsLVf/άI!R*C='P9B$₅<cQ`ʕm66<:}i-DV\n$UnVf}Gz"P)gT䟼FyS <`vҐ"`s'%O=.u3ϵ!qq69|4(מ;1wN!k q=㊨Epd| Q[+f ?w9R٪ș.8]g=8ϾESycB0㎝ZԢ 3'9:c9b3xٷ3fc9ǰO1m uҩ?vľ>A9`mz36?zVnW)+nepF8ԧlRŘً7וL:Uɶoj=S׿5ģ!vsq;hQ>-@߲23 X8]|0%T0'w~bN3>˫P74vÌWM8DY>ҴvK *+;xd@ ^s3+;=<W_"ù]\}#k:.?7c+伙SWG 9pTkgہ޺ M-ʋd@㏘qk<98?\ؐN~́=l*#J]@U6G_VTzɿK0MOB9>8_5Vv94Om b[p|"AR'bxIqt 2,wC (!9emc9^d֪m`ۆ!9*:&TLbb&dã{oLqd*-2)0>9zZlyP>rV3gx$>P :`V<cB*LE2P}>X}j}H9r3Ň̨KGQ^iڿp̊VN`G<8&iGrv`|"،x´a>a>ӳ%W.^̓OERG 2ĠCnqp3ֶu-wۤ >f~>P#^\}\߼d/pG88qUF1t3Djv<2NGT-9-X!K0@r1 K /AH9jtNO{^~Pcgެ|^I;@$M/&OoS6i0_qd:b;b) 2: ["Tyy~HғcDK9N=Nx-eRҀc=7$vƝ5tpWm ZoeB@$$s,Fïyz=䞤FAUl㯭rgpc1C? l#㞔,pdQvT1x=sҥ#M-Bw7}UH <1ݽԱXþI)u%\,Qɱzt]9ǘb #V_-Ls0{#Bfݙ`pSTS$qP'RFf|Ĺ' 8>z|0&*|pv#rO(y0#pTc$K2TnsGTo#=GBF23x˄2N什L]tQ/:1^qWNϠ:?JM領NcnGR u3gX} 2np\.B )g>ya 3ʃE-L68rs9[]X*$+<ԾfXrq2Mo *Cn J39WLӎi"Řggڱc3vP9#v mP8 A8'i67\z֥} Gl2x.>#8>MK$G{iRP;g5)]<7`}9ާ#i"&+/TS;p:öyODEDPl u8o[RPI^FH#ޘn1kbZ NmWw͵OgÞF3M2 ) tꆁnצxW@'r`9{N%5zsێޔUsdc ~6g<sqB}Է 28}MIز?%Xqı(8̄{bN2v%JmSqӊԶ8\+qO_+e8pH=SqLl2m8$q=w819{TII\ ?cSҖP(@bXgS0ÓޯGNX10;9# {OO6ݑcb*ku#O`~QQ-NqxK}IZ79LsO6۸i?3Lm^ n)#J VPpr7Fߥh%QTn0~_^8q4|fcJ[s&PI?)'Tx[v==?1c8Yn#,9{Umc+Ѕ_'ֽMM6t>"=Y I5t}C=0$@%I]ҵhv+7eF#d  sڰn.Vvw,v<gϪ:)H$YwZwBP)"Ms9mֺU"2w{|] vYsӠ gP9d|}381:sךD\F+qM$ٲC?ISӓ㚵7݅@'wG'?7pu>k Lp.Cx'i~^A0} 6ycoG|cH9#R'̟xnB|,/8,~\ 1:wm U>]Ap=Zcnsdzf&CNYXd [ }r}aŸf֦4q!J$:nj'q̏Th- TNWi眑9ݹLI89жhBYp9 ǦszKqn.pH829K3"K1bssZ줋ORf#j9Pq٘y>CvQYu3.Wb{13ǒ}9BOWQ) ȕ#9ק9X6>\38Γz~b甸*gx?I>GɎIek%]L^yQ.@GK[1@o*Hx|l,^IT1AUb(OM=_^bka@r꫼d(}O8֒* l O$i> dc;$Gnoo&UԂ7,8 >açB1ٲdU4g9{V&/Tv .9T:{"DPT 皛ͪ]|*펙= f eJB1B5 c{h#U;B62F2sJ+fe `w9'ʛZi ]KSi>\hv#j@4> Ԃ;-5UboRH82rsLKV̙#aIpFばsCo#4]"zOXdi!# pKU.`q5TdHm98tV߁JW*%̱tB>Vܹc'Z>NQ <ץ5-mԨQs6 fQ#8`Lyj<fj񭖿yQXāV[ An TN)8,2B )ޛ2r x|sR(pR<;yr)"AdP<0݁Wrz5`B 0p$ cơ;d2R.XN`ck?B2,X2rHRh}t)1c裕`3H,Fd%9v`zU//Ny *.S8ST.+2Wr0p3zs\\vl]U(fzۃ񮑾A0 ⴷgVWE6m2x9IOz0e 9ӶOq-]މ.}!7 5\$F@xFzZrB{Dkg#O[1="#[3IO8#n c=.\g48= ݸ wsN!bd`:jn'pN0}PֈRtHFa(Xu gnh^ 6T#sC$si9N:.ee} Xu(D诞b@`r[.p𾧧^F*PM-$ߖ>0 zUF6qR}+鰲t=e+T%j b=< vbh219錎5x:MXLkF#r1ݻf qp{W[c"Go1 8' lc׶윏5Sg5ZݷT׫{{W's׌5MU`4?/C\s=R Uw+=u,iv<L یc&Ne_8 g5[a~Va“ojrpsלiQq<6i!xoH?^{V%ńir#{`~4QP"$2r}IϽ35~1M#OlIbǀw\2KFI<0NOONtkNfxҟvHlԂ{`c)cIiw֥nt**Id$8f GS=V8<|۞qI}F+o*Bv>;S$`mŸ twpSRFc$rxoҜPc88`*f8֙j@#r<T$ (<dRvg>"2:b8.0#ך5=L{|).iМd*#rϧYs$2G ~lyO$A;Rza>YIbǧEW!I =dg?^;sW%S. {g=kU7bK@O-^٩0FpOeQ҇La'GoQ3mvI >x{ \`rWp^N6 ;q5*1 RRǜg*nD$ j->lcrqj?2}OUtܡ$~st-rxd685`)`AےzWжB>^8ZCq F=ȉ3NFgۊb.)(6}n;QVl '?jBoO8N~| |du,cG&a}Y0qR1dd'Cx=8AHbb[q$mT##$1%&{> u뎀=V܁z}*Qoh <e842 x?3{R_qwAJ~BAc=9=ݸHyawh?Fz %͜sn]8Oj.tiYmϞ0^Hq_gG zTueYk:2BUI ö{/p cR,a'ЯniwI=sMwo98Q<}k'q(Сp8'PҥSӷp }G׵;~@`+p@1ZK'k/1vL*3!.ua7n$| qI!,gfݞxoY]ux=kI(o0/jj<1֒G4vO;$ЬGk;U{8#=*O4<J9*m{5'^H݌ 8д˳#i'uKVjMB9cc#n8-unf&*wNA!})kKuf$3%brPHsP eB s5 F[y&*[' :n=Ru,p)Kc;[HI+?#̪Y1#n5S'"EpJ49^ ܉>ǕFf9>v]WF(b2](GVXUU<ܛHeRH:`9k]b]9rx8RM~Hz|%C8 {^fby!F1etN%݌D.~W(ɁV<ҵi/ęI[4f?uRfIa(*2CNxÖ-hAdfY~+Nn*Rj3nphm]g, (}k4{6Tg( $1CsxJr[/\:Ȍy vkX,e܈#9_X)+)`;Zy#ã28W:jQ&z[cﴫTH ur!ܛ]I89 t+ 7ӅE4ا6.%ԶUgwY3F" Npv)z} YtJA@qUR~zՈ]zgp+sz  @F$"m<;VPv88 \\nULs pG^2{Ӊ8V+& qI0a~GӌTPܸ>b1ݙLڭ14J_vcN'jopr2 c ʤDLUKzߎ(;{ }gP! 9jPN~Rx'iSz-gm需a׊ ~VϯP7># ;$Hra\ II#'$.3=!3FpNFF3I=' g߉}V$A!GsCr#WcU~>\ۈٹk3 Փw`":~Btcm;g׏ƎF) qx=Unߑ厠@6Iz) cK)g@q\Wk7lM]eh悟)+԰cԶP},ytpa~J)g,,y}\U)[kOf7`X@Q́J[Fžfc  ֣aB8 .z*;ROAB $ߎUQaЫhI.A >'8ϥ7iK11[O)i%"F]LsW`a?"y`\v9')ѲŨܓDbB 8;38Ȩ{FK=OA\#s;d儯g- j1!nY#N0 /"Uc̊Tdnsɭmȫ4\Y!w/8Lqbܹbnأ0sezҚS,0`1eG&<A޽ CV3fӽ[N jz384T]}W|_ q\Z Ucvݽ{3?x\͟A>ji249 ) !C=|A`2zy3#bi]J=cHM ;i+sB2r00r=> ̈^8Qi=Z0- U8[\̬0#ir0?J;N:_Ҿ- \3~o#'6!o" =)[ᮌ !cItDč#Hyww8;z玀VRZ{3`8LwyKA;r;V5PF9%qZѕAA@P:Ryc[szH5%jlp$2@\w fFGbU0)O$G,v8XVs Aכ ~dW8L!q=:"HIrzdSy{ad}{7 ?.;M9g<E@IUs>޹HP>*2>=>AZ'{EVV9A7g N+FKeTǩ⚧+ӡ 'VoƫbUqێlA LA?.}~$ t֡l7@I8" $?ңA$?J29$Pyg;O9>{Ƴđ3I>v'!qO ޞc9_Z?(?\]2+Tcx~H}Fx?zqKfrPLےAׅjIQI$oJVvgsS$[.Fp+gT|,d!Cn9W'+ϕfriK^v 00NqqZ$]>PN׊iKlRBFRN6rz=k.xJH~y1^k6_A uE 屉HW/ނS#+!cqUG\Zfa3tqܚliropNwFزqBEN{/{qpzK<v`6{H5gvN:lRx)i  Arn;ҳ$bNc}ہw9ۻq҇-Ee *~enkץTm?(l3(I0K1(p1߽Q >Pһ#UǯC E]TNq\<`oJ ,d~p{Vtfᡥm2DiE}{ nD #y7oVctD\(F7G~V%9g)DS .W{"Fnh'ˑdi,Y~l'9ϧJ/r.12\`9z8h޽<Nwե31b1l;zpw)8/;t bSa4fVգ2xl<\Nz6 qRVܚtZv;-5y! r*\|(\e9R0#zgҲݷ }ke9UP6gqA>cʽp,Ðl={~#rNeo`UA;Dgb|p{Wq).Wfnv,psPDDx$g*\t=)5l+W9P#3T|9\8'P#K86 0 Hʱqɦ3$G? =pt<ǥ4ßtEN~e=#s~91dF0+&iw&w6po+;4 i9C7u zӾu/@ă\v>jp_9U T}|1YT,CiL`c|3#oON\#,On:}*enVÓv=7RwԑI 7 5[q:[=deX 9 _s3ЁK^1*W=#<Lw!< ^afCK!oC1PB*q#'PƖsdcQoCՀdbu$O[ R*Ö#'9o1amj6)Y#C7*rI*=sVÃM6O\gqJ=O}u!ǖߔ{gIq_Zq\\ҫ?Qr1 ++eosxOE~dFv Wjֶ6#=‚s}T0=?op*Bt;SU\ p-jelrI?Ñ!TPU;I8sE~Da r;Ճ rVP 1V(wL /+6ᏘIзNFQvLWe2{cH>BB$syS[tBf m xZKm >z#H;p}03#M;j0HH^*R y3ۃDsޥQ\EP@9c;pO'*;&Np'8(ݸ)Cx(ps&e9?p:[Bo=YЗ;8#B'Jg1 \vsܠߘ)y#R]-bx9 ?Rgkrēu { Ň1 ŀUC#3^߅S\!tld{yta$l׵M^\|wudgo_Rq5omX* o!FU,3Uհ.:@BK+=8'ҘNzdF[Eo-p %WVv{8ӊ+s7]"0NC1|uɼ _.Ym9VN{KG~5m wܞqתFhX}+/BVߡ % _qti>@qcS#"QgQ Ɖ6n,տ, zYrX?{$=V^#o嗡rN9P:- {fSάRl&3G"pA$zԱڎ60U~S+^Gns^7-}) Ksz@ .1 s֭+A[pxF`H=e>JǿԢAP.`3zsni̋8 P0`#15Y-. PsSmn9M"x%G̽EeMz[ ?1jsw&cՋ1 X1ޠi݃dmY>@p-jfM nP >cC՞- E$=jYQ|>ny_7Ls{7մs I{876*Ip0}?N+ф<bGI#cn7K `m l1hW<Ӿ/wp@Oj""3ro [kdq&cѻbI pgNݍ"D{cq<О6A8i6m=;=S;ǖWg|j{*`HpF00pn݂!S /gI]?\d(ŝb\ w|zWreÁdRHEPpz_SX Kqp X g sN﹌Sr0ra)d318Xl)]ޘs4΍Ke;QAd`no3,R0ܜp?<ғ+'*9;rrI`{{QzjHax9 I1Rʡ*I$(T@8ɩn;F@c֟F3ib#Ik p;\ɉU,I [bܩ2Ď ~eapH#^٫Vn@bCc'=3k{FV{+,XxPŰsU8 O$ޠfܷԷ'8Q `8D[͞V X8Fq Dݑ2`9G{>p['qέb=sNz{:f B0c5FV^VNJYTq׎ql3| {k6J1vz2*B_F]#eQB>I ΃$o.)%RV}U|Mt{n5 J́9fs#+aNuV8Y0IwE]Ҧ_GT&x*1JN)ۛcFȎF#Dzێ|-fmYKE$O1\$=9эNgMmS{+xchmWȟ1Fk-ovD\8Fr:ySm.)^rwSOR"\-6!A%AE̛Q 8 cF;חw݃\lf/,WT}G2n@=v19w=4Δ,hĝFF£uYIeAps"&~d!pUr|v*x-7 `lw̭#_WnёI'qLp$(RʹS׽E7eu+qR19kS.YQXhs6q=*G% GL4ZY\# avtSR N ' wd/*8|gl-&P4 lE$%K;0HsSiL'"\]FG#ood~uN2Ͻ``8瞵ٺ>ør11gԎ:~b[VԀs-{VQX89޼ 5޻씴l![i6-nL/ZӧHdI$2]{~(G lr$ՑQofWE 7|֚h˞@קZӕə7#Ҙ' 98+ Vx+yESvޙqH-޲"8^^ V9f;b7hGEHH̅$ H=*v.L`)S >޲%rIN> %۩_\8<1{sLg#rs*ssSfw%3A9Fڇq9ߐ?V􍼵8ԃ:&sd<:=U)]#iҥt8ILRIPł= eUE)8YȐBcp;FO>ԧ?/C8;u>V;w3'pڣF9'<LT[۷_ae )9qUee`}q[hԫp7GSҔh$a2r:Rm%.nĄ,8&6>tԋ(';sXݳ]H+HQm@;Aq~-ni"L<1' gQ0=Cq7n:q `9G\w튄6,A}'RHʽvϵ&ޯQeU Hp{s9j'$KȉSʢ =]ReQSsJ߈"ue1 tn+v [np8ҺOMףAW<#]YwZ8=y=]5 {ZxGli<sۭzlgwM}Ǜ[''4C]9<{Wח2)^|r+ڻm[G3_BQxSLZu+Qb '#P r^i,/}%7mVb7͜ԐOx8 ҺiJ#h#?w#s`zw4ҐSݶ 7Q^<{;ѪE%vBcaQfg2{/?qO84tFv]z0cׁ#>(J&E]T'{~4@o׽Czٖ񂧜==}ErOB?CR ?B;bH“baM~r O3*{:Tyq< MJD.rsԌ|'if(pNd}s]Ic{}wqg=s:0Anp}il-X㊁$'tGYz[M|sROOQ.-n\ v搹p 8NsI'8DEi9QIԷvUyd"Y}OF$^CN|RwFy g6@'jL)9=^ʊ2VNsGjv,:}ƾl9m6!  8#< #p3NALI1 gj.$f ;GEfrFcvIxV)o2AZR"P9*xU}7q$ǵI1 )䁴#k:QvлK<:7~+m8$dw5bT.pb?u=+hy'=rHVTی 9OQ2e 1RHUH' =6w~}?1AמۓRc=8^j6L0q !mÌqNۈNߔ?3XN#}?*;!=qD=pWz⋌T ~UMHl 01' U7N@#}+X,Q:?ZϧU!2u ;rI8qn?:f~\\s~JVUG ~"oY9?209֯W%_Ͽ=jaϨ>q֓ ps sR(7)Z\*Gs #z.8:}iD8ksq2}!Iv[N .sbJR}_[86N xT8z|B>of-ln.`qY%A8pu$ "ovREq cgߚO#qʹ6P}j5cҮq<)g`s= Ϩ-\B gz09q%Ir0q4Г/M#>d;@uY&}K;pOnȩZ18#`ٌd2=x>/% ~=s]D䑣A ݉/[.t12G<vIYP;* R1uΈ;FOmmm%/p9f=zuNQm P*8_~9d־7m])ZXyq X@wWe圀R9S}N)!KcLVps꼖Eeoq*0![pqx5)-樮,Xا;e$+u6)6*z$_~+u<]x;~#\mܲ5263"S` py<}ޥW#徛 ňpfsSҵS&+ʡpя\I=X];o}IGc|{Bxf?7Gniu Hee]-2GQZ[_#惱wm,Hytd9yX $r-y;u+Ts ŷ[J%) 㞞N~ sxk;76@oWr'IN6CtʑW";g`[޺8u 12(B'tD܍>{\ic|7#˂#nc|Y^x+ּ -!.iE';wFG8!?MsKe[I7lWg@ s澂 oúmƗZGs7Lw*\lq#9CtBW\N3w}hZ]Kl;efi w<E6X#$9\p7HR@eK6j `: EEc#n0^D] dl@>iWfҠ@S *>8$.Pܹq񣝓QCazսsԢNi?;R44 ڤmV;ҡ y'iszn;[sQ-X.Uq rHڬ\H)NX}>ӌ3,^ Dć2P|9x>՛B?61 =?Nrm W?+`CaTg?{G4( N2v AVT 8|°l7EcNGvOU_+: 88hgnnLYct`$ h1|ϛnqݹ3qҥPNyNE懸Jv!@r>=H=6 jJH 0}:n0ܐ򑓴$ghЬq$A#eI`.oW M l09 '=$ק \IH2H7 k lwsI oI)*U`%PA~]*NLcyAH֡Q(|(R2AQw|C2[$LF<8YzzsXڌ2I4ț[|rG|-?Ds,`- gw-Fy-VVY@@<ڑc lͽTPL-V,k+RT41HՊ+U nWnr0OY00\99n\+ْ[e+I1]Jߦ+SQK!nIg4g@8#R*d_dboRwmʂ6v?JHMINTuT3EgP37` 'ZgJ2R{g>{*d,q87ī܎1M)yUwSz pG_ZX`I90A3=9: wtNO͸s؞qR'9<,sjfhZ\&:rrI$ jwFC6} sV6$<~SX˻9U2cN3T0e?ꦑqG.S}v0u ȩQF}⋖0 g59g[-$p 5w4= I]F! kDϖWruk*Ч}ԯJ:Sx9wEl$`?xb78uCo/`jv9_-Ϙ0aՁ843X.FrW<+$ĶA9S'gaIiq-4P;OW$xaH+H7qCk&hCs$/!~ >SԭW6TY !G9︭fc# 0THNH&`zS5{T] sn)7u㴩`2#3+ FG#r к2$ۏo A [&wzfpː [;n{1PK#-+ $>$1!v#U\DKI=I%\ ^8(+^X[pVӮI~\88?# dd79;cx=j:ӟ#szu4W?\gZ&ONz`~ՋW20LdvJ"P=>,$sp? øU︜tRv1=NvHO`v?Wp6%|vaKlseU̵cN_mO>  ʜhҷ$ecƨns1־>6Tdݣ*Dž+l e7sץ]@#}8s$ʿ*81rpADҷ}H"3H0ܨ wu~958V1-7bP^xlg"uW$ NcNXK7ql0Ui͙Ѐf͍A-p*X/wt# nB~yJJe_[?0IQU<P6|v5bb2WnN-qJ:/̫JITϚ66~cGDyc[ qgu8CW/ `Xa֕JMJ|HPNAH]IR$ aW#ʐUeNSg#06lZ#̙ bB+Kp27UY)3)8p{z\~l۰'#C9q_5ˆn|$*dns+ϑ`'k@'W'S+q2}mz Kt)e s@5 1DNO.rJۯ_QQnWmJ'#յ6ҝb9$'~k3[%vqkzT!@A]%e-\b& # \~J.>u݂ yHq1󐈀::nZ]YFye%}Wjd d ~Z'љٴ ~eWE?ĄcFTLz`;~+?OL;Co`Tnm_usV!$HxېB/#𨄳Hj&8a$Zync(xU_S1>>9ݎ 'kKdˌ䍽99JWbl zfH2>flm^9=zSD,P=p:KԻF,evtu]ܒ/ȧ4M|cq鑑`>=98oLU"(0 9֫<$s<I> :cdoEyGW% mp\2GM>v+:|X]lc*vgapX}5[;#J! [vA䃑ѣo`d;w3q:qyCn9|Ҏ/)(cX~w rׁW}{\yg!$cHBH$9$zo"@pԃ; ~a giM B_ c:Zx{ӸYunw>#.O9<9Iʵv(9SV||g d*S"h !'{Y`3wNs1։u*$@tc|zz9Ud\9cUs,`sp5 [0 zB  y9'Iٛ4HSzYB&P sN*eFw}9yhN(9;PO`O&M$]xϿ2t OBy<)n N)֑ lo3ROP®sVw* sD֨Q$k.@>\+:<`=Yq,Ex$9\d~I瑰۔V9=^ROl~GzJs300#Z$^{Hv@y9Vy6u e؞#ܵ&Zs3NO, T;VV$ d֦{ qHT8%AYI=ɦ&; 9V6ڤs}O#S.lms\sYrc鴚JSwA{ǃ rչL[A. t#"+0'i;cRȯ7=ޠgTet.fpy<:t=)6\att-s=f(P2mO +% e`?!=\jU>k9u,OSi RWi@#zsM[*#n'#}zSsNJ]\}v-)ÐB*y|;ЍEV F'#'Yov. '"bK#J3cwфd1f$F כRM߶t"m`6(ـ99/1L z\dOq$@.s>AUisp>l'ڲRv/[ :vSX'es{]BV|݂[n;=e>o <7p0ykAsv“9*op6/98RQȷIWoiѪ 07g++\[BF$Õ'qRp8?Zz `c'#'?_ƨ sc3*[QWb,Ŏpzt'$P( 0ʸsߊYc>\m9p, 9TS+koIe%pnqxPrH7r=~S\N_QADFQ}cWų=gldap:`_CC}qx+n᳎? wA7b A;G#(f5*HRʋtu;mc ˜}ǹ 8#'$8ғ*Y^e8%>[ ]go&mxׂ{-A+f2s1֠7;Nsnybb QcT) 3ߦ=1OqC;X+c`J{&dYʕw' mpM$ERB<ךKMg}W[_61\_9*IP=G;Kxq׊-FcK`QA;[plg>YVFa<99H8dT^M0B(*Y'dN}W&̷)==N.U'A_GbA-p֪&9ҫ-0\g:UCoUbScrMgEmcnVKx968FVec@n]ٗ(-8Yry䀃W'?{):&B[Yw !_{-Q vc$Oj #v).@oT<;SM.2vʳ3s\RE'e 6˓6neq5uJf8y$`p9NKDy?18zXgv'`38\QV4#Pd G 8WT{O@ކȦO1+)9NlXl#w9ݞIdtҋa VWa89,zz̓B{'hX".ď ?3Fsn'٘Inqho~R͚RrKm JàT`_1/3$< iu-2 ~Y*UHF6dQ~QCVP@sO]4Z,e FpHVI|a!|Y-rġO´`FFޛ i%ؗ"jWnrr7 ?*7:QկǷݺy,*U }9Ale2r!Dy>*H+)B&O2SPQhΣOʼtqȨ$@^ErvO5KDYjbhuV=JFN~b=1G+Dm+0$zE){ʤ={\`E;!09 ZowsȩWk[<)8cz1]msI)JOwZvi[bg]%=+.JƯu{Kv!Xx49vI/Sũw& Zɞy";aPޟrךr*4"1f^^xi(+^G }3I3AecU\#J#KXJ|ë.UݿxU'{W9r!f%r\̹SԯU3,W3nGIJ`1  Z"@@~o;HR[GM Mh|cF:w<JzdQ'$g=M؞{$Q2;tYd=gpf~awkysMN |@ `аF2BqnH'P;v`ҳl;rNO(NqӽmB 57tM('ER[6?>@(9<ZRzMkG wBU>a鞔ˋwʍeV0~U_(/QߡUWGO|Aꇙ$UeT$2@GZDuPuG'o_Λs8 ܰP͐@QF"7#n@`198u=T(+zz=_]OuԒFӌ8;皭)Q˩wONs)]lsZmm7O-n{M:mt #p[Ui/κ捑I3y<۞j_Բ(#vt`ֽWG8s%Qc9s 5ncm$`! $A+Tk6mJs\ #}{qJc}kwu7Q `g$M_b=V'U`m$p}9V }J͔cv@ɨʣv6a|Hu5yt?JS.Ăvc=&O|dczÏ_•0*N ' :1I^DۼĒdub9vSսGuܨtp#?jׂlÌ=x8v]\L@Q>ƹ<.}Gl{^(=L[;G$pHEGq ܀MS^"\ܚNq8ǰ=TtrĪeqsI#*Lٸc({\eٗ\ty=C~M/t֛_Gq[*A o$`p98֑C#g$`r8=Օ"b8݀Y΂L(%OQzz/DE(bvIH\Be?uBGk 'H*+J]YrY``|ޔы'wdz+m;3Ҳmg} .^{S O~I]尥Fф#_qjdA2{`fm7;gAGIc{ ng?>cpg(?I'+H#Ӄӊ|?"Ns~cSuqW?0'=9{)<:c$v{5zhcuKw [w'br1'vAqtzҩ=)~bqМs8ǿj> ;,]W#v$tuF`:·frȮ$4F* POf`U3.W`03vY@deᔂ8#*GAH❝D&rV?x/Kۃ VfW2lbO# w9<{ԭAsjTl=>t'i4PH8<}?ޚWo<88Zw<܌T1u)l8㟡'qWNp3*!F0Cש*A enNH0;У~1۸EV/D@#A֩˸v 9<SLXNG;T#9뻎@DA r>Zrc v+nJq͖<=ps03Un'$>F%/TRG'}jp`AN3ϵCc` ,Uzd s)M란"q9'z~KBxb$ƴo3 i1*wZN+cr 8\tk6eewkUm^9+k5߾Iv܊tI;44K!hwǵaan8QEFD#λi~;-*=\$Q3=j+u&+ͩ,@ -%ڣ_F )\qVhhhezdr3Vc*vR#8=+lTo]˸,0q#4ԯP 2A#@Fx8qu;w'elF]w ]y`;9$`mh,:ac@#`?G=լgاSʐ~p1>rɞm`s+X3OJkBۇ P=u;B*勝`I)$)ù-&C21OOnW`\cSMhE C6 Xrqשj`-D\`px9޽KEi. #`coQ R27Ǡ892 8m{[<_hpvJ(=*ek]Ie q$TyvT,T'dydmT1VS<G\U'-JO9\.ņSrGPk*k靷yrP.ycԞR&Bivx`2sc5mbh;ܴ%%1?{Cա2l)8:c5&૸%9plFX8 A'#O mb$;2I<ϡ,wmq~=^KW#݌/<{~P#$$wb7g8ܹ[1(9v;xytSiPn$m[PUA|xʟؗrܐ>^ݎk1of) ʾݹ9Z:;YRض;g]ү$Sq3)P {zQ^C^ƟȎ<,H=}k_\I;l<(NH#o'g;2!(Vr7ڧ FU#9 mTYKI|J}Mّ;|wvoJ so l>Rr>J3+vص=&QNmc[F GS+W!Y_yN䡕nz29"?/XzqTeq=^@'nx>.0~:;)'~Cݱ>8/1HA8>! 8jw;Ad}G'\7219F`w;$&yRq:BL?J+k>ژpaI1{1r 21ޢyH8BzFV Q А{k@NHAuAh4@n0=g?5@[Gq{q9Dg%:։;w!Ñq2F  p5kG[^*T<UӫI D{I#,FOϭHYK1 W#1x8ۜt_}".< @AޅkSvc*6*I 9 ߾vtoěyTr7H2 !=UFkꤞq?LT-{k4 ܺ4e8C`>VlJ-#ckb rE9تw S`&y<q\j7rH]4Һ_5$1>NHYe#cO׊kWFP9/ g*dl7ڃryb7䟜6F8fȅ6 Xv=z`UEԳ2~O:- S8䕈XJ[v)b>WUڱ2X~]!َy 'c&MXBvH!ItPc{+(eT/LeĞwnl&ǧJo ۰H,Fp;TkX=>_F99<qb/(lMē@w8'-HD-\ex$rpTzZDhR[r9`o@HXffR%K8e)µ"uM>уȮOXs#ھx~`1*{~tz6I6ksTt$Pr䌶O$ߚԆv;F1ۊ;- qtBHe 6Fq<]ĕ}*U~J+*˒Us.|$# Jw:ǒ>KfAZyGY]v)!fn散?xryxl*Zӧ6(L o,@![Xo^s b8b9*u8# 4ӴgsAt W|$[y]hc>c՜Lllf1 F.7|cޒ#~Ŕ1B2$˒I1鑊SȷwHܞ~>:?1JAE{Tͅ32m 'Q13wqا n`ԛ8*|g=i71cpKS ;SK"<=Ad{U^i~UOV'zEcf'hW lfp{FN `L9|$-(g2§X%9cm'q8e#vʶ5z%0W"9Ǘ呐ru+oK0GIǠ{y$1W-yjȞRX`|9{Mw }:gH9VN8Yی󊾃`b2r0$I<,tc1RLon%rG8=zd5tWBȋ1DS=N~#JbND%O#8RqA|{V('!ciNwFIOnzQa5F \Um'Z=Z_"lԒ[ϵh%pXqݎj`iǘF_RH=gY@G9 A9#zKvcɀXH͌kx8 O =j]l- 3A\==Mg;F?;}M cKRQp0w$T)t$tH9ɩñ]LRTn凩8ֳVU󲢁8cT# 3qxk7;\[8v& 힀.:օ܆Cln0G?皰G=N2zdvw"{:UR?1X> ޡܛTs4]Xz~uEDsq!@B*T2ո^ys17!<"c*=ok4BH壔9Rx"eD[3 O*yZisaPH 6 'Ӹy@88,!s8ȥއdXqR9PeFp?wnh@,BÏE7|MKQF ocNauӡ7ђʠʀy $sۓT䍧9#gI}*:B~_NrN{G8֤vg]=$ [Y Y=\qOAtAWD̖X3 CS;O)<7C$\%nrs=jiT8\"]o/]Qc#I[˕9\8H1I2Yr1p v*i;8#אkD,H_x'yǜFāp qRD2n$=Nz7lǑpʴdf2:늣4ڡc7BqҳO$+_:'(52.HVA'<5 f<38$#HO'99)_We3>s:V'd.}29G-ʦ鋅zg3xǭSÚb &wRer3+\'<# zO|U渎5\l}+;#J(N[,JLwUP̼rQd~CsAS)=Jf[1՚QT}}1ޕ/v#*#$093zӷcNNvVݐ{4pq{OCQBWQvOPIy JL%Y0pG~r*b\Rwqœc^A8y<E/Չc R zBAd c'Ym:qxoz7c$Vu93[>d:Hx^J%}qg?td ^3ڢwt'TNk'ȕRIX'>\8g.z`ގ)ou!*D1ԱAt܈C)h;{ i$ie`;y@Xz)TU2*d\>#'?ZC@#,>kCv>w6|Pxa׃뚮Ӵw(~m_{~\WGKč#,7#I?NZ4݌?w=A~ޝvװX`c?G6 BNQ9W\,yC޿D_ܠ9nƺ}6Yv Աz,2 ]geh #Mc NOrJ$ k,I™^9ˠI9c!𦓢Dn3:kB?~f++6$ܜyǓA^ꊊokb8Ho5%$݄,YW+ #&[Sn/!"?\ Jnf׼X|o,EdecMy9q'Ww{xXcvt3>=;1޾OW{EB6ӃןQeNÞ{dWRWoV[`gVie`8,qs7y[7$㓌x^ǞGҦ^c\?$ScҶx~A9G "R_r`>Z5b8Wp9$8Ca0˜w^r&CA+T~nc==`y7ȯ,n/D83nGzDXbFvФ ~nrP29\{Vh &!N6BtEGSx;!ܘ~N$)珧^kX.|.`N888{f5[4N. מ?3]Pq =1֨.o:4X+sU;n%(O_[ʜU.k)tpBS&{aGIUR>B 9jHڤ;sG8wJ_#n) $s楸`bج|rF}=:V͜n)KS1m',vcIZ02?¢O{] >|hZ"v<==k@]" p<;|kc9-c;*Nw݅RwBJ|8$)`kRs=);2ݛ$P3^xh^p2A@x8<}GZ?' =1U$ay#Vp}y<yT̤-qw$ֈVP>RO͕=Btݮ\WfPA80@=j7vq~]sӻPy1v.\M>Y6vRvFGt0Ŏy0EVU^NqЁIɽL59 9__]zt+Ϩ)_Kfyzgq_U]iʜ# ?CɪɝQZͨvppB[Zja7O<S:L3ʇ7*&T$G>me?F8ݚ݀1?CӁ?Nhkc|\ֵ#mw#^t잋H<9 RF;>\)sԊK7ӯ>f(mv8wb<ۂ}G ݙrr6sVIۆl80ҥ 4r*$RsoE=kM8^8i'fLVQ`$cϡ03yNW(H{A;٬f1xR@'߸oMBmb?e@ߜ4IFCr=sWT䢔z*F#i^A?Ys# 2# *1 =>nJ?]y1=֣[|E*bGqqzb |9_B CG=OJzSt3AsQl,2u9=A=(i$+9$<y+ӷs&\\.q89H"I7cԁ%P$ aP[Ks7c9דTu 1F_hBN OJ#$K̫d2qR޿3#B#O;1Oȭ5+ w9L 04ۗs1@$c xt z0T:> NjơPTT}벲3?c%%“X&{床jkdF283ּd{'mPR=Hߣ>cDd$szUIB2s9==֤8p3c)۠c<;S6q<qRcB&/ݛSeFp9w܋jfzc=s1M#w"-qrq߽L/' ֭ li`w''#];hdާ8wלCUWxemS{'i 6f=.^]r¬`ѫqǩigqq)Nؗ&MZ`֩IC`0q==*{]J_pLdil$%hpϯ'JKCxVR1sF1z4 98}?еU^^DG M3I\=U4uR52~nVkDqp~ھ @?VE!`usGnƒ9=t)>uq`;o[><:4K N tܿs{uS2R0ݻU^Rzpqg~?)=sr}ԃVA#0p0ATw8 k'k]`<AVcþj%qAo񎞵qmtF:PH_{ _B?pt]G:O9ht6A]JFÂFXFz[G1@?xǮx<}6AMJs}z%b!rVu`rsN1޼oAC6Wқ~G֤WvN6*p 5BsSj'';qN)y \ H 9zY7l1[$bFuGFT$ml'<\#h֨DXgS>I1G1>RGL׊]=xqi>XPzu'>&lXr1{Ux+9StQfTvjq*U!Uqqу\5d<nJiI n% <=+ܘXJľ 6H;e95սanBTշظk+#BrŒ5V[5t3>WpISs\Ns${[8 .0W]J) -IR=jtr6Vv °m=>HdT :1UxĊep u1BjD[H0wP7pq+x&vbH BAZE"kO1n*¶>TlG~)"0 @ !eH²(\ 1DZqoyʹ́1I %:N6 z8t%IeZx_ZZlZI## ŕEaivKm4[M 2rys]}A|VzpZ%˱ɑ Pwn<*r3_dcƸ\XO^)k]jTU`Ăǡ =3G0NJW3툠:uQq.HoKJ>SPҊ #o^q֓c*$yH—$#q0FaT~r'qi;g&dcBT[vU:U+I=2=踹Q:X+HFy`A<Вd8d`#s\3s*\&Oc*7.vQwuNxMUx[qڽ$O9 Rt۶VwݎC0*PH/FYO?`k @nʎPSqB;M=LjNN ˓޾ҢVZNxR@&& drwS$\p 6-!%)*y 'm}9=Вԃwg;@E$uV ԁd:q=N0;o=㎣1@2Cd88o!"?=ݶ+/υ ~\Addv#s1t8ȡ&d0GǽNp뷂 m\8 Qo͸ R96$UxU_,` 41:FV;dEkhֶvv !r(Rr@qq]G5gu5nJц '6o'qs޸Z,lsJ 8;|!ڪ{{bJ2Y#'\մx,H%sC;yrX֠vTI#rGJwEUV1,Dr@ ƪHT#=(Cr]vgri7۴F>K0Jǭlf+4%YNWhwؒ EOI0Au^y8$gkSS2>R#9*88v? mmC#D9x8?:S{IS<CӅ*> cNIzv;b4IH6{ 9Ғ b1V#Yq9ϯ= g.O<Oqקj#8=tJb0A-׏Y gy#SD-c 9/zgLhdg0k"QR T` aӚNOe vA y`=ʞ|qu5a'O gWv!l);8vI8Ҫ=e)6T|y09V 9'[\oh빀a~};եG&1 ÎAl>gDBrb31yǧoJ7w`9i xZ!&QIhjCp% ۲~t%'W(V^C6q _q޺6rNnsFrG=8=8Nw|wzzW]/y/qIruI;ѓϘ`\zϖ٠Pʯ3JrTһ4_s8*TfPʧK`NJ6NloU=Hxֆĸ );H!x+  >SUDqZ`I(YR=C)&1lpI<)Bu}+!)3~FhȪX,{ A]O6:"dBilm9 {Tiz$CZU$X &zmooƫ]՛-wsAGT"~G|2 c)y'>o VsFkEN԰$P6Ӟf 5>dcžRm:qVð I1^:g@$~c#~<p8[`4lHS_zc]sNO@S98YUrTr< KAZy+$@4g.(#T!~@pCە*<:i\ofh#a1ܸe=@Cg#'}DQ0y VEpsc={Oq6D8$ OƤS zǭUl'Ӝ~dUK 0s~uk`_d1̊u jџ][yO!w!Cq=*S4WŰz8O&;ǜhxHv8#u)!Y^6<sR}9}GzkU0q7r=GQAҏau% Ru  B6>m珼ڪJw9$[+ mbN¬|l2QS}`br:cv6cڪ`{b=Tu4~ @@yn [r26(䞤-&Q_@;r1'' G=qh@O< +MvsN-U26O-O>ެGO˜S_K1 ;sڑKn37dL\s 2gUsrÀvc_D- vSm>b*GgӚ}1͆AǰI~nȖUs<|tLm8%sҪ@Q_n`@LT^2dL5)ļ`n'0sXkۇRdiXITsvUQc'?.zPfoDe9֦Hn9#O,FR& /@sQ~^x9/"$͝܁T5оOBO$8PF?j~NМvin4pgF7ʸi7gz=կШ[g;vr?h$`<Xc[!_?\r?ݻG8M t d(>`:.k[ `Ǹ=> H#'lW~(өڼ`( g,g= #]1X3'':f`8R x]D[c$#$c!ǎATOSD,=3 J* W#WV- {rH16FHzqۚ}SI8dr\ir 21 8;Z[Bؙy?w3^ol`m=h C]a ZG'%_+}#'f0J-X-F]FǿEd9+ݺcҰĴЪqqL{O'zdnbmf?scXǸmrgq,~\k y ǿ֦S=Ts،F2OZzvʂ~_ٗrD]5`E'?~LR gcϽEn 8s4%!X>8fN33xT>e$Tpۻd9=&6qSrJPr>]H\ҧޠX!暻qaeI}= ˸ڪrn#O8݇N?YvN̈#9?ꑫLb8<{ X 8ՓFOB'i$*(pG\U%s\9~NFHlU.\:0^?[&A>R79Rcz敶FgUtAj82N1xIn*Us8CN m'0T 0#M>4@ʎ^:Q{Ku[)6## Rj1(o JV$MBH;A9?iNBO$`lNw؀2_x9YP`rk67*KQwiǷ̼ʫ)EArXUˋr+Mwr.P cJHf`A.SMݔK̺ vaN!RrHzmo!CsKk$> xjkv8 \c&[z#5bXfd*ss$v#ֵC~Α܁7^Goo|<!'|y9#:znlg*֦-YYkq'.TcAG]3 |y 8[9EffAp0:g+Ur~pyߓ~r~N .LЖ<6cP n9N6hu[vĮ2qFzuISc<`} D*] \rT@9nCnlg!Pޖ6}  Q䳨ݜU[p}@?ʓRm۱OJB \}xz3AnR,íPO5=>~dZ@8{˞OL{codTwEӌc(F}i*9=Tv6RXx;ǞGJ>s#Gig4[}Odb''"?)߁5+w@ùId ,6;{xR?= o[A.q!:LBUHt ;ڢu{ ^(9?n dkR7m1NGL"ѐl7O;ON<2@랆>L edvTcv=8IȸwbIN 8's›BюEgsVw{0r.oR.sx 08;U'vxILsq1cNO x1֢O_[a~|UWor@zbe\gӊxe `{wjGT_ج[ct_8]յ$D>GǙ= ǥ6֩_S3ͧc)6H<9*weߏqR_2FuflqWk%mj6(88}x!8#TwzbwvmQso{`A~*eϭVd 8~:qjKG#&I }zy[|F^&M+ޏۜJ c‚qAš;+mnq96n1ZNzlf;$r8 @ա ㎧ZW! Hedt;uU[y;p*ȘZI.>᱌yMXt##Wn/M6Gú,~'մr'g1*,5qI n3'TfCH$`3I-Eq[Z[2G\J;OBځ(uԑ3nyIJ\M .iyXq7;GOWMn3׏Je(Y p^I2w9ڹaĵa9^A_$?ǚ^Ғ`.O zqLI9x+)P;t%bG쾪s׶H,ݘtj-Vc0_\q{摗ʩ?NҳKzzsG=H?'bI{*7 Gs1b5iE޸>pIǶ1Rzqϭ5~`<?L=2 r'k} @1Q鬸|#J=EQVP/s=y9r#G8^FqGY==y8+G=}j$^ynJw_KME\oF{ޔ#mU'>w3HJӗ5Xv zjܐĀrA$=k5n3ޛ~`8'{JpF0WҴv~8m8냻 i'v06"CE^3t};Օ9128s͇מVs)ی 1MHzdm䞾{uAu@$=AN=[lcuJ]X{Y7,%B_9߱+6Gz룇Z9+Olt1oӼ$'5S֮puqw!$d}Ԅx`s_]a /l}j}4Ls{t Rs5N|0a@+aJ|2+IKџ4蚥@F0} jճ+ R;͎z;Ѧȿ"cpA;Up''="|Jdq)>?0 v'jBaO@=* ʎ۹^*z@B N`x"evG` d|ud,F9 '1i_Qتm^D `28˞ٮr';pqݷyt=-)"_m-EBPnI49EXf%@H=8X|ģmv[sacᘎy=;Sk|7Z]3׀=}@W+]ynUAhV lyf.r[a!lOOι՝4 d d/cZ-#a\=nY銤vb/6gaj@>F<Mqc`""o-IP9@1tԛm-dcK5gn}vqGo8m`8Ж VbZVLP+#- `pNj"© ẄSOׯ9;Kl|JVR}d<҄d\w5NkfF($sҎkEȷ3b\2)yY*>_ m&r0Ħi 1\qLU_opzS@ę2Gʜ3ۛJr%QBq NQX[?9$ǯ' *YAhfrIpF7FWԎzIev8䀼'OV n އCprA#o;OЃ]yaO=A|r<̧ pc(=R<*yAn>Q<DsCEc6zzv2MN9]6ڥ~ NpfVOzԹfffुn)[1~PFqb;fnN`v=h 4`6@'p(l&ݪOyg߷!KcnKd<{~sI\EK2H嘤y;I$ 㚫hU: YJ͕u\PuYntP1H<==A4 p#p U8ʎzu vrXVNҺQ]4#NOmJHe$VPqz.`@%8]R]L04UZcA3ϟzmT!юA{lQ_#c rI ް 䌆 w{fl\`z `jsE qFY=j+t*&7PɴՔЌ:Ցjw=y&S]"1QdN0׏ɶf<$93=~e?̺.v|̞Y1d~}랿7p6p Z,ip, oLghʘ@ 8H$VH oYӽmfw+BT%{at#38*y2+䟡ڼ\Te~v q<8=L}zdϧ\/QXq==AړГ*_9x鞙(6H7;'])pFyROU:qөz{u |? ?3E$Gc"S˂9 j9ZW; yR*Fx=O'ޒ?c܂;FHxݤ_Zy`a@ҳf 8=_ZIf)`x'lקz=8Չd~ej S cV[ z(AL\G|kx;Z(1*T1>٨LLsӶ*oq# 'q?zҔ$qCzp@ {5]X+")20 =z99yuO:ji[}w>J09GOvQ n szg#}Nq]9k-Q2fa'0GL 3?\SG "JICPTLu5{C9C2+|Hp6}9=kE]1UQ6ʱ9ֶK3f¤z#y ee1 ;Beo5H&D$~E w eUL@r u8y98O-!plϒ:ҎR{Q[vSXOҪ3o\cP@Mgx*N=)yF8瑌`'Dmpz$q.'`C3}7\ʞJ_*Lf2+ q:$(9?2 }*㶟2ťD0V#x ?Y~?9$#pH]ٻ=)h/aȼ>crFzTfp<Z*<0)݁83' {B a>K$1O$`u}i KNF{=ԋ#vpX<1l:ˀ 1uvo{wHY"B<v ٶxKٳ8})G5<{n$Ypp3ިY a ?OOLӋbbݺ1ܱ e䓟a@[K{>\\@Vlr0x9[oXj+ML-lcmfyj84z0зf{99ҟ XpAbK=kU[WXV5HG\Hﹹ>޴[断#+W ^3y@ۂrFFxFNҖ4ݓ?3t=*1i݂0@qZn_)*8 s?,U*c%w$ ϯ׽e(kw F_zd-j(UbH$`px51e!:ۛ=Jq*I8P s?Pݍۆ\ Cs2fz$q䞟{,=@N)/ yMj$d1H`1ԞI9޵~gln\-G&+B\.3pdr[3v9\%zwzVW ,' xEdUA8S?oZr3sӁM2n;sP6V(I^~Ud*9$Z6f|m e8+asjБp6bC̥Gu_Z iش\A: U\2GHܷjfe.@Rvt(m,YXO yy%b@#Ma$`㓟ojn3E-qnNS$sP",_8fnIϽL+-AHreǯ8Kʰ*}0'ׁ q=ɉpF@u\㌐3=ims)~ 0n2)t-f=#e7Fr Xgap${ 42+ʻd%pq[^tQ,098> LuCN@;zgoZwt<6i܇R{s?$f%(\z`ըJ$cGA&n~B󁟛*n||Ǟ@ #5*:jH-$R ##>> p8*qЎ~YhՁ"ۃ G'|Tly* ҴӅFd(Zތ|=W*vΠơcd 29cߏeƳ}ĶrO^Ʋwyҹ4Xg9"U};\׮3Zmצ 4/)(^:z#Bfl>ZWT#{[rDUZ+=뚐ʒ CsUЩ ^x5k2'g=DS꤮0+ϓܖZ3揙ڎXbP0d@%)䃸}K[t|H0$sw +]G^8DjUeqΘ}z[pF,T29?잸')r(8$c6d%ݐp e逋>F #mu|^LzZJ)vƔ,)#8s'f4b2x{|eSVzxXu!Ϡ@d}OQH#0F6ꪤsGZнĩ!J3隁ܡ 7b(}:ߑw܂c2HvsgOkZJ<ӟ '|*e uu4#[x\t  .+nYp2@mzF̋QV p 9UcXtS]Lv!GZEr˫G}ka@@#U$Ѕ"ONw.(M_SsYi\|3)inI@k0+ׯ3i[HPJsB dԫn ;sJ7b|^\v#9<*X<`IdzzҎk#Hʹ8rWvoSuķ\Dr6c;r+Kd*?0#9USrzyU;a~`QrFNc EjH9%L{x>\qorhI5J$o:deLp!=̢w܅G`H]1?#BocZ{">LX=}UFr8ǩ瞽x)4vx89>sZ^[ۙ8Rpz.xqޫMԕg=IQ%|q`Imo:HeH OOb+'g5uX|)RH!x֜d@)#fZIȠK#H8$s{~G {ï8ǠJJE" 1`ߝbJ[Tׯ^O.Ei+(vۜOz,cX .$#nsBGc}*s 78z/̋خ<F[9銖TpK`A)sY6qu[ s1fwO`yi;im3rі;2y=1؞ʥ.Lϝ\qP3y=cKBTt,s@~:jRnc1R9#s׽Td-62{TȨfoW_G_*vl27Zi0qGR=*qݹ#jw"8< `qWT{c&OR$DžrLl@gz~*ZsH=@w=zUvU3XP5R`T~V8HRipBu;@H6E:E\ =z` Lr((Go<RG=?22HyiCU%{?}!c ts\^G RsӏךUyߡb $l\NN{kRXd+~ǧ̑i_CpU;z 皫s*኏ 9==+;ݯPuROcqЌEoe8e?҉;"%%{v1.d(k&T=+-S$g?֝'q`Npw|ڧ`G'嶥59(Nsѹw`~& g?xg֬͋+|tm$?qbWc'p :m>{]du؀ r}}URHmNyPi$J׆6N0q M4l^ r:g c N}j9dG#n_]1G˸pA"p,yfw`GʯA,QNs$9V&7z ? npĎq9?19&T1L@9b9Uqb1;:T0[z(iԲ`ݐPo 7\qTO ;/yip=zUB>l,J5fiaksV&UdwbN1Ew^$լK#fܮy["xЌz}JRn eQHg8jݻ}J}D N$!Fx#8ai]#^EH{_Jqm14<8t` aN:֭Đ4npF[J>Žbq9?H:`u=zFOas8hJzR>nSպb; {v^)]YYۓI=x-}=j6Rm' /Z\> ר?]uZwʦW?pn@:>/BXUO8ŽOQ)``b׸U6Q+g=HN61`Cqہ[rjHII)Fry> `k4*T7w')F{|V!OT`19 Y4j:`=s܈vus|q=Uwu#9J\mqpFO?Z>\9?E9?)*|qV#hz\buEǴB$6]gzeMdhs$ ndž] +AY\U/sE+1)R2H]imn 1yY,⾻ >gݥ3u]PFPg0)Y1͖urSsn8lUfYՆzBOAd.5)^ yh3?ƷmmaCH ~f՗߫> ;фzn#UMPc`2 ZqA 3=pj^1FTL%q?r[IvB? .A}e7I-%H %ERn '^-vVEo +` [E/y_ꚥܗ )S(!-ppSs1bwʯݔ6dAVPʛFT`:vHLpZq[ߠDE*FJ1a>TVO|@+#Чwqrg(N0w3pqްZ?v txqZzޓ军f#Ŏ8<qFYA1'm=q 5k\18~Y=7)|帓N7a3Yi-4dupUߩVkzcyy0x<-pcZ5Gh+4W=}NEtQZMy>ڥbe0Pʢz2Nk8#q[:KȜVX#Қmir[n\|CH.17/>/+aCrzgҀlA[(VL` \oV9ۗ)?̧>'eI!+eNvd WP))a.q(p9ڧ`T2[2FKáL%$Ʈ(#t$yGo!X@8 =@&T7=y>(ٲ @W%wdpq#f;u~L b>QS[@$fV߻sN0Pz|i\&ʂ7fI95X!v4J}qϯyc_ĢR!,Āq%n>"IupiXc,Uې2@'ۿcZIge]App03ʤha 3+:h ۾N) *HyTRAP*0r'c'*y!;#1A#$nɊ6P A\҃3`W pdSo@`8?2;=zbWbH/^1ބ6˳a+8 g_G JI,\cscvqߊRRJ16vvD!Ц0܎3ߡKWtpK԰Qm]zz" 9ɥ$zɼ 1NKbT^'ڠq?m*GO?Z[#ߊAbg8 [F*nIp՜7, (Ǩ'?!W2GuU{*jk9!0ȄgO\Tfԉ#!;N??La|qgzSTrGՍ?q'9 Gl8y?ZnWBHv#'@#jht=mhM 11w&Nz`e\qҴO'>8M0TH<縭a+Xv~!x#Ӛ@T:qV6<樱,`KGsʅp:e{Ymzp9zԋv!n05cHe'v>ue7<Sn6q$Pv .BGqӃU6FTk#H2RINiI71ۗ%Hwa0x0sǥQTTrc O!pwt~zH`VPpW ڱoct\vx6n8184ka0_0n=A%A;P;'X@QAXLҥ!;bUmU$ڪOsړD$ecE;HŒr8gy~a<i~e-OY̹ 8x3JprRJ#9^E'ufgJ&8دO֯Ikne3Hޟa>D/#d`FAZyu d#+)C[θHK~VW8 荂 Ss=Ԟkbz$yA|&Aݖ'Lb%Hbz:ғI*UrO=;ܮ7GUqJHHKA= ߻ 7`Lq5(v6+!1'樅̎b= e<yj2d9~`v[J"}=rO¸.oG~jMTH%FF2~ӱqf G+}0CU~l'c]Q0nj#wt\mB=d`[s& B )9ֵUt)<ɰ!a6;6X0s &Hl`;T v1T~@IGp$'FI9)Cbf\-;/~S基r %ާֵkoaDb;&P!' ÆP` ;yʑ=8jm5b}]HU9%Fxֆ]ddc$LayNFqқ}JB<'NY$Hnfm~F#a: qz4lc+!ECBE#pr=ssqZn h}&NNҽK ?!YH-96_@G̺=ꦅoq$Cއ禄SI|HHj9#II' XJd20aH =ϥN"Fv\1y$J>EnJ ԜCE=XR>]Y: U6WÎ'M#6Bg属g.*m.@ a@9QSܖOlszh@tA S"qcYJaFpq4mE~e 22$h1rsГVߑq Ue%cTGrN2 g=3A4md(b9:Ӥ܇qg͑V#Wc?lvo£9=yR#GiPcst|ÏQy A 0vg$T%Bzga{T^ gp^w7ׯ5K DO9@78گ[̅d3vWG֤P'y$O y*|psdNr0A=rF1 "X IZ25y Tthޱh ?g+=fXUG8MgBT8`AOԥh66pH{*)30xr{¦DZ{GRi#yjьpzZJV'p` =}jVv'{%Ae1i Nc<#1Тm g$u}b20 >`>֨IfذBbp1`TJ,wnXm{~5RJq X*)p'*Z,+ xϥRNÑISM`Z7G8ҥW9_=z OҚzzm HOw' `] T*|0TTdws*7bp0{'4<*AwJLAnyBǠX$WZ- O;BߡNϡZY! 'z{N] Z+F 's5E吲䟙J``>)}I%QH+<~c1MSUpDN 1ӥXKdǖ9ܾ)~"ohEc:p>Ф㾅7bCoT`URNp}lo"Xni6p[ qLFц$01JWnNb`>\Ǯ;{ e .9zU[[9p30ÏC*6T0Iͺ4 6O|^?Za7[O^s ZK(\Tqsoޕ XEDڨ@38Qjn9*U =G29q7АN:q5Jë*>+b31G?hٱr9=}?mb3  W<^}E{hPo1돘pzWܹvh4CDq%yHQr޸Zp8x/B~,r3e9<ڨ01N1Zh\fUc?Z>BAWOW[d[r3r:48`~[Q3J] Ya7+# vE/w:+hh` GZ.6}qx)=̤0d'ha8pg z*dBР.@o\t#)Fs c(ijB`eS 41Ǡ>."erDcGUדӚ`F?#ddrKg*e;Ny~zI7PtRq8=~ʑhoxQ!TlV`8ɏ'%:h]A"QHVpx;KcGeIJ47,@LгT9de# 鎀߷cF͙yE/Q:~UJH[`1x )}{/U jH< Z҂C|э'I<]<RI7=~ DqY&F9c122{K+dg (#wqWHX;Oݍ0zNOGEt&g9${%88c?9cSGa%*ኀ9Mh _q-j_:VP(07B[<ښCrqo./Jųp` 9#D6VX#T*l.H8G$&ˊ !m ?w 5iwrKa-kĄɱJ;N^ZSW"8-rI/,qXI] OӡkI㴏NOF.[NcrSW:'T^z )g>+cHfx֫f7E\`;OCVU{Qrzgo^:WLhRdU剓 ,$_ҵt%`$0ps?C]e(F/ z[x Yi>n]vZyYSq'ۛFqӮ+״]:$K۸eHГWepRjN;+;Tәk]qsҍsȐ()mȑp 澞1VI9+jNF,2]LYaZJ|R##~cx'bRǚ\k7I*DH@<,~>tmOӵx8cpv)Np9<GR '7sآl=1rILO` n`kț .:whmR ub+~Ubs?622r:kCF@eA\`gӭL_;P6Qn%sqYZc֕[-SoM#rrVϦ{괐mTg}k%sjWM=\s~P::tǀNG`r¥S2f1y ,cèJ%s#i*l[*Jwb.J09@ٯeUm6 3GQJM*kl/`K?ʬŪPq`8~Mtb4;vpa@;6J)tcv 4֬!TT`JGy4DCbAInk+$)c yrIqnLUNeRgr?* P ߯_֔eS$4¿6bcG;JOѢ r=}ekk`ƉwwW{}rp95z2#H I?7_3ִ8BrϿASrA-^!Fz qJ[[qi]<6=Ojn'!RD q$9bSj̲p,Xk{ .HКkS)GM=J .f9!q ~4`I8=0ưIAs_>gmAGzW1ӷ6 ̺y;Gs4:N8&zܨD`|3{UA+7֬ܵr٠>|[zsf'&G"`V4݌=[p*( 8O6ڏ]":s&[Yy+pu1=j#O"oN8|uνYV/, n{9>/by,p fdZAg#pykI)+ƱiͻKv@rOkua=p1?c=69JF<FH9Q˷9a~> hN[ :?.437#\˖$f$ Tq2*ЅL$6''eJEmuC-[ϧQ(ٚA܈2;Hϩ 0x$s v g#81B˞X11Cwю /~N=3^A|Rywl֑e62T NsہSNӎs80{)+166r1y$˴qFOSMs?蟺˜!py=JHm;\zhZ1O#8ƨ\YdwsEh趯fe֖Gؘrw d ]u1'ڼ[gljsf@9F9<6z5)Vp Ta<(ZzxuesDJ0=FrU=j7| R vڲz]U͑d @rrr8׸&.R_*]ON8-ucJ}Ba8U.\d<9ǯUc-r!X`pF?5Uqҕ=5;Y8Bb\6@ ?0+a#?{=rKcNSKЮ ޅ2t脱r20Gz?u>Z-ApXhȥ+8Rrw^"9n?JۦzhױNWB񁎽xb߂OFI=kE=3dF,F2895G :#q;ހ^Yx|՝<'~w9mIWH=x4W\FTO@=ϥtש yg pNqd6 ߯WBNVDsBvN@8#*6E<8⢽;yhȵ"2tO8RAuJwT. Y=׮'Д߸jW;`NSr :v9B[}:icM`8/pmx9}}C Dʖ&7E,@h19e!z=yI?T6 }Z'nK'ںkMj8*AK53zLEhXtf>e:qTg<+v?SϾk 4^:Ǜf[\0;y'qZ7lqrHMJ]'£GK:ss#ք֚h;8,_o֬U?19Nz|sM5nk@$9c֛s u=&Мs֧G᱓@9bcn 늓<{uVd rOSSXN2r;q[^7{>_ 7=jJ=|tON.،dcn'n&~SyZ&8yn$'qP 0=)n%& *#j`ccקl>v)V`'j Cgsr+*":?$*x26Bz$sV񊱋!#|䒹##3үZVzp8`]I(# ͸Bƴ$:\,y0[}pv jna$r1$~8Ni/maqQ,YX8NqjknC s0fU($2/.QNJjREʂP'88^_ҹnJI8,< dqS wfSGL;UI$c'Ү_\KxBJl ?)+fBx"'k0ִ׶%sllڪ\d` 1e{_6L{{Z7GvFz zGn",r1 `tt/#)CW35M2I~O9j\iAXNHR kա?p1=WqdH;X1jF𼚠iU2u!C1ғMdny;pn1khAY˅AH^u[H:3+6ш@mO| iϙIuЫS\Ύ#VdHca]7uQe:@SzUJ* & ɐ p6w㊝hxYoa`px dv ⬋XZ ߱v -`=+X>ߏ+ ,aclsӸdgGfa';}Jd8aOlJ\.s|V!ʜ]*(Iev/9A. nTEKwwZQqH89mãm@o.]Jۉ20/WkxMk4tzmo,5m$ 'U`o&[FR؈7$P[ :VI٫Efޟ{jNaev$x+ɵ/G7#$w g GuIFY s*J,9޹Wޤ$g͹e T/;CKRb?2:Y#y|WEkb6$F0B[-Y*2 0nQϾ1dV4 RtϹl' *I*] __XrqTd$a60'jG|smx:T-]8 p '#F:N\|d+`~#)1=' a\0;>]2nx O4-;Oy>G^s 9 2qz:zZ>_o@ˎhL-e8cf})7-.IRa [@HPRE#8$yޥNqL{7aO厜L8VMU'_4\g=֑=P,`Ƞw>;Spt$d}s#03ќdzg41v#!?.s};h+.NPt,G5Iw8d2>`lGRrAo,2d X`;Q IWp<{?o)'!rpO8GsD] + #$wwڤ qgw\9>T7vpy<5_䲪pPg*ApR;}:WK93m8T|r4X( 8''sY(1svD_q|$8ִAxXr0TĺޜwkmIf(82rFZcc277CG$ێpx8H=p9N)W]|9pH0,A#睎o|* IʣFAp 4fl]Üg O&+_ bqyx |UQ0ml<^c"1/![#9`S9bO!SA[6( Ulj?to\cq@j`jt9y'20w@#O9 з$t6!.\یzzυ-běN_9%^^K<,]*d$}Nke{BXkoIpn=qFnc ن0#Fam>Aw~@Fc&Wj[Ѿǡ s, z׵cR5Cϔ`v<ּl_u{k;b= mֶ?I{q^cVZ=#MLvl_RL*>PĒ;[ hF#j0qxPq>ڦc˓!@+1nJvB#ndA0=~CQʏ,T *$ vj$P9/yX|{;N:dJ\.!z%Pẖ|ViE8t;Q i"2X@>d$ S5k M8J,Wi|~uqdڤnTg&[c K^^i,bH c8Mco(P:1P΄a%iϚ3ːIA8I p:ɧk? }]kӤLUG'㧥q"j|7<@7˓XߞU@Ϧ}As^T8;#n/z~xrBX;ۡ'en\dt#Kvv5W=2sOS?)hAӚF>܌;IƉhe̹ggSX1QnfSM4Lۘt^dc}*MOG>^e$j8ޥawRNzd3ltM?q@+U.Иzv953㓟A{b GV!`sUY#USܣ1BPbՏNU9^GQuu֟UXmʐP8C㞽F{u^=/ew\Nqc" c{?ҭ$C$!}SNч+#5ׅ4CV<{Xd8nbG(׊n-:DS)t }_U }l|;&r^ҒD#m4<"(f {i|H\[!AHp+9KE$rG300Xca9@6ub:)O/}T?g]͏_0rNjd2FK)eJ9bMMe %|RO?{~*˿n00HG9|>HEUw?w|7ГҮv3H}8_BnV'dht+̣~*U|,2@rVͅAXݣ\'w]VQwnj.v̟1X_]x԰Y_ #=pYLu(ğ3 g'ƫ޺QB@{GZR.]uS}M+3+HJ\!RW qӊ_ q RQqzF2). ɞ:|іeM~PqoTM1X >S׿JW >!|ǫdܔn RyTP[ ޹O!X,X<ûf}qS1G_lV9\>@М6pѾ#hXW%rOȥzNPCن>t޴LˋCnd[uqO'FWkd9["Dv\PDBeq#u;\nQelHxd9?XHr>b7:z#7wbn;v ;OU *F1!bWOnR>\xlgQYiulDžnN&҇1O$ ]s >h&# 1Q36c[=;R2$gHxGN6zA8Mօpԛ97߀c g_F,W 1_|!4\2Anӯ?δzO֚]dH*F:s)2A>mrI=6n\5vTѽHTRV,[nԌqtleO81Lx=J̮CӨc~x{h&!tl%QTK''zb^DF6Unqվ^UK .qP|H `9ޣ2f8 `$}:QX 6`V2s({Ԭ>#֩'M Up#>}E6"\t A dM{~Ӝ1# YG;mpCm<9s&C\P3㊧bQ͹`en s[arvюYGon(N-#sޣNOs3Н1<Ž9*1h<QyTĈErynT y܍ܷQ8,fz~ݓ։}e@)lXc's}G_1Hҧkv dmA5V̈H>s*lA٢Z4Rzʌpz rp{ \)%pz.`A q߷&O K![a lzE CCHϽ>N:ֳV3Om-1XwH.cBXBҳLK6 @<0FNHR,Sap{RO_H\6z c.''yl_H8 =X71>`W@AS &\vjd qoH1tA-om|$yp>P3q8 ۊg#LHy?7ݒKph G=FyY%2Bc 0O9tp8g䜏S^-qj v<8'+2[ *?/+n{חR6Mݐsm%g@q::+gle  ;0䁓׷sIn3&XՀ1,0]u {~df_ g:ӎGgSmA䌌`WTGC:p;dbq, KpJ*=zrҬ*rx=:fW_/ͫ*G sӵg $ʰ'9'wI's?U`z|K̴#;'4탑gkrapO'R۶'<`3L7?)V8rpQڲ^NG-8r1UQ_`SɒFr1Z H$B1J*Nh2"c3,9';r%qw?99=={]$) Ag?1<ہә%Mk>a7n:fdu>Wt-mF׎Z2@N~ۧғ*F,G<צ-xO}<+VRBE$ey9ۿ8r6C'j Q/A rŷ9ʤڥ=z/$x89jEm1`"$ (2w+U4B6J`;v fAʍ@/9u 9=T^)]>[dg`pXdR\bKPs?wR{+ӯLV;@w=ߥͥ۠63==QS򁑍7Rj O׎ r ǝ8U˓Pp Nq7̧9H+cgV ʬ^7>݀B? r͑:kI0cm8+2]rH$q򃸒0sO2C#qPr:;皘F@r>R0#i}D09-өSM+2>+v.Ț^i#-P-2瑏A=haé! <GޭOO} sp>R_zhn&|IqbKRa`R6.GBO9fxC4Π\d+|݊G`` P.oЀVڀcW8*UR;w#5L\$vgrzQ5jyp񖋩nPDkm72*~V_™svLe2?u֚Tމ;T]=_.8,WBJ0c#+quRQiROf8=9n:yQxn dsyspUDc!IHpF Is+˻w;ڲ&{ c03߿P$:̓}5RoƼ/9犌\yx2O9Bzg3RhoVUhy7y s޷ 1Dv[@1jSك$O,BQ@’9\(O4QTa }+o./ViYF2WeO 9jPRJŴ0¿;d/4]mlme<9o.sGOUtmTFKmS?Niv0di\@<)_0sZ:V^I#vpOO)o'u<) yUNӱH';28_1&Hݷ!҃BOpb3sitS$#ۂTǯȦK̍mP ⺫ +q**`;8A^vRnƑ1TQvZ>WϿLdgN+>cWčrrA+{|7B6N8A-YrݱrH/8LjфFх8Zܹ4/O<F2p<{}j3RivĶqXOJѪ6J.> 7+艔)zM_ 8/pyD1hw 6;ldI$(ِ)<>l[١*:M7nP @0nW{`cq]r*P=1߿f.dEY#n \zvN;g{sTd-5 a`vsҤ(ϩϷWe rH }\V<ePu;О5r u${[Qõ7ߞtݾb1œt; ujT7n9qߠ?;\'8(_N'Ro1m'X=8?lg#ԞnP6Z3ۅPfGGAޜVrV)>mJ@AL枑ƀeH,sӯz =,FuvZN7ICg:jkhR|Qgv'rփ#. ˜aqR|{o~982F:I%_# T6{8}M2UY$P}jvv!BHFB0 + yrWw?J%ҳ-.uP|d`F|ݫPRs\mI99yj=S?4>ȸG[-X 2s[Ąu9Yԩ4.T2gVA6 sּϾXv)tQYUd`J͉nNSwlj,=s˫?$~g}9"MlL"mc!2:z؎ Xd22v%o閉ݳqbUN#)j ̀Á=pvz)g~*tDG ˎaQPsϮ>Lco9Bz; 4NK =:}jX Ԏ4_PJR-A)8=LU&C y#`(F8OH Rp'=#1Ԓz{dִqCG@#grgjս?gsvO FuG%J)h̙6n~^E) #i99^z!UI +lbF6T2;42UP lJ0i87Fuq0&Ѯz&y )8 zcg-- 9Ńp'ӃҪŒevJ]da Ӯ7e,<#)n3:V hR[uF;A:j3ln@X^J?6ʝBܸ=w .fUgho]Jʝ\nqPwvσPyju)6^:cJ2giΫ WZIG9 9k $YQJ[zhO=GJp嶶>]ª.zVn1Rؿ7z[p:)'JF3bwS9ry=J>D(ۃqUeB ` O#4X1oozى6W0+jK"X<S< 0sVA'*p8\܃QR^#>??¶OVC,u;;9<\8ִN#(3ir:G󨔂HqPy7tqx3n~=prsøf-ɱYv6>{UKmJ,le]id#c Y'5ɥvn JΈ^,ʻѤ`&8U{.\70b݈iz+om2# T6@*"3y3;{`֊ֱJ]ER7ge*J寠|g=rթ;Ng-p sԟWvFT r;gOm} s9֯;\ofQJxǸTvIp1Vrz;=` W@ ^&pZu(q#Bu֚I^0;8rI鍧 ڮ\F䓟c/Wkuʣ{s^Cpe à)u7F̬e \) :sgJşfAE J TpNq$VAṃA=ZjM al$~@ qَG1YZ~6|RtʥTwیO`ґ"P4( x}j"GL3;pFzKMJ07,Bdm_Gb?N*Jgbp#T׼MfXyvG aߊ-{=*19=9#;rgdy]ϗntE!gNŔ7ʹ?}ФÆ.>lcZzm N,O%UBV}z}E.23Vf ;Tz, O,$lI+gl1nwrkۥ~۳1X4vd`,7lqYiyDF ʮ:Wlj#F=@ȂN V(FssVm5[XHb]W̄YES{WD]ס:vݟC~yRIFJhqjkk?!Cf~De|ϵR9ۿӄKfd!V08wgG*5Ē}5A 1xq?)8M Gs]FБ42Rv>PO2VOs)+N)')`30ᑎqcӥRA*9!Fj4o+>VHrqm͗ڃ3AD8iA芩Rwov#QMtBW1Z,Ca.|*G^'j+[:S\)ې{h;N:k[ 6~X凸 *Iژly^U@c9)3H 2GpARG<9CEܕ@~IGc48Aj+iSUflF `N`Jz| 7#O8gMil ` Þ߯Zz䞙}2;id- r ( >\QLo(Xp3v1<3ߓC֜6c, z$V \v0F?ӌ=Jp{qCb8m쌌sRI}ᏹ$^;`BwNONhF>JU\L\ xwx9S^x(D, ?Jc xpq9j 냞FA'zP, vTG>dHTw$}O*T"3z3 <: q rm8e'y 3==l;A"ZCypdrrsԌ\C\k:0'8;1ar"r@#z{ Bnjg.q0QgS.% 껲146g;FY=;0F`JAJQy![Tg}[4q8гtc Ґq<t^ڀq9 =i 2Q$+݌$;kNϕץ7)i; śn(-JIA;:U#] yRqО4XWԊ(GO$fiW2acFzoz`]Yc$c5%o#ńjX |{ӽm6¦Blgpz#3e}iTT=g9hߑJk,۴屹–lnu>,e %\tSQdA|-B*y¦-1Ȑc\A݌RJDXpIqӎ2j16B*A%z`$]ypᕥF#{W&H 6Ѷ`};.Nq;>xSU%U<,q[HV(Le$zmڥ?7Z!Zuw9ٰX%c v^Z۶<`V׻p,uߍ[G~'W=d؈++Yc_ 9#AVlV{+%Ԭ2rvr6Fx8#=sfSE,#'q㎇S|ݴGZ".[:U [k,(r>ߠABOf@ ;x;q9 Oa7RRq2qO=: #N^Cv} o>&8sd0sO=Tf18X~]*AE@=wmTxp3ӂ9lh".c7K0JΖr]\}8ОOZڄșK`G^uiA<B ONb*zkZsv8e9H8hL,M/0ʅ'>Zѩ>SqkFPlp"o/%S#h.~bpc?t}|tV}K;REU+O;?LtVʒ(VIId26n=35Os9neWv9;sF&yT a’($`$qMÇCr *`76 (iΒc TaB"amH;p ڜ /M!bo,$Ev9T7~>sYs_ONj x8AFpN2=j?VQ+!K&r !rUiCr 3T܌pA dA[6TH#z搎7 3(^d$jFKS:L$qG!*0V Z[W`27(TyT)92z`u)p:@XX8*rsԁEBc-W _>X%3Nt)Ic@ YU{BȪƮTa`$h1 Yҩʠ99h5WͯsՍ>&y/R7?FIͷ {+ĬdvqI$ ܞH9!x_0&WFܯ#FF[|;P% I;vSH׽?̗Yip3'6~ٳGt$`qڐ[2I+#Ӹ8vpyck*8bN:t?犛ڸcy8j"&\ncչ`|t#>`I0J~zR،c>gRFskE"rY@0i)(2H9Biq Kadm$` sǯNih$e펞֢\̹9 {c&vbry<M+ K0=#ޣ `dvۍ =FG>H*s+gfBa^%lM'7C<9z_´Bl\=3ʤ xG9#nnqғ_b#:Ʀx |8ǵiF]3tRi9N7]Mp 9q2wXvzj/(g(::,GZ'/|8=qWзm" !wq<͞O1\G.Hn~aӁЎ⳿O; +[67VČyNZ7+f9,0:y޶5obNٟ$cL+B8ef ښx*pٲN$l{N1ӧN{}+XG'H'3VbQ{q\dT5 7Ui6N'ЄiJ$@99>ЄcoACI頻zBӒyszz_<Ñ#ޘb[3;A* U1"^Ĝ('J[vs3ńǑ99ЌB!s%Gb{ jD?tn9Ө jEEslFO~{ztSOQߟVmrgw:HRzެJ6YPH;OjHCgP_'  v-I.O g <I#d|\rTy(>RgL-q6juϰCcHn5r;5p8ޜ`L=KB֍n\*G\-[9VWc,;}̶%N@wOzas~δ;nNbg ec8栒B?q8'ԡ3rv灑VVĝ[0ݑirsz[PƼ &e)XSnpHIZQZ[$' saI=r49U2n1\ r9I"xsH<3H<*~s@#'(P3I}+x/2a$F8鍿Qna=e3Q?N*Bv{q2տ3\sg ve9Oѫѣ[eV\; )0CxzЍ/?1~\CcH9gbIK@_¯9^GqSYv (i*}G'ӊ4 fݞjs$.pwryϷ(}0}L[$Ijp[K+daF翧=)6nc[?BSaT݀>r~ڭK`[ >5$I!BƫI9^3_OƙqVL$#d6OԃƵ[6\ NOrd "p#Tn%2lڬ/yCIڣh 8O_@\t#rߗ9WO^g[v61@5c;G^Iۿ@zzی~ )99ǿzsJHӷUo/8!lrrOO*}lkEmm??)' *(ۃAU܋̢B[ 15:U{TrGrWc>}q=rN{4IF`Wݸ=:)%ðɔ!c=*Q%cBnNW犤f Y (ӎeԷSQz8fCpG'-f91>OF#b=NE6Md(0?,h7RKsۑN{gA@,0P19== n +#8H9E>M݌Hʱn7L2_Ug=).سnd$yjAdJ,)|̬zNVd^Har۾Ol`xo>KThir ?{mֳ>  /onm>Fqj˨Zn$vt^y#(9 #\pNw`88UHbN:F?5s Ke,U, a;Ǩa^a3ˁ~V5o39<}x*eZ\['2{JiG yE`Z׌#ID@K2*>Bl6p['~rOrܜcM\Ւ:RQKn EV(`/O*\yB(!prY<0N~3?Sdf.@fMw'US4| )KAJcA^[y9Srd*9##n1Zǖ5,sI.fȝAd] B9 zSs&" ppAb?.y2 ?d/lޅil`Q\G~+! 8psCPF#Qѱ $utȖhn,(} MɶE-)%S<1@$y+N].FSwd>춑}i# q^oėwr0'`uA8Rx#Nh&ԤC gut{~t^vy.fb)?R RO !y5R-[G40Vpv Oy$b{OJ[*Bp[,_8sSF @p@㞧隴N+k&gDX/ _ԅ IET[lΥuf,zr@s weV tx# ;֛WЯ;3|یz?HsִR'BIBW*{gXPg%q@~ڴ ws=-RɱgOQsr#|W LzS'[cGR:A 6AgLqY_CY"wh'w.H¶xgV5#iSJ*ԮOJu9^2yp;=}{v㌑XO@C>b;w#vB^Ƥ骬M€I#'<RK`J7 *DAI9ZҨP$OJjIݐg<zpN{Ր0yNrq{`Qm zLP~GYHW`;Tc}ǽq~e8ʆ' 8lsjt'# ض{jEAzp~np}O©'8cN3Ugԧ4j ۱g@$N3[Ѓ]_Bj˖ 1895ei`G9Vܲybk+j3JdPQ6&\|W Tm; z,R3߲KHxn\Usֺ؉T `c+|}}+qCUJNCB%FFI9ǖ 88ֹ۸JX>Ujm43WݜӨ@($0$ :RAzlg$/zSJmv=OORXW<݉jA"< 2MjtŶbJ~z'z3nN.clHs}yMf\C#>^owweE]͵=<y PNI=N_ZmRB,XWzHޜʔWw+;try"ɜqЌOZZА&erqǿLZ(R܌u>i1~oy ՔF=jmlne s`[9<9oft &{zz[UhL.W_8?LQs֪1Od1t\i*ă}>qL0\gڽN2 gU8FVIX#sjK3K#jm|L0 fW ܌N4N6޾[$`svfRkPޛ۵XZ0T{VU緖U$#r{ӌ量~F'.UԹ%*-Hb,V$*:`ָ4J\g0pZ&hFi7mЀnpd,n]Ź%zuk0Ź*$d9k_̥Q?zD: NX $u ,p$tU--F) 9 H,7)%A9V8ӥ*\ʝ#;TI9%v_URj\pg֘i8|nOvJz])) JT림FG Ò {Z~9Y1{qM6dvkZ{\s|lCIpw:d8E 0P~{zpܬ=u+Žm3taJ"ٕt5uG~D;A ><=}*'=VU_?,JT7w6F'sKO\ w W}xHc靹<ұR`uP\du+5QWW4"ΞaϮ~wtl@(O~DJ-Ĉ֔3DgxIyϝd#v99J=rV}=5[*VNW>X[l˓8S3 p2+V*nbMlЅQ67*pQsߜVjKnws * /Z)OEVzho fOG ?͖ܭ8_G+2;61'۞Bi󧇔[mnuLeѸ/P~^i08jAf8o \amK^::L|2e,hQʱy#;yS w7tiT`7Fr=H+;rÐ̛~| /t0~egS=+C Rp{Ԙ1唓ʬ͢1r ,8vOG+ʼ(8s^)I`B.ʒUckҵMvȁN晝6c'N;+(Gb6# xdn{㡯BӵydOn!ynsʗ*4K cXʂYH;qV9n>J~T9P38_h%[{2~U#ҰdwUݱwt2AksU3m#!# q$c\.*3[ǟsjdt 6jvwx$v,P"8vG3qEƠ l**3 Xp3ǵMߡL^ȬH4v@G(.XvubFUr#OD[U(@3n0h!ev {9 vnG/Bni<I?ʪaLM+UJs5 H~W,HbC7qߞ;Y#G"DM@ n9?p+aG̸ǹ4 (pI.#px"YH f S&E~9 :UpABQk 2r*F}M<] `6# GSel_ܘݴyOnp{uf Yp  `QVPێY'906Mqbpqz&VpHd,$6\uI 4K&@ A# K'089}F-)/`pǠ8@n6uqR*Hw{[)|q9 ӦqM ,xF,xϨM; RI&TrsqCDFffћ}GE، ͹[ms+W#<239SRy#VdrI9пLeJ,Hfҥ6(MWkqz.m:!;3ܲ7hi~CӃ(' `0#q#5/Oק"A'Ǿ;w=WA(:g.N7 wr228Ivgvsڙt1filYbG@9G^ޕYNb@798 wEMicH9T=qsi@suƜ-'?ǕqD͟/|<oSYjR#t) wsVST.ݐ3=ދL  nQr*I~>ZKLv"}n!NɹA|1g[?ʢ,ac9muQBٌ%^|޽/i_Bsp d H[ >%?ܑl@;I;Uv'OW4D9=Jjzc#KX_\.g~irFvN$d089A8C`pzj$7z󊐌r18Q[P U %,n[jZzI<O^O|g݃kgr0=Lg<я ߶3Hp@pg#ӽTe"Fxq܎:;U7S9µޡ-QZ`

c=Jya;{V{{q F(h͌v_©g} $a܎q96;p8h9۲: Vd]a׊=yݻ$)ŭL;BBx$ȟ6=WK(:2dOAd%ɘV;439P }k6HQ l$ہJW>3ToEFh~ߘ8fJ)na ܑOW3 >Sr,8ݒ;Tg(_6`@R $D!22_Orjrt,$Q8;4!$.vvsE ;7S(2da#~u qЏ?;g2Xg;z.LP7cH%ڼ@-!=::# ی-f>V:u=4` /r1a% 6$TpTB`prp=1k5YR~E _n{&]6KmC0} F?lX6`=*cgvGo/Uؖ5Ih eOR>3 )rxҟK&ؤAK'=)?ŴqSH),YTGyHWkIuq98<. nrAA=~cX8ڑIR0\kFu'{䑅ڦ2[ o?timܝJb;xi83I DEcA}NzR*%A\dхUVx9Udn{^itח.n$yVV30Vm=r9 cޘdOk_xd{)ԱIi/z-9zUgm F<IoJ_#1F{8O$>5q65Us;qҢf~c)#ԏҗMQ6"d\|v Oj!^{JiYyQ#M3&>`|NѐwvhPYYn>-؜~;x*M?O+>ʓvfb;tsμvԊUXdާ)d`g9;t UȍnA$9dH3'gڄظ%i1bܙptm :429{ZJIGԮѽ]8'֢9/1\p8':d:(ݎ9#pN=(٥D>8?V%ۦp=MW2"k&Tch:ˏs\+$z/RTv:H9F@2N:/ ^S{VMJ;J??yݶґa[)r}Iߔ n;^t<<݆NxGq\fOBr8>~55218?10OL> `.*Wn,x]0j6ݲ x-#s bGޓsr0:MtqG 8ss?Z)(+C"*~OǵfA!nOLv穬1/uкQf]d=svvǥx+|I 9=OveG'Ovvn394)َIqGCRrDc:VM-;qޜOV29q;Zp+" v~e[fk nSֲ<%p]wv=>ר- {eE:|Úh;H9W8c7xcSYnYQqzԨqǀ׌N.vޥ= 8ۓ}qMh I#$9G10>^#qr MS32yHK1<{Vr9I= Z>m>'2\]* _NmMqHǑ X}ЫRR2v'dKydv v檽8PBs^T8ŶMĎI'Goz}O_*’,yözqXԏD3+)id=9 'ֵDdw0QzʱIYY 2l{@XU2"OQ:գ;XV8UI$s{i7CHr9tl`?Z/oI!‡(A9SLE!gzG%q0l>yGTpxD:sՏZɱj>PwJ3`z9.:NC#<ty'cvqI q%JʎG @aާ= rg# ~Ҩt|cJNq9GoJ7%C;.Sz{^}E7cE˷vB:riG)sg-H/jԗV{L2{󞕉[3ܨ ={F7Uٻmh3sr;U#9#߭D7wّEBq kF*9N@/%'~R6@ q֪$+򑜱R:<1kjfI/vӂA󩢽Gܒ\Fy-NMHaBX!wOJ)&R0GIMLE1HCHya#zҤTQya'=h[|4-CH~}x+m-'ӟ˥!U +H1*qubrFNg N=zE$rvW=857OOmʶFvs{UeR9%8-ZI~cK6{dHӫd<ˎ+Esr=Aa˒J0LڰnnE,l|+iڷb#nmjJ̣AkG"33c9lȞ\2FX}H(|q#5JR8v] s%La-22@Ppv\ZՎITԤ֨c?)'>Ү@8V=2=gR\}t4&ԎWp<봨6 sr_Gc{>ЪDӟ׊eFiGCdWJ秾i鱺Ms$jʫ;r~nxxʎrj7w=->OzZX8°lFWP:1ʪ5F Fsux*rn]R n$K/'9w'U"Xl fjGtsp_#L` ^@wڨw cI@?^i+wM ?ې,Hxbf9TgXhΊwrF A$v8$ o *7egg.`AۺY7'o"YR*&jVrݷv9'qv7X'oVֳc@T<ǧkͳ2Ȼ#$zt=3ZzZBWY$dsЀqL{y/˚J+Eo5R2, >G5}#]w`aw׎zɫXRvc$u On=P7PǯZ&wrv[h-此rqҦNړ+@ 3g?#x0@>ǵEȳpNI8/Aڕn9Ag{~(M."Ȅ 2_|'$va{br9u{ jڦletv>Zmʼ\vpZixH,ǖ;P~(A*:`FOyqc''ǥ r&/V6KѾUصh1F8\oc:+wU\{E,np8#AV7e^< 䞸ZBG6`ۧ57S!!P.1 qƸͅ F: t :$C3lT8~I9A=N;{O͋M=#y!*:waZNE[RCGw}?kk| ;z;`S)]t(ivtp {mqQM0lr1xOe܇7eHYF2ISpێ>')IÛ!::eH#j6#Tvdqd =s["8@ Dݝy*rrA]`@}t;Tj ̒r03@I폭Y#wR4BVrxp;lpǀ: Z$fNM"g#j<ץQ1DA=“.7E%B !K7ݭaE^ z2s'r!r2>=)Yg v8~f8B<lubX9'OgM = 擒_q1Քy=22 p-1Xi++0qW##L ay5m_Ճr+GzrΡT*r~_U#6-Zgie=I3ϧ֭?8=*pƏ[o%\ޫ2nM NS-v˧~T]$:?κXRGuTۓW QrԆ(.p ky ܜsIyuNJ1{B-I[>O$R?طIv'S$:0Zeڿt\JWqֺ}NohP&ݬ̅zqiE;#eK*זi 7HnQ^d-mbH%Gr=~g;#輐? c5aU-zxx=:pKg y?/n?Rͻ#I9#.SK6Ìo8ZN*28z|#Q8MKm0s )O ಐ@ϯ=>nn#n`Q^O2NGW+E/r2~h\:\U^s*᳸8=\Vr{yZ{KMF 2lj >njSMA\),'$)n@@k7ɩ"؜W8@ {Uvdco|DXp Žs Ȥ9]23R؋;d3򣑎2T' ү s> Z(QH*g':sP,NFHKx"j# N?jI@cO_9!ہ= sӌ?^TՙR<#pG=?*2\.G6bҫv] `%'zcےk\>kSR,D @ğ_Nko70rxץ:jR9a7}<5ێ;OSީ۴ r6µRc>fgDl!։ ?_sz&Tp%Z<Ҳ7<[?q$)9>l)Pw%ARE,w(8s**c ֪3ИccI9Fsg܄ 5"N˜G ySr.q`rrz }jPѕ9T8ʅdRyzdVDTD%OOk:D}]wbMZKd4_ h*-K0U{O?\&|G8q/j~wpYnMbϢH9TA yI1 tjbVIy7, L(#gr#ó161Ǧ?n^_Ȓ<޼lz)8U%φ.X,T ssikEӡƷJnU0l 0߆yW#hȣ;[= c5 C8I¯)'ngx"qq#n ,N <)~7vy*ijvi6.WhrY7͟p) {4dM dY[ErAUیc>ߏҢ, r~_ JjsNN&{q:fng%AӨz8y]X#;if8OAAk.+C `N3O{巑H3kqI`ul2v~4ȡd sQ20H:~&RI^8,%J9N\lQy\F瓎SZ]mL60 +O2I\4YڥD$G'ZM85+|F M"s@c=MsG}%[qB\N w_vX(\ smiJȫpnf#浛NIVfew|?1A 7cZ{2> 34¬IA?;IVpm[,QRNHϷP q01+d>[c!C$lcni^Qީ}-v61ǽCW`4%u!vEq<+:Kd N;o"a$ x8-ר=6FEu Om=:gCVes /nP*hU鞽5}-wH`;/=EtFypuwXF(3!F`Ar>m`y=07gԏb;PHm1ZV)?x /<jo+jL$@PÓ8n9%G#;ulveP0yG\SqyWj>0C~ w|wR{ Cp7nម< 3+&/{{ig?{_P܃ڥ-YL 7V,B.suNG5+VtXT;$?ZMʞN3eUÑTbsrϯA;#̠]Nqa xVvNvz~20nAF=V6th}dy, !s==rj]S(am8QZ7bē.$WAǁӵG/XpºG|b,p0FY[T|ɑ o845{ n&e˵b׎ ǥK 3 ѷM&Y¬d}6Ԏ:烌V+v''Bشh$^Bni 1c uc0wn9¬/);y@<6+ pe8V˞$*o Y$B*l}H|ACz-[{p$?9 oځK=:kXP(yvmp^F#jҹMQ[&sjGLTO8S$L|3: ǭ_k`T26%Opwdr jq($1a̍ W稬-B tn u75izkΡl嶸瞝1^iK^ltw\NZQzJnR]@0W%'зwGH `>n߫=zE/+'xjAf2y*:WKE!2Xkp$qZHU%qFF6ªo_R[ #,x$zfI?NF;qkgO''$g3OhCo8k7es~cECI(NL`# Mfc[e7.7@(r+r`??ҥ>7?3p}GLY,׮7bF'mPP>`ݻ :dV8qG!AǧP4?j_Rd_c qg5i\}3Tv (Y{sP8#*3ïJL 7/A^SRulOUګuS)$9$?[Ӂxγ)"<']TX9ʁv#+3*"NA^;n{U&"E7U 6r9>kDPxg~bdRL;#qүlv.]Dž>Ol #nsG'85*4SJ:q[Oi[o_g)E5=`ܮ=:c:m>Dwɷ0!H|Waqz{\'+Aꠌe=pC$3([yee(%H@I -а WQ2RIH ,d%0 Ӎ5ݵ@-XgKvVQ>Ub $LE&#aS r} [ `v)fl3nuf9M}ieqI!^Э2P71`x?( UI+6՟bݵuR?rsLY{3x.~cXchbvNLх ]q'~8BdN>K {8(BSOQ^>s9=>h J}/21w 0< 0}h݂* zRzJv粓f=rlI|U~=H#$s+N@vaC?0ݎF'R's:*dpv̒I=sHWPfv?9,;dsOk-J2H\|8?7,sG[I=Ͻ) X1A]89ǰlN݇>'3JϹX{W9'Mr1I4kN?㧷D+;{֢Ke\,ߝ;v5yكl׭UW- 1S,p=qԞLPɸ csdOׁץMؒ2?xm7rA8kFK܏>qt8m Wy'󬺿/ὀ9<ԟo„}:m`?_P_V6l2x99T7g9#ҽGR$ W 6w7ޑS9;x$s'Ч@QN^NNpjʐx`:>KKh&G!.{ yGנ%r9>*[Q5+;2p>qڥb6=4s.H|;vӊ@u!0j'2vC=q̉i~T%!LF:Qo~CqqZtii0Nz`m{T1du?1+ܤhB[n?J>:9y&']x 8lu\>_Z^ z*X`Wc/+`מ'M~=ITvd+9'= ӾJ81֧Wo6>vI#<54/7PpdrABqԒ8O˖~xb}sKc.}zZKm 6{R]88wo!ZG4 ̨'9<-sDʑ0y<`FO@SORGSn3qxY61aV~erjPBRyE@?(#lg(ݦs!\ 玃]07Xɐ/k7c>f8edץ\ud^Xg=3){9_QNyKrϑxS=sMRx xZp|#MOgnYUO,#ckW^f2[rxB?֩^+;6\53n&;}6;i.~As|CgGEv[8G2`y7?1 KuL^|_3,K6 x=y�yP)Qs0z`}#a2wq)˱)Pm#= `~?U᜝SV6-5,:SppFG &!1m[#YhNV>#h1 -k5Ija#`~0-L6c ̑ A==:Wwاz0H@7OsҚ7Tڎ n1|zuӐJMx$@'8=JOGmJi33󃓃zI>㧭i!-V^@;wv{:5rCP=8T};,aU# NAO|})IH W׽d ww s]42X6Qp;,o g^cjK `s?+'}AFoڐ}wsqLrT:3K8-:Gqzޮ9{Y9CbTe~c:)URNF2@:56FoOx#=ڭj*r}v [!:/Q?Z/.JBp$9=?ZZ؅ ]x݀G x-CO%S{( vg`@tiNnGO99];Tlxq?PXs?='߿5X8OIZt9r9PeTI$t&2l+~x3O^iSCq۞)_^" v<=;Y =6WbއW+6빁x9X`fRdyp@',=O|R=:T<O+~Ȝߺ1$c ^ҠSQ%jy[ `>9rk<@!r m9F}N 5ܘ mzO{}iCUP*^ Hۜ`S$f'x<FOʝyw,Q3r0޻GU,Cut)K3J4R1d<;m=1t@Olր 8X+X`٬YasՋq UuK K| BqëX'#qJ~)\dr'YFIxU@_GLc['3fkIPzRؚ8|I_Q׸5b >KwıU)sJdrFӢAhwԆ2waT^eRFEǕ[гn:ގ+pA9={*\֓G"B *B?z֧uaO)ߩ篿zҲ]Nn]C'۳1v|2;F y)JIyWj1l,B 9$cE̖>Rq뎕,ӳWX9WaU @?=;t8"薬d&~`rA׊)Hʒ}H6U+cPsTp@'gJ+./SlA cj6ѻ?~SR}Ā3Q\?6aXgg{A~\c;zsYJ7 rSUly*% KgёmܤM[O*pI;Gq~k$\Pdum`㑜bEU+KNٙ\F ܾ>Mmn]˨3@|sVriM'$ Sԫ1+ϯZQ)Z7T`qלJ6h\@=9$ٔ^='#O(=I<;t'XNv2Jv wp9<oa~,3V =fѶAl[ҰܖNS.AP0T㚊yWbRFWo~=kh/[+g+2F˴qު; F:.Us88i.wCfOx ڴƤ ۸apL8Cz+yQœvXeOm{ 2GAޚMJ*M7b gc`Vh"]9tq5*)hJ%lF@ۊ ϭ(Ųcٿ*:c-\~y72 X?/JZr~ Rg=@?ϚIq0K@خVsMZ+q2(V T[=S# ^]*/sIwc1YJ'wU p[ZFz*IucspH{ZLcDr׹Rj*ylcgҫFylG߽u_UsYS+hbKml~H0r=x^JZ2wlr1dJ@9:1EՒ$nV,7}?jdNx:{R@v/(>zx@p>9ɧCF2GpnuEy݁z Np\.=:qTf~8;mkr9&U\Q޲Y=8$$dkDk ]j# ^: d<\:˓(5LDY8]pF# (ݎ)M-%`*Ėr2=ҳOώr~9JŶ3HR[$`9T"&܀˻<9֢\29#>llj[zzun߆+yo']Y+%x;vFp{Tyןx+LQԬ`C J ,LgrXɤoP8>;WOefp q>W$'+qsR+pR0.#͂z=V{O+ˍ.OOҼ}R $k1sz<.`N<vdҖC9;2HVݵ=ï$ɥnfD3 n!K$nn85c'xX!zҚKh\>$1VU'b{'GMoƳEZCK϶c mq)[tv펝8(k &906HޠsmMu>bv65X+AJy 㜆zCVOQ{`Ӳ%їmI vtUJ/?) R .F~9i q ީ~/"JS*MIpFz$Ӻ9AЀyW547W9A9=)= <2U$xqǧ@;r9'#$`}N:7QXZc?ܚbc}֡;u;JSO9nHs={S Мw8#?h.Q9:zOj~ː=8ϭ?i簹H|py4^0Km:;j1 719m@8 ԷL}~^kh!:y9AVg88>^7ϲ3Ȳ?'gNr>E,λ  PGG:7w04 gq;; r0Oֹ!Dl#խ Uih$FU)ʆvsUv*0{Y__yƬB˽vd !.B<,pl PF a2>e>FpÅ>stqWvJAێQ0A)Y}zFC3!'Ew{ity>vۛ#fB$X&bYfa p1޳>zSm\m ѽyBZޥ'h~yG%WoOx'ۇVKh|2xUGN$p֥fkB]ҬQ20 (a*9)rU摤7ݍAr{5wqh/J |89 Ozxe9b$m;/Ӯ(}GcfZB؇)N1ܚtiFd#~bHS׏CUs7LG($ @ ùP0UwFi+wޔ;15b766w&TiT&B1WO&w0dɭ'ыWv?HWkyd!$|Y kPdNɌwF[=VjH~;!iPŃ1%s U}Zx3 1XBɱ#Gꊣ9#SWkSXdw`dWSZ kB RCa'Ge&=z@4d/fDLdU#~FKA%ϘAUxB@FR&9|Т `:pO=hINC rx^)19O7e?1cLvй-n]qIVT p)gm 6o4(Hڗ۴ƁI,9;G9 };iEیFx,2q{SQ܅]>i1!3<OΤ͒2s* |Xgq.Qscu`p ;FqpiVɓ˻>8T}bNXj` : F95^]o / pArx可/ʀьsj&R*OΥI,ysS(-Bɒ%Y q؁`|O"#T]\#/%$k`|P6tVkOj, `vkF]-mdu-ī85Wg:kmrMĩf%6ẓ"27 RX>׀j#-X35=Z<$\L+im ǩ;ԽJD#8-+Z|`98p\w^*-f W/ 77NT<"NQA03LZ\4A%.F]yV6"p G$s_}JS%_d'ePr0msu.2*Hq۞S~E%es{0 k"R;Rv:c@b:Ԇ^}h2nkHh$pEZ [?)ۃ3O;+hqjo7х`- PH !H+l毬uS)j$FC0A5oP %W=AϧWk~@?h?>QzQ11*}:➍Mֶ'9ꄪ`pNҽI?̵LpϾP*~n֓-^wpJr0NHp?J2kR9ϰ@:c4< :-P(#?֛w~{}*_:N88V#y#~ơoR!#>㜞ēi3g8p|5la[<{=O)n݄眲{zazAJ0eFakv@W+Vdt#~.mGse!?(>l"UP㑑5wh`]E_?Z$޿tsKUFsjp@?ׯĸk*I83FsA\ ŗoHdFUV^osk8dl cH8}`KpO;)Lmoud3F1׎{Dӳx(=7 f#qfsg"|)et{4VSz:gE\ѓV+0yCy@ɵ7F8 jYh2dxmњtfK(*"`:oJuWbm(|p: ޒG'Hƚ"Lϕ3 .1\דG;ż(!*rxխHgv!L#BcczxW 9CX5c; \'q~yk-r)T)cl}ܷQ0O6S("Bwvl-=j {Y!p_bd#0r5*9k؜2*MO9p0daH n"tޞ!I-L hf^r^\`1`zcqLW\!g:4ٷrF~~z|ʳk;C9$u2rziu6CHې@Iлn]z\֓4[/=U_jDQAWdq71ӷ9'% g;ݖIޟ7* ,I@ǂP:~ȧ' yLrn16p:EH`[Av!(pH`H#fbDrI1Vm`͎c$r@ʥC?{QZh'Ѓn[0m%UM~f8 87(7o>10;G֋ TPn+x9#>EpNМ'9q8RnmݷҺk0ԏ |LZYpn$w@2:R2W @d;}y)Nݑ*=O˂Cg9%W  O\Ls%?gV#G.0| v;c:MtX,9䟠 =:~ K pN8Uu !OLdCZ' TO~>],&ЍA-bFVھ^:,~t֯s1'=rOMネ~x9ORIU!l͹_ /NPo/bmSF0Q1^q=3W% qv `qH-ƀ9nb[튗v08'#=sy~E2](R3n,s=GsO{8<'m os+(0] gsqf^3)>ń@=H aFAXE'ԭr֦ʫpv Aq#'w\wiRqxN¡¡CWbX~VJlf ǽ.޶ 27 0{s# .8m Pw$BІ;³p~a԰$g֔tgHO !bzT5Gw*F9j^bBLl+|gi<l0X8ߧX2yXۑsxa!$p`c٪C)9Knf,Hcv؎b/%B䓌!e;Upp tLR"|sFw}׎(ꀘz8jm)99M&#m_@sہU6l0qLka.>ms>%P` pϯQ\nx'TKB] /UϩObd0{ucs0ۈp:*Ȇ˱H9Ir?Ʈ-VJG3&f>$m=@osؑd1?(,8l[ՙfo1qy_Zӷ$trIR1DS%~R6Kp`@:nyQQ4sQCP"r+r00Gc3CKuVRyj~P=KXz(|w(F(W x)O$pɒ7=P謄|ýKJUՀ 39+mbHd݌NA8I}zu$D:Uʐr0s#֓v -}sW1 r\?ʲ)I1w/N2cpy=jh8?t| pp\45nP*sC!ݐN2?joL(%B0FGN \PKDg!v[>UB 8Q2\aA1z&M{'hq,:ZD8g㎔$J$ggޤ}>BG8[*})vn0jO{&5pA'q?:(`2N6$|}A ` `G*GN}Zɧ*ܖ=T4{V\o=FVq]C=1 $줞?\^P/.G8^߈yǛνiFE7duc20gC0UR8@Q9#==?:=K3IaUsjKqJ犒yngK!c0xO4glc9-jk&y?uGo~=MCnn}sQmHr7, r{qTc[A9I.[d d \O~FWuf'9,w70ޝx"RY>omz}\Fnw}Zە%b$ zp92qA5 5RmvF4> N N9HFCc8zX[alE`2OR}sQTcEq~4K𾫎HU;ߊjĹt<ķ~{y'iA 搲sU}jqs֟&6snOZA؇bi=d|x N)ne~e >\guQnrK{iA7zU1,* qJn>^){:QU7̍ +ݶ9 dcofcPrAg QR^)8B kp,pϧuVڀ6O:?wǙw93iVQ\̪>b~q{E)U%yضW+\||46I Aqg:W+8~^I}1Ӛ֬Z3%νN-F `䯿Tf` I8O^&"M^z\ g lH95bi<t?MFۻSܣIn#9=2Ms2ޙ8\{\vϊtxn7$hH0[J*Z=>D*E/%ર~!lYXRn!;G_NeHԳr j/diLҹ*/Ў=?*cI,=+z+DDcp瓓>0`3[ARqvV "E Ry#;p:VovRv'Kb3Ӓ3WToE'tMn #o,a8lH T! Hs71l Kis,rj7/D%qUPO2~SO3it r' pI*`:i}>WSywᑏ~?JĶg]Ӯ?Z;vB6Σ옌r@c VܤC dsG/R9:8ohI8?)V5OFcqxe=ܥ[fr:8z٦ӳp`ZK?3W0帇9 giS9$ܦOԆҲKкA` kh’ ,H@\zuISJJ4a$[a烃tRL~mOPv8SWI5촟!w$h%rI )唞yFw֚Ka:ɽn,w s>6џPːs9?R裷FBydr0{~@MN$'V}oы_px>0@:c~q\]Qb;1py&ٰzmMc"A?p2*Ž=o7+'1J73]=C>`xq΄[+y2M Q0θDG 9NJt Iݶ\ռ8Ӡv_]40:֩sl9Գzp8'79t6p80:+ݹ5(>O?Z'' vUVZv9i6R(.y zc?ҷ"Npv8EԺX`ح+{.HQ:{)YʯkTz@ 8@V\YxgqS]Ov~_/G{w+HsYo: wl [}܉:DGmE̓Iq8%TA8T"f29smB5q53%-k^K651 Odw׭mhژB:z]ű2%Ae\.K(?JvۢC@%w2Bw~zy$%q_hC}k8rݐs_?F{{|[[g) T,ODQPmNTg99+RϮr TIp-eg`d˭pIom nik& 8aD0 Z徦4гpHgך˟Psaҡhz$p(@ s=vc둞V,mQv'8j؂w᱂Oͻ=>t]\$<}*z@ws98-8*.Vݹ3`tPrYN08?:q0%@cr?׷(8b}K`IŒ+܃S'u s zΛӃ@$qߝgU![oL)9Q*2ņ2zp;=w!)䃌{FӃRN88tP۽.dvx22~ķevy#*ѹB3d)'?LЪ룲:Ul EQfINoKکqWGʒ鮦Z^?uo37p8kmE,O8F*O[r]E*fR( Í 6sY22ıƀye=ʃsoY6I=:CL:|a$.]N'cU6e(iq09 u\@ʁgdܿFd`7CqTcFg!nd<앑}>0y_Ԁs֣I.))zd9KwTzFN4 {]SY pqc~PIlrM-5iVҧawo! 5%0 GAӦM$d> |Rcjg=O%* dsaBʽicf*d]J 'F3ףdh19f +2zCT.<%E  U3FsHtƏa,q '86 'n\+E(Pn }@2/5+{UB7,#F894+_%WaHà74s!w,1 f-7Pz M "y|Ȣpʃ ]}G@?0RWq_¹ҷV'#&F%FK)=fi[2oeunv9N3Һm$$<ך;Y_3iV۱N}AֽKK['̙Fߛ8;qּOJ,6[`tivlmB0e$sڹ:7l< 3Y\$1 [/X>OL֥?xQ@=i+09<挕0IVrՂ"X>Bs=:ֈrr1_'o1~ۆ:c{Q4eTwC뵉#_1"`ucqy$px=i=fTSc{`csWJ"cv6囎Nܶs,rŝ3rIܣ:{ԖeaNpOnzYga98s&p;p;oX~fF `|tVQm2cT{MD_‘6e}E(8Mbrwz–/9`C9!+cJ^s=r=DF‰65jWwRyxIؘڊ߀2kwofwadd3W2O^9q^UD{_C jDz18>zUNޟ/0ǯȮk t%#~1;w9О)q%3I=q8TdN3ԴWf g'>'-8 OnݳY5%X^q܎ʬ``G?l0<9NFvl?š}}Iv6p{Q6>;Qo!W{ OaU:IRsHʇxZȢlz`985n~#xd58;zW"6D@8'#@8v$M;qpBIH#TsYbs9 ʰ^pnӭltCk ĶSq0n $dDnsXHZ9$Y#, (CqCї?],H+$HKFvG+ݴ) Ja/ |QAV=k|A5X ?A?+ _~58?óWvYzG5`K3.~u<80n9&13ǭ~~^܆9%Ty*&W#p?žߨF >P:ap@Wi|Ñ '=MYB.Xt%> xmޢkBڐw,_xAG$VcWanf?gUm=>B6e! jc|-_Ljryiς=ߧjt%}[Sڛ@!1#Ӛ~~{1!<=yʌs֠LKv!Ƞ Bx'8דXp:jRz\SNq'8ץR|á)gu*/˸?Uĭ[ iAQ󚉸Mbo=ѡ|qnV.=)7`v Ah<ޗ 0<vpNc{Dn`Ğ9'KrqMs)q8Ȇ\ݷa$*6o8rrF8ЋO0@ެB?tc8zơ\p:~u#Ǹ"@MKDJk3mc֔Y)^r>cz*Ve!!0>\go1S^t |0%AukyDxĶ~R$g<}9Zˀa ;U:\wy؎H"6[\sd26O,G#=3:EhqnH Ǹ (hcӵ&R[,xJnv& >9E8 lcx䌏Zv \* # uj)JdmbGڹH OoⵢaNrd㯦;EKb#%GF2q U1B3)w*?;Pq}1*Kdbp@kM" 9$kd( pHGDվXxyk9@ۻq9P%gMrϴ($F?1cZp]Gz80OaЀ;>>F!F7neNNu_VW'GNx'?N{1aӭ$-Jp! .9`V{39;6w u=,m}IMzy' Ixc4F[ ALws-cyqZ$X`O^=@>IwszfFr2|@O?:i> %F*5QjPy$@%?\2HǢ )lwJ#H 9qqNsަUmɏ Sj$PI6v3Ӓ)ë`sx+USҫtl<?5 [#y'#qQk0dq׾GznEy;sW$[JsyW~NCp~b}xr5v?{ݎ$Jo Hq]pQ0 pǭSF(p7ƒGOuCZ1)Xb {`V0TN8$?Jc .>R6g'~q>#i=]3v9baیHɆfSּZ.VfH.ǩ)Fx fv;0v;TH8pJL6`U t'6#9pH-q^ж#0 rI'?,N3֎`/S?6{g>%:U{ޔ w-m\y}j1t&n8=H'ώGbŻRwrFРwlF>f=8;R6y黐HZT c;~NƉJ`d\sҙ(Üۭ ]>nv;#Rkݜ('>KvBW,|[s;=oOFBfS32{D*wjB=s2~ DvPz҈3n.>e6z.9dx>J]]J8G~*q47`Kܤ͏VRIr0Tڭ)  4ٓ2z1!FFs? ͒MVw<~. gd#qӜzb>PqZm|:s^@{S)#ФNā$Pr2ӓ޳ZeI-~݂ׄ\g*˝x%F*T~ti4V==gqUE)*Wu=? RwD,$?{#'w901̨288:) ?8'O=N9ykTW0 ;$ # %+c!{rh|!bG;\gW!q =z>LwUf {4de@uL21XpqIjdp6F2cFY粧N3Ov \!Ā6ǖigT `1H8#d\U0JrG^.C[ mA;Rn8`z [ v% Fйmxҹs0} OLqݛQFyw #>9cJJ)^+)&1 r3-̈aܰ278B1úuVac> tW-^Ѡ;8UYF 3U'[Hkd)%| ?)TWrNx FF@?ҕıo/H8 zi1%/ mA+U)T#өNڛWĂIVQ 򭻆; z'KTd-M 揩bqU{D-`y{Bpz ;r۰F{QҜl˶N zO dxs?e葑93F$vI߯ұ2R/%Bc;O{տ3W'v pvsMHܼDBC+99֬[B&g<dII⢶5U͜{ ڞ" ryQs;3q+t˞?_Arn$l y㞧h /R1(v3QNA*+c\zgMNgpH$~"4u: 3 Ldgz]ͬ0ĸORGֽ̦7b<`1aه9 '_FEE+A/B F#q돡;%8 6H`A8chc2aN1ҽ-=SK8vrյ֡&۴4'_㎆LfVI&HO<}|.O"BS$ny U7,ʎ@UuTj_a\XX@ʂ$`w19?(Ww.r v(;xo%P{=MD##?e=3DdpKy(G9$ϧl_U{BQ!O`aO;9 zaTpF=Ly"w.csԨNbvĜ~zTEoS|64&e2ChKc/A^ջ^3Φ_r6t)  F `ӿ4B7kIB6GG1jVbx~fE7Cr8㎫i6G~ϱ3t hrv`z.G Y_S\NHU߀˃}<~5Y8;k6`\v z=kdݛfo} PaNQǯZGtGJQCu ~XH :HҴv"RAwH;1:KD2dSߖzQ(iynV,:;E4Sc֔Ek~x 99##-܍3}kzRG=(^Mk}bHRǞs;I%PGxb+\F乬ηIߎu CTq S}8"ぞ~\~z=9uy]reU,J6sV0=sӮE\ӱ H]fF/;;yá g7:Z8FxOšϰ6T8iv,7e2TϭX1z=}M+_b^_cH1~X!9 OqaIg=:uE,ŗ< ~u)5Qqd,7ʧʱ1ۥFoq* Dmsi4QckS/=3VF( $15Qa:d9*5b8(_#499 smBWQ66jq#n;=2KN#`Wm)h[[SLH18ڭ;)*J\LS\ѳYy \aszTێFpHǦsnsL؆YF1瞤fPp8FI]nrm #$ǧ 5% dN=+-NZQo;~"B.35Er[ 9 {sٷO&Y3JRW{c+3H=7r1\V 7b?¾OY~W$@ݏOUdWUأ{>T9۞x=+}|CfpA29tSiʥ }vIsYytRjdH`3׵j[: !,3wIBz̋>nrX 7(ⵝ~]Tskl0Iq܏3|8#6',%v6[|9fxԗsaxPKsY6a`(W>J衴  ;r:_;j浊4f zΈ[i~ln1`vB|ܴGva`ҽ7pb)k9U`!8UYkFx+ާ$䤻>̓M4}'EcvFQ%)"lyKc8r#Jk/.{^3ˋw\t|ϥ%L2G<+AOzicMxCu$]Hݻrf #c5WGV.{ Yݞ~o<W;c{WrK$T:)s[VRs>y%Iα&?"p0={d樓Or9yErag+yF'b~oI8ɮj]TpR#gzsZ/mm:)$m{nxwqqQ']N*ZSc?29OGY߉X 2G$[66$7rxSM2HQ(B#.qU2GH3~?*e/B,>ArG<{({dLW{/Wz(A|k[>V8:re9jZJIpֹ$c__u~?Kkq#IW? ۴sys853&;R;Aל,z18lҜ^EAsڸۀrHP7(?4=Iݖ`* (3_n`FpP4K޹pamsQ ,suE{Jس!Wq.3]r  u8q= -neQ_QZ \93 XBTmN8{ޒ`ƻ^~npN;(f=ϖ=A8cܨB79I3wvNpNp-9唂p:LR|s $qsשV[yFTJ9Unko3 oa`Ǔ>cNsoAI4& aS$}OLgv w~Nzp@BcD<1f4fILu s⫑xdt=&Ghr9CcRF0I 7aԟ³uz=u+h4:{d☮KtI;yC“pPV-dz}0;UW[GL{hGT*ٽEF% @bF>#{MxÜ쌎>O-65ݧ!Q2!PWo2uˍ*O 8aGrGޕ~^&S99`XwCp}k: i~ABHEu䜟ӥuCQIYy3EQ0`| ;q\ _06U<=GJYֆtx@AUj {>jO ]2ET,606%+7Xe߅q!GH|aGb mi4.|#.zHzq] SM_co 4pUр;CȬ$yw߂ eESuv%f~g\;]CT;vy<,>T…c=)}`NI rAtUd-ݷ1Zj,0Q@ $(v$|rIϩVkkm\5VǞ.XSd0 ?d63]Uv0y5Nj_#tڿc̄<-0' 1Yw{$īo,ā}Omrj |Jq>a3x `#\wۍ1lTެa#fȐ3 5R[ٲ&fzlrT`\N,|A /N=iUً29,A-&2V"P΀d&6~Wq)U^=ڻT|Opޕ3hpmzuǭ1bw0G2{lVLl7~𙊩B \dc>*d*~픱xrUgM;ؽ'ǖ2 ͈zH݂@#<`crE;__0G@` jk2RDYe}ʼne;29(rΫX.GC;¢^r+ɨ&0pl>q֍F_pņ,;AsT+Z}D+eY t_v$a~<rx!w)HcΕVe_v#Yq/ 6sǿnɃcjv|p2&s+Mu a m&Lc۞Dk)+m%o>y%.Tg`s;v>ݫr ?7YedОцFIeTX.7p<;wu\H zp3Q _r~25fv%qr8TJ' !2 g27E9K_Ajjh0GV2]?c+YyAY{TԀz:uL+-4Zv6R`PpX\qޡUX3t:0 aE4{Nnᤐ v[ ֡EF+yRK*[KzԧV!6VPUUrȥfk&!HH;JQHҩv7dKkv@Y/c<s\NJmHPڤڥȢ;gkݍ3nHyr.\rG\jBXm\u>SݼϕʩDq1+PV̤#. hLZ OC4̙ 3ylPRiL\n{LìR']b<3,`r+-FS%ʹ6lnN>ּPxz1L1Cha ]I7LGGC# qMmvUJΈZ3-)܄1 As PY3?%Aqk(H攢 qz{Q j t!z|ocM- 'uegAbA 9^z?cUt܉S#h©ƒ|r3W5Gl/Bb0pIZfLpp=}=+?#DzLmm$} s8Zp{-ې=dظ% sנt,ӑ.R;p(G<`r@zg=j- eZaGAǭK(~`IՋK 1ֵ- i'8p^O_j; O;{J t^e9|-S=RAu%|,p}p{ ՖmGA&nd`5yd1|&7;D^yR|HX7ReFI<֌e$ Fa$!9'woҢ%̱nOIka ~VUzs7։-c:"~r>CF p`۟C {/dk`[pCU@;OyؘK&39HOlLۏS^gS?8#?^'C _x)n8zA3Mw?bv)xbqz=0q9BDHdJp pvy=b%cT7i㑌nss֣wRX@<9w}ƈՏ`ǹ 8={Sޠ!#pzc)+sz gd3uЌ`{֫UF`u8<WxT7>q,@#=FIWA8)H#0H9sj_-*铴n@Oo{2yo/wG\?wއL M98 0NN ۻ/HCy'pLY¤FO=;sԭ6m 3Nѐui+w-|㮴}8+ =wI`Np1W`OOSa99a%|A/y>PS(q'\_Sx}CPm[pJpF;TW#9,ӛzGh$KǡI3̫Nױ$fb8r[# ^b+;Jdv;A vD9Nh<-QڳvH<7HrxG@+FT,Z.dt>S-i j)` 'FӁ=s۽CԨ5# `]c!^[ 1ɢB2T(ryOq%bb#hAb ` G,l5kefԓc"|VRʤ0㜜\ %?6SOƭ;<]vl0V}9$ R hE2{H6C*8m^"_PA2GLdz;%o.T3*p3-H(2>HH9>8l{+[i܄[yyWG@~u%\YЀ=%Mxw)idu#XA<;EW1m/ `Xdnb:篭d4\EBIʕ' 敔ĨmUtOAW#9f*T|0eN9" G9]ҟ9=ŕըv0\͎zRIb$$J1oŸ d\IFyTrVfid׽]E,K˻TBS9vClL9!O? ybw+c299dHWxqrApU@R['wcoU*A~$F2ljhbP|OcPF႕-wwUbjpu:1vqǧ|zvoc!>n}T{zT{r3\ubI.p)h-U!r:q]W l0Jyh1,Mlﶅ P"E(N39ֵXǵB䑸sWtD18>z_Oz!kc@_cTw)l:M+?;\=/? >[o"\#$gGSH`g(A[[oF`m` OLa I Cv߃LbYIGF!OU=?V$G$rSlIlr2;mI",Bq֊g#Ϸj-I %} &~H%bֽ !/Sq qPv@aY3Nqz֘:JFNWibHA ]6Oy\gF2Hr?4mBZԀO,:Ddl26R{gNE-O򪎀*&dsoooe#q|7m g֧h/9=o*g&=FyT&>+Ix9r0|F[g'?tjv8?>yA8%Jr䌐=.֢fQyZA} {ZG0=sOb=RGp~ax==ԯqr`נ=dEr9*9k3n&O᎝ X 9>kOc_" 9zғsIS1؝2zy Kc}jXl|z(rm;R۸rU OnDBnj ޵Uv͠2 %cV~p;{9hї# \sަ"#NlqY|^w6Tc獤@H\uqg̶E6듃Uٴ9' gq\h!ZNH0cЃzj^廬kQӜ'$`wS) 98?7VH=qǷ^9督&LormqqW`Nz?xCT ' '> { @82{1?:ՈN1c3ڜe 999EoC޹&##grW 23+*3EP/p:clRa-!9%sSy .?%mܮ*~RY@y?]6xQϨo`м 8'$>k/f$``g<ԷyiDcq@02s߷VS)f?+':a/E'؂=*Y PqwϷOvLTP;qRW92OlB $g#o\uP~L5-ț6yA둞G?ʨ;)GJOQb+kpwL{iY2 hg Q}acCRJ(q0۾^[C˯)%g'.N*mq7 ӜR[_c)Y&H>RawXdb~o1$DZ4 ORXq%@'9GOZCR0Na}:ѱNo[ A.uNJb |+ e[p,ہlAxv(zCJAO'qI#42G.v}ztd69AbAjA?Z!yU9nI89֠6t#p\|O9>*ضT$8*ЌB!˓2:uJQ$&7FFFDj$\qq>?`Zalgr"I/ r Ԥ[Ռ\p\Fwegc5t[Dk2INN8鷦}nт`#n iQ"E 8 {Ts #_#ڄi.gIaq}ʍ:5`IgpܻH?/QT&IXV(-BO^=W7Į8לҡɴtF,ySA de#9j3=JC?t AkUa%A,Pn 8ǠKS9~bG;W=#&'-׃;tPWm2ylr00@ϯJ?(H%@9 ةs{4˻cAϮj0%xs8-._};sr;sTGF{f>y=H:w]{F;IPN[9v[1%dbJ"}F+SjrIbQuRxd/@jucMʆe<2}>cjJ1ccd dNr;2;T2g1N8(QvJP>Z=ce89%+CЄycvYoщ8=^$x\㎿Jq"B E)'9oJ!qp=y+I= hF*!@Pc 9#r=h3+u nGN93S?vSFW+r/^U7I ?d}7ni){H9{zVq"^f\8g~7}}yE#jg׭j}0>^^-Zʂ@spKdcǥo=h>chf8&9GN zT(F#)劰?ESSP۷=G\• gi ===܊%oN {Uӯl (2 դjgv0 RN{46z<sL/CӒ20s{T q1-6sqZKd \Հv3+gZXh`3x6zs'#?g 㜑I[Fq/nm ?*iq;u1묤7v2i9 \GۧJ迻ohk'vO$wp$hszvU6 ?RW29lq9}?Am)SzV#f)w3+E#9zsnOLf$* @'v~P1\e`Fq}y8ky[tyYYe8l֮T88m]YsF>SnۇV9źE.ku3-7 Pv>={W7v$ ~]Hrg9t0N>Zg';F]q[ F#YO$Vs a8mpK}{Th7z޹Nrs7l$m#z\?[jY#c$W'y#!G1L{wa%D=#\g8WSnv2Xc=SW`by #oZmos=+=<ӓEK [=G^rpqzbHWzp9?皆~C`pW;RKCe ų<ǜ+vf-NQ{E{͎Fsr[#NִW!@{/$4ˌe 2QҲ&^9XeOl4Ј۱msxd! Ԝaמw£ NXEwKd}*B9?ZwE`dP DnյA ?rD(zPoHG}⃞m9.xF'Ԧ*Ne''96烟S5zrHiUeS)xci;5;48O${F'#@KcS[3> HhV>!%M}XWT=YMcFxU`uoKKw1ӡrF@Vx r;V< 8Uwq؎dxk C A oV&>?9:tɭcs7w{~|6T?yB=dj| ${4sbz5uqJ9cp23ĒF=7ʂ8`M~lH0ݘlg/=fsil7̅?/n:fn÷dNǖpzⴿarגL ̒0;?^0>vlKnaצBjy1-F! 6e8Xp䃜)52eћc2&p$pwYr߿9iugEc4dv_e9=εt&px󨎌F1kguԝ*|ɹ@<2Fᜱ H5w%ĥ {0˴ɀ)#'UYsUNN{T&A"jI0.^\XBo8bbî3FG>=dD*6o*98&+gwI\aeiбqk}+*E2BbC6A\JnF6(`~V$3zgD09m^y }kPN.ed-7dJHU)+!ʨ(:F{Ʉ!̐VVw*ҪW'YR6m]Ѩ=YtFS!y#LԠެu C"*6*6,/]~ucx|'wΒm[ ɍaأH8AԚ!LX(un~;ӌ#*B<ӯZ͛GbEGv27x݃޵E"bSjo'qS:)ØΡbX0\tV wm**ÑJWl)$l}`6 23ؠsA~S\0CB0<[O~ F8@vEjl]2*&Oˎؙ?V"Щ*p=iH낷ٖF(ϗ9nEhXl 1QJ㚶ξ-9Q8qiCf' iC c;֕S)u4U`;czcڢbK2@1ӯ9L e$?,\O鵆2޿jj>v 𩤽A]nǷ^kS$ݹ;A"q`qz숀ʿ1p8ۓ=.SMNwp˓):dF^{2Ƃ$q'vXF@?JY8(d֯й'=ktG̓aInqGgXB$ʜk.r s޶~L26esZ̕-1UX99 J)X[ameeW9G^y梊i\o(2u qKUi#N2v*xdd*?1e=HV}>B:=Zd`e\pkc9;Fy@ߊIsYܫ|g='p)۰sרa#ּά߰:3p=>0@}~,qLOZkcOnx}:R@I3g뎤Kg-޹N)яIzgYרƻ|Xޘ篥WqFpG3cH6H=qߔS0p9_ʗw!4A=G=FiлOO֎HG[i7/9U'22zz3E~H$81gǦ@ry,BI >G|+T+hWvxH!?5RFϷ`[3{9$99brqJ?} AsSJұ`Wby9韯Q%ČS}xV\xAvVoChqAq8oN0 \?6zzߘlơWʧzUy# 9xȦ堒)5:O)*=SpO<<udp {A;|*sVtJ<.sԚ˨tQDZJ nUcx}9YUuenS8ɬF3*"|_!c:׿JSCMݫu$av-_QMT7c>ٜꉾ@/`*C_GlLK*ddFp9=Hr6DU o4Ƭܗx42{#+c8(wƜG;e\"s=ӟݷϹDsR9Ym ~:H d5·`$[j34-@ P';YW6 c>1Қv&J#9T85m1He;=H8 Qg2_ԜR7՞[``鹎ҽ?* R2Ƙmi-sF 9JP8^CiuʹfB $TI۶  y9QآKqmja]YyHٱġSʓAp:ž5l6rUB{w+,NwK/}m+6O<qUc~Rs,"U(vh\V>F~C-NӗT'QY?Zm˺EPct=N:LCo P6BnfHV>XFў=، aCs=zcq 0emWqS]%,cb YrwǯZz e0}!mrI]劍İl}uQHz cme0Pz6B!  YUJoR$X*p3†9#EE~w8R\IXggvfG@H+޾1'3ӂr0pjTbyt#== F88* ^}j1nL}=Ӿ]Ea;ybOBN!ombx>lGP #mѽy+}ߔ֚; EFGo<~V+б9$y\E?tt$Ny0:g+I@9lVD>]*z残|v8nI? _v+q"LquRCϚOq+B$9lN3< 6$nkdGOj;p;| :p8TL!H:Fq69ui/^9 ;@ >Ԋxt I9'~8`` #-sޚ__$t TX;AOa-:sׯZIʐH\h]ns|vӭ^qL2HW]VjkG9lYH1žJԊ,pԤIaqn`{0cax#$m:3Gb]c>3VLک 0Fܞ֢:8'#w'*̆3@1  qYi[Xg@sMl\cmAOá?ҭ(^> GUʃϖ LS$׿O_먞8ys5eGQ=A В#+6wB psz:8'ZkijUݸ(=jp}g<ОrEe>qQJm wsI؛G#x`h o;IsphhW,p?=?$c؜pݙȪ7!_n9zP* s:С(y!j՚ qFqpסOimrwsxҾ 6a 潚.3/G#d85|@d#yWo%s9YVܐ19㊂dYH% g'=YAL6[pZƱX$8GO'k[߭lߠ0{S7t=88=:kVá8``Tr>S}@* 'p;(p~wFK Nr:q*qL?L~Qu9 GӸNxn8H{? eb;N=8$pr37\1?.w F30'pf yz[нcUv*2OvǧZw?t0\h#Tus=*ТF}|U-p=x (e3b7z8F cqA׬FzgGCߟ֣p[|NCgct3V[ϹL?ɚshL$ ~Ul'?_¥܈7lؐ?<~PEƷ(嘃ςqqőz.I@:5{>}=z9IGR%<#g*V}[>R; v89 YQy)'䐁O0qeǥ[ pnx4۹,HE WYq09>"ͼtqZX9#y|ՆӡܪN(n͊OB/nyA#F 0۹(9(7~SL>\>fnq^/h:+rn H a(َq?R-SpNWwڻ" F2.=N)gdj|ϟ䪞XPGv sq۟{Y=&P&3}inF%ہqWRn0@B +8b%v(8#y x `'?{r088t^(ܰ@1 yNgsU.ULmu #Lt leA%ܶsץiAo`  `{54j c ??);90o59k3m#?LcgD9g@#1'ySe#;_2=GVLveO!m9Vн $ަrXJ;H6pTӟִjax.g&S" XO {j.#_. rpq.&ɯKɹʯ#haЏz}k Bxu 69cx-<*+E (8Ui&783qZnQQ3Jkq*XuXļN:t9eG q A9$aF8ֱ9](-(e,0x^+DɅ'q 9{"ۨ!I `m8`ߍS)lwo|^!t~ήFP}^ܹh HϊLwsׂIVkk6ң#zt,]0 ~T%fOE6y?g  GTR~YŒ <g$sOR;Yw cc<ۙ_'䯭tV?0LFvtu.#DE`o1d9#_J*v$ypkuG9u8'X*3O9sD4<1]*r]< el00G,qJҒIVʉ%X2<Psw0 B79v3NeMrޚXѿv; _?7켈[| N3Oy:rǀA,>5nF4f=i|cON}O8]thB׌t=gȪ+.fd6 ҝp{flrJܳB$9=?' 8Q]=q%'~~})w$+dgg*]*kGf iaqnzf&VRrk8!w.[k蔕9|[ qs>l]vzr9 SWR8Sf)ZIriX/=r ':!uW=Ikc>_N9=rF!}}pG`^#$ z v5RO~{zOCEgVݒ:gO#ƪ}Sq=y5jibx_Vb?v;0=}분4FS;)v)##?Oz#<+Ӣ:KÒ3ЅsV m89 }EzTQѭ$hYvR{ &<$7ߝ5ň [Vm$G/wi1cݿXf~B9Q_)Qw=9cy=)pȬ%% 8?:1\Є`խKROrO,'^v580rRgKJR~FkD͛V`݃$*XZT@OP"iؾ^fheXOp3<8\Cu'ҝGvD fdd<ge>QrIFq>籩fP2>n 0U)~s( d\} -\aW' ??Žu# c9GӁSv^@ts]D- +^H3ƴ"Zbp2x~CUG0wP29ZRM\5Czt':krcim'wz{NN$v  023~i/Xw:{{ U`#*{8Z#A,O>ߥ}5)hTm1Ń1a=׽sWkw.H tr1Ei/Ъ|JTdc=6#Տp8_TJaI;Em1ӝڲb3cSen<n:\pC dx5Rq)Ӽ9̙{oךH#Cϧֹ:R\v/lu$lrYq_NxT㡚2&#?)9lg j2@9[hC-F;g}=j?tQ%CB@#08~GE&DsZ"<ܓ猟]Cq%@!3څks%ñ1̱,^4p'Vr$zI[ߙ%o"UC隉eJnI:d.:F'xvDC=s[pcՁ2:Zկw%΀\隗ܹ)\w'?^+5屓eVx>H @ik!’2OpI?78NNлZx l9QucϠ'o2J[ў\9ӊ68Fz[?~,8bY3$<κ`mqAgiT"kj~)c;'ڲ2qa F2.@^6Z,?WweKfeNOA<ah9@Fd^!Fx?NqOUwvnzuǥ74GIl@Ey8cLsO% g>Q\ZKe`F8{s-unB3p9MOFMo99O%{uvP O'=(5*8*1'T6Ha}$#I2(SA=zu2 v0^=AoR>g#9vӷO$wꛢ$tp=GЎKs|LLlcnђ*\xG;ۜvΔwU$<@ZvYHBКG+C^rpxY}} BG 32:TB9` 4H7 cn$#C2.GID/drUßN4N@f]A`9=Z>0e>^(}R׸4D:`g0n @!X秧94~N|z:(asqA׾kOhRC^%wiA1IdSyuا&E{pz}R>Q:dd.Zd>f >;w0XȻTO/1\+cfVrݺC?&^2WQ۹U4- ,*(\00kJF_ކQ"cNĒs҉UH^9] FCUns>}Txn0s2j5$Lי/fQ;8ʥFJ6Fif;j ?w8Jjo|\Ipc&F es#I<:—ҝMEBdbe唷>^03jp]0L Gg9;jT1mqoʞzsR瓑m_PUF?.rTgnqx1O Wh 'g-'wSԊw;I!  ܌O#*Eۅ1`^XA$yĒpnJշwa-r=qǮ1MZlZ_6Ia'm7-W^p sl c#+u,2vHpwCIjAܽ% UJ 2W=ӓH ".y9:VnFHR+bG# ZP`C <`*\u{mc$*rGR#Jzy2HVz0v[۩E^c`qҳoEhPѝRSʿ#$+@˕Yvcn:L2{V5oʚjdh&a"9 A<.sTBN֨+qGk.$Ħ17_kWOʝqQ5̬6D`n02@fyC ck8쭧6#felpʽrzu4]l?\ \C:lrXai=Ļ@"`N:dYZRX9n:+]B"T `k)F:sI"e+GK1@^3#.Nz4c<ԓ8a@<6^y  1׎߅i3كsԐx3֪ei~m&"&vGqӚsCۏIV=8?Q<{rpp_s8Sg<w?ýgd19*pZ< q52@;r1p8ޛ})ad8`߃*FG<]U$X8y<q=甪d*ӡ7 9ۨ 󒥳1۽rV[j2H${ pjD=>`ndH9±'+)bե{G5iG !Y}{!%fTETy_B srMK~T.{w| UO *8x*JrwLbkSǫEՌ۽y=G5m(e$'h `8<\WtBHSϛ(یLc,cDy}/C7h̉ې+dg;l``M+[r|Qr30'N9#ӞUѼxdSc&Ja 2˹Wh$}Ui321q U#`ݟ/9/̀sݱ>f`BV4~@횫]ǖv*H͘-&xAVVUu'ppUqzsBwL q)u>{ZDu瞝J\zW+!Nx'<zO6F3 1n )mq9mJ08r;=*'q2?igpprzob˫2ٸ‚`y=ﳁ<d{KIO[.N?J3c=y#کGW`IQ8ޟ7?uq׵+o48 dt#nFw'}3Lܞ28짮?JEx#'9#9i  <ޕQca"D-)'8dr:>U'bSnwyh =cj\gRJy7>wq-<犆( 8#٦9 8@bW=pz+I{ܿ r2|W{iq6GI 5o1lry{׬#Wlš*a}s۱#ҸJGE8̪$qѾZ+?1WQθ#Pp㌜={ր61R}8i+]5ŸPy‘dd=czp{z=1^8z"32_qU8L$4NG;I}z~zM4e  ^;5Qes93HD}zu֘!H#ݖ?+ {Խ,9I>kF(cښ/bLHr$T7|Ƿ{gHx?R2sӲ:M 'H??E;`rCӁҧ"Nq5"(PsO| QѰ#k?w$N1_p ?xt$=s2:Y.v6yTc?=hRW#{}z o>Ƣ݉Mս$qȬ6Yۣ#vkWoCϒTwYrr9ϥee4ۂby{猎Ù_r o@c?4o#v샌gi]GUn_';bk9 ۔u8ʶN;ZTZ?ԎcVDbW ˗W}F12_k?E_ݮ8A?.?jmkvZ21:'"]->n3֦vFuRlѮ +: ( ;;m+z-}A;Km+`Nμ>^p4] ݄WϩjL#?眂|`:V&vӊ(cc 8ONΊ'Q]׿nj{=:bX(9rNrrpwɌ*n.(g<@ cLgE/ymܑ~jVܰ*Qߛf"庍wI#=;9+ԋ>TdZ ,oqbE?x קNxHݭq9 '#}nsV; PI \UP,CgZsK$.4vN=ZxQ[=5نBCrWMqkq8@SF}ڪ ENdy3\9X$`8{WR๒L39aܴxaǡ2_I(ȺӤ%ϸfizeL?S޳6N8?BqI5_(Yث%LٰH;8RQ"Np8'x_'^򔯹$lfmβsִ s܀+bV&+BNQ0q\ڃ3Hl@w^I*qd6;{-vZN-2skV6=,s̑ ) w7oTՔŗqݖNp<㸭OQ.@ϲk9>LJwc< ӄn&x].DM|!w=2{6ܡU~\0'#jWWQNwh8`l8kGш,N 4FTl:o :6uog8fcs{VIwz\rw zp+jFVHZNPXH94?+&dn R 9  :^YB[!Q;MGDKQ"%w#CWikh\!=7rO6gZc@MpdIڪ;sn6uTN1v;2:uxX*N w s~{|eIpV(Ę@$`0=cyAb3yqNi/+!{h[hぽzǮzlf_F #nJvEg[dRd˴ۂOgҵz+s"l| vz{>2JfϧqKJG qRc52E'- UGqm>L?ZՆHVr2FpTM2~pc?" w'*7wҹ KGDޥҧܴqngƻNXf{zzh*+h^/7GAtĵ@ pq{ z֎#u }qˌpO>ԊFxnsǽOڲѹ81HqY*qzqׯkm"nBЌ d~g+gzF8'8rzlpp8 y\2)Cβ&Fv~a8R'hr\`ZPM+Rzme(;Uʌ]:UqŽHGJa4@yO'=|L{w2 {>9<:{0^qTgf 2yǭU*SVvUHEj u_|I,U{Ts>HrIV_vAL<[wmLs^+ij1.sN:?]d6 H?Zp8Ϣ'HcÔ#d^({#Ϝ822dwG K)ݘį9ۓ|ߕx>v\fX~}bx~elcyna; Hny('NVUya%Oi0Kuos}$_%J*y1T| [Z/5XncҾ{7g'e=߁槇%ZcJh8r37X7`ʰ(G:2\41rmuf|rG>8x\{SKũc* (!T$'1<1h|2ͰvRmAaٽw6T͸t:sf-B 8`v*;N єƔrDs˵i@HLg={g<}krߕ"/5Ry::ޠyArq6qԜy,eH#z;ōK)$Cz.'^8ypxx \3q)˜py_/2ݟz1VfmĖ `m?J >UGMvq@iK=:䱠3׎IO RTczuc~ePT \3uAVurC`|9NR[y7?)9'=/͌:dP  8kEAlt2[X*ݒ1Ivr##krv>` S? H cOEZ:bx `#^9>_`qCfnO ~L63uHf Y$W<ǵu6/^1!*e}sН8=)X$2H?^:\Y b}? @۶X0\'?z9)~ 3Px>܊gMP?8q+5Ovc:ܳ' H \2ӚȊEiW '珦*Ym'8zp;ƓnhK|FI'`Ӯqԟҝ}%2r?Ju4̀L9` c#<'#8'9G@3X":\Ŷ&mv`:}0kidllnyanhi>F>? \ޛ.ffΛ$'8j"~Fy֧&+nbX;B(={:VΌTot< ݸ S\w6T1+: *=89 T޷;qLg9Üpq>g~ye>RG˜sӟʌ6HjrqLqɪ&-p@v,lʎq>44'c98W7ԅCPI w㨩 ߜr <MCoE܅NBzᓾk*[wT{)b7&c1yϿ'kҧjzۡm{ioV Ja$FBcuv/5$EF8bCDWcB7,xW$]qҧBv1qp. n5{dt_Ve΢p"A;Q ̤2_UuN,&\a%$+f+pЙ qr s;RMw&ϱ,7T"l$p8$ V=-\l38+ǠCQz3g$1b:|Ȟ(̀&Ү,^8ZViF~`ś;@x) v+Mm,HDr%%r1⫝y& 6R?3Y k)f$ax3Yѣ;ʡ@ ta%A)ڏhobV|u r]#b}NpGS\Xc;KrO!ZҜȗ j%w75m|ĎUb\BkF6kpn P08>qLV iKGn8XO@[I<8 q{{TJ2(9 $ c<Ͼi].kcQpaܳar3j +9pX(=M^DVe!\3@sgZyK.pb!gkc'=M؅nua^NT0rpU76Y{uBhe`@N6#)'#Qaél#ڦFTV_sF;ݶ6|H` :)$fA, ^MOʹl;ԫe3+C)8ls[k&+WndeNv"ҡE9JUh²!VSv#RmK)H=cf$1k7uK<>LHxfu T$5j<';VQ.Tapث ܖG~IN:.Q9nj`ԌY}c+y .3:ҋƼ>Dj #f+*g5=o`UVH S~5-SFE69"VP Ý*6,-e`J22ϷwnryjqprOsU dۅSԜr{HbA䏘pK'-Aml$VURw"`OۯN\66`3gSS4$n M_#+J&r]^3=z-s4c;"%܋;cQțqy6 Tc99XNzӆ:M02|i@KcV.gnB=Խ^s$>!pPg*Rv. XL(q03Lwa&v*mB۴񫾗)-NtFܥ@ 6ZwVa_0>ERq\GD+Aރgk9O=|Yk#>;v/ap#e*\+1ǭm(/g~YS9bm8Buʰ^9Zь99q{Ƹ dڭ@a&@9':?Ɲ~ӯFF,0܌}%V\O\d;ml嗏dp!+ύ>mI^ɷx\ݜG2HֳlswqcqA[Pʝ&瞄t⦢k=Dm۴`sYfU:s9uc.\> bO4nAd)m ┿B3b+gpǐ{IˑU wp9VKo5FT8x\qߵtNU#z9a%)>_P1Q`#׋WTDd9:{g֫6Nz .xϷ=+M]F[n;n`*xsOsۏ|;w߯4XvѐGNj`1ԓnH8J}FǓn8;=<>jo}" `rGNݩH '֥%1F8^buoT')_@1 A1^{ӐQz/Px Glg s#Q ʅf>yn0\#yyvc,0A2Ž;a;~\z#$Q,Ya tz7!p=zQl{Ү;[=x0A.v-ǧZȾb9fǷ_Jy%'t=4 #nÄ=:.AI4cxRMd /%Qp7`޼ycMlm\?zH9wj;|*.:zW%5v9g]NZwШ,39~`#:X6_.K2i,{|KRJzV# [-U yO"XF̈N@_KBn)!o#e<Ͽz˰u\q߽aFk{<[&Y̮!p0@EX||^ޢZf!XΡ/0w0)+ 6gdEb": HS1B8 ;ǏQ7t/ŌeڙCE[,@Ͻl< ! qԞ*ҴQpTy㊎߈CpVewn;T 6y2s҇?+_vσr^S,Ǒ#sl&rsU+(=2xr~eRy#җ_#:K5; l9s\ȖԄp }W%b8R622!-nS^I2})1^9WP\l8jc t?Z;xT8$uƫKnP`99'Cjlm$v=V1 fDPH''^p|nO/<^M +4{ pqxpXSANXqZ16p2Nv#Zч88ڴW)|gq94U!Svw'h*/z}!lw>(m0BT<2xI5\ oSDgf$Gx99xЕ)V@1a+K0;mvOS[I~A=z#ORrq4@z=*NO$L D*rV$_o֗[ גۘrR03QpG' irnVbۺXrOr:I]BO[$82>&`7'o9yvAr}5%u*{6;z>^ Nio'D<\U\=:dJH2q1~hzY49\ 5ݗ{&qMĵ{'-r85L[vÎIEa>aQT8hgz?ƚ yI pNz7bű@gxnbI1ַS-nh_VX zIIjɭYE9|NjmAp 89B^3H]2Jgz$ۊ7B @4K;yIz硧z>ԺG sצFOCڳ89>\M8r1ru5mܟ ti9ir*!UpC.zRt<1ztyZB{`qhj@H>I׽/A8ە.z:UgwrHHaCZP$#+cSՓq 瑞>Rcŀ7u=ެ+zg'['dCD,H pF@4#sտ%-Ww)ANFȫe?&\瞽 _mJwsUJ60t Et(ݫuhLӆ Z;ֽ:1RWН3gP ;G@O\vw{-C>BPΩg\|>?quCc"c!?3+3:tUF\v~:zu!d`Г]T7Pyn61KsVA8ϝ9 :A\6+\_lB2I9ٌ?U̇y?=Vhɀǐ1֭ņ$ 6i$a@#n9&Рw _C#)61QrT v",s [UKv$0Ix$w c7WEmʱ:17dOL<KR;Hfମ^H',3sj.1hPr:Rr7c J'w8Ȣbr@I29g'-Ljzހ \TpvqLUv !wnZN=RYdOo8Rsio98Q#gVMՒķ򁎄{f6!A\ΙƿAV۸s3|Ft!X#'|*Uo̚yed AڼEO1{{RTf]!} IAǀFz`RKPW͝~b|\#ZЍT~'&FJ{bn!x[ =:5XbVq( sQՖ1nik 2@8e߃iI=rrObBõ{{T)3g~U޼rlfKCF$]``'׎ִ1#'GH&e˷h9XsЁѺvS%^iQAc`}+{V@'G$(8I#iGȭ(#`?J:4A ~cOB;w{yLؑRFqlӯZ,fe!^l q֪%;̥QEٙsKe0K0O\g+kg n$.Xë7Qp wQ3iB$d kn7~:SS'nC$֊q2Tt }+}NYj&nf\dwOsWz08Q!>`:v# iNXp0'G%\/,wpN}jVV4%}0_Ru|B&gsSRyՓ`cr=\)i&<H;sJQ'FX;#8t*Q|HrNI:6Cq2~o--ߊ.ppqG8JcnɐBs׊ tPy=3Bxđ"|= (=ryɭ4KxW*W*vGGRzDFQQՏLi*ܒ?T0%r7|<6}$e{y^ȑ%ÜߟTNc6q?}RJE{9:ѶU<1+/{Ws:њRU8ܐz\q_A/mF&_ X:JS^eR9}3_O+ч,]=]^a剣rRBGeu9Sf_Ȝ 8$c>Nenj, .+gv_ngďLUR6`r{gxʼ"*Yq8$vjn,85Ϋ=81enW8=00;_;'o?VHv;˜#PyQ?". ,W8 vUJ7ڧ{d!#lN23})n]ݕ~U88$>gUe߉POW/XKs/;11p3ո좄|U'`DlʙP|tFv0 )5JrnI  I\TՁ) /5Nv?(+@ vSۂ[w8s{abA9}qA("'~5 J] 0I|(dyA5 #n1韧Jfa64pPzaH`c?Z%BF;zֵu9MNhi2̬ cdܞzdc'W9nLP pn+XܮwK`bv CյoM[]B6_І-?h w08^^? +;CrkAЫ>IܽG^:tb}/8-J&"1on+8׸,{ܨkٌJPr9oΰ/!} V̑7^HpxO*MO<NnGֶ^R* e9$Il0.1ZQElz#2Eds|ϯ{䀕L7</5sB-)pr29`q׷5,0;'@v})դS5~|8~uE[:Bԁ-'jڳc)8Px󦷿}Ұɭ]'r@>dv h,8`X)Y5U؀sǥOAԏSҮJWfȔe q k6 ;bGhh۩3% WOHz=[ocZT T҈IuݞWd+#rpRA#R;d|]n:SۚI(XJ7+Dd9}[ P=A~YDcv88\gstj9ٚC2Syhc+ OR:bcs;dxw2d6XWSJɜwb'$׎*83dThFI'z#'.Xշs3AvU|Ivx~,'o6K`=qLŁg8SlN=LI2A'` ۻq>ԋySӃ:ǵSsםsDc NJ@^R~zpqyJ緼v G_NJc guYRW%{/a 'ߟƲHqsr}j+KݱTԁ($pj0Ƕ={V4sY;D"yqgHgcmOus0L/Ulxv{Wu3%$E5Ա1Ӱ'_j{i%F-AEV۝ST qd>}>K1VC~ 灐:c7kOv>kRԣ fJw\ E0A8,9?֮-*`2;~~zw˞#=in,qR?8F|<wǍ>B)3!*cp\`U(6Ta4.BA?u`V]EM Q.󟻁^rN|L&2m˲H瞹lL t8 hP;z3v%gn;pg҉U pzw ZR{5Ӻd;C7^vҺ5ʃPJ CEU%W!t8wPkfPx%F3q5~(I9Jpw/dzZ҃QPF6z=r:}+|,j'm.]Jc`7s~f^3׎]T|:+hP \ێ=ind`[`/cǭ}:lxܞd|`6ddv!8\@#^kIS5%V@228<T5=G_v7  W wɇʃ漚Sxn1bf^~8/Aڮ@J\I)X|_Bz5$pH{#֢k]3"k IeLU~GA6}z[ +o׃J,eav)\t G*AB֤2Kx =j[};1/_qc'dHqSw#NXI%w:#5D9?0`r‡,ܠ@q{2nGB=um-/W8 zUȾ\KpArjV\ eqr^zew#evy8'V9(z="3ve6OJ-3ܘ=rHӠwJ# #՜R@7mP:}'s;`CԎ+]۹ 56axmOJ4G. ^!s1US4bOqjЈ@BIÀkT- il[#Uc$!72r@xzj33H߻ Ǩ@(ʷR}`c$rGX 탁W@l|v>pq.(Wm=OҠtcʒFs]r{cJ+_1u,A^: ǯZ xO=ZɊʣA;>ڛ-͑rFݒGӜ{qdۜd/Lވ#B_"m9$t8 iYsqՉ'sc}Dh_m#}_~*[ y`?>Ig G[FA1pg:ΦXƿv;yÞx uǨV 0F> G$^A #91+ʋ೹rzd`xⲢd9FP b:[lmĦ7بwy8h-ޛ Z|D=68T`5).d 09#ʜG;WdrqG o*uRy|3Deb\Y7x8ݎGcڑo=:'+29 L+6pޝc+Pw}㸞#88בSk;UmYvbonXӑ94h3H,&I=qIl;Ipy`G#US]6# _zY*'$.p8`9<襈jMTSKb ' n8k&kaX۸1 WRK'r9!HU@ꞧV `%ͣ$ ۲{WmO+ю^xrFqۭDb1,  e9BcC7I3*}(6AOL>p1P} cc.-L,&Es jd$T7=0Úƹ$'nH c tw5O3_]_]L.QOJ:,49 zpyRbwfR*ynٙfݒ[~Ag;`ʧ oACN2>=p8zcMDH,"bO~ʇOa^(JؑI >泦6`pwqӞ1QfMdIr3T/prrdI/[18ɩ: 4fr7 :+r U#r (S݇/ihjڡQBq9䜜qZ@wQ ̨@Nsۦd;n,l*d ݈;dspNÏRA~暨ģ呸0Lp:TShvfS7r;|χͶv31BdW'* їbl1玵J3hڳs!2|!9j\B[d(rP;=I͔P[6<=q[;NYFa;pxɰt]nv;Y0$3*& R[sH[!8P皕&2%nK+鷧@O S̏0ʩ~rF85\c^6˴ !\ڪrbX,p8)b@9 T^{t)]\AOm&2wprFw(,Uw^Wv9/D$*r6]`^ғdpēʬ?WL>NO ;;<9ˬHE6T A?ps=pgR~Od_:P ,;c1ۻ{9$7퓕1` :avMkcvrFv$i4ZIA+?X!%d?xu*8P2\fP0\GE(W Kx\{{'9.asMmˌ_br~`ܪQ"Flˮr|w銅$j4?ϊ59uk,ryp *t֮9SKл)"$cT3d)ԎN$1hąųF{Y[pUʕ+4On%* 3ncIFPtf!g *Bۀf9FOտ0"Xs8lK`gz{5>4@zn:ܚtFD23~ = #P2[xleCoxÌeH' @*q9qʨgHefbo%aDȢGruL9o?U2=)@v81<:`U!hR7(a) T)V#pzvC^ h ʼ:S 2'YwpD*Ę/w:b9 Vg20z`=3P~z!mC&4(da {QCH0 T;#S_ @e0>Ras8| >VPJ#d;F}wjO{;G9ϧ>:X4n7j=_^vlFڤ`q{W=%FgW5|GM g5e_F{)sԒ=ԱN }׹oq:kBw$#i8EPp8ک~*-t~F2N #yA88'BUWi[cn0H/FΎend'o#ula׭n=) c y+{/ ZԫXԋkZ0= #'iaPfND}qުcjIy9Ϯ;Y|*ݞ?_[Rpf$wvQpu+*o2Rqo TJn'j@q܌ )~xŔv88`ԾHQ3r:uȋr#slԆYnӆ?/%c7%?I8#L܅{Z}L9# L䁚si9Ha"ANzzTN[?w;Q}By' p(Rc.GZoTU6 ā\E 'o^#uZ~ ic7~a֜jKq3F2$ϧT%qMZzsN>+9t'5.dw䓑UY YGȘޑX<1O7('8vVNN0Ր:c㎔/HI( 29vN3H'{6'rNGLtc!Q/vppOOͪG8$g$Qmz0@zlZ#K}i1s#8"$N0$c>ǎ6r2 ޖ[e/RFq?;HO R. c’3#r=x0s߷JzAPc!'c)1秩OQjD*݊ʃ0yZTnJOi#ǁܳ`3zΡA c яΚܐTdpZkR6`ݓی1UJp{`xIpN_pU¡w$m ^Gގ݁!'NcP4@ڭS21%ka2v RJx86mힵkC᜶I?1/y9FO'[B;`u{JX3 :2Z D@c<籮aAlpJ59{&H@9e?ֽMƺc.g u݀! ݂#Iퟭnޟ":b;](I^) qԑ䝵gD]Q1֚ɃSs:b)tI<(HNO^HsFd)b8 t#֚?Ik>^G)?֣M.3ԖHG|ˑjUQY˩;LeI#8V¯9 8lrqӏM'8\{T\1 AS 󕘃}=yVr 0O~}j.ŅsS?Ԣm$y㌑RLNKv#U;nNGzKW]숤Ps3sj`9x$?X'_fN0p05`!9SN *b3#A9$n#9 kt.N'3NsRype$)rct/zq^v~G}&egbZ1Q5K| %Fs͎90QIM|<76Z*÷8gMFI:`c~~^խwI7vg>fbsыr?UaEpϞ7?jJ\ɛF[ [iGR` xOV%݇ 6sҢڻÕePAS8 sP1Nz8d)5՚qmRYIVx\@ƅmܮ=)Ţy~gp 4l?yOO±f^aUlXU:Uo|V$RJ @#ޙ䃏^4I\ΒFJӯJL[dcnQzԵ4b B +ɬ߰I; 1֣w=ƪy*@C3?tԕ?)da$Aɧm=P6`tϿBTUIy=)ǯs;#vI#?1nzt2Uq1>ھحsPnAٔ* d1ܶ6!?=h%W*ݸOS9Q.W9wd{H1yӓp8;\]@ 20H`XwxH|YGnR }낵z%h+-6r8$7 顳>MsҥTXhY@ zNO= t<w1.pge[bIe~Ap =tW:E0Yf 2=jD*ˎG =ZƤ.K!FX^z1%yP h c9E~Ct 6M5 F3d1[S= 3s55:O>9iJ|J7`8{Z vkUnkSR7YARxzφ4Xnʦ  pz,[?YNJrKw7> ROLk:ku¶|ɏ=jXy:950usSd)Y!<d'~uU݂qS/bp{B|-)CZ#dWW9AێIgnF'&(xo3 w>n+7l7s: ӎ&vEܤ88*#,_s} AAŵBIj/1RNlxt[w+&FハP oqQ`sߑaVDߡ utZӷZOW+sU<6}L՘L+ϩlE$^H[ۅ9oz8`z]oQw+7p@q{U`vhꄖ]IiEOVB;԰5QH(pOk\L+쎮52 q7L4Er¾ ƫp 1NO[]Kc"e^NI;P&[dyn99 |ñ>4Q[),s{ԇ, ʜsʚr~$y~)1ÄQYj}F{=F9uY&\]?#2_=]mAXFRTnǃ:<>U9ҫMI֤T #g T y۞+_b,Cϩq?F *~UԮ̨ 1'` pNQ 9Zdyq@$G8#9~դ|RFͧzߩ3pn@oZXn.] Me $/pFrRh#t=~+'ŅK1S8,OE/0K1b:$rF>U| nJ$}6n#{m7|x;IYh<ķE;F#{$ &C#3'y/S۶=޶Oݹq! @=Fd =zpr:xvj:wNZ<6$ҳ&OS/P r$)WWo,r̫ěYH`s *W 왵 ` RrN9nOiiTrn=Rܝ`#pz!ʪ(\5V<1yt#)R8;>aFix99}kPwS[Ve#o8 Ns$Nxip)p.K7tޏf՝Ե8Fm>$8ӂr3ni)kWXov{JrGW3v=r*3TeԦOh!ދW֯{,NCq¸ nq)@ENBi1>[+G+PKL ,@soEI=A+m8ۏhX$zwRJw9$ mHnxr?9+"v㎤KpM*ZBNKs6svVΛ)9.0 cx&Nub[L`C81wRae9##8ڴ96tz#X:Rp3'bИn^`I':s^*ؑ_?uX}Rr㿡Ɂ#$`.x-GF6RM%ٻh,8R,UI;Y$5ӭn5t9FrBkdbɡ6d$nγCmro^3'dY`I88돔1>՝.pEP&C7yܧצ~O3Z)[{nqf1@CI s.!t6 ;㨯Acaek|u"c)]vR`d8Uu$~6 mܖ^2iŦc,;I-;B3"Slg8n pIo [$( 2 w]CE_TMo;+H7u\8OZվWwy^qMOa[D o_y}zRj'=?)T]Ʃ>@m'CY{qH)/3c9 hV@9[f6]EvW./d\2@QLde?*'4Կ7NIkdcZQ#Ƕ\`$dY'Q~.rry 'D8?CI/3˶ь'k$1r*AĜ7ï$cwN\Ϳ<1)R;#a)[ӌ#uxuUc&iz %mlapF*[IFj;me Ѿnv 4Z)$Hdpr"C$jP- r6yc? ꭞUeQ1rF[=AGJ9-Sde8)rnFٍwgi fQ̃;{Տ1o,l [=1GΊK!$ *5usrsW$1XKe`k񃃖!I,(hڤsz|S>Sn]ǎ;q[2 pFq{zF֥V"90J(pu`m< +B->;wJl|==JZ%ʥBI#qw'?/,nx;}ڹ#g'5qn mە8<7mׁYبk,i˴9 Ob}6EMm1\~W|| b xsqϧVU 7W+z.I8vFHt<}*$^p`v} {r;C98#隮ڨǐ >^Qڤ nIN \?Њ Q.ɏrN0sN3ԐA]g=z>fDs7 ; ;VC&I)KRK*1Hcޣ(aq9汱{"O.hv1=9Vnu.[c[֞eaul*CzKxE7&0 ܩÜqLXl.a`cs q^=22Iϱ<6rON2@"Vu=})8?`8ӓrz}i-)-C{)Go=2q5= ϯCR/lqS vA`L%F _cC 1d9*)@wtZynx*یs¥hY{pq9'~[_`$ur1cIzoˠ/BޙBH;МEMFӰ=3 I璽rص;@ ~SzdjY)cAfycZGOK;} D*F8HBkv;;r7`NFܞvjCgC s?roON>ǦpxTx\v+8vqS6ݑל?J= D/!yH#Xvr:}5nEF@=:{?/?8zvJVԉYy{7lUU9U:=.&3>KUrz ie`p1<ӽztqN;)R[si3(]iWV3j6Pe€ICF:wӎ͸$]{TNkz EwcsU6# pˌHS3գ;2ǝizp* hpǕ̊2e )>kB.l% ̥ }juR\tBsz-"(pFۜd d㑚f&]vxǑBRʭ)E򐴛8)Â:,jjTm1_OZs/16Q8}$@sSGo@O$Sg)W9s01~8KI!#>+余Wvm%PzeAXyo=GbAVDnC cVdҬl#Bc!rN0u⍌cаr})a_G~#1ҫHv\nSm Mq_},b5ч!Ie G\ݗ=1ɤ˷FH$+t%۞Gj(ˌqޘ՜bӵ3ER== J~|/d@x8=⩦BԗrTo/vyG͞+nӂA9#>"f`ay~c i1򩾿߽B`؂F;Ւ9|#q=w(\|:xgszt?Z&TU]yp֮ y9= <`uQ't&i <?E4#RG<&vI 1x7bH'NiF"퓔9Ӛ`t\2ɧ.@GzUb d8M"qlg[*#tȆCqԮI?Q%7HeȠ,@اӎ ;}>գ C!zpS.LX"3g{Tw̞1Hb>2@$ zqSm~2,Nzo^y$K*}#fc.=OWf<8FzXV8 g8NZ1۞N@$zSq_OL)$Cxc$Ix瓑c&A-wqoZ@ͻHpp;l`R9`mlUu-^s՛*X;A^{Tv9'&\'+Wos5~Nj 9$UDrZ{秮::R?Qx? agb8?J>)n=cܜ:sOL5ܳ&PV9}syf+ߴ`'^$~FZCgjAϯu9#%j&NH_nڏ[c\L` 0֦/x:mTǠR=HlVyÎy/Ldrqʺҳ9+HFC0THqmal+2IgtR/"ye@v10IU#<@ַfԌ#''צzgS$1z4kTW}vf';ֳd6՝4vsNrF9gڕdc2FIX7{&lVfml9?>a?Q\_SD(@.c鎀քV`FC7O原~"r,=0[8zd{{0Ns~QQvRzqb;PS OS'tۥgТ/!1I`IyIVPJK0nHHۑK8nc_΍{$u* g=KqX u/q9-p9'ʍ@ zzۻd}9|~U +3ŏM<i h 1Ob{tj^$u9㊔1A.}@ 6NqMvӎMa$RE NrUvof^=$n80 ý*tQ**ٗH<6X>0AǹTrhjmkr5nrr;gך,Ĵ_/~ {=Yʤ`0zҕ)M$:xIA+n'#pgs& ak"$뎀q`ưw[u7DDh7S3;ќ mCgGO|\ͮ*s[)~W 9jcbm;>85/B!+jPJG\jX[o*r@ԨsU]Xd &ӵW=w4Z{9@1.?H!!c}:QO K:p_N˥U4sri9qhY_ag#^GND*IuN*eG8?Yn)4Ǵ'8_Ӛ6@zf"˒xzrX⬆'b@jv &zAMPGR{~ϊmH7c$#>=dp:zޜ]лn9b1s]GdHn8O^{އz4k,\`v$t p.A\9W9Bn|diwr2;9ȍ dW?Ċ8;7H9;-I9u䢷zcXݖpF7 g HTF]qsQV-ZMϲ5`^0uq#'CqA?aYG*I 䟻ۮyrlyԴt' ::Vr@K,=zqJSM$Hv`fĽRG910u=;ͷci4YN g @#=sxtvPx'#j-`)137Gve_(*:2G=kʵ'Q*|>RO9duZU>w#ֺiH|8waM1)nn9^ߥ["aL :z zkhɨxURrԮnH1$F2(,O^֫G؜܆Pp)Qۊ~ۙO(LX }x %:w#5]В<Ӑ6q猌HǾ:W%H']IZIo3 1 Ĝ֒KvNsU5*m_rhhT 'Ұk_So-7*83ԓ[T0sG& Ji6FIJħq#99=zsS_3'[U{@Ӏy\g/}=U zcMWCGw dbyJx=EV+$Lr$88[pqH<Ҫ2f9,1A|'㯧UbFWVg'k( ==r)>KGS+Um8#U(8E;Vf2m= v.9ږU.N>QqպdK_2 Xǩ.;S(3xKs2xO#>(|{()N-6-CyEB *ItK7I㞣S/igoȩ\ r=ϧZqY.Kt֗Z?#w+E72NNORW@S y,Zh.dM%Wx-yQA|=-d-^V '=[֙q߳X&FQ H~֒HI9gzPޖ1m cMRdpY9X51c#R3vNjl7_Γ<ӯc>'3ԁ4+88<^cEgZy h÷\8\y<N~ؠgGh*|Iȭ`W#B{NۙNӌL\=b#p=@ u3j[o9C}#'zU)cl}zۂZ*gj@x8n4Y"=;sH2 `d֥42诗}W0%`Nsz'-tQvLcNpIXqʜ sЌJ٣]|pI!zt16[iDZr@bub}fMhgs+H%@xmrz?Zů{g%|ymdgswx<ȩlef@rÂ=Zu/g#nKa$+ENeyO_Im7lF?~OKyFӖŒ#9Vʜu*2i/]ۀcw9Wn>p-rRA}*2Jبݒ a+c=V Şt~G~b s[[Fl19rOk4&qiR\cϮ@kcF譆#r{z%A4H)퟼I#yhVG^7)$+q}m+M99O?Z/eiޤRpT׏\q0e5ˍqmǧ >V}PĤ'>nz=UO],=m`7W1sZЇZ *r3۵)SMɩݍ/!1bNA;V}HW(䎪vH0JJ-".C>ltE2H@pGPWwV8oW8oy:0~N3nLoAy#`d__*ܫ; ;qX-֥?6.s$(<Hǿ#j1.xq1JF!I[(Eq2:1ڣg`)8lO':U5a +oqR}k,N[ʌQשi2om#(3#q@PztMX#*0>d98=H摭*'qc_Js)jE1+B`$SVn#A''{ g'P&̓>ֳ9TcUAsUVSHLӧ$o[-2qϥgɦL0q؟^ Dѱ;6]Gm 4o.:`͓c޷*JK_r}g8 Td'W嗂|}+X/S9SHV·*  9޲e[䏘s޺hf0LTʖۃwc8o᭬\FX6!N[ir׫3f8eWpJ#>dz;.(/n2itC!|Ɏ#.x :(xΓ"KY~ g#8 p088> 8`Uy)}N1V厾}o 8o9$Si2\'!p!pqk2W $Ҝ4F%Al`H#zB]u rsێJ"dG4VT=v`}lҺ>awc9SCzfOs?I*#|bF~oX ~P]fJ1  #xYuWzc\wel cLX賩yj&=Bd,]5}#-ַVz|P-rI_:Ww$dUaT1<bQ8?*m853xjig[_Aj<Ŗol3lV!85ʶbvo;}xJbh&W~V"T*(îK \T<ZoI&[g le@E%ʎ>d=:/b7*H#$gh\DAG?6ɭ(,[lR|\bN fMˍ-vZ{`$sϦ*l> F>`b#EHʮ -Nv6% ۸ HaSt]OOƪw;;uAaa9~0h,DOC3=i(瀼:qUZ' zÌzdʎNrF?E0.6'#*9[-5{RC瓂3qJ0pI.yr8^s0ZnY;/z=~+Q%yѱiu&G#,I8=J.*FџVݎ;= [_Bs8U_;[ϵ5Ǟy, sҥi!/:x3$cfds:#-.^C !@\p zX V,7\܀3{qqn-Ϊ̝+' >R_b0N /m MxMy~eSwWz~f@8婣,?ҝ!2H6^$uǢi灟֣rOMcϭ'ׁqAIn 8993@<FzTHAڜqt=DW#<7:' 23~u`z~]jouO A#T3D<pFG%I}ݬz1r=1*ኜ`8u4ln#LU`sTжy=dX:29I@^ФB~?R);xےdd}ig&4(88$lv?{;z'eG[8zcT# I> ) 'RsR9qԃtsD^l7w ʒܐG!>OFsWͪBO;@=x V;U`spN+3ѯ"֬~V0(<!ᲬBP:ʚkB7嶩a  *20x@Ej4+^lp PFFrALbasZF6"# q\Y䪜W{,S{r\OOLK رy# }*;!1CP;HڪAQ~=ٳsDQfg%A%m'8MX"G 9 969v[p@ G|-tPy r~l$dtqޚT3yg;@x'%m Gzgkx.? }܌V$ `*TQRoVJӮXI<f~c|b9H9<*He|#h^tTh5` 0F2~%: nT kN@g*0PzBвcڸabZ막=S%$8M B|G,%NVHY3'AoƪKNOLf%i/5! ݇\gM8 3M6:Y>ncW8֓FBLm3t5I_^?^* w98vƊЙIlzSe^VbH z:? N6zZr)y8Ԑa +A8$WRp@>݉c$UyRUWgr:݀ Bd6=M6e$~xQ=]f vNXxj%rv'$8:wJ+C  ӑ3s:RNа/u&$@Cy4"z~ ;TAGWڀHޅ :r$_ƣi8{doO+q|t~ H9!I?4Hd9?OAOA {F TGawn=*B0Aefm n;ܡD9 ׷ҜlPA`y^zUJK=ʳcU :-2sϠן8g8y9.3w2 t8CqOGQ*e? u»~I$įčBec#ݜc#!8=;sqܞ{UJe$T1yREh.{RJ۱+&F8$iPt^ҷB|ɳnS)@-{]tҽB{$#d!23?RyceA\Q!L7{c5CJo1ӆVpiH9$M^}{ 9wDNKhossG?z}نI8AO.FR|u\7s*<ǯSJbeHn7qU 2}}ꢴKA|( s (/(w7GT\NW#7nېwF>]ʎlLĜ`U\qַcuw. ?;j9%4w +2idoxQn:?ީoa%ܩDa] ȕvzrO.1 JATq`Hq=,s[V1};~\tVrbpI9V8g~d8cTv3URIIX3 &!;'tnRZM*`yp͵qڼڛMSHLiL/*spzu'+trb$y Z듎$c#"AXӍUr9zԲ\x9֥YP7`[)OEB͌ge=ͻjW8^1I知J=@<Sv48%s=F X%#v`;jg&*Iq1$su`[ KEw+-Ӧ27Ax%)=nl;#_Gw{{NIA#s4fdXCLJw\gq7yקԚOS5+DU{~>H '͜A>$, }A4o?($pyл s z~:9o=ygG"pʈPub39UfvOz70-x7YWn߼ǿUrdg-9$t`w@Ԩ=09a@ S w9(CJ#p⒖,`==jǨ<O3g/pAw$=+5a֍ݬtbx10Ol{g^UܟZ9+NT30[kcc=_Zt٭8r8-y/8L@# nDpNH;*g=EEfUKrCmn-V*d1 kyHbHN:O䶇*rIؤeF?uBo=@e W>ݫ;+E`N_TpN''PՙaL9f[ 6ps5Vqx p1ߑVΔ() dP޺x-@AIJ)"k>X^[D#r=s% zp1}~c>gV='w<ӊŞ993ۭt&lhTjwS38"`մʾFNRՙًvvnT;Y8d=aQxLTL>y GU8'j2ir??JqlM$tE3ڦmÜvso^\+[[&;PGqϽ2mB蒑I)7szV|>MIɿ3<^ )\%Qx0yvs7x{]m$NO "LkWn_yRzWUr`.Ge֩]p;=+lހHZM0H ÜV)G9rW.H% qZ0 qO'#WՒMM 뜂8sڪ}r}sp86&;)Zj4[`.@$Ss@ztUI7[u':; X/,9scFrVOmRm`l=G֝|vm=Ҍ޺4o;rZۚ#r9c zeZet$x###?Dp2WqW$U;Ll! y'=S݆~Q0q;QV޶+3w?9vb?{iW)c @=H:u*"*EGˌ?8Lg ҴvRd\*w?^GZCylu8k9>foy?NBnv՘v# Z h7`A="3mtSLB}oW3Yͻ̐ ݏ{VÌ99Qm>ӏ$݈H|sGp:@鎸[mؤˀA1%Os9'2^B3tҴb,*?.ӌM,1ֹ7vӶ)w[Jݑ$.x9$p8wֽo۳qxԺɣQ\۷J׊ud Z5Mpv?^EUd rOI;T`瑂O :WA쫴)$vsڽZ84Սf,C@|=׏ug*Dǒxg A`:v⾢NzvI#,WY*91Q9n1kU_-?y3ZW̳O@/\3WNC6sh% OR.ܚNɳ\QVKW.+=*%, cd܃5΢4l{H䦖[JFA~ e}Ou5V=./,;23}*݌{6?;Xyrk۱mr1q=sZ&vs^vR:W09F>|"Fpܓ{~4{EO8I2}  I?Te;Qpn+&nl$ ݴWʌ`7 ?' ǖR0 uG|zx6ޠH=s`sҐp!Lq 8:lrJ)IE[i ~0ɞ#no>9]9Xք[h]q&=F21u< أ ѷg:ӲoU}H s#ެOM5_0bGPOj6O=Mn*ہs۵s.msIX>mKU8#~kI-#sx=}hEФ28'8^rwl}_ƴ[!e[HR@c`d'}+< ۍ޸;cJ[ҜЭ*`c8ڟ9p~5Q[)rfHs0:sVuOu08Tc*i-p; yT1sIJ$ⓠqLLges)bLҎ?-y*ry)1%r~A;_Ғg ;d'@HQm7qԓ>{ͩdǯ׮(d8%{}ƋSv q 8 ÑV$ Amr1q8Gݕ/e>VͭCį1[^٫îcoݞ-߾6x8: ێt,>8'ڵ-R&Xn8?T_[s9݂rI?GAWFq[5[%A@&ts jl gF h @HqqR&I<z*퓑;f4Fuo;u xĨ9^>秷Jز yO# q{昷7*r7(Spp@sN!rv4?)-[H ~4fAvg$suXF6r2x߷OFkMKl3`c RH3Zd"⼒+4|rĒpA|ۺy28Z3+|'nG+W~B0=8^ՈglD`xՃWV{ϩ;p+䁀u>ޣTL8zocPi%m Q-EþN\d=FHg͆ Ke;F]EڝD FͤxLj$3XU8#8k&p7y^@\zzqW#B4b2@ 8M8h ݎFF*_㮅2AcH8? ޝ=3UmİY]6N9dEVھ_{H:GuؿʀvNGCY|= t8`&c=?Wm Y<:P:qnVd^azvozbw3xH>HAeRrY rIdy2wik2䷐ϴ@lmJ5M|0JfFgZ3'A@2%2rzde:fL+88^-;{;k_Bdૡ ^J)w>Wwg'8k!}ocF;i[1Nєf9Z:~ΡϘ['N> n_ȵGGoG a+WAak}܁sR: 3gkRNƤaV8 ? G1AR\0Jap3:zS8s}-q8NP9@…sQ_ sP8j:% T nQy*1Аy<ԞMnTr\8Z6;3,}}ZwRx)cq=qd`x"ުĎs4:vn#n LFF)UfNn#< AQ"$7z<`uk:U$;A\JtE@: 0zxݔ0?t4Ǘ#C 7Q0g /rN{㡬IYjt;(̬P0I=-%p_35oQD8$#=AHQp6A{S ʌ98a@TwޫX[A88Zbmc q[jqqHDI;N1׃M˚f Xv˷ ^*Hvc j4KDf>l<_py)nb$ 6GNء-e<[%A1MC."ăsk)ju [s} 9WGXrx91Gk&[bJ,0NsY #qB yEFCg<#=϶Z׊7 2=q]MvЩsUHݝ;B$tӮ206ݒǵJED#FlN9۞Aoϊ͹o1`z`݀:Kqb;z*'Xo; (`GN} {(\۹-ruI&|Vf點.@^qPg?p6dbycuF9$ 0A09ZNoMCկ,Ii R㜅82h-Ԟy(evd_()0x'11:!Go\ӷ`׾~Pa ֦p;k.3s ?Nϥ%8>y=) =0{^sd8r2AϷR)g4c};~nr:cTҽ9<ب~ 1I֪O@EVQ{qs«0`zzc 3]r0ۜ^#9 OCǥjE 7L[ 23x8HjV219dv~{>Pp ;nA)^XnMv\O}1~C"3JNx{R'՘c vHzD`aGnx G=SO=+ֵ}k@z}y;Òo0Ac=;zWFRn2RyX9&2H% ;ɜEWCd\}+إM}Dž[wZ&d`8U# UW}JpKShp4T `p6q*j վfH;{$QZ[%t]269C$GRF{TקOS7gt@#2*#QG-pYv; ,>aES-7|.zӞj"\Rv'8:Z?ކTcXnh޼2_jmY@q' Osscd*1#*݈0%B?|w yhw#9"ABxqv#[t5$<%wp[ =Նڠ(;ym• 4XĆ=ϱ`9YHAzTlTvV@9#w#,&Rd+Yu;ANtTDϗhp ˴\qN hƞXEܪ nYA0*YC30睠^TW=/w:][:\KO}ԏ5s3\ KmQВTv&yk]](bW1'\:}+TH7q`7Ԯ; ?՛'6r0Sr`:=\L*g Ƿ_J\SE@Aogho>hP:c|g*j6搻i^O*ICy*2EϵK6wd# Tn_8ݳ9+ SCU;u!3!98=j[?)z\zT{" 0䜓\~sfvz~U뱢R%dY0P@x?JxdGE'i>隮!aq((ऺqǺ%qn]2sԚdʙ36 ~|O +h=UeY ;N~ўz ,7JFI 8 dI]4vv-%*lӜux}#}~%܈Īw6@rOn~8evs94Ka7Orzqszƣ*?un);d?.z| `B>b|&8`SKvcA[O&AqrPF'cMKrz dv?U#q?1xRqGCDS t8/J^F2pcvy=}Olg6rrrqlK4;cn{01ԁS,x3+ׯn z={|pq#ۥJZ5y8\qm,"E98<~e928ip2=9qY ^=<ڡ$=pH`۸5g C`{8:URwuNOCߎEhDc=jrѸ_|;Z˱G˻qd#hƁāgFVGu݈3r7#;R[dž09gN;✗Δ3MF6AS^GwszwF{- 1Ϸ5rŻu=SJ+D8Iv#Zh#sU2"fD> |V=+pYYFC;hrwe!;GAx=}BV eJvd_^NƑCs1L?S!U뜞O$M\f#NbH?H$d298Hӎ spyN8lp3ӧSvEhRa+ps~?] lby=v8駺3 hmqsNT$PI pyɯF:F)9Ag'7|;~^A`ǟnNA`c_Jo + q51b1O`pU:e'<3ʎx7O ʂv-8#\zt=ͥEŒ xߥ][q%H`cj nW~pSW߸מ5=va0EJu=:9"tY PO; Xtx}1֢18BFA@fdǂ^}3ޯq8=ڜ])jSFlyQGT2ml Oj[EXxwfێ#֥^p*oҫ>Ѻ(#zdmVJ$GGS SZ"@nFs8y{9Tr_o\qq/jswr". o  0$ZВ7K"Uhߗvfyr|н8i70+9J#88=OVwKu$xzQՖM$秿Ƞz=ֆ!7Hzz;xR^@v8]!}Dś<'T.Gːķ2NZk]+)#wY9<򤥭˥fO8_֧#8A뎞뚦&bmF5FCmoHϯYlZXcgN>}qڦd*N9u=8_󚵲ԋ.0>wHnPN8 zm!:`cXsJy7t;rFsݎ3aFƪzGISb=RBğ =x;5]E:vS}WȔg=u!/}}Tp(>l}8펾:R/,JI#qRxjK_/Qg9u$'^2xQq=jHW89NyJڿe]JpH3H㓑䙛ԥ$͸~eQi8rm y?7^?J߳,$w+lW d1RV I1-0vZ!9lڀqvoIYXȸv`.1y'oGˏqW ֝>PlvwM#N1(c Q)Aڝ(Fsm:Ҵ 23v8iw̼ yzi '# JZiضDʦ€0Kb#`F:W[;\W(\a F zfBͼqmϧzNOڝesD*@##UcnpGsAWtiE'p=ҲPjd_sLVc0@%8?N3MɱnB<1 歶|ܪN+5IjcKpYʂ#,:R+3rF}Ur&h#sbF2YF qԃYhgE܄'ON= [HA9i[[\ \ԅq=(\̹1~&0}8RA +9r ZvNcd'<y]h#8qOD܉\َx_9$;AT%,~RǑ==IMKsJwH,yc*C@S>Q_KlgcsG&WûEO33p#t>s9Ϋ6}'kYXy$dSV99%@ 9;[+8rFpON~NZ߮. m02p8܃H9#s5Ջnc2=Um `m۸qG/|7cJ5q qYw+i]Ӝ皉3pr#r0@*N8=#s><~x{ɷ՞*Q^#Kd>87u{֫LcSq}G\VOYi Ԍu4!Cʺz{dyREiݍ0Xc`}?OjG0` uFYmwiVـOO4+'<^0j '<^!Syl bvc\xq1 8nqVkFjx)+νE;r'? 8SWaJvq7w2ס8;@j132sUTn#-5rT J)dRp=|\_?vL0g#0lSn `X0Bw-鞕X;9Yg;T7s u<~P>u%P36A@ߍZ`9קNkhI&)}MNϗ8jY>cd#=*M4цi\JI2 :sH*`p<_f1'k*pMc>\-v{qڟrTF_ nj$VոʁSu>^} ;D]F1rIqRy I`I=Nq$Mݴmlw@q=r}8 wgd9ŏcmg$j褚jJӺ7# <.x6}E\>Z1b>^''~o!BX2@_`:֕ܠG$A?M٫V1ϵ$bgק֩E]dn29~6, /#>Ʃ#}Nz}*$唏+ӷp;ӊ Lq;wc<V}"5x;lrIVwFAX'ss 1 Nr@S߿\NC ߻(KOkSoaL-ҵLeF>S =j/z{YNy:( <0Fc觧~u;I9<)-7HA'CJp0an.ȲPX=*Oaj/|ǭ]Ö^v0w=1ӃUo 8to.>hxy}rGյs~P:r9nZMyO=O]=FGj3qAӞX~A}*1,9$mamcێvOMC'rx8.6glg?_ӊoU\^T\Nz-9q.rqoLިbX$Oҭo0pFs@c GP}M\Wo]& p#9>݅715ڕy$}Ӓ}@'>s} ItR~yAN: D/'=*$mq$RJS0 g98=TaqpAk$fm+sQ5\FGz"rdDZi*ܟg'f_-\8Q'3Њ̧#f8<(|v sc~lpGBzv?a;߇AzI3&2r z 244h5x ڣìt-h i rqա"ޛ 0ޥGb婑!cx`.B$W9ӊoĝ RA89'}ߞyv"bJ#Y>V&e^k-rv!gqOu`r3ٳYqt )-p8nqkȵ.V$ e ;V#e ݻ&B8^tw<7WksN"6*أ.#%vWtmu+RAq瞟{i{ls:6t \:FÒ 8>Nc)sesaKv{ܘgMbVBQ7(ۑ`s>\XP01iV w=MzwHi (!HpTιk)#:cOIl9n+Fu'3`+c(?(Q9nf 4p%ZCqIsyt9ԎdŽG,H.ޛrm)>8[opt }j8u9_"'d s0氧C`u#~BVȥn@ yLwD Ȳ`#b'n3''荩+It[bTFSK2w}J{kO6 0%ϕu\,brp2F:} rX;Tn۸GNAحiwQ[,˂7`1&й#Gv;d~Z~|o#,pT 8S[?eH8!X8%J{yP}Hy9;94(00O9`rO=©wF,U^H1+Y@8Xҏl;4),$'2(TAV}tBt7.93@ OPPwj} ӀO$OZzi (^A#zۻoA76q9tM*90فw$~GN8w%سL A 9cԿ`nv#nO~!wcbc}㚏 d/Bv0?{oƛnBt 8LFO@:0v=shR] =U:/c _PNIU~-ң(t}8v?F:cq#kԞ`FSL vq5 (#i#\qVbЃp yu8%N !pP GAδ<6r}?J<6l@H+צydO-ʭ%:ƨ'a)A#Voq4V¶gi7y᫆`TȀ 9=Tkl>/NNSV0Oo$K*+|Ye H86ۭz\-C/}U^cʂq⨛ I ]ǯ\Vw>h61s҄6I!@^0Tg9,ǵXxjsMD(#8Op3縪#Xǖ=@i!{ j<* By✝Ĵ^c.%p 0.xֳQI جSƤ,I2ǎ~\xҺd p2Wӟݴ#eq>ykFTHXs=*"l=ֈteg3G=sڴ{[5pLd TdZ1I\x^]OZbGP<>z{QRؐQ[.āR0 'oU=8⳦OD\q^[µՌ9mR+( pVL;Mw*Gw~{fV]1u2ZY 8dgU  J_Z?3*83X} gJ6;N&wH:١+># vߩWk2wSЯC-pY7oݳeGR=Ѭfxp=''p\2 .7g UsT" TN}8qQ[}b˪c2GjfS!vR99[9{1.YuVT>ef34xy[/K5v&6.tS{à9ڈHQm ld֗7ixT?Wn-Y2MST _j9@=p)i a$AA8ƓЙnV!$ܷ86q *FOAZ}YQj7Dl#=0@$wl&1e =x'H1<d>P8,9sڴ;<EU' 9G5-"F6u~lduSޒ-F@ox+"zuzV];hkꮿ('8'9#֫ZBI.ǂ~~s;[zGBdYmq5Y8u$.sMO{$\MHv#rI?Ҵ9 ^3\x teRj ]_!z'̤Zp,hLB{i'fՔAOQҦ]M7  -'|TJȗ&4j@.XvE9u '*}RD$9ኖ ׂَJXhHKJrA$Kd*GaWt 1h`Xq5S%WAr ;q߽I$|@>:Feԁ0P|Rc*O# 9Dv԰>ޠgx秧_\% 9ßg,2jQ5*y'}}T 玹%F.f#{{9mx^75lˣ71]GLnO@a$p nZ^YY.Ou4{9$ c<J A!pHGҹeAtƲ[nNId'spI+)i"D(9K q,GJ0<M[hyMPzrÆmaIt-677v`wp$w=ϭ&n0TIݎOMk- ?w-y80>P3iہ=iķILc[Lzx}{;/ON=jɂ1?Rs~t_G]'0G*y.8YBqqԒr Rr}bs4Jw/\>(Le`F0G8?ޯ09PgzT8r98qiO~12}iNZ/6ўU=z.*9*O=┴hnߗ8$1\dpNwORA9Ҷ[!vwR1ΡPŶes69gLeG$K+g `y? ,E#G,@'ϵ5MjfROrp-Ըq] tj^B8=|v>iA$ #iy$bސOcT͢`_b!WsP5cqRjd:u\V<(`pNsx d%[or?Rn~ޣU5FlF[܁Tש<$5&bFp\OV^$#]ĒppW֣F.G8?oJc#=Opw#)sԺ0?.1|@ [=r689WC)qk1n֭o p0fb I#}0=E#G+ ítRhwFڣ\p[0ϧ9|0vl 5V1fcgi䎽OHdt霜 kȾԤFO>m$tz f ~F3SQaA84Bu$֫~fGE$g<(B`rr98^1nx]>E&AHQя?Lz go<+4IU y$TלB}~ !_l3Xw:SYЕ0qsc*Ϗ^W ԲHrq.=$mb02vT0IQO'L^´oKy='џ#W5w+t~ls:6\3:ZG%-0e;k\8zmjgkhI;"N Vbp8 ~b^-ڮp=s \[x,|gi@}{#6!6:Hq㑟9gug9~e8@=9ߙrI+G><)& C 2[Ԯj)I7 w'qZBW{osmn#q^XnpsɨsF[ϥ:ine]Dӎ3r ?ZϞT)$5- 9bиdDZ+Ssv2F'㜞/h-LY+ݫ C7ȫCphP]QWv##689ltqZz炠q3'>Ƨ&Ӣ?6*N[?l8iC/,:`;b~s{0xU1|1tT뭍xgr0^ipr髮 (AtٚI^ݞ8*qe=O# merbbHQ v]T-ZRوo LdOEQ20Uwh`(x Tg'秵tFeFO؁-9l\s׶1XN V'zSn2pH OI'zcw6h9#C淬-%a搀d+܎5F S֍Ԝ{oc bl尛IS?*󫉔ͅ $xPڵB1O#l+zk3@냎yW[v O q vާPsצGTmt<\VvctIbTcHx7S)a{Kȁz 2H׊ίcT j߮Sy /$|g(`2~53տ.Ղu, 5T(s\PVͶch`#U#>.wn9d~lc>ޚE c~y{>m:uo"ɾ?c8=*u'o˷@b[%B͸#s>U' ۟J;##>b :>;i9f#9g<ִKqŤHcK`I9=B^;kdI %w<kKͅ$+M}݇u8#vA0s?~(dp8$uTdqVqQcB=iSmHcZ\3=Hzqڤ#'Gp#XTXz{ɀhl=&ep:_S=J@=ysN7nƺ趭6DS3VU0cO>}~D33fщ 0:պ]_"Y'bp)8 JD069]l{lsΊF|#'x"'8ĎSlf?OF$gԤ5soÑc9URk* 8f¦q^B+bLdrȧ 3Gc̒܃=i7sT^Apȹex=z֠Y7Rsg#=X@%P]eރ@IUWav+IpyTyRn cG6uv9i߉^#P"Gv#jBݵGQ۩*_܎:w9JM$zaA],+ȍFIqQI]]&B99rxUP !,3?EmJ7č'}H##8OX?3rwϷC)N8FqrqMz~5'}#H<`TpFwzzJnbƢYFw#P F:dv%gdHƼ-d>JϵI'=F=ϭcߡ4np0vc# OlqX%avӞM{DoR}zЍ;瞜Vhh\}~)Z;~b;U1Fe oo @Nzy<ոnO$~Zλpup|;œ7eO8+O8Zvě3T>zTj&cA 9b8?k"K9P@$8vg;nᤑF AU$A9$856gS\#ٴέrG|"2 }Ǧh擸YX\uOf8#T.2[mϧj?.'019+2Ӛ|r{?ud؝W?ҩ>iЬQ}*1=>Q?= ;z7m~1h48ǷQ3 )[r8l*3֤ѮPԦX2|$s+H(֚UJfeeÐFkpvn:ʢ6QJ&O9$@v5uЌjKEb%Q3dg8 Bz1O#K$ʙU T{t?ZKrzN; 8<:;ci5|6*AcҪg9_@sFiYFAqNvVgw-1iqV0Wp(!^<>m۴J[#tv+i!F:XwSapé9TLlNv>lnFFoBR:gFk&4!I8Fz~_αK'p(.>H0pϷ 1cOL~*_k:8 my3ڒUHp9fS<jQ+*s9v} Мn9y-$r:V[aԸ\}z~PKr!x$yڳ.ZW A*2=sꮊ/޿VW~8NJpe.$RT/nqGջ: >E+|<s~RCx\B>#̻w,@7 GOu&6ܪ0 8N3u|d38LW$ 0cct^kmTEFU@^kVȝN2$*L? !߳扎CہírwFIG $J.2BqX9^ڧ2g?1#q'N*ɅN`!IsАxu_rsK''-EgbdFil qojm68 S&ͭJW:t8:.+u UvZY3xT"l8$O{W>Y kC+uhǛ&|c t1i#`$|Qoo{AC P(9ڣc;䁑đ::c?_z)J(AnAf 1Aϩ1?,} Rc?J!2 I*dźfqv4~ϴ'q$qwzTq}0zTcn_;YNI#O=E& o󪂥dJS fpNv׮AyE $?CNEw; P6_a,cGmj%eg^uv0bM˂?׊ #9)3͎Xc=3ǿ^OKZq_S:>Ls̢{/9y~?jx9N=k9-}D+@8<҂q,~5%^pygڥ]Ip@88޼uj$~cp&+ 9@^j #^?Z2t8LtϨ늤rxF21e=xfNާߧ֞ŖI)9B1Ww Z>I,s C1#q# *u8lzn8ݞ>߼$'lgQ08I('}iQL~1sDGsАGLu+HGsoVcq>"WdQ[ gR~;Oͻ(ևCI.I~5 `sj~bvEO$ {ǿڭˆP峑ؐZCQQx?"  |Vڒ*?$Tj̀rnNҡeAaVBJ#İXuYlUc zؗ#ˌd 2\n1 =~h^DY<n7_+)A$2nm9d]8g]u>Y ۛ9)#rAP@B|Ue TJWS~CB(\uQ u9cv#ޮ| .֗KHoݲ|!q‚@=]ހ銭hOa70<}7.uF!M6 lr8E PFGNiw3p"[N[$(9;HFw(?C_&}_wJ]N{`qֳpˎ0:0ák[lu$1 A-8Yh&@̇;c%rFyz>C&o >l&F F?JWy[źOon)꼉 ecq_9P 0 ~5vOFs$q $ >oIY ,Ay~qZFFKzx*A 8ԩݵ•35_P6\Ji~qeW+JZ8Zտo3$go^+f=C$d+H #>̜'[\6`*We[>bd1zI?ԗtlE|7ڻ1a>1X0f۷lpzRYr9!\MY㔔+IQc=W7RО5@K(AvNC݈S*GW)ߠ9ط9b}Hbqˮ*::dܽ3旳*5<F818ץ_D`=Iʶ~Vsڵ]uvDAL:UĠ+ͭiww賂o2|rKz;P@$`G^ָ%ZXX(L|?J{b9eq*G$橇V{PvA@a,xq[yZXm^ܾm9@=zpi`ہSNX=S`qcGY\n8%IM d=2q9櫘XpʔޛQycA8=Ìr6^.:}ƩplI nsEYTTX98x#q\W8%NzcL+Bx8NfH;TKVJ*,6<'Qgܽ{HK*c\R*!1G`}GpyꤞG>M1r}{J>?V]d98?Z[-sS8D?_P:5Qݐ5$H:CMhwnNZ^(;HXTvH#>͡'$ ֣$vrs.ȽHG1@Vj7Dŝy8 mݔL>Q1IC*G v==8/zJW>Y͠w6 p15\ƣ;G\{)4ޅ!a-#s֡aAx آ'CyHU |.8S>#*T{;qֆrzqө`(E>a9{N=s׊ 3ӃzzE$ZPO?'b#T.F 8=:ҩ= Tp˃HSVcC{ }@6h)ssR80NI<ڲՌJ{>Wy'TU>& =AzlHru=N{Ho$E=H?޵Kkv8?:Hddz}wc&'Zv8ַo0]qx?u~Fԡ+۶UmnNIǹovp rn GráA]vubN[ozQsoCgx?4w8䟯QRB@tϯZ `NF0NzcMI܀x*&u#Z?Iyv+~N<Ң/Bt&Goy_n}xzUshE(.Ӄ9  t֓Zcrs';TW np2$4{{w$|Ҁ6#gۥS"te*;$1ӏsLĆ>*ذi8 u89ݏ 8x˕zjg%r2,͐p2H^{7؄QF2*v@J[/w)rq"0<zir;d>|) ~G((HO=A 22N@?tO =ۺcq #mQGz'8lm0:O.<#psg1U$pH$UO(x'#tVZ\zthr?>i`c#$ʓ ;)I=9"FAav4zΔeDc%@8 A{0+xzvF_W]H70>_zn8]igWq_rNGPG==qEYUzgGQtG9wb yRSFz)8mvַ%-SWFo ֧3}c9۷jɎFvbֿXN4GSl2HN8C3/Τr8{XY)~"7mONG۷ڽ(tJ1O{XWAQ(1YH@ҷ`mA}<r&wI#;0-9 e;6rOyκ*4T9ӌ#wjF\^:("y#ݳ'"72x'=)ӛhq(I9{^z5vc;GZ^R;nǐphߓr-'4G"\BǀT<ǧL؀==AINĎq~S|} 9݌4Pdlt^ ckeu7%|==* rV?ZVk k#f*#6rDj[0ڪO8V٤TquVH8'<w qUսV>q{P'{-lC5k98ǿ4A݌r:VSnܨSkVX1d0zG'9#qZ&a\w=:u$)\dڦKqFNl@ONG ~cO0F3rugIcJT mpF=Xm̊~r?>#i%h6^#E,l<r/VnF!ۗm*'5"Ƹ %0~%ۖrG#?Uy2;I+>]1FuwCךB)sJm%u >lt|{wU=p}>V}]%iX2#޽)"w''桶~5FNJ$7kqmn81ֱB nGR* 󎅀9&z|!GS5^XұnΈ_ȟO9T9s<ڵث\. 9ڸ##Yi'>^1q} rNF }@j3ķddֲܝi[lw1ѽJsϠR]#AERY}67c7)p9#VcL?yx^sb5pϯaJŨ .rG?j>\?Sɔ.B,wXDg#.9G~[4S@;:רU* yXgPW؝n2Fp[`9:~5oR2\`M9Jߡ2Or@OObx8ץ<8AѰz&܌swϖDW$uFx5VC#^dt&+Θ(߫7b3)Ǩ<~q]W$pu};XJ홗H2p8Nޙ*967b8'x+&Uqs9z1mlbt I*㓚l^B9P}^Ƨ٧Nm<,G'=۩Uwqxyؕ&Yl8rg)鹻tT)C2@`3tzg7~*-ևKmsi lĚWRBO3JNIS3eR=?) {VyN$Y?^2zqNzt^CxY 7ۭni1+y19#?p?i~NB`Q6IGeOu ۗ89u?j;;;#Zqr3<~rqީ!( !$Ynu{P 0NN}kC'{W eVWnt8 qjX;3h,F+ǡy5Ko1`A>v1ےNJ}r\@<Zo8_`#}U;4rp2C " iuWln/!8P@@Q`{*k(29ݸN=184zFU*31籫cOOtáRWef\8w\̢F% d9SSZ6BbJ-3g<Ӈ +aзimYF4cg?~V<<0ǥUN{TlڴDd{go¢m@s 3sR.Q׮u} Jۊ?Uu6FsJrњS˃ЩqNTZ7'{+xdcnA#YaH ܟ_„'U`O=c*USNL6OBG׎?NQwdq2y 3Zlw#=%fO`v9cji Jzdqҋ9n9W|F6ӠqcמnWCRO=u ϧJZ3YdqCvC(Y96d9ǯJIv.}n9a pN$Ty1Vm2bd 829wIs PܞW } ћ.܎:S$l{ s=;8ZeIDdg8\~'QUm.a0p2:z[ GyDQn dd nLZ:;A֩o`Y9><aS=<h)^3דZpnxSXvHܼ IHqӾGw9gJ+p3 N*ߜ=>ʦIjiwd@ =>>ꢮsq|:ʲ}dl;c\Tvв:܏nƥ$H=<k5Xޤ0cAK&yWh#9\uSS`$,|3{U'r2sn=?•%-GNt| AҮ.A 0K#UdS!pqT C~`ynZO[gHs_|cҳ@!# zJjUg3OCSIr7tۀ&D  wHGXԺDr ONjYxSԌ=?*#~*Vsfݻ?^ -8]] {AMHT]O O^OVl;s$`r ҽCy68?0a=eU{᳎N>=2O5)+ (*.ڇY8ZīJ< b޽H(tiĀƭHz wn9Krr~֪{؞Շ7pvpwwa? dnJ¬պ8yAH'yؚ`p8=21C518^ HBH 7{c\]b(,x3`^=`1N y̓;BKt7R#8@2[l Oj]i6@ѧF@ExUB0dAcj䩤Êߩ@r~xq=c/=xp}+´%T?Jz:'W_=Ь%Ҝn,NL⯭G |g$ci ܓO$12Ҋh*B@i:g=t{LI%r䓞/~yr`˂+F6r!.vc&;qSr0h3xɪr0^HE.T%6Hl#^*#!wJ9wmȧ60 FyI)A|1< T$t.K ??]Wj6I=qT"݀x$608RhVPJPp5tg|=Qw8%dJalg1jN^ bwgcp0I`W&/9jjN2Ecհr9;#pzzc[pO֭ ctFG=߼7nbzOsҬQ1[@&.fzub8 p9'_íQTnsm$"(hkDŽ,s84˹( Xq@ 4iеZ c$YXa 8=+_ʍX0e8AVsUԼpvA:eTv`pqk(Ff6߿>ߥ@p@''SS{XyJ˰8n#.я}wN3Q']~w)=v-EՈݷ t>kLd͐g,۱VmQ'wdtHV!zF:cYJFJvh殠(Nߛ$X'<~UA9׷J+I\˚g<9;ۯҦUt?==Z5(auo482 JqN:{OfB v8bcRǦ3hVql(@dg$ GҲ 3?)O\*U#8޴5 <~Qד{Ӈg䎘a۞ 9Ul= ^* `Xƿ)99n8V `H鰁*80inrx RFp! 9pFFwtu]"޹cui&O9ǀ6>t?JSL)?CշesI2_$?JIp(z`vk2S!?S#u2}sF$VJn֥ܠFݹ1Ob==rݎ~c8<Nr}pI'ЌN둎 㷨B7AJ_BRh~EF2=#݄|SζVIg͹Te8l +%T^#>qRUU2U$ңQ1Jc@L9p@{LqoC[<Ƿ -.W<{tlpW9$dzpحo}r)tROPI Ԟ#s?. $v=zI ]cX`y{8/ PSzT'UøءK䓒9V{K32UHH+pRa%;G%JF0$F69oԕ:&3I~bǕ9zjq l?Ÿ-Ȧ%.h*19.rp튺@``tqm{4Q<'_AZX(]F deS_7Fe*[Vb&@qӡ<M0,[s3?6yd#$o̾.;KUA+{S 0+{#wjiuyl x88?S֦mZBfŰ+*F{zSPL4FH$b 9Tqֳo LKd!\r=:PWPxffJdbx5<@K4y 'Sn(N8wzrL{Źsq tF/=}9ϽrG_qq%둲*C9&nǯڼf߃=>"3 " 9d<kZGD֫bP<]7>7MPQkX6+K `cgHOEJ)N]I$ʀ@;l0:>S {*dqדpL[:jaa]5 ۀ <ryrOOlS?.s}*W:a;ewW\erXFR1r7p>RH®8!OG@K03cZ89OAE0 i/f#?SOOs Y}:cҩFGB@V næv#=?+^D \rN9RqF^?(\sm>d;qZxG@F3l¤n+L;K6w I`֪GBT09@=8ݟep>>qtc#KoK I9VGEٞ ԟC[[9~я7V88$ѿdt3Ҹj9Pd N3U=O9Vvw5+;'1S2g?J{]QII ~Uؔq4RVE@韭Zqr8Y52/ ُs=:ZԀpzFG)a¯9<ʗRg w~w8Zbԑ'1 y<$`zv`t*A>}I膉xPJ >n8e T>pO=qj.ָ[!-qy{Grzu壿lB09G9dsUmF(ᛡ zx 3990:sRaN8?{O An@i=36MTS޲p#889^:tj Bv#p`']!PuP0A{r ;4N9=sZ,a\cӋmm M£`0>R9{gbvLz֍G+e ;pH1jD FI8=8L_!rjnNWS:w@Ҵ1f><m4g,Z]Jڈ%圓+ >OLk\MegG z՘xS0랛{d΢$re3t#oN1ʝϝ3.IAvuqJp1Ғ_1Xo\9'1&{p9Ǩߜ|TsEP=r8ϩ<j gF9BvRmQ{;}1*18f2Q?M>nյ֭#-%"ºBHҥN?`d~:ݖ20,^v瓹Fq~G܈M,i9\R;sV"þ~Jg D,zdcuuu#)N=:Ь]xivyhq}j6(m[{ztG9g^I8U-jԪp!/:cgJ9#+͜NF6cfcNG8aܒO>*Qɫ~l펖^D FIFyWUAלdT:n[JxP !q9QS[=B<-h8ס*$}kF1Ӵz.}qꁖD'L<s?g}rvat?M2⌽'uJ39=;k F>_AwM+6(u'qT$>X8r@ fzh^qsdדZLzcp3AS{;BCM2H ?ӾX~q/7yxcힿzNzzpJ_ǰB@ F1Ӡ'Aq}ض'} ?1A#LUmLd0$s?+m`!@ OYJW]db8۴2ӷsg<]>RHg9#?_h}XVӾRv`- jp̓Px''n*>XLTdT]Ȓ̞Yry֯fT9'<Ԩ)Z01{5A' 0O5؅!|#-zwUYc8 zDBDC9' n$d \?ZkؾcBzI)ZTC+-=8< |*#& Z~80F;ɹB``y 'lr0v2z:*w35)uڜW^Vhl$WSzqxQH9;gee#p~T;h()܀Wᶏ{*#9c܎6'KSu?֡3' ~\\j%t5`ɏ|_n Q>66r <OOZd~h3`$J{"1IU'Gh!m8\3I7{MP16 7Hϧ^kuYe4&I8'l$">p>ӭ na r˒``aӦkͭ7)7sӡJѻFՏTd0_|L x*tvblC20;NykHm SEtSjrT՘77<=.{HEb[ݎ3:Oaʤ޶6ODxy,x}vsh =r=4ȱ.88AlM8` qns!݌BGQǭ_Lcx}{w..[*{?^JFtpN:׌\^VTޏ^FtT~Z/4jnv=OOӊ(U+Un`>\Tx2 s#$ÃvĤ $'1ڳ9Bw֦bַJGw=+=QDO.z:,AFq$JrwVꣿ8OƴA]Ȭ6l] {2眵\`@f SJ-hx ;rsl=jGa&s q؏¶nW+xz@@Nn83Dk0{(o c#ydn9uǞ;SFԈ2O8$vڡX.sum]ADPvzr7qԕUR6g#ޥ|1>PW߅;i/웨wg9$cҧRAA*{Z~8>8tlAzګVд_prx{)Ae3?Q?Z[mJR2s0GCPunLzONzSZ3Es ߭&%csj쭋"GWXJB 2}=jt.e{cL=8GczT2pzTws9 vZ;l}+lWǩ=OeBɗ# N,O!Rsd{P$5#HǷԩ ?SɌ ,3i<8R@,0*`p9R>8+ 6#Sw>Ry@{B=3v$;@}sY38A>[Bs^,u*'qiK$ E^PA#v~Q^Q ێԜ|P A##+J7.HzclVv[&Cg}0*Zs38KBSϻwfx`t?e2)?19'烑JD$[_)< Xz!dO,'i< y-Žrԣp?{N ,Hb2r{q)>FZy)c'۸ӦOֵ; yx`bf+z6pY`0G8DDopA<`lrOQvs\Gp xVc gU|{T(?ŝap9͢}NECdxÐպ~Gs[q9lb'6R2bL!BہԮO㏥[EdE5FYU\8#$mQN)r6 uzUtKBҴkT;l8Wr..'QY}{GS})8{]Ԛ07z8rEv@SOb8ew28\ *`d=ZoayJ"®q\Ëf17#*H'=O5Mevu0l '?fˡpW@`8 Ytv7ndDۑz?ipcqMeXyq3\:r'I2?^J'Ef;PݫzTA2A8 d `,շmC$|!68^W RN#=+۠ͼ 9ccڢ1=RKvfqUL(''LwU 97*0 q|-qWcs:=:ٛd$ \OrNqHA8 8#Vِ+S I^KFxFɭ2^cl q9e3/,1~ lax8`zab@cZBC7qgAe<>@L~8y+coNs{#_q I%5ٮIoBW0y8uZ9ۍ1_\W8͡I'hF:vu鄚1S~ N0;N?_P)bX0%@?8\cWKع.l<8׎vm&E' ö0M>n[3 ٷFyQ0F@t>=UhN,dQ*1Vm$.3^GSҌE̚bYv@}N>QC \|F>ռ#4NO*qs;V%fROnP/#[sDVrwzo>N0q+AvbNaރ?_\V3wbә>Lб<qR~^܂01gJwH{ 8Sà==kF&Ḫ7t 9^MD~5pW{TvAp$=>308*S`ROS ;# N{֥>c:3Tǿ fĎ;zRm=8v ql`GR"cAzx@rOZ: =}=19ǭď9<]qϵ0 c7c뚞0#`-;FOu*z:r ?Oi1ԓ4Ԅ~7Ps; H^;P^D;U$)CUxfyQ#; ͆$SPáY0H}kͯP'̎/ˁ;` qϧaS˯\ۏ4 q2<ºRڴ cnX7d,8P8<1·HYEٜl#;zGb':UV#F2HP?ϵU6Y2@=qy룉w(o1SƨXǒqgTI&;Or?( ?Îe8PsrG9єuhT;ך͞Bj8_$s>n+_?(lcTL$c 2?`~΅E]bzZՎ/m+}R+/g q2q1멖kQ|<r=? y'9\fh([#~{r}Iv6x\*z cl=z@TC>;Hj$sҎ~m2vcEg-61fGgL`;U'ԇpOGQ+8rhn hSbAU^M93zTjB)'d0\w#>Ccz#q '{peeÂ?+PǢ#\~UtD8 })ˑ0:>&{ =)qUNF;N PVRX%dp3Y-{:6V_=}늬;2Te;UKtA!]v*kAJ͞1i-+HHg}~vlY'gk&ߺX=i4c'%ߙv;aGa:dVT/ ~݇ގ%I{Kz}NA͌ך2񓜕qQ\[#-_ y㜏\z=kU9? cC=~lO Ρs219==u[QN_3 fy  u{~u$0 |I< `*o[rF:A:,?r]܌iYwL𧓟R6Ծtj/k?נnMÜq_֦Lצ>-KԀ~ns3g>}qǧ<*S9mķS׮F{~A߶=&h =3$$ 0FG$\zTrfЉWw<`pzz_1G]ǩzΩ+#['c'Hʿ)߃taQjG,7=N+8 =?w=EEn[QB0a\c'Ss 3m䀻v$o1Rǝ?q.Nwsc#cDdsJfl}z%Mh#HvA*IN19zh=]ȂsϿ'{qNs8=Z/#Փ!o{+enC?#[;F庘Q xj3u$uJ˙I"1YOoV=۸=ER&@YO˞OrB=^X8~uBF\z9}@Y`qϵLֿ!3s'sLoZ.=B\ : uUZs;S9NȥFp3OϥX 199>pQ Oc8^gK N~ \UNA-ͷ99 #ԏsPrN8 ݆ǦcF 9c'i,;G85 u=z)]`~Y=9zkWC,<\`inf%Q>|БS)m#wrҏq#<JF!? 9ފ-,R9q9U9OA<;h(iss뚹%1s'r:fc4"j ͵Inޞ=^1ГӶ?Z5Q4A,?) 3ӡ`ԯ.W *vu/9ɽTr!2:0=*Q*p ztұq=6ѝrNpvpzt@lz)9 jZb }I 5l$qҮߑi6I uHF`wx Ԏ{okl)pN#`CFR%)axtjmI"bČ$g9pkǝ-FrT:|R;:{Խ?#:ă*r2 צb#E2N[nA=2sqZ(#Q w8vS_mBWbP6n0{/z2Frw3Jw`gox`|:A~ajfֲ&W=1ZC鎿_ƺ)+t2n$Ӷ 0'=yǠMn2@9MXǶG'_ҋv z~ ݇\76D`67^A'+h"DžP ܜ TY@98H)ˀFy=rz:Cbz9'?C1ꨶN-'?ןЏQYq =N4)- Xc sZQ ]}N%cg9xPG^#4qSI;In@c=GzVc m?zѤK''#\$< O=Xs֠)g89Ka@dssUS3PmB?;玕~8od$؍⏰^'?l˂1 F?.)L@ uP3JcI}oBG\:q$AsL % Z#5‡<089Tn鏭l4,p9==ƅt<௧6 $wd5aU*s.7p)X4 p7OkA` } =sȉJƊӃmc${Zd;>^8=*}r13M .7H-1TWoT}qcliw&ELN1ʜЦ ZF^Ď0wzҞJt}MK_u2B \ӽ=D F $p2qrwc!6#l<*F5,eV`+yx4{[1_OBN? pI=j6 9;3ֲ~X"XI*q}LlL; _%ՍX;#%>Q<~lvLaJck:։l]-b,3/c`#޵-HvxRQ7+$SzX=`8( .sz1$::<;f5q*4B3$޽Jǚ̆>YWA$`^=y/]P18| B80FӎJm.B6k3OVۃh< *7!fea88$tߐȤu=~cMn T9QM$m.. ܥL~PTzt۱67+$V# +nJd'}E5VO*Li2qʖ^'j3gT6=:rnAnFё󟨨Fẃ9:kh qs3[=IWq ?^aN;֝BQ sۊҏ/ v9N+)y~2xҭ@KolJNMYcnIy8<~#e$}KVQdbU^{߯|b󷜀1N2z?uVj&ո2 xr"TwsIGS;jgQؓG8*Bl ?sUa&i&O^\vy"m$aAR@$u}hZ}J xA9'>brO>^9t*E"mFgo#'XX>Xr2@Q-ZE+%$1㑎WD@ǜݓ==i_c:!6>hMʃ;y&2K@b3׎=~1;O Os-Qf8޹ (iT;0pBx? KϑF2sx⮥'3k?7RP@ ?8qhʤFN8fޜԉ"wyv/SdG((`qm6lzӕYaG]{h&g6$( nQq9'JRe7(J3ps֪zCbD-H6cs֖(HY\` :#JРo]1Ǧ+&(8P:SIL3:uOzWBv3bHxtT6@c^{;uQ@ZQ@[RcQN llA08wPϠ' Uߧd  灜c[gf s8& 99q'}ܕK~ʎ22:&%zsUQC$9s:~瑰ӯRRўS>t|qWo,9TrKp0?UN2A>G8,1qE_ Uq;Qpx gڷlzdw4^}:s낽Ж\a鎝W=r1PcL 21u27gI{ $vMdXI'''_j.I*8={zyXcNsu9Ϩp8=EYO˷þGP_VDy$q뚫kn4۱'Uy:M"T/B}T TңAo?Q)549sӏJ#uubb0Xd|ۃ}r*N2q8=1MqLyrAwbqҡFxWX9ߍu*z~ y P 3ǿZmPoOnJ[CudR5)-s_A`P x8#ڜ|l"d$^i!1?H*pB^K3u ۑЧfKLAwrH1W?-4Iw#n*U$DZƊIM!{r_ +᳷U ߅ @P1#)3X"Iq}aOPs*FObyTj%Ժ-؟dI?*$@$feN[[ XhH= #{bXoP'?.92;#dge5+vn~m+UGN\upmjge,JjlI$!9nUr0:_ָjQpgT*) |ݻ֚|pۥamѤ9:֬s+T+ dճEw\c'rrsVܻ`mO-A1:(?0w뎔[zl|rX/՜';C0nsIRz\8#EVltJ"R؁9nj`(Ϡ=*ﯦv=sGPLO< u8p<ӗAu2Z] *O6?4y=1#/˳V''O~ÎIi1"y=A?KFs!PヒCc 4fk} #2͎y=3?N;*;;#מ(='pi_Ql~ug 9Q'erY$2}p_KcG=9Zb:G'ӧAs?CFiR8dժɗ8^9 zqVz!#` ֵCRrU ?Q=@ێ}zGG-M٧ip r01&2 Kg#t-2p0]Uy=TAx2̒c.O\mǦ1qHӸ =3By[Y31۽J\Ldb̖Rixu9I 6d:_Zmh\#mMm]ye#jmog:~B+{ یN4bHN n:÷*Ŵ ϜVEYp\m ZE%c rn]w9786q,x95e# Q bN[' 6V&`'>2}3Q-j9+OBP Rqکrͅ^*'[ܫm`XyȘm'ϵkJ I6+J+]]8  #=2ZV !+ygN;l$# }: x9_  r5ܴ_#f5*7yzTu^9ǠR9h$qF:fn-d8 /ZNZXT[C> tR;=~dquǿnm'08==})d< OoJ$׻&ڙ+*>mp'Ұ ےx#.Hu{뤑^80ɐFrqZTa@daxx^=gmW";BXөQH9 uz֩=ɾ:гeTsPd߽>;y*H, #8d[V5De(ǐ8e9zdc=iF[j'n1-2v:-Q_so;Ҭ W8-a~O_C̦b$?H緧95YzlqۧZEdk[ƒHpUF 995E 뒾(J0Ͳ*\lBDlśwbJodŷi,q{i&Âvs*y%D`ld%x)V g# wM5-'w.F19cz _ƭI܉1Z1 {qW$L,@ H9枷a)ŗzu׊F}s9*O=j5Гa P37ZKq_j'tMIib`8VGRxx8? 64ZQ;dU{K#D*;gp:1Q~o+NF\$;߅D+j]9P݈\dsqֳvn`yoM*ױ/ުW/ƚL`'><O%`#lmR։4$aeBOZ(Gzp8mXx)灞zV׺Nۙ47'iN=&Tsӗ#ͭK",z1OJz rFA=O{VR_שte&F3ڬm{-t-"Z:t3l aH@zcQ4S*,VAT8멚iU9vu9hQp8gHdGq׬mrZr8 ?)4.NMnAW<SV@%v^ztQ8;XMC$ӎ}.f;G9i"]6˲Ơa =X97w01'T„zPI$ӯQ}.=F1ߑ}qҢ:K-u/ʸPzm(n- 7vֆxFyn'?aA?1*8?ǩ<,L \كorv=%g*&lT NA!)88Q՚^ v9qJurryn]ư.n&nlҵ 8UW^韯f\ܲ3{U+$#b-r*^mo$v~]}я_ӊQmoJZntY`r;_8F}(׷okvEAs#AғωGs9=xF8 _2{\t=rn;nOa[rey=O@8Y,ːoo~zf\;gNONj_0#yznm->3e쑌 vN oz__JANzZ$wڦ擞'q8xYr/v>#ޮ[s-_;<9G +{u:Ӳ&I~a=*ɜviM=7=ϛQz Ilc䌟W%ĔctbU3qHeDx<1:zw>sd @Fft\=IzOrPmB$#JbgoH HoJJԵ.$+pc5NRT?!x#=BGUͲ(sd~`Nwcv@ˁӞEV%yPx_Td-EAPp*GF:Ք  @dqVLCEfy9;gt$q!c0z0+G<zv}5Eąr9gU]%mvzrW?3k\9<+>IԒCVo`,O<~pintHow:{8ÎSl |2o_^cEV1FGO^zX)[#v9s8Fy` @~q|z@9ӧךq{v:!Nf81s=\4y8X<Ǡp>k Vl 6e la&YTU=z=iY70=r5zZ NH`ݏn62[$8= ;I#u%bÞn{U-c =,p3>'dTd"Zp=ط'p{RRŠu$QQ2<) 3#=Hoo+DSrG;@p=*B.8ۃض&1%:^_f/-dJǀWOc3:r9yǧiW=JT};1{:I~W w#=#>:gt$9*ټ\Cm<S]U\dV$sn: nv׾=itڹq3ۊ@#=՘ 6}N1Tއ'cIiiTvx=F}qғDGc9}Tٸ88:\uE';lzsU5Ehc5yzO~5,pGU,Qg?w{c*7lH׃}{ԉCESvC,#M1Z郟ą=>E@N >GҔB\qZؗ!<G| gx7Aw^G#Ӛދdar cz6}Z+s'G%qqֶyɳ~3wZg<`c>tB9'Y]YPqgLY7'vPw?5_ۮww9V !>ZM=p$$sC]cIK! yw=?ɡ,x|I-+r*ۄ #GdnyU:nsxKR)Nq_ֲܿNXxxJ7ߵ͢eOeP`냻o r[s};Ҕ}Iݷcv+͊S[rIOC;=7}k&K0Qpr8^D36$g8,z;Z;jRx_JwVʎ##qϡ慡I&@+ +nr ci{;IN*قу>xl׌Y˖Єld:t?7l(:uϧ;34~[ ACܪ1ߓ:8c n1y롷.,XVbǨY@5W۲6*<" 7L# z2*~uY6>mIXXϘܹUn1+TT} ?]lu]qհČm1iʐmXery*wèժ1kbYۅ%Jd!s,$C $ڗq*(l~m'S])\KTm>֚֊S׊˶\̅-l䎌9?eG#!X gq|R}6y#OmF7iPzݪ 88ك9| d;qO<{Vݵ$6W˔Ս_g<5u6F= ݯ$fٜCW<0dIHO|nc9:+_ĻS>brBgH"b@ o\71-w 7:SY?8'$zqP2@*v'{ 2۶;wМzJԞU{V 'qc^c$v@aOw)\2?6=};֌6AU$-Āyy 4_DXnaӷ5#8={ #Z(F c3\MՊu˓=iOc7as[ԍ?bnb0 n5 rfrթ~BB~\9X\`09'cұգJj=H Vmg9Sy'\=8@-?Ò 90F})LE~ ǐ[9qg#BRǞ?کqq9>ֶ9rOBjܜ„Y5# ~VN쎣o|V1ucǸK1G!o} F?=+3 c>$N@ʐă#8=9P4Ԟ}x'['ߐǷ'ޛ"ܑ{'N=M7q#>@~c`ӚzADy8ۍeQOz)'kHhݻ\*tvU道8b7 pcކ{nP=|oNkH߭}H>fT H2ۆ95s:c9mq浦MR6΃9s55 P8=]:{-+9ubfݓ9r~+ѥZֻ!˒žP;[=7gQ{&6BcwKmd!NpOE_Zk~2U~bN+o>%Z>Fc[{P=l\sA#pǦUwߪ8 @0<tM;'Xq\85_XC7opwN@z\U-ݖ?OL^FoWkRr`1/fEF,Snwdznqľ zK G;A;RWTnl 7vl_5r;2e;ێNyUēY)S3M%mJ 9eۓuA@iDlJu#_5kep2NHIE<920x ً}P+F199RLѻX[bv z93\D3ZFlU7!2m5Q.J4eH,2AI<1Yh<Z'buBu!J`sOIA6w%; nn۞N=i0W[Ғz -ώe#w$8:b,H8p2 Т` G>;Ա.LQa$89_RqP $dWq][0Z8mxv_FrB)>2[X}Ni3E`c3}Hׅn8'gHֹ+auRp Q;s{TI=9i6= 0%G\?j˨#v:osMnqEs$gޣ݁:m;FkIb'nvtc+٫q vlgO>ȕӓq9M4ÌQ]J%vqׁyO@_fz$NGS犗n7aXq=2Қ.!qzUr; G׵D Hvn'8x)pqOf/|ĜqC4C#>n~CYUU͜oSEN `=jrr>3fݛ}7#Vf 'cE\X`hzOgp>\aNyJ-8+H5 z]oNGUxd#=:h~«ăhDT7͟o<'B{~Fx=֪=Vk-C8>Z Oir&zp;}?ΝᇦTcOzyՏ uj e퓒 ǥo)%G[ =`r9Z -F}d::"뒸y9sƪN#Jl{aqP<}9({\u'c۱ZNr{i-wF 9[>ܚ 9F3)5q!?j-_'8Z/-)ڮcqG+iԆ<(b3 # Op*q`^rO5a6915)2xgߠSBЎ3s(j%~N<y cۑ= ~mHL pFO18#i_qتJ- ׭PYsO̓9Qf-:]0AʳnKB!W`cs^XARV9bۨت_~y3jE,I،8vn2@p20߮*%8c+wl'%E kE?.'p 963ǧ5K$lrN~܎湹1'#9zSҚc=}Uс|Gz} zO'yns998[Qvc'Wb `xzSZKC[hh@ `.s< cۭfF>qOmV8@[SBle$NxvAK5k)'qw?#*H0Nc8bGl}xy-m۩bOɖn>PpN{}qV7 #8?{_zzȆs!S+$*@UP\cш=A|(8 ;hhIp#CqpztȬY(PXp1A?k Y?"c5%f>l}{U9>pK~ltǩS-Mc HX@מ}ZXǿ%-,y۸8P ATn.XmK|G8~⺒f]ڍ \1 uœ~,0\Z**暦$0@W99bzVإK8Sǽ2FP1 ? FsWn9 69l<ߘNq}cnDUL*A`Kdq/B;Y}?`'T%Gw3RɿRpߖUr .|,p3뀪~TKlwP*ś ]=>V\WՆ|+h\8@es#ҰdVU nj7fq#T͝ʅGJe$[MR$aT]b=)W;<֮~>^D"9lPNB ҋxpO\3}(_2B.IZs9 w d&#d9OVU4yW6OCjvGEsgFk%XNH #jČ=Ӧz59$8SGqޱ=T*mv 翧WQMprq tϭqTtiPFszz3$68GlK=J9[vg x?m3q==?!ZV%i._s9z N A89?W }[q#IJ|Ā@;@?ʺg 0WnppHujt:^Xw#ۊ G$7g>2#6 :P=Ս9t 9+C.;T?jPRB4 }=+-m:q܃ʆ6H;[$8lՒgq#i}{ ナ8y󹿺#F[YtGCԐ};N @^t9~+Rp:|t}05 V]Ly#ǡΟc zsLf@sq;T;sBxy#?SGl l|ml7LfR[-W8BOZ[C_V '=>xS+qdt=ҩhpA!rx9H$m;r3V}S:@`CpY][9i)5.x ܐ=39I$!秽`6 ^St59' (1IACY{T;W'<TG 3ӧU8#4!c?”FdN1lV:#zم889/T)aq@''rjMG;VSlTSS;p5E&s{i^5ԩCn ;a1r?LVy )hggYe0uk?~i jvA@^XluW4iec#mLgN{Jm g?|k?(gJg1z/'6]fHVb:4MB'u׽.kX%A$d_cQِc׏ˆnQQFO#ϭszs@;7`%,qƹ#z5-.Z*q1~pv`1yi]i*vG5s3Q6v2 }UieHܹ  KM4vnq%ڼSU;ŎwgCJMY-#%=[%[㏕Hgc6Fg8SPpOd}8ǵP2VbfIy8B}Z[L}kB` }yHh>^@  I#k]-!Q^3w!^AaJ))r1);]mONIIAp뜅Jy )ǡ tqUvvD '-x@^Ċ npA펝zU)^V~KM gN3c}Oj-Ǖ+trs_I} ̏/yI''ֲo!ٓa9:?fy$x叜{we =MiAKBGsoi*yb!O?q]N0wĝ)=cx?U-9'rch;a<ӯNp =i_e7bG?.9y秵N$j9v)3{T xƇ7rB`u_gwpsdMA0rdBۍn^4c.R~=0xXIcG#ׁIhҚZ'2[$ jĄ l\3giͤ dpI9=sT6GnN~azTǯ[  n9`6ܜ<{SWd&r}0CМsϨfu܎q遟…/2x20sIH';Az}Oj2ŝ0nǧo]a^DQJs#9=v0E|ı^TP.*!x==hZ-ܥ2oK?w9i R˖;Iɧ-} tqڢy8>JWe@<1qJd|8뎄Iք&M|.HPxlx50L$דdU'r6ߧf;S9=BZ"Ibdk%#i}x'k$z1ے^jY?G02!O\?4zt nxvǸJ9===3Tq@RNyB\nzxTDA>U=~lPp= G?{*Qz@#iԢGv\㊐q$p14㿑,"2[Ѐ=zG9_WgD8?bzs '?>RэX@'@2[睡6+˜z|=N8&*Ϩ{w3{g8hhh8aq zy8pOaT]uԩib#:8U`r{OBm\+z >Ml]eE r=' $I'$+Ƿ{EG]xrӹ0SI瓑֠G|ݓ,@{zRTwbu@rW8:t 985quG$JLE c{syA~M>tgmJ#RqrrA5m< xw)Iۦ$V0;dh1N>sx9n:-nuU bq8(?w;B-ܱӏaY='1샖fA\m>l3 v>U u8ޱ5"RԮѓ@9f3#'I&?PJ&p]9.7X dmx$:v[/R'6$)%I3PːH}t`wIg'>R\00lW'9wxFiْJڄI۸sϿjbݣ}'?*O#܀p*HCPzk~&n (RO$.:#z[^1cw-$#8ib!Z Xsx㰭xC=eF Nps0?U@Rǵ2Khێ3jzz&\3J:ͱ㑌wWes1cbr'r䏛 qӧI6hLQN$$׶8& h'kUgޤ&S'nG횋R0xgvC@=aUib'`Idqҿ̥kX.,s/#ЗVg6tNJ0i9OW9iY"!Avc98m%NpF;uXI-MR!2NTʓ;y8zjhnI2I?QrwpHG_ӓQ6Npx#5M jU*lzpATz(\zb= ucu>Ctʂ~Pz3OS0F6j.Y 8䜀0sONIԂ:'hi\z8dF8Ʋ-0~9䎽~yc9PdK:=\A''=;_%+N2y>L#c>UFUrAlcGtYo\ }7$ؠnH` l@݌ tU%B:qQt&g9zRV7 ~ u$ '{V8^뮚Uھg5Jw*)'$9PvsS0F@pl LbHLsKw$qp12:Oqi52)ny#>M- hInNqAZͭQJc\g1:zԛ7Ipǚoa c隴d|8;QS2[]>eNr:0>@"HH'p#2ۧ~(NF=ShkUA^r7Lʟoz:zRJe#9=i}L9Q-3Gvtddzt[VЂNT$\$dm8韦 '/Zh!wr8 R,-x$ۯfA B۱ ,9>zwBy:q iKЀ!'$610rsUqt> I84q'vRiݨ#'מEL2Hc!g8o_٭|o =L }jk)lPz{yl_e7E+.obo>Fng n2J5- 9$p=g{_Nڑ@ ) cUxlRkOm:lT66>pwz 緵W6띫82jQ%]D@/p橴)qG?2/#Y~DKo_ o xZwHzoM/c%vN8`r9N/hn0OmF: vձ:aT n8;XrcF3A zv!$F2'' Lu֔xu#;_z橆tPe/€䌆9aSGU ӧ^^uƭVzO'b`PweO^OGZ̯l,|9v+1 rzsӎج*Ӻ5_+*0 ~;@T9J࢓vG}'ޠ$GaVĺzv j160R>u j%3>Rá c꩔Hp8IhHyFy''Z 1qz}*_J"$ӹ<Բ#Nà0[ Ӓ3;0}};Օts,?\֐Ѣd&߳$rFڜpC0N8#Lf-j!c׌ԎNFG㎕VW`G?t=Oz%+Z7:Qpq?ȭ_:+>+/CVDr~GVqR{fi7=*<=y5]8emmJE{r}^Y zքOJ<>3;y'Gq5+TT9҇[Rm'*`zc]7}ch1 `~{fxbtڪ;+Oۗn1 d# wp1*9[E)6N 2{]Y#>o5(>ݻס?Ϊo9A*(wcWѣn2zn'6U Kq[QrC0yv8S[ ^xV8j@Aߩ׷5P3qzL3y|8A`> 4c6ѕs/6z=6ڳ =z_|6,FF1ܐ2qާUr2GB2s~N;5@?_^ w߯ךUߥٛzX.CCsӏƹU[8xJ~W^)i dlڻ 8(yɬ*M魺R}9g$XX3ؖz+:m ߔutIA֓w2#?۝uWtsੌ| q܎ uĤL|<)@; =T?H'tPaNv0O'zF0[؏/jh~qҫO|!¨(~bN3Gc4`#ɇ c+rwcVOLrwS68%ի: Ǐ8횀̣HLarf,s6Tu?ʴrl^ dԦy@y'ҒlkO+pv& 8)5}wf-,ԏP6ά !;w!=*WZ#3~;y`ߡ>G^mzAtj˗a#wCXt"U/s׎֘!1vI;kסoT z$,9p8oګwb^wxzUrN08g}2^2~Nю:sG8Yʌ8p:d:Lkp;S[ 5VQg8 vϭi%3r|tN3޴gJĞc9?LT@'t*# SMW˓$x Ԑ6FEsTnI#tg8'>oڳ&4 Hrp:E@e+{1Tjc<cSM+c >bc Ɯ6ݷqjD\}IAsNQRwБ{t83)^v0m]Z Nxpǥ]8?’ߪ[k!q:I)lϩDowfpOx:gdzA !pW}{En3- |q%9 XF?)As7$s2# ю9eh:d޴z8Y/Lk\18Vrmɍ;c{œzؓߧ|6dN64uҢUALuISsGKN 33{緮qTTd{RrUFeK(lu'YefrI: FN:uAp*zoZj|wgZw6N~agvְv$r@ۮ8N-;֝++ֶp{zqc@Kx?ƚ] jY'9uSOOO3Z)+#88xǦ{jO7}ࣦs'i<6?3x*$|53tF{UG,dSV rr:aH)I+^TjżX#pq܏9rz83Klsɴ#8$W;qvK7'?x7P~|tKQ%W:X09;gݎ1Phg Fe>\z<N s ^ޙoFO܃@y1qdݝYUA '<6 y N;MY6Db۲*- ߒ?ȫbq*G@ '#8+>W.s6dgU)AfQ'<ӏZtUN`p0QqӧZz'Nj4UrpH`NR6m} w3cu9U)Bۨ'{Z\9 Q92TLۙ;{dzۿZU,܌L:.s Ȱ v qG\bpu3ӎ55DZ flQR-e#U F0AZv8qK[q;J}9IXrn;wGOάyP?;9 qR+< s֫::sӧ֭($gA1}iIG8иH8>85h>>>&c1s(!N>Qk Ǯ=)۰1ii?v@#O›b} :9F:B8ǨKvO8#8`xPW* $}?ʗ9U 3=l{)Ih@@ҫ=3?*]zu/sLGW;{\+cpk rFJOge){#9 $pEM#1 OZpvQky$OˀIw\³*NLoxXIriIh fq q? XpyTnKs $X5$QCړEw#Tq\:hB>}M$싿f0?r5,vx$@'G?4=#>}y’NݭIӎ?VŹ!~emI9v`޿)Rtv ǑaOs7s ]rswNTnkOWqOB|zN;g~nRIө#ڵs%$t߻xF} 1qۿ4w&;C==2*Vc M3rЍ%\*0$r0)>*6y'!)&SɒHUTp x=qKf'=H8_^R&ŰÒv@AiƊ9)jisp ʣ?6ݕ$d(6K~K䜀1ƭ0K_I$rzT,G 9{3dS< s8Gs~ufl$DS#yݐAҝWvg;H8Ӧr} K`$CSl;"b22\3{t̯ x÷\sEh [;;Y{=\m_Oօ"Ch8?);N}~y呆ܨ@ Č ªX{`d^z{犊U89##tW*Cx-t[KmA+e;~E&kGj11ݏτ9!}F\I,Bl|r:+xYW.p HdArXOF:Q,x`qooYhSzaR=>Y6O1MswE4b8ۜGMrٲ = !frNe{"I@''UYop օf2]>..\0>PH99>B"38f\Ӝ֭$mp8Tkвeۅf(< cQMǁ;g=rhzoV o3?^aPxϦXM]h1-I'֛DH)ב*[R8c8{U93s߮+L9b_l~{TrJG :ɭ$G*nFў@$c?i\{ʓFIE}Rۦv} 3{};GȒ-G$K <\n<lp_gzb@qZrz3;ps(Ituۅ`3ԎE?>`:p;4;9g$8qj^m֕pe< $qyu iPԋ*N8{vVwg,\>k-nqh2'q:r35#`3_ΉmE6a>by㿧JMwŻj2;vXo+ljj"|Jv p p' ڿb:x>>\q; d}xϽ$RBHx8EF`aǧSwKͩQ@p0y'uOqӵK&Nn:┳tЌq1~BP`$sS$*}yT\ps8|"ǀ9ߕ9q X2 Ґ"RwoG85 pI*Ƿ͌tdPz*POZR1`4&$qןAPpy8zNjZuRq|=A=!Ǩ<pALd`$\$F\'tx\?Wx`uJm}<`G5$<nsҜe*3$a1LTϵN;`PQ&ߗo c`9F8RR~b? pHqJg<3S.LU*Nd{򪣐'8&B:tPpqϵBU`(“l{9"qcbI8'G*@=5mo `'<2JQlӈ{=ɧ!H@<Ӿ*7s8$O'p8p?hvZg =}q׵Xs_JE8zSבӑi"^ u {>Uw:gNj;%p׃En++Jndeb@r:9RAAwpx xԳIfHR{gçֱiccRBu+;=kf['j;n@+Fr'j\)v3qF6QˍÌl2{dVу\ G!vn=1Td`lȼpv{P1 .yܥc:xٴNq}jcSW= 5!N,>UϧGJA䍼m9;xIFp3.h $d2?"1M'p<%F0Wa˸.p G.ʒI +d(;@3mFIh..T9׊l[1JN@S;hO,a Ĩ>Lj/16ʈ\T+6ӷiu pK.9x?ж1%AV0j<QFFC?Zka"Ew!V$fH(*l!X` 'ԯ,dH!y}I#$))8H vT$KKR9J^I Iw"켜!tAץHr]FͪGjIkW$g!ee}<̤0T eFU΋q2lD9h|H_ OPTu5/ k+ *Nn$ 8X)cR$qMr*h,>l*1x 'xz!%P{x7V^$1;rAG'qr@ b2Kt9_®23$ 00pnsqqMjD3ghe9*A@w 5$-Fq3)y]I%I(9!x%i?ֽ,/b𭹴Νx,2/'/4XwI?s\󎂮2[ّG6rx kZ^/XP4~ܻ*wNڎƒ@~VSFqvݑ׏JOcThKQ;sWCPrW`9*17~ŽE\Fs}+P^] 9zw Tw3<0zt>bpJ}gQ('qm"b@>chA N98Y.BdA'ElZjY1oS䲎= ij@Fs02¥V~".A}0}}'ιH5?J)'#>yPIq}t ,\aG*+Sq>vasSj+3dp@1x`ݬo KC/@z JaP~^2 4Eg>JIcg W%|,^M֢`snAQp2J^rAǭyU)6S/ru)71:ϗ}<ͩ* p8#U>~ua<׎_3a{`AֳwMV/* `2 9Kr8v ~ONI6P>RI'eu*F?,$x7δ# XdgUЖYWH瞀}yYs1)XA'+q=_G2;XaYʃ]<3(ۿQi=SJ9󥉶$`<=}j/x洏MNv=4ߏL2zl!^;0}{UCvONc;dXi !s`*PA~g޺VZqF_ҠaЎ3 g#8UC9G*6XurmxeU02r3P #p9zd ߥq8~KS^t:GʠϯUH"1^Czr.*,jOPv ;x=Μ#h2NW<RB,=1?SyNyڢ~Z$ לAF~*~LҢz `;O? ~0p=eԖt<O/$ =voojքB8}jzwE!qAlqsM'Z"F`3g?2xچ4hqnsϦx?Â;Seo5C??PǨ>dQ}GmJ;B3g9=tO`; qtgQ4t}ɰ#{`{S7awu)D?)9bÑJ| Qbd2Sw<㯯聉#HAN=>ŕ\`Ϯ{Lv! $6KWzӯnpppB~߭fT#q szGYr1߮1xSаunOװA '*94.79*\aNy= :pH<(Ð3 g=ѩVEl;?)6z~5 h 9'03Tԕ~Z\D\ `91޴tOelPZ%&27tq[$n9jkK&yI< O>٥^gGX N>c:*2Ie{$t's)^n]=x&P,>P[#lqnhA-##{k%ɜ6N1zsZŚ6fmT 7nA#{m }j+uXFŇ?3r Q'<ӓEӰ s=7˅*Ň=4zhc6ȼs $T2n ~` %jKH7g`1ޝj7ITw$=zP6TghۡՑ$(p7`CHq҇Ǽ,imdׯ8"<y8-R zg*=O5Sw8J;}xM "P+9¾[:֙P ΫA$qמ:⯧D 'y 6d1"+કFH=Ϛ*|ؘ<*: g~= *lF psHMWA.@cO<ÒX@ž}hEcF>a63MTm]Ih 18=ͺN#pzvAg$(FGPzR1zm< WE*y5fgn7rW9yU}n["x`o׃*z$^xk_Aov1`gi#ۜ9L/؆Atq v`cZCퟺ{ KуIVj`$O?>Z:b}nьn*=_ʫߑyе"Xq3?*KsxnIJӠ3E1ul'@p{rzDwH7 UGcgzΓzztݕa]?\SJ$ =m &axF=Kf+OQ)Ce0;^[v';x8 81_ֵK_QTk,vxWQ1ryUJJϱ}0$FO晿'n8ݴLw:ϚMYu93Oq zQ"#mێקoqTGOLֿ3X= s\{3+UF1~ Gp: r:'4GR0#}yD=`'=?Ҝת.pFpB+[r\r82=qln B(.39 =s 037lzUd}9mqžp0z9SZpO 8> 8$6p;* t֧ns]"-'$'d}9䎘>-V vYe c8#kj'ojj;dcz J.\ OLz{(]f+$g_z8A{v :liD@׍.q`4cxH*'s>VihdǷTn(9wk].y =gҺK;9ǧ>VZ:5K|9ٕ( e+_qsk\qط;XǸk ҍG dJ=rRW89Ip99?IT[?>OI3y&c2\@zq׎J^`F2?j/y6m "vr.O HYq%zM0b)KdF`߾1ڶn6$5̷S:}F@d )^HۜU7wE$dg|2wҭbS8#9wNIL&]1q#OZϖ5f=ʣx9l{kt7f6;F3Ԝzچ=)6wp}*kCY #9,;Pz#\|I=?Z ]נ7#Uc r{tJ9Q3ztI4tFiG1-c(-r91=kzrjHƵ>TigA=?j ~bI^?Z$vrE{/$v3t{}G=dwu yg)fۛssCWO")QЏ{RusvT(~v$sϮr?,S9<7Z%di< 8v t7@NAR+yI0zUdČduǿ{U8lLX>>\wlzR=Wh89bwt{RQKͳ.{dlJBz`<.ǙLsqYFwRnh*T#p'#ךҊ4\*y8:S);h\ _lhwtWisJ!;pxOJ`mqV\+\n}:mسm\u8z@ '3>qښ)Oq FuX1VQ@8Ƹ{zZcZhdL[qۀ~U~cSR8U;1\~UH\נi̸97dp}:3;Өb:20 8J<co_!mJʎ0 =EfRY/́=9#j‚0N?zKԆX gT=1Ҝ&7=9?qxIyHG韯泋UN#8#-ԉI1ܣo 槅y/L80*zO8# xiҢܛpz8r?6O㔚rdtpdsfT(2 |O+Azgsr{E 5kDHCF=1N8>+Q$)=1dܓ۵GݎG#OLD[z8'Z* rA{=4c58~n& nua_ERH=?2&:ckJeH=~^ߧzٴ@zqڽ|Wķ8 a~U0s5sv|Bx:ש4O.-2^X>}*(,O@6Eg+7ʮh}mۄ^1өz{Jڥ+КU%m1=:{;c-ɯ=S[=pjPF^=tOt9f^WVgV7-#5ʗ5KyPM1|.[<&5qSJWDG;*H灞$UJg `Ɲ.Wg|gt^Xp+ۧRҨYoAui?"-H 0;#|xSUz3W]FЎYSW!3&e]܀e 8ln8?ֳtFԴHw, txɭXPr{8=u.^ad:cJ)|mgsǿ#CSR~*ʇp8#5svH[9]@wA*aBO@{nݘ 9ܽhNf6dկo u8|g(K+J#1@(#VI xkE&3TD7`/ܑ@)C^ɘ#c=9#qHCQ{Tƴ<'i1ןO÷Z5˱眐Tt#}*щ[$>(0ʭlkr}0: !,>SԎro.$Fi'8~ZGcͩNkWuF{ <VPt*O(d08 9ϸ@8gK95)sYXEzg nOQI֦_ ة1iE #I8ǵR2$ 2nѷ(FTp3(]UFNI sBa:>l=}*68SÞoS+ kN7c<sҝEpwOM`-tК=UcY:g$^GI$2⸻wd@Oʋ4*G%x ;4UoJ'֖4C]b'ib2 q= )pX݌w! wąL:hб1tPe!9@oƚA"Bv*N8};T#+>*>Ď#npq:UW F}q4ng5im duܧ0on~qR֫9%а% mǶqUպsHqi1׌{rw/p@H rNx-*=?Z]vj;Nrnqzux#8z.+Q( )ntj?< m/W;CM$}sS'#~ǵ7f<^3:.TBB `/ɀ?-ax=x cgJ.ӎ=rA*Lgiaz-ƪ#ܸ`w B<gn`랔ԴD0}0z`qI*r{ߟP/8$|zc5`w'ON~3X:񜁟n$ r@$z55^Én898'sSrBH$gֹﮥ0ٞA*9'JNڄ=nx xݒd;Ox3R:?Q'4Կ y@psǧ; mqzFZc{zӶOǧZR~ﻝsrh9֤@' ) <։|FT'}2|pAc$~U7Nx<zv?{6 ?ҟ.\9c !>9>_ Fa!pTzo㞧Mk+¦:`慇 i=tCoQsRh\t9;}~{>ڑF  ($_zw[d ,Gl=2)<BAb:¨ 1+IilTM$J2>V\p{{*_qO$chzҎ&C>n* v$q{V]?Rv>Q'k6Rc1d_7g\a\j3[I_4R%Xwe2i}Fq#9ީNAc#qN)ǯNOJ+_d8G^q#m!DęQ2}Ml9$X9_SIap:[e]a+"EX) ׹4=M+nH2 {g﹇;>N2rqBzs |m+yޘ,ł$+c&Tp cun[vWІ)ʝ}Ht'o~u 'OץC8$ F?Ȩv8^zӋ6U~m㌜t>SV'Aiu,1ӚwC]HKd?ߧoƛ*-צj՟[8Nq9j5Ab3ۘx`{ ij|u8<`کn)ܮ}HQ[§)"^~Pm7<puyMM]ܵp~򟘩C u#pA۸7%G'lNDؕ0%XC:dFgl{{ "*EU];6ͻFq="㕈HURW */m:!' 98#;XfV!2Nz䜁ZҜ9mW/8OAʣGbO#ܼˮFA=HJ&o02cv4hϯ)^_cK^\79#*r^HoS$s Ow ~KsoZ j >?kER2rW~7l; s=xx%cq=s Qh\F!TsO5mr-+.v8#;"\݋ 1\VF _6ː10[+at,w8=6v, tB"u1PXYS1b6O8Ü r:6k>HC1l~V0־!Z 8$8}fxzXO_W܄ŵH3\'zV{:w>3:}{TQ%GI9;qLX$p}y%sE^HPd|'?ʟϾ1?.5n]~0F#>U%B95_]H}Mgz:y9c *q&țjTy#ISSw:`x.(;7^N: slr\$58o^=sO-b")n$`:W9;դTp}=Hǽ.wst#'WoEAx9UL@ndp};Ŧ(PwĿ7_lǖ>\$m~zfu靤FF Wg?(Ƿj-Ļg;S7t'(3pűk*~C,`x*0@8Vq&CFvx \$rHٻsCW 'sn#q1V}{G$ߚlrY<OGa^,)觠'EQFl?+w{T裦7qtwx#h韯ZzTw“ѯ5J 6xxԂ8`ݱ8gүdXc9ӌzgޥ( grd., 88$xFRCn}rkY{U|s* lo,} A#ڸ5q7r7bvI錜99  )6̥~cI䁓#Ӟ*yysYEֆq• 1Ԏ~1џN3ޗQB:.3 3ry$ʫ9 ?.mN1C8\Ӝ[xZ5VX>N=m)+X\†XA>7s۞f0{Sm+ $$@emᤐaPR.jw2 |¿)6`!Si^݌[@a I=ҫ};qH'wa';A`#=*_&F݀zKI$9ִy.C<.w85,YpX.Wi|J ^=Js$j Ę$($tSaCfF2wV>c U pk!%xr@'9tɶl\C)<1Ȩ)PAm!ӃPw*>HO#̏fc6;p~'ӡ4 EmRBp:p:{'#vݎA=iaV):!3C@#^Sa8'9~ʩlqeϷGgx siV>(qw+X;'Ⱦp$۞)Pc}Hǵwӯ?gX1;r`6H?ZMOֵvBPM_9ާ x0,9Үm_uϷNyuf.KdpF~\O3;o 9觏}9R:?s9RW&RFP=3Hd@E2zVOkzh"#=h1A2s< i_7CJ21ܓ9wx بKVc Lq N*@DX{O cheu;?*z Ӳ8?/o_U?0 'f/B⋱moB=9s}1WÄpߊ&IחՁ`~HR@ÐO?ß->"Hӏ_jژ q8 dۺ4.8aΧ]Tn\!d'NjrSб1Zn:n\=)^Dv$r>eڳsM7CgHTخ 00xzf%T6*\2>N)JZSH= E0*ÑZʊ 8WkhZu$1{~y2yҝ3 ۃqqTNOR@=ҋFDDݞ=r{Z@ <`ZAerrܪ9SʁGgR:NwA+s搂I}`R[H}HYx|Ƿv=<Y7Jf|?$8$5j'~]) jyy s $ 8EfijTw7ӧZrdq{8j,O棎 y=6"i'9v8N;V|̞R#p{p=E@QAqjLj9:p98x沦p= z IVtӍْI!I=8<~tIzlUm~;TRF)\/L9ZJrܞ@lޗ穩rKw#>?=k,.~z{-ʥJKc|G U( d'dq4ޚ|͖`IwS[>g7!(<FH緽e/J= Q' 'pO:ziz 2 &=0ˑ߯5~ae)kYn17wPG$ t#)-c$KmB6r}; QN+ǕvlJB rI-r9#CNzǗwuFqҵ}4)Jvv&*ژw]/6fp*nMz3eԷ# qӹ#$v3q^UVM=9U4VQI qF8Ue:`GS{/9ܮߩ=rQsڱ>nA;CoQǰ65ǪIV Q8' рvԐW_3CEgKp03ۚ M"n’0?R=Z^?sr-}ק?xA mt//qq،ܟ|zUa0=cRGB7grU{쑁Ӂڐ5b9\FSBgw=iI>J?j j_iBylqӭ4,̀=<(',>b,q-x sc8|TQPӮ>^4,Cԓ*6O84Xs& or115 IǽBr#2cЀ\d_QO3Xge0?_ZFs'+3>K7T9R@#,N8iL6sQkάiG#"cdq4TeT` K=_e1#7xF0I uyPH ,rpOclv8b랴m Ii{\0çAbC򤁑ʜv8'%vMb3zxbz 8F23ܕ"%wgvs ?H`|O?&q‘O@"0?(U\ǡ=k>oy4I `r : uϱS$ߏM92>\\3pz#b81Oӓݼ`rIH,c<?ZU6i\cs?me'tsI; dA׮@?WkqK.1pO_{-ǿ=N})sHjP+]r19hK4#s99?TK/ ȓ5q!``z3p`gsU7N^(_߿Syߟ$zLs9ʧ3m#@<x.g=1Vcr1Ќ3ocPIi:.lm#LTpߗc%-DP3>:Yzq?\vaJ 鞣ҢX(FӜO֡.ŵuZ*yNqN*lDZHQ0Tz-ݴg#0y8Z-pR.5b?'qDz 񝧡's񩵊۹v22I+{V~c`zZ3fʹrs'}+Nc$8$ft؁P}ҼPcfABolÃrFv\Va$ '5 rAz`gj,?>QdDZ"цqFj&SCdRWvAdg#L{>vaWgFѬ`|;GQ!;{'>G٘2LrUBך,$`:`pǀ19yuk@0s ۑHjl'Oq]0t<4w%nz63f4 # 9=8eNG ggsI g V/gz1Э./1 wq"c8W(rKes#vl3䍠sg'^s4$"myvAmzO 8\wlхi?. O\׎1CSdw'Or[oϘR1 iZy^?Z/{wR~`m'<b1 n209랦ƑvVXwQem?u*mH茓B|qZkrJXm³#%A9ư[}{V- QqZ9$ ;6}\`bg%qg2l8by}=Dcj8=sD#N(:}l' Z;x?8RلZXJg;\YEFӓuU{;4;#<6 0'UޤX|$zyiCm>XzהRuYzB(3^qӭFqMe;pAJԻc$cۯW< 8>3ҥGPA;:hK -~dzt+)ݦeL{zaߥF'9yjɖclA Nq3ncit3%nwU=G~y˥>wz'E$F<^Z17 29v-q1.~]ܜ6GS+RVe4r[7n{֒BO< iɐ;|l9j(gҥn.DY#<GipA'sU zwEidpL``2w3[iQb.qݰps~xk^ vpø_֡/*~@UH$|qg8S{g~բ2UWHhB<}e v88ɩPJf63Mwd Iۑץ-Fݜ}?5qfۗrw~%7%zv?N\˻n;0d=ۏ9wYݛ?68Q ?j̓߰"$c 3ׁH&aX%{C[|ɱ$O\qǧ'*OQ ל-A]gO#^y_@d&ãgpOΥz[aې=1ϿҗjG̤#ϩbAC$7?(0NÞJzA- g88l0 d :TM/8'?a>9' {i1r{1 8##:!J`H4b=r3>SԞ=m_ԑt;Ӱq92{4bc= gx EI'qГ 鸮W~8`=:e<9^>aӎ]H~þ*A0z9p?t=JZXH8T7`"KU_1Mnz:}j<LIi"؉P{~U'@WpNQܗ"܇ds^?OFwdms*R߱JCB1nFO<21yI4+Яˑʌ7@9 cl9@{pM]~c!h=>܊EI#n$RF18-0yP}=sӶbzsӭ7@r?Q[ rДB$/p~aL9{X\f0y#?C8$tNC:q֓O[q.Sn£(WbnbF 8'j y=8nԅz9۞*6ljHǴ`cxUZ}ų'$qڊw80*I>?Z̞J~RS!#*ۏ{F /jsoͧdf e#rɜ88BG?1>r'oOsʝEE0>VA ?JoRy^[$ ic 1$g3y#!^NGz"` ]UbuLKd{sҧ=0*yAwQ'?F0rsʓ$dH1|pr8u֕+9Y@Kdg֢ Ď`H|zsT%:K40zRyqr}y)?R: l'aw42w%1y`N,H8~a #˰Fnr{c 36:W>:JtƜw?*N '}cſ2@ Щ S7Hvf9'zb>&엑YGB SS4ܾ/{cc40F~grO˅ss0zֵ?R5)%B; n N*ܟfƬ:#e_nB5êhAMs bVe)uq .8 y(]~<s(l5;㿥M%` 3S*]ALk¿9qȹ$8`=+uF=Ǧ?*@1$ ˻+ۻ[<X~npp}ºoăs _r'bd$xBzg4,Xdd 9> ǡ1>a<4G3sTT t~¸w;Vܿ {##Ty#k|s\mk9z[ߔܹ|I=vI5cxqٔ?2sW-T1gּ7 Of->*2xʞg=>=}K/&9Nqu)D^b?|*c;}rNHxď~w+Hqt݂G9ϩcڴU{M7w`p }@V~#}jqc} 51'5_r%}c#nf4.7cV d ?ZM((I$u㡦 >s$&|ױ=?Zw0*98';Y̤xݻsOzS ^1=EwbF0IU;{ @8-ym;׎sznGA qZ\x`jP<=|SKO9)+d^*N[;Fzg:۷ARK_MG |-ck{qTp3)mngT~`嘏h4Xv2p08>{ OA,{ONz`>Z} 1Q19۷>lg0IX-Eb܃9i*_ZŃ{qn9ޅ+29>%:'Mj͖F)?= $% ' $tN1v|cǀ)lfFL-#O#[ =}4-[lAԜ?)9GSQ_[;A=yP0@$zsc\D`y t9.D+rrA3BԈJ-l'*}bveOPp`mTdN~\3S`T6>> O֢r@z󚗸X#*^rORpÓ3O2( qӎ=)nkRkϡZy;sdz֗(ln,1ֵSOPUCٙϡ78\'R'1b;Y=S!#>u 6tQN˴@qYZ|cО.:֭ ˺@N0qڥC usRecUQ9Vg#{rp0++Y3LVV0=;0=>UNwzyMv4H8sUq򁏗Mܧ 6tg#܃ڧT @힜DnK20:p@Rzg%g"o<uT*?9Xzct:J]foq#9+ӑ35>Q]$Rtpzz5K0$.NQ7ğj* 9#4ƻRulp װ)r QeQqf'rr@V+I<|:V.ZF7=*7Z%~RG [qQT+#^H#3=D%`G,A Bk%tm0D{gd c$3֍=Ƙds`ZQps1I*{0'}?TJ}Lw&k+)R 2FOB&3?s Ke lnj\#y9?OʚXbb0F8rG'+28{ߟJ-EOq׷^ۏoG>>ޡr4# s2A֭8 `آ>zG˞qӶy 01QycS4 d1ZA Ԟ}>YSzفI4n _/H=#~ҚmNipR:p~9K|{9ǷVk[&@Ss~PFj?;eEئQ8>IqNԩ$5!hvUWU$sZ@U <i:R[&wSzTOWrĎjZ"S2 gqq5b >l0 /mٚ{ /pF9:Sd1lp9$~ 2x8p=G֫<xs𤕾=r:Wb zg«Hzn랸My QͮIqq@*HUAOOd v+gck=g#;}UkyomF<9~l3~u5fçw#=y?Pn y$S8ȲH<N b@gsg2|n̍<cץ*{AFy:."ʅX379^֬#9z8ߥdՙN.old_Bz 0n?u@PyW3QԈwNtXfBd c JofU) 9RTrq=zUȆO^NpLw7H_B=0xm;/3n8=rb]g# y< さ:*F5=䩒'xT>d?*)n6{cקȔom=6z5=Itn{+TċЯ'x-t!y5e Xx9}Onv+$vOZ5-?3UpW,|p3ӿ6y瞼q½}.73qmK|܀:O_qvpEW%}!wA*GJ͞i18sz})<$Z;-t1QYpI?{'צ nCjeߚU0Z]\7O]gP06}OPHT&~Fvw8|cdsU0>98nڊUV.x+ʃ ެG$q +ӏl[rDjːFNܞzkE吧9 y3զi0eFq+NܲxvoҴvw*m㸏o]G=9x5'91Ň0烏LHmZI.VXF qБn&e׌`twԦG$%o>p1x8ż<3/>\&r?=;TTM7%~6_y0=t[ dV y*W+"&[3=69{VpE +P g45*\󠌅|rpx;w憽~ Aj.es40n2GuB'=?YnA(O vv-ΨSK 1VE;:eI!6r͞3lU'lM[w#={iu˯aianp[=uBǯZZ܅Ok3qch LzUCG*r˱#2GN_zLŔ2;ۑ֧bsu^M̞9 .1AU3m Olzm BTgn1?^,|P#i>ߕTtI('O׷Zlcs0GAE%|=zzR | w^ȎF3N'ژ ggS۶ql{J?AgUk\֎cEſ$=8icǠ,=Эݱ\0zq׵X6p98L!Enx#$cnz(Gcϭ[OR\dž00GJ_*4@Y@ny9kiGC4vǻ$o# Oqo9םR;&˷Pprs`kóu$Nkta/r1nֱg0}|^"<_]7$c#8[<ǚUf\NOLp}f6`:>vtRssϿ8O8NNN2@=kJHy%yr8=y3$N~ `xq?Rm*ɑxq%+Xp7}Vܻ o@:iE.Õ9 'm둃V 2Nt=IZVqD[g$Zb '+RV#%NrHǽSm郆^UkzwI9:۔*3ךz, xޤbq2s`궿dr`{sPÁ31;qC(n#?^IO± î8VS9n^DCOgb3ȭ,s-nV nsڰpY‚>bԂ]F*m[ sSPKSx\ю-G_lq##R+a1Q#_032*s1V8(n{ҴQzjd2Pv`r w#O^V SNbblAON1iXJcsT^&P[FF @9;A㞤޵ d3>^:~T_xNj'x8oΰ)UJWf >Vr zv0ONs5VTD) ws;1UU%?~qIZ0e9 ztOS^i:t֧6/< `{Rqv錜oĖSi6*ZӲ~4A~1Օt' 9ǿlҰ= 6crx9ubzs:gЂܠq;x)8L?BH5@z$O^{l^t㯯Z՘tROluarG A8Z <`)FIrz`9qqס kgoЯˌۜ]ۈ' "Lh e'FN3l8:K,^QWTK1@09Jϗ9o]sg}? nޔ8Hw֕.~G#jyCJ;%H?(B0?ɩ \݃WVR|,~U'^:{ԟmo$pzwrycOBN2NOCz1jr1Œ/fsGL:̓(]<2^J'ۢ2&89<}jstI)}xZ& pqʨ:jC2* p98i_Z} `o> p+N>B<=?;wqdNH:}Njz 8۽Qqסaƪrxn3U?q(ݮÓq\uUo$xo\g&iq| m.B11ׅ@9m+WϮL0(t;߫{9$<׿l{S7zB@8Ӿ>ҚT=yR MgFr@m=3N9$|>T_-Td'Zxd T+ DZ=-szcpی$U8R>Fxht#P`߮# :/Q Hq$'aZTlwoέOU 6rqy9RJ2{/8FH9ǵ@*9#9:𜑁[0FAdd>2C#ޥG8A/,T';zbeu^7όSPhS!5mPPGUECA'WQ ܿxB{]?n[U`p0~Tb'8+F6)Ա70B(Lp*ڰH$~R |g8d 3`HN518\t3^._'<UH:sX9C5f]˩=v7/c?*09^v '8m,In#n=Jw"6Eq@ pGjw uh-4x’7gZYaǻ GjMawwIe+s8O@ Hd81h,HTcLT@$B[0OO f+! /NA'T71$:8AC83A F0qƙ]l0 a@9#Wv9 z/PAYy%{S\F|Fx;p)3.pF+зlZz&QdXgu9z@ݖa^Tt#}OP`ʕ$۰rq֣9qrGEDLmFrG9p3*di3a~mGA%rB't wic8|))'VDvUʼUX1ʦOTM KA1[%N]tǥUcnO\~ԖUCu 6o-!rִ;<?ʥ6redB$K ޹zi ~ǢTڻW9ү`99ӨdV=r?ZTs'JŘ|Щa#֐ w}i)frwf y9=ljd@<6?JSTr]nP;r֬GQ!vH1R+],rֺ>WnPOOG*2IG8>s3;I $;G89S 6oybt=zTl#zdd(B m7Q#+H<0Q]6a̟Tg אAnRQ$t[b}Ajn\R@= PNg*A+m+EDfC+d1RRlvz96+)vNFнF;AQdm>).n#394P:㌎{isF\d䌁zVkL7r OV<3qJr7nB SQ')I7/N:: dzzRPxqؑRXJ >S88ps׸ܴ1sP݆{AKg~4ڤ#9wKy3OljR%X ``SJLJl@2~`j/^x=O [|ND$Xǚ`c?{FqG۽%Yh@S8 'JcO x_Z+pmGz2@=~?.N${Sm;ך ۩dU)p2x#ڥoQӊr9 OSUe^9;dBr{ґ'דbryۀN9;U2ぁ?'s? ^ ==ҬGHxzq} l++ +z=G&Mvf|psYIjߙH7cӮ8>TEc}ӭRB3aK7 n\uّgړv yq)\3sK.۹xGZFʹ <0RS?/a>#h#=؟CYm(nA ,F@l/c9wdXt, 6'8#IocBa\#.~Rqp{T٣8229'3ךI<9Uʌ03_U[9{S_*:rtVB.3jv?{p9:r9d{Ht%Ԓl[qG`6}j(me$zOJrI,=F sxK39jA,<'3'3TA6pTsLVpq( {vy |.sBt*#ӭ6R%Qxl?NqWaGl9^k7~Yf9xS~c_|1'k!a,'p=:cZ, H;H]q 8ޥ+Vlx8'*R ?&S[rANx=AϭXT s)<.[hr_Q֔+9xS?<Ì䎩z \xIBM%nY9pdx<=i'#Quո|k2@p˅O#*sm=NG`8R2[V9'q2{M }qJZ5"/nx*9Xs߂3w̎8U-627089UI$'hQ@oӭi{+z"{ːr2'rs֯Ŵ%#^I=}ƪFWBi6HBx1֚zz%MNFv 3?iE|c֜u2쉼rA9qQ }B'h뻿d_%w5b(@$Ӄ*M,v*0*0>gsFKsPqWEyd#)'v u~̴N:(-X {wV LRz g]4\s9SKrǧ$(:a$V䌎Fs묹$اnjLjqVe' #y@$anOaJMay\zs}}uPBtt'_2?w/=l{z*ޚ^>;o gU:>󁎼R?8z{+ix%/=u3HHlrO:}؛@8`I'U78 )'pO҆NNARy#9!:IÖ*͐s8(w'^- Ƥl1=s*ySkȄ# I|vđuNA8#ָ%&F~RCeB:7c1C}Hjd99=ӯ֬\qdmϯ^U!@#6c<sc=k'RQyWN0Xc<`js۰\玿;ht%`bGgZv\}t~oNP$lăo^ Gv=Ӝ7@-5r|Upwe{8'#k1mu!~na觓ӭmB6pTvel ;Nq|vNhmd;Sw`%EI'O2,JGF{ {׌߼“晎n׀j(%sӞEkrKqcpF1JiUa 3܀D8ݴUP\REF9ڤ .{L8dwAx3]QjG V?bKUx\4p(Ò\:\VѧF|[6*Z[P9c?#O3Fqi;֟W"e^k2tv#i#i#=s\vI`P '9^H0}z{X CqdWڥV3ґprjcYag%\1Q6W)R/9U<1Qӿ~Weݯjj6Kv`@-͐8 i-_F7+4ӮqJ-= Q7`۟-׎:cZV<9IAAϨU^0:gNzӅҹnP`w3Տ/:5P,Lcp{KY;ηrz]F Y :HLJw|zzp1ןCMn_2ž6zd#6N={3]WN)#*0ی}ӈ]pTEj*V3#9$+9yG>_𨓻v~BЕ!+srP{ zS~p0Iv5 ̧nq<ڡpwgs\Z qSz۰GQ0:`)LwpO= \x*Fᷠ`ZDN(rΣ˞Nz5fosOJB0b1::Udfo8='OzV< _$-N&z{xבM gwqއ~@<:R13P.Wp<|~ 3qޟB3 OS^?4-_ޛFb:rj^[А+1y|Cw$'u)i`ݑ"h78g Ed{y3'sӚ8yD\c,rz=dS\$< mAn_=9A^&== bԩ)?{ڥPO08PáhEn*q=2{멖b4rOb>e= z#P=ZeH>ϭNaq{g_iixOi3 1J7GwrxOƫ(f$g ǹ b2u$:{~ Թ-َzTI#>܏Z0W$0'ی#ҚFl$qtx5a$b'ỈXۧ'Ԇ_A\!^Wh^l#nٮsp7zsx(sI.V:r%p~z/#ҥHdyzzW$wUawp 627=+ZRM5Pw`]q #Ds#HP@Ag`_\ͻR<~\o=򬸔`8=wtUZo%wgc霭c7|`/;{u#029S@zp#h1n2yX Nb?<ؚw>NN% gkvY ({1uOͣO$dqCave5!A#ԌߎrcP~GϷ^LivBѰPH(x=3רFs9XN6} # g u$cufKua݃{\u99,F6}qYGV\D}I\ҨNzmZMn|?9{8@0=2O~+2e,n,:Qӷ9\<Cve,k>pX}M5=Sۓ~=J!'r9={AV!He'2G<¦Fc㍠__Ʒ/ބ38_# *0Ib POT|b-%oʒ%O#46"8\|@jǛđʌ8EюL,99@: j7#tZ J.Vewj" 5'#ظ3Lcrd rI=DiqJW{/}G)Ѹz46#l.:6 _b0pYW#9ļ\hoGKvIB@ǰjb7^? Pjn=M?~#9G"f9Xs=)=]!s8=ARrBHgp=?P-dJsSKEXO,I=})s?x=:J=l#$v9l{ǯ=ѯBq3SJvއt2h##ךقdr3T Sg9y$t=POL6,T >3'քv;K F @ :b1ҢqӀ dH~gnm9ݜrFx98pI:?׭EnEF`FAzQyL yj#i@8#qҫǮO`1ڷaJ gzq2„@,FPGaTpr>5#)P p(t<~隍d#(K 'wJ)Fh;2J8 ? Cu `\B S=w0sTpt&ka$˓I+1R;_jR S$8#o]ƶ噷)O*y}HǥW&*}Kj#hB=sUKu9SgjN <8 H9cq76v@? ̧Jb]~;9OO)ƤW}.AgR\I{UecPo  1 L p=)#> \N=?F-ߌ~Κbq$3 e~m \}1ϽE=g`A4Y&*9Q8J`6N`vӵ( Ŋdp=_^I @ɫzVXrHdt;`w`u;bpH1׾Qrqw`A56O89#"pc|ziOZMǧ5Gx8nl #8Ko5X$E,ǧ^5>\ s?Oңz䌎HӶ`98n>Vʖ=8G\>kaܝ-,FaN;t*crB,s/R/#+w`qcS4?iǏΔ)JϾl {bAz؟f+`c@+:LTOhd}  Xvk)T>`~ԱȤs>־ŶȰa9m{UY>PIUN0IvN )Ooʭ@  6{S. '9݆!lҠn`Z ڔd%Y@&Adt6yT#ϭh2VT7K' `=E`w`e~cүM`~P}xU}IzsB2=QFi=r0 g9)s $z>B,z)'phRmӶP[~~GN?.k0LyY~BBGv<֐w؇SN;qfX(!@r:FSw?Rh` Vo_NƑ>؁#Qh#ן\襤U~݀;3:V|rOLۀ:t%dj=m;_YOeqP:gb0vOFJͤWɑ3:)zmj&V#'*?<֯9;b ]N#t,rK~ +L(J;fDž'-۠>j  USHtE=*}rO2Nώ{t#Gkw3NX d{'ڱ'nF\ 'ڢVtӈyG7 #֭;c89*_Mj7|eg0>I;=1Y~v vs>Qk$Ix<rǥ$g- `?1T OwX p2I9dѲwpgz,G9cH#բğ;u9*}3Hc1`1UFyFx <?J+#5{O:8O=z~5*K'hwӸBrHlmώGzڧ8חYjTP1[?xSR!ފp2:N :Q)ȾS$pI V qSn7Y׭L%m,q:uqih\`'8dɱrA u#N=29y`dQ; - Ry#/ژ61n:yo iAʧ̠ O2<=G&#/@^9'S̀@=w?OOYN;KػhZi ǂsfT]瑸/UyT$gQ*ԓpFO-ϯ= @ )ݷ( { [EP ,a BH錁+*O@r ޺-4.Z1$o ,O gM8lvwx ӑK.dr8 pzU 9!pA& ~` vYԦ@a$}5O ǘ8?QԪI9$cI:c|*qPs6s?9lA0 ʂI89_JR7R@}8'z"ce7|[xqkj#2#?*>kMM|#=* #[sEݙ'wm{jݴ^=F}U%J:sqGe]Ϝ= 8^ӗ^$vLq*$z{WIiaP 3\1Wg}Ir7!vtsKg1v_ݷqEF[3<`k*rxCdsIvA"w݇-j$A@zp:Й̉ {UvtJ9D視 p6z` }9<~Uc9ȓ`ӮzۿSbr9N>n><9#Ec۽ lO+$u8ϿeMr㌀ҩ#r!:3cqG=;t z˒/`` ǽ5㍠'UC0eGs?U]U[Ө'vHUeG\66Pq78ӊR`px ~_ʺ)_# [rw*<ީ_fs9SD(FnSN8Q$ARIEg(0#lv#y=IFy`S{b_.)!yW홶8矘i^bo|͆͠皍?gs9.Uss6=}f쐸n9M!'$=q֦ϑ=+ErDY 0:nV\'Ӟ?y˩2VOcyoa+l!prrrEN8Ӛe  :)crJV.yRNSQ3m\GZʤvfWM[ :ʕYpSzr3(u#x+4HmoF$ 'ۦkf7{``m*2A wy xܡgqڴQ2xÁt8} Jy )o_Dc :c֪[\JWA9^Ӗ1$8wr/;py9P2r9'[#~n$@8ϥX\q8Au?)e;c=tBr7`眀F={R-hÜ `O?jXr= Ϩ?׿z IOw8w[= `Wlю<ѿp vLP ~.R|͎8z=2ɪD u֥@`9+Z[ro~)'bUbd8# qZ0E9 Oҟgb'+;/ʧo#=*ノ\IDUr}F}rzZe,r2Gӯ֕Ȫdp9=1j+va_rFsSM<{v3/9Ps[fI$'8!rN:ۥ]] 9c9>ӝntIcBݤw8y~q]Hq-v~X?T_b{5WuulpAP0IDیc<2k0v<S/rX^'H (\$ 0=+w,I򁴆tW={WgyqU@?)ˑ׎NGsZзϷ\ {4WF8\c- p W##1u\,է{+v#a9sŒc:Z(Z}JZ, ؎g5q& t铷^:9gNՔ 凡#sҮ%NDpq{+392~n@#gʠ移WJјB\`Gq }?Cl㸮IFյVr9c?s[i1T|}0iF9V D*b9uv}Tp9L?Zƶ =wֆ6KK,]Np~'oZiS8:1 zX+KUC7Og|lFUTĒyt?,#J{WonA=O!yqovn^*O+caSETrܮ<1+k"?)$c N]N6&j`5 vȪ-j B޸Sq=xVRHdhYyQj]#K.H,^;`}k&~M$\Dglק]1*njsX^ﻹv\8`Gqޛg;@9|{iqL ;=ZFz:~-S8]*OoҲZdl 9p +`uxMʩpFjO~szv)AGsy#*c1r{;խv"$ag1?t`H=|DZVՑm>F s`ꄶzu>zҳ[$9=rx9,qkEe#9Q}+*X{?z{֋S82=4 5GOHsWl g$އ3'hN98^T^FI㧧in(;'Qy#'@wp{g;zs@d(  c:RKrc pGӊ]@pЏoҚ[a]RyN27{,&Ln0: ؒu$p}E.DWrl!<'Qp3qu= V3pv(~V"Kw}iHiKpKB>s#=q^=&/$㌑T41,t8czyLpx?犎K(v>T-0VR;tӁ/rx$ssqyі8)nB@U5#i.TZ3"Ic 3N}MGޠ7cryjQרR u?=# lޘ;qE]:m;B3As=9g`698vrs"^ք;m 9F9#c8tѥIjT< n|T=Nxj$˃^5$pYHkZ=:g=ֳr|2{TsO׶*z>'轈$N[O6#.=?^>3׎qiv njm;NszbHTp˸AOõ5"A {A;`<3dQkhCc դc޹r*l+מ{ =5yx*9N8w7\dG8~[u猓Cc)2,ryd|c}q?ɠg~WG8FR >͢ qzsT1#pr{dN{eQ_Zpsu@ĭ#9 ?Ң\8z "OU'r>nއSj1?ȓO?{9?ƦU=:{Ҏzcs۟<~o*r@R_֝B% 8(S,*??*RQp+P2 Ş=&2*7't=<ȑRִ[5h.;8IRGf pGV19\z XpGqV ~ $ws[|b;|p8眀?ƴMÏm?x2q!cg\R#w*tkOc5\R7(!:CD)AL(,rAP*v>+V2p23+CE!뜎yr;R= A*J.7mn`Ѕohn#qUhsΚ/5ʮ>a zoy< }T{X1s4nn\{}(+ِ-c(qU33C ,-7usz*oЯ@I+s^JQXLow1뎼VQ@r['|xGR7qY2I lI0xSGwHc'A#=\o}D^8NN $R%l} r2(؞BLSߞrާ<枤Ic19\{o?gҴ_ KG`ŷF&z/NHJ~vWlcsR^d V++l1 =3L(w7VNW'?R}pv!)|H<ZO+?( g2GQO hW9N=OgG+8-}7r¨꣩'ޚrq#OC6 #păq=5- nn:g}Vcq+yS`]*eoA2Ɍv$sΘP9H,{MH4L1?0Tq9P 9=檽o,)߁ J{߰Ԯ-tF.U\gX8H;O9ϭB]JbP̠+П~FݫdU8 lunI%5-υm]E!pjh|}}y=WDH~\F  2~AC`??nC@88ɂz{#(Pt~FI@9'"xۂFYP3SzޤeUi(T|u)< DP\qJ"ףi]?Ȁƫ2k9]s֍}Q +"6 ixVoXEj;}S]TQҳ|ɚ E\^qp?r t5ݟYa@ׯRjEp烁6tR]Ą<֑GM䜒r.'8 Z/ x03S?zι7#8c]tF3Jz&cn + a$#rx$ CZ=cӛesxBJ%~R8 6ҩ=mInp~`3vBG1$v`/5?8<%vth>jW_I%Ux ӿVrKyo*~h-ju>H\&6 9'8[tc Ӂq5=ƶ@{1[ƅAn d4! \g>*7ʴe0rZОޥFI#8_{n#R%]Y ğ7s 97\wZ*[ЈH!Iyc[G]=ddgw?'h*_R[z'kFlUDLCPߺ_"rOOecx\GyXw{p';x 2d\ms5PNry''$@'jҞԙzg$txPObp JpZbv2@BV)3Ȓݼˋl09vX >w=?©_d9.zQ70:a~_rTJӯTa,dk_[$'$ [g,ө]gq?.1=Nzrxbx؀bv|Hƺᨿ36i\c @ @حs 10kG><2aH uV%bfzVv`p +OsH&9l6A:VNn?/˒`񪨗/ >H`W|]>i%-NWb bp:nMR8AՌ9osYZgUI:T}zf`L&Sx۸~[2|+?\t隘S!b|ڣ :m?W<a߯z>^__R6*p{3]z :U*12@>DwP1ң5- Ӧ)|qNI5OSB۞; c>CӎZzƦ"rTÑ? Η\D6 \x<՞ӹ~~('.?Ze󟗜sWG0~]s3aCC#:qC2d펣s 蟐QA#j׀vꄊ20J;*#^՘:(tiKiPWO&%u4ٔ ʮAJ~Ww|3RS9o2e{n+,$^984?[ǩm?OV~"$WG~M#yr9)8?\ИnE}q7p~z3:7] ?=18#3V tYd+o6>9#{J;A5Rybi';RqJޚM -%1!_v>cČ \RՒ$I#&A]| 3z?S'cg9)NH#8(Zb9?N=N⣧?B '(FgcUoOd =~hPt{|"}A<9<6޿JdDݰΠAb'I~%-;ǿ~${Ղ?䟗KuޢJё/5@Fz'rG |<lV {G8ŷ:wL2W9Gr2q1Rܝ09ڻz0RFUVr` gF9YXx3gcer̾9%e 䟠l܃>iN? `9,ĞrN? Ԉ`*AJp N9SO$*rF%g$A*}Ns\~ ]Tvef}+~;Vf#5:r@'V8|_yN=h?Z魆v=0)/h+|:;t=O8\v^I8|e{U^^VpNF>Qⲏͫ쿮|_:?~+Z{_aǶj$+BZ1pp\f A~]9"oW. 6Hnܜm'͟zrQ.(@ڈ!nU# gOHt'$w7G620'랤󚡓ۀq=;ծ#] Nl}^'sQ6j"wQ:qq'^)yM9<6?Q(q8} M8^aswR^v.y~eϧ'+TQ1קi"C~`,A#>NJ%lFs >cF1Pq򞟕LzT%aRv1ubAsW|22nl sֳ3?멮H،c֙++y=@-/d#6ϩ||8sNבU{m"Hym򫶿2?e O:Z~H_2 o? @X=xyi{艹q47 2:c6I<{gotRJ9upF8f]t?й Whҷ0ʡpzJζ³|$jqz{p6N1qwR32\sV;^ ;Ybz( gk/E8› ~1Z7NmN6~rFN0H/C[l89#=jnrz/RH,3v^%TRWӜ;51qU>EyPNry971$ZʏrMh(beHXG' pJu*MrLN8鞟ȩ X@'-=ۻԬn,|p8 ]Fqؓ3۽$t*rhC\#&LOjXፈʏsnrsVre'b١ڟ.2H8yfv>e6+фW&YY( 7qwQ1j[c 7(Y"FG󵕤ݞ Š\t'vjE 6qs>SjDnyFjFLc,ש(:{`qUzG4HGHPOőǜ*tјM'Zp(yT#a}W?׍r9R{$~o3%LctAgOYM͖OlF5U/ڌtu.O?ZOg^G#:gWo23T֒Tbė طvgE;H?R3 \U9dyU ݕ g{ k( vicVs\qUN?1'҉\H# 3Jrjt;?#K$]n#/q9c$瞼gt9?=Gnx"o?oJh:FM'@1 93UT`pP~jSo99 o#?{/D&eK 1jH#Kz&mm 18EG~_uGqv=:pְ!aez}u#1_v :bd h@5&9eNv穩_{_M7c"3`@5J * zϦ3Rur:9Tw\J;:9|=k"O2q[ wۓߖb} #S֬gcr/dQ'珥9\~:GT5gǟsT8;CcEDbg1V֦z/4"W1}Gn=n0{ʮ>`? =Ljh?7ݣa=b=2ҩ%2; 򻱚Iq֨K{c8a7mKL9ssTgz}q[UI!sPn*FqQ=f]swA֞=Sv>a\F_B c>s߇%{Q7<Jb@Њ߷8^@=&n)'=3=q}l޵9a](cN s}6_cNd')y#,:UPYI9WoK΄n''VMzHӷDobgCtjR,L .T@MvW*pI 89Wtv1Kra^lMvw@ǥjm8 }kr>롉sn@NQ'#>>ǞⱯ&?i^܎᪍7$9 5f1 fN<'9#8횮o|uMU]vweY@OsߓVbՂg#~DȺ'}9UGo9DTv?>Ҫ;C5 O[U'>8'ojH˴ AK_BsE^Gp:o_OlKЏ_9~϶~֒1[$6* ا'sִ4RY>JJE=[A%@ɞF PE ӹӌRdyo(ʯ`8ާcϹ 7AK"{O^ZoYH֛`2僜wcAgpI'R{Qa'4ebЌLu8GfY?.x[\97{yW;RuoRA.ʯ=s?֚z a^ Ͻs:ʨ큻64] .=95x3@gJǧ̩oqrAʞy{ C2.=8r<SjE遑N2Niet~O(b6=9ddǭ$LcȨ>F*85,^>Ihܜqk\g;r{ DH:ᚭ1*5hnpQd896zd0Fqc$rVZ&%b~ FXw뚖4]`sߐ oҦ}Yu\°QPqx9qJ׷Q㚍^̓ F#i' ~V$8NJKfLҲI8=DLJ~֡oos [A߁U&Ȍ8$$FZ2zy$$8N*Tf8 ݉ ysf2LTߞzGmy\=clnd8QSeX3Wy 3KlM"̲:0zv nZ99lC_En7v@K19`qZ1i^__e$f2䓰>#Y^N2vHf2&c,Ys8'h1Td֍+?OH T֬g  r FYs2[ X=N/}‚8` ~' tfB}W-ӧZ1g2y?(J{!̗h8 F{(k˗*L`!$n5N \hw~tI ÑׁqL`8c8ZUvB^qߊRvsҥ=>C!CD5:;.46 !򉅁 EN\L(bT&uFU>(Sed z#dIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/board.png0000644000175100001770000000051314614030313015443 0ustar00runnerdockerPNG  IHDRh6tRNS7X}IDATxv!DnؑmZgqwW܀tS? .!(p j|>ܜ?x!oQzU"@zph8Y=Pg!j!F\3ho FC6Z4 +ۓR)22Y"njIT1_Ff.p`";K-Rg-b'M4PUdHscmи #Z!1 IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/board.svg0000644000175100001770000002227214614030313015464 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/challenge.png0000644000175100001770000000133214614030313016276 0ustar00runnerdockerPNG  IHDRVΎWIDATxSxdYǶm۶mmc۶m۶mXgǼZy6goy:FPTF-ʐk|M8{'[('m=b˳Ao,>70j5M/Q#v3$΢-l'•k"[ A4nE{E =7ju1C(Rϟ2yu>DW"+`|CBDNm{tvG}}ϭ;j|Jc|:3'zM; 0jP%/t$34oJˠ:5µޤntDD9 g[} E^'$t;}y3ByF}b`Wr!N0!wS#?_$;KBg X{Qu_Şb (Ǯ rX%b]1YmAK2Dš^%8ryȇƔK8c٘"" Rg;8̼[X'*2v(*Afh9` 1&|~:?`*R脾}A<8m20N g@S;w}{cD7݌&&:;.lݪ[2|࠭!j#tsF!OJ opzJ@՜d ڲ)i]xeGF2D;ݠ6^0%ۦO73t(m;>p~H&jGd`BJ? x9a!VM%Xԭ;BzT'3:l!qdFÏÝ3g!b"amF! 1&GukwY-["^jMCUXae]@ӞE(ln9nn0@ z;vAAo@&d"#/Kdu naQU'%%Z Tr%wd? ZM@:A#ɷÒX4Ro Ƀ4 mTog׬Ѵt2J~-RKK@#;u, XG68)^ _,8х p$EêKL5-~םٸ) Pޙ@KKIA=WB ѪՎY^ݿϰҺ Ȉ6LM}| K :oUn8߽GjP5:VfiĔ),]m.ͻ_P{*cM4YM-Un]y  H(K־T?jTڵ4`:GXХ *XqĎB jopN{uY W^1V[>*{b #e^]dXhL=|Kg7ݓ'qūV'@C= Gv]9Ƚ_ͺ܎9sǏG`_,wwss݃ÎbmQtQ,lvXX,ʰ g E 0U H sBQH*yF(O ]ՠ#C/,XРWnPXS33OLݴ9| ;tsLX:lĜt[i "RҺ#~ {ڶ6UK@Ĩ{JhxSHJ Sbm4]{n׹}̛#Ջ )rYbn EaE(\$7mz`̘81ujqh億;k<9|ի?>4~gd;2'RpfDH]tv6ˆ1o3wAO.^L}{ Dvyuj4'AyMWeK'^?|'Od2WbPDFeڴi3]\( &>/)tj޳p!R' }h㶶2B9O"ֱiӮ&'??u3n=^MJ?bfҷ?˯%sڵjj{D 2z$ّ?'-理` 0rLD@M4rڱcd$1>i_; N_ZJ6hkdb4=A\pXqxX)HeOLVwjXa_LmO!r# 3 /x͚٭쎉fOfT|6!G1ci-]yqv'O ##)8ڢd6r8af+.f?˻wLY_ U$ ^0f 6})sKٓ)@y D ѮВ#Y6z `}uޥ;r,5uC|!}57VmQѾ;n?8tTFM@K5.n/1ۀJoG -8GҚO S7kʔs3ιIM1 Le(RnG[b TR}?A V(I`&"C ]"M8S>܁#] ׃a/)HeLF&Ҍ Rv]ב#5xFLSƎlԻD\ޱ+@e 5aCG_sg@lm-Z1Wq OJ[, >k%exBG@d@0Idl?XU'Nz㋗g΂Xئ穤f7nz!D@$fm8u14 89[4cD=y2aA|; Ftȑc[ |[),@+)+,,>>xp`h&A$o_`cTlg ;-@ݺT hj:u={A6e[j.PAs_ 7 )zD)t⤮!)M :szZP&N$%[8c}nλ4E^|iVPc r"\&Y6tnbfp\;e(OJ&7zz˜,p78 hD o$E+,RK SS0d1Fcǂq ?_'e4pd0fLYbnwJl/ )BQTΌ h 'eEС4ю#S|IRat L9b)^K&oDB"󛷋Ze|m~T`"{:^IpNΦcJ&"-NHC,~T4aS9r(Qe-(8wC`QѡJC6CծyE27}߁)5i:U$djO/8yʊ1{j0iҤ1`L^8e+>0iVOrA\DIȬh)W k>;PϿNGjJFW9VL7uzGB?AfbgSdwfcUH%ɏ \ ^=Ul'g{XcҼQ`npEQQlӸx h߾,Ű."eS$DMÄL N"+,wXм%mF[XmV;]>{ &6JP3yJїEW7ԔwtV]LDu۪>0.@5?@s#~_y *lo"-$N$5sVK냂^; Ztݍݽkkkw7eҒb b`b߯x5q_h;K}:x80eHrm^N8s7-f\F )3A >zj9y 8 `-~y!‡xpE[CΪmy5((&ӵS"q6 @Ag:t CiE"kaX#77mN~ N5ϔ jnOfdTʸYnp_}2WRCĽ鳜 ݌ ~͑-۾{Q2p9|x" Bb: :qIs&;kո)ZJ I<<-d,!/>Vnx:ޚϘsJcQj0P9o5j@B#ȸq+JTWV:׮;ծc 7!iC#NZsŰOo,]f{k^~Gdۛ'O*OoO*@4o:ȱ^Xjˆ˄#nb,YPW5hi{ODu } |bkM) |p U㔃Eeʨ=o_^rX@zxpEJ'QG'| \ͺvDIsA/Q_\=Ys2/<7oN7T,aZ/װvy$_߿|9m3h©:;㻩iӲ&;>衊ࠤTk&͓6 bU]SP^j A:ML37w+cJXA[9ifȒ9 ]Hȑ.cëJU0Bs8#v[$F22Ug5Y B a9 ](`kq Vf2vL ~YP'[H}9PRQOQAN% -t+-sW Up޾?__zu 5^X>YMmlzVU?wo;/,IK{z Rz%EK%m^]AՃ{̻aV(>$!c٨Ƿrgf^MNf& ZI AR+8f߫ F >`z7rRCn[ժ;אW$dYfx|d`1zi]u'&BLE~~(#gH|7?c+E$mn<>p4TPEgϮSXCR -9q}[M=keܽ{߿|9l8*r+'qo31Q U+2p2Up9+%Y̤)R3#GUVs3wFlFIZ&1G=ϖ|o.֢SiF!p6m> ޽Ro15̙ 5kVA^FKeu6xmX^ob"E Uk|iM%YLMI|k_1I/%ի}lePvzԟG!^6&Q9Jy|֩D+-[-%'{xio! ǣ_&W!0 ?k۷x)]";]5钝:|n2ޝ$~\ڶm[ Fc~NA-v|z*L-ڤĩUDmf>}dfgݹRlb/S㘯i{D#+7~ e:T8`_~[j^//Ϝ3?8`R[<m`pwot'a'DAႫ1'HY ?Z(QgO1k츷د m͚[LJs}5/ws7ȧG/ ",Z|9!U>wRti-~r.jNE*8I%mx 86+d\eTǕ?wGij>d%]>|8UqHo>ˀ:tbGQo["%|y|5^G-Fsn۽2)SLKtDHCLJנ%M07_B^gc 0r+ ;*w9ҋ?8Hʖj`k~ێ]3׮&J*АyӜL LZ!}&  cvŸR%͞M@񻖐5@EW2@vC6>/5/FG)I 6] >.X"aެ`ԌIĀcM:F-PVRI 1+iM,rrh$D*쾸֭ߖ[un.Y§j5ߟ]rx"R|lWnWR!lMn")c&chE:h~TKssC}Wkdؑ%?_aɋϞؑe }eņx9.Qxq۶k:|X*!l2fĨȯ1~IhU3YF/[*aѺ f^YFg}QΝˉ I)r=B9T=ɜfdnWtq--ZڒKYueL6Pcڑa "lHcLX 6j|@JFՌIր=zc|95Hҧ/ح;JXL]d)O%{w+~#g~1ڱ,o55E¥, (v2܉nyemO{bg]mw0#FBɿP7근':t5c!5||5%3_AѼEˢ8V#{q JW^޸5fV≅񵩁9FXknS{sNg0eQM0aL8DD",~c"aGȤ7-,vL,?N~nxhf p3l;ΡxWf:I].[fdz:I¤ \t([ dd+tTDĽnwc]77H[Zʢ/_Jqy+p!R1DB_0-`jՂq+WHN`‡DxFvo%nނ=_l[ 蔽uMf>2ȈGLeڷECOCvU^y3˖9+BYll8k8w\R={ @" Bw@D/++H5`=zr"J$6ovbNc*1~:s?>[>;.ۼw<e5"A("8D<>~5f/KjA@=3-sNj"#u<|TuSj]F,ZR{1L&#U3.qOg|~JQx{۷NJMuSءs}9 9.Ha?AiM!@%4^I~)ns@d_cgqq ۂR-ع[,ꨗXf8vx!&+WGU:>fm%B:V~ԸFjfL=ڵdrpr>?t}R*^b`EeGEsɎՀ<VC7o~'6Ԫ{֐B53Iʍ2̙͙ǿM tń}TQ{fh؄^ # uS*><* }w 89qDsΟ k|TUһdT'[.r Q > Rezzi^z|U[P4n9`*m R֭2هjQA9D/o:E ËS#AP!҆ :|JŁ0sUQ(['+XA;KQC'NfՒ} " b% z" :"rA.ƶqSd!IwxqFCC`dn7J>@ɼ>$0zUefڮCGѿc y0Ԙ?u4sHZgrUuh9 hV 80cG16Vk`;`OvO<e bUϲ=0S_董:E\ڵG-]L:3_HީS_I{V!R7F.E%vy̙$Ta[bZ4j b7ϊ8/1I?qSuwCxR&*E!O46dE"]k[V.,;n2gM-ں-w۬z1ǤsWYZ:lv6jg SvCB=e& 'g&$>{/a:E4TBGcGcyOB"[58s`T +5ÛU y #׷g[kb.r,<,ؤގf5k^fgFjȗˆBmGv c^o޽@ )\r'" X*lcؑzGѣ!6D pjX"P0TdcXzZUw ġs嘷 5ceM%2Ma_'j8-V쵰@ڵ;x44æO[ͶtI$x.Or$(zãFOJ"ӷa5jlUY*&j1?8ɣp%%n/K[EUIZUxTBIei 3]\uS6;N]RWQ$V\\VI;)fR|+m6+RppNzY,ӢYdX5Lrqy9uP0!ҼLb,>Gv1;̎O`g(VA,X&*T_x6<\v۲ Aʱ}tZ߀EqCji3B&^?k`rc(EJG,@"?wڶޯn}C׮mق[@lŶj\:iDٳWN"QXkq)P0bR*jIm&c~4Uj%iiRGKx"ns(M{ =E H$`ÌA:;c0)v./^ݩ鮠غoF4L|vJ*ÇYEøI;H'vz)y6'"xah˷%?r;d9`lj3F>jPFMG.z7YY7޺IۧO^0u6́%>uq5+Kv "IS&eZYݎsƪDթCFyzDSqLP۸n 2=zeREرl䎀?dM޼{IGDR0Ū>8Z%:QP̨pgԔD+s<ח}g ma-Mx QZZnXs+W>GǍ;1mZܹg-᪓uw~~y;w>>~=ufANp0 hB &JGO0}w&?][R ѻ=昇u#'mdG8a"Q:-_aLqޡl݌[MnEh4#eULG͓5CxG.5(Ǯ~V""ZæIS^CPF^7JEL`8>{sKWnI7u:tu(1-k%~?8R-}C<ghk@=M=43xp݆\,!V`×)"~n ><5E͛\Wǃ ))s0n*.kf"r9'OzxԜVȭصjDV乒 u$KYV)S}GjIʼ[ G?4EY=iR<RlT6i>^I5Z04J^%s<3,Xj I0AH[t-.qI)C7oFK>#GlMHթKV:9ƍgc"~[[R)PN)_WuS*&IʺvAz\aʲ$K,OϜh}/Щ?tz]t(<p Jr$y,A7p UjDO/q)4L3߷?A ^l"&Nz|셒IʰŤ]֫o=;5k Hwd/${]\eʕJG+˕Ur?&Rsd%Y( cwǒ9:?b{!_<~ibY ;&NwU@ uchK ٮ{:Ghy(Lʔ Bw@Iq@ãek6%O;y|}wQp5;ae|%kϞ}n.]•, kMeQݒ-BxvDh㘯_65nMxe6 ;F+Bܹ ["u Jϩ;8c+v؁wO 7ص'֮"ݲalEB0!j F(P%HAňvkB!ªl1u;=]KͿ\rrVeY$\tHD+u뛫#r=|8n܈I?ct~|XͲ33gρ۶MîaO4WW$V /B31$2V?{ ̸=!䥱w9+r">3o`1;$6m8g?|q=M۬GpMzǨ,֫q*G(HŶ9{)L7nH)xW Ňo6%68Db!~,@ ny+W$NMsoJz5IǎC_I+{p+k/[tր ɹlW!.מ> DXi˰CӱQ[4$Z8+kD/X-[3XYC.u D ~^/,eS k㙽2oJ0GgcمgΖJ"!Pb7"߈#L#-3A[CPVmf-9]/5~J;~O13'鵤=Rs zM qqbSB+6sƘԁ>hw}vjyms.EYr#Y_d7"4u?dwvyrԑZήtKsR}^ᥩK;t(԰1w%b=^.$rYoT n 6aW%^sr|m}kPW>}=y1VN(q٬;5֍_2k(?{;.ÎJvp-w_Rww&Mg~$u,0}3:G[Eo $f "~'\UzϮf[-ۨ]"8H^n1+Qn9{G.-ZMy<وHHcU5!G+J탇H#Ȁ9k*;$YD|?(>#ၑRm-LDNp藏\OرvI"lc꣭W /? #Tj]jHi'W>he0\|E||`V K|vzܞ*$M+IK97n@+Z薄0##]ae ;<2$Lq0<,7g!)CA1~k~#FQ۪T--p7Xxх45R^L=xK;™O#cH]Yt$pҮC'F9ZiG["((BD {Թ 7bu8 z%4LjH=z )?M^FoUԁ pnvk2c diQV}b͍JʗcbQ}k׭#]@/9[^ &u>[ضjMȊ$m2Õԓ0ܳ;wɸ/dE*$t0j{p^Xe_&"z@3YM-/<\fTe6c/ 4WQɤm)]OOp)]nh͹C f"i2pD@,C)80ѮC䒴z-q=>}յ׭G~vXk5knx3|9k{.$L` ڽ{MD.Bncmhjլ۶ ZY'n܈k_|3ӧ/._Fi&ZN ̒%h=ЫԄ =ZI))2Aϐɥ\??k.gdbu[0h%_Y^x  iq:.:`D' W7v³; |T;M]\W"|T.JTz -QQ^lV,5!]Gc2ٯ;g;ˉO0"'0P+BY=) ;hϿlc7*YP_ON Igs/%>hgJ)V#n6$wu=o2q"Bs@ &2zLS.j\ëC]Oo{!&kчG;8/i:3Cȅbޠ!ůO!.745uz5u*'99O33}ԥ!ٰ,K)Sp7Njz_ǎ={xt퀗 9KL[O8,F _f9 ^fO؅&޼˻v}\MY*: JOXP"DJ#{H= 8j7/2 .,gK>QO@7(, QJ‡D  -7`7ctyN8(ɖ+>ͬRCuvm|}૏,HK»E(3V0rOp4bGA&*| MRWɓF&"a+ģDDDDOy@n?rڨon ;4ݩ9uX ̜U5G.<)EΛooھ)"tﷰ'$0+<]x"3"P)Yg=ZFÐNb VeuMzLYM:YOJ.ON1kamumoatotxjo2>9wC_ja엳>ŦilC-aZn!rcMiQQvF$r1ʴꋍ\5s %.8;LS!Zeg\9.sJeR2yHw<˹miV|X#-zvœ:f*[G^ZBJ1?J5=ث4P7tyzSN2jMG! "]\钓S]=vþG6|KfJʴ /G.BES$b.݈` 8kfaX(b׍J=ܥCGFO?m6m;dЕ8 m+fXG/Ϝ|Ԛz=m {K# M:]3g7scR:A0(77}&FO¿SW4O_/uy(6Egqĕ X>+>ޢ*#32D.Vڜ)Ae\)ɅzH8x6/ 0ܨa[H]ΟׯfZZ"Ê!/Z~^br?9"hٍKetJ9:Z߬SWUK Fn㭮kgw>d<h:UF$A; nj?ecUECfj_v֩h`YwH>'d2#~632*r;޶0@#6,)~ʘIM] 1_q1S0v/#==N!sRD;f[6fo=/^MȧbvPH&/T0tiŢUCVH)B$1EmRYLV  EN85 PQKwZ0kz 2wVEĀ049A" ֲma}:Ža#sHS_rҎ;t_wsȼhhaV)o=ci>xZK"D t= t:`JEF]|8#IٹswbbMY( t^T]عqw}R\9} @Q92HLXυz-kѬް7 @8T'vUM#xc<+ ." ub^zBwC:ȵZz:8yi͞6>rv'U+q֎iuo9ٻHAS٦-رw2| %տwk lz?{yMo;j=)8S,Òج.]~3NL)[2Ma$njtiwTԩԤYI+thYCB8(/c5P1p, ,BO%.sqmr99N&%jy eU;]}vxѴ] exώӲtbG E_hv^Ӊgڒ`tμKEs+|@U;LCG|`Mz~= iв{< .K~ϝ߈ jסPڰn=؃|M;vlHk%@SSD.b]%?kqv${MH~򫮸MIInƝ6dR|ق %IPj^U[հ?7S2AH:" >kGٳczh $yLfnX$w{5$׼uSǀ]x"'G&X\ H2-yc67:iJSv:uŦ4Ѵ"],u:;ĦWp)ΎY Rp RDSTVSwZmW[jvAMf'?wfw)Ks-Y>Hj.R3!0rY40 * 4|ɻ h7v>*`LSR6ijoV"D%]&'A/Ư^e?WvlãJ Q ȟ^vHxժgiYStX*Lj7sv6|c/z o><>~ x|qԲmPm[1Bt?fiؾT Cg7o` 7rx76wŽ#V@AI\StY 9농}i9vt+)Ǭm0=-tlSV&] 8i ?Z/?$ 9q~5~Z$ SqQjhnl?apEӊw=%abvqΩSY7 mT[;؊QL%,z973>y_ ;Xs: LRȖj5{v:`xWx eXl巣n| < G.E׀0Kٿp=j*Dl+iL!RjSRԧ{T끍w3N3ffb':8 LI cc桯>`mSpQCHh_ba@7l?kjS y 8vp_d&q5op|k tr-(A_oěs@NE_>P.u*md||j{$n;7=lnռ%%_[eqCG3,S+ =`Ԓ&[X"G f+v8G˰` 2^zIN-FaU C8DYrh~CD@A.sG8CnBui6moswP@JZkrw=ǎۻ/XIEv/|k?w~j- ;(e J/FGK%e”킏51a^NA{ؤ+0"_6> ֩/z=8 C§)ۥ[SffU ƇZp7<ͺv꒏߭In XѦ h.RW z2;r9G?񠏳Cǎ}JD./]qP"DzH7=#`lԝaO?T2] 2Zt0XUgl?CAq:0d1{2e3hHH~&Ge:$fn pGF|kx360/ݖS0tIvsPNGԄhڪ5ؑf-8ԮkCaoR0FޥۧϬ 4=z 7dȰa{v27/c4*UppSRv 13nN< CW~  %[ TY* `㊷Գ_˹; J}4 ADž-JD4ve G47Ač 6N&]|ឥ?#qu1QݻG1 9NFInвנ %"Sǽ+A22N* ~Ty?]/@a%+@$F 1*a)$t{snJ9q  }?4 ;0V\B ۘ t=8K;՘|ZUo߾`_1qzi7j_,{۷/3;N͚܏BI;̸%llZjw[L0OeG@ v< td!!}NmY eQ,ݹy\WNgV '0T/]Kp8w/˄x'R~gO>5@Ĭ"!(rQpH-]殢|v"P`o҇ݹY?/_#7o5oIe vo"0TC=޿/8 ]c6;`3Ԗ WNdR} vX)0T9cKC 9.mzPPCI0]P|>Ǯ^}#" MNxE*>`Hָ)ao`Kp3Eq=/lc)1 1<Żc=+etw\̟s[,S ʯ([t &H`{񴰄4yngn gݺ$>LĹ#ɝ;8()|ЫŶR! %e#XVTP!D,k`H1]-nڣ(}Vh(k( aǢzV1903G'~b8t a--${-]'Z;Obg_9z#I֥Ϧ_ <%eruN܊\(b\qa =ےfT֧3$:;Ub 1@!gOn_H[.??a;􀅼jwwtJE7zY=;S@v?m[6rmso^~B*rs~ans5&!S`8tF?vp!T.R\J\a z`ָ <$"VX|C{~|S$4jĹA@*͎Ն9'A8TvcZzkؤ.+/Ew(|enyЅRO)6((ƫƘ1o~kdI_J>4sQ`5mALJ_ֳk/u=vw=ą-Lk Dg̦? ^d7jY6'MZ)#Tm{h!C(#@ t䌥;yû}(sû};Sw_'ZqV}t{E[AwDk`5C:>֮磦E㨮=Jw=j\SaZܻu߷~]K;vAN Ilk 9Iӄ7Tqpwt{Vh(QxC"4@ ?c\ꍯ< <7,n$rՍa{EA ]{5 8s 26 R[ $_޾SjG q3o֩WvɃŽeA&WsZ-477 LHRM{<⣞*hW_r誏Fug0ʙ3;# Woy*LyV('j۩-xKܘnFu넪igylϋ 74ՠI! |\k7MIE)``VJ*O`16;7<ʼ:tHA! X}`KSp^ãj5*U~OUȰKb{|]S>Y TDRky}OzU*CP*\`AffKƙ#$`!;J!.QDgڴl9vNQ:O4ڥaW/Z4jٷ*n<}cP(I ݁Sn\U,i30VtfId^%<|/ͽOׯ_6}Ԙ:ǐ۳EKbɳg-"rz }fZpiC*M~3bc:bU|`75rtR,/%|5]#]Lo;eN:n:]fYy?ŕ#u1Ob zz$ ~m PvG[Ob*>l"^56?L[g 1I %,l>ңC-[{&bDX,f=jrMژ̬nL0DGI 6 =p4rSQ|&onFnN6jԋ2: A7MHޙȴ/.__t'mدnهŠwbtєz9ы#uoŃ#Ϯf;_A [+&l%jd}-0y'7n0;(BLRBdv7guUؼO"9)\HY{sSwV*k[ AI@jDG+U&nږ5tjol4tz3f G,Ku_+Xmh ݤ&-':}wfwǮH %"405 ڻiH$2$7iρSvSaxvXkr$h/IzW~>|$b ;*J()v(b@^+/y5h+/\!(k$+a;DrDh@ESpxS& ڂcM}5 |Z8fՠPt3lj#]P.zFES 3GH:Ne^Sf*>l/yaG pQIxŕ{/فΎ-;6)zʫKh#IfXͦh{VВ |t)_bU2f55P=g/J"',1흠;`0Fq=b޼{ ۛGͶTbh·ϟc a9|miR,RR mpvTPʩ;H q+-#棪.o94 ![@Ia{y#-l{QD-}b\G o_(FAw=dJiQ&P.%9,]Îyǎ+1٣wrŋcy,'Y*@pPYF(#8ҕn*qif2bi ~0giftxb'2HߠE,wau. n,"95M7;MeeÔT]-a ;m$M=ybsn%ǩ^7xv둍$ kE-'χĪ'Ž+o_GFZԮ#5"%YkD"omx礉~55Puƚop%fq#eUz bpIk28T! ||3AfFzh(bjej9q=jd\rٻv:\''.(OZXI|%vJT 3J)Vה)-Hd)Zm5mH}F 1h'vC{O85Iwԙ#u 鮇pŔGȥx_ώ49 {&+HQ]lp}IQҴ O2"o0Pp !SI8[A&\R;zK4'"6DZth0 l|<>B邡(}u-BxE!F._]~CwMIu.ZLM^>ʧZ$_=AKJmjnH.!KmS-%b,Ci?s74hѪ^ Ye_˖ZmvjBDV+*gFӳ X-6,Ȱ1a:R=hrm{#.ЄQ=?lQ)%lQ!J.ZVG18xciRW4;* AKO+qJ$YD $8>*50`)JCE٧ rjײuZ ]𨤦^i0$׶A/6/ZJBԞ 4u`QG˥R-|vlm6O}wϜZuԌ*(XLNZu Z"Q Zp:pv}Py<08Qz_A, آPȨ,vq==Afn,&=Q~ q!a,9>.RC %~ [DH JOлZkB@SMK߷wV;֐g;q޾;{&J[”2@{ASf甇q;fc(<+>>A&^(Ms:s!;©ϛ7-`kuj`GB&0Zb[WO̞W> 1zFKǥ~CҞ o@X lY_gpҾS⣹AE>5Z P4jo*x$e K% ޭOD ղٱILs˄z-ۜYG"t KEKZN6F:j(!kD.60l|dn4/u3LSn$:ۘ~'L;KECD/A?8'`O%.WzU޳S>S dc+58`Yc>*:+!t6vq8 <{B6SI[ m/Gj:|dg5Đ; >p_|v"?NQlF*cB+3;B+ Ϟu[>Vs `5kTN^F^t:nXi߬'>ɗjsAmmKe̡~O͂p«l3 [.[}Z67]vD^!&6M[!%PZZp*tI]r^œAPCޖ/Qƴ6 [}lժTv`h+YOZW8:lONfGSؼrt,y`4+k6Wq96&N1ú^o({nͅo`D 75gÎ?LO--x] N 06;j=>|y`Ivʗg}}oe+pvMrҊ?4СO/_?gm/Y%̂_[d? ;*^ϟeÁ8&tv M2ONoQR݋7m'=3>>]\+en fAv)(h<.؄ըR4IŏwN>,;. cjy^b{ 4F/ےI%-~ ;4hh OmZh޽ˋӫߏw tX֩VȱowǦБ73Ν3'v^a1ٴ2f,uLQ巨^rKjŤ֭rk@ԬG`I| sZ2#N̶8E(쟵oK8;HiIS48ʐg7oqq<^ Ǐw_<4*zP޶v9ѭqwc55otm3~y7Ҳuajj{_hTc_afc+!|vvj"a!Mpd΀ %GZYշk-2z頍5Rd1ᕸxre=Y. [CŎo6̳BO224aO;|.9Urtu=AԠp3H<>, ta`Ȍec2"5ԭn2࿐XW+V}gVJݛx)ȼ{7`bsXsʅ0]*JgA$2eݣ ȡJF?>ٱRv>J6U=/i"2 Y Fl׃DZs[9$լev:`m$U(B0?Z?K씩Rˇ 񃆏 Ǝo֩\>P=,r OϳE=8,Vpp0{pZOѮEw=n`(v:AOh\g1qh n8'%z4jj7nWRy*Uoy߯__d٢u)|c*`#jՃtT;锓l;iKNBKj_9*'纻gIk޺Ҁ]z_?t)`dzm7fkC8x(Iʰ/CV$;*`n֭+sK1[2E,[9R1vU)Xs6A yno}l>bYQ[^jV㐅]l}\us7S![(㓦1!X[ؼTye+aa(ػd(\yq$_-ƢYX+IȮ&|˫g:5iư92 yX13^}>oBY%<DfG"IeMRZ2,F9[KPxfɴAâ j|0htA;Եe^iH˶GVeUnoZBbi;\#JQ7aϒL' )! e9];}Ʒr<İ򿼹s'2n]aUM1*FX}_t)!YDC$uf=&3PS06ZF||p tpȤt<)ewB"n۟,U#NԴ-4j6@][L6ewIw7()w RTѾ/|~hSMJZtv\@AG]姧4)\QV, zƒM$%!Q{>æ~/g:>&;8ds: $wP#\`w;/oe::ǵmϰȬ'8B js?w%˺%EK`ǡ Ο\ #'z HвYJe*нpaf_yVHj&DZw?}E EC<WE⏅ "]eh|nQ:rSu| DAOD%YǏ[nwGCCY)_ˮ ȇ !zFoz)39bSxVLBi?zj`pHY!Q4٩f緺oUV{"F}9^o>N!G%¾>#YUkAQkbBo -^[*NJ[qkEp .}lRAs%C찥Dy-l B7:5^֑ԙ2zp#08oc'43xX~$v4,pսD|u0/ݻy|}q3g};Qx9jJa_muywNW)7nY$矁T%jutx4!Tć-f|Z$&1&=["Eû?k~J}?¾i߳ϋ7CL*vdёC;t{Ms->;KJLwmVPNt4yr}TǒO3 ;Ȩzd [& u ) R0dPA%Z֒fmu//՝;>ɓćG# Nv{޷ʎ?{h%;'q7CЖQ~d~jZZF tv.{aaGb(ri3t=_q͏q9&{g-ksm2b;)>|J19/"tXɃTʂN,Zg/铧9gm˰go?DZuιn7Go_8v>o^`uxT|:;֊/ణҴL5o#vp @G=_2s\MAD2(`42e}OX/'=oP,b2,ιa2pxFpvC{hRB)e!2M˕KףaS^o>e 7] / ;He|w!P!9lЌ :82h%}8Y^lv r=0cq63n *vϮg{jpȾ)g^5;P*2AKgTKxOQ?o?ć=}KikFWh/CދbaK1i2XtwC08vh.cp7j+tdlؔ>sև/\ʼ|\ 2Ȁkd87v7֋ܽc ^|vL$xMk6v%Tź4nh˱PU3:uAlkK~/[\(a 8M.;uj؋4.5dh座호'Ϡ.KY豜.=PzSڸ^=xٻǏ}W%/vJtQr)̽C',yٌI]B &+,uXp,큨!ev`:J'ؗtjp70<,~0m@ ]+ ېui9I*Xe8kW~CB)JE\zv~ܲgr/#F^-6敉OXpבb3L€r{1APew3/?9sY~)bЮweo9ty>gϡ9}#G8oWҗ. )ټ}ɧ߸%`#IxѣT^"^(eQC\J.5SQsmB̭l ɘ;~ÑWw2zek6xӠPnH8]$~+S]8˙dd"OM07wip7"{ٳ7sWa}vD9ze;B)"R KLy׀vЪʗbͪUQD1B3ѳaą-)'-i>sAi(ȠQ_ƀ#BK~곋EdۮM|le6Y޾Sg ҟC[;tPoXxv\Nو}'L;RV| j+mث; ;˥Ύ#]/SX ao_,$G%R! IV\esiC>9R@EWy )CGDm>s6viD4.Ve47&_<>{.P+P o弾w>HLG6;BM;"NI*)uܔTrηOaqV܃WΑm0#hɃÎIµ4n:^m}~rUPQAs*J4v/aj깕+/G렭^OckFns{3Wػ[Ɏr6`k .2']O8!M~|]!e{fx [jEЭǕ ,k>vѤ6d!%J[:vZ-(0SNYW7)NtcB%4P;թstܸ,7'O"F%bURT{ː՜eQ2‚pj8~#$HQfLVH<殘Sߌvi3kRv)tp1t8ܢ&d. #lNCv}|iK)젇-@QÖݥ#|ocv-;xM 4+u j,Z}od)ˮ:zpv_5 6:/2Ԑ0 KW0 ڜhD+Y;K^h| ?rjP/rv'#t/ywBa,G$x3=UAAΑqo>x~e[d#}TԪQA) GVn^ ,WWPeP1?tEb57::^ܰґӮjHwfHv8 \tdM`Rcۇ,|јtxk_ d}?}nZ 8*頨LQ/}vJfXΰClˎF9}):&jNMS–5RĎ 8kM]Қo7>SDRx%_ߢeYUwUg65CL 2RbQZ}dYO 1HY5,a8l%7لqeG(pН&Bt^0hЂkX= d3Xp5˱N ϰܦGC㦥-i&E]`sJ&uW 4 !`_RΚ`TKkRpAppj 5uSO8XAg1#Fa. `6UMJ堐7 HuY 3i|;sbX/ؚ) s!⺿kRSV65#ſ>5nnɨ+zY]_$p7)L5rZnF-F :2DR[!;8(onȭУAykАm:wSp74N],rP 8;:30 )D;d-e n4{5 Jcn)옗jT^g{eFEM7eSzMCՃ4fS ,4y~0vʡdrU.t.y! 5ăq7xq M"UQ/x AWpPzM~>J_ D+et:oY P=taZ"U&h߸c~:0ofWK)P^'7qw6N-5H|roX/Ey~2? ɺ}rjQ@\7Cwى.t.AV:YglۮݳÎ8 u2 F apH{+ʹw9ZTtUt@ÍLF[DB,; jK~,ߢkPb;;?W,>چ%F6|HTm?[Y*zQlj߫ޖׇg'_Ld C>5hQEvg.)Rz:.YR%^t"vVGrs;[*uDCF6v}n B^[1ҷ5/40xrXIILSXV˜ 5Eʀ.npvc'gF#Z98lx$*E`/)%峃 [jdL3l9wlapZ5e)^xEV߲Ef* j @Â@5SuvcU>bnb[Vt(% v@1W:REhV[Q Z8Ĝ N XP>&-gGi$|XPm7k%aNA2vq[SC|ZX[fL+d=C8YR7Q64B-ǘ+Є{6T̡4--@a vP.f,͡H];bwMqhYզC Ka1bʱѼ2Z EjZu98`'s24G*ʎc';LGu}4#h^P{+>L5(׀}F,.0BY,; HTUaKze"wWmdNMwD}m;8* ߿?K-VԢ9ΞQ^A.h8sh蔩o|Sب q~K63vhae՘,)gGUZul vmЙ 1dSCyp+n E+䆍7G`^]8ukNm$1,ĎZi={}v㶙fZPq;!Xpܳ-GFF(<>.(XIpZ2` N9>RK0lFꄶ*z.e&;&k/Ѩ 5A%8! )4 .m)DWl=:mZijh$UtHPz~iYP=1\bʌ+O\[3:ʧh 1]ݥ-Tᆘ-f^9Xx8w!DǤi(ФyA >5FCJ`G~ dҁkljSx)"  Zh:b;G={'w*Yqqx MlՆH1p? 7`!C ZOZ/"ʌw8:+! [AB#֘Jw!E B  1APcIye8g7١'4Mz!)Ǣx7AcdNhXȠM #FmrvU )Z~իp;2\hsWvaVGLrL:;bYxΨ]ݗkﰛ\a=9H=ik<8 XX!wqp1R>ڨ$;9f6UJ lAj;fZؼ ݨZpȨ"!,Оa)h@w"w3V]vbvXvj *Za:b_gG;*4kb 4ܹx6#4ܥ(^j}\WdC$|p^h]C-FEV'A Ȃ*)|Jh8&0)p%*J;dؿӤF݇7<^uZOi<ܖ>y! ލ?J gj>]{&?xO?IתϏV.Zv6&+;w-W&EzБ=g_P'7ǎ34Vmd}$q:Z8MC(UU@@ِh`6932e٦VՔj" Ѡ1˦ֳ%NcMcƜ8u~8wY9}<]5>!V4kdn_VH)˛[{yN\媐óf ?ݸXCw`hjj."ʩ::0q[i˄ h^cչbd J̜(`VįM5"/Tki\(C[O<7Lkc]޽ !?AV=rF1xt4=h0[Q>kv.`G'ҫRm]s!|E#fv;}jo3(&G:ո!x\uz/,>xN3U靣)@Ф xA C c5$orO|hA!=z7~In|8(qceр]BF&kMsMǔrqܞ^ki]>p8u\> oUl6~)a`cӅSri;t>ym"r0A. v%;v'& eE :N-(HM2=AsI7ӏk瓢2pEل(5yx2Ӥ[|\oywd0?U^P h:MiLQ1ꕋcǭ{ M$/fev&45hp'88G pz,Hs@V";"*#\v@ wm*j[k z-"uic\OL؛$};xe<̗`xڵ`HLH|A_ĩA%8̨ +,^޹sr G0Z8 5v@\|Uuμl_}28i~ cBӤ \ 2ibW4s VP}3gý޼uMȨJjvC 3*ߤiU:Gk+8$v@tBwUE#?,ks?#-2c5L9﬙]Lj"cܔl<^׮Xyqæ,m{$ v;v#]A FC>5n0$8Fժ &+~?} 9:x p:rQ[sL@BZUZ0|q½^F/NކbhR/@ P1q }WvwRRk[^GXߺ.6ViH#Pc(r@4"u؁%OHnOL x2j)q8rHpbkjmh2Nr޻+) i vG||(p ( ~_i!*ZXΎ44β~&Rp`"Cqj 8EX ; d}l,7TVd 8$v(%[e gMkSJ0:ǂ7Y#_ ܐ]kh {wnY3Q]ݿL+g)Mea1u:* cn3[W4q,:Gv`aEnQVa;)7%ڪr#XSEV!7_88>;dIQ `u Te`y4L:(pcH?fzMI0#́$+mFQmO1 )+gO<\)W }3`^f|=ݵ;;T&2Scj0b%tvOŋY>uutLYpG!8;B)ZNCjst@Ǧ4qm(n7Vhn_OL)!4T>?aG a|(7 ܙ\A1 ! 4 i}e~QnQAXg +3 UeGٹ``!dSonlO.]*l$v=T*CXB+1٘ݷ71eE.>!iWrۃwKbX&ϲZKee36qq*?:sVE2P"!:Wd#J9\p E>.&&UfDYᳱM\g(H4Q:m hM^??{_=n(FV7NewS CcBx/ȷ)d#CK61 תwV\jvC NGrbpwD+" Yy|DJ1Mo^Ij66'M1M/?&& Ž^=ALWtj4:L9PTW~FX {r| kf+Boܝ$8 pH 5*!ug:<ԩM}GVkc-k_:`"󈨵|맗/#QE:ryA#CRBt輕^vʪXC8֯57wCR2vS4=/ؑ׮lp$ǟf^NՖƇ'r4ANqhTʨac ]gR!%z6]a8:72h}~|-,m,X<%^?t ְ5^( LPnPq 1lodڵGpz>e ^ۏ?$$$)I[FqJ6wN*U;8~[1&Au\5G4&/0 5;:b0vh*Ʃ;1yWGbK5DSEk\…º GS71ݺ ~ʏ[X"Gx/NCI&לz Lݔ: 2d Ͱw(('H~s+?sڝl¾7JRCnOp8M͓ttK+ts0vGgfdԪ v_"!N4TpP/}~r30ڟŠFpԸ-" MzSPʁ.Ƞ !vS{IԹO=Q>Y3.8X~4٭[8J&L@Cb"]L?#dK riƋ.wK߅C&8q&WB0 RCn)D-GݍC~| Dr[X٘ jž~8r1b(ÚAJ+:`Յ[yxMb#8 W~с \X0o4rp(:0s櫶y*ikJ>}դi!BWgPg{(Kʉ-*-ISqhrN7N 8_46B1ᢁ0ʖ7m^2h<5bq 9sTbjvfGܕcTo:*VE XR|p2vGq o'ױgA D5ඍ%yk?QBR ] $/DhPC HQ.N!qpnǎ?0X@hҥ:ʦN ƎG~N:SGCFc*嵍yڡ삌͘ BiL9M߅H/ hLmvSb} @BԀt"e_ܽk`j a2 |-t  '![fA7 )h56/yW1dRC S2(gXq/g߫Wر$͛OOKXuyrh⤗n=ztgF։yO._yz :6jȯLpM_Ο[-/t <;>|z:"?j\ógc);>egDZaaF_^?fG,ƦB;M-tNvh߸OUc2I F 5ߟ7abC( :M q!V6 RXcݐi oj2ТENph~9[kQ7kbW^+KeCAP7'QlN%NLfCM0Alb]_7@р[Z噕q =<6D_,,!Ov\0vo;O]Xo_o ,iwO!;eyrh10ـ&&4TSj66Yr 5n`y "1Ad:*Ixqoyy6y˥./dȧFA6Ʀ?={^кmSC N2(W,e6o׷oqpܠ5PObn\#lc|q쿭;~1(C@H!mB[r oG5m?{M5Р[Rm, 52o\CA&ȼ#B7&jk>BȐ#jaW-x33OLpD`KԆvC AcHdrpWyO& p0v5PCFQS8sU@&>VGhW0.,ň@і fムf^ F*tS|B$s_8֭K<<1c'o7_o7kVE` 1,U퍐0J߀ U-zlt0(Q(cH^xdOϟ74!xA 4\S -~z>;w3~c5Q"vS )R!p:9eC,F(`Y4lu[P%kS_8B M}⥂|^ O lC~'gݠFo>={W 7`|ޘe2ԿvUD 0O ~)42 LҶm9vڵij(iQap@@I-!kHp0vN o _ow[hpJ39*JX%4 hRPȀ2ye{[իWwD'O?zyQo78Hpě[;ko~j}v_'o<ؘ\حGSC N,թ3a lG8^fgG{nCI%OPf˖(5s&4>| rfa0bC/ƣե< d mqDIRm?PPӶRaK @6l\*k| =@1'd>h r4' TƯl&#$Jhi hX 5<{D>5 hVV6m3ptHRvGaZIz+PWԸy)S1m ;|@>Cuer #|@9ZlFr:mIKV) +Qvyhi$^PO)[=WRcg7[z'nTyӮC2 4OE$B⤐x! Oo828Y%;]tk{2! z}y>iR&]]h['7o"tbh;;A>;m}ܫ[ LRY2iLkb& !UO/ر_ΞslBbN\a5mW8E q5M,F5jܿpÇT!Z? ξM f5ĠS/PT]ב.UTNEo0&UD JhHpQT*,^ ~5Uu&^cLI*}45=H!?!n7$ Fj҄Ǝhp.ヘe,_#ȼF`j߾_|3x]]] ]yK˴R4xVyQ NWy'|#TbZX~A*S2(^!_p͵{r3А~cPm\Ej{+ܕD"Q8fyw_31C&9b-SS3̸fU:5C4 iL'NnpvubcWS 慠lnkJT%;4ux!PBЄ   $h&5fIn;ql"ߏO niQ:NscWgQ|Ah|i⃳yRǶ-y~_E'O=e·S۬JPWX_J.DCD#4MY4)x! "K25V%ݻyNX=/F U W:NabK v@C0]{^ԏ>~r$}Df JBDW"iBKAB"`F,T?lI{* R8g{ȉo8QJPCIv?7 ٔ;'׬֢W+VŽgl؀;[ U D܆@JG eh R xA#ChF'1ot侜;畠vQC+HOoiQجYvCq"@8##P}o=p߰a]ٳ'NǾ4AmD8BƊ/@Qs}xU7grluС{6Oo\.D%1gHǎ!FF48!PҀ@||IՉo(FG7FWž1 6!QBJz `ABN`B#H62W cM|~T&vy|wv# qv/axMd=M4Ҩ"Q"4GP4U3 F `ABAd6zk$D!1jb!*hk`_ "@%BE\4hL (YidнRRcXSGHB 5 m-IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/clear.png0000644000175100001770000041126414614030313015453 0ustar00runnerdockerPNG  IHDRe{IDATx4sY_-`3 ~qKN+d"|,f |r6)FhD=G rosr3os/Wi,W7 JWI}n:sfOS84?gfOC03ğ&zy>u:Co3oM G[=3'f읙3gA7 GQ/8⽨T ͤW OwnmEàczcZQ59 ~T'Z1C858S{~/l}3@{ ~+Js*[=]M}Tb-O JXMC=àg R3FUel{o=(]nc톻v},apVZT}}kx} 둞bv  O).~7r j΁V1QMZ+&_I6]وHkh7{Z;vA{>6nl.3n.,gg/Srm3/Ke} s3 6`f/iss[*o-U.osY1c]$[詒0Ǐ4TۗUcsCgFzxp_ұ*(T#|D2Y-(p <4R4,.X${^3K1Bl'!l$&ǜu E_bWGŖ*4x+mᇍcK9"Oʹ/mQȖ~Е0_LS )mu>U xf7͸ěKR yݐ2OS|"/3:T~47z5_e>>rp5+u;uE*3{sHi5 w1]K/4/MWQFOr6_JׅI]ܞ׶uRN/`BA]`1Iy+?\n.V&in!$MʠB̟kVF}K!@]%^Ӵ㱿G=%؛Je6HVtI oULUӍOKq;  6ڦjCf%k`vB͜?3.JPLG{o( u4M{AA@O(_U :c# $X#t $ +ŊxxVǭ `2\]fRg23͏]~.yS`9V}wMP獕~?L4dmƽ6]*/UbՊAPRҷ7¯RDNc;5tı݀{]Yu'IU e3%w}S7FO.Bץ9 o0͂Yxo[ {" ۯvowLsz|R c(M7/),SP [?I'NҔ6|F[@]ctiIo>) bF^Rj/iFz-r*3`,0?6jgW!8ћzKw[O@V5Uճ K*Z ~#д|+ ,o}ͻ|ˑۺ5A XmlCLXY Ai,Tu4j8M9r)@ #utCA炶mNYmk==S.lcr5Y2 {X7+ _@Z//Қ%Ty"Y+B;T @4Y hMJ 9kLtVkkVQms>WboZzN"eP}wh䍕iwg[|g\s?/;ާ`WiԵuq֯ŪJ^H!@ ~|Nt'({RL~wdYꜳZ{}TRd3]Mת;Ex|oeBĴ[^tR{ǘoka~пφ{YKg ĉ,K!tY 2QV:CLs%8SK@kZD'{;/u_uq$e{N!"IP3|9h𙀁o&dބ ,; }y,{ 1!swbĝ{kgܣn 0rmK o쑈9Tk#濒|eO5qϟPdY|+?ΖpQ.:uA٫'?i^ff>vL֛rLrsm\)`~eAq_Y׳F)fm6*VY`L&mx2MG22|=+ߑTW el>XNq~[9\ MDgJ Yev]qNp$rޒ'FX >='6gA kr/ͽ X*%"IJelPǝ <%d [qNTfl8 ve=ɼ!Q^lqypm=Cʊİre!֒PE}k< J/.Jb84v!ŔʸKX]eہXfAcebφ䌹Xp]k:Sr.7r׻ 9`=th5 i+zƵը0v̓AՂ n::<&_*6|OLiȧS\ t;xVe/s >6M(ǿ/՟DyU[YTgQ%PoG+UвD3d^ڕ(/3Y-}5$Άчt[1?[1EkwUvX]Mww|џ16pH`,o\vI``B21#w+h0G +@Z- ab$,⺃E۳} E$G < e/gLNy1$!<a@f8 kZpxws^{5X;;،39_n# jn"\#- R"' nUA+ }*=cMYpfr>O!$R̟3nt+]{>??EF]L'_n7!<0Kv_&ز=r)(sa6ci;(` ӻfԝVYs7?n^o|$ !dČAa~[eK~JQ+wJ0\CЏi${Xv\΅[]֓YFb ;2i|?hR\.=d|6XPޒ g>Sl~~/Υl,XXVPh~9*j% f2{E")5*DOrG0-'p+^` yI Tq<6O"],-us!W~abImgP7hvP2 `ҹmwkk& `2NB\HC92T? 99FQd13 ;F B¶ue@Pº9y*HMl50 0n(1c~wӾŞ =p3oz;E'I "=[8 _lyzѨ4L@wBjPK^x7Jyu[gA0gu݆@ɷF]c+ՍBVݪjaD |yO$iizW+;o;x.ݨ`B,s5+Ze)+e{$MS=NԦE|'mba8FW\7ƗxגFr>)_6$ crNcaH9?XRL-cHsWY,^Y0ZA&{4\b(X.A8@#FXlk[<{\O7;-ڂ lͳ?>>p:`cA@^[μ x/w4%a@GUԖf NIͦ bfUC M&b).u?syn/?/~B=W ( .;NPRnkSA";1+C'7oȮ7cU]>VAWh-Z/K.||7zrXxT\?q?NU9/ W[od@\\r%5-+i9x\=D2jbt.YfxZ'!ϾF4qx~ #N_IQ/%m l̒Pu[ퟋu{@tmzqm30 `*!;sNy~wSX]5J^FIkS.IGcjԀ+@):tN'K 02Ű+RL ތlX_+- w1z|W"{Q~~a_ |9']IfmU֪+MCSƃ`3zxC%ք<H6`K()I;zwdf=EۉsB^D X3ۉֶR@9lsģLH(GeDE½YLFtH%>Vk/)c_7(dIQE ;R]_9qꪦ(0 ho+]]opw/[gmr!\\ɋ*{b\o_89ƀKnyaaYjL93d!< ݼ 4\7XBHY6Z3-MplE: DṼ,EB2v% ~\Y "V'906kǒ \. + y49*qh#S<Ŭ7+#{8_x  :^}岂s~It@Ι ƚ a]FpT3:QsڰYW?T626[Њg)[̸ޮduA/k n0%ZUgFTpl6 bӫl=LvRʱ"ok.vAr>H[A0/yw/]r:bB﷚Dz$FWo kg6S6زa*_vR v۽- y)- ;~ګWO"|fx/;h%H|iVyuOHywG}[/inXMYt5mg-A37n O MJe2D D7Ty³GPa 8i1R k}o1䕶{"+sK{o} p@6㛛\::ߊWܓOt`p VjVss7)ՓWO?^hXN[Mu ^^oqC^Y̎b0Y:ut ^6X*A@pcO4y=| İXPd::E*쀅x1RJd9[O/ @-g 0F$Nm]{;٨65[:E+WVime t}- (xpN&~/cITiW۩4vj>wml )!d)Yl.%Q+.BnBcyK pe sG$=CS7/߽/‹>/cɤqq񡖕 p6c7p h]wuk+̜ܰƀg3=txLv0bÝpeЖ\aQĻ݀3tXr9 DzGR.9C \#xAԝp !YڶA]Lse*Q W`u1A}9`oM/3a6HK &4< C Qrm:J:7C7TNht׹Q hׄQs%(y}e䲩=x'kB'bNtgIdcSV m lV B:-.OjXQFy}&Jg t6>>jN4GӍ)At1nrhzTZEH8~dmt5#<,6&:3EՔ\J54C!C?|XNB0ll)aduw/??Ezz9K"az@#Kƻ;s A+ms/vqY 7>!xDÂg*l&Xog {\j@z˽.g nA ,@iV5ށng@?3̸O|7I/oSӢC=7N)Za)V~( XsnA-K`{/֐ٶRj>𨁎7ͳR*7򙜭[Q{ p*C14Hsf,HxG7gY<yqΜ|HHj}'"a12{3|O'e)^E,d2 וgS,2CnFHQ[x>MdEŏ^GUWu),>l_TX2xg*StʔK'[+dи0xPIcݯ?x*վʻ˝WZAm${`|܇L ~ =kL-_D*;ٻ̇dh{<7`FL_4 jgG߲5g3cR7h^T^P^j,RFfspۅss 7waߜ,=^O`lp J+]2uWrY`np!;HdӞ2ZfT'\#^ƽt%”۪Kʣbjsgy+*xZ[J7SsfjouJPYO:ݿݗ$iC0 "@Ak]OɏO>k4y $@d᪁?`h3œ !ę2[)q0= <춑fbCCoylnOw τ_ pb4k=%@ 4p Dddԣ`vl.Efl# ~qjky!ezڡ.k:`oqn=>ß^vmхNdt3y΍rrH圀2Yg1*`9zLv6<8N-LK+D214?Ԧ%;mꕧ 괶_W~Ԧ=Rۡ?9]Eb|_jFs`^u9v|m\r@ǀMb b8;DN8yLGRZ\[ZjK̞7қs:c&[Zg r^eJ-A,P<9L==(!-uԋ  l |'b N߸V%ww#,@w㾻ہ!KbF]Ͱ@o -ɤ%(rXTNNX9s ah:I0v.ZsX7\n2׃H&q|ŶhJ|UW'<0m&G+aDZb\8bywHpg/Bm6~I, 5{Rk|]9 ^j44Zꆧ\TQa9,K1x񳍙^pJ dpݳ:'Lb*vJ:]uޮoZmwM ۖ \ P=mnjJNi0 C@ uu{Kb{Kmk.6 J{](Nߐ B>(+擊Zqp_r&;fϝ⡵Q_:p+=kx.Ia2K1:dX75 7J:H ='y7.0rΝNG^ʭLdi;< N>¼ d$ awE)MHL oL/p6q$ylqFd{m`_+{Q ~K QnGlaÌZqO/.S?X-|VqCae)0W8mM*Ź qҏU4\nHܪHFMóD-*AL;2m'B؎iy# %03,9%[76]mUKk ;t!^7x8=lz|Xpކ&mH 8d32,"˶,om)Rj>22\Ȣh&jxŊ[dTrٶ>97Xy#7&k8h`ǁrSL6Nˎ|&qH'NРsxpT0 C:}~B&MSP&L6oxGsbku(t=H2ܜ;L'|q'Jp &naxhsi07&xs\f3]),*]z q0?O Cǰy:wNR'mK(ȡqxE~C޾}t)eT:`@lT3 #R7@mgk  sbʷԢ- NܬAd ؍2 :`Mz`bfYq.?auMi%tl]v;FnN9 IW@NGDlKܥ6q4Fn>c',=|[ػ'?@a 47f/fg?a}%hLLć3h8%/q u M9XR?彑kD~QRTw͙7c-ؑȠ=ڻk&UFNXeܧ D> WĂb6W@. xP9VxB(8HzвaT~H[D/q 3'wS]6Ul> wB oK]O͞~]ckˁWVV9?3TwPN}Ե|&iRORaݐ6EJl& Mc,[(nڄ\a7nGNI޽bCΓ[ifBzKi[FxQMjCSԖn8PPbLoEJꈔ\;g㗒0q'=(~&m'AG9p$ X\{^Jo `ѝGpG&Hrb}C^GHGgu-T>) qpc51ƴ:^os;#sAp!Pf L %~#@me\q)MR{ 9."{d!1 &b?9?[%/OG]"b;Q|ycD'L$GϜ\X3 q S/|7@:nAJU.zDܮJe1 c9RRyq֢ ԒS]ac8jiғ`^pn>9&P[iX\~L{Ă`?^8s#EDQ]'My_*#j̽8 &MB cvXcfd:&Qwvc~8"yY.b:#9ؿĵgA2B#Lʇߋ 6!K%Eʣ|/@x .`q'3[#/UATh}h[t0d$d ;{OEX16lT*,n,rUTF9EIu4g;s7KRza« .&}-,y̟g}SԄG[Br\M^EgLL`^ӖA *1]BCt%*gMc"s=g٦͑ToJ*@RMZJZ+kzHU1ʲ6!Rɤ"5@O0 `$9 <ҁޚ{oψo,H׮D2jWi#;݇Kz9z(&?$7?>=kQ,J n {b=6!aۘMKmr=c9w!D̮pڮ9&r-75B,g*'XF1-|6aqƑf׌qt=-L<ך3'QD9ZVx"|ݐWC,m9ҫcQS%pjlRwIu4G,`Y4Fu+䱱c':*0gߩ jH^&U3PJtXZW_@.4P L.Nt{A7&V*t*v4Wjv^9xQՈxƼa # _H s'&l_\6; y }$%l |AH?krODrmӸ =[4uSA!zuqK)Mw(m~6 `,6CtQM6+L+cݳ7k𧛦w0ri~kqxc_|{q+|:~(88 n!1kGs}ā㳔Qb:+ s6X3**jJkb׻mI'?Xg6cʮ1 HS%sΗ_g4H͵1#Mbjxi/UوS:>Bwݻn>Dq1JD( 90v'x]tu#1^{>QjwY{tTʮݵ4[r#3q $s8[Gyl$ 3䁺&y *O5w4j` ~Ȥ_E0PfSz ݈^. n_HVbDqS`e#K ؎qΕs1k1{$dP=MXr@fכ~Cy5' ދWռK~7{ c~8 :6S5L['eL2+9bjUTݿg˕ թU)r `ail9:#?JG0gEu9b*74"Q6q̿ %;\KW<7檈/P-ʽ*cP#ܦLgyr>\V 1f S}³혊jUS7bӍM4=w8[tM}%o;n\ d@((f.qK!v?cJ=ځGzf Y}@?9`wߍSc_CffKu -rZ=/xdW*J$?ݏqWXpFyޚ.ECC]yyaڊh,#}k64tퟌ2pbc=RrrlOjf,F2N2zX~z10ؘp;Jbє ܄:*p83񕠥xD-D; |a!{ƀ>UN l82*|qIԴfD0u,+U!|k<f?bSo5^^.qҵZ45k(_wIJ j%nN6[N,Z]G^f-ׯ➜;͐$2ka9Jv94pHZL{NGCŽזڒ)ŗZ0πXQ]8Gf-1XAaO>3!q>@܃0=r/Týeʑ&c6ַJ㳀)}=Vn؀ ,:̨&?57#o6z VS3D%Lj\c1\cI<8tq|DuGaL}i*UeY4(RDJVb1]`HV:Ibӱ1핻B=Clu>5Kq62Wmd/V^4Gm ՍZ>m*sLGK5`,~t<"4 s[-p:tҐ$Ӡ0ILwןPAGxq"7CE'd($q&x'Qo'y#\*on;0L3h+ 9\*6IQG/M߉Ѩ\2&t;ɻ6ar+ǴG3oҼvHN z}(Nܱr'Dzw`3}G< dB.rtbx;I)uyrKV&nH:j!aN}jU 6I2;}qHOO>Ϗp9\0ǘ{wgdYf_e~(ku,- w~z O<@r4ي|Th02SDjzgA0r]TyVӷ e\LmhZlib?WUX8LEy nW";GGΟDgQmL(|\_Lu m]zB# cY-x΂ 0ϩ1s_G\+_vdu32AJk!  +e|G}G}%+g: ZQCb_H}&ƌO0sГȩ!=;pObnxWuu NZ?kcSMPhmV%X*FvJ̽ʆ>n ͗IMߥ?Z OTw#+Fir4x@815uSqN))hbf ȯZ1N4嫜E>ÆEMhnP[wXJ,)~EZ]ULx޵Bk͑=|?HH\wNf рg팋ztlgE.i4-nIf^ Wm@rM$]zMxϬtW _K^:xgGT:k "!weؿ?DAĭ]IJr}m] RZf80'AkG+ԃ+ʏ?wP<Ը373bp*K :mHؽ<.Qk]M=4 -uusܛVa3jRlY_ы aRv݌RVa^nN EV8m8jvZs\mo fS;)rJ e`%b YJXV@pV9]= .ԿQ@g wWX`}_̇{lr^f(zȥXQN r#a i:RvVqxXܼ~~O4x0߹p %0(؏CY)r$21mIc!鸉;%m.~:a&Cw\#TxOF<%4YsZAi0Z}}.{48^OɸtE!.M ^>x8\Snx?Ռ f}8]-_VP "V6 'Nƹ!v?kv#8&"_SMHnRR'HHb~_:3:Bz_9w -⒱ӈxypU)$Zli7_P=B\W: lғM5'ɭSRu#4lD").f!434oM'G<y@PlztGܖ n0Z XQ{ >/wJ#URAǷJ:Z<\%}{~卶9YSxWeoѨYUe&2/ijxMөW)grˀ҈~E u*YtU).fGE!  ^x4VoQI2%,ʨ[3vˬxJۈ$cIs N[YB{q_Iυ vŅb2@ xZoB ne:wLu46@]ݩd{7f TXAKW4=;)8';c_!P6=c~sU-T鱵֖t76dĆ%Y<3np9.S>4%^W[nFqqj}JuK.䩬b=˰8hv+ƑSjS9S/Ѽ'Ї`ār6' 1aDK4~x^xaLrltG.eηIzA]Ygp@Z`=-+d|.YtlRLopTRe & XUg,Neo$\ewJMCcGVtٸ"i9N%.ެz6Mp]EPPqPM  `沚ksݶjhj5y>N!hD^gY*ɵL:6~Jpש¾]] 0& ;JP 7{oR+mpgU OG~x$1R}p(s';>g,*4feThRjۂ ; rk ikop!(4^ \gc'g^XRDi!H6kŌby7HeYyG@rFumՙ{ ByN烵 X;Ӿ)oa|!BJ24[[k'_񎙬5y aF7/PoECmYEZy'h=߫:59u+-5z/n*H;*JA`)Wubf8JhaYΙ%n"$6a7v+1pkF849ѐ.$Y2s}H|12{XX`2i Ƅv@SbYD8魢e$^,7vlz!`(mnJ.!:C7Q$fTxZ )tq"́ rpQ.l3l76/ ;uoL 0 yOQz96G#ydk=7ti߷jM͒$e7<IdŷRQ] 1 ]zC//+[Powi. ԋZ3d~&%Ό]b4Œ!l {? (]}b90 ZI#Mb*^a6af~* A=`X;+A[3  r3{vG"]U+:皜$xn.:oLud&ۛde #3.AbT9m,P3HlVF_.]wu{>H[hے[tx!845KLh 6`X/ѿ o~UiT(󸅏GvTyk9Ly0#J^cDN.TcVlN xJ+cϢ&ݨ9k{kls#m|¸Z~ap)Qh;{4z2'??[7>o^}`f4}3w diUE!R<'dPs *r9̙ʪcȃ(kN'5VVPA׍tB gzaifx˶10KM;6-V"!O$^$j5jB7"uH2+w&L.%'J`yQf *5=Xg+XA|zKd^IE8< {440K/E4(4lgm=JϨ왬 usϤN`#'B FT_F {!xah4O_cןƴǼ4Uo $̲4q,.Ћ y-x*iaFYJ*9& ar[rX=t*lPmdҹ!HךEոV7!U{dBҰZ7SvevVʹ4Y9.$=fn[cAE;Ǎ]v;'[b;4o3ח8"Ko\|Fyc |Ok6g$ dhzeEP蘣;d@fJݘP?=og)5u]ZU%H4r@cbO)#7U}H+ā;^,G ~krc7`˖+DZE 82nS6#; Dzq5%dxJM7yr~k@.^%ClG?![`N0h|4;mw仏/>zwdǧn|T)ρxr2.#m*=lDHs!-j7WzK-8ű.ܦtv߂4Dg]gJx'S7fo:`F;K]iZQe(TR,L]Ɍ\..ǎ==/_!ǠR]:DhZ!T+S-#0׮;,OaӲkC&h"_YZS؀`"ʏ?~5Yyg.Wgunλ:=t|%-4K84Kbd<y{d sg@"܅62tht'_y'췟<$^΍xmjf6kSsLe@Sj{^PXvf_!AɮHw3x}h(T^e cT)L;'ݡ7|5h R*QGa#4(?Lݡ䪛@?ֺ/f4O}K/;l h7fxUOA,bHTlK1h6j&Vkm %,Ϫ#%B\WZ`/ݯ8ֲY?,]D,B_6S6xAFVQFR.6LSt}'PS3 3a,lMs{ŧ1qtD?8x߾pXNdAPG_U#$1rd!]E~KД+j& />8 deO:6/xl ު[ s>C4Ҥ1 H?O=Onjz%@ÈJyfJN>c=s~Wնޗ݂NyU0 VەʛTQJHp^8pхZ&,[SN1hQh'瓡h>N|x\Y&$dhY@ F93X_|%s/% U{p7mcwhx܆j*0-"kߞt,jI}OI~ ?@Om8e j:޾?VWO.~^5TeS\:6]2V ME JQhPXESk}.5<^ )j+ͥ}Pm 1+X3/5XB oͺ^h™HD4b}.1l_T')h}wugKXܺO!hW019)sSm@γܿ7yD۳xNܭ_RogꝃB)&9smY)]ꕐ7Z#`Oَ*p6n]lO I9kI2H dyVo-EKx`z!1 mk{t_ZQ*$G9Rl֑xRv5I5n+A1G[>"?{o| j: jF=^.,"@\Cvg߰MN~U~O'L LS0s3,W~;wMZW_ѵG%nDn$D9IM'FRq27|{vt^QUheTl]~=wRjE7+lJo^ cV4kW-e̤fV,ǯ'yM O3zjv4)Ie7vH+դ!!M`ΊiJxplh=c?ہ w!Y%?xq+Օ#׭AD_ls+Q==> ۴zkw(t[x3v3Z_Su'q 7Hq糿q{AtD mA8ϫ쯋h}^V6E8# ~k-vK=3f(`4΅r͜")o,tXDA #[`(:5v;f>V.J3 o/[nzĊV'V St{Aaysrd Us"jthS=@Kg(}Y[}.7DB[r٨3E~OP04>J\kщ\4\d)]r'kfEkG4̅@ۮ' &@s|k18[Я>岖2ĝ^ߥ)ADCa d\krn5`5WOf?pᯢ2CY1:Uɝq+7SUQgbd `&jM-_*3LU:yjYg͍QT`j}jѸ=&xk{ey1(ހW+ȑ],?@(qݒ'EQ%րrt\뎦n'yM,gQ"%=ˊƸu:=\_۴@#@ Mh )lDrX*2ܜ}3 /;.Oz`U(gEbsI4e2QvIc74/:M5ڡ_Mu)8Y1eP-Ay@ k y4^߫]0[Pj*lʂ%=&swNY9EcR/*Vdl*OL;#hS}^_Lhx{nnF{ړ_7l+A_sUSo Pte7pƇm*#J(M֖WORE҃.#\0A7r]BȁÇ&VFOke\StW)t:cT*bj4lj7āQkGs&o2j \#qzFh&L5A&WK4n< _:Kkҹ\zC2 W}Ҹ`_u&_\h_\՟Owڂ0ii : EhoQEi;y< tp=g*{-t ͨdP8=b`39fd%V)TN--V (LjPb5C:wLYO7Ek%4{CvljySKW/u0*JV~!ʥFeƅ IasMݑdctޓ^zonɲXڜe{|w(状zv_bTg2VbODƥ_<_gC9KCfPx"/J&!5 * ÉYt6NnjPq7SC oEEL 7?`II3l4KDiq wkȤrUS/ya4Vs\I("N7*gV{ Ls0Gq[z%#n%=Uwwœ[2]I׀WӪ­P_ԋKFi ~r1I΁n&f cLs`k_;:I.'<#.+ԀHS}_ZWK79yS5!'/' {kG$F벲`%cLW6kgmQ{x[ ^nMgdx/=Ѳp6q#\keS}`a;J.ԎXZ=mv{KwVj(Zؐ[[`G9+X3; !ƴ J:b9$m/>s@-l1}YB}')%}b8P\4IɊfv%3XeAQ=\{T [5]ÃS¡i1hs1T6UvB}#WGxސE;@B k,\ ޹,.Jz ZD ϱUw`̠_AD3VsH ,ί {S~*\\]*&OO.]޹~G1œOt1]ut)fUvlݢ_B:hoqSS2{V٣':[ISGU4}*3-Ea b;g툁1.Oq?֭{$ˍf^4<&HJ@ˠ*D-[!ŠCJ{פ7̮m(^PԏQ(X(uMqvvsVfݙ V{{+tb6Z pBun|t{ѡ`Ol-#)~xߘhg&{ߦeOf`oO~_|_@ߟ7渐SRt>= SZ3lo6j0~ߝtG5Yg܉gt ;|#\V.nC!%pXcTmjV&דUWfMG/MOyv t'5YlI%mik7M/bCkpҸo-5hsd:eӛe6!(x &tyoI4g{ q˔uiSlM;?Kٮa΅k\ Jw>S.mh?Yc[;#&GB߼|^\#>i7ܪIrzD8ڜ[s@[W(1aow,e6[~jVngr/UflV# NU*zZY-jo ׯ6iK:T7}yqb/k-Rt+8jè4+ۉBY׈)7ך|7ؚ+9WGǴ79Zӏ$+%GQt)7[Fi4z-= x{ij !4!G )j{䫯Vnj8k,ksm,k&Ȫ[iNAU{̌kxޚEV6P P+(a.qcBEٛZ87lZb_G猫ӭϥ[<}v-KvX9g"1a2$-C7Jc-MZtBFF9e4WK<cMwc W4:8H\Zm_Z)| *?:8e5˰EwE\9[gVKuX pj^[I ==tt>a7VW+.ixI6npN+`O@ 0o ,5e9tTO{v; [Ns 8ge~/@|1:̾%gsRyȍe"!LMFW ^6b/d.N@}N}.zzEu-D#o_0ܿ;@Ɠ>&M:+3e=5*svnCz{2߰.kmFam+vʸ6am; VQL &>f (}t\ٵܮ6O8HYx<9Q@HNּb!I ̍Qa./4ƨl0A)n/Kd;DR|cm_BQ vKʼnhj Ejw_S~lskqc N(Ajkov"j.|{\-^{< ŵ@ӏ 3c' o^T7@5i_F"1*uLW 2В#nN9-ʝ8:Pyhۍo 6]p.Fk b]$ l;!ЪjPlim*/vI|1XMhBisT hpϡ)mOZ;5v.s-ۮV1$ u怮PKkb]*W124mm;y_sr :b":`31Q=ߣV|甥˅ʸ%^7k" d' *IIϡ˅?k}N]o+݄[oPHLXh5 ХVݲcBG9e/\gڔDŽփwo7`{Im{~B}>!?Δ>\cJczKWw˩yNa婌ۍpm>l0w{igi~CG3t{aՔkD>9tR`=$&}ɮ̗2"KI*K@l@06e odXNB1dd[cscYvvwz`[c|piE+;zwl5ښ_F,b@1P]{n{ʇ,io w+py~ʡX̓}!D}t7Eً_#LB!$ {u~{4!AJ믏v+Uvl25G(#~w{p*y~2b2[a½! cm";GI^;xIusJ( Dwa-/LHRLjzg^,D ]M<yxdsBN4^_qd+)*M4 {Xh rn߶Ѥ7:4<+d)fefm/2Ow\;\QvT'd2$P@PՂRIE3O0! '~w^pk-h& T&8b;/*wꯇ9J,JRuTךh)3o(;Q*-@y|eGj7Ks Q;Pk4  TWw>kO5sǞˆ묷™`i7bfНyL*3bZ-ܷfw' Ё87F:8ؐMs1^{Yvbc̈/;V0d5U5wat ֆ*nnh _Ķ5+aۃuN[6. 5xfpHL1Ul)bǒq%Nļ*aT# tM}nqYB7t?b|`E ^˜4:b vB}GB3j8 ؐ*Qe$͔+sTVnibt;e>?*)i?]'o!%?#*r]gSjF25YL+8zF'}|;BX m{%=ʔ\ _zG^-eʦ96㇖?~퍿kB>ff;ⅅ^.oنH)tYE'gEl&unLCJr,+KRjJhS}Ic#mw1ܶV&\kn-#&()V緫3ӝ._۫<})%ˈH"cە>f3_C ~ G V?x( >r蠚<@?ךħ4Q Fzyɫ[G?.pO_W0`&=qcfiDٞ3mw!OcE?d13Xxf6TՊ=ZB5ah>F~a11yހ%AۯmRmOа>{Z(Vz0C(!K5[W-4txP.kR4;*Ω3(؊BvVɻuGh+3뭏W(c) idsWwg juK%nN; = D#LN& DL2☢6}s̩Ujexm]G uٌTMuټGO=2m[&`sŶ-uVئU1)] 9p6A;Gr[kY5a낻|wYTEz`*`S" l3<0׏mhHdE]d$th`u[d`y$hKd/5u/^̽M MkzBqRi/ R?IGTYDםk煦ZL$J9H4ȞVTyZiK(Pڂ sw"]@w[z\ݾ0wnV=G64:{w mݜT=+W>\i r{MnAdgA6.p1/qK>z٤yHruFÐ\?YKgk<y]̳s˱NH06bZ.dJ$jpp~:;@)>*u4 YF-9A?z_ͦ!,s͚Og=8J[%ߨتd!ĚkK{E:x|gE1y,_f_5E27,F۾o7dG4Ls d,3?~~k3RXm9^9;O<@~g9@~\`옑!JcӱDV.g%Ų99cӾ $n ֖(JT4Zm33l@}"JygǑ0Eso:Uz}42aNR6oiwMdА ˷owrArf1lӯj5EVbۊ20l尟6zכlH0c͝-'4eK TTac_`=l.O_̾Q&Ύ_f+L׌?/WMG}X6z 8^w_7HD1G7I<)EF딚mJP v16|~ʏ+ Ov?^|rgP_*?)C^*7]Bvi#as]#‡W; d[Z]S[fLwƘzN4&~=Rs<0b OhI4oAɳEÆ [0wugkՖ0vUyN@ٟ)b GX^ӏ.YoR.ga tΕX{xܘIJ2Єń= >3T9:Gv~F[6ŲUt|eU'WF\[<_I~,.7i9_:57s׾q$곺b&x'iVvyhK3q^]Pӕ+?/t`>zoxoP;+wo,U]T@1= '̫:@4Vg2Z2z#(3K`A]{Kt42"oN=amBKգyܞ50' Vq#]"CK< =[LMMHcTƝ]$֮ǀQ؁nIUT ˗ˀmh@]}Zy^H<TKP7@.wO|YƕzWѷ]R7n'Mt(1@JH'*YTfo%슶/\^22|^vA.=*_ޮuopsOKJ^?U]4ϖH6@7ՌOŻiY9~ d{z- L7,%QRI_+pɄc1sTvf\SeXyU[7WZFka7=f9ʺy;|ӯ:8 zz:L.e鱂xMq7c&v~:0IYp.ъ n+)99D F&sDo|ފǿ%P1w=4:aN!,VO:@+,M`z+qJHrnyq;\gs2FS)FFaPPfYJ^1vC&dd4Oqδ,]^'.8`d4j:"3(~z˾] .5`di^G"Qɾ6奬k&]߳Ó'6.^\^]t2^&>zeٯt`P8C[2mm"bxHq&- j_|r}>&;I=$K}9Og٢)l9$ⷙ_:@Tk΁z+z[#7<ۗ\߄,/NWDE7m5PX- )򊡟TN21_MχNwCv" )[KF8%oSvzP)rVh*dq%٠־&|=f\o7Ό&[@ѵA%ؖ nn9`!dT WO/NP1Av+y}5$o ӽKFOv}kbu'l1R/٧b$QT)YK:*@\+tvLJqϵx>Ufܷ6Ѵ044G\$WpZ^뫙2o }pdr`NjuT'yd( Lo댤 o0HQT G93H*fl#|6'R8s8Ou˥3vj9ioNRh횥cn7>z0Vh:N'I!鏊jt/7`^_<83:Ʊɩٵ+Fg֯ X_>;)k+*vm'Ck3vBU6͐[ytS52&zUw}& aaswi9ir Ûim|=!uTl-B8z3Ѱ޶щEm8tGgשKQ!*c1N쟬M|֨EtԛXs3LwL.SfVv 5ܻ+j>d 5/}*ۗ/}79vkʃg?ZKzI^4{׷+W&|:IǸYQRD֘iZm xs +hehf8ҽ=|I$ӞfM:3"ie6&FOZW^ucNXt˚%z?8#h _@m媵0a(ү%W0+8U[Z-Z wf^t~"x,nn:N2z\`eYԐgJR}@#p45[KzVlOZ?,;N? IΘxޏh۸$<-&%N &Mjc=)GuDjFPrh'/ۋF ϭ_;份FwG7Oz] .kjG_ `+FMu"xwr/@w+Ѥ̝k6z|ݔ9ԿM|;$X|K8GFoU6{g3T"UW5L#.ͯ3ԕ4j`4/W,}MA^*.xFݓZu^^!9`|X}ts9ԶC1keCxTdLcy q_<2ѽ+aar=k 4.,R11 d#bQ<+b-~]y ֳo5~ka# 6XwH5*!q /¼<\喭YβwO5%G5-ԇ07QtlصY疀5i]I4k0% ^ qxVk:>v#PX&x2v`]GF35։琛ݓ[sh)Yrjth̓эS?atkv1ы+߫fٞnXdӟQV88FϏL؜\ 22$SJe$>9adʠNjϣc^ã)p7ڞ ^s~ g+,U_WRW8}g8Nkݟ~;f۩k/ m Oף׶Bh._B_]\LjVQGZgfۙ›0lsSHl¿V90l=V~StH]CBgq/~H~^jd= &ejs,)5>`5wڙ1 RAA̝(:h؏yDcd4@iM,7 ˗G{|C8yfZOVR8S:@'>O%^\'4wL uHp&'ucf^#I33^*߸, Θ*}p7BOAٳc 7n-=9y {)JVa~ޘgHIYHgWO[uw3v #$5] /ԣIßO]TTK<" rڲ 5F/0|l;3ue&RQ!,ر֌k7Mnkg함^ce,3C|L ==]xlʱ<_6%ySհy~h{tOKſyqgZ/ Vp+gS!2tGdD쮰3r) הLɑRS<;pT|u_z=)iA[Y-6`oLSlDDb8:V% jgߕ{7C}3|;ә]HyeL%Pw }&=x%**5@m 7lzUm=|n\eB jWjQdQ2亗?D4R.ʳz8) i6\9+FWCƓZ Pn}[b3=k-iV}h3p3)ͽ7b\~Ź#l5LZө-vQMaNzPؓ ٰYpb݊LNN3654ٓ}k_s8f>YzJFv@G6tdn; Ryh:'՛Y}e" )OgXnF9$K2P΍+>>67Ol=(F=]qGφ?lT}{ui{Y@BK'!tc2@]6'fnΛ^3]/gn<5N@+SwjY3M ,\¼2M_稄h`ZWR"&y@xJDgqǁwܹu9Iҽkojt>0F:QHKىŸ+G]ߍ#B&FY&g tq oevsz8@5@?ꌿ]6({\,ڒO2{Y{Űtqz}k|`pNl~[Jfo<}1j$ x'2:! 0_"R~e@.͠5P@W$X:uHLǓZz]a0D;OCN 3U7L#.,+#MQ %0FXP P_7~YUj9*U4)$uS5ƛM$.TSS:h JOanBZj!gjͱvSÞ`\ J`D'X AMˆȊD[h3r+hzTgPFʪ+O w2Fs3c,OZvїmѮ <05 ˄9+I ;$yީx}kxqpqƿ~/|?>qxܨ|ckݚܜ<_{4|З/ET0nNWUߘC]]]*n'g=.v 0p206M|bNzR5 |yMɫ{:S#1->k֭y=buex,L }hLim*_b0H^>SqVϋO6z-Pg!RƣTQZvT_:zNsuӅNLH> i3νMR z疺SGJ,qVB6qlYnϏ9&S+ÈZAts8#ȉ{OsBN1^_9=h &ɕJg/ceA9@P+ӃSy`эkg[̌Nl<ŅɅɕɝIhq=,?u㊻[9p:"|zgME wD!Vӫɚ U91ң1򍽊[m~LM W{vw-n0b-\Q2vM=eɵ pIT(sxPRӞ1O>m-꼷##l-H9`u5 ͖0k|-01ssim- IP!]7H7d2 ({ޖ?k{OiB]ԓw/w7,:TzFzfMS>݅8&2Ao1x'qt@ `82X \p6 G=Zn)ak]a\>wޛ9wى|!,=$ >#̭nW[G&8Mr~qs'7'77F?Y{hQyh=.#s($5ƻ'#|V}~:܌dg,f.:Hʮ л3p^U .ʮ7mֳk4JMn` 2{7@;PGG H-SpH#@>Z0ZƤV8|լ7)$`OSJ3 i v!xJn,}]4ݭe[.4ȕH=[RWҷބJݲylOV6sVA. m`3JML'J.NNI*U@_?-=_x^-}TWe,H:6$OA _`l-y@2#{|8嵾@O]2Z[+ <~Au(:svft`_CSurckVMnVk=CSp?W */ 쮇jڤ\LXi.1uy;fuq9DZ,c) ӍΖnRNǝ#^h+f4𮯋ahwFt[_N`7W_M^y{rio״ugX[rV5_59~ amR~mt_/!!U]kJՠZFNow(vdiɥpaJ5 T#tm1Îx=( D帺mR#gplnqB#'v W%XMՊJ&C\,DO^l~jƵru/rF~?_}BLJS'WK\99#b Mxm RS|k\K;}sj P3;Y&ՆհI[s54e4ZdWj>;cS#;1K Mn TPט*j,ʿ\S2^7). ?w@{ ۚr F=xif&5ʑpsi/'F 6+ ~" ,e76l1)R>U 9# |Kxה{ h{&҆lnc g#"U42z1q\c%j2+w285o,ɻ nZphraTh3ɢǧ"{448OP̲3O.k,^+^u`ntvիV !|כF׊p4aeyIͳ5ܽM fj@ +>F}}@eR#NEXHŚ), @-@/ignG ZVW:5p6>'N $n1X=h ^wŀU 6cxރg 觇 U~g^KӉdJK 1)HVMU0Zonȩ`fi~6@~a*t' ۤʔo\PVOt}K~ RϠj5X=G>\p ?E[ kț6J-`LSC CV]؜$*7OlH1d|x!7L$p J6ōݜvbo<*S)"Xcc S")my 4f =m).9gk)lU43257lZ_)uUv ؙB/[:ܓ=T'߮IѥW ŘJn^^X0<5f?T2۱͓jk:\٭P Kۣߦ2 xU\V1SY"n;tyjҵ PL9HG魠Y }Ϛ.~y>_ skI"r_]GU4vj nN(}S9ڏNVxTT~{Lx˜v ȶ`XJ9t.7Hi2%Y\_Gסs qj\p+^ ^ st%|@ھ?o?ͯ;}. ;/&/y=P14,N/P"\e%\&ҭ+ɵopz嘠^unj*Z,uev̜eQSE,h')S0ܦhC_;~EGC]iDzn hW Ͻ'iFKy @O_P.vAy0v y_527cXW-Ϛk8\qb^'{De '0fP h&xbg??I{( v!@ݨ{nVfww=*G&V#M$ڄ>P oνLJ9Dx><6Bٛ3]8?o__Cl򼔊k2v|tm_P[!sc{VWT sߪ}, b*]+ޘovh,(rbr fK\t8AMd J7vfd\ȕ23 { XӬonw{Ux̹x xV@$&Q(-sD8`.U.*0tǴ&Xi6Ĩ(T0q\"X"e 3zoNJ8n&{k"an$/gF5O#;BQRשlXi6f?|9A#ao&w׿m~=$D~Wc9xSp҇ȮA6:L31!'lLAͩ\/o_?0v|prty]zԴ4Qi3˜TY9:7K[ɰޞΜP qjZ|Џk,Nѯ:ju!FGx@>Ԁ]LB~;P5\o9|n4-Lk`r<)6=QKeVoݗŎjT_G.𚮶Og`$+GM7QD}.-mA!9=}]/RY @3qWoM~@\W"`XӺ1lz˱i%7[@UoBwk?ƮmkUq"{_&?>ű_Uy<<_UOE'm-x?{ *-aDMk6f||5<\7k- brzmjρͪXNщ"_PO9D?0h$mБb\>r;)s|ȄBt st<^ܟu84U.^[G 2<Vc3±\-1NH39m5֝3! ͧkO1`9[P[:=I|iP 7|:y\-MwXk>V,Qxe!-6H>sޟLNc?"}Rlr.DU eP?WUl 4wScxשn<.Vwzū'F_oƿo~˽_mɡCJfZNk; PTPGRX+R: w9 w"^'SZC#8}OF?U5#yZoF]X[8쵊 e3xpW Mmptoz,9{W/g,p-6_]ߣE߼] ?mQ9H\;19:@Y&⬼PhMP2_6[!ORXJb1^W8 z$FQ͓Zd-H.WP7׿Uѱ3+ *|}n@1+q seVszY aFg-L  O?}ddpұ g,@QG*?+?@|wSkY;un D8@7 i9sݢ[6Z7̀'S@mԅk0 lSqN dksP-bDJEV /nsq2[vjsq$>@6́f656e9+ jk5QX mj;^ο?y!8Y@ m[z>Q>ob˥UBUo,Y#{]kdy$ia-~)r6>KV 1]MeUXD$妝+z36gt>1vcA6BCobD@y+3W@UkqR^XGamDntU/גQLhC!Ҍ2gR4}2o ;ܸp`2\2@7`%dVɵ`^~Kʏ߭[Y~svrtc'1>Yq嫗r\uD銢c [. %+`ʭ&RR@QvFas>=Ps/A{FxSbnJa{x<`hζ* 2sP솅^6@ ?sm@NGʖ.v4:5P6MX X),8O<HZd8s19y ̖:_pr^!?}5mkK؟J~ReNq6xՁ +! &ŔҒH[ W״D;^ 6;?9.QC'*B c~/*@Qe2%GQC̽% yqPS3gV}zrpr5N nR.IL#-hҙl4Er+z\ (_Xz1P# ahrW ڎQ*sM-;IAED~ sf 4{'4<ɩiTb|7Um-dPYGʀj&{!:'e)BSo=dr%}C 2*lhB@ᓁ?}o``[ӄXyXNT$ߕ^l;s~ \Y;j0UR f [Ӄѵ*y];]G*~~DO άݽMe"= LXW'swbq2iyިLD!v-(9J{ AwLo i MJ# k~N=<6O,iwܘ6Rʻ4妊[S92/Jgg3LǏ3 FN8li_W$=`^V c |0p\0`+I yCTD'RBX_#8|!Ai~ZWwA$#&ȟԎʟ53e)&N+B> byw*+ ocWnATa繺HfT/؜n*4Fh2 0찻`橡hD&7*7'm^Bqpx Zӝ5~"[&WX#dawcZp?g=g]O@.{V|uIDaLL@%_IRC5egoh'/}-Z,i9Kr`G`tG=i@6+_o)ni6oN2t7`7Mt mG|$prcJq*%veN?`'RptM˺'a݄Ԙx=Rh'jh<^9^8oSQ'O֜9^wɰhM*Ls< y}3˰!)=Xc_j_e6h fY~}2g]μ~B<,8{zCy{Y[mIė>T9s2Rr3jN]bicسYM'3a^܂/[uJ[h1JC7%܅"VFhS̐q`JsmG_fRiFAW+ 4g*& Q#{b(SX:QѓOXU`0PyQzB1["Lz18n D:':|^K+qvyݛ歔yL/S&=a8Vohqq:֟l< Ǫm[(Gn:yZ[=9~MqkӨqlohx>$o?=s 'I8NnO&7˳#rwvJI5jN1xqkLpˁԿ#ȉQقnu $θՅ%"SI8@ڏN羧y]4Ai&Ņ@Ƀ&}dau7 t-u/ 3j&0zj4 2҇A[Kz{H D 0c_ ɼ>Qvb0:0p}v\z~I<6옱k-4L?ϴۘ6Dm; VDN: uew|c8sUC_1u8pSc#ps8vO!H !wτekWwj=K?6=Sl|!%,e=&%Xei-FlrYv`csɻ۩ƅ,6&%*g<_gƞeH=R[c#ѥ7._?X_E$Es]y,w@rs˳o3kWuevQ?0fU ԥjU|A`~ +2ؿ+vk\0njKj9u]|\/J+^ ej^QoHܷț5!el!y`+a=ȵ$޻j4UIuA-Jظk3<`y{z.rk[J'ϐQUۢM& TUtïeٻOZ& ]+A7ѵ`ESR;֍Z֑Z$$^'qВ+תa))Ք!~Jyq,[kۂ S}ySo^7s^Z46uWR{WE_Lr/ҝ]9m<z\-k-prJ"|V  m&%&M Lu?@REcO/eVig1eY/V[6˯KOM3:R<Qw$SaJ2ޟV[dMƠuu3Ncl;tGk0[9Rݱ#뉾~kX *=PXH<ˁۺ˲Q@K!aBlJi#;N/}&Q'}7]ǽOa JTv^OE0| Ӽ)J*Il#X&$o1iZֽDAAvs )6ª䂋kWmBeK? ~`h4J::>1$sZOޙ;= l.صSpųh\ 65=e>ןD:{kH嫵Eb-o]~}mW(j|SqP^)SUI9c2OGItߑ|0V_ώ,t11S0&mH̀y_~qrLn ɓ N?LvR0 ӯW/O`@%Vq| ֻ)wgԀ:VE](c>>A]hJ I K*{xbnݛ+jyD%>1qʍV|]tIO;bժN_fH/?seUtSgÖ(;](^rDgzb<1ѩ) %JY# aY`6e~@k}v 3mvg191I> H`-y0+wl332٦^DǹS~`#qtdێ9S>d]7hw'_opT!fN E](\{a,zר -Xa̬ց66幖\Te^ ,>{`!]fqq vSch+LƢ3Fʨѕ^^ցb&E2"<`m9l/ OLHᨺhM;OQwN5B[0$=|&!gi.KYˀ>Jn;]]kS+_`'I=D0gO>_;G⮩VN el1~o2CM࿁u`XIy+`^~/Y8H[b㊂ѧ:rJQ=eϥTh),@H$GͪBϓc[MAeO P)fFj̖eh夳[Ҳؒ3I-po6Bwsz&}Dھ|~a!_~ǕZ`lNn 裦f;#S,T' ޙ_ao^=bx#o;l!=IҸ6թEjb|A g}; ]&3`;^zeGft%oP^TN/ғXhPǬ3(HQf %1r %G(zr2wROtI(mp[O> aUEND@¿eN9>MD2vz SC {< 7 4`}*Ru]톽H=%z9ͤBWMOJLh7^}j;2_[G6f÷=n)da"_E)Sr l[M$\R N)MX掙"ВVt)8h֭EA L*?#aZU%(Zr3Te#jg}#}.8ŶF k)sQ\ZdN:x&򉓿(H8̉o,à`/<_Q =>^e.tKɎz?8iydw@`M7FzmtGeZ<9:4 9{oNg{,zQ6*9#M1׶\sGP獁Ƅ4]G!F˚R4&3'&Os1?&l$z~slyb_&3~ޙr#-p;+G NrscW:.4 J Թ y(q[;ĕXqI/dF09@ Ǟ}zX+aR<-\$WA񼵈 wn? #>%~Ǵ`btzu3h*U3T*9Eجq!Ͼfm6 ٶ!ܩ)d_)v_*tTO]?5U9媺B9q>&d>:!>\u̻/2ޕ2w3tر[mʀ$F^(heY-p@:cdϳʿx'g_c ABU)s-WcWo瑃f:'\P.X& {e]oZbV>aO;}%oW;fI{,],K}U'7n~x⌉BA#t4uΒ BK ɫ9_B9о/n"<g<DzePzy -9~7Z5,gYש!ٷ]3Z@c:qYAt+)l@BM* #M#Гs-!Qx˖]Gޡ3.$A+fo1yL^:0kPO~刺m͂tػ|gpXσ!MƢ)_C[ O x9,LUrSuqՅ*dqcS oeܕ6{6F{seŸ63Ȓs=CH$K%I/oKjg@q"`-d `Nݭʶ5u 8y*t0, Rhъl,ޞ[Kv|d cݿl|bbFKarW(ak&3w x-uB.)sÍ`JzRM9uGO5]&[[m;lo)'DGe{] (+hpRGi(%g*PtI^]|6k%@a _ZlAYBp'ɜz[ zX}I4Vb"R-7^U{}] ϸEX}-lP6]r ?EZS9Xmc^ Aڢ;^Lw1jOz(̏EƩ6/fψQqȕvd%3og)V.LkC+Zy  l <57E=uX)/7:Rmfk~r;%>j@k_d'0niOUP/E vᩙ@&WCo2jWgPD \OP'U6R(vlNI,R4߽R0?]ĜꊦI`/^ʼnc `Yrt&i72Gۏ_YɊQ:>}`Vq}X T{WuQSfLm㾉F$͇.hfSmY+,~[,TL J;.CćubԿ?p@'d{{&Iw["f oq5&JO >oXQnDegA20n)t2VKӼPL/8Y!J]ܚA]%EƂ`a5[ů 6̧|KJ a7NZ'SI:=a$=nmI mQUX9օϻ͇1UH 殽Q]@̼H9.=fLi֘t}\mb #B) Mk.߲D\8@&]ͭTے;ς {-\/z;Is[b2m> uƲbֹ`> T\KIh]ո"i{6uDZT>RMo8mNP NlЎgقM N;Xt80Ӱ). sѻr .mBgfؖ^/ v5bR7kL:W5p{is|SٝXJ4RU":{w'UVZ͇Ezy<6:vB$b XTM]̪rVb.5wlt܈BzO˻UT07wEp$+:[u6ʊ(H[ Ʈ/攺EԝrNb]4Sugld>O N¯ ׽QqO<{=y}V[>q'7Rl2LG-h[MeZmk!0(Ѫ=JOdO YH&-?b\:%Zט|gޏoq18[v޲'/U~Ty-U`IxJ($)HaLIHcqhMSd.]$ﭿ?"F0'ͷ^JPkk(MJ/Yb&d6a1SQA L)B 8:u\jN) *+%w(e{8UƗոTKcXQO!ɺ !a p8%{@q'ï%c\^lIr~Ʊkg4zз&+K} o4+JkE$,t7yÎ]GWڀb;K=%.Z_4.h&rZEy*Be7,;8_͖6 >%{e]߈a?L$v^EA o$MW.s`,p5Ly7Mσ^׍ݨn:P+lE/Y#9.^F5[⑬ Oh텥U}],cKTw. 6=&؎T1耊xwJWL=#ˈ c3yʭoЛ;I\Q5\A,(APmN]8b2F_Ku} ؀ٔt 03F>}wyͧߙ-nmS\[?uM5q; Ո[n2]MTXS"Ƽ&_R:{6JOc`9EĩG_ r^o<_uvVRצNaOR1CfYZ c0hPp+syjԹa+­W+PseqlKm|AjT*Ѭ,q{;nN: aP.sЁDFrN\`zZp+e{_Ʌm- I3@? Nrm7ۧtdIS+ Lj^s3nq)>bS+$H3R)c~|\Q 缓Ths%pҵ -jV49THWehmlC ./&:仢[\M>yYMYja {QxWδeP&rZЫĚk͑*ؑmcE(DQ_YW@̂W߰~E{߂s)~KݙZs@qǚ~H;Es>FʼnQicܸ:qJ8Ƥ?kA2̋{gԍl{쓂ɠ.}CMVjwA\0FǺ/ ƌ[r]P.#zm/?ie 7Ȁ2n@\:b J\t恀O7S E/j2ooJ7erZBi_[V۞/lzOH&?{P0W V$)̴D#i6@ 31?S]Ze}[vV|ȴfW\W4ȇx`VηY['=cW6ɇ./6,}Gb+2Ϸc>KaNjbiщG1Qzprr8QIPR)ZKu1y |FU@ r|:o\J Ax1Ǝ!WcQa$ھO&;2tTM.sQn-A3/+]lhmELGdf [D<5*;s-O5(MWP 2@X>([#JB3fWz&~ 2|ȍJZ>l-'nUZK]@ϫ>8+DV zڃQ>s?Gޘo&ۤ-;zp9a_9D:z ^-kT5xnAG^ݩs{)ג>G/K}DE!/}[q2oJ-p,~@^bɽ^)Fdn @B$"p!wĪUl"Zܢº0ف^b+uAY|Fgve<`B)p<,jN|ǟWHm/ek_[:T" @U9yEol^լ:=LԻ$ ])&;mrۭ˶y,MȞ'796 CbSL9SDN6W%SnV`)4S&7 Nߖ>ws 4^l &N 幥 =}*MUB-$rGUtHC+4vAVʧ1\gL\c+Y Րj1bvt B#!|fR̞ZBm3CeV&XUXAZ̔ڝDnߧ_zvnM2 or;s\fEDѠ"":B< <-*-LMM!vnM_b3YgKE-3KsC5Z[J4~|u e|%[fM`*{g~AIM3 [1I+z(G6l&.IPW[oJ]1r:hp0[u7O$O2Ʊ7Lu<"xzٗ4bRЖ{ȲWdklJKģvt6,nSkxjBhl*xlOb;wy6qUA;u>nyь[=Ɩ"K JXܵl7V_-yƥ_Rݜ w?,d@MmCȺKmVT&Y' W BȻK<6;w'`I)z#+MP ] e;>/6sbDis1fk P[~kf|0o:ϝfvW>ӟ/rǿ{[5.~alK>H? Rh$p@'Y I4+U0Oo=$?E}A%Vєa*EZ$w)Zq/s%+l$ZRߖJU*z-[R"e+SSܯ9E7KToc7K{|QHJ um[? FViM?SmAQJ$bg3&亗 (ttN ߍńVnwŋ^Ҁ‡%À%劁Br4#ƞԸwJƕqdy%EjeV#l$5f'=kmi;m]P?0 6=Q[k~>/'>Fsi|1s_>}I-B{ QXTlKI~x.Ru Ƅg' *y\C8~+sԣN<&/]!o7VCWʢh8Ơ\kb)Yd?K5jxEJL)C Κ ε"`HfB+m:IِAjJI.TUWuk`p]^Dk@?y\TޫRV˼3us5mMU0oQKF< |~]x>Y%iLGN<Ax{.@^+Ы8soy\kޑeK;O$ l͍FLwk2.u'eEc{fWl&#p]RK"3&O77! æ4)A{-Ag%ϓ{Ac nw YwYoH=sټl8y;2 i?~Sѩj~SnI..nKXтM KetCvK`ۍD5U,;~mf u[^Y5Z޶d:'/Vu .[@*$c@IZY޶5/(SgݽEQj ?*M]}(r ޓ^ס¼/0cWwJhd l@,Tn[~I2Iz+wLHR -̣j\.|%/ wB:"'7McVԶ<`=f̑,O*XM%bZnͺX!HPmUwlPUm=WD tdon*Mז)koq^\×"Ϧ#+(GPDfA$Φ?[WlXXG=Y$;Z p' uB"i Fcf' y_J9JV?攵7#~4䭨TVDڄP=RU*]Ѐ1VIY^GF{#gi$-:\eu$ꢶ:qQg{6**k4sFS{+osĜv@>R-O&0XKO^9riz=(@s,|+_v=+,"TLa]+Ve6A *EԍK'Z~EaSnmG,?٨gdD"x=e:2'ߧꛢsF:AiH*z^xYfYwYnVsg'.( UkZ"X&׊io[ aB\e 5󭟻uF2Gi{y8O ;YOj>ʖ99mfk/ Dw%9MM/rw'ѫS{V"^׳Do EĺAt"%hZ$1 _W+ bz_+v>J8#0Z.$"]C5”*Hp9 7ZS8Qr^Ce%w4v-Mx:[)&u{fŰȻ-Ẕݛ4(,XEq`~[7[ȕ&(t r?`tT1 8OAuݣ:? |D$Eb4]kE=퀞&AQz~y9z_>>}Ej5oD޺xL˞^߫GC ([]Bz6/])3R'􍞫$`G-oW@̊ Sw˷;L[hi>>Ji$WNJx9)C^ɽ0I-ƿmΐ*xf9&S+} :]&)-"MV+r.(-GK8;*ǠN.'M! ||9εt΄IWWc&gG!Ό48vyl.>zp)U^uk4&"VM^lz=?*_Xu}:BrtIV_o75k4kKgc1NxjTO UW)хAY)w"߬y︐*cHL?Z&'ᯛHx>RRgT猬7l˒JrcE^A~KU+<}Oq/DveG c=lHQϒ]GFF\(Zg-2!i&* 4c_G oz!ڞKҟӳw\j^{t9<)s(\=iSLԊ>h BQjUR/,VE(Gk/Ea&bʻVe%7XLTNo;IZ[Iԑy@M~{Hرʆ* weXEj(e){I*3I4U(>:d PJt\os OSL0tAQ,bTOOG=|Ru|VǎNq+U(X(diSLJ*)PJ+}XSe%\A2(ȐjʢB UjRpWC gx(_P-BL|*Yp-/G|]dG4g"QuD]k%UDKHQ~Zi]>Q멣Df'4-2*%T{9ynZ"Ug|,2J!o`nmb,{7^i\+x*sv)EKb5N>ߓ[aAUѼ}o޿^zw{, nA:c+ʮZI>jn.| z26K}*E^t6 {u,1*3uMuo* Jo$Zd+=*B-(2wyTeʦ!yƵ- -I"V )+7]B٭6\€EӃx􊗧05kX-@YCR4K6 rŽQ׾8/۲c0Z9i?<︄iuXpC\4ۓ{?zwޱWk}iSz/WlMf* QFH{dП–ݵ6X),+A--@;|_KN*s^YWSkT0(:DVd).kJ%UcKζ,trYl@geOi#Og7 e6r)SQgPqՋTE쭨C)se$K3WZ)*<~LE"i?. }[0j3.`lH{I"B!w}~o+OTIxC\a!޺JYfgnu:wIԻTi2rIQΫ:KU3 G?7_i`Vk@UG ^tn}=&YLr_K)\sz]^aP+;/`zͤ>ƻ;+QeCntK)y/)㬍M5Mi+!BwWPT*-J3s418kcw|L-ˊJtFՄ>>]Q6/JC,<.o;×6$_}p믾~0$qN 5IY'-{Dd?̠]/wVlFEة+x]`\Qtb^P9PK*+zգVVWeG]F)b3Ia1mu"ԫlD{{͉G`v %%[xpGG]M{Y6]KC@WiwvMjSG*#@Z¯p!,lN3xێ:̭G$?{/3(OjyXfy,KIޔ߾^iEU{4&'Ze7r8dj m. ~lER>YnhT=M a )]+W,L7Fe,YT 0FTq`yIۗt1n)Md,k96R͍,*7 F{|-sQ)BZUt׾,5}nj亖rr6 -s=P茕bV90Z&SuDz*X{HY]e]AQ?J0^֔7^9T 0瑲 $GP0]4\qOg9k]m!k(*I/s^a@/Ymq]'v@dU}{t5kK\R wZ; Nsp!G6bϲ_l A4)! BWMrr83fB_ݬ:ZzaQ/L8#bdŨQOB ,# ԙ倞+җ\rUn~WUD&uVrXf> M cԅ,:2;]X{6<{y{9[2؄OF7c]ʲmUyjUܓ s5Q*#$qQ.|=~?ŲSzn^*t "%{xT},cHVK"ಥLϲߝ;_u-8N=,%M^f`^\Z~4O&JRQr ,Dz!w;ͶBGP| 3 ݰ kP P7\PMG³y-Vn)C f5;,O?!X mk|%}h8fw$tk>8*fsTv^ZK,@P;_e; =,Zol'P߼ųVw~' 'y ֘qdk&2nmz\P8zJ!zP<0{8Gr3Bck]0B&]1&8I == /hv{i㒑WU޳j-*Ђ}<r=n3-t!'c3cr:B-#7I"s U-\VN]ü@ #fYÙ8v9Я\Ï膲cS}8wo_xkEw\}ImN 曁<_sKF7#ɸH˔߳%И:;|R+/%'_.ڀV?0h8} 9F?Lg8bsUV"JmR&2\*toL9bꞃfl-A-\yn+)kX2we*)q z#)  w(XtF0wo&:i^-uʉC_Ɏ@kR\m$5޴oors4GsrR.,f/<Pr-5[ʍJa+eRH.^wr*m"o4\j oXg+SWU[Փ[ci0l-0+Ƭg7,<,  T^drKקxvuhrjU ,p &zJ%x󒻰(ʫe-`*܊20$eX̡WEXTb¥/f}ܷU^0K~V*f#*uq:wA hi~ Ŵ3s~Py+w$9<6/}\u.yweoWoK [>2IB-+ФU%٧d]h8{+*kvu`NiN\XrFn@7;z{=Ƀ7}Fy=+AC}t^LP\T7Nٴlx ms9*gy2"`4a ^r<;zsj$#I Uk~riH6eߺUQT =->Mˤ<۫]ɢTǕVJDD OZt^s; Wz^ZfAˤv1W%,=+RBVTj1x5,GXԞ Zs'E.͒АT#PUv?xkƑBOf+X\, ;,.@ڲ`ɀHVHk: s-6~B$ EG»Pl+ō?Gxvk;t!ŷ^9I ܑ174uhj/t Qr4D_[Uتpe&+UUߕJ7u\d|u9wame0)V$ RG>I66/PCBWϢJ}eĺxX#nVxԂtTޕ~f:逭] hkdw$GᢂMr*]DY@ga{ovE,\Vmg+W\S%&lΒ C)~#Fmwݲd筝\\^UKIsGUL?v4aRCxi_뗟@FRe3UoF5ƀggUDynz![}}+ 5nE坥j&d`5]z ے}:GcUHq9.2Su_yw-w?#)ltf/T'iIUM{) 5J ܵ'9oㄶQ%I^yW9<ã?~y~Α(8w{:@GR\y-);=)77&) tueO"%b:{ /?G |T.'&ui lstu{cxpTmcDpߐz܊ߢtYS\*.ZBjA.j3פ*MͲKV0MMk`kcCOo~^=yOr i3nUI" 6BhƠuV0aWk_\[g-G+0"_Ke:ͨ͛󺣋=u@4-|t$uiN ,:/z'?O>u?<`eHu@X=u83Hfz׶L,dJRT9{xQn:cQj;G;8׷0Vqbm> Bc N>/)e3-DnkWRj9A_O.#;>b^jv+ct'CmSO^O XjL|v]Wڻq~mJ}fXRö!Na)vQ kwqw{|[>DfG'ә417*ӸGU%6d4202tS' Y?yJ.EyRT{*(cp,`w3X)rN?^;{~~X@1dbFR[Om}t%*mQLSЎڞנm#t׉ͫ ~s׮j[NF6rZSPBbf.o_RueP} {'ڨ;u=E"܂Z)}G i5}X$rn=Q֣ v0O^~W^W#\6m^ݎ[3$tqgwּ2.G,4ddm AQ ,_ ?:?=7d՛EoUG HaQ׳HUqC+`~~kC^Aи=a%ewʶʛZg͊,I `(o>O^YiIOZ:>EEZ"'5DE<2ʩwbDFj3IKtmMa_i!Ҫ> ?at)]Pf#;d5fz7R-.C8_ KSu{@%$eL;6:5%޽×/?Gu>;{C1QSWVh|w@6|Dwb6ԥ3.R [7P5?,|XTn6'1Ly.ΰA]xv9* y>I_e–69 j;cas"U7r:^» u#N)N~"\u"s87[vo7P_& TV ̠c{뎳ϊW (r.b;p#k&'Ṇɞrm҂\iG*:N.!:=1 M=3CsRꌖgJG5z4T7U\4Ͽ<)4 X^ǭW(x|-a5y}=S*᪭27H6{rfuaam_k5sؽZ~[/6R9V.E (ޟ.=a \T$Bn^ W3/ZjW5%$ac2_}g,k )AK W>p[jÝ _1q[s(|6SXƲs藽p*rܻX-tH1e{ΦwpS=a&)E pvŠ=-sUؖ14j сNVR'LΦmD: uaۯB/l4af~}o *%:֍rho]}]j9+15.E +߬=ߒ3Z>RpI_7^"N܉;^}pʀzxjDt묖ZYr[.#VikB5ZJE&%Zl|܀7<'G?sӮwOF)̵UO,jKw5InO"XPXshxS%܉QvG;&ХC} ]I)lBܢS$4bD3( xZR]E}BXx?-dDUmZmwhP^h/\iWpHkGwx]M Kcy9w޾h9hk&O[贜ڭkToUU:mu]ՉlE1!a8Jf|` _$rgZ U^yf! E/CTe@HVfVx1i>ދbhəREK^ƑtFfی#cG#mBJ2;1&{ r& cBrڇ̳T 'v=\ڻGudT7#IX󺱫,;`>2$"rEHA r8vzjS!B ]eڼyjO9SrAb;X.gÎy}+QY)Ju@0/Op7Mz˷=+i~YNTQqJ,^.d[uݨPzT3S<?_Uꌀ(^G Ogm,ss%_?tNtx*E*}Z{iNˑ~FcV>UKS.0|m.QJʺ*lTGOCw2KOUT򯩯>t.!/N/M#SiߤmsH>NώơG2>ы?= |޽V[9\ A,t)!$`Ф-֮QXΒRYr܅jw]S틏Cs|c/)'LO/~y76T_"N=^9~Nk2TFw'so/R߉'7kx!AEح~5F'羊:ܤ5SO,ōB^PZ{wɸxEdNqW]Rq:U]g,DKZN$47:Qp&PPX> ޏ9cH8kE۳mm6EKY.ϫ;cg?.zlg78IcNr` ;_gUګ';l}X؟B~jX^d'''KJAȓ`3s|(n H J" %@hZ n- g86IRB}J 8AK*j좼͓#Zf,)?5q3\ U3ِ,VJ8!3W^ ~e-oZKF hckgӯ|Ӡȿ fq<4Z4<Ӈ;Q/)FL?Cmw]2J>gyN5FVTMav5Zse7]rf_,p. 8<9kjs3>>PIureϻ+RlV@o83,d1ΠZl@ӛ(;[ U"ZPNNѱ>[)ZhO5kزմw ܕڜ=MvTꍕl'?OK50yKjUBve?}mEZj5뱂dsV-5`7IEhCFҥq٨nh2C%唃qTHe^*z~쪼b>b(*֘=v6/V9v_}?-^3HR%a;M1E_|xNsp*gʯ|xO.O*ьDwYE㝫Z:i:iJ| VMUn1˸^M-ukZ+qo΋x뫪/2ڭk6B>]e孎!ӌ?EV1A}Aը]e5YS~ 2Giο@3Rߞ{ ih$bbbQ"T`M@7S%𗪚&ygiW6Y Hf<1=Kk)fe%19F1?]%a?j_}9z;`űOW:Ͼ8Gٞ2s_AS擳9]d:҆ޠ!Ѳ1^̂AvU!eS2>!'t ]YPuz7Sѫ A7gƼ{8{6tc'{ٿȃ&j@LQ{3cRu'EG/0P_n(P:f4q|a6HF󹲷di͂{B`A(zqn,b#|7Ӄc n4dz1_MB=B?_umxs>Uz,: EA$I@0$fiֵ/ݵ@3O?ﵖGНn*+2ˈgHMtӝ/w^o<}:ybȧ7_/o=ߞ߬uwv{v4ţqÊ_y?:+ Tq)-T+Fu6/3 b|$aܤi7 %$<@:iiǫIU=SkM+`LL,VYG0{*S ☟҂us2˷Θ^~7g/VO,Vwo.?]_߿rU@_ܜk2>xus?}S }Rh@׼-flvOpN )K-qe(puD}R6ӫg!^|ݽdn q#u3!%K4w?1[ ؚthMva2λC8wfàdHQ]bUu>>v+M&)T/VSF(n{i n)o(3<86i" Eۓw͏o?>\wޭ{e*__@xxǫO.ɣgaУFpg❅̏1fA"E'h{tM;w~+VP$MP>KZ_3^5pję;ۣ6}Mvt:Ky"w^ǽ0V7lgupϨ9%6ukv|ҳt|zS*Pw 3 eVvfKr|6^;w bvVsѬe!`\\+v_Нhs@~O{),iY:M>wwF?}n|}vW{w7V7Vg Ҽ>{Bq fxZQBpibhsLkm#lTv3V8>tmbyyeHS %|IlA\ e:Ԝ!~HRww{@V t>#5%Q-O}%2OU4v$AQ~;uw\aaN El#W2g!qq c >DD Ĝϻ53IE`!`d7ixEs}c~oݭ>on~P0/_?y~oywpVaxrsq'X 'ۯkܩ ꔱ8 ĝHu2Z7aZ)&Yg+lأ;v$ϸmJk3ڳc&['>rPVG]Ԡ\?r8dx>,htзAzh-|*#{8! n/"l(zpx$¤msqdN,0)uXMip$_eCxOLsc,bVůV_6ńX(BV=1I ; DQOR10 ǻs_n w՝W>;@_7K:优k$b٨gG^.ULt<4Jj~Qpi|9өmv2^/ƣN@&50xke>u_g\?W\}Qw hX(o.tL\*7bcTq͉(Ox6q?!LGzrR 6e ˉ8.H\mVwI_V@b LG==EWk#3Ǜz& T=M>.9p뱅 yWI{F1׭3~r#4L $H\˕ T|~}Ҋe>"{U㚣 (UQ!#ɲzړ,PNqm"F\6-+q}~端\=䃏\/t׋ ذ-z*?@\{zRȇ9OНD|Hf{Úh}@ϭds~z{gªgQ#OsJJ7e|RcmDT3A0/ z\6`>=5W =pZͻ !CıP&fA !z #ٞ%8)<`{s[jY!]nMiͫ=^ue)'.~O|B$[Q> y}u}E+_)}^Z.]:njʧ+MÜ?|A9!ʖ`Њ\1vw0h.dMZνT{ں vo 䟯n^\'r޳ؼqͦ2 L)D/r|}LJO#xז}ڢT`1ПǿpZ@ \ӣI;% =%& -DYݾ;1_.Wq@tir6HC蝰;7k]/_{; unc+ChsMn\sjabd׾iP?!Wv7;fgJR2+kygnNRtKӝgp Ow%J&e RJp$l`f%c"Djskzet_6x\ݥLW\'q<0U `řh :fT͛-$OGb-lT}>ThikQz ys dAj(Nf|w6lL|eI9GzbƑ{caSF) [^O!C60?W?aEi0(R)QlvW |*t?>*A7ޯyL6`uQhV?Q`#O?o8h}ۏVXn?'k~<21& hZQ7 U֢0L㦣%ߏT/;vK@KOPH3*]jrY5z!Y_f@dasmϽ95ye#dV\Ā%~^:/7Oi5j-IDF(c1:R҄41`Är0) 9w [l7%w-gP`sl9 !3*h{6i}p}od;Wi3V|4뼺Z"ާ%Unc'i/ HD=m9BsS'x,O蚏~tC>^'?*b{ E?<D*@˚ݮ{0ѤѓT[%~YDf Nx,'&xڙ?gc:;\9NJ{ħm9-H\OQ;ٞlPJ3/'|^-~ސ!p=p߻Mm#Jdc] :}zm ⳺SNeq5)V\qfŀQ[LUv DUu`R9 T&G\zf颒:1ںK_t`Q;˦yRmVos&O0nbB8'avNCpێs lC6z5y %@OIY6j`m(L܁(3g%U1N6GSk (ya8-p<AS0P sP[C~6YӋ_W? [:3YJ$thxI -mK D҉4юWޣ}?[b@ŹfKq^1lS DžkGstۯ_Ue9nvJ|7#3cYVBFB߮1%]z6=s}YY VoFw;4EW(2 C@#vT"9rdt v" tV}99z37D!wMV*R _I;%JhX+\RaH ݰ9L{dsƉc@'> pc\R y̗ݵN0 :3Ku^FuXVSgBF 1.CσI~C4Z/NMw otErdby/~&q~ ?S&ݜɏ|'Its(iI)H|<ǐcD~5QE~}l?O.GqO M.`cUD/a0˘.ݙj PHMInR9rל<ruyڼ!;E.  %ޮF{r2pWe±!i#2c3ÜTW@Mo8_;rM_\1vCD0m;}h5?mNzRt/>Q7 _Qn ȡmM&pOI`=ii, /[睰m:ky-#S֢h4ͯφ-addњNFKCmt:Tp>*GpT]Iοts nA= o'GӯLK~ߝE-|n`z -rX)cMEGmrhk<#[糒6b亁 9ZR#6ڜMĬPX|>H{#<ʵz4q5{t`0~[t\T=Ru F`Q*R6iyУuhMʳWJMw ᾌ{F?gt+&HdgȮ1FȁXA+I$ZC۟/rcTr}xORi#l%/wN. 7q|4 !9^o~{?.l \5bef>F{uLßŵZ~^ly)18O< hⅦx"#²whyE ߍ#ZPG)p;2a3:(Yk۴;|r2LdFVV/9k鮎0/zylx'JuI&^ W&_ v{j9s;Ħ}xPs>0VcYYiMmYur=7!gn$:x,GކQx]32<)2U3u,>zR%\QsɌ\#}_o _I"*F24 $6! [?%cʚ޿8?|<8\vMCf'1'sl -!}԰-+tzGrf{`F|k]Y~ eT}P&w7g9H*G FןB=pLv/ncعLj&'TW)vI1 %DBI-֊ ?@ZL:*f+]S"6Z=y|zL~0dT@.jXĂrUHd/lfl|H7Prb~iԘo%r ,gp&@gͳDXbyŦ16kDg)c׫H!Tp ]cƓ=5zAqnʌ{Qy x8nE O#.!gϝ{Mclbk\_.i~xktޢ#=!Y/VWZ~N>s~m\NuB*lJ\ a麚x_`/C+V,h1qhFºs&Iw˽BtG]]l@>t:N\NYNE[-JT U_I6p~5dH$WA4^Dv7Xmr~mcGĉ7@}ghsF. )-ADTY7HAn{7|7F;D?_?O}:3ub $<$w g먈L|_-KM"A(P]ߗE 1tH!)$Q!y}n /M5eLmۚ/WH\{rbQ%E&Zo@ݮW XKo*t"WCx x@]y߻(=T!Zli`Z^}`O֜fp _kZyh݆-") 2$$]x!^ "G@єWj]Y?:2;3cVNg6,}88z5`Y݁oX ݥ.b[:4Y1t9~75%a@L(_RW.],Zı, j`+3=.Bצ˻gd%@'vM4Gw3Otscڰ(uNb#^@',91(̿aS0݄u>JxG'0ûKSDD &s*Vxzsu}턞'7<^S*)M8 q䞕PdYlNU=p826cr?,zpHKP6EɱZFMg9pX뉦]q. q q '\w0h,MA3\Wo`]DtBajsq6lBEs=CT=(j1SsͧtO~t<ѺUXZL,i|jBi嬝7ӂ;PG#Rh;Ft0:UcN4) P*sF3ȐMЎʙz䣕F&x4|4{tnjq kBjxO=briwI_r{$Xu~_=PWlɜ6f:+ZÝ(E"rlc0ߌIAEAm}siTt,;3%xO@cIhUBY'a׍ý3coJ9d1˹9@Δ%DIm xJD#S?ntr}y?Vg[i9tElg| ̋KU==>ߩU G'y]CVc~ߥ ^ݹMm|jF ݪYwuFx\>{~,}ZjR#뻝mr2P}>MwMW q+Hh>9ڿ> !6m|_7YGǼQf^-hA|I:67 >E7NB3 Duk QoLC '+/r&їvqFMW4/See~z6잛96I3tVES˜l;jHqC! ᣗn/j ܁ .f9Dݭ,t[].~m,bTm 2=@{BS;9[D]F3uy{Fg휕|9}5;y]5wVgzcH9LN 褰\ily;VtCl9lYͳ|FK=}dlr~?(o+}0 _/,3m%)'ݭ]3KYs_ jDHg3.x\ccVJ+>z60ւ5d9]|mw 6,j aR{vLs+[ߺ}[ֳ 6TW uzMe+YKI/cY͝4.P iZWܳM6G.rl6W03%9܀MHj53VH$C-h 7uڊ];!W(5&3Z>9BӸ e͢1Mwike(6uSJ$vy/o,-;= @}`ϣ _k"2L6N2r4Y'@xNNHYw嗍l.kRkBC\ C-Q~fDyݰ~_*PEƷ1w*x3VNvSؾعo^lK`r)4٣idm2k c2Y] !_W=jC@aqn$YYMm[^Zb%be PޕG%6g7\<ʌ%(u:#C9ivPc\P}7GmŸrC3y.0p6I¬WScH,_y&Kl}["L ] sV7}^W֍ 0".hi3;޹D\K7&f~M%1&N+ ˈg oY}|ud[f)e1=~kzbdRmsL?MI')nGl^iw"Bia@alHYgb<1)#p>Cg'N":s /Dì~@{ۀ+&@GMŖ/fG IQZcpӑC}55K 'nbt9[8Jɠ 3\ˆTSh"Eq5p!ܻӴ@'ɁC訣ʴÌ{[`D|@5z0MC=Y4 4? F<8ZłKe{"ꥭ`(n1a>Nb;t%N&Nb 8#8^y=/{{bl%ySZ E+T_l+}bq1A;;/Cy/F!3xv|?l$n-$yGa:rqz`L%8n"BJ3PTAq4}[kj^͂qV` m,"LB=s.DcDkhR24z/ {5꽟h4ڞ}$z{]l7,}FDl 2ynVVrt]ceQ68B;ˌy؟ ƺy$DZ滥D7IN@U3VH"ҳD@wNX`2;gYVoMDt;z^ C)^'V#%'ON1n 82fy2Jf$X݁N}z1.7;q͢^i*e5gڌȲF 'sٳ-mxhZyCu يF@q62ϖgOx]g^ο[}WIIQ]r8ǵW pvDBzx"W޻9WGk6*û݄~ M{Rr+o=y" vnXV_>~^9ſ\xw:/,^,_No:*e"V}_JU suL&uh}Bw/yҵE?=ZTTdx ÷6yA>iqK=ٶ?e'zhP4Ɯ~9~ c&c&﹫rIrmN iɒk068Dj /Wi ~2Ȥh;dx{rͣYI{ zgX;BZ - ] 2Ğvõ 9QΞQ|_*#':fwz#rZgxA)4ow,X^,X_/_O-ZtI=uQOGWIi8*,GE\1Í_qZtRmMژC9Ļ fþص@>+oW..˿ץ{Y)jGsF뺕4LL%M`W@DDWͯsmT:F O/WT-,͞,Tp>, Y*Fn}KH1U<1x+1ksH.i}ym,LU+X4Gw7jLA\}3faLR<*Ñ1hrYVZL|˴ęi]}[ jEwb#*SaO6XgMy4۽|?8_{GoO7k`ËOvҘv#lrSc1Q @Fa EW|\ܝ1\b4޳*hy:}ZqRZ׷,XWd&ԡT(=αY7NJ݌E"@63w^w`/NEM2 )z4j )׵AI\%w&f#h$~ˢ ⦷[K`o _=jc ['*^[?GF~ťdrvԭ]kUXJv=yMG>hb|k~J!5)7ὉI/~T' xQ`=⹝C//X{rW类`xӬ5I6et&PW %̘oZl|@]#䯖֟}orgpШ//qT}y2:}V4}a_qp$85+9|7C" +`XX鿗u>[3F]sr(eVMm( =Tj*toϯQYsCS[&)h z|T IF łϾi$/SdVRrd[2GY+h>& rlȀf@P/m<)hGSNh·{ud=G?FJM^kw給[Waˬ.秵^-ҊG?u}^PbSbD\^'U΀dif63u +a[W\pkGY{ne-,+@X^xg }6T>9>w?uf*a ,j]]S] kTQe̲@7޴qde[2hVYoc`Ko;x -v@Yh)$)\x6MoSlkªceXudut=9 `|X|zzTfQ¹7Aa6Ijڣ:__PX(%*gpBpmkYo^`Lupr Խ70C=߬`ѵDm*oJF;(%Fuz9&c0D ]fiEOșVwt"Лq^]yۙ3I&Z73Kwl@4{XbYՓޓl<㾏1w4}:]2F9TJwI_56cʲ=Sx5k\S_QӊK9w" )~;a§ k~|sØ YBc97)`؎uUOheG[ ڑf36/z磶lxJR7&} Ek3w*5G78B<[ ^/~> \ >>0 ٻU= 7P|_G],:G,{`eG&זm]Hy 8{,|5qt>1`3me+dOVOY}d<= VaD@^"l~F}.9I<7>7CH?NcSdKZt ͦ9(f㑄me\#1rc(UkI*ӉR⤘XնPs`by)!']d$2t6 7jHygc3LtѡOkp/G'b0Ρ]|m:7$Rg3 QUvj&hf>6k|ɻP|s6^^4<? Sv--tŵ!F.] "+k;0ދe^:f+a#,t !y1nSxrw¼w;;_c /I=6'Z':D\z sSIl{ֈ ^0GnN* # {o%dnG#Rax}^Q/HlѓMQc"bp?A D{:3sc|slb?oZ@H:K L^<[|8^?۽ ?Q}J zduHlidSj$jANyru8R,YJSu6gg16nqꙪ)bMf3Mm2]P6-̉|_D 5+j`iĊn$O&N ȅj"iqÝcon@g&|iay??!"q{hQ!'Ŗ2'v Rue_zlA5nymiܸ07`nO00zoLOM-{qb dOT=@VcZ4p$:r!R]O{E7kiM`c)9=`^"rN`1e{`?Yi`%xc?4$n6).7AERtw.%s_p*@ ۛ+wcaY2] 4[niyH:Q5?w2l)GQҡɾQ`'gjp:g ~hc̱38 ՙ9PxQ>}7۰pݦJO <jNυ>i?N]N/U^eW{TM>PfS|`&>_H.Pi@Β?{|eOXN*1SD0:n̉@uR;*-[U]R"{p}ލm\%q\ǶyQ{V!l y` TXF htF ]?ߘ˒0L'j3UP+P`kR\0uRxd6:>9͈1g5h[N+)_E ߧ] RO rKgEYeRw8B_ :"NC>Y rb ^4-O=Im@*$Zx߈%`_EΧmѸb~&VY&H9ϗQoUWsg|F(%_зzi^'G¶w~vAnumV=K11h(xc>b5 G%쓼n izp2&KL:eVB|zdGcܷ{ zw8ZhDs3*> #|D]B2 gNԱww0i'qxw"N~MV8%;L=H;?[ހ_{"Qɾ6-Tp"OfmBrHU/P x<ci nVCb =+*7KYu68U^y5; dNJ7b__ ZiH4ёITumHp4P;j9 A!afݡ>y:!.md4o Gښ}l?^߼r{{V_zXP`!˰pbgey$y\XjV͐D];]wb3ZS¯"Lu'۠թRSyO=p (kVNEd{G/W7QZdJzTl] nUauÁmɝ>4RU=191)sdؿ.%O,4;=Qμ*x8|{_N ܠƶp׻y=S0&lZCEgsLv* '- ,H'V rϗրzFIS7+|i*~ C}`d0QǀS V܋Փk߼ΕJ*տa-:n9Z:6O3 ca=P} zjz8 $lL{Rq.ItgO.$BQjDQ{`榇Ep's. Ve!`NMʙ U0:\z_nZգIb5 S^*pm4d4 a] M{8}OEKOq5Ct3ʠÉ1z٭B8ߌ[UJ`ILä 'iL:[(3l(X-?%ݗ `41rZbLҖm 0 0%=pk@ A-qlw^D/tSb1!&)xɝ̞Z!(b8`1(CW,d q ץH/L\Jth$08Yvw,ZߢwKXZn)^>a`?wXeqb-5nRbzvZ]I{AJȪb |Y72D-#Na&隓/&5=S).#tg[7k{}%Ð3#`E-#I #+ Ƈ" %$nҏvT QUFweAشv] %R.$M P~WR&U%ڻOc3RDw6JJ'C2->cЮ>1pxi&p1;e-8f/G+6 alҺ#ν9wqx|ͩՓѺ|;K~p˽OׇVVU^?6݀d| u0݆1PΦo7 %jE 3W[.`D7)wOG} v7[/J hjbj"Z6%0h2ީ:1H›}K [l"c@Oژ3g\S+T20V*2D8JӞVq-A 3K J|;ո<)iKJ`<A`pl)U@ݎycPS(eտS>Y bO C8,n[ eh=EV\>WFI}1e7 E?TJͤϦXjFfq:pVn(/>[::6W콮|9 4 'lꞕ9Ԅ4]#%(iFUh@.Y!szOU Y\&u BfԥY7[/-[u\ Pݲ[fkD  ̻Wa GڍuLp^4{D!!Y&iz)xoՕ݁;I\F8P &7@Hw6ƙؠ91tq衙eUQ1ٺ6SIյݫm^ӍrBۅ[gSр  G 0ӶÛekҞ1f\@@{w~YHu8h@1|cj+sP@i7^:Pj_|z_}uo|'UvvPE9C޲dk[HzqI.8_1q 0:&ߴo\WS>$.Tb]7F bbwfw@? utj;lOO.܋߬T/2Pd!LIls!Dh+xm߰ t%aO>+;{b O7A=m:V"2b/Do"M4<-Lᾲ(-$?REnDLep@Ɨ[hh^10 N cǭ.W}|hC~() 浸&V`|97x꫗|zb|͊yϯ?\ &խ{*MU pw{׽0]# @oaNQ5Ҽ9*cyVr'B=/rP'$ʣxE%uZ{D"E7>K\+;m0V} ρ "VrpmҼ9=K2.9M}ޝ/zys"g:}~}.đ^)Iˆ1N>̰& b8*xS[]%NēJ{SB]Ջu]VO׏@oJ.= hq\uoɷӌ5v*vd_2jtȺ L&S#2ۚ#Y3 /ڳsZ&f|4lU O Cx6;/@Yh^uVݺuUgw- +o|&0^1S9~RI:wwY(QfkzեT@B_(ڊ@r&߀NVģ\#Hpxrhdcn}ss/&픚3;9|YߊL|:L2"B)3$TQ3Z!HS_Ugp[*ł*;r֘b}v\LFVU-YA\s!jm謜&ݭ_D8gsa@_J2XZp#s-(5{>c$-5ai!!3Hl!>dHX`96T}K+]G~R4侑piOGXPX Ƅ>헟p<QƖ.wIH-GȂQ:6*W[])3JCtϦA@W"TC`(gKj|u軽ݹo7oOwևwǷF []mkĸ>G6N~ @Jre*MZ^MJ7wKB6fU6;C_5enTRԵ1,s< -\oUGgk *FYUBxQl`Q V7`Yp8-m i7Fev _2?h8wqWY[& ׁ)Ge~sw S{PPjP!=,@ !JEwT4rvyמLj ? W]w[6g],eBjft-@3w!r]|-p?؈l] / iG}_.:IeVgBFِ_{ޏߏ9}4twi#d}r17(ֱXXlSEczGYuHPo[ҹ@ס9PҊkYMJ-xQ*b @ruUDB&I)Vw}dK"ى#@6MAO5,rZJ] 7UwAޠfMK}^ɬ {< yEllLtW =Z5LWybv](0#W;͎o%꣋bՈ{L-6sy9Xw:PK݆ +Uj5SmOw8XD??>W C+@Acr$:z߿whLKF× ϦK[ߙnEu>YޞmSH ;\5\lsG&[F/d Q z(Ћ(#ԛD׾l-3B]Krό0ؗR ԍ7'izHe5OXPa~s䍠Cd/|2lĈgjΤ:?Ӂ(|ӝP1"~$Pռ>F:i.^ӥs-f9 Y"qIlIm% b|f˂1 GF}"fz2k^.Jj:ʊV,zu(wVk'sqz*s;%ؚe3X `dұ&|XхÕ k$ߛŶ??:,wI(nNO;[d};0nW'K_.o-^ڜn \myJ]NRslXc?Ha>t"%6-*tJy[Xh5]=ͼMgw4i+bAX=st@eG[CGƷ+V6U`; IJjuzH8D,@⧇GƧ3GƟ/YD GvPm[UJx'3R@ x۩㘬n xp݉ G4lzqF̊ubR ؃ʥA ~ X:9Rᗮ=3ʨzqut.YwXh |UWo̝9$*55f.C-s{ )gϭ(Pet{\~6Ay&`exbLɅ[X3m쨝\$6qzldypƟ\X؎3Q^JK$ew R}IsT!' f)ZhljQźIf3 z5s\xEjgw,ƶSZG0t8bFVP] 81ls&Mj.o4πF(˃v۟Oy&%$3լ&jT嶣K*CZ&ϑlcf7I!@']w cӫ۞"p՞Ӏ^7{dTM$jtԁgxog>>ɮ|A?ur`KM syp-5]-H@Δ`',>`Uie(]VHu>{l|fx$x(=D&@}?ḟ#xbۣ'ŵ鵥j7,>;y'`Jt,Ǒ4]"Jb-uaj5B J|ZՍp"K S!_ifԽ /\+R_UV+9Zp TS ,WeS[MtMa*x .-k[;9~#z  ͮ#* dhdw۹7B9~4y8Xߌ ҅o+0@uLu$_G~ CRWݒR%5s߬p\)ֲZĜopTV'kXM(_z po%[ y}ہ|Uk)Fզ]ޭ)UFsGc]1b]"^ Qy#ƈ;\~ >ZryFW3b%#=|"UugMrc+1#쫏[qʉjocU+I|p[@ΰr߾;qEZ}6$~p;JFow%fVkF&R7 ,ξZűR xM(k/\^f9 N}e9U:%xs td6>8=|[Z}O }5N`{jm]Ԡ=>GŽnLIvZTw`呑oa{i`ۿ;c)fWjg >ގj ]yzWysQ 50\oT6a^VIQל}-?k؊g~֋@c]8Bgeu;(+m%uAeKZM@@)-0JsS24I.T,\Ylt aS m+͂\ *`{A1w ќ>+W0Pw\j~oFq/ҥ^NzQ6+Q,3`X\m~qHFy)ssֹ؏Ka|_l'ggg يrԛa x}۝ Wi:rB&|qIZ5;JY1b铧mDDKuR)۬&)& z[dܕ̻͛tb_mZHT^C` 3G9j{SWsc:[UUQۍM<-y||x'8txםGSU q2j]c]K(6Z!ﳌzյ4Cu'ew6@;7&D#nƀPgSl|-SR#bT+ -PddqR @KSa}5jk|\ ^BxNe'ۙx/ :J^T Hn-4p|+nxcQ3zP֑8Pړ`~k$WV`6xz!ʄ-A/эoҲiԠ}w(>hT+˽x˭g)*+|k.=VE[9 &f#nNC@Rrcjsm9U߬A}.xWaYhF[|%ɯqe ,t=%śDS8q3W"ߢOWkv\M[ d0\r%afvCm!9ߣzbRLty~|an_Fj gV(O?Ph:ۼ e={>{ɵ.&R?@8K5or3dB9r$EYZл-i0f¥*r0 5@"SdW͔#4?ʡn&w-e#)<:Hmg&Ex' l'be!-:2\Fk^RWoWGKį0pnT rdN#fčD@+БLmWj+PoY: G-ppo}-d$cu^%)t't3kvkx7;;IHWIf~;L3@JI `r spt9.?t:PW+?tm/qzŵ`/i # yt1 <-%DWCڜiVCbkZ0g]Wi=v:'/P#1 FC[%7Z9ad} ;E-ػڊ]"Jΰ:$y|f l9M-_E@+Ej_}*ܹ"R$vLG++hBOQ9h}0ө3t}sGjfit-+C\ra@g0v6hWp1`ٞl7HAQ apW5Rh@ Q:SmϧbJ@/,\\\\X5ܘDZxcpsW6BmcLÝsÕa_1+2c'r10o*; ..$7s%}n vfVd)I.˯pCF &6'ڰ3qjM,mhւZ~'kk(_͹0. e35$`/֚5p4G8:ufr#j!i}b'a<;(=6aO#m~lyT$*]4YԧaU ?)-*y\ c3 N^ez/8p/CF%L*ճ)^63x7z$yt: qɹW& (JT%Ve_Y|p@j@G-EʎO~,:c/.|b[1:΍/N,^Z|m2sdpwwP˔f0hzHz'p0YpI8o:YҫE0pT" <כGٌ0DUA+:t2?:L(ǍYU5 3zdjV,bH抎Dmlr?.cy/e÷3!EbWEYX?v'rHY@vSWFѬaͩV{LN(A[5$EdӮ{UP g18J+8%gSAZܚA:>oJwp#I)|RR.> Jf&y}?ݟSLJQ\ $o⦩vˊebA<v.\}/`vpnm6<3>_^n?+ȯV}:~=ν}뿝O:ٿ7R^efV.L;.+ݵιW,3ٚ٫tStdXAXaqccsi{~.@G+cT[=$hvF`#*S@-ܑܑ\6:gp9RTmW6hXe:DVYo{K+G=zw2;[l`vBލ (ߣѯrhI[ΠMAV U0 )׋(cS@ iNdĻ!)f}>,6 L$:?RQ_C2mrt\u1㭋 ɆgKTKWR9~y$9:*!hW, Td\OON,"7f{\[QׇOozg1Ub锐NU*KzKAtaz 5J6n(>[ʓSI%K譁=kUŁk@ϳ:`ΑX6M56yh ,(XoP!q3Z%e1fGNG~x!JP#.j] +R/E/-P;C)3A=ΦyTs@qo/KN\V)}{Ū4 cc.]$BܛoQGHԠPx6N'$otJT`ؔ]U8v퀑iĦ~xU,i}Xl{*{]_(suPsfP‰.͠ CTz}Ar쓙K󓫓[&XkW'[ix6ufꔎ?8c yhU۵K?1gP?7>99>)c7MeB\ιہ|\e L,Wʲ zϴFvש6[~pBB nߩo37t7"1( :5=iyoUտcB_f[ST+53 ;^'Fw$o=y.vhk/&g1<’;;>%dPM2[-T<|m P`M8 :(b~a㪃2a1Vxj̒4ۓ /._>+K7'aٞUia4?ϩ* M;wKLh g^s'"z3~If28ÊZҪp:xs%Yi<ĻͫQ-P|9DW G]B><eƕF~B]_[&0LõbX B,-F|݋ʹ=kZGW)c>>ҢW{p)]t,7`5*gZԥbDf}kC ]6W}RK[Eu#`tfagy?*}c}R2Z@M=5|%J;<]aQ2ݢͷ\M.뗹uvt.Q8#ronƑ|@ranolYOo/ݞ\:tgtЍg{N1 G?yUx{3Ը] 7.{S>mW_*0 ÌIY%;ͮ" 1Jb;{e}}ɷ׷5ޙyn};imixq'3zW+K3_̮wM@a1SJ bSN؉Ϙ>_ie6 3Fq nBJj̜CN"`ܕYukamqtҫ&cw* O8 ,iBGK~XsLœjldϿ;q^;^6D.[`73Rǫȣ4 5K>VG݇y+;z%2G.i>"~ Lrv;G ]V&]1)ඹ8gUFXURnWN[D37sZ+~EV oU#oȽ%tuݙа* ls7am(;ݟڙlrg|)e6Xw* }3m tY(6P](^G02(3 _fXҏmf|:iL"JmWB|<|8&p MD5(ɵow.^oh_.w/ͮvz{{7oFvhh2LCb,DalATp٥eMw/\ہxqH":6JE6X #[@^BʤpY?3}f>63I~ɓ@KNrpQmdǤ4yv}O mK1Z{_̞)q|TjXctub}VdS:)mNxUȮ\kJqA۸p28=7@%bP-V jup78xCejDPM:7w6ujst+k%z.OzD'jibE=IG~oF̽Al8{ ohHXnҢifI=̀&O|Y2M9@G62>hвaKccϷڏ:Vw|޿ֹgG9}~:<@9!7^ѹ\Mȓcpn@^AS8ݩT݁i8W@+t8B~>wwL/͆ۆڿ7$F,|^E0w>Tjg*kϊ6gߟ#/QUE,z,[ [ӄt+ x]οyM3JFSY_`~=F>>!BAhͺ*!xU?)N(eD5m5Cح婸0Idݜ6(uNR|aIt'RlO>G3P?3a#28&w_yLǔ+2}8ȩ sLgG-e4tH4t&mǴRV(fN7w͞<2_&M_O>ɓB]rl,6€i7ft]Xs1p9sV`KޢAօݜ ?NpaҧlR5ǚ#{}6~؟`1?aމ,DM,XI 6ϵf 2v֎V͌vH"۫Leg!*=U̱2 ~ה^ʀ^=ܖ8Jqܕ+킾x%hIbDI3mݸwc%:qcpYӹ}҃Jz:;ѽשy]++A<]uubIh`ùga'.jBM AQZ9d l8}$ͨ2&j0ڔ:B%j3-˚* ltW6_FӷYoU'CWVYI!\Ӟ< %SW:Wa[-\JqdoM*\V7([޺-Տ=;;uyd!){qߤbB N~F؝ޜLD^oot;wkO9>Yo[w=!Q!kV~4PPȩJQi/ϔDہ/{PL 7RIT+l'Oh(Dr2(<8IYRq2J3Uc/]8O[4m{TE*-l8DZMw9 .KF㳱(㞣ѱek&-:y<˥TxUC FŀwU/T{库3 _N\uC ߡTK ޞfE37+?# ݸ98S)&Eq|ifw }^, ]{Nwq&!OT~o$2Ld!g0mSb"\w eg$||qs}9]̇C.('zØ>5t/<'m85L;}"2MY}}gBBᅹΝGro6]x+N9+Ot(1{g ְkc#?iA}WSk psXhlq/RVcq1qQ65д19\Rvc$앇7gJz-6*&p6p$ErMWyilLM1[&b[%5[`^_&Bbqg8jyRp*!"Fx[vRtLl7I/)e9[auy3,!At6I.x-dPE9ܻ`UTJl>%-p7f(]ǿg\rK)=ȭ3!fo_E#PǑG.2s6cǩ0gq%G_&`޾5د.݅޵N㱍PkJ2^`{( RNSzӅNͶFW*.x %Yf]+:we k<@.Tcr90GTnT /kca~:Z6K}5U1VT<Т9,y98-^u8>p\@ulMto8d'8^46*<D1sBN@Iu~Eih2>am5\mrxMj?K$' ]ji3KļKv ? ucvIO2,yDNOf5{K"=SCwN*;v c:+=#l'O;ّN?ߊzBόo_ ֧-V}z{</o_M̝^Gl'o櫩oN2?wsBń'+pnf$/ǩT\2hL)~6+>;ek~:&_|:5m2AK @8+a~>ъbA覥J6Y23bP]<2[YTAgeV1<ȿlS|fI}A<x$a[)ٷly}M >d" %J\9G{i”G Q{Ag{~ ,761۬6T\F$ރݞ7S*ق*:&ҽ׺r|BB@LB=`~iZdrIͥ0ftQNO9y"`Y_w_Ţ/,vt@>F<9 獫N2qoPuuFOfg|mj50߉ fۃ֍[gf?98N>"NZ{k<:AtfK3LNX9"7CA7\kOT﹏j"1c`iuxRfn92qfkoOg8杖ȓ;&j]=.BʃsrZIKtg '*NY'f8au$G:q<ūD":|LŕUn&׀g+[|fug /"a6A*HFib>qwr쭵XKmqԑt7۳ .r@vypL@nIqy#ޒh2/FwiU$z{nǎϹN=fg?鹅)xbiXs8*혯VJ @h2R;tS*cˈ{󺹕H>W[C_$ Je8rSH+TmmNֈIAY09 ƮWRt wu7~2Hw@ݒZʂH C:E+= %WS]8Hc )N0'=[?7{fv!9c{N=α#>9#qz'O1L 8 7GԄ*1m4vGN&5 NgΝ^N~{:U3( LTzf=܉r{V&H=>owB9_2J̽p#?K4N(("F2Jv軓PZn;e-nY?Hyo-N,bPĩUO|5M.EwkF}xVƼ (!뭳km hap1NJYO FEMwHj `cP+dun`a r4Hdtws̈^DQ^zLYq򤀞[{4aOo7б H7Pߴ`_كH)@S8mQrhfc._URLrLx%?S6 ΍v(Gxx~n!]g;s>s';>8sI͠B֗qNr8M,4#2:Zq[˹_%bDb׺?1@ I2έi Q%=qTg= ,4\^ԹcGO%EZzy6O:1>eC8QR2Wis YvPN_l7b̈́P’.{*[.ЭN+I/#ڳfXY(xNo9?%>ıXUұT¼6ũEȔ 4p+je8G ]VW$ߎ-=Y@P.<⸍1Ip_-֞%EnoG!{~Xc#/W,]`}CbrRu@_lZP:dWQqP} =9$)B]ԐF??4{1Q쩣%OR$pm;uu[MTt%Kb]"=$ܡGE<'$:o ǩk~k}=#^/&9}i;շvrܷ[[c$4}a|N6([NũLӎm]j&`⮕7Bb#5̶,PWMQKa۱H|&~g$u y+ńq7f$aV($B OkgDl`F@YXM9l}؀n>n>zB,RnZcWw5[<ymgCCؔ8}xY17JPrـL|tͥCQFild fTKMWf/\~twgɉ?9>3GE_2A ,tkr:`'RgNC=6r p m^m=5EyDBIp8ndQcPCxwo }bnk)ԙ۽a2C/vg/nf2qd-6mͰ8&jӻ^XvN(0{|'#ZvЊX+58=@Q3 P[HWk7c)c/# &'Xusyꁐpyi% s4Xz"5;e2NWU- $pI2Ս}#l?gU =,e>Tt~_'Q؃gF7Zܚڜ\Vg$ֹ9}k e'̫ҐCA/1k$i)UW,%zY5L^7U6BYb\)C^85ޝ/U+{\lUgR ǩlY[B'IKU+x) a0]Ut 9o70Wd#,Y(O FST[ h=R.wI9J?J ge>[iIVf{2ƽNP . 〛 BԿgp35 򊩟c_IdRڞ{1W: ×z,J_k-^aߏ-V2 Ivs~WO ODW^qmQV;B-JX( zu;7$ęTS=ߘ].ZZOCȡnk&Zp3'A~A 9)ԟ+PC lQY(UMܹt}Wݯ2Wۢ$kA zkՕu9U,vWֽ( Utss}Nr,8%py@@=n cCT'3,P_$,}|'ZWTQV ZLSsbM˯wl᧥V>5gIeh XD|%lLU&t-)Z#@ D4c{͒D0BaK_P[a x` $Wk%vӂ1v}@\b>~:Gt!o5'M*-QȯPf) iG{xH?=#{>Juy*P|0e>3zsrJCؠ<-{9)-m=Q^Jo TPV6Bbǥ8n%]Te5k qKANӡ =gj\) Y>tqrV90/7Q1Q~n:ckdbk4XY1!T!ګrѥ7agObK5}Co gUP8fp_,i!'Me#UtqCUv_5 ksEyUWmol-=c88's_e?N}?LL elߎĦ_x!>^VTQvfη3ƈ33%}:l舂; ci ף%% v0?f{=D! ~71/(mA~;ܷ)iSƒ Tק#@<0ȭ8DCndSJ: w$KW݄@%б)*9&Wpa+2šCY^l)r-k[r6 :Z\t3ȧcd,/up&R!#ݑ_`c+,7̌t}x``1z=r3o78qiH'ثP~G١Zwb-*`#_G.ߙSQtjYY`P I3*Ցo@ͥ뮝w]eƁ1)P .4|బLVgc0= 'EڪRR"_zK)V*O@YMsdY;c|wM^z񛶾Pght,~пiwoI/]CH-rj;ְ~%w`|VeDz'_ {,$ۚr[JkDn}ĵfeX%mW<>PUU] 9|&,2%0LԜЮ05tę5CPE l?4m@ :LW8%u=Q% Q*#VӾ x1 dل) eJ9 DThz:Bdk2Eal|[E=qDj,6`DV gIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dictionary.png0000644000175100001770000000535114614030313016526 0ustar00runnerdockerPNG  IHDR00W IDATxYEx#I}Y$(%c3qg.?.3iw/pffffn44dRh#*y5pZ?MLSY"" Xw6pwjmxqð@F^r_yQG]ApHJH$Д CΈqo``6999Ly??[ yw3$I !ºǤI -kO>M((`!:(kA$m۶/|ӟv[ ذaz{Ao91ِr}jzf˯7#<8кN[lk.\kFc矯|(=}=HRQDT-VXc<ɷ 2r̢Y@ d[$S@$EST∨51Әߍt"4|Qn)E#Na"&Kl`6nr>84P$.dP!qXW_屍tz>7L'on^FQ2B1[Fj6z>#C6F_%Vb8, e'9i- 23aF!7J4+h62fg>I;?T[ρ8+4KG(eo)CLUY  \ƍsܽw~U*Ɯ Si7#`zjzMgOB;:Y̐:T6i /~k4&rF#zn I\(iZ[T1yF(B;@ Ɐ;l;lGSu,0Y)Ao<@_o/^_w!BusB,N\{iݕ;Ro`XD7vNIUKTJhbޛXHQlq q lҥЅ#Qh)#IM\>8r*c;=`Wپi2]g8 x/VBNdiynADg˪R'h12é`<ȕ zX?j`He-;y{RÌ놦e4\xC Hgl RkBag"ˡ01)4M9|'6JJ(4y,\v.#4AG*y|W=Ai& "rLLL'o%ғt-Ci m|UȚːӃn7lHܵSםXk& )~5B3ꫯbhh@2@]%TSIE)QujxǑ%{+W-> ~`ɧ0g\ꧧXx՗BI R ˗/GWWWF„4wӊM4Dt.q7GW@T kn099Q'*  @lƶ7Lظl<߇9}(bK X)kF$z 4\]B!bΚN0n0< DNX&}$!|}vcرm;{F1TcHw ;JG(NJ&OOKsr|I!6frSH NsF> =y̔߬.i yfxnžèNV`oPa%v# _aR _} LJ*H!9 l:g[̝#phx>p>CY̓xUɦj3 p Hf( n銃*vN8$r Sг7:ҩł?v!0uիwZ ]ՂbGūOV"Z6!{@x|Jj R#) FָέC/8M[0lMݲ@G' /C' SXi2(hzTK.Bo_hKڍ.IjUU5ip%}o%*R!5U UM7gyYi 1{>n)w'kԧs9G>bQ*&ԧ.Hq;}~.IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/discovererDialog.glade0000644000175100001770000001263514614030313020141 0ustar00runnerdocker False 12 False pychess True False 12 True False <big><b>PyChess is discovering your engines. Please wait.</b></big> True False True 0 True False 3 2 6 3 True False 0.10000000149 1 2 2 3 True False 0.10000000149 1 2 1 2 True False 0.10000000149 1 2 True False 1 PyChess.py: 1 2 True False 1 ShredderLinuxChess: 2 3 True False 1 gnuchess: False True 1 True False 0 0 True True 2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_bottom.svg0000644000175100001770000000645114614030313016702 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_center.svg0000644000175100001770000001004614614030313016651 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_left.svg0000644000175100001770000000641014614030313016323 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_right.svg0000644000175100001770000000646614614030313016521 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_star.svg0000644000175100001770000000500214614030313016336 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/dock_top.svg0000644000175100001770000000654614614030313016205 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/document-properties.svg0000644000175100001770000000662414614030313020410 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/fics_logon.glade0000644000175100001770000006167414614030313017005 0ustar00runnerdocker False 12 PyChess - Connect to Internet Chess False center-on-parent pychess dialog True False True False 8 False True False 4 6 True True 0 True False <b><big>Connect to Online Chess Server</big></b> True 0 False False 1 True False True False globe.png True True 0 True False 6 True False 6 True False 7 2 6 4 True True False True False False 1 2 2 3 True True True 25 False False 1 2 1 2 True False _Password: True passEntry 1 2 3 True False _Name: True 1 1 2 True False 1 1 True False 2 3 4 Log on as _Guest True True False True 0.5 True 1 2 GTK_FILL True True True freechess.org False False 1 2 4 5 True False Host: True hostEntry 1 4 5 True True True 5000, 23 False False 1 2 5 6 True False Po_rts: True portsEntry 1 5 6 True False 1 Lag: 6 7 Use time compensation True True False 0 True True 1 2 6 7 True True 0 False False 0 False 0 1 1 True False True False 0.050000000745099998 False False 1 False False 1 True True 2 True True 0 True False 6 True False 0 0 S_ign up 100 True True True False True True True 0 True False True False 3 gtk-cancel 110 True True True False True False True 0 gtk-connect 110 True True True True False True False True 1 gtk-stop 110 True True False True False True 2 False True 1 True True 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/fics_lounge.glade0000644000175100001770000066642214614030313017162 0ustar00runnerdocker 240 15 1 10 60 10 1 10 124 40 1 1 1 1 120 8 1 1 3 False 5 Challenge: <Player> center True pychess normal True False 1 True False end gtk-cancel True True True True False False 0 True True True True True False 0 0 True False 2 True False challenge.png False False 0 True False Send Challenge True False False 1 False False 1 False True end 0 True False True False <big>Challenge:</big> True False False 0 True False 7 gtk-orientation-portrait False False 1 True False <big><b>mgatto</b> (1337)</big> True False False 2 False False 1 True False 5 12 True False 10 True False 3 3 3 True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 GTK_SHRINK | GTK_FILL True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 1 2 GTK_SHRINK | GTK_FILL True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 2 3 GTK_SHRINK | GTK_FILL True False 25 Lightning: True True False True 0.5 True challenge1Radio 2 3 GTK_FILL True False 25 Standard: True True False True 0.47999998927116394 True challenge1Radio 1 2 GTK_FILL True False 25 Blitz: True True False True 0 True True GTK_SHRINK | GTK_FILL True False 35 True False 2 min, Fischer Random, Black True 0 1 2 2 3 True False 35 True False 10 min + 6 sec/move, White True 0 1 2 1 2 True False 35 True False 5 min True 0 1 2 True True 0 False False 2 button1 sendChallengeButton True False True False True False False False 0 True False 12 12 True False 12 True True True False 6 6 True False 6 True False 6 0 Active Seeks 0 True True 0 True False True True True True True False 6 _Clear Seeks True False False 1 True False True True True True True False 6 _Accept True False False 2 True False True True True True True False 6 _Decline True False False 3 False True 0 True True never True True True True 1 True False False True 2 True True True True False 3 12 True False 10 True False 3 3 3 True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 GTK_SHRINK | GTK_FILL True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 1 2 GTK_SHRINK | GTK_FILL True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 2 3 GTK_SHRINK | GTK_FILL True False 25 Lightning: True True False True 0.5 True seek1Radio 2 3 GTK_FILL True False 25 Standard: True True False True 0.47999998927116394 True seek1Radio 1 2 GTK_FILL True False 25 Blitz: True True False True 0 True True GTK_SHRINK | GTK_FILL True False 35 True False 0 1 2 2 3 True False 35 True False 0 1 2 1 2 True False 35 True False 0 1 2 True True 0 True False 6 True True True True True False 0 0 True False 2 True False seek.png False False 0 True False Send all seeks True False False 1 False False end 0 True True True True True False 0 0 True False 2 True False seek.png False False 0 True False Send seek True False False 1 False False end 1 True True 1 True False Create Seek False True 3 True False False True 4 True False True Standard True True True 0.52999997138977051 True True 0 Blitz True True True True True 1 Lightning True True True True True 2 Variant True True True True True 3 Computer True True True True True 4 False False 5 True False _Seeks / Challenges True False True False 6 2 2 True False Rating 90 GTK_FILL True False 1 2 True False Time 1 2 1 2 GTK_FILL 1 True False Seek _Graph True 1 False True False 6 6 True False 6 True False 6 0 Players Ready 0 True True 0 True True True True True False 0 0 True False 2 True False challenge.png False False 0 True False Challenge True False False 1 False False 1 True True True True True False 0 0 True False 2 True False gtk-find False False 0 True False Observe True False False 1 False False 2 True True True True True False 0 0 True False 2 True False user-offline False False 0 True False Start Private Chat True False False 1 False False 3 False True 0 True True never True True True True 1 True False True Registered True True True 0.52999997138977051 True True 1 Guest True True True True True 2 Computer True True True True True 3 Titled True True True True True 4 False False 2 2 True False _Player List True 2 False True False 6 6 True False True False 6 0 Games Running 0 True True 0 True True True True True False 0 0 True False 2 True False gtk-find False False 0 True False Observe True False False 1 False False 1 False True 0 True True never True True True True 1 True False True Standard True True True 0.52999997138977051 True True 1 Blitz True True True True True 2 Lightning True True True True True 3 Variant True True True True True 4 False False 2 3 True False _Game List True 3 False True False 6 6 True False 6 True True True True True False 0 0 1 1 True False 3 True False gtk-refresh 1 False False 0 True False _My games True False False 1 False False 0 True True True True True False 0 0 1 True False 2 True False 1 gtk-media-play 1 False False 0 True False Offer _Resume True False False 1 False False end 0 True True True True True False 0 0 1 1 True False 3 True False 1 gtk-media-stop 1 False False 0 True False R_esign True False False 1 False False end 1 True True True True True False 0 0 1 1 True False 2 True False Offer _Draw True False False 0 False False end 2 True True True True True False 0 0 1 1 True False 2 True False Offer A_bort True False False 0 False False end 3 True True True True True False 0 0 1 1 True False 3 True False Examine True False False 1 False False end 4 True True True True True False 0 0 1 1 True False 3 True False gtk-find 1 False False 0 True False Pre_view True False False 1 False False end 5 False True 0 True True True True True True 1 4 True False _Archived True 4 False True True 0 True True 0 True False 12 True False 0 none True False 3 12 True False <b>[Username]</b> True False True 0 True True in True False True False True True 2 False False 1 True True 1 Asymmetric Random False 5 Edit Seek center True pychess normal True False 2 True False end gtk-cancel True True True True True False False 0 gtk-ok True True True True True True False False 1 False True end 0 True False True False 0 none True False 3 4 True False True False 0 0 5 5 stock_alarm.svg 6 False False 0 True False 0 12 True False 3 Untimed True True False 0.5 True True True 0 True False 21 38 True False False True 1 True False 2 4 True False 2 True True False True False Minutes: 0 False True 0 True True False False adjustment1 False True 1 True False Gain: 0 False True 2 True True False False adjustment2 False True 3 True True 0 True False True False Time control: False True 0 True False Standard 0 True True 1 True True 1 True True 2 True True 1 True False <b>Time Control</b> True True True 0 True False 0 none True False 3 3 True False True False 0 0 5 5 48 weather-clear False True 0 True False 0 13 True False 3 Don't care True True False 0.5 True True True 0 True False 21 38 True False False True 1 True False 2 4 38 True False True False True False True False 1 4 True False True False Your strength: False True 0 True False 0 2 weather-few-clouds 1 False True 1 True False 1 1200 0 False True 2 True False 5 (Blitz) False False 3 True True 0 True False True False True False Opponent's strength: 0 False True 0 True False 0 2 weather-clear 1 False True 1 True False 1 1000 0 False True 2 True False - False True 3 True False 0 2 weather-overcast 1 False True 4 True False 1 1400 5 0 False True 5 False True 0 True True 1 True True 0 True False When this button is in the "locked" state, the relationship between "Opponent's strength" and "Your strength" will be preserved when a) your rating for the type of game sought has changed b) you change the variant or the time control 20 False False 1 True True 0 True False 4 True False True False True False Center: False True 0 True False 3 True False 0 2 weather-few-clouds 1 True True 1 True False 2 True False 1200 True True 2 False True 0 18 True True adjustment3 0 False left True True 1 True True 1 True False True False True False Tolerance: False True 0 True False 3 2 True False 1 ±200 0 False True 1 18 True True adjustment4 0 False left True True 2 True True 0 Hide True True True none 0 False True 1 True True 2 True True 2 True True 1 True False <b>Opponent Strength</b> True True True 1 True False 0 none True False 0 3 True False True False 0 0 10 5 piece-unknown.png 5 False True 0 True False 0 7 True False 3 Don't care True True False True 0.5 True True True True 0 True False 21 38 True False False True 1 True False White True True False True 0.5 True nocolorRadio True True 0 True True 2 True False Black True True False True 0.5 True nocolorRadio True True 0 True True 3 True True 1 True False <b>Your Color</b> True True True 2 True False 2 0 none True False 0 3 3 True False True False 0 0 5 5 48 gtk-preferences 6 False True 0 True False 10 True False 3 Play normal chess rules True True False True 0.5 True True True True 0 True False 21 38 True False False True 1 True False Play True True False 0.5 True noVariantRadio False True 0 True False 0 1 70 True False liststore1 on 0 False True 1 False True 2 True True 1 True False <b>Chess Variant</b> True True True 3 True False 0 none True False 0 3 3 True False True False 0 0 5 5 document-properties.svg 6 False True 0 True False 0 12 True False 3 Rated game True True False True 0.5 True False True 0 Manually accept opponent True True False 0.5 True False True 1 True True 1 True False <b>Options</b> True True True 4 True True 1 button15 button16 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/find.png0000644000175100001770000000265614614030313015306 0ustar00runnerdockerPNG  IHDRw=uIDATxsg&Inqwm۶mٶmj7ݦI}܋or##fu$%$L=WR/gϽL"_?{1G _l_w2.eo/7`'>QFx?PnrvfjJP꣟ g{U߾c_<4ޮUI 0nBC EKJ~㒢θrKxCy7ډHb4ҷkEp]n2j|ez?;?3軚=f3scļ#F^Ɍ>kPիY'77Y\|ֳ|K>O}oz{~yP4*%D;~C?{?PNfjvDavb"2e;9'0Ʈ311f .P0\~|&A=w7, $F*zq"ujF*FGX>ߗG;VḱK[e}ݓRS*b8ufXgbKN&x: "Y^4J&wjX:]uDܸ֪ bu|T߉iaW!ZM )cYr`"8 8q!6Dݵv$XhZ$4&1>55M\ն؀F=uSD:W֭: s'v:lYUp%eY*!I-`-KiYq~mR2bUG\EfcDwՋf>L)v]WaRՈlӮy9 fSpyC9߽K,E(drM'_V>p̘)HXV={Vľpy )\szU(衅l8  w kXkd؜5[soD\Ap'Z{/w?# ȩ{im0<sň8e#SvW,)_HFPؘc৿n;ȕJؿz!5ƉK՞68O3# HX-/CpF9w mՆcSֺs퍷J*F2h^GwwxA?D7Oj⽸V3/GPJ߸F:X$YB+ Ep$1`gkx /IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/findbar.glade0000644000175100001770000002675614614030313016272 0ustar00runnerdocker False window1 True False 1 True False True False 3 0 of 0 True 3 0 1 1 30 30 True True True none True False 1 gtk-close 2 0 0 1 1 True False 3 3 True False Search: 1 0 1 1 140 True True True True False False 2 0 1 1 True True True none True False 3 True False 1 1 16 16 True False gtk-go-up 1 True True 0 True False 0 _Previous True True True 1 4 0 1 1 True True True none True False 3 True False 1 1 16 16 True False gtk-go-down 1 True True 0 True False 0 _Next True True True 1 5 0 1 1 False False 0 True False 1 1 True True in True True False True True 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/first.png0000644000175100001770000000124414614030313015505 0ustar00runnerdockerPNG  IHDRw=kIDATxb?MH`  >6@$**#$$`t` ^Q۸8 Am=۶mfm665ߗLf~3gƙFb&axV7d_yN"&߼y<&:`nnw R c6=ckkйg+Mw_;3Vcvrr"%=Ŷ{7T2t:48;;/>t 11q{s[sff殪Җ޾N5_3ck!55uʍtuW]c5\@*IoE/I/H,BzKq ^IhEeb 9ѱ@~;N`8tx5c&GŋgiZZ4 ӁIS@LdbK{z:r#%7n^z3,Ӂ I`fj K*/틈 F!|PBt3s9D{VOF-•TQIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/gating.glade0000644000175100001770000002554014614030313016124 0ustar00runnerdocker False 3 Promotion False pychess dialog True False True False end 60 True True True False True False True False True True 0 True False Hawk False False 1 False False 0 60 True True True False True False True False True True 0 True False Elephant False False 1 False False 1 60 True True True False True False True False True True 0 True False Hawk at rook False False 1 False False 2 60 True True True False True False True False True True 0 True False Elephant at rook False False 1 False False 3 False True end 0 True False 13 6 <b><big>Gating piece</big></b> True 0 False False 1 button1 button2 button3 button4 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/globe.png0000644000175100001770000015317014614030313015454 0ustar00runnerdockerPNG  IHDR\rf?IDATxO|k6 ~m)+۶ms9ݝ3{Q̯wvsH$D"H$D!gW)G C٘v14X 3Ē $DF{P&ELE"V: *ͬ"fSh*76YWZ2i%+o^์D*Ĝ#M=|DTss[Λ֚)`PP(HH wIx wUիy+N߫ݻ9Ko;,[qْN㇑HG-粿.r4? @YAP(;(W }B$wc ;ˁ 1CQ4xoX ך^W=_6_Ez^|rm>ۭo !X `2!J=T h :$$/З}zX,Y|E몰`F@!὆pxW$G^DL|x⥫?z$fqb? f͝:a.OXծND00!"KՄjB`WʡOO^E㕡_|w95Ux)Bui^ ]uEF)( Hy^ K ;8s,(XֵU]պoC[S9?;p\]`ЁC\.sVe0e6l95 o`"& .`"Ai9 Ca / U %>Έ3%|>JDZE h6M(3u tVJF~ߢNT;3>)12Tʣϰl3Eu85j T t>SQȶ@" o0 j4'x6a e2X$z1$ /ٻ 8hf cffffffffffffGf,IG;3]l몮ݬ=J}ZY2(TתM}% &=Xz!d=H)<g ״ mg+s)42+D!?G LmMtL8]Lgz%_xa\&65vO9x BE=:?1o0Yd(E@ X#1i ϠlT-6ؼ,D k&9C ^u$}H)+2 TITk"2P c*4\mhێ=eMoy/_ԕaغ<]y @}GB@&8~{ ?8)9S|z hGSNی~M!ZstBbcyMW};x?iEo (3!2av ~l\BHd}-`#Ǣ ^Cz9. Q 1J9=kT=w4ѕXo1+tt#o^wkog `tK$b-?WcE%ε=y+qi}%ҕɖ_plaonvy|G H28ZtI㻹\o)2/`J>w[ ,t~- @: DJaps7v!VJXmDFl Gd ӌF[B86+$Z#J ʑBGF58sm7vHIבIGӿG\ L'@\tZ S&6{O/m6~\>\6l Ff2ɻ3w݉|QJ4 ?a!P齦R ӮrC>M*)5qLE~Oz`sG.ψҢ^K)Tjp Y}YWn2b$琒ӵL`ᙚOb1<1 U LcHȱm؃_lcc뺪zʟy\Pi|ȱW`S4@dA\? v :N 7 npdJctNh*``i-DQх.J_/-33qsa>s \Dzu2Li2 JE}ej5A.x7M ܽ㬵lVùFpNk\kDߑ198G'C/>㷼Mcu̷u筌Гmo<OpLUl n  0VP&vמaP42T(-k$(1iUJhA+ q5-0\3]#fKNbxv).? #`MN;ݧb{PO@/Wfg?w Tc8?5 \j.8"lpl;_81>[lzk6f~7ԣeAAH?<)wnN>fK&c̗ "#Y L\! X 4 @)3 1W ik% 86e0!!_6лH>1W#) M/ !Hd}:mWtj @Z۟~ZDiZTnî =VWKkϋ1>k /oNOC)g|?_m_n}?as E~e9 CH'D8:QM5`^F+(te86 e y $To$+W' hRU><5OV = zLJJȸAк1\k-V6=/4e5Աhmf_؇DCA#by%Ø@ g2q?}.Xϩ4'#v([my$}g ~&0k[|\R6Ri2=4&\ F  rj3 !Еf#bJXaYߺ*| @=Ѐ/L#)q\Y͔hϓ]RX{ O^Չ.Ak kk384Q~; &jzphֈ0htFϸ2`V'&DPQ\kPe^ &.Ѻ}Lx~ɹ"5XAJg*bMg>g9OzuO>ef35o4jV ƫ}p4N+Ҕs. |خPwaLR5mekcP.׌`` zMtIaKzǦ=\ H C0샹I9P.WY{Ӈ #ʎ[6){1[}[&a28I(8F\GI(ٟL)`w6$ PP#s` _%=13[|S 811fnss ߁'=p{:fog_e8|<(wԼҔ?WSD(`C:H !w=r2p 0c'#`i"Fij)cC}I2?_4˹->ϧ?DIK RMfu`tY$s@Y Z1_a=kkG&" |Þ380VuTveqDJhK?{m LQ yxv1q nqGo|mX|w}}sS6n+>ɸs  0%y~*tH09-H0+kLv\RKswn*BaU6(޴qgv_w\&0 IBҁޓ==';w `˯Y3GR{ߓ!I8,dM|6Ӏj>IPbl[K[VtA="k Ht3x[l *^s-a6kfg,÷S2F'q^<;QV%2=!V &SF6\K-_fz0,Ì pfɮ?5bEcr_P+$P{,!րEBc,Q l3e#B@^x$ĥD+K+bp'Z,8c0L" ~!-`%^8wt`pbXF +&fG> Z66IWTWO&<)ciJQGshh%<}C> Zl0Air!.-Co̓x3n'pqUο9W}i4\ˬ̻_̇zess3,,+ ÞqVv1g[_8s`@1glkrUap|F,<̝hE:@ X-qI\M ~4>EK!$p%XS@Nϴ{*DfR fS0TfQ@-}SWFèt 6 I)ӺݮaDQLdiK3H裿? |0+ ^+1 =5}NmV\B\ O.|ēvZb]gܡ5O{gWu{J?D6O}J-Yp30ie$jBj9Ӏq,GOFcl7esaiotVd lƠ]͗H#=(* JM!``,u'*P;3=54:h¥i QAkDҭ(2eC͸-_4Hk-4383#P@PD;v k/@Rl ud:߃ޓ糐\}4k!5$jgz s\*3/W={īcfɅv p [vY׽ɟ^s҄_H/g9vchkZ_60.89V[@_hhH@0^[]))n'|a;OG#=vefˀD'(+X3ԙ~8"iCPL¦>פIiPH xnfD~09.8gC/ԏR%_# Vg)!-c6+͑ |p)a 3a@HES=Fӵ%kdlEQ4l]UG 2ѿNU/n O; a89*ppe$A.?nGAo#u=Ye '8\BxdJ,Mദ|XIB)\!J@@̸5 x+c#\@Jr[ZHxm+&-.2 <(uJQRd0܍0u`^::4V_.1L=v;[]5۴ =^5S/ϸD5a%}Ι&a~ٝޢ.Qb0:H-M_,L¸hPL A] f2џ9Y .Sp>f-qZm C ݙWsizcMg+ph*x:+˸󹫩hS? ^|)E扔 O3?ރ7|oO.ʁ<pMے5}С]=~ jW32 ^@3y OH~YCf̒W+3,w13-3.L2ʒ-b 6Ve_kGWjPOCxquE dK%KwqIpWڄw W0Hj7 6Xʆt haOYH<(B4}|.OYp&.ઇ hmqF s.#HC|fqƲicӎa}=T.CT0*ps3*y E]^R{OǾ ,;s+l[C6@ON#쫐7@E^R)9+5LR͆d2DZ9+nRq(Cw^@3N1TR;uq%6l98.9a\܍=U; ai4tVge_+ݪ< ^KX³ʠcM ם9~zRHs820š++j3OXrq<އtU gKK =l,>_9w8<1Nwp#wS@ =Pi|JB^ D0 >q'V L A*.oz# D^wVن<;MG18ZŜ ^чRG)㾧P /a;-8yv軸<,.>} ِ!ϕZ|adC+UNALR꨽vOPZ~t3Yw]V|)$V1k;|@,_8%01g11kg,)%B q.)\omJL2A, ]Dډ)bjl*)k fԫwScwwoGӏ%3HCc f;1Zm"CB1~|.=s)Umn{ 6X_]_zg>P+,$? XC..aNi9 E։.}5 k< V5YtBXvX9x"` (Z"B'NŸr-yA{N鐕Z'>r fl1U$1q=8aQ/rhO<;BʋՋC7\'1Q>ΝJ |1sz}?*x\ ݥl;wL PG3r~E XvW_cc+):2O^ނY+,XbAbOjddDPBˍfSk킾w¯N,p?eJcz'r.؇ \0)p_4WD^FO>ĬsM40HΙ;=Ju•߅3Ϥd]B Ϯъո[Q`TԲlYmg`f]6x̘я9q7_<WSp_.2%(4^K2dsa]՛GV{ ܄ճ|r;͑ eFֲ.vpE(]l,G;'5W@`ŬBC~b(|(28]YgcM/i@kj.q:ꋰdYGVnU-(V!Wl@ Ԡ̡FW\z# D\C,>7^ ? ]r(aN݋OYvi:ǛZy^W,?T FHppBs~HDl<]Yr&?U7˴M 4_ _n|D5}!St 19o9$ʁ K'; iGpc54&v+R1%ft}*}o$7_c<{LbjMO?y.>JGl=@ukfр+hPNⷚ@8(rG 8;-BNDr))ciY6+}/=ů+O脬X9! &1 t2/ Xha7REspGw1$# %5KN<lb#1FPeH }|n%cXE7¿}1#*R ]]]KչNG۬v @c@V[\PMd3t fVxbvn%äՔlx[lB:daicpF{O_p`G96DhSִcUE3Fx||ާgp 7?J %9rOdJɴc_6o6Wv'/߸}ؓ>t8/'⼋WDWWwbu'xwci@>MDmVO19~m ʑd> vE$z1?W DSSy`h2ajٮI C1.ZayQwz(d}j;[}ƌOh<[^|I מV-3+JM]N#;хK_ᚆ{?:^rYhGV/wl4ɻ)y| b|A\ؗ#·F+/| ĥgBi^~Ҍ,<]ckW..۷~\]sO 9&bjDtj0Җ4dC:x> 18<Kup;=5ȄWBwW ͳ0V $/# Ch_Cu$8T O21*W1|j1t?}aaÚ%q內RO§]VcA藮{qG+V/g{Ņ6vZ~\ A mv8є^t(n`Q51^cdt +eJ gM瞘|G<>N| d<+piȅK~O8gyrs렢<tfIuy|! *=GkK3͈nSp=!:$4O)y-ɥoh;<`ǣ@@#Pɋ0qX{ XwB~NQEEq,"Qiz>y&y眱W8N ~wy37"/؋m,ԭnuq|]J yh6lޅ#PH>ҬL SqǏ1}f/>=K%=n;)/d 7-tϏ}dj/ 2kĚFJqڢnCynvCXvڇllMSȵ11o!ih55OT1x~=/{K)z#Il\CYŒ5SZG{L-3WprϓcKf-?e.W~šUmY.uʘXD- ]lRP?xLhAȄ5GE<뎻;  (粤)DDh2Z'lA=o A.p-syk$]@ _o; gI$W쬾CxJ?;㥢 D|yB\R8u3p衧H}V޾NK%YGwC)\t&?TS<|3 HWWfSw`B88j_l+tNIryPǓajiWEnLpe K>ZA棑9?;Z-#ҬX\ U ")NؽMIb:~'nsQp+RG={]ye(zmb ஐwL<%^xHp{Z24kWEo~kngIjVXOwZe{ }hUJPd4wr.2 ̰Y}@$nqY"Z'B'#ɋ8 C-:Ͽ h]pq^]S! uUٞC-8arvr3]E+N{&z&E**:. EMPagV 1V'w4S N yGLLlmy/ ׁ )7F3*)\ς+w.\7cPJa9&VD薎;>-}2;oϠV 2В֖<N0tƋT2s. c~P^9?1UkfJ#RU6^Si=<*^082 g1V-\X.#9)λ#WXLcWeDD,&]]s>b"aBp~"ްB_x3rq,IW`yc-Xw [^wGǫGblv!1kB*C@Ԃ j ۥuL2\"< ODooގ{"b]bN`tc ߿zs]Fa-CZ|4ʺm $Au(ΐnl}?>K{_U7 /Y&+Z0HJ$QI5u:wm!:yOP*ܸ{ZX*tAW*8%$?c5vgn gpLx+B P6JW\Wl#O!^|6gl] -KBr(q{`+gliI.ӧGi<B`F}CiWmٍ}:<4#p=}kaS?::C>B$~BDߊrWQ(w#/#JU`9(K^7ď6lm?|O3l0o]\eI/Udbjʀ.B* ^2s_`)N1K18&_DenO)ޱ z\ D$y~B1,Ƕ?qffc`vyfJ4^y6/! C$: 9Erc Ҋ QLpIDV-1Kz%O/Ο^0UrV?u m]ۮDtCFE|z*.:&cd@A=kN0Zw~< h<ws8e Ah`ttT$(<oAȗ/d |n|&"%0Ň|yl>$)-; 4J_}!7?xkQs#9RICM}qHXL[^t(5 4#-pK{`;a8;+JzY-K /M"VP$ԗ,{T}غk~KBU K ?[)dߌ0VF~|A vlhfli^<Pn}%MGaHVrZ5xq;5Wf-J9*TL[S{?~|.޸~ tC0:E"/UR*5U%N6 ^rͬ^!@%o٫go5Xe~=[E<;K?xpwO/%ek ?LFHy@  r PiZ-}Yp˸R$OyzP,"/![(!8|'Sk-9Y6g߹1u bÓ;%wEX&OcO$N8k *>`aXH]9]+ߴNY4J(îN&{hYzI]QKOu$i8&L}r](&VW("Bo/*xE d.V[ޮ6 Y '#M.pk7_Є'ϣŞ: 2)Lh*ȳn@*)J2ۓ.?OW~)I$[R]$aadaf_|Zk $VgŁ=XU1<7"#Ծ&){*P ƓU#p 7wP~Q8_;%]Y;2ibYl-.5op":%Wl%zOYk-Gw::W0/NMlZIƢm^ }ѧ؋xgTj p}'Ʃ'{()/v[a%I2ꖡ\{0@kg$˓ ƪ gpo>ʆ P6>8aV9C6L{ ϟ\ 0u ʆ^[o|ٗuWj-Xl7Q C8$bĖ]jJ[6blUs/#=S.i៖B_XB 0Ӓ1]'y${YXw5PtƝؿ7E\o|Kj+Gڈqs!REM` 9a֠`pރu%3K1ƻ>},?sftcъьNԵÉJ,Q&9s 8be«Y3c/[._1yD)kmcV(Ҏ1f]MۇhBLH/B0 S.#`=0$;e*@t[ s;o?7,҇AH^zq˄?g>[gpR 4c ցF>룷AOfbz)jGۆPij~(f.=NDCEBI 8Om:}m$/ EV'oyݟ[o^ ԓXC|p)]@ Mc3Gaӎd2yϱ(cw*|S5# -V><\u"BF<,z . K݁ZFXf].Uv,,Ճr:Ftpd ?q5BÞq@VPtK  $tH\qIKϋ} Jb`"sŦ_~=~sEciVH p,oG x[$1픀)30}/(/Y>oV|eV_f` _>Xڭإ*S(K-d/Srvힵ$>->Z{ۑ\m4qfip8B%!ƀO(|'ϐ%KVr.Їñ)/qdzeZkM`Ƅ|Ugд*ՖtvS HXg;jT% $19_ %4?& tLG@g Mbw+J XȧJeF,Ô7!^Zqɋ ^vezf02$*pQyj3zx]|ϮPVD@>i4W8LNFC-5gY  qt:$8&-x80P, Bahy~'ܦEh;xM!O+иЋ7Hڹq%H _L CF3%Y5V*VZm&G i -Hd%|n@.I33(Z g rR}>v:e[~@ȅ^%mB5 IpEDit)AQYj =@?/aL9mֆ"& MA5x%kPȅҍ7E V yc?*e )]4 =9  o?wލJ皿3htvAo:DGoԬK20FIg{%jlbx[i21iu+? eZpO \t4>rp9@s2KNcW$BF /ia ?¯[8O2Xv牓]趎PV16:+-Y3U!!>y?\ I z7i,`FwM,){+` а1['ۏKhD 9B%P[eh@h0k6y8?35vK\&G3_cmWr92cFg$dwy1B hA,3(ζ5uTp,;do&w ȟu~_MpMtOjANZҏ߽$<q $(Mgup$'(Ou@Bz#)%G Q*._P>GeV 1 $d;$mG_/9t3{+*!#&]gv/0TGI''_ZP=.> o-+h${68+LJ|폩~(y&＀*q]bT̚Q2X8#_GfwvcދvRw::j@-Q:\;n^I˔y|nXAg„"|я͆4} ?5$tݾZm SӰ1 ,0BӏOr9>Z.=s [t)>D5cMlΟ+h!4%* fD PSpجUTP3urD'F!lA.H!>eaUB Z%0"$0%,׻Fk x-Vj;]$e }1[V]u~X0Pq9i]Y H!+iq%aPky xCB/nOӆ}4}w ?ǰm9Ո5J+v 9{QW]jT3)8&c]n܏r*Ջ_O? }hé*PbhZK20d®ǎ0t: |Z;Po4"^:Q(}vG!OtC?w=at=8q%CcZ}rySuGEz QyOLἐdi^iO}fAϖՋ2c,f[b!'%Sn0zK(€+\|Hp*/G٨SqH)TꦝGP tI/y`ΌzJ2'0v 7GЈ#.%3.1V@1"Q:iE,/k˟`e /cS~VO մl_!G(ɥ4mBNBQ"j1\||L-%tB [xt?q~_ @ZOm)WA{IH!͛$┡T2+K/iT~MJ|ZYz>|?<x~6؝h=FwA9£,lٰ UNY1i!rs!P> */9vc[75#R%ڮ& KxnFSn"W׾"#$I}-hHpzt,P*fP.fQgc>"eRLa^c/i`WͅQwaVS͏co`﨡YqF~B +7zK U+B%Lzp7z|]]D%fL d>~vBQ(-&~=W>d!=Цn{!~7hMaz8eD։bR”WfbT 0kF7.~jTLY^بK)3~߾k#Fvľ#3߿CY:,OQ']xC_z%̙޳\NJ!t(n#uX>BjTHJY OZ;h1uP~ bm\׎ c~hJk rŽaz,V ۖےnu׸mMnA祄_Ô2z 5Y5sOIS``A5 [ӖYw >'0 _CfS'!YlxbVd]*oRmT(% <`fwaK6[Za wiu:iܼ[hdʥaTVv'Bvf0gK{"ŒI!6Wʧ]dM9E@l 6ahZ( 6Bs؅' ôT|&SBןQ[q-Nٽ996]c"[Ys||ءS@2DŊRڕ ֲj;˯eos9s~}v.ljip^>Tۿ{NzNuD .FGvFB;(pgBSoS=}D!X+B~+9/}D`y ~rI`bex Q_4w!ܺwQ$--ٗ F/Yӕ=UcڷjK6 F2Kk;$ p`i `5Y)c@9Ս]a:@GoVӯ?eM 캟f>9jC|oa[`i#/b}_3j 1]=kz@( ࡽ` /&׏7}c dCq!p"CsހX*PR$N&JQb`!pnr+4#AD pw4ؐfCQ 8 Ddko9azk5?ȵguq}DS4ƀ :Jj(\\1hѻGn~A#^ k:"F ό }"he!+0+ruo I#/QJQꈁ mE3duw9)K.M};۩C I%|0ӄvj6LLa55 ;9X[[Д"0Xat v٨P&U&:s"@a=IGxF(` Dx6j *˰ϡ|qb,7пOsij]/=̥*k_qSc>,.]m_txԄ (IS/Tkt9I#֐AGngiCsB@Hqb_S& L4YGw)cG^:";YTgKn,>_g LсI#%"F{ՀmJ6|%zXi<߰EgP`PzcC+/~qi}CҚڇ c`+k/5'?+> dI$z~۽DsqS؜^wU?J?vC= =R6 "ןwPb˛ޙS (%PbE34Bj&p{s, pKwaLqQ6 %YHݷww5Ɨ++~YHRz!t\cgY#M@j y=m5`SZ6z#J]768hfTAόZG5Oo9p^o} ,r//uѡ r6f w+M(3(4 S^AO bh]Z\{nT4ۦ! q25CP۾=7<$_8_n{EQ{4WR 'S$r!n+>г~yX(Nts*3$i,.q|3wi[C"a g.pr9[E&} !& W\[L S-4j irGb@DbDs-\Ë́McfjuwQnq6R=2D 7AfIK;5AxCB@?Y{?=Kb?r95pjXdB6) 0hL&w\Ad4"t*$I ;_`C59B"ZzEA)Z1HIpг {:y'g>=0K(T _{}Ͼ􈼟LBuqѨLm!D2;M3g//:W*d6PS L8=Yn[ܻE=sk<@dp"9 ftzTsRFr멪!֢78 )SGB+C <}ΆVא65$UVWiYS!Ϊ3ʹ*`b)ud" D^c1U`DP pvJ;h-n_/}ɂCq&Aaerl#q?)YXϿ4xc)mb|'hI 7x{?) ڪRŀ{C,(yE|x)|3P&~썱NYi6qki}g̈h} 2h杁 RΓ =(PXC(uɬى&rku80k6 &Pf H>kY|khr0 h%660sXb1YiŭC6;y;cT*-^ЀsI(7Ox>b_V*TLar.By'!kH:~AaImzJ p{WZ~]xNtZ:£SATfJ|%F{glk񱊽 HN^"J HHΎ6l"/gmCAnQN(@@` lUhm4 եJu=#㠸hB@hp >=vVʆ I@d'0o)(bD׷S)4Mn+9@Ke8T4; H =.0Hw\*`o:t3ĢMʯi\\ȳ|_qxfYFtOm7HH~<Ġ8n|?PeMu*=T5#&_W\^O5r>>xiRX$8w*9|.P?*݁E#7G7{t~svLOG~%4ԮPdTKnAFjfz൹@natV4Lγl=bqhO5ZM`gϛ_?(ژh$(\ :rxG(ql@Q&"5$!JN+N49Amc ]늑н@edP?8PYWA+eԯ{\Z##VՄfke/J =8Aހ Rc}S-4=u_WeRCa[bRVFWHBxYd2G g 1ϖ(pEE8M5 }EAUj R=t86`NԯWZq/sS) XGm MC})5qʵ^AR-l0*0i6uliċH5Qi0P=A70Rt UJw گ׿{_4C .=^s!<􊣒,]ӫsQcMyF XTWg`DAVpy3*]g$pv]t "ֆ>tlE}jsS hP6yjJiRTцB4EEQX2ȌRYxdnsQ=7MH5 ngdAIJ֒H~F4 D1iQ}0x@)ҵ-p/"zwUd/Y;/"Җ<*6s ~rPx5! "+HbW ptd-s;xŵ w *O/:]4@KeW̱=9bQWͣlؽgBdZïv(6PQd[8܄!f kx8=8 82EK11yh5 EtQΜW:A܌}oL6En_'axB 4=le҄B1(}Иkdh'"(S@U{=j9D P)o ,z/C;ph[8zhyK=wxT($u$dC-R{!o(1NVp㠆6jS ;(`*1y~C4g,<1#{&MKy݀V ,(pRvYhQW^q ⑎/xUc1O`~a3~NRB܂"U%?ZԱQP ImM&E/K((NDݳ1W㤂1ag =wa~YԀF#!g=3n 0F`O*Ճ~ArπX2b߇=}|guo}PEBprA W2j;&`,mb8s ONxkp۬S–8 Ǝ#FЀZ9mY ׵DgS D@y[̡X%^ ݻs " "* 5 ʚ{ IQxh5Yʼnmu{T#5`C&[;'%w_k,QP>6*i +ZXw$~7)-Wt1rFv5ZҐrkUùQ"-) [ɳz eu8sPpWڱ$X#^ds:Ta伂88j , sG:u Gs&)_IjfUW&`Q\].2-) &Lce8 ?&CP?V dI KR)>% RF0%220;8C6"U (!# _?Z /Lg nX.HH|/YF&^e L|ı?W(cQUr4X@T'eLP2_ZZ +Ne={m픊\Y8VUP'9pFw@fM1h':\̄OQ= O A1Gʠ#dž8r`gJK8E#IRtć=΅yI5=n(+D72bb_8#aIl Lbk]l2b0Pɉ=>Ta=?;/G.nSczYz4Nzjٚ$t$ S6BzsnE*Jwxp"ڍZI%qt)5V?&" ǀbJ)[Lj2Oy$ Ńܡ[t3 8(Y0#o@ lWCGn^S}٠<^u;DTD]c8M!(F?ywl})d%މ<Ȓb>5.! B=e][CGwz!yGu|xI<2<_t/`}ЌC;P>+TJ RB+8%82]={bi#f A^tb2"PZn22i~<W<О)t_PE*j'CCl}8^ fU kr*ɖ@ Bp2@j0W\Gy1"MR~,=׿陳Ȉٙ)8z>%.vZ_Ŏһy[-p{EwE*\HϐfZR@;uv&x#ZF; ppp0_!<; 1D]SlU&Z8h_w~EJmcff o.J/1A_תk)KO_FlB ]Z+ w+{o0ȳI7{-WCam&u*+)@ S%*-^j-MN94"fÜid{x㺅y’KhB^n'lPdJ8{"U",c"<3P%JS1mgB7ԳD}~<$n|qucRE\_$7Vqk^a151>&[zf3}4>Z]G9W&m w &v3a( dhIB ;X&:khUVK+@ *d?ݡ"kԄjBsFC'wsnB%<#z|)iˆ ၀h*LF3M2Ml n ";P.%H3#PW/ H\Cp( VxZ'kK8w6n/wh5-pmN76f`]=2&h'82_+O<<5@863q:h 1b*Q#m{뤎v)9TM.KECR`yhCj;l`_7^P;$֡ A4"N^V+*ЁRb49sg ^[_ P@Pr2I{昛lP&L+A;)@rD.AkFwOS{>xQPG6XanoRn'?CחruF{t%Gߵ(tR!S\Vg K`r17=OR]F5x6Y[J^^UtIY !zD7d#QT&=8ϕ?ww,C-gspHYj8+ H^54h^Bdыy.| Wqdwb N7tvNy{0 h("q[r$Qz/dAE]XR%bI)|5Xk/d(w!4qkB@wח6ӆm7 r6PP[)[@dAK,!Ah5%%D4y%<КDR_@a YZ1l`&50&بotN@Ȍ=0 X2*:i]pޠp $3f+L%ϣ4zkGAA|frRx)嶵(`*_ [࿱ŕ.61,TQs.cBԘ Vd bX QF/C.a#p?։KPAJ 5vy9_ytҚt{Pae 5[H̥]@*vbzcL҄:V7 ˟DJBc袡 7 Ҡpة pkJuyxA_i3֢Ysg\$n!Fh :gk賅}A_YQ5ltĐJ eICWIi82*O|h|Əj\ I'/Jg`,E{~z}{pgZ3  !ֺz<5- xpp@ &HwOcprO}S8ov0729gfiw {׮]?LlJiP =aPJN3 Շ<N~CH~p5C~S1\ kB>{z <N$W} %4 ĉsIz]!-Y#cq؄f҄U<O7M80@@|FzVshlkpw\}(M )3Zf'MdXZϰ˱gzQSR-I8 Al07`I>u,8NkSbsH IxJu~P|E >FĒ│ (Mm/+_XnsS~n`'Qn ̇@ t@vWLN|)xǺx088)\1^Bd*y{̕'4n9P1j'mKHkhV D͵1τRg)V:96X,r<("E LhT(Å_4T GߣbםZ$ RT(UpYN8#F JV쭷׍zQD}:67s"==E`PpfQQaVvkX|NWȻ_UZs+YMZ+~' 9kTzͶܕ%TuKPiι@y V ey lDDje$jݸ$U:>o 'qp٩X[#G{sxTAf]C{*UwZ]^9 Ea·W6q*~#i{!u$ׁ?VU_J*AϞ_fo@m3fj&\ֺ `HD @8ɍ>0xs7.]9r\{jc5 V^FsyQ~XJu4I Ԁ@~UMkxoQ.)(B^@df 12jzHX hp*P!0PW)86)Nh!-=0x+r]H$f] Ўr8cieg?1Gc4w.XlSNĺ|O_ƅXYb}OJ)~''vIDCGҧ)d[)C v3>OܙqܚshGb-Hre[qt yQU ^_9^Zm f:,x(@ i|;D^*}E{6Hq@ FS,HȝCƞtjwf2%* `K(44m nbBOAO*e=p)*3C^]x!mOzF :?mXf#5b w8{dd)cJBP$8ovMRז{i'X$d,\\W z Ķ_s+\{4q%kz+(W 1k<5P*txjn0n-I{ֺ}2L['! :D~mf߾fI9?|hP<ͳ mr|/%[i J#G +^}lH?' { yI~,w 'yT{p'$ wMxHؐCש3x{pikoIƁ&',ipPJʿ/r/F@s:^_cqUW2 Z?Z2P|[p=@FPի'_Ln n{vϠlP DޯuAoSx̕_*pdcIm}0*e2 WZCx*0?iی%-8h" b/147 $m܋M6Zs."11ƿc <@{;Kn_u˽3/zdy^!ub?4~Rnrbf o/"Ar:: =!bw:UG^Eo(XoA(]=\{[Z8X!2JCo ֩`+aܤA8dBF~|-Q[i@i[qhU-!* I86w?xҞ$ao+=~ #/ ~Ǎ~|_)򻪨. D8(6pjHwV3X5 <0vACAN. A(RBzgW3OJ;l1Eos:aRJ&ϧ̵:`shpc9HzkGAj@~AFt~jdY?D0F?r3R 3Ύ,(T}Q RU/E"?Es޲ |`9j!FdlGR8K;hm=msӘl{EQn>/ ە> 6o-L,@Q{$Q߬w?su]֑eem@:/S+DuQv= fi(҉ hf(g֕!mǶ3` @tc_F䏥Tˬ<d3XY̠Alc)h|)w5;E^kW:5)@+$~ŵy\?ѯ~xvY8}p.U rlvbЮ)lfX!Qe^>29@3mP!fǺFDŽ~d=z9V ]/}ZL3O^BXj< x_x/;`#b)o [C/U@W:2Tal;bh+k/o;2W`szm8sm9T4 X,ofXfxrsK2f8hwHׯ( .D`BƊR{ 3ܣb۩x-l3:5!޹DZ 0;>n>±S3sW+LONrZ}ZK J[Ğ6zͧg%AlLO47lYyCOƅ+tU 7V6zJj'&%^/ǒ8i j"t\fh?{X6K|FW|⓽6WU!(,7XӗQֺZ(f&8u!dذOn֚|o/oTa=_pP0ix#/%G7i "0,v887˷6aBUIXf[c'v1%g*z!cW{)x/n# xMI*] [I(%>arj7ք×MRDH@viVev8y'5]!#=u8R`;.Ggp}y- \-ñApof;h6F.=#AMΏ>o47a{ߧƍMty&x8y`g!;>N ҈W8FuhȩZF^ǟO۵l?(hLL ! x8j1pDD?I2S tq7%G\{'U 3E b~`oj1 *Ik,wZd 1VWG \ q!c4} 7gϞǞFEQxK]|m<h"YYGcXϏ(UP ;Q^~HQ/IB x}''g=I(^XJ~b?(h7!"֑KߡEW $ ~fY s{g˹$<>e4C$Ki{m?nR:mN1AXhi1Dl9j){=N;E(!nm3 ڇDZC~h@z4"?\|=R)TQd05Ph]G"jBlNNNR'Vז)OQR,pA~ Ȳͥ=?R%tL_I?$0݁@٩&{F9FV,"$O%F/X cL%؊_A8)=ŝt/~Xl= 0HX"篯!7ŵ E-(%G^$G |"2E&ZM[^3Gctj5ިEߜO>$R̔Ki_s%I M>:ԥ>T+E/1=jڀ(hTٚ~[AP%5H~5;;Gt+W= * piAy aDc5[=_9F?̥r# 8[ {BAYx +eXY~6! ޳.]wm% oCBkcI`ܡFpwE fLb@ɚfi$ sl*KEY5fC8;sMb)6Љ}3=ӢjԋwE@!#"72=^A]# Ɲx4MLO܍ JOB?HSWֺeI@hV 2ÜA 7O?  g>{ӅlR8͠? DC^%Cx\e1Ș X>tAD_ TXQsKzAq Ὀ6\r`G")*RL"El%V^Vͅ?N"yʽP:&-QI{pca MT[ў:VNDyR@>w")YV%0=}(Gݞ4\xpL5>mD"#lr:I3U]x|7w|] R YQv@AяGI=X 8*(Z;77_0(H뚆ɀ˽r_L 4!P_pPm4PL$Jn\xܭfie)Isk"7E@(D@.|8-ZQX)T{5 Sض"Aj4hP*:6`n:Pܑ-±/tOBY[HgBi܇67PJީ» =28xI;Wx ϸޠ﫢ʋ~'0F@"nn!GV8_e:\te^_>rXXIwB7aBGfoV(ȑ䞿3ſlC,|@9 SATHu+ = up-]m#޵8]*e6ׯ/%㗢\CYvCN5 ;9NȩHJ_'sQ 负et}ח17¾ ?0 Z zWu?Ʌ57TT<%g?]k+;4Jh~Ep7u](U=6x'ݞV>T@ρm(2v-ro"6˛?/\@>y7u:݃cP&Yњf>XsJU In -w\5},5^%eM\X\PVXQyJprVl ] +Jp|fZ+38$<4 q\͆t;@&c2Nw&+BLlQSPj7O$(R=-x| V7YfJ3ZӐXϖCٌKų@GX]cXmp j*&_LK/;` KYрbk[zno >ArˡY#n!3`c$rKW Χ(RyAiR7P:@c-V*PUD{4IX C0;J@{/»!$愉g0yO@&in]y/k@8>O,|˷эn6ϰg~n )x͢ =>{  WP4yE }`ӏ?-|2#&(8ٯpad 9%ҁp% 66 Oci"\=˙XIO3@ ,9A+M(hLox0chҀC)F7]dYJ9cg CRB %Vo.s2Z2.,wį _#1{w>nN11Rw6Q{KkeuLҭdՃ{4!k^64)~᧱0r.0(7G>Σ*M"j^^FOSG\c@Ѻ3 $>fhPvA~ +@@`<)%VE>|@PxqI|Y sg ,orցHPb?'lT.lcs.ֵ~~CP_S#3kf1hx)IMZD+ۈK`|n'NW"u['ίR#X܏ {n3r/'5?syozAX?A)ODPb?Gy8@cbųg70|C1111AZ;42w`mȜ^Ω{0hhX4P xyVYQȚPh/G蝻_fr G} 2$WyC$l1 `w&!8n>y\7^b_t5*4M3|7ȜG4MqxPշ댂,9Q b Rԯ`U1n7쟟ƾh $>UqCl l4j?CO:;s<77[oG=ӳ"Be="D 0DGY9%(x/@?h6?3_n@7}Fʲ3M2KH_R$1M+L`~Z#˫*` ri@bX_>p ^"ઠ-#bXO/X/kUwX\Zzd ̒ .Q$(_oҜhl,xʼnݩ055S⭈B|Hhw Ydejӿ,1lo8[+m[QԈs?s?4}( Wx1"d} MB@V}zrn<^W+A&tg0ybۯG5hWZ93de#REqcQ~j@;R|w`tf`D$. X^`1ӓm<0D3Pimu.X'j¶=?Lsdmz7UB< o:_>npVYxȻTz+-jZdRp`3NqjT_LxGVݷx\Ao0L2¯+4\箮Qadr^3u0k_1u@g|'6;upƮ NM`fv$~TYc׮]X\\qrĞS'.R?(v a)S~[A(iՍQyU>_Nۋf-l~oyanN+䉗C)hЊU77vPX*3uWxB&~ K'7\NrK~Nx}tFZDqN{fjHW|ryL6سMzB$سgP/Q_;I[x<~`uAgm[dȳ~lWpK46s?w&DK$xbvo?]ɚnPMl(-Y zI O9Nr̃88WJzWlqE.cgI~57XRBFi 6H>jmyγ\=^zmYoѽR^RO0f#;򝈄 ͚l?q:͐5?g@Dġ~Q '.%dzUjCC oV9 l05z)މ^j^p/_UX˲nTUSW*]pEhm߿5g՜{~G?F/}#G#v>;=i9<+%]U*vwT/#Me63Ω͗B?l!W Ļph/?d6z' t 1B$0+" ^. )RPMjHH,l m̎؅6|yQ6ÓJxkEz.T)/2l0 _~h4X]>0lϏK^ؾjQO!TD'mrh #ɀc͒HK^F!/CW^n|`Lw(ww۞bpuWcγ^?^J2 M Uj{6,s /Z290nRDVWWp=*0*k%<|[ȷssˇbS#^c P/E @̣1|?ob7w&Y%X"U@⇆e)\uN3""oqRWs> >7ˋnl@P0|t W 4P.OL84Lh~V`t^ʔ,CUdREg%TТ*ю_P(,>QdE6@>ؚ]dEF~.0a;·9̎o"Ê?[kg+B,+CI噫Z^&,Ⱦ:":VDlVKo_EH=s;HRHTd@#{]xn,FDX1XW#6 sH/O a`pGFhq)S%2Z;HNg5. bB,hDn7?Ýu;wt{ 0D & gX8iv$ qEy52R Zy~B roN_2.P(k1g{F}IBn!`번"P5@gE/xw1wJFV 0JݎC#g+'bvs -s @>/Ϻ!Uj%VCH9T?(u>6H JzpyXq攮WW<8,5)eP@i+@hn9bv!!" R7OB발C\g,T jǮ>W mA/=߈^=2, 8PX5; ϜA%ҼTž$t5aR3W,^? 7 a3̣{RTHԯw1P_Wf=bτϟ?t|ڻ1ɤ#7`m*u9_*h+w~ 韎^JhCQ +(>t ݜ_gp*B~kҀ CD>_U-Go((Ʃ#{)Dxim/-‘b0T33\e./#}pz[KYYZIܗAJ O?؇>+z~䞿[ܼ\"՘U'lI?͉Ip+\ p9`Ql&;ׂg@` >RtIGŕ>\ZCϖ2"@#׵./] 8pD5^ל׋z Q@do~$ϐD[xg#op{׫``bpVkm 9tR~#O-G~<~}Z?-|{~Ϯܓ:Tj8YfJ4C[@d?w|i 0ԑ@ZW=ʱCyEHP\O>ybp5gް̓j*#[垊P(6jgV.Ȭ%IpC0ZacsE0ojX"\e N u$^* )ח JPEAԪ^o\/?p+e\ V|߅RChܹs?XPOuF7Br%CM@q)GK0!y5Zӟg7' >Q0x!=9 X;M/ G~I‰(&aΞ_@{""އj֣0nSn ВOD[1aRaq]""YـsKٟXmlɯ~ Ec<%"Q[;Mz9w1(ME >M&WMg5v8۰O\lfxO_ t2ќ$@9+gTF>*}B sY'> u|:هN@b"`y&T;ɵ.& ״BH_\ʠ[XgHqG~axovo<1`5u֣FO1EV\a?`HHh}0Zsq`!nuQc]YJDC^Vf7}EapDFH`$ U/osZ%ԊhfH@ ͧiG17=I"[xM̈́?jBϳ H šsW,2rA/3wqES)6r~SXe[~L:?~cr5-c0i;=sM6R,\/ z=n)^D% 8hOrϭBp@Õ: tP 8:^"T_ x!c-pУkP}x(H;wxhsl?Jk37ѥJ 5ASqPTu M͟c#%brN- 5(\b"TU$Gf1n<sH\/2*ɭ8ul/9ixúyAM2E]A0+υ@[)e1Z,_ 8JqƵ{g^+|/`3 &2?'_i}pIW❍F) !V5/GasJ(/ksB@ 1Qz(iAk G 1+"gF*7JQpNh`!* : E&4a-&N:uljL|Czn`iOj҆^'**B)WŘx*jcMQ_Bׄ,J E$LLM4p~=hλ|c3 G\ B(mW@Bu-fvF??9wxYv/A0 Z7@ wmֹ݇iC3DXl5h7\ŧEuZnDQbW]#Z AM*ϣ@&Dq;VÁp/__ 2)Q<J|pu~d[{/>5h 7}_xOVDBPB_#:"_6Ywk^k׼3| vMB ? .y0S kq^Jgk FW!4\%`J`,ﱽؿgNҢq.X-' Lڑ!0JLPUlZΌ{|$ͅwO>'p #/ܙjA5<_ުH)d߾}{{sz}vvN cc@6uu3xVs?rKǮ~D8Ϣ{(G*+oeʔI,^ǂiAMEc _SE:ZOKgtpyXEA"wiw>W2ly 'O}y?dQwM ~^"4"@C 4,P4#^U Y! ;ComC TLyA+F; f/)QpWu-+iuz#?ӿŏonnxjPP>$ g ЎXTtOU"ʃw"x}o?zyzڋ=!rS4&u &>9Z$4W0T IJ^jU!08{z͟^?E:: Vfed:OD50 Ŗe>OǫgK32 F#~m K|uL\St+MtߛjĠ?3&uۘ#bIu]62Ee.<) E}lBK"`p4~iw7ӯ8FUء{tOaHR$Q@vJD9徕Zqzy4fʀycK5vըRYmRF#s˜M'{n幉Qy>N>IKe7ad{ˡn>+Coj|yyLCEXQK[+j ]Z< "˶Q-Q^zUg5dP~@ }u^0yygDʨ vn@ͧu:ݟ\= ~*R?Y맏|]AZ ۖ@:E&S,s ;P,Wr ];q"b3C.4u!b@B_)&0s%Mg+Z,7DD@KB"Dz! /j iBb~dJY]CݾY=9DU@N.M'}~\_ H{PG \aW k ]]]nZwȕ^s~jQZj9G|!2;G<h6tE[aAL[L iU.CbC "]>#Pp=jKӡw?]OʠF-õ0 jG;PJ&3rf}IbokixhA^=exG*4Rӟ,\Rxj vlN!xB I'?8B%K" ,V>vV2a&馩#p,ݰ,Mm6]@9Vd21ϝ 6 t.}/ BQu8|᮷@;9޸J@ B?]S絁ןE֟}@4:2c @~$b!mκKhrߦ<7'|/Oϧ޹<5oE ,z2`?9o {0 Wr:$iNG?>y+uHp/`1dNP~Bdta'+ucHYvH.遾j 0|;by D+$G<5+"  5ޮq AȺ8dE05\KEoHpd#|?yM觔C/@K=-(L/:!& fݰ7,%L)hzd-u`v BvGrw7 "aZPa7/օ VpC3!˄Y> ԙT|ܗm1cy3);zPFi [# jB? 1l!a̺ iSc#ئ995yPFPưrs0E4?KE yr#3nc7pQ_Йw1Oȯ_p`O6 /d&<ÿNzll~#xF1+^~{E۱g~kX+9 $αf ڳ)п:x q3ȍcyAa[@+V:$ >@L'T0`'@@rϿuUs}An`(\k@yr硯 CHM%^? @@}NE~Wwr`2Lgyɯ19UG# ?%Qk*UUUUUUUUUUUUkRIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/internet.png0000644000175100001770000000722014614030313016206 0ustar00runnerdockerPNG  IHDR00WWIDATxY#}RqL3˼{S133gffffZfal&7Jpeؙ9~U^*e{zE%$b'2EKB` ROuv|e/#T!Ϥ$`9D"N СQ=jGT r:(m?S|sM;%DJb:0u KCB]4BiNZ~\dӆ)n>.c_w!śbFwʈ;~PeHFttzL@J(\X/q0.pB6( I5ŗ^_#NyH|BgN[ǎ^>"0%~Ç53V}f^&_3Υ~z{FOZ-$l5)#>pÎ( @K2|-$+0*-3sRH/-b {KZܫE&|t|5LQ,UDJ;8N6S/4 4*F12<4#=-o= m}mu׭7{}'9Ӽ ٞ>ç0ttuCӈ}y j\%;1˽Vxj\FbkO=rg?ڭ?c`R)Z/kP8:E='ҝp@@y>3HvÊ%:8QȆ I@J7^k;%-LR@ v32Cqڝp_ WGu3ZE̥|g:b>|4_~0.c(`ks ^zi{-$\Ҋ5%$PYl#5,C .1G:%S Duˣ5E$;Lu৯@e ]f@"Yk@;w:|3_mEZm)h7gb~:j~GbLz_Q* }Gr9l-8BH=/Tkfuj@G܅O|.TtԉV% g Tj $Sq+5r|Vou=plmArw10Н 1: wbXжÏB)o՚V ke|yHײu}[ >srr!ܑC)xibs=l8~Aܸ݀"zU:0wVz*6J03s-Ldr]񨫎ζ}AӴUE̵{z=:riO#S!g[ "@׀hH~lBB>ׇp/}>sGX#D4|%u]%<(J#{*}z- <{DT{ٓ_~T8S(lF̋MA$hp?d+}۠B|z UlG/yZy]{!?~vqi=U-t(u#1Ҝ1TiH8 !TD"j _}xD3o\O?{T#e|uY9}rjc-Pj*煈{{ X'W$!DRpj8JU6QU7cf?ҿf^|~{uCa"+Sw[ /bK`5aZе?+~'nkbӀeY($?\\@ )5RWhkp|,ӳs,<߭ru~-g)h0w?{tnGI#ETY#چ]v xksm׶:6lTiG4 h4/ 3'4}@4I36h !X47QAC4ꢦ(TYCaLt!(h@kjM /~;,=&* |SHkOOj@w^N|AT@AI4G IO㱧gŵK"X)}+]نΦp9~e,Ƈ֕J uUJPXXZyvB:Gf2lkM&/4F>v]4#P pY\˯,M.N(6"m^?M[kVM_6FJ-6xӳ6/'hPl_A-P  !CㄚIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/last.png0000644000175100001770000000122614614030313015321 0ustar00runnerdockerPNG  IHDRw=]IDATxQ]MY۶u4gl۶m۶ڶͯPM5 5U`nn((L \.{%%ew"MMM[YYm3113UR5U|4 |(Jt~VNZpAq.( @L`ttT36>x|. ~0H,% +'\f̤ ~j!><W}T~/(KLV2fRg|=A(]8#+Ud21#19N}mȨ\puw$'>eŲu4IE8 Q/jko ]mroW^]]U<l7P! ^.oc| C0Ϙ#.P/I`@p`>C ~.J댐`&)XIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/mainline.png0000644000175100001770000000177514614030313016163 0ustar00runnerdockerPNG  IHDRw=IDATxb?M1}-عo]Omݾq-1`^:{ތ'fO>uT lݹ @H9(IaRֻ}9{ kN+jYضgҶQV<ᜍt:C|×u߻ܹ <&]-58f A}7 gMlT￸H_mP8$Wa/ )<n{ <} C9;xKCP- E VvF\f&p]rYlnCr2˪*;v7{Nl'1:5fhHk;-` f/1Jp~Byp>S$}ip"ir,o5ȏ<[mAR Bwjǣ MV+ϐL o9X p:\hutAt[@tOYmOQT UZah`'kcTk} >Mzzv D4H4m+eRi }]rWׇQA+wge!8<ڃhmCz$)ٞ5%Dc|ou"]@\X:]}.yjzǧGPV*GoE$URtfv(ťY27o+*IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/manseek.svg0000644000175100001770000000742214614030313016020 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/new24.png0000644000175100001770000000173714614030313015324 0ustar00runnerdockerPNG  IHDRw=IDATx,Ysk۶pm#`xm۶lo=hU3Jesu-ʺT/~bcjEjH {m=ar/_ꂅ~Hu*:{?>]\<׺|iN=_`Aˏz>lZk퐩=?XzJ@G&xjo&"m_FIͷ=h 1 21 20 1 1 1 1 21 20 1 1 1 400 310.5 345 225 0.90000000000000002 1 1 999 1 10 999 1 10 False 6 New Game pychess dialog True False 6 True False end gtk-cancel True True True False True False False 0 True True True True True False True False 0 0 True False 2 True False gtk-ok False False 0 True False _Start Game True False False 1 False False 1 Copy FEN True True True True True 2 Clear True True True True True 3 Paste FEN True True True True True 4 Initial setup True True True True True 5 False True end 0 True False True False 6 True False 2 0 none True False 3 True False 58 True False 0 5 5 people48.png 6 False True 0 True False start 4 2 2 2 32 True False 1 2 2 3 32 True False 1 2 True False 4 18 True True Engine playing strength (1=weakest, 20=strongest) adjustment1 0 right True True 0 True False weather-few-clouds 1 False True 1 2 3 4 True False 2 True False 4 18 True True Engine playing strength (1=weakest, 20=strongest) adjustment2 0 right True True 0 True False weather-clear 1 False True 1 2 1 2 True True True White side - Click to exchange the players center True True True Black side - Click to exchange the players center 2 3 True True 1 True False <b>Players</b> True True True 0 True False 2 0 none True False 3 True False 58 True False 0 5 5 stock_alarm.svg 6 False False 0 True False 3 _Untimed True True False True 0.5 True False False 0 True False 21 21 True False False True 1 True False Blitz: 5 min True True False True 0.5 True notimeRadio True True 0 True False 0 0 21 21 True False properties.png 1 False True 1 False False 2 True False Rapid: 15 min + 10 sec/move True True False True 0.5 True notimeRadio True True 0 True False 21 21 True False properties.png 1 False False 1 False True 3 True False Normal: 40 min + 15 sec/move True True False True 0.5 True notimeRadio True True 0 True False 21 21 True False properties.png 1 False False 1 False True 4 True False 21 21 True False False True 5 True False Classical: 3 min / 40 moves True True False True 0.5 True notimeRadio True True 0 True False 0 0 21 21 True False properties.png 1 False True 1 False False 6 True True 1 True False <b>Time Control</b> True True True 1 True False 2 0 none True False 3 True False 58 True False 0 5 5 gtk-preferences 6 False True 0 True False 3 _Play Normal chess True True False True 0.5 True True False True 0 True False 21 21 True False False True 1 True False Play Fischer Random chess True True False True 0.5 True True playNormalRadio True True 0 True False 21 21 True False properties.png 1 False True 1 False True 2 True False Play Losers chess True True False True 0.5 True True playNormalRadio True True 0 True False 21 21 True False properties.png 1 False True 1 False True 3 True True 1 True False <b>Chess Variant</b> True True True 2 True True 0 False 2 10 140 True False 0 none True False 2 12 True False 2 True False False True 0 True True in True True False True True True 1 True False <b>Open Game</b> True True True 0 True False 0 none True False 2 12 True False True False True True 0 True False True False 1. True False 0 True False True True False none True False 0 0 True False 2 True False gtk-media-previous False False 0 False False 0 True True False none True False 0 0 True False 2 True False gtk-media-rewind False False 0 False False 1 True True False none True False 0 0 True False 2 True False gtk-media-forward False False 0 False False 2 True True False none True False 0 0 True False 2 True False gtk-media-next False False 0 False False 3 True False 1 False True 1 True False <b>Initial Position</b> True True True 1 True True 1 225 False adjustment4 adjustment3 225 400 223 100 True False 0 none True False 4 1 12 True True in True False <b>Enter Game Notation</b> True 2 2 24 24 True False 199 -1 True True 2 525 525 False 500 700 523 True False 0 none True False True True 12 True False vertical True False True True 0 True False 6 25 25 True False vertical True False 3 3 True False start Halfmove clock right 0 2 True False start En passant line 0 3 True False start Side to move 0 0 True False start Move number right 0 1 Black O-O True True False 0 True 2 2 Black O-O-O True True False 0 True 3 2 White O-O-O True True False 0 True 3 1 White O-O True True False 0 True 2 1 True True adjustment6 True 1 2 True True adjustment5 True 1 1 1 True False start start False 0 1 3 True False True True True start False True 0 Rotate the board rotate_button True True True False True 1 1 0 2 True True 1 True True 4 False False True 3 False True 1 2 2 True True 3 False True 1 button15 button16 copy_button clear_button paste_button initial_button ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/next.png0000644000175100001770000000110014614030313015323 0ustar00runnerdockerPNG  IHDRw=IDATxb?MH` Ld riyK!$Y奶yW_edž7P0R0rq7gÚAԶm۶um۶ݜ}`p1FGL\O9rdPɓ7m4f=zGnA&X2V?O?={d(իEdΌ7oE_}h۠$u55{ʗZ*?}Do޽( .E3UsF\'''Ow@CCÆ'@V$5@X,L&TT[UwvuxKY1 [ܻEpM /_1 wFV;\I`|IQVV%Rb$Z{ ߺ"z{0ڋv^y7$00b##,!NoHF-NVIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/open24.png0000644000175100001770000000140514614030313015464 0ustar00runnerdockerPNG  IHDRw=IDATxݔ-9GO糭mیm;\۶m6m^\>'iksGKLp [yjtŃЂkN6ٞG5ZCTj]Y/{?O*AN[aH:ݾnҐ~mf X&prlV TZUFUNO%ֺq.? k`B'r0;Rۤs"c,4K<ԳTTT27vġtWaݏC>(W̍hk Z1?sc}p$0BpT;0?hcGz'Ш%"'|gZ˜?~<|]g#k "co_ 9.2'm.EyM_]"c5DmSH[PYUL`AʵI*J osi -]|Zr cFn\yr-.{k[c4(ő [d3~D?lkL);gRL+H0-}?=p o(}xÜjX #^PBݠ]Vյ7tRa^Xʏ>r F${06y3=;oGd4MHohq~aδT*YR0pFbQbnnӥ;S,[s8Sֆ؁PNl=X*W|9r`uuqNVCرjh"SMk@q!"#HhgBa.@5@ Sy߰Y `qq NVCCC޽icTZZs!00کHHfw0Z8ɛB9e9wB`[`)y߸޻#;ߴ\T)@s:?6*Y0 Shvv-hW95Ե503J T}@ )s .8$`ymw |_T6cs&B&M\__+s 9I{Y:rwg1Xf}J0cWǠ4gQs})[ZNG !01ĘlpUQZ[4Aw½rG`$a@!1B̶XurC-Fe}t\|ްwIl(ɫ)$Ezo]8?37Q"#|}]T<s``E"#C}33iiw( % FKKL Y|6-d#*ZMn4%X<Me>+?r6X^c G&ӭǶx,F¥8MA֖CmYk8$5#b,O/6>IN'k.D:ȍ㍫ڦjzٱßy߹OjC 0@kAY_[2ݛ;M߰ӻ 1b`宷hJkTKX_ڿv~趴qgھ z ۪m*ȼm7 XuB4Qka IRWXYpHϿU^umI;QlsDQjľАj(f&Vm{֧@ 6+˦RPH&R.QHt$.NjKDjy{.υaCgs[?Uemm%,n/e @!:{}=F&*hb%nXR$߸AՀ~W)3;y(3sF{w&۹J*kم?Q`$@MK %`V(@tǾnu`213D$E_M "Ll ofqc=M^qnʳ-TIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_annotation.svg0000644000175100001770000005037114614030313017727 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_book.svg0000644000175100001770000005225614614030313016513 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_chat.svg0000644000175100001770000003727514614030313016504 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_comments.svg0000644000175100001770000004151214614030313017377 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_database.svg0000644000175100001770000004167414614030313017327 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_docker.svg0000644000175100001770000004273014614030313017024 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_docker_no.svg0000644000175100001770000004354014614030313017520 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_engineoutput.svg0000644000175100001770000005236714614030313020312 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_filter.svg0000644000175100001770000004341614614030313017044 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_games.svg0000644000175100001770000002245314614030313016651 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_moves.svg0000644000175100001770000004114214614030313016702 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_players.svg0000644000175100001770000004264114614030313017235 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_score.svg0000644000175100001770000003647314614030313016677 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/panel_terminal.svg0000644000175100001770000001642614614030313017373 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/parent.png0000644000175100001770000000166014614030313015651 0ustar00runnerdockerPNG  IHDRw=wIDATxU+Y82nymϷd|۶msR:wosp ñS@h?f6b#?g^q 7~CG|E&dEuU%^rDvˢ MF 48ݾdڈk޳l¥K˖-aĬ f]e@ wn>|I̙N0qzՕǁ9Q̘=A"xk:snбxY:즩&m?1R?aRt+:&ozvǎmֿt\^U@hG^%;8%:G0 ñ43*Ob[[B~ I A7O4wvTz}>9-ٹw۝]{}a v ,(\n0̽[e4o,1),h6(-/ai~ m`J3S^XZq,Wf#ʊ :P^GHSc0s#P&Gd}QV\vU8+8򭬸^y?`\E8XȻA~ABnhr<GR,ϸ2k-2"ג-aĀ+%+8 Xc5SP#Ȭا3]ۻ,T~^QiyiU. π0&W CWxOA3D38+Q BGtw3IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/people24.png0000644000175100001770000000175514614030313016017 0ustar00runnerdockerPNG  IHDRw=IDATxŖpmWkcOmaٶmǶm۶mIk]g?'7g?NmSn]%- +| kIsKcdt%(8$@( V|斦I{s@_J n΂F?ALLJ%rՎdYO013},hxx BHh f 𞮎?S.TUj#*: M'E=_ZVB棰0))񰳷tuW=66VXX.zjCGLW8q 1@0466ւΟ_4ڳC$ q]]kkWC{.^9U4::*\xk֮oKŁ(b֖3tfd$cέ +:rȧ66"\T.d`mm-8z0US5;$Ju%K,|Irdm)g%'ǃٷ Ѩ,fGbm6_z~Js St89GVV2rsӐ9˅}\16so C+/eNݽdٯbcc`Q%ì\9Ϟ2>qi7{z:#''ɤ%A8sgPESUu`dd bo{~ںZoZ_Wikk6lZ겳S!hh-&ۧNun/:>b_*-OMVnIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/people48.png0000644000175100001770000000703514614030313016022 0ustar00runnerdockerPNG  IHDR00W IDATxYtI-1Lp̹e:f[ 3&f QXHWie8keVOCqW-d2)޼ܚW:z|l6 Mv&,_Izʬ G?r<^G-\(,(r(  h>6( _~.m|fݐH&mVm ?Es 7ow744TYrtm:jb9v8vF%^m6` qr(B!:w.qU 'tU}׿$p7oڸd@X,"s@(4N] ;].ߋ_b'd,% Z2k+IڽkJF}W^VWV~{G~7`S3ds]{vE/|e0cEsO|o[W71ALW]Wx&&&@06AH}Fvl|zK_ο5 YQ̻`W؜HSe Ѫi*/Bmƿ}N?AIff499Fy4`69)&"x79rsngzZ ؝u9hTaftf`7U߀ʶ?A5Ws{ ]D[ L 1Zfas~T4WAxRNibb@{Ħa`0 CL1!>|8vNuIv,#!U&Ada0Sяgg,;%-ÇKn`z',o.H>)fF?Xx SfB{BΈMpLP "3,PD90)0Fڂ1E4K%JOי+\>zĉU+WZ 1 DEc)҄$)%=̾",kc M)1˫鵯gDl}Ao~Y*N#;rVWHi ~ !c;#]+r,^6wnOte˩JKJ $yy9P)U S췚Nbɓ¡ЁLOSI~淸KTFz嫩ZZ[hϞ}44mr#g1!AG7ɌQNڊq8'DsT$o c 5g BqaWn&‰$`yiDp]w\"ʠ-^x<WNFE٤Ts3y=^z^Atjll:~_Юh s_J{%8|iSO~xK20aZ,ᘦ㝁ZTʌ,j}#-X ­[oAoLI%2zҲ9\*, ,r,Yv}oljL¥i10olt);?@ w#0"۷ҁ&ndQɓtwPOo/q pš8k-Zշ`4mXX=+-`<{AA>R\R`쵹"Zr53( twwO<Ӛ5&%M >F2,4/njh',Q#55k_Mޅ6lP8vdT|WTT"1'N5C"vZ.a2=$\8pfH&+ =ӈO5Aw!; l _jO66/zx7MoynTLSuR~% 1rZsE:֦[oyK?ߥ3NUUSW&=XZ^li% rtD%tĤL7 sӓ:+s0ߜ/ᛤQo}` ? B*W[R= ;ַ^{&fAR ,PHM{Ж"a%sDoJKgްtR-c1 \ƐLh߉Gc7bm|mm5ԛOځd072]b6 aJB?"~T^`CC,℈ Y D2`k/ ak OL) ITY|03'p Q[2/N]"٩"}^"Da$ 4twwA #4fGBx }ϥ^+.BOZؿ?>!j7Sg:L!~!oJ0>쏄=QeĀ"wuwu9BX\.=rħ'm|~[$ce-N T|ﵫQ#|ɾ~$Fmf Bːߩ/s pIB} -[e~]>x{cyn R$}ȚX@HҞ8 ~%tKf崻&[WԷn>Mc5C1_jBԀP̩ b_D-[vF‘;֞ #:s_^RR|M7\ocSRƚ16S0Cev 07`YՍ55UܹҒnef  g~-HU^c*#ƈF"Ua:ݢuuv;ֹo~/1!~UU.Gvnf!j<⵿vOOMM v$nN L)\ 1k4833OGQkkkzZZZY*7'Xqq1%///3jnn's@MLQ%q==~R9p*q_`DFU,$.74S`vvV%$l>FaH$33!@hh&Co٭K311aԝ'VOc6KIII1*eBr=z,HcXmV'L11Ztw[!~ Q˻\5Krf,V-@FFF\^ZZb]0{r,*66zRbAs†#^ܲR|F Y09%Ih399)!Y{U ;F. .433Ӭ˜߳#z)@ ovz{,aV2,Dq&\| kJOOS$,clNPpCP<55!C4Ylkt|W g  'xfgg0Go5;dC!qK7'd3C7{fuQ<{߮!JgK=7QD;RK;(]Is:rX#33]]IX^TwYKID#vO:+.=GiD6ȑ#C9|7@8Uq~L"l8%R\62`#qJd|oB Pܼglcq?H5@uuuxBQQ찌=g)S%<qrC8|@=!3#e,.Sz' f9Ff>244ۙta2Vq˖ ntԮ;) [y#p3įqMe;{xj³p,2tHV.pF.|;tԮ(9eHMMa D+p1b$; ^7Yn&G?J /9rCxp4wL~n0VrqpouԸVRR+4R\Ba!~M'm ΂k޾xx?-d ^3M)00)t.ۮdq7;  Am7u==ݼݽ+4e/`̃)0@O A=nvOm1]=P bAH E=@]nnY:BأcaWwY֛Z]vSsY?sFqX׹G%"Oڣ>_O羅 +pC֖pgg'H$P]]뺺://=$S ;99I1,j oRpAA@s9߅ {{[tJ466Bzz: !>>N- IH$x+cZ[qYZZJ!!! \]%t Outl$3r|T/qL& "uF8DT>`7xxxT*_aԷG7"qX\\qãPYSNߍW  /'`yسoO>kCie Ji8VX+$P[_ '{m'G ^h mlѡr wZn >eP^LCD BgG1Fu /CqiPbcOGD8e~|Ss=@oplp__^XX3xm}#{;'1 ->U(Pfx$Nstރ^ۧΞd-`Hfi!$QTJ݇t~(SI$ZPhhU5*-w`n~Fο0oPPRc *BZS{)R2YO^"*uk %0vu  qOO7vFAO{pY^jppA5֎#cԟ8V- eIƿI4`o}Qv,B`7P?27{ZNJR3'axdҝ3v3Jk{ '\P:. mjoJEZJ3SMό m`[8'Sr4GQ{iNKw!*MVdd$7(\YC O ''q0~<@8$d2ؾ x|UESXnť2e V*z:< [1<#zXD gjVE)))Q}z?5=!ܯ*e4{z]% sT*b9((Hs_éRAXyMThaQ*3ggO+>}dP^aSSS z~4\8"E뵛]99Kx=pp+cଢ଼e rxHxo~߽_ 3+R6!xoѬ::Z 6[u<0$ 9?C/p 'p^#S}yɩq2wanaV?!7QM55G5+9Ҵh_'&`htGP0Ư)͑ 0FJtM,Z޿bOKC}Gr1=B}Sn߽0==ɃΫZ\;'ƮC<8G] >O"IIٹPZ^5 SgaM{N|xEu;/sp'##}s6ذyBrOO-ko~\>&.D$EHLJQI_]t"D4O-Pٶٶmی1/̶Coȑ p9DTǧ7gUWVׯ774]uvGM٭~I75=ٗWR~)!E-BQ&DhMMj-7G39&̸ 'RA"IcEHI"cO1|f&=49]V80p [|3Mm/IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/piece-white.png0000644000175100001770000000364214614030313016565 0ustar00runnerdockerPNG  IHDR.0neHiIDATxęSX׶m۶vm۶m۶m۷mwZ*ʗ$}s9U,}6#]oȃFڵB2V!M$Dn3D?IF嘙B4ʁ`ђ;T$|%;tj =zu`Ő1KX~s׬gv+9$b`sH,He  e Y>b8Iњ3Hx(u @:)%iq88F~ , q k'II B<Q\Bрeo'ב_ؽw6rJ QPq=Pٵg;wB|;׭O,I,?Q G,>Lq~ACRCHoX"QQ3ŗNAl ^=7Y>|hxx2KqڤHb2ۍ=tم4ES9$ŸցYsg$!0Gbf3<%b# 0cKSԾO2QәDNWzƸY)#"ЩK{Ȫ0. I۱=F |H%S]ho۹!0}dm$!q=2viڽ3҃f_(˄%+.b-`8haoG#dŝ^iÝҙ%^%!1meAio},KL>gk\鲱di( EU2YNY: noa h@7>痔L*;(s3V_DإfA$SԥJIcY_U2ɿGҽ#Ipt)8g'GRN:Fhs(uAc4;J}$p,!D{ 1 CT;p g~g/zyGk޲B'ƠG ,X=oZvn֢,rӏ8+yԑ'*WRUG}aĘ0ix9g:,vʥfJXqrھsRSߵgm ذi=߰֬[+׬PK/R^[{N-OGFJ}T%sګGUPfZ57qF[p6lvZMZȿmڵkXodaڶm۶mǨ j!!wOw`#}|㗷Bo f]*E& 8EE&|… M6_JJJsHif"/x**ʊ}$8sR/7P4UZMHLClBr_WN<9Z%XjLZ DƆ!)5B^*]]݉DԣE Vx\b4BA>dqѬF|@fJF&zePxn~6e?s2X٘]լ ;;{Få(B||,gmk.w-*a#{e%.u݌̌+k3[,гsѾ[wA,U@* Ɇ54z*BNv/]9GAR^kBx>^ZL@P]mM:s ,ːp!>޹3Ww>} {p[0̑zG*S,>]Ч#9e%HǯAIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/poput.png0000644000175100001770000000017414614030313015526 0ustar00runnerdockerPNG  IHDRaV PLTEatRNS0J IDATxc``eZʠʠ2A!14%/(rIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/prev.png0000644000175100001770000000106514614030313015333 0ustar00runnerdockerPNG  IHDRw=IDATxQFk۶5q6mm۶mؼ{gmoy~) dиqZ 4UuiՊ@׮]kO8CpߙĨ"ٳg̞ j`5ƍQq}xEƄˆ#m`UVZc|^}xKD À_X|9tҶ\صkWǏ>}tOp[va+?vʭNny|3y K( `&\uxǏoppEQ{/`9dE)ȟ==z4"ghP+/>$`YPz&$9nΉήW5"ݿKdNZ6 x~ $I;[oL_P2)**=[[okׯ̼Tߢ_\!x_x]Y|}),5xca}F@q=jSktIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/properties.png0000644000175100001770000000133614614030313016554 0ustar00runnerdockerPNG  IHDRw=IDATxifa77+Blcln3iO:}'35S|fVfJӐ˜L`LZw$IPC<wӝә&0=dҊYZC>Ƿ _R#5kf3dս?i8Y fExlM_ \NSe{ #H>ZE٦) BX(0Z@;zxPvޅj|;ZE4R*_& >(k+~ZEa DJ 63^P8("N064 Nw ULF@؀)`/5=>/ _#L`lbAX(~o!r:ۉdsYOKyZNW$ILK%S(}1ƖOERL Җ&_NNM``Ph p{Vhl``PW_eM^|j`Dv~LL3q^12G8q*$ItSCD5:;{D w݉ 8C> @~ܝQ<4+Q"H$l:특 `gi~}JL2cX<oH4m`d9'/J49L93x٧? 8ēyWBI dM6ޔZ. False 5 Quit PyChess False center-on-parent pychess dialog True False 12 True False start Close _without Saving True True False True False False 0 gtk-cancel True True False True False False 1 True True True False True False 0 0 True False 2 True False gtk-save False False 0 True False _Save %d documents True False False 1 False False 2 False True end 0 True False 6 12 True False 0 gtk-dialog-warning 6 False True 0 True False 12 True False 0 <big><b>There are %d games with unsaved moves. Save changes before closing?</b></big> True True False True 0 True False 6 True False 0 Select the games you want to save: True False False 0 True True in True True False True True 1 False True 1 True False 0 If you don't save, new changes to your games will be permanently lost. True False True 2 True True 1 True True 1 button2 button3 button4 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/seek.png0000644000175100001770000000044014614030313015302 0ustar00runnerdockerPNG  IHDRVΎWIDATx΁Pk "@A A$p{@O!@BQ[Ah5u*62 /#RGw#*Йؼq&&WDCX؂X Lt%6!TA'b>FN4 nJ*%!/i]|zF ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/taskers.glade0000644000175100001770000012366614614030313016337 0ustar00runnerdocker 1 21 20 1 1 1 0 0 False True False True True True False True False 0 0 3 True True False Detailed settings of players, time control and chess variant none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 stock_weather-sunny GTK_FILL True True 0 250 True False 3 True False 4 2 6 3 True False 2 1 2 True False 1 2 2 3 True False start _Opponent: True 0 2 3 GTK_FILL True False 1 2 True False start _Your Color: True 0 GTK_FILL 18 True True Engine playing strength (1=weakest, 20=strongest) adjustment1 0 0 left 2 3 4 False True 0 30 True True False none True False 0 0 True False 6 True False gtk-apply 1 False False 0 True False <b>_Start Game</b> True True startButton False False 1 False False 1 True True 1 0 0 True False True False 0 0 3 True True False Detailed connection settings none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 applications-internet GTK_FILL True True 0 250 True False 3 True False 2 2 6 6 True False 1 2 Auto login on startup True True False True 0 True 1 2 1 2 True False start Server: GTK_FILL False True 0 30 True True True True True none True False 0 True False 6 True False gtk-apply 1 False False 0 True False <b>_Connect to server</b> True True connectButton False False 1 False False 1 True True 1 0 1 True False True False 0 0 3 True True False Select a pgn or epd or fen chess file none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 document-open GTK_FILL True True 0 250 True False 3 True False 2 2 6 6 True False start _Recent: True 0 GTK_FILL Create a new database True True False True 0 True 1 2 1 2 True False 1 2 False True 0 30 True True False none True False 0 0 True False 6 True False gtk-apply 1 False False 0 True False <b>Open database</b> True True startButton False False 1 False False 1 True True 1 1 0 True False True False 0 0 3 True True False View lectures, solve puzzles or start practicing endgames none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 accessories-dictionary GTK_FILL True True 0 250 True False 3 True False 2 2 6 6 True False start Category: True 0 GTK_FILL True False 1 2 True False False 1 2 1 2 False True 0 30 True True False none True False 0 0 True False 6 True False gtk-apply 1 False False 0 True False <b>Start learning</b> True True startButton False False 1 False False 1 True True 1 1 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/throbber.svg0000644000175100001770000004363514614030313016212 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/tipoftheday.glade0000644000175100001770000001410114614030313017162 0ustar00runnerdocker False 12 Tip Of The day pychess True False 6 True False 0 none True False 6 18 True True never True False none 275 True True 0 0 True True True True 0 Show tips at startup True True False True 0.5 True False False 1 True False 6 end gtk-go-back True True True False True False False 0 gtk-go-forward True True True False True False False 1 gtk-close True True True False True False False 2 False True 2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/wheel.png0000644000175100001770000000202214614030313015455 0ustar00runnerdockerPNG  IHDRw=IDATxSc[Ƕm;c}m*m=LY;uzlUire+`Xzօkvc 2Q[[ ˮ$%'zec6֟TWSS W˗<["t8EQץ5V]f<[,]#!!s;h,3Ʊ1ɑtZA,,> ~W.HgC+H!C4g4i';UUЋ2JJq L w߻K)FY Qjjhy8yU$t 'E/aM(//CQQ!C"8$y9\qkoeRݻ{vN63; ۠U-۶ _<QTR9Zd6CM_ )XZLTVQ;]g4)n-'} ܟ-Gqy!vA(y3(.㈾:uj/ Kъ߱JuhsN6z;|G7⅄L !_`,X<7N]4|lxҤI ͏%zoh|s96/}=~Pb8uU ǥ 1-Z .rMu0{ެ-[lr֬kiO+jmUڨsջ oyюL VTM*nE'hB3ު F:>Gp $@ƂIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/glade/white.png0000644000175100001770000000047714614030313015505 0ustar00runnerdockerPNG  IHDR(-S~PLTE.467=>068.467=?ÍžļŽº6<=ýLRR)U(tRNS8+HIDATxϱ 0@;yI у( ΢Ui .SVay3$ c['V69o٣MAEIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.7494779 pychess-1.0.5/gtksourceview-3.0/0000755000175100001770000000000014614030425015776 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.8254774 pychess-1.0.5/gtksourceview-3.0/language-specs/0000755000175100001770000000000014614030425020674 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/gtksourceview-3.0/language-specs/pgn.lang0000644000175100001770000000661714614030313022331 0ustar00runnerdocker application/x-chess-pgn *.pgn
", file=file) show_cords = conf.get("showCords") cords_side = "12345678" if flip else "87654321" cords_bottom = "HGFEDCBA" if flip else "ABCDEFGH" data = model.boards[position].data[:] board = "" # header if show_cords: board += "
" board += "
" for cord in range(8): board += "
" board += "
" board += "
" for j, row in enumerate(data if flip else reversed(data)): if show_cords: board += "
" board += "
%s
" % cords_side[j] for i in range(8): if j % 2 == 0: color = "white" if i % 2 == 0 else "black" else: color = "white" if i % 2 == 1 else "black" piece = row.get(i) if piece is not None: if piece.color == BLACK: piece_fan = FAN_PIECES[BLACK][piece.piece] else: piece_fan = FAN_PIECES[WHITE][piece.piece] board += f"
{piece_fan}
" else: board += "
" % color if show_cords: board += "
" board += "
" board += "\n" if show_cords: board += "
" board += "
" for cord in cords_bottom: board += "
%s
" % cord board += "
" board += "
" print(board, file=file) print("
", file=file) file.close() if __name__ == "__main__": from pychess.Utils.GameModel import GameModel model = GameModel() with open("/home/tamas/board.html", "w") as fi: save(fi, model, position=0, flip=True) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Savers/olv.py0000644000175100001770000001645114614030313017443 0ustar00runnerdockerimport collections from .ChessFile import ChessFile from pychess.Utils.Cord import Cord from pychess.Utils.GameModel import GameModel from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.const import ( DRAW, WHITEWON, BLACKWON, WAITING_TO_START, WHITE, BLACK, KING, QUEEN, ROOK, BISHOP, KNIGHT, PAWN, ) __label__ = _("Chess Compositions from yacpdb.org") __ending__ = "olv" __append__ = True # Note S for the knights as N is reserverd for Nightriders chr2piece = { "K": KING, "Q": QUEEN, "R": ROOK, "B": BISHOP, "S": KNIGHT, "P": PAWN, } def save(handle, model, position=None): pass def load(handle): return OLVFile(handle) class OLVFile(ChessFile): def __init__(self, handle): ChessFile.__init__(self, handle) self.games = self.read_games(handle) self.count = len(self.games) def read_games(self, handle): """We don't return games if stipulation is not 'mate in #'""" games = [] rec = None rec_id = 1 contains_fairy_pieces = False # authors is a more line list (each line starts with "-") in_authors = False # piece list are usually in one line list inside [] # but sometimes given in more line lists in_white = False in_black = False for line in handle: line = line.rstrip() if in_authors and ":" in line: in_authors = False elif in_white and ":" in line: in_white = False elif in_black and ":" in line: in_black = False rec["FEN"] = self.lboard.asFen() # New record start if line == "---": if ( rec is not None and rec["Black"].startswith("Mate in ") and not contains_fairy_pieces ): games.append(rec) rec_id += 1 contains_fairy_pieces = False self.lboard = LBoard() self.lboard.applyFen("8/8/8/8/8/8/8/8 w - - 0 1") rec = collections.defaultdict(str) rec["Id"] = rec_id rec["Offset"] = 0 elif line.startswith("authors:"): in_authors = True elif line.startswith("source:"): rec["Event"] = line[8:] elif line.startswith("source-id:"): rec["Event"] = "{} ({})".format(rec["Event"], line[12:]) elif line.startswith("date:"): parts = line[6:].split("-") parts_len = len(parts) if parts_len >= 3: rec["Day"] = parts[2] if parts_len >= 2: rec["Month"] = parts[1] if parts_len >= 1: rec["Year"] = parts[0] elif line.startswith("distinction:"): rec["Site"] = line[12:] elif line.startswith("algebraic:"): pass elif line.startswith(" white:"): parts = line.split("[") if len(parts) > 1: pieces = parts[1][:-1] for piece in pieces.split(", "): if piece.startswith("Royal") or piece[0] not in chr2piece: contains_fairy_pieces = True else: cord = Cord(piece[1:3]).cord piece = chr2piece[piece[0]] self.lboard._addPiece(cord, piece, WHITE) else: in_white = True elif line.startswith(" black:"): parts = line.split("[") if len(parts) > 1: pieces = parts[1][:-1] for piece in pieces.split(", "): if piece.startswith("Royal") or piece[0] not in chr2piece: contains_fairy_pieces = True else: cord = Cord(piece[1:3]).cord piece = chr2piece[piece[0]] self.lboard._addPiece(cord, piece, BLACK) rec["FEN"] = self.lboard.asFen() else: in_black = True elif line.startswith("stipulation:"): if line.endswith("Black to move"): line = line[:-14] rec["FEN"] = rec["FEN"].replace("w", "b") line = line.split(": ")[1] if "+" in line: rec["Result"] = WHITEWON rec["Black"] = "Win" elif "-" in line: rec["Result"] = BLACKWON rec["Black"] = "Win" elif "=" in line: rec["Result"] = DRAW rec["Black"] = "Draw" elif line.startswith('"#'): rec["Result"] = WHITEWON rec["Black"] = "Mate in %s" % line[2:-1] rec["Termination"] = "mate in %s" % line[2:-1] elif line.startswith("solution:"): # TODO: solutions can be in several (sometimes rather unusual) form pass else: if in_authors: author = line[line.find("-") + 1 :].lstrip() if rec["White"]: rec["White"] = "{} - {}".format(rec["White"], author) else: rec["White"] = author elif in_white: piece = line[line.find("-") + 1 :].lstrip() cord = Cord(piece[1:3]).cord piece = chr2piece[piece[0]] self.lboard._addPiece(cord, piece, WHITE) elif in_black: piece = line[line.find("-") + 1 :].lstrip() cord = Cord(piece[1:3]).cord piece = chr2piece[piece[0]] self.lboard._addPiece(cord, piece, BLACK) # Append the latest record if ( rec is not None and rec["Black"].startswith("Mate in ") and not contains_fairy_pieces ): games.append(rec) return games def loadToModel(self, rec, position, model=None): if not model: model = GameModel() model.tags["Event"] = rec["Event"] model.tags["Site"] = rec["Site"] model.tags["Date"] = self.get_date(rec) model.tags["Round"] = "" model.tags["White"] = "?" model.tags["Black"] = "?" model.tags["Termination"] = rec["Termination"] fen = rec["FEN"] model.tags["FEN"] = fen model.boards = [model.variant(setup=fen)] model.variations = [model.boards] model.status = WAITING_TO_START return model def get_date(self, rec): year = rec["Year"] month = rec["Month"] day = rec["Day"] if year and month and day: tag_date = "%s.%02d.%02d" % (year, int(month), int(day)) elif year and month: tag_date = "%s.%02d" % (year, int(month)) elif year: tag_date = "%s" % year else: tag_date = "" return tag_date ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Savers/pgn.py0000644000175100001770000013160114614030313017422 0ustar00runnerdockerimport shutil import collections import os from io import StringIO from os.path import getmtime import re import textwrap import sys import pexpect from sqlalchemy import String from pychess.external.scoutfish import Scoutfish from pychess.external.chess_db import Parser from pychess.Utils.const import ( WHITE, BLACK, reprResult, FEN_START, FEN_EMPTY, WON_RESIGN, DRAW, BLACKWON, WHITEWON, NORMALCHESS, DRAW_AGREE, FIRST_PAGE, PREV_PAGE, NEXT_PAGE, ABORTED_REASONS, ADJOURNED_REASONS, ADJUDICATION_REASONS, WON_ADJUDICATION, DEATH_REASONS, CALLFLAG_REASONS, RUNNING, TOOL_NONE, TOOL_CHESSDB, TOOL_SCOUTFISH, ) from pychess.System import conf from pychess.System.Log import log from pychess.System.protoopen import PGN_ENCODING from pychess.System.prefix import getEngineDataPrefix from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.GameModel import GameModel from pychess.Utils.lutils.lmove import toSAN, parseAny, ParsingError from pychess.Utils.Move import Move from pychess.Utils.elo import get_elo_rating_change_pgn from pychess.Utils.logic import getStatus from pychess.Variants import name2variant, NormalBoard, variants from pychess.Utils import formatTime from pychess.Savers.ChessFile import ChessFile, LoadingError from pychess.Savers.database import col2label, TagDatabase, parseDateTag from pychess.System.cpu import get_cpu from pychess.Database import model as dbmodel from pychess.Database.PgnImport import TAG_REGEX, pgn2Const, PgnImport from pychess.Database.model import ( game, create_indexes, drop_indexes, metadata, ini_schema_version, ) __label__ = _("Chess Game") __ending__ = "pgn" __append__ = True # token categories ( COMMENT_REST, COMMENT_BRACE, COMMENT_NAG, VARIATION_START, VARIATION_END, RESULT, FULL_MOVE, MOVE, MOVE_COMMENT, ) = range(1, 10) pattern = re.compile( r""" (\;.*?[\n\r]) # comment, rest of line style |(\{.*?\}) # comment, between {} |(\$[0-9]+) # comment, Numeric Annotation Glyph |(\() # variation start |(\)) # variation end |(\*|1-0|0-1|1/2) # result (spec requires 1/2-1/2 for draw, but we want to tolerate simple 1/2 too) |( ([a-hKkQqRrBNnMmSsFHE][a-hxKQRBNMSFHE1-8+#=\-/]{1,6} |[PNBRQMSFK]@[a-h][1-8][+#]? # drop move |o\-?o(?:\-?o)? # castling notation using letter 'o' with or without '-' |O\-?O(?:\-?O)?(?:/[HE][a-h][18]?)? # castling notation using letter 'O' with or without '-' |0\-0(?:\-0)? # castling notation using zero with required '-' |\-\-) # non standard '--' is used for null move inside variations ([\?!]{1,2})* ) # move (full, count, move with ?!, ?!) """, re.VERBOSE | re.DOTALL, ) move_eval_re = re.compile( r"\[%eval\s+([+\-])?(?:#)?(\d+)(?:[,\.](\d{1,2}))?(?:/(\d{1,2}))?\]" ) move_time_re = re.compile(r"\[%emt\s+(\d:)?(\d{1,2}:)?(\d{1,4})(?:\.(\d{1,3}))?\]") # Chessbase style circles/arrows {[%csl Ra3][%cal Gc2c3,Rc3d4]} comment_circles_re = re.compile(r"\[%csl\s+((?:[RGBY]\w{2},?)+)\]") comment_arrows_re = re.compile(r"\[%cal\s+((?:[RGBY]\w{4},?)+)\]") # Mandatory tags (except "Result") mandatory_tags = ("Event", "Site", "Date", "Round", "White", "Black") def msToClockTimeTag(ms): """ Converts milliseconds to a chess clock time string in 'WhiteClock'/ 'BlackClock' PGN header format """ msec = ms % 1000 sec = ((ms - msec) % (1000 * 60)) / 1000 minute = ((ms - sec * 1000 - msec) % (1000 * 60 * 60)) / (1000 * 60) hour = ((ms - minute * 1000 * 60 - sec * 1000 - msec) % (1000 * 60 * 60 * 24)) / ( 1000 * 60 * 60 ) return "%01d:%02d:%02d.%03d" % (hour, minute, sec, msec) def parseClockTimeTag(tag): """ Parses 'WhiteClock'/'BlackClock' PGN headers and returns the time the player playing that color has left on their clock in milliseconds """ match = re.match(r"(\d{1,2}):(\d\d):(\d\d).(\d{1,3})", tag) if match: hour, minute, sec, msec = match.groups() return ( int(msec) + int(sec) * 1000 + int(minute) * 60 * 1000 + int(hour) * 60 * 60 * 1000 ) def parseTimeControlTag(tag): """ Parses 'TimeControl' PGN header and returns the time and gain the players have on game start in seconds """ match = re.match(r"^(\d+)\+?(\-?\d+)?$", tag) if match: secs, gain = match.groups() return int(secs), int(gain) if gain is not None else 0, 0 else: match = re.match(r"^(\d+)\/(\d+)$", tag) if match: moves, secs = match.groups() return int(secs), 0, int(moves) else: return None def save(handle, model, position=None, flip=False): """Saves the game from GameModel to .pgn""" processed_tags = [] def write_tag(tag, value, roster=False): nonlocal processed_tags if tag in processed_tags or (not roster and not value): return try: pval = str(value) pval = pval.replace("\\", "\\\\") pval = pval.replace('"', '\\"') print(f'[{tag} "{pval}"]', file=handle) except UnicodeEncodeError: pval = bytes(pval, "utf-8").decode(PGN_ENCODING, errors="ignore") print(f'[{tag} "{pval}"]', file=handle) processed_tags = processed_tags + [tag] # Mandatory ordered seven-tag roster status = reprResult[model.status] for tag in mandatory_tags: value = model.tags[tag] if tag == "Date": y, m, d = parseDateTag(value) y = "%04d" % y if y is not None else "????" m = "%02d" % m if m is not None else "??" d = "%02d" % d if d is not None else "??" value = f"{y}.{m}.{d}" elif value == "": value = "?" write_tag(tag, value, roster=True) write_tag("Result", reprResult[model.status], roster=True) # Variant if model.variant.variant != NORMALCHESS: write_tag("Variant", model.variant.cecp_name.capitalize()) # Initial position if model.boards[0].asFen() != FEN_START: write_tag("SetUp", "1") write_tag("FEN", model.boards[0].asFen()) # Number of moves write_tag("PlyCount", model.ply - model.lowply) # Final position if model.reason in ABORTED_REASONS: value = "abandoned" elif model.reason == WON_ADJUDICATION and model.isEngine2EngineGame(): value = "rules infraction" elif model.reason in ADJUDICATION_REASONS: value = "adjudication" elif model.reason in DEATH_REASONS: value = "death" elif model.reason in CALLFLAG_REASONS: value = "time forfeit" elif model.reason in ADJOURNED_REASONS or status == "*": value = "unterminated" else: value = "normal" write_tag("Termination", value) # ELO and its variation if conf.get("saveRatingChange"): welo = model.tags["WhiteElo"] belo = model.tags["BlackElo"] if welo != "" and belo != "": write_tag( "WhiteRatingDiff", get_elo_rating_change_pgn(model, WHITE) ) # Unofficial write_tag( "BlackRatingDiff", get_elo_rating_change_pgn(model, BLACK) ) # Unofficial # Time if model.timed: write_tag( "WhiteClock", msToClockTimeTag(int(model.timemodel.getPlayerTime(WHITE) * 1000)), ) write_tag( "BlackClock", msToClockTimeTag(int(model.timemodel.getPlayerTime(BLACK) * 1000)), ) # Write all the unprocessed tags for tag in model.tags: # Debug: print(">> %s = %s" % (tag, str(model.tags[tag]))) write_tag(tag, model.tags[tag]) # Discovery of the moves and comments save_emt = conf.get("saveEmt") save_eval = conf.get("saveEval") result = [] walk(model.boards[0].board, result, model, save_emt, save_eval) # Alignment of the fetched elements indented = conf.get("indentPgn") if indented: text_buffer = "" depth = 0 crlf = False for text in result: # De/Indentation crlf = (text_buffer[-1:] if len(text_buffer) > 0 else "") in ["\r", "\n"] if text == "(": depth += 1 if indented and not crlf: text_buffer += os.linesep crlf = True # Space between each term last = text_buffer[-1:] if len(text_buffer) > 0 else "" crlf = last in ["\r", "\n"] if ( not crlf and last != " " and last != "\t" and last != "(" and not text.startswith("\r") and not text.startswith("\n") and text != ")" and len(text_buffer) > 0 ): text_buffer += " " # New line for a new main move if len(text_buffer) == 0 or ( indented and depth == 0 and last != "\r" and last != "\n" and re.match(r"^[0-9]+\.", text) is not None ): text_buffer += os.linesep crlf = True # Alignment if crlf and depth > 0: for j in range(0, depth): text_buffer += " " # Term text_buffer += text if indented and text == ")": text_buffer += os.linesep crlf = True depth -= 1 else: # Add new line to separate tag section and movetext print("", file=handle) text_buffer = textwrap.fill(" ".join(result), width=80) # Final status = reprResult[model.status] try: print(text_buffer, status, file=handle) except UnicodeEncodeError: text_buffer = bytes(text_buffer, "utf-8").decode(PGN_ENCODING, errors="ignore") print(text_buffer, status, file=handle) # Add new line to separate next game print("", file=handle) output = handle.getvalue() if isinstance(handle, StringIO) else "" handle.close() return output def walk(node, result, model, save_emt=False, save_eval=False, vari=False): """Prepares a game data for .pgn storage. Recursively walks the node tree to collect moves and comments into a resulting movetext string. Arguments: node - list (a tree of lboards created by the pgn parser) result - str (movetext strings)""" while True: if node is None: break # Initial game or variation comment if node.prev is None: for child in node.children: if isinstance(child, str): result.append(f"{{{child}}}{os.linesep}") node = node.next continue movecount = move_count( node, black_periods=(save_emt or save_eval) and "TimeControl" in model.tags ) if movecount is not None: if movecount: result.append(movecount) move = node.lastMove result.append(toSAN(node.prev, move)) if (save_emt or save_eval) and not vari: emt_eval = "" if "TimeControl" in model.tags and save_emt: elapsed = model.timemodel.getElapsedMoveTime( node.plyCount - model.lowply ) emt_eval = "[%%emt %s]" % formatTime(elapsed, clk2pgn=True) if node.plyCount in model.scores and save_eval: moves, score, depth = model.scores[node.plyCount] if node.color == BLACK: score = -score emt_eval += f"[%eval {score / 100.0:0.2f}/{depth}]" if emt_eval: result.append("{%s}" % emt_eval) for nag in node.nags: if nag: result.append(nag) for child in node.children: if isinstance(child, str): # comment if child: result.append("{%s}" % child) else: # variations if node.fen_was_applied: result.append("(") walk(child[0], result, model, save_emt, save_eval, vari=True) result.append(")") # variation after last played move is not valid pgn # but we will save it as in comment else: result.append("{%s:" % _("Analyzer's primary variation")) walk(child[0], result, model, save_emt, save_eval, vari=True) result.append("}") if node.next: node = node.next else: break def move_count(node, black_periods=False): mvcount = None if node.fen_was_applied: ply = node.plyCount if ply % 2 == 1: mvcount = "%d." % (ply // 2 + 1) # initial game move, or initial variation move # it can be the same position as the main line! this is the reason using id() elif node.prev.prev is None or id(node) != id(node.prev.next) or black_periods: mvcount = "%d..." % (ply // 2) elif node.prev.children: # move after real(not [%foo bar]) comment need_mvcount = False for child in node.prev.children: if isinstance(child, str): if not child.startswith("[%"): need_mvcount = True break else: need_mvcount = True break if need_mvcount: mvcount = "%d..." % (ply // 2) else: mvcount = "" else: mvcount = "" return mvcount def load(handle, progressbar=None): return PGNFile(handle, progressbar) cpuinfo = get_cpu() MODERN = "-modern" if cpuinfo["popcnt"] else "" altpath = getEngineDataPrefix() if sys.platform == "win32": scoutfish = "scoutfish_x64.exe" else: scoutfish = "scoutfish_x{}{}{}".format( cpuinfo["bitness"], MODERN, cpuinfo["binext"] ) scoutfish_path = shutil.which(scoutfish, mode=os.X_OK, path=altpath) if sys.platform == "win32": parser = "parser_x64.exe" else: parser = "parser_x{}{}{}".format(cpuinfo["bitness"], MODERN, cpuinfo["binext"]) chess_db_path = shutil.which(parser, mode=os.X_OK, path=altpath) class PGNFile(ChessFile): def __init__(self, handle, progressbar=None): ChessFile.__init__(self, handle) self.handle = handle self.progressbar = progressbar self.pgn_is_string = isinstance(handle, StringIO) if self.pgn_is_string: self.games = [ self.load_game_tags(), ] else: self.skip = 0 self.limit = 100 self.order_col = game.c.offset self.is_desc = False self.reset_last_seen() # filter expressions to .sqlite .bin .scout self.tag_query = None self.fen = None self.scout_query = None self.scoutfish = None self.chess_db = None self.sqlite_path = os.path.splitext(self.path)[0] + ".sqlite" self.engine = dbmodel.get_engine(self.sqlite_path) self.tag_database = TagDatabase(self.engine) self.games, self.offs_ply = self.get_records(0) log.info( f"{self.path} contains {self.count} game(s)", extra={"task": "SQL"}, ) def get_count(self): """Number of games in .pgn database""" if self.pgn_is_string: return len(self.games) else: return self.tag_database.count count = property(get_count) def get_size(self): """Size of .pgn file in bytes""" return os.path.getsize(self.path) size = property(get_size) def close(self): self.tag_database.close() ChessFile.close(self) def init_tag_database(self, importer=None): """Create/open .sqlite database of game header tags""" # Import .pgn header tags to .sqlite database sqlite_path = self.path.replace(".pgn", ".sqlite") if ( os.path.isfile(self.path) and os.path.isfile(sqlite_path) and getmtime(self.path) > getmtime(sqlite_path) ): metadata.drop_all(self.engine) metadata.create_all(self.engine) ini_schema_version(self.engine) size = self.size if size > 0 and self.tag_database.count == 0: if size > 10000000: drop_indexes(self.engine) if self.progressbar is not None: from gi.repository import GLib GLib.idle_add(self.progressbar.set_text, _("Importing game headers...")) if importer is None: importer = PgnImport(self) importer.initialize() importer.do_import(self.path, progressbar=self.progressbar) if size > 10000000 and not importer.cancel: create_indexes(self.engine) return importer def init_chess_db(self): """Create/open polyglot .bin file with extra win/loss/draw stats using chess_db parser from https://github.com/mcostalba/chess_db """ if chess_db_path is not None and self.path and self.size > 0: try: if self.progressbar is not None: from gi.repository import GLib GLib.idle_add( self.progressbar.set_text, _("Creating .bin index file...") ) self.chess_db = Parser(engine=(chess_db_path,)) self.chess_db.open(self.path) bin_path = os.path.splitext(self.path)[0] + ".bin" if not os.path.isfile(bin_path): log.debug("No valid games found in %s" % self.path) self.chess_db = None elif getmtime(self.path) > getmtime(bin_path): self.chess_db.make() except OSError as err: self.chess_db = None log.warning( "Failed to sart chess_db parser. OSError {} {}".format( err.errno, err.strerror ) ) except pexpect.TIMEOUT: self.chess_db = None log.warning("chess_db parser failed (pexpect.TIMEOUT)") except pexpect.EOF: self.chess_db = None log.warning("chess_db parser failed (pexpect.EOF)") def init_scoutfish(self): """Create/open .scout database index file to help querying using scoutfish from https://github.com/mcostalba/scoutfish """ if scoutfish_path is not None and self.path and self.size > 0: try: if self.progressbar is not None: from gi.repository import GLib GLib.idle_add( self.progressbar.set_text, _("Creating .scout index file...") ) self.scoutfish = Scoutfish(engine=(scoutfish_path,)) self.scoutfish.open(self.path) scout_path = os.path.splitext(self.path)[0] + ".scout" if getmtime(self.path) > getmtime(scout_path): self.scoutfish.make() except OSError as err: self.scoutfish = None log.warning( "Failed to sart scoutfish. OSError {} {}".format( err.errno, err.strerror ) ) except pexpect.TIMEOUT: self.scoutfish = None log.warning("scoutfish failed (pexpect.TIMEOUT)") except pexpect.EOF: self.scoutfish = None log.warning("scoutfish failed (pexpect.EOF)") def get_book_moves(self, fen): """Get move-games-win-loss-draw stat of fen position""" rows = [] if self.chess_db is not None: move_stat = self.chess_db.find(f"limit {1} skip {0} {fen}") for mstat in move_stat["moves"]: rows.append( ( mstat["move"], int(mstat["games"]), int(mstat["wins"]), int(mstat["losses"]), int(mstat["draws"]), ) ) return rows def has_position(self, fen): # ChessDB (prioritary) if self.chess_db is not None: ret = self.chess_db.find(f"limit {1} skip {0} {fen}") if len(ret["moves"]) > 0: return TOOL_CHESSDB, True # Scoutfish (alternate by approximation) if self.scoutfish is not None: q = {"limit": 1, "skip": 0, "sub-fen": fen} ret = self.scoutfish.scout(q) if ret["match count"] > 0: return TOOL_SCOUTFISH, True return TOOL_NONE, False def set_tag_order(self, order_col, is_desc): self.order_col = order_col self.is_desc = is_desc self.tag_database.build_order_by(self.order_col, self.is_desc) def reset_last_seen(self): col_max = "ZZZ" if isinstance(self.order_col.type, String) else 2**32 col_min = "" if isinstance(self.order_col.type, String) else -1 if self.is_desc: self.last_seen = [(col_max, 2**32)] else: self.last_seen = [(col_min, -1)] def set_tag_filter(self, query): """Set (now prefixing) text and create where clause we will use to query header tag .sqlite database """ self.tag_query = query self.tag_database.build_where_tags(self.tag_query) def set_fen_filter(self, fen): """Set fen string we will use to get game offsets from .bin database""" if self.chess_db is not None and fen is not None and fen != FEN_START: self.fen = fen else: self.fen = None self.tag_database.build_where_offs8(None) def set_scout_filter(self, query): """Set json string we will use to get game offsets from .scout database""" if self.scoutfish is not None and query: self.scout_query = query else: self.scout_query = None self.tag_database.build_where_offs(None) self.offs_ply = {} def get_offs(self, skip, filtered_offs_list=None): """Get offsets from .scout database and create where clause we will use to query header tag .sqlite database """ if self.scout_query: limit = (10000 if self.tag_query else self.limit) + 1 self.scout_query["skip"] = skip self.scout_query["limit"] = limit move_stat = self.scoutfish.scout(self.scout_query) offsets = [] for mstat in move_stat["matches"]: offs = mstat["ofs"] if filtered_offs_list is None: offsets.append(offs) self.offs_ply[offs] = mstat["ply"][0] elif offs in filtered_offs_list: offsets.append(offs) self.offs_ply[offs] = mstat["ply"][0] if filtered_offs_list is not None: # Continue scouting until we get enough good offset if needed # print(0, move_stat["match count"], len(offsets)) i = 1 while len(offsets) < self.limit and move_stat["match count"] == limit: self.scout_query["skip"] = i * limit - 1 move_stat = self.scoutfish.scout(self.scout_query) for mstat in move_stat["matches"]: offs = mstat["ofs"] if offs in filtered_offs_list: offsets.append(offs) self.offs_ply[offs] = mstat["ply"][0] # print(i, move_stat["match count"], len(offsets)) i += 1 if len(offsets) > self.limit: self.tag_database.build_where_offs(offsets[: self.limit]) else: self.tag_database.build_where_offs(offsets) def get_offs8(self, skip, filtered_offs_list=None): """Get offsets from .bin database and create where clause we will use to query header tag .sqlite database """ if self.fen: move_stat = self.chess_db.find(f"limit {self.limit} skip {skip} {self.fen}") offsets = [] for mstat in move_stat["moves"]: offs = mstat["pgn offsets"] if filtered_offs_list is None: offsets += offs elif offs in filtered_offs_list: offsets += offs if len(offsets) > self.limit: self.tag_database.build_where_offs8(sorted(offsets)[: self.limit]) else: self.tag_database.build_where_offs8(sorted(offsets)) def get_records(self, direction=FIRST_PAGE): """Get game header tag records from .sqlite database in paginated way""" if direction == FIRST_PAGE: self.skip = 0 self.reset_last_seen() elif direction == NEXT_PAGE: if not self.tag_query: self.skip += self.limit elif direction == PREV_PAGE: if len(self.last_seen) == 2: self.reset_last_seen() elif len(self.last_seen) > 2: self.last_seen = self.last_seen[:-2] if not self.tag_query and self.skip >= self.limit: self.skip -= self.limit if self.fen: self.reset_last_seen() filtered_offs_list = None if self.tag_query and (self.fen or self.scout_query): filtered_offs_list = self.tag_database.get_offsets_for_tags( self.last_seen[-1] ) if self.fen: self.get_offs8(self.skip, filtered_offs_list=filtered_offs_list) if self.scout_query: self.get_offs(self.skip, filtered_offs_list=filtered_offs_list) # No game satisfied scout_query if self.tag_database.where_offs is None: return [], {} records = self.tag_database.get_records(self.last_seen[-1], self.limit) if records: self.last_seen.append( (records[-1][col2label[self.order_col]], records[-1]["Offset"]) ) return records, self.offs_ply else: return [], {} def load_game_tags(self): """Reads header tags from pgn if pgn is a one game only StringIO object""" header = collections.defaultdict(str) header["Id"] = 0 header["Offset"] = 0 for line in self.handle.readlines(): line = line.strip() if line.startswith("[") and line.endswith("]"): tag_match = TAG_REGEX.match(line) if tag_match: value = tag_match.group(2) value = value.replace('\\"', '"') value = value.replace("\\\\", "\\") header[tag_match.group(1)] = value else: break return header def loadToModel(self, rec, position=-1, model=None): """Parse game text and load game record header tags to a GameModel object""" if model is None: model = GameModel() if self.pgn_is_string: rec = self.games[0] # Load mandatory tags for tag in mandatory_tags: model.tags[tag] = rec[tag] # Load other tags for tag in ("WhiteElo", "BlackElo", "ECO", "TimeControl", "Annotator"): model.tags[tag] = rec[tag] if self.pgn_is_string: for tag in rec: if isinstance(rec[tag], str) and rec[tag]: model.tags[tag] = rec[tag] else: model.info = self.tag_database.get_info(rec) extra_tags = self.tag_database.get_exta_tags(rec) for et in extra_tags: model.tags[et["tag_name"]] = et["tag_value"] if self.pgn_is_string: variant = rec["Variant"].capitalize() else: variant = self.get_variant(rec) if model.tags["TimeControl"]: tc = parseTimeControlTag(model.tags["TimeControl"]) if tc is not None: secs, gain, moves = tc model.timed = True model.timemodel.secs = secs model.timemodel.gain = gain model.timemodel.minutes = secs / 60 model.timemodel.moves = moves for tag, color in (("WhiteClock", WHITE), ("BlackClock", BLACK)): if tag in model.tags: try: millisec = parseClockTimeTag(model.tags[tag]) # We need to fix when FICS reports negative clock time like this # [TimeControl "180+0"] # [WhiteClock "0:00:15.867"] # [BlackClock "23:59:58.820"] start_sec = ( (millisec - 24 * 60 * 60 * 1000) / 1000.0 if millisec > 23 * 60 * 60 * 1000 else millisec / 1000.0 ) model.timemodel.intervals[color][0] = start_sec except ValueError: raise LoadingError("Error parsing '%s'" % tag) fenstr = rec["FEN"] if variant: if variant not in name2variant: raise LoadingError("Unknown variant %s" % variant) model.tags["Variant"] = variant # Fixes for some non statndard Chess960 .pgn if (fenstr is not None) and variant == "Fischerandom": parts = fenstr.split() parts[0] = parts[0].replace(".", "/").replace("0", "") if len(parts) == 1: parts.append("w") parts.append("-") parts.append("-") fenstr = " ".join(parts) model.variant = name2variant[variant] board = LBoard(model.variant.variant) else: model.variant = NormalBoard board = LBoard() if fenstr: try: board.applyFen(fenstr) model.tags["FEN"] = fenstr except SyntaxError as err: board.applyFen(FEN_EMPTY) raise LoadingError( _("The game can't be loaded, because of an error parsing FEN"), err.args[0], ) else: board.applyFen(FEN_START) boards = [board] del model.moves[:] del model.variations[:] self.error = None movetext = self.get_movetext(rec) boards = self.parse_movetext(movetext, boards[0], position) # The parser built a tree of lboard objects, now we have to # create the high level Board and Move lists... for board in boards: if board.lastMove is not None: model.moves.append(Move(board.lastMove)) self.has_emt = False self.has_eval = False def _create_board(model, node): if node.prev is None: # initial game board board = model.variant(setup=node.asFen(), lboard=node) else: move = Move(node.lastMove) try: board = node.prev.pieceBoard.move(move, lboard=node) except Exception: raise LoadingError( _("Invalid move."), f"{move_count(node, black_periods=True)}{move}", ) return board def walk(model, node, path): boards = path stack = [] current = node while current is not None: board = _create_board(model, current) boards.append(board) stack.append(current) current = current.next else: model.variations.append(list(boards)) while stack: current = stack.pop() boards.pop() for child in current.children: if isinstance(child, list): if len(child) > 1: # non empty variation, go walk walk(model, child[1], list(boards)) else: if not self.has_emt: self.has_emt = child.find("%emt") >= 0 if not self.has_eval: self.has_eval = child.find("%eval") >= 0 # Collect all variation paths into a list of board lists # where the first one will be the boards of mainline game. # model.boards will allways point to the current shown variation # which will be model.variations[0] when we are in the mainline. walk(model, boards[0], []) model.boards = model.variations[0] self.has_emt = self.has_emt and model.timed if self.has_emt or self.has_eval: if self.has_emt: blacks = len(model.moves) // 2 whites = len(model.moves) - blacks model.timemodel.intervals = [ [model.timemodel.intervals[0][0]] * (whites + 1), [model.timemodel.intervals[1][0]] * (blacks + 1), ] model.timemodel.intervals[0][0] = secs model.timemodel.intervals[1][0] = secs for ply, board in enumerate(boards): for child in board.children: if isinstance(child, str): if self.has_emt: match = move_time_re.search(child) if match: movecount, color = divmod(ply + 1, 2) hour, minute, sec, msec = match.groups() prev = model.timemodel.intervals[color][movecount - 1] hour = 0 if hour is None else int(hour[:-1]) minute = 0 if minute is None else int(minute[:-1]) msec = 0 if msec is None else int(msec) msec += ( int(sec) * 1000 + int(minute) * 60 * 1000 + int(hour) * 60 * 60 * 1000 ) model.timemodel.intervals[color][movecount] = ( prev - msec / 1000.0 + gain ) if self.has_eval: match = move_eval_re.search(child) if match: sign, num, fraction, depth = match.groups() sign = 1 if sign is None or sign == "+" else -1 num = int(num) fraction = 0 if fraction is None else int(fraction) value = sign * (num * 100 + fraction) depth = "" if depth is None else depth if board.color == BLACK: value = -value model.scores[ply] = ("", value, depth) log.debug("pgn.loadToModel: intervals %s" % model.timemodel.intervals) # Find the physical status of the game model.status, model.reason = getStatus(model.boards[-1]) # Apply result from .pgn if the last position was loaded if position == -1 or len(model.moves) == position - model.lowply: if self.pgn_is_string: result = rec["Result"] if result in pgn2Const: status = pgn2Const[result] else: status = RUNNING else: status = rec["Result"] if status in (WHITEWON, BLACKWON) and status != model.status: model.status = status model.reason = WON_RESIGN elif status == DRAW and status != model.status: model.status = DRAW model.reason = DRAW_AGREE if model.timed: model.timemodel.movingColor = model.boards[-1].color # If parsing gave an error we throw it now, to enlarge our possibility # of being able to continue the game from where it failed. if self.error: raise self.error return model def parse_movetext(self, string, board, position, variation=False): """Recursive parses a movelist part of one game. Arguments: srting - str (movelist) board - lboard (initial position) position - int (maximum ply to parse) variation- boolean (True if the string is a variation)""" boards = [] boards_append = boards.append last_board = board if variation: # this board used only to hold initial variation comments boards_append(LBoard(board.variant)) else: # initial game board boards_append(board) # status = None parenthesis = 0 v_string = "" v_last_board = None for m in re.finditer(pattern, string): group, text = m.lastindex, m.group(m.lastindex) if parenthesis > 0: v_string += " " + text if group == VARIATION_END: parenthesis -= 1 if parenthesis == 0: if last_board.prev is None: errstr1 = _("Error parsing %(mstr)s") % {"mstr": string} self.error = LoadingError(errstr1, "") return boards # , status v_last_board.children.append( self.parse_movetext( v_string[:-1], last_board.prev, position, variation=True ) ) v_string = "" continue elif group == VARIATION_START: parenthesis += 1 if parenthesis == 1: v_last_board = last_board if parenthesis == 0: if group == FULL_MOVE: if not variation: if position != -1 and last_board.plyCount >= position: break mstr = m.group(MOVE) try: lmove = parseAny(last_board, mstr) except ParsingError as err: # TODO: save the rest as comment # last_board.children.append(string[m.start():]) notation, reason, boardfen = err.args ply = last_board.plyCount if ply % 2 == 0: moveno = "%d." % (ply // 2 + 1) else: moveno = "%d..." % (ply // 2 + 1) errstr1 = _( "The game can't be read to end, because of an error parsing move %(moveno)s '%(notation)s'." ) % {"moveno": moveno, "notation": notation} errstr2 = _("The move failed because %s.") % reason self.error = LoadingError(errstr1, errstr2) break except Exception: ply = last_board.plyCount if ply % 2 == 0: moveno = "%d." % (ply // 2 + 1) else: moveno = "%d..." % (ply // 2 + 1) errstr1 = _("Error parsing move %(moveno)s %(mstr)s") % { "moveno": moveno, "mstr": mstr, } self.error = LoadingError(errstr1, "") break new_board = last_board.clone() new_board.applyMove(lmove) if m.group(MOVE_COMMENT): new_board.nags.append(symbol2nag(m.group(MOVE_COMMENT))) new_board.prev = last_board # set last_board next, except starting a new variation if variation and last_board == board: boards[0].next = new_board else: last_board.next = new_board boards_append(new_board) last_board = new_board elif group == COMMENT_REST: last_board.children.append(text[1:]) elif group == COMMENT_BRACE: comm = text.replace("{\r\n", "{").replace("\r\n}", "}") # Preserve new lines of lichess study comments if self.path is not None and "lichess_study_" in self.path: comment = comm[1:-1] else: comm = comm[1:-1].splitlines() comment = " ".join([line.strip() for line in comm]) if variation and last_board == board: # initial variation comment boards[0].children.append(comment) else: last_board.children.append(comment) elif group == COMMENT_NAG: last_board.nags.append(text) # TODO elif group == RESULT: # if text == "1/2": # status = reprResult.index("1/2-1/2") # else: # status = reprResult.index(text) break else: print("Unknown:", text) return boards # , status def get_movetext(self, rec): self.handle.seek(rec["Offset"]) in_comment = False lines = [] line = self.handle.readline() if not line.strip(): line = self.handle.readline() while line: # escape non-PGN data line if line.startswith("%"): line = self.handle.readline() continue # header tag line if not in_comment and line.startswith("["): line = self.handle.readline() continue # update in_comment state if (not in_comment and "{" in line) or (in_comment and "}" in line): in_comment = line.rfind("{") > line.rfind("}") # if there is something add it if line.strip(): if not self.pgn_is_string and self.handle.pgn_encoding != PGN_ENCODING: line = line.encode(PGN_ENCODING).decode(self.handle.pgn_encoding) lines.append(line) line = self.handle.readline() # if line is empty it should be the game separator line except... elif len(lines) == 0 or in_comment: if in_comment: lines.append(line) line = self.handle.readline() else: break return "".join(lines) def get_variant(self, rec): variant = rec["Variant"] return variants[variant].cecp_name.capitalize() if variant else "" nag2symbolDict = { "$0": "", "$1": "!", "$2": "?", "$3": "!!", "$4": "??", "$5": "!?", "$6": "?!", "$7": "□", # forced move "$8": "□", "$9": "??", "$10": "=", "$11": "=", "$12": "=", "$13": "∞", # unclear "$14": "+=", "$15": "=+", "$16": "±", "$17": "∓", "$18": "+-", "$19": "-+", "$20": "+--", "$21": "--+", "$22": "⨀", # zugzwang "$23": "⨀", "$24": "◯", # space "$25": "◯", "$26": "◯", "$27": "◯", "$28": "◯", "$29": "◯", "$32": "⟳", # development "$33": "⟳", "$36": "↑", # initiative "$37": "↑", "$40": "→", # attack "$41": "→", "$44": "~=", # compensation "$45": "=~", "$132": "⇆", # counterplay "$133": "⇆", "$136": "⨁", # time "$137": "⨁", "$138": "⨁", "$139": "⨁", "$140": "∆", # with the idea "$141": "∇", # aimed against "$142": "⌓", # better is "$146": "N", # novelty } symbol2nagDict = {} for k, v in nag2symbolDict.items(): if v not in symbol2nagDict: symbol2nagDict[v] = k def nag2symbol(nag): return nag2symbolDict.get(nag, nag) def symbol2nag(symbol): return symbol2nagDict[symbol] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Savers/png.py0000644000175100001770000000221414614030313017417 0ustar00runnerdockerimport math import cairo from pychess.System import conf from pychess.widgets.BoardView import BoardView, matrixAround __label__ = _("Png image") __ending__ = "png" __append__ = False SQUARE = 80 def save(file, model, position=None, flip=False): """Export the current position into a .png file""" show_cords = conf.get("showCords") boardview = BoardView(model) padding = int(SQUARE / 4) if show_cords else 0 width = SQUARE * 8 + padding * 2 height = SQUARE * 8 + padding * 2 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) boardview.shown = position boardview.square = 0 + padding, 0 + padding, SQUARE * 8, SQUARE if flip: boardview._rotation = math.pi boardview.matrix = cairo.Matrix.init_rotate(math.pi) boardview.matrix, boardview.invmatrix = matrixAround( boardview.matrix, width / 2.0, height / 2.0 ) context.transform(boardview.matrix) boardview.drawBoard(context, None) boardview.drawPieces(context, None) if show_cords: boardview.drawCords(context, None) surface.write_to_png(file.name) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Savers/remotegame.py0000644000175100001770000026170014614030313020767 0ustar00runnerdockerimport os import sys import re import json from urllib.request import Request, urlopen from urllib.parse import urlparse, parse_qs, unquote, urlencode from html import unescape from html.parser import HTMLParser import websockets from base64 import b64decode import string from random import choice, randint from pychess import VERSION from pychess.Utils.const import ( FEN_START, FEN_START_960, CRAZYHOUSECHESS, FISCHERRANDOMCHESS, reprResult, ) from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import parseAny, toSAN from pychess.widgets import newGameDialog from pychess.System.Log import log # import pdb # def _(p): # return p # VERSION = '1.0' # import ssl # ssl._create_default_https_context = ssl._create_unverified_context # Chess24, ICCF TYPE_GAME, TYPE_STUDY, TYPE_PUZZLE, TYPE_EVENT, TYPE_FEN = range(5) CHESS960 = "Fischerandom" CAT_DL = _("Download link") CAT_HTML = _("HTML parsing") CAT_API = _("Application programming interface") CAT_MISC = _("Various techniques") CAT_WS = _("Websockets") # Abstract class to download a game from the Internet class InternetGameInterface: # Internal def __init__(self): """Initialize the common data that can be used in ALL the sub-classes.""" self.reset() self.allow_extra = False self.userAgent = "PyChess %s" % VERSION self.use_an = True # To rebuild a readable PGN where possible self.allow_octet_stream = False def reset(self): """Clear the internal variables used to fetch the games.""" self.id = None self.url_type = None self.data = None def is_enabled(self): """Override this method in the sub-class to disable a chess provider temporarily.""" _, proto = self.get_identity() return (proto != CAT_WS) or ( sys.version_info.major >= 3 and sys.version_info.minor >= 5 ) # Async WS needs 3.5 for SSL def is_async(self): """Tell if the chess provider is using asynchronous code.""" _, proto = self.get_identity() return proto == CAT_WS def get_description(self): """Return the description of the chess provider.""" name, _ = self.get_identity() return "%s" % name def get_game_id(self): """Return the unique identifier of the game that was detected after a successful call to assign_game(). The value is None if no game was found earlier.""" return self.id def reacts_to(self, url, host): """Return True if the URL belongs to the HOST (possibly equal to *). The sub-domains other than "www" are not supported. The method is used to accept any URL when a unique identifier cannot be extracted by assign_game(). """ # Verify the hostname if url is None: return False if host != "*": parsed = urlparse(url) if parsed.netloc.lower() not in ["www." + host.lower(), host.lower()]: return False # Any page is valid self.id = url return True def json_loads(self, data): """Load a JSON and handle the errors. The value None is returned when the data are not relevant or misbuilt.""" try: if data in [None, ""]: return None return json.loads(data) except ValueError: return None def json_field(self, data, path, default=""): """Conveniently read a field from a JSON data. The PATH is a key like "node1/node2/key". A blank string is returned in case of error.""" if data in [None, ""]: return "" keys = path.split("/") value = data for key in keys: if key.startswith("[") and key.endswith("]"): try: value = value[int(key[1:-1])] except (ValueError, TypeError, IndexError): return "" else: if key in value: value = value[key] else: return "" return default if value in [None, ""] else value def read_data(self, response): """Read the data from an HTTP request and execute the charset conversion. The value None is returned in case of error.""" # Check if response is None: return None bytes = response.read() # Decode cs = response.info().get_content_charset() if cs is not None: data = bytes.decode(cs) else: try: data = bytes.decode("utf-8") except Exception: try: data = bytes.decode("latin-1") except Exception: log.debug("Error in the decoding of the data") return None # Result data = data.replace("\ufeff", "").replace("\r", "").strip() if data == "": return None else: return data def expand_links(self, links, url): """Convert relative paths into full paths.""" base = urlparse(url) for i, link in enumerate(links): e = urlparse(link) if e.netloc == "": if e.path.startswith("/"): link = f"{base.scheme}://{base.netloc}{e.path}" else: link = "{}://{}{}/{}".format( base.scheme, base.netloc, "/".join(base.path.split("/")[:-1]), e.path, ) links[i] = link return list(dict.fromkeys(links)) # Without duplicate entries def download(self, url, userAgent=False): """Download the URL from the Internet. The USERAGENT is requested by some websites to make sure that you are not a bot. The value None is returned in case of error.""" # Check if url in [None, ""]: return None # Download try: log.debug("Downloading game: %s" % url) if userAgent: req = Request(url, headers={"User-Agent": self.userAgent}) response = urlopen(req) else: response = urlopen(url) return self.read_data(response) except Exception as exception: log.debug("Exception raised: %s" % str(exception)) return None def download_list(self, links, userAgent=False): """Download and concatenate the URL given in the array LINKS. The USERAGENT is requested by some websites to make sure that you are not a bot. The number of downloads is limited to 10. The downloads that failed are dropped silently. The value None is returned in case of no data or error.""" pgn = "" for i, link in enumerate(links): data = self.download(link, userAgent) if data not in [None, ""]: pgn += "%s\n\n" % data if i >= 10: # Anti-flood break if pgn == "": return None else: return pgn def send_xhr(self, url, postData, userAgent=False): """Call a target URL by submitting the POSTDATA. The USERAGENT is requested by some websites to make sure that you are not a bot. The value None is returned in case of error.""" # Check if url in [None, ""] or postData in [None, ""]: return None # Call data try: log.debug("Calling API: %s" % url) if userAgent: req = Request( url, urlencode(postData).encode(), headers={"User-Agent": self.userAgent}, ) else: req = Request(url, urlencode(postData).encode()) response = urlopen(req) return self.read_data(response) except Exception as exception: log.debug("Exception raised: %s" % str(exception)) return None def rebuild_pgn(self, game): """Return an object in PGN format. The keys starting with "_" are dropped silently. The key "_url" becomes the first comment. The key "_moves" contains the moves. The key "_reason" becomes the last comment.""" # Check if game is None or game == "" or "_moves" not in game or game["_moves"] == "": return None # Convert Chess960 to classical chess depending on the start position if "FEN" in game: if "Variant" in game: if game["Variant"] == CHESS960 and game["FEN"] == FEN_START_960: del game["Variant"], game["SetUp"], game["FEN"] else: if game["FEN"] == FEN_START: del game["SetUp"], game["FEN"] # Header pgn = "" for e in game: if e[:1] != "_" and game[e] not in [None, ""]: pgn += f'[{e} "{game[e]}"]\n' if pgn == "": pgn = '[Annotator "PyChess %s"]\n' % VERSION pgn += "\n" # Body if "_url" in game: pgn += "{%s}\n" % game["_url"] if "_moves" in game: pgn += "%s " % game["_moves"] if "_reason" in game: pgn += "{%s} " % game["_reason"] if "Result" in game: pgn += "%s " % game["Result"] return pgn.strip() def sanitize(self, pgn): """Modify the PGN output to comply with the expected format""" # Check if pgn in [None, ""]: return None # Verify that it starts with the correct magic character (ex.: "<" denotes an HTML content, "[" a chess game, etc...) pgn = pgn.replace("\r", "").strip() if not pgn.startswith("["): return None # Reorganize the spaces to bypass Scoutfish's limitation while True: lc = len(pgn) pgn = pgn.replace("\n\n\n", "\n\n") if len(pgn) == lc: break # Extract the first game pos = pgn.find( "\n\n[" ) # TODO Support in-memory database to load several games at once if pos != -1: pgn = pgn[:pos] # Variants pgn = pgn.replace('[Variant "Chess"]\n', "") # Return the PGN with the local crlf return pgn.replace("\n", os.linesep) def strip_html(self, input): """Remove any HTML mark from the input parameter.""" rxp = re.compile(r"<\/?[^>]+>", re.IGNORECASE) return rxp.sub("", input) def is_fen(self, fen): """Test if the argument is a FEN position.""" try: rxp = re.compile( r"^[kqbnrp1-8\/]+\s[w|b]\s[kq-]+\s[a-h-][1-8]?(\s[0-9]+)?(\s[0-9]+)?$", re.IGNORECASE, ) return rxp.match(fen) is not None except TypeError: return False # External def get_identity(self): """(Abstract) Name and technique of the chess provider.""" pass def assign_game(self, url): """(Abstract) Detect the unique identifier of URL.""" pass def download_game(self): """(Abstract) Download the game identified earlier by assign_game().""" pass # Lichess.org class InternetGameLichess(InternetGameInterface): def reset(self): InternetGameInterface.reset(self) self.url_tld = "org" def get_identity(self): return "Lichess.org", CAT_DL def assign_game(self, url): # Retrieve the ID of the broadcast rxp = re.compile( r"^https?:\/\/(\S+\.)?lichess\.(org|dev)\/broadcast\/[a-z0-9\-]+\/([a-z0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if len(gid) == 8: self.url_type = TYPE_STUDY self.id = gid self.url_tld = m.group(2) return True # Retrieve the ID of the practice rxp = re.compile( r"^https?:\/\/(\S+\.)?lichess\.(org|dev)\/practice\/[\w\-\/]+\/([a-z0-9]+\/[a-z0-9]+)(\.pgn)?\/?([\S\/]+)?$", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if len(gid) == 17: self.url_type = TYPE_STUDY self.id = gid self.url_tld = m.group(2) return True # Retrieve the ID of the study rxp = re.compile( r"^https?:\/\/(\S+\.)?lichess\.(org|dev)\/study\/([a-z0-9]+(\/[a-z0-9]+)?)(\.pgn)?\/?([\S\/]+)?$", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if len(gid) in [8, 17]: self.url_type = TYPE_STUDY self.id = gid self.url_tld = m.group(2) return True # Retrieve the ID of the puzzle rxp = re.compile( r"^https?:\/\/(\S+\.)?lichess\.(org|dev)\/training\/([0-9]+|daily)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if (gid.isdigit() and gid != "0") or gid == "daily": self.url_type = TYPE_PUZZLE self.id = gid self.url_tld = m.group(2) return True # Retrieve the ID of the game rxp = re.compile( r"^https?:\/\/(\S+\.)?lichess\.(org|dev)\/(game\/export\/|embed\/)?([a-z0-9]+)\/?([\S\/]+)?$", re.IGNORECASE, ) # More permissive m = rxp.match(url) if m is not None: gid = m.group(4) if len(gid) == 8: self.url_type = TYPE_GAME self.id = gid self.url_tld = m.group(2) return True # Nothing found return False def query_api(self, path): response = urlopen( Request( f"https://lichess.{self.url_tld}{path}", headers={ "X-Requested-With": "XMLHttpRequest", "Accept": "application/vnd.lichess.v4+json", }, ) ) bourne = self.read_data(response) return self.json_loads(bourne) def download_game(self): # Check if None in [self.id, self.url_tld]: return None # Logic for the games if self.url_type == TYPE_GAME: # Download the finished game api = self.query_api("/import/master/%s/white" % self.id) game = self.json_field(api, "game") if "winner" in game: url = "https://lichess.{}/game/export/{}?literate=1".format( self.url_tld, self.id ) return self.download(url) else: if not self.allow_extra and game["rated"]: return None # Rebuild the PGN file game = {} game["_url"] = "https://lichess.{}{}".format( self.url_tld, self.json_field(api, "url/round") ) game["Variant"] = self.json_field(api, "game/variant/name") game["FEN"] = self.json_field(api, "game/initialFen") game["SetUp"] = "1" game["White"] = self.json_field( api, "player/name", self.json_field(api, "player/user/username", "Anonymous"), ) game["WhiteElo"] = self.json_field(api, "player/rating") game["Black"] = self.json_field( api, "opponent/name", self.json_field(api, "opponent/user/username", "Anonymous"), ) game["BlackElo"] = self.json_field(api, "opponent/rating") if self.json_field(api, "clock") != "": game["TimeControl"] = "%d+%d" % ( self.json_field(api, "clock/initial"), self.json_field(api, "clock/increment"), ) else: game["TimeControl"] = "%dd" % ( self.json_field(api, "correspondence/increment") // 86400 ) game["Result"] = "*" game["_moves"] = "" moves = self.json_field(api, "steps") for move in moves: if move["ply"] > 0: game["_moves"] += " %s" % move["san"] return self.rebuild_pgn(game) # Logic for the studies elif self.url_type == TYPE_STUDY: url = f"https://lichess.{self.url_tld}/study/{self.id}.pgn" return self.download(url, userAgent=True) # Logic for the puzzles elif self.url_type == TYPE_PUZZLE: # The API doesn't provide the history of the moves # chessgame = self.query_api('/training/%s/load' % self.id) # Fetch the puzzle url = f"https://lichess.{self.url_tld}/training/{self.id}" page = self.download(url) if page is None: return None # Extract the JSON page = page.replace("\n", "") pos1 = page.find("lichess.puzzle =") if pos1 == -1: return None pos1 = page.find('"game"', pos1 + 1) if pos1 == -1: return None c = 1 pos2 = pos1 while pos2 < len(page): pos2 += 1 if page[pos2] == "{": c += 1 if page[pos2] == "}": c -= 1 if c == 0: break if c != 0: return None # Header bourne = page[pos1 - 1 : pos2 + 1] chessgame = self.json_loads(bourne) puzzle = self.json_field(chessgame, "puzzle") if puzzle == "": return None game = {} game["_url"] = "https://lichess.{}/{}#{}".format( self.url_tld, self.json_field(puzzle, "gameId"), self.json_field(puzzle, "initialPly"), ) game["Site"] = "lichess.%s" % self.url_tld rating = self.json_field(puzzle, "rating") game["Event"] = "Puzzle %d, rated %s" % ( self.json_field(puzzle, "id"), rating, ) game["Result"] = "*" game["X_ID"] = self.json_field(puzzle, "id") game["X_TimeControl"] = self.json_field(chessgame, "game/clock") game["X_Rating"] = rating game["X_Attempts"] = self.json_field(puzzle, "attempts") game["X_Vote"] = self.json_field(puzzle, "vote") # Players players = self.json_field(chessgame, "game/players") if not isinstance(players, list): return None for p in players: if p["color"] == "white": t = "White" elif p["color"] == "black": t = "Black" else: return None pos1 = p["name"].find(" (") if pos1 == -1: game[t] = p["name"] else: game[t] = p["name"][:pos1] game[t + "Elo"] = p["name"][pos1 + 2 : -1] # Moves moves = self.json_field(chessgame, "game/treeParts") if not isinstance(moves, list): return None game["_moves"] = "" for m in moves: if m["ply"] in [0, "0"]: game["SetUp"] = "1" game["FEN"] = m["fen"] else: game["_moves"] += "%s " % m["san"] # Solution game["_moves"] += " {Solution: " puzzle = self.json_field(puzzle, "branch") while True: game["_moves"] += "%s " % self.json_field(puzzle, "san") puzzle = self.json_field(puzzle, "children") if len(puzzle) == 0: break puzzle = puzzle[0] game["_moves"] += "}" # Rebuild the PGN game return self.rebuild_pgn(game) # ChessGames.com class InternetGameChessgames(InternetGameInterface): def reset(self): InternetGameInterface.reset(self) self.computer = False def get_identity(self): return "ChessGames.com", CAT_DL def assign_game(self, url): # Verify the hostname parsed = urlparse(url) if parsed.netloc.lower() not in ["www.chessgames.com", "chessgames.com"]: return False # Read the arguments args = parse_qs(parsed.query) if "gid" in args: gid = args["gid"][0] if gid.isdigit() and gid != "0": self.id = gid self.computer = ("comp" in args) and (args["comp"][0] == "1") return True return False def download_game(self): # Check if self.id is None: return None # First try with computer analysis url = "http://www.chessgames.com/pgn/pychess.pgn?gid=" + self.id if self.computer: pgn = self.download(url + "&comp=1") if pgn in [None, ""] or "NO SUCH GAME" in pgn: self.computer = False else: return pgn # Second try without computer analysis if not self.computer: pgn = self.download(url) if pgn in [None, ""] or "NO SUCH GAME" in pgn: return None else: return pgn # FicsGames.org class InternetGameFicsgames(InternetGameInterface): def get_identity(self): return "FicsGames.org", CAT_DL def assign_game(self, url): # Verify the URL parsed = urlparse(url) if ( parsed.netloc.lower() not in ["www.ficsgames.org", "ficsgames.org"] or "show" not in parsed.path.lower() ): return False # Read the arguments args = parse_qs(parsed.query) if "ID" in args: gid = args["ID"][0] if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Check if self.id is None: return None # Download pgn = self.download( "http://ficsgames.org/cgi-bin/show.cgi?ID=%s;action=save" % self.id ) if pgn in [None, ""] or "not found in GGbID" in pgn: return None else: return pgn # ChessTempo.com class InternetGameChesstempo(InternetGameInterface): def get_identity(self): return "ChessTempo.com", CAT_WS def assign_game(self, url): # Puzzles rxp = re.compile( r"^https?:\/\/(\S+\.)?chesstempo\.com\/chess-tactics\/(\d+)", re.IGNORECASE ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if gid.isdigit() and gid != "0": self.id = gid self.url_type = TYPE_PUZZLE return True # Games rxp = re.compile( r"^https?:\/\/(\S+\.)?chesstempo\.com\/gamedb\/game\/(\d+)", re.IGNORECASE ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if gid.isdigit() and gid != "0": self.id = gid self.url_type = TYPE_GAME return True return False async def download_game(self): # Check if None in [self.id, self.url_type]: return # Games if self.url_type == TYPE_GAME: pgn = self.download( "http://chesstempo.com/requests/download_game_pgn.php?gameids=%s" % self.id, userAgent=True, ) # Else a random game is retrieved if pgn is not None and len(pgn) > 128: self.data = pgn # Puzzles elif self.url_type == TYPE_PUZZLE: # Open a websocket to retrieve the puzzle async def coro(self): result = None ws = await websockets.connect( "wss://chesstempo.com:443/ws", origin="https://chesstempo.com", extra_headers=[("User-agent", self.userAgent)], ping_interval=None, ) try: # Check the welcome message data = await ws.recv() data = self.json_loads(data) if (data["eventName"] == "connectionStarted") and ( data["data"] == "started" ): # Call the puzzle await ws.send( '{"eventName":"get-problem-session-data","data":{"problemSetId":1,"sessionSize":20}}' ) await ws.send( '{"eventName":"set-problem-difficulty","data":{"difficulty":"","problemSetId":1}}' ) await ws.send( '{"eventName":"get-tactic","data":{"problemId":%s,"vo":false}}' % self.id ) for i in range(3): data = await ws.recv() data = self.json_loads(data) if data["eventName"] == "get-tactic-result": if data["enc"]: data = "".join( map( lambda v: ( v if v < "0" or v > "9" else str((9 + int(v)) % 10) ), list(data["data"]), ) ) result = b64decode(data).decode().strip() else: result = data["data"].strip() if result == "": result = None finally: await ws.close() self.data = result await coro(self) if self.data is None: return # Rebuild the puzzle puzzle = self.json_loads(self.data) game = {} game["_url"] = "https://chesstempo.com/chess-tactics/%s" % self.id game["Event"] = "Puzzle %s" % self.json_field( puzzle, "tacticInfo/problem_id" ) game["White"] = _("White") game["Black"] = _("Black") game["Result"] = "*" game["FEN"] = self.json_field(puzzle, "tacticInfo/startPosition") game["SetUp"] = "1" game["_moves"] = "{{{}}} {}".format( self.json_field(puzzle, "tacticInfo/prevmove"), self.json_field(puzzle, "tacticInfo/moves"), ) self.data = self.rebuild_pgn(game) # Chess24.com class InternetGameChess24(InternetGameInterface): def get_identity(self): return "Chess24.com", CAT_HTML def assign_game(self, url): rxp = re.compile( r"^https?:\/\/chess24\.com\/[a-z]+\/(analysis|game|download-game)\/([a-z0-9\-_]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if len(gid) == 22: self.id = gid return True return False def download_game(self): # Download the page if self.id is None: return None url = "https://chess24.com/en/game/%s" % self.id page = self.download(url, userAgent=True) # Else HTTP 403 Forbidden if page is None: return None # Extract the JSON of the game lines = page.split("\n") for line in lines: line = line.strip() pos1 = line.find(".initGameSession({") pos2 = line.find("});", pos1) if -1 in [pos1, pos2]: continue # Read the game from JSON bourne = self.json_loads(line[pos1 + 17 : pos2 + 1]) chessgame = self.json_field(bourne, "chessGame") moves = self.json_field(chessgame, "moves") if "" in [chessgame, moves]: continue # Build the header of the PGN file game = {} game["_moves"] = "" game["_url"] = url game["Event"] = self.json_field(chessgame, "meta/Event") game["Site"] = self.json_field(chessgame, "meta/Site") game["Date"] = self.json_field(chessgame, "meta/Date") game["Round"] = self.json_field(chessgame, "meta/Round") game["White"] = self.json_field(chessgame, "meta/White/Name") game["WhiteElo"] = self.json_field(chessgame, "meta/White/Elo") game["Black"] = self.json_field(chessgame, "meta/Black/Name") game["BlackElo"] = self.json_field(chessgame, "meta/Black/Elo") game["Result"] = self.json_field(chessgame, "meta/Result") # Build the PGN board = LBoard(variant=FISCHERRANDOMCHESS) head_complete = False for move in moves: # Info from the knot kid = self.json_field(move, "knotId") if kid == "": break kmove = self.json_field(move, "move") # FEN initialization if kid == 0: kfen = self.json_field(move, "fen") if kfen == "": break try: board.applyFen(kfen) except Exception: return None game["Variant"] = CHESS960 game["SetUp"] = "1" game["FEN"] = kfen head_complete = True else: if not head_complete: return None # Execution of the move if kmove == "": break try: if self.use_an: kmove = parseAny(board, kmove) game["_moves"] += toSAN(board, kmove) + " " board.applyMove(kmove) else: game["_moves"] += kmove + " " except Exception: return None # Rebuild the PGN game return self.rebuild_pgn(game) return None # 365chess.com class InternetGame365chess(InternetGameInterface): def get_identity(self): return "365chess.com", CAT_HTML def assign_game(self, url): # Verify the URL parsed = urlparse(url) if parsed.netloc.lower() not in ["www.365chess.com", "365chess.com"]: return False ppl = parsed.path.lower() if ppl == "/game.php": key = "gid" elif ppl == "/view_game.php": key = "g" else: return False # Read the arguments args = parse_qs(parsed.query) if key in args: gid = args[key][0] if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Download if self.id is None: return None url = "https://www.365chess.com/game.php?gid=%s" % self.id page = self.download(url) if page is None: return None # Played moves game = {} pos1 = page.find("chess_game.Init({") pos1 = page.find(",pgn:'", pos1) pos2 = page.find("'", pos1 + 6) if -1 in [pos1, pos2]: return None game["_moves"] = page[pos1 + 6 : pos2] # Result result = game["_moves"].split(" ")[-1] if result in reprResult: game["Result"] = result game["_moves"] = " ".join(game["_moves"].split(" ")[0:-1]) # Header game["_url"] = url lines = page.replace(" yyyy.mm.dd game[tag] = v # Players line = self.strip_html(line).strip() m = rxp.match(line) if m is not None: game["White"] = str(m.group(1)).strip() if m.group(3) is not None: game["WhiteElo"] = str(m.group(3)).strip() game["Black"] = str(m.group(4)).strip() if m.group(6) is not None: game["BlackElo"] = str(m.group(6)).strip() # Rebuild the PGN game return self.rebuild_pgn(game) # ChessPastebin.com class InternetGameChesspastebin(InternetGameInterface): def get_identity(self): return "ChessPastebin.com", CAT_HTML def assign_game(self, url): return self.reacts_to(url, "chesspastebin.com") def download_game(self): # Download if self.id is None: return None page = self.download(self.id) if page is None: return None # Extract the game ID rxp = re.compile( r".*?\
\<\/div\>.*?", flags=re.IGNORECASE ) m = rxp.match(page.replace("\n", "")) if m is None: return None gid = m.group(1) # Definition of the parser class chesspastebinparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tag_ok = False self.pgn = None def handle_starttag(self, tag, attrs): if tag.lower() == "div": for k, v in attrs: if k.lower() == "id" and v == gid: self.tag_ok = True def handle_data(self, data): if self.pgn is None and self.tag_ok: self.pgn = data # Read the PGN parser = chesspastebinparser() parser.feed(page) pgn = parser.pgn if ( pgn is not None ): # Any game must start with '[' to be considered further as valid pgn = pgn.strip() if not pgn.startswith("["): pgn = '[Annotator "ChessPastebin.com"]\n%s' % pgn return pgn # ChessBomb.com class InternetGameChessbomb(InternetGameInterface): def get_identity(self): return "ChessBomb.com", CAT_HTML def assign_game(self, url): return self.reacts_to(url, "chessbomb.com") def download_game(self): # Download if self.id is None: return None url = self.id page = self.download(url, userAgent=True) # Else HTTP 403 Forbidden if page is None: return None # Definition of the parser class chessbombparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.last_tag = None self.json = None def handle_starttag(self, tag, attrs): self.last_tag = tag.lower() def handle_data(self, data): if self.json is None and self.last_tag == "script": pos1 = data.find("cbConfigData") if pos1 == -1: return pos1 = data.find('"', pos1) pos2 = data.find('"', pos1 + 1) if -1 not in [pos1, pos2]: try: bourne = b64decode(data[pos1 + 1 : pos2]).decode().strip() self.json = json.loads(bourne) except Exception: self.json = None return # Get the JSON parser = chessbombparser() parser.feed(page) if parser.json is None: return None # Interpret the JSON header = self.json_field(parser.json, "gameData/game") room = self.json_field(parser.json, "gameData/room") moves = self.json_field(parser.json, "gameData/moves") if "" in [header, room, moves]: return None game = {} game["_url"] = url game["Event"] = self.json_field(room, "name") game["Site"] = self.json_field(room, "officialUrl") game["Date"] = self.json_field(header, "startAt")[:10] game["Round"] = self.json_field(header, "roundSlug") game["White"] = self.json_field(header, "white/name") game["WhiteElo"] = self.json_field(header, "white/elo") game["Black"] = self.json_field(header, "black/name") game["BlackElo"] = self.json_field(header, "black/elo") game["Result"] = self.json_field(header, "result") game["_moves"] = "" for move in moves: move = self.json_field(move, "cbn") pos1 = move.find("_") if pos1 == -1: break game["_moves"] += move[pos1 + 1 :] + " " # Rebuild the PGN game return self.rebuild_pgn(game) # TheChessWorld.com class InternetGameThechessworld(InternetGameInterface): def get_identity(self): return "TheChessWorld.com", CAT_DL def assign_game(self, url): return self.reacts_to(url, "thechessworld.com") def download_game(self): # Check if self.id is None: return None # Find the links links = [] if self.id.lower().endswith(".pgn"): links.append(self.id) else: # Download the page data = self.download(self.id) if data is None: return None # Finds the games rxp = re.compile(r".*pgn_uri:.*'([^']+)'.*", re.IGNORECASE) lines = data.split("\n") for line in lines: m = rxp.match(line) if m is not None: links.append("https://www.thechessworld.com" + m.group(1)) # Collect the games return self.download_list(links) # Chess.org class InternetGameChessOrg(InternetGameInterface): def get_identity(self): return "Chess.org", CAT_WS def assign_game(self, url): rxp = re.compile( r"^https?:\/\/chess\.org\/play\/([a-f0-9\-]+)[\/\?\#]?", re.IGNORECASE ) m = rxp.match(url) if m is not None: id = str(m.group(1)) if len(id) == 36: self.id = id return True return False async def download_game(self): # Check if self.id is None: return # Fetch the page to retrieve the encrypted user name url = "https://chess.org/play/%s" % self.id page = self.download(url) if page is None: return lines = page.split("\n") name = "" for line in lines: pos1 = line.find("encryptedUsername") if pos1 != -1: pos1 = line.find("'", pos1) pos2 = line.find("'", pos1 + 1) if pos2 > pos1: name = line[pos1 + 1 : pos2] break if name == "": return # Random elements to get a unique URL rndI = randint(1, 1000) rndS = "".join(choice(string.ascii_lowercase) for i in range(8)) # Open a websocket to retrieve the chess data async def coro(self): url = "wss://chess.org:443/play-sockjs/%d/%s/websocket" % (rndI, rndS) log.debug("Websocket connecting to %s" % url) ws = await websockets.connect( url, origin="https://chess.org:443", ping_interval=None ) try: # Server: Hello data = await ws.recv() if data == "o": # Open # Client: I am XXX, please open the game YYY await ws.send(f'["{name} {self.id}"]') data = await ws.recv() # Server: some data if data[:1] == "a": data = data[3:-2] if data not in [None, ""]: self.data = data finally: await ws.close() await coro(self) if self.data is None: return # Parses the game chessgame = self.json_loads(self.data.replace('\\"', '"')) game = {} game["_url"] = url board = LBoard(variant=FISCHERRANDOMCHESS) # Player info if self.json_field(chessgame, "creatorColor") == "1": # White=1, Black=0 creator = "White" opponent = "Black" else: creator = "Black" opponent = "White" game[creator] = self.json_field(chessgame, "creatorId") elo = self.json_field(chessgame, "creatorPoint") if elo not in ["", "0", 0]: game[creator + "Elo"] = elo game[opponent] = self.json_field(chessgame, "opponentId") elo = self.json_field(chessgame, "opponentPoint") if elo not in ["", "0", 0]: game[opponent + "Elo"] = elo # Game info startPos = self.json_field(chessgame, "startPos") if startPos not in ["", "startpos"]: game["SetUp"] = "1" game["FEN"] = startPos game["Variant"] = CHESS960 try: board.applyFen(startPos) except Exception: self.data = None return else: board.applyFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w AHah - 0 1") time = self.json_field(chessgame, "timeLimitSecs") inc = self.json_field(chessgame, "timeBonusSecs") if "" not in [time, inc]: game["TimeControl"] = f"{time}+{inc}" resultTable = [ (0, "*", "Game started"), # ALIVE (1, "1-0", "White checkmated"), # WHITE_MATE (2, "0-1", "Black checkmated"), # BLACK_MATE (3, "1/2-1/2", "White stalemated"), # WHITE_STALEMATE (4, "1/2-1/2", "Black stalemated"), # BLACK_STALEMATE (5, "1/2-1/2", "Insufficient material"), # DRAW_NO_MATE (6, "1/2-1/2", "50-move rule"), # DRAW_50 (7, "1/2-1/2", "Threefold repetition"), # DRAW_REP (8, "1/2-1/2", "Mutual agreement"), # DRAW_AGREE (9, "0-1", "White resigned"), # WHITE_RESIGN (10, "1-0", "Black resigned"), # BLACK_RESIGN (11, "0-1", "White canceled"), # WHITE_CANCEL (12, "1-0", "Black canceled"), # BLACK_CANCEL (13, "1-0", "White out of time"), # WHITE_NO_TIME (14, "0-1", "Black out of time"), # BLACK_NO_TIME (15, "*", "Not started"), ] # NOT_STARTED state = self.json_field(chessgame, "state") result = "*" reason = "Unknown reason %d" % state for rtID, rtScore, rtMsg in resultTable: if rtID == state: result = rtScore reason = rtMsg break game["Result"] = result game["_reason"] = reason # Moves game["_moves"] = "" moves = self.json_field(chessgame, "lans") if moves == "": self.data = None return moves = moves.split(" ") for move in moves: try: if self.use_an: move = parseAny(board, move) game["_moves"] += toSAN(board, move) + " " board.applyMove(move) else: game["_moves"] += move + " " except Exception: self.data = None return # Rebuild the PGN game self.data = self.rebuild_pgn(game) # Europe-Echecs.com class InternetGameEuropeechecs(InternetGameInterface): def get_identity(self): return "Europe-Echecs.com", CAT_DL def assign_game(self, url): return self.reacts_to(url, "europe-echecs.com") def download_game(self): # Check if self.id is None: return None # Find the links links = [] if self.id.lower().endswith(".pgn"): links.append(self.id) else: # Download the page page = self.download(self.id) if page is None: return None # Find the chess widgets rxp = re.compile( r".*class=\"cbwidget\"\s+id=\"([0-9a-f]+)_container\".*", re.IGNORECASE ) lines = page.split("\n") for line in lines: m = rxp.match(line) if m is not None: links.append( "https://www.europe-echecs.com/embed/doc_%s.pgn" % m.group(1) ) # Collect the games return self.download_list(links) # GameKnot.com class InternetGameGameknot(InternetGameInterface): def get_identity(self): return "GameKnot.com", CAT_HTML def assign_game(self, url): # Verify the hostname parsed = urlparse(url.lower()) if parsed.netloc not in ["www.gameknot.com", "gameknot.com"]: return False # Verify the page if parsed.path == "/analyze-board.pl": ttype = TYPE_GAME tkey = "bd" elif parsed.path == "/chess-puzzle.pl": ttype = TYPE_PUZZLE tkey = "pz" else: return False # Read the arguments args = parse_qs(parsed.query) if tkey in args: gid = args[tkey][0] if gid.isdigit() and gid != "0": self.id = gid self.url_type = ttype return True return False def download_game(self): # Check if self.url_type not in [TYPE_GAME, TYPE_PUZZLE] or self.id is None: return None # Download if self.url_type == TYPE_GAME: url = "https://gameknot.com/analyze-board.pl?bd=%s" % self.id elif self.url_type == TYPE_PUZZLE: url = "https://gameknot.com/chess-puzzle.pl?pz=%s" % self.id page = self.download(url, userAgent=True) if page is None: return None # Library def extract_variables(page, structure): game = {} for var, type, tag in structure: game[tag] = "" lines = page.split(";") for line in lines: for var, type, tag in structure: pos1 = line.find(var) if pos1 == -1: continue if type == "s": pos1 = line.find("'", pos1 + 1) pos2 = line.find("'", pos1 + 1) if pos2 > pos1: game[tag] = line[pos1 + 1 : pos2] elif type == "i": pos1 = line.find("=", pos1 + 1) if pos1 != -1: txt = line[pos1 + 1 :].strip() if txt not in ["", "0"]: game[tag] = txt else: assert False return game # Logic for the puzzles if self.url_type == TYPE_PUZZLE: structure = [ ("puzzle_id", "i", "_id"), ("puzzle_fen", "s", "FEN"), ("load_solution(", "s", "_solution"), ] game = extract_variables(page, structure) game["_url"] = "https://gameknot.com/chess-puzzle.pl?pz=%s" % game["_id"] game["White"] = _("White") game["Black"] = _("Black") game["Result"] = "*" if game["FEN"] != "": game["SetUp"] = "1" if game["_solution"] != "": list = game["_solution"].split("|") game["_moves"] = " {Solution:" nextid = "0" for item in list: item = item.split(",") # 0 = identifier of the move # 1 = player # 2 = identifier of the previous move # 3 = count of following moves # 4 = algebraic notation of the move # 5 = UCI notation of the move # 6 = ? # 7 = identifier of the next move # > = additional moves for the current line curid = item[0] if curid != nextid: continue if len(item) == 4: break nextid = item[7] if self.use_an: move = item[4] else: move = item[5] game["_moves"] += " %s" % move game["_moves"] += "}" # Logic for the games elif self.url_type == TYPE_GAME: # Header structure = [ ("anbd_movelist", "s", "_moves"), ("anbd_result", "i", "Result"), ("anbd_player_w", "s", "White"), ("anbd_player_b", "s", "Black"), ("anbd_rating_w", "i", "WhiteElo"), ("anbd_rating_b", "i", "BlackElo"), ("anbd_title", "s", "Event"), ("anbd_timestamp", "s", "Date"), ("export_web_input_result_text", "s", "_reason"), ] game = extract_variables(page, structure) if game["Result"] == "1": game["Result"] = "1-0" elif game["Result"] == "2": game["Result"] = "1/2-1/2" elif game["Result"] == "3": game["Result"] = "0-1" else: game["Result"] = "*" # Body board = LBoard() board.applyFen(FEN_START) moves = game["_moves"].split("-") game["_moves"] = "" for move in moves: if move == "": break try: if self.use_an: kmove = parseAny(board, move) game["_moves"] += toSAN(board, kmove) + " " board.applyMove(kmove) else: game["_moves"] += move + " " except Exception: return None # Rebuild the PGN game return unquote(self.rebuild_pgn(game)) # Chess.com class InternetGameChessCom(InternetGameInterface): def get_identity(self): return "Chess.com", CAT_MISC def assign_game(self, url): # Positions parsed = urlparse(url) if parsed.netloc.lower() in ["www.chess.com", "chess.com"]: args = parse_qs(parsed.query) if "fen" in args: fen = args["fen"][0] if self.is_fen(fen): self.url_type = TYPE_FEN self.id = fen return True # Puzzles rxp = re.compile( r"^https?:\/\/(\S+\.)?chess\.com\/([a-z\/]+)?(puzzles)\/problem\/([0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: self.url_type = m.group(3).lower() self.id = m.group(4) return True # Games url = url.replace("/live#g=", "/live/game/").replace( "/daily#g=", "/daily/game/" ) rxp = re.compile( r"^https?:\/\/(\S+\.)?chess\.com\/([a-z\/]+)?(live|daily)\/([a-z\/]+)?([0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: self.url_type = m.group(3).lower() self.id = m.group(5) return True return False def decode_move(self, move): # Mapping map = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?{~}(^)[_]@#$,./&-*++=" pieces = "qnrbkp" # Analyze the move sFrom = sTo = sPromo = sDrop = "" posFrom = map.index(move[:1]) posTo = map.index(move[1:]) if posTo > 63: sPromo = pieces[(posTo - 64) // 3] posTo = posFrom + (-8 if posFrom < 16 else 8) + (posTo - 1) % 3 - 1 if posFrom > 75: sDrop = pieces[posFrom - 79].upper() + "@" else: sFrom = map[posFrom % 8] + str(posFrom // 8 + 1) sTo = map[posTo % 8] + str(posTo // 8 + 1) return f"{sDrop}{sFrom}{sTo}{sPromo}" def download_game(self): # Check if None in [self.id, self.url_type]: return None # Positions if self.url_type == TYPE_FEN: return '[Site "chess.com"]\n[White "{}"]\n[Black "{}"]\n[SetUp "1"]\n[FEN "{}"]\n\n*'.format( _("White"), _("Black"), self.id ) # Puzzles elif self.url_type == "puzzles": url = "https://www.chess.com/puzzles/problem/%s" % self.id page = self.download(url, userAgent=True) # Else 403 Forbidden if page is None: return None # Definition of the parser class chesscomparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.pgn = None def handle_starttag(self, tag, attrs): if tag.lower() == "div": for k, v in attrs: if k.lower() == "data-puzzle": self.pgn = v.replace(""e;", '"').replace("\\/", "/") # Parse the page parser = chesscomparser() parser.feed(page) if parser.pgn is None: return None # Load the JSON puzzle = self.json_loads(parser.pgn) if puzzle in [None, ""]: return None # Get the game directly if available pgn = self.json_field("puzzle", "pgn") if pgn != "": pgn = pgn.replace("\\n", "\n") pgn = pgn.replace('\\"', '"') pgn = pgn.replace(" ", " ") pgn = pgn.replace(". ...", "...") pgn = pgn.replace("\\t", " ") return pgn # Rebuild the puzzle game = {} game["_url"] = url refid = self.json_field("puzzle", "gameLiveId") if refid not in [None, 0, ""]: game["_url"] = "https://www.chess.com/live/game/%d" % refid else: refid = self.json_field("puzzle", "gameId") if refid not in [None, 0, ""]: game["_url"] = "https://www.chess.com/daily/game/%d" % refid rating = self.json_field(puzzle, "rating") game["Event"] = "Puzzle {}, rated {}".format( str(self.json_field(puzzle, "id")), rating ) game["White"] = _("White") game["Black"] = _("Black") game["Result"] = "*" game["TimeControl"] = "%d+0" % self.json_field(puzzle, "averageSeconds") game["FEN"] = self.json_field(puzzle, "initialFen") game["SetUp"] = "1" game["X_ID"] = self.json_field(puzzle, "id") game["X_Rating"] = rating game["X_Attempts"] = self.json_field(puzzle, "attemptCount") game["X_PassRate"] = self.json_field(puzzle, "passRate") buffer = self.json_field(puzzle, "internalNote").strip() if buffer == "": buffer = "{%s}" % _("The first move is not provided") game["_moves"] = buffer # Games else: if self.url_type == "live": # API since October 2020 url = "https://www.chess.com/callback/live/game/%s" % self.id bourne = self.send_xhr(url, {}, userAgent=True) if bourne is None: return None else: # Fetch the page url = f"https://www.chess.com/{self.url_type}/game/{self.id}" page = self.download(url, userAgent=True) if page is None: return None # Extract the JSON bourne = "" pos1 = page.find("window.chesscom.dailyGame") if pos1 != -1: pos1 = page.find("(", pos1) pos2 = page.find(")", pos1 + 1) if pos2 > pos1: bourne = ( page[pos1 + 2 : pos2 - 1] .replace("\\\\\\/", "/") .replace('\\"', '"') ) if bourne == "": return None # Read the JSON chessgame = self.json_loads(bourne) if ( not self.allow_extra and self.json_field(chessgame, "game/isRated") and not self.json_field(chessgame, "game/isFinished") ): return None chessgame = self.json_field(chessgame, "game") if chessgame == "": return None # Header headers = self.json_field(chessgame, "pgnHeaders") if headers == "": game = {} else: game = headers if "Variant" in game and game["Variant"] == "Chess960": game["Variant"] = CHESS960 game["_url"] = url.replace("/callback/", "/") # Body moves = self.json_field(chessgame, "moveList") if moves == "": return None game["_moves"] = "" if "Variant" in game and game["Variant"] == "Crazyhouse": board = LBoard(variant=CRAZYHOUSECHESS) else: board = LBoard(variant=FISCHERRANDOMCHESS) if "FEN" in game: board.applyFen(game["FEN"]) else: board.applyFen(FEN_START) while len(moves) > 0: move = self.decode_move(moves[:2]) moves = moves[2:] try: if self.use_an: kmove = parseAny(board, move) game["_moves"] += toSAN(board, kmove) + " " board.applyMove(kmove) else: game["_moves"] += move + " " except Exception: return None # Final PGN return self.rebuild_pgn(game) # Schach-Spielen.eu class InternetGameSchachspielen(InternetGameInterface): def get_identity(self): return "Schach-Spielen.eu", CAT_HTML def assign_game(self, url): rxp = re.compile( r"^https?:\/\/(www\.)?schach-spielen\.eu\/(game|analyse)\/([a-z0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if len(gid) == 8: self.id = gid return True return False def download_game(self): # Download if self.id is None: return None page = self.download("https://www.schach-spielen.eu/analyse/%s" % self.id) if page is None: return None # Definition of the parser class schachspielenparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tag_ok = False self.pgn = None def handle_starttag(self, tag, attrs): if tag.lower() == "textarea": for k, v in attrs: if k.lower() == "id" and v == "pgnText": self.tag_ok = True def handle_data(self, data): if self.pgn is None and self.tag_ok: self.pgn = data # Read the PGN parser = schachspielenparser() parser.feed(page) pgn = parser.pgn if pgn is not None: pgn = pgn.replace('[Variant "chess960"]', '[Variant "%s"]' % CHESS960) return pgn # RedHotPawn.com class InternetGameRedhotpawn(InternetGameInterface): def get_identity(self): return "RedHotPawn.com", CAT_HTML def assign_game(self, url): # Verify the URL parsed = urlparse(url) if parsed.netloc.lower() not in ["www.redhotpawn.com", "redhotpawn.com"]: return False # Verify the path ppl = parsed.path.lower() if "chess-game-" in ppl: ttype = TYPE_GAME key = "gameid" elif "chess-puzzle-" in ppl: ttype = TYPE_PUZZLE if "chess-puzzle-serve" in url.lower(): self.url_type = ttype self.id = url return True else: key = "puzzleid" else: return False # Read the arguments args = parse_qs(parsed.query) if key in args: gid = args[key][0] if gid.isdigit() and gid != "0": self.url_type = ttype self.id = gid return True return False def download_game(self): # Download if self.id is None: return None if self.url_type == TYPE_GAME: url = ( "https://www.redhotpawn.com/pagelet/view/game-pgn.php?gameid=%s" % self.id ) elif self.url_type == TYPE_PUZZLE: if "://" in self.id: url = self.id event = _("Puzzle") else: url = ( "https://www.redhotpawn.com/chess-puzzles/chess-puzzle-solve.php?puzzleid=%s" % self.id ) event = _("Puzzle %s") % self.id else: return None page = self.download(url) if page is None: return None # Logic for the games if self.url_type == TYPE_GAME: # Parser class redhotpawnparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tag_ok = False self.pgn = None def handle_starttag(self, tag, attrs): if tag.lower() == "textarea": self.tag_ok = True def handle_data(self, data): if self.pgn is None and self.tag_ok: self.pgn = data # Extractor parser = redhotpawnparser() parser.feed(page) return parser.pgn.strip() # Logic for the puzzles elif self.url_type == TYPE_PUZZLE: pos1 = page.find("var g_startFenStr") if pos1 != -1: pos1 = page.find("'", pos1) pos2 = page.find("'", pos1 + 1) if pos2 > pos1: game = {} game["_url"] = url game["FEN"] = page[pos1 + 1 : pos2] game["SetUp"] = "1" game["Event"] = event game["White"] = _("White") game["Black"] = _("Black") pos1 = page.find("

") pos2 = page.find("

", pos1) if pos1 != -1 and pos2 > pos1: game["_moves"] = "{%s}" % page[pos1 + 4 : pos2] return self.rebuild_pgn(game) return None # Chess-Samara.ru class InternetGameChesssamara(InternetGameInterface): def get_identity(self): return "Chess-Samara.ru", CAT_DL def assign_game(self, url): rxp = re.compile( r"^https?:\/\/(\S+\.)?chess-samara\.ru\/(\d+)\-", re.IGNORECASE ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Check if self.id is None: return None # Download pgn = self.download("https://chess-samara.ru/view/pgn.html?gameid=%s" % self.id) if pgn is None or len(pgn) == 0: return None else: return pgn # 2700chess.com class InternetGame2700chess(InternetGameInterface): def get_identity(self): return "2700chess.com", CAT_HTML def assign_game(self, url): # Verify the hostname parsed = urlparse(url) if parsed.netloc.lower() not in ["www.2700chess.com", "2700chess.com"]: return False # Refactor the direct link if parsed.path.lower() == "/games/download": args = parse_qs(parsed.query) if "slug" in args: self.id = "https://2700chess.com/games/%s" % args["slug"][0] return True # Verify the path if parsed.path.startswith("/games/"): self.id = url return True else: return False def download_game(self): # Download if self.id is None: return None page = self.download(self.id) if page is None: return None # Extract the PGN lines = page.split(";") for line in lines: if "analysis.setPgn(" in line: pos1 = line.find('"') if pos1 != -1: pos2 = pos1 while pos2 < len(line): pos2 += 1 if line[pos2] == '"' and line[pos2 - 1 : pos2 + 1] != '\\"': pgn = line[pos1 + 1 : pos2] return ( pgn.replace('\\"', '"') .replace("\\/", "/") .replace("\\n", "\n") .strip() ) return None # Iccf.com class InternetGameIccf(InternetGameInterface): def get_identity(self): return "Iccf.com", CAT_DL def assign_game(self, url): # Verify the hostname parsed = urlparse(url) if parsed.netloc.lower() not in ["www.iccf.com", "iccf.com"]: return False # Verify the path ppl = parsed.path.lower() if "/game" in ppl: ttyp = TYPE_GAME elif "/event" in ppl: ttyp = TYPE_EVENT else: return False # Read the arguments args = parse_qs(parsed.query) if "id" in args: gid = args["id"][0] if gid.isdigit() and gid != "0": self.url_type = ttyp self.id = gid return True return False def download_game(self): # Check if self.url_type not in [TYPE_GAME, TYPE_EVENT] or self.id is None: return None # Download if self.url_type == TYPE_GAME: url = "https://www.iccf.com/GetPGN.aspx?id=%s" elif self.url_type == TYPE_EVENT: url = "https://www.iccf.com/GetEventPGN.aspx?id=%s" pgn = self.download(url % self.id) if pgn in [None, ""] or "does not exist." in pgn or "Invalid event" in pgn: return None else: return pgn # SchachArena.de class InternetGameSchacharena(InternetGameInterface): def get_identity(self): return "SchachArena.de", CAT_HTML def assign_game(self, url): # Verify the URL parsed = urlparse(url) if ( parsed.netloc.lower() not in ["www.schacharena.de", "schacharena.de"] or "verlauf" not in parsed.path.lower() ): return False # Read the arguments args = parse_qs(parsed.query) if "brett" in args: gid = args["brett"][0] if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Check if self.id is None: return None # Download page page = self.download( "https://www.schacharena.de/new/verlauf.php?brett=%s" % self.id ) if page is None: return None # Init rxp_player = re.compile( r".*spielerstatistik.*name=(\w+).*\[([0-9]+)\].*", re.IGNORECASE ) rxp_move = re.compile(r".*(1\-0|0\-1|1\/2\-1\/2)\s([^\<]+)<.*", re.IGNORECASE ) player_count = 0 board = LBoard() board.applyFen(FEN_START) # Parse game = {} game["Result"] = "*" reason = "" game["_moves"] = "" game["_url"] = ( "https://www.schacharena.de/new/verlauf_to_pgn_n.php?brett=%s" % self.id ) # If one want to get the full PGN lines = page.split("\n") for line in lines: # Player m = rxp_player.match(line) if m is not None: player_count += 1 if player_count == 1: tag = "White" elif player_count == 2: tag = "Black" else: return None game[tag] = m.group(1) game[tag + "Elo"] = m.group(2) continue # Move m = rxp_move.match(line) if m is not None: move = m.group(1) move = ( "_abcdefgh"[int(move[0])] + move[1] + "_abcdefgh"[int(move[2])] + move[3] ) if self.use_an: kmove = parseAny(board, move) move = toSAN(board, kmove) board.applyMove(kmove) game["_moves"] += "%s " % move continue # Result m = rxp_result.match(line) if m is not None: game["Result"] = m.group(1) reason = unescape(m.group(2)) continue # Final PGN if reason != "": game["_moves"] += " {%s}" % reason return self.rebuild_pgn(game) # ChessPuzzle.net class InternetGameChesspuzzle(InternetGameInterface): def get_identity(self): return "ChessPuzzle.net", CAT_HTML def assign_game(self, url): rxp = re.compile( r"^https?:\/\/(\S+\.)?chesspuzzle\.net\/(Puzzle|Solution)\/([0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = str(m.group(3)) if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Check if self.id is None: return None # Download the puzzle page = self.download( "https://chesspuzzle.net/Solution/%s" % self.id, userAgent=True ) # Else 403 Forbidden if page is None: return None # Definition of the parser class chesspuzzleparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.last_tag = None self.pgn = None def handle_starttag(self, tag, attrs): self.last_tag = tag.lower() def handle_data(self, data): if self.pgn is None and self.last_tag == "script": lines = data.split("\n") for line in lines: pos1 = line.find("pgn_text") if pos1 != -1: pos1 = line.find("'", pos1 + 1) pos2 = line.find("'", pos1 + 1) if pos1 != -1 and pos2 > pos1: self.pgn = ( line[pos1 + 1 : pos2] .replace("] ", "]\n\n") .replace("] ", "]\n") .strip() ) break # Get the puzzle parser = chesspuzzleparser() parser.feed(page) return parser.pgn # ChessKing.com class InternetGameChessking(InternetGameInterface): def get_identity(self): return "ChessKing.com", CAT_DL def assign_game(self, url): rxp = re.compile( r"^https?:\/\/(\S+\.)?chessking\.com\/games\/(ff\/)?([0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = str(m.group(3)) if gid.isdigit() and gid != "0" and len(gid) <= 9: if m.group(2) == "ff/": self.url_type = "f" else: self.url_type = "g" self.id = gid return True return False def download_game(self): # Check if None in [self.url_type, self.id]: return None # Download id = self.id while len(id) < 9: id = "0%s" % id url = "https://c1.chessking.com/pgn/{}/{}/{}/{}{}.pgn".format( self.url_type, id[:3], id[3:6], self.url_type, id ) return self.download(url) # IdeaChess.com class InternetGameIdeachess(InternetGameInterface): def get_identity(self): return "IdeaChess.com", CAT_API def assign_game(self, url): # Game ID rxp = re.compile( r"^https?:\/\/(\S+\.)?ideachess\.com\/.*\/.*\/([0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if gid.isdigit() and gid != "0": # Game type classification = [ ("/chess_tactics_puzzles/checkmate_n/", "m"), ("/echecs_tactiques/mat_n/", "m"), ("/scacchi_tattica/scacco_matto_n/", "m"), ("/chess_tactics_puzzles/tactics_n/", "t"), ("/echecs_tactiques/tactiques_n/", "t"), ("/scacchi_tattica/tattica_n/", "t"), ] for path, ttyp in classification: if path in url.lower(): self.url_type = ttyp self.id = gid return True return False def download_game(self): # Check if self.url_type is None or self.id is None: return None # Fetch the puzzle api = "http://www.ideachess.com/com/ajax2" data = { "message": '{{"action":100,"data":{{"problemNumber":{},"kind":"{}"}}}}'.format( self.id, self.url_type ) } bourne = self.send_xhr(api, data, userAgent=True) chessgame = self.json_loads(bourne) if self.json_field(chessgame, "action") != 200: return None # Build the PGN game = {} if self.url_type == "m": game["_url"] = ( "http://www.ideachess.com/chess_tactics_puzzles/checkmate_n/%s" % self.id ) elif self.url_type == "t": game["_url"] = ( "http://www.ideachess.com/chess_tactics_puzzles/tactics_n/%s" % self.id ) else: assert False game["FEN"] = b64decode(self.json_field(chessgame, "data/FEN")).decode().strip() game["SetUp"] = "1" game["_moves"] = self.json_field(chessgame, "data/PGN") v = self.json_field(chessgame, "data/requiredMoves") if v > 0: game["Site"] = _("%d moves to find") % v list = self.json_field(chessgame, "data/extraInfo").split("|") if len(list) == 4: game["Event"] = list[0][list[0].find(" ") + 1 :].strip() game["Date"] = list[1].strip() l2 = list[2].split(" - ") if len(l2) == 2: game["White"] = l2[0].strip() game["Black"] = l2[1].strip() game["Result"] = list[3].strip() else: game["Result"] = "*" return self.rebuild_pgn(game) # Chess-DB.com class InternetGameChessdb(InternetGameInterface): def get_identity(self): return "Chess-DB.com", CAT_HTML def is_enabled(self): return False # Server down def assign_game(self, url): # Verify the URL parsed = urlparse(url) if ( parsed.netloc.lower() not in ["www.chess-db.com", "chess-db.com"] or "game.jsp" not in parsed.path.lower() ): return False # Read the arguments args = parse_qs(parsed.query) if "id" in args: gid = args["id"][0] rxp = re.compile(r"^[0-9\.]+$", re.IGNORECASE) if rxp.match(gid) is not None: self.id = gid return True return False def download_game(self): # Download if self.id is None: return None page = self.download("https://chess-db.com/public/game.jsp?id=%s" % self.id) if page is None: return None # Definition of the parser class chessdbparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tag_ok = False self.pgn = None self.pgn_tmp = None def handle_starttag(self, tag, attrs): if tag.lower() == "input": for k, v in attrs: k = k.lower() if k == "name" and v == "pgn": self.tag_ok = True if k == "value" and v.count("[") == v.count("]"): self.pgn_tmp = v def handle_data(self, data): if self.pgn is None and self.tag_ok: self.pgn = self.pgn_tmp # Read the PGN parser = chessdbparser() parser.feed(page) return parser.pgn # ChessPro.ru class InternetGameChesspro(InternetGameInterface): def get_identity(self): return "ChessPro.ru", CAT_HTML def assign_game(self, url): return self.reacts_to(url, "chesspro.ru") def download_game(self): # Check if self.id is None: return None # Download the page page = self.download(self.id) if page is None: return None # Find the chess widget rxp = re.compile( r'.*OpenGame\(\s*"g[0-9]+\"\s*,"(.*)"\s*\)\s*;.*', re.IGNORECASE ) lines = page.split("\n") for line in lines: m = rxp.match(line) if m is not None: return '[Annotator "ChessPro.ru"]\n%s' % m.group(1) return None # Ficgs.com class InternetGameFicgs(InternetGameInterface): def get_identity(self): return "Ficgs.com", CAT_DL def assign_game(self, url): rxp = re.compile( r"^https?:\/\/(\S+\.)?ficgs\.com\/game_(\d+).html", re.IGNORECASE ) m = rxp.match(url) if m is not None: gid = str(m.group(2)) if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): # Check if self.id is None: return None # Download return self.download("http://www.ficgs.com/game_%s.pgn" % self.id) # Chessbase class InternetGameChessbase(InternetGameInterface): def get_identity(self): return "ChessBase.com", CAT_HTML def assign_game(self, url): return self.reacts_to(url, "*") # Any website can embed a widget from Chessbase def download_game(self): # Download if self.id is None: return None page = self.download(self.id) if page is None: return None # Definition of the parser class chessbaseparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tag_ok = False self.links = [] self.pgn = None def handle_starttag(self, tag, attrs): # Verify the parent tag self.tag_ok = False if tag.lower() in ["p", "div"]: for k, v in attrs: if k.lower() == "class" and v == "cbreplay": self.tag_ok = True # Content by link if self.tag_ok: for k, v in attrs: if k.lower() == "data-url": self.links.append(v) def handle_data(self, data): # Content by data if self.tag_ok and self.pgn is None: data = data.strip() if len(data) > 0: # Empty content if data-url used self.pgn = data # Parse the page parser = chessbaseparser() parser.feed(page) if parser.pgn is not None: return parser.pgn else: parser.links = self.expand_links(parser.links, self.id) return self.download_list(parser.links) # PlayOK.com class InternetGamePlayok(InternetGameInterface): def get_identity(self): return "PlayOK.com", CAT_DL def assign_game(self, url): # Verify the hostname parsed = urlparse(url) if parsed.netloc.lower() not in ["www.playok.com", "playok.com"]: return False # Read the arguments args = parse_qs(parsed.query) if "g" in args: gid = args["g"][0] if gid[:2] == "ch": gid = gid[2:].replace(".txt", "") if gid.isdigit() and gid != "0": self.id = gid return True return False def download_game(self): if self.id is not None: pgn = self.download("https://www.playok.com/p/?g=ch%s.txt" % self.id) if len(pgn) > 16: return pgn return None # Pychess.org class InternetGamePychess(InternetGameInterface): def get_identity(self): return "Pychess.org", CAT_WS def assign_game(self, url): # Retrieve the ID of the game rxp = re.compile( r"https?:\/\/(www\.)?pychess(-variants\.herokuapp\.com|\.org)\/([a-z0-9]+)[\/\?\#]?", re.IGNORECASE, ) m = rxp.match(url) if m is not None: gid = m.group(3) if len(gid) == 8: self.id = gid return True # Nothing found return False async def download_game(self): # Check if self.id is None: return # Open a websocket to retrieve the game async def coro(self): result = None ws = await websockets.connect( "wss://www.pychess.org/wsr", origin="https://www.pychess.org", ping_interval=None, ) try: await ws.send('{"type":"board","gameId":"%s"}' % self.id) for i in range(5): data = await ws.recv() data = self.json_loads(data) if data["type"] == "board" and data["gameId"] == self.id: result = data["pgn"] if data["pgn"] != "" else None break finally: await ws.close() self.data = result await coro(self) # Generic class InternetGameGeneric(InternetGameInterface): def get_identity(self): return "Generic", CAT_MISC def assign_game(self, url): # Any page is valid self.id = url return True def download_game(self): # Check if self.id is None: return None # Download req = Request(self.id, headers={"User-Agent": self.userAgent}) response = urlopen(req) mime = response.info().get_content_type().lower() data = self.read_data(response) if data is None: return None # Chess file if (mime in ["application/x-chess-pgn", "application/pgn"]) or ( self.allow_octet_stream and mime == "application/octet-stream" ): return data # Web-page if mime == "text/html": # Definition of the parser class linksParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.links = [] def handle_starttag(self, tag, attrs): if tag.lower() == "a": for k, v in attrs: if k.lower() == "href": v = v.strip() u = urlparse(v) if u.path.lower().endswith(".pgn"): self.links.append(v) # Read the links parser = linksParser() parser.feed(data) parser.links = self.expand_links(parser.links, self.id) return self.download_list(parser.links) return None # Interface chess_providers = [ InternetGameLichess(), InternetGameChessgames(), InternetGameFicsgames(), InternetGameChesstempo(), InternetGameChess24(), InternetGame365chess(), InternetGameChesspastebin(), InternetGameChessbomb(), InternetGameThechessworld(), InternetGameChessOrg(), InternetGameEuropeechecs(), InternetGameGameknot(), InternetGameChessCom(), InternetGameSchachspielen(), InternetGameRedhotpawn(), InternetGameChesssamara(), InternetGame2700chess(), InternetGameIccf(), InternetGameSchacharena(), InternetGameChesspuzzle(), InternetGameChessking(), InternetGameIdeachess(), InternetGameChessdb(), InternetGameChesspro(), InternetGameFicgs(), InternetGameChessbase(), InternetGamePlayok(), InternetGamePychess(), # TODO ChessDuo.com InternetGameGeneric(), ] # Get the list of chess providers def get_internet_game_providers(): list = [cp.get_description() for cp in chess_providers if cp.is_enabled()] list.sort() return list # Retrieve a game from a URL async def get_internet_game_as_pgn(url): # Recognize the most popular identifiers if url in [None, ""]: return None if re.compile(r"^[a-z0-9-]{8}$", re.IGNORECASE).match(url) is not None: url = "https://lichess.org/%s" % url elif url.isdigit(): url = "https://www.chess.com/live/game/%s" % url # Check the format p = urlparse(url.strip()) if "" in [p.scheme, p.netloc]: return None log.debug("URL to retrieve: %s" % url) # Call the chess providers for prov in chess_providers: if not prov.is_enabled(): continue prov.reset() if prov.assign_game(url): # Download log.debug("Responding chess provider: %s" % prov.get_description()) try: if prov.is_async(): await prov.download_game() pgn = prov.data else: pgn = prov.download_game() pgn = prov.sanitize(pgn) except Exception as e: pgn = None log.debug(str(e)) # Check if pgn is None: log.debug("Download failed") else: log.debug("Successful download") return pgn return None async def get_internet_game(url): if url in [None, ""]: return False else: data = await get_internet_game_as_pgn(url.strip()) return newGameDialog.loadPgnAndRun(data) # print(get_internet_game_as_pgn('')) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Savers/txt.py0000644000175100001770000000211314614030313017450 0ustar00runnerdockerfrom pychess.System import conf from pychess.Utils.const import FAN_PIECES, BLACK, WHITE __label__ = _("Text Diagram") __ending__ = "txt" __append__ = True def save(file, model, position=None, flip=False): """Export the current position into a .txt file using unicode chars""" data = model.boards[position].data[:] show_cords = conf.get("showCords") cords_side = "12345678" if flip else "87654321" cords_bottom = "hgfedcba" if flip else "abcdefgh" board = "" for j, row in enumerate(data if flip else reversed(data)): for i in range(8): piece = row.get(i) if piece is not None: if piece.color == BLACK: piece_fan = FAN_PIECES[BLACK][piece.piece] else: piece_fan = FAN_PIECES[WHITE][piece.piece] board += piece_fan else: board += "." if show_cords: board += cords_side[j] board += "\n" if show_cords: board += cords_bottom + "\n" print(board, file=file) file.close() ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.889477 pychess-1.0.5/lib/pychess/System/0000755000175100001770000000000014614030425016307 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/Log.py0000755000175100001770000001023714614030313017404 0ustar00runnerdockerimport time import logging from .prefix import addUserDataPrefix newName = time.strftime("%Y-%m-%d_%H-%M-%S") + ".log" logformat = "%(asctime)s.%(msecs)03d %(task)s %(levelname)s: %(message)s" # delay=True argument prevents creating empty .log files file_handler = logging.FileHandler( addUserDataPrefix(newName), delay=True, encoding="utf-8" ) class TaskFormatter(logging.Formatter): def __init__(self, fmt=None, datefmt=None): logging.Formatter.__init__(self, fmt, datefmt) def format(self, record): if not hasattr(record, "task"): record.task = "unknown" record.message = record.getMessage() record.asctime = self.formatTime(record, self.datefmt) s = self._fmt % record.__dict__ if record.exc_info: # Cache the traceback text to avoid converting it multiple times # (it's constant anyway) if not record.exc_text: record.exc_text = self.formatException(record.exc_info) if record.exc_text: if s[-1:] != "\n": s = s + "\n" s = s + record.exc_text return s formatter = TaskFormatter(fmt=logformat, datefmt="%H:%M:%S") file_handler.setFormatter(formatter) logger = logging.getLogger() logger.addHandler(file_handler) class ExtraAdapter(logging.LoggerAdapter): def process(self, msg, kwargs): kwargs["extra"] = kwargs.get("extra", {"task": "Default"}) return msg, kwargs log = ExtraAdapter(logger, {}) class LoggerWriter: def __init__(self, logger, level): self.logger = logger self.level = level def write(self, message): if message != "\n": self.logger.log(self.level, message) def flush(self): pass def setup_glib_logging(): """Code from https://github.com/GNOME/meld/blob/master/bin/meld""" from gi.repository import GLib levels = { GLib.LogLevelFlags.LEVEL_DEBUG: logging.DEBUG, GLib.LogLevelFlags.LEVEL_INFO: logging.INFO, GLib.LogLevelFlags.LEVEL_MESSAGE: logging.INFO, GLib.LogLevelFlags.LEVEL_WARNING: logging.WARNING, GLib.LogLevelFlags.LEVEL_ERROR: logging.ERROR, GLib.LogLevelFlags.LEVEL_CRITICAL: logging.CRITICAL, } # Just to make sphinx happy... try: level_flag = ( GLib.LogLevelFlags.LEVEL_WARNING | GLib.LogLevelFlags.LEVEL_ERROR | GLib.LogLevelFlags.LEVEL_CRITICAL ) except TypeError: level_flag = GLib.LogLevelFlags.LEVEL_INFO log_domain = "Gtk" log = logging.getLogger(log_domain) def silence(message): if "gtk_container_remove: assertion" in message: # Looks like it was some hackish code in GTK+ which is now removed: # https://git.gnome.org/browse/gtk+/commit/?id=a3805333361fee37a3b1a974cfa6452a85169f08 return True elif "GdkPixbuf" in message: return True return False # This logging handler is for "old" glib logging using a simple # syslog-style API. def log_adapter(domain, level, message, user_data): if not silence(message): log.log(levels.get(level, logging.WARNING), message) try: GLib.log_set_handler(log_domain, level_flag, log_adapter, None) except AttributeError: # Only present in glib 2.46+ pass # This logging handler is for new glib logging using a structured # API. Unfortunately, it was added in such a way that the old # redirection API became a no-op, so we need to hack both of these # handlers to get it to work. def structured_log_adapter(level, fields, field_count, user_data): try: message = GLib.log_writer_format_fields(level, fields, True) except UnicodeDecodeError: for field in fields: print(field.key, field.value) return GLib.LogWriterOutput.HANDLED if not silence(message): log.log(levels.get(level, logging.WARNING), message) return GLib.LogWriterOutput.HANDLED try: GLib.log_set_writer_func(structured_log_adapter, None) except AttributeError: # Only present in glib 2.50+ pass ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/LogEmitter.py0000644000175100001770000000230614614030313020731 0ustar00runnerdockerimport time import logging from gi.repository import GObject, GLib class LogEmitter(GObject.GObject): __gsignals__ = { "logged": (GObject.SignalFlags.RUN_FIRST, None, (object,)) } # list of (str, float, str, int) def __init__(self): GObject.GObject.__init__(self) # We store everything in this list, so that the LogDialog, which is # imported a little later, will have all data ever given to Log. # When Dialog inits, it will set this list to None, and we will stop # appending data to it. Ugly? Somewhat I guess. self.messages = [] class GLogHandler(logging.Handler): def __init__(self, emitter): logging.Handler.__init__(self) self.emitter = emitter def emit(self, record): def _emit(record): message = self.format(record) if self.emitter.messages is not None: self.emitter.messages.append( (record.task, time.time(), message, record.levelno) ) self.emitter.emit( "logged", (record.task, time.time(), message, record.levelno) ) GLib.idle_add(_emit, record) logemitter = LogEmitter() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/SubProcess.py0000755000175100001770000001403514614030313020753 0ustar00runnerdockerimport asyncio import os import psutil import signal import subprocess import sys import time from gi.repository import GObject, GLib from pychess.System.Log import log from pychess.Players.ProtocolEngine import TIME_OUT_SECOND class SubProcess(GObject.GObject): __gsignals__ = { "line": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "died": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__( self, path, args=[], warnwords=[], env=None, cwd=".", lowPriority=False ): GObject.GObject.__init__(self) self.path = path self.args = args self.warnwords = warnwords self.env = env or os.environ self.cwd = cwd self.lowPriority = lowPriority self.defname = os.path.split(path)[1] self.defname = self.defname[:1].upper() + self.defname[1:].lower() cur_time = time.time() self.defname = ( self.defname, time.strftime("%H:%m:%%.3f", time.localtime(cur_time)) % (cur_time % 60), ) log.debug(path + " " + " ".join(self.args), extra={"task": self.defname}) self.argv = [str(u) for u in [self.path] + self.args] self.terminated = False async def start(self): log.debug( "SubProcess.start(): create_subprocess_exec...", extra={"task": self.defname}, ) if sys.platform == "win32": # To prevent engines opening console window startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW else: startupinfo = None create = asyncio.create_subprocess_exec( *self.argv, stdin=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.PIPE, startupinfo=startupinfo, env=self.env, cwd=self.cwd, ) try: self.proc = await asyncio.wait_for(create, TIME_OUT_SECOND) self.pid = self.proc.pid # print(self.pid, self.path) if self.lowPriority: proc = psutil.Process(self.pid) if sys.platform == "win32": niceness = psutil.BELOW_NORMAL_PRIORITY_CLASS else: niceness = 15 # The higher, the lower the priority if psutil.__version__ >= "2.0.0": proc.nice(niceness) else: proc.set_nice(niceness) self.read_stdout_task = asyncio.create_task( self.read_stdout(self.proc.stdout) ) self.write_task = None except asyncio.TimeoutError: log.warning("TimeoutError", extra={"task": self.defname}) raise except GLib.GError: log.warning("GLib.GError", extra={"task": self.defname}) raise except Exception: e = sys.exc_info()[0] log.warning("%s" % e, extra={"task": self.defname}) raise def write(self, line): self.write_task = asyncio.create_task(self.write_stdin(self.proc.stdin, line)) async def write_stdin(self, writer, line): if self.terminated: return try: log.debug(line, extra={"task": self.defname}) writer.write(line.encode()) await writer.drain() except BrokenPipeError: log.debug( "SubProcess.write_stdin(): BrokenPipeError", extra={"task": self.defname}, ) self.emit("died") self.terminate() except ConnectionResetError: log.debug( "SubProcess.write_stdin(): ConnectionResetError", extra={"task": self.defname}, ) self.emit("died") self.terminate() except GLib.GError: log.debug( "SubProcess.write_stdin(): GLib.GError", extra={"task": self.defname} ) self.emit("died") self.terminate() async def read_stdout(self, reader): while True: line = await reader.readline() if line: await asyncio.sleep(0) try: line = line.decode().rstrip() # print(line) except UnicodeError: # Some engines send author names in different encodinds (f.e. spike) print("UnicodeError while decoding:", line) continue if not line: continue for word in self.warnwords: if word in line: log.debug(line, extra={"task": self.defname}) break else: log.debug(line, extra={"task": self.defname}) self.emit("line", line) else: self.emit("died") break self.terminate() def terminate(self): if self.write_task is not None: self.write_task.cancel() self.read_stdout_task.cancel() try: self.proc.terminate() log.debug("SubProcess.terminate()", extra={"task": self.defname}) except ProcessLookupError: log.debug( "SubProcess.terminate(): ProcessLookupError", extra={"task": self.defname}, ) self.terminated = True def pause(self): if sys.platform != "win32": try: self.proc.send_signal(signal.SIGSTOP) except ProcessLookupError: log.debug( "SubProcess.pause(): ProcessLookupError", extra={"task": self.defname}, ) def resume(self): if sys.platform != "win32": try: self.proc.send_signal(signal.SIGCONT) except ProcessLookupError: log.debug( "SubProcess.pause(): ProcessLookupError", extra={"task": self.defname}, ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/__init__.py0000755000175100001770000001007714614030313020424 0ustar00runnerdockerimport asyncio import os import sys import pstats import inspect import cProfile import ssl import tempfile from timeit import default_timer from urllib.error import HTTPError, URLError from urllib.request import Request, urlopen from pychess import MSYS2 # TODO: this hack only needed until we can figure out # what ssl cert files needed to copied in setup.py # when cx_freezee bdist_msi command is used if MSYS2: ssl._create_default_https_context = ssl._create_unverified_context async def download_file_async(url, progressbar=None): loop = asyncio.get_event_loop() future = loop.run_in_executor(None, download_file, url) temp_file = await future return temp_file def download_file(url, progressbar=None): temp_file = None try: if progressbar is not None: from gi.repository import GLib GLib.idle_add(progressbar.set_text, "Downloading %s ..." % url) else: print("Downloading %s ..." % url) header = {"User-Agent": "Mozilla/5.0 (compatible)"} req = Request(url, headers=header) f = urlopen(req) temp_file = os.path.join(tempfile.gettempdir(), os.path.basename(url)) with open(temp_file, "wb") as local_file: local_file.write(f.read()) except HTTPError as e: print("HTTP Error:", e.code, url) except URLError as e: print("URL Error:", e.reason, url) return temp_file def fident(f): """ Get an identifier for a function or method """ joinchar = "." if hasattr(f, "im_class"): fparent = f.im_class.__name__ else: joinchar = ":" fparent = f.__module__.split(".")[-1] # sometimes inspect.getsourcelines() segfaults on windows if getattr(sys, "frozen", False) or sys.platform == "win32": lineno = 0 else: lineno = inspect.getsourcelines(f)[1] fullname = joinchar.join((fparent, f.__name__)) return ":".join((fullname, str(lineno))) def get_threadname(thread_namer): if isinstance(thread_namer, str): return thread_namer else: return fident(thread_namer) # https://gist.github.com/techtonik/2151727 def caller_name(skip=2): """Get a name of a caller in the format module.class.method `skip` specifies how many levels of stack to skip while getting caller name. skip=1 means "who calls me", skip=2 "who calls my caller" etc. An empty string is returned if skipped levels exceed stack height """ stack = inspect.stack() start = 0 + skip if len(stack) < start + 1: return "" parentframe = stack[start][0] name = [] module = inspect.getmodule(parentframe) # `modname` can be None when frame is executed directly in console # TODO(techtonik): consider using __main__ if module: name.append(module.__name__) # detect classname if "self" in parentframe.f_locals: # I don't know any way to detect call from the object method # XXX: there seems to be no way to detect static method call - it will # be just a function call name.append(parentframe.f_locals["self"].__class__.__name__) codename = parentframe.f_code.co_name if codename != "": # top level usually name.append(codename) # function or a method del parentframe return ".".join(name) def profile_me(fn): def profiled_fn(*args, **kwargs): prof = cProfile.Profile() ret = prof.runcall(fn, *args, **kwargs) ps = pstats.Stats(prof) ps.sort_stats("cumulative") ps.print_stats(60) return ret return profiled_fn # Python Timer Class - Context Manager for Timing Code Blocks # Corey Goldberg - 2012 class Timer: def __init__(self, text): self.text = text self.timer = default_timer def __enter__(self): self.start = self.timer() return self def __exit__(self, *args): end = self.timer() self.elapsed_secs = end - self.start self.elapsed = self.elapsed_secs * 1000 # millisecs print(f"---- elapsed time: {self.elapsed:f} ms - {self.text}") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/accordion.py0000644000175100001770000000367614614030313020632 0ustar00runnerdockerfrom gi.repository import Gtk, GObject class Accordion(Gtk.TreeView): def __init__(self, model): GObject.GObject.__init__(self, model) self.set_headers_visible(False) self.set_property("show-expanders", False) self.set_property("level-indentation", 10) renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn("Column", renderer) def top_level(column, cell, store, iter): cell.set_property("text", store[iter][0]) if store.iter_depth(iter) == 0: cell.set_property("foreground", "black") cell.set_property("background", "gray") else: cell.set_property("foreground", "black") cell.set_property("background", "white") column.set_cell_data_func(renderer, top_level) self.append_column(column) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.SINGLE) selection.connect("changed", self.on_selection_changed) self.current = None def on_selection_changed(self, selection, data=None): model, iter = selection.get_selected() if model.iter_depth(iter) == 0 and iter != self.current: self.collapse_all() self.expand_row(model.get_path(iter), True) self.current = iter selected_item = model.get_value(iter, 0) print(selected_item) if __name__ == "__main__": window = Gtk.Window(Gtk.WindowType.TOPLEVEL) window.set_title("Accordion example") window.set_size_request(200, 200) window.connect("delete_event", Gtk.main_quit) treestore = Gtk.TreeStore(str) for parent in range(4): piter = treestore.append(None, ["parent %i" % parent]) for child in range(3): treestore.append(piter, ["child %i of parent %i" % (child, parent)]) accordion = Accordion(treestore) window.add(accordion) window.show_all() Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/command.py0000644000175100001770000000207214614030313020274 0ustar00runnerdockerimport subprocess import os.path class Command: def __init__(self, command, inputstr): self.command = command self.inputstr = inputstr def run(self, timeout=None): """Run a command then return: (status, output, error).""" status = None output = "" error = "" try: process = subprocess.Popen( self.command, universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0, cwd=os.path.dirname(self.command[0]), ) except OSError: return status, output, error except ValueError: return status, output, error try: output, error = process.communicate(input=self.inputstr, timeout=timeout) except subprocess.TimeoutExpired: process.kill() output, error = process.communicate() status = process.returncode return status, output, error ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/conf.py0000755000175100001770000002060214614030313017605 0ustar00runnerdocker""" The task of this module is to provide easy saving/loading of configurations It also supports gconf like connection, so you get notices when a property has changed. """ import sys import os import atexit import builtins import locale from configparser import RawConfigParser from pychess import MSYS2 from pychess.Utils.const import ( FISCHERRANDOMCHESS, LOSERSCHESS, COUNT_OF_SOUNDS, SOUND_MUTE, ) from pychess.System.Log import log from pychess.System.prefix import addDataPrefix, addUserConfigPrefix, getDataPrefix section = "General" configParser = RawConfigParser(default_section=section) for sect in ("FICS", "ICC"): if not configParser.has_section(sect): configParser.add_section(sect) path = addUserConfigPrefix("config") encoding = locale.getpreferredencoding() if os.path.isfile(path): with open(path, encoding=encoding) as fh: configParser.read_file(fh) def save_config(path=path, encoding=encoding): with open(path, "w", encoding=encoding) as fh: configParser.write(fh) atexit.register(save_config) if sys.platform == "win32": username = os.environ["USERNAME"] else: from os import getuid from pwd import getpwuid userdata = getpwuid(getuid()) realname = userdata.pw_gecos.split(",")[0] if realname: username = realname else: username = userdata.pw_name if getattr(sys, "frozen", False) and not MSYS2: # pyinstaller specific! if hasattr(sys, "_MEIPASS"): base_path = sys._MEIPASS else: base_path = os.path.dirname(sys.executable) default_book_path = os.path.join(base_path, "pychess_book.bin") else: default_book_path = os.path.join(addDataPrefix("pychess_book.bin")) no_gettext = False idkeyfuncs = {} conid = 0 def notify_add(key, func, *args, section=section): """The signature for func must be self, client, *args, **kwargs""" assert isinstance(key, str) global conid idkeyfuncs[conid] = (key, func, args, section) conid += 1 return conid - 1 def notify_remove(conid): del idkeyfuncs[conid] if "_" not in builtins.__dir__(): def _(text): return text DEFAULTS = { "General": { "firstName": username, "secondName": _("Guest"), "showEmt": False, "showEval": False, "showBlunder": True, "hideTabs": False, "closeAll": False, "faceToFace": False, "scoreLinearScale": False, "showCaptured": False, "figuresInNotation": False, "moveAnimation": False, "noAnimation": False, "autoPromote": False, "autoRotate": False, "showFICSgameno": False, "fullAnimation": True, "showCords": True, "drawGrid": False, "activateSupportAlgorithm": False, "board_frame": 1, "board_style": 1, "pieceTheme": "Cburnett", "darkcolour": "", "lightcolour": "", "movetextFont": "FreeSerif Regular 12", "autoSave": True, "autoSavePath": os.path.expanduser("~"), "autoSaveFormat": "pychess", "saveEmt": False, "saveEval": False, "saveRatingChange": False, "indentPgn": False, "saveOwnGames": True, "dont_show_externals_at_startup": False, "max_analysis_spin": 3, "max_depth_spin": 20, "variation_threshold_spin": 50, "fromCurrent": True, "shouldWhite": True, "shouldBlack": True, "ThreatPV": False, "infinite_analysis": False, "infinite_depth": True, "opening_check": False, "opening_file_entry": default_book_path, "book_depth_max": 13, "book_exact_match": True, "endgame_check": False, "egtb_path": os.path.join(getDataPrefix()), "online_egtb_check": True, "autoCallFlag": True, "hint_mode": False, "spy_mode": False, "ana_combobox": 0, "analyzer_check": True, "inv_ana_combobox": 0, "inv_analyzer_check": False, "newgametasker_playercombo": 0, "ics_combo": 0, "autoLogin": False, "standard_toggle": True, "blitz_toggle": True, "lightning_toggle": True, "variant_toggle": True, "registered_toggle": True, "guest_toggle": True, "computer_toggle": True, "titled_toggle": True, "numberOfFingers": 0, "numberOfTimesLoggedInAsRegisteredUser": 0, "lastdifference-1": -1, "lastdifference-2": -1, "lastdifference-3": -1, "standard_toggle1": True, "blitz_toggle1": True, "lightning_toggle1": True, "variant_toggle1": True, "computer_toggle1": True, "categorycombo": 0, "learncombo0": 0, "learncombo1": 0, "learncombo2": 0, "learncombo3": 0, "welcome_image": addDataPrefix("glade/background.jpg"), "alarm_spin": 15, "show_tip_at_startup": True, "tips_seed": 0, "tips_index": 0, "dont_show_externals_at_startup": False, "download_timestamp": False, "download_chess_db": False, "download_scoutfish": False, "ngvariant1": FISCHERRANDOMCHESS, "ngvariant2": LOSERSCHESS, "useSounds": True, "max_log_files": 10, "show_sidepanels": True, "chat_paned_position": 100, "notimeRadio": 0, "blitzRadio": 0, "ngblitz min": 5, "ngblitz gain": 0, "ngblitz moves": 0, "rapidRadio": 0, "ngrapid min": 15, "ngrapid gain": 5, "ngrapid moves": 0, "normalRadio": 0, "ngnormal min": 45, "ngnormal gain": 15, "ngnormal moves": 0, "classicalRadio": 0, "playNormalRadio": 0, "playVariant1Radio": 0, "playVariant2Radio": 0, "ngclassical min": 3, "ngclassical gain": 0, "ngclassical moves": 40, "whitePlayerCombobox": 0, "blackPlayerCombobox": 0, "skillSlider1": 20, "skillSlider2": 20, "taskerSkillSlider": 20, "seek1Radio": 0, "seek2Radio": 0, "seek3Radio": 0, "challenge1Radio": 0, "challenge2Radio": 0, "challenge3Radio": 0, }, "FICS": { "timesealCheck": True, "hostEntry": "freechess.org", "usernameEntry": "", "passwordEntry": "", "asGuestCheck": True, }, "ICC": { "timesealCheck": True, "hostEntry": "chessclub.com", "usernameEntry": "", "passwordEntry": "", "asGuestCheck": True, }, } for i in range(COUNT_OF_SOUNDS): DEFAULTS["General"]["soundcombo%d" % i] = SOUND_MUTE DEFAULTS["General"]["sounduri%d" % i] = "" def get(key, section=section): try: default = DEFAULTS[section][key] except KeyError: # window attributes has no default values # print("!!! conf get() KeyError: %s %s" % (section, key)) default = None try: value = configParser.getint(section, key, fallback=default) # print("... conf get %s %s: %s" % (section, key, value)) return value except ValueError: pass try: value = configParser.getboolean(section, key, fallback=default) # print("... conf get %s %s: %s" % (section, key, value)) return value except ValueError: pass try: value = configParser.getfloat(section, key, fallback=default) # print("... conf get %s %s: %s" % (section, key, value)) return value except ValueError: pass value = configParser.get(section, key, fallback=default) # print("... conf get %s %s: %s" % (section, key, value)) return value def set(key, value, section=section): # print("---conf set()", section, key, value) try: configParser.set(section, key, str(value)) with open(path, "w") as fh: configParser.write(fh) except Exception as err: log.error( "Unable to save configuration '%s'='%s' because of error: %s %s" % ( repr(key), repr(value), err.__class__.__name__, ", ".join(str(a) for a in err.args), ) ) for key_, func, args, section_ in idkeyfuncs.values(): if key_ == key and section_ == section: func(None, *args) def hasKey(key, section=section): return configParser.has_option(section, key) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/cpu.py0000644000175100001770000000162214614030313017445 0ustar00runnerdockerimport platform import sys def get_cpu(): result = {} # Operating system result["platform"] = sys.platform result["windows"] = result["platform"] == "win32" result["linux"] = result["platform"].startswith("linux") result["mac"] = result["platform"] == "darwin" result["release"] = platform.release().lower() result["binext"] = ".exe" if result["windows"] else "" # Number of bits result["bitness"] = ( "64" if platform.machine().endswith("64") or sys.maxsize > 2**32 else "32" ) # Instruction sets try: info = "" with open("/proc/cpuinfo") as f: info = f.read() result["popcnt"] = "popcnt" in info result["bmi2"] = "bmi2" in info except OSError: # Logic not fully true guess = result["bitness"] == "64" result["popcnt"] = guess result["bmi2"] = guess return result ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/debug.py0000644000175100001770000000744414614030313017754 0ustar00runnerdockerimport gc import types # from pychess.Utils.Board import Board from pychess.Utils.GameModel import GameModel # from pychess.Utils.lutils.LBoard import LBoard from pychess.widgets.BoardView import BoardView from pychess.widgets.BoardControl import BoardControl from pychess.widgets.gamewidget import GameWidget from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock.PyDockLeaf import PyDockLeaf # from pychess.widgets.pydock.ArrowButton import ArrowButton # from pychess.widgets.pydock.StarArrowButton import StarArrowButton # from pychess.widgets.pydock.HighlightArea import HighlightArea from pychess.Players.CECPEngine import CECPEngine from pychess.Players.UCIEngine import UCIEngine from pychess.Players.Human import Human from pychess.Players.ICPlayer import ICPlayer from pychess.ic.ICGameModel import ICGameModel from pychess.ic import ICLogon from pychess.perspectives import perspective_manager def obj_referrers(klass): find_obj = False for obj in gc.get_objects(): # closures are evil ! if isinstance(obj, types.FunctionType) and obj.__closure__ is not None: for c in obj.__closure__: try: if isinstance(c.cell_contents, klass): print("!!!", obj, c.cell_contents) except ValueError: print("Cell is empty...") if isinstance(obj, klass): find_obj = True rs = gc.get_referrers(obj) print("---------------------------referrers of %s" % klass.__name__) for ob in rs: print(type(ob), ob.__name__ if type(ob) is type else repr(ob)[:140]) rs1 = gc.get_referrers(ob) for ob1 in rs1: print( " ", type(ob1), ob1.__name__ if type(ob1) is type else repr(ob1)[:140], ) print("---------------------------") if not find_obj: print("Nothing refrences %s" % klass.__name__) def print_obj_referrers(): perspective = perspective_manager.get_perspective("games") if len(perspective.gamewidgets) > 0: return for klass in ( ICGameModel, GameModel, GameWidget, BoardView, BoardControl, CECPEngine, UCIEngine, Human, ICPlayer, # TODO: # ArrowButton, # StarArrowButton, # HighlightArea, # Board, # LBoard, ): obj_referrers(klass) if ICLogon.dialog is None or not hasattr(ICLogon.dialog, "lounge"): for klass in ( PyDockTop, PyDockLeaf, ): obj_referrers(klass) print("---------------------------------") def print_muppy_sumary(): # http://pythonhosted.org/Pympler/index.html try: from pympler import muppy, summary except ImportError: print("WARNING: pympler not installed") return # from pympler.classtracker import ClassTracker # from pympler.classtracker_stats import HtmlStats global all_objects, obj_summary, class_tracker if all_objects is None: all_objects = muppy.get_objects() obj_summary = summary.summarize(all_objects) summary.print_(obj_summary) # class_tracker = ClassTracker() # class_tracker.track_class(FICSPlayer, trace=1) # class_tracker.track_class(ICGameModel, resolution_level=2, trace=1) else: obj_summary2 = summary.summarize(muppy.get_objects()) diff = summary.get_diff(obj_summary, obj_summary2) summary.print_(diff, limit=200) # class_tracker.create_snapshot('usage') # HtmlStats(tracker=class_tracker).create_html('profile.html') all_objects = None obj_summary = None class_tracker = None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/gst_player.py0000644000175100001770000000310614614030313021026 0ustar00runnerdockerimport os import sys try: import gi except ImportError: print("ERROR: gst_player requires pygobject to be installed.") sys.exit(1) from gi.repository import GLib try: gi.require_version("Gst", "1.0") from gi.repository import Gst except (ImportError, ValueError) as err: print("ERROR: Unable to import gstreamer.\n%s" % err) sys.exit(1) if not Gst.init_check(None): print("ERROR: Unable to initialize gstreamer.") sys.exit(1) player = Gst.ElementFactory.make("playbin", "player") if player is None: print('ERROR: Gst.ElementFactory.make("playbin", "player") failed') sys.exit(1) def on_message(bus, message): if message.type == Gst.MessageType.ERROR: player.set_state(Gst.State.NULL) simpleMessage, advMessage = message.parse_error() print(f"Gstreamer error '{simpleMessage}': {advMessage}") elif message.type == Gst.MessageType.EOS: player.set_state(Gst.State.NULL) return True fakesink = Gst.ElementFactory.make("fakesink", "fakesink") player.set_property("video-sink", fakesink) bus = player.get_bus() bus.add_signal_watch() bus.connect("message", on_message) def play(loop): line = sys.stdin.readline().strip() if not line: loop.quit() return if os.path.isfile(line): player.set_state(Gst.State.NULL) player.set_property("uri", "file://" + line) player.set_state(Gst.State.PLAYING) else: print("file not found:", line) player.set_state(Gst.State.NULL) return True loop = GLib.MainLoop() GLib.idle_add(play, loop) loop.run() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/gstreamer.py0000755000175100001770000000405014614030313020650 0ustar00runnerdockerimport io import os import sys import subprocess from urllib.request import url2pathname from pychess.System.Log import log class Player: def __init__(self): self.ready = False def play(self, uri): pass sound_player = Player() if sys.platform == "win32": import winsound class WinsoundPlayer(Player): def __init__(self): self.ready = True def play(self, uri): try: winsound.PlaySound(None, 0) winsound.PlaySound( url2pathname(uri[5:]), winsound.SND_FILENAME | winsound.SND_ASYNC ) except RuntimeError: log.error( "ERROR: RuntimeError while playing %s." % url2pathname(uri[5:]) ) sound_player = WinsoundPlayer() else: class GstPlayer(Player): def __init__(self): PYTHONBIN = sys.executable.split("/")[-1] try: if getattr(sys, "frozen", False): gst_player = os.path.join( os.path.abspath(os.path.dirname(sys.executable)), "gst_player.py", ) else: gst_player = os.path.join( os.path.abspath(os.path.dirname(__file__)), "gst_player.py" ) self.player = subprocess.Popen( [PYTHONBIN, gst_player], stdin=subprocess.PIPE ) self.stdin = io.TextIOWrapper( self.player.stdin, encoding="utf-8", line_buffering=True ) self.ready = True except Exception: self.player = None log.error("ERROR: starting gst_player failed") raise def play(self, uri): if self.player is not None: try: self.stdin.write(url2pathname(uri[5:]) + "\n") except BrokenPipeError: pass sound_player = GstPlayer() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/ping.py0000755000175100001770000000561214614030313017621 0ustar00runnerdockerimport asyncio import re import sys import shutil from gi.repository import GObject from pychess.System.Log import log from pychess.System.SubProcess import SubProcess class Pinger(GObject.GObject): """The received signal contains the time it took to get response from the server in millisecconds. -1 means that some error occurred""" __gsignals__ = { "received": (GObject.SignalFlags.RUN_FIRST, None, (float,)), "error": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, host): GObject.GObject.__init__(self) self.host = host self.subproc = None self.expression = re.compile(r"=([\d\.]+) (m?s)") # We need untranslated error messages in regexp search # below, so have to use deferred translation here def _(msg): return msg error = _("Destination Host Unreachable") self.errorExprs = (re.compile("(%s)" % error),) del _ self.restartsOnDead = 3 self.deadCount = 0 def start(self): assert not self.subproc if sys.platform == "win32": args = ["-t", self.host] else: args = ["-i10", self.host] self.subproc = SubProcess(shutil.which("ping"), args, env={"LANG": "en"}) asyncio.create_task(self.subproc.start()) self.conid1 = self.subproc.connect("line", self.__handleLines) self.conid2 = self.subproc.connect("died", self.__handleDead) def __handleLines(self, subprocess, line): match = self.expression.search(line) if match: time, unit = match.groups() time = float(time) if unit == "s": time *= 1000 self.emit("received", time) else: for expr in self.errorExprs: match = expr.search(line) if match: msg = match.groups()[0] self.emit("error", _(msg)) def __handleDead(self, subprocess): if self.deadCount < self.restartsOnDead: log.warning( "Pinger died and restarted (%d/%d)" % (self.deadCount + 1, self.restartsOnDead), extra={"task": self.subproc.defname}, ) self.stop() self.start() self.deadCount += 1 else: self.emit("error", _("Died")) self.stop() def stop(self): if not self.subproc: return # exitCode = self.subproc.gentleKill() self.subproc.disconnect(self.conid1) self.subproc.disconnect(self.conid2) self.subproc.terminate() self.subproc = None if __name__ == "__main__": pinger = Pinger("google.com") def callback(pinger, time): print(time) pinger.connect("received", callback) pinger.start() import time time.sleep(5) pinger.stop() time.sleep(3) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/prefix.py0000755000175100001770000000726714614030313020171 0ustar00runnerdocker""" This module provides some basic functions for accessing pychess datefiles in system or user space """ import os import sys ################################################################################ # Locate files in system space # ################################################################################ def _path_is_child_of(parent_path: str, candidate_child_path: str) -> bool: real_parent_path = os.path.realpath(parent_path) real_candidate_child_path = os.path.realpath(candidate_child_path) try: return ( os.path.commonpath([real_parent_path, real_candidate_child_path]) == real_parent_path ) except ValueError: # e.g. "Paths don't have the same drive" on Windows return False # Test if we are installed on the system, frozen or are being run from tar/svn if getattr(sys, "frozen", False): _prefix = os.path.join(os.path.dirname(sys.executable), "share", "pychess") _installed = True else: home_local = os.path.expanduser("~") + "/.local" if _path_is_child_of(sys.prefix, __file__): for sub in ( "share", "games", "share/games", "local/share", "local/games", "local/share/games", ): _prefix = os.path.join(sys.prefix, sub, "pychess") if os.path.isdir(os.path.join(_prefix, "pieces")): _installed = True break else: raise Exception("can't find the pychess data directory") elif _path_is_child_of(home_local, __file__): _prefix = os.path.join(home_local, "share", "pychess") if os.path.isdir(os.path.join(_prefix, "pieces")): _installed = True else: raise Exception("can't find the pychess data directory") else: _prefix = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) _installed = False def addDataPrefix(subpath): return os.path.abspath(os.path.join(_prefix, subpath)) def getDataPrefix(): return _prefix def isInstalled(): return _installed ################################################################################ # Locate files in user space # ################################################################################ def __get_user_dir(xdg_env_var, fallback_dir_path): return os.environ.get( xdg_env_var, os.path.join(os.path.expanduser("~"), fallback_dir_path) ) def get_user_data_dir(): return __get_user_dir("XDG_DATA_HOME", ".local/share") def get_user_config_dir(): return __get_user_dir("XDG_CONFIG_HOME", ".config") def get_user_cache_dir(): return __get_user_dir("XDG_CACHE_HOME", ".cache") pychess = "pychess" def getUserDataPrefix(): return os.path.join(get_user_data_dir(), pychess) def addUserDataPrefix(subpath): return os.path.join(getUserDataPrefix(), subpath) def getEngineDataPrefix(): return os.path.join(getUserDataPrefix(), "engines") def addEngineDataPrefix(subpath): return os.path.join(getEngineDataPrefix(), subpath) def getUserConfigPrefix(): return os.path.join(get_user_config_dir(), pychess) def addUserConfigPrefix(subpath): return os.path.join(getUserConfigPrefix(), subpath) def getUserCachePrefix(): return os.path.join(get_user_cache_dir(), pychess) def addUserCachePrefix(subpath): return os.path.join(getUserCachePrefix(), subpath) for directory in ( getUserDataPrefix(), getEngineDataPrefix(), getUserConfigPrefix(), getUserCachePrefix(), ): if not os.path.isdir(directory): os.makedirs(directory, mode=0o700) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/protoopen.py0000755000175100001770000000332614614030313020711 0ustar00runnerdockerimport os import sys from urllib.request import urlopen from urllib.parse import unquote PGN_ENCODING = "latin_1" def splitUri(uri): uri = unquote(uri) # escape special chars uri = uri.strip("\r\n\x00") # remove \r\n and NULL if sys.platform == "win32": return uri.split(":///") else: return uri.split("://") def protoopen(uri, encoding=PGN_ENCODING): """Function for opening many things""" splitted = splitUri(uri) if splitted[0] == "file": uri = splitted[1] try: handle = open(unquote(uri), encoding=encoding, newline="") handle.pgn_encoding = ( "utf-8" if os.path.basename(uri).startswith("lichess_") else encoding ) return handle except OSError: pass try: return urlopen(uri) except OSError: pass raise OSError("Protocol isn't supported by pychess") def protosave(uri, append=False): """Function for saving many things""" splitted = splitUri(uri) if splitted[0] == "file": if append: return open(splitted[1], "a", encoding=PGN_ENCODING, newline="") return open(splitted[1], "w", newline="") elif len(splitted) == 1: if append: return open(splitted[0], "a", encoding=PGN_ENCODING, newline="") return open(splitted[0], "w", encoding=PGN_ENCODING, newline="") raise OSError("PyChess doesn't support writing to protocol") def isWriteable(uri): """Returns true if protoopen can open a write pipe to the uri""" splitted = splitUri(uri) if splitted[0] == "file": return os.access(splitted[1], os.W_OK) elif len(splitted) == 1: return os.access(splitted[0], os.W_OK) return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/readuntil.py0000644000175100001770000001255614614030313020655 0ustar00runnerdocker""" Monkey patching asyncio.StreamReader to add readuntil() from Python 3.5.2""" import asyncio class IncompleteReadError(EOFError): """ Incomplete read error. Attributes: - partial: read bytes string before the end of stream was reached - expected: total number of expected bytes (or None if unknown) """ def __init__(self, partial, expected): super().__init__( "%d bytes read on a total of %r expected bytes" % (len(partial), expected) ) self.partial = partial self.expected = expected class LimitOverrunError(Exception): """Reached the buffer limit while looking for a separator. Attributes: - consumed: total number of to be consumed bytes. """ def __init__(self, message, consumed): super().__init__(message) self.consumed = consumed async def _wait_for_data(self, func_name): """Wait until feed_data() or feed_eof() is called. If stream was paused, automatically resume it. """ # StreamReader uses a future to link the protocol feed_data() method # to a read coroutine. Running two read coroutines at the same time # would have an unexpected behaviour. It would not possible to know # which coroutine would get the next data. if self._waiter is not None: raise RuntimeError( "%s() called while another coroutine is " "already waiting for incoming data" % func_name ) assert not self._eof, "_wait_for_data after EOF" # Waiting for data while paused will make deadlock, so prevent it. if self._paused: self._paused = False self._transport.resume_reading() self._waiter = asyncio.futures.Future(loop=self._loop) try: await self._waiter finally: self._waiter = None async def readuntil(self, separator=b"\n"): """Read data from the stream until ``separator`` is found. On success, the data and separator will be removed from the internal buffer (consumed). Returned data will include the separator at the end. Configured stream limit is used to check result. Limit sets the maximal length of data that can be returned, not counting the separator. If an EOF occurs and the complete separator is still not found, an IncompleteReadError exception will be raised, and the internal buffer will be reset. The IncompleteReadError.partial attribute may contain the separator partially. If the data cannot be read because of over limit, a LimitOverrunError exception will be raised, and the data will be left in the internal buffer, so it can be read again. """ seplen = len(separator) if seplen == 0: raise ValueError("Separator should be at least one-byte string") if self._exception is not None: raise self._exception # Consume whole buffer except last bytes, which length is # one less than seplen. Let's check corner cases with # separator='SEPARATOR': # * we have received almost complete separator (without last # byte). i.e buffer='some textSEPARATO'. In this case we # can safely consume len(separator) - 1 bytes. # * last byte of buffer is first byte of separator, i.e. # buffer='abcdefghijklmnopqrS'. We may safely consume # everything except that last byte, but this require to # analyze bytes of buffer that match partial separator. # This is slow and/or require FSM. For this case our # implementation is not optimal, since require rescanning # of data that is known to not belong to separator. In # real world, separator will not be so long to notice # performance problems. Even when reading MIME-encoded # messages :) # `offset` is the number of bytes from the beginning of the buffer # where there is no occurrence of `separator`. offset = 0 # Loop until we find `separator` in the buffer, exceed the buffer size, # or an EOF has happened. while True: buflen = len(self._buffer) # Check if we now have enough data in the buffer for `separator` to # fit. if buflen - offset >= seplen: isep = self._buffer.find(separator, offset) if isep != -1: # `separator` is in the buffer. `isep` will be used later # to retrieve the data. break # see upper comment for explanation. offset = buflen + 1 - seplen if offset > self._limit: raise LimitOverrunError( "Separator is not found, and chunk exceed the limit", offset ) # Complete message (with full separator) may be present in buffer # even when EOF flag is set. This may happen when the last chunk # adds data which makes separator be found. That's why we check for # EOF *ater* inspecting the buffer. if self._eof: chunk = bytes(self._buffer) self._buffer.clear() raise IncompleteReadError(chunk, None) # _wait_for_data() will resume reading if stream was paused. await self._wait_for_data("readuntil") if isep > self._limit: raise LimitOverrunError( "Separator is found, but chunk is longer than limit", isep ) chunk = self._buffer[: isep + seplen] del self._buffer[: isep + seplen] self._maybe_resume_transport() return bytes(chunk) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/repeat.py0000755000175100001770000000256014614030313020143 0ustar00runnerdockerimport time from threading import Thread from pychess.System import fident def repeat(func, *args, **kwargs): """Repeats a function in a new thread until it returns False""" def run(): while func(*args, **kwargs): pass thread = Thread(target=run, name=fident(func)) thread.daemon = True thread.start() def repeat_sleep(func, sleeptime, recur=False): """ Runs func in a thread and repeats it approximately each sleeptime [s] until func returns False. Notice that we sleep first, then run. Not the other way around. If repeat_sleep is called with recur=True, each call will be called with the return value of last call as argument. The argument has to be optional, as it wont be used first time, and it has to be non-None. """ def run(): last = time.time() val = None while True: time.sleep(time.time() - last + sleeptime) if not time: # If python has been shutdown while we were sleeping, the # imported modules will be None return last = time.time() if recur and val: val = func(val) else: val = func() if not val: break thread = Thread(target=run, name=fident(func)) thread.daemon = True thread.start() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/System/uistuff.py0000755000175100001770000003761614614030313020362 0ustar00runnerdockerimport colorsys import sys import xml.etree.ElementTree as ET # from io import BytesIO import gi try: gi.require_version("Gdk", "3.0") gi.require_version("GObject", "2.0") gi.require_version("Gtk", "3.0") gi.require_version("Pango", "1.0") from gi.repository import Gtk, Gdk, GObject, Pango gi.require_version("GdkPixbuf", "2.0") from gi.repository.GdkPixbuf import Pixbuf except Exception: print("Failed to import required gi module version") sys.exit(1) from pychess.System import conf from pychess.System.Log import log from pychess.System.prefix import addDataPrefix def createCombo(combo, data=[], name=None, ellipsize_mode=None): if name is not None: combo.set_name(name) lst_store = Gtk.ListStore(Pixbuf, str) for row in data: lst_store.append(row) combo.clear() combo.set_model(lst_store) crp = Gtk.CellRendererPixbuf() crp.set_property("xalign", 0) crp.set_property("xpad", 2) combo.pack_start(crp, False) combo.add_attribute(crp, "pixbuf", 0) crt = Gtk.CellRendererText() crt.set_property("xalign", 0) crt.set_property("xpad", 4) combo.pack_start(crt, True) combo.add_attribute(crt, "text", 1) if ellipsize_mode is not None: crt.set_property("ellipsize", ellipsize_mode) def updateCombo(combo, data): def get_active(combobox): model = combobox.get_model() active = combobox.get_active() if active < 0: return None return model[active][1] last_active = get_active(combo) lst_store = combo.get_model() lst_store.clear() new_active = 0 for i, row in enumerate(data): lst_store.append(row) if last_active == row[1]: new_active = i combo.set_active(new_active) def genColor(n, startpoint=0): assert n >= 1 # This splits the 0 - 1 segment in the pizza way hue = (2 * n - 1) / (2.0 ** (n - 1).bit_length()) - 1 hue = (hue + startpoint) % 1 # We set saturation based on the amount of green, scaled to the interval # [0.6..0.8]. This ensures a consistent lightness over all colors. rgb = colorsys.hsv_to_rgb(hue, 1, 1) rgb = colorsys.hsv_to_rgb(hue, 1, (1 - rgb[1]) * 0.2 + 0.6) # This algorithm ought to balance colors more precisely, but it overrates # the lightness of yellow, and nearly makes it black # yiq = colorsys.rgb_to_yiq(*rgb) # rgb = colorsys.yiq_to_rgb(.125, yiq[1], yiq[2]) return rgb def keepDown(scrolledWindow): def changed(vadjust): if not hasattr(vadjust, "need_scroll") or vadjust.need_scroll: vadjust.set_value(vadjust.get_upper() - vadjust.get_page_size()) vadjust.need_scroll = True scrolledWindow.get_vadjustment().connect("changed", changed) def value_changed(vadjust): vadjust.need_scroll = ( abs(vadjust.get_value() + vadjust.get_page_size() - vadjust.get_upper()) < vadjust.get_step_increment() ) scrolledWindow.get_vadjustment().connect("value-changed", value_changed) # wrap analysis text column. thanks to # http://www.islascruz.org/html/index.php?blog/show/Wrap-text-in-a-TreeView-column.html def appendAutowrapColumn(treeview, name, **kvargs): cell = Gtk.CellRendererText() # cell.props.wrap_mode = Pango.WrapMode.WORD # TODO: # changed to ellipsize instead until "never ending grow" bug gets fixed # see https://github.com/pychess/pychess/issues/1054 cell.props.ellipsize = Pango.EllipsizeMode.END column = Gtk.TreeViewColumn(name, cell, **kvargs) treeview.append_column(column) def callback(treeview, allocation, column, cell): otherColumns = [c for c in treeview.get_columns() if c != column] newWidth = allocation.width - sum(c.get_width() for c in otherColumns) hsep = GObject.Value() hsep.init(GObject.TYPE_INT) hsep.set_int(0) treeview.style_get_property("horizontal-separator", hsep) newWidth -= hsep.get_int() * (len(otherColumns) + 1) * 2 if cell.props.wrap_width == newWidth or newWidth <= 0: return cell.props.wrap_width = newWidth store = treeview.get_model() store_iter = store.get_iter_first() while store_iter and store.iter_is_valid(store_iter): store.row_changed(store.get_path(store_iter), store_iter) store_iter = store.iter_next(store_iter) treeview.set_size_request(0, -1) # treeview.connect_after("size-allocate", callback, column, cell) scroll = treeview.get_parent() if isinstance(scroll, Gtk.ScrolledWindow): scroll.set_policy(Gtk.PolicyType.NEVER, scroll.get_policy()[1]) return cell METHODS = ( # Gtk.SpinButton should be listed prior to Gtk.Entry, as it is a # subclass, but requires different handling (Gtk.SpinButton, ("get_value", "set_value", "value-changed")), (Gtk.Entry, ("get_text", "set_text", "changed")), (Gtk.Expander, ("get_expanded", "set_expanded", "notify::expanded")), (Gtk.ComboBox, ("get_active", "set_active", "changed")), (Gtk.IconView, ("_get_active", "_set_active", "selection-changed")), (Gtk.ToggleButton, ("get_active", "set_active", "toggled")), (Gtk.CheckMenuItem, ("get_active", "set_active", "toggled")), (Gtk.Range, ("get_value", "set_value", "value-changed")), (Gtk.TreeSortable, ("get_value", "set_value", "sort-column-changed")), (Gtk.Paned, ("get_position", "set_position", "notify::position")), ) def keep(widget, key, get_value_=None, set_value_=None): # , first_value=None): if widget is None: raise AttributeError("key '%s' isn't in widgets" % key) for class_, methods_ in METHODS: # Use try-except just to make spinx happy... try: if isinstance(widget, class_): getter, setter, signal = methods_ break except TypeError: getter, setter, signal = methods_ break else: raise AttributeError("I don't have any knowledge of type: '%s'" % widget) if get_value_: def get_value(): return get_value_(widget) else: get_value = getattr(widget, getter) if set_value_: def set_value(v): return set_value_(widget, v) else: set_value = getattr(widget, setter) def setFromConf(): try: v = conf.get(key) except TypeError: log.warning( "uistuff.keep.setFromConf: Key '%s' from conf had the wrong type '%s', ignored" % (key, type(conf.get(key))) ) # print("uistuff.keep TypeError %s %s" % (key, conf.get(key))) else: set_value(v) def callback(*args): if not conf.hasKey(key) or conf.get(key) != get_value(): conf.set(key, get_value()) widget.connect(signal, callback) conf.notify_add(key, lambda *args: setFromConf()) if conf.hasKey(key): setFromConf() elif conf.get(key) is not None: conf.set(key, conf.get(key)) # loadDialogWidget() and saveDialogWidget() are similar to uistuff.keep() but are needed # for saving widget values for Gtk.Dialog instances that are loaded with different # sets of values/configurations and which also aren't instant save like in # uistuff.keep(), but rather are saved later if and when the user clicks # the dialog's OK button def loadDialogWidget( widget, widget_name, config_number, get_value_=None, set_value_=None, first_value=None, ): key = widget_name + "-" + str(config_number) if widget is None: raise AttributeError("key '%s' isn't in widgets" % widget_name) for class_, methods_ in METHODS: if isinstance(widget, class_): getter, setter, signal = methods_ break else: if set_value_ is None: raise AttributeError("I don't have any knowledge of type: '%s'" % widget) if get_value_: def get_value(): return get_value_(widget) else: get_value = getattr(widget, getter) if set_value_: def set_value(v): return set_value_(widget, v) else: set_value = getattr(widget, setter) if conf.hasKey(key): try: v = conf.get(key) except TypeError: log.warning( "uistuff.loadDialogWidget: Key '%s' from conf had the wrong type '%s', ignored" % (key, type(conf.get(key))) ) if first_value is not None: conf.set(key, first_value) else: conf.set(key, get_value()) else: set_value(v) elif first_value is not None: conf.set(key, first_value) set_value(conf.get(key)) else: log.warning( 'Didn\'t load widget "%s": no conf value and no first_value arg' % widget_name ) def saveDialogWidget(widget, widget_name, config_number, get_value_=None): key = widget_name + "-" + str(config_number) if widget is None: raise AttributeError("key '%s' isn't in widgets" % widget_name) for class_, methods_ in METHODS: if isinstance(widget, class_): getter, setter, signal = methods_ break else: if get_value_ is None: raise AttributeError("I don't have any knowledge of type: '%s'" % widget) if get_value_: def get_value(): return get_value_(widget) else: get_value = getattr(widget, getter) if not conf.hasKey(key) or conf.get(key) != get_value(): conf.set(key, get_value()) POSITION_NONE, POSITION_CENTER, POSITION_GOLDEN = range(3) def keepWindowSize(key, window, defaultSize=None, defaultPosition=POSITION_NONE): """You should call keepWindowSize before show on your windows""" key = key + "window" def savePosition(window, *event): log.debug("keepWindowSize.savePosition: %s" % window.get_title()) width = window.get_allocation().width height = window.get_allocation().height x_loc, y_loc = window.get_position() if width <= 0: log.error("Setting width = '%d' for %s to conf" % (width, key)) if height <= 0: log.error("Setting height = '%d' for %s to conf" % (height, key)) log.debug( "Saving window position width=%s height=%s x=%s y=%s" % (width, height, x_loc, y_loc) ) conf.set(key + "_width", width) conf.set(key + "_height", height) conf.set(key + "_x", x_loc) conf.set(key + "_y", y_loc) return False window.connect("delete-event", savePosition, "delete-event") def loadPosition(window): # log.debug("keepWindowSize.loadPosition: %s" % window.title) # Just to make sphinx happy... try: width, height = window.get_size_request() except TypeError: pass if conf.hasKey(key + "_width") and conf.hasKey(key + "_height"): width = conf.get(key + "_width") height = conf.get(key + "_height") log.debug(f"Resizing window to width={width} height={height}") window.resize(width, height) elif defaultSize: width, height = defaultSize log.debug(f"Resizing window to width={width} height={height}") window.resize(width, height) elif key == "mainwindow": monitor_x, monitor_y, monitor_width, monitor_height = getMonitorBounds() width = int(monitor_width / 2) height = int(monitor_height / 4) * 3 log.debug(f"Resizing window to width={width} height={height}") window.resize(width, height) elif key == "preferencesdialogwindow": monitor_x, monitor_y, monitor_width, monitor_height = getMonitorBounds() width = int(monitor_width / 2) height = int(monitor_height / 4) * 3 window.resize(1, 1) else: monitor_x, monitor_y, monitor_width, monitor_height = getMonitorBounds() width = int(monitor_width / 2) height = int(monitor_height / 4) * 3 if conf.hasKey(key + "_x") and conf.hasKey(key + "_y"): x = max(0, conf.get(key + "_x")) y = max(0, conf.get(key + "_y")) log.debug(f"Moving window to x={x} y={y}") window.move(x, y) elif defaultPosition in (POSITION_CENTER, POSITION_GOLDEN): monitor_x, monitor_y, monitor_width, monitor_height = getMonitorBounds() x_loc = int(monitor_width / 2 - width / 2) + monitor_x if defaultPosition == POSITION_CENTER: y_loc = int(monitor_height / 2 - height / 2) + monitor_y else: # Place the window on the upper golden ratio line y_loc = int(monitor_height / 2.618 - height / 2) + monitor_y log.debug(f"Moving window to x={x_loc} y={y_loc}") window.move(x_loc, y_loc) loadPosition(window) # In rare cases, gtk throws some gtk_size_allocation error, which is # probably a race condition. To avoid the window forgets its size in # these cases, we add this extra hook def callback(window): loadPosition(window) onceWhenReady(window, callback) # Some properties can only be set, once the window is sufficiently initialized, # This function lets you queue your request until that has happened. def onceWhenReady(window, func, *args, **kwargs): def cb(window, alloc, func, *args, **kwargs): func(window, *args, **kwargs) window.disconnect(handler_id) handler_id = window.connect_after("size-allocate", cb, func, *args, **kwargs) def getMonitorBounds(): screen = Gdk.Screen.get_default() root_window = screen.get_root_window() # Just to make sphinx happy... try: ptr_window, mouse_x, mouse_y, mouse_mods = root_window.get_pointer() current_monitor_number = screen.get_monitor_at_point(mouse_x, mouse_y) monitor_geometry = screen.get_monitor_geometry(current_monitor_number) return ( monitor_geometry.x, monitor_geometry.y, monitor_geometry.width, monitor_geometry.height, ) except TypeError: return (0, 0, 0, 0) def makeYellow(box): def on_box_expose_event(box, context): # box.style.paint_flat_box (box.window, # Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, None, box, "tooltip", # box.allocation.x, box.allocation.y, # box.allocation.width, box.allocation.height) pass def cb(box): tooltip = Gtk.Window(Gtk.WindowType.POPUP) tooltip.set_name("gtk-tooltip") tooltip.ensure_style() tooltipStyle = tooltip.get_style() box.set_style(tooltipStyle) box.connect("draw", on_box_expose_event) onceWhenReady(box, cb) class GladeWidgets: """A simple class that wraps a the glade get_widget function into the python __getitem__ version""" def __init__(self, filename): # TODO: remove this when upstream fixes translations with Python3+Windows if sys.platform == "win32" and not conf.no_gettext: tree = ET.parse(addDataPrefix("glade/%s" % filename)) for node in tree.iter(): if "translatable" in node.attrib: node.text = _(node.text) del node.attrib["translatable"] if node.get("name") in ("pixbuf", "logo"): node.text = addDataPrefix("glade/%s" % node.text) xml_text = ET.tostring(tree.getroot(), encoding="unicode", method="xml") self.builder = Gtk.Builder.new_from_string(xml_text, -1) else: self.builder = Gtk.Builder() if not conf.no_gettext: self.builder.set_translation_domain("pychess") self.builder.add_from_file(addDataPrefix("glade/%s" % filename)) def __getitem__(self, key): return self.builder.get_object(key) def getGlade(self): return self.builder ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.889477 pychess-1.0.5/lib/pychess/Utils/0000755000175100001770000000000014614030425016123 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/Board.py0000755000175100001770000005334114614030313017531 0ustar00runnerdockerfrom .lutils.bitboard import iterBits from .lutils.LBoard import LBoard from .lutils.lmove import RANK, FILE, FCORD, FLAG, PROMOTE_PIECE from .Piece import Piece from .Cord import Cord from .const import ( A1, A8, B1, B8, C1, C8, D1, D8, E1, E8, F1, F8, G1, G8, H1, H8, BISHOP, ROOK, ROOK_PROMOTION, QUEEN_PROMOTION, KNIGHT_PROMOTION, BLACK, FEN_START, WHITE, NORMALCHESS, PAWN, BISHOP_PROMOTION, KNIGHT, QUEEN, KING, DROP_VARIANTS, DROP, ATOMICCHESS, ENPASSANT, FISCHERRANDOMCHESS, QUEEN_CASTLE, CRAZYHOUSECHESS, KING_CASTLE, WILDCASTLECHESS, PROMOTIONS, WILDCASTLESHUFFLECHESS, FAN_PIECES, GATINGS, HAWK, HAWK_GATE, ELEPHANT, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, SCHESS, ) def reverse_enum(L): for index in reversed(range(len(L))): yield index, L[index] class Board: """Board is a thin layer above LBoard, adding the Piece objects, which are needed for animation in BoardView. In contrast to LBoard, Board is immutable, which means it will clone itself each time you apply a move to it. Caveat: As the only objects, the Piece objects in the self.data lists will not be cloned, to make animation state preserve between moves""" variant = NORMALCHESS RANKS = 8 FILES = 8 HOLDING_FILES = ((FILES + 3, FILES + 2, FILES + 1), (-4, -3, -2)) PROMOTION_ZONE = ( (A8, B8, C8, D8, E8, F8, G8, H8), (A1, B1, C1, D1, E1, F1, G1, H1), ) PROMOTIONS = (QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION) def __init__(self, setup=False, lboard=None): self.data = [dict(enumerate([None] * self.FILES)) for i in range(self.RANKS)] if lboard is None: self.board = LBoard(self.variant) else: self.board = lboard self.board.pieceBoard = self # Set True in interactive lesson games after they happened self.played = False if setup: if lboard is None: if setup is True: self.board.applyFen(FEN_START) elif isinstance(setup, str): self.board.applyFen(setup) for color in (BLACK, WHITE): pieces = self.board.boards[color] for piece in (PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, HAWK, ELEPHANT): for cord in iterBits(pieces[piece]): self.data[RANK(cord)][FILE(cord)] = Piece(color, piece) if self.variant in DROP_VARIANTS: for color in (BLACK, WHITE): holding = self.board.holding[color] for piece in holding: for i in range(holding[piece]): self[self.newHoldingCord(color, 1)] = Piece(color, piece) def getHoldingCord(self, color, piece, piece_color=None): """Get the chord of first occurrence of piece in given color holding""" enum = reverse_enum if color == WHITE else enumerate for x_loc in self.HOLDING_FILES[color]: for y_loc, row in enum(self.data): if (row.get(x_loc) is not None) and row.get(x_loc).piece == piece: # In S-chess holding may contain our un-gated and captured H/E at the same time # but in case of gating we are looking for our own HAWK/ELEPHANT only! if piece_color is not None and row.get(x_loc).color != piece_color: continue return Cord(x_loc, y_loc) def newHoldingCord(self, color, nth=1): """Find the nth empty slot in given color holding. In atomic explosions nth can be > 1. """ enum = reverse_enum if color == BLACK else enumerate empty = 0 for x_loc in reversed(self.HOLDING_FILES[color]): for y_loc, row in enum(self.data): if row.get(x_loc) is None: empty += 1 if empty == nth: return Cord(x_loc, y_loc) def getHoldingPieces(self, color): """Get the list of pieces from given color holding""" pieces = [] for x_loc in self.HOLDING_FILES[color]: for row in self.data: if row.get(x_loc) is not None: pieces.append(row.get(x_loc)) return pieces def popPieceFromHolding(self, color, piece): """Remove and return a piece in given color holding""" for x_loc in self.HOLDING_FILES[color]: for row in self.data: if (row.get(x_loc) is not None) and row.get(x_loc).piece == piece: piece = row.get(x_loc) del row[x_loc] return piece return None def reorderHolding(self, color): """Reorder captured pieces by their value""" pieces = [] for piece in (PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING): while True: col_piece = self.popPieceFromHolding(color, piece) if col_piece is not None: pieces.append(col_piece) else: break for piece in pieces: self[self.newHoldingCord(color, 1)] = piece def simulateMove(self, board1, move): moved = [] new = [] dead = [] cord0, cord1 = move.cords flag = FLAG(move.move) # null move or SITTUYINCHESS in place promotion if cord0 == cord1 and flag != DROP and flag != QUEEN_PROMOTION: return moved, new, dead if flag == DROP: piece = FCORD(move.move) cord0 = self.getHoldingCord(self.color, piece) moved.append((self[cord0], cord0)) # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = board1.getHoldingPieces(self.color) dead = new return moved, new, dead kcastle = flag == KING_CASTLE or ( self.variant == SCHESS and ( (self[move.cord0].piece == KING and cord0.x - cord1.x == -2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x > 0 ) ) ) qcastle = flag == QUEEN_CASTLE or ( self.variant == SCHESS and ( (self[move.cord0].piece == KING and cord0.x - cord1.x == 2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x < 0 ) ) ) if self.variant == ATOMICCHESS and (self[cord1] or flag == ENPASSANT): # Sequence nubers of next newHoldingCord of WHITE and BLACK nth = [0, 0] piece = self[cord0] nth[1 - piece.color] += 1 cord = self.newHoldingCord(1 - piece.color, nth[1 - piece.color]) moved.append((board1[cord], cord0)) new.append(board1[cord]) else: if flag in PROMOTIONS: dead.append(self[cord0]) else: moved.append((self[cord0], cord0)) # capture if self[cord1] and not ( flag in (QUEEN_CASTLE, KING_CASTLE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) ): piece = ( PAWN if self.variant == CRAZYHOUSECHESS and self[cord1].promoted else self[cord1].piece ) cord = board1.getHoldingCord(self.color, piece) moved.append((board1[cord], cord1)) # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = board1.getHoldingPieces(self.color) if self.variant == ATOMICCHESS: nth[self.color] += 1 from pychess.Variants.atomic import cordsAround for acord in cordsAround(cord1): piece = self[acord] if piece and piece.piece != PAWN and acord != cord0: nth[1 - piece.color] += 1 cord = self.newHoldingCord( 1 - piece.color, nth[1 - piece.color] ) moved.append((board1[cord], acord)) new.append(board1[cord]) if kcastle or qcastle: side = 0 if qcastle else 1 if FILE(cord0.x) == 3 and self.board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 rook = self.board.ini_rooks[self.color][side] moved.append((self[Cord(rook)], Cord(rook))) elif flag in PROMOTIONS: newPiece = board1[cord1] moved.append((newPiece, cord0)) new.append(newPiece) elif flag == ENPASSANT: shift = -1 if self.color == WHITE else 1 ep_cord = Cord(cord1.x, cord1.y + shift) moved.append((self[ep_cord], ep_cord)) # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = board1.getHoldingPieces(self.color) if flag in GATINGS: gpiece = HAWK if flag in (HAWK_GATE, HAWK_GATE_AT_ROOK) else ELEPHANT cord0 = self.getHoldingCord(self.color, gpiece) moved.append((self[cord0], cord0)) # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = board1.getHoldingPieces(self.color) return moved, new, dead def simulateUnmove(self, board1, move): moved = [] new = [] dead = [] cord0, cord1 = move.cords flag = FLAG(move.move) # null move or SITTUYINCHESS in place promotion if cord0 == cord1 and flag != DROP and flag != QUEEN_PROMOTION: return moved, new, dead if self.variant == ATOMICCHESS and (board1[cord1] or flag == ENPASSANT): piece = board1[cord0].piece cord = self.getHoldingCord(self.color, piece) moved.append((self[cord], cord)) self[cord].opacity = 1 dead.append(self[cord]) elif not ( self.variant == FISCHERRANDOMCHESS and flag in (QUEEN_CASTLE, KING_CASTLE) ): moved.append((self[cord1], cord1)) kcastle = flag == KING_CASTLE or ( self.variant == SCHESS and ( ( self[move.cord1] is not None and self[move.cord1].piece == KING and cord0.x - cord1.x == -2 ) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x > 0 ) ) ) qcastle = flag == QUEEN_CASTLE or ( self.variant == SCHESS and ( ( self[move.cord1] is not None and self[move.cord1].piece == KING and cord0.x - cord1.x == 2 ) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x < 0 ) ) ) # capture if board1[cord1] and not ( flag in (QUEEN_CASTLE, KING_CASTLE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) ): piece = ( PAWN if self.variant == CRAZYHOUSECHESS and board1[cord1].promoted else board1[cord1].piece ) cord = self.getHoldingCord(1 - self.color, piece) moved.append((self[cord], cord)) self[cord].opacity = 1 # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = self.getHoldingPieces(self.color) dead.append(self[cord]) if self.variant == ATOMICCHESS: from pychess.Variants.atomic import cordsAround for acord in cordsAround(cord1): piece = board1[acord] if piece and piece.piece != PAWN and acord != cord0: piece.opacity = 0 cord = self.getHoldingCord(1 - piece.color, piece.piece) moved.append((self[cord], cord)) self[cord].opacity = 1 dead.append(self[cord]) if kcastle or qcastle: side = 0 if qcastle else 1 if FILE(cord0.x) == 3 and self.board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 rook = self.board.fin_rooks[board1.color][side] moved.append((self[Cord(rook)], Cord(rook))) elif flag in PROMOTIONS: newPiece = board1[cord0] moved.append((newPiece, cord1)) new.append(newPiece) elif flag == ENPASSANT: cord = self.getHoldingCord(1 - self.color, PAWN) moved.append((self[cord], cord)) self[cord].opacity = 1 # add all captured pieces to "new" list to enforce repainting them after a possible reordering new = self.getHoldingPieces(self.color) dead.append(self[cord]) elif flag in GATINGS: # add all gated pieces to "new" list to enforce repainting them after a possible reordering new = self.getHoldingPieces(1 - self.color) return moved, new, dead def move(self, move, lboard=None): """Creates a new Board object cloning itself then applying the move.move to the clone Board's lboard. If lboard param was given, it will be used when cloning, and move will not be applyed, just the high level Piece objects will be adjusted.""" # Sequence nubers of next newHoldingCord of WHITE and BLACK nth = [0, 0] flag = FLAG(move.move) if flag != DROP: assert self[move.cord0], f"{move} {self.asFen()}" newBoard = self.clone(lboard=lboard) if lboard is None: newBoard.board.applyMove(move.move) cord0, cord1 = move.cords kcastle = flag == KING_CASTLE or ( self.variant == SCHESS and ( (self[move.cord0].piece == KING and cord0.x - cord1.x == -2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x > 0 ) ) ) qcastle = flag == QUEEN_CASTLE or ( self.variant == SCHESS and ( (self[move.cord0].piece == KING and cord0.x - cord1.x == 2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and cord0.x - cord1.x < 0 ) ) ) if kcastle or qcastle: gcord = cord0 # save gating cord # capture if ( (self[move.cord1] is not None or flag == ENPASSANT) and not (cord0 == cord1 and flag != DROP and flag != QUEEN_PROMOTION) and not (kcastle or qcastle) ): if self.variant == CRAZYHOUSECHESS: piece = ( PAWN if flag == ENPASSANT or self[move.cord1].promoted else self[move.cord1].piece ) new_piece = Piece(self.color, piece, captured=True) else: piece = PAWN if flag == ENPASSANT else self[move.cord1].piece new_piece = Piece(1 - self.color, piece, captured=True) nth[self.color] += 1 newBoard[self.newHoldingCord(self.color, nth[self.color])] = new_piece if self.variant == ATOMICCHESS: from pychess.Variants.atomic import cordsAround for acord in cordsAround(move.cord1): piece = self[acord] if piece and piece.piece != PAWN and acord != cord0: new_piece = Piece(piece.color, piece.piece, captured=True) nth[1 - piece.color] += 1 newBoard[ self.newHoldingCord(1 - piece.color, nth[1 - piece.color]) ] = new_piece newBoard[acord] = None if flag == DROP: piece = FCORD(move.move) holding_coord = self.getHoldingCord(self.color, piece) if holding_coord is None: newBoard[cord1] = Piece(self.color, piece) else: newBoard[cord1] = newBoard[holding_coord] newBoard[cord1].captured = False newBoard[holding_coord] = None else: if ( self.variant == ATOMICCHESS and (flag == ENPASSANT or self[move.cord1] is not None) and (flag not in (QUEEN_CASTLE, KING_CASTLE)) ): piece = self[move.cord0].piece new_piece = Piece(self.color, piece, captured=True) nth[1 - self.color] += 1 newBoard[self.newHoldingCord(1 - self.color, nth[1 - self.color])] = ( new_piece ) newBoard[cord1] = None else: if kcastle or qcastle: if flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK): king = newBoard[cord1] else: king = newBoard[cord0] else: newBoard[cord1] = newBoard[cord0] if ( cord0 != cord1 and flag != DROP and flag != HAWK_GATE_AT_ROOK and flag != ELEPHANT_GATE_AT_ROOK ): newBoard[cord0] = None if kcastle or qcastle: side = 0 if qcastle else 1 if FILE(cord0.x) == 3 and self.board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 inirook = self.board.ini_rooks[self.color][side] finrook = self.board.fin_rooks[self.color][side] newBoard[Cord(finrook)] = newBoard[Cord(inirook)] if inirook != finrook: newBoard[Cord(inirook)] = None if flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK): newBoard[cord1] = None finking = self.board.fin_kings[self.color][side] newBoard[Cord(finking)] = king if flag in GATINGS: gpiece = HAWK if flag in (HAWK_GATE, HAWK_GATE_AT_ROOK) else ELEPHANT holding_coord = self.getHoldingCord( self.color, gpiece, piece_color=self.color ) newBoard[gcord if (kcastle or qcastle) else cord0] = newBoard[holding_coord] newBoard[holding_coord] = None if flag in PROMOTIONS: new_piece = Piece(self.color, PROMOTE_PIECE(flag)) new_piece.promoted = True newBoard[cord1] = new_piece elif flag == ENPASSANT: newBoard[Cord(cord1.x, cord0.y)] = None if flag == DROP or flag == ENPASSANT or self[move.cord1] is not None: newBoard.reorderHolding(self.color) return newBoard def switchColor(self): """Switches the current color to move and unsets the enpassant cord. Mostly to be used by inversed analyzers""" new_board = self.setColor(1 - self.color) new_board.board.next = self.board.next return new_board def _get_enpassant(self): if self.board.enpassant is not None: return Cord(self.board.enpassant) return None enpassant = property(_get_enpassant) def setColor(self, color): newBoard = self.clone() newBoard.board.setColor(color) newBoard.board.setEnpassant(None) return newBoard def _get_color(self): return self.board.color color = property(_get_color) def _get_ply(self): return self.board.plyCount ply = property(_get_ply) def asFen(self, enable_bfen=True): return self.board.asFen(enable_bfen) def __repr__(self): return repr(self.board) def __getitem__(self, cord): return self.data[cord.y].get(cord.x) def __setitem__(self, cord, piece): self.data[cord.y][cord.x] = piece def clone(self, lboard=None): if lboard is None: lboard = self.board.clone() if self.variant != NORMALCHESS: from pychess.Variants import variants newBoard = variants[self.variant]() else: newBoard = Board() newBoard.board = lboard newBoard.board.pieceBoard = newBoard for y, row in enumerate(self.data): for x, piece in row.items(): newBoard.data[y][x] = piece return newBoard def __eq__(self, other): if not isinstance(self, type(other)): return False return self.board == other.board def printPieces(self): board = "" for row in reversed(self.data): for i in range(-3, 11): piece = row.get(i) if piece is not None: if piece.color == BLACK: piece_colour = FAN_PIECES[BLACK][piece.piece] else: piece_colour = FAN_PIECES[WHITE][piece.piece] board += piece_colour else: board += "." board += "\n" print(board) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/Cord.py0000755000175100001770000000467214614030313017374 0ustar00runnerdockerfrom .lutils.lmove import FILE, RANK def cmp(x, y): return (x > y) - (x < y) class CordFormatException(Exception): pass class Cord: def __init__(self, var1, var2=None, color=None): """Inits a new highlevel cord object. The cord B3 can be inited in the folowing ways: Cord(17), Cord("b3"), Cord(1,2), Cord("b",3) color can be one of "R", "G", "B", "Y" """ self.color = color if var2 is None: if isinstance(var1, int): # We assume the format Cord(17) self.x = FILE(var1) self.y = RANK(var1) else: # We assume the format Cord("b3") self.x = self.charToInt(var1[0]) self.y = int(var1[1]) - 1 else: if isinstance(var1, str): # We assume the format Cord("b",3) self.x = self.charToInt(var1) self.y = var2 - 1 else: # We assume the format Cord(1,2) self.x = var1 self.y = var2 def _get_cord(self): return self.y * 8 + self.x cord = property(_get_cord) def _get_cx(self): return self.intToChar(self.x) cx = property(_get_cx) def _get_cy(self): return str(self.y + 1) cy = property(_get_cy) def intToChar(self, x): # assert 0 <= x <= 7 return chr(x + ord("a")) def charToInt(self, char): ord_char = ord(char) if ord("A") <= ord_char <= ord("H"): ord_char -= ord("A") elif ord("a") <= ord_char <= ord("h"): ord_char -= ord("a") else: raise CordFormatException("x < 0 || x > 7 (%s, %d)" % (char, ord_char)) return ord_char def _set_cords(self, x_y): self.x, self.y = x_y def _get_cords(self): return (self.x, self.y) cords = property(_get_cords, _set_cords) def __cmp__(self, other): if other is None: return 1 if cmp(self.x, other.x): return cmp(self.x, other.x) if cmp(self.y, other.y): return cmp(self.y, other.y) return 0 def __eq__(self, other): return other is not None and other.x == self.x and other.y == self.y def __ne__(self, other): return not self.__eq__(other) def __repr__(self): return self.cx + self.cy def __hash__(self): return self.x * 8 + self.y ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/DecisionSupportAlgorithm.py0000644000175100001770000001145114614030313023474 0ustar00runnerdockerfrom .lutils.attack import getAttacks, piecesAttackingCord from .const import NB_OF_CASES from .lutils.ldata import PIECE_VALUES from .Cord import Cord from pychess.Utils.const import KING # This file contains algorithm helping the users to choose the right decisions # The first algorithm gives to the user all the pieces attacked and not protected by the foe class DecisionSupportAlgorithm: def __init__(self): self.local_game = False self.activationEnabled = False # to avoid calculating once more the coordinates, we save them self.coordinate_in_danger = [] def enableDisableAlgo(self, enable_algorithm): self.activationEnabled = enable_algorithm def set_foe_as_bot(self): self.local_game = True def calculate_coordinate_in_danger(self, board, mycolor, newTurn=True): """this function should be used for applying the algorithm""" if not newTurn: return self.coordinate_in_danger self.coordinate_in_danger = [] self.coordinate_in_danger = self.__apply_algorithm( board, mycolor, self.__not_protected ) self.coordinate_in_danger += self.__apply_algorithm( board, mycolor, self.__attacked_and_not_protected ) return self.coordinate_in_danger def __apply_algorithm(self, board, mycolor, algorithm): """returns the list of coordinate in danger for player playing with mycolor pieces according to the algorithm used args : board of type Board, coordinate of type Cord, algorithm : function taking two arguments board, mycolor and the current coordinate we are looking WARNING : The king is currently excluded of the calculus => it is never considered as in danger """ coordinate_in_danger = [] if self.local_game and self.activationEnabled: # TODO: tests for i in range(NB_OF_CASES): c = Cord(i) number, letter = c.cords piece = board.data[letter][number] if piece is not None and piece.piece is not KING: if piece.color == mycolor: coordinate_in_color = algorithm(board, mycolor, c) if coordinate_in_color is not None: coordinate_in_danger.append(coordinate_in_color) return coordinate_in_danger def __not_protected(self, board, mycolor, coordinate): """returns the coord with the color yellow if the coord is not protected, None if it is args : board of type Board, coordinate of type Cord, mycolor of value BLACK or WHITE which is the color of the player who will play the next move""" c_colored = None attacks = getAttacks(board.board, coordinate.cord, 1 - mycolor) defense = getAttacks(board.board, coordinate.cord, mycolor) # if one of the piece is not protected but not attacked, danger # means that towers are highlighted at the start of the game if attacks == 0 and defense == 0: c_colored = Cord(coordinate.cord, color="Y") return c_colored def __attacked_and_not_protected(self, board, mycolor, coordinate): """returns the coord with the color red if the coord is not protected and attacked, None if it is not args : board of type Board, cord of type Cord, mycolor of value BLACK or WHITE which is the color of the player who will play the next move""" pieces_attacking = piecesAttackingCord( board.board, coordinate.cord, 1 - mycolor ) defense = getAttacks(board.board, coordinate.cord, mycolor) c_colored = None number, letter = coordinate.cords piece = board.data[letter][number] if len(pieces_attacking) != 0: # if one of the piece is not protected and attacked, very dangerous if defense == 0: c_colored = Cord(coordinate.cord, color="R") else: # if one of the piece attacking is weaker than piece attacked, very dangerous # in this part we find the weakest ennemy pieces attacking our piece piece_attacking = pieces_attacking[0] min_value = PIECE_VALUES[piece_attacking] for piece_found in pieces_attacking: if PIECE_VALUES[piece_found] <= min_value: min_value = PIECE_VALUES[piece_found] piece_attacking = piece_found # then we compare it to the value of the piece # currently, we consider trades as not dangerous, this behaviour could be changed if PIECE_VALUES[piece_attacking] < PIECE_VALUES[piece.piece]: c_colored = Cord(coordinate.cord, color="R") return c_colored ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/EndgameTable.py0000644000175100001770000000443114614030313021003 0ustar00runnerdockerfrom gi.repository import GObject from .Move import Move from .lutils.egtb_k4it import EgtbK4kit from .lutils.egtb_gaviota import EgtbGaviota providers = [] class EndgameTable(GObject.GObject): """Wrap the low-level providers of exact endgame knowledge.""" __gsignals__ = { "scored": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self): GObject.GObject.__init__(self) global providers if not providers: providers = [EgtbGaviota(), EgtbK4kit()] self.providers = providers def _pieceCounts(self, board): return sorted([bin(board.friends[i]).count("1") for i in range(2)]) def scoreGame(self, lBoard, omitDepth=False, probeSoft=False): """Return result and depth to mate. (Intended for engine use.) lBoard: A low-level board structure omitDepth: Look up only the game's outcome (may save time) probeSoft: Fail if the probe would require disk or network access. Return value: game_result: Either WHITEWON, DRAW, BLACKWON, or (on failure) None depth: Depth to mate, or (if omitDepth or the game is drawn) None """ piece_count = self._pieceCounts(lBoard) for provider in self.providers: if provider.supports(piece_count): result, depth = provider.scoreGame(lBoard, omitDepth, probeSoft) if result is not None: return result, depth return None, None async def scoreAllMoves(self, lBoard): """Return each move's result and depth to mate. lBoard: A low-level board structure Return value: a list, with best moves first, of: move: A high-level move structure game_result: Either WHITEWON, DRAW, BLACKWON depth: Depth to mate """ piece_count = self._pieceCounts(lBoard) for provider in self.providers: if provider.supports(piece_count): results = await provider.scoreAllMoves(lBoard) if results: ret = [] for lmove, result, depth in results: ret.append((Move(lmove), result, depth)) self.emit("scored", (lBoard, ret)) return ret return [] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/GameModel.py0000644000175100001770000013666514614030313020344 0ustar00runnerdockerimport asyncio import collections import datetime import random import traceback from queue import Queue from io import StringIO from gi.repository import GObject from pychess.Savers.ChessFile import LoadingError from pychess.Players.Player import ( PlayerIsDead, PassInterrupt, TurnInterrupt, InvalidMove, GameEnded, ) from pychess.System import conf from pychess.System.protoopen import protoopen, protosave from pychess.System.Log import log from pychess.Utils.book import getOpenings from pychess.Utils.Move import Move from pychess.Utils.eco import get_eco from pychess.Utils.Offer import Offer from pychess.Utils.TimeModel import TimeModel from pychess.Utils.DecisionSupportAlgorithm import DecisionSupportAlgorithm from pychess.Savers import html, txt from pychess.Variants.normal import NormalBoard from .logic import getStatus, isClaimableDraw, playerHasMatingMaterial from .const import ( WAITING_TO_START, UNKNOWN_REASON, WHITE, ARTIFICIAL, RUNNING, FLAG_CALL, BLACK, KILLED, ANALYZING, LOCAL, REMOTE, PAUSED, HURRY_ACTION, CHAT_ACTION, RESIGNATION, BLACKWON, WHITEWON, DRAW_CALLFLAG, WON_RESIGN, DRAW, WON_CALLFLAG, DRAW_WHITEINSUFFICIENTANDBLACKTIME, DRAW_OFFER, TAKEBACK_OFFER, DRAW_BLACKINSUFFICIENTANDWHITETIME, ACTION_ERROR_NOT_OUT_OF_TIME, OFFERS, ACTION_ERROR_TOO_LARGE_UNDO, ACTION_ERROR_NONE_TO_WITHDRAW, DRAW_AGREE, ACTION_ERROR_NONE_TO_DECLINE, ADJOURN_OFFER, ADJOURNED, ABORT_OFFER, ABORTED, ADJOURNED_AGREEMENT, PAUSE_OFFER, RESUME_OFFER, ACTION_ERROR_NONE_TO_ACCEPT, ABORTED_AGREEMENT, WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, WON_ADJUDICATION, UNDOABLE_STATES, DRAW_REPETITION, UNDOABLE_REASONS, UNFINISHED_STATES, DRAW_50MOVES, HINT, ) class GameModel(GObject.GObject): """GameModel contains all available data on a chessgame. It also has the task of controlling players actions and moves""" __gsignals__ = { # game_started is emitted when control is given to the players for the # first time. Notice this is after players.start has been called. "game_started": (GObject.SignalFlags.RUN_FIRST, None, ()), # game_changed is emitted when a move has been made. "game_changed": (GObject.SignalFlags.RUN_FIRST, None, (int,)), # moves_undoig is emitted when a undoMoves call has been accepted, but # before any work has been done to execute it. "moves_undoing": (GObject.SignalFlags.RUN_FIRST, None, (int,)), # moves_undone is emitted after n moves have been undone in the # gamemodel and the players. "moves_undone": (GObject.SignalFlags.RUN_FIRST, None, (int,)), # variation_undoig is emitted when a undo_in_variation call has been started, but # before any work has been done to execute it. "variation_undoing": (GObject.SignalFlags.RUN_FIRST, None, ()), # variation_undone is emitted after 1 move have been undone in the # boardview shown variation "variation_undone": (GObject.SignalFlags.RUN_FIRST, None, ()), # game_unended is emitted if moves have been undone, such that the game # which had previously ended, is now again active. "game_unended": (GObject.SignalFlags.RUN_FIRST, None, ()), # game_loading is emitted if the GameModel is about to load in a chess # game from a file. "game_loading": (GObject.SignalFlags.RUN_FIRST, None, (object,)), # game_loaded is emitted after the chessformat handler has loaded in # all the moves from a file to the game model. "game_loaded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), # game_saved is emitted in the end of model.save() "game_saved": (GObject.SignalFlags.RUN_FIRST, None, (str,)), # game_ended is emitted if the models state has been changed to an # "ended state" "game_ended": (GObject.SignalFlags.RUN_FIRST, None, (int,)), # game_terminated is emitted if the game was terminated. That is all # players and clocks were stopped, and it is no longer possible to # resume the game, even by undo. "game_terminated": (GObject.SignalFlags.RUN_FIRST, None, ()), # game_paused is emitted if the game was successfully paused. "game_paused": (GObject.SignalFlags.RUN_FIRST, None, ()), # game_paused is emitted if the game was successfully resumed from a # pause. "game_resumed": (GObject.SignalFlags.RUN_FIRST, None, ()), # action_error is currently only emitted by ICGameModel, in the case # the "web model" didn't accept the action you were trying to do. "action_error": (GObject.SignalFlags.RUN_FIRST, None, (object, int)), # players_changed is emitted if the players list was changed. "players_changed": (GObject.SignalFlags.RUN_FIRST, None, ()), "analyzer_added": (GObject.SignalFlags.RUN_FIRST, None, (object, str)), "analyzer_removed": (GObject.SignalFlags.RUN_FIRST, None, (object, str)), "analyzer_paused": (GObject.SignalFlags.RUN_FIRST, None, (object, str)), "analyzer_resumed": (GObject.SignalFlags.RUN_FIRST, None, (object, str)), # opening_changed is emitted if the move changed the opening. "opening_changed": (GObject.SignalFlags.RUN_FIRST, None, ()), # variation_added is emitted if a variation was added. "variation_added": (GObject.SignalFlags.RUN_FIRST, None, (object, object)), # variation_extended is emitted if a new move was added to a variation. "variation_extended": (GObject.SignalFlags.RUN_FIRST, None, (object, object)), # scores_changed is emitted if the analyzing scores was changed. "analysis_changed": (GObject.SignalFlags.RUN_FIRST, None, (int,)), # analysis_finished is emitted if the game analyzing finished stepping on all moves. "analysis_finished": (GObject.SignalFlags.RUN_FIRST, None, ()), # FICS games can get kibitz/whisper messages "message_received": (GObject.SignalFlags.RUN_FIRST, None, (str, str)), # FICS games can have observers "observers_received": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, timemodel=None, variant=NormalBoard): GObject.GObject.__init__(self) self.daemon = True self.variant = variant self.boards = [variant(setup=True)] self.moves = [] self.scores = {} self.spy_scores = {} self.players = [] self.gameno = None self.variations = [self.boards] self.terminated = False self.status = WAITING_TO_START self.reason = UNKNOWN_REASON self.curColor = WHITE # support algorithm for new players # type apparent : DecisionSupportAlgorithm self.support_algorithm = DecisionSupportAlgorithm() if timemodel is None: self.timemodel = TimeModel() else: self.timemodel = timemodel self.timemodel.gamemodel = self self.connections = collections.defaultdict(list) # mainly for IC subclasses self.analyzer_cids = {} self.examined = False now = datetime.datetime.now() self.tags = collections.defaultdict(str) self.tags["Event"] = _("Local Event") self.tags["Site"] = _("Local Site") self.tags["Date"] = "%04d.%02d.%02d" % (now.year, now.month, now.day) self.tags["Round"] = "1" self.endstatus = None self.zero_reached_cid = None self.timed = self.timemodel.minutes != 0 or self.timemodel.gain != 0 if self.timed: self.zero_reached_cid = self.timemodel.connect( "zero_reached", self.zero_reached ) if self.timemodel.moves == 0: self.tags["TimeControl"] = "%d%s%d" % ( self.timemodel.minutes * 60, "+" if self.timemodel.gain >= 0 else "-", abs(self.timemodel.gain), ) else: self.tags["TimeControl"] = "%d/%d" % ( self.timemodel.moves, self.timemodel.minutes * 60, ) # Notice: tags["WhiteClock"] and tags["BlackClock"] are never set # on the gamemodel, but simply written or read during saving/ # loading from pgn. If you want to know the time left for a player, # check the time model. # Keeps track of offers, so that accepts can be spotted self.offers = {} # True if the game has been changed since last save self.needsSave = False # The uri the current game was loaded from, or None if not a loaded game self.uri = None # Link to additiona info self.info = None self.spectators = {} self.undoQueue = Queue() # learn_type set by LearnModel.set_learn_data() self.offline_lecture = False self.puzzle_game = False self.lesson_game = False self.end_game = False self.solved = False @property def practice_game(self): return self.puzzle_game or self.end_game @property def starting_color(self): return ( BLACK if "FEN" in self.tags and self.tags["FEN"] != "" and self.tags["FEN"].split()[1] == "b" else WHITE ) @property def orientation(self): if "Orientation" in self.tags: return BLACK if self.tags["Orintation"].lower() == "black" else WHITE else: return self.starting_color def zero_reached(self, timemodel, color): if conf.get("autoCallFlag"): if self.status == RUNNING and timemodel.getPlayerTime(color) <= 0: log.info( "Automatically sending flag call on behalf of player %s." % self.players[1 - color].name ) self.players[1 - color].emit("offer", Offer(FLAG_CALL)) def __repr__(self): string = " 0: string += ", move=%s" % self.moves[-1] string += ", variant=%s" % self.variant.name.encode("utf-8") string += f", status={str(self.status)}, reason={str(self.reason)}" string += ", players=%s" % str(self.players) string += ", tags=%s" % str(self.tags) if len(self.boards) > 0: string += "\nboard=%s" % self.boards[-1] return string + ")>" @property def display_text(self): if self.variant == NormalBoard and not self.timed: return "[ " + _("Untimed") + " ]" else: text = "[ " if self.variant != NormalBoard: text += self.variant.name + " " if self.timed: text += self.timemodel.display_text + " " return text + "]" def setPlayers(self, players): log.debug("GameModel.setPlayers: starting") assert self.status == WAITING_TO_START self.players = players for player in self.players: self.connections[player].append(player.connect("offer", self.offerReceived)) self.connections[player].append( player.connect("withdraw", self.withdrawReceived) ) self.connections[player].append( player.connect("decline", self.declineReceived) ) self.connections[player].append( player.connect("accept", self.acceptReceived) ) self.tags["White"] = str(self.players[WHITE]) self.tags["Black"] = str(self.players[BLACK]) log.debug("GameModel.setPlayers: -> emit players_changed") self.emit("players_changed") log.debug("GameModel.setPlayers: <- emit players_changed") log.debug("GameModel.setPlayers: returning") # when the players are set, it is known whether or not there is a bot # we activate the support algorithm if there is one # boolean to know if the game is against a bot # activate support algorithm if that is the case if self.isLocalGame(): self.support_algorithm.set_foe_as_bot() def color(self, player): if player is self.players[0]: return WHITE else: return BLACK async def start_analyzer(self, analyzer_type, force_engine=None): # Don't start regular analyzers if ( (self.practice_game or self.lesson_game) and force_engine is None and not self.solved ): return # prevent starting new analyzers again and again # when fics lecture reuses the same gamemodel if analyzer_type in self.spectators: return from pychess.Players.engineNest import init_engine analyzer = await init_engine(analyzer_type, self, force_engine=force_engine) if analyzer is None: return analyzer.setOptionInitialBoard(self) # Enable to find alternate hint in learn perspective puzzles if force_engine is not None: analyzer.setOption("MultiPV", 3) analyzer.analysis_depth = 20 self.spectators[analyzer_type] = analyzer self.emit("analyzer_added", analyzer, analyzer_type) self.analyzer_cids[analyzer_type] = analyzer.connect("analyze", self.on_analyze) def remove_analyzer(self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: return analyzer.disconnect(self.analyzer_cids[analyzer_type]) analyzer.end(KILLED, UNKNOWN_REASON) self.emit("analyzer_removed", analyzer, analyzer_type) del self.spectators[analyzer_type] def resume_analyzer(self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: return analyzer.resume() self.emit("analyzer_resumed", analyzer, analyzer_type) def pause_analyzer(self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: return analyzer.pause() self.emit("analyzer_paused", analyzer, analyzer_type) async def restart_analyzer(self, analyzer_type): self.remove_analyzer(analyzer_type) await self.start_analyzer(analyzer_type) def on_analyze(self, analyzer, analysis): def safe_int(p): if p in [None, ""]: return 0 try: return int(p) except ValueError: return 0 if analysis and (self.practice_game or self.lesson_game): for i, anal in enumerate(analysis): if anal is not None: ply, pv, score, depth, nps = anal if len(pv) > 0: if ply not in self.hints: self.hints[ply] = [] if len(self.hints[ply]) < i + 1: self.hints[ply].append((pv[0], score)) else: # Some puzzle need manual hints added by LearnModel.add_hints() # because depth 20 is not enough to find the best move # we have to avoid overwrite it! if score > self.hints[ply][i][1]: self.hints[ply][i] = (pv[0], score) if analysis and analysis[0] is not None: ply, pv, score, depth, nps = analysis[0] if score is not None and depth: if analyzer.mode == ANALYZING: if (ply not in self.scores) or ( safe_int(self.scores[ply][2]) <= safe_int(depth) ): self.scores[ply] = (pv, score, depth) self.emit("analysis_changed", ply) else: if (ply not in self.spy_scores) or ( safe_int(self.spy_scores[ply][2]) <= safe_int(depth) ): self.spy_scores[ply] = (pv, score, depth) def setOpening(self, ply=None, redetermine=False): if ply is None: ply = self.ply opening = None while ply >= self.lowply: opening = get_eco(self.getBoardAtPly(ply).board.hash, exactPosition=True) if opening is None and redetermine: ply = ply - 1 else: break if opening is not None: self.tags["ECO"] = opening[0] self.tags["Opening"] = opening[1] self.tags["Variation"] = opening[2] else: if redetermine: if "ECO" in self.tags: del self.tags["ECO"] if "Opening" in self.tags: del self.tags["Opening"] if "Variation" in self.tags: del self.tags["Variation"] self.emit("opening_changed") # Board stuff def _get_ply(self): return self.boards[-1].ply ply = property(_get_ply) def _get_lowest_ply(self): return self.boards[0].ply lowply = property(_get_lowest_ply) def _get_curplayer(self): try: return self.players[self.getBoardAtPly(self.ply).color] except IndexError: log.error(f"{self.players} {self.getBoardAtPly(self.ply).color}") raise curplayer = property(_get_curplayer) def _get_waitingplayer(self): try: return self.players[1 - self.getBoardAtPly(self.ply).color] except IndexError: log.error(f"{self.players} {1 - self.getBoardAtPly(self.ply).color}") raise waitingplayer = property(_get_waitingplayer) def _plyToIndex(self, ply): index = ply - self.lowply if index < 0: raise IndexError(f"{ply} < {self.lowply}\n") return index def getBoardAtPly(self, ply, variation=0): try: return self.variations[variation][self._plyToIndex(ply)] except IndexError: log.error( "%d\t%d\t%d\t%d\t%d" % (self.lowply, ply, self.ply, variation, len(self.variations)) ) raise def getMoveAtPly(self, ply, variation=0): try: return Move( self.variations[variation][self._plyToIndex(ply) + 1].board.lastMove ) except IndexError: log.error( "%d\t%d\t%d\t%d\t%d" % (self.lowply, ply, self.ply, variation, len(self.variations)) ) raise def hasLocalPlayer(self): if self.players[0].__type__ == LOCAL or self.players[1].__type__ == LOCAL: return True else: return False def hasEnginePlayer(self): if ( self.players[0].__type__ == ARTIFICIAL or self.players[1].__type__ == ARTIFICIAL ): return True else: return False def isLocalGame(self): if self.players[0].__type__ != REMOTE and self.players[1].__type__ != REMOTE: return True else: return False def isObservationGame(self): return not self.hasLocalPlayer() def isEngine2EngineGame(self): if ( len(self.players) == 2 and self.players[0].__type__ == ARTIFICIAL and self.players[1].__type__ == ARTIFICIAL ): return True else: return False def isPlayingICSGame(self): if self.players and self.status in (WAITING_TO_START, PAUSED, RUNNING): if ( ( self.players[0].__type__ == LOCAL and self.players[1].__type__ == REMOTE ) or ( self.players[1].__type__ == LOCAL and self.players[0].__type__ == REMOTE ) or ( (self.offline_lecture or self.practice_game or self.lesson_game) and not self.solved ) or ( self.players[1].__type__ == REMOTE and self.players[0].__type__ == REMOTE and self.examined and ( self.players[0].name == "puzzlebot" or self.players[1].name == "puzzlebot" ) or self.players[0].name == "endgamebot" or self.players[1].name == "endgamebot" ) ): return True return False def isLoadedGame(self): return self.gameno is not None # Offer management def offerReceived(self, player, offer): log.debug(f"GameModel.offerReceived: offerer={repr(player)} {offer}") if player == self.players[WHITE]: opPlayer = self.players[BLACK] elif player == self.players[BLACK]: opPlayer = self.players[WHITE] else: # Player comments echoed to opponent if the player started a conversation # with you prior to observing a game the player is in #1113 return if offer.type == HURRY_ACTION: opPlayer.hurry() elif offer.type == CHAT_ACTION: # print("GameModel.offerreceived(player, offer)", player.name, offer.param) opPlayer.putMessage(offer.param) elif offer.type == RESIGNATION: if player == self.players[WHITE]: self.end(BLACKWON, WON_RESIGN) else: self.end(WHITEWON, WON_RESIGN) elif offer.type == FLAG_CALL: assert self.timed if self.timemodel.getPlayerTime(1 - player.color) <= 0: if self.timemodel.getPlayerTime(player.color) <= 0: self.end(DRAW, DRAW_CALLFLAG) elif not playerHasMatingMaterial(self.boards[-1], player.color): if player.color == WHITE: self.end(DRAW, DRAW_WHITEINSUFFICIENTANDBLACKTIME) else: self.end(DRAW, DRAW_BLACKINSUFFICIENTANDWHITETIME) else: if player == self.players[WHITE]: self.end(WHITEWON, WON_CALLFLAG) else: self.end(BLACKWON, WON_CALLFLAG) else: player.offerError(offer, ACTION_ERROR_NOT_OUT_OF_TIME) elif offer.type == DRAW_OFFER and isClaimableDraw(self.boards[-1]): reason = getStatus(self.boards[-1])[1] self.end(DRAW, reason) elif offer.type == TAKEBACK_OFFER and offer.param < self.lowply: player.offerError(offer, ACTION_ERROR_TOO_LARGE_UNDO) elif offer.type in OFFERS: if offer not in self.offers: log.debug( "GameModel.offerReceived: doing {}.offer({})".format( repr(opPlayer), offer ) ) self.offers[offer] = player opPlayer.offer(offer) # If we updated an older offer, we want to delete the old one keys = self.offers.keys() for offer_ in keys: if offer.type == offer_.type and offer != offer_: del self.offers[offer_] def withdrawReceived(self, player, offer): log.debug(f"GameModel.withdrawReceived: withdrawer={repr(player)} {offer}") if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == player: del self.offers[offer] opPlayer.offerWithdrawn(offer) else: player.offerError(offer, ACTION_ERROR_NONE_TO_WITHDRAW) def declineReceived(self, player, offer): log.debug(f"GameModel.declineReceived: decliner={repr(player)} {offer}") if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == opPlayer: del self.offers[offer] log.debug("GameModel.declineReceived: declining %s" % offer) opPlayer.offerDeclined(offer) else: player.offerError(offer, ACTION_ERROR_NONE_TO_DECLINE) def acceptReceived(self, player, offer): log.debug(f"GameModel.acceptReceived: accepter={repr(player)} {offer}") if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == opPlayer: if offer.type == DRAW_OFFER: self.end(DRAW, DRAW_AGREE) elif offer.type == TAKEBACK_OFFER: log.debug("GameModel.acceptReceived: undoMoves(%s)" % offer.param) self.undoMoves(offer.param) elif offer.type == ADJOURN_OFFER: self.end(ADJOURNED, ADJOURNED_AGREEMENT) elif offer.type == ABORT_OFFER: self.end(ABORTED, ABORTED_AGREEMENT) elif offer.type == PAUSE_OFFER: self.pause() elif offer.type == RESUME_OFFER: self.resume() del self.offers[offer] else: player.offerError(offer, ACTION_ERROR_NONE_TO_ACCEPT) # Data stuff def loadAndStart(self, uri, loader, gameno, position, first_time=True): if first_time: assert self.status == WAITING_TO_START uriIsFile = not isinstance(uri, str) if not uriIsFile: chessfile = loader.load(protoopen(uri)) else: chessfile = loader.load(uri) self.gameno = gameno self.emit("game_loading", uri) try: chessfile.loadToModel(gameno, -1, self) # Postpone error raising to make games loadable to the point of the # error except LoadingError as e: error = e else: error = None if self.players: self.players[WHITE].setName(self.tags["White"]) self.players[BLACK].setName(self.tags["Black"]) self.emit("game_loaded", uri) self.needsSave = False if not uriIsFile: self.uri = uri else: self.uri = None # Even if the game "starts ended", the players should still be moved # to the last position, so analysis is correct, and a possible "undo" # will work as expected. for spectator in self.spectators.values(): spectator.setOptionInitialBoard(self) for player in self.players: player.setOptionInitialBoard(self) if self.timed: self.timemodel.setMovingColor(self.boards[-1].color) if first_time: if self.status == RUNNING: if self.timed: self.timemodel.start() # Store end status from Result tag if self.status in (DRAW, WHITEWON, BLACKWON): self.endstatus = self.status self.status = WAITING_TO_START self.start() if error: raise error def save(self, uri, saver, append, position=None, flip=False): if saver in (html, txt): fileobj = open(uri, "a" if append else "w", encoding="utf-8", newline="") self.uri = uri elif isinstance(uri, str): fileobj = protosave(uri, append) self.uri = uri else: fileobj = uri self.uri = None with fileobj: saver.save(fileobj, self, position, flip) self.needsSave = False self.emit("game_saved", uri) def get_book_move(self): openings = getOpenings(self.boards[-1].board) openings.sort(key=lambda t: t[1], reverse=True) if not openings: return None total_weights = 0 for move, weight, learn in openings: total_weights += weight if total_weights < 1: return None choice = random.randint(0, total_weights - 1) current_sum = 0 for move, weight, learn in openings: current_sum += weight if current_sum > choice: return Move(move) # Run stuff def start(self): async def coro(): log.debug("GameModel.run: Starting. self=%s" % self) # Avoid racecondition when self.start is called while we are in # self.end if self.status != WAITING_TO_START: return if not self.isLocalGame(): self.timemodel.handle_gain = False self.status = RUNNING for player in self.players + list(self.spectators.values()): event = asyncio.Event() is_dead = set() player.start(event, is_dead) await event.wait() if is_dead: if player in self.players[WHITE]: self.kill(WHITE_ENGINE_DIED) break elif player in self.players[BLACK]: self.kill(BLACK_ENGINE_DIED) break log.debug("GameModel.run: emitting 'game_started' self=%s" % self) self.emit("game_started") # Let GameModel end() itself on games started with loadAndStart() if not self.lesson_game: self.checkStatus() if self.isEngine2EngineGame() and self.timed: self.timemodel.start() self.timemodel.started = True self.curColor = self.boards[-1].color book_depth_max = conf.get("book_depth_max") while self.status in (PAUSED, RUNNING, DRAW, WHITEWON, BLACKWON): curPlayer = self.players[self.curColor] if self.timed: log.debug( "GameModel.run: id={}, players={}, self.ply={}: updating {}'s time".format( id(self), str(self.players), str(self.ply), str(curPlayer) ) ) curPlayer.updateTime( self.timemodel.getPlayerTime(self.curColor), self.timemodel.getPlayerTime(1 - self.curColor), ) try: log.debug( "GameModel.run: id={}, players={}, self.ply={}: calling {}.makeMove()".format( id(self), str(self.players), self.ply, str(curPlayer) ) ) move = None # if the current player is a bot, get a move from the book if ( curPlayer.__type__ == ARTIFICIAL and book_depth_max > 0 and self.ply <= book_depth_max ): move = self.get_book_move() log.debug( "GameModel.run: id={}, players={}, self.ply={}: got move={} from book".format( id(self), str(self.players), self.ply, move ) ) if move is not None: curPlayer.set_board(self.boards[-1].move(move)) # if no move exists yet (i.e., the book did not return a move or the player is human) if move is None: if self.ply > self.lowply: move = await curPlayer.makeMove( self.boards[-1], self.moves[-1], self.boards[-2] ) else: move = await curPlayer.makeMove(self.boards[-1], None, None) log.debug( "GameModel.run: id={}, players={}, self.ply={}: got move={} from {}".format( id(self), str(self.players), self.ply, move, str(curPlayer), ) ) except PlayerIsDead as e: if self.status in (WAITING_TO_START, PAUSED, RUNNING): stringio = StringIO() traceback.print_exc(file=stringio) error = stringio.getvalue() log.error( "GameModel.run: A Player died: player=%s error=%s\n%s" % (curPlayer, error, e) ) if self.curColor == WHITE: self.kill(WHITE_ENGINE_DIED) else: self.kill(BLACK_ENGINE_DIED) break except InvalidMove as e: stringio = StringIO() traceback.print_exc(file=stringio) error = stringio.getvalue() log.error( "GameModel.run: InvalidMove by player=%s error=%s\n%s" % (curPlayer, error, e) ) if self.curColor == WHITE: self.end(BLACKWON, WON_ADJUDICATION) else: self.end(WHITEWON, WON_ADJUDICATION) break except PassInterrupt: log.debug( "GameModel.run: id={}, players={}, self.ply={}: PassInterrupt".format( id(self), str(self.players), self.ply ) ) continue except TurnInterrupt: log.debug( "GameModel.run: id={}, players={}, self.ply={}: TurnInterrupt".format( id(self), str(self.players), self.ply ) ) self.curColor = self.boards[-1].color continue except GameEnded: log.debug("GameModel.run: got GameEnded exception") break assert isinstance(move, Move), "%s" % repr(move) log.debug( "GameModel.run: id={}, players={}, self.ply={}: applying move={}".format( id(self), str(self.players), self.ply, str(move) ) ) self.needsSave = True newBoard = self.boards[-1].move(move) newBoard.board.prev = self.boards[-1].board # newBoard.printPieces() # Variation on next move can exist from the hint panel... if self.boards[-1].board.next is not None: newBoard.board.children = self.boards[-1].board.next.children self.boards = self.variations[0] self.boards[-1].board.next = newBoard.board self.boards.append(newBoard) self.moves.append(move) if self.timed: self.timemodel.tap() if not self.terminated: self.emit("game_changed", self.ply) for spectator in self.spectators.values(): if spectator.board == self.boards[-2]: spectator.putMove( self.boards[-1], self.moves[-1], self.boards[-2] ) if self.puzzle_game and len(self.moves) % 2 == 1: status, reason = getStatus(self.boards[-1]) self.failed_playing_best = self.check_failed_playing_best(status) if self.failed_playing_best: # print("failed_playing_best() == True -> await asyncio.sleep(1.5) ") # It may happen that analysis had no time to fill hints with best moves # so we give him another chance with some additional time to think on it self.spectators[HINT].setBoard(self.boards[-2]) # TODO: wait for an event (analyzer PV reaching 18 ply) # instead of hard coded sleep time await asyncio.sleep(1.5) self.failed_playing_best = self.check_failed_playing_best( status ) self.checkStatus() self.setOpening() self.curColor = 1 - self.curColor self.checkStatus() asyncio.create_task(coro()) def checkStatus(self): """Updates self.status so it fits with what getStatus(boards[-1]) would return. That is, if the game is e.g. check mated this will call mode.end(), or if moves have been undone from an otherwise ended position, this will call __resume and emit game_unended.""" log.debug("GameModel.checkStatus:") # call flag by engine if self.isEngine2EngineGame() and self.status in UNDOABLE_STATES: return status, reason = getStatus(self.boards[-1]) if self.practice_game and ( len(self.moves) % 2 == 1 or status in UNDOABLE_STATES ): self.check_goal(status, reason) if self.endstatus is not None: self.end(self.endstatus, reason) return if status != RUNNING and self.status in (WAITING_TO_START, PAUSED, RUNNING): if status == DRAW and reason in (DRAW_REPETITION, DRAW_50MOVES): if self.isEngine2EngineGame(): self.end(status, reason) return else: self.end(status, reason) return if ( status != self.status and self.status in UNDOABLE_STATES and self.reason in UNDOABLE_REASONS ): self.__resume() self.status = status self.reason = UNKNOWN_REASON self.emit("game_unended") def __pause(self): log.debug("GameModel.__pause: %s" % self) if self.isEngine2EngineGame(): for player in self.players: player.end(self.status, self.reason) if self.timed: self.timemodel.end() else: for player in self.players: player.pause() if self.timed: self.timemodel.pause() def pause(self): """Players will raise NotImplementedError if they doesn't support pause. Spectators will be ignored.""" self.__pause() self.status = PAUSED self.emit("game_paused") def __resume(self): for player in self.players: player.resume() if self.timed: self.timemodel.resume() self.emit("game_resumed") def resume(self): self.status = RUNNING self.__resume() def end(self, status, reason): if self.status not in UNFINISHED_STATES: log.info( "GameModel.end: Can't end a game that's already ended: %s %s" % (status, reason) ) return if self.status not in (WAITING_TO_START, PAUSED, RUNNING): self.needsSave = True log.debug( "GameModel.end: players=%s, self.ply=%s: Ending a game with status %d for reason %d" % (repr(self.players), str(self.ply), status, reason) ) self.status = status self.reason = reason self.emit("game_ended", reason) self.__pause() def kill(self, reason): log.debug( "GameModel.kill: players=%s, self.ply=%s: Killing a game for reason %d\n%s" % ( repr(self.players), str(self.ply), reason, "".join(traceback.format_list(traceback.extract_stack())).strip(), ) ) self.status = KILLED self.reason = reason for player in self.players: player.end(self.status, reason) for spectator in self.spectators.values(): spectator.end(self.status, reason) if self.timed: self.timemodel.end() self.emit("game_ended", reason) def terminate(self): log.debug("GameModel.terminate: %s" % self) self.terminated = True if self.status != KILLED: for player in self.players: player.end(self.status, self.reason) analyzer_types = list(self.spectators.keys()) for analyzer_type in analyzer_types: self.remove_analyzer(analyzer_type) if self.timed: log.debug("GameModel.terminate: -> timemodel.end()") self.timemodel.end() log.debug( "GameModel.terminate: <- timemodel.end() %s" % repr(self.timemodel) ) if self.zero_reached_cid is not None: self.timemodel.disconnect(self.zero_reached_cid) # ICGameModel may did this if game was a FICS game if self.connections is not None: for player in self.players: for cid in self.connections[player]: player.disconnect(cid) self.connections = {} self.timemodel.gamemodel = None self.players = [] self.emit("game_terminated") # Other stuff def undoMoves(self, moves): """Undo and remove moves number of moves from the game history from the GameModel, players, and any spectators""" if self.ply < 1 or moves < 1: return if self.ply - moves < 0: # There is no way in the current threaded/asynchronous design # for the GUI to know that the number of moves it requests to takeback # will still be valid once the undo is actually processed. So, until # we either add some locking or get a synchronous design, we quietly # "fix" the takeback request rather than cause AssertionError or IndexError moves = 1 log.debug( "GameModel.undoMoves: players={}, self.ply={}, moves={}, board={}".format( repr(self.players), self.ply, moves, self.boards[-1] ) ) self.emit("moves_undoing", moves) self.needsSave = True self.boards = self.variations[0] del self.boards[-moves:] del self.moves[-moves:] self.boards[-1].board.next = None for player in self.players: player.playerUndoMoves(moves, self) for spectator in self.spectators.values(): spectator.spectatorUndoMoves(moves, self) log.debug("GameModel.undoMoves: undoing timemodel") if self.timed: self.timemodel.undoMoves(moves) self.checkStatus() self.setOpening(redetermine=True) self.emit("moves_undone", moves) def isChanged(self): if self.ply == 0: return False if self.needsSave: return True # what was this for? # if not self.uri or not isWriteable(self.uri): # return True return False def add_variation(self, board, moves, comment="", score="", emit=True): if board.board.next is None: # If we are in the latest played board, and want to add a variation # we have to add the latest move first if board.board.lastMove is None or board.board.prev is None: return moves = [Move(board.board.lastMove)] + moves board = board.board.prev.pieceBoard board0 = board board = board0.clone() board.board.prev = None # this prevents annotation panel node searches to find this instead of board0 board.board.hash = -1 if comment: board.board.children.append(comment) variation = [board] for move in moves: new = board.move(move) if len(variation) == 1: new.board.prev = board0.board variation[0].board.next = new.board else: new.board.prev = board.board board.board.next = new.board variation.append(new) board = new board0.board.next.children.append([vboard.board for vboard in variation]) if score: variation[-1].board.children.append(score) head = None for vari in self.variations: if board0 in vari: head = vari break variation[0] = board0 self.variations.append(head[: board0.ply - self.lowply] + variation) self.needsSave = True if emit: self.emit( "variation_added", board0.board.next.children[-1], board0.board.next ) return self.variations[-1] def add_move2variation(self, board, move, variationIdx): new = board.move(move) new.board.prev = board.board board.board.next = new.board # Find the variation (low level lboard list) to append cur_board = board.board vari = None while cur_board.prev is not None: for child in cur_board.prev.next.children: if isinstance(child, list) and cur_board in child: vari = child break if vari is None: cur_board = cur_board.prev else: break vari.append(new.board) self.variations[variationIdx].append(new) self.needsSave = True self.emit("variation_extended", board.board, new.board) def remove_variation(self, board, parent): """board must be an lboard object of the first Board object of a variation Board(!) list""" # Remove the variation (list of lboards) containing board from parent's children list for child in parent.children: if isinstance(child, list) and board in child: parent.children.remove(child) break # Remove all variations from gamemodel's variations list which contains this board for vari in self.variations[1:]: if board.pieceBoard in vari: self.variations.remove(vari) # remove null_board if variation was added on last played move if not parent.fen_was_applied: parent.prev.next = None self.needsSave = True def undo_in_variation(self, board): """board must be the latest Board object of a variation board list""" assert board.board.next is None and len(board.board.children) == 0 self.emit("variation_undoing") for vari in self.variations[1:]: if board in vari: break board = board.board parent = board.prev.next # If this is a one move only variation we have to remove the whole variation # if it's a longer one, just remove the latest move from it first_vari_moves = [ child[1] for child in parent.children if not isinstance(child, str) ] if board in first_vari_moves: self.remove_variation(board, parent) else: board.prev.next = None del vari[-1] self.needsSave = True self.emit("variation_undone") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/IconLoader.py0000755000175100001770000000167614614030313020525 0ustar00runnerdockerfrom gi.repository import Gio from gi.repository import Gtk from gi.repository import GdkPixbuf from pychess.System.Log import log from pychess.System.prefix import addDataPrefix it = Gtk.IconTheme.get_default() def load_icon(size, *alternatives): alternatives = list(alternatives) name = alternatives.pop(0) try: return it.load_icon(name, size, Gtk.IconLookupFlags.USE_BUILTIN) except Exception: if alternatives: return load_icon(size, *alternatives) log.warning("no %s icon in icon-theme-gnome" % name) # Gdk.Pixbuf.new_from_file() doesn't work on Windows if path contains non ascii chars def get_pixbuf(path, size=None): file = Gio.File.new_for_path(addDataPrefix(path)) if size is None: return GdkPixbuf.Pixbuf.new_from_stream(file.read(None), None) else: return GdkPixbuf.Pixbuf.new_from_stream_at_scale( file.read(None), size, size, True, None ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/LearnModel.py0000644000175100001770000001414514614030313020520 0ustar00runnerdockerimport asyncio from gi.repository import GObject from pychess.Utils.const import ( BLACKWON, WHITEWON, DRAW, UNDOABLE_STATES, CANCELLED, PRACTICE_GOAL_REACHED, BLACK, WHITE, LECTURE, LESSON, PUZZLE, ENDGAME, ) from pychess.Utils.GameModel import GameModel learn2str = { LECTURE: "Lecture", PUZZLE: "Puzzle", LESSON: "Lesson", ENDGAME: "Endgame", } MATE, MATE_IN, DRAW_IN, EQUAL_IN, EVAL_IN, PROMOTION = range(6) class Goal: def __init__(self, termination): self.termination = termination # print(termination) if termination.startswith("mate in"): self.result = MATE_IN self.moves = int(termination.split()[-1]) self.cp = None elif termination.startswith("draw in"): self.result = DRAW_IN self.moves = int(termination.split()[-1]) self.cp = None elif termination.startswith("equalize in"): self.result = EQUAL_IN self.moves = int(termination.split()[-1]) self.cp = None elif "cp in" in termination: self.result = EVAL_IN parts = termination.split() self.moves = int(parts[-1]) self.cp = int(parts[0][1:-2]) elif "promotion with" in termination: self.result = PROMOTION self.moves = None parts = termination.split() self.cp = int(parts[-1][1:-2]) else: self.result = MATE self.moves = None self.cp = None # print("No termination tag, expecting MATE", termination) class LearnModel(GameModel): __gsignals__ = { # goal_checked is emitted after puzzle game goal check finished "goal_checked": (GObject.SignalFlags.RUN_FIRST, None, ()), "learn_success": (GObject.SignalFlags.RUN_FIRST, None, ()), } def isChanged(self): """Never save learn games changes to .pgn""" return False def set_learn_data( self, learn_type, source, current_index=None, game_count=None, from_lesson=False ): self.learn_type = learn_type self.source = source self.current_index = current_index self.game_count = game_count self.from_lesson = from_lesson self.hints = {} self.goal = None self.failed_playing_best = False if learn_type == LECTURE: self.offline_lecture = True self.lecture_skip_event = asyncio.Event() # set when 'Go on' button pressed self.lecture_pause_event = ( asyncio.Event() ) # set when 'Pause' button pressed self.lecture_exit_event = asyncio.Event() # set when 'Exit' button pressed elif learn_type == PUZZLE: self.puzzle_game = True self.goal = Goal(self.tags["Termination"]) elif learn_type == LESSON: self.lesson_game = True elif learn_type == ENDGAME: self.end_game = True def add_hints(self, hint): ply, move = hint self.hints[ply] = [(move, 10000)] def check_failed_playing_best(self, status): if self.ply - 1 in self.hints: best_score = self.hints[self.ply - 1][0][1] best_moves = [ hint[0] for hint in self.hints[self.ply - 1] if abs(hint[1] - best_score) <= 10 ] else: best_moves = [] if self.puzzle_game: # No need to check in best moves (and let add more time to analyzer) in trivial cases if self.goal.result in (MATE, MATE_IN) and ( (status == BLACKWON and self.starting_color == BLACK) or (status == WHITEWON and self.starting_color == WHITE) ): return False elif self.goal.result == DRAW_IN and status == DRAW: return False elif self.goal.result in (MATE_IN, DRAW_IN, EQUAL_IN, EVAL_IN, PROMOTION): expect_best = True else: expect_best = False else: expect_best = False failed = expect_best and self.moves[-1].as_uci() not in best_moves return failed def check_goal(self, status, reason): if self.end_game: if status in UNDOABLE_STATES: self.end(status, reason) self.emit("goal_checked") return full_moves = (self.ply - self.lowply) // 2 + 1 # print("Is Goal not reached?", self.goal.result, status, full_moves, self.goal.moves, self.failed_playing_best, self.tags, self.hints) if ( ( self.goal.result == DRAW_IN and status == DRAW and full_moves <= self.goal.moves ) or ( self.goal.result == MATE_IN and status == WHITEWON and full_moves <= self.goal.moves and self.starting_color == WHITE ) or ( self.goal.result == MATE_IN and status == BLACKWON and full_moves <= self.goal.moves and self.starting_color == BLACK ) or ( self.goal.result in (EVAL_IN, EQUAL_IN) and full_moves == self.goal.moves and not self.failed_playing_best ) or (self.goal.result == MATE and status in (WHITEWON, BLACKWON)) or (self.goal.result == PROMOTION and self.moves[-1].promotion) ): if status in UNDOABLE_STATES: self.end(status, PRACTICE_GOAL_REACHED) else: self.end(CANCELLED, PRACTICE_GOAL_REACHED) else: if status in UNDOABLE_STATES: # print("check_goal() status in UNDOABLE_STATES -> self.end(status, reason)") self.failed_playing_best = True self.end(status, reason) # print("Goal not reached yet.", self.goal.result, status, full_moves, self.goal.moves, self.failed_playing_best) self.emit("goal_checked") return ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/Move.py0000755000175100001770000002041414614030313017403 0ustar00runnerdockerfrom pychess.Utils.Cord import Cord from pychess.Utils.const import ( DROP, NORMAL_MOVE, PAWN, SITTUYINCHESS, QUEEN, KING, WHITE, BLACK, W_OOO, W_OO, B_OOO, B_OO, QUEEN_CASTLE, FISCHERRANDOMCHESS, GATINGS, KING_CASTLE, CAMBODIANCHESS, ENPASSANT, PROMOTIONS, CASTLE_SAN, C1, G1, reprSign, LIGHTBRIGADECHESS, KNIGHT, ) from pychess.Utils.lutils.lmovegen import newMove from .lutils import lmove class Move: def __init__(self, cord0, cord1=None, board=None, promotion=None): """Inits a new highlevel Move object. The object can be initialized in the follow ways: Move(cord0, cord1, board, [promotionPiece]) Move(lovLevelMoveInt)""" if not cord1: self.move = cord0 self.flag = self.move >> 12 self.cord0 = None if self.flag == DROP else Cord(lmove.FCORD(self.move)) self.cord1 = Cord(lmove.TCORD(self.move)) else: assert ( cord0 is not None and cord1 is not None ), f"cord0={cord0}, cord1={cord1}, board={board}" assert board[cord0] is not None, "cord0={}, cord1={}, board={}".format( cord0, cord1, board ) self.cord0 = cord0 self.cord1 = cord1 if not board: raise ValueError( "Move needs a Board object in order to investigate flags" ) self.flag = NORMAL_MOVE if ( board[self.cord0].piece == PAWN and self.cord1.cord in board.PROMOTION_ZONE[board.board.color] and board.variant != SITTUYINCHESS ): if promotion is None: if board.variant == LIGHTBRIGADECHESS: self.flag = lmove.FLAG_PIECE( QUEEN if board.board.color == WHITE else KNIGHT ) else: self.flag = lmove.FLAG_PIECE(QUEEN) else: self.flag = lmove.FLAG_PIECE(promotion) elif board[self.cord0].piece == PAWN and board.variant == SITTUYINCHESS: if cord0 == cord1: # in place promotion self.flag = lmove.FLAG_PIECE(QUEEN) elif ( board[self.cord1] is None and (self.cord0.cord + self.cord1.cord) % 2 == 1 and ( self.cord0.cord in board.PROMOTION_ZONE[board.board.color] or board.board.pieceCount[board.color][PAWN] == 1 ) ): # queen move promotion self.flag = lmove.FLAG_PIECE(QUEEN) elif board[self.cord0].piece == KING: if self.cord0.x - self.cord1.x == 2 and board.variant not in ( CAMBODIANCHESS, FISCHERRANDOMCHESS, ): self.flag = QUEEN_CASTLE if self.cord0.x == 4 else KING_CASTLE elif self.cord0.x - self.cord1.x == -2 and board.variant not in ( CAMBODIANCHESS, FISCHERRANDOMCHESS, ): self.flag = KING_CASTLE if self.cord0.x == 4 else QUEEN_CASTLE elif board.variant != CAMBODIANCHESS: if ( abs(self.cord0.x - self.cord1.x) > 1 and self.cord1.x == C1 ) or ( board.board.ini_rooks[board.color][0] == self.cord1.cord and ( ( board.board.color == WHITE and board.board.castling & W_OOO ) or ( board.board.color == BLACK and board.board.castling & B_OOO ) ) ): self.flag = QUEEN_CASTLE elif ( abs(self.cord0.x - self.cord1.x) > 1 and self.cord1.x == G1 ) or ( board.board.ini_rooks[board.color][1] == self.cord1.cord and ( (board.board.color == WHITE and board.board.castling & W_OO) or ( board.board.color == BLACK and board.board.castling & B_OO ) ) ): self.flag = KING_CASTLE elif ( board[self.cord0].piece == PAWN and board[self.cord1] is None and self.cord0.x != self.cord1.x and self.cord0.y != self.cord1.y ): self.flag = ENPASSANT self.move = newMove(self.cord0.cord, self.cord1.cord, self.flag) def _get_cords(self): return (self.cord0, self.cord1) cords = property(_get_cords) def _get_promotion(self): if self.flag in PROMOTIONS: return lmove.PROMOTE_PIECE(self.flag) return None promotion = property(_get_promotion) def __repr__(self): promotion = ( "=" + reprSign[lmove.PROMOTE_PIECE(self.flag)] if self.flag in PROMOTIONS else "" ) gate_piece = ( reprSign[lmove.GATE_PIECE(self.flag)].lower() if self.flag in GATINGS else "" ) if self.flag == DROP: piece = reprSign[lmove.FCORD(self.move)] return piece + "@" + str(self.cord1) + promotion else: return str(self.cord0) + str(self.cord1) + gate_piece + promotion def __eq__(self, other): if isinstance(other, Move): return self.move == other.move def __hash__(self): return hash(self.cords) def is_capture(self, board): return ( self.flag == ENPASSANT or board[self.cord1] is not None and self.flag != QUEEN_CASTLE and self.flag != KING_CASTLE ) def as_uci(self): move = "{}{}{}{}".format( self.cord0.cx, self.cord0.cy, self.cord1.cx, self.cord1.cy ) if self.flag in PROMOTIONS: move += reprSign[lmove.PROMOTE_PIECE(self.flag)].lower() return move # Parsers def listToMoves(board, mstrs, type=None, validate=False, ignoreErrors=False): return [ Move(move) for move in lmove.listToMoves(board.board, mstrs, type, validate, ignoreErrors) ] def parseAny(board, algnot): return Move(lmove.parseAny(board.board, algnot)) def parseSAN(board, san): """Parse a Short/Abbreviated Algebraic Notation string""" return Move(lmove.parseSAN(board.board, san)) def parseLAN(board, lan): """Parse a Long/Expanded Algebraic Notation string""" return Move(lmove.parseLAN(board.board, lan)) def parseFAN(board, lan): """Parse a Long/Expanded Algebraic Notation string""" return Move(lmove.parseFAN(board.board, lan)) def parseAN(board, an): """Parse an Algebraic Notation string""" return Move(lmove.parseAN(board.board, an)) # Exporters def listToSan(board, moves): return lmove.listToSan(board.board, (m.move for m in moves)) def toAN(board, move, short=False, castleNotation=CASTLE_SAN): """Returns a Algebraic Notation string of a move board should be prior to the move""" return lmove.toAN( board.board, move.move, short=short, castleNotation=castleNotation ) def toSAN(board, move, localRepr=False): """Returns a Short/Abbreviated Algebraic Notation string of a move The board should be prior to the move, board2 past. If not board2, toSAN will not test mate""" return lmove.toSAN(board.board, move.move, localRepr) def toLAN(board, move): """Returns a Long/Expanded Algebraic Notation string of a move board should be prior to the move""" return lmove.toLAN(board.board, move.move) def toFAN(board, move): """Returns a Figurine Algebraic Notation string of a move""" return lmove.toFAN(board.board, move.move) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/Offer.py0000755000175100001770000000203014614030313017530 0ustar00runnerdockerfrom pychess.Utils.const import ACTIONS def cmp(x, y): return (x > y) - (x < y) class Offer: def __init__(self, type_, param=None, index=None): assert type_ in ACTIONS, "Offer.__init__(): type not in ACTIONS: %s" % repr( type_ ) assert index is None or isinstance( index, int ), "Offer.__init__(): index not int: %s" % repr(index) self.type = type_ self.param = param self.index = index # for IC games def __hash__(self): return hash((self.type, self.param, self.index)) def __cmp__(self, other): assert isinstance( other, type(self) ), "Offer.__cmp__(): not of type Offer: %s" % repr(other) return cmp(hash(self), hash(other)) def __repr__(self): text = 'type="%s"' % self.type if self.param is not None: text += ", param=%s" % str(self.param) if self.index is not None: text += ", index=%s" % str(self.index) return "Offer(" + text + ")" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/Piece.py0000755000175100001770000000215314614030313017522 0ustar00runnerdockerfrom pychess.Utils.repr import reprColor, reprPiece class Piece: def __init__(self, color, piece, captured=False): self.color = color self.piece = piece self.captured = captured # in crazyhouse we need to know this for later captures self.promoted = False self.opacity = 1.0 self.x = None self.y = None # Sign is a deprecated synonym for piece def _set_sign(self, sign): self.piece = sign def _get_sign(self): return self.piece sign = property(_get_sign, _set_sign) def __repr__(self): represen = f"<{reprColor[self.color]} {reprPiece[self.piece]}" if self.opacity != 1.0: represen += " Op:%0.1f" % self.opacity if self.x is not None or self.y is not None: if self.x is not None: represen += " X:%0.1f" % self.x else: represen += " X:None" if self.y is not None: represen += " Y:%0.1f" % self.y else: represen += " Y:None" represen += ">" return represen ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/SetupModel.py0000644000175100001770000000674714614030313020570 0ustar00runnerdockerimport asyncio from gi.repository import GObject from pychess.Utils.const import LOCAL, RUNNING from pychess.Utils.DecisionSupportAlgorithm import DecisionSupportAlgorithm from pychess.Variants.setupposition import SetupBoard class SetupMove: def __init__(self, move): self.cord0 = move[0] self.cord1 = move[1] self.flag = 0 def is_capture(self, board): return False class SetupPlayer: __type__ = LOCAL def __init__(self, board_control): self.queue = asyncio.Queue() self.board_control = board_control self.board_control.connect("action", self.on_action) self.board_control.connect("piece_moved", self.piece_moved) def on_action(self, bc, action, player, param): self.queue.put_nowait((action, param)) if action == "SETUP": # force both virtual player to make_move() self.queue.put_nowait((action, param)) async def make_move(self): item = await self.queue.get() return item def piece_moved(self, board, move, color): self.queue.put_nowait((SetupMove(move), color)) class SetupModel(GObject.GObject): __gsignals__ = { "game_started": (GObject.SignalFlags.RUN_FIRST, None, ()), "game_changed": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "moves_undoing": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "variation_undoing": (GObject.SignalFlags.RUN_FIRST, None, ()), "game_loading": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "game_loaded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "game_ended": (GObject.SignalFlags.RUN_FIRST, None, (int,)), } def __init__(self): GObject.GObject.__init__(self) self.stop = False self.lowply = 0 self.status = RUNNING self.players = [] self.moves = [] self.variant = SetupBoard self.boards = [self.variant()] self.variations = [self.boards] self.lesson_game = False self.support_algorithm = DecisionSupportAlgorithm() def _get_ply(self): return self.boards[-1].ply ply = property(_get_ply) def getBoardAtPly(self, ply, variation=0): return self.boards[ply] def getMoveAtPly(self, ply, variation=0): return self.moves[ply] def isPlayingICSGame(self): # prevent hovering over fields return True def receiveSupportAlgorithm(self, x): return def start(self): async def coro(): self.emit("game_started") while True: player0, player1 = await self.curplayer.make_move() if isinstance(player0, SetupMove): # print(player0.cord0, player0.cord1, player1) new_board = self.boards[-1].move(player0, player1) self.moves.append(player0) self.boards.append(new_board) self.emit("game_changed", self.ply) elif player0 == "SETUP": # print("SETUP", player0, player1) self.emit("game_ended", 0) self.boards = [self.variant(setup=player1)] self.variations = [self.boards] self.emit("game_loaded", 0) self.emit("game_started") self.emit("game_changed", 0) elif player0 == "CLOSE": # print("CLOSE") break asyncio.create_task(coro()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/TimeModel.py0000644000175100001770000002332314614030313020353 0ustar00runnerdockerfrom time import time from gi.repository import GLib, GObject from pychess.Utils.const import WHITE, BLACK from pychess.System.Log import log class TimeModel(GObject.GObject): __gsignals__ = { "player_changed": (GObject.SignalFlags.RUN_FIRST, None, ()), "time_changed": (GObject.SignalFlags.RUN_FIRST, None, ()), "zero_reached": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "pause_changed": (GObject.SignalFlags.RUN_FIRST, None, (bool,)), } ############################################################################ # Initing # ############################################################################ def __init__(self, secs=0, gain=0, bsecs=-1, minutes=-1, moves=0): GObject.GObject.__init__(self) if bsecs < 0: bsecs = secs if minutes < 0: minutes = secs / 60 self.minutes = minutes # The number of minutes for the original starting self.moves = moves # time control (not necessarily where the game was resumed, # i.e. self.intervals[0][0]) if secs == 0 and gain > 0: self.intervals = [[gain], [gain]] else: self.intervals = [[secs], [bsecs]] self.gain = gain self.secs = secs # to know if game is played on ICS or not self.gamemodel = None # in FICS games we don't count gain self.handle_gain = True self.paused = False # The left number of secconds at the time pause was turned on self.pauseInterval = 0 self.counter = None self.started = False self.ended = False self.movingColor = WHITE self.connect("time_changed", self.__zerolistener, "time_changed") self.connect("player_changed", self.__zerolistener, "player_changed") self.connect("pause_changed", self.__zerolistener, "pause_changed") self.zero_listener_id = None self.zero_listener_time = 0 self.zero_listener_source = None def __repr__(self): text = "".format( id(self), str(self.getPlayerTime(WHITE)), str(self.getPlayerTime(BLACK)), self.ended, ) return text def __zerolistener(self, *args): if self.ended: return False cur_time = time() whites_time = cur_time + self.getPlayerTime(WHITE) blacks_time = cur_time + self.getPlayerTime(BLACK) if self.movingColor == WHITE: the_time = whites_time color = WHITE else: the_time = blacks_time color = BLACK remaining_time = the_time - cur_time + 0.01 if remaining_time > 0 and remaining_time != self.zero_listener_time: if ( (self.zero_listener_id is not None) and (self.zero_listener_source is not None) and not self.zero_listener_source.is_destroyed() ): GLib.source_remove(self.zero_listener_id) self.zero_listener_time = remaining_time self.zero_listener_id = GLib.timeout_add(10, self.__checkzero, color) default_context = ( GLib.main_context_get_thread_default() or GLib.main_context_default() ) if hasattr(default_context, "find_source_by_id"): self.zero_listener_source = default_context.find_source_by_id( self.zero_listener_id ) def __checkzero(self, color): if self.getPlayerTime(color) <= 0 and self.started: self.emit("time_changed") self.emit("zero_reached", color) return False return True ############################################################################ # Interacting # ############################################################################ def setMovingColor(self, movingColor): self.movingColor = movingColor self.emit("player_changed") def tap(self): if self.paused: return gain = self.gain if self.handle_gain else 0 ticker = self.intervals[self.movingColor][-1] + gain if self.started: if self.counter is not None: ticker -= time() - self.counter else: # FICS rule if self.gamemodel.isPlayingICSGame(): if self.ply >= 1: self.started = True else: self.started = True if self.moves == 0: self.intervals[self.movingColor].append(ticker) else: if len(self.intervals[self.movingColor]) % self.moves == 0: self.intervals[self.movingColor].append( self.intervals[self.movingColor][0] ) else: self.intervals[self.movingColor].append(ticker) self.movingColor = 1 - self.movingColor if self.started: self.counter = time() self.emit("time_changed") self.emit("player_changed") def start(self): if self.started: return self.counter = time() self.emit("time_changed") def end(self): log.debug("TimeModel.end: self=%s" % self) self.pause() self.ended = True if ( (self.zero_listener_id is not None) and (self.zero_listener_source is not None) and not self.zero_listener_source.is_destroyed() ): GLib.source_remove(self.zero_listener_id) def pause(self): log.debug("TimeModel.pause: self=%s" % self) if self.paused: return self.paused = True if self.counter is not None: self.pauseInterval = time() - self.counter self.counter = None self.emit("time_changed") self.emit("pause_changed", True) def resume(self): log.debug("TimeModel.resume: self=%s" % self) if not self.paused: return self.paused = False self.counter = time() - self.pauseInterval self.emit("pause_changed", False) ############################################################################ # Undo and redo in TimeModel # ############################################################################ def undoMoves(self, moves): """Sets time and color to move, to the values they were having in the beginning of the ply before the current. his move. Example: White intervals (is thinking): [120, 130, ...] Black intervals: [120, 115] Is undoed to: White intervals: [120, 130] Black intervals (is thinking): [120, ...]""" if not self.started: self.start() for move in range(moves): self.movingColor = 1 - self.movingColor del self.intervals[self.movingColor][-1] if len(self.intervals[0]) + len(self.intervals[1]) >= 4: self.counter = time() else: self.started = False self.counter = None self.emit("time_changed") self.emit("player_changed") ############################################################################ # Updating # ############################################################################ def updatePlayer(self, color, secs): self.intervals[color][-1] = secs if color == self.movingColor and self.started: self.counter = secs + time() - self.intervals[color][-1] self.emit("time_changed") ############################################################################ # Info # ############################################################################ def getPlayerTime(self, color, movecount=-1): if color == self.movingColor and self.started and movecount == -1: if self.paused: return max(0, self.intervals[color][movecount] - self.pauseInterval) elif self.counter: return max( 0, self.intervals[color][movecount] - (time() - self.counter) ) return max(0, self.intervals[color][movecount]) def getInitialTime(self): return self.intervals[WHITE][0] def getElapsedMoveTime(self, ply): movecount, color = divmod(ply + 1, 2) gain = self.gain if ply > 2 else 0 if len(self.intervals[color]) > movecount: return ( self.intervals[color][movecount - 1] - self.intervals[color][movecount] + gain ) else: return 0 @property def display_text(self): text = ("%d " % self.minutes) + _("min") if self.gain != 0: text += (" + %d " % self.gain) + _("sec") return text @property def hasTimes(self): return len(self.intervals[0]) > 1 @property def ply(self): return len(self.intervals[BLACK]) + len(self.intervals[WHITE]) - 2 def hasBWTimes(self, bmovecount, wmovecount): return ( len(self.intervals[BLACK]) > bmovecount and len(self.intervals[WHITE]) > wmovecount ) def isBlitzFide(self): val = 60 * self.minutes + 60 * (self.gain if self.handle_gain else 0) return ( val > 0 and val <= 600 ) # Less or equal than 10 minutes for 60 moves and for each player ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/__init__.py0000755000175100001770000000507414614030313020241 0ustar00runnerdockerimport asyncio import weakref from math import ceil from pychess.Utils.lutils.ldata import MATE_VALUE, MATE_DEPTH def formatTime(seconds, clk2pgn=False): minus = "" if seconds <= -10 or seconds >= 10: seconds = ceil(seconds) if seconds < 0: minus = "-" seconds = -seconds hours, remainder = divmod(seconds, 3600) minutes, seconds = divmod(remainder, 60) if hours or clk2pgn: return minus + "%d:%02d:%02d" % (hours, minutes, seconds) elif not minutes and seconds < 10: return minus + "%.1f" % seconds else: return minus + "%d:%02d" % (minutes, seconds) def prettyPrintScore(s, depth, format_mate=False): """The score parameter is an eval value from White point of view""" # Particular values if s is None: return "?" if s == -MATE_VALUE: return _("Illegal") if s == 0: return "0.00/%s" % depth # Preparation if s > 0: pp = "+" mp = "" else: pp = "-" mp = "-" s = -s if depth: depth = "/" + depth else: depth = "" # Rendering if s < MATE_VALUE - MATE_DEPTH: return f"{pp}{s / 100.0:0.2f}{depth}" else: mate_in = int(MATE_VALUE - s) if format_mate: if mate_in == 0: return _("Mate") return "%s #%s%d" % (_("Mate"), mp, mate_in) else: return f"{pp}#{s:.0f}" # Sign before sharp to be parsed in PGN def createStoryTextAppEvent(text): try: import storytext storytext.applicationEvent(text) except AttributeError: pass except ImportError: pass class wait_signal(asyncio.Future): """A future for waiting for a given signal to occur.""" def __init__(self, obj, name, *, loop=None): super().__init__(loop=loop) self._obj = weakref.ref(obj, lambda s: self.cancel()) self._hnd = obj.connect(name, self._signal_callback) def _signal_callback(self, *k): obj = self._obj() if obj is not None: obj.disconnect(self._hnd) self.set_result(k) def cancel(self, msg=None): if self.cancelled(): return False try: super().cancel(msg=msg) except TypeError: # It has msg parameter only form Python 3.9 super().cancel() except AttributeError: pass try: obj = self._obj() if obj is not None: obj.disconnect(self._hnd) except AttributeError: pass return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/book.py0000755000175100001770000000470714614030313017436 0ustar00runnerdockerimport os from struct import Struct from collections import namedtuple from pychess.System import conf from pychess.Utils.lutils.lmove import parsePolyglot from pychess.System.Log import log path = conf.get("opening_file_entry") if os.path.isfile(path): bookfile = True else: bookfile = False log.warning("Could not find %s" % path) # The book probing code is based on that of PolyGlot by Fabien Letouzey. # PolyGlot is available under the GNU GPL from http://wbec-ridderkerk.nl BookEntry = namedtuple("BookEntry", "key move weight learn") # 'key' c_uint64 the position's hash # 'move' c_uint16 the candidate move # 'weight' c_uint16 proportional to prob. we should play it # The following terms are not always available: # 'learn' c_uint32 we use this NOT the polyglot way but as in # https://github.com/mcostalba/chess_db entrystruct = Struct(">QHHI") entrysize = entrystruct.size def getOpenings(board): """Return a tuple (move, weight, learn) for each opening move in the given position. The weight is proportional to the probability that a move should be played. By convention, games is the number of times a move has been tried, and score the number of points it has scored (with 2 per victory and 1 per draw). However, opening books aren't required to keep this information.""" openings = [] if not bookfile: return openings with open(path, "rb") as bookFile: key = board.hash # Find the first entry whose key is >= the position's hash bookFile.seek(0, os.SEEK_END) low, high = 0, bookFile.tell() // 16 - 1 if high < 0: return openings while low < high: mid = (low + high) // 2 bookFile.seek(mid * 16) entry = bookFile.read(entrysize) if len(entry) != entrysize: return openings entry = BookEntry._make(entrystruct.unpack(entry)) if entry.key < key: low = mid + 1 else: high = mid bookFile.seek(low * 16) while True: entry = bookFile.read(entrysize) if len(entry) != entrysize: return openings entry = BookEntry._make(entrystruct.unpack(entry)) if entry.key != key: break move = parsePolyglot(board, entry.move) openings.append((move, entry.weight, entry.learn)) return openings ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/checkversion.py0000644000175100001770000000230214614030313021151 0ustar00runnerdockerimport os.path import json from gi.repository import GLib, Gtk from pychess import VERSION from pychess.widgets import mainwindow from pychess.System import download_file_async, prefix URL = "https://api.github.com/repos/pychess/pychess/releases/latest" LINK = "https://github.com/pychess/pychess/releases" def isgit(): return os.path.isdir(prefix.addDataPrefix(".git")) async def checkversion(): if isgit(): return new_version = None filename = await download_file_async(URL) if filename is not None: with open(filename, encoding="utf-8") as f: new_version = json.loads(f.read())["name"] def notify(new_version): msg_dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK ) msg = _("New version %s is available!" % new_version) msg_dialog.set_markup(msg) msg_dialog.format_secondary_markup(f'{LINK}') msg_dialog.connect("response", lambda msg_dialog, a: msg_dialog.hide()) msg_dialog.show() if new_version is not None and VERSION.split(".") < new_version.split("."): GLib.idle_add(notify, new_version) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/const.py0000755000175100001770000002412114614030313017622 0ustar00runnerdockerNAME = "PyChess" # Player types LOCAL, ARTIFICIAL, REMOTE = range(3) # Engine strengths EASY, INTERMEDIATE, EXPERT = range(3) # Tools TOOL_NONE, TOOL_CHESSDB, TOOL_SCOUTFISH = range(3) # Player colors WHITE, BLACK = range(2) # Game states ( WAITING_TO_START, PAUSED, RUNNING, DRAW, WHITEWON, BLACKWON, KILLED, ADJOURNED, ABORTED, UNKNOWN_STATE, ICC_ABORTED, CANCELLED, ) = range(12) reprResult = ["*", "*", "*", "1/2-1/2", "1-0", "0-1", "*", "*", "*", "*", "*", "*"] UNDOABLE_STATES = (DRAW, WHITEWON, BLACKWON) UNFINISHED_STATES = (WAITING_TO_START, PAUSED, RUNNING, UNKNOWN_STATE) # Chess variants ( NORMALCHESS, CORNERCHESS, SHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, ASYMMETRICRANDOMCHESS, UPSIDEDOWNCHESS, PAWNSPUSHEDCHESS, PAWNSPASSEDCHESS, THEBANCHESS, PAWNODDSCHESS, KNIGHTODDSCHESS, ROOKODDSCHESS, QUEENODDSCHESS, BLINDFOLDCHESS, HIDDENPAWNSCHESS, HIDDENPIECESCHESS, ALLWHITECHESS, ALLPAWNSCHESS, ALLWHITEPAWNSCHESS, ATOMICCHESS, BUGHOUSECHESS, CRAZYHOUSECHESS, LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, KINGOFTHEHILLCHESS, THREECHECKCHESS, HORDECHESS, RACINGKINGSCHESS, ASEANCHESS, MAKRUKCHESS, SITTUYINCHESS, CAMBODIANCHESS, AIWOKCHESS, EUROSHOGICHESS, SETUPCHESS, PLACEMENTCHESS, SCHESS, LIGHTBRIGADECHESS, ) = range(42) ASEAN_VARIANTS = (ASEANCHESS, MAKRUKCHESS, CAMBODIANCHESS, AIWOKCHESS, SITTUYINCHESS) DROP_VARIANTS = ( BUGHOUSECHESS, CRAZYHOUSECHESS, EUROSHOGICHESS, SITTUYINCHESS, SETUPCHESS, PLACEMENTCHESS, SCHESS, ) UNSUPPORTED = (BUGHOUSECHESS, AIWOKCHESS, EUROSHOGICHESS, SETUPCHESS) # Chess variant groups ( VARIANTS_BLINDFOLD, VARIANTS_ODDS, VARIANTS_SHUFFLE, VARIANTS_OTHER, VARIANTS_OTHER_NONSTANDARD, VARIANTS_ASEAN, ) = range(6) # Action errors ( ACTION_ERROR_NOT_OUT_OF_TIME, ACTION_ERROR_CLOCK_NOT_STARTED, ACTION_ERROR_SWITCH_UNDERWAY, ACTION_ERROR_CLOCK_NOT_PAUSED, ACTION_ERROR_TOO_LARGE_UNDO, ACTION_ERROR_NONE_TO_ACCEPT, ACTION_ERROR_NONE_TO_WITHDRAW, ACTION_ERROR_NONE_TO_DECLINE, ) = range(8) # Game state reasons ( ABORTED_ADJUDICATION, ABORTED_AGREEMENT, ABORTED_COURTESY, ABORTED_EARLY, ABORTED_SERVER_SHUTDOWN, ADJOURNED_COURTESY, ABORTED_DISCONNECTION, ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION, ADJOURNED_SERVER_SHUTDOWN, ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK, DRAW_50MOVES, DRAW_ADJUDICATION, DRAW_AGREE, DRAW_CALLFLAG, DRAW_INSUFFICIENT, DRAW_EQUALMATERIAL, DRAW_LENGTH, DRAW_REPETITION, DRAW_STALEMATE, DRAW_KINGSINEIGHTROW, DRAW_BLACKINSUFFICIENTANDWHITETIME, DRAW_WHITEINSUFFICIENTANDBLACKTIME, WON_ADJUDICATION, WON_CALLFLAG, WON_DISCONNECTION, WON_MATE, WON_RESIGN, WON_LESSMATERIAL, WON_NOMATERIAL, WON_KINGEXPLODE, WON_KINGINCENTER, WON_THREECHECK, WON_KINGINEIGHTROW, WON_WIPEOUT, PRACTICE_GOAL_REACHED, WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, DISCONNECTED, UNKNOWN_REASON, ) = range(43) ABORTED_REASONS = ( ABORTED_ADJUDICATION, ABORTED_AGREEMENT, ABORTED_COURTESY, ABORTED_EARLY, ABORTED_SERVER_SHUTDOWN, ABORTED_DISCONNECTION, ) ADJOURNED_REASONS = ( ADJOURNED_COURTESY, ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION, ADJOURNED_SERVER_SHUTDOWN, ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK, ) UNDOABLE_REASONS = ( DRAW_50MOVES, DRAW_INSUFFICIENT, DRAW_EQUALMATERIAL, DRAW_REPETITION, DRAW_STALEMATE, DRAW_AGREE, DRAW_CALLFLAG, DRAW_KINGSINEIGHTROW, DRAW_BLACKINSUFFICIENTANDWHITETIME, DRAW_WHITEINSUFFICIENTANDBLACKTIME, WON_MATE, WON_NOMATERIAL, WON_CALLFLAG, WON_RESIGN, WON_LESSMATERIAL, WON_KINGEXPLODE, WON_KINGINCENTER, WON_THREECHECK, WON_KINGINEIGHTROW, WON_WIPEOUT, ) ADJUDICATION_REASONS = (DRAW_ADJUDICATION, WON_ADJUDICATION) DEATH_REASONS = (WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, DISCONNECTED) CALLFLAG_REASONS = (DRAW_CALLFLAG, WON_CALLFLAG) # Player actions RESIGNATION = "resignation" FLAG_CALL = "flag call" DRAW_OFFER = "draw offer" ABORT_OFFER = "abort offer" ADJOURN_OFFER = "adjourn offer" PAUSE_OFFER = "pause offer" RESUME_OFFER = "resume offer" SWITCH_OFFER = "switch offer" TAKEBACK_OFFER = "takeback offer" MATCH_OFFER = "match offer" HURRY_ACTION = "hurry action" CHAT_ACTION = "chat action" ACTIONS = ( RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, PAUSE_OFFER, RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, MATCH_OFFER, HURRY_ACTION, CHAT_ACTION, ) OFFERS = ( DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, PAUSE_OFFER, RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, MATCH_OFFER, ) INGAME_ACTIONS = ( RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, PAUSE_OFFER, SWITCH_OFFER, HURRY_ACTION, ) # A few nice to have boards FEN_EMPTY = "4k3/8/8/8/8/8/8/4K3 w - - 0 1" FEN_START = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" FEN_START_960 = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w HAha - 0 1" # Search values hashfALPHA, hashfBETA, hashfEXACT, hashfBAD = range(4) # Engine modes NORMAL, ANALYZING, INVERSE_ANALYZING = range(3) # Piece types # BPAWN is a pawn that moves in the opposite direction ( EMPTY, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, HAWK, ELEPHANT, BPAWN, ASEAN_WBISHOP, ASEAN_BBISHOP, ASEAN_QUEEN, ) = range(13) # Is sliding piece sliders = [ False, False, False, True, True, True, False, True, True, False, False, False, False, ] # Piece signs reprSign = ["", "P", "N", "B", "R", "Q", "K", "H", "E"] reprSignMakruk = ["", "P", "N", "S", "R", "M", "K"] reprSignSittuyin = ["", "P", "N", "S", "R", "F", "K"] chr2Sign = { "k": KING, "q": QUEEN, "r": ROOK, "b": BISHOP, "n": KNIGHT, "p": PAWN, "m": QUEEN, "s": BISHOP, "f": QUEEN, "h": HAWK, "e": ELEPHANT, } chrU2Sign = { "K": KING, "Q": QUEEN, "R": ROOK, "B": BISHOP, "N": KNIGHT, "P": PAWN, "M": QUEEN, "S": BISHOP, "F": QUEEN, "H": HAWK, "E": ELEPHANT, } # Move values ( NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, KING_PROMOTION, HAWK_PROMOTION, ELEPHANT_PROMOTION, HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, DROP, ) = range(16) PROMOTIONS = ( KING_PROMOTION, QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION, HAWK_PROMOTION, ELEPHANT_PROMOTION, ) GATINGS = (HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) # Algebraic notation types: Short, Long, Figure and Simpe SAN, LAN, FAN, AN = range(4) # Castling notation types: e.g., O-O, e1g1, e1h1 CASTLE_SAN, CASTLE_KK, CASTLE_KR = range(3) FAN_PIECES = [ ["", "♙", "♘", "♗", "♖", "♕", "♔", "H", "E", ""], ["", "♟", "♞", "♝", "♜", "♛", "♚", "h", "e", ""], ] # Castling values W_OO, W_OOO, B_OO, B_OOO = (2**i for i in range(4)) CAS_FLAGS = ((W_OOO, W_OO), (B_OOO, B_OO)) W_CASTLED, B_CASTLED = (2**i for i in range(2)) NB_OF_CASES = 64 # Cords types ( A1, B1, C1, D1, E1, F1, G1, H1, A2, B2, C2, D2, E2, F2, G2, H2, A3, B3, C3, D3, E3, F3, G3, H3, A4, B4, C4, D4, E4, F4, G4, H4, A5, B5, C5, D5, E5, F5, G5, H5, A6, B6, C6, D6, E6, F6, G6, H6, A7, B7, C7, D7, E7, F7, G7, H7, A8, B8, C8, D8, E8, F8, G8, H8, ) = range(64) reprCord = [ "a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", "a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2", "a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3", "a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4", "a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5", "a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6", "a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7", "a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8", ] reprFile = ["a", "b", "c", "d", "e", "f", "g", "h"] reprRank = ["1", "2", "3", "4", "5", "6", "7", "8"] # dictionary for giving the cord linked to the flattened index of a coordinate cordDic = {} for cord, name in enumerate(reprCord): cordDic[name] = cord # User interface # pagination in database game list FIRST_PAGE = 0 PREV_PAGE = -1 NEXT_PAGE = 1 # Hint modes OPENING, ENDGAME, HINT, SPY = ["opening", "endgame", "hint", "spy"] # Sound settings SOUND_MUTE, SOUND_BEEP, SOUND_SELECT, SOUND_URI = range(4) COUNT_OF_SOUNDS = 13 # Brush types. Send piece object for Piece brush CLEAR, ENPAS = range(2) # Main menu items GAME_MENU_ITEMS = ( "save_game1", "save_game_as1", "share_game", "export_position1", "analyze_game1", "properties1", "close1", ) ACTION_MENU_ITEMS = ( "abort", "adjourn", "draw", "pause1", "resume1", "undo1", "call_flag", "resign", "ask_to_move", ) VIEW_MENU_ITEMS = ("rotate_board1", "show_sidepanels", "hint_mode", "spy_mode") EDIT_MENU_ITEMS = ( "copy_pgn", "copy_fen", ) MENU_ITEMS = GAME_MENU_ITEMS + ACTION_MENU_ITEMS + VIEW_MENU_ITEMS + EDIT_MENU_ITEMS # Column name COLUMN_ROW_RESET = "column_row_reset" # Gtk icon name GTK_ICON_VIEW_REFRESH = "view-refresh" # Learn categories LECTURE, LESSON, PUZZLE, ENDGAME = range(4) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/eco.py0000644000175100001770000000635714614030313017252 0ustar00runnerdockerimport os import atexit import gettext import sqlite3 from pychess.System import conf from pychess.System.prefix import addDataPrefix, isInstalled ECO_MAIN_LANG = "en" ECO_LANGS = [ECO_MAIN_LANG, "da", "de", "es", "hu", "fr"] # EN = https://github.com/niklasf/eco # DA = https://da.wikipedia.org/wiki/Skak%C3%A5bninger # DE = https://de.wikipedia.org/wiki/ECO-Code # ES = https://es.wikipedia.org/wiki/Anexo:Aperturas_de_ajedrez # HU = https://hu.wikipedia.org/wiki/Sakkmegnyit%C3%A1sok_list%C3%A1ja # FR = https://fr.wikipedia.org/wiki/Liste_des_ouvertures_d'%C3%A9checs_suivant_le_code_ECO db_path = os.path.join(addDataPrefix("eco.db")) if os.path.exists(db_path): conn = sqlite3.connect(db_path, check_same_thread=False) atexit.register(conn.close) ECO_OK = True else: print("Warning: eco.db not found, please run pgn2ecodb.sh") ECO_OK = False if isInstalled(): mofile = gettext.find("pychess") else: mofile = gettext.find("pychess", localedir=addDataPrefix("lang")) if mofile is None: lang = ECO_MAIN_LANG else: lang = mofile.split(os.sep)[-3] def get_eco(hash, exactPosition=True): if not ECO_OK: return None cur = conn.cursor() select = "select eco, opening, variation, endline from openings where hash=? and hkey=? and lang=? and endline like ?" qh = hex(hash)[2:] qhkey = int(qh[-2:], 16) qlang = ECO_MAIN_LANG if conf.no_gettext or lang not in ECO_LANGS else lang qpos = 1 if exactPosition else "%" cur.execute(select, (qh, qhkey, qlang, qpos)) result = cur.fetchone() if result is None and qlang != ECO_MAIN_LANG: cur.execute(select, (qh, qhkey, ECO_MAIN_LANG, qpos)) result = cur.fetchone() return result def find_opening_fen(keyword): # Checks if not ECO_OK: return None if keyword is None: return None keyword = keyword.strip() if keyword == "": return None cur = conn.cursor() # Languages to check langs = [ECO_MAIN_LANG] lang = os.getenv("LANG", ECO_MAIN_LANG).lower() if lang in ECO_LANGS and lang != ECO_MAIN_LANG: langs = [lang] + langs # Execute the check for lang in langs: # Lookup by ECO query = "select fen from openings \ where mainline = 1 \ and endline = 1 \ and eco = ? \ and lang = ?" cur.execute(query, (keyword.upper(), lang)) result = cur.fetchone() if result is not None: return result[0] # Lookup by detailed name query = "select fen from openings \ where endline = 1 \ and lang = ? \ and ( lower(opening) like ? \ or lower(variation) like ? \ ) \ order by eco, opening, length(variation) \ limit 1" kwenh = ("%%%s%%" % keyword.lower()).replace("*", "%") cur.execute(query, (lang, kwenh, kwenh)) result = cur.fetchone() if result is not None: return result[0] # Nothing found return None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/elo.py0000644000175100001770000002437314614030313017261 0ustar00runnerdockerfrom pychess.Utils.const import WHITE, WHITEWON, BLACK, BLACKWON, DRAW def get_elo_rating_change(model, overridden_welo, overridden_belo): """http://www.fide.com/fide/handbook.html?id=197&view=article (§8.5, July 2017)""" def individual_elo_change(elo_player, elo_opponent, blitz): result = {} # Adaptation of the inbound parameters pprov = "?" in elo_player try: pval = int(elo_player.replace("?", "")) except ValueError: pval = 0 try: oval = int(elo_opponent.replace("?", "")) except ValueError: oval = 0 if pval == 0 or oval == 0: return None # Development coefficient - We ignore the age of the player and we assume that # he is already rated. The provisional flag '?' just denotes that he has not # played his first 30 games, but it may also denotes that he never had any # ranking. The calculation being based on the current game only, we can't # handle that second specific case if blitz: k = 20 else: if pprov: k = 40 else: if pval >= 2400: k = 10 else: k = 20 # Probability of gain d = pval - oval d = max(-400, d) d = min(400, d) # The approximate formula should not be used : result["pd"] = 1.0/(1+10**(-d/400)) pd = [ 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, ][abs(d)] / 100.0 result["pd"] = pd if pval >= oval else 1.0 - pd # New difference in Elo for loss, draw, win for score in [0, 1, 2]: result["diff%d" % score] = round(k * ([0, 0.5, 1][score] - result["pd"]), 1) # Result return result # Gathering of the data welo = model.tags["WhiteElo"] if overridden_welo is None else overridden_welo belo = model.tags["BlackElo"] if overridden_belo is None else overridden_belo blitz = model.timemodel.isBlitzFide() # Result result = [None, None] result[WHITE] = individual_elo_change(welo, belo, blitz) result[BLACK] = individual_elo_change(belo, welo, blitz) return None if result[WHITE] is None or result[BLACK] is None else result def get_elo_rating_change_str(model, player, overridden_welo, overridden_belo): """Determination of the ELO rating change""" erc = get_elo_rating_change(model, overridden_welo, overridden_belo) if erc is None: return "" erc = erc[player] # Status of the game if (model.status == WHITEWON and player == WHITE) or ( model.status == BLACKWON and player == BLACK ): d = 2 else: if (model.status == WHITEWON and player == BLACK) or ( model.status == BLACKWON and player == WHITE ): d = 0 else: if model.status == DRAW: d = 1 else: return "{:.0f}%, {:.1f} / {:.1f} / {:.1f}".format( 100 * erc["pd"], erc["diff0"], erc["diff1"], erc["diff2"] ) # Result return "{}{:.1f}".format("+" if erc["diff%d" % d] > 0 else "", erc["diff%d" % d]) def get_elo_rating_change_pgn(model, player): # One move must occur to validate the rating if model.ply == 0: return "" # Retrieval of the statistics for the player data = get_elo_rating_change(model, None, None) if data is None: return "" data = data[player] # Status of the game if (model.status == WHITEWON and player == WHITE) or ( model.status == BLACKWON and player == BLACK ): d = 2 else: if (model.status == WHITEWON and player == BLACK) or ( model.status == BLACKWON and player == WHITE ): d = 0 else: if model.status == DRAW: d = 1 else: return "" # Result is rounded to the nearest integer r = int(round(data["diff%s" % d], 0)) return "+%d" % r if r > 0 else str(r) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/eval.py0000755000175100001770000011547614614030313017441 0ustar00runnerdocker# DEPRECATED # SHOULD ONLY BE USED AS A REFERENCE TO MAKE leval from array import array from pychess.Utils.const import ( PAWN, WHITE, KNIGHT, QUEEN, KING, BISHOP, ROOK, BLACK, B_OOO, B_OO, W_OO, W_OOO, DRAW, RUNNING, WHITEWON, HAWK, ELEPHANT, ) pieceValues = [0, 900, 500, 350, 300, 100] # these tables will be used for positional bonuses: # whiteknight = array( "b", [ -20, -35, -10, -10, -10, -10, -35, -20, -10, 0, 0, 3, 3, 0, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 15, 25, 25, 25, 25, 15, -10, -20, -10, -10, -10, -10, -10, -10, -20, ], ) blackknight = array( "b", [ -20, -10, -10, -10, -10, -10, -10, -20, -10, 15, 25, 25, 25, 25, 15, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 0, 3, 3, 0, 0, -10, -20, -35, -10, -10, -10, -10, -35, -20, ], ) whitepawn = array( "b", [ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 7, 7, 5, 5, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 10, 20, 20, 10, 5, 5, 12, 18, 18, 27, 27, 18, 18, 18, 25, 30, 30, 35, 35, 35, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0, ], ) blackpawn = array( "b", [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 35, 35, 35, 30, 25, 12, 18, 18, 27, 27, 18, 18, 18, 0, 0, 10, 20, 20, 10, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0, 0, ], ) whiteking = array( "h", [ -100, 15, 15, -20, 10, 4, 15, -100, -250, -200, -150, -100, -100, -150, -200, -250, -350, -300, -300, -250, -250, -300, -300, -350, -400, -400, -400, -350, -350, -400, -400, -400, -450, -450, -450, -450, -450, -450, -450, -450, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, ], ) blackking = array( "h", [ -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -450, -450, -450, -450, -450, -450, -450, -450, -400, -400, -400, -350, -350, -400, -400, -400, -350, -300, -300, -250, -250, -300, -300, -350, -250, -200, -150, -100, -100, -150, -200, -250, -100, 7, 15, -20, 10, 4, 15, -100, ], ) whitequeen = array( "b", [ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 10, 5, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -40, -40, -40, -40, -40, -40, -40, -40, -60, -40, -40, -60, -60, -40, -40, -60, -30, -30, -30, -30, -30, -30, -30, -30, 0, 0, 3, 3, 3, 3, 3, 0, 5, 5, 5, 10, 10, 7, 5, 5, ], ) blackqueen = array( "b", [ 5, 5, 5, 10, 10, 7, 5, 5, 0, 0, 3, 3, 3, 3, 3, 0, -30, -30, -30, -30, -30, -30, -30, -30, -60, -40, -40, -60, -60, -40, -40, -60, -40, -40, -40, -40, -40, -40, -40, -40, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, ], ) whiterook = array( "b", [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 10, 0, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 0, 10, 15, 20, 20, 15, 10, 0, 10, 15, 20, 25, 25, 20, 15, 10, ], ) blackrook = array( "b", [ 10, 15, 20, 25, 25, 20, 15, 10, 0, 10, 15, 20, 20, 15, 10, 0, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, ], ) whitebishop = array( "b", [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5, ], ) blackbishop = array( "b", [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5, ], ) pos = { KNIGHT: { BLACK: array( "b", [ -20, -10, -10, -10, -10, -10, -10, -20, -10, 15, 25, 25, 25, 25, 15, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 0, 3, 3, 0, 0, -10, -20, -35, -10, -10, -10, -10, -35, -20, ], ), WHITE: array( "b", [ -20, -35, -10, -10, -10, -10, -35, -20, -10, 0, 0, 3, 3, 0, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 15, 25, 25, 25, 25, 15, -10, -20, -10, -10, -10, -10, -10, -10, -20, ], ), }, PAWN: { WHITE: array( "b", [ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 7, 7, 5, 5, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 10, 20, 20, 10, 5, 5, 12, 18, 18, 27, 27, 18, 18, 18, 25, 30, 30, 35, 35, 35, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0, ], ), BLACK: array( "b", [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 35, 35, 35, 30, 25, 12, 18, 18, 27, 27, 18, 18, 18, 0, 0, 10, 20, 20, 10, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0, 0, ], ), }, KING: { WHITE: array( "h", [ -100, 15, 15, -20, 10, 4, 15, -100, -250, -200, -150, -100, -100, -150, -200, -250, -350, -300, -300, -250, -250, -300, -300, -350, -400, -400, -400, -350, -350, -400, -400, -400, -450, -450, -450, -450, -450, -450, -450, -450, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, ], ), BLACK: array( "h", [ -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -450, -450, -450, -450, -450, -450, -450, -450, -400, -400, -400, -350, -350, -400, -400, -400, -350, -300, -300, -250, -250, -300, -300, -350, -250, -200, -150, -100, -100, -150, -200, -250, -100, 7, 15, -20, 10, 4, 15, -100, ], ), }, QUEEN: { BLACK: array( "b", [ 5, 5, 5, 10, 10, 7, 5, 5, 0, 0, 3, 3, 3, 3, 3, 0, -30, -30, -30, -30, -30, -30, -30, -30, -60, -40, -40, -60, -60, -40, -40, -60, -40, -40, -40, -40, -40, -40, -40, -40, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, ], ), WHITE: array( "b", [ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 10, 5, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -40, -40, -40, -40, -40, -40, -40, -40, -60, -40, -40, -60, -60, -40, -40, -60, -30, -30, -30, -30, -30, -30, -30, -30, 0, 0, 3, 3, 3, 3, 3, 0, 5, 5, 5, 10, 10, 7, 5, 5, ], ), }, ROOK: { WHITE: array( "b", [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 10, 0, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 0, 10, 15, 20, 20, 15, 10, 0, 10, 15, 20, 25, 25, 20, 15, 10, ], ), BLACK: array( "b", [ 10, 15, 20, 25, 25, 20, 15, 10, 0, 10, 15, 20, 20, 15, 10, 0, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, ], ), }, BISHOP: { WHITE: array( "b", [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5, ], ), BLACK: array( "b", [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5, ], ), }, } pos[HAWK] = {WHITE: pos[BISHOP][WHITE], BLACK: pos[BISHOP][BLACK]} pos[ELEPHANT] = {WHITE: pos[ROOK][WHITE], BLACK: pos[ROOK][BLACK]} endking = array( "b", [ -5, -3, -1, 0, 0, -1, -3, -5, -3, 10, 10, 10, 10, 10, 10, -3, -1, 10, 25, 25, 25, 25, 10, -1, 0, 10, 25, 30, 30, 25, 10, 0, 0, 10, 25, 30, 30, 25, 10, 0, -1, 10, 25, 25, 25, 25, 10, -1, -3, 10, 10, 10, 10, 10, 10, -3, -5, -3, -1, 0, 0, -1, -3, -5, ], ) # Init KingTropism table # Sjeng uses max instead of min.. tropismTable = [] for px in range(8): for py in range(8): for kx in range(8): for ky in range(8): knight = abs(ky - py) + abs(kx - px) rook = min(abs(ky - py), abs(kx - px)) * 2 + 5 queen = min(abs(ky - py), abs(kx - px)) + 5 tropismTable.append(knight + rook * 20 + queen * 20 * 20) tropismArray = array("I", tropismTable) def lookUpTropism(px, py, kx, ky, piece): value = tropismArray[ky + kx * 8 + py * 8 * 8 + px * 8 * 8 * 8] knight = value % 20 rook = (value - knight) / 20 % 20 queen = (value - knight - rook * 20) / 20 / 20 if piece == knight: return knight - 5 if piece == rook: return rook - 5 return queen - 5 def evaluateComplete(board, color=WHITE): """A detailed evaluation function, taking into account several positional factors""" if board.status == RUNNING: analyzePawnStructure(board) status = ( evalMaterial(board) + evalPawnStructure(board) + evalBadBishops(board) + evalDevelopment(board) + evalCastling(board) + evalRookBonus(board) + evalKingTropism(board) ) elif board.status == DRAW: status = 0 elif board.status == WHITEWON: status = 9999 else: status = -9999 return (color == WHITE and [status] or [-status])[0] def evalMaterial(board): materialValue = [0, 0] numPawns = [0, 0] for row in board.data: for piece in row: if not piece: continue materialValue[piece.color] += pieceValues[piece.sign] if piece.sign == PAWN: numPawns[piece.color] += 1 # If both sides are equal, no need to compute anything! if materialValue[BLACK] == materialValue[WHITE]: return 0 matTotal = materialValue[BLACK] + materialValue[WHITE] # Who is leading the game, material-wise? if materialValue[BLACK] > materialValue[WHITE]: # Black leading matDiff = materialValue[BLACK] - materialValue[WHITE] val = min(2400, matDiff) + (matDiff * (12000 - matTotal) * numPawns[BLACK]) / ( 6400 * (numPawns[BLACK] + 1) ) return -val else: # White leading matDiff = materialValue[WHITE] - materialValue[BLACK] val = min(2400, matDiff) + (matDiff * (12000 - matTotal) * numPawns[WHITE]) / ( 6400 * (numPawns[WHITE] + 1) ) return val def evalKingTropism(board): """All other things being equal, having your Knights, Queens and Rooks close to the opponent's king is a good thing""" score = 0 try: wking, bking = board.kings wky, wkx = wking.cords bky, bkx = bking.cords except AttributeError: return 0 for py, row in enumerate(board.data): for px, piece in enumerate(row): if piece and piece.color == WHITE: if piece.sign == KNIGHT: score += lookUpTropism(px, py, bkx, bky, KNIGHT) elif piece.sign == ROOK: score += lookUpTropism(px, py, bkx, bky, ROOK) elif piece.sign == QUEEN: score += lookUpTropism(px, py, bkx, bky, QUEEN) elif piece and piece.color == BLACK: if piece.sign == KNIGHT: score -= lookUpTropism(px, py, wkx, wky, KNIGHT) elif piece.sign == ROOK: score -= lookUpTropism(px, py, wkx, wky, ROOK) elif piece.sign == QUEEN: score -= lookUpTropism(px, py, wkx, wky, QUEEN) return score def evalRookBonus(board): """Rooks are more effective on the seventh rank and on open files""" score = 0 for y_loc, row in enumerate(board.data): for x_loc, piece in enumerate(row): if not piece or not piece.sign == ROOK: continue if pieceCount <= 6: # We should try to keep the rooks at the back lines if y_loc in (0, 7): score += piece.color == WHITE and 12 or -12 # Is this rook on a semi- or completely open file? noblack = blackPawnFileBins[x_loc] == 0 and 1 or 0 nowhite = whitePawnFileBins[x_loc] == 0 and 1 or 0 if piece.color == WHITE: if noblack: score += (noblack + nowhite) * 6 else: score += nowhite * 8 else: if nowhite: score -= (noblack + nowhite) * 6 else: score -= nowhite * 8 return score def evalDevelopment(board): """Mostly useful in the opening, this term encourages the machine to move its bishops and knights into play, to control the center with its queen's and king's pawns""" score = 0 # Test endgame if pieceCount <= 8: wking, bking = board.kings score += endking[wking.y * 8 + wking.x] score -= endking[bking.y * 8 + bking.x] return score for y_loc, row in enumerate(board.data): for x_loc, piece in enumerate(row): if not piece: continue # s = pos[piece.sign][piece.color][y*8+x] if piece.color == WHITE: if piece.sign == PAWN: score += whitepawn[x_loc + y_loc * 8] elif piece.sign == KNIGHT: score += whiteknight[x_loc + y_loc * 8] elif piece.sign == BISHOP: score += whitebishop[x_loc + y_loc * 8] elif piece.sign == ROOK: score += whiterook[x_loc + y_loc * 8] elif piece.sign == QUEEN: score += whitequeen[x_loc + y_loc * 8] elif piece.sign == KING: score += whiteking[x_loc + y_loc * 8] else: if piece.sign == PAWN: score -= blackpawn[x_loc + y_loc * 8] elif piece.sign == KNIGHT: score -= blackknight[x_loc + y_loc * 8] elif piece.sign == BISHOP: score -= blackbishop[x_loc + y_loc * 8] elif piece.sign == ROOK: score -= blackrook[x_loc + y_loc * 8] elif piece.sign == QUEEN: score -= blackqueen[x_loc + y_loc * 8] elif piece.sign == KING: score -= blackking[x_loc + y_loc * 8] return score def evalCastling(board): """Used to encourage castling""" if pieceCount <= 6: return 0 score = 0 for color, mod in ((WHITE, 1), (BLACK, -1)): mainrow = board.data[int(3.5 - 3.5 * mod)] # It is good to have a pawn in the king column for x_loc, piece in enumerate(mainrow): if piece and piece.sign == KING and piece.color == color: bin = color == WHITE and whitePawnFileBins or blackPawnFileBins if not bin[x_loc]: score -= 10 * mod break kside = color == BLACK and B_OO or W_OO qside = color == BLACK and B_OOO or W_OOO # Being castled deserves a bonus if board.hasCastled[color]: score += 15 * mod continue # Biggest penalty if you can't castle at all if not board.castling & (qside | kside): score -= 60 * mod # Penalty if you can only castle kingside elif not board.castling & qside: score -= 30 * mod # Bigger penalty if you can only castle queenside elif not board.castling & kside: score -= 45 * mod return score def evalBadBishops(board): """Bishops may be limited in their movement if there are too many pawns on squares of their color""" score = 0 for y_loc, row in enumerate(board.data): for x_loc, piece in enumerate(row): if not piece or not piece.sign == BISHOP: continue mod = piece.color == WHITE and 1 or -1 # What is the bishop's square color? lightsq = x_loc % 2 + y_loc % 2 == 1 if lightsq: score -= pawnColorBins[0] * 7 * mod else: score -= pawnColorBins[1] * 7 * mod return score def evalPawnStructure(board): """Given the pawn formations, penalize or bonify the position according to the features it contains""" score = 0 for x_loc in range(8): # First, look for doubled pawns # In chess, two or more pawns on the same file usually hinder each other, # so we assign a penalty if whitePawnFileBins[x_loc] > 1: score -= 10 if blackPawnFileBins[x_loc] > 1: score += 10 # Now, look for an isolated pawn, i.e., one which has no neighbor pawns # capable of protecting it from attack at some point in the future if x_loc == 0 and whitePawnFileBins[x_loc] > 0 and whitePawnFileBins[1] == 0: score -= 15 elif x_loc == 7 and whitePawnFileBins[x_loc] > 0 and whitePawnFileBins[6] == 0: score -= 15 elif ( whitePawnFileBins[x_loc] > 0 and whitePawnFileBins[x_loc - 1] == 0 and whitePawnFileBins[x_loc + 1] == 0 ): score -= 15 if x_loc == 0 and blackPawnFileBins[x_loc] > 0 and blackPawnFileBins[1] == 0: score += 15 elif x_loc == 7 and blackPawnFileBins[x_loc] > 0 and blackPawnFileBins[6] == 0: score += 15 elif ( blackPawnFileBins[x_loc] > 0 and blackPawnFileBins[x_loc - 1] == 0 and blackPawnFileBins[x_loc + 1] == 0 ): score += 15 # Penalize pawn rams, because they restrict movement score -= 8 * pawnRams return score whitePawnFileBins = [0] * 8 pawnColorBins = [0] * 2 pawnRams = 0 blackPawnFileBins = [0] * 8 def analyzePawnStructure(board): """Look at pawn positions to be able to detect features such as doubled, isolated or passed pawns""" global whitePawnFileBins, blackPawnFileBins, pawnColorBins, pawnRams whitePawnFileBins = [0] * 8 blackPawnFileBins = [0] * 8 pawnColorBins[0] = 0 pawnColorBins[1] = 0 # Whiterams-Blackrams pawnRams = 0 global pieceCount pieceCount = 0 data = board.data for y, row in enumerate(data[::-1]): for x, piece in enumerate(row): if not piece: continue if piece.sign == PAWN and y not in (0, 7): if piece.color == WHITE: whitePawnFileBins[x] += 1 else: blackPawnFileBins[x] += 1 # Is this pawn on a white or a black square? if y % 2 == x % 2: pawnColorBins[0] += 1 else: pawnColorBins[1] += 1 # Look for a "pawn ram", i.e., a situation where a black pawn # is located in the square immediately ahead of this one. if piece.color == WHITE: ahead = data[y + 1][x] else: ahead = data[y - 1][x] if ahead and ahead.sign == PAWN and ahead.color == piece.color: if piece.color == WHITE: pawnRams += 1 else: pawnRams -= 1 elif piece: pieceCount += 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/isoCountries.py0000644000175100001770000002351614614030313021166 0ustar00runnerdockerfrom collections import namedtuple # https://www.iso.org/obp/ui/#iso:pub:PUB500001:en ISO3166 = namedtuple("ISO3166", "iso2, country") ISO3166_LIST = [ ISO3166("unknown", _("Unknown")), # Specific to pyChess: ISO3166("C", _("Computer")), ISO3166("ad", _("Andorra")), ISO3166("ae", _("United Arab Emirates")), ISO3166("af", _("Afghanistan")), ISO3166("ag", _("Antigua and Barbuda")), ISO3166("ai", _("Anguilla")), ISO3166("al", _("Albania")), ISO3166("am", _("Armenia")), # Discontinued: ISO3166("an", _("Netherlands Antilles")), ISO3166("ao", _("Angola")), ISO3166("aq", _("Antarctica")), ISO3166("ar", _("Argentina")), ISO3166("as", _("American Samoa")), ISO3166("at", _("Austria")), ISO3166("au", _("Australia")), ISO3166("aw", _("Aruba")), ISO3166("ax", _("Åland Islands")), ISO3166("az", _("Azerbaijan")), ISO3166("ba", _("Bosnia and Herzegovina")), ISO3166("bb", _("Barbados")), ISO3166("bd", _("Bangladesh")), ISO3166("be", _("Belgium")), ISO3166("bf", _("Burkina Faso")), ISO3166("bg", _("Bulgaria")), ISO3166("bh", _("Bahrain")), ISO3166("bi", _("Burundi")), ISO3166("bj", _("Benin")), ISO3166("bl", _("Saint Barthélemy")), ISO3166("bm", _("Bermuda")), ISO3166("bn", _("Brunei Darussalam")), ISO3166("bo", _("Bolivia (Plurinational State of)")), ISO3166("bq", _("Bonaire, Sint Eustatius and Saba")), ISO3166("br", _("Brazil")), ISO3166("bs", _("Bahamas")), ISO3166("bt", _("Bhutan")), ISO3166("bv", _("Bouvet Island")), ISO3166("bw", _("Botswana")), ISO3166("by", _("Belarus")), ISO3166("bz", _("Belize")), ISO3166("ca", _("Canada")), ISO3166("cc", _("Cocos (Keeling) Islands")), ISO3166("cd", _("Congo (the Democratic Republic of the)")), ISO3166("cf", _("Central African Republic")), ISO3166("cg", _("Congo")), ISO3166("ch", _("Switzerland")), ISO3166("ci", _("Côte d'Ivoire")), ISO3166("ck", _("Cook Islands")), ISO3166("cl", _("Chile")), ISO3166("cm", _("Cameroon")), ISO3166("cn", _("China")), ISO3166("co", _("Colombia")), ISO3166("cr", _("Costa Rica")), ISO3166("cu", _("Cuba")), ISO3166("cv", _("Cabo Verde")), ISO3166("cw", _("Curaçao")), ISO3166("cx", _("Christmas Island")), ISO3166("cy", _("Cyprus")), ISO3166("cz", _("Czechia")), ISO3166("de", _("Germany")), ISO3166("dj", _("Djibouti")), ISO3166("dk", _("Denmark")), ISO3166("dm", _("Dominica")), ISO3166("do", _("Dominican Republic")), ISO3166("dz", _("Algeria")), ISO3166("ec", _("Ecuador")), ISO3166("ee", _("Estonia")), ISO3166("eg", _("Egypt")), ISO3166("eh", _("Western Sahara")), ISO3166("er", _("Eritrea")), ISO3166("es", _("Spain")), ISO3166("et", _("Ethiopia")), ISO3166("fi", _("Finland")), ISO3166("fj", _("Fiji")), ISO3166("fk", _("Falkland Islands [Malvinas]")), ISO3166("fm", _("Micronesia (Federated States of)")), ISO3166("fo", _("Faroe Islands")), ISO3166("fr", _("France")), ISO3166("ga", _("Gabon")), ISO3166("gb", _("United Kingdom of Great Britain and Northern Ireland")), ISO3166("gd", _("Grenada")), ISO3166("ge", _("Georgia")), ISO3166("gf", _("French Guiana")), ISO3166("gg", _("Guernsey")), ISO3166("gh", _("Ghana")), ISO3166("gi", _("Gibraltar")), ISO3166("gl", _("Greenland")), ISO3166("gm", _("Gambia")), ISO3166("gn", _("Guinea")), ISO3166("gp", _("Guadeloupe")), ISO3166("gq", _("Equatorial Guinea")), ISO3166("gr", _("Greece")), ISO3166("gs", _("South Georgia and the South Sandwich Islands")), ISO3166("gt", _("Guatemala")), ISO3166("gu", _("Guam")), ISO3166("gw", _("Guinea-Bissau")), ISO3166("gy", _("Guyana")), ISO3166("hk", _("Hong Kong")), ISO3166("hm", _("Heard Island and McDonald Islands")), ISO3166("hn", _("Honduras")), ISO3166("hr", _("Croatia")), ISO3166("ht", _("Haiti")), ISO3166("hu", _("Hungary")), ISO3166("id", _("Indonesia")), ISO3166("ie", _("Ireland")), ISO3166("il", _("Israel")), ISO3166("im", _("Isle of Man")), ISO3166("in", _("India")), ISO3166("io", _("British Indian Ocean Territory")), ISO3166("iq", _("Iraq")), ISO3166("ir", _("Iran (Islamic Republic of)")), ISO3166("is", _("Iceland")), ISO3166("it", _("Italy")), ISO3166("je", _("Jersey")), ISO3166("jm", _("Jamaica")), ISO3166("jo", _("Jordan")), ISO3166("jp", _("Japan")), ISO3166("ke", _("Kenya")), ISO3166("kg", _("Kyrgyzstan")), ISO3166("kh", _("Cambodia")), ISO3166("ki", _("Kiribati")), ISO3166("km", _("Comoros")), ISO3166("kn", _("Saint Kitts and Nevis")), ISO3166("kp", _("Korea (the Democratic People's Republic of)")), ISO3166("kr", _("Korea (the Republic of)")), ISO3166("kw", _("Kuwait")), ISO3166("ky", _("Cayman Islands")), ISO3166("kz", _("Kazakhstan")), ISO3166("la", _("Lao People's Democratic Republic")), ISO3166("lb", _("Lebanon")), ISO3166("lc", _("Saint Lucia")), ISO3166("li", _("Liechtenstein")), ISO3166("lk", _("Sri Lanka")), ISO3166("lr", _("Liberia")), ISO3166("ls", _("Lesotho")), ISO3166("lt", _("Lithuania")), ISO3166("lu", _("Luxembourg")), ISO3166("lv", _("Latvia")), ISO3166("ly", _("Libya")), ISO3166("ma", _("Morocco")), ISO3166("mc", _("Monaco")), ISO3166("md", _("Moldova (the Republic of)")), ISO3166("me", _("Montenegro")), ISO3166("mf", _("Saint Martin (French part)")), ISO3166("mg", _("Madagascar")), ISO3166("mh", _("Marshall Islands")), ISO3166("mk", _("Macedonia (the former Yugoslav Republic of)")), ISO3166("ml", _("Mali")), ISO3166("mm", _("Myanmar")), ISO3166("mn", _("Mongolia")), ISO3166("mo", _("Macao")), ISO3166("mp", _("Northern Mariana Islands")), ISO3166("mq", _("Martinique")), ISO3166("mr", _("Mauritania")), ISO3166("ms", _("Montserrat")), ISO3166("mt", _("Malta")), ISO3166("mu", _("Mauritius")), ISO3166("mv", _("Maldives")), ISO3166("mw", _("Malawi")), ISO3166("mx", _("Mexico")), ISO3166("my", _("Malaysia")), ISO3166("mz", _("Mozambique")), ISO3166("na", _("Namibia")), ISO3166("nc", _("New Caledonia")), ISO3166("ne", _("Niger")), ISO3166("nf", _("Norfolk Island")), ISO3166("ng", _("Nigeria")), ISO3166("ni", _("Nicaragua")), ISO3166("nl", _("Netherlands")), ISO3166("no", _("Norway")), ISO3166("np", _("Nepal")), ISO3166("nr", _("Nauru")), ISO3166("nu", _("Niue")), ISO3166("nz", _("New Zealand")), ISO3166("om", _("Oman")), ISO3166("pa", _("Panama")), ISO3166("pe", _("Peru")), ISO3166("pf", _("French Polynesia")), ISO3166("pg", _("Papua New Guinea")), ISO3166("ph", _("Philippines")), ISO3166("pk", _("Pakistan")), ISO3166("pl", _("Poland")), ISO3166("pm", _("Saint Pierre and Miquelon")), ISO3166("pn", _("Pitcairn")), ISO3166("pr", _("Puerto Rico")), ISO3166("ps", _("Palestine, State of")), ISO3166("pt", _("Portugal")), ISO3166("pw", _("Palau")), ISO3166("py", _("Paraguay")), ISO3166("qa", _("Qatar")), ISO3166("re", _("Réunion")), ISO3166("ro", _("Romania")), ISO3166("rs", _("Serbia")), ISO3166("ru", _("Russian Federation")), ISO3166("rw", _("Rwanda")), ISO3166("sa", _("Saudi Arabia")), ISO3166("sb", _("Solomon Islands")), ISO3166("sc", _("Seychelles")), ISO3166("sd", _("Sudan")), ISO3166("se", _("Sweden")), ISO3166("sg", _("Singapore")), ISO3166("sh", _("Saint Helena, Ascension and Tristan da Cunha")), ISO3166("si", _("Slovenia")), ISO3166("sj", _("Svalbard and Jan Mayen")), ISO3166("sk", _("Slovakia")), ISO3166("sl", _("Sierra Leone")), ISO3166("sm", _("San Marino")), ISO3166("sn", _("Senegal")), ISO3166("so", _("Somalia")), ISO3166("sr", _("Suriname")), ISO3166("ss", _("South Sudan")), ISO3166("st", _("Sao Tome and Principe")), ISO3166("sv", _("El Salvador")), ISO3166("sx", _("Sint Maarten (Dutch part)")), ISO3166("sy", _("Syrian Arab Republic")), ISO3166("sz", _("Eswatini")), ISO3166("tc", _("Turks and Caicos Islands")), ISO3166("td", _("Chad")), ISO3166("tf", _("French Southern Territories")), ISO3166("tg", _("Togo")), ISO3166("th", _("Thailand")), ISO3166("tj", _("Tajikistan")), ISO3166("tk", _("Tokelau")), ISO3166("tl", _("Timor-Leste")), ISO3166("tm", _("Turkmenistan")), ISO3166("tn", _("Tunisia")), ISO3166("to", _("Tonga")), # Discontinued: ISO3166("tp", _("East Timor")), ISO3166("tr", _("Turkey")), ISO3166("tt", _("Trinidad and Tobago")), ISO3166("tv", _("Tuvalu")), ISO3166("tw", _("Taiwan (Province of China)")), ISO3166("tz", _("Tanzania, United Republic of")), ISO3166("ua", _("Ukraine")), ISO3166("ug", _("Uganda")), ISO3166("um", _("United States Minor Outlying Islands")), ISO3166("us", _("United States of America")), ISO3166("uy", _("Uruguay")), ISO3166("uz", _("Uzbekistan")), ISO3166("va", _("Holy See")), ISO3166("vc", _("Saint Vincent and the Grenadines")), ISO3166("ve", _("Venezuela (Bolivarian Republic of)")), ISO3166("vg", _("Virgin Islands (British)")), ISO3166("vi", _("Virgin Islands (U.S.)")), ISO3166("vn", _("Viet Nam")), ISO3166("vu", _("Vanuatu")), ISO3166("wf", _("Wallis and Futuna")), ISO3166("ws", _("Samoa")), ISO3166("ye", _("Yemen")), ISO3166("yt", _("Mayotte")), # Discontinued: ISO3166("yu", _("Yugoslavia")), ISO3166("za", _("South Africa")), ISO3166("zm", _("Zambia")), ISO3166("zw", _("Zimbabwe")), ] # Bubble sort for the translated countries for i in range(len(ISO3166_LIST) - 1, 1, -1): for j in range(1, i - 1): if ISO3166_LIST[i].country < ISO3166_LIST[j].country: tmp = ISO3166_LIST[i] ISO3166_LIST[i] = ISO3166_LIST[j] ISO3166_LIST[j] = tmp ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/logic.py0000755000175100001770000002216614614030313017600 0ustar00runnerdocker""" This module contains chess logic functins for the pychess client. They are based upon the lutils modules, but supports standard object types and is therefore not as fast. """ from .lutils import lmovegen from .lutils.validator import validateMove from .lutils.lmove import FCORD, TCORD from .lutils import ldraw from .Cord import Cord from .Move import Move from .const import ( LOSERSCHESS, WHITE, WHITEWON, BLACKWON, WON_NOMATERIAL, KING, HORDECHESS, SUICIDECHESS, GIVEAWAYCHESS, ATOMICCHESS, WON_KINGEXPLODE, KINGOFTHEHILLCHESS, BLACK, DRAW, CRAZYHOUSECHESS, WON_KINGINCENTER, THREECHECKCHESS, WON_THREECHECK, WON_MATE, DRAW_STALEMATE, DRAW_INSUFFICIENT, DRAW_EQUALMATERIAL, WON_LESSMATERIAL, WON_WIPEOUT, DRAW_REPETITION, WON_KINGINEIGHTROW, RACINGKINGSCHESS, DRAW_50MOVES, DRAW_KINGSINEIGHTROW, RUNNING, ENPASSANT, UNKNOWN_REASON, ) from .lutils.bitboard import iterBits from .lutils.attack import getAttacks from pychess.Variants.suicide import pieceCount from pychess.Variants.losers import testKingOnly from pychess.Variants.atomic import kingExplode from pychess.Variants.kingofthehill import testKingInCenter from pychess.Variants.threecheck import checkCount from pychess.Variants.racingkings import testKingInEightRow, test2KingInEightRow def getDestinationCords(board, cord): tcords = [] for move in lmovegen.genAllMoves(board.board): if FCORD(move) == cord.cord: if not board.board.willLeaveInCheck(move): tcords.append(Cord(TCORD(move))) return tcords def isClaimableDraw(board): lboard = board.board if lboard.repetitionCount() >= 3: return True if ldraw.testFifty(lboard): return True return False def playerHasMatingMaterial(board, playercolor): if board.variant == CRAZYHOUSECHESS: return True lboard = board.board return ldraw.testPlayerMatingMaterial(lboard, playercolor) def getStatus(board): lboard = board.board if board.variant == LOSERSCHESS: if testKingOnly(lboard): if board.color == WHITE: status = WHITEWON else: status = BLACKWON return status, WON_NOMATERIAL elif board.variant == SUICIDECHESS or board.variant == GIVEAWAYCHESS: if pieceCount(lboard, lboard.color) == 0: if board.color == WHITE: status = WHITEWON else: status = BLACKWON return status, WON_NOMATERIAL elif board.variant == HORDECHESS: if pieceCount(lboard, lboard.color) == 0 and board.color == WHITE: status = BLACKWON return status, WON_WIPEOUT elif board.variant == ATOMICCHESS: if lboard.boards[board.color][KING] == 0: if board.color == WHITE: status = BLACKWON else: status = WHITEWON return status, WON_KINGEXPLODE elif board.variant == KINGOFTHEHILLCHESS: if testKingInCenter(lboard): if board.color == BLACK: status = WHITEWON else: status = BLACKWON return status, WON_KINGINCENTER elif board.variant == THREECHECKCHESS: if checkCount(lboard, lboard.color) == 3: if board.color == BLACK: status = WHITEWON else: status = BLACKWON return status, WON_THREECHECK elif board.variant == RACINGKINGSCHESS: if test2KingInEightRow(lboard): return DRAW, DRAW_KINGSINEIGHTROW elif testKingInEightRow(lboard): can_save = False for move in lmovegen.genAllMoves(lboard): if lboard.willGiveCheck(move) or lboard.willLeaveInCheck(move): continue lboard.applyMove(move) if testKingInEightRow(lboard): can_save = True lboard.popMove() break lboard.popMove() if not can_save: if board.color == BLACK: status = WHITEWON else: status = BLACKWON return status, WON_KINGINEIGHTROW else: if ldraw.testMaterial(lboard): return DRAW, DRAW_INSUFFICIENT hasMove = False for move in lmovegen.genAllMoves(lboard): if board.variant == ATOMICCHESS: if kingExplode(lboard, move, 1 - board.color) and not kingExplode( lboard, move, board.color ): hasMove = True break elif kingExplode(lboard, move, board.color): continue lboard.applyMove(move) if lboard.opIsChecked(): lboard.popMove() continue hasMove = True lboard.popMove() break if not hasMove: if lboard.isChecked(): if board.variant == LOSERSCHESS: if board.color == WHITE: status = WHITEWON else: status = BLACKWON else: if board.color == WHITE: status = BLACKWON else: status = WHITEWON return status, WON_MATE else: if board.variant == LOSERSCHESS or board.variant == GIVEAWAYCHESS: if board.color == WHITE: status = WHITEWON else: status = BLACKWON return status, DRAW_STALEMATE elif board.variant == SUICIDECHESS: if pieceCount(lboard, WHITE) == pieceCount(lboard, BLACK): return status, DRAW_EQUALMATERIAL else: if board.color == WHITE and pieceCount(lboard, WHITE) < pieceCount( lboard, BLACK ): status = WHITEWON else: status = BLACKWON return status, WON_LESSMATERIAL else: return DRAW, DRAW_STALEMATE if lboard.repetitionCount() >= 3: return DRAW, DRAW_REPETITION if ldraw.testFifty(lboard): return DRAW, DRAW_50MOVES return RUNNING, UNKNOWN_REASON def standard_validate(board, move): return validateMove(board.board, move.move) and not board.board.willLeaveInCheck( move.move ) def validate(board, move): if board.variant == LOSERSCHESS: capture = move.flag == ENPASSANT or board[move.cord1] is not None if capture: return standard_validate(board, move) else: can_capture = False can_escape_with_capture = False ischecked = board.board.isChecked() for c in lmovegen.genCaptures(board.board): if board.board.willLeaveInCheck(c): continue else: can_capture = True if ischecked: can_escape_with_capture = True break if can_capture: if ischecked and not can_escape_with_capture: return standard_validate(board, move) else: return False else: return standard_validate(board, move) elif board.variant == SUICIDECHESS: capture = move.flag == ENPASSANT or board[move.cord1] is not None if capture: return standard_validate(board, move) else: can_capture = False for c in lmovegen.genCaptures(board.board): can_capture = True if can_capture: return False else: return standard_validate(board, move) elif board.variant == ATOMICCHESS: # Moves exploding our king are not allowed if kingExplode(board.board, move.move, board.color): return False # Exploding oppont king takes precedence over mate elif kingExplode(board.board, move.move, 1 - board.color) and validateMove( board.board, move.move ): return True else: return standard_validate(board, move) elif board.variant == RACINGKINGSCHESS: # Giving check is forbidden if board.board.willGiveCheck(move.move): return False else: return standard_validate(board, move) else: return standard_validate(board, move) def getMoveKillingKing(board): """Returns a move from the current color, able to capture the opponent king""" lboard = board.board color = lboard.color opking = lboard.kings[1 - color] for cord in iterBits(getAttacks(lboard, opking, color)): return Move(Cord(cord), Cord(opking), board) def genCastles(board): for move in lmovegen.genCastles(board.board): yield Move(move) def legalMoveCount(board): moves = 0 for move in lmovegen.genAllMoves(board.board): if not board.board.willLeaveInCheck(move): moves += 1 return moves ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.893477 pychess-1.0.5/lib/pychess/Utils/lutils/0000755000175100001770000000000014614030425017437 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/Benchmark.py0000644000175100001770000000517014614030313021702 0ustar00runnerdockerfrom pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.leval import clearPawnTable from pychess.Utils.lutils.lmove import listToSan from pychess.Utils.lutils import lsearch from pychess.Utils.const import NORMALCHESS import sys from time import time # For now, we use the benchmark positions from Stockfish. benchmarkPositions = [ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 10", "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 11", "4rrk1/pp1n3p/3q2pQ/2p1pb2/2PP4/2P3N1/P2B2PP/4RRK1 b - - 7 19", "rq3rk1/ppp2ppp/1bnpb3/3N2B1/3NP3/7P/PPPQ1PP1/2KR3R w - - 7 14", "r1bq1r1k/1pp1n1pp/1p1p4/4p2Q/4Pp2/1BNP4/PPP2PPP/3R1RK1 w - - 2 14", "r3r1k1/2p2ppp/p1p1bn2/8/1q2P3/2NPQN2/PPP3PP/R4RK1 b - - 2 15", "r1bbk1nr/pp3p1p/2n5/1N4p1/2Np1B2/8/PPP2PPP/2KR1B1R w kq - 0 13", "r1bq1rk1/ppp1nppp/4n3/3p3Q/3P4/1BP1B3/PP1N2PP/R4RK1 w - - 1 16", "4r1k1/r1q2ppp/ppp2n2/4P3/5Rb1/1N1BQ3/PPP3PP/R5K1 w - - 1 17", "2rqkb1r/ppp2p2/2npb1p1/1N1Nn2p/2P1PP2/8/PP2B1PP/R1BQK2R b KQ - 0 11", "r1bq1r1k/b1p1npp1/p2p3p/1p6/3PP3/1B2NN2/PP3PPP/R2Q1RK1 w - - 1 16", "3r1rk1/p5pp/bpp1pp2/8/q1PP1P2/b3P3/P2NQRPP/1R2B1K1 b - - 6 22", "r1q2rk1/2p1bppp/2Pp4/p6b/Q1PNp3/4B3/PP1R1PPP/2K4R w - - 2 18", "4k2r/1pb2ppp/1p2p3/1R1p4/3P4/2r1PN2/P4PPP/1R4K1 b - - 3 22", "3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - 4 26", ] def benchmark(maxdepth=6): """Times a search of a static list of positions.""" suite_time = time() suite_nodes = lsearch.nodes lsearch.endtime = sys.maxsize lsearch.searching = True for i, fen in enumerate(benchmarkPositions): lsearch.table.clear() clearPawnTable() board = LBoard(NORMALCHESS) board.applyFen(fen) pos_start_time = time() pos_start_nodes = lsearch.nodes for depth in range(1, maxdepth): mvs, scr = lsearch.alphaBeta(board, depth) pos_time = time() - pos_start_time pos_nodes = lsearch.nodes - pos_start_nodes pv = " ".join(listToSan(board, mvs)) time_cs = int(100 * pos_time) print(depth, scr, time_cs, pos_nodes, pv) print( "Searched position", i, "at", int(pos_nodes / pos_time) if pos_time > 0 else pos_nodes, "n/s", ) suite_time = time() - suite_time suite_nodes = lsearch.nodes - suite_nodes print( "Total:", suite_nodes, "nodes in", suite_time, "s: ", suite_nodes / suite_time, "n/s", ) lsearch.nodes = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/LBoard.py0000755000175100001770000013407214614030313021162 0ustar00runnerdockerfrom pychess.Utils.const import ( EMPTY, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, ATOMICCHESS, BUGHOUSECHESS, CRAZYHOUSECHESS, CAMBODIANCHESS, MAKRUKCHESS, FISCHERRANDOMCHESS, SITTUYINCHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, SUICIDECHESS, GIVEAWAYCHESS, DROP_VARIANTS, BLACK, WHITE, FAN_PIECES, CAS_FLAGS, NORMALCHESS, PLACEMENTCHESS, THREECHECKCHESS, SETUPCHESS, FEN_START, HAWK, ELEPHANT, SCHESS, LIGHTBRIGADECHESS, chrU2Sign, cordDic, reprCord, reprFile, reprSign, reprSignMakruk, reprSignSittuyin, A1, A8, B1, B8, C1, C8, D1, D8, E1, E8, F1, F8, G1, G8, H1, H8, DROP, PROMOTIONS, ENPASSANT, B_OO, B_OOO, W_OO, W_OOO, QUEEN_CASTLE, KING_CASTLE, GATINGS, HAWK_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, QUEEN_PROMOTION, ) from pychess.Utils.repr import reprColor from .ldata import FILE, fileBits from .attack import isAttacked from .bitboard import clearBit, iterBits, setBit, bitPosArray from .PolyglotHash import ( pieceHashes, epHashes, W_OOHash, W_OOOHash, B_OOHash, B_OOOHash, colorHash, holdingHash, ) ################################################################################ # FEN # ################################################################################ # This will cause applyFen to raise an exception, if halfmove clock and fullmove # number is not specified STRICT_FEN = False ################################################################################ # LBoard # ################################################################################ class LBoard: __hash__ = None ini_kings = (E1, E8) ini_rooks = ((A1, H1), (A8, H8)) # Final positions of castled kings and rooks fin_kings = ((C1, G1), (C8, G8)) fin_rooks = ((D1, F1), (D8, F8)) holding = ( { PAWN: 0, KNIGHT: 0, BISHOP: 0, ROOK: 0, QUEEN: 0, HAWK: 0, ELEPHANT: 0, KING: 0, }, { PAWN: 0, KNIGHT: 0, BISHOP: 0, ROOK: 0, QUEEN: 0, HAWK: 0, ELEPHANT: 0, KING: 0, }, ) def __init__(self, variant=NORMALCHESS): self.variant = variant self.nags = [] # children can contain comments and variations # variations are lists of lboard objects self.children = [] # the next and prev lboard objects in the variation list self.next = None self.prev = None # The high level owner Board (with Piece objects) in gamemodel self.pieceBoard = None # This will True except in so called null_board # null_board act as parent of the variation # when we add a variation to last played board from hint panel self.fen_was_applied = False self.plyCount = 0 @property def lastMove(self): return ( self.hist_move[-1] if self.fen_was_applied and len(self.hist_move) > 0 else None ) def repetitionCount(self, draw_threshold=3): rc = 1 for ply in range(4, 1 + min(len(self.hist_hash), self.fifty), 2): if self.hist_hash[-ply] == self.hash: rc += 1 if rc >= draw_threshold: break return rc def iniAtomic(self): self.hist_exploding_around = [] def iniHouse(self): self.promoted = [0] * 64 self.capture_promoting = False self.hist_capture_promoting = [] self.holding = ( { PAWN: 0, KNIGHT: 0, BISHOP: 0, ROOK: 0, QUEEN: 0, HAWK: 0, ELEPHANT: 0, KING: 0, }, { PAWN: 0, KNIGHT: 0, BISHOP: 0, ROOK: 0, QUEEN: 0, HAWK: 0, ELEPHANT: 0, KING: 0, }, ) def iniCambodian(self): self.ini_kings = (D1, E8) self.ini_queens = (E1, D8) self.is_first_move = {KING: [True, True], QUEEN: [True, True]} self.hist_is_first_move = [] def iniSchess(self): self.virgin = [0, 0] self.hist_virgin = [] def applyFen(self, fenstr): """Applies the fenstring to the board. If the string is not properly written a SyntaxError will be raised, having its message ending in Pos(%d) specifying the string index of the problem. if an error is found, no changes will be made to the board.""" assert ( not self.fen_was_applied ), "The applyFen() method can be used on new LBoard objects only!" # Set board to empty on Black's turn (which Polyglot-hashes to 0) self.blocker = 0 self.friends = [0, 0] self.kings = [-1, -1] # this variable is a 2-dimmensionnal array, each case containing a bitboard # self.boards[color] contains an array of bitboards, each representing the position of the pieces # use example : self.boards[color][KNIGHT] self.boards = ([0] * 9, [0] * 9) self.enpassant = None # cord which can be captured by enpassant or None self.color = BLACK self.castling = 0 # The castling availability in the position self.hasCastled = [False, False] self.fifty = 0 # A ply counter for the fifty moves rule self.plyCount = 0 self.checked = None self.opchecked = None self.arBoard = [0] * 64 self.hash = 0 self.pawnhash = 0 # Data from the position's history: self.hist_move = [] # The move that was applied to get the position self.hist_tpiece = [] # The piece the move captured, == EMPTY for normal moves self.hist_enpassant = [] self.hist_castling = [] self.hist_hash = [] self.hist_fifty = [] self.hist_checked = [] self.hist_opchecked = [] # piece counts self.pieceCount = ([0] * 9, [0] * 9) # initial cords of rooks and kings for castling in Chess960 if self.variant == FISCHERRANDOMCHESS: self.ini_kings = [None, None] self.ini_rooks = ([None, None], [None, None]) elif self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): self.ini_kings = [None, None] self.fin_kings = ([None, None], [None, None]) self.fin_rooks = ([None, None], [None, None]) elif self.variant == ATOMICCHESS: self.iniAtomic() elif self.variant == THREECHECKCHESS: self.remaining_checks = [3, 3] elif self.variant == CAMBODIANCHESS: self.iniCambodian() elif self.variant == SCHESS: self.iniSchess() if self.variant in DROP_VARIANTS: self.iniHouse() # Get information parts = fenstr.split() castChr = "-" epChr = "-" fiftyChr = "0" moveNoChr = "1" if STRICT_FEN and len(parts) != 6: raise SyntaxError(_("FEN needs 6 data fields. \n\n%s") % fenstr) elif len(parts) < 2: raise SyntaxError( _("FEN needs at least 2 data fields in fenstr. \n\n%s") % fenstr ) elif len(parts) >= 7 and self.variant == THREECHECKCHESS: pieceChrs, colChr, castChr, epChr, checksChr, fiftyChr, moveNoChr = parts[ :7 ] self.remaining_checks = list(map(int, checksChr.split("+"))) elif len(parts) >= 6: pieceChrs, colChr, castChr, epChr, fiftyChr, moveNoChr = parts[:6] elif len(parts) == 5: pieceChrs, colChr, castChr, epChr, fiftyChr = parts elif len(parts) == 4: if parts[2].isdigit() and parts[3].isdigit(): # xboard FEN usage for asian variants pieceChrs, colChr, fiftyChr, moveNoChr = parts else: pieceChrs, colChr, castChr, epChr = parts elif len(parts) == 3: pieceChrs, colChr, castChr = parts else: pieceChrs, colChr = parts slashes = pieceChrs.count("/") if slashes < 7: raise SyntaxError( _("Needs 7 slashes in piece placement field. \n\n%s") % fenstr ) if not colChr.lower() in ("w", "b"): raise SyntaxError( _("Active color field must be one of w or b. \n\n%s") % fenstr ) if castChr != "-": for Chr in castChr: if self.variant == FISCHERRANDOMCHESS or self.variant == SETUPCHESS: valid_chars = "ABCDEFGHKQ" elif self.variant == CAMBODIANCHESS: valid_chars = "DE" elif self.variant == SCHESS: valid_chars = "KQABCDEFGH" elif self.variant == LIGHTBRIGADECHESS: valid_chars = "" else: valid_chars = "KQ" if Chr.upper() not in valid_chars: raise SyntaxError( _("Castling availability field is not legal. \n\n%s") % fenstr ) if epChr != "-" and epChr not in cordDic: raise SyntaxError(_("En passant cord is not legal. \n\n%s") % fenstr) # Parse piece placement field promoted = False # if there is a holding within [] we change it to BFEN style first if pieceChrs.endswith("]"): pieceChrs = pieceChrs[:-1].replace("[", "/").replace("-", "") for r, rank in enumerate(pieceChrs.split("/")): cord = (7 - r) * 8 for char in rank: if r > 7: # After the 8.rank BFEN can contain holdings (captured pieces) # "~" after a piece letter denotes promoted piece if r == 8 and self.variant in DROP_VARIANTS: color = char.islower() and BLACK or WHITE piece = chrU2Sign[char.upper()] self.holding[color][piece] += 1 self.hash ^= holdingHash[color][piece][ self.holding[color][piece] ] continue else: break if char.isdigit(): cord += int(char) elif char == "~": promoted = True else: color = char.islower() and BLACK or WHITE piece = chrU2Sign[char.upper()] self._addPiece(cord, piece, color) self.pieceCount[color][piece] += 1 if self.variant in DROP_VARIANTS and promoted: self.promoted[cord] = 1 promoted = False if self.variant == CAMBODIANCHESS: if piece == KING and self.kings[color] != self.ini_kings[color]: self.is_first_move[KING][color] = False if piece == QUEEN and cord != self.ini_queens[color]: self.is_first_move[QUEEN][color] = False cord += 1 if self.variant == FISCHERRANDOMCHESS: # Save ranks fo find outermost rooks # if KkQq was used in castling rights if r == 0: rank8 = rank elif r == 7: rank1 = rank # Parse active color field if colChr.lower() == "w": self.setColor(WHITE) else: self.setColor(BLACK) # Parse castling availability # TODO: S-Chess gating castling = 0 for char in castChr: if self.variant == FISCHERRANDOMCHESS: if char in reprFile: if char < reprCord[self.kings[BLACK]][0]: castling |= B_OOO self.ini_rooks[1][0] = reprFile.index(char) + 56 else: castling |= B_OO self.ini_rooks[1][1] = reprFile.index(char) + 56 elif char in [c.upper() for c in reprFile]: if char < reprCord[self.kings[WHITE]][0].upper(): castling |= W_OOO self.ini_rooks[0][0] = reprFile.index(char.lower()) else: castling |= W_OO self.ini_rooks[0][1] = reprFile.index(char.lower()) elif char == "K": castling |= W_OO self.ini_rooks[0][1] = rank1.rfind("R") elif char == "Q": castling |= W_OOO self.ini_rooks[0][0] = rank1.find("R") elif char == "k": castling |= B_OO self.ini_rooks[1][1] = rank8.rfind("r") + 56 elif char == "q": castling |= B_OOO self.ini_rooks[1][0] = rank8.find("r") + 56 else: if char == "K": castling |= W_OO elif char == "Q": castling |= W_OOO elif char == "k": castling |= B_OO elif char == "q": castling |= B_OOO if self.variant == SCHESS: if char == "K": self.virgin[WHITE] = setBit(self.virgin[WHITE], E1) self.virgin[WHITE] = setBit(self.virgin[WHITE], H1) elif char == "Q": self.virgin[WHITE] = setBit(self.virgin[WHITE], A1) self.virgin[WHITE] = setBit(self.virgin[WHITE], E1) elif char == "k": self.virgin[BLACK] = setBit(self.virgin[BLACK], E8) self.virgin[BLACK] = setBit(self.virgin[BLACK], H8) elif char == "q": self.virgin[BLACK] = setBit(self.virgin[BLACK], A8) self.virgin[BLACK] = setBit(self.virgin[BLACK], E8) else: side = WHITE if char.isupper() else BLACK cord = ord(char) - 65 if side == WHITE else ord(char) - 97 + 56 self.virgin[side] = setBit(self.virgin[side], cord) if self.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, FISCHERRANDOMCHESS, ): self.ini_kings[WHITE] = self.kings[WHITE] self.ini_kings[BLACK] = self.kings[BLACK] if self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): if self.ini_kings[WHITE] == D1 and self.ini_kings[BLACK] == D8: self.fin_kings = ([B1, F1], [B8, F8]) self.fin_rooks = ([C1, E1], [C8, E8]) elif self.ini_kings[WHITE] == D1: self.fin_kings = ([B1, F1], [C8, G8]) self.fin_rooks = ([C1, E1], [D8, F8]) elif self.ini_kings[BLACK] == D8: self.fin_kings = ([C1, G1], [B8, F8]) self.fin_rooks = ([D1, F1], [C8, E8]) else: self.fin_kings = ([C1, G1], [C8, G8]) self.fin_rooks = ([D1, F1], [D8, F8]) self.setCastling(castling) # Parse en passant target sqaure if epChr == "-": self.setEnpassant(None) else: self.setEnpassant(cordDic[epChr]) # Parse halfmove clock field if fiftyChr.isdigit(): self.fifty = int(fiftyChr) else: self.fifty = 0 # Parse fullmove number if moveNoChr.isdigit(): movenumber = max(int(moveNoChr), 1) * 2 - 2 if self.color == BLACK: movenumber += 1 self.plyCount = movenumber else: self.plyCount = 1 self.fen_was_applied = True def isChecked(self): if self.variant == SUICIDECHESS or self.variant == GIVEAWAYCHESS: return False elif self.variant == ATOMICCHESS: if not self.boards[self.color][KING]: return False if ( -2 < (self.kings[0] >> 3) - (self.kings[1] >> 3) < 2 and -2 < (self.kings[0] & 7) - (self.kings[1] & 7) < 2 ): return False if self.checked is None: kingcord = self.kings[self.color] if kingcord == -1: return False self.checked = isAttacked(self, kingcord, 1 - self.color, ischecked=True) return self.checked def opIsChecked(self): if self.variant == SUICIDECHESS or self.variant == GIVEAWAYCHESS: return False elif self.variant == ATOMICCHESS: if not self.boards[1 - self.color][KING]: return False if ( -2 < (self.kings[0] >> 3) - (self.kings[1] >> 3) < 2 and -2 < (self.kings[0] & 7) - (self.kings[1] & 7) < 2 ): return False if self.opchecked is None: kingcord = self.kings[1 - self.color] if kingcord == -1: return False self.opchecked = isAttacked(self, kingcord, self.color, ischecked=True) return self.opchecked def willLeaveInCheck(self, move): if self.variant == SUICIDECHESS or self.variant == GIVEAWAYCHESS: return False board_clone = self.clone() board_clone.applyMove(move) return board_clone.opIsChecked() def willGiveCheck(self, move): board_clone = self.clone() board_clone.applyMove(move) return board_clone.isChecked() def _addPiece(self, cord, piece, color): _setBit = setBit self.boards[color][piece] = _setBit(self.boards[color][piece], cord) self.friends[color] = _setBit(self.friends[color], cord) self.blocker = _setBit(self.blocker, cord) if piece == PAWN: self.pawnhash ^= pieceHashes[color][PAWN][cord] elif piece == KING: self.kings[color] = cord self.hash ^= pieceHashes[color][piece][cord] self.arBoard[cord] = piece def _removePiece(self, cord, piece, color): _clearBit = clearBit self.boards[color][piece] = _clearBit(self.boards[color][piece], cord) self.friends[color] = _clearBit(self.friends[color], cord) self.blocker = _clearBit(self.blocker, cord) if piece == PAWN: self.pawnhash ^= pieceHashes[color][PAWN][cord] self.hash ^= pieceHashes[color][piece][cord] self.arBoard[cord] = EMPTY def setColor(self, color): if color == self.color: return self.color = color self.hash ^= colorHash def setCastling(self, castling): if self.castling == castling: return if castling & W_OO != self.castling & W_OO: self.hash ^= W_OOHash if castling & W_OOO != self.castling & W_OOO: self.hash ^= W_OOOHash if castling & B_OO != self.castling & B_OO: self.hash ^= B_OOHash if castling & B_OOO != self.castling & B_OOO: self.hash ^= B_OOOHash self.castling = castling def setEnpassant(self, epcord): # Strip the square if there's no adjacent enemy pawn to make the capture if epcord is not None: sideToMove = epcord >> 3 == 2 and BLACK or WHITE fwdPawns = self.boards[sideToMove][PAWN] if sideToMove == WHITE: fwdPawns >>= 8 else: fwdPawns <<= 8 pawnTargets = (fwdPawns & ~fileBits[0]) << 1 pawnTargets |= (fwdPawns & ~fileBits[7]) >> 1 if not pawnTargets & bitPosArray[epcord]: epcord = None if self.enpassant == epcord: return if self.enpassant is not None: self.hash ^= epHashes[self.enpassant & 7] if epcord is not None: self.hash ^= epHashes[epcord & 7] self.enpassant = epcord # @profile def applyMove(self, move): flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 fpiece = fcord if flag == DROP else self.arBoard[fcord] tpiece = self.arBoard[tcord] color = self.color opcolor = 1 - self.color castling = self.castling kcastle = flag == KING_CASTLE or ( self.variant == SCHESS and ( (fpiece == KING and fcord - tcord == -2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord > 0 ) ) ) qcastle = flag == QUEEN_CASTLE or ( self.variant == SCHESS and ( (fpiece == KING and fcord - tcord == 2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord < 0 ) ) ) self.hist_move.append(move) self.hist_enpassant.append(self.enpassant) self.hist_castling.append(self.castling) self.hist_hash.append(self.hash) self.hist_fifty.append(self.fifty) self.hist_checked.append(self.checked) self.hist_opchecked.append(self.opchecked) if self.variant in DROP_VARIANTS and self.variant != SCHESS: self.hist_capture_promoting.append(self.capture_promoting) if self.variant == CAMBODIANCHESS: self.hist_is_first_move.append( {KING: self.is_first_move[KING][:], QUEEN: self.is_first_move[QUEEN][:]} ) elif self.variant == SCHESS: self.hist_virgin.append(self.virgin[:]) self.opchecked = None self.checked = None # null move if fcord == tcord and flag != DROP and flag != QUEEN_PROMOTION: self.setColor(opcolor) self.plyCount += 1 return move if self.variant == CAMBODIANCHESS: if fpiece == KING and self.is_first_move[KING][color]: self.is_first_move[KING][color] = False elif fpiece == QUEEN and self.is_first_move[QUEEN][color]: self.is_first_move[QUEEN][color] = False elif self.variant == SCHESS: if qcastle: self.virgin[color] = clearBit(self.virgin[color], self.ini_kings[color]) self.virgin[color] = clearBit( self.virgin[color], self.ini_rooks[color][0] ) elif kcastle: self.virgin[color] = clearBit(self.virgin[color], self.ini_kings[color]) self.virgin[color] = clearBit( self.virgin[color], self.ini_rooks[color][1] ) elif fcord in iterBits(self.virgin[color]): self.virgin[color] = clearBit(self.virgin[color], fcord) # Castling moves can be represented strangely, so normalize them. if kcastle or qcastle: side = 0 if qcastle else 1 fpiece = KING tpiece = EMPTY # In FRC, there may be a rook there, but the king doesn't capture it. gcord = fcord # save gating cord fcord = self.ini_kings[color] if FILE(fcord) == 3 and self.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 tcord = self.fin_kings[color][side] rookf = self.ini_rooks[color][side] rookt = self.fin_rooks[color][side] # Capture (sittuyin in place promotion is not capture move!) if tpiece != EMPTY and fcord != tcord: self._removePiece(tcord, tpiece, opcolor) self.pieceCount[opcolor][tpiece] -= 1 if self.variant in DROP_VARIANTS: if self.promoted[tcord]: if self.variant == CRAZYHOUSECHESS: self.holding[color][PAWN] += 1 self.hash ^= holdingHash[color][PAWN][self.holding[color][PAWN]] self.capture_promoting = True else: if self.variant == CRAZYHOUSECHESS: self.holding[color][tpiece] += 1 self.hash ^= holdingHash[color][tpiece][ self.holding[color][tpiece] ] self.capture_promoting = False elif self.variant == ATOMICCHESS: from pychess.Variants.atomic import piecesAround apieces = [ (fcord, fpiece, color), ] for acord, apiece, acolor in piecesAround(self, tcord): if apiece != PAWN and acord != fcord: self._removePiece(acord, apiece, acolor) self.pieceCount[acolor][apiece] -= 1 apieces.append((acord, apiece, acolor)) if apiece == ROOK and acord != fcord: if acord == self.ini_rooks[opcolor][0]: castling &= ~CAS_FLAGS[opcolor][0] elif acord == self.ini_rooks[opcolor][1]: castling &= ~CAS_FLAGS[opcolor][1] self.hist_exploding_around.append(apieces) self.hist_tpiece.append(tpiece) # Remove moving piece(s), then add them at their destination. if flag == DROP: if self.variant in DROP_VARIANTS: assert self.holding[color][fpiece] > 0 self.holding[color][fpiece] -= 1 self.hash ^= holdingHash[color][fpiece][self.holding[color][fpiece]] self.pieceCount[color][fpiece] += 1 else: self._removePiece(fcord, fpiece, color) if kcastle or qcastle: self._removePiece(rookf, ROOK, color) self._addPiece(rookt, ROOK, color) self.hasCastled[color] = True if flag == ENPASSANT: takenPawnC = tcord + (color == WHITE and -8 or 8) self._removePiece(takenPawnC, PAWN, opcolor) self.pieceCount[opcolor][PAWN] -= 1 if self.variant == CRAZYHOUSECHESS: self.holding[color][PAWN] += 1 self.hash ^= holdingHash[color][PAWN][self.holding[color][PAWN]] elif self.variant == ATOMICCHESS: from pychess.Variants.atomic import piecesAround apieces = [ (fcord, fpiece, color), ] for acord, apiece, acolor in piecesAround(self, tcord): if apiece != PAWN and acord != fcord: self._removePiece(acord, apiece, acolor) self.pieceCount[acolor][apiece] -= 1 apieces.append((acord, apiece, acolor)) self.hist_exploding_around.append(apieces) elif flag in PROMOTIONS: # Pretend the pawn changes into a piece before reaching its destination. fpiece = flag - 2 self.pieceCount[color][fpiece] += 1 self.pieceCount[color][PAWN] -= 1 if self.variant in DROP_VARIANTS: if tpiece == EMPTY: self.capture_promoting = False if flag in PROMOTIONS: self.promoted[tcord] = 1 elif flag != DROP: if self.promoted[fcord]: self.promoted[fcord] = 0 self.promoted[tcord] = 1 elif tpiece != EMPTY: self.promoted[tcord] = 0 if flag in GATINGS: gpiece = HAWK if flag in (HAWK_GATE, HAWK_GATE_AT_ROOK) else ELEPHANT self.holding[color][gpiece] -= 1 self.hash ^= holdingHash[color][gpiece][self.holding[color][gpiece]] self.pieceCount[color][gpiece] += 1 self._addPiece(gcord if (kcastle or qcastle) else fcord, gpiece, color) if self.variant == ATOMICCHESS and (tpiece != EMPTY or flag == ENPASSANT): self.pieceCount[color][fpiece] -= 1 else: self._addPiece(tcord, fpiece, color) if fpiece == PAWN and abs(fcord - tcord) == 16: self.setEnpassant((fcord + tcord) // 2) else: self.setEnpassant(None) if tpiece == EMPTY and fpiece != PAWN: self.fifty += 1 else: self.fifty = 0 # Clear castle flags king = self.ini_kings[color] wildcastle = FILE(king) == 3 and self.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ) if fpiece == KING: castling &= ~CAS_FLAGS[color][0] castling &= ~CAS_FLAGS[color][1] elif fpiece == ROOK: if fcord == self.ini_rooks[color][0]: side = 1 if wildcastle else 0 castling &= ~CAS_FLAGS[color][side] elif fcord == self.ini_rooks[color][1]: side = 0 if wildcastle else 1 castling &= ~CAS_FLAGS[color][side] if tpiece == ROOK: if tcord == self.ini_rooks[opcolor][0]: side = 1 if wildcastle else 0 castling &= ~CAS_FLAGS[opcolor][side] elif tcord == self.ini_rooks[opcolor][1]: side = 0 if wildcastle else 1 castling &= ~CAS_FLAGS[opcolor][side] if self.variant == PLACEMENTCHESS and self.plyCount == 15: castling = 0 if self.arBoard[A1] == ROOK and self.arBoard[E1] == KING: castling |= W_OOO if self.arBoard[H1] == ROOK and self.arBoard[E1] == KING: castling |= W_OO if self.arBoard[A8] == ROOK and self.arBoard[E8] == KING: castling |= B_OOO if self.arBoard[H8] == ROOK and self.arBoard[E8] == KING: castling |= B_OO self.setCastling(castling) self.setColor(opcolor) self.plyCount += 1 def popMove(self): # Note that we remove the last made move, which was not made by boards # current color, but by its opponent color = 1 - self.color opcolor = self.color move = self.hist_move.pop() cpiece = self.hist_tpiece.pop() flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 tpiece = self.arBoard[tcord] if fcord == tcord and flag != DROP and flag != QUEEN_PROMOTION: self.setColor(color) return if flag in GATINGS: gpiece = HAWK if flag in (HAWK_GATE, HAWK_GATE_AT_ROOK) else ELEPHANT self.holding[color][gpiece] += 1 self.hash ^= holdingHash[color][gpiece][self.holding[color][gpiece]] self.pieceCount[color][gpiece] -= 1 self._removePiece(fcord, gpiece, color) kcastle = flag == KING_CASTLE or ( self.variant == SCHESS and ( (tpiece == KING and fcord - tcord == -2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord > 0 ) ) ) qcastle = flag == QUEEN_CASTLE or ( self.variant == SCHESS and ( (tpiece == KING and fcord - tcord == 2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord < 0 ) ) ) # Castling moves can be represented strangely, so normalize them. if kcastle or qcastle: side = 0 if qcastle else 1 tpiece = KING fcord = self.ini_kings[color] if FILE(fcord) == 3 and self.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 tcord = self.fin_kings[color][side] rookf = self.ini_rooks[color][side] rookt = self.fin_rooks[color][side] self._removePiece(tcord, tpiece, color) self._removePiece(rookt, ROOK, color) self._addPiece(rookf, ROOK, color) self.hasCastled[color] = False else: self._removePiece(tcord, tpiece, color) # Put back captured piece if cpiece != EMPTY and fcord != tcord: self._addPiece(tcord, cpiece, opcolor) self.pieceCount[opcolor][cpiece] += 1 if self.variant == CRAZYHOUSECHESS: if self.capture_promoting: assert self.holding[color][PAWN] > 0 self.holding[color][PAWN] -= 1 self.hash ^= holdingHash[color][PAWN][self.holding[color][PAWN]] else: assert self.holding[color][cpiece] > 0 self.holding[color][cpiece] -= 1 self.hash ^= holdingHash[color][cpiece][self.holding[color][cpiece]] elif self.variant == ATOMICCHESS: apieces = self.hist_exploding_around.pop() for acord, apiece, acolor in apieces: self._addPiece(acord, apiece, acolor) self.pieceCount[acolor][apiece] += 1 # Put back piece captured by enpassant if flag == ENPASSANT: epcord = color == WHITE and tcord - 8 or tcord + 8 self._addPiece(epcord, PAWN, opcolor) self.pieceCount[opcolor][PAWN] += 1 if self.variant == CRAZYHOUSECHESS: assert self.holding[color][PAWN] > 0 self.holding[color][PAWN] -= 1 self.hash ^= holdingHash[color][PAWN][self.holding[color][PAWN]] elif self.variant == ATOMICCHESS: apieces = self.hist_exploding_around.pop() for acord, apiece, acolor in apieces: self._addPiece(acord, apiece, acolor) self.pieceCount[acolor][apiece] += 1 # Un-promote pawn if flag in PROMOTIONS: tpiece = PAWN self.pieceCount[color][flag - 2] -= 1 self.pieceCount[color][PAWN] += 1 # Put back moved piece if flag == DROP: try: self.holding[color][tpiece] += 1 except KeyError: print(move, color, tpiece, self.holding) print(self) self.hash ^= holdingHash[color][tpiece][self.holding[color][tpiece]] self.pieceCount[color][tpiece] -= 1 else: if not ( self.variant == ATOMICCHESS and (cpiece != EMPTY or flag == ENPASSANT) ): self._addPiece(fcord, tpiece, color) if self.variant in DROP_VARIANTS and self.variant != SCHESS: if flag != DROP: if self.promoted[tcord] and (flag not in PROMOTIONS): self.promoted[fcord] = 1 if self.capture_promoting: self.promoted[tcord] = 1 else: self.promoted[tcord] = 0 self.capture_promoting = self.hist_capture_promoting.pop() if self.variant == CAMBODIANCHESS: self.is_first_move = self.hist_is_first_move.pop() elif self.variant == SCHESS: self.virgin = self.hist_virgin.pop() self.setColor(color) self.checked = self.hist_checked.pop() self.opchecked = self.hist_opchecked.pop() self.enpassant = self.hist_enpassant.pop() self.castling = self.hist_castling.pop() self.hash = self.hist_hash.pop() self.fifty = self.hist_fifty.pop() self.plyCount -= 1 def __eq__(self, other): if not ( other is not None and self.fen_was_applied and other.fen_was_applied and self.hash == other.hash and self.plyCount == other.plyCount ): return False b0, b1 = self.prev, other.prev ok = True while ok and b0 is not None and b1 is not None: if not ( b0.fen_was_applied and b1.fen_was_applied and b0.hash == b1.hash and b0.plyCount == b1.plyCount ): ok = False else: b0, b1 = b0.prev, b1.prev return ok def __ne__(self, other): return not self.__eq__(other) def reprCastling(self): if not self.castling: return "-" else: strs = [] if self.variant == FISCHERRANDOMCHESS: if self.castling & W_OO: strs.append(reprCord[self.ini_rooks[0][1]][0].upper()) if self.castling & W_OOO: strs.append(reprCord[self.ini_rooks[0][0]][0].upper()) if self.castling & B_OO: strs.append(reprCord[self.ini_rooks[1][1]][0]) if self.castling & B_OOO: strs.append(reprCord[self.ini_rooks[1][0]][0]) else: if self.castling & W_OO: strs.append("K") if self.castling & W_OOO: strs.append("Q") if self.castling & B_OO: strs.append("k") if self.castling & B_OOO: strs.append("q") return "".join(strs) def prepr(self, ascii=False): if not self.fen_was_applied: return "LBoard without applied FEN" b = "#" + reprColor[self.color] + " " b += self.reprCastling() + " " b += self.enpassant is not None and reprCord[self.enpassant] or "-" b += "\n# " rows = [self.arBoard[i : i + 8] for i in range(0, 64, 8)][::-1] for r, row in enumerate(rows): for i, piece in enumerate(row): if piece != EMPTY: if bitPosArray[(7 - r) * 8 + i] & self.friends[WHITE]: assert self.boards[WHITE][ piece ], "self.boards doesn't match self.arBoard !!!" sign = reprSign[piece] if ascii else FAN_PIECES[WHITE][piece] else: assert self.boards[BLACK][ piece ], "self.boards doesn't match self.arBoard !!!" sign = ( reprSign[piece].lower() if ascii else FAN_PIECES[BLACK][piece] ) b += sign else: b += "." b += " " b += "\n# " if self.variant in DROP_VARIANTS: for color in (BLACK, WHITE): holding = self.holding[color] b += "\n# [%s]" % "".join( [ ( reprSign[piece] if ascii else FAN_PIECES[color][piece] * holding[piece] ) for piece in holding if holding[piece] > 0 ] ) return b def __repr__(self): return self.prepr() def asFen(self, enable_bfen=False): fenstr = [] rows = [self.arBoard[i : i + 8] for i in range(0, 64, 8)][::-1] for r, row in enumerate(rows): empty = 0 for i, piece in enumerate(row): if piece != EMPTY: if empty > 0: fenstr.append(str(empty)) empty = 0 if self.variant in (CAMBODIANCHESS, MAKRUKCHESS): sign = reprSignMakruk[piece] elif self.variant == SITTUYINCHESS: sign = reprSignSittuyin[piece] else: sign = reprSign[piece] if bitPosArray[(7 - r) * 8 + i] & self.friends[WHITE]: sign = sign.upper() else: sign = sign.lower() fenstr.append(sign) if self.variant in (BUGHOUSECHESS, CRAZYHOUSECHESS): if self.promoted[r * 8 + i]: fenstr.append("~") else: empty += 1 if empty > 0: fenstr.append(str(empty)) if r != 7: fenstr.append("/") if self.variant in DROP_VARIANTS: holding_pieces = [] for color in (BLACK, WHITE): holding = self.holding[color] for piece in holding: if holding[piece] > 0: if self.variant == SITTUYINCHESS: sign = reprSignSittuyin[piece] else: sign = reprSign[piece] sign = sign.upper() if color == WHITE else sign.lower() holding_pieces.append(sign * holding[piece]) if holding_pieces: if enable_bfen: fenstr.append("/") fenstr += holding_pieces else: fenstr.append("[") fenstr += holding_pieces fenstr.append("]") fenstr.append(" ") fenstr.append(self.color == WHITE and "w" or "b") fenstr.append(" ") if self.variant == CAMBODIANCHESS: cast = "" if self.is_first_move[KING][WHITE]: cast += "D" if self.is_first_move[QUEEN][WHITE]: cast += "E" if self.is_first_move[KING][BLACK]: cast += "d" if self.is_first_move[QUEEN][BLACK]: cast += "e" if not cast: cast = "-" fenstr.append(cast) elif self.variant == SCHESS: # TODO: remove redundant letters cast = "" if self.castling & W_OO: cast += "K" if self.castling & W_OOO: cast += "Q" if self.holding[WHITE][HAWK] > 0 or self.holding[WHITE][ELEPHANT] > 0: for bit in iterBits(self.virgin[WHITE]): cast += "ABCDEFGH"[bit] if self.castling & B_OO: cast += "k" if self.castling & B_OOO: cast += "q" if self.holding[BLACK][HAWK] > 0 or self.holding[BLACK][ELEPHANT] > 0: for bit in iterBits(self.virgin[BLACK]): cast += "abcdefgh"[bit - 56] if not cast: cast = "-" fenstr.append(cast) else: fenstr.append(self.reprCastling()) fenstr.append(" ") if not self.enpassant: fenstr.append("-") else: fenstr.append(reprCord[self.enpassant]) fenstr.append(" ") fenstr.append(str(self.fifty)) fenstr.append(" ") fullmove = (self.plyCount) // 2 + 1 fenstr.append(str(fullmove)) return "".join(fenstr) def clone(self): copy = LBoard(self.variant) copy.blocker = self.blocker copy.friends = self.friends[:] copy.kings = self.kings[:] copy.boards = (self.boards[WHITE][:], self.boards[BLACK][:]) copy.arBoard = self.arBoard[:] copy.pieceCount = (self.pieceCount[WHITE][:], self.pieceCount[BLACK][:]) copy.color = self.color copy.plyCount = self.plyCount copy.hasCastled = self.hasCastled[:] copy.enpassant = self.enpassant copy.castling = self.castling copy.hash = self.hash copy.pawnhash = self.pawnhash copy.fifty = self.fifty copy.checked = self.checked copy.opchecked = self.opchecked copy.hist_move = self.hist_move[:] copy.hist_tpiece = self.hist_tpiece[:] copy.hist_enpassant = self.hist_enpassant[:] copy.hist_castling = self.hist_castling[:] copy.hist_hash = self.hist_hash[:] copy.hist_fifty = self.hist_fifty[:] copy.hist_checked = self.hist_checked[:] copy.hist_opchecked = self.hist_opchecked[:] if self.variant == FISCHERRANDOMCHESS: copy.ini_kings = self.ini_kings[:] copy.ini_rooks = (self.ini_rooks[0][:], self.ini_rooks[1][:]) elif self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): copy.ini_kings = self.ini_kings[:] copy.fin_kings = (self.fin_kings[0][:], self.fin_kings[1][:]) copy.fin_rooks = (self.fin_rooks[0][:], self.fin_rooks[1][:]) elif self.variant in DROP_VARIANTS: copy.promoted = self.promoted[:] copy.holding = (self.holding[0].copy(), self.holding[1].copy()) copy.capture_promoting = self.capture_promoting copy.hist_capture_promoting = self.hist_capture_promoting[:] if self.variant == SCHESS: copy.virgin = self.virgin[:] copy.hist_virgin = self.hist_virgin[:] elif self.variant == ATOMICCHESS: copy.hist_exploding_around = [a[:] for a in self.hist_exploding_around] elif self.variant == THREECHECKCHESS: copy.remaining_checks = self.remaining_checks[:] elif self.variant == CAMBODIANCHESS: copy.ini_kings = self.ini_kings copy.ini_queens = self.ini_queens copy.is_first_move = { KING: self.is_first_move[KING][:], QUEEN: self.is_first_move[QUEEN][:], } copy.hist_is_first_move = self.hist_is_first_move[:] copy.fen_was_applied = self.fen_was_applied return copy START_BOARD = LBoard() START_BOARD.applyFen(FEN_START) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/PolyglotHash.py0000644000175100001770000006430214614030313022427 0ustar00runnerdockerimport random from pychess.Utils.const import ( WHITE, BLACK, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, HAWK, ELEPHANT, KING, ) # Polyglot opening books are indexed by 64-bit Zobrist hash keys. # The standard specifies the following Zobrist seed values. # The numbers in this file come from PolyGlot by Fabien Letouzey. # PolyGlot is available under the GNU GPL from http://wbec-ridderkerk.nl pieceHashes = [ [ [0x0000000000000000] * 64, [ 0x5355F900C2A82DC7, 0x07FB9F855A997142, 0x5093417AA8A7ED5E, 0x7BCBC38DA25A7F3C, 0x19FC8A768CF4B6D4, 0x637A7780DECFC0D9, 0x8249A47AEE0E41F7, 0x79AD695501E7D1E8, 0x14ACBAF4777D5776, 0xF145B6BECCDEA195, 0xDABF2AC8201752FC, 0x24C3C94DF9C8D3F6, 0xBB6E2924F03912EA, 0x0CE26C0B95C980D9, 0xA49CD132BFBF7CC4, 0xE99D662AF4243939, 0x27E6AD7891165C3F, 0x8535F040B9744FF1, 0x54B3F4FA5F40D873, 0x72B12C32127FED2B, 0xEE954D3C7B411F47, 0x9A85AC909A24EAA1, 0x70AC4CD9F04F21F5, 0xF9B89D3E99A075C2, 0x87B3E2B2B5C907B1, 0xA366E5B8C54F48B8, 0xAE4A9346CC3F7CF2, 0x1920C04D47267BBD, 0x87BF02C6B49E2AE9, 0x092237AC237F3859, 0xFF07F64EF8ED14D0, 0x8DE8DCA9F03CC54E, 0x9C1633264DB49C89, 0xB3F22C3D0B0B38ED, 0x390E5FB44D01144B, 0x5BFEA5B4712768E9, 0x1E1032911FA78984, 0x9A74ACB964E78CB3, 0x4F80F7A035DAFB04, 0x6304D09A0B3738C4, 0x2171E64683023A08, 0x5B9B63EB9CEFF80C, 0x506AACF489889342, 0x1881AFC9A3A701D6, 0x6503080440750644, 0xDFD395339CDBF4A7, 0xEF927DBCF00C20F2, 0x7B32F7D1E03680EC, 0xB9FD7620E7316243, 0x05A7E8A57DB91B77, 0xB5889C6E15630A75, 0x4A750A09CE9573F7, 0xCF464CEC899A2F8A, 0xF538639CE705B824, 0x3C79A0FF5580EF7F, 0xEDE6C87F8477609D, 0x799E81F05BC93F31, 0x86536B8CF3428A8C, 0x97D7374C60087B73, 0xA246637CFF328532, 0x043FCAE60CC0EBA0, 0x920E449535DD359E, 0x70EB093B15B290CC, 0x73A1921916591CBD, ], [ 0xC547F57E42A7444E, 0x78E37644E7CAD29E, 0xFE9A44E9362F05FA, 0x08BD35CC38336615, 0x9315E5EB3A129ACE, 0x94061B871E04DF75, 0xDF1D9F9D784BA010, 0x3BBA57B68871B59D, 0xD2B7ADEEDED1F73F, 0xF7A255D83BC373F8, 0xD7F4F2448C0CEB81, 0xD95BE88CD210FFA7, 0x336F52F8FF4728E7, 0xA74049DAC312AC71, 0xA2F61BB6E437FDB5, 0x4F2A5CB07F6A35B3, 0x87D380BDA5BF7859, 0x16B9F7E06C453A21, 0x7BA2484C8A0FD54E, 0xF3A678CAD9A2E38C, 0x39B0BF7DDE437BA2, 0xFCAF55C1BF8A4424, 0x18FCF680573FA594, 0x4C0563B89F495AC3, 0x40E087931A00930D, 0x8CFFA9412EB642C1, 0x68CA39053261169F, 0x7A1EE967D27579E2, 0x9D1D60E5076F5B6F, 0x3810E399B6F65BA2, 0x32095B6D4AB5F9B1, 0x35CAB62109DD038A, 0xA90B24499FCFAFB1, 0x77A225A07CC2C6BD, 0x513E5E634C70E331, 0x4361C0CA3F692F12, 0xD941ACA44B20A45B, 0x528F7C8602C5807B, 0x52AB92BEB9613989, 0x9D1DFA2EFC557F73, 0x722FF175F572C348, 0x1D1260A51107FE97, 0x7A249A57EC0C9BA2, 0x04208FE9E8F7F2D6, 0x5A110C6058B920A0, 0x0CD9A497658A5698, 0x56FD23C8F9715A4C, 0x284C847B9D887AAE, 0x04FEABFBBDB619CB, 0x742E1E651C60BA83, 0x9A9632E65904AD3C, 0x881B82A13B51B9E2, 0x506E6744CD974924, 0xB0183DB56FFC6A79, 0x0ED9B915C66ED37E, 0x5E11E86D5873D484, 0xF678647E3519AC6E, 0x1B85D488D0F20CC5, 0xDAB9FE6525D89021, 0x0D151D86ADB73615, 0xA865A54EDCC0F019, 0x93C42566AEF98FFB, 0x99E7AFEABE000731, 0x48CBFF086DDF285A, ], [ 0x23B70EDB1955C4BF, 0xC330DE426430F69D, 0x4715ED43E8A45C0A, 0xA8D7E4DAB780A08D, 0x0572B974F03CE0BB, 0xB57D2E985E1419C7, 0xE8D9ECBE2CF3D73F, 0x2FE4B17170E59750, 0x11317BA87905E790, 0x7FBF21EC8A1F45EC, 0x1725CABFCB045B00, 0x964E915CD5E2B207, 0x3E2B8BCBF016D66D, 0xBE7444E39328A0AC, 0xF85B2B4FBCDE44B7, 0x49353FEA39BA63B1, 0x1DD01AAFCD53486A, 0x1FCA8A92FD719F85, 0xFC7C95D827357AFA, 0x18A6A990C8B35EBD, 0xCCCB7005C6B9C28D, 0x3BDBB92C43B17F26, 0xAA70B5B4F89695A2, 0xE94C39A54A98307F, 0xB7A0B174CFF6F36E, 0xD4DBA84729AF48AD, 0x2E18BC1AD9704A68, 0x2DE0966DAF2F8B1C, 0xB9C11D5B1E43A07E, 0x64972D68DEE33360, 0x94628D38D0C20584, 0xDBC0D2B6AB90A559, 0xD2733C4335C6A72F, 0x7E75D99D94A70F4D, 0x6CED1983376FA72B, 0x97FCAACBF030BC24, 0x7B77497B32503B12, 0x8547EDDFB81CCB94, 0x79999CDFF70902CB, 0xCFFE1939438E9B24, 0x829626E3892D95D7, 0x92FAE24291F2B3F1, 0x63E22C147B9C3403, 0xC678B6D860284A1C, 0x5873888850659AE7, 0x0981DCD296A8736D, 0x9F65789A6509A440, 0x9FF38FED72E9052F, 0xE479EE5B9930578C, 0xE7F28ECD2D49EECD, 0x56C074A581EA17FE, 0x5544F7D774B14AEF, 0x7B3F0195FC6F290F, 0x12153635B2C0CF57, 0x7F5126DBBA5E0CA7, 0x7A76956C3EAFB413, 0x3D5774A11D31AB39, 0x8A1B083821F40CB4, 0x7B4A38E32537DF62, 0x950113646D1D6E03, 0x4DA8979A0041E8A9, 0x3BC36E078F7515D7, 0x5D0A12F27AD310D1, 0x7F9D1A2E1EBE1327, ], [ 0xA09E8C8C35AB96DE, 0xFA7E393983325753, 0xD6B6D0ECC617C699, 0xDFEA21EA9E7557E3, 0xB67C1FA481680AF8, 0xCA1E3785A9E724E5, 0x1CFC8BED0D681639, 0xD18D8549D140CAEA, 0x4ED0FE7E9DC91335, 0xE4DBF0634473F5D2, 0x1761F93A44D5AEFE, 0x53898E4C3910DA55, 0x734DE8181F6EC39A, 0x2680B122BAA28D97, 0x298AF231C85BAFAB, 0x7983EED3740847D5, 0x66C1A2A1A60CD889, 0x9E17E49642A3E4C1, 0xEDB454E7BADC0805, 0x50B704CAB602C329, 0x4CC317FB9CDDD023, 0x66B4835D9EAFEA22, 0x219B97E26FFC81BD, 0x261E4E4C0A333A9D, 0x1FE2CCA76517DB90, 0xD7504DFA8816EDBB, 0xB9571FA04DC089C8, 0x1DDC0325259B27DE, 0xCF3F4688801EB9AA, 0xF4F5D05C10CAB243, 0x38B6525C21A42B0E, 0x36F60E2BA4FA6800, 0xEB3593803173E0CE, 0x9C4CD6257C5A3603, 0xAF0C317D32ADAA8A, 0x258E5A80C7204C4B, 0x8B889D624D44885D, 0xF4D14597E660F855, 0xD4347F66EC8941C3, 0xE699ED85B0DFB40D, 0x2472F6207C2D0484, 0xC2A1E7B5B459AEB5, 0xAB4F6451CC1D45EC, 0x63767572AE3D6174, 0xA59E0BD101731A28, 0x116D0016CB948F09, 0x2CF9C8CA052F6E9F, 0x0B090A7560A968E3, 0xABEEDDB2DDE06FF1, 0x58EFC10B06A2068D, 0xC6E57A78FBD986E0, 0x2EAB8CA63CE802D7, 0x14A195640116F336, 0x7C0828DD624EC390, 0xD74BBE77E6116AC7, 0x804456AF10F5FB53, 0xEBE9EA2ADF4321C7, 0x03219A39EE587A30, 0x49787FEF17AF9924, 0xA1E9300CD8520548, 0x5B45E522E4B1B4EF, 0xB49C3B3995091A36, 0xD4490AD526F14431, 0x12A8F216AF9418C2, ], [ 0x6FFE73E81B637FB3, 0xDDF957BC36D8B9CA, 0x64D0E29EEA8838B3, 0x08DD9BDFD96B9F63, 0x087E79E5A57D1D13, 0xE328E230E3E2B3FB, 0x1C2559E30F0946BE, 0x720BF5F26F4D2EAA, 0xB0774D261CC609DB, 0x443F64EC5A371195, 0x4112CF68649A260E, 0xD813F2FAB7F5C5CA, 0x660D3257380841EE, 0x59AC2C7873F910A3, 0xE846963877671A17, 0x93B633ABFA3469F8, 0xC0C0F5A60EF4CDCF, 0xCAF21ECD4377B28C, 0x57277707199B8175, 0x506C11B9D90E8B1D, 0xD83CC2687A19255F, 0x4A29C6465A314CD1, 0xED2DF21216235097, 0xB5635C95FF7296E2, 0x22AF003AB672E811, 0x52E762596BF68235, 0x9AEBA33AC6ECC6B0, 0x944F6DE09134DFB6, 0x6C47BEC883A7DE39, 0x6AD047C430A12104, 0xA5B1CFDBA0AB4067, 0x7C45D833AFF07862, 0x5092EF950A16DA0B, 0x9338E69C052B8E7B, 0x455A4B4CFE30E3F5, 0x6B02E63195AD0CF8, 0x6B17B224BAD6BF27, 0xD1E0CCD25BB9C169, 0xDE0C89A556B9AE70, 0x50065E535A213CF6, 0x9C1169FA2777B874, 0x78EDEFD694AF1EED, 0x6DC93D9526A50E68, 0xEE97F453F06791ED, 0x32AB0EDB696703D3, 0x3A6853C7E70757A7, 0x31865CED6120F37D, 0x67FEF95D92607890, 0x1F2B1D1F15F6DC9C, 0xB69E38A8965C6B65, 0xAA9119FF184CCCF4, 0xF43C732873F24C13, 0xFB4A3D794A9A80D2, 0x3550C2321FD6109C, 0x371F77E76BB8417E, 0x6BFA9AAE5EC05779, 0xCD04F3FF001A4778, 0xE3273522064480CA, 0x9F91508BFFCFC14A, 0x049A7F41061A9E60, 0xFCB6BE43A9F2FE9B, 0x08DE8A1C7797DA9B, 0x8F9887E6078735A1, 0xB5B4071DBFC73A66, ], [ 0x55B6344CF97AAFAE, 0xB862225B055B6960, 0xCAC09AFBDDD2CDB4, 0xDAF8E9829FE96B5F, 0xB5FDFC5D3132C498, 0x310CB380DB6F7503, 0xE87FBB46217A360E, 0x2102AE466EBB1148, 0xF8549E1A3AA5E00D, 0x07A69AFDCC42261A, 0xC4C118BFE78FEAAE, 0xF9F4892ED96BD438, 0x1AF3DBE25D8F45DA, 0xF5B4B0B0D2DEEEB4, 0x962ACEEFA82E1C84, 0x046E3ECAAF453CE9, 0xF05D129681949A4C, 0x964781CE734B3C84, 0x9C2ED44081CE5FBD, 0x522E23F3925E319E, 0x177E00F9FC32F791, 0x2BC60A63A6F3B3F2, 0x222BBFAE61725606, 0x486289DDCC3D6780, 0x7DC7785B8EFDFC80, 0x8AF38731C02BA980, 0x1FAB64EA29A2DDF7, 0xE4D9429322CD065A, 0x9DA058C67844F20C, 0x24C0E332B70019B0, 0x233003B5A6CFE6AD, 0xD586BD01C5C217F6, 0x5E5637885F29BC2B, 0x7EBA726D8C94094B, 0x0A56A5F0BFE39272, 0xD79476A84EE20D06, 0x9E4C1269BAA4BF37, 0x17EFEE45B0DEE640, 0x1D95B0A5FCF90BC6, 0x93CBE0B699C2585D, 0x65FA4F227A2B6D79, 0xD5F9E858292504D5, 0xC2B5A03F71471A6F, 0x59300222B4561E00, 0xCE2F8642CA0712DC, 0x7CA9723FBB2E8988, 0x2785338347F2BA08, 0xC61BB3A141E50E8C, 0x150F361DAB9DEC26, 0x9F6A419D382595F4, 0x64A53DC924FE7AC9, 0x142DE49FFF7A7C3D, 0x0C335248857FA9E7, 0x0A9C32D5EAE45305, 0xE6C42178C4BBB92E, 0x71F1CE2490D20B07, 0xF1BCC3D275AFE51A, 0xE728E8C83C334074, 0x96FBF83A12884624, 0x81A1549FD6573DA5, 0x5FA7867CAF35E149, 0x56986E2EF3ED091B, 0x917F1DD5F8886C61, 0xD20D8C88C8FFE65F, ], ], [ [0x0000000000000000] * 64, [ 0x9D39247E33776D41, 0x2AF7398005AAA5C7, 0x44DB015024623547, 0x9C15F73E62A76AE2, 0x75834465489C0C89, 0x3290AC3A203001BF, 0x0FBBAD1F61042279, 0xE83A908FF2FB60CA, 0x0D7E765D58755C10, 0x1A083822CEAFE02D, 0x9605D5F0E25EC3B0, 0xD021FF5CD13A2ED5, 0x40BDF15D4A672E32, 0x011355146FD56395, 0x5DB4832046F3D9E5, 0x239F8B2D7FF719CC, 0x05D1A1AE85B49AA1, 0x679F848F6E8FC971, 0x7449BBFF801FED0B, 0x7D11CDB1C3B7ADF0, 0x82C7709E781EB7CC, 0xF3218F1C9510786C, 0x331478F3AF51BBE6, 0x4BB38DE5E7219443, 0xAA649C6EBCFD50FC, 0x8DBD98A352AFD40B, 0x87D2074B81D79217, 0x19F3C751D3E92AE1, 0xB4AB30F062B19ABF, 0x7B0500AC42047AC4, 0xC9452CA81A09D85D, 0x24AA6C514DA27500, 0x4C9F34427501B447, 0x14A68FD73C910841, 0xA71B9B83461CBD93, 0x03488B95B0F1850F, 0x637B2B34FF93C040, 0x09D1BC9A3DD90A94, 0x3575668334A1DD3B, 0x735E2B97A4C45A23, 0x18727070F1BD400B, 0x1FCBACD259BF02E7, 0xD310A7C2CE9B6555, 0xBF983FE0FE5D8244, 0x9F74D14F7454A824, 0x51EBDC4AB9BA3035, 0x5C82C505DB9AB0FA, 0xFCF7FE8A3430B241, 0x3253A729B9BA3DDE, 0x8C74C368081B3075, 0xB9BC6C87167C33E7, 0x7EF48F2B83024E20, 0x11D505D4C351BD7F, 0x6568FCA92C76A243, 0x4DE0B0F40F32A7B8, 0x96D693460CC37E5D, 0x42E240CB63689F2F, 0x6D2BDCDAE2919661, 0x42880B0236E4D951, 0x5F0F4A5898171BB6, 0x39F890F579F92F88, 0x93C5B5F47356388B, 0x63DC359D8D231B78, 0xEC16CA8AEA98AD76, ], [ 0x56436C9FE1A1AA8D, 0xEFAC4B70633B8F81, 0xBB215798D45DF7AF, 0x45F20042F24F1768, 0x930F80F4E8EB7462, 0xFF6712FFCFD75EA1, 0xAE623FD67468AA70, 0xDD2C5BC84BC8D8FC, 0x7EED120D54CF2DD9, 0x22FE545401165F1C, 0xC91800E98FB99929, 0x808BD68E6AC10365, 0xDEC468145B7605F6, 0x1BEDE3A3AEF53302, 0x43539603D6C55602, 0xAA969B5C691CCB7A, 0xA87832D392EFEE56, 0x65942C7B3C7E11AE, 0xDED2D633CAD004F6, 0x21F08570F420E565, 0xB415938D7DA94E3C, 0x91B859E59ECB6350, 0x10CFF333E0ED804A, 0x28AED140BE0BB7DD, 0xC5CC1D89724FA456, 0x5648F680F11A2741, 0x2D255069F0B7DAB3, 0x9BC5A38EF729ABD4, 0xEF2F054308F6A2BC, 0xAF2042F5CC5C2858, 0x480412BAB7F5BE2A, 0xAEF3AF4A563DFE43, 0x19AFE59AE451497F, 0x52593803DFF1E840, 0xF4F076E65F2CE6F0, 0x11379625747D5AF3, 0xBCE5D2248682C115, 0x9DA4243DE836994F, 0x066F70B33FE09017, 0x4DC4DE189B671A1C, 0x51039AB7712457C3, 0xC07A3F80C31FB4B4, 0xB46EE9C5E64A6E7C, 0xB3819A42ABE61C87, 0x21A007933A522A20, 0x2DF16F761598AA4F, 0x763C4A1371B368FD, 0xF793C46702E086A0, 0xD7288E012AEB8D31, 0xDE336A2A4BC1C44B, 0x0BF692B38D079F23, 0x2C604A7A177326B3, 0x4850E73E03EB6064, 0xCFC447F1E53C8E1B, 0xB05CA3F564268D99, 0x9AE182C8BC9474E8, 0xA4FC4BD4FC5558CA, 0xE755178D58FC4E76, 0x69B97DB1A4C03DFE, 0xF9B5B7C4ACC67C96, 0xFC6A82D64B8655FB, 0x9C684CB6C4D24417, 0x8EC97D2917456ED0, 0x6703DF9D2924E97E, ], [ 0x7F9B6AF1EBF78BAF, 0x58627E1A149BBA21, 0x2CD16E2ABD791E33, 0xD363EFF5F0977996, 0x0CE2A38C344A6EED, 0x1A804AADB9CFA741, 0x907F30421D78C5DE, 0x501F65EDB3034D07, 0x37624AE5A48FA6E9, 0x957BAF61700CFF4E, 0x3A6C27934E31188A, 0xD49503536ABCA345, 0x088E049589C432E0, 0xF943AEE7FEBF21B8, 0x6C3B8E3E336139D3, 0x364F6FFA464EE52E, 0xD60F6DCEDC314222, 0x56963B0DCA418FC0, 0x16F50EDF91E513AF, 0xEF1955914B609F93, 0x565601C0364E3228, 0xECB53939887E8175, 0xBAC7A9A18531294B, 0xB344C470397BBA52, 0x65D34954DAF3CEBD, 0xB4B81B3FA97511E2, 0xB422061193D6F6A7, 0x071582401C38434D, 0x7A13F18BBEDC4FF5, 0xBC4097B116C524D2, 0x59B97885E2F2EA28, 0x99170A5DC3115544, 0x6F423357E7C6A9F9, 0x325928EE6E6F8794, 0xD0E4366228B03343, 0x565C31F7DE89EA27, 0x30F5611484119414, 0xD873DB391292ED4F, 0x7BD94E1D8E17DEBC, 0xC7D9F16864A76E94, 0x947AE053EE56E63C, 0xC8C93882F9475F5F, 0x3A9BF55BA91F81CA, 0xD9A11FBB3D9808E4, 0x0FD22063EDC29FCA, 0xB3F256D8ACA0B0B9, 0xB03031A8B4516E84, 0x35DD37D5871448AF, 0xE9F6082B05542E4E, 0xEBFAFA33D7254B59, 0x9255ABB50D532280, 0xB9AB4CE57F2D34F3, 0x693501D628297551, 0xC62C58F97DD949BF, 0xCD454F8F19C5126A, 0xBBE83F4ECC2BDECB, 0xDC842B7E2819E230, 0xBA89142E007503B8, 0xA3BC941D0A5061CB, 0xE9F6760E32CD8021, 0x09C7E552BC76492F, 0x852F54934DA55CC9, 0x8107FCCF064FCF56, 0x098954D51FFF6580, ], [ 0xDA3A361B1C5157B1, 0xDCDD7D20903D0C25, 0x36833336D068F707, 0xCE68341F79893389, 0xAB9090168DD05F34, 0x43954B3252DC25E5, 0xB438C2B67F98E5E9, 0x10DCD78E3851A492, 0xDBC27AB5447822BF, 0x9B3CDB65F82CA382, 0xB67B7896167B4C84, 0xBFCED1B0048EAC50, 0xA9119B60369FFEBD, 0x1FFF7AC80904BF45, 0xAC12FB171817EEE7, 0xAF08DA9177DDA93D, 0x1B0CAB936E65C744, 0xB559EB1D04E5E932, 0xC37B45B3F8D6F2BA, 0xC3A9DC228CAAC9E9, 0xF3B8B6675A6507FF, 0x9FC477DE4ED681DA, 0x67378D8ECCEF96CB, 0x6DD856D94D259236, 0xA319CE15B0B4DB31, 0x073973751F12DD5E, 0x8A8E849EB32781A5, 0xE1925C71285279F5, 0x74C04BF1790C0EFE, 0x4DDA48153C94938A, 0x9D266D6A1CC0542C, 0x7440FB816508C4FE, 0x13328503DF48229F, 0xD6BF7BAEE43CAC40, 0x4838D65F6EF6748F, 0x1E152328F3318DEA, 0x8F8419A348F296BF, 0x72C8834A5957B511, 0xD7A023A73260B45C, 0x94EBC8ABCFB56DAE, 0x9FC10D0F989993E0, 0xDE68A2355B93CAE6, 0xA44CFE79AE538BBE, 0x9D1D84FCCE371425, 0x51D2B1AB2DDFB636, 0x2FD7E4B9E72CD38C, 0x65CA5B96B7552210, 0xDD69A0D8AB3B546D, 0x604D51B25FBF70E2, 0x73AA8A564FB7AC9E, 0x1A8C1E992B941148, 0xAAC40A2703D9BEA0, 0x764DBEAE7FA4F3A6, 0x1E99B96E70A9BE8B, 0x2C5E9DEB57EF4743, 0x3A938FEE32D29981, 0x26E6DB8FFDF5ADFE, 0x469356C504EC9F9D, 0xC8763C5B08D1908C, 0x3F6C6AF859D80055, 0x7F7CC39420A3A545, 0x9BFB227EBDF4C5CE, 0x89039D79D6FC5C5C, 0x8FE88B57305E2AB6, ], [ 0x001F837CC7350524, 0x1877B51E57A764D5, 0xA2853B80F17F58EE, 0x993E1DE72D36D310, 0xB3598080CE64A656, 0x252F59CF0D9F04BB, 0xD23C8E176D113600, 0x1BDA0492E7E4586E, 0x21E0BD5026C619BF, 0x3B097ADAF088F94E, 0x8D14DEDB30BE846E, 0xF95CFFA23AF5F6F4, 0x3871700761B3F743, 0xCA672B91E9E4FA16, 0x64C8E531BFF53B55, 0x241260ED4AD1E87D, 0x106C09B972D2E822, 0x7FBA195410E5CA30, 0x7884D9BC6CB569D8, 0x0647DFEDCD894A29, 0x63573FF03E224774, 0x4FC8E9560F91B123, 0x1DB956E450275779, 0xB8D91274B9E9D4FB, 0xA2EBEE47E2FBFCE1, 0xD9F1F30CCD97FB09, 0xEFED53D75FD64E6B, 0x2E6D02C36017F67F, 0xA9AA4D20DB084E9B, 0xB64BE8D8B25396C1, 0x70CB6AF7C2D5BCF0, 0x98F076A4F7A2322E, 0xBF84470805E69B5F, 0x94C3251F06F90CF3, 0x3E003E616A6591E9, 0xB925A6CD0421AFF3, 0x61BDD1307C66E300, 0xBF8D5108E27E0D48, 0x240AB57A8B888B20, 0xFC87614BAF287E07, 0xEF02CDD06FFDB432, 0xA1082C0466DF6C0A, 0x8215E577001332C8, 0xD39BB9C3A48DB6CF, 0x2738259634305C14, 0x61CF4F94C97DF93D, 0x1B6BACA2AE4E125B, 0x758F450C88572E0B, 0x959F587D507A8359, 0xB063E962E045F54D, 0x60E8ED72C0DFF5D1, 0x7B64978555326F9F, 0xFD080D236DA814BA, 0x8C90FD9B083F4558, 0x106F72FE81E2C590, 0x7976033A39F7D952, 0xA4EC0132764CA04B, 0x733EA705FAE4FA77, 0xB4D8F77BC3E56167, 0x9E21F4F903B33FD9, 0x9D765E419FB69F6D, 0xD30C088BA61EA5EF, 0x5D94337FBFAF7F5B, 0x1A4E4822EB4D7A59, ], [ 0x230E343DFBA08D33, 0x43ED7F5A0FAE657D, 0x3A88A0FBBCB05C63, 0x21874B8B4D2DBC4F, 0x1BDEA12E35F6A8C9, 0x53C065C6C8E63528, 0xE34A1D250E7A8D6B, 0xD6B04D3B7651DD7E, 0x5E90277E7CB39E2D, 0x2C046F22062DC67D, 0xB10BB459132D0A26, 0x3FA9DDFB67E2F199, 0x0E09B88E1914F7AF, 0x10E8B35AF3EEAB37, 0x9EEDECA8E272B933, 0xD4C718BC4AE8AE5F, 0x81536D601170FC20, 0x91B534F885818A06, 0xEC8177F83F900978, 0x190E714FADA5156E, 0xB592BF39B0364963, 0x89C350C893AE7DC1, 0xAC042E70F8B383F2, 0xB49B52E587A1EE60, 0xFB152FE3FF26DA89, 0x3E666E6F69AE2C15, 0x3B544EBE544C19F9, 0xE805A1E290CF2456, 0x24B33C9D7ED25117, 0xE74733427B72F0C1, 0x0A804D18B7097475, 0x57E3306D881EDB4F, 0x4AE7D6A36EB5DBCB, 0x2D8D5432157064C8, 0xD1E649DE1E7F268B, 0x8A328A1CEDFE552C, 0x07A3AEC79624C7DA, 0x84547DDC3E203C94, 0x990A98FD5071D263, 0x1A4FF12616EEFC89, 0xF6F7FD1431714200, 0x30C05B1BA332F41C, 0x8D2636B81555A786, 0x46C9FEB55D120902, 0xCCEC0A73B49C9921, 0x4E9D2827355FC492, 0x19EBB029435DCB0F, 0x4659D2B743848A2C, 0x963EF2C96B33BE31, 0x74F85198B05A2E7D, 0x5A0F544DD2B1FB18, 0x03727073C2E134B1, 0xC7F6AA2DE59AEA61, 0x352787BAA0D7C22F, 0x9853EAB63B5E0B35, 0xABBDCDD7ED5C0860, 0xCF05DAF5AC8D77B0, 0x49CAD48CEBF4A71E, 0x7A4C10EC2158C4A6, 0xD9E92AA246BF719E, 0x13AE978D09FE5557, 0x730499AF921549FF, 0x4E4B705B92903BA4, 0xFF577222C14F0A3A, ], ], ] epHashes = [ 0x70CC73D90BC26E24, 0xE21A6B35DF0C3AD7, 0x003A93D8B2806962, 0x1C99DED33CB890A1, 0xCF3145DE0ADD4289, 0xD0E4427A5514FB72, 0x77C621CC9FB3A483, 0x67A34DAC4356550B, ] W_OOHash = 0x31D71DCE64B2C310 W_OOOHash = 0xF165B587DF898190 B_OOHash = 0xA57E6339DD2CF3A0 B_OOOHash = 0x1EF6E6DBB1961EC9 colorHash = 0xF8D626AAAF278509 holdingHash = [ [ [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], ], [ [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], [ 0, ], ], ] for color in (WHITE, BLACK): for pt in (PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, HAWK, ELEPHANT): for i in range(16): holdingHash[color][pt].append(random.getrandbits(64)) for color in (WHITE, BLACK): for pt in (HAWK, ELEPHANT): pieceHashes[color].append([]) for i in range(64): pieceHashes[color][pt].append(random.getrandbits(64)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/TranspositionTable.py0000755000175100001770000001020114614030313023626 0ustar00runnerdockerfrom ctypes import create_string_buffer, memset from struct import Struct from pychess.Utils.const import hashfALPHA, hashfBETA, hashfEXACT, hashfBAD from pychess.Utils.lutils.ldata import MATE_VALUE, MAXPLY # Store hash entries in buckets of 4. An entry consists of: # key 32 bits derived from the board hash # search_id counter used to determine entry's age # hashf bound type (one of the hashf* constants) # depth search depth # score search score # move best move (or cutoff move) entryType = Struct("=I B B H h H") class TranspositionTable: def __init__(self, maxSize): assert maxSize > 0 self.buckets = maxSize // (4 * entryType.size) self.data = create_string_buffer(self.buckets * 4 * entryType.size) self.search_id = 0 self.killer1 = [-1] * 80 self.killer2 = [-1] * 80 self.hashmove = [-1] * 80 self.butterfly = [0] * (64 * 64) def clear(self): memset(self.data, 0, self.buckets * 4 * entryType.size) self.killer1 = [-1] * 80 self.killer2 = [-1] * 80 self.hashmove = [-1] * 80 self.butterfly = [0] * (64 * 64) def newSearch(self): self.search_id = (self.search_id + 1) & 0xFF # TODO: consider clearing butterfly table def probe(self, board, depth, alpha, beta): baseIndex = (board.hash % self.buckets) * 4 key = (board.hash // self.buckets) & 0xFFFFFFFF for i in range(baseIndex, baseIndex + 4): tkey, search_id, hashf, tdepth, score, move = entryType.unpack_from( self.data, i * entryType.size ) if tkey == key: # Mate score bounds are guaranteed to be accurate at any depth. if tdepth < depth and abs(score) < MATE_VALUE - MAXPLY: return move, score, hashfBAD if hashf == hashfEXACT: return move, score, hashf if hashf == hashfALPHA and score <= alpha: return move, alpha, hashf if hashf == hashfBETA and score >= beta: return move, beta, hashf def record(self, board, move, score, hashf, depth): baseIndex = (board.hash % self.buckets) * 4 key = (board.hash // self.buckets) & 0xFFFFFFFF # We always overwrite *something*: an empty slot, this position's last entry, or else the least relevant. staleIndex = baseIndex staleRelevance = 0xFFFF for i in range(baseIndex, baseIndex + 4): tkey, search_id, thashf, tdepth, tscore, tmove = entryType.unpack_from( self.data, i * entryType.size ) if tkey == 0 or tkey == key: staleIndex = i break relevance = ( (0x8000 if search_id != self.search_id and thashf == hashfEXACT else 0) + (0x4000 if ((self.search_id - search_id) & 0xFF) > 1 else 0) + tdepth ) if relevance < staleRelevance: staleIndex = i staleRelevance = relevance entryType.pack_into( self.data, staleIndex * entryType.size, key, self.search_id, hashf, depth, score, move, ) def addKiller(self, ply, move): if self.killer1[ply] == -1: self.killer1[ply] = move elif move != self.killer1[ply]: self.killer2[ply] = move def isKiller(self, ply, move): if self.killer1[ply] == move: return 10 elif self.killer2[ply] == move: return 8 if ply >= 2: if self.killer1[ply - 2] == move: return 6 elif self.killer2[ply - 2] == move: return 4 return 0 def setHashMove(self, ply, move): self.hashmove[ply] = move def isHashMove(self, ply, move): return self.hashmove[ply] == move def addButterfly(self, move, depth): self.butterfly[move & 0xFFF] += 1 << depth def getButterfly(self, move): return self.butterfly[move & 0xFFF] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/__init__.py0000755000175100001770000000000014614030313021535 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/attack.py0000755000175100001770000003374114614030313021267 0ustar00runnerdockerfrom .bitboard import bitPosArray, notBitPosArray, lastBit, firstBit, clearBit, lsb from .ldata import moveArray, rays, directions, fromToRay, PIECE_VALUES, PAWN_VALUE from pychess.Utils.const import ( ASEAN_VARIANTS, ASEAN_BBISHOP, ASEAN_WBISHOP, ASEAN_QUEEN, SCHESS, BLACK, WHITE, PAWN, BPAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, ENPASSANT, ATOMICCHESS, HAWK, ELEPHANT, ) # # Caveat: Many functions in this module has very similar code. If you fix a # bug, or write a performance enhancement, please update all functions. Apologies # for the inconvenience # def isAttacked(board, cord, color, ischecked=False): """To determine if cord is attacked by any pieces from color.""" _moveArray = moveArray pboards = board.boards[color] # Knights, Hawks, Elephants if (pboards[KNIGHT] | pboards[HAWK] | pboards[ELEPHANT]) & _moveArray[KNIGHT][cord]: return True rayto = fromToRay[cord] blocker = board.blocker # Bishops & Queens if board.variant in ASEAN_VARIANTS: bishopMoves = _moveArray[ASEAN_BBISHOP if color == WHITE else ASEAN_WBISHOP] if pboards[BISHOP] & bishopMoves[cord]: return True if pboards[QUEEN] & _moveArray[ASEAN_QUEEN][cord]: return True else: bitboard = (pboards[BISHOP] | pboards[HAWK] | pboards[QUEEN]) & _moveArray[ BISHOP ][cord] if bitboard: others = ~bitboard & blocker # inlined iterBits() while bitboard: bit = bitboard & -bitboard ray = rayto[lsb[bit]] # If there is a path and no other piece stand in our way if ray and not ray & others: return True bitboard -= bit # Rooks & Queens if board.variant in ASEAN_VARIANTS: bitboard = pboards[ROOK] & _moveArray[ROOK][cord] else: bitboard = (pboards[ROOK] | pboards[QUEEN] | pboards[ELEPHANT]) & _moveArray[ ROOK ][cord] if bitboard: others = ~bitboard & blocker # inlined iterBits() while bitboard: bit = bitboard & -bitboard ray = rayto[lsb[bit]] # If there is a path and no other piece stand in our way if ray and not ray & others: return True bitboard -= bit # Pawns # Would a pawn of the opposite color, standing at out kings cord, be able # to attack any of our pawns? ptype = color == WHITE and BPAWN or PAWN if pboards[PAWN] & _moveArray[ptype][cord]: return True # King if pboards[KING] & _moveArray[KING][cord]: if board.variant == ATOMICCHESS and ischecked: return False else: return True return False # TODO tests def propagateRayFollowingMovement(board, cord, bitboard): "tests if there are pieces blocking the way on the movement line" rayto = fromToRay[cord] blocker = board.blocker bits = 0 while bitboard: bit = bitboard & -bitboard c = lsb[bit] ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] bitboard -= bit return bits def piecesAttackingCord(board, cord, color): """return the type of piece attacking Cord does not support variant yet The type of args are LBoard, Cord as flat number (cord argument of class Cord, BLACK or WHITE from const file """ _moveArray = moveArray pieces = board.boards[color] pieces_attacking = [] # Knights bits_knight = pieces[KNIGHT] & _moveArray[KNIGHT][cord] if bits_knight: pieces_attacking.append(KNIGHT) # Kings bits_king = pieces[KING] & _moveArray[KING][cord] if bits_king: pieces_attacking.append(KING) # Pawns, to test , bug possible with BPAWN bits_pawn = pieces[PAWN] & _moveArray[color == WHITE and BPAWN or PAWN][cord] if bits_pawn: pieces_attacking.append(PAWN) # Bishops bitboard_bishop = (pieces[BISHOP] | pieces[QUEEN]) & _moveArray[BISHOP][cord] if propagateRayFollowingMovement(board, cord, bitboard_bishop): pieces_attacking.append(BISHOP) bitboard_rook = (pieces[ROOK] | pieces[QUEEN]) & _moveArray[ROOK][cord] # inlined iterBits() if propagateRayFollowingMovement(board, cord, bitboard_rook): pieces_attacking.append(ROOK) bitboard_queen_diago = pieces[QUEEN] & _moveArray[BISHOP][cord] if propagateRayFollowingMovement(board, cord, bitboard_queen_diago): pieces_attacking.append(QUEEN) bitboard_queen_straight = pieces[QUEEN] & _moveArray[ROOK][cord] if propagateRayFollowingMovement(board, cord, bitboard_queen_straight): pieces_attacking.append(QUEEN) return pieces_attacking def getAttacks(board, cord, color): """To create a bitboard of pieces of color, which attacks cord The type of args are LBoard, ,BLACK or WHITE from const file """ _moveArray = moveArray pieces = board.boards[color] # Knights bits = (pieces[KNIGHT] | pieces[HAWK] | pieces[ELEPHANT]) & _moveArray[KNIGHT][cord] # Kings bits |= pieces[KING] & _moveArray[KING][cord] # Pawns, to test , bug possible with BPAWN bits |= pieces[PAWN] & _moveArray[color == WHITE and BPAWN or PAWN][cord] rayto = fromToRay[cord] blocker = board.blocker # Bishops and Queens if board.variant in ASEAN_VARIANTS: bishopMoves = _moveArray[ASEAN_BBISHOP if color == WHITE else ASEAN_WBISHOP] bits |= pieces[BISHOP] & bishopMoves[cord] bits |= pieces[QUEEN] & _moveArray[ASEAN_QUEEN][cord] else: bitboard = (pieces[BISHOP] | pieces[QUEEN] | pieces[HAWK]) & _moveArray[BISHOP][ cord ] # inlined iterBits() # check whether or not there is a piece blocking the path in diagonal while bitboard: bit = bitboard & -bitboard c = lsb[bit] ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] bitboard -= bit # Rooks and queens if board.variant in ASEAN_VARIANTS: bitboard = pieces[ROOK] & _moveArray[ROOK][cord] else: bitboard = (pieces[ROOK] | pieces[QUEEN] | pieces[ELEPHANT]) & _moveArray[ROOK][ cord ] # inlined iterBits() # check whether or not there is a piece blocking the path in straight line while bitboard: bit = bitboard & -bitboard c = lsb[bit] ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] bitboard -= bit return bits def pinnedOnKing(board, cord, color): # Determine if the piece on cord is pinned against its colors king. # In chess, a pin is a situation in which a piece is forced to stay put # because moving it would expose a more valuable piece behind it to # capture. # Caveat: pinnedOnKing should only be called by genCheckEvasions(). kingCord = board.kings[color] dir = directions[kingCord][cord] if dir == -1: return False opcolor = 1 - color blocker = board.blocker # Path from piece to king is blocked, so no pin if clearBit(fromToRay[kingCord][cord], cord) & blocker: return False b = (rays[kingCord][dir] ^ fromToRay[kingCord][cord]) & blocker if not b: return False cord1 = cord > kingCord and firstBit(b) or lastBit(b) # If diagonal if board.variant in ASEAN_VARIANTS: pass else: if dir <= 3 and bitPosArray[cord1] & ( board.boards[opcolor][QUEEN] | board.boards[opcolor][BISHOP] | board.boards[opcolor][HAWK] ): return True # Rank / file if board.variant in ASEAN_VARIANTS: if dir >= 4 and bitPosArray[cord1] & board.boards[opcolor][ROOK]: return True else: if dir >= 4 and bitPosArray[cord1] & ( board.boards[opcolor][QUEEN] | board.boards[opcolor][ROOK] | board.boards[opcolor][ELEPHANT] ): return True return False def staticExchangeEvaluate(board, moveOrTcord, color=None): """The GnuChess Static Exchange Evaluator (or SEE for short). First determine the target square. Create a bitboard of all squares attacking the target square for both sides. Using these 2 bitboards, we take turn making captures from smallest piece to largest piece. When a sliding piece makes a capture, we check behind it to see if another attacker piece has been exposed. If so, add this to the bitboard as well. When performing the "captures", we stop if one side is ahead and doesn't need to capture, a form of pseudo-minimaxing.""" # # Notice: If you use the tcord version, the color is the color attacked, and # the color to witch the score is relative. # swaplist = [0] LASTPIECE = ELEPHANT if board.variant == SCHESS else KING if color is None: move = moveOrTcord flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 color = board.friends[BLACK] & bitPosArray[fcord] and BLACK or WHITE opcolor = 1 - color boards = board.boards[color] opboards = board.boards[opcolor] ours = getAttacks(board, tcord, color) ours = clearBit(ours, fcord) theirs = getAttacks(board, tcord, opcolor) if xray[board.arBoard[fcord]]: ours, theirs = addXrayPiece(board, tcord, fcord, color, ours, theirs) from pychess.Variants import variants PROMOTIONS = variants[board.variant].PROMOTIONS if flag in PROMOTIONS: swaplist = [PIECE_VALUES[flag - 3] - PAWN_VALUE] lastval = -PIECE_VALUES[flag - 3] else: if flag == ENPASSANT: swaplist = [PAWN_VALUE] else: swaplist = [PIECE_VALUES[board.arBoard[tcord]]] lastval = -PIECE_VALUES[board.arBoard[fcord]] else: tcord = moveOrTcord opcolor = 1 - color boards = board.boards[color] opboards = board.boards[opcolor] ours = getAttacks(board, tcord, color) theirs = getAttacks(board, tcord, opcolor) lastval = -PIECE_VALUES[board.arBoard[tcord]] while theirs: for piece in range(PAWN, LASTPIECE + 1): r = theirs & opboards[piece] if r: cord = firstBit(r) theirs = clearBit(theirs, cord) if xray[piece]: ours, theirs = addXrayPiece(board, tcord, cord, color, ours, theirs) swaplist.append(swaplist[-1] + lastval) lastval = PIECE_VALUES[piece] break if not ours: break for piece in range(PAWN, LASTPIECE + 1): r = ours & boards[piece] if r: cord = firstBit(r) ours = clearBit(ours, cord) if xray[piece]: ours, theirs = addXrayPiece(board, tcord, cord, color, ours, theirs) swaplist.append(swaplist[-1] + lastval) lastval = -PIECE_VALUES[piece] break # At this stage, we have the swap scores in a list. We just need to # mini-max the scores from the bottom up to the top of the list. for n in range(len(swaplist) - 1, 0, -1): if n & 1: if swaplist[n] <= swaplist[n - 1]: swaplist[n - 1] = swaplist[n] else: if swaplist[n] >= swaplist[n - 1]: swaplist[n - 1] = swaplist[n] return swaplist[0] xray = (False, True, False, True, True, True, False, True, True) def addXrayPiece(board, tcord, fcord, color, ours, theirs): """This is used by swapOff. The purpose of this routine is to find a piece which attack through another piece (e.g. two rooks, Q+B, B+P, etc.) Color is the side attacking the square where the swapping is to be done.""" dir = directions[tcord][fcord] a = rays[fcord][dir] & board.blocker if not a: return ours, theirs if tcord < fcord: ncord = firstBit(a) else: ncord = lastBit(a) piece = board.arBoard[ncord] if board.variant in ASEAN_VARIANTS: cond = piece == ROOK and dir > 3 else: cond = piece == ( QUEEN or (piece == ROOK and dir > 3) or (piece == ELEPHANT and dir > 3) or (piece == BISHOP and dir < 4) or (piece == HAWK and dir < 4) ) if cond: bit = bitPosArray[ncord] if bit & board.friends[color]: ours |= bit else: theirs |= bit return ours, theirs def defends(board, fcord, tcord): """Could fcord attack tcord if the piece on tcord wasn't on the team of fcord? Doesn't test check.""" # Work on a board copy, as we are going to change some stuff board = board.clone() if board.friends[WHITE] & bitPosArray[fcord]: color = WHITE else: color = BLACK opcolor = 1 - color boards = board.boards[color] opboards = board.boards[opcolor] # To see if we now defend the piece, we have to "give" it to the other team piece = board.arBoard[tcord] # backup = boards[piece] # opbackup = opboards[piece] boards[piece] &= notBitPosArray[tcord] opboards[piece] |= bitPosArray[tcord] board.friends[color] &= notBitPosArray[tcord] board.friends[opcolor] |= bitPosArray[tcord] # Can we "attack" the piece now? backupColor = board.color board.setColor(color) from .lmovegen import newMove from .validator import validateMove islegal = validateMove(board, newMove(fcord, tcord)) board.setColor(backupColor) # We don't need to set the board back, as we work on a copy # boards[piece] = backup # opboards[piece] = opbackup # board.friends[color] |= bitPosArray[tcord] # board.friends[opcolor] &= notBitPosArray[tcord] return islegal ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/bitboard.py0000755000175100001770000000360314614030313021600 0ustar00runnerdockerfrom array import array # setBit returns a bitboard with the ith bit set def setBit(bitboard, i): return bitboard | bitPosArray[i] bitPosArray = [2 ** (63 - i) for i in range(64)] # clearBit returns the bitboard with the ith bit unset def clearBit(bitboard, i): return bitboard & notBitPosArray[i] notBitPosArray = [~(2 ** (63 - i)) for i in range(64)] # firstBit returns the bit closest to 0 (A4) that is set in the board def firstBit(bitboard): """Returns the index of the first non-zero bit from left""" if bitboard >> 48: return lzArray[bitboard >> 48] if bitboard >> 32: return lzArray[bitboard >> 32] + 16 if bitboard >> 16: return lzArray[bitboard >> 16] + 32 return lzArray[bitboard] + 48 # The bitCount array returns the leading non-zero bit in the 16 bit # input argument. lzArray = array("B", [0] * 65536) s = n = 1 for i in range(16): for j in range(s, s + n): lzArray[j] = 16 - 1 - i s += n n += n # lastBit returns the bit closest to 63 (H8) that is set in the board def lastBit(bitboard): return lsb[bitboard & -bitboard] lsb = {} for i in range(64): lsb[2**i] = 63 - i # iterBits yields, or returns a list of, the positions of all set bits in a # bitboard. There is no guarantee of the order. def iterBits(bitboard): while bitboard: bit = bitboard & -bitboard yield lsb[bit] bitboard -= bit # toString returns a representation of the bitboard for debugging def toString(bitboard): s = [] last = -1 while bitboard: cord = firstBit(bitboard) bitboard = clearBit(bitboard, cord) for c in range(cord - last - 1): s.append(" -") s.append(" #") last = cord while len(s) < 64: s.append(" -") s2 = "" for i in range(64, 0, -8): a = s[i - 8 : i] s2 += "".join(a) + "\n" return s2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/egtb_gaviota.py0000755000175100001770000002401114614030313022441 0ustar00runnerdockerimport os import re from ctypes import ( byref, c_byte, c_char_p, c_int, c_uint, c_ulong, c_size_t, c_double, Structure, CDLL, CFUNCTYPE, POINTER, ) from .bitboard import firstBit, clearBit from .lmovegen import genAllMoves, genCheckEvasions from pychess.Utils.const import WHITE, BLACK, DRAW, WHITEWON, BLACKWON from pychess.System import conf from pychess.System.prefix import getDataPrefix from pychess.System.Log import log class TbStats(Structure): _fields_ = [ ("wdl_easy_hits", c_ulong * 2), ("wdl_hard_prob", c_ulong * 2), ("wdl_soft_prob", c_ulong * 2), ("wdl_cachesize", c_size_t), ("wdl_occupancy", c_double), ("dtm_easy_hits", c_ulong * 2), ("dtm_hard_prob", c_ulong * 2), ("dtm_soft_prob", c_ulong * 2), ("dtm_cachesize", c_size_t), ("dtm_occupancy", c_double), ("total_hits", c_ulong * 2), ("memory_hits", c_ulong * 2), ("drive_hits", c_ulong * 2), ("drive_miss", c_ulong * 2), ("bytes_read", c_ulong * 2), ("files_opened", c_ulong), ("memory_efficiency", c_double), ] class EgtbGaviota: def __init__(self): self.libgtb = None self.initialized = False # Get a list of files in the tablebase folder. configuredTbPath = conf.get("egtb_path") tbPath = configuredTbPath or getDataPrefix() try: tbPathContents = os.listdir(tbPath) except OSError as e: if configuredTbPath: log.warning("Unable to open Gaviota TB folder: %s" % repr(e)) return # Find files named *.gtb.cp# and pick the most common "#". # (This is the compression scheme; the library currently only uses one at a time.) schemeCount = [0] * 10 for filename in tbPathContents: match = re.search(r"\.gtb\.cp(\d)$", filename) if match: schemeCount[int(match.group(1))] += 1 compressionScheme = max(zip(schemeCount, range(10))) if compressionScheme[0] == 0: if configuredTbPath: log.warning( "Could not find any Gaviota TB files in %s" % configuredTbPath ) return compressionScheme = compressionScheme[1] # Locate and load the library. if not self._loadLibrary(): return self._setupFunctionPrototypes() self.pathList = self.tbpaths_init() self.pathList = self.tbpaths_add(self.pathList, tbPath.encode()) initInfo = self.tb_init(True, compressionScheme, self.pathList) self.initialized = self.tb_is_initialized() != 0 if not self.initialized: log.warning(initInfo or "Failed to initialize Gaviota EGTB library") self.pathList = self.tbpaths_done(self.pathList) return elif initInfo: log.info(initInfo) # TODO: Set up a WDL cache area once the engine can use it. self.initialized &= self.tbcache_init(4 * 1024 * 1024, 0) if not self.initialized: log.warning("Failed to initialize Gaviota EGTB cache") self.tb_done() self.pathList = self.tbpaths_done(self.pathList) return self.availability = self.tb_availability() def _del(self): if self.initialized: self.tb_done() self.pathList = self.tbpaths_done(self.pathList) def supports(self, size): return self.initialized and ( sum(size) <= 2 or (self.availability & (3 << (2 * sum(size) - 6))) != 0 ) def scoreAllMoves(self, board): result, depth = self.scoreGame(board, False, False) if result is None: return [] scores = [] gen = board.isChecked() and genCheckEvasions or genAllMoves for move in gen(board): board.applyMove(move) if not board.opIsChecked(): result, depth = self.scoreGame(board, False, False) if result is None: log.warning("An EGTB file does not have all its dependencies") board.popMove() return [] scores.append((move, result, depth)) board.popMove() def mateScore(mrd): if mrd[1] == DRAW: return 0 absScore = 32767 - mrd[2] if (board.color == WHITE) ^ (mrd[1] == WHITEWON): return absScore return -absScore scores.sort(key=mateScore) return scores def scoreGame(self, board, omitDepth, probeSoft): stm = board.color epsq = board.enpassant or 64 # 64 is tb_NOSQUARE castles = (board.castling >> 2 & 3) | (board.castling << 2 & 12) tbinfo = c_uint() depth = c_uint() SqArray = c_uint * 65 PcArray = c_byte * 65 pc, sq = [], [] for color in (WHITE, BLACK): sq.append(SqArray()) pc.append(PcArray()) i = 0 bb = board.friends[color] while bb: b = firstBit(bb) bb = clearBit(bb, b) sq[-1][i] = b pc[-1][i] = board.arBoard[b] i += 1 sq[-1][i] = 64 # tb_NOSQUARE, terminates the list pc[-1][i] = 0 # tb_NOPIECE, terminates the list if omitDepth and probeSoft: ok = self.tb_probe_WDL_soft( stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), ) elif omitDepth and not probeSoft: ok = self.tb_probe_WDL_hard( stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), ) elif not omitDepth and probeSoft: ok = self.tb_probe_soft( stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), byref(depth), ) elif not omitDepth and not probeSoft: ok = self.tb_probe_hard( stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), byref(depth), ) resultMap = [DRAW, WHITEWON, BLACKWON] if not ok or not 0 <= tbinfo.value <= 2: return None, None result = resultMap[tbinfo.value] if omitDepth or result == DRAW: depth = None else: depth = depth.value return result, depth def _loadLibrary(self): libName = "libgaviotatb.so.1.0.1" try: self.libgtb = CDLL(libName) except OSError: log.warning("Failed to load Gaviota EGTB library %s" % libName) return None return self.libgtb # Prototypes from gtb-probe.h follow. def _setupFunctionPrototypes(self): def proto(name, returnType, *args): argTypes = map(lambda x: x[0], args) argNames = map(lambda x: x[1], args) funcType = CFUNCTYPE(returnType, *argTypes) paramFlags = tuple(zip([1] * len(args), argNames)) setattr(self, name, funcType((name, self.libgtb), paramFlags)) paths_t = POINTER(c_char_p) uip = POINTER(c_uint) ucp = POINTER(c_byte) proto( "tb_init", c_char_p, (c_int, "verbosity"), (c_int, "compression_scheme"), (paths_t, "paths"), ) proto( "tb_restart", c_char_p, (c_int, "verbosity"), (c_int, "compression_scheme"), (paths_t, "paths"), ) proto("tb_done", None) proto( "tb_probe_hard", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), (uip, "plies"), ) proto( "tb_probe_soft", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), (uip, "plies"), ) proto( "tb_probe_WDL_hard", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), ) proto( "tb_probe_WDL_soft", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), ) proto("tb_is_initialized", c_int) proto("tb_availability", c_uint) proto("tb_indexmemory", c_size_t) proto("tbcache_init", c_int, (c_size_t, "cache_mem"), (c_int, "wdl_fraction")) proto( "tbcache_restart", c_int, (c_size_t, "cache_mem"), (c_int, "wdl_fraction") ) proto("tbcache_done", None) proto("tbcache_is_on", c_int) proto("tbcache_flush", None) proto("tbstats_reset", None) proto("tbstats_get", None, (POINTER(TbStats), "stats")) proto("tbpaths_init", paths_t) proto("tbpaths_add", paths_t, (paths_t, "ps"), (c_char_p, "newpath")) proto("tbpaths_done", paths_t, (paths_t, "ps")) proto("tbpaths_getmain", c_char_p) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/egtb_k4it.py0000755000175100001770000001072314614030313021667 0ustar00runnerdockerimport asyncio import re from urllib.request import urlopen from pychess.Utils.lutils.lmovegen import newMove from pychess.Utils.lutils.lmove import FILE, RANK from pychess.Utils.const import ( WHITE, DRAW, NORMAL_MOVE, ENPASSANT, EMPTY, PAWN, BLACKWON, WHITEWON, QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION, ) from pychess.Utils.repr import reprColor from pychess.System.Log import log from pychess.System import conf URL = "http://www.k4it.de/egtb/fetch.php?action=egtb&fen=" expression = re.compile(r"(\d+)-(\d+)-?(\d+)?: (Win in \d+|Draw|Lose in \d+)") PROMOTION_FLAGS = { 2: QUEEN_PROMOTION, 3: ROOK_PROMOTION, 4: BISHOP_PROMOTION, 5: KNIGHT_PROMOTION, 8: QUEEN_PROMOTION, 9: ROOK_PROMOTION, 10: BISHOP_PROMOTION, 11: KNIGHT_PROMOTION, } class EgtbK4kit: def __init__(self): self.table = {} def supports(self, size): return sum(size) < 7 async def scoreAllMoves(self, board, probeSoft=False): global URL, expression, PROMOTION_FLAGS fen = board.asFen().split()[0] + " w - - 0 1" if (fen, board.color) in self.table: return self.table[(fen, board.color)] if probeSoft or not conf.get("online_egtb_check"): return [] def get_data(URL, fen): # Request the page url = (URL + fen).replace(" ", "%20") try: f = urlopen(url) except OSError as e: log.warning( "Unable to read endgame tablebase from the Internet: %s" % repr(e) ) data = b"" data = f.read() return data loop = asyncio.get_event_loop() future = loop.run_in_executor(None, get_data, URL, fen) data = await future # Parse for color, move_data in enumerate(data.split(b"\nNEXTCOLOR\n")): try: moves = [] for fcord, tcord, promotion, result in expression.findall( move_data.decode() ): fcord = int(fcord) tcord = int(tcord) if promotion: flag = PROMOTION_FLAGS[int(promotion)] elif ( RANK(fcord) != RANK(tcord) and FILE(fcord) != FILE(tcord) and board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY ): flag = ENPASSANT else: flag = NORMAL_MOVE move = newMove(fcord, tcord, flag) if result == "Draw": state = DRAW steps = 0 else: s, steps = result.split(" in ") steps = int(steps) if result.startswith("Win"): if color == WHITE: state = WHITEWON else: state = BLACKWON elif result.startswith("Lose"): if color == WHITE: state = BLACKWON else: state = WHITEWON moves.append((move, state, steps)) if moves: self.table[(fen, color)] = moves elif color == board.color and board.opIsChecked(): log.warning("Asked endgametable for a won position: %s" % fen) elif color == board.color: log.warning( "Couldn't get %s data for position %s.\nData was: %s" % (reprColor[color], fen, repr(data)) ) except (KeyError, ValueError): log.warning( "Couldn't parse {} data for position {}.\nData was: {}".format( reprColor[color], fen, repr(data) ) ) self.table[(fen, color)] = [] # Don't try again. if (fen, board.color) in self.table: return self.table[(fen, board.color)] return [] def scoreGame(self, board, omitDepth, probeSoft): scores = self.scoreAllMoves(board, probeSoft) if scores: return scores[0][1], scores[0][2] return None, None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/ldata.py0000755000175100001770000005525714614030313021113 0ustar00runnerdockerfrom functools import reduce from operator import or_ from pychess.Utils.const import ( WHITE, BLACK, KING, PAWN, EMPTY, KNIGHT, ROOK, BISHOP, QUEEN, A1, A2, A3, A4, A5, A6, A7, A8, B2, C3, D4, E5, F6, G7, H8, B7, C6, D5, E4, F3, G2, H1, B1, B8, H2, H7, G3, G6, B3, B6, sliders, ) from .bitboard import bitPosArray, iterBits, setBit def RANK(cord): return cord >> 3 def FILE(cord): return cord & 7 # Evaluating constants PAWN_VALUE = 100 KNIGHT_VALUE = 300 BISHOP_VALUE = 330 ROOK_VALUE = 500 QUEEN_VALUE = 900 KING_VALUE = 2000 HAWK_VALUE = 800 ELEPHANT_VALUE = 850 PIECE_VALUES = [ 0, PAWN_VALUE, KNIGHT_VALUE, BISHOP_VALUE, ROOK_VALUE, QUEEN_VALUE, KING_VALUE, HAWK_VALUE, ELEPHANT_VALUE, ] ASEAN_PIECE_VALUES = (0, 100, 450, 300, 630, 180, 2000) CRAZY_PIECE_VALUES = (0, 100, 200, 240, 240, 380, 2000) ATOMIC_PIECE_VALUES = (0, 100, 90, 0, 220, 850, 2000) # Maximum possible search depth. The hash structure only allows 8-bit depths. MAXPLY = 10 # Maximum possible score. Mate in n ply is +/- (MATE_VALUE-n). # The hash structure only allows signed 16-bit scores. MATE_VALUE = MAXVAL = 32767 MATE_DEPTH = 255 def VALUE_AT_PLY(val, ply): """Return the value of scoring val a given number of plies into the future.""" if val >= +32512: return val - ply if val <= -32512: return val + ply return val # How many points does it give to have the piece standing i cords from the # opponent king pawnTScale = [0, 40, 20, 12, 9, 6, 4, 2, 1, 0] bishopTScale = [0, 50, 25, 15, 7, 5, 3, 2, 2, 1] knightTScale = [0, 100, 50, 35, 10, 3, 2, 2, 1, 1] rookTScale = [0, 50, 40, 15, 5, 2, 1, 1, 1, 0] queenTScale = [0, 100, 60, 20, 10, 7, 5, 4, 3, 2] passedScores = ((0, 48, 48, 120, 144, 192, 240, 0), (0, 240, 192, 144, 120, 48, 48, 0)) # Penalties for one or more isolated pawns on a given file isolani_normal = (-8, -10, -12, -14, -14, -12, -10, -8) # Penalties if the file is half-open (i.e. no enemy pawns on it) isolani_weaker = (-22, -24, -26, -28, -28, -26, -24, -22) # Distance boards for different pieces taxicab = [[0] * 64 for i in range(64)] sdistance = [[0] * 64 for i in range(64)] for fcord in range(64): for tcord in range(fcord + 1, 64): fx = FILE(fcord) fy = RANK(fcord) tx = FILE(tcord) ty = RANK(tcord) taxicab[fcord][tcord] = taxicab[fcord][tcord] = abs(fx - tx) + abs(fy - ty) sdistance[fcord][tcord] = sdistance[fcord][tcord] = min( abs(fx - tx), abs(fy - ty) ) distance = [[[0] * 64 for i in range(64)] for j in range(KING + 1)] distance[EMPTY] = None distance[KING] = sdistance distance[PAWN] = sdistance # Special table for knightdistances knightDistance = [ 6, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 2, 3, 0, 3, 2, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 6, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, ] # Calculate for fcord in range(64): frank = RANK(fcord) ffile = FILE(fcord) for tcord in range(fcord + 1, 64): # Notice, that we skip fcord == tcord, as all fields are zero from # scratch in anyway trank = RANK(tcord) tfile = FILE(tcord) # Knight field = (7 - frank + trank) * 15 + 7 - ffile + tfile distance[KNIGHT][tcord][fcord] = distance[KNIGHT][fcord][tcord] = ( knightDistance[field] ) # Rook if frank == trank or ffile == tfile: distance[ROOK][tcord][fcord] = distance[ROOK][fcord][tcord] = 1 else: distance[ROOK][tcord][fcord] = distance[ROOK][fcord][tcord] = 2 # Bishop if abs(frank - trank) == abs(ffile - tfile): distance[BISHOP][tcord][fcord] = distance[BISHOP][fcord][tcord] = 1 else: distance[BISHOP][tcord][fcord] = distance[BISHOP][fcord][tcord] = 2 # Queen if frank == trank or ffile == tfile or abs(frank - trank) == abs(ffile - tfile): distance[QUEEN][tcord][fcord] = distance[QUEEN][fcord][tcord] = 1 else: distance[QUEEN][tcord][fcord] = distance[QUEEN][fcord][tcord] = 2 # Special cases for knights in corners distance[KNIGHT][A1][B2] = distance[KNIGHT][B2][A1] = 4 distance[KNIGHT][H1][G2] = distance[KNIGHT][G2][H1] = 4 distance[KNIGHT][A8][B7] = distance[KNIGHT][B7][A8] = 4 distance[KNIGHT][H8][G7] = distance[KNIGHT][G7][H8] = 4 ############################################################################### # Boards used for evaluating ############################################################################### pawnScoreBoard = ( ( 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, -10, -10, 5, 5, 5, -2, -2, -2, 6, 6, -2, -2, -2, 0, 0, 0, 25, 25, 0, 0, 0, 2, 2, 12, 16, 16, 12, 2, 2, 4, 8, 12, 16, 16, 12, 4, 4, 4, 8, 12, 16, 16, 12, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, ), ( 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 16, 12, 4, 4, 4, 8, 12, 16, 16, 12, 4, 4, 2, 2, 12, 16, 16, 12, 2, 2, 0, 0, 0, 25, 25, 0, 0, 0, -2, -2, -2, 6, 6, -2, -2, -2, 5, 5, 5, -10, -10, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, ), ) outpost = ( ( 0, 0, 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, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 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, ), ) normalKing = ( 24, 24, 24, 16, 16, 0, 32, 32, 24, 20, 16, 12, 12, 16, 20, 24, 16, 12, 8, 4, 4, 8, 12, 16, 12, 8, 4, 0, 0, 4, 8, 12, 12, 8, 4, 0, 0, 4, 8, 12, 16, 12, 8, 4, 4, 8, 12, 16, 24, 20, 16, 12, 12, 16, 20, 24, 24, 24, 24, 16, 16, 0, 32, 32, ) endingKing = ( 0, 6, 12, 18, 18, 12, 6, 0, 6, 12, 18, 24, 24, 18, 12, 6, 12, 18, 24, 32, 32, 24, 18, 12, 18, 24, 32, 48, 48, 32, 24, 18, 18, 24, 32, 48, 48, 32, 24, 18, 12, 18, 24, 32, 32, 24, 18, 12, 6, 12, 18, 24, 24, 18, 12, 6, 0, 6, 12, 18, 18, 12, 6, 0, ) racingKing = ( 0, 0, 0, 0, 0, 0, 0, 0, 500, 500, 500, 500, 500, 500, 500, 500, 950, 950, 950, 950, 950, 950, 950, 950, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 14000, 14000, 14000, 14000, 14000, 14000, 14000, 14000, ) # Maps for bitboards d2e2 = (0x0018000000000000, 0x0000000000001800) brank7 = (0x000000000000FF00, 0x00FF000000000000) brank8 = (0x00000000000000FF, 0xFF00000000000000) brank67 = (0x0000000000FFFF00, 0x00FFFF0000000000) brank58 = (0x00000000FFFFFFFF, 0xFFFFFFFF00000000) brank48 = (0x000000FFFFFFFFFF, 0xFFFFFFFFFF000000) # Penalties if the file is half-open (i.e. no enemy pawns on it) isolani_weaker = (-22, -24, -26, -28, -28, -26, -24, -22) stonewall = [0, 0] # D4, E3, F4 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - # - # - - # - - - - # - - - # - - - - - - - - # - - - - - - - - stonewall[WHITE] = 0x81400000000 # D5, E6, F5 # - - - - - - - - # - - - - - - - - # - - - - # - - - # - - - # - # - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - stonewall[BLACK] = 0x81400000000 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - # - - - - # - # # # - - - - # # # - - - - - - - - qwingpawns1 = (bitPosArray[A2] | bitPosArray[B2], bitPosArray[A7] | bitPosArray[B7]) qwingpawns2 = (bitPosArray[A2] | bitPosArray[B3], bitPosArray[A7] | bitPosArray[B6]) kwingpawns1 = (bitPosArray[G2] | bitPosArray[H2], bitPosArray[G7] | bitPosArray[H7]) kwingpawns2 = (bitPosArray[G3] | bitPosArray[H2], bitPosArray[G6] | bitPosArray[H7]) ################################################################################ # Ranks and files # ################################################################################ rankBits = [255 << i * 8 for i in range(7, -1, -1)] fileBits = [0x0101010101010101 << i for i in range(7, -1, -1)] # Bit boards WHITE_SQUARES = 0x55AA55AA55AA55AA BLACK_SQUARES = 0xAA55AA55AA55AA55 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - # # - - - # - - - # # - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - CENTER_FOUR = 0x0000001818000000 # - - - - - - - - # - - - - - - - - # - - # # # # - - # - - # # # # - - # - - # # # # - - # - - # # # # - - # - - - - - - - - # - - - - - - - - sbox = 0x00003C3C3C3C0000 # - - - - - - - - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - - - - - - - - lbox = 0x007E7E7E7E7E7E00 # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # right = fileBits[5] | fileBits[6] | fileBits[7] # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - left = fileBits[0] | fileBits[1] | fileBits[2] # Generate the move bitboards. For e.g. the bitboard for all # # the moves of a knight on f3 is given by MoveArray[knight][21]. # dir = [ None, [9, 11], # Only capture moves are included [-21, -19, -12, -8, 8, 12, 19, 21], [-11, -9, 9, 11], [-10, -1, 1, 10], [-11, -10, -9, -1, 1, 9, 10, 11], [-11, -10, -9, -1, 1, 9, 10, 11], [-11, -9, 9, 11], [-10, -1, 1, 10], [-9, -11], [-11, -9, 9, 10, 11], [-11, -10, -9, 9, 11], [-11, -9, 9, 11], # Following are for front and back walls. Will be removed from list after # the loop [9, 10, 11], [-9, -10, -11], ] sliders += [False, False] map = [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, 8, 9, 10, 11, 12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 40, 41, 42, 43, 44, 45, 46, 47, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ] moveArray = [[0] * 64 for i in range(len(dir))] # moveArray[len(dir)][64] for piece in range(1, len(dir)): for fcord in range(120): f = map[fcord] if f == -1: # We only generate moves for squares inside the board continue # Create a new bitboard b = 0 for d in dir[piece]: tcord = fcord while True: tcord += d t = map[tcord] if t == -1: # If we landed outside of board, there is no more to look # for break b = setBit(b, t) if not sliders[piece]: # If we are a slider, we should not break, but add the dir # value once again break moveArray[piece][f] = b frontWall = (moveArray[-2], moveArray[-1]) del moveArray[-1] del moveArray[-1] del dir[-1] del dir[-1] del sliders[-1] del sliders[-1] # For each square, there are 8 rays. The first 4 rays are diagonals # for the bishops and the next 4 are file/rank for the rooks. # The queen uses all 8 rays. # These rays are used for move generation rather than MoveArray[]. # Also initialize the directions[][] array. directions[f][t] returns # the index into rays[f] array allow us to find the ray in that direction. directions = [[-1] * 64 for i in range(64)] # directions[64][64] rays = [[0] * 8 for i in range(64)] # rays[64][8] for fcord in range(120): f = map[fcord] if f == -1: continue ray = -1 for piece in BISHOP, ROOK: for d in dir[piece]: ray += 1 b = 0 tcord = fcord while True: tcord += d t = map[tcord] if t == -1: break rays[f][ray] = setBit(rays[f][ray], t) directions[f][t] = ray # The FromToRay[b2][f6] gives the diagonal ray from c3 to f6; # It also produces horizontal/vertical rays as well. If no # ray is possible, then a 0 is returned. fromToRay = [[0] * 64 for i in range(64)] # fromToRay[64][64] for piece in BISHOP, ROOK: for fcord in range(120): f = map[fcord] if f == -1: continue for d in dir[piece]: tcord = fcord t = map[tcord] while True: b = fromToRay[f][t] tcord += d t = map[tcord] if t == -1: break fromToRay[f][t] = setBit(fromToRay[f][t], t) fromToRay[f][t] |= b # The PassedPawnMask variable is used to determine if a pawn is passed. # his mask is basically all 1's from the square in front of the pawn to # the promotion square, also duplicated on both files besides the pawn # file. Other bits will be set to zero. # E.g. PassedPawnMask[white][b3] = 1's in a4-c4-c8-a8 rect, 0 otherwise. passedPawnMask = [[0] * 64, [0] * 64] # Do for white pawns first for cord in range(64): passedPawnMask[WHITE][cord] = rays[cord][7] passedPawnMask[BLACK][cord] = rays[cord][4] if cord & 7 != 0: # If file is not left most passedPawnMask[WHITE][cord] |= rays[cord - 1][7] passedPawnMask[BLACK][cord] |= rays[cord - 1][4] if cord & 7 != 7: # If file is not right most passedPawnMask[WHITE][cord] |= rays[cord + 1][7] passedPawnMask[BLACK][cord] |= rays[cord + 1][4] # The IsolaniMask variable is used to determine if a pawn is an isolani. # This mask is basically all 1's on files beside the file the pawn is on. # Other bits will be set to zero. # E.g. isolaniMask[d-file] = 1's in c-file & e-file, 0 otherwise. isolaniMask = [0] * 8 isolaniMask[0] = fileBits[1] isolaniMask[7] = fileBits[6] for i in range(1, 7): isolaniMask[i] = fileBits[i - 1] | fileBits[i + 1] # The SquarePawnMask is used to determine if a king is in the square of # the passed pawn and is able to prevent it from queening. # Caveat: Pawns on 2nd rank have the same mask as pawns on the 3rd rank # as they can advance 2 squares. squarePawnMask = [[0] * 64, [0] * 64] for cord in range(64): # White mask rank = 7 - RANK(cord) i = max(cord & 56, cord - rank) j = min(cord | 7, cord + rank) for k in range(i, j + 1): squarePawnMask[WHITE][cord] |= bitPosArray[k] | fromToRay[k][k | 56] # Black mask rank = RANK(cord) i = max(cord & 56, cord - rank) j = min(cord | 7, cord + rank) for k in range(i, j + 1): squarePawnMask[BLACK][cord] |= bitPosArray[k] | fromToRay[k][k & 7] # For pawns on 2nd rank, they have same mask as pawns on 3rd rank for cord in range(A2, H2 + 1): squarePawnMask[WHITE][cord] = squarePawnMask[WHITE][cord + 8] for cord in range(A7, H7 + 1): squarePawnMask[BLACK][cord] = squarePawnMask[BLACK][cord - 8] # These tables are used to calculate rook, queen and bishop moves ray00 = [rays[cord][5] | rays[cord][6] | 1 << (63 - cord) for cord in range(64)] ray45 = [rays[cord][0] | rays[cord][3] | 1 << (63 - cord) for cord in range(64)] ray90 = [rays[cord][4] | rays[cord][7] | 1 << (63 - cord) for cord in range(64)] ray135 = [rays[cord][1] | rays[cord][2] | 1 << (63 - cord) for cord in range(64)] attack00 = [{} for a in range(64)] attack45 = [{} for a in range(64)] attack90 = [{} for a in range(64)] attack135 = [{} for a in range(64)] cmap = [128, 64, 32, 16, 8, 4, 2, 1] rot1 = [A1, A2, A3, A4, A5, A6, A7, A8] rot2 = [A1, B2, C3, D4, E5, F6, G7, H8] rot3 = [A8, B7, C6, D5, E4, F3, G2, H1] # To save time, we init a main line for each of the four directions, and next # we will translate it for each possible cord for cord in range(8): for map in range(1, 256): # Skip entries without cord set, as cord will always be set if not map & cmap[cord]: continue # Find limits inclusive cord1 = cord2 = cord while cord1 > 0: cord1 -= 1 if cmap[cord1] & map: break while cord2 < 7: cord2 += 1 if cmap[cord2] & map: break # Remember A1 is the left most bit map00 = map << 56 attack00[cord][map00] = fromToRay[cord][cord1] | fromToRay[cord][cord2] map90 = reduce(or_, (1 << 63 - rot1[c] for c in iterBits(map00))) attack90[rot1[cord]][map90] = ( fromToRay[rot1[cord]][rot1[cord1]] | fromToRay[rot1[cord]][rot1[cord2]] ) map45 = reduce(or_, (1 << 63 - rot2[c] for c in iterBits(map00))) attack45[rot2[cord]][map45] = ( fromToRay[rot2[cord]][rot2[cord1]] | fromToRay[rot2[cord]][rot2[cord2]] ) map135 = reduce(or_, (1 << 63 - rot3[c] for c in iterBits(map00))) attack135[rot3[cord]][map135] = ( fromToRay[rot3[cord]][rot3[cord1]] | fromToRay[rot3[cord]][rot3[cord2]] ) MAXBITBOARD = (1 << 64) - 1 for r in range(A2, A8 + 1, 8): for cord in iterBits(ray00[r]): attack00[cord] = {map >> 8: ray >> 8 for map, ray in attack00[cord - 8].items()} for r in range(B1, H1 + 1): for cord in iterBits(ray90[r]): attack90[cord] = {map >> 1: ray >> 1 for map, ray in attack90[cord - 1].items()} # Bottom right for r in range(B1, H1 + 1): for cord in iterBits(ray45[r]): attack45[cord] = { map << 8 & MAXBITBOARD: ray << 8 & MAXBITBOARD for map, ray in attack45[cord + 8].items() } # Top left for r in reversed(range(A8, H8)): for cord in iterBits(ray45[r]): attack45[cord] = {map >> 8: ray >> 8 for map, ray in attack45[cord - 8].items()} # Top right for r in range(B8, H8 + 1): for cord in iterBits(ray135[r]): attack135[cord] = { map >> 8: ray >> 8 for map, ray in attack135[cord - 8].items() } # Bottom left for r in reversed(range(A1, H1)): for cord in iterBits(ray135[r]): attack135[cord] = { map << 8 & MAXBITBOARD: ray << 8 & MAXBITBOARD for map, ray in attack135[cord + 8].items() } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/ldraw.py0000755000175100001770000000501114614030313021116 0ustar00runnerdockerfrom .ldata import BLACK_SQUARES from pychess.Utils.const import ( ASEAN_VARIANTS, WHITE, BLACK, KNIGHT, BISHOP, ROOK, QUEEN, PAWN, ) def testFifty(board): if board.fifty >= 100: return True return False drawSet = { (0, 0, 0, 0, 0, 0, 0, 0), # KK (0, 1, 0, 0, 0, 0, 0, 0), # KBK (1, 0, 0, 0, 0, 0, 0, 0), # KNK (0, 0, 0, 0, 0, 1, 0, 0), # KKB (0, 0, 0, 0, 1, 0, 0, 0), # KNK (1, 0, 0, 0, 0, 1, 0, 0), # KNKB (0, 1, 0, 0, 1, 0, 0, 0), # KBKN } # Contains not 100% sure ones drawSet2 = { (2, 0, 0, 0, 0, 0, 0, 0), # KNNK (0, 0, 0, 0, 2, 0, 0, 0), # KKNN (2, 0, 0, 0, 1, 0, 0, 0), # KNNKN (1, 0, 0, 0, 2, 0, 0, 0), # KNKNN (2, 0, 0, 0, 0, 1, 0, 0), # KNNKB (0, 1, 0, 0, 2, 0, 0, 0), # KBKNN (2, 0, 0, 0, 0, 0, 1, 0), # KNNKR (0, 0, 1, 0, 2, 0, 0, 0), # KRKNN } def testMaterial(board): """Tests if no players are able to win the game from the current position""" whitePieceCount = board.pieceCount[WHITE] blackPieceCount = board.pieceCount[BLACK] if whitePieceCount[PAWN] or blackPieceCount[PAWN]: return False if whitePieceCount[QUEEN] or blackPieceCount[QUEEN]: return False wn = whitePieceCount[KNIGHT] wb = whitePieceCount[BISHOP] wr = whitePieceCount[ROOK] bn = blackPieceCount[KNIGHT] bb = blackPieceCount[BISHOP] br = blackPieceCount[ROOK] if board.variant in ASEAN_VARIANTS and (wb or bb): return False if (wn, wb, wr, 0, bn, bb, br, 0) in drawSet: return True # Tests KBKB. Draw if bishops are of same color if not wn + wr + bn + br and wb == 1 and bb == 1: if ( board.boards[WHITE][BISHOP] & BLACK_SQUARES != board.boards[BLACK][BISHOP] & BLACK_SQUARES ): return True def testPlayerMatingMaterial(board, color): """Tests if given color has enough material to mate on board""" pieceCount = board.pieceCount[color] if ( pieceCount[PAWN] or pieceCount[QUEEN] or pieceCount[ROOK] or (pieceCount[KNIGHT] + pieceCount[BISHOP] > 1) ): return True return False # This could be expanded by the fruit kpk draw function, which can test if a # certain king verus king and pawn posistion is winable. def test(board): """Test if the position is drawn. Two-fold repetitions are counted.""" return ( board.repetitionCount(draw_threshold=2) > 1 or testFifty(board) or testMaterial(board) ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/leval.py0000755000175100001770000005401414614030313021117 0ustar00runnerdocker# The purpose of this module, is to give a certain position a score. # The greater the score, the better the position from pychess.Utils.const import ( WHITE, BLACK, LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, ASEAN_VARIANTS, ATOMICCHESS, CRAZYHOUSECHESS, RACINGKINGSCHESS, THREECHECKCHESS, BPAWN, BISHOP, KNIGHT, QUEEN, KING, PAWN, ROOK, CAS_FLAGS, H7, B6, A7, H2, G3, A2, B3, G6, D1, G8, B8, G1, B1, ) from .bitboard import iterBits, firstBit, lsb from .ldata import ( fileBits, bitPosArray, PIECE_VALUES, FILE, RANK, PAWN_VALUE, WHITE_SQUARES, BLACK_SQUARES, ASEAN_PIECE_VALUES, ATOMIC_PIECE_VALUES, CRAZY_PIECE_VALUES, kwingpawns1, kwingpawns2, qwingpawns1, qwingpawns2, frontWall, endingKing, brank7, brank8, distance, isolaniMask, d2e2, passedScores, squarePawnMask, moveArray, brank67, lbox, stonewall, isolani_normal, isolani_weaker, passedPawnMask, fromToRay, pawnScoreBoard, sdistance, taxicab, racingKing, ) from .lsort import staticExchangeEvaluate from .lmovegen import newMove from pychess.Variants.threecheck import checkCount from pychess.Variants.racingkings import testKingInEightRow from ctypes import create_string_buffer, memset from struct import Struct # from random import randint randomval = 0 # randint(8,12)/10. CHECK_BONUS = (0, 100, 500, 2000) def evaluateComplete(board, color): """A detailed evaluation function, taking into account several positional factors""" s, phase = evalMaterial(board, color) if board.variant in (LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS): return s s += evalKing(board, color, phase) - evalKing(board, 1 - color, phase) if board.variant == RACINGKINGSCHESS or board.variant == THREECHECKCHESS: return s s += evalBishops(board, color, phase) - evalBishops(board, 1 - color, phase) s += evalRooks(board, color, phase) - evalRooks(board, 1 - color, phase) s += evalDoubleQR7(board, color, phase) - evalDoubleQR7(board, 1 - color, phase) s += evalKingTropism(board, color, phase) - evalKingTropism(board, 1 - color, phase) if board.variant in ASEAN_VARIANTS: return s s += evalDev(board, color, phase) - evalDev(board, 1 - color, phase) if board.variant == ATOMICCHESS: return s pawnScore, passed, weaked = cacheablePawnInfo(board, phase) s += pawnScore if color == WHITE else -pawnScore s += evalPawnStructure(board, color, phase, passed, weaked) - evalPawnStructure( board, 1 - color, phase, passed, weaked ) s += evalTrappedBishops(board, color) s += randomval return s ################################################################################ # evalMaterial # ################################################################################ def evalMaterial(board, color): # While opp reached rank 8 we can save the game if we also reach it # but for this we have to force the shortest (one king move) draw line! if board.variant == RACINGKINGSCHESS and testKingInEightRow(board): return [0, 0] pieceCount = board.pieceCount opcolor = 1 - color material = [0, 0] if board.variant == CRAZYHOUSECHESS: for piece in range(PAWN, KING): material[WHITE] += CRAZY_PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += CRAZY_PIECE_VALUES[piece] * pieceCount[BLACK][piece] material[WHITE] += CRAZY_PIECE_VALUES[piece] * board.holding[WHITE][piece] material[BLACK] += CRAZY_PIECE_VALUES[piece] * board.holding[BLACK][piece] elif board.variant == LOSERSCHESS: for piece in range(PAWN, KING): material[WHITE] += pieceCount[WHITE][piece] material[BLACK] += pieceCount[BLACK][piece] elif board.variant == SUICIDECHESS or board.variant == GIVEAWAYCHESS: for piece in range(PAWN, KING + 1): material[WHITE] += pieceCount[WHITE][piece] material[BLACK] += pieceCount[BLACK][piece] elif board.variant == ATOMICCHESS: for piece in range(PAWN, KING + 1): material[WHITE] += ATOMIC_PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += ATOMIC_PIECE_VALUES[piece] * pieceCount[BLACK][piece] elif board.variant in ASEAN_VARIANTS: for piece in range(PAWN, KING + 1): material[WHITE] += ASEAN_PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += ASEAN_PIECE_VALUES[piece] * pieceCount[BLACK][piece] else: for piece in range(PAWN, KING): material[WHITE] += PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += PIECE_VALUES[piece] * pieceCount[BLACK][piece] phase = max(1, 8 - (material[WHITE] + material[BLACK]) // 1150) # If both sides are equal, we don't need to compute anything! if material[BLACK] == material[WHITE]: return 0, phase matTotal = sum(material) # Who is leading the game, material-wise? if material[color] > material[opcolor]: leading = color else: leading = opcolor if board.variant in (LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS): val = material[leading] - material[1 - leading] val = int(100 * PAWN_VALUE * val / max(material[WHITE], material[BLACK])) if leading == 1 - color: return val, phase return -val, phase pawns = pieceCount[leading][PAWN] matDiff = material[leading] - material[1 - leading] val = min(2400, matDiff) + (matDiff * (12000 - matTotal) * pawns) // ( 6400 * (pawns + 1) ) if leading == color: return val, phase return -val, phase ################################################################################ # evalKingTropism # ################################################################################ pawnTropism = [[0] * 64 for i in range(64)] bishopTropism = [[0] * 64 for i in range(64)] knightTropism = [[0] * 64 for i in range(64)] rookTropism = [[0] * 64 for i in range(64)] queenTropism = [[0] * 64 for i in range(64)] for pcord in range(64): for kcord in range(pcord + 1, 64): pawnTropism[pcord][kcord] = pawnTropism[kcord][pcord] = ( (14 - taxicab[pcord][kcord]) ** 2 * 10 / 169 ) knightTropism[pcord][kcord] = knightTropism[kcord][pcord] = ( 6 - distance[KNIGHT][pcord][kcord] ) ** 2 * 2 bishopTropism[pcord][kcord] = bishopTropism[kcord][pcord] = ( (14 - distance[BISHOP][pcord][kcord] * sdistance[pcord][kcord]) ** 2 * 30 // 169 ) rookTropism[pcord][kcord] = rookTropism[kcord][pcord] = ( (14 - distance[ROOK][pcord][kcord] * sdistance[pcord][kcord]) ** 2 * 40 // 169 ) queenTropism[pcord][kcord] = queenTropism[kcord][pcord] = ( (14 - distance[QUEEN][pcord][kcord] * sdistance[pcord][kcord]) ** 2 * 50 // 169 ) tropisms = { PAWN: pawnTropism, KNIGHT: knightTropism, BISHOP: bishopTropism, ROOK: rookTropism, QUEEN: queenTropism, } def evalKingTropism(board, color, phase): """All other things being equal, having your Knights, Queens and Rooks close to the opponent's king is a good thing""" _tropisms = tropisms _lsb = lsb opcolor = 1 - color pieces = board.boards[color] opking = board.kings[opcolor] score = 0 for piece in range(KNIGHT, KING): # for piece in range(PAWN, KING): bitboard = pieces[piece] tropism = _tropisms[piece] # inlined iterBits() while bitboard: bit = bitboard & -bitboard score += tropism[_lsb[bit]][opking] bitboard -= bit return score ################################################################################ # evalPawnStructure # ################################################################################ # For pawn hash, don't use buckets. Store: # key high 16 bits of pawn hash key # score score from white's point of view # passed bitboard of passed pawns # weaked bitboard of weak pawns pawnEntryType = Struct("=H h Q Q") PAWN_HASH_SIZE = 16384 PAWN_PHASE_KEY = (0x343D, 0x055D, 0x3D3C, 0x1A1C, 0x28AA, 0x19EE, 0x1538, 0x2A99) pawntable = create_string_buffer(PAWN_HASH_SIZE * pawnEntryType.size) def clearPawnTable(): memset(pawntable, 0, PAWN_HASH_SIZE * pawnEntryType.size) def probePawns(board, phase): index = (board.pawnhash % PAWN_HASH_SIZE) ^ PAWN_PHASE_KEY[phase - 1] key, score, passed, weaked = pawnEntryType.unpack_from( pawntable, index * pawnEntryType.size ) if key == (board.pawnhash >> 14) & 0xFFFF: return score, passed, weaked return None def recordPawns(board, phase, score, passed, weaked): index = (board.pawnhash % PAWN_HASH_SIZE) ^ PAWN_PHASE_KEY[phase - 1] key = (board.pawnhash >> 14) & 0xFFFF pawnEntryType.pack_into( pawntable, index * pawnEntryType.size, key, score, passed, weaked ) def cacheablePawnInfo(board, phase): entry = probePawns(board, phase) if entry: return entry score = 0 passed = 0 weaked = 0 for color in WHITE, BLACK: opcolor = 1 - color pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] nfile = [0] * 8 pScoreBoard = pawnScoreBoard[color] for cord in iterBits(pawns): score += pScoreBoard[cord] * 2 # Passed pawns if not oppawns & passedPawnMask[color][cord]: if (color == WHITE and not fromToRay[cord][cord | 56] & pawns) or ( color == BLACK and not fromToRay[cord][cord & 7] & pawns ): passed |= bitPosArray[cord] score += (passedScores[color][cord >> 3] * phase) // 12 # Backward pawns backward = False if color == WHITE: i = cord + 8 else: i = cord - 8 ptype = color == WHITE and PAWN or BPAWN opptype = color == BLACK and PAWN or BPAWN if ( not (passedPawnMask[opcolor][i] & ~fileBits[cord & 7] & pawns) and board.arBoard[i] != PAWN ): n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if not backward and bitPosArray[cord] & brank7[opcolor]: i = i + (color == WHITE and 8 or -8) if not (passedPawnMask[opcolor][i] & ~fileBits[1] & pawns): n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if not backward and bitPosArray[cord] & brank7[opcolor]: i = i + (color == WHITE and 8 or -8) if not (passedPawnMask[opcolor][i] & ~fileBits[1] & pawns): n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if backward: weaked |= bitPosArray[cord] score += -(8 + phase) # Backward pawn penalty # Pawn base under attack if moveArray[ptype][cord] & oppawns and moveArray[ptype][cord] & pawns: score += -18 # Increment file count for isolani & doubled pawn evaluation nfile[cord & 7] += 1 for i in range(8): # Doubled pawns if nfile[i] > 1: score += -(8 + phase) # Isolated pawns if nfile[i] and not pawns & isolaniMask[i]: if not fileBits[i] & oppawns: # Isolated on a half-open file score += isolani_weaker[i] * nfile[i] else: # Normal isolated pawn score += isolani_normal[i] * nfile[i] weaked |= pawns & fileBits[i] # Penalize having eight pawns if board.pieceCount[color][PAWN] == 8: score -= 10 # Detect stonewall formation in our pawns if stonewall[color] & pawns == stonewall[color]: score += 10 # Penalize Locked pawns n = bin((pawns >> 8) & oppawns & lbox).count("1") score -= n * 10 # Switch point of view when switching colors score = -score recordPawns(board, phase, score, passed, weaked) return score, passed, weaked def evalPawnStructure(board, color, phase, passed, weaked): """ Pawn evaluation is based on the following factors: 1. Pawn square tables. 2. Passed pawns. 3. Backward pawns. 4. Pawn base under attack. 5. Doubled pawns 6. Isolated pawns 7. Connected passed pawns on 6/7th rank. 8. Unmoved & blocked d, e pawn 9. Passed pawn which cannot be caught. 10. Pawn storms. Notice: The function has better precicion for current player """ boards = board.boards[color] if not boards[PAWN]: return 0 king = board.kings[color] pawns = boards[PAWN] opcolor = 1 - color opking = board.kings[opcolor] opboards = board.boards[opcolor] score = 0 passed &= pawns weaked &= pawns # This section of the pawn code cannot be saved into the pawn hash as # they depend on the position of other pieces. So they have to be # calculated again. if passed: # Connected passed pawns on 6th or 7th rank t = passed & brank67[color] opMajorCount = 0 for p in range(KNIGHT, KING): opMajorCount += board.pieceCount[opcolor][p] if t and opMajorCount == 1: n1 = FILE(opking) n2 = RANK(opking) for f in range(7): if ( t & fileBits[f] and t & fileBits[f + 1] and ( n1 < f - 1 or n1 > f + 1 or (color == WHITE and n2 < 4) or (color == BLACK and n2 > 3) ) ): score += 50 # Enemy has no pieces & King is outcolor of passed pawn square if not opMajorCount: for cord in iterBits(passed): if board.color == color: if not squarePawnMask[color][cord] & opboards[KING]: score += passedScores[color][RANK(cord)] else: if not moveArray[KING][opking] & squarePawnMask[color][cord]: score += passedScores[color][RANK(cord)] # Estimate if any majors are able to hunt us down for pawn in iterBits(passed): found_hunter = False if color == WHITE: prom_cord = 7 << 3 | FILE(pawn) else: prom_cord = FILE(pawn) distance_to_promotion = distance[PAWN][pawn][prom_cord] for piece in range(KNIGHT, KING + 1): for cord in iterBits(opboards[piece]): hunter_distance = distance[piece][cord][prom_cord] if hunter_distance <= distance_to_promotion: found_hunter = True break if found_hunter: break if not found_hunter: score += passedScores[color][RANK(pawn)] // 5 # Penalize Pawn on d2,e2/d7,e7 is blocked blocker = board.blocker if color == WHITE and ((pawns & d2e2[WHITE]) >> 8) & blocker: score -= 48 elif color == BLACK and ((pawns & d2e2[BLACK]) << 8) & blocker: score -= 48 # If both colors are castled on different colors, bonus for pawn storms if abs(FILE(king) - FILE(opking)) >= 4 and phase < 6: n1 = FILE(opking) p = (isolaniMask[n1] | fileBits[n1]) & pawns score += sum(10 * (5 - distance[KING][c][opking]) for c in iterBits(p)) return score # evalBateries def evalDoubleQR7(board, color, phase): """Tests for QR, RR, QB and BB combos on the 7th rank. These are dangerous to kings, and good at killing pawns""" opcolor = 1 - board.color boards = board.boards[color] opboards = board.boards[opcolor] if bin((boards[QUEEN] | boards[ROOK]) & brank7[color]).count("1") >= 2 and ( opboards[KING] & brank8[color] or opboards[PAWN] & brank7[color] ): return 30 return 0 def evalKing(board, color, phase): # Should avoid situations like those: # r - - - n K - - # which makes forks more easy # and # R - - - K - - - # and # - - - - - - - - # - - - K - - - - # - - - - - - - - # - - - - - - - - # - - - - - - B - # which might turn bad # Also being check should be avoided, like # - q - - - K - r # and # - - - - - n - - # - - - K - - - R king = board.kings[color] if board.variant == RACINGKINGSCHESS: return racingKing[king] if board.variant == THREECHECKCHESS: return CHECK_BONUS[min(3, checkCount(board, 1 - color))] # If we are in endgame, we want our king in the center, and theirs far away if phase >= 6: return endingKing[king] # else if castled, prefer having some pawns in front elif FILE(king) not in (3, 4) and RANK(king) in (0, 8): if color == WHITE: if FILE(king) < 3: wall1 = frontWall[color][B1] else: wall1 = frontWall[color][G1] wall2 = wall1 >> 8 else: if FILE(king) < 3: wall1 = frontWall[color][B8] else: wall1 = frontWall[color][G8] wall2 = wall1 << 8 pawns = board.boards[color][PAWN] total_in_front = bin(wall1 | wall2 & pawns).count("1") numbermod = (0, 3, 6, 9, 7, 5, 3)[total_in_front] s = bin(wall1 & pawns).count("1") * 2 + bin(wall2 & pawns).count("1") return (s * numbermod * 5) // 6 return 0 def evalDev(board, color, phase): """ Calculate the development score for side (for opening only). Penalize the following. . Uncastled and cannot castled . Early queen move. - bad wing pawns """ # If we are castled or beyond the 20th move, no more evalDev if board.plyCount >= 38: return 0 score = 0 if not board.hasCastled[color]: boards = board.boards[color] pawns = boards[PAWN] # We don't encourage castling, but it should always be possible if not board.castling & CAS_FLAGS[color][0]: score -= 40 if not board.castling & CAS_FLAGS[color][1]: score -= 50 # Should keep queen home cord = firstBit(boards[QUEEN]) if cord != D1 + 56 * color: score -= 30 qpawns = max(qwingpawns1[color] & pawns, qwingpawns2[color] & pawns) kpawns = max(kwingpawns1[color] & pawns, kwingpawns2[color] & pawns) if qpawns != 2 and kpawns != 2: # Structure destroyed in both sides score -= 35 else: # Discourage any wing pawn moves score += (qpawns + kpawns) * 6 return score def evalBishops(board, color, phase): opcolor = 1 - color bishops = board.boards[color][BISHOP] if not bishops: return 0 pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] score = 0 # Avoid having too many pawns on you bishop's color. # In late game phase, add a bonus for enemy pieces on your bishop's color. if board.pieceCount[color][BISHOP] == 1: squareMask = WHITE_SQUARES if (bishops & WHITE_SQUARES) else BLACK_SQUARES score = ( -bin(pawns & squareMask).count("1") - bin(oppawns & squareMask).count("1") // 2 ) if phase > 6: score += bin(board.friends[1 - color] & squareMask).count("1") return score def evalTrappedBishops(board, color): """Check for bishops trapped at A2/H2/A7/H7""" _bitPosArray = bitPosArray wbishops = board.boards[WHITE][BISHOP] bbishops = board.boards[BLACK][BISHOP] wpawns = board.boards[WHITE][PAWN] bpawns = board.boards[BLACK][PAWN] score = 0 if bbishops: if bbishops & _bitPosArray[A2] and wpawns & _bitPosArray[B3]: see = staticExchangeEvaluate(board, newMove(A2, B3)) if see < 0: score -= see if bbishops & _bitPosArray[H2] and wpawns & _bitPosArray[G3]: see = staticExchangeEvaluate(board, newMove(H2, G3)) if see < 0: score -= see if wbishops: if wbishops & _bitPosArray[A7] and bpawns & _bitPosArray[B6]: see = staticExchangeEvaluate(board, newMove(A7, B6)) if see < 0: score += see if wbishops & _bitPosArray[H7] and bpawns & _bitPosArray[G6]: see = staticExchangeEvaluate(board, newMove(H7, G6)) if see < 0: score += see return score if color == WHITE else -score def evalRooks(board, color, phase): """rooks on open/half-open files""" opcolor = 1 - color boards = board.boards[color] rooks = boards[ROOK] if not rooks: return 0 opking = board.kings[opcolor] score = 0 if phase < 7: for cord in iterBits(rooks): file = cord & 7 if not boards[PAWN] & fileBits[file]: if file == 5 and opking & 7 >= 4: score += 40 score += 5 if not boards[PAWN] & fileBits[file]: score += 6 return score ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/lmove.py0000755000175100001770000007430214614030313021140 0ustar00runnerdockerfrom .ldata import bitPosArray, fileBits, rankBits, moveArray from .bitboard import firstBit, iterBits from .validator import validateMove from pychess.Utils.const import ( SAN, AN, LAN, ENPASSANT, EMPTY, PAWN, KING_CASTLE, QUEEN_CASTLE, reprFile, reprRank, chr2Sign, cordDic, reprSign, reprCord, reprSignSittuyin, reprSignMakruk, QUEEN, KNIGHT, BISHOP, ROOK, KING, NORMALCHESS, NORMAL_MOVE, PROMOTIONS, WHITE, BLACK, DROP, FAN_PIECES, SITTUYINCHESS, FISCHERRANDOMCHESS, SUICIDECHESS, MAKRUKCHESS, CAMBODIANCHESS, GIVEAWAYCHESS, ATOMICCHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, HORDECHESS, SCHESS, LIGHTBRIGADECHESS, chrU2Sign, CASTLE_KR, CASTLE_SAN, QUEEN_PROMOTION, KNIGHT_PROMOTION, FAN, ASEAN_QUEEN, HAWK_PROMOTION, HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, GATINGS, ) from pychess.Utils.repr import reprPiece, localReprSign from pychess.Utils.lutils.lmovegen import ( genAllMoves, genPieceMoves, newMove, gen_sittuyin_promotions, ) def RANK(cord): return cord >> 3 def FILE(cord): return cord & 7 def TCORD(move): return move & 63 def FCORD(move): return move >> 6 & 63 def FLAG(move): return move >> 12 def PROMOTE_PIECE(flag): return flag - 2 def GATE_PIECE(flag): return flag - 6 if flag >= HAWK_GATE_AT_ROOK else flag - 4 def FLAG_PIECE(piece): return piece + 2 class ParsingError(Exception): """Please raise this with a 3-tupple: (move, reason, board.asFen()) The reason should be usable in the context: 'Move was not parseable because %s' % reason""" pass def sittuyin_promotion_fcord(board, tcord): valid_promotions = list(gen_sittuyin_promotions(board)) queenMoves = moveArray[ASEAN_QUEEN] for fcord in iterBits(queenMoves[tcord]): if board.arBoard[fcord] and board.arBoard[fcord] == PAWN: if newMove(fcord, tcord, QUEEN_PROMOTION) in valid_promotions: return fcord ################################################################################ # parseAny # ################################################################################ def parseAny(board, algnot): type = determineAlgebraicNotation(algnot) if type == SAN: return parseSAN(board, algnot) if type == AN: return parseAN(board, algnot) if type == LAN: return parseLAN(board, algnot) return parseFAN(board, algnot) def determineAlgebraicNotation(algnot): upnot = algnot.upper() if upnot in ("O-O", "O-O-O", "0-0", "0-0-0", "OO", "OOO", "00", "000"): return SAN # Test for e2-e4 if "-" in algnot: return LAN # Test for b4xc5 if "x" in algnot and algnot.split("x")[0] in cordDic: return LAN # Test for e2e4 or a7a8q or a7a8=q if algnot[:2] in cordDic and algnot[2:4] in cordDic: return AN if algnot[0] in FAN_PIECES[WHITE] or algnot[0] in FAN_PIECES[BLACK]: return FAN return SAN ################################################################################ # listToSan # ################################################################################ def listToSan(board, moves): # Work on a copy to ensure we don't break things board = board.clone() sanmoves = [] for move in moves: san = toSAN(board, move) sanmoves.append(san) board.applyMove(move) return sanmoves ################################################################################ # listToMoves # ################################################################################ def listToMoves(board, movstrs, type=None, testvalidate=False, ignoreErrors=False): # Work on a copy to ensure we don't break things board = board.clone() moves = [] for mstr in movstrs: try: if type is None: move = parseAny(board, mstr) elif type == SAN: move = parseSAN(board, mstr) elif type == AN: move = parseAN(board, mstr) elif type == LAN: move = parseLAN(board, mstr) except ParsingError: if ignoreErrors: break raise if testvalidate and mstr != "--": if not validateMove(board, move): if not ignoreErrors: raise ParsingError(mstr, "Validation", board.asFen()) break moves.append(move) board.applyMove(move) return moves ################################################################################ # toSan # ################################################################################ def toSAN(board, move, localRepr=False): """Returns a Short/Abbreviated Algebraic Notation string of a move The board should be prior to the move""" def check_or_mate(): board_clone = board.clone() board_clone.applyMove(move) sign = "" if board_clone.isChecked(): for altmove in genAllMoves(board_clone): if board.variant == ATOMICCHESS: from pychess.Variants.atomic import kingExplode if kingExplode( board_clone, altmove, 1 - board_clone.color ) and not kingExplode(board_clone, altmove, board_clone.color): sign = "+" break elif kingExplode(board_clone, altmove, board_clone.color): continue board_clone.applyMove(altmove) if board_clone.opIsChecked(): board_clone.popMove() continue sign = "+" break else: sign = "#" return sign flag = move >> 12 fcord = (move >> 6) & 63 if flag == KING_CASTLE: return "O-O%s" % check_or_mate() elif flag == QUEEN_CASTLE: return "O-O-O%s" % check_or_mate() tcord = move & 63 # Sittuyin in place promotion is NOT null move if fcord == tcord and flag != DROP and flag != QUEEN_PROMOTION: return "--" fpiece = fcord if flag == DROP else board.arBoard[fcord] tpiece = board.arBoard[tcord] if flag in GATINGS: gate_piece = reprSign[GATE_PIECE(flag)] kcastle = (fpiece == KING and fcord - tcord == -2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord > 0 ) qcastle = (fpiece == KING and fcord - tcord == 2) or ( flag in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK) and fcord - tcord < 0 ) if kcastle: return f"O-O/{gate_piece}{reprCord[fcord]}{check_or_mate()}" elif qcastle: return f"O-O-O/{gate_piece}{reprCord[fcord]}{check_or_mate()}" part0 = "" part1 = "" if fpiece != PAWN or flag == DROP: if board.variant in (CAMBODIANCHESS, MAKRUKCHESS): part0 += reprSignMakruk[fpiece] elif board.variant == SITTUYINCHESS: part0 += reprSignSittuyin[fpiece] elif localRepr: part0 += localReprSign[fpiece] else: part0 += reprSign[fpiece] part1 = reprCord[tcord] if flag == DROP: return f"{part0}@{part1}{check_or_mate()}" if fpiece != PAWN or (board.variant == SITTUYINCHESS and flag in PROMOTIONS): xs = [] ys = [] board_clone = board.clone() for altmove in genAllMoves(board_clone, drops=False): mfcord = FCORD(altmove) if ( board_clone.arBoard[mfcord] == fpiece and mfcord != fcord and TCORD(altmove) == tcord ): board_clone.applyMove(altmove) if not board_clone.opIsChecked(): xs.append(FILE(mfcord)) ys.append(RANK(mfcord)) board_clone.popMove() x = FILE(fcord) y = RANK(fcord) if ys or xs: if y in ys and x not in xs: # If we share rank with another piece, but not file part0 += reprFile[x] elif x in xs and y not in ys: # If we share file with another piece, but not rank part0 += reprRank[y] elif x in xs and y in ys: # If we share both file and rank with other pieces part0 += reprFile[x] + reprRank[y] else: # If we doesn't share anything, it is standard to put file part0 += reprFile[x] if tpiece != EMPTY or flag == ENPASSANT: if not (board.variant == SITTUYINCHESS and fcord == tcord): part1 = "x" + part1 if fpiece == PAWN: part0 += reprFile[FILE(fcord)] notat = part0 + part1 if flag in PROMOTIONS: if board.variant in (CAMBODIANCHESS, MAKRUKCHESS): notat += "=" + reprSignMakruk[PROMOTE_PIECE(flag)] elif board.variant == SITTUYINCHESS: notat += "=" + reprSignSittuyin[PROMOTE_PIECE(flag)] elif localRepr: notat += "=" + localReprSign[PROMOTE_PIECE(flag)] else: notat += "=" + reprSign[PROMOTE_PIECE(flag)] if flag in GATINGS: notat += "/" + reprSign[GATE_PIECE(flag)] return f"{notat}{check_or_mate()}" ################################################################################ # parseSan # ################################################################################ def parseSAN(board, san): """Parse a Short/Abbreviated Algebraic Notation string""" notat = san color = board.color if notat == "--": return newMove(board.kings[color], board.kings[color]) if notat[-1] in "+#": notat = notat[:-1] # If '++' was used in place of # if notat[-1] == "+": notat = notat[:-1] flag = NORMAL_MOVE # If last char is a piece char, we assue it the promote char c = notat[-1] if c in "KQRBNSMFEHkqrbnsmfeh.": c = c.lower() if ( c == "k" and board.variant != SUICIDECHESS and board.variant != GIVEAWAYCHESS ): raise ParsingError(san, _("invalid promoted piece"), board.asFen()) elif c == ".": if board.variant in (CAMBODIANCHESS, MAKRUKCHESS, SITTUYINCHESS): # temporary hack for xboard bug flag = QUEEN_PROMOTION else: raise ParsingError(san, "invalid san", board.asFen()) else: flag = chr2Sign[c] + 2 if notat[-2] == "=": notat = notat[:-2] else: notat = notat[:-1] if notat[-1] == "/": gate_index = san.find("/") + 1 flag = HAWK_GATE if flag == HAWK_PROMOTION else ELEPHANT_GATE notat = notat[:-1] if len(notat) < 2: raise ParsingError(san, _("the move needs a piece and a cord"), board.asFen()) if notat[0] in "O0o": fcord = board.ini_kings[color] if board.variant == SCHESS: flag = QUEEN_CASTLE if notat[:5] == "O-O-O" else KING_CASTLE else: flag = ( KING_CASTLE if notat in ("O-O", "0-0", "o-o", "OO", "00", "oo") else QUEEN_CASTLE ) side = flag - QUEEN_CASTLE if FILE(fcord) == 3 and board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): side = 0 if side == 1 else 1 if board.variant == FISCHERRANDOMCHESS: tcord = board.ini_rooks[color][side] else: tcord = board.fin_kings[color][side] if board.variant == SCHESS and "/" in san: gate_index = san.find("/") + 1 if "e" == san[gate_index + 1]: flag = HAWK_GATE if san[gate_index] == "H" else ELEPHANT_GATE else: fcord = board.ini_rooks[color][side] tcord = board.ini_kings[color] flag = ( HAWK_GATE_AT_ROOK if san[gate_index] == "H" else ELEPHANT_GATE_AT_ROOK ) return newMove(fcord, tcord, flag) return newMove(fcord, tcord, flag) # LAN is not allowed in pgn spec, but sometimes it occures if "-" in notat: notat = notat.replace("-", "") if "@" in notat: tcord = cordDic[notat[-2:]] if notat[0].islower(): # Sjeng-ism piece = chr2Sign[notat[0]] else: piece = chrU2Sign[notat[0]] return newMove(piece, tcord, DROP) # standard piece letters if notat[0] in "QRBKNSMFEH": piece = chrU2Sign[notat[0]] notat = notat[1:] # unambigious lowercase piece letters elif notat[0] in "qrknsm": piece = chr2Sign[notat[0]] notat = notat[1:] # a lowercase bishop letter or a pawn capture elif notat[0] == "b" and len(notat) > 2 and board.variant == NORMALCHESS: tcord = cordDic[notat[-2:]] trank = int(notat[-1]) # if from and to lines are not neighbours -> Bishop if abs(ord(notat[0]) - ord(notat[-2])) > 1: piece = chr2Sign[notat[0]] notat = notat[1:] # if from and to lines are neighbours (or the same) but to is an empty square # which can't be en-passant square target -> Bishop elif board.arBoard[tcord] == EMPTY and ( (color == BLACK and trank != 3) or (color == WHITE and trank != 6) ): piece = chr2Sign[notat[0]] notat = notat[1:] # elif "ba3", "bc3" ,"ba6", "bc6" # these can be Bishop or Pawn moves, but we don't try to introspect them (sorry) else: piece = PAWN else: piece = PAWN if notat[-1] in "18" and flag == NORMAL_MOVE and board.variant != SITTUYINCHESS: flag = QUEEN_PROMOTION if "x" in notat: notat, tcord = notat.split("x") if tcord not in cordDic: raise ParsingError( san, _("the captured cord (%s) is incorrect") % tcord, board.asFen() ) tcord = cordDic[tcord] if piece == PAWN: # If a pawn is attacking an empty cord, we assue it an enpassant if board.arBoard[tcord] == EMPTY: if (color == BLACK and 2 * 8 <= tcord < 3 * 8) or ( color == WHITE and 5 * 8 <= tcord < 6 * 8 ): flag = ENPASSANT else: raise ParsingError( san, _("pawn capture without target piece is invalid"), board.asFen(), ) else: if not notat[-2:] in cordDic: raise ParsingError( san, _("the end cord (%s) is incorrect") % notat[-2:], board.asFen() ) tcord = cordDic[notat[-2:]] notat = notat[:-2] # In suicide promoting to king is valid, so # more than 1 king per side can exist ! if ( board.variant != SUICIDECHESS and board.variant != GIVEAWAYCHESS and piece == KING ): return newMove(board.kings[color], tcord, flag) # If there is any extra location info, like in the move Bexd1 or Nh3f4 we # want to know frank = None ffile = None if notat and notat[0] in reprRank: frank = int(notat[0]) - 1 notat = notat[1:] if notat and notat[0] in reprFile: ffile = ord(notat[0]) - ord("a") notat = notat[1:] if notat and notat[0] in reprRank: frank = int(notat[0]) - 1 notat = notat[1:] # we know all we want return newMove(frank * 8 + ffile, tcord, flag) if piece == PAWN: if (ffile is not None) and ffile != FILE(tcord): # capture if color == WHITE: fcord = tcord - 7 if ffile > FILE(tcord) else tcord - 9 else: fcord = tcord + 7 if ffile < FILE(tcord) else tcord + 9 else: if color == WHITE: pawns = board.boards[WHITE][PAWN] # In horde white pawns on first rank may move two squares also if ( board.variant == HORDECHESS and RANK(tcord) == 2 and not (pawns & fileBits[FILE(tcord)] & rankBits[1]) ): fcord = tcord - 16 else: fcord = ( tcord - 16 if RANK(tcord) == 3 and not (pawns & fileBits[FILE(tcord)] & rankBits[2]) else tcord - 8 ) else: pawns = board.boards[BLACK][PAWN] fcord = ( tcord + 16 if RANK(tcord) == 4 and not (pawns & fileBits[FILE(tcord)] & rankBits[5]) else tcord + 8 ) if board.variant == SITTUYINCHESS and flag == QUEEN_PROMOTION: if pawns & fileBits[FILE(tcord)] & rankBits[RANK(tcord)]: # in place promotion return newMove(tcord, tcord, flag) else: # queen move promotion (fcord have to be the closest cord of promotion zone) fcord = sittuyin_promotion_fcord(board, tcord) return newMove(fcord, tcord, flag) return newMove(fcord, tcord, flag) else: if board.pieceCount[color][piece] == 1: # we have only one from this kind if piece, so: fcord = firstBit(board.boards[color][piece]) return newMove(fcord, tcord, flag) else: # We find all pieces who could have done it. (If san was legal, there should # never be more than one) moves = genPieceMoves(board, piece, tcord) if len(moves) == 1: if flag in GATINGS: move = moves.pop() return newMove(FCORD(move), TCORD(move), flag) else: return moves.pop() else: for move in moves: f = FCORD(move) if frank is not None and frank != RANK(f): continue if ffile is not None and ffile != FILE(f): continue board_clone = board.clone() board_clone.applyMove(move) if board_clone.opIsChecked(): continue if flag in GATINGS: back_rank = 0 if color == WHITE else 7 if RANK(f) == back_rank: return newMove(FCORD(move), TCORD(move), flag) else: continue else: return move errstring = _("no %(piece)s is able to move to %(cord)s") % { "piece": reprPiece[piece], "cord": reprCord[tcord], } raise ParsingError(san, errstring, board.asFen()) ################################################################################ # toLan # ################################################################################ def toLAN(board, move, localRepr=False): """Returns a Long/Expanded Algebraic Notation string of a move board should be prior to the move""" fcord = FCORD(move) tcord = TCORD(move) flag = FLAG(move) fpiece = fcord if flag == DROP else board.arBoard[fcord] s = "" if fpiece != PAWN or flag == DROP: if board.variant in (CAMBODIANCHESS, MAKRUKCHESS): s = reprSignMakruk[fpiece] elif board.variant == SITTUYINCHESS: s = reprSignSittuyin[fpiece] elif localRepr: s = localReprSign[fpiece] else: s = reprSign[fpiece] if flag == DROP: s += "@" else: s += reprCord[FCORD(move)] if board.arBoard[tcord] == EMPTY: s += "-" else: s += "x" s += reprCord[tcord] if flag in PROMOTIONS: s += "=" + reprSign[PROMOTE_PIECE(flag)] return s ################################################################################ # parseLan # ################################################################################ def parseLAN(board, lan): """Parse a Long/Expanded Algebraic Notation string""" # To parse LAN pawn moves like "e2-e4" as SAN moves, we have to remove a few # fields if len(lan) == 5: if "x" in lan: # e4xd5 -> exd5 return parseSAN(board, lan[0] + lan[3:]) else: # e2-e4 -> e4 return parseSAN(board, lan[3:]) # We want to use the SAN parser for LAN moves like "Nb1-c3" or "Rd3xd7" # The san parser should be able to handle most stuff, as long as we remove # the slash if not lan.upper().startswith("O-O") and not lan.startswith("--"): lan = lan.replace("-", "") return parseSAN(board, lan) ################################################################################ # toAN # ################################################################################ def toAN(board, move, short=False, castleNotation=CASTLE_SAN): """Returns a Algebraic Notation string of a move board should be prior to the move short -- returns the short variant, e.g. f7f8q rather than f7f8=Q """ fcord = (move >> 6) & 63 tcord = move & 63 flag = move >> 12 if flag in (KING_CASTLE, QUEEN_CASTLE): if castleNotation == CASTLE_SAN: return flag == KING_CASTLE and "O-O" or "O-O-O" elif castleNotation == CASTLE_KR: rooks = board.ini_rooks[board.color] tcord = rooks[flag == KING_CASTLE and 1 or 0] # No treatment needed for CASTLE_KK if flag == DROP: if board.variant == SITTUYINCHESS: s = f"{reprSignSittuyin[fcord]}@{reprCord[tcord]}" else: s = f"{reprSign[fcord]}@{reprCord[tcord]}" else: s = reprCord[fcord] + reprCord[tcord] if flag in PROMOTIONS: if short: if board.variant in (CAMBODIANCHESS, MAKRUKCHESS): s += reprSignMakruk[PROMOTE_PIECE(flag)].lower() elif board.variant == SITTUYINCHESS: s += reprSignSittuyin[PROMOTE_PIECE(flag)].lower() else: s += reprSign[PROMOTE_PIECE(flag)].lower() else: if board.variant in (CAMBODIANCHESS, MAKRUKCHESS): s += "=" + reprSignMakruk[PROMOTE_PIECE(flag)] elif board.variant == SITTUYINCHESS: s += "=" + reprSignSittuyin[PROMOTE_PIECE(flag)] else: s += "=" + reprSign[PROMOTE_PIECE(flag)] if flag in GATINGS: s += reprSign[GATE_PIECE(flag)].lower() return s ################################################################################ # parseAN # ################################################################################ def parseAN(board, an): """Parse an Algebraic Notation string""" length = len(an) if not 4 <= length <= 6: raise ParsingError(an, "the move must be 4 or 6 chars long", board.asFen()) if "@" in an: tcord = cordDic[an[-2:]] if an[0].islower(): # Sjeng-ism piece = chr2Sign[an[0]] else: piece = chrU2Sign[an[0]] return newMove(piece, tcord, DROP) try: fcord = cordDic[an[:2]] tcord = cordDic[an[2:4]] except KeyError as e: raise ParsingError(an, "the cord (%s) is incorrect" % e.args[0], board.asFen()) flag = NORMAL_MOVE if length > 4 and not an[-1] in "QRBNMSFHEqrbnmsfhe": if ( (board.variant != SUICIDECHESS and board.variant != GIVEAWAYCHESS) or (board.variant == SUICIDECHESS or board.variant == GIVEAWAYCHESS) and not an[-1] in "Kk" ): raise ParsingError(an, "invalid promoted piece", board.asFen()) if length == 5: # The a7a8q variant if board.variant == SCHESS: if an[1] in "18": # gating move if board.arBoard[fcord] == ROOK and board.arBoard[tcord] == KING: flag = HAWK_GATE_AT_ROOK if an[-1] == "h" else ELEPHANT_GATE_AT_ROOK else: flag = HAWK_GATE if an[-1] == "h" else ELEPHANT_GATE else: # promotion move flag = chr2Sign[an[4].lower()] + 2 else: flag = chr2Sign[an[4].lower()] + 2 elif length == 6: # The a7a8=q variant flag = chr2Sign[an[5].lower()] + 2 elif board.arBoard[fcord] == KING: if fcord - tcord == 2: flag = QUEEN_CASTLE if board.variant == FISCHERRANDOMCHESS: tcord = board.ini_rooks[board.color][0] elif fcord - tcord == -2: flag = KING_CASTLE if board.variant == FISCHERRANDOMCHESS: tcord = board.ini_rooks[board.color][1] elif board.arBoard[tcord] == ROOK: color = board.color friends = board.friends[color] if bitPosArray[tcord] & friends: if board.ini_rooks[color][0] == tcord: flag = QUEEN_CASTLE else: flag = KING_CASTLE else: flag = NORMAL_MOVE elif ( board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY and FILE(fcord) != FILE(tcord) and RANK(fcord) != RANK(tcord) ): flag = ENPASSANT elif board.arBoard[fcord] == PAWN: # assume queen promotion if an[3] in "18": if board.variant == LIGHTBRIGADECHESS: flag = QUEEN_PROMOTION if board.color == WHITE else KNIGHT_PROMOTION elif board.variant != SITTUYINCHESS: flag = QUEEN_PROMOTION return newMove(fcord, tcord, flag) ################################################################################ # toFAN # ################################################################################ san2WhiteFanDic = { ord("K"): FAN_PIECES[WHITE][KING], ord("Q"): FAN_PIECES[WHITE][QUEEN], ord("M"): FAN_PIECES[WHITE][QUEEN], ord("F"): FAN_PIECES[WHITE][QUEEN], ord("R"): FAN_PIECES[WHITE][ROOK], ord("B"): FAN_PIECES[WHITE][BISHOP], ord("S"): FAN_PIECES[WHITE][BISHOP], ord("N"): FAN_PIECES[WHITE][KNIGHT], ord("P"): FAN_PIECES[WHITE][PAWN], ord("+"): "†", ord("#"): "‡", } san2BlackFanDic = { ord("K"): FAN_PIECES[BLACK][KING], ord("Q"): FAN_PIECES[BLACK][QUEEN], ord("M"): FAN_PIECES[BLACK][QUEEN], ord("F"): FAN_PIECES[BLACK][QUEEN], ord("R"): FAN_PIECES[BLACK][ROOK], ord("B"): FAN_PIECES[BLACK][BISHOP], ord("S"): FAN_PIECES[BLACK][BISHOP], ord("N"): FAN_PIECES[BLACK][KNIGHT], ord("P"): FAN_PIECES[BLACK][PAWN], ord("+"): "†", ord("#"): "‡", } def toFAN(board, move): """Returns a Figurine Algebraic Notation string of a move""" san = toSAN(board, move) return san.translate(san2WhiteFanDic) ################################################################################ # parseFAN # ################################################################################ fan2SanDic = {} for k, v in san2WhiteFanDic.items(): fan2SanDic[ord(v)] = chr(k) for k, v in san2BlackFanDic.items(): fan2SanDic[ord(v)] = chr(k) def parseFAN(board, fan): """Parse a Figurine Algebraic Notation string""" san = fan.translate(fan2SanDic) return parseSAN(board, san) ################################################################################ # toPolyglot # ################################################################################ def toPolyglot(board, move): """Returns a 16-bit Polyglot-format move board should be prior to the move """ pg = move & 4095 if FLAG(move) in PROMOTIONS: pg |= (PROMOTE_PIECE(FLAG(move)) - 1) << 12 elif FLAG(move) == QUEEN_CASTLE: pg = (pg & 4032) | board.ini_rooks[board.color][0] elif FLAG(move) == KING_CASTLE: pg = (pg & 4032) | board.ini_rooks[board.color][1] return pg ################################################################################ # parsePolyglot # ################################################################################ def parsePolyglot(board, pg): """Parse a 16-bit Polyglot-format move""" tcord = TCORD(pg) fcord = FCORD(pg) flag = NORMAL_MOVE if pg >> 12: flag = FLAG_PIECE((pg >> 12) + 1) elif board.arBoard[fcord] == KING: if board.arBoard[tcord] == ROOK: color = board.color friends = board.friends[color] if bitPosArray[tcord] & friends: if board.ini_rooks[color][0] == tcord: flag = QUEEN_CASTLE if board.variant == NORMALCHESS: # Want e1c1/e8c8 tcord += 2 else: flag = KING_CASTLE if board.variant == NORMALCHESS: # Want e1g1/e8g8 tcord -= 1 elif ( board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY and FILE(fcord) != FILE(tcord) and RANK(fcord) != RANK(tcord) ): flag = ENPASSANT return newMove(fcord, tcord, flag) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/lmovegen.py0000755000175100001770000010445214614030313021632 0ustar00runnerdockerfrom .bitboard import bitPosArray, iterBits, clearBit, firstBit from .attack import isAttacked, pinnedOnKing, getAttacks from .ldata import ( fromToRay, moveArray, directions, fileBits, rankBits, ray45, attack45, ray135, attack135, ray90, attack90, ray00, attack00, FILE, rays, ) from pychess.Utils.const import ( EMPTY, PAWN, QUEEN, KNIGHT, BISHOP, ROOK, KING, HAWK, ELEPHANT, WHITE, BLACK, SITTUYINCHESS, FISCHERRANDOMCHESS, SUICIDECHESS, GIVEAWAYCHESS, CAMBODIANCHESS, ATOMICCHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, CRAZYHOUSECHESS, ASEAN_VARIANTS, HORDECHESS, PLACEMENTCHESS, SCHESS, LIGHTBRIGADECHESS, BPAWN, sliders, A8, A6, G6, F6, H1, C3, B2, B3, A3, D6, D8, E3, E1, E8, C7, F2, D1, E6, H3, D3, H2, G7, H6, H7, ASEAN_QUEEN, ASEAN_BBISHOP, ASEAN_WBISHOP, NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, KING_PROMOTION, DROP_VARIANTS, DROP, B_OOO, B_OO, W_OOO, W_OO, HAWK_PROMOTION, ELEPHANT_PROMOTION, HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, ) # The format of a move is as follows - from left: # 4 bits: Descriping the type of the move # 6 bits: cord to move from # 6 bits: cord to move to shiftedFromCords = [] for i in range(64): shiftedFromCords.append(i << 6) shiftedFlags = [] for i in ( NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, KING_PROMOTION, HAWK_PROMOTION, ELEPHANT_PROMOTION, HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, DROP, ): shiftedFlags.append(i << 12) def newMove(fromcord, tocord, flag=NORMAL_MOVE): return shiftedFlags[flag] + shiftedFromCords[fromcord] + tocord # Generate all moves def genCastles(board): def generateOne(color, side, king_after, rook_after): if side == 0: castle = QUEEN_CASTLE else: castle = KING_CASTLE king = board.ini_kings[color] rook = board.ini_rooks[color][side] blocker = clearBit(clearBit(board.blocker, king), rook) stepover = fromToRay[king][king_after] | fromToRay[rook][rook_after] if not stepover & blocker: for cord in range(min(king, king_after), max(king, king_after) + 1): if isAttacked(board, cord, 1 - color): return if FILE(king) == 3 and board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ): castle = QUEEN_CASTLE if castle == KING_CASTLE else KING_CASTLE if board.variant == FISCHERRANDOMCHESS: yield newMove(king, rook, castle) else: yield newMove(king, king_after, castle) if board.variant == SCHESS: holding = board.holding[color] if holding[HAWK] == 0 and holding[ELEPHANT] == 0: return for king in iterBits( board.boards[board.color][KING] & board.virgin[board.color] ): if holding[HAWK] > 0: yield newMove(king, king_after, HAWK_GATE) yield newMove(rook, king, HAWK_GATE_AT_ROOK) if holding[ELEPHANT] > 0: yield newMove(king, king_after, ELEPHANT_GATE) yield newMove(rook, king, ELEPHANT_GATE_AT_ROOK) king = board.ini_kings[board.color] wildcastle = FILE(king) == 3 and board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ) if board.color == WHITE: if board.castling & W_OO: side = 0 if wildcastle else 1 yield from generateOne( WHITE, side, board.fin_kings[WHITE][side], board.fin_rooks[WHITE][side] ) if board.castling & W_OOO: side = 1 if wildcastle else 0 yield from generateOne( WHITE, side, board.fin_kings[WHITE][side], board.fin_rooks[WHITE][side] ) else: if board.castling & B_OO: side = 0 if wildcastle else 1 yield from generateOne( BLACK, side, board.fin_kings[BLACK][side], board.fin_rooks[BLACK][side] ) if board.castling & B_OOO: side = 1 if wildcastle else 0 yield from generateOne( BLACK, side, board.fin_kings[BLACK][side], board.fin_rooks[BLACK][side] ) def genPieceMoves(board, piece, tcord): """ " Used by parseSAN only to accelerate it a bit """ moves = set() friends = board.friends[board.color] notfriends = ~friends if piece == KNIGHT: knights = board.boards[board.color][KNIGHT] knightMoves = moveArray[KNIGHT] for fcord in iterBits(knights): if tcord in iterBits(knightMoves[fcord] & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == BISHOP: bishops = board.boards[board.color][BISHOP] if board.variant in ASEAN_VARIANTS: bishopMoves = moveArray[ ASEAN_WBISHOP if board.color == WHITE else ASEAN_BBISHOP ] for fcord in iterBits(bishops): if tcord in iterBits(bishopMoves[fcord] & notfriends): moves.add(newMove(fcord, tcord)) return moves else: blocker = board.blocker for fcord in iterBits(bishops): try: attackBoard = ( attack45[fcord][ray45[fcord] & blocker] | attack135[fcord][ray135[fcord] & blocker] ) except KeyError: attackBoard = 0 if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == ROOK: blocker = board.blocker rooks = board.boards[board.color][ROOK] for fcord in iterBits(rooks): try: attackBoard = ( attack00[fcord][ray00[fcord] & blocker] | attack90[fcord][ray90[fcord] & blocker] ) except KeyError: attackBoard = 0 if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == QUEEN: queens = board.boards[board.color][QUEEN] if board.variant in ASEAN_VARIANTS: queenMoves = moveArray[ASEAN_QUEEN] for fcord in iterBits(queens): if tcord in iterBits(queenMoves[fcord] & notfriends): moves.add(newMove(fcord, tcord)) # Cambodian extra first move if board.variant == CAMBODIANCHESS: if board.is_first_move[QUEEN][board.color]: if board.color == WHITE: if not board.arBoard[E3]: moves.add(newMove(E1, E3)) else: if not board.arBoard[D6]: moves.add(newMove(D8, D6)) return moves else: blocker = board.blocker for fcord in iterBits(queens): try: attackBoard = ( attack45[fcord][ray45[fcord] & blocker] | attack135[fcord][ray135[fcord] & blocker] ) except KeyError: attackBoard = 0 if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) try: attackBoard = ( attack00[fcord][ray00[fcord] & blocker] | attack90[fcord][ray90[fcord] & blocker] ) except KeyError: attackBoard = 0 if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves if ( board.variant == SUICIDECHESS or board.variant == GIVEAWAYCHESS ) and piece == KING: kings = board.boards[board.color][KING] if kings: kingMoves = moveArray[KING] for fcord in iterBits(kings): for tc in iterBits(kingMoves[fcord] & notfriends): if tc == tcord: moves.add(newMove(fcord, tcord)) return moves return moves def gen_sittuyin_promotions(board): from pychess.Variants import variants blocker = board.blocker notblocker = ~blocker pawns = board.boards[board.color][PAWN] queenMoves = moveArray[ASEAN_QUEEN] def willDirectAttack(board, move, cord): board_clone = board.clone() board_clone.applyMove(move) return board.friends[1 - board.color] & moveArray[ASEAN_QUEEN][cord] promotion_zone = variants[SITTUYINCHESS].PROMOTION_ZONE[board.color] for cord in iterBits(pawns): if board.pieceCount[board.color][PAWN] == 1 or cord in promotion_zone: # in place promotions move = newMove(cord, cord, QUEEN_PROMOTION) if not board.willGiveCheck(move) and not willDirectAttack( board, move, cord ): yield move # queen move promotion for c in iterBits(queenMoves[cord] & notblocker): move = newMove(cord, c, QUEEN_PROMOTION) if not board.willGiveCheck(move) and not willDirectAttack( board, move, c ): yield move def genAllMoves(board, drops=True): from pychess.Variants import variants if drops and board.variant in DROP_VARIANTS and board.variant != SCHESS: yield from genDrops(board) # In sittuyin you have to place your pieces before any real move if board.variant == SITTUYINCHESS or board.variant == PLACEMENTCHESS: if board.plyCount < 16: return blocker = board.blocker notblocker = ~blocker enpassant = board.enpassant friends = board.friends[board.color] notfriends = ~friends enemies = board.friends[1 - board.color] pawns = board.boards[board.color][PAWN] knights = board.boards[board.color][KNIGHT] bishops = board.boards[board.color][BISHOP] rooks = board.boards[board.color][ROOK] queens = board.boards[board.color][QUEEN] kings = board.boards[board.color][KING] hawks = board.boards[board.color][HAWK] elephants = board.boards[board.color][ELEPHANT] PROMOTIONS = variants[board.variant].PROMOTIONS # In sittuyin only one queen allowed to exist any time per side if board.variant == SITTUYINCHESS and queens: PROMOTIONS = (NORMAL_MOVE,) elif board.variant == LIGHTBRIGADECHESS: PROMOTIONS = (QUEEN_PROMOTION,) if board.color == WHITE else (KNIGHT_PROMOTION,) # Knights, Hawks, Elephants knightMoves = moveArray[KNIGHT] for cord in iterBits(knights | hawks | elephants): for c in iterBits(knightMoves[cord] & notfriends): yield newMove(cord, c) # knight moves with gating holding = board.holding[board.color] if board.variant == SCHESS and (holding[HAWK] > 0 or holding[ELEPHANT] > 0): for cord in iterBits(knights & board.virgin[board.color]): for c in iterBits(knightMoves[cord] & notfriends): if holding[HAWK] > 0: yield newMove(cord, c, HAWK_GATE) if holding[ELEPHANT] > 0: yield newMove(cord, c, ELEPHANT_GATE) # King if kings: kingMoves = moveArray[KING] # cord = firstBit(kings) for cord in iterBits(kings): for c in iterBits(kingMoves[cord] & notfriends): if board.variant == ATOMICCHESS: if not board.arBoard[c]: yield newMove(cord, c) else: yield newMove(cord, c) if board.variant == SCHESS and ( holding[HAWK] > 0 or holding[ELEPHANT] > 0 ): for cord in iterBits(kings & board.virgin[board.color]): if holding[HAWK] > 0: yield newMove(cord, c, HAWK_GATE) if holding[ELEPHANT] > 0: yield newMove(cord, c, ELEPHANT_GATE) if board.variant in ASEAN_VARIANTS: # Rooks for cord in iterBits(rooks): try: attackBoard = ( attack00[cord][ray00[cord] & blocker] | attack90[cord][ray90[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & notfriends): yield newMove(cord, c) # Queens queenMoves = moveArray[ASEAN_QUEEN] for cord in iterBits(queens): for c in iterBits(queenMoves[cord] & notfriends): yield newMove(cord, c) # Bishops bishopMoves = moveArray[ ASEAN_WBISHOP if board.color == WHITE else ASEAN_BBISHOP ] for cord in iterBits(bishops): for c in iterBits(bishopMoves[cord] & notfriends): yield newMove(cord, c) else: # Rooks and Queens and Elephants for cord in iterBits(rooks | queens | elephants): try: attackBoard = ( attack00[cord][ray00[cord] & blocker] | attack90[cord][ray90[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & notfriends): yield newMove(cord, c) if board.variant == SCHESS and (holding[HAWK] > 0 or holding[ELEPHANT] > 0): for cord in iterBits((rooks | queens) & board.virgin[board.color]): try: attackBoard = ( attack00[cord][ray00[cord] & blocker] | attack90[cord][ray90[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & notfriends): if holding[HAWK] > 0: yield newMove(cord, c, HAWK_GATE) if holding[ELEPHANT] > 0: yield newMove(cord, c, ELEPHANT_GATE) # Bishops and Queens, Hawks for cord in iterBits(bishops | queens | hawks): try: attackBoard = ( attack45[cord][ray45[cord] & blocker] | attack135[cord][ray135[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & notfriends): yield newMove(cord, c) if board.variant == SCHESS and (holding[HAWK] > 0 or holding[ELEPHANT] > 0): for cord in iterBits((bishops | queens) & board.virgin[board.color]): try: attackBoard = ( attack45[cord][ray45[cord] & blocker] | attack135[cord][ray135[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & notfriends): if holding[HAWK] > 0: yield newMove(cord, c, HAWK_GATE) if holding[ELEPHANT] > 0: yield newMove(cord, c, ELEPHANT_GATE) # White pawns pawnEnemies = enemies | (enpassant is not None and bitPosArray[enpassant] or 0) if board.color == WHITE: # One step if board.variant == SITTUYINCHESS: promotion_zone = [] else: promotion_zone = variants[board.variant].PROMOTION_ZONE[WHITE] movedpawns = (pawns >> 8) & notblocker # Move all pawns one step forward for cord in iterBits(movedpawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord - 8, cord, p) else: yield newMove(cord - 8, cord) # Two steps seccondrow = pawns & rankBits[1] # Get seccond row pawns movedpawns = (seccondrow >> 8) & notblocker # Move two steps forward, while movedpawns = (movedpawns >> 8) & notblocker # ensuring middle cord is clear for cord in iterBits(movedpawns): yield newMove(cord - 16, cord) # In horde white pawns on first rank may move two squares also if board.variant == HORDECHESS: firstrow = pawns & rankBits[0] # Get first row pawns movedpawns = (firstrow >> 8) & notblocker # Move two steps forward, while movedpawns = (movedpawns >> 8) & notblocker # ensuring middle cord is clear for cord in iterBits(movedpawns): yield newMove(cord - 16, cord) # Capture left capLeftPawns = pawns & ~fileBits[0] capLeftPawns = (capLeftPawns >> 7) & pawnEnemies for cord in iterBits(capLeftPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord - 7, cord, p) elif cord == enpassant: yield newMove(cord - 7, cord, ENPASSANT) else: yield newMove(cord - 7, cord) # Capture right capRightPawns = pawns & ~fileBits[7] capRightPawns = (capRightPawns >> 9) & pawnEnemies for cord in iterBits(capRightPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord - 9, cord, p) elif cord == enpassant: yield newMove(cord - 9, cord, ENPASSANT) else: yield newMove(cord - 9, cord) # Black pawns else: # One step if board.variant == SITTUYINCHESS: promotion_zone = [] else: promotion_zone = variants[board.variant].PROMOTION_ZONE[BLACK] movedpawns = (pawns << 8) & notblocker movedpawns &= 0xFFFFFFFFFFFFFFFF # contrain to 64 bits for cord in iterBits(movedpawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord + 8, cord, p) else: yield newMove(cord + 8, cord) # Two steps seccondrow = pawns & rankBits[6] # Get seventh row pawns # Move two steps forward, while ensuring middle cord is clear movedpawns = seccondrow << 8 & notblocker movedpawns = movedpawns << 8 & notblocker for cord in iterBits(movedpawns): yield newMove(cord + 16, cord) # Capture left capLeftPawns = pawns & ~fileBits[7] capLeftPawns = capLeftPawns << 7 & pawnEnemies for cord in iterBits(capLeftPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord + 7, cord, p) elif cord == enpassant: yield newMove(cord + 7, cord, ENPASSANT) else: yield newMove(cord + 7, cord) # Capture right capRightPawns = pawns & ~fileBits[0] capRightPawns = capRightPawns << 9 & pawnEnemies for cord in iterBits(capRightPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord + 9, cord, p) elif cord == enpassant: yield newMove(cord + 9, cord, ENPASSANT) else: yield newMove(cord + 9, cord) # Sittuyin promotions if board.variant == SITTUYINCHESS and pawns and not queens: yield from gen_sittuyin_promotions(board) # Cambodian extra first moves for king and queen if board.variant == CAMBODIANCHESS: if ( board.arBoard[board.ini_kings[board.color]] == KING and board.is_first_move[KING][board.color] ): if board.color == WHITE: if not board.arBoard[B2]: yield newMove(D1, B2) if not board.arBoard[F2]: yield newMove(D1, F2) else: if not board.arBoard[C7]: yield newMove(E8, C7) if not board.arBoard[G7]: yield newMove(E8, G7) if ( board.arBoard[board.ini_queens[board.color]] == QUEEN and board.is_first_move[QUEEN][board.color] ): if board.color == WHITE: if not board.arBoard[E3]: yield newMove(E1, E3) else: if not board.arBoard[D6]: yield newMove(D8, D6) # Castling if kings: yield from genCastles(board) ################################################################################ # Generate capturing moves # ################################################################################ def genCaptures(board): from pychess.Variants import variants blocker = board.blocker enpassant = board.enpassant enemies = board.friends[1 - board.color] pawns = board.boards[board.color][PAWN] knights = board.boards[board.color][KNIGHT] bishops = board.boards[board.color][BISHOP] rooks = board.boards[board.color][ROOK] queens = board.boards[board.color][QUEEN] kings = board.boards[board.color][KING] hawks = board.boards[board.color][HAWK] elephants = board.boards[board.color][ELEPHANT] PROMOTIONS = variants[board.variant].PROMOTIONS # In sittuyin promotion can't give capture if board.variant == SITTUYINCHESS: PROMOTIONS = (NORMAL_MOVE,) elif board.variant == LIGHTBRIGADECHESS: PROMOTIONS = (QUEEN_PROMOTION,) if board.color == WHITE else (KNIGHT_PROMOTION,) # Knights knightMoves = moveArray[KNIGHT] for cord in iterBits(knights | hawks | elephants): for c in iterBits(knightMoves[cord] & enemies): yield newMove(cord, c) # King if kings: kingMoves = moveArray[KING] # cord = firstBit(kings) for cord in iterBits(kings): for c in iterBits(kingMoves[cord] & enemies): if board.variant != ATOMICCHESS: yield newMove(cord, c) # Rooks and Queens if board.variant in ASEAN_VARIANTS: for cord in iterBits(rooks): try: attackBoard = ( attack00[cord][ray00[cord] & blocker] | attack90[cord][ray90[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & enemies): yield newMove(cord, c) else: for cord in iterBits(rooks | queens | elephants): try: attackBoard = ( attack00[cord][ray00[cord] & blocker] | attack90[cord][ray90[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & enemies): yield newMove(cord, c) # Bishops and Queens if board.variant in ASEAN_VARIANTS: bishopMoves = moveArray[ ASEAN_WBISHOP if board.color == WHITE else ASEAN_BBISHOP ] for cord in iterBits(bishops): for c in iterBits(bishopMoves[cord] & enemies): yield newMove(cord, c) queenMoves = moveArray[ASEAN_QUEEN] for cord in iterBits(queens): for c in iterBits(queenMoves[cord] & enemies): yield newMove(cord, c) else: for cord in iterBits(bishops | queens | hawks): try: attackBoard = ( attack45[cord][ray45[cord] & blocker] | attack135[cord][ray135[cord] & blocker] ) except KeyError: attackBoard = 0 for c in iterBits(attackBoard & enemies): yield newMove(cord, c) # White pawns pawnEnemies = enemies | (enpassant is not None and bitPosArray[enpassant] or 0) if board.color == WHITE: promotion_zone = variants[board.variant].PROMOTION_ZONE[WHITE] # Promotes # Capture left capLeftPawns = pawns & ~fileBits[0] capLeftPawns = (capLeftPawns >> 7) & pawnEnemies for cord in iterBits(capLeftPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord - 7, cord, p) elif cord == enpassant: yield newMove(cord - 7, cord, ENPASSANT) else: yield newMove(cord - 7, cord) # Capture right capRightPawns = pawns & ~fileBits[7] capRightPawns = (capRightPawns >> 9) & pawnEnemies for cord in iterBits(capRightPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord - 9, cord, p) elif cord == enpassant: yield newMove(cord - 9, cord, ENPASSANT) else: yield newMove(cord - 9, cord) # Black pawns else: promotion_zone = variants[board.variant].PROMOTION_ZONE[BLACK] # One step # Capture left capLeftPawns = pawns & ~fileBits[7] capLeftPawns = capLeftPawns << 7 & pawnEnemies for cord in iterBits(capLeftPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord + 7, cord, p) elif cord == enpassant: yield newMove(cord + 7, cord, ENPASSANT) else: yield newMove(cord + 7, cord) # Capture right capRightPawns = pawns & ~fileBits[0] capRightPawns = capRightPawns << 9 & pawnEnemies for cord in iterBits(capRightPawns): if cord in promotion_zone: for p in PROMOTIONS: yield newMove(cord + 9, cord, p) elif cord == enpassant: yield newMove(cord + 9, cord, ENPASSANT) else: yield newMove(cord + 9, cord) ################################################################################ # Generate escapes from check # ################################################################################ def genCheckEvasions(board): from pychess.Variants import variants color = board.color opcolor = 1 - color kcord = board.kings[color] kings = board.boards[color][KING] pawns = board.boards[color][PAWN] queens = board.boards[board.color][QUEEN] checkers = getAttacks(board, kcord, opcolor) arBoard = board.arBoard if bin(checkers).count("1") == 1: PROMOTIONS = variants[board.variant].PROMOTIONS # In sittuyin promotion move not allowed to capture opponent pieces if board.variant == SITTUYINCHESS and board.boards[board.color][QUEEN]: PROMOTIONS = (NORMAL_MOVE,) elif board.variant == LIGHTBRIGADECHESS: PROMOTIONS = ( (QUEEN_PROMOTION,) if board.color == WHITE else (KNIGHT_PROMOTION,) ) promotion_zone = variants[board.variant].PROMOTION_ZONE[color] # Captures of checking pieces (except by king, which we will test later) chkcord = firstBit(checkers) b = getAttacks(board, chkcord, color) & ~kings for cord in iterBits(b): if not pinnedOnKing(board, cord, color): if ( arBoard[cord] == PAWN and chkcord in promotion_zone and board.variant != SITTUYINCHESS ): for p in PROMOTIONS: yield newMove(cord, chkcord, p) else: yield newMove(cord, chkcord) # Maybe enpassant can help if board.enpassant: ep = board.enpassant if ep + (color == WHITE and -8 or 8) == chkcord: bits = moveArray[color == WHITE and BPAWN or PAWN][ep] & pawns for cord in iterBits(bits): if not pinnedOnKing(board, cord, color): yield newMove(cord, ep, ENPASSANT) # Lets block/capture the checking piece if sliders[arBoard[chkcord]]: bits = clearBit(fromToRay[kcord][chkcord], chkcord) for cord in iterBits(bits): b = getAttacks(board, cord, color) b &= ~(kings | pawns) # Add in pawn advances if color == WHITE and cord > H2: if bitPosArray[cord - 8] & pawns: b |= bitPosArray[cord - 8] if ( cord >> 3 == 3 and arBoard[cord - 8] == EMPTY and bitPosArray[cord - 16] & pawns ): b |= bitPosArray[cord - 16] elif color == BLACK and cord < H7: if bitPosArray[cord + 8] & pawns: b |= bitPosArray[cord + 8] if ( cord >> 3 == 4 and arBoard[cord + 8] == EMPTY and bitPosArray[cord + 16] & pawns ): b |= bitPosArray[cord + 16] for fcord in iterBits(b): # If the piece is blocking another attack, we cannot move it if pinnedOnKing(board, fcord, color): continue if arBoard[fcord] == PAWN and cord in promotion_zone: for p in PROMOTIONS: yield newMove(fcord, cord, p) else: yield newMove(fcord, cord) if board.variant == CRAZYHOUSECHESS: holding = board.holding[color] for piece in holding: if holding[piece] > 0: if piece == PAWN: if cord >= 56 or cord <= 7: continue yield newMove(piece, cord, DROP) if board.variant == SITTUYINCHESS and pawns and not queens: from .lmove import TCORD for move in gen_sittuyin_promotions(board): if TCORD(move) == cord: yield move # If more than one checkers, move king to get out of check if checkers: escapes = moveArray[KING][kcord] & ~board.friends[color] else: escapes = 0 for chkcord in iterBits(checkers): dir = directions[chkcord][kcord] if sliders[arBoard[chkcord]]: escapes &= ~rays[chkcord][dir] for cord in iterBits(escapes): if not isAttacked(board, cord, opcolor): yield newMove(kcord, cord) def genDrops(board): color = board.color arBoard = board.arBoard holding = board.holding[color] for piece in holding: if holding[piece] > 0: for cord, elem in enumerate(arBoard): if elem == EMPTY: # forbidden drop moves if board.variant == SITTUYINCHESS: if color == WHITE: if cord in (A3, B3, C3, D3) or cord > H3: continue if piece == ROOK and cord > H1: continue else: if cord in (E6, F6, G6, H6) or cord < A6: continue if piece == ROOK and cord < A8: continue elif board.variant == PLACEMENTCHESS: # drop pieces enabled on base line only if color == WHITE: if cord > H1: continue else: if cord < A8: continue # bishops must be on opposite colour squares base_line = arBoard[0:8] if color == WHITE else arBoard[56:64] occupied_colors = [0, 0] occupied_colors[cord % 2] += 1 for i, baseline_piece in enumerate(base_line): if baseline_piece != EMPTY: occupied_colors[i % 2] += 1 if holding[BISHOP] == 2 and piece != BISHOP: # occupying all same colored fields before any bishop dropped is no-no if ( occupied_colors[WHITE] == 4 or occupied_colors[BLACK] == 4 ): continue elif holding[BISHOP] == 1: for i, baseline_piece in enumerate(base_line): if baseline_piece == BISHOP: first_bishop_cord = i break # occupying all possible place of opp colored bishop is no-no if ( piece != BISHOP and occupied_colors[1 - first_bishop_cord % 2] == 4 ): continue # same colored bishop is no-no elif piece == BISHOP and first_bishop_cord % 2 == cord % 2: continue if piece == PAWN: if cord >= 56 or cord <= 7: continue yield newMove(piece, cord, DROP) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/lsearch.py0000755000175100001770000003257514614030313021445 0ustar00runnerdockerfrom time import time from random import random from heapq import heappush, heappop from .lmovegen import genAllMoves, genCheckEvasions, genCaptures from .egtb_gaviota import EgtbGaviota from pychess.Utils.const import ( ATOMICCHESS, KINGOFTHEHILLCHESS, THREECHECKCHESS, LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, EMPTY, PROMOTIONS, DROP, KING, RACINGKINGSCHESS, hashfALPHA, hashfBETA, hashfEXACT, hashfBAD, DRAW, WHITE, WHITEWON, ) from .leval import evaluateComplete from .lsort import getCaptureValue, getMoveValue from .ldata import MATE_VALUE, VALUE_AT_PLY from .TranspositionTable import TranspositionTable from pychess.Variants.atomic import kingExplode from pychess.Variants.kingofthehill import testKingInCenter from pychess.Variants.suicide import pieceCount from pychess.Variants.threecheck import checkCount from . import ldraw TIMECHECK_FREQ = 500 table = TranspositionTable(32 * 1024 * 1024) skipPruneChance = 0 searching = False nodes = 0 endtime = 0 timecheck_counter = TIMECHECK_FREQ egtb = None def alphaBeta(board, depth, alpha=-MATE_VALUE, beta=MATE_VALUE, ply=0): """This is a alphabeta/negamax/quiescent/iterativedeepend search algorithm Based on moves found by the validator.py findmoves2 function and evaluated by eval.py. The function recalls itself "depth" times. If the last move in range depth was a capture, it will continue calling itself, only searching for captures. It returns a tuple of * a list of the path it found through the search tree (last item being the deepest) * a score of your standing the the last possition.""" global searching, nodes, table, endtime, timecheck_counter foundPv = False hashf = hashfALPHA amove = [] ############################################################################ # Mate distance pruning ############################################################################ MATED = -MATE_VALUE + ply MATE_IN_1 = MATE_VALUE - ply - 1 if beta <= MATED: return [], MATED if beta >= MATE_IN_1: beta = MATE_IN_1 if alpha >= beta: return [], MATE_IN_1 if board.variant == ATOMICCHESS: if bin(board.boards[board.color][KING]).count("1") == 0: return [], MATED elif board.variant == LOSERSCHESS: if pieceCount(board, board.color) == 1: return [], -MATED elif board.variant == SUICIDECHESS or board.variant == GIVEAWAYCHESS: if pieceCount(board, board.color) == 0: return [], -MATED elif board.variant == KINGOFTHEHILLCHESS: if testKingInCenter(board): return [], MATED elif board.variant == THREECHECKCHESS: if checkCount(board, board.color) == 3: return [], MATED ############################################################################ # Look in the end game table ############################################################################ global egtb if egtb: tbhits = egtb.scoreAllMoves(board) if tbhits: move, state, steps = tbhits[0] if state == DRAW: score = 0 elif board.color == WHITE: if state == WHITEWON: score = MATE_VALUE - steps else: score = -MATE_VALUE + steps else: if state == WHITEWON: score = -MATE_VALUE + steps else: score = MATE_VALUE - steps return [move], score ########################################################################### # We don't save repetition in the table, so we need to test draw before # # table. # ########################################################################### # We don't adjudicate draws. Clients may have different rules for that. if ply > 0: if ldraw.test(board): return [], 0 ############################################################################ # Look up transposition table # ############################################################################ if ply == 0: table.newSearch() table.setHashMove(depth, -1) probe = table.probe(board, depth, alpha, beta) if probe: move, score, hashf = probe score = VALUE_AT_PLY(score, ply) table.setHashMove(depth, move) if hashf == hashfEXACT: return [move], score elif hashf == hashfBETA: beta = min(score, beta) elif hashf == hashfALPHA: alpha = score if hashf != hashfBAD and alpha >= beta: return [move], score ############################################################################ # Cheking the time # ############################################################################ timecheck_counter -= 1 if timecheck_counter == 0: if time() > endtime: searching = False timecheck_counter = TIMECHECK_FREQ ############################################################################ # Break itereation if interupted or if times up # ############################################################################ if not searching: return [], -evaluateComplete(board, 1 - board.color) ############################################################################ # Go for quiescent search # ############################################################################ isCheck = board.isChecked() if depth <= 0: if isCheck: # Being in check is that serious, that we want to take a deeper look depth += 1 elif board.variant in ( LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, ATOMICCHESS, RACINGKINGSCHESS, ): return [], evaluateComplete(board, board.color) else: mvs, val = quiescent(board, alpha, beta, ply) return mvs, val ############################################################################ # Find and sort moves # ############################################################################ if board.variant in (LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS): mlist = [m for m in genCaptures(board)] if board.variant == LOSERSCHESS: if isCheck: evasions = [m for m in genCheckEvasions(board)] eva_cap = [m for m in evasions if m in mlist] mlist = eva_cap if eva_cap else evasions else: valid_captures = [] for move in mlist: board.applyMove(move) if not board.opIsChecked(): valid_captures.append(move) board.popMove() mlist = valid_captures if not mlist and not isCheck: mlist = [m for m in genAllMoves(board)] moves = [(-getMoveValue(board, table, depth, m), m) for m in mlist] elif board.variant == ATOMICCHESS: if isCheck: mlist = [ m for m in genCheckEvasions(board) if not kingExplode(board, m, board.color) ] else: mlist = [ m for m in genAllMoves(board) if not kingExplode(board, m, board.color) ] moves = [(-getMoveValue(board, table, depth, m), m) for m in mlist] elif board.variant == RACINGKINGSCHESS: mlist = [m for m in genAllMoves(board) if not board.willGiveCheck(m)] moves = [(-getMoveValue(board, table, depth, m), m) for m in mlist] else: if isCheck: moves = [ (-getMoveValue(board, table, depth, m), m) for m in genCheckEvasions(board) ] else: moves = [ (-getMoveValue(board, table, depth, m), m) for m in genAllMoves(board) ] moves.sort() # This is needed on checkmate catchFailLow = None ############################################################################ # Loop moves # ############################################################################ for moveValue, move in moves: nodes += 1 board.applyMove(move) if not isCheck: if board.opIsChecked(): board.popMove() continue catchFailLow = move if foundPv: mvs, val = alphaBeta(board, depth - 1, -alpha - 1, -alpha, ply + 1) val = -val if val > alpha and val < beta: mvs, val = alphaBeta(board, depth - 1, -beta, -alpha, ply + 1) val = -val else: mvs, val = alphaBeta(board, depth - 1, -beta, -alpha, ply + 1) val = -val board.popMove() if val > alpha: if val >= beta: if searching and move >> 12 != DROP: table.record( board, move, VALUE_AT_PLY(beta, -ply), hashfBETA, depth ) # We don't want to use our valuable killer move spaces for # captures and promotions, as these are searched early anyways. if ( board.arBoard[move & 63] == EMPTY and not move >> 12 in PROMOTIONS ): table.addKiller(depth, move) table.addButterfly(move, depth) return [move] + mvs, beta alpha = val amove = [move] + mvs hashf = hashfEXACT foundPv = True ############################################################################ # Return # ############################################################################ if amove: if searching: table.record(board, amove[0], VALUE_AT_PLY(alpha, -ply), hashf, depth) if board.arBoard[amove[0] & 63] == EMPTY: table.addKiller(depth, amove[0]) return amove, alpha if catchFailLow: if searching: table.record(board, catchFailLow, VALUE_AT_PLY(alpha, -ply), hashf, depth) return [catchFailLow], alpha # If no moves were found, this must be a mate or stalemate if isCheck: return [], MATED return [], 0 def quiescent(board, alpha, beta, ply): if skipPruneChance and random() < skipPruneChance: return [], (alpha + beta) // 2 global searching, nodes, endtime, timecheck_counter if ldraw.test(board): return [], 0 timecheck_counter -= 1 if timecheck_counter == 0: if time() > endtime: searching = False timecheck_counter = TIMECHECK_FREQ ############################################################################ # Break itereation if interupted or if times up # ############################################################################ if not searching: return [], -evaluateComplete(board, 1 - board.color) isCheck = board.isChecked() # no stand-pat when in check if not isCheck: value = evaluateComplete(board, board.color) if value >= beta: return [], beta if value > alpha: alpha = value amove = [] heap = [] if isCheck: someMove = False for move in genCheckEvasions(board): someMove = True # Heap.append is fine, as we don't really do sorting on the few moves heap.append((0, move)) if not someMove: return [], -MATE_VALUE + ply else: for move in genCaptures(board): heappush(heap, (-getCaptureValue(board, move), move)) while heap: nodes += 1 v, move = heappop(heap) board.applyMove(move) if not isCheck: if board.opIsChecked(): board.popMove() continue mvs, val = quiescent(board, -beta, -alpha, ply + 1) val = -val board.popMove() if val >= beta: return [move] + mvs, beta if val > alpha: alpha = val amove = [move] + mvs if amove: return amove, alpha else: return [], alpha class EndgameTable: def __init__(self): self.provider = EgtbGaviota() def _pieceCounts(self, board): return sorted([bin(board.friends[i]).count("1") for i in range(2)]) def scoreAllMoves(self, lBoard): """Return each move's result and depth to mate. lBoard: A low-level board structure Return value: a list, with best moves first, of: move: A high-level move structure game_result: Either WHITEWON, DRAW, BLACKWON depth: Depth to mate """ pc = self._pieceCounts(lBoard) if self.provider.supports(pc): return self.provider.scoreAllMoves(lBoard) return [] def enableEGTB(): global egtb egtb = EndgameTable() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/lsort.py0000755000175100001770000000671614614030313021165 0ustar00runnerdockerimport sys from .attack import staticExchangeEvaluate from .ldata import PIECE_VALUES, ASEAN_PIECE_VALUES, PAWN_VALUE, MATE_VALUE from .lmove import GATE_PIECE from pychess.Utils.const import ( DROP, EMPTY, ASEAN_VARIANTS, PROMOTIONS, ATOMICCHESS, GATINGS, ) from pychess.Utils.eval import pos as position_values from pychess.Variants.atomic import kingExplode def getCaptureValue(board, move): if board.variant in ASEAN_VARIANTS: mpV = ASEAN_PIECE_VALUES[board.arBoard[move >> 6 & 63]] cpV = ASEAN_PIECE_VALUES[board.arBoard[move & 63]] else: mpV = PIECE_VALUES[board.arBoard[move >> 6 & 63]] cpV = PIECE_VALUES[board.arBoard[move & 63]] if mpV < cpV: return cpV - mpV else: temp = staticExchangeEvaluate(board, move) return temp < 0 and -sys.maxsize or temp def sortCaptures(board, moves): def sort_captures_func(move): return getCaptureValue(board, move) moves.sort(key=sort_captures_func, reverse=True) return moves def getMoveValue(board, table, depth, move): """Sort criteria is as follows. 1. The move from the hash table 2. Captures as above. 3. Killers. 4. History. 5. Moves to the centre.""" # As we only return directly from transposition table if hashf == hashfEXACT # There could be a non hashfEXACT very promising move for us to test if table.isHashMove(depth, move): return sys.maxsize fcord = (move >> 6) & 63 tcord = move & 63 flag = move >> 12 arBoard = board.arBoard fpiece = fcord if flag == DROP else arBoard[fcord] tpiece = arBoard[tcord] if tpiece != EMPTY: if board.variant == ATOMICCHESS: if kingExplode(board, move, board.color): return MATE_VALUE # We add some extra to ensure also bad captures will be searched early if board.variant in ASEAN_VARIANTS: return ASEAN_PIECE_VALUES[tpiece] - PIECE_VALUES[fpiece] + 1000 else: return PIECE_VALUES[tpiece] - PIECE_VALUES[fpiece] + 1000 if flag in PROMOTIONS: if board.variant in ASEAN_VARIANTS: return ASEAN_PIECE_VALUES[flag - 3] - PAWN_VALUE + 1000 else: return PIECE_VALUES[flag - 3] - PAWN_VALUE + 1000 if flag == DROP: return PIECE_VALUES[tpiece] + 1000 if flag in GATINGS: return PIECE_VALUES[GATE_PIECE(flag)] + 1000 killervalue = table.isKiller(depth, move) if killervalue: return 1000 + killervalue # King tropism - a move that brings us nearer to the enemy king, is probably # a good move # opking = board.kings[1-board.color] # score = distance[fpiece][fcord][opking] - distance[fpiece][tcord][opking] if board.variant in ASEAN_VARIANTS: score = 0 else: try: score = ( position_values[fpiece][board.color][tcord] - position_values[fpiece][board.color][fcord] ) # print("NOT EMPTY fpiece", fpiece, fcord, tcord) # print(board) except KeyError: print("EMPTY fpiece!!!", fpiece, fcord, tcord) print(board) raise # History heuristic score += table.getButterfly(move) return score def sortMoves(board, table, ply, hashmove, moves): def sort_moves_func(move): return getMoveValue(board, table, ply, hashmove, move) moves.sort(key=sort_moves_func, reverse=True) return moves ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/perft.py0000644000175100001770000000155414614030313021132 0ustar00runnerdockerfrom time import time from pychess.Utils.lutils.lmovegen import genAllMoves from pychess.Utils.lutils.lmove import toLAN def do_perft(board, depth, root): nodes = 0 if depth == 0: return 1 for move in genAllMoves(board): board.applyMove(move) if board.opIsChecked(): board.popMove() continue count = do_perft(board, depth - 1, root - 1) nodes += count board.popMove() if root > 0: print("%8s %10d %10d" % (toLAN(board, move), count, nodes)) return nodes def perft(board, depth, root): for i in range(depth): start_time = time() nodes = do_perft(board, i + 1, root) ttime = time() - start_time print( "%2d %10d %5.2f %12.2fnps" % (i + 1, nodes, ttime, nodes / ttime if ttime > 0 else nodes) ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/strateval.py0000755000175100001770000006310314614030313022020 0ustar00runnerdocker""" This module differs from leval in that it is not optimized for speed. It checks differences between last and current board, and returns not scores, but strings describing the differences. Can be used for commenting on board changes. """ from .ldata import ( brank48, brank67, bitPosArray, left, right, stonewall, distance, isolaniMask, fileBits, passedScores, passedPawnMask, fromToRay, outpost, FILE, PIECE_VALUES, ray45, ray135, ray90, ray00, ) from .bitboard import clearBit, lastBit, iterBits from pychess.Utils.lutils.attack import staticExchangeEvaluate, getAttacks, defends from pychess.Utils.lutils.lmove import toSAN, TCORD, FCORD, FLAG, PROMOTE_PIECE from pychess.Utils.const import ( BLACK, WHITEWON, BLACKWON, DRAW, reprFile, reprCord, QUEEN_CASTLE, KING_CASTLE, WHITE, KNIGHT, BISHOP, ROOK, PAWN, KING, QUEEN, EMPTY, PROMOTIONS, FISCHERRANDOMCHESS, H7, G6, A7, B6, H2, G3, A2, B3, B7, G7, B2, G2, B_OO, B_OOO, W_OO, W_OOO, ) from pychess.Utils.lutils.lmovegen import genCaptures, genAllMoves, newMove from pychess.Utils.lutils.validator import validateMove from pychess.Utils.repr import reprColor, reprPiece from . import leval def join(items): if len(items) == 1: return items[0] else: s = "{} {} {}".format(items[-2], _("and"), items[-1]) if len(items) > 2: s = ", ".join(items[:-2] + [s]) return s # Functions can be of types: # * Final: Will be shown alone: "mates", "draws" # * Moves (s): Will always be shown: "put into *" # * Prefix: Will always be shown: "castles", "promotes" # * Attack: Will always be shown: "threaten", "preassures", "defendes" # * Simple: (s) Max one will be shown: "develops", "activity" # * State: (s) Will always be shown: "new *" # * Tip: (s) Will sometimes be shown: "pawn storm", "cramped position" def final_status(model, ply, phase): if ply == model.ply: if model.status == DRAW: yield _("draws") elif model.status in (WHITEWON, BLACKWON): yield _("mates") def offencive_moves_check(model, ply, phase): if model.getBoardAtPly(ply).board.isChecked(): yield _("puts opponent in check") def defencive_moves_safety(model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board if board.arBoard[TCORD(model.getMoveAtPly(ply - 1).move)] != KING: return color = oldboard.color opcolor = 1 - color delta_eval_king = leval.evalKing(board, color, phase) - leval.evalKing( oldboard, color, phase ) # PyChess points tropism to queen for phase <= 3. Thus we set a high phase delta_eval_tropism = leval.evalKingTropism( board, opcolor, 10 ) - leval.evalKingTropism(oldboard, opcolor, 10) # Notice, that tropism was negative delta_score = delta_eval_king - delta_eval_tropism / 2 if delta_score > 35: yield _("improves king safety") elif delta_score > 15: yield _("slightly improves king safety") def offencive_moves_rook(model, ply, phase): move = model.getMoveAtPly(ply - 1).move tcord = TCORD(move) board = model.getBoardAtPly(ply).board color = 1 - board.color opcolor = 1 - color # We also detect rook-to-open castlings if board.arBoard[tcord] == KING: if FLAG(move) == QUEEN_CASTLE: tcord = tcord + 1 elif FLAG(move) == KING_CASTLE: tcord = tcord - 1 if board.arBoard[tcord] != ROOK: return color = 1 - board.color opcolor = 1 - color pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] ffile = fileBits[FILE(FCORD(move))] tfile = fileBits[FILE(tcord)] if ffile & pawns and not tfile & pawns and bin(pawns).count("1") >= 3: if not tfile & oppawns: yield _("moves a rook to an open file") else: yield _("moves a rook to a half-open file") def offencive_moves_fianchetto(model, ply, phase): board = model.getBoardAtPly(ply).board tcord = TCORD(model.getMoveAtPly(ply - 1).move) movingcolor = 1 - board.color if movingcolor == WHITE: if board.castling & W_OO and tcord == G2: yield _("moves bishop into fianchetto: %s") % "g2" elif board.castling & W_OOO and tcord == B2: yield _("moves bishop into fianchetto: %s") % "b2" else: if board.castling & B_OO and tcord == G7: yield _("moves bishop into fianchetto: %s") % "g7" elif board.castling & B_OOO and tcord == B7: yield _("moves bishop into fianchetto: %s") % "b7" def prefix_type(model, ply, phase): flag = FLAG(model.getMoveAtPly(ply - 1).move) if flag in PROMOTIONS: yield _("promotes a Pawn to a %s") % reprPiece[PROMOTE_PIECE(flag)] elif flag in (KING_CASTLE, QUEEN_CASTLE): yield _("castles") def attack_type(model, ply, phase): # We set bishop value down to knight value, as it is what most people expect bishopBackup = PIECE_VALUES[BISHOP] PIECE_VALUES[BISHOP] = PIECE_VALUES[KNIGHT] board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board if ply - model.lowply >= 2: oldmove = model.getMoveAtPly(ply - 2).move oldboard3 = model.getBoardAtPly(ply - 2).board else: oldmove = None move = model.getMoveAtPly(ply - 1).move tcord = TCORD(move) if oldboard.arBoard[tcord] != EMPTY: if not ( board.variant == FISCHERRANDOMCHESS and FLAG(move) in (KING_CASTLE, QUEEN_CASTLE) ): if ( oldmove and oldboard3.arBoard[TCORD(oldmove)] != EMPTY and TCORD(oldmove) == tcord ): yield _("takes back material") else: see = staticExchangeEvaluate(oldboard, move) if see < 0: yield _("sacrifices material") elif see == 0: yield _("exchanges material") elif see > 0: yield _("captures material") else: see = staticExchangeEvaluate(oldboard, move) if see < 0: yield _("sacrifices material") PIECE_VALUES[BISHOP] = bishopBackup def defencive_moves_tactic(model, ply, phase): # ------------------------------------------------------------------------ # # Test if we threat something, or at least put more pressure on it # # ------------------------------------------------------------------------ # # We set bishop value down to knight value, as it is what most people expect bishopBackup = PIECE_VALUES[BISHOP] PIECE_VALUES[BISHOP] = PIECE_VALUES[KNIGHT] board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board move = model.getMoveAtPly(ply - 1).move fcord = FCORD(move) tcord = TCORD(move) found_threatens = [] found_increases = [] # What do we attack now? board.setColor(1 - board.color) for ncap in genCaptures(board): # getCaptures also generate promotions if FLAG(ncap) in PROMOTIONS: continue # We are only interested in the attacks of the piece we just moved if FCORD(ncap) != TCORD(move): continue # We don't want to move back if TCORD(ncap) == FCORD(move): continue # We don't thread the king. We check him! (in another function) if board.arBoard[TCORD(ncap)] == KING: continue # If we also was able to attack that cord last time, we don't care if validateMove(oldboard, newMove(FCORD(move), TCORD(ncap))): continue # Test if we threats our enemy, at least more than before see0 = staticExchangeEvaluate(oldboard, TCORD(ncap), 1 - oldboard.color) see1 = staticExchangeEvaluate(board, TCORD(ncap), 1 - oldboard.color) if see1 > see0: # If a new winning capture has been created if see1 > 0: # Find the easiest attack attacks = getAttacks(board, TCORD(ncap), board.color) v, cord = min( (PIECE_VALUES[board.arBoard[fc]], fc) for fc in iterBits(attacks) ) easiestAttack = newMove(cord, TCORD(ncap)) found_threatens.append(toSAN(board, easiestAttack, True)) # Even though we might not yet be strong enough, we might still # have strengthened another friendly attack else: found_increases.append(reprCord[TCORD(ncap)]) board.setColor(1 - board.color) # -------------------------------------------------------------------- # # Test if we defend a one of our pieces # # -------------------------------------------------------------------- # found_defends = [] # Test which pieces were under attack used = [] for ncap in genCaptures(board): # getCaptures also generate promotions if FLAG(ncap) in PROMOTIONS: continue # We don't want to know about the same cord more than once if TCORD(ncap) in used: continue used.append(TCORD(ncap)) # If the attack was poining on the piece we just moved, we ignore it if TCORD(ncap) == FCORD(move) or TCORD(ncap) == TCORD(move): continue # If we were already defending the piece, we don't send a new # message if defends(oldboard, FCORD(move), TCORD(ncap)): continue # If the attack was not strong, we ignore it see = staticExchangeEvaluate(oldboard, ncap) if see < 0: continue v = defends(board, TCORD(move), TCORD(ncap)) # If the defend didn't help, it doesn't matter. Like defending a # bishop, threatened by a pawn, with a queen. # But on the other hand - it might still be a defend... # newsee = staticExchangeEvaluate(board, ncap) # if newsee <= see: continue if v: found_defends.append(reprCord[TCORD(ncap)]) # ------------------------------------------------------------------------ # # Test if we are rescuing an otherwise exposed piece # # ------------------------------------------------------------------------ # # Rescuing is only an option, if our own move wasn't an attack if oldboard.arBoard[tcord] == EMPTY: see0 = staticExchangeEvaluate(oldboard, fcord, oldboard.color) see1 = staticExchangeEvaluate(board, tcord, oldboard.color) if see1 > see0 and see1 > 0: yield _("rescues a %s") % reprPiece[board.arBoard[tcord]].lower() if found_threatens: yield _("threatens to win material by %s") % join(found_threatens) if found_increases: yield _("increases the pressure on %s") % join(found_increases) if found_defends: yield _("defends %s") % join(found_defends) PIECE_VALUES[BISHOP] = bishopBackup def offencive_moves_pin(model, ply, phase): board = model.getBoardAtPly(ply).board move = model.getMoveAtPly(ply - 1).move fcord = FCORD(move) tcord = TCORD(move) piece = board.arBoard[tcord] ray = 0 if piece in (BISHOP, QUEEN): ray |= (ray45[tcord] | ray135[tcord]) & ~(ray45[fcord] | ray135[fcord]) if piece in (ROOK, QUEEN): ray |= (ray00[tcord] | ray90[tcord]) & ~(ray00[fcord] | ray90[fcord]) if ray: for c in iterBits(ray & board.friends[board.color]): # We don't pin on pieces that are less worth than us if not PIECE_VALUES[piece] < PIECE_VALUES[board.arBoard[c]]: continue # There should be zero friendly pieces in between ray = fromToRay[tcord][c] if ray & board.friends[1 - board.color]: continue # There should be exactly one opponent piece in between op = clearBit(ray & board.friends[board.color], c) if bin(op).count("1") != 1: continue # The king can't be pinned pinned = lastBit(op) oppiece = board.arBoard[pinned] if oppiece == KING: continue # Yield yield _("pins an enemy %(oppiece)s on the %(piece)s at %(cord)s") % { "oppiece": reprPiece[oppiece].lower(), "piece": reprPiece[board.arBoard[c]].lower(), "cord": reprCord[c], } def state_outpost(model, ply, phase): if phase >= 6: # Doesn't make sense in endgame return board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board wpawns = board.boards[WHITE][PAWN] oldwpawns = oldboard.boards[WHITE][PAWN] bpawns = board.boards[BLACK][PAWN] oldbpawns = oldboard.boards[BLACK][PAWN] wpieces = board.boards[WHITE][BISHOP] | board.boards[WHITE][KNIGHT] oldwpieces = oldboard.boards[WHITE][BISHOP] | oldboard.boards[WHITE][KNIGHT] bpieces = board.boards[BLACK][BISHOP] | board.boards[BLACK][KNIGHT] oldbpieces = oldboard.boards[BLACK][BISHOP] | oldboard.boards[BLACK][KNIGHT] for cord in iterBits(wpieces): sides = isolaniMask[FILE(cord)] front = passedPawnMask[WHITE][cord] if ( outpost[WHITE][cord] and not bpawns & sides & front and (not oldwpieces & bitPosArray[cord] or oldbpawns & sides & front) ): yield 35, _("White has a new piece in outpost: %s") % reprCord[cord] for cord in iterBits(bpieces): sides = isolaniMask[FILE(cord)] front = passedPawnMask[BLACK][cord] if ( outpost[BLACK][cord] and not wpawns & sides & front and (not oldbpieces & bitPosArray[cord] or oldwpawns & sides & front) ): yield 35, _("Black has a new piece in outpost: %s") % reprCord[cord] def state_pawn(model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board color = 1 - board.color opcolor = 1 - color move = model.getMoveAtPly(ply - 1).move pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] oldpawns = oldboard.boards[color][PAWN] oldoppawns = oldboard.boards[opcolor][PAWN] # Passed pawns for cord in iterBits(pawns): if not oppawns & passedPawnMask[color][cord]: if color == WHITE: frontCords = fromToRay[cord][cord | 56] else: frontCords = fromToRay[cord][cord & 7] if frontCords & pawns: continue # Was this a passed pawn before? if ( oldpawns & bitPosArray[cord] and not oldoppawns & passedPawnMask[color][cord] and not frontCords & oldpawns ): continue # Is this just a passed pawn that has been moved? if TCORD(move) == cord: frontCords |= bitPosArray[cord] if ( not frontCords & oldpawns and not oldoppawns & passedPawnMask[color][FCORD(move)] ): continue score = passedScores[color][cord >> 3] * phase yield score, _("%(color)s has a new passed pawn on %(cord)s") % { "color": reprColor[color], "cord": reprCord[cord], } # Double pawns found_doubles = [] found_halfopen_doubles = [] found_white_isolates = [] found_black_isolates = [] for file in range(8): bits = fileBits[file] count = bin(pawns & bits).count("1") oldcount = bin(oldpawns & bits).count("1") opcount = bin(oppawns & bits).count("1") oldopcount = bin(oldoppawns & bits).count("1") # Single pawn -> double pawns if count > oldcount >= 1: if not opcount: found_halfopen_doubles.append(reprFile[file]) else: found_doubles.append(reprFile[file]) # Closed file double pawn -> half-open file double pawn elif count > 1 and opcount == 0 and oldopcount > 0: found_halfopen_doubles.append(reprFile[file]) # Isolated pawns if color == WHITE: wpawns = pawns oldwpawns = oldpawns bpawns = oppawns oldbpawns = oldoppawns else: bpawns = pawns oldbpawns = oldpawns wpawns = oppawns oldwpawns = oldoppawns if ( wpawns & bits and not wpawns & isolaniMask[file] and (not oldwpawns & bits or oldwpawns & isolaniMask[file]) ): found_white_isolates.append(reprFile[file]) if ( bpawns & bits and not bpawns & isolaniMask[file] and (not oldbpawns & bits or oldbpawns & isolaniMask[file]) ): found_black_isolates.append(reprFile[file]) # We need to take care of 'worstcases' like: "got new double pawns in the a # file, in the half-open b, c and d files and in the open e and f files" doubles_count = len(found_doubles) + len(found_halfopen_doubles) if doubles_count > 0: parts = [] for type_, list_ in ( ("", found_doubles), (_("half-open") + " ", found_halfopen_doubles), ): if len(list_) == 1: parts.append(_("in the %(x)s%(y)s file") % {"x": type_, "y": list_[0]}) elif len(list_) >= 2: parts.append( _("in the %(x)s%(y)s files") % {"x": type_, "y": join(list_)} ) if doubles_count == 1: s = _("%(color)s got a double pawn %(place)s") else: s = _("%(color)s got new double pawns %(place)s") yield (8 + phase) * 2 * doubles_count, s % { "color": reprColor[color], "place": join(parts), } for color_, list_ in ((WHITE, found_white_isolates), (BLACK, found_black_isolates)): if list_: yield 20 * len(list_), ngettext( "%(color)s got an isolated pawn in the %(x)s file", "%(color)s got isolated pawns in the %(x)s files", len(list_), ) % {"color": reprColor[color_], "x": join(list_)} # Stone wall if ( stonewall[color] & pawns == stonewall[color] and stonewall[color] & oldpawns != stonewall[color] ): yield 10, _("%s moves pawns into stonewall formation") % reprColor[color] def state_destroysCastling(model, ply, phase): """Does the move destroy the castling ability of the opponent""" # If the move is a castling, nobody will every care if the castling # possibilities has changed if FLAG(model.getMoveAtPly(ply - 1).move) in (QUEEN_CASTLE, KING_CASTLE): return oldcastling = model.getBoardAtPly(ply - 1).board.castling castling = model.getBoardAtPly(ply).board.castling if oldcastling & W_OOO and not castling & W_OOO: if oldcastling & W_OO and not castling & W_OO: yield 900 / phase, _("%s can no longer castle") % reprColor[WHITE] else: yield 400 / phase, _("%s can no longer castle in queenside") % reprColor[ WHITE ] elif oldcastling & W_OO and not castling & W_OO: yield 500 / phase, _("%s can no longer castle in kingside") % reprColor[WHITE] if oldcastling & B_OOO and not castling & B_OOO: if oldcastling & B_OO and not castling & B_OO: yield 900 / phase, _("%s can no longer castle") % reprColor[BLACK] else: yield 400 / phase, _("%s can no longer castle in queenside") % reprColor[ BLACK ] elif oldcastling & B_OO and not castling & B_OO: yield 500 / phase, _("%s can no longer castle in kingside") % reprColor[BLACK] def state_trappedBishops(model, ply, phase): """Check for bishops trapped at A2/H2/A7/H7""" board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board opcolor = board.color move = model.getMoveAtPly(ply - 1).move tcord = TCORD(move) # Only a pawn is able to trap a bishop if board.arBoard[tcord] != PAWN: return if tcord == B3: cord = A2 elif tcord == G3: cord = H2 elif tcord == B6: cord = A7 elif tcord == G6: cord = H7 else: return s = leval.evalTrappedBishops(board, opcolor) olds = leval.evalTrappedBishops(oldboard, opcolor) # We have got more points -> We have trapped a bishop if s > olds: yield 300 / phase, _("%(opcolor)s has a new trapped bishop on %(cord)s") % { "opcolor": reprColor[opcolor], "cord": reprCord[cord], } def simple_tropism(model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board color = oldboard.color move = model.getMoveAtPly(ply - 1).move fcord = FCORD(move) tcord = TCORD(move) arBoard = board.arBoard if arBoard[tcord] != PAWN: score = leval.evalKingTropism(board, color, phase) oldscore = leval.evalKingTropism(oldboard, color, phase) else: if color == WHITE: rank23 = brank67[BLACK] else: rank23 = brank67[WHITE] if bitPosArray[fcord] & rank23: yield 2, _("develops a pawn: %s") % reprCord[tcord] else: yield 1, _("brings a pawn closer to the backrow: %s") % reprCord[tcord] return king = board.kings[color] opking = board.kings[1 - color] if score > oldscore: # in FISCHERRANDOMCHESS unusual casting case the tcord is # the involved rook's position, not the king's destination! flag = move >> 12 if flag in (KING_CASTLE, QUEEN_CASTLE): piece = KING else: piece = arBoard[tcord] if phase >= 5 or distance[piece][fcord][opking] < distance[piece][fcord][king]: yield score - oldscore, _( "brings a %(piece)s closer to enemy king: %(cord)s" ) % {"piece": reprPiece[piece], "cord": reprCord[tcord]} else: yield (score - oldscore) * 2, _("develops a %(piece)s: %(cord)s") % { "piece": reprPiece[piece].lower(), "cord": reprCord[tcord], } def simple_activity(model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply - 1).board move = model.getMoveAtPly(ply - 1).move fcord = FCORD(move) tcord = TCORD(move) board.setColor(1 - board.color) moves = len([m for m in genAllMoves(board) if FCORD(m) == tcord]) board.setColor(1 - board.color) oldmoves = len([m for m in genAllMoves(oldboard) if FCORD(m) == fcord]) if moves > oldmoves: yield (moves - oldmoves) / 2, _("places a %(piece)s more active: %(cord)s") % { "piece": reprPiece[board.arBoard[tcord]].lower(), "cord": reprCord[tcord], } def tip_pawnStorm(model, ply, phase): """If players are castled in different directions we should storm in opponent side""" if phase >= 6: # We don't use this in endgame return board = model.getBoardAtPly(ply).board # if not board.hasCastled[WHITE] or not board.hasCastled[BLACK]: # # Only applies after castling for both sides # return wking = board.boards[WHITE][KING] bking = board.boards[BLACK][KING] wleft = bin(board.boards[WHITE][PAWN] & left).count("1") wright = bin(board.boards[WHITE][PAWN] & right).count("1") bleft = bin(board.boards[BLACK][PAWN] & left).count("1") bright = bin(board.boards[BLACK][PAWN] & right).count("1") if wking & left and bking & right: if wright > bright: yield (wright + 3 - bright) * 10, _("White should do pawn storm in right") elif bleft > wleft: yield (bright + 3 - wright) * 10, _("Black should do pawn storm in left") if wking & right and bking & left: if wleft > bleft: yield (wleft + 3 - bleft) * 10, _("White should do pawn storm in left") if bright > wright: yield (bleft + 3 - wleft) * 10, _("Black should do pawn storm in right") def tip_mobility(model, ply, phase): board = model.getBoardAtPly(ply).board colorBackup = board.color # People need a chance to get developed # if model.ply < 16: # return board.setColor(WHITE) wmoves = len( [ move for move in genAllMoves(board) if KNIGHT <= board.arBoard[FCORD(move)] <= QUEEN and bitPosArray[TCORD(move)] & brank48[WHITE] and staticExchangeEvaluate(board, move) >= 0 ] ) board.setColor(BLACK) bmoves = len( [ move for move in genAllMoves(board) if KNIGHT <= board.arBoard[FCORD(move)] <= QUEEN and bitPosArray[TCORD(move)] & brank48[BLACK] and staticExchangeEvaluate(board, move) >= 0 ] ) board.setColor(colorBackup) if wmoves - phase >= (bmoves + 1) * 7: yield wmoves - bmoves, _("Black has a rather cramped position") elif wmoves - phase >= (bmoves + 1) * 3: yield wmoves - bmoves, _("Black has a slightly cramped position") elif bmoves - phase >= (wmoves + 1) * 7: yield wmoves - bmoves, _("White has a rather cramped position") elif bmoves - phase >= (wmoves + 1) * 3: yield wmoves - bmoves, _("White has a slightly cramped position") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/lutils/validator.py0000755000175100001770000000056114614030313021777 0ustar00runnerdockerfrom pychess.Utils.lutils.lmovegen import genAllMoves ################################################################################ # Validate move # ################################################################################ def validateMove(board, move): return move in genAllMoves(board) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Utils/repr.py0000755000175100001770000001314414614030313017447 0ustar00runnerdockerimport builtins from .const import ( ADJOURNED_LOST_CONNECTION_BLACK, UNKNOWN_REASON, WON_LESSMATERIAL, KILLED, ADJOURNED_SERVER_SHUTDOWN, DRAW_EQUALMATERIAL, ABORTED_ADJUDICATION, DISCONNECTED, BLACKWON, WHITEWON, DRAW_CALLFLAG, WON_RESIGN, DRAW, WON_CALLFLAG, DRAW_WHITEINSUFFICIENTANDBLACKTIME, DRAW_LENGTH, WON_MATE, WON_KINGINEIGHTROW, DRAW_BLACKINSUFFICIENTANDWHITETIME, ADJOURNED_COURTESY_WHITE, WON_THREECHECK, WON_WIPEOUT, DRAW_AGREE, DRAW_INSUFFICIENT, DRAW_STALEMATE, DRAW_ADJUDICATION, UNKNOWN_STATE, ADJOURNED_LOST_CONNECTION, WON_NOMATERIAL, ADJOURNED, WON_DISCONNECTION, ABORTED, ADJOURNED_AGREEMENT, WON_KINGEXPLODE, WON_KINGINCENTER, ABORTED_SERVER_SHUTDOWN, ABORTED_AGREEMENT, WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, WON_ADJUDICATION, ADJOURNED_COURTESY_BLACK, ADJOURNED_COURTESY, DRAW_REPETITION, ABORTED_COURTESY, DRAW_50MOVES, ADJOURNED_LOST_CONNECTION_WHITE, ABORTED_EARLY, ABORTED_DISCONNECTION, CANCELLED, PRACTICE_GOAL_REACHED, DRAW_KINGSINEIGHTROW, ) if "_" not in builtins.__dict__: builtins.__dict__["_"] = lambda s: s builtins.__dict__["ngettext"] = lambda singular, plural, n: ( singular if n == 1 else plural ) reprColor = [_("White"), _("Black")] reprPiece = [ "Empty", _("Pawn"), _("Knight"), _("Bishop"), _("Rook"), _("Queen"), _("King"), _("Hawk"), _("Elephant"), "BPawn", ] localReprSign = ["", _("P"), _("N"), _("B"), _("R"), _("Q"), _("K"), _("H"), _("E")] reprResult_long = { DRAW: _("The game ended in a draw"), WHITEWON: _("%(white)s won the game"), BLACKWON: _("%(black)s won the game"), KILLED: _("The game has been killed"), ADJOURNED: _("The game has been adjourned"), ABORTED: _("The game has been aborted"), UNKNOWN_STATE: _("Unknown game state"), CANCELLED: _("Game cancelled"), } reprReason_long = { DRAW_INSUFFICIENT: _("Because neither player has sufficient material to mate"), DRAW_REPETITION: _("Because the same position was repeated three times in a row"), DRAW_50MOVES: _("Because the last 50 moves brought nothing new"), DRAW_CALLFLAG: _("Because both players ran out of time"), DRAW_STALEMATE: _("Because %(mover)s stalemated"), DRAW_AGREE: _("Because both players agreed to a draw"), DRAW_ADJUDICATION: _("Because of adjudication by an admin"), DRAW_LENGTH: _("Because the game exceed the max length"), DRAW_BLACKINSUFFICIENTANDWHITETIME: _( "Because %(white)s ran out of time and %(black)s has insufficient material to mate" ), DRAW_WHITEINSUFFICIENTANDBLACKTIME: _( "Because %(black)s ran out of time and %(white)s has insufficient material to mate" ), DRAW_EQUALMATERIAL: _("Because both players have the same amount of pieces"), DRAW_KINGSINEIGHTROW: _("Because both king reached the eight row"), WON_RESIGN: _("Because %(loser)s resigned"), WON_CALLFLAG: _("Because %(loser)s ran out of time"), WON_MATE: _("Because %(loser)s was checkmated"), WON_DISCONNECTION: _("Because %(loser)s disconnected"), WON_ADJUDICATION: _("Because of adjudication by an admin"), WON_LESSMATERIAL: _("Because %(winner)s has fewer pieces"), WON_NOMATERIAL: _("Because %(winner)s lost all pieces"), WON_KINGEXPLODE: _("Because %(loser)s king exploded"), WON_KINGINCENTER: _("Because %(winner)s king reached the center"), WON_THREECHECK: _("Because %(winner)s was giving check 3 times"), WON_KINGINEIGHTROW: _("Because %(winner)s king reached the eight row"), WON_WIPEOUT: _("Because %(winner)s wiped out white horde"), ADJOURNED_LOST_CONNECTION: _("Because a player lost connection"), ADJOURNED_AGREEMENT: _("Because both players agreed to an adjournment"), ADJOURNED_SERVER_SHUTDOWN: _("Because the server was shut down"), ADJOURNED_COURTESY: _( "Because a player lost connection and the other player requested adjournment" ), ADJOURNED_COURTESY_WHITE: _( "Because %(black)s lost connection to the server and %(white)s requested adjournment" ), ADJOURNED_COURTESY_BLACK: _( "Because %(white)s lost connection to the server and %(black)s requested adjournment" ), ADJOURNED_LOST_CONNECTION_WHITE: _( "Because %(white)s lost connection to the server" ), ADJOURNED_LOST_CONNECTION_BLACK: _( "Because %(black)s lost connection to the server" ), ABORTED_ADJUDICATION: _( "Because of adjudication by an admin. No rating changes have occurred." ), ABORTED_AGREEMENT: _( "Because both players agreed to abort the game. No rating changes have occurred." ), ABORTED_COURTESY: _( "Because of courtesy by a player. No rating changes have occurred." ), ABORTED_EARLY: _( "Because a player aborted the game. Either player can abort the game without \ the other's consent before the second move. No rating changes have occurred." ), ABORTED_DISCONNECTION: _( "Because a player disconnected and there are too few moves to warrant adjournment. No rating changes have occurred." ), ABORTED_SERVER_SHUTDOWN: _( "Because the server was shut down. No rating changes have occurred." ), WHITE_ENGINE_DIED: _("Because the %(white)s engine died"), BLACK_ENGINE_DIED: _("Because the %(black)s engine died"), DISCONNECTED: _("Because the connection to the server was lost"), UNKNOWN_REASON: _("The reason is unknown"), PRACTICE_GOAL_REACHED: _("Because practice goal reached"), } ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.897477 pychess-1.0.5/lib/pychess/Variants/0000755000175100001770000000000014614030425016612 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/__init__.py0000755000175100001770000001102214614030313020716 0ustar00runnerdockerfrom pychess.Utils.const import ( NORMALCHESS, CORNERCHESS, SHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, ASYMMETRICRANDOMCHESS, UPSIDEDOWNCHESS, PAWNSPUSHEDCHESS, THEBANCHESS, BUGHOUSECHESS, PAWNSPASSEDCHESS, ATOMICCHESS, CRAZYHOUSECHESS, LOSERSCHESS, SUICIDECHESS, PAWNODDSCHESS, KNIGHTODDSCHESS, ROOKODDSCHESS, QUEENODDSCHESS, ALLWHITECHESS, BLINDFOLDCHESS, HIDDENPIECESCHESS, HIDDENPAWNSCHESS, ALLPAWNSCHESS, ALLWHITEPAWNSCHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, THREECHECKCHESS, AIWOKCHESS, KINGOFTHEHILLCHESS, ASEANCHESS, CAMBODIANCHESS, SITTUYINCHESS, EUROSHOGICHESS, RACINGKINGSCHESS, MAKRUKCHESS, SETUPCHESS, GIVEAWAYCHESS, HORDECHESS, PLACEMENTCHESS, SCHESS, LIGHTBRIGADECHESS, ) from .normal import NormalBoard from .corner import CornerBoard from .shuffle import ShuffleBoard from .fischerandom import FischerandomBoard from .randomchess import RandomBoard from .asymmetricrandom import AsymmetricRandomBoard from .upsidedown import UpsideDownBoard from .pawnspushed import PawnsPushedBoard from .pawnspassed import PawnsPassedBoard from .theban import ThebanBoard from .atomic import AtomicBoard from .bughouse import BughouseBoard from .crazyhouse import CrazyhouseBoard from .losers import LosersBoard from .suicide import SuicideBoard from .horde import HordeBoard from .giveaway import GiveawayBoard from .pawnodds import PawnOddsBoard from .knightodds import KnightOddsBoard from .rookodds import RookOddsBoard from .queenodds import QueenOddsBoard from .wildcastle import WildcastleBoard from .wildcastleshuffle import WildcastleShuffleBoard from .blindfold import ( BlindfoldBoard, HiddenPawnsBoard, HiddenPiecesBoard, AllWhiteBoard, AllPawnsBoard, AllWhitePawnsBoard, ) from .kingofthehill import KingOfTheHillBoard from .threecheck import ThreeCheckBoard from .racingkings import RacingKingsBoard from .asean import AiWokBoard, AseanBoard, CambodianBoard, MakrukBoard, SittuyinBoard from .euroshogi import EuroShogiBoard from .setupposition import SetupBoard from .placement import PlacementBoard from .seirawan import SchessBoard from .lightbrigade import LightbrigadeBoard variants = { NORMALCHESS: NormalBoard, CORNERCHESS: CornerBoard, SHUFFLECHESS: ShuffleBoard, FISCHERRANDOMCHESS: FischerandomBoard, RANDOMCHESS: RandomBoard, ASYMMETRICRANDOMCHESS: AsymmetricRandomBoard, UPSIDEDOWNCHESS: UpsideDownBoard, PAWNSPUSHEDCHESS: PawnsPushedBoard, PAWNSPASSEDCHESS: PawnsPassedBoard, THEBANCHESS: ThebanBoard, ATOMICCHESS: AtomicBoard, BUGHOUSECHESS: BughouseBoard, CRAZYHOUSECHESS: CrazyhouseBoard, LOSERSCHESS: LosersBoard, SUICIDECHESS: SuicideBoard, GIVEAWAYCHESS: GiveawayBoard, HORDECHESS: HordeBoard, PAWNODDSCHESS: PawnOddsBoard, KNIGHTODDSCHESS: KnightOddsBoard, ROOKODDSCHESS: RookOddsBoard, QUEENODDSCHESS: QueenOddsBoard, ALLWHITECHESS: AllWhiteBoard, BLINDFOLDCHESS: BlindfoldBoard, HIDDENPAWNSCHESS: HiddenPawnsBoard, HIDDENPIECESCHESS: HiddenPiecesBoard, ALLPAWNSCHESS: AllPawnsBoard, ALLWHITEPAWNSCHESS: AllWhitePawnsBoard, WILDCASTLECHESS: WildcastleBoard, WILDCASTLESHUFFLECHESS: WildcastleShuffleBoard, KINGOFTHEHILLCHESS: KingOfTheHillBoard, THREECHECKCHESS: ThreeCheckBoard, RACINGKINGSCHESS: RacingKingsBoard, AIWOKCHESS: AiWokBoard, ASEANCHESS: AseanBoard, CAMBODIANCHESS: CambodianBoard, MAKRUKCHESS: MakrukBoard, SITTUYINCHESS: SittuyinBoard, EUROSHOGICHESS: EuroShogiBoard, SETUPCHESS: SetupBoard, PLACEMENTCHESS: PlacementBoard, SCHESS: SchessBoard, LIGHTBRIGADECHESS: LightbrigadeBoard, } name2variant = {v.cecp_name.capitalize(): v for v in variants.values()} # FICS pgn export names name2variant["Wild/0"] = WildcastleBoard name2variant["Wild/1"] = WildcastleShuffleBoard name2variant["Wild/2"] = ShuffleBoard name2variant["Wild/3"] = RandomBoard name2variant["Wild/4"] = AsymmetricRandomBoard name2variant["Wild/5"] = UpsideDownBoard name2variant["Wild/fr"] = FischerandomBoard name2variant["Wild/8"] = PawnsPushedBoard name2variant["Wild/8a"] = PawnsPassedBoard # Lichess pgn export names name2variant["Standard"] = NormalBoard name2variant["Chess960"] = FischerandomBoard name2variant["Antichess"] = SuicideBoard name2variant["King of the Hill"] = KingOfTheHillBoard name2variant["Three-check"] = ThreeCheckBoard name2variant["Racing Kings"] = RacingKingsBoard name2variant["Horde"] = HordeBoard ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/asean.py0000644000175100001770000001070314614030313020250 0ustar00runnerdocker############# # ASEAN-Chess ############# from pychess.Utils.const import ( VARIANTS_ASEAN, ASEANCHESS, MAKRUKCHESS, QUEEN_PROMOTION, CAMBODIANCHESS, AIWOKCHESS, SITTUYINCHESS, NORMAL_MOVE, A1, A3, A6, A8, B2, B3, B6, B7, C3, C6, D3, D4, D5, D6, E3, E4, E5, E6, F3, F6, G2, G3, G6, G7, H1, H3, H6, H8, ) from pychess.Utils.Board import Board ASEANSTART = "rnbqkbnr/8/pppppppp/8/8/PPPPPPPP/8/RNBQKBNR w - - 0 1" class AseanBoard(Board): variant = ASEANCHESS __desc__ = _( "ASEAN: http://www.ncf-phil.org/downloadables/2014/May/Asean_chess/Laws_of_ASEAN_Chess_2011_Nov_26.doc" ) name = _("ASEAN") cecp_name = "asean" need_initial_board = True standard_rules = False variant_group = VARIANTS_ASEAN def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=ASEANSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ####################### # Makruk, or Thai chess ####################### MAKRUKSTART = "rnsmksnr/8/pppppppp/8/8/PPPPPPPP/8/RNSKMSNR w - - 0 1" class MakrukBoard(Board): variant = MAKRUKCHESS __desc__ = _("Makruk: http://en.wikipedia.org/wiki/Makruk") name = _("Makruk") cecp_name = "makruk" need_initial_board = True standard_rules = False variant_group = VARIANTS_ASEAN PROMOTION_ZONE = ( (A6, B6, C6, D6, E6, F6, G6, H6), (A3, B3, C3, D3, E3, F3, G3, H3), ) PROMOTIONS = (QUEEN_PROMOTION,) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=MAKRUKSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ################################## # Ouk Chatrang, or Cambodian Makruk ################################## # DEde in cambodian starting fen indicate # that queens and kings are virgins (not moved yet) KAMBODIANSTART = "rnsmksnr/8/pppppppp/8/8/PPPPPPPP/8/RNSKMSNR w DEde - 0 1" class CambodianBoard(Board): variant = CAMBODIANCHESS __desc__ = _("Cambodian: http://www.khmerinstitute.org/culture/ok.html") name = _("Cambodian") cecp_name = "cambodian" need_initial_board = True standard_rules = False variant_group = VARIANTS_ASEAN PROMOTION_ZONE = ( (A6, B6, C6, D6, E6, F6, G6, H6), (A3, B3, C3, D3, E3, F3, G3, H3), ) PROMOTIONS = (QUEEN_PROMOTION,) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=KAMBODIANSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ############### # Ai-Wok Makruk ############### AIWOKSTART = "rnsaksnr/8/pppppppp/8/8/PPPPPPPP/8/RNSKASNR w - - 0 1" class AiWokBoard(Board): variant = AIWOKCHESS __desc__ = _( "Ai-Wok: http://www.open-aurec.com/wbforum/viewtopic.php?p=199364&sid=20963a1de2c164050de019e5ed6bf7c4#p199364" ) name = _("Ai-Wok") cecp_name = "ai-wok" need_initial_board = True standard_rules = False variant_group = VARIANTS_ASEAN PROMOTION_ZONE = ( (A6, B6, C6, D6, E6, F6, G6, H6), (A3, B3, C3, D3, E3, F3, G3, H3), ) PROMOTIONS = (QUEEN_PROMOTION,) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=AIWOKSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ############################ # Sittuyin, or Myanmar Chess ############################ # Official rules: # https://vdocuments.net/how-to-play-myanmar-traditional-chess-eng-book-1.html SITTUYINSTART = "8/8/4pppp/pppp4/4PPPP/PPPP4/8/8/rrnnssfkRRNNSSFK w - - 0 1" class SittuyinBoard(Board): variant = SITTUYINCHESS __desc__ = _("Sittuyin: http://en.wikipedia.org/wiki/Sittuyin") name = _("Sittuyin") cecp_name = "sittuyin" need_initial_board = True standard_rules = False variant_group = VARIANTS_ASEAN PROMOTION_ZONE = ( (A8, B7, C6, D5, E5, F6, G7, H8), (A1, B2, C3, D4, E4, F3, G2, H1), ) PROMOTIONS = (QUEEN_PROMOTION, NORMAL_MOVE) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=SITTUYINSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/asymmetricrandom.py0000755000175100001770000001037114614030313022543 0ustar00runnerdocker# AsymmetricRandom Chess import random from pychess.Utils.const import VARIANTS_SHUFFLE, ASYMMETRICRANDOMCHESS from pychess.Utils.Board import Board class AsymmetricRandomBoard(Board): variant = ASYMMETRICRANDOMCHESS __desc__ = _( "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Randomly chosen pieces (two queens or three rooks possible)\n" + "* Exactly one king of each color\n" + "* Pieces placed randomly behind the pawns, SUBJECT TO THE CONSTRAINT THAT THE BISHOPS ARE BALANCED\n" + "* No castling\n" + "* Black's arrangement DOES NOT mirrors white's" ) name = _("Asymmetric Random") cecp_name = "wild/4" need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.asymmetricrandom_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def asymmetricrandom_start(self): white = random.sample(("r", "n", "b", "q") * 16, 7) white.append("k") black = white[:] random.shuffle(white) random.shuffle(black) # balance the bishops (put them on equal numbers of dark and light squares) whitedarkbishops = 0 whitelightbishops = 0 for index, piece in enumerate(white): if piece == "b": if index % 2 == 0: # even numbered square on the A rank are dark whitedarkbishops += 1 else: whitelightbishops += 1 blackdarkbishops = 0 blacklightbishops = 0 blackbishoprandomindexstack = [] for index, piece in enumerate(black): if piece == "b": if index % 2 == 1: # odd numbered squares on the H rank are dark blackdarkbishops += 1 else: blacklightbishops += 1 blackbishoprandomindexstack.append(index) random.shuffle(blackbishoprandomindexstack) class RandomEnumeratePieces: def __init__(self, pieces): self.pieces = pieces[:] self.randomindexstack = list(range(8)) random.shuffle(self.randomindexstack) def __iter__(self): return self def __next__(self): if not self.randomindexstack: raise StopIteration else: randomindex = self.randomindexstack.pop() return randomindex, self.pieces[randomindex] while (whitedarkbishops != blackdarkbishops) or ( whitelightbishops != blacklightbishops ): bishopindex = blackbishoprandomindexstack.pop() for index, piece in RandomEnumeratePieces(black): if piece != "b": if ( (blackdarkbishops > whitedarkbishops) and (bishopindex % 2 == 1) and (index % 2 == 0) ): black[bishopindex] = piece black[index] = "b" blacklightbishops += 1 blackdarkbishops = ( blackdarkbishops > 0 and (blackdarkbishops - 1) or 0 ) break elif ( (blacklightbishops > whitelightbishops) and (bishopindex % 2 == 0) and (index % 2 == 1) ): black[bishopindex] = piece black[index] = "b" blackdarkbishops += 1 blacklightbishops = ( blacklightbishops > 0 and (blacklightbishops - 1) or 0 ) break tmp = ( "".join(black) + "/pppppppp/8/8/8/8/PPPPPPPP/" + "".join(white).upper() + " w - - 0 1" ) return tmp if __name__ == "__main__": Board = AsymmetricRandomBoard(True) for i in range(10): print(Board.asymmetricrandom_start()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/atomic.py0000755000175100001770000000423714614030313020445 0ustar00runnerdocker# Atomic Chess from pychess.Utils.const import ( VARIANTS_OTHER_NONSTANDARD, KING, ATOMICCHESS, ENPASSANT, B8, E1, ) from pychess.Utils.Board import Board from pychess.Utils.Cord import Cord from pychess.Utils.Move import Move from pychess.Utils.lutils.bitboard import iterBits from pychess.Utils.lutils.ldata import moveArray class AtomicBoard(Board): variant = ATOMICCHESS __desc__ = _("FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html") name = _("Atomic") cecp_name = "atomic" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def cordsAround(cord): kingMoves = moveArray[KING] for co_ord in iterBits(kingMoves[cord.cord]): yield Cord(co_ord) def piecesAround(board, cord): kingMoves = moveArray[KING] friends = board.friends[board.color] for co_ord in iterBits(kingMoves[cord] & friends): yield co_ord, board.arBoard[co_ord], board.color enemies = board.friends[1 - board.color] for co_ord in iterBits(kingMoves[cord] & enemies): yield co_ord, board.arBoard[co_ord], 1 - board.color def kingExplode(board, move, color): tcord = move & 63 # fcord = (move >> 6) & 63 flag = move >> 12 if board.arBoard[tcord] or flag == ENPASSANT: for acord, apiece, acolor in piecesAround(board, tcord): if apiece == KING and acolor == color: return True return False if __name__ == "__main__": FEN = "rnbqkbnr/ppp1pppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1" atomic_board = AtomicBoard(FEN) print(atomic_board.board.__repr__()) for acord, apiece, acolor in piecesAround(atomic_board.board, B8): print(acord, apiece, acolor) for acord, apiece, acolor in piecesAround(atomic_board.board, E1): print(acord, apiece, acolor) from pychess.Utils.lutils.lmove import parseAN atomic_board = atomic_board.move(Move(parseAN(atomic_board.board, "d8d2"))) print(atomic_board.board.__repr__()) print(atomic_board.board.pieceCount) atomic_board.board.popMove() print(atomic_board.board.__repr__()) print(atomic_board.board.pieceCount) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/blindfold.py0000644000175100001770000000437714614030313021130 0ustar00runnerdockerfrom pychess.Utils.const import ( VARIANTS_BLINDFOLD, BLINDFOLDCHESS, HIDDENPAWNSCHESS, HIDDENPIECESCHESS, ALLWHITECHESS, ALLPAWNSCHESS, ALLWHITEPAWNSCHESS, ) from pychess.Utils.Board import Board class BlindfoldBoard(Board): variant = BLINDFOLDCHESS __desc__ = _( "Classic chess rules with hidden figurines\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("Blindfold") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class HiddenPawnsBoard(Board): variant = HIDDENPAWNSCHESS __desc__ = _( "Classic chess rules with hidden pawns\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("Hidden pawns") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class HiddenPiecesBoard(Board): variant = HIDDENPIECESCHESS __desc__ = _( "Classic chess rules with hidden pieces\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("Hidden pieces") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class AllWhiteBoard(Board): variant = ALLWHITECHESS __desc__ = _( "Classic chess rules with all pieces white\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("All white") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class AllPawnsBoard(Board): variant = ALLPAWNSCHESS __desc__ = _( "Classic chess rules with all pieces pawns\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("All pawns") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class AllWhitePawnsBoard(Board): variant = ALLWHITEPAWNSCHESS __desc__ = _( "Classic chess rules with all pieces white pawns\n" + "http://en.wikipedia.org/wiki/Blindfold_chess" ) name = _("All white pawns") cecp_name = "normal" need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/bughouse.py0000755000175100001770000000066214614030313021010 0ustar00runnerdocker# Bughouse Chess from pychess.Utils.const import VARIANTS_OTHER_NONSTANDARD, BUGHOUSECHESS from pychess.Utils.Board import Board class BughouseBoard(Board): variant = BUGHOUSECHESS __desc__ = _("FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html") name = _("Bughouse") cecp_name = "bughouse" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/corner.py0000755000175100001770000000305514614030313020456 0ustar00runnerdocker# Corner Chess import random from pychess.Utils.const import VARIANTS_SHUFFLE, CORNERCHESS from pychess.Utils.Board import Board class CornerBoard(Board): variant = CORNERCHESS __desc__ = _( "http://brainking.com/en/GameRules?tp=2\n" + "* Placement of the pieces on the 1st and 8th row are randomized\n" + "* The king is in the right hand corner\n" + "* Bishops must start on opposite color squares\n" + "* Black's starting position is obtained by rotating white's position 180 degrees around the board's center\n" + "* No castling" ) name = _("Corner") cecp_name = "nocastle" need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.shuffle_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def shuffle_start(self): set1 = set2 = 0 back_rank = ["r", "n", "b", "q", "b", "n", "r"] while set1 % 2 == set2 % 2: random.shuffle(back_rank) set1 = back_rank.index("b") set2 = back_rank.index("b", set1 + 1) fen = "".join(back_rank) fen = ( "k" + fen + "/pppppppp/8/8/8/8/PPPPPPPP/" + fen[::-1].upper() + "K w - - 0 1" ) return fen if __name__ == "__main__": Board = CornerBoard(True) for i in range(10): print(Board.shuffle_start()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/crazyhouse.py0000755000175100001770000000072014614030313021356 0ustar00runnerdocker# Crazyhouse Chess from pychess.Utils.const import CRAZYHOUSECHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board class CrazyhouseBoard(Board): variant = CRAZYHOUSECHESS __desc__ = _( "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" ) name = _("Crazyhouse") cecp_name = "crazyhouse" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/euroshogi.py0000644000175100001770000000363014614030313021166 0ustar00runnerdockerfrom pychess.Utils.const import ( EUROSHOGICHESS, VARIANTS_OTHER_NONSTANDARD, A8, B8, C8, D8, E8, F8, G8, H8, A7, B7, C7, D7, E7, F7, G7, H7, A6, B6, C6, D6, E6, F6, G6, H6, A1, B1, C1, D1, E1, F1, G1, H1, A2, B2, C2, D2, E2, F2, G2, H2, A3, B3, C3, D3, E3, F3, G3, H3, ) from pychess.Utils.Board import Board EUROSHOGISTART = "1nbqkqn1/1r4b1/pppppppp/8/8/PPPPPPPP/1B4R1/1NQKQBN1 w - - 0 1" class EuroShogiBoard(Board): variant = EUROSHOGICHESS __desc__ = _("EuroShogi: http://en.wikipedia.org/wiki/EuroShogi") name = _("EuroShogi") cecp_name = "euroshogi" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD PROMOTION_ZONE = ( ( A8, B8, C8, D8, E8, F8, G8, H8, A7, B7, C7, D7, E7, F7, G7, H7, A6, B6, C6, D6, E6, F6, G6, H6, ), ( A1, B1, C1, D1, E1, F1, G1, H1, A2, B2, C2, D2, E2, F2, G2, H2, A3, B3, C3, D3, E3, F3, G3, H3, ), ) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=EUROSHOGISTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/fischerandom.py0000755000175100001770000000450414614030313021630 0ustar00runnerdocker# Chess960 (Fischer Random Chess) from random import randrange from math import floor from pychess.Utils.const import FISCHERRANDOMCHESS, VARIANTS_SHUFFLE from pychess.Utils.Board import Board from pychess.Utils.const import reprFile class FischerandomBoard(Board): variant = FISCHERRANDOMCHESS __desc__ = _( "http://en.wikipedia.org/wiki/Chess960\n" + "FICS wild/fr: http://www.freechess.org/Help/HelpFiles/wild.html" ) name = _("Fischer Random") cecp_name = "fischerandom" need_initial_board = True standard_rules = False variant_group = VARIANTS_SHUFFLE def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.shuffle_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def getFrcFen(self, position=519): position = max(1, min(960, position)) pieces = ["", "", "", "", "", "", "", ""] # Bishops pieces[floor(0.08 * (floor(25 * (position - 1)) % 100) + 1.5)] = "b" pieces[floor(0.08 * (floor(25 * floor((position - 1) / 4)) % 100) + 0.5)] = "b" # Queen z = floor(floor((position - 1) / 4) / 4) / 6 p = floor(6 * (z - floor(z)) + 0.5) for i in range(8): if pieces[i] == "": if p == 0: pieces[i] = "q" break p -= 1 # KRN krn = [ "nnrkr", "nrnkr", "nrknr", "nrkrn", "rnnkr", "rnknr", "rnkrn", "rknnr", "rknrn", "rkrnn", ][floor(z)] for i in range(8): if pieces[i] == "": pieces[i] = krn[:1] krn = krn[1:] # Castling castling = "" for i in range(8): if pieces[i] == "r": castling += reprFile[i] # FEN pieces = "".join(pieces) return "{}/pppppppp/8/8/8/8/PPPPPPPP/{} w {}{} - 0 1".format( pieces, pieces.upper(), castling.upper(), castling ) def shuffle_start(self): return self.getFrcFen(randrange(1, 960)) if __name__ == "__main__": frcBoard = FischerandomBoard(True) for i in range(10): print(frcBoard.shuffle_start()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/giveaway.py0000644000175100001770000000124714614030313021000 0ustar00runnerdocker""" Giveaway Variant""" from pychess.Utils.const import GIVEAWAYCHESS from .suicide import SuicideBoard class GiveawayBoard(SuicideBoard): """:Description: This is the international version of Losing chess used on ICC as Giveaway and on Lichess as Antichess You must capture if you can, and the object is to lose all your pieces or to have no moves left. But in Giveaway, the king is just like any other piece. It can move into check and be captured, and you can even promote pawns to kings. """ variant = GIVEAWAYCHESS __desc__ = _("ICC giveaway: https://www.chessclub.com/user/help/Giveaway") name = _("Giveaway") cecp_name = "giveaway" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/horde.py0000644000175100001770000000214614614030313020264 0ustar00runnerdocker""" Horde Variant""" from pychess.Utils.const import HORDECHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board HORDESTART = ( "rnbqkbnr/pppppppp/8/1PP2PP1/PPPPPPPP/PPPPPPPP/PPPPPPPP/PPPPPPPP w kq - 0 1" ) class HordeBoard(Board): """:Description: Lichess horde: https://lichess.org/variant/horde""" variant = HORDECHESS __desc__ = _( "Black have to capture all white pieces to win.\n" + "White wants to checkmate as usual.\n" + "White pawns on the first rank may move two squares,\n" + "similar to pawns on the second rank." ) name = _("Horde") cecp_name = "horde" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD FILES = 8 # We need additional holdings for captured white horde... HOLDING_FILES = ((FILES + 3, FILES + 2, FILES + 1), (-6, -5, -4, -3, -2)) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=HORDESTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/kingofthehill.py0000644000175100001770000000200214614030313022001 0ustar00runnerdocker""" The King of the Hill Variation""" from pychess.Utils.const import ( KINGOFTHEHILLCHESS, VARIANTS_OTHER_NONSTANDARD, D4, D5, E4, E5, ) from pychess.Utils.Board import Board class KingOfTheHillBoard(Board): """:Description: The King of the hill variation is where the object of the game is to try and manoeuvre to the centre of the board. The gmae is won when one player manages to get there king to any of the 4 centre square ie d4, d5, e4, e5 """ variant = KINGOFTHEHILLCHESS __desc__ = _( "Bringing your king legally to the center (e4, d4, e5, d5) instantly wins the game!\n" + "Normal rules apply in other cases and checkmate also ends the game." ) name = _("King of the hill") cecp_name = "kingofthehill" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def testKingInCenter(board): """Test for a winning position""" return board.kings[board.color - 1] in (E4, E5, D4, D5) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/knightodds.py0000755000175100001770000000151614614030313021324 0ustar00runnerdocker""" Knightodds variant """ from pychess.Utils.const import KNIGHTODDSCHESS, VARIANTS_ODDS from pychess.Utils.Board import Board KNIGHTODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/R1BQKBNR w KQkq - 0 1" class KnightOddsBoard(Board): """:Description: Knight Odds variant plays with the same rules as normal chess but one side start the game with a knight missing """ variant = KNIGHTODDSCHESS __desc__ = _("One player starts with one less knight piece") name = _("Knight odds") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=KNIGHTODDSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/lightbrigade.py0000644000175100001770000000164214614030313021610 0ustar00runnerdocker""" Light Brigade Chess Variant """ from pychess.Utils.const import ( QUEEN_PROMOTION, KNIGHT_PROMOTION, LIGHTBRIGADECHESS, VARIANTS_OTHER_NONSTANDARD, ) from pychess.Utils.Board import Board LIGHTBRIGADESTART = "nnnnknnn/pppppppp/8/8/8/8/PPPPPPPP/1Q1QK1Q1 w - - 0 1" class LightbrigadeBoard(Board): variant = LIGHTBRIGADECHESS __desc__ = _( "Variant explained at https://www.chessvariants.com/rules/charge-of-the-light-brigade" ) name = _("Charge of the light brigade") cecp_name = "light-brigade" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD PROMOTIONS = (QUEEN_PROMOTION, KNIGHT_PROMOTION) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=LIGHTBRIGADESTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/losers.py0000755000175100001770000000151514614030313020474 0ustar00runnerdocker""" Losers Variant""" from pychess.Utils.const import LOSERSCHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board class LosersBoard(Board): """:Description: The Losers variant is a game where the concept is to get rid of all your pieces before you opponent does. On a players turn if a piece can be taken it must be taken otherwise a normal chess move can be played """ variant = LOSERSCHESS __desc__ = _( "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" ) name = _("Losers") cecp_name = "losers" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def testKingOnly(board): """Checks to see if if a winning position has been acheived""" return bin(board.friends[board.color]).count("1") == 1 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/normal.py0000755000175100001770000000052314614030313020453 0ustar00runnerdocker""" Standard Chess game""" from pychess.Utils.Board import Board class NormalBoard(Board): """:Description: A standard chess game board setup""" __desc__ = _("Classic chess rules\n" + "http://en.wikipedia.org/wiki/Chess") name = _("Normal") cecp_name = "normal" need_initial_board = False standard_rules = True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/pawnodds.py0000755000175100001770000000146114614030313021004 0ustar00runnerdocker""" Pawn Odds Variant""" from pychess.Utils.const import PAWNODDSCHESS, VARIANTS_ODDS from pychess.Utils.Board import Board PAWNODDSSTART = "rnbqkbnr/ppppp1pp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" class PawnOddsBoard(Board): """:Description: A standard chess game where one side starts with one less pawn, this is known as giving pawn odds """ variant = PAWNODDSCHESS __desc__ = _("One player starts with one less pawn piece") name = _("Pawn odds") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=PAWNODDSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/pawnspassed.py0000755000175100001770000000175314614030313021521 0ustar00runnerdocker""" Pawns Passed Chess """ from pychess.Utils.const import PAWNSPASSEDCHESS, VARIANTS_OTHER from pychess.Utils.Board import Board PAWNSPASSEDSTART = "rnbqkbnr/8/8/PPPPPPPP/pppppppp/8/8/RNBQKBNR w - - 0 1" class PawnsPassedBoard(Board): """:Description: Standard chess game rules, but where the board setup is defined as all the white pawns start on the 5th rank and all the black pawns start on the 4th rank """ variant = PAWNSPASSEDCHESS __desc__ = _( "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "White pawns start on 5th rank and black pawns on the 4th rank" ) name = _("Pawns Passed") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=PAWNSPASSEDSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/pawnspushed.py0000755000175100001770000000172514614030313021531 0ustar00runnerdocker"""Pawns Pushed Chess""" from pychess.Utils.const import PAWNSPUSHEDCHESS, VARIANTS_OTHER from pychess.Utils.Board import Board PAWNSPUSHEDSTART = "rnbqkbnr/8/8/pppppppp/PPPPPPPP/8/8/RNBQKBNR w - - 0 1" class PawnsPushedBoard(Board): """:Description: Standard chess rules but the start setup position is all the white pawns start on the 4th rank and all the black pawns start on the 5th rank """ variant = PAWNSPUSHEDCHESS __desc__ = _( "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "Pawns start on 4th and 5th ranks rather than 2nd and 7th" ) name = _("Pawns Pushed") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=PAWNSPUSHEDSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/placement.py0000644000175100001770000000157214614030313021135 0ustar00runnerdockerfrom pychess.Utils.const import PLACEMENTCHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board # Placement chess (Bronstein/Benko/Pre-chess) # http://www.quantumgambitz.com/blog/chess/cga/bronstein-chess-pre-chess-shuffle-chess PLACEMENTSTART = "8/pppppppp/8/8/8/8/PPPPPPPP/8/nnbbrrqkNNBBRRQK w - - 0 1" class PlacementBoard(Board): variant = PLACEMENTCHESS __desc__ = _( "Pre-chess: https://en.wikipedia.org/wiki/List_of_chess_variants#Different_starting_position" ) name = _("Placement") cecp_name = "placement" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=PLACEMENTSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/queenodds.py0000755000175100001770000000140614614030313021153 0ustar00runnerdocker""" Queen Odds Variant""" from pychess.Utils.const import QUEENODDSCHESS, VARIANTS_ODDS from pychess.Utils.Board import Board QUEENODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNB1KBNR w KQkq - 0 1" class QueenOddsBoard(Board): """:Description: Standard chess rules but one side starts without a queen""" variant = QUEENODDSCHESS __desc__ = _("One player starts with one less queen piece") name = _("Queen odds") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=QUEENODDSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/racingkings.py0000644000175100001770000000346414614030313021466 0ustar00runnerdocker""" The Racing Kings Variation""" from pychess.Utils.const import ( RACINGKINGSCHESS, VARIANTS_OTHER_NONSTANDARD, A8, B8, C8, D8, E8, F8, G8, H8, ) from pychess.Utils.Board import Board RACINGKINGSSTART = "8/8/8/8/8/8/krbnNBRK/qrbnNBRQ w - - 0 1" RANK8 = (A8, B8, C8, D8, E8, F8, G8, H8) class RacingKingsBoard(Board): """:Description: The Racing Kings variation is where the object of the game is to bring your king to the eight row. """ variant = RACINGKINGSCHESS __desc__ = _( "In this game, check is entirely forbidden: not only is it forbidden\n" + "to move ones king into check, but it is also forbidden to check the opponents king.\n" + "The purpose of the game is to be the first player that moves his king to the eight row.\n" + "When white moves their king to the eight row, and black moves directly after that also\n" + "their king to the last row, the game is a draw\n" + "(this rule is to compensate for the advantage of white that they may move first.)\n" + "Apart from the above, pieces move and capture precisely as in normal chess." ) name = _("Racing Kings") cecp_name = "racingkings" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=RACINGKINGSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def testKingInEightRow(board): """Test for a winning position""" return board.kings[board.color - 1] in RANK8 def test2KingInEightRow(board): """Test for a winning position""" return board.kings[board.color] in RANK8 and board.kings[board.color - 1] in RANK8 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/randomchess.py0000755000175100001770000000303114614030313021466 0ustar00runnerdocker""" Random Chess """ import random from pychess.Utils.const import RANDOMCHESS, VARIANTS_SHUFFLE from pychess.Utils.Board import Board class RandomBoard(Board): """:Description: * Randomly chosen pieces (two queens or three rooks possible) * Exactly one king of each color * Pieces placed randomly behind the pawns * No castling * Black's arrangement mirrors white's """ variant = RANDOMCHESS __desc__ = _( "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Randomly chosen pieces (two queens or three rooks possible)\n" + "* Exactly one king of each color\n" + "* Pieces placed randomly behind the pawns\n" + "* No castling\n" + "* Black's arrangement mirrors white's" ) name = _("Random") cecp_name = "wild/3" need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.random_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def random_start(self): back_rank = random.sample(("r", "n", "b", "q") * 16, 7) back_rank.append("k") random.shuffle(back_rank) fen = "".join(back_rank) fen = fen + "/pppppppp/8/8/8/8/PPPPPPPP/" + fen.upper() + " w - - 0 1" return fen if __name__ == "__main__": Board = RandomBoard(True) for i in range(10): print(Board.random_start()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/rookodds.py0000755000175100001770000000140714614030313021011 0ustar00runnerdocker""" Rook Odds Variant""" from pychess.Utils.const import ROOKODDSCHESS, VARIANTS_ODDS from pychess.Utils.Board import Board ROOKODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/1NBQKBNR w Kkq - 0 1" class RookOddsBoard(Board): """:Description: Standard chess rules apply, but one side starts with one less rook""" variant = ROOKODDSCHESS __desc__ = _("One player starts with one less rook piece") name = _("Rook odds") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=ROOKODDSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/seirawan.py0000644000175100001770000000177714614030313021005 0ustar00runnerdocker# S-Chess from pychess.Utils.const import ( SCHESS, VARIANTS_OTHER_NONSTANDARD, KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, HAWK_PROMOTION, ELEPHANT_PROMOTION, ) from pychess.Utils.Board import Board SCHESSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[heHE] w KQBCDFGkqbcdfg - 0 1" class SchessBoard(Board): variant = SCHESS __desc__ = _("S-Chess: https://en.wikipedia.org/wiki/Seirawan_chess") name = _("S-Chess") cecp_name = "seirawan" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD PROMOTIONS = ( KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, HAWK_PROMOTION, ELEPHANT_PROMOTION, ) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=SCHESSSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/setupposition.py0000755000175100001770000000630714614030313022116 0ustar00runnerdockerfrom pychess.Utils.const import SETUPCHESS, VARIANTS_OTHER, BLACK, reprSign from pychess.Utils.Board import Board from pychess.Utils.Piece import Piece from pychess.Utils.lutils.LBoard import LBoard SETUPSTART = "4k3/8/8/8/8/8/8/4K3[prnsqkPRNSQK] w - - 0 1" HOLDINGS = "[prnsqkPRNSQK]" class SetupBoard(Board): variant = SETUPCHESS __desc__ = "" name = "" cecp_name = "" standard_rules = False variant_group = VARIANTS_OTHER PROMOTION_ZONE = ((), ()) PROMOTIONS = () def __init__(self, setup=True, lboard=None): if setup is True: fenstr = SETUPSTART elif isinstance(setup, str): fenstr = setup # add all kind of pieces to holdings parts = fenstr.split() if parts[0].endswith("]"): placement, holdings = parts[0].split("[") for piece in HOLDINGS: if piece not in holdings: parts[0] = placement + HOLDINGS fenstr = " ".join(parts) break else: parts[0] += HOLDINGS fenstr = " ".join(parts) if lboard is not None: Board.__init__(self, setup=fenstr, lboard=lboard) else: Board.__init__(self, setup=fenstr) self._ply = 0 def _get_ply(self): return self._ply ply = property(_get_ply) def simulateMove(self, board, move): moved = [] new = [] dead = [] cord0, cord1 = move.cord0, move.cord1 if cord1.x < 0 or cord1.x > self.FILES - 1: dead.append(self[cord0]) else: moved.append((self[cord0], cord0)) return moved, new, dead def move(self, move, color): new_board = self.clone() new_board._ply = self._ply + 1 cord0, cord1 = move.cord0, move.cord1 if cord0.x < 0 or cord0.x > self.FILES - 1 and (cord1.x >= 0 and cord1.x <= 7): new_board[cord1] = new_board[cord0] new_board[cord0] = Piece(color, self[cord0].sign) elif cord1.x < 0 or cord1.x > self.FILES - 1: new_board[cord0] = None else: new_board[cord1] = new_board[cord0] new_board[cord0] = None return new_board def as_fen(self, variant): fenstr = [] for r, row in enumerate(reversed(self.data)): empty = 0 for i in range(0, 8): piece = row.get(i) if piece is not None: if empty > 0: fenstr.append(str(empty)) empty = 0 sign = reprSign[piece.piece] if piece.color == BLACK: sign = sign.lower() else: sign = sign.upper() fenstr.append(sign) else: empty += 1 if empty > 0: fenstr.append(str(empty)) if r != 7: fenstr.append("/") board = LBoard(variant) board.applyFen("".join(fenstr) + " w") return board.asFen().split()[0] def __repr__(self): return self.as_fen() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/shuffle.py0000755000175100001770000000263214614030313020622 0ustar00runnerdocker""" Shuffle Variant""" import random from pychess.Utils.const import SHUFFLECHESS, VARIANTS_SHUFFLE from pychess.Utils.Board import Board class ShuffleBoard(Board): """:Description: The shuffle variant uses the standard chess rules with the exception no castling is allowed and the back rank is shuffled around """ variant = SHUFFLECHESS __desc__ = _( "xboard nocastle: http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n" + "FICS wild/2: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Random arrangement of the pieces behind the pawns\n" + "* No castling\n" + "* Black's arrangement mirrors white's" ) name = _("Shuffle") cecp_name = "nocastle" need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.shuffle_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def shuffle_start(self): back_rank = ["r", "n", "b", "q", "k", "b", "n", "r"] random.shuffle(back_rank) fen = "".join(back_rank) fen = fen + "/pppppppp/8/8/8/8/PPPPPPPP/" + fen.upper() + " w - - 0 1" return fen if __name__ == "__main__": Board = ShuffleBoard(True) for i in range(10): print(Board.shuffle_start()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/suicide.py0000755000175100001770000000564714614030313020624 0ustar00runnerdocker""" Suicide Variation""" from pychess.Utils.const import ( SUICIDECHESS, VARIANTS_OTHER_NONSTANDARD, KING_PROMOTION, QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION, ) from pychess.Utils.Board import Board SUICIDESTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w - - 0 1" class SuicideBoard(Board): """:Description: This is the FICS version of Losing chess used on FICS as suicide chess. You must capture if you can, and the object is to lose all your pieces or to have no moves left. But in Suicide, the king is just like any other piece. It can move into check and be captured, and you can even promote pawns to kings. """ variant = SUICIDECHESS __desc__ = _( "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" ) name = _("Suicide") cecp_name = "suicide" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD PROMOTIONS = ( KING_PROMOTION, QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION, ) def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=SUICIDESTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def pieceCount(board, color): return bin(board.friends[color]).count("1") if __name__ == "__main__": from pychess.Utils.Move import Move from pychess.Utils.lutils.lmove import parseAN from pychess.Utils.lutils.lmovegen import genCaptures FEN = "rnbqk1nr/pppp1pPp/4p3/8/8/8/PPPbPPP1/RNBQKBNR b - - 7 4" game = SuicideBoard(SUICIDESTART) game = game.move(Move(parseAN(game.board, "h2h4"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "e7e6"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "h4h5"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "f8b4"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "h5h6"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "b4d2"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "h6g7"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) game = game.move(Move(parseAN(game.board, "d2e1"))) print(game.board.__repr__()) for move in genCaptures(game.board): print(Move(move)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/theban.py0000644000175100001770000000133314614030313020421 0ustar00runnerdocker""" Theban Chess Variant """ from pychess.Utils.const import THEBANCHESS, VARIANTS_OTHER from pychess.Utils.Board import Board THEBANSTART = "1p6/2p3kn/3p2pp/4pppp/5ppp/8/PPPPPPPP/PPPPPPKN w - - 0 1" class ThebanBoard(Board): variant = THEBANCHESS __desc__ = _( "Variant developed by Kai Laskos: http://talkchess.com/forum/viewtopic.php?t=40990" ) name = _("Theban") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=THEBANSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/threecheck.py0000644000175100001770000000207114614030313021265 0ustar00runnerdocker""" Three-check Chess Variant """ from pychess.Utils.const import THREECHECKCHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board THREECHECKSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 3+3 0 1" class ThreeCheckBoard(Board): variant = THREECHECKCHESS __desc__ = _("Win by giving check 3 times") name = _("Three-check") cecp_name = "3check" need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=THREECHECKSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def checkCount(board, color): lboard = board.clone() if color != board.color and lboard.hist_move: lboard.popMove() cc = 3 - board.remaining_checks[board.color] while lboard.hist_move: if lboard.isChecked(): cc += 1 lboard.popMove() if lboard.hist_move: lboard.popMove() return cc ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/upsidedown.py0000755000175100001770000000161314614030313021345 0ustar00runnerdocker""" Upside-down Chess variant""" from pychess.Utils.const import UPSIDEDOWNCHESS, VARIANTS_OTHER from pychess.Utils.Board import Board UPSIDEDOWNSTART = "RNBQKBNR/PPPPPPPP/8/8/8/8/pppppppp/rnbqkbnr w - - 0 1" class UpsideDownBoard(Board): variant = UPSIDEDOWNCHESS __desc__ = _( "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "http://en.wikipedia.org/wiki/Chess_variant#Chess_with_different_starting_positions\n" + "Pawns start on their 7th rank rather than their 2nd rank!" ) name = _("Upside Down") cecp_name = "normal" need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=UPSIDEDOWNSTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/wildcastle.py0000644000175100001770000000227014614030313021314 0ustar00runnerdocker""" Wildcastle Chess variant """ from pychess.Utils.const import WILDCASTLECHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board WILDCASTLESTART = "rnbkqbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" class WildcastleBoard(Board): variant = WILDCASTLECHESS __desc__ = _( "xboard wildcastle http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n" + "FICS wild/0: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* White has the typical set-up at the start.\n" + "* Black's pieces are the same, except that the King and Queen are reversed,\n" + "* so they are not on the same files as White's King and Queen.\n" + "* Castling is done similarly to normal chess:\n" + "* o-o-o indicates long castling and o-o short castling." ) name = _("Wildcastle") cecp_name = "wildcastle" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=WILDCASTLESTART, lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/Variants/wildcastleshuffle.py0000644000175100001770000000475214614030313022700 0ustar00runnerdocker""" Wildcastle shuffle Chess """ import random from pychess.Utils.const import WILDCASTLESHUFFLECHESS, VARIANTS_OTHER_NONSTANDARD from pychess.Utils.Board import Board class WildcastleShuffleBoard(Board): variant = WILDCASTLESHUFFLECHESS __desc__ = _( "xboard wildcastle http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n" + "FICS wild/1: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* In this variant both sides have the same set of pieces as in normal chess.\n" + "* The white king starts on d1 or e1 and the black king starts on d8 or e8,\n" + "* and the rooks are in their usual positions.\n" + "* Bishops are always on opposite colors.\n" + "* Subject to these constraints the position of the \ pieces on their first ranks is random.\n" + "* Castling is done similarly to normal chess:\n" + "* o-o-o indicates long castling and o-o short castling." ) name = _("Wildcastle shuffle") cecp_name = "wildcastle" need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER_NONSTANDARD def __init__(self, setup=False, lboard=None): if setup is True: Board.__init__(self, setup=self.shuffle_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def shuffle_start(self): def get_shuffle(): positions = [2, 3, 4, 5, 6, 7] back_rank = ["r"] + ([""] * 6) + ["r"] king = random.choice((4, 5)) back_rank[king - 1] = "k" positions.remove(king) bishop = random.choice(positions) back_rank[bishop - 1] = "b" positions.remove(bishop) color = bishop % 2 bishop = random.choice([i for i in positions if i % 2 != color]) back_rank[bishop - 1] = "b" positions.remove(bishop) queen = random.choice(positions) back_rank[queen - 1] = "q" positions.remove(queen) knight = random.choice(positions) back_rank[knight - 1] = "n" positions.remove(knight) knight = random.choice(positions) back_rank[knight - 1] = "n" positions.remove(knight) return "".join(back_rank) fen = ( get_shuffle() + "/pppppppp/8/8/8/8/PPPPPPPP/" + get_shuffle().upper() + " w KQkq - 0 1" ) return fen ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/__init__.py0000755000175100001770000000015314614030313017132 0ustar00runnerdockerimport sysconfig MSYS2 = "mingw" in sysconfig.get_platform() VERSION = "1.0.5" VERSION_NAME = "Steinitz" ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.897477 pychess-1.0.5/lib/pychess/external/0000755000175100001770000000000014614030425016645 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/external/__init__.py0000644000175100001770000000000014614030313020740 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/external/chess_db.py0000644000175100001770000000705414614030313020773 0ustar00runnerdockerimport json import os import re import pexpect from pexpect.popen_spawn import PopenSpawn from pychess.Players.ProtocolEngine import TIME_OUT_SECOND PGN_HEADERS_REGEX = re.compile(r"\[([A-Za-z0-9_]+)\s+\"(.*)\"\]") class Parser: def __init__(self, engine=""): if not engine: engine = "./parser" self.p = PopenSpawn(engine, timeout=TIME_OUT_SECOND, encoding="utf-8") self.pgn = "" self.db = "" def wait_ready(self): self.p.sendline("isready") self.p.expect("readyok") def open(self, pgn, full=True): """Open a PGN file and create an index if not exsisting""" if not os.path.isfile(pgn): raise NameError(f"File {pgn} does not exsist") pgn = os.path.normcase(pgn) self.pgn = pgn self.db = os.path.splitext(pgn)[0] + ".bin" if not os.path.isfile(self.db): result = self.make(full) self.db = result["Book file"] def close(self): """Terminate chess_db. Not really needed: engine will terminate as soon as pipe is closed, i.e. when we exit.""" self.p.sendline("quit") self.p.expect(pexpect.EOF) self.pgn = "" self.db = "" def make(self, full=True): """Make an index out of a pgn file""" if not self.pgn: raise NameError("Unknown DB, first open a PGN file") cmd = "book " + self.pgn if full: cmd += " full" self.p.sendline(cmd) self.wait_ready() s = "{" + self.p.before.split("{")[1] s = s.replace("\\", r"\\") # Escape Windows's path delimiter result = json.loads(s) self.p.before = "" return result def find(self, fen, limit=10, skip=0): """Find all games with positions equal to fen""" if not self.db: raise NameError("Unknown DB, first open a PGN file") cmd = f"find {self.db} limit {limit} skip {skip} {fen}" self.p.sendline(cmd) self.wait_ready() result = json.loads(self.p.before) self.p.before = "" return result def get_games(self, list): """Retrieve the PGN games specified in the offset list""" if not self.pgn: raise NameError("Unknown DB, first open a PGN file") pgn = [] with open(self.pgn) as f: for ofs in list: f.seek(ofs) game = "" for line in f: if line.startswith('[Event "'): if game: break # Second one, start of next game else: game = line # First occurence elif game: game += line pgn.append(game.strip()) return pgn def get_header(self, pgn): """Return a dict with just header information out of a pgn game. The pgn tags are supposed to be consecutive""" header = {} for line in pgn.splitlines(): line = line.strip() if line.startswith("[") and line.endswith("]"): tag_match = PGN_HEADERS_REGEX.match(line) if tag_match: header[tag_match.group(1)] = tag_match.group(2) else: break return header def get_game_headers(self, list): """Return a list of headers out of a list of pgn games""" headers = [] for pgn in list: h = self.get_header(pgn) headers.append(h) return headers ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/external/scoutfish.py0000644000175100001770000001043114614030313021221 0ustar00runnerdockerimport json import os import re import pexpect from pexpect.popen_spawn import PopenSpawn from pychess.Players.ProtocolEngine import TIME_OUT_SECOND PGN_HEADERS_REGEX = re.compile(r"\[([A-Za-z0-9_]+)\s+\"(.*)\"\]") class Scoutfish: def __init__(self, engine=""): if not engine: engine = "./scoutfish" self.p = PopenSpawn(engine, timeout=TIME_OUT_SECOND, encoding="utf-8") self.wait_ready() self.pgn = "" self.db = "" def wait_ready(self): self.p.sendline("isready") self.p.expect("readyok") def open(self, pgn): """Open a PGN file and create an index if not exsisting""" if not os.path.isfile(pgn): raise NameError(f"File {pgn} does not exsist") pgn = os.path.normcase(pgn) self.pgn = pgn self.db = os.path.splitext(pgn)[0] + ".scout" if not os.path.isfile(self.db): result = self.make() self.db = result["DB file"] def close(self): """Terminate scoutfish. Not really needed: engine will terminate as soon as pipe is closed, i.e. when we exit.""" self.p.sendline("quit") self.p.expect(pexpect.EOF) self.pgn = "" self.db = "" def make(self): """Make an index out of a pgn file. Normally called by open()""" if not self.pgn: raise NameError("Unknown DB, first open a PGN file") cmd = "make " + self.pgn self.p.sendline(cmd) self.wait_ready() s = "{" + self.p.before.split("{")[1] s = s.replace("\\", r"\\") # Escape Windows's path delimiter result = json.loads(s) self.p.before = "" return result def setoption(self, name, value): """Set an option value, like threads number""" cmd = f"setoption name {name} value {value}" self.p.sendline(cmd) self.wait_ready() def scout(self, q): """Run query defined by 'q' dict. Result will be a dict too""" if not self.db: raise NameError("Unknown DB, first open a PGN file") j = json.dumps(q) cmd = f"scout {self.db} {j}" self.p.sendline(cmd) self.wait_ready() result = json.loads(self.p.before) self.p.before = "" return result def scout_raw(self, q): """Run query defined by 'q' dict. Result will be full output""" if not self.db: raise NameError("Unknown DB, first open a PGN file") j = json.dumps(q) cmd = f"scout {self.db} {j}" self.p.sendline(cmd) self.wait_ready() result = self.p.before self.p.before = "" return result def get_games(self, matches): """Retrieve the PGN games specified in the offset list. Games are added to each list item with a 'pgn' key""" if not self.pgn: raise NameError("Unknown DB, first open a PGN file") with open(self.pgn) as f: for match in matches: f.seek(match["ofs"]) game = "" for line in f: if line.startswith('[Event "'): if game: break # Second one, start of next game else: game = line # First occurence elif game: game += line match["pgn"] = game.strip() return matches def get_header(self, pgn): """Return a dict with just header information out of a pgn game. The pgn tags are supposed to be consecutive""" header = {} for line in pgn.splitlines(): line = line.strip() if line.startswith("[") and line.endswith("]"): tag_match = PGN_HEADERS_REGEX.match(line) if tag_match: header[tag_match.group(1)] = tag_match.group(2) else: break return header def get_game_headers(self, matches): """Return a list of headers out of a list of pgn games. It is defined to be compatible with the return value of get_games()""" headers = [] for match in matches: pgn = match["pgn"] h = self.get_header(pgn) headers.append(h) return headers ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.897477 pychess-1.0.5/lib/pychess/gfx/0000755000175100001770000000000014614030425015607 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/gfx/Pieces.py0000644000175100001770000000760114614030313017371 0ustar00runnerdockerimport sys import gi try: gi.require_version("Rsvg", "2.0") from gi.repository import Rsvg except Exception: print("Failed to import required gi module version") sys.exit(1) from pychess.Utils.const import ( BLACK, WHITE, KING, QUEEN, BISHOP, KNIGHT, ROOK, PAWN, reprSign, SITTUYINCHESS, HAWK, ELEPHANT, SCHESS, ) from pychess.System import conf from pychess.System.prefix import addDataPrefix piece_ord = {KING: 0, QUEEN: 1, ROOK: 2, BISHOP: 3, KNIGHT: 4, PAWN: 5} pnames = ("Pawn", "Knight", "Bishop", "Rook", "Queen", "King") size = 800.0 def drawPiece( piece, context, x, y, psize, allwhite=False, allpawns=False, asean=False, variant=None, ): """Rendering pieces using .svg chess figurines""" color = WHITE if allwhite else piece.color sign = PAWN if allpawns else piece.sign if variant is not None and variant == SITTUYINCHESS: image = sittuyin_svg_pieces[color][sign] w, h = image.props.width, image.props.height offset_x = 0 offset_y = 0 elif asean: image = makruk_svg_pieces[color][sign] w, h = image.props.width, image.props.height offset_x = 0 offset_y = 0 elif all_in_one: image = svg_pieces w, h = image.props.width / 6, image.props.height / 2 offset_x = piece_ord[sign] * psize offset_y = 0 if color == BLACK else psize else: if variant is not None and variant == SCHESS: image = schess_svg_pieces[color][sign] else: image = svg_pieces[color][sign] w, h = image.props.width, image.props.height offset_x = 0 offset_y = 0 context.save() context.rectangle(x, y, psize, psize) context.clip() context.translate(x - offset_x, y - offset_y) context.scale(1.0 * psize / w, 1.0 * psize / h) context.push_group() if asean: image.render_cairo(context) elif all_in_one: pieceid = "#{}{}".format("White" if color == 0 else "Black", pnames[sign - 1]) image.render_cairo_sub(context, id=pieceid) else: image.render_cairo(context) context.pop_group_to_source() context.paint_with_alpha(piece.opacity) context.restore() surfaceCache = {} pieces = (PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, HAWK, ELEPHANT) def get_svg_pieces(svgdir): """Load figurines from .svg files""" if all_in_one: rsvg_handles = Rsvg.Handle.new_from_file( addDataPrefix(f"pieces/{svgdir}/{svgdir}.svg") ) else: rsvg_handles = [[None] * 9, [None] * 9] for c, color in ((WHITE, "white"), (BLACK, "black")): for p in pieces: if p in (HAWK, ELEPHANT) and svgdir != "merida": continue rsvg_handles[c][p] = Rsvg.Handle.new_from_file( addDataPrefix( "pieces/{}/{}{}.svg".format( svgdir, color[0], reprSign[p].lower() ) ) ) return rsvg_handles all_in_one = None svg_pieces = None makruk_svg_pieces = get_svg_pieces("makruk") sittuyin_svg_pieces = get_svg_pieces("sittuyin") schess_svg_pieces = get_svg_pieces("merida") piece2char = None def set_piece_theme(piece_set): global all_in_one global svg_pieces global piece2char piece_set = piece_set.lower() if piece_set in ( "celtic", "eyes", "fantasy", "fantasy_alt", "freak", "prmi", "skulls", "spatial", ): all_in_one = True else: all_in_one = False try: svg_pieces = get_svg_pieces(piece_set) except Exception: print("Can't create piece set %s" % piece_set) all_in_one = False svg_pieces = get_svg_pieces("merida") set_piece_theme(conf.get("pieceTheme")) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/gfx/__init__.py0000755000175100001770000000000014614030313017705 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.897477 pychess-1.0.5/lib/pychess/ic/0000755000175100001770000000000014614030425015416 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/FICSConnection.py0000644000175100001770000005034114614030313020533 0ustar00runnerdockerimport asyncio import re import sys import socket import traceback from collections import defaultdict from concurrent.futures import CancelledError from gi.repository import GObject import pychess from pychess.System.Log import log from pychess import ic from pychess.Utils.const import ( NAME, FISCHERRANDOMCHESS, LOSERSCHESS, ATOMICCHESS, CRAZYHOUSECHESS, ) from .managers.SeekManager import SeekManager from .managers.FingerManager import FingerManager from .managers.NewsManager import NewsManager from .managers.BoardManager import BoardManager from .managers.OfferManager import OfferManager from .managers.ChatManager import ChatManager from .managers.ConsoleManager import ConsoleManager from .managers.HelperManager import HelperManager from .managers.ListAndVarManager import ListAndVarManager from .managers.AutoLogOutManager import AutoLogOutManager from .managers.ErrorManager import ErrorManager from .managers.AdjournManager import AdjournManager from .managers.ICCSeekManager import ICCSeekManager from .managers.ICCBoardManager import ICCBoardManager from .managers.ICCChatManager import ICCChatManager from .managers.ICCHelperManager import ICCHelperManager from .managers.ICCAdjournManager import ICCAdjournManager from .managers.ICCErrorManager import ICCErrorManager from .managers.ICCFingerManager import ICCFingerManager from .managers.ICCListAndVarManager import ICCListAndVarManager from .managers.ICCNewsManager import ICCNewsManager from .managers.ICCOfferManager import ICCOfferManager from .managers.ICCAutoLogOutManager import ICCAutoLogOutManager from .FICSObjects import FICSPlayers, FICSGames, FICSSeeks, FICSChallenges from .TimeSeal import CanceledException, ICSTelnet from .VerboseTelnet import ( LinePrediction, FromPlusPrediction, FromABPlusPrediction, FromToPrediction, PredictionsTelnet, NLinesPrediction, ) class LogOnException(Exception): pass class Connection(GObject.GObject): __gsignals__ = { "connecting": (GObject.SignalFlags.RUN_FIRST, None, ()), "connectingMsg": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "connected": (GObject.SignalFlags.RUN_FIRST, None, ()), "disconnected": (GObject.SignalFlags.RUN_FIRST, None, ()), "error": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, host, ports, timeseal, username, password): GObject.GObject.__init__(self) self.daemon = True self.host = host self.ports = ports self.username = username self.password = password self.timeseal = timeseal self.connected = False self.connecting = False self.keep_alive_task = None self.predictions = set() self.predictionsDict = {} self.reply_cmd_dict = defaultdict(list) # Are we connected to FatICS ? self.FatICS = False self.USCN = False self.ICC = False self.replay_dg_dict = {} self.replay_cn_dict = {} @property def ics_name(self): if self.FatICS: return "FatICS" elif self.USCN: return "USCN" elif self.ICC: return "ICC" else: return "FICS" def expect(self, prediction): self.predictions.add(prediction) self.predictionsDict[prediction.callback] = prediction if hasattr(prediction.callback, "BLKCMD"): predictions = self.reply_cmd_dict[prediction.callback.BLKCMD] predictions.append(prediction) # Do reverse sorted so we can later test the longest predictions first. # This is so that matching prefers the longest match for matches # that start out with the same regexp line(s) self.reply_cmd_dict[prediction.callback.BLKCMD] = sorted( predictions, key=len, reverse=True ) def unexpect(self, callback): self.predictions.remove(self.predictionsDict.pop(callback)) if hasattr(callback, "BLKCMD"): for prediction in self.reply_cmd_dict[callback.BLKCMD]: if prediction.callback == callback: self.reply_cmd_dict[callback.BLKCMD].remove(prediction) if len(self.reply_cmd_dict[callback.BLKCMD]) == 0: del self.reply_cmd_dict[callback.BLKCMD] def expect_dg_line(self, number, callback): self.replay_dg_dict[number] = callback def expect_cn_line(self, number, callback): self.replay_cn_dict[number] = callback def expect_line(self, callback, regexp): self.expect(LinePrediction(callback, regexp)) def expect_n_lines(self, callback, *regexps): self.expect(NLinesPrediction(callback, *regexps)) def expect_fromplus(self, callback, regexp0, regexp1): self.expect(FromPlusPrediction(callback, regexp0, regexp1)) def expect_fromABplus(self, callback, regexp0, regexp1, regexp2): self.expect(FromABPlusPrediction(callback, regexp0, regexp1, regexp2)) def expect_fromto(self, callback, regexp0, regexp1): self.expect(FromToPrediction(callback, regexp0, regexp1)) def cancel(self): raise NotImplementedError() def close(self): raise NotImplementedError() def getUsername(self): return self.username def isRegistred(self): return self.password is not None and self.password != "" def isConnected(self): return self.connected def isConnecting(self): return self.connecting EOF = _('The connection was broken - got "end of file" message') NOTREG = _("'%s' is not a registered name") BADPAS = _( "The entered password was invalid.\n" + "If you forgot your password, go to " + '' + "http://www.freechess.org/password to request a new one over email." ) ALREADYIN = _("Sorry '%s' is already logged in") REGISTERED = _("'%s' is a registered name. If it is yours, type the password.") PREVENTED = _( "Due to abuse problems, guest connections have been prevented.\n" + "You can still register on http://www.freechess.org" ) TOOSHORT = _("A name should be at least three characters long!") LETTERSONLY = _("Sorry, names can only consist of lower and upper case letters.") class FICSConnection(Connection): def __init__(self, host, ports, timeseal, username="guest", password=""): Connection.__init__(self, host, ports, timeseal, username, password) def _post_connect_hook(self, lines): pass def _start_managers(self): pass async def _connect(self): self.connecting = True self.emit("connecting") try: self.emit("connectingMsg", _("Connecting to server")) for i, port in enumerate(self.ports): log.debug("Trying port %d" % port, extra={"task": (self.host, "raw")}) try: connected_event = asyncio.Event() self.client = ICSTelnet(self.timeseal) asyncio.create_task( self.client.start(self.host, port, connected_event) ) await connected_event.wait() except OSError as err: log.debug( "Failed to open port %d %s" % (port, err), extra={"task": (self.host, "raw")}, ) if i + 1 == len(self.ports): raise else: continue else: break await self.client.read_until("login: ") self.emit("connectingMsg", _("Logging on to server")) # login with registered handle if self.password: self.client.write(self.username) got = await self.client.read_until( "password:", "enter the server as", "Try again." ) if got == 0: self.client.sensitive = True self.client.write(self.password) # No such name elif got == 1: raise LogOnException(NOTREG % self.username) # Bad name elif got == 2: raise LogOnException(NOTREG % self.username) else: if self.username: self.client.write(self.username) else: self.client.write("guest") got = await self.client.read_until( "Press return", "You are connected as a guest", "If it is yours, type the password.", "A name should be at least three characters long!", "Sorry, names can only consist of lower and upper case letters.", "guest connections have been prevented", "nobody from your site may login without an account.", ) # got = 3 if got == 2: raise LogOnException(REGISTERED % self.username) elif got == 3: raise LogOnException(TOOSHORT) elif got == 4: raise LogOnException(LETTERSONLY) elif got == 5 or got == 6: raise LogOnException(PREVENTED) self.client.write("") while True: line = await self.client.readline() if "Invalid password" in line: raise LogOnException(BADPAS) elif "is already logged in" in line: raise LogOnException(ALREADYIN % self.username) match = re.search( r"\*\*\*\* Starting FICS session as (%s)%s \*\*\*\*" % (ic.NAMES_RE, ic.TITLES_RE), line, ) if match: self.username = match.groups()[0] break # USCN specific line match = re.search("Created temporary login '(%s)'" % ic.NAMES_RE, line) if match: self.username = match.groups()[0] break match = re.search("For a list of events, click here:", line) if match: break # ICC specific line match = re.search("help anonymous", line) if match: break match = re.search("This is the admin message of the day", line) if match: break self.emit("connectingMsg", _("Setting up environment")) lines = await self.client.readuntil(b"ics%") self._post_connect_hook(lines) self.FatICS = self.client.FatICS self.USCN = self.client.USCN self.ICC = self.client.ICC self.client.name = self.username self.client = PredictionsTelnet( self.client, self.predictions, self.reply_cmd_dict, self.replay_dg_dict, self.replay_cn_dict, ) self.client.lines.line_prefix = "aics%" if self.ICC else "fics%" if not self.USCN and not self.ICC: self.client.run_command("iset block 1") self.client.lines.block_mode = True if self.ICC: self.client.run_command("set level1 5") self.client.run_command("set prompt 0") self.client.lines.datagram_mode = True ic.GAME_TYPES_BY_SHORT_FICS_NAME["B"] = ic.GAME_TYPES["bullet"] ic.VARIANT_GAME_TYPES[ATOMICCHESS] = ic.GAME_TYPES["w27"] ic.VARIANT_GAME_TYPES[CRAZYHOUSECHESS] = ic.GAME_TYPES["w23"] ic.VARIANT_GAME_TYPES[LOSERSCHESS] = ic.GAME_TYPES["w17"] ic.VARIANT_GAME_TYPES[FISCHERRANDOMCHESS] = ic.GAME_TYPES["w22"] else: ic.GAME_TYPES_BY_SHORT_FICS_NAME["B"] = ic.GAME_TYPES["bughouse"] ic.VARIANT_GAME_TYPES[ATOMICCHESS] = ic.GAME_TYPES["atomic"] ic.VARIANT_GAME_TYPES[CRAZYHOUSECHESS] = ic.GAME_TYPES["crazyhouse"] ic.VARIANT_GAME_TYPES[LOSERSCHESS] = ic.GAME_TYPES["losers"] ic.VARIANT_GAME_TYPES[FISCHERRANDOMCHESS] = ic.GAME_TYPES["wild/fr"] self.client.run_command("iset defprompt 1") self.client.run_command("iset ms 1") self._start_managers(lines) self.connecting = False self.connected = True self.emit("connected") async def keep_alive(): while self.isConnected(): self.client.run_command("date") await asyncio.sleep(30 * 60) self.keep_alive_task = asyncio.create_task(keep_alive()) except CanceledException as err: log.info( "FICSConnection._connect: %s" % repr(err), extra={"task": (self.host, "raw")}, ) finally: self.connecting = False async def start(self): try: if not self.isConnected(): await self._connect() while self.isConnected(): await self.client.parse() except CancelledError: pass except Exception as err: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback) log.info( "FICSConnection.run: %s" % repr(err), extra={"task": (self.host, "raw")} ) self.close() if isinstance( err, ( IOError, LogOnException, EOFError, socket.error, socket.gaierror, socket.herror, ), ): self.emit("error", err) else: raise finally: if isinstance(self, FICSMainConnection): self.emit("disconnected") def cancel(self): self.close() if hasattr(self, "client"): self.client.cancel() def close(self): self.connected = False if hasattr(self, "client"): self.client.close() if self.keep_alive_task is not None: self.keep_alive_task.cancel() class FICSMainConnection(FICSConnection): def __init__(self, host, ports, timeseal, username="guest", password=""): FICSConnection.__init__(self, host, ports, timeseal, username, password) self.lvm = None self.notify_users = [] self.ini_messages = [] self.players = FICSPlayers(self) self.games = FICSGames(self) self.seeks = FICSSeeks(self) self.challenges = FICSChallenges(self) self.archived_examine = None self.examined_game = None self.stored_owner = self.username self.history_owner = self.username self.journal_owner = self.username self.set_user_vars = False def close(self): if isinstance(self.client, PredictionsTelnet) and self.set_user_vars: self.client.run_command("set open 0") self.client.run_command("set gin 0") self.client.run_command("set availinfo 0") try: self.lvm.stop() except AttributeError: pass except Exception as err: if not isinstance( err, ( IOError, LogOnException, EOFError, socket.error, socket.gaierror, socket.herror, ), ): raise finally: FICSConnection.close(self) def _post_connect_hook(self, lines): self.ini_messages = lines.splitlines() notify_users = re.search( r"Present company includes: ((?:%s ?)+)\." % ic.NAMES_RE, lines ) if notify_users: self.notify_users.extend(notify_users.groups()[0].split()) def _start_managers(self, lines): self.client.run_command(f"set interface {NAME} {pychess.VERSION}") # FIXME: Some managers use each other to avoid regexp collapse. To # avoid having to init the in a specific order, connect calls should # be moved to a "start" function, so all managers would be in # the connection object when they are called if self.ICC: self.lvm = ICCListAndVarManager(self) self.em = ICCErrorManager(self) self.glm = ICCSeekManager(self) self.bm = ICCBoardManager(self) self.cm = ICCChatManager(self) self.adm = ICCAdjournManager(self) self.fm = ICCFingerManager(self) self.nm = ICCNewsManager(self) self.om = ICCOfferManager(self) self.alm = ICCAutoLogOutManager(self) else: self.lvm = ListAndVarManager(self) self.em = ErrorManager(self) self.glm = SeekManager(self) self.bm = BoardManager(self) self.cm = ChatManager(self) self.adm = AdjournManager(self) self.fm = FingerManager(self) self.nm = NewsManager(self) self.om = OfferManager(self) self.alm = AutoLogOutManager(self) self.com = ConsoleManager(self) self.bm.start() self.players.start() self.games.start() self.seeks.start() self.challenges.start() # This block may useful if one wants to create # unit test lines from real life fics output if False: self.client.run_command("set seek 0") self.client.run_command("set shout 0") self.client.run_command("set cshout 0") self.client.run_command("iset seekinfo 0") self.client.run_command("iset seekremove 0") self.client.run_command("iset showownseek 0") self.client.run_command("iset allresults 0") self.client.run_command("iset pin 0") self.client.run_command("set open 0") self.client.run_command("set gin 0") self.client.run_command("set availinfo 0") def start_helper_manager(self, set_user_vars): # if guest accounts disabled we will handle players in the main connection if self.FatICS or self.USCN or self.ICC: self.client.run_command("set pin 1") else: self.client.run_command("iset allresults 1") # ivar pin: http://www.freechess.org/Help/HelpFiles/new_features.html self.client.run_command("iset pin 1") self.set_user_vars = set_user_vars if self.set_user_vars: self.client.run_command("set open 1") self.client.run_command("set gin 1") self.client.run_command("set availinfo 1") if self.ICC: self.hm = ICCHelperManager(self, self) else: self.hm = HelperManager(self, self) # disable setting iveriables from console self.client.run_command("iset lock 1") class FICSHelperConnection(FICSConnection): def __init__(self, main_conn, host, ports, timeseal, username="guest", password=""): FICSConnection.__init__(self, host, ports, timeseal, username, password) self.main_conn = main_conn def _start_managers(self, lines): # The helper just wants only player and game notifications # set open 1 is a requirement for availinfo notifications self.client.run_command("set open 1") self.client.run_command("set seek 0") self.client.run_command("set shout 0") self.client.run_command("set cshout 0") self.client.run_command("set tell 0") self.client.run_command("set chanoff 1") self.client.run_command("set gin 1") self.client.run_command("set availinfo 1") if self.FatICS or self.USCN or self.ICC: self.client.run_command("set pin 1") else: self.client.run_command("iset allresults 1") # ivar pin: http://www.freechess.org/Help/HelpFiles/new_features.html self.client.run_command("iset pin 1") self.hm = HelperManager(self, self.main_conn) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/FICSObjects.py0000644000175100001770000012217614614030313020033 0ustar00runnerdockerimport asyncio import datetime from gi.repository import GLib, GObject from pychess.System.Log import log from pychess.Utils.IconLoader import load_icon, get_pixbuf from pychess.Utils.const import ADJOURNED, WHITE, BLACK, UNSUPPORTED from pychess.ic import ( RATING_TYPES, IC_STATUS_PLAYING, IC_STATUS_OFFLINE, IC_STATUS_UNKNOWN, IC_STATUS_AVAILABLE, IC_STATUS_IDLE, IC_STATUS_EXAMINING, IC_STATUS_NOT_AVAILABLE, IC_STATUS_BUSY, IC_STATUS_RUNNING_SIMUL_MATCH, IC_STATUS_IN_TOURNAMENT, TITLE_TYPE_DISPLAY_TEXTS, TITLE_TYPE_DISPLAY_TEXTS_SHORT, TYPE_BLITZ, TYPE_STANDARD, TYPE_ATOMIC, TYPE_LIGHTNING, TYPE_BUGHOUSE, TYPE_CRAZYHOUSE, TYPE_LOSERS, TYPE_SUICIDE, TYPE_WILD, GAME_TYPES_BY_RATING_TYPE, TYPE_UNREGISTERED, TYPE_COMPUTER, TYPE_ADMINISTRATOR, DEVIATION_NONE, DEVIATION_ESTIMATED, DEVIATION_PROVISIONAL, GAME_TYPES_BY_FICS_NAME, GAME_TYPES, TYPE_GRAND_MASTER, TYPE_INTERNATIONAL_MASTER, TYPE_FIDE_MASTER, TYPE_WOMAN_GRAND_MASTER, TYPE_WOMAN_INTERNATIONAL_MASTER, TYPE_WOMAN_FIDE_MASTER, ) class AlreadyExistException(Exception): pass def make_sensitive_if_available(button, player): if player.isAvailableForGame(): button.set_property("sensitive", True) button.set_property("tooltip-text", "") else: button.set_property("sensitive", False) button.set_property( "tooltip-text", _("%(player)s is %(status)s") % {"player": player.name, "status": player.display_status.lower()}, ) def make_sensitive_if_playing(button, player): status = player.display_status.lower() if player.status == IC_STATUS_PLAYING: button.set_property("sensitive", True) else: button.set_property("sensitive", False) if player.status != IC_STATUS_OFFLINE: status = _("not playing") button.set_property( "tooltip-text", _("%(player)s is %(status)s") % {"player": player.name, "status": status}, ) def get_player_tooltip_text(player, show_status=True): text = "%s" % player.name text += "%s" % player.display_titles(long=True) if player.blitz: text += "\n{}: {}".format(_("Blitz"), player.blitz) if player.standard: text += "\n{}: {}".format(_("Standard"), player.standard) if player.lightning: text += "\n{}: {}".format(_("Lightning"), player.lightning) if player.atomic: text += "\n{}: {}".format(_("Atomic"), player.atomic) if player.bughouse: text += "\n{}: {}".format(_("Bughouse"), player.bughouse) if player.crazyhouse: text += "\n{}: {}".format(_("Crazyhouse"), player.crazyhouse) if player.losers: text += "\n{}: {}".format(_("Losers"), player.losers) if player.suicide: text += "\n{}: {}".format(_("Suicide"), player.suicide) if player.wild: text += "\n{}: {}".format(_("Wild"), player.wild) if show_status: text += "\n%s" % player.display_status return text def player_id(name): """Two players are equal if the first 11 characters of their name match. This is to facilitate matching players from output of commands like the 'games' command which only return the first 11 characters of a player's name""" return name[0:11].lower() class FICSPlayer(GObject.GObject): __gsignals__ = { "ratings_changed": (GObject.SignalFlags.RUN_FIRST, None, (int, object)) } def __init__( self, name, online=False, status=IC_STATUS_UNKNOWN, game=None, titles=None ): assert isinstance(name, str), name assert isinstance(online, bool), online GObject.GObject.__init__(self) self.player_id = player_id(name) self.name = name self.online = online self._status = status self.status = status self.game = None self.adjournment = False self.ratings = [0 for ratingtype in RATING_TYPES] self.deviations = [DEVIATION_NONE for ratingtype in RATING_TYPES] if titles is None: self.titles = set() else: self.titles = titles def long_name(self, game_type=None): name = self.name if game_type: rating = self.getRatingByGameType(game_type) else: rating = self.getRatingForCurrentGame() if rating: name += " (%d)" % rating title = self.display_titles() if title: name += "%s" % title return name def get_online(self): return self._online def set_online(self, online): self._online = online online = GObject.property(get_online, set_online) @property def display_online(self): if self.online: return _("Online") else: return _("Offline") def get_status(self): return self._status def set_status(self, status): self._previous_status = self._status self._status = status status = GObject.property(get_status, set_status) def restore_previous_status(self): self.status = self._previous_status @property def display_status(self): if self.status == IC_STATUS_AVAILABLE: return _("Available") elif self.status == IC_STATUS_PLAYING: status = _("Playing") game = self.game if game is not None: status += " " + game.display_text return status elif self.status == IC_STATUS_IDLE: return _("Idle") elif self.status == IC_STATUS_OFFLINE: return _("Offline") elif self.status == IC_STATUS_EXAMINING: return _("Examining") elif self.status in (IC_STATUS_NOT_AVAILABLE, IC_STATUS_BUSY): return _("Not Available") elif self.status == IC_STATUS_RUNNING_SIMUL_MATCH: return _("Running Simul Match") elif self.status == IC_STATUS_IN_TOURNAMENT: return _("In Tournament") else: return "" def get_game(self): return self._game def set_game(self, game): if game is not None and not isinstance(game, FICSMatch): raise TypeError(type(game)) self._game = game game = GObject.property(get_game, set_game) def get_titles(self): return self._titles def set_titles(self, titles): self._titles = titles titles = GObject.property(get_titles, set_titles) def display_titles(self, long=False): title = "" for item in self.titles: if long: title += " (" + TITLE_TYPE_DISPLAY_TEXTS[item] + ")" else: title += " (" + TITLE_TYPE_DISPLAY_TEXTS_SHORT[item] + ")" return title @property def blitz(self): return self.ratings[TYPE_BLITZ] @property def standard(self): return self.ratings[TYPE_STANDARD] @property def lightning(self): return self.ratings[TYPE_LIGHTNING] @property def atomic(self): return self.ratings[TYPE_ATOMIC] @property def bughouse(self): return self.ratings[TYPE_BUGHOUSE] @property def crazyhouse(self): return self.ratings[TYPE_CRAZYHOUSE] @property def losers(self): return self.ratings[TYPE_LOSERS] @property def suicide(self): return self.ratings[TYPE_SUICIDE] @property def wild(self): return self.ratings[TYPE_WILD] def __eq__(self, player): if isinstance(self, type(player)) and self.player_id == player.player_id: return True else: return False def __hash__(self): return hash(self.player_id) def __repr__(self): rep = "name='%s'" % (self.name + self.display_titles()) rep += ", id=%s" % (id(self)) rep += ", online=%s" % repr(self.online) rep += ", adjournment=%s" % repr(self.adjournment) rep += ", status=%i" % self.status game = self.game if game is not None: rep += ", game.gameno=%d" % game.gameno rep += ", game.rated=%s" % game.rated rep += ", game.private=" + repr(game.private) else: rep += ", game=None" for rating_type in RATING_TYPES: if rating_type in self.ratings: rep += ", {}={}".format( GAME_TYPES_BY_RATING_TYPE[rating_type].display_text, repr(self.ratings[rating_type]), ) return "" def isAvailableForGame(self): if self.status in ( IC_STATUS_PLAYING, IC_STATUS_BUSY, IC_STATUS_OFFLINE, IC_STATUS_RUNNING_SIMUL_MATCH, IC_STATUS_NOT_AVAILABLE, IC_STATUS_EXAMINING, IC_STATUS_IN_TOURNAMENT, ): return False else: return True def isObservable(self): return self.status == IC_STATUS_EXAMINING or ( self.status == IC_STATUS_PLAYING and self.game is not None and not self.game.private and self.game.supported ) def isGuest(self): return TYPE_UNREGISTERED in self.titles def isComputer(self): return TYPE_COMPUTER in self.titles def isAdmin(self): return TYPE_ADMINISTRATOR in self.titles def isTitled(self): return ( (TYPE_GRAND_MASTER in self.titles) or (TYPE_INTERNATIONAL_MASTER in self.titles) or (TYPE_FIDE_MASTER in self.titles) or (TYPE_WOMAN_GRAND_MASTER in self.titles) or (TYPE_WOMAN_INTERNATIONAL_MASTER in self.titles) or (TYPE_WOMAN_FIDE_MASTER in self.titles) ) @classmethod def getIconByRating(cls, rating, size=16): assert isinstance(rating, int), "rating not an int: %s" % str(rating) if rating >= 1900: return get_pixbuf("glade/16x16/weather-storm.png") elif rating >= 1600: return get_pixbuf("glade/16x16/weather-showers.png") elif rating >= 1300: return get_pixbuf("glade/16x16/weather-overcast.png") elif rating >= 1000: return get_pixbuf("glade/16x16/weather-few-clouds.png") else: return get_pixbuf("glade/16x16/weather-clear.png") def getIcon(self, size=16, gametype=None): assert isinstance(size, int), "size not an int: %s" % str(size) if self.isGuest(): return load_icon(size, "stock_people", "system-users") elif self.isComputer(): return load_icon(size, "computer", "stock_notebook") elif self.isAdmin(): return load_icon(size, "security-high", "stock_book_blue") else: if gametype: rating = self.getRatingByGameType(gametype) else: rating = self.getStrength() return self.getIconByRating(rating, size) def getMarkup(self, gametype=None, big=True, long_titles=True): markup = "%s" % self.name if self.isGuest(): markup += self.display_titles(long=long_titles) else: if gametype: rating = self.getRatingByGameType(gametype) else: rating = self.getStrength() if rating < 1: rating = _("Unrated") markup += " (%s)" % rating if self.display_titles() != "": markup += self.display_titles(long=long_titles) if big: markup = "" + markup + "" return markup def getRatingMean(self): ratingtotal = 0 numratings = 0 for ratingtype in RATING_TYPES: try: if self.ratings[ratingtype] == 0: continue except IndexError: print(ratingtype, RATING_TYPES, self.ratings) continue if self.deviations[ratingtype] == DEVIATION_NONE: ratingtotal += self.ratings[ratingtype] * 3 numratings += 3 elif self.deviations[ratingtype] == DEVIATION_ESTIMATED: ratingtotal += self.ratings[ratingtype] * 2 numratings += 2 elif self.deviations[ratingtype] == DEVIATION_PROVISIONAL: ratingtotal += self.ratings[ratingtype] * 1 numratings += 1 return numratings > 0 and ratingtotal // numratings or 0 # FIXME: this isn't very accurate because of inflated standard ratings # and deflated lightning ratings and needs work # IDEA: use rank in addition to rating to determine strength def getStrength(self): if self.deviations[TYPE_BLITZ] == DEVIATION_NONE: return self.ratings[TYPE_BLITZ] elif self.deviations[TYPE_LIGHTNING] == DEVIATION_NONE: return self.ratings[TYPE_LIGHTNING] else: return self.getRatingMean() def getRatingByGameType(self, game_type): try: return self.ratings[game_type.rating_type] except KeyError: return 0 except IndexError: return 0 def getRatingForCurrentGame(self): try: return self.getRatingByGameType(self.game.game_type) except AttributeError: return 0 class FICSPlayers(GObject.GObject): __gsignals__ = { "FICSPlayerEntered": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSPlayerExited": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.players = {} self.players_cids = {} self.connection = connection def start(self): # self.connection.fm.connect("fingeringFinished", self.onFinger) pass def __getitem__(self, name): if not isinstance(name, str): raise TypeError("%s" % name) if name in self.players: return self.players[name] else: raise KeyError def __setitem__(self, key, value): """key must be str and value must be FICSPlayer object""" if not isinstance(key, str): raise TypeError if not isinstance(value, FICSPlayer): raise TypeError if value.player_id in self.players: raise AlreadyExistException self.players[value.player_id] = value self.players_cids[value.player_id] = value.connect( "notify::online", self.online_changed ) def __delitem__(self, name): if not isinstance(name, str): raise TypeError if name in self.players: player = self.players[name] if name in self.players_cids: if player.handler_is_connected(self.players_cids[name]): player.disconnect(self.players_cids[name]) del self.players_cids[name] del self.players[name] def __contains__(self, name): if not isinstance(name, str): raise TypeError if name in self.players: return True else: return False def keys(self): return self.players.keys() def items(self): return self.players.items() def values(self): return self.players.values() def online_changed(self, player, prop): if player.online: GLib.idle_add( self.emit, "FICSPlayerEntered", [ player, ], priority=GLib.PRIORITY_LOW, ) # This method is a temporary hack until ChatWindow/ChatManager are # converted to use FICSPlayer references rather than player's names def get_online_playernames(self): names = [] players = list(self.values()) for player in players: if player.online: names.append(player.name) return names def get(self, name): key = player_id(name) if key in self: player = self[key] else: player = FICSPlayer(name) try: self[key] = player except AlreadyExistException: player = self[key] return player def player_disconnected(self, name): # log.debug("%s" % player, # extra={"task": (self.connection.username, "player_disconnected")}) key = player_id(name) if key in self: player = self[key] player.online = False player.status = IC_STATUS_OFFLINE if ( not player.adjournment and player.name not in self.connection.notify_users ): del self[player.player_id] else: log.debug( "Not removing %s" % player, extra={"task": (self.connection.username, "player_disconnected")}, ) GLib.idle_add( self.emit, "FICSPlayerExited", player, priority=GLib.PRIORITY_LOW ) else: log.debug( "Not removing %s (it's not in FICSPlayers)" % name, extra={"task": (self.connection.username, "player_disconnected")}, ) # def onFinger (self, fm, finger): # player = player_id(finger.getName()) # if player in self: # self[player].finger = finger # # TODO: merge ratings and titles from finger object into ficsplayer object class FICSMatch(GObject.GObject): def __init__(self, minutes, inc, rated, game_type): assert minutes is None or isinstance(minutes, int), type(minutes) assert inc is None or isinstance(inc, int), inc assert isinstance(rated, bool), rated assert ( game_type is None or game_type is GAME_TYPES_BY_FICS_NAME["wild"] or game_type in GAME_TYPES.values() ), game_type GObject.GObject.__init__(self) self.minutes = minutes self.inc = inc self.rated = rated self.game_type = game_type def __repr__(self): text = f"{self.minutes} {self.inc}" text += " %s" % ("rated" if self.rated else "unrated") text += " %s" % self.game_type.display_text return text @property def display_rated(self): if self.rated: return _("Rated") else: return _("Unrated") @property def display_timecontrol(self): tim = "" if self.minutes is not None: tim = _("%d min") % self.minutes if self.inc is not None and self.inc != 0: tim += _(" + %d sec") % self.inc return tim @property def sortable_time(self): # http://www.freechess.org/Help/HelpFiles/etime.html etime = self.minutes + int(round(self.inc * 2.0 / 3.0)) return etime def get_soughtmatch_tooltip_text(sought): text = "%s" % sought.player.name text += "%s" % sought.player.display_titles(long=True) if not sought.player.isGuest(): text += " (%d)" % sought.player_rating text += f"\n{sought.display_rated} {sought.game_type.display_text}" text += "\n" + sought.display_timecontrol if sought.color: text += "\n" + _("%(player)s plays %(color)s") % { "player": sought.player.name, "color": _("white") if sought.color == "white" else _("black"), } return text class FICSSoughtMatch(FICSMatch): def __init__(self, index, player, minutes, inc, rated, color, game_type): assert index is None or isinstance(index, int), index assert isinstance(player, FICSPlayer), player FICSMatch.__init__(self, minutes, inc, rated, game_type) self.index = index self.player = player self.color = color # self.player plays color def __hash__(self): return self.index def __eq__(self, sought): if isinstance(self, type(sought)) and hash(self) == hash(sought): return True else: return False def __ne__(self, sought): return not self == sought def __repr__(self): text = "%s" % self.index text += " %s" % self.player.name text += " %s" % FICSMatch.__repr__(self) return text @property def player_rating(self): """ This returns self.player's rating for the type of match being sought. If self.player doesn't have a rating for the type of match being sought, this returns 0. If the match is untimed we use self.player's standard time-control rating if they have one. """ game_type = self.game_type if game_type == GAME_TYPES["untimed"]: game_type = GAME_TYPES["standard"] return self.player.getRatingByGameType(game_type) def get_challenge_tooltip_text(challenge): text = get_soughtmatch_tooltip_text(challenge) if challenge.adjourned: text += "\n" + _("This is a continuation of an adjourned match") return text class FICSChallenge(FICSSoughtMatch): def __init__( self, index, player, minutes, inc, rated, color, game_type, adjourned=False ): FICSSoughtMatch.__init__( self, index, player, minutes, inc, rated, color, game_type ) self.adjourned = adjourned class FICSChallenges(GObject.GObject): __gsignals__ = { "FICSChallengeIssued": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSChallengeRemoved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.challenges = {} def start(self): self.connection.om.connect("onChallengeAdd", self.onChallengeIssued) self.connection.om.connect("onChallengeRemove", self.onChallengeRemoved) self.connection.bm.connect("playGameCreated", self.onPlayingGame) def __getitem__(self, index): if not isinstance(index, int): raise TypeError return self.challenges[index] def __setitem__(self, index, challenge): if not isinstance(index, int): raise TypeError if not isinstance(challenge, FICSSoughtMatch): raise TypeError if index in self: log.warning( "FICSChallenges: not overwriting challenge %s" % repr(challenge) ) return self.challenges[index] = challenge self.emit("FICSChallengeIssued", challenge) def __delitem__(self, index): if not isinstance(index, int): raise TypeError try: challenge = self.challenges[index] except KeyError: return del self.challenges[index] self.emit("FICSChallengeRemoved", challenge) def __contains__(self, index): if not isinstance(index, int): raise TypeError if index in self.challenges: return True else: return False def clear(self): challenges = self.challenges.copy() for key in challenges: del self[key] def onChallengeIssued(self, om, challenge): self[challenge.index] = challenge def onChallengeRemoved(self, om, index): del self[index] def onPlayingGame(self, bm, game): self.clear() def get_rating_range_display_text(rmin=0, rmax=9999): assert isinstance(rmin, type(int())) and rmin >= 0 and rmin <= 9999, rmin assert isinstance(rmax, type(int())) and rmax >= 0 and rmax <= 9999, rmax if rmin > 0: text = "%d" % rmin if rmax == 9999: text += "↑" else: text += "-%d" % rmax elif rmax != 9999: text = "%d↓" % rmax else: text = None return text def get_seek_tooltip_text(seek): text = get_soughtmatch_tooltip_text(seek) rrtext = get_rating_range_display_text(seek.rmin, seek.rmax) if rrtext: text += "\n{}: {}".format(_("Opponent Rating"), rrtext) if not seek.automatic: text += "\n%s" % _("Manual Accept") return text class FICSSeek(FICSSoughtMatch): def __init__( self, index, player, minutes, inc, rated, color, game_type, rmin=0, rmax=9999, automatic=True, formula=False, ): FICSSoughtMatch.__init__( self, index, player, minutes, inc, rated, color, game_type ) self.rmin = rmin # minimum rating one has to accept this seek self.rmax = rmax # maximum rating one has to accept this seek self.automatic = automatic # if True, auto accept; otherwise, manual accept self.formula = formula # players' formula will be used to screen responses class FICSSeeks(GObject.GObject): __gsignals__ = { "FICSSeekCreated": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSSeekRemoved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.seeks = {} def start(self): self.connection.glm.connect("addSeek", self.onAddSeek) self.connection.glm.connect("removeSeek", self.onRemoveSeek) self.connection.glm.connect("clearSeeks", self.onClearSeeks) self.connection.bm.connect("curGameEnded", self.onCurGameEnded) def __getitem__(self, index): if not isinstance(index, int): raise TypeError return self.seeks[index] def __setitem__(self, index, seek): if not isinstance(index, int): raise TypeError if not isinstance(seek, FICSSoughtMatch): raise TypeError if index in self: log.warning("FICSSeeks: not overwriting seek %s" % repr(seek)) return self.seeks[index] = seek self.emit("FICSSeekCreated", seek) def __delitem__(self, index): if not isinstance(index, int): raise TypeError try: seek = self.seeks[index] except KeyError: return del self.seeks[index] self.emit("FICSSeekRemoved", seek) def __contains__(self, index): if not isinstance(index, int): raise TypeError if index in self.seeks: return True else: return False def clear(self): seeks = self.seeks.copy() for key in seeks: del self[key] def onAddSeek(self, glm, seek): self[seek.index] = seek def onRemoveSeek(self, glm, index): del self[index] def onClearSeeks(self, glm): self.clear() def onCurGameEnded(self, bm, game): self.connection.glm.refresh_seeks() class FICSBoard: def __init__(self, wms, bms, fen=None, pgn=None): assert isinstance(wms, int), wms assert isinstance(bms, int), bms self.wms = wms self.bms = bms # assert fen != None or pgn != None self.fen = fen self.pgn = pgn def __repr__(self): rep = f"wms={self.wms}\nbms={self.bms}\npgn={self.pgn}" return rep class FICSGame(FICSMatch): def __init__( self, wplayer, bplayer, gameno=None, game_type=None, rated=False, minutes=None, inc=None, result=None, reason=None, board=None, private=False, relation=None, ): assert isinstance(wplayer, FICSPlayer), wplayer assert isinstance(bplayer, FICSPlayer), bplayer assert gameno is None or isinstance(gameno, int), gameno assert result is None or isinstance(result, int), result assert reason is None or isinstance(reason, int), reason assert board is None or isinstance(board, FICSBoard), board assert isinstance(private, bool), private FICSMatch.__init__(self, minutes, inc, rated, game_type) self.wplayer = wplayer self.bplayer = bplayer self.gameno = gameno self.result = result self.reason = reason self.board = board self.private = private self.relation = relation # move(style12) message queue feeded by BoardManager, consumed by balck and white ICPlayer self.move_queue = asyncio.Queue() def __hash__(self): return hash( ":".join( ( self.wplayer.name[0:11].lower(), self.bplayer.name[0:11].lower(), str(self.gameno), ) ) ) def __eq__(self, game): if isinstance(game, FICSGame) and hash(self) == hash(game): return True else: return False def __repr__(self): rep = "" @property def display_time(self): if self.time is not None: return self.time.isoformat(" ")[0:16] @property def opponent(self): if self.our_color == WHITE: return self.bplayer elif self.our_color == BLACK: return self.wplayer class FICSHistoryGame(FICSGame): def __init__( self, wplayer, bplayer, time=None, rated=False, game_type=None, private=False, minutes=None, inc=None, result=None, reason=None, board=None, relation=None, wrating=None, brating=None, gameno=None, history_no=None, ): assert time is None or isinstance(time, datetime.datetime), time FICSGame.__init__( self, wplayer, bplayer, rated=rated, private=private, game_type=game_type, minutes=minutes, inc=inc, result=result, reason=reason, board=board, relation=relation, gameno=gameno, ) self.time = time self.wrating = wrating self.brating = brating self.history_no = history_no def __hash__(self): return hash( ":".join( ( self.wplayer.name[0:11].lower(), self.bplayer.name[0:11].lower(), str(self.history_no), str(self.time), ) ) ) @property def display_time(self): if self.time is not None: return self.time.isoformat(" ")[0:16] class FICSJournalGame(FICSGame): def __init__( self, wplayer, bplayer, our_color=None, time=None, rated=False, game_type=None, private=False, minutes=None, inc=None, result=None, reason=None, board=None, relation=None, wrating=None, brating=None, gameno=None, journal_no=None, ): assert our_color is None or our_color in (WHITE, BLACK), our_color assert time is None or isinstance(time, datetime.datetime), time FICSGame.__init__( self, wplayer, bplayer, rated=rated, private=private, game_type=game_type, minutes=minutes, inc=inc, result=result, reason=reason, board=board, relation=relation, gameno=gameno, ) self.wrating = wrating self.brating = brating self.journal_no = journal_no def __hash__(self): return hash( ":".join( ( self.wplayer.name[0:11].lower(), self.bplayer.name[0:11].lower(), str(self.journal_no), ) ) ) @property def display_time(self): return _("Unknown") class FICSGames(GObject.GObject): __gsignals__ = { "FICSGameCreated": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSGameEnded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSAdjournedGameRemoved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSHistoryGameRemoved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "FICSJournalGameRemoved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.games = {} self.games_by_gameno = {} self.adjourned_games = {} self.history_games = {} self.journal_games = {} self.connection = connection def start(self): self.connection.adm.connect("onAdjournmentsList", self.onAdjournmentsList) self.connection.adm.connect("onHistoryList", self.onHistoryList) self.connection.adm.connect("onJournalList", self.onJournalList) self.connection.bm.connect("curGameEnded", self.onCurGameEnded) def __getitem__(self, game): if not isinstance(game, FICSGame): raise TypeError("Not a FICSGame: %s" % repr(game)) if hash(game) in self.games: return self.games[hash(game)] else: raise KeyError def __setitem__(self, key, value): """key and value must be the same game""" if not isinstance(key, FICSGame): raise TypeError if not isinstance(value, FICSGame): raise TypeError if key != value: raise Exception(f"Not the same: {repr(key)} {repr(value)}") if hash(value) in self.games: raise Exception(f"{repr(value)} already exists in {repr(self)}") self.games[hash(value)] = value self.games_by_gameno[value.gameno] = value if isinstance(value, FICSAdjournedGame): self.adjourned_games[hash(value)] = value elif isinstance(value, FICSHistoryGame): self.history_games[hash(value)] = value elif isinstance(value, FICSJournalGame): self.journal_games[hash(value)] = value def __delitem__(self, game): if not isinstance(game, FICSGame): raise TypeError(repr(game), type(game)) if game in self: del self.games[hash(game)] if game.gameno in self.games_by_gameno: del self.games_by_gameno[game.gameno] if game in self.adjourned_games: del self.adjourned_games[hash(game)] elif game in self.history_games: del self.history_games[hash(game)] elif game in self.journal_games: del self.journal_games[hash(game)] def __contains__(self, game): if not isinstance(game, FICSGame): raise TypeError if hash(game) in self.games: return True else: return False def keys(self): return self.games.keys() def items(self): return self.games.items() def values(self): return self.games.values() def get_game_by_gameno(self, gameno): if not isinstance(gameno, int): raise TypeError return self.games_by_gameno[gameno] def get(self, game, create=True, emit=True): # TODO: lock if game in self: self[game].update(game) game = self[game] elif create: self[game] = game if emit: self.emit( "FICSGameCreated", [ game, ], ) else: raise KeyError return game def game_ended(self, game): if game in self: if not game.move_queue.empty(): async def coro(game): # we have to give a chance to ICPlayer # to process the latest move(style12) message # and remove game from game list panel also await asyncio.sleep(0) game = self[game] self.emit("FICSGameEnded", game) del self[game] asyncio.create_task(coro(game)) else: game = self[game] self.emit("FICSGameEnded", game) del self[game] def onAdjournmentsList(self, adm, adjournments): for game in self.adjourned_games.values(): if game not in adjournments: del self[game] game.opponent.adjournment = False self.emit("FICSAdjournedGameRemoved", game) def onHistoryList(self, adm, history): for game in self.history_games.values(): if game not in history: del self[game] self.emit("FICSHistoryGameRemoved", game) def onJournalList(self, adm, journal): for game in self.journal_games.values(): if game not in journal: del self[game] self.emit("FICSJournalGameRemoved", game) def onCurGameEnded(self, bm, game): for adjourned_game in self.adjourned_games.values(): for player in (game.wplayer, game.bplayer): if player == adjourned_game.opponent: del self[adjourned_game] adjourned_game.opponent.adjournment = False self.emit("FICSAdjournedGameRemoved", adjourned_game) for game in self.history_games.values(): del self[game] self.emit("FICSHistoryGameRemoved", game) self.connection.adm.queryHistory() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/ICGameModel.py0000755000175100001770000004170514614030313020044 0ustar00runnerdockerimport asyncio from io import StringIO from pychess.System.Log import log from pychess.Utils.GameModel import GameModel from pychess.Utils.Offer import Offer from pychess.Utils.const import ( REMOTE, DRAW, WHITE, BLACK, RUNNING, WHITEWON, KILLED, TAKEBACK_OFFER, WAITING_TO_START, BLACKWON, PAUSE_OFFER, PAUSED, RESUME_OFFER, DISCONNECTED, CHAT_ACTION, RESIGNATION, FLAG_CALL, OFFERS, LOCAL, UNFINISHED_STATES, ABORT_OFFER, ACTION_ERROR_NONE_TO_ACCEPT, ) from pychess.Players.Human import Human from pychess.Savers import fen as fen_loader from pychess.ic import GAME_TYPES, TYPE_TOURNAMENT_DIRECTOR class ICGameModel(GameModel): def __init__(self, connection, ficsgame, timemodel): assert ficsgame.game_type in GAME_TYPES.values() GameModel.__init__(self, timemodel, ficsgame.game_type.variant) self.connection = connection self.ficsgame = ficsgame self.ficsplayers = (ficsgame.wplayer, ficsgame.bplayer) self.gmwidg_ready = asyncio.Event() self.kibitz_task = None self.disconnected = False connections = self.connections connections[connection.bm].append( connection.bm.connect("boardSetup", self.onBoardSetup) ) connections[connection.bm].append( connection.bm.connect("exGameReset", self.onExGameReset) ) connections[connection.bm].append( connection.bm.connect("gameUndoing", self.onGameUndoing) ) connections[connection.bm].append( connection.bm.connect("timesUpdate", self.onTimesUpdate) ) connections[connection.bm].append( connection.bm.connect("obsGameEnded", self.onGameEnded) ) connections[connection.bm].append( connection.bm.connect("curGameEnded", self.onGameEnded) ) connections[connection.bm].append( connection.bm.connect("gamePaused", self.onGamePaused) ) connections[connection.bm].append( connection.bm.connect("madeExamined", self.onMadeExamined) ) connections[connection.bm].append( connection.bm.connect("madeUnExamined", self.onMadeUnExamined) ) connections[connection.om].append( connection.om.connect("onActionError", self.onActionError) ) connections[connection.cm].append( connection.cm.connect("kibitzMessage", self.onKibitzMessage) ) connections[connection.cm].append( connection.cm.connect("whisperMessage", self.onWhisperMessage) ) connections[connection.cm].append( connection.cm.connect("observers_received", self.onObserversReceived) ) connections[connection].append( connection.connect("disconnected", self.onDisconnected) ) rated = "rated" if ficsgame.rated else "unrated" # This is in the format that ficsgames.org writes these PGN headers ics = "ICC" if self.connection.ICC else "FICS" self.tags["Event"] = "{} {} {} game".format( ics, rated, ficsgame.game_type.fics_name ) self.tags["Site"] = "chessclub.com" if self.connection.ICC else "freechess.org" def __repr__(self): string = GameModel.__repr__(self) string = string.replace(" Actions" works if isinstance(obj, Human): continue for handler_id in self.connections[obj]: if obj.handler_is_connected(handler_id): log.debug( "ICGameModel.__disconnect: object=%s handler_id=%s" % (repr(obj), repr(handler_id)) ) obj.disconnect(handler_id) self.disconnected = True def ficsplayer(self, player): if player.ichandle == self.ficsplayers[0].name: return self.ficsplayers[0] else: return self.ficsplayers[1] @property def remote_player(self): if self.players[0].__type__ == REMOTE: return self.players[0] else: return self.players[1] @property def remote_ficsplayer(self): return self.ficsplayer(self.remote_player) def hasGuestPlayers(self): for player in self.ficsplayers: if player.isGuest(): return True return False @property def noTD(self): for player in self.ficsplayers: if TYPE_TOURNAMENT_DIRECTOR in player.titles: return False return True def onExGameReset(self, bm, ficsgame): log.debug("ICGameModel.onExGameReset %s" % self) if ficsgame == self.ficsgame: self.__disconnect() self.players[0].end() self.players[1].end() def onGameUndoing(self, bm, gameno, ply): if gameno == self.ficsgame.gameno: self.undoMoves(ply) def onBoardSetup(self, bm, gameno, fen, wname, bname): log.debug( "ICGameModel.onBoardSetup: {} {} {} {} {}".format( bm, gameno, fen, wname, bname ) ) if ( gameno != self.ficsgame.gameno or len(self.players) != 2 or self.disconnected ): return # Set up examined game black player if "Black" not in self.tags or bname != self.tags["Black"]: self.players[BLACK].name = bname self.emit("players_changed") # Set up examined game white player if "White" not in self.tags or wname != self.tags["White"]: self.players[WHITE].name = wname self.emit("players_changed") # Set up examined game position, side to move, castling rights if self.boards[-1].asFen() != fen: if self.boards[0].asFen().split()[:2] == fen.split()[:2]: log.debug("ICGameModel.onBoardSetup: undoing moves %s" % self.moves) self.undoMoves(len(self.moves)) self.ficsgame.move_queue.put_nowait("stm") return new_position = self.boards[-1].asFen().split()[0] != fen.split()[0] # side to move change stm_change = self.boards[-1].asFen().split()[1] != fen.split()[1] self.status = RUNNING self.loadAndStart(StringIO(fen), fen_loader, 0, -1, first_time=False) if new_position: log.debug('ICGameModel.onBoardSetup: put_nowait("fen"') self.ficsgame.move_queue.put_nowait("fen") self.emit("game_started") elif stm_change: log.debug('ICGameModel.onBoardSetup: put_nowait("stm"') self.ficsgame.move_queue.put_nowait("stm") def update_board(self, gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms): log.debug( ( "ICGameModel.update_board: id=%s self.ply=%s self.players=%s gameno=%s " + "wname=%s bname=%s ply=%s curcol=%s lastmove=%s fen=%s wms=%s bms=%s" ) % ( str(id(self)), str(self.ply), repr(self.players), str(gameno), str(wname), str(bname), str(ply), str(curcol), str(lastmove), str(fen), str(wms), str(bms), ) ) if gameno != self.ficsgame.gameno or len(self.players) < 2 or self.disconnected: return if self.timed: log.debug( "ICGameModel.update_board: id=%d self.players=%s: updating timemodel" % (id(self), str(self.players)) ) # If game end coming from helper connection before last move made # we have to tap() ourselves if self.status in (DRAW, WHITEWON, BLACKWON): if self.timemodel.ply < ply: self.timemodel.paused = False self.timemodel.tap() self.timemodel.paused = True self.timemodel.updatePlayer(WHITE, wms / 1000.0) self.timemodel.updatePlayer(BLACK, bms / 1000.0) if ply < self.ply: log.debug( "ICGameModel.update_board: id=%d self.players=%s \ self.ply=%d ply=%d: TAKEBACK" % (id(self), str(self.players), self.ply, ply) ) for offer in list(self.offers.keys()): if offer.type == TAKEBACK_OFFER: # There can only be 1 outstanding takeback offer for both players on FICS, # (a counter-offer by the offeree for a takeback for a different number of # moves replaces the initial offer) so we can safely remove all of them del self.offers[offer] if len(self.moves) >= self.ply - ply: self.undoMoves(self.ply - ply) else: self.status = RUNNING self.loadAndStart(StringIO(fen), fen_loader, 0, -1, first_time=False) self.emit("game_started") curPlayer = self.players[self.curColor] curPlayer.resetPosition() elif ply > self.ply + 1: log.debug( "ICGameModel.update_board: id=%d self.players=%s \ self.ply=%d ply=%d: FORWARD JUMP" % (id(self), str(self.players), self.ply, ply) ) self.status = RUNNING self.loadAndStart(StringIO(fen), fen_loader, 0, -1, first_time=False) self.emit("game_started") curPlayer = self.players[self.curColor] curPlayer.resetPosition() def onTimesUpdate(self, bm, gameno, wms, bms): if gameno != self.ficsgame.gameno: return if self.timed: self.timemodel.updatePlayer(WHITE, wms / 1000.0) self.timemodel.updatePlayer(BLACK, bms / 1000.0) def onMadeExamined(self, bm, gameno): self.examined = True def onMadeUnExamined(self, bm, gameno): self.examined = False def onGameEnded(self, bm, ficsgame): if ficsgame == self.ficsgame and len(self.players) >= 2: log.debug( "ICGameModel.onGameEnded: self.players=%s ficsgame=%s" % (repr(self.players), repr(ficsgame)) ) self.end(ficsgame.result, ficsgame.reason) def setPlayers(self, players): GameModel.setPlayers(self, players) if self.players[WHITE].icrating: self.tags["WhiteElo"] = self.players[WHITE].icrating if self.players[BLACK].icrating: self.tags["BlackElo"] = self.players[BLACK].icrating if ( self.connection.username == self.ficsplayers[WHITE].name ) and self.ficsplayers[WHITE].isGuest(): self.tags["White"] += " (Player)" self.emit("players_changed") if ( self.connection.username == self.ficsplayers[BLACK].name ) and self.ficsplayers[BLACK].isGuest(): self.tags["Black"] += " (Player)" self.emit("players_changed") def onGamePaused(self, bm, gameno, paused): if paused: self.pause() else: self.resume() # we have to do this here rather than in acceptReceived(), because # sometimes FICS pauses/unpauses a game clock without telling us that the # original offer was "accepted"/"received", such as when one player offers # "pause" and the other player responds not with "accept" but "pause" for offer in list(self.offers.keys()): if offer.type in (PAUSE_OFFER, RESUME_OFFER): del self.offers[offer] def onDisconnected(self, connection): if self.status in (WAITING_TO_START, PAUSED, RUNNING): self.end(KILLED, DISCONNECTED) ############################################################################ # Chat management # ############################################################################ def onKibitzMessage(self, cm, name, gameno, text): async def coro(): if not self.gmwidg_ready.is_set(): await self.gmwidg_ready.wait() if gameno != self.ficsgame.gameno: return self.emit("message_received", name, text) self.kibitz_task = asyncio.create_task(coro()) def onWhisperMessage(self, cm, name, gameno, text): if gameno != self.ficsgame.gameno: return self.emit("message_received", name, text) def onObserversReceived(self, other, gameno, observers): if int(gameno) != self.ficsgame.gameno: return self.emit("observers_received", observers) ############################################################################ # Offer management # ############################################################################ def offerReceived(self, player, offer): log.debug(f"ICGameModel.offerReceived: offerer={repr(player)} {offer}") if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer.type == CHAT_ACTION: opPlayer.putMessage(offer.param) elif offer.type in (RESIGNATION, FLAG_CALL): self.connection.om.offer(offer) elif offer.type in OFFERS: if offer not in self.offers: log.debug( "ICGameModel.offerReceived: {}.offer({})".format( repr(opPlayer), offer ) ) self.offers[offer] = player opPlayer.offer(offer) # If the offer was an update to an old one, like a new takebackvalue # we want to remove the old one from self.offers for offer_ in list(self.offers.keys()): if offer.type == offer_.type and offer != offer_: del self.offers[offer_] def acceptReceived(self, player, offer): log.debug(f"ICGameModel.acceptReceived: accepter={repr(player)} {offer}") if player.__type__ == LOCAL: if offer not in self.offers or self.offers[offer] == player: player.offerError(offer, ACTION_ERROR_NONE_TO_ACCEPT) else: log.debug( "ICGameModel.acceptReceived: connection.om.accept(%s)" % offer ) self.connection.om.accept(offer) del self.offers[offer] # We don't handle any ServerPlayer calls here, as the fics server will # know automatically if he/she accepts an offer, and will simply send # us the result. def checkStatus(self): pass def onActionError(self, om, offer, error): self.emit("action_error", offer, error) # # End # def end(self, status, reason): if self.examined: self.connection.bm.unexamine() if self.status in UNFINISHED_STATES: self.__disconnect() if self.isObservationGame(): self.connection.bm.unobserve(self.ficsgame) else: self.connection.om.offer(Offer(ABORT_OFFER)) self.connection.om.offer(Offer(RESIGNATION)) if status == KILLED: GameModel.kill(self, reason) else: GameModel.end(self, status, reason) def terminate(self): for obj in self.connections: for handler_id in self.connections[obj]: if obj.handler_is_connected(handler_id): obj.disconnect(handler_id) self.connections = None GameModel.terminate(self) if self.kibitz_task is not None: self.kibitz_task.cancel() def goFirst(self): self.connection.client.run_command("backward 999") def goPrev(self, step=1): self.connection.client.run_command("backward %s" % step) def goNext(self, step=1): self.connection.client.run_command("forward %s" % step) def goLast(self): self.connection.client.run_command("forward 999") def backToMainLine(self): self.connection.client.run_command("revert") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/ICLogon.py0000644000175100001770000003533014614030313017262 0ustar00runnerdockerimport asyncio import re import socket import webbrowser from collections import defaultdict from gi.repository import Gdk from gi.repository import Gtk from gi.repository import GLib from gi.repository import GObject from pychess.System import uistuff, conf from pychess.widgets import mainwindow from pychess.ic.FICSConnection import ( FICSMainConnection, FICSHelperConnection, LogOnException, ) from pychess.perspectives import perspective_manager host = None port = None dialog = None def run(): global dialog dialog.widgets["fics_logon"].set_transient_for(mainwindow()) if dialog.lounge: dialog.lounge.present() else: dialog.present() def stop(): global dialog if dialog is not None: dialog._disconnect() class AutoLogoutException(Exception): pass class ICLogon: def __init__(self): self.connection = None self.helperconn = None self.connection_task = None self.helperconn_task = None self.lounge = None self.canceled = False self.cids = defaultdict(list) self.widgets = uistuff.GladeWidgets("fics_logon.glade") uistuff.keepWindowSize( "fics_logon", self.widgets["fics_logon"], defaultPosition=uistuff.POSITION_GOLDEN, ) self.widgets["fics_logon"].connect( "key-press-event", lambda w, e: e.keyval == Gdk.KEY_Escape and w.hide() ) self.ics = "FICS" self.as_guest = self.widgets["logOnAsGuest"] self.widgets["logOnAsGuest"].connect("toggled", self.on_logOnAsGuest_toggled) def on_username_changed(widget): conf.set( "usernameEntry", self.user_name_get_value(widget), section=self.ics ) self.widgets["nameEntry"].connect("changed", on_username_changed) def on_password_changed(widget): conf.set("passwordEntry", widget.get_text(), section=self.ics) self.widgets["passEntry"].connect("changed", on_password_changed) def on_host_changed(widget): conf.set("hostEntry", self.host_get_value(widget), section=self.ics) self.widgets["hostEntry"].connect("changed", on_host_changed) self.widgets["timesealCheck"].connect("toggled", self.on_timeseal_toggled) self.infobar = Gtk.InfoBar() self.infobar.set_message_type(Gtk.MessageType.WARNING) # self.widgets["messagePanelHBox"].pack_start(self.infobar, # expand=False, fill=False) self.widgets["messagePanelHBox"].pack_start(self.infobar, False, False, 0) self.widgets["cancelButton"].connect("clicked", self.onCancel, True) self.widgets["stopButton"].connect("clicked", self.onCancel, False) self.widgets["createNewButton"].connect("clicked", self.onCreateNew) self.widgets["connectButton"].connect("clicked", self.onConnectClicked) self.widgets["progressbar"].set_show_text(True) def get_user_names(self, value=None): """Split and return usernameEntry config item into registered and guest username""" if value is not None: names = value.split("|") else: names = conf.get("usernameEntry", section=self.ics).split("|") if len(names) == 0: names = ["", ""] elif len(names) < 2: names.append(names[0]) return names def user_name_get_value(self, entry): names = self.get_user_names() if self.as_guest.get_active(): text = f"{names[0]}|{entry.get_text()}" else: text = f"{entry.get_text()}|{names[1]}" return text def user_name_set_value(self, entry, value): names = self.get_user_names(value=value) if self.as_guest.get_active(): entry.set_text(names[1]) else: entry.set_text(names[0]) # workaround to FICS Password input doesnt handle strings starting with a number # https://github.com/pychess/pychess/issues/1375 def password_set_value(self, entry, value): entry.set_text(str(value)) # workaround to Can't type IP to FICS login dialog # https://github.com/pychess/pychess/issues/1360 def host_get_value(self, entry): return entry.get_text().replace(".", "|") def host_set_value(self, entry, value): entry.set_text(str(value).replace("|", ".")) def on_logOnAsGuest_toggled(self, widget): names = self.get_user_names() self.widgets["nameEntry"].set_text( names[1] if widget.get_active() else names[0] ) if self.ics == "ICC": self.widgets["nameLabel"].set_sensitive(not widget.get_active()) self.widgets["nameEntry"].set_sensitive(not widget.get_active()) else: self.widgets["nameLabel"].set_sensitive(True) self.widgets["nameEntry"].set_sensitive(True) self.widgets["passwordLabel"].set_sensitive(not widget.get_active()) self.widgets["passEntry"].set_sensitive(not widget.get_active()) conf.set("asGuestCheck", widget.get_active(), section=self.ics) def on_timeseal_toggled(self, widget): conf.set("timesealCheck", widget.get_active(), section=self.ics) def on_ics_combo_changed(self, combo): tree_iter = combo.get_active_iter() if tree_iter is not None: model = combo.get_model() self.ics = model[tree_iter][0] # print("Selected: %s" % self.ics) self.widgets["logOnAsGuest"].set_active( conf.get("asGuestCheck", section=self.ics) ) self.on_logOnAsGuest_toggled(self.widgets["logOnAsGuest"]) self.user_name_set_value( self.widgets["nameEntry"], conf.get("usernameEntry", section=self.ics) ) self.password_set_value( self.widgets["passEntry"], conf.get("passwordEntry", section=self.ics) ) self.host_set_value( self.widgets["hostEntry"], conf.get("hostEntry", section=self.ics) ) self.widgets["timesealCheck"].set_active( conf.get("timesealCheck", section=self.ics) ) self.on_timeseal_toggled(self.widgets["timesealCheck"]) def _disconnect(self): for obj in self.cids: for cid in self.cids[obj]: if obj.handler_is_connected(cid): obj.disconnect(cid) self.cids.clear() if self.connection is not None: self.connection.close() if not self.connection_task.cancelled(): self.connection_task.cancel() self.connection = None if self.helperconn is not None: self.helperconn.close() if not self.helperconn_task.cancelled(): self.helperconn_task.cancel() self.helperconn = None self.lounge = None def _cancel(self): if self.connection is not None: self.connection.cancel() if self.helperconn is not None: self.helperconn.cancel() self._disconnect() def show(self): self.widgets["fics_logon"].show() def present(self): self.widgets["fics_logon"].present() def hide(self): self.widgets["fics_logon"].hide() def showConnecting(self): self.widgets["progressbarBox"].show() self.widgets["mainbox"].set_sensitive(False) self.widgets["connectButton"].hide() self.widgets["stopButton"].show() def pulse(): self.widgets["progressbar"].pulse() if self.connection is None: return False else: return not self.connection.isConnected() self.pulser = GLib.timeout_add(30, pulse) def showNormal(self): self.widgets["mainbox"].set_sensitive(True) self.widgets["connectButton"].show() self.widgets["fics_logon"].set_default(self.widgets["connectButton"]) self.widgets["stopButton"].hide() self.widgets["progressbarBox"].hide() self.widgets["progressbar"].set_text("") GObject.source_remove(self.pulser) def showMessage(self, connection, message): self.widgets["progressbar"].set_text(message) def showError(self, connection, error): text = str(error) if isinstance(error, IOError): title = _("Connection Error") elif isinstance(error, LogOnException): title = _("Log on Error") elif isinstance(error, EOFError): title = _("Connection was closed") elif isinstance(error, socket.error): title = _("Connection Error") text = ", ".join(map(str, error.args)) elif isinstance(error, socket.gaierror) or isinstance(error, socket.herror): title = _("Address Error") text = ", ".join(map(str, error.args)) elif isinstance(error, AutoLogoutException): title = _("Auto-logout") text = _( "You have been logged out because you were idle more than 60 minutes" ) else: title = str(error.__class__) self.showNormal() content_area = self.infobar.get_content_area() for widget in content_area: content_area.remove(widget) content = Gtk.HBox() image = Gtk.Image() image.set_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG) content.pack_start(image, False, False, 0) vbox = Gtk.VBox() label = Gtk.Label() label.props.xalign = 0 label.props.justify = Gtk.Justification.LEFT label.set_markup("%s" % title) vbox.pack_start(label, True, False, 0) for line in str(text).split("\n"): label = Gtk.Label() label.set_size_request(476, -1) label.props.selectable = True label.props.wrap = True label.props.xalign = 0 label.props.justify = Gtk.Justification.LEFT label.set_markup(line) vbox.pack_start(label, True, False, 0) content.pack_start(vbox, False, False, 7) content_area.add(content) self.widgets["messagePanel"].show_all() def onCreateNew(self, button): if self.widgets["hostEntry"].get_text() == "chessclub.com": webbrowser.open("https://store.chessclub.com/customer/account/create/") else: webbrowser.open("http://www.freechess.org/Register/index.html") def onConnectClicked(self, button): self.canceled = False self.widgets["messagePanel"].hide() if self.widgets["logOnAsGuest"].get_active(): username = self.widgets["nameEntry"].get_text() password = "" else: username = self.widgets["nameEntry"].get_text() password = self.widgets["passEntry"].get_text() if port: ports = (port,) else: ports = self.widgets["portsEntry"].get_text() ports = list(map(int, re.findall(r"\d+", ports))) if 5000 not in ports: ports.append(5000) if 23 not in ports: ports.append(23) alternate_host = self.widgets["hostEntry"].get_text() timeseal = self.widgets["timesealCheck"].get_active() self.showConnecting() self.host = ( host if host is not None else alternate_host if alternate_host else "freechess.org" ) self.connection = FICSMainConnection( self.host, ports, timeseal, username, password ) for signal, callback in ( ("connected", self.onConnected), ("error", self.onConnectionError), ("connectingMsg", self.showMessage), ): self.cids[self.connection].append(self.connection.connect(signal, callback)) self.main_connected_event = asyncio.Event() self.connection_task = asyncio.create_task(self.connection.start()) # guest users are rather limited on ICC (helper connection is useless) if self.host not in ("localhost", "127.0.0.1", "chessclub.com"): self.helperconn = FICSHelperConnection( self.connection, self.host, ports, timeseal ) self.helperconn.connect("error", self.onHelperConnectionError) async def coro(): await self.main_connected_event.wait() await self.helperconn.start() self.helperconn_task = asyncio.create_task(coro()) def onHelperConnectionError(self, connection, error): if self.helperconn is not None: dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, ) dialog.set_markup(_("Guest logins disabled by FICS server")) text = "PyChess can maintain users status and games list only if it changes\n\ 'open', 'gin' and 'availinfo' user variables.\n\ Do you enable to set these variables on?" dialog.format_secondary_text(text) response = dialog.run() dialog.destroy() self.helperconn.cancel() self.helperconn.close() self.helperconn = None set_user_vars = response == Gtk.ResponseType.YES async def coro(): await self.main_connected_event.wait() self.connection.start_helper_manager(set_user_vars) asyncio.create_task(coro()) def onConnected(self, connection): self.main_connected_event.set() if connection.ICC: self.connection.start_helper_manager(True) self.lounge = perspective_manager.get_perspective("fics") self.lounge.open_lounge(connection, self.helperconn, self.host) self.hide() self.lounge.show() self.lounge.connect("logout", lambda iclounge: self.onLogout(connection)) self.cids[self.lounge].append( self.lounge.connect( "autoLogout", lambda lounge: self.onAutologout(connection) ) ) self.showNormal() self.widgets["messagePanel"].hide() def onCancel(self, widget, hide): self.canceled = True if self.connection and self.connection.isConnecting(): self._cancel() self.showNormal() if hide: self.widgets["fics_logon"].hide() def onConnectionError(self, connection, error): self._disconnect() if not self.canceled: self.showError(connection, error) self.present() def onLogout(self, connection): self._disconnect() def onAutologout(self, connection): self._disconnect() self.showError(connection, AutoLogoutException()) self.present() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/TimeSeal.py0000644000175100001770000002501214614030313017467 0ustar00runnerdockerimport asyncio import sys import telnetlib import random import time import platform import subprocess import getpass import os import shutil from pychess.System.Log import log from pychess.System.prefix import getEngineDataPrefix from pychess.ic.icc import B_DTGR_END, B_UNIT_END if not hasattr(asyncio.StreamReader, "readuntil"): from pychess.System.readuntil import readuntil, _wait_for_data asyncio.StreamReader.readuntil = readuntil asyncio.StreamReader._wait_for_data = _wait_for_data ENCODE = [ord(i) for i in "Timestamp (FICS) v1.0 - programmed by Henrik Gram."] ENCODELEN = len(ENCODE) G_RESPONSE = "\x029" FILLER = b"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" IAC_WONT_ECHO = b"".join([telnetlib.IAC, telnetlib.WONT, telnetlib.ECHO]) _DEFAULT_LIMIT = 2**16 class CanceledException(Exception): pass class ICSStreamReader(asyncio.StreamReader): def __init__(self, limit, loop, connected_event, name): asyncio.StreamReader.__init__(self, limit=limit, loop=loop) self.connected_event = connected_event self.name = name async def read_until(self, *untils): while True: for i, until in enumerate(untils): start = self._buffer.find(bytearray(until, "ascii")) if start >= 0: self._buffer = self._buffer[start:] return i else: not_find = f"read_until:{until} , got:'{self._buffer}'" log.debug(not_find, extra={"task": (self.name, "raw")}) await self._wait_for_data("read_until") class ICSStreamReaderProtocol(asyncio.StreamReaderProtocol): def __init__(self, stream_reader, client_connected_cb, loop, name, timeseal): asyncio.StreamReaderProtocol.__init__( self, stream_reader, client_connected_cb=client_connected_cb, loop=loop ) self.name = name self.timeseal = timeseal self.connected = False self.stateinfo = None def data_received(self, data): cooked = self.cook_some(data) self._stream_reader.feed_data(cooked) def cook_some(self, data): if not self.connected: log.debug(data, extra={"task": (self.name, "raw")}) self.connected = True if b"FatICS" in data: self.FatICS = True elif b"puertorico.com" in data: self.USCN = True data = data.replace(IAC_WONT_ECHO, b"") elif b"chessclub.com" in data: self.ICC = True data = data.replace(IAC_WONT_ECHO, b"") elif b"Starting FICS session" in data: data = data.replace(IAC_WONT_ECHO, b"") else: if self.timeseal: data, g_count, self.stateinfo = self.decode(data, self.stateinfo) data = data.replace(b"\r", b"").replace(b"\x07", b"") # enable this only for temporary debugging log.debug(data, extra={"task": (self.name, "raw")}) if self.timeseal: for i in range(g_count): self._stream_writer.write( self.encode(bytearray(G_RESPONSE, "utf-8")) + b"\n" ) return data def encode(self, inbuf, timestamp=None): assert inbuf == b"" or inbuf[-1] != b"\n" if not timestamp: timestamp = int(time.time() * 1000 % 1e7) enc = inbuf + bytearray("\x18%d\x19" % timestamp, "ascii") padding = 12 - len(enc) % 12 filler = random.sample(FILLER, padding) enc += bytearray(filler) buf = enc for i in range(0, len(buf), 12): buf[i + 11], buf[i] = buf[i], buf[i + 11] buf[i + 9], buf[i + 2] = buf[i + 2], buf[i + 9] buf[i + 7], buf[i + 4] = buf[i + 4], buf[i + 7] encode_offset = random.randrange(ENCODELEN) for i in range(len(buf)): buf[i] |= 0x80 j = (i + encode_offset) % ENCODELEN buf[i] = (buf[i] ^ ENCODE[j]) - 32 buf += bytearray([0x80 | encode_offset]) return buf def decode(self, buf, stateinfo=None): expected_table = b"[G]\n\r" # TODO: add support to FatICS's new zipseal protocol when it finalizes # expected_table = "[G]\n\r" if not self.FatICS else "[G]\r\n" final_state = len(expected_table) g_count = 0 result = [] if stateinfo: state, lookahead = stateinfo else: state, lookahead = 0, [] lenb = len(buf) idx = 0 while idx < lenb: buffer_item = buf[idx] expected = expected_table[state] if buffer_item == expected: state += 1 if state == final_state: g_count += 1 lookahead = [] state = 0 else: lookahead.append(buffer_item) idx += 1 elif state == 0: result.append(buffer_item) idx += 1 else: result.extend(lookahead) lookahead = [] state = 0 return bytearray(result), g_count, (state, lookahead) # You can get ICC timestamp from # https://www.chessclub.com/user/resources/icc/timestamp/ if sys.platform == "win32": timestamp = "timestamp_win32.exe" else: timestamp = "timestamp_linux_2.6.8" altpath = getEngineDataPrefix() timestamp_path = shutil.which(timestamp, os.X_OK, path=altpath) class ICSTelnet: sensitive = False def __init__(self, timeseal): self.name = "" self.connected = False self.canceled = False self.FatICS = False self.USCN = False self.ICC = False self.timeseal = timeseal self.ICC_buffer = "" async def start(self, host, port, connected_event): if self.canceled: raise CanceledException() self.port = port self.host = host self.connected_event = connected_event self.name = host if host == "chessclub.com": self.ICC = True if self.timeseal and timestamp_path is not None: self.host = "127.0.0.1" self.port = 5500 try: if sys.platform == "win32": # To prevent engines opening console window startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW else: startupinfo = None create = asyncio.create_subprocess_exec( *["%s" % timestamp_path, "-p", "%s" % self.port], startupinfo=startupinfo, ) self.timestamp_proc = await create log.info("%s started OK" % timestamp_path) except OSError as err: log.info( "Can't start {} OSError: {} {}".format( timestamp_path, err.errno, err.strerror ) ) self.port = port self.host = host else: log.info("%s not found" % timestamp_path) self.timeseal = False def cb(reader, writer): reader.stream_writer = writer reader.connected_event.set() loop = asyncio.get_event_loop() self.reader = ICSStreamReader( _DEFAULT_LIMIT, loop, self.connected_event, self.name ) self.protocol = ICSStreamReaderProtocol( self.reader, cb, loop, self.name, self.timeseal ) coro = loop.create_connection(lambda: self.protocol, self.host, self.port) self.transport, _protocol = await coro # writer = asyncio.StreamWriter(transport, protocol, reader, loop) if self.timeseal: self.write(self.get_init_string()) def cancel(self): self.canceled = True self.close() def close(self): if self.protocol.connected: self.protocol.connected = False self.transport.close() def get_init_string(self): """timeseal header: TIMESTAMP|bruce|Linux gruber 2.6.15-gentoo-r1 #9 PREEMPT Thu Feb 9 20:09:47 GMT 2006 i686 Intel(R) Celeron(R) CPU 2.00GHz GenuineIntel GNU/Linux| 93049""" user = getpass.getuser() uname = " ".join(list(platform.uname())) return "TIMESTAMP|" + user + "|" + uname + "|" def write(self, string): logstr = "*" * len(string) if self.sensitive else string self.sensitive = False log.info(logstr, extra={"task": (self.name, "raw")}) if self.timeseal: self.transport.write( self.protocol.encode(bytearray(string, "utf-8")) + b"\n" ) else: self.transport.write(string.encode() + b"\n") async def readline(self): if self.canceled: raise CanceledException() if self.ICC: line = await self.readuntil(b"\n") return line.strip() else: line = await self.reader.readline() return line.decode("latin_1").strip() async def readuntil(self, until): if self.canceled: raise CanceledException() if self.ICC: if len(self.ICC_buffer) == 0: self.ICC_buffer = await self.reader.readuntil(until) i = self.ICC_buffer.find(until) m = sys.maxsize if i >= 0: m = i j = self.ICC_buffer.find(B_DTGR_END) if j >= 0: m = min(m, j) k = self.ICC_buffer.find(B_UNIT_END) if k >= 0: m = min(m, k) if m != sys.maxsize: if m == i: stuff = self.ICC_buffer[: m + len(until)] self.ICC_buffer = self.ICC_buffer[m + len(until) :] return stuff.decode("latin_1") else: stuff = self.ICC_buffer[: m + 2] self.ICC_buffer = self.ICC_buffer[m + 2 :] return stuff.decode("latin_1") else: return "" else: data = await self.reader.readuntil(until) return data.decode("latin_1") async def read_until(self, *untils): if self.canceled: raise CanceledException() ret = await self.reader.read_until(*untils) return ret ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/VerboseTelnet.py0000644000175100001770000003112314614030313020545 0ustar00runnerdockerimport collections import re from pychess.System.Log import log from pychess.ic import BLOCK_START, BLOCK_SEPARATOR, BLOCK_END, BLKCMD_PASSWORD from pychess.ic.icc import UNIT_START, UNIT_END, DTGR_START, MY_ICC_PREFIX class ConsoleHandler: def __init__(self, callback): self.callback = callback def handle(self, line): if line: self.callback(line) class Prediction: def __init__(self, callback, *regexps): self.callback = callback self.name = callback.__name__ self.regexps = [] self.matches = () self.hash = hash(callback) for regexp in regexps: self.hash ^= hash(regexp) if not hasattr("match", regexp): # FICS being fairly case insensitive, we can compile with IGNORECASE # to easy some expressions self.regexps.append(re.compile(regexp, re.IGNORECASE)) def __hash__(self): return self.hash def __len__(self): return len(self.regexps) RETURN_NO_MATCH, RETURN_MATCH, RETURN_NEED_MORE, RETURN_MATCH_END = range(4) BL, DG, CN = range(3) class LinePrediction(Prediction): def __init__(self, callback, regexp): Prediction.__init__(self, callback, regexp) def handle(self, line): match = self.regexps[0].match(line) if match: self.matches = (match.string,) self.callback(match) return RETURN_MATCH return RETURN_NO_MATCH class MultipleLinesPrediction(Prediction): def __init__(self, callback, *regexps): Prediction.__init__(self, callback, *regexps) self.matchlist = [] class NLinesPrediction(MultipleLinesPrediction): def __init__(self, callback, *regexps): MultipleLinesPrediction.__init__(self, callback, *regexps) def handle(self, line): regexp = self.regexps[len(self.matchlist)] match = regexp.match(line) if match: self.matchlist.append(match) if len(self.matchlist) == len(self.regexps): self.matches = [m.string for m in self.matchlist] self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH return RETURN_NEED_MORE del self.matchlist[:] return RETURN_NO_MATCH class FromPlusPrediction(MultipleLinesPrediction): def __init__(self, callback, regexp0, regexp1): MultipleLinesPrediction.__init__(self, callback, regexp0, regexp1) def handle(self, line): if not self.matchlist: match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: match = self.regexps[1].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: self.matches = [m.string for m in self.matchlist] self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH_END del self.matchlist[:] return RETURN_NO_MATCH class FromABPlusPrediction(MultipleLinesPrediction): def __init__(self, callback, regexp0, regexp1, regexp2): MultipleLinesPrediction.__init__(self, callback, regexp0, regexp1, regexp2) def handle(self, line): if not self.matchlist: match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE elif len(self.matchlist) == 1: match = self.regexps[1].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: match = self.regexps[2].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: self.matches = [m.string for m in self.matchlist] self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH_END del self.matchlist[:] return RETURN_NO_MATCH class FromToPrediction(MultipleLinesPrediction): def __init__(self, callback, regexp0, regexp1): MultipleLinesPrediction.__init__(self, callback, regexp0, regexp1) def handle(self, line): if not self.matchlist: match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: match = self.regexps[1].match(line) if match: self.matchlist.append(match) self.matches = [ m if isinstance(m, str) else m.string for m in self.matchlist ] self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH else: self.matchlist.append(line) return RETURN_NEED_MORE return RETURN_NO_MATCH TelnetLine = collections.namedtuple("TelnetLine", ["line", "code", "code_type"]) EmptyTelnetLine = TelnetLine("", None, None) class TelnetLines: def __init__(self, telnet, show_reply): self.telnet = telnet self.lines = collections.deque() self.block_mode = False self.datagram_mode = False self.line_prefix = None self.consolehandler = None self.show_reply = show_reply def appendleft(self, x): self.lines.appendleft(x) def extendleft(self, iterable): self.lines.extendleft(iterable) async def popleft(self): try: return self.lines.popleft() except IndexError: lines = await self._get_lines() self.lines.extend(lines) return self.lines.popleft() if self.lines else EmptyTelnetLine async def _get_lines(self): lines = [] line = await self.telnet.readline() identifier = 0 if line.startswith(self.line_prefix): line = line[len(self.line_prefix) + 1 :] if self.datagram_mode: identifier = -1 code = 0 unit = False if line.startswith(UNIT_START): unit = True unit_lines = [] cn_code = int(line[2 : line.find(" ")]) if MY_ICC_PREFIX in line: identifier = 0 line = await self.telnet.readline() if unit: while UNIT_END not in line: if line.startswith(DTGR_START): code, data = line[2:-2].split(" ", 1) log.debug( f"{code} {data}", extra={"task": (self.telnet.name, "datagram")}, ) lines.append(TelnetLine(data, int(code), DG)) else: if line.endswith(UNIT_END): parts = line.split(UNIT_END) if parts[0]: unit_lines.append(parts[0]) else: unit_lines.append(line) line = await self.telnet.readline() if len(unit_lines) > 0: text = "\n".join(unit_lines) lines.append(TelnetLine(text, cn_code, CN)) log.debug(text, extra={"task": (self.telnet.name, "not datagram")}) elif self.block_mode and line.startswith(BLOCK_START): parts = line[1:].split(BLOCK_SEPARATOR) if len(parts) == 3: identifier, code, text = parts elif len(parts) == 4: identifier, code, error_code, text = parts else: log.warning( "Posing not supported yet", extra={"task": (self.telnet.name, "lines")}, ) return lines code = int(code) identifier = int(identifier) if text: line = text else: line = await self.telnet.readline() while not line.endswith(BLOCK_END): lines.append(TelnetLine(line, code, BL)) line = await self.telnet.readline() lines.append(TelnetLine(line[:-1], code, BL)) if code != BLKCMD_PASSWORD: log.debug( "%s %s %s" % ( identifier, code, "\n".join(line.line for line in lines).strip(), ), extra={"task": (self.telnet.name, "command_reply")}, ) else: code = 0 lines.append(TelnetLine(line, None, None)) if self.consolehandler: if identifier == 0 or identifier in self.show_reply: self.consolehandler.handle(lines) # self.show_reply.discard(identifier) return lines class PredictionsTelnet: def __init__( self, telnet, predictions, reply_cmd_dict, replay_dg_dict, replay_cn_dict ): self.telnet = telnet self.predictions = predictions self.reply_cmd_dict = reply_cmd_dict self.replay_dg_dict = replay_dg_dict self.replay_cn_dict = replay_cn_dict self.show_reply = set() self.lines = TelnetLines(telnet, self.show_reply) self.__command_id = 1 async def parse(self): line = await self.lines.popleft() if not line.line: return # TODO: necessary? # print("line.line:", line.line) if self.lines.datagram_mode and line.code is not None: if line.code_type == DG: callback = self.replay_dg_dict[line.code] callback(line.line) log.debug( line.line, extra={"task": (self.telnet.name, callback.__name__)} ) return elif line.code_type == CN and line.code in self.replay_cn_dict: callback = self.replay_cn_dict[line.code] callback(line.line) log.debug( line.line, extra={"task": (self.telnet.name, callback.__name__)} ) return predictions = ( self.reply_cmd_dict[line.code] if line.code is not None and line.code in self.reply_cmd_dict else self.predictions ) for pred in list(predictions): answer = await self.test_prediction(pred, line) # print(answer, " parse_line: trying prediction %s for line '%s'" % (pred.name, line.line[:80])) if answer in (RETURN_MATCH, RETURN_MATCH_END): log.debug( "\n".join(pred.matches), extra={"task": (self.telnet.name, pred.name)}, ) break else: # print(" NOT MATCHED:", line.line[:80]) if line.code != BLKCMD_PASSWORD: log.debug(line.line, extra={"task": (self.telnet.name, "nonmatched")}) async def test_prediction(self, prediction, line): lines = [] answer = prediction.handle(line.line) while answer is RETURN_NEED_MORE: line = await self.lines.popleft() lines.append(line) answer = prediction.handle(line.line) if lines and answer not in (RETURN_MATCH, RETURN_MATCH_END): self.lines.extendleft(reversed(lines)) elif answer is RETURN_MATCH_END: self.lines.appendleft(line) # re-test last line that didn't match return answer def run_command(self, text, show_reply=False): logtext = "*" * len(text) if self.telnet.sensitive else text log.debug(logtext, extra={"task": (self.telnet.name, "run_command")}) if self.lines.block_mode: # TODO: reuse id after command reply handled self.__command_id += 1 text = f"{self.__command_id} {text}" if show_reply: self.show_reply.add(self.__command_id) self.telnet.write(text) elif self.lines.datagram_mode: if show_reply: text = f"`{MY_ICC_PREFIX}`{text}" self.telnet.write("%s" % text) else: self.telnet.write("%s" % text) def cancel(self): self.run_command("quit") self.telnet.cancel() def close(self): # save played game (if there is any) if no moves made self.run_command("abort") self.run_command("quit") self.telnet.close() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/__init__.py0000755000175100001770000006261414614030313017537 0ustar00runnerdockerfrom gi.repository import Gtk from pychess import Variants from pychess.Utils.const import ( NORMALCHESS, ATOMICCHESS, BUGHOUSECHESS, CRAZYHOUSECHESS, LOSERSCHESS, SUICIDECHESS, FISCHERRANDOMCHESS, WILDCASTLESHUFFLECHESS, SHUFFLECHESS, RANDOMCHESS, ASYMMETRICRANDOMCHESS, WILDCASTLECHESS, UPSIDEDOWNCHESS, PAWNSPUSHEDCHESS, PAWNSPASSEDCHESS, GIVEAWAYCHESS, THREECHECKCHESS, ) IC_CONNECTED, IC_DISCONNECTED = range(2) # Fixed values of my relation to this game # http://www.freechess.org/Help/HelpFiles/style12.html ( IC_POS_INITIAL, IC_POS_ISOLATED, IC_POS_OBSERVING_EXAMINATION, IC_POS_OP_TO_MOVE, IC_POS_OBSERVING, IC_POS_ME_TO_MOVE, IC_POS_EXAMINATING, ) = range(-4, 3) # RatingType ( TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, TYPE_BUGHOUSE, TYPE_CRAZYHOUSE, TYPE_SUICIDE, TYPE_LOSERS, TYPE_ATOMIC, TYPE_BULLET, TYPE_ONE_MINUTE, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE, TYPE_CHESS960, TYPE_UNTIMED, TYPE_EXAMINED, TYPE_OTHER, ) = range(19) RATING_TYPES = ( TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_BULLET, TYPE_ONE_MINUTE, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE, TYPE_ATOMIC, TYPE_BUGHOUSE, TYPE_CRAZYHOUSE, TYPE_LOSERS, TYPE_SUICIDE, TYPE_WILD, TYPE_CHESS960, TYPE_UNTIMED, ) # Rating deviations DEVIATION_NONE, DEVIATION_ESTIMATED, DEVIATION_PROVISIONAL = range(3) ( IC_STATUS_PLAYING, IC_STATUS_ACTIVE, IC_STATUS_BUSY, IC_STATUS_OFFLINE, IC_STATUS_AVAILABLE, IC_STATUS_NOT_AVAILABLE, IC_STATUS_EXAMINING, IC_STATUS_IDLE, IC_STATUS_IN_TOURNAMENT, IC_STATUS_RUNNING_SIMUL_MATCH, IC_STATUS_UNKNOWN, ) = range(11) TITLES_RE = r"(?:\([A-Z*]+\))*" NAMES_RE = "[A-Za-z]+" DEVIATION = { "E": DEVIATION_ESTIMATED, "P": DEVIATION_PROVISIONAL, " ": DEVIATION_NONE, "": DEVIATION_NONE, } STATUS = { "^": IC_STATUS_PLAYING, " ": IC_STATUS_AVAILABLE, ".": IC_STATUS_IDLE, "#": IC_STATUS_EXAMINING, ":": IC_STATUS_NOT_AVAILABLE, "~": IC_STATUS_RUNNING_SIMUL_MATCH, "&": IC_STATUS_IN_TOURNAMENT, } class GameType: def __init__( self, fics_name, short_fics_name, rating_type, display_text=None, variant_type=NORMALCHESS, ): self.fics_name = fics_name self.short_fics_name = short_fics_name self.rating_type = rating_type if display_text: self.display_text = display_text self.variant_type = variant_type @property def variant(self): return Variants.variants[self.variant_type] def __repr__(self): s = "= 0 and gain >= 0 gainminutes = gain > 0 and (gain * 60) - 1 or 0 if minutes == 0 and gain == 0: return GAME_TYPES["untimed"] elif (minutes * 60) + gainminutes >= (15 * 60): return GAME_TYPES["standard"] elif (minutes * 60) + gainminutes >= (3 * 60): return GAME_TYPES["blitz"] else: return GAME_TYPES["lightning"] ( TYPE_ADMINISTRATOR, TYPE_BLINDFOLD, TYPE_COMPUTER, TYPE_TEAM, TYPE_UNREGISTERED, TYPE_CHESS_ADVISOR, TYPE_SERVICE_REPRESENTATIVE, TYPE_TOURNAMENT_DIRECTOR, TYPE_MAMER_MANAGER, TYPE_GRAND_MASTER, TYPE_INTERNATIONAL_MASTER, TYPE_FIDE_MASTER, TYPE_WOMAN_GRAND_MASTER, TYPE_WOMAN_INTERNATIONAL_MASTER, TYPE_WOMAN_FIDE_MASTER, TYPE_DUMMY_ACCOUNT, TYPE_CANDIDATE_MASTER, TYPE_FIDE_ARBEITER, TYPE_NATIONAL_MASTER, TYPE_DISPLAY_MASTER, ) = range(20) TITLE_TYPE_DISPLAY_TEXTS = ( _("Administrator"), _("Blindfold Account"), _("Computer"), _("Team Account"), _("Unregistered"), _("Chess Advisor"), _("Service Representative"), _("Tournament Director"), _("Mamer Manager"), _("Grand Master"), _("International Master"), _("FIDE Master"), _("Woman Grand Master"), _("Woman International Master"), _("Woman FIDE Master"), _("Dummy Account"), _("Candidate Master"), _("FIDE Arbeiter"), _("National Master"), _("Display Master"), ) TITLE_TYPE_DISPLAY_TEXTS_SHORT = ( _("*"), _("B"), _("C"), _("T"), _("U"), _("CA"), _("SR"), _("TD"), _("TM"), _("GM"), _("IM"), _("FM"), _("WGM"), _("WIM"), _("WFM"), _("D"), _("H"), _("CM"), _("FA"), _("NM"), _("DM"), ) TITLES = { # From FICS 'help who' "*": TYPE_ADMINISTRATOR, "B": TYPE_BLINDFOLD, "C": TYPE_COMPUTER, "T": TYPE_TEAM, "U": TYPE_UNREGISTERED, "CA": TYPE_CHESS_ADVISOR, "SR": TYPE_SERVICE_REPRESENTATIVE, "TD": TYPE_TOURNAMENT_DIRECTOR, "TM": TYPE_MAMER_MANAGER, "GM": TYPE_GRAND_MASTER, "IM": TYPE_INTERNATIONAL_MASTER, "FM": TYPE_FIDE_MASTER, "WFM": TYPE_WOMAN_FIDE_MASTER, "WIM": TYPE_WOMAN_INTERNATIONAL_MASTER, "WGM": TYPE_WOMAN_GRAND_MASTER, "D": TYPE_DUMMY_ACCOUNT, "H": TYPE_SERVICE_REPRESENTATIVE, "CM": TYPE_CANDIDATE_MASTER, "FA": TYPE_FIDE_ARBEITER, "NM": TYPE_NATIONAL_MASTER, "DM": TYPE_DISPLAY_MASTER, } HEX_TO_TITLE = { 0x1: TYPE_UNREGISTERED, 0x2: TYPE_COMPUTER, 0x4: TYPE_GRAND_MASTER, 0x8: TYPE_INTERNATIONAL_MASTER, 0x10: TYPE_FIDE_MASTER, 0x20: TYPE_WOMAN_GRAND_MASTER, 0x40: TYPE_WOMAN_INTERNATIONAL_MASTER, 0x80: TYPE_WOMAN_FIDE_MASTER, } def parse_title_hex(titlehex): titles = set() for key in HEX_TO_TITLE: if int(titlehex, 16) & key: titles.add(HEX_TO_TITLE[key]) return titles def parseRating(rating): if rating[0] == " ": rating = rating[1:] if rating[-1].isalpha(): rating = rating[:-1] return int(rating) if rating.isdigit() else 0 def get_infobarmessage_content(player, text, gametype=None): content = Gtk.HBox() icon = Gtk.Image() icon.set_from_pixbuf(player.getIcon(size=32, gametype=gametype)) content.pack_start(icon, False, False, 4) label = Gtk.Label() label.set_markup(player.getMarkup(gametype=gametype)) content.pack_start(label, False, False, 0) label = Gtk.Label() label.set_markup(text) content.pack_start(label, False, False, 0) return content def get_infobarmessage_content2(player, heading_text, message_text, gametype=None): hbox = Gtk.HBox() image = Gtk.Image() image.set_from_pixbuf(player.getIcon(size=24, gametype=gametype)) hbox.pack_start(image, False, False, 0) label = Gtk.Label() markup = player.getMarkup(gametype=gametype, long_titles=False) label.set_markup(markup + heading_text) hbox.pack_start(label, False, False, 0) vbox = Gtk.VBox() vbox.pack_start(hbox, False, False, 0) label = Gtk.Label() label.props.xalign = 0 label.props.xpad = 4 label.props.justify = Gtk.Justification.LEFT label.props.wrap = True label.set_width_chars(70) label.set_text(message_text) vbox.pack_start(label, False, False, 5) return vbox """ Internal command codes used in FICS block mode (see "help block_codes" and "help iv_block"). Used mostly by internal library functions. BLOCK_ variables are message boundary markers. BLKCMD_ variables are command codes. """ BLOCK_START = chr(21) # \U BLOCK_SEPARATOR = chr(22) # \V BLOCK_END = chr(23) # \W BLOCK_POSE_START = chr(24) # \X BLOCK_POSE_END = chr(25) # \Y BLKCMD_NULL = 0 BLKCMD_GAME_MOVE = 1 BLKCMD_ABORT = 10 BLKCMD_ACCEPT = 11 BLKCMD_ADDLIST = 12 BLKCMD_ADJOURN = 13 BLKCMD_ALLOBSERVERS = 14 BLKCMD_ASSESS = 15 BLKCMD_BACKWARD = 16 BLKCMD_BELL = 17 BLKCMD_BEST = 18 BLKCMD_BNAME = 19 BLKCMD_BOARDS = 20 BLKCMD_BSETUP = 21 BLKCMD_BUGWHO = 22 BLKCMD_CBEST = 23 BLKCMD_CLEARMESSAGES = 24 BLKCMD_CLRSQUARE = 25 BLKCMD_CONVERT_BCF = 26 BLKCMD_CONVERT_ELO = 27 BLKCMD_CONVERT_USCF = 28 BLKCMD_COPYGAME = 29 BLKCMD_CRANK = 30 BLKCMD_CSHOUT = 31 BLKCMD_DATE = 32 BLKCMD_DECLINE = 33 BLKCMD_DRAW = 34 BLKCMD_ECO = 35 BLKCMD_EXAMINE = 36 BLKCMD_FINGER = 37 BLKCMD_FLAG = 38 BLKCMD_FLIP = 39 BLKCMD_FMESSAGE = 40 BLKCMD_FOLLOW = 41 BLKCMD_FORWARD = 42 BLKCMD_GAMES = 43 BLKCMD_GETGI = 44 BLKCMD_GETPI = 45 BLKCMD_GINFO = 46 BLKCMD_GOBOARD = 47 BLKCMD_HANDLES = 48 BLKCMD_HBEST = 49 BLKCMD_HELP = 50 BLKCMD_HISTORY = 51 BLKCMD_HRANK = 52 BLKCMD_INCHANNEL = 53 BLKCMD_INDEX = 54 BLKCMD_INFO = 55 BLKCMD_ISET = 56 BLKCMD_IT = 57 BLKCMD_IVARIABLES = 58 BLKCMD_JKILL = 59 BLKCMD_JOURNAL = 60 BLKCMD_JSAVE = 61 BLKCMD_KIBITZ = 62 BLKCMD_LIMITS = 63 BLKCMD_LINE = 64 # Not on FICS BLKCMD_LLOGONS = 65 BLKCMD_LOGONS = 66 BLKCMD_MAILHELP = 67 BLKCMD_MAILMESS = 68 BLKCMD_MAILMOVES = 69 BLKCMD_MAILOLDMOVES = 70 BLKCMD_MAILSOURCE = 71 BLKCMD_MAILSTORED = 72 BLKCMD_MATCH = 73 BLKCMD_MESSAGES = 74 BLKCMD_MEXAMINE = 75 BLKCMD_MORETIME = 76 BLKCMD_MOVES = 77 BLKCMD_NEWS = 78 BLKCMD_NEXT = 79 BLKCMD_OBSERVE = 80 BLKCMD_OLDMOVES = 81 BLKCMD_OLDSTORED = 82 BLKCMD_OPEN = 83 BLKCMD_PARTNER = 84 BLKCMD_PASSWORD = 85 BLKCMD_PAUSE = 86 BLKCMD_PENDING = 87 BLKCMD_PFOLLOW = 88 BLKCMD_POBSERVE = 89 BLKCMD_PREFRESH = 90 BLKCMD_PRIMARY = 91 BLKCMD_PROMOTE = 92 BLKCMD_PSTAT = 93 BLKCMD_PTELL = 94 BLKCMD_PTIME = 95 BLKCMD_QTELL = 96 BLKCMD_QUIT = 97 BLKCMD_RANK = 98 BLKCMD_RCOPYGAME = 99 BLKCMD_RFOLLOW = 100 BLKCMD_REFRESH = 101 BLKCMD_REMATCH = 102 BLKCMD_RESIGN = 103 BLKCMD_RESUME = 104 BLKCMD_REVERT = 105 BLKCMD_ROBSERVE = 106 BLKCMD_SAY = 107 BLKCMD_SERVERS = 108 BLKCMD_SET = 109 BLKCMD_SHOUT = 110 BLKCMD_SHOWLIST = 111 BLKCMD_SIMABORT = 112 BLKCMD_SIMALLABORT = 113 BLKCMD_SIMADJOURN = 114 BLKCMD_SIMALLADJOURN = 115 BLKCMD_SIMGAMES = 116 BLKCMD_SIMMATCH = 117 BLKCMD_SIMNEXT = 118 BLKCMD_SIMOBSERVE = 119 BLKCMD_SIMOPEN = 120 BLKCMD_SIMPASS = 121 BLKCMD_SIMPREV = 122 BLKCMD_SMOVES = 123 BLKCMD_SMPOSITION = 124 BLKCMD_SPOSITION = 125 BLKCMD_STATISTICS = 126 BLKCMD_STORED = 127 BLKCMD_STYLE = 128 BLKCMD_SWITCH = 130 BLKCMD_TAKEBACK = 131 BLKCMD_TELL = 132 BLKCMD_TIME = 133 BLKCMD_TOMOVE = 134 BLKCMD_TOURNSET = 135 BLKCMD_UNALIAS = 136 BLKCMD_UNEXAMINE = 137 BLKCMD_UNOBSERVE = 138 BLKCMD_UNPAUSE = 139 BLKCMD_UPTIME = 140 BLKCMD_USCF = 141 BLKCMD_USTAT = 142 BLKCMD_VARIABLES = 143 BLKCMD_WHENSHUT = 144 BLKCMD_WHISPER = 145 BLKCMD_WHO = 146 BLKCMD_WITHDRAW = 147 BLKCMD_WNAME = 148 BLKCMD_XKIBITZ = 149 BLKCMD_XTELL = 150 BLKCMD_XWHISPER = 151 BLKCMD_ZNOTIFY = 152 BLKCMD_REPLY = 153 # Not on FICS BLKCMD_SUMMON = 154 BLKCMD_SEEK = 155 BLKCMD_UNSEEK = 156 BLKCMD_SOUGHT = 157 BLKCMD_PLAY = 158 BLKCMD_ALIAS = 159 BLKCMD_NEWBIES = 160 BLKCMD_SR = 161 BLKCMD_CA = 162 BLKCMD_TM = 163 BLKCMD_GETGAME = 164 BLKCMD_CCNEWSE = 165 BLKCMD_CCNEWSF = 166 BLKCMD_CCNEWSI = 167 BLKCMD_CCNEWSP = 168 BLKCMD_CCNEWST = 169 BLKCMD_CSNEWSE = 170 BLKCMD_CSNEWSF = 171 BLKCMD_CSNEWSI = 172 BLKCMD_CSNEWSP = 173 BLKCMD_CSNEWST = 174 BLKCMD_CTNEWSE = 175 BLKCMD_CTNEWSF = 176 BLKCMD_CTNEWSI = 177 BLKCMD_CTNEWSP = 178 BLKCMD_CTNEWST = 179 BLKCMD_CNEWS = 180 BLKCMD_SNEWS = 181 BLKCMD_TNEWS = 182 BLKCMD_RMATCH = 183 BLKCMD_RSTAT = 184 BLKCMD_CRSTAT = 185 BLKCMD_HRSTAT = 186 BLKCMD_GSTAT = 187 # Note admin codes start from 300. BLKCMD_ERROR_BADCOMMAND = 512 BLKCMD_ERROR_BADPARAMS = 513 BLKCMD_ERROR_AMBIGUOUS = 514 BLKCMD_ERROR_RIGHTS = 515 BLKCMD_ERROR_OBSOLETE = 516 BLKCMD_ERROR_REMOVED = 517 BLKCMD_ERROR_NOTPLAYING = 518 BLKCMD_ERROR_NOSEQUENCE = 519 BLKCMD_ERROR_LENGTH = 520 LIMIT_BLKCMD_ERRORS = 500 FICS_COMMANDS = [ "abort", "accept", "addlist", "adjourn", "alias", "allobservers", "assess", "backward", "bell", "best", "boards", "bsetup", "bugwho", "cbest", "clearmessages", "convert_bcf", "convert_elo", "convert_uscf", "copygame", "crank", "cshout", "date", "decline", "draw", "examine", "finger", "flag", "flip", "fmessage", "follow", "forward", "games", "gnotify", "goboard", "handles", "hbest", "help", "history", "hrank", "inchannel", "index", "info", "it", "jkill", "jsave", "kibitz", "limits", "llogons", "logons", "mailhelp", "mailmess", "mailmoves", "mailoldmoves", "mailsource", "mailstored", "match", "messages", "mexamine", "moretime", "moves", "news", "next", "observe", "oldmoves", "open", "password", "pause", "pending", "pfollow", "play", "pobserve", "promote", "pstat", "qtell", "quit", "rank", "refresh", "resign", "resume", "revert", "say", "seek", "servers", "set", "shout", "showlist", "simabort", "simallabort", "simadjourn", "simalladjourn", "simgames", "simmatch", "simnext", "simobserve", "simopen", "simpass", "simprev", "smoves", "smposition", "sought", "sposition", "statistics", "stored", "style", "sublist", "switch", "takeback", "tell", "time", "unalias", "unexamine", "unobserve", "unpause", "unseek", "uptime", "ustat", "variables", "whisper", "who", "withdraw", "xkibitz", "xtell", "xwhisper", "znotify", ] FICS_HELP = [ "_index", "abort", "abuse", "academy", "accept", "addlist", "addresses", "adjourn", "adjournments", "adjudicate", "adjudication", "adm_app", "adm_info", "adm_new", "admins", "alias", "allobservers", "assess", "atomic", "audiochat", "avail_vars", "backward", "bclock", "bell", "best", "blind", "blindfold", "blindh", "blitz", "block_codes", "bname", "boards", "brating", "bsetup", "bughouse", "bughouse_strat", "bugreport", "bugwho", "busy", "ca", "category", "cbest", "censor", "chan_1", "chan_4", "channel", "channel_list", "channels", "chess_adviser", "chess_advisor", "clearmessage", "clearmessages", "clock", "clocks", "clrsquare", "cls", "cls_info", "command", "commands", "commit", "computer_app", "computer_list", "computers", "confidentiality", "convert_bcf", "convert_elo", "convert_uscf", "copygame", "crank", "crazyhouse", "crazyhouse_strat", "credit", "crstat", "cshout", "csnewse", "csnewsf", "csnewsi", "csnewsp", "csnewst", "date", "decline", "disclaimer", "disconnection", "draw", "eco", "eggo", "email", "etime", "examine", "exl", "fen", "fics_faq", "fics_lingo", "finger", "flag", "flip", "fmessage", "follow", "formula", "forward", "fr", "fr_rules", "ftp_hints", "games", "games", "getgame", "getgi", "getpi", "ginfo", "glicko", "gnotify", "goboard", "handle", "handles", "hbest", "help", "highlight", "history", "hrank", "hrstat", "hstat", "icsdrone", "idlenotify", "inchannel", "index", "indexfile", "inetchesslib", "info", "intellegence", "interfaces", "intro_analysis", "intro_basics", "intro_general", "intro_information", "intro_moving", "intro_playing", "intro_settings", "intro_talking", "intro_welcome", "irc_help", "iset", "it", "iv_allresults", "iv_atomic", "iv_audiochat", "iv_block", "iv_boardinfo", "iv_compressmove", "iv_crazyhouse", "iv_defprompt", "iv_extascii", "iv_extuserinfo", "iv_fr", "iv_gameinfo", "iv_graph", "iv_list", "iv_lock", "iv_pendinfo", "iv_seekinfo", "iv_seekremove", "iv_startpos", "ivariables", "jkill", "journal", "jsave", "kibitz", "kiblevel", "lag", "lecture1", "lessons", "lightning", "limits", "links", "lists", "llogons", "logons", "losers", "losers_chess", "mailhelp", "mailmess", "mailmoves", "mailoldmoves", "mailstored", "mamer", "manual_usage", "manual_vars", "match", "meeting_1_followup", "meeting_1_long", "meeting_1_short", "meetings_index", "messages", "mexamine", "moretime", "motd", "motd_fri", "motd_help", "motd_mon", "motd_sat", "motd_sun", "motd_thu", "motd_tue", "motd_wed", "moves", "mule", "new_features", "newbie", "news", "next", "noescape", "noplay", "notes", "notify", "observe", "odds", "oldmoves", "oldpstat", "open", "partner", "password", "pause", "pending", "pfollow", "pgn", "ping", "play", "pobserve", "powericsfaq", "prefresh", "primary", "private", "promote", "pstat", "ptell", "ptime", "qtell", "quit", "rank", "rating_changes", "ratings", "rcopygame", "rd", "refresh", "register", "relay", "relay_operator", "rematch", "replay", "resign", "result", "resume", "revert", "rfollow", "rmatch", "robofics", "robserve", "rstat", "sabort", "say", "sdraw", "seek", "servers", "set", "setup", "shout", "shout_quota", "showadmins", "showlist", "showsrs", "simabort", "simadjourn", "simallabort", "simalladjourn", "simgames", "simmatch", "simnext", "simobserve", "simopen", "simpass", "simprev", "simuls", "skype", "smoves", "smposition", "sought", "spending", "sposition", "sr", "sr_info", "standard", "statistics", "stats", "stc", "stored", "style", "style12", "sublist", "suicide_chess", "summon", "switch", "system_alias", "takeback", "team", "teamgames", "tell", "time", "timeseal", "timeseal_mac", "timeseal_os2", "timeseal_unix", "timeseal_windows", "timezones", "tm", "tomove", "totals", "totals_info", "tournset", "town_meetings", "townmtg1", "unalias", "unexamine", "unobserve", "unpause", "unseek", "untimed", "uptime", "uscf", "uscf_faq", "ustat", "v_autoflag", "v_automail", "v_availinfo", "v_availmax", "v_availmin", "v_bell", "v_bugopen", "v_chanoff", "v_cshout", "v_ctell", "v_echo", "v_flip", "v_formula", "v_gin", "v_height", "v_highlight", "v_inc", "v_interface", "v_jprivate", "v_kibitz", "v_kiblevel", "v_language", "v_mailmess", "v_messreply", "v_notakeback", "v_notifiedby", "v_open", "v_pgn", "v_pin", "v_private", "v_prompt", "v_provshow", "v_ptime", "v_rated", "v_ropen", "v_seek", "v_shout", "v_silence", "v_simopen", "v_style", "v_tell", "v_time", "v_tolerance", "v_tourney", "v_tzone", "v_unobserve", "v_width", "variables", "wclock", "webpage", "whenshut", "whisper", "who", "wild", "withdraw", "wname", "wrating", "xkibitz", "xtell", "xwhisper", "zhouse", "znotify", ] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/icc.py0000644000175100001770000001575414614030313016536 0ustar00runnerdocker""" Internal datagram codes used in ICC level 2. unit format see https://www.chessclub.com/user/resources/formats/formats.txt This is somewhat similar to fics block mode. The main difference is fics block mode works 'all or nothing' meaning when you switch to use it all commands you send and resposes you get have to (or will) use it. ICC datagram format are used for responses only and is more forgiving. You can set it for individual responses one by one or for all at once at login time. """ MY_ICC_PREFIX = "#" UNIT_START = chr(25) + "[" UNIT_END = chr(25) + "]" B_UNIT_END = b"\x19]" DTGR_START = chr(25) + "(" DTGR_END = chr(25) + ")" B_DTGR_END = b"\x19)" DG_WHO_AM_I = 0 DG_PLAYER_ARRIVED = 1 DG_PLAYER_LEFT = 2 DG_BULLET = 3 DG_BLITZ = 4 DG_STANDARD = 5 DG_WILD = 6 DG_BUGHOUSE = 7 DG_TIMESTAMP = 8 DG_TITLES = 9 DG_OPEN = 10 DG_STATE = 11 DG_GAME_STARTED = 12 DG_GAME_RESULT = 13 DG_EXAMINED_GAME_IS_GONE = 14 DG_MY_GAME_STARTED = 15 DG_MY_GAME_RESULT = 16 DG_MY_GAME_ENDED = 17 DG_STARTED_OBSERVING = 18 DG_STOP_OBSERVING = 19 DG_PLAYERS_IN_MY_GAME = 20 DG_OFFERS_IN_MY_GAME = 21 DG_TAKEBACK = 22 DG_BACKWARD = 23 DG_SEND_MOVES = 24 DG_MOVE_LIST = 25 DG_KIBITZ = 26 DG_PEOPLE_IN_MY_CHANNEL = 27 DG_CHANNEL_TELL = 28 DG_MATCH = 29 DG_MATCH_REMOVED = 30 DG_PERSONAL_TELL = 31 DG_SHOUT = 32 DG_MOVE_ALGEBRAIC = 33 DG_MOVE_SMITH = 34 DG_MOVE_TIME = 35 DG_MOVE_CLOCK = 36 DG_BUGHOUSE_HOLDINGS = 37 DG_SET_CLOCK = 38 DG_FLIP = 39 DG_ISOLATED_BOARD = 40 DG_REFRESH = 41 DG_ILLEGAL_MOVE = 42 DG_MY_RELATION_TO_GAME = 43 DG_PARTNERSHIP = 44 DG_SEES_SHOUTS = 45 DG_CHANNELS_SHARED = 46 DG_MY_VARIABLE = 47 DG_MY_STRING_VARIABLE = 48 DG_JBOARD = 49 DG_SEEK = 50 DG_SEEK_REMOVED = 51 DG_MY_RATING = 52 DG_SOUND = 53 DG_PLAYER_ARRIVED_SIMPLE = 55 DG_MSEC = 56 DG_BUGHOUSE_PASS = 57 DG_IP = 58 DG_CIRCLE = 59 DG_ARROW = 60 DG_MORETIME = 61 DG_PERSONAL_TELL_ECHO = 62 DG_SUGGESTION = 63 DG_NOTIFY_ARRIVED = 64 DG_NOTIFY_LEFT = 65 DG_NOTIFY_OPEN = 66 DG_NOTIFY_STATE = 67 DG_MY_NOTIFY_LIST = 68 DG_LOGIN_FAILED = 69 DG_FEN = 70 DG_TOURNEY_MATCH = 71 DG_GAMELIST_BEGIN = 72 DG_GAMELIST_ITEM = 73 DG_IDLE = 74 DG_ACK_PING = 75 DG_RATING_TYPE_KEY = 76 DG_GAME_MESSAGE = 77 DG_UNACCENTED = 78 DG_STRINGLIST_BEGIN = 79 DG_STRINGLIST_ITEM = 80 DG_DUMMY_RESPONSE = 81 DG_CHANNEL_QTELL = 82 DG_PERSONAL_QTELL = 83 DG_SET_BOARD = 84 DG_MATCH_ASSESSMENT = 85 DG_LOG_PGN = 86 DG_NEW_MY_RATING = 87 DG_LOSERS = 88 DG_UNCIRCLE = 89 DG_UNARROW = 90 DG_WSUGGEST = 91 DG_TEMPORARY_PASSWORD = 93 DG_MESSAGELIST_BEGIN = 94 DG_MESSAGELIST_ITEM = 95 DG_LIST = 96 DG_SJI_AD = 97 DG_RETRACT = 99 DG_MY_GAME_CHANGE = 100 DG_POSITION_BEGIN = 101 DG_TOURNEY = 103 DG_REMOVE_TOURNEY = 104 DG_DIALOG_START = 105 DG_DIALOG_DATA = 106 DG_DIALOG_DEFAULT = 107 DG_DIALOG_END = 108 DG_DIALOG_RELEASE = 109 DG_POSITION_BEGIN2 = 110 DG_PAST_MOVE = 111 DG_PGN_TAG = 112 DG_IS_VARIATION = 113 DG_PASSWORD = 114 DG_WILD_KEY = 116 DG_SWITCH_SERVERS = 120 DG_CRAZYHOUSE = 121 DG_SET2 = 124 DG_FIVEMINUTE = 125 DG_ONEMINUTE = 126 DG_TRANSLATIONOKAY = 129 DG_UID = 131 DG_KNOWS_FISCHER_RANDOM = 132 DG_COMMAND = 136 DG_TOURNEY_GAME_STARTED = 137 DG_TOURNEY_GAME_ENDED = 138 DG_MY_TURN = 139 DG_CORRESPONDENCE_RATING = 140 DG_DISABLE_PREMOVE = 141 DG_PSTAT = 142 DG_BOARDINFO = 143 DG_MOVE_LAG = 144 DG_FIFTEENMINUTE = 145 DG_PHRASELIST_UPDATE = 146 DG_PHRASELIST_ITEM = 147 DG_MENU_SPEAK = 148 DG_THREEMINUTE = 149 DG_FORTYFIVEMINUTE = 150 DG_CHESS960 = 151 SCN_UNKNOWN = 0 SCN_ILLEGAL_MOVE = 1 SCN_MOVE = 2 SCN_EDIT_EXAMINED = 3 SCN_PING_RESPONSE = 10 SCN_WEIRD = 11 SCN_REALLY_LOG_IN = 12 SCN_MOED = 13 SCN_EVENTS = 14 SCN_NEWS = 15 SCN_LOGOUT = 16 SCN_TIMEOUT = 17 SCN_CONNECT = 18 SCN_REALLY_QUIT = 19 SCN_LOGIN = 20 SCN_PASSWORD = 21 SCN_REGISTRATION = 22 SCN_EXTENSION = 23 SCN_AUTHENTICATION = 24 SCN_BAD = 25 SCN_AUTOMATIC = 26 SCN_CONFIRM = 27 SCN_MULTI_DISCARD = 28 SCN_IDLE = 29 SCN_ACK_PING = 30 SCN_MISCELLANEOUS = 31 CN_TELL = 101 CN_I = 102 CN_SHOUT = 103 CN_SHOUT0 = 104 CN_SLASH = 105 CN_WHO = 106 CN_SET = 107 CN_FLAG = 108 CN_SAY = 109 CN_CHANNELTELL = 110 CN_SSHOUT = 111 CN_BAD = 112 CN_KIBITZ = 113 CN_WHISPER = 114 CN_EXAMINE = 115 CN_MEXAMINE = 116 CN_COPYGAME0 = 117 CN_COPYGAME = 118 CN_FORWARD = 119 CN_BACK = 120 CN_MATCH = 121 CN_MATCH0 = 122 CN_ACCEPT = 123 CN_HELP0 = 124 CN_HELP = 125 CN_MORE = 126 CN_NEWS = 127 CN_NEWS0 = 128 CN_HISTORY = 129 CN_FINGER = 130 CN_VARS = 131 CN_UPSTATISTICS = 132 CN_UNEXAMINE = 133 CN_ADJOURN = 134 CN_ASSESS = 135 CN_OBSERVE0 = 136 CN_OBSERVE = 137 CN_FOLLOW0 = 138 CN_FOLLOW = 139 CN_ECO = 140 CN_STYLE = 141 CN_BELL = 142 CN_OPEN = 143 CN_DECLINE = 144 CN_REFRESH = 145 CN_RESIGNADJ = 146 CN_REVERT = 147 CN_RATED = 148 CN_RANK = 149 CN_MOVES = 150 CN_MAILOLDMOVES = 151 CN_MAILSTORED = 152 CN_MAILHELP = 153 CN_PENDING = 154 CN_GAMES = 155 CN_ABORT = 156 CN_ALLOBSERVERS = 157 CN_INCHANNEL = 158 CN_INFO = 159 CN_MORETIME = 160 CN_BEST = 161 CN_QUIT = 162 CN_QUOTA = 163 CN_LLOGONS = 164 CN_LHISTORY = 165 CN_LOGONS = 166 CN_TIME = 167 CN_TAKEBACK = 168 CN_SEARCH = 169 CN_SEARCH0 = 170 CN_SMOVES = 171 CN_SPOSITION = 172 CN_PASSWORD = 173 CN_MESSAGE = 174 CN_MESSAGE0 = 175 CN_CLEARMESSAGES = 176 CN_DATE = 177 CN_LIST = 178 CN_PLUS = 179 CN_MINUS = 180 CN_ZNOTL = 181 CN_FLIP = 182 CN_PROMOTE = 183 CN_EXPUNGE = 184 CN_IWCMATCH = 185 CN_LIMITS = 186 CN_PING = 187 CN_EXTEND = 188 CN_QTELL = 189 CN_GETPI = 190 CN_STARTSIMUL = 191 CN_GOTO = 192 CN_SETCLOCK = 193 CN_LIBLIST = 194 CN_LIBSAVE = 195 CN_LIBDELETE = 196 CN_LIBANNOTATE = 197 CN_LIBKEEPEXAM = 198 CN_PARTNER = 199 CN_PARTNER0 = 200 CN_PTELL = 201 CN_BUGWHO = 202 CN_WILDRANK = 204 CN_XOBSERVE = 205 CN_PRIMARY = 206 CN_DRAW = 207 CN_RESIGN = 208 CN_STATISTICS = 209 CN_STORED = 210 CN_CHANNELQTELL = 211 CN_XPARTNER = 212 CN_YFINGER = 213 CN_SEEKING = 214 CN_SOUGHT = 215 CN_SET2 = 216 CN_PLAY = 217 CN_UNSEEKING = 218 CN_AWAY = 219 CN_LAGSTATS = 220 CN_COMMANDS = 221 CN_REMATCH = 222 CN_REGISTER = 223 CN_RESUME = 224 CN_CIRCLE = 225 CN_ARROW = 226 CN_BLANKING = 227 CN_RELAY = 228 CN_LOADGAME = 229 CN_DRAWADJ = 230 CN_ABORTADJ = 231 CN_MAILNEWS = 232 CN_QSET = 233 CN_CC_START = 234 CN_CC_LIST = 235 CN_CC_MOVE = 236 CN_CC_DELETE = 237 CN_CC_QSTART = 238 CN_CC_QLIST = 239 CN_CC_QLABEL = 240 CN_CC_QDELETE = 241 CN_CC_QADJUDICATE = 242 CN_CC_ASK_DIRECTOR = 243 CN_LOADFEN = 244 CN_GETPX = 245 CN_UNRELAYED = 246 CN_NORELAY = 247 CN_REFER = 248 CN_PGN = 249 CN_SPGN = 250 CN_QFOLLOW = 251 CN_QUNFOLLOW = 252 CN_QMATCH = 253 CN_QPARTNER = 254 CN_ISREGNAME = 255 CN_REQUIRETICKET = 256 CN_ANNOTATE = 257 CN_CLEARBOARD = 258 CN_REQUEST_WIN = 259 CN_REQUEST_DRAW = 260 CN_REQUEST_ABORT = 261 CN_LOGPGN = 262 CN_RESULT = 263 CN_FEN = 264 CN_SFEN = 265 CN_SETGAMEPARAM = 266 CN_TAG = 267 CN_TOMOVE = 268 CN_REGENTRY = 269 CN_PERSONALINFO = 270 CN_EVENTS = 271 CN_QADDEVENT = 272 CN_GLISTGROUPS = 273 CN_GLISTMEMBERS = 274 CN_GINVITE = 275 CN_GJOIN = 276 CN_GLISTINVITED = 277 CN_GLISTJOINING = 278 CN_GDESCRIBE = 279 CN_GKICK = 280 CN_GBEST = 281 CN_SIMULIZE = 282 CN_GAMEID = 283 CN_THREEMIN = 92 CN_FIVEMINUTE = 284 CN_QIMPART = 285 CN_GMESSAGE = 286 CN_COMPLAIN = 287 CN_LASTTELLS = 288 CN_VIEW = 289 CN_SHOWADMIN = 290 CN_PSTAT = 291 CN_BOARDINFO = 292 ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9014769 pychess-1.0.5/lib/pychess/ic/managers/0000755000175100001770000000000014614030425017213 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/AdjournManager.py0000755000175100001770000003674214614030313022475 0ustar00runnerdockerimport datetime from gi.repository import GObject from .BoardManager import names, months, dates from pychess.ic import ( GAME_TYPES_BY_SHORT_FICS_NAME, BLKCMD_STORED, BLKCMD_HISTORY, BLKCMD_JOURNAL, ) from pychess.ic.FICSObjects import FICSAdjournedGame, FICSHistoryGame, FICSJournalGame from pychess.Utils.const import ( WON_ADJUDICATION, DRAW_AGREE, WON_DISCONNECTION, WON_CALLFLAG, WON_MATE, DRAW_INSUFFICIENT, DRAW_REPETITION, WON_RESIGN, DRAW_STALEMATE, DRAW_BLACKINSUFFICIENTANDWHITETIME, WON_NOMATERIAL, DRAW_50MOVES, WHITEWON, DRAW, BLACK, WHITE, BLACKWON, reprResult, ADJOURNED, ) from pychess.System.Log import log reasons_dict = { "Adj": WON_ADJUDICATION, "Agr": DRAW_AGREE, "Dis": WON_DISCONNECTION, "Fla": WON_CALLFLAG, "Mat": WON_MATE, "NM": DRAW_INSUFFICIENT, "Rep": DRAW_REPETITION, "Res": WON_RESIGN, "Sta": DRAW_STALEMATE, "TM": DRAW_BLACKINSUFFICIENTANDWHITETIME, # DRAW_WHITEINSUFFICIENTANDBLACKTIME "WLM": WON_NOMATERIAL, "WNM": WON_NOMATERIAL, "50": DRAW_50MOVES, } reasons = "(%s)" % "|".join(reasons_dict.keys()) ratings = r"([0-9\ \-\+]{1,4}[P E]?|UNR)" class AdjournManager(GObject.GObject): __gsignals__ = { "adjournedGameAdded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onAdjournmentsList": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "historyGameAdded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onHistoryList": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "journalGameAdded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onJournalList": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line( self.__onStoredResponseNO, r"%s has no adjourned games\." % names ) self.connection.expect_line( self.__onHistoryResponseNO, r"%s has no history games\." % names ) self.connection.expect_line( self.__onJournalResponseNO, r"(%s has no journal entries\.)|(That journal is private.)" % names, ) self.connection.expect_fromABplus( self.__onStoredResponseYES, "Stored games for %s:" % names, r"\s*C Opponent\s+On Type\s+Str\s+M\s+ECO\s+Date", r"\s*\d+: (B|W) %s\s+(Y|N) \[([a-z ]{3})\s+(\d+)\s+(\d+)\]\s+(\d+)-(\d+)\s+(W|B)(\d+)\s+(---|\?\?\?|\*\*\*|[A-Z]\d+)\s+%s" % (names, dates), ) self.connection.expect_fromABplus( self.__onHistoryResponseYES, "History for %s:" % names, r"\s*Opponent\s+Type\s+ECO\s+End\s+Date", r"\s*(\d+): (-|\+|=)\s+(\d+)\s+(W|B)\s+(\d+) %s\s+\[([a-z ]{3})\s*(\d+)\s+(\d+)\]\s+(---|\?\?\?|\*\*\*|[A-Z]\d+)\s+%s\s+%s" % (names, reasons, dates), ) self.connection.expect_fromABplus( self.__onJournalResponseYES, "Journal for %s:" % names, r"\s*White\s+Rating\s+Black\s+Rating\s+Type\s+ECO\s+End\s+Result", r"\s*%%(\d+): %s\s+%s\s+%s\s+%s\s+\[([a-z ]{3})\s+(\d+)\s+(\d+)\]\s+(---|\?\?\?|\*\*\*|[A-Z]\d+)\s+%s\s+(\*|1/2-1/2|1-0|0-1)" % (names, ratings, names, ratings, reasons), ) self.connection.expect_line( self.__onAdjournedGameResigned, r"You have resigned the game\." ) self.connection.bm.connect("curGameEnded", self.__onCurGameEnded) self.queryAdjournments() self.queryHistory() self.queryJournal() # TODO: Connect to {Game 67 (MAd vs. Sandstrom) Game adjourned by mutual agreement} * # TODO: Connect to adjourned game as adjudicated def __onStoredResponseYES(self, matchlist): # Stored games for User: # C Opponent On Type Str M ECO Date # 1: W TheDane N [ br 2 12] 0-0 B2 ??? Sun Nov 23, 6:14 CST 1997 # 2: W PyChess Y [psu 2 12] 39-39 W3 C20 Sun Jan 11, 17:40 ??? 2009 # 3: B cjavad N [ wr 2 2] 31-31 W18 --- Wed Dec 23, 06:58 PST 2009 self.connection.stored_owner = matchlist[0].groups()[0] adjournments = [] for match in matchlist[2:]: our_color = match.groups()[0] opponent_name, opponent_online = match.groups()[1:3] game_type = match.groups()[3] minutes, gain = match.groups()[4:6] str_white, str_black = match.groups()[6:8] next_color = match.groups()[8] move_num = match.groups()[9] week, month, day, hour, minute, timezone, year = match.groups()[11:18] gametime = datetime.datetime( int(year), months.index(month) + 1, int(day), int(hour), int(minute) ) private = game_type[0] == "p" rated = game_type[2] == "r" gametype = GAME_TYPES_BY_SHORT_FICS_NAME[game_type[1]] our_color = our_color == "B" and BLACK or WHITE minutes = int(minutes) gain = int(gain) length = (int(move_num) - 1) * 2 if next_color == "B": length += 1 user = self.connection.players.get(self.connection.stored_owner) opponent = self.connection.players.get(opponent_name) wplayer, bplayer = ( (user, opponent) if our_color == WHITE else (opponent, user) ) game = FICSAdjournedGame( wplayer, bplayer, game_type=gametype, rated=rated, our_color=our_color, length=length, time=gametime, minutes=minutes, inc=gain, private=private, ) if game.opponent.adjournment is False: game.opponent.adjournment = True if game not in self.connection.games: game = self.connection.games.get(game, emit=False) self.emit("adjournedGameAdded", game) adjournments.append(game) self.emit("onAdjournmentsList", adjournments) __onStoredResponseYES.BLKCMD = BLKCMD_STORED def __onHistoryResponseYES(self, matchlist): # History for User: # Opponent Type ECO End Date # 66: - 1735 B 0 GuestHKZX [ bu 3 0] B23 Res Sun Dec 6, 15:50 EST 2015 # 67: - 1703 B 0 GuestQWML [ lu 1 0] B07 Fla Sun Dec 6, 15:53 EST 2015 history = [] self.connection.history_owner = matchlist[0].groups()[0] for match in matchlist[2:]: # print(match.groups()) history_no = match.groups()[0] result = match.groups()[1] owner_rating = match.groups()[2] owner_color = match.groups()[3] opp_rating = match.groups()[4] if result == "+": result = WHITEWON if owner_color == "W" else BLACKWON elif result == "-": result = WHITEWON if owner_color == "B" else BLACKWON else: result = DRAW opponent_name = match.groups()[5] if owner_color == "W": white = self.connection.history_owner black = opponent_name wrating = owner_rating brating = opp_rating else: white = opponent_name black = self.connection.history_owner brating = owner_rating wrating = opp_rating game_type = match.groups()[6] minutes, gain = match.groups()[7:9] reason = reasons_dict[match.groups()[10]] week, month, day, hour, minute, timezone, year = match.groups()[11:18] gametime = datetime.datetime( int(year), months.index(month) + 1, int(day), int(hour), int(minute) ) private = game_type[0] == "p" rated = game_type[2] == "r" gametype = GAME_TYPES_BY_SHORT_FICS_NAME[game_type[1]] owner_color = owner_color == "B" and BLACK or WHITE minutes = int(minutes) gain = int(gain) wplayer = self.connection.players.get(white) bplayer = self.connection.players.get(black) game = FICSHistoryGame( wplayer, bplayer, game_type=gametype, rated=rated, minutes=minutes, inc=gain, private=private, wrating=wrating, brating=brating, time=gametime, reason=reason, history_no=history_no, result=result, ) if game not in self.connection.games: game = self.connection.games.get(game, emit=False) self.emit("historyGameAdded", game) history.append(game) self.emit("onHistoryList", history) __onHistoryResponseYES.BLKCMD = BLKCMD_HISTORY def __onJournalResponseYES(self, matchlist): # Journal for User: # White Rating Black Rating Type ECO End Result # %01: tentacle 2291 larsa 2050 [ lr 1 2] D35 Rep 1/2-1/2 # %02: larsa 2045 tentacle 2296 [ lr 1 2] A46 Res 0-1 journal = [] self.connection.journal_owner = matchlist[0].groups()[0] for match in matchlist[2:]: # print(match.groups()) journal_no = match.groups()[0] result = match.groups()[10] result = reprResult.index(result) white = match.groups()[1] wrating = match.groups()[2] black = match.groups()[3] brating = match.groups()[4] game_type = match.groups()[5] minutes, gain = match.groups()[6:8] reason = reasons_dict[match.groups()[9]] private = game_type[0] == "p" rated = game_type[2] == "r" gametype = GAME_TYPES_BY_SHORT_FICS_NAME[game_type[1]] minutes = int(minutes) gain = int(gain) wplayer = self.connection.players.get(white) bplayer = self.connection.players.get(black) game = FICSJournalGame( wplayer, bplayer, game_type=gametype, rated=rated, minutes=minutes, inc=gain, private=private, wrating=wrating, brating=brating, reason=reason, journal_no=journal_no, result=result, ) if game not in self.connection.games: game = self.connection.games.get(game, emit=False) self.emit("journalGameAdded", game) journal.append(game) self.emit("onJournalList", journal) __onJournalResponseYES.BLKCMD = BLKCMD_JOURNAL def __onStoredResponseNO(self, match): self.connection.stored_owner = match.groups()[0] self.emit("onAdjournmentsList", []) __onStoredResponseNO.BLKCMD = BLKCMD_STORED def __onHistoryResponseNO(self, match): self.connection.history_owner = match.groups()[0] self.emit("onHistoryList", []) __onHistoryResponseNO.BLKCMD = BLKCMD_HISTORY def __onJournalResponseNO(self, match): self.connection.journal_owner = match.groups()[0] self.emit("onJournalList", []) __onJournalResponseNO.BLKCMD = BLKCMD_JOURNAL def __onAdjournedGameResigned(self, match): self.queryAdjournments() def __onCurGameEnded(self, bm, game): if game.result == ADJOURNED: self.queryAdjournments() elif game.result in (DRAW, WHITEWON, BLACKWON): self.queryHistory() def queryAdjournments(self, owner=None): if owner is None: self.connection.client.run_command("stored") else: self.connection.client.run_command("stored %s" % owner) def queryHistory(self, owner=None): if owner is None: self.connection.client.run_command("history") else: self.connection.client.run_command("history %s" % owner) def queryJournal(self, owner=None): if owner is None: self.connection.client.run_command("journal") else: self.connection.client.run_command("journal %s" % owner) def queryMoves(self, game): if isinstance(game, FICSHistoryGame): self.connection.client.run_command( f"smoves {self.connection.history_owner} {game.history_no}" ) elif isinstance(game, FICSJournalGame): self.connection.client.run_command( f"smoves {self.connection.journal_owner} %{game.journal_no}" ) else: self.connection.client.run_command( f"smoves {self.connection.stored_owner} {game.opponent.name}" ) def examine(self, game): game.board = None self.connection.archived_examine = game if isinstance(game, FICSAdjournedGame): self.connection.client.run_command( f"examine {self.connection.stored_owner} {game.opponent.name}" ) elif isinstance(game, FICSHistoryGame): self.connection.client.run_command( f"examine {self.connection.history_owner} {game.history_no}" ) elif isinstance(game, FICSJournalGame): self.connection.client.run_command( f"examine {self.connection.journal_owner} %{game.journal_no}" ) def challenge(self, playerName): self.connection.client.run_command("match %s" % playerName) def resign(self, game): """This is (and draw and abort) are possible even when one's opponent is not logged on""" if not game.opponent.adjournment: log.warning( "AdjournManager.resign: no adjourned game vs %s" % game.opponent ) return log.info("AdjournManager.resign: resigning adjourned game=%s" % game) self.connection.client.run_command("resign %s" % game.opponent.name) def draw(self, game): if not game.opponent.adjournment: log.warning("AdjournManager.draw: no adjourned game vs %s" % game.opponent) return log.info("AdjournManager.draw: offering sdraw for adjourned game=%s" % game) self.connection.client.run_command("sdraw %s" % game.opponent.name) def abort(self, game): if not game.opponent.adjournment: log.warning("AdjournManager.abort: no adjourned game vs %s" % game.opponent) return log.info("AdjournManager.abort: offering sabort for adjourned game=%s" % game) self.connection.client.run_command("sabort %s" % game.opponent.name) def resume(self, game): if not game.opponent.adjournment: log.warning( "AdjournManager.resume: no adjourned game vs %s" % game.opponent ) return log.info("AdjournManager.resume: offering resume for adjourned game=%s" % game) self.connection.client.run_command("match %s" % game.opponent.name) # (a) Users who have more than 15 stored games are restricted from starting new # games. If this situation happens to you, review your stored games and see # which ones might be eligible for adjudication (see "help adjudication"). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/AutoLogOutManager.py0000755000175100001770000000132014614030313023115 0ustar00runnerdockerfrom gi.repository import GObject class AutoLogOutManager(GObject.GObject): __gsignals__ = {"logOut": (GObject.SignalFlags.RUN_FIRST, None, ())} def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line( self.onLogOut, r"\*\*\*\* Auto-logout because you were idle more than \d+ minutes\. \*\*\*\*", ) self.connection.expect_line(self.onLogOut, r"Logging you out\.") self.connection.expect_line( self.onLogOut, r"\*\*\*\* .+? has arrived - you can't both be logged in\. \*\*\*\*", ) def onLogOut(self, match): self.emit("logOut") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/BoardManager.py0000755000175100001770000016411114614030313022112 0ustar00runnerdockerimport re import asyncio from gi.repository import GObject from pychess.System.Log import log from pychess.Savers.pgn import msToClockTimeTag from pychess.Utils.const import ( WHITEWON, WON_RESIGN, WON_DISCONNECTION, WON_CALLFLAG, BLACKWON, WON_MATE, WON_ADJUDICATION, WON_KINGEXPLODE, WON_NOMATERIAL, UNKNOWN_REASON, DRAW, DRAW_REPETITION, DRAW_BLACKINSUFFICIENTANDWHITETIME, DRAW_WHITEINSUFFICIENTANDBLACKTIME, DRAW_INSUFFICIENT, DRAW_CALLFLAG, DRAW_AGREE, DRAW_STALEMATE, DRAW_50MOVES, DRAW_LENGTH, DRAW_ADJUDICATION, ADJOURNED, ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, ADJOURNED_COURTESY, ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK, ADJOURNED_LOST_CONNECTION, ADJOURNED_SERVER_SHUTDOWN, ABORTED, ABORTED_AGREEMENT, ABORTED_DISCONNECTION, ABORTED_EARLY, ABORTED_SERVER_SHUTDOWN, ABORTED_ADJUDICATION, ABORTED_COURTESY, UNKNOWN_STATE, BLACK, WHITE, reprFile, FISCHERRANDOMCHESS, CRAZYHOUSECHESS, WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ATOMICCHESS, LOSERSCHESS, SUICIDECHESS, GIVEAWAYCHESS, reprResult, ) from pychess.ic import ( IC_POS_OBSERVING_EXAMINATION, IC_POS_EXAMINATING, GAME_TYPES, IC_STATUS_PLAYING, BLKCMD_SEEK, BLKCMD_OBSERVE, BLKCMD_MATCH, TYPE_WILD, BLKCMD_SMOVES, BLKCMD_UNOBSERVE, BLKCMD_MOVES, BLKCMD_FLAG, parseRating, ) from pychess.ic.FICSObjects import ( FICSGame, FICSBoard, FICSHistoryGame, FICSAdjournedGame, FICSJournalGame, FICSPlayer, ) names = r"(\w+)" titles = r"((?:\((?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|SR|CA|C|U|D|B|T|\*)\))+)?" ratedexp = "(rated|unrated)" ratings = r"\(\s*([0-9\ \-\+]{1,4}[P E]?|UNR)\)" weekdays = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ] # "Thu Oct 14, 20:36 PDT 2010" dates = r"({})\s+({})\s+(\d+),\s+(\d+):(\d+)\s+([A-Z\?]+)\s+(\d{{4}})".format( "|".join(weekdays), "|".join(months), ) # "2010-10-14 20:36 UTC" datesFatICS = r"(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2})\s+(UTC)" moveListHeader1Str = "{} {} vs. {} {} --- (?:{}|{})".format( names, ratings, names, ratings, dates, datesFatICS ) moveListHeader1 = re.compile(moveListHeader1Str) moveListHeader2Str = ( r"%s ([^ ]+) match, initial time: (\d+) minutes, increment: (\d+) seconds\." % ratedexp ) moveListHeader2 = re.compile(moveListHeader2Str, re.IGNORECASE) sanmove = "([a-hx@OoPKQRBN0-8+#=-]{2,7})" movetime = r"\((\d:)?(\d{1,2}):(\d\d)(?:\.(\d{1,3}))?\)" moveListMoves = re.compile( r"\s*(\d+)\. +(?:%s|\.\.\.) +%s *(?:%s +%s)?" % (sanmove, movetime, sanmove, movetime) ) creating0 = re.compile( r"Creating: %s %s %s %s %s ([^ ]+) (\d+) (\d+)(?: \(adjourned\))?" % (names, ratings, names, ratings, ratedexp) ) creating1 = re.compile( r"{Game (\d+) \(%s vs\. %s\) (?:Creating|Continuing) %s ([^ ]+) match\." % (names, names, ratedexp) ) pr = re.compile(r" ([\d ]+)") sr = re.compile(r" ([\d ]+)") fileToEpcord = ( ("a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3"), ("a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6"), ) def parse_reason(result, reason, wname=None): """ Parse the result value and reason line string for the reason and return the result and reason the game ended. result -- The result of the game, if known. It can be "None", but if it is "DRAW", then wname must be supplied """ if result in (WHITEWON, BLACKWON): if "resigns" in reason: reason = WON_RESIGN elif "disconnection" in reason: reason = WON_DISCONNECTION elif "time" in reason: reason = WON_CALLFLAG elif "checkmated" in reason: reason = WON_MATE elif "adjudication" in reason: reason = WON_ADJUDICATION elif "exploded" in reason: reason = WON_KINGEXPLODE elif "material" in reason: reason = WON_NOMATERIAL else: reason = UNKNOWN_REASON elif result == DRAW: assert wname is not None if "repetition" in reason: reason = DRAW_REPETITION elif "material" in reason and "time" in reason: if wname + " ran out of time" in reason: reason = DRAW_BLACKINSUFFICIENTANDWHITETIME else: reason = DRAW_WHITEINSUFFICIENTANDBLACKTIME elif "material" in reason: reason = DRAW_INSUFFICIENT elif "time" in reason: reason = DRAW_CALLFLAG elif "agreement" in reason: reason = DRAW_AGREE elif "stalemate" in reason: reason = DRAW_STALEMATE elif "50" in reason: reason = DRAW_50MOVES elif "length" in reason: # FICS has a max game length on 800 moves reason = DRAW_LENGTH elif "adjudication" in reason: reason = DRAW_ADJUDICATION else: reason = UNKNOWN_REASON elif result == ADJOURNED or "adjourned" in reason: result = ADJOURNED if "courtesy" in reason: if wname: if wname in reason: reason = ADJOURNED_COURTESY_WHITE else: reason = ADJOURNED_COURTESY_BLACK elif "white" in reason: reason = ADJOURNED_COURTESY_WHITE elif "black" in reason: reason = ADJOURNED_COURTESY_BLACK else: reason = ADJOURNED_COURTESY elif "agreement" in reason: reason = ADJOURNED_AGREEMENT elif "connection" in reason: if "white" in reason: reason = ADJOURNED_LOST_CONNECTION_WHITE elif "black" in reason: reason = ADJOURNED_LOST_CONNECTION_BLACK else: reason = ADJOURNED_LOST_CONNECTION elif "server" in reason: reason = ADJOURNED_SERVER_SHUTDOWN else: reason = UNKNOWN_REASON elif "aborted" in reason: result = ABORTED if "agreement" in reason: reason = ABORTED_AGREEMENT elif "moves" in reason: # lost connection and too few moves; game aborted * reason = ABORTED_DISCONNECTION elif "move" in reason: # Game aborted on move 1 * reason = ABORTED_EARLY elif "shutdown" in reason: reason = ABORTED_SERVER_SHUTDOWN elif "adjudication" in reason: reason = ABORTED_ADJUDICATION else: reason = UNKNOWN_REASON elif "courtesyadjourned" in reason: result = ADJOURNED reason = ADJOURNED_COURTESY elif "courtesyaborted" in reason: result = ABORTED reason = ABORTED_COURTESY else: result = UNKNOWN_STATE reason = UNKNOWN_REASON return result, reason class BoardManager(GObject.GObject): __gsignals__ = { "playGameCreated": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "obsGameCreated": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "exGameCreated": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "exGameReset": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "gameUndoing": (GObject.SignalFlags.RUN_FIRST, None, (int, int)), "archiveGamePreview": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "boardSetup": (GObject.SignalFlags.RUN_FIRST, None, (int, str, str, str)), "timesUpdate": ( GObject.SignalFlags.RUN_FIRST, None, ( int, int, int, ), ), "obsGameEnded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "curGameEnded": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "obsGameUnobserved": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "madeExamined": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "madeUnExamined": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "gamePaused": (GObject.SignalFlags.RUN_FIRST, None, (int, bool)), "tooManySeeks": (GObject.SignalFlags.RUN_FIRST, None, ()), "nonoWhileExamine": (GObject.SignalFlags.RUN_FIRST, None, ()), "matchDeclined": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "player_on_censor": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "player_on_noplay": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "player_lagged": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "opp_not_out_of_time": (GObject.SignalFlags.RUN_FIRST, None, ()), "req_not_fit_formula": (GObject.SignalFlags.RUN_FIRST, None, (object, str)), } castleSigns = {} queuedStyle12s = {} def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line(self.onStyle12, "<12> (.+)") self.connection.expect_line( self.onWasPrivate, r"Sorry, game (\d+) is a private game\." ) self.connection.expect_line( self.tooManySeeks, "You can only have 3 active seeks." ) self.connection.expect_line( self.nonoWhileExamine, "(?:You cannot challenge while you are examining a game.)|" + "(?:You are already examining a game.)", ) self.connection.expect_line( self.matchDeclined, "%s declines the match offer." % names ) self.connection.expect_line( self.player_on_censor, "%s is censoring you." % names ) self.connection.expect_line( self.player_on_noplay, "You are on %s's noplay list." % names ) self.connection.expect_line( self.player_lagged, r"Game (\d+): %s has lagged for (\d+) seconds\." % names ) self.connection.expect_line( self.opp_not_out_of_time, r"Opponent is not out of time, wait for server autoflag\.", ) self.connection.expect_n_lines( self.req_not_fit_formula, "Match request does not fit formula for %s:" % names, "%s's formula: (.+)" % names, ) self.connection.expect_line( self.on_game_remove, r"\{Game (\d+) \(([A-Za-z]+) vs\. ([A-Za-z]+)\) ([A-Za-z']+ .+)\} (\*|1/2-1/2|1-0|0-1)$", ) if self.connection.USCN: self.connection.expect_n_lines( self.onPlayGameCreated, r"Creating: %s %s %s %s %s ([^ ]+) (\d+) (\d+)(?: \(adjourned\))?" % (names, ratings, names, ratings, ratedexp), "", r"{Game (\d+) \(%s vs\. %s\) (?:Creating|Continuing) %s ([^ ]+) match\." % (names, names, ratedexp), "", "<12> (.+)", ) else: self.connection.expect_n_lines( self.onPlayGameCreated, r"Creating: %s %s %s %s %s ([^ ]+) (\d+) (\d+)(?: \(adjourned\))?" % (names, ratings, names, ratings, ratedexp), r"{Game (\d+) \(%s vs\. %s\) (?:Creating|Continuing) %s ([^ ]+) match\." % (names, names, ratedexp), "", "<12> (.+)", ) # TODO: Trying to precisely match every type of possible response FICS # will throw at us for "Your seek matches..." or "Your seek qualifies # for [player]'s getgame" is error prone and we can never be sure we # even have all of the different types of replies the server will throw # at us. So we should probably make it possible for multi-line # prediction callbacks in VerboseTelnet to put lines the callback isn't # interested in or doesn't handle back onto the input line stack in # VerboseTelnet.TelnetLines self.connection.expect_fromto( self.onMatchingSeekOrGetGame, r"Your seek (?:matches one already posted by %s|qualifies for %s's getgame)\." % (names, names), "(?:<12>|) (.+)", ) self.connection.expect_fromto( self.onInterceptedChallenge, r"Your challenge intercepts %s's challenge\." % names, "<12> (.+)", ) if self.connection.USCN: self.connection.expect_n_lines( self.onObserveGameCreated, r"You are now observing game \d+\.", "", "<12> (.+)", ) else: self.connection.expect_n_lines( self.onObserveGameCreated, r"You are now observing game \d+\.", r"Game (\d+): %s %s %s %s %s ([\w/]+) (\d+) (\d+)" % (names, ratings, names, ratings, ratedexp), "", "<12> (.+)", ) self.connection.expect_fromto( self.onObserveGameMovesReceived, r"Movelist for game (\d+):", r"{Still in progress} \*", ) self.connection.expect_fromto( self.onArchiveGameSMovesReceived, moveListHeader1Str, # "\s*{((?:Game courtesyadjourned by (Black|White))|(?:Still in progress)|(?:Game adjourned by mutual agreement)|(?:(White|Black) lost connection; game adjourned)|(?:Game adjourned by ((?:server shutdown)|(?:adjudication)|(?:simul holder))))} \*") r"\s*{.*(?:([Gg]ame.*adjourned.\s*)|(?:Still in progress)|(?:Neither.*)|(?:Game drawn.*)|(?:White.*)|(?:Black.*)).*}\s*(?:(?:1/2-1/2)|(?:1-0)|(?:0-1))?\s*", ) self.connection.expect_line( self.onGamePause, r"Game (\d+): Game clock (paused|resumed)\." ) self.connection.expect_line( self.onUnobserveGame, r"Removing game (\d+) from observation list\." ) self.connection.expect_line( self.made_examined, r"%s has made you an examiner of game (\d+)\." % names ) self.connection.expect_line( self.made_unexamined, r"You are no longer examining game (\d+)\." ) self.connection.expect_n_lines( self.onExamineGameCreated, r"Starting a game in examine \(scratch\) mode\.", "", "<12> (.+)", ) self.queuedEmits = {} self.gamemodelStartedEvents = {} self.theGameImPlaying = None self.gamesImObserving = {} # The ms ivar makes the remaining second fields in style12 use ms self.connection.client.run_command("iset ms 1") # Style12 is a must, when you don't want to parse visualoptimized stuff self.connection.client.run_command("set style 12") # When we observe fischer games, this puts a startpos in the movelist self.connection.client.run_command("iset startpos 1") # movecase ensures that bc3 will never be a bishop move self.connection.client.run_command("iset movecase 1") # don't unobserve games when we start a new game self.connection.client.run_command("set unobserve 3") self.connection.lvm.autoFlagNotify() # gameinfo doesn't really have any interesting info, at least not # until we implement crasyhouse and stuff # self.connection.client.run_command("iset gameinfo 1") def start(self): self.connection.games.connect("FICSGameEnded", self.onGameEnd) @classmethod def parseStyle12(cls, line, castleSigns=None): # <12> rnbqkb-r pppppppp -----n-- -------- ----P--- -------- PPPPKPPP RNBQ-BNR # B -1 0 0 1 1 0 7 Newton Einstein 1 2 12 39 39 119 122 2 K/e1-e2 (0:06) Ke2 0 fields = line.split() curcol = fields[8] == "B" and BLACK or WHITE gameno = int(fields[15]) relation = int(fields[18]) lastmove = fields[28] != "none" and fields[28] or None if lastmove is None: ply = 0 else: ply = int(fields[25]) * 2 - (curcol == WHITE and 2 or 1) wname = fields[16] bname = fields[17] wms = int(fields[23]) bms = int(fields[24]) gain = int(fields[20]) # Board data fenrows = [] for row in fields[:8]: fenrow = [] spaceCounter = 0 for char in row: if char == "-": spaceCounter += 1 else: if spaceCounter: fenrow.append(str(spaceCounter)) spaceCounter = 0 fenrow.append(char) if spaceCounter: fenrow.append(str(spaceCounter)) fenrows.append("".join(fenrow)) fen = "/".join(fenrows) fen += " " # Current color fen += fields[8].lower() fen += " " # Castling if fields[10:14] == ["0", "0", "0", "0"]: fen += "-" else: if fields[10] == "1": fen += castleSigns[0].upper() if fields[11] == "1": fen += castleSigns[1].upper() if fields[12] == "1": fen += castleSigns[0].lower() if fields[13] == "1": fen += castleSigns[1].lower() fen += " " # 1 0 1 1 when short castling k1 last possibility # En passant if fields[9] == "-1": fen += "-" else: fen += fileToEpcord[1 - curcol][int(fields[9])] fen += " " # Half move clock fen += str(max(int(fields[14]), 0)) fen += " " # Standard chess numbering fen += fields[25] return ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) def onStyle12(self, match): style12 = match.groups()[0] log.debug("onStyle12: %s" % style12) gameno = int(style12.split()[15]) if gameno in self.queuedStyle12s: self.queuedStyle12s[gameno].append(style12) return try: self.gamemodelStartedEvents[gameno].wait() except KeyError: pass if gameno in self.castleSigns: castleSigns = self.castleSigns[gameno] else: castleSigns = ("k", "q") ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) # examine starts with a <12> line only if lastmove is None and relation == IC_POS_EXAMINATING: pgnHead = [ ("Event", "FICS examined game"), ("Site", "freechess.org"), ("White", wname), ("Black", bname), ("Result", "*"), ("SetUp", "1"), ("FEN", fen), ] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n*\n" wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) if self.connection.examined_game is None: # examine an archived game from GUI if self.connection.archived_examine is not None: no_smoves = False game = self.connection.archived_examine game.gameno = int(gameno) game.relation = relation # game.game_type = GAME_TYPES["examined"] log.debug( "Start examine an existing game by %s" % style12, extra={"task": (self.connection.username, "BM.onStyle12")}, ) else: # examine from console or got mexamine in observed game no_smoves = True game = FICSGame( wplayer, bplayer, gameno=int(gameno), game_type=GAME_TYPES["examined"], minutes=0, inc=0, board=FICSBoard(0, 0, pgn=pgn), relation=relation, ) log.debug( "Start new examine game by %s" % style12, extra={"task": (self.connection.username, "BM.onStyle12")}, ) game = self.connection.games.get(game) self.connection.examined_game = game # don't start another new game when someone (some human examiner or lecturebot/endgamebot) # changes our relation in an already started game from IC_POS_OBSERVING_EXAMINATION to # IC_POS_EXAMINATING if game.relation == IC_POS_OBSERVING_EXAMINATION: game.relation = relation # IC_POS_EXAMINATING # print("IC_POS_OBSERVING_EXAMINATION --> IC_POS_EXAMINATING") # before this change server sent an unobserve to us # and it removed gameno from started events dict # we have to put it back... self.gamemodelStartedEvents[game.gameno] = asyncio.Event() return else: # don't start new game in puzzlebot/endgamebot when they just reuse gameno log.debug( "emit('boardSetup') with {} {} {} {}".format( gameno, fen, wname, bname ), extra={"task": (self.connection.username, "BM.onStyle12")}, ) self.emit("boardSetup", gameno, fen, wname, bname) return game.relation = relation game.board = FICSBoard(0, 0, pgn=pgn) self.gamesImObserving[game] = wms, bms # start a new game now or after smoves self.gamemodelStartedEvents[game.gameno] = asyncio.Event() if no_smoves: log.debug( "emit('exGameCreated')", extra={"task": (self.connection.username, "BM.onStyle12")}, ) self.emit("exGameCreated", game) self.gamemodelStartedEvents[game.gameno].wait() else: log.debug( "send 'smoves' command", extra={"task": (self.connection.username, "BM.onStyle12")}, ) if isinstance(game, FICSHistoryGame): self.connection.client.run_command( "smoves {} {}".format( self.connection.history_owner, game.history_no ) ) elif isinstance(game, FICSJournalGame): self.connection.client.run_command( "smoves {} %{}".format( self.connection.journal_owner, game.journal_no ) ) elif isinstance(game, FICSAdjournedGame): self.connection.client.run_command( "smoves {} {}".format( self.connection.stored_owner, game.opponent.name ) ) self.connection.client.run_command("forward 999") else: if gameno in self.connection.games.games_by_gameno: game = self.connection.games.get_game_by_gameno(gameno) if wms < 0 or bms < 0: # fics resend latest style12 line again when one player lost on time return if lastmove is None: log.debug( "emit('boardSetup') with {} {} {} {}".format( gameno, fen, wname, bname ), extra={"task": (self.connection.username, "BM.onStyle12")}, ) self.emit("boardSetup", gameno, fen, wname, bname) else: log.debug( "put move %s into game.move_queue" % lastmove, extra={"task": (self.connection.username, "BM.onStyle12")}, ) game.move_queue.put_nowait( (gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms) ) else: # In some cases (like lost on time) the last move is resent by FICS # but game was already removed from self.connection.games log.debug(f"Got {style12} but {gameno} not in connection.games") def onExamineGameCreated(self, matchlist): style12 = matchlist[-1].groups()[0] gameno = int(style12.split()[15]) castleSigns = self.generateCastleSigns(style12, GAME_TYPES["examined"]) self.castleSigns[gameno] = castleSigns ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) pgnHead = [ ("Event", "FICS examined game"), ("Site", "freechess.org"), ("White", wname), ("Black", bname), ("Result", "*"), ("SetUp", "1"), ("FEN", fen), ] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n*\n" wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), game_type=GAME_TYPES["examined"], minutes=0, inc=0, board=FICSBoard(0, 0, pgn=pgn), relation=relation, ) log.debug( "Starting a game in examine (scratch) mode.", extra={"task": (self.connection.username, "BM.onExamineGameCreated")}, ) self.connection.examined_game = game game = self.connection.games.get(game) game.relation = relation game.board = FICSBoard(0, 0, pgn=pgn) self.gamesImObserving[game] = wms, bms # start a new game now self.gamemodelStartedEvents[game.gameno] = asyncio.Event() log.debug( "emit('exGameCreated')", extra={"task": (self.connection.username, "BM.onExamineGameCreated")}, ) self.emit("exGameCreated", game) self.gamemodelStartedEvents[game.gameno].wait() def onGameModelStarted(self, gameno): self.gamemodelStartedEvents[gameno].set() def onWasPrivate(self, match): # When observable games were added to the list later than the latest # full send, private information will not be known. gameno = int(match.groups()[0]) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return game.private = True onWasPrivate.BLKCMD = BLKCMD_OBSERVE def tooManySeeks(self, match): self.emit("tooManySeeks") tooManySeeks.BLKCMD = BLKCMD_SEEK def nonoWhileExamine(self, match): self.emit("nonoWhileExamine") nonoWhileExamine.BLKCMD = BLKCMD_SEEK def matchDeclined(self, match): (decliner,) = match.groups() decliner = self.connection.players.get(decliner) self.emit("matchDeclined", decliner) @classmethod def generateCastleSigns(cls, style12, game_type): if game_type.variant_type == FISCHERRANDOMCHESS: backrow = style12.split()[0] leftside = backrow.find("r") rightside = backrow.find("r", leftside + 1) return (reprFile[rightside], reprFile[leftside]) else: return ("k", "q") def onPlayGameCreated(self, matchlist): log.debug( "'%s' '%s' '%s'" % (matchlist[0].string, matchlist[1].string, matchlist[-1].string), extra={"task": (self.connection.username, "BM.onPlayGameCreated")}, ) wname, wrating, bname, brating, rated, match_type, minutes, inc = matchlist[ 0 ].groups() item = 2 if self.connection.USCN else 1 gameno, wname, bname, rated, match_type = matchlist[item].groups() gameno = int(gameno) wrating = parseRating(wrating) brating = parseRating(brating) rated = rated == "rated" game_type = GAME_TYPES[match_type] wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.ratings[game_type.rating_type] != rating: player.ratings[game_type.rating_type] = rating player.emit("ratings_changed", game_type.rating_type, player) style12 = matchlist[-1].groups()[0] castleSigns = self.generateCastleSigns(style12, game_type) self.castleSigns[gameno] = castleSigns ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) game = FICSGame( wplayer, bplayer, gameno=gameno, rated=rated, game_type=game_type, minutes=int(minutes), inc=int(inc), board=FICSBoard(wms, bms, fen=fen), ) game = self.connection.games.get(game) for player in (wplayer, bplayer): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game self.theGameImPlaying = game self.gamemodelStartedEvents[gameno] = asyncio.Event() self.connection.client.run_command("follow") self.emit("playGameCreated", game) def onMatchingSeekOrGetGame(self, matchlist): if matchlist[-1].string.startswith("<12>"): for line in matchlist[1:-4]: if line.startswith(""): self.connection.glm.on_seek_remove(sr.match(line)) elif line.startswith(""): self.connection.om.onOfferRemove(pr.match(line)) self.onPlayGameCreated( ( creating0.match(matchlist[-4]), creating1.match(matchlist[-3]), matchlist[-1], ) ) else: self.connection.glm.on_seek_add(matchlist[-1]) onMatchingSeekOrGetGame.BLKCMD = BLKCMD_SEEK def onInterceptedChallenge(self, matchlist): self.onMatchingSeekOrGetGame(matchlist) onInterceptedChallenge.BLKCMD = BLKCMD_MATCH def parseGame(self, matchlist, gameclass, in_progress=False, gameno=None): """ Parses the header and movelist for an observed or stored game from its matchlist (an re.match object) into a gameclass (FICSGame or subclass of) object. in_progress - should be True for an observed game matchlist, and False for stored/adjourned games """ # ################ observed game movelist example: # Movelist for game 64: # # Ajido (2281) vs. IMgooeyjim (2068) --- Thu Oct 14, 20:36 PDT 2010 # Rated standard match, initial time: 15 minutes, increment: 3 seconds. # # Move Ajido IMgooeyjim # ---- --------------------- --------------------- # 1. d4 (0:00.000) Nf6 (0:00.000) # 2. c4 (0:04.061) g6 (0:00.969) # 3. Nc3 (0:13.280) Bg7 (0:06.422) # {Still in progress} * # # ################# stored game example: # BwanaSlei (1137) vs. mgatto (1336) --- Wed Nov 5, 20:56 PST 2008 # Rated blitz match, initial time: 5 minutes, increment: 0 seconds. # # Move BwanaSlei mgatto # ---- --------------------- --------------------- # 1. e4 (0:00.000) c5 (0:00.000) # 2. d4 (0:05.750) cxd4 (0:03.020) # ... # 23. Qxf3 (1:05.500) # {White lost connection; game adjourned} * # # ################# stored wild/3 game with style12: # kurushi (1626) vs. mgatto (1627) --- Thu Nov 4, 10:33 PDT 2010 # Rated wild/3 match, initial time: 3 minutes, increment: 0 seconds. # # <12> nqbrknrn pppppppp -------- -------- -------- -------- PPPPPPPP NQBRKNRN W -1 0 0 0 0 0 17 kurushi mgatto -4 3 0 39 39 169403 45227 1 none (0:00.000) none 0 1 0 # # Move kurushi mgatto # ---- --------------------- --------------------- # 1. Nb3 (0:00.000) d5 (0:00.000) # 2. Nhg3 (0:00.386) e5 (0:03.672) # ... # 28. Rxd5 (0:00.412) # {Black lost connection; game adjourned} * # # ################# stored game movelist following stored game(s): # Stored games for mgatto: # C Opponent On Type Str M ECO Date # 1: W BabyLurking Y [ br 5 0] 29-13 W27 D37 Fri Nov 5, 04:41 PDT 2010 # 2: W gbtami N [ wr 5 0] 32-34 W14 --- Thu Oct 21, 00:14 PDT 2010 # # mgatto (1233) vs. BabyLurking (1455) --- Fri Nov 5, 04:33 PDT 2010 # Rated blitz match, initial time: 5 minutes, increment: 0 seconds. # # Move mgatto BabyLurking # ---- ---------------- ---------------- # 1. Nf3 (0:00) d5 (0:00) # 2. d4 (0:03) Nf6 (0:00) # 3. c4 (0:03) e6 (0:00) # {White lost connection; game adjourned} * # # ################## stored game movelist following stored game(s): # ## Note: A wild stored game in this format won't be parseable into a board because # ## it doesn't come with a style12 that has the start position, so we warn and return # ################## # Stored games for mgatto: # C Opponent On Type Str M ECO Date # 1: W gbtami N [ wr 5 0] 32-34 W14 --- Thu Oct 21, 00:14 PDT 2010 # # mgatto (1627) vs. gbtami (1881) --- Thu Oct 21, 00:10 PDT 2010 # Rated wild/fr match, initial time: 5 minutes, increment: 0 seconds. # # Move mgatto gbtami # ---- ---------------- ---------------- # 1. d4 (0:00) b6 (0:00) # 2. b3 (0:06) d5 (0:03) # 3. c4 (0:08) e6 (0:03) # 4. e3 (0:04) dxc4 (0:02) # 5. bxc4 (0:02) g6 (0:09) # 6. Nd3 (0:12) Bg7 (0:02) # 7. Nc3 (0:10) Ne7 (0:03) # 8. Be2 (0:08) c5 (0:05) # 9. a4 (0:07) cxd4 (0:38) # 10. exd4 (0:06) Bxd4 (0:03) # 11. O-O (0:10) Qc6 (0:06) # 12. Bf3 (0:16) Qxc4 (0:04) # 13. Bxa8 (0:03) Rxa8 (0:14) # {White lost connection; game adjourned} * # # ################# other reasons the game could be stored/adjourned: # Game courtesyadjourned by (Black|White) # Still in progress # This one must be a FICS bug # Game adjourned by mutual agreement # (White|Black) lost connection; game adjourned # Game adjourned by ((server shutdown)|(adjudication)|(simul holder)) index = 0 if in_progress: gameno = int(matchlist[index].groups()[0]) index += 2 header1 = ( matchlist[index] if isinstance(matchlist[index], str) else matchlist[index].group() ) matches = moveListHeader1.match(header1).groups() wname, wrating, bname, brating = matches[:4] if self.connection.FatICS: year, month, day, hour, minute, timezone = matches[11:] else: weekday, month, day, hour, minute, timezone, year = matches[4:11] month = months.index(month) + 1 wrating = parseRating(wrating) brating = parseRating(brating) rated, game_type, minutes, increment = moveListHeader2.match( matchlist[index + 1] ).groups() minutes = int(minutes) increment = int(increment) game_type = GAME_TYPES[game_type] reason = matchlist[-1].group().lower() if in_progress: result = None result_str = "*" elif "1-0" in reason: result = WHITEWON result_str = "1-0" elif "0-1" in reason: result = BLACKWON result_str = "0-1" elif "1/2-1/2" in reason: result = DRAW result_str = "1/2-1/2" else: result = ADJOURNED result_str = "*" result, reason = parse_reason(result, reason, wname=wname) index += 3 if matchlist[index].startswith("<12>"): style12 = matchlist[index][5:] castleSigns = self.generateCastleSigns(style12, game_type) ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) initialfen = fen movesstart = index + 4 else: if game_type.rating_type == TYPE_WILD: # we need a style12 start position to correctly parse a wild/* board log.error( "BoardManager.parseGame: no style12 for %s board." % game_type.fics_name ) return None castleSigns = ("k", "q") initialfen = None movesstart = index + 2 if in_progress: self.castleSigns[gameno] = castleSigns moves = {} times = {} wms = bms = minutes * 60 * 1000 for line in matchlist[movesstart:-1]: if not moveListMoves.match(line): log.error('BoardManager.parseGame: unmatched line: "%s"' % repr(line)) raise Exception( 'BoardManager.parseGame: unmatched line: "%s"' % repr(line) ) ( moveno, wmove, whour, wmin, wsec, wmsec, bmove, bhour, bmin, bsec, bmsec, ) = moveListMoves.match(line).groups() whour = 0 if whour is None else int(whour[0]) bhour = 0 if bhour is None else int(bhour[0]) ply = int(moveno) * 2 - 2 if wmove: moves[ply] = wmove wms -= ( (int(whour) * 60 * 60 * 1000) + (int(wmin) * 60 * 1000) + (int(wsec) * 1000) ) if wmsec is not None: wms -= int(wmsec) else: wmsec = 0 if increment > 0: wms += increment * 1000 times[ply] = "%01d:%02d:%02d.%03d" % ( int(whour), int(wmin), int(wsec), int(wmsec), ) if bmove: moves[ply + 1] = bmove bms -= ( (int(bhour) * 60 * 60 * 1000) + (int(bmin) * 60 * 1000) + (int(bsec) * 1000) ) if bmsec is not None: bms -= int(bmsec) else: bmsec = 0 if increment > 0: bms += increment * 1000 times[ply + 1] = "%01d:%02d:%02d.%03d" % ( int(bhour), int(bmin), int(bsec), int(bmsec), ) if in_progress and gameno in self.queuedStyle12s: # Apply queued board updates for style12 in self.queuedStyle12s[gameno]: ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) if lastmove is None: continue moves[ply - 1] = lastmove # Updated the queuedMoves in case there has been a takeback for moveply in list(moves.keys()): if moveply > ply - 1: del moves[moveply] del self.queuedStyle12s[gameno] pgnHead = [ ("Event", f"FICS {rated.lower()} {game_type.fics_name} game"), ("Site", "freechess.org"), ("White", wname), ("Black", bname), ("TimeControl", "%d+%d" % (minutes * 60, increment)), ("Result", result_str), ("WhiteClock", msToClockTimeTag(wms)), ("BlackClock", msToClockTimeTag(bms)), ] if wrating != 0: pgnHead += [("WhiteElo", wrating)] if brating != 0: pgnHead += [("BlackElo", brating)] if year and month and day and hour and minute: pgnHead += [ ("Date", "%04d.%02d.%02d" % (int(year), int(month), int(day))), ("Time", "%02d:%02d:00" % (int(hour), int(minute))), ] if initialfen: pgnHead += [("SetUp", "1"), ("FEN", initialfen)] if game_type.variant_type == FISCHERRANDOMCHESS: pgnHead += [("Variant", "Fischerandom")] # FR is the only variant used in this tag by the PGN generator @ # ficsgames.org. They put all the other wild/* stuff only in the # "Event" header. elif game_type.variant_type == CRAZYHOUSECHESS: pgnHead += [("Variant", "Crazyhouse")] elif game_type.variant_type in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): pgnHead += [("Variant", "Wildcastle")] elif game_type.variant_type == ATOMICCHESS: pgnHead += [("Variant", "Atomic")] elif game_type.variant_type == LOSERSCHESS: pgnHead += [("Variant", "Losers")] elif game_type.variant_type == SUICIDECHESS: pgnHead += [("Variant", "Suicide")] elif game_type.variant_type == GIVEAWAYCHESS: pgnHead += [("Variant", "Giveaway")] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n" moves = sorted(moves.items()) for ply, move in moves: if ply % 2 == 0: pgn += "%d. " % (ply // 2 + 1) time = times[ply] pgn += f"{move} {{[%emt {time}]}} " pgn += "*\n" wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.ratings[game_type.rating_type] != rating: player.ratings[game_type.rating_type] = rating player.emit("ratings_changed", game_type.rating_type, player) game = gameclass( wplayer, bplayer, game_type=game_type, result=result, rated=(rated.lower() == "rated"), minutes=minutes, inc=increment, board=FICSBoard(wms, bms, pgn=pgn), ) if in_progress: game.gameno = gameno else: if gameno is not None: game.gameno = gameno game.reason = reason game = self.connection.games.get(game, emit=False) return game def on_game_remove(self, match): gameno, wname, bname, comment, result = match.groups() result, reason = parse_reason(reprResult.index(result), comment, wname=wname) try: wplayer = self.connection.players.get(wname) wplayer.restore_previous_status() # no status update will be sent by # FICS if the player doesn't become available, so we restore # previous status first (not necessarily true, but the best guess) except KeyError: print("%s not in self.connections.players - creating" % wname) wplayer = FICSPlayer(wname) try: bplayer = self.connection.players.get(bname) bplayer.restore_previous_status() except KeyError: print("%s not in self.connections.players - creating" % bname) bplayer = FICSPlayer(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), result=result, reason=reason ) if wplayer.game is not None: game.rated = wplayer.game.rated game = self.connection.games.get(game, emit=False) self.connection.games.game_ended(game) # Do this last to give anybody connected to the game's signals a chance # to disconnect from them first wplayer.game = None bplayer.game = None def onObserveGameCreated(self, matchlist): log.debug( "'%s'" % (matchlist[1].string), extra={"task": (self.connection.username, "BM.onObserveGameCreated")}, ) if self.connection.USCN: # TODO? is this ok? game_type = GAME_TYPES["blitz"] castleSigns = ("k", "q") else: ( gameno, wname, wrating, bname, brating, rated, gametype, minutes, inc, ) = matchlist[1].groups() wrating = parseRating(wrating) brating = parseRating(brating) game_type = GAME_TYPES[gametype] style12 = matchlist[-1].groups()[0] castleSigns = self.generateCastleSigns(style12, game_type) ( gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen, ) = self.parseStyle12(style12, castleSigns) gameno = int(gameno) self.castleSigns[gameno] = castleSigns wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) if relation == IC_POS_OBSERVING_EXAMINATION: pgnHead = [ ("Event", f"FICS {rated} {game_type.fics_name} game"), ("Site", "freechess.org"), ("White", wname), ("Black", bname), ("Result", "*"), ("SetUp", "1"), ("FEN", fen), ] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n*\n" game = FICSGame( wplayer, bplayer, gameno=gameno, rated=rated == "rated", game_type=game_type, minutes=int(minutes), inc=int(inc), board=FICSBoard(wms, bms, pgn=pgn), relation=relation, ) game = self.connection.games.get(game) # when puzzlebot reuses same gameno for starting next puzzle # sometimes no unexamine sent by server, so we have to set None to # self.connection.examined_game to guide self.onStyle12() a bit... if ( self.connection.examined_game is not None and self.connection.examined_game.gameno == gameno ): log.debug( "BM.onObserveGameCreated: exGameReset emitted; self.connection.examined_game = %s" % gameno ) self.emit("exGameReset", self.connection.examined_game) self.connection.examined_game = None game.relation = relation # IC_POS_OBSERVING_EXAMINATION self.gamesImObserving[game] = wms, bms self.gamemodelStartedEvents[game.gameno] = asyncio.Event() # puzzlebot sometimes creates next puzzle with same wplayer,bplayer,gameno game.move_queue = asyncio.Queue() self.emit("obsGameCreated", game) self.gamemodelStartedEvents[game.gameno].wait() else: game = FICSGame( wplayer, bplayer, gameno=gameno, rated=rated == "rated", game_type=game_type, minutes=int(minutes), inc=int(inc), relation=relation, ) game = self.connection.games.get(game, emit=False) if not game.supported: log.warning( "Trying to follow an unsupported type game %s" % game.game_type ) return if game.gameno in self.gamemodelStartedEvents: log.warning("%s already in gamemodelstartedevents" % game.gameno) return self.gamesImObserving[game] = wms, bms self.queuedStyle12s[game.gameno] = [] self.queuedEmits[game.gameno] = [] self.gamemodelStartedEvents[game.gameno] = asyncio.Event() # FICS doesn't send the move list after 'observe' and 'follow' commands self.connection.client.run_command("moves %d" % game.gameno) onObserveGameCreated.BLKCMD = BLKCMD_OBSERVE def onObserveGameMovesReceived(self, matchlist): log.debug( "'%s'" % (matchlist[0].string), extra={"task": (self.connection.username, "BM.onObserveGameMovesReceived")}, ) game = self.parseGame(matchlist, FICSGame, in_progress=True) if game.gameno not in self.gamemodelStartedEvents: return if game.gameno not in self.queuedEmits: return self.emit("obsGameCreated", game) try: self.gamemodelStartedEvents[game.gameno].wait() except KeyError: pass for emit in self.queuedEmits[game.gameno]: emit() del self.queuedEmits[game.gameno] wms, bms = self.gamesImObserving[game] self.emit("timesUpdate", game.gameno, wms, bms) onObserveGameMovesReceived.BLKCMD = BLKCMD_MOVES def onArchiveGameSMovesReceived(self, matchlist): log.debug( "'%s'" % (matchlist[0].string), extra={ "task": (self.connection.username, "BM.onArchiveGameSMovesReceived") }, ) klass = ( FICSAdjournedGame if "adjourn" in matchlist[-1].group() else FICSHistoryGame ) if self.connection.examined_game is not None: gameno = self.connection.examined_game.gameno else: gameno = None game = self.parseGame(matchlist, klass, in_progress=False, gameno=gameno) if game.gameno not in self.gamemodelStartedEvents: self.emit("archiveGamePreview", game) return game.relation = IC_POS_EXAMINATING game.game_type = GAME_TYPES["examined"] self.emit("exGameCreated", game) try: self.gamemodelStartedEvents[game.gameno].wait() except KeyError: pass onArchiveGameSMovesReceived.BLKCMD = BLKCMD_SMOVES def onGameEnd(self, games, game): log.debug("BM.onGameEnd: %s" % game) if game == self.theGameImPlaying: if game.gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[game.gameno].wait() self.emit("curGameEnded", game) self.theGameImPlaying = None if game.gameno in self.gamemodelStartedEvents: del self.gamemodelStartedEvents[game.gameno] elif game in self.gamesImObserving: log.debug("BM.onGameEnd: %s: gamesImObserving" % game) if game.gameno in self.queuedEmits: log.debug("BM.onGameEnd: %s: queuedEmits" % game) self.queuedEmits[game.gameno].append( lambda: self.emit("obsGameEnded", game) ) else: if game.gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[game.gameno].wait() del self.gamesImObserving[game] self.emit("obsGameEnded", game) def onGamePause(self, match): gameno, state = match.groups() gameno = int(gameno) if gameno in self.queuedEmits: self.queuedEmits[gameno].append( lambda: self.emit("gamePaused", gameno, state == "paused") ) else: if gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[gameno].wait() self.emit("gamePaused", gameno, state == "paused") def onUnobserveGame(self, match): gameno = int(match.groups()[0]) log.debug("BM.onUnobserveGame: gameno: %s" % gameno) try: del self.gamemodelStartedEvents[gameno] game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return self.emit("obsGameUnobserved", game) # TODO: delete self.castleSigns[gameno] ? onUnobserveGame.BLKCMD = BLKCMD_UNOBSERVE def player_lagged(self, match): gameno, player, num_seconds = match.groups() player = self.connection.players.get(player) self.emit("player_lagged", player) def opp_not_out_of_time(self, match): self.emit("opp_not_out_of_time") opp_not_out_of_time.BLKCMD = BLKCMD_FLAG def req_not_fit_formula(self, matchlist): player, formula = matchlist[1].groups() player = self.connection.players.get(player) self.emit("req_not_fit_formula", player, formula) req_not_fit_formula.BLKCMD = BLKCMD_MATCH def player_on_censor(self, match): (player,) = match.groups() player = self.connection.players.get(player) self.emit("player_on_censor", player) player_on_censor.BLKCMD = BLKCMD_MATCH def player_on_noplay(self, match): (player,) = match.groups() player = self.connection.players.get(player) self.emit("player_on_noplay", player) player_on_noplay.BLKCMD = BLKCMD_MATCH def made_examined(self, match): """Changing from observer to examiner""" player, gameno = match.groups() gameno = int(gameno) try: self.connection.games.get_game_by_gameno(gameno) except KeyError: return self.emit("madeExamined", gameno) def made_unexamined(self, match): """You are no longer examine game""" log.debug("BM.made_unexamined(): exGameReset emitted") self.emit("exGameReset", self.connection.examined_game) self.connection.examined_game = None (gameno,) = match.groups() gameno = int(gameno) try: self.connection.games.get_game_by_gameno(gameno) except KeyError: return self.emit("madeUnExamined", gameno) ############################################################################ # Interacting # ############################################################################ def isPlaying(self): return self.theGameImPlaying is not None def sendMove(self, move): self.connection.client.run_command(move) def resign(self): self.connection.client.run_command("resign") def callflag(self): self.connection.client.run_command("flag") def observe(self, game, player=None): if game is not None: self.connection.client.run_command("observe %d" % game.gameno) elif player is not None: self.connection.client.run_command("observe %s" % player.name) def follow(self, player): self.connection.client.run_command("follow %s" % player.name) def unexamine(self): self.connection.client.run_command("unexamine") def unobserve(self, game): if game.gameno is not None: self.connection.client.run_command("unobserve %d" % game.gameno) def play(self, seekno): self.connection.client.run_command("play %s" % seekno) def accept(self, offerno): self.connection.client.run_command("accept %s" % offerno) def decline(self, offerno): self.connection.client.run_command("decline %s" % offerno) if __name__ == "__main__": from pychess.ic.FICSConnection import Connection con = Connection("", "", True, "", "") bm = BoardManager(con) print( bm._BoardManager__parseStyle12( "rkbrnqnb pppppppp -------- -------- -------- -------- PPPPPPPP RKBRNQNB W -1 1 1 1 1 0 161 GuestNPFS GuestMZZK -1 2 12 39 39 120 120 1 none (0:00) none 1 0 0", ("d", "a"), ) ) print( bm._BoardManager__parseStyle12( "rnbqkbnr pppp-ppp -------- ----p--- ----PP-- -------- PPPP--PP RNBQKBNR B 5 1 1 1 1 0 241 GuestGFFC GuestNXMP -4 2 12 39 39 120000 120000 1 none (0:00.000) none 0 0 0", ("k", "q"), ) ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ChatManager.py0000755000175100001770000003753314614030313021751 0ustar00runnerdockerimport re from math import ceil import time import operator from gi.repository import GLib, GObject from pychess.System.Log import log from pychess.ic import GAME_TYPES, BLKCMD_ALLOBSERVERS titles = r"(?:\([A-Z*]+\))*" names = "([A-Za-z]+)" + titles titlesC = re.compile(titles) namesC = re.compile(names) ratings = r"\(\s*([0-9\ \-\+]{1,4}[P E]?|UNR)\)" CHANNEL_SHOUT = "shout" CHANNEL_CSHOUT = "cshout" class ChatManager(GObject.GObject): __gsignals__ = { "channelMessage": ( GObject.SignalFlags.RUN_FIRST, None, (str, bool, bool, str, str), ), "kibitzMessage": (GObject.SignalFlags.RUN_FIRST, None, (str, int, str)), "whisperMessage": (GObject.SignalFlags.RUN_FIRST, None, (str, int, str)), "privateMessage": (GObject.SignalFlags.RUN_FIRST, None, (str, str, bool, str)), "bughouseMessage": (GObject.SignalFlags.RUN_FIRST, None, (str, str)), "announcement": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "arrivalNotification": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "departedNotification": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "channelAdd": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "channelRemove": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "channelJoinError": (GObject.SignalFlags.RUN_FIRST, None, (str, str)), "channelsListed": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "channelLog": (GObject.SignalFlags.RUN_FIRST, None, (str, int, str, str)), "toldChannel": (GObject.SignalFlags.RUN_FIRST, None, (str, int)), "receivedChannels": (GObject.SignalFlags.RUN_FIRST, None, (str, object)), "receivedNames": (GObject.SignalFlags.RUN_FIRST, None, (str, object)), "observers_received": (GObject.SignalFlags.RUN_FIRST, None, (str, str)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line( self.onPrivateMessage, r"%s(\*)?(?:\[\d+\])? (?:tells you|says): (.*)" % names, ) self.connection.expect_line( self.onAnnouncement, r"\s*\*\*ANNOUNCEMENT\*\* (.*)" ) self.connection.expect_line( self.onChannelMessage, r"%s(\*)?\((\d+)\): (.*)" % names ) self.connection.expect_line( self.onShoutMessage, r"%s(\*)? (c-)?shouts: (.*)" % names ) self.connection.expect_line(self.onShoutMessage, r"--> %s(\*)?:? (.*)" % names) self.connection.expect_line( self.onKibitzMessage, rf"{names}{ratings}\[(\d+)\] kibitzes: (.*)" ) self.connection.expect_line( self.onWhisperMessage, rf"{names}{ratings}\[(\d+)\] whispers: (.*)", ) self.connection.expect_line( self.onArrivalNotification, r"Notification: %s has arrived\." % names ) self.connection.expect_line( self.onDepartedNotification, r"Notification: %s has departed\." % names ) self.connection.expect_fromto( self.onChannelList, "channels only for their designated topics.", "SPECIAL NOTE", ) self.connection.expect_line( lambda m: GLib.idle_add(self.emit, "channelAdd", m.groups()[0]), r"\[(\d+)\] added to your channel list.", ) self.connection.expect_line( lambda m: GLib.idle_add(self.emit, "channelRemove", m.groups()[0]), r"\[(\d+)\] removed to your channel list.", ) self.connection.expect_line( lambda m: GLib.idle_add(self.emit, "channelJoinError", *m.groups()), r"Only (.+?) may join channel (\d+)\.", ) self.connection.expect_line( self.getNoChannelPlayers, r"Channel (\d+) is empty\." ) self.connection.expect_fromto( self.getChannelPlayers, r"Channel (\d+)(?: \"(\w+)\")?: (.+)", r"(\d+) player(?: is|s are) in channel \d+\.", ) self.connection.expect_fromto( self.gotPlayerChannels, "%s is in the following channels:" % names, r"(?!(?:\d+\s+)+)", ) # self.connection.expect_line (self.toldChannel, # '\(told (\d+) players in channel (\d+) ".+"\)') # (told Chronatog) # Only chess advisers and admins may join channel 63. # Only (.+?) may sey send tells to channel (\d+). # Only admins may send tells to channel 0. # Only registered users may send tells to channels other than 4, 7 and 53. self.currentLogChannel = None self.connection.expect_line( self.onChannelLogStart, r":Channel (\d+|shout|c-shout) log for the last \d+ minutes:$", ) self.connection.expect_line( self.onChannelLogLine, r":\[(\d+):(\d+):(\d+)\] (?:(?:--> )?%s(?: shouts)?)\S* (.+)$" % names, ) self.connection.expect_line( self.onChannelLogBreak, ':Use "tell chLog Next" to print more.$' ) # TODO handling of this case is nessesary for console: # fics% tell 1 hi # You are not in channel 1, auto-adding you if possible. # Setting 'Lang' is a workaround for # http://code.google.com/p/pychess/issues/detail?id=376 # and can be removed when conversion to FICS block mode is done self.connection.client.run_command("set Lang English") self.connection.client.run_command("set height 240") self.connection.client.run_command("inchannel %s" % self.connection.username) self.connection.client.run_command("help channel_list") self.channels = {} # Observing 112 [DrStupp vs. hajaK]: pgg (1 user) self.connection.expect_line( self.get_allob_list, r"(?:Observing|Examining)\s+(\d+).+: (.+) \(" ) self.connection.expect_line( self.on_allob_no, r"No one is observing game (\d+)." ) def get_allob_list(self, match): """Description: Processes the returning pattern matched of the FICS allob command extracts out the gameno and a list of observers before emmiting them for collection by the observers view match: (re.reg-ex) is the complied matching pattern for processing """ obs_dic = {} gameno = match.group(1) observers = match.group(2) oblist = observers.split() for player in oblist: if "(U)" not in player: # deals with unregistered players try: if "(" in player: # deals with admin and multi titled players player, rest = player.split("(", 1) ficsplayer = self.connection.players.get(player) obs_dic[player] = ficsplayer.getRatingByGameType( GAME_TYPES["standard"] ) except KeyError: obs_dic[player] = 0 # print("player %s is not in self.connection.players" % player) else: obs_dic[player] = 0 obs_sorted = sorted(obs_dic.items(), key=operator.itemgetter(1), reverse=True) obs_str = "" for toople in obs_sorted: player, rating = toople if rating == 0: obs_str += "%s " % player # Don't print ratings for guest accounts else: obs_str += f"{player}({rating}) " self.emit("observers_received", gameno, obs_str) get_allob_list.BLKCMD = BLKCMD_ALLOBSERVERS def on_allob_no(self, match): gameno = match.group(1) self.emit("observers_received", gameno, "") on_allob_no.BLKCMD = BLKCMD_ALLOBSERVERS def getChannels(self): return self.channels def getJoinedChannels(self): channels = self.connection.lvm.getList("channel") return channels channelListItem = re.compile(r"((?:\d+,?)+)\s*(.*)") def onChannelList(self, matchlist): self.channels = [ (CHANNEL_SHOUT, _("Shout")), (CHANNEL_CSHOUT, _("Chess Shout")), ] numbers = set(range(256)) # TODO: Use limits->Server->Channels for line in matchlist[1:-1]: match = self.channelListItem.match(line) if not match: continue ids, desc = match.groups() for id in ids.split(","): numbers.remove(int(id)) self.channels.append((id, desc)) for i in numbers: self.channels.append((str(i), _("Unofficial channel %d" % i))) GLib.idle_add(self.emit, "channelsListed", self.channels) def getNoChannelPlayers(self, match): channel = match.groups()[0] GLib.idle_add(self.emit, "receivedNames", channel, []) def getChannelPlayers(self, matchlist): channel, name, people = matchlist[0].groups() people += " " + " ".join(matchlist[1:-1]) people = namesC.findall(titlesC.sub("", people)) GLib.idle_add(self.emit, "receivedNames", channel, people) def gotPlayerChannels(self, matchlist): list = [] for line in matchlist[1:-1]: list += line.split() def onPrivateMessage(self, match): name, isadmin, text = match.groups() text = self.entityDecode(text) GLib.idle_add(self.emit, "privateMessage", name, "title", isadmin, text) def onAnnouncement(self, match): text = match.groups()[0] text = self.entityDecode(text) GLib.idle_add(self.emit, "announcement", text) def onChannelMessage(self, match): name, isadmin, channel, text = match.groups() text = self.entityDecode(text) isme = name.lower() == self.connection.username.lower() GLib.idle_add(self.emit, "channelMessage", name, isadmin, isme, channel, text) def onShoutMessage(self, match): if len(match.groups()) == 4: name, isadmin, type, text = match.groups() elif len(match.groups()) == 3: name, isadmin, text = match.groups() type = "" text = self.entityDecode(text) isme = name.lower() == self.connection.username.lower() # c-shout should be used ONLY for chess-related messages, such as # questions about chess or announcing being open for certain kinds of # chess matches. Use "shout" for non-chess messages. # t-shout is used to invite to tournaments if type == "c-": GLib.idle_add( self.emit, "channelMessage", name, isadmin, isme, CHANNEL_CSHOUT, text ) else: GLib.idle_add( self.emit, "channelMessage", name, isadmin, isme, CHANNEL_SHOUT, text ) def onKibitzMessage(self, match): name, rating, gameno, text = match.groups() text = self.entityDecode(text) GLib.idle_add(self.emit, "kibitzMessage", name, int(gameno), text) def onWhisperMessage(self, match): name, rating, gameno, text = match.groups() text = self.entityDecode(text) GLib.idle_add(self.emit, "whisperMessage", name, int(gameno), text) def onArrivalNotification(self, match): name = match.groups()[0] try: player = self.connection.players.get(name) except KeyError: return if player.name not in self.connection.notify_users: self.connection.notify_users.append(player.name) GLib.idle_add(self.emit, "arrivalNotification", player) def onDepartedNotification(self, match): name = match.groups()[0] try: player = self.connection.players.get(name) except KeyError: return GLib.idle_add(self.emit, "departedNotification", player) def toldChannel(self, match): amount, channel = match.groups() GLib.idle_add(self.emit, "toldChannel", channel, int(amount)) def onChannelLogStart(self, match): (channel,) = match.groups() self.currentLogChannel = channel def onChannelLogLine(self, match): if not self.currentLogChannel: log.warning("Received log line before channel was set") return hour, minutes, secs, handle, text = match.groups() conv_time = self.convTime(int(hour), int(minutes), int(secs)) text = self.entityDecode(text) GLib.idle_add( self.emit, "channelLog", self.currentLogChannel, conv_time, handle, text ) def onChannelLogBreak(self, match): self.connection.client.run_command("xtell chlog Next") def convTime(self, h, m, s): # Convert to timestamp t1, t2, t3, t4, t5, t6, t7, t8, t9 = time.localtime() tstamp = time.mktime((t1, t2, t3, h, m, s, 0, 0, 0)) # Difference to now in hours dif = (tstamp - time.time()) / 60.0 / 60.0 # As we know there is maximum 30 minutes in difference, we can guess when the # message was sent, without knowing the sending time zone return tstamp - ceil(dif) * 60 * 60 entityExpr = re.compile("&#x([a-f0-9]+);") def entityDecode(self, text): return self.entityExpr.sub(lambda m: chr(int(m.groups()[0], 16)), text) def entityEncode(self, text): buf = [] for char in text: if not 32 <= ord(char) <= 127: char = "&#" + hex(ord(char))[1:] + ";" buf.append(char) return "".join(buf) def getChannelLog(self, channel, minutes=30): """Channel can be channel_id, shout or c-shout""" assert 1 <= minutes <= 120 # Using the chlog bot self.connection.client.run_command( "xtell chlog show %s -t %d" % (channel, minutes) ) def getPlayersChannels(self, player): self.connection.client.run_command("inchannel %s" % player) def getPeopleInChannel(self, channel): if channel in (CHANNEL_SHOUT, CHANNEL_CSHOUT): people = self.connection.players.get_online_playernames() GLib.idle_add(self.emit, "receivedNames", channel, people) self.connection.client.run_command("inchannel %s" % channel) def joinChannel(self, channel): self.connection.client.run_command("+channel %s" % channel) def removeChannel(self, channel): self.connection.client.run_command("-channel %s" % channel) def mayTellChannel(self, channel): if self.connection.isRegistred() or channel in ("4", "7", "53"): return True return False def tellPlayer(self, player, message): message = self.entityEncode(message) self.connection.client.run_command(f"tell {player} {message}") def tellChannel(self, channel, message): message = self.entityEncode(message) if channel == CHANNEL_SHOUT: self.connection.client.run_command("shout %s" % message) elif channel == CHANNEL_CSHOUT: self.connection.client.run_command("cshout %s" % message) else: self.connection.client.run_command(f"tell {channel} {message}") def tellAll(self, message): message = self.entityEncode(message) self.connection.client.run_command("shout %s" % message) def tellGame(self, gameno, message): message = self.entityEncode(message) self.connection.client.run_command(f"xkibitz {gameno} {message}") def tellOpponent(self, message): message = self.entityEncode(message) self.connection.client.run_command("say %s" % message) def tellBughousePartner(self, message): message = self.stripChars(message) self.connection.client.run_command("ptell %s" % message) def tellUser(self, player, message): for line in message.strip().split("\n"): self.tellPlayer(player, line) def whisper(self, message): message = self.entityEncode(message) self.connection.client.run_command("whisper %s" % message) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ConsoleManager.py0000644000175100001770000000123514614030313022457 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic.VerboseTelnet import ConsoleHandler class ConsoleManager(GObject.GObject): __gsignals__ = { "consoleMessage": ( GObject.SignalFlags.RUN_FIRST, None, ( object, object, ), ), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.client.lines.consolehandler = ConsoleHandler( self.onConsoleMessage ) def onConsoleMessage(self, lines, ini_lines=None): self.emit("consoleMessage", lines, ini_lines) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ErrorManager.py0000755000175100001770000000204614614030313022152 0ustar00runnerdockerfrom gi.repository import GObject sanmove = "([a-hx@OoPKQRBN0-8+#=-]{2,7})" class ErrorManager(GObject.GObject): __gsignals__ = { "onCommandNotFound": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "onAmbiguousMove": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "onIllegalMove": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, connection): GObject.GObject.__init__(self) connection.expect_line(self.onError, r"(.*?): Command not found\.") connection.expect_line( self.onAmbiguousMove, r"Ambiguous move \((%s)\)\." % sanmove ) connection.expect_line(self.onIllegalMove, r"Illegal move \((%s)\)\." % sanmove) def onError(self, match): command = match.groups()[0] self.emit("onCommandNotFound", command) def onAmbiguousMove(self, match): move = match.groups()[0] self.emit("onAmbiguousMove", move) def onIllegalMove(self, match): move = match.groups()[0] self.emit("onIllegalMove", move) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/FingerManager.py0000755000175100001770000002720514614030313022277 0ustar00runnerdockerimport re from time import time from gi.repository import GObject from pychess.ic import ( IC_STATUS_OFFLINE, IC_STATUS_ACTIVE, IC_STATUS_PLAYING, IC_STATUS_BUSY, GAME_TYPES_BY_FICS_NAME, BLKCMD_FINGER, ) from pychess.Utils.const import WHITE, BLACK from pychess.System.Log import log types = "(?:blitz|standard|lightning|wild|bughouse|crazyhouse|suicide|losers|atomic)" rated = "(rated|unrated)" colors = r"(?:\[(white|black)\]\s?)?" ratings = r"([\d\+\-]{1,4})" titleslist = r"(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|SR|CA|C|U|D|B|T|\*)" titles = r"((?:\(%s\))+)?" % titleslist names = r"(\w+)%s" % titles mf = r"(?:([mf]{1,2})\s?)?" # FIXME: Needs support for day, hour, min, sec times = "[, ]*".join(r"(?:(\d+) %s)?" % s for s in ("days", "hrs", "mins", "secs")) # "73 days, 5 hrs, 55 mins" # ('73', '5', '55', None) class FingerObject: def __init__(self, name=""): self.__fingerTime = time() self.__name = name self.__status = None self.__upTime = 0 self.__idleTime = 0 self.__busyMessage = "" self.__lastSeen = 0 self.__totalTimeOnline = 0 self.__created = 0 # Since field from % of life online self.__email = "" self.__sanctions = "" self.__adminLevel = "" self.__timeseal = False self.__notes = [""] * 10 self.__gameno = "" self.__color = WHITE self.__opponent = "" self.__silence = False self.__titles = None self.__ratings = {} def getName(self): """Returns the name of the user, without any title sufixes""" return self.__name def getStatus(self): """Returns the current user-status as a STATUS constant""" return self.__status def getUpTime(self): """Returns the when the user logged on Not set when status == STATUS_OFFLINE""" return self.__upTime + time() - self.__fingerTime def getIdleTime(self): """Returns the when the last time the user did something active Not set when status == STATUS_OFFLINE""" return self.__idleTime + time() - self.__fingerTime def getBusyMessage(self): """Returns the userset idle message This is set when status == STATUS_BUSY or sometimes when status == STATUS_PLAYING""" return self.__busyMessage def getLastSeen(self): """Returns when the user logged off This is only set when status == STATUS_OFFLINE This is not set, if the user has never logged on""" return self.__lastSeen def getTotalTimeOnline(self): """Returns how many seconds the user has been on FICS since the account was created. This is not set, if the user has never logged on""" return self.__totalTimeOnline def getCreated(self): """Returns when the account was created""" return self.__created def getEmail(self): """Returns the email adress of the user. This will probably only be set for the logged in user""" return self.__email def getSanctions(self): """Returns any sanctions the user has against them. This is usually an empty string""" return self.__sanctions def getAdminLevel(self): """Returns the admin level as a string Only set for admins.""" return self.__adminLevel def getTimeseal(self): """Returns True if the user is using timeseal for fics connection""" return self.__timeseal def getNotes(self): """Returns a list of the ten finger notes""" return self.__notes def getGameno(self): """Returns the gameno of the game in which user is currently playing This is only set when status == STATUS_PLAYING""" return self.__gameno def getColor(self): """If status == STATUS_PLAYING getColor returns the color witch the player has got in the game. Otherwise always WHITE is returned""" return self.__color def getOpponent(self): """Returns the opponent of the user in his current game This is only set when status == STATUS_PLAYING""" return self.__opponent def getSilence(self): """Return True if the user is playing in silence This is only set when status == STATUS_PLAYING""" return self.__silence def getRatings(self): return self.__ratings def getRating(self, type=None): return int(self.__ratings[type][0]) def getRatingsLen(self): return len(self.__ratings) def getTitles(self): return self.__titles def setName(self, value): self.__name = value def setStatus(self, value): self.__status = value def setUpTime(self, value): """Use relative seconds""" self.__upTime = value def setIdleTime(self, value): """Use relative seconds""" self.__idleTime = value def setBusyMessage(self, value): """Use relative seconds""" self.__busyMessage = value def setLastSeen(self, value): """Use relative seconds""" self.__lastSeen = value def setTotalTimeOnline(self, value): """Use relative seconds""" self.__totalTimeOnline = value def setCreated(self, value): """Use relative seconds""" self.__created = value def setEmail(self, value): self.__email = value def setSanctions(self, value): self.__sanctions = value def setAdminLevel(self, value): self.__adminLevel = value def setTimeseal(self, value): self.__timeseal = value def setNote(self, index, note): self.__notes[index] = note def setGameno(self, value): self.__gameno = value def setColor(self, value): self.__color = value def setOpponent(self, value): self.__opponent = value def setSilence(self, value): self.__silence = value def setRating(self, rating_type, rating_line): self.__ratings[rating_type] = rating_line def setTitles(self, titles): self.__titles = titles class FingerManager(GObject.GObject): __gsignals__ = { "fingeringFinished": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "ratingAdjusted": (GObject.SignalFlags.RUN_FIRST, None, (str, str)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection fingerLines = ( r"(?P%s has never connected\.)" % names, "Last disconnected: (?P.+)", "On for: (?P.+?) +Idle: (?P.+)", r"%s is in (?Psilence) mode\." % names, r"\(playing game (?P\d+): (?P\S+?)%s vs. (?P\S+?)%s\)" % (titles, titles), r"\(%s (?P.+?)\)" % names, r"%s has not played any rated games\." % names, "rating +RD +win +loss +draw +total +best", "(?P%s) +(?P.+)" % types, "Email *: (?P.+)", "Sanctions *: (?P.+)", "Total time online: (?P.+)", r"% of life online: [\d\.]+ \(since (?P.+?)\)", r"Timeseal [ \d] : (?POff|On)", "Admin Level: (?P.+)", r"(?P\d+): *(?P.*)", "$", ) self.connection.expect_fromplus( self.onFinger, "Finger of %s:" % names, "$|".join(fingerLines) ) self.connection.client.run_command("iset nowrap 1") # We don't use this. Rather we use BoardManagers "gameEnded", after # which we do a refinger. This is to ensure not only rating, but also # wins/looses/draws are updated # self.connection.expect(self.onRatingAdjust, # "%s rating adjustment: (\d+) --> (\d+)" % types # Notice if you uncomment this: The expression has to be compiled with # re.IGNORECASE, or the first letter of 'type' must be capital def parseDate(self, date): # Tue Mar 11, 10:56 PDT 2008 return date def parseShortDate(self, date): # 24-Oct-2007 return date def parseTime(self, time): # 3 days, 2 hrs, 53 mins return time def onFinger(self, matchlist): finger = FingerObject() name = matchlist[0].groups()[0] finger.setName(name) if matchlist[0].groups()[1]: titles = re.findall(titleslist, matchlist[0].groups()[1]) finger.setTitles(titles) for match in matchlist[1:]: if not match.group(): continue groupdict = match.groupdict() if groupdict["never"] is not None: finger.setStatus(IC_STATUS_OFFLINE) elif groupdict["last"] is not None: finger.setStatus(IC_STATUS_OFFLINE) finger.setLastSeen(self.parseDate(groupdict["last"])) elif groupdict["uptime"] is not None: finger.setStatus(IC_STATUS_ACTIVE) finger.setUpTime(self.parseTime(groupdict["uptime"])) finger.setIdleTime(self.parseTime(groupdict["idletime"])) elif groupdict["silence"] is not None: finger.setSilence(True) elif groupdict["gameno"] is not None: finger.setStatus(IC_STATUS_PLAYING) finger.setGameno(groupdict["gameno"]) if groupdict["p1"].lower() == self.connection.getUsername().lower(): finger.setColor(WHITE) finger.setOpponent(groupdict["p2"]) else: finger.setColor(BLACK) finger.setOpponent(groupdict["p1"]) elif groupdict["busymessage"] is not None: finger.setStatus(IC_STATUS_BUSY) finger.setBusyMessage(groupdict["busymessage"]) elif groupdict["gametype"] is not None: gametype = GAME_TYPES_BY_FICS_NAME[groupdict["gametype"].lower()] ratings = groupdict["ratings"].split() finger.setRating(gametype.rating_type, ratings) elif groupdict["email"] is not None: finger.setEmail(groupdict["email"]) elif groupdict["sanctions"] is not None: finger.setSanctions(groupdict["sanctions"]) elif groupdict["tto"] is not None: finger.setTotalTimeOnline(self.parseTime(groupdict["tto"])) elif groupdict["created"] is not None: finger.setCreated(self.parseDate(groupdict["created"])) elif groupdict["timeseal"] is not None: finger.setTimeseal(groupdict["timeseal"] == "On") elif groupdict["adminlevel"] is not None: finger.setAdminLevel(groupdict["adminlevel"]) elif groupdict["noteno"] is not None: finger.setNote(int(groupdict["noteno"]) - 1, groupdict["note"]) else: log.debug("Ignored fingerline: %s" % repr(match.group())) self.emit("fingeringFinished", finger) onFinger.BLKCMD = BLKCMD_FINGER def onRatingAdjust(self, match): # Notice: This is only recived for us, not for other persons we finger rating_type, old, new = match.groups() self.emit("ratingAdjusted", rating_type, new) def finger(self, user): self.connection.client.run_command("finger %s" % user) def setFingerNote(self, note, message): assert 1 <= note <= 10 self.connection.client.run_command("set %d %s" % (note, message)) def setBusyMessage(self, message): """Like set busy is really busy right now.""" self.connection.client.run_command("set busy %s" % message) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/HelperManager.py0000755000175100001770000003454014614030313022304 0ustar00runnerdockerimport re from gi.repository import GObject from pychess.Utils.const import reprResult from pychess.ic import ( GAME_TYPES_BY_SHORT_FICS_NAME, IC_STATUS_PLAYING, BLKCMD_GAMES, GAME_TYPES, TITLES, TYPE_BLITZ, parse_title_hex, TYPE_ATOMIC, TYPE_WILD, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_CRAZYHOUSE, TYPE_LOSERS, TYPE_BUGHOUSE, TYPE_SUICIDE, DEVIATION, STATUS, BLKCMD_WHO, IC_STATUS_NOT_AVAILABLE, IC_STATUS_AVAILABLE, parseRating, ) from pychess.ic.FICSObjects import FICSPlayer, FICSGame from pychess.ic.managers.BoardManager import parse_reason rated = "(rated|unrated)" colors = r"(?:\[(white|black)\]\s?)?" ratings = r"([\d\+\- ]{1,4})" titleslist = r"(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|CA|CM|FA|NM|C|U|D|B|T|H|\*)" titleslist_re = re.compile(titleslist) titles = r"((?:\(%s\))+)?" % titleslist names = "([a-zA-Z]+)%s" % titles mf = r"(?:([mf]{1,2})\s?)?" whomatch = r"(?:(?:([-0-9+]{1,4})([\^~:\#. &])%s))" % names whomatch_re = re.compile(whomatch) whoI = ( r"([A-Za-z]+)([\^~:\#. &])(\\d{2})" + r"(\d{1,4})([P E])" * 8 + r"(\d{1,4})([PE]?)" ) re_whoI = re.compile(whoI) class HelperManager(GObject.GObject): def __init__(self, helperconn, connection): GObject.GObject.__init__(self) self.helperconn = helperconn self.connection = connection # TODO: Examined games # 25 (Exam. 0 Friar 0 Friar ) [ uu 0 0] W: 1 # 28 ++++ TryMe 1737 Jack [ su 30 20] 22:27 - 23:17 (29-30) W: 16 # 2 2274 OldManII ++++ Peshkin [ bu 2 12] 2:34 - 1:47 (39-39) B: 3 # 29 1622 Vman 1609 PopKid [ sr 10 10] 1:14 - 5:10 (21-22) B: 18 # 32 1880 Raskapov 1859 RoboDweeb [ br 2 12] 1:04 - 1:26 ( 9-10) B: 34 # 1 1878 Roberto 1881 baraka [psr 45 30] 30:35 - 34:24 (22-22) W: 21 # # 6 games displayed (of 23 in progress) self.helperconn.expect_fromto( self.on_game_list, r"(\d+) %s (\w+)\s+%s (\w+)\s+\[(p| )(%s)(u|r)\s*(\d+)\s+(\d+)\]\s*(\d:)?(\d+):(\d+)\s*-\s*(\d:)?(\d+):(\d+) \(\s*(\d+)-\s*(\d+)\) (W|B):\s*(\d+)" % (ratings, ratings, "|".join(GAME_TYPES_BY_SHORT_FICS_NAME.keys())), r"(\d+) games displayed.", ) if self.helperconn.FatICS or self.helperconn.USCN: self.helperconn.expect_line( self.on_player_who, rf"{whomatch}(?:\s{{2,}}{whomatch})+" ) self.helperconn.expect_line( self.on_player_connect, r"\[([A-Za-z]+) has connected\.\]" ) self.helperconn.expect_line( self.on_player_disconnect, r"\[([A-Za-z]+) has disconnected\.\]" ) else: # New ivar pin # http://www.freechess.org/Help/HelpFiles/new_features.html self.helperconn.expect_fromto( self.on_player_whoI, whoI, r"(\d+) Players Displayed." ) self.helperconn.expect_line(self.on_player_connectI, " %s" % whoI) self.helperconn.expect_line(self.on_player_disconnectI, " ([A-Za-z]+)") self.helperconn.expect_line( self.on_game_add, r"\{Game (\d+) \(([A-Za-z]+) vs\. ([A-Za-z]+)\) (?:Creating|Continuing) (u?n?rated) ([^ ]+) match\.\}$", ) self.helperconn.expect_line( self.on_game_remove, r"\{Game (\d+) \(([A-Za-z]+) vs\. ([A-Za-z]+)\) ([A-Za-z']+ .+)\} (\*|1/2-1/2|1-0|0-1)$", ) self.helperconn.expect_line( self.on_player_unavailable, "%s is no longer available for matches." % names ) self.helperconn.expect_fromto( self.on_player_available, r"%s Blitz \(%s\), Std \(%s\), Wild \(%s\), Light\(%s\), Bug\(%s\)" % (names, ratings, ratings, ratings, ratings, ratings), "is now available for matches.", ) # FICS game types # b: blitz l: lightning u: untimed e: examined game # s: standard w: wild x: atomic z: crazyhouse # B: Bughouse L: losers S: Suicide if self.helperconn.FatICS or self.helperconn.USCN: self.helperconn.client.run_command("who") else: self.helperconn.client.run_command("who IbslwBzSLx") if self.helperconn.FatICS or self.helperconn.USCN: self.helperconn.client.run_command("games") else: self.helperconn.client.run_command("games /bslwBzSLx") def on_game_list(self, matchlist): games = [] for match in matchlist[:-1]: if isinstance(match, str): if match: parts0, parts1 = match.split("[") gameno, wrating, wname, brating, bname = parts0.split() private = parts1[0] shorttype = parts1[1] rated = parts1[2] min = parts1[3:6] inc = parts1[7:10] else: continue else: ( gameno, wrating, wname, brating, bname, private, shorttype, rated, min, inc, whour, wmin, wsec, bhour, bmin, bsec, wmat, bmat, color, movno, ) = match.groups() try: gametype = GAME_TYPES_BY_SHORT_FICS_NAME[shorttype] except KeyError: return wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), rated=(rated == "r"), private=(private == "p"), minutes=int(min), inc=int(inc), game_type=gametype, ) for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game rating = parseRating(rating) if player.ratings[gametype.rating_type] != rating: player.ratings[gametype.rating_type] = rating player.emit("ratings_changed", gametype.rating_type, player) game = self.connection.games.get(game, emit=False) games.append(game) self.connection.games.emit("FICSGameCreated", games) # print(matchlist[-1].groups()[0], len(games)) on_game_list.BLKCMD = BLKCMD_GAMES def on_game_add(self, match): gameno, wname, bname, rated, game_type = match.groups() if game_type not in GAME_TYPES: return wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), rated=(rated == "rated"), game_type=GAME_TYPES[game_type], ) for player in (wplayer, bplayer): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game self.connection.games.get(game) def on_game_remove(self, match): gameno, wname, bname, comment, result = match.groups() result, reason = parse_reason(reprResult.index(result), comment, wname=wname) try: wplayer = self.connection.players.get(wname) wplayer.restore_previous_status() # no status update will be sent by # FICS if the player doesn't become available, so we restore # previous status first (not necessarily true, but the best guess) except KeyError: print("%s not in self.connections.players - creating" % wname) wplayer = FICSPlayer(wname) try: bplayer = self.connection.players.get(bname) bplayer.restore_previous_status() except KeyError: print("%s not in self.connections.players - creating" % bname) bplayer = FICSPlayer(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), result=result, reason=reason ) if wplayer.game is not None: game.rated = wplayer.game.rated game = self.connection.games.get(game, emit=False) # Our played/observed game ends are handled in main connection to prevent # removing them by helper connection before latest move(style12) comes from server if ( game == self.connection.bm.theGameImPlaying or game in self.connection.bm.gamesImObserving ): return self.connection.games.game_ended(game) # Do this last to give anybody connected to the game's signals a chance # to disconnect from them first wplayer.game = None bplayer.game = None @staticmethod def parseTitles(titles): _titles = set() if titles: for title in titleslist_re.findall(titles): if title in TITLES: _titles.add(TITLES[title]) return _titles def on_player_connectI(self, match, set_online=True): # bslwBzSLx # gbtami 001411E1663P1483P1720P0P1646P0P0P1679P ( name, status, titlehex, blitz, blitzdev, std, stddev, light, lightdev, wild, wilddev, bughouse, bughousedev, crazyhouse, crazyhousedev, suicide, suicidedev, losers, losersdev, atomic, atomicdev, ) = match.groups() player = self.connection.players.get(name) titles = parse_title_hex(titlehex) if not player.titles >= titles: player.titles |= titles for rating_type, elo, dev in ( (TYPE_BLITZ, blitz, blitzdev), (TYPE_STANDARD, std, stddev), (TYPE_LIGHTNING, light, lightdev), (TYPE_ATOMIC, atomic, atomicdev), (TYPE_WILD, wild, wilddev), (TYPE_CRAZYHOUSE, crazyhouse, crazyhousedev), (TYPE_BUGHOUSE, bughouse, bughousedev), (TYPE_LOSERS, losers, losersdev), (TYPE_SUICIDE, suicide, suicidedev), ): rating = parseRating(elo) if player.ratings[rating_type] != rating: player.ratings[rating_type] = rating player.emit("ratings_changed", rating_type, player) player.deviations[rating_type] = DEVIATION[dev] # do last so rating info is there when notifications are generated status = STATUS[status] if player.status != status: player.status = status if set_online and not player.online: player.online = True return player def on_player_disconnectI(self, match): name = match.groups()[0] self.connection.players.player_disconnected(name) def on_player_whoI(self, matchlist): players = [] for match in matchlist[:-1]: if isinstance(match, str): if match: players.append(self.on_player_connectI(re_whoI.match(match))) else: continue else: players.append(self.on_player_connectI(match)) self.connection.players.emit("FICSPlayerEntered", players) # print(matchlist[-1].groups()[0], len(players)) on_player_whoI.BLKCMD = BLKCMD_WHO def on_player_who(self, match): for blitz, status, name, titles in whomatch_re.findall(match.string): player = self.connection.players.get(name) if not player.online: player.online = True status = STATUS[status] if player.status != status: player.status = status titles = self.parseTitles(titles) if not player.titles >= titles: player.titles |= titles blitz = parseRating(blitz) if player.ratings[TYPE_BLITZ] != blitz: player.ratings[TYPE_BLITZ] = blitz player.emit("ratings_changed", TYPE_BLITZ, player) def on_player_connect(self, match): name = match.groups()[0] player = self.connection.players.get(name) player.online = True def on_player_disconnect(self, match): name = match.groups()[0] self.connection.players.player_disconnected(name) def on_player_unavailable(self, match): name, titles = match.groups() player = self.connection.players.get(name) titles = self.parseTitles(titles) if not player.titles >= titles: player.titles |= titles # we get here after players start a game, so we make sure that we don't # overwrite IC_STATUS_PLAYING if player.game is None and player.status not in ( IC_STATUS_PLAYING, IC_STATUS_NOT_AVAILABLE, ): player.status = IC_STATUS_NOT_AVAILABLE def on_player_available(self, matches): name, titles, blitz, std, wild, light, bughouse = matches[0].groups() player = self.connection.players.get(name) if not player.online: player.online = True if player.status != IC_STATUS_AVAILABLE: player.status = IC_STATUS_AVAILABLE titles = self.parseTitles(titles) if not player.titles >= titles: player.titles |= titles for rating_type, rating in ( (TYPE_BLITZ, blitz), (TYPE_STANDARD, std), (TYPE_LIGHTNING, light), (TYPE_WILD, wild), (TYPE_BUGHOUSE, bughouse), ): rating = parseRating(rating) if player.ratings[rating_type] != rating: player.ratings[rating_type] = rating player.emit("ratings_changed", rating_type, player) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCAdjournManager.py0000644000175100001770000001741014614030313023000 0ustar00runnerdockerimport datetime from gi.repository import GObject from pychess.ic import GAME_TYPES_BY_FICS_NAME from pychess.ic.icc import DG_GAMELIST_BEGIN, DG_GAMELIST_ITEM, DG_RATING_TYPE_KEY from pychess.ic.managers.AdjournManager import AdjournManager from pychess.ic.FICSObjects import FICSAdjournedGame, FICSHistoryGame, FICSJournalGame from pychess.Utils.const import ( WON_ADJUDICATION, DRAW_AGREE, WON_DISCONNECTION, WON_CALLFLAG, WON_MATE, DRAW_INSUFFICIENT, DRAW_REPETITION, WON_RESIGN, DRAW_STALEMATE, DRAW_BLACKINSUFFICIENTANDWHITETIME, UNKNOWN_REASON, DRAW_50MOVES, WHITEWON, DRAW, BLACKWON, ADJOURNED, DRAW_CALLFLAG, DRAW_ADJUDICATION, ABORTED, WHITE, BLACK, ) won_reasons_dict = { "0": WON_RESIGN, "1": WON_MATE, "2": WON_CALLFLAG, "3": WON_ADJUDICATION, "4": WON_DISCONNECTION, "5": WON_DISCONNECTION, "6": WON_DISCONNECTION, "7": WON_RESIGN, "8": WON_MATE, "9": WON_CALLFLAG, "10": WON_DISCONNECTION, "11": WON_DISCONNECTION, "12": WON_DISCONNECTION, "13": WON_ADJUDICATION, } draw_reasons_dict = { "0": DRAW_AGREE, "1": DRAW_STALEMATE, "2": DRAW_REPETITION, "3": DRAW_50MOVES, "4": DRAW_BLACKINSUFFICIENTANDWHITETIME, # DRAW_WHITEINSUFFICIENTANDBLACKTIME "5": DRAW_INSUFFICIENT, "6": DRAW_CALLFLAG, "7": DRAW_ADJUDICATION, "8": DRAW_AGREE, "9": DRAW_CALLFLAG, "10": DRAW_ADJUDICATION, } class ICCAdjournManager(AdjournManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.RATING_TYPES = {} self.connection.expect_dg_line(DG_RATING_TYPE_KEY, self.on_icc_rating_type_key) self.connection.expect_dg_line(DG_GAMELIST_BEGIN, self.on_icc_gamelist_begin) self.connection.expect_dg_line(DG_GAMELIST_ITEM, self.on_icc_gamelist_item) self.connection.client.run_command("set-2 %s 1" % DG_RATING_TYPE_KEY) self.connection.client.run_command("set-2 %s 1" % DG_GAMELIST_BEGIN) self.connection.client.run_command("set-2 %s 1" % DG_GAMELIST_ITEM) self.queryAdjournments() self.queryHistory() self.queryJournal() self.connection.query_game = None def on_icc_rating_type_key(self, data): key, value = data.split() self.RATING_TYPES[key] = value.lower() def on_icc_gamelist_begin(self, data): # command {parameters} nhits first last {summary} # command is one of search, history, liblist, or stored # history {gbtami} 20 1 20 {Recent games of gbtami} command, rest = data.split(" ", 1) params, rest = rest.split("}", 1) name = params[1:] # force clean up old gamelists if self.connection.history_owner != name: self.emit("onAdjournmentsList", []) self.emit("onHistoryList", []) self.emit("onJournalList", []) if command == "stored": self.connection.stored_owner = name elif command == "history": self.connection.history_owner = name elif command == "liblist": self.connection.journal_owner = name self.gamelist_command = command def on_icc_gamelist_item(self, data): # index id event date time white-name white-rating black-name black-rating rated rating-type # wild init-time-W inc-W init-time-B inc-B eco status color mode {note} here # status: 0=win 1=draw 2=adjourned 3=abort # rating_type: 0=wild, 1=blitz, 2=standard, bullet, 4=bughouse see DG_RATING_TYPE_KEY # 99 1731753309 ? 2016.12.08 15:07:53 gbtami 1538 konechno 1644 1 11 0 3 0 3 0 A00 0 1 1 {} 0 # 98 1731751094 ? 2016.12.08 14:34:37 gbtami 1550 espilva 1484 1 11 0 3 0 3 0 A00 1 0 5 {} 0 ( idx, gid, event, date, time, wname, wrating, bname, brating, rated, rating_type, wild, wtime, winc, btime, binc, eco, status, color, mode, rest, ) = data.split(" ", 20) if status == "0": result = WHITEWON if color == "0" else BLACKWON elif status == "1": result = DRAW elif status == "2": result = ADJOURNED else: result = ABORTED white = wname black = bname wrating = wrating brating = brating if status == "0": reason = won_reasons_dict[mode] elif status == "1": reason = draw_reasons_dict[mode] else: reason = UNKNOWN_REASON year, month, day = date.split(".") hour, minute, sec = time.split(":") gametime = datetime.datetime( int(year), int(month), int(day), int(hour), int(minute), int(sec) ) rated = rated == "1" fics_name = self.RATING_TYPES[rating_type] gametype = GAME_TYPES_BY_FICS_NAME[fics_name] minutes = int(wtime) gain = int(winc) wplayer = self.connection.players.get(white) bplayer = self.connection.players.get(black) if self.gamelist_command == "stored": game = FICSAdjournedGame( wplayer, bplayer, game_type=gametype, rated=rated, our_color=WHITE if wname == self.connection.username else BLACK, minutes=minutes, inc=gain, ) if game.opponent.adjournment is False: game.opponent.adjournment = True elif self.gamelist_command == "history": game = FICSHistoryGame( wplayer, bplayer, game_type=gametype, rated=rated, minutes=minutes, inc=gain, wrating=wrating, brating=brating, time=gametime, reason=reason, history_no=idx, result=result, ) elif self.gamelist_command == "liblist": game = FICSJournalGame( wplayer, bplayer, game_type=gametype, rated=rated, minutes=minutes, inc=gain, wrating=wrating, brating=brating, time=gametime, reason=reason, journal_no=idx, result=result, ) if game not in self.connection.games: game = self.connection.games.get(game, emit=False) if self.gamelist_command == "stored": self.emit("adjournedGameAdded", game) elif self.gamelist_command == "history": self.emit("historyGameAdded", game) elif self.gamelist_command == "liblist": self.emit("journalGameAdded", game) def queryJournal(self, owner=None): if owner is None: self.connection.client.run_command("liblist") else: self.connection.client.run_command("liblist %s" % owner) def queryMoves(self, game): self.connection.query_game = game if isinstance(game, FICSHistoryGame): self.connection.client.run_command( f"spgn {self.connection.history_owner} {game.history_no}" ) elif isinstance(game, FICSJournalGame): self.connection.client.run_command( f"spgn {self.connection.journal_owner} %{game.journal_no}" ) else: self.connection.client.run_command( f"spgn {self.connection.stored_owner} {game.opponent.name}" ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCAutoLogOutManager.py0000644000175100001770000000041014614030313023430 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic.managers.AutoLogOutManager import AutoLogOutManager class ICCAutoLogOutManager(AutoLogOutManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCBoardManager.py0000644000175100001770000004524414614030313022433 0ustar00runnerdockerimport asyncio from gi.repository import GObject from pychess.System.Log import log from pychess.Utils.const import ( SHUFFLECHESS, WILDCASTLESHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, ASYMMETRICRANDOMCHESS, FEN_START, WHITE, reprResult, ) from pychess.ic.FICSObjects import FICSGame, FICSBoard, FICSPlayer from pychess.ic.managers.BoardManager import BoardManager, parse_reason from pychess.ic import ( IC_POS_OBSERVING, GAME_TYPES, IC_STATUS_PLAYING, IC_POS_EXAMINATING, ) from pychess.ic.icc import ( DG_POSITION_BEGIN, DG_SEND_MOVES, DG_MOVE_ALGEBRAIC, DG_MOVE_SMITH, DG_MOVE_TIME, DG_MOVE_CLOCK, DG_MY_GAME_STARTED, DG_MY_GAME_ENDED, DG_STARTED_OBSERVING, DG_MY_GAME_RESULT, DG_STOP_OBSERVING, DG_IS_VARIATION, DG_ISOLATED_BOARD, CN_SPGN, DG_BACKWARD, DG_MOVE_LAG, DG_KNOWS_FISCHER_RANDOM, DG_SET_BOARD, DG_GAME_MESSAGE, DG_TAKEBACK, ) class ICCBoardManager(BoardManager): queued_send_moves = {} def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line(DG_MY_GAME_STARTED, self.on_icc_my_game_started) self.connection.expect_dg_line( DG_STARTED_OBSERVING, self.on_icc_started_observing ) self.connection.expect_dg_line(DG_STOP_OBSERVING, self.on_icc_stop_observing) self.connection.expect_dg_line(DG_MY_GAME_RESULT, self.on_icc_my_game_result) self.connection.expect_dg_line(DG_MY_GAME_ENDED, self.on_icc_my_game_ended) self.connection.expect_dg_line(DG_POSITION_BEGIN, self.on_icc_position_begin) self.connection.expect_dg_line(DG_SEND_MOVES, self.on_icc_send_moves) self.connection.expect_dg_line(DG_ISOLATED_BOARD, self.on_icc_isolated_board) self.connection.expect_dg_line(DG_MOVE_LAG, self.on_icc_move_lag) # both DG doing undo x moves in gamemodel self.connection.expect_dg_line(DG_BACKWARD, self.on_icc_back) self.connection.expect_dg_line(DG_TAKEBACK, self.on_icc_back) self.connection.expect_dg_line( DG_KNOWS_FISCHER_RANDOM, self.on_icc_knows_fischer_random ) self.connection.expect_dg_line(DG_SET_BOARD, self.on_icc_set_board) self.connection.expect_dg_line(DG_GAME_MESSAGE, self.on_icc_game_message) self.connection.expect_cn_line(CN_SPGN, self.on_icc_spgn) self.queuedEmits = {} self.gamemodelStartedEvents = {} self.theGameImPlaying = None self.my_game_info = None self.gamesImObserving = {} # on observe game start, it stores number of moves we expect self.moves_to_go = None self.connection.client.run_command("set-2 %s 1" % DG_MY_GAME_STARTED) self.connection.client.run_command("set-2 %s 1" % DG_STARTED_OBSERVING) self.connection.client.run_command("set-2 %s 1" % DG_STOP_OBSERVING) self.connection.client.run_command("set-2 %s 1" % DG_MY_GAME_RESULT) self.connection.client.run_command("set-2 %s 1" % DG_MY_GAME_ENDED) self.connection.client.run_command("set-2 %s 1" % DG_MOVE_ALGEBRAIC) self.connection.client.run_command("set-2 %s 1" % DG_MOVE_SMITH) self.connection.client.run_command("set-2 %s 1" % DG_MOVE_TIME) self.connection.client.run_command("set-2 %s 1" % DG_MOVE_CLOCK) self.connection.client.run_command("set-2 %s 1" % DG_POSITION_BEGIN) self.connection.client.run_command("set-2 %s 0" % DG_IS_VARIATION) self.connection.client.run_command("set-2 %s 0" % DG_MOVE_LAG) self.connection.client.run_command("set-2 %s 1" % DG_SEND_MOVES) self.connection.client.run_command("set-2 %s 1" % DG_ISOLATED_BOARD) self.connection.client.run_command("set-2 %s 1" % DG_BACKWARD) self.connection.client.run_command("set-2 %s 1" % DG_TAKEBACK) self.connection.client.run_command("set-2 %s 1" % DG_KNOWS_FISCHER_RANDOM) self.connection.client.run_command("set-2 %s 1" % DG_SET_BOARD) self.connection.client.run_command("set-2 %s 1" % DG_GAME_MESSAGE) self.connection.client.run_command("set style 13") # don't unobserve games when we start a new game, or new observe self.connection.client.run_command("set unobserve 0") self.connection.lvm.autoFlagNotify() def on_icc_spgn(self, data): log.debug("DG_SPGN %s" % data) if self.connection.query_game is None: return game = self.connection.query_game game.board = FICSBoard(0, 0, pgn=data) game = self.connection.games.get(game) self.emit("archiveGamePreview", game) def on_icc_game_message(self, data): log.debug("DG_GAME_MESSAGE %s" % data) return def on_icc_knows_fischer_random(self, data): log.debug("DG_KNOWS_FISCHER_RANDOM %s" % data) def on_icc_set_board(self, data): log.debug("DG_SET_BOARD %s" % data) def on_icc_isolated_board(self, data): log.debug("DG_ISOLATED_BOARD %s" % data) def on_icc_move_lag(self, data): log.debug("DG_MOVE_LAG %s" % data) def on_icc_back(self, data): log.debug("DG_ICC_BACKWARD or DG_TAKEBACK %s" % data) # gamenumber backup-count gameno, backup_count = data.split() gameno = int(gameno) backup_count = int(backup_count) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return if game == self.theGameImPlaying or game in self.gamesImObserving: curcol, ply, wms, bms = self.my_game_info for i in range(backup_count): ply -= 1 curcol = 1 - curcol self.my_game_info = (curcol, ply, wms, bms) self.emit("gameUndoing", gameno, backup_count) def on_icc_my_game_started(self, data): log.debug("DG_MY_GAME_STARTED %s" % data) # gamenumber whitename blackname wild-number rating-type rated # white-initial white-increment black-initial black-increment # played-game {ex-string} white-rating black-rating game-id # white-titles black-titles irregular-legality irregular-semantics # uses-plunkers fancy-timecontrol promote-to-king # 685 Salsicha MaxiBomb 0 Blitz 1 3 0 3 0 1 {} 2147 2197 1729752694 {} {} 0 0 0 {} 0 # 259 Rikikilord ARMH 0 Blitz 1 2 12 2 12 0 {Ex: Rikikilord 0} 1532 1406 1729752286 {} {} 0 0 0 {} 0 ( gameno, wname, bname, wild, rtype, rated, wmin, winc, bmin, binc, played_game, rest, ) = data.split(" ", 11) parts = rest.split("}", 1)[1].split() wrating = int(parts[0]) brating = int(parts[1]) gameno = int(gameno) wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) if int(wild) > 0: game_type = GAME_TYPES["w%s" % wild] else: game_type = GAME_TYPES[rtype.lower()] log.debug("DG_MY_GAME_STARTED game type is %s" % game_type) for player, rating in ((wplayer, wrating), (bplayer, brating)): try: if player.ratings[game_type.rating_type] != rating: player.ratings[game_type.rating_type] = rating player.emit("ratings_changed", game_type.rating_type, player) except IndexError: log.debug( "!!! game_type.rating_type {} is out of range in player.ratings {}".format( game_type.rating_type, player.ratings ) ) wms = bms = int(wmin) * 60 * 1000 + int(winc) * 1000 # TODO: maybe use DG_POSITION_BEGIN2 and DG_PAST_MOVE ? fen = FEN_START game = FICSGame( wplayer, bplayer, gameno=gameno, rated=rated == "1", game_type=game_type, minutes=int(wmin), inc=int(winc), board=FICSBoard(wms, bms, fen=fen), ) if self.connection.examined_game is not None: pgnHead = [ ("Event", "ICC examined game"), ("Site", "chessclub.com"), ("White", wname), ("Black", bname), ("Result", "*"), ("SetUp", "1"), ("FEN", fen), ] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n*\n" game.relation = IC_POS_EXAMINATING game.game_type = GAME_TYPES["examined"] game.board.pgn = pgn game = self.connection.games.get(game) for player in (wplayer, bplayer): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game self.theGameImPlaying = game self.my_game_info = (WHITE, 0, wms, bms) self.gamemodelStartedEvents[gameno] = asyncio.Event() self.connection.client.run_command("follow") if self.connection.examined_game is not None: self.emit("exGameCreated", game) else: if int(wild) in (1, 2, 3, 4, 20, 21, 22): # several wild variant (including loadfen/loadgame) need # a starting FEN coming in a DG_POSITION_BEGIN datgram log.debug("wild20 is waiting for a starting FEN...") else: self.emit("playGameCreated", game) def on_icc_started_observing(self, data): log.debug("DG_STARTED_OBSERVING %s" % data) ( gameno, wname, bname, wild, rtype, rated, wmin, winc, bmin, binc, played_game, rest, ) = data.split(" ", 11) parts = rest.split("}", 1)[1].split() wrating = int(parts[0]) brating = int(parts[1]) gameno = int(gameno) wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) game_type = GAME_TYPES[rtype.lower()] for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.ratings[game_type.rating_type] != rating: player.ratings[game_type.rating_type] = rating player.emit("ratings_changed", game_type.rating_type, player) relation = IC_POS_OBSERVING wms = bms = int(wmin) * 60 * 1000 + int(winc) * 1000 game = FICSGame( wplayer, bplayer, gameno=gameno, rated=rated == "1", game_type=game_type, minutes=int(wmin), inc=int(winc), relation=relation, ) game = self.connection.games.get(game, emit=False) self.gamesImObserving[game] = (WHITE, 0, wms, bms) self.queued_send_moves[game.gameno] = [] self.queuedEmits[game.gameno] = [] self.gamemodelStartedEvents[game.gameno] = asyncio.Event() def on_icc_stop_observing(self, data): log.debug("DG_STOP_OBSERVING %s" % data) gameno = int(data.split()[0]) try: del self.gamemodelStartedEvents[gameno] game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return self.emit("obsGameUnobserved", game) def on_icc_my_game_ended(self, data): log.debug("DG_MY_GAME_ENDED %s" % data) def on_icc_my_game_result(self, data): log.debug("DG_MY_GAME_RESULT %s" % data) # gamenumber become-examined game_result_code score_string2 description-string ECO # 1242 1 Res 1-0 {Black resigns} {D89} parts = data.split(" ", 4) gameno, ex, result_code, result, rest = parts gameno = int(gameno) comment, rest = rest[2:].split("}", 1) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return wname = game.wplayer.name bname = game.bplayer.name result, reason = parse_reason(reprResult.index(result), comment, wname=wname) try: wplayer = self.connection.players.get(wname) wplayer.restore_previous_status() # no status update will be sent by # FICS if the player doesn't become available, so we restore # previous status first (not necessarily true, but the best guess) except KeyError: log.debug("%s not in self.connections.players - creating" % wname) wplayer = FICSPlayer(wname) try: bplayer = self.connection.players.get(bname) bplayer.restore_previous_status() except KeyError: log.debug("%s not in self.connections.players - creating" % bname) bplayer = FICSPlayer(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), result=result, reason=reason ) if wplayer.game is not None: game.rated = wplayer.game.rated game = self.connection.games.get(game, emit=False) self.connection.games.game_ended(game) # Do this last to give anybody connected to the game's signals a chance # to disconnect from them first wplayer.game = None bplayer.game = None def on_icc_position_begin(self, data): log.debug("DG_POSITION_BEGIN %s" % data) # gamenumber {initial-FEN} nmoves-to-follow gameno, right_part = data.split("{") gameno = int(gameno) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return fen, moves_to_go = right_part.split("}") self.moves_to_go = int(moves_to_go) if fen != FEN_START and ( game.game_type == GAME_TYPES["w20"] or game.game_type == GAME_TYPES["w21"] or game.game_type.variant_type in ( SHUFFLECHESS, WILDCASTLESHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, ASYMMETRICRANDOMCHESS, ) ): # a starting fen coming in a DG_POSITION_BEGIN datagram log.debug("wild20 got a starting FEN %s" % fen) game.board.fen = fen self.emit("playGameCreated", game) def on_icc_send_moves(self, data): log.debug("DG_SEND_MOVES %s" % data) # gamenumber algebraic-move smith-move time clock send_moves = data gameno, san_move, alg_move, time, clock = send_moves.split() gameno = int(gameno) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: log.debug("Game %s is not in self.connection.games" % gameno) return fen = "" if game == self.theGameImPlaying: curcol, ply, wms, bms = self.my_game_info else: curcol, ply, wms, bms = self.gamesImObserving[game] if curcol == WHITE: wms = int(clock) * 1000 else: bms = int(clock) * 1000 ply += 1 curcol = 1 - curcol if game == self.theGameImPlaying: self.my_game_info = (curcol, ply, wms, bms) else: self.gamesImObserving[game] = (curcol, ply, wms, bms) if gameno in self.queued_send_moves: self.queued_send_moves[gameno].append(send_moves) if ( self.moves_to_go and len(self.queued_send_moves[gameno]) < self.moves_to_go ): return if self.moves_to_go == 0 or self.moves_to_go is None: log.debug("put san_move to move_queue %s" % san_move) game.move_queue.put_nowait( ( gameno, ply, curcol, san_move, fen, game.wplayer.name, game.bplayer.name, wms, bms, ) ) self.emit("timesUpdate", gameno, wms, bms) else: if game.gameno not in self.gamemodelStartedEvents: return if game.gameno not in self.queuedEmits: return pgnHead = [ ( "Event", "ICC {} {} game".format( game.display_rated.lower(), game.game_type.fics_name ), ), ("Site", "chessclub.com"), ("White", game.wplayer.name), ("Black", game.bplayer.name), ("Result", "*"), ("TimeControl", "%d+%d" % (game.minutes * 60, game.inc)), ] wrating = game.wplayer.ratings[game.game_type.rating_type] brating = game.bplayer.ratings[game.game_type.rating_type] if wrating != 0: pgnHead += [("WhiteElo", wrating)] if brating != 0: pgnHead += [("BlackElo", brating)] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n" moves = self.queued_send_moves[gameno] ply = 0 for send_moves in moves: gameno_, san_move, alg_move, time, clock = send_moves.split() if ply % 2 == 0: pgn += "%d. " % (ply // 2 + 1) pgn += f"{san_move} {{[%emt {time}]}} " ply += 1 pgn += "*\n" del self.queued_send_moves[gameno] self.moves_to_go = None wms = bms = 0 game = FICSGame( game.wplayer, game.bplayer, game_type=game.game_type, result=game.result, rated=game.rated, minutes=game.minutes, inc=game.inc, board=FICSBoard(wms, bms, pgn=pgn), ) in_progress = True if in_progress: game.gameno = gameno else: if gameno is not None: game.gameno = gameno # game.reason = reason game = self.connection.games.get(game, emit=False) self.emit("obsGameCreated", game) try: self.gamemodelStartedEvents[game.gameno].wait() except KeyError: pass for emit in self.queuedEmits[game.gameno]: emit() del self.queuedEmits[game.gameno] curcol, ply, wms, bms = self.gamesImObserving[game] self.emit("timesUpdate", game.gameno, wms, bms) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCChatManager.py0000644000175100001770000001771514614030313022265 0ustar00runnerdockerfrom gi.repository import GLib, GObject from pychess.ic import GAME_TYPES from pychess.ic.icc import ( DG_PLAYERS_IN_MY_GAME, DG_KIBITZ, DG_PERSONAL_TELL, DG_SHOUT, DG_CHANNEL_TELL, DG_PEOPLE_IN_MY_CHANNEL, DG_CHANNELS_SHARED, ) from pychess.ic.managers.ChatManager import ChatManager CHANNEL_SHOUT = "shout" CHANNEL_CSHOUT = "cshout" class ICCChatManager(ChatManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line( DG_PLAYERS_IN_MY_GAME, self.on_icc_players_in_my_game ) self.connection.expect_dg_line(DG_KIBITZ, self.on_icc_kibitz) self.connection.expect_dg_line(DG_PERSONAL_TELL, self.on_icc_personal_tell) self.connection.expect_dg_line(DG_SHOUT, self.on_icc_shout) self.connection.expect_dg_line(DG_CHANNEL_TELL, self.on_icc_channel_tell) self.connection.expect_dg_line( DG_PEOPLE_IN_MY_CHANNEL, self.on_icc_people_in_my_channel ) self.connection.expect_dg_line(DG_CHANNELS_SHARED, self.on_icc_channels_shared) self.connection.client.run_command("set-2 %s 1" % DG_PLAYERS_IN_MY_GAME) self.connection.client.run_command("set-2 %s 1" % DG_KIBITZ) self.connection.client.run_command("set-2 %s 1" % DG_PERSONAL_TELL) self.connection.client.run_command("set-2 %s 1" % DG_SHOUT) self.connection.client.run_command("set-2 %s 1" % DG_CHANNEL_TELL) self.connection.client.run_command("set-2 %s 1" % DG_PEOPLE_IN_MY_CHANNEL) self.connection.client.run_command("set-2 %s 1" % DG_CHANNELS_SHARED) self.currentLogChannel = None self.connection.client.run_command("set Lang English") self.connection.client.run_command("set height 240") self.connection.client.run_command("inchannel %s" % self.connection.username) self.connection.client.run_command("help channel_list") self.observers = {} self.channels = [ (CHANNEL_SHOUT, _("Shout")), (CHANNEL_CSHOUT, _("Chess Shout")), ] for id, channel in ICC_CHANNELS: self.channels.append((str(id), channel)) GLib.idle_add(self.emit, "channelsListed", self.channels) def on_icc_players_in_my_game(self, data): # gamenumber playername symbol kibvalue # O=observing # PW=playing white # PB=playing black # SW=playing simul and is white # SB=playing simul and is black # E=Examining # X=None (has left the table) gameno, name, symbol, kibvalue = data.split() ficsplayer = self.connection.players.get(name) rating = ficsplayer.getRatingByGameType(GAME_TYPES["standard"]) if rating: name = f"{name}({rating})" if gameno not in self.observers: observers = set() self.observers[gameno] = observers if symbol == "O": self.observers[gameno].add(name) elif symbol == "X" and name in self.observers[gameno]: self.observers[gameno].remove(name) obs_str = " ".join(list(self.observers[gameno])) self.emit("observers_received", gameno, obs_str) def on_icc_kibitz(self, data): # gamenumber playername titles kib/whi ^Y{kib string^Y} gameno, name, rest = data.split(" ", 2) titles, rest = rest.split("}", 1) kib_whi, text = rest[1:].split(" ", 1) text = text[2:-2] if kib_whi == "1": GLib.idle_add(self.emit, "kibitzMessage", name, int(gameno), text) else: GLib.idle_add(self.emit, "whisperMessage", name, int(gameno), text) def on_icc_personal_tell(self, data): # playername titles ^Y{tell string^Y} type name, rest = data.split(" ", 1) titles, rest = rest.split("}", 1) text, tell_type = rest[3:].split("}") isadmin = tell_type == "4" GLib.idle_add(self.emit, "privateMessage", name, "title", isadmin, text[:-1]) def on_icc_shout(self, data): # playername titles type ^Y{shout string^Y} name, rest = data.split(" ", 1) titles, rest = rest.split("}", 1) shout_type, text = rest[1:].split("{") # print(name, shout_type, text) isadmin = shout_type == "3" # announcements isme = name.lower() == self.connection.username.lower() GLib.idle_add( self.emit, "channelMessage", name, isadmin, isme, "shout", text[:-2] ) def on_icc_channel_tell(self, data): # channel playername titles ^Y{tell string^Y} type channel, name, rest = data.split(" ", 2) titles, rest = rest.split("}", 1) text, tell_type = rest[3:].split("}") isme = name.lower() == self.connection.username.lower() isadmin = tell_type == "4" GLib.idle_add(self.emit, "channelMessage", name, isadmin, isme, channel, text) def on_icc_people_in_my_channel(self, data): # channel playername come/go print(data) def on_icc_channels_shared(self, data): # playername channels print(data) ICC_CHANNELS = ( (0, "Admins only"), (1, "Newbie Help"), (2, "Experienced Help"), (3, "Simul"), (4, "SimulBot2"), (5, "Wild 5"), (7, "Wild 7"), (10, "Team-Setup"), (11, "Team Game Channel A"), (12, "Team Game Channel B"), (14, "Macintosh users channel"), (22, "Fischer-Random Chess"), (23, "Crazyhouse Channel"), (24, "BUGHOUSE Channel"), (25, "3 checks you win"), (26, "Giveaway Chess"), (27, "Atomic Channel"), (28, "Shatranj Channel"), (32, "STtourney channel"), (34, "Sports"), (43, "Chess theory"), (46, "Tomato TD"), (47, "Tomato tournament managers"), (49, "Flash TD"), (64, "Computer chess"), (65, "Canadian"), (66, "Australia"), (67, "British"), (68, "South Africa"), (69, "Singapore and Malaysia"), (70, "Greek"), (71, "Spanish"), (72, "French"), (73, "German"), (74, "Dutch"), (75, "Russian"), (76, "Italian"), (77, "Japanese"), (78, "Scandinavian(Denmark,Norway,Sweden)"), (79, "Icelandic"), (80, "Finnish"), (81, "Portuguese"), (82, "Catalan"), (83, "Hebrew"), (84, "Turkish"), (86, "ASCII art"), (88, "China"), (90, "Slow time controls"), (97, "Politics"), (100, "Admins and helpers only"), (101, "Music"), (103, "Religious Discussions/Debates"), (107, "Math and Science"), (110, "Philosophy"), (114, "Health and Medicine"), (116, "Wild 16 (Kriegspiel)"), (117, "Wild 17 (Losers Chess)"), (123, "Acrobot"), (129, "USCL (United States Chess League)"), (147, "Tomato senior managers group"), (165, "ICC Radio Broadcast and Chess Events"), (183, "Correspondence Chess"), (185, "Philippine"), (186, "Irish"), (220, "Query all the Tomato-type TD bots"), (221, "The 'Ask for a Tournament' Channel"), (222, "Slomato TD (Slow Tournaments)"), (223, "WildOne TD (Wild Tournaments)"), (224, "Cooly TD (Tournaments)"), (225, "LittlePer TD (Tournaments)"), (226, "Automato TD (Special Event Tournaments)"), (227, "Pear TD (Special Event Tournaments)"), (228, "Ketchup TD (Tournaments)"), (229, "Channel for Tournament Robots to interact"), (230, "Olive TD (Tournaments)"), (232, "Yenta TD (Special Event Tournaments)"), (250, "Lobby"), (271, "LatinTrivia Channel (Spanish)"), (272, "TriviaBot Channel"), (274, "Spam channel"), (280, "BettingBot"), (291, "Scholastic Chess Coaches"), (300, "Helpers and Administrators"), (302, "Busters"), (303, "Christian"), (333, "AtheistAgnostic"), (334, "Johns Hopkins CTY"), (335, "SimulBot"), (337, "Broadcast"), (338, "Relay coordination"), (340, "LeChessClub"), (345, "Team4545League"), (348, "Tomato Trainers group"), (394, "Tomato admins group"), (396, "Complain"), (397, "Politics-Reserved"), (399, "Events"), ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCErrorManager.py0000644000175100001770000000115214614030313022463 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic.icc import DG_ILLEGAL_MOVE from pychess.ic.managers.ErrorManager import ErrorManager class ICCErrorManager(ErrorManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line(DG_ILLEGAL_MOVE, self.on_icc_illegal_move) self.connection.client.run_command("set-2 %s 1" % DG_ILLEGAL_MOVE) def on_icc_illegal_move(self, data): # gamenumber movestring reason gameid, move, reason = data.split(" ", 2) self.emit("onIllegalMove", move) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCFingerManager.py0000644000175100001770000000524214614030313022610 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic import GAME_TYPES_BY_FICS_NAME from pychess.ic.icc import DG_WHO_AM_I, CN_YFINGER from pychess.ic.managers.FingerManager import FingerManager, FingerObject ELO, DEVIATION, WINS, LOSSES, DRAWS, TOTAL, BESTELO, BESTTIME = range(8) ICC_RATING_TYPE_MAP = { "Bul": "bullet", "Bli": "blitz", "Sta": "standard", "1-m": "1-minute", "3-m": "3-minute", "5-m": "5-minute", "15-": "15-minute", "45-": "45-minute", "Che": "chess960", } class ICCFingerManager(FingerManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line(DG_WHO_AM_I, self.on_icc_who_am_i) self.connection.expect_cn_line(CN_YFINGER, self.on_icc_yfinger) self.connection.client.run_command("set-2 %s 1" % DG_WHO_AM_I) def on_icc_yfinger(self, data): finger = FingerObject() lines = data.split("\n") rating_lines = {} for line in lines: key, value = line.split(" ", 1) prefix = key[:3] # print(key, value, prefix, key[3:]) if prefix in ICC_RATING_TYPE_MAP: if prefix not in rating_lines: rating_lines[prefix] = [0] * 8 if key[3:] == "Rat": value = int(value) rating_lines[prefix][ELO] = value elif key[3:] == "Win": value = int(value) rating_lines[prefix][WINS] = value elif key[3:] == "Draw": value = int(value) rating_lines[prefix][DRAWS] = value elif key[3:] == "Loss": value = int(value) rating_lines[prefix][LOSSES] = value elif key[3:] == "Need": value = int(value) rating_lines[prefix][DEVIATION] = value elif key[3:] == "Best": bestelo, besttime = value.split(" ", 1) rating_lines[prefix][BESTELO] = int(bestelo) rating_lines[prefix][BESTTIME] = besttime elif key == "Name": finger.setName(value) for prefix in rating_lines: gametype = GAME_TYPES_BY_FICS_NAME[ICC_RATING_TYPE_MAP[prefix]] finger.setRating(gametype.rating_type, rating_lines[prefix]) self.emit("fingeringFinished", finger) def on_icc_who_am_i(self, data): name, titles = data.split(" ", 1) self.connection.username = name def finger(self, user): self.connection.client.run_command("yfinger %s" % user) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCHelperManager.py0000644000175100001770000001767214614030313022627 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic.FICSObjects import FICSGame from pychess.ic.managers.HelperManager import HelperManager from pychess.ic import parseRating, GAME_TYPES_BY_SHORT_FICS_NAME, IC_STATUS_PLAYING from pychess.ic.icc import ( DG_PLAYER_ARRIVED_SIMPLE, DG_PLAYER_LEFT, DG_TOURNEY, CN_GAMES, DG_WILD_KEY, ) class ICCHelperManager(HelperManager): def __init__(self, helperconn, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line( DG_PLAYER_ARRIVED_SIMPLE, self.on_icc_player_arrived_simple ) self.connection.expect_dg_line(DG_PLAYER_LEFT, self.on_icc_player_left) self.connection.expect_dg_line(DG_TOURNEY, self.on_icc_tourney) self.connection.expect_dg_line(DG_WILD_KEY, self.on_icc_wild_key) self.connection.expect_cn_line(CN_GAMES, self.on_icc_games) self.connection.client.run_command("set-2 %s 1" % DG_PLAYER_ARRIVED_SIMPLE) self.connection.client.run_command("set-2 %s 1" % DG_PLAYER_LEFT) self.connection.client.run_command("set-2 %s 1" % DG_TOURNEY) self.connection.client.run_command("set-2 %s 1" % DG_WILD_KEY) # From https://www.chessclub.com/user/resources/formats/formats.txt # Here is the list of verbose DGs: # DG_PLAYER_ARRIVED DG_PLAYER_LEFT # DG_GAME_STARTED DG_GAME_RESULT DG_EXAMINED_GAME_IS_GONE # DG_PEOPLE_IN_MY_CHANNEL DG_CHANNELS_SHARED DG_SEES_SHOUTS # Currently, only TDs like Tomato can use these. # Unfortunately we can't maintain full list of ongoing games so we will # periodically update top games in ICLounge similar to other ICC clients self.connection.client.run_command("games *19") def on_icc_games(self, data): # 1267 guest2504 1400 KQkr(C) 20u 5 12 W: 1 # 1060 guest7400 1489 DeadGuyKai bu 3 0 W: 21 # 791 1506 PlotinusRedux guest3090 bu 2 12 W: 21 # 47 2357 *IM_Danchevski 2683 *GM_Morozevich Ex: scratch W: 35 # 101 Replayer2 Replayer2 Ex: scratch W: 1 # 117 2760 *GM_Topalov 2823 *GM_Caruana Ex: StLouis16 %0 W: 29 # 119 1919 stansai 2068 Agrimont Ex: continuation W: 53 # 456 games displayed (282 played, 174 examined). previous_games = list(self.connection.games.values()) games = [] games_got = [] lines = data.split("\n") for line in lines: # print(line) try: parts = line.split() index = 0 gameno = parts[index] index += 1 if parts[index].isdigit(): wrating = parts[index] index += 1 else: wrating = "----" wname = parts[index] index += 1 if parts[index].isdigit(): brating = parts[index] index += 1 else: brating = "----" bname = parts[index] index += 1 if parts[index] == "Ex:": shorttype = "e" rated = "" min = "0" inc = "0" else: rated = parts[index][-1] shorttype = parts[index][:-1] index += 1 min = parts[index] index += 1 inc = parts[index] private = "" except IndexError: continue try: gametype = GAME_TYPES_BY_SHORT_FICS_NAME[shorttype] except KeyError: # TODO: handle ICC wild types # print("key error in GAME_TYPES_BY_SHORT_FICS_NAME: %s" % shorttype) continue wplayer = self.connection.players.get(wname) bplayer = self.connection.players.get(bname) game = FICSGame( wplayer, bplayer, gameno=int(gameno), rated=(rated == "r"), private=(private == "p"), minutes=int(min), inc=int(inc), game_type=gametype, ) for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game rating = parseRating(rating) if player.ratings[gametype.rating_type] != rating: player.ratings[gametype.rating_type] = rating player.emit("ratings_changed", gametype.rating_type, player) if game not in previous_games: game = self.connection.games.get(game, emit=False) games.append(game) games_got.append(game) for game in previous_games: if ( game not in games_got and game not in self.connection.bm.gamesImObserving and game is not self.connection.bm.theGameImPlaying ): self.connection.games.game_ended(game) game.wplayer.game = None game.bplayer.game = None self.connection.games.emit("FICSGameCreated", games) def on_icc_player_arrived_simple(self, data): name = data.split()[0] player = self.connection.players.get(name) player.online = True def on_icc_player_left(self, data): name = data.split()[0] self.connection.players.player_disconnected(name) def on_icc_wild_key(self, data): key, name = data.split(" ", 1) # print(key, name) def on_icc_tourney(self, data): # index bitfield description join-command watch-command info-command confirm-text # 42 0 {Cooly Over 1500 Sunday Top Player Luton Blitz 5 0 rated Rating: 1500..3000 manager bigcol - 7 rounds Tournament Current round:1 Players:8, Latejoin allowed until round: 4} {tell Cooly latejoin & tell 224 Hi, i am in} {} {tell Cooly info} {Do you want to join the Cooly tournament} # 59 0 {Tomato U1600 Scheduled Swiss Blitz 2 5 rated Rating: 0..1599 manager Duguesclin - 7 rounds Tournament Current round:1 Players:13, Latejoin allowed until round: 4} {tell Tomato latejoin & tell 46 Hi, i am in} {} {tell Tomato info} {Do you want to join the Tomato tournament} # 64 0 {Yenta The STC Sunday Swiss Luton Standard 45 5 rated manager alonzob - 3 rounds Tournament Current round:2 Players:9, Latejoin allowed until round: 2} {tell Yenta latejoin & tell 232 Hi, i am in} {} {tell Yenta info} {Do you want to join the Yenta tournament} # 96 6 {} {} {} {} {} # 97 6 {[AUDIO] LIVE commentary with GM Ronen Har-Zvi and GM Alex Yermolinsky} {tell webcast listen} {} {} {} # 98 6 {[AUDIO] LIVE Espanol con el GM Jordi Magem (ESP)} {tell webcast espanol} {} {} {} # 99 6 {LIVE COVERAGE FIDE World Chess Championship 2016 - Game 7} {} {} {finger WorldChamp16} {} # 101 6 {LIVE GM Sergey Karjakin(2772) - GM Magnus Carlsen(2853)} {} {observe 1} {} {} # 319 6 {Nov 18-- [VIDEO] GM Ronen Har-Zvi analyzes game 6 of the World Chess Championship Match 2016} {} {https://webcast.chessclub.com/icc/i/WC16/Game5/GOTD.html} {https://www20.chessclub.com/article/fide-wc-match-2016-game-6} {} # 320 6 {Nov 20 -- [VIDEO] Attack with LarryC! Making Book with the Rook} {https://webcast.chessclub.com/icc/i/LarryC/2011_09_21/Attack_LarryC.html} {} {http://www.chessclub.com/chessfm/index/larryc/index.html} {} # TODO pass ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCListAndVarManager.py0000644000175100001770000000114214614030313023400 0ustar00runnerdockerfrom pychess.System import conf from pychess.ic.managers.ListAndVarManager import ListAndVarManager class ICCListAndVarManager(ListAndVarManager): def __init__(self, connection): self.connection = connection self.publicLists = {} self.personalLists = {} self.personalBackup = {} # Auto flag conf.notify_add("autoCallFlag", self.autoFlagNotify) def autoFlagNotify(self, *args): self.connection.client.run_command( "set autoflag %s" % int(conf.get("autoCallFlag")) ) # print 'notify flag', conf.get('autoCallFlag') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCNewsManager.py0000644000175100001770000000036014614030313022306 0ustar00runnerdockerfrom gi.repository import GObject from pychess.ic.managers.NewsManager import NewsManager class ICCNewsManager(NewsManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCOfferManager.py0000644000175100001770000000642514614030313022443 0ustar00runnerdockerfrom gi.repository import GObject from pychess.Utils.const import ( OFFERS, DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, TAKEBACK_OFFER, ) from pychess.Utils.Offer import Offer from pychess.System.Log import log from pychess.ic.managers.OfferManager import OfferManager, offerTypeToStr from pychess.ic.icc import DG_OFFERS_IN_MY_GAME, DG_MATCH, DG_MATCH_REMOVED class ICCOfferManager(OfferManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line( DG_OFFERS_IN_MY_GAME, self.on_icc_offers_in_my_game ) self.connection.expect_dg_line(DG_MATCH, self.on_icc_match) self.connection.expect_dg_line(DG_MATCH_REMOVED, self.on_icc_match_removed) self.connection.client.run_command("set-2 %s 1" % DG_OFFERS_IN_MY_GAME) self.connection.client.run_command("set-2 %s 1" % DG_MATCH) self.connection.client.run_command("set-2 %s 1" % DG_MATCH_REMOVED) self.lastPly = 0 self.offers = {} def on_icc_offers_in_my_game(self, data): log.debug("DG_OFFERS_IN_MY_GAME %s" % data) # gamenumber wdraw bdraw wadjourn badjourn wabort babort wtakeback btakeback ( gamenumber, wdraw, bdraw, wadjourn, badjourn, wabort, babort, wtakeback, btakeback, ) = map(int, data.split()) if wdraw or bdraw: offertype = DRAW_OFFER elif wadjourn or badjourn: offertype = ADJOURN_OFFER elif wabort or babort: offertype = ABORT_OFFER elif wtakeback or btakeback: offertype = TAKEBACK_OFFER else: log.debug( "ICCOfferManager.on_icc_offers_in_my_game: unknown offer data: %s" % data ) return index = gamenumber * 100000 + OFFERS.index(offertype) if offertype == TAKEBACK_OFFER: parameters = wtakeback if wtakeback else btakeback offer = Offer(offertype, param=parameters, index=index) else: offer = Offer(offertype, index=index) self.offers[offer.index] = offer log.debug( "ICCOfferManager.on_icc_offers_in_my_game: emitting onOfferAdd: %s" % offer ) self.emit("onOfferAdd", offer) def on_icc_match(self, data): # challenger-name challenger-rating challenger-titles # receiver-name receiver-rating receiver-titles # wild-number rating-type is-it-rated is-it-adjourned # challenger-time-control receiver-time-control # challenger-color-request [assess-loss assess-draw assess-win] # fancy-time-control log.debug("DG_MATCH %s" % data) def on_icc_match_removed(self, data): # challenger-name receiver-name ^Y{Explanation string^Y} log.debug("DG_MATCH_REMOVED %s" % data) def accept(self, offer): log.debug("OfferManager.accept: %s" % offer) self.connection.client.run_command("%s" % offerTypeToStr[offer.type]) def decline(self, offer): log.debug("OfferManager.decline: %s" % offer) self.connection.client.run_command("decline %s" % offerTypeToStr[offer.type]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ICCSeekManager.py0000644000175100001770000000563514614030313022273 0ustar00runnerdockerfrom gi.repository import GObject from pychess.System.Log import log from pychess.Utils.const import UNSUPPORTED from pychess.ic import GAME_TYPES, TITLES, RATING_TYPES from pychess.ic.FICSObjects import FICSSeek from pychess.ic.icc import DG_SEEK, DG_SEEK_REMOVED from pychess.ic.managers.SeekManager import SeekManager class ICCSeekManager(SeekManager): def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_dg_line(DG_SEEK, self.on_icc_seek_add) self.connection.expect_dg_line(DG_SEEK_REMOVED, self.on_icc_seek_removed) self.connection.client.run_command("set-2 %s 1" % DG_SEEK) self.connection.client.run_command("set-2 %s 1" % DG_SEEK_REMOVED) def on_icc_seek_add(self, data): log.debug("DG_SEEK_ADD %s" % data) # index name titles rating provisional-status wild rating-type time # inc rated color minrating maxrating autoaccept formula fancy-time-control # 195 Tinker {C} 2402 2 0 Blitz 5 3 1 -1 0 9999 1 1 {} parts = data.split(" ", 2) index = int(parts[0]) player = self.connection.players.get(parts[1]) titles_end = parts[2].find("}") titles = parts[2][1:titles_end] tit = set() for title in titles.split(): tit.add(TITLES[title]) player.titles |= tit parts = parts[2][titles_end + 1 :].split() rating = int(parts[0]) deviation = None # parts[1] # wild = parts[2] try: gametype = GAME_TYPES[parts[3].lower()] except KeyError: return minutes = int(parts[4]) increment = int(parts[5]) rated = parts[6] == "1" color = parts[7] if color == "-1": color = None else: color = "white" if color == "1" else "black" rmin = int(parts[8]) rmax = int(parts[9]) automatic = parts[10] == "1" # formula = parts[11] # fancy_tc = parts[12] if gametype.variant_type in UNSUPPORTED: log.debug("!!! unsupported variant in seek: %s" % data) return if ( gametype.rating_type in RATING_TYPES and player.ratings[gametype.rating_type] != rating ): player.ratings[gametype.rating_type] = rating player.deviations[gametype.rating_type] = deviation player.emit("ratings_changed", gametype.rating_type, player) seek = FICSSeek( index, player, minutes, increment, rated, color, gametype, rmin=rmin, rmax=rmax, automatic=automatic, ) self.emit("addSeek", seek) def on_icc_seek_removed(self, data): log.debug("DG_SEEK_REMOVED %s" % data) key = data.split()[0] self.emit("removeSeek", int(key)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/ListAndVarManager.py0000755000175100001770000000642514614030313023075 0ustar00runnerdockerfrom pychess.ic import BLKCMD_SHOWLIST from pychess.System import conf class ListAndVarManager: def __init__(self, connection): self.connection = connection # Lists self.publicLists = {} self.personalLists = {} self.personalBackup = {} if self.connection.USCN: self.connection.expect_line( self.onUpdateList, r"(?:\w+\s+is (?:PUBLIC|PERSONAL))|$" ) else: self.connection.expect_fromplus( self.onUpdateLists, "Lists:", r"(?:\w+\s+is (?:PUBLIC|PERSONAL))|$" ) self.connection.expect_line( self.onUpdateEmptyListitems, r"-- (\w+) list: 0 \w+ --" ) self.connection.expect_fromplus( self.onUpdateListitems, r"-- (\w+) list: ([1-9]\d*) \w+ --", r"(?:\w+ *)+$" ) self.connection.client.run_command("showlist") # Auto flag conf.notify_add("autoCallFlag", self.autoFlagNotify) def onUpdateLists(self, matchlist): self.publicLists.clear() self.personalLists.clear() for line in [m.group(0) for m in matchlist[1:] if m.group(0)]: name, _, public_personal = line.split() self.connection.client.run_command("showlist %s" % name) if public_personal == "PUBLIC": self.publicLists[name] = set() else: self.personalLists[name] = set() onUpdateLists.BLKCMD = BLKCMD_SHOWLIST def onUpdateList(self, match): name, _, public_personal = match.group(0).split() self.connection.client.run_command("showlist %s" % name) if public_personal == "PUBLIC": self.publicLists[name] = set() else: self.personalLists[name] = set() def onUpdateEmptyListitems(self, match): list_name = match.groups()[0] if list_name in self.publicLists: self.publicLists[list_name] = set() else: self.personalLists[list_name] = set() if list_name not in self.personalBackup: self.personalBackup[list_name] = set() onUpdateEmptyListitems.BLKCMD = BLKCMD_SHOWLIST def onUpdateListitems(self, matchlist): list_name, itemCount = matchlist[0].groups() items = set() for match in matchlist[1:]: items.update(match.group().split()) if list_name in self.publicLists: self.publicLists[list_name] = items else: self.personalLists[list_name] = items self.personalBackup[list_name] = items onUpdateListitems.BLKCMD = BLKCMD_SHOWLIST def autoFlagNotify(self, *args): self.connection.client.run_command( "set autoflag %s" % int(conf.get("autoCallFlag")) ) # print 'notify flag', conf.get('autoCallFlag') def getList(self, list_name): if list_name in self.publicLists: return self.publicLists(list_name) elif list_name in self.personalLists: return self.personalLists[list_name] else: return [] def addToList(self, list_name, value): self.connection.client.run_command(f"+{list_name} {value}") def removeFromList(self, list_name, value): self.connection.client.run_command(f"-{list_name} {value}") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/NewsManager.py0000755000175100001770000000363414614030313022001 0ustar00runnerdockerimport re from gi.repository import GObject from pychess.ic import BLKCMD_NEWS days = "(Mon|Tue|Wed|Thu|Fri|Sat|Sun)" months = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" AMOUNT_OF_NEWSITEMS = 5 FICS_SENDS = 10 class NewsManager(GObject.GObject): __gsignals__ = { "readingNews": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "readNews": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.news = {} self.connection.expect_line( self.onNewsItem, rf"(\d+) \({days}, {months} +(\d+)\) (.+)" ) self.connection.client.run_command("news") def onNewsItem(self, match): no, weekday, month, day, title = match.groups() line = match.group() self.news[no] = [_(weekday), _(month), day, title, ""] self.emit("readingNews", self.news[no]) if len(self.news) <= AMOUNT_OF_NEWSITEMS: # the "news" command, gives us the latest 10 news items from the # oldest to the newest. # We only want the 5 newest, so we skip the first 5 entries. return elif len(self.news) == FICS_SENDS: # No need to check the expression any more self.connection.unexpect(self.onNewsItem) def onFullNewsItem(matchlist): self.connection.unexpect(onFullNewsItem) details = "" for line in matchlist[1:-1]: if line.startswith("\\"): line = " " + line[1:].strip() details += line.replace(" ", " ") self.news[no][4] = details self.emit("readNews", self.news[no]) self.connection.expect_fromto(onFullNewsItem, re.escape(line), "Posted by.*") self.connection.client.run_command("news %s" % no) onNewsItem.BLKCMD = BLKCMD_NEWS ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/OfferManager.py0000755000175100001770000002637314614030313022133 0ustar00runnerdockerimport re from gi.repository import GObject from pychess.Utils.const import ( DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, TAKEBACK_OFFER, PAUSE_OFFER, RESUME_OFFER, SWITCH_OFFER, RESIGNATION, FLAG_CALL, MATCH_OFFER, WHITE, ACTION_ERROR_SWITCH_UNDERWAY, ACTION_ERROR_CLOCK_NOT_STARTED, ACTION_ERROR_CLOCK_NOT_PAUSED, ACTION_ERROR_NONE_TO_ACCEPT, ACTION_ERROR_NONE_TO_WITHDRAW, ACTION_ERROR_NONE_TO_DECLINE, ACTION_ERROR_TOO_LARGE_UNDO, ACTION_ERROR_NOT_OUT_OF_TIME, ) from pychess.Utils.Offer import Offer from pychess.System.Log import log from pychess.ic import GAME_TYPES, VariantGameType from pychess.ic.FICSObjects import FICSChallenge names = r"\w+(?:\([A-Z\*]+\))*" rated = "(rated|unrated)" colors = r"(?:\[(white|black)\])?" ratings = r"\(([0-9\ \-\+]{1,4}[E P]?)\)" loaded_from = r"(?: Loaded from (wild[/\w]*))?" adjourned = r"(?: (\(adjourned\)))?" matchreUntimed = re.compile( rf"(\w+) {ratings} {colors} ?(\w+) {ratings} {rated} (untimed)\s*" ) matchre = re.compile( r"(\w+) %s %s ?(\w+) %s %s (\w+) (\d+) (\d+)%s%s" % (ratings, colors, ratings, rated, loaded_from, adjourned) ) # 39 w=GuestDVXV t=match p=GuestDVXV (----) [black] GuestNXMP (----) unrated blitz 2 12 # 16 w=GuestDVXV t=match p=GuestDVXV (----) GuestNXMP (----) unrated wild 2 12 Loaded from wild/fr # 39 w=GuestDVXV t=match p=GuestDVXV (----) GuestNXMP (----) unrated blitz 2 12 (adjourned) # 45 w=GuestGYXR t=match p=GuestGYXR (----) Lobais (----) unrated losers 2 12 # 45 w=GuestYDDR t=match p=GuestYDDR (----) mgatto (1358) unrated untimed # 71 w=joseph t=match p=joseph (1632) mgatto (1742) rated wild 5 1 Loaded from wild/fr (adjourned) # 59 w=antiseptic t=match p=antiseptic (1945) mgatto (1729) rated wild 6 1 Loaded from wild/4 (adjourned) # # Known offers: abort accept adjourn draw match pause unpause switch takeback # strToOfferType = { "draw": DRAW_OFFER, "abort": ABORT_OFFER, "adjourn": ADJOURN_OFFER, "takeback": TAKEBACK_OFFER, "pause": PAUSE_OFFER, "unpause": RESUME_OFFER, "switch": SWITCH_OFFER, "resign": RESIGNATION, "flag": FLAG_CALL, "match": MATCH_OFFER, } offerTypeToStr = {} for k, v in strToOfferType.items(): offerTypeToStr[v] = k class OfferManager(GObject.GObject): __gsignals__ = { "onOfferAdd": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onOfferRemove": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onOfferDeclined": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onChallengeAdd": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "onChallengeRemove": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "onActionError": (GObject.SignalFlags.RUN_FIRST, None, (object, int)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line( self.onOfferAdd, r" (\d+) w=%s t=(\w+) p=(.+)" % names ) self.connection.expect_line(self.onOfferRemove, r" (\d+)") for ficsstring, offer, error in ( ( "You cannot switch sides once a game is underway.", Offer(SWITCH_OFFER), ACTION_ERROR_SWITCH_UNDERWAY, ), ( "Opponent is not out of time.", Offer(FLAG_CALL), ACTION_ERROR_NOT_OUT_OF_TIME, ), ( "The clock is not ticking yet.", Offer(PAUSE_OFFER), ACTION_ERROR_CLOCK_NOT_STARTED, ), ( "The clock is not ticking.", Offer(FLAG_CALL), ACTION_ERROR_CLOCK_NOT_STARTED, ), ( "The clock is not paused.", Offer(RESUME_OFFER), ACTION_ERROR_CLOCK_NOT_PAUSED, ), ): self.connection.expect_line( lambda match: self.emit("onActionError", offer, error), ficsstring ) self.connection.expect_line( self.notEnoughMovesToUndo, r"There are (?:(no)|only (\d+) half) moves in your game\.", ) self.connection.expect_line( self.noOffersToAccept, "There are no ([^ ]+) offers to (accept)." ) self.connection.expect_line( self.onOfferDeclined, r"\w+ declines the (draw|takeback|pause|unpause|abort|adjourn) request\.", ) self.lastPly = 0 self.offers = {} self.connection.client.run_command("iset pendinfo 1") def onOfferDeclined(self, match): log.debug("OfferManager.onOfferDeclined: match.string=%s" % match.string) type = match.groups()[0] offer = Offer(strToOfferType[type]) self.emit("onOfferDeclined", offer) def noOffersToAccept(self, match): offertype, request = match.groups() if request == "accept": error = ACTION_ERROR_NONE_TO_ACCEPT elif request == "withdraw": error = ACTION_ERROR_NONE_TO_WITHDRAW elif request == "decline": error = ACTION_ERROR_NONE_TO_DECLINE offer = Offer(strToOfferType[offertype]) self.emit("onActionError", offer, error) def notEnoughMovesToUndo(self, match): ply = match.groups()[0] or match.groups()[1] if ply == "no": ply = 0 else: ply = int(ply) offer = Offer(TAKEBACK_OFFER, param=ply) self.emit("onActionError", offer, ACTION_ERROR_TOO_LARGE_UNDO) def onOfferAdd(self, match): log.debug("OfferManager.onOfferAdd: match.string=%s" % match.string) tofrom, index, offertype, parameters = match.groups() index = int(index) if tofrom == "t": # ICGameModel keeps track of the offers we've sent ourselves, so we # don't need this return if offertype not in strToOfferType: log.warning( "OfferManager.onOfferAdd: Declining unknown offer type: " + "offertype=%s parameters=%s index=%d" % (offertype, parameters, index) ) self.connection.client.run_command("decline %d" % index) return offertype = strToOfferType[offertype] if offertype == TAKEBACK_OFFER: offer = Offer(offertype, param=int(parameters), index=index) else: offer = Offer(offertype, index=index) self.offers[offer.index] = offer if offer.type == MATCH_OFFER: is_adjourned = False if matchreUntimed.match(parameters) is not None: fname, frating, col, tname, trating, rated, type = matchreUntimed.match( parameters ).groups() mins = 0 incr = 0 gametype = GAME_TYPES["untimed"] else: ( fname, frating, col, tname, trating, rated, gametype, mins, incr, wildtype, adjourned, ) = matchre.match(parameters).groups() if (wildtype and "adjourned" in wildtype) or ( adjourned and "adjourned" in adjourned ): is_adjourned = True if wildtype and "wild" in wildtype: gametype = wildtype try: gametype = GAME_TYPES[gametype] except KeyError: log.warning( "OfferManager.onOfferAdd: auto-declining " + "unknown offer type: '%s'\n" % gametype ) self.decline(offer) del self.offers[offer.index] return player = self.connection.players.get(fname) rating = frating.strip() rating = int(rating) if rating.isdigit() else 0 if player.ratings[gametype.rating_type] != rating: player.ratings[gametype.rating_type] = rating player.emit("ratings_changed", gametype.rating_type, player) rated = rated != "unrated" challenge = FICSChallenge( index, player, int(mins), int(incr), rated, col, gametype, adjourned=is_adjourned, ) self.emit("onChallengeAdd", challenge) else: log.debug("OfferManager.onOfferAdd: emitting onOfferAdd: %s" % offer) self.emit("onOfferAdd", offer) def onOfferRemove(self, match): log.debug("OfferManager.onOfferRemove: match.string=%s" % match.string) index = int(match.groups()[0]) if index not in self.offers: return if self.offers[index].type == MATCH_OFFER: self.emit("onChallengeRemove", index) else: self.emit("onOfferRemove", self.offers[index]) del self.offers[index] ### def challenge(self, player_name, game_type, startmin, incsec, rated, color=None): log.debug( "OfferManager.challenge: %s %s %s %s %s %s" % (player_name, game_type, startmin, incsec, rated, color) ) rchar = rated and "r" or "u" if color is not None: cchar = color == WHITE and "w" or "b" else: cchar = "" s = "match %s %d %d %s %s" % (player_name, startmin, incsec, rchar, cchar) if isinstance(game_type, VariantGameType): s += " " + game_type.seek_text self.connection.client.run_command(s) def offer(self, offer): log.debug("OfferManager.offer: %s" % offer) s = offerTypeToStr[offer.type] if offer.type == TAKEBACK_OFFER: s += " " + str(offer.param) self.connection.client.run_command(s) ### def withdraw(self, offer): log.debug("OfferManager.withdraw: %s" % offer) self.connection.client.run_command("withdraw t %s" % offerTypeToStr[offer.type]) def accept(self, offer): log.debug("OfferManager.accept: %s" % offer) if offer.index is not None: self.acceptIndex(offer.index) else: self.connection.client.run_command( "accept t %s" % offerTypeToStr[offer.type] ) def decline(self, offer): log.debug("OfferManager.decline: %s" % offer) if offer.index is not None: self.declineIndex(offer.index) else: self.connection.client.run_command( "decline t %s" % offerTypeToStr[offer.type] ) def acceptIndex(self, index): log.debug("OfferManager.acceptIndex: index=%s" % index) self.connection.client.run_command("accept %s" % index) def declineIndex(self, index): log.debug("OfferManager.declineIndex: index=%s" % index) self.connection.client.run_command("decline %s" % index) def playIndex(self, index): log.debug("OfferManager.playIndex: index=%s" % index) self.connection.client.run_command("play %s" % index) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/SeekManager.py0000755000175100001770000002046514614030313021755 0ustar00runnerdockerimport re from gi.repository import GObject from pychess.Utils.const import WHITE, FISCHERRANDOMCHESS, UNSUPPORTED from pychess.ic import ( BLKCMD_ASSESS, VariantGameType, DEVIATION, GAME_TYPES, parse_title_hex, BLKCMD_UNSEEK, BLKCMD_SEEK, type_to_display_text, Variants, RATING_TYPES, ) from pychess.ic.FICSObjects import FICSSeek from pychess.System.Log import log rated = "(rated|unrated)" colors = r"(?:\[(white|black)\]\s?)?" ratings = r"([\d\+\- ]{1,4})" titleslist = r"(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|CA|C|U|D|B|T|\*)" titleslist_re = re.compile(titleslist) titles = r"((?:\(%s\))+)?" % titleslist names = "([a-zA-Z]+)%s" % titles mf = r"(?:([mf]{1,2})\s?)?" whomatch = r"(?:(?:([-0-9+]{1,4})([\^~:\#. &])%s))" % names whomatch_re = re.compile(whomatch) rating_re = re.compile("[0-9]{2,}") type_re = "(Lightning|Blitz|Standard|Suicide|Wild|Crazyhouse|Bughouse|Losers|Atomic)" class SeekManager(GObject.GObject): __gsignals__ = { "addSeek": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "removeSeek": (GObject.SignalFlags.RUN_FIRST, None, (int,)), "clearSeeks": (GObject.SignalFlags.RUN_FIRST, None, ()), "our_seeks_removed": (GObject.SignalFlags.RUN_FIRST, None, ()), "seek_updated": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "assessReceived": (GObject.SignalFlags.RUN_FIRST, None, (object,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.connection.expect_line(self.on_seek_clear, "") self.connection.expect_line(self.on_seek_add, " (.+)") self.connection.expect_line(self.on_seek_remove, r" ([\d ]+)") self.connection.expect_n_lines( self.on_our_seeks_removed, r" ([\d ]+)", r"Your seeks have been removed\.", ) self.connection.expect_n_lines( self.on_seek_updated, r"Updating seek ad (\d+)(?:;?) (.*)\.", "", r" (\d+)", "", " (.+)", ) self.connection.expect_n_lines( self.on_seek_updated, r"Updating seek ad (\d+)(?:;?) (.*)\.", r"Updating seek ad \d+(?:;?) (.*)\.", "", r" (\d+)", "", " (.+)", ) self.connection.expect_n_lines( self.on_assess, r"\s*%s\s*" % type_re, r"\s*(\w+)\s+(\w+)\s*", r"\s*(\(.+\))\s+(\(.+\))\s*", r"\s*Win: .+", r"\s*Draw: .+", r"\s*Loss: .+", r"\s*New RD: .+", ) self.connection.client.run_command("iset seekinfo 1") self.connection.client.run_command("iset seekremove 1") self.connection.client.run_command("iset showownseek 1") def seek( self, startmin, incsec, game_type, rated, ratings=(0, 9999), color=None, manual=False, ): log.debug( "SeekManager.seek: %s %s %s %s %s %s %s" % (startmin, incsec, game_type, rated, str(ratings), color, manual) ) rchar = "r" if rated else "u" if color is not None: cchar = color == WHITE and "w" or "b" else: cchar = "" manual = "m" if manual else "" s = "seek %d %d %s %s %s" % (startmin, incsec, rchar, cchar, manual) if isinstance(game_type, VariantGameType): s += " " + game_type.seek_text if not self.connection.FatICS: s += " %d-%d" % (ratings[0], ratings[1]) self.connection.client.run_command(s, show_reply=True) def assess(self, player1, player2, type): self.connection.client.run_command(f"assess {player1} {player2} /{type}") def on_assess(self, matchlist): assess = {} assess["type"] = matchlist[0].groups()[0] assess["names"] = matchlist[1].groups()[0], matchlist[1].groups()[1] assess["oldRD"] = matchlist[2].groups()[0], matchlist[2].groups()[1] assess["win"] = matchlist[3].string.split()[1:] assess["draw"] = matchlist[4].string.split()[1:] assess["loss"] = matchlist[5].string.split()[1:] assess["newRD"] = matchlist[6].string.split()[2:] self.emit("assessReceived", assess) on_assess.BLKCMD = BLKCMD_ASSESS def on_seek_add(self, match): # The message looks like: # index w=name_from ti=titles rt=rating t=time i=increment # r=rated('r')/unrated('u') tp=type("wild/fr", "wild/4","blitz") # c=color rr=rating_range(lower-upper) a=automatic?('t'/'f') # f=formula_checked('t'/f') parts = match.groups()[0].split() seek = {} for key, value in [p.split("=") for p in parts[1:] if p]: seek[key] = value try: index = int(parts[0]) player = self.connection.players.get(seek["w"]) player.titles |= parse_title_hex(seek["ti"]) rated = seek["r"] == "r" minutes = int(seek["t"]) increment = int(seek["i"]) rmin, rmax = (int(r) for r in seek["rr"].split("-")) rating = seek["rt"] if rating[-1] in (" ", "P", "E"): deviation = DEVIATION[rating[-1]] rating = rating[:-1] rating = int(rating) deviation = None automatic = seek["a"] == "t" color = None if seek["c"] == "W": color = "white" elif seek["c"] == "B": color = "black" except KeyError as e: log.warning(f"on_seek_add: KeyError: {repr(e)} {repr(seek)}") return try: gametype = GAME_TYPES[seek["tp"]] except KeyError: if self.connection.FatICS and seek["tp"] == "chess": # TODO: remove when fixed in FatICS expected_time = minutes + increment * 2 / 3 if expected_time == 0: gametype = "untimed" elif expected_time < 3: gametype = "lightning" elif expected_time < 15: gametype = "blitz" else: gametype = "standard" gametype = GAME_TYPES[gametype] else: return if gametype.variant_type in UNSUPPORTED: return if ( gametype.rating_type in RATING_TYPES and player.ratings[gametype.rating_type] != rating ): player.ratings[gametype.rating_type] = rating player.deviations[gametype.rating_type] = deviation player.emit("ratings_changed", gametype.rating_type, player) seek = FICSSeek( index, player, minutes, increment, rated, color, gametype, rmin=rmin, rmax=rmax, automatic=automatic, ) self.emit("addSeek", seek) on_seek_add.BLKCMD = BLKCMD_SEEK def on_seek_clear(self, *args): self.emit("clearSeeks") def on_seek_remove(self, match): for key in match.groups()[0].split(): if not key: continue self.emit("removeSeek", int(key)) on_seek_remove.BLKCMD = BLKCMD_UNSEEK def on_our_seeks_removed(self, matchlist): self.on_seek_remove(matchlist[0]) self.emit("our_seeks_removed") on_our_seeks_removed.BLKCMD = BLKCMD_UNSEEK def on_seek_updated(self, matchlist): text = matchlist[0].groups()[1] i = 0 if "Updating seek ad" in matchlist[1].string: text += "; " + matchlist[1].groups()[0] i = 1 self.on_seek_remove(matchlist[i + 2]) self.on_seek_add(matchlist[i + 4]) self.emit("seek_updated", text) on_seek_updated.BLKCMD = BLKCMD_SEEK def refresh_seeks(self): self.connection.client.run_command("iset seekinfo 1") if __name__ == "__main__": assert ( type_to_display_text("Loaded from eco/a00") == type_to_display_text("eco/a00") == "Eco A00" ) assert type_to_display_text("wild/fr") == Variants.variants[FISCHERRANDOMCHESS].name assert type_to_display_text("blitz") == GAME_TYPES["blitz"].display_text ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/ic/managers/__init__.py0000755000175100001770000000000014614030313021311 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9014769 pychess-1.0.5/lib/pychess/perspectives/0000755000175100001770000000000014614030425017537 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/__init__.py0000755000175100001770000002653114614030313021656 0ustar00runnerdockerimport os import sys import importlib import traceback import zipfile import zipimport from io import StringIO from gi.repository import Gtk from pychess import MSYS2 from pychess.System.Log import log from pychess.widgets import createImage, dock_panel_tab, mainwindow, gtk_close from pychess.widgets.pydock import SOUTH def panel_name(module_name): return module_name.split(".")[-1] class Perspective: def __init__(self, name, label): self.name = name self.label = label self.default = False self.widget = Gtk.Alignment() self.widget.show() self.toolbuttons = [] self.menuitems = [] self.docks = {} self.main_notebook = None if getattr(sys, "frozen", False) and not MSYS2: zip_path = os.path.join(os.path.dirname(sys.executable), "library.zip") importer = zipimport.zipimporter( zip_path + "/pychess/perspectives/%s" % name ) postfix = "Panel.pyc" with zipfile.ZipFile(zip_path, "r") as myzip: names = [ f[:-4].split("/")[-1] for f in myzip.namelist() if f.endswith(postfix) and "/%s/" % name in f ] self.sidePanels = [importer.load_module(name) for name in names] else: path = f"{os.path.dirname(__file__)}/{name}" ext = ".pyc" if getattr(sys, "frozen", False) and MSYS2 else ".py" postfix = "Panel%s" % ext files = [f[: -len(ext)] for f in os.listdir(path) if f.endswith(postfix)] self.sidePanels = [ importlib.import_module(f"pychess.perspectives.{name}.{f}") for f in files ] for panel in self.sidePanels: close_button = Gtk.Button() close_button.set_property("can-focus", False) close_button.add(createImage(gtk_close)) close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_size_request(20, 18) close_button.connect("clicked", self.on_clicked, panel) menu_item = Gtk.CheckMenuItem(label=panel.__title__) menu_item.name = panel_name(panel.__name__) # if menu_item.name != "LecturesPanel": # menu_item.set_active(True) menu_item.connect("toggled", self.on_toggled, panel) self.menuitems.append(menu_item) panel.menu_item = menu_item box = dock_panel_tab( panel.__title__, panel.__desc__, panel.__icon__, close_button ) self.docks[panel_name(panel.__name__)] = [box, None, menu_item] def on_clicked(self, button, panel): """Toggle show/hide side panel menu item in View menu""" panel.menu_item.set_active(not panel.menu_item.get_active()) def on_toggled(self, menu_item, panel): """Show/Hide side panel""" try: leaf = self.notebooks[panel_name(panel.__name__)].get_parent().get_parent() except AttributeError: # new sidepanel appeared (not in saved layout .xml file) name = panel_name(panel.__name__) leaf = self.main_notebook.get_parent().get_parent() leaf.dock(self.docks[name][1], SOUTH, self.docks[name][0], name) parent = leaf.get_parent() names = [p[2] for p in leaf.panels] active = menu_item.get_active() name = panel_name(panel.__name__) shown = sum( [ 1 for panel in self.sidePanels if panel_name(panel.__name__) in names and self.notebooks[panel_name(panel.__name__)].is_visible() ] ) if active: self.notebooks[name].show() leaf.setCurrentPanel(name) if shown == 0 and hasattr(leaf, "position"): # If this is the first one, adjust Gtk.Paned divider handle if leaf.position != 0: parent.set_position(leaf.position) else: parent.set_position(parent.props.max_position / 2) else: self.notebooks[name].hide() if shown == 1: # If this is the last one, adjust Gtk.Paned divider handle pos = parent.get_position() leaf.position = ( pos if pos != parent.props.min_position and pos != parent.props.max_position else 0 ) if leaf == parent.get_child1(): parent.set_position(parent.props.min_position) else: parent.set_position(parent.props.max_position) def activate_panel(self, name): for panel in self.sidePanels: if panel_name(panel.__name__).startswith(name): if panel.menu_item.get_active(): # if menu item is already active set_active() doesn't triggers on_toggled() self.on_toggled(panel.menu_item, panel) else: panel.menu_item.set_active(True) break def load_from_xml(self): if os.path.isfile(self.dockLocation): try: self.dock.loadFromXML(self.dockLocation, self.docks) except Exception as e: # We don't send error message when error caused by no more existing SwitcherPanel if ( e.args[0] != "SwitcherPanel" and "unittest" not in sys.modules.keys() ): stringio = StringIO() traceback.print_exc(file=stringio) error = stringio.getvalue() log.error(f"Dock loading error: {e}\n{error}") msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.CLOSE, ) msg_dia.set_markup( _( "PyChess was unable to load your panel settings" ) ) msg_dia.format_secondary_text( _( "Your panel settings have been reset. If this problem repeats, \ you should report it to the developers" ) ) msg_dia.run() msg_dia.hide() os.remove(self.dockLocation) for title, panel, menu_item in self.docks.values(): title.unparent() panel.unparent() @property def sensitive(self): perspective, button, index = perspective_manager.perspectives[self.name] return button.get_sensitive() def create_toolbuttons(self): pass def close(self): pass class PerspectiveManager: def __init__(self): self.perspectives = {} self.current_perspective = None def set_widgets(self, widgets): self.widgets = widgets self.toolbar = self.widgets["toolbar1"] self.viewmenu = self.widgets["vis1_menu"] def on_persp_toggled(self, button): active = button.get_active() if active: if self.current_perspective is not None: for item in self.current_perspective.menuitems: item.hide() for toolbutton in self.current_perspective.toolbuttons: toolbutton.hide() name = button.get_name() perspective, button, index = self.perspectives[name] self.widgets["perspectives_notebook"].set_current_page(index) self.current_perspective = perspective for item in perspective.menuitems: item.show() for toolbutton in perspective.toolbuttons: toolbutton.show() def add_perspective(self, perspective): box = self.widgets["persp_buttons"] children = box.get_children() widget = None if len(children) == 0 else children[0] button = Gtk.RadioButton.new_with_label_from_widget(widget, perspective.label) if perspective.default: self.current_perspective = perspective else: button.set_sensitive(False) button.set_name(perspective.name) button.set_mode(False) box.pack_start(button, True, True, 0) button.connect("toggled", self.on_persp_toggled) index = self.widgets["perspectives_notebook"].append_page( perspective.widget, None ) self.perspectives[perspective.name] = (perspective, button, index) def activate_perspective(self, name): perspective, button, index = self.perspectives[name] button.set_sensitive(True) button.set_active(True) def disable_perspective(self, name): if not self.get_perspective(name).sensitive: return perspective, button, index = self.perspectives[name] button.set_sensitive(False) for button in perspective.toolbuttons: button.hide() if self.get_perspective("fics").sensitive: self.activate_perspective("fics") elif self.get_perspective("database").sensitive: self.activate_perspective("database") elif self.get_perspective("games").sensitive: self.activate_perspective("games") elif self.get_perspective("learn").sensitive: self.activate_perspective("learn") else: self.activate_perspective("welcome") def get_perspective(self, name): if name in self.perspectives: perspective, button, index = self.perspectives[name] else: perspective = None return perspective def set_perspective_widget(self, name, widget): perspective, button, index = self.perspectives[name] container = self.widgets["perspectives_notebook"].get_nth_page(index) for child in container.get_children(): container.remove(child) container.add(widget) def set_perspective_toolbuttons(self, name, buttons): perspective, button, index = self.perspectives[name] for button in perspective.toolbuttons: if button in self.toolbar: self.toolbar.remove(button) perspective.toolbuttons = [] separator = Gtk.SeparatorToolItem.new() separator.set_draw(True) perspective.toolbuttons.append(separator) for button in buttons: perspective.toolbuttons.append(button) self.toolbar.add(button) button.show() def set_perspective_menuitems(self, name, menuitems, default=True): perspective, button, index = self.perspectives[name] for item in perspective.menuitems: if item in self.viewmenu: self.viewmenu.remove(item) perspective.menuitems = [] item = Gtk.SeparatorMenuItem() perspective.menuitems.append(item) self.viewmenu.append(item) item.show() for item in menuitems: perspective.menuitems.append(item) self.viewmenu.append(item) if default: item.set_active(True) item.show() perspective_manager = PerspectiveManager() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9014769 pychess-1.0.5/lib/pychess/perspectives/database/0000755000175100001770000000000014614030425021303 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/database/FilterPanel.py0000644000175100001770000006363514614030313024073 0ustar00runnerdockerimport ast from gi.repository import GLib, Gdk, Gtk, GObject from pychess.Utils.const import chr2Sign, WHITE, BLACK, NORMALCHESS from pychess.Utils.Piece import Piece from pychess.Utils.SetupModel import SetupModel, SetupPlayer from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from pychess.widgets.BoardControl import BoardControl from pychess.widgets.gameinfoDialog import on_pick_date from pychess.widgets.PieceWidget import PieceWidget from pychess.widgets import mainwindow from pychess.Variants import name2variant TAG_FILTER, MATERIAL_FILTER, PATTERN_FILTER, NONE, RULE, SEQUENCE, STREAK = range(7) def formatted(q): """Simplified textual representation of query""" q = "%s" % q return q[1:-1].replace("'", "") __title__ = _("Filters") __icon__ = addDataPrefix("glade/panel_filter.svg") __desc__ = _("Filters panel can filter game list by various conditions") class FilterPanel(Gtk.TreeView): def __init__(self, persp): GObject.GObject.__init__(self) self.persp = persp self.filtered = False self.widgets = uistuff.GladeWidgets("PyChess.glade") # Build variant combo model variant_store = Gtk.ListStore(str, int) for name, variant in sorted(name2variant.items()): variant_store.append((name, variant.variant)) self.widgets["variant"].set_model(variant_store) renderer_text = Gtk.CellRendererText() self.widgets["variant"].pack_start(renderer_text, True) self.widgets["variant"].add_attribute(renderer_text, "text", 0) # Connect date_from and date_to to corresponding calendars self.widgets["date_from_button"].connect( "clicked", on_pick_date, self.widgets["date_from"] ) self.widgets["date_to_button"].connect( "clicked", on_pick_date, self.widgets["date_to"] ) # Add piece widgets to dialog *_dock containers on material tab self.dialog = self.widgets["filter_dialog"] self.dialog.set_transient_for(mainwindow()) def hide(widget, event): widget.hide() return True self.dialog.connect("delete-event", hide) for piece in "qrbnp": dock = "w%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(WHITE, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "b%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "moved_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "captured_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() piece = "k" dock = "moved_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() self.widgets["copy_sub_fen"].connect("clicked", self.on_copy_sub_fen) self.widgets["paste_sub_fen"].connect("clicked", self.on_paste_sub_fen) # We will store our filtering queries in a ListStore # column 0: query as text # column 1: query dict # column 2: filter type (NONE, TAG_FILTER or MATERIAL_FILTER or PATTERN_FILTER) # column 3: row type (RULE, SEQUENCE, STREAK) self.treestore = Gtk.TreeStore(str, object, int, int) self.set_model(self.treestore) self.set_headers_visible(True) self.set_grid_lines(Gtk.TreeViewGridLines.HORIZONTAL) column = Gtk.TreeViewColumn(_("Filter"), Gtk.CellRendererText(), text=0) column.set_min_width(80) self.append_column(column) self.columns_autosize() sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) sw.add(self) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box.pack_start(sw, True, True, 0) # Add buttons toolbar = Gtk.Toolbar() editButton = Gtk.ToolButton(stock_id=Gtk.STOCK_EDIT) editButton.set_tooltip_text(_("Edit selected filter")) editButton.connect("clicked", self.on_edit_clicked) toolbar.insert(editButton, -1) delButton = Gtk.ToolButton(stock_id=Gtk.STOCK_REMOVE) delButton.set_tooltip_text(_("Remove selected filter")) delButton.connect("clicked", self.on_del_clicked) toolbar.insert(delButton, -1) addButton = Gtk.ToolButton(stock_id=Gtk.STOCK_ADD) addButton.set_tooltip_text(_("Add new filter")) addButton.connect("clicked", self.on_add_clicked) toolbar.insert(addButton, -1) addSeqButton = Gtk.ToolButton() addSeqButton.set_label(_("Seq")) addSeqButton.set_is_important(True) addSeqButton.set_tooltip_text( _( "Create new sequence where listed conditions may be satisfied at different times in a game" ) ) addSeqButton.connect("clicked", self.on_add_sequence_clicked) toolbar.insert(addSeqButton, -1) addStreakButton = Gtk.ToolButton() addStreakButton.set_label(_("Str")) addStreakButton.set_is_important(True) addStreakButton.set_tooltip_text( _( "Create new streak sequence where listed conditions have to be satisfied in consecutive (half)moves" ) ) addStreakButton.connect("clicked", self.on_add_streak_clicked) toolbar.insert(addStreakButton, -1) self.filterButton = Gtk.ToggleToolButton(Gtk.STOCK_FIND) self.filterButton.set_tooltip_text(_("Filter game list by various conditions")) self.filterButton.connect("clicked", self.on_filter_clicked) toolbar.insert(self.filterButton, -1) tool_box = Gtk.Box() tool_box.pack_start(toolbar, False, False, 0) self.box.pack_start(tool_box, False, False, 0) self.box.show_all() def on_filter_clicked(self, button): self.filtered = button.get_active() if not self.filtered: self.persp.preview_panel.filterButton.set_sensitive(True) self.persp.opening_tree_panel.filterButton.set_sensitive(True) self.clear_filters() else: self.persp.preview_panel.filterButton.set_sensitive(False) self.persp.opening_tree_panel.filterButton.set_sensitive(False) self.update_filters() def on_del_clicked(self, button): selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is None: return self.treestore.remove(treeiter) self.update_filters() def on_add_sequence_clicked(self, button): selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is None: it = self.treestore.append(None, [_("Sequence"), {}, NONE, SEQUENCE]) self.get_selection().select_iter(it) else: text, query, query_type, row_type = self.treestore[treeiter] if row_type == RULE: it = self.treestore.append(None, [_("Sequence"), {}, NONE, SEQUENCE]) self.get_selection().select_iter(it) def on_add_streak_clicked(self, button): selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is None: it = self.treestore.append(None, [_("Streak"), {}, NONE, STREAK]) self.get_selection().select_iter(it) else: text, query, query_type, row_type = self.treestore[treeiter] if row_type == RULE: it = self.treestore.append(None, [_("Streak"), {}, NONE, STREAK]) self.get_selection().select_iter(it) elif row_type == SEQUENCE: it = self.treestore.append(treeiter, [_("Streak"), {}, NONE, STREAK]) self.get_selection().select_iter(it) self.expand_all() def on_add_clicked(self, button): self.widgets["tag_filter"].set_sensitive(True) self.widgets["material_filter"].set_sensitive(True) self.widgets["pattern_filter"].set_sensitive(True) self.widgets["filter_notebook"].set_current_page(TAG_FILTER) self.ini_widgets_from_query({}) selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is not None: text, query, query_type, row_type = self.treestore[treeiter] if row_type == RULE: treeiter = None def on_response(dialog, response): if response == Gtk.ResponseType.OK: ( tag_query, material_query, pattern_query, ) = self.get_queries_from_widgets() if tag_query: it = self.treestore.append( treeiter, [formatted(tag_query), tag_query, TAG_FILTER, RULE] ) self.get_selection().select_iter(it) if material_query: it = self.treestore.append( treeiter, [ formatted(material_query), material_query, MATERIAL_FILTER, RULE, ], ) self.get_selection().select_iter(it) if pattern_query: it = self.treestore.append( treeiter, [formatted(pattern_query), pattern_query, PATTERN_FILTER, RULE], ) self.get_selection().select_iter(it) self.expand_all() self.update_filters() if (not self.filtered) and len(self.treestore) == 1: self.filterButton.set_active(True) if hasattr(self, "board_control"): self.board_control.emit("action", "CLOSE", None, None) self.dialog.hide() self.dialog.disconnect(handler_id) handler_id = self.dialog.connect("response", on_response) self.dialog.show() def on_edit_clicked(self, button): selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is None: return text, query, query_type, row_type = self.treestore[treeiter] if row_type != RULE: return self.ini_widgets_from_query(query) if query_type == TAG_FILTER: self.widgets["tag_filter"].set_sensitive(True) self.widgets["material_filter"].set_sensitive(False) self.widgets["pattern_filter"].set_sensitive(False) self.widgets["filter_notebook"].set_current_page(TAG_FILTER) elif query_type == MATERIAL_FILTER: self.widgets["material_filter"].set_sensitive(True) self.widgets["tag_filter"].set_sensitive(False) self.widgets["pattern_filter"].set_sensitive(False) self.widgets["filter_notebook"].set_current_page(MATERIAL_FILTER) elif query_type == PATTERN_FILTER: self.widgets["pattern_filter"].set_sensitive(True) self.widgets["tag_filter"].set_sensitive(False) self.widgets["material_filter"].set_sensitive(False) self.widgets["filter_notebook"].set_current_page(PATTERN_FILTER) def on_response(dialog, response): if response == Gtk.ResponseType.OK: ( tag_query, material_query, pattern_query, ) = self.get_queries_from_widgets() if tag_query and query_type == TAG_FILTER: self.treestore[treeiter] = [ formatted(tag_query), tag_query, TAG_FILTER, RULE, ] if material_query and query_type == MATERIAL_FILTER: self.treestore[treeiter] = [ formatted(material_query), material_query, MATERIAL_FILTER, RULE, ] if pattern_query and query_type == PATTERN_FILTER: self.treestore[treeiter] = [ formatted(pattern_query), pattern_query, PATTERN_FILTER, RULE, ] self.update_filters() if hasattr(self, "board_control"): self.board_control.emit("action", "CLOSE", None, None) self.dialog.hide() self.dialog.disconnect(handler_id) handler_id = self.dialog.connect("response", on_response) self.dialog.show() def add_sub_fen(self, sub_fen): selection = self.get_selection() model, treeiter = selection.get_selected() if treeiter is not None: text, query, query_type, row_type = self.treestore[treeiter] if row_type == RULE: treeiter = None query = {"sub-fen": sub_fen} self.treestore.append(treeiter, [formatted(query), query, PATTERN_FILTER, RULE]) self.expand_all() if self.filtered: self.update_filters() def clear_filters(self): self.persp.chessfile.set_tag_filter(None) self.persp.chessfile.set_scout_filter(None) self.persp.gamelist.load_games() def update_filters(self): tag_query = {} scout_query = {} # level 0 for row in self.treestore: text, query, filter_type, row_type = row if row_type == RULE: if filter_type == TAG_FILTER: tag_query.update(query) else: scout_query.update(query) elif row_type == SEQUENCE: scout_query["sequence"] = [] # level 1 for sub_row in row.iterchildren(): stext, squery, sfilter_type, srow_type = sub_row if srow_type == RULE: scout_query["sequence"].append(squery) elif srow_type == STREAK: sub_streak = {"streak": []} # level 2 for sub_sub_row in sub_row.iterchildren(): sstext, ssquery, ssfilter_type, ssrow_type = sub_sub_row if ssrow_type == RULE: sub_streak["streak"].append(ssquery) scout_query["sequence"].append(sub_streak) elif row_type == STREAK: scout_query["streak"] = [] # level 1 for sub_row in row.iterchildren(): stext, squery, sfilter_type, srow_type = sub_row if srow_type == RULE: scout_query["streak"].append(squery) need_update = False if tag_query != self.persp.chessfile.tag_query: if self.filtered: self.persp.chessfile.set_tag_filter(tag_query) need_update = True if scout_query != self.persp.chessfile.scout_query: if self.filtered: self.persp.chessfile.set_scout_filter(scout_query) need_update = True textbuffer = self.widgets["scout_textbuffer"] (iter_first, iter_last) = textbuffer.get_bounds() text = textbuffer.get_text(iter_first, iter_last, False) if text: q = ast.literal_eval(text) self.persp.chessfile.set_scout_filter(q) need_update = True if need_update and self.filtered: self.persp.gamelist.load_games() def ini_widgets_from_query(self, query): """Set filter dialog widget values based on query dict key-value pairs""" rule = "variant" if rule in query: index = 0 model = self.widgets["variant"].get_model() for index, row in enumerate(model): if query[rule] == row[1]: break self.widgets["variant"].set_active(index) for rule in ( "white", "black", "event", "site", "date_from", "date_to", "eco_from", "eco_to", "annotator", ): if rule in query: self.widgets[rule].set_text(query[rule]) else: self.widgets[rule].set_text("") for rule in ("elo_from", "elo_to"): if rule in query: self.widgets[rule].set_value(query[rule]) else: self.widgets[rule].set_value(0) if "ignore_tag_colors" in query: self.widgets["ignore_tag_colors"].set_active(True) else: self.widgets["ignore_tag_colors"].set_active(False) if "result" in query: if query["result"] == "1-0": self.widgets["result_1_0"].set_active(True) elif query["result"] == "0-1": self.widgets["result_0_1"].set_active(True) elif query["result"] == "1/2-1/2": self.widgets["result_1_2"].set_active(True) elif query["result"] == "*": self.widgets["result_0_0"].set_active(True) else: self.widgets["result_1_0"].set_active(False) self.widgets["result_0_1"].set_active(False) self.widgets["result_1_2"].set_active(False) self.widgets["result_0_0"].set_active(False) q = None white0 = "" black0 = "" if "material" in query: q = query["material"] if "imbalance" in query: q = query["imbalance"] self.widgets["imbalance"].set_active(True) else: self.widgets["imbalance"].set_active(False) self.widgets["ignore_material_colors"].set_active(False) if type(q) is list and len(q) == 2: if "material" in query: _, white0, black0 = q[0].split("K") _, white1, black1 = q[1].split("K") else: white0, black0 = q[0].split("v") white1, black1 = q[1].split("v") if white0 == black1 and black0 == white1: self.widgets["ignore_material_colors"].set_active(True) elif q is not None: if "material" in query: _, white0, black0 = q.split("K") else: white0, black0 = q.split("v") for piece in "QRBNP": w = white0.count(piece) self.widgets["w%s" % piece.lower()].set_value(w if w > 0 else 0) b = black0.count(piece) self.widgets["b%s" % piece.lower()].set_value(b if b > 0 else 0) if "white-move" in query: self.widgets["white_move"].set_text(", ".join(query["white-move"])) else: self.widgets["white_move"].set_text("") if "black-move" in query: self.widgets["black_move"].set_text(", ".join(query["black-move"])) else: self.widgets["black_move"].set_text("") moved = "moved" in query for piece in "pnbrqk": active = moved and piece.upper() in query["moved"] self.widgets["moved_%s" % piece].set_active(active) captured = "captured" in query for piece in "pnbrq": active = captured and piece.upper() in query["captured"] self.widgets["captured_%s" % piece].set_active(active) if captured and query["captured"] == "": self.widgets["captured_0"].set_active(True) else: self.widgets["captured_0"].set_active(False) if "stm" in query: self.widgets["stm"].set_active(True) if query["stm"] == "white": self.widgets["stm_white"].set_active(True) else: self.widgets["stm_black"].set_active(True) else: self.widgets["stm"].set_active(False) if "sub-fen" in query: sub_fen = query["sub-fen"] fen_str = "%s/prnsqkPRNSQK w" % sub_fen else: sub_fen = "" fen_str = "8/8/8/8/8/8/8/8/prnsqkPRNSQK w" self.widgets["sub_fen"].set_text(sub_fen) # Add a BoardControl widget to dock and initialize it with a new SetupModel self.setupmodel = SetupModel() self.board_control = BoardControl(self.setupmodel, {}, setup_position=True) self.setupmodel.curplayer = SetupPlayer(self.board_control) self.setupmodel.connect("game_changed", self.game_changed) child = self.widgets["setup_pattern_dock"].get_child() if child is not None: self.widgets["setup_pattern_dock"].remove(child) self.widgets["setup_pattern_dock"].add(self.board_control) self.board_control.show_all() self.setupmodel.boards = [self.setupmodel.variant(setup=fen_str)] self.setupmodel.variations = [self.setupmodel.boards] self.setupmodel.start() textbuffer = self.widgets["scout_textbuffer"] textbuffer.set_text("") def get_queries_from_widgets(self): """Build tag and scout query dict from filter dialog widget names and values""" tag_query = {} material_query = {} pattern_query = {} tree_iter = self.widgets["variant"].get_active_iter() if tree_iter is not None: model = self.widgets["variant"].get_model() variant_code = model[tree_iter][1] tag_query["variant"] = variant_code for rule in ( "white", "black", "event", "site", "date_from", "date_to", "eco_from", "eco_to", "annotator", ): if self.widgets[rule].get_text(): tag_query[rule] = self.widgets[rule].get_text() for rule in ("elo_from", "elo_to"): if self.widgets[rule].get_value_as_int(): tag_query[rule] = self.widgets[rule].get_value_as_int() if self.widgets["ignore_tag_colors"].get_active(): tag_query["ignore_tag_colors"] = True if self.widgets["result_1_0"].get_active(): tag_query["result"] = "1-0" if self.widgets["result_0_1"].get_active(): tag_query["result"] = "0-1" if self.widgets["result_1_2"].get_active(): tag_query["result"] = "1/2-1/2" if self.widgets["result_0_0"].get_active(): tag_query["result"] = "*" w_material = [] for piece in "qrbnp": w_material.append( piece.upper() * self.widgets["w%s" % piece].get_value_as_int() ) b_material = [] for piece in "qrbnp": b_material.append( piece.upper() * self.widgets["b%s" % piece].get_value_as_int() ) w_material = "".join(w_material) b_material = "".join(b_material) if w_material or b_material: if self.widgets["imbalance"].get_active(): material_query["imbalance"] = f"{w_material}v{b_material}" if self.widgets["ignore_material_colors"].get_active(): material_query["imbalance"] = [ f"{w_material}v{b_material}", f"{b_material}v{w_material}", ] else: material_query["material"] = f"K{w_material}K{b_material}" if self.widgets["ignore_material_colors"].get_active(): material_query["material"] = [ f"K{w_material}K{b_material}", f"K{b_material}K{w_material}", ] if self.widgets["white_move"].get_text(): moves = [ move.strip() for move in self.widgets["white_move"].get_text().split(",") ] material_query["white-move"] = moves if self.widgets["black_move"].get_text(): moves = [ move.strip() for move in self.widgets["black_move"].get_text().split(",") ] material_query["black-move"] = moves moved = "" for piece in "pnbrqk": if self.widgets["moved_%s" % piece].get_active(): moved += piece.upper() if moved: material_query["moved"] = "%s" % moved captured = "" for piece in "pnbrq0": if self.widgets["captured_%s" % piece].get_active(): captured += piece.upper() if captured: material_query["captured"] = "%s" % captured.replace("0", "") if self.widgets["stm"].get_active(): if self.widgets["stm_white"].get_active(): material_query["stm"] = "white" else: material_query["stm"] = "black" if self.widgets["sub_fen"].get_text(): pattern_query["sub-fen"] = self.widgets["sub_fen"].get_text() return (tag_query, material_query, pattern_query) def fen_changed(self): self.widgets["sub_fen"].set_text(self.get_fen()) def on_copy_sub_fen(self, widget): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text = self.widgets["sub_fen"].get_text() if len(text) > 0: clipboard.set_text(text, -1) def on_paste_sub_fen(self, widget): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text = clipboard.wait_for_text() if text.count("/") == 7: self.board_control.emit("action", "SETUP", None, text) def game_changed(self, model, ply): GLib.idle_add(self.fen_changed) def get_fen(self): return self.setupmodel.boards[-1].as_fen(NORMALCHESS) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/database/OpeningTreePanel.py0000644000175100001770000001135314614030313025053 0ustar00runnerdockerfrom gi.repository import Gtk, GObject from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import toSAN, parseAN from pychess.Utils.const import FEN_START from pychess.System.prefix import addDataPrefix __title__ = _("Openings") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _("Openings panel can filter game list by opening moves") class OpeningTreePanel(Gtk.TreeView): def __init__(self, persp): GObject.GObject.__init__(self) self.persp = persp self.filtered = False self.persp.connect("chessfile_imported", self.on_chessfile_imported) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.liststore = Gtk.ListStore(int, str, int, int) self.modelsort = Gtk.TreeModelSort(self.liststore) self.modelsort.set_sort_column_id(2, Gtk.SortType.DESCENDING) self.set_model(self.modelsort) self.set_headers_visible(True) column = Gtk.TreeViewColumn(_("Move"), Gtk.CellRendererText(), text=1) column.set_sort_column_id(1) column.connect("clicked", self.column_clicked, 1) self.append_column(column) column = Gtk.TreeViewColumn(_("Games"), Gtk.CellRendererText(), text=2) column.set_sort_column_id(2) column.connect("clicked", self.column_clicked, 2) self.append_column(column) column = Gtk.TreeViewColumn(_("Winning %"), Gtk.CellRendererProgress(), value=3) column.set_min_width(80) column.set_sort_column_id(3) column.connect("clicked", self.column_clicked, 3) self.append_column(column) self.conid = self.connect_after("row-activated", self.row_activated) self.board = LBoard() self.board.applyFen(FEN_START) self.columns_autosize() sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) sw.add(self) self.box.pack_start(sw, True, True, 0) # buttons toolbar = Gtk.Toolbar() firstButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_PREVIOUS) toolbar.insert(firstButton, -1) prevButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_REWIND) toolbar.insert(prevButton, -1) self.filterButton = Gtk.ToggleToolButton(Gtk.STOCK_FIND) self.filterButton.set_tooltip_text(_("Filter game list by opening moves")) toolbar.insert(self.filterButton, -1) firstButton.connect("clicked", self.on_first_clicked) prevButton.connect("clicked", self.on_prev_clicked) self.filterButton.connect("clicked", self.on_filter_clicked) tool_box = Gtk.Box() tool_box.pack_start(toolbar, False, False, 0) self.box.pack_start(tool_box, False, False, 0) self.box.show_all() def on_chessfile_imported(self, persp, chessfile): self.update_tree() def on_first_clicked(self, widget): while self.board.hist_move: self.board.popMove() self.update_tree() def on_prev_clicked(self, widget): if self.board.hist_move: self.board.popMove() self.update_tree() def on_filter_clicked(self, button): self.filtered = button.get_active() if not self.filtered: self.persp.filter_panel.filterButton.set_sensitive(True) self.filtered = True while self.board.hist_move: self.board.popMove() self.update_tree() self.filtered = False else: self.persp.filter_panel.filterButton.set_sensitive(False) self.update_tree() def column_clicked(self, col, data): self.set_search_column(data) def row_activated(self, widget, path, col): lmove = self.liststore[self.modelsort.convert_path_to_child_path(path)[0]][0] self.board.applyMove(lmove) self.update_tree() def update_tree(self, load_games=True): self.persp.gamelist.ply = self.board.plyCount if load_games and self.filtered: self.persp.chessfile.set_fen_filter(self.board.asFen()) self.persp.gamelist.load_games() result = self.persp.chessfile.get_book_moves(self.board.asFen()) self.clear_tree() for move, count, white_won, blackwon, draw in result: lmove = parseAN(self.board, move) perf = 0 if not count else round((white_won * 100.0 + draw * 50.0) / count) self.liststore.append([lmove, toSAN(self.board, lmove), count, perf]) def clear_tree(self): selection = self.get_selection() if self.conid is not None and selection.handler_is_connected(self.conid): with GObject.signal_handler_block(selection, self.conid): self.liststore.clear() else: self.liststore.clear() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/database/PreviewPanel.py0000644000175100001770000001413614614030313024257 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.Utils.const import EMPTY, FEN_EMPTY, FEN_START from pychess.Utils.Board import Board from pychess.Utils.Cord import Cord from pychess.widgets.BoardControl import BoardControl from pychess.Savers.ChessFile import LoadingError from pychess.System.prefix import addDataPrefix from pychess.widgets import mainwindow __title__ = _("Preview") __icon__ = addDataPrefix("glade/panel_games.svg") __desc__ = _("Preview panel can filter game list by current game moves") class PreviewPanel: def __init__(self, persp): self.persp = persp self.filtered = False self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # buttons toolbar = Gtk.Toolbar() firstButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_PREVIOUS) toolbar.insert(firstButton, -1) prevButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_REWIND) toolbar.insert(prevButton, -1) nextButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_FORWARD) toolbar.insert(nextButton, -1) lastButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_NEXT) toolbar.insert(lastButton, -1) self.filterButton = Gtk.ToggleToolButton(Gtk.STOCK_FIND) self.filterButton.set_tooltip_text(_("Filter game list by current game moves")) toolbar.insert(self.filterButton, -1) addButton = Gtk.ToolButton(stock_id=Gtk.STOCK_ADD) addButton.set_tooltip_text(_("Add sub-fen filter from position/circles")) toolbar.insert(addButton, -1) firstButton.connect("clicked", self.on_first_clicked) prevButton.connect("clicked", self.on_prev_clicked) nextButton.connect("clicked", self.on_next_clicked) lastButton.connect("clicked", self.on_last_clicked) addButton.connect("clicked", self.on_add_clicked) self.filterButton.connect("clicked", self.on_filter_clicked) tool_box = Gtk.Box() tool_box.pack_start(toolbar, False, False, 0) # board self.gamemodel = self.persp.gamelist.gamemodel self.boardcontrol = BoardControl(self.gamemodel, {}, game_preview=True) self.boardview = self.boardcontrol.view self.board = self.gamemodel.boards[self.boardview.shown].board self.boardview.set_size_request(170, 170) self.boardview.got_started = True self.boardview.auto_update_shown = False self.box.pack_start(self.boardcontrol, True, True, 0) self.box.pack_start(tool_box, False, True, 0) self.box.show_all() selection = self.persp.gamelist.get_selection() self.conid = selection.connect_after("changed", self.on_selection_changed) self.persp.gamelist.preview_cid = self.conid # force first game to show self.persp.gamelist.set_cursor(0) def on_selection_changed(self, selection): model, iter = selection.get_selected() if iter is None: self.gamemodel.boards = [Board(FEN_EMPTY)] del self.gamemodel.moves[:] self.boardview.shown = 0 self.boardview.redrawCanvas() return path = self.persp.gamelist.get_model().get_path(iter) rec, ply = self.persp.gamelist.get_record(path) if rec is None: return try: self.persp.chessfile.loadToModel(rec, -1, self.gamemodel) except LoadingError as err: dialogue = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, message_format=err.args[0], ) if len(err.args) > 1: dialogue.format_secondary_text(err.args[1]) dialogue.connect("response", lambda dialogue, a: dialogue.hide()) dialogue.show() self.boardview.noAnimation = True self.boardview.lastMove = None self.boardview._shown = self.gamemodel.lowply if ply > 0 or self.persp.gamelist.ply > 0: self.boardview.shown = ply if ply > 0 else self.persp.gamelist.ply else: self.boardview.shown = self.boardview.model.ply def on_first_clicked(self, button): self.boardview.showFirst() if self.filtered: self.update_gamelist() def on_prev_clicked(self, button): self.boardview.showPrev() if self.filtered: self.update_gamelist() def on_next_clicked(self, button): self.boardview.showNext() if self.filtered: self.update_gamelist() def on_last_clicked(self, button): self.boardview.showLast() if self.filtered: self.update_gamelist() def on_filter_clicked(self, button): self.filtered = button.get_active() if not self.filtered: self.persp.filter_panel.filterButton.set_sensitive(True) self.boardview.showFirst() self.filtered = True self.update_gamelist() self.filtered = False else: self.persp.filter_panel.filterButton.set_sensitive(False) self.update_gamelist() def on_add_clicked(self, button): """Create sub-fen from current FEN removing pieces not marked with circles""" self.board = self.gamemodel.boards[self.boardview.shown].board board = self.board.clone() fen = board.asFen() for cord in range(64): kord = Cord(cord) if kord not in self.boardview.circles: board.arBoard[cord] = EMPTY sub_fen = board.asFen().split()[0] # If all pieces removed (no circles at all) use the original FEN if sub_fen == "8/8/8/8/8/8/8/8": if fen == FEN_START: return else: sub_fen = fen.split()[0] self.persp.filter_panel.add_sub_fen(sub_fen) def update_gamelist(self): if not self.filtered: return self.board = self.gamemodel.boards[self.boardview.shown].board self.persp.gamelist.ply = self.board.plyCount self.persp.chessfile.set_fen_filter(self.board.asFen()) self.persp.gamelist.load_games() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/database/__init__.py0000644000175100001770000006476714614030313023434 0ustar00runnerdockerimport asyncio import os import threading from struct import pack from gi.repository import Gtk, GObject, GLib from pychess.Utils.const import ( FIRST_PAGE, NEXT_PAGE, FEN_START, DRAW, WHITEWON, BLACKWON, ) # , reprCord from pychess.Utils.IconLoader import load_icon from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import toPolyglot # , FCORD, TCORD from pychess.Utils.GameModel import GameModel from pychess.Variants import name2variant, NormalBoard from pychess.perspectives import Perspective, perspective_manager, panel_name from pychess.perspectives.database.gamelist import GameList from pychess.perspectives.database.OpeningTreePanel import OpeningTreePanel from pychess.perspectives.database.FilterPanel import FilterPanel from pychess.perspectives.database.PreviewPanel import PreviewPanel from pychess.System.prefix import addUserConfigPrefix from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock import EAST, SOUTH, CENTER from pychess.widgets import ( mainwindow, new_notebook, createImage, createAlignment, gtk_close, ) from pychess.widgets import gamewidget from pychess.Database.model import create_indexes, drop_indexes from pychess.Database.PgnImport import PgnImport, download_file from pychess.Database.JvR import JvR from pychess.Savers import fen, epd, olv from pychess.Savers.pgn import PGNFile from pychess.System import conf from pychess.System.protoopen import protoopen pgn_icon = load_icon(24, "application-x-chess-pgn", "pychess") class Database(GObject.GObject, Perspective): __gsignals__ = { "chessfile_opened0": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "chessfile_opened": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "chessfile_closed": (GObject.SignalFlags.RUN_FIRST, None, ()), "chessfile_imported": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "bookfile_created": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self): GObject.GObject.__init__(self) Perspective.__init__(self, "database", _("Database")) self.widgets = gamewidget.getWidgets() self.first_run = True self.chessfile = None self.chessfiles = [] self.importer = None self.gamelists = [] self.filter_panels = [] self.opening_tree_panels = [] self.preview_panels = [] self.notebooks = {} self.page_dict = {} self.connect("chessfile_opened0", self.on_chessfile_opened0) self.dockLocation = addUserConfigPrefix("pydock-database.xml") @property def gamelist(self): if self.chessfile is None: return None else: return self.gamelists[self.chessfiles.index(self.chessfile)] @property def filter_panel(self): if self.chessfile is None: return None else: return self.filter_panels[self.chessfiles.index(self.chessfile)] @property def opening_tree_panel(self): if self.chessfile is None: return None else: return self.opening_tree_panels[self.chessfiles.index(self.chessfile)] @property def preview_panel(self): if self.chessfile is None: return None else: return self.preview_panels[self.chessfiles.index(self.chessfile)] def create_toolbuttons(self): self.import_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_CONVERT) self.import_button.set_tooltip_text(_("Import PGN file")) self.import_button.connect("clicked", self.on_import_clicked) self.save_as_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_SAVE_AS) self.save_as_button.set_tooltip_text(_("Save to PGN file as...")) self.save_as_button.connect("clicked", self.on_save_as_clicked) def init_layout(self): perspective_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) perspective_manager.set_perspective_widget("database", perspective_widget) self.notebooks = {"gamelist": new_notebook()} self.main_notebook = self.notebooks["gamelist"] for panel in self.sidePanels: self.notebooks[panel_name(panel.__name__)] = new_notebook( panel_name(panel.__name__) ) self.spinner = Gtk.Spinner() self.spinner.set_size_request(50, 50) self.progressbar0 = Gtk.ProgressBar(show_text=True) self.progressbar = Gtk.ProgressBar(show_text=True) self.progress_dialog = Gtk.Dialog( "", mainwindow(), 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) ) self.progress_dialog.set_deletable(False) self.progress_dialog.get_content_area().pack_start(self.spinner, True, True, 0) self.progress_dialog.get_content_area().pack_start( self.progressbar0, True, True, 0 ) self.progress_dialog.get_content_area().pack_start( self.progressbar, True, True, 0 ) self.progress_dialog.get_content_area().show_all() # Initing headbook align = createAlignment(4, 4, 0, 4) align.set_property("yscale", 0) self.headbook = Gtk.Notebook() self.headbook.set_name("headbook") self.headbook.set_scrollable(True) align.add(self.headbook) perspective_widget.pack_start(align, False, True, 0) self.headbook.connect_after("switch-page", self.on_switch_page) # The dock self.dock = PyDockTop("database", self) align = Gtk.Alignment() align.show() align.add(self.dock) self.dock.show() perspective_widget.pack_start(align, True, True, 0) self.docks["gamelist"] = ( Gtk.Label(label="gamelist"), self.notebooks["gamelist"], None, ) for panel in self.sidePanels: self.docks[panel_name(panel.__name__)][1] = self.notebooks[ panel_name(panel.__name__) ] self.load_from_xml() # Default layout of side panels first_time_layout = False if not os.path.isfile(self.dockLocation): first_time_layout = True leaf = self.dock.dock( self.docks["gamelist"][1], CENTER, self.docks["gamelist"][0], "gamelist" ) leaf.setDockable(False) leaf = leaf.dock( self.docks["OpeningTreePanel"][1], EAST, self.docks["OpeningTreePanel"][0], "OpeningTreePanel", ) leaf = leaf.dock( self.docks["FilterPanel"][1], CENTER, self.docks["FilterPanel"][0], "FilterPanel", ) leaf.dock( self.docks["PreviewPanel"][1], SOUTH, self.docks["PreviewPanel"][0], "PreviewPanel", ) def unrealize(dock): dock.saveToXML(self.dockLocation) dock._del() self.dock.connect("unrealize", unrealize) self.dock.show_all() perspective_widget.show_all() perspective_manager.set_perspective_menuitems( "database", self.menuitems, default=first_time_layout ) perspective_manager.set_perspective_toolbuttons( "database", [self.import_button, self.save_as_button] ) def on_switch_page(self, notebook, page, page_num): if page in self.page_dict: self.chessfile = self.page_dict[page][0] i = self.chessfiles.index(self.chessfile) self.notebooks["gamelist"].set_current_page(i) self.notebooks["OpeningTreePanel"].set_current_page(i) self.notebooks["FilterPanel"].set_current_page(i) self.notebooks["PreviewPanel"].set_current_page(i) def set_sensitives(self, on): self.import_button.set_sensitive(on) self.widgets["import_chessfile"].set_sensitive(on) self.widgets["database_save_as"].set_sensitive(on) self.widgets["create_book"].set_sensitive(on) self.widgets["import_endgame_nl"].set_sensitive(on) self.widgets["import_twic"].set_sensitive(on) if on: gamewidget.getWidgets()["copy_pgn"].set_property("sensitive", on) gamewidget.getWidgets()["copy_fen"].set_property("sensitive", on) else: persp = perspective_manager.get_perspective("games") if persp.cur_gmwidg() is None: gamewidget.getWidgets()["copy_pgn"].set_property("sensitive", on) gamewidget.getWidgets()["copy_fen"].set_property("sensitive", on) def open_chessfile(self, filename): if self.first_run: self.init_layout() self.first_run = False perspective_manager.activate_perspective("database") self.progress_dialog.set_title(_("Open")) self.spinner.show() self.spinner.start() def opening(): # Redirection of the PGN file nonlocal filename for ext in [".sqlite", ".bin", ".scout"]: if filename.endswith(ext): filename = filename[: len(filename) - len(ext)] + ".pgn" # Processing by file extension if filename.endswith(".pgn"): GLib.idle_add(self.progressbar.show) GLib.idle_add(self.progressbar.set_text, _("Opening chessfile...")) chessfile = PGNFile(protoopen(filename), self.progressbar) self.importer = chessfile.init_tag_database() if self.importer is not None and self.importer.cancel: chessfile.tag_database.close() if os.path.isfile(chessfile.sqlite_path): os.remove(chessfile.sqlite_path) chessfile = None else: chessfile.init_scoutfish() chessfile.init_chess_db() elif filename.endswith(".epd"): self.importer = None chessfile = epd.load(protoopen(filename)) elif filename.endswith(".olv"): self.importer = None chessfile = olv.load(protoopen(filename, encoding="utf-8")) elif filename.endswith(".fen"): self.importer = None chessfile = fen.load(protoopen(filename)) else: self.importer = None chessfile = None GLib.idle_add(self.spinner.stop) GLib.idle_add(self.spinner.hide) GLib.idle_add(self.progress_dialog.hide) if chessfile is not None: self.chessfile = chessfile self.chessfiles.append(chessfile) GLib.idle_add(self.emit, "chessfile_opened0", chessfile) else: if self.chessfile is None: self.close(None) thread = threading.Thread(target=opening) thread.daemon = True thread.start() response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: if self.importer is not None: self.importer.do_cancel() self.progress_dialog.hide() def on_chessfile_opened0(self, persp, chessfile): page = Gtk.Alignment() tabcontent, close_button = self.get_tabcontent(chessfile) self.headbook.append_page(page, tabcontent) self.page_dict[page] = (chessfile, close_button) page.show_all() gamelist = GameList(self) self.gamelists.append(gamelist) opening_tree_panel = OpeningTreePanel(self) self.opening_tree_panels.append(opening_tree_panel) filter_panel = FilterPanel(self) self.filter_panels.append(filter_panel) preview_panel = PreviewPanel(self) self.preview_panels.append(preview_panel) self.notebooks["gamelist"].append_page(gamelist.box) self.notebooks["OpeningTreePanel"].append_page(opening_tree_panel.box) self.notebooks["FilterPanel"].append_page(filter_panel.box) self.notebooks["PreviewPanel"].append_page(preview_panel.box) self.headbook.set_current_page(self.headbook.get_n_pages() - 1) gamelist.load_games() opening_tree_panel.update_tree(load_games=False) self.set_sensitives(True) self.emit("chessfile_opened", chessfile) def close(self, close_button): for page in list(self.page_dict.keys()): if self.page_dict[page][1] == close_button: chessfile = self.page_dict[page][0] i = self.chessfiles.index(chessfile) self.notebooks["gamelist"].remove_page(i) self.notebooks["OpeningTreePanel"].remove_page(i) self.notebooks["FilterPanel"].remove_page(i) self.notebooks["PreviewPanel"].remove_page(i) del self.gamelists[i] del self.filter_panels[i] del self.chessfiles[i] chessfile.close() del self.page_dict[page] self.headbook.remove_page(self.headbook.page_num(page)) break if len(self.chessfiles) == 0: self.chessfile = None self.set_sensitives(False) perspective_manager.disable_perspective("database") self.emit("chessfile_closed") def on_import_endgame_nl(self): self.do_import(JvR) response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: self.importer.do_cancel() self.progress_dialog.hide() def on_import_twic(self): LATEST = get_latest_twic() if LATEST is None: return html = "https://theweekinchess.com/html/twic%s.html" twic = [] pgn = "https://raw.githubusercontent.com/rozim/ChessData/master/Twic/fix-twic%s.pgn" # pgn = "/home/tamas/PGN/twic/twic%sg.zip" for i in range(210, 920): twic.append((html % i, pgn % i)) pgn = "https://theweekinchess.com/zips/twic%sg.zip" # pgn = "/home/tamas/PGN/twic/twic%sg.zip" for i in range(920, LATEST + 1): twic.append((html % i, pgn % i)) twic.append((html % LATEST, pgn % LATEST)) # import limited to latest twic .pgn for now twic = twic[-1:] self.do_import(twic) response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: self.importer.do_cancel() self.progress_dialog.hide() def on_save_as_clicked(self, widget): dialog = Gtk.FileChooserDialog( _("Save as"), mainwindow(), Gtk.FileChooserAction.SAVE, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.ACCEPT, ), ) dialog.set_current_folder(os.path.expanduser("~")) response = dialog.run() if response == Gtk.ResponseType.ACCEPT: filename = dialog.get_filename() else: filename = None dialog.destroy() if filename is None: return self.progress_dialog.set_title(_("Save as")) def save_as(cancel_event): with open(filename, "w") as to_file: self.process_records(self.save_records, cancel_event, to_file) GLib.idle_add(self.progress_dialog.hide) cancel_event = threading.Event() loop = asyncio.get_event_loop() loop.run_in_executor(None, save_as, cancel_event) response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: cancel_event.set() self.progress_dialog.hide() def save_records(self, records, to_file): f = self.chessfile.handle for i, rec in enumerate(records): offs = rec["Offset"] f.seek(offs) game = "" for line in f: if line.startswith('[Event "'): if game: break # Second one, start of next game else: game = line # First occurence elif game: game += line to_file.write(game) def on_import_clicked(self, widget): dialog = Gtk.FileChooserDialog( _("Open chess file"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) dialog.set_select_multiple(True) filter_text = Gtk.FileFilter() filter_text.set_name(".pgn") filter_text.add_pattern("*.pgn") filter_text.add_mime_type("application/x-chess-pgn") dialog.add_filter(filter_text) filter_text = Gtk.FileFilter() filter_text.set_name(".zip") filter_text.add_pattern("*.zip") filter_text.add_mime_type("application/zip") dialog.add_filter(filter_text) response = dialog.run() if response == Gtk.ResponseType.OK: filenames = dialog.get_filenames() else: filenames = None dialog.destroy() if filenames is not None: self.do_import(filenames) response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: self.importer.do_cancel() self.progress_dialog.hide() # @profile_me def importing(self, filenames): drop_indexes(self.chessfile.engine) self.importer = PgnImport(self.chessfile, append_pgn=True) self.importer.initialize() for i, filename in enumerate(filenames): if len(filenames) > 1: GLib.idle_add(self.progressbar0.set_fraction, i / float(len(filenames))) if self.importer.cancel: break if isinstance(filename, tuple): info_link, pgn_link = filename self.importer.do_import( pgn_link, info=info_link, progressbar=self.progressbar ) else: self.importer.do_import(filename, progressbar=self.progressbar) GLib.idle_add(self.progressbar.set_text, _("Recreating indexes...")) # .sqlite drop_indexes(self.chessfile.engine) create_indexes(self.chessfile.engine) # .scout self.chessfile.init_scoutfish() # .bin self.chessfile.init_chess_db() self.chessfile.set_tag_filter(None) self.chessfile.set_fen_filter(None) self.chessfile.set_scout_filter(None) GLib.idle_add(self.gamelist.load_games) GLib.idle_add(self.emit, "chessfile_imported", self.chessfile) GLib.idle_add(self.progressbar0.hide) GLib.idle_add(self.progress_dialog.hide) def do_import(self, filenames): self.progress_dialog.set_title(_("Import")) if len(filenames) > 1: self.progressbar0.show() self.progressbar.show() self.progressbar.set_text(_("Preparing to start import...")) thread = threading.Thread(target=self.importing, args=(filenames,)) thread.daemon = True thread.start() def process_records(self, callback, cancel_event, *args): counter = 0 records, plys = self.chessfile.get_records(FIRST_PAGE) callback(records, *args) GLib.idle_add(self.progressbar.set_text, _("%s games processed") % counter) while not cancel_event.is_set(): records, plys = self.chessfile.get_records(NEXT_PAGE) if records: callback(records, *args) counter += len(records) GLib.idle_add( self.progressbar.set_text, _("%s games processed") % counter ) else: break def create_book(self, new_bin=None): if new_bin is None: dialog = Gtk.FileChooserDialog( _("Create New Polyglot Opening Book"), mainwindow(), Gtk.FileChooserAction.SAVE, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_NEW, Gtk.ResponseType.ACCEPT, ), ) dialog.set_current_folder(os.path.expanduser("~")) dialog.set_current_name("new_book.bin") response = dialog.run() if response == Gtk.ResponseType.ACCEPT: new_bin = dialog.get_filename() if not new_bin.endswith(".bin"): new_bin = "%s.bin" % new_bin dialog.destroy() if new_bin is None: return self.progress_dialog.set_title(_("Create Polyglot Book")) def creating_book(cancel_event): positions = {} self.process_records(self.feed_book, cancel_event, positions) if cancel_event.is_set(): return with open(new_bin, "wb") as to_file: GLib.idle_add(self.progressbar.set_text, _("Save")) for key, moves in sorted(positions.items(), key=lambda item: item[0]): # print(key, moves) for move in moves: to_file.write(pack(">QHHI", key, move, moves[move], 0)) GLib.idle_add(self.emit, "bookfile_created") GLib.idle_add(self.progress_dialog.hide) cancel_event = threading.Event() loop = asyncio.get_event_loop() loop.run_in_executor(None, creating_book, cancel_event) response = self.progress_dialog.run() if response == Gtk.ResponseType.CANCEL: cancel_event.set() self.progress_dialog.hide() def feed_book(self, records, positions): BOOK_DEPTH_MAX = conf.get("book_depth_max") for rec in records: model = GameModel() if rec["Result"] == DRAW: score = (1, 1) elif rec["Result"] == WHITEWON: score = (2, 0) elif rec["Result"] == BLACKWON: score = (0, 2) else: score = (0, 0) fenstr = rec["FEN"] variant = self.chessfile.get_variant(rec) if variant: model.variant = name2variant[variant] board = LBoard(model.variant.variant) else: model.variant = NormalBoard board = LBoard() if fenstr: try: board.applyFen(fenstr) except SyntaxError: continue else: board.applyFen(FEN_START) boards = [board] movetext = self.chessfile.get_movetext(rec) boards = self.chessfile.parse_movetext(movetext, boards[0], -1) for board in boards: if board.plyCount > BOOK_DEPTH_MAX: break move = board.lastMove if move is not None: poly_move = toPolyglot(board.prev, move) # move_str = "%s%s" % (reprCord[FCORD(move)], reprCord[TCORD(move)]) # print("%0.16x" % board.prev.hash, poly_move, board.prev.asFen(), move_str) if board.prev.hash in positions: if poly_move in positions[board.prev.hash]: positions[board.prev.hash][poly_move] += score[ board.prev.color ] else: positions[board.prev.hash][poly_move] = score[ board.prev.color ] else: # board.prev.asFen(), move_str, positions[board.prev.hash] = { poly_move: score[board.prev.color] } def create_database(self): dialog = Gtk.FileChooserDialog( _("Create New Pgn Database"), mainwindow(), Gtk.FileChooserAction.SAVE, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_NEW, Gtk.ResponseType.ACCEPT, ), ) dialog.set_current_folder(os.path.expanduser("~")) dialog.set_current_name("new.pgn") response = dialog.run() if response == Gtk.ResponseType.ACCEPT: new_pgn = dialog.get_filename() if not new_pgn.endswith(".pgn"): new_pgn = "%s.pgn" % new_pgn if not os.path.isfile(new_pgn): # create new file with open(new_pgn, "w"): pass self.open_chessfile(new_pgn) else: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK ) d.set_markup(_("File '%s' already exists.") % new_pgn) d.run() d.destroy() dialog.destroy() def get_tabcontent(self, chessfile): tabcontent = createAlignment(0, 0, 0, 0) hbox = Gtk.HBox() hbox.set_spacing(4) hbox.pack_start(createImage(pgn_icon), False, True, 0) close_button = Gtk.Button() close_button.set_property("can-focus", False) close_button.add(createImage(gtk_close)) close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_size_request(20, 18) close_button.connect("clicked", self.close) hbox.pack_end(close_button, False, True, 0) name, ext = os.path.splitext(chessfile.path) basename = os.path.basename(name) info = f"{basename}.{ext[1:]}" tooltip = _("%(path)s\ncontaining %(count)s games") % ( {"path": chessfile.path, "count": chessfile.count} ) tabcontent.set_tooltip_text(tooltip) label = Gtk.Label(info) hbox.pack_start(label, False, True, 0) tabcontent.add(hbox) tabcontent.show_all() return tabcontent, close_button def get_latest_twic(): filename = download_file("https://theweekinchess.com/twic") latest = None if filename is None: return latest PREFIX = 'href="https://theweekinchess.com/html/twic' with open(filename) as f: for line in f: position = line.find(PREFIX) if position >= 0: latest = int(line[position + len(PREFIX) :][:4]) break return latest ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/database/gamelist.py0000644000175100001770000002302214614030313023455 0ustar00runnerdockerimport asyncio from io import StringIO from gi.repository import Gtk, GObject from pychess.Utils.const import ( DRAW, LOCAL, WHITE, BLACK, WAITING_TO_START, reprResult, UNDOABLE_STATES, FIRST_PAGE, PREV_PAGE, NEXT_PAGE, ) from pychess.Players.Human import Human from pychess.Utils.GameModel import GameModel from pychess.perspectives import perspective_manager from pychess.Variants import variants from pychess.Database.model import game, event, site, pl1, pl2 from pychess.widgets import newGameDialog from pychess.Savers import pgn cols = ( game.c.id, pl1.c.name, game.c.white_elo, pl2.c.name, game.c.black_elo, game.c.result, game.c.date, event.c.name, site.c.name, game.c.round, game.c.ply_count, game.c.eco, game.c.time_control, game.c.variant, game.c.fen, ) class GameList(Gtk.TreeView): def __init__(self, persp): GObject.GObject.__init__(self) self.persp = persp self.records = [] self.preview_cid = None # GTK_SELECTION_BROWSE - exactly one item is always selected self.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.liststore = Gtk.ListStore( int, str, str, str, str, str, str, str, str, str, str, str, str, str, str ) self.modelsort = Gtk.TreeModelSort(self.liststore) self.modelsort.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.modelsort.set_sort_func(2, self.compare_elo, 2) self.modelsort.set_sort_func(4, self.compare_elo, 4) self.modelsort.connect("sort-column-changed", self.sort_column_changed) self.set_model(self.modelsort) self.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.set_headers_visible(True) self.set_rules_hint(True) self.set_search_column(1) titles = ( _("Id"), _("White"), _("W Elo"), _("Black"), _("B Elo"), _("Result"), _("Date"), _("Event"), _("Site"), _("Round"), _("Length"), "ECO", _("Time control"), _("Variant"), "FEN", ) for i, title in enumerate(titles): r = Gtk.CellRendererText() if i in (0, 2, 4, 9, 10, 12): r.set_alignment( 1.0, 0.5 ) # set alignment to the right for numeric values column = Gtk.TreeViewColumn(title, r, text=i) column.set_resizable(True) column.set_reorderable(True) column.set_sort_column_id(i) self.append_column(column) self.connect("row-activated", self.row_activated) self.set_cursor(0) self.columns_autosize() self.gamemodel = GameModel() self.ply = 0 # buttons toolbar = Gtk.Toolbar() firstButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_PREVIOUS) firstButton.set_tooltip_text(_("First games")) toolbar.insert(firstButton, -1) prevButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_REWIND) prevButton.set_tooltip_text(_("Previous games")) toolbar.insert(prevButton, -1) nextButton = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_FORWARD) nextButton.set_tooltip_text(_("Next games")) toolbar.insert(nextButton, -1) firstButton.connect("clicked", self.on_first_clicked) prevButton.connect("clicked", self.on_prev_clicked) nextButton.connect("clicked", self.on_next_clicked) limit_combo = Gtk.ComboBoxText() for limit in ("100", "500", "1000", "5000"): limit_combo.append_text(limit) limit_combo.set_active(0) toolitem = Gtk.ToolItem.new() toolitem.add(limit_combo) toolbar.insert(toolitem, -1) limit_combo.connect("changed", self.on_limit_combo_changed) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) sw.add(self) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box.pack_start(sw, True, True, 0) self.box.pack_start(toolbar, False, False, 0) self.box.show_all() def on_first_clicked(self, button): self.load_games(direction=FIRST_PAGE) def on_prev_clicked(self, button): self.load_games(direction=PREV_PAGE) def on_next_clicked(self, button): self.load_games(direction=NEXT_PAGE) def on_limit_combo_changed(self, combo): text = combo.get_active_text() if text is not None: self.persp.chessfile.limit = int(text) self.load_games(direction=FIRST_PAGE) def compare_elo(self, treesortable, iter0, iter1, column): """Adapted sort : int values are not sorted in lexicographic order""" elo0 = treesortable.get_value(iter0, column) elo1 = treesortable.get_value(iter1, column) isnum0 = elo0.isdigit() isnum1 = elo1.isdigit() if isnum0 and isnum1: num0 = int(elo0) num1 = int(elo1) return (num0 > num1) - (num0 < num1) elif isnum0: return 1 elif isnum1: return -1 else: return (elo0 > elo1) - (elo0 < elo1) def sort_column_changed(self, treesortable): sort_column_id, order = treesortable.get_sort_column_id() if sort_column_id is None: self.modelsort.set_sort_column_id(0, Gtk.SortType.ASCENDING) sort_column_id, order = 0, Gtk.SortType.ASCENDING self.set_search_column(sort_column_id) is_desc = order == Gtk.SortType.DESCENDING self.persp.chessfile.set_tag_order(cols[sort_column_id], is_desc) self.load_games(direction=FIRST_PAGE) def load_games(self, direction=FIRST_PAGE): selection = self.get_selection() if ( selection is not None and self.preview_cid is not None and selection.handler_is_connected(self.preview_cid) ): with GObject.signal_handler_block(selection, self.preview_cid): self.liststore.clear() else: self.liststore.clear() add = self.liststore.append self.records = [] records, plys = self.persp.chessfile.get_records(direction) for i, rec in enumerate(records): game_id = rec["Id"] offs = rec["Offset"] wname = rec["White"] bname = rec["Black"] welo = rec["WhiteElo"] belo = rec["BlackElo"] result = rec["Result"] result = "½-½" if result == DRAW else reprResult[result] if result else "*" event = "" if rec["Event"] is None else rec["Event"].replace("?", "") site = "" if rec["Site"] is None else rec["Site"].replace("?", "") round_ = "" if rec["Round"] is None else rec["Round"].replace("?", "") date = ( "" if rec["Date"] is None else rec["Date"].replace(".??", "").replace("????.", "") ) try: ply = rec["PlyCount"] length = str(int(ply) // 2) if ply else "" except ValueError: length = "" eco = rec["ECO"] tc = rec["TimeControl"] variant = rec["Variant"] variant = variants[variant].cecp_name.capitalize() if variant else "" fen = rec["FEN"] add( [ game_id, wname, welo, bname, belo, result, date, event, site, round_, length, eco, tc, variant, fen, ] ) ply = plys.get(offs) if offs in plys else 0 self.records.append((rec, ply)) self.set_cursor(0) def get_record(self, path): if path is None: return None, None else: return self.records[self.modelsort.convert_path_to_child_path(path)[0]] def row_activated(self, widget, path, col): rec, ply = self.get_record(path) if rec is None: return # Enable unfinished games to continue from newgamedialog if rec["Result"] not in UNDOABLE_STATES: newGameDialog.EnterNotationExtension.run() model = self.persp.chessfile.loadToModel(rec) text = pgn.save(StringIO(), model) newGameDialog.EnterNotationExtension.sourcebuffer.set_text(text) return self.gamemodel = GameModel() variant = rec["Variant"] if variant: self.gamemodel.tags["Variant"] = variant # Lichess exports study .pgn without White and Black tags wp = "" if rec["White"] is None else rec["White"] bp = "" if rec["Black"] is None else rec["Black"] p0 = (LOCAL, Human, (WHITE, wp), wp) p1 = (LOCAL, Human, (BLACK, bp), bp) self.persp.chessfile.loadToModel(rec, -1, self.gamemodel) self.gamemodel.endstatus = ( self.gamemodel.status if self.gamemodel.status in UNDOABLE_STATES else None ) self.gamemodel.status = WAITING_TO_START perspective_manager.activate_perspective("games") perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(self.gamemodel, p0, p1)) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9054768 pychess-1.0.5/lib/pychess/perspectives/fics/0000755000175100001770000000000014614030425020463 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/ArchiveListPanel.py0000644000175100001770000004056214614030313024235 0ustar00runnerdockerimport asyncio from io import StringIO from gi.repository import Gtk from pychess.ic.FICSObjects import ( FICSGame, FICSAdjournedGame, make_sensitive_if_available, ) from pychess.ic import get_infobarmessage_content from pychess.ic.ICGameModel import ICGameModel from pychess.Utils.const import WHITE, BLACK, REMOTE, reprResult from pychess.Utils.TimeModel import TimeModel from pychess.Players.ICPlayer import ICPlayer from pychess.Savers import pgn from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.perspectives import perspective_manager from pychess.perspectives.fics.ParrentListSection import ( ParrentListSection, cmp, SEPARATOR, FOLLOW, CHAT, CHALLENGE, FINGER, ARCHIVED, ) from pychess.widgets.InfoBar import InfoBarMessage, InfoBarMessageButton __title__ = _("Archived") __icon__ = addDataPrefix("glade/panel_games.svg") __desc__ = _("Adjourned, history and journal games list") class Sidepanel(ParrentListSection): def load(self, widgets, connection, lounge): self.connection = connection self.widgets = widgets self.lounge = lounge self.infobar = lounge.infobar __widget__ = lounge.archive_list self.games = {} self.messages = {} self.tv = widgets["adjournedtreeview"] self.store = Gtk.ListStore( FICSGame, str, str, str, str, str, str, str, str, str, int ) self.model = Gtk.TreeModelSort(model=self.store) self.tv.set_model(self.model) self.addColumns( self.tv, "FICSGame", _("White"), "", "", _("Black"), "", _("Rated"), _("Clock"), _("Type"), _("Date/Time"), "sortable_time", hide=[0, 10], ) self.selection = self.tv.get_selection() self.selection.connect("changed", self.onSelectionChanged) self.onSelectionChanged(self.selection) self.tv.get_model().set_sort_func(5, self.compareFunction, 7) self.connection.adm.connect("adjournedGameAdded", self.onAdjournedGameAdded) self.connection.games.connect( "FICSAdjournedGameRemoved", self.onAdjournedGameRemoved ) self.connection.adm.connect("historyGameAdded", self.onHistoryGameAdded) self.connection.games.connect( "FICSHistoryGameRemoved", self.onHistoryGameRemoved ) self.connection.adm.connect("journalGameAdded", self.onJournalGameAdded) self.connection.games.connect( "FICSJournalGameRemoved", self.onJournalGameRemoved ) widgets["resignButton"].connect("clicked", self.onResignButtonClicked) widgets["abortButton"].connect("clicked", self.onAbortButtonClicked) widgets["drawButton"].connect("clicked", self.onDrawButtonClicked) widgets["resumeButton"].connect("clicked", self.onResumeButtonClicked) widgets["previewButton"].connect("clicked", self.onPreviewButtonClicked) widgets["examineButton"].connect("clicked", self.onExamineButtonClicked) widgets["mygamesButton"].connect("clicked", self.onMygamesButtonClicked) self.tv.connect( "row-activated", lambda *args: self.onPreviewButtonClicked(None) ) self.connection.bm.connect("archiveGamePreview", self.onGamePreview) self.connection.bm.connect("playGameCreated", self.onPlayGameCreated) self.tv.connect("button-press-event", self.button_press_event) self.createLocalMenu((CHALLENGE, CHAT, FOLLOW, SEPARATOR, FINGER, ARCHIVED)) return __widget__ def getSelectedPlayer(self): model = self.tv.get_model() path, col = self.tv.get_cursor() col_index = self.tv.get_columns().index(col) game = model.get_value(model.get_iter(path), 0) return game.bplayer if col_index >= 3 else game.wplayer def onSelectionChanged(self, selection): model, treeiter = selection.get_selected() a_row_is_selected = False if treeiter is not None: a_row_is_selected = True game = model.get_value(treeiter, 0) if ( isinstance(game, FICSAdjournedGame) and self.connection.stored_owner == self.connection.username ): make_sensitive_if_available(self.widgets["resumeButton"], game.opponent) for button in ("resignButton", "abortButton", "drawButton"): self.widgets[button].set_sensitive(True) else: for button in ( "resignButton", "abortButton", "drawButton", "resumeButton", ): self.widgets[button].set_sensitive(False) else: self.widgets["resumeButton"].set_sensitive(False) self.widgets["resumeButton"].set_tooltip_text("") for button in ("resignButton", "abortButton", "drawButton"): self.widgets[button].set_sensitive(False) self.widgets["previewButton"].set_sensitive(a_row_is_selected) self.widgets["examineButton"].set_sensitive(a_row_is_selected) def onPlayGameCreated(self, bm, board): for message in self.messages.values(): message.dismiss() self.messages = {} return False def _infobar_adjourned_message(self, game, player): if player not in self.messages: text = _( " with whom you have an adjourned %(timecontrol)s " + "%(gametype)s game is online." ) % { "timecontrol": game.display_timecontrol, "gametype": game.game_type.display_text, } content = get_infobarmessage_content(player, text, gametype=game.game_type) def callback(infobar, response, message): log.debug( "%s" % player, extra={ "task": ( self.connection.username, "_infobar_adjourned_message.callback", ) }, ) if response == Gtk.ResponseType.ACCEPT: self.connection.client.run_command("match %s" % player.name) elif response == Gtk.ResponseType.HELP: self.connection.adm.queryMoves(game) else: try: self.messages[player].dismiss() del self.messages[player] except KeyError: pass return False message = InfoBarMessage(Gtk.MessageType.QUESTION, content, callback) message.add_button( InfoBarMessageButton(_("Request Continuation"), Gtk.ResponseType.ACCEPT) ) message.add_button( InfoBarMessageButton(_("Examine Adjourned Game"), Gtk.ResponseType.HELP) ) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) make_sensitive_if_available(message.buttons[0], player) self.messages[player] = message self.infobar.push_message(message) def compareFunction(self, treemodel, iter0, iter1, column): (minute0, minute1) = ( treemodel.get_value(iter0, 10), treemodel.get_value(iter1, 10), ) return cmp(minute0, minute1) def online_changed(self, player, prop, game): log.debug(f"AdjournedTabSection.online_changed: {repr(player)} {repr(game)}") partner = game.bplayer if game.wplayer.name == player.name else game.wplayer result = ( "▷" if partner.name == self.connection.username and game.opponent.online else "*" ) try: self.store.set(self.games[game]["ti"], 3, result) except KeyError: pass if ( self.connection.stored_owner == self.connection.username and player.online and player.adjournment ): self._infobar_adjourned_message(game, player) elif not player.online and player in self.messages: self.messages[player].dismiss() # calling message.dismiss() might cause it to be removed from # self.messages in another callback, so we re-check if player in self.messages: del self.messages[player] return False def status_changed(self, player, prop, game): log.debug(f"AdjournedTabSection.status_changed: {repr(player)} {repr(game)}") try: message = self.messages[player] except KeyError: pass else: make_sensitive_if_available(message.buttons[0], player) self.onSelectionChanged(self.selection) return False def onAdjournedGameAdded(self, adm, game): if game not in self.games: partner = ( game.bplayer if game.wplayer.name == game.opponent.name else game.wplayer ) result = ( "▷" if partner.name == self.connection.username and game.opponent.online else "*" ) ti = self.store.append( [ game, game.wplayer.name, game.wrating, result, game.bplayer.name, game.brating, game.display_rated, game.display_timecontrol, game.game_type.display_text, game.display_time, game.sortable_time, ] ) self.games[game] = {} self.games[game]["ti"] = ti self.games[game]["online_cid"] = game.opponent.connect( "notify::online", self.online_changed, game ) self.games[game]["status_cid"] = game.opponent.connect( "notify::status", self.status_changed, game ) if ( self.connection.stored_owner == self.connection.username and game.opponent.online ): self._infobar_adjourned_message(game, game.opponent) return False def onHistoryGameAdded(self, adm, game): if game not in self.games: ti = self.store.append( [ game, game.wplayer.name, game.wrating, reprResult[game.result], game.bplayer.name, game.brating, game.display_rated, game.display_timecontrol, game.game_type.display_text, game.display_time, game.sortable_time, ] ) self.games[game] = {} self.games[game]["ti"] = ti return False def onJournalGameAdded(self, adm, game): if game not in self.games: ti = self.store.append( [ game, game.wplayer.name, game.wrating, reprResult[game.result], game.bplayer.name, game.brating, game.display_rated, game.display_timecontrol, game.game_type.display_text, game.display_time, game.sortable_time, ] ) self.games[game] = {} self.games[game]["ti"] = ti return False def onAdjournedGameRemoved(self, adm, game): if game in self.games: if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) if game.opponent.handler_is_connected(self.games[game]["online_cid"]): game.opponent.disconnect(self.games[game]["online_cid"]) if game.opponent.handler_is_connected(self.games[game]["status_cid"]): game.opponent.disconnect(self.games[game]["status_cid"]) if game.opponent in self.messages: self.messages[game.opponent].dismiss() if game.opponent in self.messages: del self.messages[game.opponent] del self.games[game] return False def onHistoryGameRemoved(self, adm, game): if game in self.games: if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) del self.games[game] return False def onJournalGameRemoved(self, adm, game): if game in self.games: if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) del self.games[game] return False def onResignButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) self.connection.adm.resign(game) def onDrawButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) self.connection.adm.draw(game) def onAbortButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) self.connection.adm.abort(game) def onResumeButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) self.connection.adm.resume(game) def onPreviewButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) self.connection.adm.queryMoves(game) def onExamineButtonClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return game = model.get_value(sel_iter, 0) if self.connection.examined_game is None: self.connection.adm.examine(game) else: self.lounge.nonoWhileExamine(None) def onMygamesButtonClicked(self, button): self.connection.adm.queryAdjournments() self.connection.adm.queryHistory() self.connection.adm.queryJournal() def onGamePreview(self, adm, ficsgame): log.debug("Archived panel onGamePreview: %s" % ficsgame) timemodel = TimeModel(ficsgame.minutes * 60, ficsgame.inc) gamemodel = ICGameModel(self.connection, ficsgame, timemodel) # The players need to start listening for moves IN this method if they # want to be noticed of all moves the FICS server sends us from now on. # Hence the lazy loading is skipped. wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer player0tup = ( REMOTE, ICPlayer, ( gamemodel, wplayer.name, -1, WHITE, wplayer.long_name(), wplayer.getRatingByGameType(ficsgame.game_type), ), wplayer.long_name(), ) player1tup = ( REMOTE, ICPlayer, ( gamemodel, bplayer.name, -1, BLACK, bplayer.long_name(), bplayer.getRatingByGameType(ficsgame.game_type), ), bplayer.long_name(), ) perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart( gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.pgn), pgn, 0, -1), ) ) gamemodel.connect("game_started", self.on_game_start, ficsgame) def on_game_start(self, gamemodel, ficsgame): gamemodel.end(ficsgame.result, ficsgame.reason) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/ChatPanel.py0000755000175100001770000000625114614030313022677 0ustar00runnerdockerimport re from gi.repository import Gtk from pychess.System import uistuff from pychess.System.prefix import addDataPrefix TYPE_PERSONAL, TYPE_CHANNEL, TYPE_GUEST, TYPE_ADMIN, TYPE_COMP, TYPE_BLINDFOLD = range( 6 ) def get_playername(playername): re_m = re.match(r"(\w+)\W*", playername) return re_m.groups()[0] __title__ = _("Talking") __icon__ = addDataPrefix("glade/panel_chat.svg") __desc__ = _("List of server channels") class Sidepanel: def load(self, widgets, connection, lounge): self.connection = connection # deferred imports to not slow down PyChess starting up from pychess.widgets.ViewsPanel import ViewsPanel from pychess.widgets.InfoPanel import InfoPanel from pychess.widgets.ChannelsPanel import ChannelsPanel self.viewspanel = ViewsPanel(self.connection) self.channelspanel = ChannelsPanel(self.connection) self.adj = self.channelspanel.get_vadjustment() self.infopanel = InfoPanel(self.connection) self.chatbox = Gtk.Paned() __widget__ = self.chatbox self.chatbox.add1(self.channelspanel) notebook = Gtk.Notebook() notebook.append_page(self.viewspanel, Gtk.Label(_("Chat"))) notebook.append_page(self.infopanel, Gtk.Label(_("Info"))) self.chatbox.add2(notebook) self.panels = [self.viewspanel, self.channelspanel, self.infopanel] self.viewspanel.connect( "channel_content_Changed", self.channelspanel.channel_Highlight, id ) self.channelspanel.connect("conversationAdded", self.onConversationAdded) self.channelspanel.connect("conversationRemoved", self.onConversationRemoved) self.channelspanel.connect("conversationSelected", self.onConversationSelected) self.channelspanel.connect("focus_in_event", self.focus_in, self.adj) for panel in self.panels: panel.show_all() panel.start() self.chatbox.show_all() uistuff.keep(self.chatbox, "chat_paned_position") return __widget__ def onConversationAdded(self, panel, grp_id, text, grp_type): # deferred import to not slow down PyChess starting up from pychess.widgets.ChatView import ChatView chatView = ChatView() plus_channel = "+channel " + str(grp_id) self.connection.cm.connection.client.run_command(plus_channel) for panel in self.panels: panel.addItem(grp_id, text, grp_type, chatView) def onConversationRemoved(self, panel, grp_id): minus_channel = "-channel " + str(grp_id) self.connection.cm.connection.client.run_command(minus_channel) for panel in self.panels: panel.removeItem(grp_id) def onConversationSelected(self, panel, grp_id): for panel in self.panels: panel.selectItem(grp_id) def openChatWithPlayer(self, name): cm = self.connection.cm self.channelspanel.onPersonMessage(cm, name, "", False, "") def focus_in(widget, event, adj): alloc = widget.get_allocation() if alloc.y < adj.value or alloc.y > adj.value + adj.page_size: adj.set_value(min(alloc.y, adj.upper - adj.page_size)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/ConsolePanel.py0000644000175100001770000001730414614030313023420 0ustar00runnerdockerfrom time import strftime from gi.repository import GLib, Gtk, Gdk, GObject, Pango from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from pychess.widgets import insert_formatted from pychess.ic import FICS_COMMANDS, FICS_HELP __title__ = _("Console") __icon__ = addDataPrefix("glade/panel_terminal.svg") __desc__ = _("Command line interface to the chess server") class Sidepanel: def load(self, widgets, connection, lounge): self.connection = connection self.consoleView = ConsoleView(self.connection) self.consoleView.show_all() __widget__ = self.consoleView connection.com.connect("consoleMessage", self.onConsoleMessage) return __widget__ @staticmethod def filter_unprintable(s): return "".join([c for c in s if ord(c) > 31 or ord(c) == 9 or c == "\n"]) def scroll_to_bottom(self): tb_iter = self.consoleView.textbuffer.get_end_iter() self.consoleView.readView.scroll_to_iter(tb_iter, 0.00, True, 0.00, 1.00) def onConsoleMessage(self, com, lines, ini_lines=None): need_scroll = False if ini_lines is not None: for line in ini_lines: self.consoleView.addMessage(line, False) need_scroll = True for line in lines: line = self.filter_unprintable(line.line) if ( line and (not line.startswith("<")) and (not line.startswith("{Game")) and (not line.endswith("available for matches.")) and line[-12:-5] != "), Bug(" ): self.consoleView.addMessage(line, False) need_scroll = True if need_scroll: # scroll to the bottom but only if we are not scrolled up to read back adj = self.consoleView.sw.get_vadjustment() if adj.get_value() >= adj.get_upper() - adj.get_page_size() - 1e-12: GLib.idle_add(self.scroll_to_bottom) TYPE_COMMAND, TYPE_HELP, TYPE_USER = 0, 1, 2 class ConsoleView(Gtk.Box): __gsignals__ = { "messageAdded": (GObject.SignalFlags.RUN_FIRST, None, (str, str, object)), "messageTyped": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.connection = connection self.connection.players.connect("FICSPlayerEntered", self.on_player_entered) self.connection.players.connect("FICSPlayerExited", self.on_player_exited) # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 self.liststore = Gtk.ListStore(str, int) for command in FICS_COMMANDS: self.liststore.append([command, TYPE_COMMAND]) for command in FICS_HELP: self.liststore.append([command, TYPE_HELP]) completion = Gtk.EntryCompletion() completion.set_model(self.liststore) completion.set_text_column(0) completion.set_minimum_key_length(2) completion.set_popup_set_width(False) def match(completion, entrystr, iter, data): modelstr = completion.get_model()[iter][0].lower() modeltype = completion.get_model()[iter][1] parts = entrystr.split() if len(parts) == 1 and modeltype == TYPE_COMMAND: return modelstr.startswith(entrystr) elif len(parts) == 2: if parts[0] == "help": return modelstr.startswith(parts[1]) and modeltype == TYPE_HELP else: return ( parts[0] in FICS_COMMANDS and modelstr.startswith(parts[1].lower()) and modeltype == TYPE_USER ) completion.set_match_func(match, None) def on_match_selected(completion, treemodel, treeiter): modelstr = treemodel[treeiter][0] modeltype = treemodel[treeiter][1] entry = completion.get_entry() parts = entry.get_text().split() if len(parts) == 1 and modeltype == TYPE_COMMAND: entry.set_text(modelstr) entry.set_position(-1) return True elif len(parts) == 2: entry.set_text(f"{parts[0]} {modelstr}") entry.set_position(-1) return True completion.connect("match-selected", on_match_selected) self.entry = Gtk.Entry() self.entry.set_completion(completion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress) def on_player_entered(self, players, new_players): for player in new_players: self.liststore.append([player.name, TYPE_USER]) def on_player_exited(self, players, player): for row in self.liststore: if row[0] == player.name: self.liststore.remove(row.iter) break def addMessage(self, text, my): tag = "mytext" if my else "text" text_buffer = self.readView.get_buffer() tb_iter = text_buffer.get_end_iter() # Messages have linebreak before the text. This is opposite to log # messages if text_buffer.props.text: text_buffer.insert(tb_iter, "\n") time = strftime("%H:%M:%S") text_buffer.insert_with_tags_by_name(tb_iter, "(%s) " % time, tag) insert_formatted(self.readView, tb_iter, text, tag=tag) def onKeyPress(self, widget, event): if event.keyval in list(map(Gdk.keyval_from_name, ("Return", "KP_Enter"))): if not event.get_state() & Gdk.ModifierType.CONTROL_MASK: buffer = self.entry.get_buffer() if buffer.props.text.startswith("pas"): # don't log password changes self.connection.client.telnet.sensitive = True self.connection.client.run_command(buffer.props.text, show_reply=True) self.emit("messageTyped", buffer.props.text) self.addMessage(buffer.props.text, True) self.history.append(buffer.props.text) buffer.props.text = "" self.pos = len(self.history) return True elif event.keyval == Gdk.keyval_from_name("Up"): if self.pos > 0: buffer = self.entry.get_buffer() self.pos -= 1 buffer.props.text = self.history[self.pos] widget.grab_focus() return True elif event.keyval == Gdk.keyval_from_name("Down"): buffer = self.entry.get_buffer() if self.pos == len(self.history) - 1: self.pos += 1 buffer.props.text = "" elif self.pos < len(self.history): self.pos += 1 buffer.props.text = self.history[self.pos] widget.grab_focus() return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/FicsHome.py0000644000175100001770000002261314614030313022532 0ustar00runnerdockerimport sys from gi.repository import Gtk from pychess.ic import GAME_TYPES_BY_RATING_TYPE, TYPE_WILD, WildGameType from pychess.System.ping import Pinger from pychess.System.Log import log from pychess.widgets import mainwindow class UserInfoSection: def __init__(self, widgets, connection, host, lounge): self.widgets = widgets self.connection = connection self.host = host self.lounge = lounge self.pinger = None self.ping_label = None self.dock = self.widgets["fingerTableDock"] self.connection.fm.connect("fingeringFinished", self.onFinger) self.connection.fm.finger(self.connection.getUsername()) self.connection.bm.connect( "curGameEnded", lambda *args: self.connection.fm.finger(self.connection.getUsername()), ) self.widgets["usernameLabel"].set_markup( "%s" % self.connection.getUsername() ) def _del(self): if self.pinger is not None: self.pinger.stop() def onFinger(self, fm, finger): # print(finger.getName(), self.connection.getUsername()) my_finger = finger.getName().lower() == self.connection.getUsername().lower() if my_finger: self.widgets["usernameLabel"].set_markup("%s" % finger.getName()) rows = 1 if finger.getRatingsLen() > 0: rows += finger.getRatingsLen() + 1 if finger.getEmail(): rows += 1 if finger.getCreated(): rows += 1 cols = 6 if my_finger else 9 table = Gtk.Table(cols, rows) table.props.column_spacing = 12 table.props.row_spacing = 4 def label(value, xalign=0, is_error=False): if is_error: label = Gtk.Label() label.set_markup( '' + value + "" ) else: label = Gtk.Label(label=value) label.props.xalign = xalign return label row = 0 ELO, DEVIATION, WINS, LOSSES, DRAWS, TOTAL, BESTELO, BESTTIME = range(8) if finger.getRatingsLen() > 0: if my_finger: headers = (_("Rating"), _("Win"), _("Draw"), _("Loss")) else: headers = ( _("Rating"), _("Need") if self.connection.ICC else _("RD"), _("Win"), _("Draw"), _("Loss"), _("Best"), ) for i, item in enumerate(headers): table.attach(label(item, xalign=1), i + 1, i + 2, 0, 1) row += 1 for rating_type, rating in finger.getRatings().items(): col = 0 ratinglabel = label( GAME_TYPES_BY_RATING_TYPE[rating_type].display_text + ":" ) table.attach(ratinglabel, col, col + 1, row, row + 1) col += 1 if rating_type is TYPE_WILD: ratinglabel.set_tooltip_text( _( 'On FICS, your "Wild" rating encompasses all of the \ following variants at all time controls:\n' ) + ", ".join( [gt.display_text for gt in WildGameType.instances()] ) ) table.attach(label(rating[ELO], xalign=1), col, col + 1, row, row + 1) col += 1 if not my_finger: table.attach( label(rating[DEVIATION], xalign=1), col, col + 1, row, row + 1 ) col += 1 table.attach(label(rating[WINS], xalign=1), col, col + 1, row, row + 1) col += 1 table.attach(label(rating[DRAWS], xalign=1), col, col + 1, row, row + 1) col += 1 table.attach( label(rating[LOSSES], xalign=1), col, col + 1, row, row + 1 ) col += 1 if not my_finger and len(rating) > BESTELO: best = rating[BESTELO] if int(rating[BESTELO]) > 0 else "" table.attach(label(best, xalign=1), col, col + 1, row, row + 1) col += 1 table.attach( label(rating[BESTTIME], xalign=1), col, col + 1, row, row + 1 ) col += 1 row += 1 table.attach(Gtk.HSeparator(), 0, cols, row, row + 1, ypadding=2) row += 1 if finger.getSanctions() != "": table.attach(label(_("Sanctions") + ":", is_error=True), 0, 1, row, row + 1) table.attach(label(finger.getSanctions()), 1, cols, row, row + 1) row += 1 if finger.getEmail(): table.attach(label(_("Email") + ":"), 0, 1, row, row + 1) table.attach(label(finger.getEmail()), 1, cols, row, row + 1) row += 1 player = self.connection.players.get(finger.getName()) if not self.connection.ICC and not player.isGuest(): table.attach(label(_("Games") + ":"), 0, 1, row, row + 1) llabel = Gtk.Label() llabel.props.xalign = 0 link = ( "http://ficsgames.org/cgi-bin/search.cgi?player=%s" % finger.getName() ) llabel.set_markup(f'{link}') table.attach(llabel, 1, cols, row, row + 1) row += 1 if finger.getCreated(): table.attach(label(_("Spent") + ":"), 0, 1, row, row + 1) string = "{} {}".format(finger.getTotalTimeOnline(), _("online in total")) table.attach(label(string), 1, cols, row, row + 1) row += 1 # TODO: ping causes random crashes on Windows if my_finger and sys.platform != "win32": table.attach(label(_("Ping") + ":"), 0, 1, row, row + 1) if self.ping_label: if self.dock.get_children(): self.dock.get_children()[0].remove(self.ping_label) else: if self.connection.ICC: self.ping_label = Gtk.Label(label="") # TODO else: self.ping_label = Gtk.Label(label=_("Connecting") + "...") self.ping_label.props.xalign = 0 def callback(pinger, pingtime): log.debug( f"'{str(self.pinger)}' '{str(pingtime)}'", extra={"task": (self.connection.username, "UIS.oF.callback")}, ) if isinstance(pingtime, str): self.ping_label.set_text(pingtime) elif pingtime == -1: self.ping_label.set_text(_("Unknown")) else: self.ping_label.set_text("%.0f ms" % pingtime) if (not self.pinger) and (not self.connection.ICC): self.pinger = Pinger(self.host) self.pinger.start() self.pinger.connect("received", callback) self.pinger.connect("error", callback) table.attach(self.ping_label, 1, cols, row, row + 1) row += 1 if not my_finger: if self.lounge.finger_sent: dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK ) dialog.set_title(_("Finger")) dialog.set_markup("%s" % finger.getName()) table.show_all() dialog.get_message_area().add(table) dialog.run() dialog.destroy() self.lounge.finger_sent = False return if not self.connection.isRegistred(): vbox = Gtk.VBox() table.attach(vbox, 0, cols, row, row + 1) label0 = Gtk.Label() label0.props.xalign = 0 label0.props.wrap = True label0.props.width_request = 300 if self.connection.ICC: reg = "https://store.chessclub.com/customer/account/create/" txt = _( "You are currently logged in as a guest but " + "there is a completely free trial for 30 days, " + "and beyond that, there is no charge and " + "the account would remain active with the ability to play games. " + "(With some restrictions. For example, no premium videos, " + "some limitations in channels, and so on.) " + "To register an account, go to " ) else: reg = "http://www.freechess.org/Register/index.html" txt = _( "You are currently logged in as a guest. " + "A guest can't play rated games and therefore isn't " + "able to play as many of the types of matches offered as " + "a registered user. To register an account, go to " ) label0.set_markup(f'{txt} {reg}.') vbox.add(label0) if self.dock.get_children(): self.dock.remove(self.dock.get_children()[0]) self.dock.add(table) self.dock.show_all() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/GameListPanel.py0000644000175100001770000002636314614030313023530 0ustar00runnerdockerfrom gi.repository import Gtk, GLib, GdkPixbuf from pychess.ic.FICSObjects import FICSGame, get_player_tooltip_text from pychess.ic import ( TYPE_BLITZ, TYPE_LIGHTNING, TYPE_STANDARD, RATING_TYPES, TYPE_BULLET, TYPE_ONE_MINUTE, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE, ) from pychess.Utils.IconLoader import load_icon, get_pixbuf from pychess.System.Log import log from pychess.System import conf, uistuff from pychess.System.prefix import addDataPrefix from pychess.perspectives.fics.ParrentListSection import ( ParrentListSection, cmp, SEPARATOR, FOLLOW, FINGER, ARCHIVED, OBSERVE, ) __title__ = _("Game List") __icon__ = addDataPrefix("glade/panel_games.svg") __desc__ = _("List of ongoing games") class Sidepanel(ParrentListSection): def load(self, widgets, connection, lounge): self.widgets = widgets self.connection = connection self.lounge = lounge __widget__ = lounge.games_list self.games = {} self.recpix = load_icon(16, "media-record") self.clearpix = get_pixbuf("glade/board.png") self.tv = self.widgets["gametreeview"] self.store = Gtk.ListStore( FICSGame, GdkPixbuf.Pixbuf, str, int, str, int, str, str ) self.game_filter = self.store.filter_new() self.game_filter.set_visible_func(self.game_filter_func) self.filter_toggles = {} self.filter_buttons = ( "standard_toggle", "blitz_toggle", "lightning_toggle", "variant_toggle", ) for widget in self.filter_buttons: uistuff.keep(self.widgets[widget], widget) self.widgets[widget].connect("toggled", self.on_filter_button_toggled) initial = conf.get(widget) self.filter_toggles[widget] = initial self.widgets[widget].set_active(initial) self.model = self.game_filter.sort_new_with_model() self.tv.set_model(self.model) self.tv.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.addColumns( self.tv, "FICSGame", "", _("White"), _("Rating"), _("Black"), _("Rating"), _("Type"), _("Rated"), hide=[0], pix=[1], ) self.tv.get_model().set_sort_func(0, self.pixCompareFunction, 1) for i in range(1, 7): self.tv.get_model().set_sort_func(i, self.compareFunction, i) self.prev_sort_column_id = [] self.model.connect("sort-column-changed", self.on_sort_column_change) self.tv.set_has_tooltip(True) self.tv.connect("query-tooltip", self.on_query_tooltip) self.selection = self.tv.get_selection() self.selection.connect("changed", self.onSelectionChanged) self.onSelectionChanged(self.selection) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc, None) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass def searchCallback(model, column, key, sel_iter, user_data): if model.get_value(sel_iter, 2).lower().startswith(key) or model.get_value( sel_iter, 4 ).lower().startswith(key): return False return True self.tv.set_search_equal_func(searchCallback, None) self.connection.games.connect("FICSGameCreated", self.onGameAdd) self.connection.games.connect("FICSGameEnded", self.onGameRemove) self.widgets["observeButton"].connect("clicked", self.on_observe) self.tv.connect("row-activated", self.on_observe) self.connection.bm.connect("obsGameCreated", self.onGameObserved) self.connection.bm.connect("obsGameUnobserved", self.onGameUnobserved) self.tv.connect("button-press-event", self.button_press_event) self.createLocalMenu((OBSERVE, FOLLOW, SEPARATOR, FINGER, ARCHIVED)) return __widget__ def game_filter_func(self, model, iter, data): game = model[iter][0] is_standard = game.game_type.rating_type in ( TYPE_STANDARD, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE, ) is_blitz = game.game_type.rating_type in ( TYPE_BLITZ, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE, ) is_lightning = game.game_type.rating_type in ( TYPE_LIGHTNING, TYPE_BULLET, TYPE_ONE_MINUTE, ) is_variant = game.game_type.rating_type in RATING_TYPES[9:] return ( (self.filter_toggles["standard_toggle"] and is_standard) or (self.filter_toggles["blitz_toggle"] and is_blitz) or (self.filter_toggles["lightning_toggle"] and is_lightning) or (self.filter_toggles["variant_toggle"] and is_variant) ) def on_filter_button_toggled(self, widget): for button in self.filter_buttons: self.filter_toggles[button] = self.widgets[button].get_active() self.game_filter.refilter() # Multi-column sort based on TreeModelSortUtil from # https://github.com/metomi/rose/blob/master/lib/python/rose/gtk/util.py def on_sort_column_change(self, model): """Store previous sorting information for multi-column sorts.""" id, order = self.tv.get_model().get_sort_column_id() if id is None and order is None: return False if self.prev_sort_column_id and self.prev_sort_column_id[0][0] == id: self.prev_sort_column_id.pop(0) self.prev_sort_column_id.insert(0, (id, order)) if len(self.prev_sort_column_id) > 2: self.prev_sort_column_id.pop() def compareFunction(self, model, iter0, iter1, column): """Multi-column sort.""" val0 = model.get_value(iter0, column) val1 = model.get_value(iter1, column) rval = cmp(val0, val1) # If rval is 1 or -1, no need for a multi-column sort. if rval == 0: this_order = self.tv.get_model().get_sort_column_id()[1] cmp_factor = 1 if this_order == Gtk.SortType.DESCENDING: # We need to de-invert the sort order for multi sorting. cmp_factor = -1 i = 0 while rval == 0 and i < len(self.prev_sort_column_id): next_id, next_order = self.prev_sort_column_id[i] if next_id == column: i += 1 continue next_cmp_factor = cmp_factor * 1 if next_order == Gtk.SortType.DESCENDING: # Set the correct order for multi sorting. next_cmp_factor = cmp_factor * -1 val0 = model.get_value(iter0, next_id) val1 = model.get_value(iter1, next_id) rval = next_cmp_factor * cmp(val0, val1) i += 1 return rval def on_query_tooltip(self, widget, x, y, keyboard_tip, tooltip): if not widget.get_tooltip_context(x, y, keyboard_tip): return False bool, wx, wy, model, path, sel_iter = widget.get_tooltip_context( x, y, keyboard_tip ) bin_x, bin_y = widget.convert_widget_to_bin_window_coords(x, y) result = widget.get_path_at_pos(bin_x, bin_y) if result is not None: path, column, cell_x, cell_y = result for player, column_number in ( (self.model[path][0].wplayer, 1), (self.model[path][0].bplayer, 3), ): if column is self.tv.get_column(column_number): tooltip.set_text(get_player_tooltip_text(player, show_status=False)) widget.set_tooltip_cell(tooltip, path, None, None) return True return False def onSelectionChanged(self, selection): model, paths = selection.get_selected_rows() a_selected_game_is_observable = False for path in paths: rowiter = model.get_iter(path) game = model.get_value(rowiter, 0) if not game.private and game.supported: a_selected_game_is_observable = True break self.widgets["observeButton"].set_sensitive(a_selected_game_is_observable) def _update_gamesrunning_label(self): count = len(self.games) self.widgets["gamesRunningLabel"].set_text(_("Games running: %d") % count) def onGameAdd(self, games, new_games): game_store = {} for game in new_games: game_store[game] = ( game, self.clearpix, game.wplayer.name + game.wplayer.display_titles(), game.wplayer.getRatingForCurrentGame(), game.bplayer.name + game.bplayer.display_titles(), game.bplayer.getRatingForCurrentGame(), game.display_text, game.display_rated, ) def do_onGameAdd(games, new_games, game_store): for game in new_games: # game removed before we finish processing "games /bslwBzSLx" if game not in game_store: continue # log.debug("%s" % game, # extra={"task": (self.connection.username, "GTS.onGameAdd")}) ti = self.store.append(game_store[game]) self.games[game] = {"ti": ti} self.games[game]["private_cid"] = game.connect( "notify::private", self.private_changed ) self._update_gamesrunning_label() GLib.idle_add( do_onGameAdd, games, new_games, game_store, priority=GLib.PRIORITY_LOW ) def private_changed(self, game, prop): try: self.store.set(self.games[game]["ti"], 6, game.display_text) except KeyError: pass self.onSelectionChanged(self.tv.get_selection()) return False def onGameRemove(self, games, game): def do_onGameRemove(games, game): log.debug( "%s" % game, extra={"task": (self.connection.username, "GTS.onGameRemove")}, ) if game not in self.games: return if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) if game.handler_is_connected(self.games[game]["private_cid"]): game.disconnect(self.games[game]["private_cid"]) del self.games[game] self._update_gamesrunning_label() GLib.idle_add(do_onGameRemove, games, game, priority=GLib.PRIORITY_LOW) def onGameObserved(self, bm, game): if game in self.games: treeiter = self.games[game]["ti"] self.store.set_value(treeiter, 1, self.recpix) def onGameUnobserved(self, bm, game): if game in self.games: treeiter = self.games[game]["ti"] self.store.set_value(treeiter, 1, self.clearpix) def getSelectedPlayer(self): model = self.tv.get_model() path, col = self.tv.get_cursor() col_index = self.tv.get_columns().index(col) game = model.get_value(model.get_iter(path), 0) return game.bplayer if col_index >= 3 else game.wplayer ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/NewsPanel.py0000644000175100001770000000312314614030313022724 0ustar00runnerdockerfrom gi.repository import Gtk, Pango from pychess.System.prefix import addDataPrefix from pychess.widgets import insert_formatted __title__ = _("News") __icon__ = addDataPrefix("glade/panel_annotation.svg") __desc__ = _("List of server news") class Sidepanel: def load(self, widgets, connection, lounge): self.widgets = widgets __widget__ = lounge.news_list connection.nm.connect("readNews", self.onNewsItem) return __widget__ def onNewsItem(self, nm, news): weekday, month, day, title, details = news dtitle = f"{weekday}, {month} {day}: {title}" label = Gtk.Label(label=dtitle) label.props.width_request = 300 label.props.xalign = 0 label.set_ellipsize(Pango.EllipsizeMode.END) expander = Gtk.Expander() expander.set_label_widget(label) expander.set_tooltip_text(title) textview = Gtk.TextView() textview.set_wrap_mode(Gtk.WrapMode.WORD) textview.set_editable(False) textview.set_cursor_visible(False) textview.props.pixels_above_lines = 4 textview.props.pixels_below_lines = 4 textview.props.right_margin = 2 textview.props.left_margin = 6 tb_iter = textview.get_buffer().get_end_iter() insert_formatted(textview, tb_iter, details) alignment = Gtk.Alignment() alignment.set_padding(3, 6, 12, 0) alignment.props.xscale = 1 alignment.add(textview) expander.add(alignment) expander.show_all() self.widgets["newsVBox"].pack_start(expander, False, False, 0) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/ParrentListSection.py0000644000175100001770000001350614614030313024632 0ustar00runnerdockerfrom gi.repository import Gtk, GdkPixbuf from pychess.ic.FICSObjects import FICSChallenge SEPARATOR, ACCEPT, ASSESS, OBSERVE, FOLLOW, CHAT, CHALLENGE, FINGER, ARCHIVED = range(9) def cmp(x, y): return (x > y) - (x < y) class ParrentListSection: """Parrent for sections mainly consisting of a large treeview""" def button_press_event(self, treeview, event): if event.button == 3: # right click pathinfo = treeview.get_path_at_pos(int(event.x), int(event.y)) if pathinfo is not None: path, col = pathinfo[0], pathinfo[1] treeview.grab_focus() treeview.set_cursor(path, col, 0) self.menu.show_all() self.menu.popup( None, None, None, None, event.button, Gtk.get_current_event_time() ) return True return False def createLocalMenu(self, items): ITEM_MAP = { ACCEPT: (_("Accept"), self.on_accept), ASSESS: (_("Assess"), self.on_assess), OBSERVE: (_("Observe"), self.on_observe), FOLLOW: (_("Follow"), self.on_follow), CHAT: (_("Chat"), self.on_chat), CHALLENGE: (_("Challenge"), self.on_challenge), FINGER: (_("Finger"), self.on_finger), ARCHIVED: (_("Archived"), self.on_archived), } self.menu = Gtk.Menu() for item in items: if item == SEPARATOR: menu_item = Gtk.SeparatorMenuItem() else: label, callback = ITEM_MAP[item] menu_item = Gtk.MenuItem(label) menu_item.connect("activate", callback) self.menu.append(menu_item) self.menu.attach_to_widget(self.tv, None) def addColumns(self, treeview, *columns, **keyargs): if "hide" in keyargs: hide = keyargs["hide"] else: hide = [] if "pix" in keyargs: pix = keyargs["pix"] else: pix = [] for i, name in enumerate(columns): if i in hide: continue if i in pix: crp = Gtk.CellRendererPixbuf() crp.props.xalign = 0.5 column = Gtk.TreeViewColumn(name, crp, pixbuf=i) else: crt = Gtk.CellRendererText() column = Gtk.TreeViewColumn(name, crt, text=i) column.set_resizable(True) column.set_sort_column_id(i) # prevent columns appear choppy column.set_sizing(Gtk.TreeViewColumnSizing.GROW_ONLY) column.set_reorderable(True) treeview.append_column(column) def lowLeftSearchPosFunc(self, tv, search_dialog, user_data): alloc = tv.get_allocation() window = tv.get_toplevel().get_window() x_loc = alloc.x + window.get_position()[0] y_loc = alloc.y + window.get_position()[1] + alloc.height search_dialog.move(x_loc, y_loc) search_dialog.show_all() def pixCompareFunction(self, treemodel, iter0, iter1, column): pix0 = treemodel.get_value(iter0, column) pix1 = treemodel.get_value(iter1, column) if isinstance(pix0, GdkPixbuf.Pixbuf) and isinstance(pix1, GdkPixbuf.Pixbuf): return cmp(pix0.get_pixels(), pix1.get_pixels()) return cmp(pix0, pix1) def timeCompareFunction(self, treemodel, iter0, iter1, column): (minute0, minute1) = ( treemodel.get_value(iter0, 8), treemodel.get_value(iter1, 8), ) return cmp(minute0, minute1) def on_accept(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return sought = model.get_value(sel_iter, 0) if isinstance(sought, FICSChallenge): self.connection.om.acceptIndex(sought.index) else: self.connection.om.playIndex(sought.index) try: message = self.messages[hash(sought)] except KeyError: pass else: message.dismiss() del self.messages[hash(sought)] def on_assess(self, widget): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return sought = model.get_value(sel_iter, 0) player1 = self.connection.username player2 = sought.player.name game_type = sought.game_type.short_fics_name self.connection.glm.assess(player1, player2, game_type) self.assess_sent = True def on_observe(self, widget, *args): player = self.getSelectedPlayer() if player is not None: if player.game is not None: self.connection.bm.observe(player.game) else: self.connection.bm.observe(None, player=player) def on_follow(self, widget): player = self.getSelectedPlayer() if player is not None: self.connection.bm.follow(player) def on_chat(self, button): player = self.getSelectedPlayer() if player is None: return self.lounge.chat.openChatWithPlayer(player.name) # TODO: isadmin og type def on_challenge(self, widget): player = self.getSelectedPlayer() if player is not None: self.lounge.seek_challenge.onChallengeButtonClicked(widget, player) def on_finger(self, widget): player = self.getSelectedPlayer() if player is not None: self.connection.fm.finger(player.name) self.lounge.finger_sent = True def on_archived(self, widget): player = self.getSelectedPlayer() if player is not None: self.connection.adm.queryAdjournments(player.name) self.connection.adm.queryHistory(player.name) self.connection.adm.queryJournal(player.name) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/PlayerListPanel.py0000644000175100001770000002602414614030313024105 0ustar00runnerdockerfrom gi.repository import Gtk, GLib, GdkPixbuf from pychess.ic.FICSObjects import FICSPlayer, get_player_tooltip_text from pychess.ic import TYPE_BLITZ, TYPE_LIGHTNING, TYPE_STANDARD, IC_STATUS_PLAYING from pychess.System.Log import log from pychess.System import conf, uistuff from pychess.System.prefix import addDataPrefix from pychess.perspectives.fics.ParrentListSection import ( ParrentListSection, SEPARATOR, FOLLOW, FINGER, ARCHIVED, OBSERVE, CHAT, CHALLENGE, ) __title__ = _("Player List") __icon__ = addDataPrefix("glade/panel_players.svg") __desc__ = _("List of players") class Sidepanel(ParrentListSection): def load(self, widgets, connection, lounge): self.widgets = widgets self.connection = connection lounge.players_tab = self self.lounge = lounge __widget__ = lounge.players_list self.players = {} self.columns = {TYPE_BLITZ: 3, TYPE_STANDARD: 4, TYPE_LIGHTNING: 5} self.tv = widgets["playertreeview"] self.store = Gtk.ListStore( FICSPlayer, GdkPixbuf.Pixbuf, str, int, int, int, str, str ) self.player_filter = self.store.filter_new() self.player_filter.set_visible_func(self.player_filter_func) self.filter_toggles = {} self.filter_buttons = ( "registered_toggle", "guest_toggle", "computer_toggle", "titled_toggle", ) for widget in self.filter_buttons: uistuff.keep(self.widgets[widget], widget) self.widgets[widget].connect("toggled", self.on_filter_button_toggled) initial = conf.get(widget) self.filter_toggles[widget] = initial self.widgets[widget].set_active(initial) self.model = self.player_filter.sort_new_with_model() self.tv.set_model(self.model) self.addColumns( self.tv, "FICSPlayer", "", _("Name"), _("Blitz"), _("Standard"), _("Lightning"), _("Status"), "tooltip", hide=[0, 7], pix=[1], ) self.tv.set_tooltip_column( 7, ) self.tv.get_model().set_sort_func(0, self.pixCompareFunction, 1) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc, None) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass connection.players.connect("FICSPlayerEntered", self.onPlayerAdded) connection.players.connect("FICSPlayerExited", self.onPlayerRemoved) widgets["private_chat_button"].connect("clicked", self.on_chat) widgets["private_chat_button"].set_sensitive(False) widgets["observe_button"].connect("clicked", self.on_observe) widgets["observe_button"].set_sensitive(False) self.tv.get_selection().connect_after("changed", self.onSelectionChanged) self.onSelectionChanged(None) self.tv.connect("button-press-event", self.button_press_event) self.createLocalMenu( (CHALLENGE, CHAT, OBSERVE, FOLLOW, SEPARATOR, FINGER, ARCHIVED) ) return __widget__ def player_filter_func(self, model, iter, data): player = model[iter][0] is_titled = player.isTitled() is_computer = player.isComputer() is_registered = (not is_titled) and (not is_computer) and (not player.isGuest()) is_guest = (not is_titled) and (not is_computer) and (player.isGuest()) return ( (self.filter_toggles["computer_toggle"] and is_computer) or (self.filter_toggles["registered_toggle"] and is_registered) or (self.filter_toggles["guest_toggle"] and is_guest) or (self.filter_toggles["titled_toggle"] and is_titled) ) def on_filter_button_toggled(self, widget): for button in self.filter_buttons: self.filter_toggles[button] = self.widgets[button].get_active() self.player_filter.refilter() def onPlayerAdded(self, players, new_players): # Let the hard work to be done in the helper connection thread np = {} for player in new_players: np[player] = ( player, player.getIcon(), player.name + player.display_titles(), player.blitz, player.standard, player.lightning, player.display_status, get_player_tooltip_text(player), ) def do_onPlayerAdded(players, new_players, np): for player in new_players: # log.debug("%s" % player, # extra={"task": (self.connection.username, # "PTS.onPlayerAdded")}) if player in self.players: # log.warning("%s already in self" % player, # extra={"task": (self.connection.username, # "PTS.onPlayerAdded")}) continue # player can leave before we finish processing "who IbslwBzSLx" if player not in np: continue self.players[player] = {} self.players[player]["ti"] = self.store.append(np[player]) self.players[player]["status"] = player.connect( "notify::status", self.status_changed ) self.players[player]["game"] = player.connect( "notify::game", self.status_changed ) self.players[player]["titles"] = player.connect( "notify::titles", self.titles_changed ) if player.game: self.players[player]["private"] = player.game.connect( "notify::private", self.private_changed, player ) self.players[player]["ratings"] = player.connect( "ratings_changed", self.elo_changed, player ) count = len(self.players) self.widgets["playersOnlineLabel"].set_text(_("Players: %d") % count) return False GLib.idle_add( do_onPlayerAdded, players, new_players, np, priority=GLib.PRIORITY_LOW ) def onPlayerRemoved(self, players, player): def do_onPlayerRemoved(players, player): log.debug( "%s" % player, extra={"task": (self.connection.username, "PTS.onPlayerRemoved")}, ) if player not in self.players: return if self.store.iter_is_valid(self.players[player]["ti"]): self.store.remove(self.players[player]["ti"]) for key in ("status", "game", "titles"): if player.handler_is_connected(self.players[player][key]): player.disconnect(self.players[player][key]) if ( player.game and "private" in self.players[player] and player.game.handler_is_connected(self.players[player]["private"]) ): player.game.disconnect(self.players[player]["private"]) if player.handler_is_connected(self.players[player]["ratings"]): player.disconnect(self.players[player]["ratings"]) del self.players[player] count = len(self.players) self.widgets["playersOnlineLabel"].set_text(_("Players: %d") % count) GLib.idle_add(do_onPlayerRemoved, players, player, priority=GLib.PRIORITY_LOW) def status_changed(self, player, prop): log.debug( "%s" % player, extra={"task": (self.connection.username, "PTS.status_changed")}, ) if player not in self.players: return try: self.store.set(self.players[player]["ti"], 6, player.display_status) self.store.set( self.players[player]["ti"], 7, get_player_tooltip_text(player) ) except KeyError: pass if ( player.status == IC_STATUS_PLAYING and player.game and "private" not in self.players[player] ): self.players[player]["private"] = player.game.connect( "notify::private", self.private_changed, player ) elif player.status != IC_STATUS_PLAYING and "private" in self.players[player]: game = player.game if game and game.handler_is_connected(self.players[player]["private"]): game.disconnect(self.players[player]["private"]) del self.players[player]["private"] if player == self.getSelectedPlayer(): self.onSelectionChanged(None) return False def titles_changed(self, player, prop): log.debug( "%s" % player, extra={"task": (self.connection.username, "PTS.titles_changed")}, ) try: self.store.set(self.players[player]["ti"], 1, player.getIcon()) self.store.set( self.players[player]["ti"], 2, player.name + player.display_titles() ) self.store.set( self.players[player]["ti"], 7, get_player_tooltip_text(player) ) except KeyError: pass return False def private_changed(self, game, prop, player): log.debug( "%s" % player, extra={"task": (self.connection.username, "PTS.private_changed")}, ) self.status_changed(player, prop) self.onSelectionChanged(self.tv.get_selection()) return False def elo_changed(self, rating, prop, rating_type, player): log.debug( f"{rating} {player}", extra={"task": (self.connection.username, "PTS_changed")}, ) try: self.store.set(self.players[player]["ti"], 1, player.getIcon()) self.store.set( self.players[player]["ti"], 7, get_player_tooltip_text(player) ) self.store.set( self.players[player]["ti"], self.columns[rating_type], rating ) except KeyError: pass return False def getSelectedPlayer(self): model, sel_iter = self.widgets["playertreeview"].get_selection().get_selected() if sel_iter: return model.get_value(sel_iter, 0) def onSelectionChanged(self, selection): player = self.getSelectedPlayer() user_name = self.connection.getUsername() self.widgets["private_chat_button"].set_sensitive(player is not None) self.widgets["observe_button"].set_sensitive( player is not None and player.isObservable() and ( player.game is None or user_name not in (player.game.wplayer.name, player.game.bplayer.name) ) ) self.widgets["challengeButton"].set_sensitive( player is not None and player.isAvailableForGame() and player.name != user_name ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/SeekChallenge.py0000644000175100001770000010275214614030313023532 0ustar00runnerdockerimport sys from operator import attrgetter from itertools import groupby from gi.repository import Gtk from pychess.Utils.const import ( WHITE, BLACK, RANDOMCHESS, FISCHERRANDOMCHESS, LOSERSCHESS, UNSUPPORTED, VARIANTS_SHUFFLE, VARIANTS_OTHER, VARIANTS_OTHER_NONSTANDARD, ) from pychess.ic import ( GAME_TYPES, VARIANT_GAME_TYPES, TYPE_BLITZ, TYPE_LIGHTNING, TYPE_STANDARD, VariantGameType, time_control_to_gametype, ) from pychess.ic.FICSObjects import FICSPlayer, get_rating_range_display_text from pychess.System import conf, uistuff from pychess.System.prefix import addDataPrefix from pychess.widgets import mainwindow from pychess.widgets.ChainVBox import ChainVBox from pychess.Variants import variants RATING_SLIDER_STEP = 25 class SeekChallengeSection: seekEditorWidgets = ( "untimedCheck", "minutesSpin", "gainSpin", "strengthCheck", "chainAlignment", "ratingCenterSlider", "toleranceSlider", "toleranceHBox", "nocolorRadio", "whitecolorRadio", "blackcolorRadio", # variantCombo has to come before other variant widgets so that # when the widget is loaded, variantRadio isn't selected by the callback, # overwriting the user's saved value for the variant radio buttons "variantCombo", "noVariantRadio", "variantRadio", "ratedGameCheck", "manualAcceptCheck", ) seekEditorWidgetDefaults = { "untimedCheck": [False, False, False], "minutesSpin": [15, 10, 2], "gainSpin": [10, 0, 12], "strengthCheck": [True, True, True], "chainAlignment": [True, True, True], "ratingCenterSlider": [40, 40, 40], "toleranceSlider": [8, 8, 8], "toleranceHBox": [False, False, False], "variantCombo": [RANDOMCHESS, FISCHERRANDOMCHESS, LOSERSCHESS], "noVariantRadio": [True, True, True], "variantRadio": [False, False, False], "nocolorRadio": [True, True, True], "whitecolorRadio": [False, False, False], "blackcolorRadio": [False, False, False], "ratedGameCheck": [False, False, False], "manualAcceptCheck": [False, False, False], } seekEditorWidgetGettersSetters = {} def __init__(self, lounge): self.lounge = lounge self.widgets = lounge.widgets self.connection = lounge.connection self.widgets["editSeekDialog"].set_transient_for(mainwindow()) self.widgets["challengeDialog"].set_transient_for(mainwindow()) self.finger = None conf.set("numberOfFingers", 0) self.connection.fm.connect("fingeringFinished", self.onFinger) self.connection.fm.finger(self.connection.getUsername()) self.widgets["untimedCheck"].connect("toggled", self.onUntimedCheckToggled) self.widgets["minutesSpin"].connect("value-changed", self.onTimeSpinChanged) self.widgets["gainSpin"].connect("value-changed", self.onTimeSpinChanged) self.onTimeSpinChanged(self.widgets["minutesSpin"]) self.widgets["nocolorRadio"].connect("toggled", self.onColorRadioChanged) self.widgets["whitecolorRadio"].connect("toggled", self.onColorRadioChanged) self.widgets["blackcolorRadio"].connect("toggled", self.onColorRadioChanged) self.onColorRadioChanged(self.widgets["nocolorRadio"]) self.widgets["noVariantRadio"].connect("toggled", self.onVariantRadioChanged) self.widgets["variantRadio"].connect("toggled", self.onVariantRadioChanged) variantcombo = self.widgets["variantCombo"] variantcombo.set_name("variantcombo") variantComboGetter, variantComboSetter = self.__initVariantCombo(variantcombo) self.seekEditorWidgetGettersSetters["variantCombo"] = ( variantComboGetter, variantComboSetter, ) self.widgets["variantCombo"].connect("changed", self.onVariantComboChanged) self.widgets["editSeekDialog"].connect("delete_event", lambda *a: True) # self.widgets["challengeDialog"].connect("delete_event", lambda *a: True) self.widgets["strengthCheck"].connect("toggled", self.onStrengthCheckToggled) self.onStrengthCheckToggled(self.widgets["strengthCheck"]) self.widgets["ratingCenterSlider"].connect( "value-changed", self.onRatingCenterSliderChanged ) self.onRatingCenterSliderChanged(self.widgets["ratingCenterSlider"]) self.widgets["toleranceSlider"].connect( "value-changed", self.onToleranceSliderChanged ) self.onToleranceSliderChanged(self.widgets["toleranceSlider"]) self.widgets["toleranceButton"].connect( "clicked", self.onToleranceButtonClicked ) self.widgets["toleranceButton"].connect( "activate-link", lambda link_button: True ) def intGetter(widget): return int(widget.get_value()) self.seekEditorWidgetGettersSetters["minutesSpin"] = (intGetter, None) self.seekEditorWidgetGettersSetters["gainSpin"] = (intGetter, None) self.seekEditorWidgetGettersSetters["ratingCenterSlider"] = (intGetter, None) self.seekEditorWidgetGettersSetters["toleranceSlider"] = (intGetter, None) def toleranceHBoxGetter(widget): return self.widgets["toleranceHBox"].get_property("visible") def toleranceHBoxSetter(widget, visible): assert isinstance(visible, bool) if visible: self.widgets["toleranceHBox"].show() else: self.widgets["toleranceHBox"].hide() self.seekEditorWidgetGettersSetters["toleranceHBox"] = ( toleranceHBoxGetter, toleranceHBoxSetter, ) self.chainbox = ChainVBox() self.widgets["chainAlignment"].add(self.chainbox) def chainboxGetter(widget): return self.chainbox.active def chainboxSetter(widget, is_active): self.chainbox.active = is_active self.seekEditorWidgetGettersSetters["chainAlignment"] = ( chainboxGetter, chainboxSetter, ) self.challengee = None self.in_challenge_mode = False self.seeknumber = 1 self.widgets["seekButton"].connect("clicked", self.onSeekButtonClicked) self.widgets["seekAllButton"].connect("clicked", self.onSeekAllButtonClicked) self.widgets["challengeButton"].connect( "clicked", self.onChallengeButtonClicked ) self.widgets["challengeDialog"].connect( "delete-event", self.onChallengeDialogResponse ) self.widgets["challengeDialog"].connect( "response", self.onChallengeDialogResponse ) self.widgets["editSeekDialog"].connect( "response", self.onEditSeekDialogResponse ) for widget in ( "seek1Radio", "seek2Radio", "seek3Radio", "challenge1Radio", "challenge2Radio", "challenge3Radio", ): uistuff.keep(self.widgets[widget], widget) self.lastdifference = 0 self.loading_seek_editor = False self.savedSeekRadioTexts = [GAME_TYPES["blitz"].display_text] * 3 for i in range(1, 4): self.__loadSeekEditor(i) self.__writeSavedSeeks(i) self.widgets["seek%sRadioConfigButton" % i].connect( "clicked", self.onSeekRadioConfigButtonClicked, i ) self.widgets["challenge%sRadioConfigButton" % i].connect( "clicked", self.onChallengeRadioConfigButtonClicked, i ) if not self.connection.isRegistred(): self.chainbox.active = False self.widgets["chainAlignment"].set_sensitive(False) self.widgets["chainAlignment"].set_tooltip_text( _( "The chain button is disabled because you are logged in as a guest. Guests \ can't establish ratings, and the chain button's state has no effect when \ there is no rating to which to tie \"Opponent Strength\" to" ) ) def onSeekButtonClicked(self, button): if self.widgets["seek3Radio"].get_active(): self.__loadSeekEditor(3) elif self.widgets["seek2Radio"].get_active(): self.__loadSeekEditor(2) else: self.__loadSeekEditor(1) ( minutes, incr, gametype, ratingrange, color, rated, manual, ) = self.__getSeekEditorDialogValues() self.connection.glm.seek( minutes, incr, gametype, rated, ratingrange, color, manual ) def onSeekAllButtonClicked(self, button): for i in range(1, 4): self.__loadSeekEditor(i) ( minutes, incr, gametype, ratingrange, color, rated, manual, ) = self.__getSeekEditorDialogValues() self.connection.glm.seek( minutes, incr, gametype, rated, ratingrange, color, manual ) def onChallengeButtonClicked(self, button, player=None): if player is None: player = self.lounge.players_tab.getSelectedPlayer() if player is None: return self.challengee = player self.in_challenge_mode = True for i in range(1, 4): self.__loadSeekEditor(i) self.__writeSavedSeeks(i) self.__updateRatedGameCheck() if self.widgets["seek3Radio"].get_active(): seeknumber = 3 elif self.widgets["seek2Radio"].get_active(): seeknumber = 2 else: seeknumber = 1 self.__updateSeekEditor(seeknumber, challengemode=True) self.widgets["challengeeNameLabel"].set_markup(player.getMarkup()) self.widgets["challengeeImage"].set_from_pixbuf(player.getIcon(size=32)) title = _("Challenge: ") + player.name self.widgets["challengeDialog"].set_title(title) self.widgets["challengeDialog"].present() def onChallengeDialogResponse(self, dialog, response): self.widgets["challengeDialog"].hide() if response != 5: return True if self.widgets["challenge3Radio"].get_active(): self.__loadSeekEditor(3) elif self.widgets["challenge2Radio"].get_active(): self.__loadSeekEditor(2) else: self.__loadSeekEditor(1) ( minutes, incr, gametype, ratingrange, color, rated, manual, ) = self.__getSeekEditorDialogValues() self.connection.om.challenge( self.challengee.name, gametype, minutes, incr, rated, color ) def onSeekRadioConfigButtonClicked(self, configimage, seeknumber): self.__showSeekEditor(seeknumber) def onChallengeRadioConfigButtonClicked(self, configimage, seeknumber): self.__showSeekEditor(seeknumber, challengemode=True) def onEditSeekDialogResponse(self, dialog, response): self.widgets["editSeekDialog"].hide() if response != Gtk.ResponseType.OK: return self.__saveSeekEditor(self.seeknumber) self.__writeSavedSeeks(self.seeknumber) def __updateSeekEditor(self, seeknumber, challengemode=False): self.in_challenge_mode = challengemode self.seeknumber = seeknumber if not challengemode: self.widgets["strengthFrame"].set_sensitive(True) self.widgets["strengthFrame"].set_tooltip_text("") self.widgets["manualAcceptCheck"].set_sensitive(True) self.widgets["manualAcceptCheck"].set_tooltip_text( _("If set you can refuse players accepting your seek") ) else: self.widgets["strengthFrame"].set_sensitive(False) self.widgets["strengthFrame"].set_tooltip_text( _("This option is not applicable because you're challenging a player") ) self.widgets["manualAcceptCheck"].set_sensitive(False) self.widgets["manualAcceptCheck"].set_tooltip_text( _("This option is not applicable because you're challenging a player") ) self.widgets["chainAlignment"].show_all() self.__loadSeekEditor(seeknumber) self.widgets["seek%dRadio" % seeknumber].set_active(True) self.widgets["challenge%dRadio" % seeknumber].set_active(True) self.__updateYourRatingHBox() self.__updateRatingCenterInfoBox() self.__updateToleranceButton() self.__updateRatedGameCheck() self.onUntimedCheckToggled(self.widgets["untimedCheck"]) title = ( _("Edit Seek: ") + self.widgets["seek%dRadio" % seeknumber].get_label()[:-1] ) self.widgets["editSeekDialog"].set_title(title) def __showSeekEditor(self, seeknumber, challengemode=False): self.__updateSeekEditor(seeknumber, challengemode) self.widgets["editSeekDialog"].present() # ugly hack to fix https://github.com/pychess/pychess/issues/1024 # self.widgets["editSeekDialog"].queue_draw() doesn't work if sys.platform == "win32": self.widgets["editSeekDialog"].hide() allocation = self.widgets["editSeekDialog"].get_allocation() self.widgets["editSeekDialog"].set_size_request( allocation.width, allocation.height ) self.widgets["editSeekDialog"].show() # -------------------------------------------------------- Seek Editor def __writeSavedSeeks(self, seeknumber): """Writes saved seek strings for both the Seek Panel and the Challenge Panel""" ( minutes, gain, gametype, ratingrange, color, rated, manual, ) = self.__getSeekEditorDialogValues() self.savedSeekRadioTexts[seeknumber - 1] = time_control_to_gametype( minutes, gain ).display_text self.__writeSeekRadioLabels() seek = {} if gametype == GAME_TYPES["untimed"]: seek["time"] = gametype.display_text elif gain > 0: seek["time"] = _("%(minutes)d min + %(gain)d sec/move") % { "minutes": minutes, "gain": gain, } else: seek["time"] = _("%d min") % minutes if isinstance(gametype, VariantGameType): seek["variant"] = "%s" % gametype.display_text rrtext = get_rating_range_display_text(ratingrange[0], ratingrange[1]) if rrtext: seek["rating"] = rrtext if color == WHITE: seek["color"] = _("White") elif color == BLACK: seek["color"] = _("Black") if rated and gametype is not GAME_TYPES["untimed"]: seek["rated"] = _("Rated") if manual: seek["manual"] = _("Manual") seek_ = [] challenge = [] challengee_is_guest = self.challengee and self.challengee.isGuest() for key in ("time", "variant", "rating", "color", "rated", "manual"): if key in seek: seek_.append(seek[key]) if key in ("time", "variant", "color") or ( key == "rated" and not challengee_is_guest ): challenge.append(seek[key]) seektext = ", ".join(seek_) challengetext = ", ".join(challenge) if seeknumber == 1: self.widgets["seek1RadioLabel"].set_text(seektext) self.widgets["challenge1RadioLabel"].set_text(challengetext) elif seeknumber == 2: self.widgets["seek2RadioLabel"].set_text(seektext) self.widgets["challenge2RadioLabel"].set_text(challengetext) else: self.widgets["seek3RadioLabel"].set_text(seektext) self.widgets["challenge3RadioLabel"].set_text(challengetext) def __loadSeekEditor(self, seeknumber): self.loading_seek_editor = True for widget in self.seekEditorWidgets: if widget in self.seekEditorWidgetGettersSetters: uistuff.loadDialogWidget( self.widgets[widget], widget, seeknumber, get_value_=self.seekEditorWidgetGettersSetters[widget][0], set_value_=self.seekEditorWidgetGettersSetters[widget][1], first_value=self.seekEditorWidgetDefaults[widget][seeknumber - 1], ) elif widget in self.seekEditorWidgetDefaults: uistuff.loadDialogWidget( self.widgets[widget], widget, seeknumber, first_value=self.seekEditorWidgetDefaults[widget][seeknumber - 1], ) else: uistuff.loadDialogWidget(self.widgets[widget], widget, seeknumber) self.lastdifference = conf.get("lastdifference-%d" % seeknumber) self.loading_seek_editor = False def __saveSeekEditor(self, seeknumber): for widget in self.seekEditorWidgets: if widget in self.seekEditorWidgetGettersSetters: uistuff.saveDialogWidget( self.widgets[widget], widget, seeknumber, get_value_=self.seekEditorWidgetGettersSetters[widget][0], ) else: uistuff.saveDialogWidget(self.widgets[widget], widget, seeknumber) conf.set("lastdifference-%d" % seeknumber, self.lastdifference) def __getSeekEditorDialogValues(self): if self.widgets["untimedCheck"].get_active(): minutes = 0 incr = 0 else: minutes = int(self.widgets["minutesSpin"].get_value()) incr = int(self.widgets["gainSpin"].get_value()) if self.widgets["strengthCheck"].get_active(): ratingrange = [0, 9999] else: center = ( int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP ) tolerance = ( int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP ) minrating = center - tolerance minrating = minrating > 0 and minrating or 0 maxrating = center + tolerance maxrating = maxrating >= 3000 and 9999 or maxrating ratingrange = [minrating, maxrating] if self.widgets["nocolorRadio"].get_active(): color = None elif self.widgets["whitecolorRadio"].get_active(): color = WHITE else: color = BLACK if ( self.widgets["noVariantRadio"].get_active() or self.widgets["untimedCheck"].get_active() ): gametype = time_control_to_gametype(minutes, incr) else: variant_combo_getter = self.seekEditorWidgetGettersSetters["variantCombo"][ 0 ] variant = variant_combo_getter(self.widgets["variantCombo"]) gametype = VARIANT_GAME_TYPES[variant] rated = ( self.widgets["ratedGameCheck"].get_active() and not self.widgets["untimedCheck"].get_active() ) manual = self.widgets["manualAcceptCheck"].get_active() return minutes, incr, gametype, ratingrange, color, rated, manual def __writeSeekRadioLabels(self): gameTypes = { _("Untimed"): [0, 1], _("Standard"): [0, 1], _("Blitz"): [0, 1], _("Lightning"): [0, 1], } for i in range(3): gameTypes[self.savedSeekRadioTexts[i]][0] += 1 for i in range(3): if gameTypes[self.savedSeekRadioTexts[i]][0] > 1: labelText = "%s #%d:" % ( self.savedSeekRadioTexts[i], gameTypes[self.savedSeekRadioTexts[i]][1], ) self.widgets["seek%dRadio" % (i + 1)].set_label(labelText) self.widgets["challenge%dRadio" % (i + 1)].set_label(labelText) gameTypes[self.savedSeekRadioTexts[i]][1] += 1 else: self.widgets["seek%dRadio" % (i + 1)].set_label( self.savedSeekRadioTexts[i] + ":" ) self.widgets["challenge%dRadio" % (i + 1)].set_label( self.savedSeekRadioTexts[i] + ":" ) def __updateRatingRangeBox(self): center = ( int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP ) tolerance = ( int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP ) min_rating = center - tolerance min_rating = min_rating > 0 and min_rating or 0 max_rating = center + tolerance max_rating = max_rating >= 3000 and 9999 or max_rating self.widgets["ratingRangeMinLabel"].set_label("%d" % min_rating) self.widgets["ratingRangeMaxLabel"].set_label("%d" % max_rating) for widgetName, rating in ( ("ratingRangeMinImage", min_rating), ("ratingRangeMaxImage", max_rating), ): pixbuf = FICSPlayer.getIconByRating(rating) self.widgets[widgetName].set_from_pixbuf(pixbuf) self.widgets["ratingRangeMinImage"].show() self.widgets["ratingRangeMinLabel"].show() self.widgets["dashLabel"].show() self.widgets["ratingRangeMaxImage"].show() self.widgets["ratingRangeMaxLabel"].show() if min_rating == 0: self.widgets["ratingRangeMinImage"].hide() self.widgets["ratingRangeMinLabel"].hide() self.widgets["dashLabel"].hide() self.widgets["ratingRangeMaxLabel"].set_label("%d↓" % max_rating) if max_rating == 9999: self.widgets["ratingRangeMaxImage"].hide() self.widgets["ratingRangeMaxLabel"].hide() self.widgets["dashLabel"].hide() self.widgets["ratingRangeMinLabel"].set_label("%d↑" % min_rating) if min_rating == 0 and max_rating == 9999: self.widgets["ratingRangeMinLabel"].set_label(_("Any strength")) self.widgets["ratingRangeMinLabel"].show() def __getGameType(self): if self.widgets["untimedCheck"].get_active(): gametype = GAME_TYPES["untimed"] elif self.widgets["noVariantRadio"].get_active(): minutes = int(self.widgets["minutesSpin"].get_value()) gain = int(self.widgets["gainSpin"].get_value()) gametype = time_control_to_gametype(minutes, gain) else: variant_combo_getter = self.seekEditorWidgetGettersSetters["variantCombo"][ 0 ] variant = variant_combo_getter(self.widgets["variantCombo"]) gametype = VARIANT_GAME_TYPES[variant] return gametype def __updateYourRatingHBox(self): gametype = self.__getGameType() self.widgets["yourRatingNameLabel"].set_label("(" + gametype.display_text + ")") rating = self.__getRating(gametype.rating_type) if rating is None: self.widgets["yourRatingImage"].clear() self.widgets["yourRatingLabel"].set_label(_("Unrated")) return pixbuf = FICSPlayer.getIconByRating(rating) self.widgets["yourRatingImage"].set_from_pixbuf(pixbuf) self.widgets["yourRatingLabel"].set_label(str(rating)) center = ( int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP ) rating = self.__clamp(rating) difference = rating - center if ( self.loading_seek_editor is False and self.chainbox.active and difference != self.lastdifference ): newcenter = rating - self.lastdifference self.widgets["ratingCenterSlider"].set_value( newcenter // RATING_SLIDER_STEP ) else: self.lastdifference = difference def __clamp(self, rating): assert isinstance(rating, int) mod = rating % RATING_SLIDER_STEP if mod > RATING_SLIDER_STEP // 2: return rating - mod + RATING_SLIDER_STEP else: return rating - mod def __updateRatedGameCheck(self): # on FICS, untimed games can't be rated, nor can games against a guest if not self.connection.isRegistred(): self.widgets["ratedGameCheck"].set_active(False) sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _("You can't play rated games because you are logged in as a guest") ) elif self.widgets["untimedCheck"].get_active(): sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _('You can\'t play rated games because "Untimed" is checked, ') + _("and on FICS, untimed games can't be rated") ) elif self.in_challenge_mode and self.challengee.isGuest(): sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _("This option is not available because you're challenging a guest, ") + _("and guests can't play rated games") ) else: sensitive = True self.widgets["ratedGameCheck"].set_tooltip_text("") self.widgets["ratedGameCheck"].set_sensitive(sensitive) def __initVariantCombo(self, combo): model = Gtk.TreeStore(str) cellRenderer = Gtk.CellRendererText() combo.clear() combo.pack_start(cellRenderer, True) combo.add_attribute(cellRenderer, "text", 0) combo.set_model(model) groupNames = { VARIANTS_SHUFFLE: _("Shuffle"), VARIANTS_OTHER: _("Other (standard rules)"), VARIANTS_OTHER_NONSTANDARD: _("Other (non standard rules)"), } ficsvariants = [ v for k, v in variants.items() if k in VARIANT_GAME_TYPES and v.variant not in UNSUPPORTED ] groups = groupby(ficsvariants, attrgetter("variant_group")) pathToVariant = {} variantToPath = {} for i, (id, group) in enumerate(groups): sel_iter = model.append(None, (groupNames[id],)) for variant in group: subiter = model.append(sel_iter, (variant.name,)) path = model.get_path(subiter) path = path.to_string() pathToVariant[path] = variant.variant variantToPath[variant.variant] = path # this stops group names (eg "Shuffle") from being displayed in # submenus def cellFunc(combo, cell, model, sel_iter, data): isChildNode = not model.iter_has_child(sel_iter) cell.set_property("sensitive", isChildNode) combo.set_cell_data_func(cellRenderer, cellFunc, None) def comboGetter(combo): path = model.get_path(combo.get_active_iter()) path = path.to_string() return pathToVariant[path] def comboSetter(combo, variant): try: combo.set_active_iter(model.get_iter(variantToPath[variant])) except KeyError: print("Variant %s is not supported" % variant) return comboGetter, comboSetter def __getRating(self, gametype): if self.finger is None: return None try: rating = self.finger.getRating(type=gametype) except KeyError: # the user doesn't have a rating for this game type rating = None return rating def onFinger(self, fm, finger): if not finger.getName() == self.connection.getUsername(): return self.finger = finger numfingers = conf.get("numberOfFingers") + 1 conf.set("numberOfFingers", numfingers) if conf.get("numberOfTimesLoggedInAsRegisteredUser") == 1 and numfingers == 1: standard = self.__getRating(TYPE_STANDARD) blitz = self.__getRating(TYPE_BLITZ) lightning = self.__getRating(TYPE_LIGHTNING) if standard is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][0] = ( standard // RATING_SLIDER_STEP ) elif blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][0] = ( blitz // RATING_SLIDER_STEP ) if blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][1] = ( blitz // RATING_SLIDER_STEP ) if lightning is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][2] = ( lightning // RATING_SLIDER_STEP ) elif blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][2] = ( blitz // RATING_SLIDER_STEP ) for i in range(1, 4): self.__loadSeekEditor(i) self.__updateSeekEditor(i) self.__saveSeekEditor(i) self.__writeSavedSeeks(i) self.__updateYourRatingHBox() def onTimeSpinChanged(self, spin): minutes = self.widgets["minutesSpin"].get_value_as_int() gain = self.widgets["gainSpin"].get_value_as_int() name = time_control_to_gametype(minutes, gain).display_text self.widgets["timeControlNameLabel"].set_label("%s" % name) self.__updateYourRatingHBox() def onUntimedCheckToggled(self, check): is_untimed_game = check.get_active() self.widgets["timeControlConfigVBox"].set_sensitive(not is_untimed_game) # on FICS, untimed games can't be rated and can't be a chess variant self.widgets["variantFrame"].set_sensitive(not is_untimed_game) if is_untimed_game: self.widgets["variantFrame"].set_tooltip_text( _('You can\'t select a variant because "Untimed" is checked, ') + _("and on FICS, untimed games have to be normal chess rules") ) else: self.widgets["variantFrame"].set_tooltip_text("") self.__updateRatedGameCheck() # sets sensitivity of widgets["ratedGameCheck"] self.__updateYourRatingHBox() def onStrengthCheckToggled(self, check): strengthsensitive = not check.get_active() self.widgets["strengthConfigVBox"].set_sensitive(strengthsensitive) def onRatingCenterSliderChanged(self, slider): center = ( int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP ) pixbuf = FICSPlayer.getIconByRating(center) self.widgets["ratingCenterLabel"].set_label("%d" % (center)) self.widgets["ratingCenterImage"].set_from_pixbuf(pixbuf) self.__updateRatingRangeBox() rating = self.__getRating(self.__getGameType().rating_type) if rating is None: return rating = self.__clamp(rating) self.lastdifference = rating - center def __updateRatingCenterInfoBox(self): if self.widgets["toleranceHBox"].get_property("visible") is True: self.widgets["ratingCenterInfoHBox"].show() else: self.widgets["ratingCenterInfoHBox"].hide() def __updateToleranceButton(self): if self.widgets["toleranceHBox"].get_property("visible") is True: self.widgets["toleranceButton"].set_property("label", _("Hide")) else: self.widgets["toleranceButton"].set_property("label", _("Change Tolerance")) def onToleranceButtonClicked(self, button): if self.widgets["toleranceHBox"].get_property("visible") is True: self.widgets["toleranceHBox"].hide() else: self.widgets["toleranceHBox"].show() self.__updateToleranceButton() self.__updateRatingCenterInfoBox() def onToleranceSliderChanged(self, slider): tolerance = ( int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP ) self.widgets["toleranceLabel"].set_label("±%d" % tolerance) self.__updateRatingRangeBox() def onColorRadioChanged(self, radio): if self.widgets["nocolorRadio"].get_active(): self.widgets["colorImage"].set_from_file( addDataPrefix("glade/piece-unknown.png") ) self.widgets["colorImage"].set_sensitive(False) elif self.widgets["whitecolorRadio"].get_active(): self.widgets["colorImage"].set_from_file( addDataPrefix("glade/piece-white.png") ) self.widgets["colorImage"].set_sensitive(True) elif self.widgets["blackcolorRadio"].get_active(): self.widgets["colorImage"].set_from_file( addDataPrefix("glade/piece-black.png") ) self.widgets["colorImage"].set_sensitive(True) def onVariantRadioChanged(self, radio): self.__updateYourRatingHBox() def onVariantComboChanged(self, combo): self.widgets["variantRadio"].set_active(True) self.__updateYourRatingHBox() ( min, gain, gametype, ratingrange, color, rated, manual, ) = self.__getSeekEditorDialogValues() self.widgets["variantCombo"].set_tooltip_text( variants[gametype.variant_type].__desc__ ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/SeekGraphPanel.py0000644000175100001770000000641414614030313023667 0ustar00runnerdockerfrom math import e from pychess.ic.FICSObjects import ( FICSChallenge, get_seek_tooltip_text, get_challenge_tooltip_text, ) from pychess.perspectives.fics.ParrentListSection import ParrentListSection from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.widgets.SpotGraph import SpotGraph __title__ = _("Seek Graph") __icon__ = addDataPrefix("glade/manseek.svg") __desc__ = _("Handle seeks on graphical way") YMARKS = (800, 1600, 2400) # YLOCATION = lambda y: min(y / 3000., 3000) XMARKS = (5, 15) # XLOCATION = lambda x: e**(-6.579 / (x + 1)) def YLOCATION(y): return min(y / 3000.0, 3000) def XLOCATION(x): return e ** (-6.579 / (x + 1)) # This is used to convert increment time to minutes. With a GAME_LENGTH on # 40, a game on two minutes and twelve secconds will be placed at the same # X location as a game on 2+12*40/60 = 10 minutes GAME_LENGTH = 40 class Sidepanel(ParrentListSection): def load(self, widgets, connection, lounge): self.widgets = widgets self.connection = connection __widget__ = lounge.seek_graph self.graph = SpotGraph() for rating in YMARKS: self.graph.addYMark(YLOCATION(rating), str(rating)) for mins in XMARKS: self.graph.addXMark(XLOCATION(mins), str(mins) + _(" min")) self.widgets["graphDock"].add(self.graph) self.graph.show() self.graph.connect("spotClicked", self.onSpotClicked) self.connection.seeks.connect("FICSSeekCreated", self.onAddSought) self.connection.seeks.connect("FICSSeekRemoved", self.onRemoveSought) self.connection.challenges.connect("FICSChallengeIssued", self.onAddSought) self.connection.challenges.connect("FICSChallengeRemoved", self.onRemoveSought) self.connection.bm.connect("playGameCreated", self.onPlayingGame) self.connection.bm.connect("curGameEnded", self.onCurGameEnded) return __widget__ def onSpotClicked(self, graph, name): self.connection.bm.play(name) def onAddSought(self, manager, sought): log.debug( "%s" % sought, extra={"task": (self.connection.username, "onAddSought")} ) x_loc = XLOCATION( float(sought.minutes) + float(sought.inc) * GAME_LENGTH / 60.0 ) y_loc = YLOCATION(float(sought.player_rating)) if (sought.rated) and ("(C)" in sought.player.long_name()): type_ = 2 elif not (sought.rated) and ("(C)" in sought.player.long_name()): type_ = 3 elif sought.rated: type_ = 0 else: type_ = 1 if isinstance(sought, FICSChallenge): tooltip_text = get_challenge_tooltip_text(sought) else: tooltip_text = get_seek_tooltip_text(sought) self.graph.addSpot(sought.index, tooltip_text, x_loc, y_loc, type_) def onRemoveSought(self, manager, sought): log.debug( "%s" % sought, extra={"task": (self.connection.username, "onRemoveSought")} ) self.graph.removeSpot(sought.index) def onPlayingGame(self, bm, game): self.widgets["seekGraphContent"].set_sensitive(False) def onCurGameEnded(self, bm, game): self.widgets["seekGraphContent"].set_sensitive(True) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/SeekListPanel.py0000644000175100001770000005006114614030313023536 0ustar00runnerdockerfrom gi.repository import Gtk, Gdk, GdkPixbuf from pychess.ic.FICSObjects import ( FICSSoughtMatch, FICSChallenge, get_seek_tooltip_text, get_challenge_tooltip_text, ) from pychess.ic import ( TYPE_BLITZ, TYPE_LIGHTNING, TYPE_STANDARD, RATING_TYPES, TYPE_BULLET, TYPE_ONE_MINUTE, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE, get_infobarmessage_content, ) from pychess.perspectives.fics.ParrentListSection import ( ParrentListSection, cmp, SEPARATOR, ACCEPT, ASSESS, FOLLOW, CHAT, CHALLENGE, FINGER, ARCHIVED, ) from pychess.Utils.IconLoader import get_pixbuf from pychess.System import conf, uistuff from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.widgets import mainwindow from pychess.widgets.preferencesDialog import SoundTab from pychess.widgets.InfoBar import InfoBarMessage, InfoBarMessageButton __title__ = _("Seeks / Challenges") __icon__ = addDataPrefix("glade/manseek.svg") __desc__ = _("Handle seeks and challenges") class Sidepanel(ParrentListSection): def load(self, widgets, connection, lounge): self.widgets = widgets self.connection = connection self.lounge = lounge self.infobar = lounge.infobar __widget__ = lounge.seek_list self.messages = {} self.seeks = {} self.challenges = {} self.seekPix = get_pixbuf("glade/seek.png") self.chaPix = get_pixbuf("glade/challenge.png") self.manSeekPix = get_pixbuf("glade/manseek.png") self.widgets["seekExpander"].set_vexpand(False) self.tv = self.widgets["seektreeview"] self.store = Gtk.ListStore( FICSSoughtMatch, GdkPixbuf.Pixbuf, GdkPixbuf.Pixbuf, str, int, str, str, str, int, Gdk.RGBA, str, ) self.seek_filter = self.store.filter_new() self.seek_filter.set_visible_func(self.seek_filter_func) self.filter_toggles = {} self.filter_buttons = ( "standard_toggle1", "blitz_toggle1", "lightning_toggle1", "variant_toggle1", "computer_toggle1", ) for widget in self.filter_buttons: uistuff.keep(self.widgets[widget], widget) self.widgets[widget].connect("toggled", self.on_filter_button_toggled) initial = conf.get(widget) self.filter_toggles[widget] = initial self.widgets[widget].set_active(initial) self.model = self.seek_filter.sort_new_with_model() self.tv.set_model(self.model) self.tv.set_model(self.model) self.addColumns( self.tv, "FICSSoughtMatch", "", "", _("Name"), _("Rating"), _("Rated"), _("Type"), _("Clock"), "gametime", "textcolor", "tooltip", hide=[0, 8, 9, 10], pix=[1, 2], ) self.tv.set_search_column(3) self.tv.set_tooltip_column( 10, ) for i in range(0, 2): self.tv.get_model().set_sort_func(i, self.pixCompareFunction, i + 1) for i in range(2, 8): self.tv.get_model().set_sort_func(i, self.compareFunction, i) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc, None) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass for num in range(2, 7): column = self.tv.get_column(num) for cellrenderer in column.get_cells(): column.add_attribute(cellrenderer, "foreground_rgba", 9) self.selection = self.tv.get_selection() self.lastSeekSelected = None self.selection.set_select_function(self.selectFunction, True) self.selection.connect("changed", self.onSelectionChanged) self.widgets["clearSeeksButton"].connect("clicked", self.onClearSeeksClicked) self.widgets["acceptButton"].connect("clicked", self.on_accept) self.widgets["declineButton"].connect("clicked", self.onDeclineClicked) self.tv.connect("row-activated", self.row_activated) self.tv.connect("button-press-event", self.button_press_event) self.connection.seeks.connect("FICSSeekCreated", self.onAddSeek) self.connection.seeks.connect("FICSSeekRemoved", self.onRemoveSeek) self.connection.challenges.connect("FICSChallengeIssued", self.onChallengeAdd) self.connection.challenges.connect( "FICSChallengeRemoved", self.onChallengeRemove ) self.connection.glm.connect("our-seeks-removed", self.our_seeks_removed) self.connection.glm.connect("assessReceived", self.onAssessReceived) self.connection.bm.connect("playGameCreated", self.onPlayingGame) self.connection.bm.connect("curGameEnded", self.onCurGameEnded) def get_sort_order(modelsort): identity, order = modelsort.get_sort_column_id() if identity is None or identity < 0: identity = 0 else: identity += 1 if order == Gtk.SortType.DESCENDING: identity = -1 * identity return identity def set_sort_order(modelsort, value): if value != 0: order = Gtk.SortType.ASCENDING if value > 0 else Gtk.SortType.DESCENDING modelsort.set_sort_column_id(abs(value) - 1, order) uistuff.keep( self.model, "seektreeview_sort_order_col", get_sort_order, lambda modelsort, value: set_sort_order(modelsort, value), ) self.createLocalMenu( (ACCEPT, ASSESS, CHALLENGE, CHAT, FOLLOW, SEPARATOR, FINGER, ARCHIVED) ) self.assess_sent = False return __widget__ def seek_filter_func(self, model, iter, data): sought_match = model[iter][0] is_computer = sought_match.player.isComputer() is_standard = ( sought_match.game_type.rating_type in (TYPE_STANDARD, TYPE_FIFTEEN_MINUTE, TYPE_FORTYFIVE_MINUTE) and not is_computer ) is_blitz = ( sought_match.game_type.rating_type in (TYPE_BLITZ, TYPE_THREE_MINUTE, TYPE_FIVE_MINUTE) and not is_computer ) is_lightning = ( sought_match.game_type.rating_type in (TYPE_LIGHTNING, TYPE_BULLET, TYPE_ONE_MINUTE) and not is_computer ) is_variant = ( sought_match.game_type.rating_type in RATING_TYPES[9:] and not is_computer ) return ( (self.filter_toggles["computer_toggle1"] and is_computer) or (self.filter_toggles["standard_toggle1"] and is_standard) or (self.filter_toggles["blitz_toggle1"] and is_blitz) or (self.filter_toggles["lightning_toggle1"] and is_lightning) or (self.filter_toggles["variant_toggle1"] and is_variant) ) def on_filter_button_toggled(self, widget): for button in self.filter_buttons: self.filter_toggles[button] = self.widgets[button].get_active() self.seek_filter.refilter() def onAssessReceived(self, glm, assess): if self.assess_sent: self.assess_sent = False dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK ) dialog.set_title(_("Assess")) dialog.set_markup(_("Effect on ratings by the possible outcomes")) grid = Gtk.Grid() grid.set_column_homogeneous(True) grid.set_row_spacing(12) grid.set_row_spacing(12) name0 = Gtk.Label() name0.set_markup("%s" % assess["names"][0]) name1 = Gtk.Label() name1.set_markup("%s" % assess["names"][1]) grid.attach(Gtk.Label(label=""), 0, 0, 1, 1) grid.attach(name0, 1, 0, 1, 1) grid.attach(name1, 2, 0, 1, 1) grid.attach(Gtk.Label(assess["type"]), 0, 1, 1, 1) grid.attach(Gtk.Label(assess["oldRD"][0]), 1, 1, 1, 1) grid.attach(Gtk.Label(assess["oldRD"][1]), 2, 1, 1, 1) grid.attach(Gtk.Label(_("Win:")), 0, 2, 1, 1) grid.attach(Gtk.Label(assess["win"][0]), 1, 2, 1, 1) grid.attach(Gtk.Label(assess["win"][1]), 2, 2, 1, 1) grid.attach(Gtk.Label(_("Draw:")), 0, 3, 1, 1) grid.attach(Gtk.Label(assess["draw"][0]), 1, 3, 1, 1) grid.attach(Gtk.Label(assess["draw"][1]), 2, 3, 1, 1) grid.attach(Gtk.Label(_("Loss:")), 0, 4, 1, 1) grid.attach(Gtk.Label(assess["loss"][0]), 1, 4, 1, 1) grid.attach(Gtk.Label(assess["loss"][1]), 2, 4, 1, 1) grid.attach(Gtk.Label(_("New RD:")), 0, 5, 1, 1) grid.attach(Gtk.Label(assess["newRD"][0]), 1, 5, 1, 1) grid.attach(Gtk.Label(assess["newRD"][1]), 2, 5, 1, 1) grid.show_all() dialog.get_message_area().add(grid) dialog.run() dialog.destroy() def getSelectedPlayer(self): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is not None: sought = model.get_value(sel_iter, 0) return sought.player def textcolor_normal(self): style_ctxt = self.tv.get_style_context() return style_ctxt.get_color(Gtk.StateFlags.NORMAL) def textcolor_selected(self): style_ctxt = self.tv.get_style_context() return style_ctxt.get_color(Gtk.StateFlags.INSENSITIVE) def selectFunction(self, selection, model, path, is_selected, data): if model[path][9] == self.textcolor_selected(): return False else: return True def __isAChallengeOrOurSeek(self, row): sought = row[0] textcolor = row[9] red0, green0, blue0 = textcolor.red, textcolor.green, textcolor.blue selected = self.textcolor_selected() red1, green1, blue1 = selected.red, selected.green, selected.blue if (isinstance(sought, FICSChallenge)) or ( red0 == red1 and green0 == green1 and blue0 == blue1 ): return True else: return False def compareFunction(self, model, iter0, iter1, column): row0 = list(model[model.get_path(iter0)]) row1 = list(model[model.get_path(iter1)]) is_ascending = ( True if self.tv.get_column(column - 1).get_sort_order() is Gtk.SortType.ASCENDING else False ) if self.__isAChallengeOrOurSeek(row0) and not self.__isAChallengeOrOurSeek( row1 ): if is_ascending: return -1 else: return 1 elif self.__isAChallengeOrOurSeek(row1) and not self.__isAChallengeOrOurSeek( row0 ): if is_ascending: return 1 else: return -1 elif column == 7: return self.timeCompareFunction(model, iter0, iter1, column) else: value0 = row0[column] value0 = value0.lower() if isinstance(value0, str) else value0 value1 = row1[column] value1 = value1.lower() if isinstance(value1, str) else value1 return cmp(value0, value1) def __updateActiveSeeksLabel(self): count = len(self.seeks) + len(self.challenges) self.widgets["activeSeeksLabel"].set_text(_("Active seeks: %d") % count) def onAddSeek(self, seeks, seek): log.debug("%s" % seek, extra={"task": (self.connection.username, "onAddSeek")}) pix = self.seekPix if seek.automatic else self.manSeekPix textcolor = ( self.textcolor_selected() if seek.player.name == self.connection.getUsername() else self.textcolor_normal() ) seek_ = [ seek, seek.player.getIcon(gametype=seek.game_type), pix, seek.player.name + seek.player.display_titles(), seek.player_rating, seek.display_rated, seek.game_type.display_text, seek.display_timecontrol, seek.sortable_time, textcolor, get_seek_tooltip_text(seek), ] if textcolor == self.textcolor_selected(): txi = self.store.prepend(seek_) self.tv.scroll_to_cell(self.store.get_path(txi)) self.widgets["clearSeeksButton"].set_sensitive(True) else: txi = self.store.append(seek_) self.seeks[hash(seek)] = txi self.__updateActiveSeeksLabel() def onRemoveSeek(self, seeks, seek): log.debug( "%s" % seek, extra={"task": (self.connection.username, "onRemoveSeek")} ) try: treeiter = self.seeks[hash(seek)] except KeyError: # We ignore removes we haven't added, as it seems fics sends a # lot of removes for games it has never told us about return if self.store.iter_is_valid(treeiter): self.store.remove(treeiter) del self.seeks[hash(seek)] self.__updateActiveSeeksLabel() def onChallengeAdd(self, challenges, challenge): log.debug( "%s" % challenge, extra={"task": (self.connection.username, "onChallengeAdd")}, ) SoundTab.playAction("aPlayerChecks") # TODO: differentiate between challenges and manual-seek-accepts # (wait until seeks are comparable FICSSeek objects to do this) # Related: http://code.google.com/p/pychess/issues/detail?id=206 if challenge.adjourned: text = _( " would like to resume your adjourned %(time)s " + "%(gametype)s game." ) % { "time": challenge.display_timecontrol, "gametype": challenge.game_type.display_text, } else: text = _( " challenges you to a %(time)s %(rated)s %(gametype)s game" ) % { "time": challenge.display_timecontrol, "rated": challenge.display_rated.lower(), "gametype": challenge.game_type.display_text, } if challenge.color: text += _(" where %(player)s plays %(color)s.") % { "player": challenge.player.name, "color": _("white") if challenge.color == "white" else _("black"), } else: text += "." content = get_infobarmessage_content( challenge.player, text, gametype=challenge.game_type ) def callback(infobar, response, message): if response == Gtk.ResponseType.ACCEPT: self.connection.om.acceptIndex(challenge.index) elif response == Gtk.ResponseType.NO: self.connection.om.declineIndex(challenge.index) message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.QUESTION, content, callback) message.add_button(InfoBarMessageButton(_("Accept"), Gtk.ResponseType.ACCEPT)) message.add_button(InfoBarMessageButton(_("Decline"), Gtk.ResponseType.NO)) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages[hash(challenge)] = message self.infobar.push_message(message) txi = self.store.prepend( [ challenge, challenge.player.getIcon(gametype=challenge.game_type), self.chaPix, challenge.player.name + challenge.player.display_titles(), challenge.player_rating, challenge.display_rated, challenge.game_type.display_text, challenge.display_timecontrol, challenge.sortable_time, self.textcolor_normal(), get_challenge_tooltip_text(challenge), ] ) self.challenges[hash(challenge)] = txi self.__updateActiveSeeksLabel() self.widgets["seektreeview"].scroll_to_cell(self.store.get_path(txi)) def onChallengeRemove(self, challenges, challenge): log.debug( "%s" % challenge, extra={"task": (self.connection.username, "onChallengeRemove")}, ) try: txi = self.challenges[hash(challenge)] except KeyError: pass else: if self.store.iter_is_valid(txi): self.store.remove(txi) del self.challenges[hash(challenge)] try: message = self.messages[hash(challenge)] except KeyError: pass else: message.dismiss() del self.messages[hash(challenge)] self.__updateActiveSeeksLabel() def our_seeks_removed(self, glm): self.widgets["clearSeeksButton"].set_sensitive(False) def onDeclineClicked(self, button): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return sought = model.get_value(sel_iter, 0) self.connection.om.declineIndex(sought.index) try: message = self.messages[hash(sought)] except KeyError: pass else: message.dismiss() del self.messages[hash(sought)] def onClearSeeksClicked(self, button): self.connection.client.run_command("unseek") self.widgets["clearSeeksButton"].set_sensitive(False) def row_activated(self, treeview, path, view_column): model, sel_iter = self.tv.get_selection().get_selected() if sel_iter is None: return sought = model.get_value(sel_iter, 0) if self.lastSeekSelected is None or sought.index != self.lastSeekSelected.index: return if path != model.get_path(sel_iter): return self.on_accept(None) def onSelectionChanged(self, selection): model, sel_iter = selection.get_selected() sought = None a_seek_is_selected = False selection_is_challenge = False if sel_iter is not None: a_seek_is_selected = True sought = model.get_value(sel_iter, 0) if isinstance(sought, FICSChallenge): selection_is_challenge = True # # select sought owner on players tab to let challenge him using right click menu # if sought.player in self.lounge.players_tab.players: # # we have to undo the iter conversion that was introduced by the filter and sort model # iter0 = self.lounge.players_tab.players[sought.player]["ti"] # filtered_model = self.lounge.players_tab.player_filter # is_ok, iter1 = filtered_model.convert_child_iter_to_iter(iter0) # sorted_model = self.lounge.players_tab.model # is_ok, iter2 = sorted_model.convert_child_iter_to_iter(iter1) # players_selection = self.lounge.players_tab.tv.get_selection() # players_selection.select_iter(iter2) # self.lounge.players_tab.tv.scroll_to_cell(sorted_model.get_path(iter2)) # else: # print(sought.player, "not in self.lounge.players_tab.players") self.lastSeekSelected = sought self.widgets["acceptButton"].set_sensitive(a_seek_is_selected) self.widgets["declineButton"].set_sensitive(selection_is_challenge) def _clear_messages(self): for message in self.messages.values(): message.dismiss() self.messages.clear() def onPlayingGame(self, bm, game): self._clear_messages() self.widgets["seekListContent"].set_sensitive(False) self.widgets["clearSeeksButton"].set_sensitive(False) self.__updateActiveSeeksLabel() def onCurGameEnded(self, bm, game): self.widgets["seekListContent"].set_sensitive(True) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/fics/__init__.py0000644000175100001770000006550714614030313022605 0ustar00runnerdockerimport asyncio import os from io import StringIO from gi.repository import GLib, Gtk, GObject from pychess.ic import ( IC_POS_EXAMINATING, IC_POS_OBSERVING_EXAMINATION, get_infobarmessage_content, get_infobarmessage_content2, TITLES, ) from pychess.ic.ICGameModel import ICGameModel from pychess.perspectives.fics.FicsHome import UserInfoSection from pychess.perspectives.fics.SeekChallenge import SeekChallengeSection from pychess.System import conf, uistuff from pychess.System.prefix import addUserConfigPrefix from pychess.System.Log import log from pychess.widgets import new_notebook from pychess.widgets.InfoBar import ( InfoBarMessage, InfoBarNotebook, InfoBarMessageButton, ) from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock import SOUTH, WEST, CENTER from pychess.Utils.const import LOCAL, WHITE, BLACK, REMOTE from pychess.Utils.TimeModel import TimeModel from pychess.Players.ICPlayer import ICPlayer from pychess.Players.Human import Human from pychess.Savers import pgn, fen from pychess.perspectives import Perspective, perspective_manager, panel_name if not hasattr(Gtk.TreeModelFilter, "new_with_model"): # Fix #1811: TreeModelFilter.sort_new_with_model() is missing on some Gtk versions # due to API changes. Let's keep compatibility with older versions. def sort_new_with_model(self): super_object = super(Gtk.TreeModel, self) if hasattr(super_object, "sort_new_with_model"): return super_object.sort_new_with_model() return Gtk.TreeModelSort.new_with_model(self) @classmethod def new_with_model(self, child_model): return Gtk.TreeModel.sort_new_with_model(child_model) Gtk.TreeModel.sort_new_with_model = sort_new_with_model Gtk.TreeModelFilter.new_with_model = new_with_model class PlayerNotificationMessage(InfoBarMessage): def __init__(self, message_type, content, callback, player, text): InfoBarMessage.__init__(self, message_type, content, callback) self.player = player self.text = text class FICS(GObject.GObject, Perspective): __gsignals__ = { "logout": (GObject.SignalFlags.RUN_FIRST, None, ()), "autoLogout": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self): log.debug("FICS.__init__: starting") GObject.GObject.__init__(self) Perspective.__init__(self, "fics", _("ICS")) self.dockLocation = addUserConfigPrefix("pydock-fics.xml") self.first_run = True def create_toolbuttons(self): def on_logoff_clicked(button): self.emit("logout") self.close() self.logoff_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_DISCONNECT) self.logoff_button.set_tooltip_text(_("Log Off")) self.logoff_button.set_label("logoff") self.logoff_button.connect("clicked", on_logoff_clicked) def on_minute_1_clicked(button): self.connection.client.run_command("1-minute") def on_minute_3_clicked(button): self.connection.client.run_command("3-minute") def on_minute_5_clicked(button): self.connection.client.run_command("5-minute") def on_minute_15_clicked(button): self.connection.client.run_command("15-minute") def on_minute_25_clicked(button): self.connection.client.run_command("25-minute") def on_chess960_clicked(button): self.connection.client.run_command("chess960") self.minute_1_button = Gtk.ToggleToolButton() self.minute_1_button.set_label("1") self.minute_1_button.set_tooltip_text(_("New game from 1-minute playing pool")) self.minute_1_button.connect("clicked", on_minute_1_clicked) self.minute_3_button = Gtk.ToggleToolButton() self.minute_3_button.set_label("3") self.minute_3_button.set_tooltip_text(_("New game from 3-minute playing pool")) self.minute_3_button.connect("clicked", on_minute_3_clicked) self.minute_5_button = Gtk.ToggleToolButton() self.minute_5_button.set_label("5") self.minute_5_button.set_tooltip_text(_("New game from 5-minute playing pool")) self.minute_5_button.connect("clicked", on_minute_5_clicked) self.minute_15_button = Gtk.ToggleToolButton() self.minute_15_button.set_label("15") self.minute_15_button.set_tooltip_text( _("New game from 15-minute playing pool") ) self.minute_15_button.connect("clicked", on_minute_15_clicked) self.minute_25_button = Gtk.ToggleToolButton() self.minute_25_button.set_label("25") self.minute_25_button.set_tooltip_text( _("New game from 25-minute playing pool") ) self.minute_25_button.connect("clicked", on_minute_25_clicked) self.chess960_button = Gtk.ToggleToolButton() self.chess960_button.set_label("960") self.chess960_button.set_tooltip_text(_("New game from Chess960 playing pool")) self.chess960_button.connect("clicked", on_chess960_clicked) def init_layout(self): perspective_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) perspective_manager.set_perspective_widget("fics", perspective_widget) self.infobar = InfoBarNotebook("fics_lounge_infobar") self.infobar.hide() perspective_widget.pack_start(self.infobar, False, False, 0) self.dock = PyDockTop("fics", self) align = Gtk.Alignment() align.show() align.add(self.dock) self.dock.show() perspective_widget.pack_start(align, True, True, 0) self.notebooks = {"ficshome": new_notebook()} self.main_notebook = self.notebooks["ficshome"] for panel in self.sidePanels: self.notebooks[panel_name(panel.__name__)] = new_notebook( panel_name(panel.__name__) ) self.docks["ficshome"] = ( Gtk.Label(label="ficshome"), self.notebooks["ficshome"], None, ) for panel in self.sidePanels: self.docks[panel_name(panel.__name__)][1] = self.notebooks[ panel_name(panel.__name__) ] self.load_from_xml() # Default layout of side panels first_time_layout = False if not os.path.isfile(self.dockLocation): first_time_layout = True leaf = self.dock.dock( self.docks["ficshome"][1], CENTER, self.docks["ficshome"][0], "ficshome" ) leaf.setDockable(False) console_leaf = leaf.dock( self.docks["ConsolePanel"][1], SOUTH, self.docks["ConsolePanel"][0], "ConsolePanel", ) console_leaf.dock( self.docks["NewsPanel"][1], CENTER, self.docks["NewsPanel"][0], "NewsPanel", ) seek_leaf = leaf.dock( self.docks["SeekListPanel"][1], WEST, self.docks["SeekListPanel"][0], "SeekListPanel", ) seek_leaf.dock( self.docks["SeekGraphPanel"][1], CENTER, self.docks["SeekGraphPanel"][0], "SeekGraphPanel", ) seek_leaf.dock( self.docks["PlayerListPanel"][1], CENTER, self.docks["PlayerListPanel"][0], "PlayerListPanel", ) seek_leaf.dock( self.docks["GameListPanel"][1], CENTER, self.docks["GameListPanel"][0], "GameListPanel", ) seek_leaf.dock( self.docks["ArchiveListPanel"][1], CENTER, self.docks["ArchiveListPanel"][0], "ArchiveListPanel", ) leaf = leaf.dock( self.docks["ChatPanel"][1], SOUTH, self.docks["ChatPanel"][0], "ChatPanel", ) # leaf.dock(self.docks["LecturesPanel"][1], CENTER, self.docks["LecturesPanel"][0], "LecturesPanel") def unrealize(dock): dock.saveToXML(self.dockLocation) dock._del() self.dock.connect("unrealize", unrealize) self.dock.show_all() perspective_widget.show_all() perspective_manager.set_perspective_menuitems( "fics", self.menuitems, default=first_time_layout ) log.debug("FICS.__init__: finished") def open_lounge(self, connection, helperconn, host): if self.first_run: self.init_layout() self.connection = connection self.helperconn = helperconn self.host = host self.finger_sent = False self.messages = [] self.players = [] self.game_cids = {} self.widgets = uistuff.GladeWidgets("fics_lounge.glade") self.widgets["fics_lounge"].hide() fics_home = self.widgets["fics_home"] self.widgets["fics_lounge_content_hbox"].remove(fics_home) self.archive_list = self.widgets["archiveListContent"] self.widgets["fics_panels_notebook"].remove(self.archive_list) self.games_list = self.widgets["gamesListContent"] self.widgets["fics_panels_notebook"].remove(self.games_list) self.news_list = self.widgets["news"] self.widgets["fics_home"].remove(self.news_list) self.players_list = self.widgets["playersListContent"] self.widgets["fics_panels_notebook"].remove(self.players_list) self.seek_graph = self.widgets["seekGraphContent"] self.widgets["fics_panels_notebook"].remove(self.seek_graph) self.seek_list = self.widgets["seekListContent"] self.widgets["fics_panels_notebook"].remove(self.seek_list) self.seek_challenge = SeekChallengeSection(self) def on_autoLogout(alm): self.emit("autoLogout") self.close() self.connection.alm.connect("logOut", on_autoLogout) self.connection.connect("disconnected", lambda connection: self.close()) self.connection.connect("error", self.on_connection_error) if self.connection.isRegistred(): numtimes = conf.get("numberOfTimesLoggedInAsRegisteredUser") + 1 conf.set("numberOfTimesLoggedInAsRegisteredUser", numtimes) self.connection.em.connect( "onCommandNotFound", lambda em, cmd: log.error("Fics answered '%s': Command not found" % cmd), ) self.connection.bm.connect("playGameCreated", self.onPlayGameCreated) self.connection.bm.connect("obsGameCreated", self.onObserveGameCreated) self.connection.bm.connect("exGameCreated", self.onObserveGameCreated) self.connection.fm.connect("fingeringFinished", self.onFinger) # the rest of these relay server messages to the lounge infobar self.connection.bm.connect("tooManySeeks", self.tooManySeeks) self.connection.bm.connect("nonoWhileExamine", self.nonoWhileExamine) self.connection.bm.connect("matchDeclined", self.matchDeclined) self.connection.bm.connect("player_on_censor", self.player_on_censor) self.connection.bm.connect("player_on_noplay", self.player_on_noplay) self.connection.bm.connect("req_not_fit_formula", self.req_not_fit_formula) self.connection.glm.connect("seek-updated", self.on_seek_updated) self.connection.glm.connect("our-seeks-removed", self.our_seeks_removed) self.connection.cm.connect("arrivalNotification", self.onArrivalNotification) self.connection.cm.connect("departedNotification", self.onDepartedNotification) def get_top_games(): if perspective_manager.current_perspective == self: self.connection.client.run_command("games *19") return True if self.connection.ICC: self.event_id = GLib.timeout_add_seconds(5, get_top_games) for user in self.connection.notify_users: user = self.connection.players.get(user) self.user_from_notify_list_is_present(user) self.userinfo = UserInfoSection(self.widgets, self.connection, self.host, self) if not self.first_run: self.notebooks["ficshome"].remove_page(-1) self.notebooks["ficshome"].append_page(fics_home) self.panels = [ panel.Sidepanel().load(self.widgets, self.connection, self) for panel in self.sidePanels ] for panel, instance in zip(self.sidePanels, self.panels): if not self.first_run: self.notebooks[panel_name(panel.__name__)].remove_page(-1) self.notebooks[panel_name(panel.__name__)].append_page(instance) instance.show() tool_buttons = [ self.logoff_button, ] self.quick_seek_buttons = [] if self.connection.ICC: self.quick_seek_buttons = [ self.minute_1_button, self.minute_3_button, self.minute_5_button, self.minute_15_button, self.minute_25_button, self.chess960_button, ] tool_buttons += self.quick_seek_buttons perspective_manager.set_perspective_toolbuttons("fics", tool_buttons) if self.first_run: self.first_run = False # After all panel is set up we can push initial messages out self.connection.com.onConsoleMessage("", self.connection.ini_messages) def show(self): perspective_manager.activate_perspective("fics") def present(self): perspective_manager.activate_perspective("fics") def on_connection_error(self, connection, error): log.warning("FICS.on_connection_error: %s" % repr(error)) self.close() def close(self): try: self.widgets = None except TypeError: pass except AttributeError: pass perspective_manager.disable_perspective("fics") def onPlayGameCreated(self, bm, ficsgame): log.debug("FICS.onPlayGameCreated: %s" % ficsgame) for message in self.messages: message.dismiss() del self.messages[:] if self.connection.ICC: for button in self.quick_seek_buttons: button.set_active(False) timemodel = TimeModel(ficsgame.minutes * 60, ficsgame.inc) gamemodel = ICGameModel(self.connection, ficsgame, timemodel) gamemodel.connect("game_started", self.onGameModelStarted, ficsgame) wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer # We start if wplayer.name.lower() == self.connection.getUsername().lower(): player0tup = ( LOCAL, Human, ( WHITE, wplayer.long_name(), wplayer.name, wplayer.getRatingForCurrentGame(), ), wplayer.long_name(), ) player1tup = ( REMOTE, ICPlayer, ( gamemodel, bplayer.name, ficsgame.gameno, BLACK, bplayer.long_name(), bplayer.getRatingForCurrentGame(), ), bplayer.long_name(), ) # She starts else: player1tup = ( LOCAL, Human, ( BLACK, bplayer.long_name(), bplayer.name, bplayer.getRatingForCurrentGame(), ), bplayer.long_name(), ) player0tup = ( REMOTE, ICPlayer, ( gamemodel, wplayer.name, ficsgame.gameno, WHITE, wplayer.long_name(), wplayer.getRatingForCurrentGame(), ), wplayer.long_name(), ) perspective = perspective_manager.get_perspective("games") if not ficsgame.board.fen: asyncio.create_task( perspective.generalStart(gamemodel, player0tup, player1tup) ) else: asyncio.create_task( perspective.generalStart( gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.fen), fen, 0, -1), ) ) def onGameModelStarted(self, gamemodel, ficsgame): self.connection.bm.onGameModelStarted(ficsgame.gameno) def onObserveGameCreated(self, bm, ficsgame): log.debug("FICS.onObserveGameCreated: %s" % ficsgame) timemodel = TimeModel(ficsgame.minutes * 60, ficsgame.inc) gamemodel = ICGameModel(self.connection, ficsgame, timemodel) gamemodel.connect("game_started", self.onGameModelStarted, ficsgame) # The players need to start listening for moves IN this method if they # want to be noticed of all moves the FICS server sends us from now on wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer player0tup = ( REMOTE, ICPlayer, ( gamemodel, wplayer.name, ficsgame.gameno, WHITE, wplayer.long_name(), wplayer.getRatingForCurrentGame(), ), wplayer.long_name(), ) player1tup = ( REMOTE, ICPlayer, ( gamemodel, bplayer.name, ficsgame.gameno, BLACK, bplayer.long_name(), bplayer.getRatingForCurrentGame(), ), bplayer.long_name(), ) perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart( gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.pgn), pgn, 0, -1), ) ) if ficsgame.relation == IC_POS_OBSERVING_EXAMINATION: if 1: # int(self.connection.lvm.variablesBackup["kibitz"]) == 0: self.connection.cm.whisper( _("You have to set kibitz on to see bot messages here.") ) self.connection.fm.finger(bplayer.name) self.connection.fm.finger(wplayer.name) elif ficsgame.relation == IC_POS_EXAMINATING: gamemodel.examined = True if not self.connection.ICC: allob = "allob " + str(ficsgame.gameno) gamemodel.connection.client.run_command(allob) def onFinger(self, fm, finger): titles = finger.getTitles() if titles is not None: name = finger.getName() player = self.connection.players.get(name) for title in titles: player.titles.add(TITLES[title]) def tooManySeeks(self, bm): label = Gtk.Label( label=_( "You may only have 3 outstanding seeks at the same time. If you want \ to add a new seek you must clear your currently active seeks. Clear your seeks?" ) ) label.set_width_chars(80) label.props.xalign = 0 label.set_line_wrap(True) def response_cb(infobar, response, message): if response == Gtk.ResponseType.YES: self.connection.client.run_command("unseek") message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.QUESTION, label, response_cb) message.add_button(InfoBarMessageButton(Gtk.STOCK_YES, Gtk.ResponseType.YES)) message.add_button(InfoBarMessageButton(Gtk.STOCK_NO, Gtk.ResponseType.NO)) self.messages.append(message) self.infobar.push_message(message) def nonoWhileExamine(self, bm): label = Gtk.Label(_("You can't touch this! You are examining a game.")) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, label, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def matchDeclined(self, bm, player): text = _(" has declined your offer for a match") content = get_infobarmessage_content(player, text) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def player_on_censor(self, bm, player): text = _(" is censoring you") content = get_infobarmessage_content(player, text) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def player_on_noplay(self, bm, player): text = _(" noplay listing you") content = get_infobarmessage_content(player, text) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def req_not_fit_formula(self, bm, player, formula): content = get_infobarmessage_content2( player, _(" uses a formula not fitting your match request:"), formula ) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def on_seek_updated(self, glm, message_text): if "manual accept" in message_text: message_text.replace("to manual accept", _("to manual accept")) elif "automatic accept" in message_text: message_text.replace("to automatic accept", _("to automatic accept")) if "rating range now" in message_text: message_text.replace("rating range now", _("rating range now")) label = Gtk.Label(label=_("Seek updated") + ": " + message_text) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, label, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def our_seeks_removed(self, glm): label = Gtk.Label(label=_("Your seeks have been removed")) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, label, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def _connect_to_player_changes(self, player): player.connect("ratings_changed", self._replace_notification_message, player) player.connect( "notify::titles", self._replace_notification_message, None, player ) def onArrivalNotification(self, cm, player): log.debug( "%s" % player, extra={"task": (self.connection.username, "onArrivalNotification")}, ) self._add_notification_message( player, _(" has arrived"), chat=True, replace=True ) if player not in self.players: self.players.append(player) self._connect_to_player_changes(player) def onDepartedNotification(self, cm, player): self._add_notification_message(player, _(" has departed"), replace=True) def user_from_notify_list_is_present(self, player): self._add_notification_message( player, _(" is present"), chat=True, replace=True ) if player not in self.players: self.players.append(player) self._connect_to_player_changes(player) def _add_notification_message(self, player, text, chat=False, replace=False): if replace: for message in self.messages: if ( isinstance(message, PlayerNotificationMessage) and message.player == player ): message.dismiss() content = get_infobarmessage_content(player, text) def response_cb(infobar, response, message): if response == 1: if player is None: return self.chat.openChatWithPlayer(player.name) if response == 2: if player is None: return self.connection.client.run_command("follow %s" % player.name) message.dismiss() # self.messages.remove(message) return False message = PlayerNotificationMessage( Gtk.MessageType.INFO, content, response_cb, player, text ) if chat: message.add_button(InfoBarMessageButton(_("Chat"), 1)) message.add_button(InfoBarMessageButton(_("Follow"), 2)) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.messages.append(message) self.infobar.push_message(message) def _replace_notification_message(self, obj, prop, rating_type, player): log.debug( f"{repr(obj)} {player}", extra={"task": (self.connection.username, "_replace_notification_message")}, ) for message in self.messages: if ( isinstance(message, PlayerNotificationMessage) and message.player == player ): message.update_content(get_infobarmessage_content(player, message.text)) return False ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9054768 pychess-1.0.5/lib/pychess/perspectives/games/0000755000175100001770000000000014614030425020633 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/__init__.py0000644000175100001770000010725214614030313022747 0ustar00runnerdocker""" The task of this perspective, is to save, load and init new games """ import os import subprocess import tempfile from collections import defaultdict from io import StringIO from gi.repository import Gtk from gi.repository import GObject from pychess.Savers.ChessFile import LoadingError from pychess.Savers import epd, fen, pgn, olv, png, database, html, txt from pychess.System import conf from pychess.System.Log import log from pychess.System.protoopen import isWriteable from pychess.System.uistuff import GladeWidgets from pychess.System.prefix import addUserConfigPrefix from pychess.Savers.pgn import parseDateTag from pychess.Utils.const import ( UNFINISHED_STATES, ABORTED, ABORTED_AGREEMENT, LOCAL, ARTIFICIAL, MENU_ITEMS, ) from pychess.Utils.Offer import Offer from pychess.widgets import gamewidget, mainwindow, new_notebook from pychess.widgets.gamenanny import game_nanny from pychess.perspectives import Perspective, perspective_manager, panel_name from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock.__init__ import CENTER, EAST, SOUTH from pychess.ic.ICGameModel import ICGameModel enddir = {} savers = (pgn, epd, fen, olv, png, html, txt) # chessalpha2 is broken saveformats = Gtk.ListStore(str, str, GObject.TYPE_PYOBJECT) exportformats = Gtk.ListStore(str, str, GObject.TYPE_PYOBJECT) auto = _("Detect type automatically") saveformats.append([auto, "", None]) exportformats.append([auto, "", None]) for saver in savers: label, ending = saver.__label__, saver.__ending__ endstr = "(%s)" % ending enddir[ending] = saver if hasattr(saver, "load"): saveformats.append([label, endstr, saver]) else: exportformats.append([label, endstr, saver]) class Games(GObject.GObject, Perspective): __gsignals__ = {"gmwidg_created": (GObject.SignalFlags.RUN_FIRST, None, (object,))} def __init__(self): GObject.GObject.__init__(self) Perspective.__init__(self, "games", _("Games")) self.notebooks = {} self.first_run = True self.gamewidgets = set() self.gmwidg_cids = {} self.board_cids = {} self.notify_cids = defaultdict(list) self.key2gmwidg = {} self.key2cid = {} self.dock = None self.dockAlign = None self.dockLocation = addUserConfigPrefix("pydock.xml") async def generalStart(self, gamemodel, player0tup, player1tup, loaddata=None): """The player tuples are: (The type af player in a System.const value, A callable creating the player, A list of arguments for the callable, A preliminary name for the player) If loaddata is specified, it should be a tuple of: (A text uri or fileobj, A Savers.something module with a load function capable of loading it, An int of the game in file you want to load, The position from where to start the game) """ log.debug(f"Games.generalStart: {gamemodel}\n {player0tup}\n {player1tup}") gmwidg = gamewidget.GameWidget(gamemodel, self) self.gamewidgets.add(gmwidg) self.gmwidg_cids[gmwidg] = gmwidg.connect("game_close_clicked", self.closeGame) # worker.publish((gmwidg,gamemodel)) self.attachGameWidget(gmwidg) game_nanny.nurseGame(gmwidg, gamemodel) log.debug("Games.generalStart: -> emit gmwidg_created: %s" % (gmwidg)) self.emit("gmwidg_created", gmwidg) log.debug("Games.generalStart: <- emit gmwidg_created: %s" % (gmwidg)) # Initing players def xxxset_name(none, player, key, alt): player.setName(conf.get(key, alt)) players = [] for i, playertup in enumerate((player0tup, player1tup)): type, func, args, prename = playertup if type != LOCAL: if type == ARTIFICIAL: player = await func(*args) else: player = func(*args) players.append(player) # if type == ARTIFICIAL: # def readyformoves (player, color): # gmwidg.setTabText(gmwidg.display_text)) # players[i].connect("readyForMoves", readyformoves, i) else: # Until PyChess has a proper profiles system, as discussed on the # issue tracker, we need to give human players special treatment player = func(gmwidg, *args) players.append(player) assert len(players) == 2 if player0tup[0] == ARTIFICIAL and player1tup[0] == ARTIFICIAL: def emit_action(board, action, player, param, gmwidg): if gmwidg.isInFront(): gamemodel.curplayer.emit("offer", Offer(action, param=param)) self.board_cids[gmwidg.board] = gmwidg.board.connect( "action", emit_action, gmwidg ) log.debug("Games.generalStart: -> gamemodel.setPlayers(): %s" % (gamemodel)) gamemodel.setPlayers(players) log.debug("Games.generalStart: <- gamemodel.setPlayers(): %s" % (gamemodel)) # Forward information from the engines for playertup, tagname in ((player0tup, "WhiteElo"), (player1tup, "BlackElo")): if playertup[0] == ARTIFICIAL: elo = playertup[2][0].get("elo") if elo: gamemodel.tags[tagname] = elo # Starting if loaddata: try: uri, loader, gameno, position = loaddata gamemodel.loadAndStart(uri, loader, gameno, position) if position != gamemodel.ply and position != -1: gmwidg.board.view.shown = position except LoadingError as e: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, ) d.set_markup(_("Error loading game")) d.format_secondary_text(", ".join(str(a) for a in e.args)) d.show() d.destroy() else: if gamemodel.variant.need_initial_board: for player in gamemodel.players: player.setOptionInitialBoard(gamemodel) log.debug("Games..generalStart: -> gamemodel.start(): %s" % (gamemodel)) gamemodel.emit("game_loaded", "") gamemodel.start() log.debug("Games.generalStart: <- gamemodel.start(): %s" % (gamemodel)) log.debug( "Games.generalStart: returning gmwidg=%s\n gamemodel=%s" % (gmwidg, gamemodel) ) ################################################################################ # Saving # ################################################################################ def saveGame(self, game, position=None): if not game.isChanged(): return if game.uri and isWriteable(game.uri): self.saveGameSimple(game.uri, game, position=position) else: return self.saveGameAs(game, position=position) def saveGameSimple(self, uri, game, position=None): ending = os.path.splitext(uri)[1] if not ending: return saver = enddir[ending[1:]] game.save(uri, saver, append=False, position=position) def saveGamePGN(self, game): if conf.get("saveOwnGames") and not game.hasLocalPlayer(): return True filename = conf.get("autoSaveFormat") filename = filename.replace("#n1", game.tags["White"]) filename = filename.replace("#n2", game.tags["Black"]) year, month, day = parseDateTag(game.tags["Date"]) year = "" if year is None else str(year) month = "" if month is None else str(month) day = "" if day is None else str(day) filename = filename.replace("#y", "%s" % year) filename = filename.replace("#m", "%s" % month) filename = filename.replace("#d", "%s" % day) pgn_path = conf.get("autoSavePath") + "/" + filename + ".pgn" append = True try: if not os.path.isfile(pgn_path): # create new file with open(pgn_path, "w"): pass base_offset = os.path.getsize(pgn_path) # save to .sqlite database_path = os.path.splitext(pgn_path)[0] + ".sqlite" database.save(database_path, game, base_offset) # save to .scout from pychess.Savers.pgn import scoutfish_path if scoutfish_path is not None: pgn_text = pgn.save(StringIO(), game) tmp = tempfile.NamedTemporaryFile( mode="w", encoding="utf-8", delete=False ) pgnfile = tmp.name with tmp.file as f: f.write(pgn_text) # create new .scout from pgnfile we are importing args = [scoutfish_path, "make", pgnfile, "%s" % base_offset] output = subprocess.check_output(args, stderr=subprocess.STDOUT) # append it to our existing one if output.decode().find("Processing...done") > 0: old_scout = os.path.splitext(pgn_path)[0] + ".scout" new_scout = os.path.splitext(pgnfile)[0] + ".scout" with open(old_scout, "ab") as file1, open(new_scout, "rb") as file2: file1.write(file2.read()) # TODO: do we realy want to update .bin ? It can be huge/slow! # save to .pgn game.save(pgn_path, pgn, append) return True except OSError: return False def saveGameAs(self, game, position=None, export=False): savedialog, savecombo = get_save_dialog(export) # Keep running the dialog until the user has canceled it or made an error # free operation title = _("Save Game") if not export else _("Export position") savedialog.set_title(title) while True: filename = f"{game.players[0]}-{game.players[1]}" savedialog.set_current_name(filename.replace(" ", "_")) res = savedialog.run() if res != Gtk.ResponseType.ACCEPT: break uri = savedialog.get_filename() ending = os.path.splitext(uri)[1] if ending.startswith("."): ending = ending[1:] append = False index = savecombo.get_active() if index == 0: if ending not in enddir: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) folder, file = os.path.split(uri) d.set_markup(_("Unknown file type '%s'") % ending) d.format_secondary_text( _( "Was unable to save '%(uri)s' as PyChess doesn't know the format '%(ending)s'." ) % {"uri": uri, "ending": ending} ) d.run() d.destroy() continue else: saver = enddir[ending] else: format = exportformats[index] if export else saveformats[index] saver = format[2] if ending not in enddir or not saver == enddir[ending]: uri += ".%s" % saver.__ending__ if os.path.isfile(uri) and not os.access(uri, os.W_OK): d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK ) d.set_markup(_("Unable to save file '%s'") % uri) d.format_secondary_text( _( "You don't have the necessary rights to save the file.\n\ Please ensure that you have given the right path and try again." ) ) d.run() d.destroy() continue if os.path.isfile(uri): d = Gtk.MessageDialog(mainwindow(), type=Gtk.MessageType.QUESTION) d.add_buttons( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, _("_Replace"), Gtk.ResponseType.ACCEPT, ) if saver.__append__: d.add_buttons(Gtk.STOCK_ADD, 1) d.set_title(_("File exists")) folder, file = os.path.split(uri) d.set_markup( _( "A file named '%s' already exists. Would you like to replace it?" ) % file ) d.format_secondary_text( _( "The file already exists in '%s'. If you replace it, its content will be overwritten." ) % folder ) replaceRes = d.run() d.destroy() if replaceRes == 1: append = True elif replaceRes == Gtk.ResponseType.CANCEL: continue else: print(repr(uri)) try: flip = self.cur_gmwidg().board.view.rotation > 0 game.save(uri, saver, append, position, flip) except OSError as e: d = Gtk.MessageDialog(mainwindow(), type=Gtk.MessageType.ERROR) d.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK) d.set_title(_("Could not save the file")) d.set_markup( _("PyChess was not able to save the game") ) d.format_secondary_text( _("The error was: %s") % ", ".join(str(a) for a in e.args) ) d.run() d.destroy() continue break savedialog.destroy() return res ################################################################################ # Closing # ################################################################################ def closeAllGames(self, gamewidgets): log.debug("Games.closeAllGames") response = None changedPairs = [ (gmwidg, gmwidg.gamemodel) for gmwidg in gamewidgets if gmwidg.gamemodel.isChanged() ] if len(changedPairs) == 0: response = Gtk.ResponseType.OK elif len(changedPairs) == 1: response = self.closeGame(changedPairs[0][0]) else: markup = ( "" + ngettext( "There is %d game with unsaved moves.", "There are %d games with unsaved moves.", len(changedPairs), ) % len(changedPairs) + " " + _("Save moves before closing?") + "" ) for gmwidg, game in changedPairs: if not gmwidg.gamemodel.isChanged(): response = Gtk.ResponseType.OK else: if conf.get("autoSave"): x = self.saveGamePGN(game) if x: response = Gtk.ResponseType.OK else: response = None markup = ( "" + _( "Unable to save to configured file. \ Save the games before closing?" ) + "" ) break if response is None: widgets = GladeWidgets("saveGamesDialog.glade") dialog = widgets["saveGamesDialog"] heading = widgets["saveGamesDialogHeading"] saveLabel = widgets["saveGamesDialogSaveLabel"] treeview = widgets["saveGamesDialogTreeview"] heading.set_markup(markup) liststore = Gtk.ListStore(bool, str) treeview.set_model(liststore) renderer = Gtk.CellRendererToggle() renderer.props.activatable = True treeview.append_column(Gtk.TreeViewColumn("", renderer, active=0)) treeview.append_column( Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=1) ) for gmwidg, game in changedPairs: liststore.append( ( True, "{} {} {}".format( game.players[0], _("vs."), game.players[1] ), ) ) def callback(cell, path): if path: liststore[path][0] = not liststore[path][0] saves = len(tuple(row for row in liststore if row[0])) saveLabel.set_text( ngettext("_Save %d document", "_Save %d documents", saves) % saves ) saveLabel.set_use_underline(True) renderer.connect("toggled", callback) callback(None, None) while True: response = dialog.run() if response == Gtk.ResponseType.YES: for i in range(len(liststore) - 1, -1, -1): checked, name = liststore[i] if checked: cgmwidg, cgame = changedPairs[i] if self.saveGame(cgame) == Gtk.ResponseType.ACCEPT: liststore.remove(liststore.get_iter((i,))) del changedPairs[i] if cgame.status in UNFINISHED_STATES: cgame.end(ABORTED, ABORTED_AGREEMENT) cgame.terminate() self.delGameWidget(cgmwidg) else: break else: break else: break dialog.destroy() if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL): pairs = [(gmwidg, gmwidg.gamemodel) for gmwidg in gamewidgets] for gmwidg, game in pairs: if game.status in UNFINISHED_STATES: game.end(ABORTED, ABORTED_AGREEMENT) game.terminate() if gmwidg.notebookKey in self.key2gmwidg: self.delGameWidget(gmwidg) return response def closeGame(self, gmwidg): log.debug("Games.closeGame") response = None if not gmwidg.gamemodel.isChanged(): response = Gtk.ResponseType.OK else: markup = ( "" + _("Save the current game before you close it?") + "" ) if conf.get("autoSave"): x = self.saveGamePGN(gmwidg.gamemodel) if x: response = Gtk.ResponseType.OK else: markup = ( "" + _( "Unable to save to configured file. \ Save the current game before you close it?" ) + "" ) if response is None: d = Gtk.MessageDialog(mainwindow(), type=Gtk.MessageType.WARNING) d.add_button(_("Close _without Saving"), Gtk.ResponseType.OK) d.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) if gmwidg.gamemodel.uri: d.add_button(Gtk.STOCK_SAVE, Gtk.ResponseType.YES) else: d.add_button(Gtk.STOCK_SAVE_AS, Gtk.ResponseType.YES) gmwidg.bringToFront() d.set_markup(markup) d.format_secondary_text( _( "It is not possible later to continue the game,\nif you don't save it." ) ) response = d.run() d.destroy() if response == Gtk.ResponseType.YES: # Test if cancel was pressed in the save-file-dialog if self.saveGame(gmwidg.gamemodel) != Gtk.ResponseType.ACCEPT: response = Gtk.ResponseType.CANCEL if response not in (Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL): if gmwidg.gamemodel.status in UNFINISHED_STATES: gmwidg.gamemodel.end(ABORTED, ABORTED_AGREEMENT) gmwidg.disconnect(self.gmwidg_cids[gmwidg]) del self.gmwidg_cids[gmwidg] for cid in self.notify_cids[gmwidg]: conf.notify_remove(cid) del self.notify_cids[gmwidg] if gmwidg.board in self.board_cids: gmwidg.board.disconnect(self.board_cids[gmwidg.board]) del self.board_cids[gmwidg.board] self.delGameWidget(gmwidg) self.gamewidgets.remove(gmwidg) gmwidg.gamemodel.terminate() db_persp = perspective_manager.get_perspective("database") if len(self.gamewidgets) == 0: for widget in MENU_ITEMS: if ( widget in ("copy_pgn", "copy_fen") and db_persp.preview_panel is not None ): continue gamewidget.getWidgets()[widget].set_property("sensitive", False) return response def delGameWidget(self, gmwidg): """Remove the widget from the GUI after the game has been terminated""" log.debug("Games.delGameWidget: starting %s" % repr(gmwidg)) gmwidg.closed = True gmwidg.emit("closed") called_from_preferences = False window_list = Gtk.Window.list_toplevels() widgets = gamewidget.getWidgets() for window in window_list: if window.is_active() and window == widgets["preferences"]: called_from_preferences = True break pageNum = gmwidg.getPageNumber() headbook = self.getheadbook() if gmwidg.notebookKey in self.key2gmwidg: del self.key2gmwidg[gmwidg.notebookKey] if gmwidg.notebookKey in self.key2cid: headbook.disconnect(self.key2cid[gmwidg.notebookKey]) del self.key2cid[gmwidg.notebookKey] headbook.remove_page(pageNum) for notebook in self.notebooks.values(): notebook.remove_page(pageNum) if headbook.get_n_pages() == 1 and conf.get("hideTabs"): self.show_tabs(False) if headbook.get_n_pages() == 0: if not called_from_preferences: # If the last (but not the designGW) gmwidg was closed # and we are FICS-ing, present the FICS lounge perspective_manager.disable_perspective("games") gmwidg._del() def init_layout(self): perspective_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) perspective_manager.set_perspective_widget("games", perspective_widget) self.notebooks = { "board": new_notebook("board"), "buttons": new_notebook("buttons"), "messageArea": new_notebook("messageArea"), } self.main_notebook = self.notebooks["board"] for panel in self.sidePanels: self.notebooks[panel_name(panel.__name__)] = new_notebook( panel_name(panel.__name__) ) # Initing headbook align = gamewidget.createAlignment(4, 4, 0, 4) align.set_property("yscale", 0) headbook = Gtk.Notebook() headbook.set_name("headbook") headbook.set_scrollable(True) align.add(headbook) perspective_widget.pack_start(align, False, True, 0) self.show_tabs(not conf.get("hideTabs")) # Initing center centerVBox = Gtk.VBox() # The dock self.dock = PyDockTop("main", self) self.dockAlign = gamewidget.createAlignment(4, 4, 0, 4) self.dockAlign.add(self.dock) centerVBox.pack_start(self.dockAlign, True, True, 0) self.dockAlign.show() self.dock.show() self.docks["board"] = (Gtk.Label(label="Board"), self.notebooks["board"], None) for panel in self.sidePanels: self.docks[panel_name(panel.__name__)][1] = self.notebooks[ panel_name(panel.__name__) ] self.load_from_xml() # Default layout of side panels first_time_layout = False if not os.path.isfile(self.dockLocation): first_time_layout = True leaf = self.dock.dock( self.docks["board"][1], CENTER, Gtk.Label(label=self.docks["board"][0]), "board", ) self.docks["board"][1].show_all() leaf.setDockable(False) # S epanel = leaf.dock( self.docks["bookPanel"][1], SOUTH, self.docks["bookPanel"][0], "bookPanel", ) epanel.default_item_height = 45 epanel = epanel.dock( self.docks["engineOutputPanel"][1], CENTER, self.docks["engineOutputPanel"][0], "engineOutputPanel", ) # NE leaf = leaf.dock( self.docks["annotationPanel"][1], EAST, self.docks["annotationPanel"][0], "annotationPanel", ) leaf = leaf.dock( self.docks["historyPanel"][1], CENTER, self.docks["historyPanel"][0], "historyPanel", ) leaf = leaf.dock( self.docks["scorePanel"][1], CENTER, self.docks["scorePanel"][0], "scorePanel", ) # SE leaf = leaf.dock( self.docks["chatPanel"][1], SOUTH, self.docks["chatPanel"][0], "chatPanel", ) leaf = leaf.dock( self.docks["commentPanel"][1], CENTER, self.docks["commentPanel"][0], "commentPanel", ) def unrealize(dock, notebooks): # unhide the panel before saving so its configuration is saved correctly self.notebooks["board"].get_parent().get_parent().zoomDown() dock.saveToXML(self.dockLocation) dock._del() self.dock.connect("unrealize", unrealize, self.notebooks) hbox = Gtk.HBox() # Buttons self.notebooks["buttons"].set_border_width(4) hbox.pack_start(self.notebooks["buttons"], False, True, 0) # The message area # TODO: If you try to fix this first read issue #958 and 1018 align = gamewidget.createAlignment(0, 0, 0, 0) # sw = Gtk.ScrolledWindow() # port = Gtk.Viewport() # port.add(self.notebooks["messageArea"]) # sw.add(port) # align.add(sw) align.add(self.notebooks["messageArea"]) hbox.pack_start(align, True, True, 0) def ma_switch_page(notebook, gpointer, page_num): notebook.props.visible = ( notebook.get_nth_page(page_num).get_child().props.visible ) self.notebooks["messageArea"].connect("switch-page", ma_switch_page) centerVBox.pack_start(hbox, False, True, 0) perspective_widget.pack_start(centerVBox, True, True, 0) centerVBox.show_all() perspective_widget.show_all() perspective_manager.set_perspective_menuitems( "games", self.menuitems, default=first_time_layout ) conf.notify_add("hideTabs", self.tabsCallback) # Connecting headbook to other notebooks def hb_switch_page(notebook, gpointer, page_num): for notebook in self.notebooks.values(): notebook.set_current_page(page_num) gmwidg = self.key2gmwidg[self.getheadbook().get_nth_page(page_num)] if isinstance(gmwidg.gamemodel, ICGameModel): primary = "primary " + str(gmwidg.gamemodel.ficsgame.gameno) gmwidg.gamemodel.connection.client.run_command(primary) headbook.connect("switch-page", hb_switch_page) if hasattr(headbook, "set_tab_reorderable"): def page_reordered(widget, child, new_num, headbook): old_num = self.notebooks["board"].page_num( self.key2gmwidg[child].boardvbox ) if old_num == -1: log.error("Games and labels are out of sync!") else: for notebook in self.notebooks.values(): notebook.reorder_child(notebook.get_nth_page(old_num), new_num) headbook.connect("page-reordered", page_reordered, headbook) def adjust_divider(self, diff): """Try to move paned (containing board) divider to show/hide captured pieces""" if self.dock is None: return child = self.dock.get_children()[0] c1 = child.paned.get_child1() if hasattr(c1, "paned"): c1.paned.set_position(c1.paned.get_position() + diff) else: child.paned.set_position(child.paned.get_position() + diff) def getheadbook(self): if len(self.key2gmwidg) == 0: return None headbook = self.widget.get_children()[0].get_children()[0].get_child() # to help StoryText create widget description # headbook.get_tab_label_text = customGetTabLabelText return headbook def cur_gmwidg(self): if len(self.key2gmwidg) == 0: return None headbook = self.getheadbook() notebookKey = headbook.get_nth_page(headbook.get_current_page()) return self.key2gmwidg[notebookKey] def customGetTabLabelText(self, child): gmwidg = self.key2gmwidg[child] return gmwidg.display_text def zoomToBoard(self, view_zoomed): if not self.notebooks["board"].get_parent(): return if view_zoomed: self.notebooks["board"].get_parent().get_parent().zoomUp() else: self.notebooks["board"].get_parent().get_parent().zoomDown() def show_tabs(self, show): head = self.getheadbook() if head is None: return head.set_show_tabs(show) def tabsCallback(self, widget): head = self.getheadbook() if not head: return if head.get_n_pages() == 1: self.show_tabs(not conf.get("hideTabs")) def attachGameWidget(self, gmwidg): log.debug("attachGameWidget: %s" % gmwidg) if self.first_run: self.init_layout() self.first_run = False perspective_manager.activate_perspective("games") gmwidg.panels = [panel.Sidepanel().load(gmwidg) for panel in self.sidePanels] self.key2gmwidg[gmwidg.notebookKey] = gmwidg headbook = self.getheadbook() headbook.append_page(gmwidg.notebookKey, gmwidg.tabcontent) gmwidg.notebookKey.show_all() if hasattr(headbook, "set_tab_reorderable"): headbook.set_tab_reorderable(gmwidg.notebookKey, True) def callback(notebook, gpointer, page_num, gmwidg): if notebook.get_nth_page(page_num) == gmwidg.notebookKey: gmwidg.infront() if gmwidg.gamemodel.players and gmwidg.gamemodel.isObservationGame(): gmwidg.light_on_off(False) text = gmwidg.game_info_label.get_text() gmwidg.game_info_label.set_markup( '%s' % text ) self.key2cid[gmwidg.notebookKey] = headbook.connect_after( "switch-page", callback, gmwidg ) gmwidg.infront() align = gamewidget.createAlignment(0, 0, 0, 0) align.show() align.add(gmwidg.infobar) self.notebooks["messageArea"].append_page(align, None) self.notebooks["board"].append_page(gmwidg.boardvbox, None) gmwidg.boardvbox.show_all() for panel, instance in zip(self.sidePanels, gmwidg.panels): self.notebooks[panel_name(panel.__name__)].append_page(instance, None) instance.show_all() self.notebooks["buttons"].append_page(gmwidg.stat_hbox, None) gmwidg.stat_hbox.show_all() if headbook.get_n_pages() == 1: self.show_tabs(not conf.get("hideTabs")) else: # We should always show tabs if more than one exists self.show_tabs(True) headbook.set_current_page(-1) widgets = gamewidget.getWidgets() if headbook.get_n_pages() == 1 and not widgets["show_sidepanels"].get_active(): self.zoomToBoard(True) def get_save_dialog(export=False): savedialog = Gtk.FileChooserDialog( "", mainwindow(), Gtk.FileChooserAction.SAVE, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.ACCEPT, ), ) savedialog.set_current_folder(os.path.expanduser("~")) # Add widgets to the savedialog savecombo = Gtk.ComboBox() savecombo.set_name("savecombo") crt = Gtk.CellRendererText() savecombo.pack_start(crt, True) savecombo.add_attribute(crt, "text", 0) crt = Gtk.CellRendererText() savecombo.pack_start(crt, False) savecombo.add_attribute(crt, "text", 1) if export: savecombo.set_model(exportformats) else: savecombo.set_model(saveformats) savecombo.set_active(1) # pgn savedialog.set_extra_widget(savecombo) return savedialog, savecombo def get_open_dialog(): opendialog = Gtk.FileChooserDialog( _("Open chess file"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) opendialog.set_show_hidden(True) opendialog.set_select_multiple(True) # All chess files filter all_filter = Gtk.FileFilter() all_filter.set_name(_("All Chess Files")) opendialog.add_filter(all_filter) opendialog.set_filter(all_filter) # Specific filters and save formats for ending, saver in enddir.items(): label = saver.__label__ endstr = "(%s)" % ending f = Gtk.FileFilter() f.set_name(label + " " + endstr) if hasattr(saver, "load"): f.add_pattern("*." + ending) all_filter.add_pattern("*." + ending) opendialog.add_filter(f) return opendialog ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/annotationPanel.py0000644000175100001770000015161114614030313024340 0ustar00runnerdockerimport re from math import floor from gi.repository import Gtk from gi.repository import Pango from gi.repository import Gdk from pychess.Utils import prettyPrintScore from pychess.Utils.const import ( WHITE, BLACK, FEN_EMPTY, reprResult, reprSign, FAN_PIECES, ) from pychess.System import conf from pychess.System.prefix import addDataPrefix from pychess.Utils.Cord import Cord from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import toSAN, toFAN, FCORD, TCORD from pychess.Savers.pgn import move_count, nag2symbol, parseTimeControlTag from pychess.widgets.ChessClock import formatTime from pychess.widgets.LearnInfoBar import LearnInfoBar from pychess.widgets import insert_formatted, preferencesDialog, mainwindow from pychess.widgets.Background import isDarkTheme # --- Constants __title__ = _("Annotation") __active__ = True __icon__ = addDataPrefix("glade/panel_annotation.svg") __desc__ = _("Annotated game") EMPTY_BOARD = LBoard() EMPTY_BOARD.applyFen(FEN_EMPTY) css = """ GtkButton#rounded { border-radius: 20px; } """ def add_provider(widget): screen = widget.get_screen() style = widget.get_style_context() provider = Gtk.CssProvider() provider.load_from_data(css.encode("utf-8")) style.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) # -- Documentation """ We are maintaining a list of nodes to help manipulate the textbuffer. Node can represent a move, comment or variation (start/end) marker. Nodes are dicts with keys like: board = in move node it's the lboard of move in comment node it's the lboard where the comment belongs to in end variation marker node it's the first lboard of the variation in start variation marker is's None start = the beginning offest of the node in the textbuffer end = the ending offest of the node in the textbuffer parent = the parent lboard if the node is a move in a variation, otherwise None vari = in end variation node it's the start variation marker node in start variation node it's None level = depth in variation tree (0 for mainline nodes, 1 for first level variation moves, etc.) index = in comment nodes the index of comment if more exist for a move """ # -- Widget class Sidepanel: def load(self, gmwidg): """ The method initializes the widget, attached events, internal variables, layout... """ # Internal variables self.nodelist = [] self.boardview = gmwidg.board.view self.gamemodel = gmwidg.gamemodel self.variation_to_remove = None if self.gamemodel is None: return None # Internal objects/helpers self.cursor_standard = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) self.cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2) # Header text area self.header_textview = Gtk.TextView() self.header_textview.set_wrap_mode(Gtk.WrapMode.WORD) self.header_textview.set_editable(False) self.header_textview.set_cursor_visible(False) self.header_textbuffer = self.header_textview.get_buffer() # Header text tags self.header_textbuffer.create_tag("head1") self.header_textbuffer.create_tag("head2", weight=Pango.Weight.BOLD) # Move text area self.textview = Gtk.TextView() self.textview.set_wrap_mode(Gtk.WrapMode.WORD) self.textbuffer = self.textview.get_buffer() # Load of the preferences def cb_config_changed(*args): self.fetch_chess_conf() self.tag_move.set_property("font_desc", self.font) for i in range(len(self.tag_vari_depth)): self.tag_vari_depth[i].set_property("font_desc", self.font) self.update() self.fetch_chess_conf() self.cids_conf = [] self.cids_conf.append(conf.notify_add("movetextFont", cb_config_changed)) self.cids_conf.append(conf.notify_add("figuresInNotation", cb_config_changed)) self.cids_conf.append(conf.notify_add("showEmt", cb_config_changed)) self.cids_conf.append(conf.notify_add("showBlunder", cb_config_changed)) self.cids_conf.append(conf.notify_add("showEval", cb_config_changed)) # Move text tags self.tag_remove_variation = self.textbuffer.create_tag("remove-variation") self.tag_new_line = self.textbuffer.create_tag("new_line") self.tag_move = self.textbuffer.create_tag("move", font_desc=self.font) palette = self.get_palette() self.tag_vari_depth = [] for i in range(64): tag = self.textbuffer.create_tag( "variation-depth-%d" % i, font_desc=self.font, foreground=palette[i % len(palette)], style="italic", left_margin=15 * (i + 1), ) self.tag_vari_depth.append(tag) self.textbuffer.create_tag("scored0") self.textbuffer.create_tag("scored1", foreground_rgba=Gdk.RGBA(0.2, 0, 0, 1)) self.textbuffer.create_tag("scored2", foreground_rgba=Gdk.RGBA(0.4, 0, 0, 1)) self.textbuffer.create_tag("scored3", foreground_rgba=Gdk.RGBA(0.6, 0, 0, 1)) self.textbuffer.create_tag("scored4", foreground_rgba=Gdk.RGBA(0.8, 0, 0, 1)) self.textbuffer.create_tag("scored5", foreground_rgba=Gdk.RGBA(1.0, 0, 0, 1)) self.textbuffer.create_tag("emt", foreground="grey") self.textbuffer.create_tag("comment", foreground="#6e71ec") self.textbuffer.create_tag( "lesson-comment", foreground="green", font_desc=self.font ) self.textbuffer.create_tag("margin", left_margin=4) self.selected_tag = self.textbuffer.create_tag( "selected", background_full_height=True, background=self.get_slected_background(), ) # Events self.cids_textview = [ self.textview.connect("motion-notify-event", self.motion_notify_event), self.textview.connect("button-press-event", self.button_press_event), self.textview.connect("style-updated", self.on_style_updated), ] self.cid_shown_changed = self.boardview.connect( "shownChanged", self.on_shownChanged ) self.cid_remove_variation = self.tag_remove_variation.connect( "event", self.tag_event_handler ) self.cids_gamemodel = [ self.gamemodel.connect_after("game_loaded", self.on_game_loaded), self.gamemodel.connect_after("game_changed", self.on_game_changed), self.gamemodel.connect_after("game_started", self.update), self.gamemodel.connect_after("game_ended", self.update), self.gamemodel.connect_after("moves_undone", self.on_moves_undone), self.gamemodel.connect_after("variation_undone", self.update), self.gamemodel.connect_after("opening_changed", self.update), self.gamemodel.connect_after("players_changed", self.on_players_changed), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), self.gamemodel.connect("variation_added", self.variation_added), self.gamemodel.connect("variation_extended", self.variation_extended), self.gamemodel.connect("analysis_changed", self.analysis_changed), self.gamemodel.connect("analysis_finished", self.update), ] if self.gamemodel.lesson_game: self.cids_gamemodel.append( self.gamemodel.connect_after("learn_success", self.on_learn_success) ) # Layout __widget__ = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) __widget__.set_spacing(3) __widget__.pack_start(self.header_textview, False, False, 0) __widget__.pack_start(Gtk.Separator(), False, False, 0) self.choices_box = Gtk.Box() self.choices_box.connect("realize", add_provider) __widget__.pack_start(self.choices_box, False, False, 0) self.choices_enabled = True sw = Gtk.ScrolledWindow() sw.add(self.textview) __widget__.pack_start(sw, True, True, 0) if self.gamemodel.practice_game or self.gamemodel.lesson_game: self.infobar = LearnInfoBar(self.gamemodel, gmwidg.board, self) self.boardview.infobar = self.infobar __widget__.pack_start(self.infobar, False, False, 0) return __widget__ def fetch_chess_conf(self): """ The method retrieves few parameters from the configuration. """ self.fan = conf.get("figuresInNotation") movetext_font = conf.get("movetextFont") self.font = Pango.font_description_from_string(movetext_font) self.showEmt = conf.get("showEmt") self.showBlunder = ( conf.get("showBlunder") and not self.gamemodel.isPlayingICSGame() ) self.showEval = conf.get("showEval") and not self.gamemodel.isPlayingICSGame() def on_game_terminated(self, model): """ The method disconnects all the created events when the widget is destroyed at the end of the game. """ for cid in self.cids_textview: self.textview.disconnect(cid) self.boardview.disconnect(self.cid_shown_changed) self.tag_remove_variation.disconnect(self.cid_remove_variation) for cid in self.cids_gamemodel: self.gamemodel.disconnect(cid) for cid in self.cids_conf: conf.notify_remove(cid) def get_palette(self): if isDarkTheme(self.textview): palette = [ "#e5e5e5", "#35e119", "#ee3e34", "#24c6ee", "#a882bc", "#f09243", "#e475e5", "#c0c000", ] # white, green, red, aqua, purple, orange, fuchsia, ochre else: palette = [ "#4b4b4b", "#51a745", "#ee3e34", "#3965a8", "#a882bc", "#f09243", "#772120", "#c0c000", ] # black, green, red, blue, purple, orange, brown, ochre return palette def get_slected_background(self): return "grey" if isDarkTheme(self.textview) else "lightgrey" def on_style_updated(self, widget): palette = self.get_palette() for i in range(64): self.tag_vari_depth[i].set_property("foreground", palette[i % len(palette)]) self.selected_tag.set_property("background", self.get_slected_background()) def tag_event_handler(self, tag, widget, event, iter): """ The method handles the event specific to a tag, which is further processed by the button event of the main widget. """ if (event.type == Gdk.EventType.BUTTON_PRESS) and ( tag.get_property("name") == "remove-variation" ): offset = iter.get_offset() node = None for n in self.nodelist: if offset >= n["start"] and offset < n["end"]: node = n break if node is None: return self.variation_to_remove = node return False def motion_notify_event(self, widget, event): """ The method defines the applicable cursor (standard/hand) """ if self.textview.get_window_type(event.window) not in ( Gtk.TextWindowType.TEXT, Gtk.TextWindowType.PRIVATE, ): event.window.set_cursor(self.cursor_standard) return True if event.is_hint: # (x, y, state) = event.window.get_pointer() (ign, x, y, state) = event.window.get_pointer() else: x = event.x y = event.y # state = event.get_state() (x, y) = self.textview.window_to_buffer_coords( Gtk.TextWindowType.WIDGET, int(x), int(y) ) ret = self.textview.get_iter_at_position(x, y) if len(ret) == 3: pos_is_over_text, it_at_pos, trailing = ret else: it_at_pos, trailing = ret if it_at_pos.get_child_anchor() is not None: event.window.set_cursor(self.cursor_hand) return True it = self.textview.get_iter_at_location(x, y) # https://gramps-project.org/bugs/view.php?id=9335 if isinstance(it, Gtk.TextIter): offset = it.get_offset() else: offset = it[1].get_offset() for node in self.nodelist: if offset >= node["start"] and offset < node["end"] and "vari" not in node: event.window.set_cursor(self.cursor_hand) return True event.window.set_cursor(self.cursor_standard) return True def button_press_event(self, widget, event): """ The method handles the click made on the widget, like showing the board editing a comment, or showing a local popup-menu. """ # Detection of the node with the coordinates of the mouse (wx, wy) = event.get_coords() (x, y) = self.textview.window_to_buffer_coords( Gtk.TextWindowType.WIDGET, int(wx), int(wy) ) it = self.textview.get_iter_at_location(x, y) # https://gramps-project.org/bugs/view.php?id=9335 if isinstance(it, Gtk.TextIter): offset = it.get_offset() else: offset = it[1].get_offset() node = None for n in self.nodelist: if offset >= n["start"] and offset < n["end"]: node = n board = node["board"] break if node is None: return True # print("-------------------------------------------------------") # print("index is:", self.nodelist.index(node)) # print(node) # print("-------------------------------------------------------") # Left click if event.button == 1: if "vari" in node: if self.variation_to_remove is not None: node = self.variation_to_remove self.remove_variation(node) self.gamemodel.remove_variation(node["board"], node["parent"]) self.variation_to_remove = None return True elif "comment" in node: self.menu_edit_comment(board=board, index=node["index"]) else: self.boardview.setShownBoard(board.pieceBoard) # Right click elif event.button == 3: self.menu = Gtk.Menu() if node is not None: position = -1 for index, child in enumerate(board.children): if isinstance(child, str): position = index break menuitem = Gtk.MenuItem(_("Refresh")) menuitem.connect("activate", self.menu_refresh) self.menu.append(menuitem) if ( len(self.gamemodel.boards) > 1 and board == self.gamemodel.boards[1].board and not self.gamemodel.boards[0].board.children ): menuitem = Gtk.MenuItem(_("Add start comment")) menuitem.connect( "activate", self.menu_edit_comment, self.gamemodel.boards[0].board, 0, ) self.menu.append(menuitem) if position == -1: menuitem = Gtk.MenuItem(_("Add comment")) menuitem.connect("activate", self.menu_edit_comment, board, 0) else: menuitem = Gtk.MenuItem(_("Edit comment")) menuitem.connect( "activate", self.menu_edit_comment, board, position ) self.menu.append(menuitem) symbol_menu1 = Gtk.Menu() for nag, menutext in ( ("$1", _("Good move")), ("$2", _("Bad move")), ("$3", _("Excellent move")), ("$4", _("Very bad move")), ("$5", _("Interesting move")), ("$6", _("Suspicious move")), ("$7", _("Forced move")), ): menuitem = Gtk.MenuItem(f"{nag2symbol(nag)} {menutext}") menuitem.connect("activate", self.menu_move_attribute, board, nag) symbol_menu1.append(menuitem) menuitem = Gtk.MenuItem(_("Add move symbol")) menuitem.set_submenu(symbol_menu1) self.menu.append(menuitem) symbol_menu2 = Gtk.Menu() for nag, menutext in ( ("$10", _("Drawish")), ("$13", _("Unclear position")), ("$14", _("Slight advantage")), ("$16", _("Moderate advantage")), ("$18", _("Decisive advantage")), ("$20", _("Crushing advantage")), ("$22", _("Zugzwang")), ("$32", _("Development advantage")), ("$36", _("Initiative")), ("$40", _("With attack")), ("$44", _("Compensation")), ("$132", _("Counterplay")), ("$138", _("Time pressure")), ): menuitem = Gtk.MenuItem(f"{nag2symbol(nag)} {menutext}") menuitem.connect( "activate", self.menu_position_attribute, board, nag ) symbol_menu2.append(menuitem) menuitem = Gtk.MenuItem(_("Add evaluation symbol")) menuitem.set_submenu(symbol_menu2) self.menu.append(menuitem) self.menu.append(Gtk.SeparatorMenuItem()) removals_menu = Gtk.Menu() menuitem = Gtk.MenuItem(_("Comment")) menuitem.connect("activate", self.menu_delete_comment, board, position) removals_menu.append(menuitem) menuitem = Gtk.MenuItem(_("Symbols")) menuitem.connect("activate", self.menu_remove_symbols, board) removals_menu.append(menuitem) menuitem = Gtk.MenuItem(_("All the evaluations")) menuitem.connect("activate", self.menu_reset_evaluations) removals_menu.append(menuitem) menuitem = Gtk.MenuItem(_("Remove")) menuitem.set_submenu(removals_menu) self.menu.append(menuitem) self.menu.show_all() self.menu.popup(None, None, None, None, event.button, event.time) return True def menu_refresh(self, widget): self.update() def menu_edit_comment(self, widget=None, board=None, index=0): """ The method will create/update or delete a comment. The popup window will receive an additional button if there is an existing comment. """ creation = True if not board.children: board.children.append("") elif not isinstance(board.children[index], str): board.children.insert(index, "") else: creation = False buttons_list = () if creation else (Gtk.STOCK_CLEAR, Gtk.ResponseType.REJECT) buttons_list = buttons_list + ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT, ) dialog = Gtk.Dialog( _("Add comment") if creation else _("Edit comment"), mainwindow(), Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, buttons_list, ) textedit = Gtk.TextView() textedit.set_editable(True) textedit.set_cursor_visible(True) textedit.set_wrap_mode(Gtk.WrapMode.WORD) textedit.set_accepts_tab(False) textbuffer = textedit.get_buffer() textbuffer.set_text(board.children[index]) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(textedit) dialog.get_content_area().pack_start(sw, True, True, 0) dialog.resize(300, 200) dialog.show_all() response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.DELETE_EVENT: # Escape key implies Cancel response = Gtk.ResponseType.CANCEL (iter_first, iter_last) = textbuffer.get_bounds() comment = ( "" if response == Gtk.ResponseType.REJECT else textbuffer.get_text(iter_first, iter_last, False) ) if response != Gtk.ResponseType.CANCEL and board.children[index] != comment: if len(comment) == 0: del board.children[index] else: board.children[index] = comment self.gamemodel.needsSave = True self.update() def menu_delete_comment(self, widget=None, board=None, index=0): """ The method removes a comment. """ if index == -1 or not board.children: return elif not isinstance(board.children[index], str): return self.gamemodel.needsSave = True del board.children[index] self.update() def menu_move_attribute(self, widget, board, nag): """ The method will assign a sign to a move, like "a4!" or "Kh8?!". It is not possible to have multiple NAG tags for the move. """ if len(board.nags) == 0: board.nags.append(nag) self.gamemodel.needsSave = True else: if board.nags[0] != nag: board.nags[0] = nag self.gamemodel.needsSave = True if self.gamemodel.needsSave: self.update_node(board) def menu_position_attribute(self, widget, board, nag): """ The method will assign a sign to describe the current position. It is not possible to have multiple NAG tags for the position. """ color = board.color if color == WHITE and nag in ( "$14", "$16", "$18", "$20", "$22", "$32", "$36", "$40", "$44", "$132", "$138", ): nag = "$%s" % (int(nag[1:]) + 1) if len(board.nags) == 0: board.nags.append("") board.nags.append(nag) self.gamemodel.needsSave = True if len(board.nags) == 1: board.nags.append(nag) self.gamemodel.needsSave = True else: if board.nags[1] != nag: board.nags[1] = nag self.gamemodel.needsSave = True if self.gamemodel.needsSave: self.update_node(board) def menu_remove_symbols(self, widget, board): """ The method removes all the NAG tags assigned to the current node. """ if board.nags: board.nags = [] self.update_node(board) self.gamemodel.needsSave = True def menu_reset_evaluations(self, widget): """ The method removes all the evaluations in order to recalculate them or simplify the output. """ self.gamemodel.scores = {} self.update() def print_node(self, node): """Just a debug helper""" if "vari" in node: if node["board"] is None: text = "[" else: text = "]" elif "comment" in node: text = node["comment"] else: text = self.__movestr(node["board"]) return text def remove_variation(self, node): parent = node["parent"] # Set new shown board to parent board by default if parent.pieceBoard is None: # variation without played move at game end self.boardview.setShownBoard(self.gamemodel.boards[-1]) else: self.boardview.setShownBoard(parent.pieceBoard) last_node = self.nodelist[-1] == node startnode = node["vari"] start = startnode["start"] end = node["end"] need_delete = [] for n in self.nodelist[self.nodelist.index(startnode) :]: if n["start"] < end: need_delete.append(n) if not last_node: diff = end - start for n in self.nodelist[self.nodelist.index(node) + 1 :]: n["start"] -= diff n["end"] -= diff for n in need_delete: self.nodelist.remove(n) start_iter = self.textbuffer.get_iter_at_offset(start) end_iter = self.textbuffer.get_iter_at_offset(end) self.textbuffer.delete(start_iter, end_iter) def variation_start(self, iter, index, level): start = iter.get_offset() if not iter.ends_tag(tag=self.tag_new_line): self.textbuffer.insert_with_tags_by_name(iter, "\n", "new_line") vlevel = min(level + 1, len(self.tag_vari_depth) - 1) self.textbuffer.insert_with_tags_by_name( iter, "(", "variation-depth-%d" % vlevel ) node = {} node["board"] = EMPTY_BOARD node["vari"] = None node["start"] = start node["end"] = iter.get_offset() if index == -1: self.nodelist.append(node) else: self.nodelist.insert(index, node) return (iter.get_offset() - start, node) def variation_end(self, iter, index, level, firstboard, parent, opening_node): start = iter.get_offset() vlevel = min(level + 1, len(self.tag_vari_depth) - 1) self.textbuffer.insert_with_tags_by_name( iter, ")", "variation-depth-%d" % vlevel ) self.textbuffer.insert_with_tags_by_name(iter, " ✖ ", "remove-variation") # chr = iter.get_char() # somehow iter.begins_tag() doesn't work, so we use get_char() instead if iter.get_char() != "\n": self.textbuffer.insert_with_tags_by_name(iter, "\n", "new_line") node = {} node["board"] = firstboard node["parent"] = parent node["vari"] = opening_node node["start"] = start node["end"] = iter.get_offset() if index == -1: self.nodelist.append(node) else: self.nodelist.insert(index, node) return iter.get_offset() - start def update_node(self, board): """Called after adding/removing evaluation symbols""" node = None for n in self.nodelist: if n["board"] == board: start = self.textbuffer.get_iter_at_offset(n["start"]) end = self.textbuffer.get_iter_at_offset(n["end"]) node = n break if node is None: return index = self.nodelist.index(node) level = node["level"] parent = node["parent"] diff = node["end"] - node["start"] self.nodelist.remove(node) self.textbuffer.delete(start, end) inserted_node = self.insert_node(board, start, index, level, parent) diff = inserted_node["end"] - inserted_node["start"] - diff if len(self.nodelist) > index + 1: for node in self.nodelist[index + 1 :]: node["start"] += diff node["end"] += diff self.update_selected_node() def insert_node(self, board, iter, index, level, parent): start = iter.get_offset() movestr = self.__movestr(board) self.textbuffer.insert(iter, "%s " % movestr) startIter = self.textbuffer.get_iter_at_offset(start) endIter = self.textbuffer.get_iter_at_offset(iter.get_offset()) if level == 0: self.textbuffer.apply_tag_by_name("move", startIter, endIter) self.textbuffer.apply_tag_by_name("margin", startIter, endIter) self.colorize_node(board.plyCount, startIter, endIter) else: self.textbuffer.apply_tag_by_name( "variation-depth-%d" % level, startIter, endIter ) node = {} node["board"] = board node["start"] = start node["end"] = iter.get_offset() node["parent"] = parent node["level"] = level if index == -1: self.nodelist.append(node) else: self.nodelist.insert(index, node) return node def variation_extended(self, gamemodel, prev_board, board): node = None for n in self.nodelist: if n["board"] == prev_board: end = self.textbuffer.get_iter_at_offset(n["end"]) node = n break node_index = self.nodelist.index(node) + 1 inserted_node = self.insert_node( board, end, node_index, node["level"], node["parent"] ) diff = inserted_node["end"] - inserted_node["start"] if len(self.nodelist) > node_index + 1: for node in self.nodelist[node_index + 1 :]: node["start"] += diff node["end"] += diff self.boardview.setShownBoard(board.pieceBoard) self.gamemodel.needsSave = True def hide_movelist(self): return (self.gamemodel.lesson_game and not self.gamemodel.solved) or ( self.gamemodel.puzzle_game and len(self.gamemodel.moves) == 0 ) def variation_added(self, gamemodel, boards, parent): # Don't show moves in interactive lesson games if self.hide_movelist(): return # first find the iter where we will inset this new variation node = None for n in self.nodelist: if n["board"] == parent: end = self.textbuffer.get_iter_at_offset(n["end"]) node = n break if node is None: next_node_index = len(self.nodelist) end = self.textbuffer.get_end_iter() level = 0 else: next_node_index = self.nodelist.index(node) + 1 level = node["level"] # diff will store the offset we need to shift the remaining stuff diff = 0 # variation opening parenthesis sdiff, opening_node = self.variation_start(end, next_node_index, level) diff += sdiff for i, board in enumerate(boards): # do we have initial variation comment? if board.prev is None: continue else: # insert variation move inserted_node = self.insert_node( board, end, next_node_index + i, level + 1, parent ) diff += inserted_node["end"] - inserted_node["start"] end = self.textbuffer.get_iter_at_offset(inserted_node["end"]) diff += self.variation_end( end, next_node_index + len(boards), level, boards[1], parent, opening_node ) # adjust remaining stuff offsets if next_node_index > 0: for node in self.nodelist[next_node_index + len(boards) + 1 :]: node["start"] += diff node["end"] += diff # if new variation is coming from clicking in book panel # we want to jump into the first board in new vari self.boardview.setShownBoard(boards[1].pieceBoard) self.gamemodel.needsSave = True def colorize_node(self, ply, start, end): """ The method updates the color or the node in order to show the errors and blunders. """ tags = ["emt", "scored0", "scored5", "scored4", "scored3", "scored2", "scored1"] tags_diff = [None, None, 400, 200, 90, 50, 20] for tag_name in tags: self.textbuffer.remove_tag_by_name(tag_name, start, end) tag_name = "scored0" if ( self.showBlunder and ply - 1 in self.gamemodel.scores and ply in self.gamemodel.scores ): color = (ply - 1) % 2 oldmoves, oldscore, olddepth = self.gamemodel.scores[ply - 1] oldscore = oldscore * -1 if color == BLACK else oldscore moves, score, depth = self.gamemodel.scores[ply] score = score * -1 if color == WHITE else score diff = score - oldscore for i, td in enumerate(tags_diff): if td is None: continue if (diff >= td and color == BLACK) or (diff <= -td and color == WHITE): tag_name = tags[i] break self.textbuffer.apply_tag_by_name(tag_name, start, end) def analysis_changed(self, gamemodel, ply): """ The method updates the analysis received from an external event. """ if self.boardview.animating: return if not self.boardview.shownIsMainLine(): return try: board = gamemodel.getBoardAtPly(ply).board except IndexError: return node = None if self.showEval or self.showBlunder: for n in self.nodelist: if n["board"] == board: start = self.textbuffer.get_iter_at_offset(n["start"]) end = self.textbuffer.get_iter_at_offset(n["end"]) node = n break if node is None: return if self.showBlunder: self.colorize_node(ply, start, end) emt_eval = "" if self.showEmt and self.gamemodel.timemodel.hasTimes: elapsed = gamemodel.timemodel.getElapsedMoveTime( board.plyCount - gamemodel.lowply ) emt_eval = "%s " % formatTime(elapsed) if self.showEval: if board.plyCount in gamemodel.scores: moves, score, depth = gamemodel.scores[board.plyCount] score = score * -1 if board.color == BLACK else score emt_eval += "%s " % prettyPrintScore(score, depth, format_mate=True) if emt_eval: if node == self.nodelist[-1]: next_node = None self.textbuffer.delete(end, self.textbuffer.get_end_iter()) else: next_node = self.nodelist[self.nodelist.index(node) + 1] next_start = self.textbuffer.get_iter_at_offset(next_node["start"]) self.textbuffer.delete(end, next_start) self.textbuffer.insert_with_tags_by_name(end, emt_eval, "emt") if next_node is not None: diff = end.get_offset() - next_node["start"] for node in self.nodelist[self.nodelist.index(next_node) :]: node["start"] += diff node["end"] += diff def update_selected_node(self): """Update the selected node highlight""" self.textbuffer.remove_tag_by_name( "selected", self.textbuffer.get_start_iter(), self.textbuffer.get_end_iter() ) shown_board = self.gamemodel.getBoardAtPly( self.boardview.shown, self.boardview.shown_variation_idx ) start = None for node in self.nodelist: if node["board"] == shown_board.board: start = self.textbuffer.get_iter_at_offset(node["start"]) end = self.textbuffer.get_iter_at_offset(node["end"]) # don't hightlight initial game comment! if shown_board.board != self.gamemodel.boards[0].board: self.textbuffer.apply_tag_by_name("selected", start, end) break if start: # self.textview.scroll_to_iter(start, within_margin=0.03) self.textview.scroll_to_iter(start, 0.01, True, 0.00, 0.00) def insert_nodes(self, board, level=0, parent=None, result=None): """Recursively builds the node tree""" # Don't show moves in interactive lesson games if self.hide_movelist(): return end_iter = self.textbuffer.get_end_iter # Convenience shortcut to the function while True: # start = end_iter().get_offset() if board is None: break # Initial game or variation comment if board.prev is None: for index, child in enumerate(board.children): if isinstance(child, str): self.insert_comment( child, board, parent, index=index, level=level, ini_board=board, ) board = board.next continue if board.fen_was_applied: self.insert_node(board, end_iter(), -1, level, parent) if ( self.showEmt and level == 0 and board.fen_was_applied and self.gamemodel.timemodel.hasTimes ): elapsed = self.gamemodel.timemodel.getElapsedMoveTime( board.plyCount - self.gamemodel.lowply ) self.textbuffer.insert_with_tags_by_name( end_iter(), "%s " % formatTime(elapsed), "emt" ) if ( self.showEval and level == 0 and board.fen_was_applied and board.plyCount in self.gamemodel.scores ): moves, score, depth = self.gamemodel.scores[board.plyCount] score = score * -1 if board.color == BLACK else score # endIter = self.textbuffer.get_iter_at_offset(end_iter().get_offset()) self.textbuffer.insert_with_tags_by_name( end_iter(), "%s " % prettyPrintScore(score, depth, format_mate=True), "emt", ) for index, child in enumerate(board.children): if isinstance(child, str): # comment self.insert_comment(child, board, parent, index=index, level=level) else: # variation diff, opening_node = self.variation_start(end_iter(), -1, level) self.insert_nodes(child[0], level + 1, parent=board) self.variation_end( end_iter(), -1, level, child[1], board, opening_node ) if board.next: board = board.next else: break if ( result and result != "*" and not self.gamemodel.lesson_game and not self.gamemodel.practice_game ): self.textbuffer.insert_with_tags_by_name(end_iter(), " " + result, "move") def apply_symbols(self, text): """ The method will apply a Unicode symbol for any move contained in a sentence. Because it applies to a PGN-compatible text, only English letters are replaced (RNBQK). """ def process_word(word): # Undecoration of the word regex = re_decoration.search(word) if regex: lead, core, trail = regex.groups() # Detection of the pieces in the move regex = re_move.search(core) if regex: parts = list(regex.groups()) # Application of the Unicode symbols for i, sign in enumerate( reprSign ): # TODO what about reprSignMakruk and reprSignSittuyin ? if parts[0] == sign: parts[0] = FAN_PIECES[WHITE][i] if parts[2] == sign: parts[2] = FAN_PIECES[WHITE][i] return lead + "".join(parts) + trail else: return word else: return word # Application of the filter on each element of the text if self.fan: re_decoration = re.compile( r"^([^a-hprnkqx1-8]*|[0-9]+\.+)?([a-hprnkqx1-8=@]+)([^a-hprnkqx1-8]*)$", re.IGNORECASE, ) re_move = re.compile( "^([PRNBQK]?)(@?[a-h]?[1-8]?x?[a-h][1-8]=?)([RNBQK]?)(.*)$" ) return " ".join([process_word(word) for word in text.split(" ")]) else: return text def insert_comment(self, comment, board, parent, index=0, level=0, ini_board=None): comment = re.sub(r"\[%.*?\]", "", comment) if not comment: return end_iter = self.textbuffer.get_end_iter() pos = len(self.nodelist) for n in self.nodelist: if n["board"] == board: pos = self.nodelist.index(n) break start = end_iter.get_offset() self.textbuffer.insert_with_tags_by_name( end_iter, self.apply_symbols(comment) + " ", "comment" ) node = {} node["board"] = ini_board if ini_board is not None else board node["comment"] = comment node["index"] = index node["parent"] = parent node["level"] = level node["start"] = start node["end"] = end_iter.get_offset() self.nodelist.insert(pos if ini_board is not None else pos + 1, node) return node def update_header(self): self.header_textbuffer.set_text("") end_iter = self.header_textbuffer.get_end_iter if self.gamemodel.info is not None: insert_formatted(self.header_textview, end_iter(), self.gamemodel.info) self.header_textbuffer.insert(end_iter(), "\n") if self.gamemodel.players: text = repr(self.gamemodel.players[0]) else: return self.header_textbuffer.insert_with_tags_by_name(end_iter(), text, "head2") white_elo = self.gamemodel.tags["WhiteElo"] if white_elo not in [None, "", "?", "0", 0]: self.header_textbuffer.insert_with_tags_by_name( end_iter(), " %s" % white_elo, "head1" ) self.header_textbuffer.insert_with_tags_by_name(end_iter(), " - ", "head1") # text = self.gamemodel.tags['Black'] text = repr(self.gamemodel.players[1]) self.header_textbuffer.insert_with_tags_by_name(end_iter(), text, "head2") black_elo = self.gamemodel.tags["BlackElo"] if black_elo not in [None, "", "?", "0", 0]: self.header_textbuffer.insert_with_tags_by_name( end_iter(), " %s" % black_elo, "head1" ) result = reprResult[self.gamemodel.status] self.header_textbuffer.insert_with_tags_by_name( end_iter(), " " + result + "\n", "head2" ) text = "" time_control = self.gamemodel.tags.get("TimeControl") if time_control: match = parseTimeControlTag(time_control) if match is None: text += _("No time control") if time_control == "-" else time_control else: secs, inc, moves = match ttime = "" tmin = int(floor(secs / 60)) tsec = secs - 60 * tmin if tmin > 0: ttime += str(tmin) + " " + (_("mins") if tmin > 1 else _("min")) if tsec > 0: if ttime != "": ttime += " " ttime += str(tsec) + " " + (_("secs") if tsec > 1 else _("sec")) if moves is not None and moves > 0: text += _("%(time)s for %(count)d moves") % ( {"time": ttime, "count": moves} ) else: text += ttime if inc != 0: text += ( (" + " if inc >= 0 else " – ") + str(abs(inc)) + " " + (_("secs") if abs(inc) > 1 else _("sec")) + "/" + _("move") ) event = self.gamemodel.tags["Event"] if event and event != "?": if len(text) > 0: text += ", " text += event site = self.gamemodel.tags["Site"] if site and site != "?": if len(text) > 0: text += ", " text += site round = self.gamemodel.tags["Round"] if round and round != "?": if len(text) > 0: text += ", " text += _("round %s") % round date = self.gamemodel.tags["Date"] date = date.replace(".??", "").replace("????.", "") if date != "": if len(text) > 0: text += ", " text += date self.header_textbuffer.insert_with_tags_by_name(end_iter(), text, "head1") eco = self.gamemodel.tags.get("ECO") if eco: self.header_textbuffer.insert_with_tags_by_name( end_iter(), "\n" + eco, "head2" ) opening = self.gamemodel.tags.get("Opening") if opening: self.header_textbuffer.insert_with_tags_by_name( end_iter(), " - ", "head1" ) self.header_textbuffer.insert_with_tags_by_name( end_iter(), opening, "head2" ) variation = self.gamemodel.tags.get("Variation") if variation: self.header_textbuffer.insert_with_tags_by_name( end_iter(), ", ", "head1" ) self.header_textbuffer.insert_with_tags_by_name( end_iter(), variation, "head2" ) def update(self, *args): """ This method execute the full refresh of the widget. """ self.fetch_chess_conf() self.textbuffer.set_text("") self.nodelist = [] self.update_header() self.update_choices() result = reprResult[self.gamemodel.status] self.insert_nodes(self.gamemodel.boards[0].board, result=result) self.update_selected_node() def on_choice_clicked(self, button, board): self.boardview.setShownBoard(board) if self.gamemodel.lesson_game: self.infobar.opp_choice_selected(board) def on_enter_notify_event(self, button, event, move): arrow = Cord(FCORD(move), color="G"), Cord(TCORD(move)) self.boardview.arrows.add(arrow) self.boardview.redrawCanvas() def on_leave_notify_event(self, button, event, move): arrow = Cord(FCORD(move), color="G"), Cord(TCORD(move)) if arrow in self.boardview.arrows: self.boardview.arrows.remove(arrow) self.boardview.redrawCanvas() def remove_choices(self): """Removes all choice buttons""" for widget in self.choices_box: self.choices_box.remove(widget) def update_choices(self): # First update lesson move comments if self.hide_movelist(): self.show_lesson_comments() view = self.boardview try: next_board = view.model.getBoardAtPly( view.shown + 1, variation=view.shown_variation_idx ) except IndexError: next_board = None # On game end and variation end there will be no choices for sure if next_board is None: self.remove_choices() return base_board = view.model.getBoardAtPly( view.shown, variation=view.shown_variation_idx ) # Don't show our choices in lesson games if ( self.gamemodel.lesson_game and base_board.color == self.gamemodel.orientation ): self.remove_choices() return # Gether variations first moves if there are any choices = [] for child in next_board.board.children: if isinstance(child, list): lboard = child[1] if self.fan: text = toFAN(base_board.board, lboard.lastMove) else: text = toSAN(base_board.board, lboard.lastMove, True) choices.append((lboard.pieceBoard, lboard.lastMove, text)) # Add main line next move to choice list also if choices: move = next_board.board.lastMove if self.fan: text = toFAN(base_board.board, move) else: text = toSAN(base_board.board, move, True) choices = [(next_board, move, text)] + choices # Remove previous choice buttons self.remove_choices() # Add nev choice buttons if self.choices_enabled and choices: for board, move, san in choices: button = Gtk.Button(san) button.set_name("rounded") button.connect("clicked", self.on_choice_clicked, board) button.connect("enter_notify_event", self.on_enter_notify_event, move) button.connect("leave_notify_event", self.on_leave_notify_event, move) self.choices_box.pack_start(button, False, False, 3) self.choices_box.show_all() preferencesDialog.SoundTab.playAction("variationChoice") if not self.choices_enabled: self.choices_enabled = True def show_lesson_comments(self): self.textbuffer.set_text("") self.nodelist = [] view = self.boardview board = view.model.getBoardAtPly(view.shown, variation=view.shown_variation_idx) for index, child in enumerate(board.board.children): if isinstance(child, str): if child.lstrip().startswith("[%"): continue end_iter = self.textbuffer.get_end_iter() self.textbuffer.insert_with_tags_by_name( end_iter, self.apply_symbols(child) + " ", "lesson-comment" ) def on_shownChanged(self, view, shown): self.update_choices() self.update_selected_node() def on_moves_undone(self, game, moves): """ This method is called once a move has been undone. """ start = self.textbuffer.get_start_iter() end = self.textbuffer.get_end_iter() for node in reversed(self.nodelist): if node["board"].pieceBoard == self.gamemodel.variations[0][-1]: start = self.textbuffer.get_iter_at_offset(node["end"]) break else: self.nodelist.remove(node) if self.gamemodel.ply > 0: self.textbuffer.delete(start, end) self.update() def on_learn_success(self, model): self.update() def on_players_changed(self, model): self.update_header() def on_game_loaded(self, model, uri): """ The method is called when a game is loaded. """ if model.tags.get("ECO", "") == "" and model.tags.get("Opening", "") == "": model.setOpening(redetermine=True) self.update() def on_game_changed(self, game, ply): """ The method is called when a game is changed, like by a move. """ if self.hide_movelist(): self.update() board = game.getBoardAtPly(ply, variation=0).board # if self.update() inserted all nodes before (f.e opening_changed), do nothing if self.nodelist and self.nodelist[-1]["board"] == board: return end_iter = self.textbuffer.get_end_iter start = end_iter().get_offset() movestr = self.__movestr(board) self.textbuffer.insert(end_iter(), "%s " % movestr) startIter = self.textbuffer.get_iter_at_offset(start) endIter = self.textbuffer.get_iter_at_offset(end_iter().get_offset()) self.textbuffer.apply_tag_by_name("move", startIter, endIter) self.colorize_node(board.plyCount, startIter, endIter) node = {} node["board"] = board node["start"] = startIter.get_offset() node["end"] = end_iter().get_offset() node["parent"] = None node["level"] = 0 self.nodelist.append(node) if self.showEmt and self.gamemodel.timed: elapsed = self.gamemodel.timemodel.getElapsedMoveTime( board.plyCount - self.gamemodel.lowply ) self.textbuffer.insert_with_tags_by_name( end_iter(), "%s " % formatTime(elapsed), "emt" ) self.update_selected_node() def __movestr(self, board): move = board.lastMove if self.fan: movestr = toFAN(board.prev, move) else: movestr = toSAN(board.prev, move, True) nagsymbols = "".join([nag2symbol(nag) for nag in board.nags]) # To prevent wrap castling we will use hyphen bullet (U+2043) return "{}{}{}".format(move_count(board), movestr.replace("-", "⁃"), nagsymbols) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/bookPanel.py0000644000175100001770000010026614614030313023120 0ustar00runnerdockerimport asyncio import os from gi.repository import Gdk, Gtk, GObject, Pango, PangoCairo from pychess.System import conf, uistuff from pychess.Utils import prettyPrintScore from pychess.Utils.const import ( HINT, OPENING, SPY, BLACK, ENDGAME, DRAW, WHITEWON, WHITE, NORMALCHESS, ) from pychess.Utils.book import getOpenings from pychess.Utils.eco import get_eco from pychess.Utils.IconLoader import get_pixbuf from pychess.Utils.logic import legalMoveCount from pychess.Utils.Move import Move, toSAN, toFAN, listToMoves from pychess.Utils.lutils.lmovegen import newMove from pychess.Utils.lutils.lmove import ParsingError from pychess.System.prefix import addDataPrefix from pychess.System.Log import log from math import ceil __title__ = _("Hints") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _( "The hint panel will provide computer advice during each stage of the game" ) __about__ = _("Official PyChess panel.") class Advisor: def __init__(self, store, name, mode): """The tree store's columns are: (Board, Move, pv) Indicate the suggested move text or barWidth or goodness Indicate its strength (last 2 are 0 to 1.0) pvlines Number of analysis lines for analysing engines is pvlines editable Boolean Details Describe a PV, opening name, etc. star/stop Boolean HINT, SPY analyzing toggle button state is start/stop visible Boolean""" self.store = store self.name = name self.mode = mode store.append(None, self.textOnlyRow(name, mode)) @property def path(self): for i, row in enumerate(self.store): if row[4] == self.name: return (i,) def shownChanged(self, boardview, shown): """Update the suggestions to match a changed position.""" pass def gamewidget_closed(self, gamewidget): pass def child_tooltip(self, i): """Return a tooltip (or empty) string for the given child row.""" return "" def row_activated(self, path, model): """Act on a double-clicked child row other than a move suggestion.""" pass def query_tooltip(self, path): indices = path.get_indices() if not indices[1:]: return self.tooltip return self.child_tooltip(indices[1]) def empty_parent(self): while True: parent = self.store.get_iter(self.path) child = self.store.iter_children(parent) if not child: return parent self.store.remove(child) def textOnlyRow(self, text, mode=None): return [ (None, None, None), ("", 0, None), 0, False, text, False, mode in (HINT, SPY), ] def _del(self): pass class OpeningAdvisor(Advisor): def __init__(self, store, tv, boardcontrol): Advisor.__init__(self, store, _("Opening Book"), OPENING) self.tooltip = _( "The opening book will try to inspire you during the opening phase of the game by showing you common moves made by chess masters" ) # self.opening_names = [] self.tv = tv self.boardcontrol = boardcontrol self.boardview = boardcontrol.view def shownChanged(self, boardview, shown): m = boardview.model if m is None or m.isPlayingICSGame(): return b = m.getBoardAtPly(shown, boardview.shown_variation_idx) parent = self.empty_parent() openings = getOpenings(b.board) openings.sort(key=lambda t: t[1], reverse=True) if not openings: return totalWeight = 0.0 # Polyglot-formatted books have space for learning data. # See version ac31dc37ec89 for an attempt to parse it. # In this version, we simply ignore it. (Most books don't have it.) for move, weight, learn in openings: totalWeight += weight self.opening_names = [] for move, weight, learn in openings: if totalWeight != 0: weight /= totalWeight goodness = min(float(weight * len(openings)), 1.0) weight = "%0.1f%%" % (100 * weight) opening = get_eco( b.move(Move(move)).board.hash, exactPosition=conf.get("book_exact_match"), ) if opening is None: eco = "" # self.opening_names.append("") else: eco = "{} {}{}{}".format( opening[0], opening[1], ", " if opening[2] != "" else "", opening[2] ) # self.opening_names.append("%s %s" % (opening[1], opening[2])) if opening[3] == int(False): eco = "(...) %s" % eco.strip() self.store.append( parent, [ (b, Move(move), None), (weight, 1, goodness), 0, False, eco, False, False, ], ) tp = Gtk.TreePath(self.path) self.tv.expand_row(tp, False) # def child_tooltip (self, i): # return "" if len(self.opening_names)==0 else self.opening_names[i] def row_activated(self, iter, model, from_gui=True): if self.store.get_path(iter) != Gtk.TreePath(self.path): board, move, moves = self.store[iter][0] self.boardcontrol.play_or_add_move(board, move) class EngineAdvisor(Advisor): # An EngineAdvisor always has self.linesExpected rows reserved for analysis. def __init__(self, store, engine, mode, tv, boardcontrol): if mode == HINT: Advisor.__init__(self, store, _("Analysis by %s") % engine, HINT) self.tooltip = ( _( "%s will try to predict which move is best and which side has the advantage" ) % engine ) else: Advisor.__init__(self, store, _("Threat analysis by %s") % engine, SPY) self.tooltip = ( _( "%s will identify what threats would exist if it were your opponent's turn to move" ) % engine ) self.engine = engine self.tv = tv self.active = False self.linesExpected = 1 self.boardview = boardcontrol.view self.cid1 = self.engine.connect("analyze", self.on_analyze) self.cid2 = self.engine.connect("readyForOptions", self.on_ready_for_options) self.cid3 = self.engine.connect_after("readyForMoves", self.on_ready_for_moves) self.figuresInNotation = conf.get("figuresInNotation") def on_figures_in_notation(none): self.figuresInNotation = conf.get("figuresInNotation") self.cid4 = conf.notify_add("figuresInNotation", on_figures_in_notation) def _del(self): self.engine.disconnect(self.cid1) self.engine.disconnect(self.cid2) self.engine.disconnect(self.cid3) conf.notify_remove(self.cid4) def _create_new_expected_lines(self): parent = self.empty_parent() for line in range(self.linesExpected): self.store.append(parent, self.textOnlyRow(_("Calculating..."))) self.tv.expand_row(Gtk.TreePath(self.path), False) return parent def shownChanged(self, boardview, shown): m = boardview.model if m is None: return if m.isPlayingICSGame() and not m.lesson_game: return self.engine.setBoard( boardview.model.getBoardAtPly(shown, boardview.shown_variation_idx), search=self.active or m.lesson_game, ) if self.active: self._create_new_expected_lines() def on_ready_for_options(self, engine): engine_max = self.engine.maxAnalysisLines() engine_value = self.engine.getAnalysisLines() self.linesExpected = engine_value if engine_value <= engine_max else engine_max m = self.boardview.model if m.isPlayingICSGame(): return parent = self._create_new_expected_lines() # set pvlines, but set it 0 if engine max is only 1 self.store.set_value(parent, 2, 0 if engine_max == 1 else self.linesExpected) # set it editable self.store.set_value(parent, 3, engine_max > 1) # set start/stop cb visible self.store.set_value(parent, 6, True) self.active = True def on_ready_for_moves(self, engine): self.shownChanged(self.boardview, self.boardview.shown) def on_analyze(self, engine, analysis): if self.boardview.animating: return if self.boardview.model.isPlayingICSGame(): return if not self.active: return for i, line in enumerate(analysis): if line is None: self.store[self.path + (i,)] = self.textOnlyRow("") continue ply, movstrs, score, depth, nps = line board0 = self.engine.board board = board0.clone() try: pv = listToMoves(board, movstrs, validate=True) except ParsingError as e: # ParsingErrors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug( "EngineAdvisor.on_analyze(): Ignored (%s) from analyzer: ParsingError%s" % (" ".join(movstrs), e) ) return move = None if pv: move = pv[0] ply0 = board.ply if self.mode == HINT else board.ply + 1 counted_pv = [] for j, pvmove in enumerate(pv): ply = ply0 + j if ply % 2 == 0: mvcount = "%d." % (ply / 2 + 1) elif j == 0: mvcount = "%d..." % (ply / 2 + 1) else: mvcount = "" counted_pv.append( "%s%s" % ( mvcount, ( toFAN(board, pvmove) if self.figuresInNotation else toSAN(board, pvmove, True) ), ) ) board = board.move(pvmove) goodness = (min(max(score, -250), 250) + 250) / 500.0 if self.engine.board.color == BLACK: score = -score self.store[self.path + (i,)] = [ (board0, move, pv), (prettyPrintScore(score, depth, format_mate=True), 1, goodness), 0, False, " ".join(counted_pv), False, False, ] def start_stop(self, tb): if not tb: self.active = True self.boardview.model.resume_analyzer(self.mode) else: self.active = False self.boardview.model.pause_analyzer(self.mode) def multipv_edited(self, value): value = self.engine.requestMultiPV(value) if value != self.linesExpected: parent = self.store.get_iter(self.path) if value > self.linesExpected: while self.linesExpected < value: self.store.append(parent, self.textOnlyRow(_("Calculating..."))) self.linesExpected += 1 else: while self.linesExpected > value: child = self.store.iter_children(parent) if child is not None: self.store.remove(child) self.linesExpected -= 1 return value def row_activated(self, iter, model): if not self.active: return if self.mode == HINT and self.store.get_path(iter) != Gtk.TreePath(self.path): moves = self.store[iter][0][2] if moves is not None: # score = self.store[iter][1][0] model.add_variation(self.engine.board, moves) if self.mode == SPY and self.store.get_path(iter) != Gtk.TreePath(self.path): moves = self.store[iter][0][2] if moves is not None: # score = self.store[iter][1][0] board = self.engine.board.board # SPY analyzer has inverted color boards # we need to chage it to get the board in gamemodel variations board list later board.setColor(1 - board.color) king = board.kings[board.color] null_move = Move(newMove(king, king)) model.add_variation(self.engine.board, [null_move] + moves) def child_tooltip(self, i): if self.active: if i < self.linesExpected: return _( "Engine scores are in units of pawns, from White's point of view. Double clicking on analysis lines you can insert them into Annotation panel as variations." ) else: return _( "Adding suggestions can help you find ideas, but slows down the computer's analysis." ) return "" class EndgameAdvisor(Advisor): def __init__(self, store, tv, boardcontrol): Advisor.__init__(self, store, _("Endgame Table"), ENDGAME) # deferred import to not slow down PyChess starting up from pychess.Utils.EndgameTable import EndgameTable self.egtb = EndgameTable() # If mate in # was activated by double click let egtb do the rest self.auto_activate = False self.tv = tv self.boardcontrol = boardcontrol self.boardview = boardcontrol.view self.tooltip = _( "The endgame table will show exact analysis when there are few pieces on the board." ) # TODO: Show a message if tablebases for the position exist but are neither installed nor allowed. self.queue = asyncio.Queue() self.egtb_task = asyncio.create_task(self.start()) class StopNow(Exception): pass async def start(self): while True: v = await self.queue.get() if isinstance(v, Exception) and v == self.StopNow: break elif v == self.board.board: ret = await self.egtb.scoreAllMoves(v) self.on_scored(v, ret) self.queue.task_done() def shownChanged(self, boardview, shown): m = boardview.model if m is None or m.variant.variant != NORMALCHESS or m.isPlayingICSGame(): if not (m.practice_game or m.lesson_game): return self.parent = self.empty_parent() self.board = m.getBoardAtPly(shown, boardview.shown_variation_idx) self.queue.put_nowait(self.board.board) def _del(self): try: self.queue.put_nowait(self.StopNow) except asyncio.QueueFull: log.warning("EndgameAdvisor.gamewidget_closed: Queue.Full") self.egtb_task.cancel() def on_scored(self, board, endings): m = self.boardview.model if board != self.board.board: return for move, result, depth in endings: if result == DRAW: result = (_("Draw"), 1, 0.5) details = "" elif (result == WHITEWON) ^ (self.board.color == WHITE): result = (_("Loss"), 1, 0.0) details = _("Mate in %d") % depth else: result = (_("Win"), 1, 1.0) details = _("Mate in %d") % depth if m.practice_game or m.lesson_game: m.hint = "{} {} {}".format( toSAN(self.board, move, True), result[0], details ) return if m.isPlayingICSGame(): return self.store.append( self.parent, [(self.board, move, None), result, 0, False, details, False, False], ) self.tv.expand_row(Gtk.TreePath(self.path), False) if self.auto_activate: path = None for i, row in enumerate(self.store): if row[4] == self.name: path = Gtk.TreePath.new_from_indices((i, 0)) break if path is not None: self.row_activated( self.tv.get_model().get_iter(path), m, from_gui=False ) def row_activated(self, iter, model, from_gui=True): if self.store.get_path(iter) != Gtk.TreePath(self.path): board, move, moves = self.store[iter][0] if from_gui: result = self.store[iter][1] if result is not None and result[2] != 0.5: # double click on mate in # self.auto_activate = True self.boardcontrol.play_or_add_move(board, move) class Sidepanel: def load(self, gmwidg): self.gmwidg = gmwidg self.boardcontrol = gmwidg.board self.boardview = gmwidg.board.view self.figuresInNotation = conf.get("figuresInNotation") self.sw = Gtk.ScrolledWindow() self.tv = Gtk.TreeView() self.tv.set_property("headers_visible", False) self.sw.add(self.tv) self.sw.show_all() self.store = Gtk.TreeStore( GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, int, bool, str, bool, bool ) self.tv.set_model(self.store) # ## move suggested moveRenderer = Gtk.CellRendererText() moveRenderer.set_property("xalign", 1.0) moveRenderer.set_property("yalign", 0) c0 = Gtk.TreeViewColumn("Move", moveRenderer) def getMoveText(column, cell, store, iter, data): board, move, pv = store[iter][0] if not move: cell.set_property("text", "") else: if self.figuresInNotation: cell.set_property("text", toFAN(board, move)) else: cell.set_property("text", toSAN(board, move, True)) c0.set_cell_data_func(moveRenderer, getMoveText) # ## strength of the move c1 = Gtk.TreeViewColumn("Strength", StrengthCellRenderer(), data=1) # ## multipv (number of analysis lines) self.multipvRenderer = Gtk.CellRendererSpin() adjustment = Gtk.Adjustment(value=1, lower=1, upper=9, step_increment=1) self.multipvRenderer.set_property("adjustment", adjustment) self.multipvRenderer.set_property("editable", True) self.multipvRenderer.set_property("width_chars", 1) c2 = Gtk.TreeViewColumn("PV", self.multipvRenderer, editable=3) c2.set_property("min_width", 80) def spin_visible(column, cell, store, iter, data): if store[iter][2] == 0: cell.set_property("visible", False) else: cell.set_property("text", str(store[iter][2])) cell.set_property("visible", True) c2.set_cell_data_func(self.multipvRenderer, spin_visible) def multipv_edited(renderer, path, text): iter = self.store.get_iter(path) self.store.set_value( iter, 2, self.advisors[int(path[0])].multipv_edited( 1 if text == "" else int(text) ), ) self.multipv_cid = self.multipvRenderer.connect("edited", multipv_edited) # ## start/stop button for analysis engines self.toggleRenderer = CellRendererPixbufXt() self.toggleRenderer.set_property("stock-id", "gtk-add") c4 = Gtk.TreeViewColumn("StartStop", self.toggleRenderer) self.play_image = get_pixbuf("glade/play.png") self.pause_image = get_pixbuf("glade/pause.png") def cb_visible(column, cell, store, iter, data): if not store[iter][6]: cell.set_property("visible", False) else: cell.set_property("visible", True) if store[iter][5]: cell.set_property("pixbuf", self.play_image) else: cell.set_property("pixbuf", self.pause_image) c4.set_cell_data_func(self.toggleRenderer, cb_visible) def toggled_cb(cell, path): self.store[path][5] = not self.store[path][5] self.advisors[int(path[0])].start_stop(self.store[path][5]) self.toggle_cid = self.toggleRenderer.connect("clicked", toggled_cb) self.tv.append_column(c4) self.tv.append_column(c0) self.tv.append_column(c1) self.tv.append_column(c2) # ## header text, or analysis line uistuff.appendAutowrapColumn(self.tv, "Details", text=4) self.cid = self.boardview.connect("shownChanged", self.shownChanged) self.tv_cids = [ self.tv.connect("cursor_changed", self.selection_changed), self.tv.connect("select_cursor_row", self.selection_changed), self.tv.connect("row-activated", self.row_activated), self.tv.connect("query-tooltip", self.query_tooltip), ] self.tv.props.has_tooltip = True self.tv.set_property("show-expanders", False) self.advisors = [] self.conf_conids = [] if conf.get("opening_check"): advisor = OpeningAdvisor(self.store, self.tv, self.boardcontrol) self.advisors.append(advisor) if conf.get("endgame_check"): advisor = EndgameAdvisor(self.store, self.tv, self.boardcontrol) self.advisors.append(advisor) self.model_cids = [ gmwidg.gamemodel.connect("analyzer_added", self.on_analyzer_added), gmwidg.gamemodel.connect("analyzer_removed", self.on_analyzer_removed), gmwidg.gamemodel.connect_after("game_terminated", self.on_game_terminated), ] def on_opening_check(none): if conf.get("opening_check") and self.boardview is not None: advisor = OpeningAdvisor(self.store, self.tv, self.boardcontrol) self.advisors.append(advisor) advisor.shownChanged(self.boardview, self.boardview.shown) else: for advisor in self.advisors: if advisor.mode == OPENING: parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) self.conf_conids.append(conf.notify_add("opening_check", on_opening_check)) def on_opening_file_entry_changed(none): path = conf.get("opening_file_entry") if os.path.isfile(path): for advisor in self.advisors: if advisor.mode == OPENING and self.boardview is not None: advisor.shownChanged(self.boardview, self.boardview.shown) self.conf_conids.append( conf.notify_add("opening_file_entry", on_opening_file_entry_changed) ) def on_endgame_check(none): if conf.get("endgame_check"): advisor = EndgameAdvisor(self.store, self.tv, self.boardcontrol) self.advisors.append(advisor) advisor.shownChanged(self.boardview, self.boardview.shown) else: for advisor in self.advisors: if advisor.mode == ENDGAME: advisor._del() parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) self.conf_conids.append(conf.notify_add("endgame_check", on_endgame_check)) def on_figures_in_notation(none): self.figuresInNotation = conf.get("figuresInNotation") self.conf_conids.append( conf.notify_add("figuresInNotation", on_figures_in_notation) ) return self.sw def on_game_terminated(self, model): self.multipvRenderer.disconnect(self.multipv_cid) self.toggleRenderer.disconnect(self.toggle_cid) for cid in self.tv_cids: self.tv.disconnect(cid) for conid in self.conf_conids: conf.notify_remove(conid) for cid in self.model_cids: self.gmwidg.gamemodel.disconnect(cid) self.boardview.disconnect(self.cid) for advisor in self.advisors: advisor._del() def on_analyzer_added(self, gamemodel, analyzer, analyzer_type): if analyzer_type == HINT: self.advisors.append( EngineAdvisor(self.store, analyzer, HINT, self.tv, self.boardcontrol) ) if analyzer_type == SPY: self.advisors.append( EngineAdvisor(self.store, analyzer, SPY, self.tv, self.boardcontrol) ) def on_analyzer_removed(self, gamemodel, analyzer, analyzer_type): for advisor in self.advisors: if advisor.mode == analyzer_type: advisor.active = False advisor.engine = None parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) def shownChanged(self, boardview, shown): if boardview.model is None: return boardview.bluearrow = None if ( legalMoveCount( boardview.model.getBoardAtPly(shown, boardview.shown_variation_idx) ) == 0 ): if self.sw.get_child() == self.tv: self.sw.remove(self.tv) label = Gtk.Label(_("In this position,\nthere is no legal move.")) label.set_property("yalign", 0.1) self.sw.add_with_viewport(label) self.sw.get_child().set_shadow_type(Gtk.ShadowType.NONE) self.sw.show_all() # stop egtb auto activation on mating lines for advisor in self.advisors: advisor.auto_activate = False return for advisor in self.advisors: advisor.shownChanged(boardview, shown) self.tv.expand_all() if self.sw.get_child() != self.tv: log.warning("bookPanel.Sidepanel.shownChanged: get_child() != tv") self.sw.remove(self.sw.get_child()) self.sw.add(self.tv) def selection_changed(self, widget, *args): iter = self.tv.get_selection().get_selected()[1] if iter: board, move, pv = self.store[iter][0] if move is not None: self.boardview.bluearrow = move.cords return self.boardview.bluearrow = None def row_activated(self, widget, *args): iter = self.tv.get_selection().get_selected()[1] if iter is None: return board, move, pv = self.store[iter][0] # The row may be tied to a specific action. path = self.store.get_path(iter) indices = path.get_indices() if indices: self.advisors[indices[0]].row_activated(iter, self.boardview.model) def query_tooltip(self, treeview, x, y, keyboard_mode, tooltip): # First, find out where the pointer is: path_col_x_y = treeview.get_path_at_pos(x, y) # If we're not pointed at a row, then return FALSE to say # "don't show a tip". if not path_col_x_y: return False # Otherwise, ask the TreeView to set up the tip's area according # to the row's rectangle. path, col, x, y = path_col_x_y if not path: return False treeview.set_tooltip_row(tooltip, path) # And ask the advisor for some text indices = path.get_indices() if indices: text = self.advisors[indices[0]].query_tooltip(path) if text: label = Gtk.Label() label.props.wrap = True label.props.width_chars = 60 label.props.max_width_chars = 60 label.set_text(text) tooltip.set_custom(label) # tooltip.set_markup(text) return True # Show the tip. return False ################################################################################ # StrengthCellRenderer # ################################################################################ width, height = 80, 23 class StrengthCellRenderer(Gtk.CellRenderer): __gproperties__ = { "data": ( GObject.TYPE_PYOBJECT, "Data", "Data", GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ), } def __init__(self): Gtk.CellRenderer.__init__(self) self.data = None def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def do_render(self, context, widget, background_area, cell_area, flags): if not self.data: return text, widthfrac, goodness = self.data if widthfrac: paintGraph(context, widthfrac, stoplightColor(goodness), cell_area) if text: layout = PangoCairo.create_layout(context) layout.set_text(text, -1) fd = Pango.font_description_from_string("Sans 10") layout.set_font_description(fd) w, h = layout.get_pixel_size() context.move_to(cell_area.x, cell_area.y) context.rel_move_to(70 - w, (height - h) / 2) PangoCairo.show_layout(context, layout) def do_get_size(self, widget, cell_area=None): return (0, 0, width, height) GObject.type_register(StrengthCellRenderer) ################################################################################ # StrengthCellRenderer functions # ################################################################################ def stoplightColor(x): def interp(y0, yh, y1): return y0 + (y1 + 4 * yh - 3 * y0) * x + (-4 * yh + 2 * y0) * x * x r = interp(239, 252, 138) / 255 g = interp(41, 233, 226) / 255 b = interp(41, 79, 52) / 255 return r, g, b def paintGraph(cairo, widthfrac, rgb, rect): x, y, w0, h = rect.x, rect.y, rect.width, rect.height w = ceil(widthfrac * w0) cairo.save() cairo.rectangle(x, y, w, h) cairo.clip() cairo.move_to(x + 10, y) cairo.rel_line_to(w - 20, 0) cairo.rel_curve_to(10, 0, 10, 0, 10, 10) cairo.rel_line_to(0, 3) cairo.rel_curve_to(0, 10, 0, 10, -10, 10) cairo.rel_line_to(-w + 20, 0) cairo.rel_curve_to(-10, 0, -10, 0, -10, -10) cairo.rel_line_to(0, -3) cairo.rel_curve_to(0, -10, 0, -10, 10, -10) cairo.set_source_rgb(*rgb) cairo.fill() cairo.restore() # cell renderer for start-stop putton class CellRendererPixbufXt(Gtk.CellRendererPixbuf): __gproperties__ = { "active-state": ( GObject.TYPE_STRING, "pixmap/active widget state", "stock-icon name representing active widget state", None, GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ) } __gsignals__ = { "clicked": (GObject.SignalFlags.RUN_LAST, None, (GObject.TYPE_STRING,)), } def __init__(self): GObject.GObject.__init__(self) self.set_property("mode", Gtk.CellRendererMode.ACTIVATABLE) def do_get_property(self, property): if property.name == "active-state": return self.active_state else: raise AttributeError("unknown property %s" % property.name) def do_set_property(self, property, value): if property.name == "active-state": self.active_state = value else: raise AttributeError("unknown property %s" % property.name) def do_activate(self, event, widget, path, background_area, cell_area, flags): if event.type == Gdk.EventType.BUTTON_PRESS: self.emit("clicked", path) # def do_clicked(self, path): # print "do_clicked", path GObject.type_register(CellRendererPixbufXt) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/chatPanel.py0000755000175100001770000001206514614030313023107 0ustar00runnerdockerfrom pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.Utils.const import LOCAL from pychess.widgets.ChatView import ChatView from pychess.ic.ICGameModel import ICGameModel from pychess.ic.icc import DG_PLAYERS_IN_MY_GAME __title__ = _("Chat") __icon__ = addDataPrefix("glade/panel_chat.svg") __desc__ = _( "The chat panel lets you communicate with your opponent during the game, assuming he or she is interested" ) class Sidepanel: def load(self, gmwidg): self.gamemodel = gmwidg.gamemodel self.player_cid = None self.model_cids = [ self.gamemodel.connect("game_started", self.onGameStarted), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), ] self.chatView = ChatView(self.gamemodel) self.chatView.disable("Waiting for game to load") self.chatview_cid = self.chatView.connect("messageTyped", self.onMessageSent) if isinstance(self.gamemodel, ICGameModel): self.model_cids.append( self.gamemodel.connect( "observers_received", self.chatView.update_observers ) ) self.model_cids.append( self.gamemodel.connect("message_received", self.onICMessageReieved) ) return self.chatView def on_game_terminated(self, model): self.chatView.disconnect(self.chatview_cid) if ( hasattr(self, "player") and hasattr(self, "player_cid") and not self.gamemodel.examined ): self.player.disconnect(self.player_cid) for cid in self.model_cids: self.gamemodel.disconnect(cid) def onGameStarted(self, gamemodel): if gamemodel.examined: if gamemodel.players[0].name == gamemodel.connection.username: self.player = gamemodel.players[0] self.opplayer = gamemodel.players[1] else: self.player = gamemodel.players[1] self.opplayer = gamemodel.players[0] elif gamemodel.isObservationGame(): # no local player but enable chat to send/receive whisper/kibitz pass elif gamemodel.players[0].__type__ == LOCAL: self.player = gamemodel.players[0] self.opplayer = gamemodel.players[1] if gamemodel.players[1].__type__ == LOCAL: log.warning("Chatpanel loaded with two local players") elif gamemodel.players[1].__type__ == LOCAL: self.player = gamemodel.players[1] self.opplayer = gamemodel.players[0] else: log.info("Chatpanel loaded with no local players") self.chatView.hide() if isinstance(gamemodel, ICGameModel): if gamemodel.connection.ICC: gamemodel.connection.client.run_command( "set-2 %s 1" % DG_PLAYERS_IN_MY_GAME ) else: allob = "allob " + str(gamemodel.ficsgame.gameno) gamemodel.connection.client.run_command(allob) if ( hasattr(self, "player") and not gamemodel.examined and self.player_cid is None ): self.player_cid = self.player.connect( "messageReceived", self.onMessageRecieved ) self.chatView.enable() def onMessageRecieved(self, player, text): sender = ( "pychessbot" if player.gamemodel.offline_lecture else repr(self.opplayer) ) self.chatView.addMessage(sender, text) def onICMessageReieved(self, icgamemodel, player, text): self.chatView.addMessage(player, text) # emit an allob to FICS if not icgamemodel.connection.ICC: allob = "allob " + str(icgamemodel.ficsgame.gameno) icgamemodel.connection.client.run_command(allob) def onMessageSent(self, chatView, text): if hasattr(self, "player") or self.gamemodel.examined: if text.startswith("# "): text = text[2:] self.gamemodel.connection.cm.whisper(text) elif text.startswith("whisper "): text = text[8:] self.gamemodel.connection.cm.whisper(text) else: if not hasattr(self, "player"): if ( self.gamemodel.players[0].name == self.gamemodel.connection.username ): self.player = self.gamemodel.players[0] self.opplayer = self.gamemodel.players[1] else: self.player = self.gamemodel.players[1] self.opplayer = self.gamemodel.players[0] if self.gamemodel.examined: self.opplayer.putMessage(text) else: self.player.sendMessage(text) self.chatView.addMessage(repr(self.player), text) else: self.gamemodel.connection.cm.whisper(text) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/commentPanel.py0000755000175100001770000002327414614030313023636 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from pychess.Utils.const import reprCord from pychess.Utils.repr import reprColor, reprPiece from pychess.Utils.lutils.lmove import TCORD from pychess.Utils.lutils.leval import evalMaterial from pychess.Utils.lutils import strateval __title__ = _("Comments") __icon__ = addDataPrefix("glade/panel_comments.svg") __desc__ = _("The comments panel will try to analyze and explain the moves played") class Sidepanel: def __init__(self): self.givenTips = {} def load(self, gmwidg): self.gamemodel = gmwidg.board.view.model self.model_cids = [ self.gamemodel.connect_after("game_changed", self.game_changed), self.gamemodel.connect_after("game_started", self.game_started), self.gamemodel.connect_after("moves_undone", self.moves_undone), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), ] scrollwin = Gtk.ScrolledWindow() self.tv = Gtk.TreeView() self.tv.set_headers_visible(False) scrollwin.add(self.tv) scrollwin.show_all() self.store = Gtk.ListStore(str) self.tv.set_model(self.store) self.tv.get_selection().set_mode(Gtk.SelectionMode.BROWSE) uistuff.appendAutowrapColumn(self.tv, "Comment", text=0) self.tv_cid = self.tv.connect("cursor_changed", self.cursorChanged) self.boardview = gmwidg.board.view self.cid = self.boardview.connect("shownChanged", self.shownChanged) return scrollwin def on_game_terminated(self, model): self.tv.disconnect(self.tv_cid) for cid in self.model_cids: self.gamemodel.disconnect(cid) self.boardview.disconnect(self.cid) def cursorChanged(self, tv): path, focus_column = tv.get_cursor() indices = path.get_indices() if indices: row = indices[0] board = self.gamemodel.boards[row] self.boardview.setShownBoard(board) def shownChanged(self, boardview, shown): if self.gamemodel is None: return if not boardview.shownIsMainLine(): return row = shown - self.gamemodel.lowply try: iter = self.store.get_iter(row) selection = self.tv.get_selection() if selection is not None: selection.select_iter(iter) self.tv.scroll_to_cell(row) except ValueError: pass # deleted variations by moves_undoing def moves_undone(self, game, moves): model = self.tv.get_model() for i in range(moves): model.remove(model.get_iter((len(model) - 1,))) def game_started(self, model): if model.lesson_game: return self.game_changed(model, model.ply) def game_changed(self, model, ply): if len(self.store) == 0: for i in range(len(self.store) + model.lowply, ply + 1): self.addComment(model, self.__chooseComment(model, i)) else: self.addComment(model, self.__chooseComment(model, ply)) self.shownChanged(self.boardview, ply) def addComment(self, model, comment): if self.gamemodel is None or self.tv is None: return self.store.append([comment]) # If latest ply is shown, we select the new latest selection = self.tv.get_selection() if selection is None: return iter = selection.get_selected()[1] if iter: path = self.tv.get_model().get_path(iter) indices = path.get_indices() if indices: row = indices[0] if row < self.boardview.shown - 1: return if self.boardview.shown >= model.ply: iter = self.store.get_iter(len(self.store) - 1) self.tv.get_selection().select_iter(iter) def __chooseComment(self, model, ply): if ply == model.lowply: return _("Initial position") ######################################################################## # Set up variables ######################################################################## color = model.getBoardAtPly(ply - 1).board.color s, phase = evalMaterial( model.getBoardAtPly(ply).board, model.getBoardAtPly(ply - 1).color ) # * Final: Will be shown alone: "mates", "draws" # * Prefix: Will always be shown: "castles", "promotes" # * Attack: Will always be shown: "threaten", "preassures", "defendes" # * Moves (s): Will always be shown: "put into *" # * State: (s) Will always be shown: "new *" # * Simple: (s) Max one will be shown: "develops", "activity" # * Tip: (s) Will sometimes be shown: "pawn storm", "cramped position" ######################################################################## # Call strategic evaluation functions ######################################################################## def getMessages(prefix): messages = [] for functionName in dir(strateval): if not functionName.startswith(prefix + "_"): continue function = getattr(strateval, functionName) messages.extend(function(model, ply, phase)) return messages # move = model.moves[-1].move # print "----- %d - %s -----" % (model.ply/2, toSAN(oldboard, move)) # ---------------------------------------------------------------------- # Final # ---------------------------------------------------------------------- messages = getMessages("final") if messages: return f"{reprColor[color]} {messages[0]}" # --- strings = [] # ---------------------------------------------------------------------- # Attacks # ---------------------------------------------------------------------- messages = getMessages("attack") for message in messages: strings.append(f"{reprColor[color]} {message}") # ---------------------------------------------------------------------- # Check for prefixes # ---------------------------------------------------------------------- messages = getMessages("prefix") if messages: prefix = messages[0] else: prefix = "" # ---------------------------------------------------------------------- # Check for special move stuff. All of which accept prefixes # ---------------------------------------------------------------------- for message in getMessages("offencive_moves") + getMessages("defencive_moves"): if prefix: strings.append( "{} {} {} {}".format( reprColor[color], prefix, _("and") + "\n", message ) ) prefix = "" else: strings.append(f"{reprColor[color]} {message}") # ---------------------------------------------------------------------- # Simple # ---------------------------------------------------------------------- # We only add simples if there hasn't been too much stuff to say if not strings: messages = getMessages("simple") if messages: messages.sort(reverse=True) score, message = messages[0] if prefix: strings.append( "%s %s %s %s" % (reprColor[color], prefix, _("and") + "\n", message) ) prefix = "" # ---------------------------------------------------------------------- # Prefix fallback # ---------------------------------------------------------------------- # There was nothing to apply the prefix to, so we just post it here # before the states and tips if prefix: strings.append(f"{reprColor[color]} {prefix}") prefix = "" # ---------------------------------------------------------------------- # State # ---------------------------------------------------------------------- messages = getMessages("state") messages.sort(reverse=True) for score, message in messages: strings.append(message) # ---------------------------------------------------------------------- # Tips # ---------------------------------------------------------------------- tips = getMessages("tip") tips.sort(reverse=True) for score, tip in tips: if tip in self.givenTips: oldscore, oldply = self.givenTips[tip] if score < oldscore * 1.3 or model.ply < oldply + 10: continue self.givenTips[tip] = (score, model.ply) strings.append(tip) break # ---------------------------------------------------------------------- # Last solution # ---------------------------------------------------------------------- if not strings: tcord = TCORD(model.getMoveAtPly(ply - 1).move) piece = model.getBoardAtPly(ply).board.arBoard[tcord] strings.append( _("%(color)s moves a %(piece)s to %(cord)s") % { "color": reprColor[color], "piece": reprPiece[piece], "cord": reprCord[tcord], } ) return ";\n".join(strings) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/engineOutputPanel.py0000755000175100001770000003735414614030313024666 0ustar00runnerdocker# Authors: Jonas Thiem import re from gi.repository import Gtk, GObject, Pango from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.Utils.const import ARTIFICIAL __title__ = _("Engines") __icon__ = addDataPrefix("glade/panel_engineoutput.svg") white = addDataPrefix("glade/panel_engineoutput.svg") __desc__ = _( "The engine output panel shows the thinking output of chess engines (computer players) during a game" ) class Sidepanel: def load(self, gmwidg): # Specify whether the panel should have a horizontal layout: horizontal = True if horizontal: self.box = Gtk.HBox() else: self.box = Gtk.VBox() __widget__ = self.box # Use two engine output widgets for each player color: self.output_white = EngineOutput(True) self.output_black = EngineOutput(False) if horizontal: self.output_separator = Gtk.VSeparator() else: self.output_separator = Gtk.HSeparator() self.output_noengines = Gtk.TextView() self.output_noengines.get_buffer().set_text( _("No chess engines (computer players) are participating in this game.") ) self.output_noengines.set_editable(False) self.output_noengines.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) __widget__.pack_start(self.output_noengines, True, True, 0) __widget__.show_all() self.boardview = gmwidg.board.view self.model_cids = [ self.boardview.model.connect_after("game_changed", self.game_changed), self.boardview.model.connect_after("players_changed", self.players_changed), self.boardview.model.connect_after("game_started", self.game_started), self.boardview.model.connect_after( "game_terminated", self.on_game_terminated ), ] return __widget__ def on_game_terminated(self, model): for cid in self.model_cids: self.boardview.model.disconnect(cid) def updateVisibleOutputs(self, model): # Check which players participate and update which views are visible # gotplayers = False if model is None: return # gotEnginePlayers = False gotWhiteEngine = False gotBlackEngine = False if len(model.players) > 0: if model.players[0].__type__ == ARTIFICIAL: gotWhiteEngine = True self.output_white.attachEngine(model.players[0].engine) if model.players[1].__type__ == ARTIFICIAL: gotBlackEngine = True self.output_black.attachEngine(model.players[1].engine) # First, detach from old engines: if not gotBlackEngine: self.output_black.detachEngine() if not gotWhiteEngine: self.output_white.detachEngine() if gotBlackEngine or gotWhiteEngine: # Remove "no engines" label: if self.output_noengines in self.box.get_children(): self.box.remove(self.output_noengines) # Add white engine info if white engine is participating: if gotWhiteEngine: if self.output_white not in self.box.get_children(): # Remove black output and separator first # to ensure proper ordering: if self.output_black in self.box.get_children(): self.box.remove(self.output_black) self.box.remove(self.output_separator) self.box.pack_start(self.output_white, True, True, 0) self.output_white.clear() self.output_white.show_all() self.output_white.setTitle(model.players[0].name) else: if self.output_white in self.box.get_children(): self.box.remove(self.output_white) self.box.remove(self.output_separator) # Add white engine info if black engine is participating: if gotBlackEngine: if self.output_black not in self.box.get_children(): if gotWhiteEngine: self.box.pack_start(self.output_separator, False, True, 0) self.output_separator.show() self.box.pack_start(self.output_black, True, True, 0) self.output_black.clear() self.output_black.show_all() self.output_black.setTitle(model.players[1].name) else: if self.output_black in self.box.get_children(): self.box.remove(self.output_black) self.box.remove(self.output_separator) else: # Show "no engines" label if self.output_white in self.box.get_children(): self.box.remove(self.output_white) if self.output_black in self.box.get_children(): self.box.remove(self.output_black) if self.output_noengines not in self.box.get_children(): self.box.pack_start(self.output_noengines, True, True, 0) return def players_changed(self, model): log.debug("engineOutputPanel.players_changed: starting") self.updateVisibleOutputs(model) log.debug("engineOutputPanel.players_changed: returning") return def game_started(self, model): self.updateVisibleOutputs(model) return def game_changed(self, model, ply): self.updateVisibleOutputs(model) return class EngineOutput(Gtk.VBox): def __init__(self, white=True): GObject.GObject.__init__(self) self.attached_engine = None # engine attached to which we listen self.white = white self.clear_on_output = False # next thinking line belongs to new move # Title bar: self.title_label = Gtk.Label() self.title_color = Gtk.Image() self.title_hbox = Gtk.HBox() # self.title_hbox.pack_start(self.title_color, False) self.title_hbox.pack_start(self.title_color, False, False, 0) # self.title_hbox.pack_start(self.title_label, True, True) self.title_hbox.pack_start(self.title_label, True, True, 0) # Set black or white player icon in front: if white is True: self.title_color.set_from_file(addDataPrefix("glade/white.png")) else: self.title_color.set_from_file(addDataPrefix("glade/black.png")) # output scrolled window container: self.output_container = Gtk.ScrolledWindow() self.output_container.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC ) # scroll down on new output: -- not reliable with multilines added # uistuff.keepDown(self.output_container) # scroll down on new output: -- brute force variant def changed(vadjust): vadjust.set_value(vadjust.get_upper() - vadjust.get_page_size()) self.output_container.get_vadjustment().connect("changed", changed) # Text field for output: self.output = Gtk.TextView() self.output_container.add(self.output) self.output.set_editable(False) self.output.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self.tag_bold = self.output.get_buffer().create_tag( "bold", weight=Pango.Weight.BOLD ) self.tag_color = self.output.get_buffer().create_tag( "color", foreground="#0033ff" ) # Add all sub widgets to ourselves: # self.pack_start(self.title_hbox, False) # self.pack_start(self.output_container, True) self.pack_start(self.title_hbox, False, False, 0) self.pack_start(self.output_container, True, True, 0) # Precompile regexes we want to use: self.re_thinking_line_cecp = re.compile(r"^[0-9]+\.? +\-?[0-9]+ +") self.re_thinking_line_uci = re.compile( r"^info (.*) pv [a-hA-H][0-9][a-hA-H][0-9](.*)$" ) self.re_move_line_cecp_alg = re.compile( r"^(move +)?[a-hA-H][0-9][a-hA-H][0-9]$" ) self.re_move_line_cecp_san = re.compile( r"^(move +)?([QKNB]?[a-hA-H]?[xX@]?[a-hA-H][0-9]\+?#?|[oO]-[oO]-[oO]|[oO]-[oO])$" ) self.re_move_line_uci = re.compile( r"^bestmove +[a-hA-H][0-9][a-hA-H][0-9]( .*)?$" ) self.re_extract_cecp_all = re.compile( r"^([0-9]+)\.? +(\-?[0-9]+) +([0-9]+).?([0-9]*) ([^ ].*)$" ) self.re_extract_uci_depth = re.compile(r"depth +([0-9]+) +") self.re_extract_uci_score = re.compile(r"score cp +(-?[0-9]+) +") self.re_extract_uci_score_mate_other = re.compile(r"score +mate +([0-9]+) +") self.re_extract_uci_score_mate_us = re.compile(r"score +mate +\-([0-9]+) +") self.re_extract_uci_score_lowerbound = re.compile(r"score +lowerbound +") self.re_extract_uci_score_upperbound = re.compile(r"score +upperbound +") self.re_extract_uci_pv = re.compile(r"pv +([a-hA-HoO].*[^ ]) *$") self.re_extract_uci_nps = re.compile(r"nps +([0-9]+) +") def _del(self): self.detachEngine() def appendNewline(self): # Start a new line if text output isn't empty: if self.output.get_buffer().get_char_count() > 0: # We have old content, append newline self.output.get_buffer().insert( self.output.get_buffer().get_end_iter(), "\n" ) def append(self, line, tag=None): # Append a specific string with the given formatting: # oldenditer = self.output.get_buffer().get_end_iter() self.output.get_buffer().insert(self.output.get_buffer().get_end_iter(), line) if tag is not None: enditer = self.output.get_buffer().get_end_iter() startiter = enditer.copy() startiter.backward_chars(len(line)) self.output.get_buffer().apply_tag(tag, startiter, enditer) def appendThinking(self, depth, score, pv, nps): # Append a formatted thinking line: self.appendNewline() self.append(depth.__str__() + ". ", self.tag_color) self.append("Score: ", self.tag_bold) self.append(score.__str__() + " ") self.append("PV: ", self.tag_bold) self.append(pv.__str__() + " ") if nps != "": self.append("NPS: ", self.tag_bold) self.append(nps.__str__()) def parseInfoLine(self, line): # Parse an identified info line and add it to our output: if self.clear_on_output is True: self.clear_on_output = False self.clear() # Clean up line first: while line.find(" ") != -1: line = line.replace(" ", " ") depth = "?" score = "?" pv = "?" nps = "" infoFound = False # do more sophisticated parsing here: if line.startswith("info "): # UCI info line # always end with a space to faciliate searching: line = line + " " # parse depth: result = self.re_extract_uci_depth.search(line) if result: depth = result.group(1) # parse score: result = self.re_extract_uci_score.search(line) if result: score = result.group(1) else: result = self.re_extract_uci_score_mate_other.search(line) if result: score = "winning in " + result.group(1) + " moves" else: result = self.re_extract_uci_score_mate_us.search(line) if result: score = "losing in " + result.group(1) + " moves" else: if self.re_extract_uci_score_lowerbound.search(line): score = "lowerbound" elif self.re_extract_uci_score_upperbound.search(line): score = "upperbound" # parse pv: result = self.re_extract_uci_pv.search(line) if result: infoFound = True pv = result.group(1) # parse nps: result = self.re_extract_uci_nps.search(line) if result: infoFound = True nps = result.group(1) else: # CECP/Winboard/GNUChess info line # parse all information in one go: result = self.re_extract_cecp_all.match(line) if not result: return infoFound = True depth = result.group(1) score = result.group(2) time = result.group(3) nodes = result.group(4) pv = result.group(5) nps = str(int(int(nodes) / (int(time) / 100))) if int(time) > 0 else "" # Clean pv of unwanted chars: pv = re.sub("[^a-z^A-Z^0-9^ ^x^@^?]", "", pv) # If we found useful information, show it: if infoFound: self.appendThinking(depth, score, pv, nps) def parseLine(self, engine, line): # Clean up the line a bit: line = line.strip(" \r\t\n") line = line.replace("\t", " ") # PARSING THINKING OUTPUT (roughly, simply identifies the lines): # GNU Chess/CECP/Winboard engine thinking output lines: if self.re_thinking_line_cecp.match(line): self.parseInfoLine(line) # UCI engine thinking output lines: if self.re_thinking_line_uci.match(line): if line.find("depth") != -1 and line.find("score") != -1: self.parseInfoLine(line) # PARSE MOVE LINES (roughly, we merely identify them): # We want to clear on the next output info line # when a move arrived, so that for every move # we freshly fill our thinking output: # CECP/Winboard move line, long algebraeic notation: if self.re_move_line_cecp_alg.match(line): self.clear_on_output = True # CECP/Winboard move line, SAN notation: if self.re_move_line_cecp_san.match(line): self.clear_on_output = True # UCI move line: if self.re_move_line_uci.match(line): self.clear_on_output = True return def clear(self): self.output.get_buffer().set_text("") return def setTitle(self, title): self.title_label.set_text(title) return def attachEngine(self, engine): # Attach an engine for line listening if self.attached_engine is not None: if self.attached_engine == engine: # We are already attached to this engine return # Detach from previous engine self.attached_engine.disconnect(self.attached_handler_id) # Attach to new engine: log.debug( "Attaching " + self.__str__() + " to engine " + engine.__str__(), extra={"task": engine.defname}, ) self.attached_engine = engine self.attached_handler_id = engine.connect("line", self.parseLine) return def detachEngine(self): # Detach from attached engine if self.attached_engine is not None: log.debug( "Detaching " + self.__str__() + " from engine " + self.attached_engine.__str__(), extra={"task": self.attached_engine.defname}, ) self.attached_engine.disconnect(self.attached_handler_id) self.attached_engine = None def __repr__(self): color = "black" if self.white: color = "white" return "Engine Output " + color + " #" + id(self).__str__() # def __str__(self): # return repr(self) + " (engine: " + self.attached_engine.__str__() + ")" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/historyPanel.py0000755000175100001770000002411714614030313023672 0ustar00runnerdockerfrom gi.repository import Gtk, Gdk from pychess.System import conf from pychess.System.prefix import addDataPrefix from pychess.Utils.const import BLACK from pychess.Utils.Move import toSAN, toFAN from pychess.widgets.Background import hexcol __title__ = _("Move History") __active__ = True __icon__ = addDataPrefix("glade/panel_moves.svg") __desc__ = _( "The moves sheet keeps track of the players' moves and lets you navigate through the game history" ) class Sidepanel: def load(self, gmwidg): self.gamemodel = gmwidg.board.view.model self.model_cids = [ self.gamemodel.connect_after("game_changed", self.game_changed), self.gamemodel.connect_after("game_started", self.game_started), self.gamemodel.connect_after("moves_undone", self.moves_undone), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), ] self.tv = Gtk.TreeView() self.tv.set_headers_visible(False) self.tv.set_grid_lines(True) self.tv.set_activate_on_single_click(True) self.tv.get_selection().set_mode(Gtk.SelectionMode.NONE) self.activated_cell = (None, None) def is_row_separator(treemodel, treeiter): mvcount, wmove, bmove, row, wbg, bbg = self.store[treeiter] return row == 0 self.tv.set_row_separator_func(is_row_separator) self.tv.connect("style-updated", self.on_style_updated) movetext_font = conf.get("movetextFont") renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn("mvcount", renderer, text=0) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.tv.append_column(column) self.white_renderer = Gtk.CellRendererText() self.white_renderer.set_property("xalign", 1) self.white_renderer.set_property("font", movetext_font) self.white_column = Gtk.TreeViewColumn( "white", self.white_renderer, text=1, background=4 ) self.white_column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.tv.append_column(self.white_column) self.black_renderer = Gtk.CellRendererText() self.black_renderer.set_property("xalign", 1) self.black_renderer.set_property("font", movetext_font) self.black_column = Gtk.TreeViewColumn( "black", self.black_renderer, text=2, background=5 ) self.black_column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.tv.append_column(self.black_column) # To prevent black moves column expand to the right we add a dummy column finally renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn("dummy", renderer) self.tv.append_column(column) scrollwin = Gtk.ScrolledWindow() scrollwin.add(self.tv) # Our liststore elements will be: # mvcount, white move, black move, row number, white move background, black move background self.store = Gtk.ListStore(str, str, str, int, str, str) self.tv.set_model(self.store) self.tv_cid = self.tv.connect("row_activated", self.on_row_activated) self.boardview = gmwidg.board.view self.cid = self.boardview.connect("shownChanged", self.shownChanged) scrollwin.show_all() self.figuresInNotation = conf.get("figuresInNotation") def figuresInNotationCallback(none): game = self.boardview.model if game.lesson_game: return self.figuresInNotation = conf.get("figuresInNotation") for i, move in enumerate(game.moves): board = game.variations[0][i] ply = game.lowply + i + 1 if conf.get("figuresInNotation"): notat = toFAN(board, move) else: notat = toSAN(board, move, True) row, column = self.ply_to_row_col(ply) col = 2 if column == self.black_column else 1 treeiter = self.store.get_iter(Gtk.TreePath(row)) self.store.set_value(treeiter, col, notat) def font_changed(none): movetext_font = conf.get("movetextFont") self.black_renderer.set_property("font", movetext_font) self.white_renderer.set_property("font", movetext_font) self.shownChanged(self.boardview, self.boardview.shown) self.cids_conf = [] self.cids_conf.append(conf.notify_add("movetextFont", font_changed)) self.cids_conf.append( conf.notify_add("figuresInNotation", figuresInNotationCallback) ) return scrollwin def get_background_rgba(self, selected=False): if selected: found, color = self.tv.get_style_context().lookup_color( "theme_selected_bg_color" ) else: found, color = self.tv.get_style_context().lookup_color("theme_base_color") return hexcol(Gdk.RGBA(color.red, color.green, color.blue, 1)) def on_style_updated(self, widget): for row in self.store: row[4] = self.get_background_rgba() row[5] = self.get_background_rgba() # update selected cell self.shownChanged(self.boardview, self.boardview.shown) def on_game_terminated(self, model): self.tv.disconnect(self.tv_cid) for cid in self.model_cids: self.gamemodel.disconnect(cid) self.boardview.disconnect(self.cid) for cid in self.cids_conf: conf.notify_remove(cid) def on_row_activated(self, tv, path, col, from_show_changed=False): if col not in (self.white_column, self.black_column): return # Make previous activated cell background color unselected old_row, old_col = self.activated_cell if old_row is not None: bg_col = 5 if old_col == self.black_column else 4 treeiter = self.store.get_iter(Gtk.TreePath(old_row)) self.store.set_value( treeiter, bg_col, self.get_background_rgba(selected=False) ) # Make activated cell background color selected self.activated_cell = path[0], col bg_col = 5 if col == self.black_column else 4 treeiter = self.store.get_iter(Gtk.TreePath(path[0])) self.store.set_value(treeiter, bg_col, self.get_background_rgba(selected=True)) index = path[0] * 2 - 1 + (1 if col == self.black_column else 0) if self.gamemodel.starting_color == BLACK: index -= 1 if index < len(self.gamemodel.boards): # Don't set shown board if on_row_activated() was called from shownChanged() if not from_show_changed: board = self.gamemodel.boards[index] self.boardview.setShownBoard(board) def shownChanged(self, boardview, shown): if boardview is None or self.gamemodel is None: return if not boardview.shownIsMainLine(): return row, column = self.ply_to_row_col(shown) try: self.on_row_activated( self, Gtk.TreePath(row), column, from_show_changed=True ) self.tv.scroll_to_cell(row) except ValueError: pass # deleted variations by moves_undoing def moves_undone(self, gamemodel, moves): for i in range(moves): treeiter = self.store.get_iter((len(self.store) - 1,)) # If latest move is black move don't remove whole line! if self.store[-1][2]: self.store.set_value(treeiter, 2, "") else: self.store.remove(treeiter) def game_changed(self, gamemodel, ply): if self.boardview is None or self.boardview.model is None: return if len(self.store) == 0: for i in range(len(self.store) + gamemodel.lowply, ply + 1): self.add_move(gamemodel, i) else: self.add_move(gamemodel, ply) self.shownChanged(self.boardview, ply) def game_started(self, game): if game.lesson_game: return self.game_changed(game, game.ply) def add_move(self, gamemodel, ply): if ply == gamemodel.lowply: self.store.append( [ "%4s." % gamemodel.lowply, "1234567", "1234567", 0, self.get_background_rgba(), self.get_background_rgba(), ] ) return if self.figuresInNotation: notat = toFAN( gamemodel.getBoardAtPly(ply - 1), gamemodel.getMoveAtPly(ply - 1) ) else: notat = toSAN( gamemodel.getBoardAtPly(ply - 1), gamemodel.getMoveAtPly(ply - 1), localRepr=True, ) row, column = self.ply_to_row_col(ply) if len(self.store) - 1 < row: mvcount = "%s." % ((ply + 1) // 2) if column == self.white_column: self.store.append( [ mvcount, notat, "", row, self.get_background_rgba(), self.get_background_rgba(), ] ) else: self.store.append( [ mvcount, "", notat, row, self.get_background_rgba(), self.get_background_rgba(), ] ) else: treeiter = self.store.get_iter(Gtk.TreePath(row)) col = 1 if column == self.white_column else 2 self.store.set_value(treeiter, col, notat) def ply_to_row_col(self, ply): col = ply & 1 and self.white_column or self.black_column if self.gamemodel.lowply & 1: row = (ply - self.gamemodel.lowply) // 2 else: row = (ply - self.gamemodel.lowply - 1) // 2 return row + 1, col ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/games/scorePanel.py0000755000175100001770000002561414614030313023307 0ustar00runnerdockerimport sys from math import e, floor from random import randint from gi.repository import Gtk, GObject from gi.repository import Gdk from pychess.System import uistuff, conf from pychess.System.prefix import addDataPrefix from pychess.Utils.const import WHITE, DRAW, WHITEWON, BLACKWON from pychess.Utils.lutils import leval __title__ = _("Score") __icon__ = addDataPrefix("glade/panel_score.svg") __desc__ = _( "The score panel tries to evaluate the positions and shows you a graph of the game progress" ) class Sidepanel: def load(self, gmwidg): self.boardview = gmwidg.board.view self.plot = ScorePlot(self.boardview) self.sw = __widget__ = Gtk.ScrolledWindow() __widget__.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) port = Gtk.Viewport() port.add(self.plot) port.set_shadow_type(Gtk.ShadowType.NONE) __widget__.add(port) __widget__.show_all() self.plot_cid = self.plot.connect("selected", self.plot_selected) self.cid = self.boardview.connect("shownChanged", self.shownChanged) self.model_cids = [ self.boardview.model.connect_after("game_changed", self.game_changed), self.boardview.model.connect_after("moves_undone", self.moves_undone), self.boardview.model.connect_after( "analysis_changed", self.analysis_changed ), self.boardview.model.connect_after("game_started", self.game_started), self.boardview.model.connect_after( "game_terminated", self.on_game_terminated ), ] def cb_config_changed(none): self.fetch_chess_conf() self.plot.redraw() self.cids_conf = [conf.notify_add("scoreLinearScale", cb_config_changed)] self.fetch_chess_conf() uistuff.keepDown(__widget__) return __widget__ def fetch_chess_conf(self): self.plot.linear_scale = conf.get("scoreLinearScale") def on_game_terminated(self, model): self.plot.disconnect(self.plot_cid) self.boardview.disconnect(self.cid) for cid in self.model_cids: self.boardview.model.disconnect(cid) for cid in self.cids_conf: conf.notify_remove(cid) def moves_undone(self, model, moves): for i in range(moves): self.plot.undo() # As shownChanged will normally be emitted just after game_changed - # if we are viewing the latest position - we can do the selection change # now, and thereby avoid redraw being called twice if self.plot.selected == model.ply - model.lowply: self.plot.select(model.ply - model.lowply - moves) self.plot.redraw() def game_changed(self, model, ply): if len(self.plot) + model.lowply > ply: return for i in range(len(self.plot) + model.lowply, ply): if i in model.scores: points = model.scores[i][1] points = points * -1 if i % 2 == 1 else points else: points = leval.evaluateComplete(model.getBoardAtPly(i).board, WHITE) self.plot.addScore(points) if model.status == DRAW: points = 0 elif model.status == WHITEWON: points = sys.maxsize elif model.status == BLACKWON: points = -sys.maxsize else: if ply in model.scores: points = model.scores[ply][1] points = points * -1 if ply % 2 == 1 else points else: try: points = leval.evaluateComplete( model.getBoardAtPly(ply).board, WHITE ) except IndexError: return self.plot.addScore(points) # As shownChanged will normally be emitted just after game_changed - # if we are viewing the latest position - we can do the selection change # now, and thereby avoid redraw being called twice if self.plot.selected == ply - model.lowply - 1: self.plot.select(ply - model.lowply) self.plot.redraw() # Uncomment this to debug eval function # --- # board = model.boards[-1].board # opboard = model.boards[-1].clone().board # opboard.setColor(1 - opboard.color) # material, phase = leval.evalMaterial(board) # if board.color == WHITE: # print("material", -material) # e1 = leval.evalKingTropism(board) # e2 = leval.evalKingTropism(opboard) # print("evaluation: %d + %d = %d " % (e1, e2, e1 + e2)) # p1 = leval.evalPawnStructure(board, phase) # p2 = leval.evalPawnStructure(opboard, phase) # print("pawns: %d + %d = %d " % (p1, p2, p1 + p2)) # print("knights:", -leval.evalKnights(board)) # print("king:", -leval.evalKing(board, phase)) # else: # print("material", material) # print("evaluation:", leval.evalKingTropism(board)) # print("pawns:", leval.evalPawnStructure(board, phase)) # print("pawns2:", leval.evalPawnStructure(opboard, phase)) # print("pawns3:", leval.evalPawnStructure(board, phase) + # leval.evalPawnStructure(opboard, phase)) # print("knights:", leval.evalKnights(board)) # print("king:", leval.evalKing(board, phase)) # print("----------------------") def game_started(self, model): if model.lesson_game: return self.game_changed(model, model.ply) def shownChanged(self, boardview, shown): if not boardview.shownIsMainLine(): return if self.plot.selected != shown: self.plot.select(shown - self.boardview.model.lowply) self.plot.redraw() def analysis_changed(self, gamemodel, ply): if self.boardview.animating: return if not self.boardview.shownIsMainLine(): return if ply - gamemodel.lowply > len(self.plot.scores) - 1: # analysis line of yet undone position return color = (ply - 1) % 2 score = gamemodel.scores[ply][1] score = score * -1 if color == WHITE else score self.plot.changeScore(ply - gamemodel.lowply, score) self.plot.redraw() def plot_selected(self, plot, selected): try: board = self.boardview.model.boards[selected] except IndexError: return self.boardview.setShownBoard(board) class ScorePlot(Gtk.DrawingArea): __gtype_name__ = "ScorePlot" + str(randint(0, sys.maxsize)) __gsignals__ = {"selected": (GObject.SignalFlags.RUN_FIRST, None, (int,))} def __init__(self, boardview): GObject.GObject.__init__(self) self.boardview = boardview self.connect("draw", self.expose) self.connect("button-press-event", self.press) self.props.can_focus = True self.set_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.KEY_PRESS_MASK) self.scores = [] self.selected = 0 def get_move_height(self): c = self.__len__() w = self.get_allocation().width if c != 0: w = int(floor(w / c)) return max(min(w, 24), 1) def addScore(self, score): self.scores.append(score) def changeScore(self, ply, score): if self.scores: self.scores[ply] = score def __len__(self): return len(self.scores) def undo(self): del self.scores[-1] def select(self, index): self.selected = index def clear(self): del self.scores[:] def redraw(self): if self.get_window(): a = self.get_allocation() rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = (0, 0, a.width, a.height) self.get_window().invalidate_rect(rect, True) self.get_window().process_updates(True) def press(self, widget, event): self.grab_focus() self.emit("selected", event.x / self.get_move_height()) def expose(self, widget, context): a = widget.get_allocation() context.rectangle(0, 0, a.width, a.height) context.clip() self.draw(context) return False def draw(self, cr): m = self.boardview.model if m.isPlayingICSGame(): return width = self.get_allocation().width height = self.get_allocation().height ######################################## # Draw background # ######################################## cr.set_source_rgb(1, 1, 1) cr.rectangle(0, 0, width, height) cr.fill() ######################################## # Draw the actual plot (dark area) # ######################################## def sign(n): return n == 0 and 1 or n / abs(n) def mapper(score): if self.linear_scale: return min(abs(score), 800) / 800 * sign(score) # Linear else: return (e ** (5e-4 * abs(score)) - 1) * sign( score ) # Exponentially stretched if self.scores: cr.set_source_rgb(0, 0, 0) cr.move_to(0, height) cr.line_to(0, (height / 2.0) * (1 + mapper(self.scores[0]))) for i, score in enumerate(self.scores): x = (i + 1) * self.get_move_height() y = (height / 2.0) * (1 + mapper(score)) y = max(0, min(height, y)) cr.line_to(x, y) cr.line_to(x, height) cr.fill() else: x = 0 cr.set_source_rgb(0.9, 0.9, 0.9) cr.rectangle(x, 0, width, height) cr.fill() ######################################## # Draw middle line and markers # ######################################## cr.set_line_width(0.25) markers = [16, -16, 8, -8, 3, -3, 0] # centipawns for mark in markers: if mark == 0: cr.set_source_rgb(1, 0, 0) else: cr.set_source_rgb(0.85, 0.85, 0.85) y = (height / 2.0) * (1 + mapper(100 * mark)) y = max(0, min(height, y)) cr.move_to(0, y) cr.line_to(width, y) cr.stroke() ######################################## # Draw selection # ######################################## lw = 2 cr.set_line_width(lw) s = self.get_move_height() x = self.selected * s cr.rectangle(x - lw / 2, lw / 2, s + lw, height - lw) found, color = self.get_style_context().lookup_color("p_bg_selected") cr.set_source_rgba(color.red, color.green, color.blue, 0.15) cr.fill_preserve() cr.set_source_rgb(color.red, color.green, color.blue) cr.stroke() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9054768 pychess-1.0.5/lib/pychess/perspectives/learn/0000755000175100001770000000000014614030425020640 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/EndgamesPanel.py0000644000175100001770000001572514614030313023723 0ustar00runnerdockerimport asyncio import random from io import StringIO from gi.repository import Gtk from pychess.System.prefix import addDataPrefix from pychess.Utils.const import ( WHITE, BLACK, LOCAL, NORMALCHESS, ARTIFICIAL, chr2Sign, chrU2Sign, FAN_PIECES, HINT, ENDGAME, ) from pychess.Utils.LearnModel import LearnModel from pychess.Utils.TimeModel import TimeModel from pychess.Utils.lutils.attack import isAttacked from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import FILE, RANK from pychess.Variants import variants from pychess.Players.Human import Human from pychess.Players.engineNest import discoverer from pychess.System import conf from pychess.perspectives import perspective_manager from pychess.Savers import fen as fen_loader __title__ = _("Endgames") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _("Practice endgames with computer") # TODO: get it from a text file ENDGAMES = ( ("kpk", "King and Pawn vs King"), ("kbnk", "King, Bishop and Knight vs King"), ("kbbk", "King and 2 Bishops vs King"), ("krk", "King and Rook vs King"), ("kqk", "King and Queen vs King"), ("kqkr", "King and Queen vs King and Rook"), ("krpkr", "King, Rook and Pawn vs King and Rook"), ("kppkp", "King and 2 Pawns vs King and Pawn"), ("kpkp", "King and Pawn vs King and Pawn"), ("kqpkq", "King, Queen and Pawn vs King and Queen"), ("knnkp", "King and Two Knights and vs King and Pawn"), ("kppkpp", "King and two pawns vs King and two pawns"), ("kqqkqr", "King and two queens vs King and Queen"), ) class Sidepanel: def load(self, persp): self.persp = persp self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.tv = Gtk.TreeView() renderer = Gtk.CellRendererText() renderer.props.font = "Times 14" column = Gtk.TreeViewColumn(_("White"), renderer, text=0) self.tv.append_column(column) renderer = Gtk.CellRendererText() renderer.props.font = "Times 14" column = Gtk.TreeViewColumn(_("Black"), renderer, text=1) self.tv.append_column(column) renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Title"), renderer, text=2) self.tv.append_column(column) self.tv.connect("row-activated", self.row_activated) self.store = Gtk.ListStore(str, str, str) for pieces, title in ENDGAMES: if pieces.count("k") != 2: print("Game needs exactly 2 kings! %s" % pieces) continue elif len(pieces) > 6: print("Max 6 pieces, please! %s" % pieces) continue else: for piece in pieces: if piece not in ("kqrbnp"): print(f"Invalid piece {piece} in {pieces}") continue pos = pieces.rfind("k") white_pieces, black_pieces = pieces[:pos], pieces[pos:] wfan = [] for piece in white_pieces: wfan.append(FAN_PIECES[0][chr2Sign[piece]]) bfan = [] for piece in black_pieces: bfan.append(FAN_PIECES[1][chr2Sign[piece]]) self.store.append(["".join(wfan), "".join(bfan), title]) self.tv.set_model(self.store) self.tv.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.tv.set_cursor(conf.get("learncombo%s" % ENDGAME)) scrollwin = Gtk.ScrolledWindow() scrollwin.add(self.tv) scrollwin.show_all() self.box.pack_start(scrollwin, True, True, 0) self.box.show_all() return self.box def row_activated(self, widget, path, col): if path is None: return else: pieces = ENDGAMES[path[0]][0].lower() conf.set("categorycombo", ENDGAME) from pychess.widgets.TaskerManager import learn_tasker learn_tasker.learn_combo.set_active(path[0]) start_endgame_from(pieces) def start_endgame_from(pieces): fen = create_fen(pieces) timemodel = TimeModel(0, 0) gamemodel = LearnModel(timemodel) gamemodel.set_learn_data(ENDGAME, pieces) player_name = conf.get("firstName") p0 = (LOCAL, Human, (WHITE, player_name), player_name) engine = discoverer.getEngineByName(discoverer.getEngineLearn()) ponder_off = True engine_name = discoverer.getName(engine) p1 = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, BLACK, 20, variants[NORMALCHESS], 60, 0, 0, ponder_off), engine_name, ) def restart_analyzer(gamemodel): asyncio.create_task(gamemodel.restart_analyzer(HINT)) gamemodel.connect("learn_success", restart_analyzer) def on_game_started(gamemodel): perspective.activate_panel("annotationPanel") asyncio.create_task( gamemodel.start_analyzer(HINT, force_engine=discoverer.getEngineLearn()) ) gamemodel.connect("game_started", on_game_started) perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart( gamemodel, p0, p1, loaddata=(StringIO(fen), fen_loader, 0, -1) ) ) def create_fen(pieces): """Create a random FEN position using given pieces""" pos = pieces.rfind("k") pieces = pieces[:pos], pieces[pos:] ok = False while not ok: lboard = LBoard() lboard.applyFen("8/8/8/8/8/8/8/8 w - - 0 1") bishop_cords = [[], []] bishop_colors_ok = True cords = list(range(0, 64)) pawn_cords = list(range(0 + 8, 64 - 8)) # Order of color is important here to prevent offering # positions with trivial captures in first move for color in (WHITE, BLACK): for char in pieces[color]: piece = chrU2Sign[char.upper()] attacked = True limit = 100 while attacked and limit > 0: cord = random.choice(pawn_cords if char == "p" else cords) attacked = isAttacked(lboard, cord, 1 - color) limit -= 1 lboard._addPiece(cord, piece, color) cords.remove(cord) if cord in pawn_cords: pawn_cords.remove(cord) if char == "b": bishop_cords[color].append(cord) # 2 same color bishop is not ok if len(bishop_cords[color]) == 2 and bishop_colors_ok: b0, b1 = bishop_cords[color] b0_color = BLACK if RANK(b0) % 2 == FILE(b0) % 2 else WHITE b1_color = BLACK if RANK(b1) % 2 == FILE(b1) % 2 else WHITE if b0_color == b1_color: bishop_colors_ok = False break ok = ( (not lboard.isChecked()) and (not lboard.opIsChecked()) and bishop_colors_ok ) fen = lboard.asFen() return fen ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/LecturesPanel.py0000644000175100001770000002661314614030313023764 0ustar00runnerdockerimport asyncio from io import StringIO from gi.repository import Gtk from pychess.System.prefix import addDataPrefix from pychess.Utils.const import WHITE, BLACK, LOCAL, RUNNING, LECTURE from pychess.Utils.LearnModel import LearnModel from pychess.Utils.TimeModel import TimeModel from pychess.Utils.Move import parseAny from pychess.Players.Human import Human from pychess.perspectives import perspective_manager from pychess.Savers import fen as fen_loader from pychess.System import conf __title__ = _("Lectures") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _("Study FICS lectures offline") LECTURES = ( ("lec1.txt", "2...Qh4+ against the King's Gambit", "toddmf"), ("lec2.txt", "Tactics Training lesson 1# 'Back rank weakness'", "knackie"), ("lec3.txt", "Denker's Favorite Game", "toddmf"), ("lec4.txt", "Introduction to the 2.Nc3 Caro-Kann", "KayhiKing"), ("lec5.txt", "Tactics Training lesson 2# 'Discovered Attack'", "knackie"), ("lec6.txt", "King's Indian Attack vs. the French", "cissmjg"), ("lec7.txt", "Rook vs Pawn endgames", "toddmf"), ("lec8.txt", "The Stonewall Attack", "MBDil"), ("lec9.txt", "Tactics Training lesson 3# 'Enclosed Kings'", "knackie"), ("lec10.txt", "The Steinitz Variation of the French Defense", "Seipman"), ("lec11.txt", "A draw against a Grandmaster", "talpa"), ("lec12.txt", "Tactics Training lesson 4# 'King in the centre'", "knackie"), ("lec13.txt", "The Modern Defense", "GMDavies"), ( "lec14.txt", "Tactics Training lesson 5# 'Pulling the king to the open'", "knackie", ), ("lec15.txt", "King's Indian Attack vs. the Caro-Kann", "cissmjg"), ("lec16.txt", "Introduction to Bughouse", "Tecumseh"), ("lec17.txt", "Refuting the Milner-Barry Gambit in the French Defense", "Kabal"), ("lec18.txt", "Tactics Training lesson 6# 'Mating Attack'", "knackie"), ("lec19.txt", "Closed Sicilian Survey, part 1", "Oren"), ("lec20.txt", "Hypermodern Magic - A study of the central blockade", "Bahamut"), ("lec21.txt", "Tactics Training lesson 7# 'Opening / Closing Files'", "knackie"), ("lec22.txt", "Thoughts on the Refutation of the Milner-Barry", "knackie"), ( "lec23.txt", "Tactics Training lesson 8# 'Opening / Closing Diagonals'", "knackie", ), ("lec24.txt", "King's Indian Attack vs. Other Defenses", "cissmjg"), ("lec25.txt", "Basic Pawn Endings I", "DAV"), ("lec26.txt", "Giuoco Piano", "afw"), ("lec27.txt", "Tactics Training lesson 9# 'Long Diagonals'", "knackie"), ("lec28.txt", "Secrets of the Flank Attack", "Shidinov"), ("lec29.txt", "Mating Combinations", "Kabal"), ("lec30.txt", "Basic Pawn Endings II", "DAV"), ("lec31.txt", "Grandmaster Knezevic's first FICS lecture", "toddmf"), ) class Sidepanel: def load(self, persp): self.persp = persp self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.tv = Gtk.TreeView() renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Title"), renderer, text=1) self.tv.append_column(column) renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Author"), renderer, text=2) self.tv.append_column(column) self.tv.connect("row-activated", self.row_activated) self.store = Gtk.ListStore(str, str, str) for file_name, title, author in LECTURES: self.store.append([file_name, title, author]) self.tv.set_model(self.store) self.tv.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.tv.set_cursor(conf.get("learncombo%s" % LECTURE)) scrollwin = Gtk.ScrolledWindow() scrollwin.add(self.tv) scrollwin.show_all() self.box.pack_start(scrollwin, True, True, 0) self.box.show_all() return self.box def row_activated(self, widget, path, col): if path is None: return else: filename = LECTURES[path[0]][0] conf.set("categorycombo", LECTURE) from pychess.widgets.TaskerManager import learn_tasker learn_tasker.learn_combo.set_active(path[0]) start_lecture_from(filename) def start_lecture_from(filename, index=None): if index is None: index = 0 # connection.client.run_command("examine") timemodel = TimeModel(0, 0) gamemodel = LearnModel(timemodel) gamemodel.set_learn_data(LECTURE, filename, index) white_name = black_name = "PyChess" p0 = (LOCAL, Human, (WHITE, white_name), white_name) p1 = (LOCAL, Human, (BLACK, black_name), black_name) def on_game_started(gamemodel): perspective.activate_panel("chatPanel") gamemodel.connect("game_started", on_game_started) perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(gamemodel, p0, p1)) def lecture_steps(lecture_file): with open(lecture_file) as f: yield from f return lecture_file = addDataPrefix("learn/lectures/%s" % filename) steps = lecture_steps(lecture_file) async def coro(gamemodel, steps): exit_lecture = False inside_bsetup = False paused = False moves_played = 0 ( KIBITZ, BACKWARD, BSETUP, BSETUP_DONE, FEN, TOMOVE, WCASTLE, BCASTLE, WNAME, BNAME, REVERT, WAIT, MOVE, ) = range(13) while True: try: step = next(steps) print(step) parts = step.strip().split() command = None param = "" if parts[0].lower() in ("k", "ki", "kib", "kibitz"): command = KIBITZ param = " ".join(parts[1:]) elif parts[0] == "back": command = BACKWARD param = int(parts[1]) if len(parts) > 1 else 1 elif parts[0] == "bsetup": if len(parts) == 1: command = BSETUP else: if parts[1] == "done": command = BSETUP_DONE elif parts[1] == "fen": command = FEN param = parts[2] elif parts[1] == "tomove": command = TOMOVE param = "w" if parts[2].lower()[0] == "w" else "b" elif parts[1] == "wcastle": command = WCASTLE param = parts[2] elif parts[1] == "bcastle": command = BCASTLE param = parts[2] elif parts[0] == "tomove": command = TOMOVE param = "w" if parts[1].lower()[0] == "w" else "b" elif parts[0] == "wname": command = WNAME param = parts[1] elif parts[0] == "bname": command = BNAME param = parts[1] elif parts[0] == "revert": command = REVERT elif len(parts) == 1 and parts[0].isdigit(): command = WAIT param = int(parts[0]) else: command = MOVE param = parts[0] if not inside_bsetup and command == BSETUP: inside_bsetup = True pieces = "" color = "" castl = "" ep = "" elif inside_bsetup and command == BSETUP_DONE: inside_bsetup = False wait_sec = int(param) if command == WAIT else 2 if inside_bsetup: wait_sec = -1 while wait_sec >= 0: if gamemodel.lecture_exit_event.is_set(): gamemodel.lecture_exit_event.clear() exit_lecture = True break if gamemodel.lecture_skip_event.is_set(): gamemodel.lecture_skip_event.clear() paused = False break if gamemodel.lecture_pause_event.is_set(): gamemodel.lecture_pause_event.clear() paused = True await asyncio.sleep(0.1) if not paused: wait_sec = wait_sec - 0.1 if exit_lecture: gamemodel.players[0].putMessage("Lecture exited.") break if command != WAIT: if command == KIBITZ: gamemodel.players[0].putMessage(param) if command == BACKWARD: gamemodel.undoMoves(param) moves_played -= param if command == MOVE: board = gamemodel.getBoardAtPly(gamemodel.ply) move = parseAny(board, param) gamemodel.curplayer.move_queue.put_nowait(move) moves_played += 1 elif command == REVERT: gamemodel.undoMoves(moves_played) moves_played = 0 elif command == BNAME: gamemodel.players[BLACK].name = param gamemodel.emit("players_changed") elif command == WNAME: gamemodel.players[WHITE].name = param gamemodel.emit("players_changed") elif command == FEN: pieces = param elif command == TOMOVE: color = param elif command == WCASTLE: if param == "both": castl += "KQ" elif param == "kside": castl += "K" elif param == "qside": castl += "Q" elif command == BCASTLE: if param == "both": castl += "kq" elif param == "kside": castl += "k" elif param == "qside": castl += "q" elif command == BSETUP_DONE: if not castl: castl = "-" if not ep: ep = "-" fen = f"{pieces} {color} {castl} {ep} 0 1" curplayer = gamemodel.curplayer gamemodel.status = RUNNING gamemodel.loadAndStart( StringIO(fen), fen_loader, 0, -1, first_time=False ) curplayer.move_queue.put_nowait("int") gamemodel.emit("game_started") moves_played = 0 except StopIteration: # connection.client.run_command("kibitz That concludes this lecture.") break asyncio.create_task(coro(gamemodel, steps)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/LessonsPanel.py0000644000175100001770000001013214614030313023611 0ustar00runnerdockerimport asyncio import os from pychess.System.prefix import addDataPrefix from pychess.Utils.const import WHITE, BLACK, LOCAL, WAITING_TO_START, HINT, LESSON from pychess.Utils.LearnModel import LearnModel from pychess.Utils.TimeModel import TimeModel from pychess.Players.Human import Human from pychess.System import conf from pychess.perspectives import perspective_manager from pychess.perspectives.learn.generateLessonsSidepanel import generateLessonsSidepanel from pychess.perspectives.learn import lessons_solving_progress from pychess.perspectives.learn.PuzzlesPanel import start_puzzle_game from pychess.Savers.pgn import PGNFile from pychess.System.protoopen import protoopen from pychess.Players.engineNest import discoverer __title__ = _("Lessons") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _('Guided interactive lessons in "guess the move" style') LESSONS = [] for elem in sorted(os.listdir(path=addDataPrefix("learn/lessons/"))): if elem.startswith("lichess_study") and elem.endswith(".pgn"): title = elem.replace("beta-lichess-practice-", "") title = title[14 : title.find("_by_")].replace("-", " ").capitalize() LESSONS.append((elem, title, "lichess.org")) elif elem.endswith(".pgn"): LESSONS.append((elem, elem.replace("-", " ").capitalize(), "pychess.org")) # Note: Find the declaration of the class Sidepanel at the end of the file def start_lesson_from(filename, index=None): chessfile = PGNFile(protoopen(addDataPrefix("learn/lessons/%s" % filename))) chessfile.limit = 1000 chessfile.init_tag_database() records, plys = chessfile.get_records() progress = lessons_solving_progress.get(filename, [0] * chessfile.count) if index is None: try: index = progress.index(0) except ValueError: index = 0 rec = records[index] timemodel = TimeModel(0, 0) gamemodel = LearnModel(timemodel) chessfile.loadToModel(rec, -1, gamemodel) if len(gamemodel.moves) > 0: start_lesson_game(gamemodel, filename, chessfile, records, index, rec) else: start_puzzle_game(gamemodel, filename, records, index, rec, from_lesson=True) def start_lesson_game(gamemodel, filename, chessfile, records, index, rec): gamemodel.set_learn_data(LESSON, filename, index, len(records)) # Lichess doesn't export some study data to .pgn like # Orientation, Analysis mode, Chapter pinned comment, move hint comments, general fail comment if filename.startswith( "lichess_study_beta-lichess-practice-checkmating-with-a-knight-and-bishop" ): if index in (4, 6, 8, 9): gamemodel.tags["Orientation"] = "White" print(index, '[Orientation "White"]') color = gamemodel.boards[0].color player_name = conf.get("firstName") w_name = player_name if color == WHITE else "PyChess" b_name = "PyChess" if color == WHITE else player_name p0 = (LOCAL, Human, (WHITE, w_name), w_name) p1 = (LOCAL, Human, (BLACK, b_name), b_name) def learn_success(gamemodel): gamemodel.scores = {} chessfile.loadToModel(rec, -1, gamemodel) progress = lessons_solving_progress[gamemodel.source] progress[gamemodel.current_index] = 1 lessons_solving_progress[gamemodel.source] = progress if "FEN" in gamemodel.tags: asyncio.create_task(gamemodel.restart_analyzer(HINT)) gamemodel.connect("learn_success", learn_success) def on_game_started(gamemodel): perspective.activate_panel("annotationPanel") if "FEN" in gamemodel.tags: asyncio.create_task( gamemodel.start_analyzer(HINT, force_engine=discoverer.getEngineLearn()) ) gamemodel.connect("game_started", on_game_started) gamemodel.status = WAITING_TO_START perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(gamemodel, p0, p1)) # Sidepanel is a class Sidepanel = generateLessonsSidepanel( solving_progress=lessons_solving_progress, learn_category_id=LESSON, entries=LESSONS, start_from=start_lesson_from, ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/PuzzlesPanel.py0000644000175100001770000001424114614030313023644 0ustar00runnerdockerimport asyncio import os from pychess.System.prefix import addDataPrefix from pychess.Utils.const import ( WHITE, BLACK, LOCAL, NORMALCHESS, ARTIFICIAL, WAITING_TO_START, HINT, PRACTICE_GOAL_REACHED, PUZZLE, ) from pychess.Utils.LearnModel import LearnModel from pychess.Utils.TimeModel import TimeModel from pychess.Variants import variants from pychess.Players.Human import Human from pychess.Players.engineNest import discoverer from pychess.perspectives import perspective_manager from pychess.perspectives.learn.generateLessonsSidepanel import generateLessonsSidepanel from pychess.perspectives.learn import lessons_solving_progress from pychess.perspectives.learn import puzzles_solving_progress from pychess.Savers.olv import OLVFile from pychess.Savers.pgn import PGNFile from pychess.System import conf from pychess.System.protoopen import protoopen __title__ = _("Puzzles") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _("Lichess practice studies Puzzles from GM games and Chess compositions") # https://lichess.org/practice, http://wtharvey.com, http://www.yacpdb.org puzzles0 = [] puzzles1 = [] puzzles2 = [] puzzles3 = [] for elem in sorted(os.listdir(path=addDataPrefix("learn/puzzles/"))): if elem.startswith("lichess_study") and elem.endswith(".pgn"): if elem[14:31] == "lichess-practice-": puzzles0.append( ( elem, elem[31 : elem.find("_by_")].replace("-", " ").capitalize(), "lichess.org", ) ) else: puzzles0.append( ( elem, elem[14 : elem.find("_by_").replace("-", " ").capitalize()], "lichess.org", ) ) elif elem.startswith("mate_in_") and elem.endswith(".pgn"): puzzles1.append((elem, "Puzzles by GMs: Mate in %s" % elem[8], "wtharvey.com")) elif elem.endswith(".olv"): puzzles2.append( (elem, "Puzzles by %s" % elem.split(".olv")[0].capitalize(), "yacpdb.org") ) elif elem.endswith(".pgn"): puzzles3.append((elem, elem.split(".pgn")[0].capitalize(), _("others"))) PUZZLES = puzzles0 + puzzles1 + puzzles2 + puzzles3 # Note: Find the declaration of the class Sidepanel at the end of the file HINTS = { "r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - 1 20": (38, "c2h7"), "3r1rk1/bpq2ppp/p1b1p3/2P5/1P2B3/P4Q2/1B3PPP/2R2RK1 w - - 3 18": (34, "e4h7"), "8/8/3p1p2/1N2p3/4kNQ1/5n2/2K3B1/8 w - - 0 1": (0, "g2h1"), } def start_puzzle_from(filename, index=None): if filename.lower().endswith(".pgn"): chessfile = PGNFile(protoopen(addDataPrefix("learn/puzzles/%s" % filename))) chessfile.limit = 1000 chessfile.init_tag_database() elif filename.lower().endswith(".olv"): chessfile = OLVFile( protoopen(addDataPrefix("learn/puzzles/%s" % filename), encoding="utf-8") ) records, plys = chessfile.get_records() progress = puzzles_solving_progress.get(filename, [0] * chessfile.count) if index is None: try: index = progress.index(0) except ValueError: index = 0 rec = records[index] timemodel = TimeModel(0, 0) gamemodel = LearnModel(timemodel) chessfile.loadToModel(rec, 0, gamemodel) start_puzzle_game(gamemodel, filename, records, index, rec) def start_puzzle_game(gamemodel, filename, records, index, rec, from_lesson=False): gamemodel.set_learn_data( PUZZLE, filename, index, len(records), from_lesson=from_lesson ) if "FEN" in gamemodel.tags and gamemodel.tags["FEN"] in HINTS: gamemodel.add_hints(HINTS[gamemodel.tags["FEN"]]) engine = discoverer.getEngineByName(discoverer.getEngineLearn()) ponder_off = True color = gamemodel.boards[0].color w_name = "" if rec["White"] is None else rec["White"] b_name = "" if rec["Black"] is None else rec["Black"] player_name = conf.get("firstName") engine_name = discoverer.getName(engine) if rec["Event"].startswith("Lichess Practice"): w_name = player_name if color == WHITE else engine_name b_name = engine_name if color == WHITE else player_name opp_name = engine_name if rec["Event"].startswith("Lichess Practice") else b_name if color == WHITE: p0 = (LOCAL, Human, (WHITE, w_name), w_name) p1 = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, BLACK, 20, variants[NORMALCHESS], 20, 0, 0, ponder_off), b_name, ) else: p0 = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, WHITE, 20, variants[NORMALCHESS], 20, 0, 0, ponder_off), w_name, ) p1 = (LOCAL, Human, (BLACK, b_name), b_name) def on_game_started(gamemodel, name, color): perspective.activate_panel("annotationPanel") asyncio.create_task( gamemodel.start_analyzer(HINT, force_engine=discoverer.getEngineLearn()) ) gamemodel.players[1 - color].name = name gamemodel.emit("players_changed") gamemodel.connect("game_started", on_game_started, opp_name, color) def goal_checked(gamemodle): if gamemodel.reason == PRACTICE_GOAL_REACHED: if from_lesson: progress = lessons_solving_progress[gamemodel.source] else: progress = puzzles_solving_progress[gamemodel.source] progress[gamemodel.current_index] = 1 if from_lesson: lessons_solving_progress[gamemodel.source] = progress else: puzzles_solving_progress[gamemodel.source] = progress gamemodel.connect("goal_checked", goal_checked) gamemodel.variant.need_initial_board = True gamemodel.status = WAITING_TO_START perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(gamemodel, p0, p1)) # Sidepanel is a class Sidepanel = generateLessonsSidepanel( solving_progress=puzzles_solving_progress, learn_category_id=PUZZLE, entries=PUZZLES, start_from=start_puzzle_from, ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/__init__.py0000644000175100001770000002600014614030313022743 0ustar00runnerdockerimport os import json from abc import ABCMeta from collections import UserDict from gi.repository import Gdk, Gtk, GObject from gi.types import GObjectMeta from pychess.perspectives import Perspective, perspective_manager, panel_name from pychess.System.prefix import addUserConfigPrefix, addDataPrefix from pychess.System.Log import log from pychess.widgets import new_notebook, mainwindow from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock import WEST, SOUTH, CENTER from pychess.System.prefix import addUserDataPrefix from pychess.Savers.olv import OLVFile from pychess.Savers.pgn import PGNFile from pychess.System.protoopen import protoopen class Learn(GObject.GObject, Perspective): def __init__(self): GObject.GObject.__init__(self) Perspective.__init__(self, "learn", _("Learn")) self.always_on = True self.dockLocation = addUserConfigPrefix("pydock-learn.xml") self.first_run = True def create_toolbuttons(self): def on_exit_clicked(button): perspective_manager.disable_perspective("learn") self.exit_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_QUIT) self.exit_button.set_tooltip_text(_("Quit Learning")) self.exit_button.set_label("exit") self.exit_button.connect("clicked", on_exit_clicked) def init_layout(self): perspective_manager.set_perspective_toolbuttons("learn", (self.exit_button,)) perspective_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) perspective_manager.set_perspective_widget("learn", perspective_widget) self.notebooks = {"home": new_notebook()} self.main_notebook = self.notebooks["home"] for panel in self.sidePanels: self.notebooks[panel_name(panel.__name__)] = new_notebook( panel_name(panel.__name__) ) self.dock = PyDockTop("learn", self) align = Gtk.Alignment() align.show() align.add(self.dock) self.dock.show() perspective_widget.pack_start(align, True, True, 0) self.notebooks = {"learnhome": new_notebook()} self.main_notebook = self.notebooks["learnhome"] for panel in self.sidePanels: self.notebooks[panel_name(panel.__name__)] = new_notebook( panel_name(panel.__name__) ) self.docks["learnhome"] = ( Gtk.Label(label="learnhome"), self.notebooks["learnhome"], None, ) for panel in self.sidePanels: self.docks[panel_name(panel.__name__)][1] = self.notebooks[ panel_name(panel.__name__) ] self.load_from_xml() # Default layout of side panels first_time_layout = False if not os.path.isfile(self.dockLocation): first_time_layout = True leaf0 = self.dock.dock( self.docks["learnhome"][1], CENTER, self.docks["learnhome"][0], "learnhome", ) leaf0.setDockable(False) leaf = leaf0.dock( self.docks["PuzzlesPanel"][1], WEST, self.docks["PuzzlesPanel"][0], "PuzzlesPanel", ) leaf.dock( self.docks["LessonsPanel"][1], SOUTH, self.docks["LessonsPanel"][0], "LessonsPanel", ) leaf = leaf0.dock( self.docks["LecturesPanel"][1], SOUTH, self.docks["LecturesPanel"][0], "LecturesPanel", ) leaf.dock( self.docks["EndgamesPanel"][1], SOUTH, self.docks["EndgamesPanel"][0], "EndgamesPanel", ) def unrealize(dock): dock.saveToXML(self.dockLocation) dock._del() self.dock.connect("unrealize", unrealize) self.dock.show_all() perspective_widget.show_all() perspective_manager.set_perspective_menuitems( "learn", self.menuitems, default=first_time_layout ) log.debug("Learn.__init__: finished") def activate(self): if self.first_run: self.init_layout() self.first_run = False learn_home = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) box = Gtk.Box() self.tv = Gtk.TreeView() color = Gdk.RGBA() color.parse("lightblue") for i, col in enumerate( (_("lichess"), _("wtharvey"), _("yacpdb"), _("lessons")) ): renderer = Gtk.CellRendererProgress() renderer.set_orientation(Gtk.Orientation.VERTICAL) renderer.props.height = 100 renderer.props.inverted = True renderer.props.cell_background_rgba = color column = Gtk.TreeViewColumn(col, renderer, text=i * 2, value=i * 2 + 1) self.tv.append_column(column) self.store = Gtk.ListStore(str, int, str, int, str, int, str, int) self.update_progress(None, None, None) self.tv.set_model(self.store) self.tv.get_selection().set_mode(Gtk.SelectionMode.NONE) puzzles_solving_progress.connect("progress_updated", self.update_progress) lessons_solving_progress.connect("progress_updated", self.update_progress) box.pack_start(self.tv, False, False, 6) label = Gtk.Label(xpad=6, xalign=0) label.set_markup("%s" % _("Progress")) learn_home.pack_start(label, False, False, 6) learn_home.pack_start(box, False, False, 0) reset = Gtk.Button(_("Reset my progress")) learn_home.pack_start(reset, False, False, 6) def on_reset_clicked(button): dialog = Gtk.MessageDialog( mainwindow(), 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.OK_CANCEL, _("You will lose all your progress data!"), ) response = dialog.run() if response == Gtk.ResponseType.OK: for filename, progress in lessons_solving_progress.items(): lessons_solving_progress[filename] = [0] * len(progress) for filename, progress in puzzles_solving_progress.items(): puzzles_solving_progress[filename] = [0] * len(progress) self.update_progress(None, None, None) dialog.destroy() reset.connect("clicked", on_reset_clicked) learn_home.show_all() if not self.first_run: self.notebooks["learnhome"].remove_page(-1) self.notebooks["learnhome"].append_page(learn_home) self.panels = [panel.Sidepanel().load(self) for panel in self.sidePanels] for panel, instance in zip(self.sidePanels, self.panels): if not self.first_run: self.notebooks[panel_name(panel.__name__)].remove_page(-1) self.notebooks[panel_name(panel.__name__)].append_page(instance) instance.show() perspective_manager.activate_perspective("learn") def update_progress(self, solving_progress, key, progress): self.store.clear() # Compute cumulative puzzles solving statistics solving_progress = puzzles_solving_progress.read_all() stat = [0, 0, 0, 0, 0, 0, 0, 0] for filename, progress in solving_progress.items(): if filename.startswith("lichess"): stat[0] += len(progress) stat[1] += progress.count(1) elif filename.startswith("mate_in"): stat[2] += len(progress) stat[3] += progress.count(1) elif filename.endswith(".olv"): stat[4] += len(progress) stat[5] += progress.count(1) # Compute cumulative lessons solving statistics solving_progress = lessons_solving_progress.read_all() for filename, progress in solving_progress.items(): stat[6] += len(progress) stat[7] += progress.count(1) stats = [] for i in range(4): percent = ( 0 if not stat[i * 2 + 1] else round((stat[i * 2 + 1] * 100.0) / stat[i * 2]) ) stats.append("%s%%" % percent) stats.append(percent) self.store.append(stats) class GObjectMutableMapping(GObjectMeta, ABCMeta): """GObject.GObject and UserDict has different metaclasses so we have to create this metaclass to avoid TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases """ pass class SolvingProgress(GObject.GObject, UserDict, metaclass=GObjectMutableMapping): """Book keeping of puzzle/lesson solving progress Each dict key is a .pgn/.olv file name Values are list of 0/1 values showing a given file puzzles solved or not The dict is automatically synced with corresponding puzzles.json/lessons.json files """ __gsignals__ = { "progress_updated": ( GObject.SignalFlags.RUN_FIRST, None, ( str, object, ), ), } def __init__(self, progress_file): GObject.GObject.__init__(self) UserDict.__init__(self) self.progress_file = addUserDataPrefix(progress_file) def get_count(self, filename): subdir = "puzzles" if self.progress_file.endswith("puzzles.json") else "lessons" if filename.lower().endswith(".pgn"): chessfile = PGNFile(protoopen(addDataPrefix(f"learn/{subdir}/{filename}"))) chessfile.limit = 1000 chessfile.init_tag_database() elif filename.lower().endswith(".olv"): chessfile = OLVFile( protoopen( addDataPrefix(f"learn/{subdir}/{filename}"), encoding="utf-8", ) ) chessfile.close() count = chessfile.count return count def __getitem__(self, key): if os.path.isfile(self.progress_file): with open(self.progress_file) as f: self.data = json.load(f) if key not in self.data: self.__setitem__(key, [0] * self.get_count(key)) else: self.__setitem__(key, [0] * self.get_count(key)) # print("Solved: %s / %s %s" % (self[key].count(1), len(self[key]), key)) return self.data[key] def __setitem__(self, key, value): with open(self.progress_file, "w") as f: self.data[key] = value json.dump(self.data, f) self.emit("progress_updated", key, value) def read_all(self): if os.path.isfile(self.progress_file): with open(self.progress_file) as f: self.data = json.load(f) return self.data else: return {} puzzles_solving_progress = SolvingProgress("puzzles.json") lessons_solving_progress = SolvingProgress("lessons.json") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/learn/generateLessonsSidepanel.py0000644000175100001770000001230514614030313026175 0ustar00runnerdockerimport asyncio from gi.repository import Gtk from pychess.System import conf from pychess.Utils.const import COLUMN_ROW_RESET, GTK_ICON_VIEW_REFRESH from pychess.widgets import mainwindow def generateLessonsSidepanel(solving_progress, learn_category_id, entries, start_from): """ generateLessonsSidepanel returns a class to be used as a panel by Gtk. More specifically, that class is meant to be named Sidepanel. generateLessonsSidepanel allows to avoid duplicate code between PuzzlesPanel and LessonsPanel.py. """ class Sidepanel: def load(self, persp): self.persp = persp self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.tv = Gtk.TreeView() renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Title"), renderer, text=1) self.tv.append_column(column) renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Source"), renderer, text=2) self.tv.append_column(column) renderer = Gtk.CellRendererProgress() column = Gtk.TreeViewColumn(_("Progress"), renderer, text=3, value=4) column.set_expand(True) self.tv.append_column(column) renderer = Gtk.CellRendererPixbuf() column = Gtk.TreeViewColumn(_("Reset"), renderer, icon_name=5) column.set_name(COLUMN_ROW_RESET) self.tv.append_column(column) self.tv.connect("row-activated", self.row_activated) def on_progress_updated(solving_progress, key, progress): for i, row in enumerate(self.store): if row[0] == key: ( progress_ratio_string, percent, reset_icon, ) = self._compute_progress_info(progress) treeiter = self.store.get_iter(Gtk.TreePath(i)) self.store[treeiter][3] = progress_ratio_string self.store[treeiter][4] = percent self.store[treeiter][5] = reset_icon solving_progress.connect("progress_updated", on_progress_updated) self.store = Gtk.ListStore(str, str, str, str, int, str) async def coro(): for file_name, title, author in entries: progress = solving_progress.get(file_name) ( progress_ratio_string, percent, reset_icon, ) = self._compute_progress_info(progress) self.store.append( [ file_name, title, author, progress_ratio_string, percent, reset_icon, ] ) await asyncio.sleep(0) asyncio.create_task(coro()) self.tv.set_model(self.store) self.tv.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.tv.set_cursor(conf.get("learncombo%s" % learn_category_id)) scrollwin = Gtk.ScrolledWindow() scrollwin.add(self.tv) scrollwin.show_all() self.box.pack_start(scrollwin, True, True, 0) self.box.show_all() return self.box def row_activated(self, widget, path, col): if path is None: return else: filename, title, *_ = entries[path[0]] if col.get_name() == COLUMN_ROW_RESET: self._reset_progress_file(filename, title) else: conf.set("categorycombo", learn_category_id) from pychess.widgets.TaskerManager import learn_tasker learn_tasker.learn_combo.set_active(path[0]) start_from(filename) @staticmethod def _compute_progress_info(progress): solved = progress.count(1) percent = 0 if solved == 0 else round((solved * 100.0) / len(progress)) reset_icon = None if solved == 0 else GTK_ICON_VIEW_REFRESH return f"{solved} / {len(progress)}", percent, reset_icon def _reset_progress_file(self, filename, title): progress = solving_progress[filename] _str, _percent, reset_icon = self._compute_progress_info(progress) if reset_icon is not None: dialog = Gtk.MessageDialog( mainwindow(), 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.OK_CANCEL, _( 'This will reset the progress to 0 for the puzzle "{title}"' ).format(title=title), ) response = dialog.run() if response == Gtk.ResponseType.OK: solving_progress[filename] = [0] * len(progress) self.persp.update_progress(None, None, None) dialog.destroy() return Sidepanel ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9054768 pychess-1.0.5/lib/pychess/perspectives/welcome/0000755000175100001770000000000014614030425021172 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/perspectives/welcome/__init__.py0000644000175100001770000000041514614030313023277 0ustar00runnerdockerfrom pychess.widgets.TaskerManager import tasker from pychess.perspectives import Perspective class Welcome(Perspective): def __init__(self): Perspective.__init__(self, "welcome", _("Welcome")) self.default = True self.widget.add(tasker) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.909477 pychess-1.0.5/lib/pychess/widgets/0000755000175100001770000000000014614030425016471 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/Background.py0000755000175100001770000002056314614030313021127 0ustar00runnerdocker""" Sets the application background image """ from os import path from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from pychess.System import conf, uistuff from pychess.System.prefix import addDataPrefix, addUserCachePrefix surface = None provider = None loldcolor = None doldcolor = None def hexcol(color): """Description : Takes a colour tuple(rgb) and returns a hex based string #rrggbb Returns : (str) """ return "#{:02X}{:02X}{:02X}".format( int(color.red * 255), int(color.green * 255), int(color.blue * 255) ) def giveBackground(widget): widget.connect("draw", expose) widget.connect("style-updated", newTheme) def expose(widget, context): cairo_create = widget.get_window().cairo_create() x_loc = widget.get_allocation().x y_loc = widget.get_allocation().y width = widget.get_allocation().width height = widget.get_allocation().height cairo_create.rectangle(x_loc, y_loc, width, height) if not surface: newTheme(widget) cairo_create.set_source_surface(surface, 0, 0) pattern = cairo_create.get_source() pattern.set_extend(cairo.EXTEND_REPEAT) cairo_create.fill() def newTheme(widget, background=None): global surface, provider, loldcolor, doldcolor style_ctxt = widget.get_style_context() # get colors from theme # bg color found, bgcol = style_ctxt.lookup_color("bg_color") if not found: found, bgcol = style_ctxt.lookup_color("theme_bg_color") if not found: # fallback value bgcol = Gdk.RGBA(red=0.929412, green=0.929412, blue=0.929412, alpha=1.0) # bg selected color found, bgsel = style_ctxt.lookup_color("theme_selected_bg_color") if not found: # fallback value bgsel = Gdk.RGBA(red=0.290, green=0.565, blue=0.851, alpha=1.0) # fg color found, fgcol = style_ctxt.lookup_color("fg_color") if not found: found, fgcol = style_ctxt.lookup_color("theme_fg_color") if not found: fgcol = Gdk.RGBA( red=0.180392, green=0.203922, blue=0.211765, alpha=1.000000 ) # base color found, basecol = style_ctxt.lookup_color("base_color") if not found: found, basecol = style_ctxt.lookup_color("theme_base_color") if not found: basecol = Gdk.RGBA(red=0.929412, green=0.929412, blue=0.929412, alpha=1.0) # text color found, textcol = style_ctxt.lookup_color("text_color") if not found: found, textcol = style_ctxt.lookup_color("theme_text_color") if not found: textcol = Gdk.RGBA(red=0.180392, green=0.203922, blue=0.211765, alpha=1.0) def get_col(col, mult): red = col.red * mult green = col.green * mult blue = col.blue * mult if red > 1.0: red = 1.0 if green > 1.0: green = 1.0 if blue > 1.0: blue = 1.0 if red == 1 and green == 1 and blue == 1: return Gdk.RGBA(0.99, 0.99, 0.99, 1.0) else: return Gdk.RGBA(red, green, blue, 1.0) # derive other colors bgacol = get_col(bgcol, 0.9) # bg_active dcol = get_col(bgcol, 0.7) # dark darksel = get_col(bgsel, 0.71) # dark selected dpcol = get_col(bgcol, 0.71) # dark prelight dacol = get_col(dcol, 0.9) # dark_active lcol = get_col(bgcol, 1.3) # light color lightsel = get_col(bgsel, 1.3) # light selected fgsel = Gdk.RGBA(0.99, 0.99, 0.99, 1.0) # fg selected fgpcol = get_col(fgcol, 1.054) # fg prelight fgacol = Gdk.RGBA(0.0, 0.0, 0.0, 1.0) # fg active textaacol = Gdk.RGBA( min((basecol.red + textcol.red) / 2.0, 1.0), min((basecol.green + textcol.green) / 2.0, 1.0), min((basecol.blue + textcol.blue) / 2.0, 1.0), ) # text_aa data = ( "@define-color p_bg_color " + hexcol(bgcol) + ";" "@define-color p_bg_prelight " + hexcol(bgcol) + ";" "@define-color p_bg_active " + hexcol(bgacol) + ";" "@define-color p_bg_selected " + hexcol(bgsel) + ";" "@define-color p_bg_insensitive " + hexcol(bgcol) + ";" "@define-color p_base_color " + hexcol(basecol) + ";" "@define-color p_dark_color " + hexcol(dcol) + ";" "@define-color p_dark_prelight " + hexcol(dpcol) + ";" "@define-color p_dark_active " + hexcol(dacol) + ";" "@define-color p_dark_selected " + hexcol(darksel) + ";" "@define-color p_text " + hexcol(textcol) + ";" "@define-color p_text_aa " + hexcol(textaacol) + ";" "@define-color p_light_color " + hexcol(lcol) + ";" "@define-color p_light_selected " + hexcol(lightsel) + ";" "@define-color p_fg_color " + hexcol(fgcol) + ";" "@define-color p_fg_prelight " + hexcol(fgpcol) + ";" "@define-color p_fg_selected " + hexcol(fgsel) + ";" "@define-color p_fg_active " + hexcol(fgacol) + ";" ) if provider is not None: style_ctxt.remove_provider_for_screen(Gdk.Screen.get_default(), provider) provider = Gtk.CssProvider.new() provider.load_from_data(data.encode()) style_ctxt.add_provider_for_screen( Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ) lnewcolor = bgcol dnewcolor = dcol # check if changed if loldcolor and background is None: if ( lnewcolor.red == loldcolor.red and lnewcolor.green == loldcolor.green and lnewcolor.blue == loldcolor.blue and dnewcolor.red == doldcolor.red and dnewcolor.green == doldcolor.green and dnewcolor.blue == doldcolor.blue ): return loldcolor = lnewcolor doldcolor = dnewcolor # global colors have been set up # now set colors on startup panel lnewcolor = style_ctxt.lookup_color("p_bg_color")[1] dnewcolor = style_ctxt.lookup_color("p_dark_color")[1] colors = [ int(lnewcolor.red * 255), int(lnewcolor.green * 255), int(lnewcolor.blue * 255), int(dnewcolor.red * 255), int(dnewcolor.green * 255), int(dnewcolor.blue * 255), ] if background is None: background = conf.get("welcome_image") if not path.isfile(background): background = addDataPrefix("glade/clear.png") conf.set("welcome_image", background) if not background.endswith("clear.png"): pixbuf = GdkPixbuf.Pixbuf.new_from_file(background) x, y, height, width = uistuff.getMonitorBounds() pixbuf = pixbuf.scale_simple(height, width, GdkPixbuf.InterpType.BILINEAR) # for frmat in GdkPixbuf.Pixbuf.get_formats(): # print(frmat.get_extensions()) surface = Gdk.cairo_surface_create_from_pixbuf(pixbuf, 0, None) return # Check if a cache has been saved temppng = addUserCachePrefix("temp.png") if path.isfile(temppng): with open(temppng, "rb") as fyle: # Check if the cache was made while using the same theme if list(fyle.read(6)) == colors: surface = cairo.ImageSurface.create_from_png(fyle) return # Get mostly transparant shadowy image imgsurface = cairo.ImageSurface.create_from_png(background) avgalpha = 108 / 255.0 surface = cairo.ImageSurface( cairo.FORMAT_RGB24, imgsurface.get_width(), imgsurface.get_height() ) ctx = cairo.Context(surface) if lnewcolor.blue * 65535 - dnewcolor.blue * 65535 > 0: midtone = ( dnewcolor.red * 65535 / (3 * (lnewcolor.blue * 65535 - dnewcolor.blue * 65535) * (1 - avgalpha)) ) ctx.set_source_rgb( lnewcolor.red / 2 + dnewcolor.red * midtone / 2, lnewcolor.green / 2 + dnewcolor.green * midtone / 2, lnewcolor.blue / 2 + dnewcolor.blue * midtone / 2, ) ctx.paint() ctx.set_source_surface(imgsurface, 0, 0) ctx.paint_with_alpha(0.8) # Save a cache for later use. Save 'newcolor' in the frist three pixels # to check for theme changes between two instances with open(temppng, "wb") as fyle: fyle.write(bytes(colors)) surface.write_to_png(fyle) def isDarkTheme(widget): color = widget.get_style_context().get_background_color(Gtk.StateFlags.NORMAL) minimal = min(color.red, color.green, color.blue) maximal = max(color.red, color.green, color.blue) lightness = (minimal + maximal) / 2 return lightness < 0.5 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/BoardControl.py0000644000175100001770000013747514614030313021450 0ustar00runnerdockerfrom gi.repository import Gtk, Gdk, GObject from pychess.System import conf from pychess.Utils.Cord import Cord from pychess.Utils.Move import Move, parseAny, toAN from pychess.Utils.const import ( ARTIFICIAL, FLAG_CALL, ABORT_OFFER, LOCAL, TAKEBACK_OFFER, ADJOURN_OFFER, DRAW_OFFER, RESIGNATION, HURRY_ACTION, PAUSE_OFFER, RESUME_OFFER, RUNNING, DROP, DROP_VARIANTS, PAWN, QUEEN, KING, SITTUYINCHESS, QUEEN_PROMOTION, KNIGHT_PROMOTION, SCHESS, HAWK, ELEPHANT, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, LIGHTBRIGADECHESS, WHITE, ) from pychess.Utils.logic import validate from pychess.Utils.lutils.bitboard import iterBits from pychess.Utils.lutils import lmove, lmovegen from pychess.Utils.lutils.lmove import ParsingError from . import preferencesDialog from .GatingDialog import GatingDialog from .PromotionDialog import PromotionDialog from .BoardView import BoardView, rect, join class BoardControl(Gtk.EventBox): """Creates a BoardView for GameModel to control move selection, action menu selection and emits signals to let Human player make moves and emit offers. SetuPositionDialog uses setup_position=True to disable most validation. When game_preview=True just do circles and arrows """ __gsignals__ = { "shapes_changed": (GObject.SignalFlags.RUN_FIRST, None, ()), "piece_moved": (GObject.SignalFlags.RUN_FIRST, None, (object, int)), "action": (GObject.SignalFlags.RUN_FIRST, None, (str, object, object)), } def __init__( self, gamemodel, action_menu_items, setup_position=False, game_preview=False ): GObject.GObject.__init__(self) self.setup_position = setup_position self.game_preview = game_preview self.view = BoardView(gamemodel, setup_position=setup_position) self.add(self.view) self.variant = gamemodel.variant self.gatingDialog = GatingDialog(SCHESS) self.promotionDialog = PromotionDialog(self.variant.variant) self.RANKS = gamemodel.boards[0].RANKS self.FILES = gamemodel.boards[0].FILES self.action_menu_items = action_menu_items self.connections = {} for key, menuitem in self.action_menu_items.items(): if menuitem is None: print(key) # print("...connect to", key, menuitem) self.connections[menuitem] = menuitem.connect( "activate", self.actionActivate, key ) self.view_cid = self.view.connect("shownChanged", self.shownChanged) self.gamemodel = gamemodel self.gamemodel_cids = [] self.gamemodel_cids.append( gamemodel.connect("moves_undoing", self.moves_undone) ) self.gamemodel_cids.append(gamemodel.connect("game_ended", self.game_ended)) self.gamemodel_cids.append(gamemodel.connect("game_started", self.game_started)) self.cids = [] self.cids.append(self.connect("button_press_event", self.button_press)) self.cids.append(self.connect("button_release_event", self.button_release)) self.add_events( Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK ) self.cids.append(self.connect("motion_notify_event", self.motion_notify)) self.cids.append(self.connect("leave_notify_event", self.leave_notify)) self.selected_last = None self.normalState = NormalState(self) self.selectedState = SelectedState(self) self.activeState = ActiveState(self) self.lockedNormalState = LockedNormalState(self) self.lockedSelectedState = LockedSelectedState(self) self.lockedActiveState = LockedActiveState(self) self.currentState = self.normalState self.lockedPly = self.view.shown self.possibleBoards = {self.lockedPly: self._genPossibleBoards(self.lockedPly)} self.allowPremove = False def onGameStart(gamemodel): if not self.setup_position: for player in gamemodel.players: if player.__type__ == LOCAL: self.allowPremove = True self.gamemodel_cids.append(gamemodel.connect("game_started", onGameStart)) self.keybuffer = "" self.pre_arrow_from = None self.pre_arrow_to = None def _del(self): self.view.disconnect(self.view_cid) for cid in self.cids: self.disconnect(cid) for obj, conid in self.connections.items(): # print("...disconnect from ", obj) obj.disconnect(conid) self.connections = {} self.action_menu_items = {} for cid in self.gamemodel_cids: self.gamemodel.disconnect(cid) self.view._del() self.promotionDialog = None self.normalState = None self.selectedState = None self.activeState = None self.lockedNormalState = None self.lockedSelectedState = None self.lockedActiveState = None self.currentState = None def getGating(self, castling, hawk, elephant): color = self.view.model.boards[-1].color gating = self.gatingDialog.runAndHide(color, castling, hawk, elephant) return gating def getPromotion(self): color = self.view.model.boards[-1].color variant = self.view.model.boards[-1].variant promotion = self.promotionDialog.runAndHide(color, variant) return promotion def play_sound(self, move, board): if move.is_capture(board): sound = "aPlayerCaptures" else: sound = "aPlayerMoves" if board.board.isChecked(): sound = "aPlayerChecks" preferencesDialog.SoundTab.playAction(sound) def play_or_add_move(self, board, move): if board.board.next is None: # at the end of variation or main line if not self.view.shownIsMainLine(): # add move to existing variation self.view.model.add_move2variation( board, move, self.view.shown_variation_idx ) self.view.showNext() else: # create new variation new_vari = self.view.model.add_variation(board, [move]) self.view.setShownBoard(new_vari[-1]) else: # inside variation or main line if board.board.next.lastMove == move.move: # replay mainline move if self.view.model.lesson_game: next_board = self.view.model.getBoardAtPly( self.view.shown + 1, self.view.shown_variation_idx ) self.play_sound(move, board) incr = ( 1 if len( self.view.model.variations[self.view.shown_variation_idx] ) - 1 == board.ply - self.view.model.lowply + 1 else 2 ) if incr == 2: next_next_board = self.view.model.getBoardAtPly( self.view.shown + 2, self.view.shown_variation_idx ) # If there is any opponent move variation let the user choose opp next move if any( child for child in next_next_board.board.children if isinstance(child, list) ): self.view.infobar.opp_turn() self.view.showNext() # If there is some comment to read let the user read it before opp move elif any( child for child in next_board.board.children if isinstance(child, str) ): self.view.infobar.opp_turn() self.view.showNext() # If there is nothing to wait for we make opp next move else: self.view.showNext() self.view.infobar.your_turn() self.view.showNext() else: if self.view.shownIsMainLine(): preferencesDialog.SoundTab.playAction("puzzleSuccess") self.view.infobar.get_next_puzzle() self.view.model.emit("learn_success") self.view.showNext() else: self.view.infobar.back_to_mainline() self.view.showNext() else: self.view.showNext() elif board.board.next.children: if self.view.model.lesson_game: self.play_sound(move, board) self.view.infobar.retry() # try to find this move in variations for i, vari in enumerate(board.board.next.children): for node in vari: if ( not isinstance(node, str) and node.lastMove == move.move and node.plyCount == board.ply + 1 ): # replay variation move self.view.setShownBoard(node.pieceBoard) return # create new variation new_vari = self.view.model.add_variation(board, [move]) self.view.setShownBoard(new_vari[-1]) else: if self.view.model.lesson_game: self.play_sound(move, board) self.view.infobar.retry() # create new variation new_vari = self.view.model.add_variation(board, [move]) self.view.setShownBoard(new_vari[-1]) def emit_move_signal(self, cord0, cord1, promotion=None): # Game end can change cord0 to None while dragging a piece if cord0 is None: return gating = None board = self.getBoard() color = board.color # Ask player for which piece to promote into. If this move does not # include a promotion, QUEEN will be sent as a dummy value, but not used if ( promotion is None and board[cord0].sign == PAWN and cord1.cord in board.PROMOTION_ZONE[color] and self.variant.variant != SITTUYINCHESS ): if len(self.variant.PROMOTIONS) == 1: promotion = lmove.PROMOTE_PIECE(self.variant.PROMOTIONS[0]) elif self.variant.variant == LIGHTBRIGADECHESS: promotion = lmove.PROMOTE_PIECE( QUEEN_PROMOTION if color == WHITE else KNIGHT_PROMOTION ) else: if conf.get("autoPromote"): promotion = lmove.PROMOTE_PIECE(QUEEN_PROMOTION) else: promotion = self.getPromotion() if promotion is None: # Put back pawn moved be d'n'd self.view.runAnimation(redraw_misc=False) return if ( promotion is None and board[cord0].sign == PAWN and cord0.cord in board.PROMOTION_ZONE[color] and self.variant.variant == SITTUYINCHESS ): # no promotion allowed if we have queen if board.board.boards[color][QUEEN]: promotion = None # in place promotion elif cord1.cord in board.PROMOTION_ZONE[color]: promotion = lmove.PROMOTE_PIECE(QUEEN_PROMOTION) # queen move promotion (but not a pawn capture!) elif board[cord1] is None and (cord0.cord + cord1.cord) % 2 == 1: promotion = lmove.PROMOTE_PIECE(QUEEN_PROMOTION) holding = board.board.holding[color] if self.variant.variant == SCHESS: moved = board[cord0].sign hawk = holding[HAWK] > 0 elephant = holding[ELEPHANT] > 0 if (hawk or elephant) and cord0.cord in iterBits(board.board.virgin[color]): castling = moved == KING and abs(cord0.x - cord1.x) == 2 gating = self.getGating(castling, hawk, elephant) if gating is not None: if gating in (HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK): side = 0 if cord0.x - cord1.x == 2 else 1 rcord = board.board.ini_rooks[color][side] move = Move(lmovegen.newMove(rcord, cord0.cord, gating)) else: move = Move(lmovegen.newMove(cord0.cord, cord1.cord, gating)) elif cord0.x < 0 or cord0.x > self.FILES - 1: move = Move(lmovegen.newMove(board[cord0].piece, cord1.cord, DROP)) else: move = Move(cord0, cord1, board, promotion) if ( (self.view.model.curplayer.__type__ == LOCAL or self.view.model.examined) and self.view.shownIsMainLine() and self.view.model.boards[-1] == board and self.view.model.status == RUNNING ): # emit move if self.setup_position: self.emit("piece_moved", (cord0, cord1), board[cord0].color) else: self.emit("piece_moved", move, color) if self.view.model.examined: self.view.model.connection.bm.sendMove(toAN(board, move)) else: self.play_or_add_move(board, move) def actionActivate(self, widget, key): """Put actions from a menu or similar""" curplayer = self.view.model.curplayer if key == "call_flag": self.emit("action", FLAG_CALL, curplayer, None) elif key == "abort": self.emit("action", ABORT_OFFER, curplayer, None) elif key == "adjourn": self.emit("action", ADJOURN_OFFER, curplayer, None) elif key == "draw": self.emit("action", DRAW_OFFER, curplayer, None) elif key == "resign": self.emit("action", RESIGNATION, curplayer, None) elif key == "ask_to_move": self.emit("action", HURRY_ACTION, curplayer, None) elif key == "undo1": board = self.view.model.getBoardAtPly( self.view.shown, variation=self.view.shown_variation_idx ) if board.board.next is not None or board.board.children: return if not self.view.shownIsMainLine(): self.view.model.undo_in_variation(board) return waitingplayer = self.view.model.waitingplayer if ( curplayer.__type__ == LOCAL and ( waitingplayer.__type__ == ARTIFICIAL or self.view.model.isPlayingICSGame() ) and self.view.model.ply - self.view.model.lowply > 1 ): self.emit("action", TAKEBACK_OFFER, curplayer, 2) else: self.emit("action", TAKEBACK_OFFER, curplayer, 1) elif key == "pause1": self.emit("action", PAUSE_OFFER, curplayer, None) elif key == "resume1": self.emit("action", RESUME_OFFER, curplayer, None) def shownChanged(self, view, shown): if self.view is None: return self.lockedPly = self.view.shown self.possibleBoards[self.lockedPly] = self._genPossibleBoards(self.lockedPly) if self.view.shown - 2 in self.possibleBoards: del self.possibleBoards[self.view.shown - 2] def moves_undone(self, gamemodel, moves): self.view.selected = None self.view.active = None self.view.hover = None self.view.dragged_piece = None self.view.setPremove(None, None, None, None) if not self.view.model.examined: self.currentState = self.lockedNormalState def game_ended(self, gamemodel, reason): self.selected_last = None self.view.selected = None self.view.active = None self.view.hover = None self.view.dragged_piece = None self.view.setPremove(None, None, None, None) self.currentState = self.normalState self.view.startAnimation() def game_started(self, gamemodel): if self.view.model.lesson_game: if "FEN" in gamemodel.tags: if gamemodel.orientation != gamemodel.starting_color: self.view.showNext() else: self.view.infobar.get_next_puzzle() self.view.model.emit("learn_success") def getBoard(self): return self.view.model.getBoardAtPly( self.view.shown, self.view.shown_variation_idx ) def isLastPlayed(self, board): return board == self.view.model.boards[-1] def setLocked(self, locked): do_animation = False if ( locked and self.isLastPlayed(self.getBoard()) and self.view.model.status == RUNNING ): if self.view.model.status != RUNNING: self.view.selected = None self.view.active = None self.view.hover = None self.view.dragged_piece = None do_animation = True if self.currentState == self.selectedState: self.currentState = self.lockedSelectedState elif self.currentState == self.activeState: self.currentState = self.lockedActiveState else: self.currentState = self.lockedNormalState else: if self.currentState == self.lockedSelectedState: self.currentState = self.selectedState elif self.currentState == self.lockedActiveState: self.currentState = self.activeState else: self.currentState = self.normalState if do_animation: self.view.startAnimation() def setStateSelected(self): if self.currentState in ( self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState, ): self.currentState = self.lockedSelectedState else: self.view.setPremove(None, None, None, None) self.currentState = self.selectedState def setStateActive(self): if self.currentState in ( self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState, ): self.currentState = self.lockedActiveState else: self.view.setPremove(None, None, None, None) self.currentState = self.activeState def setStateNormal(self): if self.currentState in ( self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState, ): self.currentState = self.lockedNormalState else: self.view.setPremove(None, None, None, None) self.currentState = self.normalState def color(self, event): state = event.get_state() if ( state & Gdk.ModifierType.SHIFT_MASK and state & Gdk.ModifierType.CONTROL_MASK ): return "Y" elif state & Gdk.ModifierType.SHIFT_MASK: return "R" elif state & Gdk.ModifierType.CONTROL_MASK: return "B" else: return "G" def button_press(self, widget, event): if event.button == 3: # first we will draw a circle cord = self.currentState.point2Cord(event.x, event.y, self.color(event)) if ( cord is None or cord.x < 0 or cord.x > self.FILES or cord.y < 0 or cord.y > self.RANKS ): return self.pre_arrow_from = cord self.view.pre_circle = cord self.view.redrawCanvas() return else: # remove all circles and arrows need_redraw = False if self.view.arrows: self.view.arrows.clear() need_redraw = True if self.view.circles: self.view.circles.clear() need_redraw = True if self.view.pre_arrow is not None: self.view.pre_arrow = None need_redraw = True if self.view.pre_circle is not None: self.view.pre_circle = None need_redraw = True if need_redraw: self.view.redrawCanvas() if self.game_preview: return return self.currentState.press(event.x, event.y, event.button) def button_release(self, widget, event): if event.button == 3: # remove or finalize circle/arrow as needed cord = self.currentState.point2Cord(event.x, event.y, self.color(event)) if ( cord is None or cord.x < 0 or cord.x > self.FILES or cord.y < 0 or cord.y > self.RANKS ): return if self.view.pre_circle == cord: if cord in self.view.circles: self.view.circles.remove(cord) else: self.view.circles.add(cord) self.view.pre_circle = None self.emit("shapes_changed") if self.view.pre_arrow is not None: if self.view.pre_arrow in self.view.arrows: self.view.arrows.remove(self.view.pre_arrow) else: self.view.arrows.add(self.view.pre_arrow) self.view.pre_arrow = None self.emit("shapes_changed") self.pre_arrow_from = None self.pre_arrow_to = None self.view.redrawCanvas() return if self.game_preview: return return self.currentState.release(event.x, event.y) def motion_notify(self, widget, event): to = self.currentState.point2Cord(event.x, event.y) if to is None or to.x < 0 or to.x > self.FILES or to.y < 0 or to.y > self.RANKS: return if self.pre_arrow_from is not None: if to != self.pre_arrow_from: # this will be an arrow if self.pre_arrow_to is not None and to != self.pre_arrow_to: # first remove the old one self.view.pre_arrow = None self.view.redrawCanvas() arrow = self.pre_arrow_from, to if arrow != self.view.pre_arrow: # draw the new arrow self.view.pre_arrow = arrow self.view.pre_circle = None self.view.redrawCanvas() self.pre_arrow_to = to elif self.view.pre_circle is None: # back to circle self.view.pre_arrow = None self.view.pre_circle = to self.view.redrawCanvas() return self.currentState.motion(event.x, event.y) def leave_notify(self, widget, event): return self.currentState.leave(event.x, event.y) def key_pressed(self, keyname): if keyname in "PNBRQKMFSOox12345678abcdefgh": self.keybuffer += keyname elif keyname == "minus": self.keybuffer += "-" elif keyname == "at": self.keybuffer += "@" elif keyname == "equal": self.keybuffer += "=" elif keyname == "Return" and self.keybuffer != "": color = self.view.model.boards[-1].color board = self.view.model.getBoardAtPly( self.view.shown, self.view.shown_variation_idx ) try: move = parseAny(board, self.keybuffer) except ParsingError: self.keybuffer = "" return if validate(board, move): if ( ( self.view.model.curplayer.__type__ == LOCAL or self.view.model.examined ) and self.view.shownIsMainLine() and self.view.model.boards[-1] == board and self.view.model.status == RUNNING ): # emit move self.emit("piece_moved", move, color) if self.view.model.examined: self.view.model.connection.bm.sendMove(toAN(board, move)) else: self.play_or_add_move(board, move) self.keybuffer = "" elif keyname == "BackSpace": self.keybuffer = self.keybuffer[:-1] if self.keybuffer else "" def _genPossibleBoards(self, ply): possible_boards = [] if self.setup_position: return possible_boards if len(self.view.model.players) == 2 and self.view.model.isEngine2EngineGame(): return possible_boards curboard = self.view.model.getBoardAtPly(ply, self.view.shown_variation_idx) for lmove_item in lmovegen.genAllMoves(curboard.board.clone()): move = Move(lmove_item) board = curboard.move(move) possible_boards.append(board) return possible_boards class BoardState: """ There are 6 total BoardStates: NormalState, ActiveState, SelectedState LockedNormalState, LockedActiveState, LockedSelectedState The board state is Locked while it is the opponents turn. The board state is not Locked during your turn. (Locked states are not used when BoardControl setup_position is True.) Normal/Locked State - No pieces or cords are selected Active State - A piece is currently being dragged by the mouse Selected State - A cord is currently selected """ def __init__(self, board): self.parent = board self.view = board.view self.lastMotionCord = None self.RANKS = self.view.model.boards[0].RANKS self.FILES = self.view.model.boards[0].FILES def getBoard(self): return self.view.model.getBoardAtPly( self.view.shown, self.view.shown_variation_idx ) def validate(self, cord0, cord1): if cord0 is None or cord1 is None: return False # prevent accidental null move creation if cord0 == cord1 and self.parent.variant.variant != SITTUYINCHESS: return False if self.getBoard()[cord0] is None: return False if self.parent.setup_position: # prevent moving pieces inside holding if (cord0.x < 0 or cord0.x > self.FILES - 1) and ( cord1.x < 0 or cord1.x > self.FILES - 1 ): return False else: return True if cord1.x < 0 or cord1.x > self.FILES - 1: return False if cord0.x < 0 or cord0.x > self.FILES - 1: # drop return validate( self.getBoard(), Move(lmovegen.newMove(self.getBoard()[cord0].piece, cord1.cord, DROP)), ) else: return validate(self.getBoard(), Move(cord0, cord1, self.getBoard())) def transPoint(self, x_loc, y_loc): xc_loc, yc_loc, side = ( self.view.square[0], self.view.square[1], self.view.square[3], ) x_loc, y_loc = self.view.invmatrix.transform_point(x_loc, y_loc) y_loc -= yc_loc x_loc -= xc_loc y_loc /= float(side) x_loc /= float(side) return x_loc, self.RANKS - y_loc def point2Cord(self, x_loc, y_loc, color=None): point = self.transPoint(x_loc, y_loc) p0_loc, p1_loc = point[0], point[1] if self.parent.variant.variant in DROP_VARIANTS: if ( not -3 <= int(p0_loc) <= self.FILES + 2 or not 0 <= int(p1_loc) <= self.RANKS - 1 ): return None else: if ( not 0 <= int(p0_loc) <= self.FILES - 1 or not 0 <= int(p1_loc) <= self.RANKS - 1 ): return None return Cord(int(p0_loc) if p0_loc >= 0 else int(p0_loc) - 1, int(p1_loc), color) def isSelectable(self, cord): # Simple isSelectable method, disabling selecting cords out of bound etc if not cord: return False if self.parent.setup_position: return True if self.parent.variant.variant in DROP_VARIANTS: if (not -3 <= cord.x <= self.FILES + 2) or ( not 0 <= cord.y <= self.RANKS - 1 ): return False else: if (not 0 <= cord.x <= self.FILES - 1) or ( not 0 <= cord.y <= self.RANKS - 1 ): return False return True def press(self, x_loc, y_loc, button): pass def release(self, x_loc, y_loc): pass def motion(self, x_loc, y_loc): cord = self.point2Cord(x_loc, y_loc) if self.lastMotionCord == cord: return self.lastMotionCord = cord if cord and self.isSelectable(cord): if not self.view.model.isPlayingICSGame(): self.view.hover = cord else: self.view.hover = None def leave(self, x_loc, y_loc): allocation = self.parent.get_allocation() if not (0 <= x_loc < allocation.width and 0 <= y_loc < allocation.height): self.view.hover = None class LockedBoardState(BoardState): """ Parent of LockedNormalState, LockedActiveState, LockedSelectedState The board is in one of the three Locked states during the opponent's turn. """ def __init__(self, board): BoardState.__init__(self, board) def isAPotentiallyLegalNextMove(self, cord0, cord1): """Determines whether the given move is at all legally possible as the next move after the player who's turn it is makes their move Note: This doesn't always return the correct value, such as when BoardControl.setLocked() has been called and we've begun a drag, but view.shown and BoardControl.lockedPly haven't been updated yet""" if cord0 is None or cord1 is None: return False if self.parent.lockedPly not in self.parent.possibleBoards: return False for board in self.parent.possibleBoards[self.parent.lockedPly]: if not board[cord0]: return False if validate(board, Move(cord0, cord1, board)): return True return False class NormalState(BoardState): """ It is the human player's turn and no pieces or cords are selected. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False if self.parent.setup_position: return True try: board = self.getBoard() if board[cord] is None: return False # We don't want empty cords elif board[cord].color != board.color: return False # We shouldn't be able to select an opponent piece except IndexError: return False return True def press(self, x_loc, y_loc, button): self.parent.grab_focus() cord = self.point2Cord(x_loc, y_loc) if self.isSelectable(cord): self.view.dragged_piece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() class ActiveState(BoardState): """ It is the human player's turn and a piece is being dragged by the mouse. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False if self.parent.setup_position: return True return self.validate(self.view.active, cord) def release(self, x_loc, y_loc): cord = self.point2Cord(x_loc, y_loc) if ( self.view.selected and cord != self.view.active and not self.validate(self.view.selected, cord) ): if not self.parent.setup_position: preferencesDialog.SoundTab.playAction("invalidMove") if not cord: self.view.active = None self.view.selected = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() # When in the mixed active/selected state elif self.view.selected: # Move when releasing on a good cord if self.validate(self.view.selected, cord): self.parent.setStateNormal() # It is important to emit_move_signal after setting state # as listeners of the function probably will lock the board self.view.dragged_piece = None self.parent.emit_move_signal(self.view.selected, cord) if self.parent.setup_position: if not ( self.view.selected.x < 0 or self.view.selected.x > self.FILES - 1 ): self.view.selected = None else: # enable stamping with selected holding pieces self.parent.setStateSelected() else: self.view.selected = None self.view.active = None elif ( cord == self.view.active == self.view.selected == self.parent.selected_last ): # user clicked (press+release) same piece twice, so unselect it self.view.active = None self.view.selected = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() if self.parent.variant.variant == SITTUYINCHESS: self.parent.emit_move_signal(self.view.selected, cord) else: # leave last selected piece selected self.view.active = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateSelected() # If dragged and released on a possible cord elif self.validate(self.view.active, cord): self.parent.setStateNormal() self.view.dragged_piece = None # removig piece from board if self.parent.setup_position and (cord.x < 0 or cord.x > self.FILES - 1): self.view.startAnimation() self.parent.emit_move_signal(self.view.active, cord) self.view.active = None # Select last piece user tried to move or that was selected elif self.view.active or self.view.selected: self.view.selected = ( self.view.active if self.view.active else self.view.selected ) self.view.active = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateSelected() # Send back, if dragging to a not possible cord else: self.view.active = None # Send the piece back to its original cord self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() self.parent.selected_last = self.view.selected def motion(self, x_loc, y_loc): BoardState.motion(self, x_loc, y_loc) fcord = self.view.active if not fcord: return piece = self.getBoard()[fcord] if not piece: return elif piece.color != self.getBoard().color: if not self.parent.setup_position: return side = self.view.square[3] co_loc, si_loc = self.view.matrix[0], self.view.matrix[1] point = self.transPoint( x_loc - side * (co_loc + si_loc) / 2.0, y_loc + side * (co_loc - si_loc) / 2.0, ) if not point: return x_loc, y_loc = point if piece.x != x_loc or piece.y != y_loc: if piece.x: paintbox = self.view.cord2RectRelative(piece.x, piece.y) else: paintbox = self.view.cord2RectRelative(self.view.active) paintbox = join(paintbox, self.view.cord2RectRelative(x_loc, y_loc)) piece.x = x_loc piece.y = y_loc self.view.redrawCanvas(rect(paintbox)) class SelectedState(BoardState): """ It is the human player's turn and a cord is selected. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False if self.parent.setup_position: return True try: board = self.getBoard() if board[cord] is not None and board[cord].color == board.color: return True # Select another piece except IndexError: return False return self.validate(self.view.selected, cord) def press(self, x_loc, y_loc, button): cord = self.point2Cord(x_loc, y_loc) # Unselecting by pressing the selected cord, or marking the cord to be # moved to. We don't unset self.view.selected, so ActiveState can handle # things correctly if self.isSelectable(cord): if self.parent.setup_position: color_ok = True else: color_ok = ( self.getBoard()[cord] is not None and self.getBoard()[cord].color == self.getBoard().color ) if ( self.view.selected and self.view.selected != cord and color_ok and not self.validate(self.view.selected, cord) ): # corner case encountered: # user clicked (press+release) a piece, then clicked (no release yet) # a different piece and dragged it somewhere else. Since # ActiveState.release() will use self.view.selected as the source piece # rather than self.view.active, we need to update it here self.view.selected = cord # re-select new cord self.view.dragged_piece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() else: # Unselecting by pressing an inactive cord self.view.selected = None self.parent.setStateNormal() if not self.parent.setup_position: preferencesDialog.SoundTab.playAction("invalidMove") class LockedNormalState(LockedBoardState): """ It is the opponent's turn and no piece or cord is selected. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False if not self.parent.allowPremove: return False # Don't allow premove if neither player is human try: board = self.getBoard() if board[cord] is None: return False # We don't want empty cords elif board[cord].color == board.color: return False # We shouldn't be able to select an opponent piece except IndexError: return False return True def press(self, x, y, button): self.parent.grab_focus() cord = self.point2Cord(x, y) if self.isSelectable(cord): self.view.dragged_piece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() # reset premove if mouse right-clicks or clicks one of the premove cords if button == 3: # right-click self.view.setPremove(None, None, None, None) self.view.startAnimation() elif cord == self.view.premove0 or cord == self.view.premove1: self.view.setPremove(None, None, None, None) self.view.startAnimation() class LockedActiveState(LockedBoardState): """ It is the opponent's turn and a piece is being dragged by the mouse. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False return self.isAPotentiallyLegalNextMove(self.view.active, cord) def release(self, x_loc, y_loc): cord = self.point2Cord(x_loc, y_loc) if cord == self.view.active == self.view.selected == self.parent.selected_last: # User clicked (press+release) same piece twice, so unselect it self.view.active = None self.view.selected = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() elif ( self.parent.allowPremove and self.view.selected and self.isAPotentiallyLegalNextMove(self.view.selected, cord) ): # In mixed locked selected/active state and user selects a valid premove cord board = self.getBoard() if ( board[self.view.selected].sign == PAWN and cord.cord in board.PROMOTION_ZONE[1 - board.color] ): if len(board.PROMOTIONS) == 1: promotion = lmove.PROMOTE_PIECE(board.PROMOTIONS[0]) elif board.variant == LIGHTBRIGADECHESS: promotion = lmove.PROMOTE_PIECE( QUEEN_PROMOTION if 1 - board.color == WHITE else KNIGHT_PROMOTION ) else: if conf.get("autoPromote"): promotion = lmove.PROMOTE_PIECE(QUEEN_PROMOTION) else: promotion = self.parent.getPromotion() else: promotion = None self.view.setPremove( board[self.view.selected], self.view.selected, cord, self.view.shown + 2, promotion, ) self.view.selected = None self.view.active = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() elif self.parent.allowPremove and self.isAPotentiallyLegalNextMove( self.view.active, cord ): # User drags a piece to a valid premove square board = self.getBoard() if ( board[self.view.active].sign == PAWN and cord.cord in board.PROMOTION_ZONE[1 - board.color] ): if len(board.PROMOTIONS) == 1: promotion = lmove.PROMOTE_PIECE(board.PROMOTIONS[0]) elif board.variant == LIGHTBRIGADECHESS: promotion = lmove.PROMOTE_PIECE( QUEEN_PROMOTION if 1 - board.color == WHITE else KNIGHT_PROMOTION ) else: if conf.get("autoPromote"): promotion = lmove.PROMOTE_PIECE(QUEEN_PROMOTION) else: promotion = self.parent.getPromotion() else: promotion = None self.view.setPremove( self.getBoard()[self.view.active], self.view.active, cord, self.view.shown + 2, promotion, ) self.view.selected = None self.view.active = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() elif self.view.active or self.view.selected: # Select last piece user tried to move or that was selected self.view.selected = ( self.view.active if self.view.active else self.view.selected ) self.view.active = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateSelected() else: self.view.active = None self.view.selected = None self.view.dragged_piece = None self.view.startAnimation() self.parent.setStateNormal() self.parent.selected_last = self.view.selected def motion(self, x_loc, y_loc): BoardState.motion(self, x_loc, y_loc) fcord = self.view.active if not fcord: return piece = self.getBoard()[fcord] if not piece or piece.color == self.getBoard().color: return side = self.view.square[3] co_loc, si_loc = self.view.matrix[0], self.view.matrix[1] point = self.transPoint( x_loc - side * (co_loc + si_loc) / 2.0, y_loc + side * (co_loc - si_loc) / 2.0, ) if not point: return x_loc, y_loc = point if piece.x != x_loc or piece.y != y_loc: if piece.x: paintbox = self.view.cord2RectRelative(piece.x, piece.y) else: paintbox = self.view.cord2RectRelative(self.view.active) paintbox = join(paintbox, self.view.cord2RectRelative(x_loc, y_loc)) piece.x = x_loc piece.y = y_loc self.view.redrawCanvas(rect(paintbox)) class LockedSelectedState(LockedBoardState): """ It is the opponent's turn and a cord is selected. """ def isSelectable(self, cord): if not BoardState.isSelectable(self, cord): return False try: board = self.getBoard() if board[cord] is not None and board[cord].color != board.color: return True # Select another piece except IndexError: return False return self.isAPotentiallyLegalNextMove(self.view.selected, cord) def motion(self, x_loc, y_loc): cord = self.point2Cord(x_loc, y_loc) if self.lastMotionCord == cord: self.view.hover = cord return self.lastMotionCord = cord if cord and self.isAPotentiallyLegalNextMove(self.view.selected, cord): if not self.view.model.isPlayingICSGame(): self.view.hover = cord else: self.view.hover = None def press(self, x_loc, y_loc, button): cord = self.point2Cord(x_loc, y_loc) # Unselecting by pressing the selected cord, or marking the cord to be # moved to. We don't unset self.view.selected, so ActiveState can handle # things correctly if self.isSelectable(cord): if ( self.view.selected and self.view.selected != cord and self.getBoard()[cord] is not None and self.getBoard()[cord].color != self.getBoard().color and not self.isAPotentiallyLegalNextMove(self.view.selected, cord) ): # corner-case encountered (see comment in SelectedState.press) self.view.selected = cord # re-select new cord self.view.dragged_piece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() else: # Unselecting by pressing an inactive cord self.view.selected = None self.parent.setStateNormal() # reset premove if mouse right-clicks or clicks one of the premove cords if button == 3: # right-click self.view.setPremove(None, None, None, None) self.view.startAnimation() elif cord == self.view.premove0 or cord == self.view.premove1: self.view.setPremove(None, None, None, None) self.view.startAnimation() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/BoardView.py0000755000175100001770000024176314614030313020741 0ustar00runnerdockerfrom math import floor, ceil, pi from time import time from io import StringIO import sys import cairo import gi try: gi.require_version("Gdk", "3.0") gi.require_version("GLib", "2.0") gi.require_version("GObject", "2.0") gi.require_version("Gtk", "3.0") gi.require_version("Pango", "1.0") gi.require_version("PangoCairo", "1.0") from gi.repository import GLib, Gtk, Gdk, GObject, Pango, PangoCairo except Exception: print("Failed to import required gi module version") sys.exit(1) from pychess.Savers import pgn from pychess.System.prefix import addDataPrefix from pychess.System import conf from pychess.gfx import Pieces from pychess.Savers.pgn import comment_arrows_re, comment_circles_re from pychess.Utils.Cord import Cord from pychess.Utils.GameModel import GameModel from pychess.Utils.const import ( ASEAN_VARIANTS, DROP_VARIANTS, WAITING_TO_START, REMOTE, LOCAL, DRAW, WHITEWON, BLACKWON, ABORTED, KILLED, DROP, KING_CASTLE, QUEEN_CASTLE, WILDCASTLESHUFFLECHESS, WILDCASTLECHESS, PAWN, KNIGHT, SITTUYINCHESS, BLACK, ) from pychess.Variants.blindfold import ( BlindfoldBoard, HiddenPawnsBoard, HiddenPiecesBoard, AllWhiteBoard, AllPawnsBoard, AllWhitePawnsBoard, ) from . import preferencesDialog from pychess.perspectives import perspective_manager from pychess.widgets.preferencesDialog import board_items # This file contains the class that is used to draw the board # util functions on rectangles to redner board used by the class def intersects(r_zero, r_one): """Takes two square and determines if they have an Intersection Returns a boolean """ w_zero = r_zero.width + r_zero.x h_zero = r_zero.height + r_zero.y w_one = r_one.width + r_one.x h_one = r_one.height + r_one.y return ( (w_one < r_one.x or w_one > r_zero.x) and (h_one < r_one.y or h_one > r_zero.y) and (w_zero < r_zero.x or w_zero > r_one.x) and (h_zero < r_zero.y or h_zero > r_one.y) ) def contains(r_zero, r_one): """Takes two squares and determines if square one is contained within square zero Returns a boolean """ w_zero = r_zero.width + r_zero.x h_zero = r_zero.height + r_zero.y w_one = r_one.width + r_one.x h_one = r_one.height + r_one.y return ( r_zero.x <= r_one.x and w_zero >= w_one and r_zero.y <= r_one.y and h_zero >= h_one ) def union(r_zero, r_one): """Takes 2 rectangles and returns a rectangle that represents the union of the two areas Returns a Gdk.Rectangle """ x_min = min(r_zero.x, r_one.x) y_min = min(r_zero.y, r_one.y) w_max = max(r_zero.x + r_zero.width, r_one.x + r_one.width) - x_min h_max = max(r_zero.y + r_zero.height, r_one.y + r_one.height) - y_min rct = Gdk.Rectangle() rct.x, rct.y, rct.width, rct.height = (x_min, y_min, w_max, h_max) return rct def join(r_zero, r_one): """Take(x, y, w, [h]) squares""" if not r_zero: return r_one if not r_one: return r_zero if not r_zero and not r_one: return None if len(r_zero) == 3: r_zero = (r_zero[0], r_zero[1], r_zero[2], r_zero[2]) if len(r_one) == 3: r_one = (r_one[0], r_one[1], r_one[2], r_one[2]) x_one = min(r_zero[0], r_one[0]) x_two = max(r_zero[0] + r_zero[2], r_one[0] + r_one[2]) y_one = min(r_zero[1], r_one[1]) y_two = max(r_zero[1] + r_zero[3], r_one[1] + r_one[3]) return (x_one, y_one, x_two - x_one, y_two - y_one) def rect(rectangle): """ Takes a list of 3 variables x,y,height and generates a rectangle rectangle(list) : contains screen locations returns a Gdk.Rectangle """ x_size, y_size = (int(floor(v)) for v in rectangle[:2]) width = int(ceil(rectangle[2])) if len(rectangle) == 4: height = int(ceil(rectangle[3])) else: height = width rct = Gdk.Rectangle() rct.x, rct.y, rct.width, rct.height = (x_size, y_size, width, height) return rct def matrixAround(rotated_matrix, anchor_x, anchor_y): """ Description : Rotates a matrix through the hypotenuse so that the original matrix becomes the inverse matrix and the inverse matrix becomes matrix Returns a tuple representing the matrix and its inverse """ corner = rotated_matrix[0] side = rotated_matrix[1] anchor_yside = anchor_y * side anchor_xside = anchor_x * side anchor_ycorner = anchor_y * (1 - corner) anchor_xcorner = anchor_x * (1 - corner) matrix = cairo.Matrix( corner, side, -side, corner, anchor_xcorner + anchor_yside, anchor_ycorner - anchor_xside, ) invmatrix = cairo.Matrix( corner, -side, side, corner, anchor_xcorner - anchor_yside, anchor_ycorner + anchor_xside, ) return matrix, invmatrix ANIMATION_TIME = 0.5 # If this is true, the board is scaled so that everything fits inside the window # even if the board is rotated 45 degrees SCALE_ROTATED_BOARD = False CORD_PADDING = 1.5 class BoardView(Gtk.DrawingArea): """Description The BoardView instance is used to render the board to screen and supports event updates associated with the game """ __gsignals__ = { # Signals emitted by class "shownChanged": (GObject.SignalFlags.RUN_FIRST, None, (int,)) } def __init__(self, gamemodel=None, preview=False, setup_position=False): GObject.GObject.__init__(self) if gamemodel is None: gamemodel = GameModel() self.model = gamemodel self.allwhite = (self.model.variant == AllWhiteBoard) or ( self.model.variant == AllWhitePawnsBoard ) self.allpawns = (self.model.variant == AllPawnsBoard) or ( self.model.variant == AllWhitePawnsBoard ) self.asean = self.model.variant.variant in ASEAN_VARIANTS self.preview = preview self.setup_position = setup_position self.shown_variation_idx = ( 0 # the main variation is the first in gamemodel.variations list ) self.model_cids = [ self.model.connect("game_started", self.gameStarted), self.model.connect("game_changed", self.gameChanged), self.model.connect("moves_undoing", self.movesUndoing), self.model.connect("variation_undoing", self.variationUndoing), self.model.connect("game_loading", self.gameLoading), self.model.connect("game_loaded", self.gameLoaded), self.model.connect("game_ended", self.gameEnded), ] self.board_style_name = None self.board_frame_name = None self.draw_cid = self.connect("draw", self.expose) self.realize_cid = self.connect_after("realize", self.onRealized) self.notify_cids = [ conf.notify_add("drawGrid", self.onDrawGrid), conf.notify_add("showCords", self.onShowCords), conf.notify_add("showCaptured", self.onShowCaptured), conf.notify_add("faceToFace", self.onFaceToFace), conf.notify_add("noAnimation", self.onNoAnimation), conf.notify_add("autoRotate", self.onAutoRotate), conf.notify_add("pieceTheme", self.onPieceTheme), conf.notify_add("board_frame", self.onBoardFrame), conf.notify_add("board_style", self.onBoardStyle), conf.notify_add("lightcolour", self.onBoardColour), conf.notify_add("darkcolour", self.onBoardColour), conf.notify_add( "activateSupportAlgorithm", self.onSupportAlgorithmActivation ), ] self.RANKS = self.model.boards[0].RANKS self.FILES = self.model.boards[0].FILES self.FILES_FOR_HOLDING = 6 self.animation_start = time() self.last_shown = None self.deadlist = [] self.auto_update_shown = True self.real_set_shown = True # only false when self.shown set temporarily(change shown variation) # to avoid redraw_misc in animation self.padding = 0 # Set to self.pad when setcords is active self.square = 0, 0, self.FILES, 1 # An object global variable with the current # board size self.pad = 0.06 # Padding applied only when setcords is active self._selected = None self._hover = None self._active = None self._premove0 = None self._premove1 = None self._redarrow = None self._greenarrow = None self._bluearrow = None # this is an integer that contains the last move that is shown self._shown = self.model.ply self.no_frame = False self._show_cords = False self.show_cords = conf.get("showCords") self._draw_grid = False self.draw_grid = conf.get("drawGrid") self._show_captured = None if self.setup_position: self.set_size_request( int(40 * (self.FILES + self.FILES_FOR_HOLDING)), 40 * self.RANKS ) self.redrawCanvas() self.noAnimation = conf.get("noAnimation") self.faceToFace = conf.get("faceToFace") self.autoRotate = conf.get("autoRotate") if conf.get("activateSupportAlgorithm"): self.onSupportAlgorithmActivation() self.onBoardColour() self.onBoardStyle() self.onBoardFrame() self._show_enpassant = False self.lastMove = None self.matrix = cairo.Matrix() self.matrix_pi = cairo.Matrix.init_rotate(pi) self.invmatrix = cairo.Matrix().invert() self.cord_matrices_state = (0, 0) self._rotation = 0 self.drawcount = 0 self.drawtime = 0 self.got_started = False self.animating = False self.dragged_piece = None # a piece being dragged by the user self.premove_piece = None self.premove_promotion = None # right click circles and arrows # Contains Cord object, and are the coordinates in which we need to draw the circles or arrows self.arrows = set() self.circles = set() self.pre_arrow = None self.pre_circle = None # circles and arrows from .pgn comments self.saved_circles = set() self.saved_arrows = set() # store in memory the last number of move to know whether or not a new turn has started, # of we went back to history self.last_shown = 0 def _del(self): self.disconnect(self.draw_cid) self.disconnect(self.realize_cid) for cid in self.notify_cids: conf.notify_remove(cid) for cid in self.model_cids: self.model.disconnect(cid) def gameStarted(self, model): if model.lesson_game: self.shown = model.lowply if self.noAnimation: self.got_started = True self.redrawCanvas() else: if model.moves: self.lastMove = model.moves[-1] for row in self.model.boards[-1].data: for piece in row.values(): # row: if piece: piece.opacity = 0 self.got_started = True self.startAnimation() self.emit("shownChanged", self.shown) def playSound(self): # Play sounds if self.model.players and self.model.status != WAITING_TO_START: boardA = self.model.getBoardAtPly(self.shown - 1, self.shown_variation_idx) boardB = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) move = self.model.getMoveAtPly(self.shown - 1, self.shown_variation_idx) # move = self.model.moves[-1] if move.is_capture(boardA): sound = "aPlayerCaptures" else: sound = "aPlayerMoves" if boardB.board.isChecked(): sound = "aPlayerChecks" if ( self.model.players[0].__type__ == REMOTE and self.model.players[1].__type__ == REMOTE ): sound = "observedMoves" preferencesDialog.SoundTab.playAction(sound) def gameChanged(self, model, ply): # Auto updating self.shown can be disabled. Useful for loading games. # If we are not at the latest game we are probably browsing the history, # and we won't like auto updating. if self.auto_update_shown and self.shown + 1 >= ply and self.shownIsMainLine(): self.shown = ply self.playSound() # Rotate board if self.autoRotate: if self.model.players and self.model.curplayer.__type__ == LOCAL: self.rotation = self.model.boards[-1].color * pi def movesUndoing(self, model, moves): if self.shownIsMainLine(): self.shown = model.ply - moves else: # Go back to the mainline to let animation system work board = model.getBoardAtPly(self.shown, self.shown_variation_idx) while board not in model.variations[0]: board = model.variations[self.shown_variation_idx][ board.ply - model.lowply - 1 ] self.shown = board.ply self.shown_variation_idx = 0 self.shown = model.ply - moves self.redrawCanvas() def variationUndoing(self, model): self.showPrev() def gameLoading(self, model, uri): self.auto_update_shown = False def gameLoaded(self, model, uri): self.auto_update_shown = True self._shown = model.ply def gameEnded(self, model, reason): self.redrawCanvas() if self.model.players: sound = "" if model.status == DRAW: sound = "gameIsDrawn" elif model.status == WHITEWON: if model.players[0].__type__ == LOCAL: sound = "gameIsWon" elif model.players[1].__type__ == LOCAL: sound = "gameIsLost" elif model.status == BLACKWON: if model.players[1].__type__ == LOCAL: sound = "gameIsWon" elif model.players[0].__type__ == LOCAL: sound = "gameIsLost" elif model.status in (ABORTED, KILLED): sound = "gameIsLost" if ( model.status in (DRAW, WHITEWON, BLACKWON, KILLED, ABORTED) and model.players[0].__type__ == REMOTE and model.players[1].__type__ == REMOTE ): sound = "oberservedEnds" # This should never be false, unless status is set to UNKNOWN or # something strange if sound != "": preferencesDialog.SoundTab.playAction(sound) def onDrawGrid(self, *args): """Checks the configuration / preferences to see if the board grid should be displayed. """ self.draw_grid = conf.get("drawGrid") def onShowCords(self, *args): """Checks the configuration / preferences to see if the board co-ordinates should be displayed. """ self.show_cords = conf.get("showCords") def onShowCaptured(self, *args): """Check the configuration / preferences to see if the captured pieces should be displayed """ self._setShowCaptured(conf.get("showCaptured"), force_restore=True) def onNoAnimation(self, *args): """Check the configuration / preferences to see if no animation needed at all """ self.noAnimation = conf.get("noAnimation") def onFaceToFace(self, *args): """If the preference for pieces to be displayed facing each other has been set then refresh the board """ self.faceToFace = conf.get("faceToFace") self.redrawCanvas() def onAutoRotate(self, *args): self.autoRotate = conf.get("autoRotate") def onPieceTheme(self, *args): """If the preference to display another chess set has been selected then refresh the board """ self.redrawCanvas() def onBoardColour(self, *args): """If the preference to display another set of board colours has been selected then refresh the board """ self.light_colour = conf.get("lightcolour") self.dark_colour = conf.get("darkcolour") self.redrawCanvas() def onBoardStyle(self, *args): """If the preference to display another set of board colours has been selected then refresh the board """ board_style = conf.get("board_style") self.colors_only = board_style == 0 self.transparent = board_style == len(board_items) - 1 if (not self.colors_only) and (not self.transparent): # create dark and light square surfaces board_style_name = preferencesDialog.board_items[board_style][1] if ( self.board_style_name is None or self.board_style_name != board_style_name ): self.board_style_name = board_style_name dark_png = addDataPrefix("boards/%s_d.png" % board_style_name) light_png = addDataPrefix("boards/%s_l.png" % board_style_name) self.dark_surface = cairo.ImageSurface.create_from_png(dark_png) self.light_surface = cairo.ImageSurface.create_from_png(light_png) self.redrawCanvas() def onBoardFrame(self, *args): board_frame = conf.get("board_frame") self.no_frame = board_frame == 0 self.transparent = board_frame == len(board_items) - 1 if (not self.no_frame) and (not self.transparent): # create board frame surface board_frame_name = preferencesDialog.board_items[board_frame][1] if ( self.board_frame_name is None or self.board_frame_name != board_frame_name ): self.board_frame_name = board_frame_name frame_png = addDataPrefix("boards/%s_d.png" % board_frame_name) self.frame_surface = cairo.ImageSurface.create_from_png(frame_png) if not self.show_cords and self.no_frame: self.padding = 0.0 else: self.padding = self.pad self.redrawCanvas() def onSupportAlgorithmActivation(self, *args): """activation of the support algorithm""" activation_wanted = conf.get("activateSupportAlgorithm") self.model.support_algorithm.enableDisableAlgo(activation_wanted) ############################### # Animation # ############################### def paintBoxAround(self, move): paint_box = self.cord2RectRelative(move.cord1) if move.flag != DROP: paint_box = join(paint_box, self.cord2RectRelative(move.cord0)) if move.flag in (KING_CASTLE, QUEEN_CASTLE): board = self.model.boards[-1].board color = board.color wildcastle = Cord(board.ini_kings[color]).x == 3 and board.variant in ( WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, ) if move.flag == KING_CASTLE: side = 0 if wildcastle else 1 paint_box = join( paint_box, self.cord2RectRelative(Cord(board.ini_rooks[color][side])), ) paint_box = join( paint_box, self.cord2RectRelative(Cord(board.fin_rooks[color][side])), ) paint_box = join( paint_box, self.cord2RectRelative(Cord(board.fin_kings[color][side])), ) else: side = 1 if wildcastle else 0 paint_box = join( paint_box, self.cord2RectRelative(Cord(board.ini_rooks[color][side])), ) paint_box = join( paint_box, self.cord2RectRelative(Cord(board.fin_rooks[color][side])), ) paint_box = join( paint_box, self.cord2RectRelative(Cord(board.fin_kings[color][side])), ) return paint_box def setShownBoard(self, board): """Set shown to the index of the given board in board list. If the board belongs to a different variationd, adjust the shown variation index too. If board is in the main line, reset the shown variation idx to 0(the main line). """ if board in self.model.variations[self.shown_variation_idx]: # if the board to be shown is in the current shown variation, we are ok self.shown = ( self.model.variations[self.shown_variation_idx].index(board) + self.model.lowply ) else: # else we have to go back first for vari in self.model.variations: if board in vari: # Go back to the common board of variations to let animation system work board_in_vari = board while ( board_in_vari not in self.model.variations[self.shown_variation_idx] ): board_in_vari = vari[board_in_vari.ply - self.model.lowply - 1] self.real_set_shown = False self.shown = board_in_vari.ply break # swich to the new variation self.shown_variation_idx = self.model.variations.index(vari) self.real_set_shown = True self.shown = ( self.model.variations[self.shown_variation_idx].index(board) + self.model.lowply ) def shownIsMainLine(self): return self.shown_variation_idx == 0 @property def has_unsaved_shapes(self): return self.saved_arrows != self.arrows or self.saved_circles != self.circles def _getShown(self): return self._shown def _setShown(self, shown, old_variation_idx=None): """ Adjust the index in current variation board list. old_variation_index is used when variation was added to the last played move and we want to step back. This function is called before draw, so this is where we preprocess data before drawing This function is called at each turn """ assert shown >= 0 if shown < self.model.lowply: shown = self.model.lowply # This would cause IndexErrors later if shown > self.model.variations[self.shown_variation_idx][-1].ply: return if old_variation_idx is None: old_variation_idx = self.shown_variation_idx self.redarrow = None self.greenarrow = None self.bluearrow = None # remove all circles and arrows need_redraw = False if self.saved_circles: self.saved_circles.clear() need_redraw = True if self.saved_arrows: self.saved_arrows.clear() need_redraw = True if self.arrows: self.arrows.clear() need_redraw = True if self.circles: self.circles.clear() need_redraw = True if self.pre_arrow is not None: self.pre_arrow = None need_redraw = True if self.pre_circle is not None: self.pre_circle = None need_redraw = True if (self.shown != shown) and not self.setup_position: algorithm = self.model.support_algorithm x = shown - self.model.lowply if x >= len(self.model.boards): x = -1 algorithm.calculate_coordinate_in_danger(self.model.boards[x], (shown % 2)) need_redraw = True # search circles/arrows in move comments board = self.model.getBoardAtPly(shown, self.shown_variation_idx).board if board.children: for child in board.children: if isinstance(child, str): if "[%csl" in child: match = comment_circles_re.search(child) circles = match.groups()[0].split(",") for circle in circles: self.saved_circles.add(Cord(circle[1:3], color=circle[0])) self.circles.add(Cord(circle[1:3], color=circle[0])) need_redraw = True if "[%cal" in child: match = comment_arrows_re.search(child) arrows = match.groups()[0].split(",") for arrow in arrows: self.saved_arrows.add( (Cord(arrow[1:3], color=arrow[0]), Cord(arrow[3:5])) ) self.arrows.add( (Cord(arrow[1:3], color=arrow[0]), Cord(arrow[3:5])) ) need_redraw = True if need_redraw: self.redrawCanvas() # If there is only one board, we don't do any animation, but simply # redraw the entire board. Same if we are at first draw. if len(self.model.boards) == 1 or self.shown < self.model.lowply: self._shown = shown if shown > self.model.lowply: self.lastMove = self.model.getMoveAtPly( shown - 1, self.shown_variation_idx ) self.emit("shownChanged", self.shown) self.redrawCanvas() return step = shown > self.shown and 1 or -1 deadset = set() for i in range(self.shown, shown, step): board = self.model.getBoardAtPly(i, old_variation_idx) board1 = self.model.getBoardAtPly(i + step, self.shown_variation_idx) if step == 1: move = self.model.getMoveAtPly(i, self.shown_variation_idx) moved, new, dead = board.simulateMove(board1, move) else: move = self.model.getMoveAtPly(i - 1, old_variation_idx) moved, new, dead = board.simulateUnmove(board1, move) # We need to ensure, that the piece coordinate is saved in the # piece for piece, cord0 in moved: # Test if the piece already has a realcoord(has been dragged) if (piece is not None) and piece.x is None: # We don't want newly restored pieces to flew from their # deadspot to their old position, as it doesn't work # vice versa if piece.opacity == 1: piece.x = cord0.x piece.y = cord0.y for piece in dead: deadset.add(piece) # Reset the location of the piece to avoid a small visual # jump, when it is at some other time waken to life. piece.x = None piece.y = None for piece in new: piece.opacity = 0 self.deadlist = [] for y_loc, row in enumerate( self.model.getBoardAtPly(self.shown, old_variation_idx).data ): for x_loc, piece in row.items(): if piece in deadset: self.deadlist.append((piece, x_loc, y_loc)) self._shown = shown if self.real_set_shown: board = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) if board in self.model.variations[0]: self.shown_variation_idx = 0 else: for vari in self.model.variations: if board in vari: # swich to the new variation self.shown_variation_idx = self.model.variations.index(vari) break self.emit("shownChanged", self.shown) self.animation_start = time() self.animating = True if self.lastMove: paint_box = self.paintBoxAround(self.lastMove) self.lastMove = None self.redrawCanvas(rect(paint_box)) if self.shown > self.model.lowply: self.lastMove = self.model.getMoveAtPly( self.shown - 1, self.shown_variation_idx ) paint_box = self.paintBoxAround(self.lastMove) self.redrawCanvas(rect(paint_box)) else: self.lastMove = None self.runAnimation(redraw_misc=self.real_set_shown) if not self.noAnimation: while self.animating: self.runAnimation() shown = property(_getShown, _setShown) def runAnimation(self, redraw_misc=False): """ The animationsystem in pychess is very loosely inspired by the one of chessmonk. The idea is, that every piece has a place in an array(the board.data one) for where to be drawn. If a piece is to be animated, it can set its x and y properties, to some cord(or part cord like 0.42 for 42% right to file 0). Each time runAnimation is run, it will set those x and y properties a little closer to the location in the array. When it has reached its final location, x and y will be set to None. _setShown, which starts the animation, also sets a timestamp for the acceleration to work properply. """ if self.model is None: return False if not self.animating: return False paint_box = None mod = min(1, (time() - self.animation_start) / ANIMATION_TIME) board = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) for y_loc, row in enumerate(board.data): for x_loc, piece in row.items(): if not piece: continue if piece == self.dragged_piece: continue if piece == self.premove_piece: # if premove move is being made, the piece will already be # sitting on the cord it needs to move to- # do not animate and reset premove to None if self.shown == self.premove_ply: piece.x = None piece.y = None self.setPremove(None, None, None, None) continue # otherwise, animate premove piece moving to the premove cord # rather than the cord it actually exists on elif self.premove0 and self.premove1: x_loc = self.premove1.x y_loc = self.premove1.y if piece.x is not None: if not self.noAnimation: if piece.piece == KNIGHT: newx = piece.x + (x_loc - piece.x) * mod ** (1.5) newy = piece.y + (y_loc - piece.y) * mod else: newx = piece.x + (x_loc - piece.x) * mod newy = piece.y + (y_loc - piece.y) * mod else: newx, newy = x_loc, y_loc paint_box = join( paint_box, self.cord2RectRelative(piece.x, piece.y) ) paint_box = join(paint_box, self.cord2RectRelative(newx, newy)) if ( (newx <= x_loc <= piece.x or newx >= x_loc >= piece.x) and (newy <= y_loc <= piece.y or newy >= y_loc >= piece.y) or abs(newx - x_loc) < 0.005 and abs(newy - y_loc) < 0.005 ): paint_box = join( paint_box, self.cord2RectRelative(x_loc, y_loc) ) piece.x = None piece.y = None else: piece.x = newx piece.y = newy if piece.opacity < 1: if piece.x is not None: px_loc = piece.x py_loc = piece.y else: px_loc = x_loc py_loc = y_loc if paint_box: paint_box = join( paint_box, self.cord2RectRelative(px_loc, py_loc) ) else: paint_box = self.cord2RectRelative(px_loc, py_loc) if not self.noAnimation: new_op = piece.opacity + (1 - piece.opacity) * mod else: new_op = 1 if new_op >= 1 >= piece.opacity or abs(1 - new_op) < 0.005: piece.opacity = 1 else: piece.opacity = new_op ready = [] for i, dead in enumerate(self.deadlist): piece, x_loc, y_loc = dead if not paint_box: paint_box = self.cord2RectRelative(x_loc, y_loc) else: paint_box = join(paint_box, self.cord2RectRelative(x_loc, y_loc)) if not self.noAnimation: new_op = piece.opacity + (0 - piece.opacity) * mod else: new_op = 0 if new_op <= 0 <= piece.opacity or abs(0 - new_op) < 0.005: ready.append(dead) else: piece.opacity = new_op for dead in ready: self.deadlist.remove(dead) if paint_box: self.redrawCanvas(rect(paint_box)) if self.noAnimation: self.animating = False return False else: if not paint_box: self.animating = False return paint_box and True or False def startAnimation(self): self.animation_start = time() self.animating = True self.runAnimation(redraw_misc=True) if not self.noAnimation: while self.animating: self.runAnimation() ############################# # Drawing # ############################# def onRealized(self, widget): padding = 1 - self.padding alloc = self.get_allocation() square = float(min(alloc.width, alloc.height)) * padding xc_loc = alloc.width / 2.0 - square / 2 yc_loc = alloc.height / 2.0 - square / 2 size = square / self.FILES self.square = (xc_loc, yc_loc, square, size) def expose(self, widget, ctx): context = widget.get_window().cairo_create() start = time() rectangle = Gdk.Rectangle() clip_ext = ctx.clip_extents() rectangle.x, rectangle.y = clip_ext[0], clip_ext[1] rectangle.width, rectangle.height = ( clip_ext[2] - clip_ext[0], clip_ext[3] - clip_ext[1], ) if False: import profile profile.runctx( "self.draw(context, rectangle)", locals(), globals(), "/tmp/pychessprofile", ) from pstats import Stats stats = Stats("/tmp/pychessprofile") stats.sort_stats("cumulative") stats.print_stats() else: self.draw(context, rectangle) # self.drawcount += 1 # self.drawtime += time() - start # if self.drawcount % 100 == 0: # print( "Average FPS: %0.3f - %d / %d" % \ # (self.drawcount/self.drawtime, self.drawcount, self.drawtime)) return False ############################################################################ # drawing functions # ############################################################################ ############################### # redrawCanvas # ############################### def redrawCanvas(self, rect=None): if self.get_window(): if not rect: alloc = self.get_allocation() rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( 0, 0, alloc.width, alloc.height, ) self.get_window().invalidate_rect(rect, True) self.get_window().process_updates(True) ############################### # draw # ############################### # draw called each time we hover on a case. WARNING it only redraw the case def draw(self, context, r): # context.set_antialias(cairo.ANTIALIAS_NONE) if self.shown < self.model.lowply: print("exiting cause to lowlpy", self.shown, self.model.lowply) return alloc = self.get_allocation() self.matrix, self.invmatrix = matrixAround( self.matrix, alloc.width / 2.0, alloc.height / 2.0 ) cos_, sin_ = self.matrix[0], self.matrix[1] context.transform(self.matrix) square = float(min(alloc.width, alloc.height)) * (1 - self.padding) if SCALE_ROTATED_BOARD: square /= abs(cos_) + abs(sin_) xc_loc = alloc.width / 2.0 - square / 2 yc_loc = alloc.height / 2.0 - square / 2 side = square / self.FILES self.square = (xc_loc, yc_loc, square, side) # draw all the different components by calling all the draw methods of this class self.drawBoard(context, r) self.drawSupportAlgorithm(context, r) if min(alloc.width, alloc.height) > 32: self.drawCords(context, r) if self.got_started: self.drawSpecial(context, r) self.drawEnpassant(context, r) self.drawCircles(context) self.drawArrows(context) self.drawPieces(context, r) if not self.setup_position: self.drawLastMove(context, r) if self.model.status == KILLED: pass # self.drawCross(context, r) # At this point we have real values of self.get_allocation() # and can adjust board paned divider if needed if self._show_captured is None: self.showCaptured = conf.get("showCaptured") # Unselect to mark redrawn areas - for debugging purposes # context.transform(self.invmatrix) # context.rectangle(r.x,r.y,r.width,r.height) # dc = self.drawcount*50 # dc = dc % 1536 # c = dc % 256 / 255. # if dc < 256: # context.set_source_rgb(1, ,c,0) # elif dc < 512: # context.set_source_rgb(1-c,1, 0) # elif dc < 768: # context.set_source_rgb(0, 1,c) # elif dc < 1024: # context.set_source_rgb(0, 1-c,1) # elif dc < 1280: # context.set_source_rgb(c,0, 1) # elif dc < 1536: # context.set_source_rgb(1, 0, 1-c) # context.stroke() ############################### # drawCords # ############################### def drawCords(self, context, rectangle): thickness = 0.01 signsize = 0.02 if (not self.show_cords) and (not self.setup_position): return xc_loc, yc_loc, square, side = self.square if rectangle is not None and contains( rect((xc_loc, yc_loc, square)), rectangle ): return thick = thickness * square sign_size = signsize * square pangoScale = float(Pango.SCALE) if self.no_frame: context.set_source_rgb(0.0, 0.0, 0.0) else: context.set_source_rgb(1.0, 1.0, 1.0) def paint(inv): for num in range(self.RANKS): rank = inv and num + 1 or self.RANKS - num layout = self.create_pango_layout("%d" % rank) layout.set_font_description( Pango.FontDescription("bold %d" % sign_size) ) width = layout.get_extents()[1].width / pangoScale height = layout.get_extents()[0].height / pangoScale # Draw left side context.move_to( xc_loc - thick - width, side * num + yc_loc + height / 2 + thick * 3 ) PangoCairo.show_layout(context, layout) file = inv and self.FILES - num or num + 1 layout = self.create_pango_layout(chr(file + ord("A") - 1)) layout.set_font_description( Pango.FontDescription("bold %d" % sign_size) ) # Draw bottom context.move_to( xc_loc + side * num + side / 2 - width / 2, yc_loc + square ) PangoCairo.show_layout(context, layout) matrix, invmatrix = matrixAround( self.matrix_pi, xc_loc + square / 2, yc_loc + square / 2 ) if self.rotation == 0: paint(False) else: context.transform(matrix) paint(True) context.transform(invmatrix) if self.faceToFace: if self.rotation == 0: context.transform(matrix) paint(True) context.transform(invmatrix) else: paint(False) def draw_image(self, context, image_surface, left, top, width, height): """Draw a scaled image on a given context.""" # calculate scale image_width = image_surface.get_width() image_height = image_surface.get_height() width_ratio = float(width) / float(image_width) height_ratio = float(height) / float(image_height) scale_xy = min(width_ratio, height_ratio) # scale image and add it context.save() context.translate(left, top) context.scale(scale_xy, scale_xy) context.set_source_surface(image_surface) context.paint() context.restore() def draw_frame(self, context, image_surface, left, top, width, height): """Draw a repeated image pattern on a given context.""" pat = cairo.SurfacePattern(image_surface) pat.set_extend(cairo.EXTEND_REPEAT) context.rectangle(left, top, width, height) context.set_source(pat) context.fill() ############################### # drawBoard # ############################### def drawBoard(self, context, r): xc_loc, yc_loc, square, side = self.square col = Gdk.RGBA() col.parse(self.light_colour) context.set_source_rgba(col.red, col.green, col.blue, col.alpha) if self.model.variant.variant in ASEAN_VARIANTS: # just fill the whole board with light color if self.colors_only or self.transparent: context.rectangle(xc_loc, yc_loc, side * self.FILES, side * self.RANKS) else: self.draw_image( context, self.light_surface, xc_loc, yc_loc, side * self.FILES, side * self.RANKS, ) if self.transparent: pass elif self.colors_only: context.fill() else: # light squares for x_loc in range(self.FILES): for y_loc in range(self.RANKS): if x_loc % 2 + y_loc % 2 != 1: if self.colors_only or self.transparent: context.rectangle( xc_loc + x_loc * side, yc_loc + y_loc * side, side, side ) else: self.draw_image( context, self.light_surface, xc_loc + x_loc * side, yc_loc + y_loc * side, side, side, ) if self.transparent: pass elif self.colors_only: context.fill() col = Gdk.RGBA() col.parse(self.dark_colour) context.set_source_rgba(col.red, col.green, col.blue, col.alpha) if self.model.variant.variant in ASEAN_VARIANTS: # diagonals if self.model.variant.variant == SITTUYINCHESS: context.set_source_rgb(0.0, 0.0, 0.0) context.set_line_width(0.5 if r is None else 1.0) context.move_to(xc_loc, yc_loc) context.rel_line_to(square, square) context.move_to(xc_loc + square, yc_loc) context.rel_line_to(-square, square) context.stroke() else: # dark squares for x_loc in range(self.FILES): for y_loc in range(self.RANKS): if x_loc % 2 + y_loc % 2 == 1: if self.colors_only or self.transparent: context.rectangle( (xc_loc + x_loc * side), (yc_loc + y_loc * side), side, side, ) else: self.draw_image( context, self.dark_surface, (xc_loc + x_loc * side), (yc_loc + y_loc * side), side, side, ) if self.transparent: pass elif self.colors_only: context.fill() if (not self.no_frame) and (not self.transparent): # board frame delta = side / 4 # top self.draw_frame( context, self.frame_surface, xc_loc - delta, yc_loc - delta, self.FILES * side + delta * 2, delta, ) # bottom self.draw_frame( context, self.frame_surface, xc_loc - delta, yc_loc + self.RANKS * side, self.FILES * side + delta * 2, delta, ) # left self.draw_frame( context, self.frame_surface, xc_loc - delta, yc_loc, delta, self.FILES * side, ) # right self.draw_frame( context, self.frame_surface, xc_loc + self.FILES * side, yc_loc, delta, self.FILES * side, ) if self.draw_grid: # grid lines between squares context.set_source_rgb(0.0, 0.0, 0.0) context.set_line_width(0.5 if r is None else 1.0) for loc in range(self.FILES): context.move_to(xc_loc + side * loc, yc_loc) context.line_to(xc_loc + side * loc, yc_loc + self.FILES * side) context.move_to(xc_loc, yc_loc + side * loc) context.line_to(xc_loc + self.FILES * side, yc_loc + side * loc) context.rectangle(xc_loc, yc_loc, self.FILES * side, self.RANKS * side) context.stroke() context.set_source_rgba(col.red, col.green, col.blue, col.alpha) ############################### # drawPieces # ############################### def getCordMatrices(self, x_loc, y_loc, inv=False): square, side = self.square[2], self.square[3] rot_ = self.cord_matrices_state[1] if square != self.square or rot_ != self.rotation: self.cord_matrices = [None] * self.FILES * self.RANKS + [ None ] * self.FILES * 4 self.cord_matrices_state = (self.square, self.rotation) c_loc = x_loc * self.FILES + y_loc if isinstance(c_loc, int) and self.cord_matrices[c_loc]: matrices = self.cord_matrices[c_loc] else: cx_loc, cy_loc = self.cord2Point(x_loc, y_loc) matrices = matrixAround( self.matrix, cx_loc + side / 2.0, cy_loc + side / 2.0 ) matrices += (cx_loc, cy_loc) if isinstance(c_loc, int): self.cord_matrices[c_loc] = matrices return matrices def __drawPiece(self, context, piece, x_loc, y_loc): # Maybe a premove was reset from another thread if piece is None: print("Trying to draw a None piece") return if self.model.variant == BlindfoldBoard: return elif self.model.variant == HiddenPawnsBoard: if piece.piece == PAWN: return elif self.model.variant == HiddenPiecesBoard: if piece.piece != PAWN: return if piece.captured and not self.showCaptured: return side = self.square[3] if not self.faceToFace: matrix, invmatrix, cx_loc, cy_loc = self.getCordMatrices(x_loc, y_loc) else: cx_loc, cy_loc = self.cord2Point(x_loc, y_loc) if piece.color == BLACK: matrix, invmatrix = matrixAround( (-1, 0), cx_loc + side / 2.0, cy_loc + side / 2.0 ) else: matrix = invmatrix = cairo.Matrix(1, 0, 0, 1, 0, 0) context.transform(invmatrix) Pieces.drawPiece( piece, context, cx_loc + CORD_PADDING, cy_loc + CORD_PADDING, side - CORD_PADDING * 2, allwhite=self.allwhite, allpawns=self.allpawns, asean=self.asean, variant=self.model.variant.variant, ) context.transform(matrix) def drawPieces(self, context, rectangle): pieces = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) style_ctxt = self.get_style_context() col = style_ctxt.lookup_color("p_fg_color")[1] fg_n = (col.red, col.green, col.blue) fg_s = fg_n col = style_ctxt.lookup_color("p_fg_active")[1] fg_a = (col.red, col.green, col.blue) col = style_ctxt.lookup_color("p_fg_prelight")[1] fg_p = (col.red, col.green, col.blue) fg_m = fg_n # As default we use normal foreground for selected cords, as it looks # less confusing. However for some themes, the normal foreground is so # similar to the selected background, that we have to use the selected # foreground. col = style_ctxt.lookup_color("p_bg_selected")[1] bg_sl = (col.red, col.green, col.blue) col = style_ctxt.lookup_color("p_dark_selected")[1] bg_sd = (col.red, col.green, col.blue) if ( min( (fg_n[0] - bg_sl[0]) ** 2 + (fg_n[1] - bg_sl[1]) ** 2 + (fg_n[2] - bg_sl[2]) ** 2, (fg_n[0] - bg_sd[0]) ** 2 + (fg_n[1] - bg_sd[1]) ** 2 + (fg_n[2] - bg_sd[2]) ** 2, ) < 0.2 ): col = style_ctxt.lookup_color("p_fg_selected")[1] fg_s = (col.red, col.green, col.blue) # Draw dying pieces(Found in self.deadlist) for piece, x_loc, y_loc in self.deadlist: context.set_source_rgba(fg_n[0], fg_n[1], fg_n[2], piece.opacity) self.__drawPiece(context, piece, x_loc, y_loc) # Draw pieces reincarnating(With opacity < 1) for y_loc, row in enumerate(pieces.data): for x_loc, piece in row.items(): if not piece or piece.opacity == 1: continue if piece.x: x_loc, y_loc = piece.x, piece.y context.set_source_rgba(fg_n[0], fg_n[1], fg_n[2], piece.opacity) self.__drawPiece(context, piece, x_loc, y_loc) # Draw standing pieces(Only those who intersect drawn area) for y_loc, row in enumerate(pieces.data): for x_loc, piece in row.items(): if piece == self.premove_piece: continue if not piece or piece.x is not None or piece.opacity < 1: continue if rectangle is not None and not intersects( rect(self.cord2RectRelative(x_loc, y_loc)), rectangle ): continue if Cord(x_loc, y_loc) == self.selected: context.set_source_rgb(*fg_s) elif Cord(x_loc, y_loc) == self.active: context.set_source_rgb(*fg_a) elif Cord(x_loc, y_loc) == self.hover: context.set_source_rgb(*fg_p) else: context.set_source_rgb(*fg_n) self.__drawPiece(context, piece, x_loc, y_loc) # Draw moving or dragged pieces(Those with piece.x and piece.y != None) context.set_source_rgb(*fg_p) for y_loc, row in enumerate(pieces.data): for x_loc, piece in row.items(): if not piece or piece.x is None or piece.opacity < 1: continue self.__drawPiece(context, piece, piece.x, piece.y) # Draw standing premove piece context.set_source_rgb(*fg_m) if ( self.premove_piece and self.premove_piece.x is None and self.premove0 and self.premove1 ): self.__drawPiece( context, self.premove_piece, self.premove1.x, self.premove1.y ) ############################### # drawSpecial # ############################### def drawSpecial(self, context, redrawn): light_blue = (0.550, 0.775, 0.950, 0.8) dark_blue = (0.475, 0.700, 0.950, 0.5) used = [] for cord, state in ( (self.active, "_active"), (self.selected, "_selected"), (self.premove0, "_selected"), (self.premove1, "_selected"), (self.hover, "_prelight"), ): if not cord: continue if cord in used: continue # Ensure that same cord, if having multiple "tasks", doesn't get # painted more than once used.append(cord) bounding = self.cord2RectRelative(cord) if not intersects(rect(bounding), redrawn): continue board = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) if board[cord] is None and (cord.x < 0 or cord.x > self.FILES - 1): continue side = self.square[3] x_loc, y_loc = self.cord2Point(cord) context.rectangle(x_loc, y_loc, side, side) if cord == self.premove0 or cord == self.premove1: if self.isLight(cord): context.set_source_rgba(*light_blue) else: context.set_source_rgba(*dark_blue) else: style_ctxt = self.get_style_context() if self.isLight(cord): # bg found, color = style_ctxt.lookup_color("p_bg" + state) else: # dark found, color = style_ctxt.lookup_color("p_dark" + state) if not found: print("color not found in boardview.py:", "p_dark" + state) red, green, blue, alpha = ( color.red, color.green, color.blue, color.alpha, ) context.set_source_rgba(red, green, blue, alpha) context.fill() def color2rgba(self, color): if color == "R": rgba = (0.643, 0, 0, 0.8) elif color == "B": rgba = (0.204, 0.396, 0.643, 0.8) elif color == "Y": rgba = (0.961, 0.475, 0, 0.8) else: # light_green rgba = (0.337, 0.612, 0.117, 0.8) return rgba def drawCircles(self, context): radius = self.square[3] / 2.0 context.set_line_width(4) for cord in self.circles: rgba = self.color2rgba(cord.color) context.set_source_rgb(*rgba[:3]) x_loc, y_loc = self.cord2Point(cord) context.new_sub_path() context.arc(x_loc + radius, y_loc + radius, radius - 3, 0, 2 * pi) context.stroke() if self.pre_circle is not None: rgba = self.color2rgba(self.pre_circle.color) context.set_source_rgb(*rgba[:3]) x_loc, y_loc = self.cord2Point(self.pre_circle) context.new_sub_path() context.arc(x_loc + radius, y_loc + radius, radius - 3, 0, 2 * pi) context.stroke() arw = 0.15 # Arrow width arhw = 0.6 # Arrow head width arhh = 0.6 # Arrow head height arsw = 0.0 # Arrow stroke width for arrow_cords in self.arrows: rgba = self.color2rgba(arrow_cords[0].color) self.__drawArrow(context, arrow_cords, arw, arhw, arhh, arsw, rgba, rgba) if self.pre_arrow is not None: rgba = self.color2rgba(self.pre_arrow[0].color) self.__drawArrow(context, self.pre_arrow, arw, arhw, arhh, arsw, rgba, rgba) ############################### # drawLastMove # ############################### def drawLastMove(self, context, redrawn): if not self.lastMove: return if self.shown <= self.model.lowply: return show_board = self.model.getBoardAtPly(self.shown, self.shown_variation_idx) last_board = self.model.getBoardAtPly(self.shown - 1, self.shown_variation_idx) capture = self.lastMove.is_capture(last_board) mark_width = 0.27 # Width of marker padding_last = 0.155 # Padding on last cord padding_curr = 0.085 # Padding on current cord stroke_width = 0.02 # Stroke width side = self.square[3] context.save() context.set_line_width(stroke_width * side) dic0 = {-1: 1 - padding_last, 1: padding_last} dic1 = {-1: 1 - padding_curr, 1: padding_curr} matrix_scaler = ((1, 1), (-1, 1), (-1, -1), (1, -1)) light_yellow = (0.929, 0.831, 0, 0.8) dark_yellow = (0.769, 0.627, 0, 0.5) light_orange = (0.961, 0.475, 0, 0.8) dark_orange = (0.808, 0.361, 0, 0.5) light_green = (0.337, 0.612, 0.117, 0.8) dark_green = (0.237, 0.512, 0.17, 0.5) if self.lastMove.flag in (KING_CASTLE, QUEEN_CASTLE): ksq0 = last_board.board.kings[last_board.color] ksq1 = show_board.board.kings[last_board.color] wildcastle = Cord( last_board.board.ini_kings[last_board.color] ).x == 3 and last_board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS) if self.lastMove.flag == KING_CASTLE: side = 0 if wildcastle else 1 rsq0 = show_board.board.ini_rooks[last_board.color][side] rsq1 = show_board.board.fin_rooks[last_board.color][side] else: side = 1 if wildcastle else 0 rsq0 = show_board.board.ini_rooks[last_board.color][side] rsq1 = show_board.board.fin_rooks[last_board.color][side] cord_pairs = [[Cord(ksq0), Cord(ksq1)], [Cord(rsq0), Cord(rsq1)]] else: cord_pairs = [[self.lastMove.cord0, self.lastMove.cord1]] for [cord0, cord1] in cord_pairs: if cord0 is not None: rel = self.cord2RectRelative(cord0) if intersects(rect(rel), redrawn): rectangle = self.cord2Rect(cord0) for scaler in matrix_scaler: context.move_to( rectangle[0] + (dic0[scaler[0]] + mark_width * scaler[0]) * rectangle[2], rectangle[1] + (dic0[scaler[1]] + mark_width * scaler[1]) * rectangle[2], ) context.rel_line_to(0, -mark_width * rectangle[2] * scaler[1]) context.rel_curve_to( 0, mark_width * rectangle[2] * scaler[1] / 2.0, -mark_width * rectangle[2] * scaler[0] / 2.0, mark_width * rectangle[2] * scaler[1], -mark_width * rectangle[2] * scaler[0], mark_width * rectangle[2] * scaler[1], ) context.close_path() context.set_source_rgba(*light_yellow) context.fill_preserve() context.set_source_rgba(*dark_yellow) context.stroke() rel = self.cord2RectRelative(cord1) if intersects(rect(rel), redrawn): rectangle = self.cord2Rect(cord1) for scaler in matrix_scaler: context.move_to( rectangle[0] + dic1[scaler[0]] * rectangle[2], rectangle[1] + dic1[scaler[1]] * rectangle[2], ) context.rel_line_to(mark_width * rectangle[2] * scaler[0], 0) context.rel_curve_to( -mark_width * rectangle[2] * scaler[0] / 2.0, 0, -mark_width * rectangle[2] * scaler[0], mark_width * rectangle[2] * scaler[1] / 2.0, -mark_width * rectangle[2] * scaler[0], mark_width * rectangle[2] * scaler[1], ) context.close_path() if capture: context.set_source_rgba(*light_orange) context.fill_preserve() context.set_source_rgba(*dark_orange) context.stroke() elif cord0 is None: # DROP move context.set_source_rgba(*light_green) context.fill_preserve() context.set_source_rgba(*dark_green) context.stroke() else: context.set_source_rgba(*light_yellow) context.fill_preserve() context.set_source_rgba(*dark_yellow) context.stroke() ############################### # drawArrows # ############################### def __drawArrow(self, context, cords, aw, ahw, ahh, asw, fillc, strkc): context.save() lvx = cords[1].x - cords[0].x lvy = cords[0].y - cords[1].y hypotenuse = float((lvx**2 + lvy**2) ** 0.5) vec_x = lvx / hypotenuse vec_y = lvy / hypotenuse v1x = -vec_y v1y = vec_x rectangle = self.cord2Rect(cords[0]) px_loc = rectangle[0] + rectangle[2] / 2.0 py_loc = rectangle[1] + rectangle[2] / 2.0 ax_loc = v1x * rectangle[2] * aw / 2 ay_loc = v1y * rectangle[2] * aw / 2 context.move_to(px_loc + ax_loc, py_loc + ay_loc) p1x = px_loc + (lvx - vec_x * ahh) * rectangle[2] p1y = py_loc + (lvy - vec_y * ahh) * rectangle[2] context.line_to(p1x + ax_loc, p1y + ay_loc) lax = v1x * rectangle[2] * ahw / 2 lay = v1y * rectangle[2] * ahw / 2 context.line_to(p1x + lax, p1y + lay) context.line_to(px_loc + lvx * rectangle[2], py_loc + lvy * rectangle[2]) context.line_to(p1x - lax, p1y - lay) context.line_to(p1x - ax_loc, p1y - ay_loc) context.line_to(px_loc - ax_loc, py_loc - ay_loc) context.close_path() context.set_source_rgba(*fillc) context.fill_preserve() context.set_line_join(cairo.LINE_JOIN_ROUND) context.set_line_width(asw * rectangle[2]) context.set_source_rgba(*strkc) context.stroke() context.restore() def drawArrows(self, context): arw = 0.3 # Arrow width arhw = 0.72 # Arrow head width arhh = 0.64 # Arrow head height arsw = 0.08 # Arrow stroke width if self.bluearrow: self.__drawArrow( context, self.bluearrow, arw, arhw, arhh, arsw, (0.447, 0.624, 0.812, 0.9), (0.204, 0.396, 0.643, 1), ) if self.greenarrow: self.__drawArrow( context, self.greenarrow, arw, arhw, arhh, arsw, (0.54, 0.886, 0.2, 0.9), (0.306, 0.604, 0.024, 1), ) if self.redarrow: self.__drawArrow( context, self.redarrow, arw, arhw, arhh, arsw, (0.937, 0.16, 0.16, 0.9), (0.643, 0, 0, 1), ) ############################### # drawEnpassant # ############################### def drawEnpassant(self, context, redrawn): if not self.showEnpassant: return enpassant = self.model.boards[-1].enpassant if not enpassant: return context.set_source_rgb(0, 0, 0) side = self.square[3] x_loc, y_loc = self.cord2Point(enpassant) if not intersects(rect((x_loc, y_loc, side, side)), redrawn): return x_loc, y_loc = self.cord2Point(enpassant) crr = context crr.set_font_size(side / 2.0) fdescent, fheight = crr.font_extents()[1], crr.font_extents()[2] chars = "en" xbearing, width = crr.text_extents(chars)[0], crr.text_extents(chars)[2] crr.move_to( x_loc + side / 2.0 - xbearing - width / 2.0 - 1, side / 2.0 + y_loc - fdescent + fheight / 2.0, ) crr.show_text(chars) ############################### # drawCross # ############################### def drawCross(self, context, redrawn): xc_loc, yc_loc, square, side = self.square context.move_to(xc_loc, yc_loc) context.rel_line_to(square, square) context.move_to(xc_loc + square, yc_loc) context.rel_line_to(-square, square) context.set_line_cap(cairo.LINE_CAP_SQUARE) context.set_source_rgba(0, 0, 0, 0.65) context.set_line_width(side) context.stroke_preserve() context.set_source_rgba(1, 0, 0, 0.8) context.set_line_width(side / 2.0) context.stroke() ############################### # drawSupportAlgorithm # ############################### # Here is how we implemented representation of support algorithm : # piece not protected -> yellow circle # piece attacked and not protected -> red circle # see SupportAlgorithm in file utils.DecisionSupportAlgorithm for more details on the algorithm def drawSupportAlgorithm(self, context, redrawn): radius = self.square[3] / 2.0 context.set_line_width(4) algorithm = self.model.support_algorithm coord_attacked_not_protected = algorithm.coordinate_in_danger for cord in coord_attacked_not_protected: rgba = self.color2rgba(cord.color) context.set_source_rgb(*rgba[:3]) x_loc, y_loc = self.cord2Point(cord) context.new_sub_path() context.arc(x_loc + radius, y_loc + radius, radius - 3, 0, 2 * pi) context.stroke() ############################################################################ # Attributes # ############################################################################ ############################### # Cord vars # ############################### def _setSelected(self, cord): self._active = None if self._selected == cord: return if self._selected: rectangle = rect(self.cord2RectRelative(self._selected)) if cord: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) elif cord: rectangle = rect(self.cord2RectRelative(cord)) self._selected = cord self.redrawCanvas(rectangle) def _getSelected(self): return self._selected selected = property(_getSelected, _setSelected) def _setHover(self, cord): if self._hover == cord: return if self._hover: rectangle = rect(self.cord2RectRelative(self._hover)) # convert r from tuple to rect # tmpr = r # r = Gdk.Rectangle() # r.x, r.y, r.width, r.height = tmpr # if cord: r = r.union(rect(self.cord2RectRelative(cord))) if cord: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) elif cord: rectangle = rect(self.cord2RectRelative(cord)) # convert r from tuple to rect # tmpr = r # r = Gdk.Rectangle() # r.x, r.y, r.width, r.height = tmpr self._hover = cord self.redrawCanvas(rectangle) def _getHover(self): return self._hover hover = property(_getHover, _setHover) def _setActive(self, cord): if self._active == cord: return if self._active: rectangle = rect(self.cord2RectRelative(self._active)) if cord: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) elif cord: rectangle = rect(self.cord2RectRelative(cord)) self._active = cord self.redrawCanvas(rectangle) def _getActive(self): return self._active active = property(_getActive, _setActive) def _setPremove0(self, cord): if self._premove0 == cord: return if self._premove0: rectangle = rect(self.cord2RectRelative(self._premove0)) if cord: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) elif cord: rectangle = rect(self.cord2RectRelative(cord)) self._premove0 = cord self.redrawCanvas(rectangle) def _getPremove0(self): return self._premove0 premove0 = property(_getPremove0, _setPremove0) def _setPremove1(self, cord): if self._premove1 == cord: return if self._premove1: rectangle = rect(self.cord2RectRelative(self._premove1)) if cord: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) elif cord: rectangle = rect(self.cord2RectRelative(cord)) self._premove1 = cord self.redrawCanvas(rectangle) def _getPremove1(self): return self._premove1 premove1 = property(_getPremove1, _setPremove1) ################################ # Arrow vars # ################################ def _setRedarrow(self, cords): if cords == self._redarrow: return paint_cords = [] if cords: paint_cords += cords if self._redarrow: paint_cords += self._redarrow rectangle = rect(self.cord2RectRelative(paint_cords[0])) for cord in paint_cords[1:]: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) self._redarrow = cords self.redrawCanvas(rectangle) def _getRedarrow(self): return self._redarrow redarrow = property(_getRedarrow, _setRedarrow) def _setGreenarrow(self, cords): if cords == self._greenarrow: return paint_cords = [] if cords: paint_cords += cords if self._greenarrow: paint_cords += self._greenarrow rectangle = rect(self.cord2RectRelative(paint_cords[0])) for cord in paint_cords[1:]: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) self._greenarrow = cords self.redrawCanvas(rectangle) def _getGreenarrow(self): return self._greenarrow greenarrow = property(_getGreenarrow, _setGreenarrow) def _setBluearrow(self, cords): if cords == self._bluearrow: return paint_cords = [] if cords: paint_cords += cords if self._bluearrow: paint_cords += self._bluearrow rectangle = rect(self.cord2RectRelative(paint_cords[0])) for cord in paint_cords[1:]: rectangle = union(rectangle, rect(self.cord2RectRelative(cord))) self._bluearrow = cords self.redrawCanvas(rectangle) def _getBluearrow(self): return self._bluearrow bluearrow = property(_getBluearrow, _setBluearrow) ################################ # Other vars # ################################ def _setRotation(self, radians): if not conf.get("fullAnimation"): self._rotation = radians self.next_rotation = radians self.matrix = cairo.Matrix.init_rotate(radians) self.redrawCanvas() else: if hasattr(self, "next_rotation") and self.next_rotation != self.rotation: return self.next_rotation = radians oldr = self.rotation start = time() def rotate(): amount = (time() - start) / ANIMATION_TIME if amount > 1: amount = 1 next = False self.animating = False else: next = True self._rotation = new = oldr + amount * (radians - oldr) self.matrix = cairo.Matrix.init_rotate(new) self.redrawCanvas() return next self.animating = True GLib.idle_add(rotate) def _getRotation(self): return self._rotation rotation = property(_getRotation, _setRotation) def _setDrawGrid(self, draw_grid): self._draw_grid = draw_grid self.redrawCanvas() def _getDrawGrid(self): return self._draw_grid draw_grid = property(_getDrawGrid, _setDrawGrid) def _setShowCords(self, show_cords): if not show_cords and self.no_frame: self.padding = 0.0 else: self.padding = self.pad self._show_cords = show_cords self.redrawCanvas() def _getShowCords(self): return self._show_cords show_cords = property(_getShowCords, _setShowCords) def _setShowCaptured(self, show_captured, force_restore=False): self._show_captured = ( show_captured or self.model.variant.variant in DROP_VARIANTS ) alloc = self.get_allocation() size = alloc.height / self.RANKS persp = perspective_manager.get_perspective("games") if self._show_captured: needed_width = ( size * (self.FILES + self.FILES_FOR_HOLDING) + self.padding * 2 ) if alloc.width < needed_width: persp.adjust_divider(needed_width - alloc.width) elif force_restore: needed_width = size * self.FILES + self.padding * 2 if alloc.width > needed_width: persp.adjust_divider(needed_width - alloc.width) self.redrawCanvas() def _getShowCaptured(self): return False if self.preview else self._show_captured showCaptured = property(_getShowCaptured, _setShowCaptured) def _setShowEnpassant(self, show_enpassant): if self._show_enpassant == show_enpassant: return if self.model: enpascord = self.model.boards[-1].enpassant if enpascord: rectangle = rect(self.cord2RectRelative(enpascord)) self.redrawCanvas(rectangle) self._show_enpassant = show_enpassant def _getShowEnpassant(self): return self._show_enpassant showEnpassant = property(_getShowEnpassant, _setShowEnpassant) ########################### # Other # ########################### def cord2Rect(self, cord, y_loc=None): if y_loc is None: x_loc, y_loc = cord.x, cord.y else: x_loc = cord xc_loc, yc_loc, side = self.square[0], self.square[1], self.square[3] return ( (xc_loc + (x_loc * side)), (yc_loc + (self.RANKS - 1 - y_loc) * side), side, ) def cord2Point(self, cord, y_loc=None): point = self.cord2Rect(cord, y_loc) return point[:2] def cord2RectRelative(self, cord, y_loc=None): """Like cord2Rect, but gives you bounding rect in case board is beeing Rotated""" if isinstance(cord, tuple): cx_loc, cy_loc, square = cord else: cx_loc, cy_loc, square = self.cord2Rect(cord, y_loc) x_zero, y_zero = self.matrix.transform_point(cx_loc, cy_loc) x_one, y_one = self.matrix.transform_point(cx_loc + square, cy_loc) x_two, y_two = self.matrix.transform_point(cx_loc, cy_loc + square) x_three, y_three = self.matrix.transform_point(cx_loc + square, cy_loc + square) x_loc = min(x_zero, x_one, x_two, x_three) y_loc = min(y_zero, y_one, y_two, y_three) square = max(y_zero, y_one, y_two, y_three) - y_loc return (x_loc, y_loc, square) def isLight(self, cord): """Description: Given a board co-ordinate it returns True if the square at that co-ordinate is light Return : Boolean """ if self.model.variant.variant in ASEAN_VARIANTS: return False x_loc, y_loc = cord.cords return (x_loc % 2 + y_loc % 2) == 1 def showFirst(self): if self.model.examined and self.model.noTD: self.model.goFirst() else: self.shown = self.model.lowply self.shown_variation_idx = 0 def showPrev(self, step=1): # If prev board belongs to a higher level variation # we have to update shown_variation_idx old_variation_idx = None if not self.shownIsMainLine(): board = self.model.getBoardAtPly( self.shown - step, self.shown_variation_idx ) for vari in self.model.variations: if board in vari: break # swich to the new variation old_variation_idx = self.shown_variation_idx self.shown_variation_idx = self.model.variations.index(vari) if self.model.examined and self.model.noTD: self.model.goPrev(step) else: if self.shown > self.model.lowply: if self.shown - step > self.model.lowply: self._setShown(self.shown - step, old_variation_idx) else: self._setShown(self.model.lowply, old_variation_idx) def showNext(self, step=1): if self.model.examined and self.model.noTD: self.model.goNext(step) else: maxply = self.model.variations[self.shown_variation_idx][-1].ply if self.shown < maxply: if self.shown + step < maxply: self.shown += step else: self.shown = maxply self.playSound() def showLast(self): if self.model.examined and self.model.noTD: self.model.goLast() else: maxply = self.model.variations[self.shown_variation_idx][-1].ply self.shown = maxply def backToMainLine(self): if self.model.examined and self.model.noTD: self.model.backToMainLine() else: while not self.shownIsMainLine(): self.showPrev() def backToParentLine(self): if self.model.examined and self.model.noTD: self.model.backToMainLine() else: varline = self.shown_variation_idx while True: self.showPrev() if self.shownIsMainLine() or self.shown_variation_idx != varline: break def setPremove( self, premove_piece, premove0, premove1, premove_ply, promotion=None ): self.premove_piece = premove_piece self.premove0 = premove0 self.premove1 = premove1 self.premove_ply = premove_ply self.premove_promotion = promotion def copy_pgn(self): output = StringIO() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text(pgn.save(output, self.model), -1) def copy_fen(self): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) fen = self.model.getBoardAtPly(self.shown, self.shown_variation_idx).asFen() clipboard.set_text(fen, -1) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/BorderBox.py0000755000175100001770000000467014614030313020737 0ustar00runnerdockerfrom gi.repository import Gtk, GObject class BorderBox(Gtk.Alignment): def __init__(self, widget=None, top=False, right=False, bottom=False, left=False): GObject.GObject.__init__(self) self.connect("draw", self._onExpose) if widget: self.add(widget) self.__top = top self.__right = right self.__bottom = bottom self.__left = left self._updateBorders() def _onExpose(self, area, ctx): context = self.get_window().cairo_create() style_ctxt = self.get_style_context() color = style_ctxt.lookup_color("p_dark_color")[1] red, green, blue, alpha = color.red, color.green, color.blue, color.alpha context.set_source_rgba(red, green, blue, alpha) allocation = self.get_allocation() x_loc = allocation.x + 0.5 y_loc = allocation.y + 0.5 width = allocation.width - 1 height = allocation.height - 1 if self.top: context.move_to(x_loc, y_loc) context.line_to(x_loc + width, y_loc) if self.right: context.move_to(x_loc + width, y_loc) context.line_to(x_loc + width, y_loc + height) if self.bottom: context.move_to(x_loc + width, y_loc + height) context.line_to(x_loc, y_loc + height) if self.left: context.move_to(x_loc, y_loc + height) context.line_to(x_loc, y_loc) context.set_line_width(1) context.stroke() def _updateBorders(self): self.set_padding( self.top and 1 or 0, self.bottom and 1 or 0, self.right and 1 or 0, self.left and 1 or 0, ) def isTop(self): return self.__top def isRight(self): return self.__right def isBottom(self): return self.__bottom def isLeft(self): return self.__left def setTop(self, value): self.__top = value self._updateBorders() def setRight(self, value): self.__right = value self._updateBorders() def setBottom(self, value): self.__bottom = value self._updateBorders() def setLeft(self, value): self.__left = value self._updateBorders() top = property(isTop, setTop, None, None) right = property(isRight, setRight, None, None) bottom = property(isBottom, setBottom, None, None) left = property(isLeft, setLeft, None, None) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ChainVBox.py0000755000175100001770000001616414614030313020673 0ustar00runnerdockerimport cairo from gi.repository import Gtk, Gdk, GObject from pychess.System.prefix import addDataPrefix from pychess.widgets.BoardView import union from .BorderBox import BorderBox class ChainVBox(Gtk.VBox): """Inspired by the GIMP chainbutton widget""" __gsignals__ = {"clicked": (GObject.SignalFlags.RUN_FIRST, None, ())} def __init__(self): GObject.GObject.__init__(self) chainline = ChainLine(CHAIN_TOP) self.pack_start(chainline, True, True, 0) self.button = Gtk.Button() self.pack_start(self.button, False, True, 0) chainline = ChainLine(CHAIN_BOTTOM) self.pack_start(chainline, True, True, 0) self.image = Gtk.Image() self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) self.button.set_image(self.image) self.button.set_relief(Gtk.ReliefStyle.NONE) self.button.set_property("yalign", 0) self._active = True self.button.connect("clicked", self.onClicked) def getActive(self): return self._active def setActive(self, active): assert isinstance(active, bool) self._active = active if self._active is True: self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) else: self.image.set_from_file(addDataPrefix("glade/stock-vchain-broken-24.png")) active = property(getActive, setActive) def onClicked(self, button): if self._active is False: self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) self._active = True else: self.image.set_from_file(addDataPrefix("glade/stock-vchain-broken-24.png")) self._active = False self.emit("clicked") CHAIN_TOP, CHAIN_BOTTOM = range(2) SHORT_LINE = 2 LONG_LINE = 8 class ChainLine(Gtk.Alignment): """The ChainLine's are the little right-angle lines above and below the chain button that visually connect the ChainButton to the widgets who's values are "chained" together by the ChainButton being active""" def __init__(self, position): GObject.GObject.__init__(self) self.position = position self.connect_after("size-allocate", self.on_size_allocate) self.connect_after("draw", self.on_draw) self.set_size_request(10, 10) self.lastRectangle = None def on_size_allocate(self, widget, requisition): if self.get_window(): allocation = self.get_allocation() rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( allocation.x, allocation.y, allocation.width, allocation.height, ) unionrect = ( union(self.lastRectangle, rect) if self.lastRectangle is not None else rect ) self.get_window().invalidate_rect(unionrect, True) self.get_window().process_updates(True) self.lastRectangle = rect def on_draw(self, widget, context): self.draw(context) return False ### # the original Gtk.Style.paint_polygon() way to draw, like The GIMP does it ### # def draw (self, widget, event): # a = self.get_allocation() # print a.x, a.y, a.width, a.height # points = [None, None, None] # points[0] = (a.x + a.width/2 - SHORT_LINE, a.y + a.height/2) # points[1] = (points[0][0] + SHORT_LINE, points[0][1]) # points[2] = (points[1][0], self.position == CHAIN_TOP and a.y+a.height-1 or a.y) # if self.position == CHAIN_BOTTOM: # t = points[0] # points[0] = points[2] # points[2] = t # print points # self.points = points # # style = widget.get_style() # style.paint_polygon(widget.get_parent_window(), # Gtk.StateType.NORMAL, # Gtk.ShadowType.ETCHED_OUT, # event.area, # widget, # "chainbutton", # points, # False) def __toAHalf(self, number): """To draw thin straight lines in cairo that aren't blurry, you have to adjust the endpoints by 0.5: http://www.cairographics.org/FAQ/#sharp_lines""" return int(number) + 0.5 def draw(self, context): allocation = self.get_allocation() x_loc = allocation.x y_loc = allocation.y width = allocation.width - 1 height = allocation.height context.set_source_rgb(0.2, 0.2, 0.2) # context.rectangle(0, 0, width, height) # context.fill() context.move_to( self.__toAHalf(x_loc + width / 2.0) - LONG_LINE, self.__toAHalf(y_loc + height / 2.0), ) context.line_to( self.__toAHalf(x_loc + width / 2.0), self.__toAHalf(y_loc + height / 2.0) ) if self.position == CHAIN_TOP: context.line_to( self.__toAHalf(x_loc + width / 2.0), self.__toAHalf(float(y_loc + height)), ) else: context.line_to( self.__toAHalf(x_loc + width / 2.0), self.__toAHalf(y_loc + 0.0) ) context.set_line_width(1.0) context.set_line_cap(cairo.LINE_CAP_ROUND) context.set_line_join(cairo.LINE_JOIN_ROUND) context.stroke() def __str__(self): allocation = self.get_allocation() chain_str = "ChainLine({}, {}, {}, {}".format( allocation.x, allocation.y, allocation.width, allocation.height ) chain_str += self.position == CHAIN_TOP and ", CHAIN_TOP" or ", CHAIN_BOTTOM" return chain_str + ")" if __name__ == "__main__": win = Gtk.Window() chainvbox = ChainVBox() label = Gtk.Label(label="Locked") adjustment = Gtk.Adjustment(value=10, upper=100, lower=0, step_increment=1) spinbutton1 = Gtk.SpinButton(adjustment=adjustment) adjustment = Gtk.Adjustment(value=0, upper=100, lower=0, step_increment=1) spinbutton2 = Gtk.SpinButton(adjustment=adjustment) table = Gtk.Table(rows=3, columns=2) # table.attach(label,0,2,0,1) # table.attach(chainvbox,1,2,1,3) # table.attach(spinbutton1,0,1,1,2) # table.attach(spinbutton2,0,1,2,3) table.attach(label, 0, 2, 0, 1, xoptions=Gtk.AttachOptions.SHRINK) table.attach(chainvbox, 1, 2, 1, 3, xoptions=Gtk.AttachOptions.SHRINK) table.attach(spinbutton1, 0, 1, 1, 2, xoptions=Gtk.AttachOptions.SHRINK) table.attach(spinbutton2, 0, 1, 2, 3, xoptions=Gtk.AttachOptions.SHRINK) table.set_row_spacings(2) def onChainBoxClicked(*whatever): if chainvbox.active is False: label.set_label("Unlocked") else: label.set_label("Locked") chainvbox.connect("clicked", onChainBoxClicked) border_box = BorderBox(widget=table) win.add(border_box) # win.resize(150,100) win.connect("delete-event", Gtk.main_quit) win.show_all() Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ChannelsPanel.py0000644000175100001770000004370314614030313021561 0ustar00runnerdockerfrom gi.repository import Gtk, GObject, Gdk, Pango from pychess.Utils.IconLoader import load_icon from pychess.widgets.InfoPanel import Panel TYPE_PERSONAL, TYPE_CHANNEL, TYPE_GUEST, TYPE_ADMIN, TYPE_COMP, TYPE_BLINDFOLD = range( 6 ) add_icon = load_icon(16, "gtk-add", "list-add") remove_icon = load_icon(16, "gtk-remove", "list-remove") def cmp(x, y): return (x > y) - (x < y) class TextImageTree(Gtk.TreeView): """:Description: Defines a tree with two columns. The first one has text. The second one a clickable stock_icon """ __gsignals__ = { "activated": (GObject.SignalFlags.RUN_FIRST, None, (str, str, int)), "selected": (GObject.SignalFlags.RUN_FIRST, None, (str, int)), } def __init__(self, icon): GObject.GObject.__init__(self) self.id2iter = {} pm = Gtk.ListStore(str, str, int, str) self.sort_model = Gtk.TreeModelSort(model=pm) self.set_model(self.sort_model) self.idSet = set() self.set_headers_visible(False) self.set_tooltip_column(3) self.set_search_column(1) self.sort_model.set_sort_column_id(1, Gtk.SortType.ASCENDING) self.sort_model.set_sort_func(1, self.compareFunction, 1) # First column crp = Gtk.CellRendererPixbuf() crp.props.pixbuf = icon self.rightcol = Gtk.TreeViewColumn("", crp) self.append_column(self.rightcol) # Second column crt = Gtk.CellRendererText() crt.props.ellipsize = Pango.EllipsizeMode.END self.leftcol = Gtk.TreeViewColumn("", crt, text=1) self.leftcol.set_expand(True) self.append_column(self.leftcol) # Mouse self.pressed = None self.stdcursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) self.linkcursor = Gdk.Cursor.new(Gdk.CursorType.HAND2) self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.leave_notify) # Selection self.get_selection().connect("changed", self.selection_changed) def addRow(self, grp_id, text, grp_type): """:Description: Takes a player or a channel identified by grp_id and adds them to the correct group defined by grp_type :return: None """ if grp_id in self.id2iter: return model = self.sort_model.get_model() m_iter = model.append( [grp_id, text, grp_type, GObject.markup_escape_text(text)] ) self.id2iter[grp_id] = m_iter self.idSet.add(grp_id) def removeRow(self, grp_id): """:Description: Takes a player or channel identified by grp_id and removes them from the data model. :return: None """ try: m_iter = self.id2iter[grp_id] except KeyError: return model = self.sort_model.get_model() model.remove(m_iter) del self.id2iter[grp_id] self.idSet.remove(grp_id) def selectRow(self, grp_id): """:Description: Takes a grp_id and finds the row associated with this id then sets this row to be the focus ie selected :returns: None """ m_iter = self.id2iter[grp_id] m_iter = self.sort_model.convert_child_iter_to_iter(m_iter)[1] sel = self.get_selection() sel.select_iter(m_iter) def __contains__(self, grp_id): """:Description: Checks to see if a grp_id in a member of the id set :returns: boolean """ return grp_id in self.idSet def button_press(self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: self.pressed = path_col_pos[0] def button_release(self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: if self.pressed == path_col_pos[0]: model = self.sort_model m_iter = model.get_iter(self.pressed) grp_id = model.get_value(m_iter, 0) text = model.get_value(m_iter, 1) grp_type = model.get_value(m_iter, 2) self.emit("activated", grp_id, text, grp_type) self.pressed = None def motion_notify(self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: self.get_window().set_cursor(self.linkcursor) else: self.get_window().set_cursor(self.stdcursor) def leave_notify(self, widget, event): self.get_window().set_cursor(self.stdcursor) def selection_changed(self, selection): model, m_iter = selection.get_selected() if m_iter: grp_id = model.get_value(m_iter, 0) grp_type = model.get_value(m_iter, 2) self.emit("selected", grp_id, grp_type) def compareFunction(self, treemodel, iter0, iter1, column): val0 = treemodel.get_value(iter0, column).split(":")[0] val1 = treemodel.get_value(iter1, column).split(":")[0] if val0.isdigit() and val1.isdigit(): return cmp(int(val0), int(val1)) return cmp(val0, val1) class ChannelsPanel(Gtk.ScrolledWindow, Panel): __gsignals__ = { "conversationAdded": (GObject.SignalFlags.RUN_FIRST, None, (str, str, int)), "conversationRemoved": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "conversationSelected": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) vbox = Gtk.VBox() self.add_with_viewport(vbox) self.get_child().set_shadow_type(Gtk.ShadowType.NONE) self.joinedList = TextImageTree(remove_icon) self.joinedList.connect("activated", self.onRemove) self.joinedList.connect("selected", self.onSelect) vbox.pack_start(self.joinedList, True, True, 0) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander = Gtk.Expander.new(_("Friends")) vbox.pack_start(expander, False, True, 0) self.friendsList = TextImageTree(add_icon) self.friendsList.connect("activated", self.onAdd) self.friendsList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.friendsList) self.channels = {} expander = Gtk.Expander.new(_("Admin")) vbox.pack_start(expander, False, True, 0) self.adminList = TextImageTree(add_icon) self.adminList.connect("activated", self.onAdd) self.adminList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.adminList) expander = Gtk.Expander.new(_("More channels")) vbox.pack_start(expander, False, True, 0) self.channelsList = TextImageTree(add_icon) self.channelsList.connect("activated", self.onAdd) self.channelsList.fixed_height_mode = True vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.channelsList) expander = Gtk.Expander.new(_("More players")) vbox.pack_start(expander, False, True, 0) self.playersList = TextImageTree(add_icon) self.playersList.connect("activated", self.onAdd) self.playersList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.playersList) expander = Gtk.Expander.new(_("Computers")) vbox.pack_start(expander, False, True, 0) self.compList = TextImageTree(add_icon) self.compList.connect("activated", self.onAdd) self.compList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.compList) expander = Gtk.Expander.new(_("BlindFold")) vbox.pack_start(expander, False, True, 0) self.blindList = TextImageTree(add_icon) self.blindList.connect("activated", self.onAdd) self.blindList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.blindList) expander = Gtk.Expander.new(_("Guests")) vbox.pack_start(expander, False, True, 0) self.guestList = TextImageTree(add_icon) self.guestList.connect("activated", self.onAdd) self.guestList.fixed_height_mode = True connection.cm.connect("privateMessage", self.onPersonMessage) connection.cm.connect("channelsListed", self.onChannelsListed) vbox.pack_start(Gtk.Separator.new(0), False, False, 2) expander.add(self.guestList) self.channels = {} self.highlighted = {} def change_fg_colour(self, lc, cell, model, m_iter, data): """ :Description: Changes the foreground colour of a cell :param lc: :class:`Gtk.TreeViewColumn` The column we are interested in :param cell: :class:`Gtk.CellRenderer` The cell we want to change :param model: :class:`Gtk.TreeModel` :param iter: :class:`Gtk.TreeIter` :param data: :py:class:`dict` (key=int,value=bool) value is true if channel already highlighted :return: None """ for chan in data: if model[m_iter][0] == chan: if data[chan]: cell.set_property("foreground_rgba", Gdk.RGBA(0.9, 0.2, 0.2, 1)) else: cell.set_property("foreground_rgba", Gdk.RGBA(0, 0, 0, 1)) def channel_Highlight(self, a, channel, grp_type, b): """ :Description: Highlights a channel ( that is **not** in focus ) that has received an update and changes it's foreground colour to represent change in contents :param a: not used :param channel: **(str)** The channel the message is intended for :param grp_type: either TYPE_CHANNEL or TYPE_PERSONAL :param b: not used :return: None """ j_list = self.joinedList leftcol = j_list.leftcol # treeViewColumn cur_iter = j_list.get_selection().get_selected()[1] # Selected iter if grp_type == TYPE_PERSONAL: channel = "person" + channel.lower() tmp_iter = j_list.id2iter[channel] tmp_iter = j_list.sort_model.convert_child_iter_to_iter(tmp_iter)[ 1 ] # channel iter j_list.get_selection().select_iter(tmp_iter) cell = leftcol.get_cells()[0] j_list.get_selection().select_iter(cur_iter) self.highlighted[channel] = True if cur_iter != tmp_iter: # iter = tmp_iter leftcol.set_cell_data_func( cell, self.change_fg_colour, func_data=self.highlighted ) def start(self): self.channels = self.connection.cm.getChannels() if self.channels: self._addChannels(self.channels) for player in list(self.connection.players.values()): grp_id = self.compileId(player.name, TYPE_PERSONAL) if str(player.name) in self.connection.notify_users: self.friendsList.addRow( grp_id, player.name + player.display_titles(), TYPE_PERSONAL ) elif player.online and ("(B)" in player.display_titles()): self.blindList.addRow( grp_id, player.name + player.display_titles(), TYPE_BLINDFOLD ) elif player.online and ("(C)" in player.display_titles()): self.compList.addRow( grp_id, player.name + player.display_titles(), TYPE_COMP ) elif player.online and ("Guest" in str(player.name)): self.guestList.addRow( grp_id, player.name + player.display_titles(), TYPE_GUEST ) elif player.online: self.playersList.addRow( grp_id, player.name + player.display_titles(), TYPE_PERSONAL ) def addPlayer(players, new_players): for player in new_players: # print("Player : %s : %s" % (str(player.name),player.display_titles())) if str(player.name) in self.connection.notify_users: self.friendsList.addRow( self.compileId(player.name, TYPE_PERSONAL), player.name + player.display_titles(), TYPE_PERSONAL, ) elif "(C)" in str(player.display_titles()): self.compList.addRow( self.compileId(player.name, TYPE_COMP), player.name + player.display_titles(), TYPE_COMP, ) elif "(B)" in str(player.display_titles()): self.blindList.addRow( self.compileId(player.name, TYPE_BLINDFOLD), player.name + player.display_titles(), TYPE_BLINDFOLD, ) elif "Guest" in str(player.name): self.guestList.addRow( self.compileId(player.name, TYPE_GUEST), player.name + player.display_titles(), TYPE_GUEST, ) else: self.playersList.addRow( self.compileId(player.name, TYPE_PERSONAL), player.name + player.display_titles(), TYPE_PERSONAL, ) return False self.connection.players.connect("FICSPlayerEntered", addPlayer) def removePlayer(players, player): if str(player.name) in list(self.connection.notify_users): self.friendsList.removeRow(self.compileId(player.name, TYPE_PERSONAL)) else: self.playersList.removeRow(self.compileId(player.name, TYPE_PERSONAL)) return False self.connection.players.connect("FICSPlayerExited", removePlayer) def _addChannels(self, channels): for grp_id, name in channels: grp_id = self.compileId(grp_id, TYPE_CHANNEL) self.channelsList.addRow(grp_id, str(grp_id) + ": " + name, TYPE_CHANNEL) for grp_id, name in channels: if grp_id in self.connection.cm.getJoinedChannels(): grp_id = self.compileId(grp_id, TYPE_CHANNEL) if grp_id.isdigit(): self.onAdd( self.channelsList, grp_id, str(grp_id) + ": " + name, TYPE_CHANNEL, ) else: self.onAdd(self.channelsList, grp_id, name, TYPE_CHANNEL) def onChannelsListed(self, cm, channels): if not self.channels: self.channels = channels self._addChannels(channels) def compileId(self, grp_id, type): if type == TYPE_CHANNEL: # FIXME: We can't really add stuff to the grp_id, as panels use it to # identify the channel assert not grp_id.startswith("person"), "Oops, this is a problem" else: grp_id = "person" + grp_id.lower() return grp_id def onAdd(self, grp_list, grp_id, text, grp_type): if grp_id in grp_list: grp_list.removeRow(grp_id) self.joinedList.addRow(grp_id, text, grp_type) self.emit("conversationAdded", grp_id, text, grp_type) if grp_type == TYPE_CHANNEL: self.connection.cm.joinChannel(grp_id) self.joinedList.selectRow(grp_id) def onRemove(self, joined_list, grp_id, text, grp_type): joined_list.removeRow(grp_id) if grp_type == TYPE_CHANNEL: self.channelsList.addRow(grp_id, text, grp_type) elif grp_type == TYPE_PERSONAL: self.playersList.addRow(grp_id, text, grp_type) elif grp_type == TYPE_COMP: self.compList.addRow(grp_id, text, grp_type) elif grp_type == TYPE_ADMIN: self.adminList.addRow(grp_id, text, grp_type) elif grp_type == TYPE_GUEST: self.guestList.addRow(grp_id, text, grp_type) elif grp_type == TYPE_BLINDFOLD: self.blindList.addRow(grp_id, text, grp_type) self.emit("conversationRemoved", grp_id) if grp_type == TYPE_CHANNEL: self.connection.cm.removeChannel(grp_id) def onSelect(self, joined_list, grp_id, grp_type): self.emit("conversationSelected", grp_id) joined_list.get_selection().get_selected()[1] # Selected iter cell = joined_list.leftcol.get_cells()[0] self.highlighted[grp_id] = False joined_list.leftcol.set_cell_data_func( cell, self.change_fg_colour, func_data=self.highlighted ) def onPersonMessage(self, cm, name, title, isadmin, text): if not self.compileId(name, TYPE_PERSONAL) in self.joinedList: grp_id = self.compileId(name, TYPE_PERSONAL) self.onAdd(self.playersList, grp_id, name, TYPE_PERSONAL) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ChatView.py0000755000175100001770000002267014614030313020563 0ustar00runnerdockerfrom time import strftime, localtime import random from gi.repository import Gtk, Gdk, Pango, GObject from pychess.System import uistuff from pychess.widgets import insert_formatted from pychess.Utils.IconLoader import load_icon from pychess.ic.ICGameModel import ICGameModel class ChatView(Gtk.Box): __gsignals__ = { "messageAdded": (GObject.SignalFlags.RUN_FIRST, None, (str, str, object)), "messageTyped": (GObject.SignalFlags.RUN_FIRST, None, (str,)), } def __init__(self, gamemodel=None): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL) self.gamemodel = gamemodel # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 if isinstance(self.gamemodel, ICGameModel): self.refresh = Gtk.Image() self.refresh.set_from_pixbuf(load_icon(16, "view-refresh", "stock-refresh")) label = _("Observers") self.obs_btn = Gtk.Button() self.obs_btn.set_image(self.refresh) self.obs_btn.set_label(label) self.obs_btn_cid = self.obs_btn.connect("clicked", self.on_obs_btn_clicked) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # Inits the observers view self.obsView = Gtk.TextView() self.obsView.set_cursor_visible(False) self.obsView.set_editable(False) self.obsView.props.wrap_mode = Gtk.WrapMode.WORD self.obsView.props.pixels_below_lines = 1 self.obsView.props.pixels_above_lines = 2 self.obsView.props.left_margin = 2 text_buffer = self.obsView.get_buffer() iter = text_buffer.get_end_iter() anchor1 = text_buffer.create_child_anchor(iter) self.obsView.add_child_at_anchor(self.obs_btn, anchor1) self.button_tag = text_buffer.create_tag("observers") text_buffer.insert_with_tags_by_name(iter, " ", "observers") text_buffer.insert(iter, "\n") if not self.gamemodel.offline_lecture: vbox.pack_start(self.obsView, False, True, 0) vbox.pack_start(self.sw, True, True, 0) self.pack_start(vbox, True, True, 0) else: self.pack_start(self.sw, True, True, 0) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.Entry() box = Gtk.Box() self.pack_start(self.writeView, False, False, 0) box.add(self.writeView) if self.gamemodel is not None and self.gamemodel.offline_lecture: label = _("Go on") self.go_on_btn = Gtk.Button() self.go_on_btn.set_label(label) self.go_on_btn_cid = self.go_on_btn.connect( "clicked", lambda btn: self.gamemodel.lecture_skip_event.set() ) box.add(self.go_on_btn) label = _("Pause") self.pause_btn = Gtk.Button() self.pause_btn.set_label(label) self.pause_btn_cid = self.pause_btn.connect( "clicked", lambda btn: self.gamemodel.lecture_pause_event.set() ) box.add(self.pause_btn) self.pack_start(box, False, False, 0) self.writeview_cid = self.writeView.connect("key-press-event", self.onKeyPress) self.cid = None if self.gamemodel is not None: self.cid = self.gamemodel.connect_after( "game_terminated", self.on_game_terminated ) def on_game_terminated(self, model): if isinstance(self.gamemodel, ICGameModel): self.obs_btn.disconnect(self.obs_btn_cid) self.writeView.disconnect(self.writeview_cid) if self.cid is not None: self.gamemodel.disconnect(self.cid) def on_obs_btn_clicked(self, other): if not self.gamemodel.connection.ICC: allob = "allob " + str(self.gamemodel.ficsgame.gameno) self.gamemodel.connection.client.run_command(allob) def update_observers(self, other, observers): """Rebuilds observers list text""" text_buf = self.obsView.get_buffer() start_iter = text_buf.get_end_iter() start_iter.backward_to_tag_toggle(self.button_tag) start_iter.forward_char() end_iter = text_buf.get_end_iter() text_buf.delete(start_iter, end_iter) iter = text_buf.get_end_iter() obs_list = observers.split() for player in obs_list: # Colourize only players able to interact with chat View if player.endswith("(U)"): text_buf.insert(iter, "%s " % player[:-3]) elif "(" in player: pref = player.split("(", 1)[0] self._ensureColor(pref) text_buf.insert_with_tags_by_name(iter, "%s " % player, pref + "_bold") else: text_buf.insert(iter, "%s " % player) self.obsView.show_all() def _ensureColor(self, pref): """Ensures that the tags for pref_normal and pref_bold are set in the text buffer""" text_buf = self.readView.get_buffer() if pref not in self.colors: color = uistuff.genColor(len(self.colors) + 1, self.startpoint) self.colors[pref] = color color = [int(c * 255) for c in color] color = "#" + "".join([hex(v)[2:].zfill(2) for v in color]) text_buf.create_tag(pref + "_normal", foreground=color) text_buf.create_tag( pref + "_bold", foreground=color, weight=Pango.Weight.BOLD ) if isinstance(self.gamemodel, ICGameModel): otb = self.obsView.get_buffer() otb.create_tag(pref + "_normal", foreground=color) otb.create_tag( pref + "_bold", foreground=color, weight=Pango.Weight.BOLD ) def clear(self): self.writeView.get_buffer().props.text = "" self.readView.get_buffer().props.text = "" tagtable = self.readView.get_buffer().get_tag_table() for i in range(len(self.colors)): tagtable.remove("%d_normal" % i) tagtable.remove("%d_bold" % i) self.colors.clear() def __addMessage(self, iter, time, sender, text): pref = sender.lower() text_buffer = self.readView.get_buffer() iter = text_buffer.get_end_iter() text_buffer.create_mark("end", iter, False) if text_buffer.props.text: text_buffer.insert(iter, "\n") # Calculate a color for the sender self._ensureColor(pref) # Insert time, name and text with different stylesd text_buffer.insert_with_tags_by_name(iter, "(%s) " % time, pref + "_normal") text_buffer.insert_with_tags_by_name(iter, sender + ": ", pref + "_bold") insert_formatted(self.readView, iter, text) # Scroll the mark onscreen. mark = text_buffer.get_mark("end") text_buffer.move_mark(mark, iter) self.readView.scroll_mark_onscreen(mark) # This is used to buzz the user and add senders to a list of active participants self.emit("messageAdded", sender, text, self.colors[pref]) def insertLogMessage(self, timestamp, sender, text): """Takes a list of (timestamp, sender, text) pairs, and inserts them in the beginning of the document. All text will be in a gray color """ text_buffer = self.readView.get_buffer() iter = text_buffer.get_iter_at_mark(text_buffer.get_mark("logMark")) time = strftime("%H:%M:%S", localtime(timestamp)) self.__addMessage(iter, time, sender, text) def addMessage(self, sender, text): text_buffer = self.readView.get_buffer() iter = text_buffer.get_end_iter() self.__addMessage(iter, strftime("%H:%M:%S"), sender, text) def disable(self, message): """Sets the write field insensitive, in cases where the channel is read only. Use the message to give the user a propriate exlpanation""" self.writeView.set_sensitive(False) self.writeView.set_text(message) def enable(self): self.writeView.set_text("") self.writeView.set_sensitive(True) def onKeyPress(self, widget, event): if event.keyval in list(map(Gdk.keyval_from_name, ("Return", "KP_Enter"))): if not event.get_state() & Gdk.ModifierType.CONTROL_MASK: buffer = self.writeView.get_buffer() if buffer.props.text: self.emit("messageTyped", buffer.props.text) buffer.props.text = "" return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ChessClock.py0000644000175100001770000002242214614030313021062 0ustar00runnerdockerfrom math import pi, cos, sin import cairo from gi.repository import GLib, Gtk, Gdk, Pango, PangoCairo, GObject from pychess.System import conf from pychess.Utils import formatTime from pychess.Utils.const import ( BLACK, WHITE, LOCAL, UNFINISHED_STATES, DRAW, WHITEWON, BLACKWON, UNKNOWN_STATE, ) from . import preferencesDialog class ChessClock(Gtk.DrawingArea): def __init__(self): GObject.GObject.__init__(self) self.connect("draw", self.expose) self.names = [_("White"), _("Black")] self.model = None self.short_on_time = [False, False] self.alarm_spin = conf.get("alarm_spin") conf.notify_add("alarm_spin", self.on_alarm_spin) def on_alarm_spin(self, *args): self.alarm_spin = conf.get("alarm_spin") def expose(self, widget, ctx): context = widget.get_window().cairo_create() clip_ext = context.clip_extents() if clip_ext[0] > 0 or clip_ext[2] < self.get_allocated_width(): self.redraw_canvas() return False rec = Gdk.Rectangle() rec.x, rec.y, rec.width, rec.height = ( clip_ext[0], clip_ext[1], clip_ext[2] - clip_ext[0], clip_ext[3] - clip_ext[1], ) context.rectangle(rec.x, rec.y, rec.width, rec.height) context.clip() self.draw(context) return False def draw(self, context): style_ctxt = self.get_style_context() self.light = style_ctxt.lookup_color("p_light_color")[1] self.dark = style_ctxt.lookup_color("p_dark_color")[1] if not self.model: return # Draw graphical Clock. Should this be moved to preferences? drawClock = True rect = Gdk.Rectangle() clip_ext = context.clip_extents() rect.x, rect.y, rect.width, rect.height = ( clip_ext[0], clip_ext[1], clip_ext[2] - clip_ext[0], clip_ext[3] - clip_ext[1], ) context.rectangle( rect.width / 2.0 * self.model.movingColor, 0, rect.width / 2.0, rect.height ) context.set_source_rgba( self.dark.red, self.dark.green, self.dark.blue, self.dark.alpha ) context.fill_preserve() context.new_path() time0 = self.names[0], self.formatedCache[WHITE] layout0 = self.create_pango_layout(" %s: %s " % (time0)) layout0.set_font_description(Pango.FontDescription("Sans Serif 17")) time1 = self.names[1], self.formatedCache[BLACK] layout1 = self.create_pango_layout(" %s: %s " % (time1)) layout1.set_font_description(Pango.FontDescription("Sans Serif 17")) dbl_max = max(layout1.get_pixel_size()[0], layout0.get_pixel_size()[0]) * 2 self.set_size_request(dbl_max + rect.height + 7, -1) pangoScale = float(Pango.SCALE) # Analog clock code. def paintClock(player): clock_y = rect.height / 2.0 clock_x = clock_y + rect.width / 2.0 * player + 1 rec = rect.height / 2.0 - 3.5 context.arc(clock_x, clock_y, rec - 1, 0, 2 * pi) linear = cairo.LinearGradient( clock_x - rec * 2, clock_y - rec * 2, clock_x + rec * 2, clock_y + rec * 2, ) linear.add_color_stop_rgba(0, 1, 1, 1, 0.3) linear.add_color_stop_rgba(1, 0, 0, 0, 0.3) # context.set_source_rgba( 0, 0, 0, .3) context.set_source(linear) context.fill() linear = cairo.LinearGradient( clock_x - rec, clock_y - rec, clock_x + rec, clock_y + rec ) linear.add_color_stop_rgba(0, 0, 0, 0, 0.5) linear.add_color_stop_rgba(1, 1, 1, 1, 0.5) context.arc(clock_x, clock_y, rec, 0, 2 * pi) context.set_source(linear) context.set_line_width(2.5) context.stroke() starttime = float(self.model.getInitialTime()) or 1 used = self.model.getPlayerTime(player) / starttime if used > 0: if used > 0: context.arc( clock_x, clock_y, rec - 0.8, -(used + 0.25) * 2 * pi, -0.5 * pi ) context.line_to(clock_x, clock_y) context.close_path() elif used == 0: context.arc(clock_x, clock_y, rec - 0.8, -0.5 * pi, 1.5 * pi) context.line_to(clock_x, clock_y) radial = cairo.RadialGradient( clock_x, clock_y, 3, clock_x, clock_y, rec ) if player == 0: # radial.add_color_stop_rgb(0, .73, .74, .71) radial.add_color_stop_rgb(0, 0.93, 0.93, 0.92) radial.add_color_stop_rgb(1, 1, 1, 1) else: # radial.add_color_stop_rgb(0, .53, .54, .52) radial.add_color_stop_rgb(0, 0.18, 0.20, 0.21) radial.add_color_stop_rgb(1, 0, 0, 0) context.set_source(radial) context.fill() x_loc = clock_x - cos((used - 0.25) * 2 * pi) * (rec - 1) y_loc = clock_y + sin((used - 0.25) * 2 * pi) * (rec - 1) context.move_to(clock_x, clock_y - rec + 1) context.line_to(clock_x, clock_y) context.line_to(x_loc, y_loc) context.set_line_width(0.2) if player == 0: context.set_source_rgb(0, 0, 0) else: context.set_source_rgb(1, 1, 1) context.stroke() if drawClock: paintClock(WHITE) if (self.model.movingColor or WHITE) == WHITE: context.set_source_rgba( self.light.red, self.light.green, self.light.blue, self.light.alpha ) else: context.set_source_rgba( self.dark.red, self.dark.green, self.dark.blue, self.dark.alpha ) y_loc = ( rect.height / 2.0 - layout0.get_extents()[0].height / pangoScale / 2 - layout0.get_extents()[0].y / pangoScale ) context.move_to(rect.height - 7, y_loc) PangoCairo.show_layout(context, layout0) if drawClock: paintClock(BLACK) if self.model.movingColor == BLACK: context.set_source_rgba( self.light.red, self.light.green, self.light.blue, self.light.alpha ) else: context.set_source_rgba( self.dark.red, self.dark.green, self.dark.blue, self.dark.alpha ) y_loc = ( rect.height / 2.0 - layout0.get_extents()[0].height / pangoScale / 2 - layout0.get_extents()[0].y / pangoScale ) context.move_to(rect.width / 2.0 + rect.height - 7, y_loc) PangoCairo.show_layout(context, layout1) def redraw_canvas(self): def do_redraw_canvas(): if self.get_window(): allocation = self.get_allocation() rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( 0, 0, allocation.width, allocation.height, ) self.get_window().invalidate_rect(rect, True) self.get_window().process_updates(True) GLib.idle_add(do_redraw_canvas) def setModel(self, model): self.model = model self.model.connect("time_changed", self.time_changed) self.model.connect("player_changed", self.player_changed) self.formatedCache = [ formatTime(self.model.getPlayerTime(self.model.movingColor or WHITE)) ] * 2 if model.secs != 0 or model.gain != 0: GLib.timeout_add(100, self.update) def time_changed(self, model): self.update() def player_changed(self, model): self.redraw_canvas() def update(self, wmovecount=-1, bmovecount=-1): if self.model.ended: return False if len(self.model.gamemodel.players) < 2: return not self.model.ended alarm_time = int(self.alarm_spin) if ( self.model.getPlayerTime(self.model.movingColor) <= alarm_time and self.model.gamemodel.players[self.model.movingColor].__type__ == LOCAL and self.model.gamemodel.status in UNFINISHED_STATES and self.model.secs != 0 and self.model.gamemodel.endstatus not in (DRAW, WHITEWON, BLACKWON, UNKNOWN_STATE) and not self.short_on_time[self.model.movingColor] ): self.short_on_time[self.model.movingColor] = True preferencesDialog.SoundTab.playAction("shortOnTime") if self.model.paused and wmovecount == -1 and bmovecount == -1: return not self.model.ended white_time = formatTime(self.model.getPlayerTime(WHITE, wmovecount)) black_time = formatTime(self.model.getPlayerTime(BLACK, bmovecount)) if self.formatedCache != [white_time, black_time]: self.formatedCache = [white_time, black_time] self.redraw_canvas() return not self.model.ended ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ExternalsDialog.py0000644000175100001770000001261314614030313022127 0ustar00runnerdockerimport asyncio import shutil import os import stat from gi.repository import Gtk from pychess.ic import TimeSeal from pychess.Savers import pgn from pychess.System import conf from pychess.System import uistuff from pychess.System import download_file_async from pychess.System.prefix import getEngineDataPrefix from pychess.widgets import mainwindow class ExternalsDialog: def __init__(self): self.window = Gtk.Window( Gtk.WindowType.TOPLEVEL, title=_("Ask for permissions") ) self.window.set_transient_for(mainwindow()) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) gtk_version = (Gtk.get_major_version(), Gtk.get_minor_version()) if gtk_version >= (3, 12): vbox.props.margin_start = 9 vbox.props.margin_end = 9 else: vbox.props.margin_left = 9 vbox.props.margin_right = 9 vbox.props.margin_bottom = 9 self.window.add(vbox) uistuff.keepWindowSize( "externalsdialog", self.window, (320, 240), uistuff.POSITION_CENTER ) label = Gtk.Label( _( "Some PyChess features require further permission in order to download external components" ) ) vbox.pack_start(label, True, True, 0) box = Gtk.Box() check_button = Gtk.CheckButton(_("database querying needs scoutfish")) check_button.set_active(conf.get("download_scoutfish")) check_button.connect( "toggled", lambda w: conf.set("download_scoutfish", w.get_active()) ) box.add(check_button) link = "https://github.com/pychess/scoutfish" link_button = Gtk.LinkButton(link, link) box.add(link_button) vbox.pack_start(box, False, False, 0) box = Gtk.Box() check_button = Gtk.CheckButton(_("database opening tree needs chess_db")) check_button.set_active(conf.get("download_chess_db")) check_button.connect( "toggled", lambda w: conf.set("download_chess_db", w.get_active()) ) box.add(check_button) link = "https://github.com/pychess/chess_db" link_button = Gtk.LinkButton(link, link) box.add(link_button) vbox.pack_start(box, False, False, 0) box = Gtk.Box() check_button = Gtk.CheckButton(_("ICC lag compensation needs timestamp")) check_button.set_active(conf.get("download_timestamp")) check_button.connect( "toggled", lambda w: conf.set("download_timestamp", w.get_active()) ) box.add(check_button) link = "http://download.chessclub.com/timestamp/" link_button = Gtk.LinkButton(link, link) box.add(link_button) vbox.pack_start(box, False, False, 0) check_button = Gtk.CheckButton(_("Don't show this dialog on startup.")) check_button.set_active(conf.get("dont_show_externals_at_startup")) check_button.connect( "toggled", lambda w: conf.set("dont_show_externals_at_startup", w.get_active()), ) vbox.pack_start(check_button, True, True, 0) buttonbox = Gtk.ButtonBox() close_button = Gtk.Button.new_from_stock(Gtk.STOCK_OK) close_button.connect("clicked", self.on_close_clicked) self.window.connect("delete_event", lambda w, a: self.window.destroy()) buttonbox.add(close_button) vbox.pack_start(buttonbox, False, False, 0) def show(self): self.window.show_all() self.window.present() def on_close_clicked(self, button): async def coro(): altpath = getEngineDataPrefix() if pgn.scoutfish_path is None and conf.get("download_scoutfish"): binary = ( "https://github.com/pychess/scoutfish/releases/download/20170627/%s" % pgn.scoutfish ) filename = await download_file_async(binary) if filename is not None: dest = shutil.move(filename, os.path.join(altpath, pgn.scoutfish)) os.chmod(dest, stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE) pgn.scoutfish_path = dest if pgn.chess_db_path is None and conf.get("download_chess_db"): binary = ( "https://github.com/pychess/chess_db/releases/download/20170627/%s" % pgn.parser ) filename = await download_file_async(binary) if filename is not None: dest = shutil.move(filename, os.path.join(altpath, pgn.parser)) os.chmod(dest, stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE) pgn.chess_db_path = dest if TimeSeal.timestamp_path is None and conf.get("download_timestamp"): binary = ( "http://download.chessclub.com.s3.amazonaws.com/timestamp/%s" % TimeSeal.timestamp ) filename = await download_file_async(binary) if filename is not None: dest = shutil.move( filename, os.path.join(altpath, TimeSeal.timestamp) ) os.chmod(dest, stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE) TimeSeal.timestamp_path = dest asyncio.create_task(coro()) self.window.emit("delete-event", None) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/GatingDialog.py0000644000175100001770000000467114614030313021400 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.Utils.Piece import Piece from pychess.Utils.const import ( WHITE, HAWK, ELEPHANT, HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK, ) from pychess.System import uistuff from pychess.widgets import mainwindow from .PieceWidget import PieceWidget class GatingDialog: def __init__(self, variant): self.widgets = uistuff.GladeWidgets("gating.glade") self.widgets["gatingDialog"].set_transient_for(mainwindow()) self.dialog = self.widgets["gatingDialog"] self.color = None if self.widgets["hawkDock"].get_child() is None: self.widgets["hawkDock"].add(PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkDock"].get_child().show() self.widgets["elephantDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant) ) self.widgets["elephantDock"].get_child().show() self.widgets["hawkAtRookDock"].add(PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkAtRookDock"].get_child().show() self.widgets["elephantAtRookDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant) ) self.widgets["elephantAtRookDock"].get_child().show() def setColor(self, color): self.widgets["hawkDock"].get_child().getPiece().color = color self.widgets["elephantDock"].get_child().getPiece().color = color self.widgets["hawkAtRookDock"].get_child().getPiece().color = color self.widgets["elephantAtRookDock"].get_child().getPiece().color = color def runAndHide(self, color, castling, hawk, elephant): self.setColor(color) self.widgets["button1"].show() self.widgets["button2"].show() self.widgets["button3"].show() self.widgets["button4"].show() if not castling: self.widgets["button3"].hide() self.widgets["button4"].hide() if not hawk: self.widgets["button1"].hide() self.widgets["button3"].hide() if not elephant: self.widgets["button2"].hide() self.widgets["button4"].hide() res = self.dialog.run() self.dialog.hide() if res != Gtk.ResponseType.DELETE_EVENT: return [HAWK_GATE, ELEPHANT_GATE, HAWK_GATE_AT_ROOK, ELEPHANT_GATE_AT_ROOK][ int(res) ] return None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ImageMenu.py0000755000175100001770000001144714614030313020720 0ustar00runnerdockerfrom gi.repository import Gtk, Gdk, GObject from pychess.widgets import mainwindow class ImageMenu(Gtk.EventBox): def __init__(self, image, child): GObject.GObject.__init__(self) self.add(image) self.subwindow = Gtk.Window() self.subwindow.set_transient_for(mainwindow()) self.subwindow.set_decorated(False) self.subwindow.set_resizable(False) self.subwindow.set_type_hint(Gdk.WindowTypeHint.DIALOG) self.subwindow.add(child) self.subwindow.connect_after("draw", self.__sub_onExpose) self.subwindow.connect("button_press_event", self.__sub_onPress) # self.subwindow.connect("motion_notify_event", self.__sub_onMotion) # self.subwindow.connect("leave_notify_event", self.__sub_onMotion) # self.subwindow.connect("delete-event", self.__sub_onDelete) self.subwindow.connect("focus-out-event", self.__sub_onFocusOut) child.show_all() self.setOpen(False) self.connect("button_press_event", self.__onPress) def setOpen(self, isopen): self.isopen = isopen if isopen: topwindow = self.get_parent() while not isinstance(topwindow, Gtk.Window): topwindow = topwindow.get_parent() x_loc, y_loc = topwindow.get_window().get_position() x_loc += self.get_allocation().x + self.get_allocation().width y_loc += self.get_allocation().y self.subwindow.move(x_loc, y_loc) self.subwindow.props.visible = isopen self.set_state(self.isopen and Gtk.StateType.SELECTED or Gtk.StateType.NORMAL) def __onPress(self, self_, event): if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS: self.setOpen(not self.isopen) def __sub_setGrabbed(self, grabbed): if grabbed and not Gdk.pointer_is_grabbed(): Gdk.pointer_grab( self.subwindow.get_window(), True, Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK, None, None, Gdk.CURRENT_TIME, ) Gdk.keyboard_grab(self.subwindow.get_window(), True, Gdk.CURRENT_TIME) elif Gdk.pointer_is_grabbed(): Gdk.pointer_ungrab(Gdk.CURRENT_TIME) Gdk.keyboard_ungrab(Gdk.CURRENT_TIME) def __sub_onMotion(self, subwindow, event): allocation = subwindow.get_allocation() self.__sub_setGrabbed( not (0 <= event.x < allocation.width and 0 <= event.y < allocation.height) ) def __sub_onPress(self, subwindow, event): allocation = subwindow.get_allocation() if not (0 <= event.x < allocation.width and 0 <= event.y < allocation.height): Gdk.pointer_ungrab(event.time) self.setOpen(False) def __sub_onExpose(self, subwindow, ctx): allocation = subwindow.get_allocation() context = subwindow.get_window().cairo_create() context.set_line_width(2) context.rectangle( allocation.x, allocation.y, allocation.width, allocation.height ) style_ctxt = self.get_style_context() color = style_ctxt.lookup_color("p_dark_color")[1] red, green, blue, alpha = color.red, color.green, color.blue, color.alpha context.set_source_rgba(red, green, blue, alpha) context.stroke() # self.__sub_setGrabbed(self.isopen) def __sub_onDelete(self, subwindow, event): self.setOpen(False) return True def __sub_onFocusOut(self, subwindow, event): self.setOpen(False) def switchWithImage(image, dialog): parent = image.get_parent() parent.remove(image) imageMenu = ImageMenu(image, dialog) parent.add(imageMenu) imageMenu.show() if __name__ == "__main__": win = Gtk.Window() vbox = Gtk.VBox() vbox.add(Gtk.Label(label="Her er der en kat")) image = Gtk.Image.new_from_icon_name("gtk-properties", Gtk.IconSize.BUTTON) vbox.add(image) vbox.add(Gtk.Label(label="Her er der ikke en kat")) win.add(vbox) table = Gtk.Table(2, 2) table.attach(Gtk.Label(label="Minutes:"), 0, 1, 0, 1) spin1 = Gtk.SpinButton() spin1.set_adjustment(Gtk.Adjustment(0, 0, 100, 1)) table.attach(spin1, 1, 2, 0, 1) table.attach(Gtk.Label(label="Gain:"), 0, 1, 1, 2) spin2 = Gtk.SpinButton() spin2.set_adjustment(Gtk.Adjustment(0, 0, 100, 1)) table.attach(spin2, 1, 2, 1, 2) table.set_border_width(6) switchWithImage(image, table) def onValueChanged(spin): print(spin.get_value()) spin1.connect("value-changed", onValueChanged) spin2.connect("value-changed", onValueChanged) win.show_all() win.connect("delete-event", Gtk.main_quit) Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/InfoBar.py0000644000175100001770000001014214614030313020355 0ustar00runnerdockerfrom gi.repository import GObject, Gtk def get_message_content(heading_text, message_text, image_stock_id): label = Gtk.Label() label.props.xalign = 0 label.props.justify = Gtk.Justification.LEFT label.props.wrap = True label.set_text(f"{heading_text} {message_text}") return label class InfoBarMessageButton(GObject.GObject): def __init__(self, text, response_id, sensitive=True, tooltip_text=""): GObject.GObject.__init__(self) self.text = text self.response_id = response_id self.sensitive = sensitive self.tooltip_text = tooltip_text self._button = None def get_sensitive(self): return self._sensitive def set_sensitive(self, sensitive): self._sensitive = sensitive sensitive = GObject.property(get_sensitive, set_sensitive) def get_tooltip_text(self): return self._tooltip_text def set_tooltip_text(self, tooltip_text): self._tooltip_text = tooltip_text tooltip_text = GObject.property(get_tooltip_text, set_tooltip_text) class InfoBarMessage(Gtk.InfoBar): __gsignals__ = { "dismissed": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self, message_type, content, callback): GObject.GObject.__init__(self) self.callback = callback self.content = content self.buttons = [] self.get_content_area().add(content) def add_button(self, button): """ All buttons must be added before doing InfoBarNotebook.push_message() """ if not isinstance(button, InfoBarMessageButton): raise TypeError("Not an InfoBarMessageButton: %s" % repr(button)) self.buttons.append(button) button._button = Gtk.InfoBar.add_button(self, button.text, button.response_id) def set_sensitive(button, property): if self.get_children(): self.set_response_sensitive(button.response_id, button.sensitive) button.connect("notify::sensitive", set_sensitive) def set_tooltip_text(button, property): button._button.set_property("tooltip-text", button.tooltip_text) button.connect("notify::tooltip-text", set_tooltip_text) def dismiss(self): self.hide() self.emit("dismissed") def update_content(self, content): for widget in self.get_content_area(): self.get_content_area().remove(widget) self.get_content_area().add(content) self.show_all() class InfoBarNotebook(Gtk.Notebook): """ This is a :class:`Gtk.Notebook` which manages InfoBarMessage objects pushed onto it via push_message() like a stack. If/when the current message at the top of the stack is responded to or dismissed by the user, the next message in the stack waiting for a response is displayed. Messages that aren't applicable anymore can be removed from anywhere in the InfoBar message stack by calling message.dismiss() """ def __init__(self, name=None): Gtk.Notebook.__init__(self) if name is not None: self.set_name(name) self.get_tab_label_text = self.customGetTabLabelText self.set_show_tabs(False) def customGetTabLabelText(self, child): return child.content.get_text() def push_message(self, message): def on_dismissed(mesage): page_num = self.page_num(message) if page_num != -1: self.remove_page(page_num) def onResponse(message, response_id): if callable(message.callback): message.callback(self, response_id, message) page_num = self.page_num(message) if page_num != -1: self.remove_page(page_num) current_page = self.get_current_page() if current_page > 0: self.remove_page(current_page) self.append_page(message, None) message.connect("response", onResponse) message.connect("dismissed", on_dismissed) self.show_all() def clear_messages(self): for child in self.get_children(): self.remove(child) self.show_all() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/InfoPanel.py0000644000175100001770000002312214614030313020712 0ustar00runnerdockerimport re from gi.repository import Gtk, GObject, Pango from pychess.widgets import insert_formatted TYPE_PERSONAL, TYPE_CHANNEL, TYPE_GUEST, TYPE_ADMIN, TYPE_COMP, TYPE_BLINDFOLD = range( 6 ) def get_playername(playername): re_m = re.match(r"(\w+)\W*", playername) return re_m.groups()[0] class BulletCellRenderer(Gtk.CellRenderer): __gproperties__ = { "color": ( object, "Color", "Color", GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ), } def __init__(self): GObject.GObject.__init__(self) self.color = None self.width = 16 self.height = 16 def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def do_render(self, context, widget, bg_area, cell_area, flags): if self.color is None: return else: red, green, blue = self.color x_loc, y_loc = self.get_size(widget, cell_area)[:2] context.set_source_rgb(red, green, blue) context.rectangle(x_loc, y_loc, self.width, self.height) context.fill() context.set_line_width(1) context.set_source_rgba(0, 0, 0, 0.5) context.rectangle(x_loc + 0.5, y_loc + 0.5, self.width - 1, self.height - 1) context.stroke() context.set_line_width(1) context.set_source_rgba(1, 1, 1, 0.5) context.rectangle(x_loc + 1.5, y_loc + 1.5, self.width - 3, self.height - 3) context.stroke() def on_get_size(self, widget, cell_area=None): if cell_area: y_loc = int(cell_area.height / 2.0 - self.height / 2.0) + cell_area.y x_loc = cell_area.x else: y_loc = 0 x_loc = 0 return (x_loc + 1, y_loc + 1, self.width + 2, self.height + 2) GObject.type_register(BulletCellRenderer) class Panel: def start(self): pass def addItem(self, id, text, type, chat_view): pass def removeItem(self, id): pass def selectItem(self, id): pass class InfoPanel(Gtk.Notebook, Panel): def __init__(self, connection): GObject.GObject.__init__(self) self.set_show_tabs(False) self.set_show_border(False) self.id2Widget = {} label = Gtk.Label() label.set_markup("%s" % _("No conversation's selected")) label.props.xalign = 0.5 label.props.yalign = 0.381966011 label.props.justify = Gtk.Justification.CENTER label.props.wrap = True label.props.width_request = 115 self.append_page(label, None) self.connection = connection def addItem(self, grp_id, text, grp_type, chat_view): if grp_type in ( TYPE_PERSONAL, TYPE_COMP, TYPE_GUEST, TYPE_ADMIN, TYPE_BLINDFOLD, ): infoItem = self.PlayerInfoItem(grp_id, text, chat_view, self.connection) elif grp_type == TYPE_CHANNEL: infoItem = self.ChannelInfoItem(grp_id, text, chat_view, self.connection) self.addPage(infoItem, grp_id) def removeItem(self, grp_id): self.removePage(grp_id) def selectItem(self, grp_id): child = self.id2Widget.get(grp_id) if child is not None: self.set_current_page(self.page_num(child)) def addPage(self, widget, grp_id): self.id2Widget[grp_id] = widget self.append_page(widget, None) widget.show_all() def removePage(self, grp_id): child = self.id2Widget.pop(grp_id) self.remove_page(self.page_num(child)) class PlayerInfoItem(Gtk.Alignment): def __init__(self, id, text, chat_view, connection): GObject.GObject.__init__(self, xscale=1, yscale=1) self.add(Gtk.Label(label=_("Loading player data"))) playername = get_playername(text) self.fm = connection.fm self.handle_id = self.fm.connect( "fingeringFinished", self.onFingeringFinished, playername ) self.fm.finger(playername) def onFingeringFinished(self, fm, finger, playername): if ( not isinstance(self.get_child(), Gtk.Label) or finger.getName().lower() != playername.lower() ): return self.fm.disconnect(self.handle_id) label = Gtk.Label() label.set_markup("%s" % playername) widget = Gtk.Frame() widget.set_label_widget(label) widget.set_shadow_type(Gtk.ShadowType.NONE) alignment = Gtk.Alignment.new(0, 0, 1, 1) alignment.set_padding(3, 0, 12, 0) widget.add(alignment) text_view = Gtk.TextView() text_view.set_editable(False) text_view.set_cursor_visible(False) text_view.props.wrap_mode = Gtk.WrapMode.WORD tb_iter = text_view.get_buffer().get_end_iter() for i, note in enumerate(finger.getNotes()): if note: insert_formatted(text_view, tb_iter, "%s\n" % note) text_view.show_all() scroll_win = Gtk.ScrolledWindow() scroll_win.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scroll_win.add(text_view) alignment.add(scroll_win) self.remove(self.get_child()) self.add(widget) widget.show_all() class ChannelInfoItem(Gtk.Alignment): def __init__(self, grp_id, text, chat_view, connection): GObject.GObject.__init__(self, xscale=1, yscale=1) self.cm = connection.cm self.add(Gtk.Label(label=_("Receiving list of players"))) self.names = set() chat_view.connect("messageAdded", self.onMessageAdded) self.store = Gtk.ListStore( object, str, bool # (r,g,b) Color tuple # name string # is separator ) connection.players.connect("FICSPlayerExited", self.onPlayerRemoved) self.handle_id = self.cm.connect( "receivedNames", self.onNamesReceived, grp_id ) self.cm.getPeopleInChannel(grp_id) def onPlayerRemoved(self, players, player): if player.name in self.names: for row in self.store: if row[1] == player.name: self.store.remove(row.iter) break self.names.remove(player.name) def onNamesReceived(self, cm, channel, people, channel_): if not isinstance(self.get_child(), Gtk.Label) or channel != channel_: return cm.disconnect(self.handle_id) scroll_win = Gtk.ScrolledWindow() scroll_win.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) tv_list = Gtk.TreeView() tv_list.set_headers_visible(False) tv_list.set_tooltip_column(1) tv_list.set_model(self.store) tv_list.append_column(Gtk.TreeViewColumn("", BulletCellRenderer(), color=0)) cell = Gtk.CellRendererText() cell.props.ellipsize = Pango.EllipsizeMode.END tv_list.append_column(Gtk.TreeViewColumn("", cell, text=1)) tv_list.fixed_height_mode = True self.separatorIter = self.store.append([(), "", True]) tv_list.set_row_separator_func(lambda m, i, d: m.get_value(i, 2), None) scroll_win.add(tv_list) self.store.connect("row-inserted", lambda w, p, i: tv_list.queue_resize()) self.store.connect("row-deleted", lambda w, i: tv_list.queue_resize()) # Add those names. If this is not the first namesReceive, we only # add the new names noneed = {name for (color, name, isSeparator) in self.store} for name in people: if name in noneed: continue self.store.append([(1, 1, 1), name, False]) self.names.add(name) self.remove(self.get_child()) self.add(scroll_win) self.show_all() def onMessageAdded(self, chat_view, sender, text, color): s_iter = self.store.get_iter_first() # If the names list hasn't been retrieved yet, we have to skip this if not s_iter: return while self.store.get_path(s_iter) != self.store.get_path( self.separatorIter ): person = self.store.get_value(s_iter, 1) # If the person is already in the area before the separator, we # don't have to do anything if person.lower() == sender.lower(): return s_iter = self.store.iter_next(s_iter) # Go to s_iter after separator s_iter = self.store.iter_next(s_iter) while s_iter and self.store.iter_is_valid(s_iter): person = self.store.get_value(s_iter, 1) if person.lower() == sender.lower(): self.store.set_value(s_iter, 0, color) self.store.move_before(s_iter, self.separatorIter) return s_iter = self.store.iter_next(s_iter) # If the person was not in the area under the separator of the # store, it must be a new person, who has joined the channel, and we # simply add him before the separator self.store.insert_before(self.separatorIter, [color, sender, False]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/LearnInfoBar.py0000644000175100001770000002344214614030313021346 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.Utils.const import UNDOABLE_STATES, PRACTICE_GOAL_REACHED from pychess.Utils.Cord import Cord from pychess.Utils.LearnModel import learn2str, LESSON, PUZZLE from pychess.perspectives.learn.PuzzlesPanel import start_puzzle_from from pychess.perspectives.learn.EndgamesPanel import start_endgame_from from pychess.perspectives.learn.LessonsPanel import start_lesson_from from pychess.widgets import preferencesDialog HINT, MOVE, RETRY, CONTINUE, BACK_TO_MAINLINE, NEXT, SKIP, PREVIOUS = range(8) css = """ @define-color error_fg_color rgb (235, 235, 235); @define-color error_bg_color rgb (223, 56, 44); .error { background-image: -gtk-gradient (linear, left top, left bottom, from (shade (@error_bg_color, 1.04)), to (shade (@error_bg_color, 0.96))); border-style: solid; border-width: 1px; color: @error_fg_color; border-color: shade (@error_bg_color, 0.8); border-bottom-color: shade (@error_bg_color, 0.75); box-shadow: inset 1px 0 shade (@error_bg_color, 1.08), inset -1px 0 shade (@error_bg_color, 1.08), inset 0 1px shade (@error_bg_color, 1.1), inset 0 -1px shade (@error_bg_color, 1.04); } """ def add_provider(widget): screen = widget.get_screen() style = widget.get_style_context() provider = Gtk.CssProvider() provider.load_from_data(css.encode("utf-8")) style.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) class LearnInfoBar(Gtk.InfoBar): def __init__(self, gamemodel, boardcontrol, annotation_panel): Gtk.InfoBar.__init__(self) self.connect("realize", add_provider) self.content_area = self.get_content_area() self.action_area = self.get_action_area() self.gamemodel = gamemodel self.boardcontrol = boardcontrol self.boardview = boardcontrol.view self.annotation_panel = annotation_panel self.gamemodel.connect("game_changed", self.on_game_changed) self.gamemodel.connect("goal_checked", self.on_goal_checked) self.connect("response", self.on_response) self.your_turn() def clear(self): for item in self.content_area: self.content_area.remove(item) for item in self.action_area: self.action_area.remove(item) def your_turn(self, shown_board=None): self.clear() self.set_message_type(Gtk.MessageType.QUESTION) self.content_area.add(Gtk.Label(_("Your turn."))) self.add_button(_("Hint"), HINT) self.add_button(_("Best move"), MOVE) if not self.gamemodel.end_game and self.gamemodel.current_index > 0: self.add_button(_("Previous"), PREVIOUS) self.add_button(_("Skip"), SKIP) self.show_all() def get_next_puzzle(self): self.clear() self.set_message_type(Gtk.MessageType.INFO) if ( self.gamemodel.learn_type in (LESSON, PUZZLE) and self.gamemodel.current_index + 1 == self.gamemodel.game_count ): self.content_area.add( Gtk.Label( _("Well done! %s completed." % learn2str[self.gamemodel.learn_type]) ) ) else: if "FEN" in self.gamemodel.tags: self.content_area.add(Gtk.Label(_("Well done!"))) self.add_button(_("Next"), NEXT) self.show_all() preferencesDialog.SoundTab.playAction("puzzleSuccess") self.gamemodel.solved = True def opp_turn(self): self.clear() self.set_message_type(Gtk.MessageType.INFO) self.add_button(_("Continue"), CONTINUE) # disable playing self.boardcontrol.game_preview = True self.show_all() def retry(self): self.clear() self.set_message_type(Gtk.MessageType.ERROR) self.content_area.add(Gtk.Label(_("Not the best move!"))) self.add_button(_("Retry"), RETRY) # disable playing self.boardcontrol.game_preview = True # disable retry button until engine thinking on next move if ( self.gamemodel.practice_game and self.gamemodel.status not in UNDOABLE_STATES ): self.set_response_sensitive(RETRY, False) self.show_all() def back_to_mainline(self): self.clear() self.set_message_type(Gtk.MessageType.INFO) self.content_area.add( Gtk.Label(_("Cool! Now let see how it goes in the main line.")) ) self.add_button(_("Back to main line"), BACK_TO_MAINLINE) # disable playing self.boardcontrol.game_preview = True self.show_all() def on_response(self, widget, response): if response in (HINT, MOVE): if self.gamemodel.lesson_game: next_move = self.gamemodel.getMoveAtPly( self.boardview.shown, self.boardview.shown_variation_idx ) hints = {self.boardview.shown: ((next_move.as_uci(),),)} else: hints = self.gamemodel.hints if self.boardview.shown in hints: if self.boardview.arrows: self.boardview.arrows.clear() if self.boardview.circles: self.boardview.circles.clear() hint = hints[self.boardview.shown][0][0] cord0 = Cord(hint[0], int(hint[1]), "G") cord1 = Cord(hint[2], int(hint[3]), "G") if response == HINT: self.boardview.circles.add(cord0) self.boardview.redrawCanvas() else: self.boardview.arrows.add((cord0, cord1)) self.boardview.redrawCanvas() else: # TODO: print( "No hint available yet!", self.gamemodel.ply, self.boardview.shown ) elif response == RETRY: self.your_turn() if self.gamemodel.practice_game: me_played_last_move = ( self.gamemodel.boards[-1].color != self.gamemodel.boards[0].color ) moves = ( 1 if self.gamemodel.status in UNDOABLE_STATES and me_played_last_move else 2 ) self.gamemodel.undoMoves(moves) elif self.gamemodel.lesson_game: prev_board = self.gamemodel.getBoardAtPly( self.boardview.shown - 1, variation=self.boardview.shown_variation_idx, ) self.annotation_panel.choices_enabled = False self.boardview.setShownBoard(prev_board) # We have to fix show_variation_index here, unless # after removing the variation it will be invalid! for vari in self.gamemodel.variations: if prev_board in vari: break self.boardview.shown_variation_idx = self.gamemodel.variations.index( vari ) self.annotation_panel.choices_enabled = True self.boardcontrol.game_preview = False elif response == CONTINUE: self.your_turn() self.boardview.showNext() self.boardcontrol.game_preview = False elif response == BACK_TO_MAINLINE: self.opp_turn() self.boardview.backToMainLine() self.boardcontrol.game_preview = False elif response in (NEXT, SKIP): if self.gamemodel.puzzle_game: if self.gamemodel.from_lesson: start_lesson_from( self.gamemodel.source, self.gamemodel.current_index + 1 ) else: start_puzzle_from( self.gamemodel.source, self.gamemodel.current_index + 1 ) elif self.gamemodel.end_game: start_endgame_from(self.gamemodel.source) elif self.gamemodel.lesson_game: start_lesson_from( self.gamemodel.source, self.gamemodel.current_index + 1 ) else: print(self.gamemodel.__dir__()) elif response == PREVIOUS: if self.gamemodel.puzzle_game: if self.gamemodel.from_lesson: start_lesson_from( self.gamemodel.source, self.gamemodel.current_index - 1 ) else: start_puzzle_from( self.gamemodel.source, self.gamemodel.current_index - 1 ) elif self.gamemodel.end_game: start_endgame_from(self.gamemodel.source) elif self.gamemodel.lesson_game: start_lesson_from( self.gamemodel.source, self.gamemodel.current_index - 1 ) else: print(self.gamemodel.__dir__()) def opp_choice_selected(self, board): self.your_turn() self.boardcontrol.game_preview = False def on_game_changed(self, gamemodel, ply): if gamemodel.practice_game: if len(gamemodel.moves) % 2 == 0: # engine moved, we can enable retry self.set_response_sensitive(RETRY, True) return def on_goal_checked(self, gamemodel): if gamemodel.status in UNDOABLE_STATES and self.gamemodel.end_game: self.get_next_puzzle() elif gamemodel.reason == PRACTICE_GOAL_REACHED: self.get_next_puzzle() elif gamemodel.failed_playing_best: self.retry() else: self.your_turn() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/LogDialog.py0000755000175100001770000002233214614030313020705 0ustar00runnerdockerimport time import logging from gi.repository import Gtk, Gdk, Pango, GLib from pychess.System import uistuff from pychess.System.LogEmitter import logemitter class InformationWindow: @classmethod def _init(cls): cls.tagToIter = {} cls.tagToPage = {} cls.pathToPage = {} cls.tagToTime = {} cls.window = Gtk.Window() cls.window.set_title(_("PyChess Information Window")) cls.window.set_border_width(12) cls.window.set_icon_name("pychess") uistuff.keepWindowSize("logdialog", cls.window, (640, 480)) mainHBox = Gtk.HBox() mainHBox.set_spacing(6) cls.window.add(mainHBox) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) mainHBox.pack_start(sw, False, True, 0) cls.treeview = Gtk.TreeView(Gtk.TreeStore(str)) cls.treeview.append_column( Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=0) ) cls.treeview.set_headers_visible(False) cls.treeview.get_selection().set_mode(Gtk.SelectionMode.BROWSE) sw.add(cls.treeview) cls.pages = Gtk.Notebook() cls.pages.set_show_tabs(False) cls.pages.set_show_border(False) mainHBox.pack_start(cls.pages, True, True, 0) mainHBox.show_all() def selectionChanged(selection): treestore, iter = selection.get_selected() if iter: child = cls.pathToPage[treestore.get_path(iter).to_string()]["child"] cls.pages.set_current_page(cls.pages.page_num(child)) cls.treeview.get_selection().connect("changed", selectionChanged) @classmethod def show(cls): cls.window.show() @classmethod def hide(cls): cls.window.hide() @classmethod def newMessage(cls, tag, timestamp, message, importance): def _newMessage(cls, tag, timestamp, message, importance): textview = cls._getPageFromTag(tag)["textview"] if tag not in cls.tagToTime or timestamp - cls.tagToTime[tag] >= 1: t = time.strftime("%H:%M:%S", time.localtime(timestamp)) textview.get_buffer().insert_with_tags_by_name( textview.get_buffer().get_end_iter(), "\n{}\n{}\n".format(t, "-" * 60), str(logging.INFO), ) cls.tagToTime[tag] = timestamp if not message.endswith("\n"): message = "%s\n" % message textview.get_buffer().insert_with_tags_by_name( textview.get_buffer().get_end_iter(), message, str(importance) ) GLib.idle_add(_newMessage, cls, tag, timestamp, message, importance) @classmethod def _createPage(cls, parent_iter, tag): name = tag[-1] if isinstance(name, int): name = str(name) iter = cls.treeview.get_model().append(parent_iter, (name,)) cls.tagToIter[tag] = iter widgets = uistuff.GladeWidgets("findbar.glade") frame = widgets["frame"] frame.unparent() frame.show_all() uistuff.keepDown(widgets["scrolledwindow"]) textview = widgets["textview"] tb = textview.get_buffer() tb.create_tag(str(logging.DEBUG), family="Monospace") tb.create_tag(str(logging.INFO), family="Monospace", weight=Pango.Weight.BOLD) tb.create_tag(str(logging.WARNING), family="Monospace", foreground="red") tb.create_tag( str(logging.ERROR), family="Monospace", weight=Pango.Weight.BOLD, foreground="red", ) tb.create_tag( str(logging.CRITICAL), family="Monospace", weight=Pango.Weight.BOLD, foreground="red", ) findbar = widgets["findbar"] findbar.hide() # Make searchEntry and "out of label" share height with the buttons widgets["prevButton"].connect( "size-allocate", lambda w, alloc: widgets["searchEntry"].set_size_request(-1, alloc.height) or widgets["outofLabel"].set_size_request(-1, alloc.height - 2), ) # Make "out of label" more visually distinct uistuff.makeYellow(widgets["outofLabel"]) widgets["outofLabel"].hide() widgets["closeButton"].connect("clicked", lambda w: widgets["findbar"].hide()) # Connect showing/hiding of the findbar cls.window.connect("key-press-event", cls.onTextviewKeypress, widgets) widgets["findbar"].connect("key-press-event", cls.onFindbarKeypress) widgets["searchEntry"].connect("changed", cls.onSearchChanged, widgets) widgets["prevButton"].connect("clicked", lambda w: cls.searchJump(-1, widgets)) widgets["nextButton"].connect("clicked", lambda w: cls.searchJump(1, widgets)) cls.pages.append_page(frame, None) page = {"child": frame, "textview": textview} cls.tagToPage[tag] = page cls.pathToPage[cls.treeview.get_model().get_path(iter).to_string()] = page cls.treeview.expand_all() @classmethod def _getPageFromTag(cls, tag): if isinstance(tag, list): tag = tuple(tag) elif not isinstance(tag, tuple): tag = (tag,) if tag in cls.tagToPage: return cls.tagToPage[tag] for i in range(len(tag) - 1): subtag = tag[: -i - 1] if subtag in cls.tagToIter: newtag = subtag + (tag[len(subtag)],) iter = cls.tagToIter[subtag] cls._createPage(iter, newtag) return cls._getPageFromTag(tag) cls._createPage(None, tag[:1]) return cls._getPageFromTag(tag) @classmethod def onSearchChanged(cls, search_entry, widgets): pattern = search_entry.get_text().lower() widgets["outofLabel"].props.visible = bool(pattern) if not pattern: return text = widgets["textview"].get_buffer().props.text.lower() widgets["outofLabel"].hits = [] widgets["outofLabel"].searchCurrent = -1 i = -len(pattern) while True: i = text.find(pattern, i + len(pattern)) if i != -1: widgets["outofLabel"].hits.append(i) else: break cls.searchJump(1, widgets) @classmethod def searchJump(cls, count, widgets): if not hasattr(widgets["outofLabel"], "hits"): return amount = len(widgets["outofLabel"].hits) if not amount: widgets["outofLabel"].set_text("0 %s 0" % _("of")) else: widgets["outofLabel"].searchCurrent += count current = widgets["outofLabel"].searchCurrent % amount widgets["outofLabel"].set_text("%d %s %d" % (current + 1, _("of"), amount)) goto = widgets["outofLabel"].hits[current] iter0 = widgets["textview"].get_buffer().get_iter_at_offset(goto) length = len(widgets["searchEntry"].get_text()) iter1 = widgets["textview"].get_buffer().get_iter_at_offset(goto + length) widgets["textview"].get_buffer().select_range(iter0, iter1) widgets["textview"].scroll_to_iter(iter0, 0.2, False, 0.5, 0.5) @classmethod def onTextviewKeypress(cls, textview, event, widgets): if event.get_state() & Gdk.ModifierType.CONTROL_MASK: if event.keyval in (ord("f"), ord("F")): widgets["findbar"].props.visible = not widgets["findbar"].props.visible if widgets["findbar"].props.visible: signal = widgets["searchEntry"].connect_after( "draw", lambda w, e: w.grab_focus() or widgets["searchEntry"].disconnect(signal), ) @classmethod def onFindbarKeypress(cls, findbar, event): if Gdk.keyval_name(event.keyval) == "Escape": findbar.props.visible = False ################################################################################ # Add early messages and connect for new # ################################################################################ InformationWindow._init() def addMessage(emitter, message): task, timestamp, message, type = message InformationWindow.newMessage(task, timestamp, message, type) for message in logemitter.messages: addMessage(logemitter, message) logemitter.messages = None logemitter.connect("logged", addMessage) ################################################################################ # External functions # ################################################################################ destroy_funcs = [] def add_destroy_notify(func): destroy_funcs.append(func) def _destroy_notify(widget, *args): [func() for func in destroy_funcs] return True InformationWindow.window.connect("delete-event", _destroy_notify) def show(): InformationWindow.show() def hide(): InformationWindow.hide() if __name__ == "__main__": show() InformationWindow.window.connect("delete-event", Gtk.main_quit) Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/MenuItemsDict.py0000644000175100001770000000720114614030313021551 0ustar00runnerdockerfrom gi.repository import GLib from pychess.System import conf from pychess.Utils.const import ACTION_MENU_ITEMS ################################################################################ # Main menubar MenuItem classes to keep track of menu widget states # ################################################################################ class GtkMenuItem: def __init__(self, name, sensitive=False, label=None, tooltip=None): assert isinstance(sensitive, bool) assert label is None or isinstance(label, str) self.name = name self._sensitive = sensitive self._label = label self._tooltip = tooltip @property def sensitive(self): return self._sensitive @sensitive.setter def sensitive(self, sensitive): assert isinstance(sensitive, bool) self._sensitive = sensitive self._set_widget("sensitive", sensitive) @property def label(self): return self._label @label.setter def label(self, label): assert isinstance(label, str) self._label = label self._set_widget("label", label) @property def tooltip(self): return self._tooltip @tooltip.setter def tooltip(self, tooltip): assert isinstance(tooltip, str) self._tooltip = tooltip self._set_widget("tooltip-text", tooltip) def _set_widget(self, prop, value): from . import gamewidget if gamewidget.getWidgets()[self.name].get_property(prop) != value: # print("setting %s property %s to %s.." % (self.name, prop, str(value))) def do_set_menu_item_prop(): gamewidget.getWidgets()[self.name].set_property(prop, value) GLib.idle_add(do_set_menu_item_prop) # print(" success (%s %s = \"%s\")" % ( # self.name, prop, gamewidget.getWidgets()[self.name].get_property(prop))) def update(self): self._set_widget("sensitive", self._sensitive) if self._label is not None: self._set_widget("label", self._label) if self._tooltip is not None: self._set_widget("tooltip-text", self._tooltip) class GtkMenuToggleButton(GtkMenuItem): def __init__(self, name, sensitive=False, active=False, label=None): assert isinstance(active, bool) GtkMenuItem.__init__(self, name, sensitive, label) self._active = active @property def active(self): return self._active @active.setter def active(self, active): assert isinstance(active, bool) self._active = active self._set_widget("active", active) def update(self): GtkMenuItem.update(self) self._set_widget("active", self._active) class MenuItemsDict(dict): """ :Description: Keeps track of menubar menuitem widgets that need to be managed on a game by game basis. Each menuitem writes through its respective widget state to the GUI if we are encapsulated in the gamewidget that's focused/infront """ ANAL_MENU_ITEMS = ( "analyze_game1", "analyzer_check", "inv_analyzer_check", "ana_combobox", "inv_ana_combobox", ) VIEW_MENU_ITEMS = ("hint_mode", "spy_mode") def __init__(self): dict.__init__(self) for item in ACTION_MENU_ITEMS: dict.__setitem__(self, item, GtkMenuItem(item)) for item in self.ANAL_MENU_ITEMS: dict.__setitem__(self, item, GtkMenuItem(item, sensitive=True)) for item in self.VIEW_MENU_ITEMS: dict.__setitem__( self, item, GtkMenuToggleButton(item, active=conf.get(item)) ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/PieceWidget.py0000755000175100001770000000172114614030313021234 0ustar00runnerdockerfrom gi.repository import Gtk, GObject from pychess.Utils.const import ASEAN_VARIANTS, NORMALCHESS from pychess.gfx import Pieces class PieceWidget(Gtk.DrawingArea): def __init__(self, piece, variant=NORMALCHESS): GObject.GObject.__init__(self) self.connect("draw", self.expose) self.piece = piece self.variant = variant self.asean = variant in ASEAN_VARIANTS def setPiece(self, piece): self.piece = piece def getPiece(self): return self.piece def expose(self, widget, ctx): context = widget.get_window().cairo_create() rect = self.get_allocation() s_min = min(rect.width, rect.height) x_loc = (rect.width - s_min) / 2.0 y_loc = (rect.height - s_min) / 2.0 Pieces.drawPiece( self.piece, context, x_loc, y_loc, s_min, asean=self.asean, variant=self.variant, ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/PromotionDialog.py0000755000175100001770000000600314614030313022147 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.Utils.Piece import Piece from pychess.Utils.const import ( SUICIDECHESS, GIVEAWAYCHESS, SITTUYINCHESS, SCHESS, WHITE, KING, QUEEN, ROOK, BISHOP, KNIGHT, HAWK, ELEPHANT, ) from .PieceWidget import PieceWidget class PromotionDialog: """:Description: A popup dialog that allows you to select form a set of pieces the exchange for a pawn through the promotion rule """ def __init__(self, variant): from .gamewidget import getWidgets self.widgets = getWidgets() self.dialog = self.widgets["promotionDialog"] self.color = None if self.widgets["queenDock"].get_child() is None: self.widgets["queenDock"].add(PieceWidget(Piece(WHITE, QUEEN), variant)) self.widgets["queenDock"].get_child().show() self.widgets["rookDock"].add(PieceWidget(Piece(WHITE, ROOK), variant)) self.widgets["rookDock"].get_child().show() self.widgets["bishopDock"].add(PieceWidget(Piece(WHITE, BISHOP), variant)) self.widgets["bishopDock"].get_child().show() self.widgets["knightDock"].add(PieceWidget(Piece(WHITE, KNIGHT), variant)) self.widgets["knightDock"].get_child().show() self.widgets["kingDock"].add(PieceWidget(Piece(WHITE, KING), variant)) self.widgets["kingDock"].get_child().show() if variant == SCHESS: self.widgets["hawkDock"].add(PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkDock"].get_child().show() self.widgets["elephantDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant) ) self.widgets["elephantDock"].get_child().show() def setColor(self, color, variant): self.widgets["knightDock"].get_child().getPiece().color = color self.widgets["bishopDock"].get_child().getPiece().color = color self.widgets["rookDock"].get_child().getPiece().color = color self.widgets["queenDock"].get_child().getPiece().color = color self.widgets["kingDock"].get_child().getPiece().color = color if variant == SCHESS: self.widgets["hawkDock"].get_child().getPiece().color = color self.widgets["elephantDock"].get_child().getPiece().color = color def runAndHide(self, color, variant): self.setColor(color, variant) if variant != SUICIDECHESS and variant != GIVEAWAYCHESS: self.widgets["button5"].hide() if variant != SCHESS: self.widgets["button6"].hide() self.widgets["button7"].hide() if variant == SITTUYINCHESS: self.widgets["button4"].hide() self.widgets["button3"].hide() self.widgets["button2"].hide() res = self.dialog.run() self.dialog.hide() if res != Gtk.ResponseType.DELETE_EVENT: return [QUEEN, ROOK, BISHOP, KNIGHT, KING, HAWK, ELEPHANT][int(res)] return None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/RecentChooser.py0000644000175100001770000000253114614030313021603 0ustar00runnerdockerfrom urllib.request import urlopen from urllib.parse import unquote from gi.repository import Gtk from pychess.perspectives import perspective_manager class RecentChooserMenu(Gtk.RecentChooserMenu): def __init__(self): Gtk.RecentChooserMenu.__init__(self) def recent_item_activated(self): uri = self.get_current_uri() try: urlopen(unquote(uri)).close() perspective = perspective_manager.get_perspective("database") perspective.open_chessfile(self.get_current_uri()) except OSError: # shomething wrong whit the uri recent_manager.remove_item(uri) self.set_show_tips(True) self.set_sort_type(Gtk.RecentSortType.MRU) self.set_limit(10) self.set_name("recent_menu") file_filter = Gtk.RecentFilter() file_filter.add_mime_type("application/x-chess-pgn") file_filter.add_mime_type("application/x-chess-epd") file_filter.add_mime_type("application/x-chess-fen") file_filter.add_pattern("*.pgn") file_filter.add_pattern("*.epd") file_filter.add_pattern("*.fen") self.set_filter(file_filter) self.connect("item-activated", recent_item_activated) recent_manager = Gtk.RecentManager.get_default() recent_menu = RecentChooserMenu() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/SpotGraph.py0000755000175100001770000004723714614030313020766 0ustar00runnerdockerimport math from gi.repository import GObject, Gtk, Gdk, Pango, PangoCairo import cairo # ceil = lambda f: int(math.ceil(f)) def ceil(f): return int(math.ceil(f)) line = 10 curve = 60 dotSmall = 14 dotLarge = 24 lineprc = 1 / 7.0 hpadding = 5 vpadding = 3 class SpotGraph(Gtk.EventBox): __gsignals__ = {"spotClicked": (GObject.SignalFlags.RUN_FIRST, None, (str,))} def __init__(self): GObject.GObject.__init__(self) self.connect("draw", self.expose) # rgb 85,152,215 = Rated # rgb 115,210,22 = Unrated # rgb 189,47,26 = Computer self.typeColors = [ [[85, 152, 215], [59, 106, 151]], [[115, 210, 22], [78, 154, 6]], [[85, 152, 215], [189, 47, 26]], [[115, 210, 22], [189, 47, 26]], ] for type in self.typeColors: for color in type: color[0] = color[0] / 255.0 color[1] = color[1] / 255.0 color[2] = color[2] / 255.0 self.add_events( Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK ) self.state = 0 self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.motion_notify) self.connect("size-allocate", self.size_allocate) self.cords = [] self.hovered = None self.pressed = False self.spots = {} self.spotQueue = [] # For spots added prior to widget allocation self.xmarks = [] self.ymarks = [] self.set_visible_window(False) ############################################################################ # Drawing # ############################################################################ def redraw_canvas(self, prect=None): if self.get_window(): if not prect: alloc = self.get_allocation() prect = (0, 0, alloc.width, alloc.height) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = prect self.get_window().invalidate_rect(rect, True) self.get_window().process_updates(True) def expose(self, widget, ctx): context = widget.get_window().cairo_create() self.draw(context) return False def draw(self, context): alloc = self.get_allocation() width = alloc.width height = alloc.height # ------------------------------------------------------ Paint side ruler context.move_to(alloc.x + line, alloc.y + line) context.rel_line_to(0, height - line * 2 - curve) context.rel_curve_to(0, curve, 0, curve, curve, curve) context.rel_line_to(width - line * 2 - curve, 0) style_ctxt = self.get_style_context() dark_prelight = style_ctxt.lookup_color("p_dark_prelight")[1] fg_prelight = style_ctxt.lookup_color("p_fg_prelight")[1] bg_prelight = style_ctxt.lookup_color("p_bg_prelight")[1] context.set_line_width(line) context.set_line_cap(cairo.LINE_CAP_ROUND) # state = self.state == Gtk.StateType.NORMAL and Gtk.StateType.PRELIGHT or self.state context.set_source_rgba( dark_prelight.red, dark_prelight.green, dark_prelight.blue, dark_prelight.alpha, ) context.stroke() # ------------------------------------------------ Paint horizontal marks for x_loc, title in self.xmarks: context.set_source_rgba( fg_prelight.red, fg_prelight.green, fg_prelight.blue, fg_prelight.alpha ) context.set_font_size(12) x_loc, y_loc = self.prcToPix(x_loc, 1) context.move_to(x_loc + line / 2.0, y_loc - line / 2.0) context.rotate(-math.pi / 2) context.show_text(title) context.rotate(math.pi / 2) context.set_source_rgba( bg_prelight.red, bg_prelight.green, bg_prelight.blue, bg_prelight.alpha ) context.move_to(x_loc - line / 2.0, y_loc) context.rel_curve_to(6, 0, 6, line, 6, line) context.rel_curve_to(0, -line, 6, -line, 6, -line) context.close_path() context.fill() # -------------------------------------------------- Paint vertical marks for y_loc, title in self.ymarks: context.set_source_rgba( fg_prelight.red, fg_prelight.green, fg_prelight.blue, fg_prelight.alpha ) context.set_font_size(12) x_loc, y_loc = self.prcToPix(0, y_loc) context.move_to(x_loc + line / 2.0, y_loc + line / 2.0) context.show_text(title) context.set_source_rgba( bg_prelight.red, bg_prelight.green, bg_prelight.blue, bg_prelight.alpha ) context.move_to(x_loc, y_loc - line / 2.0) context.rel_curve_to(0, 6, -line, 6, -line, 6) context.rel_curve_to(line, 0, line, 6, line, 6) context.close_path() context.fill() # ----------------------------------------------------------- Paint spots context.set_line_width(dotSmall * lineprc) for x_loc, y_loc, col_type, name, text in self.spots.values(): context.set_source_rgb(*self.typeColors[col_type][0]) if self.hovered and name == self.hovered[3]: continue x_loc, y_loc = self.prcToPix(x_loc, y_loc) context.arc(x_loc, y_loc, dotSmall / (1 + lineprc) / 2.0, 0, 2 * math.pi) context.fill_preserve() context.set_source_rgb(*self.typeColors[col_type][1]) context.stroke() # --------------------------------------------------- Paint hovered spots context.set_line_width(dotLarge * lineprc) if self.hovered: x_loc, y_loc, col_type, name, text = self.hovered x_loc, y_loc = self.prcToPix(x_loc, y_loc) if not self.pressed: context.set_source_rgb(*self.typeColors[col_type][0]) else: context.set_source_rgb(*self.typeColors[col_type][1]) context.arc(x_loc, y_loc, dotLarge / (1 + lineprc) / 2.0, 0, 2 * math.pi) context.fill_preserve() context.set_source_rgb(*self.typeColors[col_type][1]) context.stroke() x_loc, y_loc, width, height = self.getTextBounds(self.hovered) style_ctxt = self.get_style_context() style_ctxt.save() style_ctxt.add_class(Gtk.STYLE_CLASS_NOTEBOOK) Gtk.render_background( style_ctxt, context, int(x_loc - hpadding), int(y_loc - vpadding), ceil(width + hpadding * 2), ceil(height + vpadding * 2), ) Gtk.render_frame( style_ctxt, context, int(x_loc - hpadding), int(y_loc - vpadding), ceil(width + hpadding * 2), ceil(height + vpadding * 2), ) style_ctxt.restore() context.move_to(x_loc, y_loc) context.set_source_rgba( fg_prelight.red, fg_prelight.green, fg_prelight.blue, fg_prelight.alpha ) PangoCairo.show_layout(context, self.create_pango_layout(text)) ############################################################################ # Events # ############################################################################ def button_press(self, widget, event): alloc = self.get_allocation() self.cords = [event.x + alloc.x, event.y + alloc.y] self.pressed = True if self.hovered: self.redraw_canvas(self.getBounds(self.hovered)) def button_release(self, widget, event): alloc = self.get_allocation() self.cords = [event.x + alloc.x, event.y + alloc.y] self.pressed = False if self.hovered: self.redraw_canvas(self.getBounds(self.hovered)) if event.button == 1 and self.pointIsOnSpot( event.x + alloc.x, event.y + alloc.y, self.hovered ): self.emit("spotClicked", self.hovered[3]) def motion_notify(self, widget, event): alloc = self.get_allocation() self.cords = [event.x + alloc.x, event.y + alloc.y] spot = self.getSpotAtPoint(*self.cords) if self.hovered and spot == self.hovered: return if self.hovered: bounds = self.getBounds(self.hovered) self.hovered = None self.redraw_canvas(bounds) if spot: self.hovered = spot self.redraw_canvas(self.getBounds(self.hovered)) def size_allocate(self, widget, allocation): assert self.get_allocation().width > 1 for spot in self.spotQueue: self.addSpot(*spot) del self.spotQueue[:] ############################################################################ # Interaction # ############################################################################ def addSpot(self, name, text, x0, y0, colour_type=0): """x and y are in % from 0 to 1""" assert colour_type in range(len(self.typeColors)) if self.get_allocation().width <= 1: self.spotQueue.append((name, text, x0, y0, colour_type)) return x_loc1, y_loc1 = self.getNearestFreeNeighbourHexigon(x0, 1 - y0) spot = (x_loc1, y_loc1, colour_type, name, text) self.spots[name] = spot if ( not self.hovered and self.cords and self.pointIsOnSpot(self.cords[0], self.cords[1], spot) ): self.hovered = spot self.redraw_canvas(self.getBounds(spot)) def removeSpot(self, name): if name not in self.spots: return spot = self.spots.pop(name) bounds = self.getBounds(spot) if spot == self.hovered: self.hovered = None self.redraw_canvas(bounds) def clearSpots(self): self.hovered = None self.spots.clear() self.redraw_canvas() def addXMark(self, x, title): self.xmarks.append((x, title)) def addYMark(self, y, title): self.ymarks.append((1 - y, title)) ############################################################################ # Internal stuff # ############################################################################ def getTextBounds(self, spot): x_loc, y_loc, type, name, text = spot x_loc, y_loc = self.prcToPix(x_loc, y_loc) alloc = self.get_allocation() width = alloc.width # height = alloc.height extends = self.create_pango_layout(text).get_extents() scale = float(Pango.SCALE) x_bearing, y_bearing, twidth, theight = [ extends[1].x / scale, extends[1].y / scale, extends[1].width / scale, extends[1].height / scale, ] tx_loc = x_loc - x_bearing + dotLarge / 2.0 ty_loc = y_loc - y_bearing - theight - dotLarge / 2.0 if ( tx_loc + twidth > width and x_loc - x_bearing - twidth - dotLarge / 2.0 > alloc.x ): tx_loc = x_loc - x_bearing - twidth - dotLarge / 2.0 if ty_loc < alloc.y: ty_loc = y_loc - y_bearing + dotLarge / 2.0 return (tx_loc, ty_loc, twidth, theight) def join(self, r0, r1): x_loc1 = min(r0[0], r1[0]) x_loc2 = max(r0[0] + r0[2], r1[0] + r1[2]) y_loc1 = min(r0[1], r1[1]) y_loc2 = max(r0[1] + r0[3], r1[1] + r1[3]) return (x_loc1, y_loc1, x_loc2 - x_loc1, y_loc2 - y_loc1) def getBounds(self, spot): ( x_loc, y_loc, ) = ( spot[0], spot[1], ) x_loc, y_loc = self.prcToPix(x_loc, y_loc) if spot == self.hovered: size = dotLarge else: size = dotSmall bounds = (x_loc - size / 2.0 - 1, y_loc - size / 2.0 - 1, size + 2, size + 2) if spot == self.hovered: x_loc, y_loc, width, height = self.getTextBounds(spot) tbounds = ( x_loc - hpadding, y_loc - vpadding, width + hpadding * 2 + 1, height + vpadding * 2 + 1, ) return self.join(bounds, tbounds) return bounds def getNearestFreeNeighbourHexigon(self, xorg, yorg): """This method performs an hexigon search for an empty place to put a new dot.""" x_loc, y_loc = self.prcToPix(xorg, yorg) # Start by testing current spot if self.isEmpty(x_loc, y_loc): return xorg, yorg directions = [ (math.cos((i + 2) * math.pi / 3), math.sin((i + 2) * math.pi / 3)) for i in range(6) ] level = 1 while True: x_loc += dotSmall for delta_x, delta_y in directions: for i in range(level): if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) x_loc += delta_x * dotSmall y_loc += delta_y * dotSmall level += 1 def getNearestFreeNeighbourArchi(self, xorg, yorg): """This method performs an archimedes-spircal search for an empty place to put a new dot. http://en.wikipedia.org/wiki/Archimedean_spiral""" xorg, yorg = self.prcToPix(xorg, yorg) # Start by testing current spot if self.isEmpty(xorg, yorg): return self.pixToPrc(xorg, yorg) radius = 0 while True: # This is an approx to the equation # cos((radius-s)/(2pi)) = (radius^2+s^2-1)/(2*radius*s) # which gives the next point on the spiral 1 away. radius = ( 4 * math.pi**3 * radius + radius**2 + math.sqrt(16 * math.pi**6 + 8 * math.pi**3 * radius + radius**4) ) / (4 * math.pi**3 + 2 * radius) x_loc = radius * math.cos(radius) / (4 * math.pi) * dotSmall + xorg y_loc = radius * math.sin(radius) / (4 * math.pi) * dotSmall + yorg if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) def getNearestFreeNeighbourSquare(self, xorg, yorg): """This method performs a spircal search for an empty square to put a new dot.""" up = 2 right = 1 down = 1 left = 2 x_loc, y_loc = self.prcToPix(xorg, yorg) # Start by testing current spot if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) while True: for i in range(right): x_loc += dotSmall if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) for i in range(down): y_loc += dotSmall if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) for i in range(left): x_loc -= dotSmall if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) for i in range(up): y_loc -= dotSmall if self.isEmpty(x_loc, y_loc): return self.pixToPrc(x_loc, y_loc) # Grow spiral bounds right += 2 down += 2 left += 2 up += 2 def isEmpty(self, x0, y0): """Returns true if a spot placed on (x, y) is inside the graph and not intersecting with other spots. x and y should be in pixels, not percent""" # Make sure spiral search don't put dots outside the graph x_loc, y_loc = self.prcToPix(0, 0) width, height = self.prcToPix(1, 1) if not x_loc <= x0 <= width or not y_loc <= y0 <= height: return False # Tests if the spot intersects any other spots for x_loc1, y_loc1, type, name, text in self.spots.values(): x_loc1, y_loc1 = self.prcToPix(x_loc1, y_loc1) if (x_loc1 - x0) ** 2 + (y_loc1 - y0) ** 2 < dotSmall**2 - 0.1: return False return True def pointIsOnSpot(self, x0, y0, spot): """Returns true if (x, y) is inside the spot 'spot'. The size of the spot is determined based on its hoverness. x and y should be in pixels, not percent""" if spot == self.hovered: size = dotLarge else: size = dotSmall x_loc1, y_loc1, type, name, text = spot x_loc1, y_loc1 = self.prcToPix(x_loc1, y_loc1) if (x_loc1 - x0) ** 2 + (y_loc1 - y0) ** 2 <= (size / 2.0) ** 2: return True return False def getSpotAtPoint(self, x, y): """Returns the spot embrace (x, y) if any. Otherwise it returns None. x and y should be in pixels, not percent""" if self.hovered and self.pointIsOnSpot(x, y, self.hovered): return self.hovered for spot in self.spots.values(): if spot == self.hovered: continue if self.pointIsOnSpot(x, y, spot): return spot return None def prcToPix(self, x, y): """Translates from 0-1 cords to real world cords""" alloc = self.get_allocation() return ( x * (alloc.width - line * 1.5 - dotLarge * 0.5) + line * 1.5 + alloc.x, y * (alloc.height - line * 1.5 - dotLarge * 0.5) + dotLarge * 0.5 + alloc.y, ) def pixToPrc(self, x, y): """Translates from real world cords to 0-1 cords""" alloc = self.get_allocation() return (x - line * 1.5 - alloc.x) / ( alloc.width - line * 1.5 - dotLarge * 0.5 ), (y - dotLarge * 0.5 - alloc.y) / (alloc.height - line * 1.5 - dotLarge * 0.5) if __name__ == "__main__": window = Gtk.Window() style_ctx = window.get_style_context() data = "@define-color p_bg_color #ededed; \ @define-color p_light_color #ffffff; \ @define-color p_dark_color #a6a6a6; \ @define-color p_dark_prelight #a9a9a9; \ @define-color p_fg_prelight #313739; \ @define-color p_bg_prelight #ededed; \ @define-color p_bg_active #d6d6d6;" provider = Gtk.CssProvider.new() provider.load_from_data(data) style_ctx.add_provider_for_screen( Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION ) note_book = Gtk.Notebook() window.add(note_book) v_box = Gtk.VBox() note_book.append_page(v_box, None) spot_graph = SpotGraph() spot_graph.addXMark(0.5, "Center") spot_graph.addYMark(0.5, "Center") v_box.pack_start(spot_graph, True, True, 0) button = Gtk.Button("New Spot") def callback(button): if not hasattr(button, "nextnum"): button.nextnum = 0 else: button.nextnum += 1 spot_graph.addSpot(str(button.nextnum), "Blablabla", 1, 1, 0) button.connect("clicked", callback) v_box.pack_start(button, False, True, 0) window.connect("delete-event", Gtk.main_quit) window.show_all() window.resize(400, 400) Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/TaskerManager.py0000644000175100001770000004625114614030313021573 0ustar00runnerdockerimport asyncio import math import random from os.path import basename from urllib.request import urlopen from urllib.parse import unquote from gi.repository import Gtk, GObject, Pango from pychess.Players.Human import Human from pychess.Players.engineNest import discoverer from pychess.System import uistuff, conf from pychess.Utils.GameModel import GameModel from pychess.Utils.IconLoader import get_pixbuf from pychess.Utils.TimeModel import TimeModel from pychess.Utils.const import ( LOCAL, ARTIFICIAL, WHITE, BLACK, NORMALCHESS, LECTURE, LESSON, PUZZLE, ENDGAME, ) from pychess.Variants import variants from pychess.ic import ICLogon from pychess.widgets import newGameDialog from pychess.widgets.Background import giveBackground from pychess.widgets.RecentChooser import recent_manager, recent_menu from pychess.perspectives import perspective_manager from pychess.perspectives.games import get_open_dialog from pychess.perspectives.learn.LecturesPanel import LECTURES, start_lecture_from from pychess.perspectives.learn.EndgamesPanel import ENDGAMES, start_endgame_from from pychess.perspectives.learn.LessonsPanel import LESSONS, start_lesson_from from pychess.perspectives.learn.PuzzlesPanel import PUZZLES, start_puzzle_from class TaskerManager(Gtk.Table): def __init__(self): GObject.GObject.__init__(self) self.border = 20 giveBackground(self) self.connect("draw", self.expose) # self.set_homogeneous(True) def expose(self, widget, ctx): cairo_win = widget.get_window().cairo_create() for widget in self.widgets: x_loc = widget.get_allocation().x y_loc = widget.get_allocation().y width = widget.get_allocation().width height = widget.get_allocation().height cairo_win.move_to(x_loc - self.border, y_loc) cairo_win.curve_to( x_loc - self.border, y_loc - self.border / 2.0, x_loc - self.border / 2.0, y_loc - self.border, x_loc, y_loc - self.border, ) cairo_win.line_to(x_loc + width, y_loc - self.border) cairo_win.curve_to( x_loc + width + self.border / 2.0, y_loc - self.border, x_loc + width + self.border, y_loc - self.border / 2.0, x_loc + width + self.border, y_loc, ) cairo_win.line_to(x_loc + width + self.border, y_loc + height) cairo_win.curve_to( x_loc + width + self.border, y_loc + height + self.border / 2.0, x_loc + width + self.border / 2.0, y_loc + height + self.border, x_loc + width, y_loc + height + self.border, ) cairo_win.line_to(x_loc, y_loc + height + self.border) cairo_win.curve_to( x_loc - self.border / 2.0, y_loc + height + self.border, x_loc - self.border, y_loc + height + self.border / 2.0, x_loc - self.border, y_loc + height, ) style_ctxt = self.get_style_context() bgcolor = style_ctxt.lookup_color("p_bg_color")[1] darkcolor = style_ctxt.lookup_color("p_dark_color")[1] cairo_win.set_source_rgba( bgcolor.red, bgcolor.green, bgcolor.blue, bgcolor.alpha ) cairo_win.fill() cairo_win.rectangle( x_loc - self.border, y_loc + height - 30, width + self.border * 2, 30 ) cairo_win.set_source_rgba( darkcolor.red, darkcolor.green, darkcolor.blue, darkcolor.alpha ) cairo_win.fill() def calcSpacings(self, n): """Will yield ranges like ((.50,.50),) ((.66,.33), (.33,.66)) ((.75,.25), (.50,.50), (.25,.75)) ((.80,.20), (.60,.40), (.40,.60), (.20,.80)) Used to create the centering in the table""" first = next = (n) / float(n + 1) for i in range(n): yield (next, 1 - next) next = first - (1 - next) def on_size_allocate(self, widget, allocation): window = self.get_window() if window is not None: window.invalidate_rect(self.get_allocation(), False) def packTaskers(self, *widgets): self.widgets = widgets for widget in widgets: widget.connect("size-allocate", self.on_size_allocate) root = math.sqrt(len(widgets)) # Calculate number of rows rows = int(math.ceil(root)) # Calculate number of filled out rows rrows = int(math.floor(root)) # Calculate number of cols in filled out rows cols = int(math.ceil(len(widgets) / float(rows))) # Calculate spacings vspac = [s[0] for s in self.calcSpacings(rows)] hspac = [s[0] for s in self.calcSpacings(cols)] # Clear and set up new size for child in self.get_children(): self.remove(child) self.props.n_columns = cols self.props.n_rows = rows # Add filled out rows for row in range(rows): for col in range(cols): widget = widgets[row * cols + col] alignment = Gtk.Alignment.new(hspac[col], vspac[row], 0, 0) alignment.add(widget) self.attach(alignment, col, col + 1, row, row + 1) return # Add last row if rows > rrows: lastrow = Gtk.HBox() # Calculate number of widgets in last row numw = len(widgets) - cols * rrows hspac = [s[0] for s in self.calcSpacings(numw)] for col, widget in enumerate(widgets[-numw:]): alignment = Gtk.Alignment.new(hspac[col], vspac[-1], 0, 0) alignment.add(widget) alignment.set_padding( self.border, self.border, self.border, self.border ) lastrow.pack_start(alignment, True, True, 0) self.attach(lastrow, 0, cols, rrows, rrows + 1) tasker = TaskerManager() tasker_widgets = uistuff.GladeWidgets("taskers.glade") class NewGameTasker(Gtk.Alignment): def __init__(self): GObject.GObject.__init__(self) self.widgets = widgets = tasker_widgets tasker = widgets["newGameTasker"] tasker.unparent() self.add(tasker) startButton = self.widgets["startButton"] startButton.set_name("startButton") combo = Gtk.ComboBox() uistuff.createCombo( combo, [ (get_pixbuf("glade/white.png"), _("White")), (get_pixbuf("glade/black.png"), _("Black")), (get_pixbuf("glade/random.png"), _("Random")), ], ) widgets["colorDock"].add(combo) if combo.get_active() < 0: combo.set_active(0) widgets["yourColorLabel"].set_mnemonic_widget(combo) # We need to wait until after engines have been discovered, to init the # playerCombos. We use connect_after to make sure, that newGameDialog # has also had time to init the constants we share with them. self.playerCombo = Gtk.ComboBox() widgets["opponentDock"].add(self.playerCombo) discoverer.connect_after( "all_engines_discovered", self.__initPlayerCombo, widgets ) widgets["opponentLabel"].set_mnemonic_widget(self.playerCombo) def on_skill_changed(scale): # Just to make sphinx happy... try: pix = newGameDialog.skillToIconLarge[int(scale.get_value())] widgets["skillImage"].set_from_pixbuf(pix) except TypeError: pass widgets["skillSlider"].connect("value-changed", on_skill_changed) on_skill_changed(widgets["skillSlider"]) widgets["startButton"].connect("clicked", self.startClicked) self.widgets["opendialog1"].connect("clicked", self.openDialogClicked) def __initPlayerCombo(self, discoverer, widgets): combo = self.playerCombo uistuff.createCombo(combo, newGameDialog.playerItems[0]) if combo.get_active() < 0: combo.set_active(1) uistuff.keep(self.playerCombo, "newgametasker_playercombo") def on_playerCombobox_changed(widget): widgets["skillSlider"].props.visible = widget.get_active() > 0 combo.connect("changed", on_playerCombobox_changed) uistuff.keep(widgets["skillSlider"], "taskerSkillSlider") widgets["skillSlider"].set_no_show_all(True) on_playerCombobox_changed(self.playerCombo) def openDialogClicked(self, button): newGameDialog.NewGameMode.run() def startClicked(self, button): color = self.widgets["colorDock"].get_child().get_active() if color == 2: color = random.choice([WHITE, BLACK]) opp = self.widgets["opponentDock"].get_child() tree_iter = opp.get_active_iter() if tree_iter is not None: model = opp.get_model() engine = model[tree_iter][1] opponent = self.widgets["opponentDock"].get_child().get_active() difficulty = int(self.widgets["skillSlider"].get_value()) gamemodel = GameModel(TimeModel(5 * 60, 0)) name = conf.get("firstName") player0tup = (LOCAL, Human, (color, name), name) if opponent == 0: name = conf.get("secondName") player1tup = (LOCAL, Human, (1 - color, name), name) else: engine = discoverer.getEngineByName(engine) name = discoverer.getName(engine) player1tup = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, 1 - color, difficulty, variants[NORMALCHESS], 5 * 60, 0), name, ) perspective = perspective_manager.get_perspective("games") if color == WHITE: asyncio.create_task( perspective.generalStart(gamemodel, player0tup, player1tup) ) else: asyncio.create_task( perspective.generalStart(gamemodel, player1tup, player0tup) ) class InternetGameTasker(Gtk.Alignment): def __init__(self): GObject.GObject.__init__(self) self.widgets = tasker_widgets tasker = self.widgets["internetGameTasker"] tasker.unparent() self.add(tasker) if ICLogon.dialog is None: ICLogon.dialog = ICLogon.ICLogon() liststore = Gtk.ListStore(str) liststore.append(["FICS"]) liststore.append(["ICC"]) self.ics_combo = self.widgets["ics_combo"] self.ics_combo.set_model(liststore) renderer_text = Gtk.CellRendererText() self.ics_combo.pack_start(renderer_text, True) self.ics_combo.add_attribute(renderer_text, "text", 0) self.ics_combo.connect("changed", ICLogon.dialog.on_ics_combo_changed) self.ics_combo.set_active(conf.get("ics_combo")) self.widgets["connectButton"].connect("clicked", self.connectClicked) self.widgets["opendialog2"].connect("clicked", self.openDialogClicked) big_start = get_pixbuf("glade/internet.png") self.widgets["startIcon"].set_from_pixbuf(big_start) uistuff.keep(self.widgets["ics_combo"], "ics_combo") uistuff.keep(self.widgets["autoLogin"], "autoLogin") def openDialogClicked(self, button): ICLogon.run() def connectClicked(self, button): ICLogon.run() if not ICLogon.dialog.connection: ICLogon.dialog.widgets["connectButton"].clicked() class LearnTasker(Gtk.Alignment): def __init__(self): GObject.GObject.__init__(self) self.widgets = tasker_widgets tasker = self.widgets["learnTasker"] tasker.unparent() self.add(tasker) startButton = self.widgets["learnButton"] startButton.set_name("learnButton") categorystore = Gtk.ListStore(int, str) learn_mapping = { LECTURE: (_("Lectures"), LECTURES), LESSON: (_("Lessons"), LESSONS), PUZZLE: (_("Puzzles"), PUZZLES), ENDGAME: (_("Endgames"), ENDGAMES), } for key, value in learn_mapping.items(): categorystore.append([key, value[0]]) self.category_combo = self.widgets["category_combo"] self.category_combo.set_model(categorystore) renderer = Gtk.CellRendererText() self.category_combo.pack_start(renderer, True) self.category_combo.add_attribute(renderer, "text", 1) self.learnstore = Gtk.ListStore(str, str) self.learn_combo = self.widgets["learn_combo"] self.learn_combo.set_model(self.learnstore) renderer_text = Gtk.CellRendererText() renderer_text.set_property("width-chars", 30) renderer_text.set_property("ellipsize", Pango.EllipsizeMode.END) self.learn_combo.pack_start(renderer_text, True) self.learn_combo.add_attribute(renderer_text, "text", 1) self.learn_combo.set_active(0) def on_category_changed(combo): tree_iter = combo.get_active_iter() if tree_iter is None: return else: model = combo.get_model() self.category = model[tree_iter][0] self.learnstore.clear() if self.category == LECTURE: for file_name, title, author in LECTURES: self.learnstore.append([file_name, title]) elif self.category == LESSON: for file_name, title, author in LESSONS: self.learnstore.append([file_name, title]) elif self.category == PUZZLE: for file_name, title, author in PUZZLES: self.learnstore.append([file_name, title]) elif self.category == ENDGAME: for pieces, title in ENDGAMES: self.learnstore.append([pieces, title]) learn = conf.get("learncombo%s" % self.category) self.learn_combo.set_active(learn) def on_learn_changed(combo): tree_iter = combo.get_active_iter() if tree_iter is None: return else: model = combo.get_model() newlearn = model.get_path(tree_iter)[0] conf.set("learncombo%s" % self.category, newlearn) self.learn_combo.connect("changed", on_learn_changed) self.category_combo.connect("changed", on_category_changed) self.category = conf.get("categorycombo") self.category_combo.set_active(self.category) dictionary = get_pixbuf("glade/dictionary.png") self.widgets["dictionaryIcon"].set_from_pixbuf(dictionary) uistuff.keep(self.widgets["category_combo"], "categorycombo") self.widgets["opendialog4"].connect("clicked", self.openDialogClicked) self.widgets["learnButton"].connect("clicked", self.learnClicked) def openDialogClicked(self, button): perspective = perspective_manager.get_perspective("learn") perspective.activate() def learnClicked(self, button): perspective = perspective_manager.get_perspective("learn") perspective.activate() tree_iter = self.learn_combo.get_active_iter() if tree_iter is None: return else: model = self.learn_combo.get_model() source = model[tree_iter][0] if self.category == LECTURE: start_lecture_from(source) elif self.category == LESSON: start_lesson_from(source) elif self.category == PUZZLE: start_puzzle_from(source) elif self.category == ENDGAME: start_endgame_from(source) class DatabaseTasker(Gtk.Alignment): def __init__(self): GObject.GObject.__init__(self) self.widgets = tasker_widgets tasker = self.widgets["databaseTasker"] tasker.unparent() self.add(tasker) startButton = self.widgets["openButton"] startButton.set_name("openButton") liststore = Gtk.ListStore(str, str) self.recent_combo = self.widgets["recent_combo"] self.recent_combo.set_model(liststore) renderer_text = Gtk.CellRendererText() renderer_text.set_property("width-chars", 30) renderer_text.set_property("ellipsize", Pango.EllipsizeMode.END) self.recent_combo.pack_start(renderer_text, True) self.recent_combo.add_attribute(renderer_text, "text", 1) self.on_recent_menu_changed(recent_manager, liststore) recent_manager.connect("changed", self.on_recent_menu_changed, liststore) openimage = get_pixbuf("glade/open48.png") self.widgets["openImage"].set_from_pixbuf(openimage) self.widgets["opendialog3"].connect("clicked", self.openDialogClicked) self.widgets["openButton"].connect("clicked", self.openClicked) def on_recent_menu_changed(self, manager, liststore): liststore.clear() # Just to make sphinx happy... try: for uri in recent_menu.get_uris(): liststore.append( ( uri, basename(unquote(uri)), ) ) except TypeError: pass self.recent_combo.set_active(0) def openDialogClicked(self, button): dialog = get_open_dialog() response = dialog.run() if response == Gtk.ResponseType.OK: filenames = dialog.get_filenames() else: filenames = None dialog.destroy() if filenames is not None: for filename in filenames: if filename.lower().endswith(".fen"): newGameDialog.loadFileAndRun(filename) else: perspective = perspective_manager.get_perspective("database") perspective.open_chessfile(filename) def openClicked(self, button): if self.widgets["createNew"].get_active(): perspective = perspective_manager.get_perspective("database") perspective.create_database() else: tree_iter = self.recent_combo.get_active_iter() if tree_iter is None: return else: model = self.recent_combo.get_model() uri = model[tree_iter][0] try: urlopen(unquote(uri)).close() perspective = perspective_manager.get_perspective("database") perspective.open_chessfile(unquote(uri)) recent_manager.add_item(uri) except OSError: # shomething wrong whit the uri recent_manager.remove_item(uri) new_game_tasker, internet_game_tasker, database_tasker, learn_tasker = ( NewGameTasker(), InternetGameTasker(), DatabaseTasker(), LearnTasker(), ) tasker.packTaskers(new_game_tasker, database_tasker, internet_game_tasker, learn_tasker) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/ViewsPanel.py0000644000175100001770000001071714614030313021122 0ustar00runnerdockerimport re from gi.repository import Gtk, GObject from pychess.widgets.InfoPanel import Panel TYPE_PERSONAL, TYPE_CHANNEL, TYPE_GUEST, TYPE_ADMIN, TYPE_COMP, TYPE_BLINDFOLD = range( 6 ) def get_playername(playername): re_m = re.match(r"(\w+)\W*", playername) return re_m.groups()[0] class ViewsPanel(Gtk.Notebook, Panel): """:Description: This panel is used to display the main chat text for each of the channel or private communication """ __gsignals__ = { "channel_content_Changed": (GObject.SignalFlags.RUN_FIRST, None, (str, int)) } def __init__(self, connection): GObject.GObject.__init__(self) self.set_show_tabs(False) self.set_show_border(False) self.id2Widget = {} self.connection = connection label = Gtk.Label() label.set_markup("%s" % _("You have opened no conversations yet")) label.props.xalign = 0.5 label.props.yalign = 0.381966011 label.props.justify = Gtk.Justification.CENTER label.props.wrap = True label.props.width_request = 300 self.append_page(label, None) # When a person addresses us directly, ChannelsPanel will emit an # additem event and we add a new view. This however means that the first # message the user sends isn't registred by our privateMessage handler. # Therefore we save all messages sent by this hook, and when later we # add new items, we test if anything was already received self.messageBuffer = {} def globalPersonalMessage(cm, name, title, isadmin, text): if name not in self.messageBuffer: self.messageBuffer[name] = [] self.messageBuffer[name].append((title, isadmin, text)) self.connection.cm.connect("privateMessage", globalPersonalMessage) def addItem(self, grp_id, name, grp_type, chat_view): chat_view.connect("messageTyped", self.onMessageTyped, grp_id, name, grp_type) self.connection.cm.connect( "channelMessage", self.onChannelMessage, grp_id, chat_view ) self.connection.cm.connect( "privateMessage", self.onPersonMessage, get_playername(name), chat_view ) if grp_type == TYPE_CHANNEL: self.connection.cm.connect( "channelLog", self.onChannelLog, grp_id, chat_view ) self.connection.cm.getChannelLog(grp_id) if not self.connection.cm.mayTellChannel(grp_id): chat_view.disable(_("Only registered users may talk to this channel")) elif grp_type in ( TYPE_PERSONAL, TYPE_COMP, TYPE_GUEST, TYPE_ADMIN, TYPE_BLINDFOLD, ): if name in self.messageBuffer: for title, isadmin, messagetext in self.messageBuffer[name]: chat_view.addMessage(name, messagetext) del self.messageBuffer[name] self.addPage(chat_view, grp_id) def removeItem(self, grp_id): self.removePage(grp_id) def selectItem(self, grp_id): child = self.id2Widget[grp_id] self.set_current_page(self.page_num(child)) def onChannelLog(self, cm, channel, time, handle, text, name_, chat_view): if channel.lower() == name_.lower(): chat_view.insertLogMessage(time, handle, text) def onMessageTyped(self, chat_view, text, grp_id, name, grp_type): if grp_type == TYPE_CHANNEL: self.connection.cm.tellChannel(grp_id, text) elif grp_type == TYPE_PERSONAL: self.connection.cm.tellPlayer(get_playername(name), text) chat_view.addMessage(self.connection.getUsername(), text) def onPersonMessage(self, cm, name, title, isadmin, text, name_, chat_view): if name.lower() == name_.lower(): chat_view.addMessage(name, text) self.emit("channel_content_Changed", name_, TYPE_PERSONAL) def onChannelMessage( self, cm, name, isadmin, isme, channel, text, name_, chat_view ): if channel.lower() == name_.lower() and not isme: chat_view.addMessage(name, text) self.emit("channel_content_Changed", channel, TYPE_CHANNEL) def addPage(self, widget, grp_id): self.id2Widget[grp_id] = widget self.append_page(widget, None) widget.show_all() def removePage(self, grp_id): child = self.id2Widget.pop(grp_id) self.remove_page(self.page_num(child)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/WebKitBrowser.py0000644000175100001770000000573214614030313021577 0ustar00runnerdockerfrom gi.repository import Gtk, WebKit def open_link(label, url): """Gtk.Label() can use this like label.connect("activate-link", open_link)""" WebKitBrowser(url) return True class WebKitBrowser: def __init__(self, url): from pychess.System.uistuff import keepWindowSize self.window = Gtk.Window() keepWindowSize("webkitbrowser", self.window, (800, 600)) self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.window.add(self.vbox) self.box = Gtk.Box() self.toolbar = Gtk.Toolbar() self.box.pack_start(self.toolbar, False, False, 0) self.go_back_button = Gtk.ToolButton(stock_id=Gtk.STOCK_GO_BACK) self.toolbar.insert(self.go_back_button, -1) self.go_forward_button = Gtk.ToolButton(stock_id=Gtk.STOCK_GO_FORWARD) self.toolbar.insert(self.go_forward_button, -1) self.go_refresh_button = Gtk.ToolButton(stock_id=Gtk.STOCK_REFRESH) self.toolbar.insert(self.go_refresh_button, -1) self.url = Gtk.Entry() self.box.pack_start(self.url, True, True, 0) self.search_entry = Gtk.SearchEntry() self.box.pack_start(self.search_entry, False, False, 0) self.vbox.pack_start(self.box, False, False, 0) self.view = WebKit.WebView() self.scrolled_window = Gtk.ScrolledWindow() self.scrolled_window.add(self.view) self.vbox.pack_start(self.scrolled_window, True, True, 0) self.window.show_all() self.view.connect("load-committed", self.check_buttons) self.view.connect("title-changed", self.change_title) self.url.connect("activate", self.go) self.search_entry.connect("activate", self.search) self.go_back_button.connect("clicked", self.go_back) self.go_forward_button.connect("clicked", self.go_forward) self.go_refresh_button.connect("clicked", self.refresh) self.view.open(url) self.view.show() def go(self, widget): link = self.url.get_text() if link.startswith("http://"): self.view.open(link) else: self.view.open("http://" + link) self.view.show() def search(self, widget): text = self.search_entry.get_text() text = text.replace(" ", "+") self.url.set_text("http://www.google.com/search?q=" + text) self.search_entry.set_text("") self.go(self) def check_buttons(self, widget, data): uri = widget.get_main_frame().get_uri() self.url.set_text(uri) self.go_back_button.set_sensitive(self.view.can_go_back()) self.go_forward_button.set_sensitive(self.view.can_go_forward()) def change_title(self, widget, data, arg): title = widget.get_main_frame().get_title() self.window.set_title(title) def go_back(self, widget): self.view.go_back() def go_forward(self, widget): self.view.go_forward() def refresh(self, widget): self.view.reload() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/__init__.py0000755000175100001770000000536414614030313020611 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.Utils.IconLoader import get_pixbuf, load_icon # from pychess.widgets.WebKitBrowser import open_link main_window = None gtk_close = load_icon(16, "gtk-close", "window-close") def mainwindow(): return main_window def createImage(pixbuf): image = Gtk.Image() image.set_from_pixbuf(pixbuf) return image def createAlignment(top, right, bottom, left): align = Gtk.Alignment.new(0.5, 0.5, 1, 1) align.set_property("top-padding", top) align.set_property("right-padding", right) align.set_property("bottom-padding", bottom) align.set_property("left-padding", left) return align def new_notebook(name=None): def customGetTabLabelText(child): return name notebook = Gtk.Notebook() if name is not None: notebook.set_name(name) notebook.get_tab_label_text = customGetTabLabelText notebook.set_show_tabs(False) notebook.set_show_border(False) return notebook def dock_panel_tab(title, desc, icon, button=None): box = Gtk.Box() pixbuf = get_pixbuf(icon, 16) image = Gtk.Image.new_from_pixbuf(pixbuf) label = Gtk.Label(label=title) box.set_tooltip_text(desc) box.pack_start(image, False, True, 0) box.pack_start(label, False, True, 0) if button is not None: box.pack_start(button, False, True, 0) box.set_spacing(2) box.show_all() return box def insert_formatted(text_view, iter, text, tag=None): def insert(text): if tag is not None: tb.insert_with_tags_by_name(iter, text, tag) else: tb.insert(iter, text) tb = text_view.get_buffer() # I know this is far from perfect but I don't want to use re for this if "://" in text or "www" in text: parts = text.split() position = 0 for i, part in enumerate(parts): if "://" in part or "www" in part: if part.startswith('"'): part = part[1:] endpos = part.find('"') if endpos != -1: part = part[:endpos] part0 = ( "http://web.archive.org/%s" % part if part.startswith("http://www.endgame.nl") else part ) parts[i] = f'{part}' position = i break insert("%s " % " ".join(parts[:position])) label = Gtk.Label() label.set_markup(parts[position]) # label.connect("activate-link", open_link) label.show() anchor = tb.create_child_anchor(iter) text_view.add_child_at_anchor(label, anchor) insert(" %s" % " ".join(parts[position + 1 :])) else: insert(text) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/analyzegameDialog.py0000644000175100001770000002631414614030313022462 0ustar00runnerdockerimport asyncio from gi.repository import Gtk from pychess.Utils.const import HINT, SPY, BLACK, WHITE from pychess.System import conf from pychess.System import uistuff from pychess.System.Log import log from pychess.Utils import prettyPrintScore from pychess.Utils.Move import listToMoves, parseAny from pychess.Utils.lutils.lmove import ParsingError from pychess.Players.engineNest import discoverer from pychess.widgets.preferencesDialog import anal_combo_get_value, anal_combo_set_value from pychess.widgets.InfoBar import InfoBarMessage, InfoBarMessageButton from pychess.widgets import mainwindow from pychess.widgets import InfoBar from pychess.perspectives import perspective_manager class AnalyzeGameDialog: def __init__(self): self.widgets = uistuff.GladeWidgets("analyze_game.glade") self.widgets["analyze_game"].set_transient_for(mainwindow()) self.stop_event = asyncio.Event() uistuff.keep(self.widgets["fromCurrent"], "fromCurrent") uistuff.keep(self.widgets["shouldBlack"], "shouldBlack") uistuff.keep(self.widgets["shouldWhite"], "shouldWhite") uistuff.keep(self.widgets["threatPV"], "threatPV") uistuff.keep(self.widgets["showEval"], "showEval") uistuff.keep(self.widgets["showBlunder"], "showBlunder") uistuff.keep(self.widgets["max_analysis_spin"], "max_analysis_spin") uistuff.keep( self.widgets["variation_threshold_spin"], "variation_threshold_spin" ) # Analyzing engines uistuff.createCombo(self.widgets["ana_combobox"], name="ana_combobox") from pychess.widgets import newGameDialog def update_analyzers_store(discoverer): data = [(item[0], item[1]) for item in newGameDialog.analyzerItems] uistuff.updateCombo(self.widgets["ana_combobox"], data) discoverer.connect_after("all_engines_discovered", update_analyzers_store) update_analyzers_store(discoverer) uistuff.keep( self.widgets["ana_combobox"], "ana_combobox", anal_combo_get_value, lambda combobox, value: anal_combo_set_value( combobox, value, "hint_mode", HINT ), ) def hide_window(button, *args): self.widgets["analyze_game"].destroy() def abort(): self.analyzer.pause() if self.threat_PV: self.inv_analyzer.pause() self.stop_event.set() self.widgets["analyze_game"].destroy() def run_analyze(button, *args): async def coro(): persp = perspective_manager.get_perspective("games") gmwidg = persp.cur_gmwidg() gamemodel = gmwidg.gamemodel old_check_value = conf.get("analyzer_check") conf.set("analyzer_check", True) if HINT not in gamemodel.spectators: try: await asyncio.wait_for(gamemodel.start_analyzer(HINT), 5.0) except asyncio.TimeoutError: log.error("Got timeout error while starting hint analyzer") return except Exception: log.error("Unknown error while starting hint analyzer") return self.analyzer = gamemodel.spectators[HINT] gmwidg.menuitems["hint_mode"].active = True self.threat_PV = conf.get("ThreatPV") if self.threat_PV: old_inv_check_value = conf.get("inv_analyzer_check") conf.set("inv_analyzer_check", True) if SPY not in gamemodel.spectators: try: await asyncio.wait_for(gamemodel.start_analyzer(SPY), 5.0) except asyncio.TimeoutError: log.error("Got timeout error while starting spy analyzer") return except Exception: log.error("Unknown error while starting spy analyzer") return inv_analyzer = gamemodel.spectators[SPY] gmwidg.menuitems["spy_mode"].active = True title = _("Game analyzing in progress...") text = _("Do you want to abort it?") content = InfoBar.get_message_content( title, text, Gtk.STOCK_DIALOG_QUESTION ) def response_cb(infobar, response, message): conf.set("analyzer_check", old_check_value) if self.threat_PV: conf.set("inv_analyzer_check", old_inv_check_value) message.dismiss() abort() message = InfoBarMessage(Gtk.MessageType.QUESTION, content, response_cb) message.add_button( InfoBarMessageButton(_("Abort"), Gtk.ResponseType.CANCEL) ) gmwidg.replaceMessages(message) async def analyse_moves(): should_black = conf.get("shouldBlack") should_white = conf.get("shouldWhite") from_current = conf.get("fromCurrent") start_ply = gmwidg.board.view.shown if from_current else 0 move_time = int(conf.get("max_analysis_spin")) threshold = int(conf.get("variation_threshold_spin")) for board in gamemodel.boards[start_ply:]: if self.stop_event.is_set(): break gmwidg.board.view.setShownBoard(board) self.analyzer.setBoard(board) if self.threat_PV: inv_analyzer.setBoard(board) await asyncio.sleep(move_time + 0.1) ply = board.ply - gamemodel.lowply color = (ply - 1) % 2 if ( ply - 1 in gamemodel.scores and ply in gamemodel.scores and ( (color == BLACK and should_black) or (color == WHITE and should_white) ) ): oldmoves, oldscore, olddepth = gamemodel.scores[ply - 1] oldscore = oldscore * -1 if color == BLACK else oldscore score_str = prettyPrintScore(oldscore, olddepth) moves, score, depth = gamemodel.scores[ply] score = score * -1 if color == WHITE else score diff = score - oldscore if ( (diff > threshold and color == BLACK) or (diff < -1 * threshold and color == WHITE) ) and ( gamemodel.moves[ply - 1] != parseAny(gamemodel.boards[ply - 1], oldmoves[0]) ): if self.threat_PV: try: if ply - 1 in gamemodel.spy_scores: ( oldmoves0, oldscore0, olddepth0, ) = gamemodel.spy_scores[ply - 1] score_str0 = prettyPrintScore( oldscore0, olddepth0 ) pv0 = listToMoves( gamemodel.boards[ply - 1], ["--"] + oldmoves0, validate=True, ) if len(pv0) > 2: gamemodel.add_variation( gamemodel.boards[ply - 1], pv0, comment="Threatening", score=score_str0, emit=False, ) except ParsingError as e: # ParsingErrors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug( "__parseLine: Ignored (%s) from analyzer: ParsingError%s" % (" ".join(oldmoves), e) ) try: pv = listToMoves( gamemodel.boards[ply - 1], oldmoves, validate=True, ) gamemodel.add_variation( gamemodel.boards[ply - 1], pv, comment="Better is", score=score_str, emit=False, ) except ParsingError as e: # ParsingErrors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug( "__parseLine: Ignored (%s) from analyzer: ParsingError%s" % (" ".join(oldmoves), e) ) self.widgets["analyze_game"].hide() self.widgets["analyze_ok_button"].set_sensitive(True) conf.set("analyzer_check", old_check_value) if self.threat_PV: conf.set("inv_analyzer_check", old_inv_check_value) message.dismiss() gamemodel.emit("analysis_finished") asyncio.create_task(analyse_moves()) hide_window(None) return True asyncio.create_task(coro()) self.widgets["analyze_game"].connect("delete-event", hide_window) self.widgets["analyze_cancel_button"].connect("clicked", hide_window) self.widgets["analyze_ok_button"].connect("clicked", run_analyze) def run(self): self.stop_event.clear() self.widgets["analyze_game"].show() self.widgets["analyze_game"].present() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/discovererDialog.py0000755000175100001770000000600214614030313022325 0ustar00runnerdockerimport asyncio from gi.repository import Gtk from pychess.Utils import wait_signal from pychess.System import uistuff class DiscovererDialog: def __init__(self, discoverer): self.discoverer = discoverer self.widgets = uistuff.GladeWidgets("discovererDialog.glade") # ======================================================================= # Clear glade defaults # ======================================================================= for child in self.widgets["enginesTable"].get_children(): self.widgets["enginesTable"].remove(child) self.finished = False self.throbber = None self.nameToBar = {} discoverer.pre_discover() binnames = self.discoverer.toBeRechecked.keys() if len(binnames) == 0: self.finished = True # ====================================================================== # Insert the names to be discovered # ====================================================================== for i, name in enumerate(binnames): label = Gtk.Label(label=name + ":") label.props.xalign = 1 self.widgets["enginesTable"].attach(label, 0, 1, i, i + 1) bar = Gtk.ProgressBar() self.widgets["enginesTable"].attach(bar, 1, 2, i, i + 1) self.nameToBar[name] = bar # ======================================================================= # Add throbber # ======================================================================= self.throbber = Gtk.Spinner() self.throbber.set_size_request(50, 50) self.widgets["throbberDock"].add(self.throbber) # ======================================================================= # Show the window # ======================================================================= self.widgets["discovererDialog"].set_position( Gtk.WindowPosition.CENTER_ON_PARENT ) self.widgets["discovererDialog"].show_all() self.throbber.start() async def start(self): if self.finished: self.close() # let dialog window draw itself await asyncio.sleep(0.1) asyncio.create_task(self.all_whatcher()) asyncio.create_task(self.discovered_whatcher()) self.discoverer.discover() async def discovered_whatcher(self): while True: if self.finished: return _discoverer, binname, _xmlenginevalue = await wait_signal( self.discoverer, "engine_discovered" ) if binname in self.nameToBar: bar = self.nameToBar[binname] bar.props.fraction = 1 async def all_whatcher(self): await wait_signal(self.discoverer, "all_engines_discovered") self.finished = True self.close() def close(self): if self.throbber: self.throbber.stop() self.widgets["discovererDialog"].hide() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/enginesDialog.py0000644000175100001770000011343414614030313021615 0ustar00runnerdockerimport os import sys import shutil from gi.repository import Gtk, Gdk, GLib, GObject, Pango from gi.repository.GdkPixbuf import Pixbuf from pychess.System import uistuff from pychess.System.prefix import getEngineDataPrefix, addDataPrefix from pychess.Utils.IconLoader import get_pixbuf from pychess.Players.engineNest import discoverer, is_uci, is_cecp, ENGINE_DEFAULT_LEVEL from pychess.Players.engineList import VM_LIST, listEnginesFromPath from pychess.Utils.isoCountries import ISO3166_LIST from pychess.widgets import newGameDialog from pychess.widgets import mainwindow firstRun = True engine_dialog = None def run(widgets): global firstRun, engine_dialog if firstRun: # Display of the countries items = [] for iso in ISO3166_LIST: path = addDataPrefix("flags/%s.png" % iso.iso2) if not (iso.iso2 and os.path.isfile(path)): path = addDataPrefix("flags/unknown.png") items.append((get_pixbuf(path), iso.country)) uistuff.createCombo( widgets["engine_country_combo"], name="engine_country_combo", ellipsize_mode=Pango.EllipsizeMode.END, ) data = [(item[0], item[1]) for item in items] uistuff.updateCombo(widgets["engine_country_combo"], data) engine_dialog = EnginesDialog(widgets) def cancel_event(widget, with_confirmation, *args): # Confirm if the changes need to be saved modified = discoverer.hasChanged() if modified and with_confirmation: dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, ) dialog.set_markup( _("You have unsaved changes. Do you want to save before leaving?") ) response = dialog.run() dialog.destroy() # if response == Gtk.ResponseType.CANCEL: # return False if response == Gtk.ResponseType.NO: discoverer.restore() if response == Gtk.ResponseType.YES: discoverer.save() # Close the window widgets["manage_engines_dialog"].hide() return True def save_event(widget, *args): discoverer.save() widgets["manage_engines_dialog"].hide() return True widgets["manage_engines_dialog"].connect("delete-event", cancel_event, True) widgets["engine_cancel_button"].connect("clicked", cancel_event, False) widgets["engine_save_button"].connect("clicked", save_event) widgets["manage_engines_dialog"].connect( "key-press-event", lambda w, e: cancel_event(w, True) if e.keyval == Gdk.KEY_Escape else None, ) discoverer.backup() engine_dialog.widgets["enginebook"].set_current_page(0) widgets["manage_engines_dialog"].show() if not firstRun: engine_dialog.update_store() firstRun = False class EnginesDialog: def update_options(self, *args): if self.cur_engine is not None: # Initial reset self.options_store.clear() # Detection of the name of the engine to reload engines = discoverer.getEngines() names = [engine["name"] for engine in engines] if self.cur_engine not in names: self.cur_engine = engines[0]["name"] engine = discoverer.getEngineByName(self.cur_engine) if engine: options = engine.get("options") if options: options.sort( key=lambda obj: obj["name"].lower() if "name" in obj else "" ) for option in options: key = option["name"] val = option if option["type"] != "button": val["default"] = option.get("default") val["value"] = option.get("value", val["default"]) modified = val["value"] != val["default"] else: modified = False self.options_store.append(["*" if modified else "", key, val]) def update_store(self, *args): newGameDialog.createPlayerUIGlobals(discoverer) engine_names = [row[1] for row in self.allstore] new_items = [] # don't add the very first (Human) player to engine store for item in newGameDialog.allEngineItems: if item[1] not in engine_names: new_items.append(item) ts_iter = None for item in new_items: ts_iter = self.allstore.append(item) if ts_iter is not None: text_select = self.tv.get_selection() text_select.select_iter(ts_iter) self.update_options() def __init__(self, widgets): self.widgets = widgets self.dialog = self.widgets["manage_engines_dialog"] self.cur_engine = None self.default_workdir = getEngineDataPrefix() uistuff.keepWindowSize("engineswindow", self.dialog) # Put engines into tree store self.allstore = Gtk.ListStore(Pixbuf, str) self.tv = self.widgets["engines_treeview"] self.tv.set_model(self.allstore) self.tv.append_column( Gtk.TreeViewColumn("Flag", Gtk.CellRendererPixbuf(), pixbuf=0) ) name_renderer = Gtk.CellRendererText() name_renderer.set_property("editable", False) self.tv.append_column(Gtk.TreeViewColumn("Name", name_renderer, text=1)) # Add cell renderer to protocol combo column protocol_combo = self.widgets["engine_protocol_combo"] protocol_combo.set_name("engine_protocol_combo") cell = Gtk.CellRendererText() protocol_combo.pack_start(cell, True) protocol_combo.add_attribute(cell, "text", 0) # Add columns and cell renderers to options treeview self.options_store = Gtk.ListStore(str, str, GObject.TYPE_PYOBJECT) optv = self.widgets["options_treeview"] optv.set_model(self.options_store) optv.append_column(Gtk.TreeViewColumn(" ", Gtk.CellRendererText(), text=0)) optv.append_column( Gtk.TreeViewColumn(_("Option"), Gtk.CellRendererText(), text=1) ) optv.append_column( Gtk.TreeViewColumn( _("Value"), KeyValueCellRenderer(self.options_store), data=2 ) ) self.update_store() def do_update_store(self, *args): GLib.idle_add(engine_dialog.update_store) discoverer.connect_after("engine_discovered", do_update_store) ################################################################ # remove button ################################################################ def remove(button): if self.cur_engine is not None: self.widgets["remove_engine_button"].set_sensitive(False) discoverer.removeEngine(self.cur_engine) selection = self.tv.get_selection() result = selection.get_selected() if result is not None: model, ts_iter = result model.remove(ts_iter) if model.iter_n_children() == 0: clearView() # Notify playerCombos in NewGameTasker discoverer.emit("all_engines_discovered") self.widgets["remove_engine_button"].connect("clicked", remove) ################################################################ # add button ################################################################ engine_chooser_dialog = Gtk.FileChooserDialog( _("Select engine"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) filter = Gtk.FileFilter() filter.set_name(_("Executable files")) filter.add_mime_type("application/x-executable") filter.add_mime_type("application/x-sharedlib") filter.add_mime_type("application/x-ms-dos-executable") filter.add_mime_type("application/x-msdownload") filter.add_pattern("*.exe") for vm in VM_LIST: filter.add_pattern("*%s" % vm.ext) engine_chooser_dialog.add_filter(filter) self.add = False def add(button): self.add = True response = engine_chooser_dialog.run() if response == Gtk.ResponseType.OK: new_engine = engine_chooser_dialog.get_filename() binname = os.path.split(new_engine)[1] ext = os.path.splitext(new_engine)[1] # Verify if the engine already exists under the same name if new_engine != "": for eng in discoverer.getEngines(): if eng["command"] == new_engine: msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) msg_dia.set_markup( _("Unable to add %s" % new_engine) ) msg_dia.format_secondary_text( _("The engine is already installed under the same name") ) msg_dia.run() msg_dia.hide() new_engine = "" break # Detect the host application if new_engine != "": vm_name = None vm_args = None vmpath = "" # Scripting for vm in VM_LIST: if ext == vm.ext: vm_name = vm.name vm_args = vm.args break # Wine for Windows application under Linux if ( vm_name is None and new_engine.lower().endswith(".exe") and sys.platform != "win32" ): vm_name = "wine" # Check that the interpreter is available if vm_name is not None: vmpath = shutil.which(vm_name, mode=os.R_OK | os.X_OK) if vmpath is None: msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) msg_dia.set_markup( _("Unable to add %s" % new_engine) ) msg_dia.format_secondary_text( vm_name + _(" is not installed") ) msg_dia.run() msg_dia.hide() new_engine = "" # Next checks if new_engine: vm_ext_list = [vm.ext for vm in VM_LIST] if ext not in vm_ext_list and not os.access(new_engine, os.X_OK): msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) msg_dia.set_markup( _( "%s is not marked executable in the filesystem" % new_engine ) ) msg_dia.format_secondary_text( _("Try chmod a+x %s" % new_engine) ) msg_dia.run() msg_dia.hide() self.add = False engine_chooser_dialog.hide() return try: engine_command = [] if vmpath: engine_command.append(vmpath) if vm_args is not None: engine_command += vm_args engine_command.append(new_engine) # Search the engines based on the most expectable protocol refeng = discoverer.getReferencedEngine(binname) if refeng is not None and refeng["protocol"] == "xboard": checkers = [is_cecp, is_uci] else: checkers = [is_uci, is_cecp] uci = False for checker in checkers: check_ok = checker(engine_command) if check_ok: uci = checker is is_uci break if not check_ok: # restore the original engine = discoverer.getEngineByName(self.cur_engine) engine_chooser_dialog.set_filename(engine["command"]) msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) msg_dia.set_markup( _("Unable to add %s" % new_engine) ) msg_dia.format_secondary_text( _("There is something wrong with this executable") ) msg_dia.run() msg_dia.hide() engine_chooser_dialog.hide() self.add = False engine_chooser_dialog.hide() return self.widgets["engine_command_entry"].set_text(new_engine) self.widgets["engine_protocol_combo"].set_active( 0 if uci else 1 ) self.widgets["engine_args_entry"].set_text("") # active = self.widgets["engine_protocol_combo"].get_active() protocol = "uci" if uci else "xboard" # print(binname, new_engine, protocol, vm_name, vm_args) discoverer.addEngine( binname, new_engine, protocol, vm_name, vm_args ) self.cur_engine = binname self.add = False discoverer.discover() except Exception: msg_dia = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, ) msg_dia.set_markup( _("Unable to add %s" % new_engine) ) msg_dia.format_secondary_text( _("There is something wrong with this executable") ) msg_dia.run() msg_dia.hide() self.add = False engine_chooser_dialog.hide() return else: # restore the original engine = discoverer.getEngineByName(self.cur_engine) engine_chooser_dialog.set_filename(engine["command"]) engine_chooser_dialog.hide() self.widgets["add_engine_button"].connect("clicked", add) ################################################################ # add in mass button ################################################################ def addInMass(button): # Ask the user to select a folder folder_dlg = Gtk.FileChooserDialog( _("Choose a folder"), None, Gtk.FileChooserAction.SELECT_FOLDER, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) answer = folder_dlg.run() path = folder_dlg.get_filename() folder_dlg.destroy() # Search for the engines if answer != Gtk.ResponseType.OK: return False possibleFiles = listEnginesFromPath(path) # Remove the existing engines from the list def isNewEngine(path): sfn = os.path.basename(path) for engine in discoverer.getEngines(): if sfn in engine.get("command"): # The short name must be unique return False return True possibleFiles = [fn for fn in possibleFiles if isNewEngine(fn)] if len(possibleFiles) == 0: return False # Prepare the result in a dialog mass_dialog = self.widgets["engine_list_dialog"] self.widgets["mass_path_label"].set_text(path) mass_list = self.widgets["mass_list_treeview"] if len(mass_list.get_columns()) == 0: # Not initialized yet mass_store = Gtk.ListStore(bool, str) mass_list.set_model(mass_store) def checkbox_renderer_cb(cell, path, model): model[path][0] = not model[path][0] return checkbox_renderer = Gtk.CellRendererToggle() checkbox_renderer.set_property("activatable", True) checkbox_renderer.connect("toggled", checkbox_renderer_cb, mass_store) mass_list.append_column( Gtk.TreeViewColumn(_("Import"), checkbox_renderer, active=0) ) mass_list.append_column( Gtk.TreeViewColumn(_("File name"), Gtk.CellRendererText(), text=1) ) else: mass_store = mass_list.get_model() mass_store.clear() for fn in possibleFiles: mass_store.append([False, fn[len(path) :]]) # Show the dialog answer = mass_dialog.run() mass_dialog.hide() if answer != Gtk.ResponseType.OK.real: return False # Add the new engines self.add = True found = False for entry in mass_store: if entry[0]: newengine = discoverer.getReferencedEngine(path + entry[1]) if newengine is not None: discoverer.addEngineFromReference(newengine) found = True self.add = False if found: discoverer.discover() return True self.widgets["mass_engine_button"].connect("clicked", addInMass) ################################################################ def clearView(): self.selection = True self.cur_engine = None self.widgets["vm_command_entry"].set_text("") self.widgets["vm_args_entry"].set_text("") self.widgets["engine_command_entry"].set_text("") self.widgets["engine_args_entry"].set_text("") self.widgets["engine_protocol_combo"].set_active(0) self.widgets["engine_country_combo"].set_active(0) self.widgets["engine_comment_entry"].set_text("") self.widgets["engine_level_scale"].set_value(ENGINE_DEFAULT_LEVEL) self.options_store.clear() self.selection = False ################################################################ # vm args ################################################################ def vm_args_changed(widget): if self.cur_engine is not None and not self.selection: new_args = self.widgets["vm_args_entry"].get_text().strip() engine = discoverer.getEngineByName(self.cur_engine) old_args = engine.get("vm_args") if new_args != old_args: engine["vm_args"] = new_args.split() self.widgets["vm_args_entry"].connect("changed", vm_args_changed) ################################################################ # engine args ################################################################ def args_changed(widget): if self.cur_engine is not None and not self.selection: new_args = self.widgets["engine_args_entry"].get_text().strip() engine = discoverer.getEngineByName(self.cur_engine) old_args = engine.get("args") if new_args != old_args: engine["args"] = new_args.split() self.widgets["engine_args_entry"].connect("changed", args_changed) ################################################################ # engine working directory ################################################################ dir_chooser_dialog = Gtk.FileChooserDialog( _("Select working directory"), mainwindow(), Gtk.FileChooserAction.SELECT_FOLDER, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) dir_chooser_button = Gtk.FileChooserButton.new_with_dialog(dir_chooser_dialog) self.widgets["dirChooserDock"].add(dir_chooser_button) dir_chooser_button.show() def select_dir(button): new_directory = dir_chooser_dialog.get_filename() engine = discoverer.getEngineByName(self.cur_engine) old_directory = engine.get("workingDirectory") if new_directory != old_directory and new_directory != self.default_workdir: engine["workingDirectory"] = new_directory dir_chooser_button.connect("current-folder-changed", select_dir) ################################################################ # engine protocol ################################################################ def protocol_changed(widget): if self.cur_engine is not None and not self.add and not self.selection: active = self.widgets["engine_protocol_combo"].get_active() new_protocol = "uci" if active == 0 else "xboard" engine = discoverer.getEngineByName(self.cur_engine) old_protocol = engine["protocol"] if new_protocol != old_protocol: command = engine.get("command") engine_command = [] vm_command = engine.get("vm_command") if vm_command is not None: engine_command.append(vm_command) vm_args = engine.get("vm_args") if vm_args is not None: engine_command.append(", ".join(vm_args)) engine_command.append(command) # is the new protocol supported by the engine? if new_protocol == "uci": check_ok = is_uci(engine_command) else: check_ok = is_cecp(engine_command) if check_ok: # discover engine options for new protocol engine["protocol"] = new_protocol engine["recheck"] = True discoverer.discover() else: # restore the original protocol widgets["engine_protocol_combo"].set_active( 0 if old_protocol == "uci" else 1 ) self.widgets["engine_protocol_combo"].connect("changed", protocol_changed) ################################################################ # engine country ################################################################ def country_changed(widget): if self.cur_engine is not None and not self.selection: engine = discoverer.getEngineByName(self.cur_engine) old_country = discoverer.getCountry(engine) new_country = ISO3166_LIST[widget.get_active()].iso2 if old_country != new_country: engine["country"] = new_country # Refresh the flag in the tree view path = addDataPrefix("flags/%s.png" % new_country) if not os.path.isfile(path): path = addDataPrefix("flags/unknown.png") item = self.tv.get_selection().get_selected() if item is not None: model, ts_iter = item model[ts_iter][0] = get_pixbuf(path) # Notify playerCombos in NewGameTasker discoverer.emit("all_engines_discovered") self.widgets["engine_country_combo"].connect("changed", country_changed) def country_keypressed(widget, event): idx = 0 for iso in ISO3166_LIST: if (idx != 0) and ( (ord(iso.country[0].lower()) == event.keyval) or (ord(iso.country[0].upper()) == event.keyval) ): widget.set_active(idx) break idx += 1 self.widgets["engine_country_combo"].connect( "key-press-event", country_keypressed ) ################################################################ # comment changed ################################################################ def comment_changed(widget): if self.cur_engine is not None and not self.selection: new_comment = self.widgets["engine_comment_entry"].get_text().strip() engine = discoverer.getEngineByName(self.cur_engine) old_comment = engine.get("comment") if new_comment != old_comment: engine["comment"] = new_comment self.widgets["engine_comment_entry"].connect("changed", comment_changed) ################################################################ # level changed ################################################################ def level_changed(widget): if self.cur_engine is not None and not self.selection: new_level = widget.get_value() engine = discoverer.getEngineByName(self.cur_engine) old_level = engine.get("level") if new_level != old_level: engine["level"] = int(new_level) self.widgets["engine_level_scale"].connect("value-changed", level_changed) ################################################################ # engine tree ################################################################ self.selection = False def selection_changed(treeselection): store, tv_iter = self.tv.get_selection().get_selected() if tv_iter: self.selection = True path = store.get_path(tv_iter) indices = path.get_indices() row = indices[0] name = store[row][1] self.cur_engine = name engine = discoverer.getEngineByName(name) if "PyChess.py" in engine["command"]: self.widgets["remove_engine_button"].set_sensitive(False) else: self.widgets["remove_engine_button"].set_sensitive(True) self.widgets["engine_command_entry"].set_text(engine["command"]) engine_chooser_dialog.set_filename(engine["command"]) args = [] if engine.get("args") is None else engine.get("args") self.widgets["engine_args_entry"].set_text(" ".join(args)) vm = engine.get("vm_command") self.widgets["vm_command_entry"].set_text(vm if vm is not None else "") args = [] if engine.get("vm_args") is None else engine.get("vm_args") self.widgets["vm_args_entry"].set_text(" ".join(args)) directory = engine.get("workingDirectory") dir_choice = ( directory if directory is not None else self.default_workdir ) dir_chooser_dialog.set_current_folder(dir_choice) self.widgets["engine_protocol_combo"].set_active( 0 if engine["protocol"] == "uci" else 1 ) self.widgets["engine_country_combo"].set_active(0) country = discoverer.getCountry(engine) idx = 0 for iso in ISO3166_LIST: if iso.iso2 == country: self.widgets["engine_country_combo"].set_active(idx) break idx += 1 comment = engine.get("comment") self.widgets["engine_comment_entry"].set_text( comment if comment is not None else "" ) level = engine.get("level") try: level = int(level) except Exception: level = ENGINE_DEFAULT_LEVEL self.widgets["engine_level_scale"].set_value(level) self.update_options() self.selection = False tree_selection = self.tv.get_selection() tree_selection.connect("changed", selection_changed) tree_selection.select_path((0,)) selection_changed(tree_selection) ################################################################ # restore the default options of the engine ################################################################ def engine_default_options(button): if self.cur_engine is not None and not self.selection: engine = discoverer.getEngineByName(self.cur_engine) options = engine.get("options") if options: dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, ) dialog.set_markup( _( "Do you really want to restore the default options of the engine ?" ) ) response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.YES: for option in options: if "default" in option: option["value"] = option["default"] self.update_options() self.widgets["engine_default_options_button"].connect( "clicked", engine_default_options ) class KeyValueCellRenderer(Gtk.CellRenderer): """ Custom renderer providing different renderers in different rows. The model parameter is a Gtk.ListStore(str, GObject.TYPE_PYOBJECT) containing key data pairs. Each data is a dictionary with name, type, default, value, min, max (for spin options), choices (list of combo options) The 'type' can be 'check', 'spin', 'text', 'combo', 'button'. Examples: ('Nullmove', {'name': 'Nullmove', 'default': false, 'type': 'check', 'value': True}) ('Selectivity', {'name': 'Selectivity', 'default': 1, 'type': 'spin', \ 'min': 0, 'max': 4, 'value': 2}) ('Style', {'name': 'Style', 'default': 'Solid', 'type': 'combo', \ 'choices': ['Solid', 'Normal','Risky'], 'value': 'Normal'}) ('NalimovPath', {'name': 'NalimovPath', 'default': '', \ 'type': 'text', 'value': '/home/egtb'}) ('Clear Hash', {'name': 'Clear Hash', 'type': 'button'}) """ __gproperties__ = { "data": ( GObject.TYPE_PYOBJECT, "Data", "Data", GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ) } def __init__(self, model): GObject.GObject.__init__(self) self.data = None self.text_renderer = Gtk.CellRendererText() self.text_renderer.set_property("editable", True) self.text_renderer.connect("edited", self.text_edited_cb, model) self.toggle_renderer = Gtk.CellRendererToggle() self.toggle_renderer.set_property("activatable", True) self.toggle_renderer.set_property("xalign", 0) self.toggle_renderer.connect("toggled", self.toggled_cb, model) self.ro_toggle_renderer = Gtk.CellRendererToggle() self.ro_toggle_renderer.set_property("activatable", False) self.ro_toggle_renderer.set_property("xalign", 0) self.spin_renderer = Gtk.CellRendererSpin() self.spin_renderer.set_property("editable", True) self.spin_renderer.connect("edited", self.spin_edited_cb, model) self.combo_renderer = Gtk.CellRendererCombo() self.combo_renderer.set_property("has_entry", False) self.combo_renderer.set_property("editable", True) self.combo_renderer.set_property("text_column", 0) self.combo_renderer.connect("edited", self.text_edited_cb, model) self.button_renderer = Gtk.CellRendererText() self.button_renderer.set_property("editable", False) def update_modified_mark(self, ref): ref[0] = "*" if ref[2].get("value") != ref[2].get("default") else "" def text_edited_cb(self, cell, path, new_text, model): model[path][2]["value"] = new_text self.update_modified_mark(model[path]) return def toggled_cb(self, cell, path, model): model[path][2]["value"] = not model[path][2]["value"] self.update_modified_mark(model[path]) return def spin_edited_cb(self, cell, path, new_text, model): try: model[path][2]["value"] = int(new_text) self.update_modified_mark(model[path]) except Exception: pass return def _get_renderer(self): if self.data["type"] == "check": if self.data["name"] == "UCI_Chess960": return self.ro_toggle_renderer else: return self.toggle_renderer elif self.data["type"] == "spin": return self.spin_renderer elif self.data["type"] == "text": return self.text_renderer elif self.data["type"] == "combo": return self.combo_renderer elif self.data["type"] == "button": return self.button_renderer renderer = property(_get_renderer) def do_set_property(self, pspec, value): if value["type"] == "check": self.toggle_renderer.set_active(value["value"]) self.set_property("mode", Gtk.CellRendererMode.ACTIVATABLE) elif value["type"] == "spin": adjustment = Gtk.Adjustment( value=int(value["value"]), lower=value["min"], upper=value["max"], step_increment=1, ) self.spin_renderer.set_property("adjustment", adjustment) self.spin_renderer.set_property("text", str(value["value"])) self.set_property("mode", Gtk.CellRendererMode.EDITABLE) elif value["type"] == "text": self.text_renderer.set_property("text", value["value"]) self.set_property("mode", Gtk.CellRendererMode.EDITABLE) elif value["type"] == "combo": liststore = Gtk.ListStore(str) for choice in value["choices"]: liststore.append([choice]) self.combo_renderer.set_property("model", liststore) self.combo_renderer.set_property("text", value["value"]) self.set_property("mode", Gtk.CellRendererMode.EDITABLE) elif value["type"] == "button": self.button_renderer.set_property("text", "") setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def do_get_size(self, widget, cell_area=None): return self.renderer.get_size(widget, cell_area=cell_area) def do_render(self, ctx, widget, background_area, cell_area, flags): self.renderer.render(ctx, widget, background_area, cell_area, flags) def do_activate(self, event, widget, path, background_area, cell_area, flags): return self.renderer.activate( event, widget, path, background_area, cell_area, flags ) def do_start_editing(self, event, widget, path, background_area, cell_area, flags): return self.renderer.start_editing( event, widget, path, background_area, cell_area, flags ) GObject.type_register(KeyValueCellRenderer) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/gameinfoDialog.py0000755000175100001770000001763014614030313021756 0ustar00runnerdockerfrom gi.repository import Gtk, Gdk from pychess.Savers.database import parseDateTag from pychess.Database.PgnImport import dedicated_tags from pychess.Utils.const import ( BLACK, WHITE, DRAW, WHITEWON, BLACKWON, RUNNING, reprResult, ) from pychess.perspectives import perspective_manager from pychess.Utils.elo import get_elo_rating_change_str firstRun = True tags_store = Gtk.ListStore(str, str) def run(widgets): global firstRun, tags_store # Data from the game persp = perspective_manager.get_perspective("games") gamemodel = persp.cur_gmwidg().gamemodel # Initialization if firstRun: initialize(widgets) firstRun = False # Load of the tags having a dedicated field for tag in dedicated_tags: tag_value = gamemodel.tags[tag] if tag_value is None: continue if tag == "Date": tag_value = tag_value.replace(".??", "").replace("????.", "") elif tag_value == "?": tag_value = "" widgets["%s_entry" % tag.lower()].set_text(tag_value) refresh_elo_rating_change(widgets) combo = widgets["result_combo"] acive_id = reprResult[gamemodel.status] combo.set_active_id(acive_id) # Load of the tags in the editor tags_store.clear() tlist = [] for tag in gamemodel.tags: if ( tag not in dedicated_tags and isinstance(gamemodel.tags[tag], str) and gamemodel.tags[tag] ): tlist.append(tag) tlist.sort() for tag in tlist: tags_store.append([tag, gamemodel.tags[tag]]) # Show the loaded dialog widgets["game_info"].show() def initialize(widgets): def hide_window(button, *args): widgets["game_info"].hide() return True def on_add_tag(button, *args): tv_iter = tags_store.append([_("New"), ""]) path = tags_store.get_path(tv_iter) widgets["tags_treeview"].set_cursor(path) def on_delete_tag(button, *args): store, tv_iter = widgets["tags_treeview"].get_selection().get_selected() if tv_iter: store.remove(tv_iter) def accept_new_properties(button, *args): persp = perspective_manager.get_perspective("games") gamemodel = persp.cur_gmwidg().gamemodel # Remove the existing tags in string format for tag in list(gamemodel.tags): if isinstance(gamemodel.tags[tag], str): del gamemodel.tags[tag] # Copy of the tags from the dedicated fields for tag in dedicated_tags: gamemodel.tags[tag] = widgets["%s_entry" % tag.lower()].get_text() combo = widgets["result_combo"] tree_iter = combo.get_active_iter() if tree_iter is not None: model = combo.get_model() status = model[tree_iter][0] if status != gamemodel.status: gamemodel.status = status gamemodel.checkStatus() # Copy the extra tags from the editor for tag in tags_store: if tag[0] != "" and tag not in dedicated_tags: gamemodel.tags[tag[0]] = tag[1] widgets["game_info"].hide() # Apply some settings to the game model gamemodel.players[BLACK].setName(gamemodel.tags["Black"]) gamemodel.players[WHITE].setName(gamemodel.tags["White"]) gamemodel.emit("players_changed") return True # Tag editor def tag_edited_cb(cell, path, new_text): global tags_store tags_store[path][0] = new_text def value_edited_cb(cell, path, new_text): global tags_store tags_store[path][1] = new_text global tags_store tv_tags = widgets["tags_treeview"] tv_tags.set_model(tags_store) tag_renderer = Gtk.CellRendererText() tag_renderer.set_property("editable", True) tag_renderer.connect("edited", tag_edited_cb) tv_tags.append_column(Gtk.TreeViewColumn(_("Tag"), tag_renderer, text=0)) value_renderer = Gtk.CellRendererText() value_renderer.set_property("editable", True) value_renderer.connect("edited", value_edited_cb) tv_tags.append_column(Gtk.TreeViewColumn(_("Value"), value_renderer, text=1)) result_combo = widgets["result_combo"] result_store = Gtk.ListStore(int, str) for result in ( (WHITEWON, "1-0"), (BLACKWON, "0-1"), (DRAW, "1/2-1/2"), (RUNNING, "*"), ): result_store.append(result) result_combo.set_model(result_store) result_combo.set_id_column(1) renderer_text = Gtk.CellRendererText() result_combo.pack_start(renderer_text, True) result_combo.add_attribute(renderer_text, "text", 1) # Events on the UI widgets["whiteelo_entry"].connect( "changed", lambda p: refresh_elo_rating_change(widgets) ) widgets["blackelo_entry"].connect( "changed", lambda p: refresh_elo_rating_change(widgets) ) widgets["date_button"].connect("clicked", on_pick_date, widgets["date_entry"]) widgets["tag_add_button"].connect("clicked", on_add_tag) widgets["tag_delete_button"].connect("clicked", on_delete_tag) widgets["game_info"].connect("delete-event", hide_window) widgets["game_info_cancel_button"].connect("clicked", hide_window) widgets["game_info_ok_button"].connect("clicked", accept_new_properties) red = Gdk.RGBA(0.643, 0, 0, 1) green = Gdk.RGBA(0.306, 0.604, 0.024, 1) black = Gdk.RGBA(0.0, 0.0, 0.0, 1.0) def refresh_elo_rating_change(widgets): persp = perspective_manager.get_perspective("games") gamemodel = persp.cur_gmwidg().gamemodel site = gamemodel.tags["Site"] if site is not None and ( "lichess.org" in site or "chessclub.com" in site or "freechess.org" in site ): # TODO : lichess takes 3 parameters per player widgets["w_elo_change"].set_text("") widgets["b_elo_change"].set_text("") return welo = widgets["whiteelo_entry"].get_text() belo = widgets["blackelo_entry"].get_text() wchange = get_elo_rating_change_str(gamemodel, WHITE, welo, belo) widgets["w_elo_change"].set_text(wchange) if wchange.startswith("+") or wchange.startswith("-"): widgets["w_elo_change"].override_color( Gtk.StateFlags.NORMAL, red if wchange.startswith("-") else green ) else: widgets["w_elo_change"].override_color(Gtk.StateFlags.NORMAL, black) bchange = get_elo_rating_change_str(gamemodel, BLACK, welo, belo) widgets["b_elo_change"].set_text(bchange) if bchange.startswith("+") or bchange.startswith("-"): widgets["b_elo_change"].override_color( Gtk.StateFlags.NORMAL, red if bchange.startswith("-") else green ) else: widgets["b_elo_change"].override_color(Gtk.StateFlags.NORMAL, black) def on_pick_date(button, date_entry): # Parse the existing date date = date_entry.get_text() year, month, day = parseDateTag(date) # Prepare the date of the picker calendar = Gtk.Calendar() curyear, curmonth, curday = calendar.get_date() year = curyear if year is None else year month = curmonth if month is None else month - 1 day = curday if day is None else day calendar.select_month(month, year) calendar.select_day(day) # Show the dialog dialog = Gtk.Dialog( _("Pick a date"), None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT, ), ) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(calendar) dialog.get_content_area().pack_start(sw, True, True, 0) dialog.resize(300, 200) dialog.show_all() response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.ACCEPT: year, month, day = calendar.get_date() date_entry.set_text("%04d.%02d.%02d" % (year, month + 1, day)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/gamenanny.py0000755000175100001770000003306114614030313021022 0ustar00runnerdocker""" This module intends to work as glue between the gamemodel and the gamewidget taking care of stuff that is neither very offscreen nor very onscreen like bringing up dialogs and """ import asyncio import math from collections import defaultdict from gi.repository import Gtk from pychess.ic.FICSObjects import ( make_sensitive_if_available, make_sensitive_if_playing, ) from pychess.ic.ICGameModel import ICGameModel from pychess.Utils.Offer import Offer from pychess.Utils.const import ( WAITING_TO_START, WHITE, BLACK, WHITEWON, BLACKWON, WON_ADJUDICATION, TAKEBACK_OFFER, LOCAL, UNDOABLE_STATES, WHITE_ENGINE_DIED, UNDOABLE_REASONS, BLACK_ENGINE_DIED, HINT, SPY, RUNNING, ABORT_OFFER, ADJOURN_OFFER, DRAW_OFFER, PAUSE_OFFER, RESUME_OFFER, HURRY_ACTION, FLAG_CALL, ) from pychess.Utils.repr import reprResult_long, reprReason_long from pychess.Utils.LearnModel import LearnModel from pychess.System import conf from pychess.System.Log import log from pychess.widgets import preferencesDialog from pychess.widgets.InfoBar import InfoBarMessage, InfoBarMessageButton from pychess.widgets import InfoBar, mainwindow from pychess.widgets.gamewidget import getWidgets from pychess.perspectives import perspective_manager class GameNanny: def __init__(self): self.offer_cids = defaultdict(dict) self.gmwidg_cids = defaultdict(list) self.model_cids = defaultdict(list) def nurseGame(self, gmwidg, gamemodel): """Call this function when gmwidget is just created""" log.debug(f"nurseGame: {gmwidg} {gamemodel}") self.gmwidg_cids[gmwidg] = [ gmwidg.connect("closed", self.on_gmwidg_closed), gmwidg.connect("title_changed", self.on_gmwidg_title_changed), ] if gamemodel.status == WAITING_TO_START: self.model_cids[gamemodel].append( gamemodel.connect("game_started", self.on_game_started, gmwidg) ) else: self.on_game_started(gamemodel, gmwidg) self.model_cids[gamemodel].append( gamemodel.connect("game_ended", self.game_ended, gmwidg) ) self.model_cids[gamemodel].append( gamemodel.connect("game_terminated", self.on_game_terminated, gmwidg) ) if isinstance(gamemodel, ICGameModel): gmwidg.cids[gamemodel.connection] = gamemodel.connection.connect( "disconnected", self.on_disconnected, gmwidg ) def on_game_terminated(self, gamemodel, gmwidg): for player in self.offer_cids[gamemodel]: player.disconnect(self.offer_cids[gamemodel][player]) for cid in self.model_cids[gamemodel]: gamemodel.disconnect(cid) for cid in self.gmwidg_cids[gmwidg]: gmwidg.disconnect(cid) del self.offer_cids[gamemodel] del self.gmwidg_cids[gmwidg] del self.model_cids[gamemodel] def on_disconnected(self, fics_connection, gamewidget): def disable_buttons(): for button in gamewidget.game_ended_message.buttons: button.set_property("sensitive", False) button.set_property("tooltip-text", "") if gamewidget.game_ended_message: disable_buttons # =============================================================================== # Gamewidget signals # =============================================================================== def on_gmwidg_closed(self, gmwidg): perspective = perspective_manager.get_perspective("games") if len(perspective.key2gmwidg) == 1: getWidgets()["main_window"].set_title("%s - PyChess" % _("Welcome")) return False def on_gmwidg_title_changed(self, gmwidg, new_title): # log.debug("gamenanny.on_gmwidg_title_changed: starting %s" % repr(gmwidg)) if gmwidg.isInFront(): getWidgets()["main_window"].set_title("%s - PyChess" % new_title) # log.debug("gamenanny.on_gmwidg_title_changed: returning") return False # =============================================================================== # Gamemodel signals # =============================================================================== def game_ended(self, gamemodel, reason, gmwidg): log.debug( "gamenanny.game_ended: reason=%s gmwidg=%s\ngamemodel=%s" % (reason, gmwidg, gamemodel) ) nameDic = { "white": gamemodel.players[WHITE], "black": gamemodel.players[BLACK], "mover": gamemodel.curplayer, } if gamemodel.status == WHITEWON: nameDic["winner"] = gamemodel.players[WHITE] nameDic["loser"] = gamemodel.players[BLACK] elif gamemodel.status == BLACKWON: nameDic["winner"] = gamemodel.players[BLACK] nameDic["loser"] = gamemodel.players[WHITE] msg_one = reprResult_long[gamemodel.status] % nameDic msg_two = reprReason_long[reason] % nameDic if gamemodel.reason == WON_ADJUDICATION: color = BLACK if gamemodel.status == WHITEWON else WHITE invalid_move = gamemodel.players[color].invalid_move if invalid_move: msg_two += _(" invalid engine move: %s" % invalid_move) content = InfoBar.get_message_content(msg_one, msg_two, Gtk.STOCK_DIALOG_INFO) message = InfoBarMessage(Gtk.MessageType.INFO, content, None) if isinstance(gamemodel, ICGameModel): if gamemodel.hasLocalPlayer() and not gamemodel.examined: def status_changed(player, prop, message): make_sensitive_if_available(message.buttons[0], player) make_sensitive_if_playing(message.buttons[1], player) def callback(infobar, response, message, gamemodel=gamemodel): if response == 0: gamemodel.remote_player.offerRematch() elif response == 1: gamemodel.remote_player.observe() return False gmwidg.cids[gamemodel.remote_ficsplayer] = ( gamemodel.remote_ficsplayer.connect( "notify::status", status_changed, message ) ) message.add_button(InfoBarMessageButton(_("Offer Rematch"), 0)) message.add_button( InfoBarMessageButton( _("Observe %s") % gamemodel.remote_ficsplayer.name, 1 ) ) status_changed(gamemodel.remote_ficsplayer, None, message) else: def status_changed(player, prop, button): make_sensitive_if_playing(button, player) def callback(infobar, response, message, gamemodel=gamemodel): if response in (0, 1): gamemodel.players[response].observe() return False for i, player in enumerate(gamemodel.ficsplayers): button = InfoBarMessageButton(_("Observe %s" % player.name), i) message.add_button(button) gmwidg.cids[player] = player.connect( "notify::status", status_changed, button ) status_changed(player, None, button) elif gamemodel.hasLocalPlayer() and not isinstance(gamemodel, LearnModel): def callback(infobar, response, message, gamemodel=gamemodel): if response == 1: # newGameDialog uses perspectives.games uses gamenanny uses newGameDialog... from pychess.widgets.newGameDialog import createRematch createRematch(gamemodel) elif response == 2: if gamemodel.ply > 1: offer = Offer(TAKEBACK_OFFER, 2) else: offer = Offer(TAKEBACK_OFFER, 1) if gamemodel.players[0].__type__ == LOCAL: gamemodel.players[0].emit("offer", offer) else: gamemodel.players[1].emit("offer", offer) return False if not gamemodel.isLoadedGame(): message.add_button(InfoBarMessageButton(_("Play Rematch"), 1)) if ( gamemodel.status in UNDOABLE_STATES and gamemodel.reason in UNDOABLE_REASONS ): if gamemodel.ply == 1: message.add_button(InfoBarMessageButton(_("Undo one move"), 2)) elif gamemodel.ply > 1: message.add_button(InfoBarMessageButton(_("Undo two moves"), 2)) else: callback = None message.callback = callback gmwidg.game_ended_message = message perspective = perspective_manager.get_perspective("games") if len(perspective.key2gmwidg) > 0: gmwidg.replaceMessages(message) if reason == WHITE_ENGINE_DIED: self.engineDead(gamemodel.players[0], gmwidg) elif reason == BLACK_ENGINE_DIED: self.engineDead(gamemodel.players[1], gmwidg) if ( (isinstance(gamemodel, ICGameModel) and not gamemodel.isObservationGame()) or gamemodel.isEngine2EngineGame() or (isinstance(gamemodel, LearnModel) and not gamemodel.failed_playing_best) ): asyncio.create_task(gamemodel.restart_analyzer(HINT)) asyncio.create_task(gamemodel.restart_analyzer(SPY)) if not conf.get("hint_mode"): gamemodel.pause_analyzer(HINT) if not conf.get("spy_mode"): gamemodel.pause_analyzer(SPY) return False def on_game_started(self, gamemodel, gmwidg): # offline lectures can reuse same gamemodel/gamewidget # to show several examples inside the same lecture if gamemodel.offline_lecture: gmwidg.clearMessages() # Rotate to human player boardview = gmwidg.board.view if gamemodel.players[1].__type__ == LOCAL: if gamemodel.players[0].__type__ != LOCAL: boardview.rotation = math.pi if isinstance(gamemodel, LearnModel): if gamemodel.orientation == BLACK: boardview.rotation = math.pi else: boardview.rotation = 0 # Play set-up sound preferencesDialog.SoundTab.playAction("gameIsSetup") # Connect player offers to infobar for player in gamemodel.players: if player.__type__ == LOCAL: self.offer_cids[gamemodel][player] = player.connect( "offer", self.offer_callback, gamemodel, gmwidg ) # Start analyzers if any if not gamemodel.isEngine2EngineGame(): asyncio.create_task(gamemodel.start_analyzer(HINT)) asyncio.create_task(gamemodel.start_analyzer(SPY)) if not conf.get("hint_mode"): gamemodel.pause_analyzer(HINT) if not conf.get("spy_mode"): gamemodel.pause_analyzer(SPY) return False # =============================================================================== # Player signals # =============================================================================== def offer_callback(self, player, offer, gamemodel, gmwidg): if gamemodel.status != RUNNING: # If the offer has already been handled by Gamemodel and the game was # drawn, we need to do nothing return message = "" if offer.type == ABORT_OFFER: message = _("You sent an abort offer") elif offer.type == ADJOURN_OFFER: message = _("You sent an adjournment offer") elif offer.type == DRAW_OFFER: message = _("You sent a draw offer") elif offer.type == PAUSE_OFFER: message = _("You sent a pause offer") elif offer.type == RESUME_OFFER: message = _("You sent a resume offer") elif offer.type == TAKEBACK_OFFER: message = _("You sent an undo offer") elif offer.type == HURRY_ACTION: message = _("You asked your opponent to move") elif offer.type == FLAG_CALL: message = _("You sent flag call") else: return def response_cb(infobar, response, message): message.dismiss() return False content = InfoBar.get_message_content("", message, Gtk.STOCK_DIALOG_INFO) message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) gmwidg.replaceMessages(message) return False # =============================================================================== # Subfunctions # =============================================================================== def engineDead(self, engine, gmwidg): gmwidg.bringToFront() dialog = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK ) dialog.set_markup(_("Engine, %s, has died") % repr(engine)) dialog.format_secondary_text( _( "PyChess has lost connection to the engine, probably because it has died.\n\n \ You can try to start a new game with the engine, or try to play against another one." ) ) dialog.connect("response", lambda dialog, r: dialog.hide()) dialog.show_all() game_nanny = GameNanny() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/gamewidget.py0000644000175100001770000011313714614030313021162 0ustar00runnerdocker""" This module handles the tabbed layout in PyChess """ import sys from collections import defaultdict from gi.repository import Gtk, GObject import pychess from .BoardControl import BoardControl from .ChessClock import ChessClock from .MenuItemsDict import MenuItemsDict from pychess.System import conf from pychess.System.Log import log from pychess.Utils.IconLoader import get_pixbuf from pychess.Utils.const import ( REMOTE, UNFINISHED_STATES, PAUSED, RUNNING, LOCAL, WHITE, BLACK, ACTION_MENU_ITEMS, DRAW, UNDOABLE_STATES, HINT, SPY, WHITEWON, MENU_ITEMS, BLACKWON, DROP, FAN_PIECES, TOOL_CHESSDB, TOOL_SCOUTFISH, ) from pychess.Utils.GameModel import GameModel from pychess.Utils.Move import listToMoves from pychess.Utils.lutils import lmove from pychess.Utils.lutils.lmove import ParsingError from pychess.Utils.logic import playerHasMatingMaterial, isClaimableDraw from pychess.ic import get_infobarmessage_content, get_infobarmessage_content2 from pychess.ic.FICSObjects import get_player_tooltip_text from pychess.ic.ICGameModel import ICGameModel from pychess.widgets import createImage, createAlignment, gtk_close from pychess.widgets.InfoBar import ( InfoBarNotebook, InfoBarMessage, InfoBarMessageButton, ) from pychess.perspectives import perspective_manager light_on = get_pixbuf("glade/16x16/weather-clear.png") light_off = get_pixbuf("glade/16x16/weather-clear-night.png") widgets = None def setWidgets(w): global widgets widgets = w pychess.widgets.main_window = widgets["main_window"] def getWidgets(): return widgets class GameWidget(GObject.GObject): __gsignals__ = { "game_close_clicked": (GObject.SignalFlags.RUN_FIRST, None, ()), "title_changed": (GObject.SignalFlags.RUN_FIRST, None, (str,)), "closed": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self, gamemodel, perspective): GObject.GObject.__init__(self) self.gamemodel = gamemodel self.perspective = perspective self.cids = {} self.closed = False # InfoBarMessage with rematch, undo or observe buttons self.game_ended_message = None ( self.tabcontent, white_label, black_label, self.game_info_label, ) = self.initTabcontents() self.boardvbox, self.board, self.infobar, self.clock = self.initBoardAndClock( self.gamemodel ) self.stat_hbox = self.initButtons(self.board) self.player_name_labels = (white_label, black_label) self.infobar.connect("hide", self.infobar_hidden) self.notebookKey = Gtk.Alignment() self.menuitems = MenuItemsDict() self.gamemodel_cids = [ self.gamemodel.connect_after("game_started", self.game_started), self.gamemodel.connect_after("game_ended", self.game_ended), self.gamemodel.connect_after("game_changed", self.game_changed), self.gamemodel.connect("game_paused", self.game_paused), self.gamemodel.connect("game_resumed", self.game_resumed), self.gamemodel.connect("moves_undone", self.moves_undone), self.gamemodel.connect("game_unended", self.game_unended), self.gamemodel.connect("game_saved", self.game_saved), self.gamemodel.connect("players_changed", self.players_changed), self.gamemodel.connect("analyzer_added", self.analyzer_added), self.gamemodel.connect("analyzer_removed", self.analyzer_removed), self.gamemodel.connect("message_received", self.message_received), ] self.players_changed(self.gamemodel) self.notify_cids = [ conf.notify_add("showFICSgameno", self.on_show_fics_gameno), ] if self.gamemodel.display_text: if isinstance(self.gamemodel, ICGameModel) and conf.get("showFICSgameno"): self.game_info_label.set_text( f"{self.display_text} [{self.gamemodel.ficsgame.gameno}]" ) else: self.game_info_label.set_text(self.display_text) if self.gamemodel.timed: self.cids[self.gamemodel.timemodel] = self.gamemodel.timemodel.connect( "zero_reached", self.zero_reached ) self.connections = defaultdict(list) if isinstance(self.gamemodel, ICGameModel): self.connections[self.gamemodel.connection.bm].append( self.gamemodel.connection.bm.connect( "player_lagged", self.player_lagged ) ) self.connections[self.gamemodel.connection.bm].append( self.gamemodel.connection.bm.connect( "opp_not_out_of_time", self.opp_not_out_of_time ) ) self.cids[self.board.view] = self.board.view.connect( "shownChanged", self.shownChanged ) if isinstance(self.gamemodel, ICGameModel): self.gamemodel.gmwidg_ready.set() def _del(self): if self.gamemodel.offline_lecture: self.gamemodel.lecture_exit_event.set() for obj in self.cids: if obj.handler_is_connected(self.cids[obj]): log.debug("GameWidget._del: disconnecting %s" % repr(obj)) obj.disconnect(self.cids[obj]) self.cids = {} for obj in self.connections: for handler_id in self.connections[obj]: if obj.handler_is_connected(handler_id): obj.disconnect(handler_id) self.connections = {} for cid in self.gamemodel_cids: self.gamemodel.disconnect(cid) for cid in self.notify_cids: conf.notify_remove(cid) self.board._del() if self.game_ended_message is not None: self.game_ended_message.callback = None def on_show_fics_gameno(self, *args): """Checks the configuration / preferences to see if the FICS game number should be displayed next to player names. """ if isinstance(self.gamemodel, ICGameModel) and conf.get("showFICSgameno"): self.game_info_label.set_text(" [%s]" % self.gamemodel.ficsgame.gameno) else: self.game_info_label.set_text("") def infront(self): for menuitem in self.menuitems: self.menuitems[menuitem].update() for widget in MENU_ITEMS: if widget in self.menuitems: continue elif widget == "show_sidepanels" and isDesignGWShown(): getWidgets()[widget].set_property("sensitive", False) else: getWidgets()[widget].set_property("sensitive", True) # Change window title getWidgets()["main_window"].set_title( self.display_text + (" - " if self.display_text != "" else "") + "PyChess" ) def _update_menu_abort(self): if self.gamemodel.hasEnginePlayer(): self.menuitems["abort"].sensitive = True self.menuitems["abort"].tooltip = "" elif self.gamemodel.isObservationGame(): self.menuitems["abort"].sensitive = False elif ( isinstance(self.gamemodel, ICGameModel) and self.gamemodel.status in UNFINISHED_STATES ): if self.gamemodel.ply < 2: self.menuitems["abort"].label = _("Abort") self.menuitems["abort"].tooltip = _( "This game can be automatically aborted without rating loss because \ there has not yet been two moves made" ) else: self.menuitems["abort"].label = _("Offer Abort") self.menuitems["abort"].tooltip = _( "Your opponent must agree to abort the game because there \ has been two or more moves made" ) self.menuitems["abort"].sensitive = True else: self.menuitems["abort"].sensitive = False self.menuitems["abort"].tooltip = "" def _update_menu_adjourn(self): self.menuitems["adjourn"].sensitive = ( isinstance(self.gamemodel, ICGameModel) and self.gamemodel.status in UNFINISHED_STATES and not self.gamemodel.isObservationGame() and not self.gamemodel.hasGuestPlayers() ) if ( isinstance(self.gamemodel, ICGameModel) and self.gamemodel.status in UNFINISHED_STATES and not self.gamemodel.isObservationGame() and self.gamemodel.hasGuestPlayers() ): self.menuitems["adjourn"].tooltip = _( "This game can not be adjourned because one or both players are guests" ) else: self.menuitems["adjourn"].tooltip = "" def _update_menu_draw(self): self.menuitems["draw"].sensitive = ( self.gamemodel.status in UNFINISHED_STATES and not self.gamemodel.isObservationGame() ) def can_win(color): if self.gamemodel.timed: return ( playerHasMatingMaterial(self.gamemodel.boards[-1], color) and self.gamemodel.timemodel.getPlayerTime(color) > 0 ) else: return playerHasMatingMaterial(self.gamemodel.boards[-1], color) if isClaimableDraw(self.gamemodel.boards[-1]) or not ( can_win(self.gamemodel.players[0].color) or can_win(self.gamemodel.players[1].color) ): self.menuitems["draw"].label = _("Claim Draw") def _update_menu_resign(self): self.menuitems["resign"].sensitive = ( self.gamemodel.status in UNFINISHED_STATES and not self.gamemodel.isObservationGame() ) def _update_menu_pause_and_resume(self): def game_is_pausable(): if self.gamemodel.isEngine2EngineGame() or ( self.gamemodel.hasLocalPlayer() and ( self.gamemodel.isLocalGame() or ( isinstance(self.gamemodel, ICGameModel) and self.gamemodel.ply > 1 ) ) ): if sys.platform == "win32" and self.gamemodel.hasEnginePlayer(): return False else: return True else: return False self.menuitems["pause1"].sensitive = ( self.gamemodel.status == RUNNING and game_is_pausable() ) self.menuitems["resume1"].sensitive = ( self.gamemodel.status == PAUSED and game_is_pausable() ) # TODO: if IC game is over and game ended in adjournment # and opponent is available, enable Resume def _update_menu_undo(self): if self.gamemodel.isObservationGame(): self.menuitems["undo1"].sensitive = False elif isinstance(self.gamemodel, ICGameModel): if self.gamemodel.status in UNFINISHED_STATES and self.gamemodel.ply > 0: self.menuitems["undo1"].sensitive = True else: self.menuitems["undo1"].sensitive = False elif self.gamemodel.ply > 0 and self.gamemodel.status in UNDOABLE_STATES + ( RUNNING, ): self.menuitems["undo1"].sensitive = True else: self.menuitems["undo1"].sensitive = False def _update_menu_ask_to_move(self): if self.gamemodel.isObservationGame(): self.menuitems["ask_to_move"].sensitive = False elif isinstance(self.gamemodel, ICGameModel): self.menuitems["ask_to_move"].sensitive = False elif ( self.gamemodel.waitingplayer.__type__ == LOCAL and self.gamemodel.status in UNFINISHED_STATES and self.gamemodel.status != PAUSED ): self.menuitems["ask_to_move"].sensitive = True else: self.menuitems["ask_to_move"].sensitive = False def _showHolding(self, holding): figurines = ["", ""] for color in (BLACK, WHITE): for piece in holding[color].keys(): count = holding[color][piece] figurines[color] += ( " " if count == 0 else FAN_PIECES[color][piece] * count ) print(figurines[BLACK] + " " + figurines[WHITE]) def shownChanged(self, boardview, shown): # Help crazyhouse testing # if self.gamemodel.boards[-1].variant == CRAZYHOUSECHESS: # holding = self.gamemodel.getBoardAtPly(shown, boardview.variation).board.holding # self._showHolding(holding) if ( self.gamemodel.timemodel.hasTimes and ( self.gamemodel.endstatus or self.gamemodel.status in (DRAW, WHITEWON, BLACKWON) ) and boardview.shownIsMainLine() ): wmovecount, color = divmod(shown + 1, 2) bmovecount = wmovecount - 1 if color == WHITE else wmovecount if self.gamemodel.timemodel.hasBWTimes(bmovecount, wmovecount): self.clock.update(wmovecount, bmovecount) self.on_shapes_changed(self.board) def game_started(self, gamemodel): if self.gamemodel.isLocalGame(): self.menuitems["abort"].label = _("Abort") self._update_menu_abort() self._update_menu_adjourn() self._update_menu_draw() if self.gamemodel.isLocalGame(): self.menuitems["pause1"].label = _("Pause") self.menuitems["resume1"].label = _("Resume") else: self.menuitems["pause1"].label = _("Offer Pause") self.menuitems["resume1"].label = _("Offer Resume") self._update_menu_pause_and_resume() self._update_menu_resign() if self.gamemodel.isLocalGame(): self.menuitems["undo1"].label = _("Undo") else: self.menuitems["undo1"].label = _("Offer Undo") self._update_menu_undo() self._update_menu_ask_to_move() if isinstance(gamemodel, ICGameModel) and not gamemodel.isObservationGame(): for item in self.menuitems: if item in self.menuitems.ANAL_MENU_ITEMS: self.menuitems[item].sensitive = False if not gamemodel.timed and not gamemodel.timemodel.hasTimes: try: self.boardvbox.remove(self.clock.get_parent()) except TypeError: # no clock pass def game_ended(self, gamemodel, reason): for item in self.menuitems: if item in self.menuitems.ANAL_MENU_ITEMS: self.menuitems[item].sensitive = True elif item not in self.menuitems.VIEW_MENU_ITEMS: self.menuitems[item].sensitive = False self._update_menu_undo() self._set_arrow(HINT, None) self._set_arrow(SPY, None) return False def game_changed(self, gamemodel, ply): """This runs when the game changes. It updates everything.""" self._update_menu_abort() self._update_menu_ask_to_move() self._update_menu_draw() self._update_menu_pause_and_resume() self._update_menu_undo() if isinstance(gamemodel, ICGameModel): # on FICS game board change update allob if gamemodel.connection is not None and not gamemodel.connection.ICC: allob = "allob " + str(gamemodel.ficsgame.gameno) gamemodel.connection.client.run_command(allob) for analyzer_type in (HINT, SPY): # only clear arrows if analyzer is examining the last position if ( analyzer_type in gamemodel.spectators and gamemodel.spectators[analyzer_type].board == gamemodel.boards[-1] ): self._set_arrow(analyzer_type, None) self.name_changed(gamemodel.players[0]) # We may need to add * to name if gamemodel.isObservationGame() and not self.isInFront(): self.light_on_off(True) # print(gamemodel.waitingplayer, gamemodel.waitingplayer.__type__) if not gamemodel.isPlayingICSGame(): self.clearMessages() return False def game_saved(self, gamemodel, uri): """Run when the game is saved. Will remove * from title.""" self.name_changed(gamemodel.players[0]) # We may need to remove * in name return False def game_paused(self, gamemodel): self._update_menu_pause_and_resume() self._update_menu_undo() self._update_menu_ask_to_move() return False def game_resumed(self, gamemodel): self._update_menu_pause_and_resume() self._update_menu_undo() self._update_menu_ask_to_move() return False def moves_undone(self, gamemodel, moves): self.game_changed(gamemodel, 0) return False def game_unended(self, gamemodel): self._update_menu_abort() self._update_menu_adjourn() self._update_menu_draw() self._update_menu_pause_and_resume() self._update_menu_resign() self._update_menu_undo() self._update_menu_ask_to_move() return False def _set_arrow(self, analyzer_type, coordinates): if self.gamemodel.isPlayingICSGame(): return try: if analyzer_type == HINT: self.board.view._setGreenarrow(coordinates) else: self.board.view._setRedarrow(coordinates) except AttributeError: # first cord is None pass def _on_analyze(self, analyzer, analysis, analyzer_type): if self.board.view.animating: return if not self.menuitems[analyzer_type + "_mode"].active: return if len(analysis) >= 1 and analysis[0] is not None: ply, movstrs, score, depth, nps = analysis[0] board = analyzer.board try: moves = listToMoves(board, movstrs, validate=True) except ParsingError as e: # ParsingErrors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug( "GameWidget._on_analyze(): Ignored (%s) from analyzer: ParsingError%s" % (" ".join(movstrs), e) ) return if moves and ( self.gamemodel.curplayer.__type__ == LOCAL or [player.__type__ for player in self.gamemodel.players] == [REMOTE, REMOTE] or self.gamemodel.status not in UNFINISHED_STATES ): if moves[0].flag == DROP: piece = lmove.FCORD(moves[0].move) color = board.color if analyzer_type == HINT else 1 - board.color cord0 = board.getHoldingCord(color, piece) self._set_arrow(analyzer_type, (cord0, moves[0].cord1)) else: self._set_arrow(analyzer_type, moves[0].cords) else: self._set_arrow(analyzer_type, None) return False def analyzer_added(self, gamemodel, analyzer, analyzer_type): self.cids[analyzer] = analyzer.connect( "analyze", self._on_analyze, analyzer_type ) # self.menuitems[analyzer_type + "_mode"].active = True self.menuitems[analyzer_type + "_mode"].sensitive = True return False def analyzer_removed(self, gamemodel, analyzer, analyzer_type): self._set_arrow(analyzer_type, None) # self.menuitems[analyzer_type + "_mode"].active = False self.menuitems[analyzer_type + "_mode"].sensitive = False try: if analyzer.handler_is_connected(self.cids[analyzer]): analyzer.disconnect(self.cids[analyzer]) del self.cids[analyzer] except KeyError: pass return False def show_arrow(self, analyzer, analyzer_type): self.menuitems[analyzer_type + "_mode"].active = True self._on_analyze(analyzer, analyzer.getAnalysis(), analyzer_type) return False def hide_arrow(self, analyzer, analyzer_type): self.menuitems[analyzer_type + "_mode"].active = False self._set_arrow(analyzer_type, None) return False def player_display_text(self, color, with_elo): text = "" if isinstance(self.gamemodel, ICGameModel): if self.gamemodel.ficsplayers: text = self.gamemodel.ficsplayers[color].name if ( self.gamemodel.connection.username == self.gamemodel.ficsplayers[color].name ) and self.gamemodel.ficsplayers[color].isGuest(): text += " (Player)" else: if self.gamemodel.players: text = repr(self.gamemodel.players[color]) if with_elo: elo = self.gamemodel.tags.get("WhiteElo" if color == WHITE else "BlackElo") if elo not in [None, "", "?", "0", 0]: text += " (%s)" % str(elo) return text @property def display_text(self): if not self.gamemodel.players: return "" """This will give you the name of the game.""" vs = " - " t = vs.join( ( self.player_display_text(WHITE, True), self.player_display_text(BLACK, True), ) ) return t def players_changed(self, gamemodel): log.debug("GameWidget.players_changed: starting %s" % repr(gamemodel)) for player in gamemodel.players: self.name_changed(player) # Notice that this may connect the same player many times. In # normal use that shouldn't be a problem. self.cids[player] = player.connect("name_changed", self.name_changed) log.debug("GameWidget.players_changed: returning") def name_changed(self, player): log.debug("GameWidget.name_changed: starting %s" % repr(player)) color = self.gamemodel.color(player) if self.gamemodel is None: return name = self.player_display_text(color, False) self.gamemodel.tags["White" if color == WHITE else "Black"] = name self.player_name_labels[color].set_text(name) if isinstance(self.gamemodel, ICGameModel) and player.__type__ == REMOTE: self.player_name_labels[color].set_tooltip_text( get_player_tooltip_text( self.gamemodel.ficsplayers[color], show_status=False ) ) self.emit("title_changed", self.display_text) log.debug("GameWidget.name_changed: returning") def message_received(self, gamemodel, name, msg): if gamemodel.isObservationGame() and not self.isInFront(): text = self.game_info_label.get_text() self.game_info_label.set_markup( '%s' % text ) def zero_reached(self, timemodel, color): if self.gamemodel.status not in UNFINISHED_STATES: return if ( self.gamemodel.players[0].__type__ == LOCAL and self.gamemodel.players[1].__type__ == LOCAL ): self.menuitems["call_flag"].sensitive = True return for player in self.gamemodel.players: opplayercolor = BLACK if player == self.gamemodel.players[WHITE] else WHITE if player.__type__ == LOCAL and opplayercolor == color: log.debug( "gamewidget.zero_reached: LOCAL player=%s, color=%s" % (repr(player), str(color)) ) self.menuitems["call_flag"].sensitive = True break def player_lagged(self, bm, player): if player in self.gamemodel.ficsplayers: content = get_infobarmessage_content( player, _(" has lagged for 30 seconds"), self.gamemodel.ficsgame.game_type, ) def response_cb(infobar, response, message): message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.INFO, content, response_cb) message.add_button( InfoBarMessageButton(Gtk.STOCK_CLOSE, Gtk.ResponseType.CANCEL) ) self.showMessage(message) return False def opp_not_out_of_time(self, bm): if self.gamemodel is not None and self.gamemodel.remote_player.time <= 0: content = get_infobarmessage_content2( self.gamemodel.remote_ficsplayer, _(" is lagging heavily but hasn't disconnected"), _("Continue to wait for opponent, or try to adjourn the game?"), gametype=self.gamemodel.ficsgame.game_type, ) def response_cb(infobar, response, message): if response == 2: self.gamemodel.connection.client.run_command("adjourn") message.dismiss() return False message = InfoBarMessage(Gtk.MessageType.QUESTION, content, response_cb) message.add_button(InfoBarMessageButton(_("Wait"), Gtk.ResponseType.CANCEL)) message.add_button(InfoBarMessageButton(_("Adjourn"), 2)) self.showMessage(message) return False def on_game_close_clicked(self, button): log.debug("gamewidget.on_game_close_clicked %s" % button) self.emit("game_close_clicked") def initTabcontents(self): tabcontent = createAlignment(0, 0, 0, 0) hbox = Gtk.HBox() hbox.set_spacing(4) hbox.pack_start(createImage(light_off), False, True, 0) close_button = Gtk.Button() close_button.set_property("can-focus", False) close_button.add(createImage(gtk_close)) close_button.set_relief(Gtk.ReliefStyle.NONE) close_button.set_size_request(20, 18) self.cids[close_button] = close_button.connect( "clicked", self.on_game_close_clicked ) hbox.pack_end(close_button, False, True, 0) text_hbox = Gtk.HBox() white_label = Gtk.Label(label="") text_hbox.pack_start(white_label, False, True, 0) text_hbox.pack_start(Gtk.Label(label=" - "), False, True, 0) black_label = Gtk.Label(label="") text_hbox.pack_start(black_label, False, True, 0) gameinfo_label = Gtk.Label(label="") text_hbox.pack_start(gameinfo_label, False, True, 0) # label.set_alignment(0,.7) hbox.pack_end(text_hbox, True, True, 0) tabcontent.add(hbox) tabcontent.show_all() # Gtk doesn't show tab labels when the rest is return tabcontent, white_label, black_label, gameinfo_label def initBoardAndClock(self, gamemodel): boardvbox = Gtk.VBox() boardvbox.set_spacing(2) infobar = InfoBarNotebook("gamewidget_infobar") ccalign = createAlignment(0, 0, 0, 0) cclock = ChessClock() cclock.setModel(gamemodel.timemodel) ccalign.add(cclock) ccalign.set_size_request(-1, 32) boardvbox.pack_start(ccalign, False, True, 0) actionMenuDic = {} for item in ACTION_MENU_ITEMS: actionMenuDic[item] = widgets[item] if self.gamemodel.offline_lecture: preview = True else: preview = False board = BoardControl(gamemodel, actionMenuDic, game_preview=preview) boardvbox.pack_start(board, True, True, 0) return boardvbox, board, infobar, cclock def initButtons(self, board): align = createAlignment(4, 0, 4, 0) toolbar = Gtk.Toolbar() image1 = get_pixbuf("glade/first.png") firstButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image1)) firstButton.set_tooltip_text(_("Jump to initial position")) toolbar.insert(firstButton, -1) image2 = get_pixbuf("glade/prev.png") prevButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image2)) prevButton.set_tooltip_text(_("Step back one move")) toolbar.insert(prevButton, -1) image3 = get_pixbuf("glade/mainline.png") mainButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image3)) mainButton.set_tooltip_text(_("Go back to the main line")) toolbar.insert(mainButton, -1) image4 = get_pixbuf("glade/parent.png") upButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image4)) upButton.set_tooltip_text(_("Go back to the parent line")) toolbar.insert(upButton, -1) image5 = get_pixbuf("glade/next.png") nextButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image5)) nextButton.set_tooltip_text(_("Step forward one move")) toolbar.insert(nextButton, -1) image6 = get_pixbuf("glade/last.png") lastButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image6)) lastButton.set_tooltip_text(_("Jump to latest position")) toolbar.insert(lastButton, -1) image7 = get_pixbuf("glade/find.png") filterButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image7)) filterButton.set_tooltip_text(_("Find position in current database")) toolbar.insert(filterButton, -1) image8 = get_pixbuf("glade/save.png") self.saveButton = Gtk.ToolButton.new(Gtk.Image.new_from_pixbuf(image8)) self.saveButton.set_tooltip_text(_("Save arrows/circles")) toolbar.insert(self.saveButton, -1) def on_clicked(button, func): # Prevent moving in game while lesson not finished if self.gamemodel.lesson_game and not self.gamemodel.solved: return else: func() self.cids[firstButton] = firstButton.connect( "clicked", on_clicked, self.board.view.showFirst ) self.cids[prevButton] = prevButton.connect( "clicked", on_clicked, self.board.view.showPrev ) self.cids[mainButton] = mainButton.connect( "clicked", on_clicked, self.board.view.backToMainLine ) self.cids[upButton] = upButton.connect( "clicked", on_clicked, self.board.view.backToParentLine ) self.cids[nextButton] = nextButton.connect( "clicked", on_clicked, self.board.view.showNext ) self.cids[lastButton] = lastButton.connect( "clicked", on_clicked, self.board.view.showLast ) self.cids[filterButton] = filterButton.connect( "clicked", on_clicked, self.find_in_database ) self.cids[self.saveButton] = self.saveButton.connect( "clicked", on_clicked, self.save_shapes_to_pgn ) self.on_shapes_changed(self.board) self.board.connect("shapes_changed", self.on_shapes_changed) tool_box = Gtk.Box() tool_box.pack_start(toolbar, True, True, 0) align.add(tool_box) return align def on_shapes_changed(self, boardcontrol): self.saveButton.set_sensitive(boardcontrol.view.has_unsaved_shapes) def find_in_database(self): persp = perspective_manager.get_perspective("database") if persp.chessfile is None: dialogue = Gtk.MessageDialog( pychess.widgets.mainwindow(), type=Gtk.MessageType.ERROR, buttons=Gtk.ButtonsType.OK, message_format=_("No database is currently opened."), ) dialogue.run() dialogue.destroy() return view = self.board.view shown_board = self.gamemodel.getBoardAtPly(view.shown, view.shown_variation_idx) fen = shown_board.asFen() tool, found = persp.chessfile.has_position(fen) if not found: dialogue = Gtk.MessageDialog( pychess.widgets.mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, message_format=_("The position does not exist in the database."), ) dialogue.run() dialogue.destroy() else: if tool == TOOL_CHESSDB: persp.chessfile.set_fen_filter(fen) elif tool == TOOL_SCOUTFISH: dialogue = Gtk.MessageDialog( pychess.widgets.mainwindow(), type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, message_format=_( "An approximate position has been found. Do you want to display it ?" ), ) response = dialogue.run() dialogue.destroy() if response != Gtk.ResponseType.YES: return persp.chessfile.set_scout_filter({"sub-fen": fen}) else: raise RuntimeError("Internal error") persp.gamelist.ply = view.shown persp.gamelist.load_games() perspective_manager.activate_perspective("database") def save_shapes_to_pgn(self): view = self.board.view shown_board = self.gamemodel.getBoardAtPly(view.shown, view.shown_variation_idx) for child in shown_board.board.children: if isinstance(child, str): if child.lstrip().startswith("[%csl "): shown_board.board.children.remove(child) self.gamemodel.needsSave = True elif child.lstrip().startswith("[%cal "): shown_board.board.children.remove(child) self.gamemodel.needsSave = True if view.circles: csl = [] for circle in view.circles: csl.append(f"{circle.color}{repr(circle)}") shown_board.board.children = [ "[%%csl %s]" % ",".join(csl) ] + shown_board.board.children self.gamemodel.needsSave = True if view.arrows: cal = [] for arrow in view.arrows: cal.append(f"{arrow[0].color}{repr(arrow[0])}{repr(arrow[1])}") shown_board.board.children = [ "[%%cal %s]" % ",".join(cal) ] + shown_board.board.children self.gamemodel.needsSave = True view.saved_arrows = set() view.saved_arrows |= view.arrows view.saved_circles = set() view.saved_circles |= view.circles self.on_shapes_changed(self.board) def light_on_off(self, on): child = self.tabcontent.get_child() if child: child.remove(child.get_children()[0]) if on: # child.pack_start(createImage(light_on, True, True, 0), expand=False) child.pack_start(createImage(light_on), True, True, 0) else: # child.pack_start(createImage(light_off, True, True, 0), expand=False) child.pack_start(createImage(light_off), True, True, 0) self.tabcontent.show_all() def setLocked(self, locked): """Makes the board insensitive and turns off the tab ready indicator""" log.debug( "GameWidget.setLocked: {} locked={}".format( self.gamemodel.players, str(locked) ) ) self.board.setLocked(locked) if not self.tabcontent.get_children(): return if len(self.tabcontent.get_child().get_children()) < 2: log.warning("GameWidget.setLocked: Not removing last tabcontent child") return self.light_on_off(not locked) log.debug("GameWidget.setLocked: %s: returning" % self.gamemodel.players) def bringToFront(self): self.perspective.getheadbook().set_current_page(self.getPageNumber()) def isInFront(self): if not self.perspective.getheadbook(): return False return self.perspective.getheadbook().get_current_page() == self.getPageNumber() def getPageNumber(self): return self.perspective.getheadbook().page_num(self.notebookKey) def infobar_hidden(self, infobar): if self == self.perspective.cur_gmwidg(): self.perspective.notebooks["messageArea"].hide() def showMessage(self, message): self.infobar.push_message(message) if self == self.perspective.cur_gmwidg(): self.perspective.notebooks["messageArea"].show() def replaceMessages(self, message): """Replace all messages with message""" if not self.closed: self.infobar.clear_messages() self.showMessage(message) def clearMessages(self): self.infobar.clear_messages() if self == self.perspective.cur_gmwidg(): self.perspective.notebooks["messageArea"].hide() # ############################################################################### # Handling of the special sidepanels-design-gamewidget used in preferences # # ############################################################################### designGW = None def showDesignGW(): global designGW perspective = perspective_manager.get_perspective("games") designGW = GameWidget(GameModel(), perspective) if isDesignGWShown(): return getWidgets()["show_sidepanels"].set_active(True) getWidgets()["show_sidepanels"].set_sensitive(False) perspective.attachGameWidget(designGW) def hideDesignGW(): if isDesignGWShown(): perspective = perspective_manager.get_perspective("games") perspective.delGameWidget(designGW) getWidgets()["show_sidepanels"].set_sensitive(True) def isDesignGWShown(): perspective = perspective_manager.get_perspective("games") return designGW in perspective.key2gmwidg.values() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/newGameDialog.py0000644000175100001770000013102414614030313021543 0ustar00runnerdockerimport asyncio import os import os.path import gettext import locale import sys from math import pi from operator import attrgetter from itertools import groupby from io import StringIO import gi try: gi.require_version("Gdk", "3.0") gi.require_version("GLib", "2.0") gi.require_version("GObject", "2.0") gi.require_version("Gtk", "3.0") from gi.repository import Gdk, Gtk, GLib, GObject gi.require_version("GtkSource", "3.0") from gi.repository import GtkSource except Exception: print("Failed to import required gi module version") sys.exit(1) from pychess.Utils.IconLoader import load_icon, get_pixbuf from pychess.Utils.GameModel import GameModel from pychess.Utils.SetupModel import SetupModel, SetupPlayer from pychess.Utils.TimeModel import TimeModel from pychess.Utils.const import ( NORMALCHESS, VARIANTS_BLINDFOLD, FISCHERRANDOMCHESS, VARIANTS_ODDS, VARIANTS_SHUFFLE, VARIANTS_OTHER, VARIANTS_OTHER_NONSTANDARD, VARIANTS_ASEAN, WHITE, BLACK, UNSUPPORTED, ARTIFICIAL, LOCAL, reprCord, reprFile, W_OO, W_OOO, B_OO, B_OOO, FAN_PIECES, reprSign, FEN_START, WAITING_TO_START, ) from pychess.Utils.repr import localReprSign from pychess.Utils.lutils.ldata import FILE from pychess.Utils.lutils.LBoard import LBoard from pychess.System import uistuff from pychess.System.Log import log from pychess.System.protoopen import splitUri from pychess.System import conf from pychess.System.prefix import getDataPrefix, isInstalled, addDataPrefix from pychess.Players.engineNest import discoverer from pychess.Players.Human import Human from pychess.widgets import ImageMenu, mainwindow from pychess.widgets.prompttext import getUserTextDialog from pychess.widgets.BoardControl import BoardControl from pychess.Savers import fen, pgn from pychess.Savers.ChessFile import LoadingError from pychess.Variants import variants from pychess.Variants.normal import NormalBoard from pychess.perspectives import perspective_manager from pychess.perspectives.games import enddir from pychess.Utils.eco import find_opening_fen # =============================================================================== # We init most dialog icons global to make them accessibly to the # Background.Taskers so they have a similar look. # =============================================================================== big_time = get_pixbuf("glade/stock_alarm.svg") big_people = get_pixbuf("glade/people48.png") iwheels = get_pixbuf("glade/wheel.png") ipeople = get_pixbuf("glade/people24.png") inotebook = load_icon(24, "stock_notebook", "computer") weather_icons = ( "clear", "clear-night", "few-clouds", "few-clouds-night", "fog", "overcast", "severe-alert", "showers-scattered", "showers", "storm", ) skillToIcon = {} # Used by TaskerManager. Put here to help synchronization skillToIconLarge = {} for i, icon in enumerate(weather_icons, start=1): skillToIcon[2 * i - 1] = get_pixbuf("glade/16x16/weather-%s.png" % icon) skillToIcon[2 * i] = get_pixbuf("glade/16x16/weather-%s.png" % icon) skillToIconLarge[2 * i - 1] = get_pixbuf("glade/48x48/weather-%s.png" % icon) skillToIconLarge[2 * i] = get_pixbuf("glade/48x48/weather-%s.png" % icon) playerItems = [] analyzerItems = [] allEngineItems = [] def createPlayerUIGlobals(discoverer): global playerItems global analyzerItems global allEngineItems playerItems = [] analyzerItems = [] allEngineItems = [] for variantClass in variants.values(): playerItems += [[(ipeople, _("Human Being"))]] for engine in discoverer.getEngines(): name = engine["name"] c = discoverer.getCountry(engine) path = addDataPrefix("flags/%s.png" % c) if c and os.path.isfile(path): flag_icon = get_pixbuf(path) else: path = addDataPrefix("flags/unknown.png") flag_icon = get_pixbuf(path) allEngineItems.append((flag_icon, name)) for variant in discoverer.getEngineVariants(engine): playerItems[variant] += [(flag_icon, name)] if discoverer.is_analyzer(engine): analyzerItems.append((flag_icon, name)) discoverer.connect("all_engines_discovered", createPlayerUIGlobals) COPY, CLEAR, PASTE, INITIAL = 2, 3, 4, 5 # =============================================================================== # GameInitializationMode is the super class of new game dialogs. Dialogs include # the standard new game dialog, the load file dialog, the enter notation dialog # and the setup position dialog. # =============================================================================== class _GameInitializationMode: @classmethod def _ensureReady(cls): if not hasattr(_GameInitializationMode, "superhasRunInit"): _GameInitializationMode._init() _GameInitializationMode.superhasRunInit = True if not hasattr(cls, "hasRunInit"): cls._init() cls.hasRunInit = True cls.widgets["newgamedialog"].resize(1, 1) @classmethod def _init(cls): cls.white = get_pixbuf("glade/white.png") cls.black = get_pixbuf("glade/black.png") cls.widgets = uistuff.GladeWidgets("newInOut.glade") cls.widgets["newgamedialog"].set_transient_for(mainwindow()) def on_exchange_players(widget, button_event): white = cls.widgets["whitePlayerCombobox"].get_active() black = cls.widgets["blackPlayerCombobox"].get_active() whiteLevel = cls.widgets["skillSlider1"].get_value() blackLevel = cls.widgets["skillSlider2"].get_value() cls.widgets["whitePlayerCombobox"].set_active(black) cls.widgets["blackPlayerCombobox"].set_active(white) cls.widgets["skillSlider1"].set_value(blackLevel) cls.widgets["skillSlider2"].set_value(whiteLevel) cls.widgets["whitePlayerButton"].set_image(Gtk.Image.new_from_pixbuf(cls.white)) cls.widgets["whitePlayerButton"].connect( "button-press-event", on_exchange_players ) cls.widgets["blackPlayerButton"].set_image(Gtk.Image.new_from_pixbuf(cls.black)) cls.widgets["blackPlayerButton"].connect( "button-press-event", on_exchange_players ) uistuff.createCombo( cls.widgets["whitePlayerCombobox"], name="whitePlayerCombobox" ) uistuff.createCombo( cls.widgets["blackPlayerCombobox"], name="blackPlayerCombobox" ) cls.widgets["playersIcon"].set_from_pixbuf(big_people) cls.widgets["timeIcon"].set_from_pixbuf(big_time) def on_playerCombobox_changed(widget, skill_hbox, skill_level): position = widget.get_active() skill_hbox.props.visible = position > 0 if position > 0: tree_iter = widget.get_active_iter() if tree_iter is not None: engine_name = widget.get_model()[tree_iter][1] engine = discoverer.getEngineByName(engine_name) if engine: pref_level = engine.get("level") if pref_level: skill_level.set_value(pref_level) cls.widgets["whitePlayerCombobox"].connect( "changed", on_playerCombobox_changed, cls.widgets["skillHbox1"], cls.widgets["skillSlider1"], ) cls.widgets["blackPlayerCombobox"].connect( "changed", on_playerCombobox_changed, cls.widgets["skillHbox2"], cls.widgets["skillSlider2"], ) cls.widgets["whitePlayerCombobox"].set_active(0) cls.widgets["blackPlayerCombobox"].set_active(1) def on_skill_changed(scale, image): image.set_from_pixbuf(skillToIcon[int(scale.get_value())]) cls.widgets["skillSlider1"].connect( "value-changed", on_skill_changed, cls.widgets["skillIcon1"] ) cls.widgets["skillSlider2"].connect( "value-changed", on_skill_changed, cls.widgets["skillIcon2"] ) cls.widgets["skillSlider1"].set_value(3) cls.widgets["skillSlider2"].set_value(3) cls.__initTimeRadio( "ngblitz", cls.widgets["blitzRadio"], cls.widgets["configImageBlitz"], 5, 0, 0, ) cls.__initTimeRadio( "ngrapid", cls.widgets["rapidRadio"], cls.widgets["configImageRapid"], 15, 5, 0, ) cls.__initTimeRadio( "ngnormal", cls.widgets["normalRadio"], cls.widgets["configImageNormal"], 45, 15, 0, ) cls.__initTimeRadio( "ngclassical", cls.widgets["classicalRadio"], cls.widgets["configImageClassical"], 3, 0, 40, ) cls.__initVariantRadio( "ngvariant1", cls.widgets["playVariant1Radio"], cls.widgets["configImageVariant1"], ) cls.__initVariantRadio( "ngvariant2", cls.widgets["playVariant2Radio"], cls.widgets["configImageVariant2"], ) def updateCombos(*args): if cls.widgets["playNormalRadio"].get_active(): variant = NORMALCHESS elif cls.widgets["playVariant1Radio"].get_active(): variant = conf.get("ngvariant1") else: variant = conf.get("ngvariant2") variant1 = conf.get("ngvariant1") cls.widgets["playVariant1Radio"].set_tooltip_text( variants[variant1].__desc__ ) variant2 = conf.get("ngvariant2") cls.widgets["playVariant2Radio"].set_tooltip_text( variants[variant2].__desc__ ) data = [(item[0], item[1]) for item in playerItems[variant]] uistuff.updateCombo(cls.widgets["blackPlayerCombobox"], data) uistuff.updateCombo(cls.widgets["whitePlayerCombobox"], data) discoverer.connect_after("all_engines_discovered", updateCombos) updateCombos(discoverer) conf.notify_add("ngvariant1", updateCombos) conf.notify_add("ngvariant2", updateCombos) cls.widgets["playNormalRadio"].connect("toggled", updateCombos) cls.widgets["playNormalRadio"].set_tooltip_text(variants[NORMALCHESS].__desc__) cls.widgets["playVariant1Radio"].connect("toggled", updateCombos) variant1 = conf.get("ngvariant1") cls.widgets["playVariant1Radio"].set_tooltip_text(variants[variant1].__desc__) cls.widgets["playVariant2Radio"].connect("toggled", updateCombos) variant2 = conf.get("ngvariant2") cls.widgets["playVariant2Radio"].set_tooltip_text(variants[variant2].__desc__) # The "variant" has to come before players, because the engine positions # in the user comboboxes can be different in different variants for key in ( "whitePlayerCombobox", "blackPlayerCombobox", "skillSlider1", "skillSlider2", "notimeRadio", "blitzRadio", "rapidRadio", "normalRadio", "classicalRadio", "playNormalRadio", "playVariant1Radio", "playVariant2Radio", ): uistuff.keep(cls.widgets[key], key) # We don't want the dialog to deallocate when closed. Rather we hide # it on respond cls.widgets["newgamedialog"].connect("delete_event", lambda *a: True) @classmethod def __initTimeRadio(cls, id, radiobutton, configImage, defmin, defgain, defmoves): minSpin = Gtk.SpinButton() minSpin.set_adjustment(Gtk.Adjustment(1, 0, 240, 1)) setattr(cls, "%s_min" % id, minSpin) uistuff.keep(minSpin, "%s min" % id) movesSpin = Gtk.SpinButton() movesSpin.set_adjustment(Gtk.Adjustment(0, 0, 60, 20)) setattr(cls, "%s_moves" % id, movesSpin) uistuff.keep(movesSpin, "%s moves" % id) gainSpin = Gtk.SpinButton() gainSpin.set_adjustment(Gtk.Adjustment(0, -60, 60, 1)) setattr(cls, "%s_gain" % id, gainSpin) uistuff.keep(gainSpin, "%s gain" % id) table = Gtk.Table(2, 2) table.props.row_spacing = 3 table.props.column_spacing = 12 label = Gtk.Label(label=_("Minutes:")) label.props.xalign = 0 table.attach(label, 0, 1, 0, 1) table.attach(minSpin, 1, 2, 0, 1) label = Gtk.Label(label=_("Moves:") if defmoves > 0 else _("Gain:")) label.props.xalign = 0 table.attach(label, 0, 1, 1, 2) if defmoves > 0: table.attach(movesSpin, 1, 2, 1, 2) else: table.attach(gainSpin, 1, 2, 1, 2) alignment = Gtk.Alignment.new(1, 1, 1, 1) alignment.set_padding(6, 6, 12, 12) alignment.add(table) ImageMenu.switchWithImage(configImage, alignment) def updateString(spin): # Elements of the clock minutes = minSpin.get_value_as_int() gain = gainSpin.get_value_as_int() moves = movesSpin.get_value_as_int() # Duration of the game def calculate_duration(ref_moves): if moves > 0: return int(2 * minutes * ref_moves / moves) else: return max(0, int(2 * minutes + ref_moves * gain / 30)) duration_20 = calculate_duration(20) duration_40 = calculate_duration(40) duration_60 = calculate_duration(60) # Determination of the caption def get_game_name(): """https://www.fide.com/fide/handbook.html?id=171&view=article""" if defmoves > 0: return _("Classical") if duration_60 <= 20: # 10 minutes per player return _("Blitz") if duration_60 < 120: # 60 minutes per player return _("Rapid") return _("Normal") if moves > 0: radiobutton.set_label( _("%(name)s %(minutes)d min / %(moves)d moves %(duration)s") % { "name": get_game_name(), "minutes": minutes, "moves": moves, "duration": ("(%d')" % duration_40) if duration_40 > 0 else "", } ) elif gain != 0: radiobutton.set_label( _( "%(name)s %(minutes)d min %(sign)s %(gain)d sec/move %(duration)s" ) % { "name": get_game_name(), "minutes": minutes, "sign": "+" if gain > 0 else "–", "gain": abs(gain), "duration": ("(%d')" % duration_40) if duration_40 > 0 else "", } ) else: radiobutton.set_label( _("%(name)s %(minutes)d min %(duration)s") % { "name": get_game_name(), "minutes": minutes, "duration": ("(%d')" % duration_40) if duration_40 > 0 else "", } ) # Determination of the tooltip if duration_20 > 0 and duration_60 > 0 and duration_20 != duration_60: radiobutton.set_tooltip_text( _("Estimated duration : %(min)d - %(max)d minutes") % ( { "min": min(duration_20, duration_60), "max": max(duration_20, duration_60), } ) ) else: radiobutton.set_tooltip_text("") minSpin.connect("value-changed", updateString) movesSpin.connect("value-changed", updateString) gainSpin.connect("value-changed", updateString) updateString(None) @classmethod def __initVariantRadio(cls, confid, radiobutton, configImage): model = Gtk.TreeStore(str) treeview = Gtk.TreeView(model) treeview.set_headers_visible(False) treeview.append_column(Gtk.TreeViewColumn(None, Gtk.CellRendererText(), text=0)) alignment = Gtk.Alignment.new(1, 1, 1, 1) alignment.set_padding(6, 6, 12, 12) alignment.add(treeview) ImageMenu.switchWithImage(configImage, alignment) groupNames = { VARIANTS_BLINDFOLD: _("Blindfold"), VARIANTS_ODDS: _("Odds"), VARIANTS_SHUFFLE: _("Shuffle"), VARIANTS_OTHER: _("Other (standard rules)"), VARIANTS_OTHER_NONSTANDARD: _("Other (non standard rules)"), VARIANTS_ASEAN: _("Asian variants"), } specialVariants = [ v for v in variants.values() if v != NormalBoard and v.variant not in UNSUPPORTED ] specialVariants = sorted(specialVariants, key=attrgetter("variant_group")) groups = groupby(specialVariants, attrgetter("variant_group")) pathToVariant = {} variantToPath = {} for i, (id, group) in enumerate(groups): iter = model.append(None, (groupNames[id],)) for variant in group: subiter = model.append(iter, (variant.name,)) path = model.get_path(subiter) pathToVariant[path.to_string()] = variant.variant variantToPath[variant.variant] = path.to_string() treeview.expand_row(Gtk.TreePath(i), True) selection = treeview.get_selection() selection.set_mode(Gtk.SelectionMode.BROWSE) def selfunc(selection, store, path, path_selected, data): return path.get_depth() > 1 selection.set_select_function(selfunc, None) variant = conf.get(confid) if variant in variantToPath: selection.select_path(variantToPath[variant]) def callback(selection): model, iter = selection.get_selected() if iter: radiobutton.set_label("%s" % model.get(iter, 0) + _(" chess")) path = model.get_path(iter) variant = pathToVariant[path.to_string()] conf.set(confid, variant) selection.connect("changed", callback) callback(selection) @classmethod def _generalRun(cls, callback, validate): def onResponse(dialog, response): if response == COPY: clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text(cls.get_fen(), -1) # print("put clipboard:", clipboard.wait_for_text()) return elif response == CLEAR: cls.board_control.emit("action", "SETUP", None, True) cls.ini_widgets(True) # print("clear") return elif response == PASTE: clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text = clipboard.wait_for_text() # print("got clipboard:", text) if text is None or len(text.split()) < 2: return try: lboard = cls.setupmodel.variant(setup=text).board cls.ini_widgets(lboard.asFen()) cls.board_control.emit("action", "SETUP", None, text) except SyntaxError as e: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, message_format=e.args[0], ) if len(e.args) > 1: d.format_secondary_text(e.args[1]) d.connect("response", lambda d, a: d.hide()) d.show() return elif response == INITIAL: if os.environ.get( "PYCHESS_UNITTEST" ): # The modal dialog cannot be automated in the background ecofen = FEN_START else: ecoterms = getUserTextDialog( dialog, _("Start position from the opening book"), _("Type an ECO code or a keyword (with wildcard *):"), ) ecofen = find_opening_fen(ecoterms) if ecofen is None: if ecoterms != "": dlgwin = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, ) dlgwin.set_markup( _( "No position was found. Do you want to use the default setup ?" ) ) dlgrep = dlgwin.run() dlgwin.destroy() if dlgrep != Gtk.ResponseType.YES: return ecofen = FEN_START lboard = cls.setupmodel.variant(setup=ecofen).board cls.ini_widgets(lboard.asFen()) cls.board_control.emit("action", "SETUP", None, ecofen) return elif response != Gtk.ResponseType.OK: cls.widgets["newgamedialog"].hide() cls.widgets["newgamedialog"].disconnect(handlerId) return if hasattr(cls, "board_control"): cls.board_control.emit("action", "CLOSE", None, None) # Find variant if cls.widgets["playNormalRadio"].get_active(): variant_index = NORMALCHESS elif cls.widgets["playVariant1Radio"].get_active(): variant_index = conf.get("ngvariant1") else: variant_index = conf.get("ngvariant2") variant = variants[variant_index] # Find time if cls.widgets["notimeRadio"].get_active(): secs = 0 incr = 0 moves = 0 elif cls.widgets["blitzRadio"].get_active(): secs = cls.ngblitz_min.get_value_as_int() * 60 incr = cls.ngblitz_gain.get_value_as_int() moves = 0 elif cls.widgets["rapidRadio"].get_active(): secs = cls.ngrapid_min.get_value_as_int() * 60 incr = cls.ngrapid_gain.get_value_as_int() moves = 0 elif cls.widgets["normalRadio"].get_active(): secs = cls.ngnormal_min.get_value_as_int() * 60 incr = cls.ngnormal_gain.get_value_as_int() moves = 0 elif cls.widgets["classicalRadio"].get_active(): secs = cls.ngclassical_min.get_value_as_int() * 60 incr = 0 moves = cls.ngclassical_moves.get_value_as_int() # Find players player0combo = cls.widgets["whitePlayerCombobox"] player0 = player0combo.get_active() tree_iter = player0combo.get_active_iter() if tree_iter is not None: model = player0combo.get_model() name0 = model[tree_iter][1] diffi0 = int(cls.widgets["skillSlider1"].get_value()) player1combo = cls.widgets["blackPlayerCombobox"] player1 = player1combo.get_active() tree_iter = player1combo.get_active_iter() if tree_iter is not None: model = player1combo.get_model() name1 = model[tree_iter][1] diffi1 = int(cls.widgets["skillSlider2"].get_value()) # Prepare players playertups = [] for i, playerno, name, diffi, color in ( (0, player0, name0, diffi0, WHITE), (1, player1, name1, diffi1, BLACK), ): if playerno > 0: engine = discoverer.getEngineByName(name) playertups.append( ( ARTIFICIAL, discoverer.initPlayerEngine, [engine, color, diffi, variant, secs, incr, moves], name, ) ) else: if not playertups or playertups[0][0] != LOCAL: name = conf.get("firstName") else: name = conf.get("secondName") playertups.append((LOCAL, Human, (color, name), name)) # Set forcePonderOff initPlayerEngine param True in engine-engine games if playertups[0][0] == ARTIFICIAL and playertups[1][0] == ARTIFICIAL: playertups[0][2].append(True) playertups[1][2].append(True) timemodel = TimeModel(secs, incr, moves=moves) gamemodel = GameModel(timemodel, variant) if not validate(gamemodel): return else: cls.widgets["newgamedialog"].hide() cls.widgets["newgamedialog"].disconnect(handlerId) callback(gamemodel, playertups[0], playertups[1]) handlerId = cls.widgets["newgamedialog"].connect("response", onResponse) cls.widgets["newgamedialog"].show() @classmethod def _hideOthers(cls): for extension in ( "loadsidepanel", "enterGameNotationSidePanel", "setupPositionSidePanel", ): cls.widgets[extension].hide() for button in ("copy_button", "clear_button", "paste_button", "initial_button"): cls.widgets[button].hide() # ############################################################################### # NewGameMode # # ############################################################################### class NewGameMode(_GameInitializationMode): @classmethod def _init(cls): # We have to override this, so the GameInitializationMode init method # isn't called twice pass @classmethod def run(cls): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return def _validate(gamemodel): return True cls._hideOthers() cls.widgets["newgamedialog"].set_title(_("New Game")) def _callback(gamemodel, p0, p1): perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(gamemodel, p0, p1)) cls._generalRun(_callback, _validate) # ############################################################################### # SetupPositionExtension # # ############################################################################### class SetupPositionExtension(_GameInitializationMode): board_control = None @classmethod def _init(cls): def callback(widget, allocation): cls.widgets["setupPositionFrame"].set_size_request( 523, allocation.height - 4 ) cls.widgets["setupPositionSidePanel"].connect_after("size-allocate", callback) cls.castl = set() cls.white = Gtk.Image.new_from_pixbuf(cls.white) cls.black = Gtk.Image.new_from_pixbuf(cls.black) cls.widgets["side_button"].set_image(cls.white) cls.widgets["side_button"].connect("toggled", cls.side_button_toggled) cls.widgets["rotate_button"].connect( "button-press-event", cls.rotate_button_pressed ) cls.widgets["moveno_spin"].connect("value-changed", cls.moveno_spin_changed) cls.widgets["fifty_spin"].connect("value-changed", cls.fifty_spin_changed) cls.widgets["woo"].connect("toggled", cls.castl_toggled, W_OO) cls.widgets["wooo"].connect("toggled", cls.castl_toggled, W_OOO) cls.widgets["boo"].connect("toggled", cls.castl_toggled, B_OO) cls.widgets["booo"].connect("toggled", cls.castl_toggled, B_OOO) ep_store = Gtk.ListStore(str) ep_store.append(["-"]) for f in reprFile: ep_store.append([f]) epcombo = cls.widgets["ep_combo"] epcombo.set_name("ep_combo") epcombo.set_model(ep_store) renderer_text = Gtk.CellRendererText() cls.widgets["ep_combo"].pack_start(renderer_text, True) cls.widgets["ep_combo"].add_attribute(renderer_text, "text", 0) cls.widgets["ep_combo"].set_active(0) cls.widgets["ep_combo"].connect("changed", cls.ep_combo_changed) cls.widgets["playNormalRadio"].connect("toggled", cls.fen_changed) cls.widgets["playVariant1Radio"].connect("toggled", cls.fen_changed) cls.widgets["playVariant2Radio"].connect("toggled", cls.fen_changed) @classmethod def side_button_toggled(cls, button): if button.get_active(): button.set_image(cls.black) else: button.set_image(cls.white) cls.fen_changed() @classmethod def rotate_button_pressed(self, widget, button_event): view = self.board_control.view if view.rotation: view.rotation = 0 else: view.rotation = pi @classmethod def fen_changed(cls, *args): cls.widgets["fen_entry"].set_text(cls.get_fen()) @classmethod def game_changed(cls, model, ply): GLib.idle_add(cls.fen_changed) @classmethod def ep_combo_changed(cls, combo): cls.fen_changed() @classmethod def moveno_spin_changed(cls, spin): cls.fen_changed() @classmethod def fifty_spin_changed(cls, spin): cls.fen_changed() @classmethod def castl_toggled(cls, button, castl): lboard = cls.setupmodel.boards[-1].board # TODO: this doesn't work at all if lboard.variant == FISCHERRANDOMCHESS: if castl == W_OO: cast_letter = reprCord[lboard.ini_rooks[0][1]][0].upper() elif castl == W_OOO: cast_letter = reprCord[lboard.ini_rooks[0][0]][0].upper() elif castl == B_OO: cast_letter = reprCord[lboard.ini_rooks[1][1]][0] elif castl == B_OOO: cast_letter = reprCord[lboard.ini_rooks[1][0]][0] else: if castl == W_OO: cast_letter = "K" elif castl == W_OOO: cast_letter = "Q" elif castl == B_OO: cast_letter = "k" elif castl == B_OOO: cast_letter = "q" if button.get_active(): cls.castl.add(cast_letter) else: cls.castl.discard(cast_letter) cls.fen_changed() @classmethod def get_fen(cls): # Find variant if cls.widgets["playNormalRadio"].get_active(): variant_index = NORMALCHESS elif cls.widgets["playVariant1Radio"].get_active(): variant_index = conf.get("ngvariant1") else: variant_index = conf.get("ngvariant2") variant = variants[variant_index] pieces = cls.setupmodel.boards[-1].as_fen(variant.variant) side = "b" if cls.widgets["side_button"].get_active() else "w" castl = "".join(sorted(cls.castl)) if cls.castl else "-" ep = "-" rank = "3" if side == "b" else "6" tree_iter = cls.widgets["ep_combo"].get_active_iter() if tree_iter is not None: model = cls.widgets["ep_combo"].get_model() ep = model[tree_iter][0] ep = ep if ep == "-" else ep + rank fifty = cls.widgets["fifty_spin"].get_value_as_int() moveno = cls.widgets["moveno_spin"].get_value_as_int() parts = (pieces, side, castl, ep, fifty, moveno) return "%s %s %s %s %s %s" % parts @classmethod def ini_widgets(cls, setup, lboard=None): if lboard is None: lboard = cls.setupmodel.variant(setup=setup).board cls.widgets["side_button"].set_active(False if lboard.color == WHITE else True) cls.widgets["fifty_spin"].set_value(lboard.fifty) cls.widgets["moveno_spin"].set_value(lboard.plyCount // 2 + 1) ep = lboard.enpassant cls.widgets["ep_combo"].set_active(0 if ep is None else FILE(ep) + 1) cls.widgets["woo"].set_active(lboard.castling & W_OO) cls.widgets["wooo"].set_active(lboard.castling & W_OOO) cls.widgets["boo"].set_active(lboard.castling & B_OO) cls.widgets["booo"].set_active(lboard.castling & B_OOO) @classmethod def run(cls, fenstr, variant): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return cls._hideOthers() for button in ("copy_button", "clear_button", "paste_button", "initial_button"): cls.widgets[button].show() cls.widgets["newgamedialog"].set_title(_("Setup Position")) cls.widgets["setupPositionSidePanel"].show() cls.setupmodel = SetupModel() cls.board_control = BoardControl(cls.setupmodel, {}, setup_position=True) cls.setupmodel.curplayer = SetupPlayer(cls.board_control) cls.setupmodel.connect("game_changed", cls.game_changed) child = cls.widgets["setupBoardDock"].get_child() if child is not None: cls.widgets["setupBoardDock"].remove(child) cls.widgets["setupBoardDock"].add(cls.board_control) cls.board_control.show_all() if fenstr is not None: lboard = LBoard(variant) lboard.applyFen(fenstr) cls.setupmodel.boards = [ cls.setupmodel.variant(setup=fenstr, lboard=lboard) ] cls.setupmodel.variations = [cls.setupmodel.boards] cls.ini_widgets(fenstr, lboard) else: fenstr = cls.get_fen() cls.ini_widgets(True) cls.widgets["fen_entry"].set_text(fenstr) cls.setupmodel.start() cls.board_control.emit("action", "SETUP", None, fenstr) def _validate(gamemodel): try: fenstr = cls.get_fen() cls.setupmodel.variant(setup=fenstr) return True except (AssertionError, LoadingError, SyntaxError) as e: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, message_format=e.args[0], ) if len(e.args) > 1: d.format_secondary_text(e.args[1]) d.connect("response", lambda d, a: d.hide()) d.show() return False def _callback(gamemodel, p0, p1): text = cls.get_fen() perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart( gamemodel, p0, p1, (StringIO(text), fen, 0, -1) ) ) cls._generalRun(_callback, _validate) # ############################################################################### # EnterNotationExtension # # ############################################################################### class EnterNotationExtension(_GameInitializationMode): @classmethod def _init(cls): def callback(widget, allocation): cls.widgets["enterGameNotationFrame"].set_size_request( 223, allocation.height - 4 ) cls.widgets["enterGameNotationSidePanel"].connect_after( "size-allocate", callback ) flags = [] if isInstalled(): path = gettext.find("pychess") else: path = gettext.find("pychess", localedir=addDataPrefix("lang")) if path: default_locale = locale.getdefaultlocale() if default_locale[0] is not None: loc = locale.getdefaultlocale()[0][-2:].lower() flags.append(addDataPrefix("flags/%s.png" % loc)) flags.append(addDataPrefix("flags/us.png")) cls.ib = ImageButton(flags) cls.widgets["imageButtonDock"].add(cls.ib) cls.ib.show() cls.sourcebuffer = GtkSource.Buffer() sourceview = GtkSource.View.new_with_buffer(cls.sourcebuffer) sourceview.set_tooltip_text(_("Type or paste PGN game or FEN positions here")) cls.widgets["scrolledwindow6"].add(sourceview) sourceview.show() # Pgn format does not allow tabulator sourceview.set_insert_spaces_instead_of_tabs(True) sourceview.set_wrap_mode(Gtk.WrapMode.WORD) man = GtkSource.LanguageManager() # Init new version if hasattr(man.props, "search_path"): try: path = os.path.join(getDataPrefix(), "gtksourceview-3.0/language-specs") man.props.search_path = man.props.search_path + [path] if "pgn" in man.get_language_ids(): lang = man.get_language("pgn") cls.sourcebuffer.set_language(lang) else: log.warning("Unable to load pgn syntax-highlighting.") cls.sourcebuffer.set_highlight_syntax(True) except NotImplementedError: # Python 2.7.3 in Ubuntu 12.04 log.warning("Unable to load pgn syntax-highlighting.") # Init old version else: os.environ["XDG_DATA_DIRS"] = getDataPrefix() + ":/usr/share/" man = GtkSource.LanguageManager() for lang in man.get_available_languages(): if lang.get_name() == "PGN": cls.sourcebuffer.set_language(lang) break else: log.warning("Unable to load pgn syntax-highlighting.") cls.sourcebuffer.set_highlight(True) @classmethod def run(cls): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return cls._hideOthers() cls.widgets["newgamedialog"].set_title(_("Enter Game")) cls.widgets["enterGameNotationSidePanel"].show() def _get_text(): text = cls.sourcebuffer.get_text( cls.sourcebuffer.get_start_iter(), cls.sourcebuffer.get_end_iter(), False, ) # Test if the ImageButton has two layers and is set on the local language if len(cls.ib.surfaces) == 2 and cls.ib.current == 0: # 2 step used to avoid backtranslating # (local and english piece letters can overlap) for i, sign in enumerate(localReprSign[1:]): if sign.strip(): text = text.replace(sign, FAN_PIECES[0][i + 1]) for i, sign in enumerate(FAN_PIECES[0][1:7]): text = text.replace(sign, reprSign[i + 1]) text = str(text) # First we try if it's just a FEN string parts_no = len(text.split()) if text.strip() == "": text = FEN_START loadType = fen elif parts_no > 0 and text.split()[0].count("/") == 7: loadType = fen else: # patch default human player names on demand... player0combo = cls.widgets["whitePlayerCombobox"] player0 = player0combo.get_active() if player0 == 0 and '[White "' not in text: name = '[White "%s"]' % conf.get("firstName") text = f"{name}\n{text}" player1combo = cls.widgets["blackPlayerCombobox"] player1 = player1combo.get_active() if player1 == 0 and '[Black "' not in text: name = '[Black "%s"]' % conf.get("secondName") text = f"{name}\n{text}" loadType = pgn return text, loadType def _validate(gamemodel): try: text, loadType = _get_text() chessfile = loadType.load(StringIO(text)) chessfile.loadToModel(chessfile.games[0], -1, model=gamemodel) gamemodel.status = WAITING_TO_START return True except LoadingError as e: d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK, message_format=e.args[0], ) d.format_secondary_text(e.args[1]) d.connect("response", lambda d, a: d.hide()) d.show() return False def _callback(gamemodel, p0, p1): text, loadType = _get_text() perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart( gamemodel, p0, p1, (StringIO(text), loadType, 0, -1) ) ) cls._generalRun(_callback, _validate) class ImageButton(Gtk.Button): def __init__(self, image_paths): GObject.GObject.__init__(self) self.surfaces = [Gtk.Image().new_from_file(path) for path in image_paths] self.current = 0 self.image = self.surfaces[self.current] self.image.show() self.add(self.image) self.connect("clicked", self.on_clicked) def on_clicked(self, button): self.current = (self.current + 1) % len(self.surfaces) self.remove(self.image) self.image = self.surfaces[self.current] self.image.show() self.add(self.image) def createRematch(gamemodel): """If gamemodel contains only LOCAL or ARTIFICIAL players, this starts a new game, based on the info in gamemodel""" if gamemodel.timed: secs = gamemodel.timemodel.intervals[0][WHITE] gain = gamemodel.timemodel.gain moves = gamemodel.timemodel.moves else: secs = 0 gain = 0 moves = 0 newgamemodel = GameModel(TimeModel(secs, gain), variant=gamemodel.variant) wp = gamemodel.players[WHITE] bp = gamemodel.players[BLACK] if wp.__type__ == LOCAL: player1tup = (wp.__type__, wp.__class__, (BLACK, repr(wp)), repr(wp)) if bp.__type__ == LOCAL: player0tup = (bp.__type__, bp.__class__, (WHITE, repr(wp)), repr(bp)) else: engine = discoverer.getEngineByMd5(bp.md5) player0tup = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, WHITE, bp.strength, gamemodel.variant, secs, gain, moves), repr(bp), ) else: player0tup = (bp.__type__, bp.__class__, (WHITE, repr(bp)), repr(bp)) engine = discoverer.getEngineByMd5(wp.md5) player1tup = ( ARTIFICIAL, discoverer.initPlayerEngine, (engine, BLACK, wp.strength, gamemodel.variant, secs, gain), repr(wp), ) perspective = perspective_manager.get_perspective("games") asyncio.create_task(perspective.generalStart(newgamemodel, player0tup, player1tup)) def loadFileAndRun(uri): if uri in [None, ""]: return False parts = splitUri(uri) uri = parts[1] if len(parts) == 2 else parts[0] loader = enddir[uri[uri.rfind(".") + 1 :]] timemodel = TimeModel(0, 0) gamemodel = GameModel(timemodel) white_name = _("White") black_name = _("Black") p0 = (LOCAL, Human, (WHITE, white_name), white_name) p1 = (LOCAL, Human, (BLACK, black_name), black_name) perspective = perspective_manager.get_perspective("games") asyncio.create_task( perspective.generalStart(gamemodel, p0, p1, (uri, loader, 0, -1)) ) return True def loadPgnAndRun(data): if data in [None, ""]: return False perspective = perspective_manager.get_perspective("games") p0 = (LOCAL, Human, (WHITE, _("White")), _("White")) p1 = (LOCAL, Human, (BLACK, _("Black")), _("Black")) asyncio.create_task( perspective.generalStart( GameModel(), p0, p1, (StringIO(data), enddir["pgn"], 0, -1) ) ) return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/playerinfoDialog.py0000755000175100001770000000517214614030313022337 0ustar00runnerdockerfrom gi.repository import Gtk, GObject firstRun = True def run(widgets): global firstRun if firstRun: initialize(widgets) firstRun = False widgets["player_info"].show_all() def initialize(widgets): def addColumns(treeview, *columns): model = Gtk.ListStore(*((str,) * len(columns))) treeview.set_model(model) treeview.get_selection().set_mode(Gtk.SelectionMode.NONE) for i, name in enumerate(columns): crt = Gtk.CellRendererText() column = Gtk.TreeViewColumn(name, crt, text=i) treeview.append_column(column) addColumns(widgets["results_view"], "", "Games", "Won", "Drawn", "Lost", "Score") model = widgets["results_view"].get_model() model.append(("White", "67", "28", "24", "15", "59%")) model.append(("Black", "66", "26", "23", "17", "56%")) model.append(("Total", "133", "54", "47", "32", "58%")) addColumns( widgets["rating_view"], "Current", "Initial", "Lowest", "Highest", "Average" ) model = widgets["rating_view"].get_model() model.append(("1771", "1734", "1659", "1791", "1700")) widgets["history_view"].set_model(Gtk.ListStore(object)) widgets["history_view"].get_selection().set_mode(Gtk.SelectionMode.NONE) widgets["history_view"].append_column( Gtk.TreeViewColumn("Player Rating History", HistoryCellRenderer(), data=0) ) widgets["history_view"].get_model().append((1,)) def hide_window(button, *args): widgets["player_info"].hide() return True widgets["player_info"].connect("delete-event", hide_window) widgets["player_info_close_button"].connect("clicked", hide_window) class HistoryCellRenderer(Gtk.CellRenderer): __gproperties__ = { "data": ( GObject.TYPE_PYOBJECT, "Data", "Data", GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE, ), } def __init__(self): self.__gobject_init__() self.data = None def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def on_render(self, window, widget, background_area, rect, expose_area, flags): if not self.data: return cairo = window.cairo_create() x_loc, y_loc, width, height = rect.x, rect.y, rect.width, rect.height cairo.rectangle(x_loc + 1, y_loc + 1, x_loc + width - 2, y_loc + height - 2) cairo.set_source_rgb(0.45, 0.45, 0.45) cairo.stroke() def on_get_size(self, widget, cell_area=None): return (0, 0, -1, 130) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/preferencesDialog.py0000644000175100001770000010071114614030313022460 0ustar00runnerdocker""" :Description: This module facilitates configurable object that the end user can customise such as which chess setor board colours to use or the ability to turn on/off various sidepanel facilities such as hints, comments engine analysis etc. It also allows the user to setup and use customised sounds or no sounds at all for a variety of in game events such as running out of time or piece movement events etc. """ import asyncio import os from os import listdir from os.path import isdir, isfile import sys from xml.dom import minidom from urllib.request import url2pathname, pathname2url from urllib.parse import unquote from gi.repository import Gtk, GdkPixbuf, Gdk from pychess.System.prefix import addDataPrefix from pychess.System import conf, gstreamer, uistuff from pychess.Players.engineNest import discoverer from pychess.Utils import book from pychess.Utils.const import ( HINT, SPY, SOUND_MUTE, SOUND_BEEP, SOUND_URI, SOUND_SELECT, COUNT_OF_SOUNDS, ) from pychess.Utils.IconLoader import load_icon, get_pixbuf from pychess.gfx import Pieces from pychess.widgets import mainwindow from pychess.widgets.Background import newTheme from pychess.perspectives import perspective_manager firstRun = True general_tab = None hint_tab = None theme_tab = None sound_tab = None save_tab = None def run(widgets): global firstRun if firstRun: initialize(widgets) firstRun = False else: widgets["preferences_dialog"].show() widgets["preferences_dialog"].present() def initialize(widgets): """:Description: Initialises the various tabs for each section of configurable artifacts""" global general_tab general_tab = GeneralTab(widgets) # All side panels can be show/hide from View menu now, so no need to do the same from preferences # We can re enable this after implementing install/uninstall functionality in the future... # PanelTab(widgets) uistuff.keepWindowSize("preferencesdialog", widgets["preferences_dialog"]) notebook = widgets["preferences_notebook"] def switch_page(widget, page, page_num): global hint_tab, theme_tab, sound_tab, save_tab if page_num == 1 and hint_tab is None: hint_tab = HintTab(widgets) elif page_num == 3 and theme_tab is None: theme_tab = ThemeTab(widgets) elif page_num == 4 and sound_tab is None: sound_tab = SoundTab(widgets) elif page_num == 5 and save_tab is None: save_tab = SaveTab(widgets) notebook.connect("switch_page", switch_page) def delete_event(widget, _): widgets["preferences_dialog"].hide() return True widgets["preferences_dialog"].connect("delete-event", delete_event) widgets["preferences_dialog"].connect( "key-press-event", lambda w, e: ( w.event(Gdk.Event(Gdk.EventType.DELETE)) if e.keyval == Gdk.KEY_Escape else None ), ) # General initing class GeneralTab: def __init__(self, widgets): # Give to uistuff.keeper for key in conf.DEFAULTS["General"]: # widgets having special getter/setter if key in ( "ana_combobox", "inv_ana_combobox", "pieceTheme", "board_style", "board_frame", ): continue try: if widgets[key] is not None: uistuff.keep(widgets[key], key) except AttributeError: print("GeneralTab AttributeError", key, conf.DEFAULTS["General"][key]) except TypeError: print("GeneralTab TypeError", key, conf.DEFAULTS["General"][key]) # Hint initing def anal_combo_get_value(combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] return engine.get("md5") def anal_combo_set_value(combobox, value, show_arrow_check, analyzer_type): engine = discoverer.getEngineByMd5(value) if engine is None: combobox.set_active(0) # This return saves us from the None-engine being used # in later code -Jonas Thiem return else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) from pychess.widgets.gamewidget import widgets perspective = perspective_manager.get_perspective("games") for gmwidg in perspective.gamewidgets: spectators = gmwidg.gamemodel.spectators md5 = engine.get("md5") if analyzer_type in spectators and spectators[analyzer_type].md5 != md5: gmwidg.gamemodel.remove_analyzer(analyzer_type) asyncio.create_task(gmwidg.gamemodel.start_analyzer(analyzer_type)) if not widgets[show_arrow_check].get_active(): gmwidg.gamemodel.pause_analyzer(analyzer_type) class HintTab: def __init__(self, widgets): self.widgets = widgets # Opening book path = conf.get("opening_file_entry") conf.set("opening_file_entry", path) book_chooser_dialog = Gtk.FileChooserDialog( _("Select book file"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) book_chooser_button = Gtk.FileChooserButton.new_with_dialog(book_chooser_dialog) filter = Gtk.FileFilter() filter.set_name(_("Opening books")) filter.add_pattern("*.bin") book_chooser_dialog.add_filter(filter) book_chooser_button.set_filename(path) self.widgets["bookChooserDock"].add(book_chooser_button) book_chooser_button.show() def select_new_book(button): new_book = book_chooser_dialog.get_filename() if new_book: conf.set("opening_file_entry", new_book) book.path = new_book else: # restore the original book_chooser_dialog.set_filename(path) book_chooser_button.connect("file-set", select_new_book) def on_opening_check_toggled(check): self.widgets["opening_hbox"].set_sensitive(check.get_active()) self.widgets["opening_check"].connect_after("toggled", on_opening_check_toggled) uistuff.keep(self.widgets["book_depth_max"], "book_depth_max") uistuff.keep(self.widgets["book_check_exact_match"], "book_exact_match") # Endgame egtb_path = conf.get("egtb_path") conf.set("egtb_path", egtb_path) egtb_chooser_dialog = Gtk.FileChooserDialog( _("Select Gaviota TB path"), mainwindow(), Gtk.FileChooserAction.SELECT_FOLDER, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) egtb_chooser_button = Gtk.FileChooserButton.new_with_dialog(egtb_chooser_dialog) egtb_chooser_button.set_current_folder(egtb_path) self.widgets["egtbChooserDock"].add(egtb_chooser_button) egtb_chooser_button.show() def select_egtb(button): new_directory = egtb_chooser_dialog.get_filename() if new_directory != egtb_path: conf.set("egtb_path", new_directory) egtb_chooser_button.connect("current-folder-changed", select_egtb) def on_endgame_check_toggled(check): self.widgets["endgame_hbox"].set_sensitive(check.get_active()) self.widgets["endgame_check"].connect_after("toggled", on_endgame_check_toggled) # Analyzing engines from pychess.widgets import newGameDialog data = [(item[0], item[1]) for item in newGameDialog.analyzerItems] uistuff.createCombo(widgets["ana_combobox"], data, name="ana_combobox") uistuff.createCombo(widgets["inv_ana_combobox"], data, name="inv_ana_combobox") def update_analyzers_store(discoverer): data = [(item[0], item[1]) for item in newGameDialog.analyzerItems] uistuff.updateCombo(widgets["ana_combobox"], data) uistuff.updateCombo(widgets["inv_ana_combobox"], data) discoverer.connect_after("all_engines_discovered", update_analyzers_store) update_analyzers_store(discoverer) # Save, load and make analyze combos active conf.set("ana_combobox", conf.get("ana_combobox")) conf.set("inv_ana_combobox", conf.get("inv_ana_combobox")) def on_analyzer_check_toggled(check): self.widgets["analyzers_vbox"].set_sensitive(check.get_active()) from pychess.widgets.gamewidget import widgets perspective = perspective_manager.get_perspective("games") if len(perspective.gamewidgets) != 0: if check.get_active(): for gmwidg in perspective.gamewidgets: asyncio.create_task(gmwidg.gamemodel.restart_analyzer(HINT)) if not widgets["hint_mode"].get_active(): gmwidg.gamemodel.pause_analyzer(HINT) else: for gmwidg in perspective.gamewidgets: gmwidg.gamemodel.remove_analyzer(HINT) self.widgets["analyzers_vbox"].set_sensitive( widgets["analyzer_check"].get_active() ) self.widgets["analyzer_check"].connect_after( "toggled", on_analyzer_check_toggled ) def on_invanalyzer_check_toggled(check): self.widgets["inv_analyzers_vbox"].set_sensitive(check.get_active()) perspective = perspective_manager.get_perspective("games") if len(perspective.gamewidgets) != 0: if check.get_active(): for gmwidg in perspective.gamewidgets: asyncio.create_task(gmwidg.gamemodel.restart_analyzer(SPY)) if not widgets["spy_mode"].get_active(): gmwidg.gamemodel.pause_analyzer(SPY) else: for gmwidg in perspective.gamewidgets: gmwidg.gamemodel.remove_analyzer(SPY) self.widgets["inv_analyzers_vbox"].set_sensitive( widgets["inv_analyzer_check"].get_active() ) self.widgets["inv_analyzer_check"].connect_after( "toggled", on_invanalyzer_check_toggled ) # Give widgets to keeper uistuff.keep( self.widgets["ana_combobox"], "ana_combobox", anal_combo_get_value, lambda combobox, value: anal_combo_set_value( combobox, value, "hint_mode", HINT ), ) uistuff.keep( self.widgets["inv_ana_combobox"], "inv_ana_combobox", anal_combo_get_value, lambda combobox, value: anal_combo_set_value( combobox, value, "spy_mode", SPY ), ) uistuff.keep(self.widgets["max_analysis_spin"], "max_analysis_spin") uistuff.keep(self.widgets["infinite_analysis"], "infinite_analysis") uistuff.keep(self.widgets["infinite_depth"], "infinite_depth") uistuff.keep(self.widgets["max_depth_spin"], "max_depth_spin") # Sound initing # Setup default sounds EXT = "wav" if sys.platform == "win32" else "ogg" for i in range(COUNT_OF_SOUNDS): if not conf.hasKey("soundcombo%d" % i): conf.set("soundcombo%d" % i, SOUND_URI) if not conf.hasKey("sounduri0"): conf.set( "sounduri0", "file:" + pathname2url(addDataPrefix("sounds/move1.%s" % EXT)) ) if not conf.hasKey("sounduri1"): conf.set( "sounduri1", "file:" + pathname2url(addDataPrefix("sounds/check1.%s" % EXT)) ) if not conf.hasKey("sounduri2"): conf.set( "sounduri2", "file:" + pathname2url(addDataPrefix("sounds/capture1.%s" % EXT)) ) if not conf.hasKey("sounduri3"): conf.set( "sounduri3", "file:" + pathname2url(addDataPrefix("sounds/start1.%s" % EXT)) ) if not conf.hasKey("sounduri4"): conf.set("sounduri4", "file:" + pathname2url(addDataPrefix("sounds/win1.%s" % EXT))) if not conf.hasKey("sounduri5"): conf.set( "sounduri5", "file:" + pathname2url(addDataPrefix("sounds/lose1.%s" % EXT)) ) if not conf.hasKey("sounduri6"): conf.set( "sounduri6", "file:" + pathname2url(addDataPrefix("sounds/draw1.%s" % EXT)) ) if not conf.hasKey("sounduri7"): conf.set( "sounduri7", "file:" + pathname2url(addDataPrefix("sounds/obs_mov.%s" % EXT)) ) if not conf.hasKey("sounduri8"): conf.set( "sounduri8", "file:" + pathname2url(addDataPrefix("sounds/obs_end.%s" % EXT)) ) if not conf.hasKey("sounduri9"): conf.set( "sounduri9", "file:" + pathname2url(addDataPrefix("sounds/alarm.%s" % EXT)) ) if not conf.hasKey("sounduri10"): conf.set( "sounduri10", "file:" + pathname2url(addDataPrefix("sounds/invalid.%s" % EXT)) ) if not conf.hasKey("sounduri11"): conf.set( "sounduri11", "file:" + pathname2url(addDataPrefix("sounds/success.%s" % EXT)) ) if not conf.hasKey("sounduri12"): conf.set( "sounduri12", "file:" + pathname2url(addDataPrefix("sounds/choice.%s" % EXT)) ) class SoundTab: SOUND_DIRS = ( addDataPrefix("sounds"), "/usr/share/sounds", "/usr/local/share/sounds", os.path.expanduser("~"), ) actionToKeyNo = { "aPlayerMoves": 0, "aPlayerChecks": 1, "aPlayerCaptures": 2, "gameIsSetup": 3, "gameIsWon": 4, "gameIsLost": 5, "gameIsDrawn": 6, "observedMoves": 7, "oberservedEnds": 8, "shortOnTime": 9, "invalidMove": 10, "puzzleSuccess": 11, "variationChoice": 12, } _player = None soundcombo = [] sounduri = [] for i in range(COUNT_OF_SOUNDS): soundcombo.append(conf.get("soundcombo%s" % i)) sounduri.append(conf.get("sounduri%s" % i)) @classmethod def getPlayer(cls): if not cls._player: cls._player = gstreamer.sound_player return cls._player @classmethod def playAction(cls, action): if not conf.get("useSounds"): return if isinstance(action, str): key_no = cls.actionToKeyNo[action] else: key_no = action typ = cls.soundcombo[key_no] if typ == SOUND_BEEP: sys.stdout.write("\a") sys.stdout.flush() elif typ == SOUND_URI: uri = cls.sounduri[key_no] if not os.path.isfile(url2pathname(uri[5:])): conf.set("soundcombo%d" % key_no, SOUND_MUTE) return cls.getPlayer().play(uri) def __init__(self, widgets): # Init open dialog opendialog = Gtk.FileChooserDialog( _("Open Sound File"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT, ), ) for dir in self.SOUND_DIRS: if os.path.isdir(dir): opendialog.set_current_folder(dir) break soundfilter = Gtk.FileFilter() soundfilter.set_name(_("Sound files")) soundfilter.add_mime_type("audio/%s" % EXT) soundfilter.add_pattern("*.%s" % EXT) opendialog.add_filter(soundfilter) # Get combo icons icons = ( (_("No sound"), "audio-volume-muted", "audio-volume-muted"), (_("Beep"), "stock_bell", "audio-x-generic"), (_("Select sound file..."), "gtk-open", "document-open"), ) items = [] for level, stock, altstock in icons: image = load_icon(16, stock, altstock) items += [(image, level)] audioIco = load_icon(16, "audio-x-generic") # Set-up combos def callback(combobox, index): if combobox.get_active() == SOUND_SELECT: if opendialog.run() == Gtk.ResponseType.ACCEPT: uri = opendialog.get_uri() model = combobox.get_model() conf.set("sounduri%d" % index, uri) self.sounduri[index] = uri label = unquote(os.path.split(uri)[1]) if len(model) == 3: model.append([audioIco, label]) else: model.set(model.get_iter((3,)), 1, label) combobox.set_active(3) else: combobox.set_active(conf.get("soundcombo%d" % index)) opendialog.hide() for i in range(COUNT_OF_SOUNDS): combo = widgets["sound%dcombo" % i] uistuff.createCombo(combo, items, name="soundcombo%d" % i) combo.connect("changed", callback, i) label = widgets["soundlabel%d" % i] label.props.mnemonic_widget = combo uri = conf.get("sounduri%d" % i) if os.path.isfile(url2pathname(uri[5:])): model = combo.get_model() model.append([audioIco, unquote(os.path.split(uri)[1])]) for i in range(COUNT_OF_SOUNDS): if conf.get("soundcombo%d" % i) == SOUND_URI and not os.path.isfile( url2pathname(conf.get("sounduri%d" % i)[5:]) ): conf.set("soundcombo%d" % i, SOUND_MUTE) uistuff.keep(widgets["sound%dcombo" % i], "soundcombo%d" % i) # Init play button def playCallback(button, index): SoundTab.playAction(index) for i in range(COUNT_OF_SOUNDS): button = widgets["sound%dbutton" % i] button.connect("clicked", playCallback, i) # Init 'use sound" checkbutton def checkCallBack(*args): checkbox = widgets["useSounds"] widgets["sounds_frame"].set_property("sensitive", checkbox.get_active()) conf.notify_add("useSounds", checkCallBack) widgets["useSounds"].set_active(conf.get("useSounds")) uistuff.keep(widgets["useSounds"], "useSounds") checkCallBack() if not self.getPlayer().ready: widgets["useSounds"].set_sensitive(False) widgets["useSounds"].set_active(False) # Panel initing class PanelTab: def __init__(self, widgets): # Put panels in trees self.widgets = widgets persp = perspective_manager.get_perspective("games") sidePanels = persp.sidePanels dockLocation = persp.dockLocation saved_panels = [] xmlOK = os.path.isfile(dockLocation) if xmlOK: doc = minidom.parse(dockLocation) for elem in doc.getElementsByTagName("panel"): saved_panels.append(elem.getAttribute("id")) store = Gtk.ListStore(bool, GdkPixbuf.Pixbuf, str, object) for panel in sidePanels: checked = True if not xmlOK else panel.__name__ in saved_panels panel_icon = get_pixbuf(panel.__icon__, 32) text = f"{panel.__title__}\n{panel.__desc__}" store.append((checked, panel_icon, text, panel)) self.tv = widgets["panels_treeview"] self.tv.set_model(store) self.widgets["panel_about_button"].connect("clicked", self.panel_about) self.widgets["panel_enable_button"].connect("toggled", self.panel_toggled) self.tv.get_selection().connect("changed", self.selection_changed) pixbuf = Gtk.CellRendererPixbuf() pixbuf.props.yalign = 0 pixbuf.props.ypad = 3 pixbuf.props.xpad = 3 self.tv.append_column(Gtk.TreeViewColumn("Icon", pixbuf, pixbuf=1, sensitive=0)) uistuff.appendAutowrapColumn(self.tv, "Name", markup=2, sensitive=0) widgets["preferences_notebook"].connect("switch-page", self.__on_switch_page) widgets["preferences_dialog"].connect("show", self.__on_show_window) widgets["preferences_dialog"].connect("hide", self.__on_hide_window) def selection_changed(self, treeselection): store, iter = self.tv.get_selection().get_selected() self.widgets["panel_enable_button"].set_sensitive(bool(iter)) self.widgets["panel_about_button"].set_sensitive(bool(iter)) if iter: active = self.tv.get_model().get(iter, 0)[0] self.widgets["panel_enable_button"].set_active(active) def panel_about(self, button): store, iter = self.tv.get_selection().get_selected() assert iter # The button should only be clickable when we have a selection path = store.get_path(iter) panel = store[path][3] d = Gtk.MessageDialog( mainwindow(), type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.CLOSE ) d.set_markup("%s" % panel.__title__) text = ( panel.__about__ if hasattr(panel, "__about__") else _("Undescribed panel") ) d.format_secondary_text(text) d.run() d.hide() def panel_toggled(self, button): store, iter = self.tv.get_selection().get_selected() assert iter # The button should only be clickable when we have a selection path = store.get_path(iter) active = button.get_active() if store[path][0] == active: return store[path][0] = active self.__set_panel_active(store[path][3], active) def __set_panel_active(self, panel, active): name = panel.__name__ from pychess.widgets.pydock import EAST persp = perspective_manager.get_perspective("games") if active: leaf = persp.notebooks["board"].get_parent().get_parent() leaf.dock(persp.docks[name][1], EAST, persp.docks[name][0], name) panel.menu_item.show() else: try: persp.notebooks[name].get_parent().get_parent().undock( persp.notebooks[name] ) panel.menu_item.hide() except AttributeError: # A new panel appeared in the panels directory leaf = persp.notebooks["board"].get_parent().get_parent() leaf.dock(persp.docks[name][1], EAST, persp.docks[name][0], name) def showit(self): from pychess.widgets.gamewidget import showDesignGW showDesignGW() def hideit(self): from pychess.widgets.gamewidget import hideDesignGW hideDesignGW() def __on_switch_page(self, notebook, page, page_num): if notebook.get_nth_page(page_num) == self.widgets["sidepanels"]: self.showit() else: self.hideit() def __on_show_window(self, widget): notebook = self.widgets["preferences_notebook"] page_num = notebook.get_current_page() if notebook.get_nth_page(page_num) == self.widgets["sidepanels"]: self.showit() def __on_hide_window(self, widget): self.hideit() # Theme initing board_items = [(None, "colors only")] boards_path = addDataPrefix("boards") board_items += [ (get_pixbuf(os.path.join(boards_path, b), 24), b[:-6]) for b in listdir(boards_path) if b.endswith("_d.png") ] board_items.append((None, "transparent")) class ThemeTab: """:Description: Allows the setting of various user specific chess sets and board colours """ def __init__(self, widgets): self.widgets = widgets # Font chooser font = conf.get("movetextFont") font_button = Gtk.FontButton.new_with_font(font) demo_text = "♔a1 ♕f8 ♖h8 ♗g7 ♘g2 Ka1 Qf8 Rh8 Bg7 Ng2" font_button.set_preview_text(demo_text) self.widgets["fontChooserDock"].add(font_button) font_button.show() def select_font(button): conf.set("movetextFont", button.get_font_name()) font_button.connect("font-set", select_font) # Background image path = conf.get("welcome_image") conf.set("welcome_image", path) image_chooser_dialog = Gtk.FileChooserDialog( _("Select background image file"), mainwindow(), Gtk.FileChooserAction.OPEN, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) image_chooser_button = Gtk.FileChooserButton.new_with_dialog( image_chooser_dialog ) filter = Gtk.FileFilter() filter.set_name(_("Images")) filter.add_pattern("*.bmp") filter.add_pattern("*.jpg") filter.add_pattern("*.png") filter.add_pattern("*.svg") image_chooser_dialog.add_filter(filter) image_chooser_button.set_filename(path) self.widgets["imageChooserDock"].add(image_chooser_button) image_chooser_button.show() def select_new_image(button): new_image = image_chooser_dialog.get_filename() if new_image: conf.set("welcome_image", new_image) from pychess.widgets.TaskerManager import tasker newTheme(tasker, background=new_image) tasker.queue_draw() else: # restore the original image_chooser_dialog.set_filename(path) image_chooser_button.connect("file-set", select_new_image) # Board style uistuff.createCombo(widgets["board_style"], name="board_style") data = [(item[0], item[1]) for item in board_items] uistuff.createCombo(widgets["board_style"], data) uistuff.keep(widgets["board_style"], "board_style") # conf.set("board_style", conf.get("board_style")) # Board frame uistuff.createCombo(widgets["board_frame"], name="board_frame") data = [(item[0], item[1]) for item in [(None, "no frame")] + board_items[1:]] uistuff.createCombo(widgets["board_frame"], data) uistuff.keep(widgets["board_frame"], "board_frame") # conf.set("board_frame", conf.get("board_frame")) # Board Colours def onColourSetLight(_): """:Description: Sets the light squares of the chess board to the value selected in the colour picker """ conf.set("lightcolour", widgets["light_cbtn"].get_color().to_string()) widgets["light_cbtn"].connect_after("color-set", onColourSetLight) def onColourSetDark(_): """:Description: Sets the dark squares of the chess board to the value selected in the colour picker """ conf.set("darkcolour", widgets["dark_cbtn"].get_color().to_string()) widgets["dark_cbtn"].connect_after("color-set", onColourSetDark) def onResetColourClicked(_): """:Description: Resets the chess board squares to factory default""" conf.set("lightcolour", conf.DEFAULTS["General"]["lightcolour"]) conf.set("darkcolour", conf.DEFAULTS["General"]["darkcolour"]) widgets["reset_btn"].connect("clicked", onResetColourClicked) # Get the current board colours if set, if not set, set them to default conf.set("lightcolour", conf.get("lightcolour")) conf.set("darkcolour", conf.get("darkcolour")) # Next 2 lines take a #hex str converts them to a color then to a RGBA representation self.lightcolour = Gdk.RGBA() self.lightcolour.parse(conf.get("lightcolour")) self.darkcolour = Gdk.RGBA() self.darkcolour.parse(conf.get("darkcolour")) # Set the color swatches in preference to stored values widgets["light_cbtn"].set_rgba(self.lightcolour) widgets["dark_cbtn"].set_rgba(self.darkcolour) # Chess Sets self.themes = self.discoverThemes() store = Gtk.ListStore(GdkPixbuf.Pixbuf, str) for theme in self.themes: pngfile = "{}/{}.png".format(addDataPrefix("pieces"), theme) if isfile(pngfile): pixbuf = get_pixbuf(pngfile) store.append((pixbuf, theme)) else: print( "WARNING: No piece theme preview icons found. Please run \ create_theme_preview.sh !" ) break self.icon_view = widgets["pieceTheme"] self.icon_view.set_model(store) self.icon_view.set_pixbuf_column(0) self.icon_view.set_text_column(1) def keepSize(crt, _): """ :Description: Hack to fix spacing problem in iconview http://stackoverflow.com/questions/14090094/what-causes-the-different-\ display-behaviour-for-a-gtkiconview-between-different """ crt.handler_block(crt_notify) crt.set_property("width", 40) crt.handler_unblock(crt_notify) crt = self.icon_view.get_cells()[0] crt_notify = crt.connect("notify", keepSize) def _getActive(iconview): model = iconview.get_model() selected = iconview.get_selected_items() if len(selected) == 0: return conf.get("pieceTheme") indices = selected[0].get_indices() if indices: idx = indices[0] theme = model[idx][1] Pieces.set_piece_theme(theme) return theme def _setActive(iconview, value): try: index = self.themes.index(value) except ValueError: index = 0 iconview.select_path( Gtk.TreePath( index, ) ) uistuff.keep(widgets["pieceTheme"], "pieceTheme", _getActive, _setActive) def discoverThemes(self): """:Description: Finds all the different chess sets that are present in the pieces directory :return: (a List) of themes """ themes = [] pieces = addDataPrefix("pieces") themes += [ d.capitalize() for d in listdir(pieces) if isdir(os.path.join(pieces, d)) ] themes.sort() return themes # Save initing class SaveTab: """:Description: Allows the user to configure the structure of saved game files name along with various game attributes such as elapse time between moves and analysis engin evalutations """ def __init__(self, widgets): # Init 'auto save" checkbutton def checkCallBack(_): """:Description: Sets the various option based on user interaction with the checkboxes in the gui """ checkbox = widgets["autoSave"] widgets["autosave_grid"].set_property("sensitive", checkbox.get_active()) conf.notify_add("autoSave", checkCallBack) uistuff.keep(widgets["autoSave"], "autoSave") checkCallBack(_) self.auto_save_path = conf.get("autoSavePath") conf.set("autoSavePath", self.auto_save_path) auto_save_chooser_dialog = Gtk.FileChooserDialog( _("Select auto save path"), mainwindow(), Gtk.FileChooserAction.SELECT_FOLDER, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, ), ) auto_save_chooser_button = Gtk.FileChooserButton.new_with_dialog( auto_save_chooser_dialog ) auto_save_chooser_button.set_current_folder(self.auto_save_path) widgets["savePathChooserDock"].add(auto_save_chooser_button) auto_save_chooser_button.show() def selectAutoSave(_): """:Description: Sets the auto save path for stored games if it has changed since last time :signal: Activated on receiving the 'current-folder-changed' signal """ new_directory = auto_save_chooser_dialog.get_filename() if new_directory != self.auto_save_path: conf.set("autoSavePath", new_directory) auto_save_chooser_button.connect("current-folder-changed", selectAutoSave) conf.set("autoSaveFormat", conf.get("autoSaveFormat")) uistuff.keep(widgets["autoSaveFormat"], "autoSaveFormat") # uistuff.keep(widgets["saveEmt"], "saveEmt") # uistuff.keep(widgets["saveEval"], "saveEval") # uistuff.keep(widgets["saveRatingChange"], "saveRatingChange") # uistuff.keep(widgets["indentPgn"], "indentPgn") # uistuff.keep(widgets["saveOwnGames"], "saveOwnGames") ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/prompttext.py0000644000175100001770000000176414614030313021275 0ustar00runnerdockerfrom gi.repository import Gtk def getUserTextDialog(parent, title, description): dialog = Gtk.Dialog( title, parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, ( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT, ), ) dialog.set_resizable(False) dialog.set_size_request(400, -1) vbx = Gtk.VBox() label = Gtk.Label(description) label.set_xalign(0) vbx.pack_start(label, True, True, 5) textedit = Gtk.Entry() textedit.connect("activate", lambda p: dialog.response(Gtk.ResponseType.ACCEPT)) vbx.pack_end(textedit, True, True, 5) hbx = Gtk.HBox() hbx.pack_start(vbx, True, True, 10) dialog.get_content_area().pack_start(hbx, True, True, 5) dialog.show_all() if dialog.run() == Gtk.ResponseType.ACCEPT: result = textedit.get_text() else: result = None dialog.destroy() return result ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.913477 pychess-1.0.5/lib/pychess/widgets/pydock/0000755000175100001770000000000014614030425017762 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/ArrowButton.py0000755000175100001770000001054714614030313022630 0ustar00runnerdockerimport cairo from gi.repository import Gtk, GObject, Gdk from .OverlayWindow import OverlayWindow from .__init__ import NORTH, EAST, SOUTH, WEST class ArrowButton(OverlayWindow): """Leafs will connect to the drag-drop signal""" __gsignals__ = { "dropped": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "hovered": (GObject.SignalFlags.RUN_FIRST, None, (object,)), "left": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self, parent, svgPath, position): OverlayWindow.__init__(self, parent) self.myposition = position self.svgPath = svgPath # targets = [("GTK_NOTEBOOK_TAB", Gtk.TargetFlags.SAME_APP, 0xbadbeef)] targets = [ Gtk.TargetEntry.new("GTK_NOTEBOOK_TAB", Gtk.TargetFlags.SAME_APP, 0xBADBEEF) ] self.drag_dest_set( Gtk.DestDefaults.DROP | Gtk.DestDefaults.MOTION, targets, Gdk.DragAction.MOVE, ) self.drag_dest_set_track_motion(True) self.myparent.button_cids[self] += [ self.connect("drag-motion", self.__onDragMotion), self.connect("drag-leave", self.__onDragLeave), self.connect("drag-drop", self.__onDragDrop), self.connect_after("draw", self.__onExposeEvent), ] self.hovered = False self.myparentAlloc = None self.myparentPos = None self.hasHole = False def _calcSize(self): parentAlloc = self.myparent.get_allocation() width, height = self.getSizeOfSvg(self.svgPath) if self.myparentAlloc is None: self.resize(width, height) if self.get_window() and not self.hasHole: self.hasHole = True self.digAHole(self.svgPath, width, height) if self.myposition == NORTH: x_loc, y_loc = parentAlloc.width / 2.0 - width / 2.0, 0 elif self.myposition == EAST: x_loc, y_loc = ( parentAlloc.width - width, parentAlloc.height / 2.0 - height / 2.0, ) elif self.myposition == SOUTH: x_loc, y_loc = ( parentAlloc.width / 2.0 - width / 2.0, parentAlloc.height - height, ) elif self.myposition == WEST: x_loc, y_loc = 0, parentAlloc.height / 2.0 - height / 2.0 x_loc, y_loc = self.translateCoords(int(x_loc), int(y_loc)) if (x_loc, y_loc) != self.get_position(): self.move(x_loc, y_loc) self.myparentAlloc = parentAlloc window = self.myparent.get_window() if window is None: print(" !!! get_window() returned None for", self.myparent) else: self.myparentPos = window.get_position() def __onExposeEvent(self, self_, ctx): self._calcSize() context = self.get_window().cairo_create() width, height = self.getSizeOfSvg(self.svgPath) surface = self.getSurfaceFromSvg(self.svgPath, width, height) if self.is_composited(): context.set_operator(cairo.OPERATOR_CLEAR) context.set_source_rgba(0.0, 0.0, 0.0, 0.0) context.paint() context.set_operator(cairo.OPERATOR_OVER) # FIXME # mask = Gdk.Pixmap(None, width, height, 1) # mcontext = mask.cairo_create() # mcontext.set_source_surface(surface, 0, 0) # mcontext.paint() # self.window.shape_combine_mask(mask, 0, 0) context.set_source_surface(surface, 0, 0) context.paint() def __containsPoint(self, x, y): alloc = self.get_allocation() return 0 <= x < alloc.width and 0 <= y < alloc.height def __onDragMotion(self, arrow, context, x, y, timestamp): if not self.hovered and self.__containsPoint(x, y): self.hovered = True self.emit("hovered", Gtk.drag_get_source_widget(context)) elif self.hovered and not self.__containsPoint(x, y): self.hovered = False self.emit("left") def __onDragLeave(self, arrow, context, timestamp): if self.hovered: self.hovered = False self.emit("left") def __onDragDrop(self, arrow, context, x, y, timestamp): if self.__containsPoint(x, y): self.emit("dropped", Gtk.drag_get_source_widget(context)) context.finish(True, True, timestamp) return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/HighlightArea.py0000755000175100001770000000435414614030313023041 0ustar00runnerdockerimport cairo from .__init__ import NORTH, EAST, SOUTH, WEST, CENTER from .OverlayWindow import OverlayWindow from math import ceil as fceil # ceil = lambda f: int(fceil(f)) def ceil(f): return int(fceil(f)) class HighlightArea(OverlayWindow): """An entirely blue widget""" def __init__(self, parent): OverlayWindow.__init__(self, parent) self.cid = self.connect_after("draw", self.__onExpose) def showAt(self, position): alloc = self.myparent.get_allocation() if position == NORTH: x_loc, y_loc = 0, 0 width, height = alloc.width, alloc.height * 0.381966011 elif position == EAST: x_loc, y_loc = alloc.width * 0.618033989, 0 width, height = alloc.width * 0.381966011, alloc.height elif position == SOUTH: x_loc, y_loc = 0, alloc.height * 0.618033989 width, height = alloc.width, alloc.height * 0.381966011 elif position == WEST: x_loc, y_loc = 0, 0 width, height = alloc.width * 0.381966011, alloc.height elif position == CENTER: x_loc, y_loc = 0, 0 width, height = alloc.width, alloc.height try: x_loc, y_loc = self.translateCoords(int(x_loc), int(y_loc)) self.move(x_loc, y_loc) except ValueError: pass # Can't move to x,y, because top level parent has no window. self.resize(ceil(width), ceil(height)) self.show() def __onExpose(self, self_, ctx): context = self.get_window().cairo_create() a = self_.get_allocation() context.rectangle(a.x, a.y, a.width, a.height) sc = self.get_style_context() found, color = sc.lookup_color("p_light_selected") if self.is_composited(): context.set_operator(cairo.OPERATOR_CLEAR) context.set_source_rgba(0, 0, 0, 0.0) context.fill_preserve() context.set_operator(cairo.OPERATOR_OVER) context.set_source_rgba(color.red, color.green, color.blue, 0.5) context.fill() else: context.set_source_rgba(color.red, color.green, color.blue) context.set_operator(cairo.OPERATOR_OVER) context.fill() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/OverlayWindow.py0000755000175100001770000001272414614030313023152 0ustar00runnerdockerimport os import re import tempfile import cairo from gi.repository import Gtk, Gdk, Rsvg from pychess.widgets.Background import hexcol class OverlayWindow(Gtk.Window): """This class knows about being an overlaywindow and some svg stuff""" cache = {} # Class global self.cache for svgPath:rsvg and (svgPath,w,h):surface def __init__(self, parent): Gtk.Window.__init__(self, type=Gtk.WindowType.POPUP) # set RGBA visual for the window so transparency works self.set_app_paintable(True) visual = self.get_screen().get_rgba_visual() if visual: self.set_visual(visual) self.myparent = parent # =========================================================================== # The overlay stuff # =========================================================================== def paintTransparent(self, cairoContext): if self.is_composited(): cairoContext.set_operator(cairo.OPERATOR_CLEAR) cairoContext.set_source_rgba(0, 0, 0, 0) cairoContext.paint() cairoContext.set_operator(cairo.OPERATOR_OVER) def digAHole(self, svgShape, width, height): # FIXME # For Python 2.x pycairo does not support/implement cairo.Region() # https://bugs.launchpad.net/ubuntu/+source/pygobject/+bug/1028115/comments/8 return # Create a bitmap and clear it mask = cairo.ImageSurface(cairo.FORMAT_A1, width, height) mcontext = cairo.Context(mask) mcontext.set_source_rgb(0, 0, 0) mcontext.set_operator(cairo.OPERATOR_DEST_OUT) mcontext.paint() # Paint our shape surface = self.getSurfaceFromSvg(svgShape, width, height) mcontext.set_operator(cairo.OPERATOR_OVER) mcontext.set_source_surface(surface, 0, 0) mcontext.paint() # Apply it only if aren't composited, in which case we only need input # masking try: mregion = Gdk.cairo_region_create_from_surface(mask) except TypeError: return if self.is_composited(): self.get_window().input_shape_combine_region(mregion, 0, 0) else: self.get_window().shape_combine_region(mregion, 0, 0) def translateCoords(self, x, y): top_level = self.myparent.get_toplevel() window = top_level.get_window() if window is None: print(" !!! get_window() returned None for", self.myparent, top_level) else: x_loc1, y_loc1 = window.get_position() translate_x = self.myparent.translate_coordinates( self.myparent.get_toplevel(), x, y ) x = x_loc1 + translate_x[0] y = y_loc1 + translate_x[1] return x, y # =========================================================================== # The SVG stuff # =========================================================================== def getSurfaceFromSvg(self, svgPath, width, height): path = os.path.abspath(svgPath) if (path, width, height) in self.cache: return self.cache[(path, width, height)] else: if path in self.cache: svg = self.cache[path] else: svg = self.__loadNativeColoredSvg(path) self.cache[path] = svg surface = self.__svgToSurface(svg, width, height) self.cache[(path, width, height)] = surface return surface def getSizeOfSvg(self, svgPath): path = os.path.abspath(svgPath) if path not in self.cache: svg = self.__loadNativeColoredSvg(path) self.cache[path] = svg svg = self.cache[path] return (svg.props.width, svg.props.height) def __loadNativeColoredSvg(self, svgPath): TEMP_PATH = os.path.join(tempfile.gettempdir(), "pychess_theamed.svg") # return hex string #rrggbb def getcol(col): found, color = sytle_ctxt.lookup_color(col) # not found colors are black if not found: print("color not found in overlaywindow.py:", col) return hexcol(color) sytle_ctxt = self.get_style_context() colorDic = { "#18b0ff": getcol("p_light_selected"), "#575757": getcol("p_text_aa"), "#e3ddd4": getcol("p_bg_color"), "#d4cec5": getcol("p_bg_insensitive"), "#ffffff": getcol("p_base_color"), "#000000": getcol("p_fg_color"), } with open(svgPath) as fh: data = fh.read() data = re.sub( "|".join(colorDic.keys()), lambda m: m.group() in colorDic and colorDic[m.group()] or m.group(), data, ) with open(TEMP_PATH, "w") as f_handle: f_handle.write(data) svg = Rsvg.Handle.new_from_file(TEMP_PATH) os.remove(TEMP_PATH) return svg def __svgToSurface(self, svg, width, height): assert isinstance(width, int) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) context.set_operator(cairo.OPERATOR_SOURCE) if svg.props.width != width or svg.props.height != height: context.scale( width / float(svg.props.width), height / float(svg.props.height) ) svg.render_cairo(context) return surface def __onStyleSet(self, self_, oldstyle): self.cache.clear() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/PyDockComposite.py0000755000175100001770000000721214614030313023411 0ustar00runnerdockerfrom gi.repository import Gtk, GObject from .__init__ import NORTH, EAST, SOUTH, WEST, CENTER, reprPos class PyDockComposite(Gtk.Alignment): def __init__(self, position, perspective): GObject.GObject.__init__(self, xscale=1, yscale=1) if position == NORTH or position == SOUTH: paned = Gtk.VPaned() elif position == EAST or position == WEST: paned = Gtk.HPaned() self.position = position self.perspective = perspective self.paned = paned self.add(self.paned) self.paned.show() def _del(self): for component in self.getComponents(): component._del() def __repr__(self): return "composite {} ({}, {})".format( reprPos[self.position], repr(self.paned.get_child1()), repr(self.paned.get_child2()), ) def dock(self, widget, position, title, id): assert position != CENTER, "POSITION_CENTER only makes sense for leaves" parent = self.get_parent() while not isinstance(parent, PyDockComposite): parent = parent.get_parent() from .PyDockLeaf import PyDockLeaf leaf = PyDockLeaf(widget, title, id, self.perspective) new = PyDockComposite(position, self.perspective) parent.changeComponent(self, new) new.initChildren(self, leaf) return leaf def changeComponent(self, old, new): if old == self.paned.get_child1(): self.paned.remove(old) self.paned.pack1(new, resize=True, shrink=True) else: self.paned.remove(old) self.paned.pack2(new, resize=True, shrink=True) new.show() def removeComponent(self, component): if component == self.paned.get_child1(): new = self.paned.get_child2() else: new = self.paned.get_child1() self.paned.remove(new) parent = self.get_parent() while not isinstance(parent, PyDockComposite): parent = parent.get_parent() parent.changeComponent(self, new) component._del() # TODO: is this necessary? new.show() def getComponents(self): return self.paned.get_children() def initChildren(self, old, new, preserve_dimensions=False): if self.position == NORTH or self.position == WEST: self.paned.pack1(new, resize=True, shrink=True) self.paned.pack2(old, resize=True, shrink=True) elif self.position == SOUTH or self.position == EAST: self.paned.pack1(old, resize=True, shrink=True) self.paned.pack2(new, resize=True, shrink=True) old.show() new.show() def cb(widget, allocation): # Set initial position of the divider between the two panes of Gtk.Paned if allocation.height != 1: if self.position == NORTH: pos = 0.381966011 * allocation.height elif self.position == SOUTH: pos = 0.618033989 * allocation.height elif self.position == WEST: pos = 0.381966011 * allocation.width elif self.position == EAST: pos = 0.618033989 * allocation.width widget.set_position(int(pos + 0.5)) widget.disconnect(conid) if not preserve_dimensions: conid = self.paned.connect("size-allocate", cb) def getPosition(self): """Returns NORTH or SOUTH if the children are packed vertically. Returns WEST or EAST if the children are packed horizontally. Returns CENTER if there is only one child""" return self.position ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/PyDockLeaf.py0000755000175100001770000002017114614030313022315 0ustar00runnerdockerfrom gi.repository import Gtk from pychess.System.prefix import addDataPrefix from .__init__ import CENTER, TabReceiver from .PyDockComposite import PyDockComposite from .StarArrowButton import StarArrowButton from .HighlightArea import HighlightArea class PyDockLeaf(TabReceiver): def __init__(self, widget, title, id, perspective): TabReceiver.__init__(self, perspective) self.perspective = perspective self.set_no_show_all(True) self.book = Gtk.Notebook() self.book.set_name(id) self.book_cids = [ self.book.connect("drag-begin", self.__onDragBegin), self.book.connect("drag-end", self.__onDragEnd), self.book.connect_after("switch-page", self.__onPageSwitched), ] self.add(self.book) self.book.show() self.highlightArea = HighlightArea(self) self.button_cids = [] self.starButton = StarArrowButton( self, addDataPrefix("glade/dock_top.svg"), addDataPrefix("glade/dock_right.svg"), addDataPrefix("glade/dock_bottom.svg"), addDataPrefix("glade/dock_left.svg"), addDataPrefix("glade/dock_center.svg"), addDataPrefix("glade/dock_star.svg"), ) self.button_cids += [ self.starButton.connect("dropped", self.__onDrop), self.starButton.connect("hovered", self.__onHover), self.starButton.connect("left", self.__onLeave), ] self.dockable = True self.panels = [] self.zoomPointer = Gtk.Label() self.realtop = None self.zoomed = False # assert isinstance(widget, Gtk.Notebook) self.__add(widget, title, id) def _del(self): if self.highlightArea.handler_is_connected(self.highlightArea.cid): self.highlightArea.disconnect(self.highlightArea.cid) for cid in self.button_cids: if self.starButton.handler_is_connected(cid): self.starButton.disconnect(cid) self.button_cids = [] for cid in self.book_cids: if self.book.handler_is_connected(cid): self.book.disconnect(cid) self.starButton.myparent = None self.highlightArea.myparent = None TabReceiver._del(self) def __repr__(self): s = "leaf" # PyDockLeaf.__repr__(self) panels = [] for widget, title, id in self.getPanels(): panels.append(id) return s + " (" + ", ".join(panels) + ")" def __add(self, widget, title, id): self.panels.append((widget, title, id)) self.book.append_page(widget, title) self.book.set_tab_detachable(widget, True) self.book.set_tab_reorderable(widget, True) widget.show_all() def dock(self, widget, position, title, id): """if position == CENTER: Add a new widget to the leaf-notebook if position != CENTER: Fork this leaf into two""" if position == CENTER: self.__add(widget, title, id) return self else: parent = self.get_parent() while not isinstance(parent, PyDockComposite): parent = parent.get_parent() leaf = PyDockLeaf(widget, title, id, self.perspective) new = PyDockComposite(position, self.perspective) parent.changeComponent(self, new) new.initChildren(self, leaf) new.show_all() return leaf def undock(self, widget): """remove the widget from the leaf-notebook if this was the only widget, remove this leaf from its owner""" gtk_version = (Gtk.get_major_version(), Gtk.get_minor_version()) if gtk_version >= (3, 16): self.book.detach_tab(widget) else: # To not destroy accidentally our panel widget we need to add a reference to it # https://lazka.github.io/pgi-docs/#Gtk-3.0/classes/Container.html#Gtk.Container.remove widget._ref() self.book.remove(widget) for i, (widget_, title, id) in enumerate(self.panels): if widget_ == widget: break else: raise KeyError(f"No {widget} in {self}") del self.panels[i] if self.book.get_n_pages() == 0: parent = self.get_parent() while not isinstance(parent, PyDockComposite): parent = parent.get_parent() parent.removeComponent(self) self._del() return title, id def zoomUp(self): if self.zoomed: return from .PyDockTop import PyDockTop parent = self.get_parent() if not isinstance(parent, PyDockTop): while not isinstance(parent, PyDockComposite): parent = parent.get_parent() parent.changeComponent(self, self.zoomPointer) while not isinstance(parent, PyDockTop): parent = parent.get_parent() self.realtop = parent.getComponents()[0] parent.changeComponent(self.realtop, self) self.zoomed = True self.book.set_show_border(False) def zoomDown(self): if not self.zoomed: return if self.zoomPointer.get_parent(): top_parent = self.get_parent() old_parent = self.zoomPointer.get_parent() while not isinstance(old_parent, PyDockComposite): old_parent = old_parent.get_parent() top_parent.changeComponent(self, self.realtop) old_parent.changeComponent(self.zoomPointer, self) self.realtop = None self.zoomed = False self.book.set_show_border(True) def getPanels(self): """Returns a list of (widget, title, id) tuples""" return self.panels def getCurrentPanel(self): for i, (widget, title, id) in enumerate(self.panels): if i == self.book.get_current_page(): return id def setCurrentPanel(self, id): """Returns the panel id currently shown""" for i, (widget, title, id_) in enumerate(self.panels): if id == id_: self.book.set_current_page(i) break def isDockable(self): return self.dockable def setDockable(self, dockable): """If the leaf is not dockable it won't be moveable and won't accept new panels""" self.book.set_show_tabs(dockable) # self.book.set_show_border(dockable) self.dockable = dockable def showArrows(self): if self.dockable: self.starButton._calcSize() self.starButton.show() def hideArrows(self): self.starButton.hide() self.highlightArea.hide() def __onDragBegin(self, widget, context): for instance in self.getInstances(self.perspective): instance.showArrows() def __onDragEnd(self, widget, context): for instance in self.getInstances(self.perspective): instance.hideArrows() def __onDrop(self, starButton, position, sender): self.highlightArea.hide() # if the undocked leaf was alone, __onDragEnd may not triggered # because leaf was removed for instance in self.getInstances(self.perspective): instance.hideArrows() if self.dockable: if sender.get_parent() == self and self.book.get_n_pages() == 1: return # cp = sender.get_current_page() child = sender.get_nth_page(sender.get_current_page()) title, id = sender.get_parent().undock(child) self.dock(child, position, title, id) def __onHover(self, starButton, position, widget): if self.dockable: self.highlightArea.showAt(position) starButton.get_window().raise_() def __onLeave(self, starButton): self.highlightArea.hide() def __onPageSwitched(self, book, page, page_num): # When a tab is dragged over another tab, the page is temporally # switched, and the notebook child is hovered. Thus we need to reraise # our star if self.starButton.get_window(): self.starButton.get_window().raise_() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/PyDockTop.py0000755000175100001770000002575414614030313022224 0ustar00runnerdockerimport os from xml.dom import minidom from collections import defaultdict from pychess.System.prefix import addDataPrefix from .PyDockLeaf import PyDockLeaf from .PyDockComposite import PyDockComposite from .ArrowButton import ArrowButton from .HighlightArea import HighlightArea from .__init__ import TabReceiver from .__init__ import NORTH, EAST, SOUTH, WEST, CENTER class PyDockTop(PyDockComposite, TabReceiver): def __init__(self, id, perspective): TabReceiver.__init__(self, perspective) self.id = id self.perspective = perspective self.set_no_show_all(True) self.highlightArea = HighlightArea(self) self.button_cids = defaultdict(list) self.buttons = ( ArrowButton(self, addDataPrefix("glade/dock_top.svg"), NORTH), ArrowButton(self, addDataPrefix("glade/dock_right.svg"), EAST), ArrowButton(self, addDataPrefix("glade/dock_bottom.svg"), SOUTH), ArrowButton(self, addDataPrefix("glade/dock_left.svg"), WEST), ) for button in self.buttons: self.button_cids[button] += [ button.connect("dropped", self.__onDrop), button.connect("hovered", self.__onHover), button.connect("left", self.__onLeave), ] def _del(self): if self.highlightArea.handler_is_connected(self.highlightArea.cid): self.highlightArea.disconnect(self.highlightArea.cid) for button in self.buttons: for cid in self.button_cids[button]: if button.handler_is_connected(cid): button.disconnect(cid) button.myparent = None self.button_cids = {} self.highlightArea.myparent = None TabReceiver._del(self) PyDockComposite._del(self) def getPosition(self): return CENTER def __repr__(self): return "top (%s)" % self.id # =========================================================================== # Component stuff # =========================================================================== def addComponent(self, widget): self.add(widget) widget.show() def changeComponent(self, old, new): self.removeComponent(old) self.addComponent(new) def removeComponent(self, widget): self.remove(widget) def getComponents(self): child = self.get_child() if isinstance(child, PyDockComposite) or isinstance(child, PyDockLeaf): return [child] return [] def dock(self, widget, position, title, id): if not self.getComponents(): leaf = PyDockLeaf(widget, title, id, self.perspective) self.addComponent(leaf) return leaf else: return self.get_child().dock(widget, position, title, id) def clear(self): self.remove(self.get_child()) # =========================================================================== # Signals # =========================================================================== def showArrows(self): for button in self.buttons: button._calcSize() button.show() def hideArrows(self): for button in self.buttons: button.hide() self.highlightArea.hide() def __onDrop(self, arrowButton, sender): self.highlightArea.hide() child = sender.get_nth_page(sender.get_current_page()) for instance in sender.get_parent().getInstances(self.perspective): instance.hideArrows() title, id = sender.get_parent().undock(child) self.dock(child, arrowButton.myposition, title, id) def __onHover(self, arrowButton, widget): self.highlightArea.showAt(arrowButton.myposition) arrowButton.get_window().raise_() def __onLeave(self, arrowButton): self.highlightArea.hide() # =========================================================================== # XML # =========================================================================== def saveToXML(self, xmlpath): """ """ dockElem = None if os.path.isfile(xmlpath): doc = minidom.parse(xmlpath) for elem in doc.getElementsByTagName("dock"): if elem.getAttribute("id") == self.id: for node in elem.childNodes: elem.removeChild(node) dockElem = elem break if not dockElem: doc = minidom.getDOMImplementation().createDocument(None, "docks", None) dockElem = doc.createElement("dock") dockElem.setAttribute("id", self.id) doc.documentElement.appendChild(dockElem) if self.get_child(): self.__addToXML(self.get_child(), dockElem, doc) with open(xmlpath, "w") as f_handle: doc.writexml(f_handle) doc.unlink() def __addToXML(self, component, parentElement, document): if isinstance(component, PyDockComposite): pos = component.paned.get_position() if component.getPosition() in (NORTH, SOUTH): childElement = document.createElement("v") size = float(component.get_allocation().height) else: childElement = document.createElement("h") size = float(component.get_allocation().width) # if component.getPosition() in (NORTH, SOUTH): # print "saving v position as %s out of %s (%s)" % (str(pos), str(size), str(pos/max(size,pos))) childElement.setAttribute("pos", str(pos / max(size, pos))) self.__addToXML(component.getComponents()[0], childElement, document) self.__addToXML(component.getComponents()[1], childElement, document) elif isinstance(component, PyDockLeaf): childElement = document.createElement("leaf") childElement.setAttribute("current", component.getCurrentPanel()) childElement.setAttribute("dockable", str(component.isDockable())) for panel, title, id in component.getPanels(): element = document.createElement("panel") element.setAttribute("id", id) element.setAttribute("visible", str(panel.get_visible())) childElement.appendChild(element) parentElement.appendChild(childElement) def loadFromXML(self, xmlpath, idToWidget): """idTowidget is a dictionary {id: (widget,title)} asserts that self.id is in the xmlfile""" doc = minidom.parse(xmlpath) for elem in doc.getElementsByTagName("dock"): if elem.getAttribute("id") == self.id: break else: raise AttributeError( "XML file contains no elements with id '%s'" % self.id ) child = [n for n in elem.childNodes if isinstance(n, minidom.Element)] if child: self.addComponent(self.__createWidgetFromXML(child[0], idToWidget)) def __createWidgetFromXML(self, parentElement, idToWidget): children = [ n for n in parentElement.childNodes if isinstance(n, minidom.Element) ] if parentElement.tagName in ("h", "v"): child1, child2 = children if parentElement.tagName == "h": new = PyDockComposite(EAST, self.perspective) else: new = PyDockComposite(SOUTH, self.perspective) new.initChildren( self.__createWidgetFromXML(child1, idToWidget), self.__createWidgetFromXML(child2, idToWidget), preserve_dimensions=True, ) def cb(widget, event, pos): allocation = widget.get_allocation() if parentElement.tagName == "h": widget.set_position(int(allocation.width * pos)) else: # print "loading v position as %s out of %s (%s)" % \ # (int(allocation.height * pos), str(allocation.height), str(pos)) widget.set_position(int(allocation.height * pos)) widget.disconnect(conid) conid = new.paned.connect( "size-allocate", cb, float(parentElement.getAttribute("pos")) ) return new elif parentElement.tagName == "leaf": id = children[0].getAttribute("id") try: title, widget, menu_item = idToWidget[id] except KeyError: id = self.old2new(id) title, widget, menu_item = idToWidget[id] leaf = PyDockLeaf(widget, title, id, self.perspective) visible = children[0].getAttribute("visible") visible = visible == "" or visible == "True" widget.set_visible(visible) if menu_item is not None: menu_item.set_active(visible) for panelElement in children[1:]: id = panelElement.getAttribute("id") try: title, widget, menu_item = idToWidget[id] except KeyError: id = self.old2new(id) title, widget, menu_item = idToWidget[id] visible = panelElement.getAttribute("visible") visible = visible == "" or visible == "True" leaf.dock(widget, CENTER, title, id) widget.set_visible(visible) if menu_item is not None: menu_item.set_active(visible) leaf.setCurrentPanel(self.old2new(parentElement.getAttribute("current"))) if parentElement.getAttribute("dockable").lower() == "false": leaf.setDockable(False) return leaf def old2new(self, name): """After 0.99.0 database perspective panel names changed""" x = { "switcher": "SwitcherPanel", "openingtree": "OpeningTreePanel", "filter": "FilterPanel", "preview": "PreviewPanel", "chat": "ChatPanel", "console": "ConsolePanel", "news": "NewsPanel", "seeklist": "SeekListPanel", "seekgraph": "SeekGraphPanel", "playerlist": "PlayerListPanel", "gamelist": "GameListPanel", "archivelist": "ArchiveListPanel", } return x[name] if name in x else name ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/StarArrowButton.py0000755000175100001770000002006714614030313023460 0ustar00runnerdockerfrom math import ceil as float_ceil, pi import cairo from gi.repository import Gtk, Gdk, GObject from .OverlayWindow import OverlayWindow # ceil = lambda f: int(float_ceil(f)) def ceil(num): return int(float_ceil(num)) POSITIONS_COUNT = 5 NORTH, EAST, SOUTH, WEST, CENTER = range(POSITIONS_COUNT) DX_DY = ((0, -1), (1, 0), (0, 1), (-1, 0), (0, 0)) PADDING_X = 0.2 # Amount of button width PADDING_Y = 0.4 # Amount of button height class StarArrowButton(OverlayWindow): __gsignals__ = { "dropped": (GObject.SignalFlags.RUN_FIRST, None, (int, object)), "hovered": (GObject.SignalFlags.RUN_FIRST, None, (int, object)), "left": (GObject.SignalFlags.RUN_FIRST, None, ()), } def __init__(self, parent, northSvg, eastSvg, southSvg, westSvg, centerSvg, bgSvg): OverlayWindow.__init__(self, parent) self.svgs = (northSvg, eastSvg, southSvg, westSvg, centerSvg) self.bgSvg = bgSvg self.size = () self.currentHovered = -1 # targets = [("GTK_NOTEBOOK_TAB", Gtk.TargetFlags.SAME_APP, 0xbadbeef)] targets = [ Gtk.TargetEntry.new("GTK_NOTEBOOK_TAB", Gtk.TargetFlags.SAME_APP, 0xBADBEEF) ] self.drag_dest_set( Gtk.DestDefaults.DROP | Gtk.DestDefaults.MOTION, targets, Gdk.DragAction.MOVE, ) self.drag_dest_set_track_motion(True) self.myparent.button_cids += [ self.connect("drag-motion", self.__onDragMotion), self.connect("drag-leave", self.__onDragLeave), self.connect("drag-drop", self.__onDragDrop), self.connect_after("draw", self.__onExposeEvent), ] self.myparentAlloc = None self.myparentPos = None self.hasHole = False self.size = () def _calcSize(self): parentAlloc = self.myparent.get_allocation() if ( self.myparentAlloc is None or parentAlloc.width != self.myparentAlloc.width or parentAlloc.height != self.myparentAlloc.height ): starWidth, starHeight = self.getSizeOfSvg(self.bgSvg) scale = min( 1, parentAlloc.width / float(starWidth), parentAlloc.height / float(starHeight), ) self.size = list(map(int, (starWidth * scale, starHeight * scale))) self.resize(self.size[0], self.size[1]) if self.get_window(): self.hasHole = True self.digAHole(self.bgSvg, self.size[0], self.size[1]) elif not self.hasHole: self.hasHole = True self.digAHole(self.bgSvg, self.size[0], self.size[1]) if self.myparent.get_window(): x_loc, y_loc = self.translateCoords( int(parentAlloc.width / 2.0 - self.size[0] / 2.0), int(parentAlloc.height / 2.0 - self.size[1] / 2.0), ) if (x_loc, y_loc) != self.get_position(): self.move(x_loc, y_loc) self.myparentPos = self.myparent.get_window().get_position() self.myparentAlloc = parentAlloc def __onExposeEvent(self, self_, ctx): self._calcSize() context = self.get_window().cairo_create() self.paintTransparent(context) surface = self.getSurfaceFromSvg(self.bgSvg, self.size[0], self.size[1]) context.set_source_surface(surface, 0, 0) context.paint() for position in range(POSITIONS_COUNT): rect = self.__getButtonRectangle(position) context = self.get_window().cairo_create() surface = self.getSurfaceFromSvg( self.svgs[position], rect.width, rect.height ) context.set_source_surface(surface, rect.x, rect.y) context.paint() def __getButtonRectangle(self, position): starWidth, starHeight = self.getSizeOfSvg(self.bgSvg) buttonWidth, buttonHeight = self.getSizeOfSvg(self.svgs[position]) buttonWidth = buttonWidth * self.size[0] / float(starWidth) buttonHeight = buttonHeight * self.size[1] / float(starHeight) dx_loc, dy_loc = DX_DY[position] x_loc = ceil( dx_loc * (1 + PADDING_X) * buttonWidth - buttonWidth / 2.0 + self.size[0] / 2.0 ) y_loc = ceil( dy_loc * (1 + PADDING_Y) * buttonHeight - buttonHeight / 2.0 + self.size[1] / 2.0 ) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( x_loc, y_loc, ceil(buttonWidth), ceil(buttonHeight), ) return rect def __getButtonAtPoint(self, x, y): for position in range(POSITIONS_COUNT): rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = (x, y, 1, 1) inside, dest = Gdk.rectangle_intersect( self.__getButtonRectangle(position), rect ) if inside: return position return -1 def __onDragMotion(self, arrow, context, x, y, timestamp): position = self.__getButtonAtPoint(x, y) if self.currentHovered != position: self.currentHovered = position if position > -1: self.emit("hovered", position, Gtk.drag_get_source_widget(context)) else: self.emit("left") if position > -1: Gdk.drag_status(context, Gdk.DragAction.MOVE, timestamp) return True Gdk.drag_status(context, Gdk.DragAction.DEFAULT, timestamp) def __onDragLeave(self, arrow, context, timestamp): if self.currentHovered != -1: self.currentHovered = -1 self.emit("left") def __onDragDrop(self, arrow, context, x, y, timestamp): position = self.__getButtonAtPoint(x, y) if position > -1: self.emit("dropped", position, Gtk.drag_get_source_widget(context)) context.finish(True, True, timestamp) return True if __name__ == "__main__": w = Gtk.Window() w.connect("delete-event", Gtk.main_quit) sab = StarArrowButton( w, "/home/thomas/Programmering/workspace/pychess/glade/dock_top.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_right.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_bottom.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_left.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_center.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_star.svg", ) def on_expose(widget, event): cairo_win = widget.window.cairo_create() cx_loc = cy_loc = 100 radius = 50 cairo_win.arc(cx_loc, cy_loc, radius - 1, 0, 2 * pi) cairo_win.set_source_rgba(1.0, 0.0, 0.0, 1.0) cairo_win.set_operator(cairo.OPERATOR_OVER) cairo_win.fill() # w.connect("e) w.show_all() sab.show_all() Gtk.main() # if __name__ != "__main__": # w = Gtk.Window() # w.connect("delete-event", Gtk.main_quit) # hbox = Gtk.HBox() # # l = Gtk.Layout() # l.set_size_request(200,200) # sab = StarArrowButton("/home/thomas/Programmering/workspace/pychess/glade/dock_top.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_right.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_bottom.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_left.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_center.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_star.svg") # sab.set_size_request(200,200) # l.put(sab, 0, 0) # hbox.add(l) # def handle (*args): # sab.showAt(l, CENTER) # l.connect("button-press-event", handle) # # nb = Gtk.Notebook() # label = Gtk.Label(label="hi") # nb.append_page(label) # nb.set_tab_detachable(label, True) # hbox.add(nb) # w.add(hbox) # w.show_all() # Gtk.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/pydock/__init__.py0000755000175100001770000000151114614030313022070 0ustar00runnerdockerfrom collections import defaultdict from gi.repository import Gtk, GObject POSITIONS_COUNT = 5 NORTH, EAST, SOUTH, WEST, CENTER = range(POSITIONS_COUNT) reprPos = ("NORTH", "EAST", "SOUTH", "WEST", "CENTER") class TabReceiver(Gtk.Alignment): __instances = defaultdict(list) def __init__(self, perspective): GObject.GObject.__init__(self) self.__instances[perspective].append(self) def _del(self): try: index = TabReceiver.__instances[self.perspective].index(self) except ValueError: return del TabReceiver.__instances[self.perspective][index] def getInstances(self, perspective): return iter(self.__instances[perspective]) def showArrows(self): raise NotImplementedError def hideArrows(self): raise NotImplementedError ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/lib/pychess/widgets/tipOfTheDay.py0000755000175100001770000004003714614030313021226 0ustar00runnerdockerfrom random import randrange from pychess.System import conf from pychess.System import uistuff from pychess.widgets import mainwindow from pychess.Savers.remotegame import get_internet_game_providers class TipOfTheDay: def __init__(self): self.widgets = uistuff.GladeWidgets("tipoftheday.glade") self.widgets["window1"].set_transient_for(mainwindow()) uistuff.keepWindowSize( "tipoftheday", self.widgets["window1"], (320, 240), uistuff.POSITION_CENTER ) self.widgets["checkbutton1"].set_active(conf.get("show_tip_at_startup")) self.widgets["checkbutton1"].connect( "toggled", lambda w: conf.set("show_tip_at_startup", w.get_active()) ) self.widgets["close_button"].connect( "clicked", lambda w: self.widgets["window1"].emit("delete-event", None) ) self.widgets["window1"].connect( "delete_event", lambda w, a: self.widgets["window1"].destroy() ) self.widgets["back_button"].connect( "clicked", lambda w: self.set_currentIndex(self.tips_curindex - 1) ) self.widgets["forward_button"].connect( "clicked", lambda w: self.set_currentIndex(self.tips_curindex + 1) ) self.tips_fixed = 2 self.tips = [ # PyChess facts -- The first tips_fixed messages are always displayed first _( "PyChess is an open-source chess application that can be enhanced by any chess enthusiast: bug reports, source code, documentation, translations, feature requests, user assistance... Let's get in touch at https://pychess.github.io" ), _( "PyChess supports a wide range of chess engines, variants, Internet servers, and lessons. It is a perfect desktop application to conveniently improve your chess skills." ), _( "The releases of PyChess hold the name of historical world chess champions. Do you know the name of the current world chess champion?" ), _( "Did you know that you can help translate PyChess into your own language, Help > Translate PyChess." ), _( "A game consists of an opening, a middle-game and an end-game. PyChess is able to train you thanks to its opening book, its supported chess engines and its training module." ), # Chess facts _( "Did you know that it is possible to finish a chess game in just 2 turns?" ), _( "Did you know that a knight is better placed in the center of the board?" ), _( "Did you know that moving the queen at the very beginning of a game does not offer any particular advantage?" ), _( "Did you know that having two-colored bishops working together is very powerful?" ), _("Did you know that the rooks are generally engaged late in the game?"), _( "Did you know that the king can move across two squares under certain conditions? This is called " "castling" "." ), _( "Did you know that the number of possible chess games exceeds the number of atoms in the Universe?" ), # General UI _( "You can start a new game with Game > New Game, then choose the Players, Time Control and Chess Variants." ), _( "You can choose from 20 different difficulties to play against the computer. It will mainly affect the engines available time to think." ), _( "The level 20 engine difficulty gives full autonomy to the chess engine in managing its own time during the game." ), _( "To save a game use Game > Save Game As, provide the filename, and choose where you want it to be saved. At the bottom choose the extension type of the file, and Save." ), _( " " "Calling the flag" " is the termination of the current game when the time of your opponent is over. If the clock is on your side, click on the menu item Actions > Call Flag to claim the victory." ), _( "Press Ctrl+Z to ask your opponent to rollback the last played move. Against a computer or for an unrated game, undoing is generally automatically accepted." ), _( "To play in Fullscreen mode, just press the key F11. Press it again to exit this mode." ), _( "Many sounds are emitted by PyChess while you are playing if you activate them in the preferences: Settings > Preferences > Sound tab > Use sounds in PyChess." ), _( "Did you know that a game is generally finished after 20 to 40 moves per player? The estimated duration of a game is displayed when you configure a new game." ), _( "The standard file format to manage chess games is PGN. It stands for " "Portable Game Notation" ". Do not get confused with PNG which is a common file format to store drawings and pictures." ), _( "You can share a position by using the exchange format FEN, which stands for " "Forsyth-Edwards Notation" ". This format is also adapted for the chess variants." ), # Analysis _( "You must define a chess engine in the preferences in order to use the local chess analysis. By default, PyChess recommends the use of the free engine named Stockfish which is renowned to be among the strongest engines in the world." ), _( "Hint mode analyzes your game to show you the best current move. Enable it with the shortcut Ctrl+H or from the View menu." ), _( "Spy mode analyzes the threats and shows the best move that your opponent would play if it was his turn. Enable it with the shortcut Ctrl+Y or from the View menu." ), _( "Ponder is an option available in some chess engines that allows thinking when it is not the engine's turn. Using this feature will consume more resources on your computer." ), _( "MultiPV is an option of some chess engines that shows other possible good moves. They are displayed in the panel Hints. The value can be adapted from that panel with a double-click on the displayed figure." ), _( "You cannot use the local chess analysis mode while you are playing an unterminated game over the Internet. Else you would be a cheater." ), _( "An evaluation of +2.3 is an advantage for White of more than 2 pawns, even if White and Black have the same number of pawns. The position of all the pieces and their mobility are some of the factors that contribute to the engine score." ), _( "PyChess includes a chess engine that offers an evaluation for any chess position. Winning against PyChess engine is a coherent way to succeed in chess and improve your skills." ), _( "The rating is your strength: 1500 is a good average player, 2000 is a national champion and 2800 is the best human chess champion. You can view the ratings of the players via the Properties in the Game menu. The difference of points gives you your chance to win and the projected evolution of your rating. If your rating is provisional, it is appended with a question mark '?', for example " "1399?" "." ), _( "Several rating systems exist to evaluate your skills in chess. The most common one is called ELO (from its creator Arpad Elo) which was established in 1970. Schematically, the concept is to engage +/- 20 points for a game and that you will win or lose proportionally to the difference of ELO points you have with your opponent." ), _( "Each chess engine has its own evaluation function. It is normal to get varying scores for the same position when using different engines." ), # Opening book and EGDB _( "The opening book gives you the first few moves that are considered to be good from a theoretical perspective. You are free to play any other legal move." ), _( "The Gaviota tables are precalculated positions that tell the final outcome of the current game in terms of win, loss or draw." ), _( "Did you know that your computer is too small to store a 7-piece endgame database? That's why the Gaviota tablebase is limited to 5 pieces." ), _( "A tablebase can be connected either to PyChess, or to a compatible chess engine." ), _( "The DTZ is the " "distance to zero" ", so the remaining possible moves to end the game in a tie as soon as possible." ), # Variant chess _( "The chess variants consist of changing the start position, the rules of the game, the types of the pieces... The gameplay is totally modified, so you must use specialized chess engines to play against the computer." ), _( "In Chess960, the order of the main pieces are shuffled in a precise manner. Therefore, you cannot use the opening book and you should change your tactical habits." ), _( "When playing crazyhouse chess, the captured pieces change of ownership and can reappear on the board at a later turn." ), _( "Suicide chess, giveaway chess or antichess are all the same variant: you must give your pieces to your opponent by forcing the captures like at draughts (aka checkers). The outcome of the game can change completely if you make an incorrect move." ), _( "Playing horde in PyChess consists in destroying an onslaught of 36 white pawns with a normal set of black pieces." ), _( "You might be interested in playing " "King of the hill" " where the goal is to either checkmate or to place your king in the middle of the board, instead of protecting it in a corner of the board as usual." ), _( "A lot of fun is offered by atomic chess where one destroys all the surrounding main pieces at each capture." ), _( "The experienced chess players can use blind pieces by starting a new variant game." ), # Internet chess _( "You should sign up online to play on an Internet chess server, so that you can find your games later and see the evolution of your rating. In Preferences PyChess provides the possibility to save your played games locally as well." ), _( "Time compensation is a feature that doesn't waste your clock time because of the latency of your Internet connection. The module can be downloaded from the menu Edit > Externals." ), _( "You can play against chess engines on an Internet chess server. Use the filter to include or exclude them from the available players." ), _( "The communication with an Internet chess server is not standardized. Therefore, you can only connect to the supported chess servers in PyChess, like freechess.org or chessclub.com" ), _( "PyChess is able to download chess games remotely from the following websites:" ) + "\n\n" + ", ".join(get_internet_game_providers()), # Externals _( "PyChess uses the external module Scoutfish to evaluate the chess databases. For example, it is possible to extract the games where some pieces are in precise count or positions." ), _( "Parser/ChessDB is an external module used by PyChess to show the expected outcome for a given position." ), _( "SQLite is an internal module used to describe the loaded PGN files, so that PyChess can retrieve the games very quickly during a search." ), _( "PyChess generates three information files when a PGN file is opened: .sqlite (description), .scout (positions), .bin (book and outcomes). These files can be removed manually if desired." ), # Lessons _( "PyChess provides offline lessons to learn chess so that you will never be disappointed if you have no Internet connection." ), _( "To start Learning, click on the Book icon available on the Welcome screen. Or choose a category next to the button to start an activity directly." ), _( "The Lectures are commented games to learn step-by-step strategy and principles of some chess techniques. Just watch, read and learn." ), _( "Whatever the number of pawns, an end-game starts when the board consists of certain main pieces : 1 rook vs 1 bishop, 1 queen versus 2 rooks, etc... Knowing the right endgame moves will help you not miss a checkmate!" ), _( "A Puzzle is a set of simple positions classified by themes where you guess the best moves. It helps you understand patterns to perform an accurate attack or defense." ), _( "A Lesson is a complex study that explains the tactics for a given position. It is common to view circles and arrows over the board to focus on the behavior of the pieces, the threats, etc..." ), ] self.tips_seed = conf.get("tips_seed") if self.tips_seed == 0: # Forbidden value self.tips_seed = 123456789 + randrange(876543210) conf.set("tips_seed", self.tips_seed) self.tips_curindex = conf.get("tips_index") self.shuffleTips() def xorshift(self): self.tips_seed ^= ( (self.tips_seed << 13) ^ (self.tips_seed >> 17) ^ (self.tips_seed << 5) ) return self.tips_fixed + self.tips_seed % (len(self.tips) - self.tips_fixed) def shuffleTips(self): # Because of the fixed seed, the same shuffled list will be returned. # The idea is to manage all the tips above by category but to display # them once from a random order that can be reproduced at every run. for i in range(len(self.tips) - self.tips_fixed): p1 = self.xorshift() p2 = self.xorshift() if p1 != p2: tmp = self.tips[p1] self.tips[p1] = self.tips[p2] self.tips[p2] = tmp def show(self): self.set_currentIndex(self.tips_curindex) self.widgets["window1"].show() self.widgets["window1"].present() def set_currentIndex(self, value): if len(self.tips) == 0: return if value < 0: value = len(self.tips) - 1 elif value >= len(self.tips): value = 0 self.tips_curindex = value conf.set( "tips_index", self.tips_curindex + 1 ) # To get the next message loaded at the next run self.widgets["tipfield"].set_markup(self.tips[value]) ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.881477 pychess-1.0.5/lib/pychess.egg-info/0000755000175100001770000000000014614030425016515 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434324.0 pychess-1.0.5/lib/pychess.egg-info/PKG-INFO0000644000175100001770000000546414614030424017622 0ustar00runnerdockerMetadata-Version: 2.1 Name: pychess Version: 1.0.5 Summary: Chess client Home-page: https://pychess.github.io/ Author: Pychess team Author-email: pychess-people@googlegroups.com Maintainer: Thomas Dybdahl Ahle License: GPL3 Download-URL: https://github.com/pychess/pychess/releases Keywords: python gtk chess xboard gnuchess game pgn epd board linux Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: X11 Applications :: GTK Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Topic :: Games/Entertainment :: Board Games Requires-Python: >=3.8 Provides-Extra: gbulb License-File: LICENSE License-File: AUTHORS PyChess is a chess client for playing and analyzing chess games. It is intended to be usable both for those totally new to chess as well as advanced users who want to use a computer to further enhance their play. PyChess has a builtin python chess engine and auto-detects most popular chess engines (Stockfish, Rybka, Houdini, Shredder, GNU Chess, Crafty, Fruit, and many more). These engines are available as opponents, and are used to provide hints and analysis. PyChess also shows analysis from opening books and Gaviota end-game tablebases. When you get sick of playing computer players you can login to FICS (the Free Internet Chess Server) and play against people all over the world. PyChess has a built-in Timeseal client, so you won't lose clock time during a game due to lag. PyChess also has pre-move support, which means you can make (or start making) a move before your opponent has made their move. PyChess has many other features including: - CECP and UCI chess engine support with customizable engine configurations - Polyglot opening book support - Hint and Spy move arrows - Hint, Score, and Annotation panels - Play and analyze games in separate game tabs - 18 chess variants including Chess960, Suicide, Crazyhouse, Shuffle, Losers, Piece Odds, and Atomic - Reads and writes PGN, EPD and FEN chess file formats - Undo and pause chess games - Move animation in games - Drag and drop chess files - Optional game move and event sounds - Chess piece themes with 40 built-in piece themes - Legal move highlighting - Direct copy+paste pgn game input via Enter Game Notation open-game dialog - Internationalised text and Figurine Algebraic Notation (FAN) support - Translated into 38 languages (languages with +5% strings translated) - Easy to use and intuitive look and feel ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434324.0 pychess-1.0.5/lib/pychess.egg-info/SOURCES.txt0000644000175100001770000011277414614030424020414 0ustar00runnerdockerARTISTS AUTHORS DOCUMENTERS INSTALL LICENSE MANIFEST.in README.md TRANSLATORS create_theme_preview.py eco.db pgn2ecodb.py pychess pychess.desktop pychess.metainfo.xml pychess.png pychess.svg pychess.xml pychess_book.bin setup.cfg setup.py boards/aluminium_d.png boards/aluminium_l.png boards/brazilwood_d.png boards/brazilwood_l.png boards/cherry_d.png boards/cherry_l.png boards/fritz_d.png boards/fritz_l.png boards/lanta_d.png boards/lanta_l.png boards/lapis_d.png boards/lapis_l.png boards/mahogony_d.png boards/mahogony_l.png boards/maple_d.png boards/maple_l.png boards/marble_d.png boards/marble_l.png boards/sand_d.png boards/sand_l.png boards/sandlewood_d.png boards/sandlewood_l.png boards/slate_d.png boards/slate_l.png boards/wood_d.png boards/wood_l.png flags/C.png flags/ad.png flags/ae.png flags/af.png flags/ag.png flags/ai.png flags/al.png flags/am.png flags/an.png flags/ao.png flags/aq.png flags/ar.png flags/as.png flags/at.png flags/au.png flags/aw.png flags/ax.png flags/az.png flags/ba.png flags/bb.png flags/bd.png flags/be.png flags/bf.png flags/bg.png flags/bh.png flags/bi.png flags/bj.png flags/bl.png flags/bm.png flags/bn.png flags/bo.png flags/bq.png flags/br.png flags/bs.png flags/bt.png flags/bv.png flags/bw.png flags/by.png flags/bz.png flags/ca.png flags/cc.png flags/cd.png flags/cf.png flags/cg.png flags/ch.png flags/ci.png flags/ck.png flags/cl.png flags/cm.png flags/cn.png flags/co.png flags/cr.png flags/cu.png flags/cv.png flags/cw.png flags/cx.png flags/cy.png flags/cz.png flags/de.png flags/dj.png flags/dk.png flags/dm.png flags/do.png flags/dz.png flags/ec.png flags/ee.png flags/eg.png flags/eh.png flags/er.png flags/es.png flags/et.png flags/fi.png flags/fj.png flags/fk.png flags/fm.png flags/fo.png flags/fr.png flags/ga.png flags/gb.png flags/gd.png flags/ge.png flags/gf.png flags/gg.png flags/gh.png flags/gi.png flags/gl.png flags/gm.png flags/gn.png flags/gp.png flags/gq.png flags/gr.png flags/gs.png flags/gt.png flags/gu.png flags/gw.png flags/gy.png flags/hk.png flags/hm.png flags/hn.png flags/hr.png flags/ht.png flags/hu.png flags/id.png flags/ie.png flags/il.png flags/im.png flags/in.png flags/io.png flags/iq.png flags/ir.png flags/is.png flags/it.png flags/je.png flags/jm.png flags/jo.png flags/jp.png flags/ke.png flags/kg.png flags/kh.png flags/ki.png flags/km.png flags/kn.png flags/kp.png flags/kr.png flags/kw.png flags/ky.png flags/kz.png flags/la.png flags/lb.png flags/lc.png flags/li.png flags/lk.png flags/lr.png flags/ls.png flags/lt.png flags/lu.png flags/lv.png flags/ly.png flags/ma.png flags/mc.png flags/md.png flags/me.png flags/mf.png flags/mg.png flags/mh.png flags/mk.png flags/ml.png flags/mm.png flags/mn.png flags/mo.png flags/mp.png flags/mq.png flags/mr.png flags/ms.png flags/mt.png flags/mu.png flags/mv.png flags/mw.png flags/mx.png flags/my.png flags/mz.png flags/na.png flags/nc.png flags/ne.png flags/nf.png flags/ng.png flags/ni.png flags/nl.png flags/no.png flags/np.png flags/nr.png flags/nu.png flags/nz.png flags/om.png flags/pa.png flags/pe.png flags/pf.png flags/pg.png flags/ph.png flags/pk.png flags/pl.png flags/pm.png flags/pn.png flags/pr.png flags/ps.png flags/pt.png flags/pw.png flags/py.png flags/qa.png flags/re.png flags/ro.png flags/rs.png flags/ru.png flags/rw.png flags/sa.png flags/sb.png flags/sc.png flags/sd.png flags/se.png flags/sg.png flags/sh.png flags/si.png flags/sj.png flags/sk.png flags/sl.png flags/sm.png flags/sn.png flags/so.png flags/sr.png flags/ss.png flags/st.png flags/sv.png flags/sx.png flags/sy.png flags/sz.png flags/tc.png flags/td.png flags/tf.png flags/tg.png flags/th.png flags/tj.png flags/tk.png flags/tl.png flags/tm.png flags/tn.png flags/to.png flags/tp.png flags/tr.png flags/tt.png flags/tv.png flags/tw.png flags/tz.png flags/ua.png flags/ug.png flags/um.png flags/unknown.png flags/us.png flags/uy.png flags/uz.png flags/va.png flags/vc.png flags/ve.png flags/vg.png flags/vi.png flags/vn.png flags/vu.png flags/wf.png flags/ws.png flags/ye.png flags/yt.png flags/yu.png flags/za.png flags/zm.png flags/zw.png glade/16.png glade/PyChess.glade glade/about.png glade/analyze_game.glade glade/background.jpg glade/black.png glade/board.png glade/board.svg glade/challenge.png glade/christmas_about.png glade/clear.png glade/dictionary.png glade/discovererDialog.glade glade/dock_bottom.svg glade/dock_center.svg glade/dock_left.svg glade/dock_right.svg glade/dock_star.svg glade/dock_top.svg glade/document-properties.svg glade/fics_logon.glade glade/fics_lounge.glade glade/find.png glade/findbar.glade glade/first.png glade/gating.glade glade/globe.png glade/internet.png glade/last.png glade/mainline.png glade/manseek.png glade/manseek.svg glade/new24.png glade/newInOut.glade glade/next.png glade/open24.png glade/open48.png glade/panel_annotation.svg glade/panel_book.svg glade/panel_chat.svg glade/panel_comments.svg glade/panel_database.svg glade/panel_docker.svg glade/panel_docker_no.svg glade/panel_engineoutput.svg glade/panel_filter.svg glade/panel_games.svg glade/panel_moves.svg glade/panel_players.svg glade/panel_score.svg glade/panel_terminal.svg glade/parent.png glade/pause.png glade/people24.png glade/people48.png glade/piece-black.png glade/piece-unknown.png glade/piece-white.png glade/play.png glade/poput.png glade/prev.png glade/properties.png glade/random.png glade/save.png glade/saveGamesDialog.glade glade/seek.png glade/stock-vchain-24.png glade/stock-vchain-broken-24.png glade/stock_alarm.svg glade/taskers.glade glade/throbber.svg glade/tipoftheday.glade glade/wheel.png glade/white.png glade/16x16/weather-clear-night.png glade/16x16/weather-clear.png glade/16x16/weather-few-clouds-night.png glade/16x16/weather-few-clouds.png glade/16x16/weather-fog.png glade/16x16/weather-overcast.png glade/16x16/weather-severe-alert.png glade/16x16/weather-showers-scattered.png glade/16x16/weather-showers.png glade/16x16/weather-snow.png glade/16x16/weather-storm.png glade/48x48/weather-clear-night.png glade/48x48/weather-clear.png glade/48x48/weather-few-clouds-night.png glade/48x48/weather-few-clouds.png glade/48x48/weather-fog.png glade/48x48/weather-overcast.png glade/48x48/weather-severe-alert.png glade/48x48/weather-showers-scattered.png glade/48x48/weather-showers.png glade/48x48/weather-snow.png glade/48x48/weather-storm.png gtksourceview-3.0/language-specs/pgn.lang lang/af/LC_MESSAGES/pychess.mo lang/af/LC_MESSAGES/pychess.po lang/ar/LC_MESSAGES/pychess.mo lang/ar/LC_MESSAGES/pychess.po lang/az/LC_MESSAGES/pychess.mo lang/az/LC_MESSAGES/pychess.po lang/bg/LC_MESSAGES/pychess.mo lang/bg/LC_MESSAGES/pychess.po lang/bn/LC_MESSAGES/pychess.mo lang/bn/LC_MESSAGES/pychess.po lang/br/LC_MESSAGES/pychess.mo lang/br/LC_MESSAGES/pychess.po lang/ca/LC_MESSAGES/pychess.mo lang/ca/LC_MESSAGES/pychess.po lang/cs/LC_MESSAGES/pychess.mo lang/cs/LC_MESSAGES/pychess.po lang/da/LC_MESSAGES/pychess.mo lang/da/LC_MESSAGES/pychess.po lang/de/LC_MESSAGES/pychess.mo lang/de/LC_MESSAGES/pychess.po lang/el/LC_MESSAGES/pychess.mo lang/el/LC_MESSAGES/pychess.po lang/en_GB/LC_MESSAGES/pychess.mo lang/en_GB/LC_MESSAGES/pychess.po lang/es/LC_MESSAGES/pychess.mo lang/es/LC_MESSAGES/pychess.po lang/et/LC_MESSAGES/pychess.mo lang/et/LC_MESSAGES/pychess.po lang/eu/LC_MESSAGES/pychess.mo lang/eu/LC_MESSAGES/pychess.po lang/eu_ES/LC_MESSAGES/pychess.mo lang/eu_ES/LC_MESSAGES/pychess.po lang/fa/LC_MESSAGES/pychess.mo lang/fa/LC_MESSAGES/pychess.po lang/fi/LC_MESSAGES/pychess.mo lang/fi/LC_MESSAGES/pychess.po lang/fr/LC_MESSAGES/pychess.mo lang/fr/LC_MESSAGES/pychess.po lang/ga/LC_MESSAGES/pychess.mo lang/ga/LC_MESSAGES/pychess.po lang/gl/LC_MESSAGES/pychess.mo lang/gl/LC_MESSAGES/pychess.po lang/he/LC_MESSAGES/pychess.mo lang/he/LC_MESSAGES/pychess.po lang/hi/LC_MESSAGES/pychess.mo lang/hi/LC_MESSAGES/pychess.po lang/hr/LC_MESSAGES/pychess.mo lang/hr/LC_MESSAGES/pychess.po lang/hu/LC_MESSAGES/pychess.mo lang/hu/LC_MESSAGES/pychess.po lang/id/LC_MESSAGES/pychess.mo lang/id/LC_MESSAGES/pychess.po lang/is/LC_MESSAGES/pychess.mo lang/is/LC_MESSAGES/pychess.po lang/it/LC_MESSAGES/pychess.mo lang/it/LC_MESSAGES/pychess.po lang/ja/LC_MESSAGES/pychess.mo lang/ja/LC_MESSAGES/pychess.po lang/jv/LC_MESSAGES/pychess.mo lang/jv/LC_MESSAGES/pychess.po lang/ka/LC_MESSAGES/pychess.mo lang/ka/LC_MESSAGES/pychess.po lang/kn/LC_MESSAGES/pychess.mo lang/kn/LC_MESSAGES/pychess.po lang/ko/LC_MESSAGES/pychess.mo lang/ko/LC_MESSAGES/pychess.po lang/ku/LC_MESSAGES/pychess.mo lang/ku/LC_MESSAGES/pychess.po lang/lt/LC_MESSAGES/pychess.mo lang/lt/LC_MESSAGES/pychess.po lang/lv/LC_MESSAGES/pychess.mo lang/lv/LC_MESSAGES/pychess.po lang/ml/LC_MESSAGES/pychess.mo lang/ml/LC_MESSAGES/pychess.po lang/mr/LC_MESSAGES/pychess.mo lang/mr/LC_MESSAGES/pychess.po lang/ms_MY/LC_MESSAGES/pychess.mo lang/ms_MY/LC_MESSAGES/pychess.po lang/nb/LC_MESSAGES/pychess.mo lang/nb/LC_MESSAGES/pychess.po lang/nl/LC_MESSAGES/pychess.mo lang/nl/LC_MESSAGES/pychess.po lang/oc/LC_MESSAGES/pychess.mo lang/oc/LC_MESSAGES/pychess.po lang/pl/LC_MESSAGES/pychess.mo lang/pl/LC_MESSAGES/pychess.po lang/pl_PL/LC_MESSAGES/pychess.mo lang/pl_PL/LC_MESSAGES/pychess.po lang/pt/LC_MESSAGES/pychess.mo lang/pt/LC_MESSAGES/pychess.po lang/pt_BR/LC_MESSAGES/pychess.mo lang/pt_BR/LC_MESSAGES/pychess.po lang/ro/LC_MESSAGES/pychess.mo lang/ro/LC_MESSAGES/pychess.po lang/ru/LC_MESSAGES/pychess.mo lang/ru/LC_MESSAGES/pychess.po lang/si/LC_MESSAGES/pychess.mo lang/si/LC_MESSAGES/pychess.po lang/sk/LC_MESSAGES/pychess.mo lang/sk/LC_MESSAGES/pychess.po lang/sl/LC_MESSAGES/pychess.mo lang/sl/LC_MESSAGES/pychess.po lang/sq/LC_MESSAGES/pychess.mo lang/sq/LC_MESSAGES/pychess.po lang/sv/LC_MESSAGES/pychess.mo lang/sv/LC_MESSAGES/pychess.po lang/te/LC_MESSAGES/pychess.mo lang/te/LC_MESSAGES/pychess.po lang/tr/LC_MESSAGES/pychess.mo lang/tr/LC_MESSAGES/pychess.po lang/uk/LC_MESSAGES/pychess.mo lang/uk/LC_MESSAGES/pychess.po lang/vi/LC_MESSAGES/pychess.mo lang/vi/LC_MESSAGES/pychess.po lang/wa/LC_MESSAGES/pychess.mo lang/wa/LC_MESSAGES/pychess.po lang/zh_CN/LC_MESSAGES/pychess.mo lang/zh_CN/LC_MESSAGES/pychess.po lang/zu/LC_MESSAGES/pychess.mo lang/zu/LC_MESSAGES/pychess.po learn/lectures/lec1.txt learn/lectures/lec10.txt learn/lectures/lec11.txt learn/lectures/lec12.txt learn/lectures/lec13.txt learn/lectures/lec14.txt learn/lectures/lec15.txt learn/lectures/lec16.txt learn/lectures/lec17.txt learn/lectures/lec18.txt learn/lectures/lec19.txt learn/lectures/lec2.txt learn/lectures/lec20.txt learn/lectures/lec21.txt learn/lectures/lec22.txt learn/lectures/lec23.txt learn/lectures/lec24.txt learn/lectures/lec25.txt learn/lectures/lec26.txt learn/lectures/lec27.txt learn/lectures/lec28.txt learn/lectures/lec29.txt learn/lectures/lec3.txt learn/lectures/lec30.txt learn/lectures/lec31.txt learn/lectures/lec4.txt learn/lectures/lec5.txt learn/lectures/lec6.txt learn/lectures/lec7.txt learn/lectures/lec8.txt learn/lectures/lec9.txt learn/lectures/toddmf_lecbot.txt learn/lessons/lichess_study_2nd-part-game-puzzles-with-interactive-lessons_by_Francesco_Super_2018.01.03.pgn learn/lessons/lichess_study_2nd-part-game-puzzles-with-interactive-lessons_by_Francesco_Super_2018.01.03.sqlite learn/lessons/lichess_study_beautiful-checkmate-puzzles_by_thijscom_2018.04.16.pgn learn/lessons/lichess_study_beautiful-checkmate-puzzles_by_thijscom_2018.04.16.sqlite learn/lessons/lichess_study_beautiful-chess-studies-1_by_thijscom_2018.03.05.pgn learn/lessons/lichess_study_beautiful-chess-studies-1_by_thijscom_2018.03.05.sqlite learn/lessons/lichess_study_beautiful-chess-studies-2_by_thijscom_2018.04.17.pgn learn/lessons/lichess_study_beautiful-chess-studies-2_by_thijscom_2018.04.17.sqlite learn/lessons/lichess_study_beta-lichess-practice-7th-rank-rook-pawn-with-a-passive-rook_by_arex_2018.04.04.pgn learn/lessons/lichess_study_beta-lichess-practice-7th-rank-rook-pawn-with-a-passive-rook_by_arex_2018.04.04.sqlite learn/lessons/lichess_study_beta-lichess-practice-checkmating-with-a-knight-and-bishop_by_arex_2017.08.02.pgn learn/lessons/lichess_study_beta-lichess-practice-checkmating-with-a-knight-and-bishop_by_arex_2017.08.02.sqlite learn/lessons/lichess_study_beta-lichess-practice-queen-vs-7th-rank-pawn_by_arex_2018.04.02.pgn learn/lessons/lichess_study_beta-lichess-practice-queen-vs-7th-rank-pawn_by_arex_2018.04.02.sqlite learn/lessons/lichess_study_charles-xii-at-bender_by_gbtami_2016.08.15.pgn learn/lessons/lichess_study_charles-xii-at-bender_by_gbtami_2016.08.15.sqlite learn/lessons/lichess_study_game-puzzles-with-interactive-lessons_by_Francesco_Super_2017.08.27.pgn learn/lessons/lichess_study_game-puzzles-with-interactive-lessons_by_Francesco_Super_2017.08.27.sqlite learn/puzzles/alekhine.olv learn/puzzles/baird.olv learn/puzzles/benko.olv learn/puzzles/bron.olv learn/puzzles/cheron.olv learn/puzzles/dawson.olv learn/puzzles/horwitz.olv learn/puzzles/kubbel.olv learn/puzzles/lasker.olv learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-i_by_arex_2017.01.22.pgn learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-i_by_arex_2017.01.22.sqlite learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-ii_by_arex_2017.01.25.pgn learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-ii_by_arex_2017.01.25.sqlite learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-iii_by_arex_2017.01.27.pgn learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-iii_by_arex_2017.01.27.sqlite learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-iv_by_arex_2017.01.25.pgn learn/puzzles/lichess_study_lichess-practice-checkmate-patterns-iv_by_arex_2017.01.25.sqlite learn/puzzles/lichess_study_lichess-practice-discovered-attacks_by_arex_2017.01.30.pgn learn/puzzles/lichess_study_lichess-practice-discovered-attacks_by_arex_2017.01.30.sqlite learn/puzzles/lichess_study_lichess-practice-double-check_by_arex_2017.02.12.pgn learn/puzzles/lichess_study_lichess-practice-double-check_by_arex_2017.02.12.sqlite learn/puzzles/lichess_study_lichess-practice-greek-gift_by_arex_2017.02.11.pgn learn/puzzles/lichess_study_lichess-practice-greek-gift_by_arex_2017.02.11.sqlite learn/puzzles/lichess_study_lichess-practice-interference_by_arex_2017.02.11.pgn learn/puzzles/lichess_study_lichess-practice-interference_by_arex_2017.02.11.sqlite learn/puzzles/lichess_study_lichess-practice-key-squares_by_arex_2017.01.21.pgn learn/puzzles/lichess_study_lichess-practice-key-squares_by_arex_2017.01.21.sqlite learn/puzzles/lichess_study_lichess-practice-opposition_by_arex_2017.01.22.pgn learn/puzzles/lichess_study_lichess-practice-opposition_by_arex_2017.01.22.sqlite learn/puzzles/lichess_study_lichess-practice-overloaded-pieces_by_arex_2017.01.31.pgn learn/puzzles/lichess_study_lichess-practice-overloaded-pieces_by_arex_2017.01.31.sqlite learn/puzzles/lichess_study_lichess-practice-piece-checkmates-i_by_arex_2017.01.25.pgn learn/puzzles/lichess_study_lichess-practice-piece-checkmates-i_by_arex_2017.01.25.sqlite learn/puzzles/lichess_study_lichess-practice-piece-checkmates-ii_by_arex_2017.01.25.pgn learn/puzzles/lichess_study_lichess-practice-piece-checkmates-ii_by_arex_2017.01.25.sqlite learn/puzzles/lichess_study_lichess-practice-rook-endgames_by_TonyRo_2017.02.01.pgn learn/puzzles/lichess_study_lichess-practice-rook-endgames_by_TonyRo_2017.02.01.sqlite learn/puzzles/lichess_study_lichess-practice-the-fork_by_arex_2017.01.29.pgn learn/puzzles/lichess_study_lichess-practice-the-fork_by_arex_2017.01.29.sqlite learn/puzzles/lichess_study_lichess-practice-the-pin_by_arex_2017.01.22.pgn learn/puzzles/lichess_study_lichess-practice-the-pin_by_arex_2017.01.22.sqlite learn/puzzles/lichess_study_lichess-practice-the-skewer_by_arex_2017.01.29.pgn learn/puzzles/lichess_study_lichess-practice-the-skewer_by_arex_2017.01.29.sqlite learn/puzzles/lichess_study_lichess-practice-zugzwang_by_arex_2017.02.01.pgn learn/puzzles/lichess_study_lichess-practice-zugzwang_by_arex_2017.02.01.sqlite learn/puzzles/lichess_study_lichess-practice-zwischenzug_by_arex_2017.02.02.pgn learn/puzzles/lichess_study_lichess-practice-zwischenzug_by_arex_2017.02.02.sqlite learn/puzzles/loyd.olv learn/puzzles/mansfield.olv learn/puzzles/mate_in_2.pgn learn/puzzles/mate_in_2.sqlite learn/puzzles/mate_in_3.pgn learn/puzzles/mate_in_3.sqlite learn/puzzles/mate_in_4.pgn learn/puzzles/mate_in_4.sqlite learn/puzzles/reti.olv learn/puzzles/troicki.olv learn/puzzles/vukcevich.olv lib/pychess/Main.py lib/pychess/__init__.py lib/pychess.egg-info/PKG-INFO lib/pychess.egg-info/SOURCES.txt lib/pychess.egg-info/dependency_links.txt lib/pychess.egg-info/requires.txt lib/pychess.egg-info/top_level.txt lib/pychess/Database/JvR.py lib/pychess/Database/PgnImport.py lib/pychess/Database/__init__.py lib/pychess/Database/dbwalk.py lib/pychess/Database/model.py lib/pychess/Players/CECPEngine.py lib/pychess/Players/Engine.py lib/pychess/Players/Human.py lib/pychess/Players/ICPlayer.py lib/pychess/Players/Player.py lib/pychess/Players/ProtocolEngine.py lib/pychess/Players/PyChess.py lib/pychess/Players/PyChessCECP.py lib/pychess/Players/PyChessFICS.py lib/pychess/Players/UCIEngine.py lib/pychess/Players/__init__.py lib/pychess/Players/engineList.py lib/pychess/Players/engineNest.py lib/pychess/Savers/ChessFile.py lib/pychess/Savers/__init__.py lib/pychess/Savers/chesspastebin.py lib/pychess/Savers/database.py lib/pychess/Savers/epd.py lib/pychess/Savers/fen.py lib/pychess/Savers/html.py lib/pychess/Savers/olv.py lib/pychess/Savers/pgn.py lib/pychess/Savers/png.py lib/pychess/Savers/remotegame.py lib/pychess/Savers/txt.py lib/pychess/System/Log.py lib/pychess/System/LogEmitter.py lib/pychess/System/SubProcess.py lib/pychess/System/__init__.py lib/pychess/System/accordion.py lib/pychess/System/command.py lib/pychess/System/conf.py lib/pychess/System/cpu.py lib/pychess/System/debug.py lib/pychess/System/gst_player.py lib/pychess/System/gstreamer.py lib/pychess/System/ping.py lib/pychess/System/prefix.py lib/pychess/System/protoopen.py lib/pychess/System/readuntil.py lib/pychess/System/repeat.py lib/pychess/System/uistuff.py lib/pychess/Utils/Board.py lib/pychess/Utils/Cord.py lib/pychess/Utils/DecisionSupportAlgorithm.py lib/pychess/Utils/EndgameTable.py lib/pychess/Utils/GameModel.py lib/pychess/Utils/IconLoader.py lib/pychess/Utils/LearnModel.py lib/pychess/Utils/Move.py lib/pychess/Utils/Offer.py lib/pychess/Utils/Piece.py lib/pychess/Utils/SetupModel.py lib/pychess/Utils/TimeModel.py lib/pychess/Utils/__init__.py lib/pychess/Utils/book.py lib/pychess/Utils/checkversion.py lib/pychess/Utils/const.py lib/pychess/Utils/eco.py lib/pychess/Utils/elo.py lib/pychess/Utils/eval.py lib/pychess/Utils/isoCountries.py lib/pychess/Utils/logic.py lib/pychess/Utils/repr.py lib/pychess/Utils/lutils/Benchmark.py lib/pychess/Utils/lutils/LBoard.py lib/pychess/Utils/lutils/PolyglotHash.py lib/pychess/Utils/lutils/TranspositionTable.py lib/pychess/Utils/lutils/__init__.py lib/pychess/Utils/lutils/attack.py lib/pychess/Utils/lutils/bitboard.py lib/pychess/Utils/lutils/egtb_gaviota.py lib/pychess/Utils/lutils/egtb_k4it.py lib/pychess/Utils/lutils/ldata.py lib/pychess/Utils/lutils/ldraw.py lib/pychess/Utils/lutils/leval.py lib/pychess/Utils/lutils/lmove.py lib/pychess/Utils/lutils/lmovegen.py lib/pychess/Utils/lutils/lsearch.py lib/pychess/Utils/lutils/lsort.py lib/pychess/Utils/lutils/perft.py lib/pychess/Utils/lutils/strateval.py lib/pychess/Utils/lutils/validator.py lib/pychess/Variants/__init__.py lib/pychess/Variants/asean.py lib/pychess/Variants/asymmetricrandom.py lib/pychess/Variants/atomic.py lib/pychess/Variants/blindfold.py lib/pychess/Variants/bughouse.py lib/pychess/Variants/corner.py lib/pychess/Variants/crazyhouse.py lib/pychess/Variants/euroshogi.py lib/pychess/Variants/fischerandom.py lib/pychess/Variants/giveaway.py lib/pychess/Variants/horde.py lib/pychess/Variants/kingofthehill.py lib/pychess/Variants/knightodds.py lib/pychess/Variants/lightbrigade.py lib/pychess/Variants/losers.py lib/pychess/Variants/normal.py lib/pychess/Variants/pawnodds.py lib/pychess/Variants/pawnspassed.py lib/pychess/Variants/pawnspushed.py lib/pychess/Variants/placement.py lib/pychess/Variants/queenodds.py lib/pychess/Variants/racingkings.py lib/pychess/Variants/randomchess.py lib/pychess/Variants/rookodds.py lib/pychess/Variants/seirawan.py lib/pychess/Variants/setupposition.py lib/pychess/Variants/shuffle.py lib/pychess/Variants/suicide.py lib/pychess/Variants/theban.py lib/pychess/Variants/threecheck.py lib/pychess/Variants/upsidedown.py lib/pychess/Variants/wildcastle.py lib/pychess/Variants/wildcastleshuffle.py lib/pychess/external/__init__.py lib/pychess/external/chess_db.py lib/pychess/external/scoutfish.py lib/pychess/gfx/Pieces.py lib/pychess/gfx/__init__.py lib/pychess/ic/FICSConnection.py lib/pychess/ic/FICSObjects.py lib/pychess/ic/ICGameModel.py lib/pychess/ic/ICLogon.py lib/pychess/ic/TimeSeal.py lib/pychess/ic/VerboseTelnet.py lib/pychess/ic/__init__.py lib/pychess/ic/icc.py lib/pychess/ic/managers/AdjournManager.py lib/pychess/ic/managers/AutoLogOutManager.py lib/pychess/ic/managers/BoardManager.py lib/pychess/ic/managers/ChatManager.py lib/pychess/ic/managers/ConsoleManager.py lib/pychess/ic/managers/ErrorManager.py lib/pychess/ic/managers/FingerManager.py lib/pychess/ic/managers/HelperManager.py lib/pychess/ic/managers/ICCAdjournManager.py lib/pychess/ic/managers/ICCAutoLogOutManager.py lib/pychess/ic/managers/ICCBoardManager.py lib/pychess/ic/managers/ICCChatManager.py lib/pychess/ic/managers/ICCErrorManager.py lib/pychess/ic/managers/ICCFingerManager.py lib/pychess/ic/managers/ICCHelperManager.py lib/pychess/ic/managers/ICCListAndVarManager.py lib/pychess/ic/managers/ICCNewsManager.py lib/pychess/ic/managers/ICCOfferManager.py lib/pychess/ic/managers/ICCSeekManager.py lib/pychess/ic/managers/ListAndVarManager.py lib/pychess/ic/managers/NewsManager.py lib/pychess/ic/managers/OfferManager.py lib/pychess/ic/managers/SeekManager.py lib/pychess/ic/managers/__init__.py lib/pychess/perspectives/__init__.py lib/pychess/perspectives/database/FilterPanel.py lib/pychess/perspectives/database/OpeningTreePanel.py lib/pychess/perspectives/database/PreviewPanel.py lib/pychess/perspectives/database/__init__.py lib/pychess/perspectives/database/gamelist.py lib/pychess/perspectives/fics/ArchiveListPanel.py lib/pychess/perspectives/fics/ChatPanel.py lib/pychess/perspectives/fics/ConsolePanel.py lib/pychess/perspectives/fics/FicsHome.py lib/pychess/perspectives/fics/GameListPanel.py lib/pychess/perspectives/fics/NewsPanel.py lib/pychess/perspectives/fics/ParrentListSection.py lib/pychess/perspectives/fics/PlayerListPanel.py lib/pychess/perspectives/fics/SeekChallenge.py lib/pychess/perspectives/fics/SeekGraphPanel.py lib/pychess/perspectives/fics/SeekListPanel.py lib/pychess/perspectives/fics/__init__.py lib/pychess/perspectives/games/__init__.py lib/pychess/perspectives/games/annotationPanel.py lib/pychess/perspectives/games/bookPanel.py lib/pychess/perspectives/games/chatPanel.py lib/pychess/perspectives/games/commentPanel.py lib/pychess/perspectives/games/engineOutputPanel.py lib/pychess/perspectives/games/historyPanel.py lib/pychess/perspectives/games/scorePanel.py lib/pychess/perspectives/learn/EndgamesPanel.py lib/pychess/perspectives/learn/LecturesPanel.py lib/pychess/perspectives/learn/LessonsPanel.py lib/pychess/perspectives/learn/PuzzlesPanel.py lib/pychess/perspectives/learn/__init__.py lib/pychess/perspectives/learn/generateLessonsSidepanel.py lib/pychess/perspectives/welcome/__init__.py lib/pychess/widgets/Background.py lib/pychess/widgets/BoardControl.py lib/pychess/widgets/BoardView.py lib/pychess/widgets/BorderBox.py lib/pychess/widgets/ChainVBox.py lib/pychess/widgets/ChannelsPanel.py lib/pychess/widgets/ChatView.py lib/pychess/widgets/ChessClock.py lib/pychess/widgets/ExternalsDialog.py lib/pychess/widgets/GatingDialog.py lib/pychess/widgets/ImageMenu.py lib/pychess/widgets/InfoBar.py lib/pychess/widgets/InfoPanel.py lib/pychess/widgets/LearnInfoBar.py lib/pychess/widgets/LogDialog.py lib/pychess/widgets/MenuItemsDict.py lib/pychess/widgets/PieceWidget.py lib/pychess/widgets/PromotionDialog.py lib/pychess/widgets/RecentChooser.py lib/pychess/widgets/SpotGraph.py lib/pychess/widgets/TaskerManager.py lib/pychess/widgets/ViewsPanel.py lib/pychess/widgets/WebKitBrowser.py lib/pychess/widgets/__init__.py lib/pychess/widgets/analyzegameDialog.py lib/pychess/widgets/discovererDialog.py lib/pychess/widgets/enginesDialog.py lib/pychess/widgets/gameinfoDialog.py lib/pychess/widgets/gamenanny.py lib/pychess/widgets/gamewidget.py lib/pychess/widgets/newGameDialog.py lib/pychess/widgets/playerinfoDialog.py lib/pychess/widgets/preferencesDialog.py lib/pychess/widgets/prompttext.py lib/pychess/widgets/tipOfTheDay.py lib/pychess/widgets/pydock/ArrowButton.py lib/pychess/widgets/pydock/HighlightArea.py lib/pychess/widgets/pydock/OverlayWindow.py lib/pychess/widgets/pydock/PyDockComposite.py lib/pychess/widgets/pydock/PyDockLeaf.py lib/pychess/widgets/pydock/PyDockTop.py lib/pychess/widgets/pydock/StarArrowButton.py lib/pychess/widgets/pydock/__init__.py manpages/pychess.1.gz pieces/Alfonso.png pieces/Alila.png pieces/Alpha.png pieces/Atopdown.png pieces/California.png pieces/Cardinal.png pieces/Cburnett.png pieces/Celtic.png pieces/Chess7.png pieces/Chessicons.png pieces/Chessmonk.png pieces/Chessnut.png pieces/Companion.png pieces/Dubrovny.png pieces/Eyes.png pieces/Fantasy.png pieces/Fantasy_alt.png pieces/Freak.png pieces/Freestaunton.png pieces/Fresca.png pieces/Gioco.png pieces/Governor.png pieces/Horsey.png pieces/Icpieces.png pieces/Kilfiger.png pieces/Kosal.png pieces/Leipzig.png pieces/Letter.png pieces/Libra.png pieces/Maestro.png pieces/Magnetic.png pieces/Makruk.png pieces/Maya.png pieces/Merida.png pieces/Merida_new.png pieces/Metaltops.png pieces/Pirat.png pieces/Pirouetti.png pieces/Pixel.png pieces/Prmi.png pieces/Regular.png pieces/Reillycraig.png pieces/Riohacha.png pieces/Shapes.png pieces/Sittuyin.png pieces/Skulls.png pieces/Spatial.png pieces/Staunty.png pieces/Tatiana.png pieces/alfonso/bb.svg pieces/alfonso/bk.svg pieces/alfonso/bn.svg pieces/alfonso/bp.svg pieces/alfonso/bq.svg pieces/alfonso/br.svg pieces/alfonso/wb.svg pieces/alfonso/wk.svg pieces/alfonso/wn.svg pieces/alfonso/wp.svg pieces/alfonso/wq.svg pieces/alfonso/wr.svg pieces/alila/bb.svg pieces/alila/bk.svg pieces/alila/bn.svg pieces/alila/bp.svg pieces/alila/bq.svg pieces/alila/br.svg pieces/alila/wb.svg pieces/alila/wk.svg pieces/alila/wn.svg pieces/alila/wp.svg pieces/alila/wq.svg pieces/alila/wr.svg pieces/alpha/bb.svg pieces/alpha/bk.svg pieces/alpha/bn.svg pieces/alpha/bp.svg pieces/alpha/bq.svg pieces/alpha/br.svg pieces/alpha/wb.svg pieces/alpha/wk.svg pieces/alpha/wn.svg pieces/alpha/wp.svg pieces/alpha/wq.svg pieces/alpha/wr.svg pieces/atopdown/bb.svg pieces/atopdown/bk.svg pieces/atopdown/bn.svg pieces/atopdown/bp.svg pieces/atopdown/bq.svg pieces/atopdown/br.svg pieces/atopdown/wb.svg pieces/atopdown/wk.svg pieces/atopdown/wn.svg pieces/atopdown/wp.svg pieces/atopdown/wq.svg pieces/atopdown/wr.svg pieces/california/bb.svg pieces/california/bk.svg pieces/california/bn.svg pieces/california/bp.svg pieces/california/bq.svg pieces/california/br.svg pieces/california/license.md pieces/california/wb.svg pieces/california/wk.svg pieces/california/wn.svg pieces/california/wp.svg pieces/california/wq.svg pieces/california/wr.svg pieces/cardinal/bb.svg pieces/cardinal/bk.svg pieces/cardinal/bn.svg pieces/cardinal/bp.svg pieces/cardinal/bq.svg pieces/cardinal/br.svg pieces/cardinal/license.md pieces/cardinal/wb.svg pieces/cardinal/wk.svg pieces/cardinal/wn.svg pieces/cardinal/wp.svg pieces/cardinal/wq.svg pieces/cardinal/wr.svg pieces/cburnett/bb.svg pieces/cburnett/bk.svg pieces/cburnett/bn.svg pieces/cburnett/bp.svg pieces/cburnett/bq.svg pieces/cburnett/br.svg pieces/cburnett/license.txt pieces/cburnett/wb.svg pieces/cburnett/wk.svg pieces/cburnett/wn.svg pieces/cburnett/wp.svg pieces/cburnett/wq.svg pieces/cburnett/wr.svg pieces/celtic/celtic.svg pieces/celtic/license.txt pieces/chess7/bb.svg pieces/chess7/bk.svg pieces/chess7/bn.svg pieces/chess7/bp.svg pieces/chess7/bq.svg pieces/chess7/br.svg pieces/chess7/license.md pieces/chess7/wb.svg pieces/chess7/wk.svg pieces/chess7/wn.svg pieces/chess7/wp.svg pieces/chess7/wq.svg pieces/chess7/wr.svg pieces/chessicons/bb.svg pieces/chessicons/bk.svg pieces/chessicons/bn.svg pieces/chessicons/bp.svg pieces/chessicons/bq.svg pieces/chessicons/br.svg pieces/chessicons/license.txt pieces/chessicons/wb.svg pieces/chessicons/wk.svg pieces/chessicons/wn.svg pieces/chessicons/wp.svg pieces/chessicons/wq.svg pieces/chessicons/wr.svg pieces/chessmonk/bb.svg pieces/chessmonk/bk.svg pieces/chessmonk/bn.svg pieces/chessmonk/bp.svg pieces/chessmonk/bq.svg pieces/chessmonk/br.svg pieces/chessmonk/wb.svg pieces/chessmonk/wk.svg pieces/chessmonk/wn.svg pieces/chessmonk/wp.svg pieces/chessmonk/wq.svg pieces/chessmonk/wr.svg pieces/chessnut/bb.svg pieces/chessnut/bk.svg pieces/chessnut/bn.svg pieces/chessnut/bp.svg pieces/chessnut/bq.svg pieces/chessnut/br.svg pieces/chessnut/license.md pieces/chessnut/wb.svg pieces/chessnut/wk.svg pieces/chessnut/wn.svg pieces/chessnut/wp.svg pieces/chessnut/wq.svg pieces/chessnut/wr.svg pieces/companion/bb.svg pieces/companion/bk.svg pieces/companion/bn.svg pieces/companion/bp.svg pieces/companion/bq.svg pieces/companion/br.svg pieces/companion/license.md pieces/companion/wb.svg pieces/companion/wk.svg pieces/companion/wn.svg pieces/companion/wp.svg pieces/companion/wq.svg pieces/companion/wr.svg pieces/dubrovny/bb.svg pieces/dubrovny/bk.svg pieces/dubrovny/bn.svg pieces/dubrovny/bp.svg pieces/dubrovny/bq.svg pieces/dubrovny/br.svg pieces/dubrovny/license.md pieces/dubrovny/wb.svg pieces/dubrovny/wk.svg pieces/dubrovny/wn.svg pieces/dubrovny/wp.svg pieces/dubrovny/wq.svg pieces/dubrovny/wr.svg pieces/eyes/eyes.svg pieces/fantasy/fantasy.svg pieces/fantasy_alt/fantasy_alt.svg pieces/freak/freak.svg pieces/freestaunton/bb.svg pieces/freestaunton/bk.svg pieces/freestaunton/bn.svg pieces/freestaunton/bp.svg pieces/freestaunton/bq.svg pieces/freestaunton/br.svg pieces/freestaunton/license.txt pieces/freestaunton/wb.svg pieces/freestaunton/wk.svg pieces/freestaunton/wn.svg pieces/freestaunton/wp.svg pieces/freestaunton/wq.svg pieces/freestaunton/wr.svg pieces/fresca/bb.svg pieces/fresca/bk.svg pieces/fresca/bn.svg pieces/fresca/bp.svg pieces/fresca/bq.svg pieces/fresca/br.svg pieces/fresca/license.md pieces/fresca/wb.svg pieces/fresca/wk.svg pieces/fresca/wn.svg pieces/fresca/wp.svg pieces/fresca/wq.svg pieces/fresca/wr.svg pieces/gioco/bb.svg pieces/gioco/bk.svg pieces/gioco/bn.svg pieces/gioco/bp.svg pieces/gioco/bq.svg pieces/gioco/br.svg pieces/gioco/license.md pieces/gioco/wb.svg pieces/gioco/wk.svg pieces/gioco/wn.svg pieces/gioco/wp.svg pieces/gioco/wq.svg pieces/gioco/wr.svg pieces/governor/bb.svg pieces/governor/bk.svg pieces/governor/bn.svg pieces/governor/bp.svg pieces/governor/bq.svg pieces/governor/br.svg pieces/governor/license.md pieces/governor/wb.svg pieces/governor/wk.svg pieces/governor/wn.svg pieces/governor/wp.svg pieces/governor/wq.svg pieces/governor/wr.svg pieces/horsey/bb.svg pieces/horsey/bk.svg pieces/horsey/bn.svg pieces/horsey/bp.svg pieces/horsey/bq.svg pieces/horsey/br.svg pieces/horsey/license.md pieces/horsey/wb.svg pieces/horsey/wk.svg pieces/horsey/wn.svg pieces/horsey/wp.svg pieces/horsey/wq.svg pieces/horsey/wr.svg pieces/icpieces/bb.svg pieces/icpieces/bk.svg pieces/icpieces/bn.svg pieces/icpieces/bp.svg pieces/icpieces/bq.svg pieces/icpieces/br.svg pieces/icpieces/license.md pieces/icpieces/wb.svg pieces/icpieces/wk.svg pieces/icpieces/wn.svg pieces/icpieces/wp.svg pieces/icpieces/wq.svg pieces/icpieces/wr.svg pieces/kilfiger/bb.svg pieces/kilfiger/bk.svg pieces/kilfiger/bn.svg pieces/kilfiger/bp.svg pieces/kilfiger/bq.svg pieces/kilfiger/br.svg pieces/kilfiger/wb.svg pieces/kilfiger/wk.svg pieces/kilfiger/wn.svg pieces/kilfiger/wp.svg pieces/kilfiger/wq.svg pieces/kilfiger/wr.svg pieces/kosal/bb.svg pieces/kosal/bk.svg pieces/kosal/bn.svg pieces/kosal/bp.svg pieces/kosal/bq.svg pieces/kosal/br.svg pieces/kosal/license.txt pieces/kosal/wb.svg pieces/kosal/wk.svg pieces/kosal/wn.svg pieces/kosal/wp.svg pieces/kosal/wq.svg pieces/kosal/wr.svg pieces/leipzig/bb.svg pieces/leipzig/bk.svg pieces/leipzig/bn.svg pieces/leipzig/bp.svg pieces/leipzig/bq.svg pieces/leipzig/br.svg pieces/leipzig/wb.svg pieces/leipzig/wk.svg pieces/leipzig/wn.svg pieces/leipzig/wp.svg pieces/leipzig/wq.svg pieces/leipzig/wr.svg pieces/letter/bb.svg pieces/letter/bk.svg pieces/letter/bn.svg pieces/letter/bp.svg pieces/letter/bq.svg pieces/letter/br.svg pieces/letter/license.md pieces/letter/wb.svg pieces/letter/wk.svg pieces/letter/wn.svg pieces/letter/wp.svg pieces/letter/wq.svg pieces/letter/wr.svg pieces/libra/bb.svg pieces/libra/bk.svg pieces/libra/bn.svg pieces/libra/bp.svg pieces/libra/bq.svg pieces/libra/br.svg pieces/libra/license.md pieces/libra/wb.svg pieces/libra/wk.svg pieces/libra/wn.svg pieces/libra/wp.svg pieces/libra/wq.svg pieces/libra/wr.svg pieces/maestro/bb.svg pieces/maestro/bk.svg pieces/maestro/bn.svg pieces/maestro/bp.svg pieces/maestro/bq.svg pieces/maestro/br.svg pieces/maestro/license.md pieces/maestro/wb.svg pieces/maestro/wk.svg pieces/maestro/wn.svg pieces/maestro/wp.svg pieces/maestro/wq.svg pieces/maestro/wr.svg pieces/magnetic/bb.svg pieces/magnetic/bk.svg pieces/magnetic/bn.svg pieces/magnetic/bp.svg pieces/magnetic/bq.svg pieces/magnetic/br.svg pieces/magnetic/wb.svg pieces/magnetic/wk.svg pieces/magnetic/wn.svg pieces/magnetic/wp.svg pieces/magnetic/wq.svg pieces/magnetic/wr.svg pieces/makruk/bb.svg pieces/makruk/bk.svg pieces/makruk/bn.svg pieces/makruk/bp.svg pieces/makruk/bq.svg pieces/makruk/br.svg pieces/makruk/license.txt pieces/makruk/wb.svg pieces/makruk/wk.svg pieces/makruk/wn.svg pieces/makruk/wp.svg pieces/makruk/wq.svg pieces/makruk/wr.svg pieces/maya/bb.svg pieces/maya/bk.svg pieces/maya/bn.svg pieces/maya/bp.svg pieces/maya/bq.svg pieces/maya/br.svg pieces/maya/wb.svg pieces/maya/wk.svg pieces/maya/wn.svg pieces/maya/wp.svg pieces/maya/wq.svg pieces/maya/wr.svg pieces/merida/bb.svg pieces/merida/be.svg pieces/merida/bh.svg pieces/merida/bk.svg pieces/merida/bn.svg pieces/merida/bp.svg pieces/merida/bq.svg pieces/merida/br.svg pieces/merida/wb.svg pieces/merida/we.svg pieces/merida/wh.svg pieces/merida/wk.svg pieces/merida/wn.svg pieces/merida/wp.svg pieces/merida/wq.svg pieces/merida/wr.svg pieces/merida_new/bb.svg pieces/merida_new/bk.svg pieces/merida_new/bn.svg pieces/merida_new/bp.svg pieces/merida_new/bq.svg pieces/merida_new/br.svg pieces/merida_new/license.txt pieces/merida_new/wb.svg pieces/merida_new/wk.svg pieces/merida_new/wn.svg pieces/merida_new/wp.svg pieces/merida_new/wq.svg pieces/merida_new/wr.svg pieces/metaltops/bb.svg pieces/metaltops/bk.svg pieces/metaltops/bn.svg pieces/metaltops/bp.svg pieces/metaltops/bq.svg pieces/metaltops/br.svg pieces/metaltops/license.txt pieces/metaltops/wb.svg pieces/metaltops/wk.svg pieces/metaltops/wn.svg pieces/metaltops/wp.svg pieces/metaltops/wq.svg pieces/metaltops/wr.svg pieces/pirat/bb.svg pieces/pirat/bk.svg pieces/pirat/bn.svg pieces/pirat/bp.svg pieces/pirat/bq.svg pieces/pirat/br.svg pieces/pirat/wb.svg pieces/pirat/wk.svg pieces/pirat/wn.svg pieces/pirat/wp.svg pieces/pirat/wq.svg pieces/pirat/wr.svg pieces/pirouetti/bb.svg pieces/pirouetti/bk.svg pieces/pirouetti/bn.svg pieces/pirouetti/bp.svg pieces/pirouetti/bq.svg pieces/pirouetti/br.svg pieces/pirouetti/license.md pieces/pirouetti/wb.svg pieces/pirouetti/wk.svg pieces/pirouetti/wn.svg pieces/pirouetti/wp.svg pieces/pirouetti/wq.svg pieces/pirouetti/wr.svg pieces/pixel/bb.svg pieces/pixel/bk.svg pieces/pixel/bn.svg pieces/pixel/bp.svg pieces/pixel/bq.svg pieces/pixel/br.svg pieces/pixel/license.md pieces/pixel/wb.svg pieces/pixel/wk.svg pieces/pixel/wn.svg pieces/pixel/wp.svg pieces/pixel/wq.svg pieces/pixel/wr.svg pieces/prmi/prmi.svg pieces/regular/bb.svg pieces/regular/bk.svg pieces/regular/bn.svg pieces/regular/bp.svg pieces/regular/bq.svg pieces/regular/br.svg pieces/regular/wb.svg pieces/regular/wk.svg pieces/regular/wn.svg pieces/regular/wp.svg pieces/regular/wq.svg pieces/regular/wr.svg pieces/reillycraig/bb.svg pieces/reillycraig/bk.svg pieces/reillycraig/bn.svg pieces/reillycraig/bp.svg pieces/reillycraig/bq.svg pieces/reillycraig/br.svg pieces/reillycraig/license.md pieces/reillycraig/wb.svg pieces/reillycraig/wk.svg pieces/reillycraig/wn.svg pieces/reillycraig/wp.svg pieces/reillycraig/wq.svg pieces/reillycraig/wr.svg pieces/riohacha/bb.svg pieces/riohacha/bk.svg pieces/riohacha/bn.svg pieces/riohacha/bp.svg pieces/riohacha/bq.svg pieces/riohacha/br.svg pieces/riohacha/wb.svg pieces/riohacha/wk.svg pieces/riohacha/wn.svg pieces/riohacha/wp.svg pieces/riohacha/wq.svg pieces/riohacha/wr.svg pieces/shapes/bb.svg pieces/shapes/bk.svg pieces/shapes/bn.svg pieces/shapes/bp.svg pieces/shapes/bq.svg pieces/shapes/br.svg pieces/shapes/license.md pieces/shapes/wb.svg pieces/shapes/wk.svg pieces/shapes/wn.svg pieces/shapes/wp.svg pieces/shapes/wq.svg pieces/shapes/wr.svg pieces/sittuyin/bb.svg pieces/sittuyin/bk.svg pieces/sittuyin/bn.svg pieces/sittuyin/bp.svg pieces/sittuyin/bq.svg pieces/sittuyin/br.svg pieces/sittuyin/wb.svg pieces/sittuyin/wk.svg pieces/sittuyin/wn.svg pieces/sittuyin/wp.svg pieces/sittuyin/wq.svg pieces/sittuyin/wr.svg pieces/skulls/skulls.svg pieces/spatial/spatial.svg pieces/staunty/bb.svg pieces/staunty/bk.svg pieces/staunty/bn.svg pieces/staunty/bp.svg pieces/staunty/bq.svg pieces/staunty/br.svg pieces/staunty/license.md pieces/staunty/wb.svg pieces/staunty/wk.svg pieces/staunty/wn.svg pieces/staunty/wp.svg pieces/staunty/wq.svg pieces/staunty/wr.svg pieces/tatiana/bb.svg pieces/tatiana/bk.svg pieces/tatiana/bn.svg pieces/tatiana/bp.svg pieces/tatiana/bq.svg pieces/tatiana/br.svg pieces/tatiana/license.md pieces/tatiana/wb.svg pieces/tatiana/wk.svg pieces/tatiana/wn.svg pieces/tatiana/wp.svg pieces/tatiana/wq.svg pieces/tatiana/wr.svg sounds/alarm.ogg sounds/capture1.ogg sounds/capture2.ogg sounds/castle.ogg sounds/check1.ogg sounds/choice.ogg sounds/draw1.ogg sounds/invalid.ogg sounds/lose1.ogg sounds/mov2.ogg sounds/move1.ogg sounds/obs_end.ogg sounds/obs_mov.ogg sounds/start1.ogg sounds/start2.ogg sounds/success.ogg sounds/win1.ogg sounds/win2.ogg././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434324.0 pychess-1.0.5/lib/pychess.egg-info/dependency_links.txt0000644000175100001770000000000114614030424022562 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434324.0 pychess-1.0.5/lib/pychess.egg-info/requires.txt0000644000175100001770000000011114614030424021105 0ustar00runnerdockerPyGObject SQLAlchemy>=2 pexpect psutil pycairo websockets [gbulb] gbulb ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434324.0 pychess-1.0.5/lib/pychess.egg-info/top_level.txt0000644000175100001770000000001014614030424021235 0ustar00runnerdockerpychess ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.913477 pychess-1.0.5/manpages/0000755000175100001770000000000014614030425014372 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/manpages/pychess.1.gz0000644000175100001770000000103314614030313016542 0ustar00runnerdockernbpychess.1]RM0 Wh|tӥ P l w9Vmml%9II-='>l 􍦔 \VPb۷WUa]]`70~UĠMeGl>BENPr8Jj{U џ$g ZS3 L=d_TG\t&PηtTه IJ(,Y=eH;:>tg3#4 /cY>Fe"} h+ Wp@!Hʽ !9L|`)_c0RSgl6ΦL?B'6Q 8~ZnaJYBϾKҠ*' }_Ia )mEcJnȈ]XX&>w/Jһ|:Z;Q?pon:V x{2;#GTzz~T-[z?̪aHvΗ /DYωȤ\@zYWDY././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pgn2ecodb.py0000644000175100001770000001521714614030313015016 0ustar00runnerdocker# An opening book needs to be built as follows: # - install "pgn-extract" and "polyglot" # - collect many relevant games into a single PGN file "input.pgn" # - remove the variant games (960, atomic...) from the file # - solve the errors given by: pgn-extract -s -r input.pgn # - create a file as "filter.txt": # WhiteElo >= "1800" # BlackElo >= "1800" # - extract the best games: pgn-extract -tfilter.txt --notags --nocomments --nonags --novars -bl20 --plylimit 26 -s -owip.pgn input.pgn # - create the opening book: polyglot make-book -min-game 10 -pgn wip.pgn -bin pychess_book.bin # - merge the books (if needed): polyglot merge-book -in1 book1.bin -in2 book2.bin -out book.bin # # The opening book does not contain the names. They are stored in the separate file "eco.db" by # running the current script. If a name refers to a position that is not part of the opening book, # it cannot be displayed. If it refers to a shared position, the name is selected according to some # priority rules. The source ECO file must also be sorted by ECO (at least) to be able to load the # other languages. # # The current book supports 99.5% of the ECO names written in English. import sys import os import sqlite3 from pychess.Savers.pgn import load from pychess.System.protoopen import protoopen from pychess.System.prefix import addDataPrefix from pychess.Utils.eco import ECO_MAIN_LANG, ECO_LANGS from pychess.Variants.fischerandom import FischerandomBoard path = os.path.join(addDataPrefix("eco.db")) conn = sqlite3.connect(path) if __name__ == "__main__": print("Creating the database") c = conn.cursor() c.execute("drop table if exists openings") c.execute( "create table openings (hash text, hkey integer, mainline integer, endline integer, eco text, lang text, opening text, variation text, fen text)" ) c.execute("create index if not exists openings_index on openings (hkey)") def feed(pgnfile, lang): # Check the existence of the file if not os.path.isfile(pgnfile): return # Load the ECO file first print(" - Parsing") cf = load(protoopen(pgnfile)) cf.limit = 5000 cf.init_tag_database() records, plys = cf.get_records() # Cache the content entries = [] plyMax = 0 old_eco = "" for rec in records: model = cf.loadToModel(rec) eco = "" if rec["ECO"] is None else rec["ECO"] entry = { "h": [], # Hashes "f": "", # Final hash of the line "n": [], # FENs "m": old_eco != eco, # Main line = shortest sequence of moves for the ECO code. The 'EN' ECO file is specially crafted "e": eco, # ECO "o": "" if rec["White"] is None else rec["White"], # Opening "v": "" if rec["Black"] is None else rec["Black"], # Variation "p": len(model.moves), } # Number of plies plyMax = max(plyMax, entry["p"]) # No move means that we are translating the name of the ECO code, so we need to find all the related positions from another language if entry["p"] == 0: if lang == ECO_MAIN_LANG: continue c.execute( "select hash, endline, fen from openings where eco=? and lang=? and mainline=1", (eco, ECO_MAIN_LANG), ) rows = c.fetchall() for row in rows: entry["h"].append(row[0]) if row[1] == int(True): entry["f"] = row[0] entry["n"].append(row[2]) else: # Find the Polyglot hash for each position of the opening for i in range(entry["p"]): nextboard = model.getBoardAtPly(i, 0).board.next h = hex(nextboard.hash)[2:] entry["h"].append(h) entry["f"] = h entry["n"].append(nextboard.asFen()) entries.append(entry) old_eco = entry["e"] print(" - Max ply : %d" % plyMax) # Process all the data in reverse order for depth in reversed(range(plyMax + 1)): sys.stdout.write("\r - Loading into the database (%d remaining) " % depth) sys.stdout.flush() for i in reversed( range(len(entries)) ): # Long lines are overwritten by short lines entry = entries[i] if entry["p"] != depth: continue for i in range(len(entry["h"])): h = entry["h"][i] hkey = int(h[-2:], 16) c.execute( "select endline from openings where hash=? and hkey=? and lang=?", (h, hkey, lang), ) r = c.fetchone() if r is not None and r[0] == int(True): continue c.execute( "delete from openings where hash=? and hkey=? and lang=?", (h, hkey, lang), ) c.execute( "insert into openings (hash, hkey, mainline, endline, eco, lang, opening, variation, fen) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", ( h, hkey, int(entry["m"]), int(h == entry["f"]), entry["e"], lang, entry["o"], entry["v"], entry["n"][i], ), ) conn.commit() print("\n - Processed %d openings" % len(entries)) # Several eco lists contain only eco+name pairs # We use the base ECO line positions from EN/eco.pgn # English is first in ECO_LANGS for that reason for lang in ECO_LANGS: print("Processing %s" % lang.upper()) feed("lang/%s/eco.pgn" % lang, lang) # Start positions for Chess960 print("Processing Chess960") chess960 = FischerandomBoard() for i in range(960): c.execute( "insert into openings (mainline, endline, eco, lang, opening, fen) values (?, '1', '960', ?, ?, ?)", ( "1" if i == 518 else "0", ECO_MAIN_LANG, "Chess%.3d" % (i + 1), chess960.getFrcFen(i + 1), ), ) conn.close() ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1714434324.917477 pychess-1.0.5/pieces/0000755000175100001770000000000014614030425014047 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Alfonso.png0000644000175100001770000002312214614030416016156 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyXSWYXD6A- .(qiuԥSfҧNؙi:ՎT[ş-j"2 @’(!ABBn$(7{H9gǎ\'cΣ5ag~߸./\sѯuԄ7n@*  .. p~[nmmmr ڏE"@"`ȑ1b+e:t:N>2.Kmm-]P,_Æ +W_P(իWy9ٳ  ,@ZZrJ;ׯ'ؿ?̮abYvII N8gك ߙ+..Ɲ;wH)J\VJy(2@уɎD"`0L{@62  D69ݠr{:::(H$N0}aHp@СCAll,a12d>>>fBzB @Tbݺu6tdFW'NĩS(Jg'~z]ྣn:j(p\(Jwưaブ|RΝR\.GKK jY>QFټ 8&L0aetٴb#F@,]WhllDcc|"qNs:QA(//ǸqPYYI~,pK[.\.j2IӱvG Eff&Ǐ˵2Π$psscKf{7hgW3f̠-X;`>޳XbBkjN(d֯3b/*...]j7ePX}㙍T*EH$jo="##ollf>Z˖-cHIGBp #>>Z=dOɠ.Sct:|>NM:Dpmmm\B PnB EJPwa<zÇ%8_:*00. l֧~-E/^<P( Y)K*BRۛ.N81~Ru%k8k:{@( ø#4ӷp+WěoZy7o$hH+W )fZ۷.\(aN}LǵklqjzC5ޔF^Z8\ss3 k GI4iRMvLՅ;w8d Z檃S Y/wƍ{턳{wdHu׿P\{5f'lzLRY0a۷YJTWW|%8+8pXVAlju](N+86Zi1\ϱP@ 賲Ru>;^yo.8`e\Z=*uWN+8>=ိL)i.\+xr @}vAZ8Kp.1zsc=xzqf4 QYYDcСx9KpL{{;9baRpu/Xr%"##ٺR%l0p=RJC Vո|2z] V.J g0ԄwbС1bKC/ڵ[rI]8u8Xpo>N <9r$ut:]ԛvF c /*~df!Lb̙D"AEENZ?d2G:Ǐ˗c`F@o0͂px'qAvO:ٳqy,_:;Tkjj<su,v؃hժU?쳵E8 E` BV}OOO:|3 /%6O,YO#+&Z7 t:[麣ѹÊ+0zhEYYY1tp iCp8Ə?h . 88%6p\dgg#&&I1;vǙ*">ܔ)Sk.̘1YYYO>]vmPg&..gΜyP[?O[- ^]K(g,u`֔DDD6cHNNfRBCRJ^Ά$mjNVC,_D"'7|?<طo<X~j~o J j۶möm۬SO1Ša֭;v,}:r@?CPA޷ޔ0&}+cLKp%%%7nĉy &Tgg' E+:v0 E< o.н*Sd "=QVEyy9G^CNN222,\z=!N o~|`s5acH;NiV$ D( |> ,+… PYY'|TG,cܸqlTG6ʕ+)PRGzQrhii1P\ii)6olw___СC8qc7EFQ5Q"uoz$8PL5kP /]v!NbH$0 lo :H1ckƔb<Ӕ9㑑`Q&Z-V|fP(pnz=rrrpm(ACWW] `9ݏԒ ח4Jrψˀd`k&r@+W];'yMDWUU)[t:%ϧ2??|NNNv NBtt4j>D(HOOgt:1@Ng/IAAA#^:ϯ=܍tuu<==+RAWzfSqz=8h\.Gdd$*++BgرcruVs7l`fK6]}b0 8l0⋏A"a%p cQGU R#F@aam5|>웧hT Css3D""""N\.Gg'gƴRy8L L(..Ԃsd-Ke'a*'z_$ܹs>ؽGbccYg)"F]X9 F*8Ə5gv@q fŀ%8 6돺}1P3``oE~Ŗͩ~waE:5 zp~LP5Cii)rrrp9Oxw҂={zpPG9nRL2嗲πdMO/û_[oE!.ZS([0 `) 29if͛l8:5W`hN @^~eҫT*;v ,p9?`ʔ)|}ԩʷ_I}3 k/t~ͽ1 5>bLbi@DDhC.p=w)f6nH9_rr2:;;XvoA(--?ئ,'cǎssauXsN\i&6mسg}b݅&Ml99 BRV^LF9=ؗXiӦЪ tشqAA&n%bfR=ŋ$]xp4\ML|l߾ @)hb1f̘62tBh.4**STV1u޽rܹtU(P*BYY|}}i׃ g/D"Acc#m#W3K8@5iT+Vat*VLgnwu111՚~@~rٔI&GjN}eee3f ϟ///8qX|C;r_}3`P(޽{y95c cXv-<-[ 55B;TO? D"M~_= c\M"ްa:;;;˸hHjz6t?Νk8yd2 'ā,,|>/^3gΠi1; hn<0@AA^~e>j?zTU7TUU~͝iiio~¦D"jkkIOd1©ck0  iSPd*k¢?uܽ{?r hxO<W\ܻwO=] HLx\xx8|>f͚0:u | <<<aÆ---x` Jq9(Jr@V#44YYY ĥK0j(G}~o~300pߑ#Ga Dd2۵ |'ݛ=駟bͤ???>O()8777"11;h𫩵;bbcccQWWDGG#22qqqA`` 8rssQ]]:Ctt4B!F;R* 5556mvUtuuˋ<|ٔ)Sp%F}~Ç׻ AHHHl[n֭[mYRRb5CvLRZZJ̞=Xdi0:U">퍤$ "99٪جJIIǙT@*Aӱ"iZܸqsa\V/ +WII***F+7dw}ܻwJ(//ǥKp)TWWcѢEؽ{w_~5kHMMT(Xz5.\$deeaԩHIIAbb":::ΟTAhooG[[+R[[j5 U>)V^'NL`1Az꟎?1+ hjjAxx8䘵J=v.o޼ِd8z({=T*uC?3u[a&IDATr@<D,}{bb ]d2tDFFoꫯbI.K?/_x;PըP(F|3 cĉvt%nbt%<:e2Z"%%T*^'=d-_i$$$ !8CkA*8ӷtɒ%xgHR?ȑ#8ݮ̤|V$E0+V-[.>@qq͑[!<;TT*|G,<+5 o2www?F|r"ZѠ(,,蚸Yz{{Zׇ֦3aV*pW^=uƍ9pa0pie ^H=zMZ)X_v/Wh 6wB6mՍxgU:R 33 `&{'4Z!@KK f͚E+zz:v܉N 0~WK.eЄI]]]J*:{}zW+Y\.rQWWgw ޽ ػw/% Xn޽˶mLwxXG(b<|}}1c Cpx7o+ r9r$zvߧljm۶6Q BܹQ9-[oR-S(bm)嬔׃wœ'O^B5믿~&;;RJӧOgTӡP(5~t4'0uTnpڽ# 2e gtrr2@(YC qqqʉB!K5{tp hkk̙3YiMM ۧ2 555ݽJV=Aa MfBƍi p޽s noSp HOOXtw`k?ۻyڴi>>>|OOO['O `Ip:"ӦMCbb"򪫫QPP < Dp8ػw/XiGG= HkoQulٳTnn.2+D"hZ|G;; 0vX455usFlܹ4VӦMcv)b׮]he`4NbRCEt4;- q~\-NCuu5Q\\ >,)$%%alD[rnnnL .{`0 [bbbcx_{w}9hZtuu!&&{^YS%jGѣGVZ`0TXيn/* hjj|>ߩ+)-pۺid9pwwg5vDo챧)8///V08=AE|>ߪ ~f@|aۖZIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Alila.png0000644000175100001770000004637514614030416015616 0ustar00runnerdockerPNG  IHDRMbKGD IDATx]w\S~s ld$EPpᨕVj/NjkVzZ[kV;V*Z"Á HBy`RaE:x>|Hyy9;qqZcǎ֭xAAoU]t IIIj?ׯ_{ ,G0 RSS @)^(o0pq0 Ji rU_CVPJCP-8D"yYTvB8"J@rFPZ[=^^^BuٳHNN˲ٳ'^}U'OoW"55F¹s琑ggg?~xFWWW 2nݺ}󈉉AHHzUÎj W^^JآшeeeT/4ZKBa:G[QI6#90BU瑒vQQQm۶͛?~<'@Vc˖-þ}`۷زe 4 .\$;IIIظq#ʰtRܾ}HMMkDpF<zFF:k:Dz,8L-^~!.$lj)%aR%|OU2ܸq8v͛Ç#??\fÆ С6l///̚5 "'Ne0w\D"ab1ѦM@&A*RDGGR> CII J%p-$%%Ν;pttB|#Gְ!P(M@ hR{Xйsgnƍ qغu+v܉tD"tݓ.\0wqqK/>}{l4DFFb׮]9r$nܸ{nnn (--EYYq]ܸq* |899 hӦ  ^2(JBѣG[=5{ ϧ1Z ((Jii8ݻ111 ^7-7...6lrJ눋Ñ#GpyrBhիΜ9cqj۷Ǖ+W`00tPX㩙4cw}|Gx뭷iqOJiB^^Jj#!ӦMo՚i6w<<<X0yv 8ТZn"""qFxٳ{1? + 77Շ0(XnyRbƍHNN6]v-j1駟Ю];s?[,(׷lL? bxA```=z_+=jE >|6!!qfΜ 0 ԩZΝ;{tŦ|᭷´iӐ'N òe,p0a]f>?s=z^åKlXpFw}}c\~"FMHH0|>j5|||зo_h4VѮ,PRRX|;P(h߾=B JJJ{˅j(++È#`ooHgggD"|ĠA~ V'O 81j(Z-8s㿱t?߼yݻcȑ1c&N#55(**JmڴAHH۷ocطoi`Ν ** 7n̙3QXX{{{"00Z7<<< жm[sP(PRR ddd}6q]888wcΝV¥իYL>l׮]w݀-xZ{nܹ~~~>|81yTfZ-nݺ#GL>z2%::8eY| 8zez= QXX_wܩ ҷH&W $ZNNN&<鈩;cYִnG*RYvv!$$$`0o{p~lѢE ̛7+WŋtRXuw())͛1e?[n-•|u5yt:R!D0#˲o޿T*M?<}3IqJWuXBȻ>>>_egg3DVbR<==1g,X:oVZwy?#bbb}zB...5|xݿgϞ/jRjêUp) p7RjBJ(߿)j ~T*/JO)ЯRG~,99֙+0P!G]pqqEP^^M6A*bܸq8z(8ŋcѢE3gJJJjχX,^1{ +W[qfW`*Ξ= Fm6F*n8n,*['?$/B^u\_&]vCٙcooB(T* iO!L0wC^^^D~~>N˗[صǐ!C/cС0Xd "##ƍÔ)SpA :R3f 4 Vs !orw!î2 3܊AP'h4z8'M+B稌^x1bΜ9N 6|>8p .](\zHNNR4~:bcctRPJqCC$'NĄ 0tP@xx=O4Ln<&/G<,PBzPJtrZ\e2"J"JY}zF=RsG@]5СЯ_?۷'N˗t Xz5>s0 F}B"m۶Xv-o\|˗t <CѡC.JO4Xx<*h=JrL&B)BI1x VPDk׮Y):;7|II?ϭXp!mi_f5/E3jwnSk4OF111h4x5jTK6O;R=feeYx|6I WTTׯ… HHH0?+0 zܾ}۬j͋MgJ)C)u`j@Zhac3ኋ;S!$$EEE5 kUB[zjGEEF``044ցD"i0uBH8W2 zIѸw鰼zc8PXlEEBa˞dzoшVZo߾6 >>>m(8jV!*0B ˻̙3pqqڵkxZ*//7 yg4aooÇst:zi888h46|`ݻwn!eY֧8uU}ҤI/ARĚ5k A8P(bp)))P*P*8qD哓2c [7E"͛B-ZBdwt=z &Ԑ q8sLKC cP^^N|H$Zna -sa޼yf@yɄD",]vvv裏@iҜ:aNNM<^g˗/~É'kmq}9ƘjJ!fD"'AAA~ Md[f 1}t"44!!!HLLDvvY~>Kz:agg޽{c֬YpssCǎ`j0U/k,u Ann.޽ e/>>tj#~@,I6oތ@̜9 ++ N… 'O">>f{8sOIIٳgmO](++Çq 0 X>H`L&jYݻwqakΜ9`Y @+x@!*||| UT* ///$&&<,!RJ/"f̰om;88ॗ^ˆ#@)EII Bl\jGSH$­[,_~^^^ϬDŽ9}c՝d5j-B&aҥt(,,Ϸye[.##*z]hLq.]HdffڵkgfA0ݓjzܿr O \~ u ۰j*$%%aŊ8,6 e.v՚8V`ҤI8۷oǍ7jGdd$ƎbaYv *xRyd2Y`%BЪU+B$a۶mJJ6DEEAP`0 ft ))Q6$''(^pAzFoooΟ? :uСCMDsss_}]7ܽ{WMΝ;h Ν; u,Ι唗O>AZZZ > GRRf̘ZςuSHHH%K88<ʉatt4Tl`ӧEjprJeRSSLzf5Ɣ}Gw7nt3g6nȋRzsuL@l۶J%86mejFUD"ӧF /01bUU\|r˗p4 [֛F… ,]~gφs]fX;;;Pek[nٴ3T`Ϟ, q=:qY9~~~Avv6233͑OJ___3wAzz:4 H$#rBܹsǨQ,Ѽy\lt1{JN:!++ D.]h݌ AHbmڴa޽t8 v>AAAMm0*rrr]h$www7ŭ>>R u)--www!--2Mp )B8W[bB?bܸqf'ASǃ;JJJ`gg}Gh4Ř6IU_J8///1B.&ر#r]JR8;;sxիWQZZ R1$$," ѦMt"!o3GRRe`0ֹsgSLSŲl8!ćRISJBpN f4C}}}+V+ >}+ 777="""Gbҥ `ڵtXlΝ;(_nO;.^T S,իWRj7MF-Z8 "hF eY%  ޱc8F.~-ݻw1<^{x`Y99qZ{eYzҥKqaDDD/*Cz9tܹsFZѽ{w<,Wo$ !|>Bpvv'ϟ{/_7YǍ7 ?tqgSV +5 a93P1 {=H" Cиq0|%%%8}4jȬbۗ8|0qY,^kU'F¨Q̟ '?}zLb r[/((Jc9LaF[QJT*i˖-URb4f֬Y?fO>(,,駟֨B `={5rv*8P(ܯ_?|ؽ{7F#BCCT%iAVGkAPJZk3g4PQQB|?,,Wui&|8*..Y9995k֬YcTTJV[!aU^~~>x< /`ǎpss_C|a0nu$QuX\QTTԗeYݻcٲe?3$ ڷo_͆ OOO0 ^z:H7 : 0eWnj i ٳ!_8?~ pURCLc6B !G`` mժٹsgoz wիWQ^^;vɓdϞ=~/_q $̗qGii)^x΍gFj*P(m&R7|ӦXϣEX`\]]ѡC,ZȪzmEll,>CiUa̘1ǎ;1}t\|pwwGnn.222кuLP=$STTdZX,&!!!J 0 ,YSNYHV%kC۶mNHJEFFB `ǎppp;#+W`֬YwN8B.cϞ={nS~'[FNj7o,p%%%%ٳ֭[x +W"<<,^ZZe˖UB!ӧ,/^l/Z#;vSN(//dž ЧO̘1?3\L哨'''t[nP,W^cQJo߼y8p7 pttDvv6Ə,$$$*^R)={W_};wbذad{7_:u¥Km6 4} AylWkpN˖-%z w6'';wCZ)))e1vXt⼳3ΝCRaڴi˲$L&ѣq lݺ ۅ dĉ1`|7PPP`.׶mg!A&pJ򊿿;wv8q"~ |޽{gϞf$%%!!!۶mCllU۷oxp)"V;˖/ еkWpppqp5ĠCDŽ зo_(..!믿BT8tЯ_gvWš^ Ԭ (rV']rx?J0e|JBݣr"˪U{zz̙#3f _|'Nٳg{n{7' ** Æ c\┟ʉ6 J _}\No3fĉ- >~ |>AϞ=_4h3UkM|G# .F IR_FҥKMŇ-6M/NWb͚58p /_5n%4.Hȑ#尷7Ƃ_ Î;rb駟o߾N$L\t :x@a۴pH"$04<CB.#;;:5k֠\NNqΜ9/dAD"ѝbeeeXd 0l0d3:ڴiR ¹Ν;X|yCB6hI@}͚5l=svvYLR_ҥK1k,fƌ:R4w2  %==ԦoaNNN6l4 J%WyUҙrKBQPP:3!m۶hb!$fўNFꠔh4L 'FekC6}Z1tPBty-Y{is n|}}֮]Kߨ`h4U(//swOT`hx놽9ضm R)UI?=k^pRuJ͛7JFe0 J)8i卾q#йsg:u 112gF֭w}|4~Z8}G񬩗p>>>v<﫷~5Xh4Ν;`Fi mI{xΜ9رc8qJX1'9Woj 5,zTJ @RL]8΢u3q%F#6]t˲7bȐ!2*,,ę3g H˗/#$$P$%%Y6Ѣz gO2W=UeCQut~`04$! shٲ%O?Z3f<0puuѯ_gtݻw͙!My"vZoA}pN 1bToQQQ 7ܬƨ@e7Wb>|8 ͅZH$W侭Lꬔ;iO@ @۶m0 c֓ a Hua⚺RM P#F@TͭI|Qrʐ9캵6oA3<O_-\6Y WZZj^z@$T_D2-00a-S$yyyHOOPvUVl[?*#,СL t=ئUЌGB•pqqy,'JqKGe[n R޽{wJ ņ?nk Ø*9}{dPY "\EE4 x}0x7ccZ WQQ7n޽{2@TPd2q*bAAᲳ BavttD@@:v  +**.مmۖKJJLxڽ{W^E.]p-$&&2:bq{3f}cbb6KrBQ,X쏷dZgY_xWk#<<SLAEEm[x*222pc̙ٳ'<<|80}t߿jFHHRRR0|p߿Rlذ:u``^;c޽8p`ҐΝ;BCC!H "@':n+!$m۶BZQQ!GBNNNmQ#Cf^_c3/FyT*Iqt:Ο?^{V),z۷cȐ! 2˄oݻѺuZ]YԩSp)H$"_rÕ+WT*ju?GI-[9yx„ %aR`Yv*üy觟~J.^Ǐ9U˗/[ߛjvՇ2 7oބFZ۷kc ™}Q. ̙3~z* YYY6m>UqI[dSaaԗ^z9???nݺT*`l Qj@𥛛EҧOL:۸q̃*___)˲,v7no 8%Pa6|#7 a/a ˣR FċX.77{n r֬Yؾ};-[o˖-˲>2!":t@nnn{([& {nJE!6mDFT*P(ʄqM?>S5?d+_`<d|b_8n24*77W/}ɓ'[mVQVV||GHHHxsMXN[]Ҩ b̘1ضm͛GGFEbW(ˣDt^zu['NN:]JJJL&.ˏ,"00Vq%&{.]*z78U7.X@h0~zeݽ{w^vZ3:>htVRիO4蛌5 ?"##I&5ZVԩSwE֭Ο?qǎe2f^ƙ3gPVVR bh׮]yjj~njԩNeee>N>M)Ka#Lpwwǰaٳg|1¦ `Uf֛x0c ̛7Ac7ܹwgQ(|}}oڴIh"F `ܹPTѣG'F{hٲ%WT@vv6ZX,8P3p@0^V[T4 FѣGtMii)JJJPRR3f Ppx뭷gϞFmO :G6k6EEEX|9p㸵۷olРAqQt> Gpppհ7RBdffŋ_}Ubܸq8|0Zhqˍa MGzO|7Z5z~ صkT^R!-- wAFFJ%QPPJp0 P{{{xzz ФLJ~J)^zFOg0L<&L!ɠP(pEݻiiif7/BBB#77vŠ+P\\ [BQ:|յJW>u^5' +СC0aN\ziiiZ|||ХK888eYjTTTP(y&8b|tݺuq^yXmذ8۶mþ}PopttAT*> -Z@^0h 0֭É'f)0hС95 CN0e 0J\.U~JMӧO#::::w NGԛF=ڵkш͛7cpss3o--[ {1OLLĄ p(ߏUV?e˱ IDAT舠FL;v ؽ{7FbAK/իWZsssU*0jFs \J)֭[@ƍvy<֮] `.7nĶm+L9rssl"--M{֭uX['O4[|9rJ/bf{$ PuM:ኋ!p5߼/( 1yd˚6jM<e1cƘ}ļP\\H{xx8NQTx"z!Cȑ#+ӦMÞ={0ydݻ#""¼cJ_N)m[k*f؎:RSS၉'K. \.L&ܹs-^;vĖ-[f&СCѷo_sGGG$$$`˖-xѱcGUXۻw=0uTlX`Khh(bbb;w60 .] Sw|YS \%Q+NѣJY޽{|rpXVZ^^^D"233RhLI}P(p]B(",, #GqQi`4<̚5 Ctt4݋ŋv gggdff"%%))) D^0c BzjhgG/F iZc6N EPL3f6,^{ j*b싈@JJ ӑܻw---hoo`l|L<3f)S~-Ο?>lW GmgZb vF4#$$dJ ++ yyy 880Aԑ#Gg\v qqqM3[II oAll,R)tRlٲeh2{a``=˗QYYcѢEFaa!wj2c:}}}=KGbi[[[bx-(J;uU^^,_ݻw?Vu&EQ}ڵTxx8Ñ<瓂h4B(_bX(шnŋZFMH$W%KL&p,`0zoUC@HHS{`0$sQ!77IIINg͚3gBPLD"Q 06o `[XXSN ,(0 <<<0uTlذh4nܸ~AnNN}];v !F5Xr4 ah`6Ɠ/ag2dORRRJ\ף1s['.Qhh%88o2ҥKI2| ӧG磻!GӴ/L8>>>HJJr$ɑ,bg2DL&fZƕ+WPVV7^]xΝ;TfffN; s܋VQQQd_nnnb  #22EEExOFCFFLbwyJ^^^HKKC^^BCCG>>X,0y \GGGشi,YPhϼr R)"##qU͛7fӧhhh@ii)z=bbb%B~lii`'ͥ(jtt Pɳg.\x,p8ݻի0 l_Up8{wv)`0kNrr2~ЯF\u}:͛njV?w !(*PNW9 a>4Mc8)ކ磺o/nBr]cHkkxyam80K_lR*&x!x%,P eC#<늑ABooo cBRU^z̙3 GQMFk^ye܌6m+18PWWW455aΜ9Ng JrX,Njkk ({Z-r^k?u HIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Alpha.png0000644000175100001770000003264714614030416015616 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy\30,+( zm,+Zrr7"`J(0cefQy^d{g,yk֬N; C5kuGTђ -3 uyh7vRQQA^^zkQ˕+Wزe W\[zkQHY`P xjCFF:uҩVmp%%%ܿNNNQ^^NZZZPYYݻw\L]5#j^YsH١HJJرc/^ŋxyy=w=l2lll"00%KеkWU^;w.d26Ӌ;*&١pvvӓ{8;;v68##Үr4\~wݻ7C Km.]*őJIIVI Hpخ@ZuOCVmp*ߏno֬vu@<dּ@>SEP{9kg$RRRA$aoo}NTT@ 55ww_tөst CMU܃z>\gS-Tޮ`pB&::sQVV!/prr =z4ϟ'++  sǏW. Ԕc2rHBճV ,d>'AzYK76oXZZJ`` O#<>>LYY>,}Ѹׯw^LMMMnX Pz*/`erF7Wj^GUSj~"U 8pQFq^{5JKK=z4;v?cmm͝;w(**"==Yt)+`nnΗ_~gDDDY/ajjJ@@oV{hIIIݻ{ݻ7]!x7 ՋATJqq1wܩS$)@Z+K~~>oj4/_?ΤIf˖-HXXB%K1ڼL4͛7Oh3x<\xYMr5C0VG.)a c5cr~5djр|#!!QϏӧOsqxټy3'N/` 0ÇsymF˫sU/jl3If}?ϐo:Û?ÐO5!6S5FGUB] D?|~f]=? VVVM׮]d_Nll,C K.\oƭ[쬳3锗78o3#Y@i|N̩kl4ؽ{wB!3{&ڵ ###^x7o"oɺܹ3Э[:ی=GjmdjL A!:t耋 ֭5k`jjhPJJJ:U.?~<>>[MD"###' Q]]MEEI.-9\|y?Ϟbxckw;vvIdmmm1dȐC 1OKJJ?쳛۶m |}} d=z__TUUq]_Ν;wHOOڵk\t [[[[$C ?F"당Ey0bvHHGֺ~TTӱ*Gf>i`` <{ǎTQQ1P]%cc㒧~W__ܑ#G|ܷmۦlOF7uTHMMѣ9sI󞙙SLKKK/_!-¢z`߾}j ń8((9s`g)V4h 33/ qppHOt0;xG6jt:ĬYTnvZf͚EHHKJJ8x Tn$Ϛ5IcVnp=zTw_^NNvӓ#G6]i5e˖쨨I#s̙ M6-wڵmذyj>|8^өT*_fGt:&Xj 4LUi@58uYP/O=zJ$/^zupϞ=G >={HLLWo^Fڵ+K}?fL&c,ZO?e˖UUU,Y_~SSS4o} t#viDVVwB$??A1z/)hVkpEE* nkk۷󍍍MD"֟wUU6Ν;3j-ץcd2b2jKb12l-j ps/N3gz =Eԡo;ih.YYYmf̘O?or=!,Ojh)DZ{PAz_P'*jWN %+^+7YF>µPi7v*v&##;;;O-W##B*sm*++}6u[B]j7GD~~~m~lG*:ڌ N"PTTss1bQG r9y5]wts nܸ ӧSNR,"?~sUꟁNFsic׮]paIKKc׮]-"())̙3TVE*++9u1)pra?5֚:ܑ#GpttL<޽{MJJ 6669rFCn޼۹qFپ};II*hIFjԫ\GqO4 y&{i011͛-bd:u KII 7r=k^KY\Ocj צի={D&5{\J9rg6iH2<26FVL :upJJJO糲:$$$Ę|F68Eؿ:gd2?#Vbcc y# S#&O8qRiEppmu7l0Ν;ث`F4tBǎ ЭL&cƍXYYѹsg/Μ9U^swwwwwl*YL&32ew.]::7:r v裏!4=Qf@ `ڴi_k*~Dš5kؼy3ӦMSo>7j0'OwajDDDѬ]U薋())={o/r7‰XyV666XXX믿*}@@||<tE*666^1c0fV^T`T*($_ _|BpСC//!0VI ݻڵ^x~Il``@HH .dǎ6:ٳ'VbDy0ĉYj={TY>11QW`-ujnQQQty3^SWY7|Ç~͛6*n:6nHPP<3k,v ݻ5k*d2]u]۴i5R pFII#=j( K]ed2gΜ!22=zЧO"##pr ڵ+>++Fz聕W\y Ã,ؽ{7ހ|*D"pa/^L=]ܰ>l/=FGn@ үIRxxD"^z%K<==Ǫ@ ۛ;w˗0p@e]+++ Li=I]>`W@P .66b^|E.\N||< hm TVV2} uOrqqa޼y9rWWkd{=С~i b]d //OaOyIUWW~X~}e7l'ؿ?/>$Z-/_1 Ǐo=xx4 "^䫪(VjepUUUFDDD9 8t&Mb߾} T*%>>SSSJff666F(bjjJ\\G~`](//N=2ಲ eC !<<)S_ kGQk[3cƌ5XS]qVVV* *ӡw=qvvB%&::Yfk..\fK233IMMm0IRJKK %%5;;:2/^$''[[[bqؘnݺz=6\zOo޼CAb]W;w$**;vDi˃H%zo߾ 7oIb]WjKӇbddoIε$Ο?ȑ#DKt~\QBhlak*F8ĺg|VVVرckPO-/doo uMQHӿ̛7˗/dZË-OE*uOPs* gppC~1"EE{þ}k~nTb]S"##qttg#33o0N8~KVV@ wA%hU(R!B@ ½{LMMUi}}}D 6lIMHkB~ 'Yd | Yd ߯SCZJE*u|S!3rcǎO>]sVsI粲TmM[⋊p2뚠W%=ѭ[7XR.GXX]vmPvo(R!ۃSPZZS*uWp;]t޺u@.z*}YC__.Λ7O!Vb]F;2n8 ȍjܸq*g[#'L&_%$$DD< 64₋L&c͚50wv͠H E]\}?0[n "Aap[~^{Mӯ@U/ԩS'&L?cǎe̙ܻw?(((HDǎի8p;wIN:gsl(R!B:iPJO0?ww?^ٚX"4) iyaooϝ;wLMM122B Bբ.]S!456*$]bSWb?&&&hI"S) izsssD"ǓNJJ )))N||<{ ss!M*QBhxV򚞥X 655uƵF8ڢ?>>>> +>M6)a]|rpEEE:Bh'377^z5ƦY劯ZumQH8P aIӷhJKK רS A[!Bƍ}JPZZ02ڢxbRu\rEYKӷh4u,,,lv*m n)0ȑ#5^ T imiM6)鍍H$TWWc``(MbQBHNNnp-fB[z|JީRq&Vb]TI'%%q%z-=YnC o߾KŒMHHHϏ]Ǝ;3g'4@{HHe@g<###ŢA5?;v$"";;;Ξ= ۷ogKEN``1YYY޽ dym n qss'N666YZԖ700P昙ѩS'lmm4hL0O>b|||`[?ˍ7F"(WiUUUTWWCQUUEpp\ٻwF1833\@:6#7sMՉ"&&m۶1{l,--NZ xشi&LPJ](d2DĊ+С.J-D"THP?;x}18333YrryM KRe8T*yH$'܅ 0`ݻwWHUq5>S233UJg;ЧOҿ][3Ch. .33Ӷ_~BjMi+/_O7.Y9sfVLiǃ DD{iצKӷ8e*m KצKӷ8e*oGJPdviR?5kGv*CEoWQQA^^Zv=ܕ+WزeǬvTouNNr/E%tU] ;C\E;M%%%q_—/^ŋxyy=l3t633+yqΝ;(**XQQ\ Qo:%%% Ds022*888`bbBee%wmp333}u󡣳9;;ɽ{HLL GGG?m ˻& ޽{\zz;*k%Ip`"pJ_w _l666dee%Kڵ+*ϝ;WWW}ud޽)vTTz#8ZUrss-RiJnnz]+^O8Arr2GUY.44dBCCU^?z(ɜ8qNw80 y;0Ν;Da|x%((kDff&qqq*dqrrRo'HHII!''H}o"HMMݽNzz:UUUtܙnݺ;T<d dT NP()Js +p;Y囚*=ȭEJ_hΝ;GYYJ?*'''prr 6lYYY,XX̝;w8~rhԔc2rH}FK 1bL&{ sٳcƌ NHu||8"%%0-[FTT^^^`iiIٶm&33`Mz5*H$bȐ!|,\{pB>c 5xs}SC b Wn0S]]믿g}6eʔ)&&s=^)uܓJKKٰa,^2ɓ's}.]UUU 4XLddF/6n܈_lXh`1P; Hiȑ***b-,,܀ȳ0x@LLOǏܘkw|ܹ{]VVGǎO 5}=)%%V򾾾t]z=)99j̙Q`O~g@oyH$܍7ػwxP'xBlll<`ɒ%gK,90zr{xر@ E؊޽{ܿShKBukutbggǴiشifb˖-7C5'wppȨ0J`Z\\ܺQ'+˾G~$5L(]qÆ w"Ɏ]֯__g`nn& R0yB"\r8$h,BGյA.PLEj鰴z,E/ÛoU;@ /pe-8|zXSS'_|_-U,nA]CppiomM53YPl+i#100hgeeEYYֿ "_~###FtZܿrM ՀpĈcUUظq@ ްaf&&&Ç߆YUs?(--B=4cccۮuPHLLVD"FAVVÇʪWㄅa``@n4fdd)={%|ԩ*I3333fff3={qwZ"j(--Uo ;;6Cl23mmkҧOtA|:(===v_~j=>Yݵ~9'ܽ{7;%%?oʔ5ۙ޾p&LٳG!cÆ ddd4'W iժU&qf^}jq VXa|[rZbk<6=5f-[U8EVm~>Sƍל? yDRYYyرcCit57c.]0i$:tƲNoB)7n`޼ytMLA5q酪_~|[}jP-" 믿fȑu6qHJJ"&&Ν;>}:;wwwwʈ#ѣr͛ s"Um r aaaܹ[ҩS'-Z6յ$HR?+̙ҥK0E(TxKҫ/_/_nb/T,Zp|7u}oqqV-&2xxxp!"""իaR6mڵkyYzx‚ѣG3zh͛O< &m,Yju(((O}KssaBܹ;wܹ3`徊AFFؘgyY`eeeܹ ̙FctNN/fǎ dJ/_wH?3Jm!ׯK/iOOV\9tذaQRH7m; 7o\ycK.]7v{ѣGqqq̙3:EZ+̝;]v@333İzj۴۷qFٺu+;vcl^##zB PVV󩧞_ZZZ;_8w\cdGG;3g4ԩS+uLKK,YsJdd$?8vxւF #44Ȉ^{T^yno>tQZ"-x;wnؽ{db񕭭ǭ[\r͛NNNck_iii3g A%R̻9=iX@/|kGjUU2(ۻѲ B)--חJ}tss۳g4Ta2V5BsHHH}ߺuk$ 5@J_fcmm@ h[poXTTL&#;;[&}&$''kcܺukFMMWGQQ"'O6S?"NSiS̷/_gee{=J:xRYYɳ>.mҤ=䓍&h.z>P Df̘d. ]6edKI344l;܏T_=vA.CEPqIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Atopdown.png0000644000175100001770000003336714614030416016364 0ustar00runnerdockerPNG  IHDRMbKGD IDATxwXǿI$(""G jVi].cW/.pT[A@Ei-".$ld$d?W>ו+<މwg}X Ftt%#"^ x7vuTRRtUS3!+"T*uV_~2,y֙3\CQM,Nw:u*ꐖ8}A[E"яNNNA7 @SSSX,0L( r455ƀD(qƜ+A-**z`X)@t:A@$MEEEJKK@5?Ap8۷/B!\.n߾[nCn0~xH$իJ]pDMMyAAt:G.S,V]]ܸq##99ՌGb߾}8~8Ə|;舰09s̶|_.l6 s5vt:}ʰvZ$''쉲4 t:... Ì30e\~W\J>\'!ޓH$= @N>Ǝ;PVV\( ,, /^ɓP( g1>=z @J رc! tR 6 -Eoo憱cǂuW>,--akk}XZZvuIGFF555HJJ)1zh|種~ݺuCbb"j5 IrгfccpTUU!44zgT*~WDEEiJ0aDP(BBBBЯ_?b„ ֻhp ̘1}૯90h/طoO7o{eԛ7oB,cƌh8w,--}Z}8.I&!00HKKž}rJdee7Ĉ#0sLdggcɒ%شiLLLp 00&M{x0rhllʕ+;śX,/ X.˗sqqA\\ͺ( :u B_sssɄ9 vZl۶ aaaXlΞ=7n ==WzjOŰ AT8|0qAt§?(:tQQQǏ3rylammSNuO KKV^sqq#G0x`3ƍÀ0c ܽ{UB,Z~~~:t(>̝;puu59~x=0fzٺcЫ|aa!"##޽{cjmxS/3g,YdڕbEdd$j?BC}&I$IF!33kVKp 1d4554 UUUzՁFB*"//G|Q(o&*߭[7h4'Oi߿ܸqk֬i0vXddd Fk|#Gp6aݺuovZ$u֡tz-nnn DoR<OgįkQQQBBBtvZ666v+^AT*H$bɓ'˫MۖGd b>eee~j$#Fc0l0v7oưa0o< 6 [niӿlذ^^^hnn&)R^^D"IIIӧ #B~KpP\\pĉ8v233k.t֭U777YW\Azz:6m APTTd*j˗QF!<<~ij|}:6mԩL&ž}3\ ݻwÎ;V1x`444`ĉĀiӦ  ZFbb"x<wk}fwnڴI? k׮O?oߎ]k֬Q2̟ew5XXXZ8q"\.rrrZ}p-ܽ{P(ɓajj L?_1yd[l6'N/ܺuKի;w|r?vwwƆQZZqVVVx*bd2uWR(G}#G3|sttoW>52NT"==iii6m$ ~d2>>>d_Ԅq!-- P*u.)Inr|=̍S:::b֬Yuz-DDDk֬Qhkz[ 999H$ؽ{wVŴ V^z>+Z{NCCCJ%fϞٳgЀ3ght$nnnqgΜUTg}yѣz5rH[zF3`ZTc֭={v,3gو [m 8 :s#-;:ETVVBx„ D~~>/^;vL4A`駟_O\o...mjT!)) 3g΄H$joupppSN WI}CuusͥJKKAQ.\*`;;;|8q֯_Gx<ܺu r Egeۢ RRR0sLwNcʔ)سg̐v|=/(J4h'|||'@*j~mX,oׯݻwbA  ** 2L3o< 8cƌAhh ԎO"رc(((@ll,O;a{@h$%%a…ѣG;CR/ًs;((..^OA&`X)y<#447oބ._ CTDRd2{RVT[\]]? }\.ܹlb466 |>D"AAA"/ ҕ8%@QԻ"(ͥ(*J/tfWW׌RI2P溷܌ ?pqqA~p@QT*E}}=PYYiTOzQ5AtJ ڲeˁ'NTT*1NX?i Ev c9fC=<<>|//tǃUØ#U'=o?c3ҥ/Hyb '662f8#]gPPP`IޙQPnnn߶1.#B'bA"*ƀ3$=)BJJA IRo6C$IOCe 8#h4$AAVpttDmm-t:|>@rr24cA$p_Wx5j$ HĒ%KvZPSSSСC1$I-jK, * H$jsc'@om_ׯɓ'k7Aw3܋ Ү055Eqq1n޼f#GRĉ'HN*gp/*ݺuÀp=lذj&yTTV\aِ^' 3f?6n2찰0BRbaرFzzzA$EQgw:@ sW_}fbС(,,NGXXR)i>6g8cu"ӧΝ'N, PRR0 DEEa֬Ypqqoْ mR5p]@ff&h4Vu(ٳoekFz᭷‘#GCbڴiDŽ p̙V%^uannm3fqĉG?FKӠ%]zݻwGLL o |*coo:Zsfffq8;;cƍعs#AC*B,k ]ևkwD"ObDhhh$"caan˗cСطox<llldz\qq1,,,:_l@P[A"ѩyA tC\\n kkk5`hh4O?ZMC@VS4` v)RUUP/EձtR0adddl$Idj7Mw!}r|0YT>kОlmmaooߡ;\г(hGh]T `ΝԩS|ݻyyyy{/RQQ&L0[lilm]PHRTVVvjڝ$I hN$v4( 1adggcŊJp8|m4h4`֬Yؾ}{|>DDDn޼١ >h4wCyR{Fi@בk׮aҤI7o^[[A{ӧO7:O [4 GAסa !JqE,\AAA5"myׯ&Msu&Pծ rL#q޽]vx=-7o"//}(ʣ2t+H@Q0\'B$СCmtMX,L>ùs:Ev$ƃ(P3g ##~)/[j5Y[[cؾ};Mܹsґ n{TVV}qOC>>>Xt)V\"m3d2'''(JkRt0ۣO>Pոr#\.`0Guu459h . ϟŋ|>L&b(++AxPj!""7n˅{X˗/ܹsQVVB^zɓf$Izjl JH$z9:fEEjkk驝Tݻ7fΜ .PNa~}0k AnE!??111]T\\+W$IZ 4 hnnw}>R1+tH=` כ =$} 5kt)ƀ3ҥЁ[fy4^ x7c3ҥk  - w%I*,,첓qp|>B0Xbǔ$nh4A`Ĉ`ݰCQZZ-ɐFcĺW$I(|h4pttp~5amm J2P0rʉWE$Iٳ'O˅Fիh"&`ĉyiϠoYp!.\}CPTC[ں4õ,BCC t:`oo>o܃hOi3^WKwe2^H$&&&d(**Brr2 F ;;p)U:=ݾ}YYY 0qVw!&&VVVf1õׇpE!++ 999?>>C<|JJ A!pqbȐ!f1\hl`CױuV?i3ؚ@(BR!%%Epp-MCTRGqq1rrre=ZgTP@ӧOCT"..;wDIIkٕ'Շ P("::FرcDUUvݻO?˗Ѯtt޺u $IbٲezonnFZZ {nx{{CTB`„ ػw/^!Ct/ 3LLLܬol]TF7n`֬Yp8z٤MMMظq#V[$DAO|TtA("22R6mVZRH}Up/DC}}=L=z#({zz$tRa޽4h/^[kvBOK&$IjOn/T*u@tm>)J5*++uJțc8}4+ڽejTTT蔼z*z~ڿg>?͠&$IwFc\LK'mSSS$$$`ܹmmYkV Z.[jhh@ZZf͚`޽());OOOO>}&1(Z$ۙIpssΝ;od>l[) $%%Ge/N}bp8J(--EBB3 8 08õtD Uօ/~Wl޼ ,h EQmٳR={H7_:qYҎԇk349;;?bQp8GFFF-ϗ/_o5Ceܜ`ĺ>9s&.^{ӂ-++ +WDiؙ:ڮ[T|>xߡ1qDZ}\]r{All,<<<0xtH+pvvvEqۻZぢ(B$1h |w4hv؁V3Zmm-D=쌜Z ˖-P(\.bL&>|3ݪ1bzEQA8|0z Dw⣏>BLL KlٲE+u5J\i4%ۃ)пp;FC޽^۩2tpp5:`׮]H$HMMv]ن `kkH=  F:C+VOjtqqeˠhtRj444@R||M]pF^L iR][TmC2Tbȫ'\bȫQHb 8#] "KNjU)t-Y[|>_`0K URIyyyup<`0ݻu6b シD3FAEEJKK!H ɠT*`0b`jj ggg?? T* !!!Ç{P(2ڹN*ʕ+(,,D"7kkkB$!//IIIr Ut7 s P5NT*-|R,CS* EM-++vuuR@uYY kRp\~<-BXXX7j5T*88pz:Z[[[XXR|X,%ivvv>[[[Ƹq0m43IIIpwwDZcHNNܶm캺lB0ihuuQ$ЫH$8vb ={oΕ<ӧOGbb">رcH$<~pA>|8-X,ǣwHNNF@@<&Ғ7n.\@p8L⠑'Йj޽[{A1i$ 41>]N??( AQvj Z/pzĀF gzV :UVUi3IR nW==lق^z!994*yt:=$-- /_FSSRq$ѳgO޽8w233AdSkFFg"!!Ahٚʾ>5Zv lݺöαl!B6F;:t(Əݻ#77~AuX׮]C޽[o!  XGj@~~>p444@Tb믿BTgΜABB;/OmR]D]`ժU={6rssk\._hjj+>>󑗗J?q¡.u놤$\t fffpvvFYYwJ |mPT*qyܼy߰~={~p8= ѣnp2 999;mN{l6[?C,!I2f<==i?)N?T*J%o0cy|8(Bii)ƌP`<6m-z"jKKK̚5S/ .ejjj.h:ڋX,Frr2j Ikjj۷[N{prrB\\j5{!22 7Nz@V#)) NNN޽{G~JWTTh'Ca29r$ teXNNNާOFjj*7NNNŋ '''wz$ ~W\pD"iӰl2`޽HII]իWchnnF@@jjjp&N[[[888`̘1Lz Q__777,ZgFii)rJ 6 ={СCdٳeeeXd fϞ Jd2~/:OH$}B( aiiSUQ.g9rD]YYF?~\o|8qwիP(Dbb"JJJ#GreǏǹsp1=z.\ݻ[ڵkqcƍزe PTTd /OD"iIIIӧ #CtpBі>>>@LL7oތ̟?غuNٳgѣQ^^HQ=T*H$%f)S[nm Bѣ`2JZg|xb>Zee%ӵgeei5V#00ְ\ S:|b: f|x7?b umۆl$&&";;;]$UyP* qU8pW\y@JJ 4 VZ[nJe/OR pΝVE]۷oul&tl$IbpZ on3b_~DNN Ezz:Zj5$ 8<==1tPCxx"L^t 6lxDEE_WyL·J@E-8pSN6}h4Mz</^DII ,--ann*ւFB*ݻP(0<p&&&zocҤIL0*J;3,Z_|\\\tTPPTjT* xwGF_~8}^Gm^x={IXx1ۇǏcР.YWi<)\nFCv ( :WIxA$a˓?K}_~B|8%H~+))՝ѰaÞصxW lmma׮]z0* @TT[hzKRUUO?G… 8_U$J(ܕo'r1vXBbȐ!ua+--E\\ñ~zxzzbرr *A_p4۷oGii)r9ҥK Cnn.f̘\Rǃfk6oތHMMP!y R)^B455 ptt!n@C/iD"9@pF͝;eʔ)C)tXR.--m~F:WZY.%}7oMR z<،tyI^hs#:]lIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/California.png0000644000175100001770000003170214614030416016627 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyxT?g&3&!!l*"RnXj*Z}ŷ[VRP (,"/v 69Lـ {]\9gN~rG 0[dG $GDDpײsNr2+ ݎl ,, FCJJ_ch0`j A޽jNיL&F#$ѧOꔱ,pIka׮]X,$DƏOQQǏ\0̙39sPTT;#$I0 | D;n?NR;r}c΀;q E9""8o/~0n8b/:,i{Vq,`qq*p@NNGhW8z(uuuHĄ =z4%%%NB zK%&&Z;ƤI0 deea2mVHOHȹoZB7n ITc*Tܧz^AWǏѣGC#f EO]]p@~ @aa!լ\8IOOGR[[$I$%%ѿ4ױ8lvӧill$22rrrXbccޫn+cBkaZ\ Wx  R}vUv=~ٲeBt7~سg6md2uynee%)TCC޷o_kbcc~[*A>yyyʱe**GӑT|l6c@V:U?rndǷx:[~zL&aaa++Nc\ 0VhO?e˖-l64if"++K`0JHH555,_iF \JJ zdŶv;X,TV~t۰d3N xq+,`w"li+r1dUm"0TUUm6jn&BCCq8_s璒°aØM6QWWGII.P_c}:N$iЌfȐ!$%%h$I";;}?DιXdΞ/p8"WN˄]@.gϞnAXX+Ȟy j닊8s :@Mk#`BbccӦo ȱɳgϢ鈈ջRSS))) n9 pGjUsNbܦ:YAssӸxQ;C܄KBSSfsrv[d,pLh4~$IbN'FGGxذa@JJ N/슊 t:aaaDFFRSSCII C dVE8`6ebdR$T?MlZcOza@AAǏf̘1n|Wh4=z4 2KUUUQUUEllM9 p8tDFFz=Hmm#@^E~cǓFh4{nbbb:|PU?%SwDGGc5檫r$N' ՊY-XqZZZN0t^Yq\C|og2999uqHZZ6m). VAWm/ѣFt:Ǐw;%!p¼s֔ bձNcvd|@^ ]儅3 իinnfܸqPUUE߾}:΅q@ΝKHHHqN6ìKByu?T$zr+ >ؿ?vIHOO8d2Lm~@kk+˗/l6sUW1ݻJKKnÇ9z(pȀ\s5;z+f)O*+ ""fN8ĉ9@Suuu˗3~xzEhh(455aXX,ꐕ+^$*++1LJ글hdÆ ۼys***vI9z]W\\nLII &IK^ g\tcxwPmI B$ Ip8pUWuA/pB7['ai <8PS(@mgu5áb?OINNfݻ\Bܱc$$$0f@'om+Q|;֥זV7PAg_Hrbf-8 rWԤHJJW^455QPPPRQQ~EGG9ĉ^'*=uD ȩOTI;kjj(//'&&&JKKV|"vAE?ӧ555TUUq =(cǎUAYY㉧Q>X>odMHmNz+jjj,5\4;T@ 3g*mJnn)VWmmm .)~cԨQ{! j;}S:t0Wm/7x#Ç);3投G ~CD;"##y9}tIq)!N,kמiK\n}6E嶸;p K;I̖HCff?O>bw%l6҂b8]iЀ|)Æ 2&W$,Y.)_ݻR7/$r弿jUKyyW1Cr  F }HMM=׃ ;3^0zߖ.]YzpA#p=z+5Q__ƍ)))A3h rrrGX˺9x9! q]wحpi M03{lZ$IC] w! g49p466j!++A]O*&MRN***ϧ]uEƒڎ"󜼊~ ܞ={ظqctRrssg޼y$''w0 s%v]Ib2AMu7r$^g/o2220>|HUU~Rp o3p32]_Fu]^'==tLVDK'a'O*O3e{w8>̃&Anr2/hɎIII 5Vg+XGDwJJJx1ÚAAAF.A& p7ÎB ͙3k?BCC1bl*++h(^ @p IR*@'N>{gb!** ht-++d2!ISSKK CG2@[j jdgg{hHKK9 :ʼ8QΝ;8qbu;wdے$č0L|ᇊ-\PakrU1DYFF񔖖W_Q\\Lff&~{ id#c2}tBBB0LQWWDŽ t:𓒒It6ZSK?nGӹuV2%mjjj%d"֮]K]]!!!vmY,l6+ y뭷<@MWMHtaaa̟?ٳgp8(--ȑ#e` <\\.""B l߾oҎ@E҂$IL:ۯ z)LE3fpZUUd!!!>}7p8T*l5IOXuѢESVVÇXijjNCEui_SLQnʕ+yW SO=-L8177..QF9}S(|7U0|p$IR&ġC(//wTuEyy9_5_["iݦO-^Ϗc^xV+t ƴi|fSHq&Lv+8^fȑ H~8}4ǏaCL8u[ne={R턄Z;bRK5"5O]UklvzO3j('! BlÇihhj`00uT NIw|ڻw_K.++k0B\TWCmG/Y v]-l۸iwVؚN-;d^Ç3zhUɋvNKjݕŠvĸݲesXd>;%fջwo͛;4TaM ]$p֭S}YS)LoV@v r.B;\#M!p{`伷Gϐ;J{fܹ,^lN8ᢡtʻ8p@;9sIsB'yv7RFHHŕHZ4/Illl% k%Cn-b<Gfah4-"l6r,11e˖wC`ZY뮋A,ѣG|[%--tjF%P` $y1uTZ-v-P-Բ+۹s/!..irW_͍7rNbX0Lꨇ yQQQ?P.}ܹX1b_8b^ YYYNoٌjU&j0t祇B0c׏R1LbX$IBCCILL$--̮ #0s2Rr*+# ˍQ18#$$#G2rȋ=w(j|~好ࢣGzpAݛfbϡ#t{p=\P\Nˑ;㒾+5}wF x)_Ct7j \N/5?ŋ9q݉|Bb_=QO`ٔnDM߭p[!rKm9|IPXg/2ݨ ֯_4S, ')z7x/x@D/'OT v5}Bdd$~;;v,Ǐgƌ 4HID~;z=YYY,XիW3c qW^)݀[A !22dee9Bj 8k?D޿mƢE̕Os%%۷+)N~駀35o3<|pY hg`6gygӗVBy饗j(Ge~LL }/;X>,,?Xٶ-VSS޽{/>Au+ a+f~ [wAf̘AYYbC\b{9'p}7 >--M.Au+>Cl6[fvލf'PkZb!M뮻뮻վwY`t{u̕n߾}ʱ|={cxڿyk+OBMv /~#9š5k())fNTTMMM?~\1V҅:X jjGy)h4?6d~iz=L>?qudd$oۧ@b+srr>s%Qb驞}Y'g|灢:[!vN]aH -UXX,^Z[cƌa֭D뗆!re+zGMPB+a SGW\q6mСgq%zWP[Qv X$u|Wp\m6խINNnGٿ?k+oN$)멩smq'a`b+;/Pp@y PB>}:v]+Pk+_bqW#[O}݇$IRw߉]Rw55vp%hs1bÆw_NPB6lBRB[BE^i4y?*̖yyy2[NQ{Qp5dwɝw{㔕)7br'jn u+ x !++KA!*iiilڴN)c+xꩧS{ AM~z-[{ƎKzz:JOimmӧOo>Wyɤ)))z r8}HNN&==vZzL )))|{ߣb%_A\\رt5*$߿ä W&sVnxUT[$01 &tVWWݻ7)ֽԩSG?bԩRlܸ|RwkVK~h4$ á0P__OCCaᩡ).. /#""^zѫW/V+ SYYّc#uo_d f"11J"##,ę3gشip^5\[!l6Om+O-zCC7Ű^SAMo>q1Z!xc4\pu_ =.d+_>뾠S W+åރnԝ){}CwoK.up=\PLZZZxה4Fz***fyܞ^f3eeeN!2Μ9SUO09 =:x +?%L' p ~7JZべ:niia͚5*Ejj*3g Z^;.<QV'N0p@@8j*y"""xs~-w{mƪU:/,Gf ׷Z[[ cC*Ϫ jGO>2;lSFo')j#v{;V_PXXn`w %}JՉ'" ɉ￟}QxYZx8 `ɒ%\GUԼ;w( ԳgЀ` >>3gP\\LKK Gd7Lqq1k׮%##(222Nlll;,ZvZu1 IW}`u8ŋfA!uCll,1117%}w`2ͦs7:\FQ!Z Gc'j&Q I:U$ Ik5 L2śB?n8u &OQV4*(pZÆ Ss̹ٱc{~>aӈ#ڕ޽[i Xᖺm6VX >sL ?9 .I>|8f"%%á\6o7Tv`>P(x Ya\Up ;8cO @p(G9%;l۶ -^w{WXX̘13e@&<9r:k֬GѐO}}=qqqlٲ\VXuxy>3P޻2Vv@&0y딐[))fΜ)D^ٞ3f8W\ 6rRRRիWSWWG]]J=HWԼm~x_lR#Xjlٲg}3gn'I7tyyy|G.2''ɓ',XcǎarJ^z%nVZ'ydks r_>WVk.m3f **UVIGF$,YBQQЋ#An)V;_!I߿/$j/ܮpB?>9sFW>}: 㨅EXwN8~8$%%1zh.;FYhF?CWhXx1SNeڴiB!u΅ȭ6F .VNA!sV8vת3!YYY?~\O5~xx8z(QQQJI`jj*YfMmdIIIa8| z'ZN~ΰj*6oތN{p+p={bÉ%$$ʑ#G4hZVyqTj lv4iYdOPUUOdd$Oe2]L6 ݮf"؈jw-Umذ@>}:t( 3M t&$Iv]D _SSC[ r-cXlm0p:^z%&MDZZUUUۀ7Gf^̙3J<wApZVnNB$k.~_͒%K裏>$I΀N֩bGz!f3?0;;g}ܾޮr=QjIgo]ӵg0HÕW^ɓxWyY`wu/">(111DEE9?l66 ȃ>Hnn.Z?Oűd9FoDLOOx m+ o Z=&$$(zjgLz`FhNN'O?l߾NG\\uq7­ʲeX~={O. ЊjݻW]v÷5Zl6{,]A4$Vt*pj`Q ڪ8! Ctt4555 |JVbpB E pǗBO>O>s;B Xxq8>%*m6%5666PST0 f%"\ , N(//wsHII d|0us)~Ct:^|E%4eZz(KS C a߾}ݛlL&WKw8|0C/Bh+~y?>Jw?A?Ϧb0 ֹfMY/\]p"tC=DEE}:“O>j $ݴ%],^b] {ù;ѥ[qJ*4eff}?a81Х9JJJ2;hQR$r弿jU$,Yn u`G[mv!ڋ= We8GAnbރKj]~(|IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Cardinal.png0000644000175100001770000004210014614030416016267 0ustar00runnerdockerPNG  IHDRMbKGD IDATxwXT33LчA=\K&51Kcz5%AXEH1a.H/QQ~#Μ9sfZ{wk׮%F ]xR/3o}m^^rBRpWT0Ln{deeI222ފpK}899aСԩ XfptffffПy||sxΝ[U~VV$55?}b֬Yz*RSSQPPج6ۆԿnj\RRD"ݸq}.xA1qDZѣG|I۷iNz @:ѣT*\.?~l}7߄^F~68޽{d2$-ABYY:uꄠ (Jvvvb J lmJ… A4U*V\阒 e˖-zZ(B4  DDD322&OcPT0Lq6lF;3f;Ai\~ |r]TT=HDS*'Ǐo.]ر$hɓ'6l|> aL8(,,ĵk`6#Fci,{ #ĉWaa!7'' AVVk׮# _$ǏPxUɤ]p:t`)tQ3fk 6l[oE ?|rUJJ NJ$7rrr5x!oBVj5 .\'''&楶*YPP pqq1GDD띝OfӍ7z $Id:@$RT\|둔h2Ri٥KIʜ#0l0hZ~F#GT*GSZ 2<<|ܸq㒗-[1c EáiZJLL |l;s@!I`0BܹVKaٳge2?\{n .Zh|4r'Ю];k<:͆T*W_}e F|ԩJ% dz!w[z888 44mSNW… ƍ7t1[o$IlVK1 HLL$f̘ZzlC^VK0 :B۷ogvcǎ.:: ?z^^^;v,|||`4ѵkW[􄗗N8Qma4q)o!QXXD#GݽοߪpǎC~0`|kt;R_54 X,P(~2,B$$$ph4ۇ~VXXX ^իW }vB蝐DzHH/qii{gΜ)\.)))]߿OhZ`( ٳ'HҥKQ\\ * N̚5 AAAj<ɓ'3g";;\. ___ƦZ*dodž ~z888`ҥՎֳ۷/z聵k_~A^^D"h4nnnҟ5}aaa `i4ܹs4ͽ+'Ocƌ@RGݸq^Oa2tT\_A~~~>MC6l@pp0~mxxxB ??غu+]Vfܺu 3f$ܹ3fΝ;! QTTUVmpl6Z-rrr`gg{aV"0\Vn0{!??^^^nPchQnnnΝ;GzO?tN x|ٔL&SK4#55NNNӧONOO)JN#h4zvy&yyyJrMT*;wƢE0x`L8wFLL <<<0fXr%klݻܹ3?|駈Epp0֭[.ŋܹs C\T*4h4*!ʯU@A/b5{eΟ? :z@DDwZ^^N<1h4ѣG9{,XN:޽KO!$HChZL<7nă"66ȑ#i&̙3xzz~֭[qQ2 OFQQmۆ#G͛h4U U; /#&K d"H4P[y&;11nݺv{j Сh`';;;txܩScŊVYT*K}T[k3NJFz:t`>}tYcsܶmN<ٳgC @&AU{(hD(((_ŋχ3 FkhGPСC 6 $I3 8y$Hļy󐐐d˗S'L`H$ʂH$BHHuT :{z=>}4ܾ}.]BQQ!H̷nG=P( 99ӦMÕ+WPXXؤٳ_@P`Vop=z@QQ.\JU f|2kx{{#99ړ֮]kڵ+W<'b1.\\4šjz: `2ŐJի h( |ڭ[4 24iL~a@P@T"4ѢA~:4&+r/^D~ ҬƎ{ҥKa/h̙3g"33dm?KMMƍu<~n6(JLjjb9BElSLY%JFiltZlFzz:s,Yr=4C}hG  [j χA Tǎ7m4cS{ fΜd2%cjiGP0bbdffB&kV#iii(,, f`jqqޭbU&HDNN};zhxpppD"A GGj1&BQ(U6̴111wL&bcc ;;fI? cƌA fd2wz=t:5z):tW^=?<<eg^L>]tiA DGG[y[rgϞBzTTq0 l, ZZeeeP*ppp;CϘ=y}nݺ(_j666`٠Rg^R NBJ,[  s٫28{=$i`],nO`6 ._0r.BR"R$J%\.p8$!(l6,)))OIII ߢ $)) w܁@ # HrQRR2jjum[[[b(Jdggذaj5>* l6#<<xZJ_m)D8{xx:w,> 쬬,miiD'T0( [ [[[hZDFFB&ATffb`b!;;Zjeeet'X oookXHDff&*Ұ.\]][)#ܿ~NaQJeW^LK*@Pd2A!`hdRdJχX,;lll< kzZ)$,wBiccc5uejj\/+2Fx۔›z֮]Kpm}z;K7!0dȐ*...HLLlj3gRSS裏o@"4ZCIOO'xAg2XnF#M0~W߹@3 NRA H$Z~nA @ 9s%bDhREƐN|wY$ ,YCպFСCD5kg… '7,ãG%BjZܿi XdIɣ* 1гgϿ+vx킊kݻѻwoڵkjXr%._l'\x1kҤIH$ް$J FӦMٳf%*hݸR.3Ʉ/iiiСC2@zzݼyjFAvvv7%Kc\vp&VaooYfUy߆ZF~~s?Ch4&O\ciÆ prrj`pNNTѬ A?36l؀ɓ'ɓ[$իWcÏ?H0`[uȔ5Hę3g0c DД `f*T*NaѾkpO>Ə"=zXV p\L&&JBii) *#55?dB޽.k-VXX|&O-**r޼y3LkQT`2b3%:u*֯_2DmEA1h $%%~C^^X,GW*8va IDAT0@{=߿6mz^zA&!66Ɂ`+Fʕ+Vʦhj*Ask+|*" 4ryMZ-r+cp t:aaaU*eeeYڨ3g222Ʉ?;wʕ+(**X,n̼<nclϢPbu=^%I-[_qIYY1qD8p;v#8d2^%(((sņ CTΝ;CH$Bii)233q-|gsXPPl$11Ѻ`@`,2pBT~V&-^~T x5 zBrr2@8;;[=*`8{,>k`wk-+H0h _z[lkL\???ٳgI$iM$x$AEiw j||J^ҥ bccqΝ{l͢5BRqy<Z3T[ T| < IV#,NHE*$DFFBֶK...r|RU^^.lMp]\|9M18@޽{7m۷Z2 Ž1bpx޽a +Xf3Ξ= ///&3r\oԩN<ɥx{{W2 7[>Agkk70f('No^^^P녬_ܰnzwƨQ#yt:}9Xo,W^EPPo^~W*m۶!((.\[[+yyyXre֬Y۷o 0M7l6kWXf5ߋ [pox(}) PzcAyy9lR=m۶ ټy3t:^`0Nǀhp*#00}D]kpa[l  b2}y L;~# :$Ã~zZƹFúu됒Z -[[nUy˘|9sԻF?۷4>Ut4Ο^^^]#Ν'5˖-I&+krjcG?$&&Ɔ:N`7b1ߠ< "\\l߾ d2ӛkRi4]ݻb6c„I>,/ɪjel)L oo oN:cǎ59UVŋo$mp꒒^+V߽{OD"1 BS4.\\ZZ#D٫W6Q\lp:thO F M]vmбPT6CgkMN5سgF`Ĉ`ٍZ Γd={Q/_Ux FuE9sR(QEEEąaYorIP(pvvFff&bbbPTTZ NXH$h4v7Ν;q/Y !<<۷oǭ[ \Ja4G֮p"8gg.5t@(TQ!ެp8Y%*+x *@.vl6 ͛n6$L2}Jm=lVMb](uqqZgbڳ5 Fp8lNu: ip\.ÇV7k=)$,[ )))`0p8r4KMHH[c1a/q̙z=̙LL4-T$}6d!Jd< t:)^ׄlFBB8χ( rssQ^^n@* <|><* o߆ZBd-\\\ЩSW. g kFO|~;"pMNģRlJF5Mgh48~8BBBn:h4ӧHKKCjj*ŋ7BlƷ~O>Bׯ_GDD._2nnnH$RHOODZcpA3 xxx̙3-Ç{ݻu\7<\]]>@h4hрTJN;vdZ1`j?OƺuÇJbu`#)) AAAMxhlHLLX,Fiii[:uV`QbYD"ڵk˗cƍvP\\ '''ϯ>,^ݺuâErj}?''Aaa!B!׃R$$ICPuؿ{n͢EKD_wJ?F=jP~ ޽{8v8lll IPTh4С-ZBaxg`X T*VGGWjiӦ!77J^eVƯc}Fkpمsv "QzM0L9`2 wvvFcFů\5넄l(k3++ iii- (<ڨRQ14TɩŤ_6L&d2Y]o@\$kKӿRM5+,F&sx%ۤz֮]KpmcBȂ%]ޫK.60|A4H$Jeb8 (V죸z*"""=z ==* & SNERRTtL&( t'Oĉ'pqL&ddd4KEӬK.Xz5JJJЧOڵ [nō7p`oo_%ե⳧Nj׳gO$&&wX&qd3mx$;r5ѣ*j;4i'NЎ1G|:x3g<==q=)S,--F| BК#'OBӡ}U HHH@JJ Z-~mT#I FUoi ''7o޴f`x}*tLXdCye1@4$266pRR)a/yZ+ AQQ}FT"##5F]"==`2(--EQQH@ cc,..7sÁ튊PZZz@˥0L| ]* YZZ ˃F P\xkrj\tɒ%?br||yͦ.>>?ׯ_Ǿ}x̜9Z$F̙3X߿7n܀ l6gDiiwhԞ:Y/hVup`ٸqjA$t:222d㣏>N:!%%8~8\]]QZZ & :\,X:N K:zIHHѭ-XO&ͦ{Ǽ{n?\.ݣGӏ;Rb &P0`1vvv]wN\ uVܹ{mNe0gk׮D/ N-N:?D ر#vڅ0՚5d2?b۶m CΝ  <wÇѨtg䄄|,{{\\. F ']s`6G <GE IyA@$aȑ ~YoFѯ_?޽GFxx8*$&&wu0uTvvv7nbӧ?~ ;;Z|o9v؏ ÅoSLa Ԋ6t:8UьNTo|>_|NˀeHmT*:er)RY06!{FVV4 _㉳fœ9s0k֬joɄ>sԩSkݺu;czV|ӦM̑#GV#FlذJ$Z$aرnݺ,Ԭ?Ffp8< ֭[ٳg###Ǝ۷oC.t%%%ѣk=ӧϰ|rի`X vTjrem*  @xzzV|of@VϞ=gZ&zmN5xpqdddgϞزe &NRBVJ|>7o;! Ud]8|0V^3f`„ 4iA,QФ$RP IzꞐZÇ#""~~~Xt)=z<[C5Zptt޽{1|bٹq1115m\.JͶtԥ/g%Ťj@ѠT*O='33 JZ5/iUPQ(_|ɓ'C*69e`XN7mڄN:`M)a| QPP'N <<HKK: '|}}ѯ_?1b6òX,$Iߙ"PXpo6ooܺIDAToL>]l6_p`0`Vk*o66mڄ"H^ [0*Un݊:thAP?\Ju=*Iz? T%%%VZelj/B$ \. f'SʂBhN3t(..Fvvv5f^\.Gvv64@.?VT777M][]d6"l܋9x 4 :w 6pssC`` t:r9YVVFRIhrZRaN=j/T/PɃn9fT7778992 J 2 FJ IT*, BBl6%s&a¯)evzt ]LT t&y`ai1sZ[cN؂^pm Y}:B)i~*UU ݂Bc!)e묵p{FlGD)Wūr{\ Ě'M2˾ݫU*aADcA}(؃^g(f%˅QPC dGWb>{ ;bNIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Cburnett.png0000644000175100001770000003320614614030416016347 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy\U8KQC5f{үS]Ыe愈2"x8޿?69p0ޯ/嬵^l>ֳ3nwk(L.(rDQ[v'~ʵŪq[nƍvkSevȣ&3YZ,V7d)^,@@Dsrrtl۶  gnЂ|[>ѣ=z ++M6a2,J#G#G8r䈥ё &hE YlfqKpہd!Ztߏn TAQQdgҠW\\LVVVϒ 55\$HRSS-/))\G5G@e[ (2eb{xHAU[:\... 8ׯsY"""hڴ]nЂ .pP\sN{v; yD[_Ҳg/!@Wd!痁9'MoeO0i%%%Vv xL MQ*ʾ.mw2p]x ꈉaժUZ۠G8Iݻ7~~~vk333.܏sU1!^ydQW(RH@1DZZ[n|o2غu+ԫ-8FChh(͚5[W^EF= <VQxxy3ӭ¿ey YPQu؇<ڍ#&I 0vzݠDaa!K.%33-ZԹ|}}5jNNN^nLWYDs40ȣy 8".\N8Abb"zOOO [( N#::4_`YfӱcGJeoЂpvv__~?s;s!<<Ƈe # ?%ȯZ y<%eiU~QӧW_{8::ȉ'غu+ 4ʅ ={yڵ+^^^o>֭[GXXT/8mk 0`F׫T*zY_,ko_'mWɥ.!/N!/."(o3yKXk%>>:uV<ˣCٓ7xcǎj1*(ҹsg6n܈`ӦMdggӪU+믿ĉʩ}!{8d{\[`,mk r E[ ITXxyEY!QO?eĉgYBBBxwٽ{7}g.gquueʕ<,Xsjy|~Jdd$C !7DܑoQRy`~ ,MϑG?>Vq%L_y5j 6mڵ={o]IlFO$$$T(8XQE 0yVz͖e%]l(Tzŷ~[koW_} Y6mOnݺQjbmd ?pVY<3K,~혍zWU Iۨ( ž={h4 >޽{hżʞ8ٟD!#Tč#+UEɔߥPa ˋ˗/j%8pe˖1n8֮]ѣGgV*k1!}E,.CY\dT.XZO8StV]t믿fҤI6,[ ŋ[}Mxx8CeŴk׮Ryn2"rEEK2RӔ߼e*3;w˗/}v=?,~qѱcGlqvvB9b0yigl*@=6mWȑ#='NP(ر#]t!((j5oM||<Ν#66"ٰaǏ'22^zUُJpu $ːV@DՖF+,,DWWbi6P(`ܸq=z;w""}ݝ"HOO'7W>}4mڴ[nk777t:~`ݼ;|Պ #)J.^X'Nhޠܹ1cvܐ$ A$ ^Oa-8ggg4\HKK#66gϞ}WkERѿKZ- dƌ9r@޽߿?sa…0l0-.$))~*QIh߾=]ftt֭sNMM-Yl-nnnRطo7Ϟ=_U#ݻw\~ݦشi6mbԩL6 Dppp/ׯuV֯__$ZDQ䥗^bȑvs^pfS jdT^^f1͛\~___BCCyi߾=͛7Z- bz=YYY3g8~8~)^^^L2Ū6x瓝SO=e%8@5i$-[HPP~~~( kxl45LdffLjj*III˗/Wb9&ڵ+& .pybcc9pTJ>>>1h f͚F!..5kX@FFZVu~GRRR̴RET(+DQˁi~Wf͚Ç-R(舻|`,??r}WtڕgyGNJ۾5\ >>,rssYvM?tuxbpi-]tԻXLCVӤi`^$h4ZJZZ6$$dHTT]c.\@HHSLW^t҅-ZT{bh4Z0G|4mOܼyAϬֆNܹsH;oFrvv322HHH_~!33`srssCTZ%ТE |A:uꤍ~K.]HII,[ӹvzQjxxxOVx;v,׿HHHi' N$ٳgoKѣG)WUبrN!J[\pp0gPPPZёbT*&?6AP*L&j5dgglP VptޞTo:B>|hy2y  y4H%XO?M+ar :βhj4k ZhAV`׮]zM0F CPDPPmC#QpQE#^7F s裏;J4 ;Jܼy={?xhܯ4 .a4Yv-7od2GFF=؂Qq'9Rz ''Dzi2ɱz܎D:+{J%p9f[{ެ#`ȑ#b2wvO.@ r؅t`@1aSÚXr%111<3 >4-[f9fHoR$ $3F-@P/߿VK\\ ,`޼yѾ}{~&##A0L̬syDNbҞ[^, nƉ'6رoݶm7mMKp.]wV'''̙åKWh4k.V\iYb{Ǭ8"'$QP5khtu3grppu(_,00Q)()}^'22cǎX6#"$qQ"##k;oKiT. ںu+&L 44T޽{-[~ۖYp o^l۶m8;;6%[EM6VIh-[T755͛7߮D&q޽,]z#xa8rzÆ tvviM,lz=۷o/@0L_AHKKkIII^AAA$&&Vr~4L$&&4ȁnjÓO>˗[7w\T׿ : ͛7өS'Μ9c9|Q ͛ɩ-+t:KŒ EQvuULJJEթw}PmϞ=EeW#uܡCprrbU.ذa;vdu}ELLLWc=F^^Ǐ?N^^=V>df ˗3t:d21uT>3d!׈͂EhfΜYMV3{lΝ;W.B_Jlj`?+^oGuԩS*"""j< l(**",qXX(mm+*lyd_w9ίZi'=譐dL-[ƤIU͂3urrBRݎ9HBëi`6卺PuFCDDͭbr,8www qqGmpFܢH@@@v.Q*r(*mu=rsj1'| H @V,kbxyy5dC$$$ZAՆ(أQu+=zj`iƎ;XdIuoŋ G؄7O<%rAȢ9 UJ.͂KJJo]v\Ws?3w\V\ɳ>KΝm}$I$%%qQNveu6{~HĵkՅlȱns,C~Z:-K^^M6ÓUª:u͛7W`RɢE޽;jUoOoƺul2( ZjŘ1cՍ}_G uc@ Ȼ* ΊhE˖-6lX]@n݈ԩSun!O[Rv"DVUvVeddjMPPΞ=-”ϕd֥+99SNo>N``zNKd?zVE񺠠___[ju_ǥwa00LVR(ΥZ4LLk֬!55}EFc\F ˗/G,<7h4W,ggg<<<=ahpqqˋ͛Avvv9SF#7nܠIPThvщٸ[oFi]R9R`0Է/GHf͘1cxxxe#777nмys{ nhVXŋ3_*Up={gϞ}V#LM4ajW:u꾚'5rGi\#wF5rGQfn:gsk4 ;JQo޼Ɂz*>>>DDD4:1-l;d{1lܸAx7$7ީ蒍TM#J:k4=~}ԫ}[YFtpp`Ȑ!o_[t)|aҥǣYgw]f4ٽ{7+WM6вeKV\޽{Uprb3뉎w ]&rɉ^{k׮)z-A7T*կᬣ-z6nH\\| {G9O=ؿ?7n$&&7މ |*B?Wmۖ'|B ƍ$ZmȖ-[t >RVdĈw j====ݾ5LՋ/&??V|} iiiڵ:X>ONNUV$''[> &%%vop t:]xB( FjFYC/7oݝW[ӧO{ թՠ?Y.RSAA%pvvv8!!!̞=CJ͛ILLP[(Ś5k5MpO ,YsUڷo_ݺucÆ Ֆ888Vc$&&^}UgG͍nݺYVnD2e *ޡϟ'--JE7npȑ:ߧ&)Z#F̓n'' C!۷`0ױߕHIIo߾v֍zjV^-tU߾}IIIWW$[ӊ zEtIp#FcO?jSܹs9FM| +@aa!mۖO^T* wݛJs֭[ݸqΙ"JΝ0aէ;>3 5g IT*Gb'ۜRvIߺuklB֭,/,,_[u[^Eod9R6mԪxT`0RCk[U) Vm " *Qo@վ;qD 0tPI$j2dnnn&BW!!!\xutݚ5k|B7X:wlS 9zBU-))i7vXxy>J6mj*DQ|:X޽;FhzÂmM?qD6lXDU߲e g&,,4?8ѵ}qppW̺׵Yf%~~~* >pBQ_>:SxxU7. {n]Lxx8 'Ըpqq>}+4}FҾ}{* 7onUګJp:NDll,nnnܹww`%/IDATwvСCF0 ,MkC/׮]DW矢IHKKdʩi^+BZZ%>_B֮]Knnn{QINNfɒ%7N[]U t^^{UUlP.]?~%4;v:ZF퍏cǎӡ;ff}mFN8q[ROT]t巐$˶IpeCEBAqq1Fz= 8cDzvZCbb"\xJz\]]oWh{+YIQQչ7"gJzĉuk/Aʕ+X󶫋y衇LEF&Mо}{[OE%Lq`Z^i0СC}AA?ٮ"W^aJA66lST/F9zk;iF+ɓ'ٽ{7nnn6Caa! @1iҤ}\N>O?D`` ?<$''tRڴiSO= vGˉ'pttmVӧ8|0C $`0Fߘ AW^Ѽ û xzzsrr" NjS&M>p@ F M4_dڵHOO'>>ъ5\||<;v`Μ9;>|+Wę3g=zo"..%K/Vzddd/n:ƍgKs H¥K2 {رc5k3rT\JJ <#G2| {=N:?lu@ڷoOFFFK1gN>9rjF^}rP@PE#<Ȃ$I ,4 ̡`Bm2c=ƌ3իWTf\^xU\J*YpF_ӧڵXh4^'//bt:999Bjj*.]㉎Vzju` Ti #33p~'BCC-e(GLL ɤa0z**4oޜvЩS*"VbɄKk-$>wqFDZ8sG}wYT)8B#ضm{?ClܸpMhٲ%4iZ?OJJ O&>><x'=z 88diiiٳ?~R ⋕Meo۶m<ӨT*ü/\"Bz\$`0~L&S_d'pe sp5cUjܼݻ@n݈Fȑ#Yx1GfL:$6pLŅ|s:mqi|Id2-Nأs 6dӦMo]2rHK@ņUIJV˕+W8vgΜŋdddNQqttDC@@[[nr){;az~~~bqFh777'm]~իW#"&L`„ _T(vZ&O|V .??۷j*J%:t 88N:ѧO\]]-}8YYYdffsN͛^YfcNmƍINN&33Qa4J%~~~$Iv8Ds9^ F%c_Bp(͛իE\(Iqq17od?}GGG,`0pIyWFCMʠ ZhQ5a4$%%dvm\RR]Xbɲi&{ub iӦ,YÇCJJJrU*tԉ=zЧO˥KJٌ3/^d߾}dffb0,͋3T*bՕ@yUf v*>>,ˈ`z2?&&4|||l53XJoiѢzbɴnh4( JJJq$&&źuxqsskF3+((HG֭ Zm999sd2Y%7o$--QTh|k߾}zprrb޼yYr h4[pdff2dAAA5^cv b̟?x;ׂP(/ <___8ZX<\z+Wp ö[vLxx뭷L|Ufn(X_~>|ٳg3}t:tC=DNI&@nn.ׯ_ܹs>}gHpp0SL窤-]t͢E*J6xyy*i43NNNjͭP5 ׮]#;;[m48JScܹsYx~5BSOѯ_?RSSIJJ"66C(..F$i%OOO=z4Z])6L_ h4fffdff ~pFZ:̅1D4 j2p+cbx'okJLπSؼVW(Jү{v591 a#wF5rG7rCA$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Celtic.png0000644000175100001770000005113314614030416015763 0ustar00runnerdockerPNG  IHDRMbKGD IDATx}wŕWU&jWZPFH&ÀK16x$p8'3lM8`D YNgfgwgQ }0ښ߫QNE!uG0_ x^wޟ0-!p1:"?DQ <_PEu.m~0$ݫ(3ľ(!xї "fNĂ9cs1)7r/:~=_:\C4_߰aVQնm_#\3!?~(c48%e1 m;WJ)8tt#(dg6$U-;@^چyW 2\y BoIh;M-q6~P؃[/ۼux񹫖\7ܕi(sSW~WTW(lPeWkr// }kJoqQ@~WVSŗH^L\2 JA(@=* K(`:{7cpQT9z ]DAՆȄ+ fumlt]?ou׃,}v HL%Ǹls^RMx="[nۈRL,6ZZ4tw!7<:`QRT#u͘0%(*iW~K^,.n!2j, "vV_{)c II*b tv'SK!WH$t$: FqLJ {2<z/]0+&_Ս?G?g~zƠfe>yM}S8d:QKi_ѡd̙P7}#i {׷l+oBM}~vIu%Q4DQԅ.:Ҏ.GQi9 'e%Xsޅ^ێXAHzK>W1p W(Cq4,O2ǒ( քgMzTkl p%NM]]p6l`k֬ub]C5#c,Vee9?>p0/*"[sU QZ\H,w: rՍi@טbA{gjj¶IТ, ~a1<%\&z *Ǖ3PȇPPЇ`@߃ O+f!0# 78Φ93&qWrRQE@) Zdt*߳gيǸH$Рڜs~ӟzmy Rx4 Cji31z;lbq:# D)$Z p=ɸ=2!'lè+xQ|9gw4l&mg-j Զk-5sDեG!;0mr ˆœis, #3x9 LZ,K9'Ǔd$qC1{gK xA8`ρZKLZnݧ<B?87GQU>Rz%p sQsVsXJBMs( (.x<옆IE8IzZ A-8,\Y~p43 ֠m;?1Mku$)@2A-o,J@[tTY"~E9T%oX` 8k"1}|vA(/4Cp+@F plMqҨTEk]5B?>GY?m_{kHGP:i[;I= W ˲ r[G$Gv5nal0FcD+N J) ɔ[u Q "DA$xxe ,0OƤCҠnp땐L rɗvA 7*EqbUNn//-#8# ,34lXn,{`_(EQ cZۦU;aT@<öazd e~fpT瑑JL\eT(1SG52 /dINaSK' ϹʶX&S:&)jZHKE]%Ǖ HAUuwtJbe'c:tpRx=s ȱcĨ!!ᩓ~y\h:pFaC Y@al0qҎ8F]  1 V!75%9#zJ @GJ EQ" G/^%y\O+Gwn$$YG($ix]Q{plB0kZ5BhmB,m;OF0A8CaA^du[d@w\C8$z I%scEkgXPwwr?ʛ;%Ed Hl@(%4!/ ² <$ 8}pc׾Z0Q9gqa =:sRR,e[ӟP2&-{xͷ,. @-cAșs(e()RVVk_>EŞi9DC EPTzRT9s$piH@Nc&[ ,`ڤx6lԫSF!K Чǚlp|ޞF(20pζ@γKsғI1Ơ%Iٮ;_^ml\:,f3^}XJ >IRMBgTH??M# q9A$b@l@F8]7o{^&PȒ`0ГqL3k)r"ld[sf! 0F|>) U8#?M,=c1cazzƏfϲ9":bFaJKOSNHoBM]KKv'#9#tL`l$GYymF&RA8ȪVNAATm-]@}'G2!Q6gܪ+!n\6_rYWI'yN|ɬ~gigz$\LXچ<" w} %zB!> z~|Vvu']Ds=_dOL{]]X(!Mưgݺus$IµW]m¶^Gǀ,4Ԓ Qt`#P O, z$)?ـp ΄m0M;]x2pf3Oc(07ߋҞn$=s8u㎍޺|RF {FswpNT=φQ"qBHƃC@ q+yq~}&0BwdmMv&gfꎏ;9Nu=V I8%xm:llG gopW[>WTu$IBz-)**J|_4݉гʭGj~Pק* qStS(2宻9=E01]3R~+2tݼ[U0&N=e{on=G[a/Mj0lذ1F(!JEnNR)½Gp{kua44u=uWY#Gtv?Zen /kZֽON=!"Ǒݾ7,+`۶ivmrCS;ee[vEQB_8E28, 8\ۜ>NJ~/'./O}鍝mzVj9ap'"lǁx͈v'! DQBƣZV̮ԱJ{xu?Apx:] 8|Ҕr̘ZumYqh-p(~S]7nD[GW0#s7:i?E?Ͼv'Z9r om;ixF-8~->|)UEGu$,] px?i&|5$TCOs̙Y lAcS7^Babhhj6f7Ȅ0bVLQ(ʟ1QnΝxpef4 5#zgs/^2[4mAtg>šlBAg$A@Axd[ n|w˶LtM7qh IW\U>pm⑥~߈ o>l*6߽G,XohikE6^7wƜ9sFr 6wFzs= sP9 IcN/LbWwlɕOpʙ\&idy%R#"\8OǍ߼ xvĦ7w 媥1cx$٣$21#v(*x BQxmfcnEA:ښubYnQÖָivpxb x|[%.OMo╭{Q2K--N:bɘ7k2VW` ̞^)݇5Ee^'L 8/'&M,e%a#csHɔ!B]~|_~գGeM]#H͍8zHoqҁ1ҒBmQuDq{}$};<+ܶ[= X}ԙ+f#ڝvTU57 {0JUU ئc̉8Rׄl3HS%lvP() bʤrH7 )UOjwiI)Yd S|f@j7s Ib:|<JKKc>̜:+G2ij e`}tQP3rNpwqeE!0q°ޤE"Zu~cϼ^j ^2ֆCrIZt]K/mm~j7:X/}D#ʫ?[8kBxeCWy7^ykj#5׺eO! M7p=ƗH$P G v&F1e46wda9iTu&vwO0 Wv:#y.rXӰi:+cďQ(֬ŝ?/$S;{QԊ>NYy K"ʊ AKkZۻ(*d~/ojs+pCEs=yߥ(wPQ@J6p7*981iYYƍ+Ǯ}pڜ-ıUT$sfT}G6{ Jdh{'ݶ^{_V Fv]w)mõum5 _\o:OWp!y1:麎fTWU}zns IDATǕbǡXph.RW# W)N}&^b19_au]Ohlve7s;wBJ^~e\|Y(+)cxc.Ģصk͛7[0L U2ӲkƘnt,|P}+3-/3cfz\͛q0bqα}6|㿾qؖ 6a[&5ppyyshJCYI877vhҵHc% {Źg㯏l?q d濟9iYxM8x^ك3V7MD@Ueq]D YM6>iy@=E {W_ $StU`P?&q35篆IEaxݘXp9a'p&kֲlē)Dsma-A$GQLK;QBCcW%E>|qv7|so9,IbQK[׆*G,1H2D%=L&l{?{L5r2Y_pҢZ:[%( Jؽm3ܳ3w.bɻs0űP-^{{L=%5Ӧm%° dR,x(dy̷\eX֕pE:ID̞^T+ϨLE4{J!K"Zzmzo̽۶>,7;w lezaYlS9gLbzU!V`C-n݊+f0-  ut>/̚`naigb6]Q 1z`X~)U{f#hw ]ēޑT`g;0rP IP\%--ɰ$k,4s!ƕ㣗^v4uXt4X`x(us'`O푓p, j8p"DA  BD{>37J.gl!eM՗ !K %#,SC<kH$hivwg{!} 󯡳_ hUࠌBݽEAdY', c7O gO-f'a" 㐿YCG>۶]4`fv EQD}2$I/?c5^KPBP^RO]yqK$Gm)_d*_;c"Qemݶ~g)wXO&EzsqN{o=?d‰O?}?ȔҐ'aÆ>|~j;SEQ{݇~3=ncI`Kɇ{_%Q|0oh ws\mGLh4b,]Tl=H%3Lsm0x@ȶ싂$cZb}FBuW~h)J|6~/J)!FJӮU`0 uM^w(9xwq%k.Ǚ]Žڄ#&WX}kMܳ䕋bBŸ2,PJo0룁ieidsux/ƈp>\1B?oY:cOg_ϏVSx$J'S4q{gŢy3qːq^fVwv*^a$;{sPv7睁sW-^x }K{x-e􏩔 }e.~u1%Y5`ݍ?=>f-wN!T~_= !tz#8ֲ^k]b};[_w?̚9Tfbʔ)x!po֒q°ʥV,C2!a0$ 5uz~8㒤^|?X;KK{ q#O+Ni8p`?V/xټe0>аmim5f K~k yq~\v*/+?R{Dc$S Zb}8B2E COeUh&ޅ]j_m#3p ~|(wjOfk]kHj`0@EEy!H0-+,Xhđ5X4wfo G81eE!s{缍/oۢjchhh+dQ"(2y%,^ `˖7O(>TPSS9/" t$j\1c*NgeRá7o?wyoaY1\U^\ςeIJ!XRƕ@zf6}-,] Gi*]~jXw4EJ`fXPC%\a~K~0v݇I F?g@4MTYf=Mø|hmkC߆ߛnXpx2.?oI6E08` [:IOJ.ޙ PF|!TY>#cⅸ $%zx/"lq|o:|y}K)sN +=Y9 }ҧ_~+OӠkI::S TTT '4,ơ iW%A4-sLF,b\YxDyC!\@[o >9ϙrtؖ[ڡ~uD(z{q¸b8/R? ̼%ևR74 Ad2ROeW]KВsoCyQm" l=.)qC~O:oy4_x8zB﹙ӗ`NVq`(?m^ۺXAs>XMoC4"YXTkJ͝߇*wGӅiR`H)7m pα@ .=e/f^YGqƢ)@Ș//~k<&tEs @h97: ;S;pK_qY`e]ɒq\]64cp(nS^V:w&ͷ>h5{(P3`k#+(++?sX,+еۡi*&/ƴ i o.- J B\/gl^"N.DŽbxdaT~cI +?ݵB>Z> wh=?`ڤyUm0Ɨr$#->yY‘z^sgNqg`ͥH]+<ʉ& S# CʊCy%<:p~VϤ?C˲pC}Wp*KȌHJ,g2&2$Li)]5sbKRY?b~p׳6>P_ێ×X8x䩗aִj[7;GQc9Kp8k?71͟% |$^5-kmK[g9Ӽ9,}pP36:G"ƪem^3({R8/+D{{ۨTɆ(+BgW %  0 WVw+!/M%A8yb5uDuσUjoƓKPJ)_L`Ċo{%2z%G UU1xR)cH3 )U aL,Bmɔ7ccyO$9GM]=.?gTMnf:O]^~K0!#oͱgA,Y8¢30ohǪ3W-O: (d}p"4FF*U޻7~IӴJB`Y}iJ;ci%WY`v%G ge#ͭ'Uؠ1cX8(+)Dk[.!lFug, @Я:c‚9_aXqH(0 1߈wl)ή BU儱IF)Id PaΨ"U!$ ?_ 0J5KBp8eݺm^yq>!?:C9~l4 Բ( ӆv$t┉FEB"3zcH%5kzVW#˘5y<|q8 ^pK`)X0g͚ʊb}8Z۶10(|ګ.&a^֭4f|gg'6> ˟CEضG@(V/d2w{W| BˆH6S`"J{1!Yá[톦kplmqGۆXsm% p`l3҂Gy߿v,76IkI QjؖkW^}jVhV hw95nG Jm m±-Xvh>cl _ש%և;w^wYHƣxɍ5VmLA(~8̳lL|0M /$gRw,Ң#PY8!"*p<(Z`F67.| ض +q]1MM;o9G]]vڅh$݀Ӧs(&`hd}Z9 H,:m &VWj –m{qP[W8#ҤmnTUhkO4A`Yr#!*WR`E*')MRO{;3F;%-_)a uسg7^}UT矋/2sJ}ȲUM&0b+wqd6p1O ω0jo# As.SUM-Q86JJy] p wFA8g^Z=,;j* MS]nVV9v{6a[l&-wkk_lza0{`ã>q5T`7u̝R-6@ssIznZhi¸bL1PnB"PlΘOn)r`Y*"B/QixR}| \yɹY)K"4lE`=ZHl;셕iBK'ް[]ͥa@,nO]`)Z 7$t=Ss)z"`*&ؑBI؃pxEC2{G0Y逽&q,Lzzu"͹眓&hq@i#kER4b[Rq6.өI恮J04&BWahI8AJ6Z"*Vy}G!n#!ɸCDAtEb=zRקs( K7-9)2wƠEBV\Op#~L2_@ݳ@zfZ6I t蚁:#Q>Ԅ8ZtTTV<'#KŎ= dv%GW1$"Q"0Tjs͉DjeB xzmr~>%#s= MUþ߯+W❭[q׿D"۱&yzN&S$e'iGBA?f[Oޝr2D'O@qYnư"$;T=XdRLRuPL!Xt),q g4IssSG)?8Sx_`ԛr@WW8w8BnWN8~shOރO_uR{C\~A)*ty+{p)#peaݰ,wcǃچ&H oIÌ3Ё@U㯹 oNj?Hy,^Cg.S5=3R?ixvFFv>})8wpE(+:0 G8\߂?~ iyyD`.ԍ[6<}s}筘{ڮI}LiR .0;pHѻ,(q8<l}9$B0.}DcrNo?n:MӪX&qUvFAx|>w|^復ep6#]](/-'k ر}Q3XMmQӲC,{H,~ڰ{$7^k(*Ǖql0Jps= ك<ϰw 2 H`߾= 1m7q3PXX8|1C7t446 pn hw[w@w<Ƕa&LUЯO_/s;w-O LNЕ!_'>wwndR`Wks]G#k~U7~4Ll?4'pLOiaAjjjQVR қ#4Wf o J!HHb ܤnD øqa<_#4 |Ũkj[vC^Qu4_p>t])#4o4yZBW$_Xh:$b"?=i#7H`Q= /2/Y&yWzmBDbQgٸ D?߇߃E3҄:S¡PV=HKD"F  p{ؘ1y<Ο0ҋ|6:nWkc/ןW^hi<E!9RWxO3Oij( ]5`Xm9{:8,Is@32e 6cp?672ԌW2_"srr#GwBC4zҤD?uttࡇ¬= JM4?|˟K2 ?Tmum0gnݳ xes7D2Yy77$io$UMW||~֗p+ !? P:[U@dz%4+NJǏ5ۈ#kd%L[)|eD@$jf`x_ۇ_!,_himAMM ? P .œ9sPRR+?#Xx8غ vå 444`wo^TQYǴ( t;DpA,X`~ڪ.𩧟;BvIU)ũrIDATbᑵ_\ jôOHeJ~H\r_7qPJ6k82, ceemfG;۲8&dbҴ %ͰOHu ! 䚫AXX™+bmw`/Y̜9 -mnݸZZZ؈¶ ̬.˦a|i|ġ>`ZV7ޜ;o=s}?4IMI&}2( |YZrtTQY8` *:S^ڒ6iy'77ss_yAV쵲{~|ā'%)t=d*!%J^X~4r>Ŝ9M:i449f_s:Jn$vN7mn}`yaҌPQ|\,o7^ߚ VTfRVWyf8Rx4in1_~].דo/^MӮ6d^^KJ*+-fiU.VirU 1HBBz\ڣ_M؎`8,(p-wcY}#008#aF O7i!XO|3lٲ6ZdxN#%B#j X'<:XT_`牉I$>tۭ` p?vHy8(-rxF[Ғd08u Uk˔ N"J߈TUѱqEa׶پ6s:vlnmo\Ŷl]չ?dB1`Vs:lnmλ~`_g(xPuW;y}x`>O݉Nۋ}]Tja`UC]' \}j JUSnm+˻(hb1pjd$ágS3>!eݓq%HHPTfYuVz970t5[Lmh?@SUWskŖ-[ʳ@QG 9|ۭA-߻gUCS`|IywӁv:Tu|+ZcqCUs$J~h4o! ,AnCYSiIds4Ӝ΀b=?)iR^VBEY)!|^b7*RJ$qR$Xq㓌OL0 ,R_H?uSIn񣹪P<?{}oHɺ5Mm; Xqvtj{NŒ+kXPI8Eۇa}̖t&$LrS],]T+6bVFFSD&&H&d"@A*r.*[Rϣ!-ЉD<{]1>778jF|uZ$f#FҜA.ڱAˣ- x8wRJF&@93?@8d ˛TJ4 H/Ŕ/ Ѳj%L SkDb¢}h,ϯnh#%5K844OeluEPMK"g(N➳bn GX\λ!@iaR|go0yUO"q\Nnӡ)@Z&daIRxD"IZOj"NFmTTT1e=|}dtPqB_2Afn((xE>L#X$9,,z~?㑉|%[Y/4yY4mڴ1u5KJ<%HaL&`fH,!pMiЍJ^`0 *lyrM[23i!=q)%44iؚ73봇ؤ@M}x 0eBof-7b?#h5{/ΛYhb γןI7s2/H|Tuk[O̜] ,#?6s<'zF#ǓiCg,q{BH^0E2!0L7kyICW_s q5k񵿒)X'Gg>[08I{zu.fQN yڻq:4ڻGisOPr{7>;msO==\кU/)4 TղXs[B?.h±ttuOq?!rQZ) 3瞡.صxg7T271]٩z֎V5ERY %~La #>8gP@?{6si "*6`HⰯ)bHXtCcߓiF' qx  G^:P|Tcms7 6N2er(&t: iOԳϳkhh8{LpJ$IFNp^^ze;vH@veY 8<,!sF]Ŵkyy#O^᛾FHUS#\CU5k:Ɣn2 rXt84%ԇSBs\\uU|Eߗ[d!ݨ*-@JRi9K"DAZ7,\E\e/Bo)!0r8g#@LsMh4Ǘoxa:1CQ|>y[X'QIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Chess7.png0000644000175100001770000003672314614030416015724 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyX?303l:*"KfVv:f<;v#ݐx ,T*r9RKT7ƌRY[[өS'Μ9VpSNX[[BpTpH`͚5 2=zXFopW\!<<5;;;ٳJU᾿?DFFrΝ t:R7jh4\zբu޸q0@Za7ҽ/מ}ٛ2`Br=ѣӧ;wfܸq ݠ܍7(--h+WX:``+P6" bLL_ DS/yyyL eeeFrs޽:[{Er$%%*2`^{^z)xTjܹs?GGGHzѠT*R8{lV^d4m{Fz8XXZZg{Q@I~nݺ 8 V`. ʜ) \Bvv6yyyRB&Fطovvv;wC7iiidddFA$!JdE&ML6^zqyLfTGPq5@ҳut=x͛]dknnn_e&9@ 0jn޼Ibb"@Rj*YbX8bX[[#"Aѽ{jШTڶmk:qww#/Ri=v׀ЯHY}{9?J^ŗ.]ʳ-@?VN#<<ݻwʯJZZŔPRRBii)nbѢET*R)߾W^hFܹsBP夦vZZh={#hлwo\Gm6-77@ Pc)wTõ?<}Q5u~T*vvv'xs-ZB`w= n8O]&Z b!qFUVx@J[Scر#%%%޽_`ok׮,[iyصkWuDDDPXXSO=͛77E<0G%U4NG PkwUTT@ ٙ[nU{R(JJJhٲ%hZhӦ ;wNǥKpqqA PXXh08WWWVXaܨo=f'}5N`II ƝhZ._ `G@ ݻ\X,F"PRRb Ǐ7 22!Bw0= ߙSRViӦfW_$ӯm.\`vVJB,~$㍧ݺu#$$^ԑoݩVlmmjдiS͛GEEвeKڵkSn+h4 =copK./^{ԫ:~g&qvv 55PȈ#zӧ322zwwwhj)*n#sΥSN[r48xP%wAIEQ6֭~̘aSWӧOG$q Ta"\6BjZNפVjV\9:96M6X[[vZt:W^>g=˜JX;#VeX[[W8.lgI#Q(t/סaee\dIRynqΝ#?y֭,WW׎ӧO|-˗/Gtҥ|HZGۛ'Np)B!6m<<<^~o~ 777IHHCH$Fop5}֙Q\ d=pEYgr>ID]@ `ҤIΉ'* BOrrqZ/͛73eʔ*F+J_}z#>>޸iJrrroرq5zjMznڴ ??˝;w xP̀+AAA=zAw^|}}$99lvZaDp = QT0dƏZʕ+ƢRxi޼9999 >Lx4jKOO'33wyeggcL&@ Ym߾HbkHNNINN֖6_~rܹ37n$$$???yڵ]vAYY VϏ3n8111?,tbܿ+O6'#L\\n3,@x\}j?ۗӱcGlS] PB#G"Ɉo߾oߞѣGի$ɓ7o3g$??h CyeeffgKrMKV7A(jvtԩ!!!'wqv\ڶm{/>>@ ~zcԩS̟?_YR5kݺuJff43z!& HRRRnɘL>@GHHH}4E#NK`O8B*kٲuΟ?ڵknݚT*mJ\]]TK.=emwhed2cƌ1k JTT5Jhl6cѨQrBBBKKKmS(6pႷZu={vԔ)S̝;9DΙ3Obbb LCLСCԩ=z ;;b>!88#GI޽)**"-- 777O.]*Dm{L1cFϘ*j7|SmT*%cǎ~A>"/˜6mΥK(**Euzz:YYYrrrEEE,Z-[LWQqڠ7]5G93`:»" 9|0իUB.Gܹso(++#11oK.5X~郅 ΰ"6l2:>͛7lOz?/Ijsx+ 0`I}PƊ 4PwFeVsPjyX(׏'[裏tOd޽˶m۸{ݔ?'C۷Yr%j/z4i :{h<$n߾͊+t,_@O?dtH^TZ-?#ZӧOo]~b4/BXdHŋܻwGGG̡GRVqppLvv6*B@B2b =H7F 28Vݻ8ĀL::WKZAfACIHH[nDGGsuر#GH  ''gy||| 5Q= 6'NߟHi׮DFFƑ#G*?܏W0BvvՄ񳭪+j]Ν;ۻT*[nz p*&3zj_ǦM2{l*j駟,t:k׮S ,F?w3~aVZ=O:^잮g6%SڪU+C#-ׯ7^ZZv^\ǜgmp0:SY]  {,8qׯ_̍7Cm=|mzJ8mڴ#F^j#z,XJFX/_˓r- {СyeW3g尰VbvD"#F@.Ȍ3駟x饗 2CY"Ve͚5fhZVZeN.zjTnnnҥKOEK,YRRRdɒX7h[חI&!HX|9ӧOgӦM4k֌W^yL_իWW5blw}Md=$x۶m xwmD" d׮]4k BQ_W5ɜ;wΒ<pmX:**k}+ܸqD"jӦM&'&ia9|0Æ #!!TƍRcCFFG18q"Z3g,cKTɥR?Vb^x!pdp"{{{rssϟ'//GGdžTXT*4o3s:>s 3.^?`RKZ- bΜ95 V[r_m۶TԩǏO>?n2lƞ ''Xбr R 9;;W_ϟ?_c jKС={4~^ZgϞ3 ?Э[7"##Yl0Q0mڴ*CSXj BCC-7V~ NSN*dݹs={кukٷovvv5>'8v+vvvf+4ծ\kV%5N{pါ2gѧ?ՐʿZZ NVaJJJضm.\`XY' %%%~[n%Yܹñc5IV!##ØÂh4`)\V&V7Ƞߌ3^ Ro;ܺu \^z#:իWk:Gą,Got&ѣh&j58WmE°nY201d^Jjj*ӦMRF05÷n:sdϞ= 2$6663---Ʀ`ԩ,^KuVX|vެ@hH$2;_fMIкuk(,,4T*wޭf81"X\J0oW{jZ+Ы.@ 5Z[{ӟblPTTıc pԸP(OFFF]&V|\iٜ9s<]WDdeeթ@ udffi$//Nй5` 5lc4H%o'gAݻG.Bnppp:y54vDLmHuY{{z5i҄[Ehˬm0ţ% %%%:uΑO<5]yr9 v6; 5?DbrV^MQQK.kpzCtlذ|oMDDruALJmtuuP%FLfb鉛h4,Mŋ)))Ύ!u>D@xE /P(JB!x ٔJ$5_ V\bĉOZ{rԩ @tt4!!! ːjXWc6m)**_Pt:]III;\NIرw??#)P<<<4h7n`РAү_?ڵ3gWrt:g5.4o|޽{/+D}X,~^yEߛ7oF899Qbrqƍʊ'+UqDFFT0s nD"q*2dsoͭFFCiQb!t:oNAA?[lD.}?+#k]L)cp۷oSD/^ߢ ѣ\r)SzS2uTnܸ0S=5D{YfY?|z&++֗/_w?Y%55H:teˌ:ɍ"YffkH*s nB՚/^nݺ#wޭe>666;v8>s]cA.o!عsgb;;;~w {rUooZc MIIVT%SL99x=B_۷ovrr HKK1U!CڷouEղm6r9ׯ7O?DQQ;w| |kkkFaR8G,3rcpFqZ,7}W_6:N|IDATlX/P'W^^@MO?4}Eu0L曌;Ʋ'OW^˜8q’h0e6iѢӦMQj33?#@o߾.S fee9ĜѣG"jX W^ѣtԉF`@ `ٲexyyqС:{>h4a۶m#-"HT O vɩV ,7\S$uL-RXXۑJرJvǏӤI*Fvvvڵ -[<ϡl޼LƑ#G3f 'NI&{T&_ެ (Ko\$C hؼy3%%%lݺmyVZEAA;vB!2wr@/,,4{[c&[ 'L״igj$??+zXW*J D?J'Oł x ߴ4>VGZO>Ax嗙:u*)))4I>}V4h .dذah4hՙ2W+WָFV(/_[EXx 1q{vD"nQ7xʽ ,X`ںu+ ,&1C/}Ν4@T{}Su: BCCcMf۷/ֶÌ3@qͭEb:t%^+OjvJzz:6m&==JRd֬YB<==ҜF\.7}ܹ'\:/^HHH8VOTTTСCiTX1r { =`~~~t֍}dɒ R)mڴ1wѦM* G~]Ϟ=kRoXT6RҜZZX;f̘T#rmX(}0o+WϯAɩZ4l wΝ/tYYYXouRrWr4oޜ1cƐGhhhjyR7nrѣGWfjt:=h*[SDh\~ϯ &&$֥R͛7I׿YlLJ=zŗ_>ȸh+?.ZǏӷo߿pAA۷o͛ft{쩗#)+/--=c8p ̟?mۖUVWO>Ɔ޽{?f4 J%ᆱsǓ'OtR=jrQ5"$o߾DJ5J[l9ԪU+R͵kjuA3\Baa!#G44W>xgٲe(?L^Q#;;~:LyT*槟~2[c+FT^o&zyypvvO4UqqqqWIxx8.../5z7;v,Ǐիn#JbӦMl:k>ZSqCoZbE=z)))óھ`pt:vIII aaaz B~gڴiömیj222,>ptu *))HtssSiFyEokȐ!{ }vG@=\]VVUff8++KryC~;Fw&s(,,$%%@4XYYjZ-lذgҷo߆6QPXXkFz[vs] n UTv)))^E"Q'NSmmzH2t֍[n1{l@gԱcGٸq#\tD\]]|||2u 7tȑgwjjR,)---[re·~8ĺmݻOHM4K$R;88< VϏz kkkظq#o6/7ndŊlڴz#Qըj C(bkkc2;Zڄ\ B[XX,Ύ D"Ab>?===DB@@@RRRҳXǏsZ;wVeյ>7nܸ4O?mz񗫋ܯ_X0w܁666q?zm6ŋRo6{_=#""ѣGoOZ-bظۢE |||Xl7of$%%U H$b1: rAvXzxyyY,U]-ZٳgcM*--&n: Be yv^wYj5oIPl2n…d2izr…Lbp׀5MfScĠ˘X7E\%XLPPO6:ZÕ+W,!MrԵa6eeetj^(@ ykDB>}~:f.accS{'EIH$[DХM`,D~\\\(8yպSD6mʝ}l̗ipJJEutQ蓜|,7(--e̘13qc"w9Ο?#YZsto# rME9eee ry/_sI%u%d2;wppëu޿?U۵koVk\4( \Bvv6yyyRB&Fطovvv;wC7iiidddFA$!Jdem{nZǁz;QEEEvIy 2QJPJ2:4i҄-Z蜝666cj5k>JB@,l3㇣Vy&8pJŪUpwwgŊb CW(H$bРAtnV >З Wk{_ QTTL/_~Rj4/WWC^Xb[nWz-zjˏ=ѣG/,,T^}J(UTNGxx8wՕ_4)))RnݺŋQTHRƏOzE-h4̙3, Y\Njj*k׮EٳV/$=v׀ЯHYǃ9?ʁ /K.B!,\\\h۶-|A'Jy퍻{bp !!s)BCCqwwhee3s_FRݖ޽K~~>Ç?aÃɓ'sYwNBBﯩSB̙3'n&nAzsUxyJ4ZIML޽&,,.Uл7G w5bcc߿?;v5I  ZMDDh4|ᇵT8x 4!~Wժt:+j N|] P>ɉ$Ugpn{X9bQd2WJ?T;v HvC[cDzed2]t1yv؁7W=?x?6Nè2222"$$dcn  @ ͢gϞpB?>}ׯ4vOjj*ӦMF@ `„ %77;v0y:<==?~<7o&77-ZTWW lu:--KR}u|ɓ'hٲ;w B@XЮ]+cWz菪[͛7ͭ?J˗/>|x+ FѰh" =KҤIoZZZmE oL1"?::8s#/~zommmU/^Tz{{`8uDl06SrB/^l\8U~r޽[kf5gر:φg : qf(A}Ly=z ? |ꩧ:;;wxZ`dRR6m(ѻvvvM7!bTZ%q͚5C&UyP((--F+,,D \Sjqrrm۶hZ4iBfqqqA ^0E408r-@_w LM>뛹m۶Hj=qkkwϧ/j`p SO1cƌjE =h?"Hoׯ_{b$97n􍍍ߵk~Dpoٲ@ ;y:((| &&&֭[k>>>꼼zmݺTd[}Q먨?[9sƛ%k]h&M?>g'DvoPZBuF6L<TJhh(?#7oѣպkRQaikkk֮] bv~^ѯ_mCCC#""$j\NפVjV\>?դI?WOT\j•y9tM4!>>d͉'8uݺuSE ᢣIHH]ߨTZzɒ%Gf͚eee @ܹs'͛sssmڻv>}RRR"&Lr޽n[! FҪU*#~qtŰFZuuuEPP( @ WHH.]bҤI8q^ :}6/2Z3&U*f͚Ξ='>>Z~bss{91U_c?`qQ ޽{iٲeh4Ӎ" ^#...TZLNNÇ'33`\\JbSb#G=r䈯\.hFDD4]fϊ+N;88-]Mznڴ ??˝;w x` q۷?oP=J)Sp@rܹ37n$$$Qzz:vb׮]DDDTpͿo~~~̟?qU.cbb?~'11PH~t=0Ϙ1#`@gO߻wݎ;vpwwLOOdVZgϞ}֭[- 15*'$$$ȑ#eee<==3Ϟ=;jʔ)ǎWPP U*Wn̙3Obbb -}1 YK틳3EEEBN(**2h)))\v 777ڵkJBբT*qrrB+ ] L1cFϘ?p߾}B+++$i```7|W_:"ҥKBaرcGwa ŒO?fm|[lmm' {=)Sp~|}}9|q/**٨nUL&_0aH$Rѣ_~9Y޳>KTTTG|@, S'3, `kkΝ;y饗 b׮]8::Ӈ1,M\/h$3gkp||9Z!X,2ڵkg}iӦHR<==㪉ej5NNNdgg[ྼz$ xƮO\'KIIaɒ%5]fMY:ݣȀJT~hepFwh,WJWi'<~?W3\IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Chessicons.png0000644000175100001770000003500514614030416016661 0ustar00runnerdockerPNG  IHDRMbKGD IDATxgXWH" *EQ@,@4шĘX0E15X"5 Q+"}eۼ lΜ9spss",,>?aaaĿ-Hk?w?7MMMPbJTtbA"… *AE*++t:AAd2!B!D <}zzzعs'$ T*͛.r5%hKv5((ٳ\.w)ĉ & . &&L@`L8Q{tNCC!!!i:l$%%`ii PԆ`bkjǏŋj,"",kA" [QQZ^^a5$Iҹ\Ax$C-´Ɗ+TTTgϞ 땾GU8 z,X阃ƎFaʕ(//o:fhhe˖5}ؾ};>|tGr]6ƍ7n>m@Ķ炙Y캯Ϝ93,&&l֬YA\. ͎QPm JQSS͛7YYY4`˖-p8JJߣCRIbq^$A,0 xF{:XlB#_9d2FdٕͮsJNNb˫WW@k׮]h|;]$wݻw1DҢD"/^tŋ-ڼ J_`s]5jB}4KKK}9(++c_]wlɒ%{7I'&T4~O>'NDff&6oތ%K'OD\\J#\UEPPPԚTWWl#J8NA3<0qp8Əd20k|?%I&O)(ҥ%Sd2uuus]gBa$`2?J (22#GDMMoE谯G$)sF_1v֭1AAA&aaalP(gϞ}&p8d˺pe6AA8jjٳTkm\|NPP_)[vsϧo߆#ܹ=:'`ee=z֭[r_#JM4x۷o3XC Y "3z=Ϸ@TRRMLf)A###L$((h8S$iVZZ@3777p@#eo>}c666 ?p8?qFS;y 'Jq̙3'N@QQ}c̙8{,微ܔ)S355d.J__M$iv|$JN_k$I{{{%%%S\n>S[[&H4#Gh{zz$I}~~nݺe Qdd$[V[[][[M*)) R44o¸\H$*OIIy7ڧeb}b{q| Vjcc3>x`O?$>xdw7n͛J}}ahh96~鳦&tttPYYF[&洙޽ Ax߾}?I~~~-&Х鵭gDЌ 3fxߑnHVde* [̼-|> Z=i`ժUM `kk7nT*M.\9 r]#G LNNNqiF(6nk@ pzXee+2m:gdTmPciii$z7J=̵7oė_~իWk8W > m4 WWW*mPL Y[__MwmmL33"&ߔ@ @II []]+JKK[zNykH(ooﶭJ0dȐ $Z,Nzz:N uɓen{uFа&&&i>aaa±lXYY 666M%ISz )WVVV011T`p_$)ݡ ~f,{{{X, 0M5ył=233e ߿:xi[ko39<Ǐ1}tܹsϞ)ap?ʪgj f̘1ꆩҗ 8N3ܿÆ K @ktXΝ;URؼy3n݊_U뫪tʾܺu>muɵ}ڭ[~YUUM___6h"O<۷vxU54^YYɁUUU 3 H]$!dΣ;GVBTJ B5555;vlt֭7BQF$tuuGS,/9 wX,5뎎N9IS!IRϟ_ ז=] )IjR,ćL)NXXa |P 5p8::0cccl|ÇjIO,$IRP1:>?d>PG_qɓ(((@}}=t:LMM1ek".D\>?$IʥK<==WWWSW&|>***PSS}bŋBee%jjjt_BӵE"Q"><lDByyypssC>} \|prrH$RUNdzgϠkׂ$Ix|8e\nB٤+Vi#߇6n"phh(?sK`B_ţGЭ[7\Rc$IM =>( CD-Zt`[_Wjce˖zԩׯ[\X,L0;wģGϟ?ի1jԨ9OW$Ip8{BᚒTWW$iܬr… \FEeddu-ǏA|4b0zhXQQkbȐ!S#Ix} kkk?Жq[8/R{)  RzjɔkS}b?ƦMtX~= ?K >}]BB7Mww@QQQr8彗 ';D"y+)Fe o7c8r9r[ᄝ?%::z0BWW֦MZ$jRcƌIмmϞ=<o{uu\KkN,$ImיOyf͟?ϟ. [̿|TT@Jp<.J Hؽ{wmѵk׷#1zh>|X8 ]]],_/^Fرc1vX ˝y/:9OܹӔbLx< ݳg-Eg0EEE|p޽{`>TWb 8UUUHNNƎ;>>>dɓ'2l6.]ڤlX~}SD3I$͛7[Cμ4Qc݁O>=~(k2X [vºuзoIwSSSl2$&&FaȐ!ذaڏ=RLBhٙCEd^uu|ٻw| =<akk U3CReN)$ b1LLL`gg7GxbJll7vss$$$ ŷZ0 }Hd  >|xg(ѣBF,4*p (((СC?Gmùs琘+++XYYWY#3CC6n܈I&lEZ{d27nɷ÷bDEE cc[ne$ IIIfffi=z ݻgT9&rRZĉ mWـ%-ZGmm{UVV}l'pv#zr Dt:]v5׏Awm&4m H$R鏧Nj+2_#TaXNCC'O>_ׯxYF@B#FCll,ƍ֌b]tT$fsT*qR@ZG? n >\pd!2J1˖-{Gk}%wޝ<~NBuuuVAȜ˥p 4i Fm˗/#22M [~$nȑ#g8p -ODǛ?Pd27!r9΁%K4V eee1(_x <uuuP(j1.bggݻFɌpkAYYYjL3FiK=($I:qOl̴r)\mm-޽ny ÇahhnݺujsrrX,ÇUk>NNN*:pxgϞ͒J*Gjj3fq8nUze*bbbUĉaee%wo>DEEa۶mQv/++[5fھ};?22 IA)GPԾDgXzژ^R"H%.P}NHd׋ Cd޴уwɒ%jP*t $bJYsU$)1222|)544<.Kq\̘1C]2lll@R;jIII2T*VtB L TT jL{[Μ7$Ib AӀw;-C[ x\w)\LLq\\܇J G$A$ >|?wsk׮T`@("++ x1*++ߺF%۶m[Ҍ^xAX[[W=zt+WK@e˗AW_a…3g!gݿJƿgϞѨTŬY߿‚tK핯m"f-&&&HMMP(>kkkhkkj)ˮ|ۻFoÆ 'LPq5ɓ/xxx8qbjF( ,F]]Qޛ`lEhFCBB\.1rHlǫd?UIhl6'Nt߿طoPHJJ]vӏo{U24FM2gŋ/`W)' ;gΜ۷[sSN)mGUgN$fff u144lz{.'OR* NիW1vX̞=ҥK^Я_?\~ ek$//2Df6QXH$F|pzzz`iV錣Gz QǏ @p%|g>}zs#GĊ+ߩݣ oB<|ݺuQa X9hÆ >vm޼y֝&8twiii~뫔rBѐoz6wlڴ W\Z}FǓ9?J>B 7a IDATa^pҥҢ[f,,,|6uBP(GӧI+FSHhhaӦMCFBn SŏQn9sɿʫ%˩Stڵlذa˯5??~x|_*-qh4b̙rݼyQQQ0`9H$\Jg8Kႂ&޻w'Oʓt̙y֭7R̟?PNNؒ# ;;5j̶7oDxx8 H7n8;;AUjddСCwdgg`0**H(^t:{қ7o ;w̶ T˗/cÆ FeeDܺu &Mauuu}7T[n944th\\B#RvvvlXhU$I///ef  l?h"ףX,F\\;|022&˗#99Lh&''O9w=r,?~{Tp8ͫھ}{SlҥKA5CKK BPflkʶf8::x^GGGɓ'^z7nbbbPUne$m/ȑ#0eʔ_~Ę$IrD"6n8y}СCSUUUڵK.1B~^ܹst|)e˖] 2spp!IR-0$e1 HR|Xf h/d2 P(/1&[n۷/CRVN s.\c;v;vcΝKK^z=:s̍I&ūTD(Z2Z[[cÆ XfM E* 28y$ۍca0ٳ'iii T8 ?O{yw /ݵkg~~~%7n4 ݪN3쌳g5HJJBpp0.^}RFi+r/պXxX˗KfD;t:vvvr`0p-5n͚5:ujAvvenn.511Q]j?c٦MԞ O  ##r8$ ^xD[wkkk 6 O徎 ƍ{ɭpNO?4&.8t,jU8MMMDGG#>>^:BGԩS;mĶ… .-z۷r?7nŊA6{-266V:?'' wV~^<Jpc;;;0 tMēAn, @ :))i\[^eK,o޼*544=z4zJW ]ˎ n:nܸ1b._,}OeٓF-iر#FRg"::L2r'bҤI\ҵkWt k׮Uưi8n+ i ENeT*UO$ժlKoξ@Q]]YUU%W) YAAAj_U$i"U!!! Pة u2۵pO#""K$C'4iڳ3 |ܛxSHMs #U^S7F4GeχX,n1:sssU@'Ce366* TիW3v999 qرuA}ӧ믿 :H O*]lX-Z꫾}V^-Ԏ#\MM lقsӳSӧ000@rr2ۇ+VBmEhh۷o{:88܋sW[[MakkK\v$IfϞѣ);wT? 455'''t~Dfff6"Mb-2 `ڴiVsTz!<<W^m'7e|᧟~ٳob V8~~~Q6lqrJ֭[˖-Y^^>v޽CBB~~̺P(p8-#""դp_5ǭ055hR8>Çc޼R#;CUֶG}j m###?;qDSf_.]֭[y;wϘ1ebbb<ɓ'ϟ0acxxx`...,7?qHH)̛7MݻwcX-bvڵxܸq}Ϟ=;"//oӧEsB!n߾F>6THR777WUUu577h43gZH3FJo_H*++35jTƈGGG;.[^ZZjdbbR9RXX( zCgg4fnn.,**۰X__ݻ#** LII )\nn.֯_߮uZ=lڴi5(ӦMKyMoN967bQ҃߾}{Oww3u۷/=Ɔ"ɜӧZXXDɓ''.ZH.YR)ܐrX[^.\oS8 4'kD"HII͛7P(ă@Rߘ[D@d`LL̘Emxŋoݺ5t̘1z'֭[gРFDD%LLLL̩T*!,--%Ν<{lĩ27o^ 077~eAPP;EDY GѥKz+X,|qttL8~8ٳEIIIZ}۶m3mkjuڵoZXXbbbܷog/4Rmm-YsbDVcgGyU:*l]tQ(`e…⋠K2?uС?}||Z,{ճ=<<_?ӻW_}EH?xyuuttp?իW|hhhhaB VYwV""oM$ݻƓ'A3ghԞ5k g4S*}~MZR) 77vt(annvޝuƍj"|>2@$8 i,ҳgO޽œb2dR0W>ݾ^I2224N<yfЀ;vqX~~>444н{7谞!Ѧ‰D"XZZ"66V$' kkklv{5fTX,SZFԕ+WܼTt9\#8~ڣx<~wݗ~j /3F-xvw$ oajC0`8^F"HRTZXXHٻwo’%KT Dsεy mmպ!Eѐs ey9ܹWWW255rToBB]411QKђF$Ij()) 4UB{.rss!H`ggԾ#oe\{nnnؾ};11p@?p}:t6((BBB5`o9pD"QbT Pr;wN>+"H0  뫪D_|EPEC5a߾}߿ZJAHcccY?keeum B4VVV >} $Oe(ytVƜl bꫯ6n;|pc+WXATj%3Ijlo?@ Ν;2zŋ3ǍVH$OW\PTL>?ymIO±V_g)}m{A0&>>G>FF>r+P(ģGTJ GGGW۲e; ϖ-[;-t:>|'O,))Azz:RRZ---vAr+ݻwqر&2`ժU*5mSNlڴȑ#Bd@$xgΝM J[&)wN,W\i<Ϟ=ڲ[.̓ϟ?nݺ+WSU.:<1C~~>лwog_" w^Flll0x`?~ZZZVɅ xb>>28p ׮]KLΜ9#w0 \xJ*i {{{Q*bccqy(\Gĉ޶)++c1bڅ ,Y,*}'1c322RjY@L8Q]b5UVA;+2wtTʿ| : X,f*3l )*,eee췑ҿF$IСCjY,X,A5*P(Dpp[*UzڵkY-++Sp}ѵkW}ߪ޾Æ Y?zBKIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Chessmonk.png0000644000175100001770000004417714614030416016524 0ustar00runnerdockerPNG  IHDRMbKGD IDATx]wx~gfn6ɦB B'". z bEEk*)R $lߝ$(f̙o9_{?"11}_$&&@Ý2ܩpgn{8I|@RffgXa vxxx$x{{OA3/wxx l`f2A###W7o߾ҸC  ŋ}P(_q >?ō.yzDkA!ⷡC~ @4JJJ<0LL]vI---E~~>A0 $I xzz@[\;ID5큻ϲA +n8}6fZo85@7G322{`l6㧟~jIp_' :u'N($ @Qx<"##AhFJJ];EQ L&P(jŭ[\#!!HP"xtFk_hZbyZYeeeh h'T*@@ pb["y<(H$X,*a8AdfN|0#Bx  ~<͍; "x<^4vPZ}-E6~ג$͞#PTp2vy:t(FD}\]]=/0X,vBh4@$ .\mrAl {L6F&^TlCddd0 JX,Yl{||:*8qӦMCݑGbѐ \LL n޼gvB~+oxH$6W)`^? AxOV*lxz94Ɠ$rۗ `X2+**z94($3g0}t'N> TŁktYƼyw^+={?!@Qb1^f5NVj$Ibmj~M$|Ehl2 @ xVOV,GAS%bBAꛉ%PSSիIra3WTC M??? :ΝF^EQ h-ZD8pwwܹso>TTTp8PDҢB ɸcP(7D"C lÿQbx^_c-E&hk=QoNjeIf8vР T|Z64j$If( DFF",,{yQVV?Yfdd`Ȑ!0L0 `%%%(((EQpwwMPT [+ ġCp5{IX,-LB@H264nzRtdJCN(* x$lAB4,C3 aC]ZZZ@T*ߏ d@ @ @VV=PWW TWW# 555Z())A^^ƌ^xmw4M###wo[( Yz J_jKQ[BHCBBxٶ$+JZm&ɶm GH$z@0X2V`hn`z[l ЧO޽W\NI ŨQ3Ϡk׮Gjj*&L{r{D( UUUXd vڅ 4 F/bڵO/C.n<@ CH$JDB:wGh@+Hzd%Bmϓ$)@1 oRk4Q/pM@41sL|WzNjjjBR_Rą 0qD9rEaŊ{ǑٳgCVC{x}8E="JǢ "a bj3M^ 3<2dC}"$$A ::CaƌXr% D"RNǹ/p $0 SXX_4i Tɓ'ɓ/l2 >վI|}} >~ԩ7o B({@%Kү<gR*vHmm-N<4ݻGAβѻvj"PͅLd2HMMW^P `+ |> EHHLB.C*d2AAAT"??(**Buu5I䠺J񛛛^zqp{0L&d!88ۿyxx2.0l6-EYYa0JІfm٘1cB!P\\$''zVB DPP@h4[\NokR94V+T*ھeȁz;O<͢* & jnOa>>>P(;#gB(*B(`COܩ[bb"%躸/p3  :nf2 0tP%V(r$eUUUy֭[BNN1tr݈3ap  :lƹs쒆o'1 Q^ڡ 8)  ja6b%؀`FH+)< e@ Bݙ*?9T3g"44ߵJ܀X,089M ><߿`CHD"̬YzCwAa8p V+N<իWD^:cw@ݑ̝S(D]$I;t (:L&EQYA\f%B7oĎ;ЧO.g0LOp V)))u떝۬!]aG.ׁEdd$bbb=_ޓa$I8pYJJgڡ=ZCTTT(zTTTtwp!\~ٽZii)=6OaV5~!֮]&JKQQ^xlݺ-I3>>ީ {NPb͛MҸh|ǣ Cee~wшgƍƄL駟bܹX~}AtضmyfƳCU8 IXjܹsX~=BCC!:j YYY|r%\.Gݛ (obϞ=Xbƌ$SuQk$<4TfΝϿk]8rHZCYY_icii4Sׯg]cϞ=otR5 $I$I@c{^sh$,lٲΝ;1l0}ժUؼy3bcci&θy/j_dj_>P^^YCG,_8~IClj'l2DEEdk -%pرc6l؀KGv&L?yaÆ N-%wQSS5[tfqpVXVhӦMjx7ؘE}y{8 /`„ ׯ_׿P(tRGS$SX Bݻwo5Tն)mA$=Z\UUUظqc\iuuuc4v [Pxϟmw2l= `y}ᅬիW_W3 iAuZ0#GP[[q|>tt-] Ú0r9jkk$ [nҥKO,X bݺu-4!n E_ll6~P(ĉ,>$&m^^^=-H=ns <Y۞뇓'OzӭRX Bo0 z0+08u wiFRRR˛X,oQ ooDVZl (++'  $ьڮWfذaQPv?ww+9_clٲk\]]5 aj^_GG8B={gúu/cooo4a_u Rb]_ClSatۂy 8$plxZ~XA<_׮5N(Ν×_~M65+ wwa$$$`׮]>DEQvHz&7(?>Ξ=֮5*jN eEt!tpqqAHH<}}}BN 0ذahŋc5{<-[`ӦMɓ..q7A"{...\1a6/QTXbPU\|>}Q(p4M_h4P], _{˃O߲ tJ 6l؀,[ RUEW^Xz5{9,Z_|y{ڙ_ZZgyZpMًW{W!P/ ۷oǩSo[X,@}5Spp;A8\ <ԛG8NMCW_ujۣGc]t|>6]7o?!!ŋ駟""".R FJ\xюKb+\@4JJJ`ZQSSO& xak ;w\/$) u:{a30wf] G/є9$pOFBB|||DcKo$ak`mqFhl պj-S5XZʽqAlAV٥VQb*B[V\zǏw-s[-c}7]:P>T&i^?z e4h ZrZcewwwAO5mpiiipuuE>}zxk;w.6mZ OOϻ~/ ooo(J@BףN(+u">D"AvcZ X 777@ ~Y5ܭ[пN54...B@@]O49f%b)\V+G^2[,jBTrl+f4AO%"r/vؒ@v #Iߎ^jB$aƍtWR&q:5";tL222]]l1[݅a: (Hڣ̱9rǏ/h%aMHHH@a4!˛ml_HH4i-l6CVC.(܀B6e 8b}љ:G*Bp)|pl{ -Ǹ;w7Cpo=!plO'P%Gnl҄;*11{'&&q| J%\\\OݽI2}EphS*رR||W_}.ĉn{{~0 ["!!ɘ5k{ǝab̙3q{)'3֞8q"v8qăÆ z{f31i$r7* UUU$ [@΀CK*A m6|#G$O6Ç/BAA݋04PwU(J * <0`@7..fSNťK'O|sܹs?߾} `)))8t¾}0vXx{{߶]iiiPT-6ׯ_Gxxx]m #:СC1p@,^| Fig 6mN B)S(dff> o߾d 0 O>طoJ%֭[qƁ(?s[oL̞=h -+0mfff͍zݻwdM[⭷Ÿzȑ%Kk_||}}w^$$$ص=z4 ++vۻu%6ìJW7gΜ))) b1nݺ͛7!~K,ʕ+!9zhSO=1v҈Κ5 ֭k- ضm.^x;%j; ްV ?#.\Zͥ;g}Ǎ7DgΜ٩]uuuo /k4 Oc͚5_p֭NmV;d"iKذaBBBpv?Gnpwj `ݘ4xΜ9K5FBeeeB-z-[\t;wήik0ŀޢT,  Çcmgz}:>S&..@ Y Q[ ?0 ==P; \8[]K_|ѣG{ַڳg6 ,8aü<ŋ㥗^œ9s`ʕodU{V^ٮ U¸qg5j?{m !!6mƍ1m4$it:XV L& )) SLD"h~gduYYj1g͜93l޽222݄_v ˗/Gppo߾o:u (###!Fm_zzz  7o֭[Ω{.\  (((ݻhړ1 +WC q%ziڅ!&&VBLL V\>x饗vY,r4P?a3o>>_w.KII =1cp\m8$shƹs0l0PkעxпӧO 6׮]C&K8琢Drr2T*U )-pnBPP^|EN۴Rc9?XA(**jQ\\nacq)9۽{w݈#\rlPPx<rrr0ouԸ1cƼVT*ogΜ`0jK`C>}ux`ڵm`Yͨ\F@բ AAAѣr9|>d2D"b1V+4t:F\r\KyPZZf&;Ǐ iN"###6s}j/XIT3`XYYI(آf΂GرcϕjTѠ ׿jxyy3Zj[5P0ͅWKkK*?X`7h [paСC6aڴi(;4ӏ\.GnݰqF|g1 j ]nݸS;lpjJ0uGM(o޼[zu*l'`C |}}1c T*  h49sJjdHHHZ w,._n)iUUUjQ.{Ǟ޳gOw})n 6> >`999tg3ͰZ uuuy&F#|M̛7U^zqlվ @"t{IϿm}kZe)9s&N^zum$IтUTT/ Abx<;>a///L4 f͂HĴiݻw#%%iii0jZ(Va8fݻcڴiw౵n C M,**YSqKsc*--kz.\@ZZ8,Ylu:ga͚5X|y:VK]ZBpJ4BN[Z 0Jh#@4JKK\[xx8z)L:MdzL&C~ Jj.Mq|>UvJH4 .54ݖr[Xy.}Q|(//d^`Ve]W,\]].Xk֬o ///L&D 7N>eNP(ѣc' plg|[mEQǶ Bxzz,,f!J/$IRRU"iL#P@zzz9ZX8`Gn ___L4 W^9]s <5z^e72шsaΜ9X,+rƌB{^Bu:;2h w 5=}΢wB/・˨9w2}jN{/>Vtm$&&.]QXXz_~D{*p)))8p`gvOM^~wvZٳgoƎt5^x/JP(ؼyt:EAuu5F2$㧟~ =zx~ܹ۷oW/_o_ĕ+W/R]JKK4Mcر;v p 8vZqFs)ӧO=?s`ܹF9002==ݯ RA)--ży"f͚j׮]ow\555(../+jgMv6D___N+fyyyMJavٲ8$dļyP\\.-K;we:SU WQ,72t1cÍ]$IP&g0ʵ(X,~~#-..Do pM ?ߠA?ދi?#Gγ},_1[,bÆ ;h(**(K- +#F((++C]]H+WܹsAQ^{5={8O N_xC Ν;W\I2dHJ*Ζ( ERjm*99'^ߖ5\c'O&Bo>Y_?]kcnH  )) IIIvmXłSNԩSv2K&vt:ttЙL&=z4.] )i 6,';;ll;x@IIX,7m <'N;vtkmEKٶOE˹Y A$i4|爈)Sp|XhQ/EEE]裏_zG>TTTdcC4 rZVmO>o@^^0<<<(;;OLL_oáf_n:si&M:tPՊb\.2V9pޗ٥ÞΝ;޽;RSSMtggƍ;v/|Di(TUUqqqKm `Xlrss_& jFx@ ={4L>C-BBz H'N94 ++ #Gh#.Zn∢pŋc͚5MJ4f3(r*رcKǍ'}6??+ hi*..-4d+"s 0gi ++멈F iݻ~?rp3hspuuw^TWW|,vKsV?!H0w\L,&$''#;;ۤ* tW1EJKK|2:u \(Gll,F/<';vcǎ=4ňƍ"sss/@EEEϾ}zBmmmwԛ<4>?khTOӥ`0~oתٌs1gGni={6f3|||,]tسg 0vX̜9~~~l;w~-U_(Pml RT*qqG?p< IIIXv-$3 G|>f3֭999`4<ƍúu|nnn ://σϝ^_b6S"%%%%%<4,/yVLMMMz!F4h^e˖A(r+a[:O$6l؀QFauw;3Lo J_#00N߿?f͚Rm۶a۶m_\'x* ]_C… sĉ\pac@@{s񢢢F15p@h41\H`1&&_5˙%%%FooobаznZKHH@ff@[6. Eby󐒒2|Ĉh4 X3ĉP(u:4EaOxG\222g̘޾e4y%K >RiFii)7n^M ʇJJJz R0|pV(`0Gy䡓'OvaZQTTX 'o<8cmfH?~ o6rrr;EQ&J$ 4M#//Ɛ!CPVVA]]a%$$ 55#;;[֧O>\EffرcBTaaSLѣ9d2 )ݐ& ;ѣG#(({A@@}38y$BBBZ5hzzzLWj'_0 $ hFZZF \K.ȑ#HIIApp0Hٌx\r2LHKK;W(ddd\SiC 1j(ɓ'?“ZƦM0f̘VgƯߔ%@VV"""ضm`X $IڥR3f~~~g폎ƥKqUDDD333[ v1rHlذ۶ms.* 6^!4g=84ǃbԩSѳgO"ݻ7"##˗/V CQQ~g$Wb…X3335Իv'0k,| sْ5}8Z\G}c4AHHȇ)))apuu%!C쌨'** Ͷ-\VPpa4:Y>d ͭ٤VBήiLLLDXXݻ#22YWaXצ駟~>..^^^3yg#00* /_㳎9r@i<>FGGjƒ%K@Qnܸ|hB!ܷ%IDATB!|>pM%IAAAG>}0p@;v ;vy`6fۭ[Q%oѢE(++Cyy9QUUJJeVqqq\.|||>d21--.>:w}h 6 Fhh(Gܘcaա­[}v[2 χju:`sǎUӦM[ObAPP Ŕ>JNFF9s\D"9zh1B9V2eJ[vQQQVɞ={O>0`zfIZǃB'c1|v {z㹯XM44~)l?VeeeX` EѣGO@ٌg"00#G\.˯;z(<]D @`Q[[FfBbD"sKixx8r9(/4 !!!IsYUUUhZKA~~~χ7rssq @%:Z,lٲ^ǃ^Ve$|26n܈%Ktm \C$-v܉G͛i$IBP nnn\4RldBnn.zaÆ!-- d䢢9 $ =[D"Fӄ#FFafZTTj.n… VibNh4>|xe\oS|>v BÇGATT"##pxrYڵk8}48JDEEu8AuÆ ŋooor#DjkkQVVٳ8<$I?# vI1e|'PT\,bWCKC=W_}<%%%|2JԠ~B`@WWW!44}رc`!&&ۋg}V!C|r(J\|GAYYF#W`bBH$"""K.P(O?7nL wn:]:gk; an[86J?ƅ P^^\ ::"Kt0(..Fjj*~gX{?׏H 0sLn<==f8o}چ@bCT+(`$TE# N ˂TeE(@"IM҄4 ԓ, ߳;EAuBEQ*$I%vvv*ς DED"dț[׿ۖeF@ED"dvT8׋x<XYYonWUckkً;==buu|OFT P(fwbaHR,74+=5Mi- 8h_s.cffteH]]]u,bvwwx\vaj'-v( yԶW驀$I:<ϳ@XMQ/h~o[eY^˲\044 =H|8$Bu\_Ó|>PÿIippkkk$ $IuµP:]?IWsM " R*L&S>EUP㏳:jJ{ҏV9f1//O ^?IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Chessnut.png0000644000175100001770000004224314614030416016356 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw\e߳Lb.\S3GjC,,l:˕rV8p"`ȉ#Mu^/{ss?0sL#̜9S+RaDwgQop

fkkK```]WQ ݝ'V۝rrr|I!@[ו{<WRR3>,Lرc^"~zJJJHKKc֬Y_~YճرUJU|E,nW_}ڵkӧOgҹsy\'mժ5L& $::^DjՊSُE_|Axxq b5k^^^XYY}vYv-VVVu]~͝;rgKOD0ggg;ضmNNNRH4//ݻЩ+X޴oߞf͚H +=>>>4h;; iӦ 999t~VqСZn->X0 r(ӏ`0oᣏ>ZإKŋӾ}{!<<|3`?+ ФIGvԩ#((~;ٳ˝gdggsҥUǏ*׭[ǖ-[dp q޼yo.]n̟?y橀%cǎ'|۷tR-[tvޯJo;۽{w糳DUjF5bRv:ȸ}^e4BQQRbŋbccSWSN&qy&MRĉUu޽;aaa|2NyvΝO曡.\X^XX8ٳsI8p_|e e ehPo1&&k׮1tZ 4vݻwIE5 8::"QtR"""M6|7ܸq???}]bcc йsrwD"ٙ(^|E{=A 33J%T* 퍫+Go2hРVCѣGIbgy!88I&uHJJꚙu%@G`?{nnnr\ݩcǎ?\VXpaXX,&44tLTTԻ`̘1;vT*',,|Mll,|gSTTȑ#ٱcYYYx{{3h >SyӬjڵxzz /y&BVV вeKj[o",,|z-zgLII^@( U|sD"Q;;;I~~~顛ĉ̙#:p,ZHZ1x`^uoݺX,Vq! cJ,\+Wܹ{ׯx, gϞ$$$0|p6nHzz:UJFFݺuKt:"iH|IvvBaptts(ueCVDbD"bXcqq1\~x||<}V-Zt7nU18www֯_ϬYh׮:dQT[:www|||JpMbp->k:O:Ue…Zk 1 @ik-\¡O7ݻwN8OƏ>(*IF#GE,#HDpy5gΜoOh (;mܸ1Zm +]* 8m )p+((ӯݺuq#ӣGN+{\ 8>{ݺuZƍSTTD۶mǎ=ٳqvvL!]FiӦ,[w}=zl26mʨQ0}6ݹsgJXum*%֒#Gu`2'JPf b\<ٷo_VVVOwU}MVb:DV/_ֵlRX,v W6l۶͢;v,Ǐ7 tEHJJk5O}]va0۷/-[d޽rb^xbcc9tftpOO8!oߞX<==;;;VZe@SOZUVYj4lωiwd۷ ;ʮ]xw+lAL0> y7ի]y ʕ+ڵ<ܽ{7NNN,\VիWIKKCRT*Q(( <<<@*sNP={P(h޼yme/ im>{LJJX8|k^^ʔ)Sjede`ܹ̝;777,YH\BB6lgȚ5kXf F六- B8r& rYfq/jqr'iڴ)( lmmFPT*)**BVT*IKK#>>Q={aÆ?~Hi|||X|yrr9M4\BLFII yDBB-33%KK#mpKsNVZ͞NիWzj30l0fϞ]寴 n]~]Gaa!#G]vbcNNʕ+dIAA!==HT*5 Z$˭ W^ɓ' ^/aڵq pʚTT[4hgO>( IHHGjj*%%%d2lllŅ=zJ}n:u+>Ɉ#7os%233Q*(JsvvvxzzҼysIOOgÆ 0BZR߻;v+VgZ'LaIׁ$*U&[oICBBxWs09k=DDD|rNJvvvmL dݺuqJ N&!gҥ,]0}-Z ;;;iРp-=˗*o) hZRRDEE1m4kH~~>999Q\\N3~RLT*ppp(`Y"Jiܸqc|LZ' 舣c#UxR=?WyuRxxX?3g J@7z(7sE֯_ŋ"DII ۶m#$$/o^+ji vՊ:17n~nʁHJJb[rrrسg| g۷Yfo>_X︭; t:c>LɵƍILL Ν;ǁgذaܱ=Ozz:̚5^xRöm8s /櫯y^E@#'20(+*0:xu WTTĊ+P*\nܸA~~> ٬Xt; J%gϞeڴi5ll2j(Nٳg-'JL59`X|)=\ u wa󉎎f„ ҭ[7;Ve?<Ȝ9s3f]3*Jy֬Y|@hh]뀋@Y`ZjEfVlݺK.e0 `_Ju Lj#Bxx?^޽{={6'N,'5|0a| =q#;vUh]zyvZfٳGܮ]gX bߕZ\i(bzȠ4?HII W\q˗/sEJJJ(#_nqqq4nܘH~GL*]jFXv9ڝ(J6l@Fjǂʚ5kju5kYܴi&:uĮ];v,ф;?ܦʭ[=zt?5,BCCkǂ7n\Γd֭[Ǻu6d.]DƍˉXNjDNN׿5kά\Sixk^lժ[lߟÇӨQ#_Nvv6ڵCp5\]]y:*'#6k,LMxwm*..F*J &u0̛7V\oO8`q,++ 6&& rElmm٢JLKARF{{{ Bթ,"`|]I~0`@jN&qj]G~jWWW^J˖--dIKPP ڂWcexxxsƍZWZ^gܹ4o޼\t:Ξ=[G<64hЀCѫWZ\^8tݻwj?3gp[%L'DDDн{w曻>|ĉ?kk{OxTJO6vʎ;j o~Sc !$$gqϟ',,,8OUV$''ӢE '==N21A?6{HEJw߭*/$ 3bĈ mQX~=u]CU+y\UyD``] ///رc< 233Ƞyd2ӧ999tgggE~~Y6A,ѣG߿?۷o7k\|ٜ,/56c(kep$$$0sJ7nGRψ"+WǹsVVVb222:uj98::ү_?D"R0 ڵ6mژuRzQ=&S{Z?H$bҤI^+`49q⡔ԨSz=7nfT*6m &P5b_RcRYb~~~}&MPT 2wy 6&5c)j%''sq^z%+ח'/x)"j.\+Ntt4VVV<䓀iAN4izI&|-:tMeZjRm߾ӧӭ[7^~e9b>_M۝oO0E CFZ6mڄ?yꫯeӦMu#11???" |FA^^_|'N <ǴN ׯs-RRRh4\~h^o+tqqM6xzzҸqc%CT*`0K>}DՒƮ]toO#J 1wNNNtؑSN駟n:]FTT"̼_~kx~0i gSޛ0:,R-H$dddb BCC $00Fq&;;agug}O>}ڵk0d̤I(**QF~q->u1|p~W~mػw/ , !!ʯAԢE .]$wo[z[[[A$"H+n+1Y^u(..fF?^Nu֜={{{{/_ RRR8vy;cݙ2e|aa!k֬'5jOt:'Oj=<<%z޷Dܻwow}/LCN:ERR";;;lmm),,DRQRR7]taڵ4m<'g>uVޖbpss32z޶:y:th4ˀ3`0p)N8hDo4hЀ~BH)ݻGGGAhӦ ݻwѴQ=R\\\PUT`00o<ϟWt+O*U֭#&&g}VKfc꫕BƏ|J2wM6ɓ's%~ډNsX$-~'I=ʗ_~[oŚ5k2e DѳgO,X ((ȼTg,^#GoeR)rfvM׮]{0l2Μ9sptt$55 ZE/BL& 4 111lܸFq]Ѽn2 q}OS6oތ=z}1|N>ŋQ( 6mk׮5>l޼H$4hЀ  -rjZT*YYYdddz"U%|LJ)s _ɽ.LPR*5Ftt47ozCӡT*iӦ zp_XXǏg۶m9r+999I[W^yaÆX u:9sPM"]lFQTjQtBpp0.]"-- J nnnlٲR_ tܙ6mph4_w˅?n4oޜ~LRSSGRT*)))`0XbVVV`^ooo\\\U"-Ɔv?`=(zRop>>D"Akܸ1T۵kȫܳ%$$f{%22www&MtW)p S@,S`V(1cxĉl۶Mk (((KN1r։PZСCfqVKϞ=رchZ ŋ9{yhm۶=wNNNt֍.]_gn,¶3! mmmmee5\.+bxzz*F&RD 5ߊT ŋT*-}lllصk.]2venA@.T*Yvm ¹лwot:QQQ<<;D:ѲkKOO?jZ֘&xxxT*K oP(8PSOh"W)ʣ@btIdd$ `kkŎ<4 +V`0<1\g777눈3f {k41JrN[==44Tq DnnnF Hmll˗/G,FPPDTVueg͚e 3ӧO7jeF"## 88nݺ߸q}O=ڈRl0RPt3 ?/))L-`X \0 JHd\\\,ݐs_W_{J;88;܏G?4j w9bbb1cӦMŋ,Y/i&ngLJ5kԕ\BSwTpVVVȑ#پ};?999ŸJo JNNNH$sF[ZZ>Ջ\`K@|=h G?D`mmMaa!Z2_yƎˁ믿_L{BCCROw4T*/7h:?aСjywL&)޽-Z6P- :DJJJNk/**SRR(uf+t?|D"ѸLѰgϟN{,ݫ4CqiyZnMzz:_xzzI^={y X,fժU^ɓ'Df}=rȳ!DR~Ͷ;wF&0ynD"ұ F+]taX[[gT$Bq޾!CHi47  4ݻwꫯbee?rkkyyyիWQ*tܙ˗/ӿG~ ap111L:E'O駟YfZtBBB].iҥKtСujI@@{{Jh4%''uppVdkk_V`0\JŢ]\\ H q`` 7oD".b맟~*L0\ڶm+OJJz YhѢqqqh4ի$%%QTTJ\ 'NPdZm9uf͚U[K,66-,3Y[[#Hj-f XV_.U޽;Kot...ij4mmm" DrTz9wܙ={w/ӡCjТعs':uz,Z7ˇϧH[rRRRNJQ*=z?___g /o]\t)Zh4P֬Y ȁBNg[FcI(,,lSo577Ju tVXѰ}<婁JF*zj֯_+M4PTABBg:ʍBٹs'-ZW^g%66܍52MƍEGGoرcIJJbÆ UUh_5j B4nI$cff&]v-]K ɩti4uvvw֭Th0R'Ak>OsN_< ֭#""UV1tPV^Mzz:O?%$$wy۳o>sY&LCLLLdŊ568pg}B)..J2h)J ^EEE=Ɉh z8|0:NywJJJiUzbiݼysz|ȑ#駟&**Sr)b1ƆÇ3ydk^z%fΜIMMX{ٳ'2N:UΙ@ݻݻ7bkkхBޠApttt:ԭ&D0AL*ZH4V4tP"##ql-) R=Exبpڮ];3f QQQ,Z3fн{wvA.] 3EkD"W.i)AAA9r[ҥKONذaw֭[3Fq^ 6a 1^z%z)FH$GqePSPPJ;;;ݝ `ڵ|lݺoo*%DTpqq)͂ d*J(g6vXf̘!m`f|}} 2**rqq}jT*w֨bjaoo5%%%iFLpp0o7nd={8h޼ٰP(dee6ŋҪU+BCC1b| ۶m駟MOO<) c¯jU;zh~rK2ݻw'..bz[1HhٲЬY3Μ9L&t㵩\Y 8}4RV] ۷.]}=g_DP0nܸ{ ::::pk1qD1 FV\\L^^y LvʨQСn:{/~LTJff&\p8rrrv5yzzBӦMiݺ5ɻpǻxꩧزe iӆҢE 7oN@@@Gejܼyx._ɓ'ٹs'EEE4ny?۷oo۫W/!,,`7nlwixDu8FQ4MCmt:\ץ^?G:z<6 6׾K!0<O)bf)wv=?wvCq}pW):MbϴIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Companion.png0000644000175100001770000004007614614030416016507 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyxǿLIӤBY Hd/ ( PE7D@+ (z]P(,*PN)to&M,3fnC6i By~cŊ4i/Cղ ͆K.ҥKX, ҥ |}}]YD"c rVBBQoDLN|}}_(j5$p7\n0EQرcJz>{e ""aaa(**ѳgOn˱~̝;/L&Lr( v^i&bĈNgP(Lձd$R$!44<jB4MC,A I \.Ç;@?R1flٲtWsP(?d###Iׯo4 kxwV TUU5V&#IC.$INJ ̈H$BVVvԝ׸x"BBBjua4 Byy9Zj7n@T:5qs'J.]€q-<@hZL4 ֭Gll,&OQO<0j({TD:&2Lh0QH$5p\HH x>> ׯfϞo}dzk֬AYY{=\rk׮EPP:tB10w@/D$AVijޥf6999 A#|~J S E+Z}M6aR à8h4*^rU bv0 l6`ƌ8r6mڄP;v *( FL6 yyybAhh(֬Y[m۶W?TVV: BXV릊 nm>&Jxc Pc(..fVG ڵ+JKKT`NN[o\17n-[`4i eeeضm.]S",, RFÇ.//GήkBl6yyyUs\DFF*:M6J???HQZZ(jmCuy8nu!::QQQ0Lp8 °a 1qD P*1bBCCAٳfSVV=z8bpMb3⣱Swz=vR z9z"ՋO?F^EQx0Xn>#, f̘M6b1s%%%8pL&z-h4h;wƝkbV zibqs̯j~nqp8}H#Fa߾}u0 fΜ @{(..FQQP? `0 ;;b1 @ `Z0 S/jzph4f&1Y,zLT*B(傢(͛0X,dNUUUUlX븾K^|E^!!!Qc:tB裏k|l}NEZZҐqmrP|??:+HPFD6LHJJB`` ѭ[Z0  h`ݚ.4 Ɖ'V!Bw!I۷oa|"KKK@t1둙 kŎv ( XV4bFbذaضmHH$bGJ5rF L6 ?ْx h4bΝnO?իW{ԆP(Ν;{}P(:U\\ܧ_~l?kr9&La  YV6 Я_?ر(ꂷ}H$Zرcju# )G6 u.j@MشiAx<^pp0oߎ_e|'l<3g΀ LJ b=UUU00L0 0Arr2J%JJJhy ^{^ǃ\.D"P(Rd (fFTUUz4M"ܮ] oSr!Hw^<6wL&|74hD"hFAAX}||֭[={69???z1T ͆B3SNEdd$rssfl6 d2|HR#228<֯_+WB&9=5B丌f\ׯC7&Լ&9UUUR~||`X|vI b`Ϟ=ߣCL>ZUBZZA\BW^yn:t:S5I$Vmm۶}PT|2/GqEQ8z(.])Sl6cN z)t:|عs'֮]кKAJJJ|>.\}cƌd@ @~~~s8)Z#)X¦]v(..ÇѺukh4H$:u"v˖-СC0y:Op\SVY$&_4M  @ FA.]PXXݻwC"_%~k޽{`_h_~8{,V^]Kƽs)6ZC8#, @*ZnMp8y0|p\~<{AHNNlX,~@T}uvvlj'ޓ嵎9:( %hn zT'* _}Ç#!!<)p*J TG"""­6x<\.^|El߾ ,'|B呺mp cƌqK*$IҥK`;wba! >1j4L:r4Bcǎ!%%:>sD(ණ:n\PP\˗/#** oFpp0Ν{OkWsXbٳ@!0Iϟh"Iҫ#4i\?1l6/Z*6Js\iLJ%R z#f+Ut jwdBeees\z\v *_Wy |>X,k ʤ+򪕕X,MqI,]bf)Ό bH󙌌???̚5 |>rzmp'Npz|r8̝;GfA׮]٭*:-NI A>} /`ԩt1V ۭB>2$$ǡEWF/_(..roHM ̙3B$q|WeP3g`߾}NO4 fСCRi 0 |ᇘ2eJs2qF6#'ܺ I骪*4Bi1`0PRRbX,6[,wXw& 6 cƌ p\>V2W_gjӧ.\RaW^8}4hƒ%K_b(L&0 H@H PRRaÆy#rAӭe2uf$!Iׯ_GhhClӫG'[o|>ٳgiЩS'X,hZH$T*@ k׮x٬}Z>>>vXSh~4mbD"aw.(Bvvvf;$'r[o$Iƍurssݴi) AP*|i~~~R}$6mfcT*nݺpu{ee`&v$I.jnCNN OO NT;t&XM(..NE۶mѯ_?trm6RNw8;+H׮]WTTtzgyFtWAK'WsCbĉ8w\-:1U_r%|:)))0a$I޴':Jkf팋b|K<綿Bӱ9'xepc(ž={G &,nV!55eee( \. QQQ}6F#Gয়~Baa#8|>Z-z聧~VťKp P 닞={:+r) S!l60 qkvFVWpWr\ 77j"\.+ `˖-ts #l8y$ 4 $i5Dii)Μ9*rddd֭[P(NZVl۶ /z$InZؘm4 UTTի8t0d ?Gömp\x۶mCVV틞={6=֤$TUU\Mxax1ݶm[ac X7P*vU-3XlwL$ֻu+t:L0˗/g ׮]8ƑUd2n@&zZ4RDffW'v˼y9\h媜[w)`Ν :mp(gyfm)))ٳG~w`4F`SG >Ϟ4 ֭ڵkTFA"烢(vvv28f(HHb/ZE|>;iap{uv*נv?~VqTTTGw-0XIDATJբujNWUU،/wN-B!z=z 556 r2 MHtMn9}FbcXÇ aݾU9 nȑP`#z}l. (( 3q8ѣvڷoz4;;ۛ\YYٗQw4T.V+(3Ko1P~\Ӷmۿr:u jl4DSpbp-SHYPw[=Z\ F|݆aܺu NhUUUvZ˩F|ʕ+4uCev;1~xYIZp ...N:زeKY>g=dff_Ƹq㐕lD3<>ep{b:t؜9s:tGy.\ӧO sbT\\&]taÅBRYYYٳa0d1bDmp ĉ\v-f3^uyZZrR۷oa6mv~󺗍@.CRA׳!?4Mc3gl6[hNܸq \.jŊ+0~xBÓGjX,֭[yAAADJJ FӧOӱfj"99ժU}w%cǎwOf3ի8{, 33?#V^ٳgcʕذaCk*~wjՊ|>"""믿zݶGAAA.]g{gٳguNiӦ l6._S6m^;Lyi HKKZZѣGѫW/,[ GL<K,Azz:}ѻݭ kEp\XVh**qDFF"!!V^z_~}:޴jժ2eunp|Z1۷̾cޫ}騬ept5y<}˗C& tC{9\t ϟEQXv3fz:زe ֮][> )))iHIIy]~59t}n݊e˖̙3eps̉X~W_}3tP/T&RUUUرc^H{_cǎeOm۶:Pb 8p!!!h4uFx<!((iiiXd nvZ'nܥK6 ,P^uG9998q?ߏ~PkLUVaĉko6._ܔy iVJBpp /ݡ+qN:uƌ`O>$M6}1<#Cbbb|ەf!++ O<^scƌq5O?Err2|||% T"AAAصku*PPP05jD'Oģ> xjn0͆sǣuPTT{)GT}xV$Oŋ.XDDW쀀>W_}v̙}⋣n@yy9Qnݺ0n0.E!""izbۑS"s: ...gl6oqAw 8q">3dff.כ\*ADbb"}Y W#kF4x5Ը8NrrLovW\ґg\\WE___:uz}EBBrssxp(4Մ֩ . ڵk;>}v$hƅ u)A9L۷oeeep".P(HLL8[D"CY~XaeQ.繵 > عs簏? Ul6cرc9ӧO_'|;n]866ӧF{! E+xbש vztM&wyiiiNF$0{l˅RKJJ8C" 331>'xcƌA~~>f!88FXXa!!!vYp:jl2PપjyNc$%%Xt)͛'~石K.yf.P(>q')P1b6l؀t޽Ac5(󰐓Ӡ H$BNNSj"*jٓO>fbŸ|2'`̘1k.]Q{ܣ۶mTTTj'cRTNƶ~zm-r*̦ joPSG:kNlZerm˾=+k֬YixX,jaĉNFݺuüycSTXJ`Fh]oWXUӦM?'&&;vhfP#gp6łZ@ @UUInomJri&7F9\_{X&L@|||]VS$I$I3ɨ@"++ .]P(D޽!ڭ;!I۷GYYGdB=RLU9o<0 0aH,s#2"JT*T*aۑ . 000 K/ f:P*h4h# EQHKKիWQQQ\éST;SNX=6}l2L28 # /]3g`̙ B@ `@ii)2220d$%%a„ x7 \Φ4 (,,DBBN<uֈBL&0(((۷@t޽I>Drr2N> VO>B!:HKKÇѣGw<6^Eoٻw/@$]d`իWgάVtXhF ???hZ&Mʕ+:ctt>;v /_n IlgςucLOOy2qDu.*X DRX^^f̘B'x P^^Bرcرc:v숏>)nѣs=}"((MrQSB7ĢE^Mkcǎop~ܵk6wܹ!..޳z&y E@@r9R);Ocf@vj$I 0oHEUTT`07o0.T˛|$QRRScKHHbݻ; %m׮}&[ w[0 *++]cp8n}Gr,_|Fcyߕ{ x~CP^[ݢ=Zz4}_8ekbp-SZ {JY,}@ #<Ҕ]4blق'#GDjj*fΜ}82&""|Q>CpU0000cϞ=}Q?~&Oڐb;wf d29 #:jNWop~: $I[ &M[SzJ߾}[6yA.LP(.|8y5:\R;w0̬̿oL:ntSUP^24F ZÆ o:eeeÁRBh2\|CWT]֬Y^zѣGO޲e 4zh~jj.\)S׮78.!z A/m۶|>!!!رcG 0isN>|EEE?>-[iӦ u:>s_ɁjF&hߢSNPTbX< ܹ(44_|&LEa2.]rpJ%&oݺULs:]z,_χdbA4 1vXغu+`Æ صkrB]%KC^^haXPYYVl>} Lɓ~ȡ|ro `ǏOviر#^*4iRS  =ztCU@֭\9,o4Ng0yf_ӦMsF9suo`ؿ?uw}4M(dggcpńB!&M]va^$ Μ9?LWel6۔}+$666HO^ >} ڛ^{YF8VveR['訬ɓO?Zmbw6m2d[wR+FiĉOjՏGJJJ),, ׮]N|ܸq2 Qlڴ)r]v%g2н{&Iy?4i4\~w#<<_|>3,Y/GɁ+cqvڷccc۵k׵;wr&OC)mٲjZcLr۵kW̜9ӥ! c,~Tn:vEa…s=PF=8w^eY .22y ,]K,7W_aQkZ֬Ys8{,AӦMkoȑuN多?z~ԩScN>z^r ;Ղ[ E~ЩS'6jbΝ5jHFAtt4.\#G .DII h"<Ø1csN6`>Ν;;UKtt7|=o>L<R:uŋСCddd`޼y\.ԩS łYf!22s/=Aӧ\.ڶmiӦ/ǻヒ?:tD"ipf2p޽0 #u߿ ,++{㤧c̘1xw߹l~T,b8z(:t耨UV5I3.wxXh=^zիS^^Px)HٳΝ;ci  p+///h461R0x` <ǨQRͨӂgt2~)T*1w\̘Q[~ ::о}{;@.gl ,UPTTp̙3cǎuY!(Hꎆ3gxt|tGL:v}ANNP?xARzVVV \9`dddl6߿Nz.L&5V|>7nt9rwnb…OA4&8vΝ~y\?%%CTTAAsF^~Z0 (b\.wgم صkWp4M?Ǥ@ sױ~z/V&E!11'NdHySO=[SNmt'gSرaw$ B!x<y2~xlݺ@v?LxWT;ld5 >>>  @n0c lܸp56hlXPVV۷o#99ݻ7RޤqT$&&z=ܴiztv Ҡx<Dž бXZu$ j5"""0h |DǎkZ|̽x<R)BBBгgO@vеk oT\\kb8pZncȐ!j-O5 ^GDDW Fqy԰(RL( LrX,&2`4Xsk"5p@@TbѢEHOO^wJ `0py|wh4iuŭ5֭[Ymڴqe7]KQJJJpi| c|uinpBǏGqq1h"FH(HR䰾/Zĸ]v?~,:##ClV h4Ά`Rd  :tNS"3xp7rgy BUUv;V+hg$I|~w^z70v@D0LrUUU~j߿[nVu뎦0)))M___6n{ھ4pk)M6w]_Tl~y7Z*-4?_IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Dubrovny.png0000644000175100001770000003173114614030416016372 0ustar00runnerdockerPNG  IHDRMbKGD IDATxwxW9O>^,I\b'c;ؐ@6.XX6?˲ˆ`IH()Ns/؎&[z>O;%,-˺K-is9ssb S8G0q 0Q &vi&.׿NWWWʜ.~^oB'd~,?L(N )3׽yδ[4|-&6Mo~ VuV|;%]dv%+Lᠨ ||s۳{7"gŰn?Ξ={\1vz_ RVƭoz3my(By;߉`Bn*** g N"Wu~%+( 9!0 6>?Y4&O} I=z"~>:$mxG7N/gLP@JH+d9z9㜕|g{3žxIgLN~kL\:[2f%;1C&Ń0(3ZG~dsH~|.(W4B Tv=C@Ϲ 2fΚG7g3k֬1=)$e hTpc+%'_{iG(YT4z{{5xbb_mv+=T[&AWO B#Hnj:[*dZC PF0(.4l튅@{+)Uu}Y dYT1¯kDLƲht_RᵧǏv$)x mmرӧj5)W^W] 󨫯/2Sڿ<"\{TR?G,=zr|g.-ZM7݄i=)7m4j+"R [[G Cĉg=Nܹ֎5Kj{S7'%lʧ'14)7抒 \^c}t ={fT&¶Z#(%?Y1$[&g2 ,A{gi&>MN5уT +c:3G)\zpյrFoFdU\pW},X mw֖8\5?gё̰b<%5]qKRR/l/6aڇQQ|4x 6 ܤt$ޅMQIj Am&`PQQ315ii(m~ J n Y7Jpm(Dđx2\@h;t[at;&pwORywc!5sLvwӯFgyziW{3f ̤vf}BC1 ::;Ǖ#nΞb3A.q]2-%9VNѼ|L }<%qʕhg)s .ɀ3 !i& -agp֑ʦO o\ WC؁ȘqoH6˗/?3NpǎcVpEF|&mmmǃn>ҞKF&8E~8yI?/p8̼ y7;2)9%mK Z|M:o;JYXG#:p=nOb3z |Z4^smbs9X^ws$i;\s5=;z@a24ڎ%?Г:g:ѻd+OΆp8L{\N,9\jpg'wv1 Sȏ!àsS~rB?u<vUW_G[3I?b)ꪫ ~~R ׆?581B`M֚ΝuRRm4M-[JrC)@rÍ7tL*;v1;vlH "'պv=2+?+zό'ŗ^JbWj)f֓SbpŋIsҐJع};L{ZtiOb)urqg0u ۶my(PJf$m@5z0LMï؞Tf@OC:ib~ܳԘ0J:9lD"e%ad2#jI!g>ɖh0>h5./k .)d"-%IWv=ڏoW믿"ROF}0"F(.4)۾S!&br;nMkKLܴmזlXnDv n޽ߺOhJh \w,V`)Af\' h*R[6mbڴi,XP4DžJtW 4 )4r x+ [A6n 7vp-R4N54 L!Ѕ@!04 |z~ A ~q+1gV[i$ubq;_v +>1^gBdKrla|/8q oCS (ZXj ~g&=ίN[X !^?=AAB;Zv~˲V/ZYR\UR!^W] BE"^D2@snn 7s 1GnspN1%)SL n S;ftww.dlƎ1tE:w\i>!xJ}уߜ w8;w =_=?k_'FC5گRu DTD \蓈.ۓ[%l6?5w`Yӧס43}Z9UA.Q[@>`Six~{kdSDq+?C?S;OD"w.Akw\UtA]+GPVb]ڊ˴'HIe&kYF l;r; _>s^vK/_FY(=d @U<?sFy KO' G]뀩 B4LցZO;&ٶ۩ ͡緣A^w.(شam* zI޺_AF 2 :r.wng\}VZULhKG9J ;Ai!3PD;H3ϓQ NJɶ[狟"R\dƫ.(Ȗ0˒P0 ;j qL& ectviz.k[ L]<Ed^P}%F@ DN93 =F4hԂ-n@}t$d˝`2J^ 3]!4Z9z`yrE8<6ӻ ]]]4U`Lj"gu F|Mw0k MBપk7 9L@]qgIT*Em(gY(9^j5TjJ_ 9ie +eub.,!@UuZp555$98B2x[?7;=N˭2t8Vu,X4hlld˱NZa/`~-Op ET\yR}iLzȇRxJ!B@R:~ϰ29c$(\=w b̝;-}mZX)ۡi"2oSW_ӢdϜ<_uB|Ԃ{}zˍEjp<4AUe !ಅM^zqUL*\Ҽ><77$/[6"GV.Ҁ}xޞa )q{OJ4F%3s4I§gPYEh΢aѥIΑapR̃u]4dIkf$^BeLWY7=ȝf?׍hѠp\>Pˮ`Geyϱyͳx8͂.˘T));J_C@j맳k.̙3^4POu?a{tn@˟bj!(Xt҇w~V^ ɡt(&U\MǎIS'Ng("!j: #&W[R`-5hp<,4^)G `EE&RAg~Ai,xÚJї(/hl HU4kq]TotAq6?+W} 2-2n )6x%&g9ܑ#'7H؏kLUKB=!c"[ ۫y!:N ~/0Mʢ&DA ~p}cXாqǭLaæ]jLς~g?>:R]רrk9|E6mcG #pO37 k8;vu 07k*# |i%'_'^>fuEuGE\=DB>\cߋOpϙp]0tWǫ~gj)Gs`9**J% xo`p@˖-+bPH)g̹عsgh tC8js\C1ŤsdZMYN~UJNs/F,t 5!L&Y f9#k Є .(slOqZjmTxgt߇|E?B*EI C#LT"1}z=ҳu 'K8_IL-[:{<˗/u#RB"᧿Xo}g1i MQH% MDveqO`IIΓJY̘5ѻӏ@p>O{n~Y&#ˊ0U'ض*jTԅ\u21-,O2`\f͘uwx_u>FYag򎎌bP~:{ 6l*yr!?}uaJSU0:M ?8Q,l_n7  Vp$.#X/HvU P(H dR/4C'305=TL w吝'e͛@"Xj my וd-)FoQC{ +9˥?д>8?}L(',v%-,,-glR<݇|*s9d,h;jŊ7.[, ֛IpeR(D#N<9iSYY=.XEm]yl*mrO[,$t~Jf54Q a_,],SIDATwWg9 wD#?QYU3 LZ_ZZ6.)KJKygyϝ3ռڃm MA@$ vo՘GZB_JnMc1dOә9˹* |Ey|cZC4sGJVhH]i񀪪*~oYYe,u򠏪@rF`Е>fdi:;;T&-a`>?+l v̫x2H㖏\4*++ټ|J@< o0}zE;;J)~4gv:(' c FQ+G"7 ʗN&q2YВiFd>RTW;,`=}X4jIQ f 6#ǓO<>: ܲef6nX:>,`.}5Rq5٬M"ݺ{sdm>^]M$:^~DOfl߼֮U=# "*'xqawtsD2M6gHA,X'dT, eYtuua&?DrNr gj:R*"R;FUUEyҠG!~aІ&: uF2,7xnK,8\q[43szK/k5,&1 x;o&!۟/M{w KWZ|`Сh:}G.SM1#`Ϯ~^\_A[|uP hC7YGI(//4a9\;e cdsx_l[bſLj}B(ʤkYl'c+Lef$>B(ӦM+ CeY## :օ `h؎*d46619\(ws^_CeE)%%¡0tt]0t|g D#~JKTU+} vر673i6uqm(W_HbQXc|ltc#;65 !@5  (HpғW^9L:BQc*4 sU8ըA DK98$3Qt6>ή ]Jk=϶(_R*iǰqq\iTm~-kNxm2/>aWJd^tC~2_^e+xu>^Byϟ'|'fN_8(uTs b]y^ƭk 3 \}}=Nj8i%%]΋z!|S[D")&pN1%)Sl>eM?:Lv{T7s .L'FW0 Emm\ulٰY3aV_~X4OJz cYs[n- GQ{rrTr;|ŕ(zLhnnn^3UذyǼ---zt CcCj{{;s Ҍ!~J)TJ?LHR۷!}Kp]۷IfΖmvuAh,ts,?cTd Oo??FoKK+꠷xqԽC?y|kP(ȗӼ%햅$x?w&X2Oȃc=\yy9=$W4=OvlٲJ !mj%s{h!˖-֭[J)Vp!ΰ{xG$"KhA44ޅid_am}=̘1c;$l6K& gV!=L6C{g yI]t5e|tNCM6݇cg9rOmwpٲeoٺueQ^|}oDzdS/!B&wݨJ`Al+K*AJ%=L2iѣ osssiyYGKع#xn<^z&i!ny胿o{hٲeM5AWWjFR˒(+XpLGK˩`@r('cq]t:C__w/ U8wW͑փ:,{moׯ?-_z>%>*}\6?} 5)oa\::I荻b{Rr~,+_~4ͭ2dx5(\?+p] 斱fe=]}tv'ٹ|3X|Q]v\lLa9iv+^H$u];q5Y0]+_-{_q ] h׫\Phwoݺ#&:j~3FH^+Q׭yM5ezβ 짴E ~*m7-⟾8$v%Gp7LPٻ]|JJJ|JzbAƱ1yn>II)]28֕\ i9r[FcpUhh$??#۴iSo"|25}^sJ>wE׬Zl~c_'7f ?4!Kxrq^7koں('8x_փ0spluWOzl' N[7°+෿yP|%spX=?.?uX=i4sO#$,I{SiUwPE,Y`nxpg+?~iw ;VTTǞ Ys"ʈ1ڴiSo*L Yp]MTf NAm46nblsb$ݴiw#R*Ri]^ז-s̤AMs]80tjMW*1c&~pܡdxf̢Nlo}"c#PN-v3mFegC&aۣO4QqV~‘(QWڸ^~Hݹ/͌:?' mTd26}]=V&hsN@4q O+IqkK'˞9掸vZד?m3"χtFhwa_2{ӌ5~&< ~jjjqm8 sԲ}zKN8T ҙYrRtR@:d+ gB]ME*8ٳxf:=OfdG猜eغu뮖rdap:c!"q夵}B4 0, HD~ Y[o I&* ̙7˂^9-`^,\8p8膶m9z$i|mH "NS *u0d1MO'Ɍ7suՓ`}]"#$9Ǡn XNf׵v ޳J|lÂO)OÈٶMyy%_̚QIOoT:e'mRh~A4lݛe&l7k+W83{Z> 9넥WL`4'ʙ]vYΝ;ƃeY?~ A)_sgKv{m{$rX,ӭoX1 k}q_/ٖKsr3"!}XΫVs7N30vqv<'8i, Donn- | _px dykKKCVv[8, ܱcmwК^:V:WS401 ?A?DB%/ϲy5\,}5R nkVd# PMv;_(h0魜\G-, n iBhbrCӊH;|!uB[ 2xn: ~dLIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Eyes.png0000644000175100001770000005201614614030416015466 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw|TU?Ͻ3If  " (tϲDQ~WZ~*@HdSH@hu_{ޓsfY9Y f3I?Ï̀w?t)Iv(ʠ^wGT GkΊ$IBQQ1>347 ABuu ZZZ0l0 xEQDžt~A$I$ ?yqX 4!&FMV\9r] |cOV^mzs)l6Kq?xuȲ;a ;@4G}@z]wOhx\weAȑ㨬lEe!77UT46Hx}?iGo6,þx۟}˻[| %ޑ#fC$Ix|"ITZ^^A4(FS* ð$$:݃$iX,~l6\7m܎cjZ[W\9kZg}VQQϔKK~eqnO 1fL.(@a0[C~l XZ[ @ ,ր^w$H'CUN$_QT JD{vq4-qzEQҺ&TE$4dYʌi_*|>E˲HJJѣ(~N &Fg0}/!$$I(+C1|x&~?vz$-["?? Cv+RS4DEEK'hOZ~gxjj3:,aHNnkBb46>HFx睿AU,$uvcǦh|!M3BSSs'+Gqͅ;u8߹J" rȪu<4$s_gEm6sfYzǮXpWn7Kzyl~uco?g h"l6G$(JlnHٶA%0ŀt>`?tLH#ttd|2 F\TW6߹s׻w|t=S:yꩧ Bbǎa7ҵ.]LQzZ4zut>ཱུw>uKKŋa e;-2̙33gN h#1gN>MiӆcҤ4|2 KW\ZP dY~ À `IB @HHD(E!mh:J*ºus]^oөgɲk;q؉X)fD%I^lGlC U*++|ĨXԴ\x%f؟ry<#..6Emm+HFB :?! @vvf3ł 6C=z645- YVhV 8A,"MӠ@I4R0T N|X'~U%2#B$NjZn„qA|QUUEQtd1(55uFk өvWr Hb&X.PUCJ(UUÇ/Ǐ޽`#'' ?Bpp:=pp} &̌GZ .lnȲY 6q@h4sڮiN]AIOL$¬'EIÇtjS ˏJLvȲT|G(h4ZpӠgj=qw+WnÆoIdeef89Jڐ5܄ yp~86(A{D*''aqEmmMԡٳσN'_~`^oBu &d#*݅zN8iFFkHVE$ =GB{ŅDoYVAlO,($)(-$I֮]`>4͝Zq$YQW|9(/lІ:7an}TYiEkoaSںpG)tTW㣏Dee @TX0L-6A:cEEo$E2 ðIFCAQ4˲yV4^:?"E5.6mIw8ot')d^f\dUUM ϓ(Ax:^c,vV&orO>ϪD:E;a2%`ĉ` .11~O!hQ(Te UUA rrFk.âE!&&:hoغI,WŊA[SSpŷ4`^?ʆ|_~qcUMS*͡/[ -4=bf TWн= $''Y Qfp@QpuJ[[t;}%)'sx^h6%KŵVS衚L IMTUEyyy' Nݮ]1qbxLj س0TIl6/$I!i'*h% 4͢N|U:u )a0萗8\~|r:P=3~xq$):tgBvvz-=M*8pR=i OJމ$ȧ-[c6T>ާ(hja4Ӻ$inj 8[G} ]! {?#q[Zlii%<?TvB v't: C!>^cYařpU#hll,+E+hh4ɓ3n$#[7cݪ@aF U] DZ-ԩ_m0!<4JQe4%IPhEUI$eYT(4MSIxL8uu(/NsyQQz, e0Lj`&0Φ(@T*9hy:NFweYm }dF$iGȲyvbRi nܬ|>">>}UUA5j$f͚:>\rUUU/ByF*H!dS8p\{4M>`kRy^AЃ$Q;b𸒒*peUhty 4سAvvzX4,\ZZnz+B@N$1#EQCpۦLM4C^d53=; Lo2PA@r֢6͛lZd>11z[A0tti2#o|Ǫ^zE KQTT&X,vHKBkowQYY1rdrt:t'점X Wv[b婩o2$#Gl. [fcVz`^,j UUl6{ x^ɓ#7w+TFc .B EQq,8"!\ [G\k_*Mp4b3ЬBLђ1G>)lV\ᜆ9S:YG #tcnݞ>;Zr5k֜AO,JQ7nAANй\.|(,, ώ.]zlN}Essٜ89Y7߬Gh;v>.|--eEEhii;ki{,X|y>p6ln; ;Y$Iطo?$I̸m.ԡ Ulw8wV(ŶWьjiie77n{c>;Kr\ػw_^}Ziiܸ}> B)*A\|WIwO%X,u-<=f=pgA$aϞe6IP`۶}8YfWςS.$Gh]$ZZO?wlGy_|#æMr?)nhU}x`Ѣ]f[,4(޽ eԤx e|hiiWO>\N=ֶ3n0y8l޼;ضm^(*ZSӤٱxۻl6ʅgUTT`XZ MEmguǬ6 ))aVwqs"uoMMrj"55^:>'fs`Wmm6rnb!ȀZ(,<y ,A%x/~|>fh…1s4L>)x0+*tȃ>=ܑ#GpB8(N919y|NC(6ք6'@l XlHH VS=r}8U li2in騩i[('NNϝO>d֩; ٳgcPTX EA@jb,E .凼$I,+-XV3 ..K{͟?ǏWwz 67 6[ ^ޚݶmWJ(EXX~6nƏCsGB.K6-Mz#I'Oƶ[<7q?nh@&MGcc3+8NGQ6, 6VCoP(4ŁE%KQZZ1 `̝;,KCQTpu;-l$d9fsNGyUUnFT@cCBƼQ[[^~HکeZ-(t,X/wZ,Fb 4r-f#j mN=|6n@KKKo1e;:u)E;v&M .FTcp:=^l< >l6v$VU""l3f{$I(2l6Gd_ĉ(,OC^X;ΙM3!VkZZEh 9 Xp8\/{0[봴D pN #zFEi趫b-ܾ}@ضy#nPd`_Q5SUUQ0zp嚋?%㌂$`n&S)g<QQ4ANXfy~eYY?L1رYNѲu|0y<"O)W^ [1AE#6ZǞ}4XJkk;L(jGn$I(n@qS :5 PPVV<22-Ų,aΩ`#.Y'p8Ѐn7(a~~%f.8/b^~RRU111BKK1y0 ŠSX%Z~4ML16.3,"77>bDzNYQdNQL *u:3;u:%l@Q/ߏg}$I@"[5y_Gk7p@t+ IDAT }e ZRi}E(&8 򓔔mz.G*/o$sMBBl[zzr#1OZ#hleK,177{ht>WUD +EiSHb@ux[zSX N`߾çVѠir@Nwl67~|UU3q19z]fWS|Aqqutoa ;WaٝRd @kK nh@C1H0 =9K;'ë}$ @aa)$IV+ .΄C0v E@QT)`jpzfY1S]re|xssfWYV,XExw~÷p]2 !1EFi2DUQ᰷߇X\4{2c!b&Bx\}Blv8NXQ]]_2 INV^CՀ^XtK-I aoa 8kѣrz(x'yjR<;`il|-;v?ajkfm _K.ac}-VLikCll֏M_lٲep8qɉ92UUNŞ=J}hnvYL>).o%DA}H~/XB;EWmP؟HDRRJK:}n`Brr.ݳe^|EѲъI }6$IFpÇG]m-Λ6%0 Kx/?3b#G~nvnHž}{sfNÓKYA =RRR^q64bDbbb B083z[$ɐ@{.Y8h^z%aC'-vf`I^Q=QE"lv;dE CUPd;wF]C#߳?EdYFuu-vE!ɓ q4n7DQBuu0ZDE1bDbc5g4uu>\>n` %*#ݫŚbirÕPe Bd&'@}(>^#ٰ7_w%njXLgzh9vpbÆi x+a߾ii4 @4|f%k$-_rf}}F+; g@QāH1*'|X,́8EFvz J^yCL66wM_ -)><; 'oAP`QQX|̘14n[Zq\ty5+,p8g2o l]@YP;"ݯ4s׿7o xmCvXF?g.?Pd X_QЎyc;p` p҂`IETN'@4hx4ᰣ֬YcpixZ=$a0hlQQQ"ݳOtXx"|x 2&f!bbN8W^B|ߥe GNXIObzh4ȀŞ=@,Ft8Ü9a׮صI6ILmzc(0 iy"F駞% Iyc"oϯ$A1gt:t --.x2ƈq8̙3 ǎ5AIDGsHJ`0gQ՚d*LL4&|ryiG|>Q,d%f+XS lbs쟇Џ@cpNrgϞ}>֯[qsvN$g$zmV|; ۶ntraگƦB9M.**")1Acܸq>m*ZiƌS}[` RE[ k_]~/bcOII.j$Apai[[:EQPPPg<NVd,] `޽X~=V?F玂ȸׁ!U444Y_IX3cg:*X٩) Z7t#iK hBUd EoHHÆ||ÉzS'O ֫y# L{ȋ(ΔdYFYY~;u4cC ¦*2⌸(.*<٪_$.΂7hBw䎍kgg&?ସ[o2@ -) ++Q__r[o@#YP_t^iy "[ovo:e-^b/*++mn{N5?{rJ%43&LgsI7u5,?ƨEm;yn?`@U@ꊋ =91gdަ Ǐk"ֱz ϟ_;\wB=|&7dr n0cIE%%e[qq֛XqkXsz<-h4xeF%'%Uqq1S-_haIxS4hR_P7|wopE]p‹ O?,Y7mƊo2BDD :Pa.yOOINW!{#UUt:16/ﴠT.W?GZ?~k~ 7zp@KYĿ> .AQ> ͉6{\jrһ?DNCU,{^y1K/m/򑚜#lPU<) o(@0 tO`5$pE U.c=CCFaҤ X̟? sLcd#(j`K̝?w6zHi51lKpUP/2+#cFe7bt0:U~U7} x-U ++so]awZF'*lO6~rh8 z|:PFc,ϟj72-%U+Ɯdϫ I|^/x ׭%Av-=^KS[[:WPLx:yPZ^zQnE k.:7ۀ4E0M0` 6lNeٴ/{D":Ѣ"ڊ=lPɂOrԩCpoox7gUv܂Y:V*cP8ˍL'HEpXoG yÙ)ɉ`]a6ѡ]nѩJ|$BgN=QY1(J U֠"P))Hbުc(60evFq $fN581FctpYԓe=z+RM.RVu爬cy3'Lƈ!O'}7x}F׃t8th3<-[)GGzVzqx)zo8rɸp]B.lVED4--厇;T74bM k%$%Ģɂ?e 9MUV+^GeeU'{"Ѩ,wwY>1ֈEHyEǏ_'{ H1IDCX)SFzo"t:ݥE}S&sP904Á~_U5 @{:A3^OeYBq%\1&'따AU`@Sd̊`{__ twF'HEIE=E2deZkAT0|#߮ln#77%kkk{煗^6GqkoKfm] XX!ͳ%O[Ȃ41* SxP 5?ŧ,) ig=ƿo*ze"Y_߆aۓ-5K$M\s9uH]߻ .Xro{ *`hYxC. "A3ͭ>!%ۍںp5t:G$*+[ >;U^SpR?}zٟ=oؠ( I@y#F>7](,8TpGJ`tnwv#:J8b$p CZ]vɡhhZ0 硪D8&/I \g7=)a/LѧmEu BE?G30⫐T3gcB9|܍8S4ZZZPЄowDE *̹x]~RUUU>|xxe@QT0q@ (O,+xhmuj@z7~9ĸOd-$6$XRRR0yT,\+7%?d)k?5W,ohFfj1#qi%7$nГ( A~ 7@Fn%(JPU^'NTb\dd I /8 6UQ!]4F# q/P[Soۉ~Ɉi l߾ 55` ~ 8q,Al g6l n8Сr̝մ`>CsOdNzJEb/2䓏QXXdZXbxyi ϯxwq((()sX#X%&Y\+ &`R~>\u˽yݐEX=@¡( 0n\t:mxV[I`92 Cd2"--AA q닅3$ǥ# }6UUݮ#6CV$IB}Ejjj`ii EKs (BcC= UPUm2*E_w'yHKx\ty8zV 4`!'' <\<9qXjkA A@nn]N?Z;y^CEcw[p13j8iD Tɏ>/F2jG#J`!>&;, INI(jG<#h4 9)&8x^dggCoXee%\.X6৖0< \MM 0,}x7~H&%&_b=(IS3,;[tp{SLƬa˖-X,lݺn $`cǎЁ鴁sۍ9s!>>p^|hwlF|b L>5 8tؠ匀:222̞ym.$vwn^y1r2㲺lXs *NlWmϋ{ W_uP 9nٳoYՀ: "99~YKS$6 =!;{d2KΜ:֨O0k7i.9/x 7oiiٳ(EtUI(ju\ ϚT|>`ݺo!E/d Pހ~h ,(IDATBc .6(|6ԯa`4a4-ؽ fM;c'MJ>DHS BHQԤX.ܨqy9=<-alQwI{yqϥN#"pp܌{BQJ<*4oј6y<Jr{ʁvPd(UUxkci Yc1̵ψz \ P`EW?uuEȲ v,"!"4/I҆>m?n,Xt O?EMu gW\q0HQY1ۅ8Fl6=zVσa#>>cƎNÉ'PTTӧDci1z8Fss3 nFPf0m8ƶS&x{٪6_oM!_rXo|} L Wc ]=U(dC>ڎ*%d Y]%%<9lԼv%'N/0[Wޑh8x( ]uCNҿ78Ɔ˗jiC@s9Xrйc'N-Ǧ[{d.JK}nn.na޵۳¢+#$$YCtT1m ^{3 }k"C-kU%؇}OG~aQJ~aQҥKR9λڋ&1xb{z.@MOO*(g{U^ QO-0grC;e&i}aLhw&wv[D5Ū7gKйC;X31~J8Qa}1zHWiLTg7//VAn]j\D؂ t "ϺZ nr4kg#YTѡUs~29s|M6 Gg%!P(x,)1DT&U_sƦhQ|kSG ԂPh@ڋi[":+C VgD#'@1,g9t5(0% jT0[yu:;>cg@H-^&w5l822Y0˙vAxy7pko0aaXlITddFϋ8iCC6oJpqA* ?omnoRA,dR v`[+QZVQQ`X_Tm ,JKateoX<@-+LJrt : 8Cj#O\r>޼tB08eWRbq̐L86:$(胠/MJjZb+|XP̎Θ:v?A^o֛! Fqq1D[yxsj|e; Ej MC9l۞>ѽ \v-D}F>+--EB|| !^-[ وEk?EsAӔwC1ЗmML^_<@>X&8U U g5\c #V,)ĨR}'%A8I ;d1 ^&8!Ʉ(ph.X$D''Xn^AґaRJ4ݸc ??WP  ƍq30e(4sEkTJ_!2˲G}(1%H7aGsJh_9TA=V8:F1zhS i};X,U: ZC(T@|B"dĴ6,BR@BSX/LQ<; /.X}փJ zìM7xej%ռ}M [,yvk6\0]q>6(A(Xxe<8Ֆwp>?sWkB/5z#Gmx}b'j DWY\\nsZCuI/Bp!'{ݍ0u[1e:~g/hvϟ5"z~ Q\\}cAQX ,DF`޲`CA.oxs׿ۖQ+~e3.+(qp0dRQDB T6ј2j >ߖi1TZ(m0ST4եFg[U"9 ꍛXcl޾` ?N?H;4k&g792=vBӈPjj{Th2:voUF}isícR:ŵJM¡K+'4,yXmBr}a p|(cg, z'vsbү'eň>*Ypcb!߭3 " 4WBo0 /?V+v{'4 h*ȹz$E\ڽLsP7h4WYmm E%JPiZU_{r*ZܣE|mFTM "M,Pc^AЬysO RФIu:LF\vhJ B.\TtW X-V$$%<5-[>Px>璹RaL8F<ߴixLs\_ZaھLQFMQ -q_FӨzT(b6mq lݺ>(,GM€ݻwUXue0g1ahDK| y$"!?5v..+7d2j1{-"٭c/j>HUKUlNJ$4(B <[QWXDNNƏVZ! chpO~G{hݺu+ܗ&s{GGGuM/x`+kVkW?hO;Oօ* HNEk/%p<*SC8}+,0 ׹ >@: ހ+**BjjXBc]Q^V,X(r,d ZwԦIj^.\-;Rf3JUʐDBBAشu;{6}84V5!zeee( & H$<u8XP J*-V+0q F EEEj<ϞTo0 {a8},h-5PΉJns'f{3ȳHh}/ܕHin=` T RVZC!r6m" ǐ=Hus̘(صkڵ{*&aaaR<wU=B7B{)}Bҳs/3TGãn)006<Z? j5R @D 4u R4 d{Xfsvs cgkYa n޿ ]5&Dv6*e9RYiTk#{qh^2 hڬ9:t$}C#BP" *\pRZ,7p{7ϹӼUUUeCH=UGc4J^Z\ bIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Fantasy.png0000644000175100001770000005311614614030416016170 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw|չ>LM]b˶q16 !IHMf1`HHȽ!/$$ \ʒ{>}~JڕVx?;9{=o9!|>8O4|>H*| 1>F8.TU$AbrOzD$ciip_9hڋd&Lr u@kkO+ +8a 555T9% JAU246X>u:}tjӍ>SgAS4)7EuFNuDABXL9mI)wEQH $I(t‰ֶ  <$t}p4_;ﺷ/?{S;jHB(`(]Ah`h^ Ctc`6j#8r K+IՋȒgrZAOr >%@@UuAEQ08fMol29}Q Κ `lklwY.lO<{޹itUz=S Hx!K*hfERxog9`h,"knj"9p4EIQ4T׶xE#NV6`eIVhi +W{V]~&&bFA9Eb2!jd@ay`r'' *كl\fhCǫ~x\N ҍǠ'<,G$sӦ/ֵV43κ{h߲?%s~]mX<X9wUpDLv5Yϲ @/%7\u!tIUAPU N`23p.mԪolGSKXdz|b6"cs8$A$DIEGgmAhAQ]Q)*2.XO3P-f͛J,Eƶ}&1\%Ϸgܝ: 0 ITUcSb3 (iy,0BuдPmiP$ "AS1IqSBTC$'?̚U nK[TEoVֶ0KM՚I:Mw pQ[&ԩ @VT,$eʬ3pf׬]GI*Lq.阊[c,3LS}>SQ裾]}Էc͗٭w5]~{^1CUUgy%2T0 4q+t]Gs[NT4Y{UR~I808,?GkcddhC X $@4]t$IBt MT5u cRPO$A.ݲe˜{7i>o%>/xͨo5$F<.=Fo[mpd$snD"F^N:TEC$pCYV:(F3pAcrӕ ѨEU+4MGT"Iq?I` h$% M-f# f IU ~&^suh|խ}W,m6<]s,*edepDltF﯆p$Ξ>i@ E$*@UuMde1o~ cBvfV/ }!h248nc`YzT% νG@Q4hwL:Nti>5E/d9"?;6Ly䑡hIRU]iќaey}GgrXxc'/`F}זx}Kj{kL/̈ CNHT@yu=`dY$1QtvMs{$@WOG~AmC36~Ac.H M)Y F0C% cGx$:P[Eѕ3[%BUu,EB_#2>h0Mƈ I4E`ӈ~ePYbYx ~ӟZj[A@%@Glْ^n‚g(MPDZ0|: EPiGI?Xeg`Z^(p;G)/ &|4F`P@M}'AM!0\=ki(&LH~ǝonX#9i~[h8^^k33^ '₎~Ae6'؉f/AY NlAU{ <%3eC>S1"Nxp Y݊P$#Ý  2HL흽~*cߡ:D#J³cl6,3$j3ܸ᪋qոvj\nV-=Z%~fg  /g\32وpT@G͛  z/S?\ kzzC$MQ )'͛7/תY#<ӑ 0 Z.X\ &{qCJ inI"'CQK004͢ h-JzEuD!xs'NT6exݽsbDT"i7Ix5$C=}qp SmYA`n0;(E8Q?-XY$,U mdBK/ES|  NqYґr(,ˀψE".p1l ؔx CS#!G$*؋eHCn0_͝5o(Ot]or-a+guצuQAb:fADyY ( Hx$I`AT*y 9) !I2'F# st}"&ݯ(TscIs3rس ;kp!'Í  (( At)mFM>w H+/YN2i8\ZcwgxT4*,E@cKuVTIFL"zQU3CUuLyr`XȊ:8 GO2p[ In:L(i.uPӕL䇳pЁ֎n|n‘[t'/s}o{YfբF^PX@EU 2f(]6mM}S d4`9صxihdg#iD +j,!>>u vJ$c5I$ F# }8kT*11n?A ŘlHp|nfPS½· )Li$B'Vsye+(} E]w]sBίEX0{~1ض ͝p9 A#с*8QQ!Jj()B0$PV0Hz5e %%>G!tXPMɪa踄U,<; VO<׷TF(F AQ-`XE6|>e"2y\yr·Idu!7ۃUfcJ"(AΊ6ȊB7#(;APmN'!5:zڻ{PhTB0(BY 3%iF>N ̂E߫o<}CAu\N0sL73h4 vųgCCSZb%jZ#xJP4 *4_DVi7Ӻe1 ~=]EH cbLMh)p8mm"naH~OD,6 3-[6N jq(qݥ @K[?.p6?E$*AUtwA$]̜%H?p,4 L^Y46t ȂPʰ!V_EX03]g$QAlVs,"c43T)"Xl@uu/&v @KLl2^# [ cQ  d5[̜f20c,&tIyFTD$*#"=͊n!'ہ#G;0'ơH[<,_T0oYLK!*LbX&V?d낦(46̚LFa7_N Hˢ?As[iV4PP}FN d4 7˃ DI[ E@Q4:EjLB% XpXuF.-ihACS{\TU{uT`* it]$Yٹh 4EBc Ò`1q2ɏZjg{!*NM)B(rȰѨHDȎkIEs%MTC hՁÞ|DN,b1<ϳ Ț$@Su[OyI@ihO#nahb4U &i\U4Fz3p&VҸ{|>ߝ$IAu^"3iVA 24-NPNo-..~oe`Y̚ Q\DLCLҴX!_jc]HI/>iTՃe>+O q|Y?>)l޼y3Ǐvty} G/kc7E󚦣W/Vh_qnem~M}}]wmn'%[8AQaƈDh^aR,?(5-]`e#'US^z;/{:iIi E}>ߞP$_0;f4-&V7}%KO,ˤ,ϲ fvi G EIwdIsc$ ɈW#J~p,~cUc^UUpx@P8v}<%S@$*d-PUMǶ] G4M#+# +#&J26yY^,]0 MC 'PUۂ_۝kω[Yeٙ.h#IB4J ֤UD[k3¡F2r1cLP'L< Go#k/\ Go~m gV]=ŬiySo5De=H̪mhg;3<ΛW.c4MџGKwoxG|[Oޤ$\sS^~-׮#߂o\1lTߟ<"Qo@$AvF("o킦4Ec CIO~D߾pX2bQ츳O`NCs/%t4ɲ|cKˇzhT ڊG̯], FAF/Y{vI8+:PS_z[WԎ'j1d:*MQxcD"B(L2.p7}eu7%2rĔ} PSuBϽ{p.dB%(@sv1ULO3_Jt#/.Z iqNE>t-(ƿݼV3 &׋nT5d])v.x+V]I ؙA_Ixp!/ۃs1-? }ꎠӏ3QU׈l ńPXm<7O<7A:ErXF<#A'M\2J IQ h,V7o~܂}\kiiƞ?6.] $@($)nadӑf IQ46_˛]rNUE[gOMׁ>\5m&07x#;˅ڎXV$iW46TZQk$Ij%J  IDATIVf N_.* A$@Ύ`ZaAzYЉtIRjc&\KK >ܵO1ȒE KQȒ?cD(R,$/{O/\{YfeYA$*UL0haih <-(:s-#''x?ooJ!L<sΣ1Ti ,rX=jlWsr?)'c&ă[~RS:tbɂh Uq$22A@c#x`(`kP)( vFcS\Vs, UU'Uթ:tݗD EѨhs C# {ywI[G53 t(CYē+))AIIIk|EW)cXYJHt}H'*DQÝfAu}#2)$A Q`b&1 DhΟKrH,zFNH8$IdvFEick{ߗw AP >1.1H]Ӡ4M6s7fhX-&tvX %NxMҰ `97B_$m#4aBsk*kc"}CӸp޼, -~{4G|rYekQ]c )-Z`dtr1toss3̞ ]Wi*tME\Lg4(0@pDk{a7dMXC4*'YRxF28m6^%˛Ϝ~>d]W_\TqO<~sٰi}7vچPdawVEˤ WYQ k/iR d}#;#hJm;K$3Z:F,~v.xG}=wv;QEÃH՗I}> d1:Rid}}}gqp* Κ64EEu=! H(ܤˆ@|=e6>ox0λ7=_Yۺ:=y*p]STo~Lp~48 W|71~=A̟.dr,CYqUN: >OBsw޽OeM+[),$wHht{1hw|Y r2!K5 n'6\8pYhxgalfV<ٳ`B'j:dI6+;eEOu˫dlbNH PHIDJ>`bʍ׌lȧXp:.[:;?"i݊-Cv@-l^/B! K/~a#FzJ >09x>zH0$͆t"R5.ׇm|kX0{&xwPU*CSر@h Ո.tʛpzrKωV""tD !KDYe- rs`2$A4Er> ص̫kzlOQqC tSp`֭x77 !M[E ,Y@48,M2ܿK-:c@-`2rY p; )F ـ<7TU`hQ>/ 5y(-oNv Y 78):1k/ٙ^R3R<ʐx@ծY~$g1( bߑ2,=M}q4Mb5Azyu{k u۠ē2[IC (Jޘ g2P[W3H9:8g;qsW?VTgሀHTA{W)ceu("C'1-/thiCu}EϱPc@!ipKK&Aӓ'*3B!LWFiY>` 81r$np9AQ8*4BӆeYF$jt !$j'=He$YV}UML#'Ã, `ttyiPd @cª @Q "Ad2/dl8|ΊaRÏ 'm.,r"E]/#0.+!""HyI&-8.F 8nj|a40RWY#09Xͦ$Ix-ujl޼y,Z B't]yn +@$ME(Сq$//7nqq>4 c| ~c}RmO Րeg݇Y3=nf<>5L>qa"[ ?[*AQx3oAҵ,odN|0đÇAQU AcSVZ<1n+:::y,f9E#3r2<¡2#ox%۾yYifa|nBgX̂ lۺV,J44`nI9_¸  Gw|t ~ǿ`ϐ߹W]Oo5˄h#7=USH@FU՘9۶ EQ8Qz 7]sv]בlI &9Jo_znظ$-)*PW\rs%ه@bj6mvK,GiKO,cw񇧞D7 omݎ:AĒ&?%zGߝr3Ft=!{$v~^4OܝsʅPu:&;ݗX,_؀A~?DNݯ}o|>4 Y/߈Ύ610d,Ϗ+W+`9^w?>lY- )x70Uk/H5HTZ,{\5nAϻүhAܢ):e񢱱^7.^"VvBS V/_wF/!v܁j̙qw.But/xG G(*"յQ A:L̇6軞̏KrHx^f(Dm߳7UU=e@4ؿ{WQut',Q9HhDpc"\}Mnw W@QUVUN^c [MsZ&>zTUXqQ|([\%WUņ5Ğå8Q^/_ϗ,n$'Qzb,5pnnvs|m_߈7͆U g_^i"3TchinU.Jg[t ׮]ǞzZ qyhkhf2HbhV+36NK $ < R.v&{|bosgF_F5e:HR(;><8€XPRJu@]6v㬀a ҍ!݊;@O2:_2 xNɬ34dujhd5?ϳ4KNQANN0XP[S:N4oE&oloG+ ^ٶ\B yܿnsi8ЅC8ʼn9v@dVvM;`h Oe࢕EX,3\0I/u}VnUQU$UcKzCt*g`1r=]&`yK彣i8 T/6o‘cعg?;bQ19;58r#lF4#턉 '5g2$IFTݏt(T 0M<6 n;\N3XǎxHVetõ $J0A){4M>rWn[u8$\0w6>ryO2W (Zꠡ"y0-׋~X&|~Pd@e5mhau1;{c1p`(=}gt]?]Q[ fP4h9 M( l&)΀ȎkNN'~57 _.z$ [~=55K\4gdVa}gopN{w b4Wm0$(($KTں]e7ʪ!KQ(R$Ź]ﯾή^8lحfXf,&XFX-FXL%KNw G-~:( #ZN_"';]ݽu연h:h@018זfc VI,Z:@1k5;3 @na⽱"c¥9ɒ鎏H?Ӎ==}H;&ut٭W,,~+hp$0a4t=HQt`@ I WMl6Gkq%]p;Pd›fFSkv3 fIڐ:?Gbk/;9ۈ6Р ˗,UW\$Չ?EB ۻ{ߑm]ݷ@{g/aE/Yb&c̒eڍ5)KǣsfMKpI/z!TԷ/ g'4eAs{/ںɟx5FE %%I8s·:|\kvs_f`b>V4o۵綎'8mfߞar#n``RX?223ᾃ#6iXhk[p+I!x]$l60B8x3fNXUu- UHtt#$$I'_u]")b]I?e{i$|tc#,=#އHSddx'ϾbÅzq k*!il>}"ʆ2\UmIܙFSm]==ŏcdk“|WWXxXӕ1h@ MKk8VUK +]uYbs^ܰ87N g%0h' EJ&X()Kµڍ8 N^9>J`…xᕷ9Ba4uäې n #=3n{]8xw硤kؾ_W/xUS9q9pj  $I\|ܻ)ltPЌnU5k/<)"1$8@nfPEWE ApX%!0qHPXDV.LbHؿq["N^UU@Ljuƒ Vw=ʐƊKA18p'a 3an4dy=U lDOHjLge58x21WxM-}(h44qԛ}?KTikO.At<33Ӌ>t357V3UU1{ZVu& =g@'`8 E$-~C2΀7 pyYCBT{ ޸s6=s.JJ_^zH5 -lA{['T xvcP:ȝy0?6"a,DE=hM2h 4EhPw"(*8r i4cq47nXN%Vir4 M}ᨒx1h:zqlXj4e2 HFDPAG ޞhEyU=0"u A0$ "GDDQ &ږ`|oa\d97pH w-oz*躎_z&<A34TYƵW^׷P^^}f']ǒꢅY`G+m rv4 d t#=mp̦EEKmݵ[_ƚ44,Ww5rM5 L@222a`2Y`22(;EAA!>̙7}at]GEEU,PbV I!J2I@3>!LOnUSap`rhW$5I ̸K[w]c@ (5];jHT I)ECeZQ5*]4YՎQKV (V ~-ue=A(..Fqq1X"7%ϗ>eŔTUUQZz>蚆t%%'N Fx<`+8ޡ]%QXT<왵CW_Wr ,Fb4.5CS%bWD!1ÕrwV-4&wo \^wֆ榟$,=s鮯$qm[Gӧv9pӧ%BSs#㏂$tAf#bh "Eދc5ʡ_O?uLp4E!F0:> BW`3R00:N6b8!GJۏД7^9.o5) cRfO(j۝7MW/8Zm6bvL(Ed8Ztw}&$4 Cahx3)}] h ^D3ʄW8߻ap, hۓʊj\vz3Ջp8gǒ5V|+lIDATy{?s=4춖ʚ׾u()ȖyWQAִ]{4M`5>\.J"kX4o>W6eh\v&oX,_ U[֊@0`XܴxPN_0 QjJ0!#???\CIÁY>fqWnn&%}GN 1pcoi <ŧR=d4|-w!Зov;=>gfgG6l^Gx7"bV[[ZV?WVQQ+T**X"HB nfٙ9gYvO|f3lgs~;{v8cH^VI  @$"KHa11a`LDSbbZƍ_͞w#sbBŞM$ 1⟾yySn"2Nh X@Qg sH4wTO7HBX2ЪՠJB4Qѷ.]`k~ۻ( ̙m=tJ۬Vճ^jJp:nJiI`8 "zlk Zh59 ]N6 à ~p3 :-x/lPkT&Io=cF! 1D$ᰀP${,⒌'L>oW=RlݺcFb@ӤڞA)ȵKnJib/P(UJh{ރ 5I.n lוUD#iu>(E/;!&U()ce#c"nDaQQo96kQ1,P{i`fϰlH^ʶ %Z@%=a77NLʿ(e|7/|.Q_]^#Bc@S!htz9/ Œ*9bQv`85|>/ya֡%EyOl0H vx~~$8lYU(EtvE]] mC{ L~ك6wƍ5̠P V FAKk3?:IQ^r t|zŪw3`J)T\\"H!R>P 9?)p 7}f|b%W_ӫHS+IKSqnıñhehhbkOq} MlIP}]m?uuU_ xցCaԈC\mq#JZzg{LJXAAzwPwuܣ+RLPnZWΟy؛LY_2L˳h 6^wD)qڷ/-(:$AUy`A2FB>naÇc_VfNU^ bzEvUn(E.,3>l12Bܾ ;:m-N+^[6y8ߑ= 7(#oᚬDL]%rR,bk#'1?~R e1~(XxqCx꡻PR&96Mf܈#ɦ-uu-{nhX4}{pϗecL_lAKw~Pd7VL9ty޽ bd+>y$KvARad,ǟnzinA\]5{WLP;vBS3m8E GaPGP؂6wI̼@OaT\:-<`a'_W3/;oDnIЩYN )neКrsLGbѿlsfNU /l[ZKD=\JuL'k#xK $!!.UjU8&欄?pc3ĸÅS2MQb:tcܨ"L?k^[ [g(`޴q3iTZXLh% Xß|'}>~]gL*HyiMS~6 9ۆ)*ǔ?<lD% %?Acsk.R{ weSNS2dYzWGw7U`|ŤEVg[G8N< +$RBCU%{QApGR N`0CGQЄttEinCK[gJVC'(,*O7cN `(iD*Mǜhd7;1.l@tY-])Oo"3P64ׁWq04U"z HOjj7,)xI]4fMB (okx̅x\<ǁWqԈEhTH Q@ pdPZ0 >~y}/o##MS}m}] e (JWI,p*\+iZ, d*C?g{EAx_eXX4^$$1DI҄0굜ŜAp Z 8 ’QFgw uMn}AdQΆQ,=. !RR D(@B? N[>f݃cݘ0sgMGJlklH@C n4:=YPR~k:<Jc #Q`Di sa't/FLJ}#L D1׏fg\D#ayY3F$f5"*wWeh,&UզVu8.Y3̸(B$PX q0J;K蔀ZyXn-V<,F=dI]{sU@Q(6kcx&@$*˪: r0fh>F̆{;I x|w_~ 8&2h2·奘V1w?ޱ s`6fq Ad 5[oQI:$2<:[1mrzxbB?eIbXT&amni/q !wހ9+ Kg3a`ajꎢ(w0BqɅF/gKo~3A,|BQ̀BmΖY"ŋ~mx!dq`02AeZ5rig5ນ#ٍo`µi.'7Vl xyP tjd)񣇠^@!F-fIਫ ytj:ȱDdpC80b46b‘ 4<m() My`/ڛo\G=.N@IYJ/]H=[C!E\;}^R|ހX,^H?9zh<֣ә EIL2&m\#\ zN8/ɦy}dc8XY: XqQF\a@Q`208]1R,CiI3M*~kq)Z3DD~ڀ3 2gرfY)x^$> J O8%e4pu̝x pثF&WGr&jka6akת I@dحEήg~0``_.Q&1HTFEImrGghy'NzɨQT8L&Q@Lj,B,0)*<.Xyu8xs")X VNhe(Usl8Q1iX\s2tX|ݿ<bo!%vIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Fantasy_alt.png0000644000175100001770000005365414614030416017037 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw|\յ6"Fز-16`0ؐPӓK !)!}{@> $BB3`ܫ,ɖnjHrQk>|gCQu1 =g)'z{? E=u`X+.= ƁW)yӖg08E("4hzbrFk8IV5ǀcVp'xw!Z4z0u4lĄDC3;iI84dE`H8S4l AS4(MӸrae -a"DEp ;mGyhHuucPuCM`&0`Y,sAT Y,lVnLvtUbotBh\t>U ,ArK䀗@M HX@Q@]C/ i6+t D0VQ|psDgȞ `qoM}󃯿Þǻ{S7?nzF% I ^|mTErY,p;)o.L ,Âc9d]RS;iCu04@Uu3VpU3GYiPT0:%$Ҙ4\ ؖyLYU#]c(a@ 09|=?mw5G@`l* @y4Պ /+,VE>## 2vN; $/](.ȁks ;Xǎt xϳ'Ӡѻ{krK+E?j}G|̓>׾jo <Xλ׬oa4&E(Br1Q W_MQypU+A0MxFNKy]aZ M&&c8BQYFsK|g~A,"}ʒz徲jpfd,݈|fnݺߌt/MSnV-Or 6jNBUL9ziI8UDQ^Nʇi~ja$u À(4A%)B%aX\'I>λHUK(rOt],Α&ٓ9e(&OEx\80Mcj P54;EYiI8Eĵ+bruo|Lp.N\ MC83l(ζaDbc >c׭[wa{0G ?ҿ7M usDj HY<,lk,LDcKU4a8=ViI8ELZaXD *i>yE(PEh E0LB0]L _xR4?Gj?>OO=Co8%T6[qe{m'Xrg[ZZNAu4AQ>!F,.eCL8E[`&LPU i) srd( B%"pL"$?O|Fq A}G(: 6L[ 86M7'B_È*idKLarHL4+p,4?OյMB$YLdOozcS7޼6A>QK:(ec İmOiB-9 h*2}aDa(,Z0 6M!p<!hm"+C80q:d4=8BܽfaM%n`yc$,s:z#>pO.J@jp< n' ϛWFBAn戄P@Ey8&>S״DsC5ބ1&ó D0C2? s,hm;ͣi*aP Un`Κˏ4o4kzkl !iV.0wXDa1ܰu- a&8Q[YV!+ah<ځpDfR `:c4& +ZrBq44ʖ!褆U>;0f;H~-?=jI1&1l$6+-k|B&ݴy9ؾ"Q4E #gEe T@q=1$i6pOGEZgAK[^w 2+D(f`>R1DZA?͝Q|ږA x=ʲ/,r|hi47v׷$gaC]Czb XA`i0 @Qu̙L30(!v+h?TU?/% WM L4pC`2HO{8- gmEPi~]4Me10#MM[1Mb ;BsIIK7|(Q0mrdE ?0TrL<U >3*x}#9 úuc2SqpdE$#W :UXn݂@ `Kjy}h>Dcױ냦xgey0э+ٓv4 VsT՘sY_ߺt{7|fxEqQD1vQJ,7i6m`Yn}-Ϳv\tǹ=R~KmX`F$&I0aV@ 0}%iOǎXXl\:!!#E@FmVַ*V ^{ YQVw8TT6d#JW#. TZ5 Alز h0 322btL<,C}¹𧿭C<&-ݢe4gFa E0̕4Ms&#/|H-mXqX,{CoCVTXDHj:zٍi'T@ 44БZPihϪkeks23<7/Y8B~dјEL|G wiSX\>B(E6aÖ$-0 W`jo6hJuV-0Jw7۝[KB=bAU ϛv^_=ëNdb4M6hmSr]b)^mC+Ɯ҉ƛ!aEd @`JWwUG,{ NG? ʦ Vs^Ϭ(슽d9zư~᫝( kpGcKLD8G0F̛Q< GpGi3|UuU׌Jrf=Ҵ;--yNÝȊAbž!J1\r݀Mא2A 4M_ 8L)E) R J.r4Mmklvc{pH {8&W'iLVa1sj!`'lI,it~^V \A2H*1Y^[yc}sF'pHuuu8x vډ[n"n}CQ5|}oAZm@[i,mVd={qa7j'!SrQQU섫fȂ  }c;`\V&5ӟqĸ( ^ev ׬-uU8\Q>۟%W pOo()M!I[d4T744)5t$hL 'gCQBeG)ʎccIB!d}$\pʀKX\ASKTj(l>7Gj{\ g{_R, 9 Aqm_=$N+O5t}e;M#Y\XBd|8\ fJY'.9n߹O$b(NoNI9Q%u6$fMM35IW8ۗm6ˈeƬ <.'.ZhR4x4x4x4]LBRD,&aߡ~BMRKżYPa 30 5 a Ø @ Ț&4sK 8u 2h;"iNH,vWk[@ pGM8UU^nnقm >޺Hd=v!BV~Y\ a*۲o5t eYx<"2| ÂtDǏXLkׁwDS  &ܙhƾWm}GWe T-͋IʕCID"xkX2<̳xgP47VP$ YiWAؼ߿߿p LhHP8v+ǫhz4j " ncYA@araFvh<jiȱ"znxu9s IDATv\Bq;\'.Z<oޟCи`.ou9RPbvvKBnv~̑d9i9|@<GGOU;3}PU,M5tv :m:&8YG_Q0VӁRHVQa.7 y G[q[h77K;@{W6l IVy[)̞+IYAf'T8vgs[ϥ-maeaN;,2vv@i]M5|>0M`ilޱGZU̙;wu:mnU! 4;j둟C3A,aJTjSK&᭍;7?7nZ6̛4g'wRXE~s\VV7|yρZq^OG34NNM֮w~İ\~<\l1iu@Y(rl?%V5nE{gp 5i0 `(.wPB\`ۄ6BcQTiBCsLp:mر\z,0<I=e_ <-4%rg8%YgLؔP hIR{tǮ$̸" 3g_^zM--5@|mg1٩ h0V_pBsvYph8G<4(`8͸$a動.B3+mV(UM_0$MN f1L@SMȲ U5B 804y&$YD84qADWwѺ44`ƤLp ˯9M@0 LACS$YK G.ވ#iRmVrBmjMf`9 =u"ϰba&tc!E}uV:$7I0Yj0DYi)^/+S"ǠH[E3 P/^]W&d۾[_u:t!ACGQU _eGAQ V`Ww]QHvƟڲoz3H@R>oX4IG0~)rю:%454wCI jΌ|7'?x6i>'4MFR1vC2R{'Xći7Eawi%kk24U)p8Ru~ohC`*D,'n4E4&!Oh*MqE~{ض0&g"3 {PUM3!2ҝ(O 0;$oi0fTumJ$"Q#PZ֘h94x!pع(=#wҳԑ[Oo ]öҀ+DP(CVaZe ^,;DU5%y010 ]=@Q^6DN#?/ j@V4f|WTW@M'6hM.C'(\\jh ⒚pGiz=8i8)ɲG; bKzz =3L,]/ ooܚɘ ]`h}+fo " #?DcZx8la撢(:>֭[ܷ"/۷ !&1M( ` La(C}?V{'EWD8ےN80\|2*@$_x}X%g On=Umᆦ%,"^[{Z lYe8>}|\s8}b%X-yXTyaԄ|xrQX,u^^{KHCY達Ϫ*/^ʁ-kkj-iMGUUթ G3..rTSK=ye^{FY%S>҄8eAh3g^xg&·aۻ4M`Y(=xvN5Lmmΰl+f#ẫ/x5YH4-nVgpلGp +n!-=4ğ O {p8lgeʕ+QЄYKmQzVcԄE~k7ᅧ9[pK}߼j.у;^otC(j%O; Coo/*0uJ16.4MPtغe LDAA2s0}tj`ZOgFq8{Ÿau !5?K/`/[z^Ξe7|aO(#fڜ_8]ޗUU "X TUņSy4F?Kp` ͆^ݳ,8p-=s[ΚpY~{ҽd#2ac#q~IS?'%~L (x~=_XO~iu,[/bGPP ʍhokAww7JK%21:zX7tch7ફW,HODK.[-EBooncxnɬ̗h>nѢY~.YC7iQKn\DY)x;e󇨪B0 I.7;{^PR%އh!$vbׯ[\Ools{p->];w&r 0 xǮd83)`EKǑ=Q1px[2mdH47و?j/#\p妩Ihmiy3=,>ڵ WrD#[_[=H(TYB( ڳ7b pRcf]4M]1mr pjn2\Ҳ/~|gi,~e-KMK!u Vò%ҫoAU?.EWw)Yu'ILn*ixݍ՗ k^4 kW< @cX?Y߿}oJ$R̫cExkVcR*/W[҃#] %Ydf4gv^n MÚۿMUdx6z~WS̬?͉ M֖6P0f[1Iz,_@u456+/KjS 9Y>^_4O 8p/+p\ULk 7\)Te44Ïv@̝^`J+/Jygj$&f3ˏtw4 =W {Xx/k)NAqIFem+w<_gYE0Jp`lhkj,tMa:i644㲝gdmw&aehΟW4C G,V+{) [_5H\ ̙2ܑ`L5juޙ~ 0 1IiEPD"$sp9l`Y 19wx^@KkfN4(~:rDEPQۊ/BLh !;`y@8LfB+P,`R~Ƹ Ù=MGkLӅ&|yfLܢ=`݊׵tɚ㛜6ul[Jr&lnV 0ŠHQYu@(vFHÒӰP^݄+V\Cﵧ`"`VL:f~ƀah\0N 4Eit8߳uIoh\(űxi/=r'qQI{otIYM+dYB(ga:]dv9HVSn ~mχl)0Gy߆'}wƪf 4t# Jf;qg˖;hX,Ǎ?_v;t46X>5xe)%3<W~+%еD-Bjo-{8XE!#X?!(4/>D:c +oמÍ!~XD8cnj@7&&愔mnmĺ/?Uׯf8=~6pO(~2;o^|E,[˖B(6t"5D (ҳ *4:xE{gn . ==1%1HuKe6]׆ 6 0Ǿ(EQ{oEM}jމz\{uG,% \6a\Ʊ6F@4H5}N. qblٹU Hs;zجbҕ4:pE }}z׀V;>G!jD<+ .wKΟ k;kndxFd8(:{iw="Y[Nt1|AQ48sOEQ pp XC$*7 3݋3 JR-yر,Â%}HX6IE(ttE +InTi7o\7SZQ0<89sh\h1x ںq ׮ G048Dz(1ICGo m*W6rss''l},wiP rmЍNG'_~TN)9Hc77wxp v-:f`&KZDj2U_y x/re>L*σQ_Q #*(*91@`@VTL5睿d4]t@մadsaZӿHHڭ}4yq"\Wo۲?|chyqX~t="˚:0L#LtvtcYXvX-"4UMSx(,,®{Q؄/^4QQQG_ ]MUM,QLxъ1O &F" A H8Kq kKr},FEx<{n_+`@h0icwX\,Ek4Mt4*maizB1K K.\ oJUoCS aBPRR2]}EnatENJ!ag90 Q`ᰉ5=Ẏ и\S0mr^g_9'gw'EQ* URL"xtWQ!+s굝*\x-9\b\io@ñ1!. ~y5yeرZQfQ/e446!'i6 5JT@Wh<4:B, 2220ЃlA( -݇N DښjWna!ǣ@M]- ]/:8ʀ,E ]yxUUUW%N: I@ @6A6a`\FGg\Fm=rgIIDAT:#.\QwpTEő%!,Y;Iw:^]˭Gw$8>x|_}ݩ{;u֯g:|M]xGv _? p[|Jxs8{6wM]p]}*<ؿ3O)RKԀֺ/=!;(B/!"PQY߁QrzBhgRcPk6k]AD@Gz0cf|jufZһ]np`4"7'CCyYR)0cHdgXaou!XIV-Z!cWE[?fтZvB9-x*ji騪89 q%fKGK[~+/pQk]¾, pwf]w=sl_6!ekQUHuN'łp2aCajU` 6_\K9(nC8gD$F}!M rsspp%dYDٌA~NV;ŗLz s6*=8@wt}Q)km> _鴚_VWk-BWJpʵL&BWq.Lh Ə @x|Vg$M I@D ZFAD>.FbM;ehA@-\>;η}93ѺuO@dkzjʍsfLbZ, +*Ti 8wauGfPJ%A#;0Iuu#bd5,2,:Ue2N_p hi--yq֮YWl @ݥ7ڛ7R48~(YԱMKFE| @2;w|< Z}k(ĹUj՘SRMNcTy:ROA(`Ut zCRAWQ@ D|?vTiN8g8B6oބaըbڮAH0ZMQzO쓷',%QnFa^:L,v@_2Ww/Hk6`2ߩw<-1~%5}WnONt#uPtw6U޴Vҭ}̈+ZgkºMۃ D'iO$MEee%pVBȈBx.]Bb Žs/j=Kݵs'.{)C ȰYp8_SAx^{^FAʷ?Ȩ$(4M&*@b e4l2Ums#\>5.!5 ΛiѪ\2WYTVs JYHrLb6 Nlؼ_[|=b9!<_B  D JFjj96 '::qoD$ ۊ`*-"ŎwEU 'Ê FIx PX {S2M=īf.j=b̩7\yiXE'%ZH0@d9a5NUZ?9޸q~EU :$Up\P+YXLPؘDZd7ng1uR$AEgP(D{ >7pAW9YiJAB^,lyxa&ܲh(9gCW3 3dԏɰB&::}$Hk,&ۖV7t\!` RF|>x}>x~|8A&R Χ).At::yQ)@3כa4P_Il(ۋ«f$-BSS jhzSjE.LthksMƹ<{yrSscvUMе+ *{1֊SV~KNRvDLM*٨ڹYm:t[ם.B2 ë|2!$ @bb9!%D|fxU=fiƂex66A N>*1U ,C9.蓌u|$DkNN[CSӣW1k$E~^_jUjI8I%$~-hdh^wIzdYᵷVa(:"Ȫ:a,y`Q>}С]#'@"aȡXbim՛  s&Cb|B(X_܄Wnow'_>se$.I̮&$C鿿Ur1$CaxGmEH6%!'ǵ8k~Ej1᎙&8id<߯AD(\H3FGPR*~T]ANXw˟"2$Q ^*5 hmkGq mqZR:fVEfVf#]2 &`h %A8¸rb< ޾d b;j6;h><2Ayu5x XFV  @U49 ߮7n#њ0gxDB0Dr/GM02X`( y;eV\2Ͱ%k  w5`+ =ۍ[rH$ 8\=aG{LDQJ*^ J&Ŭe$D"g{YƠx?EpXF,~aN0O"cYִ4^Tc`Z-p8cE\$P0dȠ( Iz2R͠Y%UN48m31RkTVOKZI^fL$- ahJP4@i,$-Z%:CuEzN)L:JΒ_$ɈJp$—T_C'-6J`|WcGb)H@{;[`1bo(֎:j\: ICSx9[<[ Cgfg`P^SFJO -vcH+ECR4 ErR5ju,K0J`y H* x6E脀3͘v ])/{&aۮ=]ZY@ >r [1cA9X\6 Hda>ډߎVԩ?|YPE= Tq9;ݚ|yxox1蛙 Y2AcK;in~rE.o(466C M 9xިɈEt|$}* Bk['J*cpŢߜs;iaWI) 1Iז-CT@9?X*dȒ`@bTkpށzOٶS @(  ž?!{p;577㢱}NJwޏL6: nڻL"um~qŔ=:}WP(V{l6lݲ j%huEH#u2@@S '& ÖCv6rp=U_oQO0tdovBFWGàh etLy Bd`䉘tјb4؋x?*^Ekb'Op:IdE= XVQ}*V",G2: ǝ~C\gou;:}L@tZ5z-ZjQ$  "f,p[5ޣ?O'kkEm#fh&>uE 7rlSŘ$?Y}9q b"PT{_=HN{GѼo+P.9p 2׉m۽@ݴ{Y4۞U3H%bdtΨwO{?Qg^G}@C %KT-XF=iba3 {!&fE99p\zyUT6`?lzKWaPĿĉlsְݛ穬ϕymF04 'z{U!pye^r PTU()D"Q6le]6vߵ[0=rxZkbRl~řyn>KjnsƂq^p68~va q{ :؍eżr{0Ȋ= JsI&9-FQz:oFGPPVyv/h9aپi'D2?Gzt J^K5M1@pKXDpǟET̽~eJ v YE(.2MҔ憙7=:8E^ ^Ã^E,GZi+HR8t]vv;w[$-E"',l@A)0ba\x Y; )%'l?0FLWqDuq2M*84 QOS'vv%4%]/0s 9\mh4JNNedF-ښs QR Wr0g\.dm͌F,X9ܹs5kۡ8@gia\u;ɚHayjf(8`3Qxʪhl~#mX>[8Pxx&4Ț `ۆ0P CL`wGX$LW2sjl:% NpmsAlڈ(X XyjXh{vƴ,N/TU;S }E,Dl??ƺ_ʕ+6_Z.+`bMt md`b#b)v+ &p1`S-g$8˲ظq#z4b#A:dLMU dg 1y؀,n:u,[ܜrٳL KNݻWvC9'GBsXb%3fC8ՉnJύCSp2NM!7CͬTWW 2%?*>ߓ&SWXRKK*2""CA%%ȼJ沍xY'(&ozdDQ|AZ>}`Z2B/p?F_0M̯-Ʀ/4CݔXPWe1%mXX1c}&3HU+! 6k.ρץ!IAi뤬Џalz12 7^Ӳms`Y/}3 _ vX͵T3WyyEVIB%ID$YD$dYDɑPdHb/&EifCjY ۩d"ڶ-,pL2 2YŸ+\+ekpIFҩ$6>9ɲ5FΪY&䄚 Bp^JC!F&i#M"e0H#"-2ON1|e< s)." w񚽇DLtDTU&DFb膉( Ȣf~5_I4iAF{?+tri3f&J׈H*oԓF+PC2p*NQۆD2M[( pr(y$#6dr<*ܬYc=A4L"NN% kg0}t^ںk `2f?H$ػw/mmFNy`i[ ϗC>&&MF"#"! $PYBA0׋,K3TY&`59nq뛬5gLTzPI"(˕H">[>/ }#\|SzgldфMpd L~<.\..t5+V\®]زe3.E""^s-U#+ zC46$x=N\J4ٹe͇r5ޔvE Qc@@1!$TEBDQ M UD*^FÆ{ 9xt/N?ءCWϦu+)'8 fa~-RRH&R",.Fh=r%<*֢jmBO3S/,,Y cvvnk1m˳t2yIԄKqkir< esBeR8#&TH EDZq'U@$>NwOp[˲mHS0-,F7LA@|$¡.Tv 1 I @'>E:sP=at[3;1 њ%c[8t#gXR^̚X4`T\yӱ"m$wtQ8=;;<|a6>1M%[csF{g3X)E  2LpeW`6}}}222m85*( ^FQ`$Q`ӡidBGhg, (""yyL ߯3p;$" "DJ~Ñ8b8t$:*R' Wex.D3np))lAcWw761 n͆C!o,Dz; xTyxqn*pey-Dj#X\t%u3;NU֘V(i y3*&N 0 %zz|~ukSȵ}5f7]C܇ x*$-i7pP#5"=#:Z$3pd&P #1JhQ H"CeKʌ:_ş[Nw;ޜI\{E"AJKel32Ԣ̽E%1{- $Al,4K{HWnd"ש "vx\4E$Q"M3p|]ʜ 0mDw0sJ.3Kٳo _AJ r1\lq\e٤uU00p*((`t`9t7>G^nANc3 c?8cJQ ; bYȈُ9fєA爃W#qD08] |Hv<R0XL-$A  wT ضSS4n׭s:.XjCƘ+*/5~"(YoTx%dZz,ԎSdA'd > {Od4h7abѢŌ$Zh 4IG.q0HSTFHŠlSO.]ѡ01-boc(nkaþ̙t^|*IȒ؈17QDXBq?6Q<Ρ~dYIJaW9G= 4Rƒ>E۲H:FlQ^'BswMi[?˜^oͷ}}㔕)'yIu!¤ ˅"Kd7&"؛e٨s Ʀ7@BڶÀ0Qq3-[:^FhAscddb4fcڌB*Ip`['0 i; ! d\&K|C,/˖,;h倓Y4P-g<f7I )S'_,4m4 'Z8A?7;: I`YGfH좇Vd\9s2jƓWef:]C:^"eP萀 ;@7@WDb"mS3'(z "OwǬ]")=%ĝqiK!VSSåVk$R=o-TΐɪUhR&2A`rvX$IYh7y^zq{d,䵎!r N'u)rj &Ny o8.“'1l44y&xhq#PLz$QlKȎŔ}41<ω X=ޥ醁^$qbY,]zGC)R9bYOp9m£hCLx"7d<&])X&=tRlʮqN<&C1׉ |gc$FX1$p4jvz DQ$10, ۶L) вY$F<`^g?;fU0~\\0m.~A蔫#|C7b)0@ / 9 6CPH"3ɸ @, 6x;eh[xa4_7^po>z{/Ä;Y|`«O8.`Un " aG+Uϧľ]AT%T1lMFb)Z@L%?MM@KxQ|,4e`l+BC,jѸyD""@= ll8`X&"TlJ \~H#1ے̪ϒ-9p,Dh:O#iJ@&s}"g,6TG%r#Z6n<",ZA&aώA\95Fc5* Sp)ۚ:m)/X9NUWUSUYE__m-i02|f/`Jd//Xb{q#L*A1]Usp4*ճHF1r~Ι8;\дӘAs^i8ta&L $3{ળzm|x^_޾"20O?}H͛_zY{'wxm6qc--< 8pdR^_,=cOa':,p`W0Z斖غulf=XY,=!K碡޽ɼ.Ju!A۶:&:G9z(#Ib$r(9N\ϞÉjxǏG"L3H296|@B$ƍ_nv3"~w,HFUDӴ,~d;'s UU4#G$m `L&(NT*Egg'ibFGGu͚z˰lBI.w*mw;5Uz|?<2_Lq[ظqh.l  U'hG3Z",ѣ焟m 2h"ŔSSe^5y%(n4A>0ܭ7OHRwNIuu5k\BNN hˢ7pm"Q=E(D%BNS{>5t͞zzY Li?/_}'{wR] iӜѷ% Qp< A+^NS'=%"ɐ'ePv="66r aͨ`Am~BdTh{}3ޟ3ҲoFP_mgW R#46‡?Դ@^4' ̬BYY|xz+Pd$SJԘR@S{Et@bd>:$Anxvh J S\젩ɢv6~(w$a͊<Ϲ~ZUg;Y 47qFM(PG?tʽ"4URed2}1ePl(/ ; uLDZ(ƽ\]ka}:UÓa&0 ,˦v:A+.^H&={ CenO{C-Z=]-uWsOFsvFs U,}(W("~G%\p* (HL8.2aƀP g։ڞ2GR^B,gӶ TuUr8|M922O? ^ >} ppc]k 3ܳk{84eۡ Y)~R.,"IY & 0;zz+j|R B47o*_ىeYtv mQ_GUr">eYlٷ?#U߮z](// Q<zvD0GKiI&>m@VBqA{IƺcȺw2ccJeR@zN+l_ZoOb&\??ôtSR+d2*d9O=xdxI^dw'pɻk\$uq\l$EzajlNREU!d2/P$釅 U^'(GV| V.cZhM8J64s\p#>v,5.*9Og߾8_B7XH*Y v322B^0HyhTDURr

Udy"]Z|5k*ddɢ<ۥN;5^10/m"|onI~RY8u5LAL+9aU$+*)*cS Iy99|(} Q[okm[`[rsd$z;5Zwۈ˟)--}׋'3f<$/0P z4n\xH\Onhv|u!Wqjuh00<:S.4Y^lė{=T(w UxE//Q ۶m5?l)ط[yYdKw ??\3}`#-xرmi""sY1HX2M0pk2NdIc\SQ&#W$4O)=.ܑ![^@xHD$;n8Kj&r:iJ[?MGio`Eyݬr~#{ࢵT;1߶%l$HVtlNX gDDNk>̺u~N#iMXbW%emhƆZ>kig_b%2, coDd*E E<˦޲lr %A DE$I(b* (mٳmqIƿuz)W[rWZ8z[?u;ۨtW$IVP&gy:T;;tt>6<, SKr 9-#k si{9/ˬjn mvhƹ?_TUT 9us~9-*dV%-McqC#1 lۦvÙ%R֮WzBdB1Wdk'r4dj~Ϗ s\PǾEvD9ɦfY<'8Mj&mQ^ZNbilb@a`IFs8/?Cgoa֝,[m[8 ~֪(2H&<)rF";EJ\8lGvMXzv≉KП!zuϱMf[>yU~AJ!JŁԬ;i@lcH8$6 `gWe8µsݵWcI =ɣ{~}7vnD$x a&Wȴ2-D.Y2UmIOZnŋyI1P\,apId7x=J|,+'u"d~YdL.IWD4m`ǺcDT?dU"5LAHiq[0CC!oúBN^SYl.=_ <&v3iO-2]7QFP4c?IQ]DݒS;y$X=cvMo &<̉gfH(D,F X#; ԔqQNm (҄KN)T*r`IL=iÁ*?]I7qܫP=?H9Յms G0D1+qQYQ@uenı/4`8 l߱A S:>u[g V,.Q cϠSZBQAlS~D*au+V/W X+Ub1o0/--nGz.vke?`m; MД纎&cHUKg +2xP(thV<넌" F*cD9nFlwlKQUfE@E rnNXway܆izZJ x ajo֟_ >XA<﫪:w|ȤS bxx+cSh=jSG?+s;vŬ󪩫*$FefM-)x*k&VOOM5( mh('M7ĝwމOoFbX8Y5ɔpE3*|oL[,sOΓh"T[ ,\Ԯ;K@4JJ)-+=<E+VtRM$P>5ri;T8_]} <'߲eۛ{88;g%.8/͛km͖?x/M?oEp'X3{eed?=aiܹg|b{UU_fǎ MgF]mS [u\s˖g={v_V@ SliG9x[3,-^ MnR!v~UU"E9k%'`0۝q=Yi&:Dؑ- Ep:g?_$ePUxiQ>bsV=dqƂb6m}ܻ9_>|:>璼׿5cBMk,Ӵ\bL Ib g˖]DQ::z q@3W I:'cR_H_wJӿ,δƯt8>Kcƶ-$Qys`0v (reaJ0XkdTaQ7"JmV^FNNIJB8AM?~}̝;Ap8Ǔ-UvW#PQq Ny:6n)EEg4{Yҟ}}Wj -k֮]=|L%l)2^$?$݈ ̞EDQF3MaLb`SWw$ݮ7>ȢE,Y"ػ>Vm0;,oo/|ӁmA:b4:Jx$BZ[av h2wѢ669ZO:}! rE39pk̛9,_~'6}]WDNN!$I']]8rOq-cFyGU}̤^5{Ƕ T쮊k[W^?`C""E@zK =$GR]uzef{=sy|6l9s:1Z\'N^y.?4Ik]BAu[;{:2E!!.~REtmV+AQc_G }Ŷms} @O5j8ܼ z&O(Xٷ]v5[?s]|01C @f\%1sfK,dYg}S]Y|5$A^}W0jHW}Iy&6X7\ESOPH4r "CсRd'%OhQd >_}CDQqtD1@Qчu]/K%VBCᥗĘcNHْsDE)-?J).1!9gtNh-!-!G|1QGtq42(b "T xh!*ՏJÙ2e,۷?(zO`]g?*;^c+78g5`͌f:Fs$79:Ζp*+!/ɾ};~B^}zfdeaQi^pG> ݫը0LPj$HHZH=Ϧ%6@a;Ac{?"e+J JHՁ"v:)mS.9&LKNJx屇U/HOOuA7_{% 1GȦtI z.pQnIP0h kqqqju6pSS"чkid`0ZKf"b$.LrЪUB\SviY h/k4A蝝"DG}w?K.uӨUd(cΠb$dQdOGfgGƙL'X?h4.6o~ A8ա먩Ann4ee%ddxxS( 맬A ^/$'{8p`Ϗ^ϒKNX Vؘ_z1}SG9~}~?!ޑA &$:xZ}Xbmurr2< }N蕧鷺z/.g BRROZK*`Z)(XUWuY8dDQג( 3pF#e oq>5v'p>xRb#6G9ombh"uda1^LZ,'X?L0ňʏUϖs9Ą6s4d=I8bV|ɓmtBu@Xʆ<^_} Xvzx=|ǕBx؜耠+H[Z8rް.9a2}8P}8NB-YH5EvvrUNNpIjIQIHZPbtr]ݷxN} H?Nj&MkAE4p. 2kZXLM~~T[nlG%e.DFp57cU_d6SoⱠqk*Z,Îw/pȈ7^}cGDl6yw_yc[uk7}">YFT2p&^L$U*U$I't*$+Vp73El^K)CfTD ^k7a~i_ = ^>}zs@j5 :5*QKE$$m$$Dh:jسcc%Lw!=T8™+p߷7/"\dx=θ(C:Ǫ[ F]@OШTH7x$ IDATU;pFR%PAJ40}kWaHbۖ͜{gt_+ٴYO?@фVE4*BC4 d.~1Rg{IJbK f~q$xg7*EVt}ɗjZ/rltTDHv{m#FE jp*( VItFV$>nڰ;wCYy9Ez<_M}6m &W -'~==nK0 TIԦpyH")%Lߗ;?] 8CrUW/ z|}ƭk뛚$ց@FR4<3SEP vE!))]C,BExByi)*[y/shu:yFF( >݁F!(ɄZ,DGG1x~i_ $I"w>"8l"*+ 'чh#mDrk8'>=:6c q=:b"k5?އ寿%?6)a\Y7Q}_\8Jb="" &ZED7W#󹞱1>=?MNG@!gO|j5^JOơ(8d۷cp8>a ͭ||ػg ***ZEwD\JV7ji>JI%5UJ&d _Yg""ڟ.w~eC˲,DvW$abI˯hnlnaC-_(.) BwMU@QX^θL 1"*:?Nl6eYFTTgQfӞ,\]AO o =xkg'/3ljJc !YFtQӋYCrB :MW_nJSvN٤1 JbŽ =q6n/58m *9}MM#0 3XkܪQtt#gG d^,&b;B\v$,D^{K2]WR\\B-I&zNDl"(YYVN™HDb2@xPϏc=8TeVVGE| $jYs+Ѱ V}BS1$Lq9/goѺJ}^_3m¯^ӁŨǤa(Z:1XG_WSʄ165t:~o\ل(tRbMi(hq:hm%zl4,W@@hs9ժJ bcc9tii?u;W-yoҧ׉}rvVqعso:NqQF&#% 6Ћ|m=L5R݆gT[殈baLq unoR3R{g|9"˄ ٸ=P\["o]rW0NPQ~_}!`5J A 22|T@PPZgR۝Ji_:;;0v?>z2mH?4&H-hDASr@O8Z]W$d2qWvqdNku㵗_(qA; 0 Ї}_w>YƧ֑=yG77BGqBSVs6&L@^NFfJ x23ukװVOjWqZL49*< A٦b<@3v"FZ:&> ##pZ٩q"s| u1Qv3e#-C{y_5,Yh&&*H %#FKr=boA31ќCcϢ,#:Lj \T:/o#2 bam{W +;GC mg/9h/wP àQyS(*]L㊁7qQkuQi/NpPv !"BPCFAA>S/KL4cG!Gf\QvvZɎ e9ꫯp4ƏKq,\G'ܴq" '=BC|ǟزm^5^% ݖL;^ܸCMNNr *SJ1`0Q8$/a_\O+;_`urFrE ZDSS#lQ'L⚼}!o|{ܤaQ5p K~?%%IocЈ[o7x((rW䜿0~^+!.!d\L$'O>TGm۶F8mE0PwU m G ;?60 y>;oiYt[=7]J]C3vWhG5Ed%Z9z*s{\`r%;aƤOdI"^Ϲ.  $9ZLdgs]?z y=1V/.cZY^lQmݺk~vgш A_,~!UTd1~۳_I)I}뷡(` g?TGs9{K E)E{ F=_,%4̺z:ʊUѪ\ڌD[p]^kxڡRHNN+HKGZ2&6+WRFPV 477<r=#6> ] qpgo*&6}oEF缩xꂿ3oTU|b&;.^ss&/3nLL$2/+7]K$*k0ioHH M$\<\Bf^}eu:rFR<"ٲmFfmn')xoڈ^k¤ ]׏ݔ iﰱ`?$!IA?ȊCΦ HNˢW:nJinnfDedY Njz&YYYۇ𹱨Jp9 K¢kMDZoyΡmZaf**YZn5j)o+$1> 0Ǹa9,%59ȘD۞g̻A * ~R\\~L(/+rkѽQ9r~OCVDZj(2}zgl/CrGkhd1~dA]]-:N$IL9e7v4o<^w?f|9̞q.5jp*)uǘؾiaN;#5 Ae5o~^}Z[ MJfq+:]d!mDKpMcN{?h.grxgw?AMGMa>BLF:::Zصs'^-ys:KnaLR-vj61p`.k{JX]& V3`@99Ss?f L<>O>Lz9afzfeӋxBZqe35 }eHJǨv9lTnw RYG8Qf}i..8 HBO Da#ˑ~Tב3?szʂEԗF.=s{^Ikh4~$ylYʕ+O~k]dZONDbJL=܋`wQc'1aHt:5s!8\^oΣΡjeF& #L3#TeOQJJJ@(t I* OE!Zqzh,*fNk6vm2dEf^>)ƣ@%+-p#MJ tvv|_gf ZQ&uR[SÃOQq$HuBD!Rb21zQ[[G}7r(IQhUAFuM Vݷ똻qa!7U3-k ¨{_`~QxN?b9I:5W< pۼAD=9{gLi%[pbyݷ#=1gFeW:V^{nZA(_!CэLc?S;3 jb٦Vh;FV ex"MylJBS(hZr#A$XQKHƏ:,AJʰwѤXVON$37:{]]1*PEss U DF\C.w ok=-A(snC&^SHʤ{EtPXx O=kc (?BAsb1ǟUB\ wGV?<&LrhA$ѩF|;E_ϧ{ zA}o]"ȲŠo7s,wbpႨ((FF܊ksR`fզ=IM>Uّ.}W QThiD*+ ϧ{g@VlVg rj5z&B^".6`9n(b EסчSk$Oچ&VfH) 5lAd#d ykSK^sM }NMd%әze$&%IS8pPthDCŕ~Céocgށ䙇fifSѳAD*ۍkH=V;t}!n.5=Z*o "?u |^ݒ{"Œ6\~,,K.G Ȩ( *kjE(k+dwP4O u ͤ6S0O?;ڲvc=L]9\ff&)IoÐ8 YMaI'&nf]KEoiwboog4b,lX6x ZGj{k1 JA2vO+Vv#*1<5/;w|%a*'"oOx޻;15|1iM]FΤ޵F~,#:dv?>|_G?D Dg֡8Gq ~hՎ%bL!go!y9ҚY0 *ҪJ;(nLFa!PUUONk-oANr?l>kٴe3oy Œی%EEg/=fc$ϽܿU93&y/Z< txZhu9G EpPVn]C~WcRfkSլfVk1FEP#44䣬dM'He}8[dq|7 : QB$^s#K Kp>vm|,}e*Zfq'vv`۷|-[ŋNOg'ͤ6}N+Ljh4DwaI"%JOQ&dAƨpa O<<2p=2Q v.@xnc|Ll-_J fX\EcsG/mW)>b7˅FT|@F>l[_($quِQPЩ~.P G/ql_5W]"pu4pa2EaD""o\UaHG0( dX谷cLTsO<͈#5jFgg{1ۈogΤN7=p۔l{(sz0apݘa|"f\q>x/N]TUU כg^ɠCZ ;vTICߐ2JK?J{cьV[1Z-0vimi?fv,~8vQA,,Z}?:ش^<n׏ Z+1mXBEo "Vnv` p8^p(;qn#..7z^zQRRKÖ?1aX\$NHqSD&BQZ=[Rd[&ohƎh`̈6E {+Wko}C\ 2қYÍ̖dvnޗ2 ؾ1wtYFA>zL>XIJ?@S!L:l_#\}}=&McTE|R 24;>J*j -AZS)XѠӡ`һX3cʤ cp%m9F|(fčTTOJpƠ\f815k[s1͟T"S{/'qtvǜ>i˨nC} 6oOcN^э>$oBl>;u-~QOٵR=h<(_n|Y8*U>$$%Q/XuDGYf!]9:C:mߑ,!`QQT;@T"jY"$f 6҇6cX2}’ 7QU_Kj=q IIV-bo[V{t'E67̅n?{ty|yS?zFA(~^{g<r76?R 'Dw97䣂5風JӨjr;O'qbCw>͜f# ǻ@$Afv*_S  *DՖ2:nj%n(y(;>͘I8$&Lc(5F- F|^A WB0xP~Q&2I0h0xy>)Ɲf[U6K<җ`As%=#kcS˸O/hͺH 5 >Mv PSc($B֭{}vǙu6t8;vmO0ц t ?  Z}sf[ Ѓ,Q$">1eaC5'ݭX 0u6Ubѩ/ }X4qOڀ=qGb55'xPc Pñ6'-}x]e55gE#n <*n&1Dj >j_]îLe ͒ NB{G(}%Z\{1hM9x dC C5_ [ndZ~z3g_ld08y/-5ԔTX!`≯ߜqE=ݸ*[IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Freestaunton.png0000644000175100001770000003700014614030416017232 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy|Tǿ;3! [eQ6QE\P"Zhf7k]޶ԥPEPQ*"H !!dqL&!llsɝ{991}ta~ 0}tq i`m38Mh㛅Ä;U4~u ioz 1 -oZ N/B rr>{Ȑ;2#\P n4OH$BEERQQA$imrY3g}6+N%''{ ׶B\;mUUUg0IT\֝;9s1cp=YYYq!6o>}8l;wŒo+-xd2,dkXpy9vGWXfMKM ύO(⌼W|rF]罎Fn=}ig6kL@{_ҥL>o o>x\Ċ0 Jy˟@J!Đx|7jG/ `i-syeٲG%֯gm0];R,\֬!`RH!Թ3g}6{ܬ,㠤D8Iyy9֭E(++1QL <ᮘ:h4ի\2z4v4D8ho;ET|,%gȐ!ČJRJ0֞+@)u8 uؑP 0(彗1T.GH!f7+^|]z)S'MŠFc$RJq˸qtXjp]"(UQݻlx$B'naE" 3J$8z}e3Lk~B0GoJua\z  7?=”rZ*Tc֬Y)ӦLI̊F}b\>dBڪU8ٱSJ~s-IRkj2lsĮ=p^M'_miVe؀-4ʡ]HeJeW4T*Ȉfn):AӬVJ|駌:QvV49sg6UV.kq819K%Y,l>:;¹$Znu?Bَsv8#w\ ckBDrJ)3uQJi:v7oƅπA)WXhlqǹ9Ԅtyk=22YヒFnm8d.Uui_z7v#ov5CR~l;[1#֗BPq#oa# ++E9mS͍۶ qصkW<\j>wAެ}]ְ,K#M[C'0tyq1:{&8J鐔W3Mlڐdž͛hZcJ)C6؍?b558V<2S:+ Hz4a 1ǹJY) (%- Ӽ<]kҀ <#϶Et]M`4QB&JS1vXq#5p ZS 眔Em8xuiW[}itw@۾=1~\9b]33pGSXңF0]AN.4:YHu8ZKtGԇa|x뭷xlal׮\R*hn4^S@ 4<~nT;¥J[kUV=ٻG37QFҬYXN =&uIsxĂZ9R]MeUU0UB4ѯߛ4P(­]02hPq/Ae_|رcm5%~i-^L)A>j_utrSq]~OwehIZQZK~VBd  _P)fb!\iI Rk*wC1qAKJio*pwb Zֆ-[jB`$lJZ`6%Xp!G~(e,3j-c8Ro},ADQȩɱ:TF@4hrd ssFp{xL9W A;Y[jAKvv2]nfΝ>ٖ`5VbժU{~>H$ƊDqΊDvkǖ!Oj Cę`ڼy4[@Gz!ͱ+BR>-&f\qIu7Sg%abv; y9[76٘稏``C@AK4/N85xpmc4 K q{kՀgkhmiCv 7{L(0fv Cqs\|i"Hf-Bq{kڵulΦ8!bWZ0rM<~AKl5s&mٺunF-vdA\oȲPPv’v)Eqqv0#};wI!&~;~ڵhEBXRʿr6m} VO86oHQQݺužXd Kzy&]22߱#60neV0+MJh8 %qkM+%:f` .pў. \FF[ld(%TT0,]%s9#XUiiLۗ.؟hqm0Ns\c^Z+Yff )F TkxJ-&ܰaX lL4ϻqC;Q6TPT++Wdsĉ#RYcdIE;2{R28 劉BZU bdrH^86PZ'; Zs4 !\W뗁My ƠA8Y)28'[eu2[щo2xٳ'3,MHWZk1p@:v 79kwO9<A5rGkxIZk:C<#7%:\O| uتYI`2;|M+o. 'L~9oBUi7g'y$]r  /Iz8']R W_yMC4C9IR990 7Z5K=aK4nNSql+Ni.\`;..nWp[rٸq88Wv32xݹRE4AmmICΫh1wP`0ɮ8xҤd_&=\"?5oXVV֖f0Fe8]` m4HWHW4i&BhK;l۶iiu<3iV%ϧaPTT[5VA܌ )Y[R&W"#P#{FdSJ.`-)SP h;<ٔ۷Y!L&BnB7 bHYg(:-URvܾ+_kleel|]Ekͻ7O"4L)5&<'=uHc˖-]ծe۞n$!|l"ulhķ7o~qц ="ciY)nw~C@/J{y=ܖ-[(VL{н{w}T%אJ.ץ{ZZˀi̔u&)z}ܦܠՄ۸q#'23=E|uH[n8Zu$ɬX,Iq!7#QPPw x%9E WV.%$BuPv8i_G }kȻ}eѿl)oڿ0dzФV 6l؀!'8 eU4cI"Jך[+uXܦ/2 #Y#! hfH7?B{p&(\fySTT;v43f<& )]L`b3_aʕݛ;9lxW)++c_0E7ڮ'j8_}> H3|#]JܛozJIP Hĕ7q+E>i|\!Bxa"/mN7ꊝH}&vjYi_4. 9++)VW7(z] aVuD6hnժU8cA+vvQHv@(J `Bž?h/MH:qxJZ?4=:u[g#[H7p,X7hlhE+Z(F6pcX?htF})?夓d})ݾ%Jpx3&r+()ZҹppGqxG< `CB~t^/I6N=&|$o<M\I=f͚Ś5kPJ1d'v7,\#^O=EL`F4 XaCÒ4QRV̲.G,[ed WRRɗr҉(.{6B[^שbD@E=ío7[@ɖ-Ӈ>yy8%V]jVͶ?c01{wh FQW:D;X6H5AҿQm߾ fzs!@ y8\|&4_▢&[*M"!M6nlP~B߲.| vd@})ophCJƝv mCy:B!QHTvXHm#t羽-(8KZy_>_ i}*Z%/ѿ?ڶQն DC 7IF EvN>^MlbQ_zh}gTEB~Sb5Iy@RĤh[V%ZI!ZaIFϭںqK[:%Wc0c„[f@6{د8LدFn͚5<ܳi¾( z[ |x94A͛7ҬYTVVmrsZ] =\FZZ&?7giysBij{4 X Ӕ1v0S ֯_ϳO?̈́1c?McxNO͘jE6%a n^y`@J BǼ.4M5_EVUaÜگ^hےpyƢb){*'{Zi2-Xt);vl֛`?h~zL!3VU"RY|>(#7kU)xOb=bhN߷vW`1w>[YҥKywxq\2qg^p2nܸ}}C6m{AA` f]KK!4MB eaDv.7ŧ2+w+7.<݃{?XE ]u,R\E1os7r(ډxrnA?)%3#4!aƅoL$Kq([^ aOˑR~1`}en6:w$LDM0 ++3X3p@ӏb#QvnpUizKPVVo9gc jt ʎz/[ɀ?dƠ7<8x 0KL[W aO]*ӓѥM#7Ņv9k&s2Zh?fgE~y%[yq%2gtHN:ջY?V5 Pz`73W1\rt/e˘nvdt0 L;wۏ<5w\G6\ -~g)^ʠH^WM$i6Obp[l Л3&\M}4A۶qTnu<\gץ|7 H7( 8E "wYymzxm|N39;Mկ5ϟOZ#m6YSV,D&kq 3H Fn%[ ÐK6ʪƵPqO։r 8[ؗfrXx1VUC.O#bݮ]*1@!7= 2(_j5e  ,y-_|A0`ң#kk8ʍ'9Yi蒱zX}N;-)/Vʡƺ.~ťd0|[ÏzIBa$w8R*e(&'3I/LEE61dPO'H1+kYulktɻ_ݻ#֓mGf&/-_%n@@)2+WW^L0k:=hkv1i;$ԁND5`:t4M)rJg_v(q] -(Y۾[ᇠA!?_G>4r6>)+g8 FoEp*~ʪµ*qc{YoڜlicvvmGRlrNoJLHxMWvn-onrzZ(8}^rHYHV 5&`ժUddyP]klO]]%Dw.-7mOܶw!Dҿ+O뻤?lO2O6 lpw4Zfϱ梺  E)rz¾MxpX?{O͕o 2Bw^ I Ibc>fVf`-0U$gpɤ Lϳᢓknҫyv aNу}ly+1\zz?=)ěoM aiAFΕD킀)#ii9{̞]+?륗+u}D/Mڿ3YKܸ6nL?$H8!I^0AwPd󅎃#<|~ϛ'5펒RN}zDlO_={8QP{KIю($e}iCe+CS$DclkhћH)UL~cS$ͷmGư}vvYs;Lx\"ж*鿫ڼ* ֒{"\R R!T.RxBś-@DQ>dCZ)&m<_3lkϒGǫt#Uο؛W*ŋ/1O}Xؕ\ RWKhvߕENv+?\֠yrо%7N!%m"{ᾌ6G~~>7rˁ6 P< w`X?,M26}t}~a~Em[^-񫴴w 8/hFD"TTT.D"\>rrrrVeff9UxaV PVѸ{*03Nml\9u~'sf.UJ˝f@ PأL4ʪV}^*7ٟGaȥ-1zĉ\~]klRgqUyb;VClÅ***%!%Ͽe-wՄs]G}]vѽ[.ҹs'/Z )viňnQz~ٳUձ#nrg/۫te<P]ճjaD׬89sE999+/袎'=F1an\6؟G x UؑwE/uWĤɄ$++k7Aŋӹ ޣtbr 3{!|CMG NM vM C@$柬[tz pnGwDS\ Jy}Q +8;[ tSSSBj=H㉙r]OfK|D/P9؎^(čWDqnCN)… ψD"AFJIN83ݻ7ݓrcF8g.%^[z;=YӀi`YY >zǏo',?q֩CD^/4G,?)o"B n 9QK9P`8e)>G<2;_0mLv=V<"%bZ$S-ZB%dgh7*4H"^|EoMBUMEyy(ރ] )++C<ر{?Mt)rcjfϞbUMR7*oݖ]qoH}8_(PWlDc*nWJyu&|iA9 ӂtʔ)DQV^ƍ_7.׏qC(BE 's/Gt:!C\:Fb}Y>^kB.ݻuw1?5\8f>]1Yi(;ilVŎu8ꨁ}2h7岺qvh©\pH3'(((أJ#~zQ<<`I˲ٹBABփSCt4㬨w mj3ģhtx;oc(_Saxڅۅ߉ݙLDzkm~_xN~&UʓwI7 f!Gvar*v8;wRaK\!V=HF# IKK˂`N0h(`^|<=dZ_n6Ehi4=֬Yiw߽^@dg]W\h9&w('_4L.x69Z۾ʉǵ!T9j0g\M7Mk QilB OprHIaDZZom8.@XÈP\Z,5iJR(%a;E:O9J3(UzB+.%kapw/jyɮֻi'!1=裏ض}i@`=  tṦa+R*oMDnS1PШύ #bfUJm@EKF;1zu"jΆ9'385 mgui=rHAig<@ZZi߾Dqgxd{cr G6!)=tov: TT'Z{pjF,a%3F`i#Fl<{ԮTԼrp*LUh}>X{WB*q~~\tMl%?Z|U$j eyRMEK {p{8vء .77ի?<[b`OCuCJ"(][&9n"u֬S뺷VVU;en:Hm*.ҳ[RVwL:Pml\sʝ_iE|DEbvӵw#ڥۻA=;>XwƜ4o!Վ~wm#ޥZŽڍM[Wx&K\n|L3w RD=B(_ō[7H/ϭ1>TG8}ߠnvx <ό9eB;@(d'az_YىIf'wo(7]Ȓ4#S J~+qcpcV֨7!3=pW4bn7p̈́IӘ<6o'u>ӗVpIBb7I%[M[s=s 8jXumƔN NU*U8t]^^“ƍǨQxٌ8j'ȾE^"C: 4wTm%|n=kmeX_\M up &<\zhpp2222J\駟[.Jyj;򤱔ҸJ31Ԙ0acn>?6dUNE86O9tmH0 ahL1!pR}7O/(/bJ#]K4maʣ_2v}e~E0 àB 2.\Ŷ-l+VI!ecJ:YW(JHii)yw/P$gITG b x8v` ډ[Xڵ7FY{8i/~}NcI5 D'mqaV" gvt?ߦ*U#Fw׷=I7ݬZ4O>9uS]4KġvXnLa}B:fશ6lժUdf1bul)=MڛW]]… wA]=%%۩3zPQ+/R\G[;O~VJcYvٳ0oH)<|YW:_&=@V-ՉKW0kK)ٖO,.((Jk?a4uUi 04RB nR^ A+NIϔ= 9-s[+??@֕e-M͑OvK7J,:tg}qd*IV|oSAh rCYҿQsmO[/-e|aIpX0+jh=R2IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Fresca.png0000644000175100001770000003662614614030416015775 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw|u?3;o6)$$@5Ф((`;QÂ]lwԟpB@BIo}wG I6~|3|?d]tq`ɒ%mH(j}fۀ.XP]\x<|>wPXrַ`Ea…. j:AƺMj}(ʲ'd6[ 0 <;.BhLh4 z555_p{I|_ՊYef:ɴJX]] ~T*z}XテngӦMCll,~7f;$PH6t_el-~Rd9gH=kkk;ݰt:4(F~xFr;\(:ӧO2lݺ.wݻwfj5s0AW=;@3cXAOT*F׻ jປSTR \L&RP_uz^%xDDD/X,yzzx\}d29 """z BbX *  P[[fɄZXVDs] 'J/yihA$?STӢDAj-//TZZ7WTTd1 H`Y6^&.df|(\Nx^TWWp\Np8`۱F<nr(q]9EQj9T*bkkkzJe_g@c0FFFjP`Y`feMMM%x B!U*w^;wncU^^3gΠ . $IB.`0 >>""5"B رc0H$B޽u{_' a٠ 1d̛7 ;-,6l؀+WNgF$@ӦF$G ;I?ITM&lo,;[Tu@@ѠhPEdh4*++kZt_~BF^˲Aqq1l6[i/@TB*BTBR!  ΝNCfff-5pӦMƍQUUHl޼gϞwqIcV`6!0mڴvPYYYc0\Gpt:=a3AS4*Jd6x$jv$Aeʋ剁n˲Vp`P*֭ &&B>H$جjh ѠiP*l0{Nw;D"̙3b"??_/y˲||hĄ ^sέtrZM B Uqq n74,MY/B#Isbnf9hZ],I`ܸq6m"##& ֭[zE 1cnFtC0đ#G믿bϞ=lزe fΜ٬k/'33±cн{wd2,]Cp:xQQQ* 2C &i[DD𚚚GD\.'"##u555vH k8PZn$I 5Z*nZ\Nx<~WV[[[Кmp8Ä p]wׯB@jj*f͚#GFeeerbbbO`0ĉX~=l6  9s怦idgg刎nTupǡC;|r??A 1`N'"##ADDDnw >cYéT*dMp\ᔑ)a0D gkjjm\}pd2B!f͚|Y2dz!]CO@(bժU`Nzjvu݇= _[T\~u z[\b _R?$I^ÓO>%KH$h4PP(|~m8fX,ngϞŊ+PVVZ 0:6p ߿f} @ѷo_QQQ0 & P^^|8ϟ4Xv-j5~'̚5SsnO׿El۶ . DEE. ^ˎD$222_?m/~QO$a̘1^w;ڵk;h\80Xv-nV~`r\g (**TWW;X lmQ0jdY.[Eeee֔״ùn]wL >eL&0Xf ̙j g[=h4\t  P(dJxzei5BA1n# }.q!~H$x^(JTUUAIFF0 L&N'\.$ d2r9j5bcc1|pرSmhbTWWl6ܙ% Va0 )5p@~ùs.wob׮]QTTtɭv4MCׇ.XŲe|Cuu5vIAkHl 6b8d!>zFݻRb"?D.OK $%%PAD?锂A]]aXHlٵX, 4H A.k)*=IN#wP(Qe LF[7. gΜNhqYӧS] . 2 @ em111ct~%DEEi/*Niټ j:p,x1n88TUUa֭X( IX,HIIi6q'|[KKKK -c t:񠢢bIuuS@>?fjRN'J%ƍ>,""cǎE0DÜ]4ȑ#(((@n@$F#N>#GDԚ%4MC.#>>^ү_HB-M_W5K!r#g v؁G"66EA(B  22Ď;ڵOh_~-'iiiHNNH$T*EJJB͡iz[CT*QPPr3+t$իQYY8ŠiQQQ(..ƪUl9Z- 5,ˢ txGx!8^BQOmaG|i-P?x:"zs6ҫj;4MSȌA.QXӥzAO\={`xгgO$XRM3lC^^>^ V*"../d2.5!˛i5 w/' AJ%D"mke{I 1c ^N]Ao?ϋ&$$,A} ~? bʔ)6D" 2O?4;Wzj:P;:u΁.Kee VSc$I"&&PZZD$q7+ȑ#8}4z!~$ UTT ## >2r5Xx1.]'n,]/bD"i :N? }lx0lذ6n܈_8 rBP@$!55溁KzQUUkPQQѨI#qD"ф6*U*t:]4EEE̙3IKH\Rya22 qnpns -f,_0}taڵ8~8b#(je>}mvm8rve߿SNEdd$jE555 }>߇ H$ػw%3w=͹&aSpP(::ZV)2⭷ނ Yɜ=[L5,&?,FVVFϟlj'BjCffٱc^~e^eYIZ,'AIB7eY`ӦMX,\fq Pp4Mwx瑕Ъ*lڴ .rhGcĉ|lTy^9skkk0 &M)(#FHxK.9TVVɓ[O:fY.TEEA߾}yC1 Ns!7W"sAnBNqk à ;wnuGH|X$_}U^.U}maPPP`߻woMQQʚ~?Q X EA`nrW!JRB*pfGܹs_o߾Αd8q"-[ٳg!!D!M 2 rupTMӜ(]XG첮f ?QR,~?*++Q^^e! j |3jvBzA~~>&MY#ٛBA)nr^MHvD! ⒒2$Ip@R5D-j{<X,jnYQ`=;!M_WmBr)lqGS3@233Q]]G]]p80p HIIAyy9L&qQNfQj61qjRhZugzj#dmlIN#w(j5h0)G(.ä?W.1.(]ẸP-{W3UuqEr.(]ẸthQ3--m0˲={${. 555lP*mXԵB5܀dEÓ&M4tЫr)6 dv;v̩T*K^{5tWU_lB]@$##C-6 !˲> 3gl6ͭz꟥Rin=77Cֶ@NdXj Cgo0`Y7n\.JB0ާn?IDATfÆ 0wtÑ$nM+D" &&cǎŋ{PBq`„ mi" ރL&âEt:;]zb\Ba5v9ɓE b /Т!˲(//ݻTbҥ*fff 0 "x<|GtR?ϏVv~rEuxӦM8p`u*AСC~z|嗼 >HHHsʔ)ԁ^ǎCbb">SMdCDD׿B]$x=@ hj6;\FFƭQQQ3)XxqO"GJJ |I4 H~X&3f̴Y͛_| n2a,XjFff&:t p\|ۤ]UUݻwx&1bDwLҥK$IbڵXt)Νhs&jԨQ4i-Z\c))Zq 7tjs0o뤑$A3̸fχ\.oQPTT%]t#F Q(w}SD">qESN'jjjBW2k֬>|HV &~DGGK$"::jF+ :ߏ+//oU-Ri _.pF״uoEBBF #Ixسg|9R* &p2X:>,,Ye,Y'|ѾP!n7` I2n=:6j( SOj|[RRR0 ݻw3{OT*L5 ӳ,cǎA#j~[2 2QH[pgPŒ3ŭ0 ElvAѣGԿ1@P$I_jvly=`06lPOb> z[L{!z%`òe|?yѢE֢R\\h!!!A²lH * b$IuuuOӪ^1uTTTT4zv>8qbqB.d%r<%%V+d2(B0{AG].*aJ寽z֒X,D"fjJB||T.1CQ8p Ο?x5^~eDDDtp@vv6Ba։[SDعs'&NN'Ͳ$66ū Ʉx?|mZoٲ4=={^2֌˪MĀa?$!XÁA@QT>ǪU@B~111DXz5N8{^kŏ?z fO=jyӓe2O?t:c ϤK^L8?>|n$!xA?׋{+p ԯ m޼111 B0 \DFF6H-`lhX&q:_Scƌ-J׾>}КSԔH$-JCMM ӡhqqqh(nٰ{nl6tyyyXۺu+t:]A@ eYhZl޼ ,hSKZ/ƍwRxٲeꘘ6);r3^N\_* Æ c=˅o˃nhp͵Jqq1v;º^  @*nܹsHLLlvY?nѸWw”mmRp4 $!AQB!J%1e4 ݎ#Gb޽\.Gaa!~?n7T*NCdduۿdw`'O<7bĈQfG}nIRpK(MFmVaYOFDD|A# eeeA޽1j(FH$P7|ٳg! >`A(++Ö-[`2MB%%%*Ԑ/T*msv9Po.]5#Y<f͚#Fƶx~QQ{̝;=z@n,/$I(.gD"+KБ"ImkI$IÇtF&qm@Ϟ=A$̯a駟`4ObΜ91c7p //Frr2+t89rm]'ƙf?[b]. SRRZo \|BP(j1{l ~`ZyH <4Mh4b۶m! 0 4 B!Fuu5U `0PYYvKÅ f8~ [)0 , P?ԳgO$&&" MILLl1zᦛnBuuu~.77J_ $[o2D Jw[{ r.(]%ֻj}nK,aj.(]S$R~6tE8Çp@ 0r(Nq8eW_󡴴-bbȑ$I B`cvvɦ=,z^.:p6 l)zcULlFʔGow㎥ "wܸqv7^B;x[o}["OOOŌv w$$$@P !!R@riii|p:8{, ԙ6)JU܆3f .|/--mmnnn]FFFEQ} nŤID>t$2|> <Z(--m ={d2ȑ#LeP(ڙ&^qv8$q6ځhhSO?)ƨQF#PBLaΝ;z 7$&&`0{wM+Vh<3Tz)L8?X CbѢEEMM y4wJV222ā@@c>cYt:~l6j6x]tBpmڴdHDII Z3LxrDGGG}8Hf[G ?~ڣ>*[omKKKKu;/_ iƌōρ<lڴ;q7GO?1}Yb$R4kѢEQÆ #_L?rgu~]h_nBg6QWW @X T R 4{Z*a HP(%Էo_!˲S9gѣG6mڵk ͻv*=zJPA,ksrrΎ9T*Us|>xV߿Hr-:u*_, .;n&ddd`۶mشiܪeggL0UTTn82>|@P(5i![Rt1c]TU%XXR\\ nk֭Å 3[oE^|r^y w}7`XrJ磭W3!w}7f̘uom1ydq!EDDǃo6mdP|JSNPw&A۽'XsmǎKFGGS˟߷o$IMd薖6@lRRR#;RSSuR{Wp)l۶-e绳GP̙3x[ovL~0hРbl3L&ӱf|GHIIyVa6+W"++ of=.\EP^^aÆa\@ L䠮dggoKOO_?{|:55X`nʕ:a ~󌌌FCU* jSSS{<vV_$<ꫯ`r/FoV{]M4s8ł &bʕ0`F33gDnn..]{|I#ٌ{. oF3)SǪUp7"55'Nh4MϷP(ۄEEE}06i;VO? 7n\/J)u:g)s:Nա+`Λ>}:CfK ZYsb`̙!ҥW^AUU>F>CL&!E"Əǃ t֭Z# M[gyF9fnZSL 6rX,>Fq֢Ed@r4Ր$~hp P~Ȑ!4i"Ʉ;wbԩ8p`r3b8xkX,o~W~C6Mx뭷hZÑ$g}VдP(~[A4\.n7cs:+mTb1?ݻG?hʸq0 L~a0 cǶxMii)~g$&&"** N V=z(pb -J8kf3~? Bp[ M4sH_. =N'z!7_fCs Ee3gU(n7vfM6ybÇ뺖 Jر#|=.Z٠A" 22K.ke˖axG0rHnbl6N*pwuVDP_|ݺuÇ~ȭxSoK~x<C߹&~߾}.UMɓ'[ogŧ~e˖|R\\Z-4 z=ӦMFAMM ,VWW !99 .Zg}Պʵ6eٍvS:SN54M#** qqqӧ>ѣ ˲2V pA %%yyyx饗dm*P&5x<$LJ~͆%rssLRp̙F>h~?Q\\}5557os٦E$I*JIݻ7裏⣏>jӚg(*++,~?^u9tʕ}z}All,J%j5b1<, l6JKKqITUU!!!j_|tCpɓx?o,:'N?8p`%W9cǎa2LGuu5NghSoP(|<777&MjPCn VG… FN1"@/ l|'Nj1w>3 <ME~*J娮nRP@*Bׇjӹww)l|Xbtݶm[ x<8qx ~Bwؾ}{ׯ,XonS򎫙a8vXb11nܸ98y䣧NJ6p;ǬV+v;R) T*F#ĬAݳgϡβĉn n:dggcҤI:t(n7֮]ۦȚv9իJR$5c %pZػw/B!Ns[F -[n:9s I07nZ-AC9?o˲W_~;C V^Qi=Gbb"bbbjCq^fطo򮈲MpI$ ^R B\Ϙ1Smph4|,ȑ#V#dZ?~\.B@ T*D0fZ;#G,555geeΞvBaPd2d2 kaa2`P J:~gSYYg3(,b2 >=~\D"HVM|;}L^ bQ!gYMU(䄝oRbt=dDoGի5vUCBaĎ;,.C\=.9+UbMf'IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Gioco.png0000644000175100001770000003331214614030416015617 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyx[y98+ p@%R$[["Y8NriS7i&m&m_['qݴ8lj-˖%Y"%Q;wA$vm~H H<sy1x1gwC{1uֹBh#Wې jvi\ȲNLNNbMp\F(‹/Ea2hކVٳz>{;U.JC*^v?z*AH8w7M,JsnͰyն-#d8J5E1{pW~ y*T |N+eӧqĉ{EQ0ز- @QTOy1ṀT [P]]Vù\.Ft:lڴ 0999.r@[[<O^GUUՊ薪 ءL5ꑟN\G\1x<@qa)0p(T(6!2Tah ׻Võc߉tLL1RfgEPNu@$!lܸ\kZBX b4l`Ҧ *S &LS#5^###8s APXDx9)DãHKKt+))yDaLJ"2Sv^B1v˦R;5u`W :;CaFZs2pNI]x}!D)pSHy.vmذ<ϣ/&Q0BE#b8ťx<9"/ ^[u1 $^U՗i[Ԡg!Y!J2=>/9w9] ?;)ؿXs,&ZZZY#qǏ!W egg'2eeeu;kÒ{ |ݪi8y$FGFvpxlD%ƒE^30j?r{z eֹ;:Wu[犲V31twwchhR䠰 XGsatЉ|f-nnߛ=* IΝ; 6ڱNpRUUaZVL) BPƈTHrMO׬r٤8jW>p¨˅p8 A%Wa_ p?L3Ueð \Irrr |NUqKE?Zwaeñu 9\{{;Ο?{ ʋmHK5[ヌz 7o^`38Ls* W |I+huIQ w8B͉ ]6}}}cYՅg`p$aEc]~O%ƸC*@##0P,dggGGEQ>Ob2qUڼtx'05tZ+o1zp? K TeFpӶ:lBۅ f&$ *-za<8pf頻H_Þ5 CJgMXsyUUl_5NEݓظbhvNڪrLׄc :pU(E( UގǏ_8?};&abl"]%9UU퟈%3p0pok,k~@3N<1 ,tǃ/`C@---HMM]vnHyRQ9 25B0lúBr-%p8fvYj8NN#- = /*^ ĉQ iu1hxeeep-)ɰ 7=TEU;4n罷4n*u1)㐗FRZ(Ǣ+r8BB?w~Ya1V$ o&nBb***@Agg'r3"7F x^{mE0^Ec*5Ft3UTբ(ʢ6v8Ο?AB0<^ _|^NgΟ;bDVRH_@G8F,]bÚΞ=tOQJP`!,IYA0,(K6@?>gnAF# !AEh{6h2-)8|8s4x. aa2 A^A!Ȳ%%%4doG'} C`(’LdYfMLܸ|A_Q;׷Je;$pmH"dI"0ky&LǡRP.Y0cdp0z"//'Xtk6FT&~?I1S@UUcCQB`/dg,?,JWsgXpQ፷j2LEE#z5P=$ ]}C\Z1P)Ĝs066'Obdd֬˿SB" fϟGMMMRýo\QQ h^0SEQC($NY2eWXXχ}IB}Jns4{Og_ZE%ezaȜsMz"<bnZ50񄷏\,^_OK5aKC(ney) $J!JiJTVVBe۷fƮ$0赠;Fsxz<Asy߬09%(4n{E cU]HO1@QE{Ɋ  R=`i򆾾>L(+v`F_Ee*l<ڝo `^GVIieO7UӼT yBaǒQsx3 <8w,^oYz  gT΂l4>V./=:< #X<{=<я[w9GA96ؖCᄏkHɷfbl')8_]Ѓ`NSJ i|`|||YzL&=䈊9dYAvvv򌋢ݚ/ߣW/G'e9ѣGG'>QU"SSL('ލBA-'5AQq1:i켬`GNN΢;- %vajry)rqt ?/~QsÒf#< r5pᄤLW#6l()[$1鶕jeE 4 "ވ{OM7} 1ƶYRozMMb~2#?vCt{wMK-*1xjJ ,MQPvc_E;1Qm6Ǘڭ:&x<ƏC(qv=>|^)))qg5pFY_R6Y1-%df c&dn7DCU 6cr8˅FddC^FR 󐙖5p˗_Z>YHm^$I;#66녵p6%~ˎfkY_Ul^|IJ 8ʪ,.NQ~p,A%Ȳ US$<$Ȳ6QYU,OidJɕ i4۷K6[Rsr1R19\uu56nܘ5Z㸤ϓ"BVlor-$C'sEYwu(ږY6,ĵZf]n5:Wu[犲p\Qn+ʚ^R @)Ezz:rrrdWnL]]]Br99sŶ|XR 8ڊӧN]M{V䧾u],?@)教T\YӃ}Qmވߏ__~J,V~햛w6k!]qep8 YQdWTS ¬ydY^:2Hj W]]m8s,CHx î1sp嚚'NXz"zh4t:y#E.}u0N:!瑟j,$I3V 'Kr >Ƨ 6 PJ~`ph}(((R&JN<_)Tjö ;9/քP Ԕ#c_ٸB aobScUJiTg?F)]z"B!Lp(*^{,HKKjweK'pw!Ue0tȴ9Y&j6a#aEqؾ'EN0>ЉgG[A.>=SbXYqQY'xQCE R"Ǐv3xFcX?V (((@[[NBp'aF002P !lF8j Gj]]F矔$}ʇᅲZr"ŴRpOCQWWҲz4yUU19AsË(JT6]ѽz04<͆)"j7E1 x`N)F=sIDAT  ݐeZK(JC(hooGsss\Kca}wkl,<cG% s~ We ٣ǚNE0DWW~gJkAZɂѠ2.Tޱj]gA@'(,)E $CQUd##lBXq(++[V^11gT$CRJEyE%eYAO2,)+}}}ؾmrrr]h1`CietZ4VW@Y"Yf\.r2`˚7pY *^EU rV᚛Xkr3wGS%Iu,x 1 _:inW=brrmmmp'PxˮYٰNvDWW_K!zR _ u(Zv^ 4TUUZ)_(+WPP$ PTUjp`:7Pk/נO`jj %09ƩZ]e 2gmrO9BZUUq~\ O? %$gp9rdIX0iCsȽw;oc,;8Q AA{9!Mhll$Ix!]CUUp}S )'p'On*'r8东$G1IB8Fn;&. Gh%~bk6f1 e 0u86TUU}eA跿5W_0%x)izlg`Ta@L뱠rGSȵ(_nǏG=^lrQdqQLNe,~gQl" i LLL$>@ pQpy̛V VK/{y"3,x{KH gqkp0cs$#ͼy5ĭ29m0M(++.r@Nf:j*K1̍A[N wu:ܮ]tp뮛n(%`B#S Lk*#ڰJ$I[N8:>b#G#;;{>xmCn>t74jvc`pٳ^Ϣ* s2q1_.pgFߟQ$94^wcfyQŘ>bm}؆yߛj300 h 5AV@Lh1m4xmxh~I0LX tZ!ՂFAwڅxk!Le288)TE"W$2]k%({(UQ !$ު,ˈݶc-V( S΀s6a NKG,1A!1@4L~4Ox9({^mk^i]բo:7Y/p---/WWWjڤKa5n5lr-(2!qv؁/"8J֝b%^uAu(\qc=ku(I6TѝV뚞Z'~DQ;#1 f:ou#/1x6lH Q[[{QJTU=#ZZZǴNRHJ W\d^dg']6 so'<նze5\gg':;;eYn-A0©m=DB犋J;u?$*y~ssW̠up~޲"z@K`dW!HHW%Jصc+}HVnAPRRzp:7Mo7'Vբx%M^qzfggĎw4m -8Bj6m@c&4Tb떍Ȱ\ypJI95fJȊ:Nj0Uss檍Z 3Ύ0  !u+2w|%tƤzR>龦(J9qp8dKK@4=p`'e3NY3uuu_5Z)튢>Dl{{ _ 0P_W?,[>uWr@{w?KrMl#ޝ>)ۃ߿<_<,L\4WG?܊')!S} |Q͇O=]__hnnv"6rIdeg {6"|Ν(C0q*Gjyy9jjjQYY7 akf@ӒUڴ (/O\첾>1O=3ӟz;o'(,nL7!+e^{ O) _=v؛3ikkk+ЗZl\ڊ{w7rjhh[K1N?Avn܁;o='mVF B8ßLQ "Y+ɐ$ (BES8|k@`Q|hnnNWe#+3 PY:gV:E^:l,/Fyqj* $bj҃ ]=8هgݍ[C'>o{jjj}ĉcnw~3777(!woDX̋oI͖E v؁g/U m[.R~8]bt=8| C.Lz|X̨[-px蓟ħ?p0RH|BPBbDe9鸡Ͻz'NǍ7\Ǐ?V]]cl ?:88qs { !&EQn>Dss(=d>qOVU`Oyq!֝HQD( %%MMMGWW::{qnA`E3m]CII)ӑ3,pnsOd2B8h7nmmݾ}c-6V|tCJlڽkG r衣'oSdeEVlX χvzXV\.TnA`6Bs)F# =G2M&X, z{{QU Na`x 9)/Q?uL9Rn܁7^\ȏnE5iYBXqOd $!gD,H166u:Aphm.KX,կ~"y[022/>B-y_ =aQ`_7\6qHMؖJM õƢWPP)bɖ,s{18:p#0!ݛ]pm( #B @^^exYgk͆z\,Yål1(c;8g}V!խ&R K YVp˩PϮH211luy:pBn1cbbb%̸,9kw`0 PXs](..I~ )ʋod ? P*chPTX(G!KyB`VPZ+k%,58P(#my!:(䧼M!A% %vi>1 7tZJ)68rATJ)zvEQB0,`YŽ=ztX^s:ABa00\\hnnN%XѢ:0ӷp8@-pih4|4:YB+j M/g<'*\R E__3"-4i(E]e z{{V}lbr8J)_> opX(XE/ʫ<,OU,,PPc~qW"͔EkiWU5zM32W( 9쬤Jӷ^IX~׮]`0x`M;B0آmy=˶tIv?|jә3g"Ζ%gǿid',M?55u <%!S7m7V~^"6ocۺ,چ 00cF>4!9h^&Ľpf]ab]|UM((dEYX_ΛR%(꺤Jí4}Nyޕ !+,MܼX%.r,Y\ѣΫmB\v5Y]rM$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Governor.png0000644000175100001770000003604414614030416016365 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyx[Wvɲdْ%y_ٛI6I۔N([RxZa: 3e`0,R@ ݓ6iڤY&qfUh_zَwK_Gν|tֹg}fLr``xgo$$㏶6w9k܌Q]{y{Z,c馣Fjf ՄP Q_{RpWVZN7<Ñ{>Zs:?:߮vB ϖ ^7&םx<罒p6bf3 *t:a22GfVWZ^}ͯ_ꕞĉP dgX,_YrY[*<XM4(~&# xb8 !Z46n!PTTe%D `/|x@4AχcŊل0 <z?zEji ˪~8K#a\t *!@_j&p?9 J$QH&ac6abB0a2kOQJbhҮ4sfڂ<+j9 nG.{(QzɐY{&#[ܴYr\n_RU#O>A)ɪz=3ȵT,^iF=sV'UY8FM7eȊ UQ@R.8CEY *JD;* !n o`0 @UTP gA2tX//-.C}s3/oQDQ c=PfƔ W0mAՀPa1jSB/>z{nJ e$JheYW$INc(tߋ[bGq58TxWmj$P8@jVL8)LF#LFc4oGmȲZrB#UAih0(n"I Wa6+TȲz$_3t1q%I00 -[QaKћzP( ߀ $Z#we$U:tt BȮV[lJU5nJ2 , g~qƮ=y*:NAW_˲*Ja I2ݤj܅Lg '$X,?p۱z2,] (UU $At: G bZ93fNBń?CPp(誋-;˲0jfc(8.^ә-̚>լhCY&v9 >u'Ϟ^e%8/z(Gfh;kh,p(|>(([ @ UU ܄X,U$˲(pAAKKe|qN Þ`Yn@_Ay:Ie%Y˙ٔqgD<;ӑ(Zh;ǜ@{^ӑgC0q LFqI ] D%P(L{?ۡ= Q󣬬UUUC;( $I՚q3u8(S2RͶ6Bel6m>s.NV͸Wz;1mڴϙp˵F`Тs,𫪚l-sVի,C%$IC!$1Hgw0v;x,F@j@un:'PQVVDtE7~6s&P,Hxca4d~oX|t٩6(F":4]dEAg0ŨE^\k5NãȲ@%i?!&T.+s,fXw@mh4H$h$p0ΎF)E2) '%I2q.^-Hc *Ik8QJu;xϛP wyo4 Иv>kF(@$A4]K0)@uTc2C3fV }ބ$I"ך;iPu8 2̳GJADȃ K"$˸pN`ƬYQQN(2 B!Gb( #@ s+,fӘv(ˏ4֝8sN̺CqKR{g,8q AQd0t7t8JJJ2of"C%*Qwm2Ǻ ,+KHu))x"H$6zȱX߿Mƴ(6PJ{Cf'D+{ɟ7^^G` V+2(}RvK/NM̩S0{tBAPWJ J@(!>>\;ւ99شTK(ԮKJ(QH;>VEݮ6X}̺% j^ uGA B 2oBp + JgxO ŗZB8"x=WLhn꿐l RD" Lۄ^o"#R?DSNÑg LMQa?\|mBn͚5hll`͖ I!I$I(JP$$& ֬Ys5;&ʣD5f1 @*DQD2BȜYmԌTlˆ]Eܷ !8et:P_X`-`E"e 침klVb[h BJ(حnɨiV贚BKQUQd23!Bd{qV$ w5DN(W|\Vލ{8Ejd5aD"Z D0cS6n[ó,xD<d h,g!* ]ǯ Ba<|zCV,"A8T9J;+vabա:&$P?,+A;pvas(+)lX,zi1Jp9V{*'$`ԮvC)O*?7BgC2{^ܒWjHh,`y~nJpeeeضϾ) rGO76QY;yiP ́VAH[՚| PRJt:=k?t'\=s>thi Be4?vٌHx`Aspr̜6 u=`c4Sy9ŃV+(縋fTWU28!ߞe*ȅ5{И:K}h0 0`zv]1 FBFp/l֜ΛmTlLz㧽Ԅx]vq, Wf9zCZe|0̐[w'֬D%`\F̦V\ftHM M3*555bͲi`+zGA^.Ec` Q!+2%6.ʿJTH iBgyۛ6a!nYXe-8UUqYܱi&w\O]yyy'Ģў&MJ:^8ΑOV-#S0Lfb Ka:q z`XC=z;zTx+f\:uJ-,#"ϑwSX9G/WUӂRZi~ NE|M|]O;AG\_1aY|?x,6l7B>V>,Xxbf$Z?0d$xsfšчõc.8V¹ssm~΅_$9+3i`@kȊ}rlF (8*4xGڛt! lu јJ j h̚f9!p,mzœ6}vqrC2؟6TlHT lڂ$I8x 6E2G"G<E"C29|` 3w!***rBp796lEBRȚl`c('n,)-kٺcOB-X"yBQogFTӉ3Oa!5d#ɐ$q'jv^[z[ӇTI5}yEZ8rs \lGKy'E/{yh4B(r!b[Va#fYw[nzq~ SIDAT"MF#98s jj2Z?`n_KɨEnSfMc-[7V_6᩟{F"Ivl_šun |}]O|>R%6qihf --2fgj.n2(: J2*J Ҵ-ֳڎ6Vu˲D)ݺIyg7waX%?< wlo~_f4.%Bɠצm ?;' e+j5xq\khD2H .9Jre`#'U5@(4bYQ hhbB :WP{p?Òctq{Oȩ̛~m]1iNucν.X<'[oza[r-] YB,EI.^|&鍋 >ޔZ zsœ)O(і7tZZZBʕ+Ax*n7c,>e /ތO<0&$!LBE{0VX2@A"$IYnĎ3/otEvx滧~/7`mJ]o;ϐeJ\8w_G̐xGj̇jEKK mU:MKG[QJ9f#͞u>UK3©qA|_N˘7 mQ7ʲ#i{Ͽy4b6 @%g{׉fd.ʕ+z󯿿qI<APᇿ UUSܯCt:0(h @)PP*(IPxKvgJU%58>-6Y% FSoPQURܜV.Ɩ'[A)o=B )j ZT8v]r GGG|>veR;AS XHq7 ///F#8E5?vۂa-贚 JN̨rӚ$Y}mI=֮Y>N)+@s p] Á={f z x"Q \ueٯfTxoo|4s[$Mb=]dIDa qò >e6$ڎ=_QᰙpuRh4 ^a`6ši',,-H2EOBgHP=,==;---MR-Pa`2<4 FuWXXxcI?; ^/=,F\F`͠$ QZm&ϟ OcY rspQ]?Sf~5ls`-j|]{j:TW!ns]%(6سOEC*/]8xBHp.k}eIePȈw?-Xj9Yb1Jpv!СCwa^86Xf=z4<2բ{aa5=xa7da.Ffz'!3[`ͅpngn,Y8,i<oBPVd$8LRHKح&A0u,Bӷ PTCEU7nI&x晧q¹(C|&S+O  eRuq j9a<Ϭ#L4z%qS}hjj6FxQUQKTD0Ӷ.g{v?Z({>@iWRi4kkviii(hkkÞ;<çϤ'CF(P aߟW!?t+xgj2Zyc}4F"*/oO}*k57nX ~o tǩ%xͣ?#--/|smQ=v\CCN =^u>Ge$W6khhh{ &!F{׿Ѿ?i NR_~/y\M9J)$IJg.tdapϾz' o7;\l/ÐS0֡kL&|m%i(e1 l GcjwB787Λ`NI$b11EMs[ij p[iG&-7^otȍDq#xgZqafy,zm+}juy]uui.kSV댺GnoS~0߮I1Y .H   ٚL&GO:&3d?Ȫgkg$AU (=nEZ-{7-ý:#ߌ*H9hY%ַj7(GwI~z E|f(a|k~M+}|W2΂ǟyMaג֓O߻ S K{C4矊tJfR|~QDz[C0ȺGDN 7͋4 FJi~~~~JbccKFɨmX ҍͭF{ıl'neX0cf^V"u(0xH-ٵP$c%*X"xgW'NQ ^zuĢA7-F.5EVT܂cW FO<{V7}DzH09v|>9 dnwQ$bwOZ>(~NJc2_ͭҊXy{1x2Za!c1 <Լ ?݄l='Ι;7c455O.UriU EUM_4A[Q䶣9P;?Lo*Yss6d?!Wfdy]6x]Rcg]57qCV%ܜ9W|.Do+RF]?qUB~?;M4j GG?i4\jZ#g4h?t~%;TӷeٗF+Y:0\$A[[477G6iP I(݁1:(ʞDRq8꽣"))pqQQǭRϨvcŽ Jʋ(4;0x87ǘĄ=\t@Ì~%[z4qdne]!+_ I8{ /_JdY+n@-@EQ.|08^ TWOڐ4u3w-7S&ׯaܱD)1K),,;*K5 +ZYbZq=_BCakaw8ᎍ1cOH$7Q]j_%{"D*(CfT1";a503D뾎䢇]mwGoPNYXS+Rt: ~㱗{eeV)..544n,S9{jZBz:|s,Ǿ[L'(o(!y+z,+D- %6`~D"׷ZpUеؕ*RT* 7BoAYMSW3$eס]usn@cta%h6vRYJ)Z (7ݹv1ò ap\7r5o:v)!ꮌx,iե0ˠ@a[hA2=n U6\GGL `xU@x#˪HsXuCZ.]`x?NzѠ-aX\ ܼtl>x*+9B)v3˲r,iev ͱ,rS@je  ,ntWA bHp0?O킚lIjTCUK`$>r 2^fԔjƶ Q/x>0L4 X8 $Ozve=%EEZB(-0Ǔf̘ARHJaX}E3 g9:.s!"ze0Wn?0ȳa2\8? [k_h ^qgOHv(`(|s ܐuTy\=eX z-N"bR(0k]NO n1 QJCa" )HH 2TUU&OoLUof1d)-S7j -bCQMGjZ̛W/KVYFãmC">6+Ij4CTqYV$.ZW2H$^-3R(d42 DM2NM … n_kzs7>9LF3|R A%$ ᘰ3b}E tw0%#WL=vD"'o-vw/8a6RdjUǬ@ q')m~vt?;*,cL8\{cU}-l7НF)pfyB8-K_؀6AjKĚX_yGc*8y~n9+˱`H ɤTՀpLٯ~3el/׿x'm&-3|ښޠM1 :(ц?bvYy& ÀQ㓖]-8⯯v-5}eڟ ЙG9Dž]n7[FɊYOHJ*DZc^;huxՃ#7$y{sRۄO[psǶ758QVIYwӧcMk ! Xb雚GO^ nc(bǢ#.~3H$9cۜ9`.EoxNvkDò͵Ӹ|$AV䴭 .U?+v#JDeQ(ITEH8s^6V,k.j.KYuiQnE֚#5mڬZ2xgD3nZ2]'xƁT/IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Horsey.png0000644000175100001770000002751214614030416016035 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy\?=00 ,JJu^itNO~ϣ=u, 4Ks)Ms75D Uaؙ1<,s뾮w{}͛)<)6oL!ћ 3zi(,L@ 4<,ğ~6>|r444@T(|L:$IZ\S~ #{ܸqC B󳋋%X `/l #ߏPx{{$I0L?~#FłE>u/FGG{1%HPRRD".W,p8T*8znuÇC*Bӡ'NÍ7k׮/i(HRHR0 A A]A 5eX222&X,bȑ€w t.]ZjePG`ڴi@eei:t(! g(ʁpuuuL&BBB JqQĀ`fٳ@ \rŨGNN e[[[sa:t\\\rrr4hC``\$ J\"p{ P>}* Xf 8jkkqa0LH$ZTu8B;w"!!Vcȑ˃F">>\.k׮"wwwjʔ) 5kcDDDB"H|>_\DSS x<$ B!JKKggg$ B?C 9shgC  "", زe $BBBR)j5(ҥK@QÇRioUUUQЍOOO^U?<+,,˗ig bh4X,$$$ !!ݲm͈YUUU:$ [ЭfR@$pmhZ>[nl6v;o4U{BFL&Z ,֖*BL=8zp8 <<nnnhllhkO;i- y2LgnavvJ2 n둕{ƍ8~8.\H0!88v;}LrܼyoEQp8P*v 2>EQ8x˓ #33aaaرcܠhd+ڵkP*N3) pwwGXX2YYYؼy31ydc̙67=x^^^x7o^zdo'..}ƎkZ$#++ z3fA nOpapQoSҥKOOOp\TVVB*6-?H$Pb|駨h4{8|>111MgySLs=g*wM$&&ZFv8& ?^^^H񒒒pB뢰ԕT*|رc~7dȐvkZxxxrvu8EV޺ukK\\C1LރnΝduuFDFF"77111ڵk-jO7l5 OOOsX [T9s2Lt!F.#''f괜+,jO;P(f '''~ QPK$6ǍFwvڅuZ6,, | ._ĉMWiDhj΁@ S DDD===.C]~Bƍ|HH8O;+RMP(6 f8:m4Am$I2͛ `^5ؐ#Gpww7;|` ,, ݻ^isssCiiMrt8>\.7muG>6cƌ &L 6gaԹsڊqARYxu1+,, θwYiH$(--=hcx[,?LLLLyb}}}ɡC=P8x<ʕ+Þy_ `[$deea̘1ussũSLwЧ` Vd2M6ARRSNuwz׮]*oooŐ!CT@c4Æ cZj[>ߍ$Iڵ oF@@###qmx':O/d2nt!I:1b?sLZKKAHի5"HhnEB޳g=z4ݻ[ Bd444իXp sMF!JhKJJV°fY˖-SD"ڻѬlraee`%CIJ2 EM\mZR/" YYY=m0=3fLD"5kjug_XZmQ.ӑ }www7m)( XL&s>kUTCPPPg=Pau085A t;EEEVաbldЀg&i٘Fja(9].Å_e?h ,}(jb F pqqA}}ulP(IepE]ת!U&.Cp8ƵkX AhllX,Y$EQ6q8&`s- GGG455Yt2 j`"F gϢ2(ӖZR\.G}}=jkkQ]]JS0Q(6zi5. .bڷ233ic#Iqqq8{,BBBPWWL*TWW""NNND"...4hE;B_9Ĵizڌy`[AA#! #8؏fZ:108@32lm Aشi~p6oVOYRem)9\BQ ???ӭ9y$ܹZ}M;O(,,DCChU=FAaa!,Yx}/b  h"?~<@_xg`DEEy.?P׮]0:h9|}}1k֬'d8ŋc޽ BwŠA4oijj/v)%0vX?~ܞ&ql߾]h.t}88q--mFr1~xb*4Z{EDDٹccc)`mPP-okmmEEER)< Wg퓆 p8|mr6*Bmm- EO *N<L4w)N8aXl6{NHH9B8p>x +0 nܹHJJKvv6\\\n:$TWW>|8hiiݻwmmVbHH̪@ 3VWWWN_;M(\p~~~$899!$$j)vx9$$bkd2FݩZ|||) jpvv(b uuu6QjI$aEEuZfʔ)())Ȱ@mm-Mb:tQhhh7jkkmeVD"a4f0i;\}}=|N_駟l%G(//7#ѡX<$z _~m 0~;J$X4:dM!Q$-Nףs1 6 ;{`jp\$''[WVVbٲe?鲍 pFQ d̀V5555{ԨhPRR?4E;6N᜜hj{$Sl?Ǐ]oggg#44^S37oL"===fr9؈*߿te0KVAsNc޼y3fBZrܸq/_6I tbcc/v9Tbܹ2%jHJJ:E>J]tz2N8COfSEZ~za۶m(--łH$N3}K8|}}˗[ I+WDjj* bz=jI@+6![&P[hY,f{5tŋ5j) ={x#@-B{6{Ġ/s۱cǢ6Ru3 ٭{3;X)2=mCG ݟ)J DiLN< $&&̙3B7N ȑ#(**BiiSeC$֭x|!@(E~@bi-rQ{4R$Ebd2B!.] hll1aXp V-[ .pU[݋H|Gؽ{7.^8%(zKp"## gf\b`o#Gd2ȞtG*Kڸq##55u R]n :l6P(e˖6 B}}SaƸq0~xt:T*ܹs| Fi* /0P?xT*dJ޵k\.!??ݻw:ĺ$&ቕC{48ujjjnݺ6;F#F 44Β9з?6@dd$F|TTT 77ׯ_g4778|0!!t`GZly'N JJJxN՝X,/^t4:\ǗO&WNڽ{7bccqU3ĺ#^{ OݻN$֭ eeeh4GQQw2 YYY)MkĄ ̺Yf1rHR!u [cc#x \rxwM_~ex۩ĺ5$IB$ٳ,`H@b@@U&N4i̙3MD""""F4$Il߾iiij())TbjjjfMm?.֝ѥPEQ/'ɴ*nۦMVXO?7n@||?O,Z;CݻwSuK)((X,vԒ%Kd2KWO?lzFG3p<77S]v?|ov)n UUUz*n޼}X111x饗lL爎ÇHdǟ1cٍ7hq{p'O&O}66n܈ ~k:]p8qKI!C߶4} 8pb999LrkCKKU|&&&Қa766իÇYYY%`_z5Fa;_SO60j(0 VB0Xsh/H@p(J[K)d2;u@r`%"VICmm-kэu\2RϑawPTVBᆍ3sȑVI^3.]&СC4hЀq]VVBʙ-}}}X7D/5\ovn_~f|}}nU HyAhĺ9-mv-[YfRϠQXX:Ǎgq*qqEhuHDu5`bTZb~/z-555puu93h ]9ךtpss۷i?bذavo Ji$iݒy$Z>|Cڽ՘g,MЕùiZ*R*`jС;vU*Ƣ.44'N*/p~4i.Z"t UKgRRR]HIDATFECU(Çq}TTT 33ƍzFSJӁf#..k֬1+m_aÆ _'''zGuz"]9\͛7DGG$Á\.?|mWub׮]xwwZo[ Z[[ 6ez=q=SL$T*JeJ(MW_񨪪#Z-r9 RiOi>GrrI]… `XtjjmR!L8T="n Fi~ o6H"11!M'TR(Mw(MOĀ_04}o+`>wAf[?͛7SO{t+6=|hhhREQ:uUV0 >0֝B?Hߏ+V 66, ˖-È#bbf f7nHLL 4uuuxwf>}Z`; X>|A8}4O >>>f[kV^b θqp]LJ U?A4ncUWSS{bʔ)LRIIIРMMMe/Z{SN.\'IR38L>]-q.\h⺺:TTT@&!!!J8v^xB|3_^rcǎE`` ˑBE܌BT6lqE|444O>ާIQDD{1`>w4 88vV(ϰn:L>V9}SgY(--Ejj~l9\zz:f͚O?~ҤIOdxW,<~ hQ|B_8~8l'''O;vQ[[ 67"44tzañl$ 7oCkk+-Zq {NcmDVffY^G] bcǠۍ!6lXal6 Elh4 D"17wHk}}}L&҉;2/&`ԙǃQ}eeeGJJ fϞW_}ΝÔ)S|ǎ뮻yL0z`CRY]Os8@xx8v܉e˖رc3f ƏDXF^Gkk+Riw%HksͬzzsmS(vT*,v|8x z=bU 7~o> 2_)ݻq?7[sEEEmYYYhhhIFpM0DRR:VX iR tR|'xg2e_bƫj~zmVb)))Vi$;??!!!P( N:aÆĤJ% ] jbp]^o={ <<_p6`˖- o>+;EQPT矱o߾vz(J;wbiRu墋/FL<aaa~;hCL&Z-RRR{ !AHOOoSfd,X˗/R7->i@QQoߎ˗[$I̜9EV'|8ΝNnڴI #6ǘ+11_eT!@KK 8`Sfd֭غu+HDKK $ ;(8;;o>[r{ڵk-mu:>`ejjꖷzHNNl6(EFFoCԈ]rP*8q"&NeyJHA.#))tpryyyrJ"""PUUeU2 ][[͛o#<{9(J= pttDMMz---Xh-o˱k.lڴC^x| ._ʬPPuj9,I(B*5?;#͛__~pp׮]ӧ7|IIIH$ ׷UK[:AH260{#G@,#** ۶m3;E0j(رwl ~ ;Id8p,+<{ꊜd 0.fΝ;ooo[X~Ya#Vܹs૯½{q/`P(|yƌ#E"3<<\hѢvBBBxɾ|wn*Y f3)~gg~pfpyyyسgKlذV#DHNN^u?Ӕظ8r٭֭4D;5W^ KNN``-H$(((P(@dd$grʕ+gHR~HuV4ȑ#UӧwyrN$㣏>/]Tϳ^:#,,,{0 $EP(Xøa~z̟? Huh`XXpꉏ1ގ2""aÆʕ+4mttzyy׬YCM8z7T֭cϙ3g+/5"bކy$RhAKK-vܹs+aOS;88d9sFK{wtժUݻwiii Ҽ|F+SNaՖVO_Bh j :s14h[d&1ֆ jVD"\\\̟?^3R)>&HH$z>O 8880 F?EQ䣴\.J"addd$Ν;'OB,#FʆCMeuرmǎp !r3L @"Sh@=d26m=SDvUҭj??ӁB7IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Icpieces.png0000644000175100001770000002712514614030416016310 0ustar00runnerdockerPNG  IHDRMbKGD IDATx{\ǟhQbRYSr6 9a9a//9lm9ʡfrBCʡT&N~cQq?|ӻWNﷰd  m%K/i w zjE#8 ՊFpmWsssv튑Oiiij=Ɖ'9r(Ƃ p8q"<~SNW!!9r={0I&ҠARCbhhHV֭[nݺѪU+ :th4iD){DQ!yQCJ]t}@vQZ@۶m⥴ѣs(NW?e 4 ''GktpuW٣GQF>|?ӣGHNN.W̙3J!Ԩ ޞe˖uEZ}f͚&MsAAEǏI6mD`n6;w~BBk׮)b [2]ʕ+z*񘛛rJ]r5g"HHLLۥn߾Mbb"gϪ!?3g\vMh_&M6cʤ%''yf e_|Yݺu?uΎ=zЫW/:w\W Ғwm۶-cSSSڶm۷7D"lFp PPPPGe֮]ڵk+LEAPj֐!Cxyyaffƛo L?C~zYth xyyO?1h _HOn۶-vvvDFFҹsgy H$GGGbccviii4i҄Ç#AAAmۖ(VZEdd$vvv̛7nܸA߾}%44Ga``3\p .H@ \AA7FDQjAhԨ _ѧO>}I[[c޽{(& <EѤ___Ii=[.7o$33oFMvv6...Jg͚5`jjJff&!!!o$$$Э[7f̘ٳ'6mÃ={H!5..333>SԷ`̈S )@:u\ `Uq(iii޽{e IKKsEŷU6l`۶m\ *}H=ʉ 77___ڵkGttt^SC۶m-'6ӣGqttjGٽ{7_5SNU)SpBvϕC` , ..n(۷O(ɿm6E\222طoEqʽ{[`A΢K.̟?DOѣpݣG>S_Y!)))̛7]JMтx vbݺuLݺu166.VܹsΝ;tݻl ׯW^8q[qqqMRy(z[w^J?̀S[l1 W^ԭ[ ȈG0X9r7orq˥IËDGGs%222\FF.]"::Z0`'7oC ݻwԙ?ΦMʥo1j(yo/ۧp ի9s ݻwWJfP)2߿,(|qvvڵkVXѲeظqcɻWN*bLJJ M6DWDQի4oZ1*L6mryHIIQO [#==4 P[Yni{K|iW\puuUk @իL2E2:::B&MDxxԴZ%j-'8"EPlhh( sssdn iii1l0yre˖PEE:??ɓٳgOZhŋY`A[GFg( ]ovvv|UW^۠H̵/8D111a!rDAA/_fxxx԰,d퀀J3lْ????;VaMMMMgll̳g8p̼pA166wwwر#ȍ'OdĈ3655%((OHc…4k֬ҞyҤI; U1*66Ξ=֭[e6iӦ˽{*W7x`DQdnKBB:tA}B(~ &>>^2ѣ:Q;!TyA@__\ULff&uE"TYcgbb›oI֭U[1))) 2;wаaCKTT'"R24i£G"055Ç橱p5… 2*Jjj*R*$%%Jdu-o``@U&k N_Avv+/nhOnj쐚ˠA*]V++r7cǎ T^^^Q%+XVz H4h.HقcÆ 괥+<>}͐ Yǎw8 5UxdQiV4PhZNCjƮtuuݻ7M4;wN-nM_e4=K͍ϟ_RPPa^IU{IH$lll4h_c"-+MQmAnnM';;b嶶dee bsͽv]E999Kk9w\rΟ?RE {ҥu_~eS|'oh" 9sp)Zl Z._Ihh(ܿE*,8Q g޽l޼{<:uDff&cǎ󸹹KnݪQkۙ3g333ܹ3ǎE\ٶTܑ#G ooof͚ŕ+WT>X122_~̞=+eVV##j:~zŋW/))hѢ(IT\xx8Ϟ=ʕ+|'׏ӧsRSS5=] 2^tˈ#T؏8}t'y<Ȋ+4iE^^ɢB$WW_abbR깑 ,Ps@>+|޼yܸqgggi׮]"!'|"oGGG棏>jEQzt PIpoqrkN7j:ڼ̝;gϞWWWtt%/߼yVZVɓ'޽===o;DQ{ (dQ*CVSqrr"44ׯ_ϒ%KHL,wnݺEq@޹K̙@pss^!,v/W_q> yUZp$''W1<66'OwZ 8::ti阻#GD__-[J\r%]veQ퀀Yf^t (:tPZnyyy̘1Qh OJ .33;v0qDfϞ-5Ϝ9s=z4;v(:ӤIJE0lР?#SN-׫8q===cVDQXk֬1_,[5k֠˥K8}©Rܱcԩ~)#&&'..ء!wДZKƍrJ)aݛÇs֭rӹvZ_8u2ŋm?s+(ѣظq#Dy*%sqTt?^z4S)'TX&==*&A`Ŋ2ݛ@6mZ(|7%A=Jfff݊JQJpdܹǿ[*vՓ'Oݝs2p@eUamm]ypG/baa!ӣt>p)DOOSNJo>5kFǎ A,YKK-ZGҒzUcݺuXYY(#G$""D"ĉsrr8|0nnn@AUݻ899IMsrrݲ__222{.ϗ+y󈈈 =7С%almm 8bٲe=>}+^tҥGdd$cJ3Hu/2ekNNNL<+}x3g_rnݺ-t曊N_x6mP^=._LVVVKQWָ҂~:͚5Ejo7nhӧ\x-[TGMOO-[pyun- 'ի78~ժU$&&[~}WArgΜyԨQ&??mےSɪGe+%Ν;ǪU* !Ho^!p9+5}UaLA7idd!HE }qC9PHH@(%ӧO(qpp4S+)((޽{L$&&ʏ (Pܟ/2%,,l;#2777:MeDAll\'AALJN:qMڶmhs---prrBGGsJ_j*,-- !""bBŏ߿?qȐ! -żTf_B=\tt4wqPڂ tԉYfѱcGVX[oů*5Ν;i޼9/Ɔٳgӱc*=z^ݵ|*+>(ݾ}SNqv!ݻw 2ZjP9.ϻ+lzz:˗/gԨQѥK<(3"x<R(>גH$o%X8sb+}ѷo_F[oT=5]]]ƍGxx82yd ؘ?KWE1%V?~gggHff&/^gϞ+DQ<*B9r .$$9s(-bwٳ9tPj=vM,,,dF{Qϛ:T- @lll͛*.Ӊgʕ*ѣ\:uǏSJaZQIJJyMPVpZ"""Bmb^w8QիZo"N@Z.)sLCR{U0:ѩ R]kT[!w Պ6n_ ~gjoNCjE#8 ՊFp4T+HJJܯx lݺQ)Sh.fDj}w-HNNuR*h>T6-ߟKTS_O?W%ꐺ]vroVTO0PUlmmf8::bccMzQs755\tݻw9r$*<#WBff&XZZr222^I5D6664jHmw*\]]퓴hDB֭oã; 8Jؿ?&L ::crm+f͢wޘo3sLcTFpZZZ[luvv.hll̞={شiΟ*[$ׯ_';;w}Grr@%iӆ^z憝֖ڴکL\=ʕ+ ǍWiFOOO 777+}` E@VXQ*М9s9s&VVV4lؐEqĉ.U"77WGMt/V^߰aåsa*-4gΞ=ѣGY`]1J[+<  ::E<>}:zzz2_$ Bz͒--%%?//Rw:ԩ5[]E*;ԩSye NYre]i_$!!ח ₅ׯSSӎ@XIHHw%߸q#{o߾:;;l4lWWW᪒puuDw9Y릥eWiWBǎ5kVʔ)SʥO6 ///A(󐃜R/]vIkhhV?5---y)($''cnn^2(Ԗt+Zl)5^gϘ;w. Ӏ>/d,fȑsС⮸smFEEUklWk.o233Y` 6,Yp!ڵ(ܖL1sLBCCKn}vlmmN6C9oS# ]RnIj^nw{ή*̨qDFFo>222ӧ>.\ ==};TY&n޼~Ѹqcի&M OHH@{XI[[{+Vԯ_?S]vբY۵kŋe ܹs`ddD:uC#,,z{Cnddd8uTt:t 88x=(&|r݊~}!>>xP=== 3*|?eڴi_mFΝٿ뙙t^|իWJII@iӚUyrbiU"8(岳'5}ddd>ˢLg;+)ѣGW itԉo5kְepuu;DM‚1cƔW 6`ddė_~E|e7ROOǏټy y9dH~~~wDEEw^JN;(roʊN:֭[5j@ ---Fɼy5ٓŊ+HMMeٲeO2{)#ׯGڞ,_\/BBBXbB7|w* 60o<,,,T2kЊEGT ؐADDZ\߽{FXܻwHe(#7oP\E6ޞ7n&벷vWeVLq8QQQ/ͥaܸqo<|++6@`kCjzz*H$ W Iee\z2ϟ?/BbbTt5А³z@RRRg666MNNN'CPPw>HӨQ#*,-[r2d"99*ۼyQIIIbVV ŬӦM l/%66i>>zY066G̜9.…?k-[hܸ1 8Q,1KIIaذa%ªGu$ ~!ښ']%QLA}6'Q^pEfIo=\WtwڵkqssaÆf@GY+cǎ: ۻh~NN={y%oߎ -*UEAA7o$''ffft RRR8pYYY 20v#066Ç\vRSS[. 6Ύ6m(( ӦM3Y4~,ZhpNNNc ƺ;̙3Me⯿l<2Eiݺu<7$ 'O,fkk[T(tvMݺu2e NNNԯ_p)vڅ955k֠GZZ_q$$$0fvJvڵklܸF-"r~;v8PD,ֆ=>c\gϞגƎ1BgX!11PֿWܕ+WrJ(0PjqQGG[͚5YfR @eNo߾-eZMCj""899q >s\\\ҥ nnn_wbkkKVVW.5a``Off&DEEn:>ڴiC fI8o-{oPn]F 0L$ttt0a|T&ݢ۷otU8{,K,O>** Up#;;;vPn]x 0`˗//ӿiРu֑̅5333Jiƌ)[=h 6mjt+JִiSA0aq@q!;LMMRF7|пE;7TŜWfС2:Dٳ;w???o.V~zfn"AŢ$[{t҅Fӕcll]t)A"UpO>K.eܹh"/_^aVVZ){tpp0EMR85jT)O<D20QKwQo8h"Hرs)c4tBϞ=y1$99YɓL׮]eKGAPhYchkkӶm[DQdDCk(۷--->}NǗԤI\\\}_֕ѣH$À_g̘aP~}bbbU}~}vׯ[W211rWŏ?Hn Qh%$ 81offfR?t`„ Znl2lbh eoTiӆ.\X% [vGADSaETY\%777n݊Za֭c8fU(ZCkV:#044dĈ|4iҤҀ纮^n={̙3qwwWxV/_b@Eʕ+yTPmٰSf͚!"cƌpKKKƎ[i,DQE Z >JMM%??? HSa/Fjj6+rGΞ=!!!!+s˖-cʕpttܹsK9K? GTiےԩS.TadddC^^YoݺEnn.>>>?zӤL%%%ѳgO###cȑ泰ť\h7`JԔm۶62 j___LLLxw ȑ# gΝL0AS)8WWW6m… e_lO>ttt4L:Uqksu۶mC+N:ر X]۶mK]닋 JggڵqU~\ElU"33ǏӰaCUs]ԯ_?N:a0=;#,$II;v0f̘=\XX+V`ܹjktlܸj%3|K,V^-̛7o* tޝ7#޸Dy̕Ō lllڨMIO":V?WWD"a1G߾8IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Kilfiger.png0000644000175100001770000003353214614030416016317 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy\egsEA\q7\Q4riҖqfVSY3kY,55MM4\]CQ 9ٞ9psਠ_/^synos$sh{`ܹ]S/CKm3h&hڸwhT*AAA 8CapN`ݺuo\zJ;Fll, P(xСDmH2QYzjwbUs\ x"zc~NJN>]H_`3<εʌs VA ??-T*ˍ"''[RRBAACMZuw v @PP'O lb0jYv-/2vvvdeeaJ_p_` SDvK o΋Aĉ9rRR)AAA 6  hك ]jGr)sJ%{fֹU\NNW^eҥߟ2N˖-wTVVo(ͽW`ڭ&Aزe Ν3IMMʕ+tޝQF|0`l߾ٳgP(OJJ"&&땕;v7n /1VmpnnnF.**"&&w^cxZe'++yӧ[MAܹs\tC2h d2Xj[~~>vڵk 733ƏotU\NLggg,Mu'w(FǍC\46Q&q}xm{;#Dj5{}(4ZfrT DbѩգF=pxXLQ܀fׅ.6^@; 0ZCrQQU4nbܹ{{{A_Xq Z*U"0x`=Ύ}Zz*Dc>1㞿4qmՈ0 vb3c^OYY 4 ]TTdVDDDpYn޼g=U2?_`q{|||3f g-Ott4^^^deeg}O5R)'Oo5\\\gggr92 NGUUNee%ݻw'"[1 qR_N7ruCyF1pcޚs'S8;;3sLC;2sL,YRgdƌDPP3gdѢETzQVop ،3̤cǎu oѣG~&wpGO){ϗ@ͽ`9e3;{}g xyyh41pU"8d `S] =<\1^ΝM^ 1y򎎎kcp=wVo]'p qW& 3y]"j3WW:G[ !.]Y?Cj5IIIQTTDYYUUUz***ѤR)J\]]qqqۛs&8=[G FW\AÛbNez}PFץRa666FF$IcĚ!^ /NqW^8qNܤ^s_^^VxU||| ~T^oXqZJIIIkO "F9j?@* ؉؃BC 1y^VRNNNAHOO7Y6Jdd ]5FUUUCf nXhxC<5ģ%[/orߒ 999Yzbb\ӧMwN2[j6V nSԤ;㥥Lw EFF9#z*'O4RZ5III$%={εG}^wf\zIn1k-J$˙8q"+V0.w !''7n;~3gIfffaÃ޽{_K+RiիWT\m1DEEq˺~:ׯ_7 p\15Ru:]gJ{{{j^h͑nƜvIǎҥKe͛jR)~~~燗W^Oaa!deeq3gqnEԍYAWZZJ^^j2Py]|m5GFo`ΚFlĽhz=iii$%%qu LEE*MPP]v5knKO#A780#PU֪ NVH||IdggѣGf {D'wӎd #G\G > ؀ӦŨjN:ůzۭU\u,޽{  77ÇݜgrDk}-ZUVV}v.\pQXXȏ?HXX&L0HB aSwr(-Zzjơ6ŋ瞫o@D95T+0_W=u[Z5\1{Pt_햛ۺ .44~W!,S+ZRIZuRxh6w\ifpmS {JgA0.!#ju >";wd܋j }DC}$66'O {iĈxDfp}ɡ ;8{N4p0-JL >pq*ݶm <(!Q9`hICaa! QYY!!!n:7j:tPn^g֭Ѭk G`< SJ5rDEvfp,^!Cl2~'… բxgԨQ~^mtw(x1@@yD-*M=\RR >| φNll,/"Ja 믿4hRNrr{N&ѵkWkUѵ]cM ATz Qԯ^/Mj5wfuh}~嗦An/Bll,7nD!H8qb_F^͛5&QI>H(CZIwa~IMM*m={H$zx~ǰܾijMT܂>KСCuF=CNLL$//ۓ`&<_LC47{!JI4m5WQQѣGpeeexzzһwozݠ냌%=͛7-Ni3^ yxJ1ƋyQIIIa…i&N<ŋ`ٲe͖oyBht4ll &JY`pM?ΡCX~Q???v5kOyMyi׮vvv_$00y[-l5'{8A!118\J%*k֬awU@%"ɬˈE?RF6 {8Aؾ};۷T*hZñ#DEEsN&NZnJVKhh(7T*JF7tR)E\6d ?ӧ/駟8tGA.NRYYVeСDGG3ϰrJAh0KɃDHHW\.SNtqr2ju$srr Gd888XoA\Et(Z1hep5M*dBBB d&uJJJe׮]zG0:BA`` ߟFlrk׮5Ξ=KBBn{q/?ѸyD?#D0v 5HOOgСׯ78;;Ltt4sهLRiiz P! l) S4NMEE yҥF=A ەw/2sLlmmxYjC-[eee,_:vC?%FY70GP<T*ٰamڷoQzWjZV^͸qx q|Â^{-L&u6ǪApׯ_ǏpBT*G􏺫dddh"[^ԩSYx1qqquWYnAaR B̙NiӦ.Y䊹n>lDbbb:& YjseŊ8p8K/d2 R/$""dsbS tŊzCR/nk֬ J-tСשSRJB`PjŬ_̘1DB`` 6l`۶mлwo^~ebR… a۶m֮^sfowxyy5Y(7?~^Azk<+/$nkSO=et[nO_~a1o<];;;kz= ֬^Ņ^zUvM~) H$o/XX pttlr֒cڤjywLjM2K.!'OfڵĘ|/f޽c=e Ԭ Zh5WWzWRȶEzW^IZ^MӜS!B* 3gNҰ0|bkk /!CD1iҤfA=}믗?SAHoݺu~:ttΝ} n4^ϵk׈Lqq1NNN/(( 6_,ĉ_Ҭa5#9r$Æ #;;J\\\f駟*A0HBTZ*J+JJJ6,8++돕}j5+Mii):ɫ-UUUէZF7Ŕ&r9e5ךn۶*7޸ܹsxvvgNlllR Լ=_~l޼K.qF&MhN?Hj*V233曎K5`mjb<`L&O>I7ZV Q-U^^^ʐL&cŊ,YӧO3m4^~%%%VjTTTw^Ξ=VƆ^z1bĈfrA'(NRdΝ;/k"Aۓu-NNNnRUsxS_~-[oh4$$$ԩSljH^Ɂ˔}Z}j~~~>mRY=zիV^^Κ5kHJJj;,;}t?0=糚RHHA7TUUqƻ&yߒ9rwn DӱyfCFkKd oM$dTrNTmllz(GWgyRXXhR_ZҿF-T*4nrr2fzirQkRBT*ESYYih/^϶mېJ#1``ϟ޵krNj5c+ NU4lذFcǎoXmD9y$єs ?Ν;IIIAPP(dh4׏1cD o!VСC(Ztt:~[ |(7nwo#&\F믿^'˲)\\\ y]bǎIDAT4z aggG@@@Q3J]M%C\\\P(S^^D"???:vHhh(...p7l߲OgFGG7Kccc㊸bpUVVdeeLJڵkΝ;G5`r^ L2SҥK|||pqqA.#HFCAA\x;v`߿?mIs nnݺy}gWzQ3Zٶ666SOj9}+SSS?GTbvMMDll,;vÆ Wxܺu0o<=z4aa,h}OI>uo~w}ԧOOAs dhƌS_/1y_ۨT*mFii)˗/gС<<<} X]ɓ>|{{{Fmh;Ndž >}:22}t9r$ &$$pqlll~Gw+]ݸq72vXJzz:DGG|uŋ << 6₯/ `|||8YMs{wakkVT;;;C<AF… Fii)wf߾}K/ѿ8pݻwgΜ9O/_ȑ#Q*r!A`˖-oZ:YnC5꩞x bcc={6;w&::'''^|EfϞm6m7n}v"##9z(pԨQL<ɓ'T*8ΝdZVVUZFTLVz}Avvv;>HT*ѣ|ᇬZ_~ٳg`dϞ=̝;k/3k,THI뢎aÆ)lggDŽ 2d˖-㫯"22޽{cggGEET*vM~~>+V`d2 tЁ5k0j(Û'_Mk׮۷o߲AU͝;K-py̙3g͛'ꫯoݺ ͍[nQ^^ڵ3D;Wk׮K.S.''(W eeer͍{÷ɓ|رcDFF6 JTT9I)܁'1MmʁG}ݘٳk5>c Zf `H"|_`ޤ \.otaPD"!6602,wD:h6(( pǮ]ؿ?IIIL6 GGGRiwcƌ!33.3gN .h\]]t71l&Eዩ\T礥eff9ۍU6}1Z7\+۬ zHäI7n[nEVNn߿?!!!( *++ٰacǎ婧"66<9H}A&}giw=D=| P[[۠?Y $""& Th"w^oPkhBj_0vXR)sҥK{F g݌9 |M3yvyyycBwUIk׿ ??v׮]S錰0ŋ!]r^oto;iӦqa\\\#==k׮QQQAaa! `ccnnnǏgռEb swwСCh:Z999|̚5 ϳ`Lb4x"֭c֬Yb9s# xMh>>Rff?Sާ[n˗/Ϗx;'^ݵkWqhhmUOSc^z饯o~Q"g̘,lNvv6QQQ]:憽=vvvRYYIEE*\222h׮<3XP $\{ԩSiw( zI||;v޽{ DcСIII zG9_?#"7|of`B1QQQyAAA" ԩ0mp/_<744q9 GTTxzz-ЬD?PF'̙3u .--d JL"p)e===yѵk׮QTTdNv9bMJǀosxՎ0`@F``TAAA%K$OW;;Ȏ;hZ?X'zV+PCj< TrW8{VK+%%%Ihh(dddkٳRw[n{I$C#; cul+W^#Fvv6 0)dvvv57nЭ[oh{>X-on: ;wѣ9s """h߾Fׯ $&&P(۷^\\̟:9N֌,|pjDL62az=&L믿~ ġq͚5̟??D#FĞbzMv1n8gJ$6l@@@5tgp2 TD"QKYR+MIRN>$7b5=wH$TUU4Oj5 {{{5gDD/_H%ӠI$&MIJegEѐBbb"{%..0ɭ)MT*yLjO> Oy׭Q\T*i4))) .mڴ=33Ӿ L3]t)=ztaDDDUHHRT!bZ-iiixyyĹsعs'C&T*JySD¸q3f ݺu3H٧ҥK#uqttg#ׯGR#țot ˆ =G_~֊*HKK([)))-^zV=( 7d͛7"mmmϚ5+W^)С[jjUy&jÇfhwyNv[jhZd2gϞ} l1۷o&s |MeЩSMׯWolB4.sA8~cǎ~iiirYͬv~52339qɼ[&DZܹs CCCM>jJJJPՆyFs???&MVmToܸq 1 NGU9 7--m*er4`ذa͒o߾=O<#F0xf,瓒BZZYYYD"A.jh4-??? V46͈^tA\\\puuA[RR"/**׺x{؅d+&O_Rꊛ666jrss)//7)_1_S^xt ooo*3իܹ Ҿ}{4.3gz9cƌ) *vuur  Al%I)PhnݺUuGow}UUU~!y# MLvST⋼666shZMYY\|h"IFp]v3}ޢ=%DBQQ '33F͘L3x`guE!BK"e2^si̙>11(n筷ޢO>I$JKKIHH/ڵk߮[éT*n݊FaƍtS\\\5jÇ'117x9N'ׯ_-((Hhsao۞uF\\\AjjҥK[]-ͫn7TƍիW{sApttdĈ :Dz-Ν;DŽ ~`%ofj]\.gsD*69CX*M:]ƍ5]F#: [RZZIvvvR)jBii\\\#.B"fS4[Ɗ&F %\2 r9~~~&} C.RXrecpkSy-4'y]y ACNCܿꤛmj&ߢUx9~^IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Kosal.png0000644000175100001770000003563514614030416015642 0ustar00runnerdockerPNG  IHDRMbKGD IDATxw|Tuehܪ(5M6a;4١JzkFEEE5 5s@E]t}o[;qww'$&& .?+3k, @ff&|M2qqqL8EDD4k"֯[#˲NQ_;1~SRR$I_ ! 7AAA,]`/ZZ(,,ڵ+IIIՋ*)++#((Ν;ٟÀոΜ>CshHKK#.̜9_??ػgOkݽ{xii) ?E%pZ !B|RLpH,///w`0'[[ɺr2mŋ߰Νa-6z 'I!!!f%&6X.88Zͩ GAAx{{sZ߮Y](WNdef^Zd /^2YmQIWуI'#I׼>,rno[`Xh4L^7o駟ؿ?55l6s***ڢZB$ (BWe;LݓBW$I1\A[T'NˋӧH^^aaa 0/:bK NQ6o2[RVVf\YYIeeS~އBu$\,򢪪j(rQ$pU ٖto߾u]t:{^¼y5jFm m$I5YCr,VjUjvawU!!&4p1n֙N ))`:`6p:U۶c͚5/pJ#NufȲ<^Q B<:H;vgQcz-[|$I!\Wu=x ;wO߾ߟ sR.]b|8ЫW/vjO?rRg !s:n ֭o&kYBt`r,$IR^11?wI. x>ke(I;b2$)Sz!n8$IR(zxm0lڸ>sdǎ<䓜:u#Gj*j5cǍիؾmh]*`_Q؄(O !^:X@QRb]M<{^7!QǏ'ڏ!\n*2ػ={RDžl߶ͥu]599/RXXСClXޭwV[m7gwW%7']E4@$I$m+QVVFXx81$7pQ˗6g%IC׮]l_FR|||6w*eeڞkܹsddꩯw^ػw/>>>e?o^D)F 3TƔjF#ޣؚjGI6` 7Ȱtk, !^,PT&NBRݨ2T$}3p`[uゔ(&1 ,Y@=Xnˉ@shg2}}}먎lE bW@@I,_ׯkB<tB4N:9 ReYZ-!Į 󗓓qUUg϶hwh];m`X$#mЭgdd0~uJ,0,xxxн{w$}\$c///idee5,|}};|Gct5#v"<<K.tYY6q1iq m +np`\ֶpNG=$-Q ֭:^3v1|wj떵Ȳ)d[KT񡪪bȍgD. p 3aBpfߧI~JOKc }$I.q.&׋p16mXׯ%Irrxx8gk[kI~3*Ap*zD4>,u|n3h ڬvap.ί1Y^}ڠKEQ]ii26,03#'N)..&33pp׈#HII-(JݩQFj;w=9VyG a b;(g"Yf"I$I(giq +Ҡ\Fa`$I:#"iAUH4A^cmi4f…۰uK-Exf3111DvBQQxzz2j(vڅFݻ3gN[USτO8u "2RAdd$AAAэ̢7?LJJ gϞw`c+/o vGe]OUU#>bر߿cǎٕøqFڐt`(jV?xX]9&NO*,,dujgpݺuk𼿿?dggӴ4سyj]9I@_Z)S"O:š >]jaaah2ߝ,w#, fqdOo%>}z1cF"?jiza{6yVs/0^^> APլvmTޮ 2A7R]bcc2du!~0~yyy;h_W[D׳|r$Iرc2ũj""-ᄅ|rX|͊ӿe0LX,t:0`t:]?!Dc3BWGzRos/ŋ޽;'Ol5m >8` K.ct,^$:u`РAhu:Fc$⋦fԆMVXXQad .55K2}tۤ?K.NZ-3gd;Kٳ'>| fl-$ K^OʥK[R&79s =!!!DFFk`EQʚ5k5k=g{lٲ.ٰ~|S ȷ~ˤI7n\[@ T!@.F .==3gM~$I.gϞ% ~HRRׯ2n.q…FL"%IZV7sDu\TTT6M~@ښEF?ch7apPpkˬ:4ĭ~o-\7vbnә$ ѝl\Gu W]]Ͳeضm$q%>iZ=,Gh6K,K* 03WܹYIJJ"::!g}Fdd$>>>Mߤ6-$gy_=wޙ1k֬_vi$IEz`tԳغҷ~RUY:u}tpcim gX,o]O>D|_ /_~(6 󪫫IIIAѽV"T*UB^sqկ_?)11slllfFCJJ 9{,,^:f֬YO? &Ofq0* |2RN:S###,Ǿ}B:u xt !;w$!!AQYYIll,Y;vӧO_o)ےSRRB\\= m,z}lAVVVtԉ 6zK9vVԩS|'?p~Yێ,dYk !8rp-~Fs' 2Z~믿Gx"FbӦM?~ɛ,\0 u@gKZ0~x&Mرcx-;og޽ l]tȲO>w_pȐ!RBB#F ))ϟ8߿\R'&&M6N>x7gϚ#q1eʔku%^z%*++BCחӧ7o{iuS7O^{Mw9\y6m<Ш"` 3#i*Ifj:ğgBBB_s=/~=!6FIDATV,T+&e҄t4dp*CZw}׿)**rZJ1bGMMM級g"2?|s| BFʹiӜ$bg̘` 55-sriĸ8f̘f9طo'Nh32_zxxĉ|PқFF]Bۑ3g0w\n@ Rj4ONJJJ[T$33͛7d"11D6#[l!--Ei/,68QE0ͤ^IE͛yڡ ]].dgg7(SOqz竫qƱ3~gVNbh}{.1 5&&$%%ѵkf+;5dp9-26!edggc28p|%%%^3قJX,YYY(رc]ow ׏bJrAnڴzicW:3f & \MMobr)V(T1͘L&Z/V֯_oSz5>wi2iv 8Kaa!#98sssիM곴{.h4^^^(/B\|ÇK^x.={__öm4'N4hUU˱[cdffwV fndi Z>(//ӦM+XbZd4{n>S+t%99YȲ,w^r32EjmȨFe,[㉢"f3555wkj:m h㉿6]_< +Wbeo[ܜ\M!CpI.\r&HeE%Y >s,K"w 6-jHҘC!H z&~{wb޼yo[[˝f>mEDD0i$zFCIMMuق:ue˗C59fmؾ@-Cw %Ç[\矻ղzRӜIf}رcի==Y#K).g|L}ne~uBp9m.w N#I|Mm-FU-0 lܸʕ+{Λf[{۲VעkÇcwN^]o޼drw N x5mi@@h8YW3e֍G0o<:uLXX~~~}.z .q!+8q"K.m̆ 8z(;wY-S8ڄt#GXvm6ոӏh%Iݠ8hvA :YPhQ^lɓ'4i&L`ʕ^c29/{All,ׯ'++S.`0zj222|BB`547Qw+;o_|h!IdZm-T*SjNJ?p܍z8a6IHH~G}ֵ me&On]%p!|}}]:^GeĉM cpWMB85ٻj l dYf77ܱt\7"-V}o ,-\7l <bZwO{m۶)999;Oj5w}w[4Xhgu,~Ye~˓&M~X֌tF]zA1`N:Źs+VOɤt&".Fl\\ʶPZRQ9sLݘj4%IRId4ni233훇2bt:ǎ~Ϯh5jf.X^zaShIChh(<%44Fq*˗kF#}KBٴiCʥ`N;]4FQo<===W-Ώ~?lh9r999Nerrrؿ?`]ҩ̡Cnin:-n9,C||,JKKO۲,ygUǏ`䈑̜1S݆p6f1l0vi|%zm,I ,`ܹck׮s l6oin Z]x INN&== 222HNN$nCj "';I0eKKK&$$p+EEEkPTTD27K)7,uUc XdP*q?>w(N9mUUU~?'(/_rll4ˮ],Q}Rau1ev!n-68Yٳ{Wf}>}+WУG „  i .8o2f,\(xZ(Yyg2LC}QY M }||xG%gΜYol׮]Q$m۶pϔ{qˏL>{V\IZZW^ >]-e^!C^&22rseII`jwaaamq Μ93KU+qʤ: H{T*UvQQ+*;zh7n7kիkwg‹/зo:Ilc͚51UVqiN:ņ 8s _|EEEwH=˗/SZZʒ%KHJJbܹ㏜={Gh"wҥKپ}{SXow߅N6.]A2)==]mL&@Sƍ _,B ~Vor5Ԇ: `ɓBz!?MTJe}blh4h4QZZ_rr2/̜9zS;Z8!ׯGRq9bbb4|?<Xzn-ˋ%K0ydz)GO<]7o?gv"_{WT/zƎ -v%##={ /H-wyy& Zc3RQQ }||>_*\vx(VsՒNc\xI>~'{hx?~<pRIP ‹/йsgf͚hہzwf3hT?**7ҷo_74j(9ªU_'9~8Ç_A:4** e儆O]I⋬_޿fsn>}DPPdX!&&Fu^ ??< .$,,Lv_'<<! CZ-O<_}w}76_+F#& ł|-ɓ'kuԚ:IJeJ/%?!(,,d|MΰT*ݺuww9/++[I$''@bbµ rMMGHH!IrN]w݅V}??#IVs1":5t\:xiW+r .]o… h81cHMMO/,,nݺ/=#!C =N-\JJ 47gE3h ̙BfϞͧ/֛慙 6!((s^yzꅢ(r5*$%>3<<|~+iӦf_bn2:Êkp* PzVko~k[2'ZmeBB1}ѣ-q7Zg~J>cV^EUU=QoYi|R=6ww*^w[;l\ou+dpn+*BYYYb۹4F+xzz6ubܵk!!{t}]~رKۛwۜ>}ŋgɳRQQq޽zj)--mjii)hQcu٥튓o>.,*,rrؖ^u[tjU'3ϸGg6wl߾"2QQQ|QRHOOЦz9}tbbbw<Ӏ-aF-[H|?j!%%%np?`aa*;-ٓcǎ1߂[Hrrˌ~uNJKddf% >##Cue:w&,,?PeUV,˼***|vv6-[&Ξ9KiiúlK0 L& ΕTHhS]ow ۛIns 9pvY~lݺkkL5;+WпR]F! ޽{;eeeRU5hv{zj'wFARª 6ȶU|?FDDD"`si4ep cАPjjj8z̘1|aðٳAzMM W\q2t6ö#ܮ`/C_WrAAA;Eu_l?L5& 1F8v999+ܮTz<<<B:aIH5ī=_ G#2z-4 ˖-sd4r)~H~ܵkKBx ݲlgdrV8q"ͳbpAQYYJ5@EE]vmtUovjC`Źɓ'b zd0rAq !((( 99sN<ĉ[]ɓ'k\XxX7|Kpz'KJJ$''uV.F4;;Fhhhg0u_b=vӧOر֯_رc666s={vصkD۷O ''ge˖ѿGz*3g #FqxŖ-[MMMAUU $$$ //O=ַ տe5DEE `0(kq\SKdddP^^n/q=,ǒ$L&ϟ#0ZCC,##CMMMʇ-clzwԄhǣ@QYZZ***dٳgŋXf n݊iӦ|IIIHNNFmm-@QQ666>|8DEE[mpppp{},& &'BKKSAvp8EEA4@9:: 3nhhůVUU@uu|=zwjj$\\\"wSNgOcee%N<)𥔐ӧOSbk׮4OX,^<+..Ft"22+VP?h[[[")) ӧO===(((TUU !++ ^0|N w$$$( &]dddJ{gFC޺uk[xTtRAvv6B`ܹAW\Vp1455ATTWʕ+7q۷,DDD?`HOOx...PUU$''øpX,=u <ʸ|2m%aQQQĀ0l0p\T*x=:} йz-+VSQQ31 ommmDFF .̙___!-- )))իWصkjjjPSlܹsqy?tok NZZ6lCRRϞ=2***p5444رc2d@Z] cmm3!!AݻAQND+33S@l+Ϻ:Cc=t:, @48889''jff}d!-mHșÇI9s"##Q^^PcĈ8B7DEECݻwܹsy&yUS\@5#%֬Y˗+W& q/ UV˗/1pO`ؐ3pO#111rrrNg']%yƦ GDDqfffb׮f߱#raffOdb֬Y!^xE 033Ɛ!C`ooX~=y[?~̿׌p5k 8s ֭[ccc~ /_˗aoo\tү_YfhhA6ъ$ Z߿@aaa{ߐsss{n :ƍãG \##''ŸqpM( ,ԗ^cp!!!BFk.c?[WWWB <455ѯ_鋺AѿB]]$йFJJ C\\w?b޽ 8q۷oGaa!4S󣪪 QQQ SL3|||%1ӦM9k ϣF(Dh\ TΝ KKKXYY }񈏏{q hGJHH@LL !!!ƍAșƠA5558pӦMk7 Khjj*N#((7nDiiG E3ܽ{FFF044Ă ȇ@{NNN͛077;233kk돬:,X޽CBByNVVV000FlTwr!''c޼y`0@bb"RRRPXXbՑ_ EEEHIIASS077%@v1zk\.l6[`Fpbjjjvy=L@\м4x`l{oF`` fϞ3gB… Vw166Fcc#tR466UUUd_~A,X={`IIIL4 789_ 44={6jkk )))t;wǎJ OOOC\\`0ptt쑬{f1}t?Ǔ'O Ν;Xp!]˗6v MMMɓ'`0NxJK,'@Q\\Rخ]ŋիxT0G~m۶ bb7/ಳq%/^" &&EEEP(ˣo߾dR Dqq1l6 t:QPP///̛7FFFꛜ!CS۷/P^^hCdd${[7v(JS>|X 1Upp@IIIxxxt؀`m۶Z1rȔn h^ey&dee)c{H1X 'NVUUAZZ2d­իW;h.=&$$`ժU77)333n߾vPUU? wnp=v0 SP-**ڙ=9##C뮣0`@A֯Aۧhjjb͚5BFFRSS;4 ^n{~Xsuu%W>Bi]C?رcɴaXFdx))OOނlmmakkK466 \_111PTv)oFGzz:*?o߾p/{npxQRR,}2Xo` rx~Wvz lA .++ dJ>\\\%H&: LȦP(B'z7o,#BH;tddd$Զv\./rI }}׸ya۷oW^{֓3 <{xA;_i&//׮]#,ccc"''4KӞ?ׯ_...ɦ?߿?QThhh 555'Tp\ܿɓ'ϟ{,#tʙ3g<ٳ!!!,,,6:tCM yyyx!8^JjO|Ezm<33gP]]-)ٱcQBBHyrrrBBBTTT9r1}۶mg̴B .??:t(8+!ͯP!˅f@II {$@{lݺի<ܸqqqq'NH[`U :eC28[naժU/%%k͛BuJͰX,wڵk1o16c 2F)SOo孲P(Y޺u_VTTP! -- |6m”)SJKKhV]z͛[U b̘1jkooԮWі8έ[?-,, }vu??W)))m |o߾ھh"$&&BCC˖-ҽM4ƌdee:hpL&j#--ݪѥ5Z+%5[IPΞ=+tN'''>|ׇsp ,@rrr]28uu}EvGGN1bGU: 755Ezzzaccw l;v,0h \t /^lufqNP[v_1h ܺu Wn[0hРסcccddd`ݺu077G>} %%:h4̙3hllĸqK"B_kY?~\t%jpi4EJJ &&&Uڹ׮]Xd abbMMV%fAYY<t~ psksg"66[niz%SLA@@͛/_"++ fϞ,ۗWx[Q+<2c R5ICCMMMJQSNMبgϞDMHHӧk!  ͔dpT* ,%KP[[˗ <p8駟p¯q|% IDAT"##SNTTT ** . lcݺu=vaÆ BCCq%xyy&NrAlE>@D ׯ_i٦KXh~G9rPSSCii)ݻׯ_wJU۷o1o<@LL }6 8x 0|xKfVJJʳrLOyヒPꢼ\##F?BBBZ}>|8 EEV L&(..͛7QYY {{{ƍ044DJJ ֮][?xA}PZZ*5k֬?s!^E,sq\}dq.FL+vڅիW5:4{EEEann.P%044ljts^ tcO^V/V6:mp8y$ۇ رbbbʕ+PVVժi4tt?s;{wEҐJECC)h8q݋͛7whKk׮#OЏBIHH`ҥ`X@ff&?~Loggccc(++z+rhjj˅Xy!qՑ>'EQYJJ MMM]386SNaÆ mݺ8y$6op\!<<\*&&CbԨQ$!!MMMR恇> EQQQȦ200l|AAA7N7'OѣG8p ,77@q!9sFȃf3oHJJ(@WQQxxx‚,5TZZJ&l|"""rssqY߿K9sq9{<:4±l<~~~]~KII b̘1& ɓ'CLLG?%$$Chii!((;v,&Nة,-EEE5 7nt>zsw Xd YTJ wS˃\\\ՙSO>(((A0uT?~<ЀwF())!++ CCCU ;i$hhh@BBt:=B~~>`ccө~zjWgATTTJ Wһ'赵xm18yQoȑ#TUUajj;88~S;$TL}o-ck O?;s̙ީ]|?݇\y_#WVo) iz#l;v Faa!)M:L6kO 8n߾-%.wuI?Wڝtܹsho߮XNKG@SSRRRضm樄#]NKKC]]ݿ>d)x ^[U۴iQ```VvvjXX[nRAWW?P䁛@|ƶm:&CEdddyQItUm߾]Ν;岏?>ɓ'`aҤI`ĉGV%;5551n8ϕ+WzDKA] EEE߇@.%?Bdl6 v &Yf˫#Frrmziii(**Çۯ^ lOKKCLLLH{< .11zҥ>>+W89(\v pqqY.]rnbb@aa!uCTT:::(--Exx8"066'+|% {{{vرmig8[[ۙEEEGGG[۷oǯGa077>|c,{㔎 YTT$$U޾} ;;;|~~~2e n߾y޽{ȑ#Kꭌ=cAxYYYG |||0i$L81--[,kIwXX[[7nĢEzjt$$$`РA=(// o5_b=99yY|}}[fs_)V[&kX MMMAPP.] SSS())AZZÇQ[[ۣ_::t⠣e56C;"~…UgΜ̙3t]+VѣG?noJ$''#00v\.\Ku)m-2.]ۓ`٨Dnn.bcc9st_}1c ""C1[M{3/^蔱r JH)Ox(~Oo!u~EDD&W^8t<< ,[ )))#],X0 lݺ>DUULLL`hh73߿oSCdgght(&իWɓ'wsm!)))$cԩByy9>|̚5 'NDII ,,,m6L2hNj/K.`Xh(**+APPPqaΜ9_55^cl:ѡ.##yyy' #77m:"M߂BOO_z5V^ ###455!??\.cǎŏ?أ3޽G!spp8Icx$4qQi++*COI%JONq_ۡ|_z~U`tW5:@cc@xs%12VUUU`R,HNNMI/^opV~]QFQn߾vÆ 3<ϛ@ɡT*k׮%p88z(!** 6 ;w / ..)St)us۷zTWW DMbbSNQN>_~E$--Gr`;¨Q@p6|xeee†L:wޅF >-mmmfpp5"##ajj𡬬 ???VAAUUU:mȰcjp8y$X,Z<}O>!){ݻ{%bի:NGhh("##b  Z]]p( h/kЀ.oUU<TWW =zSzIJJ%R]]}9tx) ---L0!!!5j&M@KK DMM \ܿϞ=äIz<Fપp1g %%%իW ++ qqqٳֈ222HKKx.ѣGn:!~Aݽ{B(Q(455!Al LEFFpJ)''' 4h4;:th[FߺuwN5__---jyy9ΝtʕR(14 YYYdKaa!QVV#0nرc1f?~666:01 ٳƶl2ݻW fN޽{A0k,lڴ ܸqسgΝ+e#snݺVjkk'X,%^РbMM3r oZZڤbڵBqH|077tuu P`011 T$&&B`000@NN"""4׻077FCHHܙ~8~߿/Yx1N>- $$$@WWWAVEEVVVx/_.*7FQZj/(Jccc#88 """RVVNAZZ-[H)۷RLMMQ]]M!g6l0#;;[y=Ry:@P@R? Xd v܉pɓ'ӧ5 <[oqqqq1p}RQQQxGmDEE)߿/ _Fcc@1yyp ,Zdl@0`( L&2رl2@^^1$%%4qD^ѲGcyxxp89r>77~.\XZR+9$,;;>L߿ѣGI]}ݻ,M%"`pF|F!A5:::u-ZU  NDD𨯯@EEL8p/^+RJJJBMM gϞkdC IDAT7޼yI&F˗p.A,--ܻw?P\\\Eqq1?Hܿ{BpS07|Ѥw…HMM"// L<FFFϱw^ۗlur~ʕ+`Xt:QQQ=z4JJJuV Ϟ=3f ={zZիE`` ~/:>9C!!!077h~Grr2QUUG |tVwwAbb"3gСCEuu5JKKRRR`0Fvv6틺:`ΝHLlvwݻwiӦu: O]]`YYǜ9s(yyydd̘1>}:b !!&e˖Nرc'e!rrr}w # ԌЀ6~Gr[~PQQ mK.Űa>iIk BMM BBBh"`…Fcc#PQQ+++ <C^^"""1c( Ν MMMر?3,v{{Nn@֖bgg)S֝y=bccɟ@0ٓNrkjj  W`mh>i+XKh#F@VV~~~prrBnn.0l0E߾}* p8Ԁ` //x%l#77NNN݊~M311ט,CBB. O>>?>Q__///XdɘMU~7D"t:F# mիWSVVFqq1tvvr=._ Hhllb!H$"11(- ^|ĉٱcׯӜ9sLddPP<`LL NLрs:wݼňQ[̣p8}:& 5BKdŊM[[z@F#n$]u:P]]MUU۷RdΝ;.~怾>z=DFFP(cʔ)BcjVV999vV+6p:~Fz{{INNH$(J& 0"W$JQ(̜9 Ckk"slذ_0̈́fQըT*dBʦN[[F@uu_ӗ{, sacTJ~~>HWkw%W򢲲rss)))A&\.].o߾ǏGvv6t:J%Ϟ=QKKKD" #WVVj1LImJJJ ү1DvvV EEEeqF$  \.gj^h444xFs۶mdffzbr[ą X`R[l0(rJ9Byy9Vգ!s}tΟ?\RRRdm٨lٲ\vm *3O/H XNJEEo޼az҈&00ooor9w W^Á?999CBBl__ߟoܸ.ńGXX>>> 1XVV+455҂o 33󗈈'J-[`X0 ԠFNRtRj6&O14|/^jnnN3 .]M6͹pŽ_9(zCq)O-'`6*/~97FA&kc΄ xk2,ϡ;w lsChՐJO'MtKzz-~deƕ DLg}p>V19XzMgIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Letter.png0000644000175100001770000001773014614030416016024 0ustar00runnerdockerPNG  IHDRMbKGDIDATxyxT?ΒL2 Y{* $QUЪEDEi-j/ĭVEi Њl%,*T@dB2$3sed&yy;s9onsTTB .t!Mљ A~nbGru NEQT(*8EQ(:  thC@xzrrrZE???F#b~ϴ싯I@(b'O,% 2 #<kSf۶mH3""nLz9:[nu]UUšC8w _~ɂ |iJ8eـ T7x_nQȂ!7wMQVVƆ \ע(ܹsjݗOFaȐ!KNN_Gn#ITWW+S\8&u_\L jn:V+AsQ]Im Ԩu8H r HbkH ȃ>Y>JJJ=YfqWz]>""?Cn]+ژp!tĉ :]^u3LAH pRƴ5`jӧOW_Fz4HFpуE޽{b#˜q$X YRhb^i 젡UV4HEE6 '"(K3BGNL_Hc6w7lg)$I4 ̛7& VPfjאo~`ĈF}4NZ-.ݗ;*gNh4,ݻwn<]Vp(IDDZ5Ppp6n!\t3}r߭a~>G4}X,e?̢EXd ^{Ktv́|mF!WI7RЊ<9gv $I76cu.+zMFll$]v]2hOE^ *N>. @RRR/ӧٻwo*r;yFѣ,D;pGΡX5dW _b2ڕU#8xbccO_y FZd}D+颀?xeɮ)V嗿%( |x<@RRwA~~>fٗEIC'q"k8"/Ⱦf ckIX,]u2d:ݥXF[Hnri /X < _GW:Gvo1|pjZv;gΜaϞ=w N1bĈFHp'P%7stI &<֘9s&AAAA$I|W溝U'8kA$;"ghܼ:'.t?#[|MMM ݻwO>Ji\|#/ Gva ׀ǸT @\9]kPnݘ3gkV]L1L8zIh{ nۼ^g>EʀfR7WlȢ-KLL$116EiR04%8y򤫙Hwf;GG{94WHpL6pTNV{3X,t޶CCCTl5gC!I:zMs9K!4#v3HpEpp" djt:׫Çvڎh܌/.<\tt4m733SIOFRR)))0rH`nɥS!T9][b7G}e&MbeX/9svUn+&ƫYnΝsY8 |yXKek9RgzTi4HKKkfXHKK#%%E鹤,zW8y#GtƯy.㤦r 7Fqq1lݺ6R@ӹr(R]]J* y93KM[˵գGf̘ɓ'ٻw˗՚G;$ɗǣJMAĕ'A(;H%Fs8wE+|5MG<(--u l6eee?~KQm1^B؀ǐCڄ*@x+kmp2i$%Mknzڡchp8\S|/~ h;L&I49swu?CSRDK>t%%%WRlvWDɄ ncmz/#Gz?d'N ?~իO:g6YreXVnJFF7x#F4[Q0dͰa& ѻO*=+f#$$0eOȑ#yg曛iw{rܹ7|>))); ^η7P^^Ζ-[\p^z%jkkIOOgСʴӑ澙$I9sƣrс-++˧~ʬYO*ܹ'xwy|Il6f#M˭>\޽=*kfUUUvypƌ3`0Vb0qðaØ>}:%%%|G,^5p5V.99٣r:Qk2xxdd[ 6Wӭ[7t:]A&zȑ#[DQ$))xgcv>}a4IMMJZ֭[G1i:u*#FBx#G뮨GVX0wE6*IPUU^߮h]Q>}:w "00Q dРAw}L:]})4۷899Yw=t+))is X%ĹN]Ԁxx $I~͛qߝL&nŋصkzsm)))Y-bGպ DV\`d20c ZR֭[8nܸaN}+gV>]vQtmmmŚ5kJv=ۥY-tΝ; S ݺuW_%((l6\pZ%ܩo@厴!əSN 9uT?CNp(D3zhʚt`Pwku %6ปi<&883 (TESQUp* NEQb] M;NEQT(*8EQ(TESQ:EɅ ZQ!ajddAb$٭VjF]-?$$$`Z)))a„ Mw;F#66vz|tt/f̘9zhK{x'N_]v=eb4]cZq8׏>}ڜmc=o~&)--%++W^yVKZZmD'$$|>1))I PYYÇp.'&&{˖-x |%b|𤋮$## &NΝ;yj.'w;V\EII ˖-;U[[8;((([nz衄d}zzz+Ҷo^X\\s{'--͵_ѣ;w.Ǐgeƌ]n;v#Ξ={8~8ƍv1W6==TT999??"畖RZZ ۼy~qwŽ=bqq@/X,v&Oz;vqFybbb3g{q^*xu~ƌСC9}4?;v7h#FILLV+O?tv^^i ˨?w>`GvvCE/^3::J{9AAA1~cǒƸ^\NN:ٳgS^^/M7ݤ?u]Q~ayIIt VZ0l01((hMm^zq1@+wx'^QCyy9?#?86K2vXJHH`۶m61iQAAA3|h kl6۶mcҥt:^|E Ԩ ,&&ȣ@k՟?.b5jT^O񍙭SSS۴X>a[p۶m$""5k֠q6 1k 9w}}~w,,l/l:kn@QsTvR?>#F`HAA4hz=,[ ~3gPV꼫8rȑ*Ht:w\lnrAtt4aaaddd3x g?0~xl_TTĺuO>]tٳgwk&=3ӗD\\6mB$1v\]]֭f5[c]˔DQƶG~~=8-(((DFQSSSUSSsYZCmygŵkݰaêO??aQWWrDq),,p]""-Z"IeNM3>7nu . v,Yb4y$\jEѴme۩mj ץ뉋#&& :XhnRٳ36o<{9aÆsaZ 4#h4 .Z[Ayy!o7n\lZSmWWC\c+**|]jkQ鴨SQUp*ҩt=G JIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Libra.png0000644000175100001770000002325614614030416015616 0ustar00runnerdockerPNG  IHDRMbKGD IDATx}yp{Ԍftnɲ8`S$ڐl¦p'`' umf@(ɂs:*WmMecv7NؖdҜ=6=$W5%Mϼ>>Ѩ *'0Fd:,aۍ^h*XZ(\U0`Z /Aq.5+ 7FPdx`([oCUUH$=BȚL&<:/_^t۷_CCCbث[l| 7ܰ{ll===O4M6YyUU,'d{EiuT[W-rg20p!wKwdNEftL @u, byBu\.D"㜁<arJtm۶z! r\رCE7 s|4{_D(($Iu<۾WYX8s麎%1.v٦(}u]t8GQf$ɫDQ ;j}طoٛnx |o>|[lRy_*z_e;/XrnAUU{Ӈ3mυ[h4$lw6%J^ Ѩ` 7pTŰt&  \Hx<ǎ9rˑ#GtO&PUCCCkZ[[\z`x9u]G6Eooq̲eqt]iPʢKiڶP(әd555fk:>F$Iؾ}oee˖Va>I0[믿"oM8n^>pQL" !&/eD(@vQSSS4]`Jפj0N7MwN*jNH$yn4M[7>>2+zAB 24bL&ށ($ b``###d2yݧ,TpݨB,uhmmEccc"<<<@ؼt߳gϩ-•(Lv0Isp/˲+,C<Y ׬p<#JA4 e  Q[[kw( k@ p8 el'>?E4~tuuaŊp8Ϟ=oRtgezh4<绷nz NO;uX,v8J5O0<:tP<yEQ(x>Ovsϑ$K&E7o822z{{f.M+Vnkk /p09%I0D"C"<2(PA?~ܺ_6]$8ß"֋(A~lسgϛܹsgFKIl/L^$a1妉D"MX(>,Gy%IªUpт}_q ! z|YY83̊E;dqI$)%g17gYiۅ*ptʖ +S827ScJY <+$G@dtݿ+beo-;elvVXX,Vye4﹐b .Jqbx<ŸsO NQ9M;Q82Z*ݻϲ,bN& b^8;,tQ*ɋ6,Q33X50y=A</)*$mzP[[k露S8٩pdȲ``0xÇ)˲f+thiiA tlY).V'xew:y8_,[7N$dY[Rr$)c5Lb=P X˲l}`G-+'R_V.78㏿?)8pg"_UU7epv|7sV,+UUV֍a-\֭vhlȢr0̤I{I( ,dY6_)!IRTsqm] `9)rNiI(EQtQ8*Izu\]O>RȦ*EQ`Hh%m*IҤAª,Ƃ%+( d(s<#BUUHd b$/l۷oȲr:uLXC!˲($D3>>=s^3>nq*9 7U 8!H8KL+wx<~(Mӌ\M6]בL&C(j\Oټyy'^/B8EQHH$y`r5ڈP+3_d2u]h,;/,P(<^ R:_nt<*jO9AUU$IsQSS 2mݺT*u,IQzlll7n2EQ;zꩼ2UR.2455Mە:N>8*FFF02Y&a|zw,I۶m*HWp8J{zz)oկvs˖-uq1 #a3DN8QTu֫Ahy~F_<ρ7on^y+\}}xaZ||G2S`IJ0M[nӺp\x2ȪT*p Z.̀б>Sip:hnn. o_i%u`dd6mU$o((ε(. 4>Pz;#?mW( xy[Ξ=;™Y@`t#LZP( Μ9c\عsg$I~ٳggls1Kɲjy+\OO=:EX3?v|,?$iƇt:0;L]vp/lsu"K8Ckk+R^y$IiR`V(RD;dYF(vdJ40H̙3`Uo֮}Lւ/i˹Zn.`|!x -U_NQqr&I`򎍍&&nORv4-SN$I0۠pf9 l[8P]]l6kk:˲K:4Blfɓ'100Y1444i?J!W9f?`YMWWW?WWW:tKO:L!pm]qqc(ʴCxBfmһr㙳[$ OE]1p!IRzx[H&?SUuN|eKpOp.| iy1p曯eqn:^Ȳܣ mD"w vK|@ ^ÌضmU?g"r{l~,) W3+Rn0LIݒm۶](OpKOOH#ғlgN9p嗑s"-jzTU=DZN<9Eٞ$;|rinۈ%?yϲl@i_۷=}Е nl+DWW.ȔuK:GӴmjzgҋ]>RH$o|W9VXbڵX~=׫ M ’m4 `4@EHYR6s8qC6eA$|Y!"E1J L|X,z?K(`hooG<d(2.P:@(Z( .^Jt:}톮Eq.J4ms㟽kJoI/P1sͥpŢ'AH/2%yÜ_kV+Sab17L-1HA\}OHy TXR8EQT3TJ f!bK^(J-* W7B0k*yEE*WTyEE*WTyEE*WphhP(j~0 $  |y#⛙L;KbeY\z`Y JB@( 0^___#w}wQ) ,5UR_c(…B9&FػwEQ,hA@oo&@ NLl6k q$|p8VeUd_(jg4?dA80؛BAX $nN{{{ՅWzСE"zsq8>> }ovڕz!p:X|9VZ5i-/tʒ$رcbyö=Wlnnnч(0 e.v\?ߵkW{REQ\0e˲p\B+Q8BIaK{OwvvI9( 4Mv`b=_bݺu#@oR( Tjq.`Y~_\Hgggs:"#D;vآXp]vٌ B8EQ(\h،3e9X%;rGZZZ[bEL,! /ME/h˲袋fUe$X PeFu By/S}Χ:f87™UJ(k֬1Kj\_ Mf]J0¼s* /UVu=뺥PEQqfMXz2R)EUMrzA^hnnFcccU᪪Yfl,#N#LfNǘ(:KhSWWիWZDJO,uN4d24t8nn|>444 chhhN0kG.|t]G:N t:}RZ*iP[[;r.ʨ:^/,R$α+, YJ,vW|7^N~ppo~C=tEuuϪ *ď*|9].-[qPGez.(s0S ̧( MMMx,;Li)<隚fN TUE@l |>ߴ#ӥǹnR-H]4ɠy'=W755=|j p8lQlfC}eDH%kQЋ=W-[_VX8WaSѽ{;j2|b"&fv%ERl+O~ ;::vuu5YRK6B0luL&35! c||ӮQ---֬Y4<|x?S@ c``91ldYF"qӎPiN>mvX.l)\ XgaȎ;lQA6;cxu[)皦!L8Ri Pz{/9h[abMӜP,qi2+IТ("3c3lPہ Nc"r$#Eqdj gϞ5DNu CUU,_ܘ K/=q%q-`EQHkx<]v=t=XXf]Fmd#u^9C]]$AXR~QWW'OZX$(]:Fgg'"%K/owwwTWW4 lQv`Y~۬ jjj~(D6dzdFDQE0Ļk{Kxk>KUu-Q[Ammz񅀼KԩSEYaڡ.U4 S(g'ݖTP$,(lmтaqcJu4mdܘ1oWh/-)\ooCCC?!LK DQf-wӧnя"H Jĉ F]_u=(3w޽\i@WWs6lX RER9y`fx׭[%\DwwWӟj>f/tOOϟ5 "D|Ѝ=]]]&gϞw+2&jkk]Pl+EQE]]jjj uHjӻᄏqmnjMMM/˲}=q(rRt4|#=)hmmEcc㤕캮(dٲuuu+M>mmm `,(\.WZ$tNJH@QyUIh$O񠻻 J/ HF2Y_:-[{H,-4xۿ 󑕱csg9sd2뺮g2_J.B{v@kk+<Ϥtva={RnppWuNnY!xꩧB}^w ??=*4Mo|7iii%I۷Oݻw{^UUKwlٲDiz((Q/9d cؔy P^iTĉ:tݓ({zz n@Uբthiiiy~ڵ$u=EQAmذA_s̎ڐyotLs%ۙrz~,˽4M?N:W_}kX/pR:.k֬>!MyVQNj^ƍ|SUuGMMM-D=Ӈ_קDkjj555>}Xzm}SI y.H(p&f$+gB2,=))< @P **^yBB|>x(Hu3ƌ+%%EUTT\n>~@ Xnݺzt:%^` ]x|leeS,˾*_ܻviӦj5Q]]mcYvIPP6o<`x<)vtq.\׋,$''#v]pu{60L @Z-T*U2QU7EQB! A2Tq!$I:-^ws{(T2;;Wx6'JYP+ 0:>ϐ^zꫯ`t]pyJC q,D*I¯뒱vO['o6|8QƑ$ ?wJjj*cEnrz8~8vAQ80HKKÐ!CT*_bҥ(--hB~>'N@NN|>_j$''cPMKN&!''ߠj!IR@^r H@ 2t8n?MBL"I2 Ҋx* l0EQ7DEEΝk|gKJJV#ZejǎÉ'0zh >~v. 8v R \@ ^P@ٳYYY߿?F Ӊ?~#GİaKNP{ ЧOĄ{Pou^.tŒ%KPZzS(Çur9RRRtYYY7q~H@L&c|>_$ik j\NTTiQ_\{,z.] c3!!F999PT!!pۍ%K ^ޔFV#>>8z(n7&MT]ӠtR\pmV$~TUUA$y睨m s5ʢVhP,2 t50#@PMӏYz]&0oXnCݗkWaa!***h"\.5*g ())Auu}r $I6mQۮF J1118s .]TKp!rtMضm;dzç$Iu 7o(H3l6믗9sfy2Q&AT"""z8B٬Cqq nZr<%(V;h4ssskPsvڅ[o^%%%2 @{AFFfaԨQhdl 0 L&v܉+\{(ԩSP(0c L<cƌ!C^z!)) IIIHLLD=`ZAfΜQ̣h0m4JZZ(A"I( }TTOL&c6 t$Mc@P<ӷo_˲!+4e2ٚGz<HoA9bfko !SRvv6Bfۍ>} -id2xz\3JR A$T*z= z=z=Z-j5d2Y@c@Z *ʗBE@1͠iz8$I$),ˇX,C üj(*C>tTVVG`Y M.́ d2T*<'e~\1D8>}z<u G4zujj)G$,;:%%%Fy,+ȹ\cz=l6[G$<&NC30?޷wў!5t]'At\233AK8HOOGEEo04}7 t:1%%E%IRؓ"I @ Ça (j]2A\9µvH 8<$ &ȁ`^hh͆B:@eeeEc|>$I՚ >ǏodWk (jeY~~=^5a !5e%oShZeeeCee%@T#iL&BvCAtg"dAAΜ9A4F#f3!.]d5C8˅m۶aԨQn=D~?J%>c,[ Z3R#ƭ ӉR$''C@iii"UJ%222ݻ7jjj,t:q~{[e0l2/GME4Za_nnԩS1pfkpׯӡP]]a5|p>r>nN! 7kZ6B&$vi4vH w|ec Bdddk/DQR HHHA.{~'Żヒ8l6䄿ܺ=\sP(Xr% ¯N>}CFFc0PUUχ0 aZ0,r :Ҿ=z111d(++nGEEnwx.Z !wL&ZXEBBBuwy•555ZPF %%xO  $Ix<8ubcc=]hg[C`Mr 1kjjt:|.K8ߏY!4 ᷩP /AHrn$)(Z&eA hIyǁ8y>Oy%I2eٵ(nС <#(,,ٳgqi,G !OCB=0˲dǤIע.%%ѦL"uD9CJk@qorf{ Q&ITeY@;dGNIHHHg7s87S\aVh`4۵.$@M/~0 ޱtEqEA\͊JVX!upݸ&\7( ׍+nu㊢p?3l6Μ9ӤO Bq"aGv: 3o~sDž T2B񗘘Jr-4=d2|EPl)*&ݎ#99عU:)iiiܹs# 6[T0PR}pM7YB@dgWaO$I(,,DIqd2z#..3w"@ӅㅴD$A`4ĝ;w3fv5Vd$YA@ (t_}S&ó< VC۱wz7#""vZ ҥKӧϕ\VVw̙cUBBB8υR$c4FÑZ]]=n9T< vv}w|(k,Xo5xsfMik~,_W̘u}7AXx1V\ ǃ8L< ;q>|w]wZ.cĉK(2W*Mn۔EQ/Rqp~5vl (+^$)LO?v=(޽III8q"\.rr.MiizL\\'NTf5 5OHHhア(hZ333{Tur?hE\7m*̖(xvBcXF8$YQZZڞji;wHJJ\.G^cTUUu+wovSiii1$IBӡo߾zѸT&m*=vf@WQlZ J. C*++~ ><鐘ԋ!F r 4m\.GBB222rL&[ӚkE8Q@4xʊANԱAX)S4!aRĞ={p1ٴr111JJ5[:]38pe7C%dh^4g'`ʔ)M4 ˅}$miڢRHeaÂ6I&i`k{m^`xHLLlO5݋8zuŚr9bccqȑF9:ArPχcbƌu|6Ajd˞&W+CÒiVFfg#Fw$}G~~>JJJ0zz‒$رcزeKgX3bbb'$$ b &&&Z ^EQĉM0$EQܳ$mի"VL6]!:'x0wOBJ^⚁_%Kf g,d%f3֮]i*ŋj&)zp8'K$Hd2d6w^ wmžGQ@A/'MaE Ae,]n;qWnn.ARRЪVzgaΜ9jEQs Ft BB@ Ъ(z| M.}vl\b&p~HAI⏯!`ӧw7bSUDZcǐh={6|a :4ԿF)e2 Ο?F6@hޘ8qQ!I\Z@p(x_x>54hٳR&5)In7***PPPPSQQ/½/ex'hh݇v~:󑚚ftr9f3@p\/~w!J 9r>hFWC=0r ñ,n z$B h4j(2jHIJ0QV_Μ9d555z8._VMιڈ,Ć ^7nYEӑǹ\ݨojϛ7/i=i%𫶉p-`ǔIck 4z~L; ,_c ы\t zJ4M#y0PUU$z+^;vi.ؾ}{q^yE1,X aRE$ilh5AO}ϚV$R!1{$,w~soV333aT*r ÄEBJNqE80)Bݪ3g`ذaPTl+FA>|m[P(OKK3u杺=(-GE68TWW_UU*p 0 lTUU{ПB{Clˡh0uTl޼@^P(,|>jjjPSS1Y G ;wIII(jP(\gB^F)-88ksNGJK!H?T/5XyDyߪq>A6l Á %5 F޽{ ̟?gϞٳgv>I^ ^q p<ٳ?=!B^RRR/oDk06UBiAEi4dG~™_H$dNWZԩS]sec AӧO, z=@ r+XQIFp-Nb -Ggl+ju8n5q;I-ڻѥ@W݆p>3~n=\7( ׍+nu㊢pݸh mhFb]Td띅K,ǎj%jÆxa^$띁}{ }Rb/s7.妛)}6??1;*|w|lI$; ǃ(|utw߾zJrضmnfDEE!??ᨑrbM]G_1B{z-H7'=a)ˢƭhzGq>'11Q0u{4}WCII V+, ܄M4 AhVKl2s~GNm('KpIQVIwt)>'b{&g~/>v%Zu #%%UUUdžw2 vsY©3Oq(F_zyhg2;oQfIn0h[Xo/XW;w`ΔH1<;wl$I6YmݑY©T*^o $Qs棵8y* }3UXFe;IXοa15Q*X<8zHgWea6Q\\b*P8y{/K8RU*@pV֛/-uFvlah ܷe|7h/E^-1/_ ?Abb"Ν;w4 @N#\C'&$$Bx 2ǎB*9B FEx^c|UZL3iUXo+Qqm xA=~Obʊǰo}ƍ;v4K:ߏL6r[g]UZLiv8uu@0,[4'"Ѭz[t:q |?|B$RA _P=V!!g<~^|N&`Fyy9p%dggcرHOoI©T9> V k۞uBGf'Zpָ4*MEQuK[_ AW;M $br7^R;UXu=ah34<>:t* q%n(J|wذaޖ;ДkKf6Y޼_kC Ixý r.Ce@7*'IcG ktyTTVc]0Fd+))All,x.{.Mj8]߆0GG[>u\Ѐ 51U8q 6~fϾ^^˽MnE(SjbQ|[4g` 7Ϸ4rc?ݬJJp:<~ n\<ʐ 6nM !dp֚`#bYG7 j,\0d?pOMm0 (3A٦V7^~o %2ӋwH_~C`4 b8CYY0tPKP)d#P۶notk++DIHӼgеE(:fh$V$&&СxJ!ÉgP$"!"8B.C>i0]uS!#---8QPXXq/(Yp 9;ba2x@Ѝ!Idסq++lpشԔ;&OCo%dˉ_l$ <}lQKAFAu.۾CBBBGfPVVe J%AT*; ޢ'lB:e- 󯖗5XOI5Dmb~F7)~Ț##4)~?lق1$RGGGcӦMNpe/?1mƼ_yfIcĺwpy$RSX^HUhRb=˻]7_ĹsPUAAAKI =0aP\)]`Y֭Ce2Jdš5kt6Bh4S./ZY^^Yp8+ʂv{ meBi9V~cV8-bK4*ˍNmtHO0MHR6@Uk6n\PM8vZ 111z\HBA0 WƲeڴxhnivd!x<^TTV֓XjsLW(+}PPBZZPD#AQϣʁ3.`!B_iiiѣG{ LɄ |GXdI}[0̠~}z :ڥj^ :E#~̘p=U7nHx+)1q閥D%vBjj*z٦,AdᐦoSNmյm6>E~$û ְ("D- pVԸPYY)&S$ְ-~Whk$-}WWFB$, ۍUi1VW@oC;Y6nc'𮮾}V YrhZB4DA$4B*"L4/, I}gZ{n̘1Nb~[ni9M4s,hCb ޴O>nwخFJfB)mHZqqqXf#s)3AԞCԊ]CDփh?7}4% "&&CBPոpBR!p*r^$.;pKj#Nj<^4̍q>; džM[pt89҄( =3>=bVPr/>@0?~4V5,w=̑Fp, Ÿ_"+Q^QрC3p4Яkl@0j {*VBhH+nLޑSM=~8::*w߶Ha4ŏLt>m{͊vn|0F蠐Q(-WUs8hFql޴1L2哏UҨ(-@XۮvtKHH;lׯ_)SO:42} CoۏT!1Ə\Lxf\ q8gm8>< _/طowJIݻI"g\lrA1A>\uft8\pYYYČόi9wF oբ^/.js17fɕ<> lKK˞,//g8u橲WEQK{垿^HHᴭұ$TE矙8gOqոW<4C:4/`5ߨދ2=\oav8~ {AL? gΞņaڬ;(ҨT*UJ(C>PQ/)͑F aXy7QB(6NWf?"$CCQZrRH~}I DyH\ZGӁǏڈi?RV R0H=r((c¤+ЧSшpA , |3s)fϜ I$ &1sT7, nzZ'g_Á}{1D6}/=@](W(t}烛\#"Ad`K .VTK3 -q1֕kWy@0;~/> wܾӧL$ (@D)I[{\EHRWTbcxoݧX(]n]WTT< @V!:ʌ߉ov2p(Єl+ c“QѢQr=Q5\ODoQkuM0^I }}Cz3f2"z=p8TcZ\9sbί{ADYL jT;O@$Ax~TVVA$,q5&\ @d V]l4[c{`FPb+s0|~gvU*Z-H~rÆ'] wӴW!"I >tw䩬JJls :ĞJFcnߛіg|7zCD!Um\Q^/>ZP1cǢEy{zy{!bxxp8i3^3d 5rDܡuyHD) /?VeK[+)ԤTTTTj'zF/$ ÇZ$|!@Bzj2Q<,*&"( jwM_E49"\(bAAMjR#ٯ7@4NMZlf0xNJըCl-iFtH?Vլ ;)%(I(*7wj44LZRP9i)B+/>o ?![`M6]pWgVAZDCfJK8^3g϶kstƬaPq%=MŶ5<~nv$Ib1$-I hl&N{L~#(9hDY?XoP'~?MHy]Y2]~?^ҳm/TXښ-yg?b;ȃ5)=n--)!H*RS*?w&=fZr<RSQ |0gY^~..ds bS^$IjsXI. %966 Qk50ڶY֪:f+9tmNGGK$&]߷o_9_sE+`UF,.Xp"ׁ2{%$A|Kᾍ ]7p k94*5.WT!k?NP,4rAeUФ3!Iɨ`ų/h; qIDATauS<{σ(|*9AR5p<8 AkSh!u=\xG^{Cj=;0>}n`@R>Yٹ9Rr pݘ@U(a߾;YFqa 3v6;~uܶrW^բxBVą8y,]ó'?DuXxj V^F>O}=p8kwS^;A,{w Rur,r.!9nv$I8}4ߋK`ȡ=b`\7!tr\ԃ$]WwF}5+uZ9t@'7QUO"6Ɗ"0 BOwnM]Wt=ղecm0ظhn<4CRH'6I;Ҧ3mfBBLfJiRH)f:L@Iml,[B-#ɖ/r ds[ZLY޴.۹|WJ$2O'^eZZ7Iqy\2և#vD>`??z lsғ4 y_v9IFt)kGS *SG&ذaj [-c5YbD)|=ظH$8rC)H%NpF1uDi:NwbRfI[N/umF8O4&" hZfQS) 6JNJ45,iqvk.oDsfJ&H&S?pэ?y+W6ǵk}wwI8,#vv+64u;QH[3mNyHSgnyfϏ92p 7ܪ) ٻg7*&u2vK{G;~]Bz~p5sʽx=.,f-6O I˿yJz!V?6oCϟ}gG8vnƆTSUY1\,fDY#e$IV>z!<] UMX[hy!eLs>&k֬r;׮W8I+!Si%Ej0`0`2  Ex=njP_CUE9FU˖f'hki$ "DxI$B݊nQhaQ]5fS`lmNjkD.?n _nzㆶK&lzzCl~q㽁Ikgp9KSrR5o.MKa0tZ : L.`65{ȪK&eN>?')R\R@f`Z)8 IzA.vh !Yl nwU3,XP1nN}ImDb"O>%CJfDQo6AhܦjۭF#F>MI7w\:g_$QQv+EӅ^ߞYZݫ[p=l*ȁF!b8YNie_LEXH7r_p͛_srLfEEy)E",&36N YH* thT" 𖕱ilUU/~|wL&3l2UkNEcÆb&Ts)wr<%K@(ugdZD1WUS2".R$1, g~Lv;1I(J~1w.ZʛcHp4?8pf0!tz]N[G Z|kj~} =Pekj+ZS]`0Rɘ$ !rguX\Ro^&mF7mkȮ3ʼw8wsQqI/ b}x䑵K7F|IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Magnetic.png0000644000175100001770000003256114614030416016313 0ustar00runnerdockerPNG  IHDRMbKGD IDATxy\Te߳/" +feY~mfO٦TOffh憦 (3 ʾ ,(׋ss:\w}Wcs}#/Cm}fPA߀5(JΜ9I&:evvߟIKK͛Ν;#khtECAA.]m۶899٤:op۷on7hЀӧ#k|˅ AAA9RVٶm BSN5|Z^Ȁ2`BT*qJڵkqtt1>S[} ~܀19}4%%%dffK߾}J3 (((0y۷}:OWطll̟?o>ݻMK68DT*IScr@nX 8o}<1a5Dnn.8;;fddₛ[F<0rkѢU>3N@`s88 4= \f+͛ٿc>>>1OOOQ n٬>k`` i d;gl hEJ%dff,ίʔ)SH$f_Z㔖Z=ȊdfYЀT*9u/^D$Ѿ}{:wLFFFƦ!33 |||'!!ZMvҥW NPp׾}{c3νsk>F1 4}Xk]|]vq-$n޼NY''';ڴiåK8q"EEE㹹ߜ8qBڵk=zAѦMP LJ#GRRRR$:::T*ko)4a  m\:G 7ILL 2N87;v,g+7h'''[naZlɐ!Chذ:op" rcۖwpNyxoT:oȮO >0F=ʮ]#+>ygyhL;w.;ojE5jD׮] {(pziذ! OT\gQ :gSTiw7?S@VVVR\B ,xœC,3|p/Tǎ9x /bYΌ38tbu!iL}GG}#[l޼`YBl#w{2DZm土n &4lpʕ+EEE'h͚5g޽//VEoP$jm|777KƎKRR^^^ 8___PH$bډI''',X`rGW+NԩSCYY(Jv͹st_NXXDPE7P|R+xu걀h? [ѣNpWIAAG1PFٮD]KN|ƏOTTd2~D͛b:O>(6oެ e2DEE1n8~cwuZ\\l0TCΫQhNNNF16mBQQH$"44DULHHJRui UD*ybjfFxԍ8Suøkտ{:DyyrRdҤIb`Ŋl߾JT^^δiӐJ:=F4iKMMe֭Fs{n/LӦf#BHF)4޽{sJKKzAZΝ; 'hll>;;;:kpiii_^o"G6_dRKŬ_cZL0  DN5Ύ֭[S^=eee46{{{H~ ddz~%gtjK0<_MmrTNvvvFVJJJ(K-(c эy0 DBddA3c1::-bggG>vʰ}bggA,Ĵ9ݭbd2{&,,Lg2ua1ٹF&2m5R lP?Vѭ[7\]]),,-D``2uD"Q\-aݟZH$m۶u6+^?V }]1J4ǁWnnӑ#Gn4H[XZZj(?A3+!R-E4/O~~>/kڪXfActȹsXfM3T`AzJRRLOHH8k]QTdS- 06+++/"zH$ҎRn݊L&c֬YfvӔi0U$~ʢCzer9 &L0h&v* (>hѢk׮5kR@Fd2O?ɀ {{G߯yiӦp:OOO7n ہx'mu[s>=/))i?2r!>jOj@@ЪU+kIV>H$261[}Z}EF}֬YjڜB |ʭ XAv;vЉ)..UGQ$!!AOWX$`ѢEg6nܨ3L6I&oTe2YiLL˗/'m߾U#LD III 27oj b4Q"99YoD"aҥ >\/A >Ku.5jߕmܸ񐓓ða,U ",Lic>|8ڟaÆq횩|Do)Qjĉw˛hu>}CyXqeɰ0 .//,z쩳gϞ( %?ZWVTDFF鴁 uuY"## &c*A[^}~ϟ߶m[Ç33IHHfɢ3X0"qaU.)) gggtZn׮]{T]\\T*Y^/`Fsu5-JjdСbcc}wvf:uPpHEj.@KbG8Vp[p{{{&ee/SX!ӐEĿ*JO۸q^'xb3kRX&3&B0Vi ڵkڌ&  `ϧ~[D͜9%KRf*-6Lrss 1x[n䐝mI#v횶_T*Mm۶Ej!xǀqKBCCO0aJJtڵڶmlNM6`? L>\JJ ...lVZJrr,~ի;koS `v/C̢Ǐ/ ;4Aqqդ$_<{,??Ν;b2//>}87JݺuXXɶ ݻwKMɉ={tjZOF Y=gZ@H^`POCΝm!ow/zd~رc˂=۵k2EEEɗ/_'eϙUU|888X8asF nĈ:겲2-[ڲef릷w^QQQ +**rIKKkV*EU༼سgw1vÁj\.мys,Rttt!Z!UBV(U$`DACpp0,YDT*Yheee<Hd'AFEX o"aQH$ ĪU~:3gΤQF( >SbbbxgD!﷯~bĈ&a# CEx6$Yw5~GQQQDEE͛77*tzU{MuO3q:xfSLhMO,eylڴkE] `+7 1Ehh胖2x x{{3d=߸ jJy= $d! aHnn.j-(bta&332!...ډ_c5 Lf빸 ¶Z= N$ѹsgnܸѣGSk׮jժF[x=j>Kǎvɬ:=z`Ȑd6"يiGAAA۷֭[ģ|CJ%eeeLAӵkW;fTsEӯ55צIfc#tm')d999WJS͛VӰaC^z%޺Rooa.A33;ww^F?"i޼9#Gd޽l۶ԚoT;'aaaJӇ՘M>e|ǯjDFFƎ;v G)kz{nqnn.'55DD"aȐ!9rC믿2~x[J9*B0-R!Td2c[岣G^{--"""iӦëyӦMm<==GP1[]Oqq1SJMMNfgg'**0[K9G*>݀˗/H$"х \]]?QQQ}֭[הj׉D}ArHCZEܓ/;?l:kݺ5-,5 T '_ &軗֭[mێ :uTFVr$!!z]v~x)S0rH|Iˈ7ߴ4}]ڵkl߾]o-R!j:/YX,TՊ;F}u~W\Im 咓Љ())geʕ딗ZuU"""0&h ESct֬Y999_8rsqii?rZF.8qb܎;ڼ[W7lp]v鮮= ӪsAT"#hYVcXl'SL&O>|zb*Zi:&!l P .\رc@N֎?~$ v`gg.I ag/qϚ5M61fO?)S+!!i$jTZ%K8bٳ]\\N=.GlR`ٳv+ M6QXhƍlS/..&**t< UӬ2Km۶ {}l6l˗ܹիWILLΝ;$&&rrr K]ts-N:So]ӧOk44}Vp2d>p@'@o6֧0T* 0eYXXȄ ^^^+]GGG@XT*պ =9x #<<޽{זSѯ_6ӧOoml s8|p[2z^`^LСCG$Ֆj1VfA\G@FFvC[,G )76;;%KQh-B" J9}%:b;"HLNN9999slgڈ͛}wءLJ#FhUm?p;]T233g" '=T7pNii2;;{Xߦ<}XdpJH[oWRRBII }+SL7ƍ'%''D%eeecq @0Fʼ|U*iӦYYY!`[ѣm*pX_IS*:u/"h߾֕%33?ФZhAFF>>>ǓZ]vtbCۗ*Yـ/B)ݭ[jooo^Vsq4ӿ:o._̮](**b̙4nܘŋsMJ ޼V5xB3ʭ/((?L;;;۷" -FPpkС}&_𺀞effCRR&Mb…Z&M0j(HI3/III7NgZ$99'Oi&43Xf -Z`Ȑ!x&333554i޼Q\vm6r@炂Gȑ#)))AT B&!t'T*eeeT*ϊ+:t(R{{{||lV`1Gk.zƍ O?H$6o6wZɓDDD0l0mV^ԩS9s&_5{w9aS$=`H_ϭ[ԩ"^TB$i\.G"{UqXb~~~a@OIIIaϞ=,_]vBO>-~'ږKoUL&O>A,RoYbr`vޭDoGFvb˖-mvp```"¨UC;0B0ce5r"Фkˍ5u]pɓ'#J!$$ŋ3a{@\d "hAK,YfZ7xyBnn.Rɓ'3rH.\`ߑ"d/ybv[n`ݻw֘B駟ۯVIKK{f"_DC^t?vΜ90qD}#'M&_Vt…r BvT*IMMTc@LLӧw.0࢏Oߊ[hѯG@˿O׾}{<!YF.]KJJX` wc]j42Y `)'xB;vÇ[ir 77]vo޼);wYB822^:YbPcpmL\EB8Ӄ!MOAYʵOA'::ݻ3j(֭[W-?`…*W1B%::SN1xɤ6*`&iZZA9s_k;fBI.ӰaC}^ͳ2\\\U+3-ҠABCC={6ٙ>;wj# ͕i༼<\\\W^Y9$ggg-[H$"??ٳgӭ[D /z_~ލwOVg1"`ȑsD"jV:ݹsGO ///׷Z6_%rgy1D],\.79-ۗ۷o_\TT^7| 'o???<<<0`?6ěoɪU1b;wjy^۷o!NV۸qccPX,EKRY)))dgg{^PT**YR%厎댌,VqUrhYfq̙cs=gim`ɓ'ٵkϟS~[;٢E prr\8InnHQL&ۜ{[(--LR9tcǎDaaaO8ҵkczw߱'NE999kl**ݽt({'oeϞ=RL\\ǏgҤI>Emu҅3{lIǏӫW//^L;w.Æ #00ի 6sү_?/^L݉7)JΝv`QM_z΄]gΜ铜ܹS) w%III5hѢ ૯:_ZZzf*LW ZjBxhR248Xٹs'/&66W^y>}ôi sA"н{wMF^^fܸqƲ`>|%QH/X LR,K,^L&DDD4\]] EDDhd ŨT- ôfFTdS*5(OOO˹ۢc[Yf<_^;=ҸqcƎi wwwƎO?Ddd$xyy1zh[U[ZZz[3fh)HZ\reOJJJZ-<<>>L:+WXqd;ѺukL眵~zgxLrAW| &Lzc`pMA$4`VVׯ7ߤK.VQT(JT*/G?prrFK$ƌßy&QH$DFFwwwf̘am5J ;;;>>xRYe^zu6(蚒L&w5z0qfP$ӧn0}58 ֭F;D``-u]tٹFȡp~J!A6]继joElvF<5|2ؼquXmSօaSn}]nBk To7m`@kKhְۦp ok]a>ՠn@jN6ke@WNzO~SC6Zrm ʈPUf٢Y-mk6T WZZJ|||ݷv3Lu9= = Ktdl/5PýA^z͞pxX;<8UMtÚ:uݒ8=(K ]!]}ѿ_eeא1(nmٺ(Q{;vF8]ٲyn1&(yk,0Mly/XUs0Q@Tnx|[>!vlN9"ۉkS_M|ౝǤqG|b2U;dU&x/STׂ rvtR€Ҹ[pA: Ga~<7_j|2ݐTIoD"ډ { V@l\^9mY 7uhcY3]J SA5EN:LǦ)+OPTTG P?nBαPۉP bA15zp\><S? הZ tѣ-V | UOO |X/F hӷLش@S0ErZF fe3z[9xP~D] gOdhKj=-vJoB!0jz?< ߇%j2z 9jp>蘸X?S-gjaei_JdMD9#ک3v9{雮YA;0Z۷0kL#hmJCNn&{Apyk'..4~(0b2wEG6qWK*-xe+A_79rj>z.Mdm Xr̦/]#\YOVys/@puz?ylfu8k_u(a╷弿ӿ[3lM ^]j2q bpFLby<63zvaؙ/ q斿1ƮJ, K @bΧos)C+\pHNMoV䔚΁TVlۚ೜h.򺰶HyYS/vn%E䕞 B&^y;;Jyz>3y{km:t-/x²Jkth6 ܂;b:㖐ZOg9#;V6dXzQmnxB72K6t_!φE ]ĉxybS90bt**<}(""pBMuk<~m$19/vyuah dk090}{dX~4֚V̶]kkaJ!PɎ Pk.ЭgfHKrOl4zA*s_$)%2M?_Nj;tImZ5IWyy)-AJrAtIyݐULNڷ-QS-m 7T)#fY4vgpY0%=<`҄A@Hy$G2<ݹ24ML90mH$Y^ gl"5:4+Zy}En kּ! E68mo$$$,sOyuA(iH~+PtC*DSH @4خՄIRRRXh4%<&P@Z's)϶Fg/H:z0n3~ak EpMp^!~,LFsk>fϞ-F6W)\+ m ׆6Z[qg b ,?m ݛ^_#-@TD1olc^|Qwmg8M " irarss)//!ƒIZZYwc!dҏs +_}9V))V-aK5%x.<+"wzDiQ)gլ[ꆷЭXH Ús#'guNt]*pl"K&]t9OtW#zYߓJ_LlS=^__Uu|5[vͧ~SGZKvtEv9IޑbiqR6lW^Iݛ{.t^b N^dϷLmZT6Oܵ%$]{JՒ({o 9Q&Mh­X^iJ4Mi17=u@hDќ́ص];v'2rtr,8IfVvQ48vז8$ >aHmB; R b_(#d[jK, ;#3n]ذ}n-v_TaL2g~?-3dvr{bs1?vL ]͝3ѵKiSjR^zg}uS~o>Μw~%?ή=OyѴ 2%ɐRpcIBPZZʦM.$s^檡\OⰩ0s! !=նOr.K ﮡ,_SrZ-U('ajƷ66I'GHʿ4^qswr2x+ 9.5XKFdIu{~Asذaٺ`!dǯF +#I2[!yՒb_:):#)L$%ADAOr~b')qK'b*.vlHF.??2n,-,x_ܙEzH Sron[>~J|~?;'9_]=CWv.|"uKa tM 1ΤkT!;\-/\A=H$)zJ?oQ;p 1*"le1\; ^tJf|v=I^)/U9aR4{Fy'u;4ni%YAcG2+skJK8V )Kzj4GNG\; z94m9u.;4INjўj0i6ӯ[ ݴMe =>]Gigsك 5USRo1FG!۬54%.:U~6~MUJ{>( zp>+NCeЈ)l,>˲H PyŽ,Rڬ"ԇv +_ָ,ڒzFᢣ-;T'1VaS.X;35[ND8|hBlk2_z{#Epxi}PVlAu6 a]>z9lQPAƧܓ ;5L8{uɨ1Rc÷dg6Pqͤ,fLi1=6cǮ<&^:j/ ]]q Fm}ٸIzYayĤGxDӨw;k2;<&kwTr y ~~~EII=lHMM%;;@{|rpQSpPeWy*c'\R SYrɲ~>\U,ֱjɸ^lJg!>}:ow>{;o=1Ok{ٓ+g!)~{:\=cۙ>}zȥ!/(WUMbZu ?Q&YȌoI)- H<|U4Q ,D97]⪥\O[oM&Spha?5)ЗUW]͜9ss婟 [yR]/bHIcb-<).q#`ƌ!3J^Hp8\~ͽ|4U&׉V&&ȽJ8Z07rZibU˳q2;<{T4Ggf-JlkrO\wư72?j-#kzq .|8W-ް3jPp8ט2ZmcYUլ-+jtڰߝ@c#~qco/r/_Į>mՑ&\?\ ZRz󨚥ڽz">>O?cǎzs7య$=5H +;RR6}]hƴgq0&jHb5$jɫK4:ebKA6p5P5!E:YIbeDP,9^b2>[%!2HY{5`T~Kaڵ=z`<}4FA^%ؼst](0P>pXA }b9rpG`JUQTFLBbh };vjjj4(Vw]׺|I) GMZaU)!5MBzM޽RYY(֭-z@?ݵQYR۩9U^78I0MIv(>#[xɞ=1rti*%)"萀iZZiH )PHk 4R$ S`VZ),N`UOׯ_`a:ހ[dP;h2 z{/1 `hF溳@5;(pE#$Xהuk9/k-jL"m vBz{.SJVYNC@@%G@Y#gVjCqZe-\wjͲf4VKmC%o8A@ aJP(D(*XӐ(ڸ8m?S yH)MԬTL 9o"uSd0Ϫ!"i@@R`LJ)e 8\m w1[?AI'[Z[6Z6W)\+4~Ӭ F6W)\+ m ׆(ꓕ;&|t GDK `^pyzt|2 :1K`?Xbi2Zi_=0;\.'[1ooێ}6)%7,'5߸E+;s? \vٳgnq\ĐBVVQQ_(蟝2ghiCvpɫd@2  C>_ғt~eޔ;g{Z,e 'sqrn1 ELEi̼xm#NCXt)ntBIMMmv?Uȁ)|;w8y Ǥ~ o?8xޣ:'.z }@^) וn.IDAT?gqmeڵ&蕦턲JIa:!ۗiӦ5F.6ٵ{uO?;kx&mO5fdO}P-̍nL<ѫgY<ȱѥfLe$ U:;())_b+Sk-#eCԦMՐ븫 6xrɶm(((o$66I}6Ibbv/c#ظ:RY!)ӾETۘ4aX4iӮ=>vi-e5 IV0]1[A=QlW.*++y-ffrQZix{(1x%NAjB.*i ٦ wn]/3na]`1OnI&"Qx|۴Iɗr^k~Quu<5+!<Όcr,B(,B(th!UrcߒڍAh0 }˱i?ݛL;o/r=T$NcB2dwLjc@7 P\\ܹsjMf'Xlӎ# t:؜s̮u F|ޟ:ov;ܟ0tRJlX?ɃW'ڭ?ŁPT)yQ/ycAgƍ9r"ba籗KذGVM"UC@ZYezϞ*7ԸjG rssٶm hFoVҊgIi}deu>XB|4|]g?NLjqcx`z$δ*7VNՉ,$TG,w2xpo}*WHk|>/_\1"G^(b^7(ѯKeɶ14C^3php`&OHkhǿ>IghvM0LJ_RUgon>YgVQ'SvAQQzɇ0X]xo7hmN9 3rrrx}SP8Rh2~/y/ĮݗYa.'$S+ӸiސiΟϼU)9#'vՒt$0mkGym>%rXRT)soTz'ۂbm#4P)/VpE%Kh< rMڽΧJ&So+1U,ݨ7Ub9(jņ) ډPECWsGuuumi6oH*Gf5|Ms(c:v蛦2Ɨ.2IIռBITzv\#oXOIrqdOÚ %fzp9_eScMaz(?O3/ Mm.:wE=?y쯌yqgO+uy~kJ 蒸(sʛx 7o.񒚠GTz%/ )0mZ~C?;=W6̾}ե]><@Onɢ\uy1]X8F\r%Zq-?Mi8-G$&&"-㢞<*$7%X֭,*0%x(,RXZE~a%Ͽy `'yxYM\f_oxzo [udglS*Ǐ`,ˣwj49T /~a[^J+.l>B/RKl Phu݄ ΚqS iH]$3,#|A_$::il8x]~1vyKU׌lR̟yftFQ&EDh&j"EQ4oVoſ/eeSBAvv6}aǎhmK _S5gV. j$Du7U gR1S<8yy?;S %ĀiCMVngނ|v#rMJJ iii!*rɦJ\NEQA\6v)jksB*t ɀ *<:*j8Il+@]9AQ<u/ (Bzz:G8CN'>ΉP5RFEgZOU6:E2\b2^ÖvĪ RQT5צ!T2#aZ` QA((i1ܢ/8w=6ZޥUGM!i}BJ!$(Ф,RjH+EZ1")Ez}~EH(K|fx` AzEE7@"Bayʺabs^+,Ϸ0-E^c[[64mm8hS6WpS\Ta2o7E5}}}ngϖaER |_0vd GvrV۴a13=9߆0qL}jyڥGxK*|{u7xOom~Ufu&~zivW:m8w:t8>aTW G!!1Ε չS֖nj(ܾ]g9{8 1QD=Er-Ϗ!;  .Mm*xŗ\zzNOso"=ըr1]6.߻ɢ;#]% ݲǝ[~,۷{+[ۃIL\K;/Tz9(6w̚Ğ<_szP4'QC3;Q4WdЁE rX](+&go˜A%{TV=h}Eq#?vruM !NBX' q.\$GIb|%׭[eٙջ)//gWp<U苹?h~hz>'EaaJKKCn/2229%|b[dR:$~ sbbc, '&|9yk1ZMr{osqu`HdI3! hiw?IcW֮zgH}RJe׎  :}p8ѣf.!~!2‰2͵>qQ/ Ѓ!7ev!A0exނ+21c~RZ&)"{l(PuhUA TE7/Tb(@L@tLF T?B kxVm(ZT/Z얳j ôQ哧챭)gG"BfRyr>ĭ#Ii hCkp=!TY)=SgsG:`e笏s&}RkG^~K*'hs0d)))oq*6y'*0l2ņPLu+5Aj\SZQsVwj[-8-kjaÖI {hZO=eNE,Pԋ#B2jFqIK-ؑCLL )U(DЌYx#M7}@ʨ(8 E HI9jszS޳Kܹޯjv,AS/, i4|zzxOc@@ҽO%O"<@@ShF,nm8xicSytW^h]eԑXp1LJ|t3펢q.(WG7mں#Pdp\w'>h{ыelͣV>{9_ŸZtcXk'b4[2_*E,mL??uGPPiÊJ4kZUSS-2-6&_q.> /mU~ao:ݏR\Y`a{K6ּnECQәCsoA4`Eaxd-Z2|"/ y[&pM✮YP ~wC=ʷxh#a[=c73ŝS/'?{#]b7gEr+-(VOW+0aYnߛkgMnJar(vv:b>=79ّxP-$-9\!%^Pp2xtO_pWz㱷HЃ#{$hS0bp_x<ܼ$ <&CUF(6gTxޔݫ,Mb.Yp1fµ<3W(gp4 XUg+c1ak|I 賷4(*C(* E ~::v!VMq @Eq.V&6UÐӄjRү_苿ɉ{ۮR*w8VU4@h+wqOuBV^/ݲ/f޺]gBQ- Ƒe幏IJBn?~VO|I }RjDE8hx¢?> V5v)mjJ0ST\ɦa>eD\u"ª\QlS_x<ް$^.[FqN';ˈ>!g'T>;oZ[b}ұ8l \ 7^XMRHp,G0Sح9氊i,9TC_c<\֝-]aTHYZ>:_׆;q,i'HIk I݊&M(7UUņtK5kUQ5nk}ޖI 犌/*) AJ}PRP@A ޔ<,P0IN#9/+%i_)LS0E%YR"PLi"@F\!C\,6AP1 D@Ci@'h='U,[ PYQJ+M?>>|BZ`#?km"|qEpA#,mhCcu:ϙ{|}^oŋ<1Մ`łGSCM3&~ Whʔ j\r5ڵC$QXXHZZZcbmVik W\L>EQQQ'ҪU+T*yJܾ}q777z*msm!!!D:v`$xÔ$ HR222P4k̮ܣe30SMSѣeqqqѢEgxRSSJ9vbjnYP&竿9e899RH$j[' _%_A#5#G"8uG!,,rse[WK8 (0\"@>Fxzz+srr2Yn-  gO(ӦM= 0=bt:͛9\RRM6B׫W/j5\O.]hРNNNlI.Zr呠3g88p`$0 3qWr2esMi׮z{ꩧHNNڷoO֭i. Pȿy>0@պ}CC?`Xro+EדCIIs $ * RINNfwvv BL7[5JjBCCqN9@ Yz@,ܹHϞ=5eʔgu:,=ThW!DDDpΝJȆ 5j"VZf̚55jW^cu4 ˚5kǚ4iɓo0ϙ3CVͺP ?Jt|4NkRƎ{SN~Ϝ={vOOOONtp֭!@?90}؝ [Ҹ `ƌ̘1âsMq-:Ĉ#3P(t8q={vZ=z0ydvY%2k,NP 1>>ݻw~Va~uJ FYu]080p0nuҷo_ӹy󦥗Lիc;TjJΞ=ˮ]HNNQF@dd$ ӨQ#ٵkgϞET:j؁+111{o߾-9u|||.Xx@0 prrb„ YsմoߞQFՙNPpe --_ƲM6_ ((QM*))@~ץKQ۶mlٲ%b~P(,vvv.T(>&êU0a6mdt:+t wr8⻟~1cǏ޹s[nnݒ4j(vŊ=[?8p`z߱aѨQ#^yWW hٲ%[g {qa|#sww'<<233#F ˹wRcǎ9I1\={L^t'NٳgP'l8q@`ٳs<_>yV\O=q#ڵkDhZUtL(qww_u楡E|r ԩϴi:uj/_[oEAAAU4kJeyسgs6l$77w+~LRyN7o|pNW9abΝ;̯ʛoYflذk׮m6ڴ# III=[n 8Bn|;wfӦMxxx0o<|||X`'22@ @ '==# 9}4C u  #(('''Ǝk<޲eKz0Dɉ FMdd$xyY"?MgzW 0___Yf +ݛI&1n8~G+t?d݄O *MY  Xz5bi4JJJ9sf2QF1tPCnnnU`Gjj*2 ]«͚5aXr8[\Ncl޼u;K.駟~uಳyqFuѴiS^ܒ233p7i䮻ȶ|Mzz? Xau!K"jÇsU,Yѣqvv Q7N-z=*YբRرcׯGӧOveeey؃zt:]rN^/w.Tj`@fffL{zp!b77>B7ỏ'b1Rϓ5 piZ- u ˂9~:ׯ_:op\t[n_ Ãmۖ%DvvT*BCC9r:uj"l?@3z+"ǠVut~[ (((RiRt:nnn |Zipqqq9r! ˥RPT;vcǎF߾}֭U|yÆ {few18lqH$ aՕ[3K.w2e:ӧ;>EEEٳ777k6/T*;x{{'yzz7ll_K$J*/A.<7FxcC ;bUv-^z%lh4iMeV ܹsz~{DY*θ? ~tƗ\պ-JV*8JyԔ~u`?waXS\XXXu^6mH^#KO)VpNNNL87o^x95@@Æ iڴ*0?h@"@L)V  _sD==uC&[{>v#Ɋ׏mŋGT+B@*ҬYJc 55,6lH@@n) : }qyz=RBP(K. 8!uNǎ;z}f܁1u/1T*6oիWOHKKݻzjټyĈe QUdGTh߿{qQO\. \Ό38|0yyy8uƥ9? /eO cO&+**">>իWӹsgt҅UVobUy51 CK5Š}w;@m24t:jqMt^N:UW@75 O=o׮];[oEX!^ b7 ŏG8h4B!}t:Fer-|!)7ۻwo;wN}+Ur^lh4xh*5̿j{FA*H$%}>ڡCkbA]`P HO?U,X,_mСCdeeQXXȤIxgɂ "Ϟ=˂ ޽(RRR5lFVsѪlBV>6l_PhgV^6E>,1瓚ʚ5k߿?5o߾ޢQRRݻ+ ŎG425k֬cƌ*JM VYҠP(&99٤h̻˻[<%%e1жm[lwԩS>.B!Vǔh0lr0B.$gҥ'ƌP^cǎ=_TTJh۷,-[\.7sV3RYNSLRvZ8aìig'??3gΘ=.2dڵCӱsN23385&NbР{W(y&oFFttt#FcVknj7IMMe޼ye! JU&i߅GVקO^hٳgal1RdC1oK&f4h}lܻw]u.]2/~Ox?^f=ĉtڵ:^zbP`wH$W\}ʔ)ǏaXy nРAl۶mV~r%x{{3n8M\t)z=Νȑ#eKك.9sLNkpq  X{# aÆ̚5ca[ndlT(yt:BCC+tу*OFQӱdiϜlAŀO>۷c/]ԳklWTTTFZzA0&6l1X-w( Nӑ[hт{9"5d;:%&i^zI *S[Il2*}l޼9$ߕ]Z,+0~"ᥥvZXv 6Æ ر>N&ѳgE!p .\۾}vڵ\B Va<)sYcƌ aӏ޽{[ѯ_?4$J.4.U('N|?\ZV,5Bk,?d,YbBwE(2~x~gj5K,A&Q+ ƍW+˷+0Dz^a)ߴi ,aWEXmpϟgĈ4lТ;t@HHչDS#P*eڷo_ P*jT*DGGeiЃWdg K,ɈH`b|VV*990~0gg*S*8qie,Xpt8 s?zJJJpNNNӭ(V.]jeG]a1~-zx' 5}gϞٳJdj*Zh#O­cxX0ɓ'?Xr%ij9sxٶmaaaxzzi9R yggg[.TZURTTTP((..F&Y$Mor@2z"E^ j ݚ5KwHOJJ")) ik+LJUVY$M_1ؒ;;;'nذA:yKI<f<w%ϢE )osrr*pfAZm^'..EY+M_c1%gg9>6J^RR]cDj@"Lg~r;wI&o;-ݻ7 JXj4o\9xg򥡤d9ryKW5E Oq(&& e˖l۶\GXMnn..^Uiz3TII԰0oN֭2NGFF~~~V'yXk56H P3jZT<AL\uIٳNʯ)fc0}vjEȝٛH-跳Xhjcfˬ?6~{<=Zqѡ뎢H8*# 4 J&J(NPR!8g9;;r)XX9{,w!667n4iCi*r.Nofw*{ (.gꫯpĺ0rH:w AAAtA.]B@,7?~/_n?`96JK9y$/&&& pQ%ΔB{R!Xbp_b#Gs+777WRryط~kܥ/>}: C 6Jw[Cg!HrvĪ.;q[n)**rھ}ӽzzV(6mٲ(99%Kf֭ŋu{(2e 7o$//7nФIꐦuXT\6?~|W #mڴ߫z,XC(aĺ=:tz"ɐJxyyqFN8AAUZuIP%ˆ>DPXKP/_|P@\. ZB\\[l)\ԻwoBBB8|&y:T*x=,-Sչko߾'|}}s۴io9_VZcҥu:݃C~0g+sΥ{?~/&0`͛7G 憏x{{ yvBdANLL ?~yyy7nƍ;ꪺqFX<̙3DžBq^T*Q(Oa& ԑ:u www){NIIa̘11f͚\.~UݬT2}{kٕ ҥ %ܹ3SNǢbM$yXjUUR*M}v<==cĈу@nܸ?SN*i˾}xbB +xzzCqqINRIBBbآ-8~۷ou2..Dez+Wuk9z(:ubРAeKJJ0atޝ,o΂ J=ft: $)) %ar[ 'c֬YCի3ݘ8J P*M?o޼ro[###>}PXXHDDSNe…|8qdL *? ,M`[Fqv#1ϟ?_n%֭ҥK2`rJ ׯ_g֭ :+V  9sR)3f?.=T;w׷\*U#waذa bbm*[ W_}H?unnnC|P(UyJ'_$j$kv e˖FՇ~|ͭ?|"6J[C@@VFVV}]UKxJS!X=528Q:{lkX\_Fukڵ+.\ 22kJ3IҪXlDzT84StڵgӦMuk(W,Z'jY;vr"-Y2AJF/^tnٲ%x+%֭w4mڔaÆ3{_TTĜ9sxKcalIDAT@(O=TM6=%ƫt֭tT+AAAGڵ7nOJJ ~-AAA| <؃R$99٪kmzI-( ubWN+LVH[9iz .0vXD"Qj[KpyS!XjpիtDDDX,K$wTFUN4i\AAEpX~=6bcٲetlĉVB7oe0wmpdpׯ_g…L4233Ъځ^租~P(b̘1]in۶zD,KB @( G:NW:Hر%p $+TB~уzfR(,,$** GIXLo H$&͵Zm9+WvZS!TcXCT*no޼iS>s)M_c1 xxx گ[RRV֭[VB0gpMǂZZVhTjZ.\p}Wĺ)J%׮]K۶mmU^ʕ+̞=NK,YġLߜ????mƍ;|Ճܗ?gp,Z.Y T-ZV%88.]ХKLɓehZ/^Lzzz9yڌi&MDjj*ӧOYaz=7o$<<֗ޫ^O@ (}Ο?ǎvԩٳr8OW:())_~9rX.\O?ԩS2 IIIL:^zq5]˗5jT*t1n8K |L>U= "yݺuYZ't{vϛ7+L4yIWXQOj?+W6l؁S&[.^P4~GPRFKe>>>dffOZ-Xtח0>D+3Rݻw64PX,Ν; < ޝ?3f\Dscbbj.|S<>HΞ=q`NO?ܴiөٳgk?ϟ #WR0FE0/,ZYf Yq:^Odd$fr"aFsvѢE%˖-k5{3gLJHHH޽{0oы/~.X@?gΜ˗/֭}"hE4M pQ >~0ĉlW\T*UEbd2#H&ܹ3 .$882;w{!yd*JvEHHSL!((wW^OP\H$mw, ,XsoٽlٲH(6 }N$(W ƁAM.#HHHH`_bԩ<ܸqݻ3uTOȑ#}6:t[nܻwMzdXx߹sgN>ŋ8q"3f`ժU3dc?8\.O?5>bK^̙._}G^#uL2cƌz]RRJbٲep>2q~̜9 ҳgOZmT}}}"((8֬YH$~DDD˫(wwޙ[ᯅ|QP`Ⱥn*s%rz=\ *<)00NGvDx0rHFiFҊD?qtt6'M)ѶlbJ@w dVN#**(>]'R[dpjÇsUrssiSd2b1jB;wDӧOGv`rСCry5zܞ@+`]{-`ŊƲӧ;o+333,V,2|@JV2P((Jrrr裏8x`4v?h 6hzݻwO>*;;CCB&Tf6a:t;c,[la0vmڴ8Tc%''2m4oX\\̊+ip/\0vС(99y… ״irsWDT*X&JH$4ncpE~pqq1];99Uh,UVTF]777GI7nlLΝūZ0dJbT&^ of;6No2u#ez#\4ƍi߾=! jڸIZsMx k_Dk.]C>}puuuD&YPJUZV]RR:xwYv[RGi-Z2oLZ.ZҖ^'..EJIw9Nʋ/X %66֚6~s_ "66vTT?Ν;ǤIxiݛ5ꔦ!߿ZZlJI3& e˖lݺ*yFFt?~jlZ+%mV DGGJI԰0oNVh֬'' z΃9994oZie2YOf Uf乨H_\\\pAu[֭2I jIszE1`vH+0?Ì؞7E-Xn{Yk%jz1A=0595Z1uL.)^ IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Merida.png0000644000175100001770000004272614614030416015771 0ustar00runnerdockerPNG  IHDRMbKGD IDATxuxG?,[-̒' s`CMRffHk{+^+]̔4i9 bf$Y1ƶ;;;yJ$ZKuChg8Zgpt俺'98)~Qo-kXquS[[Úq8}Vj HOMű#Hos݀ ?/F#q{ݾH0YE be?m6[Miɉ#4 @HbC"uYdzNNQJE*+̠'uӂ;HnNvcCh\}}=:5Ipٙܿа^ .. ס0S """q)HB:@@YÐﺜv$#=J{zoo^}L h>P<H.#@8tc*~ !D)`?/YܳdmqPW[KqQEE[L]mm2F$K/4;U! emJ"Fȳ ?o~^:_6k)quH =a$ q'?!Kn:W0 HF2=?c’F!%5<` ohgI hhh@a#,|+.*Fͻo7 n!v6oڈ,0B['ׇ85 R߳c0O̭Lƴ:.[Bfk:=tMCl 裤:ͷFRR"rFoYie*fM'ׇdgf%]2B)> d:68uA4:&sl<z V'\7mn3vx0q9wͬg# +#k'H+ޮ~^<%n)ؾk2xPztnKHO#"ҵIrRb6{0Lؿ| ԢI1$^Ӆ`АaqsvN=z)<9^^^ۏc$#"kW^^^{D[,$dz믈1~\M Ȳ=5m0p`aX &00@TEA"IUUQ__ *.<23Ƞ^!KF3◟pe3劫Inn.#Gb!88[7o@1c,&O4a^SSCFvv Gt?/c aƬmBBMvV*JBIܗ_Ge0 Ͼph< GjHhh{cjsfF:2E{r j o>"֭Z?Ąx{hZ INNbͪQRRBeeƨAxyya0ӓ0N9e O?͛6beY-[7Λ׭ko]<ٺiNrZp:#I SsFAKehqN`OO/<<<6:qPP\Tǁ~߱$'h4( N;1T(N⤸/?^S'EӶ644ꩌ3SbbooWq8QYQAEy9dNbB ^7˜c8hQ-^: z#77TYR:1/"ο"nvw6s`:N23IL+~|-c۩IhA@l~L8u`oH~^.wL͂MKj**( Fףj6FPPQQ,i)~'6o5W\9UUB g-*޳}qtIR*X'***?xLlR__OCCCZ-^^ `6jҵ#ah^Ƞut:̡X,֦=] ??.WPOAA!t{uoBsYcb00mDU] 멫<Z,~KZ18ЛT?x9OdTz'&/$ez*+]mpM咝ŞݻZڎ1\nvծµ5L9yݲk8l5@ ˖.%--=hl o>1DFF&h>-~p=!++^y|F-?@V":9 R\TܜNL ./Y1Udp1ܶ[ٽwnrFE[z$!CxTO?a3fBE!+3Beeeb7`oSYYBZ F|||0L}| '0(X%'Ƶ#KB= !=-T )-- EqRUYCCӡh0@PP0?`Ifڵ}6 *K O%٨5aۻ]` 4,~hѡ m^(+3NbB|1r]A`Zƣǿr  (_zU[[KZj*i%Z IՉ[b? }{v^ (6?L~G8.wh5b L \^!Nh%A6/VݔۅK.[A>|*+*K,k0x01bTlp nɌ3ر#Ѹ~a)"""@t4N>jEQN2//W7__||}p8TOACCUU[jZ4MӴMOWcI9_-JꆴF$<==NÝOE:O:6|q;ɟIONLY4&'SQ^Nzj GqqqUn 7/l5"xdTTH_OEjkkȠ___,WㅤxmلȲ)um(pFe\h y%01StX!BudyNN1xnzJN`$1 [HA~^_EUvn4*;~ҫun:Pqy5884..N/IjTX>=z%֯^əgʵxOY &Nڕ` 0<6)v2 ZZN^먭 G/З[CCi(g]˃zNT\e02VPp5ў ooCF7b'D"=:̼r5=JpMvш^Q8Ή9g4u===5?" Ӧn.6EeYbwX"n]Hp󯑑aݹmDeeڷmVjkk0Bݴ];w66c%!qkO?')1mniSpnBB\r|{L,!t޽\p~q{םژc'(8NLy#-&JJdۖM$IW@SlyeeoLjJdB\r,+gҫ3d0^lsa;Jpy9t:˛D&S]]V%?/N<v;kWh7њY{98iyGBαR{-x=ߟǞiA':GSkVj2<=0i2&OaޭC#ˬ'6]gisu*Y{2ҏX.;+e?Lȓ _-`ȑ݊o+*,eúuH-!C/&ĕ"wgŚ\y5md >ߺesI%Ib)r2k׬ЀF=g.^V{+m>defUpowouPQ^د[;oEt) ;wloSE+ 8l#R"GMu5~u:7ѸZ5n Kuu5i/[# D[ݽC;oI[,Y~Z}Bʡvz^EϥUî2aw{\+&G0amt0OOOFPUny^TUo;osш5^(c1)h\g%q.믹ݗ$''5= o;w .7/ףx!Æ#I>$_nS'uk0i ғ7D[cr[STXȍ^:q|]ꪪ͌ӆj  ━$ !D\=s:'=}l<<<\E'C ѵA ʔR#ng;J4283vvFo nW֡ll^Fλoj˯Ʒ …$%dN-ubh5 ֯YEQs6xm4RZRLII  7&͡aL5ݜ ]q'?O}[FSp9.~]FRR\VՎ8%T6[9ϓ<۴u !\z<^}%/fp,c.`ߞ]m'W^s-SOFUU5(l޴Qc1bԘ^\7tUաi2$IBO{3 ZdEsR o_U+. ?kWs恇F#dbuvLkȲ^)xj嶰]uۘxzܿMNNN%ܼyˍ7ͻ= X˶b;9bdrfK"QEp _/[bkεiӧqzmϟ/QQ 4H|M&r]OٿAet:ߟor$-j-6KDD!I1q`hJXqRLԼ|TXXp#+TpCIɧڄwF///ο"sF '5{G$9)ܜl***B酟?q3ei$%ZpYyG,J:\(~=oZ$.lJFi& GTl?} NE=iC&O}J~^  l Я Y2@UdgooPT'`|DDDFuB[mOh>TK| t*B[C ǻbRTh;'.JJ(,( '',F]3b(Mdt4QC ꓄skD+FxtY>O7ѽm BU( $mt<<$t:fu4V,͛73~Bt RNEE5UBh' ^WM뾇'uOpt)muwyWB'~*OCe0kBQKXx8~9 IDAT$0zX! 0FKeeukba 2w“cf-v*8/޶:Ѧpy8e`~۹vh:|Hݹm+ѽ=7iQZ5o^***:,΄t8ZdWq:'p:̌t j?XdcАa}+hk &O';-7/k;n>> 1PUϿ^Ȣ%?q}c)f鏋ٱmN!' 1nNoS!t*8źFa_0z-,? />Ҕ7=((sϿ>|n[LO{clۺ':[7m*'I9jt~^OpHcƎt8ktfd3OW_gݲX-ɉ lݴyn_{qOe?= w*TG\tx$3sx|'W&Kcǟ`Y]X)mlߺO>͵Ngc1,]}wܩZK'(8y#6|8\q<{_,4%`7I=}T3r%nJpLNbR? !HNL*'.%F!IrxZwz~i)B|'f7]OIk0ֿq}noQ' [7m =mHK9TG /#lώxS_/:X.;~݂,K,T{쑇vq&wxƝ ;4Bsch5~W\u5aa|B6 蒅äSX|96[=QQAfg*oUe%i)xv8nӦ` ݽژݜ fgyfù-ov"j]ro,̚=`rs0x{sy7g䐁 Џ4>&sRR\gt:+8pzwC֬ZIvV3fR1c5nib;TUVbӶ'o>/:!!fϜ}ŵq9Ub4lݓTmn>Wy]!+3guv{z2d0b;ʶ{!'M3ۛXfΚMlT5zjmzc/NףT-Xؘ3N'?|=W^zQ?tkbf+h 7c-{^\SBAdYx&/qBcOУT-筓 磏w:'})y{7ߛvm,ֻCŊ$I|{?‹nβ!Æs)t:&M9>' yx =t>v/ڱ};MaVfgX,ֻ'N˗ڥ555sl6O[4Op$z iZm>~>}{,=N]aÆwYwSAQUxQs>\(..YC#0(Yi$uqܩ*+;qSS]͎_8BNS d2!@UU4 ?|?p"fX<-fJG=aaDFG營?R"lfs[X.hS!tǪ(/Q*ߴb}#sƙ<ø־7L@@NbZӑzO | 11m;~?| -6w*#ٌ EQXzUR!xi๏>xO>ί[ɇ0ut{ijjk;XG b$&d0*rINJ"==|vsAEyYSf w*͍*Jm>GKrWRUUOK~b}i|^}mZ {z78<=b'JJRF1#RR6gF!r/JJ?!S2}gΚݥ˩_ٍ@mM NLlXG9 krڣ?+d3fಎ9R$d,nQ3UU&=-: b%=-gqN!'+'~>+ 7'3^uqnSTT }l';< va1[s[˲LVffqEqp8m]'vũptu8(N^tPU~2L<-#-5*WfkL Vk  V+d|!5v~[r]r111 >RSR%/7bdY& 2L~~ <;t8BGtKpnyy )&??;oAŊhCQ]UIeE%:ư#yx`0xs}f{橦rh4c2ワɄ$哞zg,?ލT}MWR!tKpz{3cwpP]U|M~m*8󨯫FO7aqWBoOXozN p$<@x_ yN@:-OZ6|q;ɟIOW[[Ú;5o Yl :.""nӉLUUVA]]-:3S5gDKB(++V:|)ZVzj8d#`XpԽ($T))srl{ۮZ  iHos݀zh< {-J2ӚRo''ģ"6lq*,4eJ許c~8-_:@8|N$.?|'7z8> 8kIۻߡCWщ)//>Uhѯ)M0Cy7),a4 .;3xBPUU\e%$'ē@Zj ɉ Tn` eѲU``}E|fR.S.쥮J+.ƥ:!N⋹둠_yq*taG! nm< ظu;ng1yyj^~vkoKG3᢭1D[c=\L}p;v|p?-=-:̬ʷ=sy_Uٻg7@ڼ0_}_}E*FG&%&E>DES/X?6dPlBrs&DžJ)(3ZM(deѯss)$3v5" )7`y:$!|Hmּm ,Wx:2TU @h1b掻i r88{6&ZpZ sms9}";+`%"d9gΙl4)+/(dڶY#*h96fk-$0IR䉰F'!!EQų{:%9Y_l+=wJiSQhкSUԔYZpׯcI<+h429q-l۲EpYaHB^S۔BV*W-l%a~\ (kk>G_Rw#2 9̠-#@gPU*tсKB瓜@Qt:&??#kB[7ͻ^lemc ̌4ss(/GQ 2x0!#62':(X$FFD{ VbdS-7sVf> .>^| ֯cw"`:oDVTύjhB2u ׭Xbx@@ 'O`n8rxhKZV?uO d׌ IG" 0kWsvg{?-@fzAHĨcxXN~{5wbMo[TƤS]4#b%3VAHJLXǽ`{U+/`uZ222%CcpmTTTPsO>}{Bd2?j4D_fGDFE3bRǟ+bOH nb?nVň#;[kf=7yB˖.`w`/İ#:ũ&ľ=:/,)ee̻o7K}{Y|"!y%bb! i& 0P?jX\$ lgsk-TU3Ctl$kOGTt4QDFEIxD$aᄇGVsE7 *6[̘9K.O>U,K:uc,AIHOk"@ i|||s\p =,X@ ÕӦOGum⹨hѣFQ^VF'N܌!MSgwHJJoR\\eW\:|||PUggMn?p%<9Ag!\;c!$bH#Oy^!d9 d̋."\GEe {/&Oᕗ^d ^ZԔT:\N6C/]pڴDFFʠy\et,K b8e1!0"kwLP[ڻy'iA Abcm=h)lټtZ!t[TTTm NKM磏M#8 G 5oo. z' ##";y I%]Ԙp@I/ qNa[mk?m 0HXd1+~h՝Z0S bWj_-Uh |` ҙgCLzzG88cZ 2Cy|݊rw7wDDEciu0Î94y{va˗ƀWqo[=/>RS]M@@֘X,V+ _t:t: TWUSWWGee^VXNuU3Xcb:cVv߭)-cڵ}uu8n%;'b˨HT!6{zb0%((`8L=4 gپ_"˸[) r E!<ݿ^gYp`vlͷMn!" O]YvudlXɧM9Y.8l㩫Cb __tz|Mx{{JeE%TVVQSSEeE%8NDFFr!it??c+lߺ NݽcƎclݴIS[eFs>L~]yxk2Hln2mEY"B(C'66AuuY:t-BB[wR%3{Npݳ=]1\EMaa!uu Q__Omm-:Z,k{@A3 $v+jE~^.5uRPOyySE zYAၬm4CxD$=j;pW]sv+\sTEt4}vt*(N'VL=mV@3έf:\@` ׭eQx{{&:]nCC444PSSMC}y]}}M2Yt/sIDATIOƍ^EZZ998TF<<<{zmv;TS_߀aɲCtt4%HH}P\kY}2 tr׽ &1(٣` ?LO$\%kh5ئ#=Rkj ;;WO.(dq\q=םY VP 뚎UWUQXXHYY)5=TUNFC` (8ɏSbz5P2ǟ^zOOכڨ(/̕ЭUq#ɮzO= cᤴݿCr'i*<7{v"55Ғnd2A\\^YY=klBBfk.SR̤}̈́{glq8'Υ඄$RA ~AMŲ' 覈&QVi]"B-@pI v};uct.> ;)C݌4:fh33{8 gN'2?8F9O3JfEhR4PyTNY߰-t EQv;#c||ضrZt#4o+vΟ(J߿w,sol!eZ8,V+rt:Kǭc ;z-j94]ӹ;&&DBCzg[mͭi km $v1 tv.j:MMMCT\.Z&C2DJCDaTUF~IK̊y/ёQ^/O;6ihGUUE?$IHHH8L(,M 抂ZTU%]Y/KʭEk%"U e7{˹ r1 GkڴX4htjusI:}]D6@oǻ|jns7L^a b4c%Άb/ &|;][>4QMU1 9!B͆jfhjh17<=SX톩5"DѰi(& ߾][as8Ium"*BT|HQɋA4v~V1OCxIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Merida_new.png0000644000175100001770000004220214614030416016627 0ustar00runnerdockerPNG  IHDRMbKGD IDATxwx?3[&I + UD@D`CEo*녟bDADE:TIFz۴-3ck*)̙̓==Νp;A 0w\ᏮH} W;+t] DQVωxo)***Xf &n;(**t:9닧'dff9プS}ABRVkj $ϋ`Z)..^(Jjxk"JJJHJJ[n! UyUĉ$&&$IHh{!,,_~}R$ YX,r-ߟju_JTE$IGf}jZ$I bPKM,I I+k=N9V)RWVVFrrpj܄aZ-FA;9q Z^۳gJťK/\l6Orfb "& Y/UX; VQTEQuK@uܪEpla0;?dҤI~p DRqqqSl 5c|||Z )fs%;wNIKK+ZԺZ8S=@i~r5 əѶA@EBqqdƍFvbjuPQO}t:E_X9Z՟]\N$ڴiCbb"_\]s=GPP r`ZZfVÖ/ܜGH[QQ!'+득j}qEQګjAvV+Tڹ/Uy߁T!_FPPGÌ;H}Mח^z5xN(R_~yy͟OEY4:++C  uvvl^EQEY.{a#{>KsmXP9`dbÆ >VKFF&L/cT٧tF߫p?~/tAT}|sޒ_bl܆曀 GQQp]5@V{XJ.@!a#0ݶ&… ޽"DQtѥK.^ 6oL׮]i߾=&[b61Lxzz2p@h4dggo>֭[Gdd$w}w;&غӧ@jj*Ǐ>1_PԩS$0&NNkiU~)))|ҥ xxxRVk(!-jZ|rƏOYYMUE0Z-($I ~WSvU*i&f3 .ỏ'Xp! XV;L«ʈ#СCyҥK ^f /f}5s@2qD6lݻywpbՉfe4>L.];vb<,j4ĉyꩧ|Z*Օ:uDvvv cqQv .M\\Μ9CAA~;'N`Ŋ>|"ׯSLweܸq<#lذg}_~6l؀`wa$%%/~ 1 tޝ &p=( | gϞC_W m:$44|VXB[k#,,暲,KX>}(..?}Jl+#GW^QM=::VKll,v$I/(7_~DQUĎ;wr-ps!zuȊ+Xz5O<=-b]I&xbF#9=z`|Xa***غu+;v`y睬_o᮹y?\VVF1b`0:T `#;z+z^h4bΝER޽{Ӷm6P<0SN~,r1LXVz(]裏ׯ<-O>aԩ׏yG [uTVVi&DQ{_'\+j---52k,$O?4?o&t҅poȕ$~qaÆ1x-sff&ϟȑ#t҅(>,Y;}k}Z=(++kKRKj}#33sOd݊f4?_|9s ׿$11dɡ .]'z<== Ct֍r^z%[2eJF#yc(..nj%IzŋkΧ5o\HoE^^^C.]DXX3UȲe ŋyIIIn|CQVf3<<}EQDRR7xckM:_VUVՄxuKOO?(C$$i9aS]hdժUp >>ZPd ]R:ꁿ*1(T*G r9El M}WzozHxxSTDGGH%e*\\\Xh/ncfIĄ 裏>m_–gbPs>P5ٯEL$/:^|0zh{.]l|5GVmpRQJKKYr%G4l}||<̒%Kn}{yf3/qF`˞ ZDSQQO?رck=z4Yv-_;yp!viwwqqaʔ)ub:o[h4 /8Z†&8f!СC̟?1cн{wo`لpgΜ/ >6tԉyq̙꺴:{n<==븯wԉ_:UTTcǎ:^N???ڠQR \\\ޏE]:ģ/#jZUJ[oDzSkɫلsss)))l6sVr5O>L&fshT>2Pxx뭷[z!2E[$IhR ^P -j`)526pVmO%I݀EʼnaZpW{RKϮɄSkג_믿H s'%%?mK#<3oooINNoooCBB9s&^^^:V! 0!`^w۹s'ΝᄈB>}oOk.جPVVh^7{kf/$LV5l6:t{7}t.\ӧ/+**j&!rΫf^MS2Mjٻw/JfǍ7Ȍ3سg-ՎLdYFE\]]ڵ+[na;Y+++63ZsϜ9Xcǎl۶ D^^^j_&N(Zݬ]FjXmR o>˜={vs_&L`ƍ۷AZ޽{Yu.G?`vz$Ik oOJJ#88;//{̮oZ:J`0tj>(VceQU _y!5 cƌ>cĈ4>a2HOOgԩȲ֭[̤Bt:wM0LNwfɲbR6yyyuuqq:𮚭~o<##:N-E߾}Yp!.]SVYjK.uL$VJZ|G.'l4СcC= IDATVV{z]KgϵVkGRRRصkÆ sfK(ʭnnnv[{5:-b0RR^^K{0 ȲLppp^* FFf`Vx]]][EzhhCpv/uW7z9.o_o%C@dd$ݺu̙3lFT*U$e2C1Lٳ2dAf̼Ȳܠh3 9ZT Я_?9y$ݻwGc6w82TTT( (˜1c~CC޽TfC1LJ|||& sfaB-R}! &NH^^^3?GhAiO_^CF~xxVQLާObLEEEr_Vg0@c#Pm46lAn5 B W]p3:~W\'uh D~5s){Cʌ3 h:B8+ EDDt @uGۀM27K~}bٲeuIHII$''ZTS$ 롇 'ŋ݀Q@ɴiTfY|e@p $?zj W_}Ŕ)Sի<KXn,;4 sӢM4?vGӧ==𒟟_o  Ax،g:v6m8\~L&֬Yp4Of_Ԉ[h J{jϣ>(3ƍ`0ԩSQCǦ5ŅX&N2e ;wvUZƱc)ǫC9zSo*/]W_}ł 1c&Lߟn~sի$l2N>ͲeիW 0̩ڶFҥK0r߻ WA*RG@h Xx1ӦM#==+Vo>xGT*VYz5˗/]vDugaZٰa~FÊ+U3C]䨝hp*`A| :uÃ&ZR]h/66:ݻ7 5J>n³baʕ70i$6mڄ,,]O-x9t޽A;Mq7:uƾ**>ছn_?Z4Af̘0 xn f+W޽{l۶`,Y ȾF#fwc۷o_bbb̤C_rY9s&Æ  Ll@EEK.%>>;vn:zg}֚W5$Ibʕ|7x{{i8DQuֱ|#\ B& J7v'BvXVVZE=HHH( sxpBnfVX"k 7noo}Ap4ݛ'OgOs=WĻ/e\uf^nA?/WxFQ^R[oƶmZ W%rssʪWE>XVRRRZ~\]]L> ~&MsiV\IAAcƌiR[nnNNsq:?b G/h"n:w|YQk^^^-J7ڒ`7^RYxq5;Ƴ>}dn&-{9%BcǎeС 4ѣGW,-[7Sp^;gϾpu2o<hlT:AHHHRڵkǬY̠sر+@|||UVXhjnnxxx/d@QQ/<sssU=zc+onн{w;?^眛/]ʽN:Ł޽31vXEitbŅ@{fC?8}ŀm۶ѹsgΝ[xhLh6 ڶC-8..qqԩ&]s9fΜI||>{}b\6^EEiy٧O,X ӦMs{ǬY$i _uѣGfW"**ʞ;bw1cưn:t”)Su1ˋSN@ttt-^8x ?#޸^vQQQAEE} wzVu•bQuЁy$IHVeʕutiw#}q5jƏϏ?Ȓ%Kh߾=~~~ɓ瓒mva׮]$%%94:Z-++~AYPpM6;8Ι3pF#<(SlgϞw߫I$jK.;vN}:tɓ$&&ҶmMTTTpAԩSPw0weuV-ZĨQ3gU`СCg}ٕ&Nkx)Ç>}:`Es222#?iTVV:屢-[46ʲ7Ϗ#G2e.]Ć **|8[l!((5jڵsGjĥKj쩚ZpW]:vե鳳@pww#ME>BCCٺu+ .$999s8"ŔQ^^(jWJKK[]E^&->'fFjk-;v`~az聏,GVViiiA瀀ƎKll,g͍^z]yfrssyIrN(,,$))m۶g Tf+ K 6|xC6-CS$ eee[M-UsM7駟r]wGǎk$To֭ ה䬧}eՠV͟ '"b 1j oXj_$I7.E={6۷owwwܹ3QQQMJJ 6m?wiQF1e BPPqΜ9åK(//ՕoիW3xkj$ď?xfK8w7x7x%r vigϞb69y$vш,˸ЦM&MTG~ǎ,[ Ʉ(xxxM@@i5kִ4???IKK!/IR}{c7d˪T&7pP~ˆ_W&LdNkvmZW4?$hud-ÕΝ\owu]V#\yy9WvZ7 j'JUR6O]oV[ ,**ɓ 4EcNZ@Qvley&`U*޽{M]XXHfffzgi9rtܹ(NURm4h]wݥ}+:F6УGJKKuVnE1!::It/$IC؞={8sLÇϏX}%<<|apKv%&&?t媡JA$bSG;E˲`c=ƓO>h4յ2EQ,xw;v>_AQ.sэ?\(^~k"cǎtؑL-ZĤI T֫W/ob) \Ev?~|JIl[$IwӦM+7lRHX%(-]4Ej*(rz(xzz7nn۶mm322ɲTc --^,Z$s5՝~e޲,{~嗂`ҥKҥKoFbI_dɧ/TTɲ,Ϯu$Zվ@v;wz&Ia3twqqqqgyl|QF9d^cccOii),֠|ՌV!ݽk׮ߚĻ(˖-oRXC@} b-ESu$i-Iõ%رK||モA0*O GvԩS8q"łlnQޕ WZZʊ+ɡM6lܸ}q}/4IQO=ԋ(bJ2Vl)T k%\8p+ucm$Ç?yd ,?XU<)E5x^ݺjoV/6W,&W_}=aaa;w1cưe˖ ԃWEY L$ʈغqŇS#6\ڨ$I(:AsN>>DDD&3gΰrJÑ$̙3}dׯaaaHff&cуn)zIغibgwɓ'Z7jA U->:\ 2snĖ)_{ ///L?̙3ٴiN H+Xsss?>_~ 4gA8EQX~=Νc…|e˖aaath4ȯȐ!v[0W`XPAӧ_:4v:+pILL>`4AgϞ^-[˩~Mh0yڵkEロ~G֐ Ό3^GM1j,_owAO~wy{ݽmU:۷oglݺ͛7a֮]˪UX|9}O=ӧOf?䥓#F@qq17nlhO>[ni}FIDDDS;FMĮ*ʲw܁/`t畨R&n w0sڴipաRPnݺ1tPʐ!C4hr  |ϡ~8gZtR!cȐ!<,]?iӦŢA޽;)))M <Ȝ9s@$ Ng_"z۠˫"|]wRt*;vt9r=Uc.Ԁjv9WYY(4_1gaϞ=c=EbiJjTTT%aGRLpUu$FXuxPaO?4yyyveV!m29J"''7 ncڴi >ɲՑJj)EQ8y$Æ 㮻 קO;^Pyj)vޝvn {ӹsg$8Sk] /t ©T*"##ټysiN~~>C4߳jo>"""2OO8o[8%"yyyH?_o O?4cǎ1cCҡ*ʫGGy6U.fο5{{bk-pgϞ|,\3g6Fs6ׯ'++NJJ [oFLL ڵCE>S>#>III/'**o;K.b0h4xyy9J)HM}(cǎoߞٳgW_5F\E%KСCd69kof3Ç'55A1p@t½ދ^tЁCmFx'W^̘1"v0ҫZkehA`ر,]{?'"2.\ѣ/\x233)))‘>hĈz\\\pwwwȞETT_nk8"ꛈwВ%K1c+¬YElN8':ubj*?Nnn.ڵˋJ.]ʧ~| ///tRchjX:ZT*xƏϩS(,,wAQs2'm )"*p%1+&L`|7<̘1N:Ց?PՖ}ڵ^ÇӷoߖΙWٳҮ,T*;vd޽\pl֟Fڶm^k.Ez1 зo_\]]k׮Nkmا(<<3ĥKP^ĉӇxa,˸;ܷ $;;LIJJ"))KבzEFQYleW GmL&Vۮ{J˲LQQUArYٕz!ϟ_ߎ6JrLS|^^o7n?z7hѢz'Vړ "##X,3Jbb"9}6mmIŌF#iii̚59|c6Eq=^IJ.[Xd ֭gϞtڕ;:___EA; 1呝Mvv6ɜ:u'N`4rVc4aϞ=T;vK.Hpp0nnnz o*..&++lΝ;ӧ fp-}^ oZyW<%\LL dggJZZ'OtMqۛӶm֘;teSNH]uSUs~wx%X%0:܇/=R]U{>(fOmq-_ W3Kcs\~nwoeRAf5'ΎókOZ.~᮪K;:D~ٖJ.!V/>=Pgwܜ[ܴ]-;cs[;6^XD[̿=ؑyg(LLC->[bM詓5(yDs`m׻}sϋJ.(f'}?hYGm[g>8ICk\oRb>P+khߡ(ؼi(yDO4{N4'h|d-KgK~BQEr[uvů h[RFs\$!Ռ ss$C$[ )w#)^ٯVر~·>3ߜkuCG1#\{y[ 1GDKIcMIʃ$r @wG|;G^<;E`ԫGV{1ؼ]\ͱOyͤ/T=03u(jɆvAQVƩKTxu+DÕRqFUğwﻣfpkH(zX"w{כ̫jZ$EFP ɶ7!nHT#Ț%.O,jjX Ո@uꄎI4}~dXa3錆y5W~m?Ka^IM@JIs+WK.|v?ffu'8EQT-]*mYBAq\h<[M[H4@ߘD{ʐyϮWB0pD<^{6w0S G%Lyٱh[OOTiSu'8;P4H w[J>/%zN$eOFAE7WCɫthE,8| (˜{8cp rtM~eo!m:\3`TJxRE(JEp<wb~с>JqCS$N5c1[]lJézsS{3s;5"%ܰQ|gG3nX 8X&osG.[숆uj P.[)%@8R څ"V*Q"`%׶|r M|;3㶯ȫQ,I! \G22? ˡ!‡: #jV%KĒQ-ۙh҈@Ep]I<㶯{ X,\XPP(WumM!,۷mǗREl]ݘl[nvvT َzH)Q} ΧI&"xh0< S,kN(VZǗ~eDuJd6>w`X 7Inv%ܴiMݧ_Q׽T+G&VV:GUUykԅԖl a2yT,yP@y{jԡgY&/222`zocbUQ1)?^׋uJѪ\( ao^D"X,vcYmR_ToawbP8# J" ?\.GbH__(ch R๒gNuUP|Vt]uJ}]ׂ;wGT67J!_F-9Xi¥rKKF5M8',]P4M3UU)"NH2N:۳gJ`'O$LF4# !7b(dx'?!Fu%cǎ."OJ|_"1P 躎1%8)_EytO[n&O?u87yQ@ wfM{$)}/T#U$s ~)nZr[%,rYD>W^K&)u] *dUiu?!j8"*SVMӈEcA4D)c7v\.p"vxa)w܉#4eS-H<M2T<##smY^QԷ._=}u*\%`jxmUMeZ5gxh,iD_tw M|q܉\!CPxbϲE)hh"9 EqU-u,o MS([N/+ŒţZCS5?nS,#`XESVWMmU6?|.,x.mu\\OR,XW|u\XP([+[YLl\[G UȋJ҇b9>\Jy\ UMD* ojŗ|;}6:4Ǩ3rD'҇r%'$7Up{p(X4׵;gPY"_*+#/%Je>buyTEA( @Q<ȿ`\\ߔj(Ѻ:WL5J@}}=Lhlhf,.ij=v!/Ѻ ?;x'f-=:}?r,InQʅ<LpC44("8TU19zp/k7m;_ׂgIԥB *?@u)Je <ʹI4uUU/cˌg*|.;cQzrhzhTϗ*]mM>! @4]7mEɪXB!읟1#Ģs0:[i-ٲ-89>E-0%=|-+ΤL kE@r0&t,ӎX4( gxb8tf$#T̯ΝGqũsƺ&vTirsU +gi?Uv N?aBw)iu /q-'cܜeB2SVyER`߰8pƎIpRof65g}SN~N>}eg95RMUZx{x~KosI2j [^C)(rQy121R0Um2M dHr<[5kc=7L`=9j|!ZՌ_ERΞƥ1*ÊxRU̜BA7F+<o&UԒ}k/>kSkNpছn]z۶mcǎ۷o..!8呃Q>Nyg( %?{ddKPOI 5ėLGXPtn`/dt(56t>^yT//]۾7*Wgplr(wae8Kv3lZC?Q9pDPlUb'4p̪{oM9xNTEQ~&ֶ)S|" CK8 k^6lpO)5T3=9oFlذa.n/d?;K88QU) 8T5Ç GNgj)+5Bm(2 —ؕh2~f-sǏ(8E OV9C,F54w̶ h|v{ֳE5u?vC=zח$4 Pp@;1kiA1BiM@P0C:yX,ټ2w?灮.]O3^fD"yu(].[[v'T"UO+lVZ=yXLԴ-nh rcǎWgڂ<(00t KF ṓNؚ( 7ʙ~:O2ad \M HC0:iʥW+v a /,Uזm366.T݌m9ܗ)mM[pؼg%m( Z"1ʃX1>JWXUP̹ޕ$|"d/bwl2ܷߺZunxwu@A=syO)$1ECq^1m+'XIbb+_;1B!'JDSy,r1˺ Br*w\fQ9{4U(*Fo xn h J>E>kJsn$1 <:eK#XlHqPge;JڑAM%ZW_zh: }˺]";',F{,J׸e l<]b`S_ZSdžh,))wwNpil7U'Mkhc~Zn45˺&#G R=q4M@ (˓mKq)$(b  .$Y*:ri- ]?~uW\>3N0Bck@`0jkk'-O M(r|PU[OU+_kX=UŶ,ʖ(fx0B08MhP4گZ *f F(RDEviۖ,UFYEBᰪjA3⹎Do:ut8ﻺvBhM<ۼ~#GTMTW> TEAJ~x!h, WR|dm28 S.WѶ1A顿P(t}7m_gyGK[26nBi ]ݝ|Bo߹E{}zϟ^zNg5!h"B!IDAT.* y$>~dd<<~}90 ΚqMOTB R?& J y3|}˩[`_7 <5jwx&edh:-UMcÚ5y%ITU޻b#T*hg>4cӄe;tu124`?c4ΞAv ӿM"ʲM;Djwڂ;|P64T*9p`[iii'O?O=R;-oaڵe;b< 466կ^iңؖEf|>꒽J \TP@n5ĕ\3Zږ0Vq4'H `ƍ4R|'J hmi񆇇3<dBHhjp+++*X:  |w#::@sKo{aT5 xlL4!v?{gfwZoH$!<0QUuj^KBё͹?e0_C,Hp?qڵ'B9q '.m:C3;=b1&r &Evuqyk վ?Sܴs?ODiwol!%r/=>6캠\*(O b:MXÇ9}4`Bb:zzq]EXӔsⴈ9fy?ԧ>jzO nuC y_J`OGeY3&Ld۶mĖ-[&4eQ,>M2.x%t'|l'Ǚ=J!XpG?O¿?vۑR`@x/P3S9~gΰrJz:_񣕳M4b5 F8ql!RIͮœ%`* ~hW_|oKBQ5R;543٠})b { #:ibyx]B)Ӽy2=NGJ,Y <}(4)F{(f4iY@+V1޽$Ff!}h\^(DMx,K4;>{9=`Ԫ\\E:6eEHCQ+וH@h:Q}Ma+ X*}#b2Rs&T5TK%|`:i6U3ALE3+Vu&-ƒe`T%#x%㒪 388Rs&e6, ^勭I3X-GzҔUEyn\#YLO$$p'▮S]rfVΙ6hFe=vsy"g:aI88SWQ^ZZ<\ץ:XB5\gBp*Ԇ+E +ۖw.| F)m_}Տ Tk~d^҄L2z;,YZqoll$ ]m<O3΁%"!r"$,J!Hp,[Sh:ΎeszRBXjl;76j>]۷T*EsS77KI__㙗X,Fh8R W(0::;\`xu)l\bOHsQ a!5R3\̚U 'j \Z%?20$-ccXyl*kkzYQE)܋g2YyG E$#*'|cr\W?~āc3XD;Z u|9T/1b:r7f1ƨNJDnXB.[g&+t~֗+ZZX;zsr UaB1^r|n D؃4&`>dFYQ~EJ4A"o`n1C<^ε+nVV5|k1i ͛SXs_q5!(U3[i->=ݾ/=e *˼ +V@ vu9ґuhy*UUQ;1OWp+7-Apw -a0UWnr}-֧t~޶d9EwA0YV|u#R>@[K=HeunYW5)JA#O~wJ,6࿽wqr 'OOv>gP7Z?߭hP:UѮ}5t8,%[^P<6]NVy߳#&cyR2K5:.Mp3 e 5TKm]5"O~kW,0Eêֺ!+GIƗS4Cf@ :˖k#Aeeʦz0 SI-V/6_x-+gԩ6P4]0t(;6HI/C1U_6IwY :}srU|FegI@0QO߽@AUx6Q?5 zݽ c˔ʕN"mW~֭[?۱lY{U2 C:#2L={N>s?~#{`ւm mqvn [2<:ʷv3#<?,[ni\ruMq]Ldms_4{/-70f%8)%b%KxM7Q*, qزy3h=̮wy[lM7f-!˗o`0رc_ٻwb yŒw^4 ~hT}d|n!k׮MMIS [eqR(TUѱl _df(_#a6R TUUB*HeKK$SOd6L$Ɔ64Sݽ}>a6Lv!*BV_m 5x0+TξG؍ +?}@]t3#xfO'݅S2Oe1 CU'OJ:)80;1eYaC1'ELLr}C// rsŌQmT-0b`(tlL@ R( i˸xGTzǜ.1UG 5S#碋#uViM,|r44HD+HeY β,R]1mE<0UMk* P'b(Bh XcYdzm4DtQAK/K$DNʗEܼO.pD$jXVDwto`U۫E~6"'APUMu̬eL[pAScCO% (x ګ|8gWMUg}DТabyazgX jk'UhE|XU%膎 1 (9 ll)HP0+T0窜uhfí:Lت *}>ą䋪^ rKu6<13ZiV6 m3i\ٸ쨾{si n襧x,Y/)CJ^  3s tNؠ7۷iǙȠ&MaݟQ (lk!=:<S\f[)_,h*B(:@|KJ.S@+H!lIɮN_ Ah%ղ&|~-ibŎ ll7m׵ϜpB7z^G۳/Ǩ[eP0)uekKI)>~{=uj6drEGG8<}~%DŽ:`(JTBB|Y1YA uD%pPP,Ov̶3U}JR"Y#~T~y@CcE4Ld)ٖ,2t߲iU8pL=l'}Bx-,5"^SE,J ԸIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Pirat.png0000644000175100001770000002147214614030416015642 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyXSW?`@EDQ);: *Z.oE[|X]־}{f͚e&/r<`Oρ%h ѢT*ٿβ}Ç@ff&߼y7KT*eʔ) 2dl8q%//&feeQZZʙ3gCDllli)))!::ƸfmEeȐ!HR<J) fϞͰa7nZplp?B34XQQ#G>INNf„ :˛\]]ͯPoT*BK -- Je1WԴQtBBBt~NpZ !c @.s-uVY0[\j\ UVwlkA7\!6{4{F|<жVoWtY (U6VF3h \ba&i\x xꥋǀSz16Ϗ4QCk#H [nZ"y "pԃ5kEGf'8! bDA!MB{ ŅٳgjT???F]>Jp$$$|\rr2W^@M2BD5{1yDh___MDRf#2VJ}QTTdQ R]ˁbT˂ hݺYʬY N%B3yhP(ٳ,MDD" oF{ݫ\Ipp0| [n93\O? 0&/8ZM\\(!ݻk5=ܯ]]]=~۷4̸o%~C&LH6y%%%qy~:̘1rrr^^^LhUVZe4meddp%Ə/j7n %%QFZ/3YoDi҂gرlڴIz9[oetǾ}DKi6"6MkBTvE,M\XXO=E6qbWj.Æ cذaV;_5 mΆU4fkS0p6Mp6Mp6Mp \.b4aιsHJJ1qĆ4 ^ |b $66j[l>4.7I쓈&8ZMQQw1eRRR֭[9w\Rvܩ 7޷E㐞D.]rI={,}]'xcZbr]vULJB 66BBBB,Z ]\\.^rOФX%ZVCZZ,]~6nHzzT͕ׯ}v eRSSIHHka$<+oĉCW\SOŠɎd&KĬNPw/gϞk׎ 0b:thtsVڵkDGGt$==Tĉ-Բk?dee޽{ iӦ{~FJ5 MXJKKyΈѣGV{IbbbLJ#GIMMdԱPTW^RTT4`ek֬믿^3f Δ%m"JϯSM ֮IiVh͘]f I>ǎ5g 襠O>>>>?×'0Atf N*?_cǎU?^|%KЭ[7<<<9EEV_b] iڠ4f'%%Ϛ5gq;dS)//gҤIxxx ɸ~:̙3,999Gr9ܹsE _`)ܾ}{9s7OL:Ӯ];Zf̙[}]yyyշ*"qc_ .se… s!zEIMM%,,L,Ou5W>}zs8>f`p} 0ܹs̓~&M;#F|ՕE5)H1bXM=y&7nё'xR~ +x|WPP@tt :)2n8~ܹÙ3g;991n8\aK"0dzM\\/_zJP"0ydKP,m\\\ BVXd ǎ#??'''|}}2dHZ...@$u!ܹshJ%_5cǎ.4h'OdҥR\\\f&J H СCg 8p%K?~||dg0bT_Ύ;hӦ ?C iСwfҥ8qfg*iiipj7 /kwҥӊK͛w .4-ƵkصkݺuĉWホ|Zt>lɦ5){/Tp;+Do>!##㐃TX֚ӓGU֭[\t-5}G AB"@ xϞ=wCfe?}ڵsNNNhn Zkz'''ڵ-[0p@JJJjlJ|GL`:~i/:ur=JEIIEm;T071k,[vq;;zJKK3|||$qqq\\\Lmw..BIaa!ŖShdddԸw˭#ի5|nݺ}1H.] rۯ_ Xׇ֚~ǎf~1HMm*C GGh\*>}Խ"44ԝz, 1tP޽kz"00kTXXȺuIJoE9!-:{W6mړhV[O4OήcrZk+W{i eݺuu,rVXAQQXMm*c oX5zí[jRGGMźb̙39z, wpp'ɓ&QVV9pXMm*cQTR!77O~]PVVܻwoh,ֵ`͛dioYYY:-֍Օ CHH3iBJJ 9995Ec0l;yW\tܹLm~~nJRzppE!G㵱tܙKi&كQ=xBƏ/5}D A&qY^6l 6MrXo߾0U"BP*usQ_aKD য়~һߩSB04jźL&|eLfͿYYYKTd5HLL {Ch۶d\E֭iMm*SRJT,|vvV"J(5akF62S!l &,,l:hժ 5QkFGjj*.\|ݻwMJ { ahzhL3:P {T*nZкx'4AkP_W\Hd...(J16PYb5}کZ^X&8VEҘ-mh[ddٰ*6ٰ* xlLD\II Ͱ"n]tEccÊ4K "&\QFWmAdž4Ri \VwE Q'4k-4z0AS*߿_gY^^^T !@.c=>zK6"!!7o$%%( ^U#*}̚5˒͵8@dddmݻBCCh!hC$*KrmW1P;ɀMB@ŕvV EB[QQ&,,+WaÆrn߾͛Qլ\[xg "11SN mF̆ W~9Eإ"XT>XwQƌ… fÆ $$$ H(..ޞ VYf }L:ɓ'CEkqUZZR^נ\E>؆8b(@Y~(2mڴǧkpAAAf87FDINNLJ˗/gpBŨ^j4e\h'jzoY&H8x𠘧k=,RPPɓ'9z(/^ŋtԉGѾf-]tgRXXT*k׮ӳgO^ȑ#w҅z%Kt\Bii)Ջ@^4eڴi?8p:ܹÁUj5 ӳgOOÇ9z(ww:233ILLDP0tPBBBɓ?p^tߨ:u*ӧt?ȬYdf[7܉'d˖-W K.DzeG&QVVV>R)SLs̛7 H$5*++9~8Cm66bzWXXHrr26mb5d23gd;B222 BV~ 6lॗ^ާOӟDrr2&L̿OٺuAኊ ^|E7N rD7o߾۷qCPPdffpBbڵkYv-!!!Fip}Y*++YbE} 7 /_p}:  9r$r:炍^ݿ>^y***8x | F= hJK}j \nT%ݺucҤIZ2LbqZ㙖sss3dxʔ)һwo(\`nРAܹUVXX;'8x`NP(ؼy3i S7v+,Ɖ\QZ #--yޏ}Ν$&&{xBBX>P;14F]^R5k/^dmLu3jԨ(JL7ry'\Ì/UuHMO"P < QQQ,Y۷sVZUZMtt4˖-=Zx ؝;oǎ-zZhEQQQG|yPIDATu6h˖-  BN̜9yk.W/\.oO?mlٲӦMKm߾ 2 hzMSL޽{ӫW/mf1=z %%ooo;FE` O΁Χ>ݻw '99P.@sӿLV 6}nn%DbQZV+U*3\al\YYw㣏>2iN>`DDD4@0=== ok׮zf̘QLPPYYСCufpx ڵkuzYls@Fi  {g+x"DDDX:Νkү?{}|{ݻRRR"}Z&..{{{bbbEٱqF.]޽{?ƌ5 QQQ,T?~ExRM$9}Y߿bcc1cط$VX5R2228uݝ;ߐg!={ kիWEgA>Kzhr)'Nb׮]233uK-юk׮ Jb[999gm &P oSRRMG1Pap/8vǎJSffN6(& nذa 6Rm$Q: 7DS^Ltt9ڹe5i.6hFAœνIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Pirouetti.png0000644000175100001770000002207514614030416016547 0ustar00runnerdockerPNG  IHDRMbKGD IDATxylם翯flQ$tW:)RWU?U{{9|0E*Ç67p3F) >ܹMMMnƕT1c=uV¦b?~gϞ$IrުUP(Ue/޽`v<ϿDB===[*e[>PUl[PJOʲ|v$)Xleٙ f, ]9o*ȱc^!@)=SSx<{H6jB0?_ڙV?DǡESǗn:0!2dY0!xꩧb^SPoUU(2^+b1LOOc~~"NZ[[yf_W'h?200VB (SSS 1« A)ŵk066X,VMmm-09EQsNڵVeQj?" I(Wxm۶Μ9*KdgǽF)P,e!3RcP|fgg VR)8q.]¡C@ѪveMOO#8P!qI"?O3>aǶ $}mmxڵ܇] ^ +3 #@WWnI^H$w>%/OKL9[.^ñc000`U=ib1LMMajj p1w$D"7:\ĉ!EQ`=BUUL^3fQA'~ūWtbb"цVa555pႵl]&yDQACCkX__;!d'qݨ,XR(all ,cݺu裏,]oUEa%";q,[a@]]H$ /\7 АDB(czz;w4}w8B{KӐe R, I`bJi7&uҒE@~fFtݨky<Kz,s5Z2'N,#L"#L1S6oތX,G::Omظq1>#iW ".\)l۶)|B!-y_QL&]oW^E2˗199g_cU;q7hB6PƉ|>OE!3 !hJ,Ww_Ewl144d=B}#Up{Tu>LDpU*ʪívRΜ9d2`0kM*;U[A13QBؼykG'B^BNx3#k+uijj p6 44#-XV[;ٳ'G{!L"!L꓅Z}]9Vھ ;IN)'OeB)5G" 9؈zpt:ȲO>j~~~z*B<,kvy饗dQ @an~HAyKK ?_n]퓋aŋF׷p^wgnx1H]57+49 l4c- !JῚ-|g/-,,,Ynii:\#1fApʕ;DQ1\R2a"o8}݇x<Y%ӧO [5V `vv`m۶yDQW%e¢(DQDcc2{n[.ѡoEh333hjjɓ'~Mc~a\paER{{{<KbvvVofx-F hnnd)Ui3Aݠ0p6 3lJ8N:{B:Rɤ=˲x<u,L,w?8 XUਇB"x^Ȳ\0[!L̛sݻwY= k Q KBG:EݬC_똝ʅr1)j`0h2k% f&$UboX˲8555 @$cq,7n#XVcY@1 虭>3g*6_)%v(~$ 9rD7y<<38J)R-{rţt־Ey˽ ZĒ{뵄ViI$ Hz82z!"dYa[M9,^z%{カ2 0%2{zzDi;Wgg)iz30 Tjל' [)kmmc=fۨX,˗/CUU $ G{ŋ&>"N8]b}>Nl(6O+%c,8](4CH$3?%,FBJ!LYe|_7ӴJ{)䬥P=enn7=nVUORQWyN)]z`[l߿Tb(wRJSJ511|Yz)44d ]o߾JQ%[G)!f%Y~7#HErz衂Ɂ@hkk+pTrc(}^`YmeA_=sLYEZ[[KsRGz{o>U c(=~ +1+x(99O)'Bj4D/_ƹs022RrfM (f,`Y;-..eYC[ /IG#ylG)mALk6R)>$AU$.QJyHQLOOW{"Wy<;`3 v ###L xhVFVM/ A ^JHED"LOO#`qq&j6n܈cǎeYHp8@ X0,BBPJYG"`0 &ڣ{gb۶mxݒ;n)$Ioߎ/|> x ;b:۳o?&K_hkkn\ 7gfe$IZ2/0Fqy7QJ~RH$/NiDwww&l5<;?sG) R)Biuz(JU.B~?~?8C}}=6mڄ64445[ZZb[I>dJn Hy>Zvd3kݪh- بWqW*vopTUՃV%`ݳ, [)BAcd;p~dќ(Yo7CEoEDA]aǃT*)GJL *w˲\BY^ku˖-4gQLi][ap9lLKie/g`M VW̧Xh)%Ŏ9wVqÆ EPz`]ɝ0q.oVv#0˖TU5oSFRZKօxf7ō 4oƋ/"HiyzOOm|'EfeLbKx^R){/횵*X\\G},׫rկoM-[1^&q%%֍܌k׮-YĿV Ez<}<33X,wEQ533Hb= }yG ioЀm4gցLrǎq̢FAoo鉗Y{QFڢѨF %֍ؿ.VcYk^0Ө!\WU'N@SSYsEb]% 8ZdEq=QYoYRfn)#ܔ+?VڄU˺uTfXJfoBe<쳆e-ڸ2χΝ+Ʃ-=Al,%\ؕ,v.QJ{k׮QU2p.\X8ͭp@<,tZFY/ V+It-..baa)B^ogw-R?Ɋxh ܌ `>(e8`@/RJ# ҭ~Ji>(L&H$H$022ׯؾ}._3ݍ۷Cx^$I(y-;!v@AiSmbww7zzzFqeǺbnU| !J y7m}+2Kzwj\rED"pl퇝&T*;\]]>/;ȑ#í_s'|Ԭǒq|+}>!"xG[[[9fIYW)/BHNg)Q|z @(e=!T8԰B=l)R`pg,g n\p{qU@rR ~i|2\ڲd_2|!l{&mnݪ ڵKO-:l` 9,ˢF QJI?,׌'ke1+WN^~}@RWWOܲPn:Cւ{eLQW[),R*x!qJ)!d?g 4ӻx}ڲ y|cmbk˾wZ[[?.1N5 ZDp---qEHQcG-)22N)7rի?zwܶɭNsqWηX8pҦD",oǩSYhP*f2r^ /4(CeǛrbX.LBpgJ_Jo)uJ5yR}їeYgPU`F+ʟ$Ib1PJĤ=|fh(HET tTJkB!Z!doJ鋔'WfSgk\IDAT*B2ԿƟvmC~“O> @4E</p)}9l-`onnyM|eCRR)P( { !x<h4Ν;YUʠR#482A`0Xu8#ʽSSSvY%@_Rh-ˇ/^N{0(Dm7=AK=OE@$`qA&V V_,|]fF@ e&՞J+Ob֯_o6n=M2=GVrw ʎQC>ڍv.Bq\l,0tvZÊRүndPSSEQ ^)pkiPWp ihrY(5Y8L*g%’ q^DjNKӖS[KrmE)%qoM ]*6pe.3맅|Ptww,.c0:u835z-jYTUcWíX\EB7Αɲ\ 9vήLENqSّÉr 60 c{ {֊J㏣ 0 D",T(D?gAetuu=;^v|_җ\ gd+K*Ȭ6 \@ `Q`~A,mvAzXnj*k)C4!ZIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Pixel.png0000644000175100001770000000425314614030416015642 0ustar00runnerdockerPNG  IHDRMbKGD`IDATx1nKkɉHH q # q$DN8w 8DH$D R;S۽S3GMUuV'"unxeh}-=S.cM x5&ڐjyꕈ\^^^ѣ{[DDnnn l[~ V j_[yF{p BYmHr #}m^w6&s_?מ?."K>k=7od}> V,-EJ{yyFoED>}*"*|}}=z?Kհ C\Eszl5"۷{?# 0 ͆ԅ؉$ }hy(*xSǔ*xaPjF/kȕ,ꫪ7el(„P6RSvT[a?k͆>TXj-pjF5 /M96BaA( BN5X=iB"14XRcK@@xc}A )R#AdBaA( kpEFlS=(khu]wA({sYUPpʤ#K-25})) !{A( gy?勈<{]h6tr BaA( ߿1;Cqsed)u?]A(e;~Я_^Q>u}e lp BTO>ȯ_i_}ʾ>P A١e}:&)܏?F{iwKv:Ν@ *e>)Uer3ZgYBA(L8H>cˈF T)hkEVE9`JoL8%;j8Lu,^5D"uUњs/U=nFmP&utgSܽH7QBaA(!|ql鏰? E lA & 44 if}1=ipJ3\z  0 ⲈI 0/..ZOAæÇB\> PJn'"rvvWrsݟjU-XgxVbRsuꜲjPpJqΆ/^ׯGidstb){ FI韵UB9pZ&Vٖ@U 2R6PpXH$Sg4\Y$&77њ?m,ջOiPKUK\EMo*Oٔ?F;J%t`5)ND|QRR}SMJ%ݫ:mp B94dY{]XL(f9e}aJ2gzSaA( 0][5.oe*{߻aȵOA(I㘄*"ۚeά@ &A(صi063L4 d' -&  A(L8eŸ+[Pv-[cM޷nQ8G[<ƱF߶[ 0 I!qk[:5vy F TIZ_zl(„P!5}(uR:;pp9"0SF0eIz 5;Yz 0 d`kHjYzFk?. cI܅RM5P8`e^^bJ(j`޳ҟSvmABVR"5PEޔ]y__{L)JĶ 0 ds*O<}9OjU)ubvvvͰ 8Rz\sV^}VX&>088|4cF ̹g=TCC~ʹ5 CL3F44#$ BPu뫹XiԞ?d?cicVfvا{{{g\FtxǐRHāM3h4xgp]5kVs%[ι-܏35M*f,+iښmH& z7bqݶXVDXVt3Msic=dy*0LuX rȱ*b cMaD"ã7=N4#Q01RlVki ӌ ӴU57S}}}]7U@_n)躁4m4@J_up+ROg2=߻n hkn3bo\rZT*J%~abb]D6꺭IwrβOr />}oٲGðpaXd2lj\s͕UE­0R"TĶciZ"~S[lݫ_:󹙙{Gf8-V{$܉SB~PTx'Bc˖M )'pq!NGub(B|>O6ŲkBSA0, Nfv jm uGnJ$f29;;\WmG4ӴR 4MWNÉ')a6[l^#,,TfGPCuà JVԎUFs|2|1/톭fT*5̐w~%]|!϶Zn?h2MZmSJ>Rjٳ.0739û޵u~"wi}qvuBtWL@}=n{s={!l5kFYjՊ'R,ժ\Bmg6- ʉDR,Bڶ@)IJbYsÏ:~9! + OEmvzMK:fi:RX\C4fzz?HxMuTFĮ]r;]MvC=L`KK ym \u yqyc<FٶRt87pCJl !ĔRrS< >nX5)'L3kS&&J{ِi40 !i:0itDX,t^ON)ž}ٻh/D%[s8N!thF2ٜNJdמY{E4R;6G,n̪Uyi'CR:#aJ&o[V̊F4 ߰ݮ.~f2 $Gf߾zMd״u`` oGG4t ެ*z~qꮦi$Ũw,) ppN3v?@zzF8F)6ud2&G>F-TKD)+5'<>ѝgZC*%$O:!qƱK45[G(I8qӥ ;Hs6nz}UAP#V\:M1e:NS%yqQ^}YݪC>BhԦ: ntz/nbtJ(%O Mn-.JD"}'fp2L3xDpH4C*{MJbR5( MP F6%JIGO0D:C,ژ#DJɱcO`6˲=T>T1 |ߣӬ3 sӀRߑJi0mGN.hsK{0$+UC}>Z"]sMf m'2D)wu MpVlq-a!ela;DX6fǓaXZ,ٞ!R Ί yP0 dbGԛ%|4/%.^Z:0 $\-GZflJ #BHUJlXm=/WJd]wH(%lo~0ޯ}'I10C)~z-]7t/hNNH4 ^@ʐdR iiU#q";lx N+֥fY4 dx$ "#c ,v۶JXi70tNA(%v f:-#340}MӪ+U-G6L Z)jT("<@NLi"K1jPOuCgH'{-X/xx_^  YR*g^2W/:;N8C×N ]l]׍%.|1a:zw \<0F\N$hjԪe #/yA@`pp=9t C{h"AĊQ͑gi5jgl[3-O841 0<33BڮC"ȐIF3QJRβjh\v_ԍ.}ǔW˴;mƮöcK0^"L CA`?F," |"8ס<'W0Ɩ)$aӎ l|e?R,0P6C#)| ɤ"B74}Tip| sӴ;M E) >]c 81qΰ~ÍvM4d^_(a,3t:'䯬qv~dna6a 'N iZaDf(&x{{bŶDy~k#,k:HC7}yuR ЙW4M0DiPJm%4-"vӰzNmJ~t3קXnu٭&i&t,cq ,Gs!T+1}?g˥qtQѬ@RJwE*h4N!%'И'Ю[.ឿ?M)aYѥe \OO+eM,+J"QX:-PX,MOH*E$8NNBKS,n3{:M;8(RJ* [s3"i z2 t |N(+ULNZ\1nر'(ÀJeukoiji27wH$څr.JiU0bD"W![`bwCt: Iݤj`ΐC0 }Ш/41 ]:ZS!N]4h=LS2uH8 |ߣqh4ݥ>fsle{A.NǩZXV5n2/&USgrbmߚtfKðÀFc h" hjA4ժ8u}F@ǏZ8NJewt(2daaZm0NJ1Q C{²2 us+V::SSp$?z4}MCUt#1L[?%tqR43hZAz}|՚Z]c*tԎuOZFNA5ǙߥR]C8!7n`Æo2$`eNZZ=Z6a[)H>h5X" |!8?U@^grr!?Nta eyik:M BNqFGG_ pg `dd ԩS;vjuÈbRi?w3! C[ӴgRjD`R]VP |_IԷJ)AhZjy \jPn;X_>^k+LM=϶mY~yV*ۢZ/H) #a]n3M,k8iAJ'07jǏs%SOh4`q`- Q0XדdpR^4^ !|7yǎnTkRaf$ D"IL3eu p'H$,n}9)eJVJ+cMvJ)7ۭ0 i4k:'T*4OKAy!ķX<}vGV\. Z-]1{5k.B{nݺ܈מBCOO7oҍFjJV,⪫nXQAi]׿ZX,NRi6k XZRbv'H4rXF;BR^3009`||SNQ*?L;SSSx 9abYCCC}#099ɳ>˭ӧ|x[io1ܛI=hTUv MA)];be0xg"3pbyjr_tϕe9/[7C#DH1?'NEҘfO>+7 F݌EbGlٮ[jmcbw麾 GEn,AH,CD"xࡥEx&]X>Jޚ [b@~ժƓ[p;MO)uzE X. SS%L3X]aJ RH_wqWwJ (4,4 bx2wK6s;DX"gU*3NCK-{!D_$diʋ b'Ou?\ѓJfT*8L[Vۋ >lPJQ# %c֛?VRܽg|~vTSߖf 8Bgfjj/BN~ÈL_2Hh4ʄD wPmڎKt~ƂӮmӪQ×ڝ۶37?@cabGTdlyGz~jQN05uVĢXM2պ |"$hWێmBiē=zW#Ð,Mmtdt5f]./^Piy:u9v[H%_5op ⚢\oele?p<|}Jt/*ZCH"m1*25 pxD0 bx W/R?PJiD"}0dV!HOWjΣݪna+mE}Bmv_r5={7W&3x"iE===mY6 du.X_r߼0^so*uV$5ZIJv#/:4xkd3BɐJ033CCJaZ" }^b (HB]׉FēYvVi3GKy˫DcdI ӲMy T:d}]_jgR|M[0MbZ9t "Rn\y?pQ*XltRRqn0,j %` IDAT0XL>wh5if 5Es<"%,`6ٞ>lӢ2?(BjK.2dįְig+-*>u+I:j+Ϳ:k3n\] ÐrS=–<=s JFQ}Ѕ]ݭ4Uh]wR ˲ `rQ+&tÐX7s0 \ ZUx"dN̗EnP[&} svlݴV W,y!#ė!49=á]0[mTeϥQzs.u5u2 lkyz? z(uŒdhZ7"՚\@J5k0s:>D<]'Ο=Fa{:Ē[~nZD I1O(%H|q>}bU* 0 a5fل4 aELzs$q:bUL̔6T Lb@/itP IW]H()Ϗ#ӈvhhZWQ_q3!0(UD  +O/"LyWeY=U}/ P膽a%|Ό~,A>th$eE(D]7*SF}& -WӗA)sx;6gZlKi ص0mְvtѡ""{s 1&4ҙ"z I$4BhdEP4޾uD<}#I$Ώp# s]N-vHڒΙ$h(h6+N4"ORxK0&fKGN[?8[k( ;x6t2tPQ C'F-"ѨdoYXVw4j#xhVaZ:&RJ =0B 8ދ'2L˖Q2!kFкBP/"y}}k(nRgvGSHijNX$I6K];r gam\ivFT:T f;!J13sU/M&l;RNIDq,3Bgh0pV|!(WZK72$=$\ %[C93Ɓ'IwͅM*C6C%aZi8/OS]Bޥڊ8h<3,h<MOt۲bgtW0; ciˌ"ed|U^Nt"BkqbF%>s|6E>=&9[?gͲka,XRv|;Ra_\}Ǹ9fv/IۋSy'gܗ62[̊bNJy$$ S8NoqffƬ}}A3GL4]G[\5lH.7eZZ5!vUy.}R;NJO9J_wKu|?O𮃸Y 󇱣+TVED)BL=K&`$ B"R" NpYqo|mK\'zV[Bҧ B8M0 n׶jsz"]tB R: %6M %%v$!t]xle/p ;}ַ,S'ɢ&|/~F&sP4;Ž3nyWڅdRGmP͉1֬'"G)1֯}Yv[Av׵Ϋafff)g2``` 655B=hL0 0[XWxP@*m|ORxuЄI)G^e.3U4 6nHjē9@#WvMu(\c]79>1eמB4Uͮ:gF~w)rxj1g="RJ붉Dl *A!.ǩUD" MV!4ДD6QJiGݛ6 =W)Zkx~RJ ]'eU#N߼GOf[u'fϱ_d߾D.03Nޒ<}zMhc"8V7$u .ׂ2] 4bq3aVݮݍy3,;qtat0t:iZ˚4t:oR*il+B:$:?o0-~~7?cZݤ^;9z(wuײfбv$SS~۠(dWm@an1=sssǹKWĦ0 3붮1R4MK)fJ^tqҎ/OQ\N$Z"\$[naժUi<[mf+q 7b7rMfMT,DA>-))$Rp!>ۦөl/x\wW$ɲ~&&&.)奞祡 X䂮[}_Entfei`iWhM3dsC.gݧ}Y]d2333CG+R󍿽Ǟ~?}<'>h;xgPr>κu{[:{cdd&۷o'n/JӇbJZE2dƍKgy]R6LD)uF0oAbH°J !m ]O3N,ȓLfZ9JT9Y*en``}c}\~lܸ}OOK8.r˭fYz5T}cƅ0P(p饗r*alKatÒg```I7~nݺ"6-,,t:}E4!d2_VTb79AB2 }BiDb24m fsh<9ޯ{X݄uΝ=o޼1|y}nCȇ? *ׯ_O>_Zy`||ol6G?J\|I,0xO<ĉ:t;wr1+QnV7j|>?t96O+F85Z(y6777Z.i/!ض-[^===\~۷x<W\tYy&&&fen:ꪥ^`ضlv_.˻fggqNCJY zl떋O`ڛ-g1F"nEgpM^թ;00Rus}F' (e[[fͶV3xkg0uo p[V~zꡇ7Ub|㏿xRoEqVwn[5p5vk#56[[VWsé'QÆ^.9\O8||ᬓf9Xw۬*/~rz_~`.w[:\f߉.ܾQpx+Ģ6c?:z/](I*6mpxA(}$;6^22{kq+ {ҟvl{':+*~xh7g[ y}iQ r-C0`j+*~.(Xk._n]m#կ|2I'?^yq73ĺnh{MNs\]mI.~u43ÎK/џ_m߱^:NsR'v.lG+^0S?㧧컿Sif8 f1{n?ug[m#FF kw{iྃ? 2]UY%7ȱOd4frf-VuYn;<펋{{xy  ̴ڝSq\ɗϸ[8x %gJ.r]P̦xUrǟ{nXXN+djnfR_Xk~$\.+@zcG7aﻝ5CbR<$ ^ڤS1vh{N7 ds ؓ!Թ>p^/k?zK]}pB%ۙ;wٟp<|\PCo0 yGwyze}Ֆ~ ^yu_-C_ϯJ`.ϼJĢ6a(Y=ˮG0utCiiK}y{/ƆP/g8=uVu]F Y)yMW{ݎ- EL}v\ +[YN58}[߾dn FĠ^\WG KqK&dR`5H7PsNN=| C_{ ! :mzRI3aۛ{Nfj ,MrT4@o+Zo[jwo0uT"J*'&(I5zI~L !o99q:xo}nW wWJO2;iR˓kzk&h5 K>MI }:x,`!G,b1W󑛯׽|-f*Ԛ-Lӈ#P6 _B"aU.C4(}<'IQRCJIq^_*b9rahpG& }w}tno|V066J&YBT*<3`fP( U (GbbI'u"?cUnBFPS[4D,~r;& Zl9e mȼ27U#^/d!`^On^N'&8oQHs))P;T:dԑh,:>H*2v3v _O+d̛KH;.i`4 Qh0*S dD `9t gpFi†}+?Qb1V* xZ~c[+)Y0,,<"yz=OˏIEsf`E(/xl ē}]~/3 $Y$3dFp\o\̬ a;1 -Fˬ۴ޓ޾ oLf A4z0I4FTe2a("HP[Y*RB 'd`_K?&fÙmǙmf_|!V|VVomn3̶e5d$zD|aaP 4$тI24؆Nblf zA_׸D0l`6ۈ h@DYm}FI$&d$H2YDQEMA˅'LqW1uH&{[Qg~ϢRvkg`>2jF-I\W)fq:95fQR|0ddJ,CO!1RDabR*4e…0He-DlPV\@0ȓC2Bg#kUQ撟$2X(r%yYŦUY~ +*jsG/ vHQTUM痿%߆ޠG(+)DI  £ gz=M>h8$7ofttAO*FU4E&N`ԋjF7дJhdŊ4 edjjjFvvVmҋ.jcޜqiyKj@ 0m{!Hc x_`0Aaa!uuu466RVW\N͊i4Or~rO)(,D4v;۷ogG vsgvZe^/[l!,\.V"kjR__ϙg9_LWz-JUOEt=멮+[N(T9*xk#~@<>*a%'9vA8ꫯ;ۿl2 TUV~Yyvصk\r ,i= ,`w)WWWS^^N{{;F(,,|Biix~3NM3C0lwyՃ6mF71Q9ٶmv˗3:_=0ݔx(Bwo/EE^;qijf3;wdҥ"- {HUUUUU糳v )%g])`X?̛7Y,N^ MӈD"t:xYYx1Gkzڿ@c|0iN4###B!l6.k~7ädNZY{vlNq#_X|,]/NQN7>}1EurssέRܼlщ SJ vZtyImuŞ '-8moYQuFٶe37 M"u,dk2:ad{89ۃw]?ƫl6* **;n>7hc3p۶n XEQ^@E'hsu̲p7~A8ppf; ,tfI.Sm3M ((rZY[6M;(1pԄ4¼\ "T@d$L2Hr,5:2g㡊)^S[gFo 4Q/>ìidtN E"Qh/:(6]( }G,8pӪG?EӡjP`9@'SI/>f=d4N'?w`(0_S߹T7ó #Uc.W[in<; .o[_,8{yb{~8<hZ=M2x~T"T LY6z+eA֎5Gde;p{))-%'Oi„D"4܅z=o %.ә?{:P<-6lEceöـ'~uw, b8]? M|qi_|Gp-Ty9k;Gs{|-xg,-2 Ʌg@1R Ptkf hd8g~ Y^<n)8_G_,'}@\G_u^D"lxuy?fR6oh%7Aa^f;(Eab9uhc]Y"LIT*Ua=N2Np 3D;R4ʼX&33t@4N?a7{/ kwc{g/ Oq7_VV__Dgn܊tZ7C4w@3?3TM TEOO3/$QU I4ox w2-iDcBV'|w\ҟ]>{yݦ?u\bTMQœ9Ϛ)G:ܒ\xg#xsZ~t㧙5}*>Z] 4WiUT) 20_!/>;D9{:iYfsgT:M᪑HϼUl^'X84ۢl5OC/m9m *B# ֆ=?J͚YQ~pg2*2T>7l3<2mӁaG*C ۶'gRRA`g-Wx.Da '"TΡ!o硻G7[ 3 !2f$2gF9Fr/sKqX$|rlhLZhkpj0v<+`.shTՄ"ˬٴ+\rsK< (,ԉ꿏6~s ="3UYZtAc[^0%^^\&"hlJ xIeԝ@mqE̙MC[;e o;~Q,:u}}ضbBc8lA$b$V=s}<~߂$A2Fb YRDlj/$(h6yg=7(ϣvŀ?L)XP-]|&H¢bq?h*(Zp D߀HY KK{=d(hO_5eMRQ+&\~b;}Zs[:2Ik:l:W]%M/rfY>0#5"7L[7ɝ7_^2߼V.^@Vu+̙QEՔ2rH h(2>#Q]^ ƪeUU3v eȊm#Ikc .7/Ah(hh:sf=nA'ēIR4$b Vaz**2*iMjMpxM<-QTpdY))K(vh,VxsrY^B2-c0Q<&R G&\kwsٙKdQDÎ*l۳<7^TUFp9Q5]sEUX6>yx` M >_x/y־uKfN_Oc vR o>9仝FFudi*D jM%EČR6!k`O^Se0 ɶɶu*D )(H$J8#fjj1SJ"(RgTW;MW"7N"B2}m\yc&e\}c+ӧ! &ڻ@@X0{F7^^ŧdC{ -IDZVXXC!ܮ,b$)YiDрY2X hiODAlYhҺYx.DQoO8%na4C4:T2#+F"B4rs,[0N>[Rʪ+rVJ,8(sgL|jz(2;72wƴ!)h)UASUʋP5D*• ٶ¥R)&!?omdUEqY$XXf4T\9vrvJD"lۄ&}qb2BgM$9y2ńbB4)*qy{3!al%%%lz{'N_ʗ8aLZ6'/SYZNpUZI/g)cd yv:}EMغdWLKd-yqfs`h$JnRo>t&] xutuU,? 0ɖudYS 'ȱv rIʙ.B[# S9ę3!EJiQw}fdEs/#?EiARQdqKǻCwreƙ;ZGב및-p(r\N($S)v?'besⱗ"YyIq;ɶH>8LFcui üi>5N\Izf=d$f%ff5sU ;2,Y-s #;;C\5p.m|n>sHi{M^ys 73#pީ'e&UcESQ4-3& ͝\7{[()i9mZ/,8&SAi Bloͭy{_,cɶYYIQ,_0fּ̒UOIi7!)r)R̞F"=ya~˹'䪥$Sĩ^KP<%N: ^h4=mXr/\7QBVUDb *zh!?W|Q.9c~t CA:(ϥЍ$'Rqw#Tt:]uPǻw==*.KXy҉>P@hd*TgVUV}gp X?[Z1! h`a3Ar,nQĞBL()) I Ʉd&dc^NƙfWp%%%gpQyrz 0H6An@}/}SU+23xtɆv_U]~|٥p`v9*Z;zo`N 6mہd4l"6lGtbZ0MtvaXinn&2}ɈpFa˗/hpoo/tttŐe/ӦM?CDW{G'흝̪;裂Q غu+3gD˖-Jر};}`fcv9|>Yr儃;q+!LϷ˧9 @0E?|CwzfO.bЖ~E'M<iVC( W7]?u<ǜIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Regular.png0000644000175100001770000002651014614030416016162 0ustar00runnerdockerPNG  IHDRMbKGD IDATxyxT?3ٲ'd!="A e/ Q*[-BZZOR!bY }YB%L&38Lf|s9p9s?% ?~:W_}UGW1t{]I;~n-C%;khصkDDD0qDzu.}7nƍ\v~LHX |l~q]kB463Ք{}?•SSSCSSRp"##;+c} 96~ x@`` Ż"H = ׯ_!C._lFQlVyUUUdggCbb"2-f7]h16uT*(--JV NcҤIZVESؽ{7AAA<^SaGi ;ԙ;tP >'P(hhhߟ9sF4)// ٳ񆆆26dl}G0w{ɦ6|ll&l~儆LRRRكdB*2l0h4ۯ_?FtJG z$XR^^Nbb"Va/J`p?qˀ@(P7o@pphp7n$44ԡ۷gRSScu\Tz)dTQ@&p;P| x0B,?T[Bz]dSSVEq=pƌӧټyBFCFF/.z[$$$}YYW^Kaz*eeeVǽX mIF(\cjs~2-ffFilfZ-6l 11KffffFӱsN{y#0`-6L5c^<̷9?潭UPcugL&9⬙HYY{eΜ9dee]ŋtv=z4^]#<<1cx2.TZk#%9:.\II Y3+<9s[3=#p,^}LTTJB&ЀNCQ]]Muu52i$o 8WKˁ%ma{ ?ڴ]'Ggx߸9GӋ0ݻρலG08HlRDinlAxni~pKT;`pW "sKqH.MAAk%$$P\\`pFV=c ]|JJJ^ ( J%jHݻ/ p#}|~0 0 fqҝNEEE!hjj{~L>{0<<'x۷sQmJ%qqqv(믹t۟ gU7?"9G=_/b9`ZMJJ 'O{TJrr2ǎsxÇ#H:~9Q{Ģ#3jjjhlleW2lˁh߷s՞tj̙$$$=w>Ljj*t T]wÇ˳&))4}1g0v&J_vPy~O>(OJ||;wDTҧOH$|wv3{l =ZmԻ/blX 6/VXx]2GJ"//b!00 8]qjֽ5k}^P(xm\o˗/=wevaܴiZأ6w/K4_kjG_MMCw`pmkޒcp]p֋oW*,,tioUl!7faa&d4 C|BUmYqa =g4#::0 ATRH$( t: 466h4TWWhAףP(|ٵ 4 6k–jBBBBrzqͯy 22NGXX!!!\.oz^Occ#:N A`4]|'Jmu!!!<3=FW[[KCCz :vU*J@j5!)-V
nSSϟťyQns)t5Νsڦ\uuUz/ҌmHy+nkpuuu]ż;~׽s%J%Cچ_RΟ1㚇&!C/v¡\tt4sn:H$zߺ#ODҕJU۫jp~:PC\'SWWشLuK{FIzz$n޼).jt _~$:J.@ =Y \'a/Q>h2``?M IƶHJJB !3Tfʿh$NYĉH$FQ+@9T#l_qS.̌O l "))k Ԟʎ;8p:B|ߟ<2331\vtvf"ж ȑ#ܹJ* ɓ')t+rV0uߊI@O&$$ilk30 7ʼ=zm۶V3 رzs\%$$OQQQr B'⦜(JOeb]v[Awn crz.n4e|=a..xhtc+((_u͛G||<P݂/:(5k = \`-#cҶgY6F޲\;6g~Ӗe:P^COA( .&&F~-o>@0޽{{=z=ZMXp. [,ıhP(.atRdw`ԨQo "1oVjK y3دa\AMj:~xT*bKEP0ao.#0>ʺA&ѤY .00Au-Q(>zQZӒ{i{o an7 xܱx5`رcHMF|jkkF֕LJշ9քisqwkR[[˼yxēO>Imm-|IJ2tuc8_^;364Wn\?Y .++"Xz =CiiC[ K7'->`-¼ )B6]c3;*?V>DªUͼ1bG +>MA4K6/o!;8-e5p}wݚz\^qZn2[\06pjOVSf >D"aPG|jOź&fC4ddd裏F޲D"aȑ}#,(.@C#,0Twrqξ-a͚5B.ڢT*ٲe GctcټyIj;tO!lp&/Rd2p* |}qQƍGEE7n?yKtmn_FfYYҚjmzhEF5CU"_ R \v LƱc\V1b/^dС\~#Gp>7odNYϟ/չI?/A1Mw&9yvq-b45kָ-uڧOQȑ#>-*:uvT6w๱0fhݼySfHLLVVVr /m]Rq]D€<6Xs,5}v(#2u^(77݅>}8mq۷sUR< v;О(Oum$&&'Oh{Z~ߓk4…TߓׯH*KjjXTNTpB:r[岑vWmKw]wѽ~}hh({z䔍:%zg]A׾oO78?t(~ӡxABVѣG)--%**cٝ7'v;?V)zgΜa~N›Gꏁ ;eӦM"H@ъ o=uIC2hZX~=jxcp%r8vvKMÇ#˙>}: tX*8<18 BnLOO"! ٩ qfoUH7q'^={񴴴Bɦ"B!1w8uuuW__OAA8wtN#̘1ħ~ H ErNNN[okGb{#$vf]]:U(İa  譭ZׯwT4 >&""#Gad2-q˗/ȑ#p1>VZΞ!e˖\u ""b"k'\*++9t TvO  @H^y'A˾Re֭FlٲOW AuaSSS2dsߊ+,ÙnGW^yE6Al}`kEŋ-3h4gՔ{u}g7X HR믿6b'ɵx߾}oDDDߎK-c\?~,ز[Ubcc>sw%ګs+"̑Vؙ}Hn+2CBBZI9|\TTԧ׋/x߳>ε"?3<5 nGjjSf[q9 ѣGVT*Øň2aÆ]pat"}RRRh}}}0-&_miӦ @P&Z2m Xܙ XbHsO"==U4MPP?גmͣ5C3UTT|!MMM}j`,@rr,}B1(CU`6n8kʛ}~Z׿5'OHF άdl P__jسg&}50 |088^`DRd2^}Bpp0$2e SL9$+c,P*$$$`4Yj[g% 84&LvCwZ/A8' EArk{mJ޽{㪪z8/j) nBhUX-==?n*x!mڥ&##-ئ&? \<&?| /DB@ ^?e˖zjhuu9p&k||zL999H$9߿Hjv̙3]j= z-444TFQhѢ-[T 400p*++A.T*ERa4*:s_B$v&M/hKmlldΝ݇*̙3{..bpr5jjjDFFzbld./waÆeL|Vr\!ӉZ>**Jd^KO+`P$]Yb/M]&Cop~:_ԏ3|={,YYYTVV ^pEEElڴI b,))aݺu.{Zxmp7nh4ڵkH$hZy.3F}"Z- s2SH Ϣ[}$ AاL& ϧ1%qڵ^z%T*\pHZ)?uW68BA8~iNJ`E}#~ܸqsΥY{1cƶ? UhjR)Q`-G?QRL߿sٴ HMMg|Laaa/Ԅd" t:[\.)--g\ee%\rJjO>L6}LPS IDATPјؽ{7NZJ$=xx(V"|Zdg}bmmm:B2zϯ/Y;h4"HYDH6mg;2O'Of;LBBBgʕضmYYY.Ivu.*++㏹|r+]7nzj CFȊ+8|p+d"77?Z ݼ e`5(dks[FxA3 o!HCMbv=0~x}TTA_YdxnŌ?^dWg2/TQFVĉ:u HVV)SJyy9񔕕zjQ[799ɹsعs'zF6nSO=rѫdӦM[-[sΩ >"RӲ:Ms ֫L2# ߬Yv/ZxܹTpX tR~_zp) sa)*rQW]pAL1b;v&={0|*++ٻw/}a<#455a4 r+W2g_gII /ᆪgr.ՅJoduu$l90!_r h 46U7o^̙3SF@111[裏p&2dձ#G{BGӧ>V dt:d2L[= bbbXlx… kxGm8?P%&&^HOO7'W ,p!kR8c=67,,/b$Z'l™3_Bsw_0,0=))>3fP]]7|CZZ8{י1ñnt~͛8<aEm@Pwbԩ^TDDd2"6 7M&U\rHvvvˆwAxlH ծj-J?oȃ>{***'??BJJJh4藜LRR6l@&NIv άԦvĄ Xt)/=gΜ`0ʯ6X"6tJZVS$#^ԩSj?_#,",6׿)Slm\-~E}\|WRXX?׹~:'N:>d+}GyP\\z)fA rUV9tŝpkAUu]0BQ $!B#r-Z4`ĉf?=6E!w;fT*;:d2߿?#22=3{v <#*/˗/g 'NWk1 JDEEj 1귶F ˣ*q̝;F7!*<\T槤0`@Yll200@56N:5d2Y)B\-cV=F׳nݺVY^Z6|rvXoիWJ zFѣd2֭[Ν;MA 88ה̀ètہ!U ])))رL`_~tq.@z=ZVk."t`0 2t]c0jR_@ <4Ү 0p5)TU>R5/Z3Y"##Lի[@) J\\KRkf[˗/^^NN)F`FeXiW*ntVXr% W(Zt:m0*/삕}0*G4?ػw5\Npp0۷}vӽ={csj>>>^EEE_XXX JKo>|8M4aҤIO95WOtR96oX///9 Iaſ,(?Hbb"o5/cf w{STҀ0;+ܯG]rGU `.pv6903a„oߞ?˝g?`>Pр;^~J_ݻoAff&| 7n4thJ!C0n88< , 믿2d_xFi߾=6mbݺu6Q*<裎*v_ 3ڽ }+CQ^ |6X8cZ{}jIII1S!CtRf͚ŧ~J-?>< #GD1NzLFzr劙ҺrJ:uČ38<ݺuc֭?trr2ZRij/^˰j9wX`q`+^999ԭ[׬s``if':DPP?.=U(ʝ ~)ÇO?%..+V'֭3] Pi/Xv->>>DFFb xgOQ(fr WѶd W\qYFzj7R٫3>>:u憡"B~nk׮-V'H^^gѣGJJJ53l0֭ˌ3LVP~}Zq&`ҳgO1MU h(,,^ufqcǎMoʾkLǏcǎf:t`IL|X4..0Uٳ۪j{9&NHNL+o߾=&M瞣8OYff+nXj]zl:Tj۶m8bڷoov-**D}.\ n_"ĭGP(Vy,uefΜ-ޟ;w.| .\:Fkmn!;;!NGVV+E1/ϟ?,,,#FTjV+y[i FF=HlZ333iԨQ}/^Lӧݻ_|Qeƍs5R)233rECr{#o'䡇 330h.}USN > &0Wjd@СCmۖ }4 sᣏ>22|ϋN 7Zp7"7%#j01cGѼo||i]uڤI͛ѣ APPCRqAy*-]&Mн{wڵkGTT_u}Y:dIP(f&Zp(Z!lEV[s3"ȑ#Yt)u1<~iM|_ν| X?沈D"ufչsa_YY}Fgըj}<<##7|+V@bb"ڵ w ,W?OFLwm۶5ٳD}Gjjh0Eq)~75LFddYZpV]blA"Ԕ"!!/e˖!H(--5m19|^3Yݘl&<<Yfȑ:KUdԩ<裦?fmkm𭈥U;w|ak\|\ ؙ?f\^^?0/"/ӳ*xxxxbƏ?̍7Ld2?x>J^Iۄ1< ?O||<&11CҴi[`J.ONV6/^{4nܘD b֫ TСC9y$txP.ӲeJ"+))q* MG5rZɓ8p ޽{STTѣ8q}O^eT? .0k,of&G59s&ӧOf6LT7(GQvPR)QCe FͰaڵ+Æ cvʕ@T2j(JeӆkҦM^z%|}}9s&s1k3{lyiӦ k׮5k#H̞cZп |Yfo!"V[0yΝ{ =˗SVVf{  &L1c[*T*=ztٱ"F\\C  lxsvk ᥗ^b*?@& \'/U_;ZScP$~;R)dj Dն Fĉ駟HMMy` Ahܸ1O?ɾXFR)]ta+W^ѣ. B!}ꩧwcɖ-[tZ\YpssK.dgg3zrVZEttMH$ {쩔{8HVIIj*gLנ7׏;eUNEJr "S6(9K6r7772JrEʣk8gס%]իCqO`$aF@@O>h=`(c;|`-%<==+ys4>w;9m]\)S?3f.ϯ ZMyJ,g<]̙3;v4(..I&tڵ}h4|7˸q1&` qxE]vǜ9s(**BRQPP{/¾} %%tY\\ʔ"XDqfc- wILL4 ;a̘1<#t֍J1hz PS'y1NOn%xO!h|ƘD0&:X)\ii)Vc4hʕ+F6oLrrOӑ̆ jjz o7hЀT233my{6uH$ghz)Jz*]t?ެ I ##bF H0Ύ&ԭ[צ̢(rرJe_]vI&biu:III:TeAG~Wiժ-:!kڴ)W^]y2 8ZGrr䥢طoɮs) bbbxgt6IIIӧ&~شi&550 >^׳i&0.bpcJ1wlLU R˖Ѯ];"##fΜ9?BΜ9wN=*kb00 OH0g1``޹>ј[np9pt:BCC?>[Ϗv_ӠAj5.8rݧNcÆ &Ez-nA ''빽l"V{98@YY'""MFҥK?~zٳY{"gIOO'..h;u:'::Us1[hDZCssXŮAo-=l'OtYVk:Bm a dI-Z`ӦMl޼٢`qq1wrpK\C// L*aThua9f%W*ԩSCZ<߿?ׯgݒd.=dRO8X%RE S+J9R߫|)!JNm0sy >*#5讠ju#\w WZZJaa5Z͹~Caj5 H-jX\ؕX;pDFFm9b,440Z. {30x`h;wά% BJEsL'88峑L& _'01q9Ǝ[e_|N|ҼysmR)5aӬ:]%СC 6*۵lْ}Tf;E*ZH$8E xdfј ӧ+Uٳ9vXM8ӢE rj%:bg X `0k.{=A hݺ5*5w2p@zH$Y,#Z Z:;pÝ +v='$$S%ӑH$կ6Q(v+D"APTD?QgW-69rӪU+jݻVZUY8֭[ @صwww6ok"2?TTjJ$IG"$h1ϥLV+AXcmV8ZSS?ZNRQVVȑ#cժUTIѠAE߾}vp$;|J tV 8nsAs-](VY RSSu~L*戢&7ZDM(k7vøab .,,oƞ.fٳw+ͭB-(zPP[d\xfWndy7h¥SOŌe%zz!4] uA12Y[pJ1jR&YႃիS111 9,fFpp ~` Ʃ2R"6+w|m 6߆4 ָS?3?1U;{hʢect ⠧J5nRZZʪUq}ЦMw WcYKO0aBxպu.|͜={͛S\\LPPϟ;ĸ+E׳k. V e~gQM, ׭[/BCCryVÆ ,jРAJ۶m,Xݻ%wfqJZ#%%˗sA?1:g\pj5!NǩS)٥ER/8qB~*J~Hק5JK}]R$''.\ذH$X~gϞa̔x*`4mOOO&OLk:5]FСCu:{!::!??k=B / P|嗊'Nx>|x@NN"m޼9:u21ʣ[j7|cvnڡC&MXf͊?ݒ: ڵ >СC_~rŋd6jȕ+Wx~5͕D"!::h rN\vnݺh8rMG3e.\h\[Z;ٱc`Lݻ7v|>>Μ9cʉ+H0`?3+W4W\Po&Mجp^^^6ǴJv8Av'jZӧccc _eذa,Xݽ#! 77XHOO_ īٳgMm###Yn۶mj{\O[)=;?}m۶["_{E$vލVE[;dggñc_~vVk*.**Zl8u#=ի8vhт( :wVvIl8}YڵkgO?DLL İtRk.]Ñ#GݻUܹǏhq^zg}V\\•pIVZU^Ν>}:'N￯2&ttܙ]3ӧr^YZZjf<ӓ .аaCZʹ{u3SSSbcc6lͥ*yocm/'?IDATDGHJJO>Vo6 TܦMINN&**Qq*|A "_}UvF1zhv(Ghh^TiN:`Ç+V\/F]tӧ[oU|ȑ,XQH$éSӭ[7"*nݺ{;oܸQ+GիW[M^eee,?ΫjӌXi֬YYYoo=eVŖ 5R:ګliii,ZJEzz:XZZj5NuQn]իWnܸqOVV(dzRYҧO…?*j5ڵ#''t:DRuBUSPPpO*PI6v+\hh RDDD*+))a1ŶQ]^ETsO*R~:c gػPq+**zfܸq.q$ٳ'MsPZ]Sx4UrR:VZ)ZTCxx8jZ:fDjjjMd +|rmrW: aÆz)}J%ƈ/Sz$s R=jg8^ObV,.77?ͮzvD"Yf]kƬZ{ ={טa^~^oE~'7nLDDUָqcUqq;JΝꫯ.zv ;9LoE;pCϱGᚆ Μ3̝;˗/z0QC6B&MNt}+9ڵkؼ?~7n,.00&M8￯zxclׯ7nf+K,~o߾ΊrסٰayA`ӦMvlV8wwwg.Q(T*z;zyy1h ƏoW%K0m4ZSythbcc)**{/999vyyڵze 4 PAe2L*J%ERL*JEQu:V*Je:G$M6vڅ7o&fͲ,Trssb֭ 4&ܱdffYIqڷoo)$>>rT6߿,00ӧ+W&jȐ!4o2J__E*__uǹcT.\֭[ꫯ9rٽyꩧ8tF"++R(ϔoѹsJjՊW^ye˖1i$\UvᏮ\Gyd#VE"۴icK.҈j;Jrϣ?MLwH XsN!C<^XX՚())tx7f3\aa!۶mcÆ Vz!SɃ;Gl2vXV^͖-[`5ZZ Rj{Ϟ={zwؑ~79ٽ{8<:tGnnnUEv{zY~~>eee8񡬬wy'OVmw)}]JJJN$foNNM ;NJJ g„ <#DEEj8p [lˋӇ$"7ndŊdggӪU+x M;g裏U8z{{%HJTz*)o4jԈ^{͢AXf III:@//= 4P*^4sxo08~8A4iR}Tѣ;v8j={+j˖-3z#FpE^xϒ%KP(m6:vȡCc޽&e+++c$%%oӸqc=J>}Xz5=`LߩS'k_^zH$?<==SjFJHYyK >>]fϏ3Oެ,Ȭkz>CSZm璒>>> jKjSVNqq1YYYǦ\>}~:EEEB;.//Ϥ(ˤlm6Μ9'|b[oɓMf͚Ejj*6m2)[9 BELZhaS8Z=EҨ(>Ӵi>'''{T̈MBBYx!$''{̜9ԩS/"[nf|j+We󑕻;Nƺ1)N3[^xmZ˚5kOLׯ϶mۨSǘyɓ|gY'ſ|||t}C222ʎ9ܹs|^*_zլ&@jjjyh[Еw^-+_Uhݺuk.MIIx*Z`0iw:YܕL dzѣǎ,ۛ)ST*1}tNjUZN^^gΜ1ʫٙ}rkii׮]k,'00д[.sx{{u:]=BTG^^>>>]JqVL WNLk:uЩS'6nX'N$11JLL$11Ѭ%֮]C=dA?~TjW#@qq3|6Ҁq.]b̙,\  ů% ܸqʥEUhѢViN*Ҽys6ol9m4>*zzz2j(VX+xڧs皭6oL-99!\Rx饗v7*\nn.cǎeٲe|RHWɱHri#""MnO<L2A5kf{ 5kVeI&t:VX#Oue1%С'N=Me}Z-FbpB}QQ M6N0Sf͚jYnښ5kذa_~K`vʕ+M~rMG>V8"Hmذ;2f+RGE^~e^z%:uĚ5k@se 2l&݂I$zom#/0w\NZmZuk믳h"~NR1m4MR/[`Ȑ!hт9sLu ɇ~Htt4O>$ 8%@ղQ~}֫Wpb1*ZhAݺuyWL|A8z(;v$6Jќ={Çh3 f8lNJzz:WClܸ?e2٤q)%Y,!"':[V/_5lؐ}3~xڶmˬYؿ%b̙3iݺ5'Ofڴifvyq!3':[&石eqsscڵf˃흀 [[AnSϞ,w2}^<<8Ol0 @(\y@n!!!;͛7oVy̘1~=Dd2~iGR`RTDb+ϰL?FC~~>aaa.&e///:t@ll,O=[|9QQQ5U(AU]{ 6nܨ\.T*EV5lvNǯt:]M%&DgYIRvHFxApٝ Cz8s p*>C;j﵅5ҿN:N􏈈5)JfɠA~XfKGfgHʪ1םJ5JbcwTyZv *CS$ ^z9ҿW^, }'vBX~J YSIGwqyIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Riohacha.png0000644000175100001770000002620014614030416016273 0ustar00runnerdockerPNG  IHDRMbKGD IDATxytSjKeccllcB!,&+MH2m2fhK3ih;d´I&Lg@҅6!ɴihR v ^AoXvuaKlfyAs|J>߇ؿ? Ow X7B΀@닄|-lp:l(**D"M p\l6@,C @$aٲeq &. 4M{r>ܻ#ep8VD"hǏ#M˲ xh4 `dd~챹Y,H^3[,p\T* i ƩS@Պbl޼9.z\vuÁd\`Y\31iZ-8D"-| E}A~.^>449([,F{GjuLλX__veQ[[fϲx<#yyJRQg Pe檊 -GOoV*<(Μ9+HZ,ݎ .ٳ([֭_p>d._0 R)dR4) Ц~~"3Nըj.. Vp:oRJZ!`2AT&׬V_:PF+W;!Ԕ$ |[$Ib  p\lA8)}a4jLW0vy\.#6[Mf00@4]J,~$n~l6ϙ$E"v{ .sOpϐ D"\zPj}%704|Z@-4``p59|c @@e<>PЀ @ՅK:!̢obJpV+rp hlF;˕jjhAq)bx-j}y4Bcp8Zt4)~k׮ēcM7!;;;oяf8Q ~A2usHTB* J9@ ȥ+rnOOe0w+A(d2\oo/ˎ>A|J?ʂDra@ P X G*Kj( {]2 &YbLAH']R+hYTD`}fс9apb+aZf"++gXOIN" xb/ -,(uuw3Vјm:X0Ц伋^p_W;C\dZe͆|0bwGFG*/+s:7[,,yB!z=F.E/8B]vΞEUa}eTVV 0q>9422D_Si==6xsQ`D"vRIB(d,-ImC[Vwꨧ۶E|%#8QAB!UpHrg$I$_<Oḑ ea(0,˗G|JpA\6L /iDT4^y(]=ϷL&Eu%#88fE@J xWLC$NRRҭqɏW"Y톋jr9:;;:\(@-\#6ʀC#hL>#.0:2B\nGhY]]HQZ!&b(i;vdlpAPp}_;Ej2IhrCOEQTJ)j4whl[@ѸnP 5 ,r9^o&U|>Ac≠hJmjjX9p/EQ|EE~Q l߸a4u%p8oa( U"eo}Nsf"nGqQQ)A `n7 @GGǴIi$ ;2_s` qKA Pb[2}ĕĕEۇ 3#LC{l+!`'Ocϲ,òlj"Χ"I0=YOZgO[[~=֯_?ajeL-j5qXȎ X$+KWKQ`$7ϰ,?w(3JJJ:!J%"ѷ8&$gphok {{<n}62YHΗ< шlN!Vy@#IJ07+-[U*$U8k+X\I'|D Ld..kcd*K7[muì hPVV& seY:.{-V4MB wޙTRro۲E , j%bL!@஻7ߌ!\XZ6- ~ppTUVnY]R›-B$";;[R*zRϝ;7_3g\r7QVVh.EAAr96E8w~KJr`MpKAPU*%>}:p8%VI I$FzHp(-yS f3x<ޜ5/p }@k ˲` L\|#h|FCG/0я `F?xL.DRRR`6t gAQH4L$%A:qպ|]oZ^Dѭ;[,J4Mh6CPL;orI 3:EiZ9s&~?κ#~ppϽbB24MEQNnj}}O]b^74<,.:駧.\34.1sf0娯Goo/2226zWPPPe(,*BǕ+1aY5HY wߜްf7X:&z0NF Qp8f^"k֬7 v, ^?Mlov;%w6l͆kEYF9ή.TTV3ͯNR*6\[x*˲n YMG"RDNN~O[_'O*K,9݇mmpݰl666r,=MERRȍ "Q-meffb`yWW^Ŋ+Tb1p]hV=JLֲ"#5%x;}  ӡ\ * \"999~'K7Eg$RQ*d@Q_mRpV6P.:;;qH$ k*..h4_tvvB\~$P.dN@JplT*+Wp4XCV$H$ȥR.T*i2 ldN,zĂlHKK6d⪫%$,fu?8ǯB 5bLbnfY"(U*$ɇ\2buvvbǎ鎠r Fz%($\9|>sKnDQ7eڈZ!cE^^L*daĂ>>-_w3h:e44sZ(Hl4Mj2GTBƒ\7"Q@ ~nUhiLp:~AO[vQwRw6ٱGH9 wqG)/$Bq[B6nNC1Y,7t^+˲е&:Xf3" _B`.P[LS'ȅBa<"ls;=dz4hk0w# YEMMhټbʞV nfíފCyI@ @IIIbn2ϴTbn0 orauY" -MTaY9A|axcs~ʿx$%w;pQYap?%ҭ,Ìf?o[H$Btp8PTp8lFuulkպdצa͔$Tzǩχò0ə`4GFp JuSɪU\dn <0mw:Pv-dK901,I</梐J HY*$rU`k:'l,8KWKWf544nW q-Dtŀ'f&:'9v3VE0KG$oW>|6& i'$ X6C0w,-%+ %+s)I O De+؉u.@LR(--m=zmuuu|҈-cg}7B$܅(AxJpwu̙3UUUx'8կ+++ry뱠ؽ{7z) $瑨h\v^{mO?-~n:WNJJ b=ZD/K̻5J4S߮]:uJSY+,,s=' b=ZVǝFOS+EBcccLK!D$8Lvի/:thSO=śͶS  %%{TUUl-j֭[yf477+EEmm-^zEAOu:s8^# NXPPڝwyɓ)h4lٲ\.c>g\x{G\qlľ)}8zqz!srfg8?`hh(,8gk m ^_XZZz$rӸ|2233QRR2F$^~eϵ5,`eAA@+D }xĥB\nn|wqGDj_o b=\, Z[[qs}z>4|']'$I$O>$cc r! !BXg^D"ƍqiD"dddͷߏXB.jA.-Goll|G u$EQ[ /VCXTVVH$BnnlvvAQ(? p]O br$I#|j*=ֶ_ߏ;&r8y$x ;##o}KP^^˅nM[<me2YHᐒ'N`ll V 4Mυ5A$2&+.WΦ!sW\y{ޯ]Ft? ?>m۶=جEdسg?NBNg@F-r]jZ|zrw5[,|f!+atp8vddcddb](m۶-|G5!YKJJ /;ua; 'uZr,AfCSd6Ok==>Lqomm}uؔEEEMojժ0 DY-# oj'7x,mo&kNc\x4M&m``Ռv())i#pBYt(JTr b`6a>8< pǝwF|h,--my饗26mDHR `0x[wyu…,#E,O=_&,aÆ cQL"hجVlذ!nS63iogʕ+ b=LL9σ5`0@(B!;%bzaB˲^Sie-֣۷oGnnn@S+V$l܌rKA@&M JIx KlӋ/Ȍe ׮]pL孲*m:R^ZBaT\bz_g}ݺu$ b=RX˲~5#_ru(  u5|EV5BܬbcYvzӦ!˱w޼-#etto˃zjrrr3:.`B{SE ƣ>HlNCCC@oo/)UUUغukAZZZHߏM6M{}~FFƜZ/6MM=AF?FFF_i+&)ӧ?b=RFc)Hl(8ΘߝJFSccD jt7>=3o&tӟl)E!5:u*1RիH2XZR=3h._|'3Nl6۷U[[9,H0L xlj jv464 })ק#w7}Zyy,˧i0ܹs·zaB&!55կƲ, DZw^v``.JXZZ˥񖖖-gqddd;w T>V+'LjȈ4 ˲8[;`h. .N3, y<`8n7j5^up9pyr/e0T*ꫯYvP'Ζ-gcdd/Ҵg/ 0 \[ )IDATCUESPA 4Lf35$n{zf-0kzL5"A$A$\a&\.rrszX%7Im>0e0aו $ $ և? baY7Nj<Y 0A m]e˖Eڂ`2ٳ>}u2zdW2!,:H޽{v%BXOXGB&Zq%!q%!q%p\^`b#KW~l68NnA"i~ O'+%%\.6 rDKb&&-qz;wuuu8m4  ؖzڵk `f(EUUx ` /&ܾ&;w6 ~}b%H&*vH$Txl޼/%%P4448V+O$M{4[u:ݰZt:'PfβIX,t:]LkxfuWt:o|w}7v e /Ɓ:???TPwKRPEçt\˅{mnn~nzLV;r"99tߍEpl-͛7ȮiχRDvvv\ ׮]{W^i\jG$@qF˗w Rq8;::^wu3(//Ν@QQ˹Gwy11jEQQpL~wSsn7C$@NQQѾ۷l6nl˗/pWII ZZZ!7IK<@ }@XsɩS^!I{Oаĉ-$IXկZ[[߯p8(ʓDXǼW^y~4q+Vvl&L3880 =8B!j5HI z+nnMMC?<Νt:\aa!߿#|3>|g4Mfd2ePwq}QTTT4M7Sm۶E/6 B CӁ( J|> d2all  zjoGƍ>u'. ubJ˿099:k4 nvttt? g߾}Pؾ}9JeH$x>*|ٷojjjOC$aڵsy]tW\gyD"~HJJ_COOksX~~>!0LH ,jbƍsּ֠ 8zbcvVeee~ DL>p|#BŻd_ u@2,1$IxYٍ&rsppeYo2eY涶g:0ޚ_\.Z *8JX-@ D"5saؚ!4G¥KyVSW>jjjr~9\۷qR jyb"ߨ/uѸp8'O<9rtѣGmMMMsV,ؗ` $IBT| [pb4M럺VrVcll>|fY Àa4Yojjn? .ҳ  R./juVZȑ#ӎy<:t(z}cGG:::g||f9ap8񙚚 &m1Q'A.ctt4Է".)J[J,B.G^4* f7-b!^iQQ8˲~Ç{XIZZJ"99[0 xf7u؉Xpɸrܚ`0}^\$|j/AFFF҉ )bbhUjjjPÝJTd[А_jsss_Lۍ%/..((Upp·q|Ͱl0L~#5kWiԢ"Nvvs霵J5m؉JpvWFnny$Ϧx/Ϥo 8*(sX7—@KqwiٌK,NRHA@.C*jzn8q$Itz/=iLׯjuDZ___(_| =MZn:j_CrMTxq:C=SRR@4ǽ7*-f͚HZ(8Á\<OM9"Iobag?󳇈ӟYs]r~g"ȑ#"o}_<n-/<7-01#!q%!qe>IEQAkzzz^o۶-=MӌxEkO__ VÌS3Vo2;it0% <MK/7IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Shapes.png0000644000175100001770000002365614614030416016014 0ustar00runnerdockerPNG  IHDRMbKGD IDATx{xTս?L" Ln萄 v)`ŷ^sj_αQ{mQhHE!@Bܜ &a23qedfq>32{5kvZ[ߥZj0aB`ժU+nÍzƾo@0(..}OKKch46ܐ;}WVVdb!U~z8,ꄎ~)8^Ns{:fs_n`j=aX;?1oM5̘1tT*彋*؟ LLL`0x%&&:N8}`ʙf6mD{{;ъ_6B|AxX'IB#dB*@|$IRb&0@ySz=~;0w\t.< 3LL$IF`Rx}4ز333#b IHH`֭;wNQK\pxxd2iz=KFygbtL)VoBl|]Xp:Z6t.]%IRClzCtV)6.,7bs1Lhǣ1LLk'ѭD:Q<(]Xpe$Ivwbs=G$;0 b% .<*,--CJKKBz= jezZ΢s5e ].#_l߾ݧ\xŋ|۹s']p]Iss3uS^< wrÇ+PWWǙ3gh4v?o !hhh544P^^n$@n`Bhig^^1bG 7xQ˳l\vաRΟNl6`p\*//c2"N׫rrrz_WWbا/ԁjt:G:⼝9܍VU,m8؀7O۸*Q== MMM IR{IIIDD|/UnDhZȻ\ijj1zYl%N['tW455iITTcƌPDD<>a222:EEE~}NXp!cj 1z)@jzfsqJ$`}΍)Ipr)u(sqe Ω)!DGR-\hkk&Ib:ގ^2L.'\K;t:iii 0WWTΟ?O}}m6Ç(JJJ q뭷<a2X!IR^wijjX[EzJ$Ga#py n/vW}?~<&ZEy 4[VT*&M"::ZMU]檜hEN7iZOLMiiib 0 (ѹEpuş|jhh %%Eׯ_wc)h}:7oP{U㨮A? #uIr%6)"Hzz:ͣjk4z}jGJJJF P񤆆-!T`JT*222?bCl9u\`yX]^^ns'Rkyyr|:WJ*lu۰aÈq^Xp:S>]Q]tĶ؃K%:bAroE甩r9[!Z@AXp {VZZѲ% 2& !jJKKϝ;hv!g,6bdZ&x !f"TxLBlC?[8wp\~s#%%E ,`h3r[AuCt8d)yYt;vp)BVwiٺFoXvp{mX#\aȏҀC=DEEE5j 2Dؠ n񔔔x]um#AwsFbPT1rH'~) &IssT*!UZsNFq/ Fv;ǍzVZeÅ )a )a )a )as8&/E ڵkiii!55HZZiiit:3JjjjbٲeDE5|` ^‚ *t:B>s;!ѨWi4w$lhhҥKV!(C9 TW+++#;;->>|M^gŊE g 233Md0xZfb!/:,4 p8 ۉ_w4551p@z̧566_@زBњ]B \<>]Kc>l6sԩ@S, W^vtN"{\D^}r Z[Ȫ7z.\Ȇ , BDl'NVK!fg'uHhii/ qqq=r $gZv?(t1ő #?J0ADiCEVovF$BhTM&-$yz9@gܕ+WR۟ ^Off&''Ge0r˧S:iii Μ9ٳ=U&N؛oj!6>b?fy$::a4#,KիWB<o\Ӆ^ `0PRRoM@!͛7dwO8l0쉉~ !cd>yBBqIo߮86zy9sS*[nwSDӧOJKKkT5*h4f OǍ‚ .\ >ޝO78DKx?U"fKO8a#dN6FnÍQOXpڵk\vkrnzz:?яPT^Ehkk7vd3귐G3tGgU$Q'i]EXxWi4"""n68Dn~"[^^yAUU!WRP[[>T +F: O*a0Ihll9PƉemȉ ,2D$[jjm5Z#a/x\ll,V<߾t:O,TUURuڪ1cƐ2\ݦM8< =VmEEEq}ĆM؋Z /- ؍Fcd|||:]t8s:)ܢEꫯho{DDD;AQUUEkk+Bl6Z^w<z,Y{GUUmmmDDD IRg'ؑ7>C} _UU5*`0hBD rksDUnECC$СC#** V4h@^gѢETTTPWWG}}=\rFj#;#9gX[,T#G N{*(b@T*˖-͆NCu.u Btt4YYYdffFss3455q5n喀g;G^{*09'+G[‚ 0QQQ_PTDEEեbuNJW y1HXpA T"ArS+&01 MXpaBJXpaBnl;n{7} paBJXpaBJXpaBJXpaBJ_WS𭵦2ź+v;o nM_WWGmm-Z|\4@'#Ν~k}YEPT`bcc9rEEE444`00(/.. ł^'//Yf[oW` b`0D-YDb Fffbjdbccy;߫O?^`˖-̝;׫5֭[IJJbÆ u\{t}B Hbڄ ?Ϣ._<իWOBxXwG|||PXӇV+q.[c}  ,$ ~'|2bn#Z=[ZZ8w׭z3J3 @eNN{fsk1|p&%%1o<HOO*3L{]镈W˚˭|DRԩS8q"ԩSK.}Ŋ^-`q]mm"ܺҚ>LJin2^Р !-ݡR0 PTThdÆ $&&z[SSW&...aIpQu:ݧs=w޽QeeeQ=qqq>ؗ_~m/]|c0etݻ^{={x5551e***;࡟Ǫ4,ضmȑ#jIʄ,=ٺu+SLaϞ=n[.NǏc577/2|Xxh4~u{?AO>dԯ~+ W_mBB̝;[2uTDss3ӦMÇ֚] NLL &zGm6c͚5۷%IњeފŚF"22I& a*; ww}!D,֕bs>^;b z{w 6;xlٲO>Ϭo6uzҀxg1 $bZZZؽ{7cƌaYp!5^ Nϫjjjo`RR+Wĉ^-=QVV3 |yuXh~7o^Kzz駟VPnYvu!GuwTWWIOOwy]!!!szh$...Paglpbټnݺl>}z={ܶvrdzXwGuu5cƌqy[&ѣGwZWZZZRmźb(EEEcF}Ŋ`ׄ*/uw|Nb2k~C.LH .LH .LHQakzQ۪U.LH /Q 1\|k?~|[Eֿɿinnuw|_X,gg78pE̛odb!]Ypf={phdd$'O&===dZ+{챈s555Y_[J>l曘of36m?!cǎU|ݱc(,,ddddCtI4K\Zd8>c͚5#'If!.uH(1Sb[|9|KK/ܹs  4#B($I 4(3A h9Xz5O=[nܹs> _?5jcR{hI>>rHdQQx5=Yx\ {xuǎ{ױT_&Iϲ%IӦMcǎSȭ\Xtƣ)6#;vhf̘Nc߾}aÆǤN޷o_ʯ3f8D `a`A/Ebsݖ-[999. a˖-}i\-3tJY?X +:If'MNǂ TZIղ`5&MbĈvIfT}Q^~e׳o߾իWڵkO!nAA{jD/kEEe!{az5=w^-ZHlo6?8MxWO_~!EEE %B3g2eJzEwm=ye!:u>2{jrw*.f̈#:m;uGgƎˎ;Tj_!TRRRl&%%|(((9sNyU<9x.f޽={(*7T+WIDAT?? &׀...#F_U'&''8v;v/XG3m6/_nX,vIB2 6hfϞ3va?vHA`0lXn|2> ˗/Wcccxΰa8{,\~=l6c4]W,z?wO>O>鲱9s< I:\,IRmMM͐V,LŐ>-- !9H$Rapg&x©T*O9}ZIMM2$/..1j6C*>T.>[wAOn֯_sA222://]-55529r$aH^{5ٳ1K7ntkkks9SSS뺇Yp ,]߭s..|~`˖-=f͚t', IBd޸q{Qζm .tK5n sCpy8Rp7" t,x;*3gt=f͚5֘[SSS7n3gGa#٢@ъQ]z=7oPl0l0={Ç{5s[o)B`=Zѣ6GyJCq1@Df=zTӑw^a-J>t:}݉'O\"vNgL&ŻyիT*&MDtt"!j7F %=7yd6oތ$I ,`0x@Q~SXXH^^҉H ߻woTorLL |N>yoh4 y'+W䥗^"77T0`>}:nijj߶okk߶{=pNR !. `؆ FLLVϜ9Ӷs)F .T9 si.\*((Ν;9s 95sgට,Rl GsgCG3g꺋v{p ] 9_73gδoL ?sk!p̙ꂂ]v9V|,nf-<\w~- !tYf=3b{EEs{x]BL.))90nܸSN[Lb 0&~/oc׆h?~<^3o~?o XL0u[L~Xqs)NqS3g)6Q5S4 3Zqi׮`V+sf\|O>xb]lfK>&.)=8L̎1W o|X> `sÅ2&.yҽųd'[wl>yN2Gۨɮc9Xy4ˋ\ulMl2l!8Mx=քnjTo!Ba󶍄!pUUGYf6?z5a(iチEQ.Q)걊R[1v Ӽpse;-%nagh9/= #r;|0`YiJoW)bڽ~^~TU=צɂ`~z"5aζXϝi:,\l6#nK&X1 \l FNKR[ }T0|Uiq,G1 dD'ޮbRVP2/:޻eヘ@n爫_Ӏ{1q$~3mVrKGHtc#0,-m&؆Ԏ~&O|K`]gBdD'HF4Iꔰyd,N-!*\V[[#[_fAܛI1N0@8ڣI!ga$Hh; ɶ%VuE8 ]DtD$:`qseuS5̸XED  bW$iVimL1B6?[)Q<Ãi@a~ѠQ D]iQ|'%4Li(C2z,A"/#ɂ(X>Z}RdS궇I5<r'X|+\=ic(‰H,/b:m!Ұyda ]db9E.:`@[uq60"MX:FAH:`&(؅`9%\+,ku6[X;/j%34&g*$7,Ȟ`WEWM4|6&\( ăX6)-)cҤIv-( '&Uģ"2KmB"ٶ,g?|+oLlzʠj}\9֜HcEmZBZ? y ,z/ TbJku9>M* MtQb_>9#L*>DWtqmr;" t sX '|WlḅV{BEEbm*V  jmN7Ŝ/plc?\W\0*jO0eoS__B(oͦb5oS)`ad414kd3%1/7iOˍDnnn(A:Vz^cd'DT1N6}EMʶ i&7Db='Ӎ6mHsTd)e&F_cΗ R\ނ 7.")0} _o$o1 vnknsE8ALSjBg׫$:ԩ%Uٽ2t"7G׵:Gb*3tQ+P gS\dW89Q+1E[T2J}|"KEn)6`P1LRh9'Ҕbgry$>@(6Qsd34o4nH2|Ҭ=ʈ"\%i_#qZȆۍ©x4~xC5 9jA7v_e(J8fFz;9-S93(bzbxt2yq= )AjpXK>aD-ɰޗIoB4 .3L*Ӱ#E,a$YлmQ"i$nH7E">DL[ )z yd_s r9;4nBXO7õ1S;B`Km϶kUپm)[)΂ $\lks,Gk誉$1T`i3E%7”r _\I F %w084gn1(>~o*1z+YUhKRÁ(ut<71 L4wZǝgASM*?l%Ҥb%Q3jaBzYO5!-9#SD.Saƽ=u$E0 5kX"§mԄH?Ј0;49^#W"j "$Ǐ.r0Qr'8OvC3Z`K$B'g#q˜+2PlVL> OЍ, -a&aR2ƿp }2t1, Pv/ٮiL?m3ܖ]ȝo؊$2p9زCL=nĞ!QWB61Cޏ{*K9N l #A %=iRz[l ({Νg!֚r H␰Jb:@Y^|E6heMHJ+ -138,QbWNEFb(BEg)]G_ERD^%\m`ؙ5s2+.GKĒS%8Մ!8+@oA:g/70 $HBOnW*&&){8Lh:n{ .F_. u2hI#}7L-V79[vקjc&9D+H+auIs-FWW;Kp@RSG1udqPvI(-aLX1MzMLӤ:R5b:%6@U%֦ahB:Yԓo!A$GVLϚ^wGD$0! imnG%zIHF4~aupAVD{mI7m"V"p0͡M]|^%74ytRhɮNǮiOɰF2c(K}xH@0f?E8Ł,rYپ3j f팿O3]s9Zf֨W =uq%M|o;2-4uK6M_##tyaB)EjPpf[ypAdj )"6p ؼ ɺOђz!Y%_NEfZ7əjzǻNѸ'E/.'Wx(Yc5!-AvȤ'Ԧ1QC$޸򉼵 2FY0 -!&ܐEI> $֢mI mskr-G} KFD*\=(mk_e"jk<}_Lawعۧ~MHVqs o%BIvD"auˤ:;^jv\+$랪d7!r.'ut$qwE:9~lђFyV̜ IEtRQxΪ5+5kV( gnȝ!sOiHnsXGIp׭ [AqJ?-bd#k$N/KnRx" )uCdW8i:jru z`%-ߠq[azu}Kuoh؝}nIl4=ցbP"]]'c*r``m5P}S "v*vxwR@At_+;m! V.4 Nx`- )da~cEQY0z㛺 BF$)Dtq`>̎ډ ŢI%{f I:ypVd+]}i:qD&M=4-YH^avP1\j t. WS]_#?a,c^%HtbOr-ʛZ"#K Cj9k;Ntƅg' GMϊpV58Y{"LvԘ~)\1NuvmOl'PA}]YEPwe^!m8 f  S<$h[q(h DH$B[[mmmh)Sr*4WƄQz=Soϙ=leà!_XfîXhF)~se>4UWut\H%YBDYb1MPS:nJh&++JKrWVvX;'1EtWWdDS/IEy!>4Z?-:$P$ly^! E8 f>d龐0%-4!҈4s>ג L89.lvKl~<|wGv\\\9&ޘvOQoݭAbЄDYPϭAAVsQZZ0{1 +cdN r]x=vMԮd;j(d'*9,Y|~4S RUwp?E^žO%L Y}S\7i{_.Rtf8okjjH•~#-ɐCŠ '"~&gdP be.O7fYO"߇a=_Y_)E3]L)`sar;iMhu4`8,L\`*^m qZ2k=&n ' X|&4h555pp.7koksaܸ'?s' h sbJVٟz*=\4} \~ S>y82fl^To3Kg{;gXa~fUrWޜ;3S٬}Ծ>0CCsS#֮k.!5+z8^ڽcH%.7yv;{wmgÕd>}>BN,MRDHEWMd%w+o^@{Ƶ:a|QsXzogBFZxHWzܪ8{1W32(&;^nXƌ% g׬ISY]uʏ^3[6Tdg'elL[<;1bi2!7LӦTd`eb)Sz}bDxQ1QFY错|}ⱥ3ER,iDGGx J \6g~GÒ 9 $ڢk͇T“AښD1r'qe+"c K@EnZrL2?DIxj}}"h _i2A1| n?pA|뵗q9URJ[*4: PvmL2goy7s_;̜A2QQ)Y  "S9%Pݑ>.C( p R`| 2GMF8]J;. |%/mIQP0eκ1zSS1v&ϵ]Kbj5mxxm1E鵶@`oP%DӡX<[!QvƄfWScLJtoQ "!iO)>_1k;&8IYYLDUNrINxÁ$9gΚ9֪8\$F8%3θOA5n\^h8'ӣۢy)rNZ߮m}>xg*U0(P4MݶpBKdD+W l:3f19EE LI!HH*l# Eqa -mNuyQ= 3i I .!=Uc[U{߃麎( Q-e oƤUTQcdW8pXF6TJLS3 Sda0oU˾*!ݱ1֪xTşp6b 0nTkՇLA =^]2BS$Z[P֮_C$!+Ft[iNɳ4{"Oq32,& GHpr#2v454cCHse&5N IDAT55Zq\U\;게R&^>DSDRv{`=fz-eJlLrT>?CydlC7f*˼i,ˀAs+xkvDD..,pK:nT67Q r甋v#/-Pt]gŊvg*duUqYJǙ $YdkI$V}:[T\rZ08{7j*د]\P&" |K} Z}EQb%N9AE5S"T}&fW]a,b44>:ՆANu sൽhFq$\+WWחp~9B ;Hө-O"i}&S|[{Wd$ˀTE5|*AU$81hZ\Z-L)td'4:M[2fޟo>料'%Z%KЌڠ`R^~g F>>s[#ڛS,xtyS yuN,.No{VɾO#3Lݓ&jm[3+RQz{)T26+Is>/Ԉ( Ҙn{:tK84qʿA5LL7& qu _dTCWI{4*9LqSi&LDtPu EQu Yz̙wN9HMv0uRn`T # !R1 G}4UCE$IBQ,Ȓ((Uwi@Zש 㕝4l k a J=7LSioἾ f_ #MOayy9_! *vՉgH_2/S.BOmC_>3d? 3S\ SwhX%/C2V}nm'WTȢ Т]zr#Ulڼ [`я(%Zp#}-^0~Gͫ>y=%`FO4jy*2N5}*΋R႒(6En2׶ormr7(4pn:tJA<4R'ޝP$'OfWf8e^aX >.i`;dGil7B:C9 yy_QRB>3KK=waX~vlۖTUŪ(Xtcc&dU u.%3+̼/߿O.~:A^_jh;a0RƦ*.%i&9ּ֚ǃAMųf VG{[+Lt0 D!mI4XJܹeݺnM-*aX p-xcAx1?[{ P sռüqϋΛo~*_AD-b54oPC&Uz#\Ă^2].p^X iK/k嚉$3xWfe8n0y2[ir\=怤G F%Q'(S&61y[Cn nI'U=Wt~GI%3]Eo:Ni%OEkk+.Yft#bj:}$3Z|Dcc{hТ3W?MӤmAB5w{}ЭzRM銱 G__X㗿q];6'9FyVWV>P^%%Ik[QFF.̘_Qѹrg]*~*>gXa(vuà)x[ McvGMSʕKӟhnj䣵ᙢ!%ZhJEd8&tK;73Kx3Mj={o.Y_T\x=6q[xg:vJg\wt9G | {(-eC =$OE[S**-ZÍxqjZ ^lB$0m4|e]#$K5}:#+<0h8hDkL$Ne2m{t" = 1" zC7[! j?^.ٰA^Z?\.^{1.]MM]Q̱ƹ斗cC5/={4^yw+W-jw Fi/Sa&O^;vP1{h[wˉ+ZQ^[|?cqYlb 4>+H.O 2lz?5bj&By䈁G+<Ѓ e}|+% Hb}?75իq2z&v,snj!iȮ|kѫs:R>0MSkB=Z;WzKIOlR<AoͳyڄMQ0MߞaDE͢E|{B^ؼ-^LYf&?Nw̙z 39#SI&Y[MQkkٲ~6!;Eq S]:[uB &yf]wR)hqՄ (b"~* @ROΝzm5k&Nډ2n‰>tbm.7n$iT[: fC_,q.Ꭸ}nx&pX,N5w'vikhs3 ?~{vIMUשlld|^Z齽{_'+#Q 47 qÔ)ˣ1{]"g]"M^C X'&"f^o~3 6}}G`Z5@8Y vD 651)?55u^ũ̴N6l/}|wɾFv$T}&_JڢKӟePJÇ*}:ɠI7DQm^N$innx.;zo0c۷o׭}MŒITM:6 M94p[cvuH;O}RW֖w$i (̤@5lirJ33Y~}8z $躎kdϔ2&"EUnL_IuA@nKǦcK7 /3M$.,/"Mޢ1-KB1B  YeE8{yNNw=k&:$QR}7Ԁt:̕j4y,y'7mj 2t@OB_&4644H/[u]=?t_\{9Ԗ):d ty$+$ /B!yw]]7) !lF]b+nu s/pʵ4M‰DY;& TO;x=ޟ%[A)uxYĺn>uQ$WTuUb+p!+ҝyS+$ Lb"Ziv'(IX\2i_t [wna_3ip1)n.I"n Jw^R-WkpO'0d?|~|ݴEҥ57s嗟 _Y.׃?&1c:o/l߯Zp[4z+qkųOرLCZR5M_DN$?^ͫ۶q޶p&&.Aac~E9:+a3܇tǩ_{E91P]3fXOUׯ@\P]Uu%KPuE0Lg$ItI 7#8x+KJK(j!LM83>7"I6X;\Ksr ͘K<‡KRsع4aP3{Y{.)PGҥz[f܄ ]US 32x @0HMk+aPkϰjD Ò${ׯn?]ˣ>Ko} Y?^Ϳr jCS1&PWǸ\.//+  K%t]7- QNc("Id|d\yZcUeejaޝ;yK|X#v7݄(/̬2.3v</\g!먱vE!ib$JBUiFm6FQ2LX~j,3ӉERE44È`cΕaZ*M@똜^ش EpX,о{{.ʬ2,߿o[|%K/E3 r϶!#}wgmŨji!LI&qX,d\d\B3 V+>uG$cT0JErmFkq`W\-ȟ֭fe1 `úul߼N%s/~̲2Fee>bѣ;|?L6{CC[/p"aQSf?3g"Jgäޒv$~N?.Dk{o3wN;A>x]q$>ط.%kiY{7/lڄj%H4$[r6Dͳ2O99,Zrh (~uVi|-L75!"ZZҥb&T66rE=ĖcǮ|~Y+q|Y t7* B78Ýp۷lL8'o>^{=Ǐo"I$5X*EÁMQ0 7 32[_Ϸ{ۦOm۸id,ޝ;ɽ!^m@iEUUdR>H{4Jm[(267Y+""Gmۜ$~Fm 3G~3e9cNϗ-?~?}|9ķ.dCl9sxa&&r@ډ_˃_Ο׮7\޵Cg)^hbg7+Wr~gEG#tWΝVa ܩ{8A%GK{MظpTU">UtMUYw Ϥ3o_nٲI۝. ;GqEk/wޡ#Si6$Φ%6/_NU}=| A!CR$ IDATKGœUUkDQ!_[0}ĆܔD.ɌkY~=.vR}KS C5OgQr2ׯ֒]pdzbBCYd ?gH>>mkh" JF=N_(tH'۶8$@4~~xZn^t;ǻWZvlar2`~Efj*3}ذsVV2 4z\Q۷URUEJV˩˗#;(0ta:SQWDzu2hhH|W|r LBZ->M8w16ӉVcpQ9l4t!}ӗ:g5yp뭌owxv6FNFz.cymGF{%[Rj43ePDlKVϘۇxz@H}7 }Jj|<ìVJmFt JNٳyf̬>).F:c'O`j*bXO@I OvھЭuiQ9B>Apxi.elw/ڌקhr45 q9&UUq,Bj4HL]SoĪ1l9_?u)1SnF#ŕ?35.1t}\rQcp $4%* EUI&M9Ͷh5x"- Aq8; Ivc 6yIIm]YQ;T:Tc b4Ɍ¨ӑ}(g{Wa-+㕅 ;l0"݂E>|+ -]e }z"BBYÇvS48EU #1jNhD6 2ghln&6m ͸<Ł9@ѣm-F#.W[2},ZEÁ餬5|庺g ylVr v6m9Qׁ>tX~//gƫrĉ9qA]k:àٕksϓv8{7b2_7lE5Xs0^ނ. r$%k 'yy@҂1cxf ZFZk?=LS&!mPs$$xN Μɣ~0[EQUJΟngiH3iHߋԷ`AhWUL~~ m?o9!EU֤%&b'ϝ5n狲A@X,RazC=:.2Xx'/ۑSBgPpa?7v2.\a0mc`06C#$Au@ס-@AA @BEbc%Ix<a中[M`H IVqt~Y.2 _$Ihnn,KpY9[w'Nh64MCoo/N%I8SR_ P!M(x2\[ 0u]4MJ4h~LӴ8PQȟh"s}'`<]ƫ/, sǧ!0(20ى2,ʓ~ppA[k3|җKpV]DYȁ *ѠQ1 @e14C7^UDCMQj0 ܬ(@̄ 2β(lܱ aE%(,Ӄ 鰙 v3Jxb #bG6aWBEtwwhx}pY__{N>KEhcP"!tMP0/J/U5m!?f1WTQ#Q̥)}bMS[4M&@l~<`4؂6D@tИRMSE(@ AVᰚF?C#iAQ S J:TU֮.[N%G`07}0TUth`) 1g|Ls !?1h6K* + (} حDb;*!Ufi><.&*fh*ieQ5Jwf8 bXÓ@Vh:hܬ`!J DY()gi\1CӒW4!A44t`ꌙ`~\RkiiO6p;,hG8&nPT ?oǓ34G}3ѴmvYy\~gP1t([z1At&MӭV3/ _p;Ѵt;JQ@=iwFOYy4t88$ಛP*DQNPS ) MbMn  'O2zׇ[>ƷV փ-0xL,g$/}5(ێyHd00E1M&aEQvMM׍qI.YBZ;zf8捉ʕgehwB;CqwMi[FXiJ}#Ա,71ϯf EDCW\D4!!QS6 *E #(D4.~7P1o DSUּۯist}폀dQBn hфᅨn&@eq8ьJY~d2ƅYdآP4N4vSP&C=(IGEQ6> +MgZ{Y`41OީZ:MSsZoRU^ڙ:qjC(L?)B ]]Md8 J ⢌ A灪H8H\3nqQnpp@& f9z!Ԍ˂P&A5G@Q *=K zPO/i1~xn7" I_sSMHuUc bXo0 Ո^8f݂Ḁ حw@teKCmԊ? g;eU{@H 7ތg:AQHM%BQp եPAGచȡ,N QFG]⢊矑p<ϣ<HC8%'ac&{(v7$ HβCQCuqnńlp,M#telfCC8&v8M.*M:4*yhX/pZB/," CQ\rPkm&{S=:'ZV_n3(B~U%9PT@8C-=m7cB`$-1bQPBB0<#8,'P j Z vC%(e5@U 2VȪ QVA4H\D$!@%FX669;*yhV3BX nMdQ5.2;pI5p{:1؃>Q,6/2]C=VhP C=D F[7́eM( a E}[8&gc|a6DYA[ ;hj9BBQ*!hm=@{A CՒP9nAhɮe9T%(+d4 ;d*IU(H ax84M*dDJs,G=(#!Љq9(/v cs,=ҁMAn ZzptQ i08q]t"E0E%2zChG@q9pYd4{3Uh}EBRLĔ)Ugd"C)N9~մ֕ltl;҇@ 1( 8Q20 my RDnSp?a_p, git;ʋs&CK =iP cfTB:V\= 8'^N~J~sbARU'#}k0xlfeahBB]s ATt hPB5x2wQV Q̚sP܃Wolv5ny泙_oá(*9CЀ6i4Qz*C7.ʈ'DԷAӁ)SSv7ei,:n%ZBom>zƶ/*a LFunw PSoivT_d$' DӐcS'r3YLEW"??$"$e@5ѴG9~l4x> @E4tvJಙP#A4HwXm }ZF#w(7X6|w;Ad L y. MGG7poC0鷲NEE8łko Be{yظ=d:p(vCd4yAS:dF4tM%?h37_ȿ G^C'h̫vޛcV8 4MG(@4.dAtե M׆>L k@87YU 5] BB9sfp^L-_ۆ{oQVF(hl۾7 eǻhH`0[Lw(<6\zESϩ0 0GڼE8mf}YV m}AI+7O2/ICSB#;͑ZcS ASg?3ۊ9[yVtbB-F4t'XY,z0p,&eA9-1etƉ!#v Fd#,`:E.CkPUa?p^dUL2tN * AL/Аe(L5 o0"K\F4l|b6Kp`V&W$ٖ! E?/,eB'Ї t +g*Zr (7΅os/Īuk`4E #yI3)YQ?ې"M9םVӂ]ߎXhe0}b!CTtE !JaIVfbh<8(PޞnةF)FtR`(*Ȫ|U! 4mEC ]SDB2ₔL$>\= C{Y@ Fn`b'p- gOR?r&sw"thJehjMfU2( Pgٸ~ƛESG:k:xMpcPБeR.&ܑhkmQ9n,c0AV Tԭ^}wwg`Іă8ȲBt<  KEYE59sNlDaɴ%]&<ˀX0trC%5R-GYCeJ@!qAAQSv&ƪx"BC>DTl7bҰY JKy-];p0C%Ja1nb氠4/ZʷQٻ G [{8'&4%GqȊPT@Uq&|!֭]TX:P]{;Гp'408QY apΉCǠ._g[/Eݥ%0<06j@i~&*KrPڋ@8 l(4nF\f2z!1Azkˋl+v'^A!KB2iܺv(u|lw"##ctk] 0)=hhBVTHJqAN 1p v`s7| ~lr7m}<lKQ 6t;zӹrDp;p:Zp-E{PWW?b (vCӒKqəֱK EQΥ˺ ? }20M[i=@$!>(dtT( _5Ñ>p,AAA9g>kEMaTWWcܸqx A 'iRkp4 EBmhqrvF0 !CR@3܁ז.CàYYY `ppng%A8 ;DSc#^P=)i`0VɇpT1Urܪǡa@4XUReB}nO<~QO.e]ye]ye]y%3K kBAU0`t˒?k\&dPqY(ҷ;ڈ7~_L՝ 6ZE[L 5&fdBۋ]xOP3. s0`/o~CD6 U&XgWᘀGѻpp_:p`nENBA8̜=!??`:g܊eQIC(*`6mYq4?XxlN/Vmأd`QT<< }e}IbX(7̈́ɐe`vzSu$(BUu50*VbYvjxhCui.5xKtԵ.9(Y2@$w4.R 7^WVE5))CU%9ff)V~jbop{?jF5Lủ MёMUEpWCJsZli+c9zfuq.L`0C^frVG2)\ ::::Njc׎m˰C9x<Ѻ-WϪEa#9tv @ ՊO>ބLFPTT<7(&3, i*h0$&4,Nc?@^ &6e^nf6TJz#طo6l؀e˖gE~~>.ZZZfњdi>lfq!yNvz^,MAb1☿pOΪ.Lwh9Յ' ( Ae_Yiv7YCM,Cfp[f#Ss%!XnfΜ۷chooG__~/"{9lٲ--#sa\tdnv$Erx""݌H\Į(CөJ4"7݊-{LN'dYƖ-[PZZGhjjiz/ZLm[6q8֗3 ɀ,b6ⶻF'7DB^ŀ0\9 o9.(Dy?D' -hhvAǝp\Gr7/P(Q͆nhBf`֭ZuػSxzO>MHD$̪bfEa|AVzPw04,VXjcYJa{75?cI6PUg-=xj9岲4'7v1{lȲ{wqGjvz}AQB!(M6!c̙纮՗bth/[FPݞ' Ns3ivԵ!!Iwd(a0CZYjHb~0PpU?88KMXAD9ax j*@E 2^/DQD^^GJsQd*++QXXx<BOQq v~ GjdK$ 0.H)H h ^zEeYkn刉co,qwN*H\0R4P\tMKF#|>&NUUiB֮]6PQQVVh4 qd%/fqДIV?0q c2}` C Diw4{'ͱϸœ0x:p{`BQ&7X4MGa;cՅ]vD~~>JJJ a+Vn{L{_,4ݾdQ iΩB{ BgɏCWBR:qǦrT.:d\ Nϣ:X lf#&D?II^3:t=6AES˘bOC5HɊj GQ:[Xd JJJۼ˗Q8d0r4$EMKz1oR)>݀BOZ2w(<s 2>|麎D"#G;XfF+Lώ%$D"(EIQ04 4’2|m4̄c3/8&Yi`˖-͛ah4" ~W; #!);`3h/L.Ei^&:aZz,J0MEtP(**:fˋdEE$!"CRb2)KC4þ}˅>Fvm_XL0X[HsXQA QbnEՔ騮ƦM qW]YAAZZ9i5jbqε4FOU[M4#apCcM&hǐ4Q.@BW<1SLf.<瑖 } :Ŏ(a_ @U|駘r#mmmw LI?ō7ވwq}M7O+)r7h4~d2 lٲ?QlGdYh᳒X+=zMMMi: u]GCCz?ݍ˻)cd2~eYÒ%KW^y%qFic9=OO~pl SAAAEQL4 7ܐ3X}?-e\T8E(bҥp\xꩧpoAYVL2k׮E0Ą η,tYXC4knkkjM/--VUH˽{>&a,^ؒ9j" b۶mXvmlC"]yy9JKKyibʔ)_Y]s3"\FFo֊LJرmmmHOO녦i[n%h,{OWWƲ,&Mc믺 l3X dYƦMo"++ @RX OtM)ax^n|ᇘ9sr+3!\ ?]vappbnl2gggg*uE{iw:NɄnɵbŊ &huV<3(,,=цhxe;v`֬YJKT |\999<#$AEHn 0 Z MӝfX,XxqbY*Iw{zz*6lN45}Gq())qZ,3X)վ,YaOGcp88;w>CO:b>(Q,XE80qY pUWM&CmP6э7>X,N:J'jp`ҥXvID;x<EҶmۆ3g뜧q_PÆW_Ǝm[D|o,..pAǁ]וxxoYtPTTt'~@h| $IG4L&SjE8F8FYYYnOI=== EQ arKNZZJ>s_S{#x ؾ};f̘J_ ooƣߺB^۰4|exhjlS}': J$Xn)q/N3)<MӎX'o*0~x3ͯ χyYw"vލ+W{%󡽽fZk0<Sb]xh@i~Ԗᕵ;_/nĎCmya5ڊS |NZu8.[t3cTD4M(ݲ}d 48p8?],ҽEs%GD"\45%A z!I //x70w\, NbΝ7oٺsQG# F\;+LthMQI`0>||\YUߺ{DNpfɵkj+W Ka]8ǣk0[Lr<9<~%YOX|vvv8,۠iڟL(0LxpJJJ .$IX~qQ.c``ӦMEvbAMo?}j̩)I+fQ95;G10p2W< üyv⇲iӦ~^vu͜3gqܬ6666zJuB4it]Gooo˲*rJib1H$"L}_WWٳgHֆɓ'?[W.: 'yq-?rdГ= Q) $if^^ޚ盂 0ۧ|qM *| ٌP(χ~tww vȲ|ZuVZZ;wbz]]EQN)> x3:j7<b1b1~FJ,CcZE!\%cEEA{T"\0\0%>O<F)H굢(@ssKSJxW#`ӦMhoo?}ۍԺFcc#ًD F QfW"`6P]r۱ln,F,S(y8hi3 O>ٻr}>_X dY7w]SScy$Q__Ӯ4 ׋o|lj14yAQ&p?UU= `$FKyH#iϱFh bmH8g]wuuBXb Nņ !}ਪŸvAtuu3V41!l6N\.@EEv;A@__, a0WnZn@Le<MLgP.jÂEGU t1qL$ֳZxZUՔĺiJǺuGBOX? |>pnx<zC4ł+V驙iKK `6SY"c$Mтa8mf ;!J)W(F&XgP\hֿ˿\_]]H0lD"L>CQQ8@ Ii~?~?!ٓsle$i|KQ( "M ??Σ/+OaE`ze1qYϨNJp|ffO?t(:ć 7|1 sOΝ;;vGϯ[+**y<_}1`2 ReYF0Ν;q]waFEnXT%c III\EQ[Rxj!;݆ Tg8;nBQ-},Z|U(, juXyAA$$$IR$)$IJTr @ [akh|AMصk(GOOf̘B5k<0n2fϹ/l6WZ<#AII]p ==:[} dxoH97{&8>Z-{9~8F< ֓A4!I@0YŬYi1 .< t:ɓ'fӧOkFE#%%e4 @~|?$@ `0ߏ{"::]'\J"@ >@||-$ uPXXÁ&~ԩSFbb"oe /$E- I2=J_8$I(RiPhH100@IDAT+WfY:'N>1 q/'(aR㸰pY 0 VA,+o<ˋ8{,rss,Hz^x<x^DEEa˖-xj4P(8zOLL@5˲Y@ A'Ti4,B@@ Rla&KcM8}4q0 LehpQ̙3g%xn+4TTTTʍlF{{;8CSSfϞ ǃH$ ,<.N', ֯_IEAydll~F9s]fN(N'!d2mmmXNND}0EQO6.r7 غu+RSSq) $ <# "??$o/^Z߶DUUv;0888l²eL6 pMMMEmmm(,,===طozꩱ*hDAuz@ p`0$Ir&+ǎLO}>OYTTzURP*Z-V-nL&ӻZBX@QԞG?_xb7o @$ϟÇn)Jdff?heeeؿ?M %}/^ jnC$x^d2cJrd:hwuJOZvb__wԩƚB~sAII m)sQXV|}}}O<òlBR,~EX׻'ǎ0 ={`ʕECCC8x .^Jl"33Cf~z}e.'';wDss3bbb -,Ass31yd8˗/qŬYʹyECEAc7n-Zy{z=&N'OBѠ\3}t۷W\0eڵ[o8eru4t:h)^|jصkyضmXEqq1{nlڴ IIIz*>#HRx<(J^ZvO?4v܉E YpǡW^EYYBn7, qyt:,[ IIIp\8wqڵqR .M$?QՇ<FqeHJJEjj*Ν;Ԡ `ƌⷿ-VZo+J}ay7^ I׮]M`Y7nDGG I>sTVVBV`08O~f)))8G((رcjrFQrrrPZZP(ՊZH,Xׇ?dB^^r5ORd<88أjJQl6عs<Ӄz㈌ܹs}vL4 YYYtсVAdgg#;;uuuߋ^)IRA`ʈnBrAf---… 0 {=t:ȣn\p$j%%%PT0Lcu ԖfA ÁNjb…(..ٳgg! aظq#l60 Ο?? bbbֺVKΛ7y`%KP^^.`Kؼy3^uTUU'N@{{;4 9(RIgB*]*(B @QQP^^>L6 ,ʕ+E'N0HOOG0Djj*~?f,`0n#&&fX㸇1ஂ( P4MN˗jQZZ4\.9rgΜEQزe z{{q9:u ijzbkDak:n FiXpi4 QUUK,Aqq1vލ.oL>|/>Cj9.#(iڳ#( n[gf8P(X`|>^/|>(BZZ^\50 Hc7pCv'E+V~;l۶ * /"RSSj+ql׉+(JjiiiVkO~Zl޼۶m/"A@rr\$~mlڴ h4\( Icp3FB.""6 $APeYl6\pAK(B||d K7lJcǎeYpE3!xpW?!RSSaJɓ'cʕj0P(я~|hll(HKKäI ^aKQTy -[f¥Kdٌ\pE 6a$:>R|Q399}= V$X,]:u*.]J p`0㐝 N}!33 àHMM&q @pgφJBAAVZM6aǎzty6 08K.֊|>nE}}=n݊]v8طo߰c,">>gϞEzzc@AN?$IhoBFF~_SS(;9X t8?E ]%Xz59AftttnjF#~?Nz?y I8nҧ~:.ᑂ$I<ӰZX~=, ^ Q1i$XVDFF>bF!8V+<쳈B@FFM7BxWjV+>L0mm7? Z4niiiFI:B $eYAcڴi`F~644b(aĂ OK$ K|x]|  `Y*JI$tE:P`ĂǏcL6 %%%0L~)Ssd8W\ _SVVv,Ν;weٿr7iƂa֍eYho(,,DEE.\u5k-FD{{; 6w:^-7|n7iyj.bT IFׯݻ;8N=Mhhh ^%IMTZihw}%#E>lGgH$g[$iEQ0yky$qan* r(\ \_\P܄ -[غ7G.RpT Z@ Q嘒Z r(ThVq0 jh4rkƌ}\[[V<0 l6 ^?zF#***v~<#Uӡ,bܹHKKhDjjlbI4bYyyyP(ZFLL M;/:F !!sņ /#TӉ[,:III7|0.330L9s&233ǃ6DGGh49o'NZB;jjj^3sLHiz?LTWWd2g8i|>9Y3lzztuuaeHDyy9Ӄ'xiiiHIImK@Dӹd|ɼ'|2N.\gp=CEl6,_mmms碴TN?}l( $!994M#77صkVZЦ%1jpyZCC*++QVVvˏqVbŊiz#G~m_X|vZ{^Edҥ`@NN\?J$Gg n~qe8=zK,_ ̟?t:AF#:::ѯ| ĨT_,I$b[BG^dž ԄC\\n7rss!∶?+shiiI2e A.\(Mvo<~xAnN8 @F`I&. * y$-]5)^$}Qp`]5X,l6J%nNTTLo7f?|NhӠIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Spatial.png0000644000175100001770000004011414614030416016152 0ustar00runnerdockerPNG  IHDRMbKGD IDATx}w|TUs:)$@ Q ]t]u:6tue]wWE*6T@Q:eҦܹiιo}}X,q :т$c8Y 8> p\hX,$'|r%~@Q48o2@.4M4$ 6mBmm=̙>iw8x{a߾#ؿ((]ŲkDQ(˜ή{G+afԁ}fp~ $8CX(KPZZ f@4hAnnFy~b)X,;,褎ڱX,~M^@eY B B@4Ts#<0 {L83) {< V5˲J{-Px<fTPTjeK KTjT1lX.ƌ=I%uuuo@}}=뭰Z 'ņVZ[hmfC?-@G?%e#Gn \}hF2e@ vc}8 T,bIW|ЙÊ)S܀ jbb\y<~,[۹4}aP@L|H>QB<Ǫ*Q,>|!IR;$q \а29By0bčh( nn/q2YVJIp~eZu,)DӇ쳖(BA"Me$ /VG5Badcp)Cc4gb3aŊK.]#GT̐:w%eBضn﫪))q>"BcckV ^Zz.q?Btz`q, PP(SN㢋G|ؼ;v H9@ϒ$ǘR:nDɴ͑'83 8t0f̘M8Jd M3x4km۶p0.|a[|ضm(VRҘkltB(Y5]گ7 992.W\Ljrr2q x<<ArJx|3š4<U{fS@Uj_^%uw&FIƼy0.J ;یLz0L@7Əχ ~OƑ# 4ph8`pZ-u%-- Vke6N]|$x[Z1(P^^B~ J%NH75Q(p|^9|!hԁ;,55%ӡjiN I h3^ hq,d@RlNZRB0dHz I BL]tp۬Li4rDZnSei| IA<?gbѨnalɚw#%ET:MPh4F/7p >Pp(j2NkLjzz)FuS4q!-Et"6p:l4q "ϋC}\ԑCQ55L,*q¿nH(zMɦѨ1k{!23zAMP\OQ=0썆X,I.aA4mۑX,&6$U(+kt8\77ՑBH#KH[oVa7y^RA+#GEaРlg,dYEE9.'APU7OB?%v %"bRh1##EC 6nܚrWʟӓ[KK)9A|ZShbERQbizU]M`޼s\yyUZi>O@K+o32 PGO)ֺ;-  Cx&=0,׵:?oʶǒ5,y)T423 ^wKMM)~ x%) -pMBvF䬍FIh/ \ )>{<<X,,s q6mۑtz,ǹT*58N^ CIRQz}:$61EhTe [CJ3΄V y?ljrDE<#! 8##) \\CzepHX~r 6,]RU:4 rC?Ipa0Pдniq$C$k4=OVgal6'n3|~|~VBHCd={  TS$82 FwPE$PT`wݺ-|9;ۄݻKQl(\X,R=!zi{1  FLISp ]  PbcG5mp8zZU_5sC&&'CSSOJa1D/hLNv)&SćVKhIzڞz;"Ƞr[Ӊ7y3<+S XyscGaWp(s瞅:P}F,KŃd?,I!h 8˖Y>^ @P1| e S`t'6knX4sNd jg N>ߟ0{Xp`Y.osņc9pm j5xǚ5ߠf h˲i DKӡi76x JaÌrp&ZG II R[ ?QџC磵Vˆ|8`~L@Q???_}㍿0m6syܖ@h]08s%jUq!Y"KTДbg跄S*_ t%ӾM}hAT"'g )@u2W3fXȀqp\1@ BD6xI>X=@ LJ o,]jŒ͏Zw`p'(bؿ(|˗e(<ݾ5N N7JK8PB˾Ư5Hpgy ݺO_54a@bec>_K5(\.7~̟ޘ kW~>xgN(gy󦡰prr(!V;vBʍM;|m[s6?ʕ+=NJ%z8pC!',GY| UnzȻvӼǹ6=T]]G]y EI^Xعs?(t+voܸ9)lmk-(+>ˡ}xW_V @և36*NHuʕjǛ QdMyWelXm΋.bX0@Nj_~#ػp+8s.3ƓI@\5 w},K6rI--68n0 0,N~& ]iW\ZlIKбVzӦO,z4 CQQITq0kDMu-]t~uudݎm?Pʢblύ-Ccx6 cp'.ai4j g`K<׺ݞ[!5DZ2+Q Q`XFw^{, Mz` yyyPosBEZ<3}D(#cyVp(X6V2% }G9(զLeKtk8Ykg >ch9;n-\korlS^eamذ\hY݇욚&|rEa;>]zM[.D""j}d{d B#6y~_p^|0DȲ"X0 W_<;ϯ3yç0!8x,m&08q  >[ =:'|Ot:i֡nS6(Cdy4D oiqhM&[ce趆ek|Gx7nZ4* !(5V.ǎhllS;wEdĉcV+ؼyZ֭յbnll'dKKKǏ?Ձ`ޥ)존TjmV1Q@H1g8F;j0~-˲D1arN[]m}fsw:YFn W_~ EhQ,[y$\SS3\4Vjj23wc[FG4cHsdff2eoF(Qq ~ؤln .~BAZAaNMM/*s`8=f,COG_| Yډ8ZY^y?mXn z# -8./DZػ 7Dq1_6s硴"ENc6&_RF.7o~sc$`QV^k7s#)JSKn[DS BV#=_ f X.45yXg5VU""wilh )I0TnadfO)P4MdR Oa0rY&L#GP]8$L 7|pز%0A0,t: z=F mi _O I@CEݕi1eX,>lΔ;zoӏ@NGGs;G_1l(jnժPvȄGxo[p^XBe8<`DF ļ<&IDATƟpE[N/^pz.*7/05Wj6|~АA{z}J4M%Wa14a.Z8xk56tW86LwmIGSE )͡y3˜nX U[  G㞛 ΀;Dw NI2enQ'?rgemqc$ .<G 'n"0,8BDzei)hhlGk^{JohvGd#DÇ@z^*++1ql:,_RS')8rE~|NS-~lڴUU`.^H[$c۶1c Te%$;Tz ?y%nZ2pxw|چ_vZjrkS'3тy^{{g ^~^%_^A}^|ƞ4rꃯNNv$H@;QUՄa2U~"!Z[[WʪԏRk]O<ڼu -v.7\bZlTˌz'wFTrlMMMHOAVF:,a߁C?cFE @Ȝibc͘Q!(.. jDՒXiUUMR$ |M]_]59?uTm}*Qh;.?U`YW%ſr$qKz9L( "kMis9Ƒ#]"XyP)XkZpK(H~wY;t0,4ngFnP 8c@ @d)cJ#?Spc0c߂޴ci@ ܭ -b+'+s,HK1nwf(7^63"b|6 ZZmhjiEcs+MhlqۊbYMkBH:N}7SdS?xYv3J8E۫A@SS'GCClvV4Xa;`mlB}cgxnF^/^Nڐ2kiC6:xiJ {)ԙi--.8g*PݟDGiuuux\~jyD/Eayx$0u,2,A\{ϓ9r$tzRBVcС8pP;UrqzB8efFڏ>|ϸYA7d# ',rss{ KT\A?.AH),uxߟ`(--DX8 GQ423`cLdݺ2+QByw!׭CQknFIF=z- :$``k`ԩתaԪQ?C2p 5zFCʑt" Pp4Jܧ1i\ygHL-21Ы4p~ @>Պm[7LS GMQ Jǁ#ij(BU|ZNT⬳&iHaX EԤ?/ɗ=I$yŖzwrPm dn˜Qȳ!;;ocf7q&545?lرGֶkNZ5ƍ n}tpƌԜdc;Z,ڜ=^)-/:vq=^2d(Ι:qp aN;%ֻ ˅_o[Ad 6{+ ucᜩ7cV݄w>|y#0n`j g9cƌDEEme*ASj|pB(m{& {K=-E%=Nu֦puޢGoضdEV=,rhxvΚX"˰66cƎ_?b$ '$.>w*.= ߊ>|C%|e :4 edwڍ%CP(hbeYDI$I p;[#0S;Zokhj]qcXJъcڔ 0ggWC%:MFhObIxk6v]NȠi F#cشq#ϘqZ  CUuޕMKC87oF#L&Fߥw5x<I` Pg8YbӦN nqE QV*B0q⤓.P( ~tF1exWvORSS-gw\l6z>3gYS'ÜWMv ,e'ժ1]DzFC") E 6_{E6zV$)0p8qA$_ 1krrrLX.lI;CbJ_{v 'T)1y4 p18;#8(O=&2n D,!(><@@ G1d֠?·#(@%,ٶ,𬒽 @{UUWYF3a=+,#H}kk+}dg!,jUdHc\~ ~,o, ^EjfAhOOMͭJ]ԁHJT'fB\CuMWIT`(XpXv_n?BbGMW\~cա`x8)>T '/=v{>99yyz+? Eee<4Wukbc/H1mAw(?2ςe,A?6HG oΙs(7$"A08'6à< &|RÜek{#dl2j$PTn,ƈ/BeQČi?C94558f(GI, _^p:hnnMhh4+L&ںzh՚l*UGUf:9)iL5jN3mfUZj&g^/֭.|ٜ3~u1شEmxb6 4c1pawYSMOS BіJO~[ U`̳;]x%IR<5.-w,gTp,2*|`PW,AؘeN{*ס b_}%Kx!MfSLi{f? p6 ?|Jdc>܅xܨ׃䍎nEmX#0Q o8+W 99#Y&+VUWrknnE3|j" G)Ud@&12 ;c԰Ax/\*c;]s8~#`܄ lcwwtjzrh-H@9zqZ 7qxvleL(x7G l!CQQ~vV`Pވ(mg.WdCw]%WwTfapn-KCe V,8o,; ѡtD86J*E0ɒjY Zyg9lذcՕKETzmv"vL=(c|k5+.J|O sɩ /Kal(j̨S9 -o67 $BD\dZE vqFNR)KOEIDiY9;\\fz+~mƞ#$Ǟw1IbomdVT ,bFh:3f‚ T*t{@AB)gοIIm EבM%͍@F;w<4sjˡs^/D?dIEgkR wR0)9.|l*d8e͜h Yc_Yln!G ͟57aQ6p}o$8yG1?+JK1n? $%w:0mmHNcq~q?4cIõ KZYDQ!r uC>xP&@H9U gdI,({`dSצ"ǭ6u;AEҶݩ8 4{B}CC cΒH@QCoVRKgN{cL>kZW>Tv%I ֤d3LsC$"k/L6W0BR*80,5&?'ߜE @07^|,s2ZlNڝvmZ9ƔFo33$懝5m:~`L[`vd"#opl- vN[3O,2 > ]Eǝ{ų>eN_es:ڲ}W DIIN^0{4!i,} [nn?o[U]v@b|8.Wkϯ;p ֬~|q'!2ihmm:/"]% 4o5 xk8kZӗjk6ژ:isSS&m+ ,!=5I7pT 傳*kfǾX\l{'#=M={D utbMoo89n쌙7l3V>G|g' !8\zN!wǏrbEJGhZG<71w]UAiw%β. "8ZY!(sRmnpkI;=մEsL*g(.k cJ#SoPh]qgy $;e! t |qàUn o݄m[O>}L5ϼGEJJJv}Oܡx)sz=VMxXsoZ}/E;Kr:=!8M61,?AԊ^ZO_^Vއu zE=F͓%]ryOeM[Munĉ%S$" Ͷ3;F9-ُN WYY@l_"FwRqQvp?G ]33Pr Ґ"d(ìd0,lu8@<@%M׋|((F81}JɅ㺋ڴ^t=ģSUWWK.y "ːe ]%[ !b!9x}h+"d"s_.pL짖=%, D,K9H0@. r1$I¤qc疷uǍ5CXX`rlCMjٌ9F ?T"…F8I8xTv^gĈ{mǤmkNBSKk7*"#Q4&ɲ] (-??v7 GgLFcZ,9RGuf|\ђXWϽ6 m9/"e>qX뻂G!G0G*(B|𼀋GN DO})dhaڽw_W'p+\էm.>mD⤮b>Slm+d5IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434318.0 pychess-1.0.5/pieces/Staunty.png0000644000175100001770000003037514614030416016234 0ustar00runnerdockerPNG  IHDRMbKGD IDATxwx\￧Ι>:*QdE\ƾ k\B awO r%@B:lvIe/ $f).ro7I֨3̜r`cI3ْ1H>>YfL裏W:ј_̀+,S;w ( JJXlYםܕ_PL։h|J}CEwsV?ȗ9;\@P$IP2rY]!$IzMUeua~Ve=PRRrkgg/w<'NӧQj/EEr^Ȳں:̝;w1S~>YYY#C q /XdhI-^ *8 r1S:Nå- A̩"E>QUDnvLF#sN;#ֆݻwb6! jN5.\UUqQ\x( N:y (bʕ,1ʉgO}]I18Ey0 J_#IZN *8RnjÒ B Ӊ yXLPD/?`0 V#\!dE:qŊR,ˊ~jW`082 %mFNx,+PUP9)cF. x0ػw/x0cZNT*TP$`00 a^-/-h,Kô[yx8='7/UUGQAx> v8 l&!8EQ!p  PYZp(${ѱ%6<" *KK*EAP̌Ƣ4-o5(4:e^?4|I <}}( 0$Y3Bp$A Z9Y150L$*@LA]] Tgq M6j6!j0&I@-i'ODӉ,x}s,عs' jkkSM"zҹEQ0L, upXU@o rrхEo6Hf*;JKK<)}P(>h4 $#@d ׇP(=fD T;?Brd<, m8p8ss@FXҰ~^ =P( Eo,(P_{S֮];!cxx(X:y9YVuo߆C%n1k;@$NCee%:{&|pvztInfZŤQ #$eѡP$ i4`[p\ׅ^豝ݒ$ ",TU"p,s:NUUp{RD*ŏ $I$ 1NM{y<|y38N|zpz)IQ KQ%/FDA>ή˸~ZX,p8R9+;K(:8 ˂bCB]gW& u:'3[ϯ.pQhiIMkɲ|k@qx1$A %W`jx<|[QԨeŵZ" K6.3c-uuuǏ5s3p,̝36p0P<Ly^UU|% xR:VPdj1s@tcmZ nhh]ƉqJهk-&cF$& %^J>i-8Q004QL-!B(MFl4M6Is}8az]$KJ:Oζ;' ${MEf5+ܦ/^VXLd^i,(N8jeӞmZ T.7"+h\6pL?f7eʎ׳N1Uۣ>ζp\Vf7eeVp\VtFE8Ng'DQFAI_Oaܔ@H;;;[&->I5b"T327oa}> ˼SVVv,%Üܕ &$ `i4W Ijiq^8_%%%XXXK,cҥ8~t|kP0B`FYBQQQzA P\X*`xgKKK'& #}8Iv,Vkd$E^IqC~dee]X5,{5Q4^nfA 00<վ[$)m"HSU]]]8~8 PSSwuueܕhpI=ru5hdDuy)<'N\X4,EBee5\X[mJJJr!Ӊzu]|hh?Oсtn1p:8q8̝a?'IVUe:t%t"J+MS/jp؋ sTYeXb2mήJKKى3.a|߼w999̕= `}X0"Š( /' 'ONn+W]]mdeEy@?EAO CãqьUP7}S5.%''+Vv홀,'XT?(h_X$ dIX?WW[YhcFF ?~"^PQZb I͖; $IbSpEfMgtСC(CCm\-AiYrss!2zz20 inuUݖz=LF#J`/xh}q^E^vN,,8$t:$Ix<$T% 5UU< ča '522fEYb?ii.Ҙ)2f$IPTTL)d2W^CCC8p@BcǎaA\|J,Z, ׋'O"/'Hee,7W;@r_$AEoaYP$ D0 !,l8Nlݺ+˅-[!;;)XEAkk+Jm<>4M|dsNÖ1.R^^~_vv֭5s*u|9UUudh͵M7'GʂzPUAF0ę3g IسOW UQƝTUz~̙3 r :-&n8a/g\e>? UEK$qe~24wY??j/* Ʉ{/шTn5@͆8m5kBD0&rG Z-z{{aSAQB"0JM,Yq G" "|#n?ȇR; 0%) ndd?쨵Ann..] ݎW02a>h~-Ai.r#r As:|AN1 ``xχ"II;eYyAUՠ-?,˚jcQJ J)R aI+ 9BhJu.1F!D";P>N vv b:t@Ae?zLL$\L82$ ,* (V?Zs>5鮮cc1uFNu A:?\xn_OԳV01U, ")WQQ @kk+/]TbΝطo_eB)JbUJN`qqq5@8MWWW#FMk 3qmhTH DRi-+ۍ˗# s~ֺ6mByyd8JN+,V |^?, ^H8 $/ ?q" ϩ $lc^đL2n&zdgg}f3v;'7w: Ñh""'Zu ñ㸽ׯ {-OM E>3VUx2JYpuo KAp HL^^  >œ sXU9")tZ`!dIYp/Zi`Yho~. N7 Qt68 ךPpBp8rxA X2MXpv%4MFz+DQٳgꖮ}w/A?74LJ\6anD? K0!IҙdΛР _װ~hIQ^$I"??fP]]}ɩ F1OAUUb,CQG'A$ $YA: h4,Hej!2ӓa҂yF<_qv;{1>04M;d,\0Doo/{.:<A?8|AhڌLNe5}".cj0r*YK"c= kqw7s޲Sib韑EFI nddeeecV+WBjSYKI(8UUAtF&sw%~_W2>[#ZNR2ojjʨH ,DOuf-G')ŖfIYKљ2+Y.+40m֯t c1U0l 7eeVp\Vf7e%uN(LzD"tuua``P!''2,8UUկ~ocݺu<Ғו qs=(++VĦMpa,XJwU+?kq;V^Sjߑ`l˲lW:dɒH$j 7p~a}uuݺu655m.%%%o~,rk_A&J]dIb㏛bk$I>lݺ-k׮}1 }%:|t; ()4U jlYP ԔeXv?,7ouA A0LwA'?1\{w2 Ӷrʔ,ӡn?ϡjA$~.+V3UU駟_C/ȑiBHZp+Vݏ=X… ܀ *++qwַ5k|-H'~?~jEi̝;<z{{gGa޽p(/)BYI1j*Q?gb߾}i]?)-_ܨ[y䑲 R ǎ3?>|AMW\9!TzxFcY& _f9n7z{lb|Ij5̩(E[kk# Ik0>466ұmp\'IJm6n0\2i7}G;mBxǦM.28wjk8XF;w.{;hhlldL&Ӧo}[-[F_5p ''η(e<իWZZZ~)G<׿17z^{ʂd\-eK71 ۰awٴfN!;;}途eYz^D",YOWE~]vLZݻwpСC *4ͨ_H?6c K_Ҫkg$e@h4,'Boo/x=s(//My}}}Xj3Ҵ$! Ψ[lن;K&AQD}k͛3IY'@}}1?P(|>7 p *{ƣIVo"(**J(cُ3A N':::eaQkeQ\\ QXOǃ+V$!lƚ5k`6p8}\ CUTH>&(" %9% oA@ai   ؿHDmS QXOχn-Tcc#~)hO< @4ϟÇ#g2[lG&@/r4,* |G(((uWO>w_xᅁ2… ?|pسgoi0 @d{h4ƺAoNRp8 NᩧB^^E-qaa!vܙp%}.6,@([B$tZ-rrq8{n#cql",[??#\.cƍ@ pm֭~XjU^c ,OG"0 Բ Iܲ,`0]^h:0${%Hø:sc+W\jcyyw D"lrzsszƍYYYZBHQAd~(J_[)ӝl:rqW `Μ9)g̉ߥIDAT۷ljj*?tЭgΜi ooݺ/_n4 Gz eY$I`&Q`>/t1j IR˖-òe;v ]f,_>qWv5zsssV{^eQBQz(*:>0 :;;S\;=AQtwuaF>[vMMMi}1'|ʕ+eee{K.]ʌeyb%$))d1 )uUU e2iI{{; @/Doeё'$UVO=l6;z!BIY'lƁ&l) IR|XW+$OaNeEAhYؿ_Zq}z~B`<MIHFpQU5nFsտR݋"uAhNӂcXٽ;{$-UV,yQ`wIdR!//ӟ>[z+鎢(صk|,\6Ih2(墳;wHɤ2EQz7ׇ  "mck4xIߥymiiɨɯ`I022P(H$rIl,7b!N5f``--a/.Z}=ݣ2 ^e1wN99+/cժ{8I yVN㪪^eG5VǗuVt:z۶m -֓! ԩSC= 644O>CMM TMtuuaX+iH?i& j0?Ċ+.QPp7xFU-կtv,_$iz$a2`2PXXzr-}ݗz"ESO8ݍx 3~Nb׮ M!(j㰣_˿LK§/Z+((R!6ZPPz.+++z"1|lfPWWΑÇ~"a4v qȑO(8V{m]]]F-kkkM%XO󨫫DHqjkk'\d:[n.ӾV^v6zzPpƖX $XOeXfFLUUjZ 0tp"DQt Ϙz8fnwx3q)ѭN3 $lەd3 Gw~/3db4N}/--EAAA&¹MI"Ӆ 6dt;hG=.XOIL+f)ǬfSb}֚>5s{GnJFjs:eYFNN*++3qYf,x'`Zm6曙l /_E oiiyebdJ+q0 Sj7ިQewsssEVV%jX,U/^N$ʈx˲/J+1|ܵkjTUM?pCkk|%5I,Y7n}վKiإFZ.\GGGCQ/z tvv^nKt|_Y~LӁ]*dfı,Y~~ ^ٸq?yil߾W¾}DxF0wpM7o錯ICף [n\!O*)N>ӧOzv466־} "dYFWWj$ N%IEE dd<AO<9sѣO ڂ%%%^z (8x^<à( /bYOwR^Nj/ 0LXdI<'DNNH(hЉXlYl~yժUUk֬ћ昻#}֭;7lٲeREVE8Fee%A@{{;DQDIIE8w4 A@vv6FFF`0Nɜ$x m6|>|>rمD]L&GyZ[[K\G2Lp8ʕ+5΁+V\9Y χ<$׍}khoo(ZmDhN>T!i>l6̙h柢(XjN8IF,X>{q۷FCCa2Li4W_}uUl2)IDҥK< sA(ʌ&Kyv  v!"z=,˘~5kp8:λヒ-3<?͙32zc_(B___J<Ix2Rvh*t '" x`ٰb P/j022,@UUX,Fe|uZ7nܨq}0ػw/~`0 =\.FFFpYs=d*zd4Aȑ#˲Oikk1  pn#77%y-:;;q)=zjEiii _ |.L(VXAL&|Xf >Cq<ՊJJJwwqߪ*p{ss3L&] 8TUG}TJA';;ǹs璮b("Յ^,Yvє`\`dd?8YN8sAaa!aٳoΝ{Q-d!Ir^T -ܢf2p-zjŗ|/ŋ~mc(h? 8 rAkMӠ( Z6%$ 1 ܹs/Vr o6n'z,(?ڵk+|AC&v׿nlݺU=w{Ӿ0"ollɓ'3gN̘,#`xx8np1_7mڴ[IgJUU\.l޼Yr{>i6 P555$  '3ظŻ{Vt-9LD //|:}LۍA{!gAF E2 (**[I0x3vCQngde˖_')).6[oHŮ]&69DX,s/((;3Z$c߾})9E0|~áC"(2cA}lbMYtPp,l6ciߌyl߾]mسgu m|y{ynǎWlx }z=zz<$9~c' 03n0paDII f=i.}}}`D"裏 ICSիW$I:tEjje "01cjIiAX,(be),,T !P>%M04 T*xGZZhF$'½{xn馉E233 ^gn2 IrINNl I lYMMM- ߏ#G  " =f߾}`F̓NKzIp`+Wqp8z(?# !//jǃ;veYHӉl9s)`)(AS_V  L$a@Cd4 }<Ѩ3AvGGG{ʂ`֭jth4izʐQFЀ^]6q&A`Y$Il6CӁ88ݎp8 aX@Q.ɠF ̬,(XWxfcii(b1b1x^K 憆/Θ1j}}}1?%IRba222IԴ2 ޻p8n[9]? tvvԩS8.mȤQp85qfkT YXXi `5Z}]0wرb!Ξ=+$y%hkkpаqh!I^by܂FR$ by($ hT9$Mφ6klO6MHA}n3++X,dwww>[&IҖN>I{zZp,c+IF#ӳxwz/``攲x{!`6gb2{jkkcgbA<AI~+VYYYlJp|(,,ĴiPUU˗4ΤA0Zs^$D"AH0'ƿ֋Ǐ_U^^NJ'"^DC?g~pu,FZ2Eq{CCúӧDrb4M2Y="==A󡹹 JXij{E),qҥK1BfΜ`0cǎ$Ib'o3<0 Ep8R­>1Qo6L͆`0H\wg @zz:H4 {eR猌 2==~DQ4+Aنq :o"IgC$AqIE1_sR)lN(EQ˲p*G{{{AQѨ$fYg.+)x*s7YsR)0 Sكa W8A'Jn(!)---BA6ba2Jnw2]KAi4Ӟa E >MYYY@uuQ8svww#777=iNE|1-TWVw{(Ah4 χ@ P(H$h4 FD vx[VH|.y/^cǎaY$I~|>,Y$F|>HLx* Ph-dff$I% /~@`pX1Aoo/0ZZZ>OE͆k1Zmf" ۱xgIlC_$Ga$ ۍ IǺYRRtpX,AM9K   $V2]Vzr|EJǃN˿ FV8Qcx^TVV&&B!l6|>޽ݨ0kNSɵdJ ü7!\:WOO:;;;TTTl;z( ڤ'l˲0Lɓ'q'mmm( yH p|„9˵,BVCR) fDpp$ĉX`"A`0({t;v ӧO(Qy$"HRkFAQTp۷0L %i٬87=[PP@&rF4Mz cAHdt8ȵ 0?g&bAVK㓋i& $PVVF,d2Ir.\ff&rrr(r8{޼y16„)\?&}2" ?GYYBRO?tX Ѕ('%I *++J˲0ͰlO?0(R¸fI6%Q,磢ͩ1 k.\s5#?hZ c׮]t?WTTdԵ^Jtb IFFٔbaAC~~:?UaCf͚5bźVEqqΫ{fjm$t:(|yJ AFGFd)Q_k̔ Qى̛7oؾ-r=Պf={vsn 0Kf͚8ӧqԩ1Az ;96L&{#xP 3 v8LIcn}hFQQ`ڵW~ [:;;qtw*ݍ3g +U*Մ Axj- ,MoDV$IzIII:R1!Hu [j54WcYfHR5b,Y,p5\N6* ӜG3$H0j$I7;&08r䈲'ZCn$IqCn^m޸nEid 2ezz0RFQt]LyyyoΝ;Ir( ZvLF%(E!RJ g0+?Rկ~ܠxM88\GIV`08.k!>4tb듺 xTR-+--eQa "|理p-¢Evg _@AA(Š+z?ğFp k0'ˤIEfYV:b3P(" 8)/hΧ(ŋcEH n\a&s=Js/yIP(--ECCW0 hiiA<. !$IR^ۍbLqoEQ=H%IÖX,XMMx>@EQwP7t=g4 :F$Ir4uuuk׮Uzܼ;v5c޼y8sLBrxWȤ1wqqqcTWWG^?(r655} Iպ[nahK!8,C8% @^~!VEmv) C.FTTT@@iBq8S^/<L>̙3g\tvvH|zĉ(777/ojjjt8O6o_ja֬Yhhh@cc6^jzT dT~~Vb\.g͏$`()E{2a 4@\HS5, ЀÇٳG, Áxs>쳫zOGQVZBA*̓r[ﮮ.~bq}nۖ9l>/((Xb`L(dg(jҖ wY?`3KNwߍl< pDP[[6+d~rpiLAA0ׄD[[n7xW`fd2N3i.~PPP&IҞ첲2-% [Q`,܄NE>|/z}YA`ŊG^_ Ʉ3f(e,C8F8F$FNlZF0q+{֢~> IғYYY9%%%L*~YQȾ]<Rgh4b̙ Su]tuuMxK A rJtvvO4M`0ĥF@vv64 ҠjQ~ +AGccIO%%%X,vOqq13*ls4ޱ z{{f͚qe NJWdfCccc1Oχz<'N(rr\U)SrJV 㐝0]} Νrc9T\'AEv$I=AhqF?s8 cIHAo[M11Y o>x^A.NCEzL6 ʦ̙(,,ɓ'ى.%Ö>===O>g}ٌիWgvU/NBYYZ-|an )EQ Iuuu)Ɲ˗$y?&KЀm&% @᚝9s&C't VYYYJfHzz:`ZcЖ^WۯFA62itf< 0o>l&'t${=W_([\\8n(U4Mߑ[n CB,&eY Yz=rsse˖?IC>(Jô> 9';둟RJ&֩)V=c׾g}ǎEQIN\r-[X $IJA+C /N>=pBhhh'xcgΜAqqFeհX,8}4:;;Sc:t($#=*PMM |A> =~ȑٍO,^|ǘP(T9D" Gc@ף<rzǃg*CDQeݍ;vkJR0غuk>˸FMMSeee{_oھ} Ϫ+--|TTTT EQ8Xo%Iqq)֓Ō3}v?Gee%JKK1츾>}xԄݻwcܹ0q# ZVYb%I|nI5u$s-[l?9sfV|ƍ^{5y$ӡN$IH$9!E Ǜo,f j_~>`W5Y]]vލ뮻6m԰EQ0(..fQW\Δ)gϞ`Э.'ZNhFhhh@OO|>8˲J I6n8Wk^~H$yK0 `0}8x /_^kj5>3Ƅ$z㎄:ˍN_Zb|B!޽/h4*4r3^0 y eeeaѢEG$J^`P2cXlوTݻwc II_fyڵ wygBN(=wuV QY$ɸCcӦMCqNł={*^cڴiFEEl$!aPYY~83JbZ*^tvv&4%b>KIǂfRrXl_" l6ٳ'G޽zR]&W)?Gnn`3{Ah4&*IfIճ,+3jN$'&Ho]a CNNf3hFOO>c477 ӧOGcc#ybB,VC .Ė-[0cƌDEq\ʶd0L݉V8N\.JZ1(U$ťX<?~oqqAD"tsP; //gΜᅬP(:z>o&8K9fxyOXiV3FI6Fr;DQi&MIXr帨<\i1q>֎?~Q)G•FM9RB.[L).*˙b}>5\mӦM 7)Eń*Dd1g#JJJW/2&A[[~?  .IRT/a̙3J;oqwv\tB[<_ :я~\bt^~wUUUd]],?Z^^>{i$^lYΨT*m۶NڭMVh4@EX,,;!1dR^xG~H⋚G|'=aÆOذa!IsΗD" M(--E4Ş={E2.] PSS$aX`6V]HIBN>H$H$7,BѠ2;N㸲Jӝ+={6{=e_oNE̚5زeKٳӎ=:|r_eىRl6?5 -- Xr%>cAbqQ\HI8n v(*_#  ؿ?.]:naO*ihSSSS?k֬fee'G@\``WW4}t8_z@QB,>#u(($;9@8Ʈ]@4:::~zܹ@7nĴifm۶a޽PT( o} v[̤.wߐ w}w?E,ײ0~|Μ95k֨b}:tt^#I~OZ-~?z{{{ndO?}}~~>[XX&A/Ѩac˖-o&&b7PYY9)*  jP2SJKK$w>hnnF00=LI+I btp8 !Rs@ĸ.DQ|_j=cgffR*q|>SNٰaC.Y(Hى'6@]]w=裫_ufǎxw8$ ֮]|TKZZ---Oj*~;aUP\'icyyyxǠRzA֭[rlݺ|r|gg' Ɲ"Z-ϟO߿F 9rڙ3guرW{/iڶd8f-vanohhUVV.曇 PUUŴ-IU ,SDJׇӧO wFZZsǎqyEEE7o޸w] *8Fkq3s>8p # ~uq0^/(r*@eZ҈FqOd$p~ 8~8>4 Á\l6%3p(!??$I*t?Ɣh4|ohh#49akOvv6f̘qw70 nGDQ_sV`˖-X,tBCTKKKR<u̙rz7={w<>h4b/--dffy9'''d\SSH|f\mj@EE ݎ (I<~?qz=HĴiPXX8l,zA&e!(:@cb * 4MbL8.''0DC61"M#NC /PTgX& ~9HgݼIg8 S8ٌtlٲ傥~e׿ú$P(СClRԭX >׿={O\.Ν{Q}0Ұ{nT*X,L&zh4,lJfDjh҉X GnNGu.zdgg㥗^J'adddzUUU6455} ywf3v܉IqAX X`A򒎂ܹs۽^=^H$IhooZVWW'߬ $I™3g[o:$IpVW ].6dapvhg[ZZi)ឞ׫:::@QTD"'7M4M+Tiu"$IfaLΝ;/XUFF֯_.Ec)!|@<NL .*.k)L>f?kIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9214768 pychess-1.0.5/pieces/alfonso/0000755000175100001770000000000014614030425015510 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/bb.svg0000644000175100001770000001243614614030313016616 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/bk.svg0000644000175100001770000001417114614030313016625 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/bn.svg0000644000175100001770000001510214614030313016623 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/bp.svg0000644000175100001770000001173214614030313016632 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/bq.svg0000644000175100001770000001371714614030313016640 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/br.svg0000644000175100001770000001235314614030313016634 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wb.svg0000644000175100001770000001013114614030313016631 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wk.svg0000644000175100001770000001156414614030313016655 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wn.svg0000644000175100001770000001275514614030313016663 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wp.svg0000644000175100001770000000773314614030313016665 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wq.svg0000644000175100001770000001052614614030313016660 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alfonso/wr.svg0000644000175100001770000001165414614030313016664 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9214768 pychess-1.0.5/pieces/alila/0000755000175100001770000000000014614030425015131 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/bb.svg0000644000175100001770000001720314614030313016234 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/bk.svg0000644000175100001770000005377214614030313016260 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/bn.svg0000644000175100001770000003013014614030313016242 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/bp.svg0000644000175100001770000001466614614030313016264 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/bq.svg0000644000175100001770000003465314614030313016263 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/br.svg0000644000175100001770000004114114614030313016252 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wb.svg0000644000175100001770000002170014614030313016256 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wk.svg0000644000175100001770000002664314614030313016302 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wn.svg0000644000175100001770000002570014614030313016276 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wp.svg0000644000175100001770000002005414614030313016275 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wq.svg0000644000175100001770000004341314614030313016302 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alila/wr.svg0000644000175100001770000003003614614030313016300 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9214768 pychess-1.0.5/pieces/alpha/0000755000175100001770000000000014614030425015134 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/bb.svg0000644000175100001770000000741714614030313016245 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/bk.svg0000644000175100001770000002015314614030313016246 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/bn.svg0000644000175100001770000000763114614030313016257 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/bp.svg0000644000175100001770000000076414614030313016261 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/bq.svg0000644000175100001770000001216514614030313016260 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/br.svg0000644000175100001770000000521214614030313016254 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wb.svg0000644000175100001770000001377014614030313016271 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wk.svg0000644000175100001770000001456614614030313016306 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wn.svg0000644000175100001770000001104514614030313016276 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wp.svg0000644000175100001770000001122014614030313016273 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wq.svg0000644000175100001770000001613014614030313016301 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/alpha/wr.svg0000644000175100001770000000750714614030313016312 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9254768 pychess-1.0.5/pieces/atopdown/0000755000175100001770000000000014614030425015702 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/bb.svg0000644000175100001770000001150014614030313016777 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/bk.svg0000644000175100001770000001150214614030313017012 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/bn.svg0000644000175100001770000001417514614030313017026 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/bp.svg0000644000175100001770000000660414614030313017026 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/bq.svg0000644000175100001770000004255214614030313017031 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/br.svg0000644000175100001770000001307114614030313017024 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wb.svg0000644000175100001770000001147614614030313017040 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wk.svg0000644000175100001770000001150314614030313017040 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wn.svg0000644000175100001770000001417614614030313017054 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wp.svg0000644000175100001770000000663214614030313017054 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wq.svg0000644000175100001770000004255314614030313017057 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/atopdown/wr.svg0000644000175100001770000001307214614030313017052 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9254768 pychess-1.0.5/pieces/california/0000755000175100001770000000000014614030425016156 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/bb.svg0000644000175100001770000001171514614030313017263 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/bk.svg0000644000175100001770000003347314614030313017301 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/bn.svg0000644000175100001770000001436014614030313017276 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/bp.svg0000644000175100001770000000730414614030313017300 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/bq.svg0000644000175100001770000002102114614030313017271 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/br.svg0000644000175100001770000000677714614030313017317 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/license.md0000644000175100001770000000035514614030313020121 0ustar00runnerdockerCalifornia by [Jerry S.](https://sites.google.com/view/jerrychess/home) licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wb.svg0000644000175100001770000001165114614030313017307 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wk.svg0000644000175100001770000003332214614030313017317 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wn.svg0000644000175100001770000001431414614030313017322 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wp.svg0000644000175100001770000000726214614030313017330 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wq.svg0000644000175100001770000002076114614030313017330 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/california/wr.svg0000644000175100001770000000675514614030313017340 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9294767 pychess-1.0.5/pieces/cardinal/0000755000175100001770000000000014614030425015624 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/bb.svg0000644000175100001770000000505414614030313016730 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/bk.svg0000644000175100001770000000434414614030313016742 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/bn.svg0000644000175100001770000000554014614030313016744 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/bp.svg0000644000175100001770000000406114614030313016743 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/bq.svg0000644000175100001770000000604614614030313016751 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/br.svg0000644000175100001770000000531014614030313016743 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/license.md0000644000175100001770000000031114614030313017557 0ustar00runnerdockerCardinal by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wb.svg0000644000175100001770000000505214614030313016753 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wk.svg0000644000175100001770000000433114614030313016763 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wn.svg0000644000175100001770000000551414614030313016772 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wp.svg0000644000175100001770000000423714614030313016775 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wq.svg0000644000175100001770000000603114614030313016770 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cardinal/wr.svg0000644000175100001770000000414614614030313016776 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9294767 pychess-1.0.5/pieces/cburnett/0000755000175100001770000000000014614030425015675 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/bb.svg0000644000175100001770000000523414614030313017001 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/bk.svg0000644000175100001770000000555514614030313017020 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/bn.svg0000644000175100001770000000442514614030313017016 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/bp.svg0000644000175100001770000000177514614030313017025 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/bq.svg0000644000175100001770000000644214614030313017022 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/br.svg0000644000175100001770000000630214614030313017016 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/license.txt0000644000175100001770000000017214614030313020054 0ustar00runnerdockerhttp://en.wikipedia.org/wiki/User:Cburnett/GFDL_images#Chess http://en.wikipedia.org/wiki/GNU_Free_Documentation_License ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wb.svg0000644000175100001770000000531714614030313017030 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wk.svg0000644000175100001770000000306014614030313017032 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wn.svg0000644000175100001770000000422114614030313017035 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wp.svg0000644000175100001770000000177714614030313017054 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wq.svg0000644000175100001770000000666714614030313017060 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/cburnett/wr.svg0000644000175100001770000000443014614030313017043 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9294767 pychess-1.0.5/pieces/celtic/0000755000175100001770000000000014614030425015312 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/celtic/celtic.svg0000644000175100001770000024105514614030313017301 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/celtic/license.txt0000644000175100001770000000006114614030313017466 0ustar00runnerdockerhttp://poisson.phc.unipi.it/~monge/chess_art.php ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9294767 pychess-1.0.5/pieces/chess7/0000755000175100001770000000000014614030425015243 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/bb.svg0000644000175100001770000001011514614030313016341 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/bk.svg0000644000175100001770000001263214614030313016360 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/bn.svg0000644000175100001770000001075514614030313016367 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/bp.svg0000644000175100001770000000201214614030313016354 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/bq.svg0000644000175100001770000000611214614030313016362 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/br.svg0000644000175100001770000000143214614030313016363 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/license.md0000644000175100001770000000023014614030313017176 0ustar00runnerdockerChess7 by [Style-7](http://www.styleseven.com/) licensed as "freeware". Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wb.svg0000644000175100001770000001005214614030313016366 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wk.svg0000644000175100001770000001021414614030313016377 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wn.svg0000644000175100001770000001172714614030313016414 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wp.svg0000644000175100001770000000426614614030313016416 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wq.svg0000644000175100001770000001066214614030313016414 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chess7/wr.svg0000644000175100001770000000336214614030313016414 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9334767 pychess-1.0.5/pieces/chessicons/0000755000175100001770000000000014614030425016210 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/bb.svg0000644000175100001770000001652214614030313017316 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/bk.svg0000644000175100001770000001753514614030313017334 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/bn.svg0000644000175100001770000002530714614030313017333 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/bp.svg0000644000175100001770000001506614614030313017336 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/bq.svg0000644000175100001770000002175614614030313017342 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/br.svg0000644000175100001770000002612214614030313017333 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/license.txt0000644000175100001770000000006214614030313020365 0ustar00runnerdockerPermission of author http://www.virtualpieces.net/././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wb.svg0000644000175100001770000002424014614030313017337 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wk.svg0000644000175100001770000002643114614030313017354 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wn.svg0000644000175100001770000003524114614030313017356 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wp.svg0000644000175100001770000002165014614030313017357 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wq.svg0000644000175100001770000003103314614030313017354 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessicons/wr.svg0000644000175100001770000002621214614030313017360 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9334767 pychess-1.0.5/pieces/chessmonk/0000755000175100001770000000000014614030425016041 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/bb.svg0000644000175100001770000002356614614030313017155 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/bk.svg0000644000175100001770000002666114614030313017165 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/bn.svg0000644000175100001770000002524714614030313017167 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/bp.svg0000644000175100001770000001332614614030313017164 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/bq.svg0000644000175100001770000003563214614030313017171 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/br.svg0000644000175100001770000002327514614030313017172 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wb.svg0000644000175100001770000003101314614030313017164 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wk.svg0000644000175100001770000003064414614030313017206 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wn.svg0000644000175100001770000002760414614030313017213 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wp.svg0000644000175100001770000002070614614030313017211 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wq.svg0000644000175100001770000005212114614030313017206 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessmonk/wr.svg0000644000175100001770000002557414614030313017223 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9374766 pychess-1.0.5/pieces/chessnut/0000755000175100001770000000000014614030425015703 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/bb.svg0000644000175100001770000000702714614030313017011 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/bk.svg0000644000175100001770000000456214614030313017023 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/bn.svg0000644000175100001770000000165614614030313017027 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/bp.svg0000644000175100001770000000137614614030313017030 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/bq.svg0000644000175100001770000001217014614030313017023 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/br.svg0000644000175100001770000000406414614030313017027 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/license.md0000644000175100001770000000035714614030313017650 0ustar00runnerdockerChessnut by [Alexis Luengas](https://github.com/LexLuengas) licensed under [Apache 2.0](https://github.com/LexLuengas/chessnut-pieces/blob/master/LICENSE.txt) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wb.svg0000644000175100001770000000737414614030313017043 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wk.svg0000644000175100001770000000750514614030313017050 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wn.svg0000644000175100001770000000164314614030313017050 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wp.svg0000644000175100001770000000121314614030313017043 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wq.svg0000644000175100001770000000535214614030313017054 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/chessnut/wr.svg0000644000175100001770000000435014614030313017052 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9374766 pychess-1.0.5/pieces/companion/0000755000175100001770000000000014614030425016032 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/bb.svg0000644000175100001770000001507714614030313017144 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/bk.svg0000644000175100001770000002407714614030313017155 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/bn.svg0000644000175100001770000001113514614030313017147 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/bp.svg0000644000175100001770000000456114614030313017156 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/bq.svg0000644000175100001770000001513614614030313017157 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/br.svg0000644000175100001770000000712114614030313017153 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/license.md0000644000175100001770000000026614614030313017776 0ustar00runnerdockerCompanion by David L. Brown licensed under ["freeware"](http://www.enpassant.dk/chess/fonteng.htm#GC) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wb.svg0000644000175100001770000002144014614030313017160 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wk.svg0000644000175100001770000001351114614030313017171 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wn.svg0000644000175100001770000000662714614030313017206 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wp.svg0000644000175100001770000000631614614030313017203 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wq.svg0000644000175100001770000001444114614030313017202 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/companion/wr.svg0000644000175100001770000000373414614030313017206 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9374766 pychess-1.0.5/pieces/dubrovny/0000755000175100001770000000000014614030425015717 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/bb.svg0000644000175100001770000000571214614030313017024 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/bk.svg0000644000175100001770000001046214614030313017033 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/bn.svg0000644000175100001770000001022014614030313017026 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/bp.svg0000644000175100001770000000435614614030313017045 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/bq.svg0000644000175100001770000001141614614030313017041 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/br.svg0000644000175100001770000000564314614030313017047 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/license.md0000644000175100001770000000031114614030313017652 0ustar00runnerdockerDubrovny by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wb.svg0000644000175100001770000000576614614030313017062 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wk.svg0000644000175100001770000001045714614030313017064 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wn.svg0000644000175100001770000001023514614030313017061 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wp.svg0000644000175100001770000000440614614030313017066 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wq.svg0000644000175100001770000001137314614030313017070 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/dubrovny/wr.svg0000644000175100001770000000564314614030313017074 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9374766 pychess-1.0.5/pieces/eyes/0000755000175100001770000000000014614030425015014 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/eyes/eyes.svg0000644000175100001770000034350714614030313016512 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9414768 pychess-1.0.5/pieces/fantasy/0000755000175100001770000000000014614030425015514 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fantasy/fantasy.svg0000644000175100001770000067107514614030313017716 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9414768 pychess-1.0.5/pieces/fantasy_alt/0000755000175100001770000000000014614030425016354 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fantasy_alt/fantasy_alt.svg0000644000175100001770000053713514614030313021414 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9414768 pychess-1.0.5/pieces/freak/0000755000175100001770000000000014614030425015137 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freak/freak.svg0000644000175100001770000072475214614030313016765 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9414768 pychess-1.0.5/pieces/freestaunton/0000755000175100001770000000000014614030425016564 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/bb.svg0000644000175100001770000004027214614030313017671 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/bk.svg0000644000175100001770000004320114614030313017675 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/bn.svg0000644000175100001770000006431414614030313017710 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/bp.svg0000644000175100001770000003417014614030313017707 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/bq.svg0000644000175100001770000006473414614030313017721 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/br.svg0000644000175100001770000003271214614030313017711 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/license.txt0000644000175100001770000000026414614030313020745 0ustar00runnerdockerhttp://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=6786 http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=8336 http://www.benvanvlierden.nl/Download/FSOpaque.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wb.svg0000644000175100001770000004110114614030313017706 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wk.svg0000644000175100001770000004456514614030313017740 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wn.svg0000644000175100001770000006254314614030313017737 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wp.svg0000644000175100001770000003705714614030313017743 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wq.svg0000644000175100001770000006505214614030313017740 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/freestaunton/wr.svg0000644000175100001770000003040114614030313017727 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9454768 pychess-1.0.5/pieces/fresca/0000755000175100001770000000000014614030425015312 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/bb.svg0000644000175100001770000001041714614030313016415 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/bk.svg0000644000175100001770000000464514614030313016434 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/bn.svg0000644000175100001770000000600014614030313016422 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/bp.svg0000644000175100001770000000315014614030313016427 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/bq.svg0000644000175100001770000000516214614030313016435 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/br.svg0000644000175100001770000000406014614030313016432 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/license.md0000644000175100001770000000030714614030313017252 0ustar00runnerdockerFresca by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wb.svg0000644000175100001770000001041714614030313016442 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wk.svg0000644000175100001770000000446414614030313016460 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wn.svg0000644000175100001770000000606714614030313016464 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wp.svg0000644000175100001770000000314614614030313016461 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wq.svg0000644000175100001770000000516314614030313016463 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/fresca/wr.svg0000644000175100001770000000300514614030313016455 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9454768 pychess-1.0.5/pieces/gioco/0000755000175100001770000000000014614030425015147 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/bb.svg0000644000175100001770000000524014614030313016250 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/bk.svg0000644000175100001770000000553614614030313016271 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/bn.svg0000644000175100001770000000467414614030313016276 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/bp.svg0000644000175100001770000000504714614030313016273 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/bq.svg0000644000175100001770000000615514614030313016275 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/br.svg0000644000175100001770000000606614614030313016277 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/license.md0000644000175100001770000000030614614030313017106 0ustar00runnerdockerGioco by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wb.svg0000644000175100001770000000527214614030313016302 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wk.svg0000644000175100001770000000554014614030313016311 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wn.svg0000644000175100001770000000465214614030313016317 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wp.svg0000644000175100001770000000501014614030313016306 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wq.svg0000644000175100001770000000611314614030313016314 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/gioco/wr.svg0000644000175100001770000000603614614030313016321 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9454768 pychess-1.0.5/pieces/governor/0000755000175100001770000000000014614030425015710 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/bb.svg0000644000175100001770000000745314614030313017021 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/bk.svg0000644000175100001770000001220214614030313017016 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/bn.svg0000644000175100001770000001214714614030313017031 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/bp.svg0000644000175100001770000000725314614030313017035 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/bq.svg0000644000175100001770000002075014614030313017033 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/br.svg0000644000175100001770000001054114614030313017031 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/license.md0000644000175100001770000000120514614030313017646 0ustar00runnerdockerGovernor copyright (c) 2012-2021 the lila authors. Lila is free software; you can redistribute and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Lila 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 Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.txt) for more details. Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wb.svg0000644000175100001770000000737514614030313017051 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wk.svg0000644000175100001770000001212614614030313017050 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wn.svg0000644000175100001770000001231414614030313017052 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wp.svg0000644000175100001770000000715614614030313017064 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wq.svg0000644000175100001770000002054714614030313017064 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/governor/wr.svg0000644000175100001770000001033014614030313017052 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9494767 pychess-1.0.5/pieces/horsey/0000755000175100001770000000000014614030425015360 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/bb.svg0000644000175100001770000001336414614030313016467 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/bk.svg0000644000175100001770000002252714614030313016501 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/bn.svg0000644000175100001770000006657014614030313016512 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/bp.svg0000644000175100001770000000673014614030313016504 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/bq.svg0000644000175100001770000001411714614030313016503 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/br.svg0000644000175100001770000001044314614030313016502 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/license.md0000644000175100001770000000032514614030313017320 0ustar00runnerdockerHorsey by github users "cham" and "michael1241" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wb.svg0000644000175100001770000001360014614030313016505 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wk.svg0000644000175100001770000002252714614030313016526 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wn.svg0000644000175100001770000006657014614030313016537 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wp.svg0000644000175100001770000000673014614030313016531 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wq.svg0000644000175100001770000001411714614030313016530 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/horsey/wr.svg0000644000175100001770000001040314614030313016523 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9494767 pychess-1.0.5/pieces/icpieces/0000755000175100001770000000000014614030425015633 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/bb.svg0000644000175100001770000000416714614030313016743 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/bk.svg0000644000175100001770000000555514614030313016756 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/bn.svg0000644000175100001770000000670514614030313016757 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/bp.svg0000644000175100001770000000334314614030313016754 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/bq.svg0000644000175100001770000001051514614030313016754 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/br.svg0000644000175100001770000000352014614030313016753 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/license.md0000644000175100001770000000031114614030313017566 0ustar00runnerdockerIcpieces by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wb.svg0000644000175100001770000000365614614030313016772 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wk.svg0000644000175100001770000000636514614030313017003 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wn.svg0000644000175100001770000000632314614030313017000 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wp.svg0000644000175100001770000000335214614030313017001 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wq.svg0000644000175100001770000000750314614030313017004 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/icpieces/wr.svg0000644000175100001770000000365314614030313017007 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9534767 pychess-1.0.5/pieces/kilfiger/0000755000175100001770000000000014614030425015643 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/bb.svg0000644000175100001770000000700114614030313016741 0ustar00runnerdocker Black Bishop image/svg+xml Black Bishop 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/bk.svg0000644000175100001770000000755114614030313016764 0ustar00runnerdocker Black King image/svg+xml Black King http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip James Kilfinger+alfons z! 6.1.2013 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/bn.svg0000644000175100001770000001005714614030313016762 0ustar00runnerdocker Black Knight image/svg+xml Black Knight http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip 6.1.2013 James Kilfinger+alfons z! ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/bp.svg0000644000175100001770000000652114614030313016765 0ustar00runnerdocker Black Pawn image/svg+xml Black Pawn 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/bq.svg0000644000175100001770000001030614614030313016762 0ustar00runnerdocker Black Queenie image/svg+xml Black Queenie 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/br.svg0000644000175100001770000000725114614030313016770 0ustar00runnerdocker Black Rook image/svg+xml Black Rook 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wb.svg0000644000175100001770000001567214614030313017003 0ustar00runnerdocker White Bishop image/svg+xml White Bishop 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wk.svg0000644000175100001770000002154614614030313017011 0ustar00runnerdocker White King image/svg+xml White King 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wn.svg0000644000175100001770000002143314614030313017007 0ustar00runnerdocker White Knight image/svg+xml White Knight 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wp.svg0000644000175100001770000001501514614030313017010 0ustar00runnerdocker White Pawn image/svg+xml White Pawn 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wq.svg0000644000175100001770000002540114614030313017011 0ustar00runnerdocker White Queenie image/svg+xml White Queenie 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kilfiger/wr.svg0000644000175100001770000001742114614030313017015 0ustar00runnerdocker White Rook image/svg+xml White Rook 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9534767 pychess-1.0.5/pieces/kosal/0000755000175100001770000000000014614030425015160 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/bb.svg0000644000175100001770000000247114614030313016264 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/bk.svg0000644000175100001770000000256714614030313016303 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/bn.svg0000644000175100001770000000213314614030313016273 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/bp.svg0000644000175100001770000000470014614030313016277 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/bq.svg0000644000175100001770000000372514614030313016306 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/br.svg0000644000175100001770000000220414614030313016276 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/license.txt0000644000175100001770000000006514614030313017340 0ustar00runnerdockerhttps://creativecommons.org/licenses/by/4.0/legalcode././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wb.svg0000644000175100001770000000301114614030313016300 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wk.svg0000644000175100001770000000450114614030313016316 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wn.svg0000644000175100001770000000334514614030313016326 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wp.svg0000644000175100001770000000331514614030313016325 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wq.svg0000644000175100001770000001325714614030313016334 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/kosal/wr.svg0000644000175100001770000000220414614030313016323 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9534767 pychess-1.0.5/pieces/leipzig/0000755000175100001770000000000014614030425015512 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/bb.svg0000644000175100001770000002177514614030313016626 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/bk.svg0000644000175100001770000003320314614030313016624 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/bn.svg0000644000175100001770000002027714614030313016636 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/bp.svg0000644000175100001770000000253314614030313016633 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/bq.svg0000644000175100001770000002067114614030313016637 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/br.svg0000644000175100001770000003043614614030313016640 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wb.svg0000644000175100001770000003070714614030313016646 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wk.svg0000644000175100001770000003454414614030313016662 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wn.svg0000644000175100001770000002225314614030313016657 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wp.svg0000644000175100001770000001175414614030313016665 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wq.svg0000644000175100001770000003326014614030313016662 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/leipzig/wr.svg0000644000175100001770000003166314614030313016670 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9574766 pychess-1.0.5/pieces/letter/0000755000175100001770000000000014614030425015346 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/bb.svg0000644000175100001770000000217014614030313016446 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/bk.svg0000644000175100001770000000166414614030313016466 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/bn.svg0000644000175100001770000000206114614030313016461 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/bp.svg0000644000175100001770000000031514614030313016463 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/bq.svg0000644000175100001770000000244514614030313016472 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/br.svg0000644000175100001770000000246214614030313016472 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/license.md0000644000175100001770000000031214614030313017302 0ustar00runnerdockerLetter by [usolando](https://lichess.org/@/usolando) licensed under [AGPLv3+](https://www.gnu.org/licenses/agpl-3.0.txt). Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wb.svg0000644000175100001770000000220614614030313016473 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wk.svg0000644000175100001770000000170214614030313016504 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wn.svg0000644000175100001770000000207714614030313016515 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wp.svg0000644000175100001770000000033014614030313016505 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wq.svg0000644000175100001770000000246314614030313016517 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/letter/wr.svg0000644000175100001770000000250014614030313016510 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9574766 pychess-1.0.5/pieces/libra/0000755000175100001770000000000014614030425015140 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/bb.svg0000644000175100001770000001161114614030313016240 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/bk.svg0000644000175100001770000001351714614030313016260 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/bn.svg0000644000175100001770000001173514614030313016263 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/bp.svg0000644000175100001770000001133414614030313016260 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/bq.svg0000644000175100001770000001510314614030313016257 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/br.svg0000644000175100001770000001173314614030313016265 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/license.md0000644000175100001770000000030614614030313017077 0ustar00runnerdockerLibra by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wb.svg0000644000175100001770000001167514614030313016277 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wk.svg0000644000175100001770000001361614614030313016305 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wn.svg0000644000175100001770000001166714614030313016314 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wp.svg0000644000175100001770000001126214614030313016305 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wq.svg0000644000175100001770000001475014614030313016313 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/libra/wr.svg0000644000175100001770000001157414614030313016315 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9574766 pychess-1.0.5/pieces/maestro/0000755000175100001770000000000014614030425015521 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/bb.svg0000644000175100001770000002134514614030313016626 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/bk.svg0000644000175100001770000002342014614030313016633 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/bn.svg0000644000175100001770000002537014614030313016644 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/bp.svg0000644000175100001770000001507514614030313016647 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/bq.svg0000644000175100001770000003525614614030313016653 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/br.svg0000644000175100001770000001601214614030313016641 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/license.md0000644000175100001770000000031014614030313017453 0ustar00runnerdockerMaestro by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wb.svg0000644000175100001770000002013414614030313016646 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wk.svg0000644000175100001770000002124414614030313016662 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wn.svg0000644000175100001770000002567114614030313016675 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wp.svg0000644000175100001770000001243314614030313016667 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wq.svg0000644000175100001770000003155514614030313016676 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maestro/wr.svg0000644000175100001770000001246514614030313016676 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9614766 pychess-1.0.5/pieces/magnetic/0000755000175100001770000000000014614030425015636 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/bb.svg0000644000175100001770000000556014614030313016744 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/bk.svg0000644000175100001770000001276714614030313016764 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/bn.svg0000644000175100001770000001571414614030313016762 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/bp.svg0000644000175100001770000000122214614030313016751 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/bq.svg0000644000175100001770000000742414614030313016764 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/br.svg0000644000175100001770000000601214614030313016755 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wb.svg0000644000175100001770000001021314614030313016760 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wk.svg0000644000175100001770000001407514614030313017003 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wn.svg0000644000175100001770000001610614614030313017003 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wp.svg0000644000175100001770000000715714614030313017013 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wq.svg0000644000175100001770000001334414614030313017007 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/magnetic/wr.svg0000644000175100001770000001475714614030313017021 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9614766 pychess-1.0.5/pieces/makruk/0000755000175100001770000000000014614030425015341 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/bb.svg0000644000175100001770000007405314614030313016452 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/bk.svg0000644000175100001770000007227114614030313016463 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/bn.svg0000644000175100001770000005477514614030313016477 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/bp.svg0000644000175100001770000002351214614030313016462 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/bq.svg0000644000175100001770000007417014614030313016471 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/br.svg0000644000175100001770000003120614614030313016463 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/license.txt0000644000175100001770000000016214614030313017517 0ustar00runnerdockerThe software in this directory are published under the GPL license agreement http://www.gnu.org/copyleft/gpl.html ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wb.svg0000644000175100001770000007273714614030313016506 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wk.svg0000644000175100001770000011622314614030313016504 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wn.svg0000644000175100001770000005530614614030313016513 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wp.svg0000644000175100001770000002350014614030313016504 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wq.svg0000644000175100001770000007430014614030313016511 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/makruk/wr.svg0000644000175100001770000003117414614030313016514 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9654765 pychess-1.0.5/pieces/maya/0000755000175100001770000000000014614030425014776 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/bb.svg0000644000175100001770000000752214614030313016104 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/bk.svg0000644000175100001770000001310514614030313016107 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/bn.svg0000644000175100001770000001215614614030313016117 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/bp.svg0000644000175100001770000000721414614030313016120 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/bq.svg0000644000175100001770000001541714614030313016125 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/br.svg0000644000175100001770000001020714614030313016116 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wb.svg0000644000175100001770000001201714614030313016124 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wk.svg0000644000175100001770000001340514614030313016137 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wn.svg0000644000175100001770000001423614614030313016145 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wp.svg0000644000175100001770000001070314614030313016142 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wq.svg0000644000175100001770000001572414614030313016153 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/maya/wr.svg0000644000175100001770000002117714614030313016153 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9654765 pychess-1.0.5/pieces/merida/0000755000175100001770000000000014614030425015310 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bb.svg0000644000175100001770000001553614614030313016422 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/be.svg0000644000175100001770000001712414614030313016420 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bh.svg0000644000175100001770000001173514614030313016425 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bk.svg0000644000175100001770000002055414614030313016427 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bn.svg0000644000175100001770000001517514614030313016435 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bp.svg0000644000175100001770000000577414614030313016443 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/bq.svg0000644000175100001770000001335614614030313016437 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/br.svg0000644000175100001770000000631514614030313016435 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wb.svg0000644000175100001770000002047314614030313016443 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/we.svg0000644000175100001770000001777514614030313016461 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wh.svg0000644000175100001770000001372314614030313016451 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wk.svg0000644000175100001770000001533714614030313016457 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wn.svg0000644000175100001770000001714614614030313016462 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wp.svg0000644000175100001770000001277614614030313016470 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wq.svg0000644000175100001770000001712414614030313016461 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida/wr.svg0000644000175100001770000000633214614030313016461 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9694765 pychess-1.0.5/pieces/merida_new/0000755000175100001770000000000014614030425016161 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/bb.svg0000644000175100001770000002716714614030313017276 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/bk.svg0000644000175100001770000002703214614030313017276 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/bn.svg0000644000175100001770000001756214614030313017310 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/bp.svg0000644000175100001770000001034414614030313017301 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/bq.svg0000644000175100001770000004045414614030313017307 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/br.svg0000644000175100001770000001365214614030313017310 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/license.txt0000644000175100001770000000002514614030313020335 0ustar00runnerdockerPermission of author ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wb.svg0000644000175100001770000002372714614030313017321 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wk.svg0000644000175100001770000002210414614030313017316 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wn.svg0000644000175100001770000001743614614030313017335 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wp.svg0000644000175100001770000000767114614030313017337 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wq.svg0000644000175100001770000002607114614030313017333 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/merida_new/wr.svg0000644000175100001770000001502714614030313017333 0ustar00runnerdocker image/svg+xml././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9694765 pychess-1.0.5/pieces/metaltops/0000755000175100001770000000000014614030425016057 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/bb.svg0000644000175100001770000023562314614030313017172 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/bk.svg0000644000175100001770000030662414614030313017203 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/bn.svg0000644000175100001770000025033714614030313017205 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/bp.svg0000644000175100001770000016713214614030313017207 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/bq.svg0000644000175100001770000031611214614030313017202 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/br.svg0000644000175100001770000017361514614030313017214 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/license.txt0000644000175100001770000000016214614030313020235 0ustar00runnerdockerThe software in this directory are published under the GPL license agreement http://www.gnu.org/copyleft/gpl.html ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wb.svg0000644000175100001770000023750714614030313017222 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wk.svg0000644000175100001770000031361714614030313017230 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wn.svg0000644000175100001770000025244614614030313017235 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wp.svg0000644000175100001770000017162014614030313017231 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wq.svg0000644000175100001770000032056714614030313017240 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/metaltops/wr.svg0000644000175100001770000017562114614030313017240 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9734764 pychess-1.0.5/pieces/pirat/0000755000175100001770000000000014614030425015166 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/bb.svg0000644000175100001770000000630014614030313016265 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/bk.svg0000644000175100001770000000630314614030313016301 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/bn.svg0000644000175100001770000000621714614030313016310 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/bp.svg0000644000175100001770000000516014614030313016306 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/bq.svg0000644000175100001770000000460414614030313016311 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/br.svg0000644000175100001770000000555514614030313016320 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wb.svg0000644000175100001770000000706214614030313016320 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wk.svg0000644000175100001770000001043214614030313016324 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wn.svg0000644000175100001770000000570114614030313016332 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wp.svg0000644000175100001770000000615014614030313016333 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wq.svg0000644000175100001770000000517214614030313016337 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirat/wr.svg0000644000175100001770000000565014614030313016341 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9734764 pychess-1.0.5/pieces/pirouetti/0000755000175100001770000000000014614030425016073 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/bb.svg0000644000175100001770000000171114614030313017173 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/bk.svg0000644000175100001770000000301214614030313017200 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/bn.svg0000644000175100001770000000201114614030313017201 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/bp.svg0000644000175100001770000000171014614030313017210 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/bq.svg0000644000175100001770000000205014614030313017207 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/br.svg0000644000175100001770000000134714614030313017220 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/license.md0000644000175100001770000000031714614030313020034 0ustar00runnerdockerPirouetti by [pirouetti](https://lichess.org/@/pirouetti) licensed under [AGPLv3+](https://www.gnu.org/licenses/agpl-3.0.txt). Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wb.svg0000644000175100001770000000166014614030313017223 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wk.svg0000644000175100001770000000302614614030313017232 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wn.svg0000644000175100001770000000176214614030313017242 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wp.svg0000644000175100001770000000171014614030313017235 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wq.svg0000644000175100001770000000205314614030313017237 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pirouetti/wr.svg0000644000175100001770000000134714614030313017245 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9734764 pychess-1.0.5/pieces/pixel/0000755000175100001770000000000014614030425015170 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/bb.svg0000644000175100001770000000125314614030313016271 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/bk.svg0000644000175100001770000000140614614030313016302 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/bn.svg0000644000175100001770000000142314614030313016304 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/bp.svg0000644000175100001770000000121714614030313016307 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/bq.svg0000644000175100001770000000130014614030313016301 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/br.svg0000644000175100001770000000131114614030313016304 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/license.md0000644000175100001770000000031514614030313017127 0ustar00runnerdockerPixel by [therealqtpi](https://twitter.com/therealqtpi) licensed under [AGPLv3+](https://www.gnu.org/licenses/agpl-3.0.txt). Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wb.svg0000644000175100001770000000125314614030313016316 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wk.svg0000644000175100001770000000140614614030313016327 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wn.svg0000644000175100001770000000147114614030313016334 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wp.svg0000644000175100001770000000120214614030313016326 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wq.svg0000644000175100001770000000130014614030313016326 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/pixel/wr.svg0000644000175100001770000000131114614030313016331 0ustar00runnerdocker Made with Pixels to Svg https://codepen.io/shshaw/pen/XbxvNj ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9734764 pychess-1.0.5/pieces/prmi/0000755000175100001770000000000014614030425015016 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/prmi/prmi.svg0000644000175100001770000120720214614030313016506 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9774766 pychess-1.0.5/pieces/regular/0000755000175100001770000000000014614030425015510 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/bb.svg0000644000175100001770000000460314614030313016613 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/bk.svg0000644000175100001770000000560214614030313016624 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/bn.svg0000644000175100001770000000475014614030313016632 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/bp.svg0000644000175100001770000000401014614030313016621 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/bq.svg0000644000175100001770000000456614614030313016642 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/br.svg0000644000175100001770000000431114614030313016627 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wb.svg0000644000175100001770000001075614614030313016646 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wk.svg0000644000175100001770000001130514614030313016646 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wn.svg0000644000175100001770000001145714614030313016661 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wp.svg0000644000175100001770000001120614614030313016653 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wq.svg0000644000175100001770000001363414614030313016663 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/regular/wr.svg0000644000175100001770000001066014614030313016660 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9774766 pychess-1.0.5/pieces/reillycraig/0000755000175100001770000000000014614030425016355 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/bb.svg0000644000175100001770000000205114614030313017453 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/bk.svg0000644000175100001770000000266314614030313017475 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/bn.svg0000644000175100001770000003044214614030313017474 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/bp.svg0000644000175100001770000000236314614030313017477 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/bq.svg0000644000175100001770000000447214614030313017503 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/br.svg0000644000175100001770000000153314614030313017477 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/license.md0000644000175100001770000000021414614030313020312 0ustar00runnerdockerReillycraig by [Reilly Craig](https://instagram.com/fader_) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wb.svg0000644000175100001770000000212114614030313017476 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wk.svg0000644000175100001770000000303414614030313017513 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wn.svg0000644000175100001770000003061314614030313017521 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wp.svg0000644000175100001770000000221714614030313017522 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wq.svg0000644000175100001770000000457714614030313017536 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/reillycraig/wr.svg0000644000175100001770000000156214614030313017526 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9814765 pychess-1.0.5/pieces/riohacha/0000755000175100001770000000000014614030425015625 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/bb.svg0000644000175100001770000000265614614030313016736 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/bk.svg0000644000175100001770000000324014614030313016735 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/bn.svg0000644000175100001770000000260014614030313016737 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/bp.svg0000644000175100001770000000165514614030313016752 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/bq.svg0000644000175100001770000000424014614030313016744 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/br.svg0000644000175100001770000000236214614030313016750 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wb.svg0000644000175100001770000000265614614030313016763 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wk.svg0000644000175100001770000000324014614030313016762 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wn.svg0000644000175100001770000000260014614030313016764 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wp.svg0000644000175100001770000000165514614030313016777 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wq.svg0000644000175100001770000000424014614030313016771 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/riohacha/wr.svg0000644000175100001770000000236214614030313016775 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9814765 pychess-1.0.5/pieces/shapes/0000755000175100001770000000000014614030425015332 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/bb.svg0000644000175100001770000000134314614030313016433 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/bk.svg0000644000175100001770000000125214614030313016443 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/bn.svg0000644000175100001770000000115614614030313016451 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/bp.svg0000644000175100001770000000111114614030313016442 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/bq.svg0000644000175100001770000000156414614030313016457 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/br.svg0000644000175100001770000000107514614030313016455 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/license.md0000644000175100001770000000033414614030313017272 0ustar00runnerdockerShapes by [flugsio](https://github.com/flugsio/chess_shapes) licensed under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wb.svg0000644000175100001770000000134314614030313016460 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wk.svg0000644000175100001770000000125214614030313016470 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wn.svg0000644000175100001770000000115614614030313016476 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wp.svg0000644000175100001770000000111114614030313016467 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wq.svg0000644000175100001770000000156414614030313016504 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/shapes/wr.svg0000644000175100001770000000107514614030313016502 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9814765 pychess-1.0.5/pieces/sittuyin/0000755000175100001770000000000014614030425015737 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/bb.svg0000644000175100001770000001407414614030313017045 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/bk.svg0000644000175100001770000003321314614030313017052 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/bn.svg0000644000175100001770000001411514614030313017055 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/bp.svg0000644000175100001770000002040414614030313017055 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/bq.svg0000644000175100001770000002030714614030313017060 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/br.svg0000644000175100001770000002060214614030313017057 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wb.svg0000644000175100001770000001410314614030313017063 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wk.svg0000644000175100001770000003321114614030313017075 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wn.svg0000644000175100001770000001411614614030313017103 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wp.svg0000644000175100001770000002040214614030313017100 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wq.svg0000644000175100001770000002030514614030313017103 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/sittuyin/wr.svg0000644000175100001770000002060014614030313017102 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9814765 pychess-1.0.5/pieces/skulls/0000755000175100001770000000000014614030425015364 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/skulls/skulls.svg0000644000175100001770000211227614614030313017431 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9854765 pychess-1.0.5/pieces/spatial/0000755000175100001770000000000014614030425015504 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/spatial/spatial.svg0000644000175100001770000013764314614030313017674 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9854765 pychess-1.0.5/pieces/staunty/0000755000175100001770000000000014614030425015556 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/bb.svg0000644000175100001770000000432614614030313016663 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/bk.svg0000644000175100001770000000706714614030313016701 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/bn.svg0000644000175100001770000000630414614030313016675 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/bp.svg0000644000175100001770000000417214614030313016700 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/bq.svg0000644000175100001770000001023614614030313016677 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/br.svg0000644000175100001770000000574414614030313016710 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/license.md0000644000175100001770000000031014614030313017510 0ustar00runnerdockerStaunty by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wb.svg0000644000175100001770000000426214614030313016707 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wk.svg0000644000175100001770000000700714614030313016720 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wn.svg0000644000175100001770000000623214614030313016722 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wp.svg0000644000175100001770000000412614614030313016724 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wq.svg0000644000175100001770000001011214614030313016715 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/staunty/wr.svg0000644000175100001770000000565014614030313016731 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9854765 pychess-1.0.5/pieces/tatiana/0000755000175100001770000000000014614030425015470 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/bb.svg0000644000175100001770000000532414614030313016574 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/bk.svg0000644000175100001770000000471114614030313016604 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/bn.svg0000644000175100001770000000526514614030313016614 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/bp.svg0000644000175100001770000000333714614030313016614 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/bq.svg0000644000175100001770000000623214614030313016612 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/br.svg0000644000175100001770000000342414614030313016613 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/license.md0000644000175100001770000000031014614030313017422 0ustar00runnerdockerTatiana by github user "sadsnake1" licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) Obtained from [here](https://github.com/ornicar/lila/tree/master/public/piece). ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wb.svg0000644000175100001770000000525714614030313016626 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wk.svg0000644000175100001770000000465414614030313016637 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wn.svg0000644000175100001770000000523314614030313016634 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wp.svg0000644000175100001770000000330714614030313016636 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wq.svg0000644000175100001770000000612314614030313016636 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pieces/tatiana/wr.svg0000644000175100001770000000331514614030313016637 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess0000755000175100001770000002002314614030313014174 0ustar00runnerdocker#!/usr/bin/env python3 import os import sys # Fix environment to let pychess run in place if getattr(sys, "frozen", False): this_dir = os.path.dirname(sys.executable) else: this_dir = os.path.dirname(os.path.abspath(__file__)) if ( os.path.isdir(os.path.join(this_dir, "lib/pychess")) and os.path.join(this_dir, "lib") not in sys.path ): sys.path = [os.path.join(this_dir, "lib")] + sys.path # Create splash screen try: import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk splash = Gtk.Window() splash.props.type_hint = Gdk.WindowTypeHint.SPLASHSCREEN splash.set_decorated(False) splash.set_position(Gtk.WindowPosition.CENTER) from pychess.System import prefix splash.add(Gtk.Image().new_from_file(prefix.addDataPrefix("glade/about.png"))) splash.show_all() while Gtk.events_pending(): Gtk.main_iteration() except Exception: print("Failed to create splash screen") import argparse import asyncio import gettext import locale import logging if not getattr(sys, "frozen", False): try: import faulthandler faulthandler.enable() except ImportError: pass try: import cairo cairo.version except ImportError: print("ERROR: PyChess requires python-cairo to be installed.") sys.exit(1) try: import gi except ImportError: print("ERROR: PyChess requires pygobject to be installed.") sys.exit(1) try: gi.require_version("cairo", "1.0") gi.require_version("GLib", "2.0") gi.require_version("Gdk", "3.0") gi.require_version("GdkPixbuf", "2.0") gi.require_version("GObject", "2.0") gi.require_version("Gtk", "3.0") gi.require_version("GtkSource", "3.0") gi.require_version("Pango", "1.0") gi.require_version("PangoCairo", "1.0") gi.require_version("Rsvg", "2.0") from gi.repository import GLib except ValueError as e: print("ERROR: Not all dependencies installed! You can find them in INSTALL") print(e) sys.exit(1) try: import sqlalchemy sqlalchemy.__version__ except ImportError: print("ERROR: PyChess requires sqlalchemy to be installed") sys.exit(1) try: import psutil psutil.__version__ except ImportError: print("ERROR: PyChess requires psutil to be installed") sys.exit(1) # Ensure access to data store try: import pychess from pychess.System.prefix import addDataPrefix, getDataPrefix, isInstalled except ImportError: print("ERROR: Could not import modules.") print("Please try to run pychess as stated in the INSTALL file") sys.exit(1) # Parse command line arguments try: from pychess.System.Log import log, LoggerWriter, setup_glib_logging except ImportError: pass if getattr(sys, "frozen", False): sys.stdout = LoggerWriter(logging.getLogger("STDOUT"), logging.INFO) sys.stderr = LoggerWriter(logging.getLogger("STDERR"), logging.ERROR) log_viewer = False chess_file = sys.argv[1] if len(sys.argv) > 1 else None ics_host = None ics_port = None version = f"{pychess.VERSION} ({pychess.VERSION_NAME})" description = "The PyChess chess client, version %s." % version parser = argparse.ArgumentParser(description=description) parser.add_argument("--version", action="version", version="%(prog)s" + " %s" % version) parser.add_argument( "--log-debug", action="store_true", help="change default logging level from INFO to DEBUG", ) parser.add_argument( "--no-gettext", action="store_true", help="turn off locale translations" ) parser.add_argument("--log-viewer", action="store_true", help="enable Log Viewer menu") parser.add_argument( "--purge-recent", action="store_true", help="purge recent games menu" ) parser.add_argument( "--ics-host", action="store", help="the hostname of internet chess server (default is freechess.org)", ) parser.add_argument( "--ics-port", action="store", type=int, help="the connection port of internet chess server (default is 5000)", ) parser.add_argument( "chess_file", nargs="?", metavar="chessfile", help="a chess file in PGN, EPD, FEN, or HTML (Chess Alpha 2 Diagram) format", ) parser.add_argument( "--gbulb-loop", action="store_true", help="use gbulb event loop based on GLib" ) parser.add_argument( "--no-version-check", action="store_true", help="disable online version check" ) args = parser.parse_args() log_debug = args.log_debug no_gettext = args.no_gettext log_viewer = args.log_viewer purge_recent = args.purge_recent chess_file = args.chess_file ics_host = args.ics_host ics_port = args.ics_port version_check = not args.no_version_check gbulb_loop = args.gbulb_loop if gbulb_loop: try: import gbulb gbulb.install(gtk=True) except ImportError: print("ERROR: PyChess requires gbulb to be installed.") sys.exit(1) # Set sqlite temp dir path os.environ["SQLITE_TMPDIR"] = os.path.expanduser("~") # Set up translations if no_gettext: os.environ["LANG"] = "C" locale.setlocale(locale.LC_ALL, "C") else: locale.setlocale(locale.LC_ALL, "") # http://stackoverflow.com/questions/3678174/python-gettext-doesnt-load-translations-on-windows if sys.platform.startswith("win"): if os.getenv("LANG") is None: lang, enc = locale.getdefaultlocale() os.environ["LANG"] = lang locale.setlocale(locale.LC_ALL, "") domain = "pychess" if isInstalled(): if sys.platform == "win32": locale_dir = os.path.join(os.path.dirname(getDataPrefix()), "locale") else: locale_dir = None else: locale_dir = addDataPrefix("lang") gettext.install(domain, localedir=locale_dir, names=("ngettext",)) # http://stackoverflow.com/questions/10094335/how-to-bind-a-text-domain-to-a-local-folder-for-gettext-under-gtk3 if sys.platform == "win32": from ctypes import cdll libintl = cdll.LoadLibrary("libintl-8") libintl.bindtextdomain(domain, locale_dir) libintl.bind_textdomain_codeset(domain, "UTF-8") elif sys.platform == "darwin": import ctypes try: libintl = ctypes.cdll.LoadLibrary("libintl.dylib") except OSError: # This is default install location if using brew to install dependencies libintl = ctypes.cdll.LoadLibrary("/usr/local/lib/libintl.dylib") libintl.bindtextdomain(domain, locale_dir) else: locale.bindtextdomain(domain, locale_dir) try: from pychess.System.LogEmitter import GLogHandler, logemitter from pychess.System.prefix import getUserDataPrefix, addUserDataPrefix from pychess.System import conf from pychess.Main import PyChess except ImportError: raise pass conf.no_gettext = no_gettext # Start logging if log_debug: setup_glib_logging() if log_viewer: log.logger.addHandler(GLogHandler(logemitter)) log.logger.setLevel(logging.DEBUG if log_debug is True else logging.INFO) oldlogs = [log for log in os.listdir(getUserDataPrefix()) if log.endswith(".log")] conf.set("max_log_files", conf.get("max_log_files")) oldlogs.sort() lel_oldlogs = len(oldlogs) while lel_oldlogs > conf.get("max_log_files"): try: os.remove(addUserDataPrefix(oldlogs[0])) del oldlogs[0] except OSError: pass lel_oldlogs -= 1 async def start(gtk_app): # give chence to the splash screen to appear await asyncio.sleep(0) gtk_app.register() gtk_app.activate() def glib_update(main_context, loop): while main_context.pending(): main_context.iteration(False) loop.call_later(0.01, glib_update, main_context, loop) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) gtk_app = PyChess( log_viewer, purge_recent, chess_file, ics_host, ics_port, splash, version_check, ) if log_debug: loop.set_debug(enabled=True) log.debug(loop) try: if gbulb_loop: loop.run_forever(application=gtk_app) else: main_context = GLib.MainContext.default() loop.create_task(start(gtk_app)) glib_update(main_context, loop) loop.run_forever() finally: loop.close() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess.desktop0000644000175100001770000000055714614030313015653 0ustar00runnerdocker[Desktop Entry] Type=Application Name=PyChess Comment=PyChess is a fully featured, nice looking, easy to use chess client for the Gnome desktop GenericName=Chess Game Icon=pychess Exec=env UBUNTU_MENUPROXY= pychess Terminal=false Categories=Game;BoardGame; MimeType=application/x-chess-pgn;application/x-chess-epd;application/x-chess-fen;application/x-chess-pychess; ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess.metainfo.xml0000644000175100001770000000614014614030313016575 0ustar00runnerdocker pychess.desktop GFDL GPL-3.0 PyChess

Chess client

PyChess is a chess client for playing and analyzing chess games. It is intended to be usable both for those totally new to chess as well as advanced users who want to use a computer to further enhance their play.

PyChess has a builtin python chess engine and auto-detects most popular chess engines (Stockfish, Rybka, Houdini, Shredder, GNU Chess, Crafty, Fruit, and many more). These engines are available as opponents, and are used to provide hints and analysis. PyChess also shows analysis from opening books and Gaviota end-game tablebases.

When you get sick of playing computer players you can login to FICS (the Free Internet Chess Server) and play against people all over the world. PyChess has a built-in Timeseal client, so you won't lose clock time during a game due to lag. PyChess also has pre-move support, which means you can make (or start making) a move before your opponent has made their move.

PyChess has many other features including:

  • CECP and UCI chess engine support with customizable engine configurations
  • Polyglot opening book support
  • Gaviota end-game tablebase support
  • Hint and Spy move arrows
  • Hint, Score, and Annotation panels
  • Play and analyze games in separate game tabs
  • Countless chess variants including Chess960, Suicide, Crazyhouse, Shuffle, Wildcastle, Losers, Atomic, Three-check, King of the hill, Makruk, Sittuyin, Cambodian
  • Reads and writes PGN, EPD and FEN chess file formats
  • Undo and pause chess games
  • Move animation in games
  • Drag and drop chess files
  • Optional game move and event sounds
  • Chess piece themes with 42 built-in piece themes
  • Legal move highlighting
  • Direct copy+paste pgn game input via Enter Game Notation open-game dialog
  • Internationalised text and Figurine Algebraic Notation (FAN) support
  • Translated into 38 languages (languages with +5% strings translated)
  • Easy to use and intuitive look and feel
mild https://pychess.github.io/images/feature-1.png https://pychess.github.io/images/feature-2.png https://pychess.github.io/images/feature-3.png http://pychess.github.io pychess-people@googlegroups.com ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess.png0000644000175100001770000000153614614030313014764 0ustar00runnerdockerPNG  IHDRw=%IDATxb8CkYܯm3Ƴm۶mmۼivNw2ysȩԿt@sCS# UD1<N?b3ޛսaRclR85RBz$\"LWɀO s'kHov+0kzW[ҢrO\~]&5n> Z]-TQ[֕;ilxlABc(GEDBP{KM]9/ #7STډaEks׎81:|_ t'G0<~ ~Zqn7i`$tLily[o QlJ8]{ڱa-VieJԃMm1gtI:}ԥ ME'В3lt_OU6 ]cù( ;Y&#\*5T]y܊24A>Jo%1sGG#@b8~ `h|&>GS(#Dn8U4GL_aMx6;7 Xk!(-+;H]s}! D= xllڎ6dp;g&x &.m;_"mbAs8~V- c=ko45]]-̡WtօPy#4ҟ4)TXbjhq7s+L4.]}'Tf@,$l΄p(BF%ӢZԾ@yr`#8C>5=@.yIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess.svg0000644000175100001770000004432014614030313014775 0ustar00runnerdocker image/svg+xml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess.xml0000644000175100001770000000154114614030313014774 0ustar00runnerdocker PGN chess game notation EPD chess position FEN chess position ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/pychess_book.bin0000644000175100001770001026746014614030313015775 0ustar00runnerdocker)9_t|F)9_t|9C39&HutHu(4,C nN,ZKdNkM18X fP#Z#UX? fBfBRfBfBK ْ a 4֪S eg;⠐ZU18'u"oM3"O~Ks 6( cJC6( c2yn#2yn1"?yK h3Y r <5Ra -x !* q=s? VyJ * VyJ ΩP* ΩP* Ƀ YFR3 ”vRbQ LDt l/f >Z V϶&V϶V϶ V϶ ' 49N9>{A:Ss:?X\xN mNX\xN1X\xNtX\xN TD$ !QR ?, O8@ 8@ (  n݋ v^< L6l û(5Ŷ XY ym@W ^ym@W((SR1(( ZpcTRS lj lj l (R l4 lt. la~  la~!;gݐ!;gݐ!$~"ʈ.H #} x'?$ `X3!$ܼ! $ܼ! $ܼ!Y $|$R %S[4&:TÙN&_H7&_H7 (In?6(WF $ )LI )Ȫ3t)Ȫ3s*m!*҅ˣ *JlN + ,A:"v ,,|Y , -& 2-鑾Uej.f (Yv5.f (Y ((.xJVR l.xJVR jL.xJVR 9.xJVR .xJVR z ._O/o_ /0I5:k0GF0]L8 , 14)A2 HI 3 N5!L:r \ 5a (5at 7W*2T@ 7}[U[.7= 9 f 9_Fr :8͡ :{ !:{ ; ,;%uv;%u;Tf`:zj;Tf`:z ( ;Tf`:zt ;Tf`:z $ <.h6=h,=ry >K4.>uyK1? Kf? Kf-? Kf ?I"?I"(A]uJ6_Aa~b Bg]? j;Bg]? Bmsw+BGDBGD$ D(4jE)!G_83Ie'H?JJkR JsgWK6 $ LAlLAlN[N[OBi Oa #PK?yJ:PK?yJZ$PK?yJPK?yJRPK?yJ P3 $nP3:&P3Q0볁 Q>mE3 QGߤNQS:e RD1hRD1LUH$fREUH$fUH$fUiOUiO UiOV?ópl VS$ X4颥Q XXMRIX(r7? X(r7j YuXj SYVJ|+q] Ykd?[IG?[x8 i [ ]5E4d> ^4^ܔYrpV^ܔYrp iQ^ܔYrp_0vuC_0vuC [_0vuCs3_0vuC i$_0vuC _]H5:F_]H5: `5ń/ -`  a6ߧb_( b'-cW"dF(E fP?!a&fP?! g⎟Dg⎟&g⎟jg⎟Rg⎟"h h>K ahfj%hfj!j*䤨jmrJJtjs- js-Z kyl kltld?@krld?@m7k6n\Pj'o" +!o(96_CpypC p(2QqeVKqeV?6qeV q<jsаsZt>t}齫/t u U|"v _$ yeD y}hFKye5zP22 zBh {.A {w}g|$]@҅@B \ո$3tKո$3 ո$3 1ո$3 'S *`9> c\*`9> #X9V?s$R"R k$B .k$B , mj< m? cNR ה{ RO 4o?tۣC CiM!BEiM!BsA y[31 [$1L %,6@ %,6O/ %,6 kGlq; -8@  7`v6n j_H?A ,A e cJjcJ KcJ"cJ ,-tG qXK]n  ,2 #}ws DB' , H g0R sC_ \ rb ?U ?U?U g5a KL+5]L+510&! Ŧ@GDK O"IzU47 t 2&S}|K)}|K)Y uH"  ɋ5?eEjӳH!KӳH!s EiA]<EiAEiAEiA~;dz͟ ̑6  KqS)KqS) i*KqS), NvP0Bg:$w?7$w i $w 7 $,7s7 7 ( Y dy0? o3ZeR7|v IN?G-(?-( $-( i ď O2  Lwu 8FKdӕ+TDPsDPM;JK(; Q]tz? K,K, 9 q 1?1g$p|ϥp|ϥp|ϥV@?tV@V@ }V@ +zO1R1+zO1+zO1+p|4:J H$f HD" HD" :G( , 1 u3Pu3P   Vؤzb JKJKQU( 6U( GX__R i ^S!D 0M_N5u.C)se5sRJ.IU_q$/2\BH /BH C ǥ{n:<ML{ icCticC ʳ՟<Rv.lk.}.}K.}Q.} i $ 5/$ *$ cO2I !_ ].qT** W ELg!xRaǺ7\~Rp+YHp+U_JXJ}K*_JXJ}̘xC (> j9NgTQ? E QQ /IR?d6c - SZp7Y g@|2Tg@|; Ӷ (>L:Yt@?ng/Kl8sit zQFFx vFx vFx vKvt AT _| ( C#U:QV8K@!8K@!8K@!Rg_?mg_ t? `IU jK [\ {Z&y\ {Z7\ {Z/&\ {Zh J>  vݜh?)/a[m#l{#Ol{#O  \ (  =з'8  `'v_  `'v_  vnOZ R+O# R+O R+O tiO tiO& tiO tiO  tiO $ tiO  tiO a tiO , k ~PW }Xy[q!|[q! *v *j  ՐD$-Aއb-AއM8%ϓv o Mv ь U7 (->k/LĆ̍j/LĆ̍ W/LĆ̍#/LĆ̍s*ōt C} @b+Grt w&W# |?Ϗ <<fV  2 2* 2ew\h)mjNk<厦W ?X#Vm'[?j  iz#1?P iz#1 ^!?>s!?>s !a $-!a!51X"edLX"ݻQ #,T_xr #Ah6#Ah #Ah #S$[N$ }|a &= ,&= &= E&=8&= $&= &= &= ( &HP;.?'jY#'J&(:+ )H0 )ƒqJ[ *6d +) +8:+?y4 +?y4 i +ucݓ/+ucݓa)-jR/RAC!R s 1%+t , 1 3<2[3in 73in 4al i4al?5UQR5UQ 60Z 6@ 6B: (6B:8$4?v)9E"A"&9w3N;U3Q\r`T?Vv @.es @xEA`X{ $ A|RFQf A|RFQf B)ZdB^Nn3Bt+Y DPsp DPsp FJ6PUM fFJ6PUMY FsW5FsW5KFgx $Gku0H/?9KHvq HI k5I Iͥ-UIBVZ|IBVZjIBVZ IBVZ Jaq;O?.Jf sJ0u K?j(w. !KAi)/R KIsKKS4 *K"$NDG!;OL OPhV"EPXjWPXQu< $Q~ $R1b\bR1b\RR1b\T?ВdT?В*T܃G)UZ)!V$$x :V$$x VEѤoVEѤZ4VEѤLW6h$X u\XiM_ \ X?r ,oX?rsY2o0 # [ eS [ e [ eL \fu\r\UNCr\U ϧ6,-Z#ƸUP9ZƸUP9ƸUP9L? dqOl. jpd XdV @4ӸP: 5AnG? ZnyS ֬3/]@ 7 239? ; 0o ( =ε")"$ٜ>hc |ٜ>hc g چ:s3s#3 (3k rO?+rO *ۉ:v2ۉ:v 6n$ 6n$? 6n$8 lDA @$ԢM9v&wsR|R| kR3f #.ⰽbpscxP A r0%Z6[K0%Z6[4g* $pRؿ -, hN%裷-6<J-6<Y7{>8 S;9ɕ S;9ɕ j緶ש $繨o 5koC G/b~: uG/b~: "G/b~: 69 Wh 0Q'0j!#j!#L IP9IP+Iwh i7WuE^ \> qG VPm sPmPms ? }Y r-d c\QY * # bķл& $t֫7*a$q1^3D18?K  }> ci]·seEJ? ┶5j4,NKc7RN%{9!RN%{ Y YR ie L 5yviov*G]  GPPٞ ] GPPٞ  vXe\$ m Vxn9d(p[tqĤLzJE :zJE r⽏ # $q <5_W $ |^ ϱ)R[= 7R}<ٔr7ï[w9h AMlk&{s Z$<3?[8٭f K6w0AR"m|$,D wd wdR <R<K׾ѹt?׾ѹ  &z.k=[1T !%<Y ##f$%TAc& Z]o\ &ll̘ &*01 'eH̟N )d d)zcj *3r܋? +}3  ,B Rwg,S ,8V ,NIgd ,NIg ,""?--M-o .b%0ˎ; [F '1C;.2v5kS 2P@r 31g&31g31g4>ps 51|BkD5\f!t7ú7$-b 7mKJ 7nG 786d 84!' $ 8$3hj:H|K ,,:H|K :GJDc :GJDc a5:\55h;1E P0 ?D6!h ?D6!h ?z"?M @_?tsfM@_?tsf>Avs BqR yL BuL8 -BuL8 C]Uot-Cd C Ew0Ew0EwEXϦ3N: YN՚ YN՚ YN՚K Ya o[N. [N. $y[N.sd[N. W[N. R[N.jK[N. \כ؃D%\< +\<\zPt ^? ^ ^:z?^:zaɰ; bKT?bKT cƾD cƾ cT?D] e=F3Ae=F3Z gI{u Th: /v h+8YhV@hVShVi8dD/i8dDi8dDRi8dD j21,5k7pMT (k7pMT m3]L MmRU.Y"mRU. nWMDo.F-юpy}jpy}pn=?3qg2q*ss.w{&[ sC4FsC4q(sC4t?(b? t?(b tKdNt``{Eu u&T'u u&Tj u5 g u5 "u~ vGrjkvGrjtvu~A u0nL%u0n-1  9G%9G%9G%=Ł- Ł- ؛oZ`Wj AնYv^[U_O~Kg\yQA}d _\o_\R_\Q__\>_\)_\-j05ߡ?#ߡs@γ: [_*YgSt}MON . f&\_`& ceRirr;Kh R S6J4 S6J4 i MODEMOMO '5R+^09^ F\ i)F\ a <=<=a<= ^BQK |- E|%j E|% , E|% $ E|%Px/d Px/d ( 1Ƭ ,N1Ƭ1Ƭ +9tNqxkZ͞KC?Z͞KC , jж}жжe`.3vncN R #R _R 4Yu? &~j4T 3 9vvYO O3P#5#%5$5 (g꾶 +c}jb ]st ( 'B$Y $'O 'O'Owөȫ" ȫ"Y IAs]IAsIAsIAs =!"[ aT.9ܑT.9ܑ  Ӄ,? = P_# K˽$ ǃNǃDPO6 RXq1 ( ( m( =( i(  !#9%TvN9%TvLO9%Tv59%TvP3J"X\V Yn+|B ac acDnbk1 ',HwDCHwDLDg h;_ ?h;_ gLh;_hh;_sqh;_ h;_ h;_ | [^nF _l*m z2y RSf-^*n.^*n. jtB nѥ nѥ2cNd5 ad$ H OU OU ( A[)  sjsj @ڷ2 JnXJnX s" m|; m! m  m T= !T=  DK D;LB $##$# ϰ*tIj-RՁCl CՁCl ՁCls ҄zN#+̩: sɂw % c f̅s{ůJ;B{ůJ; , <=$R%\[ TRVH VsJ ,Kn D,Kn a'T{hvł)C $? aA a   kjX k k $ +|~R[+|~R[ C<3 $WDfWD>Ǥ͟.a "H ^W()^W(U^W(N7w3g ʡўYL = ~jdDU21K Sn.[ bcbXdk bcbXdk Ϟ O&s Ϟ O&t<ބ ۚ^΁=/-X".ۑ@s)\[?&⪆/ \ Q:Ru hӛ|?_-C_-R f)bv~tK K   {a0#%Ho%HL%H J=h~J=hUJ=hR J=hQ Ր e:\JRA̋d!?!A̋d! 1A̋d! }KrQ I6 Az ܮ,#Dܮ,#ܮ,#qZ: \qZ: TNkxDj kxDskxD kxD kxD (VkxD6kxDhkxDkxD \ޏrz+ޏrz+ޏrz+/ɔ .JDmIFm #]@' , %Rh nA=<nA=Rq},v q},v S(Hgv= uMuM߱B$c `t_O箬y%[ g\ ?j?N:YbbY aՓլ; Y"8 ,nFL P̼:P̼-P̼d #!v D:"c7vR z  'l' 9[jv DcsH ._o9găzs!qDd uݭfF0 #.M ez"Ni L0̒G7H[{?XH[{ GH[{sH[{ ϥ ϥ \ϥ6V_ j=wCt _KO7_KO7KUW/7SUO xhxhxhd exjS .C  >  >    j  $sR k4  M S  -g2C? -g2C M -g2C  -g2Cs  fy  fy  ,|R  `? ` \ }^5 }^5S }^5 }^5[1$#]s T.rpTHTNAT'Fτy #`%-`%&`%N {}S 3 *D]Juz a0JuzjM . o #o o ;jg .KiA" ao 7EUD1P mG@8 aRQ Ji?t111MkA ( MkA? CQ?  ۪ҳ $ ۪ҳ ( ۪ҳ c  qAcd!=Լd2!>z? "& 3˅"[m> e"" FR$<*+<$`O$`Oa$`OY (;f(;fR (>ư.)YgI])YgI)YgI )k n iN)k n D)k n )) )E6 *฼y? +eN ,73O (,,73Ot%,73Ok -c_46 .>N .>N /oʗ0e0e (0s#0? 1=!$a: 1U 112) 2p 3b!##3G;a3G; 3.]g 4xI 5䉫R&5j 5 @S6!s]X?6!s]X a86zw6MQl7TNvN77TNv.7TNv 8~D[8h $8h 8h ,b8h 8h 8h ( 9y= i9y= :/L:ɪr K<3 ?<3 j/9WXlu? X&:|)?X&:|)sjX&:|) iNXNfLY4' YLimLYLimZ Y鋔 Zu_4Zu [@ZSbV[;vDz \}'$F\}'$ ]I,_f]I,_^q4j^%;p^%;pk^%;p_ =_0LP _zCB `Gv] #-`Gv]1`9R `~Qo`~KE`~R9`~ bf)  <j+W4Oj#n\j9n\t8(:7NR `s`s??̊*jΗj8y? 9s.BE[bԼS:?Z)"^tQų.A m-0%x+N ea. $a. $a.Ra. l+;a $Wl+;ajEwL = l~ LJS ;?$%ВsQ%В )%В %В sglUKj;)s&;)t$;) %(? /_< :w ^p:w $0:w ,Q$[vQ$[ Cِ#RCِ# y  k3z+ k3z+ 0k3z+ ,k3z+ k3z+ mk3z+ ik3z+ gk3z+ k3z+ a +3z>0 xt; xR%FӉ]G Ӊ]G iuI=Ė߈S*=Ė߈ENT0Y@T0Ytp@tv qOAqOAYqOA 1<1<SWH@WH@ 5앩N 5앩K U1f;J8'B K? R 숕JR 숕JbR 숕J,R 숕J ~g)#`[(z-\t&z-\9ĴvZúnKIZq^ ޸ 庼Y庼Yɐ*a{ )ɾ ] ΄ yK& X?,Cn aF*: ϗҚs Ѕ:, ЩRNtR6*L|d{S` #w  ҭS/Q ҽI) ڪP``\+C6XS c:ŋ_!:ŋ_@,J 3"M1DM1D ׊E;K>f aڟc#Y1L=H2E g"W:jqg"W:#g"W:g"W:t t0L>qV>q exR 3Œߠ=#h$#h#h HՖDN HՖDQHՖDHՖDYRHՖD8HՖD :Jz? #U0H} QQeQeQ&r< N{+%5N5e] S#^Li^L?_^aKv nI$ϑ? B R”l (~R”lR”l "@d9"@d 򓥅>  j /:mYp?d 3?d P>ko<JjC xn(8L z/1 #z/1YEz/1z/1 z/1Z ? ,)_' ^fXFs+XFt XFkXF #2Á_C1 A`P 'v א d WDe g  WDe P"Ϡ \N/Cj Wc<vIP=dY-vIP=dD(vIP=d1P[O ibÀ"j &3i( 7  qU)M qU] '{}  Q  "fq  //b //bB //b  hXo ,  c: qF qF qŅo PzQP6;V v , FR?n $f܌Ls N 7jF7 ,%:eSR  >G W& - Vd.-E _=o_=R7Q"<_ B6?R9B6?.+^F+L-d@nX 2Ec7 5C\D nuH  e(M7o9 UF ( N~ഠ/ U AJ? zMws"v"v"aR]"[n+ #%K? $j$׉tR%ޟ(%ޟ(_ &:<%; $& V;'VKو9 (=, (%6$)e*nV  *? #+kɩˮ|+kɩˮ +| -z~tv.jRr.j0|=I6 0fҰ0x , 1D0ve 2sWvP D2*_mN3o%f3o%f3o%f c4_pR24_pR4_pR4_pR 4_pR_ 4_pR 4fgxs 4j 5 HOS5GJ1?5bW j6T @v7'wM\ 7Q*O@7Q*O7Q*O eu7Q*Ok57Q*Os81~|8\.9 8\.9 &8ʎTJ 8ʎTJj:Axdb:Ax:AxS :s*eN:s*e:s*eD:s*el:s*eS:s*e]?:s*e:s*e ;@X `)Z Ax$ AIύ= CS+ jCzh?C  C0lI ChaChFChd|ChP&ErK_h)E,OKGZFvJGZF eGZF7GxGx Gx I팟7[>I팟7[+Ih5IhJ#M53sJ#M53 $ KYW/ KV L!9:: L h5f iL h5fjM A] My1L"vJMy1L"My1L" iNX.zRN|̩ NVo(NVoL O<"VZ" S OcM( O?gOP!RQP#|FPEI ,PEI P $ Q*aT| aEQTjQXWjQXW QXWY?Qܸ6/ $vR%ޥ& T=CRT=C>T=CU8 (U,Ck U_q _k hPaRфXbaRфXjgc+*I $"d5CwDf`M#t?f`M#tfS f^NK h}z@vh}z@hsj$Y jn  lLW $lLWlLWs m$(IR3n><4nO^ g nET ph(/ּEJr7(<r7 !r7 rCRB s GMsh $sXp t  tZyttZytu6||Ju\uS`Ru\uS`v(LvdN{Id wkc wSs'wS| wľ?wľ z$?E@>|/; |FK=7 , |5Mƥ8|5Mƥ8 |+;] i|+;]|+;]j|+;] }p9Z%* $[O0s"5gx c ~[Wʃ ʃ?W^&*9{LH"˭| nC#nC:َrX?SZU   v x!Z R-5leq1 !0O Wz"Ne'? ak%v1SraS \T` /Cf/Cf/CfQ J # qO#@=qO#@c{*CcbO#hw ""YeY|k ^Rg`f5g$F \NO[IuNO[INO[I(; ߥD| :g.㖢UcAR N~_ ,N~_ N~_ $  4fX;jCBD ebCBD m*CBD CBD 5X9?45X9?Y5X9? HB2 i[ +/[+/[ \pY,pVHQg[ơQzơhM\]hM\] CR) GDZ,;/v _ [r;6E?[r;6E [r;6E i cQ" scQ" ~cQ" cQ" ]cQ"  beB#:." i 'Է6f*ȫ*ȫ)oj& n 0( #96M_6M_kX V}ɾ L}ɾS}ɾ}ɾr}ɾk1iȰ^3 , u0r-BUxK?UxK6UxK #: $\zt-G\zt-:S@H0 &)J  --D- :]cQ @ ;Z@ ;L?@ ;qyK]Dm;dƋ r[ ?Pt sz?9iR VV" ˆ_*va#K)(Ct- Ƶ4$ #=Ƶ4$?51l<?{cuŐ8 Xݴ=B v Dy<-C .aWs \HmS,) -8ܜ#6p p  %T c+ʔ n1v^1v^ V#R x䔶X 䔶X I䔶X䔶X al_ iӡ\U &2/N[EwG*M)M)bM)AM) گ [ &:YQ^ s7d V9`7d V| ;qlL";qlL g;qlL i E{IDsE{ID ,$鯄@ #A3 /A3 kA3 t"n0R$n02` f9v&~ǖ}  p?Ʌ &ʳ%zX:&ʳ%zZ 3qEq 3qEq3qEqoz 겹t   [ ݈w n ? X6J !6J? )R)*R3,8R ,8 C   m C?TzSYyGtDyGt }Z +_d xÿ" o d /$Q r &r|Oո ! |c $  :-+ ,0:#>U|6nSQNR?сҗ ?сҗjhj {CH 'wzm=itm=it|c tJbN 3J: - tK  zT ) EP? = R D9  D9  Lwo %wsH %ws  Jw  ѻvLyN  C}'tkVj1{]?_t#g_E >R ̬?LN3@ y6EV=E6pÛRrs{jF F: wٌ'ڣ>L3:4`d >) #!G7y $TI{4 m kg7D >#0 (>b/b_ ?[ s*@`[JF@`[@`[DBd_ Bd_ B Bք%OCj8 9Cj8 DC!Lc + D09qE! m-E! )E! EcAk̚F€E m FY1FY1FHF'"NF'"G"K Hfs#JAɺ?JA?JA jJA J>"p?@J>"pjKMvK/yWs MQS<MQS Mv/Ol-Ol-O l̖?O l̖ O l̖ -PDV7 9PDV7 Qb05K!Qb05T }Ul?$ϐV1gZ eAV1gZW!\m)SXDINh XRVG~ (Y`#/]^Y`#/;Y`#/7Y`#/Z9B|D![v}íG\?!s\~/\oHn1\oHn #^+ s1^+ k ^+ Y ^~^uY_+ߤY_ˁ `:\,`:\,R`!v| a[˔| bl}^zb`bl}^zb`bl}^zb`bl}^zb`QbG;1 \b镗c֟c96) hfvfv fv g^SL hhhh h(jSikˎB l*H[n  n)DCoSoSN<qSO)Y riͤ+=sy.L sx  t<p|tO6 , tpC tpC DtpC t˪vxR%t˪vx uQQ"u-Pv usQ[(2ku˿Qk Tuy.uA7"j Cv(_ww}>S1ww}>S&w ,%&weߵweߵEweߵweߵZweߵLx9 u0v y %8 z7ߘ0}z1`RzԜOzԜS/z(*n {l>|c/3|s _?"|s _j}v90}v9 }$||}$|}$| g}$| 6}]k~@Tf ~,OZ ( [ n ,[ ns|{G?7|{G |{G &˭9,  dj:ڲ ^eLm ̈t@ ̈t@t StUu f?hm M!F`by 'LD,Y.OٳjB-0  2…=A?" 3'n \ ʰ ,Sʰ,/A/AK"  K{GY،T-5: GŒ [ˆ, a u q9 @@ڀU! /ݿs *i] : "BS6də9d'j8m j8m `  az\ az\ 0Vm} е`9YtM %L bzR)Y4)Y ~NX%fC|NfC|fC|fC|?,_|i )'مN9)'م6Aɽ` LV rY-|C rY-| ~^Ī aE.0MG!ȒthQ, Ѳ YѲ K _>mg+ΑzͮE|, ϝtϴAW,|3 \},|3v*,|3 EM-q ѥ@|? SSt ֿB $ֿB ,?R5!w?R5!wt?R5!w MٚD MٚO '^kvڨ/s $݉݉Q ݉ sj \Z\Z ,z# 㻭fv3GVGVLG[KƋRjp~Dp~d;p~p~湋L9湋'9pb? ]? x$oD !6"#pWRpWNpWpWD}D$hDD# 'u3 ,R5&2#F7dPRF7dP!F7dPF7dP KLSkKLQ%SH{ SF%BF%BQF%B Z[(i:Z[(i ^!@^R^Q ^ &Y%RnТn R \ fh ~ k[k[sB%* IdB|.f\4<4#s|)LhDKSI|)LhDK7|)LhDKK*|)LhDKL|)LhDKd Jsh!Jshs$ \b d oOt}\N}\R }\ cϕt cЖڀ ty *#'@#'@KW#'@ 7-8YY+\x#c ,\x#c \x#cs <|s  Z  X|VKP X|V  d\4 d\4  %*{+ `%k ( ' #Z :YVL# ;o)XUQ3ǙT33ǙT$3ǙT ]jA-޽ bK; ? ??tptJI͖?rs wU*?7̴jfj*|ׄ x!$ x!R x!!xlMSxlMSdl Nڂ }*K)W:Em0? \]\ !gpob!  "-@s "S@B#Y#Li;?$i[sb?$i[stO$i[s %\d%)f) %)f)j&N;R&\)&f4l]v',Wvc 'N< (g5 (g5j(prj0(pr?)(pr)Ld)ΉQ_ *Cf~W$, ! q%->-U /6=G c 0"3:\0"3:D*0"3:0"3:0"3: 0D60צ;0צ;K0צ;0צ; 0צ; 0v 1zJz# $ 1Gk:!R1Pe2 N_?D2 N_ 4}Eبs 5n:p5n:55n: '5n: %5n: g 5 !_65>t#65>? 7,%%T 7;E 9)h9OL<'d+S@Q>O;v?(w]K?75a?tv*@k5 A 2 B5'/Bgo nBәC={ #D7% QEG EG . E]-@?2Eiٞ%G:#p"tG:#p" ( H}Z[ JH}Z[ aH=Ss IM=0)7j.Jdl!H ?KpGAR(v L?2CGt LL%9 ,SN_(-hwO^j:I O\ OP[ Q\R~Tg\T׿yC'Z3hZ3 3Z3 e"Z3 Z3kZյI[>_7 \P3k]NY^CHKC#^CHKC_U]1at',a  ab ab iabjabtlabb=abab avi*H cW:d n cW:d S cBZ<cBZc}ScfeEBuR drg; drg; d#d ddRdd1d+d d f 6 s fVV*&XfVV*&X ftgZs gZs n hZ%hZ%Z i#hR i$6 ̴~si/6!i/6i/6Di/6i/6R jKKjrI':"jͤ>mmkjͤ>mmGjͤ>mm -jͤ>mm el#X l*1l;l*1l;l*1l;Pl*1l;Ql*1l;Dl*1l;=l*1l; lq$;`kl6DQmB Y!mB tmB  mt*s8 or2or2?or2or2 q+[вNrP* sTw>tk`tk`%tk`#tk`tk`]u Ȭ$u Ȭv(՚ $w-j>:w :s-b w7D w7DY y981:zVC: z@, z= { Y< i|5Wt(|5W |~8 }\յƆ~鵣 UQ $HtQ`d Y;;3oෘ 5p $Ao~;O]aj#3] !{lW)i Qrj D;L ooy0,6~ J{,x s,x < |5< <  fS*fLff җ2E(,>ȋ X,>ȋ Z,>ȋ jGq/TH 9  = *7 *7j*7 (*7 +cz ^N]y/!* ,Lbk AF d}[Z 8j? T/) T/)kT/)YbU|H"*K0Rm=[]Zֱ'eh2.2 2 \ 릸6!آ}&N*e"tH*e" *e" 3h"8ق 3h"8قj3h"8قk3h"8قb ML$ i05Qj W^.fW^.fQBW^.fK  l=< wY bB }dS2_G6S2_G S2_GRS2_G eJ&~D -> ٭ ,٭ ٭  a \X ( , $ "74:"744.S;b #) cJ#) # fdn ]T ]T TT@-j TT@-j 1Ov GOvD+Ov Ov"3hk"3htt8e#x5DqHx >2Q[vpd`d =Yf D>=g GVQq(VdFq(Vdq(Vd/xC/xK/xJאjJאZpn1;{  ) R \ %U% eiS,ei zh i-Fji-FjDi-Fj  VsJXA $DXAjnw3d&s¿VOj 8Ÿǩ cY7sbY7 , !W c {h" ?k/Ebt?k/Ebb >_Նu8UPH g  3y<P鸉Fz $/h/% 0ƽ11Oz@ƽ11Oz@ ƽ11Oz@9ƽ11Oz@| 5 ǚ.yǚ.IɎ/ sBhsBhDsBh {_sh m Y #QήLDlhxNWSq> VPb$ >VPb$ VPb$kӏE  4 bE]}O/ ֹsz \_ cf aqf Rf L f׻&mv$q  sp+ sp+3Qy  aԚ[ %%<~HS=` - ދU'J"޶qD ^f^fP+߉E~?߉E~&o̘ |6 s` ~LMs` ~[6? 㨸 9 㨸 c u " (u "s )K~ h`Kh`JWcv :=::=:5LG5LGai5LGZ=5LG5LG ;[pmWsR;[pmW?/;[pmWk r4J9] e]t5] &]kk W߫P XaR)Xa . ,_MbؿOP$AOkQ s -m+H9RFm+H9+P? , ky7?Dt8y7?D y7?D $pdVzUM?zUM a*X`k4T|`k4T| sz`k4T|Y`k4T|*`k4T| `k4T| UEsc ^wUEsc hW[Tr(W[Tr(%W[Tr( W[Tr( W[Tr( lz9 bf?qbf?q z Rz  |-wD @ICYpٸ[Ypٸ 'WM.5 o=] dy#ddy#ddy#dR BBD ,o9,o+ObeM!CvF,uKTvF,u[G6sK? ߃7NKa?/K .}5Y.}5LJ Q{MZ$MP~n~nG@3D6AӑK:6Aӑ 6AӑD>N@]9k|`kk|` ui۟>v K`K` K`  tǧ?4iͥ Tiͥ ua]R  =SL( f0x^^ f0x^^t nl$ c?c    {G;h K {G;h $ {G;h (  , 5  1}Oe  :R) %; \  J%! J%RJ-&|J-&][6K PRl0Zu) 2y $/Bo%\!t KHhbKHh6KHhL KHh 8G Y  Xy4DaT -yi3PfhPP sNWh RWhWhjWht $ aBDT^DTZ/DTD6п\yZ5 uk: uk0&乚ƞVRt= L|zD q!S !4L"h[$!N$!W %'іzRo%'іz&Lm7 'OoN)HjXv *, z *ݪQ+ "A , x I-G,ߎ -yU_).If3 ( .>c /< 0s30sN0s 1̳v 17>y 25zL25zL 2zO7dq2zO7Q,2zO72zO7K 2׶j92fs 3T9K 4i=\ -4i=\ 4m! 43g15V{~`tH5t2--5t2-'5t2-L#5t2-Q5t2-5b 5Р 6D ߍ6jXG?7|IM >7|IM 7|IM? 7|IM 7>y aI7>yt8G/8L99(,{9,]^Q?FaY`?FakH? c @(!]\ sAPwb3 A>9N Au|C BUCѿ$$B # CO;YQCxܜ Cie4 # CX CX $ Ck̯ Ds\@T? EaZ E6D tGZ9˅ *GZ9˅ *GZ9˅ iGZ9˅ \GZ9˅GZ9˅ ( GZ9˅| G\ ,GfZ GYbKH3O: $HiE S eH"l (H"lUH"l H"ls@H"l6H"ljISXT۠ItI4t-JЦa8Kej;M}Z`-zM}Z`-zjMߛy M "eO S O'%x_s OE& OvP L)`P L)Q2[Di"Q2[DiQYKKL RXR,SvSNMR SNM Sۅ{S T QKT Q T Q U|ଭU{j ,+U{j U{j ( ViHQbVDa#!VDaRVDa$9VDa"VDaVDa W_C^[OX;Z Z' NM Znr> [>;m/ j \,oj#\guN ]kp-_>Lj _Ms/$ж `IR aνh!aνa\5 gZ)a\5 gby6j ac&Yf|83r jf[wY 'f[wY f[wY f[wY i fӰ  fؚ ,"hӮ{#hӮ{h{hh3hńJ i xSi =?K i:d-!ji:d-!Y'i:d-!QiXI kS iR\.K jkF8> c l lGWuJ lcU lcUl, sal, ~ ni@Y #?ni@Y co\9Y?p[c ,pbE q\j] r&i {s~=us~= #s )OY s )OY , tͨ)o Anv7?ES vZyqK vuVJwʼ4 x6X Hx*| y{oT c }(~ۉ! ,h}(~ۉ! (}(~ۉ!j ~h2Y5~h2Uk ?Yvk ?Y [[k }*lCNb$ Pwx;Rhk Pwx;R8 Pwx;R ,/ Pwx;R (E#!=E#!iF~xUiF~x EUEZlXzU_lXzU yT7YzJyT7YzyT7Yz cr?RU1 RU1'pS d WW)Q GZiGZi]D , m5O[L ~jt c #AV ,b Bb b twc# wc# Ea$B a E # /xpfS>/xpfZW6Z  :45SJ Ȗ ,Ȗ Ȗ h(z@h iMj& &f ;/5 aN8ܯR9 wTW?2KE # w.+om][#Rm][#xg[?/0{s;/0{t/0{| [ԫ|q oNo :jp3Ft {{NyxfW6YxfW6 hCҿ > Qv lխL3lխ ,lխ f} C&tXC&t C&tt C&t #C&tYtC&t (C&t eC&tZ_dZ_dZ_d x|:Y 21??H|*Ev Ev "V "V /ޯ )/ޯ9 ' A8~ A8~?3A8~{ 5"5j,r_ \ -s!7x՟5< - el-Q Ln_oC a [~~K?읞+ %\Gs {Fk)׫CRw0- 0R0 W0XC wK0XCCfĎĎ|  gH ߠ&}| YY>)D b}ֶ 3%Eu+ɐ|,楪t[ ;,m^~HI+ ̀&Av%?`@ ¿ l;k;kPNl8_ =[ [ _[ ,[ K[ '[[ ([ $xu^? 9 [[ꌗ{ZH VS}XYbC /0Ps/0P  LD&& &ƽˏR"1ۆ.Sv93 4Nwe Zo\U8 % ǁu qǁu Oǁu 4ǁu 'z~v'z~uuj Ô \ \\ qhS8.: (XZGvZG xk7 }(K0&NN 8ތv Tzh *M ,-*Mj 4st0L ׊ -׊ XRwK >t.>Ǔ ?_/ @-WFSnR@ci AbA1fA< A< $A<A< A< A!K A!L A0MB)V0P C?.Ay Dn-uDnZDnRhDn]DnUD D U}+DE"Þ E*):Fk"e~Y FxSFx$ Ft& DF5Ol/ yF5Ol/ >F5Ol/ H"Q;,DH+R H+R( HHmc[mIj#<[<IkR* ( IF LI YLI Y NM&wRNM&wYNEWŵ#P)4*O RP<(9 P@bJYP@bJ PF P@c IP@c (P@cQ &[Q! Rʔ kS#{n ATFu <T *RYT *Rj"U^aJV߱5] WUvKe WcFii(XS? [%Ǽ[˧ $*]n1aR]n1a _D_5d$R_=  caW䯊 nbA`0 $b3nz bRSceBVL cEzpdQjdQe{@ 2eJZ8eJS eJLfܹ%Gfܹ%$fܹ% fܹ%R f4L_&qgbfh5e j0h5e i`=hoi`=hoi`=hoi*% ci5嬌 js)r i jYJ ,jĈ\ jf>lv<m.9 o 9ol&ol ol =ol ()oqy` pP؅Rs*pF UvVkvVkx@DHxAslKz uK?z ud0{vSF2{۲ !{f ^{f }Hioq ,'}Hioq }Hioq }Hioq $}#S }L\ ~S#v`SãD%ã[ {^={^=R s s tK@P I G I G|us?uㄧb@{',h\ /\v)–1Iv "B8 s,x m(|O c6~Y'v|'d]EAz'EAzK߬ "S11X "XkrD7z79-bW94jmWaS" zRwn}K#Rwn} - q $[ .s\h"#يk kM kM ,kM N4 cA9 cA9 r }e|4}e|L}e| ~3t!rJL !rJLtB_v= ^Ю !f? gvӴYUVK%}SM M? CՠK k k  (K a0WPjfRbX3j,BOt GA%{ e N+ PN+ pGzk|Eh) Eh) ]>Rw #  FY a<FYb~nI0vdM a`_VN{:  >{כ $sj$sjKH5] \c e 2F 'e 2F $ Sd#cl?6#cl k` dvifh{ DnS ~+Asu ڇ ?ar K Cpx s bLb tqtqN $"${[ Ϳ)AͿ)A |!|s|un (Խe?Խe gɟ # R[me R[metzR[mekvR[me iBR[mesA̦o aQ̦o , b̦o $E̦o ̦o ̦o (=̦o \#eSE8>ܾhC QZ(>$ sLM mALM >bdwâ&pPs V\:j 1Ib $ Va ĵmDk/D}K1%D}K1o?%eM290N K1090N K1]xgq ]xgq  ]xgq  șs<F vd+ɭX#ʜci`5k&ʦ@/ kT3-kT3N˔{<a˔{<L  䝆[ }{+MK@lK2! ͅ* <!ͅ* < ͅ* <Y .bX.bXS R= (RHόό YUqY ҭ/pUQ әә x0j Ufs9hOk ׮ 1 -׮ 1 :rG?OqNK'OqN00 i >b?/S{ R  $, 3!$, * X~ B 0zB 0JB 0RB 0  0tc+=wɣ ߦ e bblu 2K |r6ej`|r6et+]<+]< [cd;ዦtZ Q{ znVPznV 'c'cC 㗜æQnPcb"0ER0E#0Ed0E 0E >sNI ;;6F?^6F 6FRuF c hh a^5&P p*?p*R 4 E ctnmn ?)  ?) &?) t H9 rh8'Z}~I I? .xK3t2dI:%I:kJŹ/JŹ/l l4RE a  m iC9A} m mOPimOPi 7~7~N7~ M)MNYiY0 % 8 =R  8 =Q >!Kj2KjD#KjKj @  XevXe m&3 ,3s ( ܆t| )0.? ٙ[t' ,+ٙ[t'jٙ[t' T" ,T" $ T" J@91IJ@91IrN502Y\gJjސ߁; c @J  @J $ B. {VR uT P 3\Zb 3\] 3\a 3\ 3\R `aѥ8 Wb!s" )] )y3 y! n$] TEh 0GL( 0GL e$ 0GL 0GL QL$ QLD QLY "u  _"K r]E 2G 2Y u}H]_ t>  r&  M  M ? |wgt -M , -M ! W{ $ W0/~i? LF' 0]hvt a! 0]hvt? _t l ; XHF Q5  =S;  =S;K 2X*  S*L/ \7q- \7qK HImR vE5x  Ni YxzS "?Y[j; d3;p Ӈ1? Ӈ1j $ ^ ; ,7V y٬ 2C? X | "1 e #0Ojg #0O ( #;Y $w i; $SU= $SU= %g@+]/ &fAp?) &qfoj ' * 'TQ 'TD: 'T 'T 'T 'x. (6; (5V (5V (o )@J/T $ )@J/T  )xkg  + ֈi ,F rn .YW$9 ( .C  0w 0w2 0w 0w< 0wQm 0wN 0wY 0[#biYA  0N 2 slZ- 2 slZ9 2nU]D 2 :iFȶk ;stO ?bF  V ?bF  , ?Wh( @ ?Wh( s @\6 @O=[ @B"H?& @B"Hs Ac]3IC N Aך* Aך*L Aך* BC B15UT B15UTj C$X7[ E C$X7[j* C$X7[ C?[  Ct1j D Ds D DV E N E 7 E  EAe F K_s G9&z G9&z G%P)2 G%P)" GOM#  H/ 6 -" H6 K IsT/u~9 IsT/u~t JGTP? KPg*3{ Kb & Lo>  Lo>  Lo> L O=?h]S O=?h]$ O͡b0 O͡b0+ O͡b0 O͡b0 PM 3 Pq pz;? Q)ׇ RE " RE Ru S̃ $<  T -v ]lM ]&()  ]&() g ]/?sg ]/?sg ]X߆v ]v ^m of=rr ^m of=rRZ _Jbz ` iذ? `1y;D auOV a m | b { &  cF-ټR cLb  c߭\(0L dU\K eW>[ e:oD fd3 f1B= f1B= f1B=T f1B= g.O+ ' g.O+  g.O+ ] g1 i5#Bq) i|~v i|~ kZ leU mq>GXU m o(M  o?=  p϶ p϶ r ?4D r ?4 r\&hN rO֫ sո?nN s𐚙  t|܆,w # t|܆,wh u9ͪT uN j !E^ ` ( ϧQfR& ϧQfK 5@g) dI L{ lRB lK Ͻ~f?3 "eHt "eHs -uY? / \M 69 8 N&3 / WD  1R AjDWT | DH#_ :! DH#_ MiTǩ .g5& .g5 >;Dq vW "Hu ғxt 4N j~A .. g~}    OM =ZW*S< jMQ  4qs x FkQ <ӡ? + #v4 Ki {ur {ur } NҶI de  õ  IQ ( 틌? 틌 dI_c JۼpB O # |z; oq7yw oq7yF dZ%R עoCR 4/N i n7  I )@R o M L1 JѮwE JѮwj, ΐGtt XRd XR ']'. 8܋F?  Y #A # m79 M~wt M_vx M_ % ԙT? ';V& H BI pgay  ׹}FO fA c /w$  h TvH &dg+ ) tvV. ~e"A" ~e"A ll? ̰ o at  o atD BB i 9R <-c [ {$ "]! ׷?O ׷s V? ,:8 S ,:8C o? ?  ڮ:4 ڮ:0 ڮ: g>v g> Ja JsY J v& v&  (ש2 hC0A " |*@qi i 9% 2~ 2 )FH )FH x T ( =28 =2 =2 \8; $ ? , ?jE ?# ? i +ę  0=e l: lt CY<6 % d(W? CK@l RR?2 RR $ #4j #4 ( #4 s #4h vH"dS  C] $ o1  o1 O o1  *`Ѹ- Ј f TC `QjX? @L @Lt @L [~l` Aw c љ<*kf љ<*& љ<*t$ љ<* J;< J; TL p/@   H Aij,  by~K by~ xl;  xl; < xl;; xl; $- xl; , xl;j xl; e xl; 77 Fږ(L/ ssžm ^ P6M s' R@T'D R@T' 裂?sN Fj=i OZ U ~F 7yj 7y  s :8Q qPҐ cP a { a 4t Xx& , vM7$% ޲k  ~>N sGŬz#: sGŬz# sGŬz# ,$&Q 0_and 2 p:.Fs p:.Fh 0D K 0DsJ  ɤ Ͷ?\ Ͷt; Ͷ  U3 . W S7_?] S7_? `1=Sx I# ( QtO # ,JI ,J  :y$ tt #GI # #- #- $'!Mó + %ga.5 %ga. %(v $ 'Pg? +@C -Y[ - .!Q>Q& .!Q>$ .!Q>D .!Q> /#h /A$ 0<R 0<K 1\%" 1\% 3$<0D 3$<0 4^YK 4qd 4wB? ( 5P=bE . 5P=bE j 6^˶  8 M  9dQ 9vF. 9; 9|>L? 9|>L $ :Tv :Tv :Tv :Tv :Tve :_xGO :t G3 :iM ;S <~=$ <~=# =je@t >1# >U%T  ?:SRY @Qx+< A')*: AԚfZ- ,> B B B^,  B^, ] FE_b F/!|m F]iMJ F㐵 G4 G}m> GJV}Z/ GJV} GJV} GJV}a HK V V j} WxvpN Wxvp W˛} WȕB&: Z o. q տ>o. ulYj u ŢR? u6  u6s v 3 h$ v 3 , v 3 v7*:4 wS+ x" y/  y/|? y/ $ z j z j zC:v zGI za^S* za^ zb z  z@~ zD))[z {($O=[0 |e*{`j |Vm3s |+r# |+r# , } 2M }QOV  }}[s , }k' ~V*\Q ~V*\Q , ~V*\Q  ~f6G ~]|ts^ ~]|t a# ~]|tt `d8 | @+s R @+s  D&t ^7t ^7t ^7td )CY =L Kaus, Kau Kau a Tӣݨ ! DՖl 1aA 1aA = i] " 4{?k oTۊ$ oTۊ oTۊK qBq C d#z ^ ~- ~ ( CW# Rʣ% g Rʣ%|b Rʣ% (4 XR 2d  [:h: ] w  ~h { Y P Y  !tj j jj j > jt j a 0av hzz"k wPs5 MA%s D q ; {xj ; {x ڢH  ڢH , [wR [w Eï E$ od @ [a ҭ$  ba'L # כ(P כ(P  כ(P e Y?Y Ń ] b C0j; , ;VM) =+ puH .,oPo 1D;8 c[ s7Ռa ]z̩ m ({ . i 0 >. $ mu/ *$t Fw  >RL >RL ?Of s sN 0R} $ rߘ  ( BIt  BIt  .jkh uF $ 翘?  #      E f Bׅ  ( 53D 53 53 * ! *  *| *  * ( * * zR 6P$ 6P y?D ~ K =lL :t* :t :tS WL, ኄn1R '# zO?( * aL $ V" _ V" X C_ , ]L y$P y$P n] f4N Po4 0 Po4 - A}M[ 9 j ބT Ne !,NS # !_, !R "`$aŒ "G<N "טcO ".e- "Zz  #lB$  #lB$? #>^ƛR #Ԧ ߰ %*.L &g &ѺJI &Ώ_r_? ( SJdU (1K{'? (1K{'$ )%C- )byy  )byy  )y{o  )(m  )(m (1 )(m . )(m  *c7  *|P :+. *^ *m # +^)t +jwd ,/2 ,`j .  .h r .h r ml /css 7?a " 7?a 7?a | 8Dԝ+ , 8Dԝ+ ( 8Dԝ+  8Dԝ+y 8Dԝ+s^ 8Dԝ+I 8p{ 8p{] 9>Ծ8K 9>Ծ8 9BXE| 9XڵuN? :޹Ӽt : NE|( :{=] :{= :BxǕW ;p"?flR ;}@ ;}@ ;}@ a}VP >Au& >Au& >Au& >h&V >+& >+ ?HC* ?HC* ? v.rb9Hv( v,ﰙ : v,ﰙ M v,ﰙ 7 v,ﰙ - w~g w~! w~ w(-8#e w y|G $ |3@d? }|4 ~N  ~N $ ~ ? Iw f̓s 9 Q0 Y sN Nt+ N {~3 V0 V0R K( a"vC m E} W ާfN4 ޯzs ޯzU ޯz oOa [ |ӈ. # [Uc$ H &K! `'Wv. `'Wj @-j @-- , ҝ  Jt1 Q/7 xM /\ b, [u2s9 )˜ֻ JU Jڑst Jڑ a QvݠGt* 2Z@Q D( ؒQ $ CWU [4QR .™v  )t% ) $ G_ \ G_? / [h / [h] > $# 5Y Fmuk- Z Z &$Wt< dSg t QtR Y!st I+D 6L  J{1& -. eCTj0 M AOoj K u׋V u׋) %wPFd %wPFR Bo$ /ސ? JÕ A \% NK $] 3&3R DR[ \su ۓbg )FA[ .{XK .{Xa V0 [1  (8Qc V~^ UڌS MI1 ! "9;s "9;s XGkd ' Oy ' Oj Bz = 5t h6C ½l8 \F ½l8v8 򕒺aY" 򕒺a  򕒺aj †х# \s †х# gZd Ŝ\qsR VX;?2 cf8$ b  b  b  ǒ} 8Fx ɸE XT%d XT% y:ލ a E5/ IT{  |Dγ|4 |Dγ( |Dγ  |Dγ i |Dγk |Dγ ( ˝F  ˝F  ˝Fs i^ ́#<  ́#< ́#<jx ́#<YN ́#< (H ́#< ͪ1 λbl Fb }~i( ЍR аCTdJ Cj g3 ݸ~[ f1x f1xQ Ҿ,:1 XIn j^ XIn - XIn ( gO D2+xs Մ46/ Z;R ־n) * ־n)C n$ 䜧  ږq& ږq% ږq/ ږq <K \v 9,#D 9,# ,CB` x : x ( x  x: ۖkԤ % ۧw<}  ۶Dfhs ۶Dfhj" ۶Dfh k? ܯRZW52v ܯRZW52s CYv* CYv CYv Tv9SS ޝ^R ߐΟK ߞASv =! = _g]? ꨸ J/  U L Q ] So   -  , c$`x 7(ҤD 7(Ҥ bΈ1 N Q~L Q~K X,#gY /SgG + !J@ qts$ V"T# Z3 ? 臏5Bj 躧lf 2 躧lf gnii gnii %n$J0 8|l 2 :wU {r Vj n$# \k  b. b. ,m b. Q b. (N v { $ 펩:DP 펩:D , -0hO 󥊰 \  f/B]N ި  vdq , vdq %TD bmf 3 HO{"? HO{" \ z2  7R(2K F2!- F2! C!q| SY= K=:5 2 r (1 gi7&?F gi7&0 gi7&  Ni Ni j@R LNB  LNB a cY /Mǂv R,j R,jU$ @C @  @ rLb  D  *:n4z *:n4I  Y r C ҉ a a Br  Zs # 9Ƚ n%SZ ՝0t Bo12? c gȤ ٩:K ) C T|$ G:w  G:w I")j I") yߖ 0 8쌯8 wil[ H~ `=t j| j ro  !Ԥj Mo/ j~6~d L4w h Km K @N ֱj   ve _4jO{  Ȼۯh  ĝ  ĝ  jt j :CcU I,Ѥf +It?Z Q㓶ba Q㓶b  J s !Ys@t6t "9+<\P "9+<\PH "9+<\P4 "9+<\P #Q #Q  $(|۾ &$rNa &$rW '![s 'νk ( ()2 )A楥X! )M⁷d1 )˻F +8 s +/hD i -.jL -. -va$ .B .B] .BF .BQ .BP /cu /9+X /9+ 0A^j>@ $ 1Ags 2R@ 2BP 2% 3ͅT=' 3ͅT=' 4Y i 6wy? 62} 62} 62} ,( 7й? 9):z 9tbP 9 S 9  9!n- :%n[ :rٜ ;~ n <^VY >+2N ?mHv6 ?mHs A*MJ A# f' AX# tLB AX# tLB i At MT A$h A$7 A$ AmfU C/^l s Ci f{# DK DKS D*OK DrA|Y DiG?zv- EV^_B D EV^_B  EV^_B $ Fllw F-Y FOu  GT D* Gx n G0po}_ H#{ H$E! H$E IΤ IΤ IΤK IΤm IΤ\ IΤY: IΤ# Iּv# IּvR JQ"+Uf Kq4 O ? O(0ж i$ O(0ж $ O(0ж| OW2 OӤ8Ɵl ! O1O? O쥢S) O P[&'" Pf ^ Pfs Pj R!  R` R2GO?` SUw TQY1 TJ gY* UTTUsI UTTUs UTTUsp UTTUs]\ UTTUs UjG $ Xf*' X] ? X Yp,0oo Yp,0 ZT w ZT  Zu]K; Zu] ! Zu]R Zu] [#GU [XO>p/S5 [XO>p/K \|R _ a[QV ax_D j ax_D b gv^R b^o_ b^oR b^o bgc  cngj| cngj| cCȊ cن cFN9 d!PK d!P  emn[ ec2  e KK e K/ e K fh8 fh8 gc>  iv)D i1" iN ~*5~  ~*5~s >` . #+c6F qr/V=9 pmY s cj? M3?* +i]  6 @8 E c .L ӵ6v C  P~^Eh Yx ?}  tWvu! )D [ 1d $ C. ! C. | //*z wt7 ][< i; ][< , ][< + 7tk fշ\ - 8`) 8` (2 v -c$s k7V %@lD0 %@l# %@l %@l L|˒2z w>H _ 5n-! ( $ [AA)' + U i-C i-C  3XTQt; 7b RSF $ =F =F$ =F! I^ " Rmk7L Rmk7 ɴBVDž i R  8B 8B H L;$,? *N{" D. MCT:  0 N 0 U9 0 ] ],Qz p͞,) p͞,)U &(yf uiYN ( w=-y # z>f m (hr? QC5Y Ӥ|#[  qR aV;#QL gmW  rQ ۶#\BR !L ,! ~\78 ܛܜ|` ܛܜ|` 򘙩& l^U l^LC l^ l^J l^C l^]0 l^) l^S ˶`i? ˶`i ˶`i 2*  \(*[8 8)8 H' ؝>R ViTj @ː @ː sFcKs t m~ ( Ɏ`Ο kտk !e@tR !e@b V0s lr lr % :{h?, :{h e ^&: a ||0<j &n_a MX Y- MX  qy .N  ܽRmL ܽRma Z[ N\`:% 쮢Ca d 쮢Ca , ?- ~R! ~R!d ~R!L o!' W!Hc |U9 |U9D P+i P+i Q= K Hx? 35 +& We$w \* w*G * Fg @" #'qkN c(q r NV / , /dR BhH? !P b>f7U Fh YA9/9s YA9/ $ YA9/ YA9/ c;7&] H 4 4& \zA8N \zA8( ?Ij : hS A`]  I^* I^d lP`_ ր `j ? /v1  -g RC -g  E+g E+gt E+g E+g b E+gbK LM*t y5ߺK , g's  g's C xB tW 8d1 Y2kZ FZB\ L 2C s 2C , Ň cb 䅶N, 䅶+ z؏ '_R '_ '_Dq '_! '_ 5AS 5AK L%INH `m:?j К/^r К/^ gL К/^ E К/^ 2 К/^n) К/^  V' V' L? .1 ViR ViP Vi[ uAvL uAvL b9 ? R ryTj7 ryTj ryTjR ,{ܻM C - 8j ?ա! [w,öD [w,ö l&#A l&#K? l&#D! l&#Y  ? @1rS FM( xTW=b* xTW= xTW= PxؘR Pxؘd mէ? tB( , y-xv- 3 3R ^ZRwڷ$ ~, ~,|+ G xD G x G xR oOc v 5ID 5IP 5IK 5I Q)⁗ 1; !4 Ea@c crt@ Cff_a `4I , wƘ" wƘ] *t #n #n #n , U}! ,L " ,L ( ,L ^ ,L Qnlt i Qnlt gu~! s>kK+ ?A . ?A? ?A  !FѡXU8  !FѡXU8| !zO $uWE# $uWE" %"0<?D %"0<j6 %"0< &?LVQ 'sy 'eNTv 'u} 'CY (Uo (kSI )CW *?L}D +!'  ,[et ,nj/y -=Rw  .G7c /|&Q /|&S /O /ò}ɨ d 0s,Wz j+ 0_|*  1T! \5 2g3 2 2 2oS L 4sE 5vq5? 5vq5? 5akJ^# 5 s 5H=LS 5H= 5H=S 6(E>` 7ξs 8ZA 8ZA 9B]K 9|< 4 9|< ;3 <ȡ < \z <, >VU) g ?3)# ?3-  ?絹˒[ A ;v9 A ;/ Aʕ AN B   Bvʠ^ Bvʠ?Z Bvʠ \B B{ C:. D9xS \H F;GX FH.NN4" FH.NN4Z Gpbk HGA[ I?reS| JfW4DR Kpʫ+y8 Kߐ5 Kߐ8 K?xe \ L GE8 L o O M?P O!L O! ! O! P,*0 Pw_ y Pw_ i* Pw_| Pw_ a Q2ZQ2 kC>ZQ - kv:?8 kv: i k";  l=2(D: l=2(D l=2(D l=2(D m8@{s2 n rYg , nqcޑ= oyȢM# a oǵ ( oM\ŤR pn/hrj pn/hr? qL&Ov qL&O q׼$c r  r-? s4+) t6 7 t6 a vp~,( v{Ra v1& c xʢs81# yHJ& z"o zw(s z;,  {hӈ4 }ghՆL }gT6I }L 9# }s }s0 ~0ZN ~ୗ a\ٳ 9% N 9%  aƵ^ =" ="s ="7 ="- ="( )? JS; :f'@ :f't) :f'  :f' V`0C Z. Z.  'I? L# R M,b> & ԻAgK v#8 _ 9T , ҄g1?C VlAS ^~S c *}yêS  #L #LL g"WH ÿ - k a w  -7j" -7 $ -7 :J6 t s t   IWB?8  IWB?8 i IWB?8 XW s dAt l7y? l7y? xdsj xdhR xd (4 xd i s}} 1uj1B;J |_L 20 k4 kR @t L l8k l;F l9 o g;R Y< q[W (}5 E _w ?: _w 5 _w & SGj w>G i 榜w= ^ >=fg =fg`eM^ `eM^ ( ;X;XQ;XMscȅpӻ}5'Rӻ}5' m ӻ}5'ӻ}5' )(< 3H< 3 O O"OR}Re qӛqӛ _r_r _r 1|1 찊S 찊Fl 3}i c5k3 SӠM9RH~ RH~ LQ\(LQ\ #I~ ,=$v \ ![X?^/0H ^/0Hv8&K  ƖS } #7p[ #K8 #R~xH[ $-t!&,c 'OrXP k'OrXP (}yRS (VF(ڡ# F(ڡ#)Tt +M*( כD*( כ +"m@e \+dG,q :0 R5,涣9v,3M3M 3R3Rn3RO3R&3R#3w~3HLj3HL?V3HL -3HLR3HL3HL i 3ƻK3ƻK"4466 8@4ӢRN:G:G8:G #:G $ ;꟦Sg <&ruj ^7JD ?" ?=ImSAsa?=ImSA1?d ?d* ?d* ?d* Ac QAc \)AcnAc Ac B0Y^j Bԣ,jDCRD <vD˙ EYhj E[3V i F`F`F`KBGvgRR HpΛ7Hٿ mJ**K ((J**K!J**K:J**K| Kx+GS KV# K3/)@`K3/)@IK3/)@!K3/)@L$C LXMr4 MC NX%M_ S2Wp aS2WpsTL7UK?U[B U[ VgVg VPβRLDVPβRVguʓ%W-vSSWpD,R"X$2G\=?XB4K X'm&X'mX&C vYWiV Z^q:k0[X7[X [uܤN\+¨g]:Z]:\?N ^ K-{{^ K-{^ K-{?^ K-{L/^ K-{S&^ K-{ _&"E a-p$q* c6paaW cngzoR eghD e&B~Q ,(e&B~Q e"wf=b f#d^g-Y,XU gj~z a hW:Zl)h˖t(jʼ !jI']YE=j +e kLATe m-mAm-mAm-mA $mM(mگNnQ[YNnXLM%nXLM ny+)Po'Z  Co'Z  (]o'Z  $Ro'Z j6o'Z to] 3pU? s؆K s؆K 3s؆K /s؆K $s؆Kj yGt? |uZ|uZ |y G;9|y G;|y G;}z}z~| -L~|;~| ~| ~%5iLa~%5iU~W‚@> f_ _SDnw{vSV; >XR=A?O XisNe8H? !e8H? e8H? Բ$#/t^+Td "+1 # tnWtn<7tn3DxCE]m ?0yY   xr1=s Os\ S0˱1t\St\Y \# ?  :e ?VЭv/׋٤Ȼ&s&?& sL%#VGJxs\?Jxs\lL~jL~-L~ , l }, l ,(]:U Cdd Al u(j +KN0_3e$_3e$G_3e$_!_3e$Kyn%, \t", \kEX˩F {EX˩F #EX˩F !ħ 7W l[J@ \ # L jMƀTt8s8[ yZIS Cr $DCr /Cr i,Crju)?,5 ,5 s?ds?*d c2ʖc2ʖ:4c2ʖ c2ʖ| MG) [ D }^JD9LŇ_ (%y??"(%y?  rl!4kQ !V0ۮ v#v#lv#dv#Lv#S ]̅je]̅1]̅R]̅Y]̅]̅ St*St* Z}k a j>.RN*~5q;ReOR ES EU E2GC^ TY \ŅIJS $(mRZ Z?Z s . -. Z 8080K OpP? PZ ( #*.#*. KuFւF|sւF|yeHyeHD;Ij;IjQ;Ij ;Ij x!b \Q K*+*+X`K0tsaK U<? ELD 2E}G2E}:2E} ?\A']. DMLкs ic">ic"j )4W0 ZU  ZU gtN_ae $O= lO= (;8 ({v (T+[󳀃 s0v9̆E inY?)B9 ͻi * |"OL5zh5zZ55z +]( ΍pzi:wN >a7mGRόG(v϶qo N ױevs_?%7(k>`0t o # QPeSojӁ X*S-L?-L ( :M1B M1BM1BҰE\ aҰE\ {Q{{:{z L霾% M C@/\UC@/\ن7 -? ]_i]_+} Zby¾ ݽÎY eޗ7\e=D ʤv sk<Ksk<S ={: !mm j^Roӝ?,C Ff ,Ff V6],kjtKn Ӓw GshGsGs MFeZFeZ e .Ԙ{?g lQj ڏ ڏ jJH ] 3ʺ8] 3ʺ}W!}W霽'PQ z |9CH@jH@j Pj, a >J_~R&>J_~>J_~ xOdS!ݘU 4S!ݘU xo \cFL5cFL5 'S 'Str'S X'S d@` (Ex̚+CT,h T,h #S-LL#S- ?QQθ @<*> | bo)% ^)% ?E)% s)% 6tt<'4d qfqMT, T, c9" 09b c1)<ҸD)<Ҹ YUjPIP T?qRXA GS?GS GS ֝] -}^XHe ,^XHe^XHe ^XHe f^XHeb^XHe K^XHes ba? ba f& f& f& sf& ,m0Vjmr8#K8iws n˫A $;"ں}lۦjBؼ5ؼ5nY4 $ nY4 ƮhJ " IG 9) /j]S /j]K ,N  K6C%!c?HR &tkIkIa ޴-$P` b* s Izw+48DDJ ?m=g2 =?vߪ% ?9HU l+?+ X]8?+ X*A* AB+BR(B D*Nd DbAkr Dfѕ Dfѕ rDfѕtGdwj-jGCTRGjgG ?G|G7 I#[*} J&v<J& <J&MC64#vM)e?NT<צ7=NT<צ7=?,NT<צ7=N'Y Nޮьl]PۘAw jQg8}QkQCs S#v;<(? Td cZT"Gk V3 $oV3 8V3 +V3V|&V|& W}k0(X*O@ܨ -X*O@ܨs*X*O@ܨtYG. YG. YG. [F wI\>ر \F, %\i`'S\i`'K\i`']0"odv*]0"odv ]@^ 5q _B>A a j ,a֋|$qjHa֋|$q :a֋|$qb83R c$`{~Cc&~dEu)UdEu)dh̠ e͟- _fjFSf6 *i<\i^DZi^i Нjg o k=Hl`e/sljh]^ (ljh]^ lwR lwR $ m&m&m& n]o% q $n]o% q o3{DoI1!p:q4h r* } TrҐUXrҐU a1rҐU rҐU sz s6~$Rs6~$R wޚp2 xESqxESq>{~ # | єQ (|߆ϗ|߆ϗa~AR ~ V uou uj ә' j>4|#!jT\.j%s"@i;Rn5Js #7^l $:#ކ+I[ I[[ٺk/,b0o2' jvWG &Z8tŞFsONŞFsOR |j? u m_U Tc=Sʝ9 ÁF "l'q l'q?xG([pC\w$pC\w + xǏ]"> ˨lt[(Bώ*-dfp e*M^ #E67 ҝw`o ɴɴCʤUYp; ˮ#Lˮ#ˮ#ˮ#Y`ˮ#Xˮ#S3ˮ#Q D*dN׎׎R XxV]L!4 L!4 k#CZ nx%x q'S 0q'S r. C5m#  j+ $*_<6^?A*_<6^ GK Xe?Kb[2:>p_˛8gdRgd$gdgd` j 䬗 崩LL !`!`P!`^ƥ (P_5%}/_5%}p_5%}E_5%} w} (軨`軨`Nb $9~jaR2뽭I EX- =/?N=/ 'Dy14j0cDZ?cDZcDZ R$(R .Ց 3ddCddCbԁ9  '(\! \!R "lZ9QM9QMtkQ tkQ JJ J dP2dP(,ר ,ר ,S?9VZFN 9VZFN a06! vY | bt)ƿ[q #.S(k.r7}#QJۈ wBp*XO[ "XO[v BycByc # 8(hbřZbřbřLFbřS!bř  B$ Kz/ ,i Kz/ L  EPspx  u 2 r!MM? ᓵͷo  I,F1s t~ >F+e P ne P{e P ( &~D%-l^UCK 82S <(![![qc s 8ì) YQE?= d1 e's4 /KKvk'ʹ6w6w6w|6w6w )?w)!) xdk xdt ŇZH"?Nyi!"?Nyi $#xG|BR $5Ss$O &2=(ZS'17yR'D  (Mh a( P+k );(wU)Q>/)Q>+)Q>)Q>a)Q>] .Hwݯ/(eqw+/lټlVI[03d3YS03d3Y1P\MD1P\M1=zd2[G 2}3}Y&8#44Z) (4Z) 5E-[ 7QvMR 7cVԟ H37cVԟ H37cVԟ H7gM 8* xqv82C :v:vQt:vY:v:vK :$=\V:}cvS:5#`iv;l,-;l,-] ood=nbY ?6 $?7ݦ9?7ݦ ,?7ݦ?7ݦ $?7ݦ ??7ݦ ?7ݦ ?0gpDY ?0gpDY@?0gpDY i?0gpDYjAHJT B^4$ SBEu C[8(C[8Y Cq̵R.D|D  Dޅj DFX^ Fvђ-=Fvђ-RgFvђ-Fvђ-Fvђ-Fvђ-Fvђ-]Fvђ-QFvђ-ZFvђ- Hq. (JڦjJpYN0J /OJ /O&J /OS J /O Kt? Lui&*Lqs|O9+bj OT6R PB@E Qi A SJw, + S\+y U~ 0V% VA/wVA/wW::WSПS;RYTv6sYTv6hUYTv6 1YTv6 \YTv6|Y.Cg Y.Cg  ZC [ NA ,[ NA]0jD a]l j ]uIK^pXj _Y riv" aU &F bdm"*Q bx"bxbxbxUbx bxbxbxbxb{FeCȸ9f>/f>v f[LU fy?7 gU=gʅ'Q g{ma $ g\K: g:ۇDhaJZ ,7haJZshaJZ iXL i3j-i3j9"j!te j!te jsayN_jjsayN_ ,AjsayN_ !k| XEk| XERk??5l#*cw; l3T $lpfضQ l*nEjmՃnT"[ omb0Somb0LoQooRoQoo$oQoooQoo pT_p>/>X \ p*?`t}XL t\W{Q (t\W{QjtwM0@YGtR;n3(Ov EX vcW:vcW:weo)weo)}weo)  weo)c wNq y^t|d ht,|n,Ud ~$1 $~%ق {ve 8-%m %s/%sR%s j8  , ̇i?ṁi 牤<1S]jB?yDiSDiK Di St"}St"pe-`>YBkR {v ! -D'-%--)gFB :#R+[D~N pHw:RR%ѱuJVl1LVl1#Vl1j P) ИڨGf rwv 4 L4 / |XO s 7f t |yv >nx 6  {$ i  ; ;^_ )R_Qv}m`bJlWy| Vy"  !A#~n`:hnRSftD>[!'xW[ \p1 hX . //?/ a /: ɞg{VK\v3 taLN5>taaN5>ta 7dߜ4(Ĵ ߜ4(ĴX2$/t X2$/ 1ZGCd.@P{=@P{=@P{=R2@P{=t,? ;M (t |؇V `  A^ $4 A^ K7 xiZM?  xݧ  p8 $ p8 ,r p8 V p8) p8 p8 #x^r#K#%LNu}IW] %YH(%YH '(&Y(2 ,(2  (ÿqL0 :(ÿqL0/(ÿqL0(ÿqL0R)% )8}8 ()8}8? )8}8 *t*v *yK֙ -Lhf-LhdO-Lh%-Lh-V?-V?j+-V? $-V? , .r%aR . *2 D2  2(|Z !)2DbQ@2~-N 3"b&T$"35)L35)4\B3 s04\B3 \(4\B3 n4Mb25dA &5dA  6x : 7A&>_7A&>#7A&>S 7eVY 9АG \ 9m"A :A`;@t,<i[Q< <'v q <'v q =]? =zf-j#@ A$@վ ( A;]BiOm BoqEjBoqE CY-CYC(á C(á|C(á (C@%etC#:C#: C#: D „V DWڡDWڡ:E E9E̡] GQGQ HW鷟CFHW鷟7HW鷟QJ c@ Jy> K\Bʊ L/ L/ P8CU QPSG  Pduc Pq$ PzDi gPzDi?PG#od#SF (2S5Gs TvRVUSQN VMWmV -<?V;aEujVWWkK Wc WݩD1WݩWݩWݩQBWݩR-Xl/Xl/CXl/ ,-Xl/ %Xl/s XÛcՒ> gYGf7_@ZHУs'Z ZtW  SZtW  Z+W $]}H]} m ].K].j,]. ]. \^ _ zj_{~ݘ/||AR~zT(Rf ~zT(Rf ~I %~Yfu?n~Yfu %p_\: L/(9a @WQo= 3< 3<? B^g ݹv%Jki/tR vb 5vb \1,Uaj/W:P? +uj#+u QA:d#i-5t {׷ (H{׷ (v1{ ( v1{ Kps lKIWKI4KIKIKI dh e {-?I |sr#> &KRjHq!v,ג]sf4b?,J.lG  ?j  ?jv ?j % ?j $ǃ%q i Hz'@9C:4QS d 3d 3s qZ (TrC% tMLbejLbeCOLbeFTHTUT 3I,ƙ*,ƙD!,ƙ,ƙ,ƙACOOJ!*S7#? 6v%Ǯ ,Ǯ>*H{) *H{)v*H{) *H{) Pw(8Pw(8 ZaDZa /%}t/%}k/%} ݿN` RZJZv RpL`?#Jgb:   J -Q3K h(.K`S KR~W?uKKK $MK9@K K mK ($^ׯt NfT 鸽o< Nl[ {S [* Cϔ1ϔ(1ϔC īLLD?aW # va  W  W us^B+t|s^B+ƦX,\ƦX,XƦX,R 5>[nZ<WBDiDR2h; Mh; $'|C9a'|C'|CL]L]U 2L!2L \ k)k)V\ jTmt - *#k&*#V¡瀏¡瀏}} !C&s!C&j!C&t !C& b;%t g$ i0!8ɪBn ( ,2 zA$G)T:G)T sZeBd0 ""ͽTuj m|XO .3eu% ayA$H 2Ё]9t8Ё]9R Џ_ZyЏ_Zyw 5yu7Q=5yu7R5yu75yu7K H H 3H H $dÊ  T  bjfd bjfj  Ym l-6|M.ٌtx$ ٕT^=R bf! lqIڻ." (xH?9? ۹ ~a)/ caM  _,9;?~Of7#QL@pvp~Kpvp~L:pvp~*pvp~pvp~ pvp~ B1 ٹS9 ϚRwϚRwfpvQ㡍ZhZ 3Z0D?_ ff -  Rfb0N*U=ZUtm@|T !хVN2#H |  d4N d4 M a T'OqNQZ jOy`%Rty(uy("BZ^3 5)#ay) +Ϟ353F6A漺R mɇj Mt%kĝ!P$|[ --sZ i&sZ \̫꾩 rH 5 2{?43<S43< Ά Sd!J %؉? ^ %H \J? ifz?Q/7,* DM6LlW:(-lW:(-  Ihjj'hjlʋ] @i"LB,BR߲?t $LCr?ms)42Tm \}] \}] *GO` A q a q c/} c/} t]\!e ܒ  +dKh  1<  &~N: P$\j w7 'Sp  ]p) - ]p)D ,1HxN y$zy$zDk))YJDk))9'Dk))bCo TbCo a"bCo E*j9<G6Gj]2K/(tDfsZ(tDf L(tDf i<(tDf g$(tDfj(tDf sBwRY5VY $B@VN PX Hr3|i|3|i $nd sa> ?2I+G a+G rd1 M*rd1 ]2 ?Z[ ս.2ս.$ >Y|  s%_ i XӘ10 xe.zD g f|Z?!ioC~s !aZ "$޹ &"$޹t"$޹ "$޹ \"$޹ "$޹ "wX"gcR2#\˦S #jřVH#jřVH$E泥3^$[#&r'ZS 'y'y ',L&(FL \ (FLj ).sT *AQ *Ybё!*Ybё*Ybё +HOt<+HO +VGNR(+VGN ,CĝmAt,Rnx -Dӏ$ -獛=~ .KYsS5.{|/!A s 0ژ#xR 1NP 1ˎt1ˎ 2"n;t3`X2fj 3e;9?-3e;9 3]3]R^3]13]3]3 3 4#&PB * 4~ 5GNs 6 03o6QUr$c 7Y}Q s7Y}Q |7v} 8]-!D"T9q` :ya?:zP°W;+3C`;xBء";kar;karF;kar7;kar@j0; >Tia>Tia>0%ԍ]?LGE?LGE ?TdHDADmb'gE^?ERIwS!F3 G` H6:jHh2Tt J!+ JЭ# ,-KbÇ<NL LCz \ Lh};m2NgFYtNgFY NX OS@P Ȣ&?P Ȣ& P /ZQiH Q3# QNrb TM 6igTM 6i >TΎ "TΎ U93 UJ9C UQj VŊ@ V^KI!?X  X~ ,X$' |X$' XYc%Y8t] Zq  \kl4v\\P1)N \\P1) ]'k s ^cHoR^lyw ^J"^Jj ^EMR_ȆSB` vb `M>Do  bѷ (bѷ c7$s-c7$t!c7$ c_jXcף> d5 Dd5 Qd5  e#V)q2j"e#V)q2? e 3+fR'e 3+f e 3+fN e`mSe`m ef>?. #f ʃg*eV_Ng~wgd,hd:Z ahRViF5-iL> )j < jG`jp~8=Ql$i)l$i)m3w>$m3w>$ m3w>$$ mB$mB$Bni{@ o >.vsoCh pz,˔ppz,˔ p3-j g&pZmQ*(pZmQ pZmQ| p{y`ZpǶ9驽[pǶ9驽rgU sy㞥s# .s# tD2#tD2# g tb(^HXM # t7զu}f^NCu}f^u}f^ ujv*Z $w>sw稵2C sw稵2C w稵2C w稵2C  xE;20RxFy?xFy #zGB #z653 {Qsk |,`0? }eZg| }eZg| ~#U2~c)6!?~c)6! i~c)6!iSt BM~ Q愽 4όU@4όL=L=] S 0Vr ޸& OkCQ7&Lq*G t>?t>jCt> ٧ m? JtJ n4 2 i2j ۿۿ%;$ H (;$ H +;s>E`?j ; N<` adҡDQҡDQҡDQ$ OPij!>KRj p0SS0s -௰ g"+NcfE&f&Emf&Em _f&Em f&Em ,f&Em ;f&Emsf&Em i]f&Em $Df&Emj0f&Em (1fDH $/:) # 7 aƬVN[ƬVR5ojA%PFs!%PF^ i1 m^ i1 b s T 鄫R$DD  UW .dZ r@sW r@sW r@sW p k4S*؞g@j)BR ^)~a- pBr LG !%&%R ЭP~ ,ЭP~ЭP~  ub fuW>ƾ'-șH -șH ,-șH)-șH $-șH i ` \ #ֽh;K 4G"@G"(*cLv(*cLj ,]sE ,]Y0 ,] ,]t  ,] .=<fq"ȡq"ȡL zgc%t (-qқ ? N+~ !bƠs fnH S C#S:~qH6ﱥۊv ᧪s᧪sVFi?psL˯oR |?q&} $ pt0WN~ $T]dz:T]dzZſ[ Y{QAs bϛy QTQu ǩeˤ i.ǩeˤ ǭ߷=e#)%+ ^)%+Â? Ȇ@/l: ț#D15ɶxe aIl( ʼ5F5 ,G R%~4 s.:;tvIL kIL?ILsIL VPȊ#B )PȊ#BtPȊ#B6PȊ#B a'^-D ΃GÀAU ? $#?jd..vz az z 귁 R ӄ(‘a8‘a 8`cg f4=,/Ef4=,/֛C s F|F qx"M? x"Mj=׍DۡFb p^N gnYB (}`NpƉ`vpƉ`ݑ=\ GA 5&1{85&13Wz%0դ'qG" W U=v _#a _# BB $B9   |  a  g VQ i)¬th ¬thn9Z($ii ƆFUM-aꨵt N-N- #o&  b c^b ih% s _h/H#*OkpF"7 ] R] QZX]ӿ]r/|q% $o;iS% MF07O. ;]7O. :7O. |7O. { _'t_'k Od~Q,O $njnX5ǐx \: l~"3S3U[P0-3 ( No Z +jL+jL*v7>r 97>r FjZj)l8 C ecU bڠ$ 6 , 6* 6 6 $- 6  6  WņC Wņ  øw(s si: siQ si  si  @ōu?׬Df3P(${CXKFcnͩZFcnͩ " G j-wy a{|WMGSV|WMGߜ+Kߜ+ 8ssaڂ ڂ ڂ ,IOO#KsR :V X[ rT"g \كO UكO uSkR .#SkR %V4hDZY3 b*CLb*d b*-   c !P*}PQYZ&B` c  S#@.@?  SG i SG iD! SG i| SG i; SG i SG i  ⊪,k \!zV?d " 8@i#" 8@iU"DK~|"rwB C"Ï\B $)er$H\T; $T!q+$Z"UL$Z"U $Z"U%#V %L4NP%L4N!%L4N%L4N &G&ؠ 'X8 (10 b(10t3(10 %(10 !(10b(10 ( (^.~ (Px>#?2)HW $*61cf *61cf?,mY ._g..x /=]c*/=]c* 05?2?7R 3:Fho i 3k 5Rr)5Rr5T 5T 5#& 6D? 7~4! , 8"3.i n 8_ 8Q~9.k#9.k[9.k;_K ;` =+=j>4>4N > > >n> g(>|?Z 0RC?Z 0_?냇ǣ? @en"@ Ayg@ BPy+fBPy+&BPy+BD9]vBZ%$DQODQOjDQODQOKkDQOR8DQO E(ENbENbENbEWW , F(- FH ?'H#J޹CH&CPK6H&CPK*[ͽ~1KiaGKuG֯Qp KuG֯QpvLt?s1Lփ!QL2T MQ~h -MT L M[$N*j@CVOuM?N P#Mc`QN6Em RP0/ # R`S4dS S^S SS񃜱G TkLTkZ Us Xi%̠> Xi%̠> i Y-)8Y}!Y-)8Y}Y-)8Y}VY-)8Y} 'Y-)8Y} ,Y-)8Y}sY(0?Z!̰kZ!̰ nZ!̰ t[-(][& z ]&ک' (m]&ک' H]d*]g]jS]]A  ]]A \ ]m; a%]m;]9U l `vi$aFv[jaDZ a2s-Xjbwyh垭 w b&Bb& b영.bZ abZscɀ]Lcɀd g d g ,d gj de^ (de^sd8ieJ!hB#eܻ{]ei4 \ ei4k f9j (4fT\ g(h< 3 h<ipb~[8?ipb~[8 ipb~[8 k(( A kkkklve Hlve*lves)l@$qC lcM1SthlcM1S ;lcM1S2lcM1Sj(lmHelmHLAlmHZl:< glEOK mIGmh;p mh;p nb-YnB(Z oȰKKeoȰKKespr#pr ( p^+kkp^+kk]p^+kkQWp^+kkp^+kk rZQ_sǵ U itI/% tI/%K tV v+dwv+dvΚ(YQXvΚ(YvΚ(YRvΚ(YK woBx2Ytx2Y z{YDQ4z{YD%z{YD |M)r |nG'Lu \"|رƷNI $ }a #~<،q ~`x^$]LlLl unD4U?.y ݳҒ aݳҒBt~[oh\"oh\$oh\ t}yR: ?v0: ?seJ& b &  u¸ @%= 2yxqs NT@o  j/ j/ j/hY'<hY' \ hY' sms?  $? sGQ -3v^++^+d Axqfew87,TXL[i =   39<Plv aB(D5 F;EZY#Z s@8(o%i(o% ,C(o%-(o% (o% H M Th.W2 sP sP*Tq7]#򅌗C.4 [fi/? L{ d !  `R= ,Ku -*ߪ6nA41 6nA41 ]wp (NZ{ $ez~ CX7lr?{ S wO $6߶!R;yyh $ d`s?I3-2sRKaZY ( ̝…HÇN ޚ^ ޚ^ axޚ^ 3 Ֆ yl]zS 4~uIB uIB?ǢZ \QV I % C%vI'ZXmcL{ZXmc?ZXmcSZXmc ZXmc ʳML5|  lFz ™[?"Rs"R"ڕdR Mt a2Mt t&Mt :$l(? @ϼ@Qr o~1Ro~1z tjz  a2z YѰ)T"Ѱ)TQL(Ӟ^" Է# Uqa (  ;d  )`fXQfXQM؍`% !+)!+hӍU' ٶx@7] L!"Z|W1{H̨os{H̨o JfP  س+D~`= ~1-~1 ߃zrh#1G m߀j Sr'< [Sr'<-Sr'< Sr'< ,Sr'<Ng- , 4?, 4շN L+TH‎ c J 0YCƼ a:CuB @:CuB|0:CuB:CuB 巫c^')wE0^! eN2{ M<s[|3s[|CY m ,df쉘{LC ()bdj {v+>J%u:Y:Y:Y:Y ̊Fs  ^hP% ^hP% )`)` Uu/ & 7Aȓ  WVZ 1WVZ WVZ (5E?8 B L! :a`G۠r$yUs . 6Wjks%h:'j |F*C/;*C/K*C/X #  ˄ z ˄t6 ˄ ( ,(;#H:Q? Q? v}]>v}Ih#ssd9!t-s  -ѫR'?fB<: 4T XqN8LG ;5 :פl+:zl :zl*abc2aקKSקK I< % 5 )>Z)>Z)>Z\Wv  nnN %T?" wh % 㝊 ( lH  -M*  -M*|  -M*  /jt6YdB2dB2 ,dB2 edB2jdB2s|^Ys9Ho N .%'s.%'?\k{ --R <@$ R(R8)# w#R75sjOs3b |~@RKMK  + ~  p 's\R's\  'y CZ?:8ML;8M 8M  j j ( jt j S} S} "S} t%6tL}O^x.?"x. h=pY/xt9( 9Y`-k 9Y`-8!f.F!f.R!{=e-L!:!z "Oe܂ ""Oe܂ $SlRR %˖S &/UcRz'4]p  '2yO '^YY;*V'^YY;*J'{ $'ة!'J ,K ).\=?y *+02vD +\=qX`?,}>-ԗ,}>-ԗs#,}>-ԗ (",}>-ԗ ,}>-ԗ ,rNs,}vjk.gSS/qLک& ,'0T 01{ f?0YQO0Y 0nKS0nK 0R 2n׻2n׻2Fiڷ 2Fiڷ ,3}('3}('K 5 !N 5C#6M H7ֈH $8=3P 85/9885/985/98ִ) 8ִ) 9C:8 -1;1<1.t1;1<1.Y1;1<1.*;1<1.j<ё> <5 # =>Ĩ ,1=>Ĩ =Uy` ====K >xWN>xW'>AV]>AV] ?dM ?ҷ ?# iz?#d?#2?#j,?#*?#s@|aAz[  BM߫XL%BORW%BORW%Byg Byg| C ܒn?CM˄C C .C NE#Ette5E GwG_"jHs)Hj Hb IDh%z *IDh%z eIDh%z J۩W wZ K* LXa Lʶ%u#Lʶ%u]L(Eg M )*ot)? *UŨ[ *dm +ʯA)s+ʯA) +g{) +MhY +Y4d| ,O7wY ,Ɋ*^D -Zo(-+5`..v]vnR.e! /NGr/NGr/NGr/aLH/a/aU0&=0)a 01K,+R 1_B 1k]R#1k] 3l 3l N3+v!4!}/ 42"E 4͑D2w4͑D2ws5,,)|5,,)s 5檱6r!6x'Ļ 6̢ 7o 9#9#Z9#9#] : f<gv<gv=,)b =6Ѡ2 >8y +>F[ ?1}/jJ:@ AdԝwS CR/oC"C@DG9' - FMXK aFMXKsgFMXKF6F6Fl㮼d+Fl㮼d Fl㮼d G]~J j!H>C4~Z HVrH J18KJ^ٞ a JC> K_< K;n:K9 U L'jM靠B *NjbtO=-˃>SO=-˃>L@O=-˃>O=-˃>KO=-˃>O=-˃>ZO=-˃>SOA P#r ?zPz&yQ a%Ps; 2#Sp' TUaD| UrE  UJ`!@Q VP i VBz Wd Wd WdWdWdWdhWd)Wd&Xt4 cY!Lfmh <Y!Lfmh i YVoC  Z < 4ZSk \[VI:I[VI:I ]4Wn?h^Zv^3m^ሸ(fR&_ ht `eR aAk3%aAk3% eaAk3%aAk3%a0+ bo9lg6bo9lbl Mbldb c( ) dl) (=dv}U*g7P1}og R gޝ~l"gъA^:h2;:lY7hWj hR~ i ,i (7i iwiis i;n id uiR0N k% k% kz;+ ik4tX lTZ[X%lTZ[XQmbF nXE- oJ0X ( o( ,npc A_ p:!c[)pI?%pIpIpI rU{Lru60ru60% rvӥF? rj Es\lzRs\lzRs^~= s s]uv s ux\ wu\ ^w{' x),H y 3Qz=Q tzUT zUT zUT {:j7a|2O | } `͐j} `͐} `͐ } `͐ e }>+R }g }H%}m8}m] }m}m~"kDN~X#/KlX 7bkCQe#  k!Rkk!Rk.k!Rk#*~:e w%Ck fSKb #D# D#tn ~!n ~n ~ , W6L ˇ@EZ1μ? .[N 2 Rt5"Ah @l-?9@l- m/@l-  @y͸CS 1Nqs 8ѳ!? gVW QAd^ Ad^ S(t `+?`+ DRtj(26 + 9UPgvGyLk G|3G| *\)?  $KF؏ a7h} Kh} .ZXe2 .ZXe2  ,  6?uK ߏN }g (D}g%}g ::V , $_vm -|7 gQK|=sQ|=? 3[/-t 3SfPaΤ h4١.4١ -pTϦ O! O! O! O! :e a "bXvI7v/?އ LsL %.BaP? h#pIh#pI 7Cg$Pe! י z,O&NS`=- i1 m jvr  @y\&THR Xww,ʸ/!x _p|I_pv_p S_p{ _p9 jB+ 2)N6N #) ͙H>] W]fk q#)V Q Q b\ Vb\ Cb\ ;b\?+b\ b\ (>xp z@b0z@)z@Yz@ (є3{ jѹDMֿ sYذD!<} ԡ,{J "L96 )"L96 kPL -DŽ -DŽ ׷¾ Ӌ0h/ !N Ʀ'̵VLf-CkD Dc]M ۫]l}Ɋ c>SjE>SRܢg],0݅]sݠYmsݵ/xv%%RpV ߋ<*')) jS.bX1QNbX1QbX1QbX1Qd1V @d1V Pd1V Kd1V d >{A :*\`,xxLx x c9|?c9|=c9|jLiL LiL fu&f? j$ +yu iQyu *yu Ȥ050fR#:  z? #rFc ѿm ($Z_ ($Z_ ꫾|꫾|v꫾|K|_eN-!Q!L!! }o }o U3Ԑ:Rts?nwCb Si -  n/sll ݜ _"8yz,$I  # UCºGlZj9Z4.Nv9.Nv7.NvU.A WZA` 3>}k@3>} +3>}`p ˺4 ?KƃpN:KƃpN+KƃpNKƃpNKƃpNZ[j Yo$91<R  ԾDNqDE%S p_o2p_o.f i KX 4 354 35[4 354 35 4 35  X+ Xt' #!,n  $N  Ja[ V , }z͒N 6'j 'Mt 3^`RfQND&? ^ jֺt) h < h7 h)}ђD U *dbx? ϠCϠ r Y hmzT ł ࡐ+(qVLjR( @Ⱦ& Ե,`'w i`'wu`'wj.`'ws.wD\m {*u{*JO { ",s5|Z;Z;RZ;=O: 1_{n#K I>|? \l>= \l>=]!c{> !-w\,~ , "%=x$xm c $ b$Kc,1$zb8 &R(6kSA(a|Sj)}5 #*XɊD**XɊ*lb!a*5CO c,*5CO m *5CO e*+m ,{Y_5,D兑-in .g]t .o֧ dU.o֧.%_N .w-y[#/zA:P/6/6< 0\<-0\<-0\<- 1|cpf+Z2ُIR 4U`'65Kbv*K6K{ 46K{36K{ e%6K{%6ZNjv 6R[6ä}] 6>P77Iw+ 7be eG8΀08ۅB=:S8":|S[;_c3^Z *:;v <9=+G=+=+d =tk= a3=Y(==*=ē! >&A? >8؟ >8؟ >Sd" 5>Sd" >Sd";>Sd" l>Sd"8>ǷO>ǷO >ǷO >" ] ?G(<?y=\ A6}J B B; ZB; b(D E D E?EjqoEjq$EjqEjqEjq Jjl9Jjl9 -Jbi{JbiDJbiJ!Gs9K9p\K<ԺI=jK<ԺI=kdK<ԺI=t K<ԺI=K<ԺI=s LO L즆 aL즆Y O=zO2<0 $ ON;x PB7s0PB7'PB7? Q~ovQ.<?S3 TI TmX?dS Uzb " V U_?]V U_ X3 i(X3 'X乃P/<| ZD? [+́T2\OXs1]:]: $ `NǗ a!6#ݻ]b)C5 1b)C5 1b- eb- $ d!d %d ieRz? e X[-<fOĘf; fOĘf; f[8?gWX #hOD$h,wQLi}w2H i}w2H? iL!i$io`0j lͭXĨ&2l[3Gmd?Mmd ( naH naHL ogzD qV`orO qjgYq", $q", \q",srgb ^ r_1$ ft 8Q0t 'tt ' (u`!0vHܸliPw0Ew0ER w@&][ xi߄\}{> A |4 GX j |}K|Til|qL#t}0X D f;@؋J s iKt9iKk =5Oj ̀L. =S#5*> ( a l SG%GG G] D ʄʄBʄ6ʄP(騗E Ӱ: $ކYsDȧ sZ7Ny]7Ny {ep4 0p4 i$p4 p4 %mN #  ?6:Ӏ#6:Ӏ l +=Ҍ. LCR+LC,\kR!]!UB! #A18k#A18#A18Y  DB um\6R 1f 1fj1f1fs  "1 "qlqlN  MTA MTASoPee ioPee{  E EY E oA gj͜  wf&Sr7cr7c . Ϊ.5 \jl\ eJ=:"yjha~ |</n%v -A#qGqv ˉQ ,xw , }WFS QnD@  4 g7 @ܻov!  T   T ݰT qj~ j 7` jcV=?  6ya_+6ya;yvk;yv9At SEt {FL` L` sL` ,L` L` L`  ہK,r9 L>i; iЍܙ]iЍܙg'ڢ^ʕ?5أL a 4i \(?#rI (۰v=4FJFZ*YQ 9)_ WefKJ " p L skV ݃vO `Eârb 5^= o g Oojs Ooj Oojk% Oojt Ooj ( CK eh*$#k cs pcs Hcs s>| 68j68I68<68 ,7>Α|x%.^: c8j_PY j_PY גt 6ꂘ=?`W"W" s W" 되na (,^O t]@)j җY j"1ֆCj AapՖJAapՖcL:?ы +޾N+򧛻 ãb ]3'-f!i FIFI&x3äRT&x3ä&x3ä 1p] ƴ+l . ͍> ̅JOJOJ]Քg"d ?}EaV DC eDC DC 9P(#~ ^j "k6N s_ug w!ef#6!tS "4S, YQ Y Y[ Y Yd dzAkMb??<] ٠ ڄiS?IkJS?IS?ItxO1 (5`t U0]A(Su $Su $Q jΨ s + UwN6N+ QU ٨vnOZ 9J  p[A  c  _ ]Ҥ  [{J) PR y P aA/d͝k# U)U >0R Wu2ƅ;~ƅ;!9D86i?9D86i It; -j -? -sD - ;'s);'t TUY(!! .2]Z C'( M|,M|,M|%zN g!QI $ !2]Ӈ "^t "^t ( "l:N<&"ۤ,U<"#  #~~Z >$> , $֔]PNm%9b^ %PBc &ۺ q?#&OZ^v&U%Fjs3&U%Fj|!&U%Fj &H|&, '>]s 'k/'&O -'I` ( (!ObR) *A5v*A5v +u b&+7} ;.F# /2 Q /R6K g/R6K$/R6KS /jIl 06vh 06vh0vjO}I 0vjO}IS0vjO}I 1ʀZ 2=n=G2=n= /2=n= 283a   4^_?$ 5=eg5Zw[0 6P *dt6u;K6['τ!7/ΐ:7Xv|?7Xv|O7Xv| (!7^,#7^,Q 8w@E9Y:$Tj :|O>%#:jBj:jBj a ;QN,?6;D>,?6;$ >"QS ? -pt?C? @$E @D"2^ASmcA-ۼdMAץC AץC9 BRl/[B"Bv: BtGx:!Bº #B~njn &C5h"|C5h" i CKg/(sCyo D`mR \D):3 EoMEoMF QY4 KF QY4?FD\q i FD\q g G`&I*qLI?#B6I?#BLJ-_ ;tJ-_ ;t KR#kvjKzy'?K L7Sp) L0ImެrLc1çGLc1çLw/3 Mý7CMý7PMý7 Mý7 M4z  Nw5),w Nw5),w & Oo{5OFvB jOFvB Q0/rQ0/r(Q0/rjQ0/r ^%R Sid RƁc NhTzE8 TQRA!wU1" XOnQ%Yv1"|T'[HF]|\p + \pR\pL \Cf\Cf ]>2W@Jd^֋t$^֋t^֋t ^֋ts^֋t $_]K5% [_^K`|a"/ aVYSD a>2a+ 3a+wa+a+R*a+ya+a+a+4a+(a+$a+Qa+a+a+ b:k c C":nc C":nSd^ d.O eT \ eKBC eKBC eKHs fe;, fe;, g!ú6Y? hK..2 j0>°t , k|ٶd*k|ٶdkE kK|5j#kK|5j#O lPlPl!N ,/l!N mԎ a m1>L mLh mLN? n82nR?("so)pfȴ\'9 pҤR qAHA r PrVD̹?rVD̹jrVD̹ t2\ts\'%t5gj&u6iv w''B!4w;έxZ*w;έxZ xr cxrt y4OZTy:b? yLg L {Gu*X {&g  }=0o }ۃ}Q_;}Q_~t r<j~t r<t#~t r<sC.?rt* )Lޚs ;)$ =f4 c+f4 #QrA*"iC a4R\B2[ PilF.PilFPilF Q ˱gi ;?} fԑ 3} fԑj-} fԑRHx '5|Z(v!O?d#Le y  À3YRÀ3YS\3sب #@jS  >v$bDi *(3BnN4qt9 GTS*bU~ ,"bU~ XWWG yy_$}iZ $}iZ --j- , V3}$ "0?C"0 uwsf_juwsf_ %T? `4QQ !Q V^#V^uL -xU1Vs84N +[?) %@+ ', k $ bWbWDbWQ bW ;O7&t %;$ nRwnAL!.K=- ?h~'b { WkjLmM$XP?z Uv<^W w1hO3%$?h , C_4q%d/ovd/ov]  p0E3>?sDWKơP Ni /urU*K/urU*/urU*qe^ "p+%G<B6 ($B6 $B6B6 axN.]# q!]# qP#=( f?sZ6W l[ 8Q°ޞ 4çL|8 Wor2   ZK_ ZK_ ,  ZK_ F(KYeHdjOy7aYǾFɖǾFɖRǾFɖKǾFɖQcǾFɖ  }LY]O8 97b5 $hFnɋ؃j sRsHjsH sH ,sH : 6tgmFtkoSp ݻ88G ,  K RGvW6J RGvW6JK ߘZ䍇%,[v 6Eɇj6Eɇ56Eɇ ,6Eɇ Ws%mRu|u| ٲ5ٲ ٲ 7v7v OcԦ m g// nKQbmOLQ*r~##11R? |jEU ?=޾I} Y=޾I}%UDG/ VO7S翸kӍl^w \xa< 8  Ly  a푶Db3k' UgbUgtUgk GŤ "@iM&?@iM&hW `B.44EQ a$sj???#ڣ e C].C "C C ՉX 9(7t9(7sJ 7Q_N^: aX>? J[ ,ı  ı  P) *:* m a j!&(W18W18RA  .xY .x c s8Xss8Xt{؞؞ e1؞k؞s5w+WRr ,Rr r?"c  Nom[ Nom[? {/d {/d  {/dY 2  4G[_ 4G  YǏ({  )0 Ѫ  u%N2KTF 4h* -: oj $ 2T̤1b Rk2'ʘ^"Y f? !zyr`SfsikM \5TA `R `!'i!'i !.nst$8!.nst##7VuR $+P$yw %/9nY;&BBViL&RP | &t(6t( [Y (1W 57(NB d )l#=K^)l#=R*26![Q *l4s+ +@J'-mʞKN.%X-k.%X-t. i.5V\ /eJ^/* Ve /* Ve_ /c"/ŗ'Ԓ 80m5 26{Dt26{26{26{ 25R 23 3۶B3$nV4xAS040ك 5XӇ*5XӇ5XӇ=5XӇx5XӇQ5XӇ~5XӇY'5XӇ5$_v8Q?9Mڎ9Ve]9͚=):g6i :U Fb ;z{' ;z{'  =>~Z=>~Z =^ =mCD<8=mCDR=mCD =mCD=mCD=mCD=mCD=mCDK>`!"?)Y[?=",7t ?-]f AS= Ajps*A{C e?BS-? ENS X ENS X Eaz s EҼEԬ[ EԬ[ ,FvW4RFvW4 H+6oRH+6ojH+6oa,He3AI$He3AIHe3AI H~1HB`8:J|" J|" cJۺde Jۺde KhS?OsMtRMtMtQM`M`M`M?ui46 ( Or=P;`׸ ( P>ntP>nPZyS)PZy PZy PZyL Q.8N,RJh2v0RePd!S\PzT.Z$UȫW (<VC~zN VM̛*VM̛ W8@c"WTwn[X g XQgL YkAtRiYkAt [TAF('[TAF(%[ע^2|'R[ֻu, j [-M #\ $\}6 + ]] ]7 ^5L] aP)4taR d1"S}d1">d1" dlaF/dlaFd ;m;Rd ;m; d ;m;ad ;m;e$/I f6\ڢ&fo" g]D hd0tl[g c oKAoKp2 qN =q0 8 rо $brо rо rli j tRt@ te+*S\tϿutR u!!(uāp Ruāp guāp $uԍ/ vEޑx\|x\x\ zجx\ z/ B{"zy5 zy5v zޕ3 {dPS|%_XS^M xPQ ixPQ xPQ m >k/| #F5> , N  žo s)%% Yj LMs>v%b.%bQA5e^ RC onQh (fonQhjonQh!onQh ,onQhonQh \ ej gL? #<#K ֻ+Iً~*α?~*α 2u $2u ( 7'I*7'IP7'I7'ItОZ1k4 1k4t uv ͭqYK(,K`,[ HCl?V S6H K; h FѝVK6? ӝ\S?:mEB * zດe I IQyRaψ?K5 QISQILQIQ  80id80i_ Aȧ 򛦮\  m}; ,#AD-AZ}[܊k 15=j15= \15=|M15= E15=s$15= 2 b?Nc .b?Nc j)L n k9?4k9 $ |@:2 |@:2 ( 1RL`./=ʎpRQx QxK Qx $E9fs<$E9f.$E9f ^%/ $p5 p5 - vo vo ZB5><J~s t)=2 w1! }k.8>tK>tCX׳Z Et]:ʃn~b[9 ,` @ , q6 (q6 q6 ,  و<ؙt  ڬvR|j c;ĴgVĴgVD -PzL-Pz-Pz/N=R $t7? ]( %‡$]j(‡$]j‡$]jYª'?a _ $ a _ 0uRR0uR iI2 S ~50a?0īDޯ , &d $&GƄ g"Ƅ , J(Fd,t ǔboǔbo Cǔbo tW[. ~Ӑ#~Ӑ~Ӑ H P !C[XY2˒  p?5~e6ԇT ?8k ϑ{ &ϑ{ (ϑ{v C6 XFSC6 XFLLZn/Э&;<[tÊ }k 11 11 ,=11 ;11 11 911 $ X#1 Ymz.@XK8ZrJҤoa Ӓܫ aOk|E hi|; bbSPkbbSAbbS-p  v jĀKjĀpnpLpnppnpS.ia3 *ׁvׁvjאGFeאGF Kړd# ?I? \x\ONRn' #ݰO&ޝUtvSޝUt h; +3q4&r $&TV$ LrLr  Je ]!I>v m V]J tReg8 @k@k gjl -+ʃ $/+ʃ (çM* çM* m&çM* çM* çM* 5LN=(SR]{s ]{s Ȱ¦N0z#0z 5 5  _[p# _[p#IY4S, i O-.R   (c׋MYaT * -)^? C{`u[ Ϣޞ'llk #xv &Gm yghvaX[thR ,/2 zt)zkHHH\pW?6. ? ʰ+ʰ+6ʰ+Q ʰ+R @W!m?8@W!m +&G.x w35Lo9'5Lo e$ޜJ_n|_n| sP /:)zX[C4{PJ{PZ{P*5a\!KiS ˤ DC +2L.U @,?  B 97     H(T  X% (  6QƅK$ Yb? gTˏU w #ˏU w /l/lPL%:#PL% PL%  +  s lMK #.\25 13V́S{[=D?S9jTD?S9 Mc( NH  He[ He ?@i?@i ?@i T?@iKm?@itW,9J'" , "q#6 v J , fgނL!:Ņ !V $! 9!^A>!^AR("Ʋw"k #͘ Ov$ZJs%Ms%`6 %`6 \&S2  &:q 'J @R'lJz?'/ s (Bl4 $ (Zݾ (^D? )"yoN)+v)o)+v)**V.M; -*7OBK # ,x? ,Fd#,OAa|~-mC,O+Pd .oA.oR&.Ӄ+ /:/?ĸ*#0AgD60AgK$0Ag0Ag0AgY 0 o 1rƂ/ 2y:9"30ce 35"`Y%; 5"`Y%;? 600R 6^6s Q&66?*97YdKЌR 9WVW :Z ,9:Z!<$LUX<$LUC>]t&>]k$?y*L?! ? ~k"@{@?=@*ȗ"R B AW iB AWjB AWs Bm0y C&KS Cm0LF D(/ <D:EOEF8FpFpeG󝕳 Hh~ IMvtIMvs@IMvkIMv ( J"|! J\3KJZ" c Kcլ/Kcլ] Kcլ K-NM#\jN?O.fUN?O.f N /O*^454On>:_BY PQ*ptQ7Y3Ws;QK"K Q1 *QH|K R,YBRhc,RƂ"j_ Soi%+  TZKU@()͈ UJS=7qbaU;dVvh=VI(~ WY5)oWӮܨ s[Sɓ9C[F\\ \~r\~r ]8al !]8al !]8al !V]b ,^- = s _g4a m c/.K6D6c/.K6Kc/.K6 c\&ߚ]j&e -tfWkqB^R h+ h+ _h+ hww 6hww ,hww ahࡸ -m iE_v`? j$ι? jy6>k2|G li%, lH]L7=lqn2%lt?s ,nxun^rn^rnX6 o_jip*3? s2ڳV sd{Xuҿx ( vl_vlvlvs w5t mx'LzWS |?(Ɠ R }Y/=q ~UR33n\ ;6!L#;6! fo"fo" y1o$ iy1o$ y1o$y1o$j&p`8R'IT+DR!sPZ4J BVn *XYN n ENn E&n E"n En EQ 1|(1 ( ~ǫZ !p4̈fB*;ftWq't6P (LW^41olLd  EaAO>KUpZR qGx2 ]q OI, $Βd~2$Βd~m^;m`G b}߂ %R.4 4R.HR&^< a"q_aLYON_ԐN_ԐN_Ԑ N_Ԑ hgVH2 sS iisS \FC dFC 4FCjp^ $1e;2ڶHO,Z $1W) C YC Y s2GJF]rSY?ypyp`zXR`zX []t-?V2aHS Ci?Cij EJa :<\8G@ *R  =  $1ELza , kʲa{Q Cu Y7:Y7:  ,A@Ŏ a\;BfƦVd Gՠ Iր80<)k<)t<) i !Sٹv+Sm-{Sm-?#Ďqv@ ' 8 81Y`zD8 8WA6| 6 1|#iX}7[G b!s4[$ $  +: &T y1. i >^1@sGQbU L|_ B> $a3[  S"MuMuvnRի\B¶q. ¸yYLUkL ä6x s (r @P(r @] q5 i>tjb#.\;? c =ct8c (0t0Qs ̼FIB |`tR |` @ |`s |` w,* (w,*9  ~g:<$[j U i~k>G||S||5|| N &N  _I-vO * B6C홄 /:{LylU>ի U[ oN  o  o  dOd7j /æq    cdk-( 7ď $7ď r -NrkpQ AP6_ VޮI_f&b  1֗* kn> kn> $kn> kn>j ['M].M]wYX s _ scyscy)DEMx 3)DEMx dTN BdTNj !u_C7o!97o!"qP|Y #(Hw#Or?#Orss$H^<&li aU'N @2 ATޜ~ , A !d sBeʋ EBeʋ i5C%v;D3 P6LF@P} Gw?[ G?e? G?e G?e (GB^/kGbvN $H4?+[ H""v! # I?V \2KϜx L L 6KmM dMV5 ,]MKVXNq0]mNq0-Nq0Nd$ OYc& SP-? SwbQj SßB SßB LtSßB SßB S TM1 $UħD V% s WG2{W &WBh5 X~ZΕYG])YG])U'YG])L Z{$k [jR"{bq [X\x\x\x ( ]j^nv^(I _Y;Q_Y;U0`;7ty!a胲b8hsbd& +bd& a$bd&t"b\@vbk c{Uh{ ,f}?he('Nh$<}^ h;\4 hX8 #i,¶ #iHO #.m#@m#m# ny6nyUoKJ=oKJ=| p,kpTx"Z pclb9q̈k] sq̈k] "q̈k] &q̈k]q̈k] rv\ r,I s"Pat$ # u<V,uEuE$v%I (v%I Nv%I (v%Is v%Iv%I v%Ijvs7ŭ[wD`@ wd p{iU xt xo> m x@$;x@$ z:szu dzu {*#@*L {Hy3Kt${ V? |,G  |p |p }DPv~,)Ks~,)K (~j72L~aJ 5uN賁 ְ: \ְ:+ְ:/-  t Ft FBhV D1 gʇ9w)sm9w) Q9w)k,9w)t'=k3.jS{yfҋIj2 gv gvgv gv gv DbvDbvd  čXX - čXXtJhJ/t 'A4x $(ߴN;*tN*t*tYc DdnYc DYc D^Yc DL1Yc DZ&Yc DYc D Yc DS (qp8?j(xa _j(xa?GUH4  oR kr ~k-qx ]ÏIP iKT  vg&BN* "դ"դ "դ %4a?0aYoT"0 X*? eZƍ $ ߈_ @HG# u$ I =4 g9 (g9j$](C(/$](C(|$](C($](C($](C( C2X:A KGK3KLD8LD1LD ^\cj (^\cj'^\cj $ۥQ|_-RBpRBp!I i!I i { i*{ ( { JGP , OU6 ;{Ha{H] _CRԛw] 55 GeD~Ew~Ew )/ )/s הה CD\ CD\ 3fNV /QT/QT]/QTU LdL ß"6[^ !Ԫ 2Ųo? f&qf&qf&q ƫ}C7\?'Fe>< Q6 "o2 =Uvˎ N&7^@ j~~H~~H ̚{8[`8[I Iͮm^s?1 |V“UlL δflSřհ7[ f=rrJ#ԑPiWWr?F&` /h c(*]eRЩEV/OCL+ cLd(#)K#)K GOz? zz FwR յQVvյQV # =pq7 i kfgt  ,RشɞW N XSX :: 1{&@܌%d \>\> \> ݂́Q *[< L <X ywyN 0 U N`V (  X9ǹ} . wM{ YR C ?/YdY%CP $ uj&hхZ}n:ꭝ+ $Y7L $Y7 H{6!oH{6!o ,q%Z4q'~ oI~eM09&TY 󀲞t%&vycc9$υZ9\>>KjƿH *hh ,k*hh 5*hh%C01AC01Aj gsY iDvm# {m# (Om# >m#  Lgs~qV~qR1mN_ .[+R3iwU s^;,6FR)Ia6] *q2I{t72I{ 2I{ e ,R$c^EXo:|i X'|c]܌ c]܌ ,c]܌ Dc]܌2c]܌ c]܌ a F0< H~3)P H~3) z}y3q, i :2% K 13Ot3 13O (  X/ s?9 s?9" s?9 + zuұ V K \3 K  K , ; ;R  =o& s  h  #u t 3N i' 3N  e4 q e4?  e4  e4jj Q+ QGn"# y ]Ys[lIW[po Nf'xvV'Y ,a 4$(Lc\]N@})v DG ?7i| b$ u/Eh d] bDh |*"eK~ϝ'2);I,2);I, 2);I, G$vz6[ # P1\ln*  +Y ?cqN?? ?G @E-PBnr &Bʒ!BʒBʒSBʒLCE ( Dڕ%J?E+BxNFQH?F{˝R4F\~F\~ F\~ GRF2Ga3r?Gj0a HkI*uI#6)I Iz$r JO u%SJO u%ZJO u%$JO u%JVuS/ JXk9 eJ+g cJ:z K"-..?N*ޒF5 NMjv^s *NfvNf[NfPP2]P< QSʶ [vQ5?Q5Q5Q5 Q#G,Q#GDQ#GQQ3"(s S :0S :L,S :TB3L[w UHEKU؍4VIҢZ V}x}?CVOa2{1WV5WVD1WV X7ݰL YnFN Z 73?[,\K? e \C8Lx #^:TېF _([64 _hG&a _j(?`N*8`nݒY a;N? aea;N?a;N? a&KaGAaP}?aP} ( a%b)a%bazOiLc|] c|cOxy+d[g? d[g eTVt fRy\fR 1(f{OU f<?j!fj j;u* l5ѱSl5ѱ l hn)Fn)F s nRnCn2WB " o2^q&ur&TM rIIU ,drb[O)rb[O)6rżrż s=M $tJ unde"xunde"t/unde" !unde"svvKb$vvKb#vvKbFv򂟶thv򂟶 (wN}ak<wN}akxlj z: o z!*. zΠW?>zΠW \|; }@0Qy #}@0Qy "}j'J]}&?~&?8b! ~&?8H~&?8t~&?8 ~&?8 D~&?8 ~` , ~` ~A| hgYʤp ʤpYʤp"ʤp , ȳ%( ,eȳ%( 'ȳ%(s@S ͱC R)\ mQ8mC )Y` *(6g2" UH ز#-r Ǿ&?'9* a >7QkL-EVqttКG C9C9]@G 푦GL Ј i#Јs *iF *iF;)v׼V*!d0B+(($p&?Նz9] n!|SO 0pgA. s&,sudI u6L8}pfJD3 J ଅvcj{Р bTk'tR't't,'tL 't RVL^d JFX*SJFX*LJFX*JFX*JFX*JFX*IJFX*]EJFX*n $ns6n , x<R'x<$Io $唒 M,ԊH =:?n{1}Wq -^?^??^?(^?^?e֧? :VQv,?5)z2;izf-rJt-rJ 0'z= 0'z= ( S,n[ƈL:9)oɾB ;,l $x] x] i!UWPD]Sf/C  s@vE0]6N_RN_RQ_RYBW W NOP'vFOfx Z>in؇hUv?  !v ,z !v  !v $  lKB l)L2(_Nl? W?-  :QJ (:QJ$:QJ {"f \ g&Lg&=\[Unέj /@` ƱN  Ұ_DҰ_9 BȘ ?w Ș ?w ,Ș ?w ;h["ɀpT a ɛpeu?ɛpeu qE #* c=Q-sQ-Y˓<c[ Qn|uvB8$k 51/A#E.%?yt6d^9K 6" \k"l #k"l c zH K Dˢ7Dˢ7sѺj|YILet YILe YILe ye@/d"_? 8_? _?  /T]t ׆ 3 b#f\81{?f\81 /ػ ׆h{S B|CVCی; ی;  ۟5.8. B? sU*\ 9}D4kr ޫ)pYޫ)p ޫ)p ]Q8Bps /Hrr71rr7R toP  ~ 2 Kut2 Ku a sss a V:eU/V:eU 竁@~ ,nVnkb m s Yjo5E >͡n Mٯd [''] ~??~?뢴Ul 齟?p BѢ%N ( RL#q as RL#q _S! _a KG* L  gش'  gش. Za e8CP9I[!Òmq +ؚ*d/)TR)p̠?_p̠Zp̠ tf p mtf pWtf p?tf p tf p:tf p \V \k d6nPd6n 31c93Otl(!Z" Z"Z"0Z"fZ"M{lo 3ZL:Y1`5r5a f Lf SNI,+lt[& e s%~\ 9Gv  ra; "!p{;Gm!p{;Gm !; "ŏt)"ŏs "KڌS"Kڌj"KڌQ #kjwE( #kjwE $GL %#u&k %dB?f%dB i%dB%oJ=Q`%t7&㣥' &k(0]"Xp (>up] ;(>up] )W e )b1@*W; c*ئ*ئN*"wl,q -Ixms!.ب/H/F< "0߼I0TqC0+f a 0+fj 08 19D#19DR19D$19Da 1\ 2gӦr4S/R4^;6$4p<9 #4p<9 a4p<9j4p<9 6Y д 7>#b $7>#b 8{b8b-R8NE8c8R*9smk?[9smk .9smk (:|ƺrDY;f>PrN5;D- F s>8?Gf+U{L?eF ?eF U @:mB:X-jBG /ZBo/ 6aE%d EE%dt#F"XF"X= FT9TKFgcf Gd^$t Hu~hPH@E"@=H@E"@ "H!$IW ~? Kn[hL_qP #Lz% Q~ZLz% Q~RRLz% Q~Lz% Q~ LD8ڢ Me N#Me NMe NNfaԡQ+ NfaԡQ+ NfaԡQ+ N:  O'_{O'_DO'_ODOp6 oPz-QK\DQP< RjsS:1<$2U~LIQ]V+L{  XsErR*?XsErR* XsErR* g Xͥk Y{X/NR`Z})qZ})qwZ})qQ Z嚖<0Z嚖<0S Z嚖<0 Zq[ ^Zq[ \KS\KS'\KSU\KS\KS\KSY\i7S ]ɏ ]R]d& ]d& _*fWV _ys``qLv`H,MG (aFɱ(aFɱ{ aFɱ2 a"b a"bc # c3-Wc3-Fc3-&cۃ̳ ,9fVQCRfc}vhfc}v fc}v:fc}v0fc}vfc}v h`i*n -i.Pk*jI2?2jI2 jtwKrP]HjtwKrP8kb" [;kb" l1WP!* m9޻ +m9޻ oo)Fmw?oY.oYtq;(`[+qAeqY0 .rOvB#~DrOvB#~sCS s;ܛus/2 sWst'1F\ƈj tz`$ u!kGYu!kGK!u!kGQ u!I(B wt^>; wrJG wأ?xF7y` zT]s{_]||v'|vQ|3<[[!},~[M?-}-~[Q} ~0:B~0:B , ?=}N  g  g Nd g P U-kU-tˤ{:p?xmjn',QXpQXp[ jj\jFj j PKF j}G଀#6[mL I4B Nv(Jg  f=1Lj;"0V ,"0V ( "0V $ 1% LBG+LBG Cx68_Z v'E[X`yps`yphW8'6ELh6+v )O d)O?H)O K4| mMY mM ذ WXM7Y B)FDT+A?T+Aj^W5rb)9W c hdN ckc?}7= }7=a Y|'#0 $ 5rblj%%őQ|*f u8|,.- uu@5vNn# 0.<^C+f am zAMn[Mn[ p LrRմkv2eL m &?[=&?&? | 8J֩R !;l& "  /kj z .#n/s)j8#n/s) )#n/s)t#n/s) is!g=wsS.kM<@j*Br $ߡ3 Õy0'Y7CK7C7Cc& ,Č\kǏu $ ŕ{4?Ytţ'wrR6+=KF+=KFC+=KFR $o@4 ƌO`v?1vzfǀ~ FCvAt" I&> \ ɗ=+=S ́Rt?f́Rt֊0K)֊0֊0 ~׃_n[ t]`ERI?XEZZiEZa'EZSdSQCv Z9e>Z,9e>Z H i 5v H)]s ҕf X R$i9 v3U ƛO \` :w {:w r֛ 4ӿKKcH& iؑn)2FԉFsԉFZԉFR$|} ;/ ,';/ +T c+T ( ܫN{ ޥkm5?޾4d j ߄e,qF ߄e,qFv ߄e,qF g0Ak?XMgq s+Mgq ~ m  }a3,o{h P JYt7 ,xӕ/]ʈfʈfOʈfŋO'/`I( s`I( |.mUdC mUdmUdQ<mUddmUdt Z}KDt Z}K @{٢|e!l;e!l  ENhOof  Oof jOof  $Oof  (6Oof sOof  Oof  i\Oof hOof  st Ԩ=ys'qX3Y|RX3Y|SKX3Y|ZIX3Y|5GY fz Hfz2fzx|~3 k5N ak5Nk5N ,k5N }k5N"2 @4 'h>Q0v [7M0hĶ(hĶKhĶhĶ  Y/ @"lk Z-/<{C*MAX ;ZX ;ZQ gdygdK a K }X 66 ?n=$s0dj dj  [,@  h%r/t a  ʴfU ʴfUR ʴfU' ʴfU &06  &06 (^A #,dp3 n> , ~Zt_: sH-!$'!\4E+l] d5v\ 5 ٜ  !Vk9?=dzi?yaKj qhܡj*|* "8o? bWp&0R:\[(NoSk(y?(9. ,s _%X gW{U %U JnkSKJnkm?_ ZTuvd9Sޘeޘe ]ޘes<ޘe%ޘe ,ޘe ?gWs?0 K  (L  ̆j!ɪ[6HS !3GaV"X&Y #2^#2^ ##d/Ȥ#\ $ ȱ_=$-$?$_(!VC? $7I:%Ζk}%o6t %o6K%o6 &:ͫ(Q&N'Sma?'fw~L ( 3* ( 3* (B(B'(Bb(HwF:C (eNj@(eN a+(eN ))z)'])' - )ؽ%H? )5lt *4Y1.%+/ ,(+/ ,-eP ,Z L.; 8/@KG'/M-)R / 0+cjG K0VK7|0oi!WR60oi!W +10W$ 1rz {C1Y"1Y" #H1^-v ~1^-v \18t#1818 1o$u c2CY)33sGR3\]g`ڕZ63vh3vhK3ŝ632N 4{ 4{ 6\Yx6[*:#7;f a]7;fj7G 7_Q ;1{;1{ ;8ss!;nz<f<~Ge>>:5 ?(2?NJn A?NJnj?NJnh @ 'm/A3j& #Ao'h Bp},CJ$/Dp% Dp%t Da'EbL7%u ERFVcvFn&;J淅 ?J淅 KhFZ6g h K'Y K(e%kKN cKra|Kra KraKra ^\Kra :Kra $M(G s N*C*N/ZZN497xj P]"}` P]"}` $PQS] ; U.q5R Vp WZb' Wck+uWC# W`dvXO2Yrr YH Y SYjYjDZ=Ia'jZpv #Zpv c'ZqJ Z aZ aZO: [%;& [["瓯 -'[\k@[\t/]ďd ^؎i:K _~O/._~O/'_~O/R`X `fE c a%"iv a:I^?a:I^ \a|4X@c?c+Kc+KLc+KU2d$nW$gQ;%i{ RisK kwX"kEtrlcj #m,.h an(n( oSi }?oSi }so o{q eqWl]S rq ."4rq ."t4һ1t4s t7 6 $ tCtC $ xo [ yxo [ ,!xo [ xOվ@txOվ@ xOվ@:xOվ@ |E֕9}|v *}6t }V }}6+9o }ͱS? ~DɛtR~T6~b x| ~D =YJ\ a\ \t\ 8`R?8`RXx$u*\+ u*\+ a u*\+ u*\+ju*\+'u*\+b iR iRYiR E`̇N&tN& 3KKPWYWY !# <ʞJʞJ mלR 1D  A  4iʦB wG"c #wG"c iwFȶ h|<q[vMQz c{MQz ^j^$ (b]A m cj#loP # C^X\t&9j iͥ#-y RVhbRVsRV u#\ ߃H9734d o6w )Pf0Pft ^ËT{'  j'  w'  UF , $*>6tu  ( j N ihWm N}} *N}} ӬջRCϯ vo2 j%ngLj%ngKj%ng RRzfXɭ k9Ӝ"k9Ӝ" kH%s:kH%~kH% ;'T0 DP? ژ>>;O? HtD` ]!2S 8|[t]Ekua._R z­ }f4j_:)}f4j_ sd@O Hl;Bem4X0x+0x+.0x+0x+0x+ 9ĭn$ҽ \p(e] + }[/L5?+L5s+&??+& %dDdD s@F~0e]1;Ne]1; 4ʨj+L Wy2 [DZ[DZsp] qYMV \ el s 7yv-G(wG(ZG(B=A B=A CyT/t$)R3$) &r PR|QX|NCN{ gkZj! Q $ 8 ou hnv QkR -c\.;߲Lcơ>;߲SYơ>;߲ơ>;߲ kED$ ic% 7?'Č u8 ȩIcA ̛G' m5ړ Ͱ] ΰ*; J$Lė9>s ] y ] y  Nf+ \ too7too1б@{ о g1 Բ s,hOK  a .Sf] u /5#> /5#> qØ hվ?ht?J$sSvVĕ55Vĕ5")Z٘ o ᑕPA roUg~J JRJOe`(v!xm` hQz gz 'z z a͙׼*8;h i*;h$êw}êw}N9\N` XoLc vQ{ W'vQ{ s NOk dHdHS t ^ ( ik Z<d tO ( \ <"&nI=vQ w Cd e@6 |e@6e@6       K.K #K KbKYK Kt fQ)a԰[j?U> BR8BB Ӳꔖ"S3W} ORd #Ud >#F ,GFSS%GFS1}PcyS^  S`b S`b Xb:NwD.5~ d, .C@ bK.C@ b s<Na?l55R#l55 #l55l55Ml55l55]l55ZPl555l55.l55:\,; w Uc0Uc UcM H j ,~o J,~o 0T2RQ {#E: c) $EF/vC(zk ,$zk k[N#)q    <1=-v<1=-jq<1=- N16 9Fgkj=7 fc[' ڑ^?A /=, $  /=, ,4 /=, /=,  ">!A 0  0 ,  0 a  >0.. -  tA ~ э3 $э3 P3K9toP3K9"P3K9bu.E lr)JP?E[m $E[m z9Hs $9c $i>n2`>n2` hKH>YzT zT x$VA k #=A Be]Be Be MlA9UV8 s1G( i TPTտs, H!+xVK!+xVS7!+xV"4)s #%)?#%) " #SO^0 #"_ %-s c %I=&J.= &J.= &} '72K&'72 ( l_N(kr(krS(krY(5v"p[) k#)K)1Z# *-)P,G;)P,G; )N+?+$?+++ ,1*M^1Vy*%Tg1pٔ20!%c2H-NQ ( 2u,fh 2u,f 3|%VE (13|%VE #4L8[B?4r +5#1 ,6t OX6t OX 8>#38Ո96b; ;mpw,;mpw;mpw_;mpw;@\R8;@\RZc;@\R;@\R;@\R;\a #;gO#_[<7!K K YŚ ZŽaI j [w[ĶLv ? \FPk]c2XS]r ]3^8S ]eũa[]eũa&]w- Y](g#]}KE^GZP +^GZP ^GZPS ^6 t"_ e_`'}kЂd aDq} *bxc q| nc q|c< dA$/!e[o< fz$3g4'xP;g4'xP2 gvr ghjgh i gͩ/9h6t idl (ElX m~H&m~Hm/Wkn%{n%{ nn+3n 2o 1?sqon9a q1F6 r/ZJ:)| sI盦? ( teS t<c_yt$ԋqL#tJK4]u!?v9?v9v## $ w\(sw 1{s: 1{5(* $  =nQ?=n xD k (a6 =SYJYJ&<J&<S ^9$T;99$T;jI9$T;9$T;@Ƅa 5 p:Q5 p:i-t%Rt Kp5 {! A c=` 1K[f }j I.Z? :N?ն ?Yն ˈoNu!}  ~^#~^S ZF -ZF bl}- Fw   C7Rܱh+ 8ׁ~=P8ׁ~=%8ׁ~=$4_/*j54_/* (-4_/*sK( aLXt)|}ổH, %E(Q%E(U1%E(|$4|$4 ,|$4 |$4 $ sN+R&g?g? g?Rg?g?!tD3 q(K \9q(K ,q(K q(K `q(K q(K Tq(K Oq(K iq(K l2Y#;l2Y$-Y} 4D]v <'R fV!<

| c<>| eήh? :j :Y u24 k!u24 k (Яo̻ QbC'AFL! LDv Ls;U1&Ls;U1]Ls;U1W.}j"W.}jK ԒDԒD |JV?|JV |JVsՍբS րXVf #%րXVf 95L![8oR |ؠa&(ؠa&Nؠa&7%Y\/  ٗQo1z`Nv/5b Zv/5b G$GwGf$0h K ۈY.t hB|]]FS  Q >Kcx vHM(K)HM($fiՌRݪ_fT$-//رv;Z$U;Z$U?D;Z$U TgPkI ߹aRL  WR+q]0>AwNAwNR*AwN㌩=+ Wzpݵ[ `,, #RJl oNuGqp1 N@]) \ Ε+)Ε+D#ox R+'(wR+'(s kZ kZ 2ߔ&h N?4ALS 0| %X+= Jw5 %9(b%9(b ƎH ,ƎH $ f&Bq'BtF siQf &au >~~܇"W ªm  Щ93VnЩ93VЩ93Vr?^ # G bGD$X=j̚œjQPK~N" % 4; $ +j> mů6?Ků6 C SJw !NydN nR8~ vacvaS&va4A xٲ !)( rrYzɒ&zɒ ș8cRș8c҉tw "{  P/N1 P/NA P/N p?  ]"zs ]"z  ./" ء=̴q?8 ǾT \ $g|URfT[fTmJN 0\4o 6!V Wثrk5Wثrb|b|[Ը]jiEՆW8H %ȳ kWZkW5kW3kW$kW ru&=  jzE ۋ;c !Ș #CKsw? $-xk $l>bL & Ͼ . &A&8C '$/"*!R# +jE2v+:S]+:L,(;d ) , b",ZVa -"~j.:q p 2&.:q pt.!v!/}# 'U 1)ˌ`> 1p]Do # 2Zd,3% KQ3% _N3% %3% 3% 3% Q 3% D 3knD 3 %31D31?5xtmJ; 5rJ[ 7CC^ $74o|8 f8 f 86g;t c8j7868h8s8_-9"GR;9"G9"G 9' Rj;Ib۹R;]-qD \+;]-qDs/\ʲ>d<,֠K >t)ú>t)ú?5 , ?`l e?@ @ũncdAH2/AzwBv^BhA Bjeܶ [Bjeܶ PBBjeܶ  Bjeܶ D CKs D.W%Dͨ | EʺT?EʺTs%EʺT ( F"_ FD#sQ FVxFߒ3 F74 G a& kG 5GDH Z IYPXE I#S)Jg@Q#r KbƟ| L GЗ]L GЗ,L2|%6LuLu Lu Lu iNqjO|%FR-P_ P_jP_ ?P_ , PfΙ Q)4{$bQG[SOQG[MQG[#QG[ Rc[R RP pv T& IVβYk XmeBf/Xd Yp%^s Y{-}; - Y>NlY_R YHc\J[nBn[nBn\2hcG  \Lg\**j \**?\** ^5-~nj^: J_" /_uIH_!MY:`vk*q `` s`` \=`` wa\-d a\-d b'Ub?0b'Ub cM3 cg{kcX% fW 2f ? g *gș. gș. ag.H (hRN hߘZ0ib iMjiݞL^ i@vj/L $j/#j/K!j/Sj/j/j/ jQi kWM9Kkk`#lzzl,%"l,%l,%lG& nٛ|¶ oM!杞 ($oM!杞 rbtTK=럛 t_"t_" t4 udu(8-x86xf, ^xf, /xf, *xf, xf, x!9? y5`!y, -y%!ksylu&Wz_l`⩽ zmkO a}wo)9@ r}\bh}\bh~m?~ɓ~;9Q4TO0KF4TO0]!4TO0&Ц:] %%t'-q bk T7T0O G7T0O ,57T0O (7T0OjeaR ߀i߀i ^mo 2w-Rn {bœhs@ )hs@ 1>s 7Knu|"FZ?L HiLLRE=RE=fRE=RYRE=$RE=pS. \6)еu`)еu5]ndm 2Z N'3-v,N]MK  > %ŽS 2C 9ƈR$ =[f4S&=[f4$=[f4Z=[f4 Zn#cZn#ckZn#c(Zn#c#hfkݙO `17bmL ,FXi_RN;Wb)Db)7gol?Q_ R dI?Fx[bZ( 9 / U 2, J=cY7tu$"E"  =p[2FKmP #_ ({0  s+\ jK"R PwW~PwW~ PwW~ %PwW~ jtYmvki U^*E qsq c\$ \ d6j,% z( a jNj jL S0O5j..R d !d , !ьyRa e4x54xP"4x ¯ߌ8 -%GJ"Ŷӳ*lC΃ # i2ƀ 9 h Ƴ naB/ǃeGǃeG]ǃeGNǃeG7vSnH: ɧR1Oq姆4f:!ʟHR5=` ]+ ̆\P 5̆\Pt /|T **U==k b [ъftѺr|Y2[ qy$ҧ8h \j  JE b@(0vDZb@(0v_ b@(0vb@(0vQ0)/grvwNjm|8@-N 6?R l ژdiRz? ڛL܄ aً't$) i*n>)jn>)tu -u -(YeҖށ.x%Ͻ%[^  ,3 ,3 ib/!= \Kib/!= nZ$ RsiE!tCIF{f?VB0_ wELwEK }t_f  os 0 * #.[   , Эє8k ;5W 5B6 5B4 5B 5B .V i WZ( Tt.S i1 Tt.S? Tt.S 2Z 蠽 T T N0| &T w S? jc ᖯ! Ͼ#pP 8>i| rD ;'b | Ox45 <? $73S X8vD n ? "R  x/8k M†XY oA#t N  N Z 2\ FG a} FGs FG FG  FG? f+RL f+RL ? c,[( s b:iဿ b:iဿ  fV iot xM˜ 5j= 5; m u8 m us 3Y# 4̪[ BJಔ[ !d "3 #q}1/Is % <  %G0 &/f9 ' TS) 'WE& 'WE&Q ';\R ';\ ';\ '4 (NS +m(a  +\d +\h ,5[{F ,,{I ,,{V> ,,{ ,,{ ,,{T -ZLs * .jjC$ /Q  /6$ /Y z}D 0&1{ 0ˈo5V  1>OAd 1~ۍG 2צH[? 2oΧ 30ϯ 9 30ϯ  4RfS 4Lz65 $l 4Lz651 4Lz65% 4Lz65 s 4Lz659 4Lz65 4h7 4  5\ 8H 7 "? 8I&I 80E c7 80E # 8F*Z 8n 9dER 9~[C9s :1k{ ;[+NsF ;[+N v ;[+N& ;|_j? ;|_j  ;|_js> <4k4  > Fk+ > F} > F i ?3C{ ?{%ߙM ?{%ߙMK @Ɇe?* @rI A E`ŵH , E`ŵH  E`ŵH i EV#*K FC{T FC{T Fa>( ] Fɜ5W6 aX G OvU G O G O* G Oj G\|H 9 ) G_R^ߟ? G ; HhI胘 H`(? IG"$( IB^$ J0j  J).9 $ JS[ͽ# JS[ͽK LL%5V @ Nx%$ $ O w O.$= R( OZs# S:~d Spڧ? S8"Pv ! S8"Pvs S8"Pv ( S8"Pv i SM!yA SM!yA% TmEv T; UC$ U@:+ VNC^? WWd WWd Xbm)!j Xo\H' Yd): Z$ C \KN \Bk% % \Bk%W \I  \I ( \JhEL ]5SJ ,, ]5SJ % ]5SJ  ^cK-:& ^ګd? `JK a a‹zz a‹zz- a‹zz* a‹zzd a‹zzD a‹zzR b晡 bIi  b)>Ք$s ch; cIΦfh cTs2  d&u  fhuߦ h%ky  h`5ӎ޹| hlR i.R+s i.R+ ifH1խ) ifH1խ j׋ jcr $B jcr ` j -| l m$`c m$`c; m$`cC- m}Z  nJLǤ3] ngq g nsx?6 pt%V ] q`j}v q`j} rG | rPs rl>vJ s0$S5 # s܃QICN t $: ue(Vo! upEbl l, v\  vqfj v[/O^ wY+ $ y?C y  yHrH y`C9: y;.d # zcsv { { {x]9 {x]" }2r ~Չ3;pd1 ~Չ3;pD |0+ L*'4: L*'4 Zn . 2u1= n9 Ш8  ~gR ;W[ ;b Ax` F F $ Gj$ Gt 8h}0 oJR $M Q 3/ct 3/c aI 3/c  M M M  㖒XY @)<dN 8& ) yPj :( ٖ0uv3 80 ) uQ"pS !L !S O"RH baGN - a>ވ ]r gy Od ێW &Z  *P R l ɶ l ɶ l ɶ] (cl j aq` aq` v aq`v aq` ,q aq` $> aq` %@: ] %@:3 %@: @XTͯ fn0k$ fn0Y ; ;a ;Z ȦfX Ȧfs# Ȧf Ԅ#u$ {˹. {˹.p {˹.5 &Nt a &N &N &N * &N ! &Nsh &NkC &N % &Nj$ &N ( &N i ЊV a P;a rw< rw< | \8?to \8?K Mk Xku (5] ޝ5 \ V<9) V<9 \d (0 | (0  (0 gl X9%f/ ;z ;]n ;F ;& ;Z 5 ,1 5 $ 5 5m 5j 5J 5/ 5 5 ( 5 X[{N6 X[{# X[{ X[{ xN x x lTR* noB&%A E ^c $ k  RQQQ RQQ X 3us _$?6 _$* _$ _$ >gB rj rjR rj / [&b , /4/. ,"U ,"U j>T  ž jj lckVT F ' ,87L# u  mg DzBJ/ DzBJ/ [ {];}  }8+" t9 # t9/ p ;S 9C! ha \ ha hahj ha H ha  % < ( <% gl~E 8K R i. R R  *?| V l0  ;N *f # vC?! +@  ‘n|v ^h>R8J ^h>U ^h>S {T .u R .u R Ăj܋"hs Ăj܋"ht | ƾl ̦ӕ+x?3 ̦ӕ+x - s?[) L=X e5G $ ] M C M C \ Ϫ||k [4&p+/ Ƙ  7v[I 7v[: 7v[  æ o>tR- o>t D2;R + cqLҨ ԭND ]HB n@ڂ Nk6q , Nk6q Nk6q l۽. cwb {tw 4 {tw $ {tw WR }âv( Q*k ES9 ES +? ٪r __ | __ ۛ zRcn Vhg ( g9 {hcD9 )1# ݔ? ɧ' !eB s+ !eB  H@J (NH t -lh0 ;D $ }- ݳf/ ! $L !  [}  ]5tb %˜0 %˜0d ׹*W c +" + + + + 洨N  ,'T ] $[, Q+ Q+ %? ȷ[ h !SclO!a!u-!!C GE1!"r$$^ a!%DX" 5!%DX" !&?)!& a!&j!&s !'frjM!'fr i !)qS !)8 !)=>&!*&!*׀ .d !+Q !,'bu!-ωN !-ω!.dU7 !/۩S,!/۩0!/۩!0 P0A !0v&!0Xy#%R0!1E!1EF[!1E7!1E6!1E!1E!1E!1EK!2K=>!!2Ur '!2Ur 'Z !3!?߯Q!4-As!5L^ !5b ,!5b !5bs!6 svj!6\? s !6Y?'!7NQK !93,L%!:)e!:)e (!:)e |!:)ejd!:)e ,U!:)es<!:)e !;, ( !;pSC!;p?!<#eb !<82WCH!<82WC!<N!>#!>ƙ"FA !> $S!Hi3>s!Hi3> !IZt>z!I19!J]%6ak !KFWǑ? !KdUdw!KK!LSpQ?W !LSpQ?Ws!NFc!NWdiW!O`?!P`CR!PD(Y !P<}=$t !Q[w!RNCDt!T4kJ m1!T4kJ!T4kJ !UQ%"ϓO !UQ%"ϓO6!UϏR !VT(!VT|!W/(H? !W/(H !Y d.U !YZM !Z~?!Zi"![[9C;kj![BEf![228L !\}Y̸5!\}Y̸!\S !\U !],;ט e!],;ט !^5#K P!^5#K R!^8 !^8 !^8 !^Bk !_ Z !`OdtO!` 9 , !`]`? !awI!b~aygiY !b?K!c71 1!c71s*!c71?$!c71 (!dc !eccp !fNPdZK!fܓ3h !g]e3?"!hoxf? !h'!h'!h'!h' !h^? a!ióU !jU&r4 s!jU&r4.!jU&r4Y!jU&r4 !jU&r4t !jzXU !jWAX+ #!kT!1!kU y !kv* i!kv* $2!kv*j!kdN^!l YK !l֊Kg!mwb`< !nmӤ4.!nmӤ4 *)!o~Y 5 !ofĥ4 !o\· C !pI>`yH !p|( !p}2N!q?PUt !q| 7!q| #!rz;s<!rz;+!rz; a!r'!st˔p !s[ܴ _!s[ܴ ?!sCE !tD0[!tBc;!u"f8!vRW9 !wib" {!w E!w!w $!w !whR!xvUR!xvU !x(%B !!xN!y|n a !y  .!{lO^µU !|u F3t!|u F3 !|%YSx!|%YS ^!|%YS n!|%YSY"!|%YS !|%YS m!|%YS!|%YS !|%YS ( !|/W6 !}c-!}xcR!}xcK!~g_;!~g_ !Ld_R!Ld_ !V>O| ! !%O*k !x=@Bq!Һ !KU+!U7J !2g'M!2g'!!h !uf!N/Zg,!R !=w85s&!}gc! !5{!hE|w!hEs#!hE!L+ ! >}s!B) ! c Z! !l;f!NV!!!ۦ !/?Ak ! (h` !N!um +! Q@ !6鋵 $!-7?!Er +!H7s!y,N!sL4 !K\!Hpqͫk!Hpqͫs)!Hpqͫt!k~ c+!8ek E!%́]d!ð( (!ş@ j!;K a !7cu ,%!7cu !N9 !OaD m"!OaD!֐4J!D5R:!=V?!N i U!}: !´ByG?!hRFZ<D*!v)|! Xw (!DZTPR!:[nr!ٲͩ ,!ٲͩ #!ٲͩ ![n0!(]N?R!vѼ!vѼR !qV$iN !/1R!s#" !tWB0(!X/[ \M!X/[+!X/[ '!YD,!ndQ,"!ndQ, a"!ndQ,j!ndQ, i !(4C@ !(4C@ !H!Mk # !`R!`!`!`A!6;R! 4 !MȰ ( !gz!fB!ә!!Vzj?/!u !YTN!-!c- !if !O̘8 !e8 i!e8 TY!s3Nk !0^_ ?.![ J ![ J !߼[9!&V#~ !ZR !*h # !eR<t !eR<s !XF>R!V!V !|<>!|<>!|<>L !iIl~!  !kP!k !$Bn!$B 4!$BY !$Bk !0y޶N! !2dJ] !Y*B %!!v0 !k d!k d[ !Ê \#!1E''!1E' $!Ļ[=C!G(QP !#F5 1!#F5 !$~ !LmCv_K !B>!ȧqm1=!ȼҏt!L !L !F;"FP%!F;"Fd !F;"F !]x: !|3+ !΂Y@L!0BmJ !e&#C!e&#Z !e&#L!e&# !&PK !&Pe!v\!o ![!֛`+8? !֛`+8 !!ˡHL#!ؐլs!ٜx,s !MY!iϪj a.! ;ۣWO! ;ۣWT ![0Bg/!܃ح !ܠσhK !;@!Az !f:>v !-TmZ !\k !Q?ɣ m !yL!C;ʢ !D,CC# !N[p d $!tw!<vn7 !oa!< 4!!MqR !鱢) !h|MЇh!!h|MЇ !h|MЇ !Jui^$ !i3N!#߀6 5 ! ` !Pm !I%5|4"!*fHv !' ]5!S)eT!Ԣ` !AF/$!AF/ #!AF/ !OJPzH !ÉN!`D!̧D+!6P?!,=ǒh$@!q*j !nDjC!L!WVY#!6s !F# !}P!L69cY!HޕZ!HޕZ !E-g (!E-g L!E-g!E-g !/n !/n!/nR!/nQ!/n!'pJx! ‹C v! ‹Ct!*ލ4K!*ލ4 !*ލ4 " lIޜ" lIޜ "#s "#? "<s&"< $ "RYt"RYj"!d "I+ibF"I+it."I+i "I+ik "G "JRUG:"JRUGR'"JRUGP" }][? "sK"}61"?"M j " j" ǀ5" ǀ" Jq'" Kan" KZ" K " K " a#fY" a#fY $"O n " ֈL"Rh  "/{\"/{t"/{ "|~yh5"|~yh5sT"|~yh5 "|~yh5j "4k "I񡗯D"½Ͻ("½Ͻ"%o$" "ӈUiV \" Ld*$ "Q=o"rP="6Izs"6Iz $ "6Iz " j "DIm"DIm "CxD"ܵeA? "XAJK "fH]ҡB8"fH]ҡd"fH]ҡ"n "\=% "ѲUӉ%"!t t"!t : "!R=R""_nOU "# z[""#lv6"$&)Ԓ "$wrO \"%>_ "%]X]")48U ")L?S")L?L")+|t")+ (")DŽi  "+d5"+3Vp"+3Vp,"+D[s",wY i",wYt"-vs".T{YT".Tp0 ".Tp0 "/viP/Ta& "1]$t"1]$ "1 "2E\j"2<#"3XxIE4 #"3٫$D "4G\! "4w]֤?W"4mB"4ٚ"5 # "5 ױry , "5?pma"7D67 '"7D67?"8rX l":?is ";Cɘ "i"?&V |!"?&V "?-߿wy"@GVUNL"@hYJ"A$Y| "C$d"C$S "CBK!R ""CBK!R -"D "D#Zш:"D#Zш 6"D#Zш ("D#Zш:"D#Zш "D(C a "EST "E "E $"E M"E ,"G>!"H-Pꀚ?F"HP0Z#"Kn G"NW"O@3K"P(  "Q'OdE&"QlmCS#[ "Q/c'?"Q/c' ("Q/c' "Q/c' "RwP^R"S栅 s'"TٰtA"U5wR "Up^3"Up^3"Up^3"Xut2]-"YDd, (-"YDd, "YǘR )"Y~ ="Y~ !"Z`oq "Zl0 #*"[5.Mۧ "\,RY"rm>R"rm> "rsE"r ~|0"r ~|"r ~|t "sB! "tA"u< "u<  "u%հ6 "u'.t"u74!R/"vlr-a "w^jt"wFgK "xVʗR/"xVʗD "y9m "zGs{  "|廰c"|廰cQ9"|廰c."|廰c"|廰cY"|廰c "~}=P "~DS"~DS)"FlI"FlI "FlI ">|rA"U慝uk"p:",E:",E$"5PQ"H!$"H!"I;!" X9"m"x.56"I"&IgR"LpT "]!Y "xp "xpd"xpj&"xp i"">#8"d"/Bk5"RR"0"R""R "RJ"R"R"x%z"陮 xR1"2&# "2&# i "fCW;|"x%$Vl"x%$KG"x%$d="x%$k/"x%$S."x%$"x%$f"}z)"}z#"}z"}z"}z"}z "9C"[ ( "-N} "/ "s)JbQ ""'%"ąGU5"ąGU3"ąGU"ąGU "ĥ"ĵ=LCY"D |."Fb i"ˁ7"ˁ"jVV "" : "ln?"ln"U"U]"U"U "nG "~a{t"~a{*"~a{"ʰfX K"ʰfX-"ʰfX $"h2C"K("+r '"ͭ]Cx1 \"ӌ"ӌ"Owk"nH "CP<-"CP< ("҃o+Y|_"ҙ .\ "*Y"D\m0 "W 8 2"Ӻ0j"Rqq "Rqq "` H"cezx1"cez  "ԃ:7ᚻ ":*:"bu?@"bu i&"DlY "؂0,Y""RzLAa s"RzLAa "ى6"m H% "܌T61?j"hm "i?i"i?i?"wTa"Wno" e "-cx=R "ޗi"߉qWL "߱:MC͟" "ᣙ" "᪛=P\j;"᪛=P\ "᪛=P\s"᪛=P\?"AX "X@ٯT"g "|3 $"Tmt": =K " K"sO"k _"wvF"a[| "a[| "U:|$"U:|"0Bf "d R"1I"1I_" ? "{E "CU) = "M4 9"M4? "M4 "@1- "@1- "21"2 i'"2j"2s"5$"Nm+?""Nm+ "4Y ""KKd"! (?"! " &:R)"p!"p!"p! "t9 "~b'P%")K|v* "7"*?J"7"* "c'4 "c'4t?"c'4 "+X\ g "̊ "_iY "NxR"Rנ5 i"۩ȧs".V9j".V9 a"Ai|;R "Ai|;"Ai|;"gDd "E"E"ٺr "ܳp "i<;#/(nN#2 #̾< I%#̾<j #|1C %#7u # ?+ dm # Nnl # nf#l1 (# nf#l1sN# nf#l1 i.# j%^# RI{5$# RI{5#g# RI{5a # 43; c# $*#`p|?8#:] # C8v ##D{ j #T~4?I# K # K #BmNP#OaR #v6#v #)[n #ʖYE@#ʖYE]$#ʖYE#O_u#O_uR#O_uk#O_ua#O_u:#)a.Y #ɲ\?v#o?+#ˢ]1=#.@/mt7#.@/m /#.@/m i'#.@/ms#.@/m #$]&#$ #7Rj;#7Rt0#7R #/ZS#/ZK#/:I& #N=W2v#YMR%f #YMR% ,#YMR%L#YMR% #`%Ո#`%Ո #ѰX#& #͍kk # a# aV# aL #!&*+ #!^յs(## Y##Hmؒ##HmؒK##]5##]0##]!#$V6?-#%gEY#&aTd TJ#&aTd TJ #&gc,I #&hNI#',zLduS #(Hз[s#(Hз[ \ #(Hз[t #(gz#(gzQ#(gzK4#(gzY1#(gz#){#)ؒ #7F #7F #8K' #8ŦkΗa#9#TC#9RY5#:p#;?;6 #;?;6 t#;Kefj #;Kefj ##L$tj:#L$t|#L$t#N Chz[P#OW?U #OW?U #PsG #P"X?#Q$#Svg##TVZ#T[]#T?7ɻN!#Vo=-#Vo=#Vo=#Vo= e#Vo= #YMVO ,#Y|$Ci#[ } #\Cxn (#\Cxn ,6#\Cxn $#\Cxn #\Cxn #]M=~#]5o/f?'#]5o/f#]p=Ict9#]p=Ict]#^e| #`O(+Y,#`NF#`R<#`+nD #bdZ #cgV<d#cgV<?#cl]KW%#cl]KW$#d %2Y#dִM0|#dnQ B#dnQ g#dnQ s #f'Zr?#f@K$#fQ05M#fQ05!#gcK0#gc&#gcD#giTE #hݠ"'#iа$?#j=~r #jږ #lrڷ¬ #l- q !#m }8#m]\t, e#m{D s #m͗פ%N3#m͗פ%3#m͗פ%W#n|z]:P#n|z]: #nf , #oQ" #pS?#qASlC#qASlC#r˓#s:}z]/#tsC6#tsC#tsC#v¸?#w/#wh@ [#wh@ z#wh@ u#wh@ ,o#wh@ [#w]: z#xsP#xsd#xsK]#xs#x/WR#yT#yT#yT #yxm>KOvQ#z;v#zK ,#zK ,i#z97 G#z97 S#zg #z̞#z9,#{]!)' "#}E2w #~U <,K+#~U <,?#~l #$r%&R I#$r%&R #P_^8 (M#P_^8 "#P_^8?#8§J#8§J s #0W #2ښv #ACz|#ACzR'#ACz #ACz #ACz #Yh[WS#$H p #Mĸ $# B^# BD #HmnQ :#n2Ǥ sd#t5~ \ #Yjx #hk8 7#hk8|B#hk8 #z-v #9廓 #mdD?#;kõ#?Ww#?Ww#Zd1#Zd1]x#Zd1Q#Zd1=#Zd10#Zd1#Zd1 #Zd1U #<#v~e# ! #C}Q #KL#X# s#X# a#\X B#\X K#hU#h#\vP #il#r4R*#r4#r4Q #& #(psb #@/qԓ#N[  #P"^ #cJ #cJ #fmtK'#)bI #7 $#7 #7v #w_ׁ#] q#CS#C #1U#:dڿt #C #K # # Y#>|Ww/ #o*#o#o # os5# o? #$ g#8>jmo #,-!ys.#|V#D䈬Xh A#APZf#%5#'&z #[ ps #[ p #"M|L#l? #"Z #XvK# h|'  #Y|d#vhGU0K#vhGU0B#Zg.R#Zg.#Zg.#Zg. #Zg.#T2b #p2\t0#wTk1 #6,n'Pt#P\Ǣ|#P\Ǣ #9C#n8 #0 [#7S#7#.s;r#%V"#O#O #ADT|#ADTs#ADT #ADT#_Yo a#C0? #kXn ~#kXn s#w , #`7U&|#v #̅ ?#oW9 #&D7#&Q #TjX!?)#TjX! #FWDW|#} Z#@9t#k;e#d  #  #̙S #Wx #̙t"&#̙t" #̙t"+#q[ #,/v#%RP&v #@(E?#\[}>a#Pz#b ##h##6[ #@( #%}\Q #,@`" #0W\=%#0W\=#BHs #*D#cA #Ow #Yyt2#NJBO3S #dg@ @#dg@ #t4Y4 *#1;#1%#1 #+qu#ف@ #XoTW#˸C|D#FjZq$ #Cj5t #~UhX#՜S #՜L #EJaj#в#фSDQ #HGޕ{#HGޕG#HGޕ<#HGޕs3#HGޕj#HGޕ i #LNz1ph#)YY#pޑRc#-Ƨ: s#u.S#u.S#u.S#u.S#u.S#xϞb_*#ׅGk;#yc #ةgL3sR#ةgL3s# 샪 +#\|#\| #ڶXyCv#_e a#o̬z#, M*N#~6f #ɤo R #?˻m|#ǹ- #၁zR##3+#4_# #(ڤ #`,Xe #`,Xe #U[gED@#׾"#׾" #Z #朿 ,#GB#US#UV #j4(,#,Q 0#,Qz #b\$# ( #MCq[ #w' ##h2Q&#ƕ˱H #oJ #Q#YDJ#]J/xut#]J/xu (-#]J/xu#]J/xu #]J/xu#ݥ*Ee#ݥ*ED#ǘ?#ǘ #ǘsx#ǘ 9#ǘ ( #ǘ i #pV6: #AJUL#AJUL #AJUL #  #.M 3.#~L?#"h #$M#j^ ,#ɴSt #G;DR.R%#k; (#! ^-# ,#q8n ( #IF ~ #I՛5 m.#I՛5 #iqY[t#䛔7 #xX-/kY#^TZ#Oy #%#OlebS #_+#k.t #;s$ #XPr #XPr $hmL?$DF;S*$TL$ v $S$DI~Mq? $w&K .$0$0D $ 7 $ 7 $ C$ M:?%$ {#"$ {K$ AD3$$ E,$ E, $宐#b ,!$C֮$K$. xs $.(*"ǔv $jF 5"$jF 5" a $hKI $hKI |$hKI9 $$]2'4z$Qrb (M$Qrb -$Qrb3$Qrb $Dom &$?\Z$$$-$*$$!g2 $ $!x]$l )%$hY,oK $@O)X $$R $4[$ '$;Ó?K$)wt%$)wk$)w a$Li+ $dP6$dP6$?OQ $?OQZ$9p$8 $G=N$ iBb0$ iBj$7M0w?$"#(j$!+gX3$!+gX3? $!ӏݲb $!e; $"x_Z $"w. $#:eo$#:eDV$#:eQ$%2ڭN $%

uR;1pь 1pь $1m 2J;rwE'3׸7 34qAiD@ . 4DE 52_ 58AgN5GI l5O~w56n4( 6 ?6ψ a 7i ߯7i ߯N7kIuA79~$&' 9OK $:t ;" %? ;A0c;k]0;)&N;Ͷ*;Ͷ*;Ͷ*K< J >dW/L@X~9v@kVe #@kVe?@ٵhȺ$AA-A? ARQr . AyB AyBAyB tAyB e]AyB ,*AyB A4B:XID d BԇR B5SH CyÃs D8_r J>_r $=>_r 3>_r0!e ; E?; E {w 걭S % #Q=3=3 Z%5 dLjWz?q q $4.3  J# -k6-OE ( [3Z<R[3Z<#.V E c]0H a&+zD+zs+zH/|OxN/|OxK;h't |\`XPL:D%+9>p bOV/ (#L (#[5o }F 75 SfƐ4)ŐZJǻ iDZ ǯ9mpC ȮOh:bI e 1| {ݻ Jf[D[ZQu1>Qu1d(Qu1!Qu1K T#{E (T#{E mGW Ré Ré xn] %rv$)y .W$jpDp= = aզ զ $ gQ9Vu0?"75| ATQ}.qiQBQ}.qi Q}.qi cz82 +# Up%?,oNV :ੜ Q1Rmj? ވGb0#޾e?)_W޾e?)_޾e?)_޾e?)_޾e?)_-@<߯ା`?( J; no=? u4a iu4au4asu u lu?iu \Uu (?aq7v?aq7ⵃ6 G8o &/D/ +/ aw+Oo_F &o_F" 4:7I氞)PR 浧Xs C-zWyUC-zWyUL TI Xj ac3ms Ԫ9 2I L6܍ c L6܍ Q ꟮42꟮42:+e9 _\_Q6_uE t!q] &.#rK oxS1as,oxS1a oxS1a Dto@to@Kto@ to@ ~TE 񷺂}|j " kd"thN G\;.sA~ py󁖠qm6DR 0f'C ,4S 8xq'xqxq gjgjd, Ly}N tW[a pL ' `e ,SBK m훍 , (( *h8 #aשJ$ ͜ Ev p? {Sl}ks^(d?8 N a ;t ;t #X? 4} O 3Jz  0\Ԫd_sD  /V/]/a/ɭ$T[i ⇼n 4bj'4bh }I l>N \  atd$k>V NpzBR ZOG}h=9<: U"8U"8a5U"8L3U"8U"8 4pECk .prE &prE a l),{- g n\1 =9393tEI {JD8j;H8j;N9oj a 2#m/pR튦 Z ݁g!6)D F@!hk.!hk (!7./?"Cf;Z"8Hv"8HvL "8Hv #7XU$Yc%jD%j%jp%jk%jR+%j%%jK&%&1⠜ &&0] ' `&'J%Ύct'J%Ύc az'J%Ύc ['J%Ύc:"'J%Ύc 'J%Ύc(}$6Ds"(6 "-.Ñ#'.`ST1 \=.`ST1.`ST1|.nr.nr.nr /K<}L/s4O7 wd0C0ˈ;k 1oPK3}u030L_ 5a= - 5S i6y|6ťD? 6Bf7~!%7D>S% 98Xf"8V 9/?s: "R sԏ?!>W*?0Or]?\wRE@L& @mֆ A3|QBNU+C)C)]C)C)C) DBEnr0s*F]w0F+]o Fbp)v'GC>PR~ Gs7 (Gs7 G{I Hh Hh H~R H~R* H䀙$ JJO\@JaǷ Ji K?mu ( K?muh K:4SK_M?دM)XM)EN GxN GxN Gx N$P%x<NlO+eYhPXy/ RIJ R$A S*j SgHCe? S # - S # Thh, T$ VrD (TVrD W:,' X`N}X`N}X2_ e Y/ Ys+Ys+?ZYE*/ZYE*KZYE*[ o[ [ob+\6^0\6^0j\JMb, a_g ,atb1b*bj dTo> n!d" dlTL`Ne)5Ge)5G? e;O/ ve;O/ e;O/eʰէSN,eʰէS gzbj=gzb(hj¿/ h_Th_T h^rn;\h #d]/h #dh #d ieEjRieEj il#x\Tj,bĞxkB/'N-lo~H6 \lo~H6? l&B? o/ pSL{ apSL{ s p\#?@p\# 7pTPj q{X~q{X~r,8?Fr,8 0r׮ 2s8UOtr8z/u=2vv`O'v!v :R v}W wБ ,xzvIyU xG yĸ{Myĸ{jyծ,c -z:F|}"#,}"S}"$}x8* ~u[~ ?mw.  NMtvV%V # vF5 '|g ** *| PɂAHgµ+^]e_fm #xWR9K;#2lEX 2t)ڿcڿ0ڿS%ᣜc (]h@$:_-_- jmg=?-"LI[/~ fzia-) $Z s fKI f% fR% fS# f$g$g$g|p Gjp G k0<5 -?Pdi4Ǜy ?߽ʢ po x +; smsm#ϵ\} Sݜ $!￈ld%R LN`?v *Q & D˭dj%kuR|| #%?x($  iq N|N=CK|N= 09k<09t bZ "h;r e 7v謫N-hb]b FN%?Y/ ]<7 Oӑv?R+vR+ 5jR$5j<m }jsݗ ͹[ƈ;_/#fƈ;_/S. g t    j ߬WUS )C)&ĩ2ĩ2ĩ2ĩ2 ĩ2 -;C ,EP; c r!Io5h@ ;xّ3|ȃ:&8h5k i;3? ­$sY Ò?  gKʹ? ^>: aT^>: >V3EƏuHr FƏuHr2@Ƶ6 [ƾpWL'06 v3~0 u??(|}Rʹ?$ʹ?ʹ? rbjaҾ |y yҾ |y rҾ |y .+Ҿ |y ($̖ urN ̾\sS| 5ɋRW+ !^[28+K4  ,H seaQeaQ Ы6 1kЫ6 1 Ѧhl'NZѩm*jekNR ^5;:@ub?ӱ@쎞d<`h4*K!. `/x  n^CL)~)z ,)~)z ڳ/)$ }j}j!}jW  iܙMv/R ݟS|ľC v}9Zl:Zltߋ"vL2ߋ"v=՘M=՘=՘weLO&z=H:$z=H $z=H (z=Hz=H +%z vO i^w qP(nsXsX isX? B3QJB3QJ UHfXRڌ*t"ɍ Ꞓ~aZ p* Cjئ 3ܵt"ܵt" 'sl W ]'@cR*L6a&,v \ uQ[:uQ^kY Q4"6z a N@ЗObhR צPI 2eE8eE C[LNX5t)# r? |D,eH]?H "H g[ĝ~ ~@h~@ ( d .z eDD eIq6 yd yd euw&|? d(~MdCdCQdCdCR dCDdCKZdC:dCl9ky/or52sD 2sd f@?w? qYٳp]Rp]ep]+p] O1ZSO1ZR[O1ZL8 D  D _>lKYV(mY!TalY*  wO2?yv [JGb y>_y>L y>  㫺v {ڦS% {ڦL "6 &w #  #  #  i 46Sa $jeQjeAje U k' #k't PQC Ρ_YęR "/(RY"/(P s0<j.ttvIV.7IV.[ Y j>Lz##etlb?"etlb  39 3 yzYN@41* \iK  _@^ $ _@^ '[- '[j •ȧ=!?>* %!-籂N;"Kr"SO"K?"$%>#ձ_U%?L%+8GP &Z &Oa& '66((| j ((|N ((| )%cj i^)%cj 9),S)DƟk)M\auq3)]kHW5{)nx *Bxu?+WEy+ɄT+Ѹ,NQTg@ ,5~Ds .?s .fOq 0*zK1#סк{1#סк$2 ^ 3j 3H3HPi3H;3H)3HQ)3H4qSI4tmS4 M 5D+, 57wH 7Z^` j8T$m<\ >8>7 ?AI^S3Ȁ,CMO< DKeo $EUX)vEEUX) $EUX) i#EUX) EUX) Fp= FvUFvU F\ Gsp_ 'GXAG  Gt: ,H+ HWvS;hHX \I smz4^I smz4I2|SڰIN@NMJb<JEX9kJJEX9 (JI9d88| K[.Lv59h ( Lv59ht MT ЭM  M ?NJmNctYNpb O'V PL4QDbCTQDbCd-QDbCKQDbCTFT^sZL T^sZK T}D.T}KT} V]y WrԐ W#sW6D Wl XbrB|]XbrBbXbrBtZDkzZ ZDkzZDZ<E (Zx [jVe*[jVe[Tj[Tj[Tj [TjY [-b[-b \ C9G\͡ȗ["^G q%! q%! q[[oq[#q<=r3P& rP atvthjAthjt-thjbthj thj u|u|D u u u=) u7rQ vsQ %vsQt vsQsw2A w2A &x\=Dx\ #xIx  x.Q%#yf.8Sj|RjTA|RjT|4o3~^.+ yh DQ e L ,ee#>j#> !fH!fH $N(%ӘjCG J\ $ >{{6ajo{:p lR hR hAch?1&\H9Q QTQT>]TE8>]TE8?>]TE8 >]TE8>]TE8 />]TE8 ,*>]TE8j>]TE8s 6wj66w i$D0$$O n$O6yf m$!FV!FT_[ /xyZ1\h/E B{, # $ ߈ J|M]c& 10ah9j=s- ܕR#AB}D oX:oX l7sL7sL ( C9C)CRCC # i#Y ’q?>S?>S>S ȝz;J+jF% , +۔ 9}0?&tb CC ,DC -IW fu?D ^l#t $S$$L $ n& BW¿ ?5BW¿ jH={n={n ȉ $ 5j@P&/ H\I: 7v ,7v jo j˟..r[ Oe a—}(X[ :1ֹ(!Mkیv La } / $ð mm4˱?-4˱ %4˱ 7J7J 0߫z_$vj ZO9ޏ ;' '  5TU a5TUv-5TU ,5TU a=P5 0=P5 ,!du| 9% =Cv9% =C @9% =C i9% =C 9% =C h* Y2h*tVN*VN*VN* ^v a  ^ 2(.O4(.O$ Z_O HO i?~ `a#R LǑx B .'a$[  ʓV(mGn ]`k,;Z$];Z$ M%' aGf@ k8ck8cR C ,Ζ>bOΖ>bdKG ύ)^=H}6ac ƨ Ȯy³ p WR 1~N  m5 $Vm5 Hm5s)m5jm5 f psSp pjlW!lW ( T꼾 t+ٞ;  ڴrR d0$=OS&s-/?z-/ $ҐvLSS2@PP CndF_ *ǀ> l: "{܋ 9"{܋ ("{܋ { "{܋  a܅ Ra܅ Q ㄊDoN煠煠s e! e!?*W" <)">v觻 #dv a#dv #dv? %'] rC&R0ώPŢlY1]5oFa0|S  u%ŗ?I! {)hMFp iz < $52: a #/ (/p/p󵖝qSrt Srt T#>  jGw;y~ &~ e HVK' 7Yf' 7+.jj3 jh.2h. (kF c/ڡ jՏnt)Տns 'ތj@ * O4_č )dPF \ $=$=L$=$= \ czn 6G ۫|! s ڮz]Fڮz]Fڮz]Fڮz]FSڮz]F ڮz]FQ  M 1 MzQ} c+j 򋰵 򋰵 m w CR&CQ$G-g% #1) @dt D J s#? HZZa5HZZ eq6 # . . M2> M2>a $ cec  ?Ov.?% C$+ -3 C$+ Ax|O?o| o|S # c"# # Ή/?  *R   !+9 \s 8{zCoE D bc bcv NZ .I\fNjz5m* ,ȅ 9LGKO?* A r# ^>U / &/ / # \[  Ǒ7 sn5M𲐛F PQ %n'ɸD 2/wj2/w?RCa, n ЩD|QvЩD|Q ЩD|Q ЩD|Q v.| ,S v.| km km% km!99)kU! dj#KX#KXl#KX ,#KX *#KXt%#KX t$H`L3$H`$x-v$x-vS$x-vI$x-v3$x-vL3$x-v$x-v] 'LA^K (i;RC(i;8(i;Y *v)6 , -?^ .R ?.R) /U 0F ZC\50F ZC\0F ZC\ 0fxXt1G+f2 1/4s2ù3X#N3SQ[4,: 4\x/R~4\x/R~D 41^t "5s  6`w$"6`w$6ƻҝa?(6ƻҝa 7mzb_7mzb7 2JHD7 2JH!<=Cb=e!b& =,KB ?jmkHn~>mYHn~>m ( H!56 IAMyjIAMy ,kIAMy ,J56]GJ56]6J56]J56] JI sJI Jϸ@#J`7 Lo?NBz_y N]y =O`ɾ Oմ(:Oմ(,Pu⻱Q~Ro c5R sDTI' ,3TI' (V% lY0'VOb@?NVOb@ Wu܆6X餥+ (X餥+X餥+X餥+ i~X餥+ ,_X餥+sSX餥+6X餥+ \X餥+X餥+|X餥+ X<:RX<:Xj X.s:X.s/Y-!aZ ScZ Z~~? [ÑK ($\ŧ- ]l= ? ]l= s ]\p9 _#ϼeK r_#ϼeK c!_;7t _&PRjatOv atO a0`b& \a9a9 $-a9 , aѕ|j0bpj#P%cvb4&f?O? f gu (Vgu Bgu gu guhUf7 hc}j h{' jDx tjBjBj8wa j8waK k\R k]2t kB?vkU!ldqڶ ,/mkʚztjmՖuqLXmՖuqhQm. 5 m. 5 n(Wev o! o"^fyp<ánqHzd)qHzqӘefqӘefR rOA r@S?(rf $rfrf sm>[!spKڎ| ,-uCg!u3%v>lB x[3Ujx[3U "y'ٙ7ZyLՌF?y^:[Uj#yKa)y 2ݿ ,@y 2ݿ y 2ݿ |LkoA |d5} #~\Q ~g醡C0+~iZ{ g ~؇m; DMD+ǭ K JҗltrH?[ [ jQit CEU? Mw }1:}1t Ws W? Q@Q Q -HtkƧ5je F; c@Lk @Lk@Lk e[@Lk F%* @;V*%@;V* oI: ]Y7S } } Ըκ U86:tU86: 55#55552V/ f\ܡs`Qk(( (.vq߉?*8  wA GE%Q6H?j j 8sN  OK O  9kHZ_0 , {/y e IdGpX) Jl|Jl|Jl|RjJl|,Jl|Jl|K 6 6 e 6 + 6  6  S L [HVR`l.Vc}R3R#Dp j..K IR)IQ:Imˡ*b9b;(cl{ a7q8qq8qUl0U3UʅA(TbR0 L-v5!US ;O_bn?xoH$#2:bC h dvy#L[ }E^ }E 7 ٣7S[٣7S[K fH{ iڣ;ا ,&ڣ;ا:vk, p ۽2/Rܱ|ܱ (  [K"iE `iE rߧgi Do_ \t|%K NV'ezP( ,szP( _Lk D4 @_@_NlSNlnNl )8$-9ZhN#}yv/NdN /NdN_ 7ZԮQ s WB?#WB $P+\&C pC2 p SsSsSsj?&Z> FdARξ 9dv܎r%5^aҙR/k9/k/k F: (/F:j.F:sK*kR f@jIQ # s* }0OIv^['G}!K 'G}! !J (>t( LQ *_>t i nJi nJޅZ '7~ `qyJN :>r.Q CxS0}:}0}:}Z-0}:} 0}:}L MOS@o Ao~A*Ao~AAo~A]Ao~Amt(X t(X =o ؒ :ؒ Cx _)j* (3j*s E?*Z () a()h "m( 2"m("m( G0 Kj? ?j?YFlF >%Yk.M\ .M\ ( gVj ;%R ywk 8q+  a* a|0 N R v88v CѵI p\tsĂH y]/ ee( Fp rFpjFp m(?6m( m( q?T ga ? TԳJj&@ $ j&@ ,ept#$>0ӿ<7/n   $Gm i Alb s 9JhH ioK $DH _ vS~*Y\m.9V g ^Ġ"Qp$@泿[ Q⼥ \N b)l0N8 ܶ^-_K !P%b3L ^ #Iz\ih$7xb j%s0X%' 'WٳkwPK'k뤩S"'u'uf '}:N 'egoS'ego '| i,( tDq( tK6(zL*\f ([΃@(f)6BU)d )т$ )&շy? )q @+g ,h~U6Y,h~U6 a;,h~U6 ,h~U6 ( ,BDv- \-K5LvD.%X .ك}[.ك}0w0w , 0w 0zFxa c1> 1pmkUD1pmkU1pmkU 1y/K1q(%? 2RKz* "2o743^뱋C3^뱋CSj3^뱋C3^뱋C3^뱋C3^뱋C 35Ft 4>~[ @-Nv{ @f6fj AlKAlB>?;G?B>?;Gj7Bt.X 5Bt.Xt D^ٯ\dI $ K&)kL= L! L! = L̜*zMכ IMכt.Mƌ7 N 0ƓNNc \IO%xOUu OQ8P?QkLQkR̦.kgR̦.kGR̦.k&SS9t ,S_R~dS{ SȜT SM],T~9X|Y c T*]U}9 V+ WQJXOe54[wXOe54 \T9N c>]<&\ ]_p9&P]_p9&F]_p9&*]_p9&b]_p9&(]_p9&]_p9& ]" 3 _ s7_ s7_jF % `oS`K_bdG U b`(K d$fJf>ePg+ss g$N`D g$N`$ gKq2& h>vS)LAh>vS)Rj[tj.x% j؃ kԬ(UkԬ(UKlDjs9lllljiSm&ݸ~!m-mHc0 n  oUn p$>hp$>h pEN pPI˵tpPI˵RpQ/%j p{ 3$ q(Er&re=&?>R sT1#Pr4sxS5 s¹agt-  t+΅[Suo=Ruo= v ]5vA쯢 v.",]v@ wRR wRwnj#S!wnj#wnj#x$:l z; {$~H5{$~H{4,@R| q] ~fKj l$>  * `PLN 4%+$D O"S @R@Z /5Cy|N?jj%tn% yg {I `  (ڹdڹd :9  ":9  -42?V3ejc3ej T YsY i@Y /Y  DvnӲ I$EQ &pA gtAs4̒/̒/ l 'B i(ٴ H $ i#q j F|? yrq<v yrq< "yrq< yrq< f$U6氾]? Hi$C"! 24Ock[j ?F&χ$t&χ$ #`=rk `=rk MFS ܵC 't't+~οsFkvC1 lJA y6 99s.iKݺ=s U 6D]t^D]s1nBO44Q 0_hA 8ֶ1 WNKWND}RR7޴] ?Rn j_  ܚ$ lR y+!# -9%+ 2sM Vhl qM#qM qMqMD qM$ PIPI6'PuR2@Kb3Y2 |%; ^lD `f L G_ G~#E ۛ a\[zx\[zI^_S ^_S?.~hw. Q jۍM? Rɚ Ƒ#9 eŗ sStu[ Zs cÝj3ua3ua YfAQ ks Z _y L \ lֿOIbK ؟]]| i ٺU2@ sfhh s{vQs{ $ڹVvہ{1܌R~_U0c?_U0c \9%\ c /ܞk()k(Rk(>,?NzRT$ O}| a-pj7旘dnX旘d;oq+jꟅ56:bD i8^ R)8^ ` N¼ ߼xaj / 0=S ?"jNuKNuK"NuKNuKc4Ș omܻ qY\>:fY2 42 =d R s=d =d  E=d =d Q-=d yy30} kֹrJS} #F% 1F" 1F" ?>˛AoK/ / )/ s sKR j0n 95+,2"X|  B>`n B>`n i>~_sF^"5^"^" ^" X4W (VrjSEVrjVrjL Vrjd @ ; !8 5p/8YdI H/8#Yp@?V U_rW `` #?N جa ج 5F/ 5F 5F p#Mlփb5oEt6'38 s(pqD b@ߡF#FF v ٸ<` K 9s1o 9s1K 9s1R 9s1U G 'Kw rp<?,ʪmmj/B^cj/B^c , dS`U HY"jPV("V(V( , V( $ Y(UY(U Y(UQ J{j!J{ ?},*|?},* ?},* W%L$?!9q=$?!9q uŕk C6c3kB"&N "E3/2 e"E3/2 ^"E3/2j"E3/2 ,3"E3/2 "̞&R "Ԍ )#~".row #Z #Թ?$wvr i$wvrk %\@iR%\@i#%ݙW_%u&Ld^ &XN\ d &)6v&)6 i!&)6j& 'Qؿ6'Qؿ6D 'Qؿ6 ' ' s($r **>$r i *@C+/|bj+Cw +Cw 3+Cw +Cw ,+Cw+Cw ,NL^k,fH1&W;,fH1&WK2,fH1&WS0,fH1&W,l]Y \ -#7j -NpM-NpMf.PbRtX._dJ a.簐s/[ZN * /zc6?0$@70*J 1Z 2) k2|őPZ2=v?"2=v (2=v4Ĥ;04be&x'51cyؾs >0>0s >02 ?)?)?.wV , ?^.&A$A A@ Ab^Ab+AbBC19 B6u2 CAH]س - Cb̒ Cb̒ Dl@AG (G Gkֹ+GkֹGkֹ H X>!H vXH vX H1+C JQy@*"JŠ4a! %Kv) $M& Qy0e%_R>MKRQܲv R+ SP5z iS $U"c1- , VFAhM 2W>zub X] jY\.&Y_$ j,Y_$ j+Y_$ j[wj[3[^2G ]4sڮ~&N ]Ʊ bP >bP 'c:rsF &c:rsF a cLiBcX. ,cY fLxfLxRf>fjqf`f gr0]j g㷁Oi}dRiũ̦ c kSxjkf l%lOI.sl'\ m|쑮0@m|쑮0m|쑮0m~GB m c@ni! int&U qI  qj uZq v`CL wYsw7bIy#4YUSz@0s%z$ =Uz1< {'_ {|@$ }<J }ƍt Aj~,al ~́8 % Fi ku ku$lٝB7i PLMQ5k lg'dG}Zs jM`jM u?$uL h=]R qվojw"dpNw"dpR>չN= RkHjr妲4 \ $  Q ;DyE 8 vZj6ƽ#L _|?  U:2*5i*w%‘S3_N3G3G] : aR u U>APPU>AfE5 +{$=' ~RP: (Bz K&ZRED_J\ױΝC gгг9[г 2=I+gO Q2Q2 V*N"Z V*N"Z 1 V*N"Z: @xM g kR;5O A7; j+ |է:?kCYTg9y `ܻhs:.1W 3] Y*f Y*fW dmc#87U OF aƼ7h){y~KD/ b96k2ҥ0[  e[ n[  122j/9M?N q/hQ@%>A9 $n֓-# vjg% vjg 1BhI <* *2.CFH9K6@|[` # ?3SW0B??#W0B? iZN# cZN# SZN#t!ZN# ^ ZN#k ZN#b pS/@K%(hU}RhU}RRhU}RJhU}R4hU}RR hU}R] ݟCE {Vv}V[`}V[bg9оо 퀚$ ؗeVF lEg}vEg}Eg}REg}CEg}Eg}ZH%GzN# Qi#.vtFJ, (l!L ? $w & L蠱M: W( sB-dt-d d5 d5Q d5 o;zv>%{@J?ǝ@ǝ3ǝK'ǝ ?h`T?hR1q3R">ӑ ɳZa pV[s| { r U 4/(U 4/R5?J  +xo Yc m$gO 167:=}TVhK K-xa ( >)T>)TG|w *ѐA %.[% ؔ#Y M2?'al s>K?IvoId8z Sc-[#V.1 %Y(Nͭ↎ B !↎ B L ↎ B S Ls㬯"0-Fmf-Fmf /m~1M?Qj?#| : J$^% (&J$^% m Ճm?EՃmj0\Hܱ" DVc,Vc⋬wzbރCzbރ6C H?~{ c !O = 3<[zQܪ?k.M (er uN5 #*䀫 bJ#ҽ F N[ Y @ia + <ŵqMv"a^ cY`a j>|,>| i>|kƖ;Ɩ;Di ۧR n>LAqH͉&D 野 -<wg$(җ(F̕M&2/aǑ*] j UK GP4 GP GPS GPf m .!c $ v $; v ) 1 @: @:Q 2v ԵT: Wr64 tMkS 060 _1  ZZZZ] ~4;$mq.<Cg*$g*jg* }]K jO 6bj  G*T~ enXEenXESenXEenXEDenXER N? yF ed8?7ed8 \ oyH &Wns9.}z bM`Y a.]t"ocȹCocȹ ocȹ ocȹL ttyVH{  2$2k :L(:':: t~ ͸IGU}͸IGL͸IG x| B~B~B~ , aOR aO #X"& #Xb !&xo!!-͸MK!iyfs!iyf !zys $s$ i &%P[=/&%P[=&%P[= &wē[}&:]Y &:]Y (NNs (2s (,=@R ("\,#Z(?c ))փY+'Sޫ +},7&yL],7&y7-ks2=? /Hs ,/Hs i/Hs x/Hs C/Hs>/Hs%/Hs/Hs /`$ER s/s Y c/1U%/1UQ 0$s ?0$s  1J5"*1jx1 3=ȼ3H5  4 %L6E.\h6E.\hq6E.\h@6E.\h6E.\hQ 6ܺ2E7"0 $7S@=u 7 yiR 8?9Od 8I/ ; 8 \? 9q8@U :B@Z):맯EG? :VU:VU<,Hqw ^ m^&>m^ >H j >tIi ?8KcL#-?8KcL#-?8KcL#-s?8KcL#-jA&d3 A瑏 B-BC`  C6NtDNEqGȕ&F*bꒋ F GOl Hd JBaJBJBLJ {&d J'Jf,J:tOi J} J~KB?KB KBjL iL |L (LbUbW L YL Y N P2 Pȑ  iPɰ+ ?QAAC/ , Ro>sRx2Sr폱DSʿ(# Sʿ(#a TP8H ,&V Zd Wvp$O6Wvp$O Wvp$O Wœ W 8ƏtW 8Ə iXev/Xe YYj# b Y/h3dZ0Y Z0Y Z8aW l Z8aW [ȷH9 [ȷH s \R L\zȇs ]TNh ^qbN ^p] $ ^$ ^> + \`H bl@?bl@ bV/;~bV/;bs+^% bNa&Lb̏ .c?(#Sk9czV d-j ^d-j sdqӨ`dqӨ` eXӖ s ffn" f[#g}e g7vg7 h j $j j k l{:1tm/QU.m޾2}|m޵as n|ԿBS=n|ԿB$#n|ԿB n|ԿB ox@j; o;aGo;a[o=f ~o=f c8oTl*oTlKoe-]&oe-]oc{?oc{soc{ ioc{j p(M4 qq3? qFSaS qX%3Y qX%3 (s'o`Sb s8( tVKpK=t)]e"u5R@u5 +*u5uvq8-+vd vˤSx :J| x B|x{x{sx,iY zSeM<{()pZL{bgZ,'{ YR |:nP }T,4$]~NE|~NE[1?n~ Z1!t $}&;א%!א%t QW+æ I? r CQ*c Z 0Z g \-ljD9v ;E ЅАPD'tZZy0 "_? Q wm?  tQa Y] ~ jS ˄a=('wNdn~^ Ddn~^ ,97j$j )j 6o .4e4jd y3y KKsji/G i a,3 /a,3 lKN eKNs d+ N$ [9% 7VWj:7VWj1vynZ? \6>N ,6>N $R u?ad;OwKOwSOw s Er\:?&r#|' Y&r#|' I ?? ~BϘ]Vu" a>Vu"j>Vu" J1 J1J1 ,J1 1Z.1 +<1R.1L1 z*3K=3֧ c ûBBUA# ORO E E lE bE AE ;E ŻJȈ QȈ >Ȉ !Ȉ Ȉ   )K  7[Uϒ ^7[Uϒ Jm\7Jm\ kW! w,? nA # nAˌ$s @K$}[ZA fJse ύ]:n $UmNYS  Or!Or!ѼpԮT>$ -!)W*?+ ¤w 2,l`H 1,l`Hj?b~X?b~X?b~X?b~XK _(?3_( AhuoF jw$F ` ` YC! ݋406݋406 , { =E N EE N mE NRE NE NE Njw 5NK? ↢a8p/? xlsL <R֪<R֪<R֪? >Qa? 3 L ,:c4":c4R Z-D $l VU? Fށ  zX\ -4MHk躉̡v7t e 錁>[ ]U@ +i6?.R=+i6?. +(q~ j+9 SLZ>d8gG {st9Ma?$ }G$ } $ }K Y: D#aǛp}L Ǜp}S ߚĞ]$=$=$=$=R$=Dqt ?? ? / / /U h2ޥk4h2ޥth2ޥb }3S7OQI/ , ᫤H8G)!8G)8G) 8G) <`<Sm:BvU0igNigN? A ]/!&C.?JdRk F_T5H:#T5H ;U Phٟ9Phٟs\f " g?  g? d#th {%M 7; ]^ƸtƸƸ0 c=7 oF  g d  h#|l 9gm ,v ˪kH ب" d ]N Y)ł Y)ł wijҠ_  Iv, Ijb,9܁R.܁R.}#hA}#h0 k0  k0  k0 R k0 Q /)/ =fG pT,*vlIvlI ,vlI (vlIvlI s ޡx ޡx ,ޡxޡxޡx@xFR  Zl)H8L 1~GE Ȅ - ( çAçAçAçA 6S96SD4z0YZ-?Jt?J Gah Ðzw Ðzw   wm+*wm+* B }Q *<5S *<5 ;'3:d 2% ՞ ^"$@\#xH !)$%m) QW $4%m) QW %0>g6&=SS&Gɿyĺ 'Pī(7K(Q4)0"ɝ8)y% )y%j!)մA#)մAK)z791Ra*ũ>m g9+iF0,#V7X[,%Ig.|>].|>F.|>=.|> ,.|>/9F d(N/9F d( /B65/B65-/B65 /"qI \0Vn:0rރѝ 2]@L2\5Bk4>4 ?-5;y 6U?6U?T6U?7et`7ۊR ]8.n a8(wo8(w%9ؐ^[p;"v ; ; 6$W <N W<N=pX =m> @RN >8duGt? T$@ h@ hR'@ hAh&0jEAh&0k?Ao&1ye BBzZ &BBzZ jBBzZ BC={CuoLCe CF% h DWxj@Y D$3_ E Pζ! E[=)E$xAFq_s? Fq_s G#}vG#} (]G\iM H _h׎ dZHg \ I^LzVI^LzLHIwNXUIwNXSGIwNXJU|U K͐KⰞfwyL=EZ , L=EZ 8 M3 Nb>fnOZ^K%OM4(jP3p QP^>QP^>S?QP^>'SyXStU j T{{̈' aT{{̈' sTɟ UpKV6Aȝz V\NPV\N5V\NViw<KV+Vo{EVo{EVo{EOVo{EXUC]& ZIܾ6f#ZIܾ6f#\ a#\޽ ]7"vU^' _d*{{?n_d*{{R`.*+ `,?a>b> bo9bo9L c! Gc! GYc! G9dGQZV eJ4",D e8( e\ fs-p.fs-p$fs-pfs-pg@bk8hۉg hΥKt i^kn[ xjR/]wj9. ek(  k=~N k6 m[j kbn)9kbn)(kbn)l+qqm l+qqm lrs $ mY% ol2Zoł+oł!p(lz qbr' njIqbr' nsqbr' nt qeA__c!qɱqebrrfK tݰAhtAxv? v^pkv$(Y vǠvRvǠvvǠv wP/E sw)!Kx`yg*~|0yg*~ yg*~ iyg*~ ( ynQNynQNOz`3tNz`3+z`3siz`3 bz`3k,z`3z`3 z2U6#|1z2U6# i{9y$d }ٿ/?~58uA ~{`  ~7]oj ~7]o ~OfUJ6? Zn s n ? D K= 'DYt3Z,(NPD4s88.88.88. 88.l88. 88. , 88.j ? O8 < . 0F" ~tL~t ~t  = t8''JnP IȶIȶ PGc <PGckNPGc BPGc a `a j`aj `aY`a#`a (Š C5 5g$ 2g$895R$>Ya d C~w^ /C~w^ i"C~w^ (o4Q p~  h U29[RU29[s  cs s  gl6q yy8+d8+ T(nE ,'&p (&ps/rus /ru ls E)3`t5xDNxDR  *e ( u:Abku:A"u:A Y; $#FN?$D1UϣT|)(S mJKK` mJK: mJK A mJK 2Q9q2c=vm_ -F: 3# UyviM.:J9@ $ C3d C3djC3dsj]jJ~:t~: (~:~: ~:9"~: ~: ik`k`>m7.r P] P n9] \ my my 9my \1my my j~nAGNRˍK*Rˍj Rˍ a 0u| ȆymcȆym( t: _Rm _R fN?/ µc!$ &x2 (X &x2?* &x2 Y+O a-N ")k#")k I?^l v-@ǩN 3> 3>  J{}q Jܬj-yN^0 +X6zl9$ T9$ T9 vȷ ýYG8 :W{ 'ƮU>̴E0&ȸ ߻ sS&Y g3duOPዀո ̎wql~̥һnv\\@ zψ 2ψϔt Ϭwg1P?v%g1P?v ig1P?v g1P?v ђE' ѩ?[C ѩ?[C m>ٺhf/Ҽz 5u Ӆ WJ+85~"s85~" cj85~" (ԙ1 ԧL`hR"g NMg  Ռ+4Wt׾`L I s1 i_CB؆16k=`Y=`Y$=`Ys=`Yh j#^/ (TT>E> huhu ,hujܳG j5?_b?_b _b _b d_b *̣R ~J; ( \,cFs?0 wt; t>; 7; s'; k; ; ㈷Һ a'Va'?$a' a'a'Y?Q l c堟c;堟c;Z)堟c;'堟c; + TwTU {H/kkL kZ ?Gb i?Gb ?Gbs -cp?b}`jp?b}` ep?b}`p?b}`R3bYs~4!XZN`bj${sj 칖Q/"M` =T"=T"dO=T"=T"Q=T" ph um Uum UQum Uum U -;cI$%`s k/P t}H' *#ER 7]"SJ5C ]J5CJ5C 0kP ,.0kPs0kPik< cD q0 &!ѥva g|?L :\qs$)5 #7)5| PAk R:RR: R:R: +{$x+{$+{$+{$.xj 3Gu& $X&jVXճ { L:a7L|R_ * QdQQao rF Ǖ=Yaȯt Z ZL~ Zhp& 4,S cN9L Ŕc Ep Ept v  yqKZ 4%? } f;!R8n59n59n59n59U H HX RG d=m  Az =R \pC:]2:| o]oeo]oe 1C9M/? u\$̓?#%PݮݞR w 1nV㫶D>nV㫶knV㫶8nV㫶$nV㫶nV㫶R G2L?Ex Ol Ig.jSQ 6TlR ykyMi|2i|.ׅs  )`g  u3! a! wU!;J>Tt #NR#:f>T?*#a3^v $?aR %@y &Yg&Wc ']ѐ(tCHr+ՏON ,(m -[Z (-tk%.& .L}! /l:\Ԍ/l:\Ԍ 0:TL0b,Q 0w80w8 2UcL2UcL2UcL2UcLL2UcLZ42UcLS2- 2- 2 2δ>j 2LE3(/DU !3D:348l/ 5L 7t:B 7a\ 7a\ 7a\j :ePgcZ/:ޔc :Z.Lx:Z.Lx ;Df ;BLK=ON8>C=ON8>Qv=ON8>%=ON8>R>^w $Au(BbHj#Dv'֭9 aD}7?<FA, FYY cFzH_sl . F/ GW`պGa!G 5*G 5PG 5G B $HY;.2I-W I! a JЩnCKb"//uY FKb"//uY (Kb"//uY|K*\L {޽3[L {޽3ZL {޽3 Lf 6?MHg *SMHgQSMHg+MHg]"MHgMHg OK (O ,*O $OO O΍NLBvjPv8ORI~)? RvSƥŌT; (R(T; (T`ޑ""T`ޑ"ZT`ޑ"S T`ޑ" U+xeU#܍ U/bk  U$ U$ 1U$ )UW1?VtEs$VtE VE˶VT֜ 2VT֜ W[NO sW[NO?W[NOW{xhv&W{xhY["aЖ -Y1@ 3YBKdYBKd#YBKdCYBKdDYBKdZv< Z \88 \d8]_pO_6`1`{znu`6Y`6t`6 a[`6 Gb Z7sb6[=A cC[&dfZ if-:h5O&h+e#B ik-$ik-$i[q|NGi[q|i[q|Qi[q|jCۯp? jCۯps jǕkqqgƩkqqgƩ m kݣ$z{Q#l$5@!n8ڲ pB42pB4 pB4U p"=tNp"= Lp"=kp"=hp"=s q:70s q}O qۿs$ro9 ? t>(ʒd tQ !tQttQ rt8DQuu^b浉uAv. uvWuK v׭PZvTJHj w9.rx ;Le $Ix ;Le s*x ;Le g(yln c &yln c !yln c z(apR {lq5({lq5| `| `d }5R}\s\~,udo~QR[`e ~QR[`e~~E ~돛Q߉]W_#]W_e '5'ؗD@ؗDUD 5N&k î 3mN]K" ?o;*$*KPQg9Y' sY' 4Wr(^TSm i >h9fO>h9f>h9f>h9f)o c74"c74c74 Ƅ:a+Ƅ: ˖VO  &s I&s |8&s s)&s C\QSIr t˴ C}WuDIuD#c  vhppn;b -#yj9I!QLQLQ ao}u?o}u io}u>o}u g JP0;YBJ"BJ: =H';U(=H';U=H';ULI. @I. @ K]8  /RV='v7^z~ ^z~ f? 哄 $ ; a)OJj hl)[ o]p2?g֧3  :X:Xs:Xk 4L Y4v VU|޿10޿1%OIy҆MFCK e]o~zo~z0}s U>t?dU>t : $}E}] E}] #^ͷpo,sr; N[ eF\`) g :pf+/T <(;+s4<(;+ i z5 ˃@p+_V˃@p+_NWOR Z+ |*Z+ Z+ ѪP&VA&VAR&VA&VA&VA$ oOA?N/> \ +R oy˛/#N2j wX0J ’a ’a 7/wZKPs>VL%GiN ft~I> G?{~I> G ”*2 9#b}9#b} e 9#b} R] G ףg:ev:e ()q%$bʖ:k˗7[Fs˚N˚̕[ɿ a8̕[ɿ?̕[ɿ̕[ɿ̕[ɿ ^ Q6MV$?Q6MV$s)9"p BFif ` M~@4JG4JGݳY- a ֘:Ry _l ?L_l  E_l  i@_l j8cWrDKrDR َk % \?SlK ܚyluܚyl.ܱuuuruu.uu޳QBd=[)4EU? ^ a^ i ^| t $ 816QU<}*mBu ( mBu \ P3oA ,^RIvFEv (vFEv xvFEv .$Pk K儺Ng:gE+棁LS baH Ɍb \[F3 Ԡ8Y,KK5N#(D8Njl  l?m aP> ?7Q?7(3ѥ;[ 0q*?ve2@qZ S Fԧb@ zQ(LzQ( v]O &v]OYó@ ( _S sN (s./ cSx_cSxKZcSx6<9v8jF,#z0Z\ ,cLscL , )v E  aRE  ,9E  M CUn (Un e 8| 78|   ]U Rv Hl $j^rtY^rt ^rt  m.L6U#S { @  Xȕ: ig Xȕ:j Xȕ: #Yd#    i  ! e_m _#`zR 8 k K[X ᄖp ᄖpKfV %gk;tW@ % si;R2{6$X [9 MmX5z ]kez ]t*z ]Y gUviȫy RD` y! JEy! Jt#y! J my! Jk BtP4W 5 xyY 12?Ch6ĴvJMtrJM ;pxD} Hb\V h% ƦgD Ʀgf Ʀg + !/b c !Y %ײo &vI"&vIQ &dח&!uA3'Z[ (2l (re'Y(re' b(re'tZ(re' i(re' (re' (LY-)*z2y*z2y0*z2yd*z2y *[LW +j,v9|?,v9| i ,'qJ,, s$-Z#m \ .8f.G0:y 4Oa40H $440H 40H 40H 40H 4'v :5&veb5&veP5&veH5&veK 5&ve 5u5pK 6n+GDR6n+GD6LU 7y_< 8j{듼#8" f?j8080 80t 9O,k 9hV t9hV (:}j:,] :B \ ;{/k;{/V;{/f ;5< (.<; =Ġg??)H i?Á@{@J@d'B'axBX#%SBk~aOBk~#B ts B t? DF/f \PD!uvu? Zϭ aZϭ $Zϭ i S- (!S-S- "A aw jƽR+ jƽ jƽL wgDwg e]? ߍDt_ߍD *ߍD )__)__$?D ,~<2: - ;Sd[O;Sd[ȕzu0v|yq z)Wz)W i!7,([ Y`^ Y`^ &v )&R4yj)4yj4yj 9ҟ'R< v&y<< v&yCb%K(-CuMCuMCuM ddubFnOWFDKXt9g̯t_ B+KkSB+Kt-B+KJ8S(J8Qa^@9_sȑ :|\!y!y Tv'T zpe*vDy iDy| IuN~5Mcm s t D# DN"Bz ?Bz  ( .B_ Td< YҬ wYҬ TYҬ YҬ S ( L #u#D~#Qc#B#### #Y >]OTf F/ af F/ j!FuVuV^uVRguVGuV&uVuV Qj&P dpTD 3TDK.T?5YZSYZZ2nH? ,| o ( *.~ٓrq<<|Ut <|U><|U,d L 3n?iURn?iUQRn?iUY"n?iU}w: #? EHx Hej2p%>Y 7ĿZ e AAe AA :B#zbFWTCuQIRS6q S6q c p$B 2wsb &g::?&g:!]z%R Nij"ŪOR?3(^)3(^)3(^)p/<p/< (p/< , ˗46 M U֬ Rsd ϲÑ>^ ZÑ>^ Z $*n i$*n e $ "4|_9Qqў$)2[@q (Kzd r{׉ TٱG c  Z  ǗNl$ls)&Kғ#:"s":"|J{nV , c&, c&, $ _ a >6 >6 >6 dK=dK= yt{?27%j-Zk , +Y@ c KxdKxG7s7 $7 y77 A't&' {c#Q%䛷T]%䛷T 73  j <9[ %``-Ke2tYw0Kt!Q -i`@o U ~8+j  |# |N eީ=Deީ==+Ar!;35?Z*f8.V : I I I  dQ d<+G!Ԍ"ib0J?kBjA *sL *sS *s_ *s8 *s* *s *sQ *sd Y"Igl (_|&+3 j qE/RqE/qE/qE/^qE/]YqE/ZKqE/8qE/(qE/S$qE/ }{j =;LsO( (C; \ ?o{v Rm*@jz Rm*@h pMlH ( pMlH  ~H[ l$R )(5 # 9a{Cs m m ( b (J8R ։a !: i4 +gZ;U+gZ;qKyRW?,RW:#cb .~u ( _iPUL Y yQ! )D=! )D$"F|(#H<#H<K #қ # #s)#X $ى u&%Y(j& }"G&΋ '3H(Uױ V*(/+VU,u ,2y/,y -m7?.o$ ,//k i 0ZnI#0z%G%0z%G 0z%GK 4pH2hd4pH2h"5-55-5}, 7Iq[ 8,|:9&U 9RiS9Ri;ޒ<} <} U <~Ij k*@6 #0@6@G{,8m@cR!Kt@cR!Kj8@cR!K)@cR!K @cR!K @Si@SAU{+K A_b? BbjNHskBbjNH c4BbjNH #BuW( DuˎDuˎ E'z E8@Eښ65FR+ FګJ? G! H6HwH>H&HHHG3gDH]u%ԬN H*TL;%Lf;{0Lk)YL?kM=h%$Mv% $Nk2z%jOö@F P jRV S S<JDTqRB;{ U&Uߒ.9kUߒ.9b Uߒ.9 ( V&p+V&p \WUK Wa X0X03X0 YGXuYe'Ze( Y` S? [ٛ % [Z~8 $!\4  \3YT]\3YTL\| ]9Y]9YZ>]9Y"]ېFZ]ېFE]ېF _~)p - `g[xF`pϾ$`pϾ `pϾ $a y*ha y* aTE` =b'j cnQ c4> 3(cɸ~Gp? d|21Se"SheFd]eFd] $yeFd]8eδٺNfs:gY goDQ>ZgoDQ>gq/b#gq/b hR1] j٘A j8Sjէ4?jէ4jjէ4 jZ $jZ k/#k,k M@k Mk Mk M lOj m MR0m',bn H \n:n (o>oqi sI1/ ;sI1/bsI1/ t  uk"= |#uk"= |uȸW~D vnavnRvnx҇X?x.хLt x{qD xZ. ymy +$yBqQyBqAyBq] yO+:ys}yO+:y ,8yO+:yz6 8z6"z6 jz8gv6{qq {qq {:|_ßDb}`t(}o5O #+}o5O c#}|;#}|;}|;}I\}?ؠ9 E E  㾨֣fM 9 87)a'Qȹh9ȹ # Z  Z y  `e /i|kK (&8a+8DM i Jw :ֽ_R:ֽ_S:ֽ_L 2@w(2@w2@wC$ o_ y1]/kH,;t ~U ?H@L((Z LrLrLrzLr t[= t't a _# _#? c$J n6pP,x| k'~rS4k'~rak'~rUk'~rKɑI >dK'.t~DUk py+ iB _q NO?4_q NOC 5 C 5j Rvp <:Vh"q"qm"qL^] Җr?.nFRqw i ow i tw@D ('ɐVgy(zC S 7V:]6:]LriE riE I o*S" 0G${Q&1{Kz 9/Dҋ*? x snvV C1/ҽB j Y Si"|(SG㥔R G㥔 j&Sj&S jΊ o6 CK5S9pV,PXN^@7-Jv~P~ ~ KU)po$B%F~pjԟbsUԟbsOVNOV])( D M VD M }T?#k9h~=B eh~=B h~=B {j:{'{&{ կ-կ- iկ-jկ- ,>{  Rw! j0Z a'eyO e6$aL* G( Gf; ?? =ao =ao v t' ,7DZi ]8DZiʚ`;/C)|lO'lOlOlO1h ܍܍ٻC Lt ÛT й7%Aʢwu j#ьW<t8X4 K="wpMlH wpMlH , ^(^ NTpNTp &NTpNTps KԔu * w{&]t  ֿ$ zֿ$ ^Ro"Y c(+ .ؚƶ 6آb# ٤xH$ڹ `ڹ `ڹ `@q)M.# _JW _JWܾB~` $ XP ABXP Aݟiv T-\ T-\ PK% :Ca:z s^7]0  ~?'`VC>ϫ }N d}N) Q*.> iLQ*.>t2Q*.> Q*.> Q*.> !fA[!fA Q#Ѵ Gf;`R颔}9xE-x^ s (|ܫ(|ܫl(|ܫ(|ܫw(|ܫ+(|ܫ(|ܫR ] ~]!z]P2ZiGPLAd l6? |JN ~TX 3 ڇrS4u , VR6< j `|- pL P(B]u:{ u:{ 1+Pj {"t ,Ou-,Ou +? i,|j ]{T{-{T{ l\N {L56.徠 徠 ?kL r|:Xj 0mxt $3j0/ KUJ rN K# %rN K$rN K$?^Պ N~6RAw?"аCi te(X ( (…d !Hw_?Z~O* w]?9`si]S(,Av #Jt#J #JkK#J i@#Js#J 0 ijWȾ'U%Pf,#f, lbrL:lbrS$݋j E:S r* ȍ Nmt E!9 E! i E! E! ( =#a?  ] POjnP(V * '3XRy Xy X gr # Xwa"мsU$;6@ -@ a`R Qמ1 {tZa-j{tZa-s%{tZa-kՔE@ #GK=3?  gMC<3E [/+\ _wG)Ş?)Ş r`(IB%9hMRa##; #; cXx@Xx@E lf PPshP $=P "P ePj#+kdk I95a CNid  ݀u .1|[?' .1|[? u u"[k "qŅsj "a l #6x*$-bO $-bOt %O\g&]c&]"&l%&{AAK&{AA &](0gP&&](0g&:BK&VWSP?(a(Vx90( 3+( 3+ )U2)U2)U2 )5ZI)5ZIQ +!ZD+-^! $, /,D-xd? -[Ζ-OR>-ܬ3 /q/v 0"[a 2l1R%374wJţ,5g^.t s7<&zpV 7E&9+*9L 9x i9x?:CŖ`t =x# e=&3 > ֣>$C_ >4#}#>4#}?9L?9LL?9L ?b\m ( i(? d? dF@c(6 A6:B"A6:BA6:BB^(Z !BB͢mBnB͢mBBSBq.C#%6HM C#%6HMs C h aD >h D;5(GD;5(D ,D $ D { D E]ql Fh' Fh' HT% WIg !wR a Iˑ씆 Jpw Jpw K  i KUD2tKUD2j KUD2 KѠy .KѠy $.KѠy ,L/U=LuR Mvs#q/ >bq/ >r*DrOPA #s'tI> #u] u3 v"2m'vE-vQU |(v>.Q j@wv^ y-ֿ(y-ֿ(s y^%RQ yR=uz;T-z;Tz;T{Iߎ }{Iߎ){Iߎ'{Iߎ {Iߎ|݀R |__- $}Q}}D}XUJY~: . ~: . ( ~ HRpy?k$k$Zk$2$RǼ_L ],ւ 0F>Q ʼwO!"^m# 4l4$4D! ǀKڗǻDz K/MdX əm] H`V! B3! B3tnfR e& sYe&;h gCk]Ck ͇s$Yָh LR δG0δG0δG0 ϹC ,Aý[8n vn vRQn v(n v(H6x >;9vs< ֛ ρ%< sG< |0*t ]= 6]= $]= ]=?s]jN o̮^H 9%9% o[o gHe c Wƿ\ s v v ) s)V9AjWC[! m{sZCd>R- [ek[e<[e;M$[ n{]0SCU$߭b # bGh5 - :;p;AV  Nws^ c(8 I:  I:? ʛ ,, ʛj) 3Á/c"N2 /::R(#Av ±o'37 3737 4u`kvR 6e{ F7\ e97\j'7\7\ 9V6G:iW# ;N7v ,`3 >FZVTO s>FZVTO>FZVTO +>FZVTOAG c B V -+B"v/C B$8:YB$8:Z B/OPBzM C- DNE֧_ DFrtD#1PvEKR FJbiG&d?EG&dI3(#(J cR Jj,]JOww KM@z iKM@z ( KvfEKvfjL6j4P LU ?A L M Єy*M ЄyM9p  $MluDg/M$aRN4C NXqy OFc (On$u)On$uOn$uOLOLD PWP,P,Q?$QuUCQuU Q<!\tS_S?PZVgSkj' "Si<2Sq{K\ UA9n?kUA9n TUA9n /WGV ,WPQKWPQ W̑GW޲RNW޲RS,W޲R W޲RW޲RLX (V:X_Y; X_Y;9X $X X Xs$NYZGZ[S Z]!t [7wb [7wbj[7wb ,Z[7wb 4[7wb [|QS ] ܩs] ܩ]jQ^]jQ^^[ L^[ LC ^@bpj^@bp ^@bpt ^R^Gv^G%^G_v m ` m$b.U bU( bn^sbxQ@!bm cabm #bIJB'Y bQ1r[ bQ1r[ cD1}Hc+F ec= dJ!vh]dfSgp e_54SD e&0S f\aU - f\aU  gNn 3jnjCd ku!j5k%]W_?lP*K l*n(9?mTQ~oo^m|Rpoo^m|So8ü Ko8ü Uo8ü oY ipi p#yN4 Wq~[_!qW;VqW; qW;?%rEqj=,s|s| v^U (v^UY v@ (v@ ,wV j yǠf[Is yǠf[IjyǠf[I yt$ \|l* |[iv}D=3~<] ~أb-~أb `H={NFH={x3 (-x3 z$ $ t!s4t! t!tt!gP@;vC̾ +%+% i+%+%|+% $Wɑ B n[*a Dl `A_=vZ`A_=j V[?F 𯩏 | E; 8L \\ m O4v:J@t %gH{'n&u818$B|a ZЁ?L 58k^eGc ؠŬTؠŬRؠŬJy]jᴙRs.ᴙRjE{h :1ť $ |25lB mF9hXZ< # ,{ RËdËJRJRJRR w 6=iv S x yX!?|x yX! 3",u  |3 #  #Kߊ #Kߊ #Kߊ jy;jiY $pq e ^cZ8 uB?6 BBN$K% 'd 8#_k8hP :K|#:K|a:K|$;Tbah ;];];?9 <88<8"<8fA>fA>fAR.>fA?}{o @0꽆 AZE.PAZE.AZE. A$A$B&S1ۯ.?B&S1ۯ. BRs"BnWZl C%I[ EC%I[jC%I[ ,Dż EDFS%Y Ez`T ECƮ E啇t E3(E3(LE3(E3(E3( F+HT$N-FϏ_(YG;d΅G;d΅ G}x%{G}x%G}x%G}x%]HZO/vHZO/,HZFIu J^?bМ+$J^?bМ+NJ6? KXC  KXC  LV', , L`wj!M'xM'xOQM'x$NM;NM;<NM; NM;NM;$N 9WLN 5q N< O١)f P1HxO -PB2Q~k= R+ R+ R+ ?R=&L@Q"R=&L@SX SXSX T+wT;Qlt[T;+F# V=]WHR1X'? $ Xs=iG # YjR ZMÀ ZMÀ? [HyEN \<?\TA;K\TA;J\FFV5Ch]>IN ^<Ic ^<Ic a `i n a˼F b$ͥbqqss0v s: ) u4WK uLmOࠩs1vbi # v(WP mv(WP5v(WP |,v(WP swEQt6 -(wV]ozxHs;ycxctHisGxctHi?6xq@vx!eV,xq_bPy;qEy[L #yJWPxdZ{=K {=K?{=Ks{=K ({=Kj {m {:Lh {O8?B|m!}A |L$ #|L$ c}I$ i}I$ at#S(%9X $: sh@S gTtP!J3ZP)NCQ}Ž6jQ LPLPD ~k~k U'*U'#ǝ )iW{: &ak04ZZ 5 a M:g j &o=kğ Jğ ğRğ ]wH`C cN]8 `oZ\Ej`oZ\E `oZ\E , 2ML2M 1H" ^^V c^^V #MUʥ? [ [ A9 $ s1qntSA"\. "\. m'( iltTA (Q1-. i1-.?K:buF +   Xf8 v#  ĥ w v*w vw v ," :8v:8v 3jK y$kS -mB v&- H|4rArV?}&&vV?}&& a z Itz IE#(  !? E t/ $t/ t/hZt/s5t/ t/jt/ (w a5kE/skE/ ,w ؇`4׫Q K4׫Q DK`gA{ $\:ƜNk ?1k  -7 CO@? tJ94p %yvKG字wèY ܍N-88K*ʼn3$#*ʼn3 $J4t O7 ,O7 $.¿ <KߖY{t1lӘ }<$ \i  ,$ Ő"ZaŐ"Z G߭bQkv[Ij ȴ*6$M#-M#De8t ~1ͧ2n$cͧ2nͧ2nͧ2nRЍd.Яr]EѡbYlŊ9ߑ $ R3e_ ,nR3e_ (R3e_ R3e_h Y qX eo {iԙ1 ԴN ӑN6$*t;s ւᆻ ւᆻ ֊^S?1-VhpC3i ;( ;( *؆U킢 * g> g> Wg> DO^#n? ن@_ ن@_V &9?}J#l , }z]v}z]}z]bP|:c@bP|:c?0ɏ2Us 7,eL> ߐRmn \ ߰>l/j 8 KRK\As g?t~|( '6#\h&)E\h&)%\h&) ?<|j ㆠF? s dTݫ/! i/& ) p^ $C |="x2pN, t´ )@; )@;(po=> o9e"v9e" D9e"89e"| |? _c ޟA :G_O)IG_O)I#KO= b$H%\&,ι^F2 D\# 9Eft i>ɔ i>ɔ R\MNC]s:   ?  䋟 iSFBY($BY(SO:G:Ao?0 l9OКj+OКz ( sw>/w>/ g@q-H*hs*hj fF֠ 퀮ΐjR퀮ΐ &퀮ΐ K}7 #&"ܫ(b (skm( xn m &ZF"s&ZF"W ,)WW !g8  =  = , = >v3s n킙c7 n킙c \z% $, kdQ? "0]ך 8"0]ך y/9 gst[ |Z~ c 2N2N2N]2N u+k A +´<?$T} (#{ $z-+.D^  K<*|=K<*9K<* | Jb 7tK7tD7t 'ۇ 8`m . v5## /4/ vS ܖL=R& d dMSjCvf=CvDR %WN/R %WN!hX ihX| $98a+kR6K^q ev a!X?!eKvb m "`H6b #la· !$#-0b  $TmjF%D k/%D k/%pN06N& ? (yajIhj(yajIh a-() )l] dt)Yj;v*ύ\R+ u| .B3l%.B3l] .& /_R/_ /+hDjY{/+hDjS 1Z@1Z@e1Bx 3vTj5lc8&6_˚!7`{9™"7`{9™8ޒ93z693z693z6=93z6 0:#t$I z :sQec;&/ <ͧ rW"6 a ?|u ?D[?D[ ?M Y??cZ s?Cw  @^[Y $g@^[YY@^[Y (W@^[Y&@Č-V A%F .A%F AxLAЃPJB@WB@W ,lB@W 5B@W C!Vmea #D ]m! aD`D[DV|ϓtF8 F9ҷ϶ F YGkC GkC H/ag H凊)DeH凊)5H凊)H凊) H凊) H|W'sXH|W't)H|W'kH|W' I Ȗ1ZIuVIC?IJh"4-_d Jo6Tѕ L0$U @NN|% PAuJPҲr?#S(.S:0S:SSU  T -T -&TPWO5K Tim؋ Tl[Tl[U^T 2ZVWU>s (BVWU>s s!VWU>s jWx WxWxYeWx Wx WyX P XRXۦ 3R9Xۦ 3\zI"Y^ p}2^ R _f?2_ &[ ` af, a?U_q aqיc!6Ra^ya[fˢ i8a[fˢs0bj,5:bj,5&bj,5b파މ?$c9W mUe6ьt#e6ь emզ fe%k h<_P7h<_h~|4{jE>*>ujE>*>< j*:$ $kȮf ( lL=L li,sPli,ms mkZr j$nSR!nSnS n%z$N o p'֢ =sRqto}&dju#XD^Rj uR_ u+? u+?jXx]/v%};2U }H}}S }NrK~OLNFR YjbgYjb # !:- -!:- /-%5?SN {q }a5|.Mo)j6_ iA;v! A;v!A;v!tyA;v!oA;v! m*A;v! A;v! A;v! J+8rJ ӂ:-dI蟌HBa +[?bE,SUC6*ɋ<Y*ɋ< DOI ,Wd="-w (޺ vN ]#D { T%/J# VT%/J#   I"(;yV N(;yV?(;yV i6&`T} ]3)/S3T3T-X7 cƆth'Az , 8A(Z ~T !l?V -5S}~ ą] MN ( JW >JWs u Ã.Ūׁ!WKuSV ;? Ƙ{ $R ԛ[0eǯGȿvǿc]m~)is EcA mAEcAʣAʣA (˒.sZ PR[#9` `#9`2YZc'͡V#v= 9Y= 9k= 9 c= 9 u& %:ђ:ђc:ђB:ђ!:ђ:ђ xC! mee @eKeAeR6ee і𪦻R0 *3(J7*3(J7 x#YnC ҏUiDҏUi kA+ wb$T@ѕ+%BCB֯h#uPZC8?8 ؖPjw? zWmKAQ] ( "\  M sop PS0kbQBc w k A (U(ff sLff  ฒ-l  g(K-2 g(K-R JGx 2\$_h2\$_hR 㶣X1E;Sv!9ȯL!y?!K4R s˅C/b B7a?5bRN5b7vg3 2ĘBBĘBLĘBS 팀ZB1CLtCL CL (]5xc? lztlR g|mtg|m Ug|ms(g|m iGa #R#Ihv`տ35`տ3S e$vzj 29V % 0Y!Ft?t 3M #* *D+Z*f 7a ,17a Ә'9gV9gVC &0 &K !2{?!2{!2{j%T#cO T#cO Ў1k8=S]k8=Sk8=S C  u7${#OIE9 ~Og, % zt'  (  (  (Ri (| Nwi]Q6sC?  --1&yBkJ mkJ  $hBE }IiϗK}Iiϗ m- ,5  >d0TASÐmYSÐm 2iz| 7}L( cH'   ](   @5 WUt EO=j? .u1 IR) IR)K UNs \pX| Vk [%  K:N K:N >v0 vO Vl4rO * ? ,Ni T,Ni ),Ni ,,Ni kM8-pmR?X{t?X{ ϭ~k]~kw #Z"$ q?)=ֿ] N] 2]2 usiY c   ߧه\$ ]? lKV4 Ias ,  ) aK!oș67_-C 2$ ,2FJQBd*h k+x]Nc k+x]'"0*?G $y>& %G& %/R &gDB &$>'^O '2\R'(ZQ (wY )"(MTb )ki)ki)C3@3 g )gn)1 j*>!޹ v*е+pS@+p7+d^@ ,5x-dX-님WR.& .@Z5? .7MAD .7MA /L9 #z/пK00<|ߵ0<|ߵQ 1wf,?H1ieouv1cjZ2w~j52w~ 3u拨 -3u拨s4[ f 4dRP $ 5q?;5-I #.5^bM1'.O>J>J ?y A3k;BW4g?2BDPRBDP$B g[B \5B 'BB B i C2| R CR! D~2<RE;vwu, F0a=gF0a=g $F0a=gjF0a=g azF0a=g NF0a=g ,Fp=["ԽvFω΁ G4مߙ!GW\(ϧGW\(ϧGW\(ϧR Hլ}j sHլ}j?Hլ}jHbŴj H5s H4zH4`H4H4H4 I/vP? JC6.J^RL<M._GkM._G ( N)]dNـXl NـXl PQ?ȟQ.IӃ Qd3R V$&RZqXZ0Uքlo"gVb g V= $'V= ( WL% &  WL% & $ XMzB XMzB?Y+M( Yl' $YaN[5% [ ޮ49[+_I~> `ba`bKd}t<@d}t<@R(d}t<@ dO+=eh) e9* e9* $e9* =e9* +e9* ,f^?s grtrehr\98V - iO(lpH iO(lpH #8j8 ,j8 jɷT4 k7@>!W ld3#vۘUld3#vۘ]3mBcGk mmBcGk mGAZm&am&a n@S[n@SZ n!}nDn!}n n޳n޳j q"C Pj u'+tL 8utnr^Nv)* Tv;~ v;~ $vBA};HRwn1q x!> syrS0yr]yry?z9PR{>*1 {=t eF{=t|l[M ( }|6;  G}|6;  }@u }й&}i/~r!? ~BS e)~BS$~BS~BS 1b,SUD3SURO aO #+8V ?ۜ/*`ʶs 8f`k 98f`k?8f`k ޕt "FR \ =xR u5[_u5D??? (Њj Њ C,E.C,E.C,E. F?"&f(l; el; ,sl; Ql; $8D˼IC@ ϗ?QeK^ϗ?Qe'(k eded LԊ5 =ۮ[K{ #/)SÎMR )(Q%NiE.D\isE.D\i iE.D\i? cf2٦z"DY{;tl7tl $tlj Xv l}_C l}_Cl}_C>l}_CN:l}_Cl}_C{wZ{w{wP1f|1fs4|%8|?r[mtPS8, ˝)^Q1j 0 ^m^m s/Y3s'x5*ޱAA LAA c 'd^2>x CS{; $JЬh N$JЬh 7$JЬh 6$JЬh  `+ $!EEC sMGy E<}5Z 6M\3,ΎƬOSJ,ΎƬOI,ΎƬO `') )r iF; Cyj"9BQKvvmYPp?']{']{,']{ % Be+fBe+fĒ ]&v"}=EE$Ɵ^b6!,c]blf5j _Pi  SR&QXZttjmJ.RKDt , YKAѩ4{=:O[z:O[z:O[z6:O[z1:O[ztWAv0T vXI`|J| (6 ƠfK&vJ*>J* % ᦺoLtDO ,DO 5DO #7)-G-, j AMAMUtAM AM AM AMP Tr?wrzF m*;Ƴ G{8G{KG{ Z8. rilv"]S:d"O[ fߦǡ \ ܄, G{7Z!7 G{7Z2| n` tSTn` tR n` tK1n` tUE'ufj& "{bMX l4T2/ "4T2/t =% |Pd[4R d[4wd[4 lGU]ulGU]A﹡.I-Ptd3Zk vd4R kJP3 NJPW\xRW\x[~ ,?[~h bF  =Z+ a+bKxEvrD|}jq|}!=dkq=dC .w( ;?R+ 3 F u+j A $żD?$żD gMb?s!)##!)# !)# $!)# Dt pxK0pxK&HH H ,H Q ¹trQ ¹trS  o?wN  Ij* , p DK_KjA'v ܯab $ˍ 8ȸ ,&b³ WQN͈ zQC 5D  5C  5 B^s4Uj# En \ !S3ed s!S3ed sO!|Sj a!|Sj #8Ӭ.##8Ӭ. #8Ӭ. %,JF| %L %« ߳d%x%C& &ߜg'>i'>i '=f''=f 's )t ,fKU]},OQes?,i ,i  ,ifL%,y?,y,*kY(Y -0 -0 q-F֒JS#.*n}/ ĝ]v'0 ɹSN 0kIU 1c~Je81c~Je a$1c~Je!1c~Je 1c~Je ,1za c30Y8E3`am< i 3XY6KR2>v 7"77f7 851:Q&7=mN7 =GQy# Cܱ+3ELy #Eo8l a F9A@6sFCy]RGh$G+[t9Hk':$ H:KSb H0<{U IJ>WJ> JNoZJ6B JEU&K:R QLH4M,[ZM֨/NCF OZFr| O .O "O Q Q  Q-0IQLX Rr%~??R2P S SF Tk( Tk( UiV4IVZܵ?VZܵ c WYuM[W(:K+3 iW(:K+3 Wy3b Wy3b@Wy3b -Wy3b X1N!%X1N!S8Y YU숇 Ycz;LYKG[ iU7Sh[ iU7S| [ iU7S ( [, a"[, \.r 2\.rh#\.r\4&5y]Ʒ# ]fU"Q_az5_az5&_az5 _az5 _z~w7_z~w &_z~w 4_z~w _z~w e_z~w _z~w ,1_z~w i_z~wj_z~w &_z~w a!`4? `N!6`i@U`/@'vU"bwӤƐ $ b-JRz# c:)զt?"c:)զt:ctU,ct[w %dY^IdY^U+d牏k&e09\eŠz 8 +fk-j gNaT%hhFS iLs `iLs ,i;vl'ƹO l=\NN l> 4S l> 4 l@& Nm#!ѐmD2pmD2pm&9 nfqn,E n[F oZH:/&oua)֝ p|ArqbIiz qbIiz qiHw qa2ƑN!s"'ftU-\ itU-\ tMȥ u* a uB \l vq2vC@ 8xKjxsyhE$yhEzN0Z ;{ /(*{ /(${ /( {!7 |&pv-|稀 |ܮ3U|ӆ|ʔ }b,:Ea }iR }D }lg[8~~~D~ ~I `~@E~@EnÁ? )©X )©X? WXg x?<ӥ%x?<ӥs!x?<ӥ ?>"o RN/L*:ٻ' c A.T DA.T  B`v-=;١dIPR).s".j B(Rp^_| + tZ ޵ \?E>KWVWa)=!a)=c rm3 j CzQ|+ 6w} TT✲T?`\m+ ]Ng UCq  ݶ/u (L, \(L,sP  SLwX XmiiIEsiiIEiiIEiiIEiiIEDiiIEd {R6?Ҽr,Ό~ B1 Ws42A nTs TsTs a isk% $:; =UUNUUN~w\1n?q1ns1n \ 1n i 63`)<63`) é6#{ VUn` OeE< L? ŰX*Su sȊ=?8ȐG8 ɝ/U0 1ɝ/U0 ɝ/U0j$] 0:S #RF<2kF<2t]k?t֊t֊Y̥\_U O_ %G %G } g} $dd Ou5 # zb!Rizb!K "\IH ,W"\IHj3"\IH /"\IH $)"\IHs2.MfQՑ\yl?Gv-s@9 }{pcj֍0< ! L"|2! L"0ק;N. #\QQ Q ؈ A 5* ąo?#ąo? ۍGt!jOl% qa \hd|v>ݢfxC"s]uaj ua wE9, wE9, $E # |BV/ {ݩҐ?/MC+ ,MC+ 0yPz0yPz^0yPz20yPz0yPz .J61.J6'.J6M})VKjsB)Td)Td9kZ: >RxN3: @3: @Fb FbS Fb "|S int?"e?2O'Y{_dsG9u rYw rYw h׸z] "Lct/6 ڗ1A=  T@ > Mܻ+`` (0SϡNNR9dڛJRdڛJ*dڛJL&K[S 詋ޮP7{vwW pj } ;}?x*9t4iSS`ΑY!l9"s;dC5`z*5`:_VHߣ-$ jӅoyNs Z}:D8ή* &"9j 7t.OI{ ZljA()19(L" rNU $  Ctn# ׾)0 ׾2 !zS !z$ !z !z aLh #  F #Yy h) ;"V? w `zH N Y# r XG}  XG}  nS7}M'~? .SY.U5.  ?  j RlU FfYS n 8k씆8k씆 i nsKbZKbKbL 8ډjK8ډ ,8ډ $8ډ ("["\=P\=K\= 6RJ6.6K6K6Q@On @On z@On &@On $$@On ,n . s :$ %'Y{qRN'Y{quE#F ,l4q: T=ρ{x< o b [ b [~f' \ }I 4 -Yi-R !Q]25j!Q]25 i !Ts ,l!TsW!Ts $0!Ts9!Ts ! jk!j!}0* $>"6pd "zc-1?&>c-1s>)j >"lo ?4\jy?jNV9Y @9#A:N%A3lJ>BBjCN\s]Cpz[ C`B? Dۇ8E3Ӻ1 Eh臽?6FXPP \FXPPG i9G)G|H8-) J0mSJ0mZJ0m Kb(m@KuW 6OY&+.P!Q3 vdQ)|V $ R_0S e`kTH$[[UBX['meYBGv \Ys~P-Ys~PZ#"$ [6a[6a [>v+? [Y \TMS|v.\TMS|\0N$^ lv%^0 _ s _1$ :`w;[*aR)(a1Bz~2aECa3di byK bʴT.bʴT. d[ZB& d&Ye6 {,e6 {Z e`!5 c:f$gb/h]:9sh]:9k#h]:9tit#RjdF 2jdF i kI_kI_ mMpn` nw4#nױMq3r=r=ts_?w szo tyO[j3u R,u u u<gu<gu<Ƃ vSCvSCv:6)RPv:6) w `Cx,L0#x,L0 yjy%ojyy?xjyvnzM@u |9=R|9=L |^YY" +|\]b]%|\]bU|\]b}wW}S> *}S> Q)}wR7?b}wR7 a}wR7 F}wR7j ~Y%UJ sg0N 1[=O0f7" ndE $!-YN2 ${ n2 aY59&lR |$l#"QF$l#" $l#"$l#"7L zп&̥ }Iw/ @ jtuR ?h|?h|oKx 3 ϮaY ЛfK)7=Xa*7=X&7=X7=X7=X L?[L?[R 9u9u %A| f nX?XXF? ]ҹ@]ҹ]ҹ ՂKb .ՂKbꓳ3 $[ꓳ32ꓳ390Xk aEZ] a7 <0_/<0_<0_ 'T Z/ ? ؛؛aca./QR { ZO- ?-:e+R$-:e+ -:e+ n_ dn_b~w-A~wSQ~w~w-hᩆ&+-? * kQZ|@?QZ|@jukT*? \t5 \j 1{ }E ZڇZD $ P}UZP}U:P}UP}UGi47 N. .O* JwA    2 ... $t {ӻğ f,OdH&$ t? 6gQ \ YLvԊ 2YLvԊ YLvԊ| (3q/(3qR mS \Jޗ/ ^! s*dj+F 4?4s2mY 1n?H1n (1n \ӗ DwHQN i+A𰩘h.Ҿjh.Ҿfh.Ҿ ;puJs GI^KFݕDjݕD tݕDbݕDt/ݕD ݕD ܈n"O)#XO)#XDO)#XV * Z] xnLHt xnLHt= [Hj ¿NT?`.+  s5v WU؉D&WU؉Ù(8Ù(8SJL4ULtDZ9HGb 8{i0WyRWyWy@; ~-FKDO[I^ ?O[I^ k ɕ 7 }ilsB DlsB -9lsB ) e Y) e ̌$PSP bE4Sl ;+]uM \F .>Z? N_󦊃 ;LR r ;LRt i"Dk@n$[ 'hl_Rb[5Qsci+%]LS?]LQ]LLc]L]LA]L:]L ߻ܮFHܼ+󺑇̴]d| s1_ #qD? ރJv`v'PY;6Rx{Rx{FR e :@ 7g$ej Nr4 %.R_ UR_ FÞɢTl1 io%6io% mcS i FNvFN 䏵y8䏵y䏵y^a8ź , ,  `ߣ!Z #nߊnߊ p:XzQI{ #콗5A] 7US, 2&ŤA QML E V+Ter )  Ko|:~Ko|:j6Ko|: $Ko|: ,sE sE rBvs4]K]0wj0wjFGx ,L3 NXCm+NXCm]NXCm&NXCmNXCmSNXCm]%{ Eku $ʒSv$ʒL$RpZ7 b l}37Tcs9 ͠Ƽ $ Й&m%A`*:y i:y reu9 ; uq ` hٲ;4 jusq 6kj ֋P~ C #'CVoU? `$I Ԟz*[)Ԟz*!csc  ',X_ c a=X_ c?)s (ss $HpC#cer#ceR#ce#ce@#ce6#ce !'k -!'k? ̘'  ̘' ̘' oKY }>| js>;>; |YIհC |YIհ Ҿ? !fRK !fZ3 !f }|"C $ / c,Vs D-R" D- D- D- D- D-LA D-/ D- D- D- Lݾ g Lݾ9 Lݾ ~ A-Da Q#' Q#' 1? 6j 4w 5IŮhIŮ7 v7;;i9*ZDإODإOH`'RH`'CELPk<̨[U~r \#U~r?]K c`ON .-f>T w'*Rw'*a [0 ת^[R!I^ cI^ #HgGNdI vwl|_Kg 6m<?)59>؎s {eR4MS2̢<k  Q N '+ jC '+ L W!Y!YR#+n"}a $5?2 $Yʫ $>F-N%EjODK&4 #d' '䊋C c (f;? )Y?9)Y?)Y? *gMb *wtL*wtS*wt + 2+ 2'+ 2 -|-۾/ i)-۾/j(-԰o/tX//j s/j 0ѫ 29*? 23 \ 3W=j}\Sk3W=j}\ 3oLY7sxOv 8 )8]'?8p 9.' g9.'?69붇wP9붇w]'9/@v1:a O:Ȓ'R); ǥZ? ;8s<߆EH>ٔY>ٔ?>;Y宼>;Y宼N>;Y宼 >͕o7 ,?>:k^gs@]*fp@]*fpZ@]*fp@DeL A}s Aߟ;8 B)6Br"I"Bвٲ j B6 CYN2C(6򏴤v C ?cC9RE:wQEvde W"Ee;z G>$Hzc0(I5I5!J@/݅ JLi(QK <K < K#ûh? K#ûhLTGͬ[M7x MM N!E ޿ (OdO]P.|vFPu]0P~Z ,QF%'NTu)W?Tu)W UU/@IOUU/@IO UU/@IOUl*q( , VQ&sVh6'5 Vi WuPx?MY98? jZd$S_Zd$KZ%g [@QsQ[Nj \aʓ" \^p!j^<> _3%,E a2_u\/tL2`v`t` `Kĉ - b!p"b!pb!pD b,7Éjb,7É i bW[:0 dx[ T/"dx[ Tdڞ] mdڞ] ,dڞ] ehyB܄Tel/;I e[LZe[Te['f*E NFf:î,j g.``g.``h"m(iG&h j1'7k j] kҌ Z )kҌ Z ll ,l l (mljlZ%cZl[gɬl[gɬl[gɬQl[gɬ n b n bd o' g oP-]b\p<& p<& pjȩmt p>p> ,p> ;p> a q Pٙ^oq Pٙ^ rߎTt'tC_tC_tC_uf&* #ue vp>wE"w}pݮ?x緕y޴w yBUy[qyBUy[yBUy[ zձi1 izձi1 zձi1 zN ~XhD*~XhD~XhDKBSe&BSe m"Ƙxk͒NP ] c l_& l_& jOD  XA8: acK \` Ӵn<NӴn<ڌ ,ΜSZnR3S ҫ}K[ :15:1 3` Q@yV/UMN/UMR\(+ ~ + Dײ?׿"9MC/ )Ngɾ !H *N| "78| (78| L78|  9Y<% !Za?Za i Za \ wNkY , . }];}]d}]) y] ATk futJ#TfutJSu ~# ?\0Usb$0UsbD{1-,Mr "KBEYi .$6= eW. ׯ~Lv#ίAk6Gج  - $- , NU~a z#az#Re> ,ˌ+ˌ+ ~ymkIL5o L5o ,NL5o =L5o %L5o L5o ack- ՔG^ gUCl'UClUClQ=TaB% 2aB%j8;8$8={)anNBM? )?I' u]ic #\ ӴvӇ8uFpR S&pR R-erO=t8erO=?erO=k erO= a 0ġ |POy" cOy" c(xRvnf OY Wj ~p[t/!' `&*v`&* Ao6"Ao6 Ao6j $hL$hYQ3xz? xz tXP$t"!,R _ڂF_ڂFqY dň  ,"ň  (ưص 4L"b ;{~s)1t \ #䙆G  ? aQL ̀<ԗEB̀<ԗE ̀<ԗE ͙IA a -) -X;1 c_ӌj?ϕ ,ϕ ϕ Ю2ZЮ2 Ю2 РfVCg)? uN| +uN| uN| Mxn>!hG \ uAu?ax3\ n&& N8o oMN 8N6b?֋ tv֋ !׹Y /GLz i GLz?GLzsfUBNkfUBNt{^8 ( R\2jR\2 ,R\2 R\2 (~R\2 R\2 $ R\2 i ܂/k/t܂/k/k ܂/k/ i ܔ0L #O|~R"|~ ǝ0v#6Ogdi5v߂dD Tc+ zl0' uNo "}2$"}2#5 5?ޖi h  h ( ht c8 c8 '<'<S'<L~'<df'<2'<1'<_#'<'< @? @j @ ( @ q8\Pɷ'4 \ { j e"uV e"uV9_Z9_L Ƣu 7jl9ꝟ+$ ꝟ+ Y eL:%MgCQPcCQCQuO c`[!|[!ct'X_ 쯥γ e'~ll\ ~ll\?hRshR hR $ $K~KP;tP; P;P;j y? a1y? (K/ M  2JJr $ %UwIG*R ~6 , ’Qs9~c&# O&Q4O&Q/,Sj|S3ߛ> bYw 99S x ob%_ob%_ E<R ݐ %ݐ K 8& r:TXP r:TXC s-< !s@X V58jGEsک_/ک_k ~m ck ~mKk ~m2ҕ 27>W $-hBqcHBqcHBqcH _m$BAsz T Qۜ? <Zd <Z <Z H+ #  }G? .?(. .?( ؓ5. ڝ3VY Q `^[| `^[ $ BWS_S D.% hS D.% h# D.% h" D.% h D.% hP=UJrE[ E SwQ)[EP xWghPh [A%|R?A%|RA%|R dA%|R 7A%|R$A%|R *i=*i= Qޜ zy)R a zy)Rs`nZAj , "t ۚÐ?ۚÐ}4Z ޕ2?;1 \! F iCY z`Z !4K lS'! $be4 p l^>&Wl^>&Ws̨Rs4v 1m e1mk1m b4 u KK ˍ\$!ˍ\Dˍ\ˍ\jN$ (N$j FH>@j YGNx YGR y *"@=6 #%XY $ 8;{+r&8;{+r8;{+r8;{+r 8;{+r 8f&>h 9HT>t 9k=W 9n kCa >xj >n U>wZ+>wZd>wZC >6 :>6 ?9HL?{ -&A~˫d/KAS| Ae"SAe"S $Ae"S?C#Kʼ m Cht)evv2Dl s E|jFN9v Gb5 Ky`Q GG HT # H;' S (nH;' S H;' S Hp$IgHx SK c_PjK c_PK c_PRiLOq` M1 N fY O,'1OP'wP>6LC P@un PeQ^ R'&Q^ R':Q^ R'Q^ R'R%4–R R`@  Tđ>)WTAH W| =W9 ZIݦFsZb c1\V_Hb\V_H \T\L+\s ],7(%]B0l$ ]`Be[^iŬ!G?t^iŬ!G (^w/ w^w/ s `~\A =`K53 aI<=aI<=aI<=8aI<=+aI<= aFaFzaFOaFMaFaFcv5t c i c^Y!dSu ? e Nm?y4m?y4R mv]mvmvS mv mvmvUZmvL%mvmvamvnsп [Qnsп [nsп [ oT'*o47@o47@o47@o47@|o47@Uo47@;o47@ o" e o5Kko5Kkpx7lbp$2p oLp" r@~X sG.a¨Rtٗ d:tfX rtm4tm u>F $u>F (u>F vq.YMvq.tvq. w{zh R|SfD" (}ڣwA9}ڣwA ( ~ [څ ,~BFHb,wR(h= +P[!StP[!Sk >? @z4!v #ӿ! Ysd YsdD y9nl '? q#%ΑK.#%ΑCcj 'n&5Q'n&5Q j!t|RYjyLDd2yLD!JFo4JFo4qJFo4D2JFo4 JFo4JFo4Qq]h:4 B4 OBQ#RI5 C&I5 B Û䒓 dZ!dX 3C`u63C`uS Ѕ$ 6m 6m jY  >PN׼)?N׼) X9G+X9GtOt$tOstO ( ^/?D𗍵G ,h/m | v:KSK ëHsK5 bRr? TA#^/#k/6B "C3vvHRKu j ccڣ .ݲ; $? I \ 0-LS ǩyD(2}ER*2}EL&2}Ea&2}E2}ER I #lζGR HjUݕK2UݕS 3jCuj/!X Bm3 + X Bm3R MH;N0e \ WMjWM ,+xy FŅB FŅ=k[Lšcُ # O>t 6Oj ^,s^,?|Ǘ|Ǘ Ɵ£dc ( gGOx}e_ e 5:#vM/J1Amu \DcCDcCDcCDDDcCK:DcCDcCYDcC DcC Gdg ̮8h[ GjY{+Wc Iδ mNδ mL.οm8# GDt GD GD ?mT2 S0ϸpT7j$ϸpT7ת\ F(s_Lg?- )s  ѳ/2fPѳ/2ѯPե 1h4x1h4c1h4 \F1h4 )1h4s1h4Fj. L{Yk֨@u $7꜊?[\r r > -$g> -$> -$t> -$Q> -$> -$> -$Q ?[J ׉cm Er/& l0t 9jK9js-9j үjfہ\y ( ہ\y| C}i9ގ[ eܠ?pjjܠ?p ,"G0=ì6L }iSK+>@s$ ^r[ "W9J d˚ (d˚:'9B i '9Bs'9B?'9B` -2.f[ a,  4Yr2R)+"C?b =i'})"=i'}) irn& _hz *.UХ0cQ >K :%%;_v9 :G(t; Gmv bh h ,*Ժ biXvZ39a O%G O%G ,O%G O%GjF&A 6c>Ŏ ΍TT ΍Tj]ѷ D]ѷ  TEdJU34z& ,1~kV % c*Di3 n;sGn; ,0O垛%bO^ 1? $!RKK- H.+R )qMk iaXW? j~ݖV U0R 1? *( ca cv# c  I0 t,`z W iz Y:+\s x􊕶C s i q&?>o f *7o f \H  *L&g yn0'g ynY L }0נi+?נi+ \vN*IPr= 훪# z ] z R&z #z 72; n*Mn*M3SBCU3SB(3SBR3SB g+Z 6;T] #6;T]M* G+R~>~>5'l L (HLjLhLTL CLBL s"L i CKN6 /Z:_8 $ /Z:_8 ^͚O ڄhs' 围 !@% "9}j! "oVc#NE#q "+zv$Zd^ % x -% x% x %nk!%  #% %  s' bNj (u< 6}]!)r>] *3b?*pD(!*pD(!*pD(*pD(Q *u?=d*;aMR *~ m +q+q-aAQ --~,9M.0Rk!.0Rk.0Rk.0Rk .0Rk .D.0}~, 1?ud u 1yFA1J:|2d+"2d+" 2d+"D 2t l2t R3qT3q:#4 Ib4 I 6bqB6߀;*] ,7Ed7/ >s8$g 8$gt 8ShSGv931B]Q9 c 9Pxd 4:͕ :JB⇡ ;&x $=  >B(&>8 >8 >' ,0?fa?M ?p͟Y3)N ?U&]D?U&@YX@YY @ ;;f AGxD C%'CK,bLE:xE:ZE:E:EE:YE: F+`JFQ3F+`JFR#F+`JF FiGhH?@SIi=ljJ:5=h=JYsx|$JYsxjJYsx J4&K + Lx}_{ $LP" N^P3n?R{ĽB$!S VSf SeD TBI -UQjUG>SUG>U} w V_ 5ao>_b-ao>_ bs b0J=cV$j cV$t cQR c(##eG) 9?eG) 9 #$e=DWUeHٸ2fLgTke1Sgo biJ v igw#kdi8 iOi89 j'w&< ,jGY[ jGY[ji`xd k; jlbLlbSWlbOlbKlb:lbQ1lbKlb lb m؋ R>m؋ P m&Ww i n4N=p4spY  ply ply q@,RDq@,q@,q@,Rq@,#q@,QquP/ quP/re nrۀ Jrۀ  snSe; vS i"vS wd\ xK{ xeTgmxeTg , x @;byyy.,U? y8ю ze {ޖ[igS{^}U0 ^ {jL݂? {jL݂ {jL݂ L{jL݂ i{jL݂j|{jL݂ Y?'Laq5t)q5jq5? yț2.!:.! IZu@IZu2IZu R 'cb ;_ UqC 1yo՚C(yo՚ wvTmn$ cTmn$ OHa2pNm72pNm +oJ. <l $/0k gf u1 z< ?!z< h|7嶣j ⰀJⰀ 'P Z]nvbcQ;"*bcQ;4Ǿ?Q TvS$ݻ5hS"Im\rLk}X!? \K",,] V! +%i p%i>{vD Q "G^Ѻi cs Ԁ,j& 71Z&DQR sO_ O_ &3U (<&3U ->@ Uΰ q A]TA]T## VRrN {>Ue&UeUe $72WrkӸ }R ik}? fZfT Ng S YiW E6 Mw:?!b6ڠ?ڠ ڠ *ڠڠj Y7²sjY7²s5n54. ea54. $/54. -54.j54. ΅&oj(ea c(ea]vGN Ч sn efef] y5w q)Z `@?÷xW)W)P ^|a ,o} o}1o}o} i o} ( x*pO Ռ$/ 3( 2nn nZ891d?4Z891d s!֮ac; טaڋטaڋטaڋ ׬X0jWdA/؈sԬ)؈sԬaؓ ؓ bؓ|Iؓ9?ؓ!H $1H ,;/ E(q}~3$n 2(ҞN ~C$t~C$!~C$B z|\2 jd\2 j ~3f8 +SYNd6SYNSYN zǃ6$ zǃ6R XHf$φH][=) 2[=)?[=) [=)s [W/KjW!<vFpQ) ,.` P[, `q jj 61B uw:F|1uw:F jȝ(γ`Wf Oik(Oi gE'SʻDeʻD $ Yhv N =xO4uq-r+ 609 >o!U= q ? |q\mm mS 88 9u {s  ,Im ? t # .8GL#.8GLj$_NՌ< ,c^msAonAo Ao $ 2к 22к  O-bV [Zɮj kTQtH-Kn+ B^q@P07kQ9vd,:, *2%" L{ E#[HE#[ E#[U b:~JqP] ~" !_#ο" \5!B $vj '0t '0t ($ig}&(1ؓ )# & # )BvU)Bv[)Bv[)BvK)Bv+)***HS:?+Gcgf!+*MsG +½օ n-*%$-*%-*%-*%-*% -'b= .4"/y<ۉD */ J/ , 0)q?L^0)q?0y] 12}}1~"XJ<!1~"XJ<L1_BS2&ዼIVq2&ዼIk2&ዼI 3E}Y&9 3^cz 3y-Ǒv5*ITR"5a? 52cs78 j8kwkh8kwkhK8ͦ{ ; s;; |*; <"<<"<<"<=6eft=zpoA# >U% >_[ -0>J>J @2הDAexdA ( CA.?DDMV Ehګ S#Ehګ jGlF!S HLGY6H JH JsrH J @H JH J iHVko*(H9I] ISdUI]o+ # JA' JOa:Xp fK4ڄ- ,L&͗fLɢ aLɢjN@. N@. a N_do N_do ,N_do 1N_do +N_do (OKX OZ1 OM' PcآRf"OSu} -SVELo?+VELo W.&x WKtWџ`Xe ?XHJXH*Z] ZƏj9\>t m\>tk ]+yy2AL#]+yy2A_]9Ge_1$~U  `\B` `ϊ(C``ϊ(Cbao }ao }Sao }LbMX Ƭj3bP/W$cgEC id:d {d {eYo e7 e7 ae7 , e7 $ exO f?RIf?gMprg8'gɀiӓIjZ3N-k(ᚇ; kLJYhBkLJYh1kLJYhKkLJYh l/2*U ,l/2*Uh l~LTl~l~ mYi0;n5OLdn5OS#n5OYn5Ooo7? p.?]6p.?]6 p.?]6 wq43޴YqKw rӈ, i r `r?Cr?+r8 v tEtu:YIt w=x_n xs+j[ z-9X"n " zwr zÎ@Z{fJ! ${fJ! {۞R #$|B?Fs |uP K |{.PM|{.P}xMiWs~,;;z ~,;;z ~b]~  [LR [L V " RY`v Cq2UCq2U >ln; AV}jAV}h hYh YZ*`  @늨@늨 T4ptiT4p@Ѽo ;ҽ/ Ɋ'Ɋ| YH.34ץ IIR hRsB j=tN+ րbh?H \Ͳ $\Ͳ? 3A?(3As!3A \ RK SquKhSc[jHf  S_O%? oɗ ,*5W]Z8"J >.7Pmj zErA~7jDQAn! ow:k B=ÌY?#XH jPq%X1d ٦- ٦-Y ٦- .j[.?:TO Sh< \oרoר`"~QR,-i i!-i B% |VK% |V1% |V % |VR% |V% |Vj 2r"C {Ʀ- ?1or" uӮL_SC?AL_SC L_SC WۘzUTUT?A 40** s'Tt}?1 &gX(*ӹW ٓ%nUC$D%UV. 9E[Pyjd9?{"#θg9%R$2(Yu2 LH r C h*N? syR 2M \[j dg7K< x.޴>f lz,tlz, ȑ [^Y&)?&) tS+Do?#ɬ80VKӻ +ntD{|RF{|([(t=( <s ]>ev&fODJݟjJݟb Jݟk ~T)SSgᒙ1hA 2&U zzmM r{ ,uW v0SYs-$ɊR7b>ɯ_n4-ɯ_n4-Lɯ_n4-7ɯ_n4-ɯ_n4-Sɯ_n4- ɯ_n4- ɾ,A  iʘH_< oY!b.Lx÷=|"͢J)sX2X6AC~ С893caС893cLС893c$-!5| ҏ9R ?7USemՙ;]p%n7& f2? H N/} ] ׌I5׌I5 غN,7 غN,7? {Y d+BAT`RڃJ0'Q ,]kD M+uK i%D% M ^ /)e}? ޲U~4~5~.*9՞ %ƅrY<ݗ ݗ D vh@j#bX * &^?\іh(S C:X*{L 7 , 8> ꃴvK??ꃴvK i[#q DU << _w ,  ʼ ธ; D D冢E_j冢E_ δkt$j E"#-8)e <.X4<.Xx|r )C  Tc T Ip 1"1<HJ c i`j ?kG n$n(jR4n(j4n(j 嚖O $!9Qf%}* jio*ioioio TN X;] Ǽ:[cVYd V3f+ܻ-t ~  s, s, a &󈜫 j :<R ;qA/ # xDs+ xDsY# xDs  wTR ,8 'M2LY2LY ,Dv YcR  sRN) sRN) R  =}& PiE + R? $ c5P s0 s f[! :fH :f9 :fP@}I =gTVHzPԟ*mN j ${J傳] lRgM F  Cʳb Ghd 6{ a@΋)"5r->O?.>O >A}•(B`[b CX0T#l]CV!J >V JEҘjJEҘY JGi4!JGi4JGi4LLsVLLsV OG;Yd@OG;YKOHOHOHOH$P7=Q4l /Q4l /LQʞ S*bЉ SXJ~"TD#: U=)}7tSU=)}7"UN$v8V* LW\߹%W\߹W\߹ X*n 0X*n XS2 ,Xhp:+ cX/}5X XXǻr-Xǻr-YDYfysYfyYfyYfy Yǔ +Yǔ +Z;T9!]g) l^P MR^P M@^P M^C8qXwQ ^i~`4]D`4]DR`4]DW`V `t10 X4`t10 j1a&]a&]Q a'LMR a:6La<6| ahUv #c,en*c,encNDaacNDaRKd6Y dSnĉJ d. dmt e]H,`] e|:W1e|:W1$e@h2+ks!e6 psgq EL!gq E!gq ES h^jS~id j Vj  ;j j5j  1j ?%jŋ a\k&YL \ lt a lJ*$ n v0 qTAƩ7]5q52 qy/x* q=@r(Y r9*]t~"Rt~"t~"tEFeur61D uA؁?v"[) vR#Jva %vGG!w!] w[,OSw;LwsP0wsP0S w8>k zPA"j{TPf {eJv{eJ |,]4l |u/!Ɯ8|fL*v |̚6(}qR?"ukY\ . pa,ԍ : TSQB_ :UY4? e de dtONtO  KPg B#7'܋ )!  H{1SH{1$H{1 b{ JOֱMJOֱ \Hֈ Lֈ  9q Cg)R SEcSEc ( SEcY Dh7 <(wS GiUEGiUEP_e6r? ZBZZBZ/U?/U O &F Qsc? %(]4޸x邖 )?bsH4X }όH|?"eN Y;`Y;` Gn N ->$U p7 %H_X (E%H_X%H_X $%H_X ֙?j 5À78CtZ زs ZaKZaXeq ^ ھ@:ھ@ھ@sھ@?'jA$ܨw RաRա c %oypb u}(0 -R2'-d y$ TKU`[:Q[#\4G( -%!. 0DF*V8c$ ʮ \<>V!SjK g!SjKU!ύ )" -^ "U 1^ "UtM^ "U F^ "U +G8´ Xdd%dmt ?5*s6] tJM ӡ2-ӡ2-ӡ2--ӡ2-KTdG { TdG T$㺸 XWava (XWava XWavaXWavaYXWavaXWava z؀t z؀bWz؀k8z3z39/A@U5%_6;1%_6;LAKZRf/  c[q q Y\ssK@U j(H- "R ;1;;1;1 1N+ $ 끪xsPy`/PyR 0iʎE$zs} ! W  l SM(R jJ IjJ mjJ E,Bs +E,Bs GP~6 i? ]Mi,j ~.N h7 h7\r}$!wz &wz $ wz #wz ed鏸d$ハ4l j !#S#cJAj2g7fN n.j DFH?'H \H 6 Z!ߝkp?/;FɈfFɈf cȈ~; cȈ~ cȈ~ Xd Xd d : !?Wj !?W Γ7Γ mΓ:6Γ$Γ!Γrdu? wڛv yh1E8)sE8)sKl[llrބ "~L¬H^3#H^3H^3Q R(  R 2nAR L7R nt nj 9jn 9jn AFR5y ) )sE) A) #.RM .RM mf{aZy &ZyZy \ ᝲf vᝲf U֏9R :Oݮ'V,">8;"r,S "y9۩y 3"y9۩ys#v~ #\  $P .CD (>,F+?)8|)8 +< ,w,Gov -Z*5-Äי1 -;0_^z 1!6@$1!6@ 2S]Q2S]Q_ 3#xkJ4 4 wZn5)~5yHj&k#5yHj&V 8I,Z:V?@ :pr i&;_ۇ ;_ۇ ;T < XX# ^vR># ^># ^s ># ^>7Z~ ?.#nCX?ES̘?|r# ,@u  @@, @~.?AHv2Ld ApLI=$?AjnSA |Bկ9C>sC> D]Jn cRD]Jn c ER0徥 E6? FYttJG- I jI R JGI # JOh}JOh} JhXJhjJ) LY@V/LY@VLMsRMsNIsNINǵKNǵd OH8bs*OH8bs?Of2l2Of2lO OD3uOD3 P?T|PjP rl= QED QAH5_FqQAH5_FURŅbBRŅb&S nSz WkDSz W \)Sz WtSz W S//KVS//K+S//K]S//KRS//K S//K U&#?< ^$U&#?< "U|kV u{ZVE.!2VONWYb?)WYbjWYb (W5g=W5gW5gW5gD WO\h[ DWRLȥN[h"[ "[ \0^R']T~ j]1h:]1hj ]1hs ]0ɬ (D^Pu^ћ _QE L`qEcM a aCj's aRc  bH bD QbD D'c/gG dS; eY e$IeI7xz|f5)ъ-fp]˺fg4׮ gih5'2iȣ Aiȣti= i= * jY-7Qk-Cީ!k-Cީl-mr+ mr+ mr+  mr+ m;4"m;4Qm;4 nښ<]E?nښ<]Eso%SyD o0 oz pU˳ rKivo rƶbs W]s W] s W]Z s;z? uuGuP*uQuv3ye wbޛCN x( -0x( x9鉢? xdy }%yPիK z\\׉Jv |6`։td |]oh{ %|?Ct>| c@{D> {D> E"E $  i* %j܆fs.NMNMRR6?? [7a[7a?K?$ |v$[i4$[i$[iS$[iLlBLlBYP(q= q=? S =Ӌ \aͫ'q ͫ'q-li6R{m h[BXpEs H/"3 H/"3? a8XX VKKǨ :_@S_@SDM'H [n0J %~tն> $g &259<&259 W6. E,ʹni , ڡ< "LKa""LKS i} oGB|kSH%MV.%tU $;tU dP_5 @dP_5 jje3je3 LT , ÂĔy6ÂĔy6UÂĔy6þp i(þp rϛDD8 'DD8  y y y \H[h?ǨS)R 4\R%G^ I ۈ: ˏ_ˏ_ 1sQ? ˺Qv̾wѤ| a&S|T  , [ a: ':b P ѹ ?ѹ ?fѹ ?2ѹ ?J,ѹ ?f e i DQ}A ni 9 ӂA[YӉm$ (;Ӊm$ | hQdRhQd ?baOw; ꛍ[ O]/lEk,3>lE4(k (4(k4(k u~ f0{- 2R! tGh ]R+] & +*( cH0 x"H:Yue #,Z`n0,Z`nKy7`/ȏi Ԇ]Err? ԖVQTkԖVQTs [ [0[#;2/82/8 2/8 RgV #Vl ]Ma- syVL0e ]zac.5g \W!.HiY? lZ@y?ElZ@yj 1," 81," Ҥ"x$Ҥ"x \* gS \*?F \* -,# #1 n?M n $|Kj 7 7 7$ 7 ydmm8i`mm8i 2b2 ( LH %8X%8 9%8 )%8 1 sblKp , {OVNQ?1 ~h)! ~h) .^$.^$Q ,E? ;G|S-)hsM]&̓ ԣ_L@ԣ_%r?jXr??5Pw5J_c%Ruv3`uō3 ZzQP%0P% aX뵩7ʶq?qoq %߄XM 'xyg0 #I(.W !(.Wb (fL**]*fI*f $*f *qSe4 +7(Z,M ,m}R-/]=#-/]=$/.?*hS5.?*hS.I9 .+[( /B)Y0<ϛR 01|cY12NJ ,2NJ 3T~E 73T~E3T~E ,5U 9rRK73x6I!72v\R8-wR i 8{ޚz=9\j>j9\j>j:\Z"t:szE*K ;_? ;I[ 9 ,;Hŀ *O<)@=\Mi݂ =~z$=tNF<>_Y) >DPP?[?T# -?T) t @٥SAHv) ~AHv)j+BWv ? BYaCZCjD"L5svD"L5tD"L5 EN[ E Gz H@ H"]. H"]. H*.R{INY#INk IдksMKExaN?2 K ~?L rtL L=9NM^INe NR/\q NR/\qS N5W +Oz6C2zCS.6Sյ EYT,ZsTuC!U? USĴEUSĴEV6Pe lVVJbA2VJbAV]7l.e8V]7l.e$WILHs WTLX¹94WTLX¹WTLX¹ \WTLX¹ XU?ZPEjXz[ e+X# Z5JR[R@A_# _R}~؇X#_R}~؇sa6F>N av37W#?av37W# aaabD g'bbjv cdciyijad+o8 e d-C d]ӸCe>_] ge.^f.4Tg9y? hVhV hq?DZhbގQ ($i 'im߳"i<4i ("m~ڵ9 mߛWmpn$n7.s o(v qwWv.*rT-z \ s/Pl68 s3, syRz u < u$LW;u$LWLv]~>_ w /wrAwr yTZ̉rs yg=L |I vL |I vL |SH; \}?~v ͔RD5~v ͔RQ ~FVS] ] 4] *] RӨA}|? $H $H 55!H!hOK19Q mj { kF'&ģ ,Qz - 4WtCT&ͩ7l "A_ : odY Py$ g}Py$:(Py$ 'G;fQS K@Rά;Ub]bvSCbvK,FYLg9FYLg !?1:"1 (eH (eHzkA2}2NZr{NZr (>UӮ'j"9s ָ) wւabF bF  ݋5|A]vt!vt vtsvt|DvtAvt i*vtvtvt , vth + 2Iȗ4&Iȗ4 \"N N# Dt|NQm%Sb oy biO oUȍ0oUȍ0x]vel`2"C|k :fYW #YW aYW >?r jLC+ =LC+ ,LC+ LC+ LC+ ӟ ӟ ӟ 21u߃ u0cjvS J!N4J!NK=   )$S  !Dtʕh4 rt&Ezh Υ5 (ϱJ0ϱJN,mB? ZBUϳ bQyd[bQyObQyvBZcTbь!чJօdJօrJօQ,?zm #ҪҪ9"pot"po iR"po ypZR 5G9Jt ]BSH]BY]B ]BQ ׎KB(׎KB$׎KBD a8kW[ ِMP/{ِMP/|2ِMP/ _F? \c\c \ 1t mBC BC{O{OQpG"߲z >u{5ru=w)o{)w_ $X1۵/o >iR lIF6GP m shS , $'w3 ^+jN^+ (?^+ ^+ nzjUnz inz nz ρR @^R@^R @^R Ƹa%8-; L%8-;|9%8-; i%8-; T;gvz*9`GfVYGfV 1GfV fGfV?`)}/zk/ zk/ aL l* a1֌Hv֌H g''? kU`r i :^F'3k.k.d LLC N 4 3 x 6W)1 ѰN P03? k)74dR ֈ{c 0M xŃxd7j * -gN"q  ̢) ÷N '}( s{1@4 ?> cs$?s$ s$ \ "<+Z&i%P- }c^ z'  DCNs }s .? r '8 '8 '8 19 {Că úO b#Vnsoƾtd uxv l]B\9# >M[K ljvQ"k>Q"Y*Q" ()Q"t$Q" TfC 9$dj9$d,?fthtftht^ftht:)֏V  ךNLf6 L fVh hR7Re ;$ >$ #Z6&Z6& Z6&Ss_ P>3RcԌ zmk~zmQzms \\\6\)\U⹳v2 +&*zL>z R .~j*Z"u} ujl$  YLD YLd !g%[!!"&T "rYxP #Ҝ1f i$%|nG? a '$f-Ys 'tg (7|6({Oq(.*)ey* &j* * FN +uͳ+uͳ+DwEs ,Vu ,zE -2Y#-˜ )i-] .*k.*k .*kL05._j 0ć5F a60ć5F 0ć5F?070hnj 2R)*?$2٢U:( ,3^UH4( (4s_T36ļ? [47ӎɷ] 8?g  8t9QOK :/R;%fs ;A (=ռ )>ސIk>ސIk ?P> ?2; &(?bA ?(i- aE?(i-s?(i-@U @WhR@ƶR?C<à ,Ce{ iD1qn D1qnKDUak D[fD?k Fua $AFua? F1yFLl6Gg8`G[v G[v i G[v HgHgHgQJЀ@K0.ME7yz N%*+A OMP XHsP0}P[P[R+fJ/SL2LS T_pO EU7`PURrb V9UT V"ZDVE8f7 Vፔj5Vፔ$Vፔ ,W"U#i a!W8]]R9 Y[|/Y[| Y/w,ZGu0Y)ZGu0YZGu0YSZGu0YZGu0Y [$ap a[$ap?\t ,]/r7 ]?ĉ^5c$ ( ^Q7 $P^Q7z^Q7 ^Q7 _0h' M __ n $ `=́_]`=́_`=́_`=́_`=́_`=́_a?`=́_`=́_ZdxyezT%U_$ezT%UKeqH+ eF)/XeF)/9 f'{bT *fp25 fp25 "fp25h迢 jv$hϔ2Ahϔ2Ki#jm kE5GsTkE5G "kE5G ,nGAװ- nOyx= n|YYJ qz\yqf+rĤ |mrĤ s,rĤ grĤ rr4dr9tr9tr3Evs+!CQs+!Ks+!d u|a`L vDDIMvDDICvDDI&vDDIvDDI vavF wZ^! cx1{q cxk{Y y",V# yx{F>zg a z'N}x{&ui"{e߁X?} 3sR}wua }CS>}  -~/0=`} jJeG*TJeG*K*-h 6= 16= .6=m bXI (p;gp;gSD/ jD/ aOF \obX '?!m?(j ۥ^a C >:l]~) JeSJeJ&%~D+- ި y|-.B 2(q9 Ɇ.YQsɆ.YlɆ.Y(Ɇ.YD Я (=Я $> e?j ePϦ qݩGqݩ[}ҫ0 J k , J k  J k  q"@0r*N@0r*4=y8 HqD5 $50{8:0{8 l| ׹t#׹s׹ ׹׹ h jayO Gz&? Gz&?? VZ t ҬUUҬU KnVTv? Xx& Xx& iXx&?Mc aJyb e)jwGe)jw|]> ,\[d/ddII}I I ^07Fa =RTuN ?Tu[TuQTu p}g 9q7 PK .Kd E1SyFhpp,yF[`֘ڠ Y^ Ml >p!>p] mv dmO" 2u ,=b $ >=b , ٯ$%!. I5ھA*b-<R/ BKr /QvtGR] `j 7"x@O6"j r0a ? !m5|:̢j#|:̢?_Jn_JnsJ_Jn ,_Jn [X # \K s H& BIt6BI (BI BI: 3qz])I$)I!)I)ItAGnVr [ qS04El&g kk^F tִ c S%H?8 qR !!T ! ! ] "z<~x b"z<~x"^\|>"m # ~4GK$9\hJg $ ߋ#D %~+ &$oR' R_ ,)cW5"e b)cW5"e4)0k)0t)0 |)09/)0|*^xo0 s*|0 +bT}+bT} +:ف" c-w .u}]/wy9?/$)/# 0=0h ? 0nO 1: i~1: l1: 1: 1: 1Fe>ED 1BDߗ3*\:3Ϭ,G 4Sj04ݖ(5Sح 6mV $94 :F=*F:F=*FQ':F=*FC;x . ? M>( #@~t@r@rBl` ,Bzzw ,:BzzwBzzw $Bg\r-RBХDrژM D-e& Dt"DtDaPCcE ]$4E ]$4E ]$,E ]$$E ]$d F?:aZ[GUAGUAG(hQlH"H><H>ZxH>Zx%H>ZxI#FZJ9YF K<K<8K<YK| L-ȯhL콕؜ N-R,5B 2PF32X4[a YF| Y^ 6[Q:2Y^ 6[Q9Y^ 6[Q|Z?+m \ ZTO:  ]fy^ _|i Fj(aNS|ab:R"R b~ bҖ3R cbqRcbqcbqQcoq?CdA^  dbi dʡ"@\ sdʡ"@\ \e"teYG~feYG~KbeYG~e5q $e޷z4eoG g2 ('g2 rg2tg2 hR~ \^i;ԛ@$ k4F m34f-gm> 7m>YmW V*mW VmW V nGPShnQf m og,kp+B̝?-p+B̝jpw4q$zT\ - rQCsPMi8tpSڮ u-8u urU v>rU i ve}u,Wve}u,e vl1 w$L w$L $nw$Lw$L Iw$L ,"w$L x)/(|9 x?h|fyO5ړjFyO5ړ ,{yO5ړZyO5ړ y/ 0Y z˦դ  {- |aIPҒR }=n[R}|Cf= }|Cf=;}"/0 }"/0?`}# W& j}# W&}# W&}# W&Z}# W&}# W&'}# W&]T{[H fe\NR zy s2zy \C- UwJA4 $wJA4؏V ؏V؏V 4wv^+ a.^+ ?^+ Av#H#m!?  iB \ Lkz-/Lkz-/R&o *& _4 #o_)<`恜 F՜j i7i?iJij7זD8k aזD8k -qƽv$2ްT[= 2Eq2E 7-sN;"lzgNn qSh kVB mpn" w.b.bR ,? F9?IvB# FX? DMWDMW2DMW&DMWDMWƁ?y IEYIE)ss!\@Y \ +ε }L lS?zZ¾SzZ¾ !j -Qt<1( !nj .L з5 =* h< :h<|-h<)h< g #_ (?=I&B_~T 8X6]ſF[ S0v, v v?+9f?9f &#Ժ}GRT <RT s6RT c@0U[ a x;s &x;s i g` 0ɻ@s0ɻ@^0ɻ@`a3yzZi`; cD $4LG<[TWETWER 0l Qْ L݆ $ 5Z5vc)dU  ~ -a4o cS%v $'S%v ÁA [72[7[7K@,,%)xeu`y4{V#DZ [<<?UJ&̜ Y/hNXǧ}k] IyyRhIyyQh+~g $ m I1 \݊>*ӆ< ;@ 2 ҥjub *g WU ԥ2v Z '5n A E֖8S%־ > ;_HRpXU m}6#-SJ )`.)` *¬Rs? ZHiKbZHiQv"me%"me_fhT n|y ` }^G *P7A㟛$A㟛 A㟛[ `  s 9OC ) mI)j) +)t) N p N p d W! ,_\?? f&?˙%/ PF\C_IjI P^[ag [agEۄ A |;4 ]csK]c g]cۥnR!+:R@VÏ9j}p߰q mm!3V/ZZ?Z?ť$? eg eg # }06&Q 41P 41 m   3>Uu% .: ~c cMP 13k13tA m( K? L>Dx L>h L>I {>C?3 {>C  {>C  ii ii ŐI ŐK Ő /W@ M2ϑS M2ϑK M2ϑ[g?C sx׃eY7qY7SY7˩+pBY ^aOYvej^aOYve^aOYve7i 0s  hjuTˆ  |+A4|+A i %q6!fGOātR!"G 6 -   ϻs%ϻ r?)l  UN!!g&|!g& u!g& 9!g& (!sSkr#Y #BP#BP$KZx!Vts%#X%=Xj%_aZY % z &='T(8 v(۾ › " (NRL )qJv+l8QN+sf[ -0Ij.mVaY.uW/iUBh/CI5#/CccC?'/CccC /ߓ 0uT?w?0FQ*9Y0FQ*9%1VO B1VO 1VO U 3ʂP s 3ʂP 6 Ct.6 C 6瞷DjD76瞷DjS7t38,1t8ھ]9Rj\'9A)|K:o|;0bD;q%4h=> =wABz?=wABz =Mz=MzZ=Mz]j=Mz3=Mz=Yp ?Mi? ?,/?,?|i ?b t BF |BvBF |B vBnS-BnB򫑉 c C:o PCD ʨs D=U/?/D=U/ D=U/ El~~ Fh !CFrT a FrT aFrT a Fs Fs Gs&o HA ^| IpkMpkc-?Mpkc- M)cN<&Ot Oa# P#Fg| R_lR_lZR_lgR_lR_lOR_lGR_lR_lPR_lS^6?5Tgj ? T(;$,Va!tZV Xm Zp JT Zuj,^["E \(yE< \>)f0\IfC2]? l ] ?]  _XXXa_dO:`yWx aBm ?aBm (aBm ihaQ4JDaQ4J , bE bd #jbd "b3D2b3D2?b3D27btbtc+Hc0N?c;d e/#Sf MNEg x; i.ԙhvi]xM-i sS"jlk YsDkH? kH l3OVl#j Gl#jlq:m6\boRՄ?oRՄ o,JW|p:Wx0q-qre s r1o rycJ'sRӟ=sm.)_Ns (< t}?;t!YX vᖏ[Zw qP+?y XW" y42eS; , z%<$zTB zjN |!{n |}Ox}IH8 , ~X>j ,P a.,P ,",P ,P 7ZH?p RDjscO7,cO7cO7R@ CSMZ SMZ FSMZ !k!tĂ̹Y%G #菗t菗 ( U? ,1XT~8 c}͎( fY/(oB icJT t b s%N>J ۇ14s0 4s0>kORyc % yc % { F. F. KW}NKW}QKW} {*VQYbB$se"{t ed4̖H];my#d*lM!aߑJ5 &p( *Nxb: LD R)'%s 3(%2 $ nr@  w#eK CX @!q PZ}&Z} *Pq  DR/ D DZ P We\ \lE'f pަ5 $̇>g~jcCg !F#F# $ 8IbP^8IbKO8IbL!yN\ɿ/gs,R"> Q[Q[ # C _$= n]<^Xh $ HZ cq(~S = a<7Na<7!y ` ؟  OYsN9/ ?YN9/ N9/ h*>zh*>zSRh*>zLڌYj2iNAۖt 7t۶αIY UzPjnZ'^R t*5k߫B {m߫B {5ᙊ@;$|#ᙊ@;$ἻʹbSv,Ѡ5 -Q'%mM{  M{ pG(ZJd f|م-Mf|م h aAo,aAo vaAoaAo aAo aaAob!aAo eG Y4`?``:'` `` 3I@3I@ 3I@ 5oegdcXgnW`L "P b<$b<$b<$Sb<$K )@W|0L.&N+L.& xQYHD{ 쵵衠b 'Nǭ.VR[==1uNGu Z4j+Z4 i Z4 b1.sb1.h 0ܼ`W s,ܼ`W \ N$&6Vjz9yN#,@ ti.!ti.!-"6 i c }&akF7$t K7Qs Gp.JCJD9ԒJfj 6v=Gȕ GȕK Mv~yܬ~yܬR(~yܬ#p' p' ֬~?KQRs_ U Y^ k e ] B] ]t5_3)5_3 ,&5_3 `G$$? !\4f| #DKf| #]f| #Of| #&f| #f| # 'K? x: x: YS Od Um?v?z?4^ v mCRT */e &=Vt? :] ' 2|t i "F  ӭc`vGpI Rꋵ (9qppn SL& $SL& .T 3[5A YjeA4$ju60\7v$ \OM|7OM|K"qz C*J #CCCC )M s(r s(r q .g_ !!! <D!!! < !]1s "@N"Ã1P #a $p  %EH $!%EH ^ %EH %?[n&|:&fb! (Ъn (Ъn (* ")l1 )l1)l1x)l1],)l1()l1Z)Yc !)Yc Y)R(Z#*'.B]v +ς- $+zIH+zI +usX6 ,]H -vB -2 -y% aG-y% $-Y[^ (-ꗼ .jpl0c1eKU2 JE 3DGR "3DG3DGQ3DG4"O,4"O,RT4"O,L4"O,4"O, 8ې 8e4j :Q] ;k#5 ?ך 1s?h_<?|t s ?RAi(ybAi(yb VAi(yb $EAi(yb ,(C1oCA- CA- e Ca+_? DyAD< iXD< 6D< \'EIqY/E㭴?E㭴 Fǃquj G[q>oG{pǫ i&Hf}́"HjvKCeSrTKCeSrfKCeSrKLI2'LH LYK LA' LA'jN9_#NIρQNIρN*q, SN*q,5Oa@YOa@bO&M  QK!QQPH Qg"h_?QZNYQZNYQZNYDRky,Rky T߲ q)T߲ q UZ,?UX U' -VR K]VR VR VR sVR Q Vyn[^v3Vyn[^vVyn[^vWN%N"WG:ۘx YmP6$$Y# 9RSY9t"Y:)fhNYY?DZ] Zl [(jWN [)>$=[)>R_w]i_w] ` :%bʄC dL[*L eNHG_jf/)P gaTgaTR g"vMgE 0a ,!h^"9h[< ic];|j@ޕtmjQ:WiLj.K k0I-A[kD7U g ly lx0 ?lx0'lx0 m+2>Rm0) #0m0) c6m\ #m\ co 8c*&oX<;qX apd†^ ppz q8&Xy 3q8&XykqFp (/qFp qFpsrv8͸ttn,uFE 1uFEsvҨWa v]f;9v]f; vn3Yyg ? {[Cks f{[Cks .{[Cks  {x1ŘL|n|" (|" $ }a,#F 6}a,#Fs}a,#F ~$T &xV-Z> xV-Z>jRZѕ [YGuf ݫ~4 k$ oA4?t9>q Ϛ[ MJ\!MJ\:jtiL Pà  Pà  .(s*7H#[ p Q)CQ)3rN" ($N Y |S&Y |KYL9r >9QRoy_QBEJ%kU_x L@fi?;H6 g %vW -uעC;ߑUdY?-鶤q鶤qvǴs UZrR;3Dp?;3Dp: ŕ]2P}2P}'2P}70HMe)-e_:-e_ q,N F($oC`MH s Uw"{ؓX \SF(1T1~ ʔ S= r=y =y  _)+ hg~auexQQ)uexQdS_d/МAD{cguLP{cguJ{cguK1{cguS&{cgu{cgu ||d  %swTN 0\|s ( c,WfB WfB (5WfBj3WfB 0WfBs.WfB DANr?<4<<S{#I 7 |r %mT1$;FUk;FU i3;FUY2;FUt;FU \>\F FȖi.FȖi],FȖi"W3!xV. \z K\w$ ?waik JY(T]G-q }.e $}.es$}.eh}.e }.e}.e }.ej}.e (}.e }.e-wA i-wA| nnjkLsD> uOd~ ~ s ~[Gp \$~[Gp ])W%wx 6 '.Ie .%$dn:sl# | -}}q/mBGij/4_x-LgGe svkf羶8Rf羶8jf羶8u=}glu=}gl6 9(4u $ I̲K O8fQff ELRNEEG}PEG}K EM$EML'k5R` U: +=N ʼnsʼn ʼn $ 3WwGiwGML Q;Ǔ 2) ?[< Ey S?SSlx)@GC y2?"y2?Es ?Es ˩PyG...j2ٕ:PS? uq vђtϻ"g"j'"s " $" "" ( Ҝ$'kR::/ 2(>:/&(>:/(>:/j(0P )= *jlu | *r< *C *C +O. +3@c~~ +7#N +Y<+ű1#+ű1# +8=?,<% ,E֨ ,E֨  .-T9n] . 0@@^ 1< % 4IpL # 4Q۾*4Q۾{?4Q۾04Q۾)56E!5-qk5-q i69W0 ]<8pI :4|<;  c MĎU9>MĎU$>MĎU?VG@#4 ?<77*@9Œ B°W(UB°W(KCDLN! \ CZw>H9D[)ER1E$>E#gFsNFO (T@#$G_`;FHkjW[H=3H=3jH{uj*H1`6Ile\I K(kW LV Lߟ\LߟMS` M$ef MQ4~BMQ4~ MQ4~ iMQ4~?Nn  OpC <  OpC < Pp 6 P\vaRU8q$$8 SR®vTB^AIat&TB^AIasTB^AIa Tw'MsTw'M 1Tw'MU¶Ֆ , V ~=VC0 XD XD(XD XD YyXeY5L "Z zfLs[y* >"\<9 ]kE]kE]^{1^V3* ^F `Y~bP \`Y~bP `N``)0]`)0]K `)0] `>BPʻ`Y\6 dU.;jd`yOEB eUQ״eZ- A f Qf Qf QQf Q f gd(g%k h^CFF i)c@9NC&i)c@9NC# i)c@9NCi|s+P iWylj+0 jՎkjK'J !ll"h? nFjí n7NnY # ol_K:p)Y)? pC hvp , pV qKԽ0rPVPlrPVP r % Cs$^τDsb{2ɉ_Ysm?YN? tgkTuf-*p5u(Xjwu(Xuu(X -v<l \JwOUE3 xOLqxOZpxOs x. {T(B | }NB~u&% ~i刿 9+>9+> Jc!(Jc! oHl Ӻtt?Ӻtt 7Ӻtt qӺtt -Ӻtt $*ꈇ{ maHmaL/ma%mamama ANK=1–te݉#=Lօ ms͗p _ 'ܐ $ ,j!N ; ,j!N: ,j!N' a_!c?NNKR j xPn}>N#n}>N  S{k"jYVjYV\Ĩ .o. w wtE:d =/]d[?ȈpsR폴?폴 ,%QUX<]ƞ $ş^Q M Nˀ+ ,RR@[ G}0*G}0  mU& mU C- ' L !{}5 cr R e S  [h [ [ rw01 0%ln O`uG;G 68} ( C$*Oc4h}SR⟾ $⟾? 7 A>] Z<~Ȥ<~Ȥ<~Ȥ<~ȤR<~ȤKz3d 7Q 2:` lI+_tlI+_ \-9S? sK=sxu{+D韎LlO5* e * e $K* e8* e ,w EH B-#EY<9?8ks(8k \YpQ8 bh3[> bh3# bh3-O$U. _ + _j _?FڲdV ^8dV s8$;2I }.A7j}.A7 \}.A7 ,)}.A7 i"'FV 5tY<"ܓ 6-k6-k>6-kC ^ RIt٬HtD1  _T- oȱ\Y$oȱ\bSɴd!ɴɴɴD Ӟjt,Ӟj mI ?|A p?|AhQ?|A ¡&  ×F|D+OU İ1I>5L- %,L0tL0kqŔ8ܪlJ) O7 # 6ZEkS!} M! S)))D5) 19 S-joG|k1r|nwS>CI&S0 |i;\HA \ޢM - g6|& @EF. # %M?(d٪[B q^ $ 2I˸ ?t S|sYq . U͘H Z H Z $9 jb2xEi;j/i;j 2R n[9 <ǀn  R̯o2II[o2II+o2IIJP}pV tR 0Gf zK)t ,\ #=ryȬ6ryȬryȬ &aӥ ,^s2]/n_`K m m m Ym ?EuEu vEuEu bj!hR$ Wik XgJ*h Mu? - i?i)ii#xQXT#xQXQB#xQXK-#xQX~zS G-kFG-kG-kQG-k N ] $Ƨ##$Ƨ#a88l&f+^x^xD#^x^xK RM cſ->\?05 d^  ўQ ] d ]| v- v Ls-J Ls- Ls- Ls-L Ls-S -$-$ m-T$nqdFwe& $ T۔Y8 pKV :<6:<R$UT; Ѹc $+Ѹc  SRG S XP XP ~XK~X~XR g9SRÚ9E?g ll gV~;'ݺwu$ tUt][ mu^ HS;mu^ H$Wmu^ Hmu^ HLRmu^ Hmu^ HZ $%* cZY S D D r30pO Rjۨ$W2  \a LclT`$L`$V`$C  B%[( J`rY/"=l3o7j)"=l3o7v"=l3o7#4;[$`h&$]0x$`1g/Nr%R %b nv '_xeY)3YN,CBaJ,CB&,CB,&YX ,Ҥ/,Ҥ],j-(L)ɳ~Y-ۧXht-ۧXh -ۧXhsz-ۧXhYa. 2i+ .2?d."$1/9@' \(/9@' c 0 0e> 0jnN$ 1eVU`E5K2Kqt_2Kqt_ 4yr 4yrY?4yrt4yr 4yrb4yrk4yr 4` TK4v~rb05&@5&@7|3V`779?y sG9/}b9 t 92F<U92F<c92F<:EN :ɗD ('; (HoU=^=醪?/$f@?/$f ?fHD c?fHD Z?fHD i%?fHD|?OB?OA+2{E: Ah3#Ah3# ,KAh3#"Ah3# Ah3#A] AlO5 -YAlO5hA$.vG A$.vG C3y]bLFWQy  G&˨&G2G*GLc&GLcG[ K HwmHwmsIq.SI\I\I\ I\ I\ , K12 > Lg%RLg%M ] Nh{SuOڔ& ,Pp9 QZl.Y QZl. Qz$vLQ0 1 QoEftRW^@R 6?R ~-j+SZdGSg922muTo!?U8(: Vxߊ/6Vxߊ%VxߊVxߊW{@:XU4 Y|K`(sYpU ZІ~E Z?P!eZZ2 ZM#ɂ! Z|S[W0K? [{*\B `\T[ a~|b~E beT!b;*jb1[!N[b1[!R)dP\Y? eTJs2j ektNnuLf/z+Y fւ g`ߵ- hg-#[ h^Rh 3n:j0o6Qj0o6 k9,dc0k9,dc? kNlr a| m݋0 nKs7xWnsm!of>)?of>)spkn (psjq q! , rR] $rR] u@Ru@t<u@`8u߭av5IF# v5IF] wDRwaHnwaHnwaHnwaHnwaHn/waHnx/;RxJ/ߋ? xJ/ߋR xG_ %z azF zΩnr,j|l'||ۍ]| } |F.$)|F.L } Xv } Xv} Xv}HǞ|R)~L7 I~L7j6~~πI ~5  ~i`؏~i`؏~i`؏F~i`؏+ "нq} &Aнq}?+нq} "нq} Ǜ8? I"vN%:dm `Mh $ T)-v^v9^5#X F_=? c.s^c.s ]c.s (c.s a)c.s ,c.s c.s ,KmUc $9\j ϣ('+t]Xo}a.d?dj[N. zJ? Zp{Zp{Rg_RRg_]Rg_4Rg_LRg_URg_ Rg_ u#Fv c x 6GYcAZV@~RV@~RS&V@~RWFxy۬=H} T uE] $ DYY<gXR ǹmX[ &ǹmX[ ,A6 n4A6 A6 ;ztk;z 1;z;zsC S!s (YpvGP$ \GP$ n Lu- B,LB,B,SB,ZeB,.B,$B,aB,B,$V@LgV@L e+#T <9&v&bw2&bw ;X9Z;5Қ 7~O&q vEvELvEI*8 I*8j уN pmtTY N+N+b5j+b5 ,!dK σE& q$Z iq$Z B1RB1DB1  #b s`s1 $B5-:ch)p_Ũ#SXD etRT mdetRT setRT vetRT  ,_" ,_|? Qߘ{ xg$xg$\RF XR&hR 9~f ZaKsK v 8fh- f M@%: )R :\ 1sfd`:ͨ s);9s);Yoƕ¯o6N p? UlWs+UlWvUlW Ñg àGG#q5àGG#ƨ`*ƨ`=fg \dt 6s6[ "%r7' F<};#!\F<};#WF<};#L"}xQ} ..Y?D^ UW  АL `}`}h {5j{5 \ W:5ZJ \4i \4i*\4i\4i\4iC2?Im? 2\ ( }8֡U(wy(wy  iX a  iX ,I)UB& ,Rbwg };r 儝a vއ_ # ߐ.1:2ZE]YZEEZE n91'0~'0~]@Vk ƑgtZ?[w $?[w vk? d5!| Z ws jgO 楆R a楆R X A?^ d  {/b5m ˈg _%; _%; c A'Y \ \! Y ?ƣ棭 ƣ棭?iPP@EPP@E WEYWEYtK  hZ* #njRl@| "@ T".W aa!H QCt,w*0w*0] R2cA w js2 E`_C L CV$d mN? 0ZgY0Zg c{M Y,7K'{ #S'{ c C\*Z qfr{_?a=S n)$h Y PAՒ[: ^~~>Njd_uFLDE (LDEdLDE0LDE \LDEt3H m"EWv HcK!t=2~ i5)yh?5)yhj5)yh @ 6@ (G? }0 "^ dY  q#B" و Q,4 \ z9 qR &Q| CO}r?  ( | cOF=N [<? [< z 4a~ru0_j k 3%*Yk]M W CU i| i| i| S i|  :4 &4;9N ;ò #'ǕR[r_625ncr j >" (E{þ ^Rר0ް- # *ja Tr Tr ?r  _f2Jc3|C+C.$ceRcetce @ C "?8"?L"AL%"e\7&Kvth a'vf|s(G$ )B r~ *_ƙb*+@ɛp#,rp[Zvj!,rp[Zv ,rp[Zvs-aQ-aD /+ /p}g 0y; 2, c 3VP5{? v5u# #6F mpZO 6F mpZOt 6{k } 7:w 4k 7p|7\Opa ;6L >oUw " ?ܺLb?ܺL?ܺL ?ܺL ( A2הA2הL B` B2Ax Bb?]C}n iD*5 DtDhـeR E~F.`zP F?0O HJ#ݍbE Hj J6҃wJeQV aM2"UsM3+}E! (M mY Mq., N-w5?nN-w5j(N-w5s N@o| N}5B 1N}5B \%O*Fr Oy)a!Oy)a O,~ ,Q@SQ,Q@SQQQ@SQQhJQhJ|Seq4UP1nUYo/UYo (9UYoWn Wn , We8Oh 3Q YS1ڬBYS1ڬ[<դY [V脿?^]s@ #c^]s@ c^]s@_xs`$` `-bG `HQi `HQi ^a7aarb)arb)Z arb) c6~ d=-jfG'fG' fG' i='iT:,viT:,viT:,v$iT:,viQhi$W݄?j(|j} $kRXkRXm ʳC{N9m ʳC{o'קpCD $rHr2 s9R:K u0CI iWu0CItu}4%y]&v7(-6yh w&z(@w&z(@w&z(@&w&z(@d#w&z(@ "w&z(@ w~Dc$Dw~Dc$d wHwwNW$xZ% MtFxZ% M (6xQbm[LxAJxAJ y3!Y j y5= =y5= y5= vy5=My5=|{ y}>;FUsl: Msl:g$gdr;41 r;41 7hM?Z]EbteU$[eU$ .=E Ϋb6-BѤ >-BѤ mx!T|vx!T|4ׯz1hNQ#azjiD ìj Lìj #ìj aìj 3U + Mf  f"B&*2r aX@ z KD H74]eBooQ6UM 9 ÝK+[[ ͟W4{ (#͟W4{z$p[;) oh |o<N$1s oJ,"SoJ,"L4oJ,"$oJ,"aB z C"oPMp;@K 9eB P?lN |?/TsRl`R m#2IT#2I#2I mSp)+ # ) 5 p  p  p _ ߨ' \L)%'R!W:P yG? 'TPSD'TP;'TP'TP]'TP 9gTG? +]ĩ gZ$[gZ$=,@]j$~1N@2z!F:/OȄR6/OȄ e_2C zv] J $ J? `:`: 8+6Q' $$38Y'zxbPNo@ r!,{*br!,{*讷D9.讷D0.L.L5hֱK0 rrr r] N\}FSW$( 2{R *ZEEvg$ʷ)6m66K ڎ tM/a}O $0# i o%D o%D # }44 ߣ 6s? ^kQSr^kQ@^kQQ䜖?䜖 \ N }K輿sA $AAANAQW-LR1Gww% tr tr)8@L> )jfN ^ {uk91dgFӱ[*/0XN ( 5 h!60? #^1johdM 8ohdMmX (Ky& N;Zo9; a oD ÓY ŋJ C ƦBwP M1)% X% ȋx V[ V[d %f P%f b%ftC%f +iW i0Ϸ" <#K} ʄ>:!ʄ> Q`7 ̅PYt̅PY ̅PY S՚| ͟ 0`0`0` q8 hح 5qu?Vi[ ӈhTȱZ Ԕ.Т[,Ԕ.Т[K Կ#i28L)U Qx? O779Nb畊 # תZtH? Y;ؚPR Ҕ?ك {٩QaIY w; zDA "s]CSH*D+SH*KSH* 9LOlDl<,*Nl<,*'ݑCdz ݠgbߜQO e#ߜQO ߠ ՒN  ߷V0m߷V0mS߷V0m߷V0m8߷V0mR(߷V0mU t~) ]]v4Ƨh ?w5?wK"?wQfϧfϧ HȥB \o|MR ro|Mo|Mo|MQto|MHH["%j)s& `' + z>@5{$AeT! 発+hgqcGIqcGIQJS ~&QZ-~ ,s!L h5䡔R _ C1K$& _B b"   ]: (? ?:IɈRM] RM] (&RM] FͱSP$~ QU^K:QU^QU^QU^ uuR@h{ pE \ pE? Z,K r+p`KCr+p`'r+p`$WcW # ?))]S 3DD?[EQ ;0R ;0Q ;0Y#y`U?քkS*)8 >+`2 >*Jt>*Jt?@s˖N@V3;@V3 @uyɻA =$uA =$u !A =$uAr;o_l nAr;o_l lBLH 5B$?0B *B *$CYydD* WEs\h{Fb gFbkG]L]b^ G]L]b^ Ge E-vH8Wc H3? IQaJDut)K6g5AkN+K6g5AkKzfP5KzfP KzfPK Ljd M=;R<)M6}*hXQ+ )I RH| R\$=i c!R)}? SY. TsgjTz/ /TLpTLp T{@Y\ V/fV/f?bV/f V/f (V/f V!>D W-W% W;LzWv7K:? W $X.2YvB`9YvB`?YUS9YUS9 Y)k YGfYGf? ZB"Z^c] .@ʠ? ][[]\2Uv]Gjg ]{ ^~7?pRMpRMpRMD+mJu. ~׊X5~/OH2A|}:u i#}:uj}:u }:u !׀#5!׀#!׀#!׀#8RM?s9M?s9(M?s9rQj rQj b3vy?d:+y ~- _A _As ^3a ДJj ~ck~ctB_[sTwV TwVߍ4ߍ4d2D d2 To f%x/ %lgn X# , בJ: &5/P 3'}6}K%}d ޮ /)# ]OK:V~ $ kee #v,j_tY 9aƲ< (B| .3,?3,? !e%IRe%I36( ĤK }> ͯp rͯp 22 ʍxe R B a وAѝ c9R */*P} P} 'P}5P} ,!P} eb!b%&y + -Ӡ/cax/ŤCɇNLss S Ls8*X,JX,K$ϴvv  `Z6`Z6&`Z6%`Z6R `Z6Kh s d}$ٳ c O Oͬ TU ̶& ̶& ̶& @$L tҒ*1e: ӕE&Q C٧z@v>R=z@v>z@v> @ sםQ~h +-8)Hח̾ʹ ؃&՘o[ƪ%vƪ%vRۺ'Nt W]G J?L ݜsvݧ 9j9% NBrVy rVy yZ :G 0m~ٍ%OtKٍ%OY  )&ty]y!yy 'PK'P 9Q!;se9; a!se9;t cck@ aKaͥ(N ' Dx*DxSlRI*=AI*=%%R$2z5ý!2z5ýf2z5ýLWE0Y- (]Hd 7 ;U!7 ;UɏRt ( RPjE A/`XjGLጉ%VpI ӛP v-Z .èa.èRM|]?=M|]s2[#+9<?NVht1t*' Nt*'  t*'   OIOI{zW s#Na?  )f  HV~ 'HV~ 5;eOZ2 \P _M 11*&? gZ11? z@D%]qR  `󪋲 r󪋲 ,@󪋲 g󪋲 [&aTj[&aTK[&aT?[&aT iO[&aT \sI<\WsI<\W /'Z AsdiAsdOAsd! bFRC`@L ;3% BǪ i3bO{s 7Y 7Y? Z<KG Z<D? Z<  ^ s- ^ ( ^  G/ hh\ O-cR %s  ^1> ^1>C ֐m4K ޿"޿ HpR "x~S% a x~S%t +PSO89bK89b#89bf!89bI Q||=Q| a]mF]m]m]m |H* 3j|?Qn?Qn?X| ~ ssUABd ړ_kx (Yړ_kx|*ړ_kxh)ړ_kx iړ_kxs eb ebsA(#]L u>D"d^? ei=Z%?bpa =ު,=ު,oAms oAmj Q[+ JQ[+ Q[+ {{{{ J39I"eNb"}Rhf#9l_?% Tk a %x(FDFR%-Q?H%c%c %ފ!2p&mKmh&mKmh '(+q-ǩ; +q-ǩ; ( +wNR7+'' , i_R, i_, i_ .'s .c;s # .h2 /٠ c%/٠kK/٠K /楛 Q 0fC1o8K v 1aշ:]1aշ:D1aշ: 2r/2d@1R3(bE53B={|4OYΡK'4OYΡR 4DnŒh 6%ķh c 79dҮ 7V'cNu:?7('U 9 ~8sL9 ~8s :I;M:uzҟ m:uzҟ B:uzҟ ,*:uzҟ i :uzҟ : p}L ;!sS;̡R <ēoo<ēoG=L"ql!=Y*Z n1=wȊ>Z(>| ?.DW?3K[m ?Z+KiZ8?Z+KiR?+> A`XB(Rk -@BP!(7C:(" C:("C:(" $CCCDBK:&#DBK:F3ⅳ GRG.G;P=' GƇۛsHC+fIx|d RIX \ Iߖk~Jb{H\=J"S8J"S KÜ L) 0, M](M@: _M@:CMȷ ht N1Fs7R N:<(N:<|"NW\NlPsNMB{ O WI3KOs}3?](Os}3?P19/ P6IWd ^PEZ*Q q†Q q† Q c#Q cQN9j RkRk*SߘMa6?2SM Zj5SM Z S| T/WAA#TugT:{p>2UCTG1O U&O"oPURby)s1URby)|UWhӓUWO tYM8@.S [ aY[&9s?R[&9s [&9s \âL\â] ]1 b^ (i^%^F+8 ^˽݅O ^R',^R' \_Gߟ]*_Gߟ]#_Gߟ]S _|v_K gS `1HZqv`1HZq `p&K +a FI$a FIS>aGn{ b}^Fb}^FD cZ%cO"d_Jo4 i e4 eR g\aN; 3g\aN;jga{ h%<[N hj<:zshj<:zvh,/ i^ s jRdK kosA 2kBGɶulo+$(l hQgm# Ro3p?Vs p l}ep l} a>qFW$ qeş $.q̅/ %q̅/ q̅/  sM7t#эP!tp& url6u,uQ)u(uuuG۸ w! o'w! oL wR^iU wӷ0IZ#wӷ0Id wӷ0IS xXp xXp yBu zt? ze  &ze s"ze  ize  s{>Õ<2|{6k}bv!R  3^v[ *mj/ *m *m pDq6wK.Z3K.GiYR "{cni 5cni1 j r.%"KR |s."KR | \'iX aСHh $qC# SFc, #}*kRU]`V#]`]`T]0)1w9=4pҭ & 7 !7 Ocj &b=\svv "eҋ6 u'< g ͇V_ j E5@O c @k@kQ ed'a[ed'aWed'aRCS+C9Ȗ[k̘* >DRyU c տy Y֦# ;0>6 ,@g A)i ;d \v܀ X)S њR$ W g !6;?!6; ? |46gN  'ggIXh9IXh 4r\ ϖz66Q 3_] uCD YuCD iuCD uCDtCuCD uCDk %nsMpL$uο;ftkY :Mi z s 5F[  466! e466! k466!j5466!466!t466!466! )ws%+x+x2*NwSdadaS "9 [[/R[[/ [[/K 3榒)) 3榒)) Mr  Y9%" O% \%~ = 1 / a@[ dn}R L M&<M& ,.M& \ @Fw. $w. 5(G5A~?U/E1 6#xt >q[es"PNS  @-t硗Wv.硗W 硗W 8硗Wu硗W 硗W bo]k yk “i]vP–G5–G5œ- -yI$s $ yI$s UPĿ[rkKP+;d({ ;d({ FgL7-7- twtw OYK25n ֖= "֖= $֖=  )) ʮeʮeZ ̹Ɠr[: D *R垀N36垀N36`e` $J%B akh?祏_{AS{A {A ",  6F{Y.[ Y9퀆$ 3C2|L GQ@ (-oT Vx tqڞQž =ޫH?'A/R&? 'y5-{ p(2Wp?h(2Wp X(2Wp HTq  h e ".Lfjei gex $ HV)ڥc lJ?p<p<a p< P; $ o o3>e # I! \=yqvboj W?7 W?7 cmSQ , H ]DF H ]Y- _fs ꣂ? ^  ^  ^ , <8 H T H $> H ; H . H ,, H }B he؟ k> jw1Z* #'4*t 6iL _w" )}zUN\AYNaхB M|  >7 >7 >7 >7$ Un x9 tx9 #x9 8   rtX OSEِEɺO} ԨO w(D ]G]S;a.sC p/ D# RZ<# RZ< "$#gMw9$8 ($8 $8q$8s$8j,$8 , %F6Ͷk %yyb?!&x:#&x: (^?Q( }e( } )L=L *Z ( *߶jKsP*߶jK ++^T%+^T +rJ[ - fmc -j4R/T110""51rY?1˂P] % 2B $2XZܐ~t 2! d B2! d 2 ? 3 1?3qާvg3qާ 83qާ 3qާ 4 6c 4 o`5$Q5$ 5%5% (72i,7xkrw7xkr C7xkr37xkr07xkrj%8J5\w9+؎tt9+؎t : Oj: Oj.: OjR: Oj : Oj] :-s ;E ;1J ;eZ;eZa< T j< T<}rf<>ί<>ίD<>ί#= >jE?uUD>jE?uS >ҍt ?o ?o @b"# @b"#j CJJ v,DqC #DqC Dz81EMnD' c F8qdt FixG3{z # H$G{ IҘ: $Iww_Iww_ J-vLbjf,Lbjf Lbjf NE  ]OOsZ_OOsZ_ Oc PA; ]PA; P*&P*QRG-&R2I0 (R5  S݄ pS݄ S݄ Tƺ9`$eT2o b T} C TesVe2/ W޾kw.jfW޾kw. IX!7:qn5X!7:qnX`YIZF+UNZ [[[ e[3+\\Y7S ,^V(_6DK _~3jL `z8`T@R `kK\ a~V*:j a b=DQb=D$b=D bu cddJ eEا7 e>,?1e $ ff_vff_ EfgxOBQfVPQ/ g] ~HgGya hna hט^ $*hט^ hט^ i<:j j<Oj<OK2j|S $k ސ k ސ k hlȁ&KmcW\mcW\n  0n ?nR?jto?Ó: oDsVypV>Seq1^6stC9{ tL u, ZQu.*ϳa u= u׀^?jup ,up v>sM챥 w KO/ w('!NOyKԌC ycS {7[Y {aPi?%|Xd ~J^P{?(P{?( k` J?5^JO7 3DI sU!ëN &Yr||N||N %<}JE%<}J31w\ >N xLCQR U]e xu> xu> .D7?vR mzmzmz @![2@![@![R."ܝ V."ܝ \:."ܝ ."ܝ ."ܝ i."ܝ , G$i 6r*"1mӇ@? T#;pCcyd2cycy vN [<: Oewt;s0Oewt;tOewt; a [Q (7FD(7F  R v`L Sv`L R Kn nP#%t?o f ȫYȫKȫ$)A?%s n +{ -}" (/-}" -}"j %$y j&~4v(ҸK d)d|2 |ʜ:uZ1 (u-̘}(u-̘}`(u-̘}U,(u-̘}(u-̘} > JZЪ0Z*Ъ0Z*]ʒ% NRlZnXU@q)D 7 ,8q)D 7 .0 b.0 \.0 .0 .0 .0 g.~ ,Gs] ˥^˥^dd˥^D1˥^0˥^-˥^'˥^ b lr nƪ-C|L-C|RU-C|4-C| sr? !NN z#0vQ 59QXU E,{[E,{JE,{+v+v ,zZ Ĝ8 YƲWl7 ,ƲWl7 ƲWl7ƲWl7 G DžDoWb F/#ɄH@4X ( ɄH@4X = ɄH@4X əgM əgM DəgM ɛƾ x ,0x Ax xBi Ls Ls ^,Xnv ̅8#.v̩ QW5̩ QW5?P Së&Së SëU Ϝ;'M?#E#E Im=h 4Im=h a jdЧq v- {Kī {KījI{Kī ,G{Kī{Kī {Kī +y ! ҈AsQbҦ ,0 r нJ,ӤYB ӹZ_y nF rR4nF rUnF r;nF rnF rRnF rZ nF r  lI$^ L ֥pm˹DK֥pm˹P֥pm˹ aY g;N(۽fBs]'@N zavjkLLavjkIavjk ގͤLޞdAP , r<?ߎjV>Zq(h}6͓ soҦ_ Ac[? "[s "[ \ 峲u/O@:O@9O@ VO@'O@ O@ ȿr#Mt+,^  a1 ( xӖDR }3Zk>  fR%! dIKdId _ JF#JFZDJF['JFS%JF".H[` (j+( i Ğ5,򺊒~XD#򺊒~XR ,ttC^) C^)  8 8 D8 !r)~r)~RgDx2 G$%֛` uo_] w A[Do va z j kMlF܆ Ea li."Ⱦ 3h1|%pR* eM ($[1 7OfŪ7OfŪ -7OfŪ 7OfŪt Ut(:(:sI{/ {/ ZZai@ed0ۄ(sP˯u iP˯u ^,8\? 4e 4e( 4e! 4e jJ8 ߛV~Br R7cP a- R$y:XYT+Oy@vO"`O"`yyySy yL H i,Cyd_w# ,Qڄ q0q0q0pq0Oq0L~  dI sNS 1dO? x@_Q <o: e! !me! e! 7??7 6Rn;6x>=hb.KM=hb.?p h8q"I!x;""K"RNzĉ'aNzĉ'S BJE % =% |% % s È@kÈ@k \g* u!3{A7>K!3{A7>3!3{A7> ,!9vd \!҆Q$"?IM "?IMX":g(#[@B  $2#[@B  #EL$J:aj'% g a;ޢ> g ,<;ޢ> gj;| <-F:><-F:(<-F:R<-F:K<*=8q p=8q i=D&x >c=Z 4>c=Z ?>7 >՛&j?D蹔 a@0|'2 @֞;u: B0%SCCZR- CCZR- i}CCZR-t"CCZR- "CἫ MEwuػQF7y aF_[E Hӹ9H*9 H*9b I+TIb-| Ib- JKq J#J J~gLK"U i:K"U $L@r3dMÐtNH J c NO?NOR0NOjNGC e NGC a O M rO&_O,tB O 'P x ^ QL(fWQg(_4 Ri*] S)6v%Sж& S܄qI9IT; e T; T_P$ V]5 JZX~勧 Y j Ym{) a"Ym{)Yv!h'Y c Z8 ZdJ!K \SEX \šy ]\ D ]>ݿ ^-_^|FV _7w|t `s c#$vc#$e6B e6B e@Oe@OD e@O eNi$]f^VdUfj lb!fr?f* !gZ%iV$Z' i5R i׼%@[ iWH ;kqy l̺86 m&s+: m/ v&mh &o mGx n{VAc $pAy<p97u@W , vRdvwxKUwxKU w'1@9 w'1@9wTy^Pݱ wzآ  x׌{'x׌{' ( x SyKN? y޽8 -z||[{?{ |8Zv B}GC }>?] }5yέ?~i>  uLD>tD>sP^Z] b 5kRxOo1. 2zw ɂ'| (ɂ'|ɂ'|ɂ'| ۓվ-LLgٯ8 aD93?"sGj }X|G@Dv/g>A&N/ `,RxRxURx]>.;>. >. d- jr r 7? K PUtSURUR mJ0]C <B<tB<kB<KhB< YB< ³  N1/iTlb$wC _!Tc_!T${0:'R%~ZTix`9ow?GtJjS< \0ňolMf ѼѼ Ѽ dd@{I^+2*jS^+2*1^+2* ,.w&ǚ<J< D6Ǩt UQq ZЅŽ - ZЅŽR b[Ws *b[Ws?b[Ws ib[Ws ;' t'1D( 2|PF2|PF 2|PF 2I ;z3D k%d2 '*ʹ i$:|X*ϲocO \SO \S iW D %ȱvȱvȱv%=* j*ܢ>ܢ>rP>X H1ΈZH1ΈY;BB }I2 BŊf n  !=[RC{ icaicSic Ze?v??v 1?v ǥNOu䩃 %{Kw%{%{ Xu $_D _DR_D {-0^?%,bC kjJ[kjJ[ =kjJ[ e6 B"DB"K |W9; 2 NR2 SL8TSL8T \f*?,z"S,z"[ٽ?[ٽs +څj 0 6 Suv׹y. (׹y.Q(j ȗGl % X&1 ?b%R@c̤78MPAR6L[9fk'S a\7ZJv&QWQW ,kGUdPkGUdZ͈щ B@k̭aeׁ[̭aeׁK 9@_u ,λ5?] (|* \ }M{w3}M{w"}M{wS}M{wKؾj0>:s $ӈz7_QZTa>CIRa>CIsv ? O޲B<""O޲B< O޲B<t֒\$D+׌䇜gR DX[7ZF秔Bxtk 5ۇ*T v۬O۬O۬O ܑ'ܑ' ݢv7 ݷF8,[ k( /R7`CG">P_G">P9NZ 7{{7{{jm= #C9,dw- .fdw-mFdw-u dw- dw- j#v?j# #j# \" \xr%YR$YCYYYKY  ty?`ˉ `ˉ Ugo $xv$x $x $x $xoWXCoWXoWX s .~R.~L.~ V [ x,t kL^?0{ ^x5l a2\ K+u}Qy Ip: {D3d$t}3/ q#[PU >Zjj*@6 #-K:%Tc WjY`Ǿ] (C^Mj _45&_45Q_45]_45_45 핰\ 핰>:t $ <PiE |י|י aP !lb 4 R;? 6ZY$N#}9 / -?Oq -?Ok  T ,9s؆-< h2ueRwI$IK?S' $ 8h #mX r}r}f f 1A@>B ů jW?lcH* H4| H4jyg} "<>jR QiX)g"7S "(%"#vhˮ?#vhˮ $'&%[Ԋ?F%[Ԋ &&&&?&d&V{z c ':v (Ծj(w#L6K9)7b)7Y)7 *T`0V +I'Z n\+r{,u[jo ,HR->U $->U9->U .b~+Dy .yM0#LS1i 0Z.t 1~^Rk1C 2B 5eX Q5& yQOL5Nl 5Y5G j6:> E`L ;. ;rGT|?;" ;sVt ;;NfAC<\eQb=* =}G >ǁm >? 7?1K?r?1K @8՜ BSFP BO DBO $C MA CsڇCO5k D|Yu EWKo/EkQ/sF>I \ F`9E4>F`9E4>F`9E4>G 2@JG 2@G 2@XG 2@H7_  H"_9  H, ?)If6ӝ4If6ӝ ( If6ӝ i J#u >kJG$7 KP K2 9<BK>p*,k!L/?*U L/?*U? ME n-NtieKGP۾-? QZ}QeQZ}IQZ}R,SHA3`Tz'7Kj"Tz'7K TKTT UC| V Ymp?*YtB3 Z*|vZ6"K~M[*+>R \/aد!O\J3d=l< $blNHM?"bol͋| + c"5Z`[ c,dIUsd£ dʭd0 ekYf g967j*g967 g967 i g967 hC,rhC,%h 9 i@V rkA0XkA0XkA0XDkA0X l!x3n"-Sorb[[ p$Fp;|z sDr ,w g u 9&u_u xtg[yoSyoSyq 7S z\d'R ze.ze {oۮ|{oۮ s {- {- { i{t|4A k|4A t)|c _ }/} (}s % sݖ -ݖ?$ݖ a >~[4a5Jlv7Tlv7TS } ,} $ ]Hs#Z]Hs# > =!>RV_ $ x^ = 'Q`K5Q`K 9uB  x ""MG  ~@[ ʺ9k5p{s ãe"m~⻳X ȄGv֘!fmhp\\[*5?H< (kH< >H<  H< H< H<  ? zs ,0# n-pn mx0*mx0*m {[k"c /}JRll Fxte#/.Y{b cC&W#D[X PDbPDbKH hYHvuR#1/v |9 vg &wl< c_n_n Z߉Oh/ 0QtL FAv ^h$Y8og]; si^'H/uwDS }K $}K 6F I6F }ZJE"Kt cl|Jcl 6xL.?.? .?.?.? qSk i`:@? {, aԘKԘKR 9L  9 AD|BO8w"5L \l;  gQSn0W/d){ ?=2nfh.oKzh.oBh.oOp@Mmp@Mp@MPLihpsp %.U@ .U@ .U@|.U@ $^d$^d;$^d: >ú?s?Jֈ\ &( |V }n XNisҀ(ekz:7;Yd cBflRcBflR]h6Ph6Ph6P -͏ɥY-͏ɥ#:& m , _$j-k8mOd Ek8mOdk8mOdrX !fO :w E[ĔBg$ĔBg7|luS Ɓ*T  " " kr j ʐJ9E̿0h?$+Q͆r$ΰ^xalεo1εoǸR {b~lS{b~l.׷=)׷= ) f 9S&I 9S&P 9S&L >3J h\S ҼI*>Y $*>Y *>Y *>Y iӍCJtԎ!It Ԏ!Ij ʚ[̲S? )&|JҸ&rJҸ&rQJҸ&rC JҸ&r JҸ&r St;,J , ?O?O?O?O?O?OO?Od:?O#?O?O?O?OQ &zۻ-N%@&et #a'\ێ!?aj12N"? ܳ9ք! ݯvRl\*1"v $1"h1" /1" e'1" 2zYߙ+xݑ?Dǘn7R c22P8^ 4xW8H $ UPiUrKUPiUr-UPiUrUPiUrQ 4\vD)"D)7cD7cBgt퐗\h5 qURwkh b h巩v h巩 .hVs߰YR鏞eR${N N4!ҮS+ ,~~e s!~~e~~et v*`^O`^O`^O = (= (,  {v+ ԥ+2 % ѵevI5vb_/ I, ։ E]=[ r{ݻdcdcCdc'A ,>>ކ s>Ds>DDs>Ds>DEs>D!s>Ds>DQ ʢ sX<X< G% 'G%)ar| T t,XzI|4XzI &XzI XzI[ &[ll l ,٠B]٠BI b/ Q D $oy |@nv ` i `j ?xH,4 na l6 ö ö wN ȧפ 4@}0? w=1 4 j~1 R z[z[ ڎ s Я3K [>U e*oJk*oJR Q VCQ k ]S ,>=r>=r K9!X?UH #UH # sHsH&bԚ *&bԚ }!6PsòòSa" 2(%2(%2(% -;7.   $-!@M^q!xWR "Wwj#'Gvx#'Gj(#sd #$$%,gQ $<i %=7qU %Dq%Dq!&YT# A &YT# AY &t6k+'Q [?N(YA(p̐| (ΐH kf*jS+f c,E7I,E7 A,E7 &,E7j&,்] - AmL&- AmK - AmZ 20Z$2$R3k Y3[ BD4$X]|4ou%4ou/4ou]6 j6 " 7 r r7!U57W582.88h88'889 t; `p ;Vy1>T~d1?ޭ0@@Aܟ2Y @h;@h;@h;*@h;!@h;!@h;@h;D @h;K @&f@&AT(`OAT(`AT(` A\f&vB.m sD,o:S $(EmѮjEmѮYRE؏7AU F^~ FPF GLh3Q*GLh3#Iӝ/(I#Գ( I#Գ( I#Գ( J*R /J_+&m J_UJ_J_ KxYKxYZ KxY K}#boM9+QQyR"Oo[G,,]k P(RQsĬjQB_Qifk ,6QifkRlRV9_2!R`RS<ZSv* Sv*? ThULk? UcVDiUoC. #Vz`k Ws YVI_ YV(TA| Ygvw. Y즿rL YYtS Zl Zzv (Z̻<6v jZ̻<6vs,Z̻<6v i[ e"[[g*|1"[g*|1W\!VXL] U ]KoB $^cB ^nI>5^tcQ_kÉs_Y0N_Y0_Y0 `#u`#u a4`#u *`#u`#u ,a^6dajHa ,abRDj b8"z? b Ibz/ cJJ8 e!*sfV&fVS"ghWR ggw ii)  | jCMw !l͹:.Nm: $nT oFvh'oFvh' p2>p2>p?rpQsF-dpeҰR q3K r` rb-C? r87jr87r87X)r87t'2 tAb ut@jS , v#swC?/ <xkۂ7xkۂ%xhdL3ssyr7ޠ yr7ޠyr7ޠKyr7ޠRyr7ޠyr7ޠyr7ޠjyr7ޠSbyr7ޠZyr7ޠL%yr7ޠyj zfЍq z k  {=",< {ZR{Ĕ3?{*ٵv |{;}n)@^ ~WLa- ~#$/af;DY2 ;DY2 M#=M#=LSM#= ubb [mCK 0#{ #KLX -ŝ+HRYP ' ' i 'j\hi ,6S;&7YzR5a/L%TT; TT; U:%s U:% BqI BqIBqI iuBqI (4BqI BqIt9:R RbAQ WTBTR#t |dtX'$tX' +^ +^ +^ ;sq ߳;7{3?l c?l #pN9P%O^ ڄߋJI*!&CHR WW7W+ݫRݫݫU-|Z 2# +$<(fsZ 16 ?16 /ӳ5v !   3__x_xKv  /xj7 /x m /x k;@. _p^nV &aC&a 2m_%i k{sdU/bU/tPU/ :U/h 7*.?֕+[֕+֕+D`/t(M5 ][ .HE%|U$Rl 5U$Rl a) d F`0F`&LS  \PNc5JLt\M~t\M~) is i 02&0202302;r5@ \;$GW)> 7! e(?1khXsPKNYPKNC MͰNMͰNQ {H״,{H״{H״ p0S :=6` wt wj Q+VS 2XN WMqZ67 g6767 $ Δ4T -VD-VD f6#do 1> $_ʢ_ʢ& ±d kp.kp.?q(ӑZRÝ%ϡ[ϡ[R f, /:猡/:猡j%/:猡 (/:猡 /:猡 $ Ļq #^r   {@ P ƋAݣ d ZhǀC حv[~ڜ?~ڜ (1~ڜ ,~ڜ e6vI Qxi #wdr7 ʲݼ $fʲݼ\ʲݼ ,ʲݼ 3#d/L#d/Q ˬήoҍ%o?%o yq Z sKuLy~ ҕ3 k Һ|Pg+\)NL?\)NL |eAt 3` |lRv(+h& Kk aӾaӾ ,Blv?׵ aPD٣3oS E\5.?n3ny11egi}ێAנaܰw\o=: w]4]w]4 ,Ə a Mw?=Mw q e!> a< GR9"Z & Hh{#5B ,/5B &5B 5B % $]dj7]d 6xӵP:-O; (:-O;t:-O;s_:-O;j :-O; i 7 ND? Dg ˜b + PZ+ .~R $LF>T1 X1h.D.D. .K < l<?_u!`$\_u!`Rhs L>DL>d_lLi9UhLahSsFEQ +k +宱?V +宱?$ A>h 0Qj* 0Qh 0Qb qI ;% 2xMʮ# 2xMʮ$" 2xMʮa #.D #. #. { pы2 pы"y.[y.[ y.[ H ( ]aĀ" y`r-"mPՙ[NFڙ$@b%]JRDĉm3Y\$ | *dt,RGtXAT5Fj ˯W?&;  M[6 pM[6?oM[6 i4M[6 M[6 n ̪>WbP̪>W̪>W̪>Wj̪>W ̪>W̪>Wa̪>W 4̪>W a(̪>W MEc+ i%X 1oR! xIǭsb kGz !Z< ӓ !zh ("v@TiD "<ޤ^k:"<ޤ^k "K~Rf?"gR#gƁN\ # $U Mu $U Muj $aL%^ $%Ǿ&7t%gtf&͖ &Wk &L;&L'8K'8 'e𤙨2'e𤙨S'e𤙨'$SJ#'$SJ'$SJ$( Ę:=Z )<[>3!h)EN$)EY)E )$$W \ )[Ϊ ()[Ϊ 3)[Ϊs)[Ϊ g *M*- *Ejr (*Ejr| +]S~ ( , N -93sb-|rt/ 0ٕ 1v+9 2υ 2=C_:2=C2JRO 2r|YRO2r|Y<2̒[3Wq 4A/t96og{6ogV6ogRH6A 36A ( 7\ & 8ՠ:YgL ;V'-;V'- ;|N(;|NR;|N;`a OC ?WD?WK @8U2" ,@8U2" ^@8U2" @8U2" (@ѷy\b @6@6 A I A;,P A|#! gA|#! vA|#! \\CqtVsCX S{C[tg5 i)C[tg5 C[tg5| D )_ DP UFuaEG6\NBrxG<(%8j Hw} YHw} (Hw} Hw} iH>. -I IrJCRh?JmJ KV? L.g L*s/M,¤1>M,¤1>2M,¤1>QM,¤1>M,¤1>M,¤1> Nzˆ`NO 27LO8шƆDP?Q&P?QRcL+SSQ|S)Yh Su` T )E TP'A<R U]v\ UԳLI( DUԳLI(?@UԳLI( \+Vj2eY"Vj2e Vj2e WFW< -W  =W  a Wͭ Xx:X3ez9K Y +[&kY +[&jZpTh[#dQ [.w;>[.w;v!\-2fo \> m4\> m\Lp]2iR^#6 ^#6vj^#6 o_5 _A- \ ` 4rn/` 4rn/t.`x!މ aj'Ia`f?bCEeA; ,bCEeA;j bCEeA; dA wUh dBdB c dT xOdT xvfpШ7 fpШ7? gO_ h[xR hoZh iF%=xN iG iCX j] #` k"5- l%c e3l:S͂N m1 m1 QnÍ]nÍ nҰ@Pvn҅7orhLbpro* { q)?_q)"Mr z͞*r ? arPtd ,rPtd (rPtd a tk7 u=GyT -vR|7` v "?w!B!Xx-ϗ "ysdL{>y ]"y ]$yG:s `|o^vl| iw ~X ^P{>({> {> {/xB ""sp  CYKCYCYQCYCYl  k*[sjvY KM:TK2 %'4v$%'4 ,~+j)\ I 6Is qYHS&EƢpCڰt"ڰj v \AYbf\AYk/\AYt3?" NWʁS e  , l4aOG~Q(8<ჟL?Ha%t?'up"upd(xwCR X/o k64jG;7ht ) \#O{@;]TKf ~ Ķj bĶj FĶj #ĶjtĶj i(ԈbfpԈbf% #]#_S d*= a g^jqaQ r$ʬtr$ʬwnҤt҉xw i҉xw 80 yfT ]{S W&wVY"^S"^5"^K"^L"^Qvyi+AnY rnY fnY a  , 8s */q-g,Pq-g,s:d8 E[] ַbRwo]N C]6 4 )77 ,chch[Ud o:Ko: d9 S"Qgj$3yȣ,s( %a? <&"cqP _OXjmɨ}V}pІQzWb~ $*{G8/Tsa8/T?~.²_R%΀-[΀-[ ϳ% J : ۜ!/'gqk c t =L#0Xih X ( X X `',Rp-| 했 N&Y N$ NL>5R >5R >5R aV>5Rk*>5Rt%>5R %38#38  M  'Jl9 [Jl9R"Jl9? M1e`? `s` k\ !k\ k\ k\ ] ԣWYunא?2-I:?n.ρCD17CD1CD1YCD1L7CD1$CD1ZHl8D'"9?vnBw;vnBwR#MmF݂ a  8 8| \| c=: $: , ʹ1! s!A垝 9F*K& p.ErEr /Iő <%C#f[&e;u"(a d , b5hX ?t' 7ۅjXR  cTXr J͌L }& , نھ O xXA{{ #/R/lbv èm6{H 2 A ^م 4 4j4 4 4 , gdaϲ(Ё9 dh.R&dh.K dh.$Mdh.#dh.SkFxmb g 2 {;.{; ,,;< I ˊ ,.I ˊ ׀ +b R1 ֔^ ~sRD ^~sRD N~sRD|N~sRDR$ .?.j). (#8A뗐뗐L xrF%xrF%@vx%bf |8hR .9q |; βCv2ؿF K!X% #pQ #xH m#0$#0$$&'v%[eƣsD-%[eƣs%[eƣs %*|ú&,7:'Gz!t.'ʽ( ve,)FU)FU S)FU a)FU ,)FU )LM)LM)LMu)LM*kP/]  +:3'2ww+lg*+lg*+, ,Q ^,Q -Kk?J-Kk . Q g] .>U /kس)P[ / Y E/>CN/>C/>CL />CZ 1<4 I[1eJ%a51`=s 29웧GU#29웧G29웧G2E. {P ]2fWͷ 5 G5lt5lk6=ܙR86|t 6g`+ 7\N27({7$@$`7$@$ 9;pA  9TT2;K;opv;vd =Z#OU~k =v#>U + >F%">2; ? @#ODMU?Q?@ aJ?"A?>j? BG$dBG$V BM:  C:AGh a CE DHj R,DHj R,a EɃ ߌ F{L #FϼvH/Bs Hl?Hn$HnHn I]Njg$Jd [K5Jl} MDM {LO~J 2 O@" #PWRQ/aQ/Q/ Q/qQ/ ,cQ/ (Rӊ RK F]L/08 ^U?;<^U?; (%^U?;^U?; ,^U?; m `o8 cc (Dcc 'cMR5]cMR5 d#l? d(g`2 d(g`2kd(g`2 Of?Rhg1 \hpc Rhpc$io&jOZͣgY kLkH k":tltl2#m9?82Z m;XnB%j nzL o#M ptNpuY. pyW&pyW& pysp13Rp13Qq~6B c r rE}7[cNr̀QE s1 N s=V! t09Vt09VQt9C7:t9C79 uID uI uq<Ǘ u% wr"uR x.{?yD:H|]F~ }؞Y }؞Y ~͜17j"M#ƥ=? !  ymS s ,7,P3,L - r7ԈԜ 9ԈԜt &uS  ThncM 4 UحAK*(i9jQ UQ ?-< m4*c(1-v$P?6 Yh;|VDh;|Vi<.gvI:;?1e 2 J_>5j Ą7F zQ#r*(a 2 z\| % V8JK_ryGt$@d_ ovSC }l }lh}l  }ls}l J}l (8}lj4Y@4 SZ4SZK .~?)WyY >>Zi^R( e7.-dVv PM+  #>;G M4 vsPNmC ew8T!w8T /{ 88Y[(AHΥ @"sT{@?}a "| (ż !_CYgM cMsb}jټA 5"5"R5"?5"^rަRfN#\? n? 0U뻏uF, >]C4>]C4 R< \ m m {$3h6|7h &F a (ۃ2k \ u 6I%6I% \PR:#[6!z^HN9l+;p:{ 1cQ .&{2 R9MaR9MR9M$ R9MZ R9M #^ }wOE $.0 dl x4dl x× × ×9xS>9x)9x9x 9xP pK # a b0DYb0#b0*b0b0 ȷL  L R 0.ZJ?0.ZJ @=vq@=vR5c ԁJ Ծ}$ #!m H_TH_TH_TH_TH_TQ ~ I ՛՛՛R[ G Mנd ؕC͉ إd}j [j][j)ycn - 9b]v9b]9b] ~JHҟ ݈j$݈j$ LרU9x%| $ ¹ = xmAzmAܡc ((ܡc ܡc $dkdt (Ue883$3$ ㈛T?a:xxX**xxX* xxX* i #粴D @̷zxK@̷zxS$,S#1qv0"yTZ=X0?g**?5g**s .:vQV3N e _V ~L :!$U:!$ 5b8 DYGNtJ:y < d1 uәr;l)7;l);l);l)eO' $#eO' eO' *EMƄƄ Ss(sY_}M* _}M* a:_}M* /;{ U SAdT_ ,N2~ hRz2~ hz2~ h2~ h b.sm0k ${Esi g " &&ga!NkkK NcN{ m 'qwn% Kn% SC?DE=u u9uR)uu yYR Vc VcjVc,V?$> :ѭ:s_?蛭Jf I֥t D r٦t<; hA  __b( f"`7ƙ) Q+J Q+J ߋoAߋoPߋo ,.,BM'1$M'1M'1PϢ{hVt>Y &vi (k e /9',(M= aaГ!CГ! O1> `~Z`xn "1H[#kH[# yH[# .H[# 'H[# , H[#H[#jh|2V,D#ߺgC +s [_ !!р  ɖ1f!}> "Y6 f@"Y6 "Y6 "Y6 d "e^auǓb*"e^auǓ $,/ 'u/'J$ 'J$ 'E1(Ճ:N!*V/U;,PLˆj,PLˆ j-t&9# .#.#. &"Y .߇+.߇+.߇+R(.߇+L.߇+K.߇+[.߇+J.߇+.߇+Q/Y;lL 0w1D/0w1Ds(0(Ӊ Q18j 18j 2C( ,2K{2K{?E2ϵwFR4]~R4!;Y 4"OgaX5fD6Vvj@6Vv 6Vv \ 77 :\ oDž vCd w#Wи wA#GwA#wwDQO&x ^Q* 'xJx* xg yoaъj,yoaъ yoaъz*Xz*jz*L z,:U{uTly3{uTly {"q {q {q e {M#{M $}6h}6h./*wl./*wl sp Ŗ /׸{7׸{, ޼}a:x|?M/};*#L=K`#L=4#L=L ;G> ]d{m|2]d{m9 u [.`D~ |)U||)U ( D'yx ( 5}Ζ 5}Ζ a J q # @ 9 T\ y+*y+*_ }6 #LZ5<LZ5< &$ \ EPϣt~Ҿ a "7 KԙN ϫ a 2S kSҩ'*D hXDzJ ,DzJ v=yjjIy.IyQBZ1W(Xz \ŪlŪ6Ū#ŪŪdF" s?ZwZw  K   kF t8  ($  g YKYP,KYP,N^(N^N!€; ],AH2BJh ! (~-g?۞}{!+ {!+dь2|bׯf l%ؿ9%ؿ?M S7\d G[ G[ 2jJruJrE5zYK 5zY P퍽Vi 9lA7ms e;: c'!\ht3!\hs V܍ f|==F$ U, 5F 5F i { 8zN@ȫPu@ȫP =@ȫP ́T2 b~"}e $ 뼐?4뼐 v2s~t[ MF @%S@%Sj!@%S RD2JYu s K!ktfsfY%fkI+% fv :Jv0PrvL Prv +7~w0S 9P{ [|j (E[|j , [|j [|j $ y :D<0 IC@+[2Bƍ…Q<…#…33 a/8A6Df /8A6Df/8A6Df ( /8A6Df 54I@m&IjqIjq])])SkpPľ&}t 9Zk 9Z Œ* \$Œ*|Œ*Œ*Œ* iǿBXH O7?H &7+7+Dʗ7p\ʗ7p\ JǨE gx ] XRN) e iQqOR ̨q,_/̨q,_s a, #'W+ 'W+ 'W+  ]( $Ν7@ ,ДД]ϩpQ*UU]* [5Sj 1KM 1KC:upv1RwGsRwGbX &&/{)t~h?Yf]&?6L]du -N%=OwCD ?^/7*L <L"&? YY.-fd~D  f^v f^v f^vQg f^v@ f^v_ ;9MS ( j@? )     O "%ll"! %N [z} vcV vcVL N'5  ,  a y̝z r RRsB RRs? RRs RRs s E!wc 9i #4o3 4o3 , TeyTe m4I}{T R)t4 t4 tDt4 Y2|8N=v |8N= %|8N= Ҋs]Ҋs]->TS&P *wto f[c.$VV(WI?-(WIjC>,X .Y&K4Hz FMftR oP oP G1[!Zt5RhS3 hS3shS3hS3 shS3YhS3jhS3 g]Rg]K!C6 j!_Ěs"ae " j'#~lYW #~lYWk%3ut%3ut%3utK%3utQ &`h*??&`h*&`h*&2&2' XMe[)p+fW #)8< ( *^Dk@?-{ C1DK $ C1DK F'Ȼ"F'ȻQF'ȻF'ȻD F?= FUG\oG\o G.+ GLRqGLRqGĦ iHDz<ɁHP4~jdZ Hm<p IߪRIߪUIߪJukgsJukgj Jukg{ L DNH[M N DN P4ʪLQkv h9 R_0?R_0 \R_0 R_0 R\$9R@ ARwrL SSWX Sf`x TqJGR/TRTK T T\Lle , Ul:JUl:V\f .WҪ|WX X-*_hY zI%[˼Q[͙S ]=B!Cj]e"4]X ^(+.^(+.R3^(+.K-^(+.Q^(+. ^څM] _M`Py s`gQK `gQK `E , bacN%c cW}AcW}AcW}AcW}AYZcW}ARacW}Acw'@@ cw'@@t c.'c.'Kc.'Qd͆5#S6dgO*e[a@a  e[a@a ed fKĺK#fKĺ ft)gSbf  glϱm 8tglϱm 8si: j.FNMj!2V sl,Mv&lH;Ͳ(lH;Ͳ(wlH;Ͳ(LJlH;Ͳ(lH;Ͳ(<lH;Ͳ(]'lH;Ͳ(lH;Ͳ(lN]nJz mR=n4mZ[jnL3 -nU䩳vn^b0 +nt~ nNFW ,'ntWs_ p9+iA pHyRE|UpHyRE pO@6h pr p+"W epӃD rXE`ˆ$)rXE`ˆ rkP5 r15]4ru<Tru<[ru< ru< ssyd s͊ϡ ^tP̌ktP̌tP̌Rtbl?t|t| u cp$vP,_LwK#;H>x-TN%ZxxE po xznT R4x`Ʃy  y`.,u@R zD٢t.N,{ϣ%|7K |g&u6}ό }7>N:~^^'~&ݳ~?KEǙv,~S>բY%? K|osN) u@#@?MY&qY@ =dL@ =N#rUxE RFR "RFRFSnRF0RFKRFLRF_  T.Vؽvy !.Vؽvy i j t L5 >IsB #_>0Ӯs VIM_ ?jb* .Z{49BsLꊚvs wt:w9%ЂRJ sD$/SҊN: Sgx 5 FKz`&R m m :W=2zp * f|'|ef|' 1Ef|'sf|'   D~J/3hSP/3hS /3hS /3hSj/3hS d~( cV?mִ7YdW# _j/%^NmD a&=/PTH_)[$H_)[Sm. 4 D D i \:["S& ( l>K ʱu Jʱuvk^DƔ"-^8 +z8\qI h8LRGh8L*d sjg? :a8 wQ 20)+ w1OfRuw1Of$w1Of c"HG 2Ȫ_w -}d~NPl]w}N Ll,s?V,s 7,s q' gDf&= eDf&=h|Df&= RDf&=9Df&=+>?Hӓ ,jR6ȖR6ȖKAR6Ȗ4̓g/_ZUse^ `Un%~KͷFئ%c͘RG%c͘,-ӍgEK 'APWBN@ $_w4 4 s %>L bfj >vp$ jѸ4"|rdc2T;c H g "Ks"K H H sAH ? ݻ?hKHVŃ &P7 #j K"[ayQ)yQS_PY Q_PY 5_PY _PY Œ0 Vή} AdJ $AdJ w3$ %NjU&N $ǜfmu@nv # /zZ${Yw?  "jV9YDSqU ΁1d/c[)dώ՝ϷEi ߁ILCR>L ){Syіq)sіq)R{R )m+" 7Md$s Rd$s?}_R`}_}_}_L }_ ԡ y{ԡ yԡ yR 6: 2d2ds>2d32d (12d i2d 2d , 7t. 7/~?i֖)g. ֖)g. а[|sHaHR tP YMSޮkJ s XkJ߁FR߁FT= ڱ~ڱ~ , ڲ%: ㄭUdVQۜl? Ͳ7 `{fx2`{fx bK9 $܌C= ܿ&={ *?9"3 7˘ [7˘:#w< g%<ÈFX "GΑj)od!) dݾpR _ ;[( , [( [( [( C[( 5[( ()tYwktYwt Um" c3Y sc3Y |3ЏǴ:l  , H, Ͳ' ΄Y-zWdY+ʾ a)w{$fE d1 ,-rܾ rdJrdJjX yj b`E RMUuC c k! :!)QYc f sD aúc % ^ 9H\+9H\[pb$ gģʣ io'C pX,M Zd ,SX? dt >QS?*pMpH÷:!V?\zVx Vx ^QzC c\N?rhN?k wL'RRsP4@ D?Il?I , *i?& -' `S@;=a 9z[ ]f= (]f=r,| ? !M-/U|Krsmw :m:; ? s/ ? ,  p+S? p+< p+ p+L j1 j1X j1LQ j1# [k" \ ͽt$ 3{j c`*"c`* : ]ZO]ZD]ZQ']Z]Z ]Z sP>K! vN%_nx5jtR #{ - bm+XͯnP3 %! 9Si ] &uL? tdk|?O|?O|?O |?O *Dy Dy $M!  Rs'M /o} i]/o} i,/o} i og@EKwGwGwGS{g66U6KWl]eWl]eR Wl]eWl]e A.z! q[x !0R#fJF$ɪ? c%kC%ˡnSCY&L Ft &P@ &P@ &d Y*'bƉNC'bƉR 'Ucoi 'l)P (ո-WR *6#R *oY~*oY~*oY~| + h ,6q 3#,lUѼC,_k#,_s,_-, m-w /toQ)04n "1OzXu 3!VBT3EXek 5<ڦ 5v/ 5yMXU5[q(D7t5'8. >Z4 >H ?9|N_?9|N_ @0bΣu @0bΣu @g8> i'@g8>t&AUB& Bnbv%BnbvCy{yF"L DN!OD;\gD;\gDb&/P=2D:.D:F/J\%GF. QGF. tGF. nGF. ZGF.j G>ɡdG>ɡdRG>ɡdG>ɡd GA9S H}=JLHȊٖ ,I噵'<I噵'RVI噵'0Ic J7 ȹ 4K9iLZWN97 P7 Q7@ Q`vT|:Q>*R9O"^ ,lR9O"^>R9O"^3R9O"^ R Հ4S m}iv SZ$y" Sf]Syc/Syc/ T#A>[UN TҮzK T(α U8+6H?9W "h W "h W38XL#"XL XI2^vY ._3 Y ._3  Y7JvYAt [+C [6Z [6Z \Mov8 \|ܠ^ ]  ]6Ww i^*f2D3^*f2Sa͔s bo2bڄXajbRbgE#bgEdm| d? (f z f!Y Y fOeBSg;hSp (hSp , hSp i4]? jVTsjVT ik_ڀ l"G l!hXlT{&mGv%ٴmNQm:/b ox?`o9FaVco9FaVpOڅ1X!p lR wqDgrciZAS s {!yM|=mab 5|Fϓu; (|.J|.K$~'ZZ ~+ ~S=A~S=A ?W5o#^'v8'v] J#? 6 sY  hk x |.RˌN3Y , Jۗ ON?$wwkSN a`h ՠFeG #~<: 7 jXfee|, eCB+$0' a ܍[?u0Q!ﺐT k|b4ܦd, Q [#2(=2tHWv rOZ  & S/U%vU%qG?fFqG?fqG?fK %aqI = ?t= ?t= ?s = ? yB[ T@N!GP{ok #9|#9KZ; #8- #n] ZT6vj2 Mj2Kubd <<n,w{#A \)f.?鵆4)59"?2AR ZbD|lIW;Օgʖ" kj" kj" kj l$k(f-gf- 3 @f a/3 @fɂe.{={=A{=E  $\ " ,⺘.⺘. S n ~ a'M` %,d(pj,d(p2iwvU,iwvUYiwvU iwvUj 8H FЩFЩ hd Y ,us $J- SG qd "Fs q[+ "3pq 0F 0F jG ,*ՠ R 4j$ޘ?CR6^R\;/5 $ Ɨ w52 Ɨ w52 c WRbngUbng  Ȭ2&J jȬ2&J ? ɨ 2?ɨ 2 ɮ/-nɮ/-R*ɮ/-K ɻvf! /=LȍN/=LȍN@yʊ52NDʊ52 zyU   {, /̢[D vƒ,Wts Ug/¹<^ ǣ -q$ӆ5HC =Y &Z : -) ׵C  T : z:߼Ԗ52 ߼Ԗ52L ߼Ԗ52f Qۗ0: TeTe!TeݨI *@ݪ4 =ЮBia \ӭ>?&\ӭ> ߚRga)|B(|f|]219HY ˦GU c =  >󉜀S >󉜀 >󉜀>󉜀[>󉜀>c9eW'Er[Dr[K6r[2ϒ5S$2ϒ5R!2ϒ5Kiw #\W\C0Oxhj @˩ X! h7 ?lA!CP?lA!CR B)} (CaZCN? DoR RD*p0Dl8L*Dl8L !Dzes"D:[$  D:[$ D:[$ /D:[$ nD:[$ D걉V E] E] F|r~F|d{N FUG*gZj>G*gZ +G*gZ cGcmؕH|Åt2H4~| H R; H R; H R; J3aA?JFgW ^ J8eF֞kJ8eF֞sJ8eF֞tJί0e?LtLF-\L M)mZ N 7KO R~ PX#uvP,$zȅP,$zȅ Rqj"u?ZRqj"u iRqj"uQRqj"u a%Rqj"uRt S S-٧ VWq?tVz>8Vz>VSW 5;OW 5;k Xm?W]  Y)s \ 8!]@ (]qKf& ]qKf&]qKf& m^A "^enB _o _ş  a[K a[j cw? cr*J dQaB e<=L9[4ejfCddD?fCddD h% ,?1ibWSj:ʤTjHǮ~uj kh k]Y'm' n81o)  o,p!A pbuyGpbuy ,p^p8 | sh%GtJvDtJ8t^\aj%t]f ,t,8tp # vme  vKnw H=x.$] #x.$]xc¾"xWȆx)cױ y1`y1*y1fy1 yJcz $ zO]szO] (UzO]k0zO]tzO]YzO] zO] {,LHTZ {iej {MQ1{M.{Md-{M {[ī7$|4*s |1Sr #-}-NwB}zh1~? ~&dQ!~&d~aqA~aqADJV۟h7ԅS P*P ZܞX ?ZܞX3뉇R X j>cu߰? ] Y] 5`e(b\[w $-\[w ,\[w \[w D2k==@9# v  &i gB&i s8&i3&i (&i &i |&i  ep0Zjg> 섉_ lY Cf }o?#bhtL vR d0Ǡ v'rJjI`jI` ,9{|<9{e SX*;SX**#cL >9D_|e1 /lj i:`A;ZA;ەw ,` z` G(mR? n8]np灺4gp灺4g }3 3:yhj3:yh3:yht>3:yh&y4& T 9x ?aY?aS0 +=ɺVE"?v E: $kU^C gARt ,+~+~r+~гm $ S$  ` lC(+0 \?I XI3I@XI3I[+R auQauQ 5SI =+ =ŽXT&d cXT&d ~=7kke] ke] ike] aMs]d< ]d<z H U 1 =Q3{VJt,To X;[*ikD!ik]ikik ik R> )ʡh1)ʡhfFޥfFޥWfFޥDfFޥ R WmIȎtX|s1ȎtX| ,"eW8l}cxP {m{U{K{A{<{%{]{{R +l 3+l +l i0(d`ȳS q| $|S af|SsQ|S|Svs sVFl*z9 z9 Wz9 (/z9 ?%!=l ⯼{δCj "_SN Xo~ j3Š&l i!Š&l ˜S?a/&t T~![ ǘwȠ Ƕ -͸A ɥ͟"UnKϨ | ˟`} $[˟`} "%bZ\-Lk ?%1>|rut&@~|!q\ή (K@'| Һ7&9Һ7&/pRQ:q$>Ի S %+#7 KNMR 6yW]Fyhn^\P40&9ÕW'79 ྦ@ VN C(" ( EJCs ES6GES6G ો8jE'# N! Sp0+ / TƾY2 L4c? 1  iF8RiF8RV^K 鞈=Y h.}40}40sOh{eRTp.y^P`~#)NjA]: Q] E4? )s"_ ,)0 󊝩hn?x󊝩hn 󊝩hn󊝩hn i 8I9'%8I9'%8I9' ,8I9' (8I9' Gh H=DH=D Yyʼn 잟4[ (o0o0jٌܗ aOGfޜ' i oyK  {N!3 bC[rEL,j5R ,x M #Bx M ~8"&PSҘ96 X (X?Dj03a% ̂7?Z1 u҉fS`@ .S`@ S`@ *O <}ڮ.[@ $ $3n3fl Q6 2 t)"!t"iX: "m͛G # 8x< #b@E#b@E*#b@E'#b@E#b@E $q&RW%Pv('+'ahߺ* (7` (Lj(L ,(L *~؂,txj%- >`b- >` (*- >`|!- >`.s Q /W<" /N#c# /s$/ɼ0}-i 1|vz1|v (1|v: 1-.1-.4{{u4{{L4mB5o)rK N5o)rK !5o)rK 15_"(5= 7=Sђ? 8ȖM 8yN\#9> , :6 : a: ;aR ;[pK |:v>"P4S>"P4 ?1 ?U % @䲉8 Ab +A(7lf a A(7lf Acl A1ONCG_ D ҋ& a DӞE T D2?<Gh H TENFIh5?"IlKd K6P. , K6P. LUJ?t &LUJ?t  L{#L{jN  -O07PqO07PON sON P45B?)Pʥk{ZQ+6{%LQ+6{%KUQ+6{%SRXޢ "R{-;b UetxUsUetxU? V$?ny W;# W40 WC}鬔|WC}鬔EWC}鬔5WC}鬔 XKISXQhRY2hRdY2hQ6Y2hY2hY2hK YNy YOZ'9K YnȓZ>Zx9v_d1Zx9v_Zx9v_ Zx9v_ [$cv?[$cv \*B iV\*B \\*B\*B|\BV7>{2\! c ]M4 ^sS'^s^s ^sD _8u _ a_ `@"|t `f" i`f" `f" b`f" a`f" \]`f"M`f" `(:7#L`(:7# b#zK^3  b#zK^3 v bUúzsb+ NOd-*dTZ2eSW!eU/U[R|eU/U[Mess(? fm7J?0fm7Jjfm7J (fvňq1f\ R fXWJ #gH'w * gKrS j t+Ė%j_>Wj„t k 9V+kh%Nkeikg*hl;48 l 5B3 oZfs oɺ oh%7{So~Bxq] q] t@cQGS tP$?V}t7E u.Z $u럘Z ukU t&vO D3vO Y v:C$v:C#v:C wkzj÷n%{  |f=?~fH ,5WD l#쯢 %R⬁0? ,j3wUC>SjVeN [0  [0 ,0 Im&?qCj[ ? N ꘒ2$E%o W ,국W ,국881881 zO]zOS oWoSoooKx EA x EA? ɇZI Im Im?vk,tSvk,t-9st9sRG9sk3I ~ I ~YI ~ vT] ITiT\TMTLTTZ %`Iv %`IY /yiM%/yiMY OOU 8Ծt8Ծt Pli ,Pli iK!#O̥ (t#fcEhRo 5s y, + 4L4L? tqSdY #886a1F`tEdJѷ; -Jѷ; W!kW![,v S1|S1|UVLdPumRc,R R{r?aR{r[}}⻉}}⻉ ቚ7ቚ7KFoJ'?'~J%Ktؿ  h'N4&x1n un o %  H}@2 a| R5@ 7T:NDL7T:N\ 5F@?7vx 1^qm,:[Ь:[Ь kqmm i K@K^_4Ku MKuo6[- s)R LS L LK LQ LL '# i % r<IAe  4YE?eK|zr& x gMxK"&xK"&k1Bt B*'RXcFP i" iD,]@) ŞO #F-!ƠȓK\F%tȦ-%T:s3گ 3گ3گ 'm= 'm= 'm= 'm= ˀq)|kT ΝA β|Kj'ҌYjҜ'|f Z9a $ ji  L ,־ə7Dk~̒ 9 Z(pKqJI5snAM;T( m{8J"S ޖ9p[ei}p5UDnL ⮪! /mt^aZz%i'(DEz%i'(K >Ji ڗb FY d?/#EV/S)#EV/Z3) =t1(Y? $ l~M# ƪuNH)N )N t1@/9c? ]W& ElbWq)NO:E2 cF~>jV$wNDx< 6_}&# PHȓ* 6GyK^jB^jB)# ߋrDr,t&{=?   Ol? Ol V8!) \q,]Gͬ,q&' 1,0T,0KO-V$. -4I|{.kGө4E/"0%R /%-qώ 1@H$^S z 1CV 1CV 1K9A# .1'oC  1Go[ 2DPo[2Y+B[2T.e3a³U38S 6w*n $u8 58j9C[tH ,9C[tH9C[tH :PqhZJ8&<(>*>v?"b >v?"R > #B˛81B˛81B'7CVsBB'7CV CWVALdC$>.hI CL#9| D؂X?3E@svGDtvIr JBt27 Jh&A;k$Jr3W s Jy#J`M9ʒ ,K- LtLem[LemXL;%]ԭ MU;$lMU;$l M֟KO/MU sM - M^#g ,NnMTNNOt/NOt/Ȓ|>NFSlj"Od}tT#E\V1T#E\V T#E\VUqHn Uf v=V8 Z6[ Z6[ [O(S[x0[` \6[` ^[UcZ ^VG _YE2  _dU _Og#b`$ a>T`$ a>N`$ a> `??5  `??5 ,`??5 `??5`??5 a ; IZa:^Wb$6 b)Jb'x $bXh by5?c2+5c2+5eE~#eE~eE~UeE~B e`zdQIL ePS frҁA!g/[K gGNgf/ـdgr bIgr b hFBJs hk= R iIՋ j!~.jsrjN=jN= jN= k'k'khǘ khǘ ki l6ZlTrv+lTr l݈o m^l ,nwLUt oWg. qTC - q}zRr or or obr o?r o(r oR'r or osD[ t9| ,t@&oQtCa~ $tCa~su@|u@|d w GƿwlܯH iw[K!w[D wQd4 -wURRwURRj x%yz< #{@R Oz|ģ9|ģ |t4v|t4|.^+ "|.^+ |.^+ | | 6 | 6? ~cˋ{~cˋ{K ~b6p S~b6p c$~ ,/ߊj 1Np %1Np i1Np k +af0 a+af0 !  ƛ-Fƛ-F FV|@FV|FV|FV| _ T4ֻ7Q`?q7Q`? wTwww 9]9e  w? Evvm# %Zss =(,铥 $Gwn:F*FR*FZcuiADU" #m ;0} [7th'&j sc:c:%mD |__m 6„!\ i ;/ t7zPj^ˠO5.O5.DO5. O5.Uk. |D |D y`G4RJ)i J)i</0WWJ1k1U%;U0U%;L 'tUt8ɥu[ 2 2t} E[ 3 ݹb  b8D[/?]kzv dS; 2_ 2N 2ZJ?S}ES*S}ES*S}ES*L 0Rj0R ,0R ]GYM ( wa} *wa} vsj:vs$ +),)>HOѷ]"tu( /oSZ$M18M1RNz` n܌n܌s ˀJn# / /  $/ / / / RO/ 9/ oSl( qH@ >H@  H@ | H@ ( Q Z ?+u A6?A6 A6 0 O0 O zS0$ }QB a>ZmgtA0$ ZFH,'ZFH, (<'b ,֮Qa,֮Q]0,֮QR,֮Q 8K ccH5[ƟNQ&]4ƟNQ&" p R:j]PbZ]PbZ'fT% M/UHRƒk fƒkt. ܝy᰸ Pn%əUJɞ&y/m(z'z' f=[ c@ =I  =I ( Z"C(ti^݂JS aKiaKi$ ͭ9?ͷ lËlË# Ιz  Υ(  iY{R?I`kq.I`kq. Ѧwï.?P`cC=Zz: 'F% # ՙwU C c A \[!6gZE~/YE~/Uֈj_ׅ2kcׇ0И9 ٕ:}_ ڇ^:L ڑޭ4% ۷ _t[ 6b :6b , 5φ #%ܹ'jP5s 6OIB6OIB 6OIB &c &c &cY#s'j$v| # Ϟ j5? )*)_" y7_ty7_ y7_Yy7_y7_sty7_ M0YuvQ0Yu 0Yu a ZR  >; {{jRւ9 #v\(a[1Mj1Mjd1Mj#1Mj1Mj1Mj1Mj ^ 祣 wi^02& +_;F+_;X2: 9[UtB9[UY  ]Cï ,]Y-6`"X9?S{})^^Y\4PY\4P;Oj /D ^m N BלpZ pRqHopRqHo ,6K|K|U T1E$UOqK Oq? 9 `9 $9 9 | J+~?t J+~? \J+~? mͼCf $,%a9R[%a9S"%a9!%a9Q%a9K *7'P l.lR  VwtM Vw (1lg}I6 #D-/ `{ 2Wnk?qPhw \b?qPhwb0?qPhwt?qPhwY G'? 2?FC U a S*?8 M NΞ g$ NΞ? ދ~`? v e *` e i  i , i  i i )MF<޷Rm(8"f'Rf'RLw 8< Ja 7p gJa 7p ^Ja 7p 9:[eܙ?7^Rd_ $_ [`<?244N U] ,mU]$U] 8î>ACt#ɦ !_ ?*;a amO (ڛ# YLo}g(kg(tJg( j" ] 46S/K .c9\ xNdA3 X j<N!|g !c? ";çRH#<* S#`%o ($?, &, R&,  &FfR &p2P (8*B[(d:<*C.V*o[**"t(-yU_C`-yU_- -- (- - $- 0- i,-- e- ,-8Y .xvU ,s.xvU a0]|0]|0]|I0]|0]|0]| 0뒐P 0LzN 1/0bj2ĥ&S3c{ 40-5* \40-5* ] 5ȧ_x6a`!6̤s| 7;e` ?8v$8v$8sl 8J9L 8n:_og8 i:4׺N ;!6yv=AG*٣(=AG*٣ >_ұ ? at?? aY;? a  ? a ? a 8? a ? a @:W$V,A\/QS Br#A(CejeDc _Dc _DKVoiF$F&G2چ` G2چ`?GuLS SHFt0HFjI(t Iv  JZ}J.RKX0C Me|L MY1N'MQ]+$MQ]+[N]mN- Ove \-Ove PS/_DP1LQmZAs8Quc Q$U?R,Q$U?Re \9TD{#TuMA5jT ct? T/3& U5(@`FU>޶S Uhɡׯ?*UhɡׯUhɡׯ (U@3?;VA=09 WuC6RX8X"V~RjZX"V~RX"V~R ,<X"V~RYUIס YʙuYʙu ZV-R#hZ![ط \ >_' ( \:E ]z2|]z2|]a&@j ]a&@| ]³i8ߺv]³i8ߺs^c$ $ ^P].-_R2Z_]_] `4t`4t`N``l`lR ` bWi =b ہS:b ہ beF#ctc$ cUyxcUyx c\^Z dR]1e]dǩ`[ cf~#xgSPMgRs gՈ0gՈ gKz} hH< m h(!U3 ,=h(!U3 j+h(!U3 sh(!U3 h(!U3  h }tF+N?}L xk ~v74s !O ɜ9®Dɜ9®%`: 9?PW/ ( @ . pnT(. pnT |!!f )niz!#jX>{7v{$ GeȐ # 1/i:E 1/iR3 1/i 1/i]~ 1/iT 1/iZD 1/i? 1/iIFjIFt$IFkIFFIF+hp\ehp\hp\ *j .!9#&+ p?Iw( &1"E^U^^^QΊi*SDa|SDa| x<;pA7pA7 8@8Q8 ( /ʌP*D!rU-̪ w2[:PH+&PH+;/R%j:hYc%j:hY QT)E TDSifhYj "t? \nt5\nY3\nk$;q;Lh;S[;P !NҍUx?r򍶁t\BeY3#n CNk n CNk spj'2d spj'2!&ps N瘔1ꗑuZop (s .h .h P8_x$G ?5 M] <?g5' * 81| c -$LK-$L.-$L-$L +t"j5AhbD)AhbK |ͬRF {v w7( Q e i #(0T C՘tvO  ʇQӽ%ʇQӽ(- G(- (- ep׏ SS (ai;?Dq@:&NQ b \PTk;U&\PTk;y;\K [1<+vJfh@3ü Y gyS'1SG v[ VH_]<†  E†  Džvhd T!T?.D P"ȮV%R 0w 0w 0wę~R%|h ʁ'ſ~l!XRt8^Mt8^MKt8^M2M+l 2 >vx } n@v[,(?ч+`v^ ,}vZ? 8ӲP- * iS $%s܊s܊s܊ x x a N"xr%˵So5 ˵So5h˵So5s$""- $""-t - ,{Byx {Byxz#؁NS 3%bRڴK? (y6^R, [, \ /-}   T5)(Y#( ʁov#]yWĐ^N+M Mv穽k5Cv}e #(9t(9t 뢤8R,B3oB3oL bJK V3D  6N ,m8 uAZ9ﲯTi=v Jn**s lRZ  $ )@B@B <#5 1 >f $>f >f ,>f>f ( rld ֫ iE֫{DTS4DTS׻R ׻R cs"=ZB-t <-tj$-tY^-t -t eF-t (-t "-t gN #$GU] U  nVpM@aF s 0+FjA 0+Fp 0+Fk x_亭 FXF j>>N q6 qyt K^L-MD  @ IdI jozX?ß[ "mŘ)"mŘ%"mŘ"mŘ DQN ڎ ԛj \|Nj d2IMRbUBs T.u ]$S6;`$ i ͈b  K] K 3 , ]4 $ !AL61 !AL61 #4EJp $Sxs +3$;%*P@ %VR6[ b %>X 'Heq 'Heq 'Heq '(&Zt((&Zt(&Zt(AX&)C~v]?)C~v] *O8 +z +HR ,r^| $,B +-E -=G.2Ãm.2à .._7 w .zz /h<-?516/s'16/16/?21k|2eH2cܘg 3v[W-4-Y4-4-d@5-J1Z5-J165-J1L5-J15-J1E5-J175-J115-J1'5-J15-J1 5!()6=`:! 6y:l 686868 7:?ZR 7}\7co c&7co 84̳i\8S i :PYo:k{Cj :NL ;yn $;y\$ ;y\$ H kp>H kj>H k $>2Nrv @/P 'A;Ơh^A;ƠhA AOsށj B|ذ $!B|ذD?4 jDQ2 jDm71E H3KyE H3HcZ Hᄡ>A ,H(JLx H`IEJID*C#K.>q LSKN+|Lf Mpә M0*s O6#O6O6P@l"0&P@l"0S QwɀK QwɀK6QlH Q\Q{ڑQx \ QQJQQ RfsRf Rf $rRf fRf -Rfj$Rf s Rc Rc R ]R"SSLH )- S*[qS$﷮T$ ^ -qT$ ^ V #1?zZ?Z [O1N[ؚ$OSe[ؚ$OQ>[ؚ$OR)[ؚ$OK[S g\A ^YЄΨ i;^YЄΨ?^YЄΨ^YЄΨ^Uk_m?[s$_I ^ `o,NN8 `Xb agܝar:7 mc.&7?/d@s d!C"d!e"]35S ejUe/egmWW8Yg`‚g"hU]{3 mhxv i8[Dv$iγhiγhj`Em&?m~)Eys\m~)Ey| mO mO nf[& nf[& n4I +o M Co Mo MRo MQo Mo MQ"o Mq1Rq1! r~>r~> a.r˶kqr˶kqSr˶kqr˶kqsq?5{ tÒ*k tf\D8u_B! Wv/5^q? X`k{ zq ,]w,V&3 ]yGePjjQ,d@qy?a ehSL 3MS23MdJxkYV?)JxkYV JxkYV - u+&*@S {)>+ 2D53 H;H;tQ K) N㙱N㙱 6"K= ɒ=v[.jc(,$ 7 , )WB]L i. i;!q ɴ ,$`PdgP?k,D)k,DDk,Dk,D P"j'P"(Q $#V?z? 9 w# -!Kފ<{^am{^am{^amK#{^am]5t  !U] ``j^D#Z*@.( (,:4?a(Oݦfku OTP"$DP"$ hf4 ZDLZD ᷲu 32QR R uhtg-uhtg- ׈R tC *) %I*) O啓O啓 SB?:O4 i 1V # ?@bq(d  7T 8.> a0] gV aSL2# XU*=hui&7Yv l1 V("7V(t)V(j yWf {Gk lBkxulBkx3 b@& { j 9u"mX$7 %nzR $x s Ȗ QUȖ QLXoߩ'mݚ@mݚ@dmݚ@amݚ@2M 2M6ꋵ:O |> bd]<p[pO\N?UO\Ns-O\Nh O\N ( 0F ;Y7RBi5 Į$Į$ $+y 28"5) (!rƣǺy$R| C/[C Ȋ6?aAaAK ? s ʋccS˫X}=lߴWUDR9YP5 #͢=^h͢=^hKN͢=^h<ԓ/bԓ/tԓ/ <ԓ/ ԓ/ (ԓ/ pd η'u#҂5$!҂5$vTL4 w ϑ.Xϑ.Xt}|Eb}|Et I4; #_ X7 =v ,X7 =vh (& 3 ӱ: gԜwW l Ԯ@c )1^& a+)1^& 1[P[(׀A` 59WN>4uJn?صIVJصIVJ U-oڟw a 4$ozX ݴԋ e ۢX?ۢX?܏<5+݆( * ݮ^j=ݮ^+޽"O? ֢%s;4 fP@Gv*_r"N:_r"Y/_r"FuPuZZ Ӥ RP5Mb︽˂︽˂︽˂R︽˂︽˂R︽˂j^5 j^5[*8k\^ (I "wҦ Rr -dRr Rr w ?4 w !z #+TJeDX_˞oRw~"&(L.\%| mU@ћ?tdJ~? H FcB=a7FcB=LFcB= 68~Wg| ,!bHRT]f ˿Q~* xyOqҺ0^ 0pck0pc"kj R asƅ^, asƅ^,: $~ڷapj_apap fm$2; +~=Cz j3j ysK ysRF ysL0 ys Cڠl ]=I ]=I] xGREǬ 5 5 ,5 Y5 $5 W5 p5 &5j pb۽(%!C  1 #1 PO홚? \a'||u] J׀d Yj7 T}UaEu5 Zu5|\ۦ 5NaO PC B\&ɖUSz'[ 98Y| F5DF5D ({~ kC%!~d^ !"1X#G&@% kXB %&|W %-4. 2%-4.s-%-4. (%-4. %-4. '0>}({<1?G({<1)zat ,1Oߒjf,1Oߒe,5ZxNj^ \ ,dO [ ,' -54qM 3-j$O-j$.}y.9#/ǟ{ "/ǟ{ ,/lBS/ 5-/ 5/ 5/ 5 i / 5 00{Dy 00{Dy ac00{Dy 00{Dy , 0=F 0=FC 0Lc\R m0Lc\RY>0DcRs2fe92p  3X-َ 5-9Q 5sz#N5eTAG 7[t4' 7zoZ7zoY7zo7zoD 71W771W %71W 71W e 71Wb 7K[v7 *7 g 7 7ٟRڱ% 7G 7G 9yUtgj,9yUtg :&Kw > ;.%= e;.%= ;< 6v>;H)+;r5`Ri=x *=ysh =W& =W& ?3ˏ,W3?=*c?=*c @$pgR@.pn @g1kJ{ A9.#QA9.$:ALֻK CZ낉0?D+!B DAZ=o DvM, a-DvM, iDvM,tE-m,vxEDEE% #E% aFws FR.4W G-G2S G]tG]t H5lPɗ'IMƹv I9 fI9 f Ib˪[?2Iy IPIѹ JW꘮D JG,zSJyϹN?JWaAJW%Jՠ3tK5. ,K5. KX K˕hkk Lk]QLSgN a2LSgN MZ`l M˲Mew#quN,KS4T N6@9 NJ}" NMrOZOZ Oӄ $ OD\iB?OD\iB iOD\iB OD\iB xOD\iBROD\iBj3OD\iB \"P,4 PA#}PA#} QLg Rђ]wL RӦETE jUT45UaiNEj Upm>d?Upm>dV0lB V[V$VKH #X@68 Z{"> \}^=\}^"\sG2v\sG2]iۇ5]iۇ5C]iۇ5d3]iۇ5&]iۇ5K ^EWmH ^ ^΋Qs{ c _)5 _E_(Y_E_( `A_ `PPT"R `iJ_`݋ERaE]ɤeaE]ɤaE]ɤQ am3CNa%Qha%Q (b#:})SbUv*X a b9q d\ frAfrAfrA[ gߞ 2(g Ǩ  hͽǟQ hX=1 ii?Њ$iH,7Zicj ivÛ՜~j "Sjcүkf5n}#HZ+K:o򛊔o so5INp4K qqG r6aMU9rjME j s*5- sgZGsg!ta=zܩ|$ta=zܩ| tE tC.tC uk[|L uk[| u?'u u vZ{<vZ{<0vZ{<v׌l vKd aw+[h% iw+[h%sw+[h%wA8"R5wA8"wA8"fwA8"UwA8"wA8"wfN xcKp lxɃ2x3ñ $ yiyKK y%Ij y)& yҀDxz{( zы# z^{-$|S)uS}5#4 }{N~iC ~iC \~kfC , ~DL<։ ~Ki#-ŹC)ŹQ% k c hKi'hKP wSz:IwSz:>wSz:  P% l\ Wj*Pl^j*Pl afj*Plby+A# y+A$ 4`ŭ'8t,=b1,=b[TxBVDH^-H^W]IJ1KD@t O* tO* iWO*]ds7Ԟ[ kNk ,7I1 1(SKf s1 $x瀷VksM `s `s d J=/@Z^DKR>uBKRs+>S{s+>s+>L- fT> Ǟ cDjaDjL ʔ& .FGRDRDs~E s~E Ss~Es~E $cs~E ?s~E ,s~E s~E s~E i W/W !^)d7JAM_* fKkv/Y K\szY K\ ,,-,Ro`~vC =BYp .I T.I 1.I aAb8!X/) X/) pX/) $-X/) ,X/) z:E (z:E?P>s+ : 0RC `!ɚ  3z U9U9PU9 U9KU9RofظB XNb`#w$rw$rw$r{w$rDw$r$٭ls\? ea)u> BaBa:Ba ; ;S W W| 'F|l[9*'F|l[ .k (-.k O7 =< jS=< 9=< 1=< sEbMEt@EE \E ux^iFv?Tؤv?Tؤ  ƄGm ƄGm Dcd6yDcd6yKѫ[QHzAIHgӇ ~"ɻ) ɻ) ʃv3XK ͷ hy#KgD< scJU9 >Yg5`J\|.J\|.J\|.EJ\|.8J\|.#sc$t!sc$k L!{\)+D0d] cM cM]|E >&S>&0>&L)jiCR"@ok(ogtOlvOlWOl OlS WP 0-" ? fޓBK ؘҍ ؘҍ 8Tk6޾t, t ?3 i ߇Iyv # { $ɇnGObd\?፷ySMj J` $!GZ Ē*U$Ed-m +m Θ  .%[~ C cՆ ?* d (O7SsXQQ. 7XQQ.|4XQQ. g龭# YN;?ꤾ%3'9N$f_9f_s%f_ f_b ,{4 3D f@v dqj+0!w9v#oRh#o1( Ց $^ Y}fm fm Є8AtVV pº}dJP JP F vF (F:F@]M cDSRaK4f*4fJߣJߣJߣS 3$7 >R MN > [ fv ]LBe%plS%pl]%plߦ#ߦ#11j:M3::M3 a:M3 :M3 , :M3 ;2#_;2#_X[ g*9n!*9nKݳ<N `VX~f# c RC3$I+A $ W}j W}t ?r]| ?r ?r ? \H ( q$ e5 hfW* %O %O 5d # v 2[Ʋ $yA k!aZ ә әәjnә ,ә `̩wN<>4 # ¥ *fu*fu  "t lu !Xjm9 (d-! D"&s"&j #by8#?w,?#&)?$ Y$6ARA q$AVzl. $S)D a$S)Dt % ؅zKI% ؅z%Z^ P %Z^ P] %؟bU &N&&N 'x|K'x|'x|Q 'x| 'sH?$'sH$(pl)JC)#Vv ._` p /N? /;"F j /یBq/یB$/Ϭk*N 0m͂)] 0m͂) 1 Fݗ1 Fݗ 1 62f.2 @f)2P¼n 2S@v)j$2}_Z#:3;h4j3;h4M3;h4 ,3;h43an`y3%3"3t 5&ztF5@5$d8A-m z8ہ*8ہ*:U^ [:U^ i:U^t:OT9 s :&B {I gv>Xm!>Xm!D>Xm!>Xm! ?[ɡl@zI? A*</A*< A,AP[6SDBT $Bo4CugS DSA cErӅ E(JEOѥ ^(F /© mF /© (NF /© 'F /©F /© iF /©| F?/6i Fg`|>lF F6Q9vG<7l k G2u/G2u/kWG2u/b H O?KHH O? Hz.E= IHIt I,w Ke, Ld LdhMLTMNKi:DZRH[? RYqǜ RV!b cARV!bRV!b Se$ SyjT[4p? T\=Tg, U mugn# U VQPVۍ?"*Vۍ?"*$W Bo Y}_b (Y}_ Y}_ $Y}_kYwpj aYwpj9 ZsZ4۲h ZB7a[% ÒG\p%uv!\p%u \p%u ]3BRk]4Tt_' \_N( _N(t _fxʸs_= _= -_=Y[_= e`0By ``R `I-=j aM+debq "cb c#j_-c#j_d=C) dD*׼S dͲ*x diPi# e g Ng`g`g`]g` hv8iZQg jT5AjT5?5jT5 0jr kԓ Vx , l q5 lgG+v*lgG+ lgG+ mϒ)^>mne1ne1 $ne1|ne1 ,o_- co9] o8T^& o8T^&Kpr}w?N q0;-:rF 7Kr ar , sAPlt+<v7=߲ iv7=߲pv7=߲sv7=߲jv7=߲vYy]Cw/r50w\%?Dw\% w\% $ x*dI7x*dIy=Kxy=?)yFѫ,yFѫ yFѫ yГo#P yГo#P y9`ψ|.& -%|.&|CZhܯN |CZhܯ"|CZhܯ |CZhܯ |JI|JI|l'r |5;Q|ݙ.P}r }v8 !}v8?I}v8 }.y~r ?1~r \^ $|f  +ϵ S?S? FL{' =\3| ^ /^J?.6.Q!7 xS3pWnp pWnp _&Kw? ?38z݋? Y+Ҟ 'V'CEe GCEe CEe \ a{ q9 zz rqˊ\?ও {k ^&} # 5|)lhNHPlk S%~ ,lZ4Ø| Ø †O.†O. 2eG2eR 2eK } 1Lo'F+ a#]O4S XHO a?N{ g%I TN TС& bQ $+chyޚA ]a ,\]as-FZ;̚ ,eFZ;̚ FZ;̚s X^: &]M?5+{^ p7* ^Dp7* ^ X_ lG'ō#dK'#d&JR|NJR| JR|sJR|jJR| $ C,Θ4C,ΘC,Θs !C9Q@, AC @X3]m@X3S@X3Jc aJcj~,3O-~,3O#vE u \ Qƒ CX$JOCX$Jj+CX$J ! "uqwCjZ 7FҶě $&Ҷě9 ѕ6j^L"D*vVK>~Cɐ Kh֨lKh֨lKh֨lKh֨l,\nv\NvJ\Nj}s g}st ~=d~=dH_G)J _0R ĝ&ekAAQT ǡ/ :%Xb %Xb ȟg˴7yBn VȯVȯVȯQ'Vȯ ͶiZ' ͶiZ' ! 4ΰ=qΰ=q-ΰ=qRΰ=qΰ=q$ sĆ#sĆ E۸ǐBcC a)BcC Ҡ٪E ,kҠ٪E<Ҡ٪E $/Ҡ٪E 0 , 4  z=ο c ְ9 +})v T3vŷ[ k  6 !K s՗t$yPrsvdUڂIGT Ŧ S!T Ŧ Q ܓ :$ܓ : m7D_m7!m7 k(i ( eh] )#Bi02Bi0N _*j /TJ/v[K#:h+t jA) jA) !jA) $!4Fs 㓎&Q eXiC)%>F.6  g S|Syj: yj: ,Syj: yj: $ )`IZ 'K83w ;# . eiw#N[]C}?%> plpl Ut)ۥ܂ x :6a& &2 ɪ , {T vN HVB մ1մSN;'7  qhǑޮl3dޮl3L;ޮl3ޮl3Zޮl3Sq`0]v H; H;/tǎ"4 rE ^Y{r}jY{r};Y{r}]Y{r}R Y{r} xcAL1scAL1 \&pN9M$GMS?#rv?#rv#rvs e ʬ)ʬ) $wʬ)*ʬ) )ʬ)| u X }w+q:& }w+q:# }w+q:P M >K M >D [ 8jG [ 8X : # ծmwS,v),v)K,v),v)p,v),v)B,v)5֛ "i) )) j< ?zt҆XSakyX>Z l[0xl2LD&l2Ldmv008mv00 mM!g&] #m}aen5 nku soJI) oh q)~D qX]r2ih r2ih jr87؂`r`e9v sAZt}p9\d-t}p9\ vFԟ x!&ؾ xjrC= x|r x|r 3x|r . xaqC4yI%>0t$yIN@zYa zgi z }Ht {, |mF9|5,n|yP@?/~[-S"шTc)шTc X j 0j?!bAqJWj ֶ  ֶ f[D ځ0ځK!ځD R:w l Z _j\ i ( r9.xeP gv#gv 2ϐ jGNI I$ᙪK >˅ ~Ds*~DI鑅 9fy 9Dió rI^դDCA&MA&'A&A&RA&d9ItFJNן n ן \ wt5wt5 1h Nxnle,w>SR 61lz4!C dE #rrY'r: sӱfkHL)?HL): : ,#UQ WM$iQDiQiQiQAiQiQiQ Zfx+Zfx $ ] popG4=&տ b Zu , [ [ 9K  Iۚj T('*T(' ,T(' (T(' ;mX !;mX;mX| ;mX: fxcU   fQ_:=8 8t8 8tX8 8k>Ih$+^0 ,^0h %dix i} , i}2! i}s [;h?[;h aN[;hs'[;h[' ,:['ɨu< a,  j ! [R1VDMfHnmt>4 &i $ïg`;`;"`;`;*3p/{#*3p/{R*S o%c+citk&s L[Rcj ðGjuðG &yy yϗ XϹXϹ :@:Lh]! 0T@ nz #3` h'D =~yyDo o \f b /=/= /= }IB }IB+iyS5* ,a,a,aK,Xv¡ۥ+΀R,íc5&95 r?4&r? i Ā:5|z.xpDZ_GY Ȭ 6h!ɜM0ɜM0 $'=LCw߫S h` ҉ /҉ ?-,7 ,7v .@)a#9{ ZZQw[Qw[8Qw[ ΣTFgBs J i:iS@9 S&~с=I" AU1*H|*H|K J>bYb ib btbjW4J-ScJ-Ziٰ&Ø.3? ;nf2;nf X?نNIx /نNIxb ;:, nA) ay2|,{@?]{@ a!{@j {@ ۊb ۊb ۊb mۊb , ۛk ۞3x[Aj5j|n6|nY^ &J$ad.B "hlxu?VDEi<R [ 7 Ŵެ 2NA 1NA 퍆0r '6 >rzj ؛H ؛H ,k#F-b$4~}Lwfg??[~g֎ 502)2 ɭw0=z ~gr~gr *W=R.)!{s.)!{1{C+{C {C  0}~ , ܐ5BNܐ5BR%C -{OX{OX et )$ cI}_ECS U$9 JpmeܢkKuܢkR6ܢkLܢkZ m@ S8㥦W$ oRo*Vd*VL "Mᮘ "Mᮘ ,P7:!dsr'g)dsr'g , 4_S c 3D+ 3D+R 3D+Y 3D+-_4 ?i_4 l! m0j& Y a 8NC> y 8NC> (0 8NC> 8NC>  C =0 ~ =0 $H =0 ,; =0 / =0 * yϠ(- 6 | >̐+D0 >̐+D0>̐+D0 u>̐+D0 m_>̐+D0s%>̐+D0 #>̐+D0 >̐+D0>̐+D0j?; s5?z'5#" ?\61?\6 ,?Wڥ ?Ϛ9L @s0q+ @$ A/U斛 {A/U斛?A?hm&B&wPCu\ ,CPJ=C)LC>"ZF.8?Gkl3 G\Ls G <|Hړ =Hړ = a Hړ = Hwٗ5$Jj#j Key9 #K5&v"K5&K5& ( K^.?%L>aA Lwa:U L|"&l 0M=z3O2K Oy)oOy)oOy)oQQ!^lpLR +W ,ZR1o1ZRWn USI*O i U4# avU4#U4# U+yG* (U+yG* ,V')^V/9nVܽVVon[V ʛ 1V ʛ V ʛYV ʛ V ʛ V ʛtWS?3 YU'KZ z[K/:[SB ^Cuu `u!Q? `)J`)J `C5 a|  a%.Q aǙ=c(xDd0N dĶ idĶ /dĶsdĶ| dCVps dCVpsf9L ,g^*R iſs$iG jYR: kԥ1^ ;mMJnyElo(SSQ-o(SSQ o^W6Y #To^W6YIo^W6Y obl$obl$ q;p͍ q&q r|6EL@r|6Er|6ES sD4`<,?sD4`<,gsvs isvs)svssh}k u[U1s w$0x x']@x8a{}j0xnZ xBnuy.Z .{-!{-!{c6){4{4}t }tNs ,}tNs }ט "}ט }ֽ?  # *5;?!.BV6P#` $Vubs٩, j  e iOc+2G:sg2G:j2G: ۿ&b l* l* Lf| tGc , XRjjht yrGg b%V \b~pb/|3DjD?jDK xfA ey4˞#F(oZ i|ewJ $+|ewJs|ewJ n7| 3*,6) `4U>ߗ i 3a(]LU 2p}3 e cC;A ? hk ut?_%2-%2"%2L"UGxDž UGxDž * r y .z&=Rz&= xLZ5t$la͐( $L͐( 0͐( ͐( ͐( CMvȵQ % ȵQ y ߊ3y ߊU9թ3c, j7 ,2\+j[U /Dx?U_"e3 $ȁGK+[ c^?9YHvj nƶ? +sfm1 tW%RtW%ftW%>tW%}f{2 0Tb0T 0Tkw^H =F%q=WV ~dMb& f - . #R F/ܓCVj/F/ܓCV F/ܓCV ? GrY ,HY *\ۏ go? ^? ^'dYw[ a1Z%N=%N= V%N=K%N=%N=˻P˻R ggN e S׶z3j t2 j.w,Q؉ / M"xű eJ_ $"OB[8 RrHS Æ S K U%j ucՆ/ucՆ ƐV%hc $Rl7=׺Ba17=׺BS7=׺B uh{W Lj 6`? 6`R$6` {8P -ƞkI-ƞ a1ʯubsB + k԰ 'b ˖ԓK ˱=nftt zK #(`g CS"\C+Ї`GFϣt} \q| ",Ouy`B[. @To?ԗi84P=CY84P=C\^2 #\^2 g!\^2 \^2 w-?w- B> jqݱ&FL\,F c FW?FW a R56 㞧*& I DLbI DI D VDZfVDZf[ VDZfK ]D | D| )| q+-rc[{ K$\gJ\ԧi  y /# |?6˺ŝ6˺ŝ ;@fh$! -~*Pj@-~*PZeVx83's D+H` iC<MyR^V?YR^V g ]nw $+@ @ 9@ Lp=UU׏ 0U׏j-x* y jͽU4d ̆`OX9 1r{1r-aD$ ̆P"#En9 hYnq a^E ÉiQh'Bjj*Bjj$mt+<#^L  cWt[b \fuS%!YDw ?Dw -H ] "[-γ_`(O $2wT ?:@e  BDEkC]Dhw6Dhw6?Dhw6j EoqEoD:Eo$EoKEoFc<?GZR.ONGZR.O(HX~ H- aHy H#xsHF 'I(2 I09 Iڍn3KIڍn3SIڍn3 J/G5MJR2JR2[JR2LJr J5EMK4 @t $ZK4 @t (LB>6Nԅ NfPN5PAt  , T՛Ob , Tǡ bTǡ RT%b1U׷ݤ5- V%RM WD]W3y):S WWĝI@WWĝIL X>-*QDX>-*QDX>-*QDUX>-*QDXaJ XXaJ aZF* \'МM%\'МM\D \Ć7\ \=!|N ]ň:]ň^./ _ 3I_hg:r1D `Rǰ"d7gJu2 d>Kʎ+v*eX馊iE e? f0>x "f*v4g6z ^ hyчiDY ioC& aNioC& ioC&:il6̷~ ^il6̷~k$j.r hj.r j.r Ej.r ,;j.rjj.r j.r $ j.r j jiR jދI@RkxF  m*q?mm~t n0O/lT ( n0O/lTs n1X: nX n-xK'oVg]lo^׳;$$oC-oC pz527Y .q5 . ,q5 .r r Rr rS1S!rS1scr $s} 5dL uX(/vu  uR2R uߕJve| Mjnve| M (Uve| Mw /+4v@dxw /+4v@w?( c wdH3| zy|aU }U}v~q:3 ~2ca?  $%q  $%qLf aŲ-E b d~J[9u|uk#[ 0f $ K$/ۙ,69v \ ڔK ]Ls,Z"S'T/ xN;䞺= R ?I U: +1+1 +1 {? ~B&&D~B&&j, RhaRhS!Q \)5L 5Ltf5Lj%J" wo%| c tushiushJush<iO&iO| iO a sl]t L e[M  H.H.H.`S #Xs:#X #X %?+? nFât# l잝N)ϝ؝?;tdـ % rH( j\hC.^#c+[ +@Ɵdo< ao<?o<j~B9 s ׽u 0K yAl/% c=mc=HX gzD $cɽ /cɽ r:sGr: :r:5r:Xj?X 8=C8=?8=D68=P#8=K3tr ; i ; Ό''j<5H<5@<5 <5]qm r %i0%i0B%i08%i0ADSR?Y?/R?Y ''sS$<S| c| cނ ނ K @V` ?I6n X5_n I)? jS~jGjL>jjaj<]W?rk9$c I[FbWC [!k OM COM w Zb?1 OXs\ЪPG6Zɇ#+eˇXy9c? A8+A ρZԒ ρZԒ Q $24 €Q 4 €Qd C|bwC цR цK H⒎ h殘- c`wg G *m_ *m "E &6qvj\qv qv , ! Z? Z 蟨Td *κ R'*κ  t|K\R ى osى o zى o ,gى o (Qk?.bӡt ܢ Whܵ7_ZsNPu ƓƓƓS_ƓZƓL|d|5'K g!K g!C KM qK"cf2?p)JU}[} a|C?=|C|C i;6.( l\?烛SpU#ѝ[Sjѝ[ ֵ.3|\Qv 1HG a1HGoa? i%2i%2i%2ji%2aq $EP 3~S!gBk  Zkj %YkLz[x ++[x %t " rn? `&8h$K rʹ ^_[DǏ97DǏ91NOcK# -L;{S M M͔-s$W 22oi/1i/1Ii/1)i/1$i/1 i/1 Q s^Q ^ʋG 1X#  ,$[ #;Ik =sj A"It.' `5B`5B \jT) F`? BY {IR[Z#4 \ g3V3? 3s:C i:Cjp-v+ݽ Ie |i#|i zSL1L1 aL1 , ovʉR<'E ,15V? ,# ,# b|uv$ U)@ Hki) wg$R \)L %BɡL I7 89c(= ۰ Xs 1!;p?JS2Bt UiIUi;g ,jS |)@ɐ$ mXuf _A _AAWRAW c4K = #SN#<_u+ $4@j|&xN&x&xK*)kd'a*}|*}| *FA*)_E-H-HQ-Hd-H.[g(b/zU~KI +/zU~KI/zU~KI /zU~KIj/م /j/jK/j$ 0-Nϟ Z1 #j 1$sW Y2f4ҫ S4φ4 "%'D a 5ѭfsE5ѭf 60, c7bzM:A7bzM:AY7MEJ17MEJ1v7RO :~pAt :7J$ :3_?+;>'s =tw =5?>) $.>) >) ,>)j>R,a!@E+|͸ @]3h C2F!/֟F$UQ!F8QbG45wZt'G8YƮ GX;.UGX;.GX;.RGX;.GX;.K GĉG"XH ! H)g]LI3 2J4_T$JxWJKgGPK3\Y#Kr]->KTX? K aK ZLç M+YM|/{s MwJN?OڝZ PQ, P9$l PV? QRkv Rke"#Tu!.Tu!Xez\ X^j2KYqD?<YqD $YqD iZ Z [%#]]d \^Unݎjz^Unݎ ,;^b:1\  ^M6{ _(j\E e `)"ja4Q)[%a4Q)[a4Q)[R a]4a]4] b$ofbЂ گ i bJCcAҭ cF♘8cF♘tcF♘ cp "Gcp " ,cp " c@BCR dxHKsf#PY f#PY (Rf#PYjLf#PY &;f#PY 0f#PY?#fYx' cfYx' gHogHog(>x i˚׉ ij Bc iu Ai Kq iޱB|-jf{WSj3- kcQ9'n0Ԛ %ndo:$ɉovC r1j u&HE=bu&HE=)u&HE=Lu&HE=w)!wRL@fwRL@S6wRL@LwRL@KwRL@Q wz :wz x9)0(&x9)0(-,xQd:xQz6|\zg\w5zg\w[-zg\wL zlj*;z  {BL8~t{BL8~t|@buG8}) ~b ÏJb1v }?; b0}?;bo3` €`WxLy€M!‚qm'"‚qm'‚qm' ‚qm' \‚qm'?‚ y} ƒ?? k'ƒ?? ƒ>.„c6…No:5…No \…No…No ( †MvˆS:Ka ˆS:Ka ˆ,U1f‰ ]‰ ]Z‰ ]R-‰j5QZ‹v-@ Œ%*8Œ%*RK|w Ž(oJ ŽYPW't 7< ,7<Va !]ᜪw ]ᜪw i]ᜪw ]ᜪw]ᜪw `‘?0]‘  ’JDV @’ 6’ 6’ 6y’0:L”:| # ” S” S ”8 ”8•"R–)k%&—w6~-—>߯jg ™SHš 4]?š 4] iš[O ?š.o/|›]DN›NS(›N›N œ88SœIZT= œM`[ žsv?ž? Ÿ jM|Ÿ jM*Ÿ jMŸ jM Ÿa\rT] ŸGH c ¡@G ¡Ǥqv¢A<,} $ ¢1n% c¢Οu$ C£aN5;¤ !{¦oE§#Kf@§#Kf!§#Kf §?*h c§?*h #[§  ¨{=`+©~ i,©~ ª"3yv#ª`܍` «/v S%«Ba «dGQϪw ¬^t ­E T~ ®N®$y/j®ས$ s °InIS^ ±`kodKd9{=9%@oIk$go:  b,  Aaj K?% |qzB] -_TK-_T -_TQ c %%z F  #Ka $4&CS $rV,P(s s 9r Εe9U2~Ȼ2~Ȼ d^;?.d^; %^r $ ѣUT?:굱B  :굱B xW@lv!L/PSՍǶxc ՙͲH;hP ֮4)%l]:83١g>١g>0 ݌N@P<! #=}3:  n+>PgrВ"grВs%|,>% ('>%>% ^ede$ k # &yզ &yզ t\2t\2 ~' c` $c`? Z %]#.BK <5 lUXs 2 e&\TQkRRi>i>C'ОY 1۞ jR2=j  .-  m -EH  c -s % A% װn װn2| Egƛ; {t{} :vS 聸 Jt3=? ,Ȏ, EsL) Esa Es Es  EsS Nt Cp^Cp^ Qipv2a, j 6b/P4! &M@ iC i :< >{ f[ e>S '.Ol'.Ol5'.OlD*'.OlQXS@t+XS@YXS@jXS@s #]=3? aPw?K u4 ,aJ scH8dj|H8dkeH8db[:xj C {? c gU? g=\-+RbCb 3K&k}Y c' , 77Zv77Z &77Z ʼ|:ߔ  l_ =?18\ jC3J?F!  | NJ ^? ,) ((Ivt_EטlOI M2ю ! lVR !;ke !X'h "ok5# $@ '.)'Nt5)'Ns,)'N &)'Nk )|uN)[$3 >l9! >9 )>+M4HNM>+M4H*?MJ?MJ@ @ i AQ{a AQ{ B.)j5sBbƻܨCBbƻܨBbƻܨBbƻܨBbƻܨBbƻܨC7V`6 2CQ v DآJ|u](E)ny" Em9d6 mEL[ E}XV:E)BF..rK!Fl2#.tFl2#. (Fl2#.Fl2#. FݎpI'FݎpI $ F*GGw6w $Gw6w Ie6N I`ޱNGJn?Jɮ˙?Jɮ˙(Jɮ˙ KFz@? L):L) M4 M\== Nklv'?$Oj"Oj" PL.PL.Pzߐ) iPq_$?| Q72JQej R+kt S6(>K0SޭBSޭ%Sޭ iTl1+K T^HT^HAT^H>T^HUZbUZb VBTQt WZr}(WZr}9WZr} Yǥy<Yǥy ,YǥyYǥy"Yǥy Yǥy (Y j Z:cap aZ:cap Z]>Z]\]Rs \ \%=/\թyy3 ^\թyy3 a \YeR>\Ye ]%~If]%~If ^&V~s^L _Ŀ_Ŀ aZPA= 3aZPA= b*6bM[J@R c~#~&c~#~cO9c [] c}V?dUf dq e#ԕ [e#ԕ e#twgY>gY>Rhe%S i"`;[ j  lUܰ HlUܰv8m-Es m:Ona]n n~ߜn~ߜ (ozPSJozPSoyqpd[p[vs~Pbt2Q"t?t$vB(R'v0wH xжj: ycJP z%@[4+zC izC i zajK4z5c 'z5c z5cz5cz5cz5cz.hj{)ּ{)ּ6{)ּLd{)ּS{)ּ{)ּ]R{)ּ{)ּ{)ּU {c)RV{c) {TS e |I` jj j ÀBss À$(/ \Á@zVÁ@zd Â7HZ.ZÂ7HZ.SÃ9plÅBޮ!Åd-RÅd-R ÆA!"Æ՛[cC Æ՛[cC Æ{NÈO~,?*ÈX]sÈX] É?3xÊ{eÊ{e Ê{eÊ{ecÊ{eÊ{eÊ{eÊ{eÊ{eUÊ{eÌ*K V.$Í,ÎKÎW}?:0 = Ð: !Ð뚝m# Ð뚝m# iÑAA8S'Ó\w! FÓ'װÓyÔ@" Õ_AÕ_R Õ};i,;Õ};i,d9Õ};i,*Õ};i,j ÕNھL ÕNھ ÖIuR×)\cRØc !| ØǷJÙW5z'|5Ú 5M?'LÚ 5M?' Ú`ﶨ? Ú`ﶨ Ú`ﶨ Ú`ﶨ Ú`ﶨ Û0z Û}Ӛ@-Û}Ӛ@U(ÜFV4 Ü@d_b ÞVd>$ ßm͗?(à$sá*áá (á â? Fâ? "-ât@s9ât@ \â4 +a 6âD? ã숧 ätt,fK_ätt,fKäN- å)CI,]Kå)CI,] åG|`'K åwj *åwj æ,p? æפ7c: æ)ۑ ,æ)ۑ æ)ۑ æ)ۑ èBW$ èRΤ#ér%C? ê{( # ë|#6ë=KZ -ë=KZ $ëw=pëܖbS ìwA6 íO`?í}Ym ís,` c!íԮ~˨OíԮ~˨6íԮ~˨&íԮ~˨#î b0Ґ[ï]2Eï]2j ïFڿtïFڿ ,9ïFڿ g4ïFڿ \ïq{Y,ïջ }#ð`WGUI sñkv  ñzڍ"ñʶzñʶz ña2| #òpUóBiQómr`ómr`9ómr` ó#ôq|ôq |_ôq "!ôq ö | öF@%0öF@%0;önן^$ö.E Lö.E ö.E ø2<K&ø2< ø 5sùo*/bt ùP4=r , ûNOü3N=jsHýWLþtG 2þh ÿbOC (mÿbOCtÿ|*[ &kp z2pU]z2pUkz0t ŵvA& (@ƀykƊ\9Ɗ\9 !5G*_ 3ii ?\I2 GC"K # 4 .; LK9tl9 Dm7-\ $ ʩ8~+`9?:˿^ϙ(\$ 7Jj ] $ ' }l jJ;`쌕 ] ̓6hB^ gI@$0 tLK5tLtLQӅГp @Q!T? ~qGŐ|#Ӫ_)NvWR r[" Qih& sdF~ԸT\ L-r  Յ<' \Յ<' %ժʞ<<[ݑF; pq Tg\ a ۆN1D? ۆN1K %UyEtvO%(>O%(>C S ،18: w;+Xˈg`d8 ݨ|E "6"P(n Ba BaK Ɏ ɎCNEb (ʤ c &c3?;&c3 - HP[x{f HP[x{T a0WP*{5d \ I.?0w,(yh1j f8T$d# U # U?H# U 9# U 13BR+OvO !X S bϴerbϴerbϴerTvk l ΞJCU $$P Z@#B}?!fLǜR N׀ \% wILHtcJ VVVV][9D,v <-j#2Q | 3j&ۣ0(ۣ0(Rۣ0(a=V=V ,K 4+)n !W/ $ hY >*x  d ֡ (YH{ ?[ ܅?[ ܅ LX e 9= '9=#j&R t? i6  { ӻnj$jj D/ KD/  ~Mz-FXg]e!(ιY<!(ιj;g@DP@О "%[ "%[ax "%[ K(  &fDĔ  AtL "NmD $$-L$$-%&X~&X~Y&X~ &s}` ,&GhL? ' n (' n , (VZ۫ ! ,(VZ۫ !j(Z ([~BnQ (=? *\ph *I)$*ݹX a*gB*gBD,\8$ ,R, -.e .'{(/ .(BO /Kh {/PnN/F50Ugd 0h@/_ 0< 0< 1 2h)\ [2J=ڤ2J=ڤKw3Yy'j3v 3h[qN5'b&]/6h6-G76 8 BT\8R7z)8R7z :p:pj ; Y t 1I00>1I0?0>1I0j ?gs ?&~?&~ @փi<^ BfAX' C_}Ah!DRȢ#D E%$ ,E%$F`2Gڻ H"GRH"Gt H/'#LJ, K )m MwG: MgC O]1%#OdjVJ>QNbgNLRU3 T9"YYj)Ua e`Ua %Ua m!UNZ:k=Wsf WlB6 Wy lW@&p@  XnbX~0>XnbX~0>XnbX~0> Yse Yse ZsC 8 +%ZsC 8?Z9- []Pgj\N \_?t\ri}O ?^y0n vR_`GijyB()ijyB(ijyB( ij8.Ĵ26t(Ĵ26sĴBD Ķ.w0j Ķ8@_?Ķ)P ķwkķw.ķwYĸ̻ĸ(L  ĹknrŴR ĺ4%BĻ$3 ļ=} ,ļ=}Ľ@Ş6Ľ@Ş6 Ľ@Ş6 ľS|ĿzØ ĿEĿ #@Ŀ-fJ5at5@ p / n!,&sK D^ D^ . 6:PK4Z-*Z-+Ř^F+Ř^'+Ř^j&3a e3a i3a (ȈP@) u=n?|6fM\O#M\O͕4N !Zd S͝P"7b a#c %L ,c %Lϒ>* ѸݞNѸݞѼp%W1S9/W1S9W1S9)W1S9ك[R%ׂKq8 jQ?8 jQ @3 R%ԋ]eh ~,-5 Ulq Tl # ׭AFLji׭AFL=׭AFL (/׭AFL ,!Z ٔ@3kqٔ@3kR)8ANŞRANŞ ۭ5sWތ5Mch/[- R: =#Q=#.FYrk Or/WOr/D 6at CN? CQs CQs , h[#5 j シLϤaシLϤ+0L,R015PbQm15Pba15Pb&}=N>ܚk {u W5J/ \ EI7#$G#$ E#$ jDjȇ㯻 |j a v0MKsM>  e ,4.% jHVS kDKYDK2A LAC) LAQ t? =I_  ]*x ]E a M/ : O دN { 5vK9a3/E $v8 )ɪ'ma]0l6g9k3g9 (g9t ʫTVK C!l =^١ =1/' >eFFv # ? >; ?k~ ^@R2AY݋ B@QuCCaj,C+C+C+ E&1ljE&1lE]";E]";Fz[+ HOL|I'& KMKKM KMD K,8AXj7K,8AX K,8AX (&K,8AX Kg:x  LJ,OeLJ,Ot<M CP4LMކ (Mކ?xMކ YMކ?Mކ MކMކ NFȪ?VNFȪN8p RN8p NO~~YPqw.!2 PΎrSPep Q*)#S<τQ(US<τQ(U TdzEv [5 #3[I3R[I3Q[I3Sg[I3KB[I3L \(.I ]S6 -_ѯt_ܺo_ܺo _ܺo _ܺo (_ܺo ,_ܺo`!7/ `\H `e#L aPaPaPaP a彰5sca݄Bca݄ ddQde6T e6T e6T e6T e6Te6T ,e6T (eOu[ ei,)g48-3gm# ahо hj={[u kftl6N_l&d lZk.ǿ? m⇴bkmU> ne #ne ne Qnˊp1K nˊp1 ohvo58o- }b*KS}b*KK ~] ˯~] ˯`~A//&]~uE5|l(~uE5|  LL$ )L"˘jŁm Xe;Łp(}C Ł(#m ł d=ł$~xtŃ1aVړ ń=! ņ' ň^&ň>Seq ň>Seq Ŋ,; ŋHd ŋφ'I_ ŌFF||5ŌFF|jŌFF| Ŏ  ŎZ*]Ő־v[Ő Ő>[Ő>œj? Ŕr|" ŕlL3^? ŕR0ŕŖf9.:Ŗf9. + Ŗf9. Ŗnk4%ŖGضjŖjSŗpgD(ŗ6Nŗ6_ ŗ`ExŗѧwDŘb^Řb^ Řhl3{E Ś܁Śe8V"Z ,Śe8V"Zjś͋ޭf  ŝ+F[RŝnaYŞ ,&ş~gT|# ş;;=N? şLkŠ\h?š/6 š젟;Ţ0d<sŢ0d< i Ţ9 ƄŢ'Je)C"ţڭm_?ţ̗ţBVf'Ť }$ Ť朅D;Ť朅 ť80ť8hťDA~QŦsŦ sŦ!; Ŧ ^F $Ũ/>t&& Ũ/>t&&Y Ũ}( R7ũ¾ <ũ˭! ū 0?ūu-YhūQJ cūBVūěip Ŭׁhlŭ4Rt ŭ4R \ ŭLd=GŭLd=ŭLd=:ŭLd=ŭLd=ŭLd=R Ů=^F|Ů=^F ůu]%ůϋ kHŰ+.Ű+[ŰF|ų9z>ųG~ќ ųBzų+ Ŵ(\ G-[ŴyHH ŴyHH ,ŴyHH ŶTb ŶA1̖ Ŷ[DN? Ŷ}]Ŷ} ŶbFż ŶbFż ŷG1ŷ8ŷ8pŸ8$8 eŸw5:zŸ|YL!Ÿhl?Ÿhl #Ÿhl Ÿhl Ÿhl ;ź=$-{_ źm*?ž'"1ž'"DjJjJ ,X\PX\PL ›D;D›D;1›D;›D; -S; d' ? d'  è֓> \aJ삍 aJ삍 'ȅiSŒyekʕzZ6`Yj*`Y`Y :  (5P) <? (^Y8X9 1eZ ̠Fw i̠FwjR̬l[̬l[ >g/ b <<<<K5<<`#T7k*;5j5P xRxKj*RXh,o#Xh,o?pngK% 0Hp:Wj }~00}~0}~0 Լfjvi ( i >;? fefe i g!?ڜֿW ڜֿW 8ڜֿW ڜֿW %_ N0?K Z9: /xcs/xc|P/xc g0mXB >Qf W\ "\Kʆj&USv Zj&USv 6j&USvtj&USv ij&USv V*{(v ^^FyI h^^FyI i nZInZnZnZ] ZK ތω <ތω ;A;AQ dm8 !k L?to9 S^dc:5^dc*3^dct-^dc g^dcY I~kZu{- ^s9.ѹŌ!.ѹŌ .ѹŌ .:.: .:.:bIkb `dEgR QR Q ͆z| HbHbOз0L , з0L v/6մ?().j5b{:]%b{: yP21g {Rg {S y< -+X ¯R0 yIk jح s$ -L9L7YkL7YK:L7YL7YQc;? x0kj?x0kj W- c ۩dF<"wZU DwZUj:wZU)wZU |g\ ~8l)C-N=,h ?a?aO P M(v$3 LuLuLuLuQU U MtM <;U`.<;U` Rf`|UL4XzFj$!tb8E 5˿Z1p 24~N#aL=R8l l e ϐ Hg> ]`tjЅf g F%;O fx ?hGh .hGh hGh 7pSd\ud\.{ ј:W:W# ]ky?)?).*'^̈́EPhN6 i 7wa&\&^8$\&^8S\&^8# ᏫᏫ#{(#tD#굸 |&$zU$zU $q% #' ^Ѯ,R ,R K -c!4-c!4.ce1.ce1.,8/5j31 4+8 47K 4j 4/66 71 S:7, 8l'ф 8/)DR 9'9D:buq0:buq*:buq;7vg{gK ;%$ e ;=iĐ";=iĐ;=iĐ<2*RFTV+|OAV+|O +cV+|O1WUY1W*0~ Xih$0d4Zme^b["RoK\~Js ]] ]? ]ȑ ^jB2L ^S| ^VHj: ^0_ _=MSb i"b cccKcLޭT}19e.U*q:e.U*qL e@|&e@|ev1 fc6R gg7'O g!-1 jr Hfv l`adT>?>l/(s l9"m3s(mج8Q mج8Q n,YWO: n;̈́?oP+{  pT - $pT -#pT -YpT - er+~ʐ i rlPapr rGrrr sFIsTjY LtJ&} c)uKsv'ӻr0v'ӻrj"v'ӻr!v'ӻr i wN^Rtw^esd ( w^esd x7<`5 y@z|mP" zmw~X0}kfU }-?b~|  i~|  ~u"$ Od ? *2? Ɠmsn.Rƕ?Drƕ?Dr ƕ?Dr ƕW` (ƕ|!m$ ƕпf Ɨ|)Ɨf7LƗf7Ƙ"k\ ƘT ƙf4DReƙf4DRD ƙ#6p ƙ#6p tƙ2̍Rƚ4(_Is"ƛwx1?=ƛOսD Ɯ'Ɯ'uƜ'MƜ'RƜ'PƜ'QƜ' ƜÈrR Ɯ弞IbƝ!͂y2ƝH e)ƝȩOPƟIq $$ƟIqƟIq ƟA | Ɵ1RƢ6;1Ƣ;1e Ƣʛf Ƥ ƥ8ZDNƦ $Ʀ&T Ʀ&T Ʀ*F.Ʀ?ƨt ǃ&ƨ{hR $ƨ{hR rƨ{hR (ƨ{hR ƨ{hRsƨ{hR ƨ{hRjƨF9 iƨF9 !ƨF9 $ƨF9 ,ƨF9 aƩ ]VƩڳM ƩT{ ƪ&=}wG ƫ$^ ƫzds ƬLbƬLs ƬYu{ ƬPCsƬPC ƬPC ƬV$ w ƭށƭ?e ƭ?e R1ƭ?e %ƭ?e  Ư*F -BƯ*F Ư#]S ƱNӍ73ƱNӍ7ƱNӍ7ƱNӍ7QEƱNӍ7ƱNӍ7TƱNӍ7YƱNӍ7R ƱfYr?I Ƴ(SOƳ(Ƴ(Ƴ(ƶ>ws ƶͳ  Ʒ/8GUSƸ]hƸ:s$ƹmRƹmƹm&Ƽ|pxƽ*Z_wjƽ*Z_w ,`ƽ*Z_w ,ƽ*Z_w (ƽr,R?ƿQ]q MDMD , RR?³$lWG a #ua c1đc*U {Τ rGrG k "&6nb_ iX#Oȹl&ů!<w RxZ,O[jO[ i y\[ˢyPR ˮr@bˮr@Q*ˮr@ˮr@ b޲ ,-b޲ a ;k "̮! ̿#Σǰ b9MtCR1ESOf/x "vD*DgȞJ (gȞJ ϯR IZ?IZe;5WSIk K C 'ZqC2 4I*N#MuaR*aR*W1_YlQ}$OlQ} 3lQ}#9RJ RJ:RJ? ̗!9Vi m ӾR#];n>?D@>?'6A`~, 9s xj! pLE (KH!J ?J 9ZJ V҉ n:k C>=/'(C>=/'C>=/'YC>=/' Pךl[4xrj#mܷfn r )k 5a VK* ߏ- ݂KE3 ݂KE3  XFow SElw% i!i!i!D >H c R< ׯI  F:d `gfJsZ`gfJ \   0{!t&2Z2ZK2ZRE&3hI͜7 (I͜7 |"2')R7t*4~AzK*cf +DŽz+"W+&. +QIG +ۍ._.m.)E\g `/m-U " /ɜMn I/'p#nS/ abv 0i"dK 1K8O 3_? 3Z 3h\4v@$+ 4ޛg7| 6FF8>sZ8l_2 9nDi9nDi:|p^j ;'>> @XC A NL A N BUA5CLdD  D3f5Eĵ,Eĵ,Fc]Fc] G7ƪs G-c A?4G-c A ('Gd SHG7jI(gt+NjJl#JeX_ X&רf $ ZEci?ZɤARv[j \ &; (^M0 _&ŕ $_>:xU!_0ɞ5s&`L# ayl`8!c bqNLLc bqNLacFh,۴cFh,۴dNtdPYNdyDd-XV $e~~& f\MP^ 'f\MP^ gAc0 $ gAc0 gAc0 g2͒0?gQ;?ho\oLbhdei F3?i F3 it%OjdYkb7=ҖNkb7=ҖRk4RٝZRknN ^ klXAljh,2 ljh,2 n [BRnp ~*np ~!np ~Q!np ~Knp ~dnp ~ np ~ nx[9[Un䚢\ 1n`_ px 7? r;JBe r;JBeYr;JBe r;JBe isxa![ sN ?sN s t2&s v4?dx qyО 'yQl#] {nef4{ne -2{B! |~ }mQ}Fq}FqHAD Lq`Q. ǀMTZ5tǀMTZ5th ǀ~R m ǁ4ϰǁ4ϰǁ5,  ǁbܖ(ǂ k m ǂPƎ DŽRslaDžM{O?Dž`wqN džDi LJ[q y LJlwR vLJ3.BRLj|wRk?lj9F NJՃc,WNJՃc,W]NJՃc,WNj._p (NjCfL Njur[ nj3?nj3?L&nj3?Z njgcvG $ njOm0njOm0nj{=>Znj{=>anj{=>Snj{=>ǎQtS#ǎQtǏ:Ǐ V Ǐ 9Ǐ+c Ǐ+c Ǐ+c ǐ7Hj ǐPk&ǓG%ǓGD ǔ ;Iǔi(?ǕNǖ}Ǘ[X1vǗ j ǗG# e&ǘ)qf ǘo qc ǘ=OjA1[ǘ Ȅ ǜԍ U ǝs{ǝơx44 \ Ǟv{$TsǞv{$TsǞv{$TsS&Ǟv{$TsǞv{$TsǞv{$TsQ Ǟv{$Ts Ǡ< e]/Ǡ1 ǣNFI8e iǣNFI8e?ǣ$'j s4ǤNǤ}NKǤ&ǤDSsǥr~M ǥr~MK Ǧ$lTSQgRaǧWɕs.ǧWɕ,ǧWɕ Ǩ &$Ǩ &RǨSN~ ǩ2-Ug cǩ2-Ug? ǩɽHlrRǪԕJǬ Cǭ J 2s Ǯ ]$Ǯ k'JǮ]Ko ǯ$z ǯ: ǯe8q 2DZA?:LjDZA?:L Dz=Hx? dzgFtǵfr" Ƕ?ln ǷFuV ǷG*<]SǸ:Qǹ{κ' -ǹZǻ1͙ǻ; Y?ǻ; Y2Ǽ Ǽ8.L XǼ8.L BǼ8.L<Ǽ8.L 6Ǽ8.L/Ǽ8.Lt!Ǽ8.L Ǽ?6ǾH6©ǾEڧǿ|d j ܶ^$ʾ=x gyKۅa i<ۅaۅa `qNc,@q^mx ƺn)BHU Nf[; ʾ uNL*ə=S }& e X/0H ʙLc2 ʙLc2 V^p? ́#IW?E.-hjt!-hj: @.¿t n 'p; ('p;8 V, 1Cѹ3 e3 iq3 n3 ag3N3 3 Q sSf<\ pG*?f e -nh󵙏=r󵙏=U󵙏=󵙏=цiVцRъeM , O| Oc i Ocj #VN:gkLETRcs yP, $ 6$ǬF \oz6Qh0`OIL ) ׮R@ÄNTb ڬ?6{ xlY FZ –_k`–_kjS–_ks–_k ( Z G? ᆴ+ .|).|=Z 9 $ގ ;SЄ 䀚b? M MR'_CR_C_CQ s QbJR)v3 +v3?v3  ZEW~ Dk # ' ƢU' ƢUR' ƢU__k__ qL MMI? n ? ',5St',5S g9'=&g9'=υL1υ x4isx4i Fx4i #x4ijf Z mK(*]/RE3/F rq۰ =R& H, ,<H, j%,I,I *[2wD b \ bk  bt [we{&|=sC>4:սJ 34:սJ%4:սJj wd)h׆@R]ä iNR s$ VcUGa VcUG [\R_t ~?!! u!}dY^o "(n"(n"(n g"7.6,"L-Z ^$"L-Z c# tO? #Q=n7U #kzc $\gn %J| &xWXoe & H j'!jJ(qGd(qGY*,_4:b*ٱ ev +_Ni@ +q.hŏ $+q.hŏ+q.hŏjB+q.hŏ !+q.hŏ +q.hŏs+q.hŏ e,t%a :,t%a,t%a ,t%a /h 0߉% s2n]2n]2 (t , 2|H%3aeB͍5Xc:#'5Xc:"6`ȦŸ[6U.6U 6Q13 7  :7  /7 j*7 ?7  8hZ 8kP9 j9 ȹR =uRxt=uRxj=Pa@=Pa@=Pa@]=Pa@?:sN c?{Q`@9ҬNt@9ҬNk@9ҬNsB?% BϯUJKCj|XCj|j DY,REq{FBO&a3F bD3F b$ Fv`d (#Fv`dHeCÇ HΦ| I lI)`J vSW %J vSW L:_M\jlNyH,NXIuNr N[PupQu呰 Qva4R*@RR*@R%R*@R ,!R*@R R*@R S ULR)ULR XG-YP X_i XV>7EQXV>7EZ`ٵZ`ٵ ZeCZ Z [7SY{ \|y]3\ '{\ '\ 'N\78?^M`)^/"k)_ #8#S_c/ ~ _MI i`Jg`; a`;`; $ a< Ua#k c%h?c0I* d<(h #xdfN r] dfN r] j eB\5 S fX+f\bHg3hؙ?iSai2OKYiY/R jhu i l-\Z1lvۈ+lvۈ+slvۈ+ilvۈ+Wlvۈ+:m3 &m3 m䠀?%nJʁ s o]< o3jHso3jH (p*r q6+mQ qTEduqTEdusC0sKtKt|+St+ t񏐂 vN7Y|wxX Q xӋbD!yIZ yBZ9C8/yBZ9C8 yH8 dyN]R[yN]8yN]Kzö3Jzfd {Pާj-{Pާ {Pާ{hmN |Nw+ a ~ ~~ $V[u \Ÿr iȁ ~3mȁ ~3]]ȁL v ȁ`K4ȁ+ ݕ;ȁ+ ݕȁ+ ݕȁ+ ݕ]Ȃ>m a ȄFqF ȅ_2^L ȆVR ȆVȇpJJ gȇpJJ?4ȇpJJ ȇpJJ $ Ȉ!gۯ|$Ȉ!gۯ i Ȉ!gۯs ȈT (ȈTȈTsȈȜ+T"K9ȈȜ+T"# ȉ" ȉ:1a. ȉ#ȉ# ȉ*D ȉ,F ȋ<ȋ< \ ȋ@Q Ȍx>?tR[Ȍx>?tȍɜ=ȎWU!Ȏzo ȏzBoC+ȏzBoCR Ȑ%D! ȑgYZ'ȑ;!= Ȓ]OBڴYIȒk'b ȒE ȓ? )Ȕ=[  ȔV ȕ4.ڎ/ȕ4.ڎ ȕo]\Y Ț^@} -Ț^@} :ȜF*aHGȜF*aHȜ6 ȝ"M , ȝ"M ȝ燾 Ȟƚds<Ȟƚds +Ȟƚds Ƞ ݰy ȠI]ȠI$ȡICx 1ȡvN.i Ȣϯ# Ȣ5Q4X s!ȣ@ ȣ@jȣ@ Ȥ2lj;Ȥ2lȤ2l (SȤ2lȤvO> %ȤvO>?Ȥ{D5CjȤYo= Da Da Da Da ( -v _? a U˽3a ˽3a j ̰hN; ͅJk H $=S Δ6-W /Δ6-W#Η S ς"#[ ς"#S =A дk#\N$ 3LB$ 3 _ wyjwyfϣR,ϣR*,R1\JV-IW؈v0L )q B`;2"9{c+j3DirU rݵRY 2Y a YY YêB, 3H 3H bى G bى =\$ g <~J G~k,$ G~k, z(;B#/H $/H s-OSK Pz[ [q ?J6G?vgu7]v  %p{s y%K;! MZTMZTzMZTDyV|\j UbNiUbNiUbNi /: 'c!vvO(!vvO ,;Ʉq[&2kjDb5Ot ٖU;*ӮUs z.΁ " TBvK# "$ R i%1 pV&S9_x #{<N3 v 3 v3 v s?GWj ;EsRs(Ϊcv ꢈug S ֔` {NdZ $dZtdZjOX iOXbOX DOX|OX OX \ prK bQ?}򉺭 짳2R짳2Q 'D !]R b awN} b b ߁/_t_ ߁/_ & ߁/_ i ߁/_ .<. Ko t & > ,pj J" J" s WSC  WSC| WSC <  < \ hp˙` } {:s#'' &"  R_]  ^"0b ^"0  ^"0 ,puL; !V?[~?V?[~ [0b0b M=2W2jW2 澠FeK򳠴 -k&[ ^1R(  ,Vj| aj8 aj8aj8TLvdK wu?5po B?+Bj uT@D uT@!ȴP 5!ȴP ,u!ȴP y!ȴP (%se'% Y % Y?&)Z \ &ҳ] /&ҳ] i&d&1=?'2*~'2*1'B?:'~j_q''~j_qL#'~j_qR)/I )Є`s )l'XA)l'XAG)l'XA$ *X."8/*sFxL*sFx+[|] -SoĹ?)-a}w_ -};N-_,. '.  /]N0rgM 0g"1F#Η?,2E 2z:A> 2z:A>2z:A>Q2ʵx!2-DR i 2-DRj 3+4a6? 4ƞAK5_,? 5_,?` 5ub:d6,#SR6>Lр j6m {6(<ȿ 71l|a`!7Z~)7PH 9dDGy9dDGy g9dDGy 9[Jh9[JD 9[J;xjh?;7I !<4{:Z4<4{:Z4=-@ ? @uӈ~G @eݭ?sA6N0A6 BHB^yUB2]sDISZDg E_e1 F>lT*u FBFFBAFBF$OF$Q+HSjg^HSjg^BHSjg^2HSjg^0HϛXm@I ּ? J#T,5 a1J#T,5tJPUK"JPUK"R MĢ?mN3zX OjS? P{`dSS8usSM HW˻5MsWqA<-;WqA<-Y#n%[rv \:kuL\-D \-Dt ^T9r;^T9r^T9r ^T9r^T9rQ ^T9rR^T9rI^T9rY^T9rY.^T9rL _| _7Hc c~c9SC!dRwh>diJ 7do*D ,eq f^g; fa5IG (6fa5IGj,fa5IG#gE0EN gӜ_BK i-t i;+ jw@N8 jE ? j$M  k2. g k2)qekE! hkE! s kh3kha(khk|>"k|>lWkƚdmƇ(tmƇ(tpv?pt27 p&ߧ $ q:X rT`s\6ARs\6As\6AsEd s󔩅5)D tb St= Hv-tZ u#SUu#S6u#SSuG7 yMhz$_z {N.Z}jD ? }^"Z }^"Z| ~ 6=QU ɀ M@Y !ɀ M@Y?ɁReN,%ɁtBfuɁtBfuzɁtBfuDEɁtBfuɁtBfu Ƀ;o6Ƀ;o6Ƀ;o6%ɃʤS ɄI \Ʌ2'k)ɆS?,$ Ɇ1OL=Ɇ1O ɇI]ɈAd3$<ɈAd3ɋCH0Kɋv3b1t ɋQ(AZ ɌG6 Ɍ5NO Ɏ2S_ ɎAQ ɏadG ɐA"_dɑCɑIHɓ`_ɓ>YL7ɓ>Y,ɔbH) +ɔH'.ɔH'. (2ɔH'.ɔH'. ɔH'. iɔi9GC ,ɕџ , ɖ,0R ɗf) ɗƹC ɘ "ɘ)e˱ $əS,əL#əɚu \YIZɚu \YIZ8ɛ<tɛtɛ ɛ}ɜu}'A ɞH] ɞcɞc [ɞc ɟ mĚt/ɠ7sB4%ɠ>/Cɠf}?)ɠ  ɠj' ɡ)CCɡ5;ɡ5 ,(ɡ5 ɢYtQv ɢk4_ (ɢk4_ ɣ>@ɤEYX ɤ3-B ɤ% ɤ% ɥlFn< e@ɥY a ɥY e ɩ ;Kަɪw1I^ ɪ9ZNs ɪ9ZNsɪ9ZNs gɪ)s ɪv9j~{ ɪΪ t ɫ57 $ ɫ57? ɬ^L^鵌$ɭVi6@ɭVi6@K ɮ+ ɮƦ!t ɮ!)\ ɮ!)\R ɮ}=ɯB4[ \ɯvU4 ,DɰA`G ɲ'j!ɲ'jɲӭ c ɳ_SXM ɴ|VOɴ*6ɵ«d ɷءrdv Kؠ $%Kؠ|HvRفRJ#q#GpRYLGzȥBn?2SS ydOydOEJ (R?y{ KAt7 DYO] \M"S \M"d fy Pje? f䂜ʀR!Lu o U!ϊ]j;!ϊ]jd kHgKkHgKKnj 蠿U Bl ( Bls n(1|kQd)|kQ_ꛪCAG \eꛪCAG a9= 5%?CJR%G˔< 4 ( 3Džk@1^%1^;l O\-7"DFЦR ЦRs Z "b[D$4E^) S KC $  , -M)/kQp-| 86{ Y ,ZYY 8YjY Bl09Bl0e 2$2 2 K  tiK   K  k Cv ||s$Ps0$Pk'$Pt ƬEDƬEQ ƬE Sz<=? *tH0 u=,g`J s)<j *E0.m6"ȗ dtcR&NcR&HcR&Q5cR&"cR&cR&DcR& N "N3D S+N6R7 ,/r\ 2 -4Q{B? L; jE ".^ ZqVr"K4 %VN ]\ 3 ¯HK FtW Ft  Ft EMZa ; qtb!)N-b!)N <b!)N ~cX 1~cX~cX ~cX k)> |~y m% 2_ jjj,jJ%* J%*t & # _q7jYw/  < 4 < < <K  v﬊8o Gv WBD ¡P  iz >-F>-F> ?-A!8> ?-A!>S8/vj?^D ? = ? ?МN@];_#Y@];_$G@];_@@];_6@- A tAh-N_ A,U*CuBq;[ _ Cw"/ CxCTrBC! C K$ $ D~>RFc+,XoF#|(F=  Hgh IUJ2A  IMB[ IQtH* I,tJ֓JfVk\-JfVkJClLl% LyL{ĩL{ĩYL{ĩ M>|*QI>M>|*QI9MFNs\HNs\UOa>%O^0} O?RO?dAPJrn?Q*V] QXzb݂ , QKRCn2% RP$RPSD/v6SD/ SC۫ V匚 VS.[R &VS.[``VS.[ W4lW2Ʒ{k-W2Ʒ{-Wc靦%v X X  X0_CSXK;9G Yq",zYi5lae ]ʤ;i ]BBN$]5䷽C]5䷽L^W(I^ئa _78 $_WN߂%| `H z|1D a q@,, a q@,, s|a q@,, |a$諀Y aTa$? aOlcA\cA\cA\ dˋjRdˋ .dˋd<őv eJ^@jeHNf=05?f73h fTaN -guS' # h 3I4vh 3I4 i~nrZ)i~nri~nr]i~nrk.O[mҞtt5mY n 6 n*|iGLnyp> nyp>+no>K (=no>K ( o〉T o〉TpS@p-|$p-|KqoG%q-mQl s%q-mQl q-mQls rd4G drd4G (rd4G %rd4G r_-a t$̶b t /bYt /b t /bwH%kJwNKPCr aIwNKPCr )wNKPCr w% x]֢ y]u${= u4L{{o{'{' {'C {/Wp c}|qS}|qL}|qz}|q-}kb`=O}kb`=~>ĵ>~>ĵ>~`S ~RmN/C ʀ@X#? ʀ_Y-ʀ_Y- ʁJ IM ʂE/ʃ{5_ Tʃ{5_kCʃ{5_tʄN- sʄz.nʄz.Lʄz.K ʄ+i{ʄ+i{ ʅ^.bʅ^.R(ʅ^.ʅ^.ʅ^.Q ʆ, ʇOc* oʇOc* AʇЖC !ʇЖC \ʈ;{ð ʉ' 22$ʊNWY&ʊ/N^tʊJ׀ʋjLʋK^2+ʋi;B ʋ /ʌ0+ʍ>6fʎ?1ʏL-Nʏ~ՆQ ʑ܇ᖷʒS ʒ ?ʓ[Y ʔtd#ʔtd$ ʔtdN ʖ 9DʖU&ʖU&q ʖӶfb ʗ]Vm ʗ]Vm $ʗboN ʗboN r ʗbLʗx-H'S ʘ#b0M ʘPh@}ʘU1J ʘrs ʙG(<  ʚD' ,ʚcmʜFlk~ ʜjkbU ʝL $ʝL ʝLʝL  ʝL {ʝL itʝL rʝL e*ʝL ,&ʝL &ʝLj ʟjf8< % ʣ2O=ʣ"kvCʣ"kvC aʣ3Me4 . ʥ{W9 ʦM:=ʦڧO sʧ39 ʧ@'j ʩ/3Vʪ@{ׅ-ʪkY!Q $ dʪkY!Q ʪkY!Q :ʪkY!Q (,ʪkY!Q|ʪVLMʫ.$ʫ.$| ʭewx s<ʭuϽ&R+ʮ;!]v(ʮǢyv (ʮɕWIRʮɕWI<ʮɕWI ʮɕWIQʮɕWI ʮɕWIY ʯ/z] ʯyQ? ʯl  ʰZT&UCʰZT&UʱJֻ#ʱ.jʱ5)%Rʱw% (#ʱw%ʲ)⑴ ʳbvʴF<& WʴF<& L ʴҘfmʵ#m+-ʵ;wU,ʶsTS ʷE5DʷE5ʷh $ʷhʷS/S ʷS/S iʹ0ڬvʺ  ʺR^ ʺA=Sʺx} ʻwP{p ʼ&%NO ʼN^ sʼN^ " ʼY@/ ,ʼ}k*~ T$ʽ^A !ʽ^A $)ʽzyx&ʽzyx!ʽzyxʽP ,ʾnqʾnqfʾbQd ʾ` ʿ`bQ 6 +']>.G+ |@s |@(P:)(P:)f$' 3+X+XI(^2 7iƾπhyFEyFE BA 3wEiz$sus N]Ȉxh ȑ݇2ȺR '- (Nރ> lкN b [b=*A7Ϫ7 #XY:|VhЌW£L e {7^s{7^ s ѺJPѺJP ѺJP Y~fY[Y~f 6K6*P0mM *P0mM*P0mM?Nd Nd ( ̚^ k5R ۩"9N۩"9ݭ P:\ <4U =K _& ^ (A"]HSjlajl8j 8 ,۱_w%|O>z_-Dd-DRD&DKoPUWoPL%oPoP] Že +F?ju+F? d+F? ,4+F? &+F? #1pLj?Lj R SR n+\U ]6^caC?fYuNfYu*- F LG? !О;qH!О;q1}!/1}! IiM %IiM!IiMIiMj F;G? h-D%7?43z43zՊ&1γn 0 N # <đ$t qEJ$?#U[&gÑPT $<Ө \Өt7wv(t=Je Zf $: +:  ~: ?y*̳a% ,5*̳a%^.g\ ,a^.g\gPqjgPqgPq gPqjgPq `C"o? _ }| ic}| }|?}| }|R$}| !}|j}| \Iڵ>J   /9R  )1U "1sg` "1sg `Ʈ^ N }?,R [N a 5[C$ >!zuq QǛQ4k  :  : ^ؠa ^ؠ ^ؠ BfS9%V9%VZ9%VR 9%Va 9%V ҏ)0nߟ֊ 7>D ~|s[pebt'bbYqZAKXLO(䈛kQ䈛k TM[TM[%TM[KTM[D 8̒ v? ֵ #1? ֵ # *x M-y -y ,-y -y 5s? i' K fK - f'f' ͵͵͵QYfsBRY> hbZp+ z* ûAV:8ûAV:+ Yy 4cnb !7V q !Z%Y ["@V"y \"I7 v"I7 "I7 "  #\R #9 $Vܚv%j 'bbp'6z (%? (>>q (>>q )Qs *^W=(Q*j}'*j}'R +k2, +"Ĉ ,X+"Ĉ +"Ĉ s +wsF ,UzT#,UzTR,UzTQ,UzT,UzT,;Z8 ,;Z8 K ,\ډU,2MTk ,ZdS,ZdL ,ZdZ ->.n$-#UI3j.d,(*1[Dec 1 yd, \2fN 20+^20E , 31fQ3S/n441v14b4c= 4qq[4qqa 6;C 6Fћ w 6: D7īYf%7īYf 8q㌑9zkJ;r :s :ůJ&:ůJ:ůJ8"n >Oo>nA e >nA i ?x9K@ D @p?@pR @7 e0Bs9oRj+B*Ig?$Co-h1EmŖk&FS: FS: -8FS: F#LG0,dXkGb GlHdGJ\[ H;o 3H;o ( ICUt I@Sdə # IYt<&7pIYt<&7BIYt<&7"IE-iVI,s JH1%US<JV JVQJV6JV)JVf(JVJwIY KED1s6L\ MPN+)m O<*7O<*7?O<*7O<*7=gO<*7 %O<*7 . O<*7j P PO1zN Q- R9n9FR9ntR9H RcX@+S֟ UME吖 |UME吖 U(D+VlYRJB VGշ W/J: X[d< , XpZ+?xXpZ+ >Yx0 Yx0 mYs*`[zAA[?6[zAA[ ] P #]E* +]0~H'Z7]0~H' ^!Yg $cDS_ePA2RfĿygcQ}gpJN gt^gNtgt^ggdjvhLak $hLak hLakt hQjLhhQj$j~8 k&-Wk&-WkWEԺR kucGk% kҽ)`Nkҽ)` kkP>$~ l@c+ s(lBCXK6lBCXJ6lBCXDlZ m>}_"? m{>n_$\nsvoBYjoBYjsop=ͯ*ov^& p¥p¥p¥Fp¥?p¥R2p¥ pMĪ%BpMĪ%Bq<!^t q3qÐqÐj:rrr(rrr(L)rrr(Zrrr(arBRs 7/"R u+$y?u+$y u+$y :u+$y ivaF ;vaF ,y%%:F\V7yk~?u?0yNj*yNz* ; z$b z 7= a*z 7=z 7=s{ cy"{-:@Et }AɨO}AɨO}[n_ ,~-}JH~-}J e~-}J ~-}J ~-}Jb~-}JY~=#N*R/~=#N*~=#N*~=#N*a ;ݬO?{Q`   .ˀc: ˀc1dˀc1dˀoA-ˁRˁ[! ˂j˂ ˃YR 5v˄*6*˄Xy˄]ǞYYˆV|i ˆJQ]ˆٝ\ ˆٝ\ ˇ.*C)ˇ.*C ˈqϘˈx;Dˈx;D]ˈx;DˉC5 ˉC5tˉC5 ˉC5 ˉC`? ˉu!tlK ˊ ^έˊ͙w?ˋȅ7&qˌl(m ˌٺ} ˌٺ}] ˌٺ} ˌE*RˌE* ˌhRv ˎ e)Ij ˎ e)I \yˎ e)Ibmˎ e)IY"ˎ e)I ˎ e)It ˎک93ˏ]V ˏ]V ˏ]fD6Rˏ]fD6S%ːu9=vːu9=v4ːu9=vː\Չ - ˑ+fRˑyG3]ˑ8jO˒x7.˒bA, ˓i*v ˓Ph$ ˔BM"˔wd $ ˔[=k˔ik (˔ik˖d|`'ay˗7Ѿ+? ˘dz`pL ˘ ˚FiD]˛ `uIN ˛MbR ˛>1 ˛WD ˛\悧N ˜@ A˜{~,|Tj˜}`p! ˝Fe@s ˝Fe@st˝3/ ˟bM˟bKˠ+_xb!ˠ+_xbˠvs ˠ< ˡayb|ˡ˻2ˡ˻NˣęA![ˤ1k ˤsuJvJ2ˤz1e8U !˦o| , ˧fkW?a˧fkW ˧=3˩%Ng' ˩%Ng'?˫r˫zs: ˫Ľ͋[ˬotˬxz6 ˮ\  ˮ ,ˮ ˯_;d ˯{? \˯{? ˯{?t=˰L˳&.J ˵16<L˵16<˵16<SR˵16<K+˵16<a%˵16<˵VI=Hw}˵VI=Hw ˵'S`{˵H3nK ˵H3n$ ˷N5}(˷}@s˷s,˷|˷< ˹U?)˹U ˺|><:4˺4Dt ˻" ˻&SuNj ˻vUPOv0t˻D  ˻ z !˼&KsR?)˼&KsR (#˼ZD ˼:ԟ t ˽PPJ^˽PPJR2˽vd ˿RL +/Ҹ?r:'·$ľ 6b|ê7{ê7{G1 KT1N"T1igu5v 2FV1?h/V1?kV4 Ȱ? Ȱ? ,Ȱ? zɜX^LEb &e  ٘"KR Ч蓐LIUh/iJB |lB |l ,cB |lB |l gB |lB |l B |l ߒ_ UKyIKyZ@Kyd3KySKyLKyk f@ (\/$??\/$?\\/$?\/$? $ 㽨 q~'t (s ,(s?(s q' .A_aO.A_aRA1[ |QX׌jϘs2ss@ CϚ CϚ ] CϚ  &֟ckϓ3. '={TdU'={TdP WmMQ'S\ N.L'_ 7? LGF 2m`m9  ;ߢ,R@S:J=`H=`O $b`?`䳥N @LJR1x $ d9|vY? rDrSv` G'uGg [́9e Ĉ[v5QF:GoQF:G<QF:GN9QF:GQF:G ~m(W\O:w ; ;; ȧI/ -(JP ;(JP (JP (JPReSh ӱ$ ފvWR8l` `  dp[nU \ J 0քspT/xg j7-Ġ1?0-Ġ1j 䇩 a SP'+"Uh+ c[o| Ne eNe U+ 36=d36= ,b36= T36= $I<?I< $ ;> ^R?,xo &= +[Ss QKZ QK εŎ,NεŎ,εŎ,4\ѥl  A+IZ ] 9.Z " $$B fEb tI? tI u] u]  %c&t >$ $mB s ckU FK^FX x%n j#!8]Z&3(U e)=&k^A0 ՜!  4ES3l[d8^uCL?u\ ЃIj N S XYO'S\O'SKMO'S$O'SL cf8$R#cf8$ @Ex +BBu N=BS7 jk{d kkDD  b |# b ( ʽNY 2 !Q !~J[" Y N+"" "^ "LK"LS "L $$]$%?% 'wUo/)+h#Ⱦ +}w.?3+#.\ .\ i".\.\ i.\ e.\sR.\ \ .3| /Jd /it- c0h,0" 1 }?u1򲐇H>2t w4WN 3l v3v(3,/3, 4&|? 4/TYp?M4/TYpsB4/TYp i4´[ 4WD| 59 c5砞v 8R8HX :o;M:EuH ;F&g+;N;11N \;^07GDd>7GFDw7 Hs(ːSI>XsI>X ,I>XJK(C׹I|K(C׹I|LdNl:2LdNl:RL֠h: M.' M9}]$s NʲXkNC"W6NC"WKNC"WNjV+NjV+NjV+ OV'-S O އP S-Ű i S-Ű|LS-Ű aS-Ű S-Ű Sa)).7vSνs?SyN R'SZⲻ4SZⲻLSZⲻKSZⲻS4SZⲻSZⲻTף>t: U&g햡CU&g햡!U&g햡Uh94t)Uh94kVLsaVLk,VLt W!C ?!W!C s W!C  Wm D'X^*/"Y*X^*/"'X^*/"$YfavZ$)kRZU|{e!#Zȴ'|j$Zȴ'|t[Y# , \Gb89CR]j'hR _;UʹR _^Pe`T3,D`T3,D?`T3,D \ bm[ N&c.|w #c.|w c=$3*d f|Rggg˿Qhi a hi hV8IWSiFtijP' #iIc Z'iUu i kn/ ( kgKdkgKd lF/ $-liڟj2 l $ m3Rfm3RfS nnw;nnw; nd=1 oؘu @ p F% p#N5> p=a"j$a" cv|PlZ =F&yfdVF%c F%c ⋞ ɗs[f.ɗs[f *ɗs[f&ɗs[f ?s9 f7U(5 ?<(5 j<(5 t$̈́PyC ѹqK` j ߍpϔ| Vu+fx%Vu+fxU РM^0 ) t ҁuv2U-shK C[A = ) a)j[) (M_$(M_ ,!=̄jU=̄ $DKx ڣpv Pm i ܏[KTQ (q<?(q<(q<mnO|2mnO mnO (mnO }2ލ$JRmލ$JR_ލ$JRޡLgx ,_gJ|%_gJ|_gJ| ,,+HGC,+HG8ʢ5e1t!zfC μ H;M 䍘[䍘5+K<-T*uGDT*uGĆ2y$L>|x$L> (H$L>FxvDB}BB}1f $ @RGĩ E`td., <S hd"N֤N2v XQj ף(ף ף# Ŗv 1 Ͻ#W `T s`d&w/ scq>H:@ ٞ.}j.} N.}t.} i6P k0i wW @.9R@.9 ^k ܨtLJb\&m"yKZY$̊敲D1h V L? NY$ NYSNY k٘C k٘ 8tBm K (<`I `IY`I `Ij`IbQ`I 6`It`I %ZwCDy"L 7 } sa#w4K;ڢK;ڢ| آo PRj% !<7 8 6Zqd~N g#~N | ZZ  J > Jj .Ƹ 3İg  l a+ A]q E A]q A]q ^ +b K+b +b +b D cJ|[cJ HcJh6cJ +)cJsxp{R1$K51$R QjQQ ,3Q]$d`XtBuHK&PK,&P&P&P>e^֚ i}_ (}_ jHϯS HϯS? \# ^m$R"WR ^ R"WR [  @ R 8V e{ )'d |H4?:DMڣ^S2Mڣ^K) &B9L  h #J{?C#? #)S$_E4s $=?$D %tSyR%C/o? &H '>LO 'D( ? 'b9.GRC&a>} ?}@Ò*Hd AhA+\ CA1m% C=RPCʻ?rDW-QDW-Q# DDɊ_j2EmXtEmXt EmXt EmXt ,F(XF(F(F/ # G1.%GPSRGⱩ6H$\5 HOHp><JdF<GJgK T`Lm-;$MWTESMKN~DL3 O+[O+[ P xP xS}P x P%P1wKP1w Q.9dPQ.93Q.9#Qd Qg^ ,"Qg^hRix= R[go S #O T T!v? T`T\lv T`10TǙ#"R T4vt$T4vs U j9U?qrt] U #V@D,6Wtѣw Wtѣw iWtѣw Wu9Gu Xr Xk0BXk0BtXk0B YyInŭYG ZG_*Z ڦ Z$"QGZC%Q. xZC%Q.ZC%Q.YZC%Q.ZNZD> >ZD>YiZD>]S L]S ,+]S (^{ _)?s`Rci # `&NCJ`&NQ`ʤ uvaS -~? aƖϹaƖϹ aƖϹ aٕbj=X $cNe] a'cNe]9ck" c:re{#dKe2<  dKe2<  dl"Ye=]J ce)&8`.fϛfygo\\v0g$h2r h2r iqNiqj??j{ jgx jgx k-YI kXQ liz1 lC\n: lC\n: o#}y a p.k.p Wo7 (7p Wo7 ipse" q?o\fL#qepr,q= *q=jq= r LZr y r y sXd s,ǨZOYOs,ǨZOt_ $tpJ/ tƧ'uAϼRuMLFcRNx+B=2?)y z;3 y '2ݠ! y '2ݠ!yT3dR&b"ySt's y -K yO6 yO6K yO6 zNX9NczNX9 |~3|9}?'I (}?'I }?'I }?'Ij ~a ~a #~udD C)*o?C)*o iC)*o bK ># ̀:V,S̀NsCP%| P%|? (v ,V"6V"5= ;ft5= ;f (%5= ;fk R˖ZtJJ^ Tb#kSP^j ΢7uR=Cc |W*|W*}-(,}-(,09-}I19-}I9-}IҺ!d? Į]tN0աR1L~.աR1L~. ցArO`ցArO` , ֒d D*4d"D*4d 3ef ظ ظ %o{v څ97`k>څ97`tVRyVCVm (#Vm wwĜ 6{f; w ݁T c]Ӣgc]ӢQߕO񾒄LߕO񾒄f ߿~ntMzN%: . [ ?Dо g?Dо9 ? Ы +wUId ?'e 9h a?hvh h , mfyJ4/N =w.=w. *B ꉠ'3Bq rB|9ڍ?/_d3" mVbym[? ?<JJ#ɢ Dվ<~ɾ+Q:TC:Tz:TR 9> 2/V 2/V (2/V i2/Vj2/V $2/Vsƒv%$?F܎'?F܎Uck\Mԧ3KHMԧ3CMԧ3Mԧ3Mԧ3 ]?s, 65GNZ^ Ƹw ڨ_fs_fshC.?oP2L Ov}1p&,/Ǔd}A\ ^1qG1qGQ :N= =|)?Æj0[ vvR? ꮖ>X ꮖ>X aꮖ>Xt A t 4K  4K Y haNQS%ڠ$ N \ N a ?7 ?7 ?7 pMfY Ț/\?  a %@"iP ] ?j q!c @j}3R! @j}3K ,QZ$ Li {71 ͅ  q twsڗ Cb6^# Eu"EuF  V ,ʯ(N@ WD avɊ y@!xdNX;F I* " m; .m(\ ۬hzmd ۬hzm -7X? O_K ;:I:If 홬 !z?# !W UO"Q; "kSQ"kS#{$;7#$Sۄ$K % Y,rs% Y,r3% Y,r &gk&Y'6& r 'w%v ) Y) )B9_P $ )džO ?* 40+ 0#N+, ,&^#d- ;' \e-MFC .Ks2.K.۞b.۞Q.۞KZ.۞08l`0[ͺ2G0wn> 0} 2]uŴ"2]uŴ2]uŴ2]uŴ3UI_`4%rrE49֕ 6U]7Wz^cK 7nBiU e8X-h 8x==?f R8x==?f#;~ӻ;K;~ӻ;;~ӻ;<ܼ7r <k3= =y- >ed_?ԧH?[^vf U?[^vf|H?[^vf?[^vf ?-A @kuqD @}Ji?AnOA]RtRVA'+eA'+ B!TWB C(C&NFEDEDEDQ,ED)EDEDd FZ1? FZ1 FPs]rHxa@jIO'Imv( Jm!5;? K5\AL K9wu Ko&&O? K"#E ,lK Le宥?/LP+MM #?(Mu! PGQFYsPʷU Pݩ0NPݩ0Pa@ #Q\*G cQdg&S Qtdx+8R߹Z \ R߹Z? RƏ>sSKv , U~@ $U~@ Wvj^WvjHWvjXT CsCNYZѠN [&d[{j[I~ 3[I~ $[I~ a \m=T?\Q/]B6k^P?#^P ^P _>j _L3azڝ9azڝ azڝ ( ad]a,- a,-bZ"bL+bQ<\ bEAcfS . cV` ,c竊Vd7c竊Vdc竊Vd] d&k? dm7 f G \f G ,9f G5f G $ fVU2q0fyY6=fM, #f  l h#-h# , h9## j5'ij5'Mj5'Lxj5'bj5'8j5'Vj5'#j5'Q j徺V kXG&? k \Kk)k mTiZ`n$$ S s oMxv#oMx on^Roe}=vp1ws rGPlR soEL t}n4 (pt}n4:3tCU t94Kt@t@uu~euCdBO w^io" wxDaR8xDa y[ z44ѻ?zrŹe} i0zrŹe} {`pI {ewד {ջ,3s |/z #~~@C^U^ K ( ΁&2"O9 ΂'Hp6΄S kuR΄s$B. ΅k#΅G8Yu Ά qs? ·.IU ·l(Ӹ\;·YY0·YY0K·YY0 m·YY0 _·YY0&·YY0 ΈgΈ1RSΈ1RLΊ˺mzΊD$[LΊD$[S ΋m# \9I΋m# \9I , Όrfkv8΍'dfkΎ$Cq gΎGHA ΎGHAs ΎXGSΐ aΐ ΐp`ΐp`ΐ 1bΑJ>mΑ{{i9 j Α嚽1tEΑ嚽1 (+Β*G= sΒ-Q;z $ Βok% ΒRG0Γ&4K :Γ&4K "Γ&4K Γ&4KsΓyP< k 'Ε3Wϴ?BΖLKh/Ζhޑ a Ζ1F Ζ1F ΗSmzPΘ6bf cΚN٦p[Κ"PΛ{ )Eh Μ! R ΜD{K ΜD{ ΜPsΜUhodΝCa0O Ξ,rXCΞEC41 S!Ξkgf]ΡY,@u cΡY,@uΡG p Σ@Σ@Σث6yΣIU ΣhX6;? Τd ΥB[YcRjpΥB[YcRbcΥH>7 ,MΥH>7 $ Υ]c$ Χ#7Ϊ0? Ϊ__ i=Ϊ__?ΫG+-ΫΫ%[ ?Ϋ[U?έI} (&έY]@<Lή=n ήH;nC z,ήfIJ PήfIJ mήfIJ ήfIJ iήe:j bήe:ήe:ήe:Rί*^s[ίF; ίs$RαKt γv'8/γc=7 j)γ‘#/ δߢlOyε8.? εLhD εLhD  εe η!.[@η}ߔn| ηGtηGt η#* ^ θ?R&θ?R& i θ$Pθ$θ$K ι<@ κ&n|Nκ, "λ μLҩlZQμLҩlZ&μ ?{ νxl` + νh` +ν#$^bν#$^bξ؇iξa" ξ՚ , οi/ ο2 L:ο2 :lzo.oG Mv [.x feD /t /b =힌 ]=힌 U?=힌 =힌 U.K2@: Q Y  ŝ4f?ŝ4fRƨ rR| R|bR|YsR|t&R| R| 2+lS!<t lo*f$v ,:zv ,:2VLkK TOu %f? ʰ/i= Cy 3@.j 7 ΢JSRI3t[8 uɕ]uɕ БF1tu_K'/ѕ ѕ e5$ c %BJ ҅#з? ҩ{C((uKNjA(uKN (uKNs(uKN ӂω $ ӭHm N cRnRԕpJVٸ ٸhٸ = `?\YX;jg$ .e UוЬ9S ٶ;x?ٽW~O[Z i× ,ډ7GwVyډ7GwVyډ7GwVyC ڔ䶤{ PO_'-0<[Govm-eA9{~a sS9{~a 9{~a?ݓDGs`ˡs("s`ˡs 1x ? mkҏ bJ@j$ؚ;Aܓ ,ؚ;Aܓ t r2N$芷($芷(r 3 `r 3 ?r 32r 3| M[ ?&(R 1iphvO Re>ʫ/+C>ʫ/+ > [?< ??XAqL{ ?XAqL{ ( @oQ$JA@oQ$JA| A 6 Ao(z .Ao(zs Ao(z? CPQ*C]Қ` D73+D $DE  FhX= j FsW"FsWk H?$우jII]Y| KXNi KRj(K֩ ,KṌtsKṌtY\KṌt WKṌtkJKṌt \#KṌttKṌt iLJZY7 LxjJ M$:e%N"I ?O .v)OiFp Oʗ9] ,Oʗ9]j(O(<YPxoyJHPxoyJPjq Pjq QEE+ R( gDS,`SE* SE* s S'ņ T?媂 T?媂 TQJDK$TQJD V*i jWf2 XT>l Y\ N+Yz?f0['Yz?f0 [7}# w![`s_,p -#[<_ ^;K^;^x]/9^sŇuj _,6_~TO_s&_ _˹ (`P arAC6arAQarAarA arA b5 baR ca9 clls cԛS f%  g#V h?Cfb iyu &Lk iz;R jh2[  kH~% (%lK i lUmE nOv, nm=UKGnm=UKDAnm=UKQ'oTQ6p`T=8D pH* q ~'Ɔa rZ#BŚrPvrP cr@T" rs s[kt(GaIP t(GaIR tzZUD (Nue&v 71v#RQv#RQ yqo~)[z$wמzH$ |f # } [|} [|}WfS]&}WfS]~u} ~hsd1> 4bπ;K0π;L πgn?π@RK ρ4Aρ4AρQ[ -ρVy)ρVy ρܻC ςIn0LςIn0ςͶ3 ςfQX zυ +I%υ +Iυ +I υU7 φTbBφTb φTbR φ#@%nφ#@%n χۻ@K4χۻ@ψ'rHLψiR "ψiR ωdCωdC ω\Qϊ TvEϊ TvEϊG6ϋ~  ϋiola] ό!go[ ό47 9ό$v !ό$v i ό$v ώ  ώh_N&ώMakNϑ M^kzs ϒ*_>?ϓW BϓW |?ϓW ϓW i ϔϺ 0a( Ϻ 0a( m ϻ%d~ ϻ%A ϻ%A ϼ[pvcYDϾ JG!bMϾ JG!t1Ͼ\ $=vϾ5ЬJ Ͽ@3yoh cϿG{OϿY9R:ϿQ .ϿQ Ͽ.W{ H˰0H˰0/H˰0K"H˰0 b**K ҙ\ҙ\Udҙ\Nҙ\úLH,RwP=ӚP=Ӛ&L hȌ Xι.:Ŷr@I %sƈ ]?[ƈ ] OL l5 d ȱaM? ɖ4{hɖ4{ ( )Hjӡk3 #F;|YKЂ@ Lt|dK vtd8Έ Jj)v Lϸi%>Z*#xExUd& a ԗ=v"ԗ= \Ԥ?i A(&$ i":y"D?P=udJ8f =udJ8f mi=udJ8f ,=udJ8f (wjZ wj9튼](?رyۿ (#رyۿ رyۿ? Vr q2vc/ ,3&c,3&D:,3&',3&,3&`>RޅrQ dålr $H{@Nҵ8 YmW}d (YmW}d YmW}d {[j9{[j amU'mUCmUQ 78R78787878rۉp?Sۉp |+H ' . 7 SYk *%G 8m a 8m , R\A ̾ m >gRJ >gD *  *  wz˶ - wz˶ FiAS/ IlA%@h Uq( ? # HIyEN qo oqo qo  qo cqos$w[Z[k %[v̒Il?/"`{"`{ T A2ڞ ѤN„ uR„ u7„ uc!tc!hc!bc!s Pv{to 6 '  @݇rb -X_F0άS1777 ޲W [馆[馆3ptW!aЕK"Ul;"wMY"HUF "HUF "HUF "HUF i#_1#S #b7?$cHB $*8cL8$ |qL %0ô n%֢0R%p( a+%9a2%9a%9a%9a %9a %-Jt"&/N$ s &Ĕ8 &Ĕ8?'eN)2h )U0KRU*fNL+M[&S!+M[&Z+.{+,g ,ia3.gt[zd .io1Z 51G2 cl2j~]n5Gx5u7S+d 6 (26 ('6 (7D7%Cs7R a 8O 8aNyV 8{*8{* 9M J $G9a@ϣaKH9a@ϣa?9a@ϣaQ9a@ϣa 9a"? :pI ;7;t:B;t:B ;3[;Qs)' < =ʨ9sY>"HLV>"H>XwIrX?>&] >&] ( ?$zJ6?$zJv?$zJ?$zJ?$zJ ?Wl:d?xVL ,?xVL ?Z}?ZJ?Z?Z @:~'AT @d&AT @#"BM3%B``)DvDvD.؏ \Dn~4 Eߥ3WNE옦ځRFSp #FSp|F # $+F #FUAGQ`GQG#G=SLG=YG= -H JD.z J"pK>|'MxKX&?K/xjLʧB| cqL^} - M>ByJ M"MNVNf^%N<O2Gt7O2Gt PWx?$PQwNAGQL.rRQV& :QV&2QV& h,QV&sQa*R R Z9R΋^aRw VS䳣Tɾ[wKTɾ[w Tɾ[wR Tɾ[w U Z V`|oHW (;V`|oHW?xV`|oHW WB,)?W6 ZF[>Z` { [<[< e [Oj~[% \1\"́G\"́]n4!N"]]R]] ^ Z^ z?^ z_K _qd `lHoa*Zm/ a aT܉ -c eKtc? 'dybN e-?Uj e9t e<D e}W}D?ep&ep ,fU3e#g..E gW!gjRh  h1ai:=/ iZfV#j3kkF;Y~<kXA.PLkc *l_6lA, oerp oerpjNoerpoerp (8oQZCk pBv~/pG3i q7%R iq"W q"W q"WZ q"W rٙ9s(u vVV!? ,w$?M?6w$?M wْ e"wْwC6 x5B%SqNxL8s xL8s x^Ox"xD xD {'>Su ={K c0f {䆢L7 |L#|^CL }6}wŞg" mSU h {\a {\a W{\a ,.{\a +{\a $'{\a i Ёt@FЂXe Ђz5.y $ ЂA'j ЂzDN: Ѓ* ЃF| ЃUs ,!Ѓ{3{Ѓ{3{Є-bЅu-?'Ѕu-gЅu-s*Ѕu- Ѕu- Ѕ,ъ?s6Ѕ,ъ?Ѕ,ъ? Ѕ,ъ? tЅFt#ЅFt"ЅFtЅFt І~ . Ї99 ЇTIGntЇdЇdK ЈsMЉ2þ-Pa # Њc+bekЋ䑑j Ќky] Ќky]tЌky]RЌky]KЌky] ЌL1 . Ќ4ЍqLm3 Ѝ; - Џ,oܾ1Џ,oܾQ0Џ,oܾD/Џ.4-Џ.4Џ7|boЏ7|bo А,P_o АxݮR(ААfEeZ TАfEeZ АfEeZj А7 Б0) rБ0) r Б0) rQ ВuL'В޻#FPВ޻#FP iГ<Д7 ZД7 Д7 XД7  ЖEtЖEkЖE $ З72 ЙڇS#Й:~Q К芐Es Л(r8 $ Л'; ЛtМo| МK-P Н sНV1Н_(( ?НɟНɟ: О]LJ;EРkPb] С3*YТRjФB;U Цѩ1aQЦѩ1aCЧ u?1Щ :G|Щ"e Ъ>C KЪ\ Ъ.<Z6Ъ.<TЪ.<a Ъ.<LЪ.<Ъ.<ЬTs<+ Ь SrЬ Ь:m| Юt!ЮgZЮg*ЮgЯ9g] IЯ9g]j Я<|;Я</аPmG+?а% Lа% бǮVwuбǮVw в p# вgGQPдW^ еCzk еZ$ ж&5] ж з5'=Bз5'=з5'=K иC2TN иC2TиC2TиH!vBй N1SKcй N1Sк5d$M=eк5d$M=e м{/Yvм{/Y м{/Y м{/Yм{/Yjн d нݺOvоBma4MY U[J=R- IURr IU)Nf]^LsGb YXA=sk s9&رb ,-*1]ζߋ ,'ζߋv'< ȡ"="N" W[1~6 1~6 = |˽D}9m/˽D}9m  SsbƚnVϺNfNu? ĠE>> 瀠= S ѷer?ҝd\cҨY5N$C sk,ڢkuN6b8uJRM v|M v| M v| M v|m-R٘jO a PO2CPO2PO2 ܍vIs t 6s4uYS 9w\6 ֞J9_).c ? ]^L?; ɇ ,; ɇs coZ? r"*tl=p@?!}Eo}Eo?ce$?ce?ce?ce .Y%g>MD1;/4_I 3 x맫j /[{4B;{4B{4Ba'59<vcYt0.Yt0. Yt0. j]a$ j  '|aj '|a? '|a a +ws+ws]T Ԥe $ 6ȰM! %Q # 4- C =- ! =- r '49v`pH:+v`pHd%_iL49^iL49+iL49 nS  nS UMbXe?hn i ّ = =o֣3R(o֣3"Zko_ 4ڕW4ڕ8u'6\"*t |(NqgV?c0Y %Q?D Gb'<Gb'< Ntbv:h !Ͱ"|[Z!Ͱ"|[S$"g. "$Ƿf#fv#n=8#n= #&-#$~&$~D$~ %-Oώ%-Oώ %8l3%8l %d S %tfi7Et %l5j &Aj&YJOL')ʝ$.'P< "'P<h'z);6?([#*8\ *,t-+d*T(80,S,K 0Od10&'lj#1Cs1Ch1kd>1U\-j,1U\-5bU;@;5Q<@Z5fM} 86p% 86p% e.86p%86p% a95WK;pYY";pY;pY$;pY# ;d0S(:!; Z' ; Z' ; Z'k; Z' 0; Z' ; Z' ; Z' =Js^*=Js^R=(!=v\ =ۏv +=1NXY=1NX>Z`]?@ l ?M6y"?M6y?Nj?N?R?N?N+A+S A:O<sA:O< A:O< Aȗ \B##]YmC +v C DZD myoD myoFbDAuD?FbDAuDF\NvGFW1UGFW1L G>!Hr H?I,ogC iI,ogC (VK^c2Z i K23qRLn!GN#LcpN17LcpN1 " NN,~ ; O'(, P%vP"8)TP=snъ)7ъR -B cы˴n$ь[X $ ь4vю^?~Rя3ѯя3ѯѐٝ:2oѐٝ:2:ѐٝ:2ѐٝ:2 ѐȆ`X4ѐȆ`XjђϨyI$ ђNw .ђNw SђNw IђNw SђNw  ѓ17(2?ѓWѓ^= ѓ^= ѓz  єBMdqєBMdqєBMdq єz7DіyĦNYіB іK x?їl! tїl! їl! (їl! iїl! їl! sjїl! Y3їl! їl! kјz5:vj!љF=<² # њOܱњOܱњOܱDњOܱњI3 CњI3 њI3 њI3 K ћ 3BLћ҇`V&ћ҇`V (ћ҇`V ,4ќsKBQќ!Dt%ќ!D #ѝ6 ў:" ўĜ^џA$~џA$~ѠiX6Y+Ѡ{)ѡ&8 #ѣX;t ѣi{ ѥ8,O% Ѧݨa5Ѧݨa ѦJD  ѧ/')l ,ѧ/')ls ѧfudk ѧW  ѧ6 ^ѧ6 tѩ0wuyuilѩ0wuyuiR7ѩ0wuyuiѩONj Ѫv S Ѫ l ѫ[K<Ѭ 7ѬrV1Q$ѬrV1 Ѭ{vۢj ѬnU#ѭ`U?ѰRQtѰutRѰ&1_i ѱ#q ѳTIK ѳ#=c ѴGѴ6Uj2ѴѴ=mѹ|hѹ1=nb ѼU ѼVa=ѽhV;ѽhVDyѽhVQtѽhV_*ѽhVѽhVDѽhVѽhVѽ Ѿ.r ]Ѿ7? ѾKg{`j ѾO3дlt1`9R/̘ /̘ ,GR~t>B²Ӿ lKs 87Y |1O- SAQ?CmSAQ?Cm SAQ?Cm (@SAQ?Cm s/SAQ?Cm SAQ?Cm Jg Cj!ǂd9 3 )%nX oCB% J o) , ʐ6 aoqPJ kj^̉wM>ảwM>~]H`" ϟ $}hs Бu] еX7еX7+ٍq6?4+z4++4+&4+4+ fc:Dў{ v7~a 7~a sy:d~cjy:d~c zGy:d~c ӢW^P|06 C!R#C! & l G(MK"׵ -׵ SVOI [VOI VOI aVOI VOI ^ VOI? "$y EDٌ # -^^a^a/پ{?M3U 3Ԉ1,ܟt ܹDq`tSIcS Ix\x ݄$s'S a AtAj;! ?  e/4e/$P 9#`? MFV ,Ty%L$GM[ "Ktʖ; Wk 4s lSuSlSuK!lSu*dI ?r sen Z0"B0" '`.t(`. "`. Biv qm%4\|>m%4\ m%4\ i E隬 E隬 6ie&p6 &M6 &z ,o p;AVB^jtB^jQ@j裗;; ;?@; &; 6(n|>?f P_f?,P_f |# N8?N8s'JNsJz Z*ʡ J•N.J•N?,!1s|^.Sd + +d +Q ?f90[VA=.? NOiv V#̃9V#̃tv%+? l9 ^]b9R9bD8+  R7ł!ǿGC'7J0C'7J0s Z: ?VZ: sa%ER#ٝ Լ' sͼs=` j vVneJ vVnea vVneU E Q&L  , LyP Ox  "b/ $ "b/ 1 "b/  "b/ x! s6 (\k .e꾶 r4 XJyNZ.1[zіD<zіKzіL& \ DҵLYϘ P@)Q jT&T C.`Mse`Ms+`MsQ `Ms]9H~_p7#, I%? &}P&}6&}'v$h+!WQv/gXg3?(/| I-/| I- /TrR0U0G$]13J13J371"sNk3{L1 ,&4`.p4vtD`k 5G25G2D 5cR(S`K<5cR(S`R5cR(S`d7'7't7'Y7u`03 7u`03 9@uď 9|: 9٩5)g? :\O ,*:\O :\O ;&?-oh i <(}S+<(}S <ɡu<ɡuQ?~ y? @.?'@. $ CfoNF,w0,~LFTAj F[.bfL $KF[.bfLIF[.bfL ,2F[.bfL FUs Hu^q If%.e cLJN܁6KM*5K`KM -SL4A VMw]#[DNBj OU?PXeQΒ2YRҶ$SHG% T@dv TӂX UܛSV{L[V{WhbX8l3jY D'dY D'+Y D' YV CYV 5YwºU [zS n$\I҃ J ^G7S # ^ٵMl s_k_gAN _kjr5`,Y)`}6D a)#0a)# , a-$ab a jTbX c}Ec.QoK c.QoR dI Q*dP eK # f ! fՁa (hewy)[Xhewy)jgy kBĿt \k|KYlll>1  l - nKlK7nI@zr oY#p= |pBa" q5TtH[r$S s"v5 v~hW- vſZx1O yL2 yL2 ZyL2 6y3d$y3d$ $ zIEs zi "{vHI {ш |q?Ft c\|*K |Tk|TV ~!/O~ *W ~y ~>ol߁*'>~? Ҁp.RҀI ͽo҂5[1g + ҂5[1gS ҃WwPnY҃WwPn ҄7/ED҄7/EV҄7/E9҄7/E$҄Nc#҄NcR҅-cݝ$A?0҅SU m ҅ک R-҆A0|rt҆A0|r&҆A0|r҆A0|r (҆A0|r ҇AT>M ҈hB_)҉Dj҉j i ҊP@2ҋ7b|ҋiiҌ, Ҍ+vҍv:CҎ- D!tҏ?Hҏ?H[ҏ?HUҏ?HUҏ?Hҏ?H Ґ/ Ґ/ =Ґfґ"$^$ґjDғX6W aҔD2o?)ҔO~Җq_> Җ# +Җ#9 Җ/'Iy?җ1Umj*ҘhxH ҙ!qSN|ҙi_CUҙi_CKҚr/#L Қ0!Mқ>aZ K қb1=ҞJ0'Rҟcx; ҟO;ҠCw? ҠsEtB ҠJqYU ҠA}9Q sҡg#yKv+Ң23NҢ23>ң:ٶkңj0 Ҫo *Ҫ-#` Ҫo Ҭ%AJҬ|} ҬAX?EҬfKҭw#_-?ү?1gѠ*ү{/g+tCү{/g+h'ү{/g+ ү{/g+ү%F YҲW=r ҳh?%ҵ`.xKҵa|C aҶFQ&ҷ\d $ Ҹ  Ҹ "Ҹ sҸ ҸD:iZ Ҹ 0Ҹ Ҹ  ҹ s@? ҹi|NҺM һIw= SҼLG0 Ҿ{\Zx38@iR| ,v%fºYR$7J (bçL] çL] _s (I3a Kd $ddd <(: niPQiPQf ǒ\0)ǝ?ǝ f5#]K ȓuom;R;;  =/k#ɂu|2 ʼrN:vi1 (N:vi1@¦*nҟqs*nҟq ͱZǦ-ΥD5k|ڷ |ڷ |ڷ K sI xSɣ; }6t}6 9}6 aK}6k7}6s7}6 iΓuΓu ̗wd?`1( 1( $ ZuV >k?fk Ck 4k (.Ҁ)*Y7M`+݆ |syS&-4[S&-4j?-/ ;c3o-~.Bo-~. r8qr8q 3;_O3;_NI I?~IsI yq ::ٗEG:F/:F/a + $*5F4ێmS ݂̐ӣQJ>3d *]-]-b2 i@2 i@ j mɠbmɠYmɠ YmɠtAmɠ ۵4,)ex* ~W, ȹB ꧊HA*anJ .da2 da2 ,%da2 $ da2 y!ztMy!z y!zy!z iy!zky!z oR o "cDvQ^ .x +"I5+"I,Q9Q+Q9&Q9LXalYGRir|ԁ Vd7 c|Vd7 (G#8^ n g5@ k@5@ R5@ t ;l퀅&` `D` Íf <3# <3#D [HrI7 a: {YPǁPd 'س c8~-m%YB# ( y*JKSAR Sq >ѿ( ө\ $\N5\N5\N5 3;n. ^R6I9x ۻ 0OMo?-0OMojc"c" W+姪(?  ԪU ԪL m( ¤6s *#IJ [ ! :R˸Y P9# g:- iJ%S }H~2U   s<  tP YA8o^ 7QR7Q 7Q >$ > r9? jMV8' #L # &䩪 &䩪 p|{ !?Ñ{~ $QÑ{~ ;>pk=;>p.Y7u Z`;!2Cs &c4$'? ys3 > T jU2)5C *ƺRW`vBg | |K  jĬYC jĬ jĬq jĬ"yI&5k J ؝j0z ؝ ؝ R ؝ ؝  ؝ e OIZ /!7R "`Q-?"bxCZ$");##<}N8#Swۭ4#Ti!#u!$5&vgS $5&vga $M웆,s %J8Ċf \ %MS}t &_(l &&'SS:['SS|-'SSz#'SS '3u '=m s 'يɵE (HeC )}g]:X ,knx7[#,W;u m,\y&d -h&<-@-zcQƲ{ (-&݈p9.+(.t~1Q3pJ?1m;s{ 1oO2Ca^3%@(s3M #<3M 5JgZW;? 5`IZ-6JCv 6Pb%6Pb7K/S7e:t7e: a 9ӡ8,t 9Ap 9w| \;8ziˆD;8ziˆ$=O|0=UNCKl cN?w9ӈ?w9ӈD"?w9ӈ-?-8|%?-8|?T J ?Fv B c@dܗ A)W|2BҚM,Bb| Bq , BAj BdF'=CCICP/ CH+DCPK E:E: AE:j EFQQ,s)ERUR FjR Fd Gpk #G4Ov HtieI4O1 *IAP%d_IAP%d[ IAP%d J%U;ZK&| sMNA9XhNNZR N7m H8 ,)OςN_޲ P矀GjQ(M QR @$Re;,ޑ R<'}[  Ska5:U==0J V$Y:V$k!W%\4W%\4W#-W#- WJ 2 z XWXY8M aXY8M Yp!Õ ,DYp!ÕYp!Õ $ Yܡ.&e ZC ]B!*c ^Κ$^Κ$K ^u;L15x ӵ9d?ӵ9d ,ӵ/SAf Ӷ65KRӷ&z_9 c ӷ߶Lq ӸߴQ \Dӹ#=c2 Ӻ}:vN Ӻ| wQӻfU Ӽwd ӼjI Ӽ( J?ӽz_ڇ ӾrȓvӾ]uTNӾg'ӿ 9Yh;QYh;l8 7fL P JbVX XmAC \4|e{S{&|e{S{#´|k Pm8] # >0<s@S!PĪQ@2"0JŬ`N>kŬ`N>s Ƨ 2FuvƧ 2Fu tƧ 2Fu Ƨ 2FujƧ 2Fu ,VƧ 2Fu %Ƨ 2Fu $ Ƨ 2Fu gbګ*a'k i 'ks Ld=? Ȓ=C«Ȓ=C« >| :on /G#+w j͞X 3`6 μ]t #؆vϴػ:(Nϴػ:(  Ǧh| ЧcUK.,8t 2dR ҕA ҕA/C6?/C6/C6 z>3S + ޥ ޥ? '[R ȋ_ BR$c*dQ ($c*dQ ,', 헕H{_!V)s  Gd8ҰRM c`,l\C \C? \C e ]! 'xr` %3 )ڬ4 W4a# Fgf& , Fgf& TQO?A04NQ04NQ?"A9O E}ԫW R/ j j \- ܏IJ3' |W\vP [i [i mg{? ɜRלs S~ S~s  "?S "  ҟ+Pc3}K#5ej/5e5e @K[W/ ?4#c ʵa+HmӞ^+HmӞRT+HmӞ+HmӞ }텓 :"/ (+7Yl$!2I ~5}bTp cDY~#]DY~#@ M#B!Kz9!Kz $ " #qФ2#qФ2'$_}v K ',l@ (%O!s(%O!t (Zoks (lxobj(jpl (>F?).S~t *8a[ ,@*~ B*~ +n5U+n5U ,1 ,V7OBRU-,ιV -,ιV -o# .#(+Y.#(+Y.' ?/P&J a /j 0&:0: 0n?B ]/0)s0W> s13 2[L 24:2p@;52p@;2p@;S3&Nl !3&Nl 3&Nl 3? 3W v93W v73>OX4L=?55m?( 5`T5`T5xʸi.6Sw6z a"6Sw6zs6[ 6b78\ j%8\ #8{cj8{c ,9/NG}R97\X 9`GF[e9`GF[U9`GF[R+9JKv-:.<=:.<= :0_;H ?/;ɩ H;ɩ ;le;l t|&ufRU* \u!7 *vXutvK4 \vXl|w} x\1 wy)ykLy4!SY yd 5 zQ<>yJ {+x{b2UVG{b2U{b2Uk {^|aQ v|aQ ! }en,}xB }bs (}bsv>}bs}bs ~V-x!~ݟ Ԁʒ Ԁ!L@Ԁ!L@L Ԁ!L@ Ԁ0Oae!Ԁ0Oae ԀMjԀMsԁ|* Ԃ Bl~?2Ԃ Bl~ ԂXgbovԂiPbyԂ>>U \ԃ ;ԃ ;ԃ ;aԃ ;Wԃ ;LGԃ ;Z ԃJ7D@ ԃJ7D@ 4ԃJ7D@ԃFK (/ԃFK |ԃFK9rԃFKYԃFK;ԃFK ԅKf]ԆjԆ°A ԇ H \ԈQ\w~eԊsc]{vWԍk28ڳ #Cԍk28ڳ c ԍ NvԎHq a ԎmsJ ,ԏyZN&_[ԑ6m@c$ ԑd ԒfY ]&ԒfY ]ԔG"\Z +ԔV8.U6Ԗ,^' Ԗ m"Ԗ0YY ԗE쏰oY?Ԙ畈a (Ԙ畈a ԙ7:i3ԙ7:i ,ԙ7:iԙ7:i ԚMS Ԛa7N ԛ<^R ԝg|1ԝg| ԝ@wԝqD ?ԝ,Ԟ=\SFԞB\tԞ{w?pԞ{w?ptԟ񷈏V Ԡ'-ԡ4Z)ԡAc+/ 3ԡAc+/ ԡYAt?ԢaԢcϬ ԣ`"*z Ԥb|#TԤb|*Ԥb| ԥ Ԧ3(fԨڥޱgd ԩqoFm ZԩD+<ԩD+<ԩԩK ԩҎדρ Ԫ֜-9(Ԫ֜-9(2Ԫ֜-9(ԪU jԪU ԬF1;!LԬR^Tԭl X(BԮ9O ԯiFiԯT$^I$ԯT$^I԰7P%԰7P]԰7P԰7P ԰Ί=u԰Ί=uԱzQPRԱzQPK Ա?gEԱZnD Ա#4Nt ԱνϫHԱνϫԱνϫ Բ pmԲ Դ 7MA cԴ 7MAcԴV@ Դ% \ԶX?ԶX Ը+r$& nԺ+WDOkԺ+WDO.Ժ+WDO]Ի#gSTԻ#gSԼhvQ{n ԼvsԽ)/dc ԾK{ԾK{ ,ԾwN+Ծѐ(q , Կȱn#s9Կȱn# , Կȱn# "[dk"[1n5fPdSR  Aw} ª7#)2K[+I0I0CI0ئ 91s ĄM 1ĘeOŏ mŷˇ[ GDR GD] GD tfGWzJ6?k 7}fYMj:Mj:Mj: oMj: iiMj:?Mj: ,Mj:K9O) ˕2O  Pe .Rd.RX\I2[̳$Lj ?Юr,R~MTH ҖAh>Ҙ ;6 Uaf2 n/'ȆbR'ȆbԺC7tԼ%jԼ% em >zlj vd ZyEB3:lB3 hB3 7>-"_u*= wEhEh<Eh(ڈ;Vu—+ 2b1$ #0 ^9~R C:FފL,8L ޠw=$ޠw= R .-I%.-I' ebYi|d ᬲ6M jY``@0 #/$UCb]:] jW~洚8Ct8NQvNQVNQ6mkj2[J/ro7ˎ 0ro7ˎ|ro7ˎjro7ˎs ҩfR {w{w eHn -T0 \a(#[ ~2 m  ۲L NHNH3A9 !q [ q [? J,]G 2FaYE!FaYE!@FaYE!FaYE!FM1Mv,v,SC8 *AB=$ ,+suiU) ` cí_gGsך ך] &s;&s $pu ? c I¾E P7= VhNQPՊz8_%Ef5 DOz E6 6 k߭a L&RD ]' O4~& _~z_~"_~CCxd $ cK-~C ŊH & '-Q^ av gL av |H av $ av  av  av i ̻ sf ̻j `Uc(BK(  L' Zg'4o Fn]XFnV yEQ י&ڄ6 \ UA?Cu3 bh٤ elfư בy.(] :T1b ,ne۲+9e۲+jLIRI0GKUOh?f(bK% Snj~-`\5Zp~-`\5~-`\5S~-`\5L 3uj 49 瑗|? 瑗|  "5*7C "3 "3 &`?&`?&`? '@< (MԿS i8(MԿS*;,@o -T\.6Vd /@A@/Hщ /nn0ڈ^~t 0ڈ^~  00 2xmR2 k 2 k 2 kD 24 M(r5`pк 5ʁ 6e C6e "6es6e| 6Xi#J7?#a9 8S,.:IUkz: a .: a i: a %;:͉^?v ;\iCG;\iC a;\iCs;6Ȉ 0;6Ȉ d  >%>%?O`s ?_Zel@/ @]Z%P $ A 썩rt0A=b 6NAck%fAG5 a'AG5? B =Z/2B:Ϥ`Bk +BA s0Cچ$|LCCچ$|$Dr@gk$D7rD7rZEiɶmơ E9AF?BRGI G7i^ H .H),PN}H| k H| k  IGt7 IB`ˀ Ktk)p M|e MF#Q Nh+pPcިiPcިPcިPcި Q#Z-hQi!hR$LӖ>IhR* Rf]NgRR^y SIו?: SK U/U1:cU ֢h + X1~Ր aXqG }Zu7? Z c ZEK \ ^:+^y/1^y/1R_Nd_^ZLauCa]U bs4sbs4 abs4tbs4j6bs4bN b:)^c+ cM2R d=Cdv hKcg: jjx? jjx k Sk;v՟? k[0F g kq 㺕dIkq 㺕kq 㺕Kkq 㺕 l)tl1gT(\ dl1gT(\ :)l1gT(\ l3tmr"l0 mr"l0 i0mr"l0mr"l0mr"l0 n o>~[b p-: r , sYo :msYo DsYo KsYoh#u< ֜s u< ֜? uXÎv?MTv?MTv?MTK v xRzjx+ x@ yW 8yGpQu&yGpQuye%&z([ϝ z([ϝ?Mz([ϝj+zV4 ,ze7 {ӍMf {<&1 i |e_R}yK }ϿTC ϿTC Հ  ՀHՊj Ձ9vd ՁmQ! ,ՂeYw|ՃEݪX Ճ %Յ(byELՅIPlQ Յzͧ?gՆߔzRՆm?<vXՆ (Ն : Շ9ս Ոa: ՉNlUK#~R/ՉNlUK#~#ՉNlUK#~Չ*-Չ*ՊhŠ-jՋ1O Ջ$B!j ՋuA( ,Սem@ N%ՍCՎQ~: ՎLz:vՎxa-G?Տ,4vՐCbJՓ.0{ a Փ<'vՔDz$a(Քii aՕ<ʫSQ ՕYՖ܏ ՗ϟA? ՗,ZTYb ՙs ՙs ,ՙs xՙs ՙs ՚$՚VHJ>՛xa՝/MR՝Hr/k ՟6r%Nՠf5. ՠ?-t աjb{<]ա#P}ȗբ@  գk9 գ7=գA"գA ,գA $ դo"եU ե Փ եAb ! ե{G Gզx զ,P "j զ9 s զ # զȕg^G8 է~ > է -8 .թ2+\ IիRe 4լKlN)խiHFsխiHFխiHF aծK?ծՑ}k7ծՑ} ծ} ~9vկ3$N?կMIVկMIկMI հ[ ?*ձ˱+A1# " ձ˱+A1# ճ:} nմ;Gմ;GմAaWT մܝNKյ ED^(յ"o>iյ%T# յ9 յ9| նۜ;,3 նU1SNո悋5 չzQ%_T չ չ\~  պkS պ?jkջD=qջxXջ]sջ]?ջ]9ջ] 8ջ] \$ռ+lj<ռ2y hռ6 վ{,EտILg`pտILg`տILg`LnտILg`Z(տILg`տILg`SտILg` տILg` տVRLJ տR;UտR;S+տR; AI?tAIXv D{_ Y AC&’q&¯’q&¯8߄f8߄R(8߄$8߄8߄K('-D@'k ^ rj$?VKǯFXOǯFXOǯFXOS m$ !m$ \˽uޒ ( ;-̅&Q**myqv<\?Qab"t2Qab"b Ј%YmȸL(*?K ," WjS9'#>Sgc 28e?sW Տi֞`}֞`}֞`Lo oYo o ٕ|>E8)Yjk}?lf2g $,V8Y4SGU , > e Ad8mRs=C jE  2RRk1H sk1HB[ 輍HK?輍HK輍HK kA97 P>6̈ [ AF ((zYd3S(zYd3V(zYd3B(zYd3!(zYd3!(zYd3{_+?$`>I? 얧/݇ 얧/݇ !ݘLksTfNbK TfNbL 椼Gz; 椼Gz椼Gz 椼Gz (b $ {#P a1{#Pj$0"'q?AE{ ,bc}R),bc}YeNYeT1K І ? ]oG,]oGCCr NCCre~ub 8f \ 0 v0 ,8Yj7 E7 \-7 ach@}B "8ejNô,NôNôSѻ HHKm%Lm%L (mC_!(mC_j!(mC_(mC_ \(mC_ J25Y/J25 $ݦ\B Ĝ vzؠhL07R oxox Joxj#ox %P])J%P]).::N9Tݦ (L9Tݦ E9Tݦ?ۨ.? 2- @  p/1K Nx0 ;C* ;CQ TRM ͼ ͼ ͼUj ͼ ͼ ~ p'|]T5|g ^ŧ_"^ŧ_? =^ra. =^ra.j=^ra. , :W :W m r_D };4W "Mv~.yj|~.yj!en1R6c rm]^ $ 㭊Z 0bJ)FE_3ٟz~YKٟz~t 3 s#3 t3 k xf?!xf ,+-U&TF&TFU&TF&(^W v&S&S '-( * )E֕3 | )NF3,*InwR *o_+!1G ,ILD & -iK - .6ej/%R;j0h r0h (;0h 0h0_a0_at 0} {1oĬ2U@(& $!2x $4 2~ 3! wP 3= 3= 4Iv4IvY64-+g6x+7"6ծFpT2?+7 |eD174 (8A v8Y߿N{&8Y߿N 8\ßͰ!8\ßͰ8\ßͰ8:. 8:. 8:. 8:.? :f1yϡ>t+ ?D&Yss ?HY?H ?,R @t6,A3[\Ɛ9A{UZ Dbbݼ0DǷ: Dc~R#DeNED&DeNEK E8GK+E:)E:)t#E:)PGE)GQrH<*H H5<H5<RHo [ IA607Y I'3JJ0<tJ0<KgڍٻKoVB?L.ort aLL9[.k Lo1x?KLo1xs2Lo1x iLo1x Lo1x M2ZCN/MPMPM۹-D Y OH/i 1OH/iOH/itOH/iYP5tBVU%P5tBVQi R Qi  RNmtRNmSF6SR&#w"SR&#wTZ!P U3Gx8a 'U;dVU;d U;d , U;d U레h V9,H8jWSu7O[?W1D bW $5W WW ,W X2{ RY9:Z Y9:Z _ZwAS:[B\U \h QK \ S \os]l%ID>]l%IR4]l%I `)(a`swxba6=tfB[gٝn e h`{sz gh&L;iMu+Z}" idSJMidSJb i5#4i-h jX9Zjaytjay a m/8] mpm2@xympm2@xn3n3n3nck Ynck *pa pd$? pczpczL q<D qzи qzи qSq s6< C+tUݠԉ tV tR u xvVU2/vVvZ. vVvZ.|wJ0xA $ xA  xEf cy)* 'y)* zyD"zyDUzyD/zyDzz'´ z4G8 {6e| & e sSOj*sJ #sJ÷/ ~1ր%hs Eր& .ր:6ց5Z'FցKY|ցKYsց=4{ց=4N;ւ,1 ւ,1 փ9͠ 6pփ9͠ 6&փ9͠ 6քsօn1~Z\$Bև! V) և.` (Rև.ֈWx>Q ֈ-ާֈ#sֈ#sL։oIBU[։ƠX$tNR։-] q֊ B8֊ K֋GzK%֋F+ ( ֌nv֌پO ֍6}x5K(֍6}x5֍6}x5 ֍בa:? ֎=x֐UΑT ֐5Aj ֑d盤_t ֒^?-֒^j ֓ #֓ c ֓0J~ ֓Oȸ: ֓~HR֔Vʏ aֳ5ǎs ֳ?%} 'ֹ'ֹ2z+jֹ[w ֹ[w] ֻ@]dSv/ֻ@]dS $ֽ ־VcO:־VcO aֿl4?6ֿo7 ; 1Ct*; 1C$ 5jN9@ l"/Բf ZyUvĵ"T}% 7ĵ"T}% ,ľ]7L|9/J ƛW{ Qqv.Qqv_N {91p -D{91p ~-:c7 u3̿F6>? ̀׵Z ͭ+?| l]r $]3 Q]3 a׌癵׌癵 ג3_A Q׼|g *5QE!0 L}m%f #ھ*|: F備S_[ hp{+n6 \8av> 2 Q`Q` ގE} cGގE} #޲yܼ 9A ~[ߧMߧM \ CUR!I ;&Yל Z*ZZL 65&H,R utvL~Ap{\ R@[ $S^@Ipy l(6h @@/@ 7) Kx7b"5 )kEa)kEaaG)kEaZ)kEa 9)h +[FS/Og/Og Hx! >-줛0DՎAj I/u (I/u %>,g&ψ ψ i⬗T/pMiDs:7lo%ZR o‚$ 6Lq 56^ mA U O /_AN R iMrMj+iMrM?iMrM i Ƌ%"0iR} \nw 2 u> au>: [z %\ i $,GOe>P$pJR T֜ 5vV Qi.G O6=#\PX?>PX :P7H:P7H n˳-0ՠ =SHNW R61Z ( Z w[Z w*~kK*~k JTnE{4JTnE{JTnE{JTnE{QڝgD`bN0+N0+ G 3tL@ gy2& |  N~ \( ͟_J+_J , $p [ L u߱v e e Ee .͗+T$2Oui-צRR ]AC  qa5clWs*a5clWt ˆKJ _~  E4P{ "擰1"^Eӻ$YU8 +_\ '7ޙeuyMbuyMuyM6v/ZZXGZX ZX ZXY 8 zWbl?k܉sRN/(g?/(g c P_5/ j0"j )| 9stQ *@>(iR s "\pn$#8#Q #Mf $#Mf?#6 C$h2$&Iv>%^q+-S%TfJ'' (q:. $(u RH(u (eͣ|D(eͣ ).*2 +`(@,:2 -02 /3gNF/ryE[/syq /!Үق?0{#0?0{#0 (0{#0 4?04 g4 797I.y3K7I.y3L7I.y39Ľ? 9u`<79u`<7E9u`<79u`<7:4+ m:LAKcj7:LAKc-:LAKc=DcQ?9=DcQ \=DcQ =DcQ =yk V $ >w^8, >w^8,R >POo@!p-{ AO.? A-#1=B$ϔ B{c #^B`P셰D B`P셰J DH? u*DH? u Dlؐj"Dlؐ D5mEh|VEtX#% Hߡ3IﺷIﺷIܼ>TJ+s| J+s| \ KYz& Ky($%NKsrcKsrcLK/Vg KԔH+L_| Ld@2Mhb@ $M; N(k]dNP`R aQl„d Sƿ~?-UBs V+&s V&M^v?&X7p| Y9bq ( Y3f YΤKCZoK| :Z~iy Z~iy|ZXL[@ ]4$(]4$K$]4$]4$^n^o_#_c; $ _ە0` *aom&?ZatS $a~aeWVh<bk((R:bk((Rbk((R#bk((R bk((Rblg߅ wc-R  c-R c-R  c-R  cvHcvHfkR a4fkR|-fkR $fkR ,f #/ɂ Gf #/ɂ f #/ɂt fqEgg_fbN:h=Xh=XUhx@iShx@iShx@iS iq5ONjR̟j恋-5k 9<k 9Rpkq"r? ld)'H l/;g[l/;g[Rl/;g[ l_v N o[BsoHg oHg aoHg?p̮Nv r7Pnsry; d@ry; (soKbsoKbCsoKbQ6sz^Nu( u6$ #"u6$| wEIH x` M x㵩׵ x)Z/y_~ y Nvkz~r zXL~zA%N{~6 s | !w1|6l}Z&}?iU p?}?iU p }ZnL?0~@/MN~⦢C )"-׀ 3޿ ׀ Cׁ/9 c ׅ!7FRׅ+W ׅ_0 %׆;9t ׆SC%d?v׆SC%d? iׇR!p $׈ 6^ ׈ 6^ ׉D~? ׊ G׊v)׋yvWB+׌F׌F ׌'\j׍ZC׍ZK׍Z5׍1ʜȻ ; ׎Wd7R׎R*0L`׎R*0V׎R*0S׎R*0׎R*0P׏Qwhs#׏RD`f בJdYבB ב799 ב:VDuד/{ss"ד/{sjד/{s דdg דn4 דn4הbMJוJGV ח5(ח5(s@ח5(?ח5(0חmחm חsDz טLѣcINט.aTטU1m י> ,יxz ]י&Rך1>N כ{ כ.g _#לI{mu לat)לaYלa ם_X[ &ם_X[ , מlzSןx>ןEzc נGz?{Nף_B&ף_B&ףO! e ףs! 2ףs! +ףs! i ףs!? ף ' ף 'tjף ' ףhI פn פץ 'lצD ,'צD צw$ ק"s רY5Oq[P'רhf ש^ܻ ת"]/ת"] ׫aXi ׫Xan׫A׫Av׫AU׫A'׫A׫Ad ׫AR ׬x[ ׬Pw׭%Ü$S׭%Ü$Sd׭w ׯ&ׯCgR] ׯCgR ׯZnfYZ.ׯZnfYװKs5ײjC;M΢0ײjC;M΢ eײjC;M΢ ׳Aq`<d-׳Aq`< ׳ۍF'׳ۍF' ״'Ӥ$״yV#4L״yV#4j׶Yna i׶Ynav׶Pɭ/.׷EEf ׷蒅b'׷蒅b׷蒅b ׸ֻqRP׸ֻq׸m3mj׸m3m?׹̠R`T׺^-2w׺Y ׺F) ׻T5U׼!sTj ׽L„ ׽L„V ׽ԕgY ׽-7?׽( ׿Jy (%׿Jy "׿Jyt ׿Z"LfY׿$-& ~ ~ ~  _ _ , -U ^\56J\56 V\ wtwk }h}z ŽLjŽLj{{? Z amgLC MmgLCt?mgLCYmgLC a%}sR%}sXs<4:  PTC.PTC]PTC dXɽ"$N N? uaq6w 6wR. H?y#*$[7}b sD[7}b \[7}b ~1s H S 4g_z3 c _>/⼫@ 8⼫@ %BW- ,%BW- Bz o-!?o-! gKyLR04G6t&R04G6 a Փ:]jՓ:]jd o`63o`6tlV$'Gt 1  4ҙ $ U*ݐ0h;?jy0h;? m0h;?#0h;? i@0h;? ,B}k G= 67vh?H]qEJVh*JVsVD!% R{> (R{>jR{> D ]? t |3 -KS f]~|T #V s #V u \ XfR K QFcq 6@#Lh2n ,%> ' lu Gd iHdsd dj d ^ a`H9 hL`X?$ $ $ $C$ @$Y e\XsYI= \MwS '\g ú dyRS MfTZQz$>机>机>机#>机>机dsk"]uӦMRͽDͽDX;d Q < !)>$r%@!ds{AD!ds{A ".K#".C#tϩjN $ ,eH s &ǵn|R'gf h'gfs'gfj'gft'gf/'gf ,,'gf $ (5z *)M*)M*)MQ.*.D5#v*̥ЮL(+ZQ +i~QTkj%++Q'i++Q'++Q'{++Q'!,'\?,'\ a-M] -M]R -M] -ͪ01 B5 *1J~01J~?+1J~'1L[)F 2H403a8?3參KN4s6" 4E0t 5퉲5퉲%5*]<7g|?, 7ؙ<U :1;:yN:;BG v;BG 9;BG  ~/ >Xߘ_@>G? @d?븍0 Af1uYBkCuE E*"E* !ErvFJj=G^1`YG^1`RGcq HSa5HSaHSa aH3i H3i ,6H3i JIGt6 | K=e|] KHU?K~u$M8WrNMbMb M|iRM|iRM̨|N,'.3 i^N9kh Ns| m N9}ٲ OT )vOx\ViÅ Ox\ViÅ OŎr e P'Of QUKNQUK RlI"wRat!?R5F_R5Ff R5FS͐; S͐; =S͐;"S͐;tS͐;T~cfGT~cfGT~cfG T9i/ U˩ UׄsV .DVv/XN0i #Ywx(Ya,Z|x ?QEZ|x ?3Z|x ? ZJd"ZJjZg# [!hA_ [ (G\#F - ]ZN<]oK]Uԩ![ta-P&  c1 ؍T؎v \ ؏`múvI؏`mú (ؐN? ؐ{EgؑR  ؑg_? ؒV  ؔ,,Y$ؔ,,YR ؔMEU[ؔST ؕ8e;j8ؕ8e;K ؕܠt'P ؖ D ؗ+]ؘKu}ؘt{@ 2ؘt{@h ؙ0-^ؙsؙؙ hR#ؙ hK ؚ0vN ؚL]> ؚL]> /ؚL]> ؚ|1$ ؜*'؝q?؝q ؞l ؞>+ % ؞"'ؠE8iL;ؠE8iR ء+, 5 (ء+, 5ءpxآ\ьآP_ ,!إK'x^`#إ|\7 إn6Sئ5i (بYةksة=Yتk{C% $Nتk{C% iDتk{C%0تk{C%|ث4a h ثtؐX ث&c.ث&c.Kج4-lBs جk|a@ , جs< جwl3 حLjk حLj ح  'خA|1 رlpUe رwT(شכsشכt شYxشYxa9شYxpشYxLشYxشYxZeشYx:شYxd ش8 ضQA?(ضQA ضQA طXG@$ #ط-!f Dط-!f ظՒ&׎yع%S7UUY عQع?&ع?& عPk غ> + ػ&F ؼl9 ؽ laaؽamgX ؽ(Y?ؽ(Y ؽ) ؽint0ؽin P@I3j\a Oj\a &j\aj\a o t o tKo t^G0& ahR )J¡΅e Æ7?]GSj'GStģzŗڪżrK8SƄDYslƨP(aql ȝަgG #ȝަgG c ȯB$u ȯB$u ɱ9|>òt˖oSj˖o O OR@OOE8T Η $GZRdRdY W;f eMn`\aeMn`\LeMn`\eMn`\ *<S?uu"WK$WL>x]Ef>x]Ef]>x]Ef3N3k556j?[t< Zl^ c`ZuKjuK _hJ \n%g ݯc%Vݯc%V ^29 i29 i29 29t29 29 5`( ne)jne) ߸>X8G hl>, ,D? [h!eG: װ%1{K\tK\ CK\ A҃SZ o g% bT [ _X& v->V'N f}d)(f}d)f}d)f}d) $Vbd }Gj` lդ?)/W,| Ec.Ec+EcU P^s6N<d a/o7%/o7%P/o7% v}v}v} ذE3: $ >9p :P)><Dr?*3'S<*3'Z -$ RT )? Ԓ,9! Ԓ,9 e ˑCh& kM 䕙z+C.} 0?}}ɊsN}}Ɋs }}Ɋs ^/<?'2!݈a+'2!݈L'2!݈'2!݈  kD5nC@'I_j a }q*a$Bu ^ kS) Gu r3 \Vm R)G?D)G?DQn@Z:w;+s a;+s Z;+s ;+s  SN K4 SN K#[s &\8f/\8f/%1={ L1={ 81={ r%DfvDJKb JKb qα!Y`@ !Ё !"EC !"ECR !;l?Y"d/\"a{0 $@#d5#O6SN#ՇK.6? #3m)Y3+#3m) #3m) #3m) iL&ŻQ%&Ż'6\˾ $ 's[s0>[j>[h>( ?'] @JI&@M nAWz AWz|BHAt?BT?tC| F/C| F Cɫh;,?D{TQ EPt5EsZ i Ew 6 F.b0jFF cGL-rYa G( G(| G( HJR`HJR` I5kv If ^?JaCL $;JaCLKb.<4NK|~ KԨPJ\:.MNrjjMNrj ^MNrj? P9V P~;!)Q&=R R[ c k (Rw.WR S u] Sfnq&SnSfnq&$Sfnq&Sfnq&TFN-GqQ!U4/w cVEރm<[LWKL :B Wj&Du#W(80 ( Wtɨ>NXsq|?TXsq| Xsq| $ Y hY h .Y3Wjf* \f9?6N\ .Po\ . ]<]U c ]mOt 3]~<7NL ^$Y  `)%p>aK7wЅ /ar#|q"ar#|q"kc!8e9céfĸaZcéfĸacéfĸacéfĸa s ds3deJ~ z`Y fBFj>fBFt(fBF %fBFYf ^8bhPؼsh88A3}hTyH0hL hx6 >iPڀX( ibt̎} isjY˾PP?kz>URk,Qs[ lck \gl?[R(m:5YZp mR= mjVt n=n=n;^@ n;^@h nSq  n>n> *oR`9YoI&ovqh'&z =qh'&z qG rg+}Rs? s? u6& )u6& v_@X^ vjV3wKukwKuwy ax`U yI~u`83yI~u` myI~u`?z#vCFz)!7Kz)!7z*K^z*+z*!zO zϪk{" 3zI{" 3z )| oR}?WE1}RO! ~zLKB@'?- c;?ҼQ v9  ـI)2 ـI$?ـA|* ـ*?Rـ*? ف C$ف C$ف#eVفlBA #9فlBA c7فc|U فkWفkWj ف(pف(pSف(pق ق)N ق\* , ل,مA@辬مA@辬ن @ هzFwهzFw %ى7~Yى7~Lى7~Iى7~%ى7~ى7~ى ىqՓي{$sًCۅً^c Yt7ً^c Ys ٌªsPٍ۱ َr*ٓ萷\ ٓT%f ٔs=[/ٔ?g~DZ ٔw]ٖDPX%ٖV<$ ٖ&/3ٖ&/3٘5!uhs٘R/ ٘qځ ٘qځ٘+ ٙQ/ leٙw ٚɦ6$ٛ .O9' ٜHc͙ ٝRyIٝRyR+ٝT LU` ٝj ٝS0oV ٝS0oVhٝS0oVٞ =sٟ4&4 jjٟ cٟ eYٟ@ٟ +٠:\5b٠^~ ١X(VK ٢]Rr}L٢]Rr}٢]Rr} ٣>k i٣! ٣ E[C,٤u`K a٥ ud#٦"L(KN +٦"L(KN]٦S8TY?٦0 ^k٧Szdh٧ncG #J٧'6Z٧'6 .٧'6 &٧'6h!٧'6 ,٧'6Y٨sris٨8Ct٨8Cb٨8C w ٪X ٫ V?-٫ V ٬D Y ٬";? ٬wNK ٮUh ٮޡLp gٯ$V 0?ٯPٯP eٯPٯP ٯ5 1Iٯ5 1ٯ5 1ٱ./SٲCO ٲCO$ ٲCO ٲeUp ٲ)ٳo) ٴ?$/ /[ٴ&Z.#ٵ~ Iٵh1ٵhٵhٶr Rٶ,3 ٷٹZ2 ٺ/0Cٺ/0 ټLAټj[_hٽ5> i ٽshپZP`پZPپZPپZP4پZP1پZPپ,cR پ_]63پy\t ٿ/h0xUEPٿ/h0xUEٿ/h0xUEٿ/h0xUE ٿ|A ٿ|AKٿ|AR ,>̪ 1fe88K9 i8K9 ( 8K9| X*Itan .vn .vUn .v rQ/ŽځO (6; -Mt =q7o đ` VJ: VJ: (U! }Ѷ }Ѷ Ŭ@bNzԁ|k!Nvi8u^ G U)6+ sMwwPʝ /?,Ɠ &C`m\R $ STY4 ¨|?   TP\x z%㴇>QW㴇>/j ̲ @ .- .- ANh"׻?,Ev]?Z(\Q9+`s@ O+>ef"π@YQϵ'z  ϵ'z  ϵ'z  Qzϵ'z  ϵ'z  L йG" J5 үP$;үPR)үPҾ$z:Ӓ3 aRtӒ3 a Ӓ3 aӒ3 a$SvAO9L ՋE`SՋE`R YE*ظ%?/0K և# S DHl) g*"נ\lP j׭}Kr 77j JF? ^+JF?JF? $@=<:$HΖu g]v <Ѐ RJa . [_ _*7t*7sk>? gC!p =S &0ʘX5 mUj g  g W gtW gYT g \ Wp '? Pe_s 0A:T 0A  G5&`V &- c] * ֟h: 1WNw5+ s +FȾj qNf ܢZ ܢ ܢ|^M'hzkZ iiIK$J~ Q a Q /yDsNz&Q =%Z,v r*,ySl"ϥN 8^W%8^W Ja >3 \piae9>piae 8FT.ՆKt)T.ՆKT.ՆK G0Tq, cvnjnrQ?rQ i;h}N"h$ ,c"h$ ;"h$$"h$ ?<j  bB?@ bB ]* +=!=#O+IC $d#I $qe6R $r2ERN%mJ ~h%mJ ~hR%dӛ%U6 %#%[&<7G&<7G,&<7G&<7G &<7G &zk> &zk> a &1`[j '2gAr'2gArN'=, iL'=, s '=, g '=P\'=P\ *K'H? +s"@? +ʹz,Q 5?,iЃv -ǘ% 6 -D/L'-D/ -D/`-D/'-D/S#-D/ .ZG /v]!L?/v]!Ls/v]!L /v]!L 03N 03N 0`- 1&~sk 4 x54G? 5t_?5t_ 5͒j6gOX6(va 6(va&6(va "7T:8,8;ea 9"tj9D-R9Ffa9c-9c-]):늇):޿1 e<4 t*p>>؃N n Ar <Ar ?2AYojAw-h =Bu` BUXDO BUXDO C; FM RkFM RkFM Rk F#F F Hrɀ cK!.` K w L{˗LL{˗)L{˗(L{˗ Mqmh^Mqmh^RNBL.NO.<O O`Ah>v R}s TsI UfTn sUfTn ,Um) ,VEܞ+ WME(riCZZ-, s_ZJQ \d^KmLe\d^Km>\d^Km&\d^KmP!\Hb*\Ht ]5Sw] P;] P;] P;]A]梗]梗[^Ks$ _4o+ _Qߔ_)+we`B|a`+H(7 $`-\ aֲUaP9|s b[Sb[ +Gb[ -b[ c, cWNe/ [HgWf? g6 hy`m i6# iչ&+jn3\ k,#L: l.ϴ lBrmIMޅjnAvo,? nisU io6~b?o:w]toecoG8p2֭0? rnBpsLsV6FsV6Y sc&> tXw_ tMMS v^ vh1¨ $w|ctk w}P*wú`wú`wú`iwú`Nwú`;xG xT] xE$yZ"̌ym4ym yϤ3 z (3zs{g]c{g]c{qc  {ewU;{ew{ew| Vh>? |ǕY*|Ǖ ~+ۑ $3~+ۑ ,~+ۑ AP<]> )AP<]>|y-Xځ!b ڂm]ڃd"*? ڃ2LQH6sڄ6!}]zڄi<"$ څ = *. S څpI )G(څ\9 g څ\9Y څd! sچ] ڇDScW ڈnC32 ,ډ Px6#ډKmr[ڊ`˓=` ڋ_wp ڋF1ڋF ڋF ^ ڌPXt ڌPX ڌn ڌn ڍD ڍD ,ڍDjiڍ#kڍ [2N&ڎ)#aF ڎmΞjJ ڎmΞjJ aڎmΞjJkڎmΞjJtZڎmΞjJsڎq< ڏ M .ڏ&;_Kڏ(w^ ڐ78 ڑU T ڑ4=R ڑ@ZtfKڒ.>kkړD9` 3ړD9`ڔi< ڔڕ);l+&3ڕ);l+&|ڕ);l+& ڕ0}Tږ# wzdږQl/] ږK3R.ږ9 ڗΨژ 1 ژ|YڝyBS ڞ\,t ,ڞ\,t ڞaAڡ  ڡ͕  ڢ,J?ڣ1~ mڣGJ;QڣUS&j@ڣUS&s<ڣUS& &ڣ+WB ڤq7ڥ9s)3 (ڥlJY M#ڥi?NڦWC|ڧڧ\ήdڧ\ήPڧ\ή2ڧ\ήQ2ڧ\ή"کW:ۨ کu = کR# کª ڪun^ ګSܤi ګSܤis ګ*N=ڬl\L&ڬl\Yڬl\S ڬ:\] Kڬ:\]  ڬi ڭ1{Aoڭ1{ARگE.QE گN7/ڱDzc/ڱ[+QڴcZm ڴcZmڴ- ںH] ں\ͯ% jںmKP8O?ںmKP8O ,ںmKP8O "ںmKP8O ںX$ ڻ2vھjwR0v6ھjwR0jڿcS l}͓#*c]Z; #mYQgŠ_*F6/Š_*F6²y m. õ~ǻ?õ~ǻ7?EFU**ĬƙjĬƙEE E , ƴ/ d#[s=PKd= )V?j\-wᩋ î+ U"Oܕˀ҅P ^t1DeQ aw1f ͐oC3cP 3cP ,3cP 3cP 3cP3cPs3cPsv3cPj93cP a13cP ̵אV {; *fu *fu m#*fu NTЈ`#гU?&гU p0=[L}هvҺ 7xN!Ԝ[wDn% c\4F<'_։,։,$։, f9f9K sװ{ ׸ T׸ T ع:Ry) [ D*6 HST FS HST FZ HST FK HST F [!α [!α mݦ [ݻ*Ov #E Y = E Y ޗn` ި=SU9U ɱ6O8C.v 9ўR[9ў]l>Z]l> s? =I9~]=OS%ȏ BRRk2r#mobnCobnobnDobn obn \@S,\@qF+ a)qF+jqF+r v~y( tB@l쐟>RO m;Ɍs [E?n~ )n~ ,n~Vn~hOn~ =n~ \9\9d oZH 񪰕< 턴 h4˛Sšg7JIn ; c$i[OKσhσh &h?MCk /(6' yg 2t +5< 4]{avHA/*HA/*ZRsO>UsO> * ? ĽZH G$3o[[ "gf"gDc6gU)G ) % ,haaꕀbInf4 !f4 :0 4!"\U >I+ LkoLko N ?9N  .7؀ .7؀ \ .7؀ \ Gt( -(y;Ry;gy;?y;z_? K3*JK*4{t4{R/s ] #KsK ,Nsfl# fl#D |?d }ucPnsV /nsV s d!k81 ~hi9 ~hi #& Q#m $AM. ՠצ?j,Q: Fa$FaL 0dxɱs30dxɱvR, ,   Kl3#1 Ѫ8 W7bO8BBy!j jn't] t T 3 .v a 6\2ߖ= $E~d s5/>\  J$!pEJY U\erFj ?` gL U?; l%j *za !Hnd !jhEA"kPBoY9"`0 #&7u"#&7u?#+( ( #hgcQ#hgc #(%$ lp $,R#$,R:$,R&$,R%GZ5R%lEj \ %p|"%jj |' ](ϩ(ϩ5(ϩZ-(ϩ[(R1Av)yix1+ , ) Uw )*v * J;O* J;+*K *m~,}2.p`ۃL R.p`ۃL D.p`ۃL B.p`ۃL Q0.p`ۃL .p`ۃL .p`ۃL K 1 n1MX? t1MX? b1PSR2 Ry 56EyR7z}N7z}N?;),;0 $;܀q";qVxUWTk>WTkO]>WTkD>WTk >WTk >WTk ?wA?w?MXXCs?[z > @T "UU@T "U @li 8 @{'v B av+C SC SEztE ,EhGE ()E $FLG" Ff)P]>f P2bu QWAQWA_QWA9QWAQWAdRv|#R:&?v S'|>LW S@T>Sh&tD\sSf?6Sf TqaqSjoUw^ (8AUw^ Uw^j Uw^ ,Uw^Uw^ $/Uw^sVȻw( $"VȻw( VȻw(kVd=" Vd="nVd="%Vd=" (Vd=" VIjVI ;W(UW(U WgIXQ)Xk1 #Xk1  Z:HbWZ:HbWZZ.:7 $ Z} QZ`t ,[D #+[Dh [VABn [܈J9=Fn\Td4 !^ĄSS^ĄSd _# aw bϙya;tYya;tya;tyXP.z/Gʵ #iz 7f {YD*v{YD*c{YD* {I ? ~G`U )~G`U~OЛt @ Vշ3*ۀY/ iۀY/j6ۀY/ہdӞ# ہe c&ہ'r :ہ'r{ہ'r " ۂY9h0 ۂۂ ۃ 55 ۄ~Xmۅ.^R? ۅ}eִۅK-- ,Kۅfa}"ۅfa}ۆ\D7 ۇ"( (ۇ6$ل*ۇ6$لZۇ6$ل ۇ6$ل ۇVFS ۇpn+Jjۇpn+J i ۊc#ۋ_ 7 ۋ_ 7 ۋw.ˬ ,ۋҘ? ۋFi?ی($ی($ یHyیHyvۍ$_֕!ێ[u=L ێuJ! sTۏm,Л#ۏ ے$Ⱥۓt +۔a6x ۔a6xs&ەyyە㭃_?ۖ?y ۖR\ ۗA*D,3ۗA*D,Dۗ*??ۙ wB]R ۙY0>EۙtB?ۚBpۛؑ+۞N/ ۟_}u۟׀H 3 ۠w? ۡWȟۣUU=ۤ\K ۥeb a3ۥebsۥebt ۥ}Keۦ=jc ۧ7(۩SY ۩~C e۩~C4۩7s9۪,s ۪;2۫Ba۬H[{A ۭoaZ ۭoaZ ۭz,( ۭz,(ۮDRx ۯD ۯD jJۯD  ۯD  ۯD  (ۯD  $ ۰DަsP۴IY?L۴wNOwu c ۴>,۵Զa_ ۶>OdR۶D~~b۶D~~?&۶D~~ c۶D~~ ۶\-~G۶{-۷':o&۷':oKۺ4! ۽o.K_۾| ۿg*,\ۿg*,\ ۿg*,\? <\_5Ƥbe~JdhYq#v/aB ŜDD Ţ_1Ţ_1ב{CS|GmH+?_T \ fA< KX3} X3} $  $@Gդ%? ɋ#} r ̊) +̊) +LB̊) +yWJLyWJL$ ͦZX? )3i nz/GžJ -0GžJs Оu \5գBK[+hu Lѭ1r|Krfӏ ;!Y ӏ ;! ӣC]?.&<)Dk/ n1. ?7n1. a+{1h[Ʀ t s 6\!#D>" إjGQ ٩ lrܻ7Kp>?ܻ7Kp> i>{ۅ^vwo{wo{ i I 4ޛFzޛFz Qk  Qk " V2a^z0EU0EU'xA68By'xA68G'xA68F} F}D r~v ׷m׷m ׷m] ۻ'we $ ,؈-'T젓s젓sLV젓s L L$^#c-ܪY^#c-ܪL{ۑHR ,d ,d9 (>cx%j~ܝx ^k/^Vhg }\hg }U w7"X<Jv`[B?Jv`[B Y.%.S( ^ N3q!#1ND#)/ D'~}3pIZ kJk(?)7 aorYLP(=e)]Mb <ܕCIT Z%(!)?k% $6unbD a3A}ja3A} a3A} ,1oR * *j !oN yG jRP &jRP? $,I? 4l/y@=*N5 B    +/ +/ ݼ| $%ИWS]N?= I&xk ]G; ]G  &dS Ҵ| , 0j5'> 0j5'K d|>j xC uA?: -kR% ;- w~ S8 CECb #CECbhpJk?K*l)ի aO Ș aO Ș Z)m :#]J? 9LBS!{{R N/ q A; {#U"+?K>aK>a 9O غ:o`DR%})gr5 %]*E s%7!?'Si,$'? t (B TkV)X O )X O i)X O )lhB)w%)w%L)Pd& +&> +A#+A#,T| F,T|],T|,T|Q,T|,T|,T|Le,T|ZW,T|N,T|3,T|U . 5R_. 5S=. 5L'. 5K. 5Q.ܹ/Ƞd 2U #n2]cjz92&߻Qv4= cB8Ċ0~8Ċ0~ (:&Z:&ZK:S+L;+BF <  ?K<  3<%rJ+ =qw{T=䳭O w6@ڞxSv8? ApGv"ApGjCds0pqR DI,?"E m EX? G1P f G> Juy $ L^|ECL^|ERsL^|EL^|EK L( iL!4d NldUTN.cZ NB{ha8 OVrROVr O. Ց OQnX Oi Q QY S rTGVBѓSaVVBѓSS=VBѓS$VBѓSVBѓSVBѓSR VBѓSL V @SD1V @S -V @SV @SW"KX6g ( XQsn5s XݵCXݵ,Y$j cY!4 Yǘ0ZE."t> "ZR $[n\\ڼq e\O\2I \6]Jޘ+H ]IwO&]IwO ^>pMj a;Y lajv bG7{ b~.C -dA -dA d"ĭdRDY evO]*e -2 e]6te]6Yg sj glS! hAo^ isjps j|"'j|"!j|"tj|" aj|" lX_ lz7d] ,lz7d]Dlz7d] lz7d]lz7d] ^lz7d] s lz7d] n|UEn|U)n|U ,n|Un|U ( pD(߇pD(߇pD(߇ qlSql$qx.?rP##roqd  sF_ HL*sF_ HsF_ H sqBAjs? sS ` sS ` saKZsaKR=saK$saKS v*i].v(@5t v_C m܎%>C[܎%>C V܎%>C H܎%>C 1܎%>C ܎%>C ܏$Ϟ S ܏Z,X ܏ A ܑW ܑWR ܑRba9ܑXjs s ܒ R^L!ܒ R^S ܒ  ܒЛ kܓ?!α2;ܓK&ܓܔ' GܔRܕPV}@ ܖ33 R c ܖU&^d ܗT 4sܗAu ܘvE&tܘvE&*ܘ轫TܚQa1 nܚQa1ܚQa1 >ܚQa1|ܜzZ<ܝʼd ܞ8) ܞ8)Sܟ FNܟ2΂ܡ}6 Jܡ}6 aܡt|Nܢ}# ܢ}#? ܥCNe 4ܥCNe iܥ4%?ܦc ܦ% ܨ EO{ ܨ=I 11D ܩAjsA ܩ \ܩޙb^ ܪo7!D ܪYJK ܫ U;)ܫI?ܬݚm tܭ:6vKܭ:6v \ܮ:4M ܰw~tSܰd2ꯛ} ܰC?ܱM,5ҵܱOõ% ܱ"iYTܲkDܳ~>'jEܵI*: ܵR $ܶb-8!0ܶpu6U ܶ';[K ܸ,s%ܺM'ܺw4` ܻ؂Eܻ؂EUܼ"3(\Rܼ" l (ܼ" ljܼ" lYܼ" l Dܼ" l iܼ" l ܽA hsܽA hܽ\  ܽی1 F'ܽ<;. ܾivk ܾq+1ܾq+L ܿ2 ۥbL*f\7S5n]R?r,XÓc,v nY䱯RlnY䱯!nY䱯nY䱯4 .-vU+   &J<& NT3I?? ȴ4;ZwmeU\;Zwme(K|o!ʛjMfO{ tPͤ~ Ώ+6cΏ+6cdϴbϴbН=vp&,^ ,CJ$U9 ^ukFv)ҔB{9 ҔB{9?tҔB{9 ^)ҔB{9 (ҔB{9j ߽m9B" B7w$:̮Vw$:̮Lw$:̮w$:̮zw$:̮>w$:̮w$:̮Sw$:̮ Ԛթ'F$ i WaNQE E E d>27+>27D LQsLQq& q& ,_&\_&]_& ١A  e @@j rϾn/rϾn/*m Q'y[y (;y yt ޢo"٥[l][IF^c-IF^c H1 H1  $^o9S(*Y9S(|9S(G9S( s9S( 9S( тt5-hE6n& udlv]kudlv]7j *Wh'SH&1a ߐS;j 屪L ( #ݵnW0v!虮Mz=?1)>"ڑ#'}N z ("g:L?+(#ȵ`i90fS SW# ;Wl (kWls-;Mmf&>Hz0? N& x\q3Sbg2bmO( w'̢?Fw'̢ P$%JP$%:CP$% (P$% +^"vlt .vlt?J! $++ i/N e;q *8u= 2j2TM=G/0~`M Mt he4OrD e4OrDwPj<>wPj wPj ,9wPjjwPj wPjwPj (=wPj -wPj-wPj ewPjs ububV?4%a881?37 p͐\7 p͐7 p͐$6Ar; 5B0V^[Ϙ /j Vlw?1Q$=-6nOiT:T[OiT:T TOiT:Tj 3ҊD3ҊmyXH*  ǡ#Z ǡ#Z  zڷ Sq S,*?7=D IX }"tZRi E K6q J?tBR q]Kq]O!7< ; #WL#WL $Poy*$Poyt$Poy$Poy %%8 &7)gt&3z $'iȝ"'*FD? 'rv 'wW5(2 HHSI9pO J/氨J+HfG Kub?#LQ M&Qق 6N/( \N@;? Oe™ O!<8OKBP>P(> 'QCxQ1@y cRfRd"(6njSzh KSzh lSzh QSzh Szh  SM"8fv T.Kis V[bW'ޮcvX. X5& $X5& c Y ;Yǵ - YV= Y ,YLRYL YL ZNoB Z'[[۾ d\&N\U e \&N\U m ]C(^ 5 $!^vs_H;ߖ * _ I \a:UY bo)lk)bo)lkD bS5cqc\ a dhV?XvdhV?XdhV?X gdF i d޹+y e d eykyv6fVY{fy< g:ɦx``; g;J)4 gFS(XY gyNgygy.gm?RhQ<> hQ<> ,ni>#x mmaB jmmaB ;ndʑfx "ndʑfx , nϟnϟs ptڻt t&r}kt7=ylSt7=ylt7=yl# t7=yl tAS8 c$t?t t Cuޯ hx7A58 z.(Z z( z7wz7wQ{l?\3? cWwQ 1OK ݀p ER#݁M bt݂ѧE݂ѧ݂ѧ ݂BY4 c݂W9k3 ݂W9k3? ݃ʼnp6"݃ʼnp6 ݃ʼnp6 ݃)X c ݃:FG ݄,Y݄9 ݅^/ ݅kN݆P! ݆ތ ݇\0i݇7E݈^ʕ ݈'=3=݈k:8. ݊1݋el݋o,*S݋o,*R ݋Wz'݋Wz݋Wz ݋i1h<݌3#  ݌@ɤ ݍ4P' ݎ)=ܥ0Oh%ݎ)=ܥ0O \ ݎ,\E ݏVCXv7ݏ!es ݏ< Sݏ< SݑuK"& (ݓKp!V 'ݓ?s ݓ?s ݔzƻRWݕqS:Co4ݖ!3 2ݗWsݘYjz!Lݙ>ݙC%m , ݙ])i ݙhDݚ`Wݚn>ݛ}* ݜZg ݜZgݝؑ-ݝؑ- ݝksF[ ݝŤ^//ݝxsr'1ݝ1߹Lݝ1߹jݝ1߹Z ݞsBR"ݞsBRjݟ.]I ݟqvsUE ݟpjx/ b ݠ=Kݡn%ȻkOݣv؍daݣ9_R ݥӤV^g ݦl ݦlt ݩ41aݬNMDݬnƒݭ};8a ݯ - ݯۼM`$tݰHϽ? ݱZ B ,ݲEG ݳL5N ݴy2y ^ݵ'ƜHjmݵ'ƜH ݵ' 'ݵ' ݵ' ݵtݶeݶ Gݶ  ݶ ݶ ݶ  ݷ Qaݷ Qqݷ Qgݷ Qݷ Qݷ Q ݷ Q ݷʳ[~t ݹKtbݺ@ٽi%Hݺ eݺ e , ݼ^DHKMݼ^DHݼ^DH$ݼ^DHJݼ^DH ݽA銣'RݽA銣' ݽCݽCZ ݾ}1c sݿnVN - ͷnJ @s vK |`? 7x0ns¸Ndm¸NCyi yi?Z#[K Ċ#ï IJKg/=? H?RŬn|Ŭn|$ SQK%SQK VE~ھTLE~ھT U:d ƕsv ɂiďK]ɂiď ɂiď ɦsKC = i}bdj RT N&? śEvЄBYp6b>}K1b>}'*'W*'W *'W *'Ws F;JMF;JMҵs'? ? F.,]Fշ".7$pշ".7=շ".7*շ".7 ހR!v;;7.5[5[5[ O O ףP', d gzBȴ9"  b4kD ۸ҵ;)a۸ҵ;)۸ҵ;)n۸ҵ;);.|\ R:͠ ݰfg8 (y(, ߬hȾ ߬hȾ 0)C Doa|OK %&6J? ڪ52 ]72 ]2 ] Lv?1q$$)H`۴}j\,DWԍ@+ $[  pHqw 4;d+4;L 4; ~# K`K` `c3I ~}P~}R _ nj* g ʟd yqByq?"yqL /"mЇjPWFPWk2lU7?i A $ rX{ m) C]~Js K $mh? ra`;p?̎ x (FsJ (S ( (L E! i # br D Ivɲ0ī aī a]')^ v:+/ C v:+/j KBb/^ a ӖLȵߍ'\aE $k'\aE '\aE  Ȫ6^& v1RN1`M#)  syņPO +⃾/+⃾ $n +| # p,SsP:zvc  Is) qb(Rc sqb(Rcsqb(RcTW_?#TW_ h0ch0c  & &| &ly.< #ca:/0"S0"LӃ rwc f=v:5L.:5 5 $ Sy 8jŲK! +"OAx "@/$* Аd'a'|  \'|  (UUY !*!3 (D*!3t*!3j;*'/,4 ] ,G2Ф (,PSW i -N$ e-5Ǽ .꡾m/v4{Kt0bC0ؽ݄{S)0ؽ݄{0O i0㚈R1OQ $ 2#~ 2#~ 3r4Hs 4ӵ :v4 $S$Y 5%56L <- JK >]</>kR|>kR >7! S>7! ?\.6?[Z醲Q?[Z醲D/?[Z醲@rJ AthE2gaPZsE2gaPZE2gaPZ E2gaPZEPةd FV^nGV-  I1tIIz% K`m K}$^vL,TFvvMA+m8(Mw2, Mc<׌ Mc<׌ (O_O OdZQPK  Rlݴ jTV'j9TV' i YUx?![THo $\a#AR \ة)\ة\ةR ].0*].0].0 ]m`? ^ܖ1'_9cx4 _#ZY `1I# b=Уbabcb`RdZW%! [ d^{A~d^{A~d뙇1?d뙇1 \Md뙇1j e,MeH'Gf hqhfdl ahfdl $Fhfdl ,+hfdl hfdlh+j & ij3OI i # ja mHǭiL; mjf mjf mhBmn; eafsoڭo) -pT ` r4 t tj$kuА0  uА0C uaҨbuaҨsvVvV]5w'vxHַ7y DGy DG  yT" z-|* ,z-|* z-|* z-|* zwL{p1 {Y|vD~Rs j ~ sGI2ހ5Qhjހ\J ށRui( *ނu ޅC,h9ޅIQ6? ޅ犅#U ކ\wRކ\wRއmC އWG ވ;ވ;ވ`ںܪ ވ\$ މx#')މo/tTފ,ފ# #ތ32uKތ32uލވ! j8ގ({0"ގ({0"ޏw(ZL%ޏf>RBޏf>R eޏf>R ޏ&Ϸ;ޏ&Ϸv ސ[ʙޑ? ޑ?s ޑ?t ޑ+ʑ $ޒSܪ=,ޒSܪ= ޓy Sޓy ] ޓy  ޓ"MgޔCMrޔCMrkޔCMrtBޔCMr (ޔCMr iޔCMrY ޕ -!ޕ%%c ,ޕ%%c ޕMd jޕMd bޖ%W%t ޖJmn\,ޖ~fU `ޖ~fU ޖ~fU i ޗ|9ޗ|9 ޗSh3j ޗSh3 ޚp=v9ޚŰ0 ޛ!Kޛ!KRޛ0AH ޛU\WޛU\W ޛ.i{X+ޜ2݆"7"ޜ'}48 fޜ'}48ޜ)31 ޜ0B@Fm ޜ0RQ ,ޝ29rU2ޝ29rS ޞn\@?ޞ3 ; ޟɥ &ޟɥkޠaY> ޡ@7D ޡJ!ޢDZsMna ޢDZsMna ޢ4ۭtSޢ4ۭ (ޢ4ۭj=ޢH% ޣ"(W ޣ̪p\ޣ̪p\!ޣ'n> i&ޣ'n>!ޣ'n>jޣ'n>ޤ E ޤOͪ , ޤ߯H*ޥDu ާJ\HyDާJ\Hyީ7my?ީ8"ީh^&tޫ!߷U ޫaR>ެNx%)ss ެt Rެ݃}ެXE=Yޭ|)NޮĊ ޱ+6= ޱܪ  ( ޱܪ  |ޱܪ 9޲0Pӂ ,޲0Pӂj ޳ o<t ޴cN޴&޴&޵8i $޵xr[T ޵vz<޶=#-޶4BfS ޶jOv ޶W`@ - ޶G8f"޶[ CK޷ +nd޹tk/ g ޺2oI޺2o޺2o޺~*E ޺DhS ^D޻)zHy޻)zHy$޻)zHy޽@޽@C޽@?޽@%޽@Q޽@C޽= !޾H|Nf޾Nk ޾@ ޾R' sBef { jR{ jI:i\&;9؎O;9؎t(7ɼvB~ \kZU p."* ğA5Ű'+ űL  wfK W3M Ƕ[?dB+Ȝ?sȜ <ȜjȜs 1 LQ $Q BQ QsQjGQ (Q , ʗsN s B? 6&b `v {£ 8e!QH8e!C͛SάLεCo|yt2j,`Ұ*=(;O s'_ uǥ (3j~(3j~נ|lj ( ס٣Rס٣ ס٣ ס٣? ׸{ʹ ׸{ʹj&jR Kߌh1KߌhKߌh] X1J%u %u g 4# $ vL° ߐF , N5 $X>RZQJ;? _0F@JT="JT=y'?')lxWlxW X]m>!I.$ .$ Ɍs ! "?)" ("ޓIyN`w@ f`w@ 8`w@ (.`w@ +:DJ}<|Qx +s&K5 8q{j 8q{ 8q{ pD# p p %&"pN vJ  vJ # yyB yy ; yyt yy ߰ Hh7.d z: z: ٖIt( ٖIk' ٖIb `]/34`]/3 snof , snof $|K"?<?L +LY N"N[pj&Xm u:-6 _|ҵ{_|ҵV_|ҵ| ݖU%ݖUn  y[+yd s3~g?+~g as6UFs6#s6;ݥf )^# 䊶 v\R uG7 $*'HQjl \-9 ! t ^xa4^xaR! &2 #R%#S#'#%]4?&%]4j!%|ϒ - %9p &PϴtmL,&PϴtmZ&Pϴtm&Pϴtm ' .#ށ?(l3+{)41spSB)OB{n6)OB{ +-)OB{l)OB{ *f{*>C8 *rqvt*rqv *rqv *@p6,i^,wo3 -z: i#-z:-J{`4-J{R(-b6<D-b6<v-b6<-b6< -B .0@di j!/p;N c093# 0S0S 1(xK2,S2۵r:4j$4j$ 4{-!4{-4hšp 4hšps 4BS6" D6&X0$0,6)Xj 6  6Lj$0| r6Lj$0| =6Lj$0|s 7Ԥ 8_ы$8x` ;]7]Tw )=aށt:>)=aށ ?"(hJh @i+0 B (C;6? D$g1 $KD$g1 DD$g1 D$g1 e D` ʋsDAע D7uJD7u D7uD7u D7u E0J̮t Eq?"Es1O&Es1O]$Eu& E!Q F̻cF`jFcž GLר>} HU@q?H\QˎH\Qˎ IG2t IaSaI,I *JTzYJa a K CJVL P L,StUCL,St5L,StL,StL,StMy0 Nsxm@@ axNsxm@@tWN|7Oc +sQ5I Sś U~I < WHE.j_XfSY| Z3$ _Z3$|*Z3$ &Z3$ g%Z3$Zg0;a , \C:&\C:& ,\ xjb_:,@?bt0_:,@?bt _S9ݪj(# _f N`ԧa #a a~C—F b zV7)b zV7Q b $fc͘8/ cAB< cAB< c̫-c\;3c\;0c\;-cU dZ~8 .e},UXk eҎR. eC6 fu&Rf;2 7 $lg7  g? hI Z]hI ZhI Zi)A $ i~?"IL iR{AR jw m kb} k ηPCl4ln#3 ln#3 m?Crk|nn{N p3 pGapGqUS6qUS6 re -re t!K t𤾑N t@סv us8,S uTM%v)Yx v1Q2v1v1 v1 v7Jwڡ w+Oa9L $w+Oa9L3w+Oa9L -w+Oa9L *w+Oa9L ,w+Oa9L e~w+Oa9L ax$N xe4!S?xe4!Ssy+F.N{8|8̟:|8̟Rq|8̟2|8̟j"|8̟ |8̟% |Ml*}IE }IE }IE ~ۖyL )߀/%ČJ1߀mc߀mc ,߀mc ߀mc ߂krj߂1uuH߂#{S߂#{S i߃)nȮ ߃׷at cR߃׷at߄K:xC ߅$щ ߅$щ ߅$щ L ߅R+KH ߅_MV߅eA.߅=w$6K|߅=w$6߅=w$6 ߆lRE߆l,߆%bPDt߆%bPD 7߆%bPD .߆i!m/6߆i!m/N߆Ǐ߇ 7% ߇H.Gˊ߈7PDN߉8ˀS1R ߋB7UߋB7U ߌ \ ߍ)蔽Ovߍ)蔽O ߍ)蔽O (ߎI&ߏjELߏ6qKj}ߏ6qK 4ߏ6qKs*ߏ*Ni] ߐ,&ߐ,_dv ߑj ߓ2 |ߓ2)ߓPih a#ߓBa>jHߔr6sV<Q ߔbOߕJUEߕJUE ߕJUE ߖ! ߖ硸ߗ$ ߗ$N ߗ{ָ*(ߗ{ָ* %ߗ &'ߗXߘKp7 ,-ߘKp7 $ߛ2`k1mR ߞ#Yޒ ߞ2.D Pߞ2.D ߟt8QߢN^k ߣ/f ^ߣ10U*ߣ10Uߣ10U ߣ10U ߤ ? ߤ ߤ R ߤM1k ߥ1 cߩ|GX ߫LF߫LFP߫su ߫ឈ,{ ߭E)f0߭E)f߭E)f ߭jL e ߭,!1 ߭F߮Qw ߮h4k<߮V ,߮V ߮V߯0lC"S$߯sG-7 ߰,]1߰F_ @߰F_-߰F_ ,!߰F_ $߰F_ ߰8Y$?߱)?O ߱2 b a%߱2 bt߳ Q߳ KR߳ O߳ &߳ ߳ ߳  ߵK?8ߵ ti`j ߶r,5߶2F1 . ߶(;Z?߷ _1 !߷ _1  ߷I9o ߷S. i߸9aH߸c7I߸eƒ߸eƒߺ8 H[dߺdP&SߺdP&SߺdP&S߼8A: ߽x!<߽SR ߽TY7߽TYY ߿"S߿:&y? ߿'b^?MN*iS+)} s+)} |+)} +)} 6Z \a{B"\a{BY‡fr *t}t*t}|*t} ÎgқEtÑ$y j+òNFZq%&S>q% K4ˎ]!JRmhļ. acFs{j6kTFyh. , ㌤؝ ㌤؝ ^ #J8iT #>hWP>hWP&>hWP?>hWPL2?&(Y( ?W}?⺮cS@梡UfZ AJQZAv -$BLEc9BCf "aCf "L DoٓG&D=uāF2R?$ FK]NGFy=GFy rHBId1$ J0]J0]QKKx+'v+KX Lπ.SLSl aLz #MfNxS<hNxS<%NxS<sO1pL O0Q(KOGݞ<O4 P@,B -dPek Pe $ S5rÖY g5S5rÖY /S5rÖY$S5rÖY|S5rÖY S ; T/C^V>c  \N ]`mF2` Cja۩ i>a۩Y/a۩ 'a۩ta۩ bQ^0Z[7 bsux! , cQy [c`5+sQc`5+ \c`5+|c`5+ cDc̻/j!d2 e{RevKje{Rev ae{Revj e@pK.?=e@pK. Je@pK. g, g.t`Whxf *ijJKOj\ j\lBmYuYlBmYuv mbRnD=Y i n)T2 n-?C5 F3> F3L F3 <ֹ )<ֹ \(<ֹ 2G*2G*9o 9o ,e9o99od %R !FI 2PN^e ,m!T zm!T JLƄ?29 _9]9j(9s RCY"k l Y=7 bG r9[߰)Z"J*@cVRY*@cV17_a]SaUaaL qv "qN$( i ,)&ĺ G[C C? nJ nJ? gQgd |fh q)(\ b\ b 5 a&5s;x9L&;x9R O]O#% #% mj mjt zD ,zD -$s S))RS))S))DS))D*S))QS)) NAlLv9NAlLs n8>k n8>  JU࠭J1 gj࠭J1 g ࠭J1 g ,࠭J1 g ( ࡱ@@hR ?]dt"c "@ i\@ s4@|ME/1KME/1 $=%0%eܒN%eܒB%eܒ%eܒ%eܒঁkY<$ ষ$ TKTS#C)\nN\ è1 DFmaκ ଴߮3~ *଴߮3~j଴߮3~ E D IBiDGIBis>pC? s`X.t ௭UjW ( ЁJtC#x l7N)TO`YXuT(v'08/cϿusdzب) jVC".hӿn kY"'=-J࿍El!; ӘgSK Әg2 ӘgÐ82QÐ82!Ð82Ð82$nQ ć=k? ħS a YmJwO u̔o܇ -<g? =H#bʅ` g(j}7|n"oDFoAoK5o"oYo+9 e+9 F+9j+9+9 +9t t6] SdkZ ,TSdkZhSdkZ ( J#O\Z J#O\Z: Ϫl(=Ve!; օL& $XօL& TL|1DuY P 5 d)٠`;? کdSDO֚ KO֚ (E`'Bp#PFpCs^ ^ ߊ ߖ%[ /b7 /t! /  / Ʒ t+& -4%k+s%k+?#&Ϩ QˌRfQˌj o r4?u 感DL ˒ q˒9 +&:? := Sd& /d&:+d& |+d&| ̉i/ vk {:s u'#Z** # Ր}K Ր}DGr52<U2<R -˼UYsӗ ``L` ` v9ϒ ' oL׭loL׭P :0 t:08:0":0 07mPOD}k  OD}k OD}kOD}k }OD}krg' V|#V|K_ m__ _ { B"l?U 辖?b4,iIS'4,iI r\S jf% $:?D(lN+D(l 1MS LhSav l(L%}4? O a!33J=˹ #=˹ cb T;Sb T;4b T;Z:.4Z:. ,i>9C c{ c{ 9t פP'd > X[_%N  4a 4a TȧZ b`? b` ?Z' ?Z% ?Z ?Z tu@ tu v)K?[ v)Ks" ޓi ^ ^[ ~ +SCC4$R 4% P.  qs¦NdU+ɸoYj q ,CWK0R)WK0RQ+c yJjHs }Qp}Qp }Qpe}Qpj9V\ !k== := =f| ef||Dp RzDp S?Dp @"U eUҙ+HQj G  !:.vTf! c_"r@zr"r@z""r@z"r@z "r@zS # Y #@lN?E#@lNj#@lN #UF擦,#cZCL#cZC $fxD # *xqg"S +A=+At6+As3+A ),kf4,kf4-Gl1t.Q327& 0a 0a 1nM 2$K~r2$K~rj 2u 2mӭD3ћK(3ћ,3ћL!5mN5x\!#q5x\!5r 6~ {/ 6ƿ6ƿC70h?7`U[ :W*KG 4;2A;#<6 Nj$ARP9CAPG;\/ Gg~s Gf: I'gnxU-IҰ hI͏: J6] JڂwtKE BLULU?LU LSd=PMÅhS!MÅhL OV;&!O:)C3?Q>VfjQ>Vf Q.=DQ.=S7Q_Fp $Q_Fp ,RQ_Fp Q_Fpj\Q_Fp aVQ_Fp RB蛸Oa a S`T.фvT.ф T.ф T.ф Ub c0UWǚ+?V|VW V8eIV:X`$aX`$ X`$#Yi^ؘvK Yl^z0 Y} [Oٱ \0%h \WR 9\WR (\dm\dmt\dmj \dTL\dT(\dT \dT` ]?s]W{t!^F=`e6d `}uoY`}uo)`}uo aƈI=bvub28, cNS[yc[\k dSFDfVE g~LhK8xw hkΗ-Y*hby iwK iZiZKiZ9jQ\R{ yjQ\R{s%jQ\R{ gjQ\R{ jQ\R{jQ\R{ jAUj '^k6/ k,Yk,bk, "k, \k, l>]=, ! l8w` mx4<nAĺ; n`Aoo\MiuJ p#kNspⱯd IpⱯd=pⱯd .raH{sN~t=XL<tNt7F t7F tC|Zu v?U#!w?o,. wMDwO*T #w?_x7Wg x7Wgj yv,XLyU2Fz.5 z06z0| zR)O| zR)Ot| *|z} ŸR}B{j}1v}|4S }-s }-s ~ ~Rqb , H^& ݁3a ݁3 ݁3RzWW ,<2<Ԥ>d/Ԥ>d( $( #ᄘ3g/蹅2/蹅./蹅 {0 +{\[= ᇡ%$ᇡ%Kᇡ%ᇡ% 8 ,8 sMz1  ħħd].h Ŷ>1懯yR<1懯y.sl>ssl> sl>sl> i ᎉʒKt,WR X  5n~S)S <&$PN /W); xN)ljᕸ4.$ hudSᖂyLJ G TG (QG?"O!l/fᘪJr t uBl@ ThWWX$L$LD L-nᚅe dlY冞8#T g`冞8#T|:J\ 9CE ^e^eP B>H^{ᠾXtW$tW ᡙu+:|"ᡙu+: ᣤT >lH>l Xű !mE~ $ᥡI$CLR /Y +nY? ᧟e )&dJD=aI.$ XAbzy!XAbzyLs\0yUR?Odjᬡ | 4%ᬡ | \<0.j᭐&ZZ؊ӝ Z؊ӝt ﺈ3N_ ij ᰄV=u/ᰗaN MQ$"̆ KeFo H4'D ueU˧N˧ ? s , t ܖXPܖX<vdOF&[\ jF iI jF $ CrIхx c 1> # Hc@ ĢmzK'bZ ,QUxa/f L /::m:QK:R02q8 c ɫ胠?? 2[i P2[i 2[i #K1 )#K1 #K1 :&Y"̘ɲjŕ QFr /QFr m ϛeaqWqDqqq sbϤoի2ƣv*ի2ƣ s)ի2ƣի2ƣ ( ¿u ?- h?- ?- /֪G%Q #_y 66j c [׻ '2i3 '2i3 ]}B Fv?&?Z ۨlGF c-L?Hc-L ݉X_tv'݉X_t} 1) |s!*R7a, 8ǟ Īq Īq c 3.|XU ± N ˿gW@k !b晢e` -xY .VN>7 ?D7 Y*R9@Rfb]EqL,1P+L"H49We9W9W9W9WU`N8Z> ?0/D'?0/%?0/z#tݵNlc#)c#Sc#K c#L ]DS z7g>8LBu -WDu ~t_*e W3?q`2H q`2H ^A?M0 XoNl ?`}Uih`o6p %A%@h& AΟx ,Οx jΟx mΟx Οx i +a2R +a2 xѸ ~w=? l ?oZo 99RܚB͎ g&-2Ѡ>Xt/7? X'S] E ySXk7 ySXt P)$d B i_~_' i_~_ ɺ@C js > J W_ J WDW J W e ( EV~v 0,*R T?[ g @^ a6/Nnt $oN XUTg㙥 m0i[ $*%RS $*%Ra + a oب!woب!Qoب!K 8hTmb/mb/_mb/"mb/"mb/ZIU^Ig 탞 Tk΋p(|4}c `2s' `2 `2| `2 `2 i !N?b !N?b 4!D˜j!D˜=!D˜ i"7\_0"^1\ #/&tL # ox7# ox #5)l#)#c& $=sv &l\8 # &*%e& $(Dyk (; )"р)]Jhx? +Ii{S+bܬ0 +bܬ0 ,3$,3$ ,dh,BQ>a a.'y/SfF0@B 1]b\2,h92,h (2kcajNa2 2 K 3@S׃9L*3@S׃9K33;+33; 3¸~ztn3¸~z U3¸~z13¸~zs$3)҈t #4X 5S83s5ҨZ 6܍+ 8`&MW%8n,s 8n, 8 : D/8 : $ 9b:s :Q:R:L :GMZD;R#t? <㎜ =G,%T$=c? >}+( ,x>}+(s >}+( ( >]Ļl_D(?s @V] @",@PhD H@PhD ("@PhD Cz> ND RܶCD Rܶ$ D]MeZ,D]Me[D]MeD]MeX F$7+HLёmHRN ) (}HRN )`HRN ) sLHRN )9KHRN )HRN )HRN ) HRN ) ^ I[ ; Iɟѻ ~Iɟѻ? Jy?qz"] Jy?qz" J$`v$J$`v KFHl L_dQMDg=Ms4w*#Ms4w*M~ QIgQ΄犣\RtO[R-Ljku?6R&}pRCDR S8 Rb SB ڛ2IU:TY 3UvԜA (Vv4_ TbW!+wW uW 8W 6W , Xȏt!( g!Xȏt!( ~Xȏt!( |Xȏt!( -Xȏt!( s$YWOYhh ZLIm >ZwJQ}ZwJQjQ[|冉'[|冉[|冉[|冉S [|冉L \tQD^X2I#_XH#p _i , _i _+U;_϶:_% a5﹎a5﹎a5﹎Qa5﹎a5﹎ah= a]6 b#K b9]؜!b9]؜]bc bc b|8[cB=cBsc5fm3 d" >.Sd󮜡- meEȓK fa7*6 gU:s , g[Ԭ gzQs.6gzQs.$gzQs.h BQ ihh ikJdIj ^X?jIrٹR kTU1jkBkt~l:̆F l tDlIgalIgaRmlIgaYlIgaQ m)^: m)^| nIܛ7 nIܛ7 nIܛ7 ( n`bڱ?nϛY #q9ϒ0. *qoOR+qaDbrQh:sHU isHU| t_JnR!t_JnKt_JnQt_JnSuSE w=tRw=bwYk6ZQwYk6Zwr3T+;wr3T+; wr3T+; xt.qI axt.qI ix?Pcy2ӡ#9|=y2ӡ#9 (y2ӡ#9h{y2ӡ#9swy2ӡ#9 y} zF*4Qzc* zޠ {0Fj{0F {0F {i{ A 8{i{ A4{i{ A "'{HK`{HK{HK | 4:|1p! }1j7~'`:{ڗ i.(% `D asR߂ $ <R<?C7D jkd  ~]ҧnO`Nd3O`NdO`Nd o95 y@?⃀: *"⃀:  .# cL.# cS.# c>8х \jߎ\ \jߎ\⅜x KAeRG Y⊰;j⊰;?bD ]Ǯach ,ach ach $ach>ach5ach i ⋀V? |#3rLrQ,rLr ⌎#@⌎#s⌴uqB (⌸pV1]*g4 H U; c?H U; asJsJ␮d#␵NvK␵NvW:5A ,:5A^Λ5Q^Λ5R ▖@ 4 "G?T♧cM< -ܩ⛐я-⛐я }`i,Z] \*$S*$L s,s,-ho+jG⟣E9 fF\ o0 aYK⡍} jVE $⦖+ja6uhoCOjdKoCOjdoCOjd }j}?q'VhZ %q'VhZ $⫚WF⫚WQ 9Q; c⮘,c l䆰T?a) ?a) #fKЮmb Fajs {T f1+l? f1+l ⶳ mV l $⹝L0?dLJރ%ddLJރ%dڶ/E a;Ej=@q "W%$⻚쀛v@Y!u RI  RI  sRI  gtى YarYa2YaS/YaYaYa SI ⿲d⿻hj% !(v+Z[Fu 8[Fu? ,9 dXQ O| aO| s*O||"O| O|H[wċRH[wċ z9K #Í=d@vϟm7 ev0vti9.P `jd` i8l>l>l>C J# HDRcƁ a RA RA 's_4L's_4 ^ֿ+zcߨ{ ' =DR 8IY $$R(S h'zgzѠ/]G[6 LV&zqmҳ\, A8 ҳ\, A % _-08 , զ9S,(i̸_~_S֦Tcb q%BmP R xⳗRF ڇ`H eڇ`HږtQsAږtQs $ږtQsږtQs 9+f9+f܇POjܜk fj`KK%!K%d?u ݼ RhKM{|= H}4d !fb)!$i.J?HtS+6 〽]: hCsb$ʟ (DOc%et,DOc%eDOc%e a vB@qI #eQ eQ ? j OPF .^ a 6 66轏R?Y˧ =wa3eA\p[ }eA\p[ , QB 'QB 5QB iZQB )QB|QBR GM1?2ɢS Ŗ^?,"}P#69tQxvҶEO& #Nw?Nw wpt Q TtL: O$  iZDAGE?̯|p _n# _n#*"L  &N$ w=d \/$ w=d? 67O'z _PuR !MN- K?<{ K?< yRA-r{  - 8RF۪7B? ]-I (q"NOp; $ H$H[ j }7s%?s% ļy:vļy:jļy: x|q   U1rH ӧl ӧl- ӧl aB3@Fv [X;b H j9҄L F(qVw m2iKs@,$$s@,# """ = \=""" = """ = gh1w@Q )"P?"Ps,"P wR&iv u Su :u &u r+ nSX"Kw@d ) pte dve c * (L:Vy# ͬxRFͬxS Hj. eHj. ,PHj.Hj. &"7On (#qG$kL $51R$o@v $@[b;P&#źd4'=WA,*}|; $+oL ,S: ,yV /k0B3#c 4 Z=.S14 Z=.L 4B_+ 5+Y (6RsjY6.@T6.@T!6.@TK6.@TL 7E4c35 7E4c35 7%oVF7%oVZ>7%oV +7R.8WY8Sr(?w9|aRW92)X? ;bD -=[QP >3u+>( @3?gb7@8lpnAFY?AFY *Av5\Av5\Av5\BFH (BFH BFH Bwo`D C{{D C{{ D6NEDEg1F)]7NF:GȓLj/GȓL ,H SY]S7 ,q 4T(c?jT(c (;U.{#7U.{#UOzU{UM:IUx]&;rh&Wȭy\DX]߽SXXBX+YL \bx\8&\Y¡ \C=]O[]a ^Oĺn [G^IUV^I >^I7_/#8_/ ` 8pR `þ ?`þ`þ9 `^ a7#K a?պ? aңR a2qN+ 0a2qN+ \a2qN+ i!a2qN+ a2qN+ $a2qN+ cMh#N:tcMh#N:-cMh#N: cMh#N: icz czmqt cn c!cn adΌR%d!d݁V dCC e 2n< e}gA ,ev׊ lev׊ ev׊ \ fWj l/fh1L'hb[hc*֜k)0"/?k)0"/ (kB;DFNY kuE: s kU:tk+~jl+2l4(S N llQw2lcsA mh1tn@Pwso'MoQo'Mo o~_ pRAPS}r*vsi|Sg?sql$"t(st(s? u]G u}~x:u yu yR v-b[y~"}'y~Э<v!yf@yfR!yf yY"7 zWƕ^[{srL{sr %{sr m{) (={) c'{)!|Ub |GuG #|GuG }IY a9f!/ BX S)EZ\ tS)EZ\ -》b -“ $#Qi  :Y"+%Fp~_k ] ヂ!~5#E'9㄁gm= Ԋ}?  BjY~QkBqXAkBqX =fB =fB ㉷8Z/㉷8ZS㉷8Z S s S sqRTRTK(KInJ KInJ KInJ KInJ R jy6SRjy6jy6jy6L㍩4* u㍩4* xlORZSbK㎯rpi㎻e SP㎻e nB: \ gQ'n5hFn5hF[$H@y,?&U~Jq01WW6^T# 㐝pE  pS H@"v V:' " 㒽Tf? $w, 㓡EE` ͮiQR!+ $T.cv.?T.cv. 㖃*o 㖊 㖿w*1bF || - G?X$/h%ի h%ի h%ի 9屁|R \7( H{S@fUo!@fU Ifu Ifu0s 0s $'12tZ'12j@'12 # c!%# v!|5!  ( ?_@ 9V~8:V~8:V~8R0Z_y Z_yZ_y wvZ_y n3Z_y :1~zds%~zd cٵN  k @X AQ^`M. v,1. 㤒FIј (I,sI,?㥄uFk" 㥶s *1%Ka*1%Xͥ$meameme ,me $A{n5-.{n5-u CC 㯩db .R - 63 ʉRm S{y=^c&02W 㵯N6D)\iJW; c xa)jgxa) qxa) "㷲NRs7㷲NR 㷲NR \ $LN=az"g=az"Q=az"=az"=az"R =az"K ޯDoRG R ) ?S 㻬 Nد#t),n?㾅ىU 㿍QYV㿍QYVT㿍QYV#㿍QYV㿍QYVQ㿍QYV Ǜ, ^Ǜ,Ǜ,(Ǜ,Ǜ, 8)R_2] 2]/i ) -U/SO̪UP$ l ( 0800 1~" I  s W_h3Lq')XZj ܀mK ܍k)܍ $OQ $OQ {Gsi{G g{G ^ׂK4 Y3ߦ jK ' Յo fC%xfC% (HP>Ɲ"HP>Ɲ㿧é ; j G0h ґ~\OK L $%oi\DL= sWӢ77ȱ _xQ`<R1*c[sf*c[tV^z;^z(!*hd!*h9!*hQ4!*h!*h!*h 0 x h0 x9*)Lb 73ԾvnN!tnN!t RY ,P; 9,P; ,P;~v~vKmN1NvN "HIf΄HIf΄YHIf΄tkSy lS i ?UT c} e[J[JL;[J2[J[J$[J# C R*R_w _wX1'  H $ &N !o?Ї'J _  *-Ԯ *-Ԯ̩LC ? ϒ%Lpmjf1pmjf 2Má7Y3{:7Y3{޹޹ ,޹ ָoH?ָoH ָoHj "@"'5}# a7ϒRa7ϒdz{c џj? +Z; ,+Z;: E(Rx r- 9D 7A [ s]"S]"S3 ׼ i [~M \3stJ@SuM66ZSSuM66GY+hzW|%,|vR$ct \@p{ # -Ay3/ 5!i*ʖS />]?L: )m ,R? ̙X]s?s , RZRK@RdƂ!_ Ƃ!_t Jw$1Jw$ Jw$ ڥ[1GX nd =-P .4 8ލ z [rNa Y yDڈ%!f "%Tc"r4 #64K $0ߛM j%D6t%x'| 'Nf(DkFuL 5*&xSg*&xSf,ElJ,ElJN-K R -vT.tG!3.@ S.U k..xs / ^ 0'/S0YSt1L4[ , 3Az 4"&u> .=4"&u> %,4"&u>4"&u>: 5$p' 65$p' 5KD 6ŨC6ŨC 66ŨC (6ŨC i 88؏q8Hߢ]8x^9-:< ;}Բ $;}Բ ;}Բ ; 9 =Տy =+*>S- >eqӻ!>eqӻ?D#`gS?t>?=? (?/o ?N @e|Q3 i@e|Q3 s@l飀]BiP+BiPBiPS Bx}j C}6{ C3U DKsU $DLS FSGxj Hٓ-Hٓ!Hٓ?Hm>!&O;H,W +J hz8J hz J' SKEx0K`ɴEbRK5%RK3y>ʁ Ly̠* Lg] L]];RL L M@SNQ:[|@NQ:[ NQ:[NQ:[  OUH#$OY0L P{ P;HP!9=>t RkS,,"49T+3VTZ.OG \U{U@( UpP *U7=`R)U7=` Wca9WECve Y Yn#[  [Q9QdO\Xr=N\X܇ ( ]ص*? ]:@yt2]>hS ]>hL _7וaCCTCaCCTaCCTaCCTQas a c cD+ ^ e;cY_rGcY_r d dlK&%~ dh"^\ eVeV ,eVqeV1eV'eV g h+?h$I h[ R h:e?"$(h:e?"$ hp2,h̠7kjT$3jTScjT4jT l5!l5l5* m7't sn]] ~n]] ~n]] ~"n]z_n]z$n]zn]z#n]za nǔKeoyAoyAK p:UR pT1pmNjR&q 3iHq 3iq 3iU r1q qr1qs1s͠ sZ2 %sZ2 RsZ2 K s7u t:W& tzXզZ'tzXզtDsڞ uB? v( ZwTNQrK w?!V a xUŜ(yczFeQys 4ys R{B}f ;/m?+j[J q~Y 䀑똃 [䀾/:}baѭZS r,Wr,r,r,r, 2 䃙T5٪m$;|D ,_$;|D$;|D DK 佖wOP侵LJ \ *MX <N;;K;;;"fv١ mG G e ==P v/ Ł ] ( |LYfÇhL+ >hd+ >hS +*3 %M+*3 !+*3s ,SO$C,zvn ,樋 ,ӵU*,ӵ .{R-Iv.{R-Ij/xR/2%akv/4: /̙ 9N/X 0K; 0jF1-Hl,1-Hl1-HlK1H%KiK1P2™S2w vU 3f@ 3f@ 3f@3f@3.zE 4ԊD#4n 4ns]4nhE4n 94nj)4n 5%o%k 5`? e5_ c6~US67> Y 7 r?D7!/87!/ $8OɓQ68Oɓ8Oɓ8Oɓ8ٻ~ 8RiRm ( 8e8e 90tt690t90t 90t 9eJ_; sƺ<.f}7  )0a rZ ?#P_ ?Gvw@ R @ | @ | D @ | # CO/ǁCO/ǁSCO/ǁ C࿾=C࿾=RD!t.  Diݺ { FD) LFD)?F"+FBħK F^6L G% , GݢS H> r@N HȝI%mJ~H7e iKVy>KVy K_P|HLL)0LL)0NT[ڛ} NT[ڛ} ODžRP?;\h?P]o6#P]o6:QguU"QXhQXQX SQ6QS!VtCS!V: SYR0T'T(V,T(V U~;VshՋLQ VxK XQeXQe{XQe<XQe'Yɕ \/r \|5lK]~Mx&]~Mxdb]~Mx+^oSxD^|gD e `%kysaCPDa| GYaO1 b0@kUbzZcp>?cQ d;RZsd;RZsd~; 2d~; " eHEof勇l< =hngGL] hk 9,kjsS l{=E~l{=E,l{=EKl{=E lv.-%D(lRЛ ,q- n qYRrBrQDrBrsW35 #t ӯ?|tY?btY &t O!"tB2Q(u-sz?u-sz$uه# v Cv $wJjw1h yE+y*5z [sR {&U {yu>N2{yu>{&}jL]~3n?Z~3n?ZG~3n?Z#~:8偓ʘ 偓ʘ {6@{6){6 ʽcʽK-ʽ!R:$d@=r$ 僚&p僚&p,償[ 兕gE i.θ$f~kRZ $2҄C[v Nv[%3 ? Vd#=L=U 劕pk?"劕pks 劕pk y ~Ik ;ߖW&(GhDGhGhQ7GhGh2LtR .ʦDKK {`\*0]厚uy tm厚uy " Z%k.Z%k "tF s r 4hZ _zf2Gj! 咦!fd 咼W(v BrbBr ( r"9x6 c":$ 啗 R IhXkx?g5/ iµ µ µ (µ {µ µj4µ iµ ,:^9K " 3%8L43%8'3%8Z ~=BѱW 3D %A| "A| "U |kD& eeR 埇LL= 2埇LL= $ 埨jJ埨 [埨 $q#DN_E1X?Ml?*T9 n夻%? , $ ,ǣૐ"ujRP$͇"LL+d n*5%AMC"婻1:? 媈=s  vs$vsS 2P69Ww4N:1 FN:1s.N:1kN:1tN:1j yw-BQzyw-BQG嬾?@嬾?@D 嬾?@ 宓idS宓id"D宓id$宓idbSFd2D 屵C| #ԅ;;doD WWNL n G&xEcjYxEc xEc i`xEc (<xEc 5xEc3幯 0kaR (8R (__W dkY+0Wv~fLj~fL KmMq갩D q갩# kbV*v3O‚S>^? n9>n9>R.<:kU^ һP jB i xtG4Jĉ0 4^ s z枤 / EPCKx= 姑[ NE|- NE|- 9F<s ls nPY 4[#-S.a8}@iǽ N 0&%; $L10  ٟks 5@8fc e" '  ! k{ K/C CD <*/NR}<*/NQ<*/N?<*/N2%2%2% A:] ZxFC`˽ g)|2J ~ !A , ɨUC6 3? 3?m 3?  3?s 3? iFoCm辕Sm辕Rm辕Wm辕Lm辕ym辕Bm辕Km辕m辕m辕]xdP  ʽ pARUNmk/>'/҅n#SJ A A Ѭ 7vNZg 81 81B݀Dڻrg ߟ˴ $@O.xs[@O.xj?@O.x ( G1j f? oS3D (!|6; !&q #P2ז#5?]$J| &RŒ1'J'.u<:'J'.u|(w/όd(xY ϯ5(xY ϯ )uj)ujL*l$[+mqY+mq +mqs -d ڙ .lH0D.؊H/n+h L/ؼ|y$/ؼ|yY"/ؼ|yQ0C(ϓ 0\VU80; 1G\1ewS 2ݣk 2;Y $3كx/3 MK5ۓ ,6wQ.)6wQ.!6wQ. 6Y8gFr V9s +9ޖSK :NlI9:!Wj:!W a%:!Ws :!W:!W;"+E;*< Q e< Q =  >.po)>.po%>.po>^Vb m > G ?Q-?Q- $5?Q- , ?ك $ BOy?hBOy?$BOy?C? sDa`hEBk $E4ha F]l HІhѭAHІhѭk%KtrOy)|KaW_L|TE.d N4{ Nk!:7O׏ P g#Qvzu lQ+QW+YR N R[SK7 (SK7 LSK7 SbĤ@ S>pޕ T麦a T !T UKrCfW^pUWs1 c XTfUۼNR XTfUۼNQ XsM0im+XɖD*XɖD%XɖDXɖD@[PY= # \Dɢu  \#"v ][V^>8^Q/_S4-V e`4 7Q:`m8(`m8arsars? c_Q~ U;c_Q~c_Q~ ,c_Q~ c_Q~ $c4Z g)cLzS cVmZ e5(V7}Se5(V7}f"#d(f"#d f, R f9UZ7s fHSV g@4 $,h^Q- kh^Q- h^Q- h^Q- h^Q- h^Q- i7Z[ie j 'ͽ j߿Qj߿"j߿j߿j߿Qj2lF k w7 ak'q  k--k;v 1lH lGdY ElZB mj]m0m mmmb mك^KSn ͑o β p[1rj s 7DYt]O ultbhs ux auHjdURv!iVRv!iV v9 ,aF>9s7_e a'7_e Oe ]I }*j L}$ wN8wNK指cxZNByuQz=  1> ,3 1>:JF0 2JF0 JF0 kMakMa 敵 ;A   ,bzr斶,<旘Eiӵ $ uM9 uM9 ʆQ .qR u?v u?zu? =u? e-u? < u暡*H;h曲7鉴hLA} \>q-m=T|栉E$; [, ϋnȪ (oϋnȪ aϋnȪ iϋnȪ $ϋnȪ ϋnȪ ϋnȪj ϋnȪs 棦D+棦D+棦D+ %__O j+D7 椙MwN 椯 l fl v!Mv 2 aJ c!榠Z_vg? a m?mͫ?8 We5G# 樓*) 樓*) /~P>'? 4W[Uq[Q[[Õ} Õ} !nÕ}2Õ} ,欫;A0L)欫;A0 Q ]H'歡N{ - 殔Vԋ`I\vKS=]lJS氹[U[Uj Ĉ nۇa=9c6 X]; a 汓lo?i4bR4bs4b aI괬; I괬; Z8nWnW I3%ƿs 浵#@浵#+浵#% $ 涜0(U`9UzV 5x!R99:kz99:k HOL"} `3m#rZ?>3m#Z?>3m#RjG!Z$ `s` i+ltWNrhÃNc2 i OtO"OïL3 ^DPzD~H$ `хZC`хhŴ 0yD?ffe 1 # $0 ˿W,M # ͔0LU ͔0L ;1Qձ) ^G $ ͽ.Aͽ.Apͽ.AR&rټ61Ϙ:o j <- j53Ұ*o i 0M+y oP*c xX@MNz^{t j^% ( MI&U6$Ag ^MC G=j #7"'oK"'okٷqAELٷqAEAٷqAE ٷqAE A . Kre wܕ,thܕ,t R'Hr HrU Uv48eX ƙ  7v  T<.,<.'<.@强=?/2|2/2|/2|恖KG&8 \kY= 5\kY= $+\kY= \kY= \kY= \kY= #S~  <7-Gv j&w){l9w){S!]Avbj[&BE?0BE ie"8.e"8n2jN OR}],JN ] i @FrL]cG($ \_ fR !p=WL{ 1 RL{ 1$iYoo$iYo '1X'1R'1X'1'1X'1Y6t c *FR զXNJ~H&* CACA$FQz4tb]? { cV|~ _cV|~ &cV|~ (cV|~9 cV|~ i B;#=T\ 9t $ : :pN!2NR QTlT czܹ6+L06+L6+LK6+Lg6+L6+LY6+L 9- Yա# \ /)-v m@%8ia O&' O& O& b:jUR b:jC ־ ,[ ־j8 ־ ?PcTVDcTV~cTVRcTVBcTV-cTV&b!F!b!F!r5Uj9r5Ucr5U (1r5Ur5Uk/Vn( 5U`y_ YamS0.PmLCL aVU]  QGsHa[9 ::u  axP : l[2 tsACt$(t e* "WM@|;]1Y:#Gt^!tOK:^!tOf$^!tOsزzj(~u[t~u[$7~u[~u[#~u[ | wvtN wvtY!K{l! K ^o!䕃;Sq!䕃;L!^Y"+ #˜p1, a$PNYBv0$xJK$lyLn$lyL$lyL &`. &-'\?C&-'\ ' g'ULF'B> 'W7f#$'W7f (Aɶ&Z#(!p/rG(!p/r+)UK )hۢ *<7 } *<7 } +N jW,X8L.,X8!,X8--JH--J0--J'--J--J.UjD.UjD a .Ț4+Z? 0 00ilKj0b38R1^? 2_[ 3r eN 3~A? 4/&t4ƅ. 5)ZDN 7i_ 8tQR#8tQ8, FN 80Hc80HcQ80HcD 9 > ( :`3bBs :ڻaV ; 0:;x ;l d9<\=*G "4% @aIAS?M !AS?M AqAqGA\РtBA\Р (CwE8+XRREv E'% j$E'%*FOA #F GzlsIfGoQI*N/I*N IsI w I˯[7K?I˯[78I˯[7QIOyNvIOyN J씅0LcM4 #=MyuãNXqX N2HӇN2HӇRO"{ D O`, XOklxOȱPO+H$Pl>?N$PV01S/PV01PV01 Q4GqHQ*XN%R% Rb% R.&+S- S% RT ųC0 UM? V[c? W/jW=*| - Wm)SWm)LWm)UWm)Y WYWDWYWWYWuWYW_jWYWPWYWQ:WYWWYWD WД'jX / ( X /X /X /j Xc +:D\Xc +:/Xc +: Y [\v \;Cc\쎽/\쎽K]P7X ]*^!jM]*^!s*]*^!'^]*T? _Eg^_ǀqp_ǀq!_ǀq_ǀq `@10ۥ`@10ۥa"IJc6[>beAi f,]s3 f9\3f9\3 fF5S gWͤ4*gWͤ4Rgkf#? hJh)#E c%hqYU)ife a j6 k*{s k*{ ( kcm]X(l/m/ S)m/ Rm/ Kqm/ Q?m/ .m/ (m/ m/ L m/  n\n\ in\ \nb?nz_U|ZqGqW/'rVq irqܓ[K rfN s+Rtf7u#tf7u$tЍ SbxEjL\xEjyrK? yiC' y4K@ m y( 0z4oB6 \{%t{%){%"{%"{% {% {hmX {hmX %~9i.E5~9i.E|#~9i.E ~YT3 ~M>gIgR GA mYǞ hfO5 + QR{P_stGH-D"GH-U@Ex{s ҟ 熞*熞b&熞 燂{G'| 燧cI)k燧cI) er燧cI),燧cI) +v𳝩4牒oxQ O牒oxQ牒oxQ Ņ`@Ņ`&-]t?&QQsQ Q 狼~rM狼~rME^7j iEjO|>sR$á s皃z/a?瞘Ϝ`*瞘Ϝ`L瞘Ϝ`S瞘Ϝ` 砟b I cݐrt 硎0 #7?B}gt gj#gjtxqiC xqiC @`B$Q#$ ٜ]NN済qLvn済qL K" IG0B wjT\tE%D EE禀l Ү;ҮS^ҮeaFsaF (Ebu Ebuj穭9 Qm 窭A; JW/őxvW/őx $[W/őx W/őx ֺ- :Q i <;YZ8y(8(8v' 5R*5R?(./c  簄C*< &簹ZU簹Z 8~V 8~ 8~$Hno3NjHno3N  \eIk?!\eIk 9 糺kځ$ 紨rݬڙ>x8v } p" ; 1  緼H - UL<UL縞PS縞PL 繇-fjKp N%? B%?Y%? i%?%?} V- 罏a d1E d1E7d1ES p4}}* z |pm z |pm z |pm O2;[ $ kja5swL9ewL9(wL9#r , !C^K$@z? Oq L^?/L^   u>.dŤ ŽG  -ǐj#ǐs랒%>5CYY H&C xЩҽ?ݵtJݵ ( [Y,? [Y, ˄N ˸Z$XS l_Y̰OdV#̰OdĩdG csY |D$?|Da|DR Љ" (Њ52-VX $? a њ}9YK3? [K GI ӷ}\&ӷ}\ (K/(Kբտlե# ե# *;&t % ٴ&DM` ڥ>ڥ2"ڥ)!J$Rۥӧ9ۥӧ !ȢSG6Z >ҜGW#DrDrL EF;L/j&EF;L/ ޓV 0 %0 K΁o aU?YaU IɝD, ƁK㕰4SA? Xr7 >':?,>': )}# \Zv*2rAQ##*ɬ s;>-;>;>S ;> =U-^GF! 53 53 mmQSH WSH (SHtżeżd,zt q "qqt TBSr P-wsxG?@wsxGu/pY Y6/= $(PR3U? xr x xk  1  ץH? f m6f t1v v gMs J%Q1VC sI yOB|YyOB| gVt. ",vy6,vy6 FDll k[` z(\ # z(\ c ˭S"QN z|Okz|OtT0 @T:llfj 4}nCk[zik[zJ N39 >3k {_ F , pҨ% pҨ pҨ pҨ U6L: PM%8 sBP (uBP #pY51R`6p@@얢얢K얢R n4n4 SzSz>Kk&  Uv&1?1 Ed}^ F9m#YZ! ažv Z=?Z= _N !>j!>trtKtK tK| *cSH4 |IYn ymY#]3#m4 #xX#xX#WD4 i(#WD4 #WD4 $7ggN$&D %“\ (rU @x(rU @x?(rU @xf)mѪj2)ȳ_Y)ȳ_b+)ȳ_ )ȳ_ )ȳ_t)HN2*U$D*eլ D*eլ _m*eլ Q?*eլ D2*eլ *eլ f*#:Av+շ,ާ ,ÔT?M.SzvNP.9; 06{ 06{r06{06{ 1'NU #1GCr a 21 3ԃc 3rQi 5Zi3]Nj47t\w H47t\wt:47t\w47t\w 4M-t& 4 pm [4 pm a5MBi 6p7j47j 7 m' 7Iݟ 7A :T g< ܢR<;4kD `}_ aWЁm4"b SQb S bCӰf\ cv:>Z5c,2d Bd B] dvn}dvn'dvn$ fY[f88yeZ3f88ye f88yea g[Sbe gfEgfExgfEEh܆Ni Li !i\Ɣ kF kF akFYl/w l, t2l;7?mNmg{ , mO0wG mq7a$ m .m#nAYjnAY #nAY ,nAY nAY $ n0"2`n0"2ow&U o~LI]o~LI]Ro@vS p6WTK qN-qg4 DqD8 i qD8? q )q ) qȭZ|?r nsrrYRtru~.4e1ru~.4ej#r_ ns}iGv)B| ? wVfĔwatQJwatSwat xOzjExOz*yíYtzx0fQzx0fzx0fR {% k = {% ks }kd cG}kd #~K㶁H $6-)lt 6-)lt dRK |"n mama 肠`Hf肠`HR(肠`H脣J 4xvWЊ 0Q[ 膠 膩=4bZ膪)h7zw'hMs?f hD%N9|ʔBڦ? }  w? W9z Dgq nK!ړ)\Fg (\Fgta\Fg|\Fg #莟^Oq;R-r->Gs萍B?Z [H5v[H5v[H5v0tHtH8̃} 2;U2;U Aj3K ⅴ? 薧]OE3Ke4um!Y;10=%E[i* 9[i* $˓ctK˓ct ;٪j?e} D0e} K ov@j s7؉Z k 'V[7'V[7螕fURGH URGH $3URGH 0URGH (URGHxv , c]裗<{NRDz' ykMQ W }rp4}rp4U 褢4bi 襷i CV( '2D '2D Xp@ZS%軑@C0軑@C0軑@C0軑@C0軑@C0S 軑@C0 輗QPD!!L N#7%XVv>PAvuj ¤ c? 139HN%x jCx  @Ąr G &Th$ x|ϧEŵr eƌpu ƖKM 8I[ .5\ȞZ $ȞZ (5q61q6R-q6q6Kq6L }v!ff ̘o -EvEv Шp(_M>QtJ UO8OJJ d ҒҒSM{;tM{;Yx|?)x| x| ( F.s $ 2A2: w ؅z&k $&؅z&km  `lJT \&6lܠFoM]!<$;?F n;?F e ~_se ~_j،æ ߟr ?ߟr \ߟr 0ߟr R!c*6U|k $(T8P|Iњ&8s8s wI_B3S x|s+9/li= ne{~K{~K  8jA 8( 6.e"R{k<m+{R?J6@e@ ) Rl_\-#k9B{n1$j i9j i9鷛s`O?T T ,T (8T a7TTh*!j*! *! *! ,{*!v*! ij*! $"*! (*! W!]x z4&Yʗ Yʗ l WҐ|j_= inm$}-w4C 8nR`\ob?s`\obs`\ob 䪁`,䪁`䪁`Er01f%Er01K T[g? q_q_ q_ #9 \')- +_|4_|l_|RT_|_| x.x+2HNm[ej"Lʛ? +#o t +#o t +#o t +#o t ->+#o t =yɗ$ BJ^ M @f$KpF>$KpF>8%˨ EhT%˨ Eb:%˨ Ej%f CqR%f Cq%f Cq%f Cq%f Cq &7| 6& &7 '({-(D ,8(D "(D  (t%] X(t%] 9(t%] i2)wXg)wXg)phC*Ky*7*7\,J#H,J#b#-9=0.-aU'Z  -aU'Z ,e-aU'Z9-aU'Z -aU'Z -aU'Zs -aU'Zj -Υo.5.n0.n#.n/YzkM/Yz aB00г00г0J 1f %t , 1``j 3&X 3id 5.Ґ5.Ґ(5.ҐQ5%8-O +80sPBt 81Ƞ; 8K 8 \8=?9Rtk 9Rtk99'SC79'SC Q 9'SCj :$HR:^xII"9:a C[:r!;01Nm;01R>n;? >I >7>7 , @.IuE@`:rRA^-/ !A^-/ lBAz C>u C'y.4DB(-URDB(-!EDGB eENYl?ECg F̢-tF̢-t F22*Dj F Ow ' $?GK{2GW?n m&H"E, I?w-e'I?w-eK65N  Lw ;z? L^ MWڨv:Mܷ NktNP鋉 j O$oڌS PX Qg2Y%`Rar+\ bw\Z ( b bkb bt dZtZd ec(- f2p_ h <( h))}!SYh)}h^* )ha6?Կ<L i Ee i Eei Z( ig ilTt iowj?y kk&kjkj^m~mA{ nm: oÚ8p7nop7nsrs_K,srs_fsrs_srs_sqPfqsp,zv t`QUt`:t`t`t`t`t` uÍtuÍ =uÍ ,uÍ i$uÍ euqdv S+|/ vQ: = x4٩S xVJ r yvC>k !yvC>k yYx3bz aD zmY^ z̲fY'z̲fz̲fzy&{At](3{(-X{(-X >{(-X $ {(-XY{(-X ,{(-X{(-X g{(-X ;{(-X ( }= #4}|V"v n#[> m]͌[ ZX al b+gC .6 a 1km jZ"'Ds(T*;_w _w 魑= #魠mؖX`魠mؖX`]c魠mؖX`M魠mؖX`魠mؖX`.魠mؖX`Z{=#C+kw3鰁4?v ? 鰵U{+?!Oѵ( ew;,w;,j @Hz + Ipm ZYʐzʙӜU鲍y  ]ė j]ė 鳐v鳐v%t7-i%t7-i鴠=<<\\`R <\\`?%HW 鵲#7j鵲#7 鵲#7  IB>h >˦Cʠ? 4 K 4  4  4 S 鼐s &鼐s c}bAtSHRO 3 j@ٿt dj X%*q ` %aqR` %aq/j[2YNć{@u `&ĞjQzI2ڋszI2ڋkzI2ڋt ű^cN* FTƈa4uj *+"+u  Ȃ8DȂ8KȂ8 ? 4? &? {KԪ \Ig< (Ig< 7 $7CuY[N jWU_eq HcT_ 7I ?˒ɮ7x˒ɮ7xR CK> Όq(HRTHHRTH `^)%7`^)% a дjt  ї&Xb\ Lb\ ,b\ ҵ"K:XDT %p?aى5Ը Ը t֜i6*l *l  :/Go n7H,)d Q $ۄ aQM> ,\QM>s®E.W ( d&3d&d&K O}-rO}-rO}-rXBR 6M- g2ˇkLӊh (:Lӊh $ d{[-W 2i ~IU0D~IU0 ̟jVN6d)' )9DRb ͡ⲇ3d+8@N] {˴}S|}f}5}L}} K=kwu%Vާ #x9d_wO 3|-'3|-!vlH-Z]в>| !vn2v]K N1+ T0Eѩ *Eѩj$Eѩs ==== i == c {ONt F}e aLǙo%\RŰ9SŰ9+eyΈ$ |wZ<[ 8HM`R8HM`8HM`8HM`K8HM`8HM` Cmj t T);?; a$B{S uތv95W$v95WN ܅Y܅ &V bA:bAh A[U  ZH ZHj Aoh?J To = $e N 䚺 "v|? "v| G "v| $ "v|  "v| i "v| \ љk ӭ^-I| 8crt`Q"oY   }F-&$ [O[a%NQ?<NQ "xxR tz1&mc(({ lLL? |R1 i$}u֣(NNp;Pq ~]j.]*L.]*a>ۧ\ mxR z4s /udt(/ud ?Q1AsY䚍 ~R_ c WpdT+;  ;  $ ;jR v+ȄkȄkK :TTg KETg J Tg %h "~a "~a FD;f+ FD;f+D i!7sMq "t??@#'2ːj#'2ːJ#'2ː i#pM^h#+M#+MK $B r86$u,N9e %}yt} %iI%&KK?&V02c>02c>02c>02c>R02c>K02c>02c>02c>Qk02c>Y"02c>0t~gP0t~gD 0 m1yDZ28e 2abamE2abam2ײ:2ײ a3x~ - 38B s 38B ^ 3횟M 3$m4j>14k?"4IN4I4aG7tc 4*= 14; 5r\?25r\ ,57 M e7 M7 M7 M8~.m9 9|o\Kz9|o\ 9F6B (9Ş ;@} $;O ;kx'<$,{  vV dqZB% , d{x!eKd 5R? $d 5R? ad 5R? d 5R? ,e\!e\ (eL0BnT#ekdeV e辡O?hUi[4s . i9k[&i]ci]ci]cd i]c jBӸQkPkB l'Mz l3!PtH lX)fv.lX)fv $lX)fv ljtSl{]k c m:0nN Q nq,#Rn* nAQ joHԽ $p8YRp5#p5# , r#zc a t, 't, ur~&O ()ur~&OuY* v B<v Bcv B4vi{ v'PrLwgR+)[ w$u҉zw$u҉$wu%ww rwsSw xq@{ x: #x: c;yd34Kyfv[R yg zEUNj{Os' *|1h"|i))|i)}|i)/|i)|i) |i) |c }_!ljwgMre@J- l 8 pEd}ZpEd}ꌜTB+Yܼ ܼ eܼ Zs5W[ 6z \i6z 3p? mH (2( >_u >_uV x698x69ꑙ{[!ꑙ{[ c<ꑙ{[ \%ꑵ.4ꑵ.X3 ꓩd%U ꔿ1ڎy@&\m&@&\m&@&\m&_ꗒ:C<   v oƽFgQ5oƽFgL ꙷ2 - Ɋs aꚹfDxtI}v j3jZjR.pl ];N :Ss^t:Ss^j g_D g_% g_0 S]sst'ꠀ|[A ꠎ%WAd] M=c91HvzRƶ7j -w0:@nm g ꧼ:Lꧼ:Kꧼ: ꪗE aꪗE ;Nt'@ t Su< W/KFT1IF   JZ#wN . %Y)%s% p 3 K 겂R= &겂R=: 결}8TC bCDbC3u 귴(o깼V , 꺡u8g2;5v9? ^f#I꼴25Z # w'} g7 a4!AE$꿷VFP 9q ,__p (__p __p . >E.c Z vj ?aM]vŊr hmƥ1S SĔF #ꄆꄆjꄆs >+rViUF$?$ WyC a$ WyC-i[QV%?˕Tˠ85gaIaR vXq8!  lY)!lY)R͝.# Y|RlxL l N ,Xdx+jg ϒG 8?K8tL/ , tL/bѝ Ӌ`jd'1 ?;wZaqY 4X|֮1Nؐ! ,+w'`U \H=x ( @G(ى B "z"zS 0d([ ,` G q Itbq IY!d  D(gR U/R)Z4('Lޝ·$b ⻌u R? cT CTႊE R7Ƽ >N1sA>N1 ^3>N1 n^ t #Ibc)<v㎂A= c 井i a 井i xUC?xUC iC-+v 25Kj!Tg Í :ԋ. *7k}vr0_#c Ժa aԺa Z LwjsLwz<YQ &܍N CiSR CiS$CiSa4  ʾ+ TR D :"L cLD#kR fd $w4!?w4!s T #~,7s P1 #{ {|j{ { 1]x1]R)1] 1]Q 1] ̖" sOhN@hNSĵ$d-ĵ$ĵ$P bNtbN k6RoJtHL W[^r%[ Rr%[ ,ZU# LXbLXbZiĉ.u^3A3Ab3At et!Iet!*et!et!] Cv$FQ4 mrD?mrD dP*SdP*$ JJ Jt 룚=4 n:Ͷ0v7804804  i ~'j[ Jko"* Jko" $} $] * * uLj uL i uL uL a =Gu =GuU &K,Kk\7 ie_ ȌhBR ULa Fk&DMu{p - " zcNzczc] %%RԪ2t8pԪ2t8 kԪ2t8 JԪ2t8 $.Ԫ2t8 =M@odvN4tC .v , /pq@n ! TdD__jMF]j ŧJιZ[7_Wn   [: m.wIwI ws(t` <)& Wo""Ο׹y$QRJ $QRJ?j$QRJ i($QRJ 'D(fU (fU L(fU (fU Q8(fU %(fU *ڂQE+q/ -;E?V -Ma^a$ .{. .bܬ ,.bܬ /)sZ "0Gb e0Gb  0 s-1-X 1 " j2,os2>>12c1_]2c1_2c1_L 3@kT ( 3 5紙S46, &6!j6HyX6HyXt_6HyXs/6HyX a*6hAQ( [6? 8F|`#9*f&9*f& ;8; <٭ <9G=(S,N=^A=^=^ =^ , >SܮI >SܮI > } )?cSS 6A$+ A5F B&}K BU nQ.BU nQKDD (DkADYKEB^)?%E]} .+E^??F)ic lFOhNGGH4g IbRJO{UKx9ϧ;#LEb6-1LEb6& LS75sLa,/ Ma~+7Nh7t Np *Np?#Osr ) P醣y PJDvQ͢msRĚR R9\/= e RnҶ(_N"R[)" R[)" hTgjYU+(VA1tDWl73}=Wl73}=K WH]=DjXǰ Y, i Z 'W [7I]f? \X`>\X`];Ȱb?%^LR0^W(_0˻H j _BvaF_V%Naao ah(IVb֌5 .b֌5 b" B cf 9ccf 9 acf 9tcԕ?d |!da?PUdq+ dpjdڑ?-Z ectf&]EvgrKN#9h9?S hw)Fhw) jZ-RYjZ-RkjZ-R jZ-RbjZ-R pj{` j0 j0  lqNo71ќKoN R &p0\&pp0\&p pZ0ܤqvm1dqvm1aqvm1DWqvm1d5rnjv)rt8rrcꨯ raX raX raX ,spHD s֧#H[s֧#HsAOpY tE;;NuXs QuXsY u_Omuٵr߰Kw';@Z'w';@v w';@ wxs14ax' /[y;ղ IyC֪k z%!՚ i"z%!՚{qY}v3{qY}|wEXL}xq6Os?}L}L }d^d&}d^ }1Oj}1O \~‚r6Yk9-'Jp3tJW8d-8v b 넘@ 넘@ L  ( UQ ( UQ /s/s?3 __jWA %[˧^ ,%[˧^N4 N4RN4j ebsRr&늟*?닭5FR\7 \d ;O\d ; -\d ; ;6S 뎴fҥ*뎴fҥhje*31딻9딻9w>.9j.^N W"iCW"i(W"is떈O \뗺ihL ^# XARXAR XARXAR ^XAR | XAR0 뙲xd<뙲xߖi@O5- Ԣ 뜬r g#&Y#& @b,띪o#tYr <RIԏl EIԏl 2IԏlY Iԏl Iԏl  렏LJ#C렏LJa 7D 7D ( `u"  (H W;=FiRGUJ08v`Om 0|M9|M/DN搙 'O} [/y pnyY2D~C\릍?3=TYa릍?3=T(릍?3=T맏7+먀F먀F.5vz몴v zM Vz^@zeJ ,RR ,ˈ )i 2^}We}W}W #$ چ\q"1n 붅7,I: 붅7,I: 붅7,I: )/&e{ {YvNKYvdYv rZ9 %g s 븒r ( 븤 `:,ܵ[Y)ŧ빝u4.lv5XWVMc(VMc(S=Z m 뼇@뾤lK'뾤l뾤l_뾤lK 뿺Bi.?AB`> SsTB Fja1$ϋ$ϋ&N_ Ŧ;&   9V ÑE_=b;"#_ 'Qѝ ̮9g0̮9ga̮9g >&%x}R6Gp(ntnH3 TnH3 LnH3 nH3 $ 0(j JTbN#?/bN# ԆuIgNl|0gNl \ H[5?eFz*Ed~s*Ed~?q\?ؓ% ,Xز!7| л.| +uR%' XMn. i j- aj- Z ܠle;ܠletܠle ܠle: ފ$5-ފ$5ފ$5/ފ$5Qފ$5dXMl hL h+ hS{_!H ,Q{_!H{_!H $ [gseY7X5\X5oAͳ/ J*& i J*& $ ]hG 戺 )戺&&UR&UK M M qބ;JkEE aZ_RZx3 ^>\?7ww ?? ? "f]k>𬨳o#8[v [?G@ [?G@N2j!5s ׵}9ta,#e Wq0Z? =< Ŷj?:[?:[D@(N@OEz e@OEzAw#A 6: AMG AMG A| ( A J2R!C-dx$H+CjID D/) 0D9ܱDD9ܱDE>E%D)GeIOIȽtJg2sJϻΩ JϻΩ ,dJϻΩ K):Q K"@ #L6J1FL~CR MQ ,hMQ ,hM/?'NVc 4Nْ4vs d OSiL/ P 3**P 3*jP'to ,P~KOsP~KO iP~KOQrS QQCf R4JL Rj.nRj.nRp&{=S qo7$T3vF T=}PT=}#Te!nDTe!nDUˋ Uˋ U fR UFhVJj4RVcQ(t X5 o $X5 oY]׉qbY]׉qk Yi3Y(W ZS+#NZN [ $6\YVs\dDZ \Ɯ<7,^ë{5s4^ë{5z_] `]HN c aMA a`==6 a ~S a &i ,bɇU : b^s cpv` Ycpv` ,$eH ?*m-fI0 hvXLiQN i_Cav jK' j00,+ kl&l`k Dlq,)Z mRF m֘:tmrYRncY~ n n鐯p jWG* \&ppXR pne a p1Yq++ # qZ1#r]pu̡ rv4Y< s޶w.C+FRw.C+Fw.C+FCwOn $yMzR${6*̻ ~r\dKnC&c#$`x`x j m_s%_ \N-/q샢 {j $z|F$z|FK G- a KK ab&8P.Qb8Tj?.Qb8T 셯] 솑i̥q ֹ8ֹ ֹKֹ ((yP|gS e# d[e# K"e# e# R 숞}.syӷj k;, , 슱c mw@ iVtiVk p @# r|bP"r|b r|b*+*DI1"DI1 ) /7|q[/7|q đ%=Jt)]/#:vAcjc cc i c V}U4쓀s7,쓀s7쓀s7¬k #*OR; ?gct<K ԷԷ<Է8Է옊RK yv+Cl̟L.l̟.li@'li@ !}e3!}e3R!}e3ə4ej(h"1 -W9j 잁S( @}UR젚Aaes 0ma S/$ZY 쥇k(rvF쥇k(r gc Li, ,K -s 짗2af%O$I^bx?쪓\:  dPR 쭇O<# $)쭇O<#j@"l@"l CD T?w9 j/pNjF,&ٝ&SS&SSyݖ{\ MZ4&?MZ4&? ,MZ4&? 쵥g<sY~쵥g<sY>쵥g<sYi^!i^[l]4 "? /n׆2.>к.>к?  /)j0Ej0EuRW>T W>T?쿅2ͻ 쿢78 x#Cx#*x#Qx# 7 !q u? ™>gKV™>g™>g™>g­0T̄ c z# 󐣣󐣣l󐣣 +h󐣣D󐣣D2󐣣R󐣣KĦ&c,W}? MS G"sM G"sM `ތ% (ɟz*Fɟz*Fɟz*F ɦr#;ɦrɦrɦrtI`RttI`1tI`]tI`hNGv5%f5͑mC"ͥX+LEk cH_ cH_ `㴰' $#㴰' 㴰'~㴰' ,(㴰' &㴰' 㴰' 㴰' e J(J( RxRxQRx%RxRxRx ;xxJT|ә ԲxNAB!6It".Q ֱOWP`S h S $(h Ss ך%R״5"2ضwkhgB? Jd=Jd/Jd 3JdRJdJdQ ܋ 6.'" }; %@-6?"%@-6 :@չ ߰f6*] >? #0Bņ]  @"8 @"K_GB- ⭜Y\& ( 76٘& =Ěg 7 i77"77 (7|77 AՉ #3 lI  lI $lI -ZF!/za ?x~ls!?x~l $?x~l| _: 孢["S <7keJ<7ke<7ke fm$8B;d4 K R? DR?  .,R?  R?  (R? 8M .AP t#.AP .AP {=\ $%V[Q \ hL 9n \9n?DBd DBd8*DBd !DBd $j^B~Ղ r% c'}qrMtrM (  |; |  |  | g t< C,Ar0?lj{2~lj{2~ ;lj{2~  -j Sϗ4j1Sϗ4,`$7m e`mjJm%mm 1'R5_ P\YUU0 .tBD? iѱv!V` Ak,.1=s gH j42ހ5 .fا [ !5W \'7i &$s 0yL S=$ A\ھq  NC ҥ: j[ҥ: h-ҥ:  :OV c d@u Ti m V s V , V \ I4S8 nd nd D1Rꗝ+ mv CA 4|V  4|V 727 30R$ Gf:Κt$ ǎ !L Lr:O[' [ [ [*PX6 m&5wU !v  t xj.`|GhbS o o|F\Y$s /*ns/*n )D) W<#ԂvT5jԂvT5KSfRKSf,ԄuINiF A@S "mvc m OQXh OQXh Uw5>U5>UR5>U 5>U 5{*R6YY62j[6t 7b1Z 8} 84B$84Bt95( 9hN3{ N9ӎqyR9'R$ (:W ;Sr8 ?] ?-v?- @#F@#F A5.x C CO<`^tCq݇x $Cq݇x C߆AI`? C1Vj EJ$pG:N H+% H/ H@0u IG ALRJZ,eJZ,LcJZ, JZ, K<(՝-Kx  K9Eb #KʇmZMC$' MC$' j$MC$' MC$' N dh NL O,L^)QO,L^;7O,L^%OsNP @ *P%TkK2 Q]P:UQg!Sޒ c6SDͼ1jSSޖeSSޖeKUc$_t VW!M  V.O)a V+u Wm/1 Wm/1k Wբ XGM*XT X~t?)X~t9Y.T#p Y"kn (Y"kntY"kn Y| Z`bntZ;]*{Z;]*DZ;]*[\B*S#[\B*L[hKZ] l9]$Х , ^PȢd&^PȢa ^h")Q ^խ毀_ `4F ` ;V`ӄA}j0`ӄA} `ӄA}Y`ӄA} `ӄA} `ӄA}t a]^N aX bM_bM_abM_egv.f|&* gwPg:YgwPg: (h  h`A h*  i_ is<j.is<j , jF $jI{ jq~jq~ kw@% kW5* jkW5* E kt~Әk䍧h2V kHablŅ1lŅ1lrLm.TP ,!o 6}PYYqY|?rUBs?s%?s3+B@ sdЋF (t#Ygyu ulv1u  vǪkrR)vǪkrSw 3 w2Ի(}h %w2Ի(}hjxy-[\ |5xy-[\ # x{|x{ sx+HP yUXzܽzܽ Szܽtzܽjzܽzܽ (zܽ dzܽ*zܽ i(zܽ ezܽ zܽszܽ {ej{eb|a%| }08D }]t~sH 3 ,1~=+ ~0G#~E].f#!)Z>`] )KS )0 )c L"- \y_T8U? 56)856)턅KqG? y 텲8j.{P ".{P? zTc?zTczTczTcR %-]m± [ux][ux,^W퇆[y SQ "VJH?p "VJH "VJHj J,YAR!~BsCs ^ 0s ^ƃ\.?v iv @V9C@퍚.(qVy-~K-y-~ Ty6 ZTy6 e\~H\~&/Cӌ8 i=cNp cNp 퐙hH$?%9%!푟B;;~? 푰nx?AuR  %? ?%? ?[. śJRg 픛tX5v할1 핡Q,%0+ 향zEe' Y%[ 홚Zqs{NV! NFb6C66`> ,Z6`>:CWxC1 [ # |)>c&|)>cK xhl >  #V?~5 +:,^J:lR(A sI:,I:, jn 0g'M 6TjEe6TjELI8s@# 57:u7:ukNSWF4WFjWF a t# t$ Lм6kg[JcmK)0-NLuB;]0 \ X Z+ǐzt/M1tgt/M1kt/M1R KKiU ߲za߲z"_( (~_ c Tu= );J c:} kClK I+2O-Y~(ϯ_ o7%f+Q7%f+C u] þRD'|L vO|5vO|#K@5A߅] skxK ,ɉkV !Bg|]!Bg <9@5p?p psp p $GDj z Ǽ$6@Sd@S ݖvs ٸv lIK kEOYkEO =Y2 kh az s& az % az i K] 7 Q&8 k/> 9N.d  9N.d R 9N.d Q 9N.d  g b O Rz{ S=gh:E#e|&/-lO,-lO S }t2 sۏX /ۏX c*/@sC 쏹u"쏹uaǹJR ((gZ  !B> !B* !Bs% !Bj {;%"2N 3~ n MAAx iT>YeS*d;iK"&O7_ϭz_ϭZ_ϭeƬQ¸{ݛ¸{ݛwEM >qΚio:!L%>K!rYbV "# /] *"# /]j"# /] # 0c3^B# 0c3^%# 0c3^ #*OSS#*OS%uj%uC%uA%u i%us%ӽn jG&=&n &HV4 ,'[h'{oy)<??)[p"*iSj*iSt*N+`s& -+R5< +R5<C+R5<+R5< ,N,mvZ,ߌ ,,ߌ i ,N릹-kV7;-b .;S.I+/&|/=d i/Of[/,/ӝZ0[!/ӝZ0[0Z&V 1Qcʛ 1 ~y$$1 ~y#1 ~y1- 2TI2rD 3' OO 44֪Qzt4֪Qzbs4֪Qz 4֪Qz -4֪Qz 5 ٍ5 ٍj5?O ,5?O#5?O 5?Os 5^DD$5^D6׿uP 7>+$%7>+$ 9 %9i9Qfgs ;//EN;c̥<#a̋<#a̋ < R$>_X d >XY ?>f U?ua #?ua j@Pݟ @@d%s*4@d%s*@d%s*kA"]AqHA  B 2 8j C5d"| E%xǯG<2VH G_ % H֐H|~[I(3ZI(3Z $-I(3Z (I(3Z ,I(3Z JZU&qJXuyj JʫbLCYT'M S)MٙxMG=Ѿ NQF?N ,O86ODzUTK P5j Q倬mQ倬m RUѱ\? S,03i U?U[AV.ot W'KL W<J X_@Y(Я)Y(Я) Y,ӚQ Z/  ZIA> i<Z&G\HP \H ]J>ljE]J>l] ]Sxqi ^kHJ$ ^"_%UHsN_~k( _~k( _߭!`y a`i a8E)#aDCD4ac aװ&aװb)$6S? bKLdmCb+S c)acȓh d*PLaw.dDz7te@Pc eO6/ ! eE7$'fR4fR4lfR4=fR4fR4g!8B ghs (KKghs ( ghs (ghs (ghs (Qhmc hmc9hmc hͷLsMhͷLi6c@ji6c@ . ik o kik o Xik o 'ieT{ j b<& k6ڐ k6ڐ k6ڐs l'@Z|mHUmgY'nT ]> oW ,oWjoW o"fv p>?*pk-,pi"a ipi"a? r; m4rTd_Z| .#r^R]"s۾?'sM,?ss7tR t9Ymt|JX t|} uÔ Kv>s9x#0:^2x8l x&?Dx&?Dy_r{@V|z!4S|z!4|z!4L|z!4 | }JH }JH @bj 69 Khu]Qsb2: l[{t!l[{ ujuuu f$ÔYn2; "9 " |!AjCRCRw / C `p5Sy] duj]`/]`/]`/ &grU &grU e`? 8L/=, d Phn Ěep R h LfC9p6I? %?)D Ep5 0Ep5$t[1 t[1jt[1 ,mt[1 gO\Q 'f'CeҢ aI VI!It D35$ #) 38 eF ;5~>Ojm;5~>O (;5~>Oh) j w3t a ]  91 i91?91 ӵbp. `G4 )7 ] #ҏYɻ YR hL hOh cht7hKh ={\g_ cCA )[X (e}JOI ̓m8N jJgQ HjJgQ tZs tZt *7 ; //" d"m Ю;HaWVB#ʽ%D6 (&Ia Fx#^jFx#^vm9  ק(bs]CK $#h85/U3h85/U ah85/Us N 转%v ) r2v Շ"T"Ӱ~m )?~m ) iQ~m )s  s F pQE#`Sidf>vlP #Jß*$KM;KM iKMKM l[Bs} #;l[Bs} £yE£yj!ȃ**nQȃ**nȃ**nRȦ HR JJPJiɅ Ʌ *z *z?*zjQ:҉ce p2ʸS9#ӑ7Tֻ2|̡O 1#Vg b8#Vg t$#Vg aF} С`lЮ뙜z1RKi|QKi|KA! M< ӛT` CSӛT` a 55R5d55Q Ԟ>(%Qzj _@8 ׼4Ԗ!׼4Ԗ ֘: ֘:ٕ i5 @{#i~@{#i~dYSKKvYSKKvLJ,4݉7 ˪߻;!߻;߻; lO Ѳ0x kK&ZTY 7-,Q\® 䩦s~-M? E-kE-k nE-k x!)Yx!)D MCo? ]j `Nr"$ e36(i#鰴8,΂OIR08,΂OI űu $ *At *#1? `! N%x3CK?YCKj!CK aCKs#*&#*D$?D$s ndw . /i..M j`Qj`?QG`R?c% \(>Z w .k.kQ.k1We1W ,<1Wj5]U!(9= e78ai*!/R ˩b ّs k7U c'B *&.vR*&.v*&.vS]*&.v!ad XBWR} Q%0UPŕ  4 \SqI6? XbuXN aXbuXNkXbuXNspg9ۋ uܹ9 C}N b{O ;b{O ijS $ijS? LӼ! w.}? R_ RP R 6 1 6h 6s 6 *'b Qݦ5UR' س< س Eb |Lbk _Ð$N$l? VA,{*^$  'A0\Ѝl_gt8')0m/ ,A)0m/!)0m/ $ᒖCfE 8E~ J%;v>,S@ \N>,S@ >q e >ߍR?Pdގ9?Pdގ4?Pdގ BCBPDC 2C ~K?tC ~K? DeI]Royk]| B^$8޷ $^:l[Kl^:l[^:l[ ^:l[Q ^țo ,^țo _>Pǫ n_lE `.?0d jf~R\d jf~d jf~d jf~ e4 eZ\eZ\"eZ\Lh ,h=hJamNh5ii94 \i<[b i]:xDj Vz \j Vz a jMjj&Mjj]MjjMjj8Lo i8Lo?QH| &Ws&WYYGo(P 3_~Tb ﺸa ﺹ{'tt _$fh_$fhzC s.}9+A+ Pa$ >x[ f!}! !}! Cha ÿcÿcR ĖJd>?ġ"-CK{ġ"-Caġ"-C^Ņs |$!(V] !(V]R,lAtL ? .rWDrWrWP u ȃ30(R t'*ʍhwD j2~?=˳T $Q $K 6g6KM@v e HAM VMVMC VM S>|Ш[vN AVN Rdd _fJ=MU|6awD) awD) ˊ|Q pͤQpͤ _kݏ n6w ~ &稸?a)s 6L ܴbCh|RGjL ݼwly{jtjt޾QШ DFɚ-Šv *kDoۈĢj7K rVv'䧣 h+#h+Ò:>}Y 2hW 72hW !EeRbR.x #"YѤ=~'Hta+=1NwKw wKw c 0c ,+STYSTR F1 C .9? .9j &~ie a>, 4D}= >D} % >D} , Z ?5y  [0( 7 7 7 6*+~RBeB BR ;)ssqۜ,&rԒ rԒ sI|p sG !tbrtbr (=tQnX tU txec uHX auv x| u5R v:?8adTv:?8awWAV ,0wWAV $%wWAVwWAVwX\Z_] yqhsyqhjyqh yz:İyv yیg'B y> iLy> $z@+yCUz@+yCa z@+yCP {qz a };,̘ }X5iD ~ Nk]? 9h,ť{\ \5 u/ du_ '3k (k?؈P& c{ ic{ S Q 'A.`t Y=Hs Y=H f ޾s Յ*'aVG eW !VG eW ( ]D Պ(?N$sf%-,]&s!]&  d.Rt YuN@ ̟8׀M[ ̟8׀M[? wS m ;o>ќrVܠF*/b Җ_#l: bҖ_#l:EҖ_#l:"\Uo6K; K; K; K; $ ΤGEn_ \ $W z{( i'{( LG W9r Z 5Q Kޚad%Y./ @ hs? 9/@RJ9/@K9/@df9FpI`c`c ,t`ch6& 49* Ǝ4 2@N Ǝ4 2@R3;CLtㄚ)Sbㄚ)'ܴt MJݏMJݏ2ȫb2ȫb Fv]/LsSjNr<2^,G ( QB? 7,2m97,2m7,2m NP Bg2$QzT&zNV;c_ ɯmt vł vł ?ָ{"?ָ{Q ~N `e#`e 1J1,E?6+ i+s++ xDD!!>| k" crAH>nf]|?w8j놥 $])dH])Lq;E {r2< *֞9S[; pDFd X\Xh cX\Xh X\Xh X\Xh i @qV ׹ a ,88쵕#8 3̯եF &R \AT2-u/'2-u/StF a r]q| ,>N.ۇ;R#P ňu n3 i + + RX~>0 a -^ HQv W  TOؒk꧇15 !slslDkM/ jbib|1# ZիU(p2QM(p2Q K9&U  !Td? 3Ud}` Ԭ+v : *RLpZ<= aX0?B\ }M4av}M4a9XDd3 ,d3  D : ]:?Z: :cce@.pFR/B! z` 7%4R B& l nz; nz " " #/S+ N#/S+?)#/S+ i!#/S+ a#O@$ uv$ u d$ u 3$ us$\"B'$\"B$$\"B $aGsu $d,ly$d,l $pSs$pS ,$Ȅ ?,R.%$289%Ng( +%Ng( \ %Ng( %Ng( ]%Ng( (*-VZ (h}L $7(Xe (ӝ: (U' )VM  )rW ')* <,{.TU-ܢqt%-ܢq- qhk -n#H a-[~=*-h j0YՌ2 1knRE1kn.1kn1-+ 1|OIb1|OIY 3StU=3&b -4\sk|?7R 7R K7R  7“ i8w0<? 9xuRt^9xuRZ9xuR R9xuR (;d\E;d\ja;d\ x;d\ ,;d\;d\ $+;d\U}1>U}1 >wS,k>31Id@.xjq%AVVDDAVVD AMDAMA8(7fB~B隳lS8B隳l!C)Mjht@C)Mjh$C)Mjhj C)Mjhs C,_ûjD+x{56DKҕ|?DKҕ|DKҕ| Et$ j!F ,F 3F G8]ezNGsພ Hv!H9 u!I2 INy˶k JXIt!}KsLLL ^Ls M\a?M\a? N?g$L N?g$L O4OĠ'@?Pec ZPec f%Pec R PW@JCPW@J PDQG! Q*Z R ő R#5SBYTV!L'TV!L'a U.51U cU.51LU.51ZGU.51*U.51U~6vU$Q_Uj4 W#[L - W/! g!W/!jXRB#.XRB$YAAҔp n[2@AZ\?5t\m \녴;yR(\녴;yC];Z@Z(];Z@Z_Q6 _~ _~| _R~3a _R~3aY `j͝8} `cb,(?`cb,( F`cb,(B`cb,(scg/29tc fi dVFt(dVF dVF dVF ( dr e)i ebJ}'BNAebJ}'BRel_ e[?He[ ;e[ g="hmR Sj kvO$?9pF p/\Np/\qŎ~ r 3$rnx sfRL sg1u,wR ut u.t jut%s&ut% $ ut% ut%jut% vG:(vvY8s#x+ ?Zx+ sRx+ x+ tz&3{ٮ'"{}> |~GP *|~GP~E{{9~E{{ $ ~Rl$~RlN~Rl ~9H^$n? mBM QmBMmBMmBM? u^T&? 񀬟ý ̆R̆C̆ ߆G [s[| ڌQ , : 3xt*o[=|bL T>g? 2 i [A>=%]~ /~ 66Y @0ZJU-KWc , s j~Lj~L 2h<-j2h<-g2h<-thG<uusuus]w>ml$w>ml$hw>ml$ 񎮻a49Sg[T PL a.PL V; xs x ܈d Wș )Wș Wș Wș i XU 4>XU Ԛ l1y Pl1y vO`4[. 񕴁(eE#h y%57E :  = 4 zXY\YtmL ˙R6 $&6 6 6j H iAj? C4q -H׽# W R JoJoC yGk,|_,|_ xx?a>X%S#>X%S6vIqKk HHu?0fY4|$N[ 9͉b &ev&eSfhc  $Nh񧳚? ݆_wf񩩤?m񩩤 F|O2 ^ jca jc^ jc Cj\ cCj\ v%G([y([y$([y_XG g.&uk # Pm޵jX jX 4/_aR -n,F pAQ4pA{& {2P@6WזJ , 񵈌@&:nӴEZkӴEZtӴEZ 2MO 0){Fh0){F 0){F {05y I \|7I78|nJZ ~# ÈgEhFN ɻAqW=h= c dTU v o$Ŝ4 ~JI ƿunFA,4NA,4Ns B, g%7qF   Fq} fc $zfc Ifc |4fc %pR aF[cQyV@ &^ =@ &^jƏ/buƏ/buƏ/bu _OR Dž$r y:ly:lCH FdITBFdIT@FdITt|=t =t ,u9 a!u9 Aօt$`< $`< $`<$`< eY $E| )U ͮ4|8ͮ4| $ͮ4| M%b8 S)VJJD2VJJ Zks|ZkHZkB<]mLlK=%Xv#3. 1 bZM:5bZM *bZM bZM (bZM ֣Y y@/֣Y y@MٙV : YLؙa/ ت V-+ +|q " h)@vqIC qICjy-ͩ?9+1d{9+1d9+1d 8VeTR6Hl 2,EW $' "$' "$' \$' $' h v@v #v ivjvt8Ei>r" th`j,DyB άW p0q?ڳI`ڳIڳIY3tY3 @ ֱ_sLֱ_kֱ_t&ѧwFHy.y1C}PZ +# ?7ё cvOu ad ic>|&xʮo\쀼,J(쀼,J ^ @L#1#1|}^]>N}^]>}^]>>f |Kv $ & =lY ִDpִDpZ8ִDp%ִDpִDpKִDpL ִDp VtD 9t=?|ӎ'C\,o +C\,o TN2ωpu{{r+ 1f&$FE5$FE/9 ^* ¤K' t~w u4oі{iu4oі{S!Φ,VA7×̙LR .Ѱ.k4k1f*s0SJYXSŀ\'R\'=vX+F[4 |#[8 ej _KInD$InDInDU +bRc)c)R c) =묣U ( ZR.= A[ +{&9 8 u-q7 r8k E<6n !9UR Jǘ?<2O*Db:*D  Sd}G8s +vx$p|3Bp|3B 3 +Lp p`Sb\I?b\I?1b\I?jgwZ E %ʙ&##fdj 9gx? Epz  ]< vm~bo # ݂  ݂ ,A ݂ ?NdK/Nd$I9VCI9VC?tI9VCs  ЮR ("l""zQ "]/#j R/#j  $_ *$rP &;6J a&Xt 'z:'z:'z:"'z:(Dj(D(N)&B! !)&B!t+#, 4/ { 0 @J 0ȧ^L0/{ӿ;1[ʧ9 a 2]~1 2 @= ( 3 %{ !3 %{ 3Z'_s 4$%5x-vL  5EdZ!5EdZ6PL26PL6ub֥: :˓~9k <#U(` <1Gt - <5B<5B#<5B<: R<:  = (3T"= (3T = (3T = (3T= (3TU= (3T=51a =+Q>B>B >Lx >Lxs>Lx i>Lx T>Lx \!>Lx (? D[ "?j6K@0ф @2@2 @sȜUAIQ%$Az iADBhaKN Cêvm<v D-*~ ,DXD a&E > EoNl FAR HnHC?P I.S J/2v 5J/2v JEqͳ KX4R Lx5"?Lx5"O.UON!f  j1OZ;OZ;O٬ O>=P|e $ PPP #QTkr"QTkRb=pRPsRPRPRPD U0&ugWU0&ugXQ:YQ@tYZL;YZLY Z"ZB; s Zܑx?[4&JR (9[vd=,[vd= \%@^Y \Ok5 ( \Y\A.]8^16͢$ 7^16͢$ "^16͢$ _"3 (_"3 ^_ `/D8`xpY acC uR$cC u dQb gJ…t hoY iѭ2 ^i+Dۚj$Hl90Ml90 l90s l4# nh^nQQqJmZ lqX5 wqΝ r&G`r&Gr<r,=gr,=g s)EvZtr !3 ,tsMuTQ? uTQ w'| jxBD CzX\S4z)?{ཀȧm? {E n {w#1|:3|WDL|WDLR|WDL#|WDLY52v a ijpP?#h$h$ 򂓍FAGU'솹2r>"tP )^%VS (VS zUX "X  Hd eOt RAN*_?NUټo=3]T) -)]T)(]T) ,]T)K IYN {˩ ZmgLZmgFZmg(Zmg!ZmgZmgS 2\4 lDPb KO GRP?ImjWk9Wt)4"_QXLR rvu y-\t&y-\k1y-\y-\ f;ʾ f;ʾ i ~`!?̡ +=QK ,UX>#i y N؂.'ŵ՛s X݀w Sa#LpGpGpGPpG*򟸍$k򟸍$t mQ $  Y %SrQIS"A 0ԉbxhCeppMYt  $''Co^/Co^j򩟌n a򩟌n: Wki3 5Ag#8& S#g#8& g#8& Lg#8&  wOw) ~;BzO~;BzsƔNt>sƔN °&,/&, &,] &,' So T`8mMRCM r W;W;SW;LW;PLO$ wtM򰫡j !򰫡j ~]}8&oN VZ? /=K$/=K򲤟v e 򴑈bv{v & s-/s-s-s- aF0OO O Df EDf $Df cDfPDf eHDf ,ADf 9`/9`/yI ,Bĭ? d]t $$ ,$ $V*bcZU*bcZ *bcZ*bcZ h՝y {r^k avƂ ͗8ū͗8ūh͗8ū ͗8ū| aɶ`Twv{n # Eu^b ,->u^b%Ҩ tXtXtX OaձI&^OձI&^#j/&&cM>`TS ׯ{1 L - IpD :nQa Pڴ}:v ^k9j݂4 a7݂4?b݂4 EZָ9Zָ ފ)n CUQ;d l Td $ 66D|̤k?Q9R^l'>/jLt UDBJw2]a`" %]a`"S Yb> ah~ hj"4{?=H |K +^+a7+^+RTGoJ73*w@4RavUi 晴晴Q 1]S tN1]S oDTv@=M 7rǢMsk sk Y)kM?j JY oe-8HAD}s=B֘ $ fIT#RT)X j M% 7R #+ N u-b+u-b+\ $'@eK "Yo3?v"Yo3 gO"Yo3 ."Yo3 , `k &ȵ;&ȵ&ȵ\fQDw\ !]hN `ߝ7v R&R&2R&lǯ7M0j t 1]z; D:G8}>݂4}>݂4Y՜xv sQ! sQ 5 _8  RG` RG RG ̻.}=J ̻.} ̻.}z ̻.}E ̻.}* ̻.}Ri .S<? B SSVZ ]B\_2 ]B\_R ]B\_ .cAV qRRT]B~K ꅼ^bջkbջRbջ!з " wRdUwRddwRdL wRd! 9nǃcYfD eYfD m1YfD/ >  |! #D,jg! #D, *!b*sj !b*sj gP!dJeR"i|oU "4 jR7"4 j0"4 jD##|'/܏ '`-dޜf(O& #B(!f )}q=) %; ()(~L|a)BC *TW5h9 *xB5 +ܳZ? ,XM,XM $ , w2EV !.d7: .` 1~} 15:v 2 z`s? 2 z`s c 3D}k3F 3@- 3lTs{_ 4\l` ,7|Pz+>Y87|Pz+>,7|Pz+> 7|Pz+> 7Ӯjs8jBU9Ҹy -9Bg ,9Bg : n͍y6:rA2;[s ;sBRR;7O<Hx\ % ?V[Aj!¦ ( Az-IcG64GJGJ mGJ HUK ,=HUK HUKj I( E׸?IZ01BvIi_}9S"JG=i ( J& ,JER%N)JER% ,Kxvq D%Lfu (MJCKMBhMWj NY?a]NO?1 $P{GPcSP;RMAL: SJRSJR] S@Ϫ# TٺΕ]V+L/W YN%+ i n@?sn@?sQ n;iRKn;i oؿ]pZsrrsl' s~ ? v^ x9;|fvnyI>#?w21yh<3DyGe1S zm N= {Lz cJ{Lz   $Zf!sS+.#N eU 6R S˿ N%- 󄘉o| ] @LPt@LP1Ԯ4Ȃ &'R 1hȨ Ni#kXNi# sB󇍦~/ Y󇍦~/ 󇍦~/ ,󇍦~/ άm f4FJ '+ #KĒ>t[BY d.`f}Kf}`]{ `]{ SS(SSSS nM??):xN)KO{ eL5}l\86}l\8Z.^ BGKSL0? Fh?*Yӆ$6 PhU[W$4W$ b5 ǭͪ ǭͪ ǭͪ Γ$T{ Z:/3s./[Jپ0 >ņ#J cm) cm) cm) ]B'# -v`?6-D }r[38?\1IYs\1IYtYyhUYyhYyht Yyh m{:Ot3nŘ!/v2Ř!/sŘ!/l? N~i=ޠ\hޠ\ i _( ,󢋰zQN󢋰zQ ]R]]a]BxYw[ 󦍦d󦍦dZ󦍦d0 O SD$jDRAZG? m ;m .IbK ?.*5.*5 Ioe [@]\Ck B&8|󬃲ߏ8ߏ8ߏ8h o/2o/ o/tF'YsF'Y e ʾ"qY)<M)wMh,)wM(Mu l f}Fv1tz W (pYNHbnRHbnHbnQHbn$0 a ~G-v.`!nN#v]$Rv]$tDy m ^=Łv%8 ṅ Om4 U04F { 쭖< -IDJS yZs7V :7V 07V (7V ,$7V ü# ;ü#jü# (ü# $ü#sþPqþPq%.vt.vt].vtX wyvXPnKXPnRi[iS"l:f ˼*˼*Ʉ` C K! O ˵};CebT3R$Of&L a3rRvGAdj L*;;h*;;L*;; E΍ %jWNSfEk, 8fEk, $'Ե "'Ե i IWC?Ѝ]Z3&Y N + aY~ cY~ `pG~ ѐF VjtӋ;yӋ;yjӋ;ybmӋ;y !>'I\k:I\ [# ԩ Q ZoZZ?!Y$XS2 h(ƳլAg տ'0 տ'0 *NFր?]/ڞrjh qv'3PR#0j0jk| ݷˮދ5k Vp_G}>K PK@NP 5He=qDE~g ;H#':I 7(HPod8jf1΅Rf1΅ f1΅ *60,Xl 2B 8pGﭑ$# m")?'y̹% .VCd.VCj.VC .VCE +) iujKg?.Kgs 8|F^HѴLHѴ<HѴSHѴ 21,_w"`s:_C6 VPk Ќ9 ,{Q?,}{ ( ? { }^ lJAt YLVwE/ QQ 6* Ǻ7|sJRZ# lRZ# l ]G+5@+A`u:su5MbO Qu s:pN b/- ҃$ZH{҃$ZH҃$ZH_6JuHp 6JuHp 6JuHp ,6JuHp 6JuHp r: A) >> aQ> BU \  PZ S   !?  !Us $F. ,*/ ,_˘ ,_˘K* ,_˘ | "| gq6 ՗ -6Ld p3%#A✄<A✄<A✄<A✄<*A✄<* zP}ozP}o wh+ + ( +s w?: % )m ƅw ƅwv ,,c+ jtP+ j + j ( #6 e#6 ^!; #ijh\0 < <?xdu`jKxdu`FԹvLFԹ FԹo 賱 賱 c!.'?!.'!=P#qh%{ #JTRI$ a{+%F n7%F nR(%xk7p %X o4R%cA`b &Q*D&Q*&Q*K &Q* &azn &#D .8'7{S(|IJ (E (^ -(^(^UC(^ )ch^ j)|o4)|o4)|o4]l)|o4)­R *ﱴ ,, ż , ż ,&7͕ $',wq"MK,wq"M_ ,j-^v" -^v"j-^v" ,/τ\ /ݏ-R/ݏ-D7/ݏ-//ݏ-d /ނ5۴v0>iT 1Q # 1qݪ9{3 T *3 T .3j• 4 JQc %55N$ 5 5 5&i5uT 7Lcm7778oP:9Ak> - 98[*;G D;za Qc ;vbv <˿z0 < S>: 1>: ?O-=$?_Ah @!rgd Ah|c:z A?1hBUBBU7BUBUCn iD1?l DX DX DN, iDaxx Daxx;Daxx]8E#=zC3E#=zC3E#=zC3 E#=zC3 EcBWRF= G}E2jsGVGo!GJTNKia3[N: [F1k4[F1s[F1t\>L/ \>W}jC]1􅢦 \^􅢦 $ ``߉ .p,Ra8eRt?)`Y3;NEDS!Mz 5:v5: CQ%2ks F in j$L $Ls IT+̨j-Yq~J; ~J; [)[1 \$x}Mb x}Mb_ x}Mb -S\ T߮5# =YdB1MNdB1M&b O"Q!D \4vR[GMuO 2.wXSOzCt /Q[8/Q[ #5Ϳ{ Ϳ{v] O:"j̐P{Z=3 ('( (D ̜ ' m Nnp' 1UwZ[1Uw _3f}`tssht 'Y?14c /S c/K q9PmS"`WwYV"`WwY), go ga+v^j ^j @TZ@Tv@T W /XTm $1XTm ,XTm `XTm s(XTm mlaTv2mlaT-GEO-GE4-GEE8E8 x4%^L3>+yr q)Kq)Бa>v4fw%G`bv asq]9Tq] (q] =$q]q] csOb #Y eR? N ; (@ɡ gG޻agG޻  Û/B*v Û/B*v: ÛFLÛFLR.bEx $U.bEx j n/ ķSC` ޽Np+ , O\= bλ' ,S8<~&P,S8<~-  F9{Y yME>?!wqNJ 3Lfv*+r's ksPJ\PJUPJmPJ$PJL*ѭEݏ*ѭEݏ4W9 aF JeK%*J /j$D DںPDںP (<W0%o(%DB9 Z2h^qf2h^qRH2h^qVV\ƵN [Qb- $^A~ Ѓ5>t= (VЃ5>t=sU| M?y ҝҤNC[gxb ӳvUqk.ӳvUq !!s Սn.xejNՍn.xe +Սn.xes Սn.xe  YeI $BQ9 vg>eN׿لL ُُُ ޳ۓp څi`Fڅi`Pڅi`dE.2 ,E.2sl)dо'!$eȣ ܔx>khbMY 5b?^JF(^JF!ưHʗ? ,e<3[_$.#NL@) :ějB:ějC:ěj m ' #wЮYf+b}[8c݇>s mo$ 116u 116uK 玎  nQ Yh8["t Yh8[" Yh8[" Yh8["Yh8[" (곳_׬ N1}PS0댫3 k蚇C*П>>P ?D %ސd %ސi q ,.qs ,  /(@L=fϋQ=fϋCE=fϋ)=fϋQ!=fϋRݡk ĥaĥa \>L7x /G ǽNe} - ).Q!).). ). ). _u 姍j姍?AbTd v /SQ s /Oy|T/Oy?/Oy \} Bfp~t Bfp~j ] G b l Q eFNK 2Z2Z%^Ht :;NQFiE)κ+a֢z ǫ^]%N c*{Po jjZ? HG?CYEns` \E\EP\E $Le-\xL`-V~\6?ezz n;.8;.8R *蹠&*蹠*蹠 'A4  fM & j= |8< |8a |8R F@+?!$dBC~%];\5#.hV2hVld ld 1b(1b (,?bo?}0so?}0 a R%3 ]6}a5uʚ?(8D ,$C2<eQ; 4O N= ! eGm?f̀]f̀] ( ۹Ɖ,pufTt 6  `r{ `rK^ `rRV k *!!)n9 !S")ozKW"3/B|"3/B s "3/B "3/B"3/B  "H#WR #њv?$oL,$>{[%v+GPm! %#%P*%P* * &K -Yq]--QqCN-QqC%.& @8.ƜA c0"0_8ou 1-Z5F w 2L, 3# q 3vk 334 4W> 4xC 5Fv95|k@? 5s>? 5hU 6&v 654944s5944 9p@ 9UY 9㽻9ؽD; qWs<<4!N\<*> l~>LvWj">@Qb. @3kpd @⯟fQ ARDARD A -!A B]ͣS B?WB?W_ C&>9SDȺ~?DȺ~ g DȺ~ \ Di@y $xDi@y Di@y DDsEv EN8E-`'E-`*E-`E1a+QFaB}60vF 4j*Gڛ H֝ ,Hϣlz%y H'. IU-[ IXc`9* JU" KLK٩%6b K!/<K3X)K3XK3XM&qYBv/M9+\ sM9+\  M NMS,NML'NMNMQ Oq*'Oa O0U OܜW"Pܬ!KPܬ!S QJ6 #QJ6 R#wy+svR#wy+sR#wy+sRRwe) wRwe) )Rwe)b~Rwe)jRwe) Sd;ST: $:ST: R2UE*_X\  Unan=9Unan=UKe^tUKe^ }UKe^ iUKe^kUKe^ UKe^s U־VAi6VAiV`%6 V{VH?VHj VH XAq@* jX7YX7t YuE>U%e=q>E> es e53X%?fq# D ,h -~v c jnD[ , jS@b#jR5 k{Vqk{Vq&k{Vq!kF:vl5 ´?lsaD  lRNlR $lR ,glR +lR(lR a'lR ($m^`L , nWqs#nWqknѥub ol S?ovx5 pyp;x q^-0RrM{1 r\ߩ rc<$rc< s5ls;8s= uk9v3uUUI v*"uպEv*"uպS~v*"uպs1vmŸH~&vmŸH~ w`s w$J y4¨V| 'y4¨V|yKzA/yKzA yKzAyKzAVyKzA-yKzAR@yKzA#yKzA yOu-N"ypG"h(PyypG"h( y8SEy8Yy8 - z&!Wݧ z&!Wݧ?zqo#a {(j"~_`fx? lo<[ X;P?' e)! >M~A>M~9r^Yvr^Yv[ l Mu",kJN FͲRJq?/Jq RJq&JqE'd&V2 aܑ\5D (*Nt$ Dt$  dsd? 2K gI 'ͦK{ kDt*kDkH?>ʺb $ Pt*$ P $ Ps ,AQ,A,AL D&mDt_$)?r6bl 9΁ bȣ? yŢ)yŢ?\]L o#D $o#Ds pb z $E'"S: $S:mS: ŵ6t a~k9p  *d@ a*Y*␘ (␘? jm /jmj,5D>8fIptt lɞY zHb$Q.Db$Q. D1v 0ڒ 7 0ڒ2Vo)Vo)I0?)Gq*!Gq*,L- kv CLd Ik$^,q vaq(m$q(mN6F #6Fkk14/v NPNPXNPRJNP NPQ  U ^ i 0 $e @/m ŭAIxfos # 4֜ctȕYz imW:NxtS8G]:l79&7 *  5#bTl|?nr\ =e? ExExiRbH2>?*iRbH2> (iRbH2>s Mob |BNz@HKE ,<@HKE $:@HKEh#@HKE a@HKE@HKE (մ}U~U[ ք п]<jsf% #! 1^8ߚu/ߚuj "0⣏7v 1H1Tb ,1H1Tb K1H1Tb (1H1Tbs 1H1Tbh 4 u"QӒ[Ns;QPs;ds;ȮF #ȮF  ۢ-QNK'rK'rDK'rAK'rAܐ= (EAܐ= Aܐ= IY: Qa[  NecH<6H<|elu3K4KXUؙk;6 ~yBbks!bkbkjŒ/F # U -NU @Y+-)ֿ1:]@k8 IfIfIfز1ز1 ز1 =Ei ^j]tۥtۥ |1?/ RK RQ Z, d2g Z/A_YB]ֽz)>j! +̾6+̾6a v ?&U@3 "U@3?"U@3)tvB nP/U)5./U)5S*/U)5 5:.`R5:.`5:.` 6} 6}  6} 6}a 6}L 6}]ϽLEqSC  j\2j . |uV^?#V< a#V< .#V<tXe$B $ ,-Nj^m c L\RL\T[XDpDRk?l]PRe&?P Q ;c ,+=S[@ `+GMijӛ\tkN/ sY6 h3 h3Z h3 1sa 1Y 1t \v >`: va ڃ %e" e" 4EϿO8"۵j"y1 OKA Ʒpm:C=v:3 u9S {: 0`  A {   9=Q Bq iU 0&K< 0&d 0&f 0&V !UĶH "!UĶH "9nh\#V' '$G`*$AیH@"&,s?!'2z c (E1K4(E1KQ (W|d[?)ff9-*j 63*:63*:c63*:;63*:'7aiD68'LV 94 9M0 :Br :. # :ގS:nK ;ں< ";ں< =cD;s>TxЎ=>TxЎ=>a*0 @K.@K @IX , AK]! A؃4C60CC60!C60Dp{-S EVdEb{ .Eb{Es bb Eag ED/U (2E&:NFd< FY_\S IID mJt:Q Jet%(J^sJXkrZ 1JXkrZ :JXkrZ?KFB4)K5Y[Lˆ%-YvLˆ%-Y LV?M%LlM!bP@ M!bP@M!bP@N)d g N[.q7 i0P 6 PzAl  Q63v Re}!X[ S}/{GQTZ Toّ!T@* ,U6:  , WI%&DK$W}a3WS. Xl)DStXl)DZ Xl)Da Xl)DL XǿS Ye07F Ye07F a YG|`RYG|` Y=. ZZ \d,w$\d,w\d,w\d,wN\d,w\8\ݗ \ݗ ]*>CT]He7t"]He7k ]He7]He7b ]1])G _A $k N_P p _P p _P p _P p (an*a a bH8(b?pὁY dǨtP g e{Me{Mj e{M ( ey_ "7ey_ ? f#; h/n< ah/n<|h/n< s0h/n<!h/n< hR hC jU/Tk5L kә0Jl+ e jmb5X mq'.Wmq'."md rD o]z j.rE rI04'Nr}?wrp!r2t%r2ttc֔ bx 9脙x'R?xߑ?y,0A ~y^vhy^v )y^vy zJIC|F0|F0 |0=J/|l[uO*!t~vT&SZ #jݳN1S %>dbCm> (Q(QfERFfLh,2jh,2jKXK a3n5QBy־p'kN ;ZA| !^%x J-/j;@1;@;@;@^# лYֳt#1 g$ZcI-yRI-yLI-yF&j)F&js%?[Hg ?P?PU?P njx'}RzQz nC DlRtDlREDlRURU 0T/K wK,A {s8!`] O %d NF *d*d / /+^ZY">?:> yL!Y ;? ,e$\$/WU$ E :rN7s:rN7t-j ~HQq7tLG*tG*b>F 8x]8 B8x]8978x]8 Ou iDiK H^_b44 + U'j#U'sK}{ NtTF' " O NJ UVIUV!b _B # mT 1nk P"ߊ im~A c8}/%  +HF*ULN25RN25:|L|+R rzH{ , !!diQp (;}Mj{Z|E  C HE  C (E  C 0o>D *"} U2kU2t| Pc fhTPMe<:PMe<?]&‡y7ͅ,W sát֖v̩S 6D ů1}jů1} ů1} ů1}t qq0 mwLk?v Ss6[sW) \wΈ$ ʢOBʢOʢOʢOED $ 8d8 (<8j̬{XOM >̬{XOM?̬{XOMàg%ΊxTSΊxT&w, ,ϘULd +(v]*N d.# lQ2 x: ex: ϗP i^ ϗPsG ϗPj8 ϗP (% ϗPR ϗP Xe .!A hn` Գ9.bnB==K|;S`aG >Y@ c. ai[׏_ 0b c0b ڰBt .> .>.> Wi#tמ|ZOR ~~ ݐ}bBt FI! .CNϰ? Wc>s }hS:U(lgGPN<4_S- K{Wb➀4X )Yh6 # h~J%9 @G&5 cK۲q䜇EأN C!SO7(??좕 i좕 iZ좕 i좕 i=HG ,h?@I2O %[<|@<|Ouueq?ueq Imllg utg utR&g ut4 &0<] :0<] \0<] fqK ߜ>ߜQߜ,zQث߭У ߭У-#<_3ځ#Qt[? (3[?f3 in%hD \ )?4) "eb= G}S &3ZD Vč>C bSx-L!bSx- bSx- ^F|^Fs F= ɲR ,ɲR T<;ޱ9L-rvr-rvS jΏ{Z Oz9l-J '(| ;? 5E Mq?E Mq XE Mq i/R+u tR %*| ۷B~R %rE ~k<& >Z \ ]G? h #\ # # R: |Wij 4d?=j 4d?= 4d?=  4d?= i 4d?= ,L 4d?= *a _*aR&*aK$փ c RZ&5Fo|e" $  :1'L :1'G :1'K0 :1'Z# :1' :1'S,3K5 >俶cAZE&ZEi<&i<Ki<Qu`fN D [ 8D [ !ҨuҨ)Ҩ!Ҩ PtsJCsr adE $#dEsdE  V Jl&|Un9{ ي[Zj,!9\P,!1p #g!x` $Uv[ `$wYS$PL -U&mkR&mkK&mkC'U 'Ut(F /(}T~[(}T~[ (?ka * %*Eu(h*Eu( +T"- +T"- +g'j,Q `-Gd4-G -  C%-= s c -\n;E-\n;/~ c 0`bMs18 `t 1xh 2v3q _84^ۅ}lhZ6Dh7q,d ( 7D 7,z]$8Qe 8j 8R!i8R!:T^ \<:T^ ^:T^ n;lj?<*{R7q?@uͲ $?gh ?O1-?O1R ?/e4@BgCAW(}tAW(}kXA7Z+" B L CN\4t$ DU_' ^DU_' ,LD!D EapE(?Ftr7c,[G !;G !#H"[;#H"[;H"[; I$i Jg1Kb]ҊtL$ LcޛP%_& P'(A|&P7u?PU4PU4  R%[R v(SUw?T%Ms T r T2WCT2WC .T2WC e T2WCkTTءf? T  gU:5$$VKXVKX , VKX Vqj V՟-?V՟-?#V՟-?"V՟-?QV՟-? WT pBWT pRW  X)ZY%>54Y,0 Y,0 Y3 S Zդfv0Z:q(s [mdC[mdC \!!'\`[wW e \ ]ZBj ]ͧK!]ͧX^w:E^w:E ^ʠ^ ,a?hSa?hLa?hZ cO~ q<|cO~ q< d!nv d!n fa|1t| TZ|+6t`7g|+6t`7A| @}l䧖 a$}ffbj }ffb }3] ~BMïab - -  $>*:T.??Ƞ^?Ƞ^ [j[}[ u[ b[ i"[ 3|-X3|-XK3|-XRm1,nx^H[P\)t~ }!/b8}!/b G /c {ee jhWZ-OW-O _> _> GUnGUnUGUnL5GUnKGUn s&XDS ?xY W dsn`f `fd 9q ڐ^GR6ڐ^GP0 tNk, 7. gM!_CR"e$a;!i V| H$f<H$f %d"UBN+l\oU kØ sSs$ D>u \;'w⫂n 3е@k^Hy ^k^Hy? }ȃ~* rCE ^KF ^KF c 7<| bS f>F1 Mf 0LMf 0SqMf 0EMf 0Q Mf 0YMf 0K ǟeNLc:|M i:|M ^ 1 ie[=pJt _UUvt䐍 ^}' ! OZ SJ  V_S;V_S>K - ~u4n?EGf FFx s L4%mx$m ʞ? 4yP ѩ֜9 &v;+ >VLP>V DhA-[ x{c ։y_!!Y mK)!ޞ7K=%iU3$Dcf&[SHkf,Ahqm +ms m t`gYDgGt b|%{q"w5; Î|J[ W m gq;>L;>Z _0 aY.>K =? =?j d|"? u-9 ˦m If"ӻa>If \MSFO>qCsK>qC- bvx bv n ײ?A1/ײ?A1/ײ?A1/ `kNO7 1Ɛ4ZʊDȦCaX {G ( }@}@`Қ+jt~kC $t~kC? lag,?Y28 |Rūh!|Rū |Rū|Rū ( |Rū AJRAJS9AJ#AJAJnj7:R e ’;:. ’;:. ymV hE˝h`~T |W !]J !] uaua B\|B\ ^ R|d 8I7_聫EB>(N 赕XgE#s.[8 ǿskǿs \ 5U/8(O  9۞ QCmdճ ChSO^ aUO^ #LE F Njk1H s9w jsR 0g #K$![O s$![Og$![O/$![O $![O i$![O (61]q'k% $ 3hFsFI;1d᭗[8d᭗ ߭Pizh|f F/%S/xy|xy|&  H;HH 3_&?&5pT 3 $ ]8Z jOFN?OFN 7 >S pgH.` a gH.`? ` (M>` ${4t) ő; Σ&N j n5 9B5e ߗSL\ ߗS$ ߗS |)g.? x3Z?tZ?,Z? AY AY AYEM! +N+ B kwC-N!kwC- kwC- Cl kCl YCl  ȺTU5@ (Gf  )c? f[ AS7R0auMk[auM2auM i \k$ Halv ȅg (ȄMFGohȄMFGo3ȄMFGo'y5c ! KX;H 3u5GLjet!Lje iLjes Hl[Y?/^5 ;q+Rq+q+=q+ N  +GGVb+GGJY+GG)+GGO+GGl*- $b) !81f""~F"~FS%;? &:)p &]L&] 'oDs''oDj (&۠(f!ømu 2Kt,|j 2v;Uk4Vs#b #5l05l5l5l 5TiL5Ti!6]j]66;7,6;7 6oWwz?66y*Y 75ʷ$ 75ʷ$ J 8Dxt 8S 8S 96UIv,9Ᏺ :dp :G) :ܫ_ % ;A$wj*;w< 4OhjXn)2 XO Xkd"XkdkXkdt XN Ya;F Y!ޔ't@Y!ޔ' )Y!ޔ'sY!ޔ'hY!ޔ' QZۂ * Z.OISZCT*[_ s \Mփ>$ \N] "\?礪5 _AZłv>aDUvj"a{GCNs a~$8#[b7@-Rpbq9qs dj\ѯdTT: dR-'MdR-'NeP,fv-=) f V# %f]hxb h eV hJiHYd iЪĩt|(iЪĩtjjNw!? jMP3OtjMP3OkkY%? skY%?  k"+~Yl6gEl ,l̡_ al̡_tl̡_j m,x% .oj [ l q.!1-q{?p( r=d % irj hh u*MD"uYuoV]uD·Zrv%bQ v%bQ vXivXi  wATbw?E xRP/* axq=pݤ&xq=pݤ yb/l - |I }CΣpd ~gP1 ~gP1 3' c>v 4& /`G/`G ޑ{? @]WWqd'c-=8$^B=8$^7=8$^U939393 BdN;;K s(D_ay (HKkS?pY}Q?pY} O*ْ=%J& %4K O2 q?1fbO\  j}r_6y}{ !ߏ?Y Mm>F\ $ XD.%\0)  m`kSء $3`kSء =B  wKsS wKs FKI\ ()FKI\ i O)nhO)n + aR+s+j {Ρ_ hj.shj.sDhj.s {Zs eËL#ËL X=k (>)bn>)bnRy$`y$ ,Qy$y$j_fʛb!8 68 6 8 6$ Ę\ Ę\R Ę\S މ-iZ-HSs>I >I \AN˥rAN˥AN˥AN˥ K/G 8 곛 |$|"9" 75iz? Lm1S 4kK9 k-"f .(SM̋%?5852ڱ֍L 2ڱ֍K ISB" YSB"]QSB" 3W?? : Ǘ̡a 9A!/6 9) 9)  ~D?21 XVVX?) XVVX .Z)Ų.Z)Ų鿨~鿨 V-} VS+e %>NH~ZmbW-l q@F 1,[Y:? 4| Jj "AD+VU+V*+V , 5XX 䕂vVf䕂vVf䕂vVf#r a#|ڔ|rE\7#'VƞV t ܮ$ZKNSܮ$ZK"ܮ$ZKR I~ ̓" 괴qB (C괴qB n N  N B 0Q d.db] # RWZs þ 0þ (þ \þ gþ j8?j lwšK ck c/}! 5kD!0:VU?DFڞe .gq§ gq§YG2mDW96WW96 FW96 iCW96tCW967W96j$W96  LB * ]Ƹ  \S v=S v S v iS vt S vs 仜a g仜a Yw y!HB :@ (:@ 'RV _3,>Q| e e No/. "@V4$K 9vP 9vPD'0K * a D;\ TD;\D;\ P*t9mIs X"09P69P9P  FU &廹JnT   ?ϿS ^$ 8:8ؿhhR)ؿhhR   $wr= 52 a C%#? c>gN~ l6] 2 e Ÿ X*;u: Pu$ ;s> (_m . `FY 6q  (6q  6q  $j.9}s ^tf,H +, +,b TfRdikkH( U4 sW g MҾx WΛ; ӡX 33 AfA j iIC~S T4 g8gIEGs|L869 ! 30vM! 30 #!6{d !$9 s "qQI_"FN+R"ݶ^1~ l #rR#rZ #qEV #sj #F>$Ŀ+j@$Ŀ+t$>4K$>4$>4$>4 &7ͩLE&jX a &hN? 'y ?M(~BmdM4*]*9 ,X> a",X>  ,2@ ,cXgs,pZ (,8 -!~-`!-y9j .JE@6\ h .fX /̛j0 0,$m0,$m 0_"C5|13e? 13e? 1<Ҕ&!2wJ2"3|682vm$F 2;a?4v4vj4v L4v $,4v 4+ 4 o 36w~%6w~ 6xE$6xE$6xE$ 7N6wy7N6w>7N6w 17R,_ 7m8 9 6kg:d9 6kg: 9vz7]9vz7Q/9vz7D9vz79xf\9xf\h:U͘<a<a (_<a(<a<a<a<a $ ?듛@$PM @$PM ^@$PM a@L_@L_: @SG A^=/B*q(ߗ 6BR\ sBR\ ?CG 7S)CCc C:cU F^aQF .q|G嚾Ħ HNPXn(H[ HuatH?Ak&Itur Jɘ#RK-"E_S L L[PLb +0LrgH Lf* Mg\d O9|N!OиV Qc)'Q[+5 tR>$j/SQ6kbSvK;d SvK;d VqIYW$۾ WcgmMRaWcgmMWlx ZbSOZ*Fe jZ} t \UHd-\UH ]fh= ]WC9]WC9K]fb^"/ A^"/?^"/ ^w4% _ a`4q/ n cWwfBE>cWwfBXcWwfBZacWwfBj,cë% cë%"c"H8" d-=)d9ߵ! d\uFZfq gu2$ h0]UHh0]Uh0]Uiѩ #iѩ ciw t$ i٪g iz9jx4kmfk]6 $kmfk]6 kmfk]6s kol& * k;x\ ljf^Rln lEt/m<jm<?mB㿾 mFjn nIƘbopǪZ pA>[ ,pA>[ p# KpTN q|8q s) ,#s) s6/v\%->vv~ v-U1 \ v-U1 s x\Zxt y:eUy:e.y50& z9Ka zܫ%{Pad|RN \;|軱J }~n)}:*}뱌8CT$6w9 EN$c &c @Sьi+q6 # P ``Sd``S\ 7 oZ 7 oj7 7 o ,$(ue:.$(ue P&UdFtX?~ϥ_^; $!| (rv^f$ $@I 3Tj x $ wԒ8nm<a]Qkm ͡>L͡>] l5"tl5"l5" 9l5" (qc7dsvb:B?.H0+ l:R A<^ $!J9 MD B # pp) pB p "H V $ Um i Aj~ ?e dx<*1 M* k kZ P * bB? {l8muT?3o o \Yo *o { v?)v#5H /D F &,ٟR6 n? 8^GB#hIR ~a>پ# t f:w a %=` -#%LNOa? 'Bv [s5[sܑ[;/u`/u?%{k$r%{k#>qh s>qh g >qh | ?^ D#A$Y>?&<(PWHC>WHCWHCWHCR WHCK R8x[R8xSNR8x$gR8xR8x# G=$g0 g\ 0:  dz ,S AyB Э608Kg3"?.Kg3"&Kg3"s"ow  77ΐAyV B^O D<$_Yu? 6fT !KFr Ѡgb, r: 񨬑b VM" bl ZR\cKZR\ct ƭFN?Ƶk.v<#aL <#a $Futv%z  lvj!lvjv* )T+ Ɔ=e TE(" uB=}(B=}# f FP0? ;}g?*;}g ;}g ;}g q PșPR#xrX ! aX !? +  + + Q+ + :|#) e :|#) JV UZ v s[ehN s[eh MCR MC? cl] 0 cl]j!HG w|u`?Bld%`r ;X\12X\12K-ħx7 \ mpv,mpv,]nmpv,Rmpv,qm].K  ~)N}l s\l /_/T (W/_/TjCC} a CC} ^ hv"S |1gQv3:!<sK0St)S$S aS*q4X )q(@?[?}E GQ޲zGQ޲zy;eG/ &y;eG/ X X v s "~ "~ (Fn #Ҹ9 ?=s =K = =Q" .,!Bu4&CO $#rPI]$, "$, ,%%&%Z%Ss%%'Y?cQ '$*<N (FP pc(FP p4(FP p(9?^j7(9?^j*(9?^j'(9?^j(9?^j) )L *a߲$*g%*x-g>+,9 +~.) +D$j+f , +f +f ,p[t,p[k ,} -A-Jǒ_Gb 0;OkZu \0K/YI0K/0̘ a-0̘ 1♟q 1pOK s 2s#}r_ &38D </4Ћqۯ&4Ћqۯ 4)7~V 8C ij8J'J 8J'J 9X] \ ;l4 <24q/<d =T Do?(?+ZVR?+ZV?ҷ? @غ]H+AyyIA # sC]RWKC]RWK C+F[C+FE{D FnfKF˞Y FI~UG` G7&X H&HQC ,HHQC HQC:I+9T۫? #I+9T۫ I+9T۫ I+9T۫ ZI+9T۫ $I+9T۫ i@I ,d"ID Ki-8 GKi-8?-Ki-8 K`KKK K L;) M#4~v N"Z*Q5j@N"Z*Q5??N"Z*Q5 i"N"Z*Q5 N*N* O%^>VO%^>k Os#%rr2Oצ^|Oצ^| Oצ^| Phҏ< $Phҏ<jPD|LmPD|L -PD|L P8k Q!9Q!]#RMǐORMǐOV T wL&T wQT wU3-p[VEUمVEUمW.5BV>% W+X>L6 [hYYܮ,ŮSYܮ,ŮLYܮ,Ů Z+u%\ \ ^+d, _X\п  _|(ZR _8Q_8`1\gEj `1s  `23#aHF @7RCaZޗ|tbF'0Nd$Rd$R d^ dr٤[ e]Cey~ iV> -3i 2v;m?0m7nQjn.5ȰM nNo=o%%. o}ts oh<r& vtE 6ui0| ,u32&u32vgxBw$' CJw+ƫ?&xB13 x91y\NY y98 1zқ z:ߦlD {>Tsc{>Tscd {L{i盉 I|:?>~_Ru~_ cR:"w yyy|^' OmU? s?x_s?x_L 0V B0V +0V c sS ܒ sܒ)I7bK \ fY_4P R@1 g .o R%BzD=A~0XH(R QJ ( QJ p4h} >*Cky-[+) JC#^j)JC#^$JX $JXZ %;45D ZG$ vcKs *j@什 u@Y u@ ;Ь`}Cm%jiTY@? / 6R =/ 6R q\~ [ÃŨѻP` ';#-? ]j͊ŴD gH͊ŴD s =Vw;j # `[2v s # /7 /7 Uݽ?yjUݽ?y qU )N<1C \ ѻz1 \de9U;r;IMa R#yno#FHe}J3XRXi!wG. ǟ30R  od*941?5^tV5~P  7qsP/# p"ٲ9U["}Eɼ Pe % ebM7;j eO•ٴ 1?/?u#Rm聖4eSL%i(Ķ!)| S _sQ S _sQS _sQ9y1SH aԻs6 ,n=R n9'vˣ +)H $00 $50 , ΡxR c7s €!RuRlRut[^[*J\ J\ s BU /mYmFZ 7FZ (0ՓG HՓG H ֛Ȕ%ss 1b,j'i7 >К] >К]>К]6>К] >К] ,Id.؀& 0S45 @y: %p] 1= 3ܭSQ v IK-9lk1? R]JݘSd ;Z !?c_os0 9_y ܑ+LS"ܑ+LLU#L =4t# 3#u1>U R ISEcISE=顊]ZI4&f9 "&8OK?F-2? aB~rC֒6Rk Lٻ j8H>,j!6TF-S& s%S& $S&sҗ_ }Ր09 # -k kL¸tkL¸k K붼 w#K붼 euƦR<euƦ X% eC'?(':Q?RnK0 R6C?7yЦ2tF?$tF #tF!@Y!@ 7!@ r@L FYu  Db~(d53td53bm Y I,- I,-YI,- icJP?zF ٽGVٽGVLٽGVSٽGV DN ͖Rf͖1Pk~|Pk~ $zPk~ APk~Pk~k?l# 8l# &eH  K)X 2d rjRd $9at s@rl )v 83( dG' rwN ^-H^-HD U!G}t0? 2l|9t ȡ 7nf 7_v !@Nkl }_H!vP|XV$s nx !d  !d   Y<==yZ{KyZ{K }~g ")!fd ]1B  N" e%w? \g/^fK&fPf (7Y ((7Y?(7Y" ӯE &tC!AL !3ݮv!X!*!t!D ޞh ܕs ij+'3ky0Z kF  l( 0l( $ m ~]8mp2] npq? oP/!߬ oA0 pzNl !po p $ q5ށES r櫂q s|A s'ދr si 's@R@ jt$Bu[ܕkPYv;Ow37j `w37j Fw37j wuAx1xY yA wyA KgyA +yA yaB_o|wyaB_o"zi<_$v{y3AN ]{щGR ~+S c~: P6~wB ~wB ,+Ua?1]}a6 VWCv*8 ԃGv/ԃG (WDQFt Z~vFGL \FGL s .Nl/.Nl#ʒF jJ . 1EM ,KELp{)Q #tC Q5W7 a&a& :(}:(}I [N&n0|r. {? p^Ҳv p^Ҳv2p XW ~#/"k$"k$ RTlsa ǪFW_ǪFW_Κ2.Rf H%k R$GXN GXNjH", "lD 'g]t :KD kސYP kސ kސK4$ +4$ wLiwL<wLwLwL wL $ [ S S//j "7o0?ܼ|6R wj(;BN7 ALyFv I_)*c aI_)*c?p9s iv gc ƅn FYfLh#FYfL_?] jv[ Wa0N6a0a0 as6 l>zA99 i9 W9 U9.9"9 $9 ( 9 5LQ $d뚣6V3b szA*hxzA*hgm?Rr cEwZ $cEwZ " ~0Z ZJL "` ()*r]? i d M=NQM=PUq $ /XR R,H cY(y},I_I_I_DI_KI_ pn^-?VERN F(S | UD@UD@?X ?Vp F_ Q!Șh*ڙ Ls9N iaC^K]G6RRG6R? 8YMq'/?Tg Pd[]v?oȤDŠ$'(Š$' $Ûy}3ir>U Ʊ׭ۯW s  Ǣ,t3W`Ǣ,t3WǢ,t3WRǢ,t3WF(Էu= (Էu=(Էu=R(Էu=K:(Էu=Q(Էu= ɢ>!7 ʎ'z+$; ~wwWwWDdwW3M)m{ #c0-]R+}M m4VWΔϜ? δ3, ϰ~=P lϰ~=P 8 Pbz85hM/ hM/hM/Z еH*T#S'S' Q׊qҐe= eҐe=v=Ґe=)8y2 $GI7 %E;uW= [_[ S`?׀88ԫ  ك"+ j ! !L ! la``9 ? ?2 ?R ? nXnX }ov.E.e.=.QfK 'rL $f@Kf@$1f@Rf@#f@ BU BU BUjjD )-~?"EviAȂ $ YB ?w=s(?w= ?w= $ KJgukKJgut't:j ߪ2| ?_ s3;JZ"|U"|""|$P;`vyt T N4 aJ> l~ $>> l~ 5> l~ 1> l~-> l~ ( > l~ > Hݣv2aҒ?=amH GHI:n! /Qhtf VVS 7 ij*Z [so #bo? `Yۮs`Yۮ \ (8bQ(8b0(8bL e$ ihqlI? w׃h],w׃hw׃h |Xxq? _#H*~Y_OY_Ot uѨ8uѨ8~uѨ8!uѨ8QuѨ8 o 1osY {pΦo I-ǫ4 kxLOkxLOd vF(*zh'34 vilvi]vi{u@sVN án{ úúK>NLS| L3G.4 @:#zt* uǹ ?e uǹ % uǹ  { ʵwp )g0ԟ fʈ I8dM˧*`| `| Rr"+~?t #.s? 6P9O0jC(/a((/a(ñ )~mY d޹]n d޹V d޹Z d޹; d޹& d޹L d޹ d޹U d޹S m[t6{ܾ 36{ܾ i,6{ܾt"6{ܾ +rs ]VB_ >jS 51x ,ok o.D aЗ}pЗ} 5ӂ+ 9 V0d (9 V0d  V0d  V0d V0d { F?G { Fs!P;.M{"Kꋹfh $)Z'0 %pvN%pv%pv&`2(t &ʌ+ 'dE/ ( ER (n (iwu^ (vdE -(I#L);q%?J+GbN? +#"# ,e7Ѓ,t!})-Oo --i(_ .;. /.q" ,/.q" /q? /Ct/CtQ/Ct0!Ks0R,0f000;2uuBS3{ٷ 5MqNEs"6ˣm?6&&\ٶt8?i 8L:d# :2x v?e:2x v (c;ρ ;-` +;-`L ;Xi{ &<1n!<1nL<1n  R?>DR?> RT F (RT F TK3\D TK3\DR TC䣐.Tv2 UK! #U/. @0|ZU6?h  Ut38~Y,Ut38~ iUt38~ Vքj V萱_V萱-WjS/kWc?e!,XY| X#L"RYhxJ(R YQ \AVCD~9 \t1;S^qga^qga _0`),_o^rY_o^rLaPIP ck+E d3.^M9 dAaNdAad栶csbe2 Rea;}s*ea;} ifrXsQfGv g6>6K g6>6 hqVi4H iz>^H i΍R i΍ j?Bjݒ\As%jݒ\Atj<#l7ZE"Z m -Ċ+n4YoRȦoϴNCK mqY{[AqӺ?<q r1rθ,rθ$ svkm t̤b th uB ,Z u-Ľvx 0M i xj}jyۄ+?)yG2$yG2y{TP̎ z鉟jz鉟 (z鉟z鉟 zW)J=mzW)J= {:}F{s 8 {s 8|х:|7 ,|` }kP< Uw2c,[=0 :Mh?x? *>t"0 I(}3y 9&[ 9& k/l_k/l_J@JSJ JL {0'Y{0't{0' ZmTTj{x(- ( ^)& \ ԇ_& c I ox) $ :'RL:'RS:'RK :'R C6\gvKY)3Y)kO $ ܲk>|O LFe <JL (ZF?(ZF KВ_4 sNaoKvW SId(5c5 a hg gUme|Tme \;aIa X#J g9Ѽ[RѼ[wѼ[Ѽ[8qϜ % :px`Z8 n>5:ByZ M:ByZ ,òYn$ Y L ďI%ďIďI y2y2By2/y2Ly2y2R ~: 2(XŶSPZ ,y5g r-9tM+FiP"Bv!? Kj( Mmq| M# "'$pz#rcf?'lYlYSlYK*=. `uo }U6 1}U6 ūS ׃B T%] 9j }]YN׍7~g~S70zQ t<t<$ e~8 #m-BU * RI= 7RI=!Ud rw ?t v3?t j^M|Xa v* B.:)B.:_Ec&&+S6  ߅ۭo l KR#`IYy g0mNg0mg0mRg0mg0m pfb ,+jϪj OGYS\j,7λw E"Fa _|i?PTP S A9>2h rL UEzj>eȓ #eȓ eȓ ll , ll | YP Opb4Opb4}e.?, ڎ, ڎae, ڎ?, ڎ .@ 'i'i'i ?'i ,>'i$J.p >.v?଴L6s@ ăX ăX ,ăX H(~s JNh JNhJNhPJNhD Ŝ-~N?\[\[QW*e;it w [s |  }  bzvր$zvր$zvր$ ΂ $B"^x` g[} /=pnJ=pn?0DNr\c@ ԜDL ݊U?i]ZRo6! EhbJ1[=7_Hd JC iف%TsݑJ<ӟ>ӟ>Sހhߠ֎eZߠ֎eRߠ֎eߠ֎eLߠ֎eSߠ֎eߠ֎eߠ֎e5ߠ֎eKߠ֎e qr@Uz 2}d"=܆ ۫8 e fqQRWM9h :t 09 R09 '09 S09 K 4sꠑ*E*E7*E[%tBktBs b2)? -S"s r6n)kr6n) r6n)r6n) 풄"  U4+U4xY @sW kM95N y0 ui O= a yM 4yMv!yM^ɩW[2&?42& ,jr%jr%jr% b_' /"cGe$Ie$K DR%DRRmӉ =kĺEyM+ ,lU Fv;m8 pK8![5fW fW a6'<:* N b!$Y ab!$Y_b!$Y@b!$Y ,͍9Qm~ OSt U/? ~R Ѓ>a jQ:4#Q:4B_ #u j W%c4hFT# ˶3|C+Oj"+O+OvM/o0M/oM/oM/o 2 M/o9 ֢R[ jgkjg#_#_ s\`  ~J} ~J} m +*7 , KUjr KU (g KU  KU E|& a NC lPs  Qv _ƣ _ƣHd:C5dU!ٽ%L $ /? 26Uj",}tKy\|d 2 C i/ ; V$+H@ 3> J#5k (q Me DelhD kdC5 &5x=+&5x=U"x Řt p?-ev2  /  CKm8 d%vks @< R"b t#W # %*dM: %iuW&ad~s&&ad~s& ' į`9b'1u'i'iL (D? *,Pm#+w2 g!,uœW@O.TK/ֆg90Bo0S(dM1&fRjs 1&fRj 23ә 3U  4"H& v4r+=aR%4 ,'4 m4 5 k4Q 5 k4 5 ; 5Ò}Zk5g`w^75g`w^'5g`w^ %5g`w^Y5g`w^?6PY<,6PY< 7:t7:tf 8\ ? 9CЯ1 c 9s :œk9 ;nh 7<Ŵp <)kv = r2:= r2)=G$#0  >7 R>7 C?"`?"RAjQA;ҼAeE DMR1EAu EL7\{EL7\!oEL7\d1EL7\EiS+? F F^ F F^ F F^ w F<1 F=rA $F=rA F=rA FdF D FdF D Hid!B!vH.QIplJ\SVI{! Jԃ9g,J5͝tK8% L/K L/ L/R LL* LL* iLo&~ Mhet Nc/Nc/ NfqdNYd $NYd Orԥ jKOrԥ O]~(OϡA` iO,Qj:O,Q (P}bQP=]N_QP=]QF* fQF*9WQGW QQ6 QQ6QQ6 RJ7Lk$R(B\mm+R(B\mmRR@l+RcyR S,ST{7 UK%RVĊt cV˫*W5 XH`Q XH`Q Yb^Yߌ=x9Yߌ=xYߌ=xYߌ=xSZP:  [ 8[ [ ^rN _rZ(_ӚL!`VH6'-`VH6'`VH6'`VH6' `7fw`7f b5ϰfLh bmc1xcZݙ8 U dE[aRdE[a0dE[a du3d{=' 2 f-@.nfO0]q9 fV-c h2aM_ i:x;3im+<jK9 lA5]ť lA5]ť 2 m<! mтks n.5 -p) q}?s`X`a[scĮ/scĮ t\RvkG=v ë2D v}mw]>xALbxo xo Py}zmy}zmy}zm y}zm y$0Sze6 |&eTIg|u骻Uv|u骻U ( |# |  s|ܳ>%|ܳ>}W/MVsL\Z &RsC*1Gѐs5b ^Wt v,j src ;ڲ ;ڲ uz`OS ϰz ?v á9/ XH+!j4J ĘE D[gtR K'6 8dXpUt6=pbS& v , iY+ 8`O F{';45KRRu m!4{\g 3 #Lj(qY $qY ,5B;`fyR)R) " R) PcqpPcqkDDH*@ " "L a> (pү \_ , 3s0 3s0 AwךaZCk6oj W16R2GO %(; Ť<Ť8ŤK3<s<? ƍ#)v ( $EQ Y, 6+6 aR+6v+6s<XD?XXXVB};C?#VB};Cjo]pC0} R Rr#w_i%8[g U= U= a;xKHM/+ƢrQ!͠þ1djJ`þ1djHþ1djhJ?hJs,hJ &hJ i - -P 9IZ c(N?0񀡑A] on#3on#on#s Çe a] AYSAYFAY (AY N Ź2?5<q+Hq+NG^KjǝCI[" ihY[ 23Gf3^V #c'f~?:$ʑ<1q&D A9"ƬHL+[! \\XWw̮9 0> L 0>  4Lri4Lrivh#NC8^N8^?8^ i8^ );_lU$_lUD땈?gUk773fE,U #fE,U|Z0gJ ; S*; n; ,cl xHT_ ک1Ḽ_\ "-rۚ䬉~LAsdN-O4F4 ɩ:w ( ɩ:w:ɩ:wzɩ:w{ ɩ:w , cFF ݽdR I u+c˵3 !<c?F!WGO1UO1UcO1U O1UQ Qjeo me ySx 恢f #TRkQJ?1: t7EY*E 1E E aE oTYZOZO ZO ס]^3!^3J Xk R=OR=OR=OR=OR #lJ ^ ,1 }K }a )} ^G[`UζA7 4ζA7s)ζA7!ζA7 i SyN,v4N,vN,v Yn!Yn!cYn! XYn! ,FYn! Yn! Yn! e C`8 ħ ħ p zr^?:i4 n H;T" /xJj=xJ8kޭUkޭ4kޭ'kޭQ$3s?fu 23Faj R6 j$hj$h ,b  /    3@bNQ8 *f& 7XFrIXFr ^ HKd  ӝK $ ӝK ^  # JI$ C`^e FrR 4,4Z+U ~ btfj I& i k i    S ;:N : ;:N  ;:N i C C 9C +C j$2,ZQf eQf 5Qf ,?5Ѳkk?5Ѳj=msL_ܚ% $-_ܚ% ,_ܚ% _ܚ% V= s'Dtc( aDtc(sPd)R(?ˍ SZL;hL;j_L; HL;"L; L;s"A;;XkR M- iKM- $M- ( Oi j'^LTj'^LD > juM !ދrb H As2UsQR=C\SC\RC\C\=C\"$fPN,+&Tm iʓfG߲=d X߲=d *R,yW: \3O 7Vg!1.~5"rR'GY'\ΙC (ƻ(ƻK(ƻDv(ƻ%(ƻ*,1vJ?%*j"IB +x.3+jg]0+jg#,)3 6f,u5\, s8/ % ,5fųZ].hn&  /iq ,/}mOR"?*/}mOR" 0QC0^8#0\@ 1z 2I?%2- ]3VM13VM1$ 3vZJm:4pIym4ݨ 6F.$]6F.$] 6F.$] , 6r= 6I S8Y21% \5>21%>V au>V  ?̳@#@yЌ \ @8 A)r {Ca7jc? C^AEe>3=Emւ<?Fz7|HAqe#| Hc tJ  JL&v K-$ KƎqE Mwj Mw MhdN}#?N_< P8YUP8Y:PVvPVvQ6̈NN Qmk QQmk BQmk :Qmk Qmkj2RIWWRIW3RVb(#RVb( S w S w s S ic TؚV_?U" U< U6g? UԦсcQ V)ԅY?о&֓%Z8bm?Z]p%!U\0j6\^ 8'H$\^ 8'H$|\^ 8'H$x\^ 8'H$ f\^ 8'H$ (2\^ 8'H$'\^ 8'H$\^ 8'H$ \^ 8'H$ | ]dGm%^]ܽ^we\^we$_,S_,7_,Z,_,L_,a_L50d^SB_OmLEE`2+4a9D|a2@_0a2a2 bCfzpiw:fzpiwf#]t f#]kfL"!^YyfL"!^ (fankofankonfankof1>$f1>g2RiKw i]yЗG mJiB;vdi = j"( $ej"( l ($l l m { mYaem_;mjnm|-r' ny֊=!oF ogQZ q6[r#z r// 6tCz t{6R6u!t u#!fv_N 7'v; v`[6nj w#?Gx>Ŕ x>ŔY x-jx.kx.tx#x#x_9yy? y\x] y޽S zH+ {i, b{i, a{i,  | }9 - }"pa-E~kkU~ʁ; ~䅷R@(/@(fg8Rfg8?fg8 #fg8 fp 3GՌf!k , ^?AB e#y08Ҕ?`kP c@" (%ݷge NHCbNHCt5vx$vx >rI( ,*( ( ( }a a}at ,id0p" '!5 l?Dj `,e0<Q /b/ s d^d^lN0Y  N )nURP)nU¨}" 6(n]/F:&n]/F a n]/FYC )弗;)弗; 4, s_?/_)  b bi b s b V2MD i MD R* Ċ+ *xExEj 1zj61z &.d6# d/ kX:KY$Ũf?3 B%Ifv?R Ei EN ́c*Y CZ H;:=7]{\o= #i~5O s&7RW?/ 'TբB#&g < A |dv a6[0W.l ^PD!^P8׽8%o^ (%o^ 8dS]j] o]I4Tv zHOa m i;O_j"_#ޘNe*D ej=$j= u]j '#3</KH zNaKH z-Y(? 0Q_}Nv ~I1"q1uq Vqs:q.qj+qY  "&P ^$]r ]r k) ތ9ߡ0ތ9ߡ/ތ9ߡ War9Warj6WarWar sWar Warh ]uҲotZC q]t& q] q]RGEQ*)un|HNC3>A h9dCv8;1T? KX ԗKJCԗKJ[ KgS@b? _ *_3}2x!M ĔpO mT< ,-:zRNJceEdz|)oi[oIj&ſ A&ſ &ſ  &ſ  ʼxHʼx ˨4tȦ92Y S8 9t ̡@1Yܿ , ꊖKΕ kb Τ. ќ.}~`ϔ? x|Ўp;ЎpЎpZгyʲ 2X?s.9^ss.9^ ss.9^ ўqTP^ўqT1Қd4h'`;b'`;to'`;" ӳ h NX &sL ֖ \~ICHNOR6 ݴn@WmQ K_޶D8 &\ H R MĭK u &䅠R5&䅠 e\ $"^&%#j*"#j* ޹R6޹~d Uꄍ ]7ꄍ 5ꄍ ꄍ 渱N渱NK渱NRAr%_McV ,Y_McVl*Fj^b J^b (^b i @A,(k? &> &> Ds R8Ͽ&s, ׊i  QDv\) )) ) =Ľ "#4j)W c )W # CS)] iCS)]CS)]jCS)]CS)]CS)]sk* Ʈ"  ?Q4m8F;- +!?f+!?+!? +!?s XA.XAdbsj tGs R5K R5K WQl.WQl.iWQl.NEO -_1^Ik k S )KRJ @v{9>?:2J(^/cc$BYL 5vōf AS#Oؠs.$kOؠs.STBVP ;;ZLB.\ - , iR O_  "ںR aJ y aJ ( aJ , ߹Q( ad/ ,(qD? .:5`S U2Pt#^,Y)Mb IWN6]1Pk,]1Pk J J"  a] ca͗av͗av Z%Yd2pE 2pE /2pE i2pE9 Ezn< l e!ܯ g /Wy8/Wy8 T'C$!w%˳ " Cv1R " Cv1" Cv1D " Cv1K $LOמ $W %Zt %kڎ%kڎ%kڎO%kڎ's ~(8cTI ()I 0))]Gbz_)]GbzQ )C *D3qn]!*ϫ4Ez*ϫ4E ,]+PA{,U? .M,RU.M,KC.M,Q .ʁ v,R9XD?TɬV"T \QTeTeU<ˠ" V.Q4 c X xX xt,X x X x a YѴ!YѴ!ZUQWj Zj$8\!Zj$8\DZj$8\Zj$8\ Zj$8\ [@^ [Y0xx[Y0xx[Y0xx[$V I\r \r\rQ\r\rDm\rN\rY?\ĉ(?\DԂt\DԂ\DԂK])^*xM/X ^w2"b] "b? m%cW cؼ`vdTQkUdTQk eͥ 'f]6ltf]6lsf]6lkfhub9.$f?*sgj0Cgj0Rh /f#hhsKM_7i jf:oQ>i jf:oicx/icx/ icx/ iΎXE i$} kD-~ (@lʋdkNlʋdkQm & smU|P}Ye w mb{mb{?mb{4mb{mb{RnXnX_ o0yc p}Sp}SRp}Sp}SUp}S p#Ŏ9R1p#Ŏ9pCI# q>wq?# ;r8Mmwp ,rmukK irmukKtfrmukK s0T|sRsDXb_?sǗt^Oz:| u DTvau- ~?u- ~ u- ~utRLb7utRLbQ%utRLbx6r -y]LEU1y]LEU1K yy z Q1tzyTmru{M{U{M{{M{{oa ,|l ow |Bn + |6}v8fWt[}v8fW ~>K ~ K +~v j ~hE<5rJ?5v8?v8 7v8 v8 i ZDhmshmvhm椃l?椃l  椃l 椃l i椃l i_.`fAnkjM#ɫ 0" f%+av RERE a ٔ%ٔ ,^ V <->K<-> <->d Tn + 39$t/dd jO/s m@ {s5{s5 {s5 vJ\ $6vJ\ ,vJ\ i vJ\ vJ\ vJ\ yN8߯lA,!*;K9X^j9X^M!  /L "/L /L?  !m$o *t/ B; U  gBetk% [~o-κ5 s- B9_ ?*s zˍ 󝸘 1Dcd$j Ix &c͙ Kic͙ nc͙ Ic͙ !c͙ Q c͙ c͙  OA OA *NtF%k *NtF% m 0': : ߸?H:Bŕ ݮ } ,#q,#qS,#q ç PvT FWn&T FWn ww*QjH 4NdR{1 Wzz /ZO , Q3<?NQ3<H*l]R h*9 < \9 < /Sr>S );p, {?XCEav a4 ckګ۫Rxe[Rxe[0xe[!xe[}Ǚwt}Ǚw  kJ] i W&$!3'"ӝר&ܗha.p > >K )<d'[%1U[%1Ual;N(˾_:#?T+bN޵EA i M8R{^ypbd{^yp 05,#K ;NYA-YA-B%{<Q <Q ^W;^W]././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9894764 pychess-1.0.5/setup.cfg0000644000175100001770000000025114614030425014416 0ustar00runnerdocker[flake8] builtins = _,ngettext,reload extend-ignore = E203 E402 E501 F403 F405 exclude = __pycache__/* max-line-length = 88 [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/setup.py0000755000175100001770000003052714614030313014317 0ustar00runnerdocker#! /usr/bin/env python3 from glob import glob from os import listdir from os.path import isdir, isfile import os import site import sys import subprocess this_dir = os.path.dirname(os.path.abspath(__file__)) sys.path = [os.path.join(this_dir, "lib")] + sys.path msi = False if "bdist_msi" in sys.argv[1:]: try: from cx_Freeze import setup, Executable msi = True except ImportError: print("ERROR: can't import cx_Freeze!") sys.exit(1) else: from setuptools import setup if sys.platform == "win32": try: import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk print( "Gtk version is %s.%s.%s" % (Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION), ) except ImportError: print("ERROR: PyChess in Windows Platform requires to install PyGObject.") print("Installing from http://sourceforge.net/projects/pygobjectwin32") sys.exit(1) import importlib.util import importlib.machinery spec = importlib.machinery.PathFinder().find_spec("pychess", ["lib"]) pychess = importlib.util.module_from_spec(spec) spec.loader.exec_module(pychess) VERSION = pychess.VERSION NAME = "pychess" DESC = "Chess client" LONG_DESC = """PyChess is a chess client for playing and analyzing chess games. It is intended to be usable both for those totally new to chess as well as advanced users who want to use a computer to further enhance their play. PyChess has a builtin python chess engine and auto-detects most popular chess engines (Stockfish, Rybka, Houdini, Shredder, GNU Chess, Crafty, Fruit, and many more). These engines are available as opponents, and are used to provide hints and analysis. PyChess also shows analysis from opening books and Gaviota end-game tablebases. When you get sick of playing computer players you can login to FICS (the Free Internet Chess Server) and play against people all over the world. PyChess has a built-in Timeseal client, so you won't lose clock time during a game due to lag. PyChess also has pre-move support, which means you can make (or start making) a move before your opponent has made their move. PyChess has many other features including: - CECP and UCI chess engine support with customizable engine configurations - Polyglot opening book support - Hint and Spy move arrows - Hint, Score, and Annotation panels - Play and analyze games in separate game tabs - 18 chess variants including Chess960, Suicide, Crazyhouse, Shuffle, Losers, Piece Odds, and Atomic - Reads and writes PGN, EPD and FEN chess file formats - Undo and pause chess games - Move animation in games - Drag and drop chess files - Optional game move and event sounds - Chess piece themes with 40 built-in piece themes - Legal move highlighting - Direct copy+paste pgn game input via Enter Game Notation open-game dialog - Internationalised text and Figurine Algebraic Notation (FAN) support - Translated into 38 languages (languages with +5% strings translated) - Easy to use and intuitive look and feel""" CLASSIFIERS = [ "Development Status :: 3 - Alpha", "Environment :: X11 Applications :: GTK", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Games/Entertainment :: Board Games", ] os.chdir(os.path.abspath(os.path.dirname(__file__))) # save stderr = sys.stderr stdout = sys.stdout if not isfile("eco.db"): print( "ERROR: File 'eco.db' is missing, please generate using command:\n" " # PYTHONPATH=lib python3 pgn2ecodb.py", file=sys.stderr, ) sys.exit(1) if not isfile(os.path.abspath("pieces/Spatial.png")): print( "ERROR: Preview images of pieces themes are missing, please generate using command:\n" " # PYTHONPATH=lib python3 create_theme_preview.py", file=sys.stderr, ) sys.exit(1) # restore sys.stderr = stderr sys.stdout = stdout DATA_FILES = [ ( "share/pychess", [ "README.md", "AUTHORS", "ARTISTS", "DOCUMENTERS", "LICENSE", "TRANSLATORS", "pychess_book.bin", "eco.db", ], ) ] # UI DATA_FILES += [("share/pychess/glade", glob("glade/*.glade"))] DATA_FILES += [("share/pychess/glade", ["glade/background.jpg"])] DATA_FILES += [("share/pychess/glade", glob("glade/*.png"))] DATA_FILES += [("share/pychess/glade/16x16", glob("glade/16x16/*.png"))] DATA_FILES += [("share/pychess/glade/48x48", glob("glade/48x48/*.png"))] DATA_FILES += [("share/pychess/glade", glob("glade/*.svg"))] DATA_FILES += [("share/pychess/flags", glob("flags/*.png"))] DATA_FILES += [("share/pychess/boards", glob("boards/*.png"))] # Data DATA_FILES += [("share/mime/packages", ["pychess.xml"])] DATA_FILES += [("share/metainfo", ["pychess.metainfo.xml"])] DATA_FILES += [("share/applications", ["pychess.desktop"])] DATA_FILES += [("share/icons/hicolor/scalable/apps", ["pychess.svg"])] if sys.platform == "win32": DATA_FILES += [("share/pychess/sounds", glob("sounds/*.wav"))] DATA_FILES += [("share/pychess/engines", glob("engines/*.*"))] else: DATA_FILES += [("share/pychess/sounds", glob("sounds/*.ogg"))] DATA_FILES += [("share/icons/hicolor/24x24/apps", ["pychess.png"])] DATA_FILES += [ ( "share/gtksourceview-3.0/language-specs", ["gtksourceview-3.0/language-specs/pgn.lang"], ) ] # Piece sets DATA_FILES += [("share/pychess/pieces", glob("pieces/*.png"))] if not isfile(os.path.abspath("learn/puzzles/mate_in_4.sqlite")): from pychess.Savers.pgn import PGNFile from pychess.System.protoopen import protoopen # Lectures, puzzles, lessons for filename in glob("learn/puzzles/*.pgn"): chessfile = PGNFile(protoopen(filename)) chessfile.init_tag_database() for filename in glob("learn/lessons/*.pgn"): chessfile = PGNFile(protoopen(filename)) chessfile.init_tag_database() DATA_FILES += [("share/pychess/learn/puzzles", glob("learn/puzzles/*.olv"))] DATA_FILES += [("share/pychess/learn/puzzles", glob("learn/puzzles/*.pgn"))] DATA_FILES += [("share/pychess/learn/puzzles", glob("learn/puzzles/*.sqlite"))] DATA_FILES += [("share/pychess/learn/lessons", glob("learn/lessons/*.pgn"))] DATA_FILES += [("share/pychess/learn/lessons", glob("learn/lessons/*.sqlite"))] DATA_FILES += [("share/pychess/learn/lectures", glob("learn/lectures/*.txt"))] for dir in [d for d in listdir("pieces") if isdir(os.path.join("pieces", d))]: DATA_FILES += [("share/pychess/pieces/" + dir, glob("pieces/" + dir + "/*.svg"))] # Manpages DATA_FILES += [("share/man/man1", ["manpages/pychess.1.gz"])] # Language pofile = "LC_MESSAGES/pychess" if sys.platform == "win32": argv0_path = os.path.dirname(os.path.abspath(sys.executable)) if pychess.MSYS2: major, minor, micro, releaselevel, serial = sys.version_info msgfmt_path = argv0_path + "/../lib/python{}.{}/tools/i18n/".format( major, minor ) else: msgfmt_path = argv0_path + "/tools/i18n/" msgfmt = f"{os.path.abspath(sys.executable)} {msgfmt_path}msgfmt.py" else: msgfmt = "msgfmt" pychess_langs = [] for dir in [d for d in listdir("lang") if isdir("lang/" + d) and d != "en"]: if sys.platform == "win32": command = f"{msgfmt} lang/{dir}/{pofile}.po" else: command = "{} lang/{}/{}.po -o lang/{}/{}.mo".format( msgfmt, dir, pofile, dir, pofile ) subprocess.call(command.split()) DATA_FILES += [ ("share/locale/" + dir + "/LC_MESSAGES", ["lang/" + dir + "/" + pofile + ".mo"]) ] pychess_langs.append(dir) PACKAGES = [] if msi: if pychess.MSYS2: gtk_data_path = sys.prefix gtk_exec_path = os.path.join(sys.prefix, "bin") lang_path = os.path.join(sys.prefix, "share", "locale") else: # Get the site-package folder, not everybody will install # Python into C:\PythonXX site_dir = site.getsitepackages()[1] gtk_data_path = os.path.join(site_dir, "gnome") gtk_exec_path = os.path.join(site_dir, "gnome") lang_path = os.path.join(site_dir, "gnome", "share", "locale") # gtk3.0 .mo files gtk_mo = [ f + "/LC_MESSAGES/gtk30.mo" for f in os.listdir(lang_path) if f in pychess_langs ] # Collect the list of missing dll when cx_freeze builds the app gtk_exec = [ "libgtksourceview-3.0-1.dll", "libjpeg-8.dll", "librsvg-2-2.dll", "libwinpthread-1.dll", ] # We need to add all the libraries too (for themes, etc..) gtk_data = [ "etc", "lib/gdk-pixbuf-2.0", "lib/girepository-1.0", "share/icons/Adwaita/icon-theme.cache", "share/icons/Adwaita/index.theme", "share/icons/Adwaita/16x16", "share/icons/Adwaita/scalable", "share/glib-2.0", ] # Create the list of includes as cx_freeze likes include_files = [] for mo in gtk_mo: mofile = os.path.join(lang_path, mo) if os.path.isfile(mofile): include_files.append((mofile, "share/locale/" + mo)) for dll in gtk_exec: include_files.append((os.path.join(gtk_exec_path, dll), dll)) # Let's add gtk data for lib in gtk_data: include_files.append((os.path.join(gtk_data_path, lib), lib)) base = None # Lets not open the console while running the app if sys.platform == "win32": base = "Win32GUI" executables = [ Executable( "pychess", base=base, icon="pychess.ico", shortcut_name="PyChess", shortcut_dir="DesktopFolder", ), Executable( script="lib/__main__.py", target_name="pychess-engine.exe", base=base ), ] bdist_msi_options = { "upgrade_code": "{5167584f-c196-428f-be40-4c861025e90a}", "add_to_path": False, } perspectives = ["pychess.perspectives"] for persp in ("welcome", "games", "fics", "database", "learn"): perspectives.append("pychess.perspectives.%s" % persp) build_exe_options = { "path": sys.path + ["lib"], "includes": ["gi"], "packages": [ "asyncio", "gi", "sqlalchemy.dialects.sqlite", "sqlalchemy.sql.default_comparator", "pexpect", "pychess", ] + perspectives, "include_files": include_files, } if pychess.MSYS2: build_exe_options["excludes"] = ["tkinter"] else: build_exe_options["include_msvcr"] = True kwargs = dict( options={"build_exe": build_exe_options, "bdist_msi": bdist_msi_options}, executables=executables, ) else: PACKAGES = [ "pychess", "pychess.gfx", "pychess.ic", "pychess.ic.managers", "pychess.Players", "pychess.Savers", "pychess.System", "pychess.Utils", "pychess.Utils.lutils", "pychess.Variants", "pychess.Database", "pychess.widgets", "pychess.widgets.pydock", "pychess.perspectives", "pychess.perspectives.welcome", "pychess.perspectives.games", "pychess.perspectives.fics", "pychess.perspectives.database", "pychess.perspectives.learn", "pychess.external", ] kwargs = {} setup( name=NAME, version=VERSION, author="Pychess team", author_email="pychess-people@googlegroups.com", maintainer="Thomas Dybdahl Ahle", classifiers=CLASSIFIERS, keywords="python gtk chess xboard gnuchess game pgn epd board linux", description=DESC, long_description=LONG_DESC, license="GPL3", url="https://pychess.github.io/", download_url="https://github.com/pychess/pychess/releases", python_requires=">=3.8", install_requires=[ "pexpect", "psutil", "pycairo", "PyGObject", "SQLAlchemy>=2", "websockets", ], extras_require={ "gbulb": [ "gbulb", ], }, package_dir={"": "lib"}, packages=PACKAGES, data_files=DATA_FILES, scripts=["pychess"], **kwargs, ) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1714434324.9894764 pychess-1.0.5/sounds/0000755000175100001770000000000014614030425014112 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/alarm.ogg0000644000175100001770000034755314614030313015721 0ustar00runnerdockerOggSb٘vorbisDOggSb٘^4qvorbis Lavf54.8.100encoder=Lavf54.8.100vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s6pR4XhJ 01Ƙr9s9H) tNJ)=Bz!B))C(!R뱆N:k!Zj2(R=PRj){K%ZkK*)z9RL-``'EcbC BH)RJ)c1c1c1c1 V+j'tfdȥTD#5b%ء`!+2Q5^+bj, AAe($)XSȔRY%tL)F)BƔc)tZ=TJ @P` CpK(0(I @"3D"b1HL`q!246..tqׁ P@N7<':xH6hf8:<>@BDFHJLNPRT> "9@@OggSb٘ P{v woMku~[fX`JVc3H^$)1"$,18"ML(!3h(-"bqai1L3 jZmQ{[q;L5LJc`%l%`1ZJ^?b T" 8HQ3(@dA i DY HIa @@bD"NiZ3Tx눉Ղ-6vbi5D0aOseVI9ycؓ<\o}RXY`@FYQs,Y֌ dQ]SB]LX7P2D&$ C@'. & %q2,G岄Ka"@R$ %3-g) H2IA,` # ,((!4%aQBSJ)p pYTD(B!Y& 4P,JP !Ň̕L`xp N8}Do!@B(C)"G20T01Q(DQ@c:& Mb ;uJua%>ԃI1=0׃cXG" P#.4!PP ?!thD1 cC@DM Zkq 0S.XĒA$ "̂33D)! Q810  %u.PV Cit8a(…'(1:CZ4!0nF[k aaxL1t: ch"~v8,g_Wo 2 %yeP*k U2 TZ2 E E Cc5R#I2I%|`K &B"L\.GHe 0$d)Cb, ,",BD $B% " "`BJ.•̼> 0#8G#G8b&0ǧ.bçq @ qhk.vƄ&~„`1DT!DA\p0``3:`$@ p  $\NF+tLtG -bCb>Me4Z4abцc&"z . @d~4D ;%N?W轁*PV9"˨L̚%C<, n9N'zFFj "FaI2J,K!B-*ec0G AK1OBB dYDDEBID$fɄ0aP`1JHh1Q%`H$K" QQ8EOG5+\}h&:da^:<8823> ))"*joN=BRW(@[ap\#"b"L2c2. 0x -Fa\=$4A y}Dhqzxu!#E}Dx#FhaC_Ĉ&BnG>$ 51&0&0`4!ZrDѴ:__WFJ~?H$ P BB QLt1YtDdV.63^(#*ưh ŒRapOX .G@(0,Kń2<.!a0M0!DHS !d\0b ( BJ AD`$R$$X &"J GeLM_OH:1G:D (u FBZ Ճ 0m"j]c0$h14}!R0Bc#AZ F1 Q/tY}S (KYU  BCI V"L2("+GHe L, S%I2I$ ,HH1P,Q8-*&")a.!@fZbD i,$APa 0B` & &a$LB01p(PC-Ūj0xF$dfL1Fo][;`XSP:Dk3t:E IQ؝00L1ׇ# a1!,F:˃B0MөyPFB&A= ]H q`ȑCV8@h& 6Bbh]q"Ʈ>:6шhb C " &10oEb;4Q6T87i*DRb!̓WrK(EU%ϫ*@FY,"S(@,!RY,IpIb%P!W(`xBW@BQED&, EB¡ " BE )$3 $%  axf0a(JL BYLA!|x %ǣTpP(11Q%LGRE,ŁC1hk@@Q8foo`ɐװ3EUAAUC qqkF:x^p<$d Ƅ 1AaFwnG@W0FW[13h``tֺEa`"8a@x80FGA?B-Bǀ`ЁB}uf2]H~B7)$e"' D5DQ( 6I ,-P Q(֬n$D!,bрXX$RJIbDY, 'r(%E D(&dB>#%dB &J@ (bBLf  Eh@Jd0"!%N0jv"(*-C 8u{@D+ |%Nh )ɑ#\D0(irHF>M0Ӈ?$0E %oZ ;Pcʼn1c1u ("é"mvDL0=!w[1ġE#AC-؟ `#6#oFG"~v V,bg$!A®I.̬Q @  , ) eQx\9$DY0- $$`"$` RJHHb |FP! 8ŐL3H!%f"& -""Npax p a&LĄB#cNX39<>1\cx&F h?@]2DeGL%c蘈aƩ " Ƅ6t=@0Zhm"0qt8 h!a1c;@$D͈6;ClF F 0`@]aU^JvWz@VU*Ɗ`3B j=l <:5vln$$$ I,R#C eB&P `L !'AY%.*B`ff1X,D &)XDH4)BEDYTwd)8nguhPظ !/Fx Hbu fx<2ɑfyz 0<Sb!jb 1-7}hd2ޅND TGF :OiH'%>0^IMC# cbeO p,v@A#S 1Zhat!0b mh: 8h#ˆ: )A `Dra!$@@n;,Ā$Կ ITW)$ .23ʕR ɲja@If5(R*Y5dEQ]SDG$E!$b(%" ! _Ȃ2, )AL +勀 &`%JB$L B3I%@1| sqgY!#P($"0ʑ@ ) bf%*rd84a11 @ P\THӠX )f"J hV d@ @UDԪ2+9J]K(Be# WE2#:ȼ`‡za\3^yĈm4-$C5%m}]! @DZhZӚ~k:B1"D {@PEUi1b::0 bu [YPT8@:t hBF] ";!C!uĨ?L40#FC6A-n0EAneB#`0hFh(F,U,Ufi * ?$ @IU֚#Xmc (: ,TTdUTdT’dBe DhP,D edX@J(J J g9'i1q1J\\@Ph"*$pYR,%-*"F$@ CHAHBJ&`^y<@^\p%Y {7e<! bgFPDu0x1̐0#\ N0{ N +H0EH':Bl' a`{4;C T614Ebu*&:#h7膉L4CCl @@,@0M fˆ<%@HaDC_ Qseͦ/7^>(c-k6}! g5 JDYK EQ!"gǡ)*3IIF ө%I, 8<#`8ౢ4M(1q&r(@X>@BP1a8Gy>C(a)I01@ 4 q%&YBJ k^^^uQq2|zeta|L Cb vi;t`t^G`: y00 SGza@ VP JϠSrb1PJ0 :0a`fHDi;B "-v*&cC11&(Bwǀ(ttaFg Ġ -haC~vT0$̰κOS2 3Ӕb7j*ʐ LPF!QYKj dYTg2 ʢAhR QQK&)A4R Œ$$H)` AX\(.PAI C|!0@AH!`@Jb$$X,d M"PTń"C A"-uG^Ӈ(qFh @& d" cZdAMPAŔn H!DG誨*^UcDbiZC} 8"=хѫX1ӂ(b}jkaSՀ@3A4 Ũn#2:4AkC фBhch] >DRҤحfL_ny wI[͈.29dTiP TЙgT+*j, R"BH*)+`#0qH&IAR2KB$HHD\4 `)B+ )!I`8XB$1`fHD`d@@@ )!"E(jgkZ 㦭XaL!̧\0xJ" @0ګb@0BQ'%}at'B?t`aڊwhF1p|8k2@6A-Ǡ42@A[8#3;6QXЁz̈́mQig1qD 1Al-vCUEhB?#\!|XL ILFa\@B%M"DL('D A̒#z=#0R=pܡj) 2/#"&$p8  i7C-Y(:Z  &X*8 j0abgXXFVL q8c4!Bn_'Fΐ4:'a@\Hۥ;: O9Aw8қbڪ x„ -8f BZ B"-hn1b~7%grECwL.x ;¾1䮼!&t'h`g[XD%l&%#p<PH)"Lh"sPaD)`Z1P b1J!3%@`B&ńi"& D\Dx ̧xq)q2$8f0TP0'b %& ##%v-6梤ŽH IcнU5T!O WH8"f0oLt+0ЬXH0p9|rPDT)! !&".dKB0 @E E̐&HD)SQ"@b` Q &3ׇxq})0C )`D>@^!i0((VQPL5juhZAQhMhf`f`p2$s\F_?10A^̼8C&.ROA6O"adN0x'N5P: **NC)a[C0p:on4FDBC3у!QDm1t"aH^v15;c ޲E%1<kAR!1EDeM`PQ&BBY5P.JYH'@ d '3 ML&)&J'p Y%b-"Rq@@9 \B9p! DEDB0,"(!0 AL,!PL a BA,"$#CCL@M-(*XDmMGP!HDC<[ԡh V1h( :F `o04Jԃ+yIH# "N48ut FGhb1:xJj"tе < a46b3aDZZ0LF #\0u . JJ ( "+e8_vG3tZH诔|sL@4 +EYKYv@BUevȲJY&%KBaӢb`QQq0hSE@DR2(0 `P(L8XQZ,"`bBJ bbb"BAD  @I)0%B8RuJ-@` Oh#I(#8 ZUΞP]H y 5sidC#c0F炧>2Z:\TP1ť1;F7`d<0Ё100m&DlA "Sxh70cu`-$ctFg)yM;Lh曂P,C$DU IQCUb̊@;'&JEuȊ*Df t NKl&+`9\y OR%BRB2 @(fРD&DT("(@ $!%3,$ HHS@@ Lbb @[jkqjڨ# O$c2 +Cc^+@# TA C-Vq" ^ ԅP 30a5G$кBBAJøڈlPJe3uG&D_%k> 1(}ƀѺ}Clƈ#58DPG8(uC@OE#!j!jQ1T 羡T 羡)U Ħ镁UPEX#$2Tж Peekd2N` KW2.$ eYABiJbq,&C !&a)@$$@@SPD,!E&BQQ)3hAL Hд8ҢB0C !YH0% @@ Db k$ ĸ1jƀ!0D әF#.G.00Wf14daf57 UUpꩋzOC#h-bB(Dq'TPĴۅ1  @:Z#D#HG:p`H-  h 7&ԁct4T%1qǀ/jCKbߕY ǎe^PY֘ @R +( 5K;YkȖȨN0^)32pl$ 0y,c1 "N,%\>8D@B2LA L)SB! f"LXb1B"B11q0$`)d&H&f R& & 0AO+3ɕDqSU{BbCWu  a(ѓP@h$L̋'<,F SbchEL4DD3zgd3Dk1w/R<# PQ58FPjLX}.&Cg$'wD"`8tGvѺ h (2tn@@G7[W } QTs_tGc☊6x˚hBߍȈ2$2y 2.l êu:!@4:g%Qe3$`)$ ID,Eiqb1"&.BBX£rx\!Lń"L&)Lh&4 "Db!B,"@D)ZY(ef,EYTB)  u]s%sd!rPQ;@UQ 8!,A3&pL$9< 5bgUTZ3j#@HAgL(BG Cu`1&(zDtz΀2h- v BhQ}Іt`@]4!C$`Db ]qbh߈:ĉЂ!##tA!̳B]C9~Z5PP߱7((ô'ւ8DV&PU 66 d0dd" RHP",.0J JDEBPL@X""4 "%IQ`BDR1!b,D(fJ)q (-)QPHa EA㚐Gr0Q΢&Ñ. @fXQAudk""ь1#,bցT n^jZDU! iA- Q(jHC?01 $Z.1:xE":^!4Ch[#Ә~aĆ~#à #hM_$Z:: @`,ZF޶rbmd-2ahz6rSX 2 y'eمd Qᡕ y0e5" Rb1J)q b ABH"0  Y@B L )%@@0%d!@h(hb0BJ13I "S TTjb!j:A`Ӂ@AA4,#&Ut]MlDLUQAMӴEl0P5l (XVX7PЏ~aBnw Aw&; =!> =0 tGh! T ۍb,RPCP-yb0&"k#6"ަ '0p0MhiO`a6_,"-sQDVd:@9pYsEP"DeE"+GFe&:f.`Eh@%I eB>/<@B)$ bb)$ &̄)E@ 0, Ġh H @JA,XH@(""(@(P B L@B h1& B)fQfDY\@&L@(W b2"B.{h[QĴW0,"" 8UE0(1T1![Q pRP'nha0#5@.C` Da! A?&&&Z1B$FkC Cw"LAC h5D`Lk4qB4F$Bަ QLb)ax1eT UEUF$!2xH`VpЂAȬ+rdFw$(Iƒ!!X $f 9>0P@pX@ PP",* BР x\erYJ9! Lba)LBq!D0 ``@Ӵ[MPCq̑ZmQADDE!+k} @apt OL5`ax-MUԙ82pd38(Z!t0F] g^GF'O#<,P1.D`! 4# C2בF_71ЁH$0u ˆMՄh]ADZO!`0zG!0џ `%aJv$%ZNۃ0%;ߒO-ݐB-YQ9K/U83jZjJ8ʪ@Cg@YcV`򨞱D82IDX$$!YBq&h+dr!! qJ& $ 0@ Ei3RA`Yg Pa@DR@0A "6a2<8H9r=G mĄH@LvXs*j"Dkc,S El 3^00fHL)"b$.(*.`:0P;ڴ' Qt=hЧc@G:֡a84PU"(%DDA`B L9CCFMluDB0֌FD}Ƅq"1(tь1H@NӓQ ޗNӓQ ޗ{CD5YdU%H`.HpbL% rQĊq$%`@$$J\\Hє(ą" |!q< i!"L3<.K(@b  @  " 0,0 "6bk"jBC)`BMֈ@ ߢC0ŰZ P @ +82FUU1GVQЍtAsOC.0P0=AB@@AuԃH!L}!0‹CWn:Z1pAl֍bu1 $&Rv\=,=%a4eQ /AV@VD2  A W`BNGO1 쑡$D@ K)P!_ J@L PJ9|KXF 31"@B@% P* b-NaLBC b)ifBEbP0@(%$D! 0!`Sb,&;X01`:f51 t⸠д1"^3BȇhhCO sx"LD(,x@20 |t=.10$ `a`2O8AD#"(PB'p. 'c.`& uaTG.C 8Fc`8Z5D =Cc 6D Ē ʯ7.%3R?_ , !3-gIJ"j!%aȌP(gj&Be+ DQ5(uLfHI!3,*JDDTL0JB002a& 0YH! ` 0Lh!BX`)3 ` f,!IJ&)Ai ,&`0 CbH#("0p8@z'F -v"`"b`cr@f`aDU`;1#h>qy TD:$$i&Ƅ1輞X#@ 10Bh͈#PB7 1m8Z &Z PFq"54C @ 䘄!t!"嗦䘄!t!"$EqeQc 2  dyX2BuD7tqLJH $` R ˥&% BAAL@Q" ͒ &Sa`PPg@ B!"b4Rb00b4  E5aau`g >E`>B ȋA` 0 0a"`f a*VS-iu$ hwP#**1P2Iq 1joFN8t@hHB %[CyD"0A FhhA FO5"[ j& C51bG1dø9$~ESxqJ&1CW4m>{EU! N@ +*` ""BX(9gj,RZ|P`Mwr#1 @,@DLR`H!hL,eOJJ(B, X0$i" R A qB $"  )`& b@`A4D!´ B""D\(E(s \@0 #EaH+zF ÕA@ x` \ 4PF$3 Z]z. {< %F tB`x}x-DB FDkuc B`]zH tDHd)EWhZF thA^RP|fX *;_uK SuFACVRI"*kaPJ *j PvV+Y +*) YIa0%@@)/RDRBH!!$1,\'  qV ,0rG8a9 1 DL,$ BPiBLsVlW'l T z1bibPt`o0hD`D҃vOC(`(ÄB 3Jri#($ !!p\9x~60ƅ0@!1v}$ނS0xhCq07ćf"tS0FшhiFl@ƀvֆZ0цAG!.!G Q!F A޶$L.4uk[TB&: 1( ) p$Eu!j+*LN`V He $II@R0Q4EA(hP"&8 DȀ 9,`eq!B>\0A$4aa %\S !RbB" 00B1!% XC2@L`bKpW1/5>| |W qhN 0L)8ag ѝb( *ĸ,RB5ԑEEPctL8@U4lm3ġAק$.Ewb S`45*& Q8 qt-Z;ѧ>BMGQ}1hm8LnD ކdAd>o!Eg=7DDeY3L2lU%(k1H %>c"^R"L' ( Ȕʕj`#aIL@H!FXiZD q0PHY\>`fLg%\P!%@QPɒ !!3XD $01 B@0D`0\y 0s%G>!L>t@pLmCQLC,6 1W& P~ľ ]B v" Q 0aZ  \ԡb z"bЄ -(# QjS%dE&Zkjc E  Eh1Zw0х" 4O@hF0DFc!^礞BnOxI=.H ]JU+J 8 2APPT5, =*# ^)kHPIb fM bbB%A2 A! g "&H!>Oa@!%D@0KI@ @d! f`B &"ff+:S!GSTUh(" igcv0 $Clhʄ#3Za8[Ď0> 0t!A\. 7-F1ڈݎ01FB: !tL[`CL#z aB aDZh &tAM- 1 #2a@yG :DRPYڭOX- [۱! 5++ŋ@YEd*JLĕE @PFUh9+Hba'YXXHCK!ʂ0,`IL$Yqi ! Z@4!&0 K1 DqbZ bfb0` MAD<BLSb4P @j1:3d|L2a2c2Y( ȇŋBA u@&Ac0 \Càc # 0&p=h81"< Q8LA<^ӇCoZ4.b4a~8??!B "q}-j1B!֢D`>dR;dR{Bye $GG)*  2#$( vv݉0bSŰ3-*IÀ&ֆ nEX <0NF0XtbCC @!p%.35S-q&. BÈmBB?1Qh6b0P֏1֚،H<@b#N@ĂBf~oO,(dOm.w#QTgR1NR9(P*(Y g`͜RQ@p+bI$!H!B qZ\!EX`X*#*& 0 Gb(aK0B )%K!XQZ 4X 10YJ YpOs$|ȑ4,C\O~G `2x|` ! Ǖ+\: #ႎP0r0!G!q8DG=# H$3xF'(%|H%NC|FaEB_: 0@zԂ#c,( h;&B~qQxeJ 5.<@"ީDabHGhhDnh @lEԂjmHNAH_S Rv}@#9!}7*Jʢ$ʁ`ITJAFU[R;XC JYBe E%1 H,Ib&!Y0 BMSBhJ Na(GZ@PB Jh& J(f0ODV\P, 0D(*J@@DE!&J ,#deP.(aaQ>%C|LBdI$ B"ᰄO9 (`"$DDT & &XOPPJ%I0ǃcr\11uqY$0BhI& 6X1 L+Oq}xfp`9# ")9+0]&  >℉b"HDhF$OI:=g<"iFA#@t MD0:t֢Fct4M$~u}$dA0zMd(0tFVA:/kVA:/k@(RHQK j, + 4Ȳ8 xDdpv:L ȢTe-L?#PԬL(I4IHDd)R$,B0KJ(Cy,E$30%B@)f ,1Q>3 Bh!3i %bA ,1I,% X B(1UVLЇÈG=^ 3$01G`CHˀH<+5:rĈh}#1BǠ B1[]6H0:6B8 5N b)Fh Q?!8 M`b11aDAuu4r,_o)=frY4;$ߍ U ^9 K"pu 2Ƣ&%q#ɲq;2BUXVjX̄$X&` ̒@cZT & (E(<iVA & ! X!\! B@1q #bD\0Df("J1M"YH!,HP!`)*&6VQOa;[GQPA%1C=fɄLQALX]:`ԇUOS'<1o}F;P' F}'u۝#~ք6: C_k  tc Nؙ" ~ -C7vu0~G?t#$Bah M}q81'(؈o]Z^o^ d KJ`P}2&@( rpi8P3PAfAVTWX]C1d,L"DD4P4erBZD `&\.#ΓrddJ P @0PH)I$! )1JLD(3 $ IhM ,dqa#G6.8 /q iX,Nu5 GS`Hz>ރ cp ,2:SCdJACEwH !ćFCKu&wcq0P&MPGETZ3`BGh AP4M&Bh"zhcbh`tc?:=hc 'ՅRYH~'Iu` )xAFFXE`%@D]ψ*pdQi@dV$A,E2"L8bdD KB `&a9\! @`& LP(.Ȃ`Y.  LH0`B!I 10R!R [G:;1Lt09<i"6FdGIMu<: L8fȄqlF zCudr}x] C>D뫽{x衇 "@(7 FߏQ0x0`"vt]آ u ( iq #vЌ;Ďb#D{0FdM-F b @o!#Aj[GDb4 `~ѬY~ểRh,Ys(@Q Te E ,UE @ DdYT"cxH$De\ʡ`XTH((2L1"+P$D% "D $% I&DLL L UsBTm-b)v*bp`r\NjP0'.Yb0\#Ng9&Cx\; p1Uj rqzB؜xPg(#Ay8%!LQ4 zPà"FD0CC ߺhZ7ht@N7 &Ak 3F7cLFGD-޶@2"0?x=۶@2"0?x={PUQՙZ E@AfE5)D,@"Ƥ$U蕪""O ʪ KbU%cI`H $-ND .** ` C! ADLC.e+ \ ,ĀARB0 &B!S"BB2ILH|qf` Ç@TDM `\D@@ r$W2S`>c ՑE H `"jbأ/ @0& G0(.uGqfd^aBṡO‡&``@@C6}QgclFh04 jq@0Q0@DA\<5umM A Ń[Sw!RVW|ej@Ȫ* XQgBYf$"T5@GRX0t̨Y&Q QUR$HJ `)D( %d) f @ϑ#HJs$,,pYB(e)K$&g b &0 034(R2C0Vvl q9>d p  &C,PAFhB_Kb4 ۄ*ʼn '8 h:FϢ`DPO-RB1Z 1y @`n_2ǧ dfǕ+H4L1"Pxc:xJhш}F-B mF_wQeR!Ѝ˛eR!Ѝ{YcQQYxP(# 4 PC)kp2 "@w&*0Gee-@dd,  !X28@ Pe(eX2I0 ,  @ "&.`& b03$ Y!( "!$ ) "& d 0ll 0 9\3/0(b È~<, Pc6!V"t0p\\ǧ+pQ*"ašUq<@IdSU մ4!aH>B;10BOmޑ#AF:F0:Ko?%NAӥ3ķ@D01;ք1.逸p L4؈ZZ APZG Ho+Nhm0 @5C>8eձt)j>HH NYu,#:] |7PVג!ԁl_ `%b+WH'`W-ĕRYQKL PW9%6 RX@LTBJ@(.PF!`aR`("Q1J\L@a@A ` RIPE!&&Na^ǧ ST4tC?d }3z8:(j8 T+ @&G.>ݦZ0@E"ɢN~ 4 ۛjD1| 3Qޘ~GBl#!TCAB33 0x D^dj+1f2Ď6 ]  #m&#![:E%DA MV$1N6w[iESms}@+DV 4dTe> 8@8r@L+j E(+<",I$MDAQJ"."JĄDfZ "* p%Gh1%J D̠pB0x f Đ` q,D(f0$AD`YC%$HPPLQ,^q|64t $y\`Bȋ! * !lAoHaETô1f{@qFQQCBZabd@ftC  "&b !2ZХ]V-q=tiU>u|o U /*Y` @JgDdFVEV' @#j%D BYʀ8ɨNƒ$B((, B1\Jy0RX 0@X"(H0B&)  ,  aBqZ\DLKfR!Hf`I0 W LHzᝰU:5U;28Ñ>pMsi 0&yM :0POzpq|-NdBѡg]``dDGmLD AbHoЁHlAP2I^G@b_m4`.И跨/ 6h-tA#N"bG3_oYjR'"}#TͺoTݐ.H)sbE\fB(j23*ʬA/Q "+ fE!C(FcRLdd)M$HD )L!-.`ZDbh.'> $K @Y Br)˧O9a 0< P)B i1"N(A1`IKLѠDAąW9#7!1:. O L9(`!acQȋ0d@`   Tj`0:BbcSMvAGbfc<#ZG&DԃxjFUAmY$t-27cD$>\> Ӂ"*~c hރCZl &"GZkc"Bl 3^4081b 4!1 $lj{kB@Œmi]@RTDTb 4mLedeԬ\)""2%Vt3(ꪲ"q FTL&@$ B(! DBhQQ” 4B)X0'`b L,$d !Bf ̀` !Ah!@XDơCMpqp!p\s>-:t61PSg#'-8"p'GPOĉ \Wt|HUŴ9tF0  #!zH(Bet:"D 6bhCAa *b @ G:Lth"(t##fb"N 6& CGG@ 80!LQM  "^Zs9b,>4Ac6M~o@f!xe2GU8+€@VTW75,-N (IDB) bDT@AH )JD\rE(P@ L!4SB8-"rB(RH!`ɐdE(BBB(Di1JDBQE(B(Z"b$|z]:Hff:0C ,NL?BL at#!IB.c2<~'9[4#F6M0GC0gs,D>ƎТΡP@A0&@o:46јh-菾 ahHJ "p!1h1`u1&tК8Z Eb61F삡iT${&9f żcI~;}eeBPFuv@HeU 2;& 4F 3If""&Be(% eDy`Y0$3$ @&4 &" f)`EC\(B@`  (BhR%&Jф)`بj 1^>jzEU1igv͂  uzc(V"FՍ, jb hž:f|C) 0!\@&@tF"X0t 0 <^}Fc8ZwCDݮp@)дߢ~Mn!Bԍ~G"p2Pľ;CӍ~OAE䅆Ҏ彏5'/4dv,}4] ePCe+ A* Wl ,Ԥ!dDURdfp8n%j b: Ē$`L C!B>_#Gh! I`!RdI1 1!@ X2M $I$D%"d1QqB2!bq cubP וb9I*VX&\z1[k@F<($aff' abL8zFbBh! #8A&Jct\ $aHi61'0Q4B H!$ BgD 0D ]# AGA^O \G$яq1AGǠ~Q bGG&F7 5 L@k>8APN;K%B~oRf<@$k(0Ss'ѭ1)()IbpYJV8 (S2/ BeLXL\ $"L "&JB! f03"4aq  d!q \1*6"j: #mPV;*OFOF1-":fgAEࡷ0/"0W. C0Wcȋ 9gNPxi <\Xt2< pRBC @# Ӻĉ1#tDupR¨3!a!: |$'0 ޢ{14GmC1b `7+ Z:DƢ^DnC FdØ_a_Ғc~͇}"0I!ZR  Y BU Ȋ:NdL$`0DDh1J(*B(%8P%"@2 h@ ` 0a ECP033BHff@JL  "`")$H2\3<8ހ"]4:0{:0&>0@D uq:"( N'BDC"EGbb<ktt6 M &0.a: (\pL:5Q8$g -a5-&@A4uF Q;Fak M7(t @@$}d%٭f I}L7{OGVjƐ4Wt{C**E&)%] "jVe eB J*9 PjuH2Su 2k[;;Vt-`IR21IbDif1"%.N &XJ e)(QP " !bZDȂX 003E1%B &Ő ̂H B2@`KfAB0!`! )@ )2`& Qá'p@ab0C#a 282:"t Cu2  K> Tg7].L+iBBJ(,H+GCt1 tumDa`=#\TD;-@6!hD!Ќ&1tHL@&°&°we͐urW@ RDVPT]dP6k8$G(H bII H ,E4 !D3!aŘ M@11 @д8 eQA h1Q"&! <&d<23C•&Z!r>|bTGЅ:A1!^0A:`C+F a4 a2%0bhnG 9t0C >!dh 4g8*t4&TG Z !4!FctFB0iƄ tֺaBс=ma~0BHhT#XOk[S5c?p 7DYYCʴxderDD%ei 0fX 93DIH)A(E1-c@T ˡ* $!sAlc(b'pAĴbj1@DQU{< 3 d|/4CpQun!PPddmt "APTEw5H21$LLu6bQhcD-]"1!0c6=@&h!6Mb@ Y@\~EӐ06˯HjA xTc `H5)2>$r0OP "`I."J$` a)%P\Eh&,B ie@y rY! 4-*Δ@`b``@ f"0$`%Ei%,AR`@H"h". "4E`Oy<0(`Z:nALD1@>#!pdoo* 5F4E@UN*a =HEJ=uda2pП-ti1vQqLEj#f8G䂎! 3C#t F$Èmb qDЄFd@Z3DhH$QhhD X Df1!0цz7PYTD2/@$& p0 (* IJP d5DL&̐I$ 1"""J L@ <0 W0!,&J 0Ӣ!@PqPL`)P.H1  A̴! E(2aĂaE.](`'uhQ5L؏Z D@ 8H1z  a7 dull9#h}=(Dk"B!8&FrTU8B`L"}<&BHCAHF o-bL0`'20Z`~CCh&v;4@UrF[@BEi)~}7T]KeA\228& PC& Rc8 4@M`%$1KY$HI,D$ "qP ary<.We 3 XD$IJ BJ(` %B "F @ IpXC  8 B)ybB Wp d&&FG`cNδm@&F:4&Zha4Ё"6 ЏCLjm4AGw4BhCkQ#ݎ(L Bh5u Z%Nc  h RBfBFӿ8(2"7DT2*dʬ$T  RQ`N`Z PW+"Tǰ%%d,!%&@ JRd)B$fdfb&!$P0h)& ZT ` PPP. Xb !WaP3y 5 L>Y0{icZݡk"QED5TL::NxăbIR&#{" Wabab:VB@d'a`JtԌ"D0 T?u+F1"T,pP&hZ3\a&n hChbkFB76]h}!+?BwD h# at 14$3Ԁd-I&5 {7ee-Q*"8p.PVT! (*;YԬW(AT#et8R$I0K0I`Q""BD d̂dfLDiq!4 BaP(-d)I  !$` eF|aDB!iB@TH",& )qs]9HV;uqQ]Q( GQ L$`r =qhC-TOFaȼfn !3<8%FZ]'4CÑ ÄE荦cD\N]y-Fq @4[G 0[׈1DQ7 qu'0jmb0 ƴXVE{iLEPohUwDUΡȂ/*T  X9@Q3ED%1IqDdJ",$)`A & `@ 0%D@"@tc#ƈ0:Zb j}1bB шH$Ԃ>j؏#Hl - 1&FmtՃ8vBLh2CF:F Ql ǎ`1_?%KSrLM ٯ̟ݐEU!J/@͙Avp(ʪ `dV,Q> 0^YI@x3g$3 $ "qQ8! \Dz,aAРń"$ A`"̀`AXHA$8a (E ʼn@\(D̄ؕ#2d`Nm~6a+EQ:&xJIM55T'Q"#@M#V;Uu` S0(XqdE bW+ 0;&Zk1NjwxG.$O/ C1"a"`tO_8~-ҥ7i N:xtD-jmB0""^ǔ Da6O:45! y+D2ӎ,Gn2Q Y@Yfu^ 3UQ` 5LF7I" !B LDB(ʲRR"qB(03( J@pX+@) X N@T$K a8q`B@P & 4ą"ZZIr]1c ){FZZ8WU@v("BtNCHH!E8s@ȧ\&cf8‡23pG0 xbB: :0#Ƅ!Am` ` 6RgHO1at1Ʀ"qHA1 B4ZcB zѹ"`@ttȈ-:b Ć//~mNl B2w#EdUueTX"EQs.(KȲ@DDY 3"A<I@YUֈ@SI2IX@"fAB $S,B@D13ãa$'%% c 0 !  `H" @@ @ZL@^Su2t@" V{ch]F 0Ӈ0!^E2 L#3ɋㆉ P 0PB)HP. .ăFz \'1EZM 8d\!CwM !6a@ 1jq1B Qu]/!8b鈂H @`44$%{,5-i/MILKXj+Z2BL \PQeQ jG  Jf-”@*+0D'4DX$I C D)B BS"B `B8<1YS> )!1$'p9@1 H!X !fI)Hi4h3qp0 [VUL(Pa2D@ 0@:hաq"'0Ĩbic똩 J]xCiUF0@^s!0AuE4AZ-FC[c4ChZbo5U Fhm10 tM qL.1jfĉ 6DD?4h]H4@@^f$!߫_HB )52WY PQKuU"5+2%Re `v!|&:9@pUQca.R`h&ʴ5bI@K ff  b%.*. @0`0L1I!2> `D"1&BH,$K$D,HH!AD !(@ &ƴ(J bB "ă\!xy 15 a B !lD)!zH(`X8Б# 1 5a3oU:6B`աNQ4!3du:bA7ԢuBƠ1L:!NB:"q`k*0b@ ȀB@O!.(51bnkІ!  %].r`;AIq=%7,+kTdd ( ʠ\HDH& +" ^IUQ&b6KHD,%SbDDTL(̒ <)C@ A,xbB!!ÀPf!&f(M3 BJbA2b$3XZ*jV(0Us@!8: uZtzqH# تcD;1N FPb؛6݀ jj:'bB2\dx#`<BGh`yxx2bQ?tha C6a`#16u ZmAO]!#v„tGAchE>0%4#&BF@Q>RRH~&xsQ(%%̎wl"ZFX3+* sDTW 4R  0eQCR5H8ja:"&|&2,ӺXX Wr9\p8D"D\,JA@pE(_T+P!,d$Y!\O%G,  ,%B $$"b@̄!sd@3aB>4[$^3bژ]m"4j`!3@6 ZL[1!-D &Xmpz$&CoAgZІ;b_'P;b `# j[ BR.F:BD2xP]ݎhqMEF botDC QD@8o:Ơ B#d ?:ċk2ဏW. P v;BCYTW"W8` l1WNY\d;[$H43Ӵ(-Z d""1BM"(Xae)XJB|. D",""*Y( "8M  i,JQ4,CX(B a!!y\Դ0@$Јdxc gBPqǑj1t0ĐPFAjKFXMպMDN]^" 8p'aЌ7BA,0Fxq4 (50dAHCG"AwC:4? 1 Mh1C3B @F`}-8#M"MQDu sgv^Au sgv^ALT )'D2@p@fjB  ,`NIQsXE0q%EEԌjbS̷ L)  (PP4&B ąDA ipYK@,1Vp%dD)D,p(X >@!"bLQ,IHHI $A,*F3@Ń+1 |q"b( *b*0a``bbEBNP t @3y}`#ja`&<DmDCA'CzBw5} 4ao@l0da5ߍc3'FFq:h6!tt'} +0b0L1֤XK ^[b /b d-)x;b;_Yl% 3*e@UQ+t'.&cKBEĊdPD\!XTbJx\)0B@a pňp(P*EiQQQ4%3$a8- 4%$4PCs,  0 1i0`:jgc[lVq|@zLI&$4#z01vE@SxȔ8;=wt `"*bc`9x$L ބqj bkѝQB NC4$ # #~hb &Ba##th@atD(cF"4]zj!H>6$0!5b `$ؐԈ5GoeDb@X)h)ʔU (Tp"Ef psL"شrD*0e$IX(c/14%* -DX pYLP,*dfR2$$#!G+K@8hРi *d( ReBJ0Q )q"d\yq#L4U^FvQEJDHFF<^ Db5=3@a50FFCR+0a E4a6B&61b7~#hFQ8Eu#@1#;5u9t:C Ck^ҥ]Yh":."GA"CH&@(T!ʪd!˨A`a$,,e$! _e\ x|0%.E)!MBp,BHL0hPB4 3dD9b\ H`0%3@ $%1Q4C@h !,I̕9>q~: 0(Eu""`5Mcc6 iZt »xs^[BТfuM`"Қ!hhF):BCFݾ`ff1!vCb1: C"*iN6G` 1;cmD Bk!ĦC L cu`L@hChmDZ0AGd25oG&d25oG&w#(EvWDZY@hdPv&qPPJ2tYYd Y(v4I$A2AH))"N2\2pC0! Cp`A" BQB @  B!$1I!ARA !% 4aB!yq*`o6DD qD!0  %@yxPbZQ41QDE8F P  Bkb7jt40BGK$bѷEQ8@$~?֍#(j]!-?~A]֍ZWha1~Bf&19SޚX@$0?gߍ̌ʊ9&Y` ).x&*$НRdQVU"*l1db&b0$@$DQ!M1aJexC@8@\fBР&p>PpH D0$%d AQD q!JD(Eh@xLzAT0PD E1DN2ݎ0>%.046v2j (`<ջ":x`L1`  MĎn !N8bD:PaĎX;)mqbcDQ5{-F $!N u1! Q S KGG:B0;: tF81&"D' 3[0W( `B(sPRJJY1)LP"̴88DAC(NhZLgBEAPP'b` 5\Ff`^d֚э-  ^o:#rba. ^i@:TO)ӀzC‚w`A-NDca&0i4 B#0&t[#R &8ct;@\ p8 : F7`F#‚ޘB0rZX}pށ2y,B $Y[)#ʪH7 Ed5 |`vŞ -ˬ"eL LCb D(Z\eń!iQ"*) I s%E   "!!R@f bH2L ( DA,   h%*'RH@ 100mA PQEka:c 3u4t0b#К!c }hMl] ևq"N !00ׇ\ü&bl-'"mLB@ʼn[GkM좌t#65QtBjh&t>P3 =8qj;y'QTVDJxdTפ$d*j" zI(eeHP2#3*[BTI2 qx% >GHA$H0 `X JPFpx+31RB@C!X1 , X\L A f) D u$OuuERSy8<@+4-0TOkah ( P; Ā{Dd0;@7pXB=e4> 9ZD` 3H 3yq]3wBG@.Ah1AKhG֡AZDߘ`͸ࢡTGPB3t ^GEC G⫣"Ɉ!P2BFfyeY 0 +$%@(&> YQ5k(fw5 #*e$B2D,&(YJ8<>#(.$`(, ( JB,, @ bfD  PT(ci!!,,IxI^r]әh Ұ 7 #{sE90ބ1FA% ç''& (T3@ !N;B;D?؂Е C ! C QSU&*v y&>@uNI=$R'q! 5#S ! 3#71a828T {ӄXġ ]n 44 :! `1&BknWWl0лtzB'}ݾA*PQQ ttFmՍ1&v+`!D-ji'~o ]4>FF{ ;FF{ (*(zeQDDIͲeXUU` PаJBUT+ ]KRr|Gy,i! D€"&BB  ,!IDD( a"hq$ !̂K$Y &`XM@&##/  h^|\:Qд /C @oh3tP1UUchECQ[Ӿo #D y0HӍA11Fh Q #E L[S.'ŰbiGCw"@x%tDhLj B4LЀ6Нuޡ D&> ~T4"(˕&sΒ `bFedN jBYf-  Jj|H5%QVT Z6rqBŲ aI2D I Lb,"* *.$ $LqF7$LqFw0ɉ`rG,2B*HZb@chm7AS"P YZ TXK$DT\T@!a(h@ ʐ@H i`@!#K,H1! `Ba0`BPBJ\\(&FS"@`D$%`B(q͇5ɇ  $FWȁ@NX/1C>(6*TMTDh & ' F]bh`@Z1 #FAa!Ɖomb .c|hH━Wr@ZhZ0NF- (]hA5cw#h"jAt cZ#t.&0}1F䌄IOcrFҧk^@dT)"^%"j"ȢzE΅RQwt4`'`%QET'%$#2X'`,EwQbIIRR@d>`X*HD$$`\ G CX0bb -. *„03 f &f! !YB " A0 &qP4ńḍ鄝8v;H: Ƹ x +!acx@$P0NdB {a4a(%n u!nWWN[FFnW21ׇ9taۍ AV똹^ۍ\d.>p1W@`h.Z!bF#P8s@D~a>n#h4ƈ +&DȖEo cVL҉-1""2##Z*r 3YYdYC^gIEeBlcWl!I$ a8 Y!#dE@DHQ4EQB`!$d`Ah@a(_H,+@23 b̂ "f 0CHf(B.A(q)ffqJH!aDy%\ǧ㑙a o01E 1.h>&kڛA:b]CL:Q }fNhݾEut wz:ChB4ia #vL C B}UĴ5:֪ 168Ƅ4-B1j}c1EM`&& M;Z48BkA@$ k 5 Ecúo$~7,Y""*jDYdU")LEU++H"j" Du UPg+R֐4dh eH&I&d) ! q1%&$ y>#@,L`&K,K X$XJB@!H L "̔(%E g Yf  mk8+>\#DE0r@G nGb#Hk uA {{PAD?60@) mq C|((|#>wQO= {[UP 6ݡ~Ӎm4`b|MhB!hk@یnG-aFk1X&:(p88MkGgaM A01xEue^yEp2dF51q lvc3(d2 !! Bi##,e@B >C8M39Ңo NiLNh=zƎ]c_YIPYY`ZFp NPWX@d3ILDD\Ȅ@8MQEb`Y,P$1 03`@ Kb 4D)&Z &""( eqq/q O @P1qs d&@(u=ހ (bvNn0 8aZա" @A:溮B <= PJ(CNc1a! ^u'b7cD邋X$c(꽎ZLr 1FBڠ?SOP-K? g E]Z~Z0h1 16t~&C$ $ 22/BUUe0ITXm/"BQK  ' L\cOx"H&IG BQB@hPBPB'p(G@,(4f,-F 2|.a113( "RB13S@(dky$IP1^;@0hB00+0&*VӁnCOу{&h J:)eDYKWB.&5rb8fDMbd)BBBJ)* Z@( #PB!DHD4M3M3„RH0C bL`"B f0h4A "P`Zhx0p%O0L`N{EUPCQZC0EFaЗ93uŃfd.rM>${*cr ;p=OLJ9w-x>qaz'BE=#46 h#z1 FD߀ Q3F[7ZvnCG?@e= n;BB?8hСߏݮzS @F,3b+4MSf#1 AXFeFiBy(TA@'`PDʬ.J*˪LNLq,DYɚ"ȨZqLbI,̂$Y8BP\0<@Z BYB!`BASb `0BI!%`0 1 $@B f`!,D ´@" āb:p\3jq \/2p p@"(~w \w`4o"(bZ:nWA#BBG:Gއ%daKB GAB C-va&1DV{[@P4@Pc:XUMc"t'Z OL`tQ~w4-1B !&"C61qh@lC ( 2/HWiQdjߍA:2 JZ( 2"^1nhieK$I" @J0@Lb,*B @\&@R4-E0@$$  )CD"D,1 @E D, ,".BD %Pb s !@s}z}Lt U@MPPPbaMkГ!AQSL:Ё*0!! 9[u`#AwPQ4qhDc(aG1G7C}4J. .6&D0bdB" I} Vá!}- .0b?@@wcqh}m"'C4.&bm" H_Z> ≯Hl[p۪2"om7(2+*###DVT( A 8GFUYPJIdYC($g$VBu 4xLEdI̒H@)qJ(&LbLd$H@bĂ $3LĀ &)IH!AIH @2qqs1{ Em iQ\# $ 10΄{(XqCU;QT0Gg"bEb1DT2@t jC3M 8)#`` DG iG5 htLdWB^x\\# :&# נ  wC BХ 0xmS LhFa:Mh"̸oe'?p-3[0~7Q(+ 6p 5#a9 (CU 4WRvY]XF"$`"L$%!8SL4 !B0-$fAh!B AMЄ80@@ ` YWp8 Ei ,XY"" ZDLD'@ah昙I2`<(b2@dtc!`5 c"*"Q( 5^/thL u \[X#z4Eaa"#6A  q@EDDL☉*#EPJuM a@0 4M#~m&86чOO붾C8 PQ@3b.8˅8˅w̢T`:x3̃VKpAFV 8  =RTc8'$3@BJ&R0aBa FXP!A`I@PB @0 \,K8 !!X`&"0$F1h <&u1LC:PC@ u\mCEApqD5zbUEE-j`#(@Q̄+‡ G# yMr=ڈ"j؛hHx=.!xZ:~?ȔD!zb##D c Ikڈ A.B a `/6!ꊄf Qk:x 8 ݮCA@ LO ƴ,Կ4Ed`vݐY"ʒH,@TE )*Gf*5ex *+B6 P84ĉ$`,Af((PB0`x,2,T0Ah)$d&"b a) dH3`AB@(Y$ 0@$AI̔Pf0 QA( !^ׄ1d` 9^+O<"H#D 6w`1Ď&F@YEPCM[sut~rAa -ox M@9aFy낋A00 0O_lchNC-M4D]CA@uÈ F!@c@a"QԆ B ]QbT_闶T_w V:OΊ!)!`q8AhȢWT-8 dd΄GcNq!S%D8D@CPB EDDh!K) H $L%&Je)aAJ@B@(2@(8<+LH p>9\BEXLDT(`@@DLĄ `PB5+W`0qCD@UjuH@ ⺆a( !:xE& h"FQE4X(! 8BW ` 0h Ƅ! ;:BHP2b0D@G4Fu :co Q'Fb8b !- <" Q0f -F]c 5>DR5;10zHJf'FO dfUED !@uFuAYY@BaZ@dEYVTgڐ(FX,fb H`AEDES2"qB K RR",dB1a`$CA(AL$@P`"zLpp%`ښ9( : D v6 B7ND 0Z-(*(Dۍm``8rtdQQŠs: jj` 0Nе؉! @?Ouᙠ?Fh0Qw~6 'уׇa@ 6M0FFF@Hc!Ch h"D;.M3@ަ䝆\7*۔Ӱ_C R͢JZ/P,k TW @9QF5"k(4EY09 6+Z$I&)  14rBC! !B`fEq A 0@ Mq -FfB11 &H)  %i&(%bP01G>=xA&D* xa|8 5Br18O@00<ཧpdbtP @4&L4L1bkFzCD: * içc4>6&&":Bt]#hD1#DEm-&b# b14$,~E;7MI"Y>w2H@E,!q0%AdYCMP@D)γ: RQ* fNLfBH0D(8D(JBr@>a,!@EiDEqy BX ,I,"$ f3@ 3@P' B @PL" PL@$c>=rk(""j5Q03IB31@= ?\LJ&>SGUUQElQ;@ @aO":(8t0LF0h"HNA04ED!LM"#وc48.MkA!hO+J) Fb0`$F#C"Rxn{BCjY@6mv w; D-U5!7eDu Tce0("*(LE YQ L 2#:3CCbin$ 2 0 bbD!&d%!!1HJA1ABI`"b4'p 0 r8,%B B *NPL0 /dR DRQPLxP:t xJ+ēP@k-68FUTG&&db^Gj!Q5UU ch:Zb! -N~ttc at~h1 +C;LQU  ׄZ] &Н`AF[CD!#t]&!BB ~dBn9-k9YC~Z~7HEueT*'EM QVP`$**k(geU$2RPCqEC&KF  b"B!D"a RVH9 !HHR@@IHpyB)& д4&bb,"S`H 9H\ );Uu< (aq;M N; @GQY`^Z2Qe0JQUV%ReEͪ$1=+ "Nљ,Ib ˰V§B )JT2`8b \pP+,P.0@A`)BZ ABf"b4h@38E"N1CJd@LR)A `rpLׇy^y=^XPDƑW F0j:  tb'(Y(1 ;SQSlLtK!^`{NO0Lr=cBq8Į~G B5E &hݾCshUA"0aу>F41mb~#1 0ZGZ0F-9F31(B?`vDIS;zӎ@0i#j'Q DQCEY9,5V' l"5k,"X)^IeE Q2@ ꕫ Dts (*"$IA@,!YLC(-)%HHɂH @@ 0X ,8fH$ 00 dJ)ffZ!0 ,@ )\ $IJq\$Ŏr#?#1Z.wDvȬ$$#ƄWRU.DQ"|x&eQ֒R@UuETS<.ށ9X$J p(a B@22} I!1D4p.дĦi-a +KP4#/BTMAq`k?Fԝ0CkCB)!A :DC &~ `A)# c m&.8AGDZZ#8hw6tD$" >Œ1?EdL#wrxo.Ey Y%L` eVi>BZ*3v rX(jʓ,3 cfIb (SR"."bp .fB14ÓIB4WHBJ!$ X0KA !E ,AX( L!BhbQVEjcC$@@0P ccQ5LCMUA@4N JB0 PxCt8&;0B:[@ zP1 @NF1 FFmQabBuCm#t CGNuCfhCk!f4#`D !E͈}Qk}-1CACDC l 9E:[~7",)yeJKM@ YK[II-DM;ȸʊ ʲfP%X2I"XJ,"i ._r%Da`B( sy| BAD RAR2,`1B@  "*"AS,PB!#5a\@,;1P~2d&Lj%a0N4BDx@@p0DGL>]kxPэj`QwL  qD]h֍0?D@wML 0Mڪ[E4!M@0"ѡ5Ѻ#cGCC(4 thO-Cki1 ~F:ϭI3"ȬnMbߠ("[2 0SYE(ʢz=HUcj !˄I"*+2 >C) ,HDDDYPH$OyV@|%rB.8n12ZK "B mEam8Dw0Fh4QiB@`>4d;W9 #)??oRpTgQCb]EzX)"CPD=d(dYQ(3.q2,$rg .JDD@D`HH @2 @ D b!E dQX(fZ d)$@`D,H 4ALTHAŴ3-ijEHf>q=6E0I$1Cg${:&d9(HK;RaXPLzcES1Fvi=i}3R&"@1EGaj6FF1 !~/c~0aBJ CA@ Ad@J)~d@J)~wUY j 0\%+ 5IdQVքae5TDB$ !YY]UYEYbSg "1KK, 8BBXJA%`rYO(B2  H!$K"B23$$$1X2 L$ńB&@@7aq̪bk8LLL5m G ED1 5ʼnufCbvXlG) 2dHȡ@DIb) $%q 0`M!bDg!JH  €PP,ED("BhJ(R  %aef0m1msH Ƒc2ẏ\3G\LG ȁEYa Ehq F B @ 5z#8uzo&(ɐIǐ\\`􉺃 CAPFcbL1M zSZGhL#vGEF<^ d B_kB4ctԃr`D uqob1@3 FaB?͈}"tFg0@0՚$ U~Q)K^ClA]zj"wxByeB6i#xMBf@W bT}:1-0QhF -F0Y4mĈAD$;Fs_tkM@c0%IwC Ulxej0P*@(HJTBYQ֒ ȐdWgef0t1]TTTVg rN$II4S((%`J!* )I(XJ`f/(*&$  P" G0,@Af0XH0PB-F !`> A  GG74FELȐa \<3*j #42!qqFP4;Act@lt)Ht:c"6 x` +\\1H tiZ3A(`8t!GnaMb3"+v4]A0F`5Z"}ȹښfQK9M"""x P]V$ DTA@dZJ*+@C{3f!ʨ(#@bI,dI$&BP &*"!'KD$!p\*.$L fZ!.!1S 4%J,d„@@(i,XJHH 1Y ) $R! k&0@^x&Zg:8 q bC,HAAD9‹!`N4jB64:8AE L&aÇ}MZtt @O\p1#:1#>B -8"`t!jF6C7P!bh# j1!j@1Ebn44~72,R4_炁 BH pYp8`y,O2`b1` LJ(J3B(%R4EEE fL` 8a)% O92C \Z3Lh-?ĈݦsQP .q0x#9G@P1-bgk[h&!z\){@`  \4$ЅzW 8hH𠆄"S֡;"E!$@$',A#4{A1G7-! ߘh - ! C `Λ 25Ä0Z"~Rrּ#tA#5A0zo@V2AK(k @XP;ʊReE8++ f YC&2]:dU$#  0*aQ'PTB"e@).XPBZPLR>W\JJQ",$ 04!B00iq!S"| PDaf&^ԢjJBOQ`%Aa4&D':01D- @23!C!|41L>(84 @t vA@N'"Qg0~Z7D>H$: K > ^QDC? Bdc2>-҇>0]A?+!`XtQl"6 86& CbMu0ؘt'O.5)BVE(DQPR5TTәPEe ((UQPK&`:LeCT$D RH f , K8|J XP4 ` "$A A A@%AQ  B $ &R0 d@B0ǧ#W^*#&>84\@'c  c PTT00Uq#L 32y]s<L(LbUaAGacG 8b$0\0a"v~?.Ct&B Q4L['L 8<C8)hb~0AFh?1m ND BA\ ML>bF7@DD2s=;塕B~K" Jy@* 22 @dUu @%QiNpP<E,k,+pXQ%IRe K dJe 2%B0O % J"BZH0,(h1ZD`03iⴸ%BQQ"`ɒI0`!8!"4 v1ɇ+5+W渀0XU@'ut ]>"3xOCa\ #Z&tt6F P +D#J=LVSADgQSPőUAlAЄab ј`ccִZB3F&A4"uL10hcD#NFQ7EPs!-qA!&BlyHK|o@D !ȳRFQ 4 (J ( "*@ب35Lhr Qd"Y!JD(1f&`J\L .΀!.<+ YP`B ryp!$0a %]޸N"2 ]:8 M](i 1ay$␁ɕG&G#g16b #Ah-E&`SGW$?bqQM $:qb^\ĉwczo !H/5*"e֒A,EueYȲ@eFՊ"BFYD."I$!2]d-@0âFcN ^紷)*( -b~@n].Zb-ִ! v$+v v$+v }.;HYF (%@ @EEYCUBe*J%p eVil5cy%$3 *""H$K. a(#(Cc!h0DBaX+dp'pCAABQMHb<rh)q1B fP,@f0@385E#Au oBq f.>m wg(!DM4ڈ@!:F@@E-t:Pq=0&0G@h=k / 00R}H\k11Z*a DP1MNMbZL zdE!I&W^7z MM78F_Z@#0"m!Ghi4@EcBxxoBh0A pZ[ "]}Кc  04qb3h"A#f0ީ &0"A$!-ʌm0Yi8_[`(3g|o@QQW *A J~s^֘ "DYSJY*e {bb38TKID px"L, 91!sY<\%(0!B(%$1!<e)SrAYC IJ!(0%` @ &Ѣ00B +Cfs<^ qx 10-П@EELGbk#  0;hAFOC Ŵ8a&h t18DBLGESUFa`+ȁ*"Qc21!@#~ZmN}B abqnB1t40eQh! }}Q%+ىB?X#%a2R4^):*3jQDfU$pYc|9s|EM D.C) !c@ ̼^ Gdo" 1EdKw}\EC4NDup'B0D!Ď1'":u<^s#ha0M}&%ToqBԚ.=c:F  :4B cLc MpfGiMpfGi{#)Ր B'/@ &RQV!, 0G35D&&:+td4`$I"d I1QQDHQp 8EE( 0@XTfQB1`iC YJA L,% b"QqJ(FA@1(q@D crPH  &DQ1 o6j((16Ak}AD( TgQ1MЏHiBU@P$q J ua5Lך1FCnEЇ: A"' ޘ00b7F8-h!C$CaDu[M0BkFhCZ+>#n1Ɔ @30@^v@ Fc74t3P M77ȊfVC@(A<"Bi+IE0Qfu_@U0JU$Yd@H`HA&DEEEĈ(Rq P yZL  4!Y`B'""JR@R$ 0@)(a|a`0 JDR `LPD SWTEA@ xwdUPЄ8#41[{P `ӋCq`PA ]Fw<0Àupc ` BauAA4bWo8GчU  bW1Fh݁`@A)FG.JL "!0u`6G 4>TcMSzsN9X14ew`iW@d@QfmN(*.DFՙV`YUl4\$LBDDD EiQZ\\LY Q1rX,,)KǂTD0BQiEB0MD)H) f0D̐,4 Q!3 `f! q 3@a 330BZH3 0aB 413 +W^3I`BGڈH\zh@SOG`J.^v醉Z(qRzPC1B (b?]  ] =DF"N& C$B)]D4oQ8Zt[CN:a 5 FІ0Mx#ľF>f1)17f1)1DP겊AY,*XQQK& Ȫ*8]WG 0$HPH|V@8X(Xb +d0 |PpK)(3a!$0@РDY @@\@3$IL1!B )"B\d Y @ B\84uȕ"M!h&tL0Q:8f(H{o3Ł~GȐDXt7ăP "Gbd c S9$ ш fB@ZQ{  T~h:~Dƈ#:)zO0Fӏ"m-th&DhFBH> L.aoH]ڥ'&ށ83K<""2ɨ*Qf`gQQ)А5 2 $8$f@Y\SDHDDMq4`@B!`0EhB bL DD N QciQ@\@@QA@AbqBAx}u I"1 @ATM 7PQT pΑcAф E #"oud$53!C&="S= bEla<#tKGch1 KLj0 8-`]$C< i"08蠉0Qd.~!!XN A Bh]1hbC ڄ6Ѝ#D-00h1tL2t(hA^iu&SZ4:.Ρ(DFeeP"2ɨfEH5,f0  x 8(I$L,d`)AT &@HBRd 0BABQE,EEL ! R $L3LR3X1„LS%4 B@ 0bD| 0OCGbD00,ްW@pP7.i|7M5մ &fs )b!uEL`(1 (yC`ibNx]z`4+LJ@"( 1莁#sz10:&Gd6ZBlBBݾA1 F bàCb׈qF Dh:D 1M&}[Ø&F d2#R /!* 6$Ԙ`NP"#(̬5Ԑ2rH **$1(YP SP̴PDD@C@YVHBrY!@A$$@BH "1)&$A HfXBa`"A !$%Jh66>}!áUQPPJ ç< FVCT-j *(*joG@t"B="9ty 0 ǑՁF #zB #!0B_3<DoBk!D1jځ4ӝq]$8n?4FÄB7ZG\F8]C C.#vfGMàE ޖ8+kKft ʢTP Ȁy@* NJ";zY3(L % B 8h1D>x籬 @H !@8`E3@%I@$&,J) "IDA`&E(Q! @H!" 8^3W5k&3PLup(8 ʨFDjoU0+Oא 2a r1:r 0!`B q чE(hM. OiuqġC3\~@0:苣MP#Z Z7 u!#68Fh@8`D ^$6!&3Ұ= gM~ 4l~o QP B *sd% *@\Q53̞XXB p|p4@ dQ"p e8\!4a0b80@ R BB.()@   ,Pa@@f0 BAB H\5>y>|1~kFlp  0 |:N8nCDLsd#*D #x2 $!0:> #0v1t!61 D C[Sed $kF 4-xJq1hx)t"@ 1&Z0"t !!BjD|'BjD|'ڿCZjE<U@j"@5KBV BXF&@'X$ ( (Q"*.B $$IRYJɒL Ydb`8|J R@% r\BCfB&  eQ10 0@Bfj8n@,JO1$W@ŰuC 0!/CBy +^ aNFxP" & Α'bu\b0bW\4BG 4=c2: UxB ḎBl8!ȞP!v􃎨cĮ~hqB 苣.:0&tC0' c10bؠi4 >7 ȼӲ77 ȼӲ2JHYds2((@* 8Bd.JETXY0"1!L$ J9|V'BBC1K3D "@(!(@ ,b&    )!aB(`fIK& XIbɐhZ@( p\Oue bэu >>`A? j(jk  8.p$CO"p |6 bGlZt"AFkFMLv;#o4cdO `Exz+ Ʈ5>Ft ؍01>] A( C E@W5 Y7%` tȲ^̐6 @2p2DQc"5VJ@*; ( *CT@ 1pLn% 1!  I-BB(#`A``d`"ZT`0XA3 `bAĒ@B2̄"4B`! 0(0 *N6jbXDL+N8E`xA&a`&8:aZlTTQ45QtULD U1(9t(jcqE;'(w Hxa"˜p9dD(t@Gă1c\aN!JxLG&`DE56th Qh#8<#\+jZh-h&&&Q -v;LL#: qDDAr?%b s dMYRV5Dp kb8jaȊ @ QKf5 L)%!Py( UEV@b$ D,% )%",`Q!3I)@@LD, L $@$$CJb&0IJI$0d)P *FDbh `& 0`)$B:2q=`0SLP@b5 [;m` ;]l7UDEu}!#HqCD1MQ xXh#5ͧ0HM hq"LnbW~Z 6$bXt"<1zFQWׄcw :"u BNB 641cW@C:šm ]M$-lGڒL߳a~@QUVV(3ϑQYpEU%˪VYdL@HTC`:V5i ##kL X̉ztI,I$ DR`K,!3HH`R`0 a" 4aa,@ŘXT  &f$ B0(BB!40{TC-MG!Cf>DN8 " ((TUA4mmmlĄFFlLr]q 1֨Őzo\@`>0Os!Fmb4MGFA4 GkB&Flc胨a đ 3k$Ď0:4}q0bC0u #F#qR0PaD0AFG0"m0"16a"vEyؾkLaG[w{CF" +Y d$eeJU@s%VJRYT&YF,< p АII,I$ d&HDR*(--RQ1!!A(11f A.2RD@B@D ,K`) h-&*P4b @.\`s@W 3L 0q|*:ni # br TbYL( L*ZLu`(6&.x h&b}FA'`Ē1Ͱ"+ߜK4BQloTQ#AؓR $ZҠduX%DE 5T5vHj@C%Hd-5#tX$%| c)/Mbb Q1Qr8 O r(9B"10I!dX>!4XT , `DL\S(Lh!  !BY &e6MDEQ! yUՙXRdVEH@*(j,j ְGdb.x˰!*"B8MA `8ఔp(P&`",@ ˰r9!@R*RBy%%̠PЄ H2$I0`ĐD%` 45s1ׇ0^!#0`AtTh  0BÐŧ1!2x3=pH-0&88>@attc于$h~haP hOq>> LQ T(v@a!D]nl4q@!aI"!t} bG3DtD ӭ.tU}!tkKUDo"J< @@EVWf3j6 @AT*hu*Di6P%I2$J< åP\TD!.BhB(GBLF@r, I)D LQDHY2K!% !&B11E@`bK)J)K0E(! Ĉ8- (B( BBBPjհ=VQAM<|z$`^z]@@[`)ǧ+`0!ĩ'& .S0l3,u2R "@)h (Jk>DqGQ˜-0xxj qyث#CL`" CkZl#6D DBFۚغ#D!"6DDCqBk :B-LjC@0^i̟r%+Sr4 gOQ '$/sVP>fw^ta9(˪*(V''I$`BVPehJHJ\D)R!_Y> 0XBF0X((1Z,p@0E("$bb4( AH)A r C)K)@AL3X0QB2̑|9$Lf |`r= M5V;,c"ZyDZja3<(>T $̀Fuu<!40Ŋb؇$@ 1;Ќt9BkB15}H4Z )kxf`0&F3clZ8ZGЂnb'LDCQkA4 F n# tuР#5ՎrPF迬GA,-/ʬYB Ip.Ȳf ALYQU a R)VT"'p `$I"&D$LBH9\G¡  Ba9aQJb"BA0H0D b,*"N(1QB1L1E Ę!CPP  f %*N B! Aj; a:>} 0\pk@C ;UDQUX-t'kTPPAU0: z"5F$i؛* a%z8}!0CQDT# pc@Hp:7NB( MoNAGat  6`b( F&(Qk~b_w4cЄ@W;n7 0`w,~KFw,~KFwYRUFxZ L!* Q*I L2<^9 80Qm@9#O bu<&CbcA "7 Xpd 1>:La(@>ZAl/z].Pu1Ќ\GQ !'z@L3FlF6ttGBW0ц1tcf6= #!&Fh#8#8D 9~ 9~w̢& Jp@*B L"DT'vX. p4#F$V$`HIBH!$1D)XBR8+HD1$|KB>0,M(Qq&bbBQcYO! 4 "A& Ba P!\J)r!.8&TPuOt!@3p̋bq*!&8#xjtOA@TM{#UBt.`q/FPsH="t1rC 33d` @# RT&[YDuVRƊI$  YTHD8Z`@p((!B)JHA 'EdD !Y Bh0`|>O)@,@`LR ą )CJB.@A ,"FhZL9x=01ankOaH2p FFAf.ra0u\Tge@DTD@h L3P d0X ) $%A`0 B!%8|Vȇ#DAJ ID3A2% \8&S5z0A0PTEH :=o|NUU0acd+4/*f$Gat1a`b.M3::"#1:FGGH9 h1NbFb@:ChpBcݡu~0}MhM2!Ќ. @# ma0 hhĈ 5`XI4 Ff^ 'LQ@ӇG@ Qlc"4Ɓثj G >"1SWkMוO#$ch̋!F&@ !NІabF7xaL4aB0!:<'a\.bB0hMM0 6:&81bG0׹ AGF_CGC-M F-@c0h5mB/)j `ۄށCe%H4@VIdeUuQ  FLf:#*)ꪬNDf3 I2IBQ'"b,$ !|) >Wp "X`BbP̔/(H \C(P E``BBH$E)0XT(`Z\ @$$@ d-hq"`1:!çq&hP8 M`DU !]Fरa\n? yOo"¥ u7N@\j+*v~ 0ׄءZ0:^Gqq`( btġGG AA֏b1hc6F@ D O@рhmڠG7bEl~"/o fyS轁$#7/522`W*+ B=BQFu C+2)nJL$$B>8hJ FMt^1T( ":԰ jlB7!vLc2xbb "(І6HLoc8D1D:hZ`NB݉` EuN31n &(ha"6苭@AdF$F :&ba#6q`@>Ԓ,֔d$t߀*"L6 @M*C@J Q |& 59Pd Y#~*U.b{LĒ@B%  )řCp !d"DDǕQ)  A $!3!%D M3! YK B0' 󉋃<55$wTT;QJ"S0`Cr\Ow:#`pzG:y=O`&~hoUA :ry49r13X \:ԠC!haD#D  , Fˆ 10!&)&LL!SoAb'bǘ0;#2Z0@`[%bF`ǀ 'ӌ9o a1BE3e @UupN T(*pYVVJ 5o!29"WIH,a>\C,bc1QB@Yˀ T Ib, HX 0JL@ i!B!_(TT!  &*.. &qp=>z1, jŁiJW7)(ē+0F @PE{1>1! @!ua041+* H0If^ɧ\& y$1Rz#h!v(E[_ DăQG^Alt 趡k0$ 860\axiZ xPL1~#!ѩs(4BttA a0D "łҒ]H~c'xqP,(-م7|(BrY+d,jfP"O@f AIjHEFU+U ȪX&I&$J0`4DDADĸI XJ RfpyDJ("#f"%` $X`" A A & 0I$L ! R` ! 0\5yW?@^ @HǼ]&>D Ѝm7a,XA @P$1>\k qM#\:P OGyxEtF et:M[Ժ&B)B]s953\I@G$B:ADhF?Ќڈf~6Ah4#Dh}FnFFD"}pzmM a-BXgIwC2k*QbP` j!$B̬T^)RuQ]( E`WY)H:3j0=a]̒L&f0,%bj@$`KyTp@H%dXP.8\A0D` !BBH0BBBJ!$ 0c Dv8!' ( u  s,(0< 8~l#[! jo c@>2qPD ,^嵐D>$@0=E3@0!д`&oB?C =1 A8CblZkLbh@E\anGhCDhb\.rAS9iߖEBX?Hq*'(RUeEed2*j%\(P+'2*2*@@TKYcY&@NY,V1Q*IL@ f""&f0 )ఔ bB#"p!@ HI,Ypx| KAAP&H1R0AL`!̀C{1L[Ul90Ӑ#GxL!Ç .D _"@ -؉ B& F a9D@PPGqf#tL^u͠b 0mLĦ0pkAn:4B;`"Y #2 ZG41#F &Zc Q\Ԃ c ! ]0# 0Z>8Յ$.ǰ@ƒxKcXl} A H+Dek]0he>YPȪ2 9N2%DȂ/ |! DDbD@ "N pD$9\pEBf0>2T iдDf&,0% aQ0! B`ff!E1p6Z0 CtxjChZPu̡!@1p\zx0P$^HF>Ѣa/n~w ( (:nGc  ީ' %0P'4h1 C&Z{}$5ސȆ e=L=ѻ^5M@ D'ψ"F@!]PHu&&F3h".$0Chz,^rEz@x7TCE"^9@iʨt!d fv+O2@P$$I@,IHQ)JTTL1PB%\"DTiZ `\Cs\Pq|P0`EӴ%1PP.KA CAC($B&j؛" &UҐ~h#!`1Ձb 0k >t93{` jQCq-zuR @"ա Na`0'P fGKxbBtNa:P#aB"ŎD]ƂZhZD$ASk1# BhQ0Z#v8 chZ6aa1@l"#64R96#f 7 $rmF<8*@ɾ2r|@H 2T]pfSX@:H3`9’, a)ÁPPLTHE@ B/.MA%"@(K(RP ,D L ``Є"͔Q++SB@)X\Lbq¢ $E>^/8f03IRP ސyCy00s!&,4O(( hXq"`*(8TAh%:,4#;}(M  I cш]0Z! ! h⠣ bZs16C#&1aD!ZǘL1hbkcyЈay h4Z3A#1L4eIprty냲$8]<ÊfQ)]/QUN d2a EUV' qg(#3Lp>nf LbD R +r """b K(,|>b&!YPJDdV!,yBR*,If"b3A@h1cfAB@ 03S)D 43@D( 9BxFPP[{@ `f.fb`AWk..=4B p3 3ǥ{##Cj  1~lA7 ƑS89jfxф+`8=cd`.xa舣5D0:41BӐ!tCQlD 1BCA!v&D^vT1\ZǴˎ*B_" J"՘@5(s%)fP@a\ dV0%2BPdxIVM$IʀK8 g@(.""ʄKHR2B3 )0r  $$I"`$IJ H)X $ X0q00DUT ^,Vbu8 "qctucNX0Tg1F6 8>50(tx!u``i4.2}ߺPo.qآ b88B@@a0!bnb&Bnآ1D c16b Z4Ѡ+cD-aFhq A~'B }RmJgH J|"'զUL!9$*EQ J(HB@Eee dFF!#*JeUHi Sl" %8$% <C"E@X `RH ƇȧO鈸 Lu !&d&Ë:@bbpEPElEM;q$"#f@wG|kȡEE"vAa4AGDƄ61 Gf\xFAhA(&b4!ā5&1$ALB!Iqa- '`Т~HR\tW +ŀoʫ"YRU @uJ5%2Ut 5 ր9~QtI,,F8i".*.""1D (˥8e h3B Bi 9@%BF   YB9\ ` B &A(Rbb"DDh&BA!ED) > ^@$~7#! pL !# 8 O;F%:@@wE@2!  -t<0hmC# 16A(zFCC0kxc-C ;mu$p&3Z #K MBBb#L NuC3&&BW_bh-臆 &>8q9bC}eڰ;8q9bC}eڰ{LeU20^(*KlW@"3R EPzXL8z,$@!DhQRʲ/sYJ E` K)$ I&"H!dPE 0@BB!MX"<^scb&Q&"DAJ| @'UrqH߰O$㎑пaaxeD99ZVdd@YȲn0#KfH>a(%  ʼnb!e92D 3D!.(0BB@DRHb! IDY0QQg!@1B0B x1D" 2 AS1bqdˈv`-v&:B c3^뉡Z PS4!#S'hzUNE*` BP&Ѻ0NP@0z'|(`E&tG!E(bq0h~ TOB1;m;B$~# ! $à %0 DM1& "! 2 ~1:6ЧkYR@)z7YYCYĘ2JUaȢJ@8D"+j$4@T>`V"'0yP*+!(J'09$$@Jff JT\HSBB)aE` WJ(Hx|8fB#f .3# ӄC'y!!((q !jY*D&`BC>> $P:9f:UC I "&[CkED1F3:)\>Ec0B5MƁ%MW;8F L$DMG#x fxO>BlqZN# h}]ZbGb bC76F4B@ ̸%0o\3" L@s;6<_@V@el *(!kuEX)" DU౉׀)M)&f1Ky=^arp@H>]T{Պ u[G 0P AcH0B^g ?J<5l FppL>EW3FhMMgL<N:Bk`0:F101rO C}պ݉mH~`.fj%:֌Y!c`\P0^BaH)kHB!)v\ȪJeTԠKH |G OeB@A(`p8,2BK  R0  #f&)$bA`!B )IJ&fI0̔`A "  `lL)b- UpTAAQA:b( 0`PLTU&Q-*ځTQQUHt&rDPCPU lb1T;$448#[4LD 0xA=10[4 0 )&:> W`(SGjaZq#>Q0ch %AQ蛈Zmh- >qD&FkDh #A̚Dtbv̚DtbvB͑RՑ$s#0he&8A(" HJ*B?tP9aIL$P岸PaQQ` ˰B\>aL8%&aaC @B1D(0BB2\ >" 3R@DM!0!!d`>OӧE. b/L ɕe`19xa"h4ba~ U5MġBd aډաDA]F/ء;tAuDbhpF1!ւCAMh}DotSڛ "xtZddtĆ!ѻ0Ї0Gl#@n !@HB;Z-thߺC@>$& ~R~{sOib'wAuUQC͔/eDHN` NL5("YTVV'pD Qcey CFu& +H$1I ! 0Jy|Â)B&,FAL,$X>B% bB LD$ ̠ AR!Y f1  H@0$&,*P[U,X tδŁX1PSXP 0o @s|b v .p 1԰G @ L8f^!A΄b`s] 9.f똨* * NG2 }B} uJh1ȥRl~XtP#J}oA)RaCK:k 8&DbrV (J5*րAEL {!($LgIb@òBBe9C 4  "D@(Ja&PDDb0 &-.d!# @B!34XD4C@ X I`Т%NH$`bPD@`P(J3q1׃c00F&b\{N8$ޢ# >\]tЍ` dw  4B?m1 PV k N ffL&B 10  |kiha`B:F!# '\Ї 1h@~ׄNrdv,_Y?-^]:ɑٱ~ea@x}7""CLdKE ej(imU5@"SEͪP$"*%„3d̒d$$BDEEDh" CCX'BG@$ ,@X#`Q& 0$JPCX၈ Af ``H! Sl:3p'k4Tiw30 bcV;LA'b5B VVǻm-Pu1P11⸴ا}Ȑ:oEF@0(w÷c4aSh(DP}&фus!|q8!-$3A$ Xp((@Y I$!A`RJI$$I `H&)D4E1B BBSBДx<ةf |:z\3 a@PU޴330b*F!+#Clll8 7&!6a"„0 mET@bw@!0h]QG0Hcg `@hiB`;Z!HzO HBJ!nDODqA$& :Z(h@$vJ~eZ6&)-U+FR / kRRUNDQV@]y%`pdBRcR$TVG˜+]LH f,$((qBr p|CA-B   0 DB  B D(BVH (0!M,AX,I H0 Rb" -0 u' 3PC!,@3`A @ud*)`  .=U{E#1ƒ8=BO3Zz 'zGc4DG 1(j I&!iny׺MڈcL b #ŨE#.5 ` a6D&c"G  0h>ĎQCBwnl- gX "TWF^BXCQn2j`AY'2DȢȌM` IETc!$I !AL HA D((83pYpYJ`$`0( (.P\!D)`$ %D`BJL ) `A@B!x\.4- B@ " RbS P UxPAf㓑x=`o`* *b<*C*P BᝆPk>$IN(#6-xb( `t\A"-`p0tB U1+/20!CJ2+f3…@Gtbb#Ѝ# &:Z3hEqAք"@d%"5|X% K"ALLD0$$ 4bJDT@0|x}:`Ċi:n#  U b @d ZBlȡU!@Wk[QQ xa @u1MWTɐa3kt[$҅ "6 I5Qhc0 kC3t @MEG\bi0p 4f16aѢѧRc!hhbh1~h Ml0ަ@P%B0'DQ0KD H  !4!".I ""1B B $bR@J!YJ0B&"MSW;"\zafA1M^t$c"SBB B*Vu!dDxw0[`0!`Ġ;1!G9x $3X 8F M@DGahMa""&ZhD{Q >d&~c2 f Wx;ϗ58 Ue(kNV YVPlbΕL yD 2™$DDTb(! >b0 & x,| Re)X0$)B,BAТbf! &,)a BR`CL1E,v6ZTTD@1> H>EјЂ ÇcM> 2LQ0^G qu A8f+'$<#VUКLXc˜BCA mb:BGh<0Ct5\ (FFk#6QhCDt !@a"aL 8b7`utth&.E0& CƤQv8?1@O)}o$B@Wd EEuZʨ0 gTʲ,iv,jṈI$Ip(eY>, ,GRDiZ"\ KXH0&,y|< .˂XYH!CL,@bB@ `& L@qS,0 &@ E X,X ;E T أ![@!2a0qzȕA`0@25ǧ76Bqc-~qBo\!]0 RO#00 i@hb@߄ ւ@x\ff AlDŽ.Cl ! @30@0 B u[~&L0H~E1_|gKH!\X w2*DT)1ZIFuI]9)*"k s6_(lf~+,I @YJKRdIb| WAA$1 "\p S4S ,B(L@h)P P3  ZFհWӑ8!dqPLUUš0̕p L . *j8aD+R$#:2m0DP#Bh20h* #'1:F&^-ХOÇc`< % .Z:FJ֝ aq@a " ΐ0&B[ b(@I1Z`A$Pg4bW_d"F7`ЌbLhqb"F"D~ =[I Az><$GDQU9DВI9Y9 (eT[q# *ʪ"CaQ23DD@BQZT\!@3QD f &c.S!P@Z@SD9`&Hf! Xh!3 ><ʥ\R!hZ@RD@:& [ӡ82Jx9Z,^GWXu#}R(j{wy8ItCHDE,j>FQ@lmp`mQatz;#ŠeNFDqy N A_q"%8# cڈPP"#D0'|Ӡ&Z!hѡO5ćشh` ^f&B@,T$@d"d%%vEΑy ȈꁈTQR&pn%eEEe1!'EQYU`YH )J"BQ18`E(fp`! @@ XHp9bB  ̠ ( A1! !Y 0IC2Id"f  bA I`H Cԡ1 vx.p̱ $#Jp=aWrk^NF9/Ԃ:O:b#AALLδhh#F7 3Gk&0FmEcDm40phxWhÄѧZ뷉G  B"0}#6&Z 1tMh SbCu@t81cьFڠKE~VA5B`K6{VA5B`K6{a ԤJ`eeQ]$gUpd Rq+YcEQXY]dII,I JRLh"BѠ A !Eą+`XrB |!`9<ʡB\ )B\PQ@H(@Bd 8H>}x=uԡ *"@PXT0bujBJ#1'pd1 E"` t]x4&RXN1É)@ȀRFx y1fD,zq q11m10FQ[Z7uL ;b+ht6Fc #!1:CWc!0]L4Mq0 F@~dbޙAl::2Z{VJWd #"If 5aW̨TYUU@$Q2ID0 iQ@DD@Bq!D%HH8 34 !OQ I @JLM X`$$I@a""y +"Ј#q"t(`6؋f L@`icX1;NjAq舣x=qD;a* *) 4ԑW[Q$1B0t40HGGZ31F@&B 3,a„c"vZZlA QQG#cL bjZ4~.t12rE_7Jh5X'eU(TBU6EP2(fPLdYf-e" DCĒD0DDRDbM8T 0"4ELXa9T 13H @RBL@(F (LBJ,K&K&ih0ĂY2B@2W3F@@PL;Hȕ"i*N-8NNxO,F4" '% BBHB.@|jBE#إiB)0.'B7, ĈFhh@u@!`}!]j &8Bb!46!~AJ 3߳$RZ@QQJ!x D5D *JU ЭQC%R*ZL M% #e$,f`Wl82@AgXr)JL\DÃP(qY0@ 0iPʧ| X "Bd!`LD̒`qJ Lh!@ȄE(!c|r(.e0ESLXT""ډbË;!4aPD6, !\:nqhE :`b84EQDtĠaT(A|hFWFWkC_P `'ԃP 0QB0@ bA?b4N Pti %1A m 4"e3sq ݋8HkDY" @u!?JB*x5T Jh#Ee EufS+%r#Be @80GÑaDd Jɐ``!DT\ P(J` $4@`QQ".21M^P8r5\>\W^+5\ۍà1"> +ETgw0:Eo (b"CLG[hZa<##qd`M$DVADW =ÄtcMLAJe|6`hmb[A# w10BA!ht4#6 Lb!D-t4!0ath '|"ף ޟ4FH@_&xMCTʨ @\R }3@QYU "(QQȠ".GV$H DA BJH&D&2 @ JB(]3 <5G;؟11b:M&Z@M:&,X0010CG1 -F$(h#`h>EBaPX$\y IUCa|7YTʢTM "@)ˊB"ˢ抪+2dQcV(P vѝ$$I $AL )11 "b e.˰, Da\ " @ !% L`LQDT(".1!zC@G$MhA.>"jXDTOh#bi!HlTQU ӂ=F]0.&BY@D@ЅR3t-z4|N+!.FxCFh.fX@BA0G^ m"a- ]]mhBPpH Ħb7A3h5NE @vd`!Ŧ~XиߎL"t+ YUDbxeY)' jBBEf (*+j@.Y2 pDEk@ Q@)H"I3 i4"b e\IiQi.a`$ ` <I 0@@`Dr)@)!Rbb aC9,)@ BHb@(BB B1B4r5+|xQACq3ݎ5.1L,keC|7$Y,W*e$ЀPYT՘3Y:%]dq)D5V,ȀV.@}$%I$ 0 `! )q (ÈȈ3\B( B , OBH&D$)0$,0L)-B EB2D!``0I!`$bBZ@d>5üȐuAމFx`h : C&;FDŽHzO\:0ɼ&EC#H8:BwЌ0B0Bbh4sK"D0hEpr[0B_~nn5}E/H*k ʑLX @sfQ:շ.`،H$I #$Y>! P.TL@ bPBdWJLH9,XG90DDP`04MbL(RHDLDP8%NQlgq̡116)+9.f8^3 !&Qp0n b:IL!y|k a0NI#BR\;bSPA1I 3 mtc6#LqLC(@t8bGG HNPBhĆ6b)&L i9f5q@~Ј b3~laD#vFhAktD- @T<aD>|S9!E:-ߔx,KZ/UEe&O@hP]+r@eVT0eYCeQ* X9: 8۬  .$#0!4%1LMQ.(e<.*Pq!f0aX>e, \B J":J 0DŽ$uq}cDB8a'"BhFh1B3@4hcO?]1;1F$0#ҢFTY/ӈ*c;KHQ"BȪ(1 ,z2!p*`sVHYT'%IL `P LI!%3M-` Bh," & !'bDD4a(M̧ .8C0IӐLx!z<:Cc("ao+1 ;b q2FPEDQFjt 2#Ÿ ʄ #(-Bla""(101OHfq 0CtHQlAI AhF3-nc hZ 2!jĚNl }cM5!ƚ&m+%)*+,`Je-eY Y@IRg H! UגC7I& E,"JD!MhRJ)CŤRI% ( b.ˡ'ǀ%$HH)%B ,eBf 1B@>kx}at:\ b D @g3v1PUUt8)\N=`Y=Ad#p1q`fFN0V8f=!0 z bPT"8'@΀舁 :Hm5:Bu菦i}PQm0 0s>! NPpG&k`F7 >hhZhCk1a"2!a@h@DA6U#aD`>S " #jp%zeR|0& @FJeuA +Lȥ״ SqN&Ib E@ĄB @  Å8"B"-e(  B&"ILD,Ph ASXAA3C (8%4 ^yWk5d "*8 *`bjZaB :FSC-FTA^сa( "&8GE,Z,t8A > d03<ĥ ZhFk0uzA#z10pZ`3$9^B};t)h&t&`FbC-4- 6~&Fm!2b1P8P#&2"T\v#>oRariw7P5(UgTBf+\R @Ue$p+U֐瀔!* nMFCML 0$1`! X P(@i CeYPJT " !Eh`1ĉ3`3RB0$h1"8 " $A )!- "b 0!aa悉#I%d^q詓$SEՂ:fUWD$b`c k):0@Ĩ b,£Џ'D" #] 5=䤑Lk20dN@`кn->-M#ҧ@GFmO?[7qb v!1Dm~$aY3c w6t1,k&v Ά2kF̂ U2X]0+)լL΁LH;dD+Q@7I2 X I,f) LRAHHx\f)X00 fPd@03ABK@XP`0D@a0!`0333%4Eh" 0DL\\(i0\9 k`ؚ Ŵ911 #@:=u"ֈoan#u2t:䐑pu#Nh0i^gApcaB A-@: 8r!333!2.DxCJ FD!v0: Hvh#NaLD!:c55 >$c&Jl'psORk0f}R {QURʨDb:SQU %ĀqC+md, I$BJb@@L3 43 aR,&"LbQ0 R@  ,.YmM[ð:aq6VNMP;"pDsf1xHp`hFz= GXbd.t vPE{"c\"44 #1ü&F0aBO < C t=Clb`Ĵ:4M8؍*H ӡNO'. N|G C1F iCwzb}0iSQ BFQt;bJ޹n:)yoHIE#릓w M)@QCe2%0+2<LN23jhlqpRdM%aPHM$ B,"E@DAQL!Q%BXR0C 1B(b,I )$$10ZT( h" XH,0hq!- 8- `LBI0D RHq]ydkb/`8ph`8#9qTgAOt2p| - C`ABc h! 8 aЏDP=`!$qr:*"0 5-v[G4AH.BPÄ6ޑ1 ci]bh&F[DmDcBBi#v0[k"D4޶Ĥ1+۶Ĥ1+{JEQ\A@3 s0[TT'PEeYUJJEQcpH5Kqcm7, qJK"X$0|$#' (傀 $"f&H$J )Q@L( BiB03!D%$ !H $fE @0@bLeQqذ:Z-[`/8@98>̑y\a"5B @^g h!к 4p 3q Z& (ЈhćDCBGh#4pB(qh"u2HLxtD.q\E2s=x,Xoa4!tD_D #tq`@1h S0ChD@>T0bo]NsNE;0> #6֕{B(26x JʨY+ QY* 3+("ŭ@H*Jܹ QH. f2I,BHH!YBYP>%Ta )ABJL@SD9 BRLD( D`B bf@Jff L@B10! 43:B L;@EPM:hF0FP2kf #h&@r9^>$q0s 05\E{L&~.aNG:30 bk -hЌ` akcD"NCDd0\Z'ap a !LDC@ tD͈0A#vtcLtiZ  BUrmXҦ<=}Knh6] #2kf癐Qf&e@dEfNɲLPjVԲbg@J*EV``8*"Sx{ $D R2$$A|x" XD`Pf̒AfDBJQE ABHb)`aBZT@L@ & b ZLHL',աmաC^f8ȑ#z]  I ;xđwd ':'B ȅut1a("{Ƅ  WL N#hb0`-OQVC #/>&D(1b00!hЄ~Q46hnZ!">t@Wbwu'@  gmBa[3Ԟ -"2*}0`9 IVTT+NI f$RW'&2Bq!,JX  4E"LP4(1⢄0DE) q  H" ,A("Jb3@Xl {ET3ć!*X u bőaoQ8b !B4A1bkU huāi\a ickPE>s I֏ 0DF0a0 DL`y<>&=,?$MfCH:@ a4ƠkЍ1Ď&0:Au; 8}>Pxh~ǠaaM 6OggSb٘0NJJIJ~ޖ̊. rmKfEQqv^ ɢZѦI Auu$8:@ eBUF 쟀TRba0$$DDD$KP4@b0@$ YB4R E E,DBR2D SIJ!I2Lbc:nZ )s\$LC[y8CZ0T0;Ӂؚ CMň( *{'L@TL;(b peQ :rZ0m-ia#vL!t!:Ct; biH$ZCUDP E"`VADQAQS0T;:D11ԑFmB4&@OoBD]!n@ phhC@h@~7lzwN>9|;mwC"(#b ( j,0*`+ ,jJ @LNt`##]T$$ `AD"D&Ea9B CIbBS(R L! +,L! L e ၢ 0L1-(a 41QQ1 br]qͧ tn! #|(e1*[@a:d2<2*`i婋ч'C 0@Dq#EGQUn0&ṙk&@W[ }Fb10mf6 A !N.mb +:FhbD"|KDB {O }D$Կ{!QB(^@XH@RT4,j( 2+X9DDu,@&eeT$E"b)&Xr ƒ `fDA@R!h1!B@Რ 8 ()3`Cy,rBBP -BqS [+YY [l]L^a՞0  0 FGd0: !t.  :td`6>  1&C :'ѵZ03J]ԓ!2L0>SL  Eze 9^0t[O074AvZhFZˆ-FBlMBkCA1z #Am`0F䤄=h֚0 5ZZ*2lCE͢D'p@F'VUT$+v.d dQ]Yc  2hC%v,I,I )sYFaX(B3!- `f@ @S`L$! !`&3 0,AB@EA! $!&L@ i`$ 0M *`9>qM2ntH`%,š 7\ ""t0zD PC;NPAPab$aqu+&nwtĎ-L4P8a1P0 ` CDO\:0L[`@hF -CCi 4F}(`01-f~72`0}Df0x!~wa - C "BJUҵA@ @dTW  ȲB45Ct8I,I" )I4%BS,N1&$!%KA$&fX$!L LqQ` DiZ E!0@ y,|qQ)" $$$AEb1`q$kR@@ N@T10@>hI @TSML@D N("w jՑbXEՁTT@xbBD"uC ZDЙ.R[B^- 1L-ϠNш#F-uZС!ZGb ⠁ v$|ꯥ~wM;L.'Z*^ȨP!*kQB:PDm@TOs +jQiLs Xl$I&K#`$L`)IHJbHfB(DDB!PB(r <BA@B ! B`4X %Qfq@EEAL0 3MPBs\y=.8ǡNWGv\.w9:nQQ7UUQT\O. 5 \pV@Q OHĈM y 303d+@zНha4x]9/LN(5P)bGFli`BAcx8.8Bhmn@h1tHF"& -h1w$O !1Чttc&#?Ԟutc&#?ԞMj, bLY >^ԋ-'`#@ - }|4;*d QsI) B!a\Ix"Vx'LH/@  0`X@z{52xOY(`>ԇk 1p] \`:D0FDDh _a'z΄0jrIsgQA *20|Kp `50/Lye20h>AhD"_ctٖtsF|)g[YP{ 0Jbf>+p<#LDcNfTWNfTWݪ,qh鴢$VY@H  Eřf1@ 4E!$",B3Lф1Plm4NXm U1԰ao(BL\[@rJ\[@rJ,dљ.SlBR"bs G6V{8s1V i`9ևO^>Dbkcoc*b1:|G././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/capture1.ogg0000644000175100001770000000717714614030313016344 0ustar00runnerdockerOggSm~}vorbisD8OggSm3Ρ-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSm*.*)m3hA],7[@h 1././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/capture2.ogg0000644000175100001770000001245414614030313016337 0ustar00runnerdockerOggSn\ QvorbisD8OggSn5~-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS3(nJj".-+!!+(®²g>-:5 Iߌpz{/Џg\fQ,n=R{wY!!4Kf=He~x0J D};% s9:(ϾE]K9:5ZyݘɔW=9FΝc$Όd 3y}hufݱ&ح<>v֪ Su^^^^-ChuUeueuu֗DBug^Sr˄LfL6;Q}ޟ+K%_*/ .TwT骀3RV'|Ql}ı3M@6;z.ʱj^OGGR3#dO@-S$'dd0v0`p˚,E)u=CsAwKXwMe$Cf4:[77qX泓'$0׭OTY'QW>^n^ ,xޛ {&ߺ~,aʓu>_qDN}H" `&zIRs+!y&Du4+öL?xS帙L1 c$@* ΁;6Mb^5KVNgu=4jupS(*Km-*XO 9~+THb+Pr.f3^:B]և%PDO#GOlB_/n6`͗Vc~w8Q?A߶-Lc޿_=_ǣ-IVB=oSÏ2.'NX'$EFccT/R,1kd0Ϭ QBn ى&~R˖‰GM֌·V^ޕtE O;3,Oz9a@P0!rcϖ=]w? 257:l'׷PuXj]_ H6!XHXcH>VC YCʻÒ6LMaC|T9././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/castle.ogg0000644000175100001770000001356114614030313016065 0ustar00runnerdockerOggSo/vorbisD8OggSo7B-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS;oŅe'"(&" ""*-'%,'!&!##&'=- /1 jjjh0L_'3yA3:^][=7޺j)ht\lǤ@ V?P)b9Dӟ%k !{sKPkRt葶&J#Lݓ*$ZmzmPXDsu* 0{RVz9,g42fyd,DRjyM\4\_ P#D-OϹwtsg)43aT3uh D<ï΁}m$,e3xAVS]Y*A4tc.֗2wkO<2f16 HOV{ )i%a4DOTWt)I}[bsgivo}ai;:v?nDqN %00KN-F >WHjx"񑻳Hf^Zfп8ك;#;5.#<Y'ˢkǕw}i?LۢoEY|˴>vԼp@OQ1BIGZx8L@Ť(*H5M3e IoE0Λc^k]kϹqq+Qv{>`B $_5nwi54Pv2>v_@ RZ pUΎ"}_0E[? GƳ'$"2D㇯fZmOAjo}b͇{C܊@iAަ4D4\>v_v4p` M PlZ'h>к-FXu1tq}4K53>,yO)rly,Yt5Zq(vpGN#B6PFaGȂ1(,:\ύzw;d>v_021:tw{,gwdVDuv^Z Vؘlnm n-4K93$Oe-sW^+ u8%{ϑ(6Opq>0KW\ nrY~>vpB M(c!@&bjsMFhe?]e+u I=&DR!D.G+C`d ]'R^nWaQ9v8hA"Yx*5!'>v_"L J`0A_0@(A +d2SJj=TQa$Jo־7膣đb2@. 2dS,d̩NV/F!4KψӝWXA),S>v_kedk|BR%q5eu/bTY ]l#X\ o߽b# '## ?' -=QM{dkqrZ߹2e:v}6ތs>G&gD+Ҋɴ2r$-PrWgҖlutlns=Kϋ=34'KW$Vk&{dIrYu Kkog!.g3[zm[6 *%[йCbW'H=l4u0#n xQ볢3*~>Y4@ߍ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/check1.ogg0000644000175100001770000002403014614030313015741 0ustar00runnerdockerOggSpKvorbisDOggSp܂.:-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSBpU(-99`(j%"BffcV*BN00Z'ѨC 0pD"6әU!apD{6m,7 eƂ@,Xu$ >zQz#"MabtWl=ݠK7Usv˃_$to!{kKf-)?P)e;\"67։X $ޚ]g 0pfW6 ܷIYl0g9WUjXiXEG0A"bj QDZnS>Q{t+0>zk;B=튎#VӨ sLH{mYA @( ] _g4sƣ\fb1UΈ z+mcnF8@Inzjy/}p(@^zO88PzO8A `aiJ*Ū XcEm*6ٱP0mD P\,FEn. %JS7nˡVp_(J)=L-ϳF e$si$O[YJ9-/'5CpAN:/ӆ#{^Ι_?H[Jt*zM ulbrdW sgr  y=g10p38hpɖ&V,VU (ӢUL#Qb0>hL`PDҳQz$RU2?8eBBhLkT.:F!BFU*QxEGb7HUjBNwEZz̔=`:Δ8Sߦ7V+"ޑU-"g8L2h9=GQ0CGd=Dl2bUU5ƪZ ptp)h#BblcUQiۆVQ"?JBX2@ 2le(JdA " B)bWꪭ!Xdct{ٚwa<g%];)F,ͨAvA Qw>aݮ;Р*@3Y{;GO A@0Is,X.WUF5`qT-a:, jVT[U]mJ6m#B B [F 0`O %!J"(K 6PȨ*Hs#9=gBFLSAzOFӜw@UDCX N"1`>8bd I}kXvtR_ >(j`Y8\,GEET*j+!q c+?:P"D2 \F$$T  Q;0I) ˥XU`He.ǘ |+%|?tae阖sovmƒ-jшн_D?'&0#ʷ54v!J @~9{ 1> >z# # b9VUU!VPEUXb) BGȁ*~m,JMtZQJ**,Ӏfт$RriE  J^ %Bh22BrGդW锝jHӔAD+8=kC 11"Nh#;8'-!L nbm`` i (DKd(dhl &xsT2 fXUUPjN4$*XjtJjnT);8@,wcdY7q4`rP;E$(i'B ^M:Rņb lFkZ%(ߍvN5 ci:ݕ |x({ p'_/bŧ4:@EC٤Y; fSlK0"lm /J0i:i:媪 `:VlVbFkN)mGN5Q& MG$9Hr"E@ FH)@itlBR$ Ђ@Bdc &`rZrqN=!sUVn>îNx yaZR뼃V2&68!F"a+*FZ5ƞ݂t!H!&p !O)vc0ȒRl 1WJ>Ŋ0⏐]z(%~6W۳x3וP)jڰR˥3Ip)go D+,SKXHE T7M:h>PqeAYo AnL*+X*5FE(bs jj=sH@M+%c"a0d *L! `60P!fMFj(qd'5꒢6Wi>IqZq{&h 6ДG ذ?AJS.ӿuHZlkuѤn׵ 4Rmyxx[(fS ^%@!@U$Agf,+r\EPA+nAQTGQQ]R")HxCԵ +B mB˶,b¬`CA%40aJ)䏵 j@XH -iF]-uE vTNBlۍSn/K+=f~@e^)m;otS6\VfHި-kGQ[Q&"XbU5],V-8&F#hb"VbhѨ~uUhKƄ" %HixA: ] V@^(d<` FJmZ (ð83#f֮`hj_L:OFFP]h;. ɖJŬXKμ 7Mp}8Z 4x10<P %%+gU1* L!4&@j-M  !0mB+jA-9R ˞HYMXlY5;vsl*(h½Qb" BlI6Bm(Uѿ’ Y1/ BTqjmxIlD)J:ܢKYzVrHo3\i$/?Jد#jW΄Jl]9-Ct@1OggSfpXA ,4~x% ḞQR0H W25@&Q;s bΊX1QAPUTTՈ18&tS %QCr aF*atc;bawc@ -\ JResY3 BhmeYjs|-.g=L̽;ѨR=Sq;\[1|HtȿGGcףa=\N@= K0?0  (Ӳ+WPZ0UnZ,zL""UIV:TUނWUE]ߥv2꒪ I P&06P2"-_&&##X_s|) 䱁fi tuٛsw˾ѥw_PX_m񽮰ze Шv x4YAׅ=$1"@h|&a?ヶP4 3\Mj`\Y.Ǫ $&E ݪZccxb845®2x m`$Ia@ Q0@ )@Ai ,"@ زsRjR,Ɇ D؉ ' @ U`~Gg~ngHG݅*:PI B~VWN8kV&I;%CB}!WgkԜ?d x|# 4x|# `x#&"@33 ΐ*r1` bA,Jla8>TGIvfN1@%H[6L `Rc  *0.[R3  B $aSA|n#b}Qb^fL]NG-]dmfk$rN4K( ]K9 W\,^4> UֻG;:OY8n. ;ދDw~թ/AIv>h)0ec@4M'\ j;V4سFj5-fiq" h"t Y #豿(\` pe00J)/5x e3lpDd|O\s9?ҁ"16; )u#mYL9ɗbLNHb-ķ%Oʵkֿ$FJ zg|Ô);c[@`rFD4UU b &j)մ9:XMuvVtH[T]p탛)vRPX\Od 0纗 `KK 0X'IzSdD ;L:;?o^7zEpK#<)9!{ >ڿ8%,-:\1f|l8}b ú7m6G=EB0w1Ac: $"eI%sAs,fYXUA  `1F :jF˜(RlD(ZdFe Ba PBGv#($ P0 ;cVZTծPRqfđ8TX(btnɄ2 u&_[sh$PjDJ·3go_##8,%qlxq;2\`v @16%gB˔, s`rQEerUXMS,VHtTUu+& aLZz46mmi621$0 @p-JV1 ` #IQbd:C1@Nؘ'B$J乆?}TU_}Ҭ1G*&*Xk#QIڵ׮Ng=FB.@_S3eCB0# ܀ (_(#0p././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/choice.ogg0000644000175100001770000001303714614030313016042 0ustar00runnerdockerOggS]*ZvorbisDwOggS]7_ -vorbisXiph.Org libVorbis I 20070622vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sׯgv׿M48˾fçkfR,٣oO~jIz*! 5 ~a5NVs`U!Ÿg] q&x| Pu^ 'DOm_ R) ob}yyD@QPG`_~4Nv 63j%q7؝m~_?2~$V V04$psc= 3Y}xm< q+t(g@h<?~\u/(ݧ^غ v7Q6@y̝_ 7] AD,,O[0aزl^>+u. ",kз# `@%$ 8|!ۏ0(zHXP<(Q7CMޛzX.S:s.MoHsNZTބ 7q`K_Dw T nlV,6?=qbP@Q7e~"B}nj/0&<,9 @b@ I: (}dvK_=?hh^HޔÒK3@Ax^>2GvfEsh-}e\@0P* < Rp ǿofïl$W?FV3{'\ē >k!?[e]gFo@scFMl3JIl0,VjixaVi磦ap}ĕL?u&\x?vjUZy_4~>h(2^a>L@^2 !0^(RgX.hM3+l,朴xj~~A  M'>`~Ӏ  RBdI|uɏ~Υ`s(Э&(W!˯?`0PĞ5Ld"هg @,ڏ! d':8|:,bQe55ݯ>؜^zwSV@f !"DBZc֟-}m XvU +S=$ȧOޜbWQCZgJMnͯ_Ϭc>}5--gnц././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/draw1.ogg0000644000175100001770000005100614614030313015624 0ustar00runnerdockerOggSq~7vorbisD8OggSq`O-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSMqe$#"#,-+ϔ^h#9o`mЉ{@քP` ؔV^H<ʺL2zB:^u s5*q<ܲFL.|@D!}  p`aYSl{REo!CߦZ@A!<6Mdc^TS#BRvTvj S]`xGwtJØHBB2_TVZ*ځ ұ$6I46.N*bCRj\clO_8K37U8q@܂NGk~ UV}J9~u?ƏW`*H'# 3Fȶ)(m[uɋY[ZT{W4 W֚ 'p(V") Yќ-a9鄇s8~>)/<n]7)lӢu/R&9yR>g`{YĜ*{m4 L_Ll/=6 055)2²f%.D T)RYtV[u¦ u:b@h")Q6 (G:*:@<2LjU0ҶV0M/֠C{V߱FɈ<_7ᩚ Q}tG"LduFEM'#}9 N 6Hv B-HꧼTPSw(Is`C6CVmCK@f~|_dg aB#OGHVt$υ[7g+'Fi&AՃ|`^Y.ϙ6ϖ呶cj[w f. ڃ^](\Nt<6bMcśpeR$_V :ŕFN'ޘȧyQFW 06TKTxn U^% V%.lj`T,׶?Et_l=DQ 7sODb[q13Q+u(Xw$:970* 0'@H`N *=mu2S#a%@VM(4 G"`&*@u+JJphT3XtQ#Z^qȶdkF?}3k3NmCǏˌ&4Rk!;h 3_ԡܞtJ۠ϔ>RA& Gͻt.z5=:'ݴ#$L /T<= &m҉X<2+bB7bmz] 9RK[<% d&mT{`~s}q`K0s^$W_RZR@5f5wsd<Nl| i$d_/}lX6CR/W(N732Ǩ0^97{$K-åjh<:{ >.Oh/Hڏny $(&=L^t&P|Rr;|@Cc)#Bc7"+f40 >'7 mսAvo\tDZ=7.2uX]i~ _{涰:@ W#?. C_~u},V脽p 6/ P!(ck^bwHiDSn+~L5(ku!V|f?I2{vp&X^( ϘgOj`}flk4JcjOl/c_FK.8Ysw4:^PۊPvGV~ x?,tTw^d;q3؀Mt,PZO]U_/.{j4 zW/zY*(@hCSM0tGW8dC%SG Pz8ҍaoyu桋_#Y=)|ia-4?l{1 U-rxmwVzvM!& D X7GWBz\=D>s=S?j)`']'.EP@VT/A_`xi0"%9F؜iNl|nOTmF+V(EMP#Gp;HenCd.Ck;|ѥϻj? 0<P ~CPcIޠ:#~?nPoG@D<AqBl€ @h}0@BJsh=l;)b5K5q5rs7Pq%6:mHq,.w=9&yQA4 o>/V6h+->('y%Āp,+ff5ǁnpD %(LCϧe /9Z?G)M+t`FRj 3:eY#s1HW`Z}w7+Ow(ǻ:B4DrM!A5Ygl[ %[n|ϓ^,ùLg0F< ߟ~XS*x5A;;ԕGѓt @ d%AiӤu4D]F-O{ Eh 寲C~*Pp TG"3P*hol xe wg|>W`^m[ 2y~ 댅h[nvl$ SL h1Hͻ+zϮW(u-'^68u@ 2xNNN,Ps|Cs>htWk^L]]E* $(H+'δRHj椁rAǓ7CwA\("g"9L#2DMlb! cZ㚛8o7IYɜRC~d]{_&-@\RFPSUY [w?S.w$B/ 9- k1Ehr,|~ C.gxc& w3)$>cO,3I$"O\SUt%3.lXQ_NLbLyhv< ;m{uc{5OggSq:e/*v.*ɬgX=%V I#1m-7)6hX`x *R:o"eՉx>9@{t2|bvjD3nSi :NR筨|*{8>@O3X%[0<7+SӼkXmVcs0a疸pIRѶbZ톰2c,AF SʗJb" ѻ-ФyO5WK1>dz_ՉV@DrQ2!(iww;~թ+h܈i@{Edyth/.ͅ&zmypYʭe Q֥eFd -rj+gT#l ;\Q&κtWpW9;KATX+(Y(}x]4-ly~L] 2%!(c ͑P߃Vd:z3D]WaDkgWfjGU"Kj+!I܊*'i>WB1LxZ$WkfK=?gfMJHtK<J>c>}aFdr3ḨOڊ*g{D2:I'V@ (~on^4XՈ=svF8(HhÕ>Ada^=wlk xMGqz]}&&ĎmcfwGk-Eݸ@I^ &oY* D;7Zm9r d JYއfylhL/hp#9@ <,P_މ6%P*J^} 3K^~唢|nRŢ Ci~kvepۑv:qrqږ,GϐJ]L,Jt?l iKu޳̵4J67'w`B+~c۶^ثtɖJ@c7|!G w9;/h*9Uۺ.m ]K"|?vm TJ{ݾ#{av#*j[Gl*zE\`N S> + ipël{=;i[ r^Vn oP]-%r_hIc*-=7C,pD љ0u=$v彩PfnzU9ˊ7FQ/ { xd %٤yy eI6@h* x0iADAϫ m 01z-2va\f5{vKO-&I3-kEf,#[^vM@ݭvizW h~WtT/^ rE`O Ѝ` AY:?o7~DA k;8'K]VqwVisr+%>v)u zPJS؉nϏdhar!,ii7b}ʷs )z1ۖlWH2[ˎ 1J w'`tvg @yhY%D~ mÒB%T)䴦@V9QWܬN%ttfb;cQWiִnǕkG(N6cq XlSĐُӓF\J{F^.X [V,*+"ihѽhOE ;JxJ&`38[XLgLTxe WjGhM[kT@6UPXeb{>= ;*4jB;Zw줼߇R|by8iD͹e8ic 3U>G%܋Qoٌ~Mq)Mٙi*Dwg|۾.o-Ĺ Rx'uF&it=@'3< !Q*s8_z/( d P$LPީQJ%#U} Hv<KmIᾭ&QAWq `я֭2n'Rm\orBior ur#3G_LO +ƨ(̗t}wG.1 dGIAyGK 84}c>4>^Dnš-jx;08ڣ޼'P8%'a6$θ|T{y5wu.anGR>or W'/+)RoUb՟Sގ&FfW0elPyi*=yp{)G̷dD>1٠.g8F F& AW Fݪˆ"P]$~#UAE}3\ R9 źǢCoVޖϚZ23ʴkN J$5I{T%S a[a`2|?stWivߺ9 $hS,W (Wbdޏ0&9@U &J&:J{=%yߣ<8zyBӠw * 8TPbdմOנW vuH~iA뫞TeJ:Q睬ޒJ&,& hQ);ԯ;}f]ȞUٿw~Tn+&[$V}0VQ7G(;Y,zP n&@} WSL~/܆#)v.0 KF| ߎ$[thUڏ'gU! Ebн0S84Jq;,_uUh/'$=VL݌Y#gf;4x]۔V wa=wlJ?K ۂqH2q|GkXlF#t'$2t,^眜;AU̥"W[ @9_ 4@|8m8D rW(|F8wKūW=Pam!1\FZeO $쳪9]qљ.7M3+;_:R .W:\Rx }Xɡi{5ct >hFܻ-U1Re9e9PwDZ:*@SXPUNr^%֠P7ʯ H*yQEF 9|b8MG -b孵FJI<Mp/`nג#^6t+9Q -Qxny@mC>ARU+]؄wvc_ֈb 6"8oIjP{^XЂ9;qawYD't h lxLe (Tdx#i]8OŽp мx<l [ ma~:ʏ֩w4wLѰgHˡq~v7U_S춛lN1m /Oݶ"_27獢8P7~9+`!;2W[,؅p&j(&s;ǜp_6p@$ GAц@[ Μ&W;T.UQ [RPu] +q#V+G~=6a [y;ǒx_.+,B`HZKp${E.cnGwZe0_|ŀY~ "Tbђ+as _uV؀NxhRAJ\}Ng7!"fJxgFck 07O515pޙcΦsŧc,暦Z<Fp$);%mDn9wXx%˻s 9HjA*HƒĸU-wAAfԨlrw> LH􃙋 l;/-$ d A9[[g)u쨪gvK4.8%Vq@)ȑ"> 0RnImԗq-$bQg,TKV(XΪ k,I&QVv4!28XUyt;Jbv1N>{r5~ ;+tcrm큀S00E%$xs6;VUEfR6LnQdD@zK `X;bF1&2sͮfhBd6??؅#[#JѶ4r^}3#} UD:2*wT3FGHƝl'J؆mY>7̧vJ:o,E2:L:@@  02MOrxjWWs' ӢKTwŻ  TCgv+x"ђx> po {6.i׷M^߮a}Z4 ] ۦ#x0 4k%Iun97D[v;&&37 Q58xN(slpf Z(%Ai^LHuz|E(NDHa|hm‡t0y;à[FOviәOÚh`N$r 5{\fx\,1iL}F{fm{l]zKm)!&̛ rʧ236hL&ົ p,S ҶDt9tsj0CPϫj5RI#E|)FHZr y( fLV13r,H^,J}{޾=8sJۡ[ux2Sd%I|g{mM#L?eW0%~ >7 :UtDƆȀHН p PC ee#rJPO\a @#X(Dj8Dj:J&+\Fӛg;uwDSg!frD .Z!qQYk1dm^pm~+WڈGjf2 Xncp`6Cӻ]- ߳> bAZ4\}xb\v6 Z˖Џ֬N9U=;PR5hnb}DlݦDz-Lc@/#e'̹WIQZrR$rl)6Lj%cHls}ͩr30fUbQT]$^?A |nR|q> rA~ҠMD@}%t`2tΤ (ת>i#+kWB:.$t h55zF0yιPހg5@.S-7B*Jea.|P2hƬz|f%GӌDk΀C *$dVE(9T_}H ~G d -]?Nhॎ ?%@_;GAεs{ե,#9+|~si:hkD'fUB$Ty~A΂llxSG'*nyMY{ϔYN WAw E=n>ےoؿ~&7_&em׎ "WA~zC儐Eb#Ƃ 5j`ϓ4(1d??iȻ;~Zz(_@TF<"XK=CH:>168Xygr n\rg8qs>nr*X'6e9$$oi1m*tfcV{⧻_֔}zI&Hˤ ai8 >' Dc5X'5'Iڐptb:Ƌ dI=%]M/}f)oKEPR/t:rZ4=ϭ.aۑۻɨ{H]exvE-r[90.GZw6Q7Qό:2NLINv2/}b(fFP*5mF> [ءuR0vyₜ[:@8/MwfG*W4rP/A(ZzuAA'@cD HoT bcUd8ͣ4[6[ 9cz EzzNuU2:{͎DW7 NBѝ "jׁ m[a=ЇmFnYHnT[UbppӀɫ|#)pYSkܞՁ%8ך\M mԫz2cHGv&'ouR|kȶoCN۶>[_r6 @!깜ZVg~ t rYhXЇ }a2"Ҷ#uTX~i0B}+=^K / 0Tc`&jwO /Z V O-F48+3Ll׎#篐X(Q'ϵw?#Kel; }{ġ6 -2@1lq}lH5&G94f(Fm=@;(s v tjcd>Iلf?ϛ^ޟ5jŊ]GgB+zD}sZ]=:ffcř}ܚ>WSD~{HEL@f"mS" zS[V]}g2у6mCzd#!kd4wG9p6QkEHZEd`Msn!G- 9Y7zϾ72XkU: GMDPsS$g9OSzD|Vv4G~Aeͭ)m\- ZytjP j8d5qjGl@x!(XWU-{9Ѡ#F J\@!InkeЙ66)xOI1RcX]e|(?*q!o7VuDHB.>>2gGDo}u;ĉб! 7}5 hQJǫuoڭ OggSIq&SǾ;Ŀ 怨Z;X `;xrA9e`кejcz4h8LR HI&=F$/ga< SsFl}ϚmcS?@)*Leͳ LߪlNh&]bjczf̑c/ ۡ0]&l;_z^S bAAq/3aP{΃ XQ2F_!gSm4 ;1`==zfR劂O QAeH@"Q o &琥 ݵ8'ʷAT/lf lf,)4ɭ6|bp#؟gh3 ]'=l.mI󣆡= $K  FAsdC;<" JQuoάؑ &- *"ҧȴ])zou {PÊP)zų~Me'eq Hhm`p}И7cdA۴5cQd留zBxy+P~+8Ro4Unifx,^[Q{/K vB%7T;kвef1`<@eh nbz>I)X*(tE󫊀;A*Zcwݬq:r@^YE?p%Vxg>pJftêc Vb& WN#g"v -SQo*NAT*5ž zTBx"$pdR/v7 (!92t%I&_]Azy P?F}KRQ.%8b*;ovUh=֋;ݣZaZ6n hXթ"kotq?:-.Ν7O{ћ) &Sf:ì"X݂# P'KbFAP.rs rs&VbDXBhU  Z7avűn jdx XCjɹe#6=Ej͒hc9E*1&h!K5QRO`/yܺ=U/k٣5&XfXt~F[ރ' \-{y1%hES6VeyF)R'. 䇢g`)E"MK.cp !/%u#1SFLB7u7h;ĻJQ4Yp=V}vd"Z/[+,ks6,.?{dWx~VG> q )Mr솴H0G:322egm31sU%T jZ)"@f@yPD P;y_L. KԡnRYXzS 7nt4ia4R⃥F붎Liy6R2?zpO[Їf$NTf49Ѥ4-2@(d6?'(?+٥d{BhMzdYo/b1d93,=+H>}S/,[Cq{u OU)xݐl>S 1_pú6Lb"3msۜ쉔8}vWa۝7I%^fS%DB{Y&t89vѽFe(ebࡦϯ5!վj҅`!(t4փ14T@T-}E=j&$JU ;>Ĭ-g5F,*xn;93{)8NO ʜO|4J[lJz"fKELdd~FtF':n֟^CS rLEszȹGI>Dp&#TxڶIyYU8)ܿ)] .2:*j2#K}&F-*ܚ2qHh d/P.ޚ$OfD{S?ZE-T[)5-mH[ Ammy/۬}m=z b"M"IDHݱބ"#VNۺJSiT%iXP{lؤ"-l u}`CI1EhH׆{m% ky$ $Ū4`bQ=E2:GeS t {9;9l`FƐ!(s<&K3#91g( @6,V6k80E(6 §PNWbݔ0֯#nI~OOBjrx>'o~{)e -ĀcI?S^#%O?7дrBx+gd=&V{c>vg%d VE+S h2b A9kIeCMxкP_[ 1R>`/M>J"z`9^@pG Mt+ȽЭۍOx oiȂl Ap-\/Lx}=Ji n}gډ|:Ntc"Ė:~>vԗBy{.q{Y+ke$Ыؙ fOuMLkd@ziL= )X^^|ʱ-=T-V`!l21tRGXn^&KqϜZ2}6̾cыC'qLg}HkksAs1ҁk&9o\!DbMjώ-ޖ`׷>vd{Aݦ*O{KMlkO\q[S89^Ff~,f!HX$hÂLg&zPR-7YN)|Ja-L2ⱌւlz[Tu[cZ%*甍?NN1F-c'\Q9D^w`򇊁)F ?icD >f{iQp4 udH!c\atG_M=i~ZmgQ-nTĈa  A, P0ˠ0铉5u+T*iIZ 6 BMDN0aV"ogNk&OͺXtN;ԪC྅yUVh~<.&OggSXqe_>f!܏V+{yBc;ِ&T * CP*uYFOs+_ 4! Bvk£G{YB6=† L#EֹΓqm3RG&,V8OGp KrECmCJV~¥Ƿ B%3D`-T\a&ol&$E[F:b+uC,QJqXF%WOL#KcɼvDi ?e N+u[ dXDO$ĭ[T[_8xgDDS.#f5  -bs%CVC=u- #HUk)ʆg>{/HґaT2:C{+ExNa~؟*i=aPVVtq&UwW{ZcgC'ԝ;01e 2,ǖ̯緞k7O]'+Oj S=a;$Z35SYΎ`u}Ku"XU *;esfi%`wg4n%D`^V`Ʉw!9w!ྲྀ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/invalid.ogg0000644000175100001770000002045714614030313016242 0ustar00runnerdockerOggS+K{vorbisDOggS+K{b- -qvorbisXiph.Org libVorbis I 20070622vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s6pR4XhJ 01Ƙr9s9H) tNJ)=Bz!B))C(!R뱆N:k!Zj2(R=PRj){K%ZkK*)z9RL-``'EcbC BH)RJ)c1c1c1c1 V+j'tfdȥTD#5b%ء`!+2Q5^+bj, AAe($)XSȔRY%tL)F)BƔc)tZ=TJ @P` CpK(0(I @"3D"b1HL`q!246..tqׁ P@N7<':xH6hf8:<>@BDFHJLNPRT> "9@@OggS@+K{gWWSUUX\W`LH`EuX *,9׊,]Kb}V}׸G?cq& n_5+}D4 _*פ%ңdaauYv$_Wkj!lYt^4/ 09\AbX%+N}sDq=bg5>TyGg^Q##5[_ K۩c+mwk,r7%wJᜮyW.ecdzG{ƛNQSg?uٯj4Elk0R:LTԊYz`,d7g_YcsqL`#Mwa>~s[t<XaRఙ4&J-wbH>3/p/ϯԋdxs˻ wЉ:ׯyI.zon)<$ \P|(N$!6=UK˛QʂYlw |eH}~ #{KM4;20Jt춿F|2an $ 0P_y(nTf=]}IeӼWs%;%-4o,$l(eOٚ0I$W+&:a1ߟ]e&3by/l=C37fF1Fy{5scMdDKZu^NѼǢC{ͽ*Jyz['))|D8{+ky =3\/[`3XZ^ʃYߦkٰק+wX]ǵb@;?mgq-~z[z-*KjD}rȌeUa'q{qn6jS; 0F0؍HCpȆGm?q^͹ߚskfjṿҼHWUy/8k$éxǟU?T}">CW׾?Gj"Zmsl {zo;p?Z ZEX຋Yf Eרl_YJN>|s}ZbLܘrd{|~YdXڮsS_5 )1#rУ~,ܿ\x995gWL/]ᷗ5}$0*>Ia#"d__V\>w7>BgI3ga#klMlX+p%F\=vNa4 +T)> jW6tyvna;nՄֆwIBSu! _Ɋ+bn~>E!l\\jpD٦2x;߉_wU8j*ԌOB3f˭&Rq|I {U':2^W5=B1{sJ_ggc8WfSXq[+v;o~Zفzpr.~a2t ?ɫSZ^5DOݿڹ7QؾE7ߡJ7wZOmH!DA +yG9G{ڿUh2?}FkeDlU;[q͞$^-=ZנYL@_uGjVtH"f{.Gε:Cm~|xLQw~p )Iu&1#| BïV}}l:@;n΍qί+|PB|OȒr[`.,(F),b+2սzєFnui-~ygzQ[\?~ى 2V̾ xCF+ugR+>~oK}ٶM&JN 7%tϰEVlG1s8 K_^# ćI .rؔgf]:>%2Yn}.ڍKIR~>/AM|/g">Q_|z{Œ{\~&Vbk=[U7eI)ИW\x%S\?stv__JU/bS_[ݭo9NZv)Y?Ozz,ޡOmsn]Q_{qխ6yXuG+X6i 1m+Qsz|s5^{UPdu-w 1r "Uϥ7zx?-d&FD{dZdOLWu\z4>霋.)5S.OLFf! xʊE_p.}m;ߔT+ [ ߖ[\I{{l_?3]L~V1Y?,=^{ܖLlAiwp1ٴOd;.~+>m̹o*,s;kvȅ"/-ͧk08*v_5sOM[}R^ԯ|6Uµ222\xCmO&- ~Hy^85drƻ +waC/ [ln?YyD/0_7s$Tm9&vrՖS(K9ν8m-YWJO4Ȁ=y$ԎԬ1V>-k8k|xYԦE[.JLvjda﷘gVRO/J`z]U_mo6F'mv\&knp*L}ss}4at}],>A.E'G (at?/&[l]g~qd%2@yМ@|v1}52#5 ԥA9tRŻer"kxsVNwM锵zd?U Z8힀0 }g#eE |}g2z_ ͋yGsMs(c{ ;Ɋ5S<OggS+K{8>5S %].Q5s:݆8Uן?爽vǻc ]V zjLJ1L =WdOJ}`>KwT.:nXy(ɽz;>?}q˗w'q)еg=+Ktd#GYMX/*bGϥTc}&<|i適_nǝ)-AnKM>g=}" gl}KݥuY#Z-\K[/kS3/oǕwץ^_{o.},ʀi/撥cX,_^4=_gɊ#.?ǻq<2˳=\3-wF߆Vxfyeܧޔǻgki<n Ot././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/lose1.ogg0000644000175100001770000006042614614030313015637 0ustar00runnerdockerOggSrMNvorbisDOggSrX3R-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS(r ELHD5CEE@F<(%%-.3?<(%%%%%%>4\-dYz#*nU?uyϟϮl4jJHjnu4hO8m~<V #gok` >k~WUUjXyVT]vePQ|w v̟;ULy?BԆmvnĢ|1FMW VH`ެ$MPmϷOﷺ|/aa M W'FQ_~Zׯ_ +M W&#9zׯ_~+M W&#9zׯ_~'Wt|_<9b"{Rv{\7O=ݕawԭ?H@_*ڌrbяWL^彪L3|SKR"@3 %67$g]@t>56vxq HRle^:޶:Ͻm۶ oO&M~W|+t/*@0jtyr\֗=fwپKP^ M W'j2:(_~řSLQ+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e|oisjB>@4 ӛVīʷCC^{ue]ϟ_mIi̻o,R&bf~_jZ{^mw>v'J.t.LvM8 lZKπmٿ*t6V.񮷴W4)la\7 mfd`\V:~o-2KRJQTniH\|f:f ei&,TvYum͞tUrմQW)I/qF.:o?ߧXUGCnk+zz} n6>X$K3'۳2 M W'FQ_~Zׯ_ +M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+DSW:@z$oZQג:UgQUCzNj+Uc eٓ/QiZzWy1sn8Ԫ~yd1noƇoD?-,VTK? d=+ &iR|Ո=8~ϴ[6ޔL;WEYdEVffzfF4UU 8Yc4oݟN9eaRk|փmO䳧9glz*dCLAGHT:UbB8X#drZa`2 P4#G@P -rO/Ri4ٍ~/+K 2Bt!}"R  Pkx[Sv9^(S fA0Nt.8>@3$#^V5R1{<W*Z6HVrpy*W|&޽/@3 hy_q;8jiO:T45!*O^)~3 Zv{?@L+X܍mKkX,R |(|{m2|o\HiUSėRQA+\voχג A&|JU1I2QG>?}Q~z|G8N8S|oe/@` $-Z5ogTb^m;evc Apd3yAP:tkYNyOќ7LͩnoZfQ&Y}j)T"uo!eI`4ɪ~|y~\gm/\j])jeWz/Ta–lES&}[n ǩ ISk))\s2PTgQ\es>gd KYJEC?.u t>k=cj&:K0L\]}P[wo7njU2 \}e/@^̨ykS5|6N,[Ϲ&vnܠ14lP.|4$ Kp9ٓg|}=.:R#,hnڪvp<.|yнOd`&>Tѳ#F??ӼSNkdNϊJӴe\i)=\'ϋ lmix` tV,r5/g}v"X ,ӝw<{\Oa d!o+4)  yEvlH[Ί=+ ]մJUKNs$ LIz @u$?=|z[v^)BЛ'յBOggSTr]":4E?= 43-0:50-/0444=I4//>> 15EA(414DM?>A5146226@>@E.5@x`V?w;{=1{3ITUB}D}LsS1D!J!kIIQu%;Y։O0! %Soѥc%ߗ,_dgKSdFWvsZ[%?=skQ ~֕ݝHJr^n'GgИa,",TDDDtDsUU1"Y2jvؔvU|yzEwCb~:%>yx~BwlxuG1ăW^&1̤ Ui)Tnx"8P\AIlӥ݅M@&E ̤+jdPȖ/8#/&$0ai5{ =5̇%"p*t2=L6dQU' @/iUMQ;r^ܒgo\3NxK3Z>;Mg>jrwmrGb2ElˋmUX@M#OX֮^`f;u|i6tWkDi2p(pi=_o8+Zs(.8Ed퍯\k9ZC_ y}O|q4yv0ETT[ZfoO {9ef_S։waRxdw횭d_/d.& -g{Rk'\v/%0 a#2Mk^+BI\9m+>)i ^^{yDq;Wz}p` pgųSžɴgz7kL-#*ob?8PjǎxUv(O߹[=_#T癞7|3\`C*K}͙Jq,<,= rݿ>ԣL',,0pV.>M{o1OgL&8Y,[/d52^D @*@_XN帝g j") I?Mɛ}{1JNO?7:U]jӛjի"Zp/S2*c @8ϓ`hݿޙI(Ċ3)8qD>ۏ熂"JnV/٩o3qQA;*FҲ4L6QTnk*z$X=~cqU^gY2*;f4xL*~TS YΉyꎘ&TPN4]vi L<4 e @=LXBYSg!;߷jRԳow8Dv&}tSBHL֭e_Ie3ffIժ/RLJX%GmBst_v;k(7L:+WE2Rwt`/mVջ0Y`gr/}=F<9kͺ 9vR3o&J'4'h]܃rTX%n, d1Z521 t,FmY eA̋r nr-*̋0/ˬ  mleQư2,=eY8)f`_EbTQgV;M I+п0zI_Mꪕ&F2ft%'MXqh~4Um[zoS#u4K%J)_w[WAȚ"/Vؔ<xFGEfl9euco sOo./cd\ (YUT}iu}w=ysz_Zv>[c{Γnrwt[>>u}bg"]]5{3N=S:i<6 [@ 'O)!  @%aN1%w@k w= +NҦt&ouYh1[,5"{/ &AD 1f? Qrkz^~P  >-ym=>{ad=Vy~N6ӽ؝*ܗt.Q˫^OW|O,cΫ3׬1SorH#uEuk{z ZxfYNH}sfnb3=}yٕޫ*+(:% SktkhD0;Yt:ֿ~Q8wj:k~ϔ{c÷շl IeXFAe "dy: w&H9]Hu檭ηZvTmҤ OUQFz 2d~%`W|߾_^W&%RXc7q 9Y&D8f?5f9VUU/q.S:u^ߴ?jj l/nK~|Xso6?6O;̡ji\Yq?4 +ݹzaUh"L:$t99P*TZe`_Nf)% Q4FF—Wε)'Jl<:a>}-눕j"l =erdrs TSyW=Γ׹2aD!0éр$[)[@G {}"fqdO8 ꡩ 5OggS{r="V<3G8252DBA2?>H532AFDB+@@@3324@B@13DD?B44B@$cZK~6:2z^..i[S)u^rJdJU,il>@42[}}jw~EnDcvTۖeG#|ٸbr5eϺq@fL®tO{xQIg*WU*k!.R?ܨыLZrޖ&vϾH]g}?cܶ}_nwZ.ŧ/upE83:c,F,BB1 b @,,,''58;-: !mEϾ> *{}<سw?Hx9'ot(GRiݥ$e=Qp]HNi׻.faOxwI]3+9iq` %6׻I^(P6~\肩6{⫉S2U6r:d=9bT[\3VlVtG {; m)L+-no˭n)&+h0j7^7Jve[IEkKx Q Bk#K+oXB)A[J^EG]L^GkLk]>.+'?͕p! J9ԷjxDKUS&_yr؄u.S{ PYgOLjDbVUU83~v1اBq'Ʋo_3vK>}v͡rf]rp Hs~?[(*wNOu\+QՕK"TۥDtǨ@Sµ``+A\. aWZJcb#LЇmaE sj:]zMV'wvi%4$_>WWĶm釟BNg\r_ <ݗ֏[sZYb(ޝ94U N-o|2ja`*Ӯ^$F&Ԯ(:~ Agz*?>ZzFA+jE#)@ E+,z c}U;HB qw~3'j۩BVyi:]ML GZ#PPLY`vˆ6:^en8s;ޯړV6 ADf8jViEOſz--g}+̷>?$C2\j=֖ S-]~Q*|fkw X!KPdCy?lsf@1CYTʲo&H/, XgHf4HƒHKXCy6zil3)9bX5@@o0 1\ftB-R2 m9SZv`i Zhh,\7^}~^~; \dX @꫗f$oO.Gә/|KgܱMwyOO9?>i#է$ gSw?s q @0_x.O\f:9NY֟p%ϩF-#7j*c[e;,eh=L:3wDv-ƒ?NyW@߾[_S||4hpTv}/&©zv)H}@*p.7:6Y[1ځnSgǓk~yv ;vӺ2,t:̾|^}\]ɻ25SL-Gv߯۶նmS/HUdߪlH+eDF}76:zgRxX(LbA'oXU޲ rO@E{m^R_Q*(b$WN~T+|캥wݚ 3Yg+5a5% E@Mx.iƦ;ڪMեi24Mڊ[ٷɿøjMM/ /@R/\tcS yD䅋8@j/[TJڧJg,^,Mʚ%L_utk[j'&}g.^?|]4M%zm?ӧkb|{+Cm€(Xf~>jN=LƼtTpGާ]V%v^zEWO_<}m.ricF@X un@&z3KKfFIcUơmqy"q0|Zْv~g߾r/m<4.Nf;ĂW`*#8kP4wN9EȤ.7+-Iɢg$ w!N5n@ K˽"j0bDfb$7*f]59e@v;D+>ő -υWZ^aŽcY #sVd{Z榷r-q&(#uWM Έ 璫A 0 k;cO~IxykWUZmʈ1`]J+8(}" G^IB/@AϮki\?_.Md D|5>qޥWy2[ I 7~}£]aǯ =4O-$*Kv=KaL~oTTJ?UW7;_7# e?n@^[&SY~RGHu %;k^23o>e')zgiߚ_6~KRoFo˦Wo?+2v>^cSBYϾ`o eQ(Ƴ76>Zn㟋bybVM-T8@4T/kg?ۏ/9/a:^`HWUm%ILuNR ME-=C2ߥC{sY~xʥ9Tz}c_bZV螗Ecd|iOggSrL8(:3?>BEJDD558NEBA?A02314654FED35ED33429@LAD2/p0=t}cs>֊wfS`cUUU^Ԟ&8;譭fݗ6B/Gtp:u>us2tGCO<* lj%9\T1 +U2D.J#!&PzQʗ}P `@>dQ+r1 jw|oŊu#!JTE$xt Ӈ}eg鴃}8!SlKIiBs?>_/ J3O-n }EXJ.yp)_q_o~zϺWULϰ?nM#nYT&uzXmI2OO 7wn>X+|oj[W?ve4–\}C++ί]!ʔjl\K^.rM.FZmY57UOdS Uh>p}|v\ָ\}}ΚA [}w Rq17o6ޏ8{/2+Z P~:pji>Զv{s츐 c_O5T^GB&:z\}Kđw$6Zϊc޺ -d%cQ=e/|Բ<_f~;Ga㕚StwV۶}eF,ߑ[H.HE uO&-ؼxn*ymէJrZ][_+/<Ȼ4_1 SDY\.q)I[iiIyg% ie0locKY_V]%%M=?>gLVWMu(a6sw뵧5Z3u.r &n.|Y=yv?,B#wlR~+pE骱==sY%,>7 ڦV^}ʆBz$Dif{}uݚq*mW.6/)z}xs\}Wy-OG+&RϗWU`Yt5X#~_ea\IA嘫~z"v1~>6t岒ؔc%]72FK߾rLǏye}>ms?x}TZݵLTVo2 kh\9 a$Fv@8e : _Ƃ̘Ta <-S+f"+LRÝEt[o:H≡撷s8VRM[@8$O.D'Ǝ_% o N{8)53qc6x}_&& Dvن6ooo{|j=ߞb~3:7BDEQĊXUU6v.vpqL [NCN?|yOc콓`9,U|,* Xؒ ]P:ɉήbs ͓ IWmoO[Vɪ逼Y\.dNe/N6RĘ?z$Քq8*_i{D@O@K~yI픹eY;Yڛ *~u Y\xDxu/I}0I[CS;sYh j:@$n*oc34mۖ*!8SM#x~$3kUWu5NeBGZ*s^UQ=nM4U/ C?h-4 ^nɮF[į#ng7՟D*;R3UúV*,Mxzp!AZ ibއK_ ̄zq>'4W?V<.ɪӲzr L\aו)Ƌm,]YRD.贐\#O}X6Ǥ/[,&)z<,L,9e+^+S繚5"ވFѰV=䘈_U$Yf&D%>Tۻvj>q(fќD_TwZ8$Mֆt(3~f 2f+㟛zqzs*! XV;͵զYV/K~S$U><~WEv7svjjuz?ի̺>zY4)t7toҌu-,B[@|VQU6:)kD 1w0 HRh8 hX`X~cj[* Ï$[aMnU\6 hu'LX O 0)%OҺ}sYлRbUSTURi[ҡp<4})A!bSK_ o_NzfF͊Y];n'/k}Ibv^?tӵu<6;;qӲo{y{y[xO<]s;QzbLP(Ta 7Hȱ =ȠM"t@^JĨ)( #ف[7Cu5CQYǢ)..WeYe&ueWJ荞@t:L}}8E+;ty}~Ϛ+},K tvAhY]Qs*S2ĥιP#`YvJ?b5Z#)+?#Soy)ݓލc֟?f}ɬg፿4N]_vSXws3﹑@B4/l?}{GmD^zv;i݊O1T kƹ0nަjȄ-lc;r4+)^xyܹZDžr=ߧ-kN뾓<"&;8_;x`q}|~ZON]p|z}b;T>~o۠ک>*E]XBKUROUT,crk/ sko{QG5%fNH zV몵GUHE[UJSD_ 5[fR⌀<_!9 "zL(^}m+]UR $Ol#X4q 47yd_4Fᒊ˨0 Ͳ&a,WH$GL<&-8b"lR k%u:ihs-7OggSrf!2?C64/73CG*&,& -' OY! 9uh>1 z{gE I6. FLs2g {w/:(iUU-@?s1|uyѽ?C z{j*jXߋ=>̟ͯsy,.8c۳iLǾUVk2<ӑE0TϢG.l26}dZXFְJ ~ 2֔bMɝT kJ٩(,O?WN'_ɣ'2J*Sdf5{)Z?e,>ˤLϥr\>dp~.2p\&о!goG,GNc=2:_B-ȚIq΋bNgˉ|iżR*N\́g/K-r[Z^3fTWz_D,OT'[Es>,t;6XSn5!oˁY>^xu|>+ u=^zq{vh3<5xy( HP,,h2 n!\eתϺO8^gJҒ|nUl;t/Ezi5+2Uf+ ;^ѫ33*VU}wH)3zfzjI:?;/AvuA2d})Ra{귿.c8j6Mq>\jE4"$Ndìnp쬎ÝRvJ ]gX+鷨 F(Z!<جC eh6V,ZcAF*7{Q܅Kgܳפ׶60 +?Pv撎;cIa֏vI?O㥺{guL<v=RD<ƪIa}o=# vQU媪;s3sP %NyUi)JplfJ&z|$fs^,QzEhb%+őDhz~mT^G8y<2:[Mt%+VUwYzߜ|e _u^zn>XfS!\FW0Y\Ogvr]sQwޞԒQRCOgWMf݋${K]j;\;hq;% 㻐2au >b(29U0k\tSUuX~L[¶D|bߌWZ-lۣy ڸ @m$r?1ؿ /G+|4a|NJՎQǡq<~ިl+Amds]/Eʢ33\UUs?kۧз~!,-1.\v8ϟY'x^o+mNѭr/̳ލʦ澄g.Y!TΚlf;uJьZVɓ5C)u,\[/JJJ)7=-H:48` Ɩfw=R 0\Ryu鵱U.SNy# hCYwD=;XEyŵ,돾hWeWhw8eYC%B5w,5edP03)e0^`t:trUUHZ<7Ȳ*f V+Oz{\>ogrY_֋~U߻>sϭ w3߸ VUqO+S듙ayW k1|~깡BO0mkԾvH$pqqco6@aN:Dc4gX}dW)>5Zg}V ggzHY_alSm` Kk rA QrUr̯2(\DP.zq+ՆnOlG7ay\r0=?uq>@ZxGxNe/N{ţZ^dU٢pȊDFg T<28X!eJ6da `_^L*(BDZUDzv3(WdV!R{QH[8z{$3 }GWX[Dm NH"I X^ȘmMs,-fqG]4Lʒu[/f" ݳw9HԮ|aq'_Ȋ# WWe7&G.Kf9H֗ms6ն,VŲ,2=iYSie̓mTdM)yrٌ]MoӦŪl?Nq|jGq.FK cJpC!! kgFz.xo+nh8+N%%7b^+e4@ enڊ&ӈTQu>_60_,R 822}Է(?UA, ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/mov2.ogg0000644000175100001770000001124014614030313015465 0ustar00runnerdockerOggStA vorbisDOggStZ7-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggStw?KG4f5 L7<b !sEXk8T*ګKNsqiOM4 Ly<ݻ&mZiKbv,0^@}K{]'sh wXW(ںx?}nj<4e(/U?e(' ҴYbLdAw5ej]Vq|IlZ~ZW+E~IR?[ZVef*tJd#52#JEôs3GtpUU3k ![Rj(XCQ֛mȫbjlL2&D0 +Q}%e+Q2+C-FFͪv,9ƬB(FmO{S(]AY/YBю oT[Gwn9$3S a#dYy7兑_zýXZگ-mKj~,Wud{C 4~(?S+ @6d#|~\ %zYIF}7g3TRB%$.q0.LqzcqJL&W+brȔ"q(2n%l UGFf1+;88 VJwZX+Ύ &VXóSx Ve`% ;ZOVJwN՚0YS;z)OԉN|<S'>5pkիS'*~xDv﫦<3/././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/move1.ogg0000644000175100001770000000733014614030313015636 0ustar00runnerdockerOggSs/GvorbisD8OggSsda%T-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS)s| "'%!$"**(z޷tIp pWWW>GlLs<]FנaC٣kg։t\lǤ +nW2 Dӟ% Aco{j3^=Fbj|Lݓ*$H@풛TaDdfO <|DSt;4eL,ݜHJm21e#p\ c@{æ43aT3uD<ïA Vڹs;,s qB+ DzU6mJܑ;&ɭj4}Y =|赯\YVj)$/ʽ`>2Sۺ*/{VMs3ai././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/obs_end.ogg0000644000175100001770000003441314614030313016222 0ustar00runnerdockerOggSu0vorbis8OggSuV-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'R`FGHH!DD4OggSfuTHʀ#%$&$%!Є3_}g~'?N-A#fɎ9dyQEfaoFRjk&;yT&M3p*4ۃV;fO/6U+]IO!3q@9ꗟ#_ !Ct8Dn Q nMŽƣ# PJz}G%y≁lX~Ak5TXN2@X.˄B QPGmUPL[0?TZ`PC\P;*1uQLtlk}5R#o㍶<'՗Dž^Kl~m @|͖Wt:m[x6C lmEOk$ij7FF.l|:|W3H $c?{,͏R\GMWtTw j4{HZYR?WLJHCt#eG46[zWs Uo܆:+v^Úw3e8=N^N6$M0*2{tY |jdFqц7Vh ¿%FU0 Cf|gJ:#^ױ}<}@eX PZ$H[V4 CE]'fd?E{)E "OcZ}&~ёp,M @LgGQ J5#90,:ֵZeMu`ToeŽ|#P9!g&[r=Y9Q_!O2G|J̆KЏu# :GJ- nY9ft^]-ژAn޺݋`ws^yYԠ_pB3F4FڒJO'sQfAz鳙PKr=3R<W[~rm~ז`e'1-JEӛs Ԉ]-B4C D8{OU2fV]qsq++62M%1LJ<O?]㇖@կBNNWUA%K?s J4'xL| QyCKvi>)Q潙l[{K+w;5[>h6 h+Z &˦,"-mͯx] V {vt!_[Xս3tO< I.'?Hn&zEl[r@GJ`w֫icX)^ZL*f*4L9YpjR<60xvBےқDrbV@~-TY^LX9`OpH Ai;Q~Z ԭt) 7ŜzzT̠:KI6 +N ]L+Lw\uC0z/h[FD:=~ n}"J;9Vx;=e}9'_h$O$QC[mV9),فv=[+ϒ+Qk!@> ghǚ{RA_ @%Mg>rе(k5^r2[[z_]]AOLRML@طk'67',)OgA>فEX&ױԾBZ<9(fي5 ؼ-G {gb!ay:GN5}ٹqU)#L !ԭHt5XGMlv΋6[=iee*7} td34MYԛ#Y+@ȼ{P{$͚3Xx_Mo~NY0ӓˊ[B&KDPqer.JhKܯӓmkc8"~ kOo~.r^l[L4fH1 M&{X6\%, liG.$ Lb7$4} 7$=^7׼<*3d%T'a%4 R=MZ{"Mĺ[mm^;bՙ^%qgq$+9fβ jH 37sW2k lGa cs'lv4TlKe2YxB R+_ {v^aڲ! vvdF% Nbj|ط1߯iףu2;#K,7YdgEaG[u[mZc^L?31l)B5q@b'c<>kG]R^HG.7l%$֑ր g0dd /%^\Ğ(HP{Wڐ " ;cKo oѵأv=ZD"nlypM ^6m;ʴ*pMӿkVvDJJoR${ z=`>jW/ =۱EwHrH[,VܦJωTFZ )hy0DQYkLo(@0ѿMVUy=3koo;:{U(W8bhOu-~loqakSb mh5W[szЙ3 $ng'oͶ2.96C+ %BJNWڛ"kVqaXfvs:dū^ALj G3#fڽҳOggSu+%^\L 8"S$@v̫3:Zc?"#>t8z/܆ t!|YGti@cb'М߁)p\*i%b)z3]Нa:3  Z6LHv:?k4rA9iŖo7&rBY^%d//jCbk1p.W<l}>bWY:k$C*.?O|} -%6H\9E^> vMF,ɖĈ+| KiҹIurqԤ}3R121qW;Xmp y m} dmݫ@H- Q|Qc E oS~~h?cBA1!$G@D3zԯ#5 "U yvݸ}&,>>IRAKډ_g& r2t)d%Co?̍9Eoul"^1":Rۖm Hϧ5AΗKO<9נ;Kxge@1xLxZ J+*R9Ꞷ%n:!漄KO`_qAQK; +څzJA'*-&D½ފ,ӄ@y22A–CTBO)=dkq X~):bߡE2 $ }F>]´JByi{ EM7++8 [jo#(2̭~kZD2LCF@jB>fRNC Tq TFO 'T_cX3p%ͪF? `e[^%8W^B|{UB٪HwNI(;g݊V7Sڃ1l=~GT m%DGH뽴,,riPxM(6p8hc 3#V:O>wN O^#~^Qj'p@R5 ( p0= t>Zm-kWv%c'%PdG 'ȨQ_#{cKW?{6ENNyhk4KvZV^Q^3y+J fxcn eX4F> y1v/w ].XjDCŘd#kw՞~Զpqh@@vƃVE '>gLUb脚ݕ?Z*) b~省Lv ,FTHs  ,LMͭM='^i{f{?gKǒ?q~&Tx>*hobleTj H0jpo49&;FP ٘/H1n;&v7sዼ^z¡2~/FLѨ`&$Nf ]69jwyIxK~uEnW+bw۳EUŎ(c7kt \64wcG4FNL׹1oŗh-FumȄZ,/ $`QBl!"пOl}eOEXNTX z F\~ű;ke+ =z _\Ce=AoG*l`w/x^1&`}Ñۅm?r%.<4ocbuyb H-Sɢ~{^a~׶(AŒ `N"_OnJ I|zL_#lx*@VԨS\60z-h3uQY i2^|񛿱6^OJsm%C H і,mgHq1~:ɜ66wZ {Zi+gk% ǃ"lazCg8MP?^IJ_h,d#ҫ@Ӊf4=  ?e-k92œГLْ+36}, H*rb {Y5WެiTj  @ASlDWY:`ԊV+8G\NptaaS}z1TMn.Ӄ+{,ήӔUL^^ n|NMd(*yK+xK';ݤܸU>tZNXȆ;ކXni% -' 0LnZ7C{^_AMܿsԈ#5 ]m@+PNB-K (޵ z-yk85IX,ECGTꪔ/PF XAv\BvMa[,X8Ycl[!#sEml٫sEvSmrُ`fn_kdeA68O53mNQ1 "//vjs%7[Ii"X7#df%znʜF^ !c:ϡmIf$3*2#4űgX-BC_Y Ԗ +k#&{YoUxawǯp>NZyXs-~ ؤYY8e̲k/xz"n\W9'4YP}˴uOuU,ƥ$!ĶdJZk&J Ʉ*c!_Ƿȡ:?jI;Q-yqm|pٖÒ͐#UmnO}[oF|'SaZ\"p/o[~@vxrO 3iJeR]NE0 "w}#v(D1=fh5¤ j[Վ/,"$8bDe{a_ AfZ&k:[olfo{Fmw޵,.6VPdیyriZ2 g_2. `j6b#Җ:%S*'f1O%f7&` YgD8ì"Πu$aꔾؕL^у6ED3Gk@9i%W h^\> vt2o3f3<98D˯S\ en'zX;(*˪Y%LEZ {66(<`qՑ_^w$~sa;nU[f"0 hG>u,sysE׊NxC79@f+li=r^WD^4 ^mo 4rMaNbwo]CKĭHl'fk#SR^+UGzKxG둃O3αa$CWsh}gbR[wwM3_G#uH8=e) H0Qp^U}f{8lF'1"w#u܄qnnKA3{ɧk'MfSH=r *MODj2#v*K9߄#QAw HSd7X/.J޵ܚEz>5Jp1sEIjrtl~w˩:qo3Ҁ  rbGҁ/vF\x&…ǩ=ΚGJa`☙n_\}"5Oomd9$QʒI8弖vԊǦ z>tSNзi5oIH *n@aAM.g8rYec3Qw$N9Z %>/˄Vު4B#/w n6*3J dGDՉڶA=Ve!4\ҙ|V<_sc@0%* \=s4wkX*6(ZHk8=DrSgGG^AFseŌFs&IY~-Gkׯ67+2?"2fcnN=#y#V{*kEM/pXYX$G Mxay JbjєcMQT`h{ۍFj«|6G4b7^!Tpf:^]3^NzK?+jҶ|c\RAXVXέV9ښ,[4fh^|Iz>4iԊ^  "su;qF^r<8~~ Y#(j2HjXEtHV,TEM$?SYKX/  h"w.5><9qۆٚcKVY ЯQWE:~g}O1ڻ8r| ޵X ʼ>dVC:݉ZAA) E`12?{+LWT= w8=IKۮlmgn# W>7 !W+TSY:G1ýD?m qE{ޫ7t܇^x-#6K wf/#US+nyˁ㈱*#:TQ󇊶#-o,XJj xq G-Y~X+2ϱ)3pEҎ\,Д(&[lURXk޵\[2_GVR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSvMPK(#Ba3T`365)eH\w : xS^&^ښ3m!i|S4 -ẘg$H )PljUQnʈ&'q7ؼe01EY_~|}h=qYyR/r|UQ_c}<&!UJ^٪J7P޾+*@IbF1$ގ#;vWϵZqo?+]]]U*,^W[:HTLïw]a Va4$jz~>9]4_9ke)wόSU"p>A̰8?^3:دb@E\ѳ)"TȓRyYaT_+-_}iݑ2xsʢG4di}Lyg:c9Xi亣XEV7. qA8+>'+vf8YZd cs˲c*/nѾz*>,[/^DRA`M|_%mLW`Є Y#7M'J ̑L;v.t&M%Pտ'ǕZ&CLʎ *:tQJ#Zoqy榚N~|Q ]5esOՂcIѱ(ӛk˒;j=aVbxO[K <]Y2igј#ۛ:Tpm۪8Hcad[~?DRPAmۆhZ[1_ #ۤ ?'ЭMh^\jB^A" PG0\GF秫@$tfE5 U_3]6F~Ês >:*-) Ǜ)=9ƒO$~أs}]G}lfES>=x_h galatj_!UQB|}3PiQ!:[y` >E^HLڃUC!JduB 5hrMڻdfDM U?E5a5~:UUytՑJ{ϻ}ËgփsL0L4}[x_?a+9a䣜ڏQgjla Il\PK)<{CGKz"IRT|x56Kuj9JٯᲭNOy}|C/"zʠ  aS^D/޸9ۃE̮>3jUVUYYЫM*{ڗ;.kwa}əL\м RQ)w{S}īE|I-+'eYz,< !$My2–~^X>fm$(=B~#;̌2#U mn{oVWܻڧ{?UwcZX۬9pzzLIBav|3Zf1Luq4sxOM =y^Ȥ{׳k4UL>W9q溯u6K7if"+M/+\F d{UHO_OMNge=9eOx T8L;VɒTR)mE././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/start1.ogg0000644000175100001770000003130214614030313016021 0ustar00runnerdockerOggSw !vorbis"VOggSw,A-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳uXڸ|BQfX y BG(o[||tqeK<ȊL>,Zƃ3||6cج<{r >[N{)u!S׉}GG߱=y) ᣈ))+h2Ĉ>EY# DSi&A㊱ɯ>Qz 6BMO4jiQ3>Kc7?)Oe*faьӵ%xi O7Eg!Ұ,OGI:Rp̍ZN_\_yR~tش:X.y:n~ppC:ɡyll׉FcV-еjQL g'1ZBt8$II_.`4 1-s3HI |4"qS5z` jEe'rK.S>cFʳ-+@LGNXRVltҮ4R. .vv$)m՟K.4܂{ 5sf k|tUx}FSPG<=4QxC,8 W_߽*8:AoIDPD].yoO;ȃo}HCǵ|>M?Jssklwn]%4L> 4 7K#w  (Lx2hj0Th_._='ϣ$$)w[ѥM?Ԧ!֍0GgLZDCm+~8ؽYsKV $({㯽0NЭ?dKqi;]Y*r9T\ D;3@imէk-{hB!C=#~@|lbϔb. ?>/S]q;Jf*yr?YMmȐPa-}~?{,3 &6GjA"\F ~v`,kmw8iK#[m.7{*XDsRP5'u_ r& Ev9kIl˦" 4;)£\#P] %||8I O5;[2jxݻۆðWBZUV^*46Hxf$:CIe޵.F>;i!Mjb]y5㶯i sn3Lk}>4Vxa 9|!EIjN oAP{(QD"<9/|s̪"ư@G3$>N£֨\{t簾J59lMslDd0o@2؝?-'\3i凉l$JiQE)Ics,AȂ:}}8rxKN$kX4 ҲA޿c EzcirW#?;Ye9OlVJ949b%ht3ⓑP䂝o}8s L#DQ@Me?l?ʻCw>5wZR: Vm: Q*JϲrrNd;ĬqPv4;__71uHZ\/+ 'x|YDG6*~w$ʹEws0X3Uٟb~U&GOL9@4_>]3qtGc1=X~1qbbst WK[A2isbUP=M=q˱wN*{W!o&)4; XG>'.&הCW\L׈O dI9f} #zOʱy+B#Cnun^"sȠs774=uJʕ䉏CPӟjmʽԝ9'I,cUSkc8Z `.Xdr Kaii۾Ja:ADQz@,xX';ƾ9}Nge cCr@G֫:SGV᜖,A@۸T0+?;  L4%ǭWG> C<3lB/nnL*(䃳gLBu&((T \qd@3j=Q_bG8>: bh7 q/J) x]k⧋z/u: ?JgirLNQ8)TȂ'&>2IؽzXjfYN0ԙ,75Q{+A{K?tfek]Kմ$<_Rbď ?̓9H[OZܓ{3TGu-Z?w^x5Fܮ}aFupnhqǣF}>0[ƖO]׾'J;k$TO>plKsF JocB*1j_AbO$cb:u!XNN?C= O8fjxlutM M18f.&t2L0P-0Cq4S# F vNtx]ckt2Νѥ!B{S,\kſ:No5󻁟4]b&xh^ v4l|b-=>ogX~>Xv6A7Mw8ElUDW MA3My2|a%Giw͋bZ*f¹Nd- u!ޣ"ǀŏRt*9dG3$X(b1﯄'H[?:5={5onףQ_xgW}NVэK@$P?=t^\ADGRoůGlƯGs?⁍ S=-E}.&DyuR)/JDPk>#~;ddqҤr7J\ã|ۤVkth?Qk#Emϧǎ.t1H]أ,3牬A"+A}N{$x$9G tp/VpGj{GdZ^Sr2b-^2EkX^6)m='D6&\N 9(0Iڌ3\ NC32Qvm\Σr;Y=kpODkl'Zc|ݞ5i"eei/\ bҩoKt;`T/ WnOH>R\JT[v>t|CY!4E$3M? 1: ɼ߲ħ/7 ,6@BXA3X"O))o"<ǝۑyϭ8s: A],Iv 9Ѳnn1L/j-<&:O];$KpHyiQ]$Z>l+M<8QZH v\kʇڿƃ}m%AWIXA ׅA3~<B16CD(̂sfAHAdvї P6n{4š ORѝkz],}O!@ 5=ax#!-Q0or0 0= Sk;4ϗ&a-!i6zY47S3 G o7@;Y da6勷$k8UR0?Vx _}W? ]O-j1IlN/9L6tF (~^BR} Ae0[W%5cl>,Z6@A%ӥe/3:FYTr`7DK,C[&Xgz 5ecСݒ?%ñiv> x@Zl&a|\/mgs/ !}d0ymȍ̞ݟ@& <’\X,s_'4{nmv-OWvcYڴ,vZ2ԊKwH)j>F|>|d3!xt")u?zW0!?Oc1:,p,^:e=Hj(MJq09[RƧuht.y<}wTM$ kޥaPߏyE,;6-Gs2kosWG3%:ׇ8l~02ΟcC|t?>_>UhKn90*qViO:64AuT%Pʎq$^N6럯BHb8.p!y 1oGE=G' /ec@8-烟}89^<.&`-2]_UESČ+C+6Ñr"M-'pؘI,jh)qmĶL͕0^RcC=>9T]X<_$R9ï{3 ̦ /nԵL7,-qK|o啚6]^|y:m9}1^NC1LR2MtMmlVg;Wk,]{ r{ ?74X3'=m Rh;_XZI a͇ Xۊt1rOda!'?ay pƧ)̏%+UtIN.W`<kDkE'ꬕ~ q.aN06by]Qt74@~ *6^?+H.}`6B9/R~G x=:lj 7\Cۜ;k{Zlg r:mSYS_(Ӊ~76ѮzM:G-ĭs9H0G#u }"Q˩kikl'=L H4'kPqpפvu<'_f31jP3kbQD򖺾g^26#ub ݡ=f0Xj\X"adv?Ig[GeQڡSxgCJmiI"f^N͐s7~ 4/u`e_*#"1Ωo}?,]2ysv:ޭWZLX qt\ 5Bkﻎ+pw4mowUfY G:֫sVTc9>{R^Wוh [d } .Oʲzu2j3rr]/Q3<&rHkC^ض=%v_vCEC!޾YƺZITrW j7j8-6̼1h׷0S*`\,ʱ,|0anEWPsyGlFs3__^ZtA[ٍ=gr[фd۝\-KU1G:`!P\5k&\?Mw^Ȥ~}Bkur(/--B}ׯ;h"U'$Xr*H-gA!aV_GAf 3uEIXaRtpr糎7ij[}Oѥ8M) (ɧ9WeAbqFo7d'<2/ Vs0jq.XA#;ƺkrRgp\-Ī4x…V)D@XݓY瞮>q/U pY d()! D ^+-UZj_,>f7jM!cW{utF?l15NQ:B.&'z%_v Cn%,GzQVM^X^)ͨ 6/f3JSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS"xϭ475GB88788GJFCDKHB69779FCKQ/>:LFA?IKD7:877DB@KDIMkLgo~+0@9pTg)~8B&`W>1ܟ-1UG_A P B\|ܚϿ#̅տR!Cc}c~Exo=88RE4K.w/S`vБeSJɭvĠ8Ġx^ooq: rɵN6_5uM)‰Q((=_^6pTVꝻ}r|q9߾>ds°٘¸/.PNjC'&s49߿miGWtP/ZIJ¥j[Los96Pn0vwL[BOHgd;@-||!/s>o}.v3bT} „vaIW/*F"=ҏ%gO2 2L7o;6=c Ĭ&fmO tq.ഩuzB#Co}qpf?7#SJy-,;1-[Q7ܿ!/h[?˗޺5?~9眙>9a{=2D[{w~?wNHWWkiOOb}jN_X[Cnw00[G~?-w}ƵjZJnGCԾ ;tۯo g>;7o!֗e_O^GMk¬ yP( 02 n9 E?̇lGs׃SK)WWx@O:!?͛?X ! _;e_Q~8kO=};=E=oQ7r9Wx"?y~P9O_A Q2xй>VFRa?8|! \Zo.x:MS gʆBw)? t͐d-&4'$usyK;)c)30gc} ccNg`"O'8拝wcaRƦœ^bI_.Gƶ_Onwr=րah}o/?no{tVP<V~ߞ|F*ӕWO{;(/yJX+χ}d6[ú{^7;//֗A1DҾ)|ɨS"Iʺ@~ -𧏥r4_f|??0> ϧ9=y}Z%}f07 #|4CB]~_u_g][}i|jJ"j۪)%9$O"v$ʦ; ЂoקO_?~SNjϚcщ`"TUU-;3ߩ_'ռtvztwb٧g=Lag1vP;s};3=Xw~ijzLpېտoޘ mf8ܘ͙\pibx#ۖ$c}dv7XBX-C8>OɊЪU0;h޶ sZcw>}E:ev?;ie$Y\ʣ]GRY2ETW2[-G+ϙ-Q&edӶ]sxEi&&M}`~~ ?>3_9 <Zٿ91|4wbH")=b#4%U؉,r')N4:da#'A9@M=6>M~{]6vpy$4?H[cG'lM7ͷ MPĢYNjێquuuu5Zczxk.~cc˓mǦpOrs{b99|9v~L3Lyis6l[q࿏:o|+8s876f|5eϙq''G7{ϐw`;}ۛ˜`ngS.0 i )F0Ż|)Y5F(PIVL j6_H \tR^}|=$do~h>ٿY\ҫ ǝ{K;- Zq H۶q7Pt͛[~`? Zc? p`OyϪ4[k-Z? i-mwN8x9?C nX*V.paQ$W+>3翺z{T\n}/S5ߜLyv}2jrτq¸.q Jo!@bͳ[oWSuw"3_wMhz'lB+ =9 FV 3^r YϗqS1TʉϏ jϢJW-TW+@ zcQ]]jp(n`89eW7y/nɬӋT=_mJkGDoU8Wo~;!vWvc _9?V&W>S)cK=3UWd q7s /}p>;8|fnM?l_#pM5HtP i^~Mzޟ WkN.:@c. TEl[ wNo!-# ~fȑ”So~oN{y;髧$]&XYB/K)_ fྛsn[W_y>{Ю|_G*C[!|?0D?qw#V+5 _y-uBjQIN*œ^Ǹ@}7q$e UcWM7?p|2~o?K _ֵqcoœߨ6mW= yc0.k^?,1{ϗFW T\WIU ō(ƹ*rߧ[^?sV\`l+OnZ?_>|έ8?e맭|ʯJ5ULfMQNl B1oޛ^UL6 [w@RFJ[ G꫎m@ðw~i31CtǿOj`/>[Tr5Sqi_~ 3pƧ:;m+ᇤ{7 slgI"DR_)f2Y#:zv`D YvDʘIT|V[Ofܴ~ss/ۭ<)*Zg,a㾕c! 0cſS:E#~ou+uŸ%VS.ɯ My#z;YY ]oɓEQoN>󚼟ʁᅮTp쳁>{Ϸ>Mim|NN8}ɀq|kK]-)XrOggSJxr 3Q@37668DGNKFKBI88729EBIK0>8OHADEKE57659GBEH4LMd`苬[ƀ ҍi+;ifx e!TZZIJ;WouLo^$" EgE~fK@?Hmfh )X47[Mcܔ8̜QN {*Dѽגb;:8M9=)_1?4dbfn}iϜ=?fp6쳡⫫a}o}9-&':ty5w/e(&h]𨷚l@둇J;dcв^Yl2n Mfm6t`@%qY o"@.~C1ˁ<+7\̵|?透ϯ`Y_=n/ Bk/R&Z+{bbt0|M1gZJu Bk jY G3 Щ}q?_ Lf4Xݸv{^K"LJ7_sӷ?l÷op˩9ȪJvaĩ'R-NvxұmpnKkI: b~#Ħ;HclP)pٗ_Ͻ^n޻y1~Uw3SYɟs?$kn]]pl3-mO.u<o߿}o~嫛SZ\\\\\\\\5!?tdj9}_Vסm0TIRWm!N¨ bzί>x0>[3|76F֦[淧@ݧko4w%QU깕$%Ymyj$)a%p#  0 !߼?Os/}o. d*7^ :$N5&/11_jXz:c^tyzzf}}o WN[MTB9+rUZo$Zoap~{uNS\"M<1oZsW,"l)A{ \߾mgd9׷'OqɜF6Ŀա{si܃-毯lc:V -Zroo7g>?4.w3x*p w7Vm-ϛ},xjR_f)m#w Cݳޜ8{`<8LnVr*E~vk!4zZv=}Dd#;JЂdߧOW;~qr?>ݳuy֚#YrW%{V;uH||fnq_=)}ޞ+!ϷTȼ5y{3{+YӨh7ow'Ǩl ېS0|}(\r/<{~+η};j9\)Hbz^U12VJ忖LNH K?ˀQ7WkVŀcmۜێN'?*A.s|QU%e)]&ar{QDy2o{ C/FCsr\o`-edWUU|v-_M'ImlƚtOּ9[3n_n9nN3<||A2Ni|8͞glo gw>} |wǾw8?pSl[l>gtSoQBnHׄ{jDDv:^tt6{xs0.'gstpI~ٯ!Vrף$ϗŝ$ @!ܑLxQo[-''';ժ~}53_??UaSjk4Uk5Uܿ`t(/E oi?8X!D6w_'/N_ c9zT,S˔zEl\]2upknwn[O>CI+:F{7) D!ZЛmg?fn1L0spvk]Ӄ1^7ynM¨,<Oj#cKw^o1[;'֟@0`Meu&?nE4MO 8B0T3I8iwf/?}K-J_IMv]Gasiop^eCC_:ms_|ŭUs>⫳柗~)Uv92%WS8 O&T unMMGHȗ՟R^p) 7%c&s=}#߾G`u:= mLΝ{&y|J9r.:os'sf@n*f{X(+o~rR{r1H=RZ!o` }y5i_n' _y&W9!h€?p ԝSW ןA;|˟gRzF[%] B}X e`{7vO)>o.~P-uyȟW% v~芪'LJht]; ^:6R}}罊m_y}j}ghZmwcy/T 5\vSe֕^2ݗz>?>5Eu?^&? *J5ըz1_Ո-*\G_\^T ;4Wvbԫ} u_klt+%a>9~;{kAGMWDjN :ofżx;_߅5{cB?H9D.Biz္zZ!cXHSk<;OFZns?UέD@7_URW^ }˶JT>ZvQ(Po3N;~L*f '훛߿l_~:utii>q6XcS/>}Xg;Lnw8qײ^[<]KVrQiE|έ?OP?ޘnMs?c:廊/@QRuQY}tmr&O =j߾?ׯ?z+}6=goŮ6ߜ0u['~NEG'j}>{V'΁8^]~mٲBKy!uHBr XB(|jpI张G31m0B(*9-KrR]|`7f5^4>^W@GHq?;}1O7| f1lxgpp@@ MDǞ[-3?ә?_u2B KT͝;l x8hw U!g#43na@^]ņ/g7ν_q3pJW0i@l'~"l;rA@~ƍlOܸo>|zۏ>#zU@,G|?|lՈW_)ok SϕŴU&zlBP-hq"³gO~3޿7t&`ijpw_կY/^0Z(ec" ]?8+*P˶Eiɧė8491bMo2{oR3BO =9~6ͷ<6;T4:}櫧e:x:ֻ|Sڤ?%lša }4 LwzO|?s*`vNj,ۤZO$Xi~q,:ι&;^6Nӄӂ , 9- e@f"x@Rv{ 561~|8PTO+G *X=l3.) i-}(|| ԃJnߋ7&u*ol[̷|N}- oK'&-h` =7ƻ1\q(pA 7X^~Օ.+*hX^ܺEMqھv$U|ԍeNr;o雲4O|]Z:fŋ__lJy жB AoL$~ J_ KxV6x8Xx% 藗 ŭ w7g`z/ T`;ٗ;?˝+8,_7ȲTڤ~M>oj/պ4"2Xt"%qnˀD-0!Zɶ1iv|ot:xSz9@oEgo^sFs9F˚5W;7~Sȭ{=m/#ZuLm44<߼5o7<Ӝ9 Y\'Z̗i-0zm:#\K:kAM@4 : aآ-Ң`EC4DjvTCGCP?4?:~4!e$%#k^u$%=)~ ]PpRo GeX';WUi>9mۃF:7L"svE{rRڶk_/̷}`if}yibĜΡs㜷霙sf|cvv}߻aρ}^-2i*;>9|S䞁[srO {sh )[S˲"J}"0ckkvcE 3a`?ZQ$$#vF z60#-M#>vl}&6>X_#eǣ&A۩~{Gs (sSO0;,b*Foit{z:IK'^lU>ᇹ\voہ/6ܦyf疧?3g.ρ8o96߁!9}۞nWTf'p9 ;{[1S9`}d A`[Ԓ [%>X%W w#q==$d>ZHDnM(ۡsew w~zXo{v7\]" pɚ?pw~3>ͲX@Ri*OߦޥBE,1c@ ewJ5ҳw?Z󭯾՟$@?^ A$L]8O_tRZu3{nrLL[odjo=_kG4M2Mѿ/.G8~_wsg+ tBh U)LoaO7 ,#7KygC0XW,+oh_FOF筇|bhD91{QviUDkҪ}SW ,lpmp}!sATiz'^FIimD^kܾF珛[I- llNɁ^7=8Ϸ s~F*4G%M)53}QЋ3*Ai` 8 ^jn.6c,>>]'>9UOƿNfG utSR-=o\_G/U?o^#7+ȯg\Un"h u-jv^5)B@/QgƶS-UxAgr=//0,csϖ&̏Bɧ{T[QRVﷱ}Bı=-7ԑAj{xzE6|&6[=I[c9gUcN7 0 />1*"!O1ۯ׻{aH wai&CF`[6]J(Ky[K@[^O*ZO%OggSćx.q#HC:GEHBBMGL8<:77:9EFBHKG8@EJ4AID8Ą\ȯ/@ۡh:{ofO!_>~?4uv~VŁ艓1I+UMbd2bv=\D޸aw YmLpVXL> kGxi<ƫm* D+~\žg6ReF?)x3irzR⫲ !UQ N{^G_jA⇊aX_mҧ>y!k<TO}JD4]דxwLk~'";qh/u`\'p{Hlvx0~z{$D_]fbLϓw=7$sܲR;'nߙh9Zp];HzK4Vڻ[okboǕurs>sV_'Bq9tZVġ}=qDwtgy0zNU8}gW=9+ﬠFwTB7yz}VK{˜ "bؗyxZ{_-p*iNZ_oM S4+ID_ =K"u9'-{(OQ->SÇe+wQo?}2Rްg,u$t$,SmK)ǎ$ן0&v(í.|YQ|K\x^z.!5laNsv}:ď_c<:1ۣ-~@7WBΜP?a};Q_Ι`]>{:$:&͟.??.gPfbOY{7uzp A$?27rRy$UU#A8`!-p21.b03FH@ɪ@='Td?f0D2΁A[,_5~ސGWeN !Zu%{.繪6¸w}\*S}ݯrS@E?Ξ?_߫PzYӕ})lC~hv9yvPL3P|}p ?~ u1ܾmpW;V,c@+ ')2:>EgNOL [?[<[oo~9f~Y_{|S"kC[ Z;Xzߩ7ay:\ޢ+ߨ9nk²?X>{/Vwܜ׿׼՟KOȱnB_xj|wLBf^z7ɯ޾1EY\|m<|HZ Wp._+<se{~4p8JnN,FS DGJ9W~Pټ]K }>Z%MX~h;VVݏcnbr}Rxq;JjN.ladQO37[̝}OۆyLr?~|S&WUd)UXWl7Yf< H};T U_gӜk_J~{̃ w# yU"Y@8†QwU탮9o}1.?.o$5TF3moVDc)qexLɒڬ|v"{?/FY,$wx{і9s?n+^ Pe!W`#/}3:8 Řٟ~?f+AxJX(i_ƥh?d]j, 4g=$>~<;vjC=WIY^;k-/Qk;&'/CWc?X{;TW8wy|ͷǷ|㧇LJTjRB Ϗ/p]6ӣ\Y1*VX]6~g}QYuyy뺯;8eYUYY}}V9~8+  }o_k}}8C,.....<_^^^^^<^^^^^^^^4 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/success.ogg0000644000175100001770000005421614614030313016264 0ustar00runnerdockerOggS#6Mm1cvorbisD0OggS#6MLfb<vorbis,Xiph.Org libVorbis I 20150105 (⛄⛄⛄⛄)vorbis+BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNPRT@OggS#6Ma!Vkdh |j'v+|X7iujhEc~OXk_[ glYiT&;q^E}MS59lcl+^R+ܗn~R\|&5<'MNrƖe۶G =(lxDѣSyVL΃왦] /,pk8z@>k>8H< ML Z3OwO8J:0 \}oT6kQ\w47vV{PA0CI:$ڶ5בŞg-2tG+HurVqg6L G1JBSR~b@% 'Yaqa6DOϻD"Awi⿅;z}khᯯQ>HqBeTpY>H#Q z~= 2HG>?#`v um (PtLHغ':PB.$ &o0M"P>xf;/PML8o/3|Yuٴ2H.^}]6hVLqh$Ty4ۭcD9MSYq)ѵisHՀΝڙp J B¦ x̀A@4ӌ6HB<8?s,)`XTgĀ} G[Pke^f'W ./(obqjR˻v(FCRĬ6M@O_=X6S)y04%X-:!*@H]8b>ToM|!O{ɄpLrNĈ%?/f;;@EJ 48D0RX9y.x@HQ !@lUttXl#@p @dy:tt x&!B4^xU. IpH& _5[-)40a+x\ ˕ BVf+ȹrH"OgXiPK D`MO q9T]|nxP޺j bG4Rm}3ǟS@L)BZ<;rqXjr%B@RABw$?lcB o#y;PT?Wp ~Htə-L _-nyro1X\ T'`9Iძ1ZL>DpYq@QOg8*H <,ha RWz ̂; 10&T ` {Uzn@CaЉJ 3<@62!0b4= Xp"Xr,z yty$ _VEt;>%)$oRHL?}Β'΍I#f~x\l( Dc`чޤ7 @T~~d+Hp΁ 8R0H:nk!-$*"x'@?]3]ybwpP ~(&dv2xE =4ɲ8d5X,OΆ/7L p S}$0 @p^M` & HXH8ϝ\)a OM![SN4{㜩N|7m0xJ6=]+n pa7mmt(M0 I%1<%0 ҊAiHӔ ;p 4 @q)`Ҍyzx b@C#;ڕ !Rm @Pn2-w]ڪƔۙf 6w+Vm\ZL)g2敭vRVs_dY,ո*y زʳ&E3/[ }̭J\ 71>]&Xz+5bBS,%6O/iOH8Ȧ>v3J6rxuwo6|fIu-{I (#$m6F8 D- `˂/pm@<ԗXJ Q]SAb̭T-B/oht^|`/ qL3UO렎>6/eGbהlC e?_8N Y; mDp "QV  #4r`xhr.M|^p *  #z@UfR@P|$66 8)Ax@ud@W To}/KבC*BUYꔺa 7e42q.n {2nܨ?g Aq˘DT 16" pbHugRK<r`';mhh[D{]iхNTTx9חx 8Pn (+H(P;*tC=i-ћP / XjH ),591za0m` *:0.Q׀M@.D0t*h@@4Qp+P@{xaM"p @ ie  `A*Cx88`l p&ʖL$1@ XMPNb@p RfWAAk~ 86oE@cVpAu6ˏ,65 p0\P d.9@+`$L$F ?  @,+vz@~Hۓ$L5aեrwpT6~xҿK+C"XoǍ $\wIـ <`= C"Ŝ@f:露~>(/o9qwL@K5B9X p*t (bBێPT B@.@f2@B HF:Pm+"(n𶈪"!c}_+Qr׋%y tp9`pz9 yJt0؍ C ^H[l:Ujvp\p_ 7~|*࿯2@-c  >C(`K[?ājs88d5(,@@ ;#0JkWcu;L k YZ88 N;X$pHa@C Gr@B0@ڿ0MKQc@VK4 x\E` 0 Dub85T@yB@s _ ;ݽxADivQ7@"038`~7=Q&pq OM-wB0^8;S4/,ra}'8 +#$8tp%+Y*]+T3:@$QWa@Oi (tO=' s J>`(^$ < 0 pPy B@ 4}QPk`bPB R8 a6C tXl&c=A.3€p.B . 4 @ټh("^ *(BY3_Q_bhAwσ@` q b '*Js\N 񝹚DxaG 3sd1/͊ '[SteT/=X,- o.g 0 ضjFR@ x0gbm'p ,q+_@=:\ '7 @PDhr4rm uU ,I@``@@ ]DlJ @ .6 @0 4pK<@]" ,%  mG )bqRt? "(b9 &O3;T8 |  ,4?6s0pMMeVA " 0K">;V5h, 0H{x XX@^2R8^$`i ( ( 2tw,l@DgzXq3l x qq6@j1i([@XB] Pۅl'_~%L$V`Ns `@}< p @ҡHy. \CQ{Q1'zV+).30YHAߍ{h#J:cc&|?3B0 M1`'OggSk#6M^ (۽R-_~?\Nc%{ R/ Hx,ZPW e) ͗F^ vFX2OwZ#o wWR坖JSK qɋF9CݬLdwhAPYa:=h_ 6ЋA= TnQ0eq]8?D @*m<+ `0%IA 4)@!/ bTf0!b]f(Z\A ǀv`(`V+@D~ H{JNDFi8RQ6d >;-,H;e&3H#ng淝" x9OWrr"yǃ#>)NA@ B@@_c@/`1aB} i0i=y6AxKr{?U,&{ொ PW +w @R`fA9 Ibnk@ |k}q`3i@@ "4#X`QO?8`7 Ba)v.7DP0*j5  PM @ m@E=zYUgrS=]seƀtI `8[j$ a 0樅@,U@XE>1`w43oS   W~lra=1/#Zv`@$\DC;n_:^3,>'Ƴ8^q..P?/.gyxPo܀ hcp,,[@H _(@ 'K]SA%6E@`q*?[qqlspM0JUy௉+@; p0K{.A .xS `iF u?^ߋ@k(c@pY7cm"  I$D;\pG0gAw ~_p0 y6dR4sc!-@ݏv ג & qldF'[}KǦ}ůe~nPYw3H 4v6p F(?و@ S ED0U p /|q)pBn)͕PsMp'Hm U{ =a HxZE]!ݒ?  4zH ٍBP[L@pK PDd'0yYY):S +@èjm} ogu@%u (0D;82@`4@ Hg; xG&?i &^"t۹,~7'L}a.zx { pr\x ,i` `^ A { K `­2?"`]bjneT `v4`fG S1: BB MD ,<)xЮlPG4cJFJ)0T`8 `Ӽdx}'0z0`?~]Sz۽:.s?wDW^5|"!(` F g8@ ``$a# ;u_ պqt#KA';R>b/^"0Nrv|`9~e>&  7rAD` -@TY `#K9`Uj- m+FPnzXT6U/ޖ*ʻ:FHH0cs0T p8u=l, d1Qdf΍i21XtElWk %F<';}^~.Pd]x{OxSߕoK\~ x? 8Z$xl.@1xBPlD: g0"y7DgZEMg;Y W PFn0D 8ܽ"A @H1ҐUkBFD`p)w ^7[Md|^~@Eb _x Jd_TxX@u%$@} yA*@ة24RW*p%p:"@x`DEh9 : N. c@.1 LsT1@A{Ƒ+)uv9P9a? ^D^vZ]Zj5> E @]d` UbC ?'PJ 4 Y ^8S52111@h[iu- FE*~7kL?Д/]c?^_x~L؃~>7ta@ad#(@ (p0 |>Q!}<>ĝg 0(ri5# vOEk0t ob9wo`^0œC@8 !&MX ]1՘|/D0('nu<: z^ֵEDfS rH8o>`< @s<1:H4No~" \"H 8 7QGځZ1bkq_=b9ID#p~T: $Yv~7;{BzWXCXH:K@`80`.'w##;FGZ7J#B=n)nQ@ XiX/K"@6]|Ī-x~*~&~r,C<?0\{ _x +@RIg_e!h )=$1 =jc 1Ur^p9c4XlgRx4L:@0 ,P M莀 0n@ sHhNAP9ZvUm$hUN>T*}xH|֏iUsHϦ<x_8`$?8b)i)\/t%2D`7jp3Jglf=KPZ/1Srrn6[M\CY՘9$[9T=nd4< pPsJb񇥑P  5Pd6I NqA ׆Wp*Z&!@["RH6@p+ = b  u{aIpGb @bCP3yJ%3F &Xn&0`n7o`(X74$m@@``3u@g+QE\y=FkQxxպ ԇWP'Á!P + 8X?K\YWԳ95acnF9 rB/ jlp.#6;bd}Z5?P9_eX ~,0p"]o |I;@9SA|pS ZJP1[ OY`: xY Hh 6h $p@L( P0bԫZx+p@l$XE+vǻVOkPb|}  *ޯ|'@]v<+o'T 1`^_  CF3T 1ı\1cϷHl D.˜$݄9,~l&K(3Q,[&ND[\@z$*6[S}URpxP?>+ *xb-4(Cpg @\5wM47!m +;),6R@u{|)X @{P>y2(hP1EJ:թ !Zp؀71@ E#t໺!@$hV2. h~gx]+A/ڢkxl*XB`@GZ`LhٶͽJ5l'*p[0)J7a,gA? 3 M=G ьs)N&}U8p4呙_3T^6[Sdy`*NB8ȧ$wOE\{R3t$1p8{`@ \X@p'`qX@dV%0mx p0| 5(7 G/0Te [1v5\@0)8@C%Hc !!di.A Z sW];K0yQM k}@OgA0( .dat{ZeV[:W1M=^A1|F, *9* @LP-\64`Y @RVddU/_Ǧ\]x_m\52HR&Ch.HQ(1EoFh C J`3 >5rmjJ}dF<_1 ~b'?x%(G=C_V_7}*:&?=a 2 yejNצ) ŤLRJe=%ᶧV.oҖ* [gIP ;( K ި"4q<ԞP#-9SM.TH!u>a#t"` .Hq4+jJ^ چCh(e1cu`"@GRs83\hN*U+Ꮍ·IA<u n 1vv k"k-o#OkZ}z 7n QYLK!97*'$myb%XJ$q~omU])XFEðz;XS]}OԨ4z/sޑmDOQ 2}4H k⑑f[kgԫλ!R|<4DgNxXK=|fc*96ʭ:Ckl=[ O]ygW>Jz=w3++]S;4Y@YsnVYGJabZNnJZ P)2BK4Ѽz wsD"ӝ7/oW@V *(dDӝOX̄Ca|Ԫ:9&{WTo=Psh0Q.6hEEyl>x0rRk 3{ h0δyG 8wbo b<ބBR%8sf/wFbA=S^_Y>mWO?1#)`0Z TX8vGr?>زyL&a/X=|;3}:?__oY39T=8?29i9Ns':w `fƇ~2~t\=gSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS.y(47K3306DGS2>233374>OGJI78B:79@;\@W`ހc. UN}s wbk7aemiu% tx~̉hW޽Ǜo̾C_'GjrUU8{ I:?l\w{{\ܩƚ׷}9Nx4O dvdzus8^t ӗJS{d{kFKoMѮ}L{k#nup[;Csi!<~oXk c,c'Ad*L׉+j{o4޼YYE mt:;Yxr̮Sh[/\hМbbvvt=qhv)/H>(?}j?窞X{7F&8ڃӶ3s.3KwoלOw~zw/qy+_OPrϿzg[S|.a^ IH,KR\迮GFB)D/پv]PVOH6+sG]'CGBsmiVS7fXl>t} 8DžeC$Gm)ȥ+5:yL޷5g >@>fS3jF[ˡ' f*om؅f`h>aVD@/srXx(_#.ك ❴𘹲3> Wp5 TuОx'wXQгӦ'~5vz?:Y$ÖlXآ`#٭x[n]̽_o=X)fYrU$G_ŋW4۳CMg/*1gnsȔnAcM۪`o kQ_1yJ$˝r~:=6M|=[]鏩ͥ?]>P{~I՛?\_:ܪ=7g_~z3zLLA[Lݶs wՒ8>=09wfڟܚwT gwv[ќݣʺ<ӽm.>Q2%䒕k}{R&׷Ȳ,'=g>+?}}Zo}}YUYYr~_ʲ~y^^ּ*m `;`@ծ> +ʿY5i ǿۨJ`nJ= tm.FHwwwt4^Wۭuim-:*+ u6˘r"UUta.v:z<+J5yN}-n^悳~@³9/4Iv~g*hqڇ]G;46>}Zmen9C*G_v՜T. IA9]ee,?ԞJe9EƖ%ȋ^Ka,ɺd0?,=Gp#|?R/5݁.'{zb C<ˬ?߸([v$LbΎWPnjk5\T,Tv#ޖ<M AJݶ_؟ܷaIpv>~]~{y-Yݜ}1k?S:5{/#wVwUnHAoӢ82m{s>I=4LB _6Pdw`jgr v(G dtqL SDI+RJjX_Y(4 H;:lٗ+oݹ !嘿؝Q{>۠x0x'Z3|>LGsmVp@Չ_21V(Pwaح~]Ͱ-/Bܑ0쾴8no@` Xxdyۋ3 oTʵ?u v> s8)+0ƚaYtTy>O7~Q?6: T)+;"}n}4g>7/[jᕻx˖PO )R^WZT"zs|{ <_G~U߳1Y䳼 \a~6<߳c8}:򫣹ڲsd5oSOnJCFQQX:(x,8th,,~ʷ b#DZ&}~?8̍wf|u:M_Wb-TaCބ1k3qw|ooKn.o{***j^?=tf} T~]aj^V}WWp9Cu_Ls.LSÇ@+>wV eZS?z8nW?^r^+߁WV@ [`_R^b?,*5W.BYh@Pϯ*ck:swy{;wB aAtMJR-u)s`X6~xa#&XI`#bz=kN?^ɐTUU]%﷞tƾzm߶,0\|c uOdש3_7?8= {#CSa*4Jn>'ɨCcUBώ?a߆}sbcz]rk*->TYLIG?9C6?SP3?ɿ%kD 8y?RAT/!pU#8HRJ~YUDZ]i9T*y쒀Eӽ8sXf"6.deއ =Y%£B\c1 e hv)eQaOW?PUU\M 4u[RzbS'ތ߆aUAЏ\HTss_e[r.)9Y߿ǀ}~9΢1cT«0Wˏۏ˝8&NT9lOvqQf>˟>djp]7ǀӐJ<=r {1!LҋV664;YP)V~/?4pS;ढ़ӥM-GNbq_eun˅vPI^TΎQ%#T7#󧯝S' n4*lTUU1G߼לLuZ *{F&i­*wD/}ο(ϧu>$kMT;zzh|J,˩OD:Qݏ>dtwꆙ4>gnSu}|#9`{]xm U uzpI!U6YgBPqn9-)GZqgپTP< q,$֮}cDD^`Ô' K 4WW/W tלR3'S\[Aߎ A4HpM8o_}|TxoR&37en1z;/|ޘ;JǽF^zOB}N}o׻MRI3Ծ"ӛwFFk?/p;#)[=>}AwMկ$t%:ܭM쾜.oA {R)P8MúpX\Io1o$F6aXoOggSWyoY -9OOJVG9;9>98IIOLPN;?FG\<:69FHI_&7[],R7^h9{"%46mTMlsLť4ASKjيbX,rmUh9mۿmk۶U_>;\ݮ@uaGkQcз__أsσZe*9̷ZY*W#/OFZU_/]ǻ3RgzE_ Z;VLHG`=z|1O^xOŲi}zC*Ni2>Ȣx)!taRTۦD7#pp8Ա%{p?zބv2A8Rgg^~߿WQQ4ˤEn$[~phK{۽6K etv>K*ṡ_*J͓g4}?<>1L[o6|;?QYYY@O,Ҵ5uGq*??X_oϴ{= @VUϟ/Vlnu*z?ځeKq@p@{VX0MBtr;,Q4]B/4R6wDSd V$żwsGXs,^YvB6p HU+r,FL]]>l~v/?}F%'Cw'~`{_Oߧ.tsﭤ.5|wsƨcs5כqXIJ'k|owzQ40_4 CP'?#[g^E%ώâ]Ml_u=O}~0p,LfL*2$4\kf&9K݁:yߴ{Gk'6XdsQAʉv,y# p%)qHnh((`pg?~<<]w7'$꣊ vIf HwBnE:O>MǗo}|ڎ..쾖[ vt5Ft a~ <u=+!7 T.k!F4A#s` _߻î7|ѩ%4rA;;9ׯrIӱm)6o_\}Sѻ3yoq&Oc?z=7tgLwrd knt'sߴA)R!/ȦtF_{n ^JM\/KCX~}?z^?W/ncH{_\<ٶ,٩L.Z}(C~8X_0 IAEAAE$I~=ŋZׯ8Lߘ/~k0jX9(޹wZ%*=?z×[%گ_S3.+bUOٱGSTj ?AE=2.0N!{ik4a^s£gzM)Y_ͧ#=9/%[ƛ" :7T1(6֦gMWl0&xCRU>,rђJ9fu5 #KJԿmE`! Zu<ބL6\҃=U4X&&f4..|\iv"e,ؼ/9 |~_gݬwX2 iiUU+!ܓq5\- ހIQE-WS;Hh;Wn6M?txx׃o>34Qy*{J$azIP8g<>|}s6o0dOj,e1}zܪ+k@3 уLYbƟ>=y瞩 bYU{ ˷F9_^.et ᦖ8xԩ_HK߱Q_r׉˱^D~{SlwJ#+|4@N'&{cc͞_;˨r>PӃWUN,݋S3^Џe5+P=HdEz~ 3RZ??*˳ $\=W2܀pYSI)x%Oj{)$˸rCA߻)qbwZ8i+Wzv{}**/F|=0\Rrbꪨ__3_|=_rW>}wnqT9*=LMÓ?O4F0OW}dr.̜>O3i?14}>?/c lVB߾gy^fS=s<ƗGe|Pd˒CˏזťM Cw|zۅ'ǞXcT#S+H3|˯}燗795) ަ^^j%JM)D~O.I6U-cGl%d+?_o"G3ʔ@0iBUs!_Qi!W;5t0ӃǃǵƇ]/߼iN:sJ=^_m%N,˲屑0Hɲfx>2Zpnץ9k^hx'w ^HClsO+q[w><{;v(ũiSGi954O5wbGۇ7xt꛺$MWSaҤi[ ,ճ#_=;k`q%vikͷïwsq,n/E\99`"JX5)ӳ=\PS 8F\) VLU_"r̉CDvz~Kh[ە9*uϋdbS,*qwMc)N=b1oNԿ)266 óȉQ<{CT=?f/D{9g4ϩq? ,6iOggS)lyvGGG7;:AGF78GGFDEHECE@;3)B_~=c XeWMxK_PL7CG–yZT7wMeZw,6g]MN0rg-@Wꘗ<[kO>4ҭ'o[D)tÃFؒ)ՁyP/[m&7meU³eg27^LuP`۽{ׯ_?P*M)O1)LS-oq0}lD}ڳ{CN.De`:Coi'?p;R;S Dȳٝ˳Z&o=_+ATOR=~[s?9{?6׻}·Co]w2$'{N^tW|sOn_f?(6o~ S'|u5ˈ=BjE%Uaw~<_&ڝ))ķNVLj?g 㧂ؽ}OzXuâɿlVޢO xӗ]*ٯ׵>= 斬6ӑ:F= Õe>[FѭpMYD݉ !ɗ?vYOʮ5YRzvfc0c{d Ϋ?jmNgг#^UU?JIw wg 71,/utj\zλ3QqR;:!G˦Xקh۝L2#>TZogtg}/}6ήOұa }YIM!GuMafk>OU92aCUv|粺қ|\sLb+ $rrNtIJl y#ޣq"0w\gWCG"=bb଻CH|H"7{v$X5Bܶ ǑGs]CɈJ*KW.};;?.R8Ƈd;!T//۾}î~9Ξo[ڥIzx{C׮!k< 40yhV41p&-οڈ Ff) 552Ks}]m;16c?ӎs ۖFz:jݚjAj8EWl$B!btGtt׹WO/2C3jB[`VjҠ uyp&̓9u$ܲ#[:|U]FO PU՝s>NO'_4{y/yJrߵ|>}oϹ?sΦ2kǟ;gّ֤|^Ap>8fI3%~l9*^'2D/2iTDܐ UIg UbՏ}zS|-V^Yu ͽtN5RC[x%{t7i^>oz,UuAHHH:.dm•a`Ə\be'~%ͩhv',NfDS3%TU`Mo >lK~9~7ɏϑ+z8z6s$5ZJ2չ6S:kt_ٜ]SS=rT4'p?GL<ݻz}k[ NNSsݟ,>;YI%u>XJ/eR,¢:]uxYx~,֯UC@h99NNߪi^69991;']^f2././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1714434251.0 pychess-1.0.5/sounds/win2.ogg0000644000175100001770000005010514614030313015464 0ustar00runnerdockerOggSz&:vorbisD8OggSz1y-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSEz;$8 "! */,0-¾$%#"#""'-2-)1+%--%#&%""+.#$%0/*-," j@̌Z$e޴lrؕ'g2BB[@NC_O @׎o*#U?F^(>G\"uDlY\da>S!`Ij՗K?Z;lDQ '^Z`$i%=:km&*ϝHT]YOV.{0K(w kz;M+ەr`[Ѝ4t6Io M3QCbʑ ŏjL,ςu?\t ƏP8,>4B_mHh/YMGpH5;w6i +1ƀ`LKĂ]񝞽$q;TӾ?dzmX80V^Ju5^t 0VЖZ}n1ӭ{'TEWg9}]K%۫״3y2ʉ:NbqFOmxA>x,i28l˘n@{ $g*Kޯfu嚻NSEDÂy@ÈU2 Y 'ƾ腸4}BN; 0o][>`AùN*]GYJl^!΅`P <; 8 v 6f,fү'6V1X]uw\\9ҧ0X v#Ayn@osUO{!P>Zmdkm0#pL> "zdm>ݚ@_O l3&ؾ66uy@Ol"m{~_oԦA%GAH G.Wp z7ƿR?7,)3?df>bH Y5: /wxbA 0kWAɲFVddZC%0ͬ8;Ks"Mu_XķT56y_ؐ;?eL*r<ٳoco{ H b'~ėfҖ!4ĆW.k<5?;Htf}@sϢ4WBҳBrܐس&KFSZn&A36vg@qR3@{o͗twO[P1_ __ӕYF5L﫫Z/e#l3*ձ;oZ'k'3'@oz`Fv9>J8h6v(&e=ۙ__Tt|ǜXt6J R`>&PPԜ;8+jݎV(*!ex'(PջKC1KLfߤSL%NuWPo"jճ* gk jm'%^Dgy؜݅ ³?J ,3".HdIXE[. $ϴ}bǝ"Hu Ru.;cҚވjq~? PHk3Z05ɯ#4'VJ:L:MO;^<>~ZMńʋd\7ercLfBLyW ׍mBFOXoꊡ8ZC/ܛ9 DEcxNR.zoB2"ޖ8f .«%i{J5%ZX_H i `>Vpe/v yt2sU]Z*R@T{ \*cC S٢DPa=m؏e|# ^l?:@@co֣퇰Q(oj\CΥaP?W>,ճb;:u/!is>B؄&8/s1Tƶk 8L"}Ϩa4{ΓL!i&a$=@r`]qډ|Qp2'rQ @anlX >޿W!Vv3̂·TN{ۧtG5@9AM辜ٝ UbScJ[^^V s8-^4Q`+;{#5Fy˕[x䘜.uhzlX%΋Uu`^jKY,{ܰ>ȫ<:5dg#9~^h}}a}8 h9gTe8u `z߷Oo]/kiuF#w:1)Q׋6+ccHl=tG@_{Q}hM&+i+2'݀>r9pL.ZyI;sRI`l (3$~Gj(($ՎVR|}wǎvbx*GӛdY|WV/PǮuZַOǽ|>Cgi4K 9Md|ԁGGnl^*w͌Fr mCk êC@wg{vѷ, .G.F&nߖgv=B5L0răSU5wB?}k7;)#!5Z0AgݿS"]D+9HY46ֽۧw^ϴ%{n\~[2 Gf(xٜ3]/h#޲kkt;<KoR~ZACjٕFQJjXQIu⢙ }eO^-ES^}XOuy}Kc?lt:)4[_rÓ-bj5[R4si'Ѵi~VURZ;!N2/D0 ?v1cI納"0@Ȣ`e}߰DM(8%rjk۳Iv).X3{'p.ff+R<۟GSs`[jSRN[GfDT%\6Vl[XhS;R sk^Mzvޗseb6}=V9- !fl0W&u!dcuA/N;Ig]9)ܔx)͡'ɗL%DmƼJĒW3C3. iT0*2ll|Zv>9C%q|49Šw$\sS>w [Cy#<&A)YCP_fT_>|-=tkY~aON_.-GN=& F:D*6`gZ{$5ID.>םH3R"z+_^sKkkGm  !V YѓEmvS%YJ^wB%>8Ad^3]b 3};?9z dX@mCLP4.s[^vMSĄpt .gskVuKc/=ٹx~wB];&|!WNlN-ȩ[6O9֧˲b%,p$nhh^w ?AlPx' kژ#Рw$ؽIOC~g8?A"Nρ^<5V.FǕJ4WXo2,o)dr(G+˘^FH.ɳh $m62t>"}yyb3+ Z4Z=6;yt93 v؏ȅl #''HQ%#Af}F_s%6"{iAZJ]I{K(j\R㓻kmx_Es%_[aAVlt "L@8;kU鉿0nnXš"JFla2Im{ΥN ܺ3S6 Jw{BDåڽZLBdX`qÿ&_Iʟ]6w0tǥ̋=MҫjU!5@^XQ~ϠǑOҰ]xW{t:FB yG(8 D4AP{kv-r2ݴ~р"z;VM{n\!bY-\!wyyݖw ɏG,}ߘòeN HrJ(bWqv 3s&^^k~(^}œQ߹xg2xЩhOתnν|]QwDLF~|&&R+OhMDi?;Z7&NJY!|7"Wx5Cѵ3_3V;_20X!~"?5NѱjԌJKƅQNv+~ vH ?'!3h-NqXt {rCXeg;Yb|Ne5M+oo fՈoNmV,8o\=FX핵Ґv]F*-ehsE5ڜ#7_F)>wGmPw9wl(7rg̿&k?{NS68ר;`5hRfbrTVKK,Kăi2s8p)ɦI?Q1;G#;a Á&P'@)AHhujvt S+y֞z] =uR^wFw~' q߸l;4ѡ5D YPu;}")^=Nw ~jaR={fZiJKq.Fj@\$SƩܮ_Kչ]}kގ4kMmD~3.}+xBG9#rUhJMkC>oC4X`P>(͓^3+ .FOOmxi?q`: L?tm* @QPH])o{̃Xh~8hr& ;rf8}p]04Zf,yHu;תN%1?V@%nh[k5"P+!R]vW ۰aVMwaP fo[Cv\ tc#Ig~$ɕg-&Vi5ZV[j_5۲d!p.L#m' Ig_|`=N#8L~D`Y7!5V]S |sp'7KcfY2G0ߺwD_~>">őo'}.>r}i)w1ƀ9 ;Ǘڱ1DKmG2VYyZ?w{Y=($䙕0`Z}>TO`^N6ղ*r5ca PV6wC=y>-\3!kS3ld<һ~mEpK\U:Beb`;lZҌжK$OggSzUDZ&¹Ŷ#$"(.)ķ"#"')*"!""")+w .{8:0 0I61L(I9mE$7ǹ1FWv#W#ahzs^3>ZF7MUL?~9ֽ&o&;|mʝęcT۷L9Wc^G r a<ԿB9IbGR`l;HQ.TO'2g>w4elsf̴p1ӣTI;<ØG"1_n7~ Vx^2d2&JD譧* }:݆6scbϑTI&6=,:ptQڄ0tKtlHCr~6hĨrߒh-9v][wtf=FL/cFI /þV)Yӽ^'Dk(NS{jsmYA,Wp83xmj`Ֆ9Zʼnx)jy*hwCEaߦ3WmZH{d #/y]o-,|}ND㍧71MjeeOhўwl Lzn5{R;MԶ&=m5|WkާA3 E9KӚj5>P$>DW_<}ķr_!\m$~h>Q~P]0|奧[Tz֛xB.qR٭5K@kqTӁv$P I1Q1Yd䜳BQB ;Ӵi{|}pz%哦M1Ey 7]疯2UT&jիߒ^fθ:e@6+џ a0 ccڢjgul;o'ȨJk9c-M`C{KCvp۝S vv %-3@FHcP`:7&/kY/0t4E)3OTמߐmlmJw]\$횚Ӓ'. OHm}~b#( AK WQʥц*v,ǃuiLtu mmm9p;o 7 @7@PH(GTc''S">ű@VV,nӕu '@FG` A+,䫥hF4K>i$X{Rw4Շ,iJBMY a=)`35?Gl豤_8&'j0G{})8¿{|!,q}՝0 ^`C&ֻIFyL'^r.v(^_R*@'kDcRT{aRco Gw'⦅mT(IǪާ8h}u6g}IK4gi0hkHZkT/M 1& ͰsJ)2WC6{uyE4"LRcn jat@jiLF\NZGntY۬+ @_ +A_=n4ZNv@j49٭,9ٕ_8jSP%Gn¹wWԼ:I"XUdYfh=~˞%zdڐeZEu$.,Ii+Hӧ_I`lլS՛MZ;zwd;Ƹ+@ 3,+dPl9s1~xp?g._dh,uww#ήVCl?f)G$ԯZ5G ]%ߧF>~s6^/p^^DeMdu`_Rc4кr-{Bv<>,9Jf9#L>\_޶̀YGzhPs=H^e|A0&hVly\xoc )Üo.7<>m >w&3KadN,(jI@Y۩gmQ2f ՖDUy߀*rz^M -w cZPϸ]T4kЈq C;m7<~N)y~xyb .154_A= ,.nRcMu> =[cqlollk[ * 륕:o' Mܐ]vn!\LϋQNP6mhMC>Ҝ'D5?7x% xsl V$ޔDjvy~x~,QŨX{,N4F%-؛ّB o4DX!+#wVvfįbG FI z/ROBr]z{]5A04z9 a]FVRȹ e7+3M/0$S8O. #3/\mȍ6oڐ;jy!-{m&x9dAD~]-,vdELj Z us@&~~y,IM= _o-P5z;_9pLl aYmHqgMvA7ҺMR&ؽumY@3]7ZR!1F_Ł鯿4O6 O~v~ ݷ1Sgaލl% 7V[+'z9]8D>@AI1^{Dd ¡ zfHEcu:44I ЊymAnfDVi'OVmxϹamc\Z$$mjQĨf F6k:+OggS<zk!#$%+- *.˽!#!#$#+/*ƶ~vR.@zw'6#;J[Ucz2S}/W{.[BD `NMQi(hXϛʘV^F|yQ( (L-GGK%;y =NkҴOܶCr,Q'[YqfNym'K0@̵Mwvnœ%YE^vԦAgϺ#utй9)I 8&q7Sm#ʆS1Wl:奋bHP *ˁ ճYQ 7GoVo|$*c)xD '`''DoHkK5.Dˋ~gu&6`|YZ%?_ ZZvnqQw7y|+Gi79QP,Pp.ƳHIL6{ImZqYP ]#zouz{w7` }&̠ݭP2ѺWD|o1%a&q`gCF7UۧMEg ۅnOTּ;`Vܭ#/ s@32K{5o>*f k+ q=GeASP+lpv9U"u>O[Swos=c&@yI?\KJmUMs ʄ:q|eN>z5|TՖYtP^oӁ!zud^I1VP6+0U'e'*nY%<_N2 bsܝƾuoܛ3G=m%זqSlrgƷye圙3&Q{0 f;j <_hXج1y94Wg^;#quӶnHrЄRU.a;x8N)3>x8TaR[ޏ-#+V] ^궾6vĩhpAuy2KA cJ(Ǒ5=ͪy3X]/o'ɶ!&.B;ZA@.kRghG mX}lJTWg~of1)6O}Sd[SQs#t 'L1;;p|X W k$ڄ%xM,Wa(5@q%c KTqq*I/9d62@zH#<1>qga)V1EH5\>-ۓ٢E}H@'̚Xׇv " h]唭Bœ>1.n #) m‰rgB % {J#ʙ933w^Ww]ZO5IQݏb#QzK (;)F)k2~B{Ƕ$xQNzvu!yO~266%̌@9K0],_=H7?Iir(6<_WZ'ˈOfd5,0E\ pOA"o;9pч%ʑtJq^ıj&=56΂~:m8 ϑDz9^1>>v̂93cʇÙvcQda3n1XMϬ}m,z TZn%ԗLw$deַ]ka*^dCŮ`#X¸X_,Sי]=[86`$%Qkb±"憮9ojcMO"KanaeTd qmD̓>vnB0.k*+=@$ cdi1*L=>5è5>L_NaXO6dv߿{Z|4*LMG[!Ɍ1]4MAhT$F$.t]䨝V>ﳓI냜e~LsYJ;آEy

$047$$1k`$2~-7R$2~-7t $2*I $2*I? $3aLz5 $3aLz5 ,$5& $$5[6 ,$5[6s $5~\s$6U V$8 ;A!]$9X#- $:&7( ,$:&7(s $;1|`6$;2*a $;2*$;DPǟ&$;vr r$;$^Fk$;$^FL:$;$^FS)$;$^F"$;$^F$;$^F]$;$^F$;| -E$;|$<)ۆ?V$?~L 1 $?f8$@C $@Lv( $ADb t t $A&7,j$AYT $Cjyn $C7@2R$Cz. 9,$Cz. 9 $D+}&=?$D,#ef^$D!$D$E@u&R$Ex>R$Ex> v$E>FSa$E>FSD$E$& $G1T}$G1T}t$G?e ( $GD8$Ic $Iu丼E$Iu丼EQ$Iu丼EC$I! $J&wq ,y$J&wq 8$K}ɋ7($Kkg$Kkgt$LrP $L|v $Lv~S/$Lv~K&$Lv~L$MUsv&P $NFg& $NFg& $OSZ0nD \$Ow*~o s@$Ow*~o $P-wq?$Pe@G]v$RFL--0$Rw`q5 $Roh֬$$Roh֬ $SygTLÇ/$SygTLÇ$SygTLÇ $Ty&R$UDuR$UH $a"),4$asI ,$asI $aea$ae&$ae"$ae$b+9? $c7^v $cPj$c}1$cٹeS $eEsBy $e^@*`s $e^mEN $fiUTS$fiUT$fiUT$fiUT$fiUTQ $f濌; $g$R$g$$h5e $$i$i$i$jE . \ $kjĈ$kƒ $mSE&$mSES $n fd $nId2=$nC,i *s $o-5<( $o@ҼD$p[0m a!$p$qXSPt $q$stĄ c7$sRRJ $uV}]KCb c^$uV}]KCb #G$wRIy$wRIy$xL@ S$x%:$x%:$x%:d$x&6$y(o) $yY'b(t$yY'b(K $z8'$z^D $|U , $}@[O$}tٕ-t$~'j, $~'j, $Ju,$Ju?$Ju $i/Ws-$i/W $i/W . $+b #$SL& *$SL& $"w $1~E5W$TTR@$Nrya $+?"n&$kXR ${.E$3pZQ $=W $I ,$Iv $^zb c$mbB  $Z$$\K$\$\$$#h ,$#h $#h $#h $gYI F$~K$~R$~ $s $ z /$ 3Bc$ $  $Y?yO $'+t:$'+ $'+$}f]t$Ԧ`$Ԧ$J$5.+$AagI$s fT$;`W, , $뙃 $F4XR$F4X3$]4&Q $*=I $<@%f $Hn_  $ghD$/$c ݣs$c ݣt$Xr $Xr $ |*$,$0<$CyrZj/$CyrZ? $dKv$r$- $Bj$B i$}r$QE{ $Rj$ 2l*$Tu%$TuK$Tu $Yb;pY$ JwleY$@ >?E$.t6 $Ր mc? $a~ $&nr $ $񺫉$h{ss $іFdž$z*$z 1NL $%[K$oa$r+>N+$0 k$WS׉N=$WS׉!$fGR$az $az$az $=u{U$ўch.$ўch.$D@ a$D@ $$D@ ($D@*$/B#&v"$݈Ggj $|Ct $ 3oQ0$j* $>j$x$)9[($-v}jN$DcўE$k*] $*M  $m/3v$m/3*$Z $MG[#_$MG[$$MG[K$}RX$ֽ,j a$V=S&U$V=S&$V=S&v$V=S&b$V=S&M$V=S&$¼>K R$¼>Ks $¼>Kk $R% B$R% /$R% '$R% $t$#]] a'$#]]t$.D5$po\ѷ!$# Q$# ,L$4k^$ʕ)fZ$/%0 $/%0? $̿$O.6"$^U1J$ϑF&$ϑF%$ϑF $&'Z$&'$&'$ATR:I9$Ѹ d6S?4$Q"?$ < ($%\Y $9p # $06`$xN $ QԅN $:6 $:6 $ӊ:% 1>ӊ % F% F a % ʖx?% 'SA4Y% D:Ʀh7%D}!% 1S %QԑR %Qԑ %Qԑ %/b%/b %/b , % , %D (% f<ܣK%c(? %wNjC%$0?=%$0?%g;^%J;t % [e %B%B %G%uUV%u% u7s9% u7 $*% u7 %"pt&%"p%"pk%"p (%"p %#FZ:w #K%#FZ:w%&7' %+ œ ,Z%+& %,$H"j%,$H"j%,$H"j&%-Y^7 s %.*htj %0O Ũ ,N%0O Ũ N%0O Ũ !M%0O Ũ !%1Ǘ%15s%2%;.%2S/c ,J%2S/c??%3 M;G (%3&xd%3.&%4o;F , %4d , %5K%5/"%%6J{>6j3%9n4*~ %;7CN%;7C,%;FKE %;!: \%<u%<F" %<F"!%<F" %=&%=&6%=& 5%=& 4%= 1I>%= 1IQ%>q  %>SXUyJ%@_ %@_9%@_k %A?nv\b%%B }IL%BuNN%Bclӄd %C9QS7%D3~ԗ %D" %DN+W $9%DN+W ,%DN+W %DN+Wj"%DN+W a%DN+W %DN+W %G[X= #%H{GD%Iav%IWBݎ-%J1%K;2;&N5%L*d<?%L;J1[ %Nѐ+%Nѐ+ %PDQfl%PDQfl %PDQflR %Q,q g %Q,q %Q,q a%R33b %Ry|E`%Ry|E` %Sm?K %Tn4'} %UJ%U"%U%V+>R%V兿Y,%X=<:%XSJtS%XGjqZ %YO[X+?%ZZ %ZZ ? %]nZd/R3R%]nZd/U%]nZd/Sr%]nZd/KJ%]DdYUM%]DdYk %]A&  %]ŬX  %_ =c%_o h%_o h %_FgO%_tj (?%_tj%_l6cN%_l6cR%_l6c%_ M K%c-hS$ %c89k{t %c:$%c*Re1%dT4v %d\b%e K %e* %e* %fObpŦ#S%fܔwW %f@"+ ~%g۝ퟪ]%g۝ퟪD %g۝ퟪ %gĖK %j7 K%j7 7%j7 ,1%k^Y %k5d&"%ldW#%n;%nOw%nOCwQ %n"T"%o֊dS%oR\s %prg(e%qQ9$8`%rS'%r $!%s[p%L%s[p%L?%s[p%L%t3A =?%tьL%t8H !o%un-ʹ~j%uvIi ,Y%uvIi%uZ]%uZ]K%%uZ]%uZ]%v.)R|4 %vQ|pl%vSN %v*& %w6Gca%w6Gca] %wU%xq2%yIHFJ%yz/Mi%yCa%yػh?v)%z\= %{ 2%{ $ %{3+/Q%|x, \%|x,h%|x, ({%|x,>%|x, %|x, g%|F&%9>%9>%HlwV[%AO8 %`vB%`v%K{")%;Y%;%; %G`%!8"%R4U%)ā*s%0V{[%0ݪm %Ld S%fDK(%fD %fD % ?%[k%s6 %E iE%E %مS' # $%مS' #?%مS' # %مS' # %_ h/r?%_ h/r %͂ %;0ݠC?%?Q-t%I%IK %#ݸ?%O}8=P%O}8=Q%/"| ^ c %Cax %wp %ÒZNJ%N'%M6&qt %Ȗ- ( %0Zs %#)"Ws'%9g6%w >%w > %5Ne * %Og:+ $ %R+*d%^@T%҃'l??%҃'l? %M^]0%M^]0O%5g* ( %lth %Ԗҟ@,6 %: %֜րFv %֧6 (hG%֧6 (hG #%֧6 (hG i %֧6 (hG %[,A0%ؾ` $,%,M$%OM&$L %{X%پW%ژ-;7%/8%hv&%cet %ݫ %U25?4%% >#% %UguR%S e0%S.%S % h i %) %I{qԯL%Fe%F,%F*%F %Z%Ø[b%qnaC%qnaQ&9#.&{o| & /s&[ & -t:\ m0&!nf5 &!nf5 g&fF!ˍQ , &^&^ &g~ &RUr & =t {VS& qlH?& N*\R& "5C m& A & K d& K m)& K v& K t & gE & J5 &rȴc $&}K5j &e) &/7u +(&" j &( jB&qp̅k&qp̅t &`xH$r?&e52&e5U & re c#&T%)R.: &J# c#&s"4 &LoكL &{ '& (D(&.< #&ue &|A_k &M &WTo&WTK&fM_eh<&fM_e &XFI K} &XFI K}R &Ct0?(&w?&" kه?&" kه9&" kه&SHG &XGl: &(H9&(H ,&(H&o&"8/%b b&"8/%b I&"dH%"&%q.[&&*\ eD&'!d&'!dN.&'rԌ&'rԌ&'rԌ &(:21&(:21 &($*&(ͯ=L$&)(=cqK&)(=cq(&*+"[N &*s}' .&*+h! &+ 0 &+8*^R &,hΦ|&,hΦ s &,hΦ | &/$Nط&/V%}E&/`9&/R$&/ cB&/ c9&/ cS.&/ cL&1}&&1d$H &167 1&1s9-&1Ӽv &1v2j&1B6g (&1B6g &2]4&2lTn c &3ྥrs &4>)OGb?&4>)OGb &4nzO0(R&4piv &4, &4,j &5p%oi's &5xBt#&64 &7W3?@&8?>Cm &8Vp]"&95.H"F&9)]4@X*&9)]4@j &;&Q&;Ƽu&-p¿' &>Z&>AvK &?0" $"&A@G)T &A![&Dsej &D6`k&EATD[ -&FX'7bv!&Fp-$k &Fu&G! &GFx|> &Gj&B) &H6&p ##&KZG?M&K %&K޳Ľ"&L"8߲ &LXइ( , &Lp &M8$?&M^^tk &M܉ &O>AOM&Ol3Q&O$){0j&Pa^s &Qtt*&Rt~ ,&Rt~ i &Sŏd&Sŏd &TU|&~ j? &~s !&l\Q&A% g &Q_3VN &I_:@&} ? &~L0WQ&~L0WL&~L0W&JԸe[&ʔKV &(&(c&(Uu&&1D[$&&1DZ&&1D&n! &'e&'e&TìSC&TìSCj&r2Q \&m :'&2.eΑ&&7Ōͺ c&ĈR&;5L&;5 4&;5 &st &7!ɻ&7!ɻ?&Z<&Ǜ_C &At&Fx&:1jss &G &Cr^1 &Yj],&eqI} & [?E&g8ާVH&1&:1)H e &C[K&=1L &Fna]!&cv| &X b $&҄;? &ri &Ǧ1X&Ǧ1Xf & @  &p &v&3M >&A,ң &A,ң &o(N&e|hH`&e|hHW&e|hHV&J5 s&J5: &u# &r-tp?&(1k&(1&(1 e &Dua7&Du'&Du&Du3 &pm| &Gq&NvK Z &6a&6aU&6a&6a&6a &6a] &U͉S&Nyi,&Nyi,&䬋o&3y &!8&-Q&\ &uN&p` Q &t~ġ &6(1 ( &S{Ҏ&{I.&}O &}O &Ѯa&Ѯ &=&&=& &Ru/\ &*- s &: m &: m &J= ' v&|>n&|>n&|>nS &|>n & 9& 9&? &&3&^z?Q&&@&zBZ a"&zBZz&zBZ &k &c[Hxek & T&6m'&6[^κ s &J*Jv && #&8;\ &i= &aB)f &o{z &c&`' &-&T_&T_?&Å^, &jm`j (&jm`j?&ŊY]s&"V.&"V.S]&"V.]8&"V.L &"V.&"V.U&[ a&[6*&[6 , &(] &A_&3&Ȅs&Ȅ &ȄWIR &1'O &"DY&ʋ2>I5 &0Vv+&0VvK&&tk||?7&5&8"t &9ZR9&9Z &') , &') &m|" &ҏt &K\3 &K\3 &Ӫr˅&ӻc!v+&ۡj# )&3.`? ?&3.`? .&Qt&hB &X4 &vԇlx &g/ ,&g/&s$M? &׶R߻ & F+K&(bSXM&ٙbk &d.*&I3. : 3&ܼ;^E_?&ܼ;^E_I&/ #'&w).?1&w). &w). $ &C&|&9&|&9 &6C&4iH &?4˾Q&zT"/ -&_ b?&_ b &JKPK&Bg&CJ jn&CJ ,@&CJ &CJ i &:#4#TQ&:#4#TD&%>M&昦: &<@ #&J^\nK &璞yc &A1+ &sq-vh&sq- :&sq- e&+I+4&+I+&: . &>С&>С$&>С'&>Сa%&>СZ&>С &ӏ &zH?N['&E͋j&R'̚Jt&]iZ&I8U6&I8U6&I8U6 &I8U6 &^GVR&!ʤ*m &u t&u &u &㠿U &Mt$ &Ƭs&Ƭ &3V j &b?&r &}+&I~st"&zqoɟ &$')? &|m\&&L5{&-@R&(9:$&(9:&#&(9:"&(9:D&vY* l&Az, &Az,j&j  'LP 1'LPR'Pj a'Ƙ=!'3/'Rv 'mlS'C*k]"'_M9 c '='1_ '֡<'ĸD' ?U ?'.ڝiv~'.ڝi $'%|`:s %'DDr(?('|9pK 'ީ&'ީ& {'ީ& ('ީ& '+ãeR ' 6Ź' jTt5' wus' wu ("'g ,%'MQGs 'b< Nu'b< NK*'b< N'aZ.ON'aZ.O'aZ.O'aZ.O'aZ.O'aZ.O 'G 'yqj 'Wp ~ 'v 'ӦUG $"'L ( 'xy'YA{09 'YA{09 d '0=eU'EV 'EV ,'EV 'EV'EV'EV $q'EV m'EVe'EV `'EV (]'>m] ']yU']y']y ']y 'Y#۔ # 'YK@ '# 'l(U@ e'd'9y=vS9'9ᝦk': - 3 ': ': ':*'d ':X`k';I6QO P';I6QOh';I6QO+';I6QO $';I6QOs ';I6QO ';I6QO ( '<>Q '>V`` '?'4  '?i!tP '@Kۃ" 'A&]J'A\_,'B(L"'B('B( 'B(S 'CH3e c 'Ez~7 c'E1'E1D 'G1R0K!'G1R0'Gza  'I@"'JۤG 'J<s 'JHR2) 'KR- a('KR-s'L> 'Mjm|(? 'O'O( S'Os[#Z 'QY ('Q%r 'Rag ( 'RO<$!'TEGŐ'TEGŐ ='TEGŐ f'TEGŐ (>'TEGŐt'TEGŐm'TEGŐ eW'TEGŐY('TEGŐs%'T&U" 'T̛3v $<'T̛3v'T̛3v 'Uch'Uc 'V0+;h 'V~\ 'W5g"}d'X\)# 'X\)# i'Y2(nL !'Y2(nLt'Y2(nLb 'Y3jU? 'YU.љ 'Y 'Zc]*L 'Z644 '[t( '[gGK'\> ']&q٢ '^ѡ Q'^Cq/em '^rąjK'^rąjK'^rąjKS$'^rąjKL!'^YW{qv'^YW{q '^D'_-?D'`"`sf'`"`sf '`"`sf i'aHoMR'aHoMC'aZā+'a|%'a i 'bG"j 'b<$'b<Q 'cΎ-YY 'd*i]'eH\@ 'fG.j, 'f5^ 'g^! "!'g 'ik/,k 'jehx'kAy8'k#kR$'lOs'l ظdl 'd#'$g a`'x'֋\ a '~Hw'pPcVt'>7`0 '&†  ('&† s'&† j'5jQ$'5jQ<'5jQ '^Z''g 'Ϛn\6'炂'8%m_v'8%m_ ( '^e2 ''ͺ$ 'rЂ\v 'm Mi'n~'7~| 'R '[Ij''+1? '|]q|'qvY '`oks'pRCa'pRCaL 'ĵ@ 'ĵ@ # '7cz'ŝ|]'s@ 's@ &'ƒZ3j'Ƣ/d1Kg'Ƣ/d1'XÇe$'XÇeK'fCz'fCzD 'ȴc ,-'ȴc 'Ad1" 'ɹ}" Z'̽0R~ '̽0R~P'̽0R~ , '"k'"'u6C? '˃&E'ϻu'P;B2[?'_}> c '9^'Y!'YQ<' \ 'c9[R '7! 'Mv7t 'k)'\f'@v '|_ 'Է e _'҃腆'+^R'ׁpw<'#Qp7 'N$p? '^>i[d.'ؠQj^'"(7v'h%G'F6i ,d'F6is '.roU 'ܕ,'X&B]'ށ }E'Ttv)'Gng'P;?aF'M{:%R '9dye'"= '"= 'GL޺ '.'$'c(J '^N,'OGY$'! a'ߕi< ('+f!\p'(i+ '(i+'(i+ '(i+ '9m 0'!{; '- '~Z? j '.U'+Ǻv'@\H?'LL l 'Qd'Uo' ޳r, '9f '6R*'׆H H'41? -%'41?'Hy 'mQ'm'm '8:Gs 'u*'u*'u*'u*' KA ' KAS ' KAd '0PC5'0PC5 s' , ':w> 'Dp !'lIh''lI s'@7C?'@7C 'bufR%'buf *'&9'ć '?:' '֫? ' 3& ' 3&?'fed'1 '1 (CT (.v1E(n{" cS(U\(:_Oq(@tdE(khz\(l埭l #((-w(-(g!(Ur (')M (E|MBpx(E|MBp@(E|MBpv,(;͉ͪ W(ZJs(  y8 ( o]b( o]b( ajg| ( x[d6 ( |HR( (Ԧl ( jxd ( J\K m ( "熵d( %F (XvwH(r(rD(r(!V(.kZ(.kZ (*s#K (Ti$k (XD N1( a( . ( Z(9 $t(AS6x(<Ʊ3 (^ )(^ '(^  (v3I$ (=x(2" (2" 9(c) (k0iS(.C¿?(.C¿s(maas(K]:O(W!!] *(2 s(8GB(q ()QC( kk(wU% e ( @0 ( &(!sVMYw(!sVM 1P(!sVM B(!sVM .(!sVMt ("MC{ ("@= ("O_("O_($8se ($8seK ($"H>oh (&"Z$a ()9_*()jjQb,RE()3v()3v()3v(*h+,_SCg(*h+,_SC#(*})W (**݊(+3"N(+3"N (+AiNBF:*(+AiNBF"(+AiNBF (-l|(-GcN(-^X#7(-^X# (/xF6 (/ 4 $(/ 4(0d (2?+ TR(2p?: (25{&t(25{&t(2[e l(6R$ (7ZK⠴(7Xoj~(7Xo 5(7Xo(8P (8ې (:<)| (;E)(< N((<#y>e (<6ė] r (<=2F(<=2 (=~Az(=~AK(=~A (=kf_t(@Z%(A80W _(AӥdJ(BHa1 , (Cv $ (C6ɀX =(D[ (FCOp<(F@v7 (FЄ8g(G@4+0s(G@4+0(GF&(GFR(GFH(GF ((GFj(GFR(Hm]g# (I$U (JZV (Mj8}N(Y[Bq>}%(Y[Bq>}d(Z^L(Z^L (ZQ>^([Y^4J!([ z[ (\(!UZ.(_ 07td(_ 07 `(_ 07 %(_ 07 $(_ 07 (_p[0 (`Ѣn$ (a sl (a,H]_ 2(a,H]_j (a@L$(a@Le(af> , (bv-(o8cHt (o8cH (o7 x(o7 x (o7 x (o7 x (o<^R (p# lLj (p)QXo i (p)QXo (p (p VY (rwuZ (r7 '! (s, a (sPI (t. (taxDI(tfO( U 2(t*Jt(t*Jk (^[! (,?h (Buu$ (ug (ug ( (l (^׽(8< (Q?d(|/n (;.? (1XC (lqhv( n8Yt(Q ($ (;J?(;J i(1 (Z (Z (Eަ\ W(33ר (sFv(K g"(A[X<(Į]T (Į]T (lx3 (<  ),G5va)-0~.#D)-0~.#l )-\l$s)-d?ta)-d?tS)-$`M )- M t).7 x)/S8%)/S8Z )/ ')/i s)/i |)/i h )0˜,)3 Zv)474)4ֺ1)4ֺ)4ֺ)5.vQ8)5.v )5[cv )5[c )5ލw )6n V ,)6lk#)6=MArKs )7>I ? )7CGJzk )8Z滚ڑ)8Z滚ڑm)8Z滚ڑ()8Z滚ڑU)8Z滚ڑ )8^1 )8^1 m)99¯-D ):41y?q):41y (A):41y 3):41y();6 );bGl?I);w$R?);w$RL0);w$R);w$R );J/)=: ()@OhMt )@&m)?/)A5Vb )A_YNj? )BTlk!Y )Be%1j l )Cd6I/? )ExB )F-ٛ)Fy˩O )Hz5 )H9WГN)H )I\,S )LkQ# )Mg s)Ne\)Ne)PD<+)PD<+)Pq1t))Pl4[(R)PaaHv)QF7P.K)R))R$sb )R$sb , )R$sb )S DzS)Tq#pQ )U 0Z=))U~ )W.}RL)W.})W.} )Xз@xE)Y *+ 6)Y *+ %)Y<'p)j)Z-ч' )ZQ8$q)ZQ8$q')ZQ8$q )ZQ8$q)ZQ8$qS)ZfM e )Z}nU)[|wU\ .)]+P@o)^.;7 j )^.;7 )^Wə)y)^+f9)^+f9$)_-]> )_׍-7)_׍-S)`B,wS )`B,wQe)`|%(G)a舔5)a4Z )c=;,)co ( )d# i)dwX:h )e Uh})e Uh /)e Uh m)e Uh8)e Uh a )eNˢeD)e )f@5)f[4Mf (0)f.9 V)g3 , )g^f a )gE))gE))gs")hO}j")hO} ()hqm)ic l d )j04 )k;_T)k~F*Y)k~F*k )lpa )m.9)mpK)n%H )n!7N#)n!7N)n}xu)o>,*))o>,*)o×V )obuFK)obuF)q )RS)q(h>3)q(h>#)q(h>)s]B bO")s]B bO )sw)?9' )sw)?9' )sw)?9' )t"ؕ!)t%pʿT )tAq!! 4)tmcK;)u*_8s)uu]*KyR)uu]*KyR)uu]*Ky )uu]*Ky )ux9 5)uFj ( )vTz4v)vqm)v9s2)xG~.[)x!H+ )yxP2)yx0M )yJ}?){E a%)|_gS+v)}Wr )~k'R )k~8j  );NL);R);)-^?e)-^ B)Ĝy )&7 $ )@Ӗ )hCS )hC )>q;)>q;)>q;)46R6)+z?()+z i )W?Mk ):B )Ŭ )}4)}R)P{ )vs+h#)a8 )WD$D )WD$)G@)G)G)G$ ):*K)f#)Ӷ-f- )l)}?)OKOy 9)OKOy  )uj )p)/Xf?)/Xf )Ɔj )Ɔ )O1( )ZtW)`\ )oq' )y_)o~lW(? )wrs! )x,ȅ)f >Fts)f >F V)f >F J)f >F )EE N ,9) A1)=޶K] )FZ)g.\#)ATyx)XxW )XxWS )4Z8@)<ءa ) G]'&)Wt-HQ )|77U])zQ 5)Hl^ ^)u^($)7M< \)7M<. )o)L z)JgU[){ѹ")MM2)o6*dT)o6*6)Ͼ)-)L)-)$)Jwt)h)GWM)Ά)i<9x)nO`;N!)ruWH\ )Cdv#)@ќ)"B}S)xH$ )bZм -)9j)9vj)-Xۺ )Csx)Csx )Csx ,)Csx (-)Csx )pZ5s )P]8")P]8")&hr $)&hr? )Q)w9m)df) R) ')a )[qm%)[qm) J ) J ) Z ) Z )Դh^ )H%3`n  )S@ N)-u@ $)wg))ks>)ks!)g֫: )D}lW n+)D}lW ^)"xNt )@j) ) EU)( ,)5tj' )S^vS)?3K)ͮKN.)O@b )t̉Ym)t̉Y)aS)a )Vu ))]^FU%))]^F))]^F)@W+ HTN)%KUF8)%KUF8=)%KUF8)%KUF8 )k8 )S(IL")ɄN)ɄQ )Mۙ i )ʚt )`* )YX<L )Ǣm,+)6OB )6OB ,)9a5t )ΰԻ $.)6<Q+)6R2 )%>Mϖj )~??')$fL$ )$fL$tR)$fL$ i%)$fL$ !)$fL$ a)CQ)C)CR)Ca)C] )jC ):% Q):% Q)ӄ?k0)ԉؿxPf )َF8)َFK0)َF&)َFQ) ~Sp)k>P![2)k>P!d )`q)+eZ)[Tt1)[T ()81Wټ?)׽;)(I?D*). a)܀+)ݝrkR)mH) { R)-Q )O=M4)4B%!)gݓ )6"A#|)6"A# )Zv2 ^ )-KLa)-KL$8)-KLL1)-KL,)-KL#()-KL)-KLS)>U)–")i9}%uB)i9}%u)h[O -)>O *EΔy # *~ pB g *R"Fv*$! *I` _Sw*Im{h kj *S/$sX*S/$?7*zWw ,I*zWw *zWwj1*) I*) IR*Oz*"E *Ě d(*7N * nR/ *X *XS *  L*   * *B3a i* o ^* IK^ #* =vj[b/ * =vj[b/ * %O)u]* Dj#* D ,* (ͨS-* (ͨZ* (ͨ* L * VO *WMC c *jX*rse*䝕 j*0 '| *g՛S*n9i*r'@Y *s}`A(*h&M $ *h&M *h&M , *?(շ O*>(շ ,*>(շ *>dC;*?I*n@*?U/8[*?v+R *ANݪ?? *ANݪ? *C[Q*Xj*D:t*Ddڛ *FOt|*|*FpQ#A *F]Q *Ft1*G1)z $*G22NF*GU7_2 $*GU7_2 *GU7_2 *GU7_2 *GJN*H_Kn"*IҶ3ty $ *IҶ3ty *IIp5!*IIp5*IIp5*IIp5*I:LR*I:LSM*I:L>*I:L.*Kg8*Lh`/*L2;R6*MuWF *M'RXKsF*M'RXK|*M' *_EG *_EG *_ͰW*_ͰW*_ͰW*_ͰW*a f*b[xsT*d#T/*d/|La *ezt4*e,NQ*f[Mvk *h<Κ9n[ *iF)D*jQO\Z ,$*kZ?'*lm *lm *mfw*mfw*n%-J *o?3t$*o?3 a *ow| *o\/{r *py.:s~*py.:o*py.:Yl*q+ "*up(rv=*uU *uU*uU*v#tFE *w/# "#*wTH *xrvK *xKLZ *xA҈ *xA҈j *z ן?*z ן a*zWF ,*z} *{(${G\*{(${G *|pQ *|>y *|>y *}J\'1*} R*6y\ E*6y\*If * {[G* {[G * {[G * {[G , *%*|̢\3 ,* n )* n * n , *R. a*lԲR*L$ӴD *grިB-*grިB#*T9< *H .*p6s]*p6s*p6s S*p6sC*p6s ,*Xs* 1Rl .>*vΏ*vΏU*vΏ% *F坰t*3t S **A *A , *;j*; ;*; **P`* "*P`* *ڃ0x7 *SR*T6; *%> '*%>*{ӇE*,y*uS*|2WQ *Tˊ3/0*Tˊ3/0*,S*L$*L$*\t *:`p'|* V+t8i* V+t ;*Ҩ *rG+ c*yIt؅gX>*< *Gr]S *8:j *t{To*t{To*t{To*g[Ct*y`s *2NMI _*2NMI *2NMIj *c*BZV */#A*/#A */#Aj *j *!"UvU #*ᶬ@!*ᶬ@ *CNR *[`' *[`' *\&L9* * voB e *!;C!^ *qwc$*櫴{*Tv *KS *+~*>Q *ŷS*}Y *Mmn/*_7H DM*_7H *`P *`o *%d$*^8DX8 ,B*J~;8*g\4 *E*E *Z*Z *Z *:olR *PEc0*ЁRu"*\ *r+*ӏ-*ӏ+*N *#XyY *L#e*VL!t$*rIZ *rIZ? *2ev*Y5^μ6**^<s*,kLR*1^>*1^d *R]T?*\|ԫ B*4v *k ,*kk+*kb*k*ިZo+ *o.&*YΊ# *^.cN *:ݔ}9*:ݔ} *Σ */ئ#. *B+VK*Liz*LiK*LiC*ĉ멳iD*gNf*ŗi *:Dj?*zĭyT+*zĭyT*zĭyTS *zĭyT *!QL*TXO g *)?*K!8K*ȓE *|D~**us %*y?mG*z'jSv *'ð *6qCkL)*6qCk*ȩUa*ȩUa*$^v $~*s *Χ?*Χ?D*Χ? *ᤡ *ᤡ*Ϩd=?&*Ϩd=?? *NS1*N *=:YKo *=:YKod *Ҝ'v[[*?h**F s *A)jv *Hٛ*? *5F/v*8>$jқ?7*EȘb *7*7 *DJCknf*1a(*nKz *vl^ݣ8*vl^ݣ] *ɀZ *$0h ? *ڤ= S *ڤ= S t*ڵ+4Xj *s^ * zZ| * zZ + *H2*q*sҾ yK n*ޚ]]i*޶{Se*U+%Zn* 9*"* 9*" *z S *?(*?] *? *cø2*؏c* \ *6R*vIh*qӕPQ{*qӕPQ!*qӕPQ*qӕPQ*qӕPQ Q*A *QJHЂ*>{v **E~S*Q*E~S**)k *E> *E> *$* *9vG$*Da*D*V*2R*3u9Ls *6\ c'*3b'hs*nq $ *aZPu*tRR *y`*aVD*aVDZ* L*&X(*&X%*go*go*go*@VRE*@V*f)ᰣ *koh> a%*koh> c *b n[ * Y" !*f *f ,*f *f *L+*^,&*^,*ѭ *^27* y *P ?&*`p I +!NJT +Z?! + s+7~ +=>+ =+ +yJh +: !+:+suJE+`^?,+`^?,t+qr +|/Zoy+|/Zoyv +ćR}+ć$ +HVYSh + v?+ \g? + \g? + 8 $ + !K+ P + {zej;+ {ze + {ze +K^!N +Y3%+ϘL j!+U j+Dhis?+Dhis (+Dhis \ +3 + C D+ Q8{R+°%8+°% +°%+°%+°%+°%+°% +P)%+NuG+L +5mi]+ɕG +ɕG ^ +/+4,\[9+2Tk a +v9 +ec ++$+ +j36*+s۟j!+s۟ , +{ a+]+8Tn +aB.+ u + u :+ u i+ u+ u ( + us +"u$}v+#k9 +' P +',=GD#+',=GD+'W~I2Rf+'W~I2+'W~I2 +'W~I2 +(J +(ɓXu +( q +(8!d+)=wd ^ +*Q ?++%A k++/% $ +,S6[ +-$^ +-$^ "+-$^  +-= !8 +-]T+- U  +/p +0LD_+0x,r+2Q=K'Q +23F-N+2q $+2p+2p +4p7M+5'# ?+5/ e+6f4q+6f4R$+6f4+6?7+7Ps +8#R1 "8+9_IN0+:C IՃ+;xgP c+<6 +=]4ˤ~ +=At +=1À +@ ?+@&g0GL)+@&g0G +Amo (s+A#( (+BԷiSS+Cl3y2+Cl3y +Cfٹ +Cд~m#+Cд~m# +DZ +FsJs+Fj#+G8v v=+HŃgj+HŃg +H|6x +HYg+HYgL +J[+K%?6 +L{j+L{jU+MRcM/ s+MÁNf s+Nv94 +O_Ԫ9+PP^'G +PW.+PW%+PW+P, +P^+P +QE|D +SGS# +S\}H$+S9g +S΍E ob+S6X +r@6 +s" $+t_ a+tV+5+tV++tV+I+tV+.+tV++u#Z+v68k+v68P+v685+v # +x8_ c +x>/=++x>/= +xטG>+xטG+xטG +xטG +y^'cgL +z ><| , +z>2s +{tYD+|-+}qD[+}A? ad+}H4t +~v#9+~v#9K + +_^+_^?-R +_^?-e +ڀE+QjUP +9KnQ+&=+&=v+&= +KTnF +FOeB+u +zXttc+zXt +zXtk +rT;+rTQ+~D +!( $X+!(,+ӈlv+:j^ +RfX+RfX +l1m+p?+C+xa+N$-+N$#%+ڀ!? +1_1:+E[[+Ql +/AB+7`d +C;+j5+~F (`+.+ՅkE i+ՅkE?b+ՅkEj+p}/g4+ao+aos+S , +Ln +̗ +S:'R+S:',+%S +e[w +&il3+uA -)+uA +uA  +-|=V*+y(ՙ+1I6q+1I6+1I6R +1I6 +4K+7+%y !+%y +%y + DSj+ DL+ Dd +Ax +Ax 3 +}+}+c?+ GI # +hrU?+\$R +`96\+#1J a+Tc쐅#<+Tc쐅# 2+Tc쐅#j%+E+V, +p +~ f?+(/h +JsA^j_+h+h +WbK+WbK4+Wb+Wb +ͅ3%! Q +Υ,LR+f +JkzC+kdנ s*+kdנ:+jcR+OT}6t+YհYB +:d85 a+ցh$'\+ձy +ŵ # +Ϊ + 3 + ݣ) +4cjw+AVbQ+M_k +88j+ޥ7{+{++ }TS+ }T+] +ߓ]lø + +}j +'+'U]+']$+5Cj+5CY +EpsCS+EpsCQ+t,}|+X.z+t#vM+-[;+/"= +w;+ +] +c2vN#+c2vR#+c2v+c~?f +W-'sC+v?.:d+zQ +ݯ+:r +:r +隹 f$+UDI# +V[lFL+vAO+ `I + `I ,+ `I+ `I + `I + `IC+ `Is +]@uM+Rf +Y F|+6szNs +gy/X+gy/X+gy/XY +($% +6D +ŖK +: +=)+=) +C:sj +_:%P+Oi2 +M _+M +'N~+ 8+j +evS +}i? +$r*x 5+$r*x'+$r*x ,$+$r*x+ٲJ( ,Z) ,T,TK ,Qk(8 a ,IJO ,fyut ,z#|',z#|R,?Z ,@t(,!>z)<j,t4 3/,CI*,/IXd,/IXd,\v * ,M , bx] , $R6, $4, _昄k, Y_$, 89( , 89(?, 89( i, 89( $, ^D?, kY#, 5+K, riJf ,+*,i$Y| a ,it ,K= c ,K= a ,} )V,&@3- ,Q8,a| ,l,a|},a|+,a|,f|,9J!t,R|,oE $ ,0,5Ѹ? ,? q m%,yA4K ,*HpS<,*HpL,*Hpd ,=TV ,W.i ,Ɔn?,t3| ,>Bt,I{\Z,I{\ ,R ,,,@Bdž ,,X 1,D.ՁhN,#ɑ,#ɑ ,U= ,o ,o j,4u],0L ,0 ,ޤWF$,`| , Z^ $ ,!^ ,!2<,"&ϴA:,"$,"\2WM ,kY,kR|?.,lQ"&d ,lV'$8,mg*?,n*Z ,oq2'<|B,p_&,p}sN ,q=R7,re*;% ,s]7@ ,,tQ<,tQ<t,tQ<Q8,tQ<K,tQ<R,tQ<d<,tQ<1,tQ<P ,uq/w|,uq/w ,uwl,uwl,u 1@,u 1,wl[ ,wFT_ns,x;e^~ .,x EDN_,x ED ,yt|I,yֽLA,{/y!,{/y!R,,{/y!P&,{/y!K,{/y! ,|~2Bo i),|~2Bo ',|~2Bo  ,|\ƴY[(,|\ƴYu ,}"H,}",}@<,}@-,] ,ܵZ# ( ,аJx,vlgo gv,vlgo U,vlgo |,vlgo ,:*,:*?,{&Z,0\~,0\~ %,2kd ,OSHG ,Bn ,Di$,Y+B ,^,Y+B?,Y+B $,ʅBtY,ʅBt c=,ʅBt9!, ` ( , ,=a3 ,#,-p,BrQR~,BrQ,kv[,(t² j,1$: j,ߞ(][,ߞ(]X,ߞ(]Z ,(b# l ,MY3A ,kop (A,q e ?<,q e s, [!,3*W,3*WD,3*W,qG,q!,q,s3,V ,VQ| ,VQ| a,VQ|v,U>- ,4io[%,ݥKw ,<^,{5 ,5e,H ,H$vA,H$j2,H$ (,xHa̧,:X",͒f&,͒f&k,jiQLI *,' ^ ,ӞP ,+@ U,+@ P,:Nb] , ,1P,oM7,oM,b %*,WKz,WKz,+}bZ,+}bZ ,/w ,/w ,\@3[,hf_,+w5K ,P g",P?,)],Oܷ,oZ",o@0? ,\J2߸ ,*Ho(,, ,4Q,b` 8,b`,tK> ",x?B ,dh,d ,d ,d $ , ii ,&8?6 ,'t,'t,B $, = ,;`Q N,M0,K8,s20l,s20l,GR ,me,Y? ,HUtC,HUk#,Nw~Q ,/,/,+~VT+ ,<0~4",[w ,1 ,B) *?R,B) * Q,F,tb\2,tb\b,Σ$,Σ ,R ,9GK ,-1 ,`d6],BRָ *,BRָ ,ǶN/,Ƕ,Aq[ (,t$ smFR ,ȋ 7|,wͲ H,wͲ c ,˦ټ $9,˦ټ ,˦ټ ,T # ,̺MK -,^ S,ٙP0S?,ϓ[s,/ R ,^5 ,^5 ,^5s,^5 n,^5 :4,^5 .1,iܾTQK,iܾTQ,ЬS,UxN,%bQc \z,%bQc ,%bQc i ,'s-t ,'s-: ,xU- $,ѳx넎u,ѳx넎`,ѳx넎,B,+r$V ,2I,Z+ʹ ,^S,^S #,u` 1,chH] ,pz]",A|, ,k3#,3TU ,&*,&* ,؊8mM|9,؊8mM|S,؊8mM|,؊8mM| ,إ:G [ ,ɥz,œ 3 rX,œ 3,ۺ f,Q,ۺ f,,ۺ f, ,ۺ f, ,'We9,JF ,"dl ,ݿ):.v ,ސ] ,oi,oiK ,ӈZF,a a ,UN  ,rD ,!W ,s?= ,ƾU$Y , <,.1/&R,9)r ,uݞ'[C,uݞ' ,U ,`x,nЫ#?,-$\,-$K,,4ge,C3,@;a),@;a),@;a) ,@;a)] ,8m ,PUMD,PUM ,& D,#Y ,#Y? ,0 ,T,f N,ECJ) ,ECJ) ,'3[,'3[ ,K?-,K,3m[,jԶ` \, oD +,!s ,u ,%SF,LwlD,Lwl ,8tńk ,  ,oS?,oS ,oS o,oS +,oS i!,͕F&:,c%oPwv=,Z?,Z,Meh,Me]_,Me-,»[ ,»[ 7,G(S,G( s,<? ,C~&,x7I, K%8, K% t, K%>, K%-, K%&, K%D ,Ly,D ,Lq ,c:v, 3c,K3Y)? i-50-K,(-8(-))bœD s -Ob7 @-Ob7 5-e5-e5 -b|&-b-f!\n-f!\h-f!\-f!\ - < -%| a- ).-\N-K`n-2 ?-2  -߫ - ._8 - r%\,*_- r%\,*(- `C- ^w[' - g \- ] -S'--n75-n7-n7%-.hQ-.hQ-.hQ 1-.hQ-9WR -mqt -o "1-@߼X-@߼ -Q'r-+0F)*-%מBT-%מB -'] i --c*v -C6g -A1⨊ s-A1⨊ -#pG-Cc9-) -6-BoK-7Us -7U i-7Uj-7U? -7U a - 0i?- գ#xQ- գ#x\- գ#x=- գ#x- գ#x-!$ s-!=D-!=-" A+ % -" A+8 -#lWt -#p= ,-$gD-$g -$#---% ?q" -%-9j -&+Ė/&-&+Ė/-(d4Ldi-(d4Ld.-(w]XcpR-( )%-)Na0 -)q1I -*rzv -+bć-,P/$b-,P/#[--=X^ x -.W(-.W]-/%" m-/Y-/ Y-/bf-0UV(P?-0UV(P #-1t -2' -5N-5N (-5N{-6NwR -7P>1 c'-7@R-7k~0 !-8aJ?l-8aJ r-8aJ :-8aJ 6-8C*j2-8C*s -9p-RqV-9p-Rq -:kw aK-:kwR -:rS$ -:|yY`u#-:|yY`u!-:ԞC4 R-;K -;K-<1 -<1?-<1 s -=l=W-=&-->}aps->Ňm-?<^]A-?|DD!-@eu]-@eu"-@eu-@eu-@JIR -@JIR: -@۽i $ -Bfip'j?-EW $-EW -EWt -FuI%-G{ -HiA[!{-I3"cRi-KO(Y ;-L& =?-LD -M`XY-M`X-M`X -M-MR-N`/ -N._ K1-N._  -N._ -Nd?T-O>!Kv-O>!K-OB8 -Q= s- ,-Q=׉=1 -Q7b? -R-SvѷD-Svѷ$*-Svѷ%-Svѷ-Svѷ-SR-T ;n2?-T ;n2 -T{[-U; ?-V]-V}?Nʌ -W*;(8-WO-WO -W p" -XTb) -Xn =-Xn -X띄S-YYp -Yk-ZQ2,q=-ZQ2,q-Zڅd-[Vol?-[2jA*J -] S -]!s)-]! -]! -]! i -]! -],pcP-^dP8'-^k -^XWF -_o/GG=j -`D혆 -a ,*-aY &;peL-aY &;peK-ao` -a~g -a/o9-b]f -z un?-zCQ -{ }^-{"~C ,-{f g -{>o_ (-{>o_ -{>o_t-{>o_j-| &X-|1{Q(h-|1{Q(j-|E_@q-|E_@q -|(Hu -}SNO-}1D-} )N -~{g/9$-N9@$ -N9@$ -se+-`mtr3 -Idc| - ݂ $ - 52-TT \-Q?#d?-1:-1:  -1: -1: e,-1: "-1: i-G: %-8-̉`&-̉`U#-}ibrj-}ibr - ՞ .t- ՞ . -.(X_ -{|qj"-{|qt -KyE-5jX -\.-u R-(9 [-(9 [-k ;6 -k ;6 D-*ևQ -3]s(-3] &-3]j-3] s-3] -)-`#gYK-e /-e ((-k - Pt -Y$Qڰ s-~56#cf e -b  -b ]-4f?W['-Ev ->/W!-bP -it:->ik-/j -:m]L&-:m]Y-'+}j-2(*v^-äVGm =-wr-2x[? -ƭl:K*-ƭl:R -@- -@- - -ʂ0Y/-ʂ0 -^v0-M9Y=-M9-iϙ0K)-݇#s-݇#X-݇#-݇#tD-݇#-S4 ݉ -͞sJe -ͽY ;v!- N -:"-ϭ06 - # 9- # .- # -^&| -罴0M &-罴0M-dU, -_# a9-_#-눮Çs - #V- Uc- U+-.&a$ l -vWbk ->!-G{KK-Z@Z0' | -2uk$-Vs-|  -Fo~>-owLt-owL -ᑬY -LhR -?b -?b D-xs6*o -g!-g!D-g!-[YQL$-[YQLQ -m@-65j-MV+ -ʾZC-ʾZQ-B&.GA.G .G?;.YRf} $ .ֳ \.YڭMb .ug$'.ug .ug .\C.y.sl r.lTP.lTP .lTPf.lTPt.oH.Dz jQ._.i!_W['.uS.Vh> . e܇B. e܇K . CN . UST $. >'*0. gP[ .^x_.Ҽش0. vY_.qɋ $.S0Q.S0D.S0).S0S%.S0.S0L . R./憌Pvn.5M9Vrj .:&. .I! .W`t#.W` .=bh.^ $.uw .uw e@.uw c.uw .uw i.VΗj3.h .[K Y.1Y .1Y .1Y? . :Ŧ. N8ԁ74. r׈ -!. 3.C. 3.C .!*t.!* .!* ."f[ a.#7f3 .# -.$h.%EsX .&6@7.'/ԕ1@k $.'l I.(F,j`.)>x6wr .)q6.)q6 (!.) {=.) {=G.) {=Y.)H7f  .+dԜ .,(y!".,(y! .-a3.-.- e:.- :.- :.- i./S Y ./B%PK.1gk? .17sܞR.1e[  .1([L.1J: .3g p , .46r;.4m+7 .57.6Dv .7y%m %.7y%m".7y%m?.90nms .:0^% .:Id20Q I.:ed .;aL .F.T-PŘt.T-PŘK .TDO cn.Un&GSe.Uךv=:.Uךv=:.VOZ/! .VcwR.W1\^?(.XISdR-.XISd.X;].Z-g .Zza! .Z.Zkv.[n .]Fb?.]IE? .^*jT#.^ J._I 8._I 8]._| ._ҦUEG ._ nW._ nWL._ nW_ ._k=E? .aڽ.b1N&.cc3?гz .ch%*7.ch%*7.ch%*7 .dzȉ .d㳜< .e!騧.fs .fYX .g; ,.g;.gAxh :.g= 1.it .it (K.it=.it /.it.iڪΩ l .i,.j!38C.j!38a.jRʦfcj.l ɣu .lY.lbbL.m#|.o(jE- & .o'ɧ t.o'ɧ k .o{ȫ .oKh! _t.p%tW7 ().p/V7ő.p/V7ő.pyMR.pոx?.qB-pH ,.qB-pH $o.qB-pH '.qs .s\@\ $.sqzR .skȉ!a.u 's .uת]O?+.uI|Y.uI:.uI (.w_f I%].w¼$ .x1 R.x̫ܯ.y|C .y1-U$.y<Y.yU߸5.y,f>9.z-N.zPpr .z$ 2X .zMU .{< vX.{<  $ .{!T .{b @+.|g|Z.|8 ^.|Μ $9.|Μs.|'.|O; .|O; .}/+.}/+.}/+ i.~I8S7.~I8%.  . ~(.ć:s.I#I:t.| ּ \.| ּ s .Ic R .x 3.x 3R .l<|$.QY.@콾iQ.K".WD .76 .?߸ 3.I6߁#.tS .t].to.t.t .,fk .|U t.7 #4.n..RC ..P. b*x#. b*x .@`b-.O5 ^.>:D2' -.oV.\.G,s.G, .6U|.ISWS? .Iܱt.C6U.(s .>ٜD.qG^! $.|ݓS9.|ݓS .|ݓS .|ݓS[ .>#'5.ؤݫ #.. .bNk./ns$.8n>[>.8n>.`j: .qd .m1? .E=.Ąi .9L_k!.9L_k.9L_k .c& Ėd.b*>=j .q R.x`.jT\4 .jA;9?.jA;9 .cZ1 .?.c . 4#s .43.3r:.?x&.Z.MDR_.zr .[\ .N?Ik` sA.N?Ik` i%.Y , .r.ES .v İjs.xoes.oO?s.D''.a.b&SaQ.b&S.V. .tg ,.tg ).tgj.`(% c!.`(%.%$MZ.j].Ё*l?N.Dr3.Kg}6sM.jm?.>0J..>0J. AVU.BλL .ț@.ț@ .O{asA.O{a /Lu1% /]NMR/]NMRR/ j /DЌ`?/DЌ` \ /t$/s/$kZj/| ߒ/ we f/~بb /;CB/Nus/ D/ 1/^/ Qit?(/ Qit / Qit / r<@?/ r<@j(/ 񻅢t / NFR/ 4#/ bA  / xF3/ xF #/ xF / eOPS/3NL//_:x /HrogQ(//p. c2/?#/AϹ/SpA^? /u7k SH/ 'is%/42~t/42~6/42~//42~S/PBG /Q]=S!/Q]=/1ƙR/ևI/(dN /Dmz4S /% /&@zdVI/) /-| \/z]</k: /+Aٗ e./֒nr/>g) !/ѡ<ߢR/׀?h $/7k;P/7k;K /<Ho/N]7/]*/# v.b/# v. L/$Yib/$qN /%tjIJ/%>Ilv/&.?/&. @/&. (&/&./&. /&̭?/&̭ a/&̭ i /'45: /(Ym3ސ c /*1cSR /+8Z/,&[n+ /,>C(/,ܵbR/-!ʌ /-1bj9 /-^6߯za/-^6߯zT/-LS/-Banx/-xAS /.: /.<(H /._BC0/.8 //հ //հ ://հ i/2 \V')/2S2/2S2D/2S2 /2e޽.f/3! "/3C:Zk/4 ߸/4P*k /5}d] /6N/7b1K/74ll /8#}f/9  > $/: Ŝ?/:3F # /<X%/<X /<X /@;H&v/@Jѝ\Rs/A쉖i;/Apt /B/C?Jg r /C? d ,/C? d-/DWg\ */ES2!J+/ES2!J/ES2!J /ES2!J /E 9 j /GZ0u /I(K/>+Z \ /I8 0/I8 '/J*ۗjs /Kq &/Ljp˜ , /LP1/LP1s /L +/L /MF3 /M1U ,/M1U ,/PPZ /PPZ?/PPZ h/PPZ /PPZ a/PPZ /P ?/Q˔}=U/Re20 $/T /ULcRH # /Uj|[/VIL/VI?</VI -/VWT /V/eɪ[/W|L@V//Xӷ/Yj-1/ R/E1 //s/ZtI|/*t3/* /*s/DpD/\* /\ !b /QG (7/QG /QGt//' /H`ju$/TZL?/F2 a/iAt />9 /#R/sN "/1) /䅠~? /Hc-/Hc-] /? /M/M/M /1i/q3 //&iB /+]<?-/1-v9/>ؗ/O/e a /< /yX i/)x= /R|? /R| /zMHV g/;l /S s /{mcAnS /}A^+0s/G #/G $/  /;q([/dvD 5/P]C \/'!KS /&̿ =/ZF[/ZFR /oiv+/oiv+R /i-/i-/J:< /fT ժ /HFt[6/?'uV /. IoX /r6L b/ \ /CI?/7;8Ť?/7;8Ť `/7;8Ť (=/7;8Ť /xE}C/xE}sB/xE}t/xE}k/I??/# /'ţ /'ţs/'ţ/'ţj$/'ţ!/'ţ/Q1W /܌9Wd , /܌9Wd /{^3l /7JC\  /'$tzs/'$tz /'$tz /W'k,/O=KjC/O=K /5MF]?4/g#/~&UZ/|My /C LP/C /C /xجVY/xجV /]-KE; /u届v /#6 /zK(-4/zK(-/ٶ9k/ٶ95/N٭vC/N٭v /"qK /iN0FL /*/YoGP./;wd/%l /cυY/=\s /; m/L22T #-/Z /2]/28/+L%\[ #/+L%\[|/+L%\[ /ňA_nhs/eAj /;=]?/];hq&R/{ӭԠ /{ӭԠ W/Ǒ*aBs/odo /]SvN/]SvNj/]SvN 9/]SvN &/ʺG3 /S /a7 v/a7?/4r/= /=tV/= M/=YY/= /= /͇L Hr:P/΃^Ѐ/΃^Ѐ /΢եO i/΢եO?/΢եOK /lYe /7cK8/ީμ/{K /ѱtc , /'@sN/Һ{u< i'/Һ{u< /+s0S /=8qoY/ԅ9ev/ԧ3| /{E\ZR / /VR,/V/崷 /"%aG (;/"%aG|/Yv* /Yv* ( /ټa@?d/ټa@j/ټa@ $ /̧? /ۥHA"/ݵ `@/ݵ `@ /d5R/UYv4/#`LL/#`SI/#` /#`e/TFkS/TFk/TFkZ/TFk?/TFk,/TFkZ/TFkd/:5 /:5hb/:5s6/:5 5/:5 "/:5/:5 (/rp9N/$4@ </@-^ /s, /W| /+ /5X+ /+H@j /-:N /މ/=s7/zY:Pj/D1L/98 -V/y%$G K/y%$G?/e42 /e42 /l{'/l{/l{K/vc9 /YADk/f/H⇪ /­{ /z /ER $ /bi"/mca ;/S?./QkU}/tܚP/nv2/^#h/Go%?'/.;0znS!/f4'/2% hL /v%'D/2j?/Jh /Jh g /QBP/QB/QB /FFp g/Q#( /)ӓ0a 0a Q0a K 0a  0_CoJ40)QPws 0')ex $0')ex 0ʫxPx 0BW0Bk$0)X_?0۲JZ 03 ;??03 ; -03 ; 03 ; 0_m '0^66n0 %-hH0 PwoU 0 Ki qd'0 Ub>gU 0 ]0H0 F/50 F/5@0" \ 0Uy340х9[.?"0х9[.j0х9[. 0Qo0ȡ$Y 0qtZ]x 0>J0GO0=Tѱ )0}8}'0n9t0%0 96t0 96 0 96 0 96  0o^,0o^20mg ,07L*0/jG0/)0꣺x0\n 0f7 0f7 0f0fL 0n $0n 0`n 0QV20M.f0M.R0M.r0M.0M.0Z?0}<!0}<05O:T05O:S 0R]ms 0R]m 0+OEw 0fYwB 0>+ 0?bѻBm 0?bѻBm0?bѻBm ,0?½;Q0?½;D0@0:wRH0@0:w0@0:w0@2{  0A+4wm0Aky2J350Aky2J3D*0Aky2J30B $ 0CN޽ ) 0F4CX]d 0F4CX] 0F4CX]P 0F"i_~D i 0Gw}Z 0GV8w#Y 0GV8w# 0HTxaY0Hk|  0Hog0In7W1S0K8Wg30L+-d 0MZ"ku[0MZ"ku[ 0MxN 0M}Ӂ ^0M32 $n0M32 0N6t9ݸ ,%0N6t9ݸj0N^"x++0N^"x+0Nf)o0Nf)oL 0N{.{0N{.{40N{.{!0O>}X)0O>}X0O>}X 0O|?0O>@}L!0O>@} 0O>@}S 0PcH 0QET.S0QET.S40QET.S(0QET.S0QET.S0Qwx$Q0Qwx30Qwx20Qwx0R6>q20RAK 0SCah $ 0SCc 0Sjs? 0TVb^0TVb^U+0TVb^0UwT 0U`qU 0U`q] 0VI >%0VI >0W~[. 0XY; 0Y > 0[A0[/qv4 .0\ 8# 0]TBG90]TBG9R0]ӒYE0]ӒYEQ 0^ 0^r740_~*0_r 0`4lݮ 0`h0`h 0al e0bb>0b3 $0c]I&" 0cAj90cAj9R 0de,`4 0duSK c#0d&#v0fZ/} s0fZ/} 0fذNDN0g 0gq &0g쭳jU0g쭳 $x0g쭳 e0hozR_0hD"py0hD"py0hD"py[0it( 0j e 0j(XK 0j(/ 0k\RJ 0l]0ln(S0l+ s0mWs 0m;cv*0m;cv*e0my&DNf0mdFc\ $ 0n%(1H 0nBѵ`0pk%*A0pk%*A 0q-0qAH40r:!0r:t0r: a0r: 0s g(0s(^e0s@K c 0tdt$8_ 0t}NUԉ&0t}NUԉs0tN]s 0uh;d 0w{f44 0xHE(j 0xd! U#0yvfS-0z0 0{+C0{EiX0|Hv0~>M 0~@uC07>@u/0=v 0'kY80&5W 0)ʪa0ok 0B1Y]0t՞R i:0t՞R0t՞Rj0t՞R0t՞Rt 0240yc 0UA g%0UA g 0UA g 0eҞ0eҞK 0eҞR0En0E]D0E0E0Sv g 0్ 0Xͭ0Xͭ0Xͭ 0$gD 0 y5g80ɅK<>0ɅK<0!N 0֍g01&ݮXR 0eOO ,0{۵E&? 0%h~n00i = 0Ti1|0t  $ 0T3m 0c2p 0,l8!0:7~t 0:7~Y0'{aW0oo0j0Gf 0"_#K 0Swv0a\mA0iUC40"+ - 0(&#]0gǾ0gǾ 0 , @N 0Bj)0+ g 08_^&08_^0 (0t0: 0; 0V,0]~00ApP 0 0)mOv 0t 0>60>0>C0> 0pT 0pT 0ԯV3&0Bvj 0ay\i(0ay\ij 0Š[Ko0=vx0HvM (0Õ UN5 0ÿ14Z 0ÿ14Z 05CS05C05C$ 0ĥe,0ĥe,70ĥe,0Ň. 0ݛpk0ݛpkR_0ݛpkX0ݛpk0ݛpkK0>Jl0y.\l 0Y޿"b0]"0ɛY1 0ʐ[?&w0ʖ12 0Z"ܟ0˚ozxRt0ȉR~(0ȉR~DO0̸؃8ÂR 08 ND 0Ux^ 0OuZ 0"v@0ϑ?=(d0ϡ#`]N)0ϱҘyRRC0Ѽhx0ѼhxR0Z.x $0 i0'όΨ 0'όΨ 0֬ǽ+K0֬ǽ+0֬ǽ+C 0?F5#0?F50]BK 0ٔiy<^ 0׻4 i058920 0!*jd 07 1D- * a 1%F "1%F 1q@1q@ 1!1! 1SI, <1ܳ 1 ug_t:1 ug_ i 1 &1 &d1 c3 (1 c3 1 Liǁ?A1 Liǁ 1 Liǁ 1 KTD91 KT1 זg?91 aE , 1 ǪL{ 1 \R<: 1 1{qR1!<fL916nT* ,1 1B|&1B|1sK ,41sK1Bl'yj 1ʰj1h %s1mh:1mh 1mh1mh 1{}PMp1{}PMpV 10gj-10gj- 111 1ȟm1Ľ2nI 1#?  1#ˌ $ 1$Z?P1%O| 1&*eg\ 1&ӁƔD1' 1(2G6L 1( L S1(k81)H[bs 1+\|`8:1+\|`8L+1,Hd]1-kE 1-kE1.`XuR1/glk 1/glk 10Tb' % 12UqK12UqKS 12?Uv12  y12 j12  13[e2N13[e213[e213ڷ116;1 16^pI16b^.L=16b^.L!16 17aT18$W0) 19#=E~R(19#=E~P#198w^}19iqL19iq19iqs1:(-?v21:̈v1:̈v 1:̈v 1;<ǐ 1J{؉ 1>}@| 1>}@| 1@^ 1@^ 1@^ j 1Aī{j 1A婋\o 1B`*1C7dW8 + 1C7dW8a 1C"c Y 1C[yON?1ChL1Dz[41EKS1GL@'f?1JK&91M֓:1M֓,1M: g11N=mR.61PkM(j1P& ?:1P& ?1P& ? 1P0_[1Q)]/gs 1QI4"g۠ 1Q#*1R&J1R=\Ço1Rks1Rk 1RŠĜR1TTd/1U_9#dq1U_9#1V B21Vmve[!1X oN 1XX=D ( 1Z3&_! 1Zܣn1\erf 1\erf 1]7& c1]CDjR 1^ca1^caU1_~"1_wlR1_wl1_. 1_w1_``Jch1`m-1`m- 1`m- Z1`m-h"1`m- ,1`m- ( 1`m- 1ar2 1a{h (1aHZؖ ( 1aϮ8] 1b9lvZ1bz41b 2O1b 2O1cdUE 1cdUE $ 1c~-޽ ??1cv~1d܍"j 1dk ]v1dk ] l1dk ] 1dk ] 1e0ky 1e[)Y 1ff 1gCĂ1gCĂ 1g"~p 1g1hLJK?1hRzZ31ijE?1ijE%1ijE ( 1j.fbbuL 1ji{S 1kV7Н}s 1kvOX 1kAgB1kAg1kAg 1k*1k}"1l 1l D1n{!Ž̻ 1n{!Ž̻U 1n}ڤ1na$ 1oa2+/1pz 4L31qvDʍ %1q kH1re;1t 8emT1t0bD j 1tK1ux? g 1ux? ( 1uQ #1uQ 1v$X 1w3d>w* \1wtK . 1xuD1yQP1y{e!1z  Y 1{ %41~92Os 1~F =1~F ih1~F P1~F ( 1~L1_2=?#1}|5?,1=t~51=t~1M1λGM1(Nh@ " 1L9,rC+1 y.Z 1.(1_ ݋ 1_ ݋ 1uh 1ʿ , 1ʿ 1{r1 1{r1 $ 1eR1`~x $1qZɗ 16Œ3R1'l 1>hQ,1>hQ1ih/$ 1BI1B1LHj 1i 14ZH a 1) A1a'1a1a 1{↽R1{↽N 1k a11 Q1,C`1`hFT? 1-֥Bk 1dd 1dd?1dd 1Nt 1!H[8 1F\ 1 1y6 19? 1٨6 12f 1sL#y? 1+ { 1 I/J1 I/J|L1 I/J 1Wuh $1lo 2 ( 1'4{Oh1'4{O1Y3x$| 1Y3x$  11ݫt1ݫ 1ݫ /1k4][ 1 + 1)f 1)f ]1k~R13g}!$13g}!j13g}! ,1vm\$(1+Y 1>+Y 1@1 (1@11'Q1'Q|R1'QjG1'Q81'Qh1ƃl 1ew f1ew 1~]&1?~1?~1?~N1?~"1aS" 1aS"j 1uS41at,s#1at,?1at, ?1at,$1at,1at, \ 1*:;8 .=1Bwi1a½ 1a½hu1a½s 1a½ 132'1~t N1::Lt1wvUυ0RR1wvUυ0}17L1AUi1R? 1غq8=1)z 351) SjI 1cѡ 1V+t$1V+k1V+1V+ 1}iX$1}iX 1+ys1C8ꎖ N21UnՌ &1UnՌ 1û 1Ĉ͚N 1B[RL1B[ "1B[ e1S{ $31Şw0Zs1ţߖ 1S i1S 12>u2TK12>u2TK12>u2TK12>u2TK12>u2TKd 1K)v1K) 1}C= 1ɫ,1ɫ, g 1ɽ]%_1ɽ]%_1ɽ]%_ 1ʠ ?1ʠ !1ʠ 1ʠ \ 1l> >1˯Yy: 1A_1A 1R鎜bZ:1R鎜b 1R鎜b 1R鎜b 1ЎVnQ 1fuS+1҅zk1 1Bh (1KwR 1YS3 1"CIH>1JZԯs1ϨIa 1_4 1x14D ,14D1٥"v -&1 1>Gw 21>GwY.1M` =1^ 1Ayo 1Ayo , 1~31~3 1z->?A1z-> 1&7 # 1E` 1'R1UJ?*1Pl:7 n1Pl:7 1l'& 1 ?Gٝ 1#^) 1o J1ls^1l1l1,̸K1,̸ 152#1Y?f1Y "1Y 1Y 1HkZ 1G5Pps1ph,1(ٱd/1(ٱ#1(ٱK 2!+2r!+2x ~e 2>3x2>3Q2(G w-2(G2LV[ 2з}^ $22GmiR 29 c 2!j2!t 2hqAA 2^KҚ?2^KҚ 2 i}cD2 /llpY 2 Y7hzR 2 Wt* 2 $/m 2+I 2*$ 2Hx ( 2uGyDR2{G 2,p 2'rϱ s/2,w ?2,w9 2e^# 29V Q2VM! 2k$l,K2o5Y[ \ 2+F/"] 26AN 2_r 2$]#U 220{2b_I2J]w92P9x d 2?E 2n*>2"X 2#~\? 2*"` 2=zޑ r2=zޑj2=zޑ (2`i 2G h2 m8 \ 2!L~ s2!Ab S[2"Q'A2"Q'A 2"ZW{ 2"ZW{ 2#ƈdx i 2$&{JC62$&{J2$&{JQ2$Ju;2%/8*f72&xfMq 2'Ϗ.GD2('~L2)raT2*srv.2*srv+2*srva2*srvL2*srvd 2*617x?2+ "2+ "2+d<2 i2+d<2?2,_I-2,_I2,_Ij2- b:2-#2-#K%2-#2-#Qs2-#J2-#d'2-#2-#2-#D2-#R 2.;S 2/S8 2/z21&WNe 21>kt0o21F,zLe 22e>L 22n} /22K'˔| 22晟> 23J? 242br 242br 24 24pP 24=e:24 a 24!0I 625#q'?26^Wn | 26n ǽ26 {28H~28s28m 29a+29jGa8&2;vJZ%2;=oP52;Q 2<[0|8 62<[0|8 2=tG22==o S2==o s 2>6du/2>6du 2?OKP **2A I # 2A"Nhx2A"Nhx2A"Nhx 2Bo6l 2B'*b ,2B+t 2C 4# 2C 4#R 2CQLҒz12C<)- 2DX?R 2DnΫSb2Ebr[ ? 2EB>K 2F 2Gs%2Gs%s82Gs%t2Gs%2I G2I G2IbU v 2KTwR_t2KTwR_ 2KTwR_ 2Lk,Y2L| gC 2MN4Ue e2MU g 2MO%2N4FD?2N4FDL2NP&ٳcR 2NPjQ2Ni(zc 2Q~2t/2Q~2+2SFj)2U"2U^T (2Xx j2Y( ,2Y( 2Y5|#"2YYNL2YYN 2YYN 2YĈ2YĈ 2YM5@t 2Yq\#2Yq\D 2Yq\K 2Z_$2ZH 2Z%b.?2Z%b.2[[pjL2[[p?@2[id@]} >L2[id@]}?D2\(SS2\I={2\I=s2\I= i 2]=vR"xC2]iV 2](y5 2^0XsQ ( 2_hs 2_~Ygwv+2_~Ygwj2_~Ygw i 2`Xd > 2aָ272a,LU 2aIzt"2aIz 2b7o{ 2b{t?2b{t 2b}A2c 4_;2cot?2c51k<2c51t32cU)` =2cU)` 2d8P*2dJ9 2dE{aQ 2dF/s 2eg" 2eP9>&2eP9>2eP9>2f&A@ .k2fG 2fG 2hF |2i ZD2i Z2i ZQ2k(%l, 2kqVE 2kqVE , 2k})2lQF#Q 2le-7? 2l}ӕ5'2n22nД$ 2q (H9 2r89ly2r89lh2r89lP32t4; u2x7:t2x<l $ 2yC*+2z#. 2zo 2{d@(2|a2N2|a22|j2|j2|:I 2| .2}4YH`s 2~h劵2~!u_K2DgZ2mfi; 2ilDy 2ѽ2ѽ2U)R:2U)Z2U)m2U)K 2NNeR2S\4 2G 82m+2mO)2T}uL 2~xgN2+&v21LR0f21LR0fL2ky w2 2,[ 2  2xH):BB 2G-? 2 %t@j 2Y7@? 2- )2fs 2 2s&(GJF * 2(`t 2(`k 2F]+Z 2%j~.2%j~K2j?2|՘ (2N4Vv2[X : 2  k 2BwjJ2s g2s g 2Z#H $%2F?Q 2.2 ,22 (2 2o\J$2o\JK 2~  27Ldu2{ڸq c 2Rڿj12;  2dv\( i296q0Lt 26CbR02NeQ=v 2fd, a2fd,j2fd, 2/ e2H;# 2AXG 2)s2;s2 2U}Y  22 ^2 1 c12'/t 2|ds 2= 2w 2wV_\ 2{_26\n?#2Kh/ 2.~*d92.~*2.~*j 29D NN2D 2; 2aV! 2TU X2Zh2ZS2ZZ2ZL2/ c 2=+2w$2w2w2w22s  2{*N!9 #2_,uJ2 Vav2 VaR2fK0 2,nj#2,n" 2۔"4tZ2XK 22L<-J 2HyF2N}[@2P 2vl8K.2vl82N7 d2čokO2'V 2y3Ck?(2y3Ck2ŞE 2ŞE 2;N7L 2dVcrR2dVcr A2Lp9] (2Lp9]jj2Lp9] 2Lp9] 2slD# i2slD# H2I . d2(F2BIx! a2<{" 2HM$N2͠hI ( 2#$JG22 /2ф\n ?2F[x2f %2f 2Z p 28< ? 2R<B2R<2ܹ @~$2L@v 32L@v?2Dκ"@2.np 42 Cy%*2 Cy%2 Cy% 2Mpde2MpdE2Mpd2q 7\2lv^V i 22YgG $2YgG 2.{C 2H^ a 2ݠ H! %2! 8dQ/2! 8dQ 2#cU4 $v2#cU4hk2#cU4 E2#cU4s2#cU4 r2#cU4j=2#cU4 (,2#cU42#cU4 2ᇧS?2ᇧSL'2ᇧS2ᇧSZ2ᇧSU2ᇧS]g2ᇧS52ᇧS$2ᇧSa 2F2oi2oi2oi]2%+[j2%+[tF2Whst2Whs:2̜% 22̜% 2_3D'2_3D a2v7/2v2 2y="K/N2^e[>2Bpd$/2Bpd$DH2Bpd$42Bpd$Q2Bpd$ 2ףV@2ףV)2ףV $2ףVD!2ףV 2aV 2aV 2aV 25Ijj_25Ijj225Ijj,25Ijj!2JƷL /2Z32Z32GڲR 2T$.!AL2T$.!A72T$.!A2T$.!A2|:|o22?L2 M|N2 M|N 2)`O3? 22ȔO=O22ȔO=L%2x a 2+| 2+|?2 䰀 2U a#2U?21Lt 2_gw 2E1  2鲨sb2>d?2I04 2oڗ$?2c >R 2 I푸j 3G$ " 3υcЉW3υcЉs53υcЉ s+3! 3!? 3T=xl3Ww֒t3`a"4 3_s|3_s|3]#%~ 3ϥe93e\3e\U3e\3e\3e\e3e\'3e\]3e\D3e\3e\ 3)g t3z}O? 3 j̯3 &p[R 3 &p[ 3 :TS 3  3f4KR3u3JZ %3NZK8G3NZK8Gt 3ٹa<3-^F038_ 3@k3 N3 3'H3v)033v)03 3H0E 3b-@?3r .h3A( 3AI . 3#:?3ܽY#3ܽ (3ܽt3w%3wv3w93w3w] 3igY 3 Td?3rPX 3rPXhH3m 3 %39dDžYv3}-jcy3}-jc3 AR3 Zzfj3!_R3!_}v3"Q2 3"3L 3#wP3#ë\,3#ë\3#ë\R3#yW3$k*m e 3%~޶L3& 6܌%@3& 6܌%Z33& j 3&qF]l 3+VQN 3+{-i3+{-i3+{-i3+{-i3,8$Z3,8$3,%qI 3,%qIj 3,rҭ 3-4q{Vs(3-4q{Vt3-s*se3-s*|3-s*3-6=3.Z'3.\  e 3/k9.3/: 3/&Z30 &31 b31ZY8 $31H31a 32Jj 32IK!j344 %36H ?36k=8% 3:bYVZv 3:vm3:vm 3:^!B%3;Ib13;eEj.3;8ay3;8a%3<~9I(, -3<~9I(, e3<~9I(, 53<~9I(, 43<~9I(, .3<~9I(,3<~9I(, 3=oij3=oij3>zO"3>Z$ 3?| 0ik 3?| x3?|:93@YZj 3Aj׸R|3Abg3A3ArP3Bvi3C=Su 3C=Su 3C x3C xJ 3G&?c X3G&?c #3G&?c 3GfKe3GfKe 03GfKe i/3G\P 3H/bu3H>}3H>S23H>Z3KҚ2R3KW&? 3Lx:[ 3MN:D83MN:3M雹L]3Md2tC 3NZ , 3O 3: 3PK=:?3PZ4+$3Pσ?d#3Q"g 3Q XRV3RYw3R[3RC&J3U3Vf'P*'#3Vf'P*'#3Vf'P*'# 3V@Cz@ 3Vt% 3Vt%?F3Vt% 3VQ3Y=dJ3Y=dJ 3Y5RX3Z? , 3[}g 3[(Bss13[(Bs $'3[ԕa3\g-$ 3\MSۯ 3] zs3_/`2[93aRa~X63aRa~Z3aRa~j 3asU3bVtY3b"lپ* \!3cm3ͯ3d`IN3e\R3e\63e\K 3ey A 3efyj 3eBmL43eBm3f䂦 3fwz 3f;b 3h \u _3j/!zji3j '3j3j 3jj 3lI9@G3lq9ݥ+ 3lq9ݥ+ 3l91=# 3pBZ 3pBZ /3pBZ 3pBZ 3q 43q 4u3q 4s3q 4A3q 4K3q4IN$3q4INU 3qՁ~Rt3rN¥ :3r4f T3r4f ?3w i3xMb 3x d3xm+v3xm+j 3x>R3xk( 3xŒj2S3xŒj23xŒj23xŒj2U 3yh3yh/3yhQ|3yhL3yh3yhY 3z*3z 3zk 3|Q3|Q3|Q 3|7Eپ? 3|Fk?S3| ky -3| ky?3}lC?3}GP3}3ȳ 3вXP 30 ("3 3| 3 3$=|s 3f~/3f~-3f~"3B"B3"UCR 3ҳJ] 3fβR 3 (S3 ([3 (^3 (3! G3!?$3! (3ĴU\3Ĵ 3<Ym i 3);{3 '3 3̈́x?>3?3j ~j3}wW 38r!3p7BB !3p7BBk 3L , 3"ҁ" 3jl ?3hd 3L iY|3L i.3)SI3)S 3~UD 3IG+ 3A/L 3s%c 3\Z# 03Z[3ibiZ3ibiRC3ibi 3$M 3Rzk?'3'3Z]s!3Z]3#6j,3#6 3#6 3dׯ3]j 3<*3+3 3ª3 3ª 3Ogl =3Ie3IeRL3-e 3-e 3'kJnS 3&Gs3&G 3~Bto3vq=;3CfSR3Cv^K*3Cv^'3Cv^3Cv^ 3C3 , 33H7366 4 3Q ̂23Q ̂S3XB 03XB ^%3XB3'*TH $33 3%`} 3yY3yjf3y e+3y 3Wi$ $3Yo"3]# 3' +3'l3' 3'fJ` 3m4 73$w  3XL83n 3BY3 #3BY3 c 3RlX+30pANm3J(+i3J(+3h_[31!313)dA3)dA{ 3B683a 3roc?53roc 3N)3|v3sr锳13sr锳1U53sr锳1*3t3 3t3 3|3Ϸ!3 3G%j 3H3K+?(3K+?( 3iGVRX3iGV3iGV 3S3ff< i3B/}9 a 3>a3>aQ 3*6!@ 3['߯ n3|;ϰs 36< 36< 3@(m3{T( 3ĢM@QN3:(5 3$x\: 3= < 3]7? 3)r. 3  3rƇtg9?A350SO350 3 u 33|RK3eL3e$ 3 & N 3ϩ'MOpK3ϩ'MOp3з<9Z 3n 3\u#3j|.3@1 d3@1 N3ҪF"%3ӒF (@3G k 3{ 3z*3Y K3؊lX>? 3^?3޲uq?I3}4"  3{7Y/#3ር ]3ር  3p 3YC3!F3:Fړ $ 3 JK3㟴x 3㟴x? 3ЄM0_ i 3#l?*?3J 9S 3寣v -3%(j 3*jsX 3+O j3F]I 3~$9K 3$[qΙ .-3$[qΙ 3fM*3fM] 3 + m738㚅+S3?n3[G34%Ap 3=Ҽ?3a%3a3fG |ͣ #3 BDi8_3 BDi8_ 3V@Cm 3V@Cm i3V@Cms3V@Cmj 3V@Cmh 3oe ,#3oe a 3'ו3JT # 3QOGvS 3_), 3Odc$3S3S$3ĕ 3^u~2 3{S7H,31RϘ3393m?3fy )\B3h/{3/j-3t&3:OF| #3zK+3zj3ˠ3kVki3ˠ3kVs3ˠ3kV 35(RR 3M/ 3nyJ9 3˗'?S3˗' 3sm=~?3gUY*3C\i3AY3Pe.K3Pe.64 =X4 = mH4 =?84 = 4IkM*?47{je483:84nSlQ4nSlQZ 4i`C 4B%d a~4B%d $'4B%d s4'7yiU?"4tno 4Σ$& 4f: 4&j4(? 2t4vMR#4 ?.uC{4 ?.uCZo4 z?4 ^s 4 ؄~@?4 Ly$4 Ls*m6 4KM4 4KM44KM4P4nݜ4CI4 4ڮՔB4ڮՔ:4ڮՔ4ڮՔ4ڮՔQB4ڮՔd;4sz4W+' 4Fs [4FsKB4+e% 4h 5ea 4h 5eK4?<4cy !4V4V4B\ #4E^O I4J 4~8t84a7k4j7? 4#Ì4#Ì4#Ì %4#Ì $4|w' 4}~_ /4}~_4=ê4rQ$4%_d s 4ɜg 4ɜg4! M 4"F8X 4"߽L^ z4"߽L^ n 4$8b4$8b 4%kL 4%5 9u4&E9I4&r=4&r=$4'*7( 4( 4(+H <4(ʙFqk$?4(xRRN4(xR 4)>v 4+4+4+ J 4+s 4,YC2&4,P6$4,X{| m 4-;hg4.r9Zk4.r9Z4.w8$ 4.@e 4. AePK4.i #4/<)S40SZv#42gjХ 42gjХ 44?mXRN45[m 461 J 46c a46ct 47*|oBR 47%m1?47%m1as47%m1]347%m1,47%m147%m1Y47%m1Z/47%m147_d}449:|JM44:nz4:O:Lxs94:aGٻ 4;,CE7s 4;.\:4;.\40wv%4?͘&4@ju 4@ju 4@4 Vw4B.4BJ4B=4BS]Y4C!.n$ S4C"58U\ a 4C^k$ ? 4C9 4DVu 4DVu 4D D$t4D~hMFv 4D8R 4Ex#9 4E@C]Q4E@C;4F{ ^ 4F pӀ4F15sf4F1574F154F15 4F15 4F& 4G6g- 4H)4k j 4H)4k 4H)4k (4IX> %4J-?4J`MV? 4JxPO $4JxPO \ 4K>j=94KIүq4KFB.4KFBC4Lw ں  4Meu3,4Mv4O@,P ]4QoڮQ4Q/u4Q9A!b4Qy[aK 4RO^ 4Ss4S#,N 4Tcr%4T1YT 4Tx)vr4T t@_]4T t@_F4T t@_4T t@_ 4Uov!4\RA 4ؕDO*4΀+sR474BK 4R,O?|4 =4}7 a4ܲ G4ܲ GC4ܲ GP4ʗu:4ʗu 4ʗu 4F8 +4 m)84'liR4'liS 4'li 4߉j)7s (H4߉j)7s4߉j)7ss4߉j)7s 4ߌ̱ 4m. ((b4m.j%4m. 4m.4m.b4m. 74m. 4E^Q? 4E^Qs 4E^Q ^ 4%~+4%~L4؝1N!4j ( 4n-1 4n-1 4E퉨R4FadT a4FadT4FadTb 4BJ}2R^4BJ}2a/4T7X 4M' Wa 4}[J 4霭 4tt1( +4골צ@ 4골צ@ c 4$ixnt:4Q4PG4!8m4!8mc4!8mL4|{} (4|{}t4 ~? 4|[d ?4Wh 4 4 D |!4~If 46L)46L) @46L) 46L)Y46 46O46 46?46 4dZ1%4I2"S#4I2"4ߟ;K48 4-` s 4ŵ~C 4dk4 42. e45v< ,945v< 45v< $45v<4^7O 4^7O 4fє \4r'] 4E`Q4z.? 4] LTV74] LTVs4] LTV| 4aOR 4oz v!5FB5FB 5 |5euBj'5euB , 5)5"/5i5Gީ$5Gީ5zRG5z 5n>S5n> 5@SSH5j!+9k 5-M e 5 _25. Z@>5. Z@j,5:\. 5=h^,5=h^,{5=h^,(5=h^,5=h^,R 5zxj 5 DsP5 M~© 5 o. 5 M?%5 M 5 |z#D5 #44F656 X5g: l5',P? 5Iin;?5fǥ[@5ތ_v5T{D 5a5g 5̧~5Kۉ+k5Kۉ+ 5$s5r\#5p^?!5 Eb 5}. 5,z]P$+5,z]P5vX5]#5hG1Q 5:h^Ѷ 5亶GC 5i5Bs*4 5̦ʶ ( 5HJ9`5\Iy$K54Wzy)5n_| t 5~95~9z5~9*5TK 5%K*J5%K*J $5<߽ 5<߽? 5G,' # 5ׂ! 5 n{OL 5 n{O 5!p} 5!y^z?O5!X^ 5"<w6 5"S&Xl (5"^9ڃ5"P7ӎbA5#mbbS 5# 7 ,5#Ӌu S%5%Blx?5%kO> 5%#8|S5%#8 5& <ݽ}?5&Aa 5'm? 5)h  5)%\vn l 5)M7g 15)M7g i 5)aN)5)aN)5)aN)*5)(c5)(c " 5+G%m]5+G%m]R 5+I.\ 5,Z5ɋe5,Z5ɋ'5,Z5ɋS 5-1d?+e5-ҿ/N-R5.A{9|o;v5.A{9|o;j5.I,j<5.I, 5.s ,H5.s (5.s#5. #', 5/g;W&5/^{>50B*cR 51S: S53@t 53TI $ 573 59}S; 59`NF d59Y e59׮U; -]59׮U; 59伧 vw59伧 5:G5:G5:G5=8 5=FPr L5>, *5>, $5>, 5>, 5>,F; 5>,F;  5> 5@7tǪ5@7tǪ 5B~ѷ 5C{K<^?5Cl|M 5D!L~5D.DA5D.5D.5D. 5F&? 5Gr!5G,' ,5G,' a 5H)h 5Ik @P #5IPP (45IPP|*5IPP 5I8s*5I85JL 5JnC 5Jcqd 5J.b s5K8kR5K8k 5K&ls5KsvX805KsvX8 5K}.f?5L~T ,5NIW$5NIW$Y5Oo:pT5Oo:pTJ5Oo:pT5Oo:pTx5Oo:pT#5Oo:pT m5O 5PL0G5PL0GR5PL0G5PL0G 5P{ 5Rv45Rm. 5Rm. 5T-2fA5Tr}.%?5U7xde5Viݖ3PQ5h>iݖ3P 5h>iݖ3P 5iEnYD5iO7 5j{qL 5j{q 5jk+:B 5lt?5l9/5l9/C 5l@9Y*L5l@9Y*K5m1 a 5o4Ԉ!U'5o4Ԉ! 5o (5o g 5p+z>C@ 5s+3q[h?5tGus 5vbIz? 5v7w] 5xDR 5y> 5y> s 5z4Н h 5z4Н % 5{qKQ 5|: $ 5}ŋ/5}}v5 5~&[}s5~f59'Y59'sW59' F59' 5*f7 5q*k5q*k5@* 5;>Ŏ52!Ͷ5Vj?(59:[ c5`B87 c 5OO m 5= 65coWY 5Lns5Lnh5Ln w5PE: 5gZt5gZ 5b{eL5 =V5 =& 5~?L#5E, s5Jc 5Ԩ+J5Ԩ+ 5Ԩ+$ 5g $ 5@WMjJ5@WM iF5@WM a!5@WM59K5e?yM?.5 @ 5~D 5ak{5ak 5 z 5ts* 45ts* m52 a 57 D57 5Ǜ^55Ǜ^D%5Ǜ^ 5_uE|85sNOK 5sNOK ,5sNOK5sNOK (I5sNOK 5sNOKs5zsj 5?ß 5Lh/5L 5 Y 5X9ٻ 85X9ٻ i-5 £|5=~55: 5QM i 5*5sF'gT5-𓴉5-𓴉 5-𓴉C 5Sm.`5Sm.5Sm.5I^!5B9;5,kuS?5e Np (%5e Np 5jCSӀT5jCSӀfV5jCSӀV5D[m5vjc35P2> 5496s5496j54965496 i5L5L 5ΞZ5 \xI< 5ze5<5ϡR35<5ϡ5<5ϡa 5J$ҡ5R)K,|J5D)ܢ 51IԒj 53t5\4?5PA5F*5g.r 5ST5L'5ST5S 5ST5Y5]05k]5{X" i5R.tt5R.t 5R.tk5Y 5? ND6)EUN<6)EUd6 6޶j 6P!N6PA%v 6`>ԍ%6究 62n+966$66$6$ 6A 6r66r6 6Qet 6F&6YM kN6YM ?6YM 96YM  6u| + 6:$_?D6:$_s 6IX 6IX 6 #=[ 6 f<  6 z@06 K``#&6 K``#6 Q6Ŧ 6!Y 67q&WL 6R" 6B{s 6Vv6l5 6l5 (\6l5 ,36l5 j 6sS% 6Z Tv 6zw9R6KqY 6HA_+ 6o& j%6fcc 6,XU<6h6 6]y 6\t j 6f÷:L6&EG6yU=R62H 6| 6?VR?6?V6 3]16 3]1D6˸sq 6E\Y 6O 6 U#q6!wtm>6!s_o@6$E?3 6$f7 6)$=c(]6)$=c( 6*R6*nlcq6*Ϯ?'6,M5N6-\K5z26-\K5z 6.+6.BfKB60?yY!60?yY61 l5.v62pFP 62'#})f64%f /64aXJ 64jb 64(164(Ya64(64q/64qK64a*65{m:OV66*.z66c%q \ 66u<k68e8e #69.I6o&[6;@J 6r軕r"6>r軕r 6>r軕r 6>MzK"6>MzKL6>H 6?*0`6?S6?ߒ~v56?p6AŘ w]6AŘ w6A 6A_t!6BÍJ6C^YK 6C;6E%(#6E˜Y6Eé?6Gf| l6ITs6IT 6ITR 6L[,k> sq6L[,k>6L[,k>6L[,k> i 6L[,k>9 6LR|6LR| 6LT/[W6M֔DB 6Mu 跮Q6M߲_[6Mgj $6M0- 6M0- $6M0- 6M0-tO6M;</6Nkrs6NV7 ay6NV76NV7 i)6NV7"6NV7|6NV7 6N)Y1 6Omu]C6ON $6P?Q& cJ6P?Q&6Q^Ȋh_6Q^Ȋh 6QZse4t6QZse46QZse4k|6QZse4 6Q0pL6Q0p6RES 6SѨz6TG :O6U~ 6Vn2 6W:1 6XEFT6XhΛ 6Yw!?6[6pU6[6p 6\ DG'6^:? 6^Ȋ'}JX_ 6^Z e6_V*~p6_>c 6_>c96`SvL 6`[CI 26`##6c" 6c[rB6c5 6dru*6e`݊ (6erkQN6eP \!6fanMS 6fmCB6i  6k>Xy>6k>Xy> 6lDBPx6m}* 6m1 6m16m1E9l$6p$'K6p0K 6qƱ 6q>K?6qM#6rpN26rw/& (6s,^ 6uf2)M6uf2)M 6uv 6uT  6vI`6wE Q ,6x>Mm! 6xIR"}h6xdT] 6xdB 6y"(Z6y"(<6z1t6&6zvdIt:6{DK+i l6{Ʌid| 6| 6|V6} &.J 6~ Bh,R 6~d 6&pS6&p6&paP6&pd6&pL 6&p 6 iU\] 6_/7Z)6 <[<u#6b 6^ձu6^ձu6bʭt 6<_ \ 6£(u3 6R $D6| 66(, 6/_gN 6 j6Ӿm 6WS@S{6d+ofB6d+of 6d+of ,6_`No6_`76_`6:*D6\.h i6 ~;6)]X6<= 6<= \E6<="6AY a 6_ 6~Û9 6-=-Fj6ύ瓱h6ύ瓱#6ύ瓱6׃S?l 6E9@ 6]196"3ar j6"3ar 16[! 6I 6q?/6ON6+]ؓ 66/3 $<6/3 s6/36/3 e_6/3s66/3 60A3N $6:0;6]$nv6( 6(l6( 6(t6(Y 6"?6>6lX|S 6! s 6$$" 6uȪ 6m9|6m9s6@4 6~3 \6~3?Z6~3 96~366~3 i 6"u.6L;% ?T6oTi6oTi 6kH6Yơ4N_U 6wFt B6wFt 6i6󺿟q+6\1w 6H 6BQ`;Q6r436ЧWj #6] 6." c 6pnHr 6 *6 XIK6 XIKj6 XIK6Snj6Z 6t?:-[? 6s ( 6WtI 6Y*?6`صeC6l1F:v6 o8'6 o8F6 o8B6 o8"6?oJW j6|e@ 6Ũ 67.I 6)%_  6ai.# 6 W{ # 6T~F+ 6T~F+ K6asA m 6u6!o6u6!o 6GbS6Y6km 6P1Uw6P1U E6a 64[CX64[CX 6m7 %G+ 7 ߒ-R 7 QEYR7 jU.7 NU 79o7LUs( aj76>s( 7Z7VL?l>7VL?l](7W 7?üj 7iUq[ 7&(&ݫ 7f̮ 7j 7"KL7{? 7 F  7 7' $7' 7N a7[q 76 74vY7 (yfa7 (yf7#Sb 7|Աf7D$\5 7e 76970 7",a&+7#6h[7#6h 7%##t@L7%5e]_ 7%5e]_ 7%:]7%:]7%:]d77%:]&7%:]7%:] 7& )zDWX 7&NŰ 7& ?'7'c+7(Ⱥ"tA7){|C (7){|C ,7){|C 7){|Cs 7+ q? 7+F &?7+ P j7,SuW 27,ZtR7-p  7-`5wz 7-1[qgeY7.g{h70E70Pun70PunS 72pE;] 73Z` s73Z` |74%# 74m[̈V74m[̈#75w-d76* c764a(76Xj 77:[-77227722S 77iռd# 776Us 79/5Ŭ-79/5Ŭ 79RR79R 79ńI( cK7:,aJ7:,a 07;7;pN+7<.τRl7<.τS 7<.τL7<.τQ7<.τR7<.τ 7<;ܧkG7<;ܧkG 7m0L7@7QF^ a 7Rz:2 ,7S ͯX 7S5gI7Uu+7U ҟ7U1d\7VU.$7VU.7Xwϝ7X7Yc7[ǷS 7[GO|*7\V6i7\V6i 7]u 7^f% *7`.(uR 7`.(u 7aAR+7a3FIO07a3FIO0]7a3FIO0i7a3FIO027a3FIO0+7a3FIO07a3FIO0Z 7cBG'ǵ7cBG'ǵS7euA*# 7e{] 7em2W , 7e3c7e3cL7f OH D7gK)R 7h _ kS 7h‹V6N 7h‹V6RW7j1o\^27jzv 7kQtt7lƢ~} 7n{?7o=W0U?7ta6jM7ta6 ,7ta6 7ta6 7t-Wf?!7utǩRh7v| 7wHY 7x6F 7x&xZu7xʦY7xʦ7xʦ a:7xʦj67xʦ 7y fS7yQ=3 \ 7yF i 7zPY? 7|)c2W<R7} i7}8aWU7~@0< 7~@0< 7~]*7t]7~]*7t7~]*7tD7~]*7tl7~]*7t7~]*7tU7~]*7t7~]*7tL7~]*7tZ[7~]*7t%7~]*7t7~]*7t7~]*7tS78ʹ%Y 7`gO 7{j#7?bD97J[ v7J[ c7J[t 7GN 7=?7Ӓ7c7,Ck.7^8 7m= 7(hJZ 7(hJZ? 7(hJZ i 7Ad89k7Ad89 7`$F7d-< 7G+rZ7\gu7bʾ& 7bʾ&va7cK 7Y(!>$? 79؎b7^ø:3 $(7rݮ #(7rݮ c7Hms7z:) 7FtYG7Yʊ!7#5R7udͯHZ7cf7c M7c !7c 7hWS07hWSK 7hWSS 7詖K7Z87Z8g7ʉi!R7ʉi! 7ʉi! 7a.:k+7B7g}?7. 7Ֆ ,k7 !t 7$L7gI7g87gR7.y 7!wP7S#7˓W#7m e77m7@c 7!Qբ 7!/*" 87!/*"7)1?m7)1 57)1 7tK+7te-R7lf7lf 7lf $ 7lf 7P?6 7Wy%K#7Wy%7/T4u 74xP8D74xP 7XD1L7jj7j (7jY 7j 7j7j Z7jt:7js77j a74}ϛ 7p7p%7p7pjD7tV 7#!?7#!? 7#!? 7cs O7cs  7;u7E?|>7E? 7Td7C4oM7^>F1)7 7Ђ 37JyE eg7JyE (T7JyE i.7!^` Lv7?}:7= (7= 7ߠ 7 Ҩ? 7Re~ a 7 ?i7&Afq7/ M7/47)Y 7)Y 7в 73צ8N7=( 7i;g&; 7kH57ԭ 7!Jjz 7z۩ -7K- ^7ZU=?Q7G 7L~Vr7Â7vg17ć/ 7ijTc 7ijTcjn7ijTc?G7+-tU 7yHj 7-;7>Or 7]w $ 7!B4$P7ȓ-77p..wN7kT&L7kT&<7kT&)7kT&(7kT&'7Ɉ3 7_T (7_T:7TrBJn7>s7Pz7Pz7zJN 7<h7]\ ?7~'Qb7ΕM0  7Ξop 7ΞopK 7ϞR̗ 7Ͽ;z ,7 w s 7 K 7С\iGK 7\ 7\t 7ʫ"aF7s,<R7oz{#i7ӗKW? 7oSY&7oSY 7ԆGsJ7ԆGs7-ǃ 7m'7[R37Dbl7Dbl 7i ,7RKZ7|9# 7ۻwu5.7ۻwu5.Z7ۻwu5.7ۻwu5.75?f7vV7۪7۪ 7~ 7ʆADE7ʆA 7;?}>7}ȗOt97}ȗO77UieW 7Td $7t 7潬ޥRn7潬ޥ7潬ޥH7潬ޥ7gUN 7 YШsk76= _7u>j@7 ( n&7V[ 7RO7赉kxIN 79 t7 NMDp7͝'R7'{_&[97TXwv7TXw 7*u 7 7~( j7QՓ%7Y5٧7ש^ 7dE) a7z+o 7O(7fb` 7E;JY7&?7& 7m?7gl-.7a< c7a< )7a<  7 _e 7 _e 7 _e 7̟?gK7;҇+"7;҇+" m 76޵276޵276޵2K76޵276޵2D]76޵2<76޵2176޵2R7P37A3Q1Q87p 7Qt| a17@4q7Ly񝮝R7Ly񝮝7l YV +7!L17:) 7ms 7G 7? 7_Wr  7H2 (7H27oU1  7wV7}_h a 8+k8 i 8]# 8]# 8G_978e?a8e "8`?'{ 8Xf? 89φS8^֊;8>U`)8{!Q/ ?E8{!Q/ 8qQ $8 q 8 #?8 j1 8 j1 8 ^ 8 ժ  8 L{ 8 yX_ 8 Ҹ8 ^8i1tmK8߶ 8߶ 8j68j188v8ex 8' #8fJ} 8 8Ec8nH8nH 8W$8;Qj)8G8(+͚R"8(s [u ,8(1ۉ $8(ri: 8( -8( - 8*û* (s8+-< 8+-< B8+-< ()8+-<#8,/_ c 8-6Cd *8. LZ 82v3?82 83#.$ 84`f 84mDc% 84mDc%s 85Am87s/j87s/L 87+! 88qj:88qjP388qjR,88qj 88qj] 8:=}8<$P߫V'8? f=b:8?2/8 98?2/8? 8?w 52 8?N 8@{8A|# i/8AD m# #8Bp Q 8CT 8D:u 98DeA=#8F\Hp.S 8F\Hp.L8JIjR8Jcv 8K~4 Nv8K 4+| 8LZ_?8LR1$!8M )ƕ%8Mذt1-Y 8Nkasn8Nka ( 8Ofq8Oϥ $ 8P e8Qy8Q 8d}X , 8d?8d 8ds 8eFY58eF )8e G8fhXb <8gps28g58gtZP_8h<"6wrt8h<"6wr 8k wqMy-H8k11K!8m K8mKz8n?Q 48n7? 8o8 V#8orrkN38pЧcv9K8pЧcv9Q 8qnE7]i8q7.N 8r ɇN8r ɇ'8r ?[8so Z $ 8sVK 8t3*SF # 8tt%8tBZd8tBa%8tz/ 8tׁ< 8vw^-X 8vw^- 8wP T8xB Oa0?8yTx?"8yTx?h 8z'l$#8z'l$8z%ѽ $88z%ѽ i8zgZ8zgN8zȭ|38zȭ|a 8{ E8|zu=8|zuK8|zu8|zu8}bteHp8}Cy_ 8}7 R8}7 \8~/L8~õ|N8~õ|R 8~õ| 8]a ( K8lL8` 8;:_#:? 8-[8=8M^ޓ8M^ޓ8M^ޓU 8 8%eS8ԇ`^[ 8PxX 8@=?8@= Z8CIv8pFz:(8pFz|8pFz \8d8#M?8TC 8V⧠8XR 8+hDmvU8 8Z9$88(Nd 8}c # 8!v8!s 8FrյR8Frյ@8FrյK18Frյ,8Frյ8 = 8IW # 8K8q Sa l88o688oQ&88oR#88oK88o 88od 88o 8Et<88k8 8zP8(r] c 8L%8b8vzTS g 8?pB]S 8-& 8rP98rP8f٘8(H3 8~388L,8Nz?t8͙W6 8͙W6 , 8LF8ړ 8ۄL8%5qs8B\u!8B\u!k8B\u!98B\u!0 8B\u!t 8څ^8څ8{ZK8BC8Nv98"؄R 8\Ԫ8Ǣ ,08fS8f 8D.S8D. 8X 58#,;qR 8k!$6&8B x) 8j | 8"T ~8%%bN8g?8#өs 8NY^d8NY^8w=N8z/ ,8p c8p 8tR8%7tv68̾ԏVq8̾ԏ 8;u 8<<8<< 8yW 8dă8ią? 8't 8ahFՕS 8Hb 8g?vz&!8g?vz&L8JhH -8JhH8JhH ( 8?RXR # 8)2 j@8EI 8 G 8g۟;38< 8s 3v8ƬH0cv8ƬH0c_8ƬH0c8ƬH0c 8@N8≿ $8' 8'? 8bCkU8bCkK8ʖt S8 I"nd: 8GL-8pvi n 8˯T~ 8˯T~t 8˯T~j 8ڗ:8ڗ: 8Ui$ۼ )8Ui$ۼ 8gY 8gY g08gYt-8gY i"8gY8gY 8Q!" 8Q!" , 8VFr. 58v93 8ΗL( 8ӿ[>8xzq68#ÃZ8M !8ўj8ўjj8 x8 8Pm b=vt8r݆. 8x!8* 6_(8* 6_(8* 6_8E܃W"8E܃W 8D9e" 8qõqk8%X( 8]_ 8ڮ54̎ 8?} '8?} "8?}  8a׿kj8yo ,8ަbj8LOL l|)8bxa 8bx$ 8J~ 8qC+8ކI\h , 8C/ -8`2t*8`2t&8`2tt 88Kt&8*eu -84<ϛ 8~ 8X֪҆[8n] 8SSR&8V_8矘G8 8hТڳt 8hA?8B??Y8v?8vb8vh8vT8vj,8v 8{= 8{= 8A38A3 8쎾tR 8쟍jl2@C 8[{D E9 }Sg  9 s9tɍ #9qMȪ?v79݀a $9Iaƥ9Bԡ"N 9Bԡ"29Bԡ"19Bԡ""9Bԡ"9No!N $9No!N 9K?9'j"9's9<"[L 94{|R94{|C94{|9}1p c 9~( - 9vmg?9vmg m&9vmg 91% 9]P89jY 9=EݷL 9DXRt9c)v?m9c)v \g9`>9I+yLz 9G))(NS9G))(N eJ9G))(NE9G))(N 899jZ9 b 59@ŀT92a?+9챧6N69 f]eB9 [K)9 [9 [R9!fR ,9!Lߥc i9!Lߥcs 9"4. !9$W4ȝv  9%cr[2r9 9%cr[2r989%cr[2r99%cr[2r9 9%cr[2r9 9&,yc9& YJ ( 9''j*|9']VgR9'lz9'ݹ+9)&%&9)&%& 9)TfA?x9*@ 9+ Ns9+ NY9,?k + 9,, 9,qw 9,qw }9,qw 9,qw mr9,qw =9,qw (9,qw 9-}QYL:9. yC9. yC 9.gF , 92fA?92#94ͥALe_94D94K94R 95$QA $95$QA 95$QA g95$QA (96Os i)96Os ( 96~P4 96xs ( 98M99QU2R99? 99j 99dkR99dkK9:j 9:j 9;BkMf9;BkML9;BkM 9 9tоD9t,mw o 9u2 9uW h 9u9ɉ i 9ux),9v$S99v_^/NI9v}.P&$9v5X & 9vQ'  9v*Ng9v*Ng9y9R9yڗ9zekUU9{PyK)9{3j$j9{8M669{Leu| i 9}k28 ,99}k28 9}k28s9~:hF 9+B 9Ⱥg9Ⱥg9Ⱥg9Ⱥg 9Ⱥg 9G$9MHsj9k=R9"~ ] 9M8BY9wP 9$ޣr 9*9*9$\^ 9úk 9" \9"?9"R 9&V؁PX9&V؁P$9.l{?[9#o7R9#o7 9#o7 9R~9]29"u-9"u- 9 F zM9f9f9֩!9֩! 9hP\ 9\c 9$B"9$BK9L& 9& m i9wb 9h_d?9*po9*poL09*poU#9*poZ9*po9*po 9+L&pQ9+L&pR9+L&p9+L&pG9+L&pK9.n' 97xM9^ρ.W+9^ρ.WL 9r > i 9KNB-9KNB-9KNB-V9KNB-S9KNB-J9KNB-;9KNB--9KNB-9Vԍ\j9%qb: 9Mx6G9%_9Mx6G9%E9(vs9Z ]9Z ,9&99f̾T 9FP`:9].9]9]99R9OE eW9H89b'T"9b'T"9LL 91'9 9ށ|9W  a 9?de 9^W>#9^W>9]lDn9]lF9]l09]l9Ҷ 9Ҷ$ 9R -)ڙ9R -)ڙ 9R -)ڙ 9R -)ڙj 9 9W 98> 9qP> C9qP>99qP> 89qP> ,*9)CN? 9 79ڕZ 9.߿9.߿93=;2R9Za9Za 9Za 9L> 9}rml:j9Ѓ C9Ѓ' 9AjB9Td98&I 9ӂ</9{vq9Y!t>9Y! 9Y!9+4 s=9A/~w?9A/~w 9HpP( 9@^;1:9ϝ>;1"9ϝ>;19ϝ>;199oB9@2$;vd9@2$; #9пRr$R 9s 99 DQlJ9 DQlk9 D 93 (939YSj2 9҆x޿6 29҆x޿6j,9҆x޿6?9҆x޿6 9Ӌ`u s9ӽ|r/ 9Ym23D 9Ym23 9lS0U 9Ԧ s 9ԧev{ 9A{9BMa9D#9t4] |9%H%C9>H%K,9-چC9cSK` 9 (9tM9 -9Y9Ók 9Vvd! 9B8q ,9B8q 9B8q 9'S9 a9 a 9'>܇# 9ؖ$ 9Y|E9nt =9ʘ6)9sSփZ9|k7j9|k7k9|k7 :Xi(D$m:A98N:iI] n : j1: ": (:  : $ :o3(:o3 :o3:o3Q :^b :y Q0:ץ:ץK:oj { j :t%R :apz:GgI? :P ]:;_K : A: A 8: A": A|: _tt: ZD: : k+j : Z : JX;tE: JX;b: JX;j: JX;: C[9:5;19# :3F:3FRp:3FK:} b.KT:m~G!:U( :EA :3ѐw:b:;Ի0:;Իd :;Ի :  - :X44@:Kפ :h.Y :( Jd :} , :J:^Yh36:^Yh3j:OT; 3 ::Y?Z:sw l+:sw l :!RP :"]֡:" .:'ľp:'끮h|-:(%`g:)ާhb:+~_oJJ :+T g :>` < :>C :>N :><:><^:><R:><:><m:><K(:><&:><:><:><Q:?fz ^:@ :@[ Ca kt:@[ Ca tW:@[ Ca ):AwTZ :DOԉ"2- :DOԉ"2- :DpOi :D4#?z(?+:E i:Fnl :Fk({G iN:Fk({G \ :Fk({Gst:Fk({G :Fk({G ( :FЮIۄ :GJ5$:G[B?W:G[B S:G[B ( :H-f i:H?Rb:HY8)z :H&A:H&A :H&A :HDÖ:HDÖB:HDÖf*:HDÖC :HDÖ :HDÖ :I6{ :J-Z*)Q[M:J9(i؝?:JTe,Q :JV/qR:JV/q :JfWI #:N'/( :O2lx/ :O2lx/Y :OM O:OM s:OM :OM (:OM h:OM g:OM :OM s :OaIV= :Olމ}j :PsI :Q_0 (:Qv" /:R>( #:RǑ' :So/:Spo潰:TJbfX:TJbf#:TJbf!:TJbf:TJbf :T.F :U R:X=b":XP1:Y5}ԟ :Y:L:[SBӧ.:[zFz1 d:[Zc Q:[Zc:_)W#s :_q:FY:av=-d3:b)T:b)V:b) :bT[:bT :dEX:eD&;s :eϋ3?:faR :g5/!:h*k:9:h Y/:h Y $:h Y:h Y ,:h Y::h1i :j=ߜ2N:j?3U a:j?3Uv0:j?3U $:j?3U ,:jԾ[,R:kxP :kxP? :l 2 F:ll71:mu`_T7:mu`_Ts+:mu`_T , :n .:o 29?:pKL:pVr? :p>gd#R :q0(w( :qOp:tS]?+:ubŊ^:u^  :vo3yO ( :wM7͸:xz :xzL :yQD1?:ze5|:ze5|U):ze5|":ze5|]!:ze5|L :{Ln~PS :}Q(C  :}ts:~!( r :~y| \(:~y| \R:~y| \:fhk :fh i):fht:fh (P:fh:fh :fhY:'I}jj:l/ l :8ȶ:s :ֽ g':7W+?:Rs:R /:R:Rt :$-Ag$:$-AgR :kR:ou (A:a:}j:tRx :i.:i.Y :Ca>:Cab:ӟ5 i :-3:Chk :{R l :© :{Zt- \ :;W. $ :^Sr :kowYbA: wd :Z(b`?:Z(b` (:: :z ?:9 :' ( :z ڝ :L:ZU :ZU :ʿD :a:F 6:a:Fs: _ : :ґpcj:ґpc , :ٻRpf[:<2]:<2K:<2 :F2.?<:7YK :h"x \:S:7R :9W^p c*:}BK :$y :ޭTT:ޭTT:ɪ :`.VDR2:`.VD1:?&:?& :#$Q6?:]o]:IL4j,:IL4:p;b :[]: :d/9t:v :TuF-G:TuF":TuF :5IS:5IL :VR:Wlt:Wl m :df:Ť <:0 ,#:0:{$E :#i+ :}g !:_PYlB:_PYl:G3 :_{ӇR:?z} :T> C# :"v%:K!<, :U :Kp::‚W8 :O e:O :RmN:Rm/:ēaat:ݓ;t :EXT :EXT ,::֦*^ :c#:c:Öwly - :$:^ծ :vUN :,5Ȣ:,5Ȣ:,5ȢR :ox8v :WCw i:WCwj:WCw :߾0}:G6?:뎩:MRX:MaS:MB:M$:M:ML : 3۸B :S~[:.U :?A5:?A:8RVmoYv:息=9J:息=9$:息=9:8o:5큉{:i]^.:i]^. :誝M D :k?:k `:k $H:sp ::- :Iwt:90N:iR :kaE :>6$#<:>6$$:# ,:x\Z1C :`K) :RxϢ :RxϢL:RxϢ#:£kfR4:jK8:s ^,s :콚 :^IS + :DXF a!:- ^ :- s :OQ ,F:OQ >:OQ ":'_Y:lb :ck\T:ws+%?:H񣜌 :H񣜌 i :w)Ps :|: 4b5>: 4b5>: 4b5>b ;Qb7t ;_h> ;m(*;m(*RH;m(*";D!;dR;. $;2 aO;2j$;2;u0[Iw;I)C ;TKK3 ~;JS;>nC;>nC ;WG *; .); oK1; KT ; y1J ; y1J ; B5; B5$; B5D#; 2u(PR; 2u(P; 2u(P ; [D<;  ;~$;y?Wj;"c;;*#aA;*#aR7;ݻI ;ᝳq;lBiP;aPW - ;kit ; N; ;x=)] ;x=) ;Ecs;sUH ? ;q~e ;qs;q ( ;WfrQ.;ǰ? ;p-ؙ ;/~ ;/~t;dAy &;dAyt;dAy ;-Hc-;=k?&;=k8;ע R;إoG';إoG;ՆK;|zf ; ¿MY; ¿MY/; ¿MY; ¿MY; ¿MYV; ¿MYL; zj , ;!vJd;!!+ ^Y;"(Of1 ;"(Of1 ;#q a;#q (;#q ;#q ;#q i;$6j;&QՖV ;'I\X;'I\;'I\;'I\ ;' / ;(Qbb;(Qbb;)rM0?;Oga;OgaR;Q d;-O;Mr5dZ;z{U ;.QRRj;:#LR ;>+KV#;;VN;Y] K $;Y] K ,;L|c?1;L8*?,;L8* ;~`U ;~`U U;~`U;Vs ;80 c ;= ;[pd;[pd;Ν-AhzK ;amb]?);amb]R ;0bAP ;4 ;Q/s;̥s8l ;|oO%;|oO%U;+g ;>7 1;, q;, ";,? ; "/< ;=hPQ.;=hP ;81K;:!B\;:!B\S;:!B\L ;<T;<T;1 ,*;1 ,*;1 ,* ;:;(;';;ςV ^ ;%JZ3;%JZs;X6 a;3 ;3 <;3 .;3 ;3 i ;3 , ;|ΎXvR;͘ ;:;$zG;>VrJt!;>VrJ ;>VrJ;>VrJ ;>VrJ m ;*]" ;;*]";ZbO 6;e<| ;(6 ;5;\K]B iI; ڄ;N.!;Q;{s ;>zt;cƅ` ;[g#ت ";0w.;0w;0w ; b7 ; b7;U6 );U6 (;U6 $;w4F@> ;'Q)N;[KP5;[K * ;oJ ,;oJ ;ỶD!;-sb ,;-sb;-sb;-sb $ ;;AA * ;43%; b; Ej ;sPi<;sPi6;sPi+;sPiQ';sPi;sPi ;3;´[p ;^@IN;AYZ-;s_H#;s_H ;"5;Ʊ}Dǵ ;>I|";xr@l ;xr@l 1;xr@lY-;xr@l ;ɨP%h ;锾4 ;ʒZ:7 \;˓Tdl;˓T.;"M, ;{f ;ch5 \);zG#^K#;3aP ;@v;Ά^BPQ;]d);= 1V; ;oR e+;oR $;oR ;oR  ;u>;אRY%;ײ{d,(;NZ ;طKl-;طKl ;لξ}j);لξ} ;<ڣKj ;7[ ;ܬWjl+;ܬWjl ;࿜0BY ; )H;K h_ f;#,wt ;JP;J;Jd ;J ;5e7Lp;R;aH> ;K/l;K/lj;D";N`;į5;į5 ; `nm5<Bra<Q<Q \-<Q s+<) <^5; <g 0At<As a <[<R{w <Kfd c< k~r>0C< r4< r4< r41< r4 < yxL@< yxS< '< 7Y< O@J=9 <DᓷC <q3Gdd< t({$<>T $$<>T <>T;02<[r<\ C3<\6z&0F1<\N~5H<^ E^ <^  <^ͻ?N s"<_M=LX<_M=LN <`zEI!vG<`~"'if<|L<|Z<| <| <| <|?@ $<|?@j&<|?@ <|?@ a<|?@sX<|?@ (><}\|<}\ Q<}\<}\<}\ s <}09 j <} A<? <~&4??<~m-S <~m-Y ^<rR*<LJS<㠟b ?< F> 2<$Wa=<$Wa= < "<AoN <㏋}%<㏋}s <#|<|Cg<|C <#b<#bR<#b<#bQ<#b<#b <>Οv ,<6y /Y<6^R?8<{ Q~t Hg(?6=>Hg( =9fZ .E=SÄ8*_=SÄ8*L=e@k8=!~; )=}:RCX=t=6GS =6GK =W>D=W> =_h =_hs=ta8=ta $=(NF =5 N =A =A i =[L=#TA&v=#TA& =#g =&~w=&Vo^ =&Vo^ ='\0 UL='\0 U='_P ='>ѾY&='>Ѿ%='8,f(C ='煅 =(RYR)=)2U =*Hs a =+E0#=,%NN#R=1" =2~=2h{yj1=2h{yP=3b8MZ=4Uˌd =5=v=5vk =5vk=5vk=51=51R=5U,=5U =6'yCuN =65K7ρZ=65c; =7P?=7P =7Q<ʾz? =8l& =9W#:=9)?=:#=:# $=:# =:# ( =<%`?=<%` \S=<%` g>=<%` -=<%` =J>T=@f!=@gN?=A:B" =Aw33=B1.K=C*# =DP@M]=E$X#f =GA =H = =HVV9\j=I"&Ik/ l=JvS] =KOHos=K v =Lo1ﮒ a=Lo1ﮒs=MWk=O?FR =O=*~K*=OVJo =Oa`|=Oa`=Oa` =Oa` ,=Oa` \ =RE`) R =RY =Sc9g =Ts=4~7h8=V * =V\Ņ$=W#~ # =XB4iv9=XgmCY =X~t5q=X%}0=Y͉}^=Y͉} =[!(e֌?#=[2v u=\Lc>j(=\sW? =\̆^=\ϔ5"K=\i`k` z=\i`k`?O=\i`k` (T=\i`k` @=](q ?(=^׊p6?=^׊p6;=^׊p6]#=^׊p6 =^׊p6=^׊p6U=^׊p6 =^/"fK=^0V A =^؁+k $ =_-W/RIR=_AN M=_AN (=a??G=aP_V =eWq&]=eWq&]=foL m=g&bEVN+=g&bEV=h& 6$ =hln =i =i(iL~KJ=i(iL~B=iQN1L5=l^n:%>=mѯe"=mY=mYeu ,!=nA \ =pYKSl0=pte  =q[LR=qst=sB c =s>Y a =s U-=s U-Z=uARxId =uC! =v g=v g=v g[=w6՛KY=w6՛!=w6՛]=w6՛R =x>\[ =zP)b=z݄l) ={(ӟ"K@={(ӟ" ={5={3?S =|B$;d =}{Ng\=}{Ng\ =M-@ =6eSAH=6eSAT=6eSAR=X?}?=mqN=mqNS ={ =O܆g =3_Y%=x= tN =V3js=KDeT=KDe=KDe =[8= += "=s= i==g =_^A,[=!4*=7~n =@t=6(@){ ==b=:i =kSF/=e3@ =<l@ =CX )=Q$ R=&^/>/U>/ >,ߠ>u9 /t6>ew)>S v>ݺ >X;> Rs >d > 3k  > \7l1j> \7l1 iw> \7l1 6> \7l1 > \7l1> \7l1t> 7  >B} ># >#=>#9>#1>Vڱ>>;g ->?">'Rd >P >Tj >P>P >Η`d>Η`dv >>#>>>R >q=Z ( >q=Z} >6Cj >cv[ :>0Ȋ j">q<>q<h>q<a>q<#>q<Y>q< >Vz>Vz , >1( d>a#ZRMR>i >-j5#s>-j5#?>0Cj >[L>$w3 \ >ͳ >!R2|v>"G >"G >"G >$b9 >%m6I >&O=ߦEZ>&O=ߦE>&O=ߦE>&v &>& X>'# >'m)x>(A/:>(A/: (<>(A/: i>(A/: >(A/:>(Qw ^>(Qw>(Qj>)B#IT>){R >)_5 >*l>+,, >+/鰎@S>-UA >-q#y i9>-fL͆ >.ʹQ >/ 䴩>0Z9N >0Z9N>1U6_K&>1U6_ .>1Boj>1jQ0L>2Jӓ $>45 6 >45 6?>4Y4>4 .>4 >4b>4 >54|K>54| >7i?g>7i?g7>7i?g->7i?g,>8¦f >8,j >8z? >: ZN>>;?7y?>< >=%c R >=nn~^/ N>={ b7K >? >? >? m >@0@[v>@Wy|>A_+ٓ >AlߴY>Alߴ>Alߴt >A =p>AߩN1!>Ak2R;>C6d{>C6:>C$C >Dn >Es\>EtJ>Ek/>E >FS Ոs>FS Ոh >FQj>G{ӈYL>Gԏ3>Gԏ3QD>Gԏ3B>Gԏ3,>Gԏ3 >G,6>H& >IJL.|?P>JkLt>JkLt>JkLt#>JkLt >JD]>K oH?">K oH >K oH i>K oH>K>Q'~k>L쩱Ͻ >M`(# >PkhD ( >P{n <>P{n s>P  >PKZ f >QFӋų - >Rs@]L>R*{ e >R*{ >Rw? >SpfɷjG>UyF >UyF >U$VG5>U$VG#>U$VGd>UuFu ,>UF>VPe>VPe>VSp >V,d>X]㇛>XqNj>Xꖶ">X3| >YAA?">YAA >YAA >YP!_ >YP!_ >Z:0{h{>ZV8u ,>ZV8u >ZcE >[(5>[(? >[(N7>\08EIz _>\08EIz&>\08EIz>\08EIzR>\08EIz>\T Y>\T  >\ӿmt&>\ӿms>` 6c$n>` 6c->`m/1@v ,>ai >cS*>deCIΫj>eCIΫj >f$R>h6EzYm>hJ* D>hJ* )>hJ* !>hJ* >hBS $ >i7N a>i7N i>i7N m >i7j">i7 i>jRas1>jRa>jRa >k3PO >mT-. al>mT-. >mT-.Y>mT-. >mM=>n0&Q>n0& >oz!>p3K >p M?>ra+>ra+ a>ro -_>s- e >s- >srCKV>tD >u.]R>uF3uL+>uF3u>uUvX>uUvX >uZ >v0l >vqlU7 0>x[c>x[)>x[D!>x[]>x[>xsp , >xxhE)>x >y_i [,>z >I >za{ >{AQ}>{pg: >{?>}Oп>}pvvV| >}n">}n">}C >~%M^CQ>~%M^C >~M9 !>~M9 >2Ӫt(>f19>f1 >f1 ><Y>rCT">_M> >/Y?>eEՓ>Df ('>XDx >HOIs>Q$>Q > ,> >F߃F>u3A\>u3A\ >(2K>(2>{Gs >~A8>~A.>~AQ>#*= >34+! :>34+! >- wv >@;UR>Z>~&?>9t8>O0Þ9?>O0Þ9 >nZ">Y< k >7R>߽@[ # >OAj>5x܏89 >@qA >[ A; ( >r >upw܅9(>upw܅k#>upw܅ >|akA  > +- > i1> ih> iK>>]{ >ÞU/f >g(Is>пSz {>Rq}!Q>·bDK>·bD[>·bD_ >53'7->>v>H!,>oJ\>ʀmԤ>N*XY$> \ i>uR >08 ,[>08>08{>08 \>08 $>08>f8!2>8E>8K>ܘsC >_T3L>_T3>_T3S>K# e->{& e>zX!>@f >('7 >ʀ0D>D >&+l " >~Sp>~>~Q/>~+>~L*>~K>"F` >dᥱ? >]-D>ISKC > ܝI > ܝI >e7SkR >9H >( ;c_! >( ;c_! i >8W >1Lހ>1Lހ >By >?\L >= \>= { >ɷe}>=kjs>.:  >.:  >k4+j9>u%>u > NU >F79|!>5,R09>ܖ%#>ܖ%#>{gN>{gN>=Tv >sQ>xG!>vA>¯~he;U >\& >tif >hdg>hdg >\!>cM"5 $>Ƒ:K> o4>Zzazt>ZzazY>ZzazI>Zzaz x>Zzaz %>Zzaz >Zzazs>Zzaz i >Zzazj >Zzaz ( >ȍ^Ƀ> >;ƨ~ >;ƨ~L >ɝB?u? >kt#>{&r >;W|>,|hL*>O)"?>O)" >O)" i >O)"s >̖gū݄ >̩R$d>̩R$dso>̩R$d ">7Is $>$Ej>ϕEul>ϕEul>ϕEulZ>ϕEul>ϕEul>ϕEul>ϕEul>ϕEul >ϕEulL >e5 >e5 J>ќSj'>ќS i>[C>ҟ;T >ҟ;T >5X%>9&$ i>Aj:%s >j2fSt>+tM *>&B!(>ա f &>֧'? >Dl lb >x.BPp >ש%4; >ߢ^(._>Rm(5>Rm(Q>~ |A >lv>^M /K>N>:f>:f >V m>ܘb>؆U > ųbY1>ރ7K7$>ޛޛ# Uk >1}wLx >,X8">VYa >x+z9A > jD>|T >U\S! >r,$ ,>r,$>r,$ >\1 \!>\1t>\1b>lO2 a>UZ">:>#,>2[vP>2[>2[ g >$ vZR>$ vaD>$ v(>$ vR>8؂BK>iS ?)>T6Ɛ+R>m@ >m@?>N:N:zѕ@s>\Z>?>} > >*`!>(ky >(ky c >aRS > h >_ , >_ ( >03 >03 >03 >2 >ϝQ6>][F -4>][F  > '1; >QN>N( eMg>o 2>H8[} w >ޕdW{U>zM#>/\Β->/\Β#>]2# >lr>lr >q1>îdu >=Z>l%>Zis>ԋ>>/ > ]u*->p X>pK>p >=)f> 8-?>Em B>Nqomc?>Nqomc>%ٙ $>*7 us">*7 uj >! y;>! y;>*nuzsS>*nuzv+>*nuz a>7K>7L&>7S#?>^Q?>^K?>^$?R*VP ?R*VP ?{w>ݧd4?Jj?Վq% ?Nb?Nb ?B'?S?Hj?iu^?scm?sc1?sc? HiӻG\? HiӻGY? {-? {K? 5kC {? 5kCn? 5kCt ? :t ? qnU? k2 ? PR,# ? D2V?? D2V a?1X?VA`?&Q?|ut9s?MN?Ks?HnB?Hn]?Hn?Hn , ?j ?v75u?'2R ?8??8 #?8j ?mL ?$`?$?$ ?PZ: ( ?2#h9?$oj+R?OkV6?OkV|?OkV?OkV ?b< ?8d36S ?%c- ?\:AK ?"LKk?# @?# @]p?# @R?# @?# @Q ?$.D_?$.D_d?$|<̥ \$?%]M ("?&xem g]?&xem "W?&xem ?&~f=&v@?(ɹm$ ?(PU??(P?(PL ?(P ?(}4&%?)]l ?, ~Y?, ~s?,8 ?-3$]??-q?-eI ,?-PW a?.61A ?.61A ?.s:Gm? ?/3Ev ?0?'g?1*,z?2?16Xq -?1[aE ?1[_o]?1< ?1<{ ?191 ?2(~R??3hCt\[ ?4[ ?5bD! ;?56#7 ?7 e| ( ?9F:}Mk ?9yB ,?:(Z˞j2?:jh\?:jh I?;K2?;}*?<_&g6?>??Iq ?@\-Q ?ALmqwY?B?CKK?DX=^(?DX=^(?DM.A ,?Epg_tL?E0?E0?E0?E0K ?Hց t ?H }bhC ?J*5IN!?JFAߥ ,?JFAߥ )?JFAߥ&?Jc;?Jc;a ?K|hyK_??K?MY|!h?MY|!hj?MfL #?MӋ3??N*i?%?NW@>S ?NŨ\F? ?Nb\- s ?OpزL?O#_FLK?PQ vl\v?Q]=_!?Qr | ?Q0p ?R)^*"-?R)^*"4?R)^*"?RtEZm?SkhmCv?U5^n ?U;t9f ( ?Uf ?VR-I.?VR-I ?VR-Is?VeT.?WZ/3M?W`??YA"= ?Z>3?Z>R)?[y8?[aB#yU ?[|# ?[r]o?[r]?[r]K?[r]w?[r]YV?[r]?[r]?[Қ?\9k ?\IRi-?\IRi ,?]'KP j ?^GF ,?^GF  ?^$Zt??^$Zt a?^$Zt ?^޺ I?a/Aј5v?blM6?d̿ ?d<%rQ?d<%rR?eDDX= .?eP.) a?eplt?g" y (`?g" y ?g/^ $$?gEU^W ?h$ҞU{ ?i‘ ?i1ϷI#?jw@M ?k4w"?k4w ?lQ'L?lQ' ?lm ,?l= ,f?lh&M ?m 2iQ ?nCr'x ?nDŽF?nDŽF#?ok靲 c?qiU`,'?q O ?sCcF ?sK֠t ?sp (e?sp:C?spz=?sp ,?sp{ ?uXd ?uhNq b?uhNq b]?uhNq br?uhNq bLm?uhNq b[?uhNq bM?uhNq b ?uU48 i?v d31 ?vz ظ $?vz ظt ?w 8 ?xOz ?zqy?z}벲 ?z+>?z+?|N?|9?|R3?}) k'?})  ?}SW}P ?}a/(9?}a/( c?}a/(?}# ?}e]$  ?~ G?~71<>?~yehj?~A: # ?~?~L) ? & \ ?U ?L0  ?J`goW?J`gos ?H@j?7L ?# ?׾) + ?p" ?#l?j9?j2?P ()??R?i9*j ?i9* ?XU?sj?? 9ɴ[?~ ?3.lنv ?#?#d?#D?# ?; j)?LOĆ " ?$΢?$΢ ?(e ?a= #?-NL?-NLS?-NL/?-NL$ ?LNd?%?!ES ?!EL ?\噿?\噿M?\噿?!#9A ?fCC?fCCR ?fCC ?G1Z?^g ?^g $4?^g ,?^g ?Hrj;?縯?Q &?Cf?CY?C ?&OSV?&O+?&O ?x$RL?x$#&?x$ ?#~L?`ťg6?$?w챜 ?n+?N 6?byY ?>N?>?> ?> ?> ?5wR?`ZI?8\g? ??ƶmSY?GT%|? o? oZH? o? oS?`QMzc?`QM:?ɼ|?1k?1t ?% ?D̿:"?D̿ e?2aK?2aK ?6?6?n =eZ?n =e?n =e ,?n =eR?n =e?n =e ?ʙ9 %?pWo`R?ʘ1L?ʘ1?^+< ?k7?k7K ?DW?ʛ&5 ?応9FS ?応9FS? ?;V-{?K?Ǝ[  ?SN f%?[s.R?[s.?[s.U?[s. ?\!,s<?e ?b뒸b#?70%3h?70%3S?Ao, ?Ao,? ?2ь:j]Q?2ь:jL3?2ь:jS ?@`z@ "?'O.v ( ?w 7b aZ?w 7b ?K<?Fxx,?G?5Y4u?KȀ:7&N ?KȀ:7& ?|:[$)?F--! 7?F--! i3?F--! ?O ^?O ^ ?IN ?, 7_S ( ?`ah ?/a#?/a ? v? ^? S ?'n_ % ?=31 ?#'k ?8]? ?N?<?N \&?N (?N ?j?줰??줰?Wˆ졎?\oh{?ĄP]?Ķy>Q8?Y?I6N ?ݧ }?DŽK@?]R't ?i@mm?se.?n ?t2>Y?Ƚ6qrZ?a ?ɓ.Z6? M?הK ?tc$?tc?tc ?eUMk ?Θ0 9?O ?n > ?:zw ?Ie ?PV?PVj?JNMj?֯YH}?֯YH}D?֯YH} ?XG_ ?`'3 ?`'3 K?`'33?`'3?`'3 ?kp6t?ؒ "e g ?1Q ?1Q ??RNd` ?E@ko?ۮE[ ?K(?DKj?DK?.P ?_Wf?Q\ ?J8j ?J8j ?J8j i ?fnS ?[|? ̢ ?N 6d ?N 6d|?ԷGRC?>pws ?|/?gv@?-$?EN"? K ?%iG)?-GmHU(?冠4?: ? t#? t?烲ZW ?1P ?Ec@Q s0?cev ?ye4?䏊c` ?\L?i-&w:?GSpA?!lM?!l ?BC ?'CA?ލ, ?G}1o ?a#[?a#/?a#?Ea[?*? Z ?￯?￯ 3?&%?&?Pͷ*iv ?+@R?+@R (?/zcp?꯬ti ?Y?ht?Y?h?Y?h(?i6>?̍0?Cz?̸Kk?̸K0?̸K?̸K$?̸K ?W ?FXdn?cr #?T::t&j@6)g@6)g @6zv @:%? @ I@ pٓ ( @ pٓ @0.@4=$>Lk/@6!M $"@_[@" fQ @7 @k @ ?|BR@ ?|BRZ @ Y@ 1*s@ PL/|@ PL/ @ gXR!@ gXK@ w @ 5#x @ :JIgC (@ :CT@ :C$@ LO*@ LO|"@ LO"@&uw @;+. @8d {@ءrxM@".# @! - @8}X*z s@no: (@no: @♸GYQ@♸GY1@♸GY%@♸GY@♸GY@♸GY]@틊"-@틊" @틊" $T@틊" +@틊" @f@&k&@$@:e -@r{v@ '@>~?@YL@YL@Iv>t@Iv>s`@Iv> 8@Iv>  @Iv>j@C1E e@u_o@NÉ]d @pC$@pC$@o\@ƢO@:&HOt@:&HO @:&HOs @N1 @R5 @iD e @ $ @,#@,#K @uJJY @d @T%@T@TS@T/@T @T @bH+v.@bH+vK"@'@`a@ !9 @ 0IYR@ ~nG]@ 9e@ ؋ @ ,XGWt)@ ,XGWs@ ,XGW @ ,XGWk @ 4 @ ՠ7t@!98~#{@!98~0@!98~N*@#og 4?%@#xd# @$@&{:&[5@&' @&' @'4F g@'} K7d @'p @'pY @'VΎ @'VΎ@)֞]@*f' @+@@+@Y@+@ \ @+xGݾ @,n=e@,n=ed@/6GZ @/LZJ @/LZJ @/LZJ @/ $@/am R @/2.`C@/2.`Q @/2.` @0"dT@0"dV @1Z-48 @3[!FO?.@4$WM@41?@5K!an i @@lp@R@@lp@@@lp@ @@ϙV @Ae+,: @AkIQ v @A[ϲFs@AhsU?@A+R:@A i @B˳@B--I+#@B<- @BKAM? @B_ #@B_ @B_ @E8|@F.f #,@Ho!v@I(&\> @Izd@IJ|. 1@K,ajj@K/TI .@KT RR/@KT RK @M/ @M/ a @N ==@N+XH~$@N+XH~ @N+XH~ @OJ8;:t$ @P  @RBM\f c @RϽ@RϽ[!@SU8 @TJ @V1nѬZv@Wj/@W @W "@X l.A@X5%~ @X5%~_ @X7dχ]@Y*h ( @Z ^ a@Z> 3@Z> @[j B@[^?g? @\_(+@\Dڼ!f @\90_Dv*@] f[W;?@] f[W;@] f[W; @]+X>@]*?@^#{(@^h @`v{R.@`v{@`v{@`v{@`v{@`v{4@`v{Q2@`v{@a~G"@b0]Υ_6@b0]Υ_@bHb-k!Y@bHb-k @bHb-k] @cTns@cTn @c$ju m @d[k @eTE5t@fLEB @hxUEC \ @i9"i5 @id @j0iS@j̽*@lå @mhR|(4@mhR|(@ni[)y@q&k @qύ7@qύ7U @qژ1@q(|@svS ,>@svS @uo/Bs @w䥖9@w7hY"@xyS a@xq@xq @xdgC[/@yNN j@ys&e3 @yKa.@zFMR@{Ugi\9 @{YoY@{ylf™ @{+ͮs@|JZ"{^@~ E;O@I~}\}t @[h^Z @3  @~x,s@;JOAPC@Q3ms @HQʥ[s @j@ @xb2@ yt @2  @~LHR ,@MP@5\w@5\wK@5\w @|JO7oQY@|JO7o@|JO7oq@|JO7o3@|JO7o%@|JO7od@5E]s<@5E]s @l T@ݒ$ ,@ݒ$ (@ݒ$s@H溁PKQ@H溁PS$@H溁P!@H溁P@:ÌN@@NAJE@ź1@ź@u6IQ @ 4@׵@׵ @e] @'Ӓ:@'Ӓ:f@'Ӓ:@'Ӓ:E@'Ӓ:R;@'Ӓ:(@1̕*V@1̕*k,@1̕*d$@1̕*@1̕*f@2Y z @3ӗ @zD @qwxR @Usd5@Us@E0 @w 3 @0U@tc: @ 4H @D{C- @/< @{ w @"TU @JP.]0@JP.@ \n m@ \n @S_ @h4@$h-@$h-K @V@ֿ@b,vR.@b,v#@U!Ss@U!\@U!L@U!$@@{\@V@̍\@"/@̍\@" @̍\@" @̍\@"? @#MdR @wp?@b @bST@ǟ? @t@ } N j@'̀Gs@wm] @uSah@uSR@uSK@uSL@d5kmE@o^EdS@o^Ed @V* @ @/ j ,@ /6ub@88@ ʶ@!ϷTj @u1 @d \@d ,@d 5@ds3@d &@d@d @Qtq@ୡN@ୡ{@#|!%t9@#|!% @#|!% @r @t?~f@Jm2] @Tɨ:` ,@P [`R @M|Y @xnU6-j @;̘G@;̘G @~z_=v @_P #(@jX .@jX @aK@., @\~]R@>ze @G茒w@~Y@[%s@j@@Š+L<@§V+?@@i*@GF}v@RE?ڋ s@V)w!@T2 <@ơ)tJ@p^?@ j @ >m4@,G_s@فUPI@Tk@ʸ[%@ʸ[ @]cR@];@$tl @͕Hq@o wN @Љh}s@%l•m #@ϽĿ\? @خ@cfg@cfg]@cfgQ@cfg@cfg@cfg@cfg)@cfgD@Ҡ1c y@/J@/J7@/J @w x| @@ @f@Ծ_^\Y@Ծ_^\ @~K @ծhI,+@6D?@7 >| @E 9@N @NR @N @)E)@)Es@)Et @ @!&s@ Y(Y@iQ ,6@iQ ( @)@ ,@)@ m @]l@q^`^-N@ݦR]Jqs @,<7 @,<7 @,<7 @,<7 @,<7 i @[\)@[\) @n0mt # @߭oӖ a@߭oӖ@XV2vj@XV2v @XV2v $@XV2vs@XV2v (@XV2v @XV2vh @[ eRB@e y@e@eV@P@E[w  e@E[w  @CC @NJ_Oj@NJ_O @(qH@(q%@(qV@"' a@"'s @_o@_o @W^@ !T@ꛖ$+@Hb#j @JN-W2@ ? @ @ ;@_} @H@H @ rY @Pz-$@Jc7O (@R~a@@$p @DŽR@'ji+@R ,E@R ("@#ʅe> @|ӓ @FkkHY @N c@N?$@N @r @QTgO@ 3R@ 3L@ 3@&?SP @7U 4C@{R8+5@{R8+@=@3{8+YA?](QA?](CA杏M,t Al( A EqAQPĦE)AQPĦEZRAQPĦE[AQPĦEAQPĦEP Aׄt Aa^' A|WkAMwzs A{n A`"YADAD!AD Ay+#jAy+#A:3? AEA p :]A p ?A lh A O (KA O A ۢ?A c& A uV aAvr66jA ,#A AA9/O AB$K ]AB$K=&Am-z*Am-z - AK[*KbiAK[*K AK[*KjAB $AV)7AV)sAYuxAYu AΗ4Uk cA{ A{b!A{YXA{A{ VA{RA{ >A{ #A{A̘.VA̘.V $A A_WjUA_WBAi(IܶSAshAA!AA?A A' &A' , A'  AEOPAAEOPZAEOP] Ac)A@ R Ad4n Ae?|X AaG)TAVH A,!,VRA/B' A ?0j A @@v+A @@vA LrHU A LrH A kH a A!/=c#A"ڰ=, A"JIsA" = BA" = , A"պ(] /d A#7qj$A#7qj !A#~Y?$A#xdDs1A#xdDtA#,5bh A# S A# St A# S A$G9 A$G g(A$G iA$GA$`RA%*8ޅLA%Z6 A%" A%[φ A&cgJ A&k?Q A&t7S A&g3cA'U*  YA'U*  FA'U* R3A'U*  A'cDA' A(Nj(YA)2fvJA)2fvj>A*obN A*|kR A+2' \ A+Pt A-sIr $A.FeB A.FeB 7A.FeB (3A.FeBA.Hk !A. A/LWѦgA0F@2v ^ A0DHA0DA13|: A2o: A40'A4iƾ A6GmR A6l s SA6l s !A6l s ,A6l s A6m ˶A7>) A7" A7" A76zGA76zAA76zA76z A7k!jA7k!t A8U A8;M A8;M i[A8mG 2jA8mG 2 aA8mG 2 A9 a A:U 5 A:Y A;m |*A=8*WR A=J A>)s A>t]4-L A>V"' $ A>"?A>F= m A@dvDd{ A@Ɣ.JY A@ڪn QAAtU BAB h2ADC-fR ADaWAEGO}t AG.HC$ AGAq3D ?hAGWҼAI1D'v4 AK3G?.AKk $ AL"Lbb AL{~=AL{~= AM|AN%6 AO!Qif * AOSnm!2APdAP$AQKP?AQKPLAQKPS AQKP AQUO| ASQ5Ot ASJnASJFASJ>ASQpHASQpAV}/dm ,#AV}/dm eAV?;>mY -.AV?;>mYAV?;>mY AW8VAWL AWEkI 3 AWʽp $AXQBO $AXk  AX,PJ8*AY|6? AY|6?tAY|6? 7AY|6?Y$AY|6? iAY|6? AZltj1A[t A[!c $A\jhN(A]{!DA^\*A^\QA^daL A^)tA_ţ oA`UP'A`UP!A`UPA`tDz? A`*> 2Aa^vvAa^vj Ab?AccR[]Afr&8 Afr&8b Ag*kAi=9DAi=9kAi 7xZAiJAj -Ak Ak4 ,nAk4 fAk4 eAlTšM?\AlTšM AlpAlKAm.~fAmGjN ApE Ap% kAp% kZAp% kAqmTfAqmT<Aqet#QAqкfV Ar; ArɱAs>vps As1 v Asc = ,As^]AtR5 At y Au 66Au 66t AvD|#Av?$Av? Aw5'`Ax / $ AxwPӨ Azm?X s Az*npkA{vpNYA{vpNYaA{vpNYA|[A|YC A}_!A}k:3A~eN  A~3t A'.R> &AA oat0AA oa \A >w A Ǡf=A>%:"A[-u Aiկ Aiկ PA/h KASN47L1ASN47)ASN47SAk%  #A(A(AGu\ AGu\j AJ=z  AQm&ҁQ A׹2@A'. AGRAG AD AD AD Amu`_ j AB;?CMA- 8 iA- 8 A#k AOƇbAOƇ ,'AOƇ A A- lA?f AZd"AZaAH^YA:}7RA=5 iA;TA6~?A7ad;A7ad]HA7ad$>A7adU A7ad A?MAOه A` A`? AYq iAYq A4|گv.A4|گ # AWHWR ANqd:A?C A?CsA?C $ AaAn!?A{X AS&U=AS&U#"A9 vA9 $A)* #A.Ǭ AN kAN DAV> #AV> QA)A*hp . AKv AYeEEhAfC AW<jA; At)u`Q9Au*mAu*mFA'[G iA,z!A_>C Ae`ѝLA4g A[Cs+AF|'U A/V֜AP A.kM^m #A.kM^m ,#A.kM^m A.kM^m ( A:Od AM%(AlcԵ/C , Afl?SAh A-"ˡ AiXSb0AE|kbvA7ALyArlن &AdNA8+ KAwttAwtt A Y (ACȷY ATȠc]7ATȠcArQ1A{yLY A=LK8<A=LK8"ADc! !A6h.$A6h.e Adž%bsAL,CkuAȏkC_ A,LAɭ_sAOf tAzM AʨXAck # ABRA)Aa, tA˝i#  Aݻ4CAWGNA%%&A%%]A͞ U(?AΆ152 AW#nAW#nAW#n)Ab\&nIAЕê0AЕê07AЕê0AЕê0AЕê0 Axy AұZC{AұZC AWvSApwZ!A&5JkA?LA!AT $CA:A(Xkjs A[2f A|n]A|n] A<tA, = -'A, = A1aWA1aW AL )DAL )(AL )]Ap{n|Af "Agdx A~ڢ*+UAܰf Ao߶6 AAxhv A~RK AN AN A汣ne?Ag1oDA.QAy' LAy' AkwB->k ,B->k B )/B ) (-BA@ %BA@  B{?C?Ba>M iB C/ab \,B ιxD$ =B"m6 zB"m6 0B"m6 $B">KB# c BPXVBP} BRjLBRRxBRRxQBSyd=BSyd=BSyd=uBSyd=>BS/2 BSi|.BU)d9sBU)d9+BWBM BXjD4 BZeRB[4?,aFB\ mRB\ m B]] ύ(s B]d:mK0B]XB]H40 B^)B^&BB`8Bb(?O BbFh? BbM#߸BcV: BctԍR Bc*BBc* Bd/DBd/KKBd/Bd/BfF} Bgr BhBh(w($Bh$ajxd Bhus Bi*X)ύ; Bi*X)ύ;kBkqr 'Bkqr K#Bkqr  Bkqr  Bk}Z  Bk<. Bl*g}Y Bl`pDh"Bla.Bl!pu[1Bl3]ֳBm*dBm*Bm*Bm*DBnIBnA]/BnABnz SBojqk,)VBpR Bp; 4E BpPP?Bp׽kBp5 Bq %*Bq\+8?Bs2{S'?BsܜD~RBu=6r BuDGW]QBuDGW]QjBuDGW]QDBuDGW]Q (Bu$ Bv!|R Bv?| Bs!Bv?| BYBw B|e B|e B|e  B}wk-B}wk B}wkB}wkB}wk B~+KmIBlCP QBaU*vB [+Hd B[1f9 Bfh # Bj@l BE-TsnBE-TsnTBE-Tsn Bf) ,Bf) Bf) B1| jBDT B$~B$ NB$1B$)s B6W"B BQtUBQBQj B+B=-`8LBG " B-b&+OB-b&+O BS"PBTo5^PBTo5^Q Bb绕nB`P Bɍ Btj2BtjBtjDB3*BB B=Y?JB~j(BJB?BG*Bz# c Bz# #BNN? Br"BLJCwBט.w? BjJ& B? B-*CBl BX=$3x Bӵ ? ,B$\)F B'SL;Be+ , B4 B4 Q Bn;sBn; B6BmFR Bvs Bvs B6[TB6EBF+Bӡ]vPBT 1BT ?B& sx BrBdV BdT BVN$BV BwޕLnN BE.T?3BE.T $BE.TsBV{ځBF|l BlZL* a B.Ѯ B߅E?B;e¹^$BbҮvBbҮ[)BbҮD)BW.NB0vkB#KB$Z $Bj+"v?BE1rR,Bp0 Q Bp0 hBp0 r B/%.~B ]  BCmBCQ,BCBCBe;3L_Be;3LBSc4 [B6CB6L Bi GBlMoM~?Bd MMb BnD \ Bۉ7y.Bۉ7yQBۉ7yBX_z5BmB3W B90DCB90DC BGX N B9K~ B+X $ BytBt:%Bt:%RB[YjvBiM2<L$BB Bj BT]%R BْjY B_| Bu) ,BGGfR_ BGGfR5BGGfRBGGfRB{tB:RX_ BF;*˧YBH|I֠ \BH|I֠BH|I֠ +BH|I֠ BH|I֠ $ BÛ#fLBBt: m'BRZ~jB69FB^aB=jB^aB= ,B^aB= WB^aB= Bʕy+{ 0BʂT<^RBu B͐G-0 B*&6t -B*&6ttB*&6tB*&6tk B.nQtBQnvBA֠kBL*BL* (?BL* 7BL* BL*BL* nB$B\ B*Hk8jB*Hk8 aBk#DBf BثY , BN"BMZ B1j B1j{ B5 :&QB5 :& B٭&B٭& B٭& BNyY B,̇YsHB,̇Y Bc+iGtjeBc+iGtjcBc+iGtjR:B= ?FZ?BX35W4Y B9R> Bd?KBXtCU!BXtCBXtC Bn4R+Bn4B㥛/u)s'BYuQ AB?q} Bx/?BB3BxxB0 u w Bu.H BBk Bb1xD Bb1x$ BTD7!BaT^& c B4hB4 .B4B.fk rR B:AjhB З B З \ BM4'?BM4' 'BM4' B6 B`c B;؉RB;؉BB mBBBH}Ώ # Bρ0  BP!C, ,MsCOc*~ COc*~SCOc*~ ICOc*~ ,COc*~ e CY7xL C I| #C+1 ^CK&C C(]Mj;C(]M i C(]M C =ӹ C@ eK C@@$$$C@@$#$Cj C/C{ eU*C{ eDC{ e C@% C@% i C.ڐKC.ڐLCv \C'C'CBk?CBkCBkCDu)[R/CDu)[L C M{I C UEǡC l_C 0 C!l>PC"X1/[ C"^.eC#KC%ImY +C%ImY C%̘jC%̘ C&xUvC'% MC'%?C'M C(@m^FjC(V;E C)]C)]C)]RC)]C)]KC)]KFC)]C)]C)] C)j C)YR.? C*[ZGC*J+ C+X+jC+X+ C-9l=C-ePc"6C-rs" ZC.r dC/ƛ'y1tC/ƛ'y1 C0 3bk C04?fSRC0xA&s C0om#\ C0om#\O C1r^Dh&C1N[C2L=Ƅ5 C2narCC2nar:C2nar!C2narC4Ī: a4C4-1fC4-1f  C4%C C7l bs C8YVC8cUsC9Hk #C9hпJ ( C9w RC:o^?C:$C;vѤ. #C;Z C;޸8CW&v,Cj!xCkTCl7 G Cm-Fe9t?0Cm-Fe9t ( CnE6j{ Cn]YfuuCnVqn Cn CCo;R" Co;R" ,Co;R" Cp%J~ ,Cp%J~ ahCqy|~ a CsJ[YCshCs`? CuJ_*QCu_dI6RCu_dI6 nCu_dI6 Cu_dI6 ^ CvD]CwK)dB|CwK)dB Cw|Cw|Cw| CxY`ͭCxHZB> Cye[0mN)Cye[0m C{̂v C|k7 C|k7 qC|]e C}7dC}APRC~JۼCR C~JۼC# C' (C' c Cuv CujCu 3C=rý 7Cp$b?7 ,CaR Cj^jCj^t\Cj^ CCj^ (&Cj^Cj^ i C 8PDR%C 8PDcC 8PDC 8PDC?C+C+C͗_?C {s C { ( Cا|%Cا| CI~)S? C`p_j; CK=CK=? Cw CF,CF,dCaKj CV)%fj4C]f j CiH:.CaWdCVYCVYC8>81{ Cj1}CΝCCS\CSCS\CCS\CCQTP/ C5sC` 4Crd C(ѐC(ѐ ,CV#?*CJt CѓÎ5 CTt` C[S5C[ Cr J CR#CR CXw Cu&CuCuC=%C=Q CmZF C""œLC""œC""œCk C1,=1C1,=1C1,=1 (>C[tUC[sCRe C2**C _C |3C (CκZC[VF Cr[ m+CC.HC?f#C^ާ s Cy Cy  Cx~3N CR0C $ C9z|C9zj C;L%C;C;CWh,DGj C1 q? C=UKLjXC=UKL (C|sdC|?(C| CéO'CéOC_fN_/JC_fN_/1CZc( CH? C_ C]+CNgCXp/ CXp/ tKCXp/ YCXp/ C;NXC  Ceq6 Cec CRRXj1Ct2 $ CL=j Ch mIZ Cڭڔ2\Cڭڔ2Cڭڔ2] Cڭڔ2 C$0C$0CK|>۞GCK|>۞GsCЮʨ cCRۻ Caq|tCclCjCCjC ,CQjʰC^+ 6NC^+ 6+Cv{bIYC iRGC8ӣW CJK #hC>QOϵRClLV$Crn[v CueCfq+5?CfG CfGC NGC CVR CV C'MW$/C;0>; C|N0Cs#(N+Cbz ,Co_\tCo_\tK CËgd v C+[CY1 Cݏ;%Cݏ;%C9R 7 $C1 IF \C1 IFnC1 IF Cș9հ>&tCș9հ>& C;[t: C}p!l iC;?ߏD C{n C{n C 92C  ( C  C~j CnATCΕ:UC'K/| CANje7i"Ch~DCh~D , Ch~D ( CЛe3 C&rS C+ y8k jCgǜUB'CgǜUBCWf c^Cpq C[L C#e9C#e9_ C%$t[CԖ8ʓ'CԖ8ʓCOY9CկD{D< l$D Gƴ D sVZGD sVZKD$Wt`rD$ 0[&D(J _ D)a{\ $D*yjD+ D, jd D-ֹH͍v D-I"RD.eA D.n2D.0ID.̸<}QRD/.(0 a D0` i D0sWƊq s D1{(,yD1bOS D29 v D2lhBUD39yECD39yE-D39yE D4uɓ D4 wY D5 >?0D5 >?0MD5 >?0KD7Ľzxj D82)?D8 k 2 D9'1 $VD9'1 , D:@D:@D:@D;8tJ? D;A@.D;A@.B D=&d! ]VD=&d! D=&d! D=" U\tD=(QD=(Q D>-/jD>F D?j6 h4DAR XDA? DA? jDATrws DBb DBcGvDCϿ|" dDCϿ|"<DDzk%zR DEKU0 ?DEL3W'DḞsVbDGT-DH6Ƌ= DL#ibDLkDL*?v DNy?tDODf>Dfn;Df gDf + Dd2> Dd2> D< Dd~D4xD4xP*D4xL Dyxc yD5$ 5D 6{ )D 6{ D 6{ QD 6{ D 6{  D DR DV`VzY DIߞISDp:ýv Da=m DD%;?jDr D/N -DGR^DG`OD#p VDWN&l(DWN&lj D.1 ,D.1j DjO|f #D}7H D4D4 DA;vJD# D룂Nt DSD1.4 Dt%$#3Dt%$D,DuSD餰eC D(tRS2D(tR]D(tRD(tR Da+LU DtD DwDsDDjGD a@D DeOu?YDxH Dv2pv$D!D8` DaxDDr/Y DsxbkDsxbRDkN e Dg8;DD/W$DD/W$ D==FU DCT i D!j DSٛD]{O@ND]{O@R D7xA \&D[SSDWQ- $2DWQ- (/DWQ- D`#7]*DٶL D^s*-D?H DR/ᐤ D.^D.DD́y DgQ&Dg D?سD NtD N.D N D ND N DΨiKjD|&  D%7{),YDi瀭UD D D+kQKND3,Sa c D)җl^D$1 DUWe^$DnZ iDkL'D\ΡGDS,*c} D[ߓ?D?BDݵ$9N DInJw -DIHfU)D" DºYJD݃L DR>8v?Dýz_ DW*D=Uo Dƺ"o&z DǖڱDN? D?b}Y D-?eC DCtuX#DmßeLDx"ODgWvZDύ_s; DϿqKD3ڰb D3ڰb[ Dч葱, (D04^RDc!hD?8sD?8 D/ ? D󓳜s DAbp Da ó D٭" ,DڝTRYT?DڝTRYT DڝTRYT D:qtD܆ugq D܆ugqsDǒɀ $ D=>ODݣHej D[ D[ $ DC?c( Dߋ3\ D= D߶љ%D3{-ZDF{,e DF@t  D| smD2 DxveR DP !V? D'?’DU!DeTDeTDP-C aDP-C UDP-C9D3(aAtD]o_D8 D{Dzk[DI?sDip5)DqG?Do ێ :Do ێs2Do ێ i Do ێ Do ێ Do ێ D8LS? D/+P$D/+P[DXLDID$C+[D$C+Dk (NDSDn+>vD. D 3C D9p E*VR \ E}>OE}>(E}>E}>&E*^ev Er3n@Ez3Q ED^} ( Eꄴ` KEꄴ`?EdE[jE)՗DME)՗Q.E)՗.E)՗E)՗E ,E ,] Efފ-,Efފ EfފEfފ E}gfE}gfUSE}gf-EOrPR E6 EyɰD E AW. E z E um E E %E EO_ R E UE uB E[*F1s Eu'| iEy9 mEy9 Ey9 SEy9 &Ey9j EkޯE7èlRE7èl E7èl EJ >EX\] (EX\] , E^M E;T Ew UE@9 EU܏* zE5lv< E=?EATa7EATZEAT Ej_# E|T6BRE[7u˽E|i "E—RE_̡\bXE_̡\bOE_̡\b E ;aw?E ;aws ENqE>UEٳ!I5Eٳ!I E $?E!"e~b E!AǙMRE"(F \ E"u^S # E#NVs E$f{0 E$!kAE$WEp v E%s{ ,E%H E%?#E&a E(N W aE(N WkE)Azz E)>> ] E*Q&KvE++N E+-v'E+f~N= &E+f~N= E+f~N= e E+~)? E,(MJE.xX E/R6S kE/n]j E/#'E/#' E2^*6E2}(  2E2}( | E3Ypי E3Ypי Q E4%)'E5ΟE56roE56robNE56ro 1E56rot'E56ro E56roY E6~,@ ,E7;F3? E7E;J)E8RRw$ E8RRw E95/ [ E9pɡ?E90 E90 ?E9덈 +$E:ȡsyUE:V)E:V) E;l] E;E~"D E<E<B?E=]'* $E=vIE@; ՖE@[6NEAF EC]HB? EDeiZ]EDeiZ] EDxtEDu[56EDu[56EF$Js EF$J EGL#?EGL# EGq 3o EGq]< # EHt EHt EI:<ƿ EI0EK;wi/ EK%jELOƫ;KEL#"S_EL#"S_ ENfH SR EOmcQEOmcEOl EO EO \EO SEPJzj EQ*8C[ EQ@6 ;EQZ aEQZ qEQZ t;EQZ :ESDn}ESDn} ES'RES' ESsSRKESsSR ET2} ET!E璥 $ET!E璥ET=҂?EU߷ܵ EWPt!EWj2a jEWc \3EWc EWc ,EX5?1dEXVmEXu-jjEXu-j iEXu-j EY4oEYB'+jEYdY5v0EYʢKEYʢ EYʢ EYr׎ , EYwR ,EYwRjEYwR ( EYBBA$ E[ŨvE[ŨvE[Ũv ,tE[Ũv \JE[ŨvE\"ƚPE\Mݹ Q E\Mݹ h E^@)[? E^ԱD ,E_+4 E`){E`u`_0 iPE`u`_0 :Ea hEb:9 Eb,[&C Ec ٤? Ed8ˋn5&EdWaB<d Ee,u?EeGX EeQ_+s[EeQ_+ EeQ_+ EfDK/EfDR Ef:^9 Eh"ЩNEh" \Eh" ^KEh"#Ei;aӐ. # EiqT Eiٜk EjTBKWEjTBDEjZذl a EjUEk "]NEn++X Enf\R En2 EpI,kAEps Ep&t EpYX";EpYX" ErO (ErU3) Es3ZτNEEtA4?Etcfl$EtcflSEts uEts&Ete*LEte*-Ete*Ete*ExYmȟy cExʻsEyOd Ezp2 Ezp2Q Ez1qv E{eŦ E{LjE|8Xs E|3~iVE|2RE|2%E|ΧᐙBE|Χᐙ:E}q\+ \E}1jE}1 (sE}1 9E}1 iE}1E ' E/%P ESЃL ESЃS Erdx?Eӟ];?EEJ Eg) Eg) EZW E&E&Ev|bL-Ev|bSEv|bEiZ%[ E.P@DZ E}(fEQa}T|E3)ebZ EY:E3E3 EK "Ŷ' E(vEgS Eqy j Eqy ? E",EHn ( EHnj E9 E]sCR Er0 i~Er0 jLEr0 2Er0 )Er0 #Er0 #E0QQ Eb*S ES) Etߎ  E?E.p # El^}Yv EGP4[ EeRTK E+:ugE<(9cE[{R E~dE#@  Et/E~dEC2wbSEC2wbE5]c E}A t#EcD`?kEcD`s E[o"*E[o" , ERQC) ( EWfe?Ei]E;׈,1f EXovEy6 $EfEfPE^? S EF9L_ , Ed&- E*- E&h 3 EjvE)qt5z0EʟѿKE; t9E;  E—Jg"jE½L&ES E;!g $ E'/RNE'/R$E'/R"E[C?j 4E[C?E[C?vE[C?3E[C? Eq>a jVEơT(\ Eƪ. %+?Ei0D.A LEi0D.Ak0Ei0D.At)Ei0D.A sEDZBEȁ] wEȭ+Eȭ+LEȭ+EȶJHaREVnr)EqOQV EOJkʚv E uE˸ie#E˸ie E,W{? E hEaEQEf7e! E} KEЀ`uEs fjEzzjE/8&Evlb8 Evlb8EDO  E+|sE!E! PE! )EԜ_eD: EG%(<?E֭Ӆ. .Ec$eU;E2aV EhEd;@G pE>EdrL(EdrL( m E|tEvh E-(-g nrE|bmE|bmFE|bmE"yxE"yxzE"yx 4E"yxEEb{oEEb{Eހ2/Eހ2REހ2K EQz EQz? EQz E"i9E஡Ʃzhs Exis(ExisREdfa'Ecvb /E@j>RE@j>?E@j> 9Eo\*Eo\E$b s)EL(MEdW=E-ໃ̻ ENR>R8ENR>!ENR>Q EͅEiʀfGE#4KE#4CE%?E% E%0 E*<0E*<E*< EE;0E"X Ecٷ]Ea EON_ Enޥ""EǢ]LEǢ]E!͟l-Ea0 " Ea0 " Ea0 " (Ea0 "Ea0 "Em E Ǔ6E{| sE{| E3Bˤ E:?j? EX-g4Ei$nZEm E1j E4U¹Y Eƾ#"E j!|SE4m i E4m (?E4mj=E4m E4muE4m PESrH{ ESrH{ EۥiN EJG, #'EJG, EOY|EOY (EOY EOYE7J7 r(E\qME\qM EI 2Ez{+ + E6 E5V E+. aUE3' E[Ey=E&2J? EHVf5 ,FX*FJ's FJ' FW8ȓRFW8ȓLxFW8ȓ&FW8ȓFW8ȓ FS.2fK"FS.2fFX FX $Ft4 TF W F a%p| F!A>1[F!A>1 F!OKE `F!mC|:F".ĠQF"Mw? F$Sj܈DF$Sj܈F$Sj܈F$Sj܈ hF$Sj܈(F$Sj܈ F$2 }'F$Υ F%<9Ew s F& Sj>F&G< a F&w_{R F'1',sF'1',F'1',F)*X F)wF*B KF*B AF*B &F*B $F*B  F+eJ F,KEF,&F,KF-HpxuvF.n7F.n1F.nF.nDF.nF.HFF/J*t F0 jq+ F1|){ F5sH<:F5}tȠRF6t&F6s!F6W4j F7.*x $F7]N @RaF9x zF>x:HF>x:HF>x:HP F? 1?F?=TVnF?*~tJF@OY+?F@OY+ (F@# aFB3jpsFB9p 2 FBCvS FB{W_OzFB{W_OFB{W_OLFB{W_OFBs_  FCzejFDNn?$FE݆dFFHCKL FGBx#WFGBx#FGBx#K FH`Z FI˶d#FIiـPFIiـFJAh:FKEK Cz FKd4WFKd4W FL[_ FLhx5 tFMI:9?FMI:9 ( FPkőgFPymPdFR*FR FR<8FT:Qlq FUB Ξl !FUB Ξls FW'K ,FW` .FW`=FZq֣ FZT7 F[Ε% F\QvF\Q F\h|  F\k| F]u F]xp= F]xp= :UF]xp= n:F]xp= (F]xp= .F^P!14RF^[nGF^[nj.F_%)4c dF_|;:j F`G\e5Fa( -*Fa( FbAFb FdGwKSFdaHFdaHFe(0VYAFe(0VFe(0VRFe(0VZFft ҙFg 0jFg 0 Fg3Fg)DJq Fg+2 FhUFha=Px-GSFhj)HFie]N+? FiGmFi^=bFi^=bsFj B \]FjWqKFjs|)Fjs|)!FkQo FkiFl |{ ^FlUEƊ!FntKaFo k% Fo\Ѭ2FoA_V$ Fo\m8N Fo_Kb(- Fo/khFp> FqtlfxVFqD Fq?4 $Fq?4Fq?4 , Fr/DX  Fr,y|Fr,y|Ft@u ײFt ;2C FuMDC FvOa %FvRFvZFv˰.  Fv[ Fw=Fw=d-Fw=!Fw$ׂ/#HFx~;'wFx~;'%Fy{:~_FyD+u|FyD+uFy(nf F|&U9?)F}Ay'R F}RF}RF}R F}3t*F~eS&SF~S#s\ F~e0;6F1K[sF.Ύckf!F.ΎckT FYP lFYP F)?? FDU ,FJBsFJBsN FsxN|FlT FlTF#U FoO=)FoO=!FDv6NlFPDFhbo4FhboZFhboLFhbo F}.V_F}.VFYRFYZ F޺- FUywk iFUywk aF f@~F f@~F f@~+F f@~F8V F[yFƸ:;%F/ FpF*]Yn FVda FSjzFp<65r&Fp<65r Fp<65r Fp<65r $Fp<65r F FMHXj1F'+<?FvןY"F5"F]F!LR]F!LTF!L,FtLF%[1F[)a3Y F`" NF@f . F_BF_BF_Ba F;$Fs FeU GFⓥ1F4ƹ\F6kKF%٨ZkF&2F&2 F&flR<Fxϛ3.Fxϛ3 (FX -F)VFB-x FB-x j F8:(F8:&F8: F>EG F& F& RFR (1F5(v4F5(v4 F5V FZ.?F园0 -F4c N F.]>%F.]>Fb<" FtEKyNFtEK h FtEK Y F6S)sFť  FdSF|IzF;+F;+ FEFYaF2%=| \EFۡXQF1C i F5  F2*ֽ"FĽ 7 FyYoF$66sF <9b FM1' : Foyg"FKFKKFK] Fr4>HTRpF8`\?F'Ȥ FoMhFF E-Y F]wR%F00PP F<0' Fհ=lLnFհ=lFհ=l F F FGF33|}Fžg Fžg k F§N F1!ɤ8? F^ed Fã*v F)i(K F ,F,k8FۀsFۀ F"Sp FhUݸ iF7B $F7B F7B F7B sF7B $FϨW F5R0F5Q FҼi4* FU  FU  j F_;QFәTbr FәTbr $ F^nѕ%F<@j FSC F(N=F۞dm FM}b iFN(`F` [FߺTTFYP+v+9FYP+  FYP+ <FYP+ .FᒥǕ4FᒥǕ4 FᒥǕ4U F., !Fp FXOO FA ]9 | F8٨ kF10CFF|7?FF|7jFF|7s FH w] h5F( iF R0F]ht$F]h F]h c FGI+oO G[,Gٖm cG cj&G c G 2E G 2E 3G 2E &G 2E G =,E9 G  Tv G UT+J2 G  C;R G R G $! G ]6#G =Y[Ws0G !o #G !o G`0M "GݯWO G8GpY)GpY) GpY)C G9S G/fSG/fSGKM© $#GeeaEIGeeaj?G!h G$Yd GnFG%3 GzkbKGzkbGzkbDGzkb GgGnqGG GY@}sGY@}s GB%8 m GbS#nGbS#nUGbS#nHGbS#n=Gf*GwQ'j7GtB|j Gk? G U (G1gƒZ GBl?QGpXvGP# GŐn?@G +~t'GgM.jN[GgM.jG 4kͶYG!H> xG!H> G!{rXG"^0P!G"*w, G"l TG#G; sG# s3&G# s3`#G# s3RG#IG%;IO G%;IO ( G%֘߄ aG%֘߄ G& G(+R#'7G(+R#' $G(wlG( G)F+ i G)e3k?G+2m)j G+ՋG+ӄvG-z/l`vG-z/l` G.7 7GV( iG.;2?FG.;2j!G.q G/Xks G/BM 7N G>0G>0K G?LG@_-G@ǜyGt G@oQG@oQ GBS>@FdGBS>@F'GB6$+ GBW GCgc9GC DaSGC Da GF@~sU GGn-SGG:4 GHpp?GHpp GI!aGIfsGIqd⚍ ,GIqd⚍ GI-l GI&GIGI GKr*AGKAQ GL532_0GL˟ GLu(sNAGL8 "GL8 GN/ݴ?F9GN/ݴ?FLGN{R}GN{RR6GOuCd2GOuC GOa GOa iNGPJ4ԓ GP役 s GQۛ}s;GQۛ} GQۛ}k GR\^VߴGRU i GRU GRU + GRU g GRU  GS> 7GS`ۛ~ GSuً , GTsiKGV D? GV:SGW*ꔏ GXe^\ TGXe^\ (%GXo}~ت GX>~wGR GYWߞ c'GZ Ctp GZ CtpR GZy?GZy (GZFb9GZӦR6RGZZ|rK G[S:lZKG[  G[X{]G\-6L G\>+L7NOG]KH% G]ra}G G]|`Av$G]>BM>G^y TG^y Ga憇JGbm4 Gbb8rGbR#rGc~/<Gc|PGcQ/f Gd6& Geki<-)Geki<-Geki<-GeCXA^[GgRL (GgRL Ggpm;D"Gh$® Gh$® Ghs\W:Ghs\W Gi/ N G{Ly?H G{2B>  G{7.|kvBG|͊/y? G}V`GG}V`-G}V`]G}V` G}CQ_!G~2Yy !GE4\ $eGE4\ ,OGE4\ 3GE4\$Gwlx:G%t'ht-Gf ks GX>G1#G' mC%G^,עG^,עGVIDHGVIJ!G>1g B GP5? Gzu9t G|"l (G|"l?G"ݏ SGx GAWZMG`R" GW{R GvaIaLGvaIaGvaIa[GvaIaQ<G&] >G&] G&] GS4V/GS4V GGwa GX G9[G G'cl]2G'cl]2 GOX G · G/˭ iG$cG Vw’ lGj (G 7oKG{HXTeG)3A-G)3A! GxaGH(3? Glp[[ G0}LGBJ[ GԷ8 GGI+RGGI+ Gij G,)< G,)< G=IqkjG 8t- G|, G>zH 1QyG>zH 1!Gxui (Gz;X GϜ0Gvkf!2nGvkf! +Gvkf! $ G z G߉vI(GC(?GTzG,5-_G,5-d G,5- Gؚk8R Gؚk8R GفE#ri G??GM%L$GM%$GM%KGM%S GM% G-pu G<?U GK] 2 G7 GZ> iGI(UpGI(U $GI(U , GgDk G̑P&GPi' GG  G5g]_ $GOmG]Hj G7E # G5B> "GGUCGGUGXGu_ GS Gy"LaGcRG&"Fr?G/w cGN{!GZosSG<jG mG 0 G t_@aG t_@G t_@(G t_@$G3RY~G+u@GTwS G G,AGm G_7~ G)a |G)a s GƝz SGƝz GBa c Gf|A #GɤUZc @G~q̅KaG~q̅<G&^\ G̝`HYG̝`H G8 r emG6ZLG6ZG6ZlG6ZUBG ^G)>QG)>Q GʸMGʸj1Gʸs#G{x }G{x $#G{x G{xvG҇crG?y ^G?y ^ GyFQ G07\| G I$ G%cv$Gz a Gb@.G!?lG!?l $ G!?l , G׻WsDG׻Wj GEr ( GS]f. GlEv G;"ϡcGڪ(?/SGs% GU,d GDA> Gl0>$Gl0> Gߖ_G߮07EGU G!=NGk -DGk?-Gk eGyGb~L#GlCGl GG=h`k$L G[U?%nGiׁGiׁ i GجYtGX#mGC^:"KGC^:"R GC^:" G4~G4~ j G"Ƈ^M[ G.;WGΊKCG0`J G0`J?oG0`Js[G0`JhG0`J Gz&*G4[: GuG_GamnBGamnaG ͦ \ GE{ c Gǧ?6GY eG똋G G똋G G똋G KGϡ=etG)T%Gu j G-]/Gh@GEҝ{ GUs)GUs)LG#%GRGHhʳItGHhʳI Gʨ}R G(vQHG~tsGlx| .GiS@YGiS@8GiS@L0GiS@#GiS@aGiS@ G㯏^E G㯏^EG㯏^EYhG㯏^E iKG㯏^E +G㯏^E e%Gk_Y[$"GfG% % Gp G3 G- &GU(.kNGwQԥ!GwQԥGȢJ!GȢJRGȢJZH+N$] H+N$]t HNMHef H:ARE H^sxDH^sx i.H^sx? HHKH>xkH22`pH22`pH3 #Hb]Hտ|  HWr˝H|=PbHc3C % H ?+H65vr H@H 6F i H %^f c"H .D+] H .D+] H A9Ư` H d_j$H r^m+H Vk(RH aTw=H HؔU HKZh H>ņHl| H1$h Hd< v HBRYH;H>,HW#^?8HW#^ HŌH_ H_;WiH 2qhMH 2q 2H 2q1H 2qH 2q $ HHVzA H4 aHޘkC?3HޘkCj H cPYH%hF+HmzHmz$Hmz Hmzs HM RHGi[dH.A"j.H.A" H80o?'HztHE]S!H8 jH8 HB. HTw'HTw&H HI/H Y/^!H"m'D#H"nM/?%H#Cj H& H'Tg Q0H'b' H' H(1Z?  H(ݲ sH(ݲ | H)*lS H*c\¿ H*c\¿ (H+$# 6H+$# H,jL_v H,uiN H-igR{H-*}K aH.< H.< dH/|R ( H2 @yX\H2uiItH2' e H2M w H2M wH37yąDOH37yąH4f@ H5P H6Rf (NH6kGHo+?H74${k etH8 8( H8S5) H8G,H9?!q H9|o߰.KH9@D H9@D H; շ' ` H;)+H<:2H=4`Mw9$ H=4`Mw9P H=i*-iBH=i*-i H> ݂t4 H> ݂t4 H>UwVZrH>&HAM2AmHBI6tMHC$) 6s/HC$) 6jHCQݡs;HCQݡ 6HCQݡ HE[HEs f&jzHEs f& iZHEs f& -HEs f&tHEs f&HEs f&HF*«i!HF*« HFcUHFcUHFe::HFe )HFe HFe a HFDEHFDE HFef%0HFi6N \HFd.} ,>HFd.}s-HGtwNHH F!ۖ # HJBzr HJR4f HJR4f HKq_HKq HK HLK HO$HOƨ HOjzUMjHOIeSO;HO.59'S HO.59'S HPȜHR qu_HR qu_ HR٭L7GHSrdHSO HT .t!HT . HT IHTk#HTk$HT,A R HT#/+ cHUE2HUrLIHZ80YHZ80HZ80)HZ80HZ80HZ80 HZ(7 ^HZ(7 HZN\wQ H[fPC gH[fPC H[ PN H\->ua]H\wFP ( H\wFP H]Bjة H^DB4qN H^l6%|<H`$`EbH`$`E?H`ΙvUt H`׀ "H`׀4Hb0ccs Hc'vOHebvāL? HejRRSsHejRRS HeU+:q aHeU+:qsHeU+:qj Hfl] Hfy[UNHg"JDuHhtO Hh)+%Hh)+%Hi}a#RPHkX HkX KHkX HmLHnn@8"HnFS(HnxKHo[cŦj Hp7[?Hpd,t& Hp>oØR&Hq }/w HqY9jHq)X̻v6HqؽcI?Hr$ Uya Hs?6HsjHt5_Y Ht\PJHt'oGRHt'oGHt'oGHt'oGFHt'oG Hux i>Hux Huxj Hu5HvJ1R&HvJ1 HvJ1 HxU== #&HyFh#HyC&IW HzD<RH{MŔ #H|xjH}? 75H}[ HXY ]H 06Hs ֺ۹ HI,_ (HI,_tH ( H0-H0-/HU7 -HDF[ Hb]Hҧ1QR HVGc,NgHVGc,H4H2~c`RHi%_)uIfHi%_)uIK_Hi%_)uIF HuwHuw H,W \DH,W$H2 (HƝRHƝH7hX HV5I!HV5IH  HjHo; Ho;t HuC"v HuC"vK HUո>Hb// H͏> HZ?HǙHǙ H ?fK H &H i H.2C]E,HoHo HE)m(%HE)m(Hn % %Hn %H5mPH=mvHyE c HzjJH߫XHۈiM \HG#@\) rH$a H-$?H-$ $H-$ HX,HB|56 HRXI . HTK$YHTK$D H%"?Hp ;Hp 3 H<45H<4YHZS h9H H  HbVn #H8/ Hq]g$3HnotH⁒jH⁒ mH⁒ 4H⁒ ,H⁒ Hd~-jKHd~-j HO`Q8 H^qpSH^qp$H^qpH^qp$H^qpH#M YH#M DH#M KH#M aH#M CH#M 1H#M ,H#M "H#M H9?P@vHHŁ HM4P+HTs HiXyfHOzlsHihwxDHihwx mHihwx Hihwx Hr $PH٦2 Hv덐JTH3 Z H|@-? BH|@- H|@- /H|@- (+H|@-sHL zH"5%vHw B jHܕA HܕAIHܕA'HܕAQHܕA9HөbH+Kj HVSsğHVSsğsTHAzO\?Hy6 HSN?HsƮ H$"i} H$>+ $!H$>+ Hd/oHkNQ6+ HPXEH"RH"HH^壾MsH0AEYHč? H\q H\qsHΖ̫! H&8J0SH}C4 Hǵ(R HC"s HS 3 Hȟ=j H~OeZ HʫE9 HlZ Hw?PH΢RHё/H/J:v?#H/J:v H6h Hɔ`HɔMH0ZS,H_&5#HЙD j H_SczHt%X Ht%X H{Zߘ s$Hԃ=Ѣ$Hԃ=Ѣ#Hԃ=ѢRHԘ5} HDxlH֤A9zH֤A9HĿK]HĿS.HĿHĿL H=;[ H\r  H\r ,H\r H\rOH\r iJHq@ Hٸ/EH K H*3|H*3 (HgIMHgIMHd xL HFa# H+P $Ho$jR1Ho$jHߠ.vR1Hߠ.vZ,HHBR Hm H,cl stJH,cl sRH;!, H@.nlH"p# 1H"p# $H"p#Hs8"s@Hs8" 5Hs8"k HtOHI.HIH[8s H2gH\q  H\q HtH/Б ;HzghT5HϚyYH&m H? E2[l Hڝ a HsH EH 5H4H ,/H cH iHŬ4 a HŬ4 HŬ4tH-^%BHw-9Hw-9R*Hw-9Hw-9H🲯\ [HA]@ S H:;yQ? H (jHM/"ݲjBHBO@R HTv H1Ө $H󨤂  %HQ벩 s HO$ą8v H +,H-VqkH|+H]Y H2t¡ jHQX?+HQX -HB]Vvz 4HB]Vvz? HFwxUfHFwxU+HFwxU#HFwxU Hx Hs_91H,̱͟UHW, Hҿ*HҿHҿ HaD I I\u?a ?I=#Ii50 $ Ii50 sIi50 ,RIi50 Ii50Ii50 (IK"I IIDI$}?IA7^ IA7^ I-z- I9I<E$I Z(I "o$] I KII \&:I \&:|I t9I t9+I t9$I t9I ,) I ,) - I u}I u}I u} IB'~ I!(~]~ 4I_K NIˏv8 Iˏv8 IdD #I?^Iy)G*U"Iqtk IV ydI=!|I4. " Io)= pI I( I6j6+9I6j6+ # I#(UI!;; , I:l I#+IM TLUIM TRI\ubD3I\ubI\ubQ I\ub IdN4I5Iްn<;Ii:tLI/&mvI/&mI/&m Iw) I5{Yt. $ I vtI 4 I!3}/ ,I!D, vI!)u4I"%s{XpI"bwzR%I#\Z I$ʳ~[I$ʳ~[I%MxI% I%•W)I%•Wj I&MJd! I'ڈ MI'ڈ -$I(  I(P;.c4I(P;.c!I)e4 I)e4I*i8k "I+Nsn&I+Nsn&I+Nsn&!I+Nsn&I+P9=JI+P95I,^|I,^ I,ZD? I,RvtI. ܺO jI.VxI.VxI.fU.%I.fU.I.$}I/UorZNswI/UorZN?0I/UorZNI0JX I0%`GI1_AhLSI1ir (I1I1[dI24 I2`h I3ZlsI3ZljI3Zl \I3}N7 DI3}N7 +I3|=I4`h I5%P)btI5%P)b-I5%P)b i I5Q I7F25>NI8n_YI8<S I99AQLI9؅HI<(;CI 5IF:IG#2*IG]XzII@TWIIHE.II,nyU-II,nyII,nyL IJC$p (IJC$p IKN:QIM3IMh|<IMh IOFIQ1 xDIS7PxIS7PxR$IS7PxIS7Px IS"Bڇ"ITdIT'K IT?UJ #ITeHF? IT b IVQ匿IVJX?ZIWGC IWŃ ,IXQg| *IYSѻRo I[2| I[2| LI\9N I]W{RjI^mL I^mLtI^[Ed I_90OS I`.Lf Ia>L7j IaG!Ia`@a@U Ia8R IbIcp4B IcyRnIdiio]RIe#?Ie# \Ie# Ie`xR}Ie`x:Ifl9 IfWN?IgYԫHIgh)IgXR Iiq~vtIiq~v Iiq~v Iiq~v Iiq~v Ij9Ej8+0Ij Ik04 \In:!NInXY9j4Ioŷ aHIqbSIq"bW Ir`~OIwr&Ar sIy)-Ȍ ,(Iy$UIy=IyS IzۘG \ I| 1RCI| 1RCKI|{2%a#x? I&+ mI&+ l IAȏI,KII/Q II/Q \ I}:BKIA!$Is3Is3UIs3tUIs3jBIs3Is3 I0,vIt25I-n.%I-n. eIaS]IM $ I-Tp/  I:oIzdl (Ih Pb cI=I7 Ia.F I 1 D IIdSIuDI@؋geRIv ̪ rI-tYI-tgIǦ%IǦIǦIO*b<I `r IC Ib~ Ib~ "Ib~jIb~ ,Ib~Ik lm%/It`I0Z) I0Z) 2IUT?9 I^R߻II IȼӋs.I/ IΘI,!I;IFUFD IljI*ef I7WDGLIfj eI B ?I B IU֚q]I!IRIQ IS-~ # IS-~ I+،_ #,I+،_IeȥjIeȥIt4;It4*It4(It4I=nd?I~I0}uItÇ| FI4ă£ IN v ISP !I6lq! I6lq!-IOS $ I$F%I\GI\GHI\GD)I\GIp> Ic`$,|Iu<} |I$> I<#]Ie}{jd In IOz I7JbI`"9C IHfIH`IHKIHI_jI6U!I+tI7=0#vIW YI{I{ I%NJ? I8rD^KI:N#Ix\H 4Ix\H? IX2.VNJI]axs I?&Ǝ I9IzNIzNIеYjIеY $ Iݫq(EIݫq(Iݫq(] Ig+m=|Ig+m= Ig Ig Ip3)βR Im#S}Im#:Im# IzbK@ a Iſ3UI`C&Io!}8IǷ2iv I6ft I^g I I+mI碪9I碪9 $ I4U I"/xIͅB I͈4aIN IN $INj=IN #INsIl&5pIΆ lNI)@l I$[ a Iu?'Iq >IJ+x Inv IzB- IfS1ThIfS1TsIfS1T I=3 I=3 $I=3 4I=31I=3 Iaj#IDf% I٬hx Iٳ-ԟU .Iٳ-ԟU (/I\I= I!rӠIo^do=IB/aIB/a ,cIB/aIB/aIB/a )IB/aIgXJPC IgXJPCIgXJPC7IgXJPCIjɌD IAۧ% _IR0Y IkZ)a1Igݱ" eBIJTH\ IᱽjI& |VIP{X I LUI LUI LUI LUI I{̪ I:B=  ID5 I3+"T$2I02 I ; a Iq I#?[MI: I蛡)[+I8M s I~B I ̒0 IqP(u? Iǿ` i-I}:(WR :I}:(WR 6I큪\ IVg{ I5I5YI9@u` Iv\y ,(Iv\y (&Iv\yIv\y It[ IpFb I-X!<I-X!<LI-X!<IV|?IDW7I1aJdwv0 IB0]:I I a/:Iq(IJPjISv? I1 RI1 RIϗueLIo8I1^?I1^ i Io? Iր^ J ]ZJ8[tu J.EA$ J-MJ=+ JKk JK JJ ;9 JB0JBJB J(> m JieJz Jq(@ % J ,NJK Jo1qzJ RK}J 2 J fg a)J fgsJ fgJ O J Rb 1tTJ Rb 1YJJ Rb 1 J Rb 1J \ /3 J ጟ J 1@p J e:YbWEJWc aJWcjJ JN}Y J=J=RJV[Jj !XRJj !XJ J!(ɕ JWq $JWqj Ju[Jt~~t JP>O[ JP>O J6d J?cQ2J.O Z ?J.O Z 4J.O Z J.O Z ,^J.O Z NJ.O Z iDJ*JV)C JvJt'C? J֪7e J5H?J5H $Jhx J0"v J, gJ, Jq `W Jm!tJt~J Jy%ubJ Erj J ބ? J ބ8J ބ (J ބ J ބJ!FsvJ!<1R4J!@ X| J!HR#V[:J#jIS2J#jI J#nN4J$<6/ut J$f[ J%jWl J&6^ J&?Dm?mJ&?Dm J&?Dm \ J&JY+J(~=mJ)|9 nJ)|9%J*JUy, ^J*}˲V 1J*}˲V?'J*}˲V J+/ J+[@ | J+񞘯J+w57- sJ-"J. VY6 iJ.<NJ.A?J0twS?AJ1ݾPXJ1ݾqJ1ݾj#J1ݾJ1bkJ1 J1? J2odH (J2odHt J2odH J35#J35J3}9 [ J47Tǚ J4c^PR@J4c^PJ4\ J5^re J6ĬafJ7!:J7!:V J7#2J7NvJ7 J7Ka^ NJ:D[L i J:/U J;?^Nb J=\W? J>ZS3J>4njLJ>4nj J>4nj J>}\?J>:_ᖒ cJ?KMy J?d%őJ?d%ő J?$r`>J?$r` J?$r` "JA^WJBJj +,JB] UJB|A4$JB|A4 JE>\n% JE>\n%JE>\n% JF$>"#JF'%Z? JFttNKJG JG JG JH=wncLJH=wncJHe̙i JHƋw JH?8 JI%ۖ-JKzK JL{me! JL14JLdλ]$JM!EohwJM? c-JMfyUJN(ܜjXJN(ܜtJN(ܜJNo 0JNo JOt*tJPE2) JP|\6'DVJP|\6'KJP|\6' JP|\6' JP* JQogó?JQogós JQ'ʌJRQ5tJR2؀BUJS=SCtj JUzU]# JY~zj J[8ϡ J[傤,LJ[傤, J\8(?GJ\E$b" J]J]Q` J]ޤ}jJ^w> J^`-J^-r #3J^pU  J_< . Jb샜f_]Jb샜f_NJb샜f_L=Jb샜f_S/Jb샜f_-Jb샜f_!Jb샜f_UJb샜f_Jc,] JcQ(єjJcW3 LJc/+n e JeN )Jexȝ[Y?JfPQY̫JflJf* UyJg,7v Jgws Jgs S Jgra ?Jhg=6 sJjJn} JjJn}S JjezJj$@&Jk[ @Jk[ Jm#s Jm+`- $Jm+`- \ Jn*G?H)Jnj0 JnυS Jn8<Jo|H JpݥCA[JqC 3 $Jrɮ0]Jrɮ0 Jt5'Jt5%Jt5 JteD )JteD9JteD |JteD| JwC(tJxioK Jxc|V Jx=R Jz?J{^)ZWJ{c!? J|V3 J|V3J|V3J|!ϰJ|!ϰPJ|!ϰJ} PR J} PR J}:)"4vJ~f̓ jJ~<J~SxCJ U JɲJ Js J (-J#;H7Jte fjJte AJte9JteJJRKJem> -Jg ^Jy Jy JZrDJZrK J6L J!<t JUuNIJUuJUuJOpv1JOp U#JOp J$J'if Jjgj%J?$KJ?w0 !J?w0 ,J?w0 J?w0 iJ?w0 }J?w0 J?w0j~J?w0 IJ/ nGWs JzbDJzbJzb JŞ7b+ JMFd JH* JXQNJȆc J>l] J5vc}b% J5vc}bR JU.JCcJ W2J*{[dv J<Ɖ*vJB ^J(lJubJ3bR߽|J#5'JcߴRJh<JS \JS +YJS0:JSs-JSjJ2 J ^ i J: Jfo Jm-& aJ`"KJn?yJn JVJ^ $JVJ^JVJ^ J_#?JXr^i:JjfosJjfo Jݐs Jݐ , JJ?< JA;[vJA;[vJ"ȣ#'&JL1v J`bGJ(I %J]D J/1 \J/1 nJbҸ9 J55JEJ55JjJ55JJ55JJHo? Jm(:iJlDJN |JN JCF $jJm;Jm$J?3m J SsPJ SsJ/a6gaJT`RJĐ%J/)08JGm  JT= J豎U (Jd Jb;jŵRDJb;jŵa3Jûßs Jĕ0(_-J>_@\sJƶg_t;Jƶg_JƷтz {9JƷтz eJ&= $J!C1J1wq# Jɛp ,J~0 R J[J^J^-J^#J^ Jˋq7J2a%&v J̔~R J[KN@j JΘDFJV&F)]!JZɥY JZɥYzJZɥY RJZɥY (*JZɥY iJZɥYsJъZ (&JъZ J'=ץJ1>H Jm aJm jLJ-mgsћ J@ J*gd JWg$ ! Jنg_OJ۞WOt J"G~fJݭwh@sDJݭwh@Jݭwh@ , Jގ|FdzkJގ|Fdz JTnjJ߫[.J߫["J߫[EJ6;cJ}q J,Kks$J,Kk ,J67| Jr{PJ5R? JڻrRJڻrRZ JڻrRJW ,JW (9JW J<%J< JL6 CJL6  JKdAjxJKdA?JJKdAs JKdA J'" KJ3)qRJ@ JϜ2JϜJ>Dr?:J>DrsJ>Drh JywSJyw JNOKD>NKD>NK uo K Yg K +Y K ?RU K 6\1  K 4K t|W *K t|WK ']KfɃKfɃ}KfɃD]KfɃKfɃ KP%[IKP%[SKHa1WM%KHa1WMKHa1WMKHa1WMKHa1WM KHa1WM K F!K Id Kig ,-K?e KBF  Kvr ( KvrOKvr TKvr eCKvr>KvrbKvr DKvr :KvrY K8~r[ K#Җ05K#Җ0%K#Җ0SK)uI[Kib͉> KrM{-KF|DKF|K[ě $Kg" #KuUo?KuUo TKuUoj8KuUoKڡӠs K W% a KM߱a $KM߱a R#KM߱a KM߱a Kflc4 KT+O[ Kdf iKϮ}> K~?KTQZKtu K#-'K RDK RDK RD$K RD Km1K7Km1DKm1Km1K FK ]"0 n K i)6|K |( K!iׄ$K!ɨCRiK")xC K".I K%x>K%Hپ˥ K%& s K%& $ K&vI? K'9&lmj K']\+K'ms K'~ K'0k K(YYl_ ,[K(YYl_ K*E: K,_ikK,FA iK,FA K-%sVK.NK i1K.NK (*K06$CCS,K06$CCK1 #LK19 %K12Nd)K1V K2 _?K3<ݙ4\K4SH K5s~_K6Xxl  K67n K7'э K7'э  K8J *K8ab?QK8ab UK9ǯJ_ K9ZK:(K;&1oK;9N9(]K;̣.`|K;̣.`| K<c6 K=f K>e2| K>s# #K?o"D K?GSLK?5"SK?5"]K?5" K@FE~K?1K@FE~Ks.KA]B?GKAl=f} KA `vtKBh#^KC KCDڏxKCq^3 KE.3,_e r KE.3,_e KFDt-VP KF,ģn a)KF,ģnsKIÈEξ KJw~RKK$ KKWrGtKKWrGsKL[sKL{$KL{$KMu hda1KMu hdZXKMu hd=KMu hdLKMu hdKMu hdKN5eCKO~ c KO# KPmj !KP 3+sKPѾ_#(LKP$D $KQ#sgKQ#hKQ} L#KRp LKR jQmKS>]KT":VKT":KTPIV?KUE3 KVB]KV} 2KV} g KVҝh7KY-KZfG?"KZpz\]K[ː K[A\K[A\?K[A\K[A\K[A\ ,K\5LojK\6ļ K\Y sK\ʑ=[K] KO iK^KfчxKfC sKg6Xڜ<{v/Kh[CY KhkKiY3ADKj5`&C lKj5`&C Kk,| Klń\?Km 'HE e"Km6-rQKm`Kns\v+Kn&z>SKn&z>Kn&z>KnZ Kn1 Kn1sKn1hKo Ko9Ge9Ko9GeKo9Ge KoSR8Kp5y KpIBV s#KpLm KqTt - Kq*]t "Kq*]t Kr;m0B KrlA< KrlA< aKrlA<sPKrlA<t Ks*{5 Ks*{5 Ks*{5 KsV4 Kvd KKv| KwAK(Kx-S$&v Kyجm g/KzE"\KzE"\ K{t K{ͷ.K| apK| K~6&N"K~m0%K~m0Kz,ΨL"K?e?!K?e e KQt=KQ:6KQ gKKzKG *K,¥ a K ~*h K ~*i:K ~*ZK ~*U K ~*RzK~m KY櫸M n KsK _+U&Kz3 )KϻQD KCKCKމ Kމ iKމ KމKG8RKF^K&}(s KvN K;j@<K;j@K;j@R K.8_G-Kv&Kv& K3C\uKYs K`Ѭ$ K^tKmed K@UKK@U K@UP Kʾx K`p tK`p e=K`p i+K`p&K%}i K%}i eKB#d KW5l K'DX Kp*KKp*RK,TkKO K#!3K+L K󈌕 KwDQ KDgdYKg c-Kg Kױ{K{~ K7K K3{TX?Kju ?| Kw \KiY$ K7acoh,K7acohK7acohOK҉bKV)"k KzXS"Q KmYk{ K|vlK! S<K! S gKBLRKB7az c'K3m) $-K3m)vK15Kvc KIU K]oVK%7KrKIlwA,KIlwA,Q Ke xO Kʿ (Kʿ (] K:LY$K5tKϔkYR%K@BjZ K>F?K>F KMP = KFMǽKy[?Kas KFQ)h cK)+`LK?K?K?CK?R+K?K Bw $ K UXXm5KMRKM K'jK' K' KN+KgrX% KgrX%KGO ? Kƚ"+4,K`D KBRKGQRKX3%hKnLFHk KHsVZ3KHsVZ (,KHsVZ $&KHsVZ KHsVZKHsVZ KbP K#>K# K#Kۛ$K K&Qj K+ K_6, K_6, K)R97KI}_w KÁw:KÁw:ZKÁw:1Knh| Knh KĹrtlL2KĹrtlSKĹrtlKKĹrtl K; KŜ jbKŜ j K!] h| a2K!] h| s KTnEKTnDKTnKKY sK2Ñ#\h KȮ|8:w \ KȮ|8:w KȮ|8:wKȮ|8:wjKȮI`S Kɭh>RR#Kɭh>RK KɯbY KrUEkKrUEsKrUEt K?C5b KK"=S*KK"=SRK$oc KPKP $Kumn NKΞq@T_K"{ K8Z= ?K?ok/K?okKїwERKѦF0KѦF0 KL]KL4K[hҋiKңdJ4@ K7{ K7{ KHR K$zDK(YROVXK6 S,KR"iE. ,KR"iE. KԔɢzK0:؈8 DK]G݄a? K֞/ KIjD? KeKLNK|` # Kڴe.4 qKڴe.4 iK戕_ K戕_tK>y # KN? K[$ \FK^ [N=K߅>K߽3 f Kb Kdhe ,KdhejKv;@KgDG gKgDGKgDGKgDGKgDG KÕsKi8)?KN K_3^ $K_3^ K_3^ iK_3^sPK_3^ GK_3^ 0Ku^MK>A K ` K9jZK9jFK9j>K9jD'K;fK:B$ RK\qVK6GKl;*w(Kl;*w Kb!:SKb!:LKB\ 1KvKnU Kw KtL K)F!:{JK_8^z K$BRK??d K??d K7L + Kf|K* K64r8 Ky.hZ6K(} K' ?Ka{\LT.O Lm L| #LeCFLͷ=L"tɋ \ L;' L$L Lv),L1L1L e\ a#L kpbi L /Y?L SR L  \ L 1 L 怼 L KOnL "4t L :? L T-^. ,L T-^. L T-^. L3 L3 _L3 ZL3 -L3 &Lr;pLILs!LIL LJNwEu3LJNwEu Ls,!.v!L̬< Ld%扷 Ls LLU!+LBL$/XL$L[?I Lp]"84VjLOSLp9 O 2:Lpbedv Lpbedv? LfZL|ľw|#LVG c Lpeo!S L!zkL!ztLdn6Es L[DLS"L >LS"L #LuC~LuC~ LKR!LP&K L8{ !LYR LYR  LYR LYR LYR LYR SLYR #LYR L6EL TSuLL TSuL Ip#cL Ip*L!l6+?L!¥ L#Z^7L$t̐+ ( L$bH e L%Ia?L%PMhCL*C3 L*H*>-L*`  c*L*m \? L,1ƛL,˻v L.s(`L.s(`(L.s(`L.v}&L.(  a!L.( tL.sa_bL.sa_LL/YD qL/YD >L/h (lL/hY L0*,L0*,]L1נ7rL2utX? #;L2X?L2X? n L3ՠv L3~V^)L3~V^DL3~V^KKL3~V^RL3~V^L4Z|V-L4Z|V (L5NY .L87ռ aL87ռL87ռ? L9 XD OL:o ZFL:o ZF \L;΢L;[L]S5L>]SL>]S: L?۸"LAPCLA&`i? LAq?2LAq .LB:LB:LC%++oLErID LEاsЂ LEob m LEob LFmyR LG\DLHt#LHDsOlNLHDsOlR LHYd[ a LIg5" LIGr7-NHLIJӤCbLIOKKkD LJwiK LKv$IMRLKv$IM LMY,  jELMBfaS9LMBfaZLM7o[ LNd?o LOJH LOag&LOz(LOz( LOx_SLP j LP tLP (QLP )LP i LQāLQJ~?LS$Wb*LS9 %][ LS&LTH LT'2v*? LU<'t LU<'t LUF BLUF j&LVBH LVNͼRLV\h LYkź$2LZRusLZmmR L[ВL\)A  L\M L\<K L^ d L^6QRL^Sτ3>L^#vL_=EeLL_MhL`h%XĄRL`J38 L`\ LaPA aLbOU)Y;LbOU)aLc?QR2 Lc6-vQLc6-!LdK# Lh0@LhV &Lh/ LixjB. LjʳilR Lk eLkM{ a LkM{s Lln>(wt Lln>(w Lm*ILnw֬.Lp ݹ Lp_Lpf Lqbv 'LqSB2Lrߤ|:Ltn£ ! Lu:Lvހ)RLvހ)Lvwv*+[Lvwv*+:Lvwv*+Lwja LxgOc Lx+>z Ly)JAlNqLy)JAlLy)JAl Ly)JAl L{?fܺ #3L{?fܺ L{?fܺ $ L|Z-_CjL|Z-_Ck#L|Z-_CL|Z-_C L}:NNdL}ĪZ L֖LX ʽ mL̉L ,LA,6L. ֺ L6]Lʹx3Q<L-c vL΄|X: L}qL LsILzLLٳP9LٳPL τ: L/qL/qL/qZL gL#RN$LI'LϟDLe@=E aLe@=ELe@=E LG Lֈi?LY !?#LjS&%PLELLILڗV SqLڗt1]Lڗt1]s LmbO?L ^&L ^LCYLCLC9"Lݨ3 Lݱ&FHLn'{70Ln'{7 $Ln'{7Lߗi LS$ Lu2tL\pK L\pKR L\pKa L)yL)y ( L$C +LF; L+eL{ q LHLsLHL Lڡ? LhtLk0 LH&CLSM-'0M-'0M-'0qM-'0 M-'0 M.e`3 2M.e`3 M.%I tM/IKM/{bj M/e[] iM0JL[M1nv}u \6M1nv}u M2=ji M2yf M3 M4oU!6M>Uf M@X3S MB*^"RMB*^"K MB_a }LMB_a 1MCe?2vbMC|_w MD-|D?MFzfXv_MGԋHMH(ٷYEMH1[ MH A MIE<MIE<MI}:<MI} &MI}MJyHuyMJ)R MJ) MKi}'"?#MKUeR[MK طd5MK طdoML*gSnLtML*gSnZRML*gSn?ML*gSnS1ML*gSnML*gSnK ML*gSn ML5G? MLiMLiMLiMLiiMLi*MLiU MLiMLiMM@fS coMMPn?MN"ZdMN\9XMN cm LMN cm $+MN cm MO-m MPYuLMPYuR.MPYuMPRmf MR/ jMSŽ` MS.#B MSFMSF DMThS+WMT} $MU-n MU"5MUu@ MV MWb MW0o ,MWtsMWt nMWt ^JMWt \+MX#U9MXwuF_sMXG<MXG<$MYZD s MZp/yMZp/ dMZp/ a1MZp/MZp/ gMZp/ sMZp/MZp/| M[eKM[e M[!B<t M\Lwf M\K` M]-3p_M]Rڻs-M]aD`VF M]1(M]1 M^n M^$]wvRlM^XKKv M^p9w M_ܜ vMa [MafVMb~z(/NMe;1eMedNMedNQMedNLMedNMedN MeIMf5jLT MgSa MgSa Mhv1EMhv1E MiּMiּMiugQ MiugQsMiugQ eMiugQ|-MiugQ iMiugQMkೋ^[Mm} JMmjMnE%4A  Mn_*MobnF[s Mq"Gft Mqm)ЭxMqm)ЭMqnc  MqYB lMrڮ)MC Ms3d=-'# MulD MuֽpMuֽpRMuֽp Mv| \Zv Mw$3WY#Mw>^CMw\BU MyG f9My~Ye8My~Ye \IMy~Yet Myĉb?-MyĉbMyĉb MyĉbjMyĉb M|?)hEsM|?)hE Mcn \Mǐ̈? MUOAMMYS MmDMCD%MCDMCD&MRW MQMlPRMlPXMlPMѱ]fEMN- %MQfL$nM;jM; M;tnM;YKM;b+M; aM+{e|#M֦TkFM֦TkF4M֦TkFDM֦TkFRM֦TkF M֦TkF + M&< % M1$MFiP Mv#Mp Mɤ% MJDžFJMJDžF M4oe MFp ^ Md8>k:Md8>t MPYMBLy MBLy M]OAM!M9š5 M1$i MHshvM3M& e M7DvMz. M,TM/`'^ M@M 6ML /MzzrR M*1LM(W Mh^xO ,(M| Md=M5d Me\s~ (Mm jNMu&BY # M/nEYM/nE a(M/nE MT-q`j$MACM[30M[3)Mۂ \MV8  MI  M 4GkMx>U'Mt Mn/8Mn/8M.H)M^f]> ,M^f]>jM^f]> M{JeK,MBh/V lMB4wn MB4wns Mzi7K M)_р|M)_р{M4HtqM4H rMl"%tED M&M& M~ek Mltz M+&= MxtMiKM('Z/M('Z MFWJd|b M'7Kj#M84 M\i vIM~ӮMZqb M@-+MжG}jMA M )JM )M )M` cM}|xb? M0g M|f[M|f[CM|f[M|f[ MHpMHpMU2RM­L>M­L M;mTN Mõ$kMõ$ktMõ$k HMõ$kYMõ$kkM# jM{ιM.mĞnM.-=|M.-= a MOѬvM0u8#M0u8 #Mɖ/ L FMɖ/ L MȦTASM1 S2M MQJnP? M]D$Xq M˪OɆg MH \MwMЛ&jM;\MЛ&jM;LMЛ&jM;ZMЛ&jM; MoʰM^ƒRMfj4v MDgZMՓUvMɏdG:M b Mֺ? Mֺ? AM;VtoMחB+M]p M]p (XM]p 4M]p M_UM_UUM[.NMٽ/ MapGf0MapGfMۑ 5ӣMۭxX ? M̏ $M܈!(F MK=Z>M┪5 #UM┪5h|M┪5|M┪5 ( M┪5s M\)a2 M޸H|vM޸H| ;M>rS3MyӇ'N MрӳD #My? MCC~W]MG\sMG\s MkE?MlϪWMꈷ Mꈷ JMꈷ ,MꈷMH n'T'MH n'TMOw^ MdWO Mo9$ Mo9 M~$vMjaf?TMjaf MEmM ,M-y,EM} _jRM~TnjM~Tn M1M ^M1M M1M $ MEW{R6MEW{ MEW{MV .M-Q*K7M cMeC M@vM M53RM53KM53P M2 h LM[A%jNME DME Mܚ~ M)Qދ{M)Qދ{M)Qދ{S M)Qދ{ MEp1ܐA MEp1ܐAY M'9l"M@ c MccM R4MO7b[MO7b MTLMTU%MTM_ABlM_ABl M2?5tM2?5 iM2?5sM4pX9"M4pX MU͍C m aMZG刿K MmƟTn MmƟTn MN6_?MHƖ M4.< # Md!I \"Md!I AM@"ʬ$M@"ʬKM^u8nM6{ӞM6{Ӟd M* u8K1M6k$ N3'N_~ $2N_~ (N0D\9 c N=N!3gF NUP~-NUP~ NUP~NZ  "RNm GH N~msNR14 Nnm| ,NyO? N9 N a>?N < N >rd 'N jv e N \`9N #/E " N6ey>KN6ey> NlXNmNKNDwن'> jNM7( Nz)2 NiM \ N8i  Nr\NtN>N>KvN=N& ) N @(,N&ttN&t Ny󷾴h NANNB~S;Nmx Nmx Nm;eNv# 2NՈl^NPjJVN2N,*Ew}v:N-@d#N/XMC cN/ &eRN/ &eSBN0>+ >$ N1-) rN1Q9H $ N3(S!(\.N5RN6sq# N6]Z)N8”H0# (N8ͳ N;%^; $N;;{ w| NHvð vN@2*_ N@qɏg ( N@A= NALRNA2OSD NAnn!DMNAnn!DYNDPNEGp?NEo8hPNEo8NEo8NEcG s NF/͏2 NG\] w NG#3uV a NH]~6RSNH]~6# NH]~6NH]~6$ NI溪`gNfNK Z NLIaNMh$a #[NMk3=r!NNXL%j NNlفR ( NN½T2[NNcl NOJP ,NO,E J NOw NP!Sj NP/2T9NP/2T aNP/2T?NP/2TNP/2T NPV cNQDA7NR Uڬ aNR +NRjNS1NS)NSNS NS]R NThBOvCNThBO #NU7ƿNKNU7ƿ NU&xdNU`jrNU`j(NU`jNU`jNU`jNU`j NWM!ONX!NXUNXU NY'/NY'/ N[b?N\z~FJR N]uX޲[N^9N_8yc'RNay9? ,Nansj Nees Ne0n#Ne0nNe籈+H$tNfA $sNfa Nf6zkfNf) Nfݗw Nfݗw NiQX] iNiQX] gMNiQX] 7NiQX] \1Nje+CNk]& Nkz[Nl@pkNl@ptNl_`Nl_8Nl_Nl_Nl_Nl_6Nl_&Nl_%Nl_Nl|D L%Nl|D SNl!gR Nns1(.Nny|kl` ,Nny|kl` No,Jj No䭄 Np%`t NpcDme NrpdRNrpd"NrpdNr䥨= Ns*o $aNs*ojNs*o (Ns*o \Ns*o ,CNsפV ,"NsפVs NsvhINsvhI NtGU< Nu#Nu݂tvNu݂t <Nu݂t eNxQ%Nx\%s Nxny Nxp:flp% NzdLN{WcN{WcN{Wc N{I06{d <N{Ŵf N{" !N|Z&$k N|xK N|koʤN|koʤ wN}/,[ Nf.wv N4_ s2N+ʞNh @kNP4 N$A-5kRN$A-5N$A-5Nxx)NNAOg$NwzkQg NwzkQg?NwzkQg>NQb{ NƧ9P! NƧ9P! N$7r)NN`^2N`^ N`^N_ZONU@J NALD s NPN 3N0N]&Q NC>/ 7N Z(N ZN&DINN.#CN2sj N)YN)Yj"N)YbrN)Y a?N)YkN)Y N)Y N)<q NN}N}d Nϼكf N@Ǻ2mEN@Ǻ2m N#N#tN# mNH i NsթR N 리sNJqddYN, N>ZN 1¨sN 1¨LN@"!Nf^< c#Nx#r #$N'[VtN(fyUNv) NN~W1")NI ? NQxNcȋ NuSNu N]GtNF#Ny3/>Ny3U$Ny3!Ny3NKNKd Nm&a iZNm&asMNexdNtk:N>NE- (NQh NwPR N$ ,Bt N x jNnT? N5x .N%쪞z? NE $UNE NmՎC ( NJd9.NO\ |N+tN+kNK  Ng| _N'"?N@PfsNeNe!Ne eNes#NekNf1GKN`9 No) N d&=#N d&=N6 N6j Nq\5 Nq\5:Nq\5N * NBN&ޫN NJSD(NJSD(thNJSD(8N.7v1N.7NŒ) NŒ) # NB{^U NçjÈJcNçjÈJNçjÈJLNKi}SNv N  Nߪt6N $$N X !NțpY)NțpN6)**d N\*N\ N&'?aN&' iYNyGN΋hiL NΏ ;RNK NЛ֊B}!NЛ֊B}NЛ֊B} N2v NӲU J}}ANԗk}Nԗk?}Nԗk NԗkNԹqR NMNNv$iv NչNjNWj N׌H2N4 N4j N1f #N< iN< N3#PN52r,NV2pNݯ~7 N6O NmKRNq욶+ON\> N\> $N\> iN\> NtogN?iv6Nup`s N8 N㶤4 Nc% qN+=Y}N+= s5N+=%Nc  ,+NfEa9vN御`[pNqm[tMNqm[sN挮4"HNX N?OvLN?Ov*N6Y~ ( N/E{?Nr,X Nooj6Noo NxI-iRNYde# N N  N"̥%NOs?tbNR cNfɼDNfɼ No,Go|pN^n NoanN NdUN.z NV? O"q]S$ O'Ъ1 Oc/OWѸI=OWѸI OWѸIOo O5," EO+N7O+NOҀVGO Z@Nj.O no7? O%/z/[nO]k OJPO hI:O A#O ~C? OJf O >( >O0[OK_kqO{ԹӑY Oe ,OƳ~OƳ~Q O: O:O`]u؍? OӖ8)RO%n=ov O7Q-f0O~aO~Ow_a OFga#O%i3 , Owqa O.- DO0 %f OtO (N$ Oaq Oz^ڶbOz^ڶbOz^ڶbOz^ڶb Oz^ڶb Ol_̗<Ol_̗<$OT@I "O"@iK.O"@id)O"@i&OD \ O &[(O & O!-@O!pgY_O"z{qO"֔;tO"㖿, #8O# UO$2^ O$oq7L4O'o O'o uO'o (+O'ojO'Fh0\O'Fh0\ O'Fh0\ O'Q58O)l6; O*,. O>٫ʹO?U< lOA+,#OA7A0j%OA7A0jOA7A0j OB@zP#8OBzJg9 OB/\ %OB/\ OBT jOC-OC- OC2T50OC2T50OCJ@^ OCJ@^ Q OCD4=c * OD ODzv(l OFMpb?OF`o )OF`oR OJu, OJu, OJu, OJҕVZj? OLw]`vOLw]`v OLw]`v OM+x3=OM+x3= ON*3ZON*3ZON*3Z g OQ~xOQ~POSULhOU4; OVeٚOV5D OXŏvv OX|Q OXMOXޑ  OX Dб7OX Dб OX DбSOX Dб OYV^K OYy.{ OY2V]#OYdT,s)OYdT,OYdT, OYdT, O\#O\5icRTO^b={Ȳ O^yLO^yL O_TGB}Z O`yh{(O`R: Ob?Ob/ tOc[OZdOc[OZOc[OZ$ OdJbR OeCak_ Of@;?Of>p&OgxyVN Ogvl?-Ohj\ aOh*ěRHOh*ěRa Oiޏej Oiޏe OjD/ Oj/COk@CϯOl*N㉱Ol*N㉱oOl*N㉱sZOl*N㉱ $?Ol*N㉱jOl*N㉱ =Ol*N㉱ Ol*N㉱ eOmf+&ajOnG|{On? OpASOqrrg#Or+(JOrřW Osx'E Otc 'jOt̽! e OwKìǢ)Ow`r5VOxm` OyDiܔOz-~"Oz-~ Oz-~Oz-~Oz-~/Oz-~Oz-~K O{JsO{Jh!O{JO{:)S jO{c y8s |O{c y8s ^O|%/O|%/O~@dP$:O~YO~.O~.?O~. c O~.9 Ox4Z O8҃ O8҃ O8҃ O8҃ Oˡ s@Oˡ -Oˡ "Oˡ cOӼK #O|}0ysO|}0yYO|}0yO|}0yjO|}0ytgO|}0y eO|}0y (O?KO?#OqCX*!O  O3BO3BROj3OdAo+s O)wZOu#GL O0I7Ož" t OY O99 7O99 7Oɪl{ O"u\2H|O"u\2HO"u\2Hs'O"u\2H aO"u\2H ( ONto] OCqޙ>O`}ZO1ZOA`"0O|q` OKb EOKb BOj jIO#/ $ Ofs#.Ofs#qOfs#QWOfs#/Ofs#OW< O * t O*di0KO~tGjOeIjO52 OeZ? ( O (h2O,' U OLKO F!O F!O؜FMO 3JO 3JOL> Ourp|! j'O~EvQO~E ]O%oO%o iO%o 8O%o )O%o?%O]$ O?Oo"<EOo"<tOYLLOYL<OYLOYLO E=kO [d 5 OBn`"UuOBn`">Oy?OaWOa Oa OmMO?PO?P O zOs g Op O gO Oi I% O*wOx$' $ Og̴ՔO e. c"O3a]4O3F̉OBP OēO.qTO }q?O*|S :'O,H#& O6} i>O6} 6O6} O51OVBu2& O]f OtbOTy iUO OVr$ O:Y \ OG!On. OJ~< \O/ \ O^Ah0O^As#O^A O^A O^A gO^A ( OOKmlOZw OZw? O\[!kOC57x (OI˹וRXOI˹וS;OË+aO Ok~ O9C8)? OtO]OtO] Oƒщ?O]2  O} OȕBO0/]UO0/ O@/: jOa< O0тOLOUC (Oe%` Oʊ~j- O?c OSv}ݭ7Ou!,| O }B O }B Oe{1Oͣ(@Oͣ(+O0E1 O}jtO}jtZ OP O5[F[/On7'OЎOcir}lR"O3)O3 mOtft Or!?OeO?Ot O 9@T O׳S̉ RO׳S̉ (O׳S̉ (O׳S̉ ('O׳S̉O׳S̉ Oiw OLN $OJfz [O4\$O4\$9 Oڈ) !zOgH+% O]fcpqKOܬѢOܬѢ=OGO4= O> O '/hO '/ZO/ $ OוSh ,O%ɸsw-O%ɸsw+O%ɸswO%ɸsw Oဟy4d Oဟy4dvO|:&g Ogh. $O]3nP OdFz cPOdFz #3O, OTLC] OV/\eOV/\sOY] 5OW/Sv\O)Mӊ?#O\H_On OMXJ O/nMO/nGOqkOyBj O @Vk> mOZ~-KO:'O! \ OŔG OG{[O9ZYO~Y O5K O0/ROYs OY O OSk[OSk $*Oz c O O*j8S O}Wt_ OXPOXP~OXPOAuBz OEhA1OW7ɡ? OvQ OȭT O@O@SO@Z@O@LO@_OP&SvOzn։~ ODirODir!O`4T%OJkOn>,.NOdtP-OdtPsOZe OZe OZet O`yB 0O`yB O`yBY O `RO; 2 P݉^P5B.P[W+,P}$~O PQPd P& P^@'P P_ g P#!>iP#!>iPPꓟPm#,OPw PwS P^km4 ( PxSPP1Y Pɹ8)P $B (P Ta. P sS*$P Yڂ<P YڂDP }F?cNP Kjh!P ~2S P ߽.P ߽.R P 4*! P 5DaXP  P`F:RP?UfP?U $#P?UjP?Us P?U @P?U 2P?U (%P?U , Pk!bt PoPE!PE! P3'P3'P3'PPIrQP P䅗G s P#II P'D PVQ 'iP{I$ P{IRP{I#P{IK P{IUP{ISPYUMjP*> PY}O< e PY}O< P05!0 P3IPrM跨tP bP /Plв cP鞸$P)ڕP 7n"IWLGP 7n"IWYP"sM+NP"sM+NP"sM+N P#4ٍ1 P#Z\ P$7WJ -P%GN R P&b秃 P&b秃 KP&.Z[P'iLYF?P) o=UP*3Z>P*_A1UP+v&6Gv!P+^ P+^ P,2sP,#?P-6fC P-:(،9 P-O$Uu P-WP.C2XvP.;Z} P.$BA\P. UN*P1/ P1d(P1dQP24Z P4[oڅ (-P4[oڅtP4[oڅjP4r?P5lOwP6Vq{D P6Vq{ P6<vgP6ԫ{ P7 6P7 e5P7/P7'P7P8DY:PP8cGM? P<w P=l/)P=mn0W?&P=mn0WjP=mn0WP=mn0W P>KF P?[߈* P@qs/P@0PAB]O[ PB'TS PBaT0@PD=٬PDm  PDQ0 PEK_APEK_PEK_PËPEzE PGyڷDPHPVz* PHPVz* PIY P\j\>t P\j\> *P\j\> P\j\> P\j\>slP\j\> iUP\j\> MP\j\> (%P\j\>jP\j\> \P\j\>k P]5%쨪JP]t %P]t P]z P];Pg ~>Pg ~>Q Pg ~> Pgy@ Pho_*PhMMPhU PiH.? PiQv)r aPiQv)r?lPiQv)r $PiQv)r ( PiRE $MPiREPkDX%? Pl :5VPlZtb Pm> 49 Pm]BPnPo-٠'PrDgPt>Puf_TY Pvt/~5)PwCQtPwCQtPwCQt&PwCQtD PwQ4 Pwu>i?Pwu>iPwu>i Pwu>i Pwu>i g Pwu>ij PwC@1b]#;PxcJPxGD Pyh 1HPyh ?PzJ$ PzJ$ PzJ$ tWPzJ$ =PzJ$ jPz'aP{KVcl s P{Ob 3 P|Q/\>P|#v P~peM P~z_jn'8PYGC2Æ PYGC2Æj P>m _ Pw2SD@Pw2SD=PLxv PQ}fPJPm PzYN(PO (P@,> WP@mvPBÑ-PGQD P?Qt2P3z )9PJ£ P=U8 P݉% ,PZ՘G)P!lUd-Pʷ2Pʷ Pʷ P{]R PQkwPQkwDPQkw$LP|? .P)Q P?+i sP?+isP|JP|P| PDX` iPDX` PWuW P7hePE.L ~PE.L <PE.LP .Piz HPH -P/rR%urP/rR%ur]P/rR%urZ PHOqS PbA4 @PbA4 P3e "P3e PG ! PF̖p PLny*T P %P PVQ] P;!ѽĝkP;!ѽĝP;!ѽĝ:P;!ѽĝP?PD?P=8e-[ $PPw,"Q2P߭7zM;P߭7zMZ1P߭7zMP;/PFeۻ  PڴSoL P7{P\v]P\vR P:R. P:R. Pw' PfR*PfP_#Pղg EVPղg EVD P1t&dS Pw-<? Pw-< (Pϋ SP  iP' PɬayPXW \QPXW \P_w[=P+  P~ܵPj1JPZotEPZo g PZoY Pοq'PϷ`U?PϷ`U PlR PЇ$==PЗ,gPЗ,gk PК;Ǣ[ PH;P3L^F .3P|oбv PӦCh r Pա_}  P¿RSP¿D P LlPƍx:hPƍx9.P tJ2  P[ C8Pok!?Pه PيJO PP=tP3l~l [Pۻm ~<Pۻm gP<:5 ^P<:5 P<:5jP<:5 ZP<:5hUP<:5sTP<:5 !P<:5P)wҠP1?P1?R PD Pma@?Pu$2v P QPJYtc.K P)NP3&tPj@ %t P+ P+ P%NƲP P"-R P߲DRPt.Pt P,^KDž P,^KDž[ PYTr #]PY: P:^DPH嵏 cPsz |(P-͆$ PT P5 iUPJ01PJ01Y P"Y PVXO] ,Ptt Ptt iP:5ź?&Pv PvPHN PQ%PY#9 P.`G#P݋u8 S#P݋u8 nP݋u8 \ P)iYP)i PfaNK P9BX$P} P}%P} $Pw{߆2[PvК7PvК7 P2aJ P[gPkM WPz~|1])PFh/P5vP1ͻɘt PN+" [PN+"sQPN+"%PN+" aPfunPv?ZPwj@sPwj@@Pwj@ 6Pwj@jP  P[NIvQ-dž2Qi6 QVQ/t[bz'Q/t[bzKQ.8/  Q _5 Ql.Y(QǷa Q YQ -(Vv sAQ -(Vv $Q -(VvQ .Z_n` Q sMS< Q  Q bQ 'Q Q(zJ Q(zJ ,Q(zJ Q(zJ &Q(zJ Q(zJ iQ;i QvD'Qj?QFIlE0LQTQQHKWt]QQHKWsQ2K QNGQ"s Q' б ^Q.s,Q.?QO X QO Xj QpwBTD Q}#j\1 Q!A -,Qh?Q? Qe5[ QJ Q[N)Q[ QBcjWQBc ,QBcQ\# Q, -Q, QH4" Q; Q ٚ Q!d(Q!}LQ!}#Q#ASphKiQ#ASphdQ#p $rQ#p , Q$7M^Q$7M^pQ$7M^@Q$7M^<Q$7M^QQ$7M^Q%z$tbQ%z$kQ%z$ Q%<@R!Q%<@C Q&m4 Q&0* e Q'YD` Q'QU Q(^ sOQ,O ![ Q,O ![K Q-}ɊQ-ܶ99ha*Q-ܶ99hQ.e죵RQ.e죵dQ/4۞ Q/4۞? Q/b=9Q/b= 0Q/{֑Q/{֑LQ/{֑SQ/{֑wQ/{֑5Q/{֑&Q/{֑$Q/{֑Q0$A J} VQ1>QVw S>R5QVw S>#QVw S>QVw S>QVw S> QW(! QXPnϼ] QYSHRQZx3\ a)Q[bA; EQ\a1 aQ\Sɪ $Q\Sɪj[Q\Sɪ iQ\Sɪ ,Q\Sɪ tQ\Sɪ ()Q];9^=x Q]:M $Q]gv?)Q^w2. .Q^w2. %Q^V=*RQ^FT jQ_.5% Q_RO?-Q`UǢh .MQanszQansS?Qans]7QansZQansQans Qcͥ Qcͥ 5 Qc1JeR+QcQ&r.nQer{:JzR Qf/ ]\R Qg( NQh-ttQhg^{$ Qiu &Qk`OBvK Qk`OBv Qm]tgQm]tjOQm]t#Qm]tQQn_&/bQns{KOQns{Q Qo[Qo QpmQq?i?Qt?#WpQt?#WpKQt9k^[Qu{ kQu{ kQvjRi] QvjRi] Qwht8e Qwht8e QxlVyQxE9?AQy{wEj Qy{wE| Qz !?k Qz(S6Qz(QzV YQzVtCQzV Q{ 46kI? Q{lD`Q{#C"gS $/Q{#C"gSZ,Q{H0 s!Q{H0 \Q| @Q| @Q| @Q|$isQ}⨧aTCQ}⨧aT Q}⨧aT Q~n? Q~CP Qvy Q~ǐ )Qn5"QC@?Qj&f QJ2JSQJ2JS QJ2JSk QXaL)QXa Qo^?QNM QNM \QNM ,Qez8QXQX4QC:a QI QcxT( a QX* QZm<QhGb<Q%ԘQX  Q8TR[Q8T?Q8TQ7Q8TQ# Q# QQ  Q񾔆6Q񾔆Q ЂB&Q ЂB&Q ЂB& Q0ؠ eQ0ؠQ#Q3E8QHM3"QHM3QHM3 Ql R Q6T^-Q6T^N Q%I^4 aQ%I^4t%Q%I^4 "Q%I^4 Q%I^4k Qbc a QviW QȽAqQ:_]{QG$lQOQO]%=V #Q}(Tvj>QѠaQ'Ĝl&Q Q`s Q\MtxQ\MtaQ5SQ C'Ȼ QFT}QFT}QEY Q(hQ(L&Q9͸HQDiQDi ,QJ\VK 9QK6S9Q_J[ Q lr_? Qd 2Qd 2DQpc& Q镍9&GQi_ķQ, Q¢!% $"Q¢!% Q¢!% QsQFNa5k;Qp! Q{?tQ{? QIQQXLَj Q}Q}Q} Qdk+QP0ևKQP0ևKQfN; *QfN;#QfN;: Qŵx]QPFc ,lQPFc \Ql6Qc3 ,Qc3 xQc3 /Qc3 $)Qc3 Q H5Qzw +Q8Q8] Q@ iQ@ Qǩ Qj:l1m\QQj:l1m\Qj:l1m\QPò1L Qf "QDI|jQDI|QDI| Q Q Q Q]Yz Q+ee QFT`# Q>% Q&g^JQ&g^RQ&g^QFR %Z-QJR=vOQJR= Q T82 QWps Qxvkz Q% # Q vbQU |04*HQU |04 jQ³H1h Q,U7Q,U7 \ Q|v;QYhjQYhJ5QeMY9Q] #Qw Q}8Ձ QwWk/ Q15  Qu<^ItQu<^I ?Qu<^I &Qu<^IkQyBftRQyBf QXl QΙo@Z QΙo@Z Qrc oQrc o Q(gj Q(w=D Q {CBQ {C_Q {C QҚ="TT? Qҿ!|Qҿ!|uQҿ!|:Q5!!QC0QNQ۟[ܢQ۟[ܢ QՖ4aQ1WПQ1WПkQ1WПQQ1WП QT  QT  Q^v8dQˡ":: Qz <Qz a*Qٔ<3tQHQHYcQyzϵ Qڗr#T Qڴ ks Q*L Qg# QdϿH@RQdϿH@a QWQMAH[5Qte QD Ft1QD Fs Q@/& Qzv{nQ"^&Q"^Qs $Q/`]Qؑ Qaq QOMs5QDxQuP( w.Q1rF1t#Q1rF1R"Qkr Q`&,Q櫹.kj"Q7m QyF QyFQyF QՖORQՖOQՖO9QՖO"Q棰 bQ2%QP\ Q=;SQ=;Q>Q=;,Q=;LQu Q:/CQlj -Qj%<sAQj%<QAT= ,Q 9o Q+pomwD Q]S?&Qd iQdQJQQ ,>QMb-QMb]Q&!QZQ-;2 QU}f?Qw(~>=:Qw(~>= $Q3d Q)sw4Q ?:QcǍ QԸNQԸ QE >[1QE >(QE >QHAx)*QHAx) QHAx) QsH QfuJbt c!Q^SQ|WQ QGhV;QGhV; Q|_-?Qnz RX" $R<׮{Rr(~R=7*0eR2B~ RMz\RRU[B$RΖ* RWD0 $R3R(R1PRnewj:? RՓQP?^RՓQP9 R١?eR١ R bR |e6^Ru+]R >m#?R RLZRԌ ]Rd=s)R RҮ}RҮ}R}KB2R*+6R*+Ro4ȇRyM $Rv,<^ h(R&J8R)n R$ RŒR;? R ~E|T^R ~E|T^ R cV R!߁ArD R#W? | R#6,R R#\#; i R$Sx R%!];R&s}TBR&s}TBZR&ŗHJD8R&ŗHJR&r{ R&j%VR' EY@8 R' EY@8?R'R*4e"R'R*4eR'="/R(XPs R)P}^H(R)P}^H R)][ R)][ $0R)][ &R)][ &R)][ R)][ R)W. R+5r  R+D`чG R+D`чG? R+w9 #R+w9 R+w9 aR,3 HNR,z&BR, R0\}73R0*K[R1+ -_R2roZ R3PtDWR3Pt R3x]nBR3x]nB3R3x]nBR3x]nBR3֟"CR4qLl c R7e1*  R7]0R8Hǃ!i R8*4 R8U c R:_jL R:sv R;e3%R;7a^CRҕm!5s R?WR?W$R?W#R?-wВ:R@ ?,R@ i RB?A,RB"1S RC# L RCJ?RCJ? RD$yngU RD D^DRD D^kRD D^RD D^RD!\Ɨ7RD!\Ɨ*RF{gRGmd~NRHd\RI[YJ4 RKŢQ RKŢRKŢRLRL ,&RL $RMS&k RNmXez RNq9wf~RN?lRN?lRN?lRN?lqRN?l<RN?lRN?lRO.sI RP`C$R RPc:ttRQ B RQ BD RR6Wt; RSMY[lR RS<7 RTӠN?RT;vtRT;v:RUҬ4jRUҬ4 gRUҬ4 i RU:zlv4RV%^h9 RV%^h9:RV%^h9t RWj RW\NCb?RXO[laRXO[lJRXO[l0RXO[l.RXO[lRX'ʄBRYIx RZRZFRZ䜜ųs RZ@ϸMRZ@ϸ RZڤ;=RZڤ;= R^3$m~$R_U!lDR_U!l R_wW> R_ jAF<tR_ R_p߃ \ R` A#R`nsR`.ܖ RaRaf"9ZRaf"9 4Raf"9Rb6z,RbQ RcA) ws #ERcA) ws cRclo YRdp RdMCGRdMC?#RdMC aRd|lRd؞u,[Rd؞u,Rg5u RhD'}b?Ri#b5Ri#b5RiJUV=RiiRj{?Rj{ RkX:J?-RkX:JRkX:J Rl5N.J3oRl5N.J3 # Rn ֕ Q Rn=o!Z RoG&xu RoG&xu $ RoM$S Ro?|7(RoW%v Rp0ORp0OQ Rp)Rqt Rr&4 RrT}$%?Rrp ^ Rr>? Rsu?={ \LRsu?={ s4Rs|>$v3Rt[m-:j Ruhы/ RvltiRxkW-?Ry0 RyP RzÏY/RzÏR{QR|V?R}‘ R}‘ R}܄)+ \R~qp5R~qp5 R~/yH R~I@ NRr RmRR¯sR¯ ,R\ R\] R\ R9"WW|R9"WW|Q RS3 RS3 , R _I'RR ĝRyGtC)RyGtRu Ra 'qs%Ra 'qj R=ͶZR];7FR];7j Rs?CRs CRsjRs R:r,@R:r,t RSx=yRSx=yU R']R'R'DR^.G KR֑έN3R0%Rn?Y< ,}RW @*RW @*R@R;"\R;"1R~2i]R_pY R_p Ra+2Ra+2f R/R/RRVX&*v\RVX&* RiN2RiN2 RiN2 RN_zX9RԣG[RԣGRZDdD2RZDdRޓwT R' ~V[RkU ?+RY%OR:uB !R:uBt R)SR)S?QR)S (RGE RBab R_jWwt vRܻ^u R>lh#RNAi 'RNAisR>[RPK' ROj h4RNtS^RNtS^RNtS^ R\S@v R"KM 5R"KM  R6UhR6UhR6UhR R6Uh Rg<\&Rg<\& e=Rľ Rľ ? ROsFFk0Rp7?Qd RsO \ R 뒒!9R0 r R0 r R 2N Rp, RTR_i aR^/7spR^/7s R[ R_ ( R_R_ $R_FR_9<R_%R_ sRsxd R !R R%~_R%~_fR%~_K8RT=.T= \ RXZ R$ #l #Ru$ObRrv Ri- ,1R޷iD R75 ^}L&Rm\ RPads R%t #R2|IFR2|I]2R2|I*R2|IR2|IRUfZkC RtXl?R @R  RZiRRZiRLRd2ߎ yRȴ $ Rx2*R4V"ZR UsZ RBhw Rj#N:!R,TCRGbRGR R--R--| R2甖NR2甖R2甖Q R2甖 RVRء] [ RQGZ(RVA? RY . RRgqR;RgqRDtWR7e;'/RHI; R|9R&`}'R_2RѥG!HRѥG!!!R՛[ R՛[ R՛[ )RJG@# R?O 4Rj;=?Rj;=?D R$ R2,gVRy RLLOujRȞal? RȫSK RȫS Rބ;3?Rɇ % Rɇ % Rɳv%R|.bR,/iR,/i#Rӛ1Rӛa RˑZ>&+ ?RˑZ>&+ RV2LRV2 R/xkOtmR/xkOj?R/xkOR̃~F RjV *RXlK[ RνX#W- RυW7 RϚLdJ sRϵMӺ 2#R ;vR+,5,R"H} Rҥ"*` _Rҥ"*` oR*Z@p7Rܙ5%# Rՙl RRR}RR3eumR3eumUR3eumRq1\> RמĆu Rw R<8̏Y1Ryu| RٮVDRٮVDRRٮVD>R )J R1 hR1 h m RܩYL? RCDiDRjJR#.V CR#.V R$F&RS0*R߁-yfR߁-yf Rml R _Wy2R gR gR^'#B~-R^'#B~R'$RKH0R{sR{ RΥ'R@ R:jͱ R?K~4R?K~ZR?K~ R< DR<  R:&y|MR:&y| CR+M RuN] RuN]|RuN] R0k7? R e Rh  Rh j R|n RyRyKRyCRy Ry]QNs R<8ATy?=R*{Q?#Rzv~Rzv~ i R@m]RGJsR.N8Q$Rs0] sRGņRRGņ6RגYRגRȿ`j Rt8R?3 R QVRrZw.RrZw'R;+` 1 ,R1vdR3MREp~0R$Pu RB}] Rb Rx +DRߨ0p R[2D+ Rq\Rq\] RxR׷x SDIS}GQ\S}GQ\R!S}GQ\KS}GQ\Q S}GQ\ S?m[ S=P;S=P;QSjUSz@, S&sÉ Ss S + ǰR S ,V2 )q]gS ,V2 )qLIS U*VS d,!#S 4' S н#S T< S 2NmS 2NmRS 0 | S 0 \ S -pQ S ~S}O aSE];~m +S֊N S3&9 S " NS A d_S A d SY[xdSi+#`9Si+#kS5/>  S"?Zȫu?TS"?Zȫu S1S.j)S SD i|SD|S)# $ Si \ Sǡd S Fc> SHe5SHe5KStl2KYS9Stl2KYdStl2KYkScb Sss5QSss5DSss5 S_* a S5'SvQL$SvQ SXj-KSXj-Q S;0KY SY `~ (Sga?S]5He*S]5HeS<  %S"A S!ᮙPS!ᮙP S"4tYS"4tk S"kV(v:S#[ | S#[ s S#ڐ%$PS#ڐ%$ S$F8ƀ#S$F8ƀKS$**9 S$-wj S%uF S%[% S% vtsS% v (ES% v &S% vS%Dy S%6-S't 3S't S'QFaS'l&+ aS(53ZS1S(7fS+)S,"Iq? S,zޯۜ S,nz6 S,nz6jS,r-S,atN"S-4e꽉z S-[CoS-[CS-[CVS-[C S-AY,S/{O& ,"S/{O& 2 S0X): e#S0v_)vgS1#,?US1KGaS1jmuvS1V.?$S1V. S1V. S1V.h S2+o>S2&?tPS3l NS3"egYS3Ea S4#EmS5f|S7'4aS7԰9&DRS7԰9&D S8yU S949nU S9鵮U?S9鵮U S<<NS<<R(S>;|S>On[R>S>On[` S?W S@ӋTvS@$`HvSAt_? SAt_ SB]rV% SBa3sSC0wJ SCIPzvD SCjSDQvҮSD֥NR SE.b @3SE.b @RSE5ʀ SEX‘%'L SF j3٨SG~+UNSGn SGn7OSH*% SHV cSHV eSHV mSIJƱSJz4aSJz4aSJz4aSJ]+VSKf`SMq>sSMq> SMV"T#SMV"TRSM0 \7SM0 i SN%?SOM% SOM%?SPt (SP8i3N SQV SQV SQc> #SQԯ6O SRi j SRt[7SR{DSRTt*SRTtSUУveSXZ1SX,OKSY:-SY~d@ \#SZr%'CSZ+3&SZ+3SZ;F] S[g+b?S[g+b S[.@ $S] %4j"S]DxRMS^ 2 S^w(" S^ƢdS_{Jھ aS_{Jھ| S_l S`y4JfS`mD S`[ Sa # eSa # Sac+Sac Sb: Sb\Zc iScU#wB-Sd2.K0Sd{"j Sd* PzSe0-&SgNxSg8$>mNSg&7Sgy i ShjdtSi9P^QDSi9P^#Si9P^Si9P^aSj1Sl-#>Sn.F Sn.F SninwSSninwLSoU0 - SpUIM SqbEP(Y Sq'm@ SrFX Srdl,iSrdl,iR Sr G? Srƙ: Stg*sSu2jvLs Su[;SuCSuϋRY"Sv4VK<&Sv4VK<Sv _j Sw Sxt0 S{\!?S|5DjvS|5DjS|0sMS|0sIS|0s S}zLN7 ,2SsPM SCx\SCx\SXzbBD@SXzbBDZSXzbBDSLSXzbBDGSXzbBD<SXzbBD(SXzbBD$SXzbBDLSXzbBDSXzbBDS"g7K SM;{SH8TwS:zǻSDPSǿoI SǿoI SǿoI SqQ S>9S`L #S`L cSLOLSbU0m]ShO ShO9 S`DuS5S5SfC8SfC8 S  (S SK`SK` SdMywR'SˣS(s S6M`Jj SMثCSyS|Ԟ SX5J˸ SER S tS  SX |uj S̷|7tSk>KE $VSk>KE? S-xtS{K S\ S!SS! SZ &S$RS4$uksSU8 NSo' KS>G,y S>"[)S0pS5|ks1S6V S6V SjSjSjUcSjXSjSj Sr c Sw|KSU9]~ 2SU9]~?SͽhDS";Sn  2 S;$?'S;$ Sgl"S[Y' S2SpSjYSjY ST!H& , ST!H& SJajN ST[SuC \?SuCSg9 S+>O|SUŁR?S* \S* S]5 # SS? k Se !SXòEXSr6nW Su<($YS#?&NSHk]i S;_G5CS;_G5 SI&Tk]S\bS\bS\bS S\bL S\b S\bQ S(':9S(' $S('SHife ($SHife S(u.R )STPtSTPsSK?SK?RStbovS S ? S1fSX 3wYS:j` 9S49ݼɕ SdގG Sܨ֑0ND S>h4 S‚L[S7>5S7>5Q SmXN 2SŴE %tSv S;om S;om Sŵ+*KS'^fnKSDzδ ; SX+S $ S k i$S k S k?Sc;gMLKXSc;gMLSc;gML Sm SBSə ShrM Sl]b(SQHRcv2Sтiׁ4Sѝ*R eSѝ*RY SsSZ׭SdAZ$S89 SK0  SdD>JSdD>JL Sln}oS֙l5t!SS O' a S[բ1W [SiZcEN^Sגq7A< SUvSK $>SUvSKv S5,$iS5,K.S۝ ( S۳ ݹdS۳ ݹNS۳ ݹ SƝp1 SJyS8+S8Sխ? SR SWs(SWSfpf SEв܌ S JL SEn S'ݙ9 St"FNS skSjBC7S\ S\? ScAϸ m!Sh9 S {!S {!P S {! m S~tSw=Q S\nSzU2 S.v S'x; S'x; S* a SIɚbSIɚbRS^j S^j iS eBSI0 2SI0 i Sj8 s#SH S0$>? SVWѸS,q S4LXN`fS_Sڄ#Y#S*%~SDZC,SJhvS", Sq/, SE)SE Sݪ+GT Tb;T Tb9Tq#0 = Tq#0 T(DT(T($Tg]v^OTg]v^ Tg]v^ Tg]v^ TƝŦ4 TQT٤H9:T٤HT] 'TnnTnYTn Tnj Tn T`(TaeEt To<L jVT1^! :T1^! T1^! T1^!  Tj3] T i]Zw>T fy T <=7A T T,,FvTT-^t T/۵=P0T/Dl ,T0RYT0RT1I-H(T2J5j T2o)? T2vJ;T3  T6y>nre#NT6y>nre$T7>T8Ndi T9qwst T9  T;"t \,T<> T=M9T=M9T=%7 wT=%7 ,T=%7T>R7 T?}a(-+ ,*T?w T?‘QT?‘T@,49 TAy/5TAՆar-TAՆar,TBPTC&E TC\u g(TC\u ,TC\uTC\u cTC\u sTC\u a TC,YbTC,Y \ TD .#TD~?TDGuRKTDGuR TD̄Q (3TD̄Q TEFTEFTEF @TEF m2TEFt2TETZEп? TETZEп ( TErq*vTGH aUTH2) TH+{(3 TIA  TL<\XPjRTLp d ( TNB $ TNB $ TN\= wTN\= TPSz/ TPYYTPtWTP TP TP TQ iTV%9 aTVM8Xl . TVM8Xl TVM8Xl m TW(ˣ TW? TX|Cp=TX#Db T\zPT\zPK T]YX|T]YX e T]YX T]` $T^ET^ BrT^ BrRT^ Br*T_d  T_u'6ZsT_|pk7 +T_|pk7NT_t .T_C0²fT_C0² Ta{#d Ta{# Tb} sTb} | Tb} Tbd?Tb  Tbk2$Tc Td?TdA) \TdA)?TdA) Te-1I $ Tg(<" Th/GsRTh/GsTh8ӻ| Thpڢ aCThpڢ Th\|Ti*d \RTj a9` Tj a9` TjТ3 lWTjТ3DTjm{if $TjjSNTkW<tTkW< TkW< Tk > TkgLTl˻Tm,  To^ʗ jToaC䥆NToaC䥆!To~C24 s+Tp̅OSTr߲1zS]Tr߲1zUATr߲1z;Tr߲1zTtgq Tt Tt j:Ttte j Tu_Ip TvaEy? TxW򸻰 # TxW򸻰h TxW򸻰  TyM}$DB TyP_TyP_ TyP_ TyXl*? TzK9  Tz]LTz]T{C T|'-ڃ T|]Ω T|d㑛^L+T| (FT}\ T3vD T6*2| T#~T$Zc# T1KQ/T1KQ/ T% T>/2 TTݨp&!Tݨp&V Tl4!]Tl4!Tl4! TtW' TS~K TJ,9v TJؒTc ?TgrL ToR/ToR/ ToR/ T#K&*T"#4 TpM TR$Ts4!IT(lT(lT(lT(lRT(lKTMs<!T(l* $To}Dm =#T!6 ] T^G Th;T˻VS ToEfA+Tu?WCFm T ՙx T>IT˞t"Z T`? TL1_TL1 TD'ct"TD'c aT{!5 $$T{!5 T{!5 , TPN Tb8tTg!T};YlT};bMT}; ,TF'T5#TH#OTN-TW TW T9c~%T9c~T;GD Tj/KsTj/tTPd iTԳc Tt c-T7|z02[T%~ T`3Q}TD~,:{YTD~,:{ T:J|,1 T@iK T@iL Te_x6s TJG TJG Tc<\~NTc<\~R$Tc<\~QT3Tb` a5Tb` S.Tb` LTb` Tc T*)T1F?XTL G  T`j TSHTSH T-6 TjL Q: .$TB <2TBW@(R TBMo$Tr #KTrTu_lR T!|DTRTedTž< QTž< T«NXtT$ST$YT$T$ Tc;O ,6Tc;O #Tc;O Tc;O JTc;O $Tc;O i Tc;O Tc;OjTc;O Tc;O (T%<(T%<[TL[tTL[ T& Bj{T& B.T70 3$T70 3 !T70 3 T"R iT0v? Ts2- - Tɒ%K[Tɒ%KkTɒ%Ks T8/ITJ1 -!TJ1 To 7Trq-|'Trq- TTQTTQt TTQ T!#T?TtvVT;( T;( iT&xTϱ[Tюޡ)]TҖ@+LT1%T1TY=̋DQTY=̋T4? T ݄as iTmWKTaTa ,Ta T"m TB!e6 Tؠ!m4S TVuTVuR Tga%) T~E<ԋtTݐR TwԉTY޺8Y Tڞ ݿgTڞ ݿU*Tڞ ݿ&T * 3ST'=N]8TWԆ \T1sTPT༧־ T,toiTS T`sAT`sY T˭LjYT(xktT/ ~T/ sT/ i.T/ T/ \T}pKy_TH^h8 TT_9T KR Tyv[ Tyv[ T tжO To~C TԺZ|ZT\/iOTyTy nTyT X3TꮕԳ&TEwPj TȌ:s T:jd TÒ'TÒR TÒdT}C?0"T1"} T:Хv T֟DT)* j T)* j T*K1[T l[s T\K4T ,TG TG TN5ѷT#T#?@T#0T]BP{ l T;RavT(ni \ TvM|~TvM|#TvM|TvM| Tcl@<TX" TF[fR?`TF[fRsT*ց TollQT ; T4 UgpbPUgpbUgpb UuL U~cUݩ^Ks Uݩ^K , Uӄq iU'\OMK UZ` U&Fi3n?U* s6$Unv?%Ui ^ U9u Ue{1 $ Uizj Uiz UU{3 ,$UU{3 +#USؖpq "0U Z8 U=6 UrzqUrzU }6tU +$2U 4U \U ̑H-=U ?$ U  U  -U  U ? U  U <xV?U ,+U6^L U#S|UQzUn,1#U|6! U|6! UH U>GߗUE ,EUE(UE $UE UY͉UY͉yU8oE^Uw^Afp U""ַ U1jj|U1jj UYsU.JU7) U= EU= ERUs-i? Usv|w/Usv|wU>UAU>UKU>UP U2tdUWdcb U D"[#Uz:>Uz:>UAUz:>Uz:>Uv[U/~U/~U]i$v:,U]i$vzUqsU R-8v ? U!XKYwU!XK e/U!XKU!XK UU"6;[d` U"iioNU"#p {U%R7s U%ۜ}  U'j?U'j aU'j U'CPqv - U'vƄmU" (}U'vƄmU"?QU'vƄmU" U'ɇqo 4U* /ܥTs U*AjeM)U*f x U*D9S U*AU+ a<U+ a<U+ a<\U+ a<+U+ a< U+@}Gf LU+@}Gf U,&X,\U,ŪF$QU,ŪF$QU-  U-v;} U. ttU.mL! U.!UwU.w/'U/[&qsRU/[&qsU/[&qs U0^ U0^ ( U0.v $(U0.v , U0X> U1 sV: U1 w U1 wU1Y!t , U2 r3lHL U26Wak U26Wak&U26Wak]U26WakU26Wak U3,,g U4_+(U64[Q.MTU7 k# U7Ӊ3 U8&tXg\SU9U/? U90tU:ݲѰfCU:ݲѰf U:2/SU;y˹ ,U;y˹U<,V>N0U<,V>RTU=? U><_ U?v U@T7uus U@{>? UA?6)UA ?tUBfN soUC P UCs0;$ WUCs0;$tUC9K UCzL3UCUCY UD83^2DpUD83^2HUD83^2GUD83^2UD83^2$ UDL UD̫ ?UE$dUE$dUE$d UElcAUEq#sVYUEq#sV ( UF %UF %KUF8ˏjUF8ˏ UGDSKUGDSK5UGDSK#UGBS*UG|( , UG?Xk UIr?$ UIUgQUIUg 0UIUg UKC bWUKC bW iUKC bW UKs UKsJUKsFdUL29a&UM+UMK$UMDUMRUN^D$n UPo9 UPҷNth UQdBoM >UT1WI UT1WI UT5 EUT>[qUT>[qDUUn(N UUn(NjrUUn(NSUUn(N UUn(N e UU9%kUUQ3XsUV$YUV$QUV$ UV$ UWZ חR UWȀ+/? UXNnUXh`}dUXh`}dUXaR? UYtUYt i UZ ?UZ  UZZD)?U[9TU[9T#U\zGU]18kZR!U]18kZU]18kZ U]PC=ǝN U^h0(~$U_]U_]D U_~;{kU`<=8U`<=$U`<="U`<=Ub/ Ub~4Ģ Ud[º9Ud[ºQ(Ue'8$jUe'8$K Uf3B$Uf3B UgT-Ugw $Ug-n` Uh{YUi-4?UissaBUissa&Uissa UjR i"UjR UjUXV  UjW6M UkCfGUkCfGZUkfH9&UkYaQl$Uk@qN#Uk@qNUk@qN Ul9Y*Ul cUl # Um&6Um?CliUm]*S SUmwoQ Uo^& (Uo^& g Up(jUs@4Ut R_ sUt ! Uuqx , UuML]UuMLLUuk u$ ,Uuk u$Uuk u$ UvnvUw+HcUw+HcUw,B { Uy,d Uzb~Uzb~U{0Z~N U|Jg1U|T.U|T U|T U}$ U}ݙN>U}ӷlUͅU9!HκU[yQ U6jU6 -U ^^ȟU(o\d Uc;9 U&UĪÝ #U;_i 3U;_i UM U"-Dz c UWS:Uc"9UU`'[U`'WU(ϕPUs U}%FNU}%F!U eU\=U\= U\= U}o W Z#U.jU.UD**% U.-t'U.- UZU>6RhA Uk/R&U9<N U'( gUB+iUB+nUB+mUzUz~Uz Uzk U -+jKU -+U -+U ]! U7MJ UgA)Urᖍ&jU(bv Uض͊ U*BazUN( YUQkU WNUM5 8 UhR Uo bUo b 0EUo bL8Uo b$!Uo bS Ul+j UN6$ Uf #UʓmB U!9' UDfEp U$U4h `U4h tU4h k:U4h b U < URyk Uj>R U9? UJ)fUgLxv Uϖ ( U7_ U!ҵ}&  U6݅ U6݅ U;}Ss  UZ(҉ Uѣ U/Dl U-'# Ux)U5M  UkN$UUaF[*DUaF[* Uh-e[LUh-e(U6+Uzwh $U+Gc+ Uj U2*?UiW U85yUt \ U"@0[U] U? Ў?UtxZU}Z7 =U}Z7 (!U3U3U3UX"9ZU$j ( UE~9K'UE~9K#U_ $U_sU UI U6$?$U!&tU!&bU!& U%xJQ UCqxwLUaUKȟfEU˽~q U˽~q?U˽~qsU˽~q ?U˽~q \ U˽~q i UiKhUiKhRUH;菏 #0UGI& UIU) =U7cN"LU|3WvCU/KLN.U/KLUHNUHNUħp)d? U :ŏg UbboU[gUUƉlVGUv,>1Uv,>U*TUߩ>*TYUߩ>*T7Uߩ>*T9+Uߩ>*TUCL}ϚUCL}Ϛa UChE0%UChE0UUe+g m UK U… mU ] U4FU+tUnؚUnؚ U40U40JU40 UcD1=LUiv|%UivUiv*U gfVe UWzU -UhH0@\ U슸D!U¯Uv4%e Uh5zgt U6@EP U%qJS U2Q U(DjU(D Uy.^ U&),sCU&),?.U(v U%sY jU_ $ U4m!U4m |UrU#N U` Ue-]Om8$Ue-]Om8Ue-]Om8Ukcj 3Ukcj 3&U@|@qjiU@|@q?dUr U]͈ U]͈ Urٱ|#UvS UN$tU E%vV81MS V߶jVV߶VA V:[duV{sV{ VYFKVYF_ V0?׳ " VT@ V0s V ViͽQ ViͽQdVl%T " V 6%ڒs?V 6%ڒsV @LgV $ V ҳMV -V iGV 6zhVGR5VGs&Vy2V2F5V2FV2F]V2FZV-IVWB ;V2V2LV2 Vv4u V_] Vq]8V8VkCV8VkC: VV2c@VQI  VDu+ا)VDu+ا VD%$a[VDBʖVFlL VG t1b !VGj=PVHv. aVH{J=   VH{J=  \zVH{J= xVH{J=  VH{J=  ,VH{J= hVHYe3v VIД[RVIQ5 -5VJb VJ]Ɩ#&VJ]ƖdVJӝRVJC^~$VJC^~*VJC^~#(VKb@( "VKm/.VKm/ VKm/ VL嵥-VN( VN( ] VNM>+)y cVO泾/ ^ VO泾/ VOx\+#VOUtjVQ% " VQ4VR FS VS<) , VV  ddVWF)[5VWQ|h(VWs VW3ǖ aVYlyZVZl^KxVZ꧔Q V\J\N V\gLRHV\sC\ V\x |C iV\yʄ*V\lH@+V\lH@V\lH@ V] d{J eV] d{J "V^:]νV:V^`t6V^`V^`kV^` V^` V`V^ +V`V^ VbG6A jVbad VbC$ ^Vc͞Ax Vd2wSVfKYu( VfajVfa ,VfmVgHǹ VgRL VgF aV|> jVUצDNVb3n V@a \!V@aV@a V@ajVqMEVqMEVV|;z V|;z Vr V:Y V mc UV{C?Véꙡ VUՐ VS? VS?VS?VS?ZVS?RoVS?nVS?0VS?"V9ViVV V?嵽aV?嵽L|V?嵽 V-3A VА4(VА4VА4 V֢6L VJ # V5:P V_FWNV_FW>VM, VM,V"?V" V%%. NV9V9 V7 OV՚< V՚< V՚<: V(\N VTb c8VTbh Vd L\Vd L\ Vd L\ VI-VI-V1k` b Vbi4V:5s VGwkV洇V洇V V ,V V VmCl` V Vj iSVj i$ Vf_J Vf_J iVb 9V}V@u"YzV}V@u"EV}V@u"V&67V&67jV&67| VRWHb VRWHb (eVRWHbtVv@U V5]Vv V: h aV: h?V^y=?-V^y= V\ kV~[&41_VVg VVgJVL*DV~8  VCV7UAx R9V7UAx QVu%*s VpZ9V923:V£7X V0gTv VrJ@&V,B?  V;GRVřx:{Vŕ & VV!(AV!(AKV!(AV!(AV!(AQV@VÏFcVʱh|RVa VmX+VxVxVx V"":? V752V752 /VC>& VJԊ V09;ȣ%V 7b V'#kb'V'#k VA~VASVARVAQVA V;Kj Vd̤^\(VԪ} , VfYBVվ#oˈ'Vվ#oˈ%Vվ#oˈ!Vվ#oˈSVݹVM7 Vv2LVؗ 7p| Vؗ 7p|V["O VS9bV2r# VX鄙Vj] V|| V޵.58 V֚o VFV VjDcjVjDc?VjDc VБ& \VӔ9? V&INVk^U&V9? VZr#VZrV9mhKVk?VqGi#V@,sV@,jVSqViBtViBt Vڀ Vڀ  VAj c~VAj V.͝t V"1V"!V"/V0,t)ZV cWjd VWVztVzkVﵥ.#(Vﵥ.#( Vjqũ[?Vjqũ[s Vjqũ[ Vw:Q? Vn_K]Vn_KVRu5l?V+l(VOg V?T5 VƬ s V'\> V'\> V'\> t V'\> j V'\> a V'\> s VW*u VsR׋rVsR׋j&VsR׋V ?2Vmt V+&5V:p ,VOi~-Voւ NVoւ ,Voւ +Va $?Wil1L WJfj W,_W ( W'mksWc4V8? W ofa4 W >^~$RW x2[ W ^aW ^aCW ǥY/W c $,W j%.W_Hd(W_HWéPLWLѐ- (WLѐ- ,W3}W\_jWݬ_@Wm}/tWІ= (Woecx? W--dWR) W'= | W)Ko)} W4̰kWOnS  W:h:W:h:3W[qYO W!c 0Wj>ֳpjWj>ֳpRWwW܇ ,W. a WΉ W^?WM? WP̅ W4GtW(G8 Wa!W0k W늴AD Ws6RWs6SRWs6HWs6AWs6,Ws6L'Ws6KW h_W"%ʁ W"j+Lf!W#) W$H2a { W$`~81W$KPT$ W$L{ W$L{K W$] #W%YzyZW%]H #+W%u8~; W%̟LH $W&9!W&퀼 W'xI 8W'xIW'xI ,W'xI $W' &: W(l=P W(l=PW(Hx@ | W(O aW(,*rW(,*r W*VbW*VbW*[tW*[s W+No W+Я[W,["9 W,5&6sW-Oq ,)W.wd  W2|#W2qf=*W2qf=DW3X'yE4W3X'yE a,W3ZR][ W4$m-zW4^$æS|+W5bjW=>sW>Wtbq[W?!?kW?6l - W?X%X{Uc[ W@(K.W@(WAUl 4WAUl \WAo3WAO?#WAOjWA gWA?WA WA WAk#$ ,WB?StLsWB?StWB?StWB?St WD9C WEELZ)NWG}: WGoE? WHjWHj WHjY WIJFķWIJFķWI( WJ, WKy8 WLBPT WLvV!Y2WM!i?WM2zWM}9SZQWNsv@SWOn/y 5WP" WQ^&fWQꕕ94WQꕕt WT; WTdf? WT|jWU_3YbC  WV _a'WVH _ WV1λWV1λ WWF7WWF7WWF7WWAWH<WXǖUd WZEpikWZEpit WZh WZ6x9q? WZ’?WZ’ :W\SlC W] n W]ЇȆdW^ 珼W^lW{"W^ŠL W_@娠UW_@娠(W_@娠'W_@娠#W_@娠W`yC6% WbP:NQ0WbG{Wc`I~uّWc`I~uّUNWc`I~uّ Wd Wd (&We*/1j We0-WO# We:t Wf+HoWgNYW|WhlZ8w Wi0] G% WiWh[;P?&WiWh[;Pj Wk)gDk$Wk)gDtWkz sWkv*Wmu>d WmgU 1Wmp=R Wn65SN (Wn65SN Wn65SN Wn Cmv WpLR WpD WqJMS WqTb|9WqV WqVkWqΝ"J WqUWs/jWs/ Ws/ Wsa( (Wsi* CWsi*| Wt3'jWt3' ,Wt3' KWt3' Wt3' iQWt3' *WtaAj Wu(ޔ֊ Wvl't Wv 8/*9Wv 8/R Wv 8/d WwKo2 ZWws<' BWxm^UJ[Wz*nXW{ XRQ W|=m=/N0W|=m=/ W|3"&F|"W}Mƭ1sfW}Mƭ1 WҎfڰ WrP08W~7"UW~7"UKcW~7"USWWc׍IW'q?锑 W>f ,W>f Wj?W5Ie WĆ W4'f W4'f W4'f W٫4 WX"aWRWy"ax+ W! s *W! (W! qW! W$+.WWG@lW6 iWpԐ - W Te W Te (W Te ,WncL4WncW,(iYW,(iYbWu; W\Q՟?WngH? \W;5{tW]!DW]!]jW]!W]! WlaE.WlaE. WX\'+ W^W^W^ WWjW= W RWiFEWiF WS?WThx,WThx,RW_WO-KR WF[R Wm0SWm0Wm0Wm0LHWm0U<Wm0]:Wm0*W;.VUQ W\ghW\gWRc s$W` WŴ#a WŴ#a WŴ#a WC*##WC*WYW| +Wy W_Gh WHB2 bWoy W\8 #WnⱴLWƄ + (W[5$LW[5$S W۰SWw[7 Wctg({WgaW Wk !dW4E =W4E W}SsWz*tWz*Wz* a WC )W8I^{ WQj+WM fO (W4夃DWZY2l WaיWaיd W9٦ZtW9٦Zt WY"t]Ws iL-W S] W޴Rjt WA8WA8W^(vWD{ cW u#Wʑp>W2j *W2jb Wފi+-Wފi+jWފi+ W  gWBIaR WfW4r WIgq$WIgqWW0YW;G't $WA}LWA}WA} W26?W26<W26#WbK4WbWbWkp W`2'W`2 aWjҙ &Wjҙd Wjҙ,WjҙP=WjҙR,WjҙK$WjҙWk]  WWnԁ * W9_rS)WuTmN W"?W" ( W6 /y? W3OWZ1Q -Wl&_W d|? W F%sAW F% W"'0?W"'0 WH.9?WH.9 KWH.9 $#WH.9j W]>y[WY;Q WŇvض4WS~ĒWɲ? )otW׳ӵ8 W x| #WaNj)WaN [WaN iWaN rWaNUWaN aWȉ\E?Wɪ\ WBv}Y W 3D&W 3K W 3 W4 ?#WM~ WDWϖWGڣa^ -WОQ WдiK? W@>*[Wфx i-Wфx W_rfW_rf WҰiC WՇɏWsz5b=W|n'hWש_v Wש_v W %W W.^R<W.^W%BVh WX~RW#3KHW4 $ Wߑܗ5WRVWRVWeAN W%c W&7hn ~W"E? Wwu?! Wm,D(Wm, Wtk5Wtk0WtkWzSVQ W6PFvW6PF W6PFjWӯ WCT^ #Wm0 WN1ވ WN1ވ 6WN1ވ W&ni WP7 W)ǦFWШr!WSidLj&Wbt>SWUT T WDWD/WDWhA~ W皩r WȂjWpu<Wpu< WQ> 3WQ> WQ> QEWQ> YW` WJs$1Z WUJ*t W"^ c WW c+WH,dsW< Wm\nj*Wm\n?*Wm\n W/ (W/W/ $W- WpX! WvvWv (.W &LW&ɬwa/X?_&z8 X}VX<6bXDwPvXZ#D X X X[:"  .X[:"  X;M?|%X;M?X;M? Xq; Xs]XsNXsEXs XsXs XP XZ"!XZ" X im X ar aX Ռ X Cխ X H>+ X (ڀ/SX (ڀ/X (ڀ/L X ai2#%X /vX / X / iX / X X $ X6] Xq5`XpȀzXpȀzXpȀzLXpȀzX4Q\X#qX:rXZaXuDf.X6e XI5 9 Xs &Xs &d X >- X⧠_Xek f XJTw XWiSPR XY:sA X7xX@tX@ X~hm 5XP([X$OlX0?,X0 Xa1? XzkJ2XzkJX3:P:xX 5>W1 # X gX!.}X"A^ X"d}{X"ݰ U?X#/ X$IȆyX%"Wۂ?X%"WۂsX%"Wۂ iX%"Wۂ X%Taaߌ? X%ͮ DEd X%ֿqt\ X&( X&X(L ,X(L X(2^FvX(6 !X(ԕ?X+Тl (X+x)d X,B*8:X,B*8:$X,B*8:X,B*8:R X- aݍ X-{:?8aX-{:?8X-{:?8R X-{:?8P X."QDž X./[xzN'X./[xzX.ag) X.d# RX0tt.= iX3 jެ X3"9 L X3A+X4p|/[ X4]909RX4?YX5hv # X6]XDX7j/ͱ]v X8B'qnN #X8qctX8ָ~X8ָ~X:|KמX:E \ X;Kc Q@X;Kc K!XSZzX>SZzZX>SZzkX>SZz]5X>.[KX>X?̣hVX@yͶ X@aq1\ X@ g,[)XA=XA=wXA=rXA=RXA=XAzJqXA10 nXA10 ;XB.;ۦXB/wѰ! XBccH#XCoXCo XD%XF$ XF XGH; XHf6v.XHlqaDXIvTXKb[>q ( XKfXC 1 XM^6XOwTaXOSRkRj XOl3h8XOXdU XOLWntXOkK aXRDmXRDXR2PohXT 1;%(XT 1;%( e XUS/ , XUS/ XU{KYTR XUCY<DaXUCY< XVDu=XWCֹXWCֹ:XWCֹ#XW*=hv.XX /XX QXX7KXXO η_XZ,Z+\aRXZ,Z+\aBXZ-Y,m?QXZ-Y,mjX[5:oQ(X[KX] X]Q X_G!DK XaW/b Xb↪:Xb"^ zXb"^ Xb"^ ;Xb"^ Xb"^ R Xb"^ Q6Xb"^ Xb"^ Xcp<<7JXcuV$s Xdi=dXeb\Y#XeYb(yXeYb( ,oXeYb(gXeYb( TXfD XfD$ Xf xXg(> +Xg(>Xg(>XhgB>FXhgB> &Xj VXj}2Xk(|HWRXmkn5Xmkn5ZXmkn5$ Xoh X Xp&{ gXq;NXq]]F XqtQXqt Xq} 2 XrքSXs*("*׺XsY # Xt+ XuIS XwhU/XwE&'XwE&?XwE& ^ Xw͚; Xx 2Xx6p% ( Xy#vNXy#vD Xy)l}XyKU`[XyǮX{P]N+'X{@]o" X}tD$?X~\ٴ 0XUY&x&'Xa&)Xa& (Xa& aXa& Xm}ftr XktTXk#X~}X~}X߂]xXb3jX๋L X๋L X|HXvu!XT X K(X KLX/gR dXh? X N ceX N XP XrDs7 Xz c\Xv XAD X_ 9 Xk84X򌤩X:,] X:, X^7\X<N5X&' XY8XY8F X|8`;s i X A X@p XnYVXntXnX_@t XQy fX}\sXaN)B}Xon;Xon; XCxbFS Xэ ^Xэ$Xms X.{ Xni&XK4&?Xv dK X#{P$X`bFD^X`bFD]X`bFD X|ntGL5X|ntGX|ntG XȠX8mQ XP`r:QX. (XN윾j"X\ Xa XB׷R Xw XwX~ XǿGOIXǿGOXǿGOXǿGOQUXǿGOK6XǿGORXǿGOXcb( $Xcb( X R*XHZG) XXi{Tf]X:>N XrXKGXD0X/XXXh4SNhX2C $ XXr a6X_,HX9;߁ Xj$ N X0 e*X0X]9Xfn'Bzk%Xs8~ X_蟯|LXnXnU-} lXW'uXmyKXk)g lXõjc<XvIYPX ;?X ; X*![f| X= XSSX5Ku_ j XA Xʒ[ X0u>WX0u>)X9XsW^.Z Xx*]Xx*] Xբ/%Xբ/$Xբ/Xբ/ Xշf XPc? XaL XMDۥ X'Kƅ "XІ3XІCXІ.XІQ.XІXГQ mXКV# X5&Z&XR|"ZK!X, 3XgL,X X/v3ttS X4o7X;UYtXdwXGE 3X [?!XENXEKX)z#X)z s X)zs X:%tXv?%uXڹ|VTXڹ|VP Xڹ|V XK c X"vmF)?Xwd X-0| X*5X*X貱XpVwL j(X_U'TZ XYLXl 5XlXlXl gXl.Xl ( X9o #XrEhKXXKKXAN4SXTXCwms X1ZS XQ XvXꑏtJ<jXd_LNNXd_L"Xd_L X"9Q XH?X-ɘX-ɘ X]X] X\?X*J? X ox X ox iXPi X0ܟv mXZݘ1 Xd9 \)Xd9 XzvvX!$ܻ X,DEcX,DEc ;X,DEcj"X,DEc XŌ1XŌ1 X) DX)tX> LXINX2!g Xid pXXid pQ!Xid p Xab"cEfIX$.;KXp6zXLvVbKXL5uD X 'X Xt XfLo \ XKX% Yw%6Yw%DY2 , Y0SY0SY0SY0SY b UvYT)sc ? Y9{BYy YX( JYX(j%YX( ,Y <Yt:Y" ,Y"YV/1R YN Y]aYQZZ w YQZZ s Y]l.S|Y]l.S sY ]h (Y  Y w7Qo jY }ȠhJY }ȠhY &|y44SY &|y44Y -RY j?Y j?Q Y Ra8 Y%I"Y%Id YX[ (YX[|YX[ Yp=bRYIUYIUSYIUWYIU5Yx zdYx zY< #YY'>Q 6YW;;%Y` pK'Y}d YA[+Y(: aY(: iY(: PY(: Y(:tYYTYMkYYr  Yx_z< YJ( Y-EܦSY 6Y Z"r_[ Y CY"+5j' #Y"t , Y$i OY$mjeY$@3Y%t.Y%t.Y%t. ^Y%t. !Y%t.tY%lz Y%lzY%lz Y%lz iY%lz t Y%5&|Y&r!eQY'UfURY(SV~Y(SV3Y)cC$ eY)cC$ Y)cC$Y)cC$jY* kWS'vY* kWS' sY*GY*GY+tO>5Y+!U Y,"s3Y,"s3RY.$i*Y.$i* Y0=XzvY0Y1(C>Y1(CKY4[?Y4[ gY4͑FpRY4͑FpR{Y4͑FpRzY4͑FpR!Y4͑FpRY4͑FpR Y5Ea Y6hB$)Y7 {b: Y7 {b: e Y9 Vk Y9 X Y9 X Y:bY:-3R Y;, K6Y;, S,Y;, Y;R[Y YD}c, %YD~Ief YE`##YE(y<[YE(y< sYE"65.jYEšYF Ev YF EvK YFӓK YGgV $YHGi?YI\\$]MYI\\$YJ 0YLqɏYLqɏK YMZ" YMZ"jrYMZ" , YMB!/ sHYMB!/ YMbh YOtCR~jNYPל@6YPל@YPG4 YQR-u YRIxO YS{-ϟ YS{-ϟ (YU3яd YV=v\(YV>y9YV>y YV>yBYV>y|YWbEYp{UYZbTझtY[$eY[$ Y\b5Q Y]I'jqY]I'Y]תdJAT i Y^nYY_% aY_}mY`b=;YbyQYb~e8YcXЪ #Yc2ڵk YdT8,v YezOF- Ye~ Ye YgG* YjGj YjF:NYjO&b&Ym֡6j?Yn'?Yo4( YoB3YoB YoE5Ypm  YqRgO Yr2M.@oYr2M.@o $ Yr? cYwU)s EYwU)s YwgEͱlR,Yx΀|[ YxX Yy4 F Y{S *x Y|G @J E2Y|G @J S+Y|G @J * Y|&^]?Y}?3`=R Y}WԿ5j Y}C'/HY}C'/Y}C'/9Y~ok^OY~ok^Y~ok^ YR?bY2Yd2> $YD  Y`B]] YZ# Yzw YvX)L YvX)YvX) +YvX)Z YvX) Y}׌R"Yv'~ eYv'~oYv'~vYv'~ YH`= <YH`= aYH`= ,YF'3 rYx#IYBv ) YJёa%nYJёa%lYrEUY.@ |YdDiRWY0YGj)Y0YGY0YG i YTX,#ZvYaKF?Y5$<Y5$:Y< Y %YY % (Y{CYſ $Ye("  Y/Y<0[iYeflA Y< ?Y< s)Y a Y a(Y $7F Yh1RYSEY ã!Y>D , Y(MaY(MY(M*hY(MEY(M{1Y(M|%Y(MYT.WYYsYY Y&Vp Y2VܫF e Y= |z!?YF:KYE5VYE5V YC sYff t YPL\?&5Y]d|? YB/J>Yvi Y=B6Yk&Y1/bvY1/bj-Y1/btYxۣ iGYxۣ (YpV4?Ym Y:|1QjY:|1Q Y:|1QtY:|1Q YT)ݾVY9 YD,9&Y>02Y.ΥW[ Y#?YsZ- ;YxG‰LYYU YªGc[2Ye Yƒ Yltwu?YMJR Y Xk Y B:} cYҳk D YTmxYA 2.$YA 2."YψBKYψB>YψBRYψB Y,]9L (Y,]9L YUҚ%CYUҚ% YUҚ% YC CYsN5Y`4Ff0- Yp= 3YS_RY ܝR 1Y]eN YB-`xOYrIYPNBv"Y.!u6 Y]Y˸s i YP Z L-q ( Z ˱ah Z%\?\N 7Z\ dJ i Zg6NZw9 Z%H ?;Z%H iZ&2IZBQSHZ =|,H Z,i ZEۥZEۥL-ZEۥS(ZEۥd!ZEۥZZEۥZEۥ ZPtZ3c Z\/ c Z1j ZqOC Z yKSZ yK}Z yKR-Z yKZG8ZG8"ZG8 Z>;ӑ ZyDj Z2PN@?[ZtZB^ ZNIiZ|FZBN Z3 Z /quZ %Z"ʠ$b Z":[Z#:"K%Z#:"OZ#:" Z#7% Z#IWZ#IGZ$*GMZ Z%O# Z&= Z&:S0P Z'FM9R Z'Xq , Z'Xqj Z'xbazRZ'xbazSZ(] Z)D $Z)^G{ Z* 0T]=Z* 0T6Z* 0TDZ* 0TZ* 0T Z* 0T Z**C&7Z**CZ+˖耜Z.sSs Z/j#nRZ/j#nKZ/krBb Z01nZ01nZ01nZ01nZ0a8?Z06y,jZ1&58/Z1-^mMZ1-^mMZ1Z1MX Z3*5jZ4 gKr]Z60i Z7[ Z8} Z9nZ:[Z:[ n Z<+L Z=3Z=UB? Z>x2Z> Z> R Z>VG3Z?ri ZA(aPRK4ZD=\-ZE@6ΟZG,0'6ZG,0' KZG,0' $ZG,0' TZG,0' *ZG,0' ,ZG,0'jZG?Bj ZIR. [ZIhYSZJ  ZJ  $nZJ 5ZJѫ#`̶ cMZK Y;5ZL ;,ZL#_N?ZL)Bk]ZL}o?ZLK M[ZMa.ZMa.] ZN6`ZOXW ZP+s'ZPU' ZPCv ZP _kZP8%It ZQYP}T-zZQYP}T,ZQYP}TjZQYP}TZQjvEj ZQjvEv ZQ64ZQ{PZSJ ZSSC~!ZSSC~ZZSZ{>w ZTP^#ZVoL $ZV/ m 1ZVal ZW0; !9ZXS ZXDZXDZY%*dZY;ZZ" ?ZZH#D Z]/Z_!;GS8Z_e) #Z`>} Z`faδ' Z`{0j ZaE@8s2Za\?Za\sZa3oZ4 ZbbA,% ZbbA,%ZeR ^ $4ZeR ^ZfR1?Zf[yZ.jZf[yZ.QUZf[yZ.Zf[yZ.Zf[yZ.Zf~9쿌*Zf~9쿌)Zg. ZgYd. ZgZ "Zh"? aZi5-fCZi5-f ZjbLrUR Zk.c ,Zksߤ)_ZkgZlb!Zlb! ZlR ŒVZlR Œ Zl[wZls= sZls= i Zm\k ,tZm\k ZmtE#ZnU&$ZnU&$CZn*n3| Zo$Zo (ZonȑP"Zo䲳:R.Zof Zq+F?Zq?}aK Zq\g8`'ZqX ZrM6 Zr5JMZt4Ԡ|NZtސ2. ,Zt V0? ZuE>񩝮ZuE>񩝮 \ Zu_tZwS ZwP&g8 Zx泶j<ZybZykZz+ǥ Z{Cr!Z|?) Z|?) $Z}H ( Z}U*j#Z}U*jaZ}U*j Z}U*j Z~ *ZB%OUy$Z; ZtsZtj Z;=Zw}ˮZmENZy;ZP1] Zyea %ZY<[EZ#k[2~YJZ#k[2~tZ#k[2~sZF[AvZF[Aj Z̙< Z+'j: ZA- \ZA- ZiLviZiLvNZiLvZrd=P tZrd=P ZGE ZGE ,KZGE9ZGE5ZGE $&ZZLޙZH/qt Z1tJZ1 ( Z<~l(ZuRܗZv*Z] Zu Zn,Dͩ? ZTғtZiJ cZ8 $ ZK_=ZK_s ZK_ ZK_ZfoZfoZw`3?Zy* Zy* s ZK ,.ZƶfZƶfZ^BZ < c Z5zVR1ZK" Z={t:ZAoN/Z? Ze?ZC= ZC=  Z*sRQZ*sNoZ*sZ1x? Zou~ZwZZRZ ZC~EZU幷p9ZU幷p|Z\agUZˁ: ZR Z^$$Z [?Z [ $=Z [(Z [sZivR ZivQZOZO ( Z5 ZdlQ[&Zab ; ZY]jSbZPo,i.ZPo,iZPo,iLZPo,iZ38Z3 ,Z3Z4J9t Z2 Z2Z2 ZĪH ZĪH Zu >W"Zu >W"Y ZMQZ~Z@ .Z- "ZksZ>i3kbZ0DZI1ZIeZoZMrLZMr ZH\: ZO Z8plZæ;Zd` Ze"Z$0 ##ZƉPѶlZƪv> *ZA8Zu½,s wZu½,s?Zu½,s 9Zu½,s iZlOS ZuKRA^MZz6Z)̠tZI Zτ< \Z0'bZ3]ȟ $ZW34 \IZڙNZo"MIZo"MZom ZO v Z` iZUk3߷YZUk3߷ Z ҅kZּ]MW(Zּ]MW Zּ]MWZ+G!6~K Z3Z ]$ Zڤi3lP &ZĺS Z6!扜^ZMh"Z/ D. Z/ D.Zv6Zߘx00" Z"G< ZR (4ZJ1V` % Zm Ч Z媟H Z媟[ Z=ZmY9"K[ZmY9"BJZmY9"Z첥/m Z6,R Z華j qZ華j Z華j iZ華j aZYS ZYSkZYSY2ZJJ9GZxQt[Zƪx>p Z_h»R,Z_h»SZ_h» Z_h»L Z_q #Z^eZyz Z1?Z'+#Y Zdro7LZΔRZq/s7Zi Z;Z1m| Z.Ym Z"̒FZ"̒F Z- ,'Ztg=zd ! Z"0F˿ Z NOZvO ZCJՊ []$[#q` [X k5h+[X k5h$[av)d [2P[2[2[ &8] [2MPv[8Λ[1cJ'F[ھq$p [ߔzXM!9G[ߔzXM!.[ߔzXM! %[ߔzXM![ߔzXM! g[ߔzXM! s[ߔzXM![hR [ 1QKK a[ rϵ[ sPmY[ 9o [ ,j[ ,[ (X& s[ (X& X[ (X& [ (X& [ [ wh99[ :h[ :[ ,%ׯ i [ Dv2;E ,G[ Dv2;E [:Ԙq #[<]([<[<][uW5V[uW5f [uW5L [# [@|F) [' [0H[0H =[0H $[X [h a [z@0n [٭5 [-FD[-FD?[-FDj[{n? [›$5 a[jp [ABf [hk [hk  [2H ?[ |v s [!gT[!gT [!aBw [!ON5- [" ["nӼ [$ 2\C [%1:@[%1:@[%p-J|?[&.tQ iC[&.tQ [&=QK['7w̃)['7w̃['  [(u C[(u [*kls[+Dts6[+j?7,? [,42L [,y& [,y& [,yZ ,[-F@~ $[/kyA [0|=I~J[1*r f[1*r  ( [1*r  [1?B[1?BZ[2h=[2{t [4nK~q [51j3 [61[61 [8nc0 aX[89۲R[9Q7*,[;=ײh%[;=ײs[;|T [;F^S [;F^S [=:ҌYW c[>ꣂb?#[>ꣂb?S[>ꣂb?M[>ꣂb?$[>l A+a[>l A+K [>~f [>0XH [>do1  [>do1x[>do1 ,m[>do1 7[>do1 [>do1 [>yJ S[>yJ [>yJ 7[>yJ %"[>yJ a[?Ib{ٔ c[@3x/ O[@3x/ [@3x/ [Br>`ؿ"[B??[B?s [DHv[DQ!#K[Fe&X[FpW2[FpW [FpW [F0;> j [GY+|5[GY+s[H [IV ?[IV [J2(k #[J5_I i[JN="[Kݝo |9[Kݝo |j [LQgK$[N,EC [O`g([O`gS[O`g$[O`g [OiLE [O7s [P31`V [P31`V_[P31`V [P31`Vu[P31`VjW[P31`V 3[P31`V[Pv,H %[Pai[Pai [Pr [QzmuX[S C4[S C4Y [SlY[TR0o [T˸SL"[T˸S[U3` [VDFK[W d[W̑c4 \[XfA+8z iQ[Xxp `R[XG#[Y7 L[YHcx [Zz Ut[Zrɭ R [\- [\ycR [\s9?[][_-k&R[_~5#[`-VU[aW&HNX[aW&HR[bE?aOU g[eN:k [e܀2 [etHs [fK< [f'4![ff3[grr[grr?[grr[h<뷼UJ[ippqRK[iܩ~R[iV޹ [j1B*ⰑR.[kC~] [kt (d[kt|>[kt+[k+[l Yp? [mlKYL[n_z*[n_z[nu>r 0[n!]*? [p|Ah [pO_:N[pO_ [q&h?[qݴZ[rÖ [rÖ [rF?RE[s8髧K [sKgrYF[s(d[tO3 [t_{ i$[u7L4}[v &+k[v &+>[v &+t[v &+ i [vbw3R [v0 ] [v0 ]j~[v0 ]2[v0 ] ,[v0 ] ([v>»[v>»[xcxЏ [zƴF [{p9[|{) # [|,7?[|@D([|@ [}GM:[}TxYZ[}Tx([~U:% [~`N?s[~`N?/[| .[SV[¬óR[Y'Gt[`ƻ[`ƻ [cl[ ˦(J[Xm [`:R%[9\?[9\j [FZe[lKNZ [lKNLKN[lKNS[>:H[aX[aX[/ʋ ek [_a[C[Eq -([Eq| [Eq [k.* [ep:  [B"6t [K) R [e@ s[ݱds?[ 0)Y#R[ 0)Y$+[ 0)Y[ 0)YK [ 0)YR [5 3 [e<{j [ r  &[ r h[ r s[rJg97[rJg9D[rJg9[rJg9[I5B [ W G[L#[a [Jڤ [輚{"[H:(@[H:(@jo[H:(@[H:(@ [m:5R[>Z a[:Ij[p%BZ[=lxZ[=lx?$[b%WJ [xkdC [  a[R#] [*}?[[Q1 *[G  [Lt [qqa [Msj[-nxt ([{* [ , [QA [QA+ [y)>8[y)> [@`uEY [Ia9[&-aF% a[y"D kN[pl? a[pl? '[?e *YG[?e * .[(:[x [W [ }@` [5? [z%R[`'[,b׮%[,b׮L[| k[xVֺY["%[ / [x5[jj 2 [tr& [Ac9OW [Ac9OWb)[Ac9OWY[c5`[/f_ [6L[6[O~ [  [&׶ [R3 [XUG[Evw[k m[{[ i>[s-[j [;d9 [`F7j[)L1Z [IݻjF [IݻjF a [d˯'[d˯'[T\\7 ai[T\\7 e[Í [Í?[Í [@(; s"[ŀ;d [ŀ;d [ŀ;d [ա/5R[~QxP[&5j[&5;[&56[ƅy [G [$[*S\[J 1[J [xR> Z [Ǣ:B#[Ǣ:B [ꕿ$<;QO[ꕿ$<;O[ꕿ$<;[ꕿ$<; [ePr& [oQ[od [䍐[pE`K[pE`$[d[ [ˮ [ˮ[ˮ [̯ר #[z5[mCj[R],?8P , [х} X[х}  [ѨW [ѨW 3[ѨW ([ѨW R [VO[VO?"[VOs[=Cs[_Xw-[_Xw-t[_Xw-=[p/[r?[rs[r ( [z 2 [[ٷyj[ٷy?[ i0E$[L[vl [2&뙘 # [8!݉ ([8!݉ ([8!݉ ([8!݉t[܆ވ + [ܔ^K1[ܔ^K1 [ܔ^K1Z [Bs a [tN[_+4u8[_+4u8[_+4u8[_+4u8 [(\[(\ [߼ [a4[a [`4) ! i[>Þ_[>ÞR [Lf"[Rكq8 [}D [&gI [:r [=+#K[=+#S[L.d[ [_ *C|2[_ *C [_ *C [_ *Cj [S [F̓ [1[[ [n#[{[¢ [I \ []1Q $[K [Ňսd[Ňս[M?[Mj [1[:C [kL[kS [Z61m [p#g [D[ h [զ [O4Id[\, #[Dpԇ[ [bk[aqGK[aqGt[aqG [aqG o[aqGT[oovt[@} s [@} " [iS [i [=&$[/;Bk[k!=a[iP[iPS[d [d? [M~. [Sݭ a[ȂwD[7d #[mq[ɽu [grbP[gr:![grt[gr [r [r ([r[rj[r N[r ,<[rs/[r $ [r i [=s[] f[ta3[ta*[vx> ( [JX $[^R[2Y)_&\,vX \˅sqZ \Z㵎\Dvܼ (\Dvܼ i\Dvܼ| \U  \C#Xmt#\C#Xm\C#Xm\C#Xmk\e]<) \1> \v7]H\#Π \UΏK?\ m \8@SyQ\xD 6\xDj\oK$j\ !\ =5Y \ j \ Cv\ {t \ ='mEY\ jb6\ jb \ c40 \ c40 ,T\ _Xu \  \ l[;j\ d9R\! \ILK \IL \V+UP \ᕹ?X\ᕹ:\ ;R \Ӱ(\^K"\%ۚI \9F &K\פS\Q~a \Q~a $ \p7M?(\p7M i%\{B\A1?\~i?\9OŔD\-!\$VNn\$VNn \$XP\ x,&\ x,\$?/\$? \^A\^ \^\^\r8K\r8K\r8Ku\r8K+\Ox,? \~~ \~~ \!Mg)\!Mg\!MgU\$ۻv (6\$H?\$#SG7H\$#SG7\$#SG7K \%b5FjY\%ӘG$& \%]OKD\%j 9\%j \%j \&̑w@/\&9\'#y5vQ\(zx,c\(zx,jO\(zx,\)Z*]{f\)Z*] iL\)Z*] , \)L;@Q՜ \*\)L;@Q՜\)Ҽ5 "\)Xg =\* 8 \+p#y \,`mdnR7\,`mdn \,ۡd \-Jr \-Jrk\-JrC\-Jrj/\.+#g \.ڙ F \/pj/3\0[4z] \0 ~( \0 ~(\1&"S\2C0 \2$pX \3 Gv\3 G\5jVI % \5Ό /\6#=j  \7P}0v \7uHtS \7 ۚj\7E\7Et \8 B)jB\9al \:-&j \:T #^b \<#M\Z\<#M\X \<>B;\<>B!\<>B \1@?\>dZo W \>dZo W? \?( 8| \@o6\@zRN!\A iW+X\B  \B?J9\B?JR\BHZyE\D! i\DPj \F2Bd\Fi, \FWz \G5o\H K\H K&\H KL \I@'\I䯹g1\I䯹g\I䯹g\I䯹g`\I䯹gJ\Iil? i\Iil?j \J]~-\J K#\J K \K(8 \K$vݚV\M{z "\MrQ?\N%m5\NIm8R;\N1t\Nq\#\O! \ONIo(a \Paq dv\Q]aq \Qh*< \VW' \V[*\V[R\V[ \X '1\X@S\X@|\X@^\XG>CR \Ys \YQ[: \YGU\YGU \Z _y<\[Q`?5\[Q`s\[Q` i\[Q`j\[\ \[\ \\`?\^H* >`R\^H* >` \^Tڠ a\^Tڠ?\^Tڠ9\^Tڠ \^_[ e l\^_[ e $%\^_[ e\^_[ e ,\^_[ e \^tĉ[ \_<\aM82~ (\bS? !%\d`]| \dR^\dR^ \eJ,X\fע (\f^|d \h@; \i_3^U\jO>S\j]39\kǎb\kǎ\kǎ#\m <G#\m <G \m <Gs \on&Q;\oj& \pqr S \py $ \py , \py \qQn \r6+n6 ,)\rgs \rgk \s8³g \tfo\tfo?\tfo,\u$Q=\u, \vux̀?\wU(M + \xhpǶ \yBxMJQ \yBxMJ \y?Zl IW\y?Zl b\z3v| \zSpx\{<\Z \|CUυN \|dMZv \~bȩwt_ \Wl \0pk \1 #\1?\@4j \@4 \@4t \C5M \ڕk*t &\1SXH~[\ "C D\+6Y?\$xGN\7X\`Nup\9#Vk \:]A?\'05!"\'05\'05d \#ʷK\5 \@p \rO}[#\$R 4\ڰy' \[Ҏ%\W\W \+ \%?2\@+D\^ѿG^t\^ѿG^ \QXL \O\8\Zc"D \ a3 \j`U \K \ek j.\ek \ek \HUt\HUt\K֕{k\j۟ڤ? \d5p\9ZuK\8p? \ z,#\Z`mmS\hh\b \^R\{B t\5I3 \Y`Э& i\O64|~ \v{Q8\v{\v{\(\(|\8iwK\mnR \™ %C\@s \M0v@\׹*L]\׹*\׹*\׹*Z\׹*-\׹*$\׹*S \׹* \(C\(C&\D:T\D:T \D:T i \M$A R\M$A i\X5[ \`JOJ!k\bު[Z \1jO\igsH\ig?\VWv\>*˰!\Ish'\ 5C[ \pZ5<? \Xv\XvQ\t|M $+\t|M '\t|M ,\t|Mj\S9!\ͷrP \ͷrP (\o. \ I\ I \ކ`i \ކ`i , \w_ c \D(  \( \=Rt \9Smb \־^[? \P<5\$羦\EQ7 \|ZB< \"\.r 0\ 5Z\e^* \:Y%\wzW ^7\wzW n\PJMt \~:, \~:, r\~:,? \?#eR \Քt\Os \ e \IZR\šZl \7Y֞\HVe\,\*4\*4[ \CO%^K \ĸk6sA\_Š|\_Š*\8ꛉb \xS) \ǵ$p\ɢ}M<+R \՚X\~h82? \|lvr\|lj\nĄq\(_\(_ \d_P;PE \̹j\b:j \#bSZ\lc\lcQ \lc \8}X \%M $ \ҹ´Ev \w g\bW)#\bW)\իULC\իUL \(ht \&j\. V:\zf\流Qt%\流Q c\流Qk\PN7 L\s9I'\ܽuϲ\M~ǧ \Z6da\ަ]h \ \&\#\(,PZ \Bo fj=\ӮR\Ӯ\Ӯ~\Ӯ\\ӮQ@\[~$ *\m'm6j\gAK?\'c:? \?@^ \?@^ \o \▼[ \mZ)\mZ \xI \: \\ 2Ia\ 2Ia\4? \Yl_ \yX"bo\>r J\>r $\mjk,\7QK_!\7QK\*? \@^ ;\5MxB?\uUTjnb(\׭Q \W8ZR\: \rQC\_S=\f}[rH \"ER \8- \;E 5\;E \;E \vZ_\p;*YS'\p;*YK\p;*Y \z  tF\z t%\z  #\Ԁa\sU?\sU \l*t\%>&\cyגN$\cyג\սt \r%\r\p? \)$\ş\ \&\t"\+~v \;+j \;+j|~\;+j V\;+j\;+j g\cA.QNC\cA.QQ(\cA.Q\݈yrS\XuZ\dh- i \mP ]1/d]1/Q]Oe]*+ *^] r] ]=p.]He> $]V-]V-v]V- ] W@ J] 1IR] ]Z i] ?*] ] G ] CI^\@ ] CI^\@? ] (VEd] 5s] Ef , ] !=Ll#] $-Y ] HU])KYbK ]@Z޸? ] ~ ] ~ ]ysU ]YBek5]@+U7P]fo@M]fo@K]U Q ]eL%?C]!ZG&]zV1R ]ݭ-b]ӈ;W" ]Fvu]k] ]t ]8J ]m ,]rIO ] ] ]  ]q/ l ]WLL ].SG+? ]0cH]1V ,]3H) ]3r>F]4tW?]4"\q ,*]4"\q g]4"\q]5`O]6P4 ]7R"܁Y ]9}]9}K]9~}"]9~} i ]9~} ]9~} ]:-<U J];hHt];^ ];^ , ]FV%]>FV ]?-[WS-]?-[WS]A?S $]A?S ]A?S]A?S {]A?S 2]A?S e]Bth\RZ]C1p]4 ()]D)994 +I]D)994|]FQ,a]H~ ]H7-R ]H&aP]H&aP ]HN ]I-XA ]IESTu]JX+8 ]K?)b/]K?)b ]Kԭj ]L m P]L"G ]MFVva ]M)sW]MF4]N=D]N=D ]NDG]NDGO]NDG ]N<@6]N<@6]N<@6R ]Otm#K]Otm# ]O#$]Of ]PyY38 ]P?\_ ]Q-Գ ]T3ډȇO#]T8BeL?]TNy c;]TNyk]T!("8 ]Tj59]T;]Tc+* ]US # ]U?Ŵ !]U"rR ]VUD{J]VH ]VH a]Wr"I j ]Y,5[t|]Z"aiR ][ :w+s][N͂; ][TYR ]\:Gh]\:GhQ]\[aYm]\[aY?]\[aY_]\[aY ]]/X:]]/X]]rTQ ]_ % ]_/G]_/GD ]_Խ w]`| ]cG[Pr -"]dL'qdF]dL'qd]dL'qd ]d ]d87!]e$Tk]e$Tk]eY2]e`z]fauD\9]fauD\ e]gCj]gC]hzm]hzm?]hަ\?]isAS ]i^m[}, ]i/xv]jm@| u]jm@| \&]jm@|#]jm@|h ]jm@|]jm@| ]j$]j$]jQ]jϐZ^6]kjs ]k#H $]k#H ( ]l$]l}R ]m!@- $ ]m@ī w]nks^1s "]nF ]n)j []o>bq%]oATk<3]pK6ݞR]p` ]q UD]r% c]soGl ]s r ]sƻj]sOR]tܬ;(]uXk M  ]v.W ]vpTsOd ]wD.> l]wKrt]wKr ]wy[d6]wo#&-]w_\v?]wo ]xY=-0 ]x ` # ]{{;v]{{; ]{1l]{U$]{U]{U#]|!m]!Rؤ ar]Ƞ]]Bϓ9 ]ЛnR]+ ]Qk,K;]Qk,]Qk,SH]Qk,>]Qk,]~ ]z& ]z&  ]"K]"Rv]"d]ja]jZ]j]e{R]n \]Q!mG8]{vN~#:h]{vN~#:L]{vN~#:2]{vN~#:R]{vN~#:]ap? ] rQM] rQM]b  ]hlS1N]B w ]$pS-]aTPu ](1rt ](1r ]k[K-S ]Btj](e]m;C8`}]% ]Xq& ]N ]L t]\ߗ  ] ]"p̀]"p̀ ]% m].yA].yD ]%:]! ]vUӳZ]$&S]Cj ]C K]Ch]CsX]C ]C g2]C]C ]8k] ]s ]4J(^R ]4J(^N ]~H]~U]~][؆ ]Mf]MQ]MK ],n|Ѳ]<\ m]5"K ]Ҋ0 ]/JdVv{ ]1F2]=[]T]145S]'rG]>IVS!]>IVS ]X=Q,]X=Q%]X=Q]7 Tp=v]>1+ a]>1+ ]>1+b]>1+t]/T ]ZZG]+K ]Xiq) ]Op~ ]qw)~Oj]qw)~O ]>m ]e , ]B::Q #]W#WB]W#W]W#W]W#W ]U']UL]&bS]&b]&bK9]&bQ&]&bL]DlGj[]DlGD]K"+|- ]K"+|-:]K"+|- (]K"+|-]K"+|- ] _$ao $]fb]X\_? ]pUs]Th ]ZX1 ,I]ZX1 ( ]$U0 ]$U0 ,]$U0]$U0 ]$U0 ]$U0 g]$U0]$U0s ] u? ]9:q ]HZO ]"@ ]ň{ ]ߎb`S]. ]Ïd['t ],0#]a ]40GN]X?J]ȠD1[ 5]ȠD1[ ]ȵgD{]ke C i] C ] C] C] ],D] Q|V]Ԇ8#&]5יִ>? ]G˺D]G˺Y ]T:]ǘ3C? ]ͪH` ](`];< )];< ) ]{_y+]{_y][> ]VЕ&]m pPK]M_A "=]Ҹ%<k ]Ҹ%<s ]*V]fH7j ]P ]F t]cʮ| ]ׯ AUZ]ׯ AUZ ]J8g?]J8g] 1N6R]>嬊 ]&GXN1]٪+qfC$a]٪+qfCS']΢=N ]2 ]o1i[ ]#UL]sŤ]4_L]4_]4_]%Y]p;wv]޺" ?v] L!t+]`Kk ]s]=9N]sZ s ]㌕d*L ];r ];L'];L'? ]e0jq]e0jl]e0jO]e0j=]e0j] ]e0jU ]tN]t]t]t ]tQ ]漄2+] TЫ]V< eB]V< eBx]V< eB]{UEl]nݾ ]}}CshDo]}}Csh4]}}CshK]}}CshR ]k:] ]?/l? ]0G% ]@8L ]׎f]n$ c]iV]]tN?J"]tN? ]6]>q  ]>q -H]OZAZ]hv+!]hv+] "윸!]fW ]fW?]PC iy ,]PC iys]! $]۪]&̦K| ]Hv ]DBחR]qʔ +]:+ s]>e@H"]>e@H ]d&޳~ ]d&޳~ ]wXU]4tK]4t m]5=*] ]#S ]#S ]YS](CO]@0njn]@0n^۰aC6{ ^|vSt: , ^[A #^_d ^o:h ' a:^P~ -^P~ i^P~^P~^P~ ^l] ^7Oec^E-YF^f҇<@ '^_( w ^ 0%=@Z^ 8C E^ IR5}^ IR5^ IR5^ IR5QG^ IR5^ IR5 ^ @@" ^ 2,^ ry^"9 ^pή^pήO ^L7M ^^ˉW ^][^at^atv ^ WhR ^X51NA^e<^o ^Vm?^՞ya?v^Hk-^H^#݅w? ^ܪ5^0L^B ,^DHF^DH<^DH2^DH^ ӵ \A^ ӵ ^ ӵ $ ^ z ^CE ^ W0b^%ܶ ^%ut0^%u^*pd*F^*pd*+^")ҍ 20^")ҍ s^" w $^" w? ^#^#S^#L^#^#a^#T^#Q ^&M(T ^'#2v^(&hXyxP^(۝%^?^(鍓iy'k ^(.C ^) |B^) |^) | ^*;,t ^*: t` ^+4?R^-\^.U8/^.wD ^0`? ^8l%}jV^8҅i^9D ^:]̙^:'ng ^:ܶCQ ^;9 4 ^;#Z0S^<}0W%^<}0W"^<}0W ^<}0WR ^> %^>FFxW?^>]'8^?7!x ^?K^adд u^?K^adдt ^@zI='^@'>D&j^@-ȭR ^@m@x^@_LT=,K<^@_LT=,t3^@i'?'^AဲhR^C栞%X ^Dq-l ^GzO; a^GzO;s}^GzO;Y ^Ic>8 ^I Ş^J^66" ^KʻM #s^KÎ0Vi^KÎ0Vc^LUL ^Mcʕ ^NTz^P;Q,^P; ^Pw3+_9^P˓=nR^P˓=n*^Q$, ^S| Q7j^S| Q7 ,^Sb %^SĮu ^TCI J^TrBm \^Tw^Tw ^U0>J \ ^UN@[^Um^Um^U͝5 ^Vf>b ^Vl^Vl^Y]aS!^Y]aR^[Wfv^\Q/a -%^\o%^\nǞ ^\` g ^_>;^_> s ^_Ɖ*^_Ɖ%^`[=s^`[=sR ^`iy.^`iy-^aw |L ^bZK8^b" ^c!ըO# ^eE0^epGX^e.bN^fLS˰ ^g)L8 $*^g)L8b ^gC,: m ^iz^i"b> ^i>TfS&^i>Tf^i>Tf^i>Tf ^i*| ,^i(19^jsP?8^jsP ^j҉O^j҉ODV^j҉O ^k>tgal^{>tgaH^{>tgaN5^_\Y*n "^3.^3.e^^3.1^3.$ ^4T >^4T ^7. # ^`:wOR^p -^p? ^}mU^hT "^^Mt ^r:X[^?^@|M ^e"\ ^C ^7Wrָ ^& ^@>4v#^@>4"^q a+^qj^jr K^F^K^F^t^F^ A^F^ &^F^^eB^eB ^ەd ^ە ^D@ (6^D@?0^r~[ ^hh^|_HO U^&/3^/[6J$ ^Eu ^Y},˵s^ 2&t9^aK> ^aK>sC^aK>j ^aK> ^@vYO^@v b^@v ^@v8^ u6?X(^ u6?C^i ^ ^;4^̲7 ^pIZ ^ş? ^ w`=^V ^kv ^!kСL^!kС ^x,j ^L8Y ^ost^z?˸ ^ ^<.^<?+^< a'^<j^Gv ^Ȕy^6f!*^Ôgk ^)р,^æ9F =^:#tM^ċx|^ċx )^ċx ^%ˠ  ^y )' 5^y )'^ƆAB ^!Gq=^!Gq ^!Gq ^Mut=$ ^ɶ?^ɶ?R^!95h2 ^eJ^e5^e^'`L^-U1U^F%+^F%+^F%+^iLP ~^iLP i"^f$ ^f$Z^f$^f$]^Nw{:^Nw{ ^Nw{ V^Nw{+^Nw{ ^Nw{9^$ǵT^2 ^+K\ ^ѵKF ^ҀQOi ^.y_ ,C^.y_ 3^.y_ a ^Ӕ ^Ӕ p^Ӕ j^# ֽ?s ^g¼o MK^'뽻6 ^4廖^^YCvz ^٢4 ^٭^tE1^tER^ljk #^}' Ԭ # ^ ^t[^ ^ w ^4Qo/B^sYIt^&”4s.^^ 2^n.+s'^^c?^^c $7^^cj&^^c ^dȺ i ^Xu$F 7^X9TN^:t.^:td ^ ^ ^I@0^uCp ^!X ^)#s( ^Hٜ^Hٜ^r/)^3u?qR ^;( ^}/;5 ^> ^ ^9MEs^Hnn )^ DgZ^ i ^IAM1 ^ GOpc&^ GOpc] ^"]^#RK< ^{j4qY ^ngin ts ^TУN^?G$^ ^s ^LZ2^ثϷUB^ثϷ^ثϷ^:"_V? _\_\R_Ed-_?rSK _OR _o\,L_U_U _1u _s^h{_h _Lt_ c_Lt_ #-_ ^N _Jb _s R _؉g+_؉g+ _  fJ_ ?_  X_ 94_ _yh _ ðh_ %~e_ %~K&_ %~ _ ci~i:_ ci~i _ |5P_ oƻ_ oƻ_ u2_ uR _ jq,Y__ jq,7_ jq,D _ 6wV _ 6wV _ 6wV t _ ?NV'_ ?NV2 _ ?NV _ȇR4_C^ \ _O`_O`s _Qpi%? _YAx _KYfĔz_KYfĔ*_KYfĔ_g_W*s`E_W*s`_3 _-U &t7_-U & '_-U & _J _|h'm]_|h'mU_|h'm_ 5?_kJ _p_;$_;s_Xzuj _ B>R+_a_A2} ~n_y`6(S_]hʋC_]hʋC , _צs _~ޖj _*}]$"$_SϷ_' _ VN#5_E<? _ m, _! Gw _"xZ[;_#O%8- _#z _% _)j$_*mnt _*j  1_+K_,C&(BK_,b!{ #_,߱>A>B_.$r./l_.$r./l[ _.|ηj_/!N[_/r _/DU0_1Sc _2zڲ _2zڲn_2zڲ_2zڲ_2]7_2]7 _2Xu?s _3I*[2_411{ r_411{ Q_4\t_5vu._8Uf5_8Uf_8Uf_9_|m; _:'! _:3vtf _:3vtfR _:3vtf i _:,F? _$^4!3_> ݉j _>  _> ?_> _> _?|u@ 9_?|u@j+_?:v+ _?Q_?Q[ _?/R_@5[S?_@5[S U_@5[S R_@f$YV_@w_Av+Ƙ _A}H&SQ2_A}H&SQ_Bn1h _Bn _BCV#p _C M c"_Dg _Dt9ej<_Dt9e -_Dt9e $_DځU _Dk ,_Ek"v_EHp c _FRg _GD:c|O_HQ .$MR _J;|v 26_JPe/A _J؅! _L`WlS+_L`Wl_LbR?_LbRe_LU! _LU! _O]~(_OZ e _P&ٱR _PjB S _PQUb'K_P_Q`mCv*_R_R :=_RCg_TynB_Tyn_U71_U71_U71 a%_U71 _U71 ,_VspH 3_V 5_WqRN_X<j_X"x _Yl _w>lh _w>lk _xDW^' _y{ʞ _zE# b_| 4_}unm_ b ._ b _ b i_K  _1~_M]Z__IYa? (_ð! Ok_!b;(_!b; _A\N _=jL _<?)_&Ũ _uBf_Z6xRt_/Z$ _P V_P j_T. * _j;L _$~_CjYD _$QBT _$QBT- _켩 _x _2 K7_2 _n.c} _xw- D_! ڪ _Ӕ%*w d___/ XC $ _WXMjH;_WXMjH_qQ4+_qQ4*_qQ4_X6_X6N_X6S@_X6L_(mes -_Vꑨ2_Vꑨ _Vꑨ _F. _epzH_5Tc.{K _ƭ_{F _$ѽE_$ѽE_$ѽE_$ѽEb_jgY?(_jgYs _? _ _ܧ -_hG s _4N1|_Х _|/+m:k_(5Gy i _:ifHSC_:ifH+_ s\zkg_"2  _GJ_~\+h_~\+ _~\+ X_~\+4_~\+ ._~\+ +_~\+ \'_>ί _b_jX_ I_s0_e5 _}Z⠜s _Oag_F (_H1#\ _ e'X&_ɇ{AQ_ɇ{A _1Rd9_ _^=v a _A!_c)ܨ_c)ܨ _2$_k/ _$o_ib _eR _;(TR_;(T_j/NS_2zF \_2zF?,_2zF_6j2Ye_6j2_Z_QX_ _F_F_FQ _Qsv58_ɕQk_&*ta _`K_hX뫼7? _׼W Z _ԐB_G9 _:n,[ (_#- j _d _u'lU?_u'lU a_NFz^p _j>!Q_BMX]_BMX _BMXP _4V_+~ c_+~ _+~ _+~ _+~ D _$N _z ԡ e _r':|N_r':| $_r':| iq_r':|7_,r _MNK _`AjgO_cY #_j:&_j: _Q[TJ _STe%_˜U;^ _\+s_\+s J_\+sH_-К _q휖vs_B:/ # _B:/ _ĤFj_ĤF _y5r+_y5r_> ȄS_`5(?_s-n s_ǂX7^ _ɷ) _ɻEr| _>S_h9|%_ a _BD>_BD> a _".)t_lz j_ˣQAB _ˣQAB _˫iRm? _]bХ _h'ӑ%_" t_"KB_" &_"t_"|_" _;U M_;U -_;U a!_;U _n(/Y7_WI?_-e <_-e $*_Em_ݮ _yׄvi!_yׄviN _љmZ<_љmZ<_B4u=_E)k_ E $+_Է? $_Է?s _Zca e _]YJ_]2 _e _GlϢjR0_GlϢj_d{p_؝ᕜU_؝ᕜ _؞3t6 _DV-_DV_DV_ٱB`kJ_ٱB`kx_ٱB`kKT_ٱB`k+_ٱB`k_ki@No_ki@N c_ki@NjM_ki@NY_8g4_R) U _g,_g_qR _.̬x _c[^ _1P_b-_1P_ a_? a _/J'?K_/J' _/J' _3D 1 _ \R _2Fb _9 _U5 _IL_+n|_HSZ e)_HSZ_HSZ  _덦 vv_CTs _.F_H gU_bS _|uc _|ucs_|uc_(%!z _\9/_=4_=4 _g!_ _g!_ d_g!_ i_iZU c_6eL_do#R _Ьl[_0Ȧ _Cr r _nͣV _nͣVs _x5I_S-2_WݴS _xM_M _OB_L%lU aC_L%lU ,_L%lU _L%lU _.8_ $_s0E/ 2_s0E/9 _s0E/ $ _s0E/ _#" a_s9'_s9'`+_:aG`+_:`+_:Q `z(g_ $`3 `يlR l`hE`h;`8`n1 -`? k `i#S `aH> _` : ݞR` : ݞ`e֥T}HY `Gtp4|8` ᤩB?D` #` ` {.0a2`  (`  ` ? ` i?X& ,` E` ` g?)-` LfK ` 0C` =@ \` r݋${ ` ? `F_`ˇO`F_`ˇ`F_`ˇ`F_`ˇ `(ڟsH`(ڟsR`(ڟs] `(&6`(&6`.1 5`QѨet] `rn S `ׄ f`vUM `bA*d `s4 `I#`BN18U `{K `T]ZpR `TĂL? `yIQ `[u `b0_N5`b0_ `/vܚ@`.7k[3`մ`!AV6S `"5X :S`"5X tG`"5X `"5X a`"3x`#+[Y g `$ZnE: `%Q6>?`%12[?`&Fa `'2P|`(6rq ^`(6rq `(6rq$`(6rq`(6rq `(6rq `(c8/ \`)ۑ `) `*2$ `+ImOeh`+ԹSl `, #tC`-"3`yU `->C? `. ˌ i?`. ˌ i t `.r)&Cxt`.r)&Cxj `0?LfP - `0l.D `1`^R?`1o- `3t}@`3t}`3 g`4k[U `5'`5+M# >`6"=Z*`6|CM `6~`6~ `7Po-R`9gdr\ `:Rh!.`:Rh!:(`:Rh! `:؃ `:؃ `; pEc}fa `;B)D] `<)l,Y %`<1 `=\p5`=uD`=r:a `>Ԑ`>KK`>K`>K `>KL `?%d  `?"@(`@劍?bj`@ì t`A%P̘ Q `A>4Qe`BfY`BE`Bڅ21b`CH-`C1 `D 1n 2`DP!;r_`DP!;rSH`DP!;r-`FRhD9y a#`FRhD9y ,`F(|%* `GN!gRY"`GN!gR`GDsO`GD`GD ,`GD z`GD x`GD :`GD &`GD \`H]`H`lxxv `H`lxxv `J0VL&I8`J0VL&I $`J0VL&I , `J١7' ,q`K7T7?`K Q^`K K`K `K `K_8 Y`M? `NRi !`O?zY)R`Q2e/P `SSH? `UY ܸZ`Uz u!`VXbƯus`VXbƯu $`V~Rz;`V[B`W@} s `We׊wC `Y]T`Y]`Y]R `YU/̸8`Z/3L `ZI5.9c `Zl#e%`[9m `\&Mt`\&MYa`\aD5 `\^^=3%`\^^=3`\穝l^ `]1"Hj`]&^ #`_$9tS`cӇ8> J`cӇ8> J`cӇ8> J] `c;UI `d֏<';`dmð'k`d' 2`e))+ `eM P (`e`fž`f, s `g `gt|`hrh- `hq+q-z"`iPeNF`iPe`iPe`l)wst `l= $`lTЪ`lTЪ `lhT[g `l CL`mBAa U # `ow`o?"- `pU-i  `qܱ j`qܱ `qܱ `q=W`qig`rvrAt$`rT `s; *nS `tqg;= b`u(? `uh;G;F? `wQ~h`yE]K`yE]Q0`yE]R `yE] `yu`z*Lj `{nKQ%R&`{q3 $`}˗(uj`}˗(uh`}˗(u ` :`f9#`f9 `5F; e5`5F; 3`5F;s2`5F;`.~w= /`.~w=s'`.~w= i#`.~w=j `e}F" `$%uz[-`$%uz`$%uz `U `[e['`)  s`@]ZX `24`Oo\`-K<h`-K< `h#4?&`9 Bv)`9 Bv`]DT#'`'/n ,`'/n `3q.`g|[`zfj`6Hs `O?`Wm g=`Wm gL`Wm g `JvOW`́@U؇ a `; Q`7n?`Se/1O`"t-O `FP?`y@]dpd`4sA`4`" `÷0- `& (`s ^ lP` F` FK` FL` FR` DMћ`))M5`l a`/XJK`:C ^?`:C ^ *`@8Dr`"$ `(9CF`(9Q1`(9`&!v `~ㇴPL`e\D* `qD `lX͇{`lX͇{`/ `/ ,`/ $ `P]f-`lհ *3`22`2K `B l`+3<F |`@l:2`@l|`<{W!`l ~] ` i `k `ȟ5 `5 ` ` Ӝ -`g a`ؘ`ߑQy`q `J]? `I\/ `" . `" .?` Qý}v` Qý} ` ӯyY `{n@}t`eLҤܱ `m/n-`m/n `CY`CYk `վ7Q9`"DM0`"DM0`Oe/`f `/Kz -`3= a`šy=s)`šy=`§OW c `?p`?p:`?p ` }|8?`Z]`)p&R`&`& `ǂJ t?`ǂJ `۬Y `۬Y `۬Y `ex[`ʨD%|`7< `Ҿ `h?`Js`Jq`JY`J `j?"`jj!`ь>3a`ь>3a \`ь>3a?`ь>3a `Çt`l-# ` lj`ML `NW}MJ*`Pp7 `5EJ ^`B>+`B>++`B>+*`B>+ $`B>+ (`B>+ ``7 $2`:yS ` [ s%` [ `hQh) `כ V%S` ǭM?&`b&`bS `9Zk%`9Zk%`{(` \`گk `Y$`ݑ` Ѵ`\iX` 6 1`hst`ht,`h%`hk `KvFR`Gi`Gi *`Gi &`Gi $`Zqb'`R@pSK)` `-"s`-" c `\8bv{`< eQL `@q=``-r]`~ni`鿲 ;`鿲 ]`鿲 `-t `"1o"`PP o]`PP o] $`PP o]s`%/1`%/1R `A.7s `%`%'`%!`%`뫭j[`O0vL` u<` {`L Zj `m|?$`AAd `ռ (`ռt `o?`g_BR`xE+Q`3h$?`TZq`TZq `/T? `ѿZ ` Eg`iu[Y`Eugd`oO`^ 2`F `5w \`Hv`v,.@a`.X&?E`.X&s,`ڮK`P `?gsT `V7K`V7 `2&#`2&`2&$`jl/CD`jl/CR`/ `ҽPR `**HHS a`EBkԨ @`Fr` a ]H& 0a ]H& i aϱB: a2djHa2d (a2d)a2d_a2d $5af*9SaJؠZ aEayafa˒ auXYa?a?QR aM a aWqh@a6< a6< ao-L8ato6Qea< aHM9af$̜^9a>6 aNaM5 ahQ ?ap aB}ے a@MQj a g.OѬ a 疑& |a 疑& s a 疑& g a!zEIRa!'] a!]98Ya!- >y a!z)AS#a!z)AK a"gH`0 Da"\/ a"e}[a#U a$M  a%dA^ a&'mPt ma&33BV #a&33BVh$a(4 ]Qa(4 ] a(@ a) K"a)҃y]a*Yk0?&a*L%a*La+TJa+a # a,< a-# a->w_W?Na.#>v a0^ a2eXM (Ja2eXM $Fa2eXM>a3Gt a3b%*#: a4|0 %a4|0 a4"k'aH>V aI 2 aJ۸(raJQB}QaKSAv]aK@ aL"F4aL"F4?aL\>taL U+N aM,܍haM O m$aM=*aM=*MaM=*aN&ުTaNWaNWSaNƋ aO#NaPZide aP)U aQ; o`aQ$ ۥN!aQ 2aQ 2KaQ 2Z;aQ 2d$aQ 2aQ 2LaQ 2 aRI^ aRI^ aSE .rjaTl˾aWF5/1aWX0D2C aW{aXM1 aY[=_c3aY>+ aY8jaY8j , aZmv a[AEr?a[AEra\ݨuuMa\8 a\8 a\8 a\-a]o4a]oa]٣,4` a]᭷ +U a_NvIca_у%a_у%a_|Nsa`d a`3s}S1a`3s}(a`|Q aa ac }S/acz"w adNt%Y ad adV 0adVae] Fae] -ae]  i ae]  s aev-{*b5ag?%ah "ai4a#y 1 aiKZr rbaiKZr r iQaiKZr r ,aiKZr r (aiKZr rs aiѸ =?_aiѸ = 'ajacKZRamE ameLK'an+an+ao) d? ao.vap.ݍ2 aqп $ as(&as ڃas ڃat$7ߙat3 ^ at3 ^ au Ѫ"au3s.Jdau3s.Jau3s.Jau4 H ave= ax*t ax4ax?ڱ $az>: a*azrI a{?z@z a{XIa|h夈 a|1 a~&^P4a~' +av^^ }av^^?aZ,W|naZ,WjaZ,WRaZ,W a/ڬ+j a U#ϼa'`?aDaDaKݩt ap>R aiTo a/Ca/Qa/Cai"\ai"\ aUYaaO aWZ.2aWZ.a׺af]9:dtaM0aM0a~g/Aa~g/ar nMar ar u aMs>DaMs>j3aMs> $-aMs> aR]`\ a~৷joa~৷ , a4G | aY6g aY6g ai~7av a^r j0a' jamha~S aiMJy $ aQ#a a ( a[ >Za 7h aZj #au#P*Va n]abھH0: abھH0: $aЦ7 ea'v a1{l Ea1{l c aofv?(a.X@ HafW amG_#amG_# a%(m2" .a%(m2"Y&a%(m2"t a%(m2" aI  aaʫ~ aN_?a.e~ atr?a#N g,a6%a {|a ;Q(a ;Q#a ;Q aj aʒzRabb)C{aYK akЗ\ aM atIa;$a ( a;$ aS,E^ a\" paQ;IohSainԳ/ a^f4- 6aȅa,ohX(a,ohX( adXO a庑zY8a> $a> aXpJk- &aXpJk- a7WN8az-y"aɦպ alebaڹ|4(!aڹ|4(a;6Q]amda'i a*сZC;aK&ʙa6"'aayFaD0;  a ac} aan7an 1anaE;a.jVIUa}zJҢ adrXaJG+Y j aw|_s aĬO'aĬOaSm\N (aSm\NY a aY@HSaN=jt#aȞ8& a ,eaC a]aCj5aC aC aC , a#Q] ax@aF at&,A #aϩݼ)? a^Nzj aЏU8 a% a%a%a% ea%sa% a%jasG _ a}(?X;a҆$Uj aHdR?a:$ aԵ aԷVzaգӿƮ a/?]#ia؀@1&a؞5La1&А #-a1&А af g aۨTON a/: af̾gzqa۵A\a=;ska]ʧ|$a]ʧ (a1J!arX6[aݩȍ/aN6va":S1a":Saa6iẀ s3a6iẀ ia@!KqQY ayw%EaV_\x aRL@r KaRL@r'aRL@rsaؽNBaؽ ac$(v*a␓Mӆ,a8, #a8,a;^YNLa)b'a)bQ a:~?8F c aI c ae aq8b-aO (aú'Saú'La2Kad5q a4%a§]ta%^2b1a(z_ , aþ"8a5l a*p aFUc gaFUcta8Kd a0| ajץ,aDRiaD@aDa٦/aps aȰ^. # a:Ŷ.aƢV%aƢaƢaƢ a=gS a{nSa{nKa{najNUajNajNZajN a/D aBX=1arh aP+XX amQe] a1ro.?a a a a a .Xa|ja)Zdt'a)Zdka" a-[N a\-J]La4\ abZ_5W?AbZ_5Ws bHFObHF bHFbHFDbDy?bP?: bNiJ7bqQF (bF 1bF?b;r7lbb;r7lb gb;r7lbs bEfexbEfeWbEfebEfeZbEfe bdaJWKbdaJWbѐ i b4L b^WH c b}eh # b,` bt7. mbt7.bt7. bSI< b`i b[_vbЫw b"b" b bO>?!bO>j b"b r jbF[ ab$Y ,3bo7/b2zS (b2zS b a.'V` \b xBD b 7qmb qK a bSS b 'Kb ' b.H b"nftb"nf axb"nfjb"nfb-edSb_ΕD j.bL,P]b_n4b_n4$DbIT bmJj b}g eb;}YbXr -b&b \bx'b _l $b _lbuh%bN +<beWbҬdDbҬdK bDY - bbQk n bh a[ brQS brQSbrQS ,JbrQS %brQS brQS $bƒJb"~ b=b!Ez_ #b"_+?9 $b"{ׅo ~ b"Y^]b#%_, b#Pxt b# Mѣ? b$0 b%>Prvb&KvH i b&NV b&njK#b'흸% a$b(A3 b)g t: b)chk"b+I b+aqk$b,>nոb,/v b,/sb,/ (5b,/h b-g-HLb- l b.[CPCb.[CPC!b.[CPCD!b.[CPCb.[CPC b/L[Lb/L;b/L$b/Kb/K b/'jb/' b0NJMLb1LJIۥs b1LJIۥ b1b4!8 * b5mxu;! b6+Y b7<Mb9bo b9K b:6h-b:6hK b:6h bR|^*b>R|^ bA#LpFDbAw#h?bAw#h bAGBbAGBR bB=QGY3bBRht Q bDL0 ,%bD1\ bD? bES(bE wqJbE@_} ` bF^bF%.nbF%.8bF%.R&bIPl3+bIZNlqfbIZNlqbJeK^"$bJeK^" bJ 2RabJI^R:bJ?8+bJ:[ BbLb ($bM>&?x'bM>&?xbM>&?xLbM>&?xbMo5Ё? bMub=h b$kȃbb S#b~%:'bBƄS5bBƄK b"K>ٰbN bTGt b=Kbdj$gE[ bߡRbmÚ{YbmÚ{bD?-bDs$bp_^?Ab%CA!b3mlzbtIP ,btIP?b24Y' bi$W bk<|6tbk<|6bk<|6bk<|6bk<|6bk<|6 bl~b9# bcj,E #2b2b8b2bKbԣ6I bO<L b>7bE b0Q]Rb}?.Rb}?.K b}7bPo N b7k]b7kJb7kbN΀ɭ4bN΀ɭ bm bI1 i bI1 s bSYb wm! bV:Db{fne , b:]uS bh bWM= a0bWM= bnlK b)~b^vb^vb dA bma bma , b2 b܍yn br&Ab4\< bib 1ˋ bzNbS b b- ]b6"b6b6ba*f{ bUR b߾Zb?H@$b?H@]bi%Jr( b5 bhǾ a bxP mK b|5ib|5iXb=%5 bK b*bx7$ b &F bn 0MbOX bƕ b8l7 #b$b*Rছ b \sb \bsibsibܙ6bܙ6C b{b8'M ibd^^$K bS5XZ b}/ b"` `b"` ` b:zb: bwYg (_bwYg , bwYg b o#b ob oZUb ob ob bq`, bsnbsn bsn bCUasbϚǏ bT b$\v c ףR)cYO c0:K cO~h_Z cO~h_LpcO~h_cO~h_UcO~h_QcO~h_ c$c Cdc CdYc Cdc CdK{c CdVc Cdc Cdc Cd cgJ;K cbȠI 7cbȠI0cbȠI%cbȠIcbȠIc`XP c`XY caЌt c=\9C c -c U"c Zcece cox]e Ic1cq^8cq^ c8-wR+c0bc {ӫs c :* c TUc TU c z'c wkc wk cS;Oc(Rc7Z cGYl&cȷP"(cvch:| c c(\ c*_?"c{ [LcbJcb cbWcb5cL i cL - cL -s cL - cQݙcGz cfHcfccfXcfKcfR cdS cڒǃP?HcڒǃPjc2|# cR: cR: acR: 6cR:kc [Fc!!UzDc!!UzLc!!Uzc!!Uz c-cc5ˊFqc#s.c#t c+h-S9c(mc(mc(mK cc?:c' cklGN,cjї­jNcjї­jAc=}cu&<cu&<SNcu&<Q@cu&<-cu&<"cu&< cǭы @c%Uq8 c%јwIkc&Kg?c&Kg c&ixR%c(FuBq c(/uRc)#B c)#B c*x1NJ+c*_c+oz(w ac,|=c,|=c,h $ c.\k REc.\k D&c.\k Qc.\k K c/=sV c0Jf9tc12^ c1׾j':c2 @v~k c2,',Nc2- Y`tc2Kf}c2Kf}Qc2Kf}dc2Kf}c2iLc2iYc3W c3Zc7)j?(c7)j?(]c7)j?(c7)j?(Ec7)j?(c7)j?( c9iϒwz]c:a:c;Tn3nJc=Kuƺc=Kuƺc=Kuƺ@c=Kuƺ-c=Kuƺ \c= c=~a c>2FaJ[vc>2FaJ_'c>Fܒ\c>FܒKc?@eL(atc@{O cBk # cB=y3cB/ cDUT cD/Z7h cFBK?0cFhLcG-)iycG9[P s cGN(cGN(cH9" ;cHeD7 cHĕi cHĕi cI}>C:cI$~@KcIꎴ)WacIꎴ)W)cIꎴ)WL#cKL]n  cN $cN9cNSY cO!N; :cO_W=~4cPO( cPO(s cQ^9UrcR,LibcSiRN1cSiRcTyZ|#cUcV icW0w:CzcW0w:CzcW0w:C[cW0w:CcXSt.cXS ^cXScXSYcYJ cY?U  jcY*l *cYEyit) cYV%G@v cY]#c\?>c^N}|Mc^N}|] c_ 9ӓNc_/c`pxc ca>|Dca> cbxIE^ cb D cccnڥ)cczz]cc\/zcdwsD $cfCcf: cgU:v cgQD icgFRciS6 ci&莽 cjE_r ack8j0ck8s cki sK cl?cmYD cqp *cqptcqpj crUŗctL 86 yct*"3aD cwBkghD$cwBkghjcwBkgh cw@> cx;jGcx; ,$cx; cyJp? cyZ t%cyZ "cyZ s czff i5czff czff czɯc|Q[Uvc|Zc}ͩc.\cP^jcP^ cFcFc YLH)c YLH(c YLH c YLHc YLH c YLH cR:@f? cn#̹(cn#̹ cc o: cw,z9K cŏN- , cHuCZ cb^c-V ck(òc4qIc% cL=2 IcL=2cL=2:cL=2 c&zY X Sc=lr cFp i>c ^,c" c[ Sc[ n c[kcbjLcbjK cvgBrh*c{v)6c5$cD1c cj~b?cl sc& ccAB>,ci) ,ci) ci) c?scŖ?"c<Rc<c? c/a crN cyXfRcׯ@s c2Sdc2Sd c!(ҹc2H cd=ZmcihBJ codݣ codݣ] c!d}FWc!d}F*c!d}Fc!d}F ,c_\չY&ck$ (cb@3~ch$ cQi> cF:acFP` c]  Ic I9McGc;% cÅp c \?cv! cy?j c= vc!$נ8c!$נ i ce%j<ce% ce% ce% ,ci cݩ}~pcӨo c'`pZcL cCIcԨj2U#cԨj2cԨj2  cy[fcy[_ cl|M{cZ c!:屃UZc!:屃"c!:屃!c!:屃c!:屃 c!:屃c2Hco|cmBIMcmBIBcmBI a,cmBI cgcc"jr c|Quc|c|P c)|( .c'B co]dZhs?ca7caK0c;YCc;YCS cDoK c±NbcR:'c f ce XV -3cn:?cġhnES c:K cŐؿ$cŐؿ c–Up cƩyg`cƩyg`cƩyg`cƩyg`cȒ,(cRcȒ,(c cɄPvjc)cJ;ؗW'cťmfcťmf 'cj:1.vjĉN4PĉN4Pc^6 {c̓T| cxyd cnc c= E cΡ!c epcΡ!cRc )ScM+cMQcЭw cѝ7.* c=ԯ=AZcҫٳI= cA i` cA i` cA i` c8:?vU csxjcٿo c1|v c>*Uhcp, iRcp, icb40Q (cb40Q , cb40Q c%Yc% ,cT X]wcT XcT XcT X c=1?Dc=1?]cuֿoz cj-Dycj-(cj-"cC2s cXʆ cޗSKcޯ c޸t8 c3X R mcq|< c߂ȼDcߗvdcUxJVYcUxJD cD.ce] ce] $"cc=| cc=| cC;jc$ll cWȪm;cWȪm6cWȪmcIdp c[ #8c# c#G8 ^ cƷWcƷW ccӰ (&cZ\w/$.cS;KcS;cS;cS;cS;D cV!ndc$Pdc㸿Yذc㸿YذQc㸿Yذ csvcsvcd{W= c찭-Jec찭-JVc찭-JLc찭-J]c찭-J c찭-J c #Nc,\Jj cOh@R c+DI=c⾢?$cnT?cnTRci^v cX*? ces;ro?%cz&<c_/c_c~qM; c cfYP9 cXҊjc cZ2cZc^I sclO0c\Qe tc\UZc\UZc`2 !cX $ d) zlsbd57 d?xSdǝоUdZDEdKOd5%HUKd]&dxo #"d]&dxo c d* t d5ޥjd5ޥ aDd5ޥ.d5ޥt+dqt| d Q 5d Q 5d  B id  Bj d  B d mSkLd 3;0l d 'm%]gd ~iZf2d ^5v:d ̀#%0 dw]]: ds d9p dJ5R dd") d") dp Pde$R d CE3 dYnVj dwY!dwY& dwY d()i5 4dIGd?- d^?d"O.dhd9PdPZSqdPZSdPZSkdPZSdPZSd1}d1} dS?/ ($dgXx d#(32 $0d#(32 d#(32 dm9d"HS}d"HS}d"HS}L dYC[gdYC[dYCD dYC dzLi }d4e9,$ d d7??5d-+ Zd'V_%dVADw s d d d SdRD 2d_9~d=d ֡a< 6d!w*d!wK!d!wOd!'3 d"&Ld"A{ 'd"A{ 'd"A{ 'Qd"A{ 'd"A{ ' d#R+=HRd#ceX;jd$[IJxpd%3ms d&P3 ,d&ҐHR Td&45bl d(8d(8d)j= ,d)'=md*"ҏ3d*Kwq d+uI?)sd+V d++td++d+D8Yd/O d0J d0J? d0@ EVd0Ru5Nd1btl"d1btld d2mF# d2tp d2tp (~d2tp]d2tp d2tp d2tp d3 \ $!d3v&v?d3rd4zKP> d4 teQd59Bx d5J| $d5J| d5OR d6e-2d6ŘQd6ŘQ!d6Řd6Řd6Řd87؏bd87؏ d87؏t d8w m id8͆GRM+ d:¥Rd;|+_ l3d d>e d>-G}d>v_& #d>Ժ!d>Ժ!d>8d>8 d?63Mv;d?r)K9 d@~nN ! dA{, dB}N-"dB}N-`ZdCװ$ k dDoBdDoB ,SdDoBdI" dI s dISkR dJ!9!E dK V[dK Vf dKm"dMJVJ)dMJVJRdMJVJdMJVJdMJVJidMJVJQ]dMJVJHdMJVJ/dMJVJL-dMJVJ&dMJVJY dMJVJ dMJVJ]dMJVJPdNd%/R dPc3dR͏ ;7 dR dSKSx +DdSKSx  dTQ(~dTQ(QdTӄ , dU${j dU@t.LdU@t.$dU@t.dU@t.ddU@t. dUzQ ,dU Wn#dV ?OdV  dWsK-DGdW:tdX,V> dX^X dY #j dZI0J ({dZI0JvdZI0J gd\5= d\<NKd\<NNd]iA \ d]{g (d^e a d_ZH d_ZH Ldb3漱~ ddb6!?-dbu_ϝdbͷY)sdbͷY) sdcJKN dcD (TdcqN?j4ddZ#( ddQS 7ddQS de bHXdePe`5&dePe`5& dePe`5& dfvhdgaSpsRPdgaSpsNdgaSps4dgaSpsdhXAdi@di dj ]udk5T8 dko dk2m3?'dl:Zdl ]dlu.;dm  dnj~1dnj~1Ddnj~1Qdp jdpD.BdpD.B dpD.B $ dqP}(1 \drekL drh? dsZm dsZm dscsNdse.du.QR+du.QRduL duеa duеatdxA+ dxlI dy!ky 5dym?޲ d{}5S0d{S{9(d{S{9 d~ EY d}r?=dfvJtdqA db^ْ* db^ْ* dPP dPP?YdPPsdPP dXBfG"dXBfG"dXBfG[dpZdpdp dxֲd*v? d5d;xdؼedؼed.?)d.?)S3d.?)L d.?) d1!K \:d;#N u d}$ dof duh.sdl shdtO ijdtO?5dtO "dtO d0f]g bd0f]g $Bd0f]g7d0f]g /d0f]g e d@AR"dxR{d2I^s #d?H:d,Q dh jdh dͨ =dM!2 d\Jd\J ( d\J 7d\Jd\Jd\JYd 5× ,+d 5×d 5× d#6s Kd#6s s1d#6s dW2W: d&Yyd4? dTdI^)K d@ # dMhEItdh)^$dh)^L dvefRdYQELd(7]d-v dN4dN4tdiu d̢+ dƿ}?du$ L dJ t Adz?L dZ d ZQ d&uԿ jd&uԿR d6CDe d5 cLd5 c d+vmp? d195 d#U9f d#U9f d h$rd6V d0eBL ,d p8)dnn djXb dr d?=l d7,:whd7,:ws dR7Ot d%? d8ʷwN dYznU$bdoT"vdoT"vdͳ #dc. dA9 NdCz5\j dJv"d;rDdΓ qd{S 'd{S V dV| d7= dx< d^ ad +b d?n>d?n>Ydu| dKql;; d*2Gd*2GL d"y'd,q]ld,q]J dkRd8F dr da*u; \ d"z1d"z dm4 d9VZ!tdQƩ$)L7dQƩ$)h+dq[dt&RdHop dHopdM@ dM@dM@d IZd]dow d)CB? dťF dgϲvt!doKҔ , dƟ nfy cdƼm3b d@sd-Ƃl dL.B #d̹d̀mp d͑]y dȬՎfd3dU(dԏiWdԯP2 *dԯP2? dd2 dս8-aS dNCdNQ dg{?˽j6dg{?˽ dg{?˽ dJ ? da? "odtT&d;҆4d;҆4RLdq, vdNbv d*3bp \ dݛL0cdޓ$z;3 \dޛS d Pd d d d  d߲* $d߲*jd@W?4d@W?hdH dH dir":  d?* i d/~lu d|~A$d|~ASdd|~AFd|~A#d*d*'d*d* d#[e dq0s dㆹe *d\0hd)d?Ld}m ( d )MG d )MGd )MG Bd )MG 2d )MG d )MGd )MGt dK~x;&dQӸ` 3d\աsJ dϛG|[dڏO #dB~ $ dp sdMddyRdvo cdbP[$dbPd NP] dLKdL d&gdڰUq?d6*pdeqE d8ܨ| dmu| ^d=#d=# dϫjY d^lid^l-d^ldMF'dMF' d=% d=`.6 $ dSP dHe d? 9 d[e1y3 eZ4 6%eZ4 6 ,HeT~Dt eG3F? e0?%e(Pi#eU( e"oö e"oö ekeo3IL92eo3IL9 $"eo3IL9 ,eȶ?e &he &hk e +t e m ^e fNe fK(e f_e Y-}<sqe Y-}< De Y-}< ae 5n˜S,e JAԛ e JAԛ e,vj esTt erƂu aerƂuterƂu @erƂuberƂukeܤ<eZeqD&Ue9ӓe9ӓe9ӓ]e9ӓ e9ӓZ e,4mDe, ? e+Ze+ZLeMVe>M%e>7"tQe>7"tRKe@^eA4iheA4ih eA4ih ieAk|TeAk| eB'|seBJE !eCnQu+eCXbv!eDf{KE| eE&S7R eFEç$eFUyo eF _$ eGB e(K s'eGB e(KeGu; eGu; $eH`\vveH`\vseHT;/oVs eHQmeJg{ZwReKub.N eKW eLh;5 eN1I:8eN1I:8C eN1I:8$eOs \XeOs|6eOs , eP42a?eP42a peP42a (neP42as;eP42aj3eP42a $eP42a eP;eP;CeP;ePڝ eQ( seR ]FeR4 )eR4 eSTP- ,eT\BeT\"eT@DR eT,a~j eT;HvAeToW݌MeW=iReW=iR eW8NeXy*U eXF'SeXF' eY_kjo eZ HsweZ3) eZ@(Ӏ eZ85!VseZ85!Vs eZ85!Vs eZ e[gΞS e\T$e]y e]e|e`S]e`UBb ean)ebJ  ec  A i)ec  A9 ec  A ec9v^4 ec~dqw ee8ӱ*Qjee8ӱ*Q ief޼Ԗ i eg_I<? eg8e?eg qb egRegyeg5egehq u{keiRNjQei蜏5~ ej&|ejOjM - ejej6/!ej6/Uej4bejt ek$@${ vek$@${ el|BYSelՕeo ` eo6j` ,eo6j` ,eo6j`ep$/ eq>](6eq>](6eretO,etO, euFK"evMd@] Vew^JU $exކu meyd[4Aj e|J,ce|J,~e|J,;e|J)gPkIe|J)gP*e|J)gP (e}G e~1/E i e~1/E e~OOI me !je !j e-C e-C t e-C j ehڣ}ehڣehڣehڣvehڣlehڣ,e7peEZq Q eEZq r e p e6/? e7mHeGUx ae{rGNeie.euR e)bC (!eS #e?ȋ? e3t3!e6a +eneN: e%f] e]O eLeeI97Re ex_t ex_ e#A0e#A0 e~wBe/ukq e G\c?@e G\c?e G\c?ejU a ejnQeW*k - eLaeLaR e/L|ReKe[[3MKe[[3Mte e e$GYe=B?Z?e=B?Z se=B?Z Ge=B?Zeڟ(?ed~ 9 ef;X e@r( $ eU{e}8 e}8 ehY ehY| eL`^ $ ezNDe?QeB6}je~M $e8X{X ^ eiR^em u`a e)r Gei|%[e"-o^+Re$yme51 eSGN,s#ekZD e)% S eO]bel/R ea8. je1.[ eb3 se@jWe@ Se@7e@ ex>Jem.?sem.9em.em. eLtLyxeLtLyx eϹTX e~i~ MeF5)eeƦeMbBR eK'X e|/*p e8Lei~ei&eie~`3mex` ereɍ t erdS2s eȍph eȍphL eɣ嵁rt e =N%eˎA eˠh|X|+eˠh|Xj eIO s e͝Ȇ} eV|eV|e#SBe͂G ceb0MEw:eb0MEw eh(D <eh(D eM;cKe*e?R+e,# # eN S eѕbe e֦W8Qe$WeX$: e>rf;^e>rf;^ emj se&b3fecR#'ecR#ecR# ecR# e VDN 8e") &e")?e")se /e oe Xe j3e efHe2ʛ e:dΣ e_kNl[ e%C4e稯w|| eeiǨheR ieU e+Ot eCTedf  e!}P eϊ\ ieϊ\j e-B!e[D@iC e*Y0eϻMZ6)eϻMZ6eϻMZ6 e2L!e2LLe2L eYW(٪ et4σN e\3e` e1p es2C aes2C eʐ"> \ ehl7ehlk e~\ e#PeE$HSebf.ebfebft ej3ej3cew2 =egA egA egA?e<eRb(wU/e&yNeTґJ (eTґJ f ?fZ6t6fq`fq`fq`f - `'f40Tf40 ((fD4e fr!fMJD LfTc#Lz)fTc#Lz SfTc#Lz ,Kf=Vf f4fG_~0 f;B $;fm)fz'-6fz'-&f/f{ ,f{ a f}m#e,f Aqf jq f n N(f n N( f 𷔆1 f & K=f & Sf & $f Q/]O fԂwC % f6%{@ f]|Kc[fGt_fTw}9f]GC*f]G f]G fL%JS #fL%JS f]nf Bf9v$f9 7f9 gf9 Gf9 fcu fA6_ fDvDC fWyEf )$kf )#fkfjfi`kt fDܽ $%fRqn% f>@>f>@Lf>@ fco=t| fȬQ$ fcX j f aRf>(`kfvו f:mOQf -f@Fϕ $(f@Fϕ f~Y? fPa "fPa fPR&fPR f =ןnXf =ןn3f =ןn)f 芎SrR!f!Xf!f!!﹢|| f"> f# BCgv f#@j f$Ku=0f%f&ABFf(*;/f(*;/<f(*;/U.f(*;/&f(*;/]f(*;/f+G]!bf+R9Dt f+[j [f+rY f+w f+I#M? f+m7 f,y>Z% f,{p f,Vckf.XuFUf/e) %f/e)f0vPD f1zPuf2Dăe](f2M/7j!f4V$oFf4uf4~hG[K f5 L Df5 L (-f5 L %f5 L f5@ d*f5c&^uf5c&^u f5c&^uR f5 hf5 hf5Tk f6*@Bjf7m _k f7@v f8dmf90XJaf9>ܡCz$f9d"m f9d"m f:< \f:nmc_ f:nmc_- f:q1Kif;)t"f;Cա c$f;=4cN?f;z;6:]f;z;6+f;z;6 *f;z;6 f;z;6 (f;yy[f0- ff>0- ?f> JvL f>J`< f?=&Fwjf?G< JjQf?G< J f@.$Z $ fCsu 7fCM$[fDhUh fExMt*fE6׬fEw# g&fEw#fEw#fEw# fFtCfFtCfGe-v]%8RfGe-v]%8NfH3<9A fH`'M}fH`'M](fH`'MfJ`oC fLfM*A_/fN7!fO?ȆG fP`fU0`p 8 fU0`p 8 wfU0`p 8 fV#V@qH]fV#V@qH;fV#V@qHfV#V@qH fVp!=Is=fVV|fV.RfW|fWc#v`k fWض4NfXi]֜JHfXi]֜J fXi]֜JfZ"Xc "f[9~ f\õb(f\{NL f]!(f^ f_N2JUf_N2JD@f_N2JK+f_N2JRf_N2Jfa0"-Nfa0"-faEck%MR far>v fblM+iv fbW~IfbDtQ$fbDtfbDtfc<ƍ #fc<ƍ fc<ƍ fcifdBG fdBG fdy?6fdy\fd'I9 fd7Lfd7LfdCL2fdlW fe_Yfe_Yfe$L/fe$L/>fe$L/L2fe$L/ ffn.F?6ffQ9 fhZ+d fhgC  fi{[Cfl_WZ fmB,3nfmp[B ( fmp[B i fnJn fnJn fpr fq Rofq Rosfq~_Ϲ'8 frS}K frU#B fr?Aft;hd fud0SWAY fud0SWAj fud0SWA a fufufu fv9hD[fv9؞cfwORR6fwBCaLufwBCafwoZۮfRCfyofR fz~Y fzg< `fzg< 3f{Ԗg&f{7ܕNf{OwTy f{H@j f{H@ a f|SXTf|SX4f|. f|.f|.K f}UF$9f~2?>f~2?>"f~2?>] f~dS|fԈTf8R= NfBf  feB1f+]6y=Cf+]6y= f"WR 6f"WR?%f5C&;?sf5C&; fJ f| afا! \ fjX fn_3f8X= fgЭOjt fKf! SfCK:fCKf-jf- i fSQeNfSQefūN ,fūNYfūN s fLN$f{ GfI.s f@ f2V5 f2V5Pf3V5D fžfU5 f H f;@0 $fKPs?fKPsfO>FqfO>F]fL3j"f4uiU f:g--fqqUAfOu} f*nQp f))[ f&čifRcFSvaf@.2f@.2 fBFʟ fSf¡(~$ f¡(~$ fVU@kN f͙\[ f /ڔNf /ڔ $f /ڔf /ڔ f+˫dfnJ f1D f {T fRfY (f$mR?N f fdRn1GfdRn1EfdRn1@f,GaZf#-@ f#-@ -fc5Kf afhVx?*fd阨Bfd阨 fd阨 f +LfffS f3Ĭ>| ffX(]f'b, f6j f{;$OS@f{;$OR;f{;$OUfG< ifi0fZA ,fZAY ff9Jf:,äjNf#50f4 dfXdk_KfXdk_LfXdk_ fC衲 "fC衲v(f_{ af`5f`fd~1 ffζR#f!Rı f{+ !$f_fS%f fUNЋ[qf"ߘ00fAU fQõR fˇ 'f5Ҏ f@1  fbU][/f^ # fb f*nw,UCf*nw,UKf#hf#h/fђ[jRf!mez?f!mez Nf!mez 0fa>.fpYfq +f "ff (f fۑ֤vj fŤp&F f,R_ [ fy\nT fF~j f.@x?f.@xf98b'Kf"z ffCY ff#kgfvm f:~ = f*dn)Dyf*dn)$ fs7&  fgM0K f%-* f<|ފ f<|ފ | fƼFl |fǽGk?.fǽGk fǽGk a fEЎ?!f-L f]cK fqr< M fDd= fʊG fdI3>S fː̵R fLfVB2Kf|+Yf|+slf耴Y`f耴Df耴9fΖvj3fΖvj ^fΖvj fϾ,ɝ?fϾ,ɝsfϾ,ɝ gfϾ,ɝ fhgw RfжtRMf'pj9f[/Df[/Dj f[/D fvx7 gf5(4f5(%f4 fӺ mWf%[nt[fՏO-DfR =fw &f e*f;nUqfؖ8 fڛ3T fڛ3T fن^| ` fٛLjkfٛLEfٛL3f:v%?f*Y f&.f&.QfZuifެ5M M fT@ fAtfᤐsH \f_$֞& -fpfᯈ.f ? f ( f[~ f?Cl|f?Cl ftftfOƊ f楏 e f楏 f/@{  f윖Nif1s@f1sfe c foUpSf g f5 +R fj frh  f/,f Zfk$.Y f눰Z $Rf눰Zj%f눰Z ef\"]df\"f\"Wf\"ft \ffo$Cf&,fぼm# fMM^y fҋԡ [fm fgb ffDƵ ftj1[v?ftj1[v fI< (fI< (f| } j f>+;f܅ f_%&f vEf-yҏ^?fӳ| f[Lf[L f#>,f#>f̟NifTVfTVf%p֙ #f&T8 9 f#*)]G (f#*)]G $ fbN"" gd}9gd}# gJAgJA g1! gx۷{gx۷kSg I}r]$gM8 sg`@]v&gThgThgThRgThgTh g gB g'B6` $g>6` ,g>6`.g>wѐ ig>wѐtg>wѐjg g?gsK&5MgT\ͮj gQMьSg!:gݺY m-gZlNOg= R gz<%zvgk1gk ggkE a ggB)g [`] g C± t g $t4g"[Wü g$ :p: g$g:?g%eh٫dtg% {g&a:g-g'.g'_eQ: ! g(3g(Q [!3Rg* HSg*M1N g* ^%g+#5= g+ ga$g+״|[ g,Jg,[i SGg,[i [g,z.w Eg,k7g-_ g. 9zjg.;Ysg/ft}+g/ft}g1bBliD g3+^g)g4%x g4C9u Y(g4I.#w g4ig4iD,g5˦N`g5i:tg69lFYg6c,J g6NM/g7f: Rg7d-rg9Z \S8g9Z \g9Z \ g:Koz g:nb g;9?g; 3wvEg; 3wv g;;)8Ng;;)8Ng;;)8NQg;;)8NDg<<9s g=?nkD0g=BD1F #g=BD1F ag=BD1F $g>HP?g>;ڀ/g>;ڀ/g?J`> g?YH1j gBfx?0#gBv`\gB h gC_4gCj 7 gCj 7 gFK gH̡8 0gI gI  gIMTW?gJ>?kk gJqeEEgJɠJ $gK~L=gK~LgLmH&gOR81 gO"jWD gQ֩_gQpaq gRhػjQgRhػgRhػ !gSb`3 tgW^h%:jogXk'gZ'wgZdV g]#K g^j/q g^j/qj g^,!g_7s&g_7 s g`|1Xug`|1Xujeg`|1XusFg`|1Xu%ga,} gb? /$gbDw6͆gc1q Cgct geA𒓣ge@vMY3ge@vM?.ge@vMs gf TDW ggE߇ ggl1n gg̢ ,gg̢ gglPDk.gh:Y3gi rKgoZ}> goZ}> ( gpeat gqkj gqui> gqǜ #gt1Fm e gt-h gtt<:t)gtt<:kgx(!{ gxZ|^s gy?l^KXgyH?Sygz>PT[;gz>PT[ gz>PT[ (g{$w#J \g|8KdV g|?  %g|? Kg|?6 aWg|?6 aW gpu2igpu2 g@$@" m gYWP gHs( (FgHs( 2gE, igE, =gE, gE, g" Jj&_tg - g1 g;tuK'g;tuK'g;tuK'R g #g ggr$h g[@R%g[@g[@ g[@ a goIq g;ZxL gNP* ,goŻ # g| gƭ7 eg Uj?g X&g Xg X g X g X| g sgTKm, igTKm,sTgTKm, gTKm,jg&ODpvg@vgKds7gH`gH`#gbe/ (gbe/ gj5Ugѡh@ gR9 g$|y[ g苼fg苼f eg苼f i g苼f gt%i4 ,gu51,LgP6̘;g PQQ g1yĪ ` gMP gYW} i9g7 j+g7 g gfeK9gE@3t1g19r: g-fg-,g"x g= g U g{ٖ ig{ٖg=F lgsyg*+9htLg*+9hj.g*+9hg*+9h ig*+9hs g`״tg`״ (g} {g}  g} LHg} S)g} g'`&-Yg'`&- c g;cl gU>a eg p cפ g0jg74 g p ghF-gw ,g6N7gY]<gYgQZ1#gQZ10g,}L g 9 i gR!!8gcB g ,g瓜HA \gNgSg%m[8gJ- [gJ- #g Y \Tg YgUoQR gUoQ gM\ ,gM\ , gz!gz!]gz!gyMp' #gyMp' - g@zw gLU:gp] gm%b1 gv9 gHgJl  glXcgXntgXn ggeC#%gȵ g g g:ggČaC> g:DG6Yg:DG6s gBYB (g(+ gMz* gXgI%"gfPe[ ^ gsar -gB, {?gǞ gY>w (gh_+3R \gC gԶA g/~ӫ"g/~ӫg/~ӫ g#?g# eg$1L,g$1%g$1Kg_V[ $ gJ i:gJj gJ g)Pk1Rg¾O/˪g&ގ gLoen 6gLoen v5g7\ޕgK?gK1gĀ gǺ#gVjOpC+g* $gʄ43 gˡyhM g\'4h?g\'4h? g͆WJ(Dg͆WJ(K gͬp g;n gM4t g A+fDg A+f_:g A+f g$hg9{ՏgBMX( gBHUjgBHUj gBHUj ,gO)M~9 gо9,[#g'=g'= g Qh g53M7g53MLg53M_g53Ma ghVdR!ghVdghVd]ghVd gѶM;*gѶM;dgq#\gq#\ g|R$  g*,l'g5 (2 "g5 (2g5 (2 g5 (2D gՔP j g՘w[I \g՘w[I?-gU K$glxSCgd?nsg͋P?gۄj g6_`! "g6_`!j gCN gsЪgsЪb-g)σք g WJ g߬gQfgQU g[SR s g "A g "At gɥ?go /Rg#m dZg#m ddGg#m d@g#m dSgRJ ?vgRJ ;gRJ gRJ  gc=Cu6gc=Cugc=Cu gc=CuZ gBwˋ g\OHtgHLCg厒(Nxg厒(N c gPaf1.gPaf1. gB^=sgB^=?g~It*g` \gcXB2gw7[g!lX gۙS gm $ gm j g"lg7oRI?Lg=7S6gu g@ZUWLg@ZUWrg@ZUWg@ZUWZg@ZUWS g@ZUWg@ZUWg@ZUWg@ZUWU gjj!gj g;'`C ~gJpmSS gJpmS ge^OgyJpNRg5{L g.{ \0g.{g.{s g gw%d g"WИs gbH\ g4B[g@& g6Pjg6P -g6P ,g6P i'g6P (g6P a g6P g6P gY5 gDDKgtմ J' , g:{< gZ!g3u~x #{g:[c tg?fg aڪ? gTY <hu <hu hus h?n\ hY h h] 'h0Fs hd>KhciM h^>O h Z hl%K1hfm hfm?hfm h@حKh@حfh" \h g{. h \TjPh \T $h \T h \T h 쓨h  h ؃`iA U h a#Kh a#R h y;4h y;hJ^hzHŝQhzHŝ hjRl>hKah;\{ hQ shsuChB h:"# a hΗg PhΗg 'hu|^t hh ,+j h ,+ hA{ a hby]hK$hK h0h]$ h9e"hӇX6e EhӇX6eh h-< ; ih-< ; ( hdj{(R%hOh,ffjh,ff?h_Ao*)h_Ao* h(b;hIx?uhH8 hH8  hޖQ>jhm2, hrG2hrG2 ahrG2j5hrG2YhhRU/h N"9<= h!`[ = h!kz6H% h" &.Nih" h#lV*h$(z=qAh$(z=qh$(z=q h$(z=q ah&4lѠ` e h)Mh)MY h)x #h){\h*? h+\Ve] ch+y?N h,nx( h-.g m;h-.gh-vh-v ( h.&}sR h0@39ER a h0gek6h0r h18E(4h18E()h18E(Uh1o5h1oh1¶"S!h1¶"h2~Nh3&ild )8h3֖Nh3֖R<h54;Ŗ h5ɪWh6+;v{ sh6m[mHk'h6m[mHh7FGi<]h8ȯd h:)$h;ӱ h=VA h=CGUh=Uh>n]> ih>~K h?9+h?'9h?I h?KSW%h?na & h@":,h@":hA.&?hAl, hB"fI hB`e"B hhowW hl]=FA hlvD[hmɜǷ,vhn0t4shoY hoY?hoxXx , hoS.Q% ho]-hq76 XhryX;V ahr[W #hs%8 hsPb69hsPb69 ht, 7lht, 7cht, 7ht, 7=ht, 7 htׂjhuU $ hv;ue.3bhw4<j hw4< hwx ?/hz]ϊhz['hz[h{3Խ *h{3Խ , h{9m[Eh{\!h{\! h|(-*h|Vjh|Vj] h~i- h~~8hxw h+CRh+CN h'ɘv h}: $h}: , hO\L ,h0cF:h0cF:Z haRܓN^haRܓh; av#h; ahshs'hsfhs!hv hJqfRIh?<h h>[hȱe?hBn hˊ0- hJ<aZ9hJ<a$$hJ<a$hJ<aLhJ<ah.ibd hcIQ h>.R3hu*ly Hhn"% hN8Jh哮 hq[ h9 hNhNjhg-C]hg-CYBhg-Cj hg-C a hLؑh5bT h4AvhZ hZ h0 ,$h0 hͶ dthͶ d hͶ dk h)VK h<̚B<h͂kh͂k]h͂k hS<h%0'/s h4ZhiJR ChiL{ h=}Sh=}h=}h=}h=} h!am h!am 2 hQVhQVhQV hi](S- 6hi](S-jhy"fL hkdSCYhKMNRh!n9h!nh!n hivD h\=h6 hs.@hrE$hZ h-b5hz n *h YgN hVGv^ hƃvhƃKJhƃht165jhH hdXh~Rt4hIP8o hIP8o , hgŌlYhgŌl hgŌl h\ 2h W?h W h W i8h" h" h,Zh8lK$h8lQh !S hu1Яhp-m,hp-m hp-m ( hp-m - hkh6!L hT:uhe , hx hjhjhjK h2QlhF1PQfhyO 8 * hAUU , hE8GhE8|*hE8hE8hE8 hH h0gY!h~ hf., $h~fV}$? hN5h6j h9\hL'W$h.q h1BhT.& haR#haRhaRhaRKohaRDhaRU$haRhaRRhaRhaRQ hX h@Mf h#sŸS h4ǓK h4Ǔ h4~ ,hª/ #5hª/  h}){hiauS[ h%jM hńHV hqhͭ htu(9 hy}Shy}Lhy}hȆAh0ְ9V6h{j ,h{j $hH? h|ch h|c h4@?>hr]9hr]Lh~ڴ{h~ڴ{t+h~ڴ{ hx4U %hx4Ukh55z6 h55z6 hENKIHhj}PihML hT֓?;hT֓jh@ -Oh@ -R%h@ -h^2R h{Y hasQha a#ha hahaha ,h'[ hOW/] hRmzY hRmz hRө( , h[? h<b#h(hͳD.+hr6 h_׳s shKIhKIf hn$et !he cihêI'' 3hcRU<hcRU< hB~hBRh:]j hS=QhS= hhIL" hAҤ$ho.i?hdjh*n hVhݯdzu h'%h'heřheřfh^Yk h1)8Ch1)8h1)8h1)8 hOK i;hOK \ i1{ i' i_ Zi_i\.1i\.1i.|i. i!W{j"iF3!iF3i'jЮq ai %*i %jieW ,i w%Yji w%YBi 1R i c i کAi کAi rp;i rp; i xY\iU'-ieL3K iR|viR| ibsP ilѕ:0$iM>ܓV iZIiZIilct i)SV , i#> i ik ie6 ivWԲudEiɰ igi& i&t(i& m%iRi(I4(K i(I4(L iIJByw *~if#u $ idO`idO#"idO$idOiѿ , i<iښ aaiښ aai6ZQt*i6ZQj i )nFe-Bi at[i!4Ң4i!lz i" o , i"UY) di"UY)b i"j;Li%".m?3i%a'?i&ʗz i&4 c i'xnxi(?59 i(3# ,i*'<% i*'<% i*Gy~w 1i*Gy~w ( i*X8$W i+4cO?ji+4cO &i+4cO i,]D2f i,~V0? i-EM i.N= i.]bi.]bYi0 i0S6mi1$\JL/i2Ž6i2h6&c # i5洗?i6Tjiqi7wesR4i7wesi9OG<R!i:: j i:0 i;'1i<43 i=(!(eSIi=(!(eSLi=(!(eSK i={7f i=u` i>\q i>ٰ i>/$i? i?:/i?:Di?|Ri?KfX2i@GOBCNi@c iA-Uh iAD+ޕKiAD+ޕ[iAD+ޕ iALe`4#*iBsoiBso iCj1[?$iCG|k iDAj iEMrx?iEĤ>mGiE쯫;K(iE쯫;iF\fiF\fiF\fiF\f: iF>p(] iHhg]t iHx5DL iI'l iI'l ( iJp v iJݎmiJݎm iK-  iLw+< \iR>+<: iTɷFiTɷ iUy'x i iWYIod t iXzn9 \iYkiYk iYk{iYkjiY}a#iY}a$iYrd iZSh iZ\_i\f1 i^X[X3 i^+XLi^+XSi^Ũ, # i_LgL $ i_=ƭ i_F Ri`LŃ i`? i`Нl* e ibHib!.)Xs ic~vic~v ,icZS.icZido?id!3[ ifwB*2 ig/oig؛ iitQiRijZtijZkikX6ikj> ikuv*ikqsilzh4ilzh4 kim%in*{ Winy io 5isk A isajÆ?it}z iuq2 iv-1 iv;;<ivQwW"ivQwWiw ppP iwQiy?¾Sjiy?¾S iywdFnizyz izVL i{/0i|e)L i|e)L ( i}M i}k i}l~##i} cl i~{NHiO ixC ixC QixC?+i2" i 0J- mi><>2iG-.iG-%iIR" iB.i86u ,i/%9?.it76sj i# pLi5|eMLNi>S.  i`ZmGi`Zm (i|AhgNiw yil,AK i EAi7NS - iiȭ.ފ \img`0img`(img` m&iffm (i&i,ޞi,ޞ iõRmei4OviHC ,i#W!i̲i̲i̲ i,(U) id $ id , i'u i& #;ikt9b:4i< #i[8?i i  iȑiIX c i=Ձi=Ձi;MR i;M[ iӯ?*iӯ a%iӯ iP\:x +7iCU%iDZwhi6>Ni6>Q$i6>Ri먔G* i먔G* iD ,riD;i%x6i%xai%xoi%x]1i%xi:8^`h6iݵt> ivi:AS/ivi:AL(i:+6{Bi4cۘjRiiՆ*`0i/;~ Qi/;~ Q i/;~ Q ,i֛z]p i(3 #iUtiUt$ iט  iV ic֍ iĤ(! ih 33$iW~_yil2pڨ i3I2j i7%'i[viAQUiNN? i㥃@iH= i iiK„ +isN*(*isN*(Ri?.I:DaiC='ioC R i2t׋ &i2t׋ i2t׋ n i됞. i됞. i( )iw7eix?iF.i4@K"i4@iۯiG EiۯiGiۯiGv iF,j i&I"di#qz iJ!i\ZK?i. b iJ ciR d*iZd )iZd j i>bv.ieO2i &i@e) ji0wi0wih(@0 #-i Ρ i2/&iоO:iоO:ibNEibNEi][?i \iAE} i[JU5i+]i+] i^ $&z i6 #iHc2?eiHc2 ipiHc2 #iHc2 ziHc2 BiHc2 =iHc2j iHc2 \ icF? j Hy j7kj(jt/J jiGj& p# :jmx%LRjmx%-jmx% jWw0@joY jF6!jPiRj]E=j]E=j /X*d j/5>:Z2j/5>:&j/5>:ja>ja>jlj: j\LU j lГ j #0j =x+Z j =x+X j ,%PK j Bx!j y[6vj ͤc s jS3@jS38j \{v?j \{ jn C' jpsYs j'eY$ ,j'eY$ aj'eY$sj'eY$ j'eY$ $ j'eY$ j43"3bj>j)ԑ2j)ԑ2jOw< cj~P`!j0ã !j31Dj5,>j5,>j$j5,> ij5,> j5,>bj6[~ j7}Upo j7 bg59j7 bg5j7 bg5 ( j7{.a5j8w[o&j9_y|'0Yj:ϓgp Aj:ϓgp j;]l4 j;x? mj<ĨcpCj<ĨcpC? j=qS j=bv j=CRj=О~ 4a9j=О~ 4aj>-A j>R1Rwj>R1:j?YjN[S@vjN[S@,jP0#s jQvb jQ5G=#jR~1QjR~1djR~1jRݺ ajStz] \jS=G|m $jSr4-jS'K jSwujjTݹƨ?*jTݹƨsjTݹƨ jT%%ajT5V8-:jTnW#NjTcڔ6jU# e%jU (jU jU sjX~ӗtjYFjZ"DKjZ"3jZ" jZGlL j[$+*'j[bgN j[ӱ`!j[ӱ` j\י6" . j]JlYj]gfq?j] tTLj^  j`7Yfja%k: ?ja%k: ,|ja%k: $ja%k: `ja%k: ja%k: ja%k: ja%k: i-ja%k:jja ja2H\ jbT]ujbT]uL jb]n)jb]n) jdi2 #jdi2 je|AQ0jft{ jft{jfÙOjg." jh@jvӏ7 jha.k_Ijhcp] jhv?jh }"jjk2 ijkLjk^jl=CMjm@o|˨jmS*{ֲ jqrDjrzjrp%jrp%Q jsY ,jsY jsK?hjs3~Ijt>O K jtȒVAK ju, juJ4]_RjvV9ejvVjvV jvJ\S (jvJ\SjvJ\St jw>A\Njw>A\jwG<jwG<RvjwG<CjwG< jwr8"R jx- # jx'/o>nR jxX-8jx|酞Gt jx|酞G: jy%* # jyaW jyy #jz?7*RjzH Ij{z܋S j|pEAwj|}#Zj}M(X j}R j}Q+j~"q j~$jU՛;|j,s ? |j,s ? jPW jBdsOjBd ,3j?߅ ,j?߅6j?~q ju7 j|YT5 jIoB \ jiXxj j?Wtj?=U j6Ή4{vj Fjj]  jf s j=p9j j=p9 jPcpL jhsQjhsjhsSejhsJjhsjhsjhsjhsL jKE .j܅3Djܢgy jTXV)j"jj"j jM2]jM2*j26lkj26lt2j26ljJ<#ojJ<jJ<jJ<BjW{Ae jW{Ae jZ j:Y jbRj*!`\ /j*!`\v jXm j)jم j/:[H j\<YQj hėP1jT vj†y3 jFNamjY0jY0jX j^( j0R,j0R, j|ˠFjj+  j+  j@" -j/3d j |hjE@kjE@tjE@ j5L| jxj%wي /j%wي j%wي?=jN#a(?jxC'-) jrs jjj4 ׋a ` jphrD#tjphrD# jq2, j4jaW3, aj3XjoS[ 3 j I}S#jV kJjV kJj߮>vjgMj1Q]Cj/p6 0j/p6,j={ jajuRe` jBR} j'z ji[,jAba2?jD9jSjjSj jSj jSj j̆jkj0oQÉ ,ję+b a j 5nj jY+ j-ej1v j|Cj|Cj|Cj|Cj|Cj|CR=j|Cj|Cj|Cj|C jl][2jl] jo(& jΌ3 j08E3C| jCgju\b !jwikLjM}Njš) V# sj?5Ygj?5 ajnj+ܶ/;?&j>ܶ/; (jܤj=j9AY}Nju/` jPnjRib jƲh­d5j5j/Xzjȍ jȖ$sD j=!j=!tj8? j `n .j `n ijX, cLjX, \j2}| jyً "j! jXPYjϚ jϚ  c j)cW0 fj)cW0 #jab%j/d jЪvĐbR jЮzJ*#jӰ iQg-j ijVuӻ(ajl,)Q&jl,)jl,)R jĥ`~#jgͳ jnqC jjj vΛ jڏ o ,jڏ o jڏ o jVK]K!j"6< j-YF$ j-YF$j-YF$ $Fj-YF$ j-YF$ gj-YF$ ej-YF$ ,"j-YF$ j-YF$ j-YF$j j.֚  jr?q  jޣ>E j4"jiM7;jiM7` jcH'CajcH'j[-Jjc+]j2˪@ a j[j[t j[  j4Abj}w , jZUjd jCƢ jWH6O jJwR $jcljl$* j ATjgoEj2? j콖*sj콖*?j콖* &j콖* \ jF˯ j" N ;j" N $!j" N j8(?gj8(?&j8(?jlw ( jm {jm Zj+8]t jL?+/ jk!ǻajxb $&j,j, j2* jg )j=d/j=dLj^oNj)7m0j)7m0 j)7m0 , j@Js5jE7Nj.j ޱxj ޱ$j ޱ jp jp j&ԑYRkVOQJQJ kgEQk_ He˂ ak_?9k_?9Dkc;k$k&/P kjLVZkjLVa8kjLVLkjLV]k5:k讞 k讞bk讞jk讞 aSk讞tKk讞kk2= k ל !k u\nk Ε0EN_k m4 c k ʮU8X kFEjkq| c$kF+-O"kF+-OKkF+-OkZukkyYkQ&kQ& \k)菝%kP(ZkB( kXV99 kmE>`7RkÂᶕTtkÂᶕT 9k;SeP)k;SePSkH+=%kYˈ#Ldk7>kk7>bk$ , k< k`4k >.k >k >Qk,8TRk,4DF*Nk ϗS)k ϗSkj(P5vk s{S!k s{Lk!ɠ3IXX#k"g2JiKk" a k$!r k$BrFS k$BrF k%#b_t-k%7vk%7j k&DOk&DODk&Ksk'X ,k'ZMk(+~*k(u#=[k)85r~k):s k)rk)r k)Fxk)Fk)F k+47X?Gk+47X ( k+pk+n9k+;l^}-Zak,4|1R3k-Wik/mRk0u#S>Ixk0u#S>Ixk0u#S>IxR9k0u#S>Ixk0u#S>Ix k0u#S>Ix k0  k1< k1< *k1΋:q| k3z+Ik3z+I k3bI)&k3bI)&k3bI)&s k3bI)&k3bI)& (Bk3bI)&<k3bI)&k3bI)& k3bI)&h k56m (k6yfk6yfk7h >k7޶<Nk:+k:`$?k:`$ k:>Fp?k;,I?k; ksZpW) ks|FC ,ks|FC aks|FC uks|FC $Mks|FC ks|FCks|FC i kt.Vj kujX͇ ku3R kvr9 kw[vkw[vkwƿ kw$gcz?<kxqt<tGkxqt< kxqt< (kxҲ/ky[^j8gNkzq3e)k{( k{C#ߦk{ԙ#gk{ԙ#gk|LOUsk|LOU[k|LOUk|X20?k|X20 k}ؿ(k}+߾jk~A$k~OsY|uk~\J2ˑ k~q*~!oL!k~D "knC k^w kTk$< k(kަQY k U k kgLk!k! kskZ -r kZ -rsk*I-k *k Rk k ]Ck >k ;k Z%k !k ka\? kO k@QkML ) kvGskfȨ kDsg[ kS03 k] ak] gk  kѲkSԄ k_AhRk}r kjlvkjl]7kjl,kjlkjlk b1 k b1 k˫b mkx$skx$hk\D \ k.Zk8t$t k| kHN,kHdk~.kK ks mks khkie+ k0Zek{wmi1k@ckMr@kǒ; k T k T Bk T -k T , k T ika ej:ka e ka e?k$ Uvkd $ k:k:8Hk>8 iDk>8 k>8 jk>8 t.k>8 -k>8  kݿ kg]GwqfYk3) c k5& #"kYf@ kKkKk`Okg &k(jYpk2*,z kѢo# k$3k|x k3k`Dk$ kKRk: ke>$kjDkRnkR ekR kR k(?k4/ (@k4/j'kV?kSJr kTst?ktr , kw mk;*N :kr,Ҹ kWZ,j k/Ah} -wk/Ah}k~ kfXk(k[eD܉vkҖtK8kҖtK k) xNkwU ktǢ k4H? kG | \kN s'kqa,oCkĮ'Pkgkg k<GTUakzK kA`y{ kR_\kLkĚ (? k3xdk3xK ku }oWj k% w\kY36N]kĠ=2T kvdzk4LvL ka2r"kA= 3 kʦߝz]b k{s$k{skJ䴋kJ䴋kJ䴋 k`Nٺn ks03CkKfGnRkρUf ~ kυay .k9W % kTnޯkq4dkEg kgk kr:3ktd:"k, H#?4kg nZkw9 \kC #kES, k )syjk>@kk>@k k{K]?k{K] ikjY?%k6q|k>Î) $ >k>Î) $ 1k>Î) $skS~?kekv, aZkv,tkߡi`]Ckߡi`kGk` $kkGk` DkGk`s%k:N i kg 0 $ kQf=}j k `; k `; 2kL|訳 klak6h9Q] kp kİ? k kgpV gkgpV kS Sk[k듦LS k `@^sck `@^t k"E ki?K # k>GO kU&"kU&"jkU&" +kU&"hkhٺJdqkhٺJkFu5 kpEJUkڒrjk? kxD#? kx< $8kAYsk6R kO5 a+kO5s(kO5jkO5tk1e k k8OZ`kXs!*k|}e * k">I SkQp- ,"k Yk=Dk'2Fok'2Fojk'2FobCk'2Fo k'2Fo kQR詗k6jwkVO6SkVO6Sk%-kCMokNdD]kNdKkSkS ko:e뼢 c kw"kwPkà nl;SOBD , l;SOBD l< (}?)l< (}? l= l=G~m al=G~mj l=m' a Hl=70l?#+l?kre7| l?#El?#El@0}G8Zl@7ՏKUl@7Տl@7ՏK lA%X lA0% lB`$k{R>lB`$k{ lB`$k{ lB'< m lD;u; ,lD;u; lD;u; lEpB lEpB * lE*P lE#|$lE<KlF8{lF)-lF)ElF lG20lG20lGYZlGYZlH lH*Ȍ $lH9bFp lH}DV ilI7- TlI lI lKjRlLO, , lNDk+ lN_쒩 $hlN_쒩 VlN_쒩 +lN_쒩 ,lN_쒩 lNJ%"lNJ% lO [IOO?lP0186 lQ@>B) AlQUflQߕK lQߕ_ lRK lTC([V lTS[{1lTS[{1*lU(lU(lWG>J lX[дS , lYA_- \lYA_-? lY~ p[lY}w e l[ 0Zl[{Dy9l\Ol]^, l`9e!laK7NO-lai2 lai2? la KlbYE4As lcvGd lc*ejAlc*e? ldi"?ldt 5ldt ldll-`Sl, $l7 ,"l $pG? l3 l $h lU&O|?lU&O|j lALl&lfvl +x- ,lG@i 2 l;l9!lp5?lEDpO?lEDpO l& lgHx ll_:}j!l) 0lKNl <=l <= lՐ~o] l6ƲU lY j \l2g랩U?Ol2g랩U (l/? l-Q2l-Q lT"* l8l lt\ l3z l?lASXMlASX (lASXt laqlaqU leKleKl!3j l¥[aJol0Kl׾V1 lNkTr3llNkTr3 SlNkTr3s;lij"ly,GǚdlŗH5] lŞqwZlP l%blzsY&lޙ&lS@(ElOQ l˲yUlq xLlq x-lq xSl"!?vl"! +l"!9cl"! f lTA㝆 lͭ[3# ,l&c"l&cDl"7ǭ4l+TDl8ƀhl8ƀ ^l],iC(l],ilըä* elwttE??lwttE l=;'l0tߜ , lڣ *lڸ[ z5 \lۘݪ-Q l۱. # lOZlOZ lpH(rGh!lM;D& lݗBlޤi:,3ls?bl#Ul^$R {l^$R ,3l^$R  l^$R  lpK l㽭H&s*l㽭H&lL7[ lB<Y lB<Y lο lO#oll@? lLelslLellLel lLel `lLelYElLel n-lLeltlLel m l׹%UqD*l׹%Uq'l׹%Uql׹%Uql# l!RlP V~ l`bMl/"&l/L l؜ ,l؜sl؜ l6M lp n l,@t ( lfJ*l"Vl>Vw8l>Vw8 el>Vw8 ld=r|l4)1l8;s l(", i lԉ lYXLajluۨX luۨX lpf{v lE{clE{cl;ʁ l1xr'Y6l4Krl4Kr:l4KrS%l4Krjl4KrLl4KrlUQ'LlTZl@B7%l@B7%Rl@B7%0l(d? l(d!l(d (m!p]cn #m!p]cnYmǎNm): m>5m>j.m}oF. v m{"WX1 m EVM8m36 m;7_S m{C'mq+#mq+ mq+?mq+ a mO%mO%t mO% m90`W m +m0+AAm1?i m1-% m1-% m1-%? m129RIm24  m2.jĽ,[m3'm3Rm4H^M%%m4?j6m4? i"m4? m6:>O? m7R'Ydv(m7R'Ydm81<\_dm8KɢXK /m9Pq m9|@C!m9sm9sDm:MV{V# m;t],%(m;"Iv a m=yKm= ^&O m= ^&O m=ݏ>= cm>2rRa5$m>2rRa5m>bR sm?*m.m?m*f 9m?m*f /m?m*f . m@ Txm@|.jm@|. $mBN mBmC$Ju=( mC?$ / mDGjmE~imEMy]| mG` D;mG`  mGMCmH-ohmHAjmIO mJW mxt m~ud / m~ud  m{m> m~$-m~$m~3 Xmrk"{ mIQ. i mIQ. mVu]mGW/m^ m^ mwcNm*q m[l?cm; "m; m|'j m(MV: m2Bw e[me !me m s mv+bmv+=mv+1mv+.mv+ m6 CMZm k%m fm V mڈ.6 = mZRvmuYA m3 m3 Km-֐ mL_G maSF?m%|Iamڭj m$ mH(RsmH(Rm 0o m 0o|m,ڎ0 m%E ! mI/tmI/m>NU m2A (Wm2A m ӷy $m ӷy $m1 m1?mӊ# @m#m7 mzka mKMG! =m(Dޚvm(Dޚ m? mM1mMm!ϜFmYfLm1^7ks m%W3 DmpRm 9m^Mxm'K<mڏBd# c,mj='mj='Rmj='&mj='mj='mi# mwn0 $Wmwn0 mlpmO. (m9 a m42mEX( mVH3X^ e/mVH3X^?-mhD;S m2?(mxz= mŔQ @mvSyX im,|{m7a`y- mgq m9 _m9 mi t& mҼ@ j@mҼ@ ? m8$km8$Cm3+/&m8Kms~^1]myIՑ8mU? D) m|m| ^ m| ^ mЗl9 mcau$0mcau$ , mn2 m_eVt.m_eVtm_eVtR mzu mրo]m{b)+m{b)m{b) mvdj m/f_m` ,'mUomUemU!m ,?#m ,?mS<-f m[C{ 1mNWmW mW mW BmW RmW YmW #mW Q mW mW LmW Y m0m0Lm0Smf miWs!miW mᐅ-ަ  mcD֩t mj-H m椒R , m%~} 3m%~}j#mLܿ mM #pmM c&m60y-m0jPaVm0jP?m"@wb m耘mmv2 m?bzR mfLv#vm뼑%DDmMp#@8 mY=s m9M~mPW#?ma> bSma> bmuy^'0 Smaem>rt??m$P#E m'i  mGmG mծ_jmծ_s mծ_ m: mw n+mw nmw nKmw nmw n]m*t$mNC mLPD:m~,|myol= \myol= m={ m={ m}UZ m#* (Zm#*tm#* m#* m m%qv -m%qvjm-& =m-& ,m-& m;HFk nQp"1 ncx ,nܡRDnܡR nr4|n4}* nm{ (Jnm{nHkhC n5{${ n? \n?]n? $n??n n -acsn -ac n UK3n WVA1 n `/G& n `/G&? n ojn;" n;"? n;"s nu*ˣ nVw )nVw #nVw  n< %[n< . n#ڒ? n_Dh7_n_Dh7_n톸@n8͈ (n8͈ ,n~)ej3n~)e n~)es nwLnwNnKS\V7nKS\V n~S4 n>d`+ n7n7 e nY|OnY|n憞 n|C] nijUnij] nij n$tUtn$tU9n @#n @n @ n68k$6n68k$|.n68k$ ()n68k$ in68k$ nzM>>nzM>n p#jn p# 2n p#"n \b9?hn \b9 @n \b9n! R* n!`9|" n!xf[ NVn">,n"nHz n"U`n"&f] n"&f]?n$Sɮb n$Sɮb n&M_uNQn&M_uY(n&[çj ,*n&[çj n'x ,Qn'xsn';½0 n'W n(7WZ$n(؍x;L n)D~8 n)*rY n*w<)v-n+G$N (n,@H@ n,@H@hn,@H@ c n,>tYZn,>t Sn,WFn,|Ջ{?n,|Ջ{Rn,|Ջ{ n-uLLMn-uLLn.~g}o&n.ҎnF n/{Gqn/{Gq n1]dn2}9Gn2}9 n2J;ˡ +n2Uvn n3n{= n3n{= n3pщD\ n3)/D n6 \5(?n7 XCX?n7Ķ $ n9nJAeHn94n94 n9RRndn9RRnn9RRnQn9RRnn9RRnn9RRnD n:?-Zn:?-Xn::wk n:nər sBn:\& ,~n< n>v'!F,n>v'!F Xn@A;? n@{ nBH> nB)̏vJ)nB)̏vi nCu![nCu![DcnCu![nCu![nCu![JnCu![nCu![ nCu![ nEޑ&nF",??dnG(tY nGٌeH nH"X 4nLto XE<nLto XEo nLto XE nLDǣnLDǣv nMAKM,\k nMƒyb{ cnNG4j3nNj6 nNj6jnNE"lRJnNE"l8nNE"lnP%SYH j nQc3\_ nR jxw a,nR jxwbnR jxw nR T nR6>cnRF"nSfLܢR"nS $6 nV{9nX`nXd8t7 ,$nYlWX+ nYlWX+ nYy'X nZIRnZ~M nZF anZFtEnZF4nZFnZFn[7CUn[7CU n[=V? n\zn\ITV  n]qhR n]=,#n]=,Q n^Mn^V:` n`$ %n`zkI nam׹ncsWgncsWgncsWgncX$ ndPzz jne6﹐,ne(1 TneZT$ngYt5j ni#)I ^FnkY* S}nnQc> n?nq[rPtnq'Z7nq'Z7 nr,DZ8nsl{ W jnt46xZ ntCIh$zt ntPuzr\d?nu9 nu2Ym 2nvz7nwd1Ms5nwd1MjnwGYSnwGYL nwa"nxF]]"nxF]]nytU  iny2zb=n{5o2n{5o[#n{5on{TSVINn|S<^? n|wD  n|:n|:n|:]n|:Qn}P\NĊ?n}P\NĊ \n}wn= n?} , nRH#nRH# nc-k)D1nwޑn ndR n4J5q ( n|^Ii nbnSry nJ!nJ!nPlUE nDXj n9`t \ %n9`tbn9`t Nn9`tt#ng R n"XU Qn"XU n.yu?1nZcy nȎ#& n - nUC< #n毭h n̔)o $ n ov|n`AR nn Zn&&n; nt}/x s-nt}/x ~ nM>n- =-t nHIÓ?? n)G nn|VU4np; nVŋ}nW¯C[n^/I in^/Ijn^/In/!2 n/!2 (3n/!2 n/!2 n%U{n/MSnz:+n<?n< n3Rnt*W nt*W ndVm t nxp$ nxp nE˟;vnJjR[#nm&=, n^6n@iU  nvg7hb3nvg7htnF1 n4?q ntJntJ (n)%[Nlnv4 n9R nRgnL ^ =nL ^nL ^nL ^znL ^)nL ^]nL ^nJ3nHn'o,nƔ2 n<qJn<qb n%L ,n%=U nz n{: nc^uL n#+"hn#+" (n#+" ,n#+" gvn#+" \Dn#+"n#+" n(jb8 ng]V ,5nÍnĴ$ ngΞh anň'_nUcunUc 4nUc3nUct&n{YiGn{Yi#Ln{YinȎ !nȎ nɹPnq n n e? nk"1nk"n{+Qh2nʘ ? nd2Cnd2C nd2 n"1n ad nͽ@9?7nc䡳 (nc䡳snQ? n9<?nsx)s nΎR_nΎR_n  nV"#n9?X8]7 , nс# nѸ nq\ \n҄@'oR nu nӷY| nӷY| nԠTA+'n2wX@nڣ*nJ{ -nJ{ h nʧF-K0nʧF-"n;R ns-Dnnwۂ nI "LR$<nI "LR3nI "LR)nI "LRj$n@xn8vu \nXië``nXië`nXië`L nw+uSnڋGA %n /n /Rnܖv$x(n;KsnZ%" ,n]^8nب cjn;YGn )nD1:nh"n rҎg Pn) n/n/&n/ nI RR n1:nE};nE}; n}o Snr2fn <nPᬌ cnlt nK n_i[ neR'netn#U$n#U n#U a n["Ӑ eCnfXi1+nfXi1 nfXi1"nfXi1 m nxEt nX_/r7nGx nCvn gr2 6n gr2 nU}= nU}=j n F@ n_; i n풊j1 nҽBWd nt喏n%H0 nb2nud 3 n⽱k(nCubnCutnCun#^  n*䟸E n^j n^~v n  nDQ n7 nrF> nAT sns'o!`> o&S]] oW@N+[R'oh齖ol"'oj%LOs o Ib0 o j0o Op!o r.o 燓o Al o bc?o Zo R7oVEoVE o&*0޾Uo^v od,R Wod,Sod,U oƃ.o=RA eo< om14 v2om14D*o<|HD o$o oZ/ o jIRotLU?@otLU?j otLU? oո okK|or= f o'o{:,o'o{ o'o{ o[G# oZHBLoe; $o#1V  oo+4oo+4'oo+4 oSa o-}KowRow0o]BOko^+XRo?KRo` x o Jb o! Mv?o! :o!}p o"t o"O\l )o"O\l \o#[@Dto#[@Dto#\'] o$$ed| Ho$0!\No$q:z o$5U o$̗Ԭ]Ro%(!9Ro%6t5p? o%| o%џdo&4aƜ o&d5,d o&9So'#` &o'#` & ,o'Ý6Kxo'Ý6o'Ý6Qo'Ý6o)("Qz !o)׀ o*q o*NT=]!o,^#Po,^#PL o,Cs5'o-yo/3߀J (5o/3߀J o/3߀J o/3߀J? o0kX7 <o1,զR, ,o1,զR,>o1Q6n o1v@o1v;o1v!o2vo4=(s.@o>s.@o>s.@o>zQo@K*oA3 oBE>0oBE>0oDƿlݠ9yoE_( # oFEd +oFEd oFtՏ4oFUψ0oFϮM!oGSH&'oHk4mM;oHk4mM oIeRoIeRLoIv^SoK22 oLP"KoLP"QoLP"oL> $ oMK,bnoMئE- uoMئE- (oN Z oNr5 &oNr5oNr5oO)̝. oOup \*oOup?oPmjoPmoPȩI,oPȩIoP/oR~fSoR~f oRQN oT0u PoU0$mc[ oU, Q oUxQ[)o_cMo`#X o`gs o`qFWoa0;p oaÍ+t] ,oc9eR oeqvuoey ofgY of澢2K$of澢2 ofH? ogQ i#ogQ| oh'2T oiqYz64 oiY oi&TU joi*'#L oj/Koj/ ok'Y-ok/^uok1!hpRokXo9okXo omsç2 on aont opabdosz<%I?g; otm9S| ot{;V ot^ ot܋!U$<ouH6+|ouH6+*ou6 ov|q cov|qov|q #sov0owښbp@ , ox5V# Jb oynq oynq  ozBIV ,4ozBIVsozBIV| ozzBo o{<9Wv!o{<9W o{<9W e o|g jGo|l X$o}GuK 9o}GuK o~ǘOo~KZf?oh \ oJsխo/Ap: o/Ap: \"oS%Loųgo)LcMn oΛHHv oJnML o)!oA_oA_ obBOobB oҋ4Yoҋ4to1P oP7jSoP7j&oP7joP7j on.Κ*on.Κ"of!}6on?3o'+#3 oaLN:o(wLo(w<o(wo(wS o(w oR?>o.91o.9o.9 oVoV oc[Ro#[ov1"Zov1"Z o׭N oaGlA' oւ &|oZ o/FxQoY $ om'RoJha% -XoJha% (4oJha%8oJha% os( (os(a o /' i^o /' j$o /' s o!aQNo} o:j;~oA.?o- o- K ob$ok+'oֶ^o@=vY o\Ro\ 3o\ o.jJo.o. (o.o.s of~3 ov[<jouCj "o5Гo@ݞ= cko&X)o( oξpoξp >oξpYoM s ojh4o8.1o8.!o8.jo8.o8.s oFolf ao;K No)/ o&@> !o&@> oD ٜ b o ^uJ oCң ( oCң oe?1oo3?n_?oxع o=ד Bo=ד oj4 ozeLo* ocoҡpoؼ oL]b o& =so& = o(Pկ] on)joUlp oB8 oθ. o%)K[-o^l\tIo^l\ onT} $ o?o?o̪)o41't o]oLcNGoLcNG od10 i oRK?oRKoRK (o EotSo^T7| o! m oQK9oI=oACoACoͲ9oͲPoͲo*=[l]&oԷ5RoԷ5oԷ5oԷ5oԷ5oԷ5SkoH{Z"oVv oO5oO5s oO5h o%#} SoL"M^Q o_m o(G o(G o[E o4#I&o 7Ճroğ*p1K|oğ*p1KhCoğ*p1K ('oğ*p1Kso•>Ko-"p!zcoOVe s\oOVe oo^,I iox,9s;ox,9jox,9 oƙ o o+9Aj/oAM~V or xFokao: o:o<1,oG{8 o(,j oʹĶVY-o`uo@rNoݶTd o`– /o̮wko̮w s o1m oM?~RoPv oϒon3Xj#o ooo.@cR!o`0>o o//Շso//Շ ,o//Շloet pry =prypry p_-9 p_-9 p~p̒\Up̒\ p.pd& p;_/Ap;_/A pW3y@ HpW3y@ $pW3y@"pW3y@ , p] p)ݪ p -p)e S p)e n pd b69pd b69p(Y p(Y s p(Y| pPrpwlp  x"p ůZ5p ůZF p }!o j p _ xt.p ðkp93s pJPKa pv$ȃsp{ pou p U~ "pOv# pn b pF]Qp9~a-p9~ZpVDX ap;;s(RpYo| !pYo|s p3հcM jpTj(p[yp:V$ sp#x1 #pnAVpnAV psRpsR p#6r pv%v;pz= np,spr pxB} ,pxB} p4/2p "p ~ o[p!f? p!#$p!oìp"%`Ҵp#cr(|p#cr(kcp#cr( Qp#cr( p#cr( e p#zwRw  p#t p%uB p(U4Ow p(`Ajĵ%@p*txM p+>C,p+A(Jp,'*9Մ p-;DLp-;DSp-;D!p-;DQp-;DYp.sk$u p.,y%| p.$H p1nwic5p4ts 3 p4Kp4p5U))i p5X5q p6 Jߕ p6 ? p8Pe $p8w-K t p8#p:-W5bp:c p;wN*pp;wN*p=olL p=Hp>;?p? { p? p?ɭQ =p@Ԏa$ p@7YA?p@NpBXRU/ 'pBXRU/ RpB9" pCIg,P #pCi>? pFd5`[vpF!0z)pF!0zpF!0zpGV,:pH ZZpI2SpJF}dQ pJ]G! \ pKS> # pK|8? pK40* pLylRpMzȉ^pNSh.i 7pNw\*:pO >ofZ IpOl pP-! pP  pPDS " pP̪ڦ\ $pP̪ڦ\ pP̪ڦ\jpT1i[pUe #pVSz spWS pXMW7kDpYZEy pYdW pZC QpZWMp[N#$ p[mC}Rp[CN);? p\ }';p p\Ӝ^u (hp\Ӝ^us,p\Ӝ^u $p]4R)p]4RU p_i/U # p_uT p_x?*p`}+ p`Eu۫8Ypb)1 \pb)1pcKvߤS: pcEh$ ,pc0 pd#)*a%peT pg\{Pc? pg~˵?s%pg3$Y ph'20phb[(?*pi!F , pj{5IK8pkz^wJt pkz^wJ ( pkz^wJ plN/UplN/d0plN/RplN/pmf Rpmf Cupmf Bpmf D@pmf pmf  pm}#pm}?pm}N pmyTs #pn+ pnc0L?apnc0L po a -s po+~SR po]T@,poِ&p`pokaUpokapokaRpokaL/pph@ 8prg <pr?Ķpt㍹{$bpt㍹{e*pt㍹{pt㍹{Lpu$_| půȌ pu¶eRpu¶epu¶e pv_A1hpwudpwVA&NSpwVA&NKpwt}~ pwt}~ $pwt}~ (pwdY/5pwdY/|pxqi s px v px(*C cpxdq pz!^ pz kmZ p{(%s^p{(% gQp{>́:p{>́ p{>́Y p|'qp|'q Rp|'q 0p|'qp}Q 8EC p!%Bp82p82d p82 p>( pZIScpUT pUT  pUT pUT itp M]p M]Zp M]Lp M]U`p M]p M]p M]zp M]1p M]].p M]ap M] pZq)pֆپ3 pL& p"Uxp7X]7X]Y3p7X]p7X][ pL) R+pL) pL) KpL) pmS wp"- ph]=Lph]= 'ph]=pܔÎj pc>K~8pu+|] ( pu+|] pS pu6Yvp1jp…w LYp´?dDp1] ap1] ip1]s pZ[bpą/o JpĴa ?pĴa 3pĴa ,pĴa (pĴa ipĴa| pպJaHp]b=;p~Rpƌd}NpƵSpƵSpƵSpƵS pǡmw? pY$`yO]p؂z}t(pzqڨ $pp13`\ mp{hL2p{hRp>&poYHMQpQr4RpQr4p4(1p00KpA-v7p# pϋ`"pцB?pKHxZpҮ<@uQ pfGIt&pfGIjYpCpM6|?]pv p}Up B(v!p԰@ pg8ʾ pxwq%pxwq pxwq p}(p@d\p%bRqK $pc^Cp[]p Ĩ,pϐHV2sp%s~ + p5a?1pۄ>5D pJoM;"pܬ4cpA/1 p&tB #p[m_|$p[m_|p߇v+Mtp߸l?BÅ#pٞVvpצ ,p"u!p8c[ pI-pIpI pkTش 5p;<pW) pqT;p癘;VD]p~WLp~WLp~WL p~WLp~WLp~WLpn7=Sp1*}Gj^p1*}G Jp1*}Gp1*}G ,p1*}G )p1*}G (!p1*}G $p $ p E#o p4H?p6_bzh pp4) I t po #p}N p$O|4 ,-p$O|4 p$O|4s(pd`H)0p%(Kp%(p7p7pЏpЏ p^ECpDh=N+pCi}Y7p.nr9pOg&Gp$"ypZ p`d vpZj!p´d p kWLp{ {& pPl]9p0} pF pEF,p?bp?bp?b $kp?bs5p?b p?bjp2 p1>| q)8qlpu`5 q] q(Q!> =qU2 'q&:1  qr|V RqE$Z qq?d 2qB "qg:kqϾь "1q0wLR qAq<:q<?qD,(? qyIf q N cjq =\"OA q 9fsEq 9fsLq 9fs q  $ q IL q IK q/"fsq"d0  #9q,At  ^qUq2e\0>/q4bT . q6Bi5%q6v?*A q6v?*Avq6v̧q6v̧dq7L [/  q7kv]q8 (#q8WgyCq8/quq9u . q:^:>q:^.q:^q:^ q;Ȉ $ q;I7S q<U7q<q<S q=0q>kY >q?pY q@ %. q@)8 *qA *F ='qA *F "qA'j?qA'j FqA9?DqA9 4qA9 qA9 \ qB [ qBJfB  qBJfB ,OqBJfB &qBJfB qDnVDfC qE ޷uc qE ޷uc ( qFjwqGC-%KG# qG𠳫qK-&:)%s qK>Y]NqL qLb4qLb4 qMJw6= qMc qN!-y qN!-y qNLY%LqNLY%qNLY%qO ~n3 qODsE"qODsE?qOIX3[qOn s qO}QvqO}qO}@qO}KKqO}qO!6 ^qP< >S#qQ x $qR) m qRc|= qSCqSCRqTA'% qU/6tBqW5L qWԎ澋RqXӯ? qXڠZ'qX4 qX^A lqYMfKqYeS.$jqZ"yq[;k!q[;vq[L q\SƟjq\SƟ?q\̊iCq\̊iC :q\̊iCs%q\̊iCq\̊iChq^3 q^>%  q_ s>WA q`s; 1jq`צBq`צR'qa5c , qd_ɱ/Z qdet qdA2NqdA2QqdA2,qdA2qdA2qeJ*- -qf>[>wo qf>[>wo + qg& ^Lqg:*[ jqg:+WqhT'Y qi2H! qi2H!j qimqi]qjoDa qkx7 +qkx7qkx7 qki4 ql֡VNbql֡VTql֡Vql5ʔZql qmJAqn}`$ qnF Ig]!qnh{5 qpi#m qpi#m?@qpi#m >qpi#ms4qpi#mqqEqrk_? qsVR?+qsVRjqs* »j qtnQEڐqu]`#R quSy0dquSy0SquSy0Z qwsqxC $-qx·p.3 m qy5B1 qzӻ*Rq|.) q}۪{$ q}/pij q} q} L q~-k39Sq~-k39 q~X`JHqq~X`JH q=p q*q*q*Yq* q͐ 9 +qqhX{ q4dqBe tqBe $ qc$%{ q{|aq k]Rq+3հ=qq}`q}` YqtHqtHqtHj q 27 Rq 27 qqb[qa(]R qWWCq3\qnqn\qn , q 2q$j q *qˊ"tqˊ" 'qˊ"qnǹT;qnǹT:qnǹT{ q1'sqK<{S:q,YO q#[uqUm f, qR9*$: q!EqHtqH q롊2B q %\P q9ʔۻ f(q9ʔۻ? qIPz 2Bqo9kq!Lbq!L q " \*q iq9|K^%b qv sUq9n ,q9nq9njvq9nq9n q9n qjqg|Hqg|HFqg|H$qւ V qK~t(jq{‰N qSr߄c qFg ,q=V8q{ ?q{ $qfUW q0m iq>Cb$&q>Cb$q6j qW8z  q!qJpO"V'q.!@ q.!@ ( qig aqig ,q@G?:q@G?0qv_u q1Wzbeq1Wz qͯ jqH"`4 q[Bd}Z?q&Ѧ~ qDT lR q] \Cq)HThPq)HTh+q×A9lq×A? q×A ( q qkoqt#qi.oqi^9+ $Wqܹqܹ qqBۡ*qqBۡ (qUz q.boJ qi#Aqi#qʳ0; qqe8qqe&q'f% qwTF q̌EqͿT.vs qKQWCqѽe1a qfOdv#q4 qՋqX q֟di#5q֟di#[qߴtd qõɩy qõɩy? qF 8q׳6E4q׳6E4Rq$L!3q$L! q$L! q$L!R q+\7a!q+\7L qeX?aqeX qeX (qeX q؏‘_yqx \qx5qx qވEqR*q 23q6C< qۀOtsq+Vs qߖ&r? qߙԐ)qߙԐq􆤼!q􆤼!q$mq:gq1lc?'qѺcƍFtqѺcƍeq`BCqMeR q@ a%qaqéqé qé q_ UM qʊxLOqʊxS*qʊx$qʊx q#tSq#tZ q붣jN q `pm^ $q'? q+3fR qЉ51@K qf.q Vqٳ] jqٳ]qٳ] qVr$ K q ,_q qWY.qWYL qtOAn>]qVwv qaoZK qaoZ q0A3G7: q0qJWvp qWCW?q$_'q]o7(q \mS q2uYq2u qIg qIg qg8vq кvKk qi %qiqi a q2 qsEqsEqaXg q" q3tqaq$^Yr 1L rw<̖ rM~I& r rNF^ r-k rQ  r1?r<&4rmq/2vNrmq/2 ,r9i/r{C1vr{C1vP r^Rr.2oBtr. r$ rIs٠R>rKxN r } *? r wTd] r a;VPr a;VKr hqN i r x+D r \-r \(r \rtj r$RrV rA_j r VFKr VFr VF_ r% s,r ykr9?|rJ3FRrG\? irϒ;!>5 #rV2 rV2 rg=/@F |rg=/@F (rx.lgMerx.lgMPrx.lgMrD F?ry ryRQry$ry rw;Q rFn rr?< $mr?<Nr?< ,3r(e: r0Sr02r0r14z_S r<6zr<6zL rA@}$rCsrCrC \ rE trTޘ c rTޘ r /(ct8r /(cr /(csLr /(cjr /(c ar 2cv)Kr!EC# r" 1#H r" 1#H r#1^ O/vRr$& r$& r$&r$& r%?ވz cr%G (r%Ȯr&.jr'e]kA`r'e]kA r'/ r'/ iar'/ r'/ r'/s r'sK i r([hmwr)QEVr)sr*֓-!r+C\4dr+L# r+RF cr,s ?8r,ڣ4/ m#r-&!7;r-P՜ (r-P՜ er-;z~Ld r-iE0r-iE0 r-MMRr.+$lt0r/4( r/4( \r/Lr1jr1j-r1pt j r4A@/ 9r5.z-?r5Kv $Vr7D Nr7y=U r8-&? r9EgMG ,>r9EgMG r9EgMG r:S !r:i/_r:g? r;ialj $,r;ialj ( rWFr>WFrD7]V?r+"rD5/RWrD5/r [)rFC rņ r^{s rd] r}s #ir }r } rr^4,r rx6rxry}0 ry}0try}0 `ry}0Y2r+Sb r+Sb rs \ rPS|N+rՑ/dryrCEirv*ySr-uz?rzŋzj rzŋz i rZ#]4@YrZ#]4@r][/ r}BLr}Br50gr$")q r$")q sr NrnZ{;^Ar^ [ $ry"Mry"rЉQ9rwRD r!"V؛NrFyt#rĉ^' rĉ^' rĉ^' r2c$ rŪ?G rQe>-Zv=rQe>-Z $ rc[Vύ % rvߚCrZwb rMvr:n r:nr;PZ#r;PZsrC \rɑKFXrɑKFXArɑKFXrɑKFX4rɑKFX]*rɑKFX(rɑKFX rD_^rD_$r˼)%=+r˼)%=L)r˼)%= + rW6sr)}y_Dr)}y_ r)}y_ řzm/řzm řzm] r63 or63 aCrda5^ #rsW r " r΁(O  r҅LrZf):Zxr \`?r(s9prkURn >rlp0Y rԻ,ss)rENrSҞP: \ rL r^c~3k rn`r֝AA+ r$V r؆ͼSr؆ͼS $ rظwY5p rن_}3i?rٷ'uV rٙ  r1rK ( r#j#r/~ a ryDG Erۀ,AN ro\C rJle2jrܵ"M(Drܵ"M(Krܵ"M(rxŷ b r ro 4 r݀6 rML0rl#Grl#GKrE*rE* rhKB3?hre%4ririSri r[HCFr[HRrʾ r6:sS r|D rͨ+M rͨ+Mr{ߗ  r!Z G rd$9chrC=e ?r*| rׄؿrVg*'. r @ :r @ r`<պr rv"" crv"" ^rvDrA2]C r,DZv rb sr j6C8r j6%r j6Rr j6Kr}d rVff \ rX (_,rX (D rTPLR'rTPLrTPLrTPL r9z] rJ ;$rm{F9J "ryklBjr ~tr ~ rZrlĶr%!|ۙ> r)`7% rX/p ,rX/p rX/pj s}9# +Is ]s#%ߺsC|K ss_~.%3s_~.%Qs0s s鉹%ss鉹%| sF9,UwsF9,UwsyS#s9 ճ $s)K jsK #sLO%?HsLO% %sLO% sLO% sh\Z sZc?sZc9sڕ< s #aes #aes Cg s y+s ys(;h;js{[s7S "*se, se, sGksGtsG isG ( s%@ s sl'%s,ljsGbIs灎o"s>B:>UsoOs^y s^y swɁwssspWs z?sPBeY s0xN[s4=HE \ s PSxs Ml s!2a"C$s!Zs"$5u?,s"< s#^$i&^s#amT -Es#W,#s$Vcs$V [s$V i+s$[pV s%"4.k s%Z- #3{ s&[nK<s&iẐ? s&U"_ s'0:D%s'0:D"s(+Vm 1s(+Vm es(+Vm9s(G^B>][s(G^B>]js(G^B>]REs)MV s)+vs)Q eP s*| s,})\ s-$ s-?QJs-ҳ9X!s-ҳ9X s.}* s/~ s/PgsBs/Pg (s/Pgt s1Nlsqs1Nlj's1Nl  s1%>3s2`IjPs2`I1s28Ls3s;+s4Ts4}9Rs4; s5DCCV[s5DCCVK%s6"*O s7F o',s7r{/0 s9tuO (#s9tuO ,s9tuOs9tuO s:ĦMs:&v's sġzs>ġzLs>ġzSs>ġz s? |ss? |tTs? |Ss? |k<s? |Ys? | \s? | i s@ -sAxG޶f sAxG޶f isAxG޶f|sABSsAE% sCu<$G sDU sD" rsD5sF0Sr(K sFzWdmRsJ{_T sK0@ \sK3[ sL~jR&sMQπNsNH*tDsNo)k=sNo) #sNo) sNo)t sOf|v8sOkYlvvsOkYl sOkYl sPW{%sPY,,;sPm #4sPmsPDULsPzj sQd*sRzb)sRQ8o sSE8sSE8 isT&S^9sT%_"sU'= sUj sV<| sV1ˉ!sV1ˉU sV1ˉ] sVx;l sW-FHv sWoW&sWoWKsW椴!PsW椴!RsW椴!LKsW椴!(sW椴!K sX]^LEd sYO^0sYSi jDsYSi Y/sYSi  =sYx>sYx>f sZP sZP sZ|f3cH s[6k2Cs[6k2 s^.递e c s^9d s^ݦH? s_ ?s_  s`xe-.L s`xe-.saJpȌsaJpȌsa (saQ-saQsaQsbv_7LKsbv_7tsbv_7K>sbv_7sbp m sc%PTscuW*scsh scsh scm9 sd}>%sdV'QRseU-K sfŞA csf!Osg:M shᏗvsi+!R slBismCOsm#2G- gCsm2is sn^so _~ sq|%s sqU''f7squ@@sqn:)ss1N#7ss%^7 \Uss%^7 lSss%^7 n:ss%^7 ^ss%^7 zss܅&ss܅ sto t-sto sto m suP[v svV>y-sxU] ssx_ڈF8j8sx_ڈF8s0s|r2s|Ƿ:ż s~bs~ s~ s~˂SaG sbPsX`8 ss +ysw:sAA s4E| (s4E|s(Pse/ skVL?sɄ&{-s'xoL>s%R! s[[ s] j@sX5sTJ ,sm?; /sk(sWL>.LsN#u= is$/sss]|+], Ssz#B0 $sw/I s!s sX^K s!RG5# s^C?mojs^C?mo|s^C?mo s4\ s Snr ,~s Snr as Snr s Snr (s Snr s\gsTC s|1 sio<MsFRϐ(|sGm srvd m sԁfs:fOs:fOs:fOj sdZ  sms?@: sR}sK>sM҃ sei5=s*E\: szh.eszh.Lsۧyc $Lsۧyc is/xd s^es^e sRKp^sRKp,sRKps[d1s~ʣ s ࣿ9s1s ࣿ9 (s ࣿ9 s5{ s b.t?smT As*| sߌgK l sQx]s.x7Vs.x7(sUG-DxsUG-MsUG->sUG-sUG-Q s$ s"sM c sʺkpsG.sيN s^ cs17{ *Asۋz/ sӛI? s_Iks_Is_IS s*4s*4- s\zRs\zKs1S0K s1S0K s@w sqJOusBsqJOu iPsqJOuj-sg sg s̮97s̮97gsb='Z sn ٢sQsE? sQsE? sÂ-bBvs÷q sĮZsUw sŕ ( sŷN sƱXoh"s-*N(s-* s^ѺvZs^ѺJsS] (5sS] sS]YsS]t s{+3 k"s'Q1]"s'Q1UsɐOssKđ{S, sQv/sʧ zsʧ (s]7 tHs]7 "sr1kV4s̐?s̰es̰eU sj  sj s͒ "Z \s$8όj sm>%sm>YsϤ;;x $sϤ;;x?sۄnڋ s$ 's$ s~cL1 $ s{#R s05:<s05: sX'tsX'ksԗcy{ sԗcy{ - sHm'&sQAK\ gsas}L sهM%SsIQs{ts{ so sPл{shZAR&srx^srx^srx^s3PW s8{u sZTsZsZRsZsZQ sujsujKsuj sHO} a7su7s6 2As6stk sKMsKRs㧏A s㧏A csz}s s\#p* s-,C sEkvQs[z+#D s?s1خbS[ s1خbSQ sXu s^J"FvLs^J"Fv$ls^J"Fv s^J"Fv s^J"Fv sq%Nsqs:~h{s4sOjUKss0c #?ss0csيrs q[g"s(y~? s 5s젬sMSssS? sN|\ soUAS?sFt s7-NtIs?>wyvs\1 1svsxN? #2sO@7}s^=k,~s Os s Us—D s"% s.` 6sW jSsW s#Ns# s# syo !s>%& segK s&Lohis&Lo7s&Los&Lo s&LosH?sW? s#},0 s]_ $,sc$ sc s( lR s( lR s4s $"sfH] t#"tzf4!tuNtαF/tz@X)CvtmCt/޷kvtI at8qYL t Ea? t j]t [| t \tt Ս{t S t O&t yoQ tYgv tf8tiU?tPAˌtV.thAЀNthAЀtz6,dt{W tq3:fty&% tƅ^htV}P t 3ts*ڹ3 t &2Kt`-jk tʌj te ttS}t t [K tmل at-V=xtHw! t1, nt1,?t1, ^!tm Wtm "t t:{]t:{]j t!r>_Gt!r>_Gt!q ut!к!} $t"$ycv t"$ycv?rt"$ycv t"$ycv t"_>[ c t"sP0(t"sP0a&t"L%o)t"L%odt$дHvt%bt%b t%<2@t%lԈD $&t%lԈDt' " #t' "  t'4 ; wNyt'4 ; w*t'?`W't'?`W'?!t'?`W' t'?`W' t(kt(0tt)i9Ƀ7 t),6# (t*Lf7+ (t,wo[ t, #`'t-u{øt-u{ø t.͸-*t.͸- ,t.͸-t.͸-t03c>t03cL-t03ct03cKt0/JzK t0I& ct1%wCAt1%wCt1ebUD"t2et2Fw >t2Fw P*t2Fw $t2Fw ,t35AGdR t4Ϸhc&t4Ϸhc t5CP~ΐ t61c0 i:t61c0| t6=K t7Φds t73}Yt73}2St9—t:ۍ t;#vR Nt?DCb]t?DCb@t?DCb3t?DCbt?zd)t?z!t?zat?zSt?zt?zLt@tk " M t@ϑ%vtAx$Aoe  tAhY$RtAhY$&tBR"j/tBR"tB-$tC$U+Y tC8%jtC8% itD Z tETa tEl@?tF}|L0tF}|K tF}| tF;o& tFtjtFttctFt9tH=Z?tIAiI tKˈCh| tL~  tLЏq%[tM"9+ tMT}!KtMT}! tM[y^JtM[y^J tM&A ( tMkt tM#%>tM#% tMvtN40i itNO !tNօ&tU7G itU/N, tV0[ tV,!KtV"V= $ tW*AKjtW*AYtW*A tW c5tZ{IX|N;tZ$ -@t[gj8t\a?sZt\a^ cvt]M-] t^y> t^`I6 t_߽taQeR6taQeK"taQeK tb Фx$ tbo+cT tb`2H`tb`2HDtcG/_t td.05te7!te7Ste7 te\Wq> $te[tf/;2tgNy'dL%ti7=x \2tjWÜ}btjWÜ}tj:}U> tkW +)R'tkjTtk (.tksEoj tk + ,`tlm.= tlm.= \tnΈhtn: h`stoVCH tpUMj tq%e_p1tq%e_p tq/ Q,tq/ tq/ tqmT% ts@vZ:tt\I ttaNtuy~Ge?tvDsx4$twqfQf %tz9?tz9 t{p |t{p |Nt{Wd t|G6e}t|?Gss t~=Cto1ZKto1ZKLtkt/s 't/st/s ( tST 0C t [#a tG*7̙ . twjV twjV t_‰\ t_‰\7tr Ǩt0%NttSYj2ttSYtJ tJ| tB?ut6ɸnt6ɸndtt? tPtP]btPUtPt,fmftaK@2t?t#Zڋ}-t/?-t/ ,t/jt/ t/s t/ ( t <toA5t2LHt2Lt]8kSDZt`^? tWstW ]YtW ] NtW ]tt. % t;  t0# tg>Iet󤲿zM St󤲿zM 6t󤲿zMh%t󤲿zMj t󤲿zM , tVH/;? tf tf tfjt:*t:jt:tt: t" p{t |Jtڵ ItYGڮ~?NtYGڮ~ HtYGڮ~ $t+A2tuA tB'-tB' tC & =tC & (tA;k3tA;tt)~+ tLYt'.S7]'tk?[tFh2Z? tTo ti_Rrti_(ti_ t; t6<Ǒ , tOJt]?txV[Y7tyj t{ tF6) tV ?(tEd6j&td?dҫ9 tNLj?t-sK t-տgvjtsjtsj tN4L?ctN4LtdУ t:{3|B tuR t Ut Urt U]t UU\t Ut UtsZd0t6F6?tд({Pt }k/t , t , t6Yt6YtBBtb t{iLSt{iLL-t{iLt{iLt{iL tƮZh; t`tц #>t].1.tm4v$t?t6=1+k t 3S t 3S ? t\;&t\;titf5+*tm^-35 tm^-3  t{FUtn9 ] t`L1[htkn;Ktkn;htkn;Otkn;Ktkn;tkn;Rtkn;tkn;Q tkͻ t]gktUt~Ėt \t b t`))t`)YtMAlb #t h? tf tE \ tRVtU&tU&tU&Q tV3StŖK tNXG t Mvt  #Ftǹ t;Ntݿ Nt7! !%t.+OX tʴ* tʴ* .-tʴ* a tˈ-ȯ iXtˈ-ȯjFtTAftۭ^]+tۭ^t>)~; atTƜata²ta²tta²jt!_zHtԍ T8tz2 t^rߡdtr^jT t!G \t(K<=1t(K<=tt׆3; et2N tKaa +tl 8Ytl 8b t؊^t]PFBbvt]PFB5t]PFB t]PFB t (tߎV? t&fplWt&fpl tϪ7AG t7i tC&tQN  tݠs$tK0vtT28" e$tT28"Yt`p31t`p3t&Ijt t>kռt>ݷC t"H;)Rt5gB^j tV3tVtVStVt2u[Bt2u[t2u[ toF* t]w t!X.u $t!X.u te ldp tp4=#tRLatR/tR!tz퇟'?tKxt&95Qt/Fb:t/F tl#t)pt)It)t)Ut) t) tF^tF tiਬt2/ytt2/yk t2/y tb jeOt|M"t|M t{ t t{ tΰ> m#t"-ŗNts s tsQt3VV ti2 t6 tLW* EtLW*tLW* t`ǫ t#FpttMoNt2aaurU_ aur uSQuhukoxs$u 8Z?u=MS3uw7uw7uQYuQY u= (u= uo:u&9Y!u0Uk j u nu )>&֟u )>&֟ Tu )>&֟ s5u )>&֟ u )>&֟ ( u _#  u t^tu IO uI_U!Qu`வi $ u*FP c<uZuZu|Wu - u7=MFkj\u7=MFk u7r{4Nu7r{4Iu9zUZ\ u9FH u:`Wj[u:`Wj[ u;7YRu;7Yu;7Yu;7Y u;)hq =au;)hq ;u;)hq*#u<Zu<@Ȳ` u=(1:A u=vu>(bolRu>(bol>u>(bolu?5u"(Su?5u"(u?kJL u?JwuAe8 uA9 uB'MdT)S;uB'MdT)U$uB'MdT)uB'MdT)uB'MdT)uB'MdT) uEquEquGL,PuGL,RuGyuGyDuG}r{'RuH ; RuJ08z#3uJL&мuJL&м uJL&мs uJRS :uJkv| uKt;fuKy v)uKy  uKy o uLSL1 = uLfIe)Z!uM"2 uNbuO*j uOb'buO}֢JuO}֢JguO?V[ uP"jaSmuP"ja uQ ?uT30uT;{uUإuUإ uUإ uWn_uX|\g뙪juZ- iA%RYuZ- iA%7uZ- iA%D4uZ- iA%u[ g*X* u[fcڗ\u[{u\ɞedu\ɞeR;u\ɞeu\ɞe@u\ɞe u]Pr u]Prsu]Pr Lu]Pr Fu]Prj u^5дjSJu^5дjLu^dgjd , u^c u_0!va u`jŕ 38u`(L>u`(LKu`(L ua ~iNpua ~iua ~iRucnl*xmucnl*xucnl*xUuc*θtuc܎+ "uc![N!5uc![N!judsR ufVǧpNug,9"H ug>RuR uh_"uh_Luh_Suh_ uhJK^ uiomCɉ uiu8 uj VQsuj VQ 0uj VQ +uj VQjuj VQ uj VQh um$OCYRumt3?]un gun?V?4unb?rN unb?rN3unb?rN unpȜ urM usg"NutcuuGZE8?`uuGZE8Ruu  suu{wKuv0+ux=wGL(uyUbł? uz&y uzX&Ft^{uzX&Ft^u{tKi#u|rquEu})p 2um?^( 3u*Vu*Du/< u)hX>Ou)hX>Ou 1D@?a uA1Nu Y#u2訓$8u3{z2du3{z2uٸD~ iuٸD~9u}l u?uSodԭ $uSodԭ iuU"9耍 ,u͛lRuOT5suOT5 uOT5 i u zTC uW,x;u)<'lM u4#ou4#oKuD4Ip?uG ފun'mu#Iu u#Iu u3hI?u6T? u4G , uzRNYuzRNQ uw#uwuWXhRumi uƒ!qu?VtjKu?Vtju8?u E auFn uQVv$uˏLF? ud߁@ߛ ud߁@ߛ a u^;e u.xu.x uHP u4J96uP uqr?u1%6= u߬urn1j u^ψ uwR u7<Uu7<3u7<u7<uӉ7-uӉ7 ^!uӉ7 uӉ7 u u ?m #u}2pvvZJ?i v!^ vE v?J.KRv%~J?Ev%~J 2v%~Js"v%~Jv&vkbWR)vz~hHYv vRvQ v2" ?Xv2" s9v2" a v2" j v2" v ҧ vH0(v w8jBv w8-v}Z.=v}Z.R$v}Z.Qv}Z. v M8 v x%~a v O" v  v WҌN v wk;v wk%vv)f]? v) v?Qv? v v%?߬ vg@S>Pzv4rlv4rlKvwCvva"| ve^y6PKvSn vCN_'1& v9 v3b/aSv3b/a vFi 7vyŘvRj v/|`uvrR vp[}i9 7vw v5Ev5Et&v5Esvߤ07 vDw3v(^Y.vͷ<v DY&#v"r` o)v"Caq \v"%%[? v# - v$xvv$xv] v$xvv$sNRk#v%j!iv%r9P(-v%r9P(S+v%r9P(*v&Fsrv*/ 6v, ƒ v,gUv,8v,L v/dD7dhv/{Id1 v0SwA- \v0kzN0?Iv2; RSv2t v4@vKAv4@vv4@vv4V\GZ4 v4V\GZ4 cv5>uu.v6DRi v7tܓj (v7tܓjkv9E*{KU hv>*{KU 4v>*{KUv>*{KU (v>*{KU iv>F4& v?5A!vhv?g sv@x} v@xK'vA;~3vA;~3D vA7 vD9qh-PvD0R#vD0 vEm:PYvE|+\܀"vE|+\܀vE|+\܀tvF| vG:( s vGe $vGe jvGe '8vGe svGe  vG_GjvIq Ҍ*vJE& vzbq/ v{Eev{mRgYv{mRgv{mRgv{mRg*v{mRg v|Zv|Zv~i..vA_bFvA_bvtT v/RZv/R6v/Rd1v/RLv/RS v9FQ9T? va&3va&va& viBM s v`E mvizl vK? v$ v*WRRvaUC? vfh yvfh ,Tvfh a4vfhv||ԱvFXvFXvFXYvGf[s v:ĉ v:ĉ  vGw`$ $ v8Fe&Ev8FevD 3  v"رtvm1 $vm1vܛ=v']# vL?v 00:?v 00:7v 00:%v 00:Uv!Pi vq:`F avV#Wk-vV#WkY v}(3$j vӊj vKw vt':v0vava vFXuvFXuvFXuvFXuPvFqQ v!U, $Dvk vY6vY6vY6v2H vpF$ v+%ckvJQ]!v?I !v?I v\ v2VEv2V?v2VDvD{tv7ĩ vg vg| v Gv ?v Jv 6v  vY+c vW|v&vW|vRvvô)?j8vvô)? [ v Wv&ھ= v&ھ= vy}s "svy}svy}sjvz]CFvz](vz]vz]vz]vy9h v@zQvu(+ #Nv.l N9vVI^ * vq~g 'v(. v8?.v?~7,v?~7v|1 v v3`Ӷv^?3]Rv y0y? vRW-S vwS=vJ5;O vR>vp3 v+zv::v:6v: v:v,c v,c (v""W a v""W . v/ugv+}v+} v\F ,?vΪDvg{ vg{ vv'nsv> ,> v_Dv#n vB2!vB2! $]vB2! (!vB2!vӝ=vӝ8vӝvӝv7KC v9og\-vYJ&2vOs\vf3m vݒvX D ivV91vZvZUPv`|I" l vЗ\ 0vЯ(Sh]vиD~ av"^% $v"^% v?z62$ vь/ v [ vcIp vӾK,V^vӾK,V^%vӾK,V^ vֺ0Lv6}1 vZk v׈v׈cv׬ЋvAT] vٷ1 $vٷ1 v( "vDIL<NvU:4, svݥ}Иv޺8Q v޼r32vkžTvkžv(C R<vjlzRvjlzL vvFHvO~[v [ - vA,<?;vA,< iv䇆$ e v^O,RvT_vX3 RPvX3 /vX3 /vX3 +vX3 vX3  vX3  v(i v(i vl&g v+#v+# v6^ ^v6^ vZi\-v9Sv9S v|Mj v>M9 vf v邺h lvk]S|Kv꒒ûK"v wT vsݢ v[4v[v[v[lv[v+ v҂j v'5U? vy3csv z #v z K!v z v z [v z d v`ӕvvwNñ %vwNñ $ vZҪCv1w(##viD: v d/v vcKv .|v . mv>|sv>|s a3vҎb'vD@ v^Ugy vR,N<vR, vşWRv:Bh j"vIw+v@jv2U0u vZ@avoY-v/Ⱦ va&b va&b v&U? v8CPv8CPv^u?v4 cwp{p ewug w[z%wZw\M?wBjwBtwBs w>;m%Z wJº aowUH\Ywk$ waaY)KwaaY)waaY) w yvwvT҂wvT҂$ w4ׅ%p"wU% 1wU%?wqr$ >w05Nwv=žwv=žw K/H w Wbu9w <\ w TǴo c w zap+k wIcwIc w;Kcwm T.wRAw5v wΈ wV\wA-gNwA-gRw?I"Nw[ > w c5wH2VRwjwÌ~|KwÌ~ wMd->wMd-t+wMd- w26Bw26B w26BK wjn Hxw#rwbx{ w;5p aw6wu1{\ w\\w\dwlOQ w| w&S>#Kw&S>#KwS8w : wϼ? w.\* m w7w6̐.w6̐. w6̐.L wQغN $wɪpbK w#=RwmwmK_wwF^ w ! amw"r"? w$?7}sw%@bX w%Kw% w&L 0Yw&L 0DJw'h_^KZw'h_^w'"e w(J tCw(T5̨w w+8H aw+8H w+A΁w,E`}jw,Ze ? , w-.KlD w-.Kl w.83s w.{4Jw/;q"F w/R'M?w/R'MD"w/R'Mw0x w1J!is w2,~9@w2,~9sw2,~9w2,~9j w4"Qvjw4 w5m3,{|Z(w5m3,{|w5oIv w5Ew5Ӣ+Sw5Ӣ+ w6b0YRw6b0Yq w6,yfR $w6RR5w7P )W w9T 'Sw: @R[!w: @Rw:F*C?w:F*C i;w:F*C a$w;t필 wZ w=dh: w=dh: , w=cL w>2lW w>3qAj:w?(g; w?.:f_ w?.:f_ w?(!BwAdGC e wAtdN wAM pwAM p wB9sRwC= wL- eQ wLEU3 wM 9#F wM 9#F wMi wN76 )wN76R wNG׃bsw^>׃b , w^R5$?w_8DLvw_8DLv w_Hd?{w_Hd w_^<`%w`aD wa,ܥywa,ܥywaոK(? wa?9 wc,G}e wdFB`1we\=iRywe\=iwe\=iSwe\=i$wev3'wf=ŭy.wfJB'Y wfһDt wgXD#wg6!/ wgxoiK]V j wggOa wjs0C! i wk+ 1 wk{ j wk^jR:wlIpwlIpwm5~`t$wn;Z4#wnHmPwn `Ywo5 bwo5 wo5 t wopd_ws;fj wsJ ~wu=B wu|t6o" wu!Rxwvlp{ $Iwvlp{ =wvlp{ wv/D;kCww/}v[\wwSbXs ,HwwSbXs wy[ҰQZwzXm]wzXm]UwzXm]Z w{vǙDw{#dbw|9xKw|*:X w|:Yuo] w|jV6w}h5: w~>Vw~>w~7pw~7pw~Q_ s wm wswwhu wZ Z{? ww1 ww1 w5Y*w}#Ow}#wGwyUfw m \w sQw  i=w  w  \wnKwKDw\2 w[у?w3O˧h 3 wy +wͣ$?XS_w p * wQ1kwQ1w][-w][ \w`,%\wgHw5nH w|7lc~ ww7 w f" \w f" wݠ| w@D f w wJFJ{w% w% ,w%Bw% /w% iw% (w% $w}4jweuyNZwZ} wB ,xwB96wB $6wB0w Y wS$Z"wS$LwS$Sw;.vw w Lw5K66wC4g wU~s w90wR/ a0wR/s#w?} wOfĉbw  wU)wUSwUwim֩:wim֩:j w9ZKw䖹 $ woҨHS w;àќ cw%w]j4(w]j4w{ w= Fvw}DG٨w$lwᘗZwQ IwQ iawQjwQY wQt wqyK wtH 5 w޴w.ڢ w K w}! hC wc j wn% -x w^ [ (8waSͲwTz(Q $ wKD7wKDR#wKDQwKDw+E w>U 2w 4w& wĬv cwtw wj w~~}6Nw5 :? wnYt $weSD'weSweSweS w[ Ģvw[ Ģ aw]* wW w{}-u w2Pwه^ wه^?w1? \w1?7w1? w1? e wSdRwSdwSdQ w]=w&8JRw1]gtbw1]g w4/d)w[QPk%w[QPw[QPjw[QPaw[QP w[QPw[QP w[cuewѕ< w;6d wOB^w !N{w*TaKwRE i we|0C wQhN2 +wQhN2 ?wඓw1銪s w?5wo> cwιc wÊڗ"wÍ! wCQwĆ1F갪Ywf.~] WwqLݣO wqLݣOwƉv[RkwƉv[R}wƉv[R wƉv[R wƉv[R i wƫɡ whwhwDw?Fk w-Oi16[ wTv4"w̻?Ⱥw4JƶwR9HAFw{qba wЬ` " wЬ` w"K?$ Hw"K?$ (w"K?$  w1J]vwbFN$ $ wPuf w7w>20wrVGl]wVЧRCwVЧwVЧwVЧ wTA?zw[cGWsw[cGWtw[cGWkjw[cGWY_w[cGWGwִ $ wN Nwm^5 \)wm^5vwأ s w&P {?w< fw< fs wME{( ( wڮmo wD]B wKLw"ݰ -wPmtwߍPˎ#^w J@[Hw+׍zAow+׍zAYw+׍zAw ! 2?fw ! 2sIw␇Je?Dwg{ww7OoˑSw:4K wew=7ޘP $yw=7ޘPpw=7ޘP:Hw=7ޘP aw=7ޘP w咽&;"w漞| w硏ߋ" w4 6 i w#ts/w#ts swal18w[h ,6w[h w  w/Z2dWw/Z2dW]w/Z2dWSw/Z2dWZw/Z2dWw/Z2dWw/Z2dWw/Z2dWw/Z2dWw/Z2dWLw41Jw춄EdwہFU wתI? wN%b wXNwP︝ w$\5w2q wzu,ٮ w)/lw38w*gz;wT||< wFI?w=-= ,3w=-=waw1Y wܚ; wsh/w{ 1"wWH# wb^Y`R wmtF#rwo , w͙ w#1\w#1kw@ZTwD/*LwD/*wD/*Sw#KʨwK$g #w8 ImZw8 Imt:w8 Ims8w8 Im w^Yw_cx0s1' xx 8Rxx+_? xb^b Bxb^bYx;=q x]l Oxy]m x Hz x ɂVGM /x 7,nc)/x K؟ x K؟ ,x K؟2x K؟ (%x K؟ $x FH8e\ ,x FH8e\x BD@*sx BD@* ax BD@* w:x [?JMx [?J x lig> x%U6R3x| xnb23 x8f,x8f!xڣ3px]s x,ɟފDx;ZKxn9GDR x*S %x5 OPx x"~? xQsxab %7xj xC x``/xhQҪ xi Lsxi Lt xi L ( xZ x[Wx[WN)x_nT O .xIJ |#xn [B" a`xn [B" xt1_x50S xKPxq[&x^&RRx^&RFx^&R x.Y`(jxi9R x͑ -x͑  x֍1 imx֍1 \x֍1| xYv?] xYv?x!& $Bx"ƹ; 2x#E x&}x'1nR# x'B Cux'B Cu& x'dNJ sx'dNJ c x'1F: mx(`(*x(qt n'x(qt$ x(tte1 x(OI%x*tڸNx*ǘ ? x*ǘ ?x*ǘ ?x*ǘ ?? x+kD`Wx+#yvx+#yvRx+#yvx,xᡐ*ax-D״Nx.4-x.4)x.4Kx/)Qsx/t~? ,x/t~? x/t~? (Lx/t~? x/t~?x0DzEx0f;g x0f;g x0vVx0vVs x00. x2VQRx2eϾSĿBx2=bA ix2=bAj x3G9v8x3kDF$ x3[Zx4%P{ x4-tux4-tu[ x4(9x4(9 x4(9 x52͇Vd x5Q4n -x6xȅv x7(_% x9j x:,xNw8~[xP:JČ|xQ?$k"T xQx}E $xQ]cxTiB \xU&pa xU n1 xUId>C9dxU*]\KZ xU*]\KxU*]\KL xU \9xUVP$xV,5W mxVBv ,xW8bb s xW"XCxXxXY0 xXh C xZ3}xZﷃexZﷃe x[_S x[`2>L?x\y*Tx]J}Hx_a9 xa|Z^? vxa|Z^s&xa|Z^ xa|Z^ xa|Z^ $ xa|Z^h xa l7xc?Ѭg xcili#xco[NQsxdMrԺxdaO4BD?Qxe8;G{?xhExz O>xz O>:x{Vw:x|k%Qg x|k%Qg x|M? x| p x}7jKx}]Pejxzۿ?B_N xQE6NrxQE6Px@ tS xG[ +S%xgBl* xZ/x9Vćv x$l@ x$l@ #x&&EHC xJv x轞iY*x轞i x轞i ax轞is xQYtxDE? xF:* xJdjx8sx8h(x8 $x8x8 xD>G x 5? >x 5? &x 5? ixj&P xG$ x\ xpٔvxS;} -6ycu2 ycu2 Lycu2 Hycu2 i ycu2 y4Zc9 Jy4Zc9syw rN yh\ \Ayh\?y+ K yJY9y {{`?Fy {{` 1y {{` yuHzSyuHz 0ypu cyσmZ y%VAy%V!y$L[7N% y1?> yɝL y^tȲmkCyIZk yÿ=%yÿ= y+eu' =yYo^ByYo^t^yf [yQ&syQ&y5}(y5} ydj3 y^ y~ cyRyŘ OyŘ y [Ts y G#7xy!#T y!#jy!ʸ` y#|Wtsy#5k !1-y#|=y$h17e y$;R+y$Үk8 # y$; y%`| -/y%N|"c y&(_Dž (4y&+i7 y&`{v"N%y&sy&9y'Sx?#y'+q2q y'+q2q y(TN93ty(2R y*%d!,y*JMj-y+{4%b&y+{4%by+{4%b y,@|`Zy,@|`Z y,xdo+3y,xdo+!y,K$&dy,K$&d y-5=bu y-/B?t y.S Sy/ LJ/ y/\>] y/ius[ y1DJ6S?Oy1Ea`y1Ea y1Ea i y1Ea ( y1Ea| y1kG y1 y2!E y24' ay24' y24'y4Q:m$y4Q:msy4Q:my6`|y>`y>`{y>` y>*x@"y>*x@Ly>*x@ y>ڨ+nYy>ڨ+nty?`vX y@P{ ay@m$y- e yAwD yA?DyA yB9CAvKyB 5yB 0yB 'yB ]yB yB  yDF yD. 5ZZyDÂ$yE 9l yEr@b4 yFi\ yG7 8*yG yH`#yHH nyHH lyHH EyHH 5yHH ,)yHH )yHH s yI0' yI0' yITǍt yI-?t yI-K0\ yJm?? yJ1_J yKNN2 yKNN2?_yKNN2 $yKbsm[ yM.a/yMi$yQ rp cyQ+~b1yQӴٯilyQӴٯhXyQӴٯ!yQӴٯyS7 ( yS YZ yT˨. yTVv'yTV yUv܀ 2yU0].?yVLЉmtyW|bm yXM)A9 $)yXM)A9yXjm \7yXTxҵkyXTxҵtEyXTxҵ 9yXTxҵ&yYRfyYRkyYR yYR myYR aAyYRYyYR yYd $ yZԧ\u yZԧ\u eyZԧ\uYyZԧ\u iyZԧ\u yZԧ\u &yZԧ\u y[H@Sjy[U-N: y\zE y\j}y]J (_y]py]p y^5"y^5 y_l1<\ y_Drv$ y`<39jy`<39 i y`<39h y`ƦXYSya[NH yan}/ yb80嗒LycW[mE ydTԝw ydUEyeD5ך @yeŲ:j yfSxSygIMOғygIMOғ/ygIMOғ ygy7KBNyhQ%/%yhB*yi9Piyj{?ykP/u~yl,$yl$R\ ylkwuK? ^ym'4q , ymCvX ymCvX ymݼsgmymݼsgymݼsgyoS=yo*J ypTQ5ypw*?yrQ [yrQ $EyrQ syrSV ysW>nS ytĐ|ytC!E?XytC!E iKytC!ER6ytC!Ej ytj`>jnytj`> yuKYcyun a yvo@jyvo@jDyvo@j5yv;ij67FyyrBT`yyP"L>yyP"L$yyP"LSyyP"L yyP"L yzDB L%y{DY~ (y{ad{Ly{ad{L y{ad{L y| P1>y}Wus6y}Wu y}FVa|y}v6.y~?Hz2 y~/I, $y~/I, yσ(_l y- kay `!y `y `yaDE yNO ?yਆ yjه, jy䉅Y yHcjyHc y`#$&y`#$yⴞ/ 3 yW`yKV8>yU?yg!f yj۳b? i+y<ËC sy eC+ y%lI#Ty,&yV5byu, $yu,?y R [y R y;3nBL \ yRc.KyRc.d yۆ2LyFn (yFn ,yJ"uv#y> y>ty>k y1U?C a4yJfCyJfCyJfC yg( %+yTMQyTMy{ l y7l  y7" y)RYy7 ѣy:@AWy:@AW y@{K{? y;Or3 ,,y;Or3yG <yG#yG yGjysϦ% ysϦ%tyaN=͜yp6c ywv!?$y'4(t y`/ISy`/Iy`/Iy`/Iy`/Iy`/I y`/I yNaZ FyNaZ yNaZ ,y*խ?y(; yceyݫ-"oy1#q Y ygS1y 4yWَnd yBd_ y8r2 cyu>a; 3 yu>a; 1 yP}~pmt $yP}~pmt? y%WJ y%WJ y*+^\C yFTxQyj k&yK yC y e|* y ­UK $&yOx(I /yf ytyQyyu5'?&y:|0yBȨY y2O=yU-t yf#ĬSyDK'@ \xyDK'@MyDK'@*yDK'@yDK'@sy@y!{? yҗyM y.H!yn,=yoEYyoEK y4>@Yy wy jyy yM y+r yhg0^ yѻCx0yWcgTSy\ m.b y­өC gy3HQ yK:SyK:S)yo' j y9ŸBy9ŸBRBy9ŸB?y9ŸB"y7~]y7~ ygbJygbJyɏnhRyɴyty˘MjsD?1y蒅 (?y蒅 ( !y# yhs@욁 yhs@욁 y?ZRyRoj'y͗_5 y͠2MyͱVIR-WRyͱVIR-WQyͱVIR-WRyΙ)? yc y} yIaV?yIaVyIaV y˓Y yғӉɎ (y2gj y9 " yԍgsy+T`hyրƄ8yUGvHyUGyhQ& yץ6 yyE$y:Dmy:Dmy:DmRRy:Dm>y:DmKyٰ8Z2 y[l]  yת8, ( yϱnh!yϱnh!y/N< yaZ $yaZ ay:rٹy Tdyᡸi y*c]y. ynGfDye y;t yE& (y' $yV y"ً y/ y w y w y詂hv yc;!y޶pw9P yB2 ytL0 yZ j y󡐇 5tS y(%)8RN y}B)y}B yjsoN y> y>y>ty> yWLt&yWL yWL ypd By6(VU r yvjyvjyvjQyty2+YYyty2+ y W]js yu:7Dv!yv,\y=zzt<]b z W { z)|h z)| z_Xh8!zEe%? z\һ>#zswuCz(;m[z=zS )zSzS zlyhGzlyhGUzlyhGz\O[zRV z9etza]>tm z^95 z< Qz< Gz& zlaJzº `zº (%zº bzz .Rz )!8 $ z {ڐ9 2vz!Qfb=|z!Qfb= z!3S?Kz!3S s,z"(*T5z"(*Tz"(*T z"Yfz"L! $ z"L! ,z"L! xz"L!swz"L! a z"L! z#)9> 1#z$cic`z$^5D z$ PQR z$j+z$ ,z$ s z$V4;z%0IGۄ!z&(!Pz'u`qz>3emz>3 z? 7X" z@D ] z@zz@ztzA%zBDyzCrY= zC/0uzDJi DzEL| zF8-W zF8-W zFbi "zFbij zH#t1NC zH?]i zH\{v zHF&~ zIH.O  zIH.O zK*U zLo?_rL zM'EWszM'EW szMUJhsX (zM{v zMw5JGzMY zNoS/ zNt jzO%9R zO#ƥ lzOt/ſ zOn< zOYT#CzO. 0zO.?zO. zO* SzPyl \'zPyljzPy9zPyzPy zQ ֻ;Vz"zSJD7ZR.zS#R zTI&RzTY zTΠA@ zW ? zW1FׄzX^wPL zY5}=)Y+zY5}=)X)zYK᭧VN-zYK᭧VR zYu); zZ>ֲz[Z/ #z[٧`cp?z` zb\؉S!zb\؉zct*R ze[aCsze9 | zfÄDzfq $zgMytzg l zh@%=t zhN{먐d zhp!J ziɜDKzkǾL`#zlHUUW#znj՟czoxszo?>zoItzp毋  zq'Kzq'K zr vpzrXwKzs@TYzsةןzsةן0zsةן'zsةן zum&U?zuЛR,zukuzv]2A -*zwd^Mj zwfɍzwfɍZzwfɍ:zwfɍzwfɍzwfɍD zwGmzxe!+3$zyk|, zy, &zzEr z{Nav\z{Najz{[ߗLOz{[ߗ z{ ,w z{#Am? z}dq ;z}}oz~KCl z~KCl $Lz~KCl ,Hz~KCl0z~q ? z~0,9tz~0,9 z~0,9 z蠡l* z&ᅦ z&ᅦ? z)dzY$|zau*zau zyn z=ePI z=ePIsz=ePIHzAE23 zKLqir- z-*zg]K zN z:?{ |z:?{ zuvx n8z׃b_ zb@8zNd:)zYzY jSz-BKz|T%CzIJ9zZX z% iz>Cf*z>Cfz>Cf zlIw zBETz\M<[z\M<L<z\M<z\M<S zZ%6kzYa2$zYa2D zYa2Q z-K٧X # zNE|zNE| z;zd zܖgzܖgzܖg z'[$z ze<7*z fym (Gz fym \z fymhz fyms zmazma zmat z P"zDE s zIuC/$ zO^Gjzwtz Nz*P ztzC"s zע~($zע~(bzע~( zע~( z} }Mz}Xoj z㹨N$z㹨 z=z #zi z= zK ##zfd \Szfd 6zfdsznOF z!{)K zF}zjzƔ $ zƔ ,zƔ ^uzƔ sCzƔ jzƔ zƔ azƔ zƔ  zE8zED zVEe] zz\zzRz[X [j(z}=z}= ztzA77ztj z~v|tzai0-zai0zai0Szai0zai0 z H zu0gрz@@/ a1zs3 zӑ5;q+ dzpp z\ԫc&zjτ\ h7zjτ\ sz/zny: z[Juz_KrDz_Krz_Kr'zX \Sa zX \Sa [zo@CzzC zzK z|NzhzhzʅJO?z^.`j z e zj zƮЙ| z–%ܢ?3zҮNVz Ygt0N z:$H %z:$H "z:$H z~ zyzl*?zl*zŊ^yP zƎ CvzƎ -zƎ zƎ  zΘxzF =( JzF =(j.zF =(v)zqL-A=zqL-A=s z.2[z.2[xza?zNq6 z9?xZ z9?xZ z9?xZ \ z! zK$ z㑥a  zpje j_ztz tz  z!Nz駌% 2z駌% i z駌% 9 z駌% z֌;vz֌;vz֌;v zfz%=.[z^9m zZٞzZٞzR wk z'و +z )7Q9ztV3] g z퓃z퓃#z/P2z/Pjz/P zh?O4 z'S gT(z zYz z38WJWz38WJNEz)$ zAg=O7zAg=OzAg=O9zAg=O , zFp zj zdIzETeG/zr㏢ z{I:* zQS ^ zws ?Bzws z=z= !z z3}&:z'ps z'pt zhpP mmzhpP - z5\ z5\&zTkCKzq[0Lz]@,#z Kz>C; i1z>C;#z>C;j!z>C;tz>C; zbkL,5 zRdJK{ %'{e¨"_!{e¨"{6 3{/|t {vMa {Ў~&KL{Ў~&k{{J{#^Aj2{#^At{(4h{&fK={&f{v {(^t|{EYN {xgS-xu r{-^K]?{-^K] {>k A #{\ I{ g#v'{ g# ({ My ] { m^F{ }X?{ }Xs { {<{Fv{ @h { >&0"${ F0Q'{ F0Q' , {gx '{gx %{>9/{>2{]OaĘ{FR{F8{7?Kk{49"H {q {Ņ&b{Ņ&b{b/ܖ2{E% {0Is@ A{0Is@ {} R? { @{ @t{ *;_9j{ 3 S{ k׮W3 ({!L7d/{!L7dD.{!w| {"\{SX]{"\{SX]{%L4F{%.' {&'x{' 0 /j{)4#z{* @ {,Ĵ<{,Ĵ (6{,Ĵj {,Ĵ ${,Ĵ {,Ĵ , {-"rv{-"r \ {-Q~>0 {-ۘj{-^HV {.E(G}v{.@0{.@0 #{.@0#{.@0Q{.@0{.@0{.@0{.@0{/50myTR {2SY j){2SY *{3" {3" {3""! {3""!Q{3""!2{5#xׂ{6Ȳ;{7Lge {7#y> {8U%w {8wN{96p} ({9&L {9&L {9YJ3{9 Q> {:0ܶ>{:+L {;yRM>{;yRMK{;yRM {<W1 a{<W1{8&RO{?d=gӟX{?d=gӟ={?d=gӟR5{?{?hY{@o?u {ABB&{ABB?{BP0{F9S5 {oa{9> {&P#` \{&P#`v={@`|p {@`|pC {{c ${Oa {˺cfs %{͐N{*uLI{_t=3 {_t=3] {_t=3 {H!{Hb{KIj{KI 1{{ (S{{?{|r{݄3_A{݄3_{9iX .,{Bc {/ >B{{0{\{ {\{ i"{wD: L{wD: {}U ('{{Y{9>l$({cq {ӪR {B}U ^{ QAQ?{]pUcv {"6 {{ұC`N{0X~ {}{E {E {E g{E e{Ej{ {~dJR{?XKLp{YR{e4 {ʗ c {n81;u{ t?{ t?{x#j"{HI $ {? {? i {1*7::{C^v{C^#{vy[?{Ȁ04;{pN~{pR={1)rj{Q6+Z{ɾet {1s{n_sj{ʬ4ǧ {Rd{nI${Rd{nI m {m+>6 a {RO{ꁝ3i! {l)"{ 1 {đ- {a t{a m{a if{a {at{a {ӄi븍{a1 {{׋ #T{ {؄95zC:{ؾxG` {ؾxG` {ؾxG` {K# x? { { {L"Z{Zek {ڍn{:᝛jv{ۻ4wO"{ {4 { ${绰%7 {7>! {>G {)Ǜa { | Y {bpt {f1>8 $ {* {< {Anj{Z` { ɱ_{-%U| {'yc({8 {8Y2{8+{8{8 m {9Lʜ {?3{?3 {AKWZN{bZ I |3>[||u(? |-4O |҉5|kQ d|۞(|1˲ X|1˲M|o~bi |t{g& |WOJ |UZS]|UZS| <N|gD|gK| < s |"Ɔ]d|"Ɔ]R |Q9 | <"D di| <"D d^| <"D d ,$| <"D d #| bR_ S| bR_ a| bR_ d| Ds+| 7H| yy! | =Bd}? | /=%6\| /=%6| nO-L| h?|4԰!}|8YEqLq|:l-"|:l-|"Hb- |spr |л i |us% ,|]Kp ( |SM7|SM (-|y{<|y{<P|y{<!|y{< |3nP|Qԗ |0a! |WV|Fl|;eGs|;eG ,|;eGA|k8  |k8 j |Ej|W8/|jn , |\]<%|\]<,|\]<Z!|BI?|W;u|W;uX|W;u%|9g|9| +b $ |$&q\|%Fk|%Fk[P|'NB -|'zZ.|'-p|(y֧t+|(y֧|*FAW |*m(Z ( |+ggˑ|+~qTf1|+~qTV |-D-1|-I.K,|-9`HNU |.2c>"|.Hrd] |/ LSq|/ LSqS |/7a|0lCg|0ewb|1/v |1,?=|3  $(|3  %|4 a$ |4[|5_o ,%|5gA߿?|5gA߿ (|5gA߿s |5sR |5i^* |5. |5kCv $@|6Q`7H '|6&~x:|9M(p  |9T_*(|9T_*( |9T_*(d |:dء,{ |;xh[2 4|;$:#|;$ 4|;$ &|;$ (|=xg4 $ |> kL|> kL |?!dH|@4  |@akPZ |Ae?H% |B;JK_|B;JK_ |B zg|B zga|B zg|E7ɂ[|F:_' |FJ~qw ,!|FJ~qws |Fg| !|GTY|GTY |Gd< |H4q s |H |Hk 5 $ |JRXR|L/$|L/|M&ZS-|OE.~, |P}~ R|P,|P;W |Pz<>vN|R*u^|S  |T!ݳ G|Tk |U|"|"|UA|VQP|W2 {|W21|W2 |W2 ,|W2 i |Wdu |X@ea |X:~?|X:~?Y |X:~?] |X{t[= $|Yndž7|Yndž7 |Y o"=|Y o&|Y(j?|Y99롬ws |ZDS|Ze5tb|Ze5t |Zԧ5o? |[Q $ |^jkɈ|^jkɈ|^jkɈS |_S|_S |_S |a<&_\ |b\|tW|bkd(|bkdt|b d|cI!3@|cI!3j"|cI!3 (|cCt|d^K|eŇ_%|eŇ_ |eŇ_ |eŇ_ |eIh|g9 i |ga0 \ |hbINH?|hY(߄%|idOXt9|idOXk!|imhG9 $|imhG9|ip; "|ip; |j [oV|j [o$|lKS|m,. |mpXk|mpXt3|mpX|mpX i|mpX |n& |n& g |p 70^|ptq |q `NiR|q `Ni |r  |u3J |u3Jj |uƱ ;|uRD|uRd|uRKI|uRY8|uR/|urj |v)2kG|v)2k|vLqj]j|v`ޖ/ |xB1?|y׌ |zOtD|zOt|zOt |z#-|z#- |{RZ|{UN/%N |{.6O|{.6O ||YZ  |}JAb|}\ c |} -|}4* |~-I |~p|N>߫d |evcJ)0?|)yh|o8fQ! |Jk| G@A( a | G@A( g | G@A( 6 |[BV[V|[BV|0et|y R/|7 |>3M]|`Lj|#K M |#K Md |aQ N\ |rQ& |rQ& , |dO?$|dO* |^k4 |#x̥~cd|G W|{@ |{@ |yvn|Q\Kd}|Q\Kd}]|Q\Kd}|czn | |o8 [M|92jY|92|92 |92 ,|Oו]0 |iOs |xL|xL |'N+%|'N+% ,|S(ˮL|{B#|{B#|{B#`|{B#R|{B#|;XU |\]L|iO |2/?*|GN |!uS,_ |tZcXE|_? |eF>S'|ȏ_U ,E|1As9|1A?|l-}v |ET |<|Uը (|W| (|z;gj |z;g? |7/2|7/|F28rC |=z.|>%oa -|]Y3 j |ߴgK|n5nw|:N}|e4kBj|ĠK |V̋0%|sT )|sTRy|sTQ|v (|vs|v |#k|#ZS|2;|Q;CE\|Q;CE 8|Q;CE ,!|Q;CE| =| |s* $|ĸaE|{#E|{# (|{#j|Ųj,|2|2 (A|2 |2 |2 i |@tͻ||@tͻ $9|@tͻ1|@tͻ i|]|Y&|]|YR|C 8i |C 8i c |)ʺ|6<+?|Y *|Mm] |7"<>|@x̱u|RZfY@ |͉]Sp$ |ͤ7(!|ͳL1k |rS<|0N?|j\ |j\[ |(% |<TI@|%` |k\d |ք@w? ? |`&|` |;.Z?; |Nq |Nq? |Ub%S |`藶 |ٱD0HK|ډo- %|ډo- |ںS|ܬb1 c|㖱i?9|ݏd1G ,*|ݏd1G |ߚ|.eQ|QfFo s|z#|zR|㠝N a|㠝N (|㠝N||㠝N gP|㠝Nh<|㠝Ns|㠝N |㠝N i |!5R |[3hS|++ܿq|++ܿ|F$0|F$|N|q3 |#l3h |ޒZ|* |=*qo |P\Y|P\ |D}~F j|,6 Y g|,6 Y|]JD? |xeC{ |xeC{ |*$* Y|*$* |*$*  |+`HX|@?|\i/|\i|\ij|\iZ|~-磐v|5T.0|RjG|[u> |O\j|O\R|O\$|O\"|O\| ^f |IZ |Db9 g|\) m|oĬ1||rQ | !x]+,|Aq,_|Aq, |3/DS|3/D |\( |z/ȍ]|z/ȍDP|,{7= |DfS |V^LK%|V^LK ,%|V^LK $|% |-|tB|-| :|-|,|-|k ||-f \|-f }fO }HҴI8 }D }? }8yPE }|yF^ }XZ{T.R}mT }# ?}(z*b}(z*b (}(z*bjr}(z*b $}(z*b ,}4 7}J9]},Ŷ ] }8+t * }S, }UQUa}qG:zY }f, 3}3Q- } +*X$} {Gs?} KގB} b6] } l \ } uZt }0KߒI } hcU}~Rw-Z}DM[_LY}s }R?}\N}AO}A}A }cZ3G }U 2}(~S_}(~R}(~Z }Dp? }2_ }R(4~?}o}oQ}o}40Nz }YD}Y}<L } Z[8h:} Z[8h]4} Z[8h#} Z[8h } nzsB} nz 0} nzt+} nzk }" y}ֳ?i}" y}ֳ <}" y}ֳ }"(#ɮ*k}"g@ w }# <R@}$V0}&ԣ }'1H?`u}'1H?`u }(e }(e }(20Pݙ 2L}(20Pݙ $})uUYs })uUYs2})uUYs e%})uUYs })F7})ih})iY}*ǹX s2}*yؠ ]s }+2TS }+D;U},plA5},plA5 },plA5 }-$Qs}-$Q ( }/&7 }/׸V}/׸V }/׸V]}0." }1z#W]%}3M}3v@ }5!@|$ }5l:z}5l:v}5l: }6geyVQ}8S7I}9ʠU}9ʠQ};?Ʀ^,~ };e»mR };֡Bf } }HqH2}IQpm ,s}IQpm }IQpm}IQpm }IQpm (}IQpm }Ip0mf }J+!s2}J+!t}J}0j}J}0jQ}JRG}JR?}JRS0}JR}JR}JR }L锏f[ }M5?~[ a}MDWa}MDW }M ?}Oy;&}O}] l }O pQ}O p}O p}Q(z}Q}Q1)v c}Sƅ` }TU2'N}TU2'R}TG }Td|R!}Tk~}U?u}U!hU}U!h}WYPI1` ,}WYPI1`X}WYPI1`M}WYPI1` :}WYPI1` }Y}O[_}Y}O[ }Z{ΌR9}ZUy>}[&ޚL}[&ޚL}[& }[& }[&h }[ ,}[  }\=W}\gm }]u }^H=}^bċ?}_1[# }`X}4a }a a6R}b&}b׎$[}c,iUZj}eqb}g37ljR}gٕ }g_EN$}g_ER}i2 }iFnSU }j\* }j6KY}jiD }k"׼ŵ0 "+}k"׼ŵ0G}lt?}}nH15 }nH15 <}ob}pBt}q-3z }q~SmS }rf(9}s)7&}s)7}s)7Z}s)7}s)7] }sA^8 }sRՎ|G}tLTrKO}t~ }t֏J{}wXg D }wXg  }wk7' s}wk7' i }wOjR;}wOjs,}wOj }yIcW B}yIcW h}y[r=}y[r= ,}y[r= }y[r= }yCK`}zcMs%#}{2aN`b_}{h$:}|Qܖ }|a] }} $нC}}w\}ޒ]R }X҆;&S }| }ÍtG } >8 } >8<} >8} >8 } >8a }S$}_}O}4}L+}vߢ ,}vߢ }ڋBv})7z1O|})7z1O|[})7z1O|Z})7z1O|S }:y }h (-}h }h}h , } ?LL }ꭖ}T }T }}x] }, ? }7 S }w+ڄ j}oL$}oLD}-0,\v }۵P{ iK} ~8}_y $}_y }#M}%pR };4n&}"|}&ZK}d1C}d1C }ip },֧w7},֧wR}ڴ1; }u- wC}u- wK}NI1N}cVG a }W$ }2oAJ 5}l% 3}l%  }0-Q}0-}0-}:{=V}hkx}hkx}TP}X a }dGJ4k }Jz\ -}# Na +}%"}Kxs S}>^ }֌Q?}4!}[PB}KV= }MnU8 }j: }n?DS !}n?DS }n?DS ,}91*L c}N{E }a }.^v}(i&WV}L<iK}[.̬}[.̬R }P $} ,bd}2}2 c }2 i }XL=I }6ikh}d=ٝ3}d=ٝ}RgԒI }>Ě}[ȢKH? }mn ] }Oz#>}ӂڍd }ӂڍK }Ң+a3}!gt:}!gt i-}!gtj}sg}ss.}s a}jc2YR}{6 ,}Pnl}Pnl a }R }d?q  \ }kk}kj>}y461 :}am}\}A}}]}v}U$}S}}L} } }ӄِ(D}ӄِ(D}ӍXqT}ӍXqO}ӍXq }ӍXq }ĝn. { }Ԇ$->K }։2;. \}։2;. }vϗ ?&}vϗ }ב.|D}ב.|R%}H,D/}4YDq }="2}$sR] }RS%N}RS% }ۃ.TU\a}݋-kc]}݋-kc]# }ݑ6&? }ݫe!R }) ng},w },w },w }މ`}R }O }-}t7N}nH! }$#!v }3mjm $}KiEj}`Sk}仔%R }hoA}]# }CN(},þ #}]݄̊}[tH}Y˸hx}Y˸h}:q" -}:/P }<}Jvt%}<}Jv }<}Jv i }!!" })$kq}u tN #C}u tN }cȄ }*$S$ };(! \G}7.u}݉J73 e } z( } z(aA} z(}{?`ݺ ,!}{?`ݺ}{?`ݺ }VMz4 }uPBf}uPBK}uPB}uPB }uPB }{A?}?l}?lZ}c -&}W8S&}h>?}h>jx}&e~(}{?K }&8# e~I@~k78P ~8&/? ~$Pe} ~I&. HG ~ƅd ~#2mS~#2mSV~#2mS ~5k&l ~M~"϶v~JoLbR ~do&Hj~r; >~c~4 ~u@Z0~&ʼn*~ ҳ ~ ҳ [ ~ _ ~ c&9 M~ |Z- ~ K#m~ K#~ K#R>~ K#Q~ 3[N ~ $w^VIQ~ $w^VIQ ~ b) ~ -k[ӄ ~ 2"T$~ wwT ~$E ~$|P~)5~+51~yiT.]I~J,|~\m ~eҋ[? ~\RI~ ~VK(~}HDD~Q7l_ ~.b ~e'AZL~e'AZ ~~j~~~ p ,)~ p&~ p \~ ps ~&vVR~ Q': ~ 3Jvv~!S ~"D`JU~$n-2=D ~$q@~_~&$\c?!~&2'%D~'Jݡd ~'fX K~'fX K ~(?] \\~)~.~)~.j~* +] ~*f $A~*f i@~*fs~* ~+ip7 ~+Y~,6ot{~,6oj(~,VՄp ~-|b~-|b ~-p!* $/~.[ [~.[ [ ~."5:~/r;JfPQ(~/z I~0O:j!H1~0h\ ~1$E ~1du~1d~1d ~1ݘ{@P ~3T~5wX  ~5wX?~5}~5FH~6lauq ~6BGZ~7TYaE3~7TYaZ~7M|K;~7M|~7q $ ~8byc ~8Í)Nw~8Í)~8Í) ~8/pKu~8/p ~9!J ~9ZYs ~9=@K| ( ~9=@K|t ~:[t ~;N86[| )~;N86[|- ~=u>& ~=ɶ$~=$G - ~=-[ D~=-[ *~=-[ ~>Jw ~?](g| ~?.TS ~@ ,~A c%$~BŞD j ~D,b~Ey()R a6~F>_&~G%~G ~Hķ3zj ~Ix* ~Iœih , ~J-4G D 6~J-4G D ~JdƬIh7~JdƬI ~J5%~JO+kd~J6OR ~K? ~K Q ~LO{?v~Mjt~Mww#+~NZR+~Nt;>P ~N` ?~N` ~N` ~Oaհ'h ~Ocv v~Oˎ|?~PVėMe~QP{@Ts ~QQH $ ~SAH&D~S'Џ ~Tl5~Tl5 ~T@@ ~UEg~U<;5h (~U`S [~W4*jj~XFx4ņ~Xدq ~\wa¢~\y~F<| ~\ol#-~]h52~]y'Nk ~`;",~`;")~`;"~`A,$%~`\5;L~`\5; ~`\5; ~aq$Wa Q~c1dÅ i ~c_Mzw~d:~d:R ~d?.^Q~d?.^Q~d:v=~e1A ~g.]j ~hk R~hx~hxk~i qy| $~i qy| |~i qy| K~ip 3 ~jGo' ~k[?hp"~lXa-N~lXa-~mbK~mbK ~n~B͈ ~pFu ~q/u!Y?5~q/u!Y?#~q/u!Y?"~q/u!Y?~q.i> ~r6^v~r6^ a ~skEXR ~uM@9ٚ 6~uM@9ٚ?%~uRA~uRA ~v`ue ~v 3-~whIt?~whI ~w-7 O~w-7v~wCd *~xl v~y#>xw̧N~y#>xw̧] ~{ w~|=X, ~}Fj6 ~}{~ $B~}{~ , ~qoS~qoK ~nR~#h7V$~ʑb4'~dF\/~tUF0 ~* ~wu$ ~sj~`+Ux a.~~ucK ~FSw~E݊~E݊d~E݊N~xfd ~ E~ ,~ ™H 1~ ™H ~W^CU~e:8)~+CV~+CV] ~r9f ~r9f $"~r9f~r9f ~ Iv~ц. ~*<N~*<~?W~?~n~?~n~ ~y(hl~1:~)) \ ~2~! b $~;J?u1~;J?u~;J?u~_=Nޛs.~< ~CSCHy~y;` : ~+T "~4z[z3v ~WM| ~WM| H~WM|t9~WM| ( ~xqv# ~9j~Nj)I~Nj)4~Nj)L~DaS:~x☈ ~IX~ ~IX~Y ~Pa c~Pa ~wb8 ~)֙v~ ~ jC~  1~  ~  ~SF@ ~mdN~{9{-k~{9{-t ~ ~B] ~% ~a$'vƽN,~a$'vƽ ~bU~pz;U~pz; ~2|jj ~2|jj,~2|jj e~2|jj~2فY:V~2فYz~ + ~MhO~MhOC~MhOf~ [/~~[ ~Գ¯ ~Οgv~κ'? ~ i1~Q:? ~|DYBt~9OL~MN?t5~MN? 2~!O1贂v~v:YzU?/~v:YzU ~Ooi~OoR^~o_~yt IN~yt ~Ӝ} ~@~Q/aa:~NnK| ~{7 a~,K~=`}~$z|~9ᆚ| ~&_Ӂ_ N~KDΩ ~KDΩ ~dnv i~">%8~">% I~">% $~">%s~">% }~">% (~">% ~">% e ~">%j ~hX ~It - ~[C~[C ~g@~g@C~'x{G.~`|I7 #c~x:X/ ~[Ta ~$EXL ~j0~j0 ~tVP 2~0rd ~tхl,t~TUZ \~TUZ i ~S # ~S ~jUK~\udrRt~\udr ~\udr ~\udr?~ؚeX~48Mt9~g[[~𥽇NRl~𥽇N~+~"R-~)BRrV|~)BRrV|~h!~h!c~L~Lt~1Mv~^,o_R~RC.0~3in ~O4 ~Ñ1 ~/?~Ob@Z~L:={~xS ~.w#t5~h;~NAd>t^~NAd>~L08~˚$ ~3aL~PHLjJ=~PHLjJ= ~VSXA ~̃ k ~̃ t ~!g ~r6=R ~r6=Y~r6=~͏G0X i~K( a~6RP#b~ϙlQ^~ϙlQ^$~ϙlQ^ ~yӳ?~yӳ~yӳ+~yӳ~2YL~Ѫ6'~3by~+( W ~M%[' m~M%[' ~wP ~wP &~wP?~wPj1~wP g~wPR ~{:8(~{:8-~+1BN~9z $ ~ե\ ~3 ~ـ%|F6 L~ـ%|F6Q~ ^<?O~6sR~\~L ~oh/Y~oh/ K~۬_)PuN<~۬_)Pu~_xYP s~u#~󘝁>~-H0"~-H0 $ ~ݻIDq~ݻID~ݻID~ݻID ~&Xƫ;~YѓG~YѓG ~~!X?!~VM8 ~W3=~]=1t+~BFw # ~c_/~騇4ZR$~騇4Z~uTsQ ~U,~"~ ~NTiqW ~c"(O 1 ~3  ~e<~{?~W~=a(,~7= ~rtc ,@~'&e ~7VRr~D ~ i ~- ~` ~w}2M [~ΝP~.lc* ~$~9V~9V~9VS~%2~%2K{~%2 ~cs*\~cs*\ ~, ~d ~R ~($Zt~8T~RM~r ~r D~r  ~hx ~9 ~ӭFlR'~֫ ~v-~ CjY&~ CjY ~ t ~p;@ /vo 4c G?H(u -q6 h %MNklzJB12* /0 6;P9 ivGf .h  >{m_T  xzy0 xzy0 xzyL t}C_ m!k.5#!k.5!k.5!l]+ # -}n# -}N#{ۛ0c+k$A$رD $~o>%o"N ,'`J'=K7>j (_Xؾ. )G)a{)|++_ i+_ +_ +_ +_ s ,:Pj ,Hv(^ I,Hv(^?&-ێCH.i.weX-/29 4΄ ^-/29 4΄ s/ĝT 0s@Kt0zj 0뱗5 "0_c4*0_c4d 1>L1S=mp N1S=mp 1.K^e2%2sJX%2U%rv3 O3 4&8L4C"hT5/n)7%n ( 7%n 7PGBrvjf8fx ;>8fx |%9d]4 ;i0 ;voy<#>G<#>4<#>R =K) 8=K) $=K) ={% >Y'">"Qv0>7??H9& N{-9O 7PʑRPPʑQ gWjR./R4+|R4+R4+WS=B%9S=B% TK>R-TK>UN VI_4>V:itVZgVZKW ?3 -XIU*"XIU*s ZbZbZbZX8Q ZGR,g}Y }yka;ZcR0: ++ d($  7{ a~b: F9+ N5[xQ N5[x, |Ndf^ (]gPv0R @$S@$S@$kD9tB  2s  2  2 l;?zP^ R0eSeSSXeS-eS$ NYҿ $OIQ7"U "U "U ( "U ]QK&ŀ&k&kLh*V Ԫ2E A(Q PφW+  O5 *9@ڒ!~ $9ڒ!~ ņR1?n|MQ[Ӌ (Ӌ =8x =8x c m9P/ 5n`_^%. \##7(dQC C ^SC \;}vtZ (M7 g&(M7 [Fk[FtЊҭR IPdqviD!ʞl&qiT"^ S /% Bv*oƪ * rP2?(o*(o*((o*߄>m!  z LZ   8,Ad/ QAb QA, QA  QA !06A_G  F@ ,c \-d5Nd5Nd5Nw͛ +Z??  ˫θ _ GN_ G ӟXY f,' ΘVs؛AZ-ΘVs؛Aa,ΘVs؛A+ΘVs؛A `榥`榥- d`D:YWd`D:?d`D:<d`D:d`D:9 Ϡp. Ϡp. :έnvjsh.W g0Ƽ ÒUe C nC ҟ ؝CUq<1N7 iVԍ귡B gЛhgЛh p8=`p8=`Qp8=` p8=` Մ{q? F - pLUR7C! )}N "#P/HT>zP ? ہft %CAxDw>- $p͸h ݂H 3 ݪ퐱%ݪ퐱%$=۹@;Y ްm+9Sްm+9ްm+9ްm+9 CSFKl-K I֮I֮ $=7#9 .K rD06/d/di _ L4 >U0 Vx b#G jS ) Ee Ʒ$NxNr;r/6zB%}OUPOvL'POvS!z ꣻV"ꣻV#ꣻV ꣻV$ Kt/Q}l:W}l: "!}l: (qi ,(qi ҕt:8ҕt9ҕt ( > P5R "lKF 2<nKLYv (SLYvjLYv.LYv-Ή]?cNZSgvQ $gvQgvQ gvQ , ^t]tt] i R Dָh/ ,h/#1N Ga Yp | R H w R Ht3 R H  )## )##)##x)##Zh%~ ` e 0,EV5 y\t b!  Џu iЏuj?Џu "Џu Џu ,+w0s R% >冹R >冹 {3 _ N{: j ?%q kb翽 F V'r  ^F?D !] $ raM" #RkWIK1WIK1Byӂ ByӂByӂ $ Byӂj 7rxd4p SY: }[OߏYF , hr thr[52b52bKX(CLpt Nw iTNw< ? ^ &Mm:рQ)@Dzb [x ȞKBȞY  ; ! H)} $H)}bH)} i nLq& 1 0 \y? }2d^PS-ZGW2 imn ߩ ,# yI.s"ܦj"ܦj e2"ܦj "Dt#4b#J*w $% $z$% $Yh){$Yh){S$Yh){R$ΏJ3d %C.d%b{?C%ӻI (%L6 &"R֭ˤ '-Vz &)  ) " )K# a*M0+}v+ %+XAx+d#/Ce}k/H5QL/0q ,01 1ӕ8 2Ks3o 3/4jY74jY74jY7Zc4jY7 +Y4jY7]5zX6(K$s6'B  *6g cH6. D>8|KJ8tpGg9yv:G :ZƂR:${;[f&k ;x K.W ^ c#WoQ[W={*|W={*9 W}}5N Y PYR&BXYR& YR&QYQrw[BYQrwYc ZYe}6Z>3b!Z޵p`9 Z޵p`9 Zd?^Zdj#Zd ZdR Zd i [Tt[T: [T: #]b0F ^~"]^*zZ c ^SQn ^SQn # ^SQn # _ڛv _駲2e+`BaDKaI?aW[a> % `b|`DRb|`Db|`DCb|`Dbe"N)b㪢x>b?c%a)4Lc%a)4 c2NҎ{jc2NҎ{t cl.td* 1O e<le<e<] eb, f$џ& f;K a fW6YShEd hl۟h+m&[h.i2h.isk`yW l zmaZm~%Q0Km nְnְ mnְnְknְ|nְEnְt)nְnְo=6CHN pO. pN /T pcFtlpcFtlPqSlTqi?Qk >qi?Qk i qi?Qk s&# Ms'&E%es'&E%s'&E%R$sR-sR-tm};?7vCLKvttvt i"vtvtswʃ<Ty gzy gzEy gzL5y gz.yI;JyI;EyI;yI; ymF>} /ʵ 5I(5 (R ʅtpʅs'ʅjK࿤*- GC ,- GCs\js\j %X%t%X%Y%X% %%X%j%X% %X% ]B]B|) ]Z8Zr^  [| s c =9  7bJ AAlCS:  ϧRKal tAoBQ }v*ΣloKs- N8 N  NY Ns B 6R|}mCy ^J2;t &DX  ! U ךcֲ|6!z - Nv e(j]e( [e( mPn,;k+hj۸=hj۸ s׋q4"S " j ^ Z+5))1# Y)1#4)1#?W\P? GRʅ|FQF?|FQF |FQF S+S+ ̖R; m WՇS lGVRlGVK 3}_K3}_K ˷ j`{?CtN64+j (J1_ ..xYptxYp: DDD jD 2kLH ao7%Pz3"3DA 4#$n9 , Bre׳0& ]ani>lrSi>lrc' -}? 4uk FǼ6FǼ'FǼ] gmCjMCC ,C C ,ahZgF&sœ;MN S [ ^[ E[ >[ _r^D # * F *"9ToYөNXͷF i3F"i3F 5/: rF32.E`~j c Z ac Zs ő$c ų)X =H? ƀbjK!ǒ: yȧh"1RȶZ* IqTR qIqIqID #fL %l % %R#A ,z9b6̼z)*?>̼z)*s̼z)* ̼z)* 5Q (2 # ά>, ig) # m% Z =ʅ , "?fj;Rc Lf+Gкxc B8-> FfGwqs4FfGwq%FfGwq FfGwq яҞڼҞڼҞڼ Q{RY-S/;FDFDb3 s؝*aȉZuٚo3o#]W (8#]W#]Wsⱇ/  T M  Yt$Y i `*FpL vvt 2^m s Z {./V- ,@1Ui*8i*L Ǜ9 . pM_. pM . pM . pM. pM . pM _4tuƻt}uƻk_uƻ uƻ {=e FwRؾ p$,O8#o" s!t'Y 4[0Y 4[KY 4[_ U 4M, 4M, *(  /^ )g ? lBW , lBWsN & gi0!? 9G $ ( s .͢Y3ȇ {? % (C: FN K~go>L./^ (@  dc f%μ  @) @ 5lw jJPsJ \ U ;U ;DU ; U ; eGh  w :[ O ( OOs Oh EqutEqu 3Equ #Equ EqukEqu Equ Equ g S/,.K `s  ?;o ?;Q bP `  !S} $ձ %2gw %?5Vl2|M5M- 9Y ndR:%UX`:%UX=:0C >JٳN>Jٳ$>Jٳ ?$(t[ \ ?~һqH $BX CxcED BElY,=KElY,=&GMR& G@LH7F7vHfOiD Ij Jn̚| !J|KG% K}b L LhB| LS LHɜ~OR*oQ{ OFC'P4L?P4L 8Qw 9 R.D? Sv cx{Sv cx{ S6ZƟSMTPSMT TX.5 U}6}!UMAV(\ VO{2VO{2k W,0CO $'W,0CO W}\V WÒ (X,B|X,B Y"_&U`Y"_& Z mi ,YZ mis Z Fm9_ a(G(a_=U|!Da_=U|! bID?bID bZ.^SbZ.^$ baR#GbaR#Qd_y egV+}eAKf? heS `PheS `s jY_l$Mjbі2lV5ݥ/mCi2q1 = m "m oHFpqS@U i q}MO q  s-b* s-b* tvt .Dtvt .f>tvt ..tvt .tvt . + tcbJt9ĩ tV\Yug* WyJu (lHu (l v>v Pe vU5 ( v\0 w_GDw_GD xD.xQ/} y]7 zh=] zUIzUR(zўkoT |}d|3|3&|}a'F 8*ˉbC$ ŽaVW0KHJkY qj .$FK?n!UjjZj<#}Pf IWՇ 1_t-U aO'gvlFBb| t`*hN _,W# 54{54LtQ etQ  V2ձ!V2ձV2ձV2ձ R ^ybBc ^ybBc?ޕޕɻ Pz ^ ǚkkKv `qۼ5D#&#a@R[ qA}8TT:@mc-ecDP%P%P%wP%IP% ,FP% $$?L?~ i) , /Y0eERNK]s~G!RIUn %_rgf iA ,0A ³V\ ۺ/Vv ЉGHЉGЉG dWJY J ޡl. ef3~a˫J9ŒO0KŒO0] I76?U j QD-QD- +ĝR)?4t9ĝR)?4j+ĝR)?4 (DH ia(`qR*i% zM ɍ(Uz!ɏuDɏu ɾ9~#<E2V E2V E2V F4x F4x W>  ˕0 bĆ|- ݎd>pu <{qp'qpK"qp̴# 07.07%07A FA i<As6AjA s6Gp}\7vBjϕS {# Жm. Жm. %T MQ}:<7 RU7 R/+c1= (6qMv@Ԍip]Ԍip] },- (fS@ j :GBBBBK`BRLB 6{)?Rc/~XvR ڨ. ; ڭ@l ( h͎ T9?9۲rPy .۲rPy i,۲rPy۲rPy ;=  ݈xȪKݼkƴz%ݼkƴz"DHOgdߡ{的 ߡ{的ߡ{的 , t# Vt#  {LU3:Z#6 1 (> 2 A \S[T O( ȽC i ='&*% i  i iL>`?rL>` Tm ?H[i? h =Zܿ cb, {8m) ? Bjd_DBjd_Bjd_\vs4c m JDP .T:rYd8fnL8fnR| #R| (l  wA4ͱY ŀ\ ,Yj9| Ls=A J\ iA J\ sETkm #>ԘQ uSR Q2a W MR W M( W M' W M W MS W M !^!/C!A,!V S "/j"vI?{L+"gj "gj#Cϥ- #cjY#4e.#4e.#4e. $㙍R %%f %Ri%Q#%K%%d' 95 ((Dx\(J^IJ(_]Y<(_]Q,(_]&(^*,Di!*46dthf + u1 g, ,jP, ,,s-98L*-98S"-~Ds .#90V.+}+N$/}D֪/}D֪ 1t32C ( 2~ףn0 ] 3O3 Vi 31oF 3o!]+ 4 XB5n(<j6?(Y 7Q2 80Z{3b80Z{3k9ra/iS93 cï9XmCJ9AP 9CLF9CLF'9CLFS:eRt8j;O'9 7;O'9 6;O'9Y ;T<a ;w6R;{sA ge;{sA ^;{sA c ;5!<2uH߼\>H߼jM>H߼R(>H߼>H߼ >vidD > d>k~ ?*HP?8kI#?EN\ -*???(0b@M(gRRl@M(gR @T!AL AJD"!AdF@R7AdF@ AO% r AO%{ BQ# B|{V B㥎N:D+9< D]37pEDrG ENb EY8jEY8FeL $ G6S3 GC*oK3GAF$ GAF$ GAF$ Q GǁGǁ>Gǁ "!Hm\L \ IfC J[sDL KB \A L6[?VjLiiv#MkcRM~:~A M~:~AMdLMdMd(MdMd N"%o> ZN"%o>?P!gzoYqP!gzo e+P!gzo*PjPjP@tQ58C|R9&?R9&? Su= : V s*;l Wn@)) W]WN\ X\HGR X MX%m X3X(xH0X(xHUY-h3%Zb(6rv Z􋰯vZ÷TN Z÷T^Z÷T \*] \0G57\0G5R']d׆=2S ]ީy_ ]C fN _T޸_T޸_T޸ _T޸ (`Tx> i`f-Q ac z'j bb fpy#2-v g,wú:g4 hN/(o =imoR"iDH \$j1 j# lSCtm~hDjm>! - n o R3uR oa7J pl#%s p*#~ qBoFXqJYq7RW"Nq7RW"-rF& r%rT<rTD6rT&rʲ@ s5x`AC u?%DU vCv'jxAʨt z6ߩS \ z; {]uL{]u {y٭KY|˻J|˻J|pyʗ|pyʗ:|pyʗQ|pyʗd|pyʗ |pyʗ |uaXt[}k&5 }u, skf52PU X 5A ] d(dj80٪FC20٪FC:&0٪FC t K b)^/5 ե-5 A5,~F. ,~F. ,~F. mj #>~uI,K uI, uI,d "ߗ"}j2d mM.  N sE| ?B?H?B %xb T[ 5]\ $YF*0ELǒyR5CB @!MN ̩" ͭ? ?""%""S+>` F5h nxT}@ǒ}=}txx'ƻz uƻz ƻzjkƻz ƻzbƻz 7ƻz 3ƻzt#@^R!@^R_ 2(F2(FK]_f8k?C ${F{H% NH%?<H%ۥ Lۥ L"v2&8RWF>/LK F>/LK N Ԗ) S>= tPI.-6W@+ h5dJN o`Zo` v- n 0K ~ ,Dn:Dn F!ERTEޣ  ޣ d ,Vy 17{ 17{ ( .| \ Ǡq #"Ǡq !*M  6@*R 6@*fI%>*NcMN $ 0m1Y J$Z0J$p# ,Bs i(Bs ? rP y {7.5.5`R55=8C a=8CjW( r Qޣ?)˜ +R 7#nD ^ sv],S ê3LO"Ybê3LO"YL$ê3LO"YS#ê3LO"YùC&PZV!/L|n/L|n/L|nC /L|nR K%ŀUb:tZ%A [tZ%A%/ɓkO5-vǟjhL I ȸߵXk 6jz U>$MY c{?c{ Pp %S - 4$y 4$y aoxj \ NB/Y onkgK l tNI_$ ˷GUF R|jRR) ғNO SmA&JC9:m 9:m i Ղ ?Ղ j]Ѽs v ֺ}>@ֺ}>R)ֺ}>Q sh 9sh? bI bI bIK Bis , Bis: 'ݳ " w߷")#T$|R3 QΘX &i cglglRglglEglEȢ NeȢ RȢ  p/ɶ%p/ɶp/ɶ "E?6sv 3 - u>c @$$q *1Ф RAd x q %;DU k_W?F@h?+S6 +S6  +S6  $ GQ%;eTEk90~9 K KZ %jrMF?:إZ:إZL U5NC]"8JJ8J UtUD]UtUK 1{ e SxYxY P5_ f R@d%#ݕ[ T:QSv@@Os@OsC@OsA@Os%@OsbGKm&o i s #N.4=_%2 _+_ y>jy>IKI%J &%Je%J kc) a ^%Sx)Ykx)Y k t d$"t Md$"t CO2 i $ Hw? Ҍe T a T dre? dre? dre? dre? X)]X X ,X `X X eX X iXjX X a j6  #W?Y  nR+h8ZR+h8 9@Kjby}jby} aby} }Ͳ $0}Ľw!Od~5 : 9-,^E3j1dPa_3Zc‹joEdBoEd e8oEdoEd oEd vf RxZb%xZb1=L[ ʁR   $ />? F[!cOKTI!Ț!/Na6%x=ޞy%x=ޞ g%%x=ޞ:%n.|%n.%n. %F[!A%F[! (%F[! S%F[! @%F[! ,7%tb &J./&Pe|C &Pe|C &Pe|C ( 'k/' )"z)x )Z 4)x )Z i(*b < +;K+Fձ o+rK?/)l\b /C}r?/C}r s%/C}r/X5s 05` , 0.E; 1o8fp%L >l[>+U4?N">F?QÚS1?G}y ?R* - @? A qq-A(^tBhPEBh&D=^)D=^) E7 Qt'ER; ,E 3[ F#bu F#bu F=4T7CGWX@GWX@GWX@ ?GWX@ tGWX@tGWX@Hp?)J;dB@J;dB Jǵ#Jǵ L 1?*Lr{L祪8iL祪8;N'n>ϯ \NBY[ mQHbQ.] RRRkقs SqKRTf\iTf\iKU8F}U8F}VK^O#W NW 'W eXkn:? XfkFr Y亂_?Yut YC~KF YC~KF YC~KF| Z9Mms"Z9Mm ZqQ<R+ZqQ<ZaGZaG ZaGbZZaG 5ZaGY[Ri_| [P" _l|qPz _ _5aE_U `HaL aL ab4LHab46ab4K aˬ}c =a4)|b'YLb'b' b^fR s b$(B ~cq~ dq,ON eyPN( eZfR6/KfR6/KGfR6/K4fR6/Kf[RghghkT\i~ɶNi~ɶ j;,.?kJ $1kJ 0kTdo#k]Z?k]Z 6n&qܶAn4A Un4Ajn[=Cso ;_o ;_ o ;_ oK,4$pDfqqet>N qht q{LA q{LA qNt t_׬rtt_?!u 8dS iu 8dSu 8dS u O+ ju$rt v!,v'wpey$ waH x ^? x4\ -x2_ݼ' e+xNOd y*dy,y,y, zMj zMj $zMj ,7zMj(zMj (zMj z0+?Pz0+<z0+j {P)K u{J#g;||9cf ,|c`&n|pgׄI|g[R1}w~* 3h~* 3"~<~C0=| [4[KA ]9 mbR%mbLmb"$],0 JX|0 JX 0 JX ( Zrp c&XVJ'(m LL 54fk54fsO1}v QǾ% ݪqj7: ( 0= #Rt<Qi<!<L<YCb!0 ,s Re3|Z yAzb#yAz}yAzK -v?O-vjM: jz$ xRbz$ xK$z$ xϊd OTrkTo&To!ToTo ,5 ,( , 9 Bdjn .nn 4)َkj4)َ 4)َtGf &wsK $ ̻B> O9 ;f?&:JP DWd2 f,{f,-Of,S FrZv eFrZv *dmz=Zxyd^k.&}:O}:ORj+\)[ 5w|*>5ws kI g#(pI(pI] O PEf)O f)O i 9R;R$?9Y ?9Y /SkJ kJ  Guqj N7Vx v 7y)%0z'9OV,Hxj4 $6\n\n zr v9 # "D_]".nR 7O x 1= }ƚ/f X,T˥pRYN& !LB7gIa M`jܭN% ݔ{'$Xg'$Xgsx׉\ $ a8;Ÿա;?-v*S"4?k%Ƒq Ƒq t N?Gނl ɖy^ {k( ܵ6L`:>35L`:>3L L`:>3 Pށϯ~V[ϯ~V[ϯ~V[ tlMvȥZRj :Urs yOp s#yOp  VҰX Խ/ ;Խ/ t]A4c?v0A v0A v0A ?v0A ն(rq> e 5 #>6שRU /Edsk +^|l+^|lK zN ,>zN1w\կ ۍП#ۍПR ۍП ǔ<t}L }L }L 9V c6vh s $ [yX > *siIc.r%R ʕ׮+WfuTꏲ' `ʹB u;)Yu;)S Fs@ Fj^X $ ,s ,  , , ,do "-B *Xv(堹y(堹 < >$+ǞQ[ CWd bisACho!hyY ]1w'Hf QbKde] g: GD;s'Aj 9"9BB :S`R GȟS 06wRg06w_06w yfk9[ ؚʿ * )"X 6g$9 6g$ A?.E 6S a 6S  .D  lz5  Qe Xg} Xg} qIS "=) ( "=)  "=)s } iҙ? gR;g [#QRV#QR2`p `p?QrVQrK)n$ $pUwRd X = * 7(  7( ÊBKZ$%=%= Ȟ vYr3-K ^\¬ ۱3$h3$h ؒؒ Kw!Y`oNQCAY !(% r!GNzU!gj?!gj !gj !8JQ: "O7O3T (Z"O7O3T?"O7O3Ts "IrɹL "΅s^?"e?<"ej'"e #[ a$uon%$uon' .L '}MR'}M^'}M(I#E j (u!(uQ)ou&d *Cl*'+}Ɖ ,Eo(,h"́B,h"́>-67[ ,-! /~W?R0͚!K 0lt:} c1_6j1U 1׃ 3rH0/uj3rH0/us3ߕC,K 4dl4lj\ 4lj\4lj\ 4LF`n6~ U6|؝ 6|؝ , 6:׼ 6ŧ [S"99EDSD499EDSK:!&j :u,_';h K<՞^S=<՞^d+<՞^<՞^<՞^ <՞^L <7T0=<<7T0=<7T0=]/<7T0=Q<7T0= =%_ i =]aL=dD =6mÜ$=6mÜ> ZDt?EmY ?Em AB-uAB-uAB-uAF-Ό ,B2a"B2B|s1Y#C)=`C)=` E!c< E!c<  ECf?Eh-8 Gvx HrUJS/lGs K2(mL*]nLy<-Lf^M`ٰbNj?cNj Nj O[- O܀v ' SkB S4#m !%Sj9bP S>V- #Sz;^X T-j g >- h|{쑐 , hju3iWkZ iWkSiWkj-r ijXͯjܿ" jܿ"l~1 a l;K lhݝ3V lN ma/mFzCI#1nl| ֙vnS o.oNK5o.oN$orr ^J p}" +Ip}"pB>j pB>t q@M q@M| qr*Q r 7ss&T tY$Ț tR)bu,du,d uR79 uӭFR v`Hvw+4Tayb& yQR'yl~Ulyl~L8yS ayS yEdSyEd7z業*j|{.o{̿L{̿Z {̿ |cA |/ })ւ$dh }A_; ~cf ~gd=K% [|򉢔A|%" ސthM7 < 2 o#d &34 |[϶ jFS ^lb 6w >Uc*[#)rG)rG="؟E Tb aX8P[6z `&?`& <+4xs,<+4x (NN3N `n8a|Jsa|J , xtS 1cώ r8fЪ&.Ս[as j ; ;s'; i; s;jw; M2cM2c-| ]f? ]f? Js.R * F#fXK F?%I&v>2j f$ h5 hR h.2ZMT2ZMT ( nër;tS_5 Ddw } YNyϥBo^d'Bo^d$Bo^dDwDw O.DO.O. O.K %PD%%P %PQF#.B Frq qh}8 T~+N- FN`7Nƥv<;m0Rm07(Q : ^r,5: ^r,9): ^r, : ^r, "*Gyt^v ˇXN05Yң:#(: J+V M6 RYr6?*RYr6 (RYr6 ?0j/|} nEM. cRF j wN)gR^hÖ O &4)6vIT$ bT?6bTbT |$?"<7<"<7$"<7"<7L"<7S 2v"WPͩ6 r t  (lZ nnl:"?#ƾ+ U=}縐 a DR!eXjYV5Y 0΅JeSgp U1IDKU1IDsZa7/4/Zq` Zq` c J:Ԛ C >fC >MC >DYU)b&ͣ|%CTfTx!/fTx! ]uD8; $:QK :QK r:QK ,r:QK $J:QK F:QK lɐlɐN ;)xtI;)x i;Ă .Ă . @-@@-/)t s+A ?Umܗf 4آ&ߢK + 303QR ̩"12 *i *i vV'2I9lS{xsnS{x , S{xhh֖5KL֖53֖5'֖5֖5 ֖5Q w8Z fL cќ 1R M7 j xj x SJbh jӤ%oӴe&4Ӵe&4 $Ӵe&4Ӵe&4 (Ӵe&4 Ӵe&4 Ӵe&4 Ӵe&4 , nr YE"o0 Ԏ5bߋ N#n[DRm n[DRm n[DRm (n[DRm|n[DRm n[DRm  Fju } # TK-TK-ؗT!jݥ ug F虍:SLC P8aP8KP8  ;  ;b ;jt ;  ;Y.2Ni0ܠ{Q q\x}.$? }.$ ߧtIw7 Caw! i , i a oR921t-ѻ-ѻO?OsOj 爥[Rv _3(t _3(s _3( [ _3( ( PǷ$ kby ,u_]Wu_LDW _m)DW _m) zQ -s t}T#$3y[?9O|/iiRKg4tR 9U+?ƣ5 I=S=S=SdK1 3 ^ LmkL ܤZcFd$3w{s(*[l[~kxO}sx} \ ]J r5D \ ejE{ T2sT2"6Ś+4kVDmkVZkVGkVkV 1F/ 1F/ , ,?,j,, c'&@j a4V ;3GXk?^Fz j +kMN Vk9 jÒn1##$dQ THK e! - + G] A&? A& e ޷/EN Gui  x_v RԘ{R# KHs #^~4m c m a #' \?9 6[NB?vd i;E?vd i;E?^$?D?^$ -?Iv+@ru0veC]xS CvQv*Dqt ErM: EmQXK ^EmQXK EmQXK|EςyON0 F,|F,| GYv@N0IfQdRIЊ71 J |9J | dJr0kJƪCJq^&|oJq^&|KeJq^&|Jq^&| KLKyH7 cK-.L<O9L<O9L[ge"MxOM_+ ,9NX|41a?Nȣ^(Nڂ7ZRCNڂ7ZQ6Nڂ7ZK Nڂ7Z OUyzP.cR Q , Rm # Rm # aSGb SWA S`? S2j T>zlRTR~NtTɀN+U7w VZH J W4u9 WF[vW W  XRv XV;D X ; Y:,jMY:,j3Zj U #Zj U 7[hF)[hF)] [hF)U [g| \i$\i ]n| ]n|]n|Q^TaH3_gwK _Si_Si`BO!} bRjbzU eFA eux^  eR g`\p?g5 gtZi5 ij iƅn_ ij/wtx j6/jx}V jMɳkY">+kJpĵ ,kJpĵlR mZ{תmZ{תmZ{תnԫO%lnԫO% oI pѿ pf4X s+vin|suΑd s*tds*tdsk`1 >sk`1 tǟ u}:I vG͈ $w#M wOE ,:x%WC0R6xyܬ \yHg0 2zï4 z-R {R2}/X a(}/Xj }/Xt }_[^ s}$e i}$e }.Sw ~%0` ~:v J!0E c  G#z! G# { s't"s'ss'k}0 =)Kv" a+$ ,;+$ ھd $,ھds"ھd ھd t*ꑞDy ) QPı)Pı)RPı)[EY~w etM ˿w #& \nV \nj d6%k hLAg UO|T%(u!KE >KE| $a SN"QZK<QZ"QZVmOZe cE덍'#qэR#Qλ |;W|;A$$#2RFBC 7 Uߜ?Uߜ il o |#r8|#r 4P)P)P)Y N~ 4])֥j 4QR| Ѻ5? k}t_k} !k}Yj: j: 1j: j: ,HfD  rKfXrKf7=3M?/y ̌Ҫ |RD? \{RDf"+DdN ZzQH7QQ$ #° #°j 8 ? #? {ڏf_̕6a #  <{ǣ١$ ɍ=)^?%l%49N*sA* * bhMK @7y%L/#[CՇ%k խ0ʉM( cS8b$$ 7}ꈞe"7}ꈞed7}ꈞeK7}ꈞe ؁'ve\ #]Y xʫ6 PeБkیk ۽J:8 i @ e byjBf8F"q NS R~s EA 9t̡s A`yV\ D4ήtC #N2i  .mJ@79#COdڙjOd!l IWg|S \ ql xql%ql е$+\qEBIK./g >zR F?F?wF? h"X n2@R%%: %;jk?%;jk %;jk ,8",8qP.H$O w FBkv\v\ ə ZL1 (>ZL1t;S;S;S;S B}"n +{RkDz s!'Ys!'ts!'j|s!' " =4F1t r2ª* $ pt!Jpt!J 7[Z ])Ex5Vjhunhunpb$ HR-$ ȁv$te (-$te ,$te| $te $䄳N$䄳%(/m}$%`;c<%`;c<%`;c<%`;c<^%`;c<1%`;c<]&^'QCѷyv) zh) z *>~0)*>~0+)Wvv+~`+~ +f%? -_ ".,c ( .~ /,A1$=\22ޖh 4r M6v 4!beav4+(s4ÓR74Ó 5d[:61iY T61iY!7 W(7JWK8ӈ 88MUj8MU I8MU8MU 963"q{>4y;S>~s >X $ ?m?(-t= ?";1R ?A i@?@ BQw|tB3ܫC>M CI 8CI Culib DZҴ fFA; +GY6.Hצ{ HI۸ HLI&SKj I0 LD'<I0 LD'I*?J0& K KqAYLhTLU{LQt L7DŽ (M#6tMB- g/MB- g"M`ox ,M`ox: MqN hN h OZ2k+OZ2k OZ2kQOZ2kO5_ P¡SQ.>ۢ>R#Q{  Q{  RJ9]RlxDSH j?z>TlITlILTlISNTt,jfTt,U{ON Vc,R WĊl X$y9X$y9XJLx YSޏYSޏ YSޏ YSޏ YSޏ (.YSޏYT #YGܟB ^ [C/l S[[C/l [C/l  \I(os]{> 8`ю^`# !R[`# !aCahNMb b)Cb)CR b鴕6x.c~AM ic~AM scSkG#dE6rR e:mpfhEc s7f =]Y ggGgP?^gPj h1qhn,shn, h9k \"i{uAi{u jip ajip j'21k!B^kMf n45 nc1_cbnc1_cREnc1_cnc1_c nc1_cK o} o} e pP{(6qf;Vq[%B qP qP[ rB:r<|sq asC{gD tNI t9" uU{˵u ;Zvg\* `vg\*Avg\*|vg\* wM jd?[yquR_n W  j( 3N&A S % K#9l"ϛ3!"ϛ3(o(n(K3$m/%g8vX+%g8vj]+؞S!6AT+Q P4 Q P4 %i%iH-|PH- Gc<@v &c<@vc<@vj c<@v N 10ib.0iba 0ib0ibRB0ibZ0ib^0ibD0ib"0ibQ0ibS0ibL 9z Q`H2m+ ( ^߭ a VA0P &./Y\NQ{3 3Q{3 +Q{3 ]gJ) m[(0W |Oo|yچNIwj  +.? > # M5S AM5S# Xj؋?5T~j1a~j1j,~j1~j1 , br?  nPR1^R5nPR1^&q *Pz"jKPz"t 3VW+ k #k cb|ՄruTP] "{KQ{K;\,R=jb ?g?XgZ")p g| Ret0Re ii0? i 9 [K a("6== ==z=C=X7F>_R p^ +?cwP2a]k_a]k$a]k2L3 2L D ZDvrtLGnbvt?T aOt?T $u (X E4 EJ  E Ss ;A ;A y # L]í.[|r'<<<` |˃ _ c~ n s(c~ n  ͼU$ +ͼU$tͼU$ \J/hv'vq2U^&OÈ ϦXL $ ЯOĩZt HX؝"ːNҪn=Ҫn/Ҫn] j BL? lu luӉ]R/S L >L ]ȼ~ ظ9LQظ9LQ غK9ӴEг wG c g1?P5ڌ;bJY ڌ;bJY b*s ] &r ܻT^{$8G4j ⷐfHEn_Z=.@{PIf?w.\M2, {YMME)jME) $ \p(/#p >%|s ^> ( ^> $ ^> ,V] As0§)0§ 0§j60§0§ 0§ iDqm%P^]:$d&J){s fLs fRC^S1C^S C^S~C^SEC^SC^SC^SK:C^SQC^SRC^S C^S Q3N &Bn&BjV&B3&B')Y@Clpa\ Td@ =m = = ,h, h|@h|@4ՠiHVK byxby^byS(byKBӘRUu 8wL yAFQ]s0 :BFeBF M&?ǝԶ? YԢNB0(t B0( ۃʿ4H"vbQv +v (*vkvt p p pP f wW wW vwW 9 wW  YܤH 1q)[q)Phf # [l jֺOJEJ1.1%؋ML073$'$Et #GZR?h*jh*  Z' tc5) k@ ˀ31S rwX(E-P3a}qu ^qx^qx kVFNVFR x. jc -f (ŐEf ŐEV :5! V *  p 6@fs 6@f W *j15@hn> 5Mwjj&?5MwjjR 5O<-xy? 5_d19O5_d195Ȗx +5Ȗx 7u HK7e`C,7e`CK8`W 9.o.\ 9% -: , 9`'d<9`'Q#9`'9`'KV^C >h =q>h @>[B AMNV AGE%jBn4W_e CC)KbSuA>)$SuA>)dSuA>)Q S!Ty Ty9TyZTyYTy Tƒ T?! Uw2j? VyYxVyYxW f?t?):t)? \t5W ,5t5Ws t5W u4tRk uokvu5<̌ u؛\?vB @vB @ vB @vB @vB @ vX7k vhˬ5vQ[ awBY5WwppYg/wppYg xXb $xXb #xOۛIy0u $ zG $z78.~|_% 2 } XlR7~le~t+M w .9! |6}z &<#kNCEkD tuT ,= ck a7ck |So4D- -?u/w#1u/wHy\`<;D( 2 ^_(TQRTQXTQ TQ TQ g| B~E^J_ w) (L oU_G 8oU_Gs"?%9 3c:./CjƅD*d _> H> > e> a> k MG[)32HIj$46a{waM?aM aMj aM ^b c +ut<{ *tNkl fP ,e2 EDj[0ܝY # hyxo I a^S !AI jH iWjZ%==0R`| _7rI2|Lr\v \ ~#Gy bYtj| _ۆ Vh *s*ɤ~'8+[~v guG2guG guG ^B t_ 7Hͷsͷtp jZyeC$ye ӎ \ּڵ^ּڵ^̂  TL+ T TS T tQK{  NS[1$t;v|L|L i|L|LyH[tv5G2$dIoR>*]eu' D]eu'  ruvmtfY:.g K[Z|QSJq(jFSJq(࿻ΩR wf )wf Pwf R Bt/, u2x U,> s|C> \ +loAe % lj> `Pp%B ,p%Bfꟹfꟹ@fꟹfꟹ fꟹ fꟹR %w #*eWTsY&ʜ]GFʜ]Gβo w̡I ̻q e< # -C?-CjІi?Іi Ї5cMЇ5cM Ї5cM Ѧ PZL =SV$=SVԋdk߅q s]/Tm E4!m !8ٿo-Ass .R;&Qj: @- #s ڭ&!9ڭ&!9 GQ!Sk"z:.k"z:.k"z:. ے)g %cjXXDҸRu1 P2aP2 ,P2b I]2I]2I]2I]2I]2K <-#[?Q^f'NEb.eJ = ;%Y ib;%Y9;%Y e 勤 ~O$HA?4$HA $*D>6g? W#s[:܃?,r^ jU7 %s K~j 낝)`낝)` rX , ? #M` K=c| j Y t sŬk g4 ^F{ K/P;  e;  b1GLjV 4I?,jV 4I Ś/j}^' ƮsH6S\ :H6S\ si 6\=6\ i (:]{  \ @߿0 Jx H.vpX pX pX? ̑̑ $J} ,r #L,r *%O/;y5t DXՠ $ 2t WL $WL ;WL WL e }QE#}QE Aa BVwsK#~5 df bB)_P m!Hӄ{ * r%Z "xS \{j? \{  o 1 5ԅ K 6yg = T  }K } } } p p p gbHt4 gj  l I : I  !gL[L !gL[K ڌI}T @& B r wB x.  BXY J\6[,2C3|IiK.j,l MT l MT  v TCTC Z :QzzK WKdμ1WKdμWKdμd !,*vc!,* Joqb.sMi9c=d!3$6 WO S䗩' ! !-Z*]6!-Z*] !h (" q #!TXb# @r$xy"-%{R]A#Z%z]7%z]R&0W*:&1lLQ &1Þ"+7&^-&^-| &^-s &]='9R(j 2(j 2S)w s=)ҡD1 c){t  +Rvo6k+YrgFP+YrgFP->ׇS3 i -Ӻ-Ӻ ( .ئ3 .ئ3 .jk /|ur?&01/9 2T=/v$3CFB 5a6"<"5 6"<"5s6"<"56"<"5?(6"<"5 7SB:8K}L8upb 857 -:Yt :y!t'?:Ҟo :ҞoR :U؂f;:#ً [2;  fOY7[ >k݀՟; >k݀՟;k >{?x??x IA-: An; AT-n4 Bi (&BvW i B@WKE XJ1Es*!~Fӭg" G/کDG/کG@F/ a G])Q G])Q HrMjO HrMjO? J J]þ9K/#U- g3K/#U-|(K/#U-9 K/#U- K/#U- KϱKb>;tL|np Mq#.N.?3y NP)N#tNP)N#hHNP)N# >NP)N#s/NP)N#NP)N# NP)N#k O ׾M O h.D P*5P}4Q5kQk98{^/S}:S}RT 7*T 7T 7RU~Lt% CV.<$ W~ s? W~ s Wi^RXf]t! Xf]t!sXf]t! X2P 'XXYV8"YV8Y- .[ TC[c3[[ r?[cE\\{Db"^p8| _m$`N e`_ZY5`_ZY a,*%a,*a,* b "7bA bDcDֺn d]WkQ "d~Ikd~IkRd~IkOd~IkXd~Ikd~Ikd~IkQd~Ikd~IkRdMRe $K+ iy iy H[l\ H[l\ ZDFT aZDFTt Ob SoH ԏ1E?Uʖ= Ύ?^p@E+v6 ޔTQu $ &XNkIv 'RS|PK S|PS ,Q YQLr?Yw , ɞ;$$<1sW2D80D8'c c Jn G OsN_" jQb[? >xC h&>xC h A!> rA!> ,@A!>j'A!>R% ? S &x/jx/ $a*!x w~8# o+ICGH G#Ϥ!#G#Ϥ! aY |:|SIy?! ښ]H% d\Yq͔|m@q :غ{w tw Yw aw 6_ 'v)'vK /\p5XWPR bk3 gIu?Qq Zg(Zg'Nij)- [9)@qLb!R['SJ'SJUieY.33LUw2n sAR[sAR[nsAR[Ky=' P;L#N |"2 |"2] L4.SAs9A 3Atq!K zcVv? lAf 'EvDŽK vDŽ _z_T 崌{#y 崌{#y (崌{#y 崌{#y崌{#yj@=K D9 (LD9hdw a,dwv{yf. $. , '4R":0aR'":0aHZ? ^{u> EL75bTJhdU $ ūIPF e!#\P (\D9S 7Fȴ ٿURUd2;kd2;kd2;kL }jY7 H/p O5.|VmUx` Ux` Aj bEޭV Z.Fn4W _ ,u_!%j!%j EC PsH Pk Pt n Vr') plGR ƅ2? ^C,] ^C,a h^9^u h^9^DC h^9^! h^9^ ry,_ ry,_ {{ j z 6 z| z  < <PB?PB?|ZPB? ePB? 4 4^: Vd=DeIJyKK2 K,:K ,r O  љHk (љHk i)''vOj ]WҰ  ƨN Z H q.),a.\}"j\}"?:=o` kk=@z , _:„g_:„ $_:„ X>:6m[[~ , ͉4  ͉4  ͉4 ! *R #% svH%w ? & 2 &dl&/Z(}&9B'jOt U4'jOt Q'jOt  (r˹>(r˹>D )])GVt)])GV#)])GV )m]t|)m]s)m]j)m] a *>!t*v vU+L[RGQ*+L[RGC +CF%U)-Z4<NI-Z4<G-Z4<d1-Z4<Q -.|-. \ .eg]K.eg] .`\9.`\| .(#-1HZ 1HZ1HZ1bXL13 (133W&Ԍ - 3t%R4]6 4t߾_t 5Ś 8~ # e8Z Af ,8هa 8m'l: 93lcj?93lcj 9W&1f:q4G \":q4G 5n5>5n>bV! ?K?;aP ?Wϙ?WϙR ?b  @4Y$~_N@9!e @)`?@)`@)` @o=NBHm <v B{ ktGWeG Kc HTH+!Is:DIs:iIs:#Ij"IjIjIjS KxPgMPϥ , MWFMWNNROٲKj4OٲKsOٲKtOX% , PGu#APGuQzl҉!Qĸ/ R2 RaB1#vR֎ -R"S`CS` TYY[Tu"bV<V<V<ZVx/kV Wrr' W:N3 $ Xh*+t.Xh*+ X YOɔ Y̴Fu ["6 k0["6 ,[~GV[A[~GV\@_0?\fm: ]=C]=@],+*]AH?]AH ]ԝ8 ^ qNRa CGa CGv caIcA5^?dA8 a d;s^!d+ e2,1$ ep eFeFg^! h%V  | h,NLh.:=$j1է=j1էjg%;bjrbtD]l68 j l}/cg+l}/cgl}/cgLl}/cg n"d\}g? o1kɥQo1kɥDozomjDpU>pX>0r^Fssr^Fshr^Fs , r3䣾! t1-Hus*#=u ur?q u@ 8u@ iu@  vdޕx;|Ux{2; \|zS>N=Z |*΅(@m ~56y7ZD~h@ ~<1 PƹS q"kq"|{q"9Zq"q" 7 s'c^ QBKLH}D ' iC' )'s'' I c <'kqf(A 2qf(Asqf(Ajg- w,L ANA:ANA2Dt2D:*$ n *$ nM!IHat d#7Jk6]?]$ՍaKՍa{ՍaQՍaK Z#ž"Z#žs rQ6[ rQ6[ |77|7L $Y {"V]!{"V]JXw  b;vY?Lb;vY? 0S~#W};Jj-};J? <>7/Q<FA- xe ,.xǍ.%(@Yx@f Ww @h| qk= (̺vC yR>-yR>|oEWnjz7oEWnjz oEWnjz [sf] ? ?] ? 1kֹ a1kֹ1kֹ 1kֹv." c ٿd43. .Ҝ 6/Kk16/K ǟǟǟ J&J&]):i¨xv =  TMZ az̯O~ ƕy b8 S{%z X 1!Hx gtHx g 2sD0]b M7 (5{`Ti;`Ti;o僘'4o僘' Cz j\b!Su-~] 4 7 ;P|]?_e)<D_e)<$Ym Ai Id0ȯ!B}| ,!B}|jj "j6*=.R6*=. KS5X BFq3k!` $$k!` )SR)S_Jv' \_'7 \6rt F;XVL ao]s? c-e{ 4:Qj.M.*j^?? j8Wb2tT_B d j~veQ j~veQ ێJN Ğ΍ j 3q1] XS/QʒMUU ,dj{c$bǗ ;0XbKMoU1x $MoU1x ,°6K°6 o{9ì}=3 ðUð ģ'{*ŋSWԙ ,-@ Em?ȿ1ȿ1 k m 1Z~ $ 늜<e/s wQ $U7|2 a%1XH[%H[% 3H[% ͕-ʳ 6$w e McT&dq $MMDR ӷ 7連 ш`,Ҫ3C}ILI$s`:k ,s`:k 1~a ń ` Ƀ?ԃ=v&Լ㖕\R[Լ㖕\ ՟eh c=B. ֮Q?ǡZ-@6 @6 i @6 _W-  gL A gL >"T+ Q>"T+ ےִ?c!܏nWܗQ"G]ht ^" ^" L + ʐK lx`' ,lx`' lx`' $ ށX[(ֆ&yWOPU"kA s Ao%Ao%Ch۬@dh۬@V ෆC=bෆC=t+~ n|\D\n|\D? p@2<-.Oj".O yGhfD5yGhf$B] vO[!$vO[! #nST i#nST #nSTs#nST 1?'1R]ϺrD c?A,1X\H $Y+x. x.  ivY# P O ewfE \ $F?4?4 Z`#eOPgX ҏ(kR=oP"7=oP"=oP"]L[ i a 5ܳ@?: Y PaUR\)d Vw[*0qm ,>#(j?Ti2cvTi2c AA {茸kQ ]" 2[@KMKcS7RsIcS7RsEcS7RsLpFV *ܸ őB D?#J4VV;XXsIXj'X ( X )denϟ *ST Q|x.j nO B[> ؞$? 1y䂤v oWZR Ć ůDRS ůDR | zl4?),:ov% ' , v534t\? {1/? xi =fny?lzK s^ ?-H!gK= w 9  ,EՎ (EՎjEn^;n !3Φ3K !xjQ-!xj%#f5P #e=M&$k!$$=R%U9[ . %W:  %W:?%v? %vex%vex/ '`$ 'A(è ( 0E((%In+pL -uzYR- D-?6- (-!4.܉Vj%.t+0 .rMAN.rMAd.rMAQ 0iHm3R0iHm3E0iHm3 2n=$+2p2S?N2p2S .2p2S ( 3U2?3U2? 3XRGp 5;ꖫ{ 5j Oj 6G" 6~<-x6~<-L6~<- 6 6f:> 6J ZJ6J ZJ 6J ZJ ( 7JS"- 7PE K8CU/V8N.cƬs>8N.cƬ a 9y$KI9F:$ ?E~?V*?E s?E ?E t @@@#D ZN\:S \&D \ʅ^0t ^- _=9l `3'`3a{aa!f?J aܲwkb,G?-cW7߸scW7߸t cY|tF?dQ-#dQ-#dQ-#d_`S?8e3(z ex"'!ex"' ex"']ex"'Df cgJE hzM7h_) chb 8l{hu7h k< b lv\SoH e(pF?OZpsA qQJqev9qev9Rr^V"yryxs,ryx?r sޤ9߂ csޤ9߂ #&t&s&%0t&s&%ttE|+@tE|+ ,tI Gur%-Ij#ur%-I e v sw {pw {x!YJ $ey'y7y7z, {G g }j'RWQ~Z,HE ;_? @;_? )ms.kW.kWQ R7U 5jV5 5s5ʞ)?ʞ)?s03IA~qQ c ^"|4\|Ygj(|Yg |Yg5sz$yd C+69[ Z'&ĵ7&ĵC v  <'p.?'p. 'p. 'p. 'p. V-k[ YX"DhYX"DhQYX"Dh YX"Dh u c8Pj @qI$_$a Z~qt+'nxR * CWt.```:`P#` `K ƽW Rh; #A$z2}z2}kz2}`z2}z2}z2} iR ZFRI~?ⷨu B\ #  BXMp: _=oY_=otQY\ \ r }S#t ɆV`ZR  +uHrI5&o6?r&M ;MJ;M2;MAxua8AxuaAxuaS xv ^Bxv \@xv n(xvzޯ "f* "f* c }ልa s}ልa i}ልa}ልa |6,* $ .> xo?!M!MS "B4O N#T!jQ e4#T!jQ#T!jQ " #VR&[#b'\N#4 3$zr~ $㔗V%lDG$㔗V%l %Zo0C & 8'[S N '^`A?^d )ͦ^g,,T8n \),tsB ,4͓|,&kĠ -@ț=av -I[T 5 -cv.8 (.a|?.{z ,/⢯Q 0rTv0rT i 1:*z2ogq2ogq | 2"8N2"83mQ7?3mQ7:3t&H3O] : j:3O] : 44pjS94pjS9s 5 @ TY5)R"5M` C 5e[Hw5SS,7 7ѥ 7V7` 7|ba (7|ba8JUmc8OL 8y= e8y=N8>H)xm 8^[t 9VFWS:+j (:+j w: !.><"WR =z]Fj=?=?? >@' s?xK~ #@s?Es A`@SECM "C4ąLC;47S C;47 E^}FF~ݰ F~ݰ I~:c Iݮ]wd Iݮ]w J <\EJ <\$J sKV|KV  Le \ODl - OLgGP5ӾPβPL)jQf[xB\t%Qf[xB\ R|G]lR|G]-R5?~S1^ S^Wu TӔ0UpQ W{TG^d XJgYj Yi3]-Y\j!Y\j[C [0Pj\ 11)\ 11)? \U=? ]xs ^YR_u ^YR_u  ^VRoX# ^5J^B4(_ϐ E_6)~%_6)~d_6)~ _?, `G.N ) abC,> abC,>? a̪E aS#aS#Q a, a! aa6`L by bI d4J_ m dAO # e-t&y e \ g :h0FjyD xD$l3: mAw_Q\ n[Pnjnd Gf# n] jo؜ oט"?pj{, pj{,|rR(? s:4_6tAĨ u|#|9u4[u4v8q! vm^}SD vӪ<;wfCa wfCa c wl"?x| gvx| gj xUm%xUm%R zDMv| z`'3 s zD |bЙ-[|r(}}['<>}}['<>}}['<>a~e !L WOY WOKWO[ uk6Ȉ1F#Ȉ1F$X吩_xv:ڽGq5ALs9q5ALs)q5ALs1ż$ , 1&Z4??pk r?ӻKkӻBv-_{ =Md6 s ү8+'X (w&:J ,Gw&:JjlWR ۥ,%[{.7YɪN%7Yɪ tjsP:|ImCZ i[ae "TTB"TTn] \M Kԗh<ԗhԗh +aY~56Uއ ֿ8 B8j 8R +HC gg oS k/S ) i y=_ :5 ? 7_! \Mq L" : ȆiR -nt%06\ +R 3 \ ʆ rrʤDwl?=ʤDwl 'Q.u.? hv u-jΚ܁ ,aN Z04 FL|Fkt? L r+L r L r ѭ]{K| Ԑ`P»P» :t::@z @z & ԳhC,S>8N\O:٘+ >  yЁ ?`HˁZ ^[+̜HR<",",B^B:MGvPMqM?RS yMS yMD ; \t$; \ ; \ [L<mx`*mx`*$mx`*R֦k9 {|k7^K =(y.n\yQ' Jg J  JnhIS yac菆E$菆ES菆E菆ER菆EKUz L#L ?2\ lOXLOXOX] g.d1fC1f$-9 \p g =5l͖n/l͖ns 9 v19 v1 ׹[$׹[l|3 %)X} ˘ $ZLh' \{ JÄ:Oj&Ä:O۾O#3[_,vOCgOCUOCLeP >9{j >9{j MN \\ ?0u "70u oEzk$?oEzkoEzk]N ciJc]D NOqd޼&  ?:? ? @<ST{P % Ɏ RkoRkRSA~]nc $ |H4t $e @D؞ #% 311 3 $1 M0@ )M0@M0@sM0@jM0@ g iOq/1iOq]iOq F{i,-C3<\ <\ cj]|}U\ɰ̷]>U\ɰ̷+U\ɰ̷ H B8آR w.e ,Cw.ej5w.e ^4w.e \"w.esw.e i w.e mE lJl>ll' r 8`!%  tlJWm c߻l a&TV@R G7c _ w!s!ˈς/ !0 : "oqqm?"oqqm 8$C@ | &I9-m $)72gK)72g ( )\eL )~)~)~ , *WE i+JQ0k+uXL ( ,)&oFR,>V=t ,fjga -dX1J-z0 .Zb F.Zbj<.Zbt!.Zb i.Zb (/tX 2 (ڏv2:ߴOL2і#3)`r 3ʼ7 Q3ʼ7 3ʼ7 5x\sB5x\s5hžs 6"￁bd -76x`vk$; jɝv; jɝ ;; jɝ =6LF+ =ɝGa?d`Ӳ%?d`Ӳ?d`ӲQ @If' ,Ax,O a A3*KtA"KA3*KtA" AH.#R BrC BIR~ :BIR~|BIR~  CV ?CyRC>6C$`PC$`XD 5D 5D[@@ Ex,R G'b G^)?G^)jIN>E?IV;I- , J!RfJ!R --J!R&J=Xe~KI*[2)LV L M*[M*[ M M'e N>k_S NA7?D e)N͕K ,NHBPO"j P!`C?PSz=PSzJ(PSzlQEpgTQD # Q.Si j R/?|S Rj`OR? S]Ӯ^~]S]Ӯ^~&S]Ӯ^~S]Ӯ^~TQ8_?'T 84T«~ " T«~? UvpD[ e V#BXM`ܟR#XƈN ZҬbNK\^4=\^4\^4Q\^4]1{!f ]n ^#W n^Df_ q_ 2_  `7"3 b(j6cNg5S%e=mf#:f-Hb|f]S g)i\? gU 'gU jhW5hB쭌 ipz L jDC (kRm$DmkRm$0kRm$kRm$kRm$kRm$k}Z:P [k}Z:P #1k'hLN%lDi lPش lӁEPQSlӁEPQR-lӁEPQL+lӁEPQQmz{nNBv nKdX coC&pJg[ 0pJg[jsoV0M soV0M $soV0M s#j?t_ZM t{  vk wB w o xYN NxVԛV y5_-y5_y5_3z ]y zGNh?zzGNh5z`D) zH z !z {O4t8{ot_ {~+ |gI}h |gI}hh|n+D|n+D })#   ( (4 W84>84? ?<" j cGXRWPƫCda o߭EV> ? ]h[N]h #z& U#z& (#z& 6f $ 'J2 g7gY}dgY} gY}Kxu ʡ ʡ -&S_W =IK6=IK0=Id)=Ia_.Z #a_.Z a_.Z , W% +0^83=n `xiC ,< (6,<+,<|,< %_E!ܽ ><$>3 ?կ /  l l:tM2$ȸQ 旉i Ҕ.h e3 #j 2!-2!-C"TQ 2I\ N ~XK #}IC!|,_ R[μ1&R §`R _L,~* Jw9oUHR2,9R 0IY s0IY ;I8cv L .*HL .*FL .*]L .*RL .*L .*-J?H\-J?HZ7m; +7m;7m;KΗ̵)'̵)$^ s@yŘyŘD ş iü tv 5+ , ^~#^~ .Jh#a3vMzW>a3zW>a3 9(t#c!sim (Y(Mk~z 5s  ]B4+B\]B4+B]B4+B# D.}$s@D.}$ (D.}$ D.}$ GQC GOQ YGOQjGGOQt;GOQ -GOQs(yt=K PDS :/%YW xV a] Q@8Hh|  n:R '#&GV-h0R :94 8aWo. (É?/R C  %v">b i i[- ?"  ,"v t aч A|B`6#ߑ ,6D` NR3N)4"Ud 7&: -m L ͪ Z [@#2 [@#]0 \F]ER * y 3 $ Ms M i 0D| =/ B`2 4F1 / Ⱥ p0ov 2.}a $2.}a :@ j> :@ j> 徃Q 徃QD Z $ OFR? ·7Du aDu]ֹ9j]ֹ9w]ֹ9s³& CwcJ +hĦy  b^ ]\y#Y r?C#y"Xt #y"X %0&%0h#%0%0|%0s %ex<жR&S` # (;1H;*Bν?+.Yg cB+BښR!N +Ԕ,;iR ,M-9 /X!8/m