polymaking-0.8.7/000755 000766 000024 00000000000 14507124702 014171 5ustar00mhornstaff000000 000000 polymaking-0.8.7/PackageInfo.g000644 000766 000024 00000005260 14507124632 016515 0ustar00mhornstaff000000 000000 SetPackageInfo( rec( PackageName := "polymaking", Subtitle := "Interfacing the geometry software polymake", Version := "0.8.7", Date := "04/10/2023", # dd/mm/yyyy format License := "GPL-2.0-or-later", Persons := [ rec( LastName := "Roeder", FirstNames := "Marc", IsAuthor := true, IsMaintainer := true, Email := "roeder.marc@gmail.com", ), rec( LastName := "GAP Team", FirstNames := "The", IsAuthor := false, IsMaintainer := true, Email := "support@gap-system.org", ), ], Status := "deposited", PackageWWWHome := "https://gap-packages.github.io/polymaking/", README_URL := Concatenation( ~.PackageWWWHome, "README.md" ), PackageInfoURL := Concatenation( ~.PackageWWWHome, "PackageInfo.g" ), SourceRepository := rec( Type := "git", URL := "https://github.com/gap-packages/polymaking", ), IssueTrackerURL := Concatenation( ~.SourceRepository.URL, "/issues" ), ArchiveURL := Concatenation( ~.SourceRepository.URL, "/releases/download/v", ~.Version, "/polymaking-", ~.Version ), ArchiveFormats := ".tar.gz", AbstractHTML := "This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al.", PackageDoc := rec( BookName := "polymaking", ArchiveURLSubset := ["doc"], HTMLStart := "doc/chap0_mj.html", PDFFile := "doc/manual.pdf", SixFile := "doc/manual.six", LongTitle := "A package for using polymake in GAP", ), Dependencies := rec( GAP := ">=4.8", NeededOtherPackages := [], SuggestedOtherPackages := [["GAPDoc", ">= 0.99"]], ExternalConditions := ["polymake (http://www.polymake.org) must be installed"] ), AvailabilityTest := ReturnTrue, TestFile := "tst/testall.g", Keywords := ["interface","polymake","computational geometry"], AutoDoc := rec( TitlePage := rec( Abstract := """ This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al. . The polymake program itself is not included. """, Acknowledgements := """ This work has been supported by Marie Curie Grant No. MTKD-CT-2006-042685 """, Copyright := """ ©right; 2007--2013 Marc Roeder.

This package is distributed under the terms of the GNU General Public License version 2 or later (at your convenience). See the file "LICENSE" or https://www.gnu.org/copyleft/gpl.html """, Version := Concatenation( "Version ", ~.Version ), ) ), )); polymaking-0.8.7/LICENSE000644 000766 000024 00000043103 14507124632 015201 0ustar00mhornstaff000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS 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 convey 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. polymaking-0.8.7/README.md000644 000766 000024 00000005336 14507124632 015461 0ustar00mhornstaff000000 000000 [![Build Status](https://github.com/gap-packages/polymaking/workflows/CI/badge.svg?branch=master)](https://github.com/gap-packages/polymaking/actions?query=workflow%3ACI+branch%3Amaster) [![Code Coverage](https://codecov.io/github/gap-packages/polymaking/coverage.svg?branch=master&token=)](https://codecov.io/gh/gap-packages/polymaking) polymak(e)inG(AP) ================== A very basic GAP-interface to the program "polymake" by Ewgenij Gawrilow and Michael Joswig which is available at Note that this package does not provide the program "polymake", which has to be installed separately. This package is distributed under the terms of the GNU general public license version 2 or later (at your descretion). (C)2007-2013 by Marc Roeder, National University of Ireland, Galway Requirements ------------ polymaking requires GAP version 4.8. It also needs polymake to be installed. The GAPDoc package is needed to display the documentation. polymaking was written for the "first generation" polymake which was called as a command-line tool. Using it with a current ("next generation") version of polymake will result in longer runtimes and fewer supported keywords/features. Installation ------------ 0. Install polymake 1. Download one of the archives - `polymaking.tar.bz2` - `polymaking.tar.gz` - `polymaking-win.zip` (where `` is some version number) to the directory pkg/ of the GAP home directory. If you do not have permission to do so, create a directory called gap/pkg in your home directory. 2. Change directory to pkg/ and unpack the archive using the according command: - `tar -xjf polymaking.tar.bz2` - `tar -xzf polymaking.tar.gz` - `unzip polymaking-win.zip` (replace `` with the version number) 3. Start GAP. If you have created the directory gap/pkg in your home directory, use `gap -l '/gap;'` where `` is the path of your home directory (use `pwd` to find out what it is, if you don't know). 4. Type `LoadPackage("polymaking");` to load the polymaking package. 5. Run `ReadPackage("polymaking","tst/test.gap");` for a quick test. If polymake is not found automatically (a warning will be printed at level 1 in this case), try this: 6. Tell GAP where to look for polymake by adding the following lines to your `.gaprc` file: POLYMAKE_COMMAND:=Filename(Directory("/home/mypolymakebindir/"),"polymake"); MakeImmutable(POLYMAKE_COMMAND); Note that you can also modify the value of the variable `POLYMAKE_COMMAND` in `lib/environment.gi`. Support ------- If you find a bug or strange behaviour, please submit a bug report to . polymaking-0.8.7/makedoc.g000644 000766 000024 00000000471 14507124632 015750 0ustar00mhornstaff000000 000000 ## this creates the documentation, needs: GAPDoc and AutoDoc packages, pdflatex ## ## Call this with GAP from within the package directory. ## if fail = LoadPackage("AutoDoc", ">= 2016.01.21") then Error("AutoDoc 2016.01.21 or newer is required"); fi; AutoDoc(rec( scaffold := rec( MainPage := false ))); polymaking-0.8.7/lib/000755 000766 000024 00000000000 14507124632 014741 5ustar00mhornstaff000000 000000 polymaking-0.8.7/CHANGES.md000644 000766 000024 00000013741 14507124632 015573 0ustar00mhornstaff000000 000000 0.8.7 (2023-10-04) - fix broken link in the manual - fix example 2.6 in the manual - janitorial changes 0.8.6 (2021-07-08) - restore DIM that was lost between 0.7.9 and 0.8.1 (thanks to GitHub user narc-Ontakac2) - fixed VISUAL (thanks to GitHub user narc-Ontakac2) ------------------ 0.8.5 (2021-04-14) - updated to recover from the previous faulty update ------------------ 0.8.4 (2021-04-11) - added functionality for the polymake command ADJACENCY ------------------ 0.8.3 (2021-04-07) - polymake 4.1 compatibility (thanks to GitHub user narc-Ontakac2) - various janitorial changes ------------------ 0.8.2 (2019-02-23) - move package to GitHub - add the GAP Team as maintainer - various janitorial changes ------------------ 0.8.1 (2013-11-16) no more support for "old" polymake features. This version is for next-generation polymake run in compatibility mode. More specifically: - use of clients is no longer supported - some keywords are no longer supported (e.g. HASSE_DIAGRAM) ------------------ 0.7.9 (2013-10-27) - support for two "next-generation" keywords: - "FACES" calls "HASSE_DIAGRAM->FACES" - "DIMS" calls "HASSE_DIAGRAM->DIMS" these two keywords cannot be used with old versions of polymake. - test changed: tests of unsupported features in recent polymake versions removed (clients, some keywords), "FACES DIMS" tested. ------------------ 0.7.8 (2010-06-03) ------------------ 0.7.7: - package homepage changed ------------------ 0.7.6 (2008-12-02) - bug fixed in SetPolymakeClientPaths - ClearPolymakeObject and CreatePolymakeObject can now be called with application and version information which will then be written to the new file. - Package moved from Galway to Kaiserslautern ------------------ 0.7.5 (2008-08-13) - changes in README.polymaking (thanks to Andreas Distler) - changed subtitle to something more descriptive ------------------ 0.7.4 (2008-07-16) - fixed the "warning on startup" bug - test file written ------------------ 0.7.3 (2008-05-12) - fixed an embarrassing bug. Now HASSE_DIAGRAM really does what it should. ------------------ 0.7.2: ATTENTION! change in output type: - Polymake(poly,"HASSE_DIAGRAM") now returns a record instead of a list. This change was necessary to make HASSE_DIAGRAM work with simplicial complexes. New features: - polymaking is now supporting some clients via PolymakeClient - variable POLYMAKE_LAST_FAIL_REASON introduced. It should contain information abut the reason of the last returned . Changes to existing methods: - Method Polymake rewritten - polymaking now returns an error if polymake returns one - Change in SplitPolymakeOutputStringIntoBlocks: keywords are now recognised by starting with an upper chase character and consisting of uppercase letters, numbers and "_" only. - PolymakeObjects now print their description instead of just if they know it. Converter things: - ConvertPolymakeBoolToGAP now also accepts "true" and "false" - converter ConvertPolymakeDescriptionToGAP added. - converter ConvertPolymakeMatrixOrListOfSetsToGAP added (for things like FACETS that exist in the polytope and topaz world) - converter ConvertPolymakeIntVectorToGAPPlusOne added. - A few more entries added to ObjectConverters (now supporting 105 keywords) Converter method assignment changed for: GRAPH, DUAL_GRAPH, FACETS, ------------------ 0.7.1 (2008-03-07) - polymaking now suggests GAPdoc - changed the way POLYMAKE_COMMAND is determined (thanks to Andreas Distler) polymaking now tries to guess the location of polymake using the system path variable via DirectoriesSystemPrograms(). - documentation now includes a couple of comments on the installation of polymake. ------------------ 0.7.0: - Package is now called "polymaking" instead of "polymake" to avoid confusion. - Added a few converters (FAR_HYPERPLANE, N_01POINTS, REL_INT_POINT) ------------------ 0.6.3: - changed PackageInfo.g to point to the new homepage - minor changes to the installation instructions in README.polymake and the manual. - ----------------- 0.6.2: - some changes in the manual. - AppendToPolymakeObject now has a 3-argument version to be called like AppendToPolymakeObject(poly,"KEYWORD","datastring"); - the converter for HASSE_DIAGRAM now returns a list of sets of triples of sets rather than the strange record. To be precise, only the ".hasse" part of the old version is returned. - set global variables POLYMAKE_PROGRAM and POLYMAKE_DATA_DIR to "read only" status (thanks to Alexander Konovalov for this hint). ------------------ 0.6.1: - more converters added to ObjectConverters.gi - PolymakeObject is not longer a sub category of Record. - added AppendInequalitiesToPolymakeObject for convenience ------------------ 0.6: - Added a few object converters and removed a - Rewrote most of the documentation ------------------ 0.5: - package does no longer depend on the IO package. - Conversion method for HASSE_DIAGRAM changed. Output has also changed and is not compatible with earlier versions. - Polymake can now be called with several keywords. In this case, fail is returned but the record is updated. If a part of the returned values are fail, these are not updated in the polygon record (but the others are!). Any line of polymake output starting with a capital letter will be treated as a line containing a single keyword. - Conversion method for FACE_LATTICE added. - The objects now have their own type "PolymakeObject". Lots of functions for manipulating them have been added. ------------------ 0.3: - Changes in CreatePolygon: can now take an existing directory as an argument, Change in naming convention for generated file. Number is appended if a file with the same name exists (can happen, if CreatePolygon(dir) is called several times without other calculations between the calls) ------------------ 0.2: - added conversion functions for polymake output. ------------------ 0.1: - packages started with very limited functionality ------------------ polymaking-0.8.7/doc/000755 000766 000024 00000000000 14507124702 014736 5ustar00mhornstaff000000 000000 polymaking-0.8.7/tst/000755 000766 000024 00000000000 14507124632 015005 5ustar00mhornstaff000000 000000 polymaking-0.8.7/init.g000644 000766 000024 00000000535 14507124632 015311 0ustar00mhornstaff000000 000000 ReadPackage("polymaking","lib/environment.gd" ); ReadPackage("polymaking","lib/Objects.gd"); ReadPackage("polymaking","lib/construct.gd"); ReadPackage("polymaking","lib/workaround_maps.gd"); ReadPackage("polymaking","lib/convert.gd"); ReadPackage("polymaking","lib/ObjectConverters.gd"); ReadPackage("polymaking","lib/application_version_type.gd"); polymaking-0.8.7/read.g000644 000766 000024 00000000534 14507124632 015260 0ustar00mhornstaff000000 000000 ReadPackage("polymaking","lib/environment.gi"); ReadPackage("polymaking","lib/Objects.gi"); ReadPackage("polymaking","lib/construct.gi"); ReadPackage("polymaking","lib/workaround_maps.gi"); ReadPackage("polymaking","lib/convert.gi"); ReadPackage("polymaking","lib/ObjectConverters.gi"); ReadPackage("polymaking","lib/application_version_type.gi"); polymaking-0.8.7/tst/visual.poly000644 000766 000024 00000000224 14507124632 017213 0ustar00mhornstaff000000 000000 _application polytope _type Polytope POINTS 1 0 0 0 1 -4 0 4 1 -2 6 2 1 6 -2 6 1 4 4 8 1 8 4 4 1 4 8 4 1 6 -2 2 1 0 0 8 1 -2 6 6 1 4 4 0 1 0 -4 4 polymaking-0.8.7/tst/pplane.poly000644 000766 000024 00000000375 14507124632 017176 0ustar00mhornstaff000000 000000 _application topaz _version 2.3 _type SimplicialComplex DESCRIPTION The projective plane. FACETS {0 1 4} {0 1 5} {0 2 3} {0 2 4} {0 3 5} {1 2 3} {1 2 5} {1 3 4} {2 4 5} {3 4 5} DIM 2 MANIFOLD 1 CLOSED_PSEUDO_MANIFOLD 1 ORIENTED_PSEUDO_MANIFOLD 0 polymaking-0.8.7/tst/visual.tst000644 000766 000024 00000000417 14507124632 017046 0ustar00mhornstaff000000 000000 gap> LoadPackage("polymaking"); gap> dir:=DirectoriesPackageLibrary("polymaking", "tst")[1];; gap> SetPolymakeDataDirectory(dir);; gap> poly := CreatePolymakeObjectFromFile(dir, "visual.poly"); gap> Polymake(poly, "VISUAL"); fail polymaking-0.8.7/tst/example.tst000644 000766 000024 00000001177 14507124632 017202 0ustar00mhornstaff000000 000000 gap> START_TEST("example tst file"); gap> S:=SymmetricGroup(3); Sym( [ 1 .. 3 ] ) gap> v:=[1,2,3]; [ 1, 2, 3 ] gap> points3:=Orbit(S,v,Permuted);; gap> points := points3{[1..6]}{[1,2]};; gap> permutahedron:=CreatePolymakeObject(); gap> AppendPointlistToPolymakeObject(permutahedron,points); gap> Polymake(permutahedron,"VOLUME"); 3 gap> Polymake(permutahedron,"N_VERTICES"); 6 gap> PropertyOfPolymakeObject(permutahedron,"VERTICES"); fail gap> NamesKnownPropertiesOfPolymakeObject(permutahedron); [ "N_VERTICES", "VOLUME" ] gap> Polymake(permutahedron,"DIM"); 2 gap> STOP_TEST("example.tst", 10000); polymaking-0.8.7/tst/polymaking.tst000644 000766 000024 00000012420 14507124632 017712 0ustar00mhornstaff000000 000000 gap> START_TEST("polymaking tst file"); ## generate an empty file> ## gap> poly:=CreatePolymakeObject(); gap> polyfile:=FullFilenameOfPolymakeObject( poly );; gap> IsReadableFile(polyfile); true gap> IsWritableFile(polyfile); true gap> vs:=[ [ 1/4, 1/75, 1/22 ], [ 1/37, 1/62, 1/19 ], [ 1/91, 1/24, 1/88 ], > [ 1/59, 1/67, 1/5 ], [ 1/85, 1/31, 1/76 ], [ 1/4, 1/72, 1/44 ], > [ 1/47, 1/33, 1/55 ], [ 1/79, 1/21, 1/99 ], [ 1/3, 1/30, 1/12 ], > [ 1/71, 1/48, 1/71 ] ] > ;; ## Write random points to the file and do something ## gap> AppendPointlistToPolymakeObject(poly,vs); gap> Polymake(poly,"POINTS"); [ [ 1/4, 1/75, 1/22 ], [ 1/37, 1/62, 1/19 ], [ 1/91, 1/24, 1/88 ], [ 1/59, 1/67, 1/5 ], [ 1/85, 1/31, 1/76 ], [ 1/4, 1/72, 1/44 ], [ 1/47, 1/33, 1/55 ], [ 1/79, 1/21, 1/99 ], [ 1/3, 1/30, 1/12 ], [ 1/71, 1/48, 1/71 ] ] gap> last=vs; true gap> Polymake(poly,"N_FACETS"); 14 gap> Polymake(poly,"VOLUME"); 56551499691708521629/103286715323123543904000 gap> Polymake(poly,"DIM"); 3 gap> Polymake(poly,"ALTSHULER_DET"); 4032 gap> Polymake(poly,"AMBIENT_DIM"); 3 gap> Polymake(poly,"BALANCED"); true gap> Polymake(poly,"BALANCE"); 1 gap> Polymake(poly,"BOUNDED"); true gap> Polymake(poly,"COCUBICALITY"); 1 gap> Polymake(poly,"DUAL_CONNECTIVITY"); 3 gap> Polymake(poly,"DUAL_DIAMETER"); 4 gap> Polymake(poly,"ESSENTIALLY_GENERIC"); true gap> Polymake(poly,"F_VECTOR"); [ 9, 21, 14 ] gap> Polymake(poly,"F2_VECTOR"); [ [ 9, 42, 42 ], [ 42, 21, 42 ], [ 42, 42, 14 ] ] gap> Polymake(poly,"FACES"); [ [ ], [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ], [ 7 ], [ 8 ], [ 9 ], [ 1, 2 ], [ 1, 4 ], [ 1, 6 ], [ 1, 8 ], [ 2, 4 ], [ 2, 6 ], [ 2, 9 ], [ 3, 4 ], [ 3, 5 ], [ 3, 7 ], [ 3, 9 ], [ 4, 5 ], [ 4, 7 ], [ 4, 8 ], [ 4, 9 ], [ 5, 9 ], [ 6, 7 ], [ 6, 8 ], [ 6, 9 ], [ 7, 8 ], [ 7, 9 ], [ 1, 6, 8 ], [ 2, 4, 9 ], [ 3, 4, 7 ], [ 6, 7, 8 ], [ 4, 7, 8 ], [ 3, 7, 9 ], [ 6, 7, 9 ], [ 1, 4, 8 ], [ 1, 2, 4 ], [ 2, 6, 9 ], [ 1, 2, 6 ], [ 3, 5, 9 ], [ 4, 5, 9 ], [ 3, 4, 5 ], [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ] gap> Polymake(poly,"ADJACENCY"); [ [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 11, 12, 13, 14 ], [ 11, 15, 16, 17 ], [ 18, 19, 20, 21 ], [ 12, 15, 18, 22, 23, 24, 25 ], [ 19, 22, 26 ], [ 13, 16, 27, 28, 29 ], [ 20, 23, 27, 30, 31 ], [ 14, 24, 28, 30 ], [ 17, 21, 25, 26, 29, 31 ], [ 40, 42 ], [ 39, 40 ], [ 32, 42 ], [ 32, 39 ], [ 33, 40 ], [ 41, 42 ], [ 33, 41 ], [ 34, 45 ], [ 43, 45 ], [ 34, 37 ], [ 37, 43 ], [ 44, 45 ], [ 34, 36 ], [ 36, 39 ], [ 33, 44 ], [ 43, 44 ], [ 35, 38 ], [ 32, 35 ], [ 38, 41 ], [ 35, 36 ], [ 37, 38 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ 46 ], [ ] ] gap> Polymake(poly,"FACET_DEGREES"); [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ] gap> Polymake(poly,"FACETS"); [ [ 87, -452, 1800, 44 ], [ -42443748, 474787219, 1685061792, 46231655 ], [ 1403725, 643437067, -190478253, -47332395 ], [ 27853, -108309, -630630, 351252 ], [ 13885273, -1477537, -280945070, -48335100 ], [ -145029, 1373099, 1147776, 7226208 ], [ -235790, -456383, 2076480, 14126013 ], [ 23349, -103132, 738675, -163130 ] , [ -1580061339, 1195816838, 93208905900, 843077785 ], [ -2006700, 2225735, 88056864, 9999187 ], [ -51826, 38850, 2915550, 71269 ], [ -574215, 16096535, 4705056, 17713168 ], [ -519350247, 28577972485, 5781969216, -256601080 ], [ -2303641863, 164204234285, 12897123192, -3359875640 ] ] gap> Polymake(poly,"FAR_HYPERPLANE"); [ 1, 0, 0, 0 ] gap> Polymake(poly,"FEASIBLE"); true gap> Polymake(poly,"N_BOUNDED_VERTICES"); 9 gap> Polymake(poly,"N_FLAGS"); 1 gap> Polymake(poly,"N_POINTS"); 10 gap> Polymake(poly,"N_RIDGES"); 21 gap> Polymake(poly,"N_VERTEX_FACET_INC"); 42 gap> Polymake(poly,"N_VERTICES"); 9 gap> Polymake(poly,"NEIGHBORLINESS"); 1 gap> Polymake(poly,"NEIGHBORLY"); true gap> Polymake(poly,"MINIMAL_VERTEX_ANGLE"); #I Warning!converting a floating point number 314159265358979/100000000000000 gap> Polymake(poly,"POINTED"); true gap> Polymake(poly,"POSITIVE"); true gap> Polymake(poly,"REL_INT_POINT"); [ 526671192497/5114383067430, 12246977/471063600, 2419163/48078360 ] gap> Polymake(poly,"SIMPLICIAL"); true gap> Polymake(poly,"VALID_POINT"); [ 1/4, 1/75, 1/22 ] gap> Polymake(poly,"VERTEX_BARYCENTER"); [ 526671192497/5114383067430, 12246977/471063600, 2419163/48078360 ] gap> Polymake(poly,"VERTEX_DEGREES"); [ 4, 4, 4, 7, 3, 5, 5, 4, 6 ] gap> Polymake(poly,"VERTICES"); [ [ 1/4, 1/75, 1/22 ], [ 1/37, 1/62, 1/19 ], [ 1/91, 1/24, 1/88 ], [ 1/59, 1/67, 1/5 ], [ 1/85, 1/31, 1/76 ], [ 1/4, 1/72, 1/44 ], [ 1/79, 1/21, 1/99 ], [ 1/3, 1/30, 1/12 ], [ 1/71, 1/48, 1/71 ] ] gap> Polymake(poly,"VERTICES_IN_FACETS"); [ [ 1, 6, 8 ], [ 2, 4, 9 ], [ 3, 4, 7 ], [ 6, 7, 8 ], [ 4, 7, 8 ], [ 3, 7, 9 ], [ 6, 7, 9 ], [ 1, 4, 8 ], [ 1, 2, 4 ], [ 2, 6, 9 ], [ 1, 2, 6 ], [ 3, 5, 9 ], [ 4, 5, 9 ], [ 3, 4, 5 ] ] ## test external files: gap> dir:=DirectoriesPackageLibrary("polymaking", "tst")[1];; gap> SetPolymakeDataDirectory(dir);; gap> plane:=CreatePolymakeObjectFromFile("pplane.poly"); # gap> Polymake(plane,"FACES DIMS"); fail gap> Polymake(plane, "FACETS"); [ [ 1, 2, 5 ], [ 1, 2, 6 ], [ 1, 3, 4 ], [ 1, 3, 5 ], [ 1, 4, 6 ], [ 2, 3, 4 ], [ 2, 3, 6 ], [ 2, 4, 5 ], [ 3, 5, 6 ], [ 4, 5, 6 ] ] # gap> STOP_TEST("polymaking.tst", 10000); polymaking-0.8.7/tst/testall.g000644 000766 000024 00000000335 14507124632 016626 0ustar00mhornstaff000000 000000 LoadPackage("polymaking"); # This needs to be done manually exclude:=["visual.tst"]; TestDirectory( DirectoriesPackageLibrary("polymaking", "tst"), rec(exclude := exclude, exitGAP := true)); FORCE_QUIT_GAP(1); polymaking-0.8.7/doc/manual.six000644 000766 000024 00000025352 14507124702 016747 0ustar00mhornstaff000000 000000 #SIXFORMAT GapDocGAP HELPBOOKINFOSIXTMP := rec( encoding := "UTF-8", bookname := "polymaking", entries := [ [ "Title page", ".", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], [ "Abstract", ".-1", [ 0, 0, 1 ], 23, 2, "abstract", "X7AA6C5737B711C89" ], [ "Copyright", ".-2", [ 0, 0, 2 ], 30, 2, "copyright", "X81488B807F2A1CF1" ] , [ "Acknowledgements", ".-3", [ 0, 0, 3 ], 39, 2, "acknowledgements", "X82A988D47DFAFCFA" ], [ "Table of Contents", ".-4", [ 0, 0, 4 ], 44, 3, "table of contents", "X8537FEB07AF2BEC8" ], [ "\033[1X\033[33X\033[0;-2YInstallation and Preface\033[133X\033[101X", "1", [ 1, 0, 0 ], 1, 4, "installation and preface", "X8794FBB27B46C08E" ], [ "\033[1X\033[33X\033[0;-2YA few words about the installation of polymake\\ 033[133X\033[101X", "1.1", [ 1, 1, 0 ], 25, 4, "a few words about the installation of polymake", "X7A02C64B7A3777FF" ], [ "\033[1X\033[33X\033[0;-2YSetting variables for external programs\033[133X\ \033[101X", "1.2", [ 1, 2, 0 ], 36, 4, "setting variables for external programs", "X851C596486F918F0" ], [ "\033[1X\033[33X\033[0;-2YSetting variables permanently\033[133X\033[101X" , "1.2-3", [ 1, 2, 3 ], 59, 5, "setting variables permanently", "X7943B579846BDB76" ], [ "\033[1X\033[33X\033[0;-2YPolymake interaction\033[133X\033[101X", "2", [ 2, 0, 0 ], 1, 6, "polymake interaction", "X86C82DCF81362F41" ], [ "\033[1X\033[33X\033[0;-2YCreating Polymake Objects\033[133X\033[101X", "2.1", [ 2, 1, 0 ], 4, 6, "creating polymake objects", "X83D426D5855D1FD6" ], [ "\033[1X\033[33X\033[0;-2YAccessing Properties of Polymake Objects\033[133X\ \033[101X", "2.2", [ 2, 2, 0 ], 73, 7, "accessing properties of polymake objects", "X7D9EBB0383B9BD1C" ], [ "\033[1X\033[33X\033[0;-2YExample: Creating and Accessing Polymake Objects\\ 033[133X\033[101X", "2.3", [ 2, 3, 0 ], 133, 8, "example: creating and accessing polymake objects", "X7CEF475187927AEA" ], [ "\033[1X\033[33X\033[0;-2YWriting to Polymake Objects\033[133X\033[101X", "2.4", [ 2, 4, 0 ], 169, 9, "writing to polymake objects", "X87BEE1B37D9F1F5E" ], [ "\033[1X\033[33X\033[0;-2YCalling Polymake and converting its output\033[13\ 3X\033[101X", "2.5", [ 2, 5, 0 ], 259, 10, "calling polymake and converting its output", "X8468E0E381642B14" ], [ "\033[1X\033[33X\033[0;-2YAn Example\033[133X\033[101X", "2.6", [ 2, 6, 0 ], 300, 11, "an example", "X7B5623E3821CC0D0" ], [ "\033[1X\033[33X\033[0;-2YGlobal Variables\033[133X\033[101X", "3", [ 3, 0, 0 ], 1, 13, "global variables", "X7D9044767BEB1523" ], [ "\033[1X\033[33X\033[0;-2YGetting information about polymake output\033[133\ X\033[101X", "3.1", [ 3, 1, 0 ], 4, 13, "getting information about polymake output", "X86AC0C6B807BEBDE" ], [ "\033[1X\033[33X\033[0;-2YVariables for system interaction\033[133X\033[101\ X", "3.2", [ 3, 2, 0 ], 22, 13, "variables for system interaction", "X7B786DAF80136FF4" ], [ "\033[1X\033[33X\033[0;-2YConverting Polymake Output\033[133X\033[101X", "4", [ 4, 0, 0 ], 1, 15, "converting polymake output", "X7D23E80E841CDD67" ], [ "\033[1X\033[33X\033[0;-2YThe General Method\033[133X\033[101X", "4.1", [ 4, 1, 0 ], 4, 15, "the general method", "X862D57D87A244DE2" ], [ "\033[1X\033[33X\033[0;-2YConverter- Philosopy\033[133X\033[101X", "4.1-1", [ 4, 1, 1 ], 25, 15, "converter- philosopy", "X7CDBEA427EE69C71" ], [ "\033[1X\033[33X\033[0;-2YConversion Functions\033[133X\033[101X", "4.2", [ 4, 2, 0 ], 80, 16, "conversion functions", "X7FF4170183C83CC1" ], [ "Bibliography", "bib", [ "Bib", 0, 0 ], 1, 19, "bibliography", "X7A6F98FD85F02BFE" ], [ "References", "bib", [ "Bib", 0, 0 ], 1, 19, "references", "X7A6F98FD85F02BFE" ], [ "Index", "ind", [ "Ind", 0, 0 ], 1, 20, "index", "X83A0356F839C696F" ], [ "\033[2XSetPolymakeDataDirectory\033[102X", "1.2-1", [ 1, 2, 1 ], 44, 5, "setpolymakedatadirectory", "X794A38E981F9E76F" ], [ "\033[2XSetPolymakeCommand\033[102X", "1.2-2", [ 1, 2, 2 ], 52, 5, "setpolymakecommand", "X854645287BC9303E" ], [ "\033[2XCreateEmptyFile\033[102X", "2.1-1", [ 2, 1, 1 ], 17, 6, "createemptyfile", "X7C87B1807E036A85" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCreatePolymakeObject\033[102X", "2.1-2", [ 2, 1, 2 ], 25, 6, "createpolymakeobject", "X8625E7E2845F1634" ], [ "\033[2XCheckAppVerTypList\033[102X", "2.1-3", [ 2, 1, 3 ], 48, 7, "checkappvertyplist", "X8135E88E87DD1551" ], [ "\033[2XCreatePolymakeObjectFromFile\033[102X", "2.1-4", [ 2, 1, 4 ], 59, 7, "createpolymakeobjectfromfile", "X7801F05A81E23EED" ], [ "\033[2XCreatePolymakeObjectFromFile\033[102X", "2.1-4", [ 2, 1, 4 ], 59, 7, "createpolymakeobjectfromfile", "X7801F05A81E23EED" ], [ "\033[2XDirectoryOfPolymakeObject\033[102X", "2.2-1", [ 2, 2, 1 ], 85, 7, "directoryofpolymakeobject", "X86D967C684B27108" ], [ "\033[2XFilenameOfPolymakeObject\033[102X", "2.2-2", [ 2, 2, 2 ], 92, 7, "filenameofpolymakeobject", "X87470AB079A2F550" ], [ "\033[2XFullFilenameOfPolymakeObject\033[102X", "2.2-3", [ 2, 2, 3 ], 101, 8, "fullfilenameofpolymakeobject", "X809D309F7D31DD2C" ], [ "\033[2XNamesKnownPropertiesOfPolymakeObject\033[102X", "2.2-4", [ 2, 2, 4 ], 109, 8, "namesknownpropertiesofpolymakeobject", "X850B38F27F1BF7E8" ], [ "\033[2XKnownPropertiesOfPolymakeObject\033[102X", "2.2-5", [ 2, 2, 5 ], 118, 8, "knownpropertiesofpolymakeobject", "X7D79C5F1817041C5" ], [ "\033[2XPropertyOfPolymakeObject\033[102X", "2.2-6", [ 2, 2, 6 ], 126, 8, "propertyofpolymakeobject", "X7E538D1B7898C8E6" ], [ "\033[2XAppendToPolymakeObject\033[102X", "2.4-1", [ 2, 4, 1 ], 176, 9, "appendtopolymakeobject", "X785DCA4487F168F8" ], [ "\033[2XAppendPointlistToPolymakeObject\033[102X", "2.4-2", [ 2, 4, 2 ], 189, 9, "appendpointlisttopolymakeobject", "X7F5326338033B57C" ], [ "\033[2XAppendVertexlistToPolymakeObject\033[102X", "2.4-3", [ 2, 4, 3 ], 200, 9, "appendvertexlisttopolymakeobject", "X7E150BA67CEBC00E" ], [ "\033[2XAppendInequalitiesToPolymakeObject\033[102X", "2.4-4", [ 2, 4, 4 ], 208, 9, "appendinequalitiestopolymakeobject", "X7EBE5FB284FBFFE6" ], [ "\033[2XConvertMatrixToPolymakeString\033[102X", "2.4-5", [ 2, 4, 5 ], 217, 10, "convertmatrixtopolymakestring", "X83DC7FC280731B04" ], [ "\033[2XClearPolymakeObject\033[102X", "2.4-6", [ 2, 4, 6 ], 227, 10, "clearpolymakeobject", "X804AAE4882743E91" ], [ "\033[2XClearPolymakeObject\033[102X", "2.4-6", [ 2, 4, 6 ], 227, 10, "clearpolymakeobject", "X804AAE4882743E91" ], [ "\033[2XWriteKnownPropertyToPolymakeObject\033[102X", "2.4-7", [ 2, 4, 7 ], 243, 10, "writeknownpropertytopolymakeobject", "X840C02CD815FF766" ], [ "\033[2XUnbindKnownPropertyOfPolymakeObject\033[102X", "2.4-8", [ 2, 4, 8 ], 252, 10, "unbindknownpropertyofpolymakeobject", "X7A3FF18C7FD1A626" ], [ "\033[2XPolymake\033[102X", "2.5-1", [ 2, 5, 1 ], 262, 10, "polymake", "X7DBA99E87EC51D53" ], [ "\033[2XInfoPolymaking\033[102X", "3.1-1", [ 3, 1, 1 ], 7, 13, "infopolymaking", "X85BA7A3D7C698B68" ], [ "\033[2XPOLYMAKE_LAST_FAIL_REASON\033[102X", "3.1-2", [ 3, 1, 2 ], 15, 13, "polymake_last_fail_reason", "X79E1C63D8516D334" ], [ "\033[2XPOLYMAKE_COMMAND\033[102X", "3.2-1", [ 3, 2, 1 ], 31, 13, "polymake_command", "X7B35A5217C8C7B04" ], [ "\033[2XPOLYMAKE_DATA_DIR\033[102X", "3.2-2", [ 3, 2, 2 ], 39, 13, "polymake_data_dir", "X7C07B16B873BA46D" ], [ "\033[2XConvertPolymakeOutputToGapNotation\033[102X", "4.1-2", [ 4, 1, 2 ], 44, 15, "convertpolymakeoutputtogapnotation", "X7EB6D80C816CF667" ], [ "\033[2XSplitPolymakeOutputStringIntoBlocks\033[102X", "4.1-3", [ 4, 1, 3 ], 58, 16, "splitpolymakeoutputstringintoblocks", "X841D81327C6F6E29" ], [ "\033[2XObjectConverters\033[102X", "4.1-4", [ 4, 1, 4 ], 68, 16, "objectconverters", "X83199F737F4BE4FD" ], [ "\033[2XConvertPolymakeNumber\033[102X", "4.2-1", [ 4, 2, 1 ], 86, 16, "convertpolymakenumber", "X7FC98443862DB83F" ], [ "\033[2XConvertPolymakeScalarToGAP\033[102X", "4.2-2", [ 4, 2, 2 ], 94, 16, "convertpolymakescalartogap", "X7F2A1C2C808E4A07" ], [ "\033[2XConvertPolymakeMatrixOrListOfSetsToGAP\033[102X", "4.2-3", [ 4, 2, 3 ], 101, 16, "convertpolymakematrixorlistofsetstogap", "X82A7FF9983EB61E2" ], [ "\033[2XConvertPolymakeMatrixOrListOfSetsToGAPPlusOne\033[102X", "4.2-3", [ 4, 2, 3 ], 101, 16, "convertpolymakematrixorlistofsetstogapplusone", "X82A7FF9983EB61E2" ], [ "\033[2XConvertPolymakeMatrixToGAP\033[102X", "4.2-4", [ 4, 2, 4 ], 112, 17, "convertpolymakematrixtogap", "X817C6B4180BF6365" ], [ "\033[2XConvertPolymakeMatrixToGAPKillOnes\033[102X", "4.2-4", [ 4, 2, 4 ], 112, 17, "convertpolymakematrixtogapkillones", "X817C6B4180BF6365" ], [ "\033[2XConvertPolymakeVectorToGAP\033[102X", "4.2-5", [ 4, 2, 5 ], 120, 17, "convertpolymakevectortogap", "X85F7F6787D346CC0" ], [ "\033[2XConvertPolymakeVectorToGAPKillOne\033[102X", "4.2-5", [ 4, 2, 5 ], 120, 17, "convertpolymakevectortogapkillone", "X85F7F6787D346CC0" ], [ "\033[2XConvertPolymakeIntVectorToGAPPlusOne\033[102X", "4.2-5", [ 4, 2, 5 ], 120, 17, "convertpolymakeintvectortogapplusone", "X85F7F6787D346CC0" ], [ "\033[2XConvertPolymakeBoolToGAP\033[102X", "4.2-6", [ 4, 2, 6 ], 130, 17, "convertpolymakebooltogap", "X87B6F9867EE800C7" ], [ "\033[2XConvertPolymakeSetToGAP\033[102X", "4.2-7", [ 4, 2, 7 ], 137, 17, "convertpolymakesettogap", "X846B284085825FEA" ], [ "\033[2XConvertPolymakeListOfSetsToGAP\033[102X", "4.2-8", [ 4, 2, 8 ], 145, 17, "convertpolymakelistofsetstogap", "X7E7886D68356F592" ], [ "\033[2XConvertPolymakeListOfSetsToGAPPlusOne\033[102X", "4.2-8", [ 4, 2, 8 ], 145, 17, "convertpolymakelistofsetstogapplusone", "X7E7886D68356F592" ], [ "\033[2XConvertPolymakeGraphToGAP\033[102X", "4.2-9", [ 4, 2, 9 ], 155, 18, "convertpolymakegraphtogap", "X7EBECAA07F8B58D8" ] ] ); polymaking-0.8.7/doc/chapBib_mj.html000644 000766 000024 00000004656 14507124702 017655 0ustar00mhornstaff000000 000000 GAP (polymaking) - References

Goto Chapter: Top 1 2 3 4 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

References

[GJ] Gawrilow, E. and Joswig, M., polymake, \URL{http://polymake.org/}.

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/_entities.xml000644 000766 000024 00000000065 14507124676 017456 0ustar00mhornstaff000000 000000 polymaking'> polymaking-0.8.7/doc/chap0_mj.html000644 000766 000024 00000030727 14507124702 017316 0ustar00mhornstaff000000 000000 GAP (polymaking) - Contents
Goto Chapter: Top 1 2 3 4 Bib Ind
 [Top of Book]  [Contents]   [Next Chapter] 

polymaking

Interfacing the geometry software polymake

Version 0.8.7

4 October 2023

Marc Roeder
Email: roeder.marc@gmail.com

Abstract

This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al. [GJ]. The polymake program itself is not included.

Copyright

© 2007--2013 Marc Roeder.

This package is distributed under the terms of the GNU General Public License version 2 or later (at your convenience). See the file "LICENSE" or https://www.gnu.org/copyleft/gpl.html

Acknowledgements

This work has been supported by Marie Curie Grant No. MTKD-CT-2006-042685

Contents

1 Installation and Preface
2 Polymake interaction
3 Global Variables
4 Converting Polymake Output
References
Index

 [Top of Book]  [Contents]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap2.html000644 000766 000024 00000075216 14507124702 016634 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 2: Polymake interaction
Goto Chapter: Top 1 2 3 4 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

2 Polymake interaction
 2.1 Creating Polymake Objects
 2.2 Accessing Properties of Polymake Objects
 2.3 Example: Creating and Accessing Polymake Objects
 2.4 Writing to Polymake Objects
 2.5 Calling Polymake and converting its output
 2.6 An Example

2 Polymake interaction

2.1 Creating Polymake Objects

The interaction with the polymake program is done via files. A PolymakeObject is mainly a pointer to a file and a list of known properties of the object. These properties need not be stored in the file. Whenever polymake is called, the returned value is read from standard output and stored in the PolymakeObject corresponding to the file for which polymake is called. The files for polymake are written in the old (non-xml) format. The first run of polymake converts them into the new (xml) format. This means that changes to the file by means of the methods outlined below after the first run of polymake will probably lead to corrupted files.

2.1-1 CreateEmptyFile
‣ CreateEmptyFile( filename )( method )

Returns: nothing

Creates an empty file with name filename. Note that filename has to include the full path and the directory for the file must exist.

2.1-2 CreatePolymakeObject
‣ CreatePolymakeObject( )( method )
‣ CreatePolymakeObject( appvertyp )( method )
‣ CreatePolymakeObject( dir )( method )
‣ CreatePolymakeObject( dir, appvertyp )( method )
‣ CreatePolymakeObject( prefix, dir )( method )
‣ CreatePolymakeObject( prefix, dir, appvertyp )( method )

Returns: PolymakeObject

If called without arguments, this method generates an empty file in the directory defined by POLYMAKE_DATA_DIR (3.2-2). If a directory dir is given (this directory must exist), an empty file is generated in this directory. If prefix is not given, the file is called polyN where N is the current runtime. If a file of this name already exists, a number is appended separated by a dot (example: "poly1340" and "poly1340.1"). If prefix is given, the filename starts with this prefix. Optionally, the file can be generated with a header specifying application, version and type of the object. This is done by passing the triple of strings appvertyp to CreatePolymakeObject. A valid triple is ["polytope","2.3","RationalPolytope"]. Validity is checked by CheckAppVerTypList (2.1-3).

2.1-3 CheckAppVerTypList
‣ CheckAppVerTypList( appvertyp )( method )

Returns: bool

Checks if the triple arppvertyp of strings specifies an application and type of polymake version 2.3. More specifically, the first entry has to be an application from ["polytope","surface","topaz"] and the third entry has to be a type corresponding to the application given in the first entry. The second entry is not checked.

2.1-4 CreatePolymakeObjectFromFile
‣ CreatePolymakeObjectFromFile( filename )( method )
‣ CreatePolymakeObjectFromFile( dir, filename )( method )

Returns: PolymakeObject

This method generates a PolymakeObject corresponding to the file filename in the directory dir. If dir is not given, the POLYMAKE_DATA_DIR is used.If no file with name filename exists in dir (or POLYMAKE_DATA_DIR, respectively), an empty file is created. Note that the contents of the file do not matter for the generation of the object. In particular, the object does not know any of the properties that might be encoded in the file. The only way to transfer information from files to PolymakeObjects is via Polymake (2.5-1).

2.2 Accessing Properties of Polymake Objects

A PolymakeObject contains information about the directory of its file, the name of its file and about properties calculated by calling Polymake (2.5-1). The properties returned by the polymake program are stored under the name polymake assigns to them (that is, the name of the data block in the corresponding file). The following methods can be used to access the information stored in a PolymakeObject. But be careful! All functions return the actual object. No copies are made. So if you change one of the returned objects, you change the PolymakeObject itself.

2.2-1 DirectoryOfPolymakeObject
‣ DirectoryOfPolymakeObject( poly )( method )

Returns: Directory

Returns the directory of the file associated with poly.

2.2-2 FilenameOfPolymakeObject
‣ FilenameOfPolymakeObject( poly )( method )

Returns: String

Returns the name of the file associated with poly. This does only mean the name of the file, not the full path. For the full path and file name see FullFilenameOfPolymakeObject (2.2-3)

2.2-3 FullFilenameOfPolymakeObject
‣ FullFilenameOfPolymakeObject( poly )( method )

Returns: String

Returns the file associated with the PolymakeObject poly with its complete path.

2.2-4 NamesKnownPropertiesOfPolymakeObject
‣ NamesKnownPropertiesOfPolymakeObject( poly )( method )

Returns: List of Strings

Returns a list of the names of all known properties. This does only include the properties returned by Polymake (2.5-1), "dir" and "filename" are not included. If no properties are known, fail is returned.

2.2-5 KnownPropertiesOfPolymakeObject
‣ KnownPropertiesOfPolymakeObject( poly )( method )

Returns: Record

Returns the record of all known properties. If no properties are known, fail is returned.

2.2-6 PropertyOfPolymakeObject
‣ PropertyOfPolymakeObject( poly, name )( method )

Returns the value of the property name if it is known. If the value is not known, fail is returned. name must be a String.

2.3 Example: Creating and Accessing Polymake Objects

Suppose the file /tmp/threecube.poly contains the three dimensional cube in polymake form. Now generate a PolymakeObject from this file and call Polymake (2.5-1) to make the vertices of the cube known to the object.


### suppose we have a polymake file /tmp/threecube.poly
### containing a cube in three dimensions
gap> cube:=CreatePolymakeObjectFromFile(Directory("/tmp"),"threecube.poly");
<polymake object. No properties known>
gap> FilenameOfPolymakeObject(cube);
"threecube.poly"
gap> FullFilenameOfPolymakeObject(cube);
"/tmp/threecube.poly"
   #nothing is known about the cube:
gap> NamesKnownPropertiesOfPolymakeObject(cube);  
fail
gap> Polymake(cube,"VERTICES");
[ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ], 
  [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ]  
   # Now <cube> knows its vertices:
gap> Print(cube);
<polymake object threecube.poly. Properties known: [ "VERTICES" ]>
gap> PropertyOfPolymakeObject(cube,"VERTICES");
[ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ],
  [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ]
gap> KnownPropertiesOfPolymakeObject(cube);
rec(
  VERTICES := [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ],
      [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] )

2.4 Writing to Polymake Objects

To transfer data from GAP to polymake, the following methods can be used. But bear in mind that none of these functions test if the resulting polymake file is still consistent.

2.4-1 AppendToPolymakeObject
‣ AppendToPolymakeObject( poly, string )( method )

Returns: nothing

This appends the string string to the file associated to the PolymakeObject poly. It is not tested if the string is syntactically correct as a part of a polymake file. It is also not tested if the string is compatible with the data already contained in the file.

INEQUALITIES, POINTS and VERTICES can be appended to a polymake object using the following functions:

2.4-2 AppendPointlistToPolymakeObject
‣ AppendPointlistToPolymakeObject( poly, pointlist )( method )

Returns: nothing

Takes a list pointlist of vectors and converts it into a string which represents a polymake block labeled "POINTS". This string is then added to the file associated with poly. The "POINTS" block of the file associated with poly then contains points with leading ones, as polymake uses affine notation.

2.4-3 AppendVertexlistToPolymakeObject
‣ AppendVertexlistToPolymakeObject( poly, pointlist )( method )

Returns: nothing

Does the same as AppendPointlistToPolymakeObject, but with "VERTICES" instead of "POINTS".

2.4-4 AppendInequalitiesToPolymakeObject
‣ AppendInequalitiesToPolymakeObject( poly, ineqlist )( method )

Returns: nothing

Just appends the inequalities given in ineqlist to the polymake object poly (with caption "INEQUALITIES"). Note that this does not check if an "INEQUALITIES" section does already exist in the file associated with poly.

2.4-5 ConvertMatrixToPolymakeString
‣ ConvertMatrixToPolymakeString( name, matrix )( method )

Returns: String

This function takes a matrix matrix and converts it to a string. This string can then be appended to a polymake file via AppendToPolymakeObject (2.4-1) to form a block of data labeled name. This may be used to write blocks like INEQUALITIES or FACETS.

2.4-6 ClearPolymakeObject
‣ ClearPolymakeObject( poly )( method )
‣ ClearPolymakeObject( poly, appvertyp )( method )

Returns: nothing

Deletes all known properties of the PolymakeObject poly and replaces its file with an empty one.
If the triple of strings appvertyp specifying application, version and type (see CheckAppVerTypList (2.1-3)) is given, the file is replaced with a file that contains only a header specifying application, version and type of the polymake object.

There are also methods to manipulate the known values without touching the file of the PolymakeObject:

2.4-7 WriteKnownPropertyToPolymakeObject
‣ WriteKnownPropertyToPolymakeObject( poly, name, data )( method )

Takes the object data and writes it to the known properties section of the PolymakeObject poly. The string name is used as the name of the property. If a property with that name already exists, it is overwritten. Again, there is no check if data is consistent, correct or meaningful.

2.4-8 UnbindKnownPropertyOfPolymakeObject
‣ UnbindKnownPropertyOfPolymakeObject( poly, name )( method )

If the PolymakeObject poly has a property with name name, that property is unbound. If there is no such property, fail is returned.

2.5 Calling Polymake and converting its output

2.5-1 Polymake
‣ Polymake( poly, option: PolymakeNolookup )( method )

This method calls the polymake program (see POLYMAKE_COMMAND (3.2-1)) with the option option. You may use several keywords such as "FACETS VERTICES" as an option. The returned value is cut into blocks starting with keywords (which are taken from output and not looked up in option). Each block is then interpreted and translated into GAP readable form. This translation is done using the functions given in ObjectConverters (4.1-4). The first line of each block of polymake output is taken as a keyword and the according entry in ObjectConverters (4.1-4) is called to convert the block into GAP readable form. If no conversion function is known, an info string is printed and fail is returned. If only one keyword has been given as option, Polymake returns the result of the conversion operation. If more than one keyword has been given or the output consists of more than one block, Polymake returns fail. In any case, the calculated values for each block are stored as known properties of the PolymakeObject poly as long as they are not fail. If Polymake is called with an option that corresponds to a name of a known property of poly, the known property is returned. In this case, there is no call of the external program. (see below for suppression of this feature).

Note that the command Polymake returns fail if nothing is returned by the program polymake or more than one block of data is returned. For example, the returned value of Polymake(poly,"VISUAL") is always fail. Likewise, Polymake(poly,"POINTS VERTICES") will return fail (but may add new known properties to poly). For a description of the conversion functions, see chapter 4.

If the option PolymakeNolookup is set to anything else than false, the polymake program is called even if poly already has a known property with name option.

Note that whenever Polymake returns fail, a description of the problem is stored in POLYMAKE_LAST_FAIL_REASON (3.1-2). If you call Polymake with more than one keyword, POLYMAKE_LAST_FAIL_REASON (3.1-2) is changed before polymake is called. So any further reason to return fail will overwrite it.

2.6 An Example

Let's generate a three dimensional permutahedron.

    
    gap> S:=SymmetricGroup(3);
    Sym( [ 1 .. 3 ] )
    gap> v:=[1,2,3];
    [ 1, 2, 3 ]
    gap> points3:=Orbit(S,v,Permuted);;
         # project to reduce ambient dimension
    gap> points:=points3{[1..6]}{[1,2]};;
    gap> permutahedron:=CreatePolymakeObject();
    <polymake object. No properties known>
    gap> AppendPointlistToPolymakeObject(permutahedron,points);
    gap> Polymake(permutahedron,"VOLUME");
    3
    gap> Polymake(permutahedron,"N_VERTICES");
    6
          #Now <permutahedron> knows its number of vertices, but not the vertices:
    gap> PropertyOfPolymakeObject(permutahedron,"VERTICES");
    fail
    gap> NamesKnownPropertiesOfPolymakeObject(permutahedron);
    [ "VOLUME", "N_VERTICES" ]
        #Let's look at the object!
    gap> Polymake(permutahedron,"VISUAL");
    #I  There was no or wrong polymake output
    fail
    gap> Polymake(permutahedron,"DIM");
    2
    
    
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap3.html000644 000766 000024 00000014015 14507124702 016623 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 3: Global Variables
Goto Chapter: Top 1 2 3 4 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

3 Global Variables
 3.1 Getting information about polymake output
 3.2 Variables for system interaction

3 Global Variables

3.1 Getting information about polymake output

3.1-1 InfoPolymaking
‣ InfoPolymaking( info class )

If set to at least 2, the output of polymake is shown. At level 1, warnings are shown. This is the default. And at level 0, the polymake package remains silent.

3.1-2 POLYMAKE_LAST_FAIL_REASON
‣ POLYMAKE_LAST_FAIL_REASON( global variable )

Contains a string that explains the last occurrence of fail as a return value of Polymake (2.5-1).

3.2 Variables for system interaction

The variables for interaction with the system are contained in the file environment.gi. Each of these variables has a function to set it, see 1.2. If POLYMAKE_COMMAND or POLYMAKE_DATA_DIR are set at startup, they are not overwritten. So if you don't want (or don't have the rights) to modify environment.gi, you can set the variables in your .gaprc file.

3.2-1 POLYMAKE_COMMAND
‣ POLYMAKE_COMMAND( global variable )

This variable should contain the name of the polymake program in the form as returned by Filename So a probable value is Filename(Directory("/usr/local/bin"),"polymake").

3.2-2 POLYMAKE_DATA_DIR
‣ POLYMAKE_DATA_DIR( global variable )

In this directory the files for polymake will be created. By default, this generates a temporary directory using DirectoryTemporary

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap1_mj.html000644 000766 000024 00000020236 14507124702 017311 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 1: Installation and Preface
Goto Chapter: Top 1 2 3 4 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

1 Installation and Preface
 1.1 A few words about the installation of polymake
 1.2 Setting variables for external programs

1 Installation and Preface

To install the package, just unpack it in your packages directory (usually ~/gap/pkg for local installation). To use polymaking, you need a working installation of the program polymake https://polymake.org. The package has been tested on linux and Mac OS X (10.4, 10.5 and 10.6). But it should be as platform independent as GAP and polymake.

The interaction with polymake is restricted to writing files and carrying out simple operations. These looked like
polymake file KEYWORD1 KEYWORD2 KEYWORD3
on the command line for polymake versions before 4. The keywords are polymake methods without arguments. Since polymake no longer supports this interface the polymaking package provides the script lib/pm_script_arg.pl to emulate this.
polymake ––script lib/pm_script_arg.pl KEYWORD1 KEYWORD2 KEYWORD3
Using custom scripts is not supported.
Every call to polymake will re-start the program anew. This causes considerable overhead. The number of calls to polymake is reduced by caching the results in the so-called PolymakeObject in GAP. As of polymaking version 0.8.0, old versions of polymake (i.e. versions before 2.7.9) are not supported anymore.

1.1 A few words about the installation of polymake

polymaking will try to guess the location of polymake. If this fails, a warning is issued at load time (InfoWarning level 1). Note that the guessing procedure is suppressed when POLYMAKE_COMMAND (3.2-1) is set manually (see 1.2-3).
setenv PATH ${PATH}:<your polymakepath>
The general rule is: If polymaking finds polymake by itself, there is nothing to worry about.

1.2 Setting variables for external programs

As polymaking uses the program polymake, it needs to know where this program lives. The communication with polymake is done by writing files for polymake and reading its output (as returned to standard output "the prompt"). Note that the interface does not read any polymake file.

1.2-1 SetPolymakeDataDirectory
‣ SetPolymakeDataDirectory( dir )( method )

Sets the directory in which all polymake files are created to dir. The standard place for these files is a temporary directory generated when the package is loaded. This manipulates POLYMAKE_DATA_DIR (3.2-2).

1.2-2 SetPolymakeCommand
‣ SetPolymakeCommand( command )( method )

Sets the name for the polymake program to command. This manipulates POLYMAKE_COMMAND (3.2-1).

1.2-3 Setting variables permanently

To permanently set the values of POLYMAKE_COMMAND (3.2-1), and POLYMAKE_DATA_DIR (3.2-2), add the lines

POLYMAKE_DATA_DIR:=Directory("/home/mypolymakedatadir");
POLYMAKE_COMMAND:=Filename(Directory("/home/mypolymakebindir/"),"polymake");

to your .gaprc file (see Reference: The gap.ini and gaprc files). Note that these have to be before the LoadPackage("polymaking"); line. Or you can change the values of the above variables by editing lib/environment.gi

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/title.xml000644 000766 000024 00000002217 14507124676 016615 0ustar00mhornstaff000000 000000 polymaking Interfacing the geometry software polymake Version 0.8.7 Marc Roeder
roeder.marc@gmail.com
4 October 2023 This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al. . The polymake program itself is not included. ©right; 2007--2013 Marc Roeder.

This package is distributed under the terms of the GNU General Public License version 2 or later (at your convenience). See the file "LICENSE" or https://www.gnu.org/copyleft/gpl.html This work has been supported by Marie Curie Grant No. MTKD-CT-2006-042685 polymaking-0.8.7/doc/manual.js000644 000766 000024 00000010113 14507124702 016545 0ustar00mhornstaff000000 000000 /* manual.js Frank Lübeck */ /* This file contains a few javascript functions which allow to switch between display styles for GAPDoc HTML manuals. If javascript is switched off in a browser or this file in not available in a manual directory, this is no problem. Users just cannot switch between several styles and don't see the corresponding button. A style with name mystyle can be added by providing two files (or only one of them). mystyle.js: Additional javascript code for the style, it is read in the HTML pages after this current file. The additional code may adjust the preprocessing function jscontent() with is called onload of a file. This is done by appending functions to jscontentfuncs (jscontentfuncs.push(newfunc);). Make sure, that your style is still usable without javascript. mystyle.css: CSS configuration, read after manual.css (so it can just reconfigure a few details, or overwrite everything). Then adjust chooser.html such that users can switch on and off mystyle. A user can change the preferred style permanently by using the [Style] link and choosing one. Or one can append '?GAPDocStyle=mystyle' to the URL when loading any file of the manual (so the style can be configured in the GAP user preferences). */ /* generic helper function */ function deleteCookie(nam) { document.cookie = nam+"=;Path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT"; } /* read a value from a "nam1=val1;nam2=val2;..." string (e.g., the search part of an URL or a cookie */ function valueString(str,nam) { var cs = str.split(";"); for (var i=0; i < cs.length; i++) { var pos = cs[i].search(nam+"="); if (pos > -1) { pos = cs[i].indexOf("="); return cs[i].slice(pos+1); } } return 0; } /* when a non-default style is chosen via URL or a cookie, then the cookie is reset and the styles .js and .css files are read */ function overwriteStyle() { /* style in URL? */ var style = valueString(window.location.search, "GAPDocStyle"); /* otherwise check cookie */ if (style == 0) style = valueString(document.cookie, "GAPDocStyle"); if (style == 0) return; if (style == "default") deleteCookie("GAPDocStyle"); else { /* ok, we set the cookie for path "/" */ var path = "/"; /* or better like this ??? var here = window.location.pathname.split("/"); for (var i=0; i+3 < here.length; i++) path = path+"/"+here[i]; */ document.cookie = "GAPDocStyle="+style+";Path="+path; /* split into names of style files */ var stlist = style.split(","); /* read style's css and js files */ for (var i=0; i < stlist.length; i++) { document.writeln(''); document.writeln(''); } } } /* this adds a "[Style]" link next to the MathJax switcher */ function addStyleLink() { var line = document.getElementById("mathjaxlink"); var el = document.createElement("a"); var oncl = document.createAttribute("href"); var back = window.location.protocol+"//" if (window.location.protocol == "http:" || window.location.protocol == "https:") { back = back+window.location.host; if (window.location.port != "") { back = back+":"+window.location.port; } } back = back+window.location.pathname; oncl.nodeValue = "chooser.html?BACK="+back; el.setAttributeNode(oncl); var cont = document.createTextNode(" [Style]"); el.appendChild(cont); line.appendChild(el); } var jscontentfuncs = new Array(); jscontentfuncs.push(addStyleLink); /* the default jscontent() only adds the [Style] link to the page */ function jscontent () { for (var i=0; i < jscontentfuncs.length; i++) jscontentfuncs[i](); } polymaking-0.8.7/doc/chapInd.html000644 000766 000024 00000015463 14507124702 017203 0ustar00mhornstaff000000 000000 GAP (polymaking) - Index

Goto Chapter: Top 1 2 3 4 Bib Ind

Index

AppendInequalitiesToPolymakeObject 2.4-4
AppendPointlistToPolymakeObject 2.4-2
AppendToPolymakeObject 2.4-1
AppendVertexlistToPolymakeObject 2.4-3
CheckAppVerTypList 2.1-3
ClearPolymakeObject 2.4-6 2.4-6
ConvertMatrixToPolymakeString 2.4-5
ConvertPolymakeBoolToGAP 4.2-6
ConvertPolymakeGraphToGAP 4.2-9
ConvertPolymakeIntVectorToGAPPlusOne 4.2-5
ConvertPolymakeListOfSetsToGAP 4.2-8
ConvertPolymakeListOfSetsToGAPPlusOne 4.2-8
ConvertPolymakeMatrixOrListOfSetsToGAP 4.2-3
ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne 4.2-3
ConvertPolymakeMatrixToGAP 4.2-4
ConvertPolymakeMatrixToGAPKillOnes 4.2-4
ConvertPolymakeNumber 4.2-1
ConvertPolymakeOutputToGapNotation 4.1-2
ConvertPolymakeScalarToGAP 4.2-2
ConvertPolymakeSetToGAP 4.2-7
ConvertPolymakeVectorToGAP 4.2-5
ConvertPolymakeVectorToGAPKillOne 4.2-5
CreateEmptyFile 2.1-1
CreatePolymakeObject 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2
CreatePolymakeObjectFromFile 2.1-4 2.1-4
DirectoryOfPolymakeObject 2.2-1
FilenameOfPolymakeObject 2.2-2
FullFilenameOfPolymakeObject 2.2-3
InfoPolymaking 3.1-1
KnownPropertiesOfPolymakeObject 2.2-5
NamesKnownPropertiesOfPolymakeObject 2.2-4
ObjectConverters 4.1-4
Polymake 2.5-1
POLYMAKE_COMMAND 3.2-1
POLYMAKE_DATA_DIR 3.2-2
POLYMAKE_LAST_FAIL_REASON 3.1-2
PropertyOfPolymakeObject 2.2-6
SetPolymakeCommand 1.2-2
SetPolymakeDataDirectory 1.2-1
SplitPolymakeOutputStringIntoBlocks 4.1-3
UnbindKnownPropertyOfPolymakeObject 2.4-8
WriteKnownPropertyToPolymakeObject 2.4-7

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap3_mj.html000644 000766 000024 00000014403 14507124702 017312 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 3: Global Variables
Goto Chapter: Top 1 2 3 4 Bib Ind

3 Global Variables

3.1 Getting information about polymake output

3.1-1 InfoPolymaking
‣ InfoPolymaking( info class )

If set to at least \(2\), the output of polymake is shown. At level \(1\), warnings are shown. This is the default. And at level \(0\), the polymake package remains silent.

3.1-2 POLYMAKE_LAST_FAIL_REASON
‣ POLYMAKE_LAST_FAIL_REASON( global variable )

Contains a string that explains the last occurrence of fail as a return value of Polymake (2.5-1).

3.2 Variables for system interaction

The variables for interaction with the system are contained in the file environment.gi. Each of these variables has a function to set it, see 1.2. If POLYMAKE_COMMAND or POLYMAKE_DATA_DIR are set at startup, they are not overwritten. So if you don't want (or don't have the rights) to modify environment.gi, you can set the variables in your .gaprc file.

3.2-1 POLYMAKE_COMMAND
‣ POLYMAKE_COMMAND( global variable )

This variable should contain the name of the polymake program in the form as returned by Filename So a probable value is Filename(Directory("/usr/local/bin"),"polymake").

3.2-2 POLYMAKE_DATA_DIR
‣ POLYMAKE_DATA_DIR( global variable )

In this directory the files for polymake will be created. By default, this generates a temporary directory using DirectoryTemporary

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chapInd.txt000644 000766 000024 00000004060 14507124676 017057 0ustar00mhornstaff000000 000000 Index AppendInequalitiesToPolymakeObject 2.4-4 AppendPointlistToPolymakeObject 2.4-2 AppendToPolymakeObject 2.4-1 AppendVertexlistToPolymakeObject 2.4-3 CheckAppVerTypList 2.1-3 ClearPolymakeObject 2.4-6 2.4-6 ConvertMatrixToPolymakeString 2.4-5 ConvertPolymakeBoolToGAP 4.2-6 ConvertPolymakeGraphToGAP 4.2-9 ConvertPolymakeIntVectorToGAPPlusOne 4.2-5 ConvertPolymakeListOfSetsToGAP 4.2-8 ConvertPolymakeListOfSetsToGAPPlusOne 4.2-8 ConvertPolymakeMatrixOrListOfSetsToGAP 4.2-3 ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne 4.2-3 ConvertPolymakeMatrixToGAP 4.2-4 ConvertPolymakeMatrixToGAPKillOnes 4.2-4 ConvertPolymakeNumber 4.2-1 ConvertPolymakeOutputToGapNotation 4.1-2 ConvertPolymakeScalarToGAP 4.2-2 ConvertPolymakeSetToGAP 4.2-7 ConvertPolymakeVectorToGAP 4.2-5 ConvertPolymakeVectorToGAPKillOne 4.2-5 CreateEmptyFile 2.1-1 CreatePolymakeObject 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2 CreatePolymakeObjectFromFile 2.1-4 2.1-4 DirectoryOfPolymakeObject 2.2-1 FilenameOfPolymakeObject 2.2-2 FullFilenameOfPolymakeObject 2.2-3 InfoPolymaking 3.1-1 KnownPropertiesOfPolymakeObject 2.2-5 NamesKnownPropertiesOfPolymakeObject 2.2-4 ObjectConverters 4.1-4 Polymake 2.5-1 POLYMAKE_COMMAND 3.2-1 POLYMAKE_DATA_DIR 3.2-2 POLYMAKE_LAST_FAIL_REASON 3.1-2 PropertyOfPolymakeObject 2.2-6 SetPolymakeCommand 1.2-2 SetPolymakeDataDirectory 1.2-1 SplitPolymakeOutputStringIntoBlocks 4.1-3 UnbindKnownPropertyOfPolymakeObject 2.4-8 WriteKnownPropertyToPolymakeObject 2.4-7 ------------------------------------------------------- polymaking-0.8.7/doc/chap4.html000644 000766 000024 00000040516 14507124702 016631 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 4: Converting Polymake Output
Goto Chapter: Top 1 2 3 4 Bib Ind

4 Converting Polymake Output

4.1 The General Method

When polymake is called, its output is read as a string and then processed as follows:

  1. the lines containing upper case letters are found. These are treated as lines containing the keywords. Each of those lines marks the beginning of a block of data.

  2. The string is then cut into a list of blocks (also strings). Each block starts with a line containing the keyword and continues with some lines of data.

  3. for each of the blocks, the appropriate function of ObjectConverters is called. Here "appropriate" just means, that the keyword of the block coincides with the name of the function.

  4. The output of the conversion function is then added to the known properties of the PolymakeObject for which Polymake was called.

4.1-1 Converter- Philosopy

The converter functions should take meaningful polymake data into meaningful GAP data. This sometimes means that the (mathematical) representation is changed. Here is an example: polymake writes vectors as augmented affine vectors of the form 1 a1 a2 a3... which does not go very well with the usual GAP conventions of column vectors and multiplying matrices from the right. So polymaking converts such a vector to [a1,a2,a3,...] and the user is left with the problem of augmentation and left or right multiplication.

Another area where the GAP object isn't a literal translation from the polymake world is combinatorics. In Polymake, list elements are enumerated starting from 0. GAP enumerates lists starting at 1. So the conversion process adds 1 to the numbers corresponding to vertices in facet lists, for example.

The conversion process is done by the following methods:

4.1-2 ConvertPolymakeOutputToGapNotation
‣ ConvertPolymakeOutputToGapNotation( string )( method )

Returns: Record having polymake keywords as entry names and the respective converted polymake output as entries.

Given a the output of the polymake program as a string string, this method first calls SplitPolymakeOutputStringIntoBlocks (4.1-3). For each of the returned blocks, the name (=first line) of the block is read and the record ObjectConverters (4.1-4) is looked up for an entry with that name. If such an entry exists, it (being a function!) is called and passed the block. The returned value is then given the name of the block and added to the record returned by ConvertPolymakeOutputToGapNotation.

4.1-3 SplitPolymakeOutputStringIntoBlocks
‣ SplitPolymakeOutputStringIntoBlocks( string )( method )

Returns: List of strings -- "blocks"--

The string string is cut at the lines starting with an upper case character and consisting only of upper case letters, numbers and underscore (_) characters. The parts are returned as a list of strings. The initial string string remains unchanged.

4.1-4 ObjectConverters
‣ ObjectConverters( global variable )

The entries of this record are labeled by polymake keywords. Each of the entries is a function which converts a string returned by polymake to GAP format. So far, only a few converters are implemented. To see which, try RecNames(ObjectConverters);

You can define new converters using the basic functions described in section 4.2.

4.2 Conversion Functions

The following functions are used for the functions in ObjectConverters (4.1-4).

4.2-1 ConvertPolymakeNumber
‣ ConvertPolymakeNumber( string )( method )

The string string is converted to a rational number. Unlike Rat, it tests, if the number represented by string is a floating point number an converts it correctly. If this is the case, a warning is issued.

4.2-2 ConvertPolymakeScalarToGAP
‣ ConvertPolymakeScalarToGAP( list )( method )

If list contains a single string, this string is converted into a number using ConvertPolymakeNumber (4.2-1).

4.2-3 ConvertPolymakeMatrixOrListOfSetsToGAP
‣ ConvertPolymakeMatrixOrListOfSetsToGAP( list )( method )
‣ ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne( list )( method )

Tries to decide if the list list of strings represents a matrix or a list of sets by testing if they start with "{". It then calls either ConvertPolymakeMatrixToGAP (4.2-4) or ConvertPolymakeListOfSetsToGAP (4.2-8). The "PlusOne" version calls ConvertPolymakeListOfSetsToGAPPlusOne (4.2-8) if list represents a list of sets.

4.2-4 ConvertPolymakeMatrixToGAP
‣ ConvertPolymakeMatrixToGAP( list )( method )
‣ ConvertPolymakeMatrixToGAPKillOnes( list )( method )

The list list of strings is interpreted as a list of row vectors and converted into a matrix. The "KillOnes" version removes the leading ones.

4.2-5 ConvertPolymakeVectorToGAP
‣ ConvertPolymakeVectorToGAP( list )( method )
‣ ConvertPolymakeVectorToGAPKillOne( list )( method )
‣ ConvertPolymakeIntVectorToGAPPlusOne( list )( method )

As the corresponding "Matrix" version. Just for vectors. ConvertPolymakeIntVectorToGAPPlusOne requires the vector to contain integers. It also adds 1 to every entry.

4.2-6 ConvertPolymakeBoolToGAP
‣ ConvertPolymakeBoolToGAP( list )( method )

If list contains a single string, which is either 0,false,1, or true this function returns false or true, respectively.

4.2-7 ConvertPolymakeSetToGAP
‣ ConvertPolymakeSetToGAP( list )( method )

Let list be a list containing a single string, which is a list of numbers separated by whitespaces and enclosed by { and } . The returned value is then a set of rational numbers (in the GAP sense).

4.2-8 ConvertPolymakeListOfSetsToGAP
‣ ConvertPolymakeListOfSetsToGAP( list )( method )
‣ ConvertPolymakeListOfSetsToGAPPlusOne( list )( method )

Let list be a list containing several strings representing sets. Then each of these strings is converted to a set of rational numbers and the returned value is the list of all those sets. The "PlusOne" version adds 1 to every entry.

4.2-9 ConvertPolymakeGraphToGAP
‣ ConvertPolymakeGraphToGAP( list )( method )

Let list be a list of strings representing sets (that is, a list of integers enclosed by { and }). Then a record is returned containing two sets named .vertices and .edges.

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/nocolorprompt.css000644 000766 000024 00000000313 14507124702 020362 0ustar00mhornstaff000000 000000 /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000000; font-weight: normal; } span.GAPbrkprompt { color: #000000; font-weight: normal; } span.GAPinput { color: #000000; } polymaking-0.8.7/doc/lefttoc.css000644 000766 000024 00000000474 14507124702 017115 0ustar00mhornstaff000000 000000 /* leftmenu.css Frank Lübeck */ /* Change default CSS to show section menu on left side */ body { padding-left: 28%; } body.chap0 { padding-left: 2%; } div.ChapSects div.ContSect:hover div.ContSSBlock { left: 15%; } div.ChapSects { left: 1%; width: 25%; } polymaking-0.8.7/doc/chap2_mj.html000644 000766 000024 00000075730 14507124702 017323 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 2: Polymake interaction
Goto Chapter: Top 1 2 3 4 Bib Ind

2 Polymake interaction

2.1 Creating Polymake Objects

The interaction with the polymake program is done via files. A PolymakeObject is mainly a pointer to a file and a list of known properties of the object. These properties need not be stored in the file. Whenever polymake is called, the returned value is read from standard output and stored in the PolymakeObject corresponding to the file for which polymake is called. The files for polymake are written in the old (non-xml) format. The first run of polymake converts them into the new (xml) format. This means that changes to the file by means of the methods outlined below after the first run of polymake will probably lead to corrupted files.

2.1-1 CreateEmptyFile
‣ CreateEmptyFile( filename )( method )

Returns: nothing

Creates an empty file with name filename. Note that filename has to include the full path and the directory for the file must exist.

2.1-2 CreatePolymakeObject
‣ CreatePolymakeObject( )( method )
‣ CreatePolymakeObject( appvertyp )( method )
‣ CreatePolymakeObject( dir )( method )
‣ CreatePolymakeObject( dir, appvertyp )( method )
‣ CreatePolymakeObject( prefix, dir )( method )
‣ CreatePolymakeObject( prefix, dir, appvertyp )( method )

Returns: PolymakeObject

If called without arguments, this method generates an empty file in the directory defined by POLYMAKE_DATA_DIR (3.2-2). If a directory dir is given (this directory must exist), an empty file is generated in this directory. If prefix is not given, the file is called polyN where N is the current runtime. If a file of this name already exists, a number is appended separated by a dot (example: "poly1340" and "poly1340.1"). If prefix is given, the filename starts with this prefix. Optionally, the file can be generated with a header specifying application, version and type of the object. This is done by passing the triple of strings appvertyp to CreatePolymakeObject. A valid triple is ["polytope","2.3","RationalPolytope"]. Validity is checked by CheckAppVerTypList (2.1-3).

2.1-3 CheckAppVerTypList
‣ CheckAppVerTypList( appvertyp )( method )

Returns: bool

Checks if the triple arppvertyp of strings specifies an application and type of polymake version 2.3. More specifically, the first entry has to be an application from ["polytope","surface","topaz"] and the third entry has to be a type corresponding to the application given in the first entry. The second entry is not checked.

2.1-4 CreatePolymakeObjectFromFile
‣ CreatePolymakeObjectFromFile( filename )( method )
‣ CreatePolymakeObjectFromFile( dir, filename )( method )

Returns: PolymakeObject

This method generates a PolymakeObject corresponding to the file filename in the directory dir. If dir is not given, the POLYMAKE_DATA_DIR is used.If no file with name filename exists in dir (or POLYMAKE_DATA_DIR, respectively), an empty file is created. Note that the contents of the file do not matter for the generation of the object. In particular, the object does not know any of the properties that might be encoded in the file. The only way to transfer information from files to PolymakeObjects is via Polymake (2.5-1).

2.2 Accessing Properties of Polymake Objects

A PolymakeObject contains information about the directory of its file, the name of its file and about properties calculated by calling Polymake (2.5-1). The properties returned by the polymake program are stored under the name polymake assigns to them (that is, the name of the data block in the corresponding file). The following methods can be used to access the information stored in a PolymakeObject. But be careful! All functions return the actual object. No copies are made. So if you change one of the returned objects, you change the PolymakeObject itself.

2.2-1 DirectoryOfPolymakeObject
‣ DirectoryOfPolymakeObject( poly )( method )

Returns: Directory

Returns the directory of the file associated with poly.

2.2-2 FilenameOfPolymakeObject
‣ FilenameOfPolymakeObject( poly )( method )

Returns: String

Returns the name of the file associated with poly. This does only mean the name of the file, not the full path. For the full path and file name see FullFilenameOfPolymakeObject (2.2-3)

2.2-3 FullFilenameOfPolymakeObject
‣ FullFilenameOfPolymakeObject( poly )( method )

Returns: String

Returns the file associated with the PolymakeObject poly with its complete path.

2.2-4 NamesKnownPropertiesOfPolymakeObject
‣ NamesKnownPropertiesOfPolymakeObject( poly )( method )

Returns: List of Strings

Returns a list of the names of all known properties. This does only include the properties returned by Polymake (2.5-1), "dir" and "filename" are not included. If no properties are known, fail is returned.

2.2-5 KnownPropertiesOfPolymakeObject
‣ KnownPropertiesOfPolymakeObject( poly )( method )

Returns: Record

Returns the record of all known properties. If no properties are known, fail is returned.

2.2-6 PropertyOfPolymakeObject
‣ PropertyOfPolymakeObject( poly, name )( method )

Returns the value of the property name if it is known. If the value is not known, fail is returned. name must be a String.

2.3 Example: Creating and Accessing Polymake Objects

Suppose the file /tmp/threecube.poly contains the three dimensional cube in polymake form. Now generate a PolymakeObject from this file and call Polymake (2.5-1) to make the vertices of the cube known to the object.


### suppose we have a polymake file /tmp/threecube.poly
### containing a cube in three dimensions
gap> cube:=CreatePolymakeObjectFromFile(Directory("/tmp"),"threecube.poly");
<polymake object. No properties known>
gap> FilenameOfPolymakeObject(cube);
"threecube.poly"
gap> FullFilenameOfPolymakeObject(cube);
"/tmp/threecube.poly"
   #nothing is known about the cube:
gap> NamesKnownPropertiesOfPolymakeObject(cube);  
fail
gap> Polymake(cube,"VERTICES");
[ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ], 
  [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ]  
   # Now <cube> knows its vertices:
gap> Print(cube);
<polymake object threecube.poly. Properties known: [ "VERTICES" ]>
gap> PropertyOfPolymakeObject(cube,"VERTICES");
[ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ],
  [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ]
gap> KnownPropertiesOfPolymakeObject(cube);
rec(
  VERTICES := [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ],
      [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] )

2.4 Writing to Polymake Objects

To transfer data from GAP to polymake, the following methods can be used. But bear in mind that none of these functions test if the resulting polymake file is still consistent.

2.4-1 AppendToPolymakeObject
‣ AppendToPolymakeObject( poly, string )( method )

Returns: nothing

This appends the string string to the file associated to the PolymakeObject poly. It is not tested if the string is syntactically correct as a part of a polymake file. It is also not tested if the string is compatible with the data already contained in the file.

INEQUALITIES, POINTS and VERTICES can be appended to a polymake object using the following functions:

2.4-2 AppendPointlistToPolymakeObject
‣ AppendPointlistToPolymakeObject( poly, pointlist )( method )

Returns: nothing

Takes a list pointlist of vectors and converts it into a string which represents a polymake block labeled "POINTS". This string is then added to the file associated with poly. The "POINTS" block of the file associated with poly then contains points with leading ones, as polymake uses affine notation.

2.4-3 AppendVertexlistToPolymakeObject
‣ AppendVertexlistToPolymakeObject( poly, pointlist )( method )

Returns: nothing

Does the same as AppendPointlistToPolymakeObject, but with "VERTICES" instead of "POINTS".

2.4-4 AppendInequalitiesToPolymakeObject
‣ AppendInequalitiesToPolymakeObject( poly, ineqlist )( method )

Returns: nothing

Just appends the inequalities given in ineqlist to the polymake object poly (with caption "INEQUALITIES"). Note that this does not check if an "INEQUALITIES" section does already exist in the file associated with poly.

2.4-5 ConvertMatrixToPolymakeString
‣ ConvertMatrixToPolymakeString( name, matrix )( method )

Returns: String

This function takes a matrix matrix and converts it to a string. This string can then be appended to a polymake file via AppendToPolymakeObject (2.4-1) to form a block of data labeled name. This may be used to write blocks like INEQUALITIES or FACETS.

2.4-6 ClearPolymakeObject
‣ ClearPolymakeObject( poly )( method )
‣ ClearPolymakeObject( poly, appvertyp )( method )

Returns: nothing

Deletes all known properties of the PolymakeObject poly and replaces its file with an empty one.
If the triple of strings appvertyp specifying application, version and type (see CheckAppVerTypList (2.1-3)) is given, the file is replaced with a file that contains only a header specifying application, version and type of the polymake object.

There are also methods to manipulate the known values without touching the file of the PolymakeObject:

2.4-7 WriteKnownPropertyToPolymakeObject
‣ WriteKnownPropertyToPolymakeObject( poly, name, data )( method )

Takes the object data and writes it to the known properties section of the PolymakeObject poly. The string name is used as the name of the property. If a property with that name already exists, it is overwritten. Again, there is no check if data is consistent, correct or meaningful.

2.4-8 UnbindKnownPropertyOfPolymakeObject
‣ UnbindKnownPropertyOfPolymakeObject( poly, name )( method )

If the PolymakeObject poly has a property with name name, that property is unbound. If there is no such property, fail is returned.

2.5 Calling Polymake and converting its output

2.5-1 Polymake
‣ Polymake( poly, option: PolymakeNolookup )( method )

This method calls the polymake program (see POLYMAKE_COMMAND (3.2-1)) with the option option. You may use several keywords such as "FACETS VERTICES" as an option. The returned value is cut into blocks starting with keywords (which are taken from output and not looked up in option). Each block is then interpreted and translated into GAP readable form. This translation is done using the functions given in ObjectConverters (4.1-4). The first line of each block of polymake output is taken as a keyword and the according entry in ObjectConverters (4.1-4) is called to convert the block into GAP readable form. If no conversion function is known, an info string is printed and fail is returned. If only one keyword has been given as option, Polymake returns the result of the conversion operation. If more than one keyword has been given or the output consists of more than one block, Polymake returns fail. In any case, the calculated values for each block are stored as known properties of the PolymakeObject poly as long as they are not fail. If Polymake is called with an option that corresponds to a name of a known property of poly, the known property is returned. In this case, there is no call of the external program. (see below for suppression of this feature).

Note that the command Polymake returns fail if nothing is returned by the program polymake or more than one block of data is returned. For example, the returned value of Polymake(poly,"VISUAL") is always fail. Likewise, Polymake(poly,"POINTS VERTICES") will return fail (but may add new known properties to poly). For a description of the conversion functions, see chapter 4.

If the option PolymakeNolookup is set to anything else than false, the polymake program is called even if poly already has a known property with name option.

Note that whenever Polymake returns fail, a description of the problem is stored in POLYMAKE_LAST_FAIL_REASON (3.1-2). If you call Polymake with more than one keyword, POLYMAKE_LAST_FAIL_REASON (3.1-2) is changed before polymake is called. So any further reason to return fail will overwrite it.

2.6 An Example

Let's generate a three dimensional permutahedron.

    
    gap> S:=SymmetricGroup(3);
    Sym( [ 1 .. 3 ] )
    gap> v:=[1,2,3];
    [ 1, 2, 3 ]
    gap> points3:=Orbit(S,v,Permuted);;
         # project to reduce ambient dimension
    gap> points:=points3{[1..6]}{[1,2]};;
    gap> permutahedron:=CreatePolymakeObject();
    <polymake object. No properties known>
    gap> AppendPointlistToPolymakeObject(permutahedron,points);
    gap> Polymake(permutahedron,"VOLUME");
    3
    gap> Polymake(permutahedron,"N_VERTICES");
    6
          #Now <permutahedron> knows its number of vertices, but not the vertices:
    gap> PropertyOfPolymakeObject(permutahedron,"VERTICES");
    fail
    gap> NamesKnownPropertiesOfPolymakeObject(permutahedron);
    [ "VOLUME", "N_VERTICES" ]
        #Let's look at the object!
    gap> Polymake(permutahedron,"VISUAL");
    #I  There was no or wrong polymake output
    fail
    gap> Polymake(permutahedron,"DIM");
    2
    
    
Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/polymaking.xml000644 000766 000024 00000000700 14507124632 017631 0ustar00mhornstaff000000 000000 <#Include SYSTEM "title.xml"> <#Include SYSTEM "environment.xml"> Polymake interaction <#Include SYSTEM "input.xml"> <#Include SYSTEM "output.xml"> <#Include SYSTEM "internals.xml"> polymaking-0.8.7/doc/manual.lab000644 000766 000024 00000012705 14507124702 016700 0ustar00mhornstaff000000 000000 \GAPDocLabFile{polymaking} \makelabel{polymaking:Title page}{}{X7D2C85EC87DD46E5} \makelabel{polymaking:Abstract}{}{X7AA6C5737B711C89} \makelabel{polymaking:Copyright}{}{X81488B807F2A1CF1} \makelabel{polymaking:Acknowledgements}{}{X82A988D47DFAFCFA} \makelabel{polymaking:Table of Contents}{}{X8537FEB07AF2BEC8} \makelabel{polymaking:Installation and Preface}{1}{X8794FBB27B46C08E} \makelabel{polymaking:A few words about the installation of polymake}{1.1}{X7A02C64B7A3777FF} \makelabel{polymaking:Setting variables for external programs}{1.2}{X851C596486F918F0} \makelabel{polymaking:Setting variables permanently}{1.2.3}{X7943B579846BDB76} \makelabel{polymaking:Polymake interaction}{2}{X86C82DCF81362F41} \makelabel{polymaking:Creating Polymake Objects}{2.1}{X83D426D5855D1FD6} \makelabel{polymaking:Accessing Properties of Polymake Objects}{2.2}{X7D9EBB0383B9BD1C} \makelabel{polymaking:Example: Creating and Accessing Polymake Objects}{2.3}{X7CEF475187927AEA} \makelabel{polymaking:Writing to Polymake Objects}{2.4}{X87BEE1B37D9F1F5E} \makelabel{polymaking:Calling Polymake and converting its output}{2.5}{X8468E0E381642B14} \makelabel{polymaking:An Example}{2.6}{X7B5623E3821CC0D0} \makelabel{polymaking:Global Variables}{3}{X7D9044767BEB1523} \makelabel{polymaking:Getting information about polymake output}{3.1}{X86AC0C6B807BEBDE} \makelabel{polymaking:Variables for system interaction}{3.2}{X7B786DAF80136FF4} \makelabel{polymaking:Converting Polymake Output}{4}{X7D23E80E841CDD67} \makelabel{polymaking:The General Method}{4.1}{X862D57D87A244DE2} \makelabel{polymaking:Converter- Philosopy}{4.1.1}{X7CDBEA427EE69C71} \makelabel{polymaking:Conversion Functions}{4.2}{X7FF4170183C83CC1} \makelabel{polymaking:Bibliography}{Bib}{X7A6F98FD85F02BFE} \makelabel{polymaking:References}{Bib}{X7A6F98FD85F02BFE} \makelabel{polymaking:Index}{Ind}{X83A0356F839C696F} \makelabel{polymaking:SetPolymakeDataDirectory}{1.2.1}{X794A38E981F9E76F} \makelabel{polymaking:SetPolymakeCommand}{1.2.2}{X854645287BC9303E} \makelabel{polymaking:CreateEmptyFile}{2.1.1}{X7C87B1807E036A85} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CreatePolymakeObject}{2.1.2}{X8625E7E2845F1634} \makelabel{polymaking:CheckAppVerTypList}{2.1.3}{X8135E88E87DD1551} \makelabel{polymaking:CreatePolymakeObjectFromFile}{2.1.4}{X7801F05A81E23EED} \makelabel{polymaking:CreatePolymakeObjectFromFile}{2.1.4}{X7801F05A81E23EED} \makelabel{polymaking:DirectoryOfPolymakeObject}{2.2.1}{X86D967C684B27108} \makelabel{polymaking:FilenameOfPolymakeObject}{2.2.2}{X87470AB079A2F550} \makelabel{polymaking:FullFilenameOfPolymakeObject}{2.2.3}{X809D309F7D31DD2C} \makelabel{polymaking:NamesKnownPropertiesOfPolymakeObject}{2.2.4}{X850B38F27F1BF7E8} \makelabel{polymaking:KnownPropertiesOfPolymakeObject}{2.2.5}{X7D79C5F1817041C5} \makelabel{polymaking:PropertyOfPolymakeObject}{2.2.6}{X7E538D1B7898C8E6} \makelabel{polymaking:AppendToPolymakeObject}{2.4.1}{X785DCA4487F168F8} \makelabel{polymaking:AppendPointlistToPolymakeObject}{2.4.2}{X7F5326338033B57C} \makelabel{polymaking:AppendVertexlistToPolymakeObject}{2.4.3}{X7E150BA67CEBC00E} \makelabel{polymaking:AppendInequalitiesToPolymakeObject}{2.4.4}{X7EBE5FB284FBFFE6} \makelabel{polymaking:ConvertMatrixToPolymakeString}{2.4.5}{X83DC7FC280731B04} \makelabel{polymaking:ClearPolymakeObject}{2.4.6}{X804AAE4882743E91} \makelabel{polymaking:ClearPolymakeObject}{2.4.6}{X804AAE4882743E91} \makelabel{polymaking:WriteKnownPropertyToPolymakeObject}{2.4.7}{X840C02CD815FF766} \makelabel{polymaking:UnbindKnownPropertyOfPolymakeObject}{2.4.8}{X7A3FF18C7FD1A626} \makelabel{polymaking:Polymake}{2.5.1}{X7DBA99E87EC51D53} \makelabel{polymaking:InfoPolymaking}{3.1.1}{X85BA7A3D7C698B68} \makelabel{polymaking:POLYMAKELASTFAILREASON}{3.1.2}{X79E1C63D8516D334} \makelabel{polymaking:POLYMAKECOMMAND}{3.2.1}{X7B35A5217C8C7B04} \makelabel{polymaking:POLYMAKEDATADIR}{3.2.2}{X7C07B16B873BA46D} \makelabel{polymaking:ConvertPolymakeOutputToGapNotation}{4.1.2}{X7EB6D80C816CF667} \makelabel{polymaking:SplitPolymakeOutputStringIntoBlocks}{4.1.3}{X841D81327C6F6E29} \makelabel{polymaking:ObjectConverters}{4.1.4}{X83199F737F4BE4FD} \makelabel{polymaking:ConvertPolymakeNumber}{4.2.1}{X7FC98443862DB83F} \makelabel{polymaking:ConvertPolymakeScalarToGAP}{4.2.2}{X7F2A1C2C808E4A07} \makelabel{polymaking:ConvertPolymakeMatrixOrListOfSetsToGAP}{4.2.3}{X82A7FF9983EB61E2} \makelabel{polymaking:ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne}{4.2.3}{X82A7FF9983EB61E2} \makelabel{polymaking:ConvertPolymakeMatrixToGAP}{4.2.4}{X817C6B4180BF6365} \makelabel{polymaking:ConvertPolymakeMatrixToGAPKillOnes}{4.2.4}{X817C6B4180BF6365} \makelabel{polymaking:ConvertPolymakeVectorToGAP}{4.2.5}{X85F7F6787D346CC0} \makelabel{polymaking:ConvertPolymakeVectorToGAPKillOne}{4.2.5}{X85F7F6787D346CC0} \makelabel{polymaking:ConvertPolymakeIntVectorToGAPPlusOne}{4.2.5}{X85F7F6787D346CC0} \makelabel{polymaking:ConvertPolymakeBoolToGAP}{4.2.6}{X87B6F9867EE800C7} \makelabel{polymaking:ConvertPolymakeSetToGAP}{4.2.7}{X846B284085825FEA} \makelabel{polymaking:ConvertPolymakeListOfSetsToGAP}{4.2.8}{X7E7886D68356F592} \makelabel{polymaking:ConvertPolymakeListOfSetsToGAPPlusOne}{4.2.8}{X7E7886D68356F592} \makelabel{polymaking:ConvertPolymakeGraphToGAP}{4.2.9}{X7EBECAA07F8B58D8} polymaking-0.8.7/doc/chapBib.txt000644 000766 000024 00000000234 14507124676 017040 0ustar00mhornstaff000000 000000 References [GJ] Gawrilow, E. and Joswig, M., polymake, \URL{http://polymake.org/}.  polymaking-0.8.7/doc/output.xml000644 000766 000024 00000007442 14507124632 017031 0ustar00mhornstaff000000 000000
Calling Polymake and converting its output This method calls the polymake program (see ) with the option option. You may use several keywords such as "FACETS VERTICES" as an option. The returned value is cut into blocks starting with keywords (which are taken from output and not looked up in option). Each block is then interpreted and translated into &GAP; readable form. This translation is done using the functions given in . The first line of each block of polymake output is taken as a keyword and the according entry in is called to convert the block into &GAP; readable form. If no conversion function is known, an info string is printed and fail is returned. If only one keyword has been given as option, Polymake returns the result of the conversion operation. If more than one keyword has been given or the output consists of more than one block, Polymake returns fail. In any case, the calculated values for each block are stored as known properties of the PolymakeObject poly as long as they are not fail. If Polymake is called with an option that corresponds to a name of a known property of poly, the known property is returned. In this case, there is no call of the external program. (see below for suppression of this feature).

Note that the command Polymake returns fail if nothing is returned by the program polymake or more than one block of data is returned. For example, the returned value of Polymake(poly,"VISUAL") is always fail. Likewise, Polymake(poly,"POINTS VERTICES") will return fail (but may add new known properties to poly). For a description of the conversion functions, see chapter .

If the option PolymakeNolookup is set to anything else than false, the polymake program is called even if poly already has a known property with name option. Note that whenever returns fail, a description of the problem is stored in . If you call with more than one keyword, is changed before polymake is called. So any further reason to return fail will overwrite it.

An Example Let's generate a three dimensional permutahedron. S:=SymmetricGroup(3); Sym( [ 1 .. 3 ] ) gap> v:=[1,2,3]; [ 1, 2, 3 ] gap> points3:=Orbit(S,v,Permuted);; # project to reduce ambient dimension gap> points:=points3{[1..6]}{[1,2]};; gap> permutahedron:=CreatePolymakeObject(); gap> AppendPointlistToPolymakeObject(permutahedron,points); gap> Polymake(permutahedron,"VOLUME"); 3 gap> Polymake(permutahedron,"N_VERTICES"); 6 #Now knows its number of vertices, but not the vertices: gap> PropertyOfPolymakeObject(permutahedron,"VERTICES"); fail gap> NamesKnownPropertiesOfPolymakeObject(permutahedron); [ "VOLUME", "N_VERTICES" ] #Let's look at the object! gap> Polymake(permutahedron,"VISUAL"); #I There was no or wrong polymake output fail gap> Polymake(permutahedron,"DIM"); 2 ]]>
polymaking-0.8.7/doc/polymaking.bib000644 000766 000024 00000001262 14507124632 017571 0ustar00mhornstaff000000 000000 @incollection{polymakeframework, author = "Ewgenij Gawrilow and Michael Joswig", title = {polymake: a Framework for Analyzing Convex Polytopes}, pages = {43-74}, editor = {Gil Kalai and G\"unter M. Ziegler}, booktitle = {Polytopes --- Combinatorics and Computation}, publisher = {Birkh\"auser}, year = {2000} } @unpublished{math.CO/0507273, author = "Ewgenij Gawrilow and Michael Joswig", title = {Geometric reasoning with polymake}, note = {\url{arXiv:math.CO/0507273}}, year = 2005 } @Misc{polymake, author = "Ewgenij Gawrilow and Michael Joswig", title = {polymake}, howpublished = {\URL{http://polymake.org/}} } polymaking-0.8.7/doc/rainbow.js000644 000766 000024 00000005336 14507124702 016744 0ustar00mhornstaff000000 000000 function randchar(str) { var i = Math.floor(Math.random() * str.length); while (i == str.length) i = Math.floor(Math.random() * str.length); return str[i]; } hexdigits = "0123456789abcdef"; function randlight() { return randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits)+ randchar("cdef")+randchar(hexdigits) } function randdark() { return randchar("012345789")+randchar(hexdigits)+ randchar("012345789")+randchar(hexdigits)+ randchar("102345789")+randchar(hexdigits) } document.write('\n'); polymaking-0.8.7/doc/manual.pdf000644 000766 000024 00000624132 14507124702 016716 0ustar00mhornstaff000000 000000 %PDF-1.5 %ÐÔÅØ 78 0 obj << /Length 332 /Filter /FlateDecode >> stream xÚ…’?kÃ0Å÷| öàëÝé¥N¥†J!˜.¥ƒë(nhÅPòí+[iH†ÐAH'ô{ïé$­@±˜á•ù¾šÝ<(Ê%É¢Z * Œ5ÂR“¨Vâ-ûî·‡®þÚìÚü½zšVPÚ’F¤Ð%Q8&NÈãnða]7#S°ÆløôiÑú¾óC8¤j߯‡Ÿ:äd3?Š bÔ¢` „æÂ?'L‡b¾H@ ˜­(¬«m‚^s"Ê|Øoú]òB°PžxBpè&^JÐÑRXw´T yi†þÇT0²<5 ZJe¦ž QL{¦ùسçt©&¡ËÞ¯¢ÌìÀ6)ºe èZ[ ÒþKó‹Ù•KÔ¼«7ÛÛñÜ EZ+Zq¹±\Ä——îLŠí¢â¤&GèêÐܵ£*ä”5}—´¯|§y5û¿–! endstream endobj 89 0 obj << /Length 671 /Filter /FlateDecode >> stream xÚTÏo›0¾ç¯°zi8¶Ávë²4Z×VSËNM8Ä ±#cŠòß×`'k¦mêùýüžß{ŸA ,'_ŠÉô†"ÁÜ3°J: âq}͆™Sù¢ˆ'U§Ç6£¿õYZ°yl)¸,¹MÆ~×OÜoÖœ–¾Bˆ4^¾ºû6_<<-®œªôé5½‰ów;ÄiIv~ö[cíçé´ï{XË*]‡8˜–– ߘi}hàÖì›ÿÿN Lº.wR |í^Õ|Ï¥iÿAªØþSðl‡ý«ôÎi[æÍkÎ¥“ÚîpPÚbpÏÔ~fóî,.5“þ9<(?ðûâû×h^„9 "Ká4B Igô¢×Ó¹(&oÐKf´ endstream endobj 116 0 obj << /Length 787 /Filter /FlateDecode >> stream xÚåXMSÛ0½çWèhìêÛvo4:Ó¡z`zp%¸uìŒ- üû*‘•Ä ÐÈ1Pà‘œ­½ûvß¾SÁ ëõ˰÷é„B€©„à ¸ÏœrŸÐ ÇàÊé¹¹¬ÜŸÃ¯=èC ŒQPNAó‹6‰ ÁhiSŸÀH[C[f`Ó\˜W‚:§y%ã,‹eZ䮇tâ|¬7祋BGLâDìù]Æke‡„`‡îïÞt©Øp L„‹™s«n]¢Wµ££âFê­¼z“î„£˜èu^d÷³ø÷ÂD‹ppNßõ˜Šøë-4ŠÔ²üö   N&yÿéÙ"ãšØ` l¾ )Ó|ªãúgP\¦ñ(50“¢Ôá"æÜIQæqV£PÓ2žUö¿>/ Ò6Kx¦ªQV#‡-¸âÜŪ6Ê .Pœ,+Æž&"ЇwHØŠ&ú¥ˆ×¹x¾ãÜÙè—Hd‹t£½‰të"1ùì­Øã(IDU­1+‹¹(ejÈÃðu—XÂàÍaŒ ±Àäø.žÍ3ñÙõÚ.ª•žØ®;€‚=<8ìÔ"ì?ÊtgYtW†øûg¯¨%dÌ Ælú—OTÀªVÕLéB)´`7s$•†ænä\©WkHC¾ hSÐ xp9q›ÎRKþšÍZ4 LÞYÓLQ§2¶ ‰…ŒdÅÈÌ—n„×Ó‡ýPÀ;ˆt¨_‰•~lŽRi®&§Ùæ(¿žpç;\Ó–AÎÿ³4«ŸÌ6r ƒ+mzé"„›f«ûJŠYC ß3Aç˜s©AôWÍ6šïÃóïYË:ÂŒª^ŒX‡ÜA­¸ch.½"WÉX3â7!¯‹q aÁ£ÞØØTC­¨¦ßPˆÕŠóOnò%­´™séG‡?‡6¹¡¯ÒóĈ óbJ#®ô=j´'jÀ3',wšÅÝ“oÀMI½Í*FØ0RŒ}ÄIC^Շއ½¿í!’ endstream endobj 124 0 obj << /Length 1970 /Filter /FlateDecode >> stream xÚ•XmÛ6þž_a÷AÖ\‘z¶MšK{i‰‹¶h,Ó¶YD*[ãÐþö›áZË«öÜ»$GÃápæ™:\ìáâÕ³Ð_­ŸÝ~‡ ²4Éb½[d)K¢d‘&œE¢X¬·‹_‚¯egd¿\‰$ øò?ëoŸ…,\ø¿~¿8_¾{儯,Ë3ŽBÃÅ*.XÎ#’÷ºÕ¦lšÒÔª%¡e»¥É}¿äy we%é§)H ²",¼Ä$b1É[/ó0PËU"¢ &Ù´0‰teõ©ÜËX<øuІ†¿¸ÆK ='5ôDq»5­¶u/+£ú-?„I8èÎ<¡Æ·ßdŹ¢Q’0!bPتúÇí¾ìn»O{â^*IYåžu§ÜñZ!7ØsôÓbÅ#–ÄÎ9U —ÃÔßÜZ”âl¹Ê²b4NfÁ %›§ççrž0žŒ:vª9ËOu;¯$ð¦™ç‹Æq‚¶¢Z)·¤NIÃÃ’Ãñ½•f9ê‰ó‘Eíh´ÞÂI׫}_‰ßiƒbäôÐy>$XøM}°âYhæSÃŒéôóÛ[8`¹â"™ê÷‰;ÎËâÄ_m̳`šGyâ‘‚‹48”š¨)[š© ?+GkêvøH6 ö¦¬ˆòö=~¢%‚ ´‰Ñì¼`š<î´ñ N® |©ƒDvüj0mµõA ‹Àt!©iìÀUÅ£ÛÑne'á_kF¶D È(ŨWw÷sH Ë‘4¦€s‡3º”Ë2ºSâbÞš< ¤¦²"8EI<Ôæ@Ÿ&Ð!fM<=ø¡¯«%È@2ŠXúÚX°ââCŠFºMä VeߟF…ÖÄïº>v;Hu ê¤ÝxÊŠ(›ºî µ¥HOg„¦~Dü%œÃ©wKÌtÅ]ݸÙw/þñí»|²B¤ ¤¤DÁõ»Ñœ{.ޱ©:wQŠ“Jä´ Òl,¼÷Yo7¿JDOeæp Å‘ßRE,ãù$ °DqÎ[!EpguäÎ b´°>ËdIJœ…7ý`ÿfû„K…äñ'Ö¶²×Lb,’™>Sân¨ð¬ÀzNŸÊÞÉ@ìÎxxD²ïµmJ=‚8ÊЬó,­%O=wÍ5g×tü‹_V< ÃàŽÎØÉšœ'n<{£|ïAuĶ—¯´Òe'pÑ•MÛ P^y|UÿšC?>&H J‘C#͆³+÷D´£RaâA4Uy…s‚‰È/[h_Eðzç7×’¨4Ô¾Áu޽2’­±Ê¾¥l•»¤j­ë> •Æ)¡JG1õ‘"{åîvlÄÕl<±4#ãu»S?ºƒgL–&ÀßþÔ"Šq‰ùµ+ÍáË+JìÚGó^¶P‹ZôCãƒ\?§·ÄÃÌ{¡ÈX^dW>@‘wD#vè­O/í ¾fNþ¥£e³»SO/Ÿ”ýÃØ$øÖÇ%¯þt–¼fSæŠÃ«8õ(s&>sŠ¿‘9ßKcF >S&¨±¨; wuÊý#Ãßc [oêÎö³¶Ðÿï—“³\y7û|ƒ«å"¹Þ÷¼Ô—ˆ8wÙ&c[cgº!’}„ˆ?ø½ŠÆOÐtÛ&È®œÛ¬ðZÏHoêÇÔ„M}™ðß+ƒû%%,-Ò‹F¨ö)=¡Eò'OA Áq«ZI<¶íÁ]ããQ„gGà°Ï"¤>GïJàé¡Ywׯ ëì80s”ŽÞK3ô­M’Âbv®ô^ö®ò{I8ÿb¬¿`Ácg¾8û}€R8EJù´\OÞ6HÚ*yÙ=ãU&íÆŸ(‰M›à¹möViÎÒœ®OX^®Ÿýîàgì endstream endobj 139 0 obj << /Length 1327 /Filter /FlateDecode >> stream xÚÅXKoÛ8¾ûW9É@Mó-1‹²qSl·i²©/‹¶(h‹±…Ú’WQäßïŒ(ÙR¬¸›&À Qùq^ßÌÐ4X4x?ø}:Ÿ)DÄD”Óë€G’Ä‘ "͈a2˜&Á—p“¯ÖöGš-†ß¦Æg’ŒCß"b"Àj±Â5ZŸ‹iÀK)Ž‹GRh)Œ„"±V~#œ0¿Ð ù‹ ýzõ~|1JiøÙ•—CNC/×ÑÐMli'i1dqèæe^3´­ FÞ˜ðÒ¯udÚkpÈQ/‹› G,ô²x9¾RE=@,:Æ¢AH@ô¾S4œ²5-@±­Z>“’p¡Z«èڕ˾¤õÓ⃅¥[oò¢]p¶e&|]¸Ì^I|½_ºÌ*»â`cç?ìÂy°{•ÛÄ% £5iæ×6K7·+¼é ê5¨uyññïó“?ß}¯âñdzò}òÇUŸùLL”fíØyÄC¥d—28Qq1@[Þ °:HkÆ<¢~}Ôˆ8ï˜Ï_ÆüÓ| ¦Iþ'¾Ÿ¢}½O2F~ÍæùNÞLJCdǽtW Ö¼.ݦ Kdv]%Ýo]~W3E¾(ìº^×Ïd ¡"û-Ð’bÄE‹Í$tÏ„ÿ  Cowo9pzqŽ^:?ù4é;J'`ÛNx>ØfÝç€xJ¬Å#®hx‡ž°EjgU’©+ÀN.+WÃáQØO‡1ð 0Q¶ ª‰WúA8¸rLû·Õ©ðž_÷ÒF*8A÷¸¤òÈS.1‚0£~=+õúâ CqîçžD ¶'èä=˜?cÁ_96’&I]£ °¹Ç5Êû{•fžƒwÓÁ?Ô Z8¢ +1'1왯_¾Ñ o@ ü¿¯V®Π‹7«àóெ °YG/A"$2DCv;€ANLlöy%ÙK !tD"¨öVŽßN†PÓ[MàÑx™¯ÝxýP§P—@›-Ãzü·}ÿm•~¶ÈûZCÉÀ¦û5´V†ígX¤òñÛ³´^9¬ ¨óä f)P4®lðæ¨ùðS“<[Ÿ“piþ¢hüuˆ†›€ ´8„ %䪶´ªÓMA ×$VMr¨¹òÛÞ‹…DšmZ& »)æ}é nk±Øe7l…=0:ôƹ]yk퉈bÛb宿–esw e\3ßž# œKÒ,õs3[í˜ûù¦ïkþ£8Øn˜6 Qø)/]S°léaë¦'—›H¨*¬%)ëÊ7«Uüö9Ð1é]g1s؉(t½ý„dblÿJñÔ Oo5ø½ÿ¥¿T¥JÏÑîö½£Åž…ÄØ `A;(Mà ìß„Ä8Àç6ó3ó¥Íð꓾»ƒA»¨ã"(êí2´³ÖXn·gÛàªÙƒ¯[ R—ÿt á’´Üþ•ð(*¡BìÔ˜]v—y¶FK@;Bi·Ï¯Ÿ%þ®iP endstream endobj 154 0 obj << /Length 1939 /Filter /FlateDecode >> stream xÚÝËŽÛ6ðž¯0r’š!)’’zÛ¦I>ƒ`¢H‹@¶i[, ’¼›ýûÎpHÙR´Ým‘¶h‚¨áh^œ‡/ö ¾xõ„û÷W×Ož½T|!93FêÅõn‘¦c½0Z°Xf‹ëíâ]ôü7½m—+©y$—¿^ó„3¾O»_\~¾}å‰*–¤‰@¢|±RKELôÞ,%êòî˜X Y"\TÀ#ßôE] /¤#&‹•‘ž˜N€´'&™x„D‹w+Á9ž·K‘F6ï‹jOlç…ùqý›ÝôÝT¹œe< ZŽ©"9®î×t¤²è¶è´ÕN5†iÔ´õ¾ÍžDGhÛºòÛ7EN _8—¥íØrÇ:ºBŸ½L²K¹d’2“$ Y›xYPi¹¨E?•IK”ÿitÌ‹ª¼#ι´v "Å*6œ)‘.V"fZÓ¿} ²¥)âã‹ö j{±—DeÑõ¨wôþPÕK©£ÛŠ>Á*mûÂvc4gHpçÖHdŒGÐÙù+k=ëªö,×µëë6lÕ™>*ÈI3åtn*N£ŸN„½Y ¹ðÈâéÉÄÙÞ›¼,íö `Àcï mmj+ä_7H//OnS¿¶6÷»¶>ÒªëÁšy»%ÌúÔ7§žvœ• …4sRTôöšM}f¢è#}F²,QÁg6uÛÚ®©«­‹­8ä ‰ôÇ€Á¸«[ÞŠÍ–cë!šwÈz`z“(Š5ÜõÑ@(ž Sq~ê%阷håâ³-úÞVôáì< u¹¥Å/\óª®V%,ç1GÿSÒøR¶èÚøÑžöűéï^¥U˜‡ªjƧõ¾BUesqMË¢ÏÛÀ£ÚñGס¡ ^ü˜q&2~Üf•gS‡ÒŒgiÀ >èrEQÇ©&%[]`qò€?)÷gò«83Œë±G¿Å¬‰ÑRu_Îe&•0¡™ å0'¹Tà·FäÈ.è¦Ó'½--·‡µ¯æ°:dl:¡S&ž·ÝDNÃâÁÈ *‹~¨{ÏÊEå ì¥Ô£ÈgLÊáô¹×Ð9¾Áš°)OÛ™_ìN.p`ÕäAU,)Tð¹a)™Ï,¶E ¥¢n}¨¹„ì"- œóŽ' mŒX8ÉÐ <6æä_йi§G=Þ¿€X]1}…!0î‰Å%ãIúˆÈùs¯”€¢˜&ã£üS:Q‰‘³á R§2üž7Í Ô¸»fŽ“æ,Ûǹ$Áø›-¢ÿ)ƒ@ÐÌò0àYò³¥Õÿ†s€- AÖ"ùc7 N&ÅC¶ápMôÿÆ6MkwÅGož{œÆ@®xÐ.R0“šÿ­]ã@.î\dXJèìò"ýù›–I#5jZwµ3>e½ÞáuDù+­±k©ñ‚ˆ¹+‰ûÓÑV}æR&×Ü%i½‡+nK­‘û±¢·o”<·F.ü¶+÷¸¸èܧEì*Ȉ+¬0ñÅ/zóãw?õí‹÷__¡1®¯Þýúíœ=²Œétó“VAk5öe¸v!Š™ …?VïИi¸c£]c¥ÜðB]*7ç£\0~NQC¸Ž¥…HÌdr9tAÂûâ‡Á4§&«NÇ5^ÇqH@BµÕÖù|u¶ÉƒkÀçún$ÌÖ—¦É1ÉMi¿œOwCÜ£ë B½±a¼ñ—(/Î’›¾XЍ®Vt¶"WÙ(gƒ“ºrA›xÖêœ^q½ ¡¼ö€ËðT*ˆ9½pÐîa³kì¦ØÝÑhQš¦,69N©=O?}êÜÜÚ¡¸s€QKTœc©`øùë̱^‚‹‡7³qåÜÞMÞu$Ò9`ÑMcÇÞ«}7{ò™fFˆ{.ãÃךÉsëá¹¼  o3ÝI޵çÃŽqJ]@”(uq¡Wpy¾" ül·ØŽ”•›•Ð ã˜![ èÑ3Bzqýäwû}é endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 824 /Length 2236 /Filter /FlateDecode >> stream xÚÅZÛrÛ8}×Wà1Έnܧ\Sëɬ³©Ú©IÅÙÙKâEQlolI%Éãäï÷4MQ¦®´EgDˆP«qpú4HRFye ŠBTYQÆÇ(H‘U.[ENEÂ]TÑ¡I*y¯˜TJ±Ç aΊ=Zü…¡†“Sè"KA“O¬,Ô(²zBV6B‘!e“bƒ(frÏ14CØÉmPÌ¿cNYyƒ¡€Ä[´èô*b0ˆpôh¡/› J¶©0´² sŒQ@¢LJ 0ÀGƒ6Y- ÊDÑby ÜòÞàò!P/A>ÈG´—¦À”(›'å :3dДm¯˜ŠuFe‡ã%LÉqèyÌDeüQˆÉ2WÃ*'ÌìÀ˜/XoM¬ô°ò€x|„2xî‘ñÊç$ÂBƒ|ƒ¹ ‘ÁŠUM+b'X;pM0rˆb~bdaRx@4àˆÄø0ð&|ÁÄIÈÕJ´Gë¥'ƒ>ÑÌà+8ùB Þ@p˜á͘$á+¬;4>ö0’L Á\¿I”D’Ubñp‘¬¸n’Lð¥Ä14EO´bPL´± ~• ŒGp¬\íY<0‰Ìåßñ“ØŠìÄ ž¬ ÿ ¸Yv2¸D`•ĦÑÅÞñ±*ÎTñzü~¬Š_Õ‹Áe2N5©Ÿî½øhcÀ'~4Ƽ‘ËH.3¹ÌåÒ—Ëu}é×?\Ée\ÿã£q¦({>?ì~+—©\†rùR‹ʾ£5˜³á`~5iÚôä¡ê/µÖ»‡Ýw5¾if¶†ôS-u[Ïl!PÞ\ÖÚÝW°4®/z&uw©á»\nj]_÷²Äë,ÕÐçM<%”‹‡£ÿY4­¥–ü\׊fkÄ/^t—‚ßꇵÀ¨ÉTcæÓZ×E}Û¯9˜muã ó~Û‚ÊÍ]¼tÐU[n·oò×WMïïï3Çcgð{mªÿÖ¿-qÏv¡å-Ñ5XgmøÙ>ÈK+NšL.'»îFë±ð§o×§ÿ×Ú—8i†ÁOG¬q·dȧ³þc˜rëLý³™0vMz^ý?@÷["r%kwÄñûš+ÁŸÛdÀ’Üõ¸Y®Z“åí..–xo,O{B`{6ÞN¯ëÿk ®/´]€¶ÏÍnʼ¯Û¯Ëî•…í¦ýÆg×vbòH?zŠ}í¦|þG‡‹û¬†>k.˜7¯¨ Ÿr[¢÷I±ô¤¬óH#¸MŽø~ófr韣 L5Bä·¦+_Ö3ù¼ ?–½Ù?­§?ÚjÈÝûµ—›’ñ»f]0l.¨£•5qël_nJnošÙø~sº¦âÊh£Þ©âôj~.:Ž{Åûï“¡*Þö/†½âÕx4Žæ3“öŠwÃÙøv:ΤÂ.{~~¾êÿ2þ¦>9ªÈ^3ŠòäH§|Þƒž)àþ^úd4CÝ)Üeäó^cÔòç^ñËxúy8-šóâoÅ›ânP ž ‚Á\}@­ µ8êsÍ(c™¢6R rДrg·ŸæÐYüýjôµ89>.G(NJÊŠ³âïÞÈçÅMÿêz>þ©(¦ã!ÆÔ7ýéà/Ò«ã›# «>`ë_ÿþŠ^{Ôµ1:¢Ý^_Ÿo“ ÷’V¦¦è)øUb”S'ue '5uõÝ¢ò¶åwü¥x;Ά˜? ôë©*Þ¿ÍW9\±ŠôË¥Ã,—îç–v°"_•ìo·§y`OÒ¶<Ö0:¢à'rÚF‹û¬}L;Qk±u5êÉøúûMÿë° §ù;Ö‰Hù´—ó›4'åcÖÁ¦ö®t9ŸOf𤻻;}1ºÕãéE1O¾_¿Ì‹‹Éµ¾œß\7=*¥¶Õ¬<ÊYá(-Dƒõ:¡m! J lñS9hÙä§ý÷`Ÿ% «N+çY‡xm¾w×ï›ûyç26ʳ»û–ª–«ÖV­«Z_µ¡jcÕ¦ª­ôQ¥*}Té#{XÌPy³ðÛÒaäHÕèŒ)™Ð#‚¼çÍÓ8ëD&å|3 Ãk,òos_xSJ›Q¬žquŠÃ“öp>N 1ËjkíÜŽ…Q8Â/‘Ç2ö¦Þ)œ’³ßiîž ²Èž^1FO±Í^ÃB;Ùàç°Š1ÚÈñ²q¸‡UˆtŒûptχKA;y4à–àv™žã¶{‘uÆÃx\.§Ã–Unõ(¢S>c•M° xˆ¸“œ÷àðÝãpXžäQG´hÁ‡ˆâ=0BçAëØê€ÜO !Ë“!‹àu´3hŸÁ9L ò\,k¢Éhw*µÏ´6»2…1Œá°Ô;ÄvŽîS© Ygy^h‘¨‘DY£p[’c#)vàå²9Ö&Û2ï~0– hvsàé1hx5«ØÖ§UMÑ=Ye“,!÷ùv²»tc¹,2»vx="ηEÊ–÷¨83“7µœÝ˜mä¥(·v´†¿`Ýu‡¥!¿¾Ÿðî'¼é6Ý$嵸d±Èö›ËVMKùInì÷/Žÿu9‰ endstream endobj 168 0 obj << /Length 2270 /Filter /FlateDecode >> stream xÚÍYmoÛFþž_¡ó' °6ûÊ%ï›[ׇܵ‘ Š´(h‰’ÙP¤@RIÕ_ß™%EÒT-ßµ¹~H´Ü·™™}æ™5Ÿmg|ö¯W_,_½¾3|fYl¹˜-73i5‹¬žÙP°XèÙr={ìËü¸K>dÅvþÓò߯ﴜ ÎbÓ1-$lè&[œóŠ{ ³…V!³FÌʰ(44)«i'÷w’‰v›÷W(µ)÷é|!‚«ë+Éüÿ.i²²Hò{ĘpõÓ¤Z[ÈäKÕ[Üm͇’8ÉYι?Ú\šŽ†ËT˹ÕÁ錼ã뻘÷MŠÁ—P­o¦ììšOÍŒV®¼™[ã½¾‹Ôp­e‚w¾OöûiÕ÷Sr 9…wîóz×Bk&³ø.mËu;¿3ù ïõ8„x:ý]Úª¹0AQÿsJ' êëNý‡²Ì'ÊOs[›ž  #«‚lƒ¿:hSêhªlŸ§“ƒ-$DYk°jh±¡ÜĆÝ}/7´y »ÛšDÖût•ýȹL½.IAàŠ<[¹Kܬ½rÇ}Js`G ÇŠ-SF Mç±ÈÝÓù"Œeð ™VµÛ;)à¶‹P™à›²ò³P£¹œR«$ÏóÐ× +2P‹+ˆl·"-šêHÍǤ¦FSÒÄ¿kâEŽ…›ªÜMy–OsB¹+Œëë«úPm’U HÉoÓÐ&¤; tÔÆÒ)¨‘U®/lÏ€½î n¸¤ß‡”æ$¾ÛÙ[«²ªÒz_kDüÞšÐÉ ß8gØ@l3ÄrïÊü¯ÓÅñƒ´¿€û8xÙΪÓU‰Ç¨YäcnÎ0ŸP?M³èÅ_θ1@‹Ì)ÍM’Ng5Œ*¨ ƒä¡<44æ©»êeD7…Î k¿ Åß5úUš°ÞtiÜu&D÷•—ìà'Æ\>"Aƒ; µ#”v »sÖàNÛŸwïW#ÛAmoc}QpB¦‹ÔŸœ‹0RþþƒÊã#UÈóŠñΤpqvʘûçÎÒ„.ÈÊb«Qm·­DI jlÔàz§´ÅÚ4 Ü qŽ* ¸á–« Uä¢ Ñ.Ú#Ô‰);q^1ô†GdøÊjL ‘éãZ.ÉôU]'MB­‡¼„’v(ÚWˆYMåÈcz ]Æ­gCí=ëR`žSòé&£®ýf‰Op~r(ŸKŸ¯à ’d4JÐÑùÆ RrKþ¢€(å"ít—‘ÃTéæÿƒ†oòœ†7‡b…ŠÖôIÁM+# 3Y5‡ÄÏï€È u®Ê=á+N®¼À]²N½2ßùy™Iò÷y˱<´oI±õh\é´»wŠÓ%tÄÚ×ô5¹Õ™û)5TŠV¼¬*C¨>Ur€—i¾™|ßÀ’…Å"¿ûÊy.Jj·½s8p»™~ëø¬¯¿·mªy»A3õëÈÕùG`2F} ™ôˆtñÿÌû¯’,Å_Wº?!A½Òý¶_zN—ènâí COõ)árD×r•QâÄoWMXUråSy~²êøB,â„SÁ*±ä†ÂñI°¾„Ýù¢ðo§}eðoS—…)´•ø“Â4bfðL÷Ãô;÷€KbÔúž³qáÙêÂÚƒð´ælx (¤ÍËÃÓQzçBiT6b‹Š1líRÌÎ=M§{8Ð݉1ƒ{ òzÞ;½WÞ†S§XÀüIWºzj†OcÇÐî2C®Í©µOšGÿ‚~‡ÞÃÂ{pï‡Sýýoß×û Ð’u|ŸNgÐ'\¼ƒé¸'W¼ƒ;0yäX²ýo9µœþsèðÖû߯–¯~PuÈc endstream endobj 186 0 obj << /Length 2046 /Filter /FlateDecode >> stream xÚÍZIsÛ6¾ëWpœ 5cÁغifÚ4Î$í$©ãéÅÉ–è˜$ªe7ÿ¾ 7‘RL[Izð„€‡·|o#ƒO^Ž~½œ ()L‚‹ë€*Ž´â’E„³à2\eó/‹øsºü4þxñúäŒÓ€`áÈaqB Ý¬Ížö7Àf %5›'œI¤ &L -…;CEÌC8(ÿòOAóñüå(¸œŒqx¶™ÏÏÒy²ŒÉÛëwcŠCÇâ˜à0y{õw2-Zlì'{rá¦D8˜Px"Ìq‡œÔ*jî1SRÊÜägOd ¿—GrË1ø© ¢NÄT[gW½Ö#aÝñ×^jy¨iÁ-‚·¡l¬Ï€{AXh™ÙCå¸'HBRŽfi~ÔÇ#ˆÉ*¿ÅËY¯tE´ÂÁѵϽEÔÄqœ]G$\f…›xSÌÀnœñðÕuù»kúçŠ@€^Y)†È„+µ^Çé¼7ø ¤¨(w¥%r·òµì\"¡7øánØÂÞÿ8âù`çcb=ãÞ «)=.ÐE$@õcÝy2ÍòÙЄŸ»S­éÂLšáËdÕVøK¿ò¬´6xBy²E¨ßå£BÜà ¨’ /ðüï{Ð1˜ƒ®X"è¾: ~Öôáè¨?3™ÐÔ÷Òé°ªšŽrI5˜>BLù¥U‰¾NÂ=HÎIW m!{”,É ~k %P9Õ%qhÙo|æ¶Ç¶Ñ¤æìΧíø*ÛeOêä~ºGâ¡ìvV°_}§ÈIƒ%òPßh|†Ååý_¡¾ ×QWÍÂ|@â$’"ŒeûÎÆßÚeœKÄåwŠDÀ>ñ`|”0pˆ\%ÇG½8¿xõüÅûÃhÃUÒÕ*ãHàÃÀi„#‡K5ü0!Ç®Sð³âÆÇ­õÏÕÞ}ê(y?ÉöÍ|'ÅštEn7¬k¯kóùEðGzŒ4¬*á¤eŽFï©Ð~-õîb~óM ³«)^E‡I‰„#H‹>%–MÛ<51û™Ét >GÚÈ0“[ÿâj_:Ìkõ…Åÿh‰­M endstream endobj 198 0 obj << /Length 2151 /Filter /FlateDecode >> stream xÚÍYßsÛ¸~÷_ÁÑ5!€d®íL®unœv_¢K|y %Úb#“ŠHÕÉß],øS”mÙn&‚ ¸X|»ûí.Žk{¿ü:?yùFs/dqÈ…7¿òd¨X*/4‚ÅByó¥wáoŠõ÷›äK–_O?Ïß¾|£¤'8‹yL¯SB‚@»8Æ5'Üíp:?ùz"`È=BYh/”’)#½ÅÍÉÅgî-áÙ[³ ޼[»òWÃþZ{kïãÉï'œÁ´ýé(ö¶×^âƒ;I{1‹4¨V #ØSÆULº]'›¿‘zö½ZŠØÞÅLKíŸo³¼ú“k¾Ø]¦pSáÿâDܧÓ(ZDL+ñöq#h!â0JB1;sÿÅÙ;ZŠËÿ¤‹ ÇʯVÛ4E(®aS‡Q±I·U––´èK^Üæ¯èÙ]&ŸN?ÌÏþ~úqB÷ŸÉ ãÈ}¬=dL ¢ôò0.™žàa½ïï¯ÎÁ·òï-æµß½háC|ÿ;¢}”#Ãtü,þgà*¢€0¼è¹ÎL¼ ·rœqNô¢·°}ܼ0º®‘Ó¼¸ß-²¿³:(±݈;èæÇ£·o k£ä“ 8g̘0bRF= ì!ú@@ÇQ]ÂÜâ;:ú˜ûHÉLþB0Æ0%„"}+€c"­5ŒòÂó‘ÁÑðì#¬9\ųV,ηé{‡w½ñ¾îPÁ„¡yž8R’Æ¿¦mòôWíă:L}ÞR¢ñª~;@nà]‡WÆûh°öñ†š,’Oó! µu8S¼Ï[³×8m«‡ñ2Wà(®a:[E†÷hlöá…b.2³P£Æd4jh%î!Ébà§ÃZ•ÜU|SÁý”f‰ãË^5칸7“` W°Ï§È™Î®ýj›ä夸3þ2©š¿Ú7Ô½E¦+)!W5ÍÛo¯ÏG[<ÂPÔ‹*·Õ¦£:8|‡©V©Û®X¯‹)8ý­=5NݤժX–¤Ø"Éiö2¥‰]™.¡ŸP¡ñÝUõ³Ä#s«o²|I3Õ*©PUo&dåAƒ*ZR1/r‡fqå0_¥¥›ºÚå‹*+òÒ=IËŠFY»–Û´Ü­[»mölõ'çríÆ™“WVÙzMÃl’•UšWÌÁZ¬­³;oçQLáS¯ßÍ&Í—ói,ýbèNäH=?º[ðË71zÜ —Íܸ»††µk¼&uŠspákçAï}@Àè°€#yŠpÜ6_ú{š Þ¼Ró©uÚΗ ® O©Î*NØðo'¸zÇž±a@Ö¡êOÒjõ˜öóòÕXˆ¨ Õ»åEµrÊ{3÷¨'n¾Bw ´ö ™½1.~`¶{ø`<‚B£‰Øî¾F§!Yö‚»LãºV‡²,YR¥K·¨hÕ³¹Ô@ªèNqŠVw>7Ô;’,Œ£®Ç?&±H4L„ùÐ?«H­Ì¡è²°²-Æ3Djå"Z×­j¸ì$,Ì}Ï«a‘¬A);µ(¶[ûÑCZth2¡ÛM²­h¢pÒºÒƒr3äFeOauªÅ­Ë‚ÞÇóØ©VuíTWµê]—ÀÀì]M<‹âf“TÙeMH·Yµå%ëmš,¿7 Í\ºÑ¿›ªzâÕi[>ж‰°³¼ZC’øÉ8ü¼@/€þÓêVì7 £Üai%GÈ|SslÿH/G÷ð¹€FeôT>×ÿ:Ç Ì™ £Q‘«Â¥=s*-˜à¤zðôuvØ€ýÜRK: ø¿¨=Ø¢ØÖÚè bŒæi³`[¹ÇY容 ¦VÆáÕÛU¶XÑô6Ý@ù¥Kÿ<ƒÐƒw.×ÅâK]ŠIHæ>^'—éÚ² ü ñÁ9‘ —ñA£Œë9ˆÞœFÉrYK°ÚÓC45®ë$2¼·8‚~ÀC¶yæÁÙˆtNûg¡;‚ÁÁD”žÁ´¦'û:o0Ž{zs}PoüÊ "}¯Þèï¦Iý#VÝÄó%ÝY§+;ÚÙ5¤²Ü@]"‘ —U?-‚ÒÝIL®Ûð`¹{‘“ “ŽÖ¿à/Æöyħ²åÓàQ|ú ”âèòé·À¨òHFý„Š!¥~£T|p˜VÁž2~­Æ÷Òª`*þ9Yõ:– ]°ã LnÜ()Gϲ(Öû©¬Z#Àc¸¨)BhtÓ:Ø9ÀsèHØšâî/8št‹™ ÍAˆUFtS³”&LCóÝ;bˇ+4Ô£ã,O¿î’u†“²:UCÓ4êõìƒOî(7 ü¸‰ ¨e¿ ‹ú")î hq"üdÝ£ ³·;ûŨ¶yÄÊ,0È:榙ë }*‚¼^4 ©Ñ€N@}:ÇLªn{ÙÓa&`¦èÄÛ0«Iðœ‡d5w Ç]Öá‹dƒi†n&gï\±ÁB> •ý^Åþ­Šé=Òþ»YZ†š>1Áû`[’ÀÜÒRލiƒÁb•Úĺž ®¶™ëd¬1šÐ³2]8{bÛ¾ nR4Ø·¬tjÉêî¯_P >Fõ Šº<½j‹Ë; !ÙB=žhÿYú[h% endstream endobj 216 0 obj << /Length 2395 /Filter /FlateDecode >> stream xÚÍYYsÛF~ׯ`å ¬2Çsàô›¢H.olKk3ÙJ%[[ Šˆ €€VøïÓ==ƒ‹£Ëñf÷…¹§§¯òÙÍŒÏÞž|¿|Ÿ-$ô„"Rñ J†k¨iYÔ}!ªæ á!eÕQd¨ùœŽ‰Õè˜0aBDöœ2½Ë^͈¼;ýB×ÕaÄB¿Û'‹NH½XE0%üÁ*~—µÛjm×OäÕ¿PIÈx0[Å?¡ýŸ²v_ÏEà•Í—Jø(Qloë%Ò§™ÑiËmÞÌ2”Þf_®Úd =áµF‚f2¥Ñ!'&Ü“ ˆ¡´×ŽÉSÀ˜Ži¹¦óWN¨S ]—·4ÛV#*ý&6_(?<€†iÉ*-ÍÖmf^t™Cv»¬\gk≈9 T2fо/Pú>øìM#¿q. Óþ’§.ÕH"z`zª/%UD½Du¼¼þ=[µ. ²(Ї3±Ï ðÇÖƒÚFµ9Õʪ¦&×¾mSÕw£W^Õê–šÕ¿Ò[§­™,Òë¬ žÛMÌFVãÆ)‹N;Pt"!Ñ‘fŠ…VÑ«B¼›“àà»o²5µè Ü»¯óÖLjêjy/+î½ûxþOìþ„ vúþÝòÝùgš©jú^Ì#ß;Åé³óågƒ1cäDJà5²‡Ìð%Ydi=Ç^þ8j:TÂN„D!YäwJŒvàºCJm:£  A§ãç à˘º#YGc þ[xaÜ zœÃÎug ¾5x’7Ü{ÿyˆ²j·ºˆÀò[tJz5nËj.ï¾Ä.`d]í€ ¹]‡‚_À_§(BÎbÕ½ØzèËk”E‹cĨgá±6N &b¾ F ©³]‘®,yyÛÝÉqð>o·æ•%}³»]{ ÎÈ8b€Áˆ5U™iMCS@×;ÄO0{|üB$‰žiW˜ve&É]5®‡&‚ºS'ú5~m`ßkN³ËVùæ Ý Þ[‹|•¢[e•¢ó°vôz‰vÁHìag(Dýk2·Üòþ¾³m¶ºßösV£à–‡Ýû¼qº4ðÕœEj¢©/õl‚)—g#ï¦0bhè{“£rÒcñé*NH8ÙÉ|°Á¨ÇšzF •oi·[b ¢–6ÍKsDU¢olÚféƒí¡dô’¡dd93’:)’S`å¤ýׯŒlÍÀ4P%ÓHGÁÇ&*š†Y KÁ¬¼”€gESÑPCÖ¦e¾Ûik–ëÛqb€Øý‚´Øg ­CžVûÖ¶_iÔ¡ž=²×ãëì¤C®çô8ò;êãáU³DvÁÈ—¿_˜5äõUïõ£xýaxò#päq_^$ÇžFɃ;[úf|¶´$¢Ð„wUòª#¼Gü"ºÜwøÅA¥IWÌ™H‚§ò'>4Jžç¥Ó;‚Oà‰Uùy ÖÔg7Ü ¢cuýï‰0%ï(íß3ñ=p]޳8_Ç© ]¡s¼³¢>Ý óÁîСâº&³Ù7>Älvd"a„…GÞÕ Óé]“üièyŠTÂüè(³Ä‡E]^æ¸ÒG—údꀹP'}ìÁ¡&€VjFZ{Ÿ>H·4›†S†©‡yè$$ ÉWG”[Wèù:A||ZÔ€ðfi†€ýx¿=m“ aÂæ8h±œ$šn2PJÒf¥Î Q¹™zæÚmÄ×Òs“å”& Z¡6S§…F ³0~†î*ñO¯Ê••í+;P×h#£ ê.§PÞlö…3{Âø‚ù \GITü8ý©¼Î˵O/7ÿÉUGß=YiÁh;òJ©äËøâ0u‘„LEò)õ!w ƒo… d2âAôEâÂ>#—|>ƒ°òAð(»U[²|A¦ËG¦+:ÓÖM3:ˆ•zVé¢{Ž6î°ƒƒé­¹!i_^Wûr­1F†Y+¦t\ŸdSËn F2Ý·^9Ó̘ñ°ÓÄMšΧ ˆŸšxéb™­¦ë3å‡dº(T÷bÉXØ¢´|YÁ’FªÌÁmSCD·«qq¹Û¦6 9ûv·o-s£éÂKUÒk bÏ"÷ˆÂÿ>ˆYËCPuŒÕ£ƒ7`b\ùÝ1«¢ªn÷Îʤà}ý§ #kŽã¿ ñ°Üì'Ü䨯jmQ˜aíªqlœËàÁMÞÑô#9ª–«¾Rsuùþ—§?žÿçìèÇÓ?¸Œ# Àý¯«¹*&Ý5WÊL‘zÂ#$Ý<‘™¹ÄŒÅËp- ÖOŠêãq8(¯aâý2Òî±”R99a#‚ˆ²Ï‘ë´ YÃp;Üc³ª× Ía+mœú“‹0D|wqŠÕTÒΟÏ?-ßþÎÉødè/Rs•`¬bë'ÅSâ¨Å,S% ãpTƒéÒOü›À§<ßWÞ 3P=PbŽ-,Ï…wÛP·iSƒ;Ø3•Øùg` êÊý6×ì®N¤q‡ý¥¤ñM]ÝÑ„Á0Z­ TÐ(«–fÑdõ>3æk(v© ÿ:AŦú¡ï§šr.í_Š›º·ÿŸè‘²Íê0^ÓÅ¥¡fÚ:-,˜ ÍZ"5{RÉdo˜oO¯pòJv€ƒvz­K/pþi¡©¶ÿû ¯×Ù‘¾¿±>V±0˜„ÜëªÄÃðµ!)C“JCBu‚54>*#Ñ•ÂDù›aÿEŸú¯Hý/$p®qª>(’¯Ã^˜ï´` ÙŠðuQ¥nZê€#6úB ߌÄ/º€†“ˆÂ ÃM}ªs³Gh%e¯×R’Áwh’²5ýÅp•™/MƒDƒ#+H=Ö$2èBFRÌUN‘È(˜ÈwˆD×*IÄ£o,’1KÐÝtõa…ùž/OþڪРendstream endobj 236 0 obj << /Length 2885 /Filter /FlateDecode >> stream xÚ­ZmoÛÈþî_¡ú>”ì½}å‹{ à^À=Çvc_€" J¢lÕ©#©¸Æáþ{gv–’(Ò²xуËår93ÏÌ33+óÁý€ÞüýîàÇw†\ î&H&t0|Á"¡wãÁgož§Ï³øqšÝ}¹ûçï´Î"Ñ+Ê0?Ô°¡],.:à“‘?8u¡ohU•()¼Qžiî};ÆKŠŠ&«‡„Ã4=ÒpšÁ+öë¡¿þu!$ó¬¿þþì¦SFŸ™¥„Eãaê¾1É‹;:1Ryœâ^Ö)\9…[ze‘ªåÝ´¤ë#¼&÷”Ã½Š¼¸~žMŽ„ç¶,«ÍX¿¢N„Š˜ˆ$@ÊÈÙÖUÉøèD†!l5&­‚h]+#Y¤—jMâiÚ©;À- „Òâ–ER-Š,ƒêZj«º #/ÏÒgZg ÷´ÁóóÂIõ»½†I’Ñè~Š& ƒ¹©¸t°©†P2`¦–)Ÿ[kvÈ.Ão·î¸Óà»Kܧ&]{éI-VN€ú;Ðá,*2L«  E‘”‹\SúÒË'tµ.*ýn± çI£Z``¥ ægy‘Ô[ÄõÚÌmÖmjXA¦†35Œ6Mû´&Õ|á$AËiY•K=PaNšº $Ùl8²²áÀÆb'@)ý!Ð&Ú„ cK¥ ¨Í«ž--HnzržìÐŽt3ŠËœÈÅÎ¥£EÛ ÃûohÏ8]$%ÝOМ8HâÑÚ pÑ]8—‘3Œš.SV`J‹ñ:½âšžè"Õ4)鞣÷Ôbc¤÷4­hÖÆ¢‘5Ù9ˆ‚ʽ“Àó<—´ ó—}.Y!Q!(l¡ 88YcK³ÃçZÑ„& ŽÖŒ>²B®¤,ub R¼RêÀ¥û,sSŽ6íܯÊÇUL3(^×OH)½wè&õöä3ñlž¢ïùŠ“ÔëïÑÝ’Ä—Ÿë0ì†_Ô`¡ãÍsäÓôùøðÓÅí¯g—‡è-]fJ3á«õ²J ûc“wü܉ªö¯Ýh1\£Å Š¼Ë©3=Äð« Y ‚MG$ÝRTt»¹¾¸º»‰ÀûtþñîâçóÛ5Å’¨F7ö4µ.j¯êT5‚¡¿C}-åA Že î>‹1… ß‹ÇcšÉ’š`vçðÙzRÅûeÏÐ`X@•'t?†%Ú81Ü_¹¦•‹¾4NÊQ1uÉ',Ásâ=aº*EŠ4ècƒ«\‹QZbçž%DŒâ9p'õXŒè|}PÜš¡ûúl_ÒÍ– êþ³e*\"ÁzmÞ´¢1PO·튜,Ïó.£FŠ+ÓÛœ _)“Ê}ó*˜ØUoŽÄðI’–I-›MÖ0šØ8KmB’¬¤n•qäfw¯?ëJêÂ|hO¡ jÀ4kl0åô…œÍd¸CeÔÒÓãûÐgÚ•ê{Äti¤oÞ(ø²háTvt:8D^ôí¯ØŠú#pˆ†%(1jÎ]bTÀGOI¶f¡¢³9€ö\„;5Ñzs€D°³“{À–Ll:¹%4+ò–$뇌¯ŠßݪTð6h+ܼù`Œ|2”³À7L“ÝØJ VÕ-‚ë¤Ï &ñý f¸¹¾ü÷‡³_ο^ža ÝÞ}}wvqùõãùÙíõUg¦Òš).ÿœaLvÖv[™@;ôœ/h` ¿eBh2¤ÚµIô÷ï(EŽêV7Z¶ºQÝêF]møq7@g*Ò{Hp³g€€!":œÂ+¤ìÞv=p3L&t ã ¦\Å’#⬔w›Ó䲫ƛɢÀ€n€ÍÊ:¥Õ­gê˜ø–rAiEj‡rA®ÚJ*CpßsDôTL+—/§s»p04Sje„Ø^‚—ᡤ¨Ï9ª6 Ï›fç.§Bo˽3GÎçT—60Øšc0³Ð}ç2©þzd°‰±Ü‹q-°ËÕCQ§üñt–dX/ÄNUȳE?$ãÏ—ðÃçw¿`­ZßhÀÅ`4;øü…Æð z"pØpðdWÎÏn|/Üü‹„!G¾ôé@\\ùÍ#†Ëu•_VØYÿħâ(> QÛöà y.jí`Dñ(¾g 'nßA›/_’â{ö¨Å!BÕc‹6’Bà9|{A_÷ñü-ž}ïöôÍíól–TÅt½õû"_Ì‘‰rÉßÚH/•ë-Y[¹@@n÷£Ó²ŽgPÈ’©Uð3]]èÈh¨èò….uô‚¶½Emkk ©{‚ÒWLšhËo§o>‹cy¬¾l®·mUtÅüž€ƒ’Bq\Õ1]åñRzY©Þµ•‚Œ@’Ø‹RÒ”ná3ϧYUªÓ7×ÅüpZ¡—Þ;¾±ÄžŒmÌmî·Œm5±»åÁ÷©©€^µ²'–XY5p:¹=•¶7˜û9(x£„æâÙpšdnÁ2Åmѹ·Àmáqhö­À_Š^€öô ^Z@ù÷Ï‚1ÿË¿cH~ùc+¬½åk©(#HÓQ°¹b¨}SŵêTÌNßü µ_•¬~’@àÑ¥_Iýem« ¹,ÒûAŠXf€Û­º?ÍëÅêœ[yñU¾tñåaÞCÓþ”½Ý¢ooaÛúBzÃÆ~/úBeg‚¼góy’oÐS$§²ºËÛÐ6JÐcëõ°¸| ñÞâ·-àkÆ•ØüÀNlX qf íðÖT=üt}ùë‡óÃ×4í-f[S#‡Ng/šÃ|ßa­¶ˆÝû›m±5·Ç™{[+ðž]}mio©·¨mme Ïž@R‚@ÿV[‹Ø½¿Ù[øP&'Húå@Â^ "×Püp•?H?­(dÞ®XÒæ´rƒl1â9‚¥ZX=qu,²ë()]ù7\¸jq¦ºÂþ”\¯<ÝbµÞ*·­Æ5”Û{ZÓPË–k»“ÞëÉ b;íîìè½oé."ÉöÓ´h‡Ã0hžòtËÝ÷£m©CX¯Í~ä†N7R-Ä®âYRþ‚©ÿ™¨. À­èÙFSx[Pë/|[?„õûQZß( Z ]€^B+ö­ûê—ì+][?ü•Z}'¾øãÐ g²ñžÑ9vJóü‘h&nòN]þe‹Š½lë¨5”áûÁP‡ŒCæèWð¬~ßæ¬}¥lë 8€4ûQTù ÆË‹£ªywôÿ*ˆäS\§WÌç.ý<öÿž¨—sGã^6ý;ÝË6è­AÛ’3ãï)b¥fà;mï϶%ç!Óz?’ I.úùé?.>¼ê¤½e¬ôëëÿàܼæ endstream endobj 242 0 obj << /Length 239 /Filter /FlateDecode >> stream xÚ¥’=k1 †wÿ í¢H²eŸÖBSÈVê-d( ¡¹~L¥ÿ¾ºø(…î& ôúyƒ @ðîjX­•  b¨¯ ES’Ô=lo>?N?ýóÛñýp»«›Õ: 0¡‘µ+Q1wÉç0Ë 4VÜ×ðØGv*–¨PD0e—>lw{ßm€0Zßçd?¤]@Nð›h40´,yheß‹¹¨d¤d­»Uÿ©TîPÏèü¯íV*³WŒQ#›£Ti,a\55Çi„ u6a1á:JÄœ¦) ©Ïqù˜—ó2³¡ endstream endobj 248 0 obj << /Length 1347 /Filter /FlateDecode >> stream xÚ½WÛnÛ8}ÏWyY ¨^DI|ô6d·7$Æ‹v06m •%C’›ÍßïCÉ–£v“¢Èƒ!r8šÍžÓ`Ðàê„úçﳓ³Ë˜œ’$á2˜-ƒ4!RÈ ‘Œ®‚Ù"ø¾]ëmkêhÂ% EôÏìJhÐýêUp¸½¹òFc’f)³Fi0‰ɘ@{WEu¯ 4÷W¤x¨ë\ߦAÓ>8g„ÅDÄ ÷Fd &½AØ3" >O¥4¼2m›—+ô™—ˈ˰ª7ºÍ«…ú¾Úµ¸ÜVÅãF Jàh §OÃcDIÙ…Ç%áBõá½(ÀkÓ§ˆƒ;ç߯{èñÿr® JU]Ρ¬ªË9±¦Î.Su¨ƒKPu*BõɹŽ&,ìÜÃwò %*¥î¡¤ÅJ÷Î*)¤³Â4Í Ý4 bÇ™â‡^'"S$1˜ª2ï} 6²,lŒ­B–†m…í÷…ÑM‹"þž TÖ¾>N¯ò†Žª'yã]¬+›ë‡’D“˜‹pÚ{°âo“¡)P•yOÖŒ®KHJƒÊº6ãÖfë¼ú³aBB‚ Kˆ)<‘±ÊÂ,í]Ñ‚Ëi¹ðôx<Ž Dô >1£˜ÝêùW½ò›Últ^6¸iò”­GÄS+¨Ôþ’þúøÎÞç¿ßOÿ¼¸{7½Ý]F ¾èúÝÝÍÅôöã‡_hþl@C4> hÍ0’cl§‘€Çl¯¨ê›­‚§ªg€<åD¦ã‘VeëË«Pûj´52ˆÚuWsc«ýï¶Ø«÷¥.ð€¨šÏwumÊyGS˱¤pk™tŸµÔyÑü¡°WÚ)éaŒµiwu‰"LC±û¡Ï,!Tô,¬òÕŒ¹S’ èänRÆCpXƒ\ &Ã*  ví}ÿ˜ÄJÁ$”^cq‡ð—à{Ø­Ü÷ûVâkùØ´fÓuè™zî:Ìbq“ÌÇ3³U‰  \‰\Y7öìд;yÈÛ59”XQŠ:®²‹9Ð,P'/^úB)/ÌXAË “]Lù-¯«r4b¯Yåc¥…ë¤x_[`·$É =_£3D”C¥„C-JT†ˆƒtxœÆÂµnðLãc¹+»dÀ©mVê:‰ä-°¥+1ÏF—3ѳß_–å×ãW ’@Ë=& ·ßÛ<½Ÿ~8K”‚ÏX÷TyŒÚ8‰Ó§–ϧÖðlzw~}3jZÎzJ³@p9yF²L[&,‘®ñØgÓêºÝmmöTìP¤ôèuS2,+¯]ÙSìRõC·­±-1‘2¼­P#_âó±ÚábQ•¿E :$n±Ë–~gÉÿDq­í˜„¾P‚†E¯Ö-!xà}oªE¾|Ë,fág°í»±û.7i?Uâ4sبàŒLÑ¿>^zž©êkOVz[ÏÇ‚‰½@=—Ú»<Úå'<‰‰L¤oö¼§Â¬ƒfïÐýjëþzÙBíxµ¶žuœm'½XÈ-”Àt¸+¸öì‹»(õƯìäêŽ" 8/ÎuNRW«ZopóÄô¤}LØ»á~ô &SOÁ—vJ´±}¯i÷H»õã¿ À{LÀ>½ý¸7cþ°íÞy¶•:Ïmmk3o«úÑ NÏvM}VTs]œÝ»ÃòÔ–íÍ©O•9íªødÂIß³t߯®FÌ ±‘«ñÓsðyyŸFJ†37 wTýú÷d´Yüš‹òÝ ÃRA2©‚IˆãM31xùbvò„ à endstream endobj 162 0 obj << /Type /ObjStm /N 100 /First 873 /Length 1712 /Filter /FlateDecode >> stream xÚ½Y]o[7 }÷¯Ðãö"K$EI@P È6`еÛ‚>¤©±+â"@÷ïwε·ÆµÓȉ›'Ýë{DQ$Eʹ„rñ`r­á¥†¬‚ϵ`ìAð){ âŠ1MÀ Z2Þk°â³ŒgO˜L5â â Õ!#  $»C*–”„·ŠéR€­˜'B+^ÔrŽ­ÌrÅD“¾RÅø¹BBÉÄR h“k£vøNán·ÂÏ|€àÎ¥šIT·UnGg¹aQÌÀ¦EtjØ©RÓŽ­*ö•;0–1«  ¤vȱÝ‚ìS ¯4ˆé…öIŒ/N½±!È…ÊÀK‡‚ qݰ\Â2 %–ƒU^³P[Ãó&JN3Iއé0¿J§œ”æÊŸ`/l àB°iuî1§ ±íðŠd –!L²k39M¹ëÜ ª“ÇÍ`a‘÷ m•ég,!˜îëáîØÌœ»•¬Bå÷‰ ²ÝûZ«Äb©žéLêNW—P- \•ñK EC)Xn Å©;t+-ùL´†B[*&uÎÖ†øSÎ6<ДPÄi"›\a±„jl5¸Ñˆ{gq]¯)ÏàÝà Â8©Ñ€“ú´3ŒbA )85áð0†k¢—¡MÍŒ ¸©2ÖˆÅ6fGG³ù‹p’Lá×0ÿí÷?BõX pÕÔ<¿þðáÍìÉ“¯aKñèØàÁ±Ò1A-÷(°ËV{ ü!¬ÔØvCØäÑL6±ÇËó«ptæÇp3œ&…$°zfF@ü­^îôÔêé!#øió—˳W‹«pæ/_‡ùëŧ«ðÿB¯ÿù¸À‡Ó?³ùs,º8¿ºDâiœ>›ÿº¸\^_œ-.§|4ýôËâÝûÓgËOá$á‡ÒKd±f9¶þ«^@2V_ÁŸžŸ/!ñ„ynR‰9u5Úz,Óø…FÓ¼ÙüÕõÛ«éýç÷çÏæÏ–ïÓÊéÍüÇùOóç'yz¡®gØdí‘ Sd’Øa³* ú `O'³¾ ó–¯—Nùîòúí%æ¾_žG‰9ê÷4ÛA”Á9ŽQVcå¹t™Fc€V½[™ó•©3‚šEAa”î‘©'+ÕGÖŬã,)KgtÔÃX3ë¤DëÚȦ›x´¼Þ8Ze•ªEä­­S¸]BïK×1l•ØÒ˜ÜâMËÖ`>&×RF ùV+§íM`:š1l×Z‚@D’’!,thÕnˈ¨aýÎŒx3mÞ–ñÂÚƒReó­TÙì©r½%½¦ÆŒ… ÉGC" ÿóõ@"hœÀ·£!(UµÞ¢5ÂjW.cPU®cb¥¡H×1‹‰#3î*}W!ÓØ¡5EvÅ{†ñç˜Ü i6æÒö‰ï{Æ´ä­šÆ÷A5=— YªkêÖòÝÕÅYëÖMIÉÈ–õsSR ”Èc7%–s켟rpp<°S°Ù¶‘cÕr—6J}Hü˜l3Ñk‘±€x¡pS´Ú¤¤óÂâœ!ûV^êe…­ö׉·XƒÉ|úuR²{ )Ù…utZ.:†EÄð–ik ;¼'Â*«DÂ’´bcX°«cú²'çUÄ6ÓA}÷Âf–{ºs£„Ü·6èvmЇÖY×]×]×]×=lT5&^gzB«Ëkô7X(l“ËîÚpö×éÇ«ÅÅ!s /‡H~I«”—¾Î¼ìàê8mÉûvHt¢V%¡ÿ!@mƒ+¹F/vwU€Ò‡lÑ¢gúO™ÓZGµù¶Vƒ-Ð8Ó6S%$üTö¶ Ó€ŽWÝ‘9PÃ"5ó}³ËÛ¼=£ÜLBn¦Äd+¹XzX3ÅNF,½/¿÷öÚöööêYÝ¿ÈkOð?ŸæHkyµÅ[Ã>QF¶j–ýâ]ÿUÒfl—ñßB’²t )[«²ãäÙps½ ½ƒÙ®æÄÝ¿v÷\…¦k²!,™›ç1‹YFSÂ*Ø£å—ÿ£aà endstream endobj 262 0 obj << /Length 260 /Filter /FlateDecode >> stream xÚMPËnƒ0¼ó{4RqÖà¾Fmªöì[Û † ˆ QÅß×Ôå´ÖìŒgvZ@xMŽ&9œ‚¢Z!Ó@®rʸ%ÕŒƒ©áƒÜÆ~¹V?ÝЦ_æýpâ90¤u‚Ê’ûÿÉŒ¯¤£dœqZ ™ç•RÖÛf×d¾tÓú*IÝ9{žG·l ðOļ·S@›Ñ4FJV¿]߇ÝwDÎÎV³­išI”ä¸DÛ¬ªêÞÏOQÅžA“ÖÖyMŒTÅ(öz]å“ùà c’êBùYPÁu8ç!|.ܧ½+¥»’%åJnU=o*ã3òà²×·Í“üuur endstream endobj 268 0 obj << /Length 1909 /Filter /FlateDecode >> stream xÚË’ä4ì¾_‘âBºjÚØy‡P0@ìÖ2Už$=6w%Îó÷H–œîd2 Ë¡;Ž,K²ÞŠ ܾ‘üüöîÍW?$2ˆ¤È²( îAž‰4Nƒ,U"ŽÊà®>„ßõÙ6Ãn¥2LvÞýüF øßð\¿¾¿e¢‰È‹\!Qì“R*fz¦ß%2ü´S2lÛöDúÝ.’¡éžNú£Û"èÛÉž'K\YnG_%"N²ˆé§9pcú‰PÿAÈàÃ^I)û#3ºmúfнüÒØ£©×\£@IQÊÒß îX$Äô÷cÓÓÑó³+´#=+ÝuM}Ã@ËPC\`®i¥¢é1ÚaÖ—îÇ^x¦jƱY>˜®3»( ǯw T,²8‡›D"U]E‰%·}*“Ý>E×öÍHËÊôV·½“ß§óýÄméÑã7¼‡Oè¡3õµØíóÌ™À#ÏûT`ñ:¾ÊÅ©éBY°‡gš°³-T>=âÒ õ¬cX~¯«#›áà•iF¶³ÃåIÇYÛ´¸w$Ú¾ŸM≰µî;S}\îÔÚê•~÷^æk#D›F gM’‹ÀÚ9 <Ù `U9­ÞZ¡DI WyË O'#SøC¦Rw£¹æ1P¡¶dáµåOy4=X&ðØÚã¿Ä©eƒíTÈ6{ÉT³r7l¶òz$Øö“·³Æ1§çü\ýÇ›ú?Lƒy6¤ X9Âð$ÉaA Å(Ï‹ TŸ!6ÏC‹*° ;L}e[ÓÏ„€ãW?äåu–‰âT¨2!œXoïÿj* ôÐPáà"Ë[&§2*‹ý)ç!À‚3Ï›åøÂ ·wF¨€Ä©¥Y@pú Rá_ÓÈéêÔè~¼ña¡í*@^´á%ÖšgR™¶¯Úú¹Ygä^{û>£ã5ú¯N}™x1²蒖3U:>³~³šKX %lt6DÄ‹E ÕÎÇx_×5æ44×4aïcO)š£»`ul˜ˆ“Ð8Ñ­ýd+˜ÞQ%jÀiÐYÀq¶\¥P"ƒì*äá¨øc .¾Á)¢œä’Çå$´Œé\@/J¡àSPÍ•(ÓÔUó}$•H¡˜ï£H]Šúg•õU“e)ÎÃ=7Ƕ3£9?½ZßáÍw-Î1â²\ÙÞ5Fö¦ñµÇ£™ºš¶ìÜ à ¤ÀÃÔÑû²_À³˜£hò÷ê”ÓY‘]Ëg™ˆ²Â«úö›w[öˆr3eÂ}žfp·väè‡Ä‘¥+?„jÛzb,9êiIAKEnŒ ¬!' ¯ðׂ™±|ÐÎМ(ôP·)DÖŽt¼:êþÁ¥¦JMo™‘f|—MþÖ§s×| ¸J-Õ‡wKá‡Ö:ÉˈmVY38@ìÜ7ôôpÁššÁŒÄ?¤Œúæ…“ޏA÷†Îi3§±ÑœŠA©ÊCíŸ>³PÇ¡Bˆ"4Žò9Ž\`:žµiXœÞX=°{>±Ycè–Ó•bš›]¨œcóÔ—«,œÆIozZBV¾æh™Éœ"ÓsŒ *) tÓ©'ØBÑ zX§©³í¹{¢¾vÀÁ†¶r…¶ƒ9|¾ÄÐ>-V»" 3[·Ù+‰L­4Ã.Å}Êúri)"Un^ÎõAq®Âqr&ºO€ËµlÍfW9(n.ö´ºÑÑŽoyÇŸ›Þ¡ŸÏQíÔ…É1Õ4º•s0¤k– dù:Ôû®9”zH„ÎdÕpÐp4/z3âàJ4—g îÈæR¨L”8‡ }®Ï߀OÝØ©bœ 4­Ô·Àr.…K£* ÍO‘½æ£©ˆ/’q}‘mÇþË‚ÞYÓ£ƒ4Bã!r vþæ`ïc¡ÜÂy¶{ó(ˆÒS„•Xѳ2§û¶×Ü‚©$I±îŒ 8;-Qø“S¸òÕ×1¸!P·CC[ziÀ’`¢‘ÞÜp…húé—±4'*jáyˆQþ.€'Å–~£¢I¿®ß<Ÿ‹ÿÌ‘EÁ9dô#í5sÍ’ÓŠíh áV,uñ›Yõ}[ýØÕ<ÌÞY×¼R||M„¼w£*Ñ \M_Ïã?ࣳîÌðàšœª±~kÞø!œC᪆=w~ŻϺšÿnP›ÞwÔOëÖxþ0_çä>rÐ'g]˜Ê5aÑ¥ ‹þ¶þÀCŸvîvP¶Ì­>ÿj8—\we¯}i*å¿ôlb3ɺ¥wL7Jh¦ÃKí2‰u wL ‡C¼ WB[%ç¤Í“ùã8†vx×ù¸ÉE™K¢–ÃT]aI2“Ç_}»ªeq ewUÊÞ7vÐuúÙÌ˽P=·÷ME3Z^†GÖúDÎR<û¬[ŸU×uù€©gx"m åŠ^²oØŽgH¿-º'9:!¬[íú" §Ê,…‚Y.êÆòÛÛõ×5?| X0W­æ¿2M–@¦”ÐKS»–.¾¿{ó)>‚À endstream endobj 288 0 obj << /Length 2026 /Filter /FlateDecode >> stream xÚÍYKoÛH¾çWpçDQ§_|í`;‹qÅnÄÚÃb2PesC‘IÅã¿õè¦Dšö(c0£›ýªêª¯¾ª–epÈàí«V¯Þ\E2HD–H¬vN´P6 ’X‰LÙ`µ ~ Mõ°Ï?—õíâçÕ?ß\Y()2™ñ‰8µp -V1.z%ˆ`i•&Ê‚%¬KãˆW½-: ¿,Tõb™$̹éï î4Çþpì]‡m|št*-” ýHÛܶùÞÕÎìúvP>5#å“D$iä•?_8¾%(/Oë^/–±Ì@²cÅöE×lYÚ')uÛ9Í7yUu|`’¸4:©L‚¥2"²|s¨Êþ]n±Táç⚬pCz½«û懪Á‰ÍçnÖR 3¸â“Œ$;CÈ€ÿ¢Èím0ønú)´B 3ö¡Äb™Ù(¼Bg5íbicùæ{Š\ƒ#äì´ElëbËÓëª]Á^ìÖÔù¾@QÁÒi<2êý·ÁŠÖذ*ëUá/ -g á1t¶m‘o¹—×ÛÑrœÛ4ívÎ)Z‘˜Ìðzý¿bÓÿ£©¿hô¶/ÚY³gVd:ûv³Û9³ïS5 £Ý]æxà«ïÈ#tM6¨Q©ˆã”-ꢭ¨ûö-/Ãû²¿ã^—÷ÜCo“UønÇCÝqã–Á¹ÔžQ ~-»žýjÂÒ„7_A¼•›Ý±ÞôeSÿ…o•YÉ·‚)ŒFŠt~‚Î!ï:ô^KŽBai¸B·Ÿ¿¾ ÁäÕÑM¢D£‰^j¹Sõþ(Â'õk£)‡5ì’ÆÔÙn½Ø¾™¬w`{¤a®æ 8¹)¯%J@ç9JX5oóÃû¦Ïû'šz˜*S†Ø#S¸52P@ïQ¤‰ˆü¢%R&5/=cƒ´rŒaÉ^*)¥#®…–á3Ï—#®ìÏŸþæ*“ãhøRftŸ±¹ë¯ü„êãöQŽŠ‚ؘËcÉÆˆT›3PƒONVÅ‘0jÄÑœ<üúÁ4ì¨óŒ‘ÅBFc||DH!†ëî¯s° äóÔKûW‰Œª#I¸Æ–oÓñÇ'­cî}Ǽý¯¸ƒFÂ)ô …>“`a[§ä×T(5Ø£ÏÝ` “4Ì{èYbJ¡óÂó¶'ÒÁ &8GæÂ‘ãáP´î¼¼sû7wy›oz?A¡L+šº# Ç55΀ÅÈ á ÆëEdÒ‹ÈTX=& àHR÷kL4Åâ`õ±Þ 0„Ûƒpø…y’óZvY^9‹ÃÂܹãE¹ß -0¦cãW8…Øû™ó>Œ8ï‹9ŽeQ€…².û2¯Îñ2çé$6J.ð4 âäé¶Øçeíð‰â.¯o‹íDêéä1OÙ¯à©!¥/ }!–ÒúFJÏÖ'ª0I*¢,=§ŠÛªY{Wp†kË|]sä¡Çä•}„ÆK„„3O.6P¥br/1žŒq)*qJšÐrÌÚp°Ê×%oü€\F³ãºg\êá»p‚9Jdø#‘ÆÕ÷Æ×÷…ÎÝ(š?}=áÂ1™™TÑ÷w%œ¦ÏÎÓzOJé]€“¤Ô‡Ü ÑãÓ3 Е \ vCŽgüÇãÚ1Zðöïf+ôDèxXÕÛ>ïÁ‰6áMÃw(*oQm૵#¡3ÅwúþžÇ&W$’ÁEè)®±#-lbGŒUîU±3c°AÑ(ÃÕ"ï¸(/\ì“%_së¿9h[)âDû+},6ï¡z¢l 8G|{¬“nˆÔïç,³TT|OòÛ Asd6ÄéÐÙø>¨–µ7­™1‘KǤŽ7ñԶλrÃ]ªÎ è6m¹&&%ô† wQyO›¬ÐÓÿŒààu O"¶€Ã2<6•|›/¢·1±u¨*©p5Üî9’@&³"µ“°k*(’Ѓ'ÖâDFö£‡ÉÈØ“=e=û3Z$Z=fJÒÓ/0ÈÉ£Òë%^`óYÈ@œÇÖº4d/ õÍ~zT8¿§bár’¾8'Í<4X‹§ÊbP‘*»°,¶¿Qk &4Ñee±ž-‹)³/*‹Ÿ«LcJ„—Ô+Z§ç•)ž;e™-Sj éœ›6GÀcÂÆI.Qþôèð?uUºÄ2çŸ$V·PÏ=ñbróé‡)ÈAô Gù}ÁtÛ9½iœ:¬hqh‹ŽÒË™1¸füì~˜‚±ùê¯ôÔážRš&ï‚94eíž*^OZ]Ï’¼§”Þ϶P²ô€ä˜léíÝÎÓ‘—ìÛ °t=ÒêžSq=¨uÚÛŸ*S8l4­Rõï ñGôp³É«¼]-B«3þ°Úu†'œ:¨Ê“d%ˆ––é%2ûûí7¨ÝŒÉþ›¨ÂÁïv³ ÞÍ'}'ègƒ&Êž3™$ À«Žªp}Š €˜’±ÿõø4Î}?6C04]#Åœï£û\âÌýØ'"IÆoÖ' –e´J~óOœCr¼$ÁzY"ȼ\ý;“ÿzÝâ"×»›¢ïþ4ÑôH5œèž.­2‘FúE¢KE”óÉÑõu¶YZ5Z:y©½¸‰>TÇîšþY0o)¸9%¡ßg)ðµVñ%–š´?®^ý€ìK endstream endobj 302 0 obj << /Length 1667 /Filter /FlateDecode >> stream xÚÝXKoÜ6¾ûW{Òç$“¢ ’¦¨Ñ.rI{Pvi[ˆVr%m(úß;CR¯µvãÄBô`S$g‡3Ãù>Iƒ›€/.žm.ž¿SE]¸?¥dPßÓ_!»Þ†’p"§)gU°u¤¥ÆÍ𱂕ÆÉŒá{´  ›úËõo°‘'g‰&RõJ¾ÞêtÎjØ.!‡6˜õZ¦áêª84¿”fåüù€Ùaê&¯J7¿Íp§f|Œ¸H‰è’O»ŠŽ"ª]½²3vÉY´3FU { N+Š˜·d„Ó/¢›ÇD‰´“5g®qPÅ/„*¶UâõÑ|ÓJq=Ø^ L9 ‹p§w”l½{tê-u¾FŒRŠá^KŠ›FC ûšÃÒ–L툇ÇZó°Ë²>2çxò\Ó±ûì„ÎN2 W8“ó#°vÛzj‡ÍP÷7cºçÍCް~ËFG O =Å8“ö¦½­vü7†NtzD*ÈOyQ$œ9  GÌ£¢ÃRˆ4WˆÎ=R:&°GÁ„êÔŸ·H'@'Q¦'_FHI5>CQg†b'ïÚ²55 °5;7ù‰ldˆýêÔÔÕš«ð£ë8žÛ¶UÝý¬ôz¶=¦{õ°^5Y`§îPª܆ÀÊ)#±Š§é±êöwåxaB³8P›}…cnÂÓŠ-M,±˜lgrË- f–S¨'1‰ZŽLÞÀêB¶$£ðGàç³æÿÅ(j™€ø„;Í%¥±ZˆK(wþs¦¥3•b_…¼,ÛQp æÁ™æL€8M¡øL— P?Pl)²}Šô@uÇ4Õ@Z5$wUéigWîxYùîˆr±R®ÃW[¯ ‚k¼uŒä,3Ά:b1ÑÇ5õ×D|–ø©&JÇC}õç!¯‘cæÝÄÁ4?Q¹(»ÍòÒuð`@¹ƒ€•àÞAb)šÊ‘t·àrÙnç‰×Œ¨[ƒ‡ßg?T¶ð«ð,ʺx9&~VUÅ¿YÔ–5æ,Køl†+‡ÒéR@z9{!€ÏX'(U8Œx)ŸXK@–`…À n,Æ ¹æ:‚†oóí­·å Èú[°£—׸Ϭæ’ùŸT~®­Æý¢½ÍýrׇrÛÚJÇ¡$:Ôåì•MÈØ>x£¯q…Ù§ 8Xåù+n$… ¤&<`Í›‹Ödw/»š§¹4纊ÓмŠ{ÀJ–\R¿\¡-ga%áZ.+ ¿ ø$xmæßÑ"€«˜$ÃÓÉ;<àf/ØÐø 6|yÀ¹Ó® =äp¨‡Oâr8ް™Õi/íЖ‡ý;S{©ÆÜeuf¯ØÅÇ5lA_ õ?dp¶5þ5.Æ—6„½V¸c[Tñ=P3³Y‰ ”ɳol)CÕ†Êçr+%²Gïß§´ôëä ê®p–H ¥Yqð“ùp5)'o9zú€ 'e…ë 1…&X^Ýqs^SÙ÷V5Ç 3Uø="H—#‚Ñ›Õ÷ÂGÏh'i!‘$Q Ýw(è.íße]úuñdaÏ YØB7ŸXÁäRõÈiâTú!/”éjKœ©CgÚ¿L&zJœ)¢mTÜZ´â`÷â‚þ±Ó“­ö¯š‘¤–5J'f2K°©gh7fFaî[0%ê™Sh5)ÆÇï/0hkqíXºŽn´'mÑS8L9ÖÌs ÃcŠƒIkÞXÚo´XVLÕ˜Þ"!=•ÂØð¸ŽnÒiÂß{úöûÇDßþ¸¹øGÀÐÓ endstream endobj 316 0 obj << /Length 520 /Filter /FlateDecode >> stream xÚTMÓ0½÷Wø˜Hd:þŽ€h%Äa…r[8doÑ:Ub­ÿ»N¢"Ä¡ÊxüæùÍW‘ ’ýæ]µÙî$ F#%Õ3aššhEÁPAª†nw‚Š`Ф.A•"ÞÀ´Œ  ŽO4Ȥd]NEŠV*™‚00)L¿þH–ÇÏû y,("fï;— Ì^rŠ™íýCÎ0K"ož}__OUnXÖíß>Üéù7ÿvgp™’‚…åI&¤üµYb’9¥”½DEÝ9/hj¢’/(1Q”üŽB(ªœ8Îíà×^b ¤˜_ dtîÇ¢ƒ<”RÑ /ÖŸºfÂ/[s×È‚(CÊД)þ“õ«Š5P­ÿüÇh(BM¨'›L°¬Žš‚nŽî9y߇’³·×ÞÖù8véÚúñ.&åOµOþvx žˆÙLLGb–µÎÛœÊìhû!ÝXw8wƒmÒýÓëZ¹yH’ѹÞ?×2,!lÌ„¨]³: %ðrnî¯5š°A\/ yÁQgÕɺˆkШÃÚP~‚ô`/1”êÐõM²Ûaòùï½³£÷Ð9_·.•2œý¸']:Œu –«/v5†2سBˆ#Þì°š ¡þ£&b. Øæ¸ÎÅ9”lþkûM¿ªÍo„*å endstream endobj 323 0 obj << /Length 226 /Filter /FlateDecode >> stream xÚUPMkÃ0 ½çWèhìÈŽ•] °Kñ-ôZ×Í–%%-„ýûeq(ø $=é=ž„à¡NpÏï6I? ‚6²( ö E.)#ÈM.3S‚½@ËŽîêf®JæÆ³{ð“m^ +]ƒBYaµÑeÒ^[7§hZAˆì°x7ö_\hBVw\[æ~˜¸^‹€vã%ŸýùÖ¹!4ÍôXz/¹Èrd÷iøýé¾¹Bævèö|ÞßÒ4šL›sŸÊàD"„ 20{ˆãæñ_JGÆ_hE2_ÿ"H²¢ýPUEÛ›üdÄU© endstream endobj 371 0 obj << /Length 1145 /Filter /FlateDecode >> stream xÚÍ™]sâ6†ïó+|™)Z}X–|I dh>̺ÎN'ã“u×ØÔˆmø÷•d…ÅDÆŽƒ;½ÈÁøåñ{ŽtÎÐyv su^/fgŸG.t° gÈ™-æJ¨ã1bÎlî|=§óèåÓŸ³_w7~1ßAøÐ×wA§G@ÐÜÐ_­¢t>N£¿7Ÿzè¿ZæÁb‰uµÑž¯k_GÉ`ÔëŒ>èSí4”ñ6NsÀ0koõ‘GP›Düä»Gѹb/€xWªzÅgÞ¤¨;Xé•QÄHÕ¶AôŽ Mƒ„ÕåšýùqƒVx` —Z†U‰áR¹xG6pW.o¿aÙØdÏéñ®Ö›Qäuœ$Aª.DëÓ7¨µÀ¶Õ|·Y>ÊîÅÆ‡8 wôWõ:¾`#VÙþ]…«»L„"V²´Cé; ­^­Ó§0 ó®²Ô;M–ÊM¤šûÀ£Õ-£^G¸×üûd±Ø£UéÔ¬F½ÌšG¡ˆ.—+¡YGqb%“/¥mÁê7u¥]Z-šJ÷ùzž?:’ ˜K»a{·xö–n”gË*e€»¤£©Îˆ—&Îaœë¤Û EÙ`(þP¿Ï¶ûÑ©ÌJÃe,&z¯®%üÐÔÔfhm’ÄPêò,Ië)?jÞ"Ôãtñ:ëÙ>3|ܺH“ã\F¼Þë4û'äÙª8óPGrüÓQnGþñ’w2×­ÕÄohuüíÄmÇNñáëá`Œ?E.@Øð^ê²£ùE”[ûHäw5¢ñž¤›AÁØwúA¡æŒÆˆ—§–àæÛþõåà P.ÝÞöw‰4sÉ 6ìë³ÁþÃp|o%£€ÒY!¾_†w`7l:{õÇ7÷—ýip×Á‘iqdTì/bûßÔÞ°†ì/ÙBïÖ$dËe˜Î«~[¢Ñ&'¿eïȆ¡w]Ãé½£-êït•Ä¢t4­‡¼âäwœŠì"Éžô•ŠÁ™IW3”Q/Eû·ô1N纘è¶ëgz6ü-êCİñïy,¢Ãê·=øEðFih-~P–TeCA<> stream xÚ½ZMo$7½÷¯Ðq÷¢¿$ Èœ,° ™9$1æ0™4ƒ ìÀöÙ¿ÕòÄv{e»S‡†ª»XÔI‘ªf³T %ÕÄV“·DÚ—_ØpÝ,±ÖÄÔWJBø½JRŒ%)áÚ’‰m¸öT×–ª—Ä­¤Æš¬§V_)91FNn’¼CkÓÔÚ0SÇìÜj¢"´á†éKÌß<€`TcfÈppÀ†LUànÒUÆô€@ Ù)‘w pÌ^´lØ!Gø™;ä¹ã JÆgYd‡°ÄR0ÎŽ  òH;æµ0T¯a,X ·°R{€„Še…÷½ÆK’Â>.ñ%p)ì 3±[’¸/·b.)¸¥^7RpË$¯¸€ÍË—ŠÇ¥àsIéIb.!È-sa!Òz¨ÇmÂoâ¸ÝšÉ’–˜‹ܪ˜J•<„{R“âŽæ¤K‡ïñ¨ÀzZ!­0lxC›È¦Ç× #¸.B/GÀXÛð.z²°Dk°©àcã æ·ÞÃ2’*±oD4Õ%%ÜËÌo2-ÕŠ¸ íµAPv@E8 ¥Ô(L­œZ,V°ú¦V6°yj~Z£0~MÍ ñiw ŽÃÂØ&Îa8XÚao\ Ä-ü‚i€½‡Ë°£m^½Úl¿Iç -%ý¶?þô3vEƶ‰µç‡_|üí··›/¾8&‹-—S¢Òs¥:%KÕ³a»Mɪg²pÏ./nÒ«Wi{+cc-awì³ÿ{—‡º3X1×P°ýþêòýëÝM:OÛï¿9KÛ7»?nÒ'Ýoþûû7Þý{·Ù~yv7×0ÄòøfûÃîúòãÕûÝõ’Ž–Ÿþµûõû¯.ÿHçñƒu˺®”½¿Ålï® Öñ;«­tgµ¶¬¶5ÍÞ[,ßé`I÷ÖúìõùáúêK×צÖw ºw|“– rÍŒ¬YÍUôô²ÂXìœ(1¶Ê\…5ºËœ,öU§I½E²Ûœ^õfJV4w¤±YrɆâ2%[9“OííGÂ}{æQšýsŠ ö%»Âw…?kWl¿¼¸¸„Æó…9¤ ËèeŒ4Æý2 [žßl_üåfùþÏÿÙl¿º¼úuwµ (o·ßmÿ±ýúœ–/ù= µ¡‰RÔsîb9Šj㜠±/[¿NÛo/ß\&xêo׹Ƴ./²fÊò÷0ßIÀHoÙ—Ùeš)à ­´Œš8FOFEKkITŨÃàA™ø4Ÿ ð äD‘ à·¬"¾A 2*åÊfáRòžÂzöÉšKpÓøyÆGØÑwÁÄÎ÷ù:à‡I¢Fd›“%˜Ž¦D-rÉœ,!§uŸ’U2ä´¹¥r›Çd‘¯±ædŰÙçô"å.sæE 2§D©IÖ6)k󧲞;ùý!Ý{ŒÞ)Ï, Rˆ`´6/+ .#õÒàvÊÐz&xâ6éRažÏº|Êô‚®/+º«[4èŽrô˜O@ã'Lv½ JÑáJvãL€­]2úØ'£A€G?=™í VÁzYædÕÐÉõ)YÕ*mN¯iɵÏáUt“½ÎéÕ‚Š;i4ÔÙ ÍÉ"¦ˆuJ-f.âs²l¹>,'A^zn*¢zŠH_Ö³ÅéÌlôÞ=Þ³}V–¢yrÖŸkø_Îý…åÀºLO±®p}èã넉]ÁÍ*,kÞAO@d±Å±kAJUúlòú‹¼Ï]Ã;ÌÓN¿'úœ~W–‚úƒGVQŸR\KE­hOkŸëîFî®ý¥îÞ‡£ ʧŽË(eŒ4F£ŒQÇhc¬cúdè“¡O‡>útè{CÆNˆSÆý8ôã¶ðÇ~úl賡φ>úl賡φ>úl賡¯}ãÀKêÐW‡¾ÑËh‰¥}ãÈ@ö‡S'k‰#­£W°¼‚—L%ŸAL ?¾kú i‡¡pÃèµÄ™Ñò†#S"ZÎoÖÁPÐ# ÿ±èóâuçÁ*èó¤è:*¸®µ8^â8„ÌÇï^s3[y,[“¡Qðoò8n#ð%ô½Ç¡Ú@ðç‰VŒ‘ÀKk¬ LÚ㨜Ъ Â˜¤G|yÁ”ã%ƒ!»S÷•@'@Ù1BnEÖc°Kx Ðxj?â„î`F3¯™º/`XP ‘Ü)Ž@8a_BÈMHîðH°DÏšã•¡º 0h%3 ú;AØ ‘£ qÒÚ³¯ƒáÖ`6nõO;(g¡•0hGÇï,1w"䬎Ç<|,GQ=!„jK‚”{‘5$JõýùQ[£@Z¼öE'ÙâU4ºD¦ÈÞµøJA¹¯Ý`*yù›€£†Ç›Yx¥ØJ¨wdƺœ²E›•3þ<:…ÝÚWòÆ0s&õ? !‚vüû "ÚúøÂm@0F¢•쀤 ÚÈ åô•9Þ>¦š½òZcoˆå]Ë'3p—,´„åØ((TË´[_jXŒ­ÊJi*ŒÏ¦A¥‘¦8÷øCJEU§#éú”©2NîdŒXÀ¥âÏl±_l ,>Ø (T‰¿ñ«‰ÿõàw¦U8å-‰áx¹¤¶0©xË KŽD;=› ޽PJ߀cÃGýXñ Ãÿ¹ëúA endstream endobj 386 0 obj << /Length1 1405 /Length2 5941 /Length3 0 /Length 6897 /Filter /FlateDecode >> stream xÚwT“ë²6Ò‹Hé6„&½÷ÞA©IJ’HAzSzoÒUzPª€(ET¤J‘¢¢ôÎ ê>çìóÿkÝ»²VòÎÌ3íg¾õ…‡ÓØLXÅ i"XaP f` €@q PŒœ‡ÇŽõ€ý­'籄¡1p$Bö?jh‹Ó©ƒ±8 нë‰@R² [²@ @ ”ùˆDËÔÁÞp'€@‰€aÈyÔ(?4ÜÅ‹Ëó÷Àå€ddn ýr¨xÂÐp(0c]až¸ŒP°À …ð~ÿÁ'ïŠÅ¢dEE}||DÀž$ÚE‘_àǺLaÚæ¸l`ö„ýiM„œ`î Çü6˜!±>`4 €SxÀ¡0çráCpÙf:ú# ñ¬ÿ øs9è_áþx_‚#~9ƒ¡P¤' Œðƒ#\ÎpÀHS_ë‹€N—@°‰ó{ƒá`ð«t0@SÅÆuø§?  Ga1"¸Çe¢—ap׬pRCzzÂX ùe}êp4 Š»w?Ñ?ÃuG }KÎp„“óeNwQ¢¸×]˜Žú NEþo Jß—–À¼0_¨«èes?ì—t©Æõ€B¢Î¸6`Apgî‡<ö†°è»° €ÿ4üS"Np(¹ÀäÿŽŽSÜ˸ù£á¾ Ž~ ðò󯓎aNH„‡ß¿á¿F,jbb©¦vGðOËÿ2ªª"}Ââba1I ”Ü‚þÇ ÿSÇøê œ‘€Ë`—õâ.êïš½ÿ€ïφðþ̉£. À÷o¦Û%PÜèÿÌ÷_.ÿ?š_Fù_™þßiÞõðøeçû øì`O¸‡ßŽºw±¸50@â–ñßP+ØïÝ5€9Áïzþ·U Æ­ƒ ÂGia„Pâ·ŽÑ„ûœŒáX¨ëoÚüÖ[\.œ3Fbà—œø_6Ü–AÝq Ž›¿M` nå°¿y)ÃpKõÏ:4P¤Óåö‰IJÀh4Ø7|œ$ áÖÔ æû‹ÝQ‹sàz8#Ñä—ƒ–ˆâ8¾ìã÷qfò¤€ÞE£q5üâ.ÿßò¯m‡Á|aPòSH¨\¸[}xÇa­ ‹ðʨ<ÑV桵˜ðh‰=)¶OcÜa1Ù,/wZï‰æÇ^¦½[—¡ª×aþÜû€åŽF?‰}aÍ5HâÔÅþ•É”€V®)ªV¼GVéªì²åè>3ªÀ¿ê{>¤øðÒWhÞÒè0ìì®­ÈÕg`•±üúÙÛ4_‘Üeü«à³çð¥xÛ˜ Ãl.=ùÎ#òdŸê…¡Áš^¶q¡ºÞ÷W~pGbi4äYÕ%Hj,gŠ®”{ofÓ@´è”7úžÎó§Ön».ooÚqò¥vßruLuŽ}õ?b£AÍЫf¢ ‹Wc>åGq´ (¦`,{²àÚ/çª>³¹ëFEèùMOöŒ-œÞÕËбyÓÎ'd¬p^¹ü5¨‰çy‚·s$~û_µé4Ë‚ ¹üAÎaEýÜy3û|“Vb6Ò™®æŠe32áí!Ö4ââ”ÞðÌj‹k¢M_HJoïøKœítvªòN{ÕÄ!hãýf³KoD_5B³êâÕü}<÷k|íô<‘¥AUþž’ßÞÓ<ˆGÊ8òotņ'0Š´ÇpU}ZêÞc¯ÄOt«0,|z¼ÊðºÙ'Nî]¼é¶‰Ÿ 0$G5ú=1¾.g9Þå"5PÔG¯øQèâ§b{†Qˆ®„§ päÌT¼yªM€~0 S°ˆ¡}™V†f1~wåA겑2•k0Ý'¾”÷éMÃÖ“Æw¨,ì¶ÄñOÔ±L~»ÚQ¡J*"óøKîæ®¸ óN®Â5›NŽ ÈÒáúUVË’ùãþûÃ$ÍÛV\ߘð—›ór^.€·×‘w41FIüá©%<[NbÛm>ñ†Ïª&´÷Ôƒö~~ÊKê»v­ã[cÈíNu˜KÅ5â.¤³-W÷ 8бÓ5¡rÿ…Ïí°-¨ /Ð-õG½5Þ-¿CrºLW&³–ˆ"^¢{A´¨sáñ ç){ødʼÅCÂßr}g aº³ÐÅæS®iÀ÷LOJ³‚‹´ÈŒð?ÈÊQ4{0óð¡{¡}<$9û‡ÿp)˜b8BÂA•xiƒŽˆvæ¤ô´%86M3q…ê«US½Ø ™«~’û4† ÓWqÈù½vñ ‡¹Æþ ·lÓÁØ`QÁŠåe† @v&õ¬‡ô²¿õL2ª~· 'O›Óò`&Ô©™³9DÎI¢¨Ø¼”꣤¬ÐÒ±7ýM¨ÞC™)9Aÿ7×I¬ãkhý)Ý7JL&æ}úÁ^ý©P‚ÎqÛ¨5o„ìí»ƒ$…è ç¶fùnz§&¸Ý[=öçxv=¹í¨³d–„{à Wn¸ƒõ‡ï1Ïeš¿1¼ ¥c¦GÆÒáLùù[aU@Œþø&otw7ùužÌÒPÙÂñÁ÷¦yE¥PºéåFóƒÈï¦>Ù‹²äQì9°¶-rÑm²˜ö56ÖŒ ~'ßZ¯…FaW§­‹ÂÚ¹n…l{a܃ºiWÇRùk#¥ ÍL'¬ÓünÐÊçbÅÜÒŒì;ÃÚ©yº¯>´ÈkXPœL-¬¬y¬æ‰œ_ŽòT=B}ºáô%À•AB1–6–ÄÞG½ì‡2Ìd×éZ/Áît{Ì~A¹«I‰u..ÇZªÚצÂ;9aØÝ»J0ÆU¥]_u 'ßU<}ujŽS(`¥k}5|ìWòñ&ŠŽ˜;Ëb”\R’'i"vG\–1¯…ePþ¶ÖXèðj©ÃTK Åç€6à:ŒÁF8…„„Í>1ÜŒ³ƒÂÁ‹û; [l¯ÑYϼý>Õ¸Ú ¼ÐÖûXh»ûávŒ]³Áf±¸@So¬·dÈ“R™²µ\RàŽFšk°ÛëÙA‰RÅ‚ô€ß,kFŸÅ“|-—êŽn»«&G÷Ÿ{|WôIž³Þÿ¬};¡¶ŸÐ×›ö9]PȲ¦0wW„ž“¯Éß]ÝÄ‚•k¸¶îVÒÚ›çN±lÈ´/Q5A,q”µ;ß0sá¦"ãè2eò¤®žŒ¯ì‹Üph­ ¥G¸ ²öZYî°G O¶Î«iÃG^tq”xT¦4ʘ€Æ‹ý–ÙÑî°[AB3îlDj5÷©¢ âîpö )Á]4¹š·Frïê«ñŠ£¦wÈBë„çõo[Þyù*ao3¼;âÆ ¨1é^RÏiÝ×­ŸØÙ|øh É"£v?g `åql®Í:ˆ?÷Ëé…Yô÷_œb"Tgrc‘â£v€»¬åUÿ¶ÐYÃjÞ4æT­w å¦HQ|¹1+o4ýS¹Ë:C,>ˆêáx¼w–òõZ(d#ó#¯÷ ª»¯­-Ú Àsü ’æžRsz»Îéû¶Ù­ú{†oq½ÙóL[¿&~Ä ¥ö|˵ûºÍLìGÄ‚ƒ,îàˆBÿ™ç̺ÚŒ÷Î:³6ÎL ø´ âü<?WS§x=©n6â#ê²¾ÃÏÄž¿©ÛC®ÍÏŠ6ÙOlb3‘Ü/¾gÎÑU•t§ýÊx `âSdt~‹Aò4ú&‹lÚ{¡" }c¥¤¦¡†jÕ«fûïà[ï(§Ó®Ñô¿9ˆ^¹ºòS\à½ÛM«ž<õ éµ8îí‰Àí|ÎÍØù¡‘ØÖsæõiý9‡{äN&éº:ÜÍíé=·ù>02xšz­ÑëÚ0&;OQÈ¥?•jø|Ãt\<ì x¶ù˜ÕLˆH ôP)Œ”bgJe²oÞσïþ’þ•¶7Øg…[‰´ß¿®‘u3=õT`8I4§—Iü¤Ñ†_jeä"<>õ"žªV{µÊx ¬MÌÎEjë_rö’Zt|‚=\ÃÍ’( ³ 3¯K³Ô?—ô³Ò ôßYÊø8ÝŒ%)qSuZ°T¨öÿ(>Ým>¥ܱjSßÙtþNÜñÌ»ð…@‡Y\5°´z’³/ò…î¶0v-+s½¶ª^Ì?ïÝϤðR¼(ry3),¨É£wÖñ${5¯ Og“aŒÍ?ïNÖΤŒZãš–²Ô*ùõµÚ¢rÜ}dŸ$õ€¯¾úë.•ÌØæ{g}†eloMIúqßrû}WÅÔùÒï ë§§r?Ágž¼{¡ìùØ‘öùX=GZKÀ¾£aóX˜ ò¬åëÞµµ°ŠPÿçé+ÑÕDT ãÜ¥ªO(ôñEc¿È¶ª2ì¦æÞó†h±ä‚îJí0Ž¡äÉ»iÙí)|u óå|ë?TëÏ„iÜ;žµå÷§»—.îž<Óc¯öŒ›Užs(Qùkõ}÷ö‰nZR!nS™ç¤º AUBw*xøGõ b뙕3iOÿ{_r : 帖³‚‰Ç’+:Qóû×[™Ô´Ê®…¤¾-¨}Ð;(Ð#ù.EÝ­209àè¸Üé&+JïNÃËs‹2c)Û;ͪ«‹)ÓIòC+ÆñÜ(·ªîþuŸl„ ¼b^]¢ûd2¿åtðÜ¢´oøfív{ž[DP¹íK¬¶ÚÉÖÐ{–(¹úâ àÙYÖ»t5‹ RþQ KçÆ›³À—"ÐÚ(Càƒâh¾r†é{j¤™‚ß_³¶²~¼ÓzŽâðþ¤—S5rk*rrǸ(ltP¥ƒšï£Á2Ó{*2júý™DûЪ±wFiu³oÞú)°îVØûKjć2ùsŸß†~›»›Å¢>WùïZŽÆPDIÎo¦Å~žVŽàLo^V'›¸)-wõÞ£íÆ‹ ![ýF­‚‹Ú¢¤ÆÐY¥£µÍ÷þ$r v)è`Üß>픚Qì)EÏΚ”Úã[Z.Ú2^±ÈR©*Èpï‘üØdäÎh‘JÚ;tESíq†‘qÀ*åÖ†¯…Œ[õ‰T8h52GÉðJæ”AËÍ¥ ¾ðÚXË'^W“FZkž¦VQO¡¾¸”^ññ³›Ÿ²ÍÁˆyy~?WÊùPª×|¼/°·gÞ&qŸ:²»àåÃrâ­IêâN÷Í…^§ß:® aåÑ¥vÉvh€yrweûwû'ßrÄf™ªoR–FfoôÙÕf¿K†Þ=ók³0 u_ HĽ‘4 Ű<}ÚØam•f^ŒÏOCiÈvú åå1h@i)R z*{töÖcÊu¼Jµæ7õÝšK^O$èõ%“™v­¸IÚ®®Í´Qð8ˆm ~ÑÆ [zu)²u+´TÖ‹¡ÐÕOo¶ñ\SNþöEÁÛˆÓàžÀí§-ód“4t»æ¢è®³2Žš-•^ÈFÇ@qãɲG%‡ÿ.0Œù’¢n¬f(¡gÛ<»½ª¤qó§)bü kcÑýælÁn²²Yáq .ÿÅ®¶-! 1}P긷…’º<Èpú–]IÎYÉ÷´g?’+?Ï­k½ y‘B„×’mν¦c°¿è‡—-Í !jÀXÛÒu³@ÁQйŸŸ( KI7*í>Ä/Z#–‡¥å´]!_*`Œd—S Ì!Ôútïž¿4õ-34Š7²ž;Æ}oùµòiSYfØ $úeú ú›Cõ°À“Ì]HÍgö,Š«Xý(é±:`ÆPtà›‰N#vþy¯·+ÔšiX²t£übßúÒö>¢¸iÊe«} )Ôg‚5ãF2+‘*A#Œl)ýì©„|â_<µ zö°{þ‘”i”›êô’´R„Rø—u¢g xI¬6výÔS?v‘xZ•9ÜL†Ä/Ò}øit¨ªzà`p ¸ó\XD7ÏÅ%>¨¢Ì»ê§üüÃç‰û¢ÄÄøÝéHÑý‡Ø1f _Š´=Á[Í[ÚoMäwAÞ£¶0ó+ ŸÜßIf8YcŽÓµÔ…9¹[¡n­xù™ŽË°/úR(ì çzGžj½¡ª½ÝöÝš5¹[óF˜ŽÿÓÓrjž¯R?;}ÉÊ%îñ•sô¨‚hU/HÓ_c¼¢Ì+;]ïK¡§7¶õSxe­nÇövd%–\ž”4é;)ÆÇDáë‘äP*Ÿˆ¿³ýnf(+ý¨˜á/Âõ²yR ¥9þåISÏØÉ42¾%$sM1VŠr©w ˜?“Ì(™üéãkÉ×¢\ËîY|0&nQÆ9ݧZ­ )ì{/òY{È›®¨1óužÞí•+¦…|Š¥£Çdã_Å$£];Ö¶ÚuD$ï¾p41.>˜ºÏïøóq†‰É@ó:ß)ÉDŠ$cZƒ}yØ\ø}zƒùd4©¤–€£ÒkSMƒ Ê…žów#.K6PÝÎÓóø‚s¼NÉ~•SeI[Ò7½ÞMZ}r¿V/²FÕîfî忘¢‡¤Ö9­6ÈG5®7÷ë´mI 蘿àŽJ8õËùõ=åŠv: Þ¶za uÍ·côàý4ÿH³gV¶í%µQÉ:÷ÍÁXRNuÙ ¼8¼~|z0ãRŽoÊÙà—ƒ~ƱëK'ZcÙ¨)à–˜Ý-_¾¯í(ŠjcéVBoI¶|Ì0D~ïAƒ¾I$pKà°Yï[Ú{ÁeE˜ˆð4òÉÄõs5¦j&*ÂôGý!CÔ[ýc¶ÁL¦‚×¹½{éê¥YÓ.‘ó¤ç~¡G…k`Žè«_Ô è5­‘ýjÿÂj×ð‡6¡¼e}¼QÝ«“§^"ÕqC‡l]³oK£nôŽ–nx¤ZúŠï™ç=¹ºÏ£ñg&†˜ùO4Ê#eß™=G‡ß€û‹¼;‰»®Æ ®Êá} oz?^åMb°É3-l¿”/œ)XÐF+‚TfÎÖP3¬Í:ú†åW)Hß&¹ÛÜT;®Œ/1Üc©ì­Ø ^,¢ ”ó륽ô<¶Äß™¤rø€˜©*Q>ÏË´Òš§CÎ~°þ THåg.³ýŠÉ“o«áº’ò¥œ`¼°eU>Ó»%w#Ô†ØX‘o$Nˆ³¼9¤+Ì’åYƒ°ª]µâp¿l½x“xsB”™×Ý׉ÇëvmÒkSjS–5.ú]7æú8[Æ‘vå2âTZxcHiÓØ2½¡áàxPÙ% =MþÆ×RV…î!‰Ðÿ6~Uåó¹¥Í&zıšC|y\¶y`Óñë,[%öñÅÿ9-h“ endstream endobj 388 0 obj << /Length1 737 /Length2 22192 /Length3 0 /Length 22748 /Filter /FlateDecode >> stream xÚl¹sp¯Í²6®Øö/¶mÛ¶mÛX±³bÛ¶mÛ¶ídå{öÞï9§vÕW÷?͙Ꞟ!%³·sQñt0e¤e¤cà(‹)«02p²蘡II…L ],ííD ]L¹ê¦&eS#€‰š lïàédiná 0¦ü· fchbikéP³·±w³4¶ð¸¹¹ ¸9»Ò9¹òÑýã¤lj p±0˜YÚ˜„å4%åÄârªqS;S'C€‚«‘¥1@ÆÒØÔÎÙ”`fï°ù0¶·3±üWLÎtÿÀÎÍÔÉåŸÀÌœìm²¢*‚bòr*Qaza€¡ @Fâw;g®¬M]þ• Àå)Ãÿ¥Œþ—ú_­“Ç(:hFF€‰¥± ÀÈÔÜÒšþ_¸IÚ™ÙØþ#6quøÕ?9ÿ€â )&¦fÿX»ÚØÈÚš(„ím\]L²ö&¦Nv€aïîdù/‰²¡Ý?™ü‹¡­¥çÿ¯Óÿ³t1üA;ó`¤å¤caûØÒYÌÒÃÔDÁÒåì]œ\Mÿ#V7ýOdMM,]mÿ³„é?øüSa{;Ïÿ·ë?iý{OzuA9Aêÿmˆ«EíŒíM,íÌÊ.ÿ`kèdò¿‚« -ÿÓM†ÿ[îß<ãÿñ²†.N–mºµ ÿ¾ÿ¡tÿÏJHÈÞÛ–‘• @ËÌÆ`dfcp03øþW¸Æ®NN¦v.ÿ.À?¹üÿïÆ25õ05†^_±7æ±Jm -÷-œ«§2o—kì[ì† ^K¶)iÖ±¯öÊHŽ´#ÚCØ–5I\æÚ‡Ÿvë3W7È=‹÷ýù»ªGón\"ãï$'ÂN}xÞy—‘u\Îñç…5šD~Z¬_âþÒ`‡ýd"Ûj›äuµ³È{HpÀÿg÷ýÓÛ£l-š\Kù@ĉb<ùOÌ5)z ˜\õµÑPJ±u¿Hð"D¸ˆyõùoS-qäí_×@ཹ½T#F N?ÍÝÓ`¢”œµöª‰Ñ(tázsP;8úu ìðÍhVQ9bö@¯wÅT]Ÿ_‡Š2Û‡øØËdfÕdë›Ö¹WUX>¹§"ž}#¿ƒ]ïòW«¹y2mw;FàB̃+R'CßÀpžù}d1ÛI¿ ä ˆ‘Ñ.w嫿Y1÷ãqÉM–tJaó E0wN­b‚¥pµúrïèåÞµÔùö´Ó‚°N*"²r"ïªki@Sˆ7à‰¦ÀÚËg‚gNÝ?X.±$ [—šy$瘟njc6]wt°3óu¶é¿ÿˆ>Áú¡œg^¤Œ´ïä@ýfjz Ò~ùœ$ÝB!ÑîQpÛH;ÆjyÚëWNE´äŸv£±BDŠ¡Ò¶\çŠ0¨ôo—Cåvˆ `,Å“]à÷‰I÷B+‘c)9¨t²¨­`¦CØÆ[c[ÄqõùqÇÎÄküpðPbºO¨›u;ñ¢tü|Þ}ªäQã|ûÙt§PøŠé ùÊ]Ûî&™ü<ÝÁߺý€/ Ë,sÒTáRhÙ©‚äpflyešiaø†þåd²&:*¥µ TÄî]⊒[Öh‚«€¡±e݃m•™ÈVÑ(×Üzþ&K—·ÛÙSk·úã9B_hß«b’mB#Üÿ¬³YšNµçýP3_+Êú{}:ÛkÜ5îÐÙ6áWàŒ'v±bñù±·°¤¢æ×ŸÌ ~C7†uŠ%p# `†Õ(m ¶A{M$'Uñ³ÂÆÏ_ûC5®1c«©" ÏKTÉÒÏá÷lK ¤Ø¨òb›¿ìo(^|>/éŽj½ª}ˤ§§à…dêšÞHWŸˆr¬³`t&¥èTœk˜A¥ j ÚK6Îò­Çv©ÔÌlnc©@Ç_ÌeË„~†©«žúUüä3ZœÇ|0ÔÔXk®OC+8rn³•S×­ó4Éí2³äôÏÄÁM–  zWû¨K^lìh$ê—5Ãi¡ˆƒ\Ä:â[öИT›åÓ±~Æ>¼R°XðS@îGQxy¬mÏ*GjÚ»~GT~EwãÏήå| •%(ù|MfÝþ?Û›¯NýÚàä°Q‰cÐfŸHg¡x;î·¡Œ ‹óÌ=›-ÀP5Ò“È)+¢Ö"ö¸ªã½³«nâ¦{ð %¤T ÷ø¼þROvzÍ>)Zj×Ãõ Ïxi])Ó×kGÜŽ?;‹eü(2}HšÌDï1.Xÿíe©¡FÐS°À¾PÁšùî45 AüqÅäÄ{½tà™µzÐAÃ'G Üpo‘”Îd‹„û(zº ?1ÜTó³,iºq ²Pö}#8Ýê-þ\f3ZÁ™÷7šrÁ“j »°«èBFm€,øð«œ Í‘´pN@‰ª6ÚÄ€|q3ÅZèïƒw¹œf$ý{ᎃ`ÁœS݂ËBÇb.ôË@à°Ìf*bf¡ð]Èv¥…—4#!úBjmeš%䟟ƒ'ÿ:¡s±\Rñ¶D)–H_uZ I“æä-^®@ ðÄñœKoC´ ò¸¥À9sæ^÷î=E³NvƒbÚx¬@_*ðð¦ Bîx*°°S€÷Š„#¢ Ù†BOs†¸ïê:ºµíº{`¥Ã7Ÿh°ë…¹+ÛŠy1òS[ä ‹–ou‰ï ªš;g ÈU”£uÅQFg­˜%9¯µC¡%½•²/§‹Á€ðÆÍª² Gpøã´O“Íö:•WÝ)«<ÜF숴tÏ<¶¹¤Ó\èmŦ`Žiµ9.‚¹nüÚÀ ¼wáWp.MÊ`Ov‰Gükƒù b …d°»Tãc­•½Ž÷ºÏ.Ðý¶@YÏGðO¼Jé.¦ëS;íÇuňÓ]àA ¦¬\=ð`CŸo=¿ÏÇf•A—ìØ®,ªZ;Êd €ºKMVn®³lâ\È›ÕîúµVXÎçÑÇèËŒå‹hŒµS—IÅ<˜Î Ûæ”kAƒç ›Ÿ|£Úw GùÑ,¯ŒÆgö—Å}×¥R‚ÚÂØâêíîKS#òz½+ÃLž%O…A¤xØŽöU-λÔÎÆ¬ô~U/«C™4ôÂÌLþhÈ-,]“J•“ÂÀ¸áS­ ¸mµ¦áfã¥!Ð~ëG˜£Yå=àš‚ÞþD•É È_–ðùyºŸ…/Í;˜æÆžúN4†‚“O}Àz;%v¦­jx"ÿFÈõ x˺íG4Í6¥µ*ÆV5†î)Ì+–¡Ÿ{i©#¯ZP§›ÒU:jºñîgZnœ¤Am½òÍç*wŸm,á]èEÜÇg€Û‚ÉÐÎ.“éE™n2tu19þ¬eí*,¬#^É}¶ŒXûæÀBÎ õw…9ÓþÝ>?T÷}p¾¡üƒ[½lE“üâx… -&מP¹i“Ô:lýæàa-µzc/üªÙÇx«HwÚâ5^þÐnj~kö7@ £)ƒÃqâjÄömKåÊëX•ôhVäÓ¦MæA™°K1.ч}dÓ{%|Í aÄÇ8Þ$®<+hK›O¬bR­‡¯ùNéŽÁÆ`çCä}—úùÚÐ@©Â÷‹¼œÙß›3t ;ªÎ@š|Ä)é4RšÜ”ZËC'RWJ°¡+P¹T¬gÞþó‰„?æ86 uLjK_þ= ñ3Š$ø\„ð\í\ÙÄq¡×ózX‘Ú•(Ö©ÞàôfÏKý£(J¸>|ÙuxTQF#>ZŸïýð—t¾Á ´¥ãîxg‡Ù9b|ò&ôn˜Á$èphiVC81>2-õ¬6@@O„GŽeÜÔn˜ $ÍÈ‹rØL¼mâÜcc¿g8ùÝ¢û:h4Ksã‘忎|nš-ãî`»ö±ÝñpÒ"iÈwÝ Ci“63c$¿7r§îYT®d âˆÃæwh= ŽÊÊ“õìp)`Ô¢à­QxQ‚ÙÕˆS|¶Ý›$Dôã­"wv×/”#Wðc·?U…fpÏ,Û”Fƒ0%ž:¿V4GUåróžÏJÖÜvqëˆõ³0ÔÇ*¹òC%žãUûHuÎÓ,KéÜŽœ}šóJ…NÐÎÌ¢IS·ï“p™Ø¼Ï2çÁµ!sSyK3%+9pi,f,”âK…®;O7 ¼| ïºE`_(Ó—ç*:@dõü5™âU0.Î`p¸›´³ Õr2¼— Nó „nNÌ×÷J8g~«ö! DAÔ…·Æ°êMÓ.ŽL[ªÃsê¨~|€º}êbÖç + ¥Ðâk“EA,.l·ò„@Ј¯7YÝü§®,ªyPZ Êß næüÏ©í'—®Ô—Öv¢ÂÂz±@Ã`DÜÉ1FŒÈ€Ó:¸;RóÁ*mÃV?^XtB•@2DŸØ!¸Ä²[ÝC)(k ûÔXü5¦2–ØóaLàŒ™-¡wwOŽ ºãJˆ².™„z¦ q ×oÝùE´aCéRŒ|¦ì‹F€þ,ó jܵ–}çØAñËЋÑ:±Ë2¦ä’Š s†ô!üUïà†X$¿”2JîLؽ8ç0ª(.nÀ¨w)% RHÿ,˧{°Rj •øWw Ö!^3À !ÐdO¿ø=m2§4ùä².|CbZÆ…ÎÓI¢Šm $ÏšKEIMò\õãdÆõ¬Hoãf¨ÚÆÕvÅZdëÇyˆÑ­al®m%@ 6ý‡«9ó”¯2{´-Ýü¤ÕI÷RV$N§‹dŠÉÃc é&8Hk*׈¼KмUB#1~ZÈM ‘Få ¶»`¯5xZý#Þµ)„ˆVqÇ©÷ÚûDÆ$¤úˆBò”9Jè§p&kûKm#ãZ~™§nÜB±õ+±Qƒ˜€zE râTúô5< y©!ª¶8ꀈíx¬­|»÷]kÌÓù)x°mâN”ƒù×Ì ©/Ù'ÐænŠ4Â!y…àX‡`‹;Þ.î¾zºÒ|n`²~ÌH Ðle¶ëÐËJ)SŸ;&áív•Šþ̧^w‰e. ;{Õ¸íó8‹Å¹<ö×xêâÑŸJÄ|òûZ“Ì?zù­Ÿû5¸Œ =Àe¨K .}©ŠÝªÕ×äo?”½kÙ$³§^I¤Wª+y0íOÖ©²ìrº§ð®½M•óufíÁ–!\œKß+ÕAúÔ.f Ê ¾²ÆÖ4óí:GÑeÑÊÈæ†á•Ö JFS+žN¡$’ö]Q‚Â0ÝêmOºôÙ¥œ‰[ãº©ØÆx/ôëäôpê:8jÆ­•Dí2’X"¦±í•zþÆ5.e¸„ø÷âŒdâ)ìVj¨ÁÂV´…'¯Szí=3=e$…ñœ{<­­&buAm2Yê±\:qXÒ5VÎdVã#“fš±²³ »Éõ™éÄênœáñÒl‚êK%Siü÷­šÝˆ.†ofÜ¡¤ûi{îÕ³³?Æó2óÍ \N# ’„£H wäÖ„BºØûnLOMž{>½Á©àÊèׇÕÍÈØ³ë´ÑÀWÛ=,¯óõ=É«ŸžÙµôÅÐ(ñ¯¸jBn0AÅ•«º›E\¸–ëæš«K„4p”@êLZ[(ß ß‰¨g£œž¸¢CÞ‡\MÏ̓.Ù¯ùïEˆ…ˆ<ˆŒ]h«V"VDô–D_+‰²Sâ#“su2¶®Ôƒ¦ù6ú¹ Ìz3TLÅ©_J6@\ãÄt—Þ0Á»V¨o>ŸÛTÁo+`é£_0ÚØ«·?Øâ—Tê$uQÞÌx¬3‰e*‘ñÛÊÁ?:oK¿?*ðÞ•·%›Õe“˜ÉÖÇ»ãÇ8‡+ˆà?Ã)÷© ;Bºg Þ%ßÐK]ïP‹¡ë(eæQœà­¶%ÐÜ~Õ˜áâû;¢0•˜fA¦(IUàýºß }eµÌº2çªAÕ›9š„\¨¾~W<œƒ,aôç%ú÷½;¾{Ã":·ÉSC--OöòbûåF½-Á):ç²Fê᤭.õÖå%šçXoSèÕ®„4.ûÚÃ,w6kì1{;ľ:XáÛÑäLÀýÓßFsp`ªó‚ f‰òÝ¥óB[Ç©¾Aðcó=bôꡲôQ¼{azÕÞè4´¦—ºAÎî{w‰$ì¹é¿Y,ãpŒp<¬ˆx \Ý#$+õÑš@¸«.*rêfEÙfÓò/©þ^‰®ôÍ:»—ÓûS{”öW´L¨ «´®ßcŠ ¢à^ êIÎ\& ó¼în`Þ!š°T)м7ùM‰óÊžfÓäzŸÕ}í™* ìE-X¾#gçv8“Õc¿.vÚ ºÉ(øgóÙÄ<+yÉÌi׺’à.KÞ¼ÇiF _ƒS¶êžçUÀ§æ‰`;9 Ò:øæ+’G|˜c§×Ä>1¦{§Æ”bá….ýÎʉuj™}&¶:´{ñýŒÔ‡`K Šòe?³²rJX1tÏ5ÎÈŒ¤Óò³ÛŸ‘ÃÓü>‘.“×÷xÖ)Z{?ÇmI€ABIXé8KžáT2 »#¤Uû%Ť*Z~È­Ž¶bŠêçO„Çv®)V,*&Ǥ€@¹(:Pü$ Íâ{­5pú« ZKŒ±N(I§ŒuR³ú]µT# ‚A&«TÒQBËm¡çÏR’ )Rsœ‡ÈôŠÖi8é‘*¡ÛqĈ Á‘üyó­l‘¡‘q½ƒP©WKĮ审:CGîÊv~~Bïó¬YÔ»/¯>8ÝGùzL£Fõ%Š×ÝO¬ÇÞº‹¯WòÎ`þÕlY­z†ÐFœDÏ…,&íIuûvW›êèy‘aðÕ+ºÓ´A‚^ð(¥¢´Þ8¿i°}•ËŸÒKJðF>vÛÈ~–8~A?úKÙˆ`´)‘ ¬"*4Ó6áiš> –”Ñ;•Xˆ'…æ~&ào¥›½ ÷Û_¡žêϳ{ÒYÖ€HÉvW ðÆöÞ<Žwð£oëèá:×»íOQÒÑ0wcµØèœÓ×™Áy¯NA\vμ&£T'¥ÌÏ„:‹¬é/ÖÍæWWè{œmX2мm ä©SºÒ¬A“¿r>[/y?Åe«Ú5€ cÆBƒµù€•;å©Q*®Çh¯D ê²[*U'mÕéÌ÷üV…/|áhÙŒL¾NPÁ:òÇi%ño\CíßùÜ!.oFȳþÄøùKº+_=º_0èøª;®ìÊ*áiO%jUâLÛ‘íÂ/,Ð o ´:w|d#ÓŒÌÚºÏHéy%^˜¶¦”ˆ<-Àxc&OÐÇoþòAù;£…ß,5äBxôÓîœö¸ÖLá,ª,4ÖVwíÍþØR3‹ÏÉòÚ03ö:¢°\˜IÌÅYÉçÉR õr„2GQÓJH«B-¦¥RÂupa%Y@6sbj¶Êlz.Ûƒ`õ™À_DøÁ&v3¸Ë)¿²Œ-Í”ð€'úף݀2üx›ú,+ÔM`>õ|i…rg,$©§¤§0çÎÖGrD8R‚Ì…5×/ÈiT¥²³´z›Ô¾G1ÿEQÓ®þ/J{M·pò"bÆbØ'†ý)+É£© µBf³‹½¯ˆƒ™Ëêi£*!S·åªðOH Ŭ‡(¹Æ.pK8'žjÚrz ¯Ìï¥6hÃYŸÜÁ× `2 Í¥LáóA¼Â‹…[gŸá)Óza9êKvÀp)X~*¡Þ«™ÊÔG(GK*t¹½½ÿ¢ý‰¾‹õmER 30›îôk»úÖ¦ 3sé¨8~0ÕÆMG4l%â|†¹ÇëÅa•!˜wãwR4 ñýS»p1*o»)þÑ#b „¥qOOýçÝȶ—Õº›s^x.,©÷ÛŸƒ)±ÌÁ´èAéj ¦í_Ñç³ v"Ñ*fG§½ª‚êƒ.›R8[Õå©+·ßÔß.'g-n N?´ÑX§&‘æMÑÛïmžŸ †ÅüOõ¤%‘`&¡/nõî±¢Ö}ÃnÕ¹€ÀÂ6}椷g°Ý zVk×YÂüÚñ´ôe4y0Hãô;ð®\Öé0 |5¨ú8Rà zAN5Lᥤ&”ÇBDñÞ½,ÿêY½îÏß^A€LiDFguØvn}SWxÔ Ó-Ã~ѤÄ&έå¯öÏL¢› ÊpÀ7.ô¤'2!@”žAeÀ¶KcÄË> —Ò!lm"Ô`iH xBÕõÚúÞ’ÒP˜#t¸ _­Íö@Fî:J"ˆ"ï:FsÞ‘«p`†/¶•ûë3ëmˆ-J7ùnŸï&a¯£ÈFäõ‘ɶåü:\Ìz.ÖÄ‘ˆžÓD¤˜0Àc¿h¾]xì¢ÈµÖÄ›÷|1ÚÆù8ÄŸ4þ{ħ„‹ý ‘O¢¡sko`'ŸdéO¿{©èMßç H-ϳ8ëœO¤¬b²c]É ¹zf"i ÔúÆ?D> }ÃqqFXã²dkN•m¼OoFË’˜•Ö¾«:¨„ÕÅ圣ÑÕ‚µ‰X®¶PÕq&våKVħ®9޴ɬ‰EYè¡föT ;.ظÞßWÐcqLó¸k$–™æ´DTÇd¬…Ûª:O´Æ2¼ÙkC·¤I½=èÆÍdÆI“gMÔg¡J ƒGÀA#ãòjÿÌ Û¥‹'p¨Nyw·)Ç)‹.aQ".¦³ž\„­ô>n޳¢3R¤3 Ój¤x€'U.©‹¨]b–öÉ5Ô'ïj,Êrð àœ½é$«c‘¤¿ÓúiêŽ6îþà»Ücë•Ïi>´¡/.º9í{šØäã÷Ûª²U\0,!w4úYDþ2ï·Í°ŽKÜÃáT]þYâ¦K×½ZQï+Vâo³£¼T´XdÅQ-r½L”Þ8TW¼íœ[@±ÔC¢îZ”ÅüuÜë ÖÆX‹M€©fWó&H’´7ݰ\|”ÛÕ`µ,qçûåy­ò ]2 ]íjûVÒÞvo[ð[$„ÊÉahôZ"ú4B}\_:!<·ö×ÛZD­¡D Ì”“<¢<¦| +`$ßÓk:~ÆðÝJ 1´ü$ôhóhUçÅJÕ«ššç-ü.A #Ä“yù¥Œ¼yÇž³¬ky<¬qéÎ-£èàócóq[ÒÍà"HSa«º¨þJ'î&,€›î¦‹·¼¨ÃH?˜t,£¾£çñ¥#¯°œöÄŽpÅÂÁë×ÞžVpke [—í¢o«Z B 1j^(p†úþLÓ™þr§Ïﺈ‰4fdé²ÀûDË™¯Y¦ü4,›MXÒ×ÏëÀ ²m¿Ù,åç/+í„‹à úÒ€l’ì£]’®®q½ßò¼f|Ç*y8+ÕI¸¨‹V4"û5>HáÈãP¡êÜëè“DC¡ž3'ïÃ駪'wfYÌNÒ]ÂtâÐb>™u*+ÊqF ØÏÞi¶µŒ4‰‘Ì`ešëÑT‡u»°èqÐqMˆFt~—÷S¢Yg)4ùì¦Ç¯`ØÉÆ”ÆÐlÉé¼—NFÐGú¸`vÞ,4ÍÁGÁÃ7請}M$èéD!Ó¿#Á¼ª6È÷£#ÈÌ1B˜È¹L¡ÒŽÓÊ\ßD‘^uå<Ü[}P.Lâì;<м® ’fß³% ÷yŸ¼Þ‰­ÛÉ0- u¹;/q& .ÑvAÈŠe$_îê2Aчž’B5F{ø«Â )fÀªmL¿ɉAZ!'ðW»Ñbó' $­õVT²@8­Õ‰€ì!Ê;Õ+ p<åCd¼¯V¨—S*ÇIÅoXœ-ä…k~ i>),Ë¡*Ç=uã-§­ÎI]‹RMÌcŠëÉn ΧäÆÌ O#Ñ„¿W‡ñô:n¼J¯ªN<Ì^êwƒŸ,–gÇ%dô7 &*¤é"x° ªŸý¤RÙ jxHi &î9Eë²Kõë–ij¾(ø:žîÌOvá¯|úø×ÅWùÅÉI`¤ÌÓ%I Ípó§›=t÷EJ$G¢‰_¯Ýtþ!…Zw›ÏÖÉ߃øG.B|4Á{½V¦Eúyµä×ÉÒ>îå‰Â‡z÷R%ÜÈnsè³°CêPvê©JK–üþÐÌ“®º¯ ¿½Ù/ŸˆÁW*¿búAIR8a储Ó7Üò8>1=úýP¬˜¿Òý$þ¦l[­ŒR”6Ç Ê…ˆ1c¡únÝHBÍ.Õnß)35-ë5-eÿk2­l½+Q‘“¬ž —ïe¨ÃId±Y5ƒ×ýª÷˜<ò[ÁÏbÐxåwïÒÍ}nåã]M5)Þ³y:$þ·È—u‡^Ýò§°-';ræùΟûX=“‹Ü0ò0ËNë°±çãYMศ`ÔB*F—ì"—¨¿sÎÒÁ쉨~,ƒQ¿ífiy()NŠ'wžØWÂÚ‰×û–Ú3ÿ{6—ž6 óÈ:7©]næËë Y¸Ñ-ºTøsý±ôâ3!˜˜^´\é.«Ê¹¡d*ðyÐïs«þQ‚4Šïr†d°×Ž;Aaz„!ÜXñ(ÿƒŠïö®G60º>6òëC7Ç,o\-öœžNRqÖãìº:$c~›©ñ 8ÄawI:i‹F½ÞúïÑüô ž&Òl‚‘;¼Wèþ6м†1\Õv_‡_Z«´)ío½y¸.>Ï­"³áøÐ²– }£¿Ç®Kæ±&ïH}§•BÐÆþw¿–0 Ï‚F!°õ}âô‰±~0÷¶À˜ä«Ü[Útƽü ^>vfCH¡ýë°—H^ƒ)b³\çw˜ÉF=Cx_.ÑŽùÛäy¯«Ê­„¦V ™£ ýÇ-‹öëÙ©o=_ô)k“ÚÆÕBež·Ôq¦·A¢!¦bšs¦Wà£Ò±*”£RãUX5×.÷ˆ¹¯Fön=æ—hõÅîB``çŸë¢ó^õ!ƒòF æ²_óîÚב¿#ã&+îÔY=£÷&QÎÎ0.2‚~<¹äÒ³ÓÖ‹Bµ5}Ì“ïe6WñÅ¥P@Ù½ýƒž¤|Þò´™«zS×uxòvYO†.áë“›©Å¥jC±Ô¤»ßjã‡süæ ·'¬1è0ÄH"Ýó!`4î?@c(Žýhé \0¤ÅUÓÀ‰KÅ„ŽšT{H>ŽWàqlÒj=ä2Iô¾Ê›`©(§]@é-:²07A}w°M[ƒS«pÑzÝ!¡j/2"e|#•<1y«êu1A$«þ¿Z¯G§SΤØ*îýªy&v-ƒµ3cP7~…/ሊüáJâ¡D  ±™ÂgˆóD£î‘xÒ“”Ûår”ØðÒéjj4FWãvùs6#í¥ÛúM®/WÍ‚~»mêÊ'.ûJiœÄÈæ¹xg„JÖ͈i*‹^†™Ù‡Ædاsaÿ,œâ"2eï’ƒ| Dÿ÷5TÔÈ©6–·Ì|–’N‡3­Ú Œ'›ÍA¦³ƒ¡îý¾%²âÞëS²â$"ò„)'†®ádÊó;Ÿ†YÞopµÌÃ%—â½Á’XµÍ¾åßÜ«Ô-d¢>áf¯åj?¦4†!!)nvB¤ô¤1éG!r°]gD«”JÂKæïº-K[ñÐ]ô5umó–év®šÄæcóñ%;1Ìu„_WBn¤¬`î]  Ãì§YÕ±nÁÞrk>õ˜›p¿ðÊ'x>šÓç;V_6?,O½Æ^*“˜„~wGc”ú‚Ó̰›ùM:v4 LzÁ’êfAjkòв¡éçŠ0[¸3 ¤´ì)L¹Ö<’»5$ ?“õ®Ñx…ˆ0G[Ƈ5¬´"#Ãî}p2Ð2—855öv‡þ…:IëDö“UáòFOš[ç– ”=ôéò$ä³6/‘¹{Àh/s&˜µßþë;º~]aßIµ2í?jé1šœ„á³/ß»eNÐÅF«ã’—{Ø]i§¼¼IÎOôÇCŠÏm†Õww¯*#GÌD£ºJ —»–tí…£]ŽÅú éo¿õ×KZ«7áßQÃø7]Bß.ç 6Çe`p;„Ö]fE?ßŔРi~{ž&uÒtœœÃ¿.åÔ¡¢tW kc!qv?1 „½þÂÛ x^¿¨´© È>e+üè {n”¼‚I‚øè8+ªŸhá=ã£úÿÌ=údΦší’gWdKTˆe'».Ît¬.£)©!NRý¥A’Û‚zµ¿géÑY`J\&̃1Ög•l]褃^*½ùó3s0àn&ge~¨rUÛI÷ôU$ðè1èÅ´û7çÉÏãf©e˜zjѨAŽÓíKëŸÊ%L\ÐØ”¯†¾|¶Žß9˜ ÅEÙf ÙÖLMK'ùxš;š]Ä0eAúÿ0Ç]i66aúû°¥‹‰&ª‹kij%$?8ÓŠË=îÒáy.Ù»~.%L†X´ pôZ/!Ü‹Û/® 2+ŒÎ“г<ÈÑlAnJªUŸ1¼ÏŒ¹asa@üž¨¼‚MúnÃÅ®^ G‚°:ã&~™¿Pô.ÄS©hà7®zš!*ã~c*žjñ‹ ¡B•ç0±ŠUŸw'›ýÁ¶a¿û¬ÔÿC6\U'SY[Èå—† }tª ¦ce¼tfÑUÞm³DÙ ,X­h¥¶Pú]›3œ®‘bm—ˆ·Òi(RnìÛ÷›'9Cl²úÁ:*/Wc0í*àá"‘J'm/cÁ ŠßÞ^gõ¡ëÞÕI—Ÿñ¨j~°¨Ãh^G ká ‰ÂË=“šŒÞÈ•~<×%]pù°6bt%º[_}s¬¬ÀC††î?Ž‚åßazDâpŠND¿E"ªñM½©9‚;9ËÁоïh­š¼·>åQ{f&[ÙÃ1¹& Œy_*©e{eDÌg+Bܦº_ëah¿Ó–Þ˜¨nžoEËhÙ¢ÙýCë7¨³š–¿ ÇKäEŠXÃùèÃÔ–“|+6ÝpF\õ-²9©A1z ßÕD¢SÝòÈà›¹{ç4šøˆ-”Òÿ”¤¢jç÷Z•UÜ©fù$¨ ÕLƤOÊ„$À­¿–r¸Ùù—°ö1›ŒNUN'd©ìlØFÏØu5)¼s_ô×§QúJvµ"rÉ+À§/½G£~ÛocÞ<YÍó—\ÐêÒS \kO\øòòØÈì§^èQb»“Uýx@i}Säy„+½1ì.p1A´+øÐÑŽj¤s²2ÞêäÄòøm–9å‹b‡V>nhR;ø¿8Â7Þîš\Ó×LÃ]¡ôÍ—Zbãwô,[HL•œµ âú$’´–Ë»8´¾’  WðƒÐæÔ HŠâ1È‡Š²{r®NENo&$O`ÖìÞ¿ÏjàHÊ£žØ–‘–Ú±Î!ÞoÈä£þZÐOÀ½¶h?—­ ÒŸ -^™œhc3»|Ë©e±=QOñ}ÿüÒžZ‘€êÍÓˆ½Ž{ áýž"ÅQÐÏÕÛ6AE%¾xW&KºÝùéO)'åÙRH½ÉÆ/ÏÞ[̼QÛOÎVÌ^gksjR‰š½=bæâß=ñj¶ÏG"'Ïý8§½`µ"c¥Eöˆ¸Æ*á‡ëÙI‹;‹ž¬×¶´0RfËÜ.f`°œì–L¥ù£õÔÃò RËõÙ¹ÐZÍN'ô9VBBíN¯㨡è»Oî8-ÆÙŒ1yâód J6z_A$çb.a¬v>è0Çé'7Ê䫨üðÅÄÝQdý÷ÉÉ@Ù¿CA¿ËÀËä ~X%¬¼¦£Q ‡ÆÞ-ýkrµ.å®Ý— f±cðœâú=áqes륱їO-—1ÒbRêTY ç3!“×w«A‚ÎàaýxÕ(® ¹ÏòW•¸›‘Ð(Zg£Ázx8Ó«Ok5÷Ä£¦bWÃ…V̆‹úG½Î8Fë1—)ò,ÊlTpØil-`Ä(7‘•1=Æãô ò/PÄ…dB;œ56¢Û'ñ\ØžÈ[#:¼ºxYùè*M†1õ¬-<Ãgå“RП’ôså=Ø ”V6íuÍÚë^òDËOÿb-{*¬‚åèF‡3â^þ)õ‚ª¶U¨H»œhAVÁ½ °·ÉGá!NrÔ”Tä8º#-A£Á=èf‡PTï"´éª¢¹Éb=ÃT „D9Pz*I˜;¬÷M=ý™C ;)ÌíKÅ`éB*ß¹%Ô 2©• üF€àHýôœi‘æ—½X5îòÚ0©_4b¥\–·½ªÒñÂ9¢BëMRã0ç8róU˜®Ò;/—¬ÈÔÆ\÷Üò÷xò:D¶‡é-i‘°ø~½¥ÞØÑ Ëó+$Ýáh‰0²ÌoÏ;Nng c4a*¦ }Læ¤_~È>˜øãª>OgLS€é¿mU(élþånîœIî8îõ\³•Ö„„ÅúQëåÛ†8Òþé3T¼öƒÖqd¥¦^òŒ:2m&(èúZiÑdÞë{/Ì©%5®Î$Ø ¾1 “m%ý!Æè5 Ûb?Û)“È…ý¡RA ™³…öÀXÏš³qzóÅxNŸbFè:L§n|¡G< $X5÷°€ÒU(¹µ¯R9ý\"=4,>ƒ3$³9ò$÷áÚ è¹œÉé¢s_Œƒ¶"ƒ­èáÕ+¢­ŒíwP(ú‚b£<6|yp8ÈN³Q›}k(ëÇÊ;)c3sÎèaOÉa”›+pÔ„õ UJ÷£Ë÷_Òç2IŒ_M© :.p“Îéù·[Ž“ýJRõJëÆ¤ee¾CíSà”W´löccˆØïBB·9… æÚ0⎞?ꓲKˆWó€/ãå,¢0‚ò°†õ*¥d–?·k9_~«Þ5;Ѧí[ðbwœ“Eƒ×žRf££0ŽõùI/ªœ¥ø€©`œá]ðõ¬À‰ø€kQÿ¥xT Ô›a·>c>‚y(té5·{ð1b)8ÿ& ×ÚçòÑ«+Y&\1†©ÛTÜBi±Y%­£ݾÄUÒ÷IyCRÝÓ±:`Ï”DˆŠ´åð™Åµ–ìû÷ Ô[ø}”Z³ò³èè®Ú2n¾¸“¸`T4ê¸:_UDŸ$3G öæu7eßr*”MsQäb€žò¸¸¥Xd]Ã8AqÅMâNÓb6Eô‹V¶Q°OIÔÑïMȈÎÄU‹ßZëÕŒG×·Àí»m­t‚úïóWhW©±ÂÑ¥k§ö‡ýßN#ùX sƒ†9Å‘É)ü½Ž§§£,?yÙÜ·Ú„g¸ [„°ûàZ7$jR4?Ù¨"ä>`§´×C}ؘç¿€‡D©2[¹5#œ?ÂNÖ“dy¬Ê^ךMǃÑǶch˜qt¬}›öV2yßÃvsè{£ý+$‘»´É_俯ÐÍ\q^³Ì¼É“WR^6HÆÔ6ïU<åÂŽôƒ²ŽJÔJž¼îhZ†Ü9²=Å2§!MEmZ-Šþœ/'ê_ƒ¯Àýf×ѳ<2<yÇ~d¢?¡ y, ßïÛ~X"m·Ùy9Ø>=‘Œ#h×zŽý¼ðn®¢‘‰>tQÎÒ–ßô³ûq)M¾XK³ИÚêv[FœVzxó(: L™ƒ’uY†"’Œ‚B¢ûAýÅl`@æ’Êö·CŠ£yuÙµèERŸX{NmËE-Yâ= ¼€À©ä¹y¦¥/4è¼.w8Ý“jÅ gZ-·H{Q鎮Ž-ÄÇPÉ+–Ý“Vîð=QxHýæ×k .dÅ—°£µš!£‰R¼eÈbxƒÆD&ÒUޱWyNu}Z(¶ ž§°Ë=>ÃÆa!ÏÒÒÑÞû椊§¹$1kÞ§¶× 7Éò|nôþçí}#Ïšö†táSDÌÆëJ­ž¯_} G9Ü8¸ö><T´F¿86ö’^ö¤æŒÌ “É\®§/Áº¶¬ŽhGÈÒÎþöõnžrá.ªk<ƒ©ÞÒÞÖ%Q<ë#Orý¾wÁ=¼û¢nÃ…n´×Ø\$<Ê„¤«4›"mòë]Öæüíw7ÒçÖ/ÑÍ ü |ÈÂÁµyš£Lj´qKfðv¤¶lóÙ­žPtéù‡½ƒ£JêÇð”) ÉÁqY‚9‹Þÿ¾i}b0¼ÍPôááãCôÿ…TJæ¦mk\kì‚å‰eûòIOèvëÐmjf(T.2µuKb$ÔSB. à|N¦ÑÚ¯®{·ã{ õÞ–|ÐÉaí ¶•ªÛ>Ø', žæ^qËôíÁ÷kÀp0´âwék´7æÔD•ì@fUvö­Ö ôÍ•B ›Ácx\iž„ÏΓ܄Ê3Y—L5·²$(N‡D¦G¡ §é~M0Ï{• ÷Š`üú,í r«oK³L"°1·æÀ‚Æì¨¯²bBÐA˜pñ71­šI/„éK³¨OÀÄGžöœð[ìB, 4<­zÒÅÉD½"‹ÎÆY…éŠÆöŠ£©cý£–§cäKÎmƒùß!ÏJ3¯¾«Žº õÛá¦Ýà‘,‹#DW ±ªGÃ^:ÍÁ¿1cD6²KجL»ûí6¾–×Ú”‹S®+Óš+R¬áJô-unÍ@Æøkxã^¨ýv/;þL¦1&óÙþ4á™ÁXGe(I®—.Íít¸Ø˜ŠïÇ`]„gíñï ¬Œ½1¡•òš®v;j—xÛ»§àbÞ¼yãê^±XÏ éqdÊé}×K›ˆ+„ è­„ÅæØ÷Ù¿RÒû›•>·®k&¬O䀋®þ8P(Ì‹ráNˆ¤Ê,íQ3;bZå_S±Ë¼öÛKY< ±§9CΊ+]SúE9¨@ÿØrø¿4¾À†ëMvR˜ý”8ó‰¤ô2Z˜ TQà“Ôðͨàá öÄ‘„››. ;ß9Uu /Ö Á1ÿ°€¬wW‚ýþùæh©ùµMQáæ**}ßß1Ãê<"…O|õ;¡Š!Ùª½KI›5 ‚toªŒÃ¼ˆ÷>€F y÷¸ÌšLé´yèAŸ÷ñ:äåyÚîmä\5lîF„»½zùÙèØF`Ù‹;(±[¯·%ö6'»MîrnV@dþ†àÍÁ&óÒ' ÒæÀŽŽÊ'¤°ÔÞƒZ êé¸+a ¯‚ÿ²ßèÍÀÄ㎹FYUšÿëÝ=ŸãÏrƒÌÂDæXH—[—&¡’«mËJ=Qãa_È€¤Û´J¾“Øù¢<ËòöµÕFBoþñûë^Ù36L't $Ý%kõâVd˜mó0£üR˜c¼Ô†*" LÕ¢¸ºíøÕøukîwå¥ËÝÅ'Ÿ»™];;^Èα 3%ó\¸¸AÍÌ”"üùÝ‚®Mð†n`9ˆ7»JaÁ‡nÿž¯=ƒ-Žté·–Ð×L ÞÉ«Ïzn°[ú}4!U—F¢|+ó³ÅÊÓ®Áþ“?Œ(¾%»Îø¸p”n€`+÷+ŽËå£Tà;Ô:u‡¥G°¶* w×ÁÊ*ö?̆°¦͵)·»PI!_ºâ –{xþ¿+Ôç⡦>Ëù3UቢWKk­0YŠúøà‰®æMÂ`v$ÌßékJë¦JV äfH% 3†ÓW³7`“ V¹Ä‘¾¹|ôÐ'WQ^U.AÉž-µ6ßJµ­Z<‹´õóŠbÏ!ç•Öx·`Ö”ªë8X¹_å}–ª÷?5ÙïU·áÓ¾¹Àí >o­¢WÆü²5E×)‘x™K§¦ DaíîÛgiªN3z°Ìß Ø™™‘KðõÅгÈýêÜm¹Ô™!ûçœ>âyYǵ£:„kóo:…?/™6+Ì·:›—T,Ýú®ÄÇf\m½×÷[e³¯bˆù«Ä²íȶɳ"pG‚— uI˜Y^)°â9¬. 5v¥Ð,XÊ~ÈæjUsYè£À Âw2Ãç´^Ë­™0P¸õa“¨t‘3 ?ñsFNâ ê.ÞU·Ei™t±Ü®—å a4Ñ0Ô«3öL0Å©]†æjŽ ŽeŽéÁ ²\l¤íä÷мMÕ‚è/–*¿¨Ãø>q¦ŽµåÌ0›Ò-syZõ2ÂÉÆÇsþK0{#«(ëÏFV™Ê^õ'¿ ýÏ5ï÷Gõok<±¶÷èå)I/Ò‰.+½¨ü‚¾‡<±­Fq“›éÑ…8Žr!†îĪj@¤ô× f‰M뤂 ¯Â)²ˆ·á3`¢Vê¯aƒOùÅÕe+zž(™{4ó,ÚÁl n!ÌÁC\é†xþâ9»–HPÜX­sDø6†"j;jÎã û³ºÇ×ø‘™œæ®÷éê˜Êš¬,q=Ÿd½Ä(í'[dCÕPV:RŽg¹Ÿä˜u¤5JÕ‚/†Q³1ÖÉe%»3Îg]ÁFŽšˆwB?®KÆS|gÜ“ ÃCdó$Q¥Tj‹£½ÖèÇydæô¥p´›f>ÀÕÔ_ûu×bÛa™I`v&¤?F ½„ÆKHAMòUš­R­—&îÈH¶ª äßöñàä¼+‡Z逌ùZU,°ðyx®Ï"BO~«ƒ¸áÃA ùù¿øMCpˆ³õÙϵã¥AÄŠ;$ª²Ü­)ˆú ö^—¯œÂÇÛ' W?kS–ª°°åT.j/%¶B#eg8[¿…}‘ÂÿÃsúD_H9â« g­6k#kÓrwWª"ªx›{}ÖÜP 0™LšEyoE8¾ãÎh’TsZÎt΄2B˜tÖÌ\6Í æÉ/# 9f; ZYç˜ÎÒVÏ,¥µÊÒÅš!'O}ÅO¾ï¬"r&¦D /ÏÁS°x)á‹@ûöÕdµÿö<‚O³ ÿŸ†Œ›´B¡ XÄ6éÚG±òj_~€›ïÖ[IŠœ’É:Ë‚…Y,þ/g>âåä4•¢P°s£WÛ¼Žf¯¶ úÄÎEY.wˆáª¦n8ÝMÊ-u¥š»"a+,Ö–ºÆÉ‹•¯¬ 7ù»8 Gu|z,Žm—P|db†[ŸÁ“xXCHf?SO&R†pÓ°u‘e7]úåMxj9v 2©© „ÔöðîÃõ%‘¡PÖÍA6ª‚Hš– ½|DÏLmÄhï'+ ` `šÀ®Kû{%'rD„,±4–!üP‘‘V-†¿¹_ÜݹªG,Þú‚BŠC×Þ+ L/×ÔÞãšb©­ˆÎe7“ÅIÑBŽH {`È2µÑPW×öµÁæÏ EÆú‚èFÅYP?º:P]}Îp*¨$D×*Ÿ… Î?ùȺm—«Óvdj/—Ó|-Õþ “¾®ð4ßqÿ[†žaì›ãòP- 1ÒÝ20‰ùJ:(Å$r©©2¹t ¢ÚXeõ¤;8­[ë(Ðj½›’ Ë]Û#¸y3¢‹œÚ­÷Éää÷Ôü÷ÆÝ51*ç*‘¶¥%<¬Üo €6‹Z»£ (ct …:9´ñså%¹Ø]¸Ó›SØ…h2ƒâJp#86¨Z!1ø¯MÛGY¤ì–B!:qAý™†a1oÉÏØòèS§U¾¹Õ ;f$ËÈ›Ìʈ¿\˜¢»{oííÓ¸L´Ø6¶0X[QpÐsS4¼qÝÄõ5÷IÂ%¸’Y™ÒÖX Á†ÄýзÍÕø/á“vÒ¬‚€e5†!jÈhº‘yûóÆ/ÎM¡–^¡Tå*··?^Äá6‹Oùv<®åºôA“Ÿª‰…V·Éè;`U­{y8ep­¬FÉyírä|AÓ·íC¦5ðrÜV«/Hq µ‡«sÓ ¯µ”uÙä……t¹Y=} úû¬a±}„ŒÖæ~†M¥ÈäÄ'¬W­ÜNÑ¡Þ>ShèUv÷†tê¤7M±ÖcŒ²ÑÉ à'îÌH¯¬çúµb°gÏ—NÒÞäIûšÇr€È4¾ÿ…£ÿgÆå@>#¢Œ¥ Œä¡ EVh¾rYt4NGƒD6ø;(í¡¶ÅTôÿi#ïYo•õÜTë5zõ×.k¹¹¢´µªôÇM8Þ2WµGÝ[ù.¿ËO†ÍïÊe6Éù²gVàÿ‘g¶Ô™Yû=êdK—®¨yÍšP«Ãoë"˜BåÿHøÆuô¦ÝÕ¨+ou»WÒì¼ L¤Hã¸ð§ÅxQî½ôdŠ=7P %õ»Ñþ*âS0/™[/¦¾þD>§!†'T!:1ž“Ê^žVØ^¯«•–-ùÚÀ?ä[ÿi2$X} U1ª{5[ ¾˜…Ea©jÀËÿAT/éœÚ²wÀ¯sZÍBÇùÓZØÏ(UZ+ޱ3ÄcÖ:gÅ’g&%Vœ”†½^<ˆÛ´ø?o2¾w=½Ñ^1æoçtye3S 9p|fñ"‹ `ÏÑyÎ- ûÈïÏž“wÊ6S:a%§#.ƒÀ’/V>~J‘¨ÅÔðŽ ú+aÚégÚľO;Lâ>Ò™2Ç_Ýhˆ%ûD2¬U&«vãëýyÁÁXôõu‚X]VRUQ;3ÙS¡ 2pYÐ_ã<çÈPAà :±¯¯ÈsÉÂ8¬gÓKûÖca`Lf‡Ÿ2Í åëxAVcåFzãæh=¬°™­à®Ù¿ÙV‚Är9oH[Æÿ™äg¥¦ão›1Ôm×B‹N¶*‹@Õçd Coÿ¡ «³%&ÑÇ™{á̓Ûþ±…#:+nÜ–]Œ7H©vÌÃ7NÒÔoß‚þ.ç¹H0•R,yÓ,f¢ Õt(‡I ƒ%q_:Š€ |J Yƒ~YS®m‡}Á¼¾•sÚ‹U§¹f⊠&ß5ÈÛ¿‰#è>¹%Õà7Êí`§5ð‰ÊἎhðCg2ÎŒpnâb‚n(pŸ¨ÂÈËÚ÷Ö;€ ªˆ l%™¸ã§i™ºŽTÞ-º'ªeöØdw#Á§¦FϹw¸¡q.¬ŒÚt<Œ,Ú<ÚÝÉÇ›X¯_‘ÒÒÉ8[þB‹c˜ £˜<sGdlÚ|X½þ¯i÷s⧬WP/*'jÊ F-5ÇSnA`\8«&ŠZÍ6¦¸™ÿÄЀڳ.ˆÒLßœzV: uÅï%ÏŸ˜í]†–”ë¬Â—Ý?+‚©Ñd²ŠAüdÿ¬v˜~hqqJæë×ù7˜Ý>À¹-óÛè¾ÿ‚~ߎ²ËmÔï à¾×6|?aJ’w·ŽAÇãÂQzc¦Fh_{à6ˆgW1:›ªÕ]Î?Z¤¯Uâg¯yµ#óâ½¾ 7õÎTyÔ‚{.oâØñe,&ß'ŽŠ kðÆIÂ^”;B°1¥ô?ëAñíè~Ë×ëÓU:k³Ò]Ôø®å†ëMºÛÐÿLz)T¤äö[RÞI‰P=ñl´¸w~ÿ X˜Ÿ€šS6)ØVeÛ¶ï]¨¤†,Óí·,}Ø÷•Ö÷/>"Œ †²U-÷1XÕÈ\Œر.´;Œ˜ˆ„Œ8ý1øŽ|Ë»‹ñ%C½‚àW±lÅ£~‚tX^»ƒàfåp+s©MÙ¥mË,(ïÐÂMÞ“Ðr¯½ X if\é5½¼ìÁjÖ²3Î7Z¥ÐÓ‚¿¢<,GÆñ–±ý±±sD^'‡i'ÎW ( Ͼþeq¤ZÓJå°Ö;ðmÓÀG= 4ÞÜè?©ëÍ QT¦b½@¨É´JÓº|Hֈ厃Knd* .Ó‰†QZgk24ƒÀ2ù ÁˆÜ/MGÄ9²ŠÐÄÀšr®õÊ—œs—âÌ­¥á‚Œª×ÐÂ\h-J˜ß ÈÍp͞˼ˆ1"ö g"‘/Oä´îVáï8îJÕ¬ë·(Cœõ3ÀAª· ’Aä w6Ž3¹¯XrC ¯Xoänd÷®@¢¦Ü@hæøt…˜Š§‰‘C™ ¢Ô°4u#ZÇWŽ!Þ'½Ý{〯E;p+¹™«˜4û“¾o”æë“!î)áS«Ö^_Ö`xÇÆ>Í—왡5 Fœ½§ Ò“ôVϲyôÜRàñ <ª9êÒ-µ×ü½õ `ZØ\ˆµêq/Ÿ.4>ȹ¥;1b ì­M~9¼j¼qË*øënù]ƒ½ä.©‡”y’£‰ÎÙ£«ÉJKðèÙ6ë¶aP‰ç ÊÄUÙìrUmÏùûú—¢"êj\ÞÙÑ ³ÖRvÁÌLﮑ7ÿu‘Ú:±ö„ß;‰Èh]¯W²7ã&púÛ”%ÊÉ'hÎå, -KWiÕOyø½—_’÷O9h¸ä‹ ¸±ª ™ÕRáa—û"RQ_Ê?W7 =â%S€Þ“¥~ÐXãQh¨!ªÄOþq¨Çk%Üćmå\!éêÝ.­ž„JÒñMŽ\a o³>EØcÉZ§¯é޽bs´tÞ${ Ó £]«®– ¥÷àÒ&}¡€¨¥ˆU´ÕN©§[W9mÄUEþè¡ó3ŸQ£ûŽdÍç4%¸ýM9]ÿż»X”=ð ´ƒxhêaû»‡]dŸ•§Ô&|„Š}"d~]Kò²ludÓá µ#w?EnLj¹;Ñu”¯Ok²16%VÅ ŸWÖr†CXðE¸~¾©q„& rC h9‚ÄD±î_ìîâ›[/—ñ¼Vä×?y;—, ÅGlÏÞxúhÁ›µ‘ 3íé¹camÈDÒ´º„òv «:ðÕ¨µhs(ùÆL¹b®GŒÊÁ~aT·ämö™/¦…žÖóºÇÓ°K‘ÀúOuù†DLâ“›w´˜µv`ñPìÚ¬…ãCŸÙhÀzq)QöW°‘÷ù×¥bÉéPylpÎkrìÝÄzú 9~}">qEïØ5ºîÁç•6ª“®¾°}©Uø+f*îå2±2Ô_Z½¾[€gž”—¹–Õ³n·8b˜²+Š[`(êã”y{«Š/Îß)R™ ›~F1Cfõ}´Ò#Jê?w8@ÂLb ÁQÖg/PâFàjÎæü©+±ÜÀÆ•óWjû/bòLed îËö7N© m¶§pçŽROmr‘°÷Ã^ TŸí]°…3Ý#¨ ÈwÅO0IÕåÆ%çàˆÎ¶ºìEoÜ[P]pªJõ–ïH3:³ãÒÔm;Ó„íÕk‚âéRÊ:ÍÌ £(eØÔ|¥/pè!ƒ&Ñ;t4—9¯xqè5èªÆk#+´:rr„|÷Þ+靈äG!P”ä8:µø1ùGpMÜ$CÌŒÄÆõðU»õ‡ àN1© 6âŒg«—ªA(¨Œ‘ãß<0û~Gëô‘ª*nDÑúA. 9Všs7 ¬!ZvÅéçÍj²´Y|'G€á3_sÍ$oPD‹Ç“ ¶D@¢šº¾L/ÎåbV©} œÄ/—ŒÑ2p‚ÒïEþŽ3¼ÈG]IúÈM&¤y¾»¨ô´~¡Y©œw'®3… £7š¸ÁJá™Åï¡Ûóvã×UÝg„¬H¾I+ ë/`0±\³ÈÐ0 „:Vpé8dü !Ì…Sc—_ìbÒ\ [ø„Fptê“e½ìl¬¼ÕâvI–õɿɹ¶7ˆ€:ßµþ’}éL‚[ýÞ–ÿY¼¾IMN†ñ?г¼ðBG¡;NÍãtTÔæÔÂfAhpÓkpËS[c]DT?µ{ŠCÞýìGþ½­:kùq2s)s»âþS±ªüjH ‰’ïå"ü É…ù>£,ƹ¾o-€°—Na7šêE=^U>{†Þ:=xkjêÊŒûRøÜf÷µ} —ÒWúæ)uÈ÷­¸“bƱ#اýbû¾ŒÐÝU‚ÑHzN ŽOrØÜ‹iOž¼¸#†ˆi ˜œS«»zŽUÓÎgÔú…i÷ÆXÜë³£i¯Ñÿ“Ö4WòhgÄaC/—0Ê´L"ÂÔ®»sœ›:*øªß›ùC„ùô«|¿€×ŸË:ä#^¨G} mOÓa¨Íp2Õ죸)B®Th`p(¹âætYÙ%·­EQvý„´±.Ôʿ }C´ £EMéeëàlåŒ ‚ñe´4M†¯X—@ BTJË"V««ÙbË:'² endstream endobj 390 0 obj << /Length1 725 /Length2 35380 /Length3 0 /Length 35933 /Filter /FlateDecode >> stream xÚlºcpnÍÚ-ÛvîØ¶µbÛ¶mÛNVÌÛ¶mÛΊ­óì½Ï~O½_}5ÿ\êêqÕ³»æ$#³·sQñt0e¢c¢gä(‹©¨0122éY`ÈÈDœL ],íí~º˜rÔMMʦ&f3## @ÄÞÁÓÉÒÜÂ@iLõï @ÍÆÐÄÒÖÒ  focïfilàusstsv¥wrå§ÿg²©)ÀÅÂ`fic ‘WД”PŠË©ÄMíL m ®F6–ÆKcS;gS*€™½Àæ?ÀØÞÎÄò_˜œéÿ ÀÎÍÔÉå`fNö¶YQ!1y9€¨ƒŠÀÐÎ #ñÏp;gîªM]\þÕ-Àå,Ãÿ±ŒþÇúŸ¬“Ç,z&&€‰¥± ÀÈÔÜÒ†á_¼IÚ™ÙØÿ6quøoê@ÎÿàPþÃ!ÀÄÔìŸjW9C[S¥ˆ½­ƒ«‹©@ÖÞÄÔÉð/îÝ,ÿ‰ü·ÔÐÖÒÆóÿ·øÿVHºþC†ù?ô1þ'dé,féaj¢`éòß.N®¦ÿ «›þgmdMM,]mÿ3ÜôNþYU{;Ïÿ;ã?­ü{>M5 QšÿÁ¿Ó¢vÆö&–væe—ø4t2ùŸÀ¿Ó †–ÿQбüWQ¦ÿç˺8Yz´éÿ%Æ=ÿµtÿ_•°°½‡73#'€Ž…ÀÄÂÁ àdáôý_p]œLí\þMú?½ü×ÿ·˜LM=LaÖWìyB¬ÒZÂÊýDÿÌU€S ›·&È5ö-vï%Û”4ëØ‰W{e¦FÙï!nËš$-so#L»‹õ™‹«ä%øþ|¯êѾ—Èø;IÄKpМžwÞff—s¦<³ÅÊO‹õKÜ]ìqœ,BæXíñp¾¬vy øÿì¾}x»s–­ÅP¨s+ürâ‡OM‰½&Ãh“«¾6ú]lÝÿ+x2â—yõy¨©–8Ê6Ä5P a&xo^/õˆh SäOs÷4˜(W`­½jR *}„Þô®~Ý#B3ºU´A®˜=ЋÅm1u×Çç¡¢ âö!Î2¹Y5ùú&§uÞU@¶OÞé/Oʾ‘ÂÐ`×Û‚ÕjžcÞÌ$ÛÝŽøóàŠ´É°W0Ü'Y¬v²/yôË]ùjçûy6¬ý< “%R¸|DCѬS«Ø`é<­¾¼[yÄ7-uþ=íô 쓊ÈìܨÅÛêZZ”ß$ÄS`íå3Aг‚§îﬗؒ†­Ëͼ’s,OcƱ›®À;:8™‹:[‡ _)¢p>G¨çY¿GÚwr¡C™›^Ä‚´Ÿ?&ɶPIµ{Ü6Ò±[‡öú•ÓPÀ…,¦]Àhíc©µm Ö¹# *ýÁÛßäÐx¢˜Jñe|b3¼ÅÊ~ɱ–TºF[ÔVpˆÐ# n㯱/bÿrõ ¼å`æ3¾8¸/1Ý'R˾™xV:~:ï>Uò¨q¾ùhÚÏé6ô›™úÉš†25a!Å!Hbµ…\fÀ\=™‡\Ê@ÁZy¯¸¿6k«À<¿öˆî‚~€ðòêÅb @],Ñóé¼HɈ”Ä0 Üm3š>0œ ;4¢4nKëÃ#ÌևݼSNí?âO‚÷¯S€¢'ÚWH¼¯Ö xˆ û“[ʹ²ÐÂæ¾ ª„ÞŠjÜÞäDÇÞ:ŽÚ ÃLõ ÖðŽw2C¤^f¹ ¨·‘9„?'âîûMïÞ{•gô‚‘¿6ç÷Áp÷Ê€ãL‘TwGiÒ@+çxßð¶tÔüóŻޗQ4%u#Øëô[¨ùûLìqµE•®ÞÚëxL Ó ”ë©~«»faMÞ=1![+Ì87(ÕîâÍRÉ ¬4O vkE³¡ƒi„t½\9ŽPZ0‡ÒhÒç€Ô|ç1coÇz¸j«÷â{bûʵùuãtž³Âš£Fí/oÂÔÎ.œâɧwF~e^:Y†uË>êFOz*j¬ÅÉrà.áã_Ðï[èqr:Ä5v„í]]•ÜßgÑ̃ñ‹üw¤of¯ÖN{ëÞFÏ>¦gªQŸYRÞ]VÕ¨þ$ÄY)Ëe§´Æè2‚T²«rƒêL µr{heÐH-i‡õyµ "àc‘ïãÑl·Ú]«ºë›¾×ÀÕû‚'ŒÄ‰M%wv=𥒬‘‹x¿Lv¿îIòý?ZQ‚UÂßÀ PlƒŠL¾Î‘(rðÑþ2ëˆf—Äe4¿ø¤zšÐhůâY‰™ MÇgLL2ªóêIx…ôÀlRŠsóIŽZ•Zv¡ÇãI‹Ž¶«^O¬~¨äõÔsú¼³îa7£æugVH>lÀ`çV¸™’·Nu{°74¦P66#ãb04ßé륕Ѱ¿E²ŠÇ~æ÷!{ žäˆºj&,} 6B‰‡—Ú­²m¬VíT#°š5™º§Þê=Äl;Êꌨ¨÷.OYÕõƒMV<,ŒÛ™µâq‹›b€Yt)·Ö#ËЗX ž‰ñì¦{tvÈÇwŽ” Q(ËNdãS “Ÿ©[[ûØôüqÙ6;„*G~! %Ž„Çó<+#ñM|/¢Âpmó_…i+0"úA˜ðZ×3N‹óßçÉM[~1gG}ÄÐpq_·±r«‹KOÂ}:‰…ÿ]Ää7oH’£â¬c—&Ö½lØc3Çÿå/$Í*Û  X߯ ËŽ~nXÂéÙνw Ö‹P;ÛyxñAuëÝ ¦oäd¶UuÖ¤¼íþ»«¤åٸꖢ”£Ò¿ðƒJP×^08×Voô¹i#›™Õº²ë½!Ý'˜¬E²`@ØÏ/@…]ÜI%Óã‡ÆÿLµ~ ªŽñá² E™WøÌÞ¸D!åãZHÛ’Z[éssµ!‰] -73ë„g)û ¾à½¶ àyØ„={'QÒ* _Ü„„‡ã&ƒvÒ— Ò…=çOá·?•¬@¼à²pÀˆ=ÞÏD±Ÿ“ §Õô–[.íu3?“¦ù.Oî+ð¶{js‚>ÉûEðØø«r&²·ÕÉÿ˜Ú_©‹Z8tû™\9Ý\!bxîB¡À¥× ݬÔa;V͘e¨;¢óò#N' ‰Ê¹¨ºiLSvä†WeE½.Åb_·uÍÚS$ç¯fϸ«ïš840aË¥ûko74ǼåÖA‹nëKüjù>ökØÛIüËU’þ¼ÃÎ@oA²ÜS0ÚÑÃWuðòp î–®çŒRWzœ$à›À®2”A_äÓï½wÊ…ˆÞF×y·)–!"ôÇoÀDÏÙÄËŸby[¹T—ù;Œ'Pá˜uѦΠ’”!„(#¼,šQgØï¥tˆ2¬ÿ²‹ÜmËõ÷œRo¾Rñý€œ‘Dé.#|±½¼­bäCZ»òæJ÷GÅ Ábåš^V—øàÐP«iƽ l¢ÍJú2|}¤ÿ3X±Aý ]6ðÄ÷53oWt#‹ªt"Ý›Ù݇AlµD<¢ÓCË·‘SÏÉÌÛg5ƒ°·„jÄg™vº“ÜÅÕ"NU[çëS& ‚ž™®šð±8lÚÚá ÕÝFp”‘ÙвX» „÷8£l'á~gÓaKÎ.e³ªñ*‘Dˆbýëø$rW ÁÙYIF ÷¢uùÞ~‹&‹¢„Íìèà:ðžÕÀ^Gï ESÆä§Ë¬)’•ªp´a¼¦pgúîówä9zKWúþóöµ§?-+Ú.DÇh't‹‰¦ãì†îq¤ŠÀ_u8ï}.R‹«|~—÷³°%Fj…ImÔMâš L< ±vë?F³Ùö¿-w#?§[ªš+dp!ç߯ÏÜÜà>8Œ±€º¶;!e#y=ï:HsÛí6rŽñµ67ª“@^VeEÐ̯ÿ|J %s2”ÈßÏ{ÆÑÍNäz;²mø¦-ó ”Âp¼Œ1îÄÇäüž[]&<§SÚLYÄ€~r°‡³`Ì߉ӿäa!N­\•+6"i W5 s~¬DðŽMæ~'Í2^L¶š&ô ¸f\é%Ù»nˆ„ç×½!×µoˆÀfØŸ¶ñÖw¿·£jÂY fÖU"Gœç  –ïE°aˆ$ؤ(`Ë€)gï¸Fá”›jÝuš,Ôn#ªT…o}¼'ÄéÚÏ#7€Å"úƒ»ûîhé6"A® Êsn4¨ÈèËü ¥…O0h?Ó¶Áo*çœ0£¹,³—l–sHƒé±ðîgnã2_O¤GúóôëqrO9>ˆ}NÓÞ†ÆJH¡žGð*ÒEtºÍ×Ùh¶êê3ëåOlOqïõ”|#wS3&îQ`¹Æ×&‹‹ËÜ^ŽÄBÝ¥Ùxû¬äÝ©ðѹ#¸éŽ0 Iu(³Å*çcçB*gÉÆsž>g ˆý‹Tš„¸ ›¡_L& > Áx«Æ/†c,2& }Úµ˜”ú¥çÂéóî:24­áëÃqê †xGT^#_èNáùäˆb8Ð@ÈãµzwUùŸSân«†qÍ9>~ïN<”ø°CLU˜*ˆc©î‰/*(–ÕHšÓ—üÙT}äML§Àü)Ö{±Êd0”ÌðþŠÇÑ]NV¿–б4ùJß(ÕMc·äQp>럡5D8ÙðŠÄ3˜äb¯ÅXl6Óè}iB?ó‰¯ôî~6~¡b_‘-³L)áVZ“2ÐÇC $î'"qƼûlûG#2ùò›‚”/ò«Õ›ðøå3~ªÖ”£S¥pöOtTc¬ê,-@ùç¿}éÙv³èˆÚ9yäۤ¶æÁqÁGš/é7æ\EHÊ.,ƒn•IîuÏ÷¥‰öµ8\PˆµñuŽŠS‘¿ö0›åINUºƒÕ§q§aÖ‹#ãOŽ1cí@œ®ûœVÃÉ­'Ü„P7m#äȉ ¯™"±û•}·fú˜G_Ôõ£ ¸²]¦C]ÀòS2q¾¢µüÙ:­Jœ_e[£/1ô +²c×IQNææ=€=È~ºs¼¡“òN-íŠqÒ†ÝÉa–TÜ•W)ݶ³•Cø¸ûJZ@ŒH2oËpžª¶ZO¥ˆÌ×WÚÉõ”ÓC ZÉGe¦Q‡ônAû%éSB`¨Üw”Krߋ̬"McÝØÂNÛù­cQ«V6s=ä‹.­©åñÜ«ù ÎæÝÞBµPgˆJ˜è\5é}f¶Vü‡ƒÅB¦ ¤$Þ"6cIœ¶Hv 4N¦ºÌ÷þþ†uq Èg"xᣠÒÏ5,rÅ…½aöiY©ÓZˆŒýÿîŸiÀº(mBËø¦?+;J Ú–hl@ü6IëYW÷CB}fÖäp‹Fþb¤‘÷XS²›PÆÓ(È@š”^ÜÒÝñŽÈlñÂYz±Ófú2Eîg‘ø¥†ë…˜U·‰`bQn\Zµ ÙLlàŸÉ4Oš®jmk‘-ÕGÎ^¸Éª8Ù†Ôp,W…©a! X¢³Û|óõÒ\3 ây@¥ícraêI¦ZÿŒöþº„miKgMœ‰C÷€œû#Hÿ„ÉÑ~«|k¤…µ=Z{º5P1ž`!J7‘²u•I‰mØ¿Žü„‚GaŸ§j$¡\Œ-(w³Òç{ëútûß-PjBV 'ü‰ñ /¡;®õv¶¸‰Ð¹ˆBÞdO¹ 5ªˆûRÛhñ›‡wÞOqj:Ùø¸·Þ|×bŽMuG9³0ÉËX<ïFÁ¬Ò¬›’Á¥è.äuÔzwZ¤Ýèj¶MIôgÊG¥ ;oc8i‚©5à‰C ÞëÈt †=Ó((¶ÐkÀSôBËû°%6Lª³p.{Œ“µÐ{¨€KBþÃÝF§gDë{+8 .Tq¬Á–ñ–ŒŠ‘Ôß[>æÈpû6šøxs)eZÔ6cæ6T×H×§~׳ª‚..ƒ{8(£…ЦÛÕ›¹sÑ’ wÒ‹dAê¶!#j˜7µŠ:P!zä(ûÑj L'›OE4úº·á»na©’m[KK“Örï ™-@sp; Ð&Ž}ô3Wí¤aùU;¾Ñì(s„n?“k. «òøL‡÷ì¥ú¢–\>Pц´Å#~íóf»ÄçzŠTŒçIf<ÂÉô¥S^º<(í. õz*O<±Ÿ¶W|géjÃÓCɇ(rGVthຢК]y¨CŒ§hÍ Ò¨Mz4à,M5ÿEÕÍÉN ÁlÆ©‚«¯ ë}2Q$9-áöú(¥÷¡®¼ß.ÇÂG¸ÓSâOs:´Ué}yŸÊŸN¿4 ,†µ2I €ô6Ã0ú!2¾>ð`¸–5Óîr¶]¾d»?HxäB“Ô(X¢ñ'´¹BÕ̲:}4o•­²ZéÂ’¡ ú:xŽ$%¹EWcÊ+¤wê&y¼U*:«Œ s¯dáäÀ~ƒb¹ ÇÓ«LV’F‰ñÙÆ‰d{()¥ŽwäÙ}÷jÊHŸ@>}¥G‡ÿ¢²ÚƒÄù>ecÍ…FöÁoþlÿͬC€„³c€¾ižTÖšL&¬Ï @,*þ|ÚãRÕ~j7ûõ#xd=Š””†m4æPÑïêûÅ),_[èþÐÃI—ú#9!¦Ž£G7€“°FýáÓ‰k‚”ÿ3ÿá¹Ì± ßš-í¿^;XuÃ= £¨`F3ïÕæk§˜š×/ü8ÿ8y!"½› ,íÇ€kݬ÷ÇøÃ2Ó=ûóÖ즆h²}fÌtw˜½ªþuáEX‚Dæz´3ƒâxgÐTjÆÐÛžÁ ç$Iã¬uÍ UÅö –­*ȈS\u#öÄÞ'´(Ÿ@|…"/ £Ü¶wƒ2EfôY»…&z ¹t”™9.:ÂY¯2ÚmÎï2”{^¦ëå-åù´i·Ý{ƒ÷êÝŸßq¡n!àÅV • ÑÕk•˜Éº÷â»®TÌÝ4&¶½S¹÷§¼k¥Â'?t±6Xµ÷ ‚XÐÅk’*]ïyØ÷EuÒiûzb$T=¦u äœÇigx*þâûø÷¶[‡W»H!]|±Á±kà…( 9B÷±¾ZO(ø½W¯-§G“—qçƒË ÜŸèÐú¬»6TÉ®9áÕ‚òÄ)¼èŒF PÆU,OwxTà 1Ž­•¹ö3O’ýN×û…žpIö8å×=,Výë+ÀüãŠÉfvêã6Sq€gÞ+.Bý; oTø&‚4aê#"É™”×.-^§&‘jtŸ)ÖÎxKVY‹¥Fùg»I| †q@±Ê*ö€ªý y]„¥˜v+O¤˜å⌇všçºm°_ó\‰×Š,XÇ%ü¥fo@šÜÙ6D1^ïRäY–jþ‘5„êœ{¹¦’âü·íÎwºŒi Ÿ¿Šìj¥qœcío°äûˆŠ.Oe0š:D o«/½÷kÏ ç6f´F§Cå#ä¦D|ãËh¬·D0'Í©Eä1Ïä&iã„äKâ_õt`a¯+ddï›z1¹àÕ?Oca¦÷¶éó”m ÕZqsÙ h®8¤MNZ'ÇsJ{{‡n:œ“ý_r< ¯gOUÒúz-¼˜#ätˆ¢þ+½*yQR®Nõ_W›(íºéÌ“˜èW à²Çßl ´(©¥ _1Ã!×€Â×oZV1wo¿»ËæJd ÷_„(2÷†ß.ä0nµõ F{8ÎCஂò'}ÅÞ IÛ¿3Çä…Ñ[°O4“Ô&+’ö]qO;ÛS’¬ rÑ~ aä¡·34§?<ƒÀ˿˕3¹%ÉÂØf½Ÿ—ºÁâÒRçꊮ¤ÿm5o¿·‚E4U.e¿DTCŸj$ðHIH¸Wy— ùåCXëRY÷#OÓ ™_óÎ]ËÎ2€æ=‚Q·Û¸TÚ½V!%kà™áÛåûp•16E®"®:²––…±çÓ ’!aîQ>ñµÖÔ;ý†a¶™Ö‡A´r%Óówò^CÛ÷Þç$•…“õk«F^²fÎÓ ô¬í ™ øé7I÷ßµXÈà0£ŸÕž œ–ãìXú5O?μ`™÷HÇߘÛoÜɼ—Ø×_ú7V£‘F|Rïë¶á&oÞ/ØÁkr?›uôÅ™ýû›d3™øŠÍn~(ÜKÚÂÇw°QR”û˜¥Ÿî„†ƒRJÕÇ0×£2Ðg–:IL„¥Ø74´†Þ¨ÄÙ8Øo2hQ£nç9zЪèµ%Bõæ¬É«ÞDzÙÿf +fôÅÆü®ðb^0WiÝ¥ð¦½V~(1žgѯjZ"õ”ýÄý÷©Ceâ…'J„Ë›ï! m$æhQ£lÁ–­_#&©ÂçäYQÏÖ€r^œï8±Ç™ÁiÿeÈe1ãò£Þ‚qF[ ˆw™8Ö…O•ßñ¼8Nkzk+#¯ùˆ’‹´Bz Ær™Õ½ÃW3ø(¹×àè˜bøƒ‚!„ÍTrq\ïïœû6Ô3¬Câ­³0Ã*|@#„^A½^©ü}þ‰Ð½¸•v¾æ)ÑÅ{Íp¨?¦}ÿoè?X5¹´ßÌžž^ë›ÅKì h„^¿ˆÒpMÀÆÑ4Rº ˜£°ÛÑ'qz<»Û}f HHo¬9ñ ¾þŠê ë=·R3àôïøÝ# `&ÆNseCÏ‘úD„»:ßœJ/Òûó‹¿kÃt Êß_¨1É™‚–úÛw%JÙß§½² ð –ü‰ËÛIjóSä*gæªßQŽæÞâ`mªËy‘’C$£‰u3f#iòk&©/.ç2ãê¼ï#dÙ; ®”ðbb;T+àdzÏ$ßÂ!Üæ^`íkÉO&—g²äqµ*é¼èh™¥/ ª²Â‚AØ/Eµ«¤A"X"ÓŠYîŽ~½~ËÐñAvƒëSˆIÂÜ /¼í¾‘Ô±ù,S¨Ÿë{»mêÜ@ú¥ƒi&d:žQy2ó¨c®çbx¶¢Ênk¹Ï÷å½@éÔÃL2$q ÎIj¯Ž<•Y/8­·‹l8KËŸ 1©lnHŽŒNVöDp&å!æ‰Ö&dp±Iµ˜Ì8ã0øt8b/üjkBàcžmW¾íön”2*NþÄ©¬š¯Òs0³V¡drƪƒh½J÷4:ô€bt%Õ¨‡ï™ñ’ßimî$s' QõýTç&Ž0˜Ìï|4õ,°.EC8z¿aÉú‰]'áT¨ü2Á,ÃQl¤î(µx*cO¸¨F­Z.K !ÆBGãôË—¡}J'[ŹÚP‘ ÄD¢h1âp5êúŸVüÛÚ5’,àÖ—̭@ÐP-z)Ú¡½³IÎ3@®µI_;?¥d_5.V͆üšQ{Ñ -“ÕJ•¯ &dM@Š—°ééOô¾vI¢@¶ãRšûüù«Ð'výu;.c¦…Ý'y—F©e¹@Cï%©GoôÎ"Z‹$½EöõF*áa˜äç%ØúŠˆ«QèLy}E”h±Ñÿ‰Çä£ßd]@Q"lÿ±Q[“x´>ø‹°Ê•ýV]ÛB{Œ#»|ô\QËœ7Íf›HÐoâAÞmZ‡}ðVcçÞ1›‰;è=­Óéà¯Yk¾sm±tb¼>䘤Á= àQO!Üž5§õ†ùÛ.kêJÊô$åío¯tì?;Æ—DêZš{ÎZÒm'æRö€é©ÿ´š””,&M’íœdþdnk6ϹÆš Q`/T§}™ø!ï• ô :˜SqðÒ/-ÚU'd‰)ZµíRE\–0±Ý[X-ŒÝÝßÔ;Àו6<}–Yò÷6ì,›k4Oæ=cý±qÚ[ܾè¹²“jCAΚ2šQÓº‹€?Ådè>{8íNÉc¶—˜¿Ú˜,Õ]ŠM†OªB¤Äv¦j.oÈ£üωÁmŽ\Î*éOP>F´ ö}"Óö5ãðã'OGÌnZAÖO‡È7Æ}M‚·/ ÛMóÆê‹CÞðƒìݰÝwqº\m%3Hî$ïÄçQ™•½Z‘¡ÜzíéD ùýxCk˜Ó"‰cŒSªŽZ×"ÏMç0<9ƒ”óžtæ"gtÆÄÕ-+ùð“]u|™›-* [CQ ¼ G{íGªãñM¡œ÷‚ìñn"6±ˆ–ÍOÈRt=5KØì£u2i ÃM­9z@>i]šR{•Á58]W<¯­rJ¤pWV£çxåÒ{U‘ý¸¾ðnô³é`H1“}7 EÄ¥àðË@Ã4?·:˜¬7ì…—Òíñ”`@°“<†ÁÊûÍ]òg{Ö£ÀQV ;aÆ?F|K(‹µÚúUxñR]i¼:“ò!;ÒÍ™H‘í`¯¸Xøµ—V—ñ^(x•ÏS¢º%'õºqOà]›}æîžÓW'IõòG8³¤C}/2;—_:¾« {õî:ñ ]+6_¥*O ͱ`;Ï«âã1v€O;T’*ßѼcpœšTN¶t¡Sº¸™ÍdáX]j5›J=ß<³kdüCólÕª‡ÒT„öÙzµ3i…ÂEO@ëvæÍwÄÆB­×Ä|xW¿á4‡¬.Q6KޤxŒV´Uxú%Î á™d .gÆyO¶Xm¢âÖÔÎÈ T~:çWzÅ{x×®S–Ú=½¶IÍâñ­A¬½P€‹ PÉI) .úð}*µ±jBÀIÌTÖìþ:ÔÑ0Ê~Å>RèJ\Oj8Îú´iní]eqñ¨']$¯¡øè$¼ö}̧íäi«ZnT1ïîkÜ|å”ÎÜ)úu2Ð@¯F{h!ï’í°u4)ìI_Sh˜üi¡¦©G= VüUó¹î†Ü£ò Ý07ºKäU{6’ó[¨}¹l›Sz^ +åžZ6ŠNDîáâÈÑ„ÍÓ$8ð€[wHiŽöXÖF ¢qO¸>ý'«®BÿÇfBäÆ)¿j§ª$ã<jî×+ì §à­ÊÝôlÙXûäPX»`‘Mo+˜Õ*}­ y»}RõuÔ ÔÒ¨@œªiI4€—ÌŽø…æýÁü‹ˆÐE@õ“±†ŒvA¼¸¦jX˜ãÃou;ö}ñU!ìa᜙øŒ–Å‚r¿ÂÚ®£ózæÎÊHežðT ë \¡N}Nîù97³Ûñüd·¶añõY¸¾ X-r²³sõ¹¼WëL6£¨0c2£g€ífÌ~Â`¹Š®muÌG»á² 'Ɔ']µµ¨µ‡ëXæ3øÆž¨s´ú½÷349â×Ú¢}²çÎ.U³ÐZÊ8+~hz&Ù€VÕ¾‚€ÿ¼B:_qdŸ"w{–ßb½º´âCŠçéÊߺƒ—Ä›ä´ö»”¥ãâªÀBƒ3¸# o*K ßåÕê.g¶¹vGìòÆÒ+… üÀ0£ãûü¤“ˆJLò…úÕjEœb¾\&ÉÃ'Ô0÷ŽHõ·Þ8ä‰ •3Ša¢7Û1<ÁÙø tÊÎcH×9L+*ø½XòèœF™RêügÓ‘,^Ÿ©?àÊeÓÀ‹#4X·öOºþyÿH@­ÖMã_oHŸ¼Iå¦Ówž±(GŠŒ$ÐÁ·ïâ/­œßg_͆zsàŒÌçä÷!‹×<ã$’`í×.W eW‘=00 }c¿N£yÄz €ÐYB]1"¯7â'úÑ]+e€§Æ×Düýˆ¤Ã‡â¤zVâ€éšÙw¥š«µx£›žð¿kyÁÂÜ ņd%;ÄC,"Y:è$¶FwÀ™+„` žäÝëí¼ð®6S-û'ÑøÓÅF®-'åDwMÎôò xw¶h®âÉC†ÝýÒAM•WTŸï†õ—`/ïn&º1å㯉ôï„P`2#FÛ°NŒâ$ô½ïÏÕæÞFæ.XIpp“k€b íü=«Úïî7 eu»ÃÞ¯•] ÅÓžå+!;œs¬Hcl¿½|©)%^14Çö}¦Ù ¸g ¥Tå÷Gœßùó&l»ÒÂG–™s!µ¶A€‡•p 8ß/òÄæÁ’?Q Eiç”HúÃ#uCSàEÄ 9ž ßèNÙÙó¢ Ðh¹FΊôË·Âÿ8½Œ’Xxj'µì²dªjnúɳ­èôüãp%ÛèŒß JþíÎù¼ ókt´?û+œ÷”šò4qëVÑýB¾ÍpŸ-·rÇAø¼b÷aÓs‡.Ôÿ'«Ãïfh÷ésí0í/XßðТ÷HêÑPãÝ@Xy†8Ùt0T"µPÀÕ™î⺪Í{%8ÇT4¿>-@ÏÒ, üÊ2º-ÊŽ4¾Rˆ «MÜFŽ•ßâø1>­‚?éÊÀ‚ÆŽ4hl{„cÜX§±*Ó<à—‘}äêxÙvBÄ×eÇù iQV < §h#£À‚CçônhªùL}­û¥«Yw¯|±3Àß§¥TŽèW[?C¸Úr²oÅÀâ%DÁû=ïw+—¬vÆ’±’@ûwÕµƒOSŠM£Ó¯£ž™A¶s± Ó°ÑÄß·èŸj×·WÕPwÓíÈjc ]2!ã \)íea– ÁQ¡¿ÉäÒZ‘¼ô¼ùAÑþœ„ØÿúmÎF¡'Ø-Í%{?jË’¶bNÛ D|' Jpö9Ü ÝÁ:¦S¸ÛñýdQ dé‰)&e;é è÷àÛI…¾«4¼ýïŸ3dV2ùzÕ£]¡X*ÍTV-M¢špq85ÐÕŸ ™3âH}~†ôûßF“ ,Ï”8ÚpÇxŸÞ·Hä}©æíÒsŒEô›f$Ÿ¶Z†÷ÐOЗm¬üдöS2ÇÆßÏ,Ÿ²k‡jßàëS9‰d¯rG¶•ã èKÜ*lpÑÞhÉ3ĽÊ¢—©õ'_o¬ ‚­COóì±Çö7©wæˆè,¦ €ŸWˆ'LTºPè¥Ý—ŽQäê *³m´çæË8Í ðy@ÚB¹ù§2ÉÑ]òšÎ±‚£û­!ÎÑ â/@­T¸l£áËUݵ½!,JLbðsVÌÛ¶Ýûž¾mº¿s†ÛźúÆg­õqfsjï%”h°P㙄ˆkIØÖÑgÇ…PKBWK#VórWt¾Q´ææZ4ŠèÊ2ŽÂà˜á ßÁHmÞ‰ì>0?›?<ºùfñ™YåíÇîú3Z—ˆWƒ»’aˆÜÌ‚ƒ_9»´3î2Š®ËCʉ^Õë\–gxË´Û–âU‘½FOºô{©!ÞÅ,ÚMçZ9 nàLS‹)W6°PçÓ°ÝfÜì®ÉïÊš7w:¿¿íÂÑäÚ‰¶#˜ˆn¿®ÒÒðN˜Úcò­.A¨ ‡ÚùW9ä‚Iøe¼¿…Gt(„PGZëœð¥.‘áÅ©~Î×Õš©?ÿû}üEÖdºuZb…p=ãÅý ä™sÞ±J3³Ï>)k¡ ÞìsfK~6†_] f©lPåÍi#ÏâÍ$ÈèÏ@÷;–gy„Ú}¹P¯Å>ÞÒ¯j‘²&÷×]´ñå¼lˆimµ·£Ç­\d½bSØ{Õ,-î17§õ£%µ´í~O×Í·nMï@ ÄQ•ì4Y3Šäýüi ojÈkM© „*>h§ú«àS03—c£§¶ú¦‰ Ü(bìƒ1)¾!¯A¸¢ó5÷º±£Bb "³Ù7Ï@ þŽ©‹×w¥ß7¨ü‘K©!g ¹Uš"ú‘œ*?‘µ[ÕQñ9ìw±»S"Ë•EØ#B³à´Z„Ù\d‰!ÙÁL©Ë„ÁÚÿ°Rã¸]&l„3™Áœœf°aø C9ï³þÞlíÅùâ_² Hã Üٚ̑…ýZâ[²ÑÃ딿`QÕ:%í”~ùœnÒ"¹ A¿û6bØ×=»3z—mQutš5ðŽL?ù­°7G²j”/Š×têÇ^POD›Òèz6ƒ}žÓ Büuò΃¤ צÏÆ&‡ÆaéàÉå&64EÉ? ˆêŒcœ­i+cØ2ÕãÒ í%Z’e¯yŒ…”Ç6ÑAJB’Èõ [µ¥¾B°G$“…7B g0n—ìŽá¡ƒ-Íåâêyt/#G(á§áß IceÔiúèŽn—@€¬ s›Ã‘Û·²jÿ1 yãó©¦Ûgêk†àL£ü.V“çŽ ÅlÐÛ×~±ÂB˜òdž+ÉqoObÏßK4‹DèÇx7$†cýÂØ@m"ÕÊPüQˆÆÈ›Ez=otI’8ÿùŒ÷][,¿À #ãhùÓzð^xA’†=1®À¼¯ùW~»½â-Ä:è‡dá¶ÄÈ5®PwäȇÍ%±·®RAŬj8 n'qÀw›Q_Õïû8èù‰c¬²q:µÖ’“ I\¼»ôb‚J'ÄÈéî³ÒR|°ÿж<|“×q ­+Þèx F°Ój”´$X¦ÿ¯ÿvW¡³É©@Ó¢Éþ¼ 7½íÊâšç©Z5Â8GHëè â§ŸxGQÇ „yxS…K¦*FZŸÎÈõf¢çd¬ü¾]„üü0ö O%r¦`ð­9%OSÌܰÈCÛéͯÁN÷õ­z㼃Õõí7®"\ç„–?Ô§‡>[Ä;Y­=f¡? 4ísºTBﳉXi¼f©z\’øt¥¹O" ÁŒ¡ÜÂ…Š4ãvsš+ ž%e«¶äd8 ý˜.[ˆø_›ñjïÓ9ÈFÔ?<ªuŠ>Íðz‡Í?AM¥µü?N~ù¯ÄÍ´ØŽ!‰X–¯šÛºnO¢† ü2ì¤m"(ÄZ3Ì-J] xr7Ǭì2‘%H§cܺêãóE‰Š©äÍ5(ìfŸvÿ\"Âɰ€µ³æë“òåzóò.)Ö”¡èY{oùŒ54ø0öc6õÑ–úŠ?ÌhÁÛB ûQ¶¤v¹ *5JK†×f·B¤Á¼åˆ™Ðo¬Ž:‰#Z€#u·bi‰:sí Ši=²Êèð:àú¯§û½{q3?‡d2z- ñ'¸kFcˬ='>-•B´¶3ÌRv£`\ývΪô6ÉŠMòdëQöY8ŸhŽâ‚²ÛЦ)? o‚›ø‹Û’ÓA§b{ŠNO=v àfÓfå[fSeÈ­¿^ˈøþjÞä⻼G9?eê´¬OÞà¶ýðeœ$™eý}˜Á¥6.*:¨T¡>“ §Ù“ºª¤P¶ KÆÏof„„¥fš^AÆ„6Dtõ9l-"ÓQ¥Œ”¨ ¼e↶zÌÁc@|oä¯)íªÖù’!7öÙ§ÑFíXG·Ô•’XÚ¡u(/R¦Iáü9mcT³‘±ÄünÛÐæŸ=”šõ“L*ïú—Ó Ú«*knËŒYNýÚÊ’OÅGÅŒN‘€ÙmG›(Ý}Ôšx,mž¥æ+j ¬&ƒ½©b[© q&84ÙËm'sœ-9Mo×aây.ÿý.DyCH#/Fž8v+d‘º—F.X¶ê!j¯§Y Aãâ€qcÕ7'ÕŽmª¥öûk&ëˆ|ÐmŠž­—$NTr·®J1çÐÚ?èîéÅ9·ó™†’}?E˜¸Á´÷¯/6v½¹W4¹‚‚9$õ­L°Y[š/B©'‰¦“+ûo;¯’¬ëfA)PLh]ÏQÁhs”—$Ue¸Ï4'9ÝRNÒÜEy*E«Ì$¼9% ï%„éSã ŠÏþ]j…~)Lhä(œJ/¤Ÿy†Fîvsue±]ã!êÁÈ'¶_ÒѵLœ'd䨂;¦‚ ¦VdŸÔFÖ1wô½·!pñ¨½Ê@èvµœæH;O&¯`úsPÓ —§ÆYµÇ呞øU®ë$‰zIÎÊ„jzÎEøx¼×§ò`øûÈE̥бsгÆnvr떼ʘµi(›lÙ±êWÿ›<˜5L ™$”nÒWmbÓ<q„Dœ²ŒÕ¶|—¶bÊ…µ‰ H€xüûCnQ™ÛË•D¤ÿ›+¸PÁºÁ1¥üm<›„› ºâ¨å ,Áæg•qßó5èvÙiç ªºé^£ !&«–ĹçŠîúÇÚ:éU ç$6±$Ó²zƒQÜ|A~•p”€”2jÞLø8×0š(M•[×d˜K¶?õµ[Õ£ºC–±â[^c¨oPª’‚éìŠÒcguÙÚˆ­'÷çn4i{2  Sn¤´Jgˆgm>ô‰|û«lî–ËîXˆþS÷ž!Ú^išÔº$ðé|¢L¬J/¨5M&eØ!tµý “ØSJÃ#b“øc¢Ž še׺"ËÖ¹\[Jáf¥ÓÞ<nÅE…C^E3¡›¤:²ÿ~ì˜{ {+ÎåýéF½Bd„G¨ôÕ®36P”r°Ö½JïÃúœÛ×n ÉnöÕméW?©QKéø.UÛ§C%ò>J¶ˆ6Cä ãáé’þäP K +²'Ä<8–ö͘NÓa>9-„– |3¨•ËÅ!é¥À÷}å†ßÞź‡ÏL@lãÖºiñ´Z*.AÔXn¢ÚQ¯¹±CÅkdRü‰wè˜Át9gÏ^›aFÅÞõP—Õí j›à*å³¶ö†¬ˆ£Û‚¬«[ÐPc¢2~™m‘ê\[eyŠ6ŸSXýý¸‰! †VÔØºé¸çãß^å÷€“ÊD%êù¼È ãLâ¥æQ´ÂZŠq¨¿g …©G¤1RhØË`§´‡Mù•‰Nâú«¸!Â]Ësì2ÐXj“¿y†0Ú´ŠÀ3áÞ–{o‡óËŒX" )Œ¤º2—ÞˈšbƤÛ] —üG$)C!.…—¾HÁ¤@ûA‹.dö~Úß9ÎÀ£VÄEŸ]‰-ªˆz6åÁÆ3ãuøœŠ´Ž™’ÙHâÃr •˜Èš© já^ÂË5ç 4Kæ«"%ÄÛe½iF _+N®»b¬eê>7TÙ:й£­=›Eÿ÷g²nû¡ûVTöoÚÕxÒ)\§Yé“hV$ÓG°z3ÙÀØém+†™Ÿ5kŠ.) F§!&°ÇÎÍiQ¾à9&®FüŸ=o4 _¿-Ž5 ƒ¥Ãr\Œæk;‚øj¡m·‰û©ÑM:÷›† ôeM—Ê$kàšQJnàOâ°[sI¶¸ýHé¥9ˆ5HºS½3Bs_k9ê*×2¹ÚšH¹;I‚Dè7Ù âÜ؆¥†mo5²+•Ñ6LOÖu*%xSI‘ЫK‡èú€Ìö%DóÖRÝÓžáJ #o,¸—F·¤Íg«1÷™µ¼ 4b7¿{Ù‰Ý_`O‹åam—¬lq»…äºïÀ¡–+9jí¬´}‘o }›rýÛ¡±;¦AÌ` pF¯áݯ«Åy:÷Á{£g3ß KÇ!gäð¤—æÔr–8‚¼~åé;x·t΢ƒ÷͇mI7ƒóU› ‚~¤ª´{՜ڨŽßÙR¨7‡åß[L¾t,a IHúcLaTk‰+J3…{[ŠåcV³HlNC½!:ÐÜÖj>»:U ÚßÇ©ÎÑP4ÌW€„Û‘ÕŸ6 8Ê!Qðæu¼Ÿ.¹ŸÚ=3Ä»$s¶È]_huG…‡î’×ë坸¾2ñœF©5G»`*:&è/\˜GA)"¼Žß/´Ý¼GPIn5O’åø¦þ·V•Å]äoD  ©âûɵӢÕì0*¼¾ 䬱÷¼J¹ûDêÇ[Ù­Ò\‚¾ï#‘_“@$ýWÞºæ™n&ÄÚÅÜSº®ã¬­`ô´k]RPL?à‡Œse8Tuž„5žþInuB¶…‰e1‚¾õo4ßs•~Ùôã½ûö$ß…ÏÄ¿¾ÕÈÇT‚Z¤¸ô¸ˆu£ô&¥Ü²Ú‹Þ°k¶ƒô2PD"Ÿõà{ͦlë¾,™FVÇFÊa‡ÞÉë5³Íß\‡èÕiùñH«1lšaT:%‚5ÄéžÅŒÍ¤³R@—¡4F}a^‘ ,UnT#P”å9ºö$<Iê¡5M«¥‰|w£Bª‡Ù¾¼÷ŠF˜‰í¹B*ÎM=Èò>6x1…Þ“ŽÍC“^pdºÙPÚšüQù/ˆM™n€ò¤%){ØÄŸ©bÞ—ìðt/SXIDÚ Rø7Íÿ·<ì,ׯOÔ¬V:3Æ+Õ*$oe£4×Üô4–H åÙr`¼ì†HÌ¥EªW¨Ïê%z¼üšQ–Cy¿~Å-̉ß|-ñ=9t86Òãœý:e¨ ¼ÐwVw€Ý.X$xCØO?RP „„F;hÂyå¸5Éhê;ÊQoþÇ *M)°éJ  Ï\1õí5or¬V(¤z•á˜áÛÙÜÑ•_~Èe2SbM¦©>ÙfÏÖv;æoðh (ŠBé û¬ukÄÅ‹Q ø°M:pöw<²Q)L žfj9µU“zYT û~á/¶ïrý|ç¸î[!…–ï½ôázòlœæY-BÆ‹¦&ÑQ (‚5Öz'LXšÚÚY&n¾D“8Y8xo†ž·|2(€3°¼ò%†Ëi}$ãOãcá™Lâb •žt) êÔþÆÈÐמ8NAq¾Òüë>_¡n´ù ·Üø3!—Íof`zÌ”†¸'®Ôbÿ/êû<„ñ>6å’¥=N°…¼à(¥Ê:]ÿ)‰WôNt2„ã·ºOáí ¶†p'í€5mD•“Õ·^Qi:³…ëUJ:@ãƒñ¯+¥§hÝŽøü;Æe`5æTyLŠÞ1Qó2ï&¿·»’ÔæG°Ø§FâIùøcèŠÈ­ÓoîÐ¥Wbw·¡ú ô ÏL–¦ùÃB´¢‹üí#ÝÚ5Ô.]ÒPKpy‘|Á:ÎŽã`„`0›‰´ò¬ÓAç_†ë÷‚æ6¥Ök¦Å:È‘ô· ÔÜäú£°©õ¿r²*qÄ[SÃRÕ ªìS„…G' }÷Ž ¹3$`!—QÐBnÿ´q0%ùGç BÆ?5 ÃÀNm…çÙŠL“œhÐËD¦^æ×,o½tmAí¤ ˆÁÐAVô0²n ÀxRbnÇ%µk¹IíþQÄ´¶?ô$$•°«þ‹6­M C aÂo‰9Ú0!h‡„í†û r¶™ÛÀàQ$þö3}sTo‚‚õÁºˆZÁZýGL§\Ô/±¸¯ˆÃ0K𕲎¡vƒÍ«ˆ2!î-ÿSoi¨ßšþz“[jõ_¢*Z1GÁÃöÌñ}üEHBje"×îo Ú<•ŸU S,ßáøw‚µ5}÷,“oe6W Å¥Ðp†ªŒ{9Iz;0^*ÌxÙÍÀ-Ÿ\ØØ*%OQ¨ÑüøåCΫDÒðòöƒçÊ ð£…ÚM A…”˜8æußÞ7@ˆ?"RxLßzKñµ€Œkàªd©OÊÉÑ–åÛù,PÇ6ÂQ?Ûppìr»eÈ.¡HOL¶/ÍøSšµCyä±<¸ V„OŸˆ›‡sÛb6m»YTgæÜëUñÊqdf¥HLàO @–:y]<rLù{œ×ãš/jL}0øSº¶•Býh&ÄGx:;_ÒÀ®z>?AÔ åp>ƒˆ÷~J~ƒ—i@Áþhê‘'5Ç“©Sfœ·L_ëþþ«ýµÉœÿ¬ÇTp¾ã*èuZ#kóA·9Ï Íyú×H±AC‰êošü3\we±Ê _»O[ŽäØ8ã½\-;U(Æ¥çy˜uÑûGjCWòÖÐS£1@Z9_Í–øñàa‡]”{¤iÍpdçÝäkȰeV2Ák<«EŠðæR\UbæÖ ¹_õKW#…ŸT6a3±` ‹<¬tnr‹H8<ýš ¢íÞGó#éYÁäg'÷^„‘;Þ[«C˜dÆx8>^„åî§Ü›-9EÉ@µ«i7² Îô.7‘Ë×à’½$¯P*ß^Y‚ý¢—ƒ€Öì¤ 7‡6¦†8dÿ{†`Žßö(ëóà( ÛåüWQP»—½:³¯dOC‡z‹ó ²©ã¬<›†}GÌŒ‹ó>¹gF²Iroã™™BÄP•Ü óÏŠôoéó#i‚4ûÁû`2e¦ÝVb/IQ ~M^©šØ¹†ñ ÑûíÖ»s °›¡».~.o÷Â5!…ÚMá8㯠rsÈBÁÿ‡‹sÚEQ”mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶m[³qÖ}Ü÷*•‘ÔH‰öŽüJ\ YZ ÝU’ÇhFl³m_“yÑõd¨;ȇSÔQ®ÕöÆ'gÉ) @¯,:;,!ª ŠÖlÊEJ¹GþäЯÆçÑAB²({oË3oÀ¸aó¶¶J>÷îà–áž%Égò¢'s'ên·ÁÛ{*òïb1kg ü¬L¦ï1 ">8s}ã“Gø ë¡×Ò£ÖÀõ]U»ìIª˜HÍŠdQHJfLõâ8ànö$81my—ÊÝOeªé5ˆ³›#4KÖ°¶ŽFï‰ñˆIbyÐn˜«1‰¯\œ0fQ_¤Qu *1 ¨B_)ÓzåfCGægˆòqÙêI €gËÌ™²gm³¥“¸X?†f/?›lŸr¾÷è­XœÍv˘G<|ÃûAi²Œ>{/+(Ì‘ˆj±JGbЏ0hàY'—¬.Rãp©ôBæFMìÎ= èÆåZO¬ Q]X` )Û¬nÁÜ Š‚â‚mý©‘aÛ÷ÖWg\­V6Y~¿û€lÃ_heüsóy¦këYÌí>e§aPÆF8QÜ<‚¤aL‹ÎYáù›4âÐgv3ÞeQzMßÛN¥_•J?–‡ç°û¥5~ÇÉ«F‚jÅ¡Í9f¡ƒ/5¦ÿý„ “ýPøÒVÁܪ Ë(5|<ñÉK¸O¢•±#¢„$Ä ù|1 ‘ì×|àFNùy.gpõ"îÄ']Q`€DÞÙ Ö5÷וrªÍtÒýþ}å–‘ìÕ;ßBØ)ϸô-ÁÌB©CRÇ`1*û}à> ß­ÖÜNe´¸‘ÔžËØËÆ…‡«ö‹Ÿ:–H¨Ê'v ŸAäNö‰Ù·ÝZb(­ É‘ÎjYÐ+>j^º Jg:ÖÉNf[’†µ œR}wíë|™1*X˜ŠÑfl[Ë ¥zK¢Â³ðõ^ó“¿ùH”Ã3mv µ>(ô‹1œAeæ^ØÖú'—% ±-½=Í„8¬ æ²§2º§zgþAÚÜRX ›²Š&µ÷WmÑ(Üð;œ A}U\R13¤à9F‘öðçé8&ðé+sgy[µ“ã£Q*òÒ‡“gØÍ”bÔ0ùØÑ'§¿ð0*פ!‹G®Õ§ýÿéƒý6UÄA•‹ ¸”ž’¦¿rX¾'ެ”é}WÑògÂõôß1H± x.§«rŠƒ¹ÜÌaË*¼9B•׸ñ»˜1.&°³*œ'[¸K€j¾|¸Z'M¡¤óûKÌŠ»jq[ƒs‘¸t@I¢«/I|èo=ò“AÎ,ÚXÆ,2ïÖg3zúyé_'>CÀ~¥ÎâÙˆ£nª`ß–d€|BÒZŸPÉ@è|ÉŶÛU¸?WÌÞåg¿ð&gjüÓà<$Pà¯ÕcŠT‰ûx"iÕö/¸UÁqµªTri"/³øš>, B²óA2ÿx%™Ûù'–¾¯Ë °y2Þe‹öd²åÛš GðEôÝ…¦š.b©e¢ë9î…"?yÃÒ5lì ö/À& ‘)/‰#“©:ĘÄïÂ0÷¯Mãg”Cvkˆ¥¹(7ÎïWÝ…TE+¤ ‡e©àä÷`õº¡P-Qç€JÚ—þ(Mõ_MþVºÞ¨Ê‡†_þÙGŽþõç>±ñz}K/xËÒyQ›»R&x§òßLa–r71Æ!΂r«ÍÕ¦›à pHlO5†Š¿†Úð/Ó5Á‹Jz±¥ø9g13É1¥úÌáö‹0Ÿ©¤–jQ«ksèÇ·ˆ«où)ÛºJÓjþ¦ºæþ¤yŽ0GÎÖÎ UUãÌ Õ²ÅȨÌb߆Ò-È5]ÆjÃ|X~²Cà|’ˆÉyqbBn .'8ÿ8Ò„Dn¬fØ5”@«H9ùó³õÜy¥%uy:û•;¥]| ‡ ÞœÀéú½º-ó9ë>3è),5y4oö)s´—ÎoVÈ †‚м„N´ïÐX§[²×““ –ëÒõÏ FÛì> :´ëÔ?þÈBÛVZÍ^BK;<í>A7öð'ýs6 F0 {õªÝ¾~AÕ´ã~Ť¶‰ ÇòÑIÖR¼mUmr‰KOË ³lôóyPø]ŠÂjòíne#w–ÒŸÉqƦT\ÔÀvõßy[ÑÂtbáUm»º4›jÎÍúƒ´­IÚlš?.o}c'Wÿ~eÂqeÚ :€Q9­.Tu;!:ÃË$éùkrQgé#µa˜$ö´¹kËÙÆŒS õõ %ž\üpÞþ¦zåÛs›öõ’ %Ž!ÛuìÌÞЮ]ëñGÖjFÞu½g´Ó©‰M§˜&ÙmK¢Y½¯æ`s ÀÕDeê%PË•£@mV¶×«QZ²,°[ã›×iV8ô—Ê?J»é"¼A°Â1VÁ‹Ÿ>I°u[‚‡“®ËŸa ƒµMBD/É-j'Þo4f¬¿ÙÂÈ™[Á-~ØoX¾:ušÖ8X›òdÃ-‡Ò6D+POÀFŽ}A”ãÆÔ^ îêúÀnþömÚX€oFd­˜¬³Öj*ìP€õƒó)8N”+{ûV»¯EçÒ»zþPt¿¬¢o–aô¹€Hì¾Í!9%Àɹҟÿ"£ùNî˜y°ˆ9 èÿësw!2Hš¯Øv L­%#9/7gyRhXì…OAI´„³¶´í|£z)Ąֈ)!ìVÊ#VÎn« Ù2")Ò”Eî³iÛ¯8Ípm ×=yO`Þ÷ žd]kv2'Ï÷ÕGµ€a—Å”ÏÕ`”"µQ•1n•Ž@‡h0©Ís™)fÜ3Xã·î#]¤¹ñ¹ÎàsTW#ü±1zÁu\KIÀ=hˆãÙÝ.}‡õ}ˆH˜i3@ ä•QÓí/Ø|§x, •R¤wþmDÕ%X‘‡ÑÀ{<|ª+föI†MùÆ+È€ôËò–=dÔ'—¨¬Lü&¿¾Å Æ…Êͤ'ÿ m?-ÒœC‡u3}¿ÝÚÅQRÍ4ºÛãU×í·ÎÏé%CýЗ‰h6¹-›3Ü,Dx”½Oìâ.ïqu‹Oé"¶]Ükqhý.«/i†h€ÏC•”º4øTˆêçïW·LŒ. iYqÎs~Úªu‘=Üȯ]Nb¾Ü”j5@ƒÎXHÒÌ‚¬lÓèêÞz–Ò'¯SrSužûTô—súañJzß­§ | —„º#rs? Œ÷w» QtìÚÄûçûkrî]·ð‹c¡!S°0§gÂbH†O¨ƽQ iÄ «¶n0] îÊ<2 ¥*:Ÿ…ÕÆo:«Èw}>Hø4†Ôi«áëIyÌ %d”5ÝèmYMìùV…—†hånÒ£P{FRÌ‘r›ñȪ‚·»ñãñÚ9Ä’¤ðëǧ‚?¿ÿ~°?ø?ñ.îTYeGÇwálqi’9¥X« ŽŠ^îZ°fK¦Y;ìJ'É„¹-5›>bæšµwŠ'­àÑš'*‚a,\ðŠ~™JÈS Äêˆ+mm}&;x$9ãBÞ Îÿ#¡sÿ ‰¥ÁÈ*1×]Wšgœ¦ýxr£nŒOUÔ²FV!¨žˆm°c¼Øú¦tj=b‰àóI JXzW•:¾O³¾6d#ÍO-Dt\óA î¡b±'Shüš,¨â›Æ?ïý˜ë…Àù—}ÃpZ$»)I zÏþøv)[ÑÓˆ&1ãªé¶—6¢FÔ}ãåÊæXŸ®ei§MJÅìõꢔ #Ÿ;9 æmd ·¶·:òPnfýS€ÇÎý¯g m {}±Ò¹ÒôcÃ2E;9‡„ÖR%‡v(Wüå>òqoÈ)ŒJ•ÍÐ=°ûôDa‚ºü 'Ïøµ@k’¦$ ßž.ñj-FyΤLB•Ë‹b%A8§>G·A ïù¶øßȵqÞÖA”¬ùÙeg, Y»f0Á?J7¶h`4´`|b;Ù(×Àjž\,?xIÍ•{°ßÀ»¥|oÖÊšl‰×e3:wæ/cÙJ¥8U¹X’z°“þDûc¬©—`€ƒ¬{âÂ&: Æì¢¯w‡´ûÕµ Ví„ò*™÷·ûIa}IÔ„$a Šè˜9‰¢ˆŸ«ìÑ”™`´+ðdšãUÆyS#l;-‚$¬ÈדN‰Áb>i…e ¶f‡¯î {Èr£±SÖ5ø^ôÌ!ÍÜZ<îwU+o%6æ*³Þ_Óé.Z»ò¼ü ³íÐJ¿KüŽLŽ@$#IëFÊî…/¼4û~Ï´ºå…ÚNÈ DýsQš\ÏŒæÓ&È~øcñ¶5Ã0ˆ?Óx È!·Y•P+~Uœ÷œ-½_a5}ü/j­#Œ±›Y™¼×NFP'ú8 vÞ,”Tß¿ˆ .…#›àwo¨‘ 8‡n¦”€ ]“3.Щ+¹aº•\%‚ºº8-áÔkQ§Á)½Á¨LËÆ/€š)¢ ]ívJÅ3J…5KKp¥ØPeº¼Sé0²-Äà×R·àìž;!âH½Ý<]åJñmÆQË6œlÜ2|['ú¯~Ie„p>H›v6G_.‡¥'° m|Ø…+¹ölü®‰!‹õ:ßë!„u>5>X„¢¦­ó1¿¬¨ÛØ’ß.YBm +®Ù^’2“•ðm…U’ªüΚêÒÔ{KÊ¡…8DÖ)ùèï ñ7a_Ò@{qƒL…>ªï Ô!£NÀrx’æ¯ÞúyÝW¬ê&]•ñ!wtsC&IÑÖ~hºìeqš™-ÔÁ¶]Éä±7šwÂ_:èÏÊŸ’+ ÎI2Eðèî<±Ó*w˜'õ¼8ç¤&¤V…âšÓÛ Ï%Í1±9®mÛyæC9&)DNŠÊÌqËþf¼Qú†(Kª‹Hzû(œÇ”=0:#tïÌq©{i¦.ïžÿ~ÒM–P#ÿ‘óy÷ϧïŸÜ¤ôѬâ÷>ú’µƒKÁ…HtOfNë”â”óêLÐ6ê"€œ¶›õ2E-%ɦwzhüc…XÀçÌŒ³sÌ×fÍzÜ\T¿;4_Ö(üÛÇBȧTŸ±LߤÜÏg¤Jð£rÝÙ'Šõj4Éž­—\ãfÑÅÌÕ£¡ ]t¡L7—¬«¯Ø")Í÷f¼vc¡¢ƒÅVš*¶a>˜‰Dן„Ý~Ÿó•‚p’O·µÈZL³õÉ/´#%'×U’Bô•)ˆ®¥áU”]ÂÎòίa¡[^õ†¼lj”GQ)Ê #°îîRPMž/á°ªºujNtËÜ·>\Në¸i£ZýÂ#N?JJ­s{ÈR1ÃhvdWY¹1k}ü„‡FètmB>3´ºvÓ’z̆& `±«ü-©Ò¬ºm:Ö–qù•u÷‹{¦'PÚK4mýÊȪûGzk&`',çoŠçkètcÜ £¸<{fUÅMcÀƒð{çæ^æëëc5 !kÝ.SÙ¾[OeÞWJ¦2këñØ9°Å8³2†¶¨Êg›¡hˆ[S·4©çÍùN›£“[ãìÚ>)’Þc8–À<Ù ¾Nåi˜ncø˜¼T÷IÉøt‚EØa±é™¸7Úö¡GñZ{?Ï{Ú³×€äs_! ±ctýׄ±Ä] ›×Ôw)¯nÀí^æçù\ÈŸÒE·\ú‚÷'Ûý¤.©ÖäÁ·äKsÿ@ÃÔщ3Ä&ç—Xè¾§U“¡²MKz©ñ£0¤s%ˆÃƒ-(R¨~:óÅFEÃý>¤œ'ƒ+Qø]ÊXfð½8k–à}Cè^M òeË꙯z”ÚFÊî"½´s!3×µbAœ•à¹Kÿ×±:dzª9<ŠT^¾šRÿ1šŸ³‡*ë1â]”õºÞ+‰)$Çf©)‡Ðü°,z:´p ®Gy—þÍ|Ëí €ò%†ôO5j(W—e¾ïåªó5(>yÈþïø‚/˜PÈ¥;(‡,Ë´.’ÌîkJ›3kâÒDx÷Ⱥïg••²fÓXc™úc‡. ,º¿›–§Ös5ìÍ5§”ɸaóäÅk¿…s¦0Ñøþv+f%û¬?k|í±„0]¥7qeñÚOÚöü›à´ŠÕæÈÕЫ_/ÏOÃ}èl±¨.1jÎOìZL‘¨PX´Úѧ ¤¬<·½½9ôôÈ†Ý ”ÏJãäðiS®h|e؇'ç€à$ XjÒUæ“<¤-×NZlÎæ®2,Wzøî¶Š0þ¼è3À„ÆzA@íZCœ|£ÇEWM½àÏÏk²÷µú»Ì/Ï õ÷„ˆâ„Eý·Ð *>/ ó†’ﵜ-.uïã~yh….¦íJ ^ç|vsî1G í”êñ/3l<Ó*Ínª'-®T÷Þ< 6újÔZïóp ÚnBÌz÷î Œ°6¤JtÃÕ«À:?t̓u1¯9Æ£$Œezâñ6Î#=?'^3*å²×:&Ææ(°6ƒ¨4¨@F4AVKvýD½„”Çöè¨ÇThô¨š,B¥rð'fÚr#jö¥»Ž†‡kmÛ’b=J9®¹Vì&NƒÝýglÅ˶d5ûö5¸‘ïóÁÈz|h`"ÅjÊ4ìw²¡PÞ>åÿpC!·?U<@ÔâFdoYnBJjPÄço9lbQ-”§çÓ¾Q¿|«qYnjkþ“þjÕ$!WˆÉAãœs¯|¢¼­¿Ã¡ÙÙ:˜k›M°µþYÔà™h·Þ>€·;_’ !½Ø½@éU¤’ôÍi—Ãø7l)”œªDвÕÏžc,²:ë]Î7•[,é‰Ït?LXä`ôø€<„›¥´’}¾FšFÐe~çÁŽ$Ë™ñ„R…Ö™"p*á:À'fuÜ>u¯Bç=Àª­K¹šCª71VïSs8ñV߈AÚs!õ–Sye÷¿b y+'ÍèÒy|\ן­/4© ê)k ïJT ¦+¬ÇNü#—–µ­qHÍI&ñ  •Î*ß°ð N(ìÃ>GÖ³qÅš»áÀSᮃ¥ËÚã’n¢àì—JÜ(šÆ×ì$¢kV…ÏNcTÜZ¨¯ÍüDŒCØâ^„5^5<„¹ýN£"ê@ÆTT’ É]ÊT–nö­aˆQŒit}³Gôû ½è{'žÂÝÐûÖjÖ‹÷ãæ›1€˜bH*bÍŸ9«¦©†ÇôL÷U=!WzS줟*œ¸Ž¤Ã êi%°QÊ•NÓiú/Ký±XÒ¿pQ–Þ;£ËÜØÛ{{Q>¿Â"„÷ɨÊkñ5'ÝÔàÝ©0˜š©ns¿Ó™[‡¼àо×+•Àõumgxj+ª‘̯ßTK®•® kºJhz0®Ùñ¥AuOë/UÌçUÞ½ôîÒ·ºqP ¬„ *§ «»dZ‘V¨¸ÇïÍö¸’L¿¦–Ÿí #D*T `%«½#“Æ*‹[úÈôÇàMÈ`(íÆáâ€T·›«ÇÉAÜ‘ã ÄÏU/™Uá=˜ÎÈþi^eà·‰4õGO`aHS±æý4§¶m”O–ŒšhèÒïž ]Vã×oé¾_l‡NH`Yvh—GÙDž ),КPr­È3N©ášoÜQ(Á§ëtve^€Pc T**Qã&E {_‹ËºöEÜZ¡žìX+:åR{Õg5•W›6OƒØŠsŽ‹>ñæ°g²KÓ”¡ HÊçFvÕÖ˜–P×8ÈdˇeµÔ2HdCxy0‡‘ `u³›uÅxGš¤xº~$¡Z¬I(Ð^”Žü‰¶n!Ï]Môè¢FÀtqB~¸ä=Ijß¡x&Y=#y8yèóÈMúìªÇ)2±º*ðô6 “_€Ä¨C+·;пö^ ©"×á pZ3Püñtµ}ÿšé’ßU©Ïìÿ öU”ÅŠœS¯%UÚ±'/…©y›™Ka$¥ÿ û^FýÍ~ÃËÜÚ—Npv‹›0ò/Q›ˆÖੲ³UÄ»Õl1ÔÕ¨8k ³Lrh( ‘–gè˜"Cµp دRzú3ÎÛÐ:äî(’dQ70ŠƼ@O~ØCqÞ ª;‘€N)±‡-.›ž©41:ùE"!KR ;"š!9Pžô¤()·0´FÙfÈñó­Ï—ó# F/0ÂúÍž=Š9QiØ0s¼k“™Œ¥0×€-Å´·¿\{Î]ïÞ^ÃAàÈ&Fnë©À˜Á Þ4n¦î¬:ªM¬\†PK]„_vTýΧ]V÷7ÞÒ;fu…fÒz`Tê‚FõDÈ‹¾°îÔ…1½ãû§øç d;¬hE(Õ›sùY€j¦ïJx´/z9ßÖ'”ìC„¬¾ñ)e-ãÙ“Œí¾‰2)7ï%ǶÄ]…²àîlÛkã.…žì΄·Pÿ5Ð Ñx`ªÆ¸«€:„Æ3À Ûn¶}<³1w—Ó}Ùk×UDã[a?ÉçQ}‡YÆ-ËÀ5á—¶SAǪpQüy Ù€·ob'–íV†ÕÇ[ pAVt²;d§l,˜^÷Ü+Rsïc?ØÛŽü4åCî%; Cöm=ƒøÞâ@~v¤usX;ƒì$Vy?ûƒ/'‹ä*¤zšÂ™X©÷ ¨Ÿ/ƒ+ º¢=…é¿z%=Ñ—?©ó‹©A:ͲßLÆØaè§`d<ràjõ²Å79œ@±uäå—Èÿ{hË,pvÐèqvµÛfcVu {µ5á¬>Óï±.–ãé)øô¯”%_|p X¬¬M¿f˦²¨fîP%¶Ba‹Ï¾G¸{éûãtÞŠö+µ©úCæÈ™O/tôI1œ÷šA3Èœ¹;Züß»ÑqWlð90¯¯iTa^>ulÈÿ(&±õí©–ÄOÓˆeô‰øVßÏ!ìÏs–£:É#½¬oWUY#ã7hé#?±œÂÝ”½‹Bâípo̘I!ð5I ´…ŠNJ5`ªØ–z,Pà8@õXc%U’ÓƒQêNQÉ;Á¡·S~ÿÊcy$5a×ê½±sšôõ£ ö^9ÉÒÄU¶²'M½øS™vÓ tDñ¶š5ŒÒC»°Ž9¤·SòƒïvP;˜É5±§çÂߊBoî_\þ*ëe?â'ÛW2àih±ÏÍZØ1çá!„ ÊN¡äOŽàcœƒFâ¿M=]Ù„…ŽôZ÷q*ù ®D"ä-囿Ø'k»´ ® NqÓPÍO"ù7 —¹ÊìiK$„J¡[·é©‹ #å(JõWE„C;\.1b ÷îº1T%âZU åÇ7{7ÒØAŸ+~>Qz6êúãä¡­¿hã¼éJ°½]W§*É’1îßä&¾ð•ί:Sž ©;¢J¼ÑmµEAµý¡¦è®ò¿kœÐ Ê}šM ‚$.M¾‹½×?TRƒªƒ xu pÛ6KjŒ¿BÖó¢žH¿4‘oÜ¡RÌŠ•X¬¿Vޝk»“öx¶T‚µk%ȶ™Þ>þRwÜLÉ‘5¯ôî.ôèB c7E#•Gü;¯Ø3æ¶l Œ„V¢mÀ ¨aÜ‚ïs9jà0-dkT¢x+]¦ÑQH·1UGï÷Ï‘ D ;”ñ‚OÀçïµyÞÀ!`®iUÿÅŽÞþƒÊ -òµüw)táœûÙñ”v3e¨YäPí*eåªïvÉû#‰`T7+ºþí ¿æGkW9VjNûKµ ÷9é_S{Õ®n0é¡:†tßv¸¡3pįVA]ˆHa³eýæ,Þ/$ãÚ.ž}Ôì.S¬1õ7ÉZ…ÓRéŠx!üÕð²°c¶$Ý-ääC®x†ùÕ§+±ˆí‚ålÉ )%¿´Ì! SQ÷ß?á»…^qQ#ªTí‚x¯„¶äÚ¬HÔ®,Ú4m¯õ±ÞÛŒlJãCt„SQŠÌéT˜e·å*sYý1Œ•Ap#αV8O6Ï©ZØktÎÿý]V4^ ö«ƒWOƒ"<¹2žE?¬GHè½¢¬:Í8‚®|àù˜œ=ë0¦Ê1¼¬»« åú °kyQæ­„äˆ~ÁÈOŸ‡èqÊ¡=[`'àAvuÇÚ,(K@W¼'ˆî™]á93§ŠÆ_à‘¸ZB» €·åO( K_ŽÛ6[ #ácϨC`ĪŠ¶žTãH}!I¸á‹ÑE«F'žÛÇ£T”a£Ð¯BßWãçå{œ); jôJjøÊyÌ‚8ÈÇI([™Šã-O§jº¿ŠeB¢xÄe‰ö}ã(½[·:xzÃ6ÅÈK=Sú®¶ =^.Œ©.1÷"=ÿÜàÍ-zO¹ ›ÕÏŒïÊéºVçL¬Ÿ‹ƒ±%ȸžð*õ_Âbö"¡Eé1VHç;R…·Ðä©÷ñ?áÐðN± (™K¶ˆS…ã·í| Ý)"!èߺí¼ Ž4•xl´z:;KrØ‚°)ã{ÂUY†~‰Ü«§óäç•!VqÊ×k/¹¹Éʨ×ÞF/¼ù˜:¦ }hôzáÍ+ðSg‚9l—?‚ a9q·£€Ö ÷(y€Ùö:†e€ñˆûËqÍÅGÝô‚V°f9ŸÀ !òü+U–‘&²´¹VñÆIΆ{ÙK¢¬EäñeÃùù—˜.¢\[!…Mv8š ¬ ¡G(H4&Ev±º¸¹‰H™Ü©œ5E:‹—2¿e`þ¤»ö¼ï݈̆‡Šº%½è:«¾{ÑüÈÀl[edž¤RÄÊÞ¨,³Î×ÍÏk„™)“D)S­ v€KíÛeÜ9°ôV L‚@&X"ã£@†Uë§Ðœ­³ï-û¶ÞâÞÄ÷¸Šë¼d”8OÉ\¿úšÍŸ+¡·Œ¾M7J9~##íÿ"aJý®Û®7±ۂ´,,´å’2XÈßhvžç2C–^ФҴI )òI»Öª<‡{1²3ÊŸúë 8I0>Á[œå1ƒt8¬¿Aõ®w‡CüÉÖôæ¢(=ùÕC8"R)-ëª+ú6ý–(€ú2y±’ª=5ñ*™Þ Mû_+«`Lò· îƒ {×´kñÄÉ'æ¡Î<úÍø6HÏ Åe[ öjç2:d=In½$FC•ÉåZ†Èá 3§koÔ¡ 4D£áÐEƒØÎì/f`46¶›øÂŸE<ÙéýœÍý³àTE‚Ïñ ÓJùw‚£‹œáבm#T\¶Ž#VûWlëË)óýxn[eHá>­tYèŒV· %½Ùk?×-ÖÜv,JÉ8¥q«^_\Ç2Ø"}n25º´@ e(E;¯EÎ8°âh<•d#D)ì¢MR{ ‹Î©O“é ET»•¬µ gÆZ“v}ŸCv³¢ª)ÕuU¿ªúÄ¡a¸/;O,ÌÖxš¦7žáDKö”‹MÃl‹äIAC“ƒ ¿í`÷úᬮÆ~ŸÖ ªiÓjǾ`RúôlnùH\¯Lg–Ri>ÏŠZ¸º—SuW!„ymÓôy™úJ ´Š X8„kTf–ÑgõU>¹îiŒõJö< žèøÇ7M÷}L¬];«œÙ4t½§¦F›/€pµ·MDOKÁÎhc—*«²¥þ}`!œa±Õ±“£FˆRxŸŒ1ÿ@06Ïœï騔rš2pn²'¿Î B‰P~,«)Ž\ÈZ¤ã’u<”Býe®«’ŠS ­eu ¬ÆÀ‘çjh¯Q9P#ÔüÓAäÁöQÎEò¢«t´uFQÚml¸ðÈ„¬¯hа̂VîgQ«~ŸŠÝéI øGÓÊÿ¢)17ýO5*Ø vP×¾½¡¾Ú‚ÿi•ùÜ·Ñ6‚nØVí§E~‚Ÿ84 $Cìä©ysp“bTMØim埲¼*fº/™0‡a== „QÅÎÏ@ž‚çÉÏ]Ÿ¹'âSå8ü$Úî2R:Õä% Á拃-ÖÂBf´³(ö…=€Eø­U+TÀQŸhLÏpï÷8Âѱ2Û/7¢çì’Ä%\¬GÀ¨Üó\œš<çÓd=² –%“ˆ†ö0ÙÔÚøÿ¬»N!]Þèz@2—èª\èÑÉÌÔ÷)E<»9<î)½é¤#ÎK¯Ô×* á•Þ˜·ð5{–¶ËÙº d.åD(½zH¢ID&µ^m–zòb†`  Äʼn¶¿I¿í³¯_~ÞkÎ2°…x– òaB¦çš°AÉ+q&ŽY-Y¼wX"17š]c·þ+wsuJð¹äçóŸ ¸”æ’Ýâþ=mŸkæŽàœ*°-Ð{,ðs§Íi2ãPj Œü·ãª>Ç,¤3µÕDî¢×m½í²µÞYXïU‚•ŒMòdž¾‘c9f×Çùô}–…Ïj%;H,Ÿ°ÊB=×H¯eÿΪšýÖè§(äïòh ލŽQ5oÿ=w¹Kkñþ ß6×]ÂMvCòV8ó9ÃÑ5ÛZK23ÎäëgzÀçy{P.‰øXÏÚå Ù_Ëì|P4µRKIê ÿ1Ü¥—÷?äÚÔ³†¼ZÊù×Y¢I‚KØ¡™Iðü½i‹Y”ET6p8(yK5*æ@§ØKŸÈËwz‚‡ðæKuÕBõywŸµFÊõ-å_* T6µ’»ÄÈâšHUˆvn–×Z Ô æü <ÁËìøP2ö¨N˜bµ é~m?°l°]þðïl `7%¤Ue†K—þ¶8ýhߥ夢Úöò¼–îÜg³¸¦ì›•`ü¡n)›:™ »ðw…¾¾÷6ˆ?¸<5‡eVAëŽlí™3ÎÛƒ'K¡–Œîp·ƒsܧZ†O;Ç©^MéBÑ…m¬‰}j´â¾¢ï±ýë¼Æõ=’¢Ì;¸aÁ“¬ËyÜ'G©ëèήÃUÚ9 hãÀ ÿd°¥\ê Lî->˜*e4w Q¹Ï× þ­¼Û5â4Å”UR.ÿ‡3áËËåMu¯ˆÉÏ蛸^ßÐ+ ¼=ÔÖÆÒÐ:_;n›Õ?¾y Åø/ÁÆQšMÑeß ö@»Þ`‚ÔCŽuŸìzr^†34fÛ^p ˜EÑýÝi{}LEâ0„í…—íœ0(¹åf­,3Û¢|Êù7`1UK(rbdì'›6ˆª¾+]X«O±Ït¹”ÄÄbmKÓg¼òƒãskÌÎÒ¨0M4!Xªd<ÇŠÅ5w?Rä+ž§T-’;:V ”`ûn7tí5§7#cmˆ••±ýdS&°n’¬?ÌgÂêê…'¥‘I"7^^öGpýûþtŸÖ—wòÏkŠHVÊÊ{`VpO™9¥Å„D(ü"†Ó³úwLa‘´*OÀÝ Gt¹%áîFüðP ô^'ý® D“¡N·íeR¯UÒk[5v1!¨;àÆßÖÀ=¦O,!u¿ØµŠ£4K¿À*pªÂLÁOo¥þ$\µ~àÔÙ+ðXb*¥ƒëÚ#›¢é õ¤XêP &@1¥¸*Lã¨Ó^cª½¨í,(;ÀGó˜;A½FÛtÂ"Rë5Ü$Xd‚(60øŽŸqy*)§wèQ&çÜàYNÝKׯGÀ* —–ªÊïUg½ò4oÅÅrjkȮۃI}–÷”ÎŒç’d¡GÅpµ(Ñ’¤%„XY¥pƒL£Ìàæ„«Ž¥ ÚÆJ¸3™œz”ïN¤ùk^Þ JJð ’Rr’ÎÌ2»˜¥­Œr‡·|ÜVh;øä©bÍŠjãÑRWW}f…T pkâB[G;¶í–Ë„ìÁ¸BÒuæLõà¤à•»\Âë½:núoÖùë¡:78Ä#k'º:Ô>–ï(yƒ^$eÛA±ý„•ºâ›'jýÙ:K| …2 >·Lj… ]}S-²ð–0…˜ú}›0Ràn-ð’­wrt\€¸Ççõ졾Ì_Rÿ±"UU˜/â?©¢FÐfâXžb½ Cc,ÌRâm˜`øk²l ˆ‰ÊÄ3Ø m‰l’ö·“H2d_cYeü);–©…*˜uYÿdŠôƒ„Àz‚Ä+/eÿóB_ºèSUäò¬,’6Œ´ã&¯qŒ<™jßCf-Z‘Ž2w³BH€U<P̤ˆ{%ë³k´Bgò_6þä2Íjü"òhvg÷t"~/ë·Gmñ®6›/¤Ö§^vÇd*ðlFyYÔ/54ÀþB¹¬­õL^93™™Àˆ§r\ÑN›oSšòÁ1ÖS63ý×y/rôÇ舰›ÞÎ?P¹_¼žëv(¼[‘€¸·Úúªª¥è¹,äá½þÝákp*÷œG´§Pé#Ľí×A' éø„*…à)Ž®¨WËBd!Í¿3³µÜ”ÉR±Ü{É%‡ I,áž“"oÐMý%9#]{¢É¥ž7«¡×q_ÀM5î5:œ0ˆ2“a±«£×Y$`å¼êØo°çwïnEYû14㋞À‡Ã4¡i„ò­¼ª¦i/Þ‰z&O ÙÈx%ÄJ9‹ÿÀÍâC†{™ØÉì?3ùÏG/qFì1Ì/$3$ L11¬ë"ÁÐc/J5‡ÙQðÎVA«ƒ×Þ0sâ6°a$xs|Ê@J#§só¬ '±V!—œóU挘þv¡Ì¬³‰%;² ­²²ê«/± òd7Gªƒ¥¸kо,×b†n:ìé@ œ‡§[ì»Ðt9)ÅÓ55µ¼IÅÑaŽø–o^ôìŰüØúÁžôEi³Õò@ÝoMÝØ€°×ÃRÜ^¼°× ÕÝì´€§tí(,ásD0Ï¿„þ¨½Y49³f(üõNmtzuhʪ8…"­ ÙÏû·ßî"2ªãˆÎÎ|i©F¼vIáø+–ÿNxK[ï_/–`¯®ïÕñAŸÀq›ø Õê°™0&á\E%ø`û_Åm@_÷PyË£ãÆé:ü™ëb 85²*UFhú3ÔéúÒïåŽâ HÚ*ÐäÝt!Wõ+=bH˜YM÷ÖlB«ÕNVR6 ™,¡¤‘âe–¦î0aÀ)%»ã¬áÄ?~å½í$YZWÛîç°>¿ âñêöX˜H×òeÍ_¯¨o¥2Ôw°³Æš´ÅNÂQ^6€¾ÿñƒu¼h¿óþ"ú¢QÉöDŒ£´#õø|p}{:ô¿ªÌ‡j­ ÎäPÕƦR¨»"îêåYÆÚÒæá:#zûCõ! ÷±Ñk&<&Ô¿8DÞ­´­ ø!8³jÊhJ›$ lXm^>9‚ÿ˜NlÃè\l¸©e¶et=dºE±¥TW… QJÛï$¯SÀ¬oÞ€íÝE|€]Cû*Ö÷£Ñòú©wzs‡¼íd· ^Õ÷çíNG>åg-OÍ‹ÞF™ešXž9Êèæ‡¯Ë#Æý‹[ÝŸøæìgN§$µ]1ÊÍïPu•€a\ ˆ­—ù¾GÐ#Uå7Ù‡'‘ušEmLÔµô$#á̉›yN^ÖÆq#ÞÄ^kÿbìÌÙßûJ«ìO¼f«¹ (%Æö·}‰‘“*Ä plÇ›±]Qo¦í Ì·—…‡¿WŠ×²p•Yk›51:¶uN€w&¦ÊD‘ǰ¥~b0£™âz÷Éÿ†‚>‹Ê‡P$éŒúÒp0¯eˆ³uGC}K--´Q‰ÕÏ8©6‰Õ¡tëT¹oÂl|Žiò¤À&Vazcqß.ƒ¢ATçüm¤ ùÛWžAd€É. 2‘ÉâìHÿ¡”FôFTÊ®Ëpi€t5~sùòmœöxÄNÈ^X”v¿+ž˜"h|*U!ÜV1üÑ+Jî›N\r–‰™B‚mµ¹ ÅÓŽp–ÐÇÍ@úæk*zý›ëXÊåÚ1¶{îÛ©º -y£1Œð»My­r¬é¦q¸Oû/Ú˜8ûyröMª¨P ÉšÝ,NÂnýÊÙÉ¿¯dRß·Ô¶ƒóN3sL3\ænkÆòÕéèjàЯé-¨["^Þ—°÷UÿlU¡™,pÜÒ,ø&"啲Nçºsñì{"ØJSBªå~`fðåFß¡'}"v×IÆÅk:ÜíYEì±(Ÿ‚ †ÓF¯Áê6—÷šÅ¦aȬt;«6z%µ5Å~Ûá=Õ¢tV³PÑ·vþ˜¼k2 6Á+S û°€µpö™I’à(¬Û ÕMiÿ`fÃÓØId®÷ý ÔŸ@/¬›×½s—†”Vð6 †¦ìTF [A<íõçL†dmþ0K á![݇ Í]#í¤Û"‡½¥;wé9ªH¸óï¢+./`ñE’‘•k­,¯ín(›-máË#@©¾7ó|¸õ\% Rš rC¿ Œ« 8øc[Ú²qNy,Ÿryô9Þ=õ;àJC}RôåÔÕ‚¶0â‘g[Ö¶ŠÊ£¤¿Kà¼:l`F2žDœ´Ñz6àK¥„°`¤ óò¤=£ÆÔW³¶„¾lm"Súaë5F“0(SÓ¸Ê<«JeºÒ/†Åxì]®"Ë‘9v4¤q¾J†”àRô7bE ¹šª³]óÀõ_ *Ú†CŠ ÃGæFgÎ@g™ê÷ÏÏ5Ÿjy-1ˆÞÈóqƒ§h׊….¶lÀóÑ<‡Jìø¸ó«Ý#øÆdHœ†Ã›LD9l†ÃHqXB(y?K/ ƒC||uñ¾ Rä +ü:·3’Nö„²§–v†ÿcrnIý±µL*–cÄiÜìaÐKkÔC­Ñè-9ErÈ­WW——®èQž µpðÂGiuA/ T°n Gˆf ”¬ D°Š ¬Þ‘Ü:f œœIuP³ë†Óþ"&_%Ur‡~Ð'CcöX·̼ÓðM\>JUÊ @\amm·–ç)QõÊM”uÊe'B»•j@޼—…K^;º²_ÙçKØË‘áì³ÞŒºF´z6ŽÜðY«C`¿o]8UÓǶx2«Ó‡?ÊÚql°$KñÆ-¶Fˆ…##˜½£KæN#‡¢ú¨Ÿ']ÊÒ§×¹KRvàŸw‚+|5,z2®cê9bh„µ À?TÝ~N²ãed/uç¯uùíëÂýç|>*"07þ …† Û”,•òÌ‘¹H“GBáK¹j‘£¾M(HlsfÓA# …\u}ˆˆ·}- €†õSÕNƒ^¨ÿÝ).*ÎÛ/zæx‡ãÉœ.Í×y…IrŠT о4©·N/‡a-Ã*¬UvI së7ðÎÒÄ+ ¶ªYMÔ‹‹¿ z'µ×ÀDêùÄÏH¥H!'€zcÓPA1åq7k-1r ÎÙØ«âß?`¢k…î’c­àFB{h쟥%’fË1Aò”Ðgƒ<öŒ/á®±™Ï²w¶qñÖ¡Téúþ¾âìfD²AÊæð¯&»Wõ½(wRü§çªÇ0o¯3\¿$ÌL¤ìu•(:¬ÑUyL6‡é õH×K nÏ–Œr¦ùBŸVGtfÎŒ2ÜY×ʾ¸ê˜ÉýJÆÔìQøx8:b¿Ê?æéLŠÂT£!·ŒÇàªÊ~i*&§HþLbF<¨Äe«c´Ð8' Û±Î>S„ÂÄ~èùRb«5×(CëWTÃ’…çHÛú™©Wäð*Õ%†ö&ÒÍ¥Ãáa‚˜ÂÞZ×òhÁ«-“EfO.Žw>·ðÿh —ôǪãþy°'0^‚ËõÊ[ÈÏG(Øï‡½ÿ ®—š^]„ÓÿuÓ<ÖüW?>Ì`Nú°š‹·ZöH«9Ž[Ô§[ãRôuÝ); Ýqéæp­×ªóÚº˜Ò帾î}ÏëÈØ™$F ­i '߀š± MÍŸð0“ÀÓ.EuÝ·”ܳ2{V5 ê$]%ÃË­ÉÔÞIÑù0xÛöʼnNÅ”R`ôöæ»Øj¡8¦=ß9׸b–?úl‘Šé ˆ¨´+õ7ƒrŽÔÙ-=u_Qh.Fé MPÌÿÁ挫@,…ahNq¡.sŸÂ ¤£No.‡O£´…2oNIwQ4[…±ÓÍI‚Jb¬íÞöè2>6†¶Ç0Ê-Sø)<¾N Í]ZÍÔ½þ¨–Ejö4o"I‡X.:Mhã诘½[ks:IÇäNÞ9›iôîóYKÁiªáûvRyí\·%¼}ö·æÞyžASl×+Qn>cU xþ—ªÝŒÝp‡§—îYû–æÐ£™!rž2'ˆº_!¸´ãÖ&kU!’o îÿ6Ȩ_W·s/Ÿ7¸0Þw®þ vîóc±UU~{±ù\ Yô*ð©H!a=8…Ù¿ÄÞ“¤ÔÌ¿xâ¼§è!—×äw¤%fm—¦úó†jr±_äå™Þ…@K?–ǬŽÙáz/êpD«‡)9ÞýŸ; kUkÖvà¾~ÓPsU$" “÷†g|?lXÍ£¼Ñk«¦²¦1ù_^k<ñTÆÖ iŒ÷!Ü$À·—)ÿsŒ3æ†K»›w¯´A®a¬“c`c¦9böÚ”åöiÞJ£ä9:×$x…dªFÔ¦Û¬)Ï—>¦ [µE®w•Mm Ó1½Ï<™Äª¦¥z2¢EW7‡‹Í•ªð!溮&šE'•EéºWù˜úu1©‚Ž žñІ^“³{”’^?h”CÒà!¯Þö€¿{T ÿBG.›;…éà=8"êè=ô1ç«çÁ×!Þ½`ºö,ì?U:Æñ0V¦u äׂS¶gãž±O¶@¹[HÀ²’xìHÂÎ9G :†Ýðïið˜h’'¾È ˜Ý-þ:R$nÝÆq:ä‚d›sªœ½¿òo5Fÿ›ðÉ—Øï€ö7ämÙüêq§ßF¥Ò¤Œ2»Ž¹pCÛÒ˜m‘Ä9î{ëtfh<"õÚºjÂnv¯Téw1óûzhc¿åe;÷Xž Må3i$šXºuT§°Í@‡[°ž€ÎºÈ|ŸÊ¿óº˜x‚6EÏû®˜†îÝìÿ œ¢™´“®þœÏôƒ^%¹ÒJo*–Þ6ŽOÖ2ª -Ù: ‘m3¤4P¢²’çß+Þìü”¨H/ó†ùáž÷úÈÔ½[9-¡üŽfz{ƒKñáÛ.ä*Q¸à0@? ”ÒÎx?êO„5%‰±á“eǵØÁdBSéü/u÷ePÆΕìc«T|qCå¬û¯iÀ'íèG¢Ö½MãvaSRãÖбÛå(Bóà¢+<ª¦˜tÐÐ ø±©™Dåš®œôrƒHvËð ð|{Do~ ß#@™!îÆà¡¯Ö´€Ô¹OÁ4 Æ'5>Z ÜÂf)SÔÛqˆ†é•ØiçׂYÔ´Ô†ù\×½¿·ò¿ÿУõG<á®Ú¥½àGY{ýàžIà¯aàv¯v5ö †œ :ð33⺙yªAêôü+xù·…•@å+fx-‡U¬½?&1‘Ų¡Ò@„X$#;!‰åÞ56tn¹žˆ-LÀB vê[þ m"/@â¢aýrD¯¹N’ê®ÈÛß“il¼–ÚÌd“Éòù]Õ/5RÓã( ¸]¾c»5HÈo©†/djØô‘i¥·v»RnÖ~W %•âg(0›XëÅ%èm­ˆ’—)Ç)/*ÜXõ~üxæ÷¿’£Èž-â:óBÃŽãþ>½ù;V—Që‰Îòý °Ý 5£Ñ ݦàÃ2<¶;ƶ>ÉÿÃMë!™EáS’8ÆTòÏbÖ6¸lTX—‹r_]Ðê ž-¢Iƒ‹,c!7ê®öÕ»î€+?.“wà­‘Q̸þ⨧n@j1¯пâFU){m«Á}^Ÿ½Ÿ¦å$¨x@{¦+êFŸš8–ÒÖýMjÌŠø˜D½®yª^/N|2US‘±ˆ5KuAŠ롎7÷Âj(»vÎZ@Å=°±s¥K¶2½HÈ.ÝåPqñXvâ}Ù HjÝàË\y!ñêàkŸ,ž^ôsL4 ]`Ý»©ø\BÍlôÐnÌi]l`‘¨É<QY­Ä -ˆ$ïñÑHŸ ©, ‰»{[Üè@SýgÖ­Ò”-}ðr ó;O=¹)t]zR »\¼O‰jcËôy[<‘ZΦýÏçÜh“ç²/TÎ:~†âf7{Rj.ã.G Y4S? Rh‰Ãü"·_ = „8jeIgÍ(˜·ÈvCH@À)›fNšTíX§sQ¸…jR,uÅÝ둼Ñü¨»ªËç(o‚€×EÛKbóÌe̽é¼CA!°3.a=ziá ×múÒBscž’ÒÀ•|¡ÐmbÌ"ñT‡„ýƒ7Ê˦¥Ë¨ìN™³Â¡þªÙå&TG 0yvÏçË&—úKK8RW¹¸2#í^…þJ—h̦ endstream endobj 392 0 obj << /Length1 725 /Length2 36384 /Length3 0 /Length 36955 /Filter /FlateDecode >> stream xÚl»spfÏÚ.Û˜8yâLlÛ¶mó‰mÛÉĘض‰mÛÉÄú~{ï³ßS﩯Ö?7«¯¾ú^«îîZMN,î`ï¢êéhÆDÇDÏÈ PWUebäb0Ò³À‘“‹ÍŒ\¬ìE\̸f¦3G3€™‘‘ Ž âàè ´²°tP™üü· nkdjeg¨;Ø:¸Y™XxÝÜÜÝœ]é®üôÿ$©˜™\,ÍæV¶fE-)y •„¼@ÂÌÞ hd Pt5¶µ2ÈZ™˜Ù;›ý˜;¶ÿQ&ö¦VÿÂäLÿoönf@—€™ìrbªBâ òª1U€‘½)@VòŸt{gî¢ÍL\\þ5;Z€ËÿH¶Fÿ#ÿô?^ Ç$z8&&€©•‰ ÀØÌÂÊŽá_¼IÙ›;Øÿc6uuü¯ë@ÎÿàPýÃáO€©™ù?Ñ®¶¶òFvf*;GW3 @ÎÁÔ hø÷î@«,ÿ 5²³²õüÿ þ?R.Fÿ!doñ}Œÿ1Y9‹[y˜™*Z¹ü÷ ÐÕì?f ³ÿ¬œ™©•«ÝÒÍþáäŸU5u°·õü?#þ3•Ç ¤"¯¨©Ló?Eðo·˜½‰ƒ©•½@Åå>€¦ÿcø·[ÑÈê?ô_,ÿ­(ÓÿÕåŒ\€VFú•㿞ÿJzÿ7JXØÁÃ›Ž™‘@ÇÂÎ`bacp²0úþ/¸&®@ ™½Ë¿Iÿg.ÿÕÿ]Lfff&pkË&‡ègYçi#íÛ¹°¡ÌMÏâA:Oï“ä›èd:=ŠnëG8-‡vûUÒÑ …¬¦\ h@PPc©ulaÖ¸# +ý!Û_å1x£˜J äæ|b3½PÅËDåYKö+]£-k+8DèQ·VÙpD]}B#o9˜ùLîöïKÌöˆU²o&ž”ϺO”=jœoÞ›öÞ²cçmï-?psÇÁÉJ,x-™§ÅKrî}pEæõ~¸˜¯ÏEY«®­ce—°óp®_¡Åå½U§ñF"¢UŸ†ÌÚ…ƒäwF_Ù:úÖPl7 Ë;bpÿYùyAÿÎŽÓ=è’RãŒ;À^¸¡Æ&É»þ¨n6qäâÝÉeÏucgIXì™@̬ٟµÉ<É‘Ò(süeRçPŠ!ë!u‘½C­LÃSSÙŽpÏÅð*8h1æá–øártÁ8)“dlEÚ×ÌëÖéÛã³gnøÓ M9¦Ù×ê™ÜDÿ b{*½Çç’GÄ å§"ò¶"®Í-…®a¿…Cɼg çN²ùð| fV¼$W>bªúþ¨}„,¶%øßHç8t z9é»Rº ¦[ëÚÌKKd>¬Ç˜_ l¨i4éWAèR [ü7¬_00{Že^«£ŽæKÒvÏÄB¦È n®|ò?¤`E&™ ÏtÛ~B¿Q½ïc»"<[~„zQºWðÍ):«‘½7ªa3šgõÞkæ&¤«šŒ y ý¹˜Ûv8'b6KõœL‚KÖ÷‡óE`z?Á>6:¦²Rce·¿—µ¦F™§N‡æÔÊ×Ã3Æð½f›züJDïœ:2Ûq*³„SãÁR:x¬Sì£Â9Ê£’4r9ÂÍÆÄ3@¤K³TŽ^£œÔß{F5!øÈTÔ‹‹94SJ í#;®¦r5¸iÀX”¡ò¦?!ÖøßöA)Ü~!ˆ8ØmIkÍÓÅœ‚#îŒ;ê­>ÞE ã|!]W…$óú3dúe’Ô”@Ö¬ b_R•ÛŽMSSΦÃÀßÛJ‹:÷Å>B0b5^%ïÕ]žSC‘¦7}< ÜgØZÁ„­üx`%‹™ú …qÔï„ºÌ )žÀzI¡¤~”êhÙÈ_–t ^Ç Rqwì ÇhÒÞŸ*'lIn ìÐ]Üv9–Óñ˜Î}>“nV$~ø©ÚyœGûuð=¤”WšíAíqþÈE¦_º„‘áÌ.i½Á«ñ°±íùDEÙÿh Û¾0{NëÚ MLRqìaÅέ³Æ»ñ쮤ž™¡ð*QISÔeß8âÁ]TQû†z`š|HOQij4'§‡ò¦ æÓ[P~ÿœ$R5Å[•Mÿ0Wc`þ8'Ç—º8U*¯eÞ|áè†ñæøzôÜJ­ú 7®öÚ³^̦(1<;¢Lã{CˆM€ Xç%Pt;)§‘‚–~yCÙ`Êšä’#tÍÙÏõ»†Ú»ç®mŸ/¸ª+N™ïË)æ²rÔIlî@°P6 ùI8BãmyªgÙéÐæ7£YaûÆÚ\i;²Ô—K…Å~¨¡(¾úUÛ& <2¥ä€ÏÉÆ[‘M3azXeE}žÉèO¶v†³N˜—•b_øyà€·ç:ÜuɰeM5× öЏ¢¡LIFo—ß̺Qì]¤ŠR 8|°IEE½cþÄõ ’«Ëµ­¯fWÞ:®çð±=ª7€i\©h½¼ÛµÛhÐ݇LÇb°ÞÄHͧ šßŠýÄÅŒœ#[å â°¤håH…Ø~üÚÍ„ƒóRd)üñÿ\…¤k ¦bØ©ºü!•ß–4ÁKuhþ˜©_õU$®EÅZ¬Îçm¨íaL— vØÞÍ¡PJªµb¦1¥Áˆ ¯Ô¸{G¿ö?È÷åÀÇhýKtˆ»u€ OÁíß©›9m–3~zîæ¬F›på‚¥4óq*îjQ—´ ß Û· |Uî7“ýHâ+Ë­‡[0ò^ˆáëíÌd“YˆÝ$L‘ Nïšõö½"¯ÄE‚"¥õUg–RÀÏù°¢å–Q;b5m×_qDBþë¼:¸ ÇMmg,f»ýîf`½h¸ uòÞäÒäwàµÉ"•M¬D#l+‡|ë< Íë—c{ê1/2ïÜ]€xÛ Uôõë!íþîÒ´ÍÝÂÐ8´>üQ/ÅgÓ• A4à%ˆï]‰3- ‡ÜÁÊ÷cèRGË¥û“_$3§¼ÍnDBjëïw â©i”Ô‘ U7©q»¶ò„CŒ§F±Õ¿} ü¤ÄUÕÑ%»€Ž0"Aq]©î¢6‹[Ÿ(,Žà³s×<.}:t#öÔ#t‡Ð¬ŸéûY–nï…êJ&o"„~M]oÓÞo~é!ú3q-Es¼"°tå°îY:XŸX³;0êÓ.Yá‹ÖŒ¼»çü­‘% ¥+xGž½ ã>Ï®{Jq->”¯…†ÊŠ¢ ¹¨íf‡4'ñ d„.QŠâ`RSù#ØãŸFX8{DcˆÖÊqë}‹  ¸—Ay bѪ ,k%îY6#4(z†+$ñøÉr (ÆÏßA—å3OžÉiÆœZWcÞÉ0·o%ØÄ wà çð2¬†Du±W6¿ ññ÷Fí§NôÈ ã¿Ë–Õ,H, ²EòÀ ö[_6³…@_ž“z‡<·E‹_šF¥5ÈêÍ;UcÏmÚ ùŠê(ñTĆä þFo† ÄÀRòÈ|‚PË ’R(¶tC]ÉYÒÙÐë‹:6+¸¢¢„€æì½Í›î7gxtIgLšI7¥È9öU³5.O#3¨\™ð,b< m>Ö‡X†îSê~yF9vñ³0ä<À~ª±Lël7å Ú²ûøDåd`7<ïõ£g|1m&Û&§"Mpµ;nø2¿„%\6è&'aº&XUFÿF/é'Rö ”æ1æ?fŒfy1;O‹Bþ¤‚ò÷ŠPŽv¡ ŸÁ9Y뢚'(…Bt¸ŽßÐç¸,ÖŒ»Š áûüCާh§µ"÷vôçÕ\3"ÖªÙ\g œPü¥"?¾Í!÷c6 ñp‰ Ê81££’ ÿÖhÇ×-ÊFÏA=E–ºÿÛ«/W’Dã½ûžƒHhlä ¤X¢pàËË=Ã{ì–´ñÂ=5 c³/EÝŸÄEôìUjœÛ Ó;5|<Ɔ‚CÐ]\û,3-Ðrn¿eÒQ×lÝë3I[Öè?ßÞ0”‡U:E¢öòË+z6TןÑ%c¡–…4Ï“$Aù«BÌɬéìüö0 jÖx9 ¿Ã™ WÚg®Þ†6BáÓ+YwRãø;üEëͺŽálj̈́¸šñgÍ5©†a©)œEq–ÊˬJj ÚáAèÛ8­ÃÒÁg9Óƒ˜ôùD˜#BÕDO\‚ôçðS£A[§!ÓX}'P‹Û¾[¯ŠD!Cß|Àd\NªäwnžN׿+¾°Ò·vééÛ;$’'ÑË^¿áÛVu©ÑoFm4¢äjyÞdžNB)m¢?ÒH/ºCñoéxweœM@¢*Üêb“W®›!Þ,Eùô÷G˜#°>+[’ò\ˆe%…Ìoú1ü‹N‡#òW6Ç÷ü/¡Š"@76s·ü`€ïéÞôÎÇèAöé‘òü:“žÈ/B±PòbLÜ0°üGÙÀŽÅŠØÌÕ a×çjµ,Ö•;û”ÕèP-ÏÛ)ÐÛL¾#Xwþ=·TN#h3Ê4–¢›PE+‚ñ™/Þô\4vÕ$Pòd"ÎÊÑ‹ÁŽ»? ?^ªóñ¯¿÷HlB¦ÇÛõ…‹Ž)`&œ9ŠºÆ9®b˜(Sôøìû¦u½…Øü¹È5cX¹™GÐF{kø&ø)~!7-$DN0ˆÖ.ÆÁ~Fƒ=†SKžÙ”ØB"Ä6jl«z£¢]¾÷Ä5½W]¤}CœU±ßnIqEÏ 0öúûnâäâÎù\¬¬§óBÚ/Òt`™…ä¼h8 |Ãú0Ø0•QRœ½³»á³¤Lõ¦›fÜ‘Øé»!\ó8t(3Ù?Ò,Õ°®nQýRl-†~!Œ ´”Ö¥‘¦}Úñpu:ÍìF³¹ŒPôÙ¡8ˆs¼­ò¸“4EÓÞ!à xIŠwQ˜Í£ü ._ɱ{™Iؿˠ*‹Tг>ªÅ¨ÜÝBiÍt[Tr{¿(€Z4 ´þË>¶»û íÍ{íø•–4pì±ýtôüº½_´`?l´S¿ð¡è( É´÷‰HÙÒ jÑ2ÃÔÉÝöâÅæËé÷¬‹„&V] ÃÈhŽw@ÉÀš:uÍS×Ôtháí„Ö»E˜,ÉÝfrè€lÍŠ‚&37UVÒ,CW:üÝHÆ+¥(º<ÕT‹• ¶“%…’œÉÙô•åêfXÁ—'pê°)?êdH$昩r;o<4ÁWŠõ˜äS/ÃåOy#t:´¯«)õH‰§©÷dÍÅ¡åMàæ©€àÂý’uW@ Ïrëð ™ ÿ7اyž¾VŽë¿Mâó³ƽ{ÜM6/×{†gÒXšƒ!g|å§—îl637”#âÐlTÓ%«âIê¶nÎ+)¨è\2ø§oCdñè}@}ïwº'wÂ'®ðW¿zâ¤þ´Yž~/fF!]î¯9–’jœŸ×Õ®X-rS¨<â ÝáÎán(Òu¾“âàÜü`å“YøYyQD_ç‚ez_{ì¦)V“ìBHë}1´ºš( Åð u[lˆ™×ÓÑhÌϲ@Ƶïg±ïŠÖ^k‰×û+ŸäŠ›Göœž4˜ò>ŽùK°£ g5[…–=]>2K [ÜÌ@s°z/ÜüT…‘.¯—ÏyýI^hˆlR=«M ñÉhÙ¿môÞö;él;±É^ÙO!¯›e÷A±É³úÜK­õŸbqq5ž¤E#+Üû(•ÏÏIƒ½m&øäÑÍð|ëÿ‚ˆ§èûòëœA_µMÏ\`ÕS)Ã=±‡Cµ‡b ö°N¾µ>mú‡ÇŽ[&ÅO™l¥v¿rЉOa¨E¹¥ýˆ~CÓÜdº:OqIã— T{FÿNÚ±©Ñ ›4X‚Áj#¼º‰B{ð†8Û;³þ» åç¾6§¢Ùÿ…,Hæ O«vñ§Ãq­h妄 +ƒÌ³ÂºP²M“¯± ;ÖP{ž ¼¬ÙÝm>TYÚ!8™Ó ^Æ9‡rßÒæºV–TKq’¬÷ârDÅ5ŸÌ,§Ðd‡AKG~dÈ0w9MZÿÎZøloJ™RðÃb”sc§„%Ìe+íûKÛƒR(å¿S šÜOýTNp`_/Ÿ¢Žybÿ¬\ºy½Ò§zg©)­f´Â³nÈä§vzÿ: “õî| —8†ïO8ùË)è ýšb€6ÓGryrÏä:ÏäÇ€ÌêàF¶òxV Ao‡``†8}ÅË7ÔQÊÿ.æ”Å¥pxÿ.DI.ðÄ/“L^)óG¬MÅ$ù™K H«0Œ{sÙÌÄKƒÅ!RqRÑÖîÌtæÒ¶å †ÉN&§yÁ·:N9šp-èc²qw¥I6ZŒ ãTöÖá&Þõ÷ÄSy˜™,¾.buÔ¢äz‹åO}øvšâ@LX+Û_ñG¬f!ÞՈ܋Ïfð²¶Ÿè$yyý!ÕÇŽ£hXswI<*õm]r½ìÚ¬V“êéî3˜æü&̬ Q‘N‘÷_¾ÊOÑ-Ïõ#hÚú"öaúqhæn×õA&úÕÐ ƒ‰øqþB@èªG¸ú2€ñëôüÝ#›É{Žz P a} ü¢™”Öò§èrDmüŒÍa³y¥£ç-eáåÚ 0æ'A!«ÿÁµŽW-ãðÞG&ÍÖ»ü-ò¨âˆ ¦¤Ç×,‘ÖM5ÚB¾ub óã/¡Ã‘?+«äÂøLl9›^6울7ë¢hº9a©”1,7ÛŽÀÒÆ6/ÛbÞÞëåq‡b}L nÃ¥9ÇîØ™Ú©U•A˜dn&w¨ÇÕFŠ]’ËßDîÊûØóŠËŸO¹TÿigÀÿµJ• Ôɉ•xü†jÛhnu÷lƒªb „ˆIû`—ƒˆv>L6ý¥9:cYë¥?íé¡=¼(gc_lž•rMUA¾´ï'q!¸OqøIµƒ/,šëŸ›)ƒ;!Õ)æv­èž[ «ÇÇ€)©úP·Ó¾Ñ%ajšC_‹ä¾”³dë·{Àûªã‡æMá™*HBsÕScÑjаº(D@TOKeœþÿó~»©å!…Î쳇ûÿHáµÿQksõé ÚK‡|q°Ú¶D¿ôÖ""êÜê…¥Eÿ@Aâ_í}ïÝ|m²’óƒ+ '+ò—­ ‘íßç„Ux„ëX厢,ÿh +­¥×€oßéï&0ï@ê¼ÊÁæ4¸`/f¶ñÑ~|<î…mÍî.B&hUý°¥UåèîEߺ0ços¼?®âÍxŽ %Ø“OnCÇ·”CÆR’ûzeÓ(™=Û:qäKF¡ã²!js¨»òµ© 0W K‰ÝBd‘áF‘œÄ(?xv^¹S»)=“òÓEâI³©Ó— X^(•Á]$˜^£-6êÀdËäYÖ7Ý:/ÏŽÕjšD¬SóI¤@±g¬g[Wd#^_\U¼.à°•Ì6ˆÿÈT*óXæ ïayµãÞª±úrLÄ>S ËS\bÒrãaúúªuÊM t2(-ÕÅh Ýg+1 ¦Vöß5bd´ÌPE£‘îXVï#uºÒ¦šOb]ÊÑH‘žea»`VuhUëz5¥ÅW½˜‚ÈãÜŽ©õû~zqš6Iu‹tŽGâ/ÜèÞçn±!þá]ç^fCj,^JóéV>ºD%Hú§ÑEëEæ´\\Y²,vÎ[ÃÈÏäB^ô%É ñEâ:øýGÎIoI¿®È’¿Ö2ÀǺQ´yᩪùjTkâ6¾»?œeÎ*ññ>Ý=²NÎÑÄNs#¥„±ßÈzÃÄÎÅROrKáê9›þà„AÌê¿%=I³hLÁÝ•¼³ŽÐo/VXýpÙD&øÜˆW›ÊA5¦~c7úI‘¶ µb’XE˜1“jýäÑy$Ê»:5Dé' à)úú•ZܺÛk…ïÁƒ\_ç̤¡_K¹LÚoØÂȶïoþGzV8Y^4º‰’tR,Ù‰HaQNi$l tÌ»‘ü–gs]mM‘êìÌ€C<“nV¬Þƒ6ñ3”f…tÀÐ:|Îë˜iKÉ”¯@6Z‡Hº¬(ÿ£Q€¿üBõ¬Éì¦& ôVyÅ›&@_”¬bÑŠ=`Ai€¿ii,:°l5MJsæ±·Àžj‹VH-2J~ c¹·\÷§N€¬†ÖõÙ‚È7Ó.@G •ÞK ë ~~œyÉÍãZ¢\NôнíR±Z™ö ÑâÝ“Ðù *ØùbònNøzlÞT;LÕ 'üÅb¨Ï,ÖUMiòÀÐ4hXï‰eù óøçq þÕaÃï”NÌ´æ~ž%€½ ¼èñzß6xÞ†—ä4èÕ`4£¾J“’MˆEDPlúæÅõBÁ9ÊМÕ{ÄÊo» NQméîâ?yk”®µ§p9´µI•tèù îY }\ù¦gä,Ï[}žº`Ô®Ö™m9Nˆµ Jjûð­NëÔýÄYˆª86ªVèÄ ?ô*åCDÊaëôyUÐ v(µT«|4šhÆžriäD!¸b½»n2oçº@##i µJmNÄU÷2¨™[øD×°u𖃎èšÑénUõÓyT_ÃóIoY¦ÍD×ʯi*.c̈ŒZ‘fŒpµ¥õ’J4ÇÛô7® äê0ôªv8 ³êk5‘; ¢¿Ñõ¨‹òÇ`oɤÃG¹°Åwpmþºt×p³%sB:›']„»󺙛Ä‹FÓ—PßÕAµÁ Ö)yF{)üyî>™Ã_“ì#ÍœGu÷jt¥E²nãOÃÃ`.Mõ£ÇűØÛö»Ôy»cÂËå5]íö4. vï™Óés=kÜÖºÇ|ãN=*é”T:‹¼w®˜¶ ² –îzÙm2@Dðâ ÷ê4JdÚ´HfR шŒ´s­tp?'mÍOüãe͵Š_&2:ër8K ”–z2§$'úÆZà‘0z<‘ž&¤àR@ŒÏÕwGŸ0ÌϼÏÞ¬àÅ+²µ\Ÿlfƒ?¨ë®ÎÂg½b-×Hô«×'Gvµ3LI3ÇI]„%hP»'~ZK_‚_“Û†‚ϹtöM‰©my×.1$ _ w½±ö-×稬á;–F à â;iãÕ":ûRkr>‚Çk[–Ü­)QP  jÅæ?Ôïÿµ\š—”5Ø(œ¨I$b•%ß…üµz0Ó  xÀHîH—JSéUBÖÌ«—V^VøÎ6³=u3ð…²YdCºl{ó¦Êו*m£!_z‹ñð‡»IÂ3_p}{}âfæQX®¦ÌâVS¯ßÍLÏ/iÒ&[âßÄùŽÂßß÷A¸Ì/oŠD4 ð™G¿mâ [¡d®'¿°´(³è“ËøÌ}õÐã_ã#ÅQ>œxxuuà,™Ïo›v­V‰qȪ®‘pcƒ²!æú[—`pWò·]…H Ë­”üÀa¯bN›"n俥 WrÁ‘aë³æ­5Ó"á¦o…}#çÜ¢FGtÌ2GÇbìÐ×:l¥’[7¢#rΚ;ìv™ãçý»rY§N½ùX]¸r|Ëöô—-±@©çå=ª˜|dü¼”Œ¢£L7%¨Î|Îjïš¾|ü 6Û¶:Z†—w†”ƒhêýRÕˆÇ34ûVdß`L ê\‘ji@ËúRz”¨!aÖ¯26h¬²„Yf盀.¡—ðùÚÄJ]%/ÊîÜö+ëaȽ·¡v)åàêíq¾Ò´ ÑÓ;¾Ñ4Ù^·¡ao;ñ@Á,L4MC&î×zrl &Òµlžl#Ñ!ÈÆ²fóYÙh­ï,§¨0ËbBá%ò7йBÎtøPf£‚T?¢µg Êö 0³¿°)—3}î˜pÇØQW˜YøHr,y¼‰¯x]ï‡Í2ó³Æk¾UKƒ f“Ç`®©ÔIJñ”Nó">G,j~ æ£hw¼9aÆ0V‰IøHfÚ D' n•Qù«”vÅíÚÿ†¡¿¶O¢Ú{†Ô1ÚSk7ßøIÜÁ|âºk¸OÍo}ÐêöÒ~æ‚ÈÀmzG™Å_èÍ&ÎÕzWw™ ÈÔ+ûëyž¿§š¾nI0VÂraƒg¾—ŽPÉ,BÏ>J°d,£Ø?ð½¹Î Ç¡ô4Ìb»*¾Ü¦_.`ÄV Š‚‚]{!!GC•2™b30yؤ~`.Þ1ò½ÊTaîqŸïÖ ƒ€Ÿ¶õVDe§©Ì_ª‡ú8(?ŒLE\ëžñÉ.!E ;>¤Oï4+aæ¡·óe)9BežÈkh†ßÇnmÚp±Ð~é™õè¡­Is¹Aä^·%ˆl®šÔQ÷—¦ 7©˜&£D.‰Az1j$;s›ÎÏñ¹;á²³'à P T嬧úµBíÑ¿¶\¦¹>{’Á‡Ã¶uÁµÌÖª[“É3gFã¿”9ºI¦ÅÀx•ųèp"ÜFG 9"ì¯5Ý}ý¶»Å1;¾7¬¸jë_á6<ë[FFB+OÜü™p㸠¼½ÑºwÙÏž9Ô>û.îÙPÉ‹ØG8NéÇ »7t<=¬5q^¬1Ùýê y•ëã¨Ô’£Æ!…Hœ7!Dvº+i‡Bײög%Õ¿¨gJ ·Öž”¤FˆÖzSGü}³A¢åŸc¥+X» FW@{M¦ØøÛfehº…–;l°ØÀÓ'Ëò££úœ¼Yúóa¬i”}ÿÚ6ãÊ|‘u%÷^\¯oíZVàØþû¡*s¡ÀÛÚÖV pª¯AL“c/U2ø—Açý3t}$ÞØK¿C¥–nµ'Nx±üQ\iCP“µr”1ÀÅY»–²£äÄüc/iä¬2uŽåø„æéûúoPƒÖëwÇQÆÊoêN +ý KÂùe’æ›pÒ’¯4‰æq¬\¾‹÷¯0©†²e’é‹y¶õšŸ¦ êÀJÁÈA[½­+¥ªÝw{j»vW«¡oÐä$Þ„ƒ¤'îö×ÉLŒºTR•„ ÏòÒS¡;í‘ÐI(•¦¯¼þq…óñ!…¨ÔÒßñ Ý Äd¥XÇЩ¶V5H¿#—ƒuº7Õø º)°ºó²Hÿ\Ñ=øfxÃÁð°?L8·‹áR#cõ]'°¯ßh:ôL©µú·£QÅ“æYqšpF&s_ï ’.’þ{”àŸaàŸee ÂÔ5 Ñ\±ZÅy”çÚÌþø:ÎS_e{›7exãçQq^ +z¶ýÝ¿X—9§e÷ÖÞÙY—æ,ºýT ŸXí˪Ûö¥ü^œ àµ6U’r@aDúžD`Wa£×&»ƒhÛ8Ì´Œîòf­³„‰vTÁ꿲9Ë ÍÛEn¿øp®g—…©ú¨bc«a˜:¥…ð:wù¬YÖ®)À!.^[ÄËõvñф׸a¿™åZÄE&8ê¥&ï£èÎ&ÑUÇÌCü™âµÚ¤IošBvˆx]û#O’‰]~?Lû»¤Úp÷-_cücÔŽ‡Ïn¾%ÞAôô„@¶€b]=l÷<„¤ålˆ Ê‚ê¼;~ï²7¾Ž±4©‡VÊ¶éæ ½x2b%åc#pßOæVëoÉ—÷—òD¥ê>…î…Àíb“f_ÆD\’)ÙuÊDnÚq?m9c H„Rø7ÈÏŒPÚ»yÙ(² ’ͱÀ%n¥¯búFÖ¨¯ŽdEýÖucôXArá#Iªà+†òó^ìþ6§Ÿ ¶ÔÅó;ª|©ÊÎù¿$AiÃN}Ú—ñ ôBoaèólÅ|¾ÕCµ\CuZ2àUL&Ah› QÑÅ«>ã…J›”$`Ʀç6`W/"7|Ž|œwý8pOxŽ)†±Zø¦ÉŒoƒ“N]øe„ëNðvûu×JÚâEï°ÖÏ„D%'\O4#u#röt< {-¹ì‘MëiV;ŒQ.:¸ëÆœ*E±ü,;ïüÕ8†‹õ ·ãø\þøòi40ÏeôÍšå ¢†)påHHömü`Í-i¥ ì7–“tÉòtÉFµoÌe<ú1iP(/4>eÎÅ‘—ZA„h÷#<^ñù1 üÄgÜÏcñ“5ý☠ÿ†{œš¤ýˆ— ,_ö•Í]Ÿˆ¾—g¶®qâ9äI,H7Ï [6ÓÑ LõIRÁ&nbC•?/×…‚·ï!QÅÿزöðø87êm7¯ „:ÿUߺr+‡:'ö Pù©ÓY¡|ùŸ?2;°+\‰.½Éœ4eÂdgEdX´Œ@)¤s“=Ppiæ!Ô6·ŠHppÝ {$œ×·ÙÐíüI&‹Õ þPÖ±#ÀoM*ÍA rWôC?ÑÏWô„Hñãâ9 FOƒr «B¸”RK‰/³í¡]È6u7âAiÜ úÈÕé™8¿•¯'[ós¯ú³œäMßoâ px“enþ“2íÚY•Iƒii‰-d¬Ö¡Ûæ^ÓzDP1-â«XÔl¬C—¨c6qAãc‰h)ó+Ì)Ê®Q"¯¹ˆ8TøKê_]AÈcÚC”ËÂa¿Úµß2 Á@¤ \ÐVjøå»eo×sRóJßáüüˆöDúŒ$R Îý¬íiYî÷¥‚ÃÕÒòþÍD¯”=ŒO`Ïë­9¸ƒË{öÜc¶¯X¶gñЫ 0’c[­¬¶Ç`¹ßêepÓ&We¦ÎEÂp´†’ág|œç¤?ò­s¹P¨uL÷mw޹®ÑuI:ܽ:'ÞÂk€÷ÝFAÄÿ|kVPÁ€oJ½ÁäúòÕÿ[6¥Š?E˜íáÅÔx)¯B߯qÒP.îèÛÇ!D âA7 @ÝuæÛà-˜!Ï|)~*ÁƒÆ™>!(’d¤²Ù¸å•u@–«>0Úö2øû®Nt©ÆÉóæú[¼Œ)öÏÀ¨k,·óõy½†F¡þŸ;Ϊ³sk9¹Ü<>8ú¡´L¬nñ;t7·gÛñ†ç±ÄOƒï¦Lùb‡O´4(PCÛŒx/ES~Ù.kj)Á©cP&ƒŠéÕN;ŒE㯺^x.Z;„ȳںsw7L…tu¨×^O¤òfS­žãT=~¹Jf•Ð :Ó îOò$Üo•ÏÝÉ*–Ô˜{¹ËŤÂìx<õCc7¡‰õt¥ E­ä;‹Ñ—T³#>ŸK=“¥"‡GÏõt›úòÏl=LÒV‰ÛuÌÜ-ÝÇrn]È5¿&ª‰µ{9Ó:¬KëïýtÜ+Ýàc\íÞȬ{­·00øërb¶=G}W~FŸ>u¢œ/c—زÄ&ÔESU]}ܘ7»îŠП‚O÷}õuª-±"¾}y¸úÅÓµñ0Dâ0¡â£ì j½ /’ÂVV}?®Ë)c´"68{[úν¤ññ•VDølåd]C æøÌø¢: ìh‹žÚB½™ aPI8hö©!ÜÐoFWÅ×ߌP2yÖ ÞÈž»DOðܾÀ ¡ôÙÉ`Ø[Y( Â~+@;°n[£å:¤œÓ{Ú(Í7¡ù>=Dbæ|[žË¹¦ØtûB&«E”•â£J«“‘:Ñ )÷Ñ«•ïÙÏQœë oÇÔaÀ̘Q Âr ÷­„K¸õÕH·g%¿~F?±º«Ñ9KfÀ(*·(È+ωšKL;ò7Öš ±LW«^ÅmuûuÀŽ.‰å(4äEš‚gâÔ@F°ÒÙlh÷ÆSø ™ª@Q-Š•Í#ã\ ÊèÛÔ«I–š0 Âüh¿h S·n3ÿ g›€²f\³È'ïbø¶õÀ†9/áôahùƒOx4º™€Ûi2ÊßUAέÁSdבt¼Dâ«?€t«Ï†Aþ¸C8T Âj£¥íRˆ-‘üÖþ·€¥¼Ïœà–Œ F›$=j ‚ìù=…HìºPëGp³ÎV/êÉ™ðÒƒcßÚVäùq7Kœ ÄþkÒ-'û#¢áHb•ÂG»i$ëµÞžàR™@ê¯ ¸Ö'5·‘®T1Wq§°Ù7suŒÍϽÅ(5¿5Þ¾G]Ç1é®èýeâ”ä:*†záåNíÍ¡´r\hòs2&Øòù-¡ª§5Ao)5Åš~Ç'ý!šß<²=£îDÛ[£gN‚3©ãåÂl† «áΓ/‡ŒìÐ5,â•.¨;Ú;îDxHñÁÔ«?5‹ï~¦°íîÎ_àÌdNy®PC×™dïº/h§ô^`×"Š!kø\¸CœL1a¼êîOÈ‹¿:É(…Õ{e®'ÛŽ Q¾+“ÖÁÊ»ÌOíåžîù—]à7˜_E ËÔäsÕΆûG<]ùb4G½û´÷ýÅ8Úœ-E‰ïC¸òû¸™9gn]£³žVÖÏöJ™Æóâý¼4]¡ =–Ú„ D,¸~2 i§<‹`UÕdó@ºúvªé>±LMNúÝVÑáÞÍ«zh±¹J[M(WÈñV7‡e=†½¬Øµs©÷1OùòúP_äŸj2 ¥`:„´úÄõŽIž<ìгdŠö—eDÙ½½ä<Ôýï³ ÙüÞâY:o{•›¹ªe’÷ÎN2A\÷B-ûj ç~ÆÒPþÎ>ô’e®ÎµíºÆv t3¤ì{”‡ÔQÚ{¦L=wR®_Ô•€§ŠË=è^(±¿Ó®};Ël U¡WÑ„©[˜’˜+Q;Ж¯T;‹yÐ-äãó$lÎÔ¯øDÄ-nãF:³ßé*¬‡g5óÇlýÄ´\l¤|µ×/ö¶RsFv€…ðÓWÉ¿þ,áüôwºÈÎ7™wsÑX§ÐqíC ½b¢Sʼnò•‡!6IyÈî˜+îB—8M¿±j…]ÈÊL‹Â“[,‡Æ¯_»÷„6eÚëTTÂÝ ­ÎѦaÓ`Žô)U±Ò¶¡Äl«„ÑÀXÞ,­ý&͞Πs'±ìÒáM~_MHMJÿì!c§(Q%ýÐŒÀŸD¢Øœ/EÁ FäŸy3žœä„ çÆ«M‚^¡óæ.šË}¾j•eØQ䥪"2”& ƒN‚UZ–K{íoñ6µ’ÀûÐÅôȆoðm@¹ƒ7÷mƒC>G™¼ê¹/IF8»÷ãêXYŸûðFvue¹aÖ9‹§jàj=ºOxÊ:ïwÖy—wQÁŸ8Ê·’ð߯yŸîêzm©rË…D`‚ê"ùÛ9MBT¾7Št„;opÞþ£à–hÄ6KÍ/e´¢…”Î+Æ~+*al—)ryÛlpË#¿<Ù"y ’™ Êá[âÃŒ·¨hŒvÔM­""t·« ‚%„ÙЭÄË~}4ufá®Õ#ä îÂuæ…œå(Í °ïº®%àèá_~âà„iÁ˜ØÖIqw {{é²M°a6ŠTæû™Râ­\lmî6Ýo”æŸg{ýV³”Èü©m(Úör¶0!Šåš@´…²{L^V ‡ª ĸy»Ð ›êDȘZöô|·òQÌû@¿ãCyéeÒ$IÍý…(_™m¼þÀtHu;_lžTéÂT7|~|ðÔ¨Bf}•˜œØ`VÎyI2¢­@Œ€³Gäî [Ɉòƒ¹»;ÓD¨ ð©sYÖ¢Ò[”8º î‘\7aíH¼ÿç Äšþó_ËÎ=¾BíKR[¢³4¹8ŽXë'»+zÖŸô›¸Ìëˆí>^FÜZE×ë*¡ ßk¯è3|ÄZK¬)t¢»·- êБ¯5‰N:I7¸ ke“Cs’BbŸômj÷¾*ŠÄ/¨…º Bã0óh²C5`Àos½õ½p6ûœÏú@ ñý1c«Çᄳ¨s‘Ðôsÿ÷ñi Qƒ‹r°Gòd1«q¢i‡ã/ö)öð`ZýÛè#´_<WZã‘/(AŸpËLó»ë&¼42!D)GÿNhçi˜Óz_Þtŧ|Y ×B5€- N*.~r‚DYó§ê¹ X×ÕCô{´Q”Žôëw¶>F¶PLPwpGõŸÿä­Õ?ìAv’Âø^áþ¶¥îwrÚ8Cl¦k+·þÓÿ üÍ«4¡¿mÂŒz‘J峃*@Yf'ÖöÒ¡ŠP¼B‡Ròq>¤ŸžChd²é·[ ý7Žºññ4G,’•¾J%'.ŸÙb§ÕCëBšàÑ·cË”†ú;/ÞOù[ f•½dh~c¶ù•Öfw3¾’0Q½ÌÿTn¦‘ßAœéVnNUÔõ¿þ¹,¥ý2žIþ‹µF‚{ÔR§¾®Yùo Ã,]Åäu›æ’ë0÷ÏÅ>¨aÄÖ4¥¯ºE…ºèù‡$ ^Ì+¬\‰z*M›úpç’•ÅŒ_)ƒÂo?# ÁdˆòÚ×–Ï(&üóòï½Í¢Ÿns—ó(}Yúcç¶½äuëŒ\êŠc}pÁˆmWàgS;dä‚Ι Ë˽ƒ÷ü|ÂäÉ`ï6`UÜGÿ|`ÐH¢: |ÛƒKTÕv¦}hÕ9„ÞÛÍKF¢Cw}øL9[ܦkÈÈÒ&ÍîÜPø5>`ÄL*:@ÄIü¶¨2¿™ßéH~íjjßn¤…%ü¼)ó ÎqÕó+ !·cïü¡ù…'j;ÉÎ!•)BÈ®ënOïÚIÔÄ0Vnà‘Û•@ºÕi„­‘‚?j7Ò§íõá3(Ô=RõD ƒ K0³Ç¦¹9W—¡„Mm‘Ž«½ Ñœ¢À岋A)ƒ?H”Yü-—?öM8ÂF¿8z¶ މ±]4%¬2ê‡p“ˆÊNåÕ’![4Ú¾R½Np,+l4/µ>ÎÕ•² ‰GB„eÓ¯Ó¡Zdl z¬‹'»¤wÕ;cP%¨ÙÑÅ‚¿ì%“ºÝ93q [¶Úqùêly• PŸ‡ÑX01í¸FU»ñ¥—n5½o]î« ·F $¡qHÓf¨–që-ÏB8‰¾•Tã¹oz¹äpx[e´Ç3ùƒesm¥y(*0@à/OÐû¥p0L8™ª5~p7 gù´m[M'³òõØÊ?ƒ¿gAø·M7ŽÓ¬E­ãäsØ ³‹Hßð|"M¢‹7{ú=m_(E3»Ð‘þÙÖw¨4̾eØ\3淨ף(«+ÍõFo2©¼Q ‚ÑKMQ_P¸$íôÛ/o AÆŸÐHÄá(ODo^íµÞ"81X_ÐØÅ:z> ú,)•QN ΨÙòJÿ¢ž÷–ÓÛ(²è¸ÕŽ›-{Õjã“/O‘ÎîÓ¬A¦çy‚§w ¬±"º_Ó+Û@53øúÈñö¤lCr@ó°¿5ê^ÞÀ»z—azø|Œ¢Ø¢—& ~Cl ªŒi³EçatÉ€<­,ÜøÆ!ôßTýç'ŠèÚN‘ƒ²#­f=Dmø‘ÄÒÃÕ‡Ø ÀŸmûQPj—)鿃Yô ½êÎÎO/CqümMNÅ5 Ç Ê½Ùd×üiÎ_M¥·©@ËàèGJ«¿kŒîUÏ4©- ò"¶’}XåæÉA[óï}] UD Òl’Љn8aoZyhr²GÊ}òGB¤ù߯ÿ‚Š2gHtBÇ‘ÅËöqxKysÆŸ½Ø2fÄjw98?z®Q°düö¶œ_CœUü:}/àÔÆ¨fXšñü÷5`÷ö$‰¼ñÝldPÀ7<þ-D=~*_ ·Ê£gËcÙÑ&)yòÕëÿ@à¿ ŒN6ggè ž ¤,ðl G2µ?]´Zðï­;ínŒk¿"Ñi3ô)ºÈ|!Lkq—yÞ ?êaÎBìN -.¦!wz·%ŸÔŸ¿@Ū2lW¼'(÷C*ÕKb˜Yw¤òÊš-ËÌàn·)v´ÒÙ­6Hq'‡¢M­Àœd_vîGÿÈ®'ôžïBŸgI âŽ÷FòðS´ƒèºùC^¶—¶Y›Š¢m˜[¾åÎ;d‚ΰ£Á|I<ÌæTè-#“¤1•ùM* Ü,úh1í^-´eÔç¦jíÎz:ó_ó×¹ûYgq'šë’¢ÿ½sÛ ²ZÃßW3¾t5 ‡ë3Éc¤ |EAp¶ÛÆ0K-¸‡[æôOât~)o~xÈçá÷Ô·´gv!.L!¡ò»æ²k2¯µ¢sKSºæ›Á\dJµÙOv«3¨_]Z÷Ø{¿MÍPP ¦¨nUJ,ŠÆ]ÚñåZa M qœ‚$l“v)V·ùÞÅ®[oÑ%öècŠ„jðAÉLiÅ*ÊÉ+—2 ä§f»™LF§ Ø[行û›¼¼Ú6°½Afö²iºàÇ…—ù-8ä²è“³]†œ÷ŠÖê`KDu7î‹yHΩ¿E"psù€~„$mŒœ32júÙD¨i­ ÃМ ¢´CnŠéž ¹Í#ŸaÛOý×?!ÃTÛ?O= ÿòr+ÿл .7TK Í•Š=ü»@±7 ¿5;]"=ͦšºcZû«Yy(øPe`ØÜD¦Š¡Ø&€W.ØÈQ¯žs;ÝJévË£B[ØxØÙÄ ‹Þ” šIÃÙîí5ϸ‡>Ôë’qËØ(èñ›µ–ÙÇG÷¬½Õ& ºÉVoø{V™—½ óulyÌËŽíÇØPùËï¥É™• ›ÊÚûC7ùARqhÏ×­w@ÃGTëÃ~«™1|‰‚Ö¿žhÉl¡¢›þF"stÅêcvY(jЫäŽ(ÁÚø‹íŸÐÌSè2dˆ‹û8ïÿ*‰i2›qé6¡È[·/‡·*Æ™ìïïÏ X‹èÄ¿y=ÃÒ)ËNm–?ì§Z[äVôý¤œlÊR4ºù9½ZNŽ¿˜uT¢Ì&º}ÁÝÈ:ÎÎ&ãÀ ƒ3ž „i±3Á°96$ïIØÍàlÍÞõMíÞ'°n¢8ÏP¼½Àéwära³rávU.ç³… •% Ó‚~ûÐ0&Pl!9²e5¥¯Û›¨NßyÒÞt8uЀ߽rÓÖ(vÖ«ø¨Þ `Á¿mÙ9©OQ=Ì¥3r–ÓöÇŸdý™rïPOJœmÕ ˜Dêiƒµ¸Ò+¢Unõ«ª†`É á†žCa÷?ÁrÕÂÈc)D½—1áèïkeÂÿ”÷^f©vµ#凤«m‹î6 2ˆLÁ4‰E7“’×Jf} øÒ)±>þG¬Rð³P‹ÎcÃD‹õ¦QºF‘YÉFlìU§ã\ŸPޱ"7ê'Cy3Ÿò4õ¿¬ª›µÎ¢ð´?¥ ƒ½Á¥ßà÷–„÷° GP×ßëùVÚ†•u¨­ÜÉií¥|#‘ÊÀ pª4f ç© î0ö"S¼~¹¯zµ.ÀÒ0Œ}Ýb †¥A fOï–O«cÏ}ô|ˆÎм”—5"†Ív"¾@ƒaŸ\÷À°?·w'«;ÆF,nº)pªâÈ+5WÄÁ¿ëk„ÃÊîHÀ ‚gQÙï"Óc(ÍšuŒoðVã‹ßrÁA(‚îM¡³S¾¤æãçw/ü²‡°Y%QéüÔx16½TÌzñG‘?äS¥Þîz:G( ÚG´GN'®¤†g‹`ÂKx?•ÇùÏ,eԌֆw¤ûÌGÃâ#DIG4€³ÎyšçDx­4û¥‹«îQœñJÒÉþ Ä¨”´ÆAö)õbñ¼ÓêU|Ôûw û¡ók mn ×qn ¸¸ÅÎ9…¼»mõËÂv½„§[țڬœ/l5¨ vÆ¿[¥ûÂÑÏÖqÃŒ6«ßÝ]ÙEÕüx®bÀðbŠ{)R wª¸fÌVÓ[…† Àñ¶ÿÀ°áãAùnùÄžYÍÕ™I ÌL¸êôTa[b®ôJ©…EN%x£¦ô‘ŠþÇ`†ÛuÝ©O@8PL.yCeÚÍêžãjcî®—ðúÝÆqÊL:|p=v¾Ÿíp‡ï;k#ô ã-¶EÔ³ßQ2èN[ØÍâr»Hóê-8Jð¿LÙ:þ #÷{û§N2Sk|f2¾þ0s€s˜%Ïu.„€ã³ü\—o& Ò¦ÑH ‰ð@+VBè¦ïãÇÖ××§‘ØqÿոĶYäÜ0«, äQÀ¾ÚˆñøXL[¡iJå3Y٠ȹz V9&‘Ž6žo6¦=œ9v1cål^š5ؼc™‚cì—ËDÜ}Ók3½>4PU&°ïF_‚d^Ú`ú}ŽÌ>u¡—µwv9´!jÊ#ónï7zÞž`èÒö†4¶&,ÏÓpê|Õ‹âmÉóß2ZvZ.Û™Äêb ±œäIŠ!I#Ì¢á8èOâWgÃÎ÷mÓ7,ŽÂ¢qLTOʼàÚÈMq‚ºjá)hËíÿQÆþ9 <"Ã/Ç“<’~!h¤¸•5÷üòƒGêÄüWR‘ÄUÈì O—zÚ:b?`×2ŸÿĦ9Ù %:TJÞ<]îLýÒ_TwØTQbçb)È;ü¸”=QøxW¤ßÉ8*X"½1êô’'ËÄçè”#T«E!꺅2UÚ@7N«5ÃbCç–TðJ‡„·ó ¿þŽ‹ûZ`Ÿ ¶Àû÷ðÔÿ†±Œî‚8eV€Ê§0Ì$ö~°ªñ#%Ø.k~vŒ°ÿó4Rhl°AíÑbJ¤_拉aÒ/J\Ùì½§cPäÆ)u 9[Ü8oþ²vç#÷Uf~­÷8³0*ö…>^ù6êàh¯Ë±ÍñcWžãªNˆÝ,ËÖõXøEÊ#JÖv1š£°íÁ?Ð6dòùŒZ­ðt,/`#­ ý$,tMD{yóU…꽓«õL¯?aYÂÀê>¿B&þ–Œ6rÿÐb¹u7— ú󩨯«-àçÎáÓôb‚¢ë4Ϩú7k äù–GÝ1H•ò(FH;µœ²ì.¢«ËlÈ×xã¡—A7j¹1tŒŸ›¡ í ÎO”(Vpc!°åçÍýtlMßx;Ñžþ2,gä5ÙC0Tög€h¬k€04E—4©­ÑÕˆ¯‹»¦~?W«å†¿'ÊEtl€9먮U¡ÿL4­±0Ä_kŒ+ºÏGqEeÔ'ÌÐÚMOu<~ô­Än›·P…DZf´ÇÞ̲(.¬‰y!G(ÐÝs[¾2 \¬²`[þÚå•s‹+4mä±vølºÑT´nq’L‰á€ÏÐWúQ™bÚ;Ah/#´_s8 O9u¯’é`dvñ¼"ùË öÓÑÉô ž™Sâ%¿O"^0e?O#H…]q0žëù[jšý6Ü&¥MLXÖ­vlÑÉ”ŒgùÛêºøÂÒ#B>Âô=h(†¹Ý²`@V§nôá6«#$TQˆßÖp'EØŠŸrùkp¾úíøoÓ‰¿ÆIÝŠ ŽTT±Qáà…µ‰»yâ=Ú[ê CñLHµ¯!Ëôݺd`©|2ÌÅöË92ŽÓ":m&¸M!=ßÄT| G¾®@&>eµ#ãû˜,–Nì7MWša HѸ/äJJ2ð†4»‰sóc C¢•â ᬙ'g‡™øÞ)—Þëî Ôé€Ù5`/ŠË*¸¼2)Æ}[¸D\Èݦå¦ÂÏýàÌŒ/:Ëuq$Ô‚<ú‡Þ]Úaâ´Ås—TYöŒ%t#.DKþÉÓ5×BÙ0gæ§Û-¼…ÖÚ^R;VàI4w Yöqˆí«`w° Y•Ò±&OobfŽdJ”S'' ½=Ñ·fÅVš…™ZÌ–Z¾–õ'«j¡la.Ï"Ëtm çü. ão"?åœ ¡„Î’Ò›]›w(>oàÜhÏ1«I ôZEn ÈýOO˶Š+Ãë²1Ú¬ñÌØB0ú&qA“‘_ZÉâ0†øyv$)+Ä´P_;l"L~Ç3w‘Ú, DÁŒAÈÛ¸a¥ø «:U4û4¨õ$ î£j]œ.þ ‚k\†A!iE쟑˜ül‡fæþÝ¢åãÓ½Ö¥¯ –ZÜL2ó3ºÃÚÒÇaôD&[í!pWþÛjrBr•¢TþüA³ïLÅC7i] ];æ,˜ß°IÅ8©e¸FÁU§ ¾?w3:øðШ6ãVöŸÀçúÄx µB¾a­„Nt‚ÝlÙ4ÃÊ0/0®&Lv R>ò}kËõdÚš%êZ'Ü8ãÝ;M)dEJí¤7›~<>¤Ä|hè}FÚªÚ ;K¾ÃRÐ=³W‡Æ=î”ךkϹõg!øã5¢“g™.V53³ï¼6QÎáƒ|-¸zjfG£4èÐ;b˜UàØ¬™àqäÅZ¨¼ —E“_+Ã'âa `ºoÜPµL2gPÀ‰­>þ\:SËu˜êmõ”¤L JªZ“^¸]:ãUf.²ƒ$,¢öê›f¨Bá!R†ç^b _;xÂ+â¡Hý°£^ó`YׄØ.îéH<óŒnÌÜ!»Î°£Œ’ÇL* ó¶ó £6 42É\ öâ–_…ô€gÅÄõñ/ÓÍ‘ë!:’TTÂ;"Ø"pCr‰Z6æìf~ÛÅ^*Û;YØüé”/ðm”ªÙ•ÇÛ~¶þCIë Bú/€ã ŽbÏ3Fõ' ˆþANuý“56M©ý!¾¨4µ4ÞûR¦¡á ÿAä_`sæKé†.-êM‘´7´§æ4J$xÚm÷ìÛš§ Íh\a†auŽU¡¹„ûø“·|ðGA/Pä8 ºÚk ¸â\)³dC«­®Ù’œA¬:&.«âãÑË'í–ñ|µÃà̼sÄÔ±£ºçÞÂò}ƒ(â(ÜÙ¥¹ú¬DñÁ¼ùì&üh¬àâwZÊÄ¢ZÏ‘œ&õ#pDIk7±¤ºVó@˜1Þºwæ¦`$é;b[Ľ ¡£‘Ûò$5ÖãÚF,øRïëÔ)Å=5ЂÎ ;·yDsM!AÞ³¡j’óÒÏè$`^øãÛåµ{@$¿ãϹæª&ƬXåt_èïD_ww¦}}qŒjÀMk·L¨‚¡Ù‰ÆöÊÝ<ð-C­.ƒi=/Ïæ2œJþ`ÈßPw‰“D.ÌÀü9|]6BCF4؎—àbØÐ©"N¤pªy…@߸{W¶ZØø1Üé4€Ú*DúÒïÑR°lÌ…;nlhx,¶A'ã̺¡uUë#ŠÇîÆCH^ ž›¬#­¿5ûË–,N¦}ܰHë2Kø¦s>D–¿1hfIíÄmâ„ÉP¢2›ƒqÊÈ΄áLq<ÑÜ.ðžÞšaad0¼Ñ¦‰ãÄwâñ‘:mHl|n€,1IÕÃD©ÿ×Ì‘G(ùÓ qUlèȶ¤Ïðš„T[…ñ¶±,2­•­'´ý"™„wTO¾3mÉ¡5ȳaw¶jãà;/w¡ HòV‚P•U•üêl7¾Ì‰©ç«”À;hkȈðe5º¬'ÑÛŽ’ÿtÁÃ6´_¾­ a”­ª_žŠ,Þ̼¤& p)Ž!\rìT.ë¦^= 0fJŒY¼høhÛÏÖ¤šÊ–ǃåO‰b¸6/¬2f¯’ÎHÀ+>QË´®Rš7úŒCæ>Þη !Ùò$÷›cDHÏvxq 5ÎG'jI@ýýŽöD‡O+ “Í›…í¼€ýäÎ4Ìå€ Éz _7µ»«5 ž¬Œi¬c¥Ýû²eè4ªœ5ë·ÞžõÕÌY4åˆÿˆ¼¡˜h?Æ!P›ŸìjÂ-Ø"á¤càr,r¨³eƒ'lÎ^¬0áî'Z7vûy‡~šw¡g6¤Î>JPˈêà[úUz­þ¸ä›GmÃfÂW9~›ä@`Œ± ¾ ­p¶3å¤òêƒ`%à53ŠC56Bx*Qå«WÏx˜"¯,glxG@ì¹9&ƒì´”ð0¼Ñ¦1È¡á;B &«5å›×Ì?µæûEpÆ™ɉTd®ùþû_ç Ê›¬ÖVÒccíÖ\rBåMLWš¯L“pèxB{c¨öý»¯}Ô÷ÛqDz¹„`W§á•¸µ€±€;Ö5À]fr«õ4»y¾"‘UžÅvZ½¦^H* ¥>¦8Lòˆ–° ·fû¤zÓAjù¨öR}Ö¾¡Ÿ‚‰lÕÞ8æÈdæÍ gËËiFèŒ8Rná{E~ŠËo¨ŠÀT‹æv×·æFT ½Øî…'FwMîm䵜ß0}b°BÞ!ToT®7Âg¥ä¡À9ÖϦÝ}âm^ÜouT•_dfÏO#¿.qëÝ9Ã+&Àgv 1¶«Ú—«üvðGU»„þк(_¯õØl!R I\î“+@¨¿Ú2ó|£%Ùõ ãÆú@8!u‘…Y¨×^é×'å/'¦1`ïß Š¿&´çp(ø,GéÒj¹ƒˆð›¿¯Oúˆ!d‚Ž%ŽÚùÌŠ½+Ë|cd©œ‚Ü[>FªËV¿êÔœƒÃï<ž.(Ã÷ž÷(ϼ‹ÌùZƒSêáÞŽù–xó%|)\ x ;^{§ îöNþäàKè{©ªX#°…áy‘4„d}ûÒ'I˜CÞ§ ÀÉ„lt1ôŠNcézG‚Z¨ŠÍŠÉ¶¸Ï–EZHÍW)W(¬ä˜uáuÆMåžé%<› "_ DãdYAÙÕN÷³ÇÂP!ÕòÕ;æV6ÄÖG°ÿÉ)‰ÜRuöÙUÏHJ›¹q.$ß.Cç£ï †d¶=±ÒýèæÇ|ö0Ü;Gòã*TPxÚ{é6UÊ‹¡/WÊê &ˆ]2m_Ðã<Ú®ÌXµø­£í×z“à î¿ò¼¯¸ìü05 VŠP„c¹¯|xY¦×1fâ(îÓìË5œÍUôÓJ„;b,…^½v¼ f&V ÕO*%ŽoûÄF UþŠÝ±1ú&•6LõÏÁ2xйéR‰>6‹„‘ç^kœê‡ùÎY8ï@äù±ØŸ4EýKc×ãKu ÉõÊâs1 _ÆR³êlˆk´$aµCUY‚´îÞˆX'Ê&ÞýV'œh†ËZ~h¹{*pŸ«\ÓÂTû‰Ì]Ù;_²³Ë+»FdÛeUrRq8ý~Wµü9ÀÄ{—Ø»SÝ;ñô½ü© wG3yE¿|pç{N¡Ôëý˜ÑX·ØVª°êt€c„"ª¶uóË¿DdØ,*Ò+·d¯ÚG[Q‚0 ÏTðºxŠÁ$NônÓ:ÖVfF2¶äIç—“¤¤¦ïé·Ö’‹äA£ü°/L.–E¥(z0lî]p¾ñ£«Ù“7 šÐˆ6p‚íó,ÛâÇLjKúL6zÅŽ¶oÉ+{Zá.4™Ga¦uxøêî©>.wÕÄãî5tô)ª"âÕ=Úä_õ~’ñ¦!|Ù(nl³€A–Àâ®mípe\óJï6Á/kÒhz=äRŒžaÉö¶Pøº|¹ÉH¶”¯ÛêQÕ ÖϲáŸfqóLÁ¢ ÷yMtx“}Ìq¾$҅鿟Z?èß[&³vM·ôÿè0dÍ~•” íü±4¸ò–ºm‚éÇ>ú©åõà}œã²çÙbDÜh8ÑÏ _Õeì)ÍjF­|ò$“OÄÚ›q[µ¿§%©‘ÙÛÚÞ©’vÁñ0m¨…Z,¢’àÿÞ¾í]™œòy¿”Q˳²ËV¡íÏ ß9Ê@oßFÛº`^OÔ"k0{ÅþÜ´ͰBšÈV‡Gú´ 2ŽÖœÚ/ ¿\‹Aï/#âx&½0Ɏǃ"èÌ%pÐì Ø(ùÃ.S‰ ³_Hè/~Dvº 7ýØz/ FèQA8~%œÃ.…=qçºÝ¯A¼ÍY ˜Þ«P¨g…Â’P6Ç+~`«X*5&žÕó*ƒh÷ ?fà€¸›°ÎD¯ÿ+Ü0·0Ž/RõsTTôIj»œcm©dvöV#Õ‘,Ž‹ÿ‡CŒÓb”5UèxÞžUõ4îª8[@ҜѰ+¨¡çÙBõõØm¾Z¹ηóÊc× e؃=´‚Ö—€ý Øë¥“(FìY‹ŠWµì;8KxlA¡¯»åqñŽp¯ÞKÐOz‘ZäXUqBбßbu7÷¢üŸ!& íGê°õW»uW3<šR’áöwV3G”W³6нßÒN¤TßåùYng¡ú^Ršs>}ý'Øý&Ã7ÁüÅÈ)*à;á38›°ÞÞ“ }ýàI')¸ªÌóÊ[ï3ÞÕªZ›¦=MõI!™òî:¨ÍEj^$sŸ‹¸‰að8i'ùÀ{ù€~ð&°~˜Š ¥Äƒ øã¿‚µÖ˜³ÏfÙùHŠâçýãâ*ɸFhýgTVºŒÀl¥_}Û…npå”@¾¤{X±–×µFÄв‰$X‘Á0]†´Xܤ ¢ÒòæºúÀI s³N3$gˆÆ8—K¡€«†&'€âÿöAZ§í„{›˜¢AQˆ Üû7Óú»·ÑÃãåÖ¾¹¯'©ƒ·-øÌ!×%óK×&Zì<Š¿­Õ.&‰˜g‘®-ÐvnïNKÖæ>Jç7'>öI{—,(×±˜ºehK=P—^XN'Ùûƒ%Aš‰¸Æ¥{[ÄI`çª3K8fi0‹N&jÎtêµé¡žOâœõþYì|m¶Ïý†‰f§«2•ÓÍRWOöªÃ2ƒã,Hž4sÉZ6høaÇßí3(ÃSyæ7ͶŒø¤r®G{àS©Gí7¯ÅޤG/›&ˆ³¡óýÚZÔDÜÙ›ŽK·~MF)cÝ$Bž_œ¯.ªPfÁ®g³*#€Bgµm8ýÏtcà]ÖöWCü^W¸iP——äçCxÞvŸ1 ËÅn¬ª’·øö›ÁQ<§žÍý9WITÐ6生¨´O›äºxŸ—)×þ£³Û²¼ð ø‚[S?ËSs.äÖD÷ô[…";ÝiÈS9>#Vä­œGùÒZ¿†ðt¬SS8î"³©éæý«¤<ìé î—åWŒê64$0#Oªè‚Ýt±U>`Ò<¼Ç¨,®&YãÝhnî×ôþZ|ëÚ5¹ÉŸ¿•øê²xáq™Ë:üÝ)§øô¹›„aÜm*S•±a§¸¯î†4ÜÍoŒÃˆà¨.;4[® 18ˆÆ8g^ª|ø²NIÅÈv@ºðŠ,ŒTºy;¶:fJeÏè™mUöé^kÅ­àañâžKæýxô€c] sèÛ4šm·!eÆ3ðâü´wäæ7*F|ùåG‰Œïëv“è£ùC¨Æ[{.ª½Ó=9>¢×U“öêq:{ßJóí¹òÔNÞ?»“. ½{Ú>CJUŽÈñ¤Ì]%鯫ÎâÄI¢ž¢Ïu¼ ˜Y×=’VG3á O«wῘ/ý¯GØ“È ²â±¨:CkÝáeÒòŸ'eþNÞ> ¶gvaz†!”Ï5Œë‰ÇjÅPx-±È[Éq‡ˆïV9ÈF3M[½Ó-6·¼íÁ˜2¥›ÒÌuøZê“Fb¡Ë2éiLRW›lé[è…¨^=N††§.©?>èpbí£U¿cRN‡6PïaD.qØ+yCt:i4á)øø³+m¬,ÊØ!ÈdBq ùeÞÀ«í‚½¶8·©èaEƒ/ Œ$wÍÿ¥+'¡pxZB¦æ$¥P'l™FlR­ 5ÃÖKQdÉñt¤eÝa¸pïÏy¬ôìIÆÅwÀ¹4\h:®€nö2؈šïº&žG”+¦ÔTæŒ ê๿Fè„t7{ô ·áì.4 k–É·_ä™Fç–”Ò>b´÷çXEü>5ðìxQPÈ=p<\hÒ¿7YÛ¯¬ãOf¡WÜN¸:®TÇô ×;‡¢9í"š‰XúsW5YDkO©ØË¦.1‚ X®µñI ˆ#8c‡—L¡œÉ+A*6I*ͽ’e0ËiÓâŠqk©ŒB–ˆ U¡:•Ü觘P¢®†ÊñOñWÁ[çÆ¦ÑE|öÕL´~¼„~šuòçõ›ûMŠ‘ iù¢0ÛÿàeÀùÝoY±$íuÜ×î}±‹ãYJ>W"˜U• /1¹Ðœ+y|exuë¹>¦ååÜᄱÏe‰?x O¶àbjŒ²Ì!Øy™.(~ñ¢ÔÈ™%Vf ¹'.‚Ïâ¨ê¶™`KÈ)U( ¿óî–þ»€é)à³¥Áí†^ îá.*ym;.’F$Q—RT#åÃ7¾*ð³}P²Ò}¸á4íbzøTè8¶ùÅSúÑ»Ú w!G/v±P'|-Å,"u{ú 6êe nÙ%;—:\á†`Çf·I¡NBÉ} ÛuÈg ' ”4ÁûkÜsc†faø\¸@Ÿ'Ôé¹9ãÆ-"™uE{&ªrzK,MdU)ò-cƒE%@¡69v+6—ãÛ’.ôϱð ƒû€ x Ýbø¬¡"4œ½¥q>æ­©`E¶t´aWòyÀïyÚ‡ÄKa*EÝì›NfG¦Yuê·âÆàyÔ<`J\†Žà@zWF4¦ÄH;,’e¤Œ Ћ= ˆj;m¤~ðÀtkA^Œ!%ú®|.#r=¥›¸{¨UÅ{¿¥3½rcØÛÐH}yË¥Mะ³(nÈM"ó$ZˆÏ+´f©ìÍä¼ÑWéû¼þ"J°sÆ„S*™"Žó%CÊ«™^Ålk*8è ³´ìñ+¢´Ñw–lºÌ¾Ïð"{éGþ—éú­Ì¶ÔZ‡mçÞ$p`h¢U†£÷#2ŒPø#ŒÌ‹UÛvÙÈ„oàu£]Cü9<§hÎ\£ÍˆÄ òFûÔúB <Å®æÝÔæ›ÆŸ^*„þ’£k^çˆ1ÿ"ð 1"Zø,„¬áû}ü‚NŽ9­ý¤ûI‡¯[çw¹¦X!ú­”§? XBY˜oX!ѦǕ¤o7«IIÚÉïeÍÚø>vû–È 94½²ôJ X( ΓF¬JµÑO9ÿ º¡5%J¢=´–T¦ ð±]ä´¿±AñÜ=YP&™„oKêj[Þ‰vŠ®¼Û ,ƒÈýÌ~•¡Î™ï¼Ûs¬"Ïæœ:…&ɧºn?£X¢b{¨žh™"Ÿª¢âªOàpjgJÊ»’íƒÊ&Û?×lM\ÙÀ¨‚)"ë5Ê=è0)?{R.™ÂuL 'ûº……ôטg:®ØÓáû‚ NJàKP½ƒ‚Fê†ýÇT'ż•eÙËÏ·‚äg©‹rêyï.GæjXîRLy ȦÈ\LBšÑÅæ·]à"qéß—F¬`öX/•G發s_1.s¯»;ÔM™-Ð ƒVž„Jõ2šl…A;ô(ê5£ë±\Ú$ƒ˜»o§ÔÖWÅ\ê”ЉõyA"£“ebÐ[övVc° òðÿ+‰ˆÓ‡U¯ö§š.5)Û-«›ÀÕ:¶–­1þõB…`•R™óvUŠp[ 5HªÅî¶u üKýúšxsljó Ž™H—yr¢´êÖ#Qªo”Š OðSûÌ…D³Í¿5Vëóy¸ŸFÜâMÏ虣¸—QµŠÔk‰S†ùrlLÎKšf§ÎœÈ.9[¥Þ…MrÓùv é¿Ô ¿Çf¾µ ¼¶’ÛHOn¥§aÆ A¢’’8†xç¥F:æ]«‚‘ätP&„aö¨A4t÷@pQ% . ªSù&b hþòF"ñsÍÔóâÓÛÓÀ˜²yjvÙ¥Þœq­¥GÈö'Éþ‹mЖ^šò`äÓ–ø/ÊDCksÈ´0,8ªólguDLq R^qŸ¢ „ÅÝÇ—Æì‹>w3u‹×Ë“<ƒÐ`/] 9ÁfBs¬¦-Øûç/£kAÌ®o6&ÄNзÜÑ!VUýÎRù-ß Â‡‰+MVO•*ŽxOY4Ý´)Ê󎞎 6Ä%Ç<Æ;˜¥è@Œ§qáS$¯žvöj¹"ÖËʼnôÉ ¼±K¿ ÑaßÛd‚s@ýB¼d*+5ÄîøÜšÞbrkÌaX ,¦ß ^¤ÿÝê\<(…³hÚpð«BB–ÖИx”&k9}¤ëß}J}w{K‡¤Ès¤LñɆ Ææ¨Ã=≠eÌ!áÜ¥‹bŠGüë¼,µa…¹3Ø^•}’³Ä¬ Û&£èMƒºÚЬ<â_‚ˆ“ì%E'm›ÝÀèßLœ°HW”kþC¯jEËå¡£ˆÑb.N'ȼÚêÎ0iÓ.%` €ñÁqæßÕBikù(Ö<ø"UnUj÷’=ÌÞ‡lxžT$‘¼Òà“ L§Z4CûQ/§‘ÛL°±xp Š?ë\ëE‚ß\“]2qŒ+­7⩘ó¾%oýÓLÕ@îB!cŸ=Ìâm>êQ)PD¤Œ)Ÿ¼Á¾1‹HáJŸ ^ÝGš©Î-Êåãâsë»ËíÄ DhÞÄ@U¹õ¾Ç€û6=±Mêå"˜ôÞK•VG šc@D*?dr:e“ÇăöNÇÃ0ä*Û5¹¦º;"ƒ‘üG|%àSÒþ"†EymšS¨N£^lþN­J ý\À‰ÿõÈ"k 95ŒE\n±Ö„G€¡!<~U®¬L Ô8¨‘r;À bàì7"΃P¾ÉhÉn é  2A$ÙÕpãú"›(ogUu‰µy&üªBò'Ôúücnš•åÂþTC¤Ái¯A®8ÒÇ2»ÈÓ< [„‹$fÉ8¬Ø˜ˆâÑ»ßå•úÿ:çÈGWˆöh˛άòÚIf¥ïþœŞ‹Ѓ½›{«9d£S‘c< ‰¢Á¨‰£¦…æ<š"¬FoêQeM~W\‰3“F0t™SÛZJ‹éd›ÇOègZ…¾: ùƒ rATAòé´·F°ýSÜLùçæ³Dý{þsÅ”­Ù÷Âx£^uœkoÿÎOrQ -"f©ñÚÒb]ô¾Gÿò]+b¢šHX›‹¾ÍÄ?÷Áî¡·wõ’él™,Æú9õ—ɧÒP8¸ë,¾ÑÓ]ªGµ,¤ƒ~´/ìê‘PvDD”­#–Gfj:÷š:i1f0Ë}"«b)³b³yâKâoW¿¥ú-½±'NiÐÆœ©.lR£i(š÷RÁ ÖŠ†ÿù‹?{.ÜTK#Ö­Ëèè·ÞÀ¤ ±æôWsôQïÖá Óƒ¿»,FûY¯¿:Å/ù'ÝNEö}) PÐd•–Œ[%L}‚}#“–(-Üì¾}½Q“SÈ8µñÙÖ[–<¦ÿ—5Üå¡L[3ìUÉB)½?ªT+gHDUà ÎÞý«Þ$s~[§=Þ³vpz—Q'ø¤ÔbÆúLõÅqqë<«4AÏ/zmƒš½.$( ¶I±kOþÿKvÉVð@•…ëâw{®2—“UaÆK_uIÁ{íDc¡½—ré€Ê^Ê-¥þþª T4¨Æ#µÍWV§µ?ãBs3½‚ PÐAU‹â&æ£1Aeq훜wèÄá8‡‚s¨•óTgc¤‹Y£Òk¡45 Ü_ü‰Iãôƒh5“0R0nÁûv1æyçñTLY¬rtG ô0j®ú‘„#¬kÇ– M45cyýÊ”7œÆÉÛ«8¾º S¶i€´úhòœ—ÒýótÑi_‡ªÒ‡·•YW½–ª€£x%0ïN•Ïí9ce¥ž)O™Ë)¾]'~xøÖ¸mHTÐ9ø‡¸˜€óJé‘o‘ù Z:Åb¸s†ÆòöÙá‡ÃãzP+há=qöVÞL©t" ÝXEî dåýÔ8ü”…_û%¬‰ÐFBW„tY?4.F­+ÐvV²Š4) Ô§ÉúŻёÚÏpG™xÃ#Ñ›úĦÙÝf7÷Aåcj0%ÂÍı֞‘©B}™¢”¿wØçFItX‡_ƒ€ur‹í'×Îxh2ÐÇJ»éu ´v#‘àd Á™/gÔ^֥ޝ¼(ÆÄ‹á£L‘£æMK+ú‰¡³ÏèAt±µgãPâ‚ùˆ üЃPŸ¸C'n Búv¸«¼AWn:ض­Î›°L2VYI~Cm2õC¹~DŒ4ó—å‘H9ŒqÓ3n. ?¹™îÌÝFó¾RºÊöëGÛ[»Îê,¿äá—?ªåâV9t5Kl6gJ•®Õ.õJí¥ÖMB}T 5Iõ¥³»Å'/øŒ#*SƒÀþz¦ýœæ-ÔoÆB—Ÿˆë6çÿÌG‚ÁCÜܪYä9‹ öq;äBɬ ðŽZ¦9‘úN“°šßuxLáV[q=à@ &ý;¦m!²žeЙxF¹S:„zéü @gUåQ‡døRIõ¤&ƒ#2ÔŸfU7sdÓHza»R]èF6ûµP¼µ<úÄÆo^GUöçTP2ýü£©O )Èf’þ†v“wªÜÓ á§ÀݱӾý­î?Óƒ›/ù&àX#¿3]Yýÿk°mþæpËHÐéSÁ%ìûÅ¡_xOïe;‰§&øï.Z)0)'V2»×©ó×–ÕÔK¡6>pÓ‰]–K‰»ŒÛêL#¸Î"£‚sˆäÚ\‚sÜÉrX̓3FQž.ŒÂ‡—j.”û£àdÞàëðF;©àÁ‚³òseŠ,tÓ£šõµÏû»!’Xv[y6‚I"·4iÑO©dmç;ãåøåþ/úòÖþe-uÓX/£? •ÝB=´û%îåäÎ}M3¿é1 ²låQ BÝe "¬nV‘:¦K~¼¯•°_ *̺ÅÑþ‹ XÖ–’™‹Ý6Û¯Ž-"(aX'VHÊ?ûû¢†&6@ZŸ­^æÚ§ÛŽq»½¬‘Kp×¢Q߃Œ„ú$#„Ƚ5Í(W~O⮕Hð#–‹«I®¯ÄhÇsá+°N›a´”'ÃÊWîª8Yh\òkd6Z™ô…/LŒðÍvt¥}Ö‹õnq>_Ï‚Ž ±nš¨”íF0º{1 ­Ä´U'xXJt²ià)ê˜w@<Ò˜”¢u¾£[ã t!|IõF¾æì¹Ä'l‰Å‚ãþÂu?Ó‹6Ð,!>oÀ⌣ð9µ†=²@kvŸâ0‚¢ÄÒW:~4 ;ð›šF°@„ß…€Èá Ô¨¨/5&޳¶ “¥±ŠäÇ*GËÎáò¾€ Q’¾MÓˆa;VÄ»¹5KVÁ±< ;fèÄUâýkª 2z%ß(Ü ½C x¦Èr“²ªûÇœí²q^.dk4’.6Ö%>ÖGUŠ],¹K÷¼Ôû“}͆Ë?ñ?CÙ*JA+ïýzw¿TXµQ_gíí8#*mo•‹UGÓ;OxÎ#y²HOfß…IôORÀÓ -ø°àbò‹í2U1(oÅŸO…]Å„ªŒß´)Ë(3'Ì-ÍCo$C£a÷d Y|—mY*üô-²¡QÑS‡¾šXYÔ”=>ôIé²rÍÐe ¨yk: O'ÉksM$‡3ÄüÂì2^ÕHaGež ¬CUpI“pÑýídýüxbç[v6ìvw»é¶pki½CÔR; ækcìus yêõšèè1çZǨ‹¹$HZó缬:Ï-‹ì˜¹¬éŸy ¿Y;[7e_÷˜7T³;…}ÕøÆ^»Ù|~¢<ªÒEYý> -„A`·D͙𲠆ÖÖ§Ü+¿›Á+Y"UáAÛ£äâCÝ¡·ûÍü_ÂôÈÎ¥žäRèSÓ„Mq£âKôàà¯f齨|a€¬•{p#ÙoŠÔ5 KM{Ÿòü-”T¡ywyœJ1dÞ\’î…ÑŠ²C‚ÿXã<ì„]›‡Ô„jsxd(Baæ.¸eò'üh³q=€ƒ_(Ù^Q___k\’@”ÆèdÄÇ|$Ö3—ßø Áa<_EÉH†»´;Fí‘›yQ;dóI ç û?Ø— ”³©¢B#éIÒ/MG=èÑ¿N\pCõ (£{ä÷úÙmxKÖ`h«¨Âh%¾˜…ùÝ×·Ú, &CÖÅ{¬ìµæ;±¿É1¡¨¶bd›8¯3}-œöÒL²3 %^?H]³LŒ¨FÐË®´¼I”68E QÁs$¿½:9ûȇöä5ù€óM¹ Ãä8“Àw£Æ³l5j{!/`o»ê#¬Âqð g»•ꠜܖ,ó*jÞ›utS|m=AHýÉ#˨˜Y̲¢‹ `{SW±¶æ£Š¡Ÿìʉpvx}s{ŸGâë´Or±ü›Òa»ÐÓv˜îçan˜ôN=õœ”/é‡ÌwŽ÷9·YçHëäܘ*G2Sk”ÅaÝçh:×4“ÝÒX«j?­ŽZi¥âE¯Ú8Éó±s;;R&¡ŠÛX}Rµs8tG5ølÕš²ÌÅÅgŽP3"~Ë[Jh9 ùÕ"~Kªdh~?%¥ «àwe˜p-ðX{&8<õçèüc#c)jHèÒ¶QvaÅ­†õh¦·ò®4è|³x¼üõɦJYj6æ}˜ë­±ŠÛBé3Þ1ˆ‡ùwKó096<2Áj‰‡³áÎämîÿ”tE;ôP„Ú±Eí]Ñ|$h6Ç&’kîR’â—W–)qÉi'hˆè8†¿w©Dœ§nÀ¶…Zfÿìâ!;ª]>¾z2­€m )PÉF’ŠâÇ.Áwwm¡MÄ/£¸u :4~ï{‡ÁD{Êþ±GbY[Ó7ÍJ~ä¼?>'"¤‚°kª{*Të¦ø¨,í–p ~臶•¸s?!³’X…¥ìÇ\{(òaCWuàe]F% *EÑœ”*ß©Š\-óºòE)¶ÝEl“¨‚óœ…Ð~D£ó÷+0[a–ª÷‚Y3h½üü÷.Œ¡ƒ¾ofSQ˜­‡Wÿµ§²‰ËrRçÍ¥D©U_.¡Ô E«„þ]¦ïÈË6-  º^*fžª÷Aö Hb“Kx1 -9TÈ ÷㥭ùÿû‰TS_nÿåj‚-n³Ì)PúlP°é}óbñ@#œPZåEæŸ ú‹còÁwùôÇ,l‹#äs¸•R׿q3¤½übbÂU¶–²=^Í 2¢?ø. 0'ãEÙf6I6¿ÀZúX=üÚªòþ«„ƒ[Ú—Ü`Jâã ¦üS7'³Ê Í#}žù‚.¸Ë®ÓºþŠ«L³þöY»®b/Æ×éû‡B‰$õ}Y8ºÝ!¦%–ãÞ´Ñ3Pâ¿™ž á¶‘^NXGuS‚GÁ½"‡‡@[µ$}Ö$üìE!Íc}Aö Á&çsmý¸¯’ýíG<õ4Õá µsÆç2CÛWqäFjx€I·W5Œ”âŽ,~ì1æ[K?”S*ë»rsÎBâé.²$:bá$“ã ¾6Úµ±¡ÓÂΪ<ëá¹] E\€2Ø2®e¸æäÑ@wBò[>L†²a-|K\Á£äí¥uÛ´pxßqŽü hOµ³=°õ1jù þª3~–lŠúïÌõ&äcuìE0WxÙ­YyfËÍè,#CëœWÃÓ-Ö!±‡ÉÀ·ÔËîI9<1(z{˜¸SÖ>{“³ë!7©'ý,Gÿéþÿ§° y1}5ÙÂP5`ƒò¥O²îÂlÕ±Ô\_–g"Χ8Ôž8J˜aÞÒ€_Â[†ãxÝ”¡:ÍYɲW¤µT¤’Yê™RÔd‚M@’`>Œ@ÑÔ]Ç®ø››}Ê–‹¥ oD ÍÕÊuÜlÁÁÂäYB°U^²  „ø_ã_:¡ñ AÀ=WöÃʼã~#4RÜ_ÒçÄú‡‚Æ]lƒ• ›1Ò7O¡$CÁÎÍý_Õþ{w‹Îæ€7lÿÆ ü'*ÀYn Bê *Úá´N†óÚ,¦O³5Jжú¨Òü 2#*ÈŠ‘ð¼í Ϧ^Çm@i-lY#ú`éúhÈ ~v˜u+J ë çD*t\¸Ä:ôàÜÆYoÎP5%Uy1?;‹+%e¼ÛüqÛÑ9ã¿7YV'a…¸lL6<£Š:Å¢:äIÅHw Yi{›ÿÒQjIé¶{ ÌS£Ã"±CëŒ+—}éÓAŽ£ÒC–Q‡U)[XæR+°žédÆ\ÅË쑳óQ5G³ 1½ÄÈik|¥½ØðE'„}þ=å,L¤a ¸ÿËúßúäYÙØ}Ö­Êf¿ÓQ¶Š /Ô»5?¯¦”Kpâ*£&ŒåX *ã>ÞK"ý×E!Çe±œ¸`/ûî-àà–&þ[<9ÚÜ3-&ÊÀ/™.î,ƒVÕ"³Ièﮯ¶6€z°é¯cÄÁ|½›]d!ü ©¤ ël³õ›<ÌÀ›ÃÚüWD° ²[ö«ÇgÑØñ FEú¥1ϽG3a˜/zá€ð¦ˆd¾á5®>Ü$Õ+…áÐúÛàÛ HÆU•€^Úƒ p &4)ÇÓH³§1I?à µ_©Çîj{ý›¦Šï¬K†€C#:†i £,µéeOµ5ïI·Nupª[!ì;ƨáÇ Š§ð¨‰ü¾bå¹àL$¨üe뇶vÍNMn_ï-{ÛT»]c£zkDâ« Áü§JR¸ùÉäL.-=-µŸ§m{„#SŸ:·ÈÝb»tâ•¡DZ`ýT{®¸¯,Ç÷œ‚¢Š”÷£Šç;5<æ³ÞU%0õ¹‘öco«[¡Ìlçãk"˜¸ÌÓ'^=O,OŠãðïÉr?*uÂÍù?I\û™/U­<ìí‘ó°96QsC—_ ¡Æš@ ¤>·ßÛ2MýËç¢XbK‰ç¯Hà®H¡¬¹$2?£‹Á"mÀVBPMô€L¶ÍB—› ©Ó‘ 7<¢ý¼Êɲ4 "­[­é•Ëy×>x‰ŒÊ`|Ÿ­¿TV^,ŽË\ݵ€Œ±žP1•Ѳ“ï=ج½c>z~@¦Ž:²”°NÍýíͶŠ\|î!,¢1A ã¹wüì– æ åj©ào´›VTSxŸÙxC1ßubŸ¸ à«\öÍ]4?‘1´+Ô˸mUÑê ÓÚŒ•Îñ¦A Á3\ˆæúÞáJ³Þî6•gQ‹Lo á9¿qÏsUý7gäH¿êxI&¢òW¡¥÷ZˆŠPðé½îþŠB¬îB æŠ­•ˆl„…ÌúÍÂÊSžf´$dÙIÍay"èfT•^_¼‡Q¨Xš3”X‚{ b®U£+ç"žÏÿïí„ç€ Nä(]J»óœ._Åü»è/UÑÒOÊû³¦Ûuôܦ8úÐëÝ ¨Un[šHµ˜î·D¥ øB\µ¶¥á'–x÷©ï^Z»zÐl+tÏ;èÂdg §º|[Œºúž­\tDÆ=Aݕ鵶‚4Ý`±î¤½K&epµoBÏëú³(û‰¶v'g T"0;‘ œzß}PÓØ $âbð0Ðý_Z†í.%^ôŸî¼–¸NçXâT»ÐœÇ@Uîf·š¸àDpˆ%C±~dªb`(i³X¢éö¢Šà¦'ô”úó‘\öu†ý雎ØÐmrÖŽ#Y¸TUg5§.Ù¶gÌDàx|´<µUmyøv=[©]Bùn0ѳ6Zs_]!Þøö0ËßGg €”¥Q­Bê–m¾7"²]·,>ˆŒ¤ø4Ê“ÄO ®GN¤wç‰2ÖÐ\®!ŒàA*ûÜÒµIuO6Ê ü–þ릸VåàAFûÒIžƒê@ìkùmB½k>ÿ熂•Cd"£€_˜Ä %6) `öË#’bªÓ'‡{à¾éŠ´&cÇë…jñjþ̺Cüô9“æÏ(i ”ùŽÆjÙ¤^[ bm•ëÅòå3EþH¦Í_ã/Óè:Ê*ì©¢'´Ý9@ ‰sØÁSd|Ú£„`’ºÜ` øž å@È«Mö—D~;û'íàmE0È›9Z¼á'õ5>_â·§¨|¦àLª#L¶aßZ6ìmàŠåî·¥b4˜4Cø ¸ª³5$0u`bŠøBF 9ŸOí°úÂwQ¾õ(û3÷:¶‰APúL=~½ÚfŒ×ñ~{+}Qy&d%YK»&(ÎèÊTkÂþ BwYzô1»w &vàòàº7nãwÌ.î®RŠÅjßÍÁUM~/ý»Õ¾,šáòŠ7¬îtòÆ®¬øAä 6òAÔ áµ×ÊîV2=€lãüïšãHë­¿­šnŒ¸zÍí°q¡DkglL‚ª…ý9¿èZÔs³l‘Aô/mËoƒ¤k<ý8HܧQK,jc’ãþÔ7ˆ) în±–«„‚Ñ)è ÂÀò¾Ë[í&ºóh?‡PÑ·“¥Šyeyô ^^YØ–7ŒŸˆŽ‘ÜÿÅÙúÕ@ƒŒ—^EjLõZñ»Ÿ _"ú™!WŒ±î¨Øÿ¶)Xüz\•¾o¶1eî²ÿRòæOñþž!­øº¨8‘ 8…!`O&-ñ*wNÖ4)66×ðW«h©–}óV¢*]Z[~ø@˜‰:´m(5£3g’eQÑž´çq5šMw›ôy¬¸ˆrá=·cö»b©F¤Êˆ‘¼ “dñõ„Ëꎢ6‚xS1QžÄ{•èWÜ‚WWy ;·tŒþ:'ü‹OöD¢oN*¯tòüÞ' ãu<°iÖgæ q~±r_@# à)Tt˜L+ÜXZ‰Ê Ê84Ù)sÛwõì ú×…F¸+ „ •,._mïÌ 0@(3U0VEH¤rAÌñÝ50z;'ˆ¥#‚}xºÒÉoø ªÒêYÍаBÇ_Å’,+¾³&ã=u*·ø“Z¤%r•§|Úá¿ 3³¼wÂ¥¾ºÛÕH¡CްB8‹çQ3\¨VX¼°á*?µ@Vrë‚׈B°Ö™Þ|jœ/K[Àö°Ã†Ü»ðnŒ÷QdŠZ$K~$Äõ*ƒk&FÇT‹âézZ@ku8KH:øÕ0P¢— W5Rv6n$þë娰­¬ …šKÐûÎà1W…¸ú*ŽÄû>Í.×Óä݈»0òý%‡70­:FÖó1çö“Ä‚tœl1-âÉÈÿ¶JºqÃZ\™¤È磗Cƒx™v®”{CLϳ–ø Ã|"0Ií÷Ûÿ W³h˜›Iz¶Ò…xpªCo§)d¬•¯`BèÍðó¯a–y¥V`5îb¬Gþhû6³†âºáº8"…ø3‹«À²³6§<#îîªzLP'¤š@ØqÉ`yñ)ݼ+ÆßÐ÷®Å?ŸXò‡ÀÈÏóœŠÎ¾5…×f6éîÇA‰9© X}– > stream xÚuSy<”kÿ&2¶6„7Û™²ÍŒ%ÆRÖQBv2fža3cË%KH–¡”Y³E%D–l…)KH¢ÈR")!ï¨÷œ~§s~Ÿç羯ë{_ßå¾n9i+%},É0!iJ0e(ŒÂûzЩ6h¢¹’5àI³@u4¯œœ-žFþA³C €¦áID#4ÅÛzÑÁh à¨&BÆZCUÿ $Q`+ Þ—Ä[4€BÀY” C÷ˆ4:™LÀXk€J¢S0Ʊ*ûgV°!‰DÁ{zÑÀÓÖö‡!0---°GП Ø â=‰àC¬…?@ ‘·3±$ °ŠÆnÇZáÐÆX¥¼£%êS,¦–óYóR¦‘U——^¹3‡{L²˜ñÅ£>Z Ê Áh¦q”ïê ü¹!}KÐÖ) ¢é×g ƒ™.J—®:ÊéöØÄö‡I|ušyçgÉ%&YšWÆcùnð°–ð·s,M ¡§\Ï; ÞçΧó|PýtMþ¤_õÂÁ²÷Á6ƒ]êaÏc¼´ŠbŽÅG=à߼̎7²7)ÄgËÏ|Réæû>Ñyä9?—hjŠÄKþÝ¢¢½êæ¾Ú/0Üb¹m O!üšÃJúD÷y[ãÇÅYÙ2¢tsrbrôkM7¼k¨a˜„ûäéšÕ.T_Ó¶–a7è+ò²ßµkÚß°¥ÑìõT7ÛI¶Sâa¤[©çüuIÕs!'lÎ4ç]Õ@&ÝWóÖÒÏ×Y¬tć5–'g2¹¥æ²$fzmÝ–ÝíT´*]m :0µQ¦¡E2ϯ‡äl™"‡PÄÁÊ›æø¸‘&%)‹ ’Aµî,:lÆfm±AS>¢b5º…—¸ê,.Ko-:ôá½ ¥Dǹsͺ(êVáà@ø8·®äV=4ÚzOARÞw1Ÿc4Û9;0yáëzœÍxlU˜máÀKOpxvB,®<Š-ÿVª¨ÚÌ÷r½–0 B©}š\Rl_d¸˜îû#qÚÝÉØoöÙ_ඪûÉF‘Ç]T7ŠÃNþsóU#ýî_½ódÅ—üm6Äã…Gˆ3â™·)±ëM­ôVÝ{ÏÞ$¡²‰â ¯`,× “©ã:éâx²¾Ç§O«EüOß¾ùåH¹lR yñéä”@R“½"N[¶A·%œÕø±¾»Ï¹°Ñ12ÊñŸ[e·Ì™Ä‘^[Æ|Ù Ëã>â¾—–N3#fØŸßRц$ºr©zdoñzaEyß7/ ùˆ3=Zl寞d¥>;å×õÎ qÍŠß0~Ðq™}–÷+¯hÑæú ["_PgzíýEKPï'É9¶LÜ2Ýù>'ys³?·Pf°;rGµþëÁ©/œŽˆ­ezÔÉU?Ÿ)t•y\“É6 <90ýÀf,ÉW{ÒÔ»çeæÚ}¦a lhL§Lú”{Láä,óyS‰MþQ)eÎ/¤‹+«ïãíÑ59ñø´Ò~®ºröþFã͘Lu‰D‹Ä tÒäÙC‚CNb7ˆ°½º.-vf5;=÷¼Î“¨äY÷Ì[o—Ñ%<§éÜ/Îr¼ TDЍ×ÈQp*™Cìµoõ¹6œ_x3ú:r1&ža\îì JÒà `2$ðQÜ–í$´®½²»a4‘·øý?^Ì/r˜¾Ï°9}y²që7o†g¢8±£—ÌçÄMü¿§¥¨ª7Ï[r<‹º¼©S—;,€—M|x%E\Y¹©ïð¨úPîl•o’ ‹¾L1mÆ1v³­ìc/\É /}ÝþEãCŠwïŒP!ƒ‘` “"Nu‰LlÞñì;ÍUŒG©Ec1—K¢^Az5¯êkN¬L”‡/­lmñè>_ ÜaYq9)?‰¤b ¼Ì%F¼í–´â=dëÑènc3qÜ@ðQñIFÛ²ÈT©ÙýXrÅçp~¡Ovß—¥ cUÝ>bÏ"ûfõÝØË•ŠÆc?p~ÇxVßE— ]kÑíË„‹>| ÄHÛJô$2íÿM3Ê€ßòñ܈Ž0v›öxôˆßhn-¨Ø;Û"D¥—«ŸŽ–­¨Û1E®ï »iÕ"߯ûø%=:ç¤V;mh˜zŸY¾ˆ”mE5dn6ýñе`ÅðM«óTUÞy7\ft-fI®Mæ^.ÛÐÅ'añX+Lúñ½œoA‹&Ñv¾×RŽôT2¦Ö‰H­Ø”ÖëGµáÞê?íÑÄ„>Àx˜qMv+ÖÌž7¿yoìÞ| såý§Žç«dO~‰PŠªPô^â:Ñ xPfSp½¿ÅÂw4Œ«æ2G 9)B% 'I‰¿¸Û§±”¢&òñvÕ÷ @ÕîâcÁC£“Gƒù¼Ë\p‰2a~t&È[©W-12ê]9Ÿ T‘ÿ@í»®Ú¾&bTÈ-ã!‰—ç|h„Œøš@]8P©2ù±ÌsõŽðÂÓL^Ÿ é# xËa¥ÉÞ¸{ ïÝà‰ªÉIÒWŠ_d› wW€úb?$~˜íËÎIÈSBŒT#ì§ÅE_p´‰Hs†–”Ûúmz£EˆKÝ¢D’ÂkÕ¢zÌÓóÈÙþFhGܘ™üêrŸ™º#àØiu6ï^Ó…kjv÷ü–líæwo™.nþ&}Äû¸gÉü@&_êlñªÚõ„¾!·QPâ¹÷8eÔ¸¬H;oƒÏ=5/ø”ƒ@µÝòLS¾-z‰/lKÊl>Ãy®±d6ˆaæaà–5üÚ_•VE¿Ø0ýîÊ—°¡ésù'ËËÎ9æg;vhBÒjÛ*GnýÑŠO&.xUÇó-~ßñ&Û 9··N›öÁéÏB!±Òx~ã´ kÙ÷/Nv Òèõ»+­uµp~G ·JÛlKë÷/žûcu!»qâ(#-}È?þÉÍ}Ï"þXè `kOßк[zì3’4,¬±õXÆM(©N¡þLŠË.æA{”À[©èë¹AÎyiõQp•q°± Ö!=bƒ:7Ò•–ÞôŽú¾©¾¹Óû1O©nëeçºÞù(ÑW‹–1sϬ]¿Òé³°[Lh%2È¥T¢ÉßA mÆP.ËK>ŠR×LD„ŽøT]®¸²jw©WêL‡Ï–qŽkÇŽa³©¼i0sxnf£§ò›¬×t¾ÂBsôxp€u@ݘÀ¦û#|¬µ¯JgéK¥¢îÌu9a™íì÷–âLª¢ ‘-Coª?¦ódç2_f<¤½~˜Ê\ë0gÅ-×"ûÒùâ,Þ>h–²îîL±vÙ'g÷$vPɽgZgÖµÀA’žÉ˜©á¯ÀÙÈ\ð¨PV,LÚ©0ÔÎQ—`ÃÉWÙ‡ò;wfÜ{ÍÒÌr³‡?„¦™ª—߬GVL./Ô 0‹}Ÿñzœ5¨í”û¶®¯ôJ±ÍçS—àºy+:XË|ùP;BM£Æ¬Š/5÷K˜ŒTã‘óŸkµ.¡ ÓŠHÔù2¥{ÎÞUz³ÑÍ“ÔyUŸ|¶qAdˇGgP#ZçÌ3ÐÎoWc½"++koÖ›ÑÑ1-§Ë¤³çˆ¾´§JJuWÇs×(µÈÆöõôÖªÊX‡k‘”k$£*—«*Ñ7Ì$¤õ÷˜ÄW{â=vð·ö¦xôPŒ$-¸rDšéìù1†$Eó€Ó´ïƒÞ>aÆ|Á"K©#]É!v3Ì”=®jj« ¾Õøm¹3?+;9ÓŸrðÞui«xxš?ÎâËÑFºz#9%ðDþÜ`µSR`É G;IèÙ¾ý¾r¶Eˆ­3OÙ¶½£°6å€@2œ™Ã!(Mµcîÿ¼ŠÈ,@5 ֮‘ÕÙsë?¸uwBv–+~äaT5›Ë²É² ×Qz!¬ç-êÞ9‚‚¹DuÜhôvH»ÁÏ\IUnÈì–È»ÿÑ0Ý–ñbÇRø´ã‹œ|ª`Ÿ&땤åÌ#4¾jGX'2nÌ|®)ô[ï4¥ÞP«]7nƒ7'ÇÀ夃š5”ï~š<"l°+ë’ÃûÊ×Ýcå©¡ª;àc 3sâΕo¥5cº,jì#¿QCö]çn¼Ü.ÒNˆ•éŸ6Þ´-eéÿ¤ÅÚ5Á U¯½Æ£e}&×7úèc”bÕ²%^œmÔ— Ç®²ž_4v©šwâŠLËû'O_²¦p±Kº¹¿ºy)×¼!?ÜaCs´Hsü ¸ÆP´÷®‰÷éòyKfñN!yq×ûÃ÷V#®BL˜ ùSÓéÄó¥þjD¢ßáwƒ¶2 4xwœÚxáîß Ùr•¥€¥´AÃJlŸyT¼Í˜š…Qc¡Ô]é‘ ùEN7úwíß6Ç›ãQ L‚—wH¸C›ÿ þ–„C™ 1Ç£µ…¹ùÌFo¿×.ƒ…WËÎn"ϊߊŸqYë,L+”McžæùqD˾˜¯7x§²·[OÍÝnïgŽÈÛâ×sÖ ˆÖ$šýÀR#wn|Ë~-F{ã«°'oÈLñ€â˧jùkÜùvöÜ1yÏrÞD!Á¤uù%EñĵwbÄËÔeKDUWÓŠ¶GÔÉiÐg”士󧯺ìsFë&~ðÛÇäi—&¤ãmNZTxAÚëÁÿ„“7> endstream endobj 396 0 obj << /Length1 1626 /Length2 14681 /Length3 0 /Length 15528 /Filter /FlateDecode >> stream xÚ­¶eTܶ%Š»»S¸»Cpww- °à ÁÝÝÝ=¸;wwÜÝåå;§»oóúýéwÔµ—Ì5ךkï**2u&QsS”ƒ½+3+?@ÉÚÎÔÍEÍÁNÉOIdn økçB ¢w]­ì%€® ~€6È 2°³Øøøø¨âŽžÎÖ–V®ZM5m:Æÿ²ü0õüŸž¿™.Ö–öê¿_¾lí@ö®!þ¯ÕA €«`am ˆ+«èÊ*Ih¥•4Ò {3РâfjkmP°6Ù»€èÎÛföæÖÿ´æÂüKÔ¸8‚̬ÿ¦<Ì@Žÿ¸Ž g;k—¿ßÖ.Kg ½ë߸:¬íÍlÝÌÿ!ð×náð/BŽÎ#ìþúþ‚©8¸¸º˜9[;ºþVU‘ú7OW+ ë?µ]¬ÿº#ÍÌÜþié_¾¿0½®@k{€+ÈÃõŸZ¦ €¹µ‹£-Ðóoí¿`ŽÎÖÿ¢áæbmoù_ Î K ³¹-ÈÅå/Ì_ì¦ó_}þ·îŽŽ¶žÿÊvøWÔÿâ`íê²µ`F`cÿ[ÓÌõomKk{–vEÖÞÂÀÆúo»¹›ãÿô}9ÿk@´ÿì Ý_@s{[O€9ÈEÉÁõoIíÿÊÌÿ}"ÿ7Hüß"ð‹¼ÿÿÄýOþ·Küÿ÷>ÿ'´”›­­Ðîïüûü}d€ö€¿ï @ðÏCãf÷ÿJÚYÛzþ%ýg´6èßlÅlÍÿÓ'ë ü;Q{Ë¿²°2³þÛhí"eí2W±v5³XmÿÎë_vM{s³­µ=诮ÿ)€‰•õ?|VÖf_íÿ€ëß.½ùÒÿ+տȳ(èjkÉi1üתü]W OÇ¿ÜþG+ŠæÿëðŒ˜˜ƒà7/€‰ƒ“íïÝûKˆ›ÕûÿPò_@lÿuVº:[{ôÿöÍÊö¯îÿÇç¿N†ÿ#ioæ`þÏÚ¨»íÍÿnÚÿ2üã6ssvþ+ð¿.ÿß®ÿçù_;y€ÌV—Ì‚lÒ2Ó]kqs‡&$ôû{Ù ‡‚K4Š üªz|Ó¶ù*MÞj‚™§ø?Ú<Oß÷äè÷GzqlizR@ùDÞt}è›Ô< û,F¥Èé§ÚQ?.~Céq³jíïL¨ª•¼ÁOup8Ã]>ÒùQ|+ðâ|pDñ1K­ÅîDkè-<9¥Nóø:ÒŠ>ØøÃ¢g„Å1µjÌ.£ä®á^µézó‚Iàq¬Úá•Óì§á|Ùš Œiš;ƒ;Ÿv^?î v»j|Îʯ`` qÊy‡{‚ ¡ 0}­óã¥Hk˜ú˱KŽc©o7Ù½8Ÿ§1ǘ:œß6|*¸ƒýfV€®LE°>Ç»þK=äRâûçŸ~¼#œßEæÞñL&·S_ µRY!?S­\å¦J÷Ë…zaWü®< »#1îCËLW‰Töêš:j<¤§ÀÚ¢ù),-›°û¬Úâ À¡(9.~»ìý›_•ÏÍÆ™ÍðVýf¯">ñ|Ñ¿ºÈ«5<é&ì¡»}¬,s“G¼ù gE–‹™·×EÕ*ŽÁu¨ À‘èç—b]‚Gwâ¯á`?„Œ{î ê{Ú¤sòegR«:å Ò5bùÍëX_÷>æ'ÞèXMõ(–»®PÕëfêVQÉâ@À¼{¶ŸÔ®VÔv× —ÂÞ¦`„]Ë£•QS`å+Ì#©Ã>oR{á™:ð\L_»-çª_Ôz´È9 ” Ûõ>Gvˆ¸ o@5º¡¨)9Í­¡ïÁxÄ×·6Jo‚Kª.Ò&eßšæÃ#«%ÖÎlñ© ùjIÃâ÷FrVW'±D¯årŠ4ô[#ÐpçK\59n+!§*¦Êæ‡züŸŸ-@›ä3£ 5”JcH«¿Ú‡ó «œ!oŒ×ÒÚ Ç÷BùeæØÎè–w_—8å=–óƒ]BŒïñªæˆvaOÉB‚qŽÓec=©ÈH³`g\SÂIvÞ~ xÇë:(²,ßpOÎÁuèsðÜvÈùVÁfÈ­‹v±¿ Âáä 5þ™N›me™©ÀÔÃìB3‹rºô­e*¦K]àßL¶4¶¯\VSÀ0)þ~“8¶5jøÃ ðP¢mz™sä‹îcÃ5âpãæÐ«:jÏúY½NYgü •0oˆžg°CYtÄabŽö^“Ò½²N€mŸMi À(Ç Ehü¡ëf0$zíRÕ3-á–×9«æ$¹Ä´Ò0C,že}¶ÏxÄ›o©¥ÄùmxVYùÎKð3/uäP{ûüœmÈΡ-äá釬lCÓΙOiWf@dŒáú·(L"ÅÅ|HÒ .±èÚцˆôb\™àݵžkg7˜Ÿtò¿ã(Ó¤&¿¶tÔv‘‡þ¦E /ñWÆlxAZ€õËÛu‡3ê”Þ—Nç‚ëþ9MžSYÓsDüØ15MSŽÖrÕ»+°ö(§ÍübŒgÔ|¾SC•ýëä±(FŸß¹Nýò¥‹ØÑ…?bãȼ˜z6xʧ~l_¹ ÂD ›-9 eßwV€DO÷Kî€J8Ó¥«Í¯ô—ö× ÖðÍ1,°ÆlmЯ ݽhóhÝNü¹PŒ‡u2"uKjèp"eÙ)ËF=³Gùö·6^ãž:·7÷m,BĬ™ÕV êë„}Œˆõ<³Aæ´%Øi#𓸠ÈË:©µ3³¢ÜY¿Ë䡨uE²q=yKp‹Lïæº.–(û¬T}>Ï­Ôê«?Dº“ÊrEÞ@ëÀ•õûUÑ(Xè…ï#Üš)Ї? ÖE(áÈ“+øIÈézVŸ2<’¢@c¥[›‡NE°”÷<ïXÑæà@÷|œÞˆ˜r ¹Òº{t×rÇØ‘ÂdÊʱ((qdNzãœ_Œ–:¥qÓ½OºŠòÑúÊ}¯ñ²A‘ú½ò„bí ŸqAŽªÐm–8És’Ï/(à†,t"çÆÈï.¦ÃCÄ9>¹­::æsÖV_…÷‚ªË¶^èDÆÎÃÀhV2`‹ÛÌNÎÁ '¤{ñ2Ú#ÖúGž‹äo<ô¤+/odMe¥T°Ôð6Ãr-ty7IôчãUZX oûî /ƤreVu½s:±‡PÇŽ Ž÷ᕾîÄôð‹z¹ƒsÙÖ ‘)]j—¦C@*L³°w1Õ«MEÞÐ’>ÏùvøùÅyËë].dG>øýæ¼o"[hJë]ëU§î ld·ÿ9½ÏDŸ¤4î4Ý›má<7½N6Üs?œn8è‹bÝ %4åImüÑÀ×£2sËŽ–ƒü¬Ô9;bÙÒ(­&Ožg.$/H7´yxÞ…áZ@j7QÖGtÔJüÓzºªùs|q‹ÿb(è·C NL.`dç ™¿LÍQê>¿äYŒ²pRøtaÝÞWØ6›²C^~ÙB‰óµF¬Æµ¶ð"yŽzi+«6ü'ì®ÒrŠîö*rè¬Cô›¶…“É¥:n©~éÑ‚R¨)„×óÎë?Î,¡½¸ úà%ýÜKP(®ARð‰BÄhâæ±@~Q'@ö¸á¶MmFʉf´ŽˆÚ@nt4Û¸$øC¥Vƒ]´”u4àwSp®qëóµÁ›"ºÈH_±Àh æ,Î8€J µvG\Ï8í~À“ú== _Ç÷ÜÙJ3‹¯Ïi )+iÀ^’6³2Éìí7}-MŒY‡4·wmÆ:ÏO¶EÏ–³þ¶WÛàÚj„áêB~S‘ªV˜ˆ7M¦ Ñ–r:ùB¬wl>}¶‹^Ÿßä^D¨Û˜Q éE!Œ¨=âæ…‰Yïö[…Lª. ûž³”ÖoõÎ÷Äì,÷Ìué(H´y,°‰ùü*wŽDî<3ÖB„b§$¿ EìÞÕÎûXcf}‹0ˆáV;Nxs‹ýX®©ËÍú1-'V’ßdÁ™uñ‹¿TT _†U.îÆ3{Óóv7lîR®¬x½hô0±8³'š sZƒ”Y&5Hê_¤¹|mVïÝ& öàÆ-É_‚FtIªK†CX؃s¼i{B¶¨Œ>6“•ÃTºW­s˾gc!M³†þø…  ­;ÛHÔ™(â³›s[¯ì/ŸÚ¨'¢€ïܽªÔ·'o¿L0j™geoÒáõaà·æ_©©·ŒâlÄìÌG;Æ‹Ï.Ѻ’1¤<6óeUà•9§°ÁH(ãýå?SzV'.I¢˜&RsßXR£iE–mòi·ªÕyÚ­XlgÝŒ¤²@ÒÚ QjÚ‚²M°êÂwŠ?JrD–²Èö|¬]´L%ª92~8xAÂi%WKOi'h YÌì ÓK¹™î†î“@àÿ“ÈÉB–½&ç´²Ñþ÷YÔå.É2§{>w–Iö·ú±©ˆƒæ×ÙÈC}Ì«MnŒ¦Èù]FÙg•š£M¹•F¿kùì ý9Ìß¶a<ÅAË'Y ì·¥‰A’¥r4”‹!£<ˆK†§YÁƒ¨Ä¤!SÐÜŸX¶ó]¤&Xá’¤V¤×¥NŸ‰óíJž2œŠï[ö|!*¤Â5¼S)nv²êjªEo-+—QCMœ”HÁ{¼;ôíb`¥zFÁ<‚ù¢!~˸Z{nî„ÒA/`w—Ïçè¯^Q5Ìbâß’X‡±€$äÄ{HM„ÎwË?bS¢TsàâZ!ˆ'Yà}0œLòˆ9Ê—ˆÕ¶R–ý†R«Ãú) ‘ÛHñ@B‡6w®‚·ÀãuXɺq¿cïMj¯%·åª7v2…±óðÄ0 Z‘Å`‘Æü9ž£‹¢ÎÎBŠÌ²oƒ¯¿šÚÌ铼©³½»“vóÏ®þ¬ºj}~>TaØ»ü£¾µð+´ñ’Ǥº¶›c&š1ZÍËÖô›£g<ø÷Ä´…ÈT"*=hýx|º`^ª>3 *ã®|)ãX0³w1¦„¦Þbw¿c2Ês‚…¦\o{šƒG²/Ää•QÆ”l %‚М&ß­Øð¡“st‰œæ¦IâF÷°r 1KO{^—ª]QÂ%l .7߳ާù#Ý w‚ ¯ Y¯hl“€èð†äÉ£×+sëŸä…*&–’ÒÊ™¿ ‹tÉŽ8!Ÿt¶„Õ¯§Š02¹>HOœÉ V85¬©Hº¬×Œa±%:~ÓªKÈâNüô™¢]we`þbß\åïŒSw˵Pø9ˆýÐÄŒƒ¡òQ½Á&¿Yß!`;öôË@U¡LÒ[xd¯s;pŽÝ×®<[{à0Õ€24-ûxSÚ`w[–OrËó·íKɤK<‹¢„:þPycÒÚ_µ÷#k½¦þ¹T@?G)ý°²!ò¼ šk™=`áú9ß@²e(Ë3«ºTF×Ê›…¬MM^;rš±¤LJÌI*{ùmÊzÿçC…^’Ì0V?že’u»ÐŽÔ<žOx‘ºõ ¹d_‚OÒlN1*ô•†üµÊã[8÷yÀ'ÿ t…냦Eò7?`T‚@e3 J-ô-þ"ƒôÆ„ ½=Ë@Ç.²ØåéŸçñ9Teõîè- (Ëì¿–WQ…é*Ç?Da —<Ìà¹;¯r(¾A#Å:ô?§ŠƒL ?¶%í„Zoá·Ó{K,‰ùÖs§C\® 9zqܿЊÀHUÀ^ƒ=äO”þòt1KpyAtßè…ž3¤>¼ûLÖùw+, è…Egk€dD ÒRËÜåàw9¹,/™; ×ò„ÁŽZ£Nß ïqdik(qHìz9™cÃ6ã…òº".™võ£Aí¸(žçµ½Í ìu9‰Î\äŒ_©8„÷Ç`Úx7Ìd$a®0@S{‚ê365Jû#ÓOf€/2o€ö¸\{šÝ G±¤  >{[MMÑ&l¸Y~ý¶éç-1†áœ@GLäv›Õô†Ž@}qbµ‘æ-Smñ˳¿Œ“A3¨™¡D芈/a…1Í¢j T‹d^wYdtÉ´z¸8|À\XÓ²3žè”g•lÑÆ† ÑRÈI\ŸÕΑÏJT¢ñ†•QuÀa’Mç¥Ör?mÆß‚Z³r®‘%!UaØ™óŠA6*àÕîLЯô5& œ¶Nï,ͨˆ1àsHm~jòOðÏ; ÀóJç{˜ùh?e Jíxå~³-gÕÆÖòç] óÅ÷¬3ãZ}õ¶®áo=Ý®Û «¢›æŒjÙôz¹_%8•‰üÉR¨û•Â!ý¦òj·'#Ö [¿s«É|u²¨·®smûÈlúHâÉ4‹ŒM¾‰,C…‰8M*mÛÿ2gi­øÔ^ÑøìÑ¥7¨1\.ÿÎßð¹p£væ¨æ‚T¶-6zqÊÔŠ¬ÛÄxŒµºö;2øçù)ZVÐHt(™%â÷#Ò„ÙΣz N¢Î½Ém?¸?æî„â—¿~š‡6{¦ð+4Ss“ßݬdd ÃqâY‰bsÂÌç%Ì×ú°¬qX½MM51°¡øàP}%R3½ð‡ïÔbU¥³ O–¥ü)çÄö²ùʿ葛1ÍA×À†”f¼¯S{M¦øWÔŸ`Kô¿°kÙî³B--ï’(K×È‘Ç""ÏJÁâX†Í§‹D_)C*L~¿†ÍŒ|n¼Ý^ÑJ”¶Ó²¬4®oHw£™®}†³ÓüÕg¢0"+„¼Ö8ÞÛ,¼¡ý‚—À¢DUc³âc¬þóIÄ0ºc„P:5q}#À¾‚ãˆÏ~Öª-þÎ]¡mÏÜõ÷Ò¤'ò7Û{>Œê½ ±r§¦RLݟĸ îF·vÄÖ÷Üøœ¦Ë¥3Oa¾¶ùra…çO«¥ï ŒÍDpIïRÑÈÝìà$ùçƒÝÂsä<õX¹p²õ*csGÉ¡Ù]¼ã|&v[±ÇÚnöxôpxáJÍzfÞ&¸*¿DKŸÌiù¨ajeª-—‘¿’ËcùûâáGc³3ðŠ‹f:R§/ıÆÁy½=6ÌéïX2hE+c ®”dñÓüŽ)¯0¥0K)tc¬Ý—²û½båƒyŸô¶ÖË× U0¦»msÈï‹yuK û“Ѧ“öVâ§5ééÔ…Ž<ǵ•T¿£”(ž)‡kŽ3üH㔽Т¦* ‚‚»_Ãwµ½’·g¾0‚HO^/j4á ›ÔB Ž?iê‘»À‰}çáLSî;×–C^f®ðNN~?Z•rÐVƒ&6Š%ŽÊÛRתä÷'²§4_°SƒÕLuÁ±ùþqæ¬ÌMrà+#xÆWüÜ¥pÚAD¬E£@(Êæ?´8§ÞÝHç, m½36ÅR®Ýwn{wc†µ|#M~ˆíܧ{ϦDxxÆ;ÁFFëºZŸ+«üàžËy7)v0·d·\ð{¨°¹XÌH“¾èh4Ã+×T¸öÍìóXè§•šÞ ¶4¸™lƒžÎûÆÉâC3¡ƒ³_ºœœÂŸß¾kïåÅþ û<;YsfY;LË—˜…­«Pàç‰Q'ó?;}§.ÕѶKÀ"ìí/d©¢M¬Æ_%ðJ&ütülØ‹ÇK׉ =¾[ÓñãÿZ6ºžƒ_ ÂêËçýàqåÂRvûÜ:s tÇùâ‰lòHfYêãj:Ù—=eéàÑ׺xáÄZƒ“ÂFÀ)ÕtãÓey\VF¡²öˆÝ^â]œ¦—É4&Ëû|)"MGñ‚N0ňÿ‘é±30MpÛ±t‡â¾þ~éÓçþË«Ž4ÝN‡“K%NX~›µnî7¶mÛ œšklò4ˉ³¤ Ë"çôÊØŒWƒS3áÒnè’¼*} ¿!ÿèº&U¬z”¯RŸèTpj¾_E\R£É†ÇôíQ*LË”Ñù9­ùMƒc¡˜È_ GwCÛš¿‚¡H†ÑÒÑ (n­YÞï*µžm©ëe2˜ÕÓìúŠ?wµý]ŽÂ|18ÓÖŒŸ®d(—ì l*«H˜›Nè;jÀà¯üŸ†üªÿrLÉ&é €b8³–ƒÄ\œäT|„?ÿ¹†CAQÇÂÝëPZo:ÒMˆ¥ãt>p7Ì­÷ª’|d 1_°egÒãŸè£OŠø3ˆßŠÊ’{æMS¢â[É”@¬·¤f €ç(]Š‘ÇtO´íëûî‰"%ˆzÁÝqHÕ$N}—Xüå !g®7èW®M¼ö… ì*°¢Il£(Fb©4#€KO¨ aL;|3ÐdF@¢  CÌð‡˜I0KÆ+Ü7—…t ÔÔ†}·m¿öq~#aE\§°ßáå‘!ƒur‰{[/f#P·k‘¬ÅM9äI'—Ñâ<ÁFÔß5[¶‘yí'^à“U ¬õO!%shèXÀr‰ØÌW‡éøÂ×]ý¾Û¥¨"»3×(žïZã!Ýól‹g 5¼\€÷äI·ò´dõñ®ü€5—Ô,Y ‰©2¤™¯è¹Ï'7êFßU¾²ûf±…V2xÉÞH.uøùKtrÏíánIy]‹;ã—³-ïà;Û°øŽs´¯°ð:ò†oÀ0<û“1a™Y˜¤ö&À©s‚’®æp²ºlã ¸ 8|±&7n/u>Æ)U› Û`M’šZ¨œê5µ¢#3Â@^º¸øhdøÇ¢(Bm5Ô½/¡b¸‘û3¨Gpƒ¿4ƒkÙ”¸Bk ®ž¾ám$ã秬Ü=©tµxû‰n7ƒ#¦í$fé`Ñ÷ü)Ú,RãÌØí•ÔÔTǤï¡ÔDÓ†h§l×p—]ÞY±±=!î²£7×;GY‚áwv./FÈ<ˆá•+2LJ&. À½¾Zçùó¬lëK;9hËc@F‘¸'æÉk«ƒ ˜šþ²èÈý˜¦ºº-±q½"'ò<îÇüAòã‘äƒû &ôK"¦%­íÍ„5O jcŠ˜npÎV,Ñ/'/9ûK*±Ý}1P¯ tû§þÐWÕàJ×ÊÓY´©f'¡€ŠÚäèæ<‡ï ¼L¦Z?ûÐK—ýêË\Ü!kµ?‚¨Îã'Cdž뗼]OÖ?>Ä?3ÌLRÛÞ­¾>[øZŒtºÛMûîsæTQMSyh½'Á~¢Á=,¬1Æ¥rtSŸÀ8„G×qÍ [u7êR;Ášº‰Ð¬J‹s[ï˜;d—÷#ÙxyÈ]:sIÉÀWÖúzϾŠBbੵ¦¸,gjg«Û¾<ƘöÓN:ÙK3ÒÆü–ê‹pÏ;¹“$>S°œr•UÙM>“úŸ®žõ•$hj">ožôòƒ²¯£?L$—a)‘¢ÇÈc€”™W1ŽÝ©äø3O¦V;´ÄI ÙrˆKšÂ˜ß¯–­øb¢_ÄA _Œºbßü¾/Ô‘Ì?è¡âW®š› S²jæ«Æµº{—í{Ä-¿0R«ã̯ÏcŠëW¤Ê,…Kòåm0äî'ëŽBÇœ´=\0øHF)Ç»o¾ÏƤ†¢‡xŠKÅ ‰?)`ëYŸµž‡qP ÇÓæg›#ZqYªÅ=Þ£¿\´ð®ù¢h¹Ÿ©3´Ú>c6'íáp&¨3+Ò@Ê’•ÊÕ`ìì+q+X¥Krv>ÛT»DD s‹=„¡"÷Þï ÆAòÜpªjãg·êíM¼£ìÞ§,>²>ÿX¶0‡ÐÐÏ"±†Úöþ<A‰Îk±„‹{•NXŽ } ¯$€¥Ÿ[A&Ï,dѳúáºÖ7Þ†õÇïÛ„ñWþBøÕáÌ5ºì|Á+¹dš‹Õ@&v솺>?'9yŸ2Gƒ$JÞÝÑëålYµíV7ïrE!ÂêH¡÷”i F%ìO¹j•#~:ƒÚ(÷kÁm+´w5>Yª€–qi Ø âÓ§ž”_&[Dõ˜{µUÔg!Z¿½ ¯·®&Šb+go(¡4ãXÕÈ üŸE>ŸErŸÇËZ4 µwÂrÓ~-´-ßa/Sòö ×…;ÀQuN0íéâA³êFc~_”TT^ts$a(Ä%²[cùJ{}ÿXtL0ÈÚÉ´ùñVo¥-’¤É—ŠÉPÙš<ú%èÅãÕ¿ŒŒ‹mÒ²3wQG>ß-ïÑT|½fäÖùJ%öºÛ¨@{Œô\œÞ°âüXºtÕÔ.¿œÀá¨Çe‘jôa#ŸÞéΊ–¨l¹õa5W-§©¢{½.Œ–ke „^ ½€™õ|·ÄZßÂgÊmý¸9¹“<1s)NI³éÕ'G3˧˜ ·“}I¿ÝDçádP ˆò˜Y‚Õ gÔXb¡t¥ˆæ%ÛÜŒâÔÅCÀ$Dò7Ú³´„âÀòRïq;GùÊqyÝq_É´yðÇYZê¤K‹\ߪ-Šžîà•þÇÿý¦ÅO™ŽÞµûCqÑV`=·üç“ya6œ’+ÓÃÆtœ  D¦ÓKq-:-A¡;‰é£*–»sË)ö)Soª.{ ¹ž´·±F³È³¶EÞçeÚú›m¹nÁš‘†Ü~´è0Ve¤5²ºá„"RgÇó]ÌŽãÝ.¸mìó™ Ødž‘SØ…ížX-_Ë?áÙèI@5›Ý‡~•?¡Û’c-ýäÞÜb7*H‡–ŠìþwVþvßÊr(V&)9×a<¨ÞN¤bcôSIß= @~ÒÖTx·DðŽ·T·è‚7½'14ÙCŽŸçæŠ?¡Û,[ä¹un3† Y‰u Eƾ$ b¼-ƒ%ÕÅ¿kD& %ÈNðâG»6M»âwfS“ NfŽàGдŒHò風zÅå â¯ñ¦*•ÿè9Ô5l½VÙE›£¥µÒÒÐçKKšN0ß¿† ¨ÒBT„Žež+Ù;¡7ºÅ4ß¹\—ðÞAÓÏ-; æÝ|§ô+´ná ×SË:TSP?È] ù"7Ÿèä+tÀÆÑc#|”!Ë{t 7´ˆsI9ÝK[UDZÜš½­ìÆ Š¦%îað´ËŸ6‡¿êÓúcj/e–(bÀTê¾ÿĦB“ó ªÂWDD È÷­ßS½¬.$fUõ„»1Â7p…û™¬ËwèÃRák {Zî»+“dåé¥Ú7ÎD]ž‚/‹}¹¯?•>…g»FÂqujÜ2I|Ç ç8ñUõ/Ö;rÆ4a^}(ÑVF†"õRöN3òAÑÏ÷ƒÎáÚˆDäÈÓÝleÆ€'eÜÙn2é@£âf‚0ÂY ìsz­Õª¡I†¾E¬SŒ²w=8x"‰…hñn¨†¢nQnÎ.g7OR qg씾¥ï€ŠÛRÔܯ夸„ïJÙ¹Ô hÛFàDzËYнŒOYôßÚfþ8¾aÚ!LQŸ´x~«ò;hÚ…wæïþQa‰ ÌIuæ²h±‡§LÃw(ÏjËXÌ–éå¤Ì#l^ÿB“Æ1ðÍsöQã—¶Œ¤QÑ¥„7¶i]ñap[xœÇî‰þòèt>zIÉòiÎzKGý]Öí²òý@u)™›LÁßßá4UD][1¾/+nö\¾"'s¯s 4ô•GÖi$ã?/±ýä¶.哪ø?ëóøøÙVÉUes=òWö”ÃaÃå¹}ìrãN®½ ÷0iUàXªþ˜ÏÀC|¶‹:Œ*á¹J9Û/Çþd›6Ëuqml³"Ø„¸vÕŽp¯¹Ô“š5Ëølv©j­Ï•Øœ¾¾ó… Š·=Š8²±~cùÞðð–ÿéØV \¶ZWbØ#GêCÕÓ Þ!"•î×)vaÒBnµÙ XĤX×/MØg•úކ„3\U¢êC4†˜gro[´Ð2–CÝpÝÃm©Ýø€+#8C5câŒÞ'N%jšíWòlŸðyæ>L$%ñR]©šÐ“h«7ˆžxøß±K`ÆÏ_N¥‰w][d>I‡¤­ñú§Þ‹[…Wy9Ž ŠwÞü£[ÀçªpÝŠr:½Ø‹Ö#’?Þx¯ÂØiÅá’)ß¾¢Fåy %e¥|nIïÖÇm‰'¯–ž$)Ò¹êäÿÖÝUƒ¢â•*ñ6… 0A/!¬ º y–mÕA$]XTFý„+#Ô«›E2殼Ý8ÌHìÑsÒ®Æý¥~¿Eí`O¬Dˆ8ܺ#xøÂ* cðJY80@–]•kUÒûÜâ GM™ãJ!¦8Ò·‚xÙH€hå-¯ô¨öî!‚“¸£<̽h †äy£^l°’0~=î‰;Læ%3E‰C¾€ù²Ô‹‡ù:e‹%S›\.ö΄™®ûó/ØÌÙZ%@çfõ#õ>"Îz»Ê[5VúŪ¬Ñ « [ÖQÿ^~ÄåóÏ… 2Ø„¨íœ×íd¤<¤%ð¶7ø4Ù"ÑíŒgÍšÌóõúÇ.gÃúݶç÷tp|8ûúˆD®£ÃÝ»W§ ?Û‡[e¹ØÂZr$‚Ÿe–ó ÈmU酪!& ÷{šå J¼ |=R4àðÉÑfæžØÛúZÂÚï¢Ê®äC7¾æÍv ¶-Š.:Þ_#ÚgÏWå¶¡!Gqˆ‡IŽü:Rñ—ÍB¾ôG—}×ú@BbˆËÞ¥ˆ$Y˜Ù9qb æìóã ÙꓹŒl‡:óáÇnß+·á­Wܦlª©Öa·ÇôñÔ" FÓÅž—ŸŠ1Ò€e½ÎÍ('4j>S½Æ OÿæC‡H¬  »Lš^¢Nü‡³IÂTæµÅ‘C !šÚ¦‹†=Ï»užùåT$©ÚÒ¨Rg ][æ£Eý}=â÷m + 'B4&xRœdUÁ’}ªݬ¯Xw¼¨xI#ÝýÎñ‡93Zô t$mB3|°™»Þ¨ž™^<ÂdlÌ3’|êüN»É¾ž+Ð"k‹†¨F4®¥œº@goc­úŸªÚÏIeU_ܘ¥gyzð“…Fq¸ ò¤º[àüº‚›¤ð96r¸ëÜÖSÊþá0¢º.ïB úÐ~… ¥®'_¿û˜?Á”Ž"¦fÆ7¬ÉæûX ‡—‰0 ¶'.BºGç6 [ ðQ$t}í®K³ë!G©´àr0DŸ2VIÞym50– 7g-“Ú4²›£jv}&”Žì¹ZЦ¬ÖJñ¸7ç‰Fm·Q]u2«MõG€¡oÃ3jº3Cª¯"AºÅBoͯ3A~Lk1¬z”­hå¦VGµY: ×ï)`Cºr“.I$Jº‘PÙÀÄ¢[jí¡´ÌÊ€0+TK÷"PAF­ÏÖDÐMºf=”¤2àdh] ©×´2ËÎ B+'=7ßñêâ §G޾tÃüv0·΃1DUsl¯¾Áz!x…IûŸí'mD/ªýÆÒ~Xó&&ME‘‚xic,ݾÎnÑÁ,ðz Záy$2-ð y´,ªÞ¬Š†¤€n ÍVâÁ?EûÙÂsÀF©Dg4"Ó[¦R/D—œlƒ¢º/Õ5îVÓŠï0™=–ì!Ûìù6µ§4ñ¢&vSô¦Rº <ȱªI×LÅz0 ¡Xtpß㊸eÎwšYm Á9«Jò¸ÄnЧ/»T òGJp%£z¶è˜aéftÔá»YµtïF%‡¾ÛŒŽà ò[ËÒda//=š¼š²Ûï)eC)DêÛZçRŠíÏÎaî Ä´\×öòü:¥W_ܑë`ÉIuq–=(êWÛì£à#µ“OÒ¤Ÿpìä,«Ðð‘õðtÇ.Eè’ † ²áÙµu¶«DZÅ´rQ;`3Sód¤€ù¾1‹ æ#½Ò 5X ÂÂrÜ:ªäQÞì(K¸¾îSF-óÿéß\ŠsçjõÅyÚFËoÑÛ­¾PÍŸ•‹Sµ<ÏwAx%&©0eNÍT3c I­¸ô†êwÊYò,ïX4 ”¾$é’!->‡ôÇDÒ*ýZ¤;¤%$Ý¡æÂfè«+GßÁdá·~h ^,×{QìMá0Ù…³”22ë^Je†êàHXûµYC@—bùr,OómX×p.„‘+Áa³‡ZF)Í#‰ P«;/;±Â E›S$—¯W>.Wëp#Ãǡݙ&Z*.oï&ŸG"¸•QìÎ~¾ËžÍRdHÉ7<Ó™evJ#´í &¡)ŽR“[t«z/$ã¨(RŠÔÚž ›ïs÷G}¦ÚI†ÖQõ<¢ÌT²•žþÐE‡C0ö­±¡¤È<æPé 0&Ùã€"¿Q-– ØNJ+åÉ«PsEÙp$UD¾¥º=‚øÌVåga¸Œ”Сi߇Ò|añO,›‰sà½ÃùugÊúZ¢ÅÀÇ×÷g˜•vžÆØ{Æ5‡0Ù—,ÃíbçJ£ïÁuõ»s_­ûS-‡Æwá–w ˆ6ðÞ+ñx%`ŠF|[nà܉‘&rÿè¸óù–"L¡)@&‰bš»UêÝièÀè?r/Ÿ=¬½ åæÅˆå]4 sµÒ Ò5å…ÄÀ0y˜ŽÅ$\óDÑJÑg'Èšjêk%;yÿ ­o‹ˆð]ÈÀ2Åbú8œÂ¢3½ªGƒ$—ìÂNòg°ÍÏ•q>¤Õé—ê¼èÖ]CÊjÝÖ+pVBÕ—[l³É_B¡}Þ~,óØ”HI.ÍNìèó>;ãh}‚Êv#>ÄYÑC#Òd_pO!yé€Á·àiˆ^ÝHº á’#Ë­SGl—ìV¨6ؽ֋»ò8½¨¤¤E¼ ¿q×Ou=ÉýàŸË]á,xÖ·yTkxáEI·L–òÑêÜOq2óÄWœ°ìª)À +Uü¢•Äu®åGÅ^pê‡Ø¦œ"Öñs+ˆ˜Ø~,¶Ç?jÑyeà…C(瑲¤m+Cªrl«ãå\KŒPvÍÅÕq½uM¨tÔ!J¤F!íe¦±‡ƒá›Ij7:¬ÓW-: ßö£Çt'_ÎãIŽ40°p¦Žk¡‰b/)QÉ´6 ùuõ‡.–˜qȻԌ-¾ª±6;¾œÔøcuÚo:‡°lc8ßCªù+@Q‰‘aøŠK ïg›mò›x¢äŸ„ðm9 b ‡PKÐh‡ŽP¤ß*OÕÌm‡“»§aÎüÄAûw:.¡l0¦Ãч<\þE­Ékñøå*ªá+ÿ€€ã³/_N1‰®WYû´°xb£Ù³AN ÉLEµÇi\ؤØlsçëi"£¯Ø¦Ï¾}o¦TŽ4„)ƒ¾<æÊ¿¹9è™ü>»ð(MôPõ©}ª2þ*‘¿å˜ GÀ¿«]îIúVÑfìlÙŒ[ÀçG78@›‡ÅƇ!z0òåÝž[ùY(•º%ÝËlá†þ”‘•"eœYxÈ ètåaî vQ‹k…Zº w=Äø-wí˜L¢êè2«6ÓP4ý€1ñåÚp‘ œoã}Oúòë^çðô{Ÿàd4wÅžM˜l6—ö½ÅÑN¨@vá0-è“Àh×û1žËV‡1Ó˜žx J/óFÝwûàÕ{f3ébFUS#ÐwìLÛ6zöàã:Äw9¸G¶SO™èUÔÙe9œ…U-J‡‚½»X®J>bÍ¡kîŸ9Mkµ¼ÜÉ»¦(VÀXƒp'åÿ!…²„ ã.&§tøÙ—Ò¸ÔÚ*@S©êQ ‰N»w‚S /ÚÞYfšùP4ÜÉŠV.Sƒì´-4v|”~eJ‰RXFV6ú"èF_þê Ø™7=[esQ‚‰ðÍwÔf4|Éê‘àé\7Y'ÐFÖü| ÷ˆ/;’^üXrø2µêÓ¤/‰®–&6.ûnijÏléxƒìØ‚sÔ˜¡ñTR ?ÜâF ƒÓ§{÷^å2Õ ’ÇFà;Y ¶#ºqØoW6ãð´í™üdóÇ›l ~¸NùILý»O§HıÖK“ˆP;Nö%ýrmâRC»4ѱØR©üó,æûk…X®ÁÌú0W$ù¬Ã÷ìÃ-’r $Ÿ´­Tö€ðXAy«AÎ?ôÒñ€ês÷O/V-ÖY"$©y/þS ÚþOÚÓ ÏQ5 ÚLGKÏ;â,ˆÇo_°©ô«Ókž1^r´Œ`ä‘Hß-Î:cœPŸÂÅPlè$S?ö©?pÔ,¾dÈzL÷9úÉ&ïep0?à"B4~â_–¯˜%û $"z+kG®xWpÓŒ¹•¯tÐ4t;~¶È$šãçÑî9ïX™X:¼Ï«X:bÙài§ºñHzö7l^'i˜¡÷Ì3NØeÆi;¼t©Š¸aÊ=xºMY æd>ïN³ÐòCݦ9±ƒ$CÆ­'PdÖñdþ³uƒÄ⯧­t_\aBx•KRq#vÍ:ø£¯ .{ÌI ]‹F^@ kôÒ¦Uc‚w¹ª“F¬–š˜oöS¨þŠä6-ŠïW¥ü+§4ÉÍÊÛ0Ëé™\ûªhìóî´`$5ùÇŸncA·2¾Sc満ü“h¬AvÈ2‰ÚÚ:!1•Õý“¸³RŒx¡ ßXHÁÚäQ,¬©'gS³@Æ!}ï„¥u"Â_¨À{¯µE»6A=áBý|îl"¨J3B´,ɨW\‰e,æ Eœ@¶ÖE+h}v5Ù»|1ó/N¼k 7ÝÊFDúÚêʢ܄ëð+Œ— )æ”FÖ¨±n®DEˆ5=¼ƒ±ÑM1™ð²¦.ÚKz6¦¾4öÄ[Jh%D4+PÞêlééÐ^³Z į[Ö¬ZRѯ—…%ŽÃ¸¶â1WàËAsþÑ1xý-U¯¶Ì7¿gOÒˆRù…7ãIÀ%ì œŠû’SR)“xሢ73ù©wÔ·ëw³Ø²Î÷ÌãgÔÊvôäíXñd•‚hGWûÄCAçÆíX²°] ØÀ´RüsÖäÝ‘øžUüòrž3ŽáÆhm|˜ÌÞ z—üÛ÷·û¬í®ýºVM»LsAíë ú?Éà1YÔ¦†Š)(…ðJèDph>Û<Ï&7{•©èáµd¥Iô~úq×Ñ\3Dë ®,"ºé B¾ø±‘‚Ò"î/Þ˜iƒÖøïª8›ùjö‘"Aˉ\Q玲·• ]~f—ïÙ_Ȉ³?«Eˆmí±cÊ.ÿVÚ|-à>fÅ ƒ©Ò«RCHÏ–‹ùnDßœdwì²yÑ–U‡úB,cþ»eu¶R¨lô7ŸÇ£ï+so¹7!2é+2ûߢR[°âuÆDzX©}¾ÞÑÿÚíž endstream endobj 398 0 obj << /Length1 1630 /Length2 17588 /Length3 0 /Length 18414 /Filter /FlateDecode >> stream xÚ¬¹ctem·&ÛvvlÛ6*©Ø¶mÛ¶ŠmTœŠmÛ6¾zÞ·OŸçëþÓ}~ì1Ö=qM\óžk¬±Éˆ”脌í MÄílé˜è¹ò6†.N?íläí¸dé~š˜¹þÊÙ`ÈÈDM œ-ìlE œM¸j&ÆQ#33€‰‹‹ † bgïáhafî  Tù©FECCûŸ’L†ÿ¡ùëédaf ÿûàjbmgocbëüâÿÚQÉÄàln0µ°6ˆüPÐ’—PJÈ«$LlM ¬ .†ÖFY #['*€©#Àú߀‘­±Å?¥9ÑÿÅrœìMŒ,þº™¸™Øÿ£¢Ø›8ÚX89ý}X8Ì lÿöÀÙ`akdíbüOå¦vÿJÈÞÑÍ_Ý_0;'g'#G {gÀߨ ¢âÿÎÓÙÜÀùŸØNÕ;Ó¿–ÆvF.ÿ”ô/Ý_˜¿Zg ['€³‰»ó?± MÆNöÖcÿ³w´øW.N¶fÿ™-ÀÑÄÌÀÑØÚÄÉé/Ì_ìºóŸuþ—ê ìí­=þåm÷/«ÿ™ƒ…³“‰µ)= óߘFÎc›YØÂ0ü3+R¶¦v&ÆË]ìÿCçjâø¯Qþ33T“00¶³µö›˜Â0ÈÛ9ÿ  ü¿c™þ¿äÿŠÿ[þo¡÷ÿÜÿÊÑÿr‰ÿ_ïó…w±¶–7°ù;ÿÞ1€¿KÆÀðwÏdÿ,kÇÿŸ…µÇÿÉë¿Z«™ü;Ýÿ˜”³Áß¶Ùšý¥†‘žñßB 'q wc g#s€©õßžýK®bklâhmakò—Ûµ@ÇÄÈø_tÊæFV¶ÿÀöo•‰­ñ­à/]ÿÊŸAZDE^R‚æ³`ÿe¨ðwœ•=ìÿæö?ª‘³3þŸ‡`„…íÜ^tLìœ:fN¦¿÷ïoB\̬>ÿ›ÿbúϳœ³£…;@ëoÝŒLÿªþüþó¤ó_`ÄlìŒÿ%g[ã¿Óö?ÿ¨\ÿ’ü¯ð·êÿ8ÿkîMLÜMŒ`V—ìŒx‚-Ó³2œë0ó†'Dµ~÷1‡Ø—5*úרõú¥‡ïpýÒÿ¨ ¡ošâþj÷X<³ÿ<¦>íð¦èM5¹*Àó!¡ê/DÞ$ïä 9 dÐ-ƒÏ8W‹öº^ÝÓdgT=ÜPü©[ú?ÕÉâuýLåOâZèFúdàk”Ö‡Þ…Ô„RWtvNžtòüD1862<Ô{ Þ€K“MÆc€é›rF”ìì¡ïøÐhôþæÊáTµ˜ÝªVƒœ¤âæ‰û¾äBHú»ƒÊ”qÉB`ö-¼Ï(¸d'ãv Ë\œÈOK8.2­,­[ßµ$u¾Â¾vÑÀÏn•µÂk{Ôµ$‘NR̶õ…¬J)(9¸¥š`,©Êȉ”¡¨¡Å7ÍÁZ#@&Æ%Xç?V™¼+X£ÛéìCÅ×T­œ>PŸs®@7ÌgJÃtäùàÀË((¨aJ}ýùö³‚5V`$u³ C¸rÒ²jnxR ½9¶¹ÖMæjŸŒå ; YrÓ¦‰;Z*ìÞû>E·µW«»']Œ-~^@úøw“Lé.”Gã°†dÏ%P¹ 4¬|¾/kŠæù'‚aíPS­VÔ‰öÎ/ÜìáÔ¬ÞHö½dü,ÀÓ5+ƹ«€JAê8|¨{¤Â|ìPŠô𣃣õ©t:t€§S3 K˴ᥠRÌ$Îpe×OöcrRäDÕ$ù—ÛF~»}9™ý>´·«kÖb|~^5:É~7Áâg°K_³W 0¦Æl‰¶}c†ýÆ´+Dözj¼y±¡Õ¨Q ¾Z*0ªò$·b³4n…{ž«»²ÕÖ“l¶â;Y2µhošÞj c’_êC~’ %²9¢Õl6H6¡åz!îõNªHO®îAöhL… ,B@ €®u$QÄ{¡Ëbµ—jbTðH `ãŸXzÁ¹{Š‚ Æùòk¾`mµ—O‰?èò«_E®XmYœôlÝ-0Xw£…<îâÖÍøû-i ù/‹ ¿wú Älù«ÁqÇäurOeC´ïqÛEÂîö*òVB5äÛ©Dæ3ûÒu¥µ9é1*élx¸ìN™H7Ôý¶ çWÌN¯·¤~mŠ~²ÔÉŸM^4Ï?÷å¨j£T1~Äô„U€b)¨eL}hÇz”ù:=rÒ«×`‰”l}”I ”ÒÄï#V>Vx:*×%PcyNQUYngûرMþJªfVaâ`ç)¼Ùèø|‹{s“8ÏjÆŸ¦ÂísbAgZß8óiÍ‹°Ä£ÁÆY‰b™©c£a³NJ÷]5àLÓì×±Ã>àå!_˜ÖOC,Žp$Pãrmk›9{¬'¦ç¼ËHÆÝÍŒVüÙU³{»5¯+%žLÚ»-Çj«Ý|ör†«™]KÀóxuo¥žVsÚÈëÿ9ªiLQ gÊyd}Éç6ÞŸ·"0 ßLžq©eæm„TÏÂ>îþáuk’(Ž}-ÏKW: !±}jìõ¡ñ ÷`ë2úúë*ªIsøã·TñjjLTQöœÃy¯)¤÷eó ·è„šx&•»P!L$ö;éPü†á ºæÐóêF ƒî^—ÐúŸ 1ñèÞÚ Æ™ív£Øœ±#=—8ÄÁO¸MV]ZdíÚÒJ¥h9jÈ»îXòüøÀ·¾&cµ#ÞGÀâXÀÆ-ÛÀô†µòÖä}= ®(ƒU¸Ÿkªñ­„·”¸ðf ó“Úúüo¶PŒX\Ø3juª!»{ 8¾E­³`ÑDñv|¨H•0qbho—ŠáØ3ʬ:·¢Nøs,4ˆ~ºÁƒ–O^Ô Xùsé“ñç ){Ú|ð§Kf¾ö&g8ã°ÄÈ;Ò^‰/JøÚ\á‰ÕªBÈ<äNÛõ´g8~nÑjI¦ÒËþjíYˆ(ˆŸ=QJW)×@zÙbÇ/Ѫ9õ„_©6o­ä¯%÷H=[3‹ÞÛ|¡™ïÇAÍæåw…6ó:“{+իׇÌ*w+ü…ߟm{bsô²>»õc"µ}걚þôöÒõÌÍDrùg:Q…¶mbSŠ‹DíÏ¢JõÓùKR%‘ŸLÐd»«ß«A¨Û4çŒX¬ƒäDÊ9v¨uA£cÁø½ù¼,zTæõ 1£6’E’阰Õß…­Å|Ö¢ö£4¤F¸ì†ïŸ"ú;ãɧ5S£Ø €öÐoÝÄ·Ö’{ÌF rèɾ˜|I>ƒչ§s<³ã]ë3ñ‚zC¾bœw‹¬™ò`a˜äÔ—‘C²6+ÈûŽZÕYC›î•ɇ”@I  ƒ:3 ´û+„ÂzMÙSmPŠ8Õ|oV²b ã={ÅŒÖçZZŽà–æÆRZ?kþ¾ d¶ôŽ )Ûö æ âꊣnCâ§q$’Q[çW$¯<¢¥qÃ?ñËÆ&^˜+Š:&èŠÀôðo“çÎŒ‘ñZ¥êð›êOCEèº=v Ž}á3Æð0 rÊv|Í¿ÈtŸð4`íÏãw?ÅY¨#†Öj{‰$0%t+óx¨hžÇ†³Éu«t÷e#ˆÀXúØxIŒ0}õr½§­°k4xùHÖ3²ÅUÉjV‡–7ˆBßÅsô¿‚²|ÜÚjo÷“á¢ë Õ‡ëSg ‡ˆ«“e&óÖ#4lÌ2~½ñ¡Z6«lí`²íì-b ª¼³‡?_¤¼¹¢/?¬à½ÇáøÜ{ ¹T¼óù²èÌ¢Ž°UUÝ«4BéªCùÎg/Q؇ÃÊ«à\aÅ¿s÷.™A4‚ZC§%9aïâvàCõ/]ê™g–šgõP±c¨G ô°;g»drZ$Û–/¦’9lægâdõä‘üÎö´0°¼½y$«ÁûØu`û•[VM#ŠÈ„´Hø:-µY§G#2ÎÄ¥4‰o—™|m-ì:vrzVº:~$•Tþ¤,oIßÈøNKÚ$ ý˜ÒÞòÝ#¯s´‚~eƒ‹œéèD,[Làwp¹Š&‘Àêîqüc\¤/4ŠÅ‹B…½4=IÃS‘$hìGg‹ c(·ÈgzÊȯ }¨#»Š?SUo¸>p7W à`â(N³0DV«@3Üaðl6¦)ìà o‡/Ù…TTA™?oç>ËÚíî©ÔŒuàÌ9úº :¬ŠÑOÁˆ2È×ý=ž'6°ÿìZ8u‰åu}kÆ«ŒØ>\VÎ=·n_9ö9\ü^!ιƒú*UjXÆùrV¹ À âÚ»í”Ü`úEŠucq© Ëw¢Æ¼é3j¹YÐ)œ)Yi$xãNáÚ•+[IµjQÇÆ=yÑ|?w}üIa‰O³k`Øy£ðb|´HGŒdWg%,]h€Ó—æä¦k¹PúKg‹·&hÑ€ûʵÌÄñصËg•¨OQµ?öIý¡ˆ‹z䦬R¬ûU–î¦Å˜/@ȦQ©ø‚?,˜+{gÔêJ4ŠÇÓ‘?!QÒ9¹áP~…Û Ú½C͉¢EÚLsלt3¸E(Ê7Ýwˆû‘ÆéûÈÂX¯j¿ÍõlªôM'ç$©Î_ýÝÕš¡}«µHzËVØÙÌ ‰Õ­’¨¢’<¨Qs4Ut~,ŸI:âÁþ ¸jez|¹j*†ýVxSå'§nÑIº®&ßißÀŸqHJ÷›p0'²êe| >v8ÑB~KÅÖÍ‹ –Vâç9:æþMW”š¨Ñ;·k¡YûUªR/”…³1ÃÖ FÔUv¾EMC†¼­Z^æÌ¾<{câÙ>¬wîŠ#.ˆè‡ñ~õ­¯b—šA>]Å)‹|ñíô¦Ó±Sú ƒ cˆ ’PÆÇ3 Ÿ%ec·|؈g+øóày_>eõ ÆßfÚ2®ˆ(ŒÃa‰åÃSS²6U®+oÔã×Qþ¸5÷Q´–ýHu•|“„)cÖO™3F™¢ÌYìÄËC(ïaVÀþ{ Š¸è´“z|¤Xð¥Wð¤mI÷CË^¨mêß›‚m×*óCI„_«ÀŠèÌI‰¶þ?Ù0\[€@1/ÅCTm²¨'›Q­¥%éë¤È]9 ¼]‰Lã<=Ò Ï oZ÷^¬_x&˜¼³ûõûòR+'ºË¯CϼOnJ¢a¥oäFœ»íöÔF3C"e™©ýnÜ\n¤àÍ^Ö¨ú¿lçÒ`¥mòHj AÊ*v6àÏQc럨ô›ÏMĮ衼ø 5LÄxÕ0ÒÑm(ñ–wÍxÄ¢¡#e®€¦Œ7É ñ®x3sYðdJ‰œ²µ¨7DÛ€Zjp|˜vª^Z•ü€Ã§ìXãåÁ†„3»à)±]ǰyíÕø÷Ž5ÕÖJšÄrË›!g—…>­ÒâØ"I5Ý»¢2ò\£®øð„ß p²Ùžaã1¤o𲱇éY·ŽB Aa´W$þ3QhºIÄÅÔ‡ýýRó±b>%4¢#°€ËF%1†#«&žômäŒÌç-Gqàq›ôÛÃ$dÊ=òä”- Ì&öls ÍÀtrÄTRóÏÉj쌟º©¶11Ñ«4¥U À®åÕgÜŒò®ŸGò%ú7¼N%«tn: ‹ƒÈf9Ý*¸í§µ˜êEî—^%–¼Þ-‹­ÀÈùaý˜[–EÔGs5>ƺœoBƒ´4T©ÈsV±•éè³8‹þ.nDµˆ x­ ÷棟±ñ {?ZŒaj@Ú'ÚlBÈïÔÚ¦Ûgy2 7p£ööä[å¹P©DkàIÏŸ:"öƒ„øªÃÈÆé{J‘ˆçöÕÁøú¢¦§Ð$‚P¾j1' Læç µíyuÌ¡ WŽ-0â÷Ÿ shµ©*{n™I|餆(5md4Tãé‚ÒÄâŒ;`鯀ŠÜÃø’f½ôÄŠÔË Ír†ÀPQƒÛYï'G„ ïÔ±À;ûÊc»ÄÝ(¤˜ÑK¬y7ýZmBêy’hB1HüR½í¬&¯¼NßËú”Å5¤?:°'§,pûîqȳ™{–Ü2m9Û€€¨&×°å¦3L6H(¡[䜼kÿAb…éi!ÉCäŒÛ‹–ª¤Èó››úܵq³zÁû#¹.çò--¯ùzd=œi¯Äµ&p8ªpöàReÜ| “iÎo  Íš*û“dn\u‡¡Á)<Í®ì©ÝFã ’}Qµ~2í÷ÁÆó&qû ŠÓi~JÚ/lLC¥¿Ÿ4/#[¿ŽO‹”—@·ì´ºÒ·sé{t¶ÜÙÜ8,_Õ†¤8)EâÜʒR—„\!t»P¬¬€\*¬à»mÛ½ê¤ÜoK¹¼Ú[Ñe"6ŒqÔ.Å• ß'ufçÕà‘æPrÛÄ]—Ua}£Ž¨Êƒ£çå¹dúÄÚÏêÞ`ßð:súÌf¨ìEnU¨äÀj¿H`ޱ-‚3^X{døqä:ÙõóÕ4 ll5TšÊ€¡ìÌ 7Ì|™å^‚šü ý½,Y.÷5¦LVkÍÇ™M˜ºéÅépAzŽlAm«ëÿT6®Ï®%P/³XUg6æÓ§ùmpÿÌðƒM}±r$EprRûôhÍ1é÷€¶Žlñ=Ÿ4Ys+/}EÀÄ…ë¬1ïþ˜í£m)¯²c”Fhÿ1°¢MzŒÀp­çóç>×›þˆòçÏSÚ îµ:ê_;9«qš;ˆs&íR+ö"ƒæVÄõV N³ÏTÈZ8¢?Eï9gâQƒ6á*‘û•ƒPËB`•L#ñØuÁêÞŸ˜_¨+b(¤qa–o @ŠçV)ówªSÂ¥Ÿu`§ñ4§^5áùU63JâŠÉº aŒ«2˜ ¬{J·ä7÷ÆÄwǼ"¹ (á8÷ÀÊÜ7Ù€â‚Ö#8húÑûç¿Î•æšX-øî?t9q¢KIÆ`cÑyÆûW“J§âý™Õ4ÿ¬ö U±ñ”Ö¤¡¬cœ8GxÿÉ÷h$Ч¸YðZtT6E'¢€¯A¦eÁÄýä€ó{÷¨ºM´•_ÝX…rM¯•Ž /ñs‰ÔÄlžnåƒ|[Jô•{ó…8ÈgµJw³`Ú¯5¸râôÅSh¿‚žÁ4 Š‚M@LÆÇú$. DûUåP¬Æ w/zæÈ:®æ«¤OÊ)ã‚jjº—:t©f6€j[ÞxÿÒUÓàfUäî—˜³± ŒAø—W^¬¹Iúg”RÖFþ’–_ç×P#Ôç"Ö w©÷ò¯Ñ¸>1Cž«Í$Âw×LSznÂJNd$i·SoMõ—dÒh7³wÆ['õëèßë(‹Kiäk¿3èô‰ß?ˆ•2È’¤? ÌÆ^äªåÝêÁr£y﨣Ϊ—±QR&£ù«gÓ&;¯][Ú!a­ë/BJBôÿt­Ž²A:Ù¤…›E{î¢Å$ú&7tÓ„„Aº: ÉïYn*=p²B¯ËǪB@ÃL 6vþ>h ô׿3/Æd–ŸXтîÀ-é-`ãÆHo#³÷â˜Ê蔧냎®‰‘1‹kΑøx2’ñD¢ðTR¦vkë—1^Qó1ðË÷Έø¥Kføƒ¤á€/Š)îhXü=ÄãÌq¾_TSÞtò‰,wS÷dÎ’®ñ^¼£±!·2:ÄFÆâŒ7ÿ(îQ# =BSütìÑjҋߣ¿4̳(‡bá™müü©õBÓœ Oé(¡D¢Hÿ½}'‰g)0±Þ&Ô˜±.‘ƒoŽø®Û7KkûGÿ™ãÈÕiÍ%Wż€Ýö¬ÞVäx~¦–Q<Ðá@d7j–Ý6øýºêQ ãõëN²ˆg9 X¸‰÷ÕÐÌ+ý6‡ºå“‘8nºÀ6ý9m¹XM±èø¹m“=î¦ØÁ{(áÔöÒ–föyQùç.øƒT+&ü¹`yGÆ£2xDÌðƒQo?p}-·ró1ºüg¹Ÿ¢‘ÞæÝ±z§Åªóîîç#7‚Œ}cŸù#)½‚L ßàÓl‡-šå¥")K˹ˆëV%¥’pçafH=ô+^¿;{v?Dwylz›Žo3$ÄY)÷íý¾'a8piÞ»ci2=$T3`¤5óXIæ$ì[™¿#`ÀŸ(w¾w·yÙé_%`²öQƒÞ2S¹å‹š³´J=ï¬Ò­Mip;?C3ÎÏSãÝI›ˆ#ú±ºŒWœ7#Ä÷ÉpñÂyF9òTI+(›'؈álË/¿"§ëÉÞ­/–ÒÊ™õ9WA¬!ôó¢+Ÿ/ê:ËëøÏ¢éï¶XyX üÚc¶b´Z'ïÒì’šº6Å ;²òµŒ–µBYg$‹¶ßº˜©© {õ—îDré6zïìi?Õ†_]a(겈êÐôéÄÚ7AòMk7Ñ;ò…®ý‡ºûkºûgãÖiOé"?œ6Õ(]P™6žþ°¾ð»EV÷Ô"è¡ÔJ„b‰QÀ«x®ÎÀÎ-åo|éQoÿrE©‡ãµñ'H“Àßúõq˜4Wv_««`gãt°i/ðhf‰œIH'±XQÏÕ»O°àwOÉé>¤›%¬÷,Ü^ O%kÑš+TºnG1i˜1 ü¬Î ­'k¦×F´´Ý;‰Ö7ì8'³³YVª1JÜZÁ[eÙ¬dþ÷»Îe^ÁNÔëxÊ×bÄ+¤¹b¥â•$vÙ£Õ8YÐ ™ˆÖM6Ÿï‰âÚlÝ~¼Xµ©â=úsäk“°»¯òZKXX2d›±ùg Ð7#úÞz&þD‡²? HpX­Ï_–Ü{iÃYõþ"V¦Àìºf¤•üU[ö-þ\1#:Š¡~Ó´,¿ý—j¬Ã:lomô!Ì’:¬­5ÛH2’¼fËWúO­®AGh{+U+Þʇº®G AXÓ 8ÏF‹»iP¥$ÜžAI)üeóÄhÚ‚+Ô.=úA¾…?eÇþÑ a³Oªã¼À©¨äMù^x6 Cì”ú´~ôªìiÿÿÚÿœvêWDÙ4M¦DìÌÚÛLJt¶§ÿ‘É]¢-6MúÊ™„4{¼80ÕÉ[ .¾ÔhƇúf³v¨âœ±G˜ÁàÕ–8¹¹™†? é;ûmŒFVdMl`^ýîðbNc  B¹gÿm•X$ò xŠ&”¨¾ü5ZÝEÅÒ?³Öã(Ó°³Ìmp&]Yü GǤ6x½œ?ã_ 牷•x9á{7‡ sOèµ$ˆœ«£Í…Ã*Ü&*cò9ï†4Í P%cŠ•ª o3´Ð¨?QhÎ'.¼8È`‡™ä}»žIçT®ä¦©ž´fû.›`@Y&Äzmjó€Eí ^ ÍnFNŸ^ù,è|ÕŠ@,é{Â=ˆ”Ò&øêík'µýŠÐÇ5°:µ:“l{œ–Â{äîp…áDÞ@E—üõã È2òÂÂ’VMzÌv(s£¶­–¤BQÍÜ#¾îþâs¥Êù8  ¼AG‚ayÝ{ƒ?Qä©“{E§ÜQR %Æ?íô!ß?h PD×e’Ë¡:)Öí‡ÿ"¶p ÈÐõü¢ÙÚp‚i¦t•“þK›=j£Ï©XËƪÕe¹ðXdŒþá’-—?6N|JsMGßRv´LÜåªV`*ˆˆ°MÍšîéWË hzΫýšo¦Qlê$ÀFøÄ—ŽÇKžêJõØŒÕ;î”÷e/À›•1vVÄ^±s¡¸­N-‚Ü|÷´Âœ¸·sâÔG]{ÊÑUWüNÅqéU˜XPS,Iï¼OsL$¾oý¢|CCV„¢®ñô2j‹Èø¿z ÔÂÓÔò…ª´»’äJj—h„픂'?R|«,-âl}„ÐÑk„±NNL¯ôél0 îLjÙL¹1ÈŽ±ò ¬¤m)Q¤6ÑÇL¬;ŽrzžŽ<‘¤¯†Ç úååóZK»Á¨ÓÿŠÙK†Rs«Öúþ3rå ·Ô½)kfÚy#ºÊ¤šéÈ¥zÒÃd!ôà]͸Î%§?êšo µ?ÍïN´tŬ›€ÀiGghø#î ü?®Pc 7¯î؟já‹ )Ãã.RbËÃÁÓ9âÌ|1D·½nÊ£â|FGkS€ÞR¬¿!JÀ#½,­Cp|C¡#_íºÐ^ì$šM0n¶ñ¡T"ï-6¦†“8/Þ)P%RëÚ…[ŠÏh}Þ¼òb• ±ûH†’ŸÏÙŸ§Q7Ot{a+a¨²Á·_‡Uöh'&5m’°„Ü–$»i’·€ h¸ïsˆßØ]n9íòo¦F£Û=Ú*OžÑÄÊ2×ëÛÇæ]úÕïƒy)’9,¶‚.˜Ûj Qw 9XKy }ZŠYKÒÌsƤá„Ú #ìͳ¶séc&—ÓÞqÅ—ýá¤MÓÝÈ- ]@³>ñ&È'÷A:LÉ0ˆà_$Ê­_˜Õ´´’ŽõCò¥—Ÿ¯…a^G "«® 5$<Ál7æýìㄼB\3/ÄÙòõóJéÒç]Y-í6Uôòh)üô›J™†éQ±Â"¸®4(\&ÁÒjÉr…¤H7<ÀÆ\ƒzña#ÿY4D®Bô‡ê†·ä»š‹Ã»`‹Ž{ôÇ© ä,:Y,ê|ðX7Ï€´ÝYõçż‘B£îµäèÇ‚ˆ• à 1Ûþã3ãAp:¾Ô¢)ö›V s3°ƒ¨ùü=ibpÞÞÕɨ#¶FÅ.¸Eð¯ÛYßÃtÒCƸUîôMÑõè1Sš3áN|í긧—0ÏM¦Î„lY&ø’Z¹îD#rÒ¸§p¬ìÖ™Gã£`?´*)¡¼€°}‡ŸÐ:½µ¬ÛŠ1ñ%"—¿´ qZçØæàÔt…€)Z¤?G¾- ÕðÚpþ^ì@Ž,hêU¼öbU».aˆ]õæÃX¤'ÿíŠaš³Ôqñ½>Ö)“JTZpèóY€È"þ°sZ6ílcVù'ʆOQÑÖ ²›Ó±Æ3›k7Œ¨9t¿¢"|hÚì‚5¯êå·Ãö{•(&º÷ÍÚé(BºÐFkÖ‹>å›Bl~QÝÖ‰Ç]ÛU€‡ü#öÒçìëpgf°GùsãYäHܵÍÕ¸&~ŠŸXö'z'²—vò¸³‚$á=ŠUt'Z%9›ÑâÑÝ»äi •LMxHê 9u i2ó†­2 ¤e·¦s e_êž3e^«À9sgCÐ:¨Éõžh»{t¥!‚\oeϦ¶éæëð^³âÄpÛ3ßAŽ]!,þæ£Uph&„†ØB<”(DDIçY¾2¦ÝT›Øàa,yÏè?{Ày¾M)Á¸·Dà Ø!»f0š»Ã]âQKK9¼û|úø!òTÑGÖs”ÔwÑ$!ÜH¿kà¥þw/ÜÇ£ ÓÁB)gP“jO*.NQxò…óÑçqŒódîMø‡Á*qq“¬E¡T˱þzï’Ž@š[Ó|à£O{P†ÀTªoÁ0>+ŠÓ°¸ÑŸÉ©}z;m öcÆÊ©ÆKÂ?X­±ä»I³Ñ;yì²OI«â¾ã9L$PR‰ ¥X@J¤hÎÜÔcŽ¢UˆUÂPü ÷ÑÜά‡”}ÒïßË6±d*ªß¼÷ȂГu¤ñ”¥E©Ô,ð¸ÖìØ{}[>Ô«k[BnèÒKûƒì2³Ã?² Qï~D{Ð?Ï î± /€ÇR¸Zž82 g`бÚ^Žu>•ñL¥wÁ˜e´‰r¤éo—’Ð;d¨ð1%ŸM’)ƒ ²Î¨Ê©øÝ=fëZR<½9]tEO:Ç)“T/ycôÊ0BU#llnSj˜ã»/Ù¡#r€¯h'«1Ÿ· ·D¤öKcΞ*Ší ïNá.Ù1‹Üþ@êxŸ2Âü©Þ5Žz˜׎t"m<‚(%…›•VN4ά£·¤ðÖ6p*EOü¤’EpñìÌ¢ÔQOƒ§L@ ‹­ß:æKæ}7[âòÁFe‚—v€C2>$yÕÊÚÇá¶ h¦ŸIï¿v$1Ñ"½V¢§æÎµB´dšðZ­5m7ô(Æ-Õõ¾Åw˶.Ì´ÑÄ~Müz¨•=©Òsõ©Ñx,¢pð†>¯œ[‘,Î65™¤Q ™êèĸ໮ájØCç£Mv m±41{êÔ+ò÷ñ}t>]nÌtÇ‚±A‘›—¾{cܬ•‚)-\ôú”¡±¼ƒýߘتô|šIïO¶2 à8>WmêE°@3œòiV »k; U¤5GœTE"Ž`³ y“)â¶…î'ƒÝpÎ/p30»¢ ¨Ô½ žNMé‡ÉrQhà:ñŽ=êDK„†H.~¦k‡¨ÛYòù¦Ã3Nyc> :ñƒÛH1<Ð,C+ EÑ’ß[?¼% ¦Þí~8‡É˜Î¿Lx+ø\—x'#¶«Ñ¯:QQ„k“1½²é0¿:ŒJ†c¤WÇ)”·×+­é][âq\ã!äÕʸ’é7N¢µ-ûÑ:Y€´&ÔVlNþÌ£.JÓåË€„æ“SøyT1ÕeÊ$OKŒôġÁd²’£§bÙ?Ý–¬ŠåL®d(Ð4=Œ:óNÖqá­Qiަ ¬Ü¦™ƒÏöJ‡¥mÖNØ4NC5 ò•d5öêt“déBnû‰WΟ£€Åüè›5€nûæ^)fEénëÚkÄóK„ÓýË Å.V¡Y©•e Œ§£k£êEóUïR#ðz‹@RÝòë {hG›/æK\'ûÃ3Ââ"OkÒ< y íáà…{AÆäÜ ÄTîsjç+HDa‹¸wª‚è¹ç«„?‘LX×WR‘TÔpЪQ?´hç¢-ÀÕ³¾+TcÖ_×"9‡±â¹mGäLUìÈ;÷õ*ÒµKÍϪ˜nGq¹îd’jóµ·¿<=î)}S6{¡ 4¦‹)ssm“…<ï7² ÃæNeÄÉðk®ä=- (÷_8î…Òñ2HI6ì¶+Ü `ÜÊ.îV¥Øu AŸG»&ž{N=0Ü‚MÙn}ȲAð4Èk˜ˆ¯ÌS$'eäXþБMÌ D?Åö惞|†ÿ´YUv·gð±—XõUˆýã›1iMT¥rÕúñȯ(ËT&òC}"†šdÑàkÑÚúÑÅXXÒ3¾ÈQXoˆs)¯•œ¾ÖiüÑ`îð3/tH×à´¥i´+¥,ݸ}F9…»p‡xª˜}¾+ºq¿ÙKú0.àÀõáê]ýu ÊäÆ1SŸ  ‡&«7+5r˃xZF59^+–ãÔÖÉLŸÅ“ŒæC󻨸ëÄP¦W8†ù-ªmé*#&*)JHo”ÎÊùâ/ F"‰V§gk8?ÿD•ß6¸¹²bàµã¹| ù‹R&¥O¸jf3׌ܪZ–‚øËЧú×^¬C}ÅÁ‰V3}nN¢+“ÒzÆ“* ‹¥Ÿ®dîÙé2ЕRS•.4ÑÉÜ‚â¨ó+Kg"šµÙ¢—FUðѪGæË/‰4ì·õFŸ†”ð³:÷„ð» Ë«JωKÖ-1Óó%leä€ãê'øÔÂÝÊ^ÓI£®J ©ž5ø!÷»|=[ª- ‹™Ìà'"Ó¿P$Cçü úÇØžÞ«)¡ÁŒ©Ð×p#èt*&Oé>‘•ÅИï#=Ò¼ì9Ñv¶ì^€? Õm°[bRµV–!$Êo#-Ý…J6V•«¾UU¦kª<«ò(O¡8 `pûÖŽ´MÝ~º+6îÅìM2hòBg„6»ëŸJýGi­ó¿ÝVŒ’?D;¢fËøÑ=/häSáÙŒ±‹Ìò±¥ÀŸ³ƒOx/ÏÈúë¶ë1§Y.]<, ,jä6ŠÔ¨ŒT?™à4Ž\+K+W¶¼‘DUŒ½Ïg¥W“ÊDÕÌÿ ó•|+è$Ô´YrW·£Ó0¨s·µ€c¬¤ªrHy“g2ž¶‚ˆëGƒŒ‹|¿´_yµõþý¸>^³Áe_®Ý.Cõà:§=•Ó(Q†PÍO· ¸*ê¥s!aûõtY‘HoçÂð°,ìQÑüÊh±H/Ƀ±»€¬i¶¬nì§¶3ÊÞP²œõ‹ ÑúÔ ÍÒFÞøs¬k‰ÿ&Ÿueèyøm3ÈÑ,kÙÕµçzžôȸñ}F¾i½èr6£äõŠ™ý‰™Çn %… (Í0:ÅŸ¥ž"ާí™âM'%šx[gÒ ÃÊÜïžg,¼°þ<~Ô~kyÈ‘ôtâÆÉ4?iR›Ç lÓÜ߃»“SŠ Í£ÔX†*Ž>_0<¿562P¯ÄǾW2Ó9ÊaÁÉ[Uû÷|’f8â(ãm A[þÔ–QTYÍhMÏõ|p°‚A„1 "¦fz›eðÐæ»Š{NÙ)ÒèÙöÕ/€{ dðTõß° eCY€õNÈÑýÇÊüÓ¶'ÛÞéX“3“s< Õ¯éEÉäÛŽÏ¿&LCžïðþÙKÎeÇO|!Òu=Ê'ÇÀ¿5 ¬Šè—û’Ôgiûu)>™‚p˜9*†Êï ›D¹ƒzÝ\yòKÖãüfq¢¬/³¹‚ÌÒC¬ð"ÍNTL±£ÔÖ\ÔØ>ÖIkÛd*c%îM†ÝÑÉùCº©­ÖÂWg „5¸8=©3­ÜXïú O'¯ž¦èBY²LÕWq"[¶GкÑ)sÌÑ!OÛÓ0ÐZrb…ØÊùQ…¸irMhÕ̧æ)uŒ¹í^‘ž 7³ EBÅÿU%}™Úë Vûë ½¶Jº f‹"ÀWº !$¹÷ÌœS-lHKB½VîR¯÷۵㋆(?¼% ö=Æt<ú8¼Ú^ §F⧇†‡ÒàˆÃª‹7›°÷ÈØ„‚ŒfZ‡Þ¶Ùh¦@Ú¦ŠÜþAþZ„ô—%½Ô¹Ц“a4øïã¶±›#¾9áÚ“ˆYSÃôŒx cù6…> ϰè×{çKùr#òGÁj+¯K Á…pˆM¯ ÊÌFŽÍ˜:«'³YÕžo؉-^SüUb‘OCe¥!5‡ìØnÀj^åöÂ;¡a¾%»ëãÆŒå–Ãbf)¡Sè¹ 4ÛX“¤M<•Žùu³B)"!hlŸ×ùFu)MÝÚ¢qÖÛŽÆÌÝz·¸hæ÷˜¡GÄ2(·5•€ mŒn<†,ؤʰÀÜøMëŽASµ(óa£ï¯LH<ÎèI¯‚Ÿrh(˜Ôªé·wí†Ç˜«Þyn€ ²  °ƒ—Œ¸ÛÄŽü »ÃÃ&œj…E«òK+Q#_žSÅ”ƒ™9Ø%§Í±Äƒà¥N4vèh‚œ_~)¨Ï=- ˆr’l}ûC@¸ ?¬–ž6"û-@®Ïæ[÷툡. yBŰKÂÛ_P÷ þDEDˆFÜjVóÚ60Ô¨…ÏnŠý"AŠ£ÿ„ÞZÐE¦`~?–K|©k]óÎòd‹«M…!‰å³´6_££û5)Ò´0Ì:Gƒe A{6ûÊù\Rûþð5ØeL€ÑÙ­°Îih;¾¥ú)&]‚½í€ô)€®9¡ •ì—;5}¥Q»`ÿ‡|3-öÒ¾âÜqècaôN³² ÷’ö™ž<”ot€–¯i;užDò)˵¹_´©ZÕ¸‹ŒÞýq4„võShàåq[zÊš¥õ]SR~êÙ áI¬ !iœú7l»JpT´Yß¹ &½5Ù™óe»"ÀÇÕ™m äNûÓsÄS²¹*0DB ±}ø2tß7ÍAS GÌ$Ì ÚÆ€}xQB„A5­ü§WRÇ2Æpbè˜évA‹p¿õÑX£é·¸2 µXù8aåW"ùWö¤µJeNµ¢lu úm +ÈÞt6õ RYŸ•ÞhóÖí&”ņ(½`¿ñzlSÇÕ ^|ívb.ÎHR±†ÇdNýo´ê1‹Ï¸z×cjw¼f#Ž˜hm·¾}j‡æéÍ# ·»%,ÓR Gá¿ãùù鮂µ‘#6Ä+N*¨»–ÂÜ&¯Lå!áócw¯¡}£dfwZý¹þDþÂ6ç‡Ë$m¤‰xÉ+#úr¸õUOA<¶ bÙX›bô^„O¡HN“gótw¯1б>ÓËúºvàAsÚj¾õóS¯ÃKÔ»<–-± )s9qj­H*—YËáëûÊWî]øSÿq8˜kìîn"Qòà½D™ztàÒÒ.xyMe¾?ï/ÒÈž_²•¶9SÙ~szA µ˜ÇØN!û8㑲YÞ®Á5I¦òÐÛòqÒ« Môt1¶KE(p­'ï¡:ìéÎiVÐØæ¹tSnVbÚ0@¸±ëÇZ’ÖÜÈS£)À2VåägiæœíhMgp“-v…žá¶Fõô®kлŸp(žŒD¢¿áB`8žÁÍ_‘48s{(yWF01i_ÝÈ 3úû?-*6‘P,id51 ',®Ó‹/¤³•[P, ª¤¡Su|Ú-é­‰ÓÎCûKX–XÅ)f²O „~ ËÅÂëÍöÀ «ÄGA=j! æáÔ³¯p‚]J(F¸òé"ßu¹äŒà´NïUˆÄ·/K¥­9Ù¨··¦žq~º{™ïó]E鬃epŠr|žÑoÊ¢Ï_ÌmŒ2£‹y²œ·®Rç¹ö½Ç‹zŽdÃ߉"F8bËK‡…g•im|k§/æKöbšé…\‹QgÁ$ÓNØ#2zA&Ú¼5`uªKgÝÍÌIøõã­ˆŒ:Ûš(åâˆ0¥»y<ºµë6]w6éZÇ”ú˜±a‹·.sãQܦpZHgÆèó”}§A9ÏÁJéÌÑÖȇ_ðLì“7j$yØ,¹ÝCkáïf+àäÙ×¢`*õ/t D^5[ßXªŸbש©"Ž˜ÑÙ£®.ôr¼f·“¼#/bÀBbQp÷å˜DÁí0£ùæ‚öR’$ÇÑ–ãÒu'Ð §Ž¶o÷»ê(sDÝ B˜À…¶mÈ©ucoû\Hl.ñOÒÙzøJå§“¨n“x< 6Ã≦îIpyÀå$Gk­o“ðU¿ž¼;gHo {÷=Bj $™‹'&A£1‰2å²50¬Ö— Ò¶ÕuϽ¦°ÓR¡“¤ê½.¼Æ SÐ$}ñIQÅqæmCEšB#+Å5±¡mЩǯó•Sšt´Ëf\(†­4ŠEa Š*ªÖ¯çÃÊBfë­—"Å6þi#¹@B›-ºdûÂnï¢x-AäSaÈ•˜%Vw¿]_£€ 3 MÑ]¥4¶'²_z/“úšß÷”°9ìäù#e5y fþ›>—ï¢ dN‹×º|vA¼(æ°ùE/B‰æ€5®wfúœõ,ß(Àéjq3öÀør÷ÙhZÝŠÝ]W–äÎîKØÉÅ[E«Tâdgë·:–žrBr^ô+>þæ}ðb2‰—¸¯³Œ2<fùÌðó´®(šyœn¾üc5ó=;Õu}4&9å ðÜyÁf±Ì”:¢U Ä݈šÕžWfâ{3Üùhø ç˜ÊZmlÈîl»ÞˆhèH}ÔéJ ÅÇí’چ͊}íj–f»Am•‡“A43›BIäsâ ™Ÿ,á[„rr< ì­ëñ1#Ú¸Æ0®ÒQ $ ±I!–¤õ]ÕP¿eó±ï€RçÖ9öa¯kFÊoS Òï·÷&ô¾KÕp£$ߺ»L«ŒTÐ@ nf¡TÌóÄ ¡ó)ÀýZlÚ8)õ(Á±£OwlÛ‡‚"ܳ=¥®KêR‚Ev•Hë ¸a(-yúš[ffäè#Ocú·†®{f—ÅÒ9KRT îòŽŠaGíê{—N8<~.ø Ú¸]I`ÑQ¿ÿ¬@“IIûŒ§ ˜” ýèPŽ…8ØWó¬TI%ûL³ÅÒ…””{ÍͪöÕE”ápÛ‡%f\kUp}M–£1D‘X³e$ÖP‡—ÕkÓêŽçLΜ¥BGc:ôÙ%¡} …ÅŸÿ3ÿ§"Y yB€§r1(RŽ>ã×±ÿÜGTßGS}å5±¤ ÞådF?b ùÍ&}ù§ËÎŽ|²ÁŠ`3º%¶%&œF¾¿' °ûËzJ´Z׬<@,Ï…/¶­ø¦|`tÅë :Ï¥þN |4­ÝŒ%‹@æMÞ•¬WÅptA”v:¾ŸH„¨G¡áÒ4“Dð „-MáöîÊ )á)ŸÅfè® rË|yØÆcçM• 2X 5ÍîF3ö×sùD^ÍqõdxÕR…ï•ieû×;aÛ1›dñ.+ß…7EÇé#¸é­ß^u“:ˆ?¬N™6IBœ$Še Œ¨õéé’[Žà|×4ú tý0XéCuÜ+¤.TpÁý [ø–tX_{n` ïH––ôØPKño̶Âþ\€RLœÙ¶‘nÊüN§‹ÈÅ£çÞçµÐ²Ã r}÷xÆö}IpØZN÷i9ÛɸE°p^DôAJÆ|b6¯õˆ6Ú­|öv¯¿¾8>P2”+ê…:˜ŽCTÓüsBÔýYrûÿß ùCP’îž×˜½Ù ™ç§‹'Ýs.Xè £,Çh4øö ß·Ô®-á(¦àïí¤äRŸjºa\²t@gϲ7 1Sôoê17V€Jެ”ð9A¶6F Øí–èÚ -+Þ¡ a¤x¶}b¼T™è¿ræÞ“uñ©¡{ŠÜÎL;ç}T„N‘ ”¢ÔåÛd&pzÌýQgÞ«c³?Í%UFÐb– •ìT±WZ€2üൠ· çø:íi¿’/ _£Y\pw ÐÆ×_R샼ÉÇü˽® õ5}gí÷t¥†9½“ŒÁÃKõ!^û·§¤­og—g‰7²Ñ[ž[#þœNÙ¥ ᾬ!5úöû‹z¦;Ì[©^Ò™Ïô¤¥-|¸á1)Z†§¸Q[Þ©s¼#³Ñe¦¼—Ù CÓ™¢ÒKŠY”¾ªÜñPUÚÈ_ަ#Q¶R4ŒI:ØÑÉLRxKóü ¤…àP ÒÙ¡£ tݮ۫ µSÚ¬éq1)å$ºâ;-WAªÛFª¸²‘2Öbúޱ‘ƒÆÅ?3†Éõ§‹H} ã‚™ˆ“ut­颤C+{¶TS^;üezº®u¡©êÔ4/>q˜+gx!4¾¼AãìtcœDl„­ê ÃâÓ^™”ðÕØWœ"kÂJ5êœI!Á±êz%÷Ó~ÿíØn÷”„X`·Ü†(.ðŒÂºM¥ðæÕ€Ãº¯æë¿AnI|1:lÓÊÄÂc°¤ Xñ9 ü½¶Ï ïY(‰¹@@ Õò‘^{²b:¦:+¤+ð%ù|›ŒØé'X”Ý›åD4AFk^N‘ûßM§Î«O‹ÏOjÖÇ âƒ]…ø3ЈyzÿõäCYÍ~s©–i>%„õkdí.9¸;þð¯Iõy1íËé`ŽøÁÛ`»×wŠƒ ½nXBç™`iäÀo$¨^ÇN9Óz[ ÷Ø35Ú*Þ‰Å5ú(VÝDT\ëƒPyÜ×Ë1lzN„<’öؾÍñ}‰J„1I$uÁN£6n³Fñf!´ö1ÛÐjÈ9®´ÿ\‚ùzˆVEÓ³Qyn¥7Ålî³q¯rª!0Œæ nük þéÏ+| ×ìFÝY@T]/=å9*ðtO§º«¡Cò¬lè÷ýî1Üv^¸i—’)Šðœt|×HüöNèƒIcä±Q¥pÇ¿z;¡ƒjã¸òPżm½6§uÇýxÏ)Nî^>¿òC*jR°t¶¢°½ìÂàb­¡Ñª?9½”ò»šVG(PØÕ죟fo$g Qz+_xÚÂ+µ Á2§W¦Ù9Ä‘dlm¹QܨÓˆÒYxÚ?}µK¤*qaÒÉl¨¼xÀ³°Zeî,Á®—§BVœ+Çì[8}~ª=rÚ÷Á µƒ²~š(–7Äôë¡W7ÖL‘øÛÿò7nTn…}I9ÀPG›ß ';´FA-œ¬(!΢…úëær!Ø4v`-æ`@à»øË5ÄiÀú/¾Læ`}ÅãÌÆñ-à´?w¤Ž8€0„Èç,™åÐßž´–»‘73-•÷è!€·¶Òƒd¢PtI'JÍ2cO‡s¼®!hk²U6âÅ-ÖB!“Ü8Ñħº S¿Æßs³÷ÐÔT^Ðy:Lý HÇ®Ï|{º—ÈÃ[wÙ ™£ÞaÉ‘øÕ$F™¢Ç¡«YOžàÓRpþ†ªµå縶²ö5‘3'¥°M ¦Â œäSªõ#ÆÑ†dk­À^UZÓ2p©_jy(œObcLr¨›0ù`ˆÇÌ¥ôÉy}¡ü~±T_!4ïP‡÷k|޶t”1åýÂíÖ°FS@‡³¿?¡Ù“}ˆr<6Ò%â1R2a8ßòÛ´a¢!*Œ $0Ö]xß5Hšà¯Õ&äw8ýü Ͷ?Ê'²´xha%¡M2Ë-~µÍÞÇÆlåíÖˆ@F5U:H2 Îûǹ$ʵÈkI¥êùeCúmÎ)…\}"P#GfÏüÈÞY͆·Æ¾PêŽ#3þôâŒ×Ùr= #}1ÿDï#«K4ì,Rð<³A ëOA„d=À`…üp4à·²¹=ÆÚê›çø‘ašþÞóOi+õ’Œ·˜Àó>¹ê¤ã·I- endstream endobj 400 0 obj << /Length1 1644 /Length2 7218 /Length3 0 /Length 8067 /Filter /FlateDecode >> stream xÚ­VuXÔm—¦AFRp$Eº»»»˜†™‘AîFZBZFRDRºSi–XôÝïûözw÷ŸÝï¯ù=ç~Î}â>Ϲ†å±®—n V†ÃP\|ܼâmˆ‹­Rî¢ ÓäÒ;¸îìBø,, ®` ‡)Q`q€ PÛøù|bbbø,8ÂËâàˆ<1Ò7açààü—å÷€­×?;O$Ä`½ûpCá0 uGñv4ƒ(G0ÀttÍÔ´UOT´*`ØèºÙB!vMˆ†³ìá®è_€‚ü. É}Ç%‡HØrçö´#~CœØÕ‚DÞ} H€ƒ+†ºë €Àì n ß ÜÙíáB¸Âïn¸Üawdºp$ iç A wQu•ÿÊåDýŽ„ÜÁ¸ýÝMÜÎíwI°;š;„ÀØõ;–-‚ P ×]ì;2„+äOnHÌá_p\Á@WŒDÞÑÜqÿîοêü—êÔë7üÏ­æA!ÁP{n|>þ»˜v¨»Ø>ÏïYQƒÙÃ|¼ÙAnˆ`î`×? zò{fØï’‚à0¨¶Ççц£îBžüßTæþ÷‰üoøß"ð¿EÞÿŸ¸×è¿<âÿï{þ;µ²ª t¹€¿v ànÉa€»=Ðü^4P ëóº@ ^ÿ›×ßo›€ÿJ÷!SCïÚ"s¸“†KŒ[P”Wì/‚T†x‚Aº”#À½ëÛ» v…B`à;}ÿ´ÀÅÇËû7ÌÐbç û-„Ð_ú{w’ý©GÛPSA×€ã¿/Y.èݰYó ‹üå¢{7(C/ðŸñL´à ~ÊËÃ=>\|¢.~Q¾»×x—š¿à‹ÿ!ø"¾µ€(Wˆ'À‚—›——ïŽô÷/ïïØÿ4žýF fý$º›½~Ãvn®®w’ÿYwõÿãüç€Áž`;üé ¸DSJz*ª’*»ç‹¢Eg;fO0¢¨Æ0ÿíË x›Êë%±R›«÷Áܵ_Åo½¾m!®×ÔŸ®÷µSBÙÚ’À{¹_0±w¼%gmáXä±*"LÝ6‰ôÙ×\Ä2æ5^_þ¢§oUx…CÿµIÀoÿŒý%“ûÛ—̧"?»äêèÍ$µhd•y[Û¬ñßÏNÙºú{{ºÛ±;Öè8²¢ï±H©ü·' ¼l\kìn°/ÝEeß2>˜TÆyxÓýšp{Ä|µDΗº+Ààp+‡¾Ê+;a­á±BÅŸ'Íùè³Â¡ºUUó„Úö”ðÌNµ´xŠsú”X„`£6bB%…)_há†Ôø‰¬j×xºyH,HÕ˜W”$UÏÌ8BjHD°ŠV†EIš(B¶òeÿ»„eÙ‚7VM¨ xR­hå†)Ÿª2·u¹z¤ ˜\oø6<ŸKòÊÊš9…<ÝŽ<ŽÔ/Œ’Y‘¤ÅH𝥔7èT6Ú3+“RÕBúÞCco•Eà’&”TuÞ¥ö‘x¤Z6ËOߟ‰VÚ,ZZS”„ Çdl†6;k5 —ñ¼jzÌT[wÑŠ5îIGiçø &šo_۾ﮭ崈øn¹TJ—ñQ>)½-\x%A‚>pº/H¹Âê.c”›ô™0Ä3Ü™h,ª»’L½ýÄšÇúC½Âô^5@¢É<‚Ú¾ú<7\É#ÚvjÙ_ójpWᆱ?FB©Ç\N#"‚•±zÏ×Ý=ý[LNvù¦Õ†o×Aníu>‰èTf#–ˆšTÄÜ;NÆlRŒc¾­sŸ]½I:¹á t‹^:]‰g¶»§¡ó©f†Þ¬Éb)¡áËÑV®b*5íöW­.ÐÌT,r!q )¶ö¬B“œº{¾BPð¼ÕCÓÔ‹›’(ÿ”ÛÍ79/g$Ç€ ƒô©­ƒ²Vôdq0@9Ú3~X ïwOãt¸rÊ/×öaHk˜'„Rp9RÎë(zÖAºÃ‰ãžôŽ^>„÷vy¼#W &]ŽM‡Þ¯ý,ë‡f°åOº†uÅУ•’ì©óqíFv¢±´ö+uKQnÊw\°Obð >æ9Sÿ…{cS?öÔ:_Í+^ Tjäo îÔl޵g›ƒÈÊx¯¢Z_?.Á¤Ö5IÇøz´Œòeù!OD¹M+(Ñ ®ŠTˆ 9b–X‰ß”x»VÆ>¥öþÊ^æ´˜Ÿñ.4X_ÎoÄ'",ñö`îãµìeô¥‡Êvzý :;];RàßìÜÖ‹jÍ4LŒþ0§‡œÃ4´SÕBBÐø¿i `ˆcµ Ô“Ÿ'Lpü0#j¹ç§‘™×Æ2Æê¦ õt6nvAçdSYÃo'ô®H nâìÆAÿµ£‹'÷ aO½Z,´öFÛÇܚܺëO€©_äCó^|_×y~©4¦“BˤPæ$g¾)Þçµ,ÂÊ4Û`‚ðr%HÉ s£HÛúüQȦ¾ó”a¥Ìo…{?û?[ÎÈMôv$çT3UQ§RrœÛ–,w©.Æj±Ù—{I K)³áÍD[²Ÿb“]‰¦R• *î§ ‰_ƒg”¸|@í´ÜÄ_T+jÀ¹u®0=J9»µÇeœA¼×$C £‰çzß«O ›ŽSöÁxUƒ¼XŽÒô•kîïRP¶úK¿Údöþº)Î4Fp‚ÈgÎz]ïMƒ Ï(>“2<:Ù¹ á ´D–·äÃBžV4a}ó¼Gz“¾tùÑ{Ur¶e.âô2ªF²q[J\¦¨åÙÐŽã\™ˆfw´l|B”nhÌ‚7赨¶‘Ò¡\Ÿ1MÓ®Z;27ÿ {GŽ'¡k˜XPUœq2‘e™¬ÛÕ¿ V‚@Ë^Ê“;ðfjðH%ªøwpO§¤nÛ¦Õ¦)›çIXùÐ:ÉJö›þ Bcå>?¢m©Ð½¶E7F†P92àÛk1†tLÜ÷£}ëN{d1üP—âÞÜ=µ—7bV'öõ‚æÙ“Öd™¦9Z¯ï=?_»á·× Óã ³?‘÷w‹}hs)L+éùéÉB¢Œ`Â@ê »Ä°d…á[–®mß·ž#eMŸ² Rª7ï®ÉÎDc§ÿÌ¥nJšêí~f¢&ý»é–N:‹<6Â]Ú–­F~?vÙƒùtù|SÏñ›m¦¬‹Q†ù§óŒçÜ_nÍCYѽD^*®ª|û¼èž-Ó¼Ñ~ü3/Oý'5ÍröÅÞäœ:VRä,¤S\éάó5Qx=MuÝT{„)ü=‘3ZêÇÂÿ7~ƒIŠk›46äqZlåÇ8Êá?=qÈ8½ÌŒ#ÕWÌ%y‹Åõ„Œ‡ Ìòâë{âÒs·W‡XšîkoÞ/õ}VÔß<÷Ëá°úA–Ê.LLuJVÈU…œ0÷€Û4ˆræû0‚¯ÒW' Aå6&tóÁ‘ý(ÔŽ'mÅʽ¢»šg‰x¤¥þœq…ʼg& Sæç"ñœ¿ŽƒÕrÓ‰dý vzóÃ^s‰ü:ö¹rùï¡’Ù(j¨þ‹!NÖ½Â:L!–ŽÉKü³§†$VÞ&\G†BBºxÉG Î ]ä?¬ŠëçÅ7¦`ÛÓáòÌ¢Sxø*~îJ¸+Ä×moê¤~ÉzÈRôz4Å‚Y‹Òé(ÖjiD>?I²èã/âSÜ¿íœ]¯·L•çÀùL·¿µâ¢Wû§F|¯²aÄSHЪ׿\¾òÛÙñ&ÕÙÑ ê@BâÛ`áÈ ôÓ\sGó³ÜÔîh)3ñ8ÊÙË‘"~ŠQ³•B¬-öµÄØ4êåM„šJ6S‹r¯ÆÌ¢MÕúÉ…Uô@·Ü ]p/ C–ÌÓþÈ¡mcÀ¨„ÓL×}´‚…Þ«ÑÔ3í«£ëLVÀ©øuâpŽFú|jНlf÷®ÐÌã¶¡“»¸Vò“ÅUMÒ•0G¤Q’!Ö±Ôµ.ïä$1¡EÔ%&ÖÔ\Ý' -5lFBÍ·Š.ŽÞÈ’m2M« I&¬Ó3¼XHWÎ’„¦O@ÄJ¢DqTE+å”±Ã9õ§ÓÛÄ.Î7f²æbÜŒˆj{íߎʕódÁEêï›&X9ÍÞÃô>·ï†]#Ø@töVFKO)$)L%R8‰£,fkáÅòkT®9½ãÊüÃ5‘.»fìë!#aIœ ‹9Ów§P<¨ÚÐÛ RlFùAÒÀ:Éý=sKj<N‰'­ïMkv À¥üËôÑ©uêßí¢° I/˜²â†½-¥m«üš˜í @òà“¦6¾‹¥Ž˜ ÷zi~ÿdüéÔ®Ú e§th,ÞÉþ/˜GÑ–{ãÞ6z¿¢B ,FF9L ù¸ÏÁKmywÑÜnݲÑOpIwbÓÝv‰š¾TJŸJTwì› Í¾¡(¦o Å"•áÃÿL›ƒ—œ€KõhXûℹæÜ³ëoI>­ÿpKmKca0Ò7HúÉ£3aŽs1<˜#*|ïÂæ’JÊû*|ðmÛk-bl)gE%Qí9•tø+³ã`Äûz;’ãGÓ¦ÌþÊÌCú_ƒÏ‹?t~£ˆ|ç1ÄÍqÉSl«: 2{¦H£øªcª^Hƒs÷…4’ÈÒÄ„ÍÞÜ>E¾Q&¾þåBj‘, m€a'¿ÄÃÚ÷ƸÊQæµ®>eùÀãbu¹Û_S™×WÄÜ8QED£ß$CÃo»sXh\}¯0S3Ô?6=~¢Ð|Ot½K+æ=“÷¦@•HÊÈdIÛƒ/9 ©¯g_#«ê_™Öù0K°Ý;| xRØ à™&OŒW¾á Ì½wÏð¢/N9n-+UüQD´úâÆ 2n«)q«‡† ¤•wf›#j^å©rëî\§[}È2çA¼_ &&\)dß>3KzóØõS¡FÝë/Üc4╞P7ÞG©rKÎüÓ#©‰‹ë‹QŒZ¦ŒéyÌëi$>1ë— þv.úøé Ž>3"ŠŠ©ã‚ƺLÅg¬­t?Û¶‡šW4[¤R0Ô¿Ò³ ãä¡êÕÑW,3|žO*=Ríä}:9ßíuˆw´ÎÀ'“"é¾MП«TÑ‹–ÌÑNRž™sÚSZ`gÜü2Pã}ËšO-Üpwrò×F¨<…U±—ºiÎI?0'âi¥åv”ik…ŸD>Çò=Ü¢}9¼=oî¹i‚ÏBÈŠ~‘DQVe+ìü‹ø4ö蚌‰'û“ çe~Q•2é zʆ›ÄŸ}ó3åK¼Ÿ Uº¯Â2´Ø–™”,?XhÚ†™/FZ­M hÄj˜‰21¸ðšš+ÎüZŽ15|UÚÿžœ½y¹ Ô5"žùD«Ž£ö\}ÏÍý–y ëbˆ=1óøx’©‡2|Ë6=A\XDå…Æz±QiâÊ$.×B€uëíìLafÂ5hKvôÍ¡|¿Çù²G ª§ KmÓ á¸ä Z¤…LItSd¿°ÑlP©ÐûäÔËbCõø%ñ¯«c2ñÊBœ—ÒºzâEí‚ÅåhüÔ,Úv—KL-Ó[¸Y$i‹=Ž8`ˆ|^!êu8  Y$²ìÉ_]Òf[{¼Ÿ £Èž…z¨Â&á{í"=¶qÏŸ>"/© rUŸ˜ç—Й¨ÕcãCÉ®jÉ›ê¾Ïº­}-¤¸é>ã–{ÑAº ä«~—æeñ=€üìÄy‘œûÖ«r•Úi}[ÛÖKŠ}aˆ8¬Øâ“O$É­Œ/~Я7Äêž™}£ZêØ¹Q²þ_]ãάh-''å ñz?÷ƒwC s 1 ôcC÷y°¥XÎD¦pWÌZJËô†é Zs…˜Õ ³ú©|Š·3¨58¨2ïAµÝ¾¶}:ì€ÅC Ø1–*8ûÎÀôqòa,¢„äåC¶Wà0k‚5=Z'ÂjkXf¾D@º;ÍìÒ›Ñ=I4”’°5Ð&™€ä{+mÝô=”ÐØ”ÎèŒ;‹Í1ˆÎÔ·Ìüô|4 •GòÄÏxPþVƒŽhÓIûÀN ÙþükÁkÞÜðån°á¶0þ–f†ZM:·è‘:ßGk¸ºÇLŒJÉ qȺ_ŒÄ, ]Mf¨ l™ qçøëó•ÖÜÛAakÉi&ÜN^¹¶ùg»8ñ\–¯n£)w=mV*úÄ¢Išh–#Lû6í!#Ó†d… >H©è²¿ìE(~° g¿×ùI:ù Ý(‹{ÓåaÜ0»’”YhB²aïuÛ+ôÚLf‚Áœ°ßïíÚ;.(n3;ꘓþ[†»æ2â¨{b½ºy‘ZÏÿø|bux.À$/¬©¦¯sšA¾øç~^Ïäéˆ9=Ñ]­ àJSXϘ ¢"›.äŒvtó]«s7¸˜âspI¡9IK’ÎŽ9.VñQ8ÂËûÉ—%IÞQj! Dzˆ NOv"Ëä[©¬ŽªyÐQÍ.¸Yù¨J®òÔYv?€]ÀÒŽ•,FÊÅ»í!{•è_¸›F=_7¼p_wüt¯¹ÏĶá™BƧ°­‚ÏtP‰×D{öËM‡¤¿€??m-Æ aÑ?l°6q„.±€d†Úu€lµ'QĆÛ'ÜYÉ|Ø‹˜¬ÒÝ|E¾MTEèÌ3Xž²ÚŸqžµ§M\'|Ú!ú>ßoxÍ!òU8HúÛ8I·K@×=±˜”IòSòR¥ÊO‘¡oÓ¡É­Îøïßt# ?¦@2òèÓ;÷ɤ,Ý^\ßÏ©SX’Žíß±q¹‘&v,‚K*3›kÀWúž+B¿“ÉtÌLêÙ@EÑG1hCºÊ[¾¬àᣴ•w„Þ<¹†û¿èy›p"M­¢eÛäÜñþ[Ag vúðDí,Óeœâ6Ošá°F²5ß.=¦¬}­±RQü1°Kb `a»KIº §ý,ðøÙ¹;ˆ°XA xÍ _UÌøê6VNol$'ϰØ;ÐI«fïwlr,EÁ,a\²óB^ »jˆÈüÄMÓþQé;íŒ3øØªÆ Z£e™síЉ¢òÜHÂÊlœ~'‹AbɽÃ÷Eü@:Ö¶3­Gyöw…×êo ¾¾³Ó-À…X§ôÒÐÕ)†)t'ìáÛçŒxì‹g|;6ŒoJ?*ÌÙáS‘¤fi‘Ímð|¦’sÔ>EË=’AñÙM/óP@Ÿ‰MpíÑ®Q2ö(irD`J½ê>·¹¿¨.$M“L…%Ò$÷ìªGC‹‚26y“èƒÕñú©œ¡ÁÃSΚÔþ#±D«•Yx‘ÀõU 1ø;6©óØN<Æc„ž¸èãDFy?R7¡'vÞAxú¸ãUŽÅ½ö&ËÔ,÷Hì¹lyʲ:yºO4tdRlNËõµSfŒøt4œs]¹ ý™1,— L·%ÀK3Ú†R’éÖw<>vó×ùòbIÝ„Êb);Œ†9Zó£ÙÚ`֦׸f²›EÚ“ªÞß õh¯… –ù~„1úË S}”zÐÎþøÃÀÂ×™՚dž,{‡Ê{©²Cœ ˆI;&Jåõ_¼ {°¡L:íJ1¡ÈQáé±>•¸®Õx¢ÊSnátØúóò‹ìŽý‡Ó¦tÏ—‚Iä7'Œ­Qï'IõsŒ‹Ø>?|³XɲãÚöày»òIÎûÿuÛ" endstream endobj 402 0 obj << /Length1 1647 /Length2 5770 /Length3 0 /Length 6602 /Filter /FlateDecode >> stream xÚ­TgX“í’Eª4¥7#H/¡wé½w!„@HB ½ª6@ŠJï ½#½‰tPéQz/‚ýöœ³×·»vÏäzŸ¹gî™yîy†û¶‰¹°ª Ò¢…D`…ÅDDåF0OgÆ éi„”36ƒ@qºX€Ç¤È¹¹ÕцDh€°y€5Ä ÄÅbrrräÜu$Ê ƒºa|–fÖü‚‚Bÿ²üv8ûýÁGb`P€ÿá #QžOñ4‡@X7À‡ÔMîéiø´,ÚoÂç ‡00ð\‘hü¯ŒD¸À~·†Ás©b Ãða_0õ  hOƒÿÀ0(„Àâï‹À`8Îåwx»+òOA(4ïá‰Çðd&H FÃPX>«‰†Ö_ubÝ@Øß¹10< @ºâ=]`Üï–þ`x<ŠÁâ‹ýËpaPp>7ž …†ý)‡! ÿª@€†@Ah8ƒÁÓà¹ßοúü—îA(ÜïO4ò×?k€a1¸«¹˜8>'‹Ï …!È¿çEኈ‰þewÁ¡þyCÐ.ˆï÷Ìð㋹ p?€ Ä•h„ÄâSøþo*‹üûDþ7Hüoøß"ïÿOÜ¿kô_ñÿ÷=ÿZ ‡<ñðמà Àï€à÷²ƒÐ€ß þo¡ OÜï þ»·5䯪ÿ“óïð_)TP¼BÂbR"R™a-˜/Äņ»\Apüåý±["\ h8 Á‹üç~ñA¢¢Ã,Ü``Äo5¤þ‚ —¿÷€×íO@#U}[3ÁÿeÛþq6ÁOÖÂüg&kC¤Ë?¿©ÔÔ¾€a1i9€°¸Œ(þ1⟣œ¸dÐÿö‘ؿΆ ,æ °àÿÿñû×éþßh4`¤Ëï92Ç‚.øÑû§á7 Æ¡ÑxÅÿl|çÿ8ÿyˆ/L>5Ž+‰¤-]ßP†5ÈFÒí‚Ö4ŸÙ {2…ù±δv-„….63u;Еù©õÅ­²Jýöª\„&ï˵Ÿ±ÄY½ >k:y†Ýƒ¤´ðGÜ7ü_¦Ÿ­so¡ÕÌJÍ]J3Y¢yEîSÏüUºÉè™ÑµÜ̼9äЩ[LؽßÌT6-ý)¼DúÊN\š¢€ÊÏÓïËëDÖQ/öJóÉhÆö/4Ë?}7(LTÊû%¸¡^§ä\TÅÈXõqâá°ÅcRƒB6Ã×Ì1nOL)ƒz(têG¯pޏ²äôÐ=Ë a°{ÇD/¹@~/`ý4z\ã\Iž,‹µœ©ìL¥k´ùHÑÚn֋Йn1•òîUЧi¥o#9w^O6\6Í„å;uy_q0%_gP”vhT%ˆ\·µ&X«YÓjþÞÎKøÔ"ÿÙg·Fg{iiÐwÔ„ˆ[¨ßþZî ?CJ9–+£|¿ú ;‡”v?Þ¨1ŸüuÏæY,7¤(«Ý¯2uh(—ÛpBYöY½^pÎ>œ*ƒ÷ÅFæ-ÁeÏ’êrõVß[5ô,†w^¶fÊ‘Š4oªÞÈÞüEèçÃ:똫 4Ê ?ŽÔ °¢. y†òä»ñF¿²ò£)GC¾uŸÊûu›óFûƒŠË^¾­sX-N¨M€@Ö‘êÎàÓw‘0ÚoˆNçðW»Ж¦QqíèŒhfÙ˜´šª—t¸u±À“È•xBÏaguÀ=vè¤ Ìä˜*ž¨îÚçLS?y¼É²ÍxØá¶¢•üMÜÙµrìîsV bÁÅ"Tÿ¾Þ¬ä3Z“oFtdé<ÕÓå÷`Xv7€sþJ'WÆ­ÏZØjÈéëJ¸È èp”  ç©x¼û:]ÈcLwü’ƒ(èsŸåæqèæN³÷T<´fW9/Öx¹8h,ñ\Cöµ(|z MCû ‡Ð=Ð]ç(ÛòtÒ¶Àz~ ¶í’Šâ:ËHMòÖFEL澞\N}ÖÇ ¹iA•-)Í›û¼âqEô ˆZͽ…‹ÎÚjêg睊­Ÿ¥{úNÈž…ÿÒ4àâB~¯uM÷w^p{?€ä£ S´õ¯ÑñÇIZë«Ä›áúõ´bå”­XÞË9z&?]:'Ü…jW\mô½ÑF_€(Ô+Ó»ç:ÍITl¶=ß ²9"( I,ù¬:n¥¨pÏ>ýÙS1ââЙð!Wi;f°mOöÈîYwÐvàû9ÎtŽý\©ÙEyæ<¡KkÑ_4à»8û‰ƒ§é‡<ûŒÉWqóXJZ"NÚfokaf=‚gJ#ó"gS ¯B~€¾\Î1’}¼Á:“²¨&û>Alp–9¸øÈ!ä¶—VêıØP(-ÿµå † Õeå3RYÍÛ±[S”æÚ·6b… xg.Z¦œ©N-p±–P"Ž¥J‡?W‹Sš÷¿QNÎ] ¨:.p³2 îç"4nJªi=Ô:š+o¶I²x"'6f«uU ûâø@ò…ùkcé=ë»ÆéãëÅïÞD–¡ç4+•£>r8þÜDÑ]0‘îšDÈ·±@{$?Tñ–^0yŒ)¦($Ã@Þ×àË3zeŸ¿R³ßOÁ§âF-˸怈„Œû°OèÑ˔‚›O}NùŸâ4ØÕ¸GZ™¼ê9åýÝDÓEŽ#M+B—u™è,Œ™²uÎs4RmÌ5ó…kwK«ö(Tà-d\"G|4‡ûŠ­;U›«ØË—“K¬ _›IÙ~&¯qI©6"ôÌ¥I\cˆzSPÕ£^šŽ«?vŒH/£Õxxåoûtª0š…þ\”4SO϶F[ú#«>½íž~®D©6b]ÊýÖ÷¦¼e¨§CÙû·Wàƒ›—¹µÍ«M.¤=·aákûyÌyI^Dœ{Hï,°ç$†*<$9%P1­ÓˆT©™ì¶VfqKäbÈšïÑ+kŽÝ“¨R:h|ªýª–Å4¯cSn$&¤6{âï´Ð>)#‚ŒòpÈ¿g÷é<±$ó0é »:ÔuËcÛ’ ʧäÑ-°É¸óð#Çñ¬ŒVó¬Ü~)Ñð"¦â¹ÑÆ•s)r|CC ³ØÉž™~=N@ &Éšzª¶*~$!r–í.uã”$R ³¡EÌ*–a¢ƒjkâ9¹›5/ûá4„6ªµðñV/GŠ¢d¿Û>÷—’{nòFV®©îq»'¬ÜË«ü<:T¿D}ÖÕ |xõèéTï‡?Íú˜ku†x… Ùn\ZËsȪ|¬ËÚ zÏœXeÈ™®Âû%ùôêë·yœ¯²FvýZ±ñÍY.÷©çÌòSDzöP|\_ø6òõg¸}Ѹ·¢^ ü ˆøôüe¯Í/T”ôyÞ²Õ” «ÎÔ¼ï3n ¿Íµ„_¸ŸJ#úèYüâyجÍ3Â\¡´tU„7Au"¬À /’lŸ]ï…[ìî´·÷¶‹jh?¹õ2)´±/ìû²æ Ê©ÕîÏÌ;?]¶Ðy-¤·Ow"Šrè­ì3ý’LÜ'm`Š?0Jpû¾?¶¤,êoDÔØ¨åm®?T$KÁ¡Åf!^œñC¼N2t² }Oœï T'€à—èí2&ˆÃ$$pkwïé\Eš®z[›}Ocƒeæ1_½:4ëSËk½M(yðéWë;n&ÛÍô_„*¿/×^92cîÔ ¤Yýè³›ödõãX÷Jû£ÕFo…jc Ë>ϹK%¡‚°o‰­µE±ÍNbšoÇl û¿JGìä΢¯›¯P¦¥KÌ{°kœ"Ö«7bn”ÜM;|Ñõä•WßÕEî7d¤nùL²_nÉfη|ÎyOmº^…6$MÛ5Þyÿrºåc5›gýÃí‡/#F5û®réÍ?!^Ófõ!1„¤Ø]e뮽?Î)­ Ýè\¾YÙN"œÕheÅä¢û´¨¿ZœÔnî¸y'..u˜1×ך/ªdê #Ic`rÉÝ$'Í‚³|4l½ˆv½Û1Cîâ¸oغÛûCím:X6½´Ã?p˜3Ûz}°$þÄ2U"ÇÁ2®göŠ$§hƒ{™z/mò“QÊt¯Ü9Ÿ+=ÅÛ”u9oW¨Õ–øFä;bÏ3!©Õ"ñuíÚfZØÍ«}5/y"ú§i\d9õ¥å …†:úÞžî?‰ý™y—¸ªÛ¾^úª¨Æãò•{mÏíŠó!Ê{&ØËO2_îÛçò=8¥þ`:+3h>Œøyõ,·ä†PuµvÒ¦xy[Á`U|B¦$®&^åÖ³¤¡ƒ‹†âvOíœã˜À³þ0¬ÃÜ Y²;Ü4Vª³IÓ‹KÜÔážt QŽ`Œß( °M|@e§ÓJu®ú˜«o¯9ÈV0”k8}n-vLm`ïˆ@m@ø€¬³;‹1t¶u›½˜ÁrZË”æÖË“'2øyTB1ÞŸðÆmÕTC ZÿÅØ½g^ºý Z~bsÛæ¶Q7)´FTžXÛ%/8?Ó44±MnE(²æfŗ ´ã˜Q–ôgf÷o±¯u8¹1/>ø¾gC~nU vœü1*×ÐHX 1XZ(˜ás!$ݺ¦x!«FRþlGÿ±Íf)DÁ$‘–Êú»èjfs'{¿’ÈÕºŸ;üò œ5·œ8â®À¹b’l/Й«”êñ‚¯ô÷óÞæZ•ïÜäúá„V+—¸3ÕŠürËò‰RV`X΀¯ŠßÓÓ¢¯ëý/¡ fèì¾£¼€‡¶QNÎKÕ”ã=À i™5~Ô/ª6q‡¶¥Â 3WÖRNþâ/P¹„U›*Õµ]ÁÍŽÌÏ&ÄTL¦>˜ç¥Ê8Á^’4KúsA>w ʹ»–¡CSàç@tY>ž¢we–†áéôZ¦—GÏAÿznÜýsú£ö°ñp µó¤b²/dîul›°OžÊ¥Úî¢Å8!±'iÑ„·GGoéÜéáÔ“Ðf1Mܽ“£v¡"SÒ4¾ªÚý¯¢U,oæiz'ë¨Èo³òX‹­-äþF LѨ3µ0&A£ÏFþúÊŒ¥ùâöüyi*צå&îöy†•KïcæO¦³c¶jEÞkP¥Ïé7¸)ëª dí€Œéæ–1MÐü‰â‘ßm…O™C^LuÏ™«ëŸ/‘ô X8Ș:/X¢f¿.g}8fƒ>_ õº|tÉßÊÁk÷.Aùc)V™þW—É,ô0ge³MDÛU{Í^Ûºï4?³5Gªý³ˆ’K‡Õ>¥k“ïŒÍMµ„o9¹íA+d,’ë¿e˜§ø^8QZMðÏ”­µ;„x¹Ä·Jg3.|b©N´°¡kT#͵ÔÆ$Ô"Äòð I’Š6î£ÓC;ëñÈI,3I ×Ѧ†àw”ö%“O)û€@.)ëKûã³m¿9äH-ènø}Æñ+”¼³¢Óè´,÷Ÿ™kžRÀM¸Ô+ÛÞÞþÍšvÉÅ|1½\Ú7Bu$¬Ü\U—¹%hk¾0ßÑÄ*ë™ç†÷\2>Jï¼&\7áøéD#S›ÜZh¥±q6Ì%cÞ÷ F[j¾ÉfpØï,~Jðã uE€‚¼ÝzºÙ|v uP´ÐðGã!­ÇW‹È`ƒØ;䌷¿#È•½§øŸX^r[v´Ò*š= l’µ„ÑsòJÉ¥ˆrîTÏT9õá˜P騦ú‹%’À¶ÎDIú·1<Õ§ÇgtNâ<Í#j- ®+ itóTd7 ;}±é§@R0Úe·ìÜj¸íþòLÉôª¬£ŠF$Q·Ž14I˜+Úë¡ïmÖˆdb³‰´Ù‡æ¸mù±é¶Á¼Ú:.ÝŠ_KÙ2[Þ[öÐ â”xñ²hA“Öë–Ö샱úd_–Ø£DïÄY Žô*2@1÷£\Ýè¿"”˜ÇãŒQäö%ác;œ^/Œv|L9ƒÁZ¨,§ý´öœ_$¹Q¦à´g²ZTO`£¢ðâ´R‚-…@ÑÌC %¬Ξtr°¥Ë–&º²×?Óqûú×_ QEG’£²TúM„Q¥jä'ž>EÖ¤Ú´¯Æÿj ¦š<ê—ÆŒ›q×Eñ&Þ¨•µ’g5më—º1ÏÝòZ >œúmlM„]–äJÈ[èRzí9àûû­‰Ò»(nNÞ‡`¯Ë‡ó’#¸ÅnX¹ó(è.H¬·'ØÌ¯ºªCz¼ôMh½P’ℹ>È ”wªOZeŽUtÿÖWËQu˜9ÇU? O“Š‘„Ým¹ÕOÊvâ ³óÖd5)Î?Í" 5‰»*×6så.é²›h䓼QÈ•-tí.ŠONQÖÅú_ °+>u^Aå;Ào5æ¢ ’ W{4ÛôüÞ<¹=á•£R÷¢2–å$58"cJ:JêOeÌ.ÚÈë2cò­„¯Š±€½])»»",ïŸ~°„N¿É{æiE57Y@ÈIþú[ód¢Æ8}ËO?iõ¬!¡®xõOÇ®ILA÷¡UÆ5Bº‚“'Ó|ó^ãÜMt¡£ñuC±e}Û¯¸½™¤‰OÅ—Û⯌JðYpS÷«%šŠ†B {vÜ4êdÿdZàŒ¼“ýÕ_wèùº“håX‚f qΖrÃÃ’±IwAÓžô­®îˆ«Ö®¯héײ°®Ÿãƒ¸<ÝÛë -{ÿ–«WF\ii©|Wˆ°8d¾MÁ. Ìiþl'CŸ1ÛÍ–´%§ç‹ÞMªÂº$šI*§-š)s.$66åšNt­å×*_"~?gà6k3û_¤¦G‹ ¥ä?7lI›²ûh VqOYì›sd‚BéZÜÞlÃ¥èOµ.lüIîï·F®ßb5l#¼èó#I,–¼ó#íg°³7J¤ç1w·'¤;o §y‰¬èºG¹Q­cb :fÇé3|~}r*¯«ó½ƒwhïΓ0[—Ütå­¤_¿gʽ=˜ÎªÒóKdv* ãQàÀW[¯M0N’YPWšžFÚå9ßJ%{®ccýzí©át¬ÜÐlô[Š”GH*)€Ôqª\9£Qµ×'€Õ… Ï ä3ÿX¶5,¥|F i4°÷ûT¬v|²»Ç›c¡JBP1&Ù2¢ÔÄúÎׯR•òI}Wæƒ3Fú-ýOÄô 6‹Ï é+_8ÀVk޶ гß"å¾NÀ šŸ<=݆I•ÚÓ’L`t÷E.:èÝXì"›/Ô™nWp¥š61ÿTº¾-nh†ÍOòåP‚E ÆúIQTõ8ªËì;« Àp@ ¤–%-0ïeˆ¿¦¦ $RùpäÙY(#ßtÏFsê9{œÛòÔö ª²¹;›®FëŒ"Jž:F—gjDZaÑÆíƒ;Ó>eJæ÷.²¾‹Œxê=0‹ÖPW3÷Ñ%ÛŽ·0î.uõ6ù^Œ®Ìì΂zï7èÕÝ”ïn3»í[Õv6cOŒ^L#®ÉÇäåß!Záø©Ð ¦¾i¥f$¢HÛ²&Áïºô,¾ÉtâTQ³ÛpD¸œÍèò 2€ žˆòÃ$„ß÷Ò„×ÏbËÇ5óÝÃÞp¸6TF<¯YâG¶v ¢ ÞŒ«ŽT¤ÌfDNØ®‘äÓ=W¾ûS¾ƒ²z̤Oî5ý× ?%¸™tw×që7œå¬¸wÑÃwØt®Ý,¨z¹WI¯ðÄt6@=ïuzk7WZæ\xj.N•…Ö}|A&0U‰6*·³áé–› f#Û ÿܸ±Pš¢zíÁ«ê™Žò~ó‚Cý·JðôA^èn¦3ï»™ÑR×ÔÑsV¶±7À¼/ wµ´ÜÏl¤´ÛKÚ½Ž[ç‡Í4Ð/âÿàT_ endstream endobj 404 0 obj << /Length 696 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MS >Ù_êãP·ò{=éÇsæ@öd”ôÇöçºkŸ˜xäœ;`ÝVY×`Œs4½JaÓQÜ¡n«þª‡í¡.’Uu9\ßèY6î>¼ý<¶Ù´‡.Z.ÙôÍž‡þ“4>DÓ—¾²}Ý~°û¯ÒÜÑör:-d0­V¬²WÑÍÿ¼k,›þ8ãóþy²LÒ»ðºÊ®²çÓ®´ý®ý°Ñ’ó[Å*²mõíLrŸ²?ŒÜÔqù¥ã• â5F8@ šˆ=@Šð)&°  È8Ô¹€ÂÅRx u€Dº\j2H—†ª¡ÐVÁ¹0CzL]ø Âb°ct‘I ©g$`htÑ‹0œÆ\F„áŒ0ä†sê‡á jd< —Iê6œ»õñzgóñºË»þê W ¤qÈ’£+—Ÿ#ö•ñÌÇkÄÞ .‰bªsré…¤šáæÄç†bïmŽXú¾„Kß7ǵHß7Géû„û¾nb§>&jÊØµäuœ¯¼ú•ñ1ÜV™÷•âÜãâµÇ‰Ou$ÕŸqWèS/%1{\øxB!€§ÔK(hH©—TЖ枃»J©Ïϯv×ÜëÁ=küÒ2ø¥UðKÏ‚_:~é$ø¥Óà—ÖÁ/¿Œ ~™Eð+7¿èË¢/ ÿlì¡ÛÒ(/}ïö -+ZXukoûìÔE?Z„ãæÅÛKýqíƒÄ endstream endobj 405 0 obj << /Length 851 /Filter /FlateDecode >> stream xÚ}UËnÛ0¼ë+ØC€äà˜”¬W` $ ð¡ME¯ŽD§bÉäCþ¾œÝuÒA6†ËÙÝÙ‘D^}{ØÎlÛ?»Yt«Õ£ûóиYù}w ®®ª¾9]7ýp®uíew¼SCßlݤ®ËMµéÓ'oºæõܺ ësRá^Ý}Ôõ“û5sÍ8dzæ8Ï'7Ì&3ÓHy:L¯žúKù-õÙ–¢?Ý0úîN™[­µ¬»¶ìl æ"NÍ/r÷‡®D¡z†ÞÀ„ª=4“¬è¿9z‡¼}'wÜtû>X.ÕüÑoŽÓðFzo‚ùýкáн¨ëÏzÂö|:½:ˆQ:X­Tëö¾®÷åÇîèÔü‹©ß™Oo'§BZÖØô­O»Æ »îÅK­WjY׫Àuí{FRž÷îÚsuíÿBå«`ilB ˜„‘„­=öÌã¸æ@æ )UÖ 9yŽ€IÁ(Ñ¥âË ŒŠS*0Ö43Ö`Ô`ÔÌðÃ]¦È—©šß»A 𭑦 ábŒ±tX&Àá #êq,úê˜ãpÂØ§œ›g'~ι5°å8|Ô÷%NÉñ¸b'QÓDœ‹¸a á”8šìg×"Øh¸~ †ë' ~X—kzŽÕÇšê¬ÿâ_8õ¿1ðBx.BzҬÀ›hƘ'•g 2òÚxk=6Œáu2†¶,bŒúÙ‚ñ˜¼6äE–0Fý,eLœŒç‡†L¼ ¾ä…YÀ—¬` ÍYÉecªOó›ïDV3†ÎœõÇ蛳þüœõÓ;”³þzrÖŸP.ëO0{ÎúSâ³þ„ø¬3…æœu¦xÆ9ëŒ(—uF”Ë: }6ì³Å,V|ÆŒV|ŽÅgâˆÏèeÅg¼—V|F_+>ÃO+>G|ÆìV|†~+>C§Ÿ1»Ÿá›Ÿ©¾ø ýV|†ÎB|FßB|¿ŸÁ/Ägè)ÄgÊŸ1{!>_|&~Æ'a9i0K!þc–BüÇ{XˆÿT“¿K5ù;)¨ŽøNŽbøPq<ŽðÃÑ${„y¯ªå„¢ 1®÷“¾9ƒ¿èž¡Sçù¡sïWÑ©?!‹~t‡]®Q¬îëàiàT endstream endobj 406 0 obj << /Length 851 /Filter /FlateDecode >> stream xÚ}UËnÛ0¼ë+ØC€äà˜”¬W` $ ð¡ME¯ŽD§bÉåCþ¾œÝUÒA6†ËÙÝÙ‘D^}{ØÎlÛ?»Yt«Õ£;÷—¡q³òûî\]U}s9ºnüá\ëÚi÷|§†¾ÙºQ]—›jÓÆOÞtÍë¥uësRá^Ý}Ôõ“û5sÍ8­õ¬9ÎΗ“f£™i¤<ÆWOý‚¥ü–úlKQŸn8úîN™[¿ïë®-û#;s§æ“Üý¡kQ¨ž¡70¡jÍ(+úoŽÞ!$oßΣ;nº},—jþè7ÏãðFzo‚ùýкáн¨ëÏzÂör:½:ˆQ:X­Tëö¾®÷åÇîèÔü‹©ß™Oo'§BZÖØô­;ŸvvÝ‹ –Z¯Ô²®WëÚÿöŒ¤<ï'îÚsuíÿBå«`ilB ˜„‘„­=öÌã¸æ@æ )UÖ 9yŽ€IÁ(Ñ¥âË ŒŠS*0Ö43Ö`Ô`ÔÌðÃMSä‹iªæ÷n|k¤iC¸Xc,– pD¸ÂˆzA‹¾:æxœ0¶À)ç¦ÀljŸsn l9uÁ}‰Sr¼®ØIÔ4ç"nXCA8%Ž&ûÙµ6®AƒáúI‚ÖåÇšžcõ±¦:ë¿ø§þ7^ïÂEHOšupÍó¤ò¬áQF^o­Ç†1¼ÎBÆÐ–EŒQ?[0^“׆¼ÈƨŸ¥Œ‰“ñüЉÔ—¼0 ø’Œ¡9+ã¬bLõi~ãÈjÆÐ™³þ}sÖƒŸ³~z‡rÖCOÎúÊeý fÏYJ|ÖŸŸu¦Ðœ³ÎÏ8gå²ÎˆrY§¡Ï†}¶˜ÅŠÏ˜ÑŠÏ1°øLñ½¬øŒ÷ÒŠÏèkÅgøiÅgâˆÏ˜ÝŠÏÐoÅgè´â3f·â3|³â3ÕŸ¡ßŠÏÐYˆÏè[ˆÏàâ3ø…ø =…øL¹â3f/Ägâ‹ÏÄÏød ,' f)ÄÌRˆÿx ñŸjò·b©&'ÕÿÁ©¸W *ŽÇ~8šd0ïUµœPt"á Æò~Ò7—að—Ý3tªã> stream xÚ}UËnÛ0¼ë+ØC€äà˜”¬W` $ ð¡ME¯ŽD§bÉåCþ¾œÝUÒA6†ËÙÝÙ‘D^}{ØÎlÛ?»Yt«Õ£;÷—¡q³òûî\]U}s9ºnüá\ëÚi÷|§†¾ÙºQ]—›jÓÆOÞtÍë¥uësRá^Ý}Ôõ“û5sÍ8dzæ8;_Nn˜f¦‘òt_=õ –ò[ê³-E~ºá|è»;enµÖ>°îÚ²?b°s0qj>Éݺv…êzªöÐŒ²¢ÿæèBòöí<ºã¦Û÷Ár©æ~ó<o¤÷&˜ß­Ý‹ºþL 'l/§Ó«ƒ¥ƒÕJµnïëz_~ìŽNÍ¿˜úùôvr*¤µaMߺói׸a×½¸`©õJ-ëz¸®ýoÏHÊó~â®=W×þ/ÔQ¾ –É&¤€)ˆH8ù@h€ÐÚcÈ<Žkd>€‘Re€‘ƒ‘瘌]*®áq°¬À¨8¥cMC0c F FÍ 1Ü4E¾˜¦j~ï1À·Fš6„‹0ÆÒa™G„+Œ¨ıè«cŽWÀ c œrn œqœø9çÖÀ–ãðQÜ—8%Ç àŠDMq.â†5„Sâh²Ÿ]‹`£áú4®Ÿ$øa]~¬é9Vkª³þ‹?qêcà…ð.\„ô¤Y‡7ÑŒ1O*ÏeäµñÖzlÃë,d mYÄõ³ã50ymÈ‹,aŒúYʘ8Ï ™xA}É ³€/YÁš³’1<Ê*ÆTŸæ71Þ‰¬f 9ëÑ7gý1ø9ë§w(gý1ôä¬?¡\ÖŸ`öœõ§Ägý ñYg Í9ëLñŒsÖQ.ëŒ(—uúlØg‹Y¬øŒ­ø‹ÏÄŸÑËŠÏx/­øŒ¾V|†ŸV|&ŽøŒÙ­ø ýV|†N+>cv+>Ã7+>S}ñú­ø …øŒ¾…ø ~!>ƒ_ˆÏÐSˆÏ”+>cöB|&¾øLüŒOÂrÒ`–BüÇ,…ø÷°ÿ©&+–jòwRPñœŠ{Åð¡âxᇣIöó^UË E'b\!ï'}s Ð=C§:ÎóCçÞ¯¢SBýè›®Q¬îëàŠôàY endstream endobj 408 0 obj << /Length 665 /Filter /FlateDecode >> stream xÚmTMkã0½ûWh…öF’G*!àØ ä°miʲ×ÔVZCcÛYè¿ßy#9햅ļÍÌ{3ú¸úñ¸Ÿ¤eóâ&ñ­O®oÎ]á&ÙÏC]]åMq>¹z¸w®tå¸Ú߉Ǯ)ön×Ù.ßÕÕpCÁ»ºx?—nŒúÐÚ½VõgxÄõ³û=ißþt¦›ÐO"î¹Þiýû’ [\lÁ¡¿\×WM}'Ô­”’›ºÌšt÷Ñ4p‹é¨æXÕeˆȉ”eU Áâoq¢ yÿÑî´«M´\Šé-öC÷ÁÊn¢éCWº®ª_ÅõEy÷ç¶}wP d´Z‰Ò©õz891ýÞÔeùù£uB³­¼š¢)]ß ×êW-¥\‰åv»Š\]~[S!åå8Æ&+ø¨™Z‘c¼eÇ"'‡2„•¥ÖÉŒå5çIÂä@Ä|놉"¼àB2AQƒhíSlLØÎØ¡28a}„ŠÉ‘¢Fšq5ÒïŠnnìbfÇ®Š·CG= WêÜ¢íe$ôg;þ´A,½ˆ:“sŸ‡¶¥ñx l=N×£O™ñT”Ƙ$û³0ó«²óë˜ý_¸س/vЧæÿú Q%~ú˜œZxÎ pÊX2ÿÚû™Óë¢]$œ£^œqnØÆa¿ K‡¹ƒ?‘£?ãq FqMyíc0Ã=) &l(´™¹ßmôiü,3Æ|’d &å\ÖcÖÞ †·]͹&ôÓˆ9wã{dÞ-ãtÚÀ…xö•õ¹ì\˜ \¨cΜÍýÜÀe™kžqL¸àJs?·<œ@>q¸hx .×·8wÝl~1øÖâ¾Vµ»<*mÓ"‹ÿü﬇mômDaš endstream endobj 409 0 obj << /Length 664 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅvB°+„8l[•jµWHL7RI¢ý÷;oìÐnµDoÆ3óÞŒ?n~<ï&YÕÜ$¾—âÅÛK_ºIþsßE77E[^N®«\5®žÄsß–;7ˆÛ|[l›z¸£àmS¾_*7Fý?håÞêæ3<âöÕýžtÃé`ú ý$â^ëáÖ¿/ ²ÅÕúËõçºm„º—R’cÝTy{‚îs4 Üb:ª9ÖMÕâ9‘Ò¢ªË!Xü-O4$ï>΃;m›c-búB‹ç¡ÿ`ewÑô©¯\_7oâöªŠ¼»K×½;(2Z.EåŽTŒz}ÜŸœ˜~oêºüúÑ9¡ÙV^MÙVîÜíK×ï›7-¤\ŠÅf³Œ\S}[S!åpcSŠ•s|T¢–äXoØ1/È¡ aeé£ušC£¼æ> stream xÚmTMoâ0½çWx•ÚÅvB°+„8l[´Ú+ML7RI¢ý÷;oìÐnµDoÆ3óÞŒ?n~<ï&YÕ¾ºI|/Å‹;·—¾t“üç¡‹nnж¼œ\3<:W¹j\=?ˆç¾-wn·ù¶Ø6õpGÁÛ¦|¿TnŒúÐʽÕÍgxÄíÞýžté7ý„~qûzx§õïK‚lqµ‡þrý¹n›¡î¥”äX7UÞž ûM·˜ŽjŽuSõA€x…œHiQÕå,þ–'’wçÁ¶Í± 1}¡Åóа²»húÔW®¯›7q{UEÞÝ¥ëÞ-—¢rG*F½>NNL¿7u]ÞtNh¶•WS¶•;w‡Òõ‡æÍE )—b±Ù,#×TßÖTHy=ޱ)ÅÊ9>*QKr¬7ì˜äP†°²ôÑ:MÈ¡Q^sž$LDÌ6ÞaÈ‘*Âs.$S5ˆ6`Ñ>ÅÆ„m•Ãë#TLŽ 5²œkd¨‘­}WìXssc‰»*ÿzê¹Rýh/#¥?Ûñ§ béE$èLÎ|Ú–Æã°õ8^yŒ>eÎSQc’ìÏçÀ̯bÈV̯cöáNa'_ì OÍþõA£Jýô195÷œkàŒ±dþ•÷3§×E»H¸@½8çܰ%ŒÃ~A—s*=FÆã Œâšó0ÚÇ`†{RLØPh33¿ÛèÓøYæŒù$ÉLƹ¬Ç¬¼ o»šqMè§sîÚ÷ȼÆ tÚÀ…xö•õ¹ì\˜ \¨cΜ-üÜÀe™k–sL¸àÊ ?·"œ@>q¸hx ®×·¼ô=Ýl~1øÖâ¾Ö»>*]Û!‹ÿüﬧMô±Ba© endstream endobj 411 0 obj << /Length 665 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6„ØU‰@"å°mÕT«½¦àt‘@„ú÷;olšv»R‚ž3óÞŒm®~<î&YÕ¾¸I|+Å“;µç¾t“ü羋®®Š¶<]3Ü;W¹j|{º}[îÜ ®óm±mêᆂ·Mùv®Üõÿ •{­›KtÄõ³û=é†c_›~B?‰Àçzx£€oïâBþåúSÝ6wBÝJ)‰X7UÞaýMƒ¼˜Ž†uSõÁƒx£HiQÕåVü,4$ïÞOƒ;n›C-búD/OCÿÎÞn¢éC_¹¾n^ÅõÅÑ»s×½9X2Z.EåTú½ß˜~ëëãýó{ç„æµò~ʶr§n_º~ß¼ºh!åR,6›eäšêŸw*¤¼ÆØ”b啨%kà ó‚e+K­Ó„òšó$a"1Ûx‘*Âs.$S5ˆ6PÑ>ÅÆ„m„ÊA Âú‘¡F–s 5²µïЉ577v‘ر«òϾ§+uaÑö6Rúó:¾¬!,½‰É™ÏCÛÒx¼¶gÀ+ѧÌy*JcL’ù|Ìú*†mÅú:fþ“vŠuòiü©ÙWUê§É©¹×\gŒ%ë¯<ÏšÞí"áõâœsÖ0û_:Ìú©ôý3x0ŠkjÌÃhƒyîIYx0aCáÍÌün£Oãg™3æ“$cx0ç²³ò<<Þv5ãšðO#æÜµï‘u7Œø´A ñ6ì*ës™Z˜ Z¨cƒΜ-üÜ eYk–sL¸ÐÊ ?·"œ@>q¸hø|ÜßòÜ÷tµù›Á·÷µnÜÇg¥k;dñŸ¿GãG«‡Mô€@c¶ endstream endobj 412 0 obj << /Length 665 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6„ØU‰@"å°mÕT«½¦àt‘@„ú÷;olšv»R‚ž3óÞŒm®~<î&YÕ¾¸I|+Å“;µç¾t“ü羋®®Š¶<]3Ü;W¹j|{º}[îÜ ®óm±mêᆂ·Mùv®Üõÿ •{­›KtÄõ³û=é†cßš~B?‰Àçzx£€oïâBþåúSÝ6wBÝJ)‰X7UÞaýMƒ¼˜Ž†uSõÁƒx£HiQÕåVü,4$ïÞOƒ;n›C-búD/OCÿÎÞn¢éC_¹¾n^ÅõÅÑ»s×½9X2Z.EåTú½ß˜~ëëãýó{ç„æµò~ʶr§n_º~ß¼ºh!åR,6›eäšêŸw*¤¼ÆØ”b啨%kà ó‚e+K­Ó„òšó$a"1Ûx‘*Âs.$S5ˆ6PÑ>ÅÆ„m„ÊA Âú‘¡F–s 5²µïЉ577v‘ر«òϾ§+uaÑö6Rúó:¾¬!,½‰É™ÏCÛÒx¼¶gÀ+ѧÌy*JcL’ù|Ìú*†mÅú:fþ“vŠuòiü©ÙWUê§É©¹×\gŒ%ë¯<ÏšÞí"áõâœsÖ0û_:Ìú©ôý3x0ŠkjÌÃhƒyîIYx0aCáÍÌün£Oãg™3æ“$cx0ç²³ò<<Þv5ãšðO#æÜµï‘u7Œø´A ñ6ì*ës™Z˜ Z¨cƒΜ-üÜ eYk–sL¸ÐÊ ?·"œ@>q¸hø|ÜßòÜ÷tµù›Á·÷µnÜÇg¥k;dñŸ¿GãG«‡MôñcÔ endstream endobj 374 0 obj << /Type /ObjStm /N 100 /First 922 /Length 4819 /Filter /FlateDecode >> stream xÚí\isÛÆ²ý®_ÑM™˜}©JÝ* ²9¾Žå8N\®W´Û|¡D…¢r“ûëßéÁÂÁBZ²sõá•+LÏrºûtO—H­–H­.9®&Fájé5®.Ñ÷Ú'Ò°Äzô3<ñýŒH8à id¹s'£¹˜Ò`J¥nLµ“¸± ·³—p§0­Åpo1¯•‰`B$–ãŠ~ÒøDpŽ•,qÏN¤u€Æ±õg7«0úIA7‚`“H&мt*Q†Ó†& (œM´ñ˜ÃùD{nN$2œfõ21ÆÔª[®0«·‰¥•%X PŠñÄ ´(&§&´:q–Ö²6ñÖâXÆk)N¸R‰7hïФŒ1;Ø€qËq#•ôdKÌÈÉŒw˜7Ž&€UÑpÂ.†Ÿ,É9L’H sò‰âä%€“ÓEø1-×p3Y¡#‰ ornKÓªiêì9;!ÜcTàp¸á’ÜG7°•DgAt!]„„HPgÅà2꬜Sg §ÎFÉêKö§®°'!ÑAQgÉ`Å-±Ð|‡EéÍac–(šŽÀh‡ºîݸ=QÁ‚¬SG3̯ÖÐU‘­´"[‘/´¡™ ¿¶–¤XC{Ì¥$Ö0ŒÚÜD‘ÂãN”ÄÆ%Ö€-©Ö°ÌRÖ°’QQ^‡~XÃ}¥'/R?2©cp„׸ãŽÚ°† üW_¤Ïÿº®’t~uµÙ¤g·ováùñêê·“4Ûl/ªí+†ðe¯ÓoÒoÓü'é³ê|—¼ÒÍa1tµðŽ™ PkÎŒF·yòÕWIz–¤_ožo’´H¾¸^¾«fî4ùç?OðïÓ!À˜3OÆÒ¸ÜŠ™#çj7Ïcàòï!´žY8:CºFbmJxh–òAì³Ï3 ›4„™»b(h,­ò,I_þòkB B@•1Czu»^¿>ÔõãLbß6‰‰ 3Í‹ZdæÁÝ^ßrsµ XKTŽ×ƒJÚ†‘rê”°/ÝcLút»9?«`ƒ$}Z”Iú¼ús—„éàFäD1ú妣epÜÓ ¯y”•×ÔB}Øÿ‚…ªÐõ=ví:Ï6š?¬‰vZ¡íOWš¿ó¡¿vš£ý£vu çõŸ¡’YtÏtOŠa’“~„/îÛ^ÃZ·Ï¡µ£­µK°{èÓâj1Òí5ÖîC’nÚm3¶§m¡¯4Ç’|~ýôú:Ä^‰q-ëÃè™Ø×0¢eLÌÒÐía\Ó¯×Üû†Ùm{˶º,ðu´ã·,o³@wOfÒÕ5™"þkÙÞÃ}ÄæƒÙgï~}°(‹³o{³sí½Ø}Â.Ódù¶mÀo¡f>ùüúùõ¯Ä—&s¶µW›¡ûµ—6ôV.ÉZÖ~¨öâŽík/æ>X{Ñ [{u‘ƒ9Ú?ÂéÅ~Šë©¶†jk/Ѝ®¦jîm³#µãé>®ÙhWëvJz3¹±IЗvµ&Z êÜŠìM÷¸jÅ#O´=èÍáÞ”uC³k’ޱ܄U7µ9kFyǺœ@Pçú«Õ©­g ›"®„ ç’Ý•pÁ ´Ö‚ÜElë`ZöÉÕ>ÍÑýQµ/YǘÉ:ª©Îƒ›º©c=GõV`\4OP$ž4¦œv¼_îcp \sÛ»1Í}WHE…WÓxy²ÚŸ…é$XT7çÛÕõn³­O†O–—üøã‹<ÿõËü‡¾å ‚õòÝM¢êY¶ù3yõHŠäŸ3­5”ç7çΖƣg¾¼þ¦Z½{G'q@­jÙ#NÂowËõê|~õn]¡ g»êò`ž¤/›QJrLò~¹¥“çén»ZR÷- Ok å Ã¥3tPíò+öóüI1úåYyöœ3¯§Uã0Û#úT+||âd¬ç=Ýè±Ó µí@7ߪ¦Y¬‹U{’>M—éyz¾Yo®ðzy¹L/Ò*}›¾KWéoé:½L¯ÒMzþžnÓ›t—Þ¦¤¦õÍàîc†_^<}ù|3<Näœ6ƒ@òoÌ`Ìà>Ö ìV˜§yZ¤‹´L¿N¿M¿O§?À2ÿ‚mž¥géóô§ôEú ì´Ü¥oÒ7Ûåyµ®Þîê»@Špû[µëšq_ Ʀ­~¿]®ÓêÏóõò2ØùݶZîªmú>}ÿ×õûê †ÿß`úuusìu{ù¦ÚÞ¬Þ‘+6WÜq½ÜVWa¹pW/v 4›‹ô÷ÛÍ®ºx³®oj9了\ÕhnV¦7ëåÍ{8t÷~[Uéî߸ööêëœo¶¼ü=»ŸçgOž¾|ÖøùÝSägNŸ}|Ýïæç,òô7}ýsíí›óÕj·Z_TŸìõ‹Íz½Ü’ó¯.Èê}·ü}''ïÝ<ðíüšþ§ïYq¯D¶(_>{öå“Õå›Û›³åÕãGϪw·òÂ÷‘pš6"NBïl¹ˆ÷æò€ƒÞ;X Ùwð×!¡ “×€Æê>Ê>þåçß½h”}¶¹|²ñýP]¬èk(qѧ§´ñzÓÛ›XÐô¸×—ùúr3ÚðÃŒ>Îç7-C dz›¾]áßÈø›Û-ì6JB!ÿ¬@ÇŽ”-ÿjÚýQÕéäÄ«¶›¾îµy~—ÿô䛯n8B;rƒp­„ŠÜ`]Ï º—W¸¹í”þ@^ù®ç‰{¾xÙxãŽÙã|sýWݾw[“F[IçÊõ=¼y·3ÚIZ·ß5ÛŒœ¯’áÉóÇùÓ³ ç?:[/¯vÿƒSÁ™ûjê>x»×þùdþòû_ŸM(M¸©ëÝRȧꚾºôÆrXë®0v‘¾ª—}Þ„J´[CÙm_Õ‰ equ¾¹X]½Ã«·o+Ðí¼ºI^‰@Ü5 -•[Ú&1ó¦¸ HMœ4Lo¸[ó’hˆNĬ)"#„I o rT!.Bä¡Ö¨c ¬¸p'žÇ±Ó]/¼±F’xÛ¤æ¶ì~ß Öa鉾CÔäˆý>E¼¾›Áy;xlò¸Ö¬«–OuB¢|߉Vd{>›<·¯]BTgµ¦äxÇF`õ¬»?Øcõùï(vÄA¸ú.pýýá«c‡pýQ¸ÆGpÕàrv¸*Búé+ÈÇ ÓÛm]&0wÌ?òŠÅ!ðQvðö 7Ä]O@O—ïªP›[*ÈNð¼¥ò‹¾#†¿ºÀö\O–ÔoªÑ7¥ë«õU6í:<¿þ˜èMô0‡k殩¦~²¹†O>n úžR˜ÃðæÚ<×X"k‹'²^óØâÐRÔ_j¾~ttÖªC%|m=àѵ=é+ëã9þu»[£,¼iˆ‘4aF¼ ¯±‡‡ÖíÀÊÄ6@ç‰m_§B3ÇÓmõ}>fIj|;Ô˜#Cu#|B߈²bbÝÍ#zó´#klb$oGj792¬iÔx¤¶ÝHu»Rñ<. ½Omâf‰ÆÄÄ`±ÎÆz`ãÞZ&V‰•™€é £ªÎ¨JQdžj­ÖPÈE jqLAÕùAöýÀcJ3†);?Hud¤ˆPª "ÈÎÂ’žF¸hš)4¢3·0G¦‰m/'l/:Û qdM#&œ/:«òi«Ö#'ØÍ;«ò£ìŽ­ªbß‹˜ÜÁ[ßïLÏäŽVšÐnŸ<¦FL|¶iù´bõÀ‘có<¦w2s¿(6çÎvËíî4© Áä‹owÕ匟&¢Î]Mƒ 5HjPQƒ¢†zúâñì¥uŒ—LÏ_¹X§ôC—:“§W—«Ý`ùÉ1¯‡xC']äs¥œ-¹q¥;¥ßƒí—õJfÚz§LVdÖœÒ/|bé\º…w¼ô kJ’Æc<7²pš›BJRH«½tÎDnTfç(çmIcëøi¤²,¹ËmYð¹XW=TwýäèIÅç¦ô®¼’‰¬\œ"#{gRϵà6Ç4 àM$Õ&E‰Äóœ Ò¦^©¥Ö™b^ÂüÒ”eÍœ3›q“9+³¹2I#“æRÇì‚I3wú”~5¥øýäèIÅó"[Ì•°‹…ñ¹ ÜŒ,Je5wÖ ;_ÌÀGà ¨íØÂ)ž…±4–ERës ËsËÐÀûˆ…gJYc³EƵ Æëx¬_dÙ4óYÁs"¸šR|„~rô¤âE6÷~áì"×¼Ð@DŠ/¸fÙÜÀYÎØ‚!òøBKWpxÖ»Ü-(|Dæ…up¹qR›R{D·ä2’f¦p,wÜ䥩æcéB—™pªÌÊ’fõùp¨øýäèIÅÑ)ŸÏ™-]¦]á^ sž‹Ü1·Pè>2K©Q3Jl%e‚œàEŠ—9rƒ’Έ"s²¤±[@~P;™ã_NLó{³8¦æó…r‰O.8ÅräæÂq]–Ö„ÜyMqH¤€qJ³žT‹Œ¦Œ[0$Fú¹fÆifab)1•9í„.)·H>åñ1úÉÑ“Š#†¥+öƒ¬´ GqºO2ØŠrírHžÜ•ÈÛ\ÆRe”ÆÉ-˽drAÛY^gsl,÷.3´QêÈ,º´¥± ’T{±%2¸za@ìhh+äfRñúÉÑ“Š#µ-œ ¥Š@ȘÌfž3ÐGö-(¹éXš;Qä%üjB–Ø)n ¬hœÊ0%#“ÚHj•eóŒY?¥ÖdR…J„2ø VA~¡]ÞL)>B?9zRq›ÑVh°!8ÆrK–È }<“Ø J^êÕŸ¿_^ïªí?¨ÔâÜ ïÍQ¾m£*Nö[YjJ¦hÈH‰V„”® Z[:œ¯vÕìz³þërù[uš´i¶þÔiÒî(Ý/¢·q ¥×ú¸c–îúðÕbT ¯û5¢P½e)ÞM¯¦–^Ê'®×\6J€Ýª]¯ÀÂvÖÓÕS-§¢ÌÒfú™â³-ÈC‹$Ä“)Æ%g·bÛiU>*^0$àØc–R@l +𔺚7Õùnµ¹ú9ºÞHF °dÜm„«“‘-ä`ZhßV3] · ¤i›ñ@´aÁ £ Ž|T·Æz}¡…h'‡³‡ÓÒ°Q†´mëa#T“}ËÎ$!VöâG¯óAÈ’ºêEÓk?lDÏ6\nnßD& öS|RDöVzRD,–â²Vb8d¬É¾‡¨}Λw‡"‚bؤˆ Øi…V|=Q­¶Õ“"ZËŽ4Â:w\ÁÚjŽO.JPÛd5…ÓÍô¨p:¢@Áø¤ˆ˜>Nƒc¬ãqÇT!\˜ž\”2v[¨ D”º¹›…šMŠèø ĤˆJ&¡Ž*¨¦tPPÚ¸1Y3Bh1) ©ÅOˆjJ>) á7¥šµ¬9ª R´wLAÕ@µnrQr®g“¢P~O Š.å÷Eá,c&Ea-wDÁëxÜqëäͦñ„“×4JälZA**8›…‚ALЍràÇ XÇã:ë_Tó“ªßL ÿcúêškM!%ØÞÅ;|ÐmVªÍá7ÍõU6WÕ\$Ó…÷øŒ9ªÛu F©æí:Õœ T/JŠÃ¥ÜáͧYD6àe¾Ù¼•lÌ(ÒÝo'ˆœôn endstream endobj 447 0 obj << /Producer (pdfTeX-1.40.24) /Author(\376\377\000M\000a\000r\000c\000\040\000R\000o\000e\000d\000e\000r)/Title(\376\377\000p\000o\000l\000y\000m\000a\000k\000i\000n\000g)/Subject()/Creator(\376\377\000L\000a\000T\000e\000X\000\040\000w\000i\000t\000h\000\040\000h\000y\000p\000e\000r\000r\000e\000f\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000/\000\040\000G\000A\000P\000D\000o\000c)/Keywords() /CreationDate (D:19700101000000Z) /ModDate (D:19700101000000Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) kpathsea version 6.3.4) >> endobj 444 0 obj << /Type /ObjStm /N 3 /First 21 /Length 176 /Filter /FlateDecode >> stream xÚ5ŽÍ‚0„ï}Šá ågH‰‘›Šõd8ThHh‰-ßÞRà4™Ùow Â>Øã$6rÀŸ ,CäÌ[…ߥf\™‰¿j°j8kÈ…\Ò)d³{húÕ.vÔôQ¬Ñ\ ¼ÐKÝå¹=[0eh°­Õ>#ÃäD5íe‡ÈvÌ0ÁÂÛ¤{.lKRÒa¶æikgþ*[F^Š•R0³22q´ý8†­é‡è<Ï endstream endobj 448 0 obj << /Type /XRef /Index [0 449] /Size 449 /W [1 3 1] /Root 446 0 R /Info 447 0 R /ID [ ] /Length 1052 /Filter /FlateDecode >> stream xÚ%–KOVW†÷:¹x¼ (WAQoˆñFA-^8tbâJLlÕÄ¡QÇu%&&Î4Æ ÆYÿ@ÓYÿ€éÀ¤i:h‚õ<¯“'{¯ï|ûìï¼ÏYûK)¥ÿ‹”Šd©åNbt¡ûF p‰ÚiFT€¨1Z*Këø)¦U šZAí$Ó°’Úzj'˜®«©uS;Ît ¨¥¶“Ú(Ó:POmŒÚ1¦kÁ:jÚËÓõ`µ©eÚ6R»NíÓM ‘Ú"µÃL7ƒ-å4¯¢vˆih¦¶†ÚA¦- •Z'µa¦m Ú)j˜nLׂ!¦  lÝ`‡¥T§gß¶sqØv€>Ø úÀÐkÉÞèkº®ŸÑn Ñ{Qd{Á>°hÚŸ6®_¤Ÿªg ‡£§¦Ç©ç¬”Œ"S– Y– ZªøEÛ ºåY0Îi0n©ê«®;.²ç^ Ÿ5 ¦Ø³¬».ƒY0®€[`ÆR½i©«àPÜ=`;Óypܤ¶›•åîm2—„ØY,Xjx¢¥©qóàºÀñÀìÙU–æÿäºÀرxH5–º_êSi‹¬!YQ4¤¨œÄĉøl,ƒ'­á¢ð;b‹¥þOZëÍ¢ Wt” ” ”  ’ŽÒ«áZ}·`NìXXxÚÁ @•@•@@@@@ Ú²4ú›VÆ—À—À—À—À—À—À—À—À—À' í7â¸.|‰ K÷t܈)°0"Jf«õ)–nÄUVVds–æÆõ)n2JÅM€Cq›‹éW™•+ˆ¢TùéOªUƒJK‹ËšVÍ@ía(3¿3¥OW‚Õ ÔzÀkŸ×^ÞÀFÐÔZZ/q–§ý€Ö—-ÝmÔ=ÔnÚ€š ]%wm€Þ™‘?Ó<2-#ónåàÏÒýi­¢¦° ‚½`؆À0 ‚C`±ô°G«#à8΀ã–~~¬KNujÝã,˜çÀyÀ9“é™Ó%OúxV˜3à2˜sà PÒׯ}žôö|ðÆç[`(iuyOt(e àW€J@ÒNú^ˆÖu¯ë dWªeK{ôN‹’¹×—<ДP\‡œN5‚w‚w‚wôq½û(å(åM–žý¥ï6[z=£Q‹™½Ö¨Õì¹Äô6+Ú&5j·b _£­VÜý^ë°âý:­øã­F]V|ù'Yñ÷r‰-ñßX‰åÏøÿ;mq ×_¡ô }##œwÕ Ï Ï Ï Ïõ'A-\ Ïužžžžžžžžž«gžë`&Creating Polymake Objects The interaction with the polymake program is done via files. A PolymakeObject is mainly a pointer to a file and a list of known properties of the object. These properties need not be stored in the file. Whenever polymake is called, the returned value is read from standard output and stored in the PolymakeObject corresponding to the file for which polymake is called. The files for polymake are written in the old (non-xml) format. The first run of polymake converts them into the new (xml) format. This means that changes to the file by means of the methods outlined below after the first run of polymake will probably lead to corrupted files. nothing Creates an empty file with name filename. Note that filename has to include the full path and the directory for the file must exist. PolymakeObject If called without arguments, this method generates an empty file in the directory defined by . If a directory dir is given (this directory must exist), an empty file is generated in this directory. If prefix is not given, the file is called polyN where N is the current runtime. If a file of this name already exists, a number is appended separated by a dot (example: "poly1340" and "poly1340.1"). If prefix is given, the filename starts with this prefix. Optionally, the file can be generated with a header specifying application, version and type of the object. This is done by passing the triple of strings appvertyp to . A valid triple is ["polytope","2.3","RationalPolytope"]. Validity is checked by . bool Checks if the triple arppvertyp of strings specifies an application and type of polymake version 2.3. More specifically, the first entry has to be an application from ["polytope","surface","topaz"] and the third entry has to be a type corresponding to the application given in the first entry. The second entry is not checked.
PolymakeObject This method generates a PolymakeObject corresponding to the file filename in the directory dir. If dir is not given, the POLYMAKE&uscore;DATA&uscore;DIR is used.If no file with name filename exists in dir (or POLYMAKE&uscore;DATA&uscore;DIR, respectively), an empty file is created. Note that the contents of the file do not matter for the generation of the object. In particular, the object does not know any of the properties that might be encoded in the file. The only way to transfer information from files to PolymakeObjects is via .
Accessing Properties of Polymake Objects A PolymakeObject contains information about the directory of its file, the name of its file and about properties calculated by calling . The properties returned by the polymake program are stored under the name polymake assigns to them (that is, the name of the data block in the corresponding file). The following methods can be used to access the information stored in a PolymakeObject. But be careful! All functions return the actual object. No copies are made. So if you change one of the returned objects, you change the PolymakeObject itself. Directory Returns the directory of the file associated with poly. String Returns the name of the file associated with poly. This does only mean the name of the file, not the full path. For the full path and file name see String Returns the file associated with the PolymakeObject poly with its complete path. List of Strings Returns a list of the names of all known properties. This does only include the properties returned by , "dir" and "filename" are not included. If no properties are known, fail is returned. Record Returns the record of all known properties. If no properties are known, fail is returned. Returns the value of the property name if it is known. If the value is not known, fail is returned. name must be a String.
Example: Creating and Accessing Polymake Objects Suppose the file /tmp/threecube.poly contains the three dimensional cube in polymake form. Now generate a PolymakeObject from this file and call to make the vertices of the cube known to the object. cube:=CreatePolymakeObjectFromFile(Directory("/tmp"),"threecube.poly"); gap> FilenameOfPolymakeObject(cube); "threecube.poly" gap> FullFilenameOfPolymakeObject(cube); "/tmp/threecube.poly" #nothing is known about the cube: gap> NamesKnownPropertiesOfPolymakeObject(cube); fail gap> Polymake(cube,"VERTICES"); [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] # Now knows its vertices: gap> Print(cube); gap> PropertyOfPolymakeObject(cube,"VERTICES"); [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] gap> KnownPropertiesOfPolymakeObject(cube); rec( VERTICES := [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] ) ]]>
Writing to Polymake Objects To transfer data from &GAP; to polymake, the following methods can be used. But bear in mind that none of these functions test if the resulting polymake file is still consistent. nothing This appends the string string to the file associated to the PolymakeObject poly. It is not tested if the string is syntactically correct as a part of a polymake file. It is also not tested if the string is compatible with the data already contained in the file. INEQUALITIES, POINTS and VERTICES can be appended to a polymake object using the following functions: nothing Takes a list pointlist of vectors and converts it into a string which represents a polymake block labeled "POINTS". This string is then added to the file associated with poly. The "POINTS" block of the file associated with poly then contains points with leading ones, as polymake uses affine notation. nothing Does the same as AppendPointlistToPolymakeObject, but with "VERTICES" instead of "POINTS". nothing Just appends the inequalities given in ineqlist to the polymake object poly (with caption "INEQUALITIES"). Note that this does not check if an "INEQUALITIES" section does already exist in the file associated with poly. String This function takes a matrix matrix and converts it to a string. This string can then be appended to a polymake file via to form a block of data labeled name. This may be used to write blocks like INEQUALITIES or FACETS. nothing Deletes all known properties of the PolymakeObject poly and replaces its file with an empty one.
If the triple of strings appvertyp specifying application, version and type (see ) is given, the file is replaced with a file that contains only a header specifying application, version and type of the polymake object.
There are also methods to manipulate the known values without touching the file of the PolymakeObject: Takes the object data and writes it to the known properties section of the PolymakeObject poly. The string name is used as the name of the property. If a property with that name already exists, it is overwritten. Again, there is no check if data is consistent, correct or meaningful. If the PolymakeObject poly has a property with name name, that property is unbound. If there is no such property, fail is returned.
polymaking-0.8.7/doc/toggless.css000644 000766 000024 00000001672 14507124702 017305 0ustar00mhornstaff000000 000000 /* toggless.css Frank Lübeck */ /* Using javascript we change all div.ContSect to div.ContSectOpen or div.ContSectClosed. This way the config for div.ContSect in manual.css is no longer relevant. Here we add the CSS for the new elements. */ /* This layout is based on an idea by Burkhard Höfling. */ div.ContSectClosed { text-align: left; margin-left: 1em; } div.ContSectOpen { text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock { display: block; text-align: left; margin-left: 1em; } div.ContSectOpen div.ContSSBlock a { display: block; width: 100%; margin-left: 1em; } span.tocline a:hover { display: inline; background: #eeeeee; } span.ContSS a:hover { display: inline; background: #eeeeee; } span.toctoggle { font-size: 80%; display: inline-block; width: 1.2em; } span.toctoggle:hover { background-color: #aaaaaa; } polymaking-0.8.7/doc/chap2.txt000644 000766 000024 00000045474 14507124676 016524 0ustar00mhornstaff000000 000000 2 Polymake interaction 2.1 Creating Polymake Objects The interaction with the polymake program is done via files. A PolymakeObject is mainly a pointer to a file and a list of known properties of the object. These properties need not be stored in the file. Whenever polymake is called, the returned value is read from standard output and stored in the PolymakeObject corresponding to the file for which polymake is called. The files for polymake are written in the old (non-xml) format. The first run of polymake converts them into the new (xml) format. This means that changes to the file by means of the methods outlined below after the first run of polymake will probably lead to corrupted files. 2.1-1 CreateEmptyFile CreateEmptyFile( filename )  method Returns: nothing Creates an empty file with name filename. Note that filename has to include the full path and the directory for the file must exist. 2.1-2 CreatePolymakeObject CreatePolymakeObject( )  method CreatePolymakeObject( appvertyp )  method CreatePolymakeObject( dir )  method CreatePolymakeObject( dir, appvertyp )  method CreatePolymakeObject( prefix, dir )  method CreatePolymakeObject( prefix, dir, appvertyp )  method Returns: PolymakeObject If called without arguments, this method generates an empty file in the directory defined by POLYMAKE_DATA_DIR (3.2-2). If a directory dir is given (this directory must exist), an empty file is generated in this directory. If prefix is not given, the file is called polyN where N is the current runtime. If a file of this name already exists, a number is appended separated by a dot (example: "poly1340" and "poly1340.1"). If prefix is given, the filename starts with this prefix. Optionally, the file can be generated with a header specifying application, version and type of the object. This is done by passing the triple of strings appvertyp to CreatePolymakeObject. A valid triple is ["polytope","2.3","RationalPolytope"]. Validity is checked by CheckAppVerTypList (2.1-3). 2.1-3 CheckAppVerTypList CheckAppVerTypList( appvertyp )  method Returns: bool Checks if the triple arppvertyp of strings specifies an application and type of polymake version 2.3. More specifically, the first entry has to be an application from ["polytope","surface","topaz"] and the third entry has to be a type corresponding to the application given in the first entry. The second entry is not checked. 2.1-4 CreatePolymakeObjectFromFile CreatePolymakeObjectFromFile( filename )  method CreatePolymakeObjectFromFile( dir, filename )  method Returns: PolymakeObject This method generates a PolymakeObject corresponding to the file filename in the directory dir. If dir is not given, the POLYMAKE_DATA_DIR is used.If no file with name filename exists in dir (or POLYMAKE_DATA_DIR, respectively), an empty file is created. Note that the contents of the file do not matter for the generation of the object. In particular, the object does not know any of the properties that might be encoded in the file. The only way to transfer information from files to PolymakeObjects is via Polymake (2.5-1). 2.2 Accessing Properties of Polymake Objects A PolymakeObject contains information about the directory of its file, the name of its file and about properties calculated by calling Polymake (2.5-1). The properties returned by the polymake program are stored under the name polymake assigns to them (that is, the name of the data block in the corresponding file). The following methods can be used to access the information stored in a PolymakeObject. But be careful! All functions return the actual object. No copies are made. So if you change one of the returned objects, you change the PolymakeObject itself. 2.2-1 DirectoryOfPolymakeObject DirectoryOfPolymakeObject( poly )  method Returns: Directory Returns the directory of the file associated with poly. 2.2-2 FilenameOfPolymakeObject FilenameOfPolymakeObject( poly )  method Returns: String Returns the name of the file associated with poly. This does only mean the name of the file, not the full path. For the full path and file name see FullFilenameOfPolymakeObject (2.2-3) 2.2-3 FullFilenameOfPolymakeObject FullFilenameOfPolymakeObject( poly )  method Returns: String Returns the file associated with the PolymakeObject poly with its complete path. 2.2-4 NamesKnownPropertiesOfPolymakeObject NamesKnownPropertiesOfPolymakeObject( poly )  method Returns: List of Strings Returns a list of the names of all known properties. This does only include the properties returned by Polymake (2.5-1), "dir" and "filename" are not included. If no properties are known, fail is returned. 2.2-5 KnownPropertiesOfPolymakeObject KnownPropertiesOfPolymakeObject( poly )  method Returns: Record Returns the record of all known properties. If no properties are known, fail is returned. 2.2-6 PropertyOfPolymakeObject PropertyOfPolymakeObject( poly, name )  method Returns the value of the property name if it is known. If the value is not known, fail is returned. name must be a String. 2.3 Example: Creating and Accessing Polymake Objects Suppose the file /tmp/threecube.poly contains the three dimensional cube in polymake form. Now generate a PolymakeObject from this file and call Polymake (2.5-1) to make the vertices of the cube known to the object.  Example   ### suppose we have a polymake file /tmp/threecube.poly ### containing a cube in three dimensions gap> cube:=CreatePolymakeObjectFromFile(Directory("/tmp"),"threecube.poly");  gap> FilenameOfPolymakeObject(cube); "threecube.poly" gap> FullFilenameOfPolymakeObject(cube); "/tmp/threecube.poly"  #nothing is known about the cube: gap> NamesKnownPropertiesOfPolymakeObject(cube);  fail gap> Polymake(cube,"VERTICES"); [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ],   [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ]   # Now knows its vertices: gap> Print(cube);  gap> PropertyOfPolymakeObject(cube,"VERTICES"); [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ], [ -1, -1, 1 ],  [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] gap> KnownPropertiesOfPolymakeObject(cube); rec(  VERTICES := [ [ -1, -1, -1 ], [ 1, -1, -1 ], [ -1, 1, -1 ], [ 1, 1, -1 ],  [ -1, -1, 1 ], [ 1, -1, 1 ], [ -1, 1, 1 ], [ 1, 1, 1 ] ] )   2.4 Writing to Polymake Objects To transfer data from GAP to polymake, the following methods can be used. But bear in mind that none of these functions test if the resulting polymake file is still consistent. 2.4-1 AppendToPolymakeObject AppendToPolymakeObject( poly, string )  method Returns: nothing This appends the string string to the file associated to the PolymakeObject poly. It is not tested if the string is syntactically correct as a part of a polymake file. It is also not tested if the string is compatible with the data already contained in the file. INEQUALITIES, POINTS and VERTICES can be appended to a polymake object using the following functions: 2.4-2 AppendPointlistToPolymakeObject AppendPointlistToPolymakeObject( poly, pointlist )  method Returns: nothing Takes a list pointlist of vectors and converts it into a string which represents a polymake block labeled "POINTS". This string is then added to the file associated with poly. The "POINTS" block of the file associated with poly then contains points with leading ones, as polymake uses affine notation. 2.4-3 AppendVertexlistToPolymakeObject AppendVertexlistToPolymakeObject( poly, pointlist )  method Returns: nothing Does the same as AppendPointlistToPolymakeObject, but with "VERTICES" instead of "POINTS". 2.4-4 AppendInequalitiesToPolymakeObject AppendInequalitiesToPolymakeObject( poly, ineqlist )  method Returns: nothing Just appends the inequalities given in ineqlist to the polymake object  poly (with caption "INEQUALITIES"). Note that this does not check if an "INEQUALITIES" section does already exist in the file associated with poly. 2.4-5 ConvertMatrixToPolymakeString ConvertMatrixToPolymakeString( name, matrix )  method Returns: String This function takes a matrix matrix and converts it to a string. This string can then be appended to a polymake file via AppendToPolymakeObject (2.4-1) to form a block of data labeled name. This may be used to write blocks like INEQUALITIES or FACETS. 2.4-6 ClearPolymakeObject ClearPolymakeObject( poly )  method ClearPolymakeObject( poly, appvertyp )  method Returns: nothing Deletes all known properties of the PolymakeObject poly and replaces its file with an empty one. If the triple of strings appvertyp specifying application, version and type (see CheckAppVerTypList (2.1-3)) is given, the file is replaced with a file that contains only a header specifying application, version and type of the polymake object. There are also methods to manipulate the known values without touching the file of the PolymakeObject: 2.4-7 WriteKnownPropertyToPolymakeObject WriteKnownPropertyToPolymakeObject( poly, name, data )  method Takes the object data and writes it to the known properties section of the PolymakeObject poly. The string name is used as the name of the property. If a property with that name already exists, it is overwritten. Again, there is no check if data is consistent, correct or meaningful. 2.4-8 UnbindKnownPropertyOfPolymakeObject UnbindKnownPropertyOfPolymakeObject( poly, name )  method If the PolymakeObject poly has a property with name name, that property is unbound. If there is no such property, fail is returned. 2.5 Calling Polymake and converting its output 2.5-1 Polymake Polymake( poly, option: PolymakeNolookup )  method This method calls the polymake program (see POLYMAKE_COMMAND (3.2-1)) with the option option. You may use several keywords such as "FACETS VERTICES" as an option. The returned value is cut into blocks starting with keywords (which are taken from output and not looked up in option). Each block is then interpreted and translated into GAP readable form. This translation is done using the functions given in ObjectConverters (4.1-4). The first line of each block of polymake output is taken as a keyword and the according entry in ObjectConverters (4.1-4) is called to convert the block into GAP readable form. If no conversion function is known, an info string is printed and fail is returned. If only one keyword has been given as option, Polymake returns the result of the conversion operation. If more than one keyword has been given or the output consists of more than one block, Polymake returns fail. In any case, the calculated values for each block are stored as known properties of the PolymakeObject poly as long as they are not fail. If Polymake is called with an option that corresponds to a name of a known property of poly, the known property is returned. In this case, there is no call of the external program. (see below for suppression of this feature). Note that the command Polymake returns fail if nothing is returned by the program polymake or more than one block of data is returned. For example, the returned value of Polymake(poly,"VISUAL") is always fail. Likewise, Polymake(poly,"POINTS VERTICES") will return fail (but may add new known properties to poly). For a description of the conversion functions, see chapter 4. If the option PolymakeNolookup is set to anything else than false, the polymake program is called even if poly already has a known property with name option. Note that whenever Polymake returns fail, a description of the problem is stored in POLYMAKE_LAST_FAIL_REASON (3.1-2). If you call Polymake with more than one keyword, POLYMAKE_LAST_FAIL_REASON (3.1-2) is changed before polymake is called. So any further reason to return fail will overwrite it. 2.6 An Example Let's generate a three dimensional permutahedron.  Example     gap> S:=SymmetricGroup(3);  Sym( [ 1 .. 3 ] )  gap> v:=[1,2,3];  [ 1, 2, 3 ]  gap> points3:=Orbit(S,v,Permuted);;  # project to reduce ambient dimension  gap> points:=points3{[1..6]}{[1,2]};;  gap> permutahedron:=CreatePolymakeObject();    gap> AppendPointlistToPolymakeObject(permutahedron,points);  gap> Polymake(permutahedron,"VOLUME");  3  gap> Polymake(permutahedron,"N_VERTICES");  6  #Now knows its number of vertices, but not the vertices:  gap> PropertyOfPolymakeObject(permutahedron,"VERTICES");  fail  gap> NamesKnownPropertiesOfPolymakeObject(permutahedron);  [ "VOLUME", "N_VERTICES" ]  #Let's look at the object!  gap> Polymake(permutahedron,"VISUAL");  #I There was no or wrong polymake output  fail  gap> Polymake(permutahedron,"DIM");  2      polymaking-0.8.7/doc/chap3.txt000644 000766 000024 00000003623 14507124676 016513 0ustar00mhornstaff000000 000000 3 Global Variables 3.1 Getting information about polymake output 3.1-1 InfoPolymaking InfoPolymaking  info class If set to at least 2, the output of polymake is shown. At level 1, warnings are shown. This is the default. And at level 0, the polymake package remains silent. 3.1-2 POLYMAKE_LAST_FAIL_REASON POLYMAKE_LAST_FAIL_REASON  global variable Contains a string that explains the last occurrence of fail as a return value of Polymake (2.5-1). 3.2 Variables for system interaction The variables for interaction with the system are contained in the file environment.gi. Each of these variables has a function to set it, see 1.2. If POLYMAKE_COMMAND or POLYMAKE_DATA_DIR are set at startup, they are not overwritten. So if you don't want (or don't have the rights) to modify environment.gi, you can set the variables in your .gaprc file. 3.2-1 POLYMAKE_COMMAND POLYMAKE_COMMAND  global variable This variable should contain the name of the polymake program in the form as returned by Filename So a probable value is Filename(Directory("/usr/local/bin"),"polymake"). 3.2-2 POLYMAKE_DATA_DIR POLYMAKE_DATA_DIR  global variable In this directory the files for polymake will be created. By default, this generates a temporary directory using DirectoryTemporary polymaking-0.8.7/doc/chapBib.html000644 000766 000024 00000004337 14507124702 017163 0ustar00mhornstaff000000 000000 GAP (polymaking) - References
Goto Chapter: Top 1 2 3 4 Bib Ind

References

[GJ] Gawrilow, E. and Joswig, M., polymake, \URL{http://polymake.org/}.

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap0.html000644 000766 000024 00000030140 14507124702 016615 0ustar00mhornstaff000000 000000 GAP (polymaking) - Contents
Goto Chapter: Top 1 2 3 4 Bib Ind

polymaking

Interfacing the geometry software polymake

Version 0.8.7

4 October 2023

Marc Roeder
Email: roeder.marc@gmail.com

Abstract

This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al. [GJ]. The polymake program itself is not included.

Copyright

© 2007--2013 Marc Roeder.

This package is distributed under the terms of the GNU General Public License version 2 or later (at your convenience). See the file "LICENSE" or https://www.gnu.org/copyleft/gpl.html

Acknowledgements

This work has been supported by Marie Curie Grant No. MTKD-CT-2006-042685

Contents


Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chap1.txt000644 000766 000024 00000007600 14507124676 016510 0ustar00mhornstaff000000 000000 1 Installation and Preface To install the package, just unpack it in your packages directory (usually ~/gap/pkg for local installation). To use polymaking, you need a working installation of the program polymake https://polymake.org. The package has been tested on linux and Mac OS X (10.4, 10.5 and 10.6). But it should be as platform independent as GAP and polymake. The interaction with polymake is restricted to writing files and carrying out simple operations. These looked like polymake file KEYWORD1 KEYWORD2 KEYWORD3 on the command line for polymake versions before 4. The keywords are polymake methods without arguments. Since polymake no longer supports this interface the polymaking package provides the script lib/pm_script_arg.pl to emulate this. polymake ––script lib/pm_script_arg.pl KEYWORD1 KEYWORD2 KEYWORD3 Using custom scripts is not supported. Every call to polymake will re-start the program anew. This causes considerable overhead. The number of calls to polymake is reduced by caching the results in the so-called PolymakeObject in GAP. As of polymaking version 0.8.0, old versions of polymake (i.e. versions before 2.7.9) are not supported anymore. 1.1 A few words about the installation of polymake polymaking will try to guess the location of polymake. If this fails, a warning is issued at load time (InfoWarning level 1). Note that the guessing procedure is suppressed when POLYMAKE_COMMAND (3.2-1) is set manually (see 1.2-3). setenv PATH ${PATH}: The general rule is: If polymaking finds polymake by itself, there is nothing to worry about. 1.2 Setting variables for external programs As polymaking uses the program polymake, it needs to know where this program lives. The communication with polymake is done by writing files for polymake and reading its output (as returned to standard output "the prompt"). Note that the interface does not read any polymake file. 1.2-1 SetPolymakeDataDirectory SetPolymakeDataDirectory( dir )  method Sets the directory in which all polymake files are created to dir. The standard place for these files is a temporary directory generated when the package is loaded. This manipulates POLYMAKE_DATA_DIR (3.2-2). 1.2-2 SetPolymakeCommand SetPolymakeCommand( command )  method Sets the name for the polymake program to command. This manipulates POLYMAKE_COMMAND (3.2-1). 1.2-3 Setting variables permanently To permanently set the values of POLYMAKE_COMMAND (3.2-1), and POLYMAKE_DATA_DIR (3.2-2), add the lines  POLYMAKE_DATA_DIR:=Directory("/home/mypolymakedatadir"); POLYMAKE_COMMAND:=Filename(Directory("/home/mypolymakebindir/"),"polymake");  to your .gaprc file (see Reference: The gap.ini and gaprc files). Note that these have to be before the LoadPackage("polymaking"); line. Or you can change the values of the above variables by editing lib/environment.gi polymaking-0.8.7/doc/internals.xml000644 000766 000024 00000022174 14507124632 017467 0ustar00mhornstaff000000 000000 Global Variables
Getting information about polymake output If set to at least 2, the output of polymake is shown. At level 1, warnings are shown. This is the default. And at level 0, the polymake package remains silent. Contains a string that explains the last occurrence of fail as a return value of .
Variables for system interaction The variables for interaction with the system are contained in the file environment.gi. Each of these variables has a function to set it, see . If POLYMAKE&uscore;COMMAND or POLYMAKE&uscore;DATA&uscore;DIR are set at startup, they are not overwritten. So if you don't want (or don't have the rights) to modify environment.gi, you can set the variables in your .gaprc file. This variable should contain the name of the polymake program in the form as returned by Filename So a probable value is Filename(Directory("/usr/local/bin"),"polymake"). In this directory the files for polymake will be created. By default, this generates a temporary directory using DirectoryTemporary
Converting Polymake Output
The General Method When polymake is called, its output is read as a string and then processed as follows: the lines containing upper case letters are found. These are treated as lines containing the keywords. Each of those lines marks the beginning of a block of data. The string is then cut into a list of blocks (also strings). Each block starts with a line containing the keyword and continues with some lines of data. for each of the blocks, the appropriate function of ObjectConverters is called. Here "appropriate" just means, that the keyword of the block coincides with the name of the function. The output of the conversion function is then added to the known properties of the PolymakeObject for which Polymake was called. Converter- Philosopy The converter functions should take meaningful polymake data into meaningful &GAP; data. This sometimes means that the (mathematical) representation is changed. Here is an example: polymake writes vectors as augmented affine vectors of the form 1 a1 a2 a3... which does not go very well with the usual &GAP; conventions of column vectors and multiplying matrices from the right. So polymaking converts such a vector to [a1,a2,a3,...] and the user is left with the problem of augmentation and left or right multiplication.

Another area where the &GAP; object isn't a literal translation from the polymake world is combinatorics. In Polymake, list elements are enumerated starting from 0. &GAP; enumerates lists starting at 1. So the conversion process adds 1 to the numbers corresponding to vertices in facet lists, for example.

The conversion process is done by the following methods: Record having polymake keywords as entry names and the respective converted polymake output as entries. Given a the output of the polymake program as a string string, this method first calls . For each of the returned blocks, the name (=first line) of the block is read and the record is looked up for an entry with that name. If such an entry exists, it (being a function!) is called and passed the block. The returned value is then given the name of the block and added to the record returned by ConvertPolymakeOutputToGapNotation. List of strings -- "blocks"-- The string string is cut at the lines starting with an upper case character and consisting only of upper case letters, numbers and underscore (&uscore;) characters. The parts are returned as a list of strings. The initial string string remains unchanged. The entries of this record are labeled by polymake keywords. Each of the entries is a function which converts a string returned by polymake to &GAP; format. So far, only a few converters are implemented. To see which, try RecNames(ObjectConverters); You can define new converters using the basic functions described in section .

Conversion Functions The following functions are used for the functions in . The string string is converted to a rational number. Unlike Rat, it tests, if the number represented by string is a floating point number an converts it correctly. If this is the case, a warning is issued. If list contains a single string, this string is converted into a number using . Tries to decide if the list list of strings represents a matrix or a list of sets by testing if they start with "{". It then calls either or . The "PlusOne" version calls if list represents a list of sets. The list list of strings is interpreted as a list of row vectors and converted into a matrix. The "KillOnes" version removes the leading ones. As the corresponding "Matrix" version. Just for vectors. ConvertPolymakeIntVectorToGAPPlusOne requires the vector to contain integers. It also adds 1 to every entry. If list contains a single string, which is either 0,false,1, or true this function returns false or true, respectively. Let list be a list containing a single string, which is a list of numbers separated by whitespaces and enclosed by &obrace; and &cbrace; . The returned value is then a set of rational numbers (in the GAP sense). Let list be a list containing several strings representing sets. Then each of these strings is converted to a set of rational numbers and the returned value is the list of all those sets. The "PlusOne" version adds 1 to every entry. Let list be a list of strings representing sets (that is, a list of integers enclosed by &obrace; and &cbrace;). Then a record is returned containing two sets named .vertices and .edges.
polymaking-0.8.7/doc/chap0.txt000644 000766 000024 00000007202 14507124676 016505 0ustar00mhornstaff000000 000000  polymaking   Interfacing the geometry software polymake  Version 0.8.7 4 October 2023 Marc Roeder Marc Roeder Email: mailto:roeder.marc@gmail.com ------------------------------------------------------- Abstract This package provides a very basic interface to the polymake program by Ewgenij Gawrilow, Michael Joswig et al. [GJ]. The polymake program itself is not included. ------------------------------------------------------- Copyright © 2007--2013 Marc Roeder. This package is distributed under the terms of the GNU General Public License version 2 or later (at your convenience). See the file "LICENSE" or https://www.gnu.org/copyleft/gpl.html ------------------------------------------------------- Acknowledgements This work has been supported by Marie Curie Grant No. MTKD-CT-2006-042685 ------------------------------------------------------- Contents (polymaking) 1 Installation and Preface 1.1 A few words about the installation of polymake 1.2 Setting variables for external programs 1.2-1 SetPolymakeDataDirectory 1.2-2 SetPolymakeCommand 1.2-3 Setting variables permanently 2 Polymake interaction 2.1 Creating Polymake Objects 2.1-1 CreateEmptyFile 2.1-2 CreatePolymakeObject 2.1-3 CheckAppVerTypList 2.1-4 CreatePolymakeObjectFromFile 2.2 Accessing Properties of Polymake Objects 2.2-1 DirectoryOfPolymakeObject 2.2-2 FilenameOfPolymakeObject 2.2-3 FullFilenameOfPolymakeObject 2.2-4 NamesKnownPropertiesOfPolymakeObject 2.2-5 KnownPropertiesOfPolymakeObject 2.2-6 PropertyOfPolymakeObject 2.3 Example: Creating and Accessing Polymake Objects 2.4 Writing to Polymake Objects 2.4-1 AppendToPolymakeObject 2.4-2 AppendPointlistToPolymakeObject 2.4-3 AppendVertexlistToPolymakeObject 2.4-4 AppendInequalitiesToPolymakeObject 2.4-5 ConvertMatrixToPolymakeString 2.4-6 ClearPolymakeObject 2.4-7 WriteKnownPropertyToPolymakeObject 2.4-8 UnbindKnownPropertyOfPolymakeObject 2.5 Calling Polymake and converting its output 2.5-1 Polymake 2.6 An Example 3 Global Variables 3.1 Getting information about polymake output 3.1-1 InfoPolymaking 3.1-2 POLYMAKE_LAST_FAIL_REASON 3.2 Variables for system interaction 3.2-1 POLYMAKE_COMMAND 3.2-2 POLYMAKE_DATA_DIR 4 Converting Polymake Output 4.1 The General Method 4.1-1 Converter- Philosopy 4.1-2 ConvertPolymakeOutputToGapNotation 4.1-3 SplitPolymakeOutputStringIntoBlocks 4.1-4 ObjectConverters 4.2 Conversion Functions 4.2-1 ConvertPolymakeNumber 4.2-2 ConvertPolymakeScalarToGAP 4.2-3 ConvertPolymakeMatrixOrListOfSetsToGAP 4.2-4 ConvertPolymakeMatrixToGAP 4.2-5 ConvertPolymakeVectorToGAP 4.2-6 ConvertPolymakeBoolToGAP 4.2-7 ConvertPolymakeSetToGAP 4.2-8 ConvertPolymakeListOfSetsToGAP 4.2-9 ConvertPolymakeGraphToGAP  polymaking-0.8.7/doc/chap4_mj.html000644 000766 000024 00000041145 14507124702 017316 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 4: Converting Polymake Output
Goto Chapter: Top 1 2 3 4 Bib Ind

4 Converting Polymake Output

4.1 The General Method

When polymake is called, its output is read as a string and then processed as follows:

  1. the lines containing upper case letters are found. These are treated as lines containing the keywords. Each of those lines marks the beginning of a block of data.

  2. The string is then cut into a list of blocks (also strings). Each block starts with a line containing the keyword and continues with some lines of data.

  3. for each of the blocks, the appropriate function of ObjectConverters is called. Here "appropriate" just means, that the keyword of the block coincides with the name of the function.

  4. The output of the conversion function is then added to the known properties of the PolymakeObject for which Polymake was called.

4.1-1 Converter- Philosopy

The converter functions should take meaningful polymake data into meaningful GAP data. This sometimes means that the (mathematical) representation is changed. Here is an example: polymake writes vectors as augmented affine vectors of the form 1 a1 a2 a3... which does not go very well with the usual GAP conventions of column vectors and multiplying matrices from the right. So polymaking converts such a vector to [a1,a2,a3,...] and the user is left with the problem of augmentation and left or right multiplication.

Another area where the GAP object isn't a literal translation from the polymake world is combinatorics. In Polymake, list elements are enumerated starting from 0. GAP enumerates lists starting at 1. So the conversion process adds 1 to the numbers corresponding to vertices in facet lists, for example.

The conversion process is done by the following methods:

4.1-2 ConvertPolymakeOutputToGapNotation
‣ ConvertPolymakeOutputToGapNotation( string )( method )

Returns: Record having polymake keywords as entry names and the respective converted polymake output as entries.

Given a the output of the polymake program as a string string, this method first calls SplitPolymakeOutputStringIntoBlocks (4.1-3). For each of the returned blocks, the name (=first line) of the block is read and the record ObjectConverters (4.1-4) is looked up for an entry with that name. If such an entry exists, it (being a function!) is called and passed the block. The returned value is then given the name of the block and added to the record returned by ConvertPolymakeOutputToGapNotation.

4.1-3 SplitPolymakeOutputStringIntoBlocks
‣ SplitPolymakeOutputStringIntoBlocks( string )( method )

Returns: List of strings -- "blocks"--

The string string is cut at the lines starting with an upper case character and consisting only of upper case letters, numbers and underscore (_) characters. The parts are returned as a list of strings. The initial string string remains unchanged.

4.1-4 ObjectConverters
‣ ObjectConverters( global variable )

The entries of this record are labeled by polymake keywords. Each of the entries is a function which converts a string returned by polymake to GAP format. So far, only a few converters are implemented. To see which, try RecNames(ObjectConverters);

You can define new converters using the basic functions described in section 4.2.

4.2 Conversion Functions

The following functions are used for the functions in ObjectConverters (4.1-4).

4.2-1 ConvertPolymakeNumber
‣ ConvertPolymakeNumber( string )( method )

The string string is converted to a rational number. Unlike Rat, it tests, if the number represented by string is a floating point number an converts it correctly. If this is the case, a warning is issued.

4.2-2 ConvertPolymakeScalarToGAP
‣ ConvertPolymakeScalarToGAP( list )( method )

If list contains a single string, this string is converted into a number using ConvertPolymakeNumber (4.2-1).

4.2-3 ConvertPolymakeMatrixOrListOfSetsToGAP
‣ ConvertPolymakeMatrixOrListOfSetsToGAP( list )( method )
‣ ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne( list )( method )

Tries to decide if the list list of strings represents a matrix or a list of sets by testing if they start with "{". It then calls either ConvertPolymakeMatrixToGAP (4.2-4) or ConvertPolymakeListOfSetsToGAP (4.2-8). The "PlusOne" version calls ConvertPolymakeListOfSetsToGAPPlusOne (4.2-8) if list represents a list of sets.

4.2-4 ConvertPolymakeMatrixToGAP
‣ ConvertPolymakeMatrixToGAP( list )( method )
‣ ConvertPolymakeMatrixToGAPKillOnes( list )( method )

The list list of strings is interpreted as a list of row vectors and converted into a matrix. The "KillOnes" version removes the leading ones.

4.2-5 ConvertPolymakeVectorToGAP
‣ ConvertPolymakeVectorToGAP( list )( method )
‣ ConvertPolymakeVectorToGAPKillOne( list )( method )
‣ ConvertPolymakeIntVectorToGAPPlusOne( list )( method )

As the corresponding "Matrix" version. Just for vectors. ConvertPolymakeIntVectorToGAPPlusOne requires the vector to contain integers. It also adds 1 to every entry.

4.2-6 ConvertPolymakeBoolToGAP
‣ ConvertPolymakeBoolToGAP( list )( method )

If list contains a single string, which is either 0,false,1, or true this function returns false or true, respectively.

4.2-7 ConvertPolymakeSetToGAP
‣ ConvertPolymakeSetToGAP( list )( method )

Let list be a list containing a single string, which is a list of numbers separated by whitespaces and enclosed by { and } . The returned value is then a set of rational numbers (in the GAP sense).

4.2-8 ConvertPolymakeListOfSetsToGAP
‣ ConvertPolymakeListOfSetsToGAP( list )( method )
‣ ConvertPolymakeListOfSetsToGAPPlusOne( list )( method )

Let list be a list containing several strings representing sets. Then each of these strings is converted to a set of rational numbers and the returned value is the list of all those sets. The "PlusOne" version adds 1 to every entry.

4.2-9 ConvertPolymakeGraphToGAP
‣ ConvertPolymakeGraphToGAP( list )( method )

Let list be a list of strings representing sets (that is, a list of integers enclosed by { and }). Then a record is returned containing two sets named .vertices and .edges.

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/manual.css000644 000766 000024 00000015754 14507124702 016741 0ustar00mhornstaff000000 000000 /* manual.css Frank Lübeck */ /* This is the default CSS style sheet for GAPDoc HTML manuals. */ /* basic settings, fonts, sizes, colors, ... */ body { position: relative; background: #ffffff; color: #000000; width: 70%; margin: 0pt; padding: 15pt; font-family: Helvetica,Verdana,Arial,sans-serif; text-align: justify; } /* no side toc on title page, bib and index */ body.chap0 { width: 95%; } body.chapBib { width: 95%; } body.chapInd { width: 95%; } h1 { font-size: 200%; } h2 { font-size: 160%; } h3 { font-size: 160%; } h4 { font-size: 130%; } h5 { font-size: 100%; } p.foot { font-size: 60%; font-style: normal; } a:link { color: #00008e; text-decoration: none; } a:visited { color: #00008e; text-decoration: none; } a:active { color: #000000; text-decoration: none; } a:hover { background: #eeeeee; } pre { font-family: "Courier New",Courier,monospace; font-size: 100%; color:#111111; } tt,code { font-family: "Courier New",Courier,monospace; font-size: 110%; color: #000000; } var { } /* general alignment classes */ .pcenter { text-align: center; } .pleft { text-align: left; } .pright { text-align: right; } /* layout for the definitions of functions, variables, ... */ div.func { background: #e0e0e0; margin: 0pt 0pt; } /* general and special table settings */ table { border-collapse: collapse; margin-left: auto; margin-right: auto; } td, th { border-style: none; } table.func { padding: 0pt 1ex; margin-left: 1ex; margin-right: 1ex; background: transparent; /* line-height: 1.1; */ width: 100%; } table.func td.tdright { padding-right: 2ex; } /* Example elements (for old converted manuals, now in div+pre */ table.example { background: #efefef; border-style: none; border-width: 0pt; padding: 0px; width: 100% } table.example td { border-style: none; border-width: 0pt; padding: 0ex 1ex; } /* becomes ... */ div.example { background: #efefef; padding: 0ex 1ex; /* overflow-x: auto; */ overflow: auto; } /* Links to chapters in all files at top and bottom. */ /* If there are too many chapters then use 'display: none' here. */ div.chlinktop { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; } div.chlinktop a { margin: 3px; } div.chlinktop a:hover { background: #ffffff; } div.chlinkbot { background: #dddddd; border-style: solid; border-width: thin; margin: 2px; text-align: center; /* width: 100%; */ } div.chlinkbot a { margin: 3px; } span.chlink1 { } /* and this is for the "Top", "Prev", "Next" links */ div.chlinkprevnexttop { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnexttop a:hover { background: #ffffff; } div.chlinkprevnextbot { background: #dddddd; border-style: solid; border-width: thin; text-align: center; margin: 2px; } div.chlinkprevnextbot a:hover { background: #ffffff; } /* table of contents, initially don't display subsections */ div.ContSSBlock { display: none; } div.ContSSBlock br { display: none; } /* format in separate lines */ span.tocline { display: block; width: 100%; } div.ContSSBlock a { display: block; } /* this is for the main table of contents */ div.ContChap { } div.ContChap div.ContSect:hover div.ContSSBlock { display: block; position: absolute; background: #eeeeee; border-style: solid; border-width: 1px 4px 4px 1px; border-color: #666666; padding-left: 0.5ex; color: #000000; left: 20%; width: 40%; z-index: 10000; } div.ContSSBlock a:hover { background: #ffffff; } /* and here for the side menu of contents in the chapter files */ div.ChapSects { } div.ChapSects a:hover { background: #eeeeee; } div.ChapSects a:hover { display: block; width: 100%; background: #eeeeee; color: #000000; } div.ChapSects div.ContSect:hover div.ContSSBlock { display: block; position: fixed; background: #eeeeee; border-style: solid; border-width: 1px 2px 2px 1px; border-color: #666666; padding-left: 0ex; padding-right: 0.5ex; color: #000000; left: 54%; width: 25%; z-index: 10000; } div.ChapSects div.ContSect:hover div.ContSSBlock a { display: block; margin-left: 3px; } div.ChapSects div.ContSect:hover div.ContSSBlock a:hover { display: block; background: #ffffff; } div.ContSect { text-align: left; margin-left: 1em; } div.ChapSects { position: fixed; left: 75%; font-size: 90%; overflow: auto; top: 10px; bottom: 0px; } /* Table elements */ table.GAPDocTable { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTable td, table.GAPDocTable th { padding: 3pt; border-width: thin; border-style: solid; border-color: #555555; } caption.GAPDocTable { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } table.GAPDocTablenoborder { border-collapse: collapse; border-style: none; border-color: black; } table.GAPDocTablenoborder td, table.GAPDocTable th { padding: 3pt; border-width: 0pt; border-style: solid; border-color: #555555; } caption.GAPDocTablenoborder { caption-side: bottom; width: 70%; margin-top: 1em; margin-left: auto; margin-right: auto; } td.tdleft { text-align: left; } td.tdright { text-align: right; } td.tdcenter { text-align: center; } /* Colors and fonts can be overwritten for some types of elements. */ /* Verb elements */ pre.normal { color: #000000; } /* Func-like elements and Ref to Func-like */ code.func { color: #000000; } /* K elements */ code.keyw { color: #770000; } /* F elements */ code.file { color: #8e4510; } /* C elements */ code.code { } /* Item elements */ code.i { } /* Button elements */ strong.button { } /* Headings */ span.Heading { } /* Arg elements */ var.Arg { color: #006600; } /* Example elements, is in tables, see above */ div.Example { } /* Package elements */ strong.pkg { } /* URL-like elements */ span.URL { } /* Mark elements */ strong.Mark { } /* Ref elements */ b.Ref { } span.Ref { } /* this contains the contents page */ div.contents { } /* this contains the index page */ div.index { } /* ignore some text for non-css layout */ span.nocss { display: none; } /* colors for ColorPrompt like examples */ span.GAPprompt { color: #000097; font-weight: normal; } span.GAPbrkprompt { color: #970000; font-weight: normal; } span.GAPinput { color: #970000; } /* Bib entries */ p.BibEntry { } span.BibKey { color: #005522; } span.BibKeyLink { } b.BibAuthor { } i.BibTitle { } i.BibBookTitle { } span.BibEditor { } span.BibJournal { } span.BibType { } span.BibPublisher { } span.BibSchool { } span.BibEdition { } span.BibVolume { } span.BibSeries { } span.BibNumber { } span.BibPages { } span.BibOrganization { } span.BibAddress { } span.BibYear { } span.BibPublisher { } span.BibNote { } span.BibHowpublished { } polymaking-0.8.7/doc/chap4.txt000644 000766 000024 00000020470 14507124676 016513 0ustar00mhornstaff000000 000000 4 Converting Polymake Output 4.1 The General Method When polymake is called, its output is read as a string and then processed as follows: 1 the lines containing upper case letters are found. These are treated as lines containing the keywords. Each of those lines marks the beginning of a block of data. 2 The string is then cut into a list of blocks (also strings). Each block starts with a line containing the keyword and continues with some lines of data. 3 for each of the blocks, the appropriate function of ObjectConverters is called. Here "appropriate" just means, that the keyword of the block coincides with the name of the function. 4 The output of the conversion function is then added to the known properties of the PolymakeObject for which Polymake was called. 4.1-1 Converter- Philosopy The converter functions should take meaningful polymake data into meaningful GAP data. This sometimes means that the (mathematical) representation is changed. Here is an example: polymake writes vectors as augmented affine vectors of the form 1 a1 a2 a3... which does not go very well with the usual GAP conventions of column vectors and multiplying matrices from the right. So polymaking converts such a vector to [a1,a2,a3,...] and the user is left with the problem of augmentation and left or right multiplication. Another area where the GAP object isn't a literal translation from the polymake world is combinatorics. In Polymake, list elements are enumerated starting from 0. GAP enumerates lists starting at 1. So the conversion process adds 1 to the numbers corresponding to vertices in facet lists, for example. The conversion process is done by the following methods: 4.1-2 ConvertPolymakeOutputToGapNotation ConvertPolymakeOutputToGapNotation( string )  method Returns: Record having polymake keywords as entry names and the respective converted polymake output as entries. Given a the output of the polymake program as a string string, this method first calls SplitPolymakeOutputStringIntoBlocks (4.1-3). For each of the returned blocks, the name (=first line) of the block is read and the record ObjectConverters (4.1-4) is looked up for an entry with that name. If such an entry exists, it (being a function!) is called and passed the block. The returned value is then given the name of the block and added to the record returned by ConvertPolymakeOutputToGapNotation. 4.1-3 SplitPolymakeOutputStringIntoBlocks SplitPolymakeOutputStringIntoBlocks( string )  method Returns: List of strings -- "blocks"-- The string string is cut at the lines starting with an upper case character and consisting only of upper case letters, numbers and underscore (_) characters. The parts are returned as a list of strings. The initial string string remains unchanged. 4.1-4 ObjectConverters ObjectConverters  global variable The entries of this record are labeled by polymake keywords. Each of the entries is a function which converts a string returned by polymake to GAP format. So far, only a few converters are implemented. To see which, try RecNames(ObjectConverters); You can define new converters using the basic functions described in section 4.2. 4.2 Conversion Functions The following functions are used for the functions in ObjectConverters (4.1-4). 4.2-1 ConvertPolymakeNumber ConvertPolymakeNumber( string )  method The string string is converted to a rational number. Unlike Rat, it tests, if the number represented by string is a floating point number an converts it correctly. If this is the case, a warning is issued. 4.2-2 ConvertPolymakeScalarToGAP ConvertPolymakeScalarToGAP( list )  method If list contains a single string, this string is converted into a number using ConvertPolymakeNumber (4.2-1). 4.2-3 ConvertPolymakeMatrixOrListOfSetsToGAP ConvertPolymakeMatrixOrListOfSetsToGAP( list )  method ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne( list )  method Tries to decide if the list list of strings represents a matrix or a list of sets by testing if they start with "{". It then calls either ConvertPolymakeMatrixToGAP (4.2-4) or ConvertPolymakeListOfSetsToGAP (4.2-8). The "PlusOne" version calls ConvertPolymakeListOfSetsToGAPPlusOne (4.2-8) if list represents a list of sets. 4.2-4 ConvertPolymakeMatrixToGAP ConvertPolymakeMatrixToGAP( list )  method ConvertPolymakeMatrixToGAPKillOnes( list )  method The list list of strings is interpreted as a list of row vectors and converted into a matrix. The "KillOnes" version removes the leading ones. 4.2-5 ConvertPolymakeVectorToGAP ConvertPolymakeVectorToGAP( list )  method ConvertPolymakeVectorToGAPKillOne( list )  method ConvertPolymakeIntVectorToGAPPlusOne( list )  method As the corresponding "Matrix" version. Just for vectors. ConvertPolymakeIntVectorToGAPPlusOne requires the vector to contain integers. It also adds 1 to every entry. 4.2-6 ConvertPolymakeBoolToGAP ConvertPolymakeBoolToGAP( list )  method If list contains a single string, which is either 0,false,1, or true this function returns false or true, respectively. 4.2-7 ConvertPolymakeSetToGAP ConvertPolymakeSetToGAP( list )  method Let list be a list containing a single string, which is a list of numbers separated by whitespaces and enclosed by { and } . The returned value is then a set of rational numbers (in the GAP sense). 4.2-8 ConvertPolymakeListOfSetsToGAP ConvertPolymakeListOfSetsToGAP( list )  method ConvertPolymakeListOfSetsToGAPPlusOne( list )  method Let list be a list containing several strings representing sets. Then each of these strings is converted to a set of rational numbers and the returned value is the list of all those sets. The "PlusOne" version adds 1 to every entry. 4.2-9 ConvertPolymakeGraphToGAP ConvertPolymakeGraphToGAP( list )  method Let list be a list of strings representing sets (that is, a list of integers enclosed by { and }). Then a record is returned containing two sets named .vertices and .edges. polymaking-0.8.7/doc/ragged.css000644 000766 000024 00000000231 14507124702 016675 0ustar00mhornstaff000000 000000 /* times.css Frank Lübeck */ /* Change default CSS to use Times font. */ body { text-align: left; } polymaking-0.8.7/doc/chap1.html000644 000766 000024 00000017653 14507124702 016634 0ustar00mhornstaff000000 000000 GAP (polymaking) - Chapter 1: Installation and Preface
Goto Chapter: Top 1 2 3 4 Bib Ind

1 Installation and Preface

To install the package, just unpack it in your packages directory (usually ~/gap/pkg for local installation). To use polymaking, you need a working installation of the program polymake https://polymake.org. The package has been tested on linux and Mac OS X (10.4, 10.5 and 10.6). But it should be as platform independent as GAP and polymake.

The interaction with polymake is restricted to writing files and carrying out simple operations. These looked like
polymake file KEYWORD1 KEYWORD2 KEYWORD3
on the command line for polymake versions before 4. The keywords are polymake methods without arguments. Since polymake no longer supports this interface the polymaking package provides the script lib/pm_script_arg.pl to emulate this.
polymake ––script lib/pm_script_arg.pl KEYWORD1 KEYWORD2 KEYWORD3
Using custom scripts is not supported.
Every call to polymake will re-start the program anew. This causes considerable overhead. The number of calls to polymake is reduced by caching the results in the so-called PolymakeObject in GAP. As of polymaking version 0.8.0, old versions of polymake (i.e. versions before 2.7.9) are not supported anymore.

1.1 A few words about the installation of polymake

polymaking will try to guess the location of polymake. If this fails, a warning is issued at load time (InfoWarning level 1). Note that the guessing procedure is suppressed when POLYMAKE_COMMAND (3.2-1) is set manually (see 1.2-3).
setenv PATH ${PATH}:<your polymakepath>
The general rule is: If polymaking finds polymake by itself, there is nothing to worry about.

1.2 Setting variables for external programs

As polymaking uses the program polymake, it needs to know where this program lives. The communication with polymake is done by writing files for polymake and reading its output (as returned to standard output "the prompt"). Note that the interface does not read any polymake file.

1.2-1 SetPolymakeDataDirectory
‣ SetPolymakeDataDirectory( dir )( method )

Sets the directory in which all polymake files are created to dir. The standard place for these files is a temporary directory generated when the package is loaded. This manipulates POLYMAKE_DATA_DIR (3.2-2).

1.2-2 SetPolymakeCommand
‣ SetPolymakeCommand( command )( method )

Sets the name for the polymake program to command. This manipulates POLYMAKE_COMMAND (3.2-1).

1.2-3 Setting variables permanently

To permanently set the values of POLYMAKE_COMMAND (3.2-1), and POLYMAKE_DATA_DIR (3.2-2), add the lines

POLYMAKE_DATA_DIR:=Directory("/home/mypolymakedatadir");
POLYMAKE_COMMAND:=Filename(Directory("/home/mypolymakebindir/"),"polymake");

to your .gaprc file (see Reference: The gap.ini and gaprc files). Note that these have to be before the LoadPackage("polymaking"); line. Or you can change the values of the above variables by editing lib/environment.gi

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/environment.xml000644 000766 000024 00000007264 14507124632 020037 0ustar00mhornstaff000000 000000 Installation and Preface To install the package, just unpack it in your packages directory (usually ~/gap/pkg for local installation). To use polymaking, you need a working installation of the program polymake https://polymake.org. The package has been tested on linux and Mac OS X (10.4, 10.5 and 10.6). But it should be as platform independent as &GAP; and polymake.

The interaction with polymake is restricted to writing files and carrying out simple operations. These looked like
polymake file KEYWORD1 KEYWORD2 KEYWORD3
on the command line for polymake versions before 4. The keywords are polymake methods without arguments. Since polymake no longer supports this interface the polymaking package provides the script lib/pm_script_arg.pl to emulate this.
polymake ––script lib/pm_script_arg.pl KEYWORD1 KEYWORD2 KEYWORD3
Using custom scripts is not supported.
Every call to polymake will re-start the program anew. This causes considerable overhead. The number of calls to polymake is reduced by caching the results in the so-called PolymakeObject in GAP. As of polymaking version 0.8.0, old versions of polymake (i.e. versions before 2.7.9) are not supported anymore.

A few words about the installation of polymake polymaking will try to guess the location of polymake. If this fails, a warning is issued at load time (InfoWarning level 1). Note that the guessing procedure is suppressed when is set manually (see ).
]]>
The general rule is: If polymaking finds polymake by itself, there is nothing to worry about.
Setting variables for external programs As polymaking uses the program polymake, it needs to know where this program lives. The communication with polymake is done by writing files for polymake and reading its output (as returned to standard output "the prompt"). Note that the interface does not read any polymake file. Sets the directory in which all polymake files are created to dir. The standard place for these files is a temporary directory generated when the package is loaded. This manipulates . Sets the name for the polymake program to command. This manipulates . Setting variables permanently To permanently set the values of , and , add the lines POLYMAKE_DATA_DIR:=Directory("/home/mypolymakedatadir"); POLYMAKE_COMMAND:=Filename(Directory("/home/mypolymakebindir/"),"polymake"); to your .gaprc file (see ). Note that these have to be before the LoadPackage("polymaking"); line. Or you can change the values of the above variables by editing lib/environment.gi
polymaking-0.8.7/doc/toggless.js000644 000766 000024 00000004205 14507124702 017124 0ustar00mhornstaff000000 000000 /* toggless.js Frank Lübeck */ /* this file contains two functions: mergeSideTOCHooks: this changes div.ContSect elements to the class ContSectClosed and includes a hook to toggle between ContSectClosed and ContSectOpen. openclosetoc: this function does the toggling, the rest is done by CSS */ closedTOCMarker = "▶ "; openTOCMarker = "▼ "; noTOCMarker = " "; /* merge hooks into side toc for opening/closing subsections with openclosetoc */ function mergeSideTOCHooks() { var hlist = document.getElementsByTagName("div"); for (var i = 0; i < hlist.length; i++) { if (hlist[i].className == "ContSect") { var chlds = hlist[i].childNodes; var el = document.createElement("span"); var oncl = document.createAttribute("class"); oncl.nodeValue = "toctoggle"; el.setAttributeNode(oncl); var cont; if (chlds.length > 2) { var oncl = document.createAttribute("onclick"); oncl.nodeValue = "openclosetoc(event)"; el.setAttributeNode(oncl); cont = document.createTextNode(closedTOCMarker); } else { cont = document.createTextNode(noTOCMarker); } el.appendChild(cont); hlist[i].firstChild.insertBefore(el, hlist[i].firstChild.firstChild); hlist[i].className = "ContSectClosed"; } } } function openclosetoc (event) { /* first two steps to make it work in most browsers */ var evt=window.event || event; if (!evt.target) evt.target=evt.srcElement; var markClosed = document.createTextNode(closedTOCMarker); var markOpen = document.createTextNode(openTOCMarker); var par = evt.target.parentNode.parentNode; if (par.className == "ContSectOpen") { par.className = "ContSectClosed"; evt.target.replaceChild(markClosed, evt.target.firstChild); } else if (par.className == "ContSectClosed") { par.className = "ContSectOpen"; evt.target.replaceChild(markOpen, evt.target.firstChild); } } /* adjust jscontent which is called onload */ jscontentfuncs.push(mergeSideTOCHooks); polymaking-0.8.7/doc/chapInd_mj.html000644 000766 000024 00000016217 14507124702 017667 0ustar00mhornstaff000000 000000 GAP (polymaking) - Index
Goto Chapter: Top 1 2 3 4 Bib Ind

Index

AppendInequalitiesToPolymakeObject 2.4-4
AppendPointlistToPolymakeObject 2.4-2
AppendToPolymakeObject 2.4-1
AppendVertexlistToPolymakeObject 2.4-3
CheckAppVerTypList 2.1-3
ClearPolymakeObject 2.4-6 2.4-6
ConvertMatrixToPolymakeString 2.4-5
ConvertPolymakeBoolToGAP 4.2-6
ConvertPolymakeGraphToGAP 4.2-9
ConvertPolymakeIntVectorToGAPPlusOne 4.2-5
ConvertPolymakeListOfSetsToGAP 4.2-8
ConvertPolymakeListOfSetsToGAPPlusOne 4.2-8
ConvertPolymakeMatrixOrListOfSetsToGAP 4.2-3
ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne 4.2-3
ConvertPolymakeMatrixToGAP 4.2-4
ConvertPolymakeMatrixToGAPKillOnes 4.2-4
ConvertPolymakeNumber 4.2-1
ConvertPolymakeOutputToGapNotation 4.1-2
ConvertPolymakeScalarToGAP 4.2-2
ConvertPolymakeSetToGAP 4.2-7
ConvertPolymakeVectorToGAP 4.2-5
ConvertPolymakeVectorToGAPKillOne 4.2-5
CreateEmptyFile 2.1-1
CreatePolymakeObject 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2 2.1-2
CreatePolymakeObjectFromFile 2.1-4 2.1-4
DirectoryOfPolymakeObject 2.2-1
FilenameOfPolymakeObject 2.2-2
FullFilenameOfPolymakeObject 2.2-3
InfoPolymaking 3.1-1
KnownPropertiesOfPolymakeObject 2.2-5
NamesKnownPropertiesOfPolymakeObject 2.2-4
ObjectConverters 4.1-4
Polymake 2.5-1
POLYMAKE_COMMAND 3.2-1
POLYMAKE_DATA_DIR 3.2-2
POLYMAKE_LAST_FAIL_REASON 3.1-2
PropertyOfPolymakeObject 2.2-6
SetPolymakeCommand 1.2-2
SetPolymakeDataDirectory 1.2-1
SplitPolymakeOutputStringIntoBlocks 4.1-3
UnbindKnownPropertyOfPolymakeObject 2.4-8
WriteKnownPropertyToPolymakeObject 2.4-7

Goto Chapter: Top 1 2 3 4 Bib Ind

generated by GAPDoc2HTML

polymaking-0.8.7/doc/chooser.html000644 000766 000024 00000007456 14507124702 017302 0ustar00mhornstaff000000 000000 GAPDoc Style Chooser

Setting preferences for GAPDoc manuals

Unfold subsections in menus only by mouse clicks: no (default)     yes

Show GAP examples as in sessions with ColorPrompt(true): yes (default)     no

Display side of table of contents within chapters: right (default)     left

Main document font: Helvetica/sans serif (default)     Times/serif

Paragraph formatting: left-right justified (default)     ragged right

Apply settings to last page.

polymaking-0.8.7/lib/environment.gd000644 000766 000024 00000002365 14507124632 017627 0ustar00mhornstaff000000 000000 ############################################################################# ## #W environment.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareInfoClass("InfoPolymaking"); DeclareOperation("SetPolymakeDataDirectory",[IsDirectory]); DeclareOperation("SetPolymakeCommand",[IsString]); ## ## keep track of the last thing that caused Polymake to return fail: ## DeclareGlobalVariable("POLYMAKE_LAST_FAIL_REASON"); DeclareOperation("UpdatePolymakeFailReason",[IsString]); polymaking-0.8.7/lib/construct.gd000644 000766 000024 00000004051 14507124632 017301 0ustar00mhornstaff000000 000000 ############################################################################# ## #W construct.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareOperation("CreateEmptyFile",[IsString]); DeclareOperation("InitPolymakeObject",[IsPolymakeObject]); DeclareOperation("CreatePolymakeObjectFromFile",[IsString]); DeclareOperation("CreatePolymakeObjectFromFile",[IsDirectory,IsString]); DeclareOperation("CreatePolymakeObject",[]); DeclareOperation("CreatePolymakeObject",[IsDenseList]); DeclareOperation("CreatePolymakeObject",[IsDirectory]); DeclareOperation("CreatePolymakeObject",[IsDirectory,IsDenseList]); DeclareOperation("CreatePolymakeObject",[IsString,IsDirectory]); DeclareOperation("CreatePolymakeObject",[IsString,IsDirectory,IsDenseList]); DeclareOperation("ConvertMatrixToPolymakeString",[IsString,IsDenseList]); DeclareOperation("AppendToPolymakeObject",[IsPolymakeObject,IsString]); DeclareOperation("AppendToPolymakeObject",[IsPolymakeObject,IsString,IsString]); DeclareOperation("AppendPointlistToPolymakeObject",[IsPolymakeObject,IsDenseList]); DeclareOperation("AppendVertexlistToPolymakeObject",[IsPolymakeObject,IsDenseList]); DeclareOperation("AppendInequalitiesToPolymakeObject",[IsPolymakeObject,IsDenseList]); DeclareOperation("Polymake",[IsPolymakeObject,IsString]); polymaking-0.8.7/lib/pm_script_arg.pl000644 000766 000024 00000001462 14507124632 020132 0ustar00mhornstaff000000 000000 # This is a compatibility hack for polymake 4.1 # See https://polymake.org/doku.php/user_guide/tutorials/release/4.1/legacy # Copyright Joachim Zobel . # Licensed under the same license as GAP polymaking. my $file = shift(@ARGV); my $rtn = 0; $rtn = 1 if $#ARGV > 1; sub give_from { my ($c, $arg) = @_; no strict 'refs'; return $c->$arg; } my $c=load($file); my @rtn = (); foreach my $arg (@ARGV) { my @sargs = split(/\b\s+\b/, $arg); $rtn = 1 if $#sargs > 1; foreach my $sarg (@sargs) { my @ssargs = split('->', $sarg); my $given = $c; # We follow the arrows foreach my $ssarg (@ssargs) { $given = give_from($given, $ssarg); } # and return what the last one gave us push(@rtn, "$sarg\n$given\n"); } } print join("\n", @rtn); return $rtn; polymaking-0.8.7/lib/application_version_type.gd000644 000766 000024 00000001746 14507124632 022376 0ustar00mhornstaff000000 000000 ############################################################################# ## #W application_version_type.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareOperation("CheckAppVerTypList",[IsDenseList]);polymaking-0.8.7/lib/ObjectConverters.gi000644 000766 000024 00000007137 14507124632 020553 0ustar00mhornstaff000000 000000 ############################################################################# ## #W ObjectConverters.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## InstallValue(ObjectConverters, rec( ALTSHULER_DET:=ConvertPolymakeScalarToGAP, AMBIENT_DIM:=ConvertPolymakeScalarToGAP, BALANCED:=ConvertPolymakeBoolToGAP, BALANCE:=ConvertPolymakeScalarToGAP, BOUNDED:=ConvertPolymakeBoolToGAP, CENTERED:=ConvertPolymakeBoolToGAP, COCUBICAL:=ConvertPolymakeBoolToGAP, COMPLEXITY:=ConvertPolymakeScalarToGAP, CUBICAL:=ConvertPolymakeBoolToGAP, COCUBICALITY:=ConvertPolymakeScalarToGAP, COMPLEXITY:=ConvertPolymakeScalarToGAP, DIMS:=ConvertPolymakeVectorToGAP, ## done using mapping-hack DIM:=ConvertPolymakeScalarToGAP, DUAL_CONNECTIVITY:=ConvertPolymakeScalarToGAP, DUAL_DIAMETER:=ConvertPolymakeScalarToGAP, DUAL_EVEN:=ConvertPolymakeBoolToGAP, DUAL_GRAPH_SIGNATURE:=ConvertPolymakeScalarToGAP, DUAL_TRIANGLE_FREE:=ConvertPolymakeBoolToGAP, EQUATIONS:=ConvertPolymakeMatrixToGAP, ESSENTIALLY_GENERIC:=ConvertPolymakeBoolToGAP, EVEN:=ConvertPolymakeBoolToGAP, F_VECTOR:=ConvertPolymakeVectorToGAP, F2_VECTOR:=ConvertPolymakeMatrixToGAP, FACES:=ConvertPolymakeListOfSetsToGAPPlusOne, ADJACENCY:=ConvertPolymakeListOfSetsToGAPPlusOne, FACET_DEGREES:=ConvertPolymakeVectorToGAP, FACETS:=ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne, FAR_HYPERPLANE:=ConvertPolymakeVectorToGAP, FATNESS:=ConvertPolymakeScalarToGAP, FEASIBLE:=ConvertPolymakeBoolToGAP, GRAPH:=ConvertPolymakeGraphToGAP, GRAPH_SIGNATURE:=ConvertPolymakeScalarToGAP, INEQUALITIES:=ConvertPolymakeMatrixToGAP, LATTICE:=ConvertPolymakeBoolToGAP, N_01POINTS:=ConvertPolymakeScalarToGAP, N_BOUNDED_VERTICES:=ConvertPolymakeScalarToGAP, N_FACETS:=ConvertPolymakeScalarToGAP, N_FLAGS:=ConvertPolymakeScalarToGAP, N_INEQUALITIES:=ConvertPolymakeScalarToGAP, N_POINTS:=ConvertPolymakeScalarToGAP, N_RIDGES:=ConvertPolymakeScalarToGAP, N_VERTEX_FACET_INC:=ConvertPolymakeScalarToGAP, N_VERTICES:=ConvertPolymakeScalarToGAP, NEIGHBORLINESS:=ConvertPolymakeScalarToGAP, NEIGHBORLY:=ConvertPolymakeBoolToGAP, MINIMAL_VERTEX_ANGLE:=ConvertPolymakeScalarToGAP, POINTED:=ConvertPolymakeBoolToGAP, POINTS:=ConvertPolymakeMatrixToGAPKillOnes, POSITIVE:=ConvertPolymakeBoolToGAP, REL_INT_POINT:=ConvertPolymakeVectorToGAPKillOne, SELF_DUAL:=ConvertPolymakeBoolToGAP, SIMPLE:=ConvertPolymakeBoolToGAP, SIMPLICIAL:=ConvertPolymakeBoolToGAP, VALID_POINT:=ConvertPolymakeVectorToGAPKillOne, VERTEX_BARYCENTER:=ConvertPolymakeVectorToGAPKillOne, VERTEX_DEGREES:=ConvertPolymakeVectorToGAP, VERTICES:=ConvertPolymakeMatrixToGAPKillOnes, VERTICES_IN_FACETS:=ConvertPolymakeListOfSetsToGAPPlusOne, VOLUME:=ConvertPolymakeScalarToGAP, )); polymaking-0.8.7/lib/workaround_maps.gd000644 000766 000024 00000002040 14507124632 020464 0ustar00mhornstaff000000 000000 ############################################################################# ## #W workaround_maps.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareOperation("MapKeyWordToPolymakeFormat",[IsString]); DeclareOperation("MapKeyWordFromPolymakeFormat",[IsString]);polymaking-0.8.7/lib/Objects.gd000644 000766 000024 00000003677 14507124632 016663 0ustar00mhornstaff000000 000000 ############################################################################# ## #W Objects.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareCategory("IsPolymakeObject",IsObject); DeclareRepresentation("IsPolymakeObjectRep", IsComponentObjectRep, ["dir", "filename", "knownProperties"] ); # #Extracting Information: ##################### DeclareOperation("DirectoryOfPolymakeObject",[IsPolymakeObject]); DeclareOperation("FilenameOfPolymakeObject",[IsPolymakeObject]); DeclareOperation("FullFilenameOfPolymakeObject",[IsPolymakeObject]); DeclareOperation("KnownPropertiesOfPolymakeObject",[IsPolymakeObject]); DeclareOperation("NamesKnownPropertiesOfPolymakeObject",[IsPolymakeObject]); DeclareOperation("PropertyOfPolymakeObject",[IsPolymakeObject,IsString]); # #Manipulating contents of a polygon: ############################### DeclareOperation("ClearPolymakeObject",[IsPolymakeObject]); DeclareOperation("ClearPolymakeObject",[IsPolymakeObject,IsDenseList]); DeclareOperation("UnbindKnownPropertyOfPolymakeObject",[IsPolymakeObject,IsString]); DeclareOperation("WriteKnownPropertyToPolymakeObject",[IsPolymakeObject,IsString,IsObject]);polymaking-0.8.7/lib/convert.gi000644 000766 000024 00000031507 14507124632 016750 0ustar00mhornstaff000000 000000 ############################################################################# ## #W convert.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## InstallMethod(ConvertPolymakeOutputToGapNotation,[IsString], function(string) local split, blockpositions, splitblocks, returnlist, splitblock, name, rest, object; splitblocks:=SplitPolymakeOutputStringIntoBlocks(string); returnlist:=[]; for splitblock in splitblocks do name:=NormalizedWhitespace(splitblock[1]); if Size(splitblock) < 2 then Info(InfoPolymaking,2,"No data for ", name,". Record not updated for this block"); UpdatePolymakeFailReason(Concatenation("polymake returned ",name," empty")); Add(returnlist, rec(name:=name,object:=fail)); continue; fi; rest:=splitblock{[2..Maximum(Size(splitblock),2)]}; if rest[Size(rest)]="" then Unbind(rest[Size(rest)]); fi; # Apply(rest,NormalizedWhitespace); if rest=["==UNDEF=="] then Info(InfoPolymaking,1,Concatenation("polymake declares object ",name," undefined")); UpdatePolymakeFailReason(Concatenation("polymake declares ",name," undefined")); Add(returnlist,rec(name:=name,object:=fail)); elif IsBound(ObjectConverters.(name)) then object:=ObjectConverters.(name)(rest); if object<>fail then Add(returnlist,rec(name:=name,object:=object)); else Info(InfoPolymaking,1,"Conversion failed. Maybe invalid output from polymake. Record not updated for this block"); Add(returnlist, rec(name:=name,object:=fail)); fi; else Info(InfoPolymaking,1,"No Method to convert ", name,". Record not updated for this block"); UpdatePolymakeFailReason(Concatenation("polymaking doesn't know how to convert ",name," to GAP")); Add(returnlist, rec(name:=name,object:=fail)); fi; od; return returnlist; end); # #First the method to split polymake's output into different blocks by # recognizing lines which may be keyword-lines ############### InstallMethod(SplitPolymakeOutputStringIntoBlocks,[IsString], function(string) local blocks, newblock, lines, line; blocks:=[]; newblock:=[]; lines:=SplitString(string,"\n"); while lines<>[] do line:=Remove(lines,1); if not IsEmptyString(line) then if IsUpperAlphaChar(line[1]) and ForAll(line,c->IsUpperAlphaChar(c) or c in ['_','-','>'] or IsDigitChar(c)) then if blocks=[] and newblock=[] then newblock:=[MapKeyWordFromPolymakeFormat(line)]; else Add(blocks,ShallowCopy(newblock)); newblock:=[MapKeyWordFromPolymakeFormat(line)]; fi; else Add(newblock,line); fi; fi; od; if newblock<>[] then Add(blocks,newblock); fi; return blocks; end); ############################################################################# ## ## update the fail reason in case of syntax errors: ## InstallMethod(ConverterSyntaxError,[IsString], function(methname) UpdatePolymakeFailReason( Concatenation("input for converter method ",methname, " syntactically incorrect (cast an error and went into break loop)") ); Error("incorrect input"); end); ############################################################################# # Now the different conversion methods: ############################################################################# ## ## Basics, numbers and bools: ## InstallMethod(ConvertPolymakeNumber,[IsString], function(string) local sstring, denom, enum; if '.' in string then Info(InfoPolymaking,1,"Warning!converting a floating point number"); sstring:=SplitString(string,"."); denom:=10^(Length(sstring[2])); enum:=Int(Concatenation(sstring)); return enum/denom; elif string="" then ConverterSyntaxError("ConvertPolymakeNumber"); return fail; else return Rat(string); fi; end); InstallMethod(ConvertPolymakeScalarToGAP,[IsDenseList], function(stringlist) if Size(stringlist)<>1 then ConverterSyntaxError("ConvertPolymakeScalarToGAP"); return fail; else return ConvertPolymakeNumber(stringlist[1]); fi; end); InstallMethod(ConvertPolymakeBoolToGAP,[IsDenseList], function(stringlist) if Size(stringlist)<>1 then ConverterSyntaxError("ConvertPolymakeBoolToGAP"); return fail; elif stringlist[1]="1" or stringlist[1]="true" then return true; elif stringlist[1]="0" or stringlist[1]="false" then return false; else UpdatePolymakeFailReason("Boolean conversion failed, the returned value wasn't 0, 1, true, or false. Error cast"); Error("Conversion failed"); fi; end); InstallMethod(ConvertPolymakeDescriptionToGAP,[IsDenseList], function(stringlist) return JoinStringsWithSeparator(stringlist," "); end); ############################################################################# ## ## MATRICES AND LISTS OF SETS: ## ## Unfortunately some of the keywords that return matrices ## might also return lists of sets (this is a polytope/topaz problem). ## So we try to guess the type if necessary. ## InstallMethod(ConvertPolymakeMatrixOrListOfSetsToGAP,[IsDenseList], function(stringlist) if ForAll(stringlist,i->i[1]='{') then return ConvertPolymakeListOfSetsToGAP(stringlist); elif ForAll(stringlist,i->not ('{' in i or '}' in i)) then return ConvertPolymakeMatrixToGAP(stringlist); else UpdatePolymakeFailReason("ConvertPolymakeMatrixOrListOfSetsToGAP couldn't decide what to do. Error cast"); Error("don't know if this is a matrix or a list of sets "); return fail; fi; end); InstallMethod(ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne,[IsDenseList], function(stringlist) if ForAll(stringlist,i->i[1]='{') then return ConvertPolymakeListOfSetsToGAPPlusOne(stringlist); elif ForAll(stringlist,i->not ('{' in i or '}' in i)) then return ConvertPolymakeMatrixToGAP(stringlist); else UpdatePolymakeFailReason("ConvertPolymakeMatrixOrListOfSetsToGAP couldn't decide what to do. Error cast"); Error("don't know if this is a matrix or a list of sets "); return fail; fi; end); InstallMethod(ConvertPolymakeMatrixToGAP,[IsDenseList], function(stringlist) local returnmatrix, string, vector; returnmatrix:=[]; for string in stringlist do vector:=SplitString(string," "); Apply(vector,ConvertPolymakeNumber); Add(returnmatrix,vector); od; return returnmatrix; end); InstallMethod(ConvertPolymakeMatrixToGAPKillOnes,[IsDenseList], function(stringlist) local returnmatrix; returnmatrix:=ConvertPolymakeMatrixToGAP(stringlist); if not IsMatrix(returnmatrix) or Size(returnmatrix[1])<2 or not ForAll(returnmatrix,i->i[1]=1) then Error("returnmatrix is not a matrix or too small"); UpdatePolymakeFailReason("Error in ConvertPolymakeMatrixToGAPKillOnes. The returned object is either not a matrix, has fewer than 2 columns or doesn't have all ones in the first column. (Error cast)"); return fail; fi; if returnmatrix<>fail then return List(returnmatrix,i->i{[2..Size(i)]}); #kill leading ones else return fail; fi; end); ############################################################################# ## ## Vectors ## InstallMethod(ConvertPolymakeVectorToGAP,[IsDenseList], function(stringlist) local vector; if Size(stringlist)<>1 then ConverterSyntaxError("ConvertPolymakeVectorToGAP"); return fail; else vector:=SplitString(stringlist[1]," "); Apply(vector,ConvertPolymakeNumber); return vector; fi; end); InstallMethod(ConvertPolymakeVectorToGAPKillOne,[IsDenseList], function(stringlist) local vector; vector:=ConvertPolymakeVectorToGAP(stringlist); if not IsVector(vector) or Size(vector)<2 or vector[1]<>1 then Error("vector is not a vector or too small"); UpdatePolymakeFailReason("Error in ConvertPolymakeVectorToGAPKillOne. The returned object is either not a vector or has fewer than 2 columns or doesn't start with 1. (Error cast)"); return fail; fi; return vector{[2..Size(vector)]}; end); InstallMethod(ConvertPolymakeIntVectorToGAPPlusOne,[IsDenseList], function(stringlist) local vec; vec:=ConvertPolymakeVectorToGAP(stringlist); if not ForAll(vec,IsInt) then Error("Vector is not a vector of integers as expected"); UpdatePolymakeFailReason("Error in ConvertPolymakeIntVectorToGAPPlusOne. The returned vector did not consist of integers. Error cast"); return fail; else return vec+1; fi; end); ############################################################################# ## ## Sets, Sets of Sets, Lists of Sets ## InstallMethod(ConvertPolymakeSetToGAP,[IsDenseList], function(stringlist) local entries; if not Size(stringlist)=1 and IsString(stringlist[1]) then ConverterSyntaxError("ConvertPolymakeSetToGAP"); return fail; else entries:=ReplacedString(ReplacedString(stringlist[1],"{",""),"}",""); entries:=Set(SplitString(entries," ")); RemoveSet(entries,""); return Set(entries,ConvertPolymakeNumber); fi; end); InstallMethod(ConvertPolymakeSetOfSetsToGAP,[IsDenseList], function(stringlist) local returnlist, line, newlist, entry; returnlist:=[]; if Size(stringlist)<> 1 or not IsString(stringlist[1]) then ConverterSyntaxError("ConvertPolymakeSetOfSetsToGAP"); return fail; fi; line:=stringlist[1]; newlist:=ReplacedString(line{[2..Size(line)-1]},"} {","},{"); newlist:=SplitString(newlist,","); for entry in newlist do Add(returnlist,ConvertPolymakeSetToGAP([entry])); od; return returnlist; end); InstallMethod(ConvertPolymakeListOfSetsToGAP,[IsDenseList], function(stringlist) return List(stringlist,s->ConvertPolymakeSetToGAP([s])); end); InstallMethod(ConvertPolymakeListOfSetsToGAPPlusOne,[IsDenseList], function(stringlist) return List(stringlist,s->ConvertPolymakeSetToGAP([s])+1); end); ############################################################################# ## ## More complex stuff: ## ############################################################################# ## ## Graphs: ## InstallMethod(ConvertPolymakeGraphToGAP,[IsDenseList], function(stringlist) local edgelist, edge, vertices; edgelist:=[]; for edge in stringlist do # verts:=ReplacedString(ReplacedString(edge,"{",""),"}",""); # verts:=SplitString(verts," "); Add(edgelist,ConvertPolymakeSetToGAP(edge)); od; vertices:=Set(Flat(edgelist)); return rec(vertices:=vertices,edges:=Set(edgelist)); end); ############################################################################# ## ## Face Lattices: ## InstallMethod(ConvertPolymakeFaceLatticeToGAP,[IsDenseList], function(stringlist) local returnlist, line, faces; returnlist:=[]; for line in stringlist do if line<>"" and line[1]='{' then faces:=Set(ConvertPolymakeSetOfSetsToGAP([line])); Apply(faces,i->i+1); Add(returnlist,faces); fi; od; return returnlist; end); ############################################################################# ## #E END of file convert.gi ## polymaking-0.8.7/lib/construct.gi000644 000766 000024 00000025344 14507124632 017316 0ustar00mhornstaff000000 000000 ############################################################################# ## #W construct.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## # just create an empty file: InstallMethod(CreateEmptyFile,[IsString], function(name) PrintTo(name,""); end); InstallMethod(InitPolymakeObject,[IsPolymakeObject], function(poly) local appstring; # In polymake 4.1 this is required. appstring:=Concatenation( "_application polytope\n", "_type Polytope\n\n" ); AppendToPolymakeObject(poly, appstring); return poly; end); # create a (possibly empty) polygon. # That is, a record just containing the name of a file to use with polymake. # If the file does not exist, it is created. #################### InstallMethod(CreatePolymakeObjectFromFile,[IsString], function(name) return CreatePolymakeObjectFromFile(POLYMAKE_DATA_DIR, name); end); InstallMethod(CreatePolymakeObjectFromFile,[IsDirectory,IsString], function(dir,name) local filename, rtn, polygon; rtn:=Objectify(PolymakeObject,rec(filename:=name,dir:=dir)); filename:=Filename(dir,name); if not IsExistingFile(filename) then CreateEmptyFile(filename); InitPolymakeObject(rtn); fi; return rtn; end); InstallMethod(CreatePolymakeObject,[IsString,IsDirectory], function(prefix,dir) local name, i, newname; name:=Concatenation(prefix,String(Runtime())); if IsExistingFile(Filename(dir,name)) then i:=1; repeat newname:=Concatenation([name,".",String(i)]); i:=i+1; until not IsExistingFile(Filename(dir,newname)); else newname:=name; fi; return CreatePolymakeObjectFromFile(dir,newname); end); InstallMethod(CreatePolymakeObject,[IsString,IsDirectory,IsDenseList], function(prefix,dir,appvertyp) local poly; poly:=CreatePolymakeObject(prefix,dir); ClearPolymakeObject(poly,appvertyp); return poly; end); InstallMethod(CreatePolymakeObject,[IsDirectory], function(dir) local name, i, newname; return CreatePolymakeObject("poly",dir); end); InstallMethod(CreatePolymakeObject,[IsDirectory,IsDenseList], function(dir,appvertyp) local poly; poly:=CreatePolymakeObject(dir); ClearPolymakeObject(poly,appvertyp); return poly; end); InstallMethod(CreatePolymakeObject,[], function() local dir, name; return CreatePolymakeObject(POLYMAKE_DATA_DIR); end); InstallMethod(CreatePolymakeObject,[IsDenseList], function(appvertyp) local poly; poly:=CreatePolymakeObject(); ClearPolymakeObject(poly,appvertyp); return poly; end); InstallMethod(AppendToPolymakeObject,[IsPolymakeObject,IsString,IsString], function(poly,keyword,data) local string; string:=ShallowCopy(keyword); while string[Size(string)] in ['\n','\r','\c'] do Unbind(string[Size(string)]); od; string:=Concatenation(keyword,"\n",data); while string[Size(string)] in ['\n','\r','\c'] do Unbind(string[Size(string)]); od; Add(string,'\n'); AppendToPolymakeObject(poly,string); end); InstallMethod(AppendToPolymakeObject,[IsPolymakeObject,IsString], function(poly,string) local file, retval; #file:=IO_File(record.filename,"w"); #retval:=IO_WriteFlush(file,string); file:=OutputTextFile(FullFilenameOfPolymakeObject(poly),true); #SetPrintFormattingStatus(file,false); retval:=WriteAll(file,string); if not retval then Error("Error writing file"); fi; CloseStream(file); end); InstallMethod(ConvertMatrixToPolymakeString,[IsString,IsDenseList], function(name,matrix) local dim, string, point, stringpoint; dim:=Size(matrix[1]); if not ForAll(matrix,point->Size(point)=dim) then Error("not all rows have the same dimension"); elif not ForAll(Concatenation(matrix),IsRat) then Error("matrix contains non-rational entries."); fi; string:=ShallowCopy(name); Append(string,"\n"); for point in matrix do stringpoint:=JoinStringsWithSeparator(List(point,String)," "); Append(string,stringpoint); Append(string,"\n"); od; Append(string,"\n"); return string; end); # Now a few functions for convenience: InstallMethod(AppendPointlistToPolymakeObject,[IsPolymakeObject,IsDenseList], function(polygon,pointlist) local list, point,string; list:=[]; for point in pointlist do Add(list,Concatenation([1],point)); od; string:=ConvertMatrixToPolymakeString("POINTS",list); AppendToPolymakeObject(polygon,string); end); InstallMethod(AppendVertexlistToPolymakeObject,[IsPolymakeObject,IsDenseList], function(polygon,pointlist) local list, point,string; list:=[]; for point in pointlist do Add(list,Concatenation([1],point)); od; string:= ConvertMatrixToPolymakeString("VERTICES",list); AppendToPolymakeObject(polygon,string); end); InstallMethod(AppendInequalitiesToPolymakeObject,[IsPolymakeObject,IsDenseList], function(polygon,ineqlist) AppendToPolymakeObject(polygon,ConvertMatrixToPolymakeString("INEQUALITIES",ineqlist)); end); ############################## # Call polymake. If the option "PolymakeNolookup" is true, # it is not checked, whether Polymake has already been called # with this option (however, the polymake program will check # this by looking at the file associated to ). # InstallMethod(Polymake,"for PolymakeObject",[IsPolymakeObject,IsString], function(polygon,option) local callPolymake, gapobject, splitoption, knownProperties, returnval, returnedstring, block; callPolymake:=function(object,splitoption) local returnedstring, pkgdir, scriptarg, stdout, stdin, dir, exitstatus; returnedstring:=[]; scriptarg:=["--config-path","", "--script", Filename(DirectoriesPackageLibrary("polymaking"), "pm_script_arg.pl")]; stdout:=OutputTextString(returnedstring,false); stdin:=InputTextNone();; dir:=DirectoryOfPolymakeObject(object); if dir=fail then dir:=DirectoryCurrent(); fi; exitstatus:=Process( dir, POLYMAKE_COMMAND, stdin, stdout, Concatenation(scriptarg, [FullFilenameOfPolymakeObject(object)], splitoption) );; CloseStream(stdout); CloseStream(stdin); return rec(status:=exitstatus,string:=returnedstring); end; gapobject:=[]; option:=NormalizedWhitespace(option); splitoption:=SplitString(option," "); knownProperties:=NamesKnownPropertiesOfPolymakeObject(polygon); returnval:=[]; Info(InfoPolymaking,2,"option=",option); Info(InfoPolymaking,2,"Size(splitoption)=",Size(splitoption)); if Size(splitoption)=0 then Error("you must pass an option to polymake"); elif Size(splitoption)=1 then if ValueOption("PolymakeNolookup") in [fail,false] and knownProperties<>fail and splitoption[1] in knownProperties then returnval:=PropertyOfPolymakeObject(polygon,splitoption[1]); else Apply(splitoption, MapKeyWordToPolymakeFormat); returnedstring:=callPolymake(polygon,splitoption); Info(InfoPolymaking,2,String(returnedstring)); if returnedstring.status <>0 then Error("polymake returned an error (error code ", returnedstring.status, ")"); UpdatePolymakeFailReason(Concatenation("polymake terminated with exit status ",String(returnedstring.status))); returnval:=fail; elif returnedstring.string<>[] then Info(InfoPolymaking,2,returnedstring.string); gapobject:=ConvertPolymakeOutputToGapNotation(returnedstring.string); if gapobject[1].object<>fail then WriteKnownPropertyToPolymakeObject(polygon,gapobject[1].name,gapobject[1].object); returnval:=gapobject[1].object; else returnval:=fail; fi; else UpdatePolymakeFailReason("polymake did not return anything"); returnval:=fail; fi; fi; else # we return fail, whatever happens. ## only the reason may change... ### returnval:=fail; UpdatePolymakeFailReason("polymake called with multiple keywords"); if ValueOption("PolymakeNolookup") in [fail,false] and knownProperties<>fail then splitoption:=Filtered(splitoption,i->not i in knownProperties); fi; if Size(splitoption)>0 then Apply(splitoption, MapKeyWordToPolymakeFormat); returnedstring:=callPolymake(polygon,splitoption); if returnedstring.status <>0 then Error("polymake returned an error"); UpdatePolymakeFailReason(Concatenation("polymake terminated with exit status ",String(returnedstring.status))); elif returnedstring<>[] then Info(InfoPolymaking,2,returnedstring.string); gapobject:=ConvertPolymakeOutputToGapNotation(returnedstring.string); for block in Filtered(gapobject,i->i.object<>fail) do WriteKnownPropertyToPolymakeObject(polygon,block.name,block.object); od; else UpdatePolymakeFailReason("polymake didn't return anything. All keywords that would have triggered output were looked up."); fi; fi; fi; return returnval; end); polymaking-0.8.7/lib/environment.gi000644 000766 000024 00000004722 14507124632 017633 0ustar00mhornstaff000000 000000 ############################################################################# ## #W environment.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## SetInfoLevel(InfoPolymaking,1); # give the command which calls polymake. You may need to include the full path #### if not IsBound(POLYMAKE_COMMAND) then POLYMAKE_COMMAND:=Filename( DirectoriesSystemPrograms( ), "polymake" ); fi; if POLYMAKE_COMMAND=fail or not IsExecutableFile(POLYMAKE_COMMAND) then Info(InfoWarning,1,"polymake command not found. Please set POLYMAKE_COMMAND by hand"); else MakeReadOnlyGlobal("POLYMAKE_COMMAND"); fi; InstallMethod(SetPolymakeCommand,[IsString], function(command) if not IsExecutableFile(command) then Error("polymake command must exist and be executable."); else MakeReadWriteGlobal("POLYMAKE_COMMAND"); POLYMAKE_COMMAND:=command; MakeReadOnlyGlobal("POLYMAKE_COMMAND"); fi; end); # # This directory will hold the files generated for polymake # It can be changed using "SetPolymakeDataDirectory" ### if not IsBound(POLYMAKE_DATA_DIR) then POLYMAKE_DATA_DIR:=DirectoryTemporary(); fi; MakeReadOnlyGlobal("POLYMAKE_DATA_DIR"); InstallMethod(SetPolymakeDataDirectory,[IsDirectory], function(dir) MakeReadWriteGlobal("POLYMAKE_DATA_DIR"); POLYMAKE_DATA_DIR:=dir; MakeReadOnlyGlobal("POLYMAKE_DATA_DIR"); end); #### ### ## Handling of last fail reason: # InstallValue(POLYMAKE_LAST_FAIL_REASON,""); InstallMethod(UpdatePolymakeFailReason,[IsString], function(reason) MakeReadWriteGlobal("POLYMAKE_LAST_FAIL_REASON"); POLYMAKE_LAST_FAIL_REASON:=reason; MakeReadOnlyGlobal("POLYMAKE_LAST_FAIL_REASON"); end); polymaking-0.8.7/lib/application_version_type.gi000644 000766 000024 00000003701 14507124632 022374 0ustar00mhornstaff000000 000000 ############################################################################# ## #W application_version_type.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## InstallMethod(CheckAppVerTypList,[IsDenseList], function(appvertyp) local app, type; if Size(appvertyp)<>3 or not ForAll(appvertyp,IsString) then return false; fi; ## test applicateion and possible data types: app:=NormalizedWhitespace(appvertyp[1]); type:=NormalizedWhitespace(appvertyp[3]); if app = "polytope" then if not type in ["Polytope", "RationalPolytope", "FloatPolytope", "SchlegelDiagram", "VoronoiDiagram", "TightSpan", "PropagatedPolytope", "Framework" ] then return false; fi; elif app="surface" then if not type="Surface" then return false; fi; elif app="topaz" then if not type="SimplicialComplex" then return false; fi; fi; return true; end);polymaking-0.8.7/lib/ObjectConverters.gd000644 000766 000024 00000002031 14507124632 020532 0ustar00mhornstaff000000 000000 ############################################################################# ## #W ObjectConverters.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareGlobalVariable("ObjectConverters","Functions to convert polymake output to gap"); polymaking-0.8.7/lib/workaround_maps.gi000644 000766 000024 00000004346 14507124632 020504 0ustar00mhornstaff000000 000000 ############################################################################# ## #W workaround_maps.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## ########### # This is a workaround for the next-generation polymake # there we need to call keywords of the form "HASSE_DIAGRAM->FACES" # and that does not work as an entry of a record. So we have do do # some extra mapping (yes, it is a hack). ## # direction of the mapping: GAP keyword mapped to polymake keyword ####### InstallMethod(MapKeyWordToPolymakeFormat,"for PolymakeObject",[IsString], function(option) if option = "FACES" then return "HASSE_DIAGRAM->FACES"; elif option = "DIMS" then return "HASSE_DIAGRAM->DIMS"; elif option = "ADJACENCY" then return "HASSE_DIAGRAM->ADJACENCY"; else return option; fi; end); ########## # This is a workaround for the next-generation polymake # there we need to call keywords of the form "HASSE_DIAGRAM->FACES" # and that does not work as an entry of a record. So we have do do # some extra mapping (yes, it is a hack). ## # direction: Polymake output mapped to GAP keywords ####### InstallMethod(MapKeyWordFromPolymakeFormat,"for PolymakeObject",[IsString], function(option) if option = "HASSE_DIAGRAM->FACES" then return "FACES"; elif option = "HASSE_DIAGRAM->DIMS" then return "DIMS"; elif option = "HASSE_DIAGRAM->ADJACENCY" then return "ADJACENCY"; else return option; fi; end); polymaking-0.8.7/lib/convert.gd000644 000766 000024 00000004407 14507124632 016742 0ustar00mhornstaff000000 000000 ############################################################################# ## #W convert.gd polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## DeclareOperation("ConvertPolymakeOutputToGapNotation",[IsString]); DeclareOperation("SplitPolymakeOutputStringIntoBlocks",[IsString]); DeclareOperation("ConvertedObject",[IsString,IsDenseList]); DeclareOperation("ConverterSyntaxError",[IsString]); DeclareOperation("ConvertPolymakeNumber",[IsString]); DeclareOperation("ConvertPolymakeScalarToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeBoolToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeDescriptionToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeMatrixOrListOfSetsToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeMatrixOrListOfSetsToGAPPlusOne",[IsDenseList]); DeclareOperation("ConvertPolymakeMatrixToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeMatrixToGAPKillOnes",[IsDenseList]); DeclareOperation("ConvertPolymakeVectorToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeVectorToGAPKillOne",[IsDenseList]); DeclareOperation("ConvertPolymakeIntVectorToGAPPlusOne",[IsDenseList]); DeclareOperation("ConvertPolymakeSetToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeListOfSetsToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeListOfSetsToGAPPlusOne",[IsDenseList]); DeclareOperation("ConvertPolymakeSetOfSetsToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeGraphToGAP",[IsDenseList]); DeclareOperation("ConvertPolymakeFaceLatticeToGAP",[IsDenseList]); polymaking-0.8.7/lib/Objects.gi000644 000766 000024 00000014053 14507124632 016656 0ustar00mhornstaff000000 000000 ############################################################################# ## #W Objects.gi polymaking Package Marc Roeder ## ## ## ## #Y Copyright (C) 2006 Marc Roeder #Y #Y This program is free software; you can redistribute it and/or #Y modify it under the terms of the GNU General Public License #Y as published by the Free Software Foundation; either version 2 #Y of the License, or (at your option) any later version. #Y #Y This program is distributed in the hope that it will be useful, #Y but WITHOUT ANY WARRANTY; without even the implied warranty of #Y MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #Y GNU General Public License for more details. #Y #Y You should have received a copy of the GNU General Public License #Y along with this program; if not, write to the Free Software #Y Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PolymakeObjectFamily:=NewFamily("PolymakeObjectFamily",IsPolymakeObject); PolymakeObject:=NewType(PolymakeObjectFamily,IsPolymakeObjectRep); ###################################################################### # The following methods are the only ones which manipulate the contents # of a PolymakeObject. # There are no other functions containing things like # ###################################################################### # Printing Polymake Objects nicely: # InstallMethod(ViewObj, "for PolymakeObject", [IsPolymakeObject], function(poly) local compnames; compnames:=NamesOfComponents(poly); if "knownProperties" in compnames and "DESCRIPTION" in NamesKnownPropertiesOfPolymakeObject(poly) then Print("<",PropertyOfPolymakeObject(poly,"DESCRIPTION")); else Print(""); end); InstallMethod(PrintObj, "for PolymakeObject", [IsPolymakeObject], function(poly) local compnames; compnames:=NamesOfComponents(poly); if "knownProperties" in compnames and "DESCRIPTION" in NamesKnownPropertiesOfPolymakeObject(poly) then Print("<",PropertyOfPolymakeObject(poly,"DESCRIPTION")); else Print("\n"); end); ###################################################################### # # Extracting data from objects: # # the DIRECTORY: InstallMethod(DirectoryOfPolymakeObject, "for PolymakeObject", [IsPolymakeObject], function(poly) return poly!.dir; end); # the FILENAME: InstallMethod(FilenameOfPolymakeObject, "for PolymakeObject", [IsPolymakeObject], function(poly) return poly!.filename; end); #the FILENAME with full path: InstallMethod(FullFilenameOfPolymakeObject, [IsPolymakeObject], function(poly) return Filename(DirectoryOfPolymakeObject(poly),FilenameOfPolymakeObject(poly)); end); # the KNOWN PROPERTIES: InstallMethod(KnownPropertiesOfPolymakeObject, "for PolymakeObject", [IsPolymakeObject], function(poly) if not "knownProperties" in NamesOfComponents(poly) then return fail; elif Size(RecNames(poly!.knownProperties))=0 then return fail; else return poly!.knownProperties; fi; end); # just the names of the KNOWN PROPERTIES: InstallMethod(NamesKnownPropertiesOfPolymakeObject, "for PolymakeObject", [IsPolymakeObject], function(poly) if not "knownProperties" in NamesOfComponents(poly) then return fail; elif Size(RecNames(poly!.knownProperties))=0 then return fail; else return RecNames(poly!.knownProperties); fi; end); # individual properties from KNOWN PROPERTIES: InstallMethod(PropertyOfPolymakeObject, [IsPolymakeObject,IsString], function(poly,name) local known; known:=NamesKnownPropertiesOfPolymakeObject(poly); if known=fail or not name in known then return fail; else return poly!.knownProperties.(name); fi; end); ###################################################################### # Changing the things we know about a object: # # Deleting files and clearing known data # InstallMethod(ClearPolymakeObject, [IsPolymakeObject], function(poly) CreateEmptyFile(FullFilenameOfPolymakeObject(poly)); Unbind(poly!.knownProperties); end); # clear known data. Clear file and then set application, version,type # information InstallMethod(ClearPolymakeObject, [IsPolymakeObject,IsDenseList], function(poly,appvertyp) local appendstring; if not CheckAppVerTypList(appvertyp) then Error("application, version, type not well-formed"); fi; CreateEmptyFile(FullFilenameOfPolymakeObject(poly)); Unbind(poly!.knownProperties); appendstring:=Concatenation(["_application ",appvertyp[1],"\n", "_version ",appvertyp[2],"\n", "_type ",appvertyp[3],"\n"] ); AppendToPolymakeObject(poly,appendstring); end); # Deleting a something known: # InstallMethod(UnbindKnownPropertyOfPolymakeObject, [IsPolymakeObject,IsString], function(poly,name) local knownProperties; knownProperties:=KnownPropertiesOfPolymakeObject(poly); if knownProperties=fail or not name in knownProperties then return fail; else Unbind(poly!.knownProperties.(name)); fi; end); # Write a property: # InstallMethod(WriteKnownPropertyToPolymakeObject, [IsPolymakeObject,IsString,IsObject], function(poly,name,data) if not "knownProperties" in NamesOfComponents(poly) then poly!.knownProperties:=rec(); fi; poly!.knownProperties.(name):=data; end);