From 57d1f08dbca256f5fe16d57b29bfa523dec8f6c4 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 8 Jan 2015 18:37:20 +0100 Subject: -initial import for mint --- .gitignore | 26 + .gitmodules | 3 + AUTHORS | 4 + COPYING | 661 ++++ ChangeLog | 0 INSTALL | 370 +++ Makefile.am | 3 + NEWS | 0 README | 0 bootstrap | 2 + configure.ac | 156 + contrib/mint-template/README | 1 + contrib/mint-template/config/mint-common.conf | 6 + contrib/mint-template/config/mint-keyup.conf | 79 + doc/.gitignore | 12 + doc/Makefile.am | 5 + doc/logos/ai/logotalerv2.ai | 3474 ++++++++++++++++++++ doc/logos/eps/icon_taler.eps | Bin 0 -> 242881387 bytes doc/logos/eps/logo_taler.eps | Bin 0 -> 10731812 bytes doc/logos/fonts/OldNewspaperTypes.ttf | Bin 0 -> 85804 bytes doc/logos/fonts/perpetue/Perpetua Bold Italic.ttf | Bin 0 -> 75620 bytes doc/logos/fonts/perpetue/Perpetua Bold.ttf | Bin 0 -> 58512 bytes doc/logos/fonts/perpetue/Perpetua Italic.ttf | Bin 0 -> 76080 bytes doc/logos/fonts/perpetue/Perpetua.ttf | Bin 0 -> 60216 bytes .../smoth_bight/End User Licence Agreement.txt | 133 + ...a de la fuente - Version en Espa\302\247ol.txt" | 77 + .../smoth_bight/Smoth-Bight - Por Kustren.otf | Bin 0 -> 50396 bytes .../Smoth-Bight Italic - Por Kustren.otf | Bin 0 -> 50820 bytes doc/logos/ico/favicon1616.ico | Bin 0 -> 1150 bytes doc/logos/ico/favicon4848.ico | Bin 0 -> 15086 bytes doc/logos/png/icon_taler.png | Bin 0 -> 1835737 bytes doc/logos/png/logo_taler.png | Bin 0 -> 377176 bytes doc/paper/.latexmkrc | 15 + doc/paper/taler.bib | 94 + doc/paper/taler.tex | 995 ++++++ src/.gitignore | 9 + src/Makefile.am | 2 + src/include/Makefile.am | 7 + src/include/platform.h | 56 + src/include/taler_db_lib.h | 132 + src/include/taler_json_lib.h | 101 + src/include/taler_microhttpd_lib.h | 119 + src/include/taler_mint_service.h | 303 ++ src/include/taler_rsa.h | 357 ++ src/include/taler_signatures.h | 106 + src/include/taler_types.h | 120 + src/include/taler_util.h | 255 ++ src/mint/.gitignore | 6 + src/mint/Makefile.am | 131 + src/mint/mint.h | 198 ++ src/mint/mint_api.c | 1121 +++++++ src/mint/mint_common.c | 283 ++ src/mint/mint_db.c | 1838 +++++++++++ src/mint/mint_db.h | 344 ++ src/mint/taler-mint-dbinit.c | 285 ++ src/mint/taler-mint-httpd.c | 376 +++ src/mint/taler-mint-httpd.h | 106 + src/mint/taler-mint-httpd_deposit.c | 270 ++ src/mint/taler-mint-httpd_deposit.h | 48 + src/mint/taler-mint-httpd_keys.c | 512 +++ src/mint/taler-mint-httpd_keys.h | 155 + src/mint/taler-mint-httpd_mhd.c | 300 ++ src/mint/taler-mint-httpd_mhd.h | 132 + src/mint/taler-mint-httpd_refresh.c | 1497 +++++++++ src/mint/taler-mint-httpd_refresh.h | 103 + src/mint/taler-mint-httpd_withdraw.c | 400 +++ src/mint/taler-mint-httpd_withdraw.h | 65 + src/mint/taler-mint-keycheck.c | 169 + src/mint/taler-mint-keyup.c | 657 ++++ src/mint/taler-mint-reservemod.c | 215 ++ src/mint/test_mint_api.c | 211 ++ src/mint/test_mint_common.c | 83 + src/mint/test_mint_deposits.c | 149 + src/mint/test_mint_nayapaisa.ecc | Bin 0 -> 32 bytes src/mint/test_mint_nayapaisa/README | 1 + .../test_mint_nayapaisa/config/mint-common.conf | 6 + .../test_mint_nayapaisa/config/mint-keyup.conf | 79 + src/mint/test_mint_nyadirahim.ecc | 1 + src/mint/test_mint_nyadirahim/README | 1 + .../test_mint_nyadirahim/config/mint-common.conf | 6 + .../test_mint_nyadirahim/config/mint-keyup.conf | 79 + src/util/Makefile.am | 39 + src/util/db.c | 196 ++ src/util/json.c | 194 ++ src/util/microhttpd.c | 417 +++ src/util/misc.supp | 28 + src/util/rsa.c | 925 ++++++ src/util/test_hash_context.c | 48 + src/util/test_rsa.c | 112 + src/util/util.c | 528 +++ 90 files changed, 19997 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 README create mode 100755 bootstrap create mode 100644 configure.ac create mode 100644 contrib/mint-template/README create mode 100644 contrib/mint-template/config/mint-common.conf create mode 100644 contrib/mint-template/config/mint-keyup.conf create mode 100644 doc/.gitignore create mode 100644 doc/Makefile.am create mode 100644 doc/logos/ai/logotalerv2.ai create mode 100644 doc/logos/eps/icon_taler.eps create mode 100644 doc/logos/eps/logo_taler.eps create mode 100755 doc/logos/fonts/OldNewspaperTypes.ttf create mode 100644 doc/logos/fonts/perpetue/Perpetua Bold Italic.ttf create mode 100644 doc/logos/fonts/perpetue/Perpetua Bold.ttf create mode 100644 doc/logos/fonts/perpetue/Perpetua Italic.ttf create mode 100644 doc/logos/fonts/perpetue/Perpetua.ttf create mode 100755 doc/logos/fonts/smoth_bight/End User Licence Agreement.txt create mode 100755 "doc/logos/fonts/smoth_bight/Licencia de la fuente - Version en Espa\302\247ol.txt" create mode 100755 doc/logos/fonts/smoth_bight/Smoth-Bight - Por Kustren.otf create mode 100755 doc/logos/fonts/smoth_bight/Smoth-Bight Italic - Por Kustren.otf create mode 100644 doc/logos/ico/favicon1616.ico create mode 100644 doc/logos/ico/favicon4848.ico create mode 100644 doc/logos/png/icon_taler.png create mode 100644 doc/logos/png/logo_taler.png create mode 100644 doc/paper/.latexmkrc create mode 100644 doc/paper/taler.bib create mode 100644 doc/paper/taler.tex create mode 100644 src/.gitignore create mode 100644 src/Makefile.am create mode 100644 src/include/Makefile.am create mode 100644 src/include/platform.h create mode 100644 src/include/taler_db_lib.h create mode 100644 src/include/taler_json_lib.h create mode 100644 src/include/taler_microhttpd_lib.h create mode 100644 src/include/taler_mint_service.h create mode 100644 src/include/taler_rsa.h create mode 100644 src/include/taler_signatures.h create mode 100644 src/include/taler_types.h create mode 100644 src/include/taler_util.h create mode 100644 src/mint/.gitignore create mode 100644 src/mint/Makefile.am create mode 100644 src/mint/mint.h create mode 100644 src/mint/mint_api.c create mode 100644 src/mint/mint_common.c create mode 100644 src/mint/mint_db.c create mode 100644 src/mint/mint_db.h create mode 100644 src/mint/taler-mint-dbinit.c create mode 100644 src/mint/taler-mint-httpd.c create mode 100644 src/mint/taler-mint-httpd.h create mode 100644 src/mint/taler-mint-httpd_deposit.c create mode 100644 src/mint/taler-mint-httpd_deposit.h create mode 100644 src/mint/taler-mint-httpd_keys.c create mode 100644 src/mint/taler-mint-httpd_keys.h create mode 100644 src/mint/taler-mint-httpd_mhd.c create mode 100644 src/mint/taler-mint-httpd_mhd.h create mode 100644 src/mint/taler-mint-httpd_refresh.c create mode 100644 src/mint/taler-mint-httpd_refresh.h create mode 100644 src/mint/taler-mint-httpd_withdraw.c create mode 100644 src/mint/taler-mint-httpd_withdraw.h create mode 100644 src/mint/taler-mint-keycheck.c create mode 100644 src/mint/taler-mint-keyup.c create mode 100644 src/mint/taler-mint-reservemod.c create mode 100644 src/mint/test_mint_api.c create mode 100644 src/mint/test_mint_common.c create mode 100644 src/mint/test_mint_deposits.c create mode 100644 src/mint/test_mint_nayapaisa.ecc create mode 100644 src/mint/test_mint_nayapaisa/README create mode 100644 src/mint/test_mint_nayapaisa/config/mint-common.conf create mode 100644 src/mint/test_mint_nayapaisa/config/mint-keyup.conf create mode 100644 src/mint/test_mint_nyadirahim.ecc create mode 100644 src/mint/test_mint_nyadirahim/README create mode 100644 src/mint/test_mint_nyadirahim/config/mint-common.conf create mode 100644 src/mint/test_mint_nyadirahim/config/mint-keyup.conf create mode 100644 src/util/Makefile.am create mode 100644 src/util/db.c create mode 100644 src/util/json.c create mode 100644 src/util/microhttpd.c create mode 100644 src/util/misc.supp create mode 100644 src/util/rsa.c create mode 100644 src/util/test_hash_context.c create mode 100644 src/util/test_rsa.c create mode 100644 src/util/util.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..6fe51488 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +*~ +*Makefile.in +*Makefile +aclocal.m4 +autom4te.cache +autoscan.log +compile +configure +depcomp +missing +taler_config.h.in +install-sh +config.log +config.status +stamp-h1 +taler_config.h +config.guess +config.sub +libtool +ltmain.sh +test-driver +m4/ +GPATH +GRTAGS +GTAGS +*.swp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7625aa98 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "doc/api"] + path = doc/api + url = git@git.taler.net:api diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..75e08df1 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +Sree Harsha Totakura +Florian Dold +Christian Grothoff +Benedikt Mueller diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..dba13ed2 --- /dev/null +++ b/COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 00000000..e69de29b diff --git a/INSTALL b/INSTALL new file mode 100644 index 00000000..20998407 --- /dev/null +++ b/INSTALL @@ -0,0 +1,370 @@ +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + + The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..ea5a667e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,3 @@ +AM_CPPFLAGS = -I$(top_srcdir)/src/include +SUBDIRS = src doc +ACLOCAL_AMFLAGS = -I m4 diff --git a/NEWS b/NEWS new file mode 100644 index 00000000..e69de29b diff --git a/README b/README new file mode 100644 index 00000000..e69de29b diff --git a/bootstrap b/bootstrap new file mode 100755 index 00000000..4e7cc053 --- /dev/null +++ b/bootstrap @@ -0,0 +1,2 @@ +#!/bin/sh +autoreconf -if diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..789df8e4 --- /dev/null +++ b/configure.ac @@ -0,0 +1,156 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.69]) +AC_INIT([taler-mint], [0.0.0], [taler-bug@gnunet.org]) +AC_CONFIG_SRCDIR([src/util/json.c]) +AC_CONFIG_HEADERS([taler_config.h]) +# support for non-recursive builds +AM_INIT_AUTOMAKE([subdir-objects]) + +# pretty build rules +AM_SILENT_RULES([yes]) + +AC_CONFIG_MACRO_DIR([m4]) + +LT_INIT + +# Checks for programs. +AC_PROG_CC + +CFLAGS="-Wall $CFLAGS" + +# Checks for header files. +AC_CHECK_HEADERS([stdint.h stdlib.h string.h unistd.h]) + +# Check for GNUnet's libgnunetutil. +libgnunetutil=0 +AC_MSG_CHECKING([for libgnunetutil]) +AC_ARG_WITH(gnunet, + [AS_HELP_STRING([--with-gnunet=PFX], [base of GNUnet installation])], + [AC_MSG_RESULT([given as $with_gnunet])], + [AC_MSG_RESULT(not given) + with_gnunet=yes]) +AS_CASE([$with_gnunet], + [yes], [], + [no], [AC_MSG_ERROR([--with-gnunet is required])], + [LDFLAGS="-L$with_gnunet/lib $LDFLAGS" + CPPFLAGS="-I$with_gnunet/include $CPPFLAGS"]) +AC_CHECK_HEADERS([gnunet/platform.h gnunet/gnunet_util_lib.h], + [AC_CHECK_LIB([gnunetutil], [GNUNET_SCHEDULER_run], libgnunetutil=1)], + [], [#ifdef HAVE_GNUNET_PLATFORM_H + #include + #endif]) +AS_IF([test $libgnunetutil != 1], + [AC_MSG_ERROR([[ +*** +*** You need libgnunetutil to build this program. +*** This library is part of GNUnet, available at +*** https://gnunet.org +*** ]])]) + + +# check for libmicrohttpd +microhttpd=0 +AC_MSG_CHECKING([for microhttpd]) +AC_ARG_WITH([microhttpd], + [AS_HELP_STRING([--with-microhttpd=PFX], [base of microhttpd installation])], + [AC_MSG_RESULT([given as $with_microhttpd])], + [AC_MSG_RESULT([not given]) + with_microhttpd=yes]) +AS_CASE([$with_microhttpd], + [yes], [], + [no], [AC_MSG_ERROR([--with-microhttpd is required])], + [LDFLAGS="-L$with_microhttpd/lib $LDFLAGS" + CPPFLAGS="-I$with_microhttpd/include $CPPFLAGS"]) +AC_CHECK_LIB(microhttpd,MHD_start_daemon, + [AC_CHECK_HEADER([microhttpd.h],[microhttpd=1])]) +AS_IF([test $microhttpd = 0], + [AC_MSG_ERROR([[ +*** +*** You need libmicrohttpd to build this program. +*** ]])]) + + +# check for libpq (postgresql) +AX_LIB_POSTGRESQL([9.3]) +AS_IF([test ! "$found_postgresql" = "yes"], + [AC_MSG_ERROR([[ +*** +*** You need postgresql / libpq to build this program. +*** ]])]) + + +# check for libjansson (Jansson JSON library) +jansson=0 +AC_MSG_CHECKING([for jansson]) +AC_ARG_WITH([jansson], + [AS_HELP_STRING([--with-jansson=PFX], [base of jansson installation])], + [AC_MSG_RESULT([given as $with_jansson])], + [AC_MSG_RESULT([not given]) + with_jansson=yes]) +AS_CASE([$with_jansson], + [yes], [], + [no], [AC_MSG_ERROR([--with-jansson is required])], + [LDFLAGS="-L$with_jansson/lib $LDFLAGS" + CPPFLAGS="-I$with_jansson/include $CPPFLAGS"]) +AC_CHECK_LIB(jansson,json_pack, + [AC_CHECK_HEADER([jansson.h],[jansson=1])]) +AS_IF([test $jansson = 0], + [AC_MSG_ERROR([[ +*** +*** You need libjansson to build this program. +*** ]])]) + +# check for libgnurl +LIBGNURL_CHECK_CONFIG([], [7.34.0], [gnurl=1], [gnurl=0]) +if test "$gnurl" = 1 +then + AM_CONDITIONAL(HAVE_LIBGNURL, true) + AC_DEFINE([HAVE_LIBGNURL],[1],[Have libgnurl]) +else + AM_CONDITIONAL(HAVE_LIBGNURL, false) +fi +AS_IF([test $gnurl = 0], + [AC_MSG_ERROR([[ +*** +*** You need libgnurl to build this program. +*** ]])]) + +# Require minimum libgcrypt version +need_libgcrypt_version=1.6.1 +AC_DEFINE_UNQUOTED([NEED_LIBGCRYPT_VERSION], ["$need_libgcrypt_version"], + [minimum version of libgcrypt required]) +AM_PATH_LIBGCRYPT([$need_libgcrypt_version]) + +# logging +extra_logging=0 +AC_ARG_ENABLE([logging], + AS_HELP_STRING([--enable-logging@<:@=value@:>@],[Enable logging calls. Possible values: yes,no,verbose ('yes' is the default)]), + [AS_IF([test "x$enableval" = "xyes"], [], + [test "x$enableval" = "xno"], [AC_DEFINE([GNUNET_CULL_LOGGING],[],[Define to cull all logging calls])], + [test "x$enableval" = "xverbose"], [extra_logging=1] + [test "x$enableval" = "xveryverbose"], [extra_logging=2]) + ], []) +AC_DEFINE_UNQUOTED([GNUNET_EXTRA_LOGGING],[$extra_logging],[1 if extra logging is enabled, 2 for very verbose extra logging, 0 otherwise]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_INTMAX_T +AC_TYPE_UINTMAX_T + +# Checks for library functions. +AC_CHECK_FUNCS([strdup]) + +AC_CONFIG_FILES([Makefile + doc/Makefile + src/Makefile + src/include/Makefile + src/util/Makefile + src/mint/Makefile + ]) +AC_OUTPUT diff --git a/contrib/mint-template/README b/contrib/mint-template/README new file mode 100644 index 00000000..fce5e018 --- /dev/null +++ b/contrib/mint-template/README @@ -0,0 +1 @@ +This directory is a template for the mint directory. diff --git a/contrib/mint-template/config/mint-common.conf b/contrib/mint-template/config/mint-common.conf new file mode 100644 index 00000000..becf4243 --- /dev/null +++ b/contrib/mint-template/config/mint-common.conf @@ -0,0 +1,6 @@ +[mint] +db = postgres:///taler +port = 4241 +master_pub = ... +refresh_security_parameter = 3 + diff --git a/contrib/mint-template/config/mint-keyup.conf b/contrib/mint-template/config/mint-keyup.conf new file mode 100644 index 00000000..1542d1a6 --- /dev/null +++ b/contrib/mint-template/config/mint-keyup.conf @@ -0,0 +1,79 @@ +[mint_keys] + +# how long is one signkey valid? +signkey_duration = 4 weeks + +# how long do we generate denomination and signing keys +# ahead of time? +lookahead_sign = 32 weeks 1 day + +# how long do we provide to clients denomination and signing keys +# ahead of time? +lookahead_provide = 4 weeks 1 day + +# what coin types do we have available? +coin_types = default_eur_ct_10 default_eur_5 default_eur_10 default_eur_1000 + + + +[mint_denom_duration_overlap] +default_eur_ct_10 = 5 minutes +default_eur_5 = 5 minutes +default_eur_10 = 5 minutes +default_eur_1000 = 5 minutes + + + +[mint_denom_value] +default_eur_ct_10 = EUR:0.10 +default_eur_5 = EUR:5 +default_eur_10 = EUR:10 +default_eur_1000 = EUR:1000 + + + +[mint_denom_duration_withdraw] +default_eur_ct_10 = 7 days +default_eur_5 = 7 days +default_eur_10 = 7 days +default_eur_1000 = 1 day + + + +[mint_denom_duration_spend] +default_eur_ct_10 = 30 days +default_eur_5 = 30 days +default_eur_10 = 30 days +default_eur_1000 = 30 day + + + +[mint_denom_fee_withdraw] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + +[mint_denom_fee_deposit] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_fee_refresh] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_kappa] +default_eur_ct_10 = 3 +default_eur_5 = 3 +default_eur_10 = 3 +default_eur_1000 = 5 + diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 00000000..8fd4c091 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,12 @@ +*.aux +*.dvi +*.log +*.pdf +*.out +*.snm +*.toc +*.vrb +*.nav +*/auto +api-sphinx/_build +api-sphinx/*.html diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 00000000..4af5c665 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = \ + paper/taler.tex + paper/ref.bib \ + paper/Makefile + diff --git a/doc/logos/ai/logotalerv2.ai b/doc/logos/ai/logotalerv2.ai new file mode 100644 index 00000000..d474079d --- /dev/null +++ b/doc/logos/ai/logotalerv2.ai @@ -0,0 +1,3474 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[5 0 R 248 0 R 489 0 R 730 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + logotalerv2 + + + + + Adobe Illustrator CS6 (Macintosh) + 2014-09-16T12:36:31+02:00 + 2014-09-18T11:52:58+02:00 + 2014-09-18T11:52:58+02:00 + + + + 256 + 192 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAwAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqkHn Lz35W8naZ+kdfvktYmqIIftTTMP2Yox8THffsO5AxV4lqP55fmf5v5jyLpUWi6QWMUer6gY2kZqh fh9T9yp5OoYBX41BJAxViV/5Y826oyt5w87zrLKob6pPctDGrcI2YKJGSIhGnUHgvVZBtxrgVJrn yn5NW48x2ei3VvNBc2trHpV5qFeSTGaJ7hlkeNaHgsg5UGx232CrI28syWOl2d95U8z3OixW0U1x eXsdxcMsscdsvFOCSUaQTW8hZBGPhkBPZcKo22/Pf81vImox6Z5yt7fW4CCSwaNLkKkjRN+9gqnJ WQ1WROXiRir3TyD+ank7zxal9Gu6XkahrjTpwI7mP5pU8l/ylJGKsuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsG/Nb80tO8iaRGwj+va9fkxaRpaVLSyHbmwX4vT UkVpuTsPZV4GnlTUNVv280/mTPLqGrXgKWNjs9vzV2UWy/Vnd+akf3SJxUtVyxDpir1Hy9+WWp30 cE2pXcuk2jxktp9okdvM3xzKpd46rCXhmpJHDRflsALVnej+QfJukqPqOk2yuNzO6CWUnxMj8nr9 OBKerFEiBFRVQbBQABiqUar5L8p6sjJqGk2txyFC5iUP9DqA4+g4q8y8/wD/ADj/ABan6l/ot3LN d8afVL2QyVVRskczfEPYPX5jDavnnUNH8w+Vdb+s2rT6Zq1hJUMKxyxN/Qg/Ij2xQ+nPyQ/O2Dzr anSNY4W/ma1QFwKKlyg29WMdiP21+kbdCr1rFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUv1zzDoWg 2Rvda1CDTrUbercyLGCfBeR+I+w3xV5Tr3/OVX5c2EjRaZDe6y42EsEQhh2/ypyj/cmKsXk/5zCI ciLygzJ2ZtQCn7hbN+vFUXp//OX2ku6/pPyzc20f7TW1zHcEfIOlvX78VeieVPz2/LLzLIlva6st leyEBbO/H1ZyT0Cs37pifBXJxVn4IIqOmKuxV2KuxVB6zq9ho2k3mrahJ6VlYwvcXEngkaljQdzt sO5xV8iwebtY8yeYtS82eYtHt7zTdYSQaUblDJ9UW0bjAsRhKXCJzkEbvGU5SGvKoIwK96/LnyC9 rOfNGuxV128QejAzNILSGlFjDPVjIV/vHO5NfE1BKUg/5yM8t2d1odnrJjv7q/tri2t4LW0SeWP0 DcpLdMyQq1CYUarNtQUG+IV2p3+teTvyj05vKz3c11LJDbQSSQPdyxIUdhyQglalAnJkNK0pWmKq HmHzHrHmLyL5R1WeyuYdRGs2T3KRwTKyD05BI7KAWSOp/b26VxVX/MLV/wAx7Tzl5XOjTXcOhNDE 0v1eD14pbgzFbiO7+AqqegV4s0qcdyvJgFxVOTq3nqf8z/qkd3c2/l+Kzs5fqz2iC1mnlE4uFS5a HmxSkLfDLsdqeCqZfmb+W9l5v0kvGqxa5bIfqdz0D9zDJ4q3Y/snfxBVfId4mr+Wddi1KyL2Wpaf PUA/C0csbUZHHzBVh9GFD7S/LTzzaedfKdprUAEcrjhdQVqY5V2dT9PT2wqyrFXYq7FXYq7FXYq7 FXYq7FXYq7FXin5w/wDORVj5Xnm0Dywseo+YEql1cNVre0b+U0/vJR/KDRe+9VxV87vZ+cfO2r/X tWubjU76c0V5KudzXjGg+FV8FUAe2BXp/lr/AJxs1y5jSW+WOzQ0NJ2q9P8AUQNT6aY2rMoP+ca9 LVBz1MBu4W3qPvMgxtUJqf8AzjTCyH6nfQyt2EsbRfipkxtXmPm/8kNf0ZWkltWWEdJk+OL/AIJa 0+mmKrPIv5vefPy8uI7OZm1PQVID6bcsTwUf8s8hqYj7br7d8VfV/knzz5d856KmraHcerCTxnha izQyUqY5UqeLD7j1BIwqn+KuxV5D/wA5Da2fqWg+U4b02V3r94GSQQrcKfqjI0aSozIoR53jqzVF AdiK4qlfljyvb3HnOy0WNIRp+jKdTvzayh4Jpmcrb0jiWKCMScfW4JGo6dTVmBV6j5xn1C38pa1P pt3Dp+oRWNw9pf3JVYLeVYmKTSlw6hI2+JiykUG4wJfJDfmr+eXJkk/MLRpFBoSs+lUPyrBhQqR/ mr+cITg/n3S+P8q3Ojgfcbc4qxq5/wCcg/zohuJ7eLzOJIonaPnHa6e6MVNCVZYOLLtsw6jGlT2y /OT83b60SVfPNjGDQqlzJpULU7Vje2qp9q40q9/zW/O4kFPP+j1HQtPpJp/yQxV7Z+QPmf8AMbWL W4bzXqVtrMTuz2moWrQMhjACFAbdY0PF1bt9OApYt/zkh5PitdYt9bt0CwauhjuaDYXMIFG8P3kf /EScIQlP/OLfmyXTfNN75amaltqA9eFSdhLH8LU/1gR92FX1ZirsVdirsVdirsVdirsVdirsVeKf 85FfnDN5XsF8saBP6fmHUY+VxcofitLZqiqntLJSi9wPi68Tirwz8svy01LzRqaRxoSCec0z14ot d3c/51wK+tPKPkbQfK9msNhCGueNJrxwPUc96fyr/kjAlkOKuxV2KrXjSRGSRQ6MKMrCoIPYg4q8 j/M/8mLDULSbUNFgCyqC01ko2I7mL3/yfu8MNq8D8seZvMH5Z+bI9VsKyWzER31kxIjuIa7o3+UO qN2PtUFQ+0vLvmDS/MOh2Wt6XL61hfRiWB+hodirDsysCrDsRhVMcVfOH51W0uqfnbo6TQxT6ZYW AhZJ51hj+sSpcTDkxDsmwQ1VSRSo3xVn/wCTmnRxL5hvPTWKZtQ+pFEkkmASyhSJR6kxMjUNd23y JS9BvLO1vbSezu4UuLS5jaG4t5VDxyRyAq6OrAhlZTQg4q82uf8AnHL8rJ53l/REMfMk8I4o1UV7 ABaAY2qn/wBC2flZ/wBWuP8A4CP/AJpxtXyZ5g8tW9p5m8w2donG1s9UvraBadI4bmSNRt4Bckh7 f+Rn5KeQ/Mnke01LVbFJrqRFLuVQmpHuDgJS9E/6Fs/Kz/q1x/8AAR/804LVlPk78t/LXlEt+hoj CjKV9IEBACeRooAA3xVJPz809Lr8tr2cir6fNb3Mfz9UQsf+AmbEK+YfId6+mfmdo1yhp/pQU08H BX+OSQ+60bkgbxFcVbxV2KuxV2KuxV2KuxV2KoHXdZstE0W+1i+bhaafBJcznvxiUsQK9zSgHjir 4WW61Xzt5yu9YvgZLzUrgysgq3EMaRxL34otFX2GBX2T5A8n2vlfy/BZIi/W5AHvZR1aSn2a+C9B 9/fAljmqf85E/k7pWqXmlX+vmK/0+eS1u4RZ3z8JoXMci8kgZTRlIqCRjSqSf85J/ku/2Nfkb5af qJ/7F8aVbL/zkv8AkpC3GXzC8bHcB7DUVNPpt8aVdH/zkn+TEq84tekkUdWXT9RI+8W+NKtb/nJb 8lU+15gdfnYaiP8AsXxpU88mfnF+XHnTVZdK8s6v9fv4YGupYfq11DSFHSNm5TxRr9qRRStd8Vea /n5+XsCE6vaRhYLsn1VA2Saldv8AW6/fhCEu/wCcVvOk1pq2oeSL2T9zOGvNMVj9mWPaeNf9dKPT /JPjhV9L4q+WP+ciPNHmLQPzHnstMuWs49RtrO8e4iLLKREJYAlQ3EpUE/ZrXvir1H/nHy5a58j3 E8knq3EmoTvO9KEu6RuTtQb8siUvTcVdirsVfIFzoBvNb8z3AWtdc1YVp4X0wySHs3/ONIp+W9kP BV/VkSl6zirsVYH+eU0cX5W64XNOa26KPFmuYgMQr5M0NTJ570lV3P1qI0Hsa4UPvS3/ALiP/VH6 sKqmKuxV2KuxV2KuxV2KuxV4/wD85Ta5Jp/5YGxiYq+sXsFo9OvppyuG3+cIB+eKvK/+cb/Lkd95 nhuZUqlmrXRB8Uoqfc7A4Cr6rwJeJ+YPy0/Me817Uruz8q/lvcWtxdTy29xqFhdPeSRvIzI9y6xl WmZTWQjq1cVQI/K381R08o/lcP8At3Xn/VPFXhf54+WvMemedbSy1zT9B026OmxTpbeWYZbezKNP Mgd0lCsZiUIY/wAoXwwhDLvyK8l+edY8q38+iaJ5N1O0g1GSBp/M1rcXF4riCFzHG0SsohpIGA/m LHviVein8rPzUPXyh+Vp/wC3def9U8CWcflb5J17QrrULvzBoPlLS7uRI4rG48rWklvI0ZLNOlw8 qKxUssZUL4GvbFWT+dtJTVfK2o2rLyb0mli8ecY5inzpTFXyFpF+3ln80NE1VTwS3voTMen7p39O YfTG7DCh9xYVfNX/ADl55fdLry95jjUmMiXT7l+wIPqwj6f3n3Yqjv8AnGDzJGy6hokjgNMi3Vup /mj+CQD3IKn6MBV79gS7FXYq+bNI1Cyhl80RSgeodd1ihPvfTZJDO/8AnGw1/Lm0I6UXIlL1jFXY q8k/P/UUurfQvKUcnGXVLsXN2RU+naWwPN3ChiFDMGrQ/ZOxxCvKtHn0rzd+dOnNokFv+jrMoxub aORPUbioPISpEwChOKjj798kh9cgUAHhirsVdirsVdirsVdirsVdir54/wCcwZWGl+V4duD3Ny58 aokYH/EzgVd/zi/Egj1CTbkIIwPGhap/ViVe+YEuxV2Kvl3/AJyP003v5s2wArw0K0/G8vP6YQhn n/OLVsbbybr8J2467L+NjZnAUvZsVdirTqrqVbdWBBHscVfDP5jLw1Esp4sCSCNiCMKH3hhViP5r eSo/OXkbUtFoPrTJ61g5/ZuIvij37An4T7E4q+O/InmTU/KvmaGfi0N9p85WWB6qQyEpJE/hUVU4 Ffa/lzzBp3mDRrbVtPfnb3C1p+0jD7SNToynY4EplirsVfFesa41r5l80wBqcdb1Xb53spySHvX/ ADjQa/lrZHxRf1ZEpetYqhdT1Ow0vT7jUdQmW3srVGlnmfYKqip/sHfFXzZf+bbrULrXPzIvY2ij 9P6tolsJza3cVpG4XnCxVl+PmVdlaodiFr9lihkv/OM3lK9kN95t1RSbu9laQOVCVZ6liFUBQKno NsKvoHFXYq7FXYq7FXYq7FXYq7FXhv8Azlvpkk/kbS9RQEix1FVlA6BJ4nXkf9mqj6cVY3/zjBqs a6jcWTGhnt24DxaNgaf8DywFX0bgS7FXYq8L/MzTEv8A84nRv2fL9kRX/mMvcIQyb8h7VbXTfNMC 9E11x/3LrLAUvTsVdiqF1W8Wy0y7u2NBbwvJX/VUnFXxVrlodc856dpMY5NfXcNsAP8Ai6VU7fPC h90YVdir5s/5yN/J6dbp/Ovl6DkW31e1jG5Kj+/UeNPtAfPFWB/lT+beo+Vb4UJuLCagu7Jmor9g 6nfi48foOBX1V5V85+XvNFkLrSLpZSADNbNRZoiezx1qPn0PY4Ep5ir89vPmoGHz95ujrSmtal+N 3JkkPq7/AJxl/wDJZ2H/ABjT9WRKXo3mLzPoPlywN9rN4lpBuEDGryN/JHGKu7eyjFXhfm384dSu 9WjvdS0s23lGGUxR2zshuw6ShTePEGYMEZeHFkKbleXMgg0hiei2Oqfmhr1tpljYwWXlzTJBxaKN k9VY5JPTkb1GdwAszcU5bVpvQYVfV+haLZaLpcGn2aBIYVoABSp7nFUfirsVdirsVdirsVdirsVd irGfzL8qDzZ5F1nQQB693bk2hbYC4iIkhJPYeoi19sVfIH5VeZ7ny55ntpnVkltpaSxNs23wSIQe hpUYFfa1nd295aQ3ds4kt50WSJx0KsKg4Eq2KuxV8+/nDqx0783uYbiX0CyH3Xl7hCGW/wDOPV39 b0PzNcVrz119/lp9kMBS9VxV2KvOvzq81Q6V5cOno4Fze7uK7iJTX/hmFPvxCvGP+cevLcvmT80G 1yWMvp+go1wzn7JnkBjgX5/akH+rkkPrXFXYqtkjSRGjkUMjCjKdwQcVfO/5tf8AOOHrzz655RKw zNWSfTqURm7lOI+EnFXhyal5k8samEu0uNPv7dvgkBaKRSO6OtPwOBXo+hf85IedLKNY5riDUEUB R9ci+IAf5cRiJPu1caViXmz8mb/Wdb1rVLTUTNquqSpqcVosMaQ89Rmjkki5md3AiF4vxOi1ofnh VnXkC9/MLy75cPlpNWsNHktrVp7doYxeXEsUUpheXYzIIlEcjM6qSApNOmClSjVLzQtN1S6vNdvp vMfmO2aezkiuf38sV1G7xBPq0p+xGQsgZiY2WqcQ1DhVNdI8n+evzNv63iPpPlzkGS1ZnkJVT8Hq ysAZWChV7A8QTVt8VfRXk7yZo/lbTFstPjANB6ktAGYgUqaYqn+KuxV2KuxV2KuxV2KuxV2KuxV2 KvlP/nI/8tJ/L3mI+ddJiP6J1SUHUFQbQXjdXP8Akzdf9aviMVZH+Rv5uWsdtHoerS8bZm/0adjt E7dVb/IY717H57AhXv4IIqNwehwJbxV8o/8AOT9+bT82LMg056Fa/heXeEIehf8AOJ9wbjyLrkx/ a12b8LK0GApe2YqlPmXzLpnl7TXvr5wAKiKIH4pG/lX+J7Yq+S/zB836x5u8w/VrVWur++lWGC2i BJJY8UjQYUPp/wDKP8vYPIvk630tuL6lOfrOqzruGuHABVT/ACxgBF+Ve5wqzTFXYq7FXYqx/wAy +Q/K/mOFo9Vskm5dX6HFXlet/wDOKnla4dn027ltSTUJ1A/HFUJcfkF56L1j81XI+wDIrBHPpMjR lnWjMUMScSTtQYquh/5xnvb2NINb8w3d3bJIZVt5JHdA7dWVGYqCfGmKs58rfkX5H0BklW3NzOm/ OQ7V8aDFXoMMEMEaxwoEjUUVRsAMVX4q7FXYq7FXYq7FXYq7FXYq7FXYq7FUNqmmafqunXGnajAl zY3cbRXEEgqrowoQcVfJH5ofkt5i/L+9k1jRBLqHlgkt6yjlLagn7FwB+yO0nTxoeoVOPy3/AD9v 9Lhjsb7/AEuyWgWKRqOg/wCK3329jt8saV7lon5peS9WjUx362srdYrn93T/AGZ+D/hsFJfL/wDz l5qVtJ+Z+mTW0yTRHRIB6kbB1qLu62qtcIQ9G/5xI8w6NYflnqz6hfQ2zNrc7BJHVWK/VLUVC/aP TsMSlnPmr89PLumxOmlj63OAaTSVSIe9DR2/DBSvA/MfnjzT531tLKwWbUdRum9OCGIV28FUbKo6 k9B1OFD3j8lfyPg8nKNc1wrd+aJ0K7UeK0VuqxHvIw2d/oG1SxV63irsVdirsVUJr2CGT025s9Ax WOOSQgEkAngrUrQ4qs/Sdt/JP/0jz/8ANGKu/Sdt/JP/ANI8/wDzRirv0nbfyT/9I8//ADRirv0n bfyT/wDSPP8A80Yq79J238k//SPP/wA0Yq79J238k/8A0jz/APNGKuXUrUsqkSpyIUF4ZUWrGgHJ lA3OKorFXYq7FXYq7FXYq7FXYq7FXYq7FXYq0yqylWAKkUIO4IOKvJPPX/ONXknzDLJe6QzeXtSc lma2UPbOx7tbkqF/55svyOKvJtU/5x8/ODRXY6b9X1i3WpRradY34jxSf0t/ZScVSZ/Kf5z2zenJ 5b1Bm8Y4mkHh9pOQxVEWv5c/nfqhCxaDcQq1KtcPFbgA+Pquh/DArMPLv/OLPmS/kWbzbrUdrAd2 tbGs0pHgZHCxofkr4Ve5+TPy88o+TbM22g2CW7uAJ7pv3lxLT/fkrfERXfiPhHYYqyPFXYqw/wA2 +b/N2nawmmeWvKx8xOlsLu9kN9FYrEru6RIvqo/N3MT+A264qi/IXnzS/OOlTXVrDNY31jO9nqul XahLm0uY/tRyKPvVhsR71AVZLiqFj/46tx/xgg/4nLiqKxVak0Lu6I6s8dBIoIJUncVHbFWoZ4J0 LwSLKgZ4yyMGAeNijrUd1dSpHYimKvKfLsn5uyfm9rUd9c6HHp0dlpb3sMUd7K4s2nvzAsBaSNRO SriV2Xj9khdiMVes4q87/wCcgLu6s/yp1S7tJWguYLrS5IZoyVZWXVLYggjFWdan/vMn/Ge3/wCT 6YqisVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSa1/5TLVP+2dp/8Ayfvc VYNp/o6L/wA5D69DGyw2et+WrfV9QJPFBPZXRtfUYn4R+6bc4qyny/L5f1LzJe69Za8uqyXcEcNj aRTAwQWsdC7RRqxDmWU8mlpuOKjYbqovzJc3Nrpuv3NqxS6g0tpIHUVIkRZ2Ugb7gjFWC+WPLOkL +T2j+ZrSD6v5lXQItSbWYdr2a6lsfUlaafeSb1HY8lcnt3Aoqhvy68s69ceSfJt3Y2+kWVs1vpOo T6ohl/SMjMsM95zfgFZ7kmRHq2/I4qxfyP5Y0ZP+cfdS85mASeaLSLW9Ts9YkJe6gmsru5kjEMrV eNGeHk6qaMS3IGpxVGfn3LLFp35lNG7IzaR5VRipIJWTWLxHU07MrEEdxirNYvJHkx/zCuNFbRLC 30i30q2vbfSorWGO2uriW4uIppZokVUmNskUQTmDw9UkbnFXjXmcJDB+demW11Jc6fpt35VtbCN5 GkEEYv8AmbeMkmixSOyBe1KYq+o9T/3mT/jPb/8AJ9MVSyTzLbWms6zFqd/p9ppel2tncPI83CWH 6w06u90ZOMUcbekoj3rs1e2KrtM88eStVjuZdL1/Tb+KzjMt5JbXcEywxjq8rI7BF92xVQ8rfoi5 vtU1ey1j9LS6m8cnESco7e3RfThjiiqeCHiz8qfGxJ6UoqyLFXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYqxK+80+WtE87Xses6raaY1zplnJB9cnjgDrDPd+oVMjLXj6i1+eKvG/OX1nzh 5f8AzP8AzDsY5W0ltJj0Ly5NxZWuLO1l9e8uFBofSeUnie4BxV69baZPc67oV/c+Zra6skkmvNF0 63t4ofVja2kiokiyOzxxxXHLYUrxOKsmmE0d5LKLdriOaKOMhCmxRnJ5B2TrzxVIdM8m+XdLnhks tFuo47Zme0s2umktIGcEMYLSS5a3hNHYD00FATTqcVWaZ5H8s6ZcQzWOiXcUdrIZrSy+ts9lBIa/ HBZvctbRMORoUjFKmnXFUVHonl+w8tXOgLorW/l+4W5S4s2eERFL53edatNsJHmbYHatBTFUFN5P 8o6pBrX1jRptQh8wmIas0t164lFu5eFFZrlvSWJ2LIkXEKegxVNNa0ix1r0DfaZd+tbFjbXNtcfV LiPnQOEntriKVVfiOShqN3xVKB+XXkoWd7aR+WpIoNS+qfXhFMI2lawnNzbO7pcK5dJmLl68mP2i cVZBHBKLWGyitrhI45I29W5mEzUSUSHlI0ssrdNq1+7FXnt75aHmT8wfPuleuluzWvle5jlkiFxH 6lldXV0iyQlk9RGaEK68hUE74qx7849S8y2Ply/8uX+oadqVpNZpqM62Fm9nJbJYavpqyeqpuboG N4bmQtVRQIeorir0rSNJvF822+oal5ih1O7TT7hLOxht44P9HuZrd2mJWSRnUNAqqem5xVluKuxV 2KuxV2KuxV2KuxV2KuxV2KuxVRu722tER7h+IkdY4wAWZnboFVQWO1SdtgCTsDiqsCCAQag7gjFX Yq7FXYq7FUq1ryn5W114X1zRrHVXt6/V2vbaG4MddzwMqtxrTtiqZRwQxwrBHGqQooRIlAChQKBQ o2pTtiqX6T5W8saPPNcaTpFlp1xcbTzWlvFA8gry+No1UtvvvirH9W8p+crvzwNXtPMUllov1L6u lpGsbNDNzBLLHLFLHJ6ndiVZaUFQdlUd/hrzV/1N97/0i6f/ANk+Ku/w15q/6m+9/wCkXT/+yfFV ax0nWLC7S61DV7jWYEVgsUkFuhidqD1VFvHGzHjVe/XFW7/S9Y1G8Nzp+rXOjwcFQqkEDGVlLEsy 3McjLSoA6V+VMVUP8Neav+pvvf8ApF0//snxV3+GvNX/AFN97/0i6f8A9k+KpfaeTvN8Pniy1qfz NPdaVb2kkNzaSLEn1h3aqK0MUUcarH9r1Klz9nYdVWU3ei6PeC6F1YwTi+jSG99SJG9aKMsUjlqP jRS7UVttz44qgdH8k+TNFeZ9G0DTtMe5T0rhrO0ggMkZ34OY0XkvscVROj+W/LuiLKujaXaaYs5D TCzgitw5HQt6aryO/fFUxxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsV8+NcTLpemx29u63V0JTc3QnZ I3tB9YjVUtyjyPI0dOHMBl5V5CqlVk1q0z20LzKiTMimRI2LorEbhXITkoPQ8RXwxVUxV2KuxV2K vmLVf+c0Y9P1S8sD5aMhtJ5IDIJwAxjcpWlDStMVQv8A0O/F/wBSw3/SQP8AmnFXf9Dvxf8AUsN/ 0kD/AJpxV3/Q78X/AFLDf9JA/wCacVd/0O/F/wBSw3/SQP8AmnFXf9Dvxf8AUsN/0kD/AJpxV3/Q 78X/AFLDf9JA/wCacVd/0O/F/wBSw3/SQP8AmnFXf9Dvxf8AUsN/0kD/AJpxV3/Q78X/AFLDf9JA /wCacVd/0O/F/wBSw3/SQP8AmnFXf9Dvxf8AUsN/0kD/AJpxV3/Q78X/AFLDf9JA/wCacVd/0O/F /wBSw3/SQP8AmnFXpf5I/n0v5n6hqloulHThpsMcpYyepz9VitOgpTjir1zFXYq7FXYq7FXYq7FX Yq7FXYq7FWHefdU1OzlRYbu5s7RLG9ulFmsXr3d1bhGhtI3ljnCsylmVVTk9NtlYFVkmjG7OnRC7 m+sTKXX6xRVMqK5VJCEotXQBjxFPDbFUbirsVdirsVfmP5gsry986apaWUElzdz6hcJBbwo0kjsZ moqIoLMT4DFULrXlvzFoUqQ63pd5pc0gJjjvYJbdmA6kCVVJxVLcVRmlKpvPiVXCxTOFYBhySF2W oNQaEYqrfX5v99wf9I8H/NGKu+vzf77g/wCkeD/mjFXfX5v99wf9I8H/ADRirOfy1/LbzT55e+ls LOA2Flb3TNccLGKt1HayS28I9bhUPKqK5GyqakjrirFNatdV0XVbnStRhtEvbR/TuEiSznVWoCR6 kIkjald6NsduuKoH6/N/vuD/AKR4P+aMVZR590AeWrjREgeKePV9F07V/jtrfkj3kAeSPaMVAkDc fanzxViGqKq3nwqFDRwuQoCjk8Ss1ANhucVQmKuxV9Nf84P/APHf81f8wlt/ycfFX11irsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdir84LK8u7H8ytZvbOZ7e7tTrU1vPGSrxyR21yyOrDcFWF QcVZd+VXmLV/PdnrP5beZLubVotTsrm88vSXbmaW11SziaeNopJCXVZERw6g7/SaqvMdF0/SLm21 O51O++qLZ2xezgRQ8tzcswSKJQSOK7l3fso8SMVQ+k/71t/xguP+TD4qzGTyx5Z0fyh5d13Wlvb6 bzGbqSGCzmitlt4LSc2xLNJDcmV3dWIHwgDxriqbw/lrpx8q2er6bbXnmKXWLu/isDC6Waw2dg8U fqyq6ykyymcUXlRaH7WKo26/LjyXoXkrV9e15r24ntdVsLK1srWWKOX/AEnTjeSW8kxSaNXQy8Xf 0m3joFHLZVB+XNF07TvMP1vS3mbTNZ8p67f2aXJVpowNOv7aSOR0CK5Sa2cBgoqKGg6YqiPN35ce T9J/MC48iWQvxd2kUVxda7c3ULW6QrYrf3U31NLVXpHDzovr9uuKobyl5F8jebrDzNc6ZNqOny+W tIvdU+r3UkE5u1t4mMTq0cUQhpLx5xnnsdn2xVT/ADt/3p8lf+Afon/Jg4qwZtI1LVNRkhsIGnkt 7EXc4Wg4QW1oJppCSQKKiE+/Qb4qk+Kproun6Rc22p3Op331RbO2L2cCKHlublmCRRKCRxXcu79l HiRir6F/5wf/AOO/5q/5hLb/AJOPir66xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV+b Q/5T/wAwf6muf9Ql1irIf+cck+rfmUnmCXaw8tafqGq38m1FijtZIxWu28kqjFUyu/IXlWzPlSwu ZNMtNN1DTdN1HWtRvrtodQ5ahGJZngTmF4QJJSNfTIYr8XI4q8q0n/etv+MFx/yYfFWZHzN5Y1jy foGg6617YzeXDdJbXFjBFdLPBdz/AFgq6yzW3pukjNRhyBB6bbqr280eUtW8oWHlrVhf6bHol5eX Gk3drHDfM0F8Yy8NwjyWI5oYVIkVt9/gGKqN95x0Q/l7e+UNPtbmKN9dh1azmndJD6EdnLbMspUJ 8ZZlYcVp1HbdVFaL528v21haG7S7F7pnlzUtCtIoo43imn1KXUCZJJGkRo0jTUF6IxYg9OuKqvm3 8z7XVvzVuPOtpZP9Uu4Ybe606cgF4W05LC8i5py2kT1FVvAgkdsVRflHz15F8oad5mtdNh1HUZ/M uk3mlm6uY4bc2i3ELBEVI5phNWUpzkJT4V2SppiqR/mD5q0fzImgTWbXKXGlaNp2kSwTQxolbK3C SSLKs0hblJXjVF+H3xVvyTo+m6pruspfwidLTyzqN5ArEgLPb6UzxPsRujbj3xVkI8t6HfafpNh5 W8v+XtUvbyxsl+uXmtumoS6hPbxmeNbL6/aqrrcu8aJ6R5UHWuKq135C8q2Z8qWFzJplppuoabpu o61qN9dtDqHLUIxLM8CcwvCBJKRr6ZDFfi5HFWcf84P/APHf81f8wlt/ycfFX11irsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdir81zrlvof5lX2p3NiupWkN/eJdae7tEs8MzSRSxmRasvJHIq OmKpp5g/M/SW8uXflvyZ5bj8q6VqjI+st9alv7u6ER5RxNcSqhSJTvwVdz361VQd7580bVrLSjru htfavotjFptncx3ZhtpYLYFbf61biJ3kManjWOaPkAK4ql35eeXbXzH5z0rRbrVo9EgvZhG2pSkg JsTRSKDm/wBlKkCp64qyfU/JENrqV3aj8xtIhEE0kQhuJtXEycHK8ZKWAHMUo1O+KoX/AAjF/wCX L0P/AJHax/2Q4q7/AAjF/wCXL0P/AJHax/2Q4qkiXVxJrf6HN2YYjcG1OpNNc0RQ/D13ozfAv22o nTFU7/wjF/5cvQ/+R2sf9kOKu/wjF/5cvQ/+R2sf9kOKpl5c/L+31PXtP0+T8xdKnju50heK0m1U zkO1D6YksQnIdfiIHiR1xVIDqUfkbzj5js7W7h8wwyWmpaMNRhdljlW9t3t/XViGqU51I3BIoGpR sVb8mebPJHlu+07V5PL9/qOuaZNFd287anHDa/WIHEkbfV1s2k4q6iqmbf2xV17580bVrLSjruht favotjFptncx3ZhtpYLYFbf61biJ3kManjWOaPkAK4q9m/5wf/47/mr/AJhLb/k4+KvrrFXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX55+Zfya/NafzHqs8PlPVJIZby4eKRbWQqytKxUg06 EYqln/KlPzc/6lDVf+kWX+mKu/5Up+bn/Uoar/0iy/0xV3/KlPzc/wCpQ1X/AKRZf6Yq7/lSn5uf 9Shqv/SLL/TFXf8AKlPzc/6lDVf+kWX+mKu/5Up+bn/Uoar/ANIsv9MVRB/KL85jD6R8qatxoFr9 UfkVHRC/HkV/ya0xVD/8qU/Nz/qUNV/6RZf6Yq7/AJUp+bn/AFKGq/8ASLL/AExV3/KlPzc/6lDV f+kWX+mKu/5Up+bn/Uoar/0iy/0xV3/KlPzc/wCpQ1X/AKRZf6Yq7/lSn5uf9Shqv/SLL/TFX0F/ ziF5E85eWda8xy+YNFvNKiuba3SB7uFog7LI5YLyArSuKvp3FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FX//2Q== + + + + + + uuid:AF0436EA903B11DB90DFD5CCDBF73423 + xmp.did:0180117407206811822AA5DFA83DBEE8 + uuid:a78d6ca4-ee25-5f4f-9857-efe87b47a9ff + proof:pdf + + uuid:d0c80ddf-8d24-9c4a-b5a2-f5403c78eac7 + xmp.did:F87F11740720681183D1ECDDA24ACDE7 + uuid:AF0436EA903B11DB90DFD5CCDBF73423 + proof:pdf + + + + + saved + xmp.iid:0380117407206811822AABA902D116C4 + 2014-09-11T14:30:24+02:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:0180117407206811822AA5DFA83DBEE8 + 2014-09-16T12:36:28+02:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Video + Document + + + 1 + True + False + + 1920.000000 + 1080.000000 + Pixels + + + + + OldNewspaperTypes + OldNewspaperTypes + Regular + TrueType + 1.0 2007-02-14 + False + OldNewspaperTypes.ttf + + + Perpetua + Perpetua + Regular + Open Type + Version 1.76 + False + Perpetua.ttf + + + SmothBight + Smoth Bight + Regular + Open Type + Version 1.00 (Kustren) + False + Smoth-Bight - Por Kustren.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Groupe de nuances par défaut + 0 + + + + Blanc + RGB + PROCESS + 255 + 255 + 255 + + + Noir + RGB + PROCESS + 0 + 0 + 0 + + + Rouge RVB + RGB + PROCESS + 255 + 0 + 0 + + + Jaune RVB + RGB + PROCESS + 255 + 255 + 0 + + + Vert RVB + RGB + PROCESS + 0 + 255 + 0 + + + Cyan RVB + RGB + PROCESS + 0 + 255 + 255 + + + Bleu RVB + RGB + PROCESS + 0 + 0 + 255 + + + Magenta RVB + RGB + PROCESS + 255 + 0 + 255 + + + R=193 V=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 V=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 V=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 V=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 V=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 V=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 V=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 V=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 V=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 V=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 V=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 V=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 V=69 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 V=71 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 V=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 V=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 V=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 V=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 V=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 V=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 V=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 V=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 V=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 V=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 V=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 V=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 V=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 V=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 V=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 V=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 V=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 V=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Gris + 1 + + + + R=0 V=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 V=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 V=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 V=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 V=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 V=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 V=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 V=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 V=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 V=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 V=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Groupe de couleurs pour films et vidéos + 1 + + + + R=123 V=112 B=49 + RGB + PROCESS + 123 + 112 + 49 + + + R=199 V=163 B=21 + RGB + PROCESS + 199 + 163 + 21 + + + R=182 V=165 B=85 + RGB + PROCESS + 182 + 165 + 85 + + + R=235 V=208 B=101 + RGB + PROCESS + 235 + 208 + 101 + + + R=122 V=111 B=185 + RGB + PROCESS + 122 + 111 + 185 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1920.0 1080.0]/Type/Page>> endobj 8 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text/ImageC/ImageI]/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 14400.0 14400.0]/Type/Page>> endobj 772 0 obj <>stream +H‰Ô—[o%W…ßûWìÇÉÃiïûå‘q†A`KŒ…Ã\‚ì‰Ï·ªût·í&y +²äsNuWíº¬ZUûê7×îê××Þ½üôÚMW×7Þ]߸`îæúó)ΡG÷-Ï>ãÙ»‡©ù1æà««-¶¹ÇîN5eSš[Ëî›7ÓËéëÉ»³¿ü?-<û½û`O?“½ {W?¿÷îÓ¯¦ßò÷õTKäDß]Ë%Ï%5w¥äç’›«5¦yøàZDâ“œÉcεí’óô\v7ÕÞ +_²:Z{:¿.`é©èn•ÖçQÛ,×6fŸÃÁ§‹äèÓE†©-šMs‹x³þ,/ç5—ä1*1–y¤2B +Îów: +Öcqñb —–£;ßO/_»«›÷Þ=¼w¯^»¥ +?¨za©žaçüàüLfìÒÿÒœ{8£æ·ðe¤8!W,¨!?ôPÿOÁ‡9ñôÔy ‚žæLë—¸KÎÓ)ö<·Ôo¥Jaj:ºH¼.?–§ÍmžX›¥Õ•‹ÄoÚÞŒ¾]³öîinâÙ£Í!¨5Ì!» ®7>ž^Ô“Ôyn滪oº5?.ú>$`Dâ®~ql TºôȽ¼¸)¹Wͽ”ËwùVÍ7=\5Wçí£sáG:—/z/owpÙŸêêöVhº};ånR>j-uæðLãØ·˜ÜíýôâÖ}áîÜ÷ûäöoÓ«ÛpåY)ËÁ•W7Â↟{(Ãå4—ê_å#fš û’H}CQ gõ{Y}“K¬× +ˆüÌŽÚ«t3•Yc~XuK!4†`R_ò­M7²FÍMž5ïðÒ¡CžFázQZ‹f\VB #.ºy¬©úÕªRÄS š)>¶k3ÝÂÆ‚nísÝ"|tÓýrM‹Ev'RésDEÔ -¯¶B3ÕÄíqïe^¢Eq9p> uAa) +χ!LØzDÍ[HKÀ߬èH!ÖG0Ižõ¦Æ_÷À$#‰shЭ•yÇ* ++´Ÿð 1CÉ*Ž-<Ê5ø&]aÏ5/ù,Í1‚èc€)¡º…MCƒ¾bÀÔ¢pЭT¶kƒ hmGQ0…ãÄCД&‘2ºt@Èí7…êq(n£'Ûè6Äô1]?…)+DÔx†&ÛXÚã•%¾ð¤„1EÓ ¦*Lƒªž53²4‰ +Ø팦4>¢/šc,kå ¬yÚ3¶EzÊ{Õ„ñMõÅÄIäâíØØiEÀ6æÞº-p]Í NÏ+N¡±!:HF ,RC,)Ö!§U]·¾aËßW¤Í €:VÀÖ ¨­gí˜Í¾+WtHÉu<jŽšŽ˜×ø8ñ%Û’öbTÅ£¶¹¬“ Kþ¥õZ0Eg‹A ã] ª),2I¶‘±Û„ëà È:š9QuƒÅÕÚIa¡B^‚”›òÚaÖÚ`X›™Ã;*-΃¥¹nmšwº½?íM!Œ´'œá¢ ¬U‡iwù4Â:Ü„v'ÉÞ5ÖÓèQ•Ô¤†^”aÍ»:hŠ¨Î<™þ¬×IgvúÌ´·ÎZ¯…„0[È6j›è”žf Òõ-¨ É}ÓÆ:úÚ¡—1`;g v7Ð’ÐÔ©¶NÔA(A•ë_d°¸8-K‚·Û=‚zœƒaŠ¦üÐÖ£¢,¨ÀûÑøÒÄÌ@¦‚<‰Ë@µq[‘uÐ? H‰G÷¿ÐDŸ+ꇪƶŒì,^eÁ’v±Ü£Üa?–”ýSÊâAZ—‹Aô¤ñ™(›Ò šQjÅJää帻m¬dL)xc0‘ÜÆÅì(#yÑøP ›¦"䌻iœ§g¢»É&4ƒë¨G’"=x0½Kdê©ìî(Kê¥uþ/ÖAÊÐØß\XG¯V‘,]‚ÙÔ¶x7ÓO³"Kà°iÇ”¬Ãz÷GY‚/jXækŽ$lïý‘S‹à‘S‹ÈR…¥‘éa©?²½IVÌÔÙÝ#ÀÈî`w»`µŸuâ·ß¾½ŸÞªÒ/3 wíÆ’ôÃnóò´˜IææérÈÅ«ÓâF:ÌOÝ WG·WN›g›™£h=æ´»{zì¯7o oì5Qp;†Àü§|BÐÌ­{ Þ4°¯tV]Zƒ.yý¬Ûïót‚ÔPÞ߀³z +»õ··w—ïöH¯.ªlÖËO^_Î^û‹š7[ï­)@#Ëê»IKuxÖZìÁvÕä’ª›Âw¶ÖË¥µÂǵË ¶ëIbeúßuh¨ÿÒO?¸—5Ô%Ëm–oý±[Vü †BÃ¥×T=i»£¥ªKäO¨ïT›#p+eÕýŽ ·nú¸¨¦ºjœÆO±Ã“ÎœóÈkÒˆÿkã9{ºU7Õ$2b!¾?ÈþÃx•#¹ÃÀܯبxƒŒ]ý GÚÿ§n„@ʪr¢Õö1Ø  înÑSeaùEy@I,!+ðŒ±rDhÝ…÷PïØ#ðoÈV +ÞÙ9À×ö XçϜǽƒÞÃû +ym$æµ1øò¹¥ŸÚ½¿Õæ"dùJá~ª#w2J Ý+ºn»éní)û¿|ÑÏÊŸ Ù×PÑDoO¨$‰’ üälOps–f“¥n•÷—òBÐHe²xœáWu°ÓmDÕþѧôå.ïÅnWMe#É­µcÿx¿=˜OA…A’éÃ`®UÓ4Š€çTú O¦I›ZÑóĶù8|˜ƒ%ý]2(.¾%.¾ßÆc¥×Š)ˆåÛ¼âh6óÀ%áXhV‹²XµÑÇ(`œW1G\Ùei”_¿~áÏ_yòZ endstream endobj 773 0 obj <> endobj 779 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +486 0 0 480 6513.1162109 7207.1401367 cm +/Im0 Do +Q + endstream endobj 780 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +398 0 0 398 6557.1162109 7246.1401367 cm +/Im0 Do +Q + endstream endobj 781 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +268 0 0 44 6625.1162109 7475.1401367 cm +/Im0 Do +Q + endstream endobj 782 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +274 0 0 303 6622.1162109 7246.1401367 cm +/Im0 Do +Q + endstream endobj 783 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +296 0 0 91 6647.5 7516.5 cm +/Im0 Do +Q + endstream endobj 784 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +472 0 0 526 6485.5 7240.5 cm +/Im0 Do +Q + endstream endobj 785 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +513 0 0 502 6522.5 7180.5 cm +/Im0 Do +Q + endstream endobj 763 0 obj <>stream +H‰ìÖgNÃ@@á·u÷ÞûŸadæ"¯xßVzÍìjKuûW¨öŠWëŸó¬’Õú¾ëÚ¶i꺪ë¦iÛ®ë¥öS¦Ú]©ª,‹"ϳ,M“4Ͳ>stream +H‰ì×g{ÚJ€áóc6'9±Ç L½w„ +jH!Tèäßïˆ2#³WâuÚîû\þd›‘t3þú ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ èõ}ù? ì^ؽ>°{}`÷úÀîõÝëûsí¶çýô3ø½ìÄf×z~p›Ÿêø»?xþÑûýÊ÷ÑÓÿx“³ýv/^ïzµk‰Z욣f(×uP6ʲ¦$Ëvf‹åêÈàåò~»˜Ï{÷iÓÜÚòôv]ï ÞÁö‡õN 0Æ·)ÿ»£Óþêv8ž‹ë‘XÞõL c<麆RÕáPQd”$‰¢ <Ïq,Ë0ý>MÓ½^¦û Ë‹²fXîŽïTþäêWœ3«²À±Þ½ý}†aYŽãùÁ@DQ’¼*Êp¨ªÞIèúh46Œ‰GmyȮ绣Ý{ôü‘vÛÍzõ+$¥’$ +žc™>ÝëvÚ­f£^«VÊ¥b!ŸËfÒ•J&â±ès$>yŽÆ“T®ÒbåñÔÓ;¯'óg‰äL]ê7JY*G£àAÐ(±x"™¢¨t&›ËŠ¥r¥Z«7š­v§Ûó¾Ž"BU†ÈSÿŠåjµÙþ»íz9w,$õýPáðÓcèáþîöæóõ§«Ë‹‹ÿ|xÿ÷;Ôû.®nÂÏ *›opÚÔ™/Nïsÿý·XÌì‰Ò¯R©D,Ý^_~üðîÝ¿ÞýýþÃ?/..¯>]¾¹½»=>í¾”ïæ4§öl±÷{S»Ÿ7íÞ`Öy˜¡ºÆHœÊ•«µjÊ+ÏŸ®'ë—GGç©D4S®ÕªÅL*ö†y|-U`æ¡5ã8ñÞÚî›×;cüM+Ãph¥SuÃ4u±Q¬ÔÞŸ>Yü«ÿÜjL‘JúCô CCËÏ2ß´Ú!¨_¼Þýç¾ÿ‰ëÎæ ï›F­SkôTM¼“g²Oofb#MÕ{µ?Ì-€3÷-Ÿ®¿Êî¿lmÒíŽd8§»ŸÞ M;¶)*óŸ±Sþ£ì¾¬4šæFöl·à} OÏ1•n>×w~ÊKÆŸe÷ÅaXÆ{ZøwÐ~=Û›…‚ºú)'óVv?!ït‚àÙ¡ FÞ=üï ¶!5Ê•É[î þ'òìVŠÌ£-Þþ‘ßÚˆž5–Õ†õ‡ÍŠßÎNÓ$ÙùäL¿žeÈíf{ +óî¬Ý=kŽÃr\Ëy=ËÒ]îÙó<;×15ÓFtDnâ׳&šÀÊÚ +ìNC›ÅÜ1¦Þ´Ãrcâӳм”ôÉl v'y¯%›ÕÜvÑþÄÂr^XÍFÓ@/‹Ø´ÛSm—h_ìÚ>¹±_Ïòôf« ܳ§í7¤Þ êÎî 7‰ÞÔ²w¶ØÂ嬽Ýf½œ»‘é#ŸzÏ—«?m×ÿãÛÛyKžƒVµ£œ®éDÏD[¿Åz vçÞ"wv,ç…õ&Èn¹»@ÄÎ6}rª_Ï´‘Ý°;ïh·œ!;,§U¢v_‰ØY“1–*C¢7žXîì‚ìÖ wjŒ°œ"+Do„^:k° „휩¡c9/¬§ïìàYè°GAvæØ''ùõƦ=»`;ï1;Ò°œ$JDO!»Ø"v]År¢ =UŸX3° v´›Y†6ÄrÂ@ zC͘‚Ý ì–³©¡)XnÀˆž‚ìÜÃïWŸîoÕq{çNÇ*‘ã9Þ§§ŽMì‚ìÐcv4”±ÇrDOŽLgvˆ®HXŽeX¢')úÄ>lŽõéþV·ÆöD“E,Çô¢'Êšv/t°›Û†& X®O÷‰ž€ì¬9Ø:ÚY†* °Ý£‰Þ@RÇÓù +ìÎ;Øͦã¡Èc¹^·Gôxq8B<°;ÛÃrÝN—èq‚¢›`ì`皺<`±\§Ý!zì@ÖLìííVŽ©É<ƒåÚ­6ÑcxY›8`èh7Ñ$®åZÍÑës’j€]°ƒm¨"Kc¹f£IôhVöìÎÃvCéa¹F½AôzŒ ŒÁ.ØÁÎ+ƒ~ËÕku¢×íä‘vvÓ‘ÌÓ,W«Öˆ^‡æe} +vövË©.s½6–«VªD¯Ýã$mº»óv¦&±Ý–«”+D¯ÕeEÍ»@ØNd:M,W.•‰^³Ãª¹Ø‚ÝY»‰*ôÛ ,W*–ˆ^£Ý '`ho·0†ºUÇrÅB‘èÕ[4¯`èh§ð½f Ëò¢Wkö8ì‚í趋±ÌuU,—Ïå‰^µÑeåñìÎ;Ød¶S¯`¹\6Gô*õ#À.ÐÁN—˜v­Œå²™,Ñ+×Ú}Q»@G;±ßª–°\&!z¥j‹4° ´·›kݬ±\šJ½b¥Ùh3°;ïh7è5Ê,ç…õ +åF—»`G;¾[/å‰\ʧ—/Õ;œ:Û€ÝYG;®S+æ°\*™"z¹b­Í‚]°½ÝLeÛÕBË%I¢—-T[ÌлóŽvL«’Ï`¹D½X2Sl€]°½-5ŠéDË=†‰^4‘.ÔEkvgíê*þŒåB!¢÷§ò5° v°ky*Ár÷D/£rUa +vça»\*Jäîïî}zÑTì^hg·²„j6ùÆrw·wD/üœÌT`Ûe‘',w{sKôž"‰4ؽÐÞn:¨¤ãáG,wóù†è=†ãT™7—`w¶£bá–û|ý™è…Â1°{©ƒ_¦¢OXîúÓ5Ñ{xŠ¦Jœ¹Ü‚ÝiØ.õüxå>]}"z÷ÏI°{¡ÝÒäJÉHèË]]^½»P$Qd' °; Û%·Xîòâ’èÝ>„ã`÷BÝvi²ÅxøþËý›ýºnN%k8\ïn®oww÷Áâî I¸qèýö/™>Ì0Ù­ÊßýûOêÓÍzákì\¢0°Ë¥¢!"çÓ ESY´ih÷xµÓÈ&#Aóz¼D/IfêÛh7ØeáÈyÜ¢'Òh'ÒÈîr»žŽ‡ü çv¹‰ž?§k[}´DìbAȹœ.¢ç ÆÐN¬w»­ 9§Ã9¦ˆÒÕÍóþ+Úñ#v?r»ƒèQþÚ‰5´ë_lVé°Ï rv›èy}áTeãwí»å9›ÕFô¼ ?bçs;@Îd4=‡Û‡vbìºkL‚rÙAÎh0=»‹Š3«g÷h'hÌÎi9ƒÞ@ôlN´µ{yè®2q¯Ã +rzžèYÞXiåí„ÙÙ- §ÓꈞŎv¢ íîÏVJ1Í rZ–è™mžhqùäîù íxÙYM §QkˆžÉŠv¢ìN—‹Q·Årj•šè-îHa©ƒvÂÆìÌS)UDÏ`F;ÑX»ç»“¥BÄeÒƒœR¡$zz“+œ_ìÜ¢ 1;£ärÑÓÑN´ÝÛó]g1v´ '—ɉžÖà åŽožÐŽß¸ädRÑÓ xC»ÛÎB.äЫAN*‘=µÞÌΡ°q;ÈIæ$DO…vâ±vO7ÇóÙ ]§¹¹Ù9¢§ÔÙ™öáõã+Úñ·S€ÜìÌ,ÑS x#»£v&`ÓÊAnfz†èɵ6ºu€vÂxvNnúŸi¢‡vÄÚ=^¶Ò~«Frl 'ÓX}tsÿ +íñìˆÜ¯1=´û ÝëãõA“öYÔRûõóÑ“ª-Ýػ쿠/¾'÷óÇONí>lhwµß )³J2ÍÉýøþƒÓ›ž‘¨ÌTª¾;°{C»ñ„v#¹ïß¾ôÐî_bíú—{õeRαtC¹o_¿ôX¼9¥É›¬í\ôЎߤ+÷õËWVíþµÝKÿr·–ô³#ºÜ—©/¬ÞoVaô$ªÛç½g´ã%f÷ejêï©©/h÷ Vã—ÞÅN5á1Èg8º¿ÙoFnpÇ+[¿ÐŽßv¡Ý7´;ß®ÄÝzÙ4¡ûßÞ´L7»÷hÇßÝçÃy÷ùðŸý|¸ß}>¼+>Þ³Ÿµ{¼ÚoДY%™fñFzC¹!ÝŒDe¦RõÝË>ÚñÚýók¤7”СÝÇ í®š´Ï¢–ΰx#½w¹ݬTm¡èÆÞÀîÚÇ·›™æôÞå¦gÐîÃvoׇ­´ßª‘Í΂ÈÍÎÉ4VÝÜ¿z|E;^<»¹9¢ÇÉÍIÐîƒX»§›£v&`ÓÊ%Ð9‰T®µùÓ­ƒk´ij“J%œÈIeh÷A#»ãùlЮSÈd r2¹BgdÚ‡h'lÜN)—ƒÈÉJ´µ{¾í,äB½J¡=S(UzG0;tóô†v¼ÆíÔJ%èœR¥F;ñ†vwÅ|ØiШT r*µÆà åŽÑNظV­=Sk´h'ÞÀîÏóÝÉR!â2ê4Ð9Vgt…ó‹Ûg´ã7fgÒkµ rZÞ„v¢±v/÷§ËŨÛlÐé@ätzƒÙ),uîÐNИŨ׃Èé F Ú‰6²;[)Å>stream +H‰ìÎI  yNû¶…>„D·í5{-mäëüè0. endstream endobj 766 0 obj <>stream +H‰ìÒ¹€0ÄPîlc¼Û§@óˆô P¤ªð7w·3s]ðJÇSQÛ4 +k¹kµÁ±©µÁuèµÁ°.Ú`ŽAô|Šƒ¦œð ºiƒ>º™YÈ endstream endobj 767 0 obj <>stream +H‰ì×ù{šØÀñù_îÌt:iÚf3q‰ îû."È&¨È"îé?•#Üû´¹iÚÞû~ŸüáÃñœÃo¿a†a†a†a†a†a†a†a†a†a†a†½¼/ÿ‡¡ÝËC»—‡v/í^Ú½<´{y¿®ÝÓyo~?—±Û·Ý’?h·;¥rß±ÁéÙKÛíf»Ùœ|ôù;^ålßÂ.ðzÉ•9­I«}KÒ‚dÛs’E2MÃË´æ‹Õzã2œcã"^جWK{n†NþHûO›ÎÛ¶ó%Η¾Ö9óc|¥òw±ónþvϳ—!*‰é\ÐLÓ¦“Éx¬’e4’e‰$Š‚ÀóÃ!DZì`À0ý>MÓ½^¦ûÌ€$U3í=ßsù“«wþµZΩ"ñ,ù|ï9@Ÿa–å¸áçA/”åÑHQœ“'“©¦ÍiÓA¶ß=íAÕõüžvO;ç¾Z)eDDrì€éÓ½n§Ýj6êµj¥\*ò¹l&MQ©d"þ‹F"ác‘h,ž¤r•Ö@šŽÞóñz2~ÖŽœ®Št£”¥’ÎAÂᇇ‡ýAÈQã‰dŠ¢Ò™l._(–Ê•j­Þh¶ÚnϹ=,7ä‚*ˆçøßXn6»§ïa÷´]/ç&‘úv(r÷¡»Û›ë«ÏŸ>^~¸¸øûý_ïþüƒôîýÅåÕ]8š ²ù«óåêùïüä÷·Z-¬™Ü¯PÉx,¾»þtñþÝï¿ÿë÷?þ|÷×û¿/.>\~üôùêúæö.tÿ°¿)ßÌ©Öbuð{U»=Ÿ3ì^aÔ9˜÷¡¹ÆHœÊ•«µjÊ+Ï^>ŸOç/‡®—O%b™r|"“Š…ƒ„î_JåydÎpÞkÛ}õ|§M¿jÆc–ÌtÊXÓõ±Ð(Vê¼f-Ÿ¯,'³ÿÒ6T¦H% }™|@SÉ´Ç‘ÛôU³úÁóÝîÛW\{±\9wš´]iL­ÑSt2ðž­ÉžÞš +4U•­Íá[¶ë•sË^suýQvÿe[nwDmþ|7ãé-œaWÈåå›l”)»/•¦Ù‰µØÏ°ôôæºÜÉåhëmž1~-»/sfÀ8«ÅéÚÓ³-MlæóÊæmNæµìÞ çtW<ïØ‘æ={xÏ s2ÝÕKåÙkn þ7rì6²Ä‘-ÞaɆ§6Ð3ÈRQ©¿Ø xƒövª*Ž‰Ý‰Üéóª1•Z¶ãî¼ýoVŸÊš9·ç çz†&ÓÝþf}9v6yZÕ-BçÉÍNôÌ™:HêíÎ" »Õr®ΰ¹™6;Ñ#ÃRPg‹'´{žóX²Û,-²™› çäê‘Á¨kä¹cµA»çí÷TOk²/¶­¹é‰žéèÙ›þfÏ:lHÉêrow”›N¦ g˜ÖÜ^¬žprÞÁn·]/mÓ“›Œ'žžiÙËÕæWÛô¿A;gÊ›“iÍ•«cÐÓ k±Ú<¡¯ãSäÞnrN®ÞŒØ­·hçϳ³ô9åDO'v»/hç˵[/ˆÈ)#ô4ÝD»À<;s6¹‘<½éÌ°W[´ów´Û®lC›€œ,É 7!ÏhØÍ m rN®ÞXÓ‰®þŽ{b§OO伩n-qÐÑÎYf'*ȉ‚zêd†vyv³±r/€ž2ÖÌÚäÚ-LM?äAo¤jÆbvþŽvë…¡©2È ¹!èÉêÔ°¼}¶?WîöÎ6¦Š'DZœ§§LÈB‹vþŽvd™Œ$c,èI£1ÚæÙeäÌôDYYÇÍñ>ÛŸ+wklÍTI9¦Ï€ž ©šµD;G»¥¥©r}ºz¼¤h&ÚäÚ™š"AŽîÑ 7GSc±A;_G»…1 Èõº=Ðãy‚vAÝDæYëvº ÇòÒX·ÑÎßÑÎÖÇÒprvôCIÕçhçï`·™ëªÄ1 ×nµAáDu†v¹v3Udû ×j¶@¯Ï +Šf¡¿£¥)€¹f£ zô€iÖí|݈gz ר7@¯Ç 婉vþŽvæTö» W¯ÕA¯Û礉vþŽvÆDâèÈÕª5ÐëЬ4F»€vkc,±½6ÈU+UÐk÷¢ª¯ÐÎ×ÑNWÅA·r•rôZ]F@» ÀN`:M+—Ê ×ìôye¶zB»óŽv3…ï· W*–@¯Ñ¦‡# íüìVÚhH·ê W,A¯Þêq2ÚäÚÉ\¯Y¹B¾zµf—•¦hçoO÷´šJl·Q¹|.zÕFg M–hçëh7‘zärÙèUêmF£¿£ÝXdÚµ2Èe3YÐ+×Z}AE;®ÐoUK —Ig@¯TmÒ<Út°[ª<ݬA.M¥A¯Xiô†Êí|¹vÃ^£\9'W¯P®w9´ ȵãºõRÞ“KyzùR­ÃŽ;´;ϵc;µbäRÉèåŠÕöí:Ø-”A»ZÈ‚\2‘½l¡Òbdí|¹vL«’Ï€\"ž½L¾Üì£]@{»ÝbÔo–si‹?ÆA/+5hiŽv¾\;ºQÊzr±GO/[¬÷Ð. ƒ-÷êÅ r±h ô¨L¡Ö•æ[´;ϵëÖ +éÈE#QÐK¥óÕÚt°›KjžJ‚\$½$•«´E í|¹víJŽJ€œ“«— ²åÚ´·ÛÎ¥V9›Š{rž^<•)5´óçÚ5K™ä#È=Ü?€Þc2]l ]@;KlÓ‰È݇îA/–  +uÞÜ Ýy®]½@Å£ º ^4NåkhÐÑN¨å©ÇÈÝÝÞ^ä1•« ´óv¹TÌ“»½¹õôbÉlíÚÛmL¾šMFà ws}záh"SæÐÎØe‘»¾º½‡H’D» övk-%#¡»üp z7¡p¢ÀÌVhwØ%Âw× ÷áâè]ß…ãh”C÷ûõ¹œ8`´vדÛ䜳DÎ"#2Î9ìñ8àˆã¼ý"ðm»UþÝß#œºÕ·ûí©³ÛÌ3±0Èq½p,•«o_¢ÝX`—KEC¼Åë…¢É,Ú‰Õ·{¼Úid“‘ ÈQ^ +ô‚‘D¦¶…vã]&€œ×ã½@8žF;±v—Ûõt<ä9ÛzþPŒ©n^tÑNo ú@Îírƒž/E;ÑÞí¶jL4À˹œ.^/IU6λ¯h'ˆ·‹øis:œ GûÃh'Zß®{±YeÂ> +ävèQ¾P²¼þûí„ñv!Ú rv›ô¼tíDãì^»ç•Tö€œÍj=H°kgh7o Ü gµXAÏMùÑN´¾ÝÃïõrÒïuœÅl=—×gWÏî_ÐNoçó8AÎl2ƒžÓC£h»³56A» g2š@Ïá¦c¥•_wh'lÈÎe9£Ázv…v¢qv/÷g«lœrÚ@Π7€žÍé—OÑn¬!;‡äô:=èYh'^ßîî×J)æµ[@N§ÕžÅNnŸßÐn´!;›ä´-è™mh'ÞÀît¹õXM §Qk@Ïdu‡ó‹m´kÈÎb9µJ zF Ú‰ÇÙ=ßž,"n³äTJèÌ®Pn¡}ƒv†ìLzS*” §7¡x=º·çÛöb>ì2ê@N!W€žÎè f篟ÐNаää29èi h'^ß 9 “Ie §Ñ;™¹#´kØN rÒY)è©ÑnBœÝÓõñ|6èЫ@nvfôT:»?Ý:ì<¾¢ÝhÃvJ›™ž=%ÚMh`w4— Øu +›–LƒžBkó1Í´kÄNJä$?% 'G» qvÃVÚoÓÊAŽ‹èÉ4Všiì_¡°;^v“êÙ½>všŒÏª‘Üï?@Oª¶Ð©úÞe÷íFµ#rß¿}'zh7±¾ÝÕ~ƒ¡-j©„È}ûúèIfUf*YÛíÙ½¡ÝHB»Ü×/_zh÷qvÝ˽zŠ6«f9º¾Ü—Ï_z=¼¥É›¨î\<  q;Nîó§ÏœÚýg=»—îån-I™”3ºžÜ§©Oœ^oZaôÄ+ÛçÏh7š˜Ý§©©¦¦>¡ÝÿÔ[_.vª ¯Q1Mèþá"x¹Á+oý¾G;AìþF»ÿ¯ow¾]‰{ r O÷÷S¦wEÙͳ;´„ïîãá¼ûxøÏ~<Üï>ÞïÙÇÙ=^í7Ú¢–J8¼^_Ž£“̪ÌT²¶{ÙE;AB»Ÿ?z}¹ÚM®o×9h2>«F6Íá ôÞå~J¦¥j ªïõìþ ÝH£vÓ¢÷.'™F»‰õìÞ;‡­´ß¦•ÏÌ€‘›™‘i¬4ÓØ¿z|E»ÑFìfgy½w¹ÙY´›g÷t}4— Øu +©ôˆœT*×Ú|Ló ƒvÂFìd2)Ñ#r2™í&4°;žÏz¥\zDN.WêìþtëíƶS) Gä +ÚMˆ³{¾i/äBNƒZ©="§TªõŽ@fîèúé íF¶Ó¨T GäT* ÚM¨owÛ^̇]F­Z zDN­ÖœÁìü1Ú5l§Óh@Èi4:#ډ׳ûó|{²Tˆ¸Mz­ôˆœV«7¹B¹…öÍ3Ú ²3t:Ð#r:ÁŒvâqv/w§ËŨÇbÔëAÈéõF‹;œ_lߢ°!;«É`="g0˜¬h'ÞÀî×J)æµ™FÐ#rF£Ù扖NÐn¬!;»Åd="g2Yìh'^ßîþl•S«Ù zDÎl¶:¼ÑâòéÝË´mÈÎi³X@ÈY,6'Ú‰ÇÙ½>œ­± Úe·ZAÈY­v+­üB»±†ìÜ› ôˆœÍæpÓh'ÚÀî÷z9éó8ívÐ#rv»ÓCÇÙÕ³{´ÆÛù½.‡ôˆœÃáòúÐN´¾]÷|£’ +Pn§ôˆœÓé¦ü víìáíñvAÚãr‘s¹è9Ÿ/Ž§k[—h' ì²ÉHÐï="ç÷#‰ Ú‰Õ·{êì6s©h(="„¢Él}íÆ»< ƒ¼Þ»\0Ž¥rh'g÷穳×*0ñH(zD.ŠÄ™|cç +íÆ»b: ‡AÈ…ÃÑS@;±úvÏ×ûs¥L2‰€‘‹DbÉt±¹ÛyB;a`ÇfSñhôˆ\4OeJh'Ö»ÝÁ<›c±è¹X,ÁdÙÖ^çéÚ »ržIÆã Gäâñ$“C;Ñv7‡ •B:•H€‘K$Ré|ynÿúí„]µ˜a’IÐ#rÉ$“)TÐN¬¾ÝËíÑb­”eR)Ð#r©“-VçÐn<°«³¹4Ãë“Εj h'Ò»ÝñRƒÍgôˆÃdòl}ñðíÆ"vËÍr!›Nƒ‘K§³¶±„v" ìîÚ+­J1—É€‘ËdrÅrsùèöí„»Õ¹j)ŸÍ‚‘Ëfó¥JkíDêÛ½Þµ×ækl!—ãõÞår¹[[=F»ñˆÝúB-æó Gäòù"[›_C;‘v÷'‹r©P="W(”Êõ…õöÚEì6—š¶X="W,²•ÆâÚ‰4°{8ÝZnUÙR ôˆ\©ÄV›K›í»W´Fì¶Wæje–×9¶\k-o¡H}»·‡_;«óõ +Ë‚‘cÙJ}neûäíÆ"v»k j¹ zD®\®6æWwÐN¤]÷lo}±Y«T@ÈU*µæÂÚîéÚEìö7–Zõjôˆ\µZo-®ï¡Ý¿ìÖÇr³J†á»sRΉœ‡œ”îþ`‹n™ã]§¾w*SO!º%‘ºÞ^^:½Vîååm4Û(NqƒÝ÷ÈNÛ-Æﯯ¬Gr¯¯ïãùV…¤‡]åéûåäãíõHîííc²Øin »AdgVÓÑû;ë‘ÜûûhºÜë°“ÔÚùæq=|°É}|Œg«ƒáÁnXk˜§Í|2±ÉF“ùúhú°öew¯„¥lÓñ˜õHn<ž.6'3¨`7ˆìlu·œM&¬Gr“Él¹U,»a»:t´ýj>²ÉM§óÕNµa'©µ‹\ý°^Ìf¬Gr³Ùb½×œvÃØÎ8n–ó9ë‘Ü|¾Üt7ªî°û^k{æi»Z,Xä‹ÕöhÀNÖÃîû¦²[/—¬GrËåzw2½¸†Ý Ö. ,u¿Y­XäV«Í^1}ØIjíRak‡ízÍz$·^oª$°ÆvŽ~Üm6¬Gr›Íî¨Ù"…Ý°Ö. ]ã´ßnYä¶ÛýIwDz†Ý ²‹\S9ìv¬Gr»ÝA1Ü0ƒÝ°‡Ý%í +ØI»ó’RfIÜÓ#¹8ÉŠv²Ø®´i³ÉÅqš•´¢Àî©Î®ÊÓ$a=’K’4çvO‘]³¤YÚÓ#¹4+*ØIc»Ë—ë‘ÜÃî;I]]æYOä²¼ä1 »§úvE–±ÉeYQÖ°“ÆvÍ°(òœõH.Ï‹ +vòÈîsЖEO䊲°“õÍŽõHîaw‡$¶k>xUÙÓ#¹²ªa'ï›ë‘ܧî`÷TÏî\UËUÕvò:»ë¹®zz$×üea'o`×ê‘ܧÝvÒîÞå\7µ~­[Óù£vOõì®—sû}¹5]º×vOÝŸð¾:SÛë vòúv·ëWêqÛ£ƒÝS÷û“uí.ûüöiÿVwy7ùÏ¿}Ú¿Õ?ìþÑoŸöo»Ÿ»Ÿ»Ÿ;„B!„B!„B!„B!„B!„Ðÿªÿœ·Ç3 endstream endobj 768 0 obj <>stream +H‰ìÎ € 0ù±]bp'[‚…Üî[£•7>)×>Og€ŸÚ †C\ endstream endobj 769 0 obj <>stream +H‰ìÔÉ €0QÖ°–Ÿþ+Qƒs@Ì+`ä“‹ÀߥG<×e?-%aÔŽ©wƒÑTÑW×ÔÒÞ«­J}4ËÒÑ9}t›'}4l^µpè£é +¢våˆÆGµ_à»n0±^ endstream endobj 770 0 obj <>stream +H‰ìÎ@ ÀT"”쿬1èî‚`>ϸÛY·5-1—ý¸Zÿzð/¯§Â§ endstream endobj 771 0 obj <>stream +H‰ìÕË …áz¥Š-­-JáýRMX¹æ˜49ßjV&³€ª""""""ÚŸ”…Ň¿SÙrðóÝMë'c©rfG© +'3Ýž¦<ˆÃSÖÍ´³‘—SvªîAå[*Û^HLÙÈ+èÎ{,[Uw˜²;лñ°ƒÆ”Ÿ‹™0åøšWL9E@åŠ}S¿å T&"""""ú‹·,7 œ endstream endobj 743 0 obj [/Indexed 735 0 R 34 818 0 R] endobj 817 0 obj <>/Filter/FlateDecode/Height 93/Intent/RelativeColorimetric/Length 51/Name/X/Subtype/Image/Type/XObject/Width 90>>stream +H‰ìͱ À0ÿZWÁÕA!9 ø'‡ûå6XN*+++++|T ¸Yo‘ endstream endobj 735 0 obj [/ICCBased 819 0 R] endobj 818 0 obj <>stream +ÿÿÿ®®®ˆˆˆtttlllfffaaaZZZTTTOOOJJJDDD???;;;555222---)))!!!  endstream endobj 819 0 obj <>stream +H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(Š‡R¡,¨*T2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 742 0 obj [/Indexed 735 0 R 17 820 0 R] endobj 816 0 obj <>/Filter/FlateDecode/Height 74/Intent/RelativeColorimetric/Length 40/Name/X/Subtype/Image/Type/XObject/Width 90>>stream +H‰ìÎ  ÷/­  n€àŸ¶G·´‘ï endstream endobj 820 0 obj <>stream +ÿÿÿ}}}tttlll^^^PPPCCC222(((  endstream endobj 741 0 obj [/Indexed 735 0 R 24 821 0 R] endobj 815 0 obj <>/Filter/FlateDecode/Height 87/Intent/RelativeColorimetric/Length 49/Name/X/Subtype/Image/Type/XObject/Width 85>>stream +H‰ìÌ1 00ü›f 8Fh4¸.»¯ÓšG?©Tz8Vz œ@À endstream endobj 821 0 obj <>stream +ÿÿÿ”””„„„bbb[[[III444///+++### + + + endstream endobj 740 0 obj [/Indexed 735 0 R 13 822 0 R] endobj 814 0 obj <>/Filter/FlateDecode/Height 74/Intent/RelativeColorimetric/Length 39/Name/X/Subtype/Image/Type/XObject/Width 85>>stream +H‰ìÎA  ë_Z¿6pSH@|WÓv8ªd ô endstream endobj 822 0 obj <>stream +ÿÿÿtttlllPPPJJJ222(((  endstream endobj 737 0 obj [/Indexed 735 0 R 121 823 0 R] endobj 813 0 obj <>/Filter/FlateDecode/Height 345/Intent/RelativeColorimetric/Length 604/Name/X/Subtype/Image/Type/XObject/Width 316>>stream +H‰ìÐA À0ü› ¹´¶µºý!ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ï:ïº[ï<6À»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î»Î;à)G€$íƒò endstream endobj 823 0 obj <>stream +ÿÿÿ¿¿¿½½½¹¹¹µµµ³³³±±±®®®­­­ªªª§§§¦¦¦¢¢¢žžžœœœ›››˜˜˜•••”””’’’‹‹‹‰‰‰‡‡‡†††ƒƒƒ}}}{{{yyywwwvvvtttqqqpppnnnlllkkkhhhgggeeebbb___^^^\\\ZZZYYYWWWVVVTTTRRRQQQOOONNNLLLJJJHHHFFFEEECCCBBB@@@???>>><<<:::888777555444333222111///...---,,,+++)))((('''&&&%%%$$$###"""!!!  + + +  endstream endobj 739 0 obj [/Indexed 735 0 R 23 824 0 R] endobj 812 0 obj <>/Filter/FlateDecode/Height 83/Intent/RelativeColorimetric/Length 48/Name/X/Subtype/Image/Type/XObject/Width 81>>stream +H‰ìÌ¡ 00þš ‚G,ÑÐ`[¶³a7¡ðH =í¦,Ô endstream endobj 824 0 obj <>stream +ÿÿÿ’’’‚‚‚rrrkkkWWWPPP???444///+++&&&"""  endstream endobj 738 0 obj [/Indexed 735 0 R 9 825 0 R] endobj 811 0 obj <>/Filter/FlateDecode/Height 73/Intent/RelativeColorimetric/Length 38/Name/X/Subtype/Image/Type/XObject/Width 81>>stream +H‰ìÎ1 õ/­—ôÛj\Gà£`ª-ø endstream endobj 825 0 obj <>stream +ÿÿÿ|||tttMMM@@@***!!! endstream endobj 810 0 obj <>/Filter/FlateDecode/Height 345/Intent/RelativeColorimetric/Length 603/Name/X/Subtype/Image/Type/XObject/Width 316>>stream +H‰ìÐÁÀ0û/Í=>/Filter/FlateDecode/Height 87/Intent/RelativeColorimetric/Length 83/Name/X/Subtype/Image/Type/XObject/Width 310>>stream +H‰ìÐ1 ±÷o0\Hh%tàUë+Ö +k…µÂZa­°VX+¬Ö +k…µÂZa­¸µœm}÷± endstream endobj 826 0 obj <>stream +ÿÿÿ···®®®¦¦¦•••†††~~~wwwpppiiibbb\\\VVVQQQKKKFFF@@@<<<666222---)))%%%!!! + + + endstream endobj 806 0 obj <> endobj 808 0 obj <>stream +H‰ìÕnãFEÁõý/ Àb¯-QâРΫº…~£_¿îàãcú0åã?¦ ?îã³éÄOú+¿ ¤|Ùß2¾ëo ú›@ÁãXÀîžô·€Ý=€líyØÚXÀÆŽô7€€ìËâ  íXØÖÁXÀ® Îâ  íhØ”þqÐæ ÎâôoóÄ@›þq§›þqЦœÄéßæˆ3€8h;Úß6eqú·yâôoóÄéßæˆÓ¿Mÿ8ùã  Mÿ8ˆ3€8h;Ö߶emGûÀ¦ ÎÚ÷7€=@Ûñþ°%ˆÓ¿ÍЦœ´éßöBØþqÐöJØþqÐöRØþm€8ýÛ<qú·yÚôo{­¿ìFÿ6ýãôoó´éߦÚ‹ù `/§7€¼Y_ÿM¼Ýßvð~~ýwp¢¿l@ÿ6ýÓÎä×ÿþNõ7€ÛÓ¿Mÿ6ýãôoóÄéßæˆÓ¿Í§œÄégqúÇ駜þqú·éßöfØ„þmïö7€-¼_ÿ{¿ºþ÷·¢¾þ·µ&¿þw¥›þmòÇé߶¤¿Ü—þqú·­èo7¦œ´é'›þiò·iŸ¦~›þi§òÀíéŸv2¿ÜÛéüpc êë_KòÀ]-ʯÿ-­ª¯ÿ ­‹o?ïäÑ×Æ×ÿz /¿<¾þ×Zsü+²ëÿÜÿÒöò_jA‚KÛ?ù6ç,¨p]ø'æ¼!®êþä³,qºÄUÙ•EN¶¸&ùÃO²Ô™—øEV{¿Ç­~KüPÆwMŸg{ÓŸ˜>Ïþ¦ ?6}€éÄLß&a:òÓ§i˜®ü½éË4LWþÖôa*¦;cú,Ó¥¿4}”’éÖ_˜>IËtí¿M_$f:÷gÓ÷È™þÉô9z¦‹ÿÏô1Š¦›ÿ1}‰¨éì¿Mß!k:ü¿¦P6ÝþCþYÓõõŸ5]_þaòÇɧ~œîqòÇé_§œüqòÇ©_§~œüuêÇ _'~üuê×iž§>¯Œ`ú§r!}€ÛúG€X÷5¸ endstream endobj 788 0 obj [/Indexed 735 0 R 1 828 0 R] endobj 827 0 obj <>/Filter/FlateDecode/Height 502/Intent/RelativeColorimetric/Length 8911/Name/X/Subtype/Image/Type/XObject/Width 513>>stream +H‰ì×ÙvâÈ…áv0ó<Ï @Œ IˆÑv¹Êýþot"®ªÓ÷.V§ÿï†[­›‘ýð_ððpï/À½<üæÞß‚?Nýï2ðå\§ÿxsËÀ½? +Œšÿãc$‰ +ùQ _‡úû?Êðc±'‹I>jàÞŸ†?à6ÿØS<Š?/EõDÆŸL¥Ó™L:J&T |,‚{>Ùmþ‰T&›Ë‹\ö_¸÷âs©ùGeþÙ|¡T¥B^Eà¶H€îT\ç_ªÔêõz­Z)T „·€$€è-\ñd&_ªÖ›mÑlÔT2iµH€înΕªv·×ï÷»V½Z.æ³)XT-{$> '³…J£Ý£‘1ìwÛÍzX)é*@oáPPkõ†cs:5'#‰@«Q“P ˆ­]7@&_ntãé|±X̧^GJ ˜K'ãaÜû+ñY®'@2[¬¶z†9_Yëµµ”ƒn«^.dS  µë Ê–jíÁx¶ZÛŽco$æhÐmÖJù4;@o*±x*Wªw†æbí¸žç¹ÎÆZLGýN£RÈ$ €Ön7 œ]cº²]?‚ïÚÖÂ4ºÍj1›ŒG#@_*r*ÍÞhn9þþp<ö;×^ÍFý– Etv»3…j«?^¬ÝÝát>Ÿ{kÍÇaXZ»Þ€òp²ØxÁñüü|9vÛu€àÞ߉Ožê¬µ‡æÒöö§Ë¯ôšr&€Æ 7`®¬*ÇóåùrÚûÎjjtå\:‹<²tõqä+ê Ô p:ìÜÍb2h׸5wÛÙbµÙ“lÜÝþ(¯õ ŸfèìZ²JµV4]m¶~ì?|ö®À ¯kÈ#°Üè Æ3 €çû¾·Ý¬fã~»VR@}ý*€j«g˜sk³u=ÏuÔüz9¯Þ€€¾$‘¨*€JX˵½uÝ­Ì>v•B¸(}…àç°Pó÷Ü­m-L£×¬s)€Ön-Tš]Ã\X¶ë©À¶æÀWð³êíÁdn9Þ.®/€q¿U“`hízÊPmöF3™p8çXòlV ª˜¿ÆÔˆÅSR¡¹´½àx:ŸO‡Ýv=—T +™КÚO yHÌ×ÛÝá|y¾œȧá¸÷gâ“Ü6@¶X“ @ +`º<¿< Q¾€ÐÖï`ºr|i€ÃNn£Û(çÒr²ôu{äË®1[9Þþzîfi;õRø Úúÿ7ÀÊvwÁá°vê8굪Å,­Ý6€œ­þhº\;®ç{ÞÖY/gãA»®N ³°Ô¨·%‹ÕzcÛ›µµœ›£~»Q)dÕà -UÑx2[¨4:ƒ‘9[,—ËÅ|fNŒA·U¯s€Þ> + Tkõ†cs:›MÍÉØô:­Fµ\ÈÊü)] @.)€¾16ÍŸÓ¯Ëøs™Ômþ@S¿_Æx"ó eü2ý¢Œ?Œ3­Ýž9µäÿ?šc£ßiÖÊÅ|6“JÊß?*ó'Ú’ˆ<%2…J³kLfs¹þ&F¯­n?ù÷_ǯþÿÌ_Sj¨¨w†“ùʲV‹©<þêêøSíûû3]=<6@±Ö˜€ýéò".§½ïX³Q—ÐÜõLçÊõŽ1]Ù^p8ÏçÓ!ð·ë…9äÐÜ­d4{£ÙÊvwÁþ°ß¾ë¬—ÓQ¿U-fS¼ôõq–dLækÇõw»ï¹ÎÆZLGƒN½œÏ$ž€¶®'`:_itér³u}™þVÆ¿œ™2ÿfXrüÍüµn€¸:[R–ízjþöz5ŸNŒ~§Y+åÓI +@[·0_¾€§ +ÀQóÿû噤8²Eᨩ*¬0Þ{d@B$®¼¯6ûßÇ»™‚y=¿§#:*'¿dĹyLëŸeÔæï +˜¯4{‚4ÓtCÇõoÈŸôOÆi —ÀP>???Þß^ž v¾ëXó).€y."ýéÁß iÖÊ?Ü=<¿¾~à^‘ì¼õÒPÿY©þ„¬À ÀVþñþ éÿýÇïß>°¶0€v @ÐÿŠêO ¸F˜t¶Ô覆ãîŸÞ>¾ýøñÀëóÃÀj©ÏpäX(€×´š×‘x’+ÔÚCI[¸»Û§·Ïï?Â|¾½<Þ·›Õ@« +§€,à.¯¡Â P Ç?>¼~àxý¡ê3iÄ·P$p úèŠ" ÀCÐ\c ø àùô·MMÐ-ÀX`úÙ”ßÄÅé"`™b -Á…»¿~ÿö5€Ç›kª<t› ?,@Dèu +ƒ°ÙR­5`¹9À||~€<ǘIßnTŠY6§@HÿKÐ@ŒI±¹R.`Ž/àõ ÀÍvmi¨þÕÊùLëO €Nßþ(‰Æ≇/@† Øß=<==Üî7¶®@ý«‚ý§T¸øüýCa?‹Å™ó€¸»ãíÝíÁ_Yª8h׊PÿèTÿ¯ÍÅ?åÒ©G0Lò|Úbåíö;ß]êŠÐm”s8þ¡ÿQý¿0èÿ'øþ >Ã$ÀPëÀ0í•ë®–ÆlÒoU Ü9þ©þ_—àÏÿ”?øþàüÉÄ'H±YXƒýÉtnZ KW%¡[/eÓÌ9þ©þ_•@~¨|ˆ«««s÷O¤Ò,ÇqlN€A1Pmñ‚4U5u*A¬ä¹d,BõÿÚœ"5~ „@ß?‘Ls™,áÒ)8hÉt¦Piv£‰(Ž 2€­_TùqåƒÎFøû³™\¾P(äsY.dâÿc¿L”ÓF· \Ä »@lZBì!±ï›q’›yÿǹ}~ œ™ÌÜL%cRÌUW9v쌿Ó}ú$p ¤³ù’¬¦ÕhX¦¡JE>Mò¿gücTøSdtvöÁþ…’(ɲ$ +Å<ŸI'tP˪¦ëzE‘ŠÔøsÑ¢Îe8•Ë ýK¢\VTE‘%¡H |HÐ( + Y +¹ k€!ÿ» €(Ûù¬ò‘r¹¬V4M«(²Xb@ë…€ß ò4ñ( €_ýBý¸ØxŽ%hçŠØb÷¿fTkÕ*¢^¾D€_PÙuˆbðàŽÅ6@4Ž®%IE¬~Â_«[–U¯Xö¥‚ßb8Ø è¿O!ÿ{Û€,Ú–>²ø­V»Õ´0e±˜§C€à™]‹ˆ|ùDüøk ÉñAV*ºnª¦Õlwz½^·Ó²jºz]àÿtÕ£?äϺl€L®$)ð½Y¯#ù­v×8Ž3°»Á ò£Æžýñ!ЇÐþ÷®ˆ`ä…rÅ€ñ‘ûN·× ½Ñhä û˜€ª†ç4 ùHˆÿÞð§ WªV«Û{X<ÍÐ|:ö;MSWÙtpáÿ«ûP?)ÂðG(JªQovûCÎ'øËÕj½^-çÏéa Tdá:!ýƒ.ø‘ÿið­Öèô‡£éì×ëÍf³ÝlÖ«Ål<´;šV +lÂâ÷/KZÿ°?—Í3þVÛÿÅj³ÝùÚn7lúþ áü;tÝþ°6WdU'þø¯·ûÃñx<öûÝf½D pì6­€R.“ŠGŸQ~õ¯êçlÿ ý ‚¤hÕz³c;ü¿ÝO///§ãa·eüý¨ˆž»T€_ýBýŒ"oå?Åñ…á7íÛÿÄÿå ½÷»€·Y7T‰èS¸î[ì€cí/céﻟð{ãö?ü~}}¥Ø°À†ÿÁÿëàW¿‰P?*Ÿþ¥üÃþB¹ÂÂàŽ&³Å’öÿé… Àé°]ÍÇî'`MW¥R>Ë%ãaܵúÀÏʆ쯛l÷qü­ÖÛã~=ƒÿn þ´þJY,’ÿãÑð¸_ÑÿðHîgå?_’+UªþÌïÓ?Pÿ£p:îÖ‹‰Ëî?E*øLÈÿŽ‰\ñ?ùøS,þµZ³;ð&ó%£<ž¨þÀz1œ°.Ë¥1–ÿáÜ\ ÞO>Ü~¶úþÀö'"þ[½áx¶Úì>‘?ø÷[øßcüeÚþ©ìò¿"¥}ªúÌü‰dø ‚¬õ–íNÔûÙáÇôr:ö»ÍjÎòŸøç(ýc„Ÿò?äÿžúú‡«þþüññlñ3ó#ûÓà/‰eZÿ}wºÜÐú?BTýÏ,ý·«Ål< üŸËøéïÛ?äÿŽú=p_ŒÞ#}ú;ÿo†‡=ðá}2ŠË𠿪×¾7]íŽçŸ>þü p¦ø‡ý—ó‰çôÚoü/éâG]5!{ÓÓEßÝÀ˜ ßùÏÌù€Oô³¹|QeU«Ö©þÁÿÇó§ÿ@4ý×°¿Ûï6ë†*¿ü‡øßWo7Ùõ9€þLôàÝX,úýöVõÞ†'0>‚? ú|¾P¤²ª¦Õê]ùùí à•¹»†ýGŽóOW¤"ùÿÂÿ†ÿ?vàŸŽÝA·U¯je±ÀsÿÐþï,âÿ”ô@‰D"°.—á¸tŠ5qš€¿x†ß_öR‚íü,¡/_"úzµVo´:¶ãMëý‰à‹Ï¿eø=²¿©«8ÿx.ùßBŒ?ÐщÆeH˜³¯‰_>Ÿã³+c‘+~ßó¾(õÑø|ôrYQ+Œ¾Õluº}ðŸ¯p¼~úL €øãô›Ž\Çª¦ˆEvþEŸÿô%Cý£òùÇ“t¢å …ˆçx(Gæ- P©Ë¦1ßâ +?-‚2Y>}`å±ò‰¼¦éºáÓowzvßqÇÓÅz‡ ðã'èõ|Üo–è~  ö +üµþ‡þo èÅS\–:º$I¢(”Š$ÚÚe’ÅRCþ®\Î=Öb4A<Ë{zt)(|ÕšiÖ!«AÞý3tG“Ùr³;œ^Îtýaý¯ӑߨ”Å"^Œâ?䱈'9¾ `MW*U)˘DwY©h¤Á”y:ÉØøJAñ§ôO¤€¿„‰aÂ'µ¢cáÃôP Ö}Àº®7OçËõv8žNG”ÄÿÄô|üR öGÜD¿ww„úgD à)–àø¢¨ ¢›¦Y5t D¥Í¬[–e¹”ã’l |-vö±åŸL#@ÄrY_5 2ß´P÷í>d÷zÌû®ç ñd:[¬ÖÛ´eÝ4ìwš¦Û&ÄÈÿŠD(RÙ‚¨f~m5,³ªkµ6bØé´›Vµ"ù4»Ê¾’öþ Ša"ê›Í†E™¶?‚¹çÁî‡õÇ“1„˜/–+h¹˜Ï&ÀOé¯)’ü蛬ý‡ñQD\NPŒz« ÃÚÝv£^ƒáa@ì‘Û–¡Šl À™ž|¿ùsÙì¯Õ¬6žÁ¶{ÝEþ`8êédŒ€\²þt:Á LðýÙ|N?CõïãMk¦èãíK± Ìd­Þ¶‡ðëp`wš–YC}³|±Ÿëº\â¹d<>w¦XœèÓÁ—/IŠn6»}ØOá ÷Ž7ž-–Ëå|Êàï½ ÖÀ˜þÅS÷{íEBѼâí3áxŽ§yA­µlœg0¥çô(õF»7p±´ÑК5U, DÜWJ¦ˆ~Ý_`ü{úýœBžw=týõÆßñ®çÀ{®‹ï8¤M«Q¯ê–þtÂïÛ?äÑøœàò’fu‡“¶29­dL€ÕìØ°ñt:vK/ yôó4 ûâÀ>Ëçpù¡ü«z­ÙuF„|½Z̈òMoƒšG7žë ‡e~ÂJ £_Ãáw?LuÿÿMEMd +²ÑìÄk5;½V#€áÛz:Ú­š&Ã¥|Ð}å{AÀ½¨€¿Õé{Óåf·ßïÈôXótëý—ý2mNë‚paÇ6«Á€ÙX$„„Ø;ˆÕ™ÿÿ{Þ>÷ +{¦ÞO3Áž9O¥¦â¸2é¾Ý}¤Ð+œTbB}ã]ýôk‚䉅Áòÿ^p<<…b¯Õè9Ëínç®çãž%: Na°#Ãív³ZÊgR¯©””>Ÿ/‹t0Ôu³;šâ;ìwîf9söžÈÛl·Û¦…¿mÈ[£TÈeðø_¢$¿Ÿå¿dlÀT±nf›ýñ¸ß.œ~G Ù"`ÈQ-´U<לGþ¢¼R¡{A­‰¯­Üýá°ßBtG`µ^¯æΰkº¦é-xÀúýxüP?Âö“ÏŸåÿÍ„_Òåfg´pçóÑ]M£YSq´L`ŽaàŒ(ðf•2P!{­.¨ÕÚÅð»^P8S¹hTh |Y£ è:~îÉO?–êóó¿ ÒñŒ¢Ù“ÕîôövÚ­§Ã‹ë´ë–pÀ°gQnׯ4„œ@ךMü¼E_‹ +@¸è}g<ÆE€+p†0õ†JAËÀ-ê5ûcþX~<ýo†ïîþ!‰g½ë¬çŸ?ÏûõlhÃP«.‡ýŠn9§ÒÛ0„æ:¤7èŽ\óÌÐîôÇóµ»ßSL'£®>…¸!à'U) ÅuF¹\¼T¿”ŸÔ—ò³þ¿i€D¶¢÷¦›ÃÛ|2€=tÄ-·Âb¿wmš[èòŽÝíõûbÓKˆX¬ÝK`Œ½OgßhØ·ÛZM)æ²™L6‹õËeÓä'õYþ<¹J 8^ Ш֤Ö[w‹knŽa=‡¤9ÀM7BÌG8€j@§›a*/?¾¬‡ô{¶©×+Å\ú5™LÊ"™ ðG÷_ägõo†0Às"Wõ @€ Ðj¨ÕJµÖ4Èw‡ó)€-0ƒ Fð@ŸäŸLq"BjÛli˜¢f 4Æb6öqïV[oTK9|±XìÄbÞð¯~–ÿVøî~ÀIi€ÃÛÏŸ§]¿`ºÜ`ØaÚí(°°ïHwl<3\Ú‡p€iÆrøQ.˜f›6ƒV¯–òé${‘p„‡Bâõóð¿=d€àÕç··£»tú–ŽCíj€íþx:ŽGé  ÷]³Õ¬×jur@Óùe¨5ÄÉWFÿ'_žQùþ§§§Güx$õ/åëÿ6¾_ à¬vÇÓq¿™º˜í28û­8háOPKÀö,@UÕ:v€ec!Ú–¡7ð=Ê%yò‘þòÕKî/ËÿÖÿÿu|ïÐ,ÝÃñ஦ò +$hÂÛ«Î'a1ñûƒ!2`Ž0 €îXÀh›mƒ ¡”Šù\†N¾é/¿äŽï¾/ÂÕÝ/6»ýn³p°›jõã8èª9ñí.‰3:ãA Ë(ŠRU1š¢ùËxû¸ý/1l~1ù…ðžö,ÿ—À3@"§hálµÝâ}ûŽ€Š" Ð8‹µ»? :¶«…3BÅ[–Õ! ŒÇ£AÏ6uü ä}±TÆŸ«Â %ýP?úŒõ‡ø÷&ŸÕÿJøä˜È–f2_­!/&ŠR©5[V<[n¶în·s]wKGV?&žÑ2 }ßëõ0ø)Êü\.Ÿ/ŠÅBžä¿õÔþ|ñ}I¤"ñt©Ö²‡Î|Ž×ïØ€ˆóŠÚÐÍîp2[¬Vëõ +ˆÉ'ôoizúÞ2Í6úç²ét*•¤^ñX4BÓ_È/õ¿õÿ.óaø%U¨jfo8žLF™çJ¹¬PXøÔ™Îf³)ÚÞq&cô?&¾ýµZ£©f£&‘ŸˆÇãôŠþˆ÷ø/ò³þ_ßÝýƒ?MfË5¼öþ€úœò\)¥Z× ŸÁ`0èøZ]8¤, +_Å`DügÓ¢ñ£Ï‚HX6¿xü|ò}]ÈOÁçx*¯Ôµ¶ÕéXm©UNh¶ð©mã7õå¯5¨ð ^ã‹TùÙô«˜ûá zÑÿpUŸåÿšø|÷áh"SPÔ†¦ëZ“.¸b!Gò˵ŽªúfCPW«bã£ïSTù™Œ¨|qí‘îàé‰Þ¾÷øyôe|2"±d&¯Ê=jzÞ 2A:#îº IzûtâQÕ_x¯|¡¼ü,ÿ7€"àáÉ ?G!xBÞp1oÌGc"äɱw¢4ö„æW>U>«ÿ}ð <>‚aÄy4*’=,×|(–!¡Âø¥3? _t½ÇµòYøï9@XÀ/G\@Îy àEüå¿7ó½…+ÿû `GdùõŠ»p‰ø_y¸äýýïŒOXøñpáÇÿçþ=ï¹òÿø„ÈŸBýîã¯î>¿ù[ÿÅ™¿ ïÿ9Ô}~Á/þßÌ_ªü×Üú¯Êüƒ°¾ Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã|[þ'ÀKÐåC endstream endobj 828 0 obj <>stream +ÿÿÿ endstream endobj 807 0 obj <> endobj 829 0 obj <> endobj 830 0 obj [0.0 0.0 0.0] endobj 831 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +513 0 0 502 6522.5 7180.5 cm +/Im0 Do +Q + endstream endobj 832 0 obj <> endobj 833 0 obj <>/Filter/FlateDecode/Height 502/Intent/RelativeColorimetric/Length 8911/Name/X/Subtype/Image/Type/XObject/Width 513>>stream +H‰ì×ÙvâÈ…áv0ó<Ï @Œ IˆÑv¹Êýþot"®ªÓ÷.V§ÿï†[­›‘ýð_ððpï/À½<üæÞß‚?Nýï2ðå\§ÿxsËÀ½? +Œšÿãc$‰ +ùQ _‡úû?Êðc±'‹I>jàÞŸ†?à6ÿØS<Š?/EõDÆŸL¥Ó™L:J&T |,‚{>Ùmþ‰T&›Ë‹\ö_¸÷âs©ùGeþÙ|¡T¥B^Eà¶H€îT\ç_ªÔêõz­Z)T „·€$€è-\ñd&_ªÖ›mÑlÔT2iµH€înΕªv·×ï÷»V½Z.æ³)XT-{$> '³…J£Ý£‘1ìwÛÍzX)é*@oáPPkõ†cs:5'#‰@«Q“P ˆ­]7@&_ntãé|±X̧^GJ ˜K'ãaÜû+ñY®'@2[¬¶z†9_Yëµµ”ƒn«^.dS  µë Ê–jíÁx¶ZÛŽco$æhÐmÖJù4;@o*±x*Wªw†æbí¸žç¹ÎÆZLGýN£RÈ$ €Ön7 œ]cº²]?‚ïÚÖÂ4ºÍj1›ŒG#@_*r*ÍÞhn9þþp<ö;×^ÍFý– Etv»3…j«?^¬ÝÝát>Ÿ{kÍÇaXZ»Þ€òp²ØxÁñüü|9vÛu€àÞ߉Ožê¬µ‡æÒöö§Ë¯ôšr&€Æ 7`®¬*ÇóåùrÚûÎjjtå\:‹<²tõqä+ê Ô p:ìÜÍb2h׸5wÛÙbµÙ“lÜÝþ(¯õ ŸfèìZ²JµV4]m¶~ì?|ö®À ¯kÈ#°Üè Æ3 €çû¾·Ý¬fã~»VR@}ý*€j«g˜sk³u=ÏuÔüz9¯Þ€€¾$‘¨*€JX˵½uÝ­Ì>v•B¸(}…àç°Pó÷Ü­m-L£×¬s)€Ön-Tš]Ã\X¶ë©À¶æÀWð³êíÁdn9Þ.®/€q¿U“`hízÊPmöF3™p8çXòlV ª˜¿ÆÔˆÅSR¡¹´½àx:ŸO‡Ýv=—T +™КÚO yHÌ×ÛÝá|y¾œȧá¸÷gâ“Ü6@¶X“ @ +`º<¿< Q¾€ÐÖï`ºr|i€ÃNn£Û(çÒr²ôu{äË®1[9Þþzîfi;õRø Úúÿ7ÀÊvwÁá°vê8굪Å,­Ý6€œ­þhº\;®ç{ÞÖY/gãA»®N ³°Ô¨·%‹ÕzcÛ›µµœ›£~»Q)dÕà -UÑx2[¨4:ƒ‘9[,—ËÅ|fNŒA·U¯s€Þ> + Tkõ†cs:›MÍÉØô:­Fµ\ÈÊü)] @.)€¾16ÍŸÓ¯Ëøs™Ômþ@S¿_Æx"ó eü2ý¢Œ?Œ3­Ýž9µäÿ?šc£ßiÖÊÅ|6“JÊß?*ó'Ú’ˆ<%2…J³kLfs¹þ&F¯­n?ù÷_ǯþÿÌ_Sj¨¨w†“ùʲV‹©<þêêøSíûû3]=<6@±Ö˜€ýéò".§½ïX³Q—ÐÜõLçÊõŽ1]Ù^p8ÏçÓ!ð·ë…9äÐÜ­d4{£ÙÊvwÁþ°ß¾ë¬—ÓQ¿U-fS¼ôõq–dLækÇõw»ï¹ÎÆZLGƒN½œÏ$ž€¶®'`:_itér³u}™þVÆ¿œ™2ÿfXrüÍüµn€¸:[R–ízjþöz5ŸNŒ~§Y+åÓI +@[·0_¾€§ +ÀQóÿû噤8²Eᨩ*¬0Þ{d@B$®¼¯6ûßÇ»™‚y=¿§#:*'¿dĹyLëŸeÔæï +˜¯4{‚4ÓtCÇõoÈŸôOÆi —ÀP>???Þß^ž v¾ëXó).€y."ýéÁß iÖÊ?Ü=<¿¾~à^‘ì¼õÒPÿY©þ„¬À ÀVþñþ éÿýÇïß>°¶0€v @ÐÿŠêO ¸F˜t¶Ô覆ãîŸÞ>¾ýøñÀëóÃÀj©ÏpäX(€×´š×‘x’+ÔÚCI[¸»Û§·Ïï?Â|¾½<Þ·›Õ@« +§€,à.¯¡Â P Ç?>¼~àxý¡ê3iÄ·P$p úèŠ" ÀCÐ\c ø àùô·MMÐ-ÀX`úÙ”ßÄÅé"`™b -Á…»¿~ÿö5€Ç›kª<t› ?,@Dèu +ƒ°ÙR­5`¹9À||~€<ǘIßnTŠY6§@HÿKÐ@ŒI±¹R.`Ž/àõ ÀÍvmi¨þÕÊùLëO €Nßþ(‰Æ≇/@† Øß=<==Üî7¶®@ý«‚ý§T¸øüýCa?‹Å™ó€¸»ãíÝíÁ_Yª8h׊PÿèTÿ¯ÍÅ?åÒ©G0Lò|Úbåíö;ß]êŠÐm”s8þ¡ÿQý¿0èÿ'øþ >Ã$ÀPëÀ0í•ë®–ÆlÒoU Ü9þ©þ_—àÏÿ”?øþàüÉÄ'H±YXƒýÉtnZ KW%¡[/eÓÌ9þ©þ_•@~¨|ˆ«««s÷O¤Ò,ÇqlN€A1Pmñ‚4U5u*A¬ä¹d,BõÿÚœ"5~ „@ß?‘Ls™,áÒ)8hÉt¦Piv£‰(Ž 2€­_TùqåƒÎFøû³™\¾P(äsY.dâÿc¿L”ÓF· \Ä »@lZBì!±ï›q’›yÿǹ}~ œ™ÌÜL%cRÌUW9v쌿Ó}ú$p ¤³ù’¬¦ÕhX¦¡JE>Mò¿gücTøSdtvöÁþ…’(ɲ$ +Å<ŸI'tP˪¦ëzE‘ŠÔøsÑ¢Îe8•Ë ýK¢\VTE‘%¡H |HÐ( + Y +¹ k€!ÿ» €(Ûù¬ò‘r¹¬V4M«(²Xb@ë…€ß ò4ñ( €_ýBý¸ØxŽ%hçŠØb÷¿fTkÕ*¢^¾D€_PÙuˆbðàŽÅ6@4Ž®%IE¬~Â_«[–U¯Xö¥‚ßb8Ø è¿O!ÿ{Û€,Ú–>²ø­V»Õ´0e±˜§C€à™]‹ˆ|ùDüøk ÉñAV*ºnª¦Õlwz½^·Ó²jºz]àÿtÕ£?äϺl€L®$)ð½Y¯#ù­v×8Ž3°»Á ò£Æžýñ!ЇÐþ÷®ˆ`ä…rÅ€ñ‘ûN·× ½Ñhä û˜€ª†ç4 ùHˆÿÞð§ WªV«Û{X<ÍÐ|:ö;MSWÙtpáÿ«ûP?)ÂðG(JªQovûCÎ'øËÕj½^-çÏéa Tdá:!ýƒ.ø‘ÿið­Öèô‡£éì×ëÍf³ÝlÖ«Ål<´;šV +lÂâ÷/KZÿ°?—Í3þVÛÿÅj³ÝùÚn7lúþ áü;tÝþ°6WdU'þø¯·ûÃñx<öûÝf½D pì6­€R.“ŠGŸQ~õ¯êçlÿ ý ‚¤hÕz³c;ü¿ÝO///§ãa·eüý¨ˆž»T€_ýBýŒ"oå?Åñ…á7íÛÿÄÿå ½÷»€·Y7T‰èS¸î[ì€cí/céﻟð{ãö?ü~}}¥Ø°À†ÿÁÿëàW¿‰P?*Ÿþ¥üÃþB¹ÂÂàŽ&³Å’öÿé… Àé°]ÍÇî'`MW¥R>Ë%ãaܵúÀÏʆ쯛l÷qü­ÖÛã~=ƒÿn þ´þJY,’ÿãÑð¸_ÑÿðHîgå?_’+UªþÌïÓ?Pÿ£p:îÖ‹‰Ëî?E*øLÈÿŽ‰\ñ?ùøS,þµZ³;ð&ó%£<ž¨þÀz1œ°.Ë¥1–ÿáÜ\ ÞO>Ü~¶úþÀö'"þ[½áx¶Úì>‘?ø÷[øßcüeÚþ©ìò¿"¥}ªúÌü‰dø ‚¬õ–íNÔûÙáÇôr:ö»ÍjÎòŸøç(ýc„Ÿò?äÿžúú‡«þþüññlñ3ó#ûÓà/‰eZÿ}wºÜÐú?BTýÏ,ý·«Ål< üŸËøéïÛ?äÿŽú=p_ŒÞ#}ú;ÿo†‡=ðá}2ŠË𠿪×¾7]íŽçŸ>þü p¦ø‡ý—ó‰çôÚoü/éâG]5!{ÓÓEßÝÀ˜ ßùÏÌù€Oô³¹|QeU«Ö©þÁÿÇó§ÿ@4ý×°¿Ûï6ë†*¿ü‡øßWo7Ùõ9€þLôàÝX,úýöVõÞ†'0>‚? ú|¾P¤²ª¦Õê]ùùí à•¹»†ýGŽóOW¤"ùÿÂÿ†ÿ?vàŸŽÝA·U¯je±ÀsÿÐþï,âÿ”ô@‰D"°.—á¸tŠ5qš€¿x†ß_öR‚íü,¡/_"úzµVo´:¶ãMëý‰à‹Ï¿eø=²¿©«8ÿx.ùßBŒ?ÐщÆeH˜³¯‰_>Ÿã³+c‘+~ßó¾(õÑø|ôrYQ+Œ¾Õluº}ðŸ¯p¼~úL €øãô›Ž\Çª¦ˆEvþEŸÿô%Cý£òùÇ“t¢å …ˆçx(Gæ- P©Ë¦1ßâ +?-‚2Y>}`å±ò‰¼¦éºáÓowzvßqÇÓÅz‡ ðã'èõ|Üo–è~  ö +üµþ‡þo èÅS\–:º$I¢(”Š$ÚÚe’ÅRCþ®\Î=Öb4A<Ë{zt)(|ÕšiÖ!«AÞý3tG“Ùr³;œ^Îtýaý¯ӑߨ”Å"^Œâ?䱈'9¾ `MW*U)˘DwY©h¤Á”y:ÉØøJAñ§ôO¤€¿„‰aÂ'µ¢cáÃôP Ö}Àº®7OçËõv8žNG”ÄÿÄô|üR öGÜD¿ww„úgD à)–àø¢¨ ¢›¦Y5t D¥Í¬[–e¹”ã’l |-vö±åŸL#@ÄrY_5 2ß´P÷í>d÷zÌû®ç ñd:[¬ÖÛ´eÝ4ìwš¦Û&ÄÈÿŠD(RÙ‚¨f~m5,³ªkµ6bØé´›Vµ"ù4»Ê¾’öþ Ša"ê›Í†E™¶?‚¹çÁî‡õÇ“1„˜/–+h¹˜Ï&ÀOé¯)’ü蛬ý‡ñQD\NPŒz« ÃÚÝv£^ƒáa@ì‘Û–¡Šl À™ž|¿ùsÙì¯Õ¬6žÁ¶{ÝEþ`8êédŒ€\²þt:Á LðýÙ|N?CõïãMk¦èãíK± Ìd­Þ¶‡ðëp`wš–YC}³|±Ÿëº\â¹d<>w¦XœèÓÁ—/IŠn6»}ØOá ÷Ž7ž-–Ëå|Êàï½ ÖÀ˜þÅS÷{íEBѼâí3áxŽ§yA­µlœg0¥çô(õF»7p±´ÑК5U, DÜWJ¦ˆ~Ý_`ü{úýœBžw=týõÆßñ®çÀ{®‹ï8¤M«Q¯ê–þtÂïÛ?äÑøœàò’fu‡“¶29­dL€ÕìØ°ñt:vK/ yôó4 ûâÀ>Ëçpù¡ü«z­ÙuF„|½Z̈òMoƒšG7žë ‡e~ÂJ £_Ãáw?LuÿÿMEMd +²ÑìÄk5;½V#€áÛz:Ú­š&Ã¥|Ð}å{AÀ½¨€¿Õé{Óåf·ßïÈôXótëý—ý2mNë‚paÇ6«Á€ÙX$„„Ø;ˆÕ™ÿÿ{Þ>÷ +{¦ÞO3Áž9O¥¦â¸2é¾Ý}¤Ð+œTbB}ã]ýôk‚䉅Áòÿ^p<<…b¯Õè9Ëínç®çãž%: Na°#Ãív³ZÊgR¯©””>Ÿ/‹t0Ôu³;šâ;ìwîf9söžÈÛl·Û¦…¿mÈ[£TÈeðø_¢$¿Ÿå¿dlÀT±nf›ýñ¸ß.œ~G Ù"`ÈQ-´U<לGþ¢¼R¡{A­‰¯­Üýá°ßBtG`µ^¯æΰkº¦é-xÀúýxüP?Âö“ÏŸåÿÍ„_Òåfg´pçóÑ]M£YSq´L`ŽaàŒ(ðf•2P!{­.¨ÕÚÅð»^P8S¹hTh |Y£ è:~îÉO?–êóó¿ ÒñŒ¢Ù“ÕîôövÚ­§Ã‹ë´ë–pÀ°gQnׯ4„œ@ךMü¼E_‹ +@¸è}g<ÆE€+p†0õ†JAËÀ-ê5ûcþX~<ýo†ïîþ!‰g½ë¬çŸ?ÏûõlhÃP«.‡ýŠn9§ÒÛ0„æ:¤7èŽ\óÌÐîôÇóµ»ßSL'£®>…¸!à'U) ÅuF¹\¼T¿”ŸÔ—ò³þ¿i€D¶¢÷¦›ÃÛ|2€=tÄ-·Âb¿wmš[èòŽÝíõûbÓKˆX¬ÝK`Œ½OgßhØ·ÛZM)æ²™L6‹õËeÓä'õYþ<¹J 8^ Ш֤Ö[w‹knŽa=‡¤9ÀM7BÌG8€j@§›a*/?¾¬‡ô{¶©×+Å\ú5™LÊ"™ ðG÷_ägõo†0Às"Wõ @€ Ðj¨ÕJµÖ4Èw‡ó)€-0ƒ Fð@ŸäŸLq"BjÛli˜¢f 4Æb6öqïV[oTK9|±XìÄbÞð¯~–ÿVøî~ÀIi€ÃÛÏŸ§]¿`ºÜ`ØaÚí(°°ïHwl<3\Ú‡p€iÆrøQ.˜f›6ƒV¯–òé${‘p„‡Bâõóð¿=d€àÕç··£»tú–ŽCíj€íþx:ŽGé  ÷]³Õ¬×jur@Óùe¨5ÄÉWFÿ'_žQùþ§§§Güx$õ/åëÿ6¾_ à¬vÇÓq¿™º˜í28û­8háOPKÀö,@UÕ:v€ec!Ú–¡7ð=Ê%yò‘þòÕKî/ËÿÖÿÿu|ïÐ,ÝÃñ஦ò +$hÂÛ«Î'a1ñûƒ!2`Ž0 €îXÀh›mƒ ¡”Šù\†N¾é/¿äŽï¾/ÂÕÝ/6»ýn³p°›jõã8èª9ñí.‰3:ãA Ë(ŠRU1š¢ùËxû¸ý/1l~1ù…ðžö,ÿ—À3@"§hálµÝâ}ûŽ€Š" Ð8‹µ»? :¶«…3BÅ[–Õ! ŒÇ£AÏ6uü ä}±TÆŸ«Â %ýP?úŒõ‡ø÷&ŸÕÿJøä˜È–f2_­!/&ŠR©5[V<[n¶în·s]wKGV?&žÑ2 }ßëõ0ø)Êü\.Ÿ/ŠÅBžä¿õÔþ|ñ}I¤"ñt©Ö²‡Î|Ž×ïØ€ˆóŠÚÐÍîp2[¬Vëõ +ˆÉ'ôoizúÞ2Í6úç²ét*•¤^ñX4BÓ_È/õ¿õÿ.óaø%U¨jfo8žLF™çJ¹¬PXøÔ™Îf³)ÚÞq&cô?&¾ýµZ£©f£&‘ŸˆÇãôŠþˆ÷ø/ò³þ_ßÝýƒ?MfË5¼öþ€úœò\)¥Z× ŸÁ`0èøZ]8¤, +_Å`DügÓ¢ñ£Ï‚HX6¿xü|ò}]ÈOÁçx*¯Ôµ¶ÕéXm©UNh¶ð©mã7õå¯5¨ð ^ã‹TùÙô«˜ûá zÑÿpUŸåÿšø|÷áh"SPÔ†¦ëZ“.¸b!Gò˵ŽªúfCPW«bã£ïSTù™Œ¨|qí‘îàé‰Þ¾÷øyôe|2"±d&¯Ê=jzÞ 2A:#îº IzûtâQÕ_x¯|¡¼ü,ÿ7€"àáÉ ?G!xBÞp1oÌGc"äɱw¢4ö„æW>U>«ÿ}ð <>‚aÄy4*’=,×|(–!¡Âø¥3? _t½ÇµòYøï9@XÀ/G\@Îy àEüå¿7ó½…+ÿû `GdùõŠ»p‰ø_y¸äýýïŒOXøñpáÇÿçþ=ï¹òÿø„ÈŸBýîã¯î>¿ù[ÿÅ™¿ ïÿ9Ô}~Á/þßÌ_ªü×Üú¯Êüƒ°¾ Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã|[þ'ÀKÐåC endstream endobj 747 0 obj <> endobj 803 0 obj <> endobj 805 0 obj <>stream +H‰ìÓAnäVDAéþ—Èðä–šìOfýTÄ– óooÀï¥a¡÷OÒ×°Æû‡N丯YÿË÷Í#†û¿vÿä{ð@Ù-<¬÷ôÍüèLVaç;×UØáNfv8]K|s:«°3¼P×Ö÷6뢺¦\U×ÛÝÑTØ[Ý–TØûÜUÛ[dªŠ{­hUi¯‘Nú¯ô -Ò¿J/²¿tÁ‡ÒÃì,Ýîéy6•ÎöŒôFûI{Vz§­¤c’kéP‡¥ÛB:ÒéÍÆK:+½Ûlé:/HO7YºÍKÒã•ó¢ô|S¥»¼,=àHé( ¤'œ(Ýd‰ôˆã¤ƒ,’žqštUÒ;Î’®±NzÉIÒ-–J9F:Äbé9‡HgX.=è é +ë¥ Ýà +éMH'¸BzÓÒ .‘5.¶úõoøÅ®÷§ÉoyÉ/tá®O~Ï[~™«F=¾ö}oê·|Ëu3ßý¾& j]ºpæ­Û[”íâ]ïßÎÒˆ7Œš¿` ×½xÒ 7̶aÔ#w_}ÆT=rý·Œ²qÓg>!pÎU¿ýŒÐ=iQ¿ù’äEA-Q}Lú¤Œªª&Þt¿¶ª&Þt³¾¨¼­Ëšþ>Sµ’ª•dí$k¥YugIV]§Y“U×aeÕu”UUuEÖJë²ê:ǪºÎ±4«®SÈZimV]§µÒÚ¬º!k'Y+½”PÕ©^þ1Uåtϯ UâŦŽôzUYRµ’¬•d­$k'U+ÉÚIÖN²vÒµ’¬dí$k'];ÉZJÖN²v’µ“¬¥dí$k)Y;ÉÚIÖN²v’µ’¬U•uǪʺ Y+ÉZIÕN²V’µ’¬•eÕu ǚʺƒÃMuÝÀ©ª²w®ª®ÃÉZIÖN²V’µ“¬•ü®tí$k%¿k'];éÚIÖRºvÒµ“¬•ü®•d­$k¥SYuî\UY§Óµ’¬•NfÕu8Y+ù];ÉÚI×N²Vò»v’µ“®d-%k'];éÚIÖRºvÒµ”¬¥tí¤k)]KÉZJ×Nºv’µ“®tí¤k'Y+ù];éÚI×J²vÒµ“®•dí¤k']+ÉÚI×NºvÒµ’¬tí¤k'];ÉÚI×NºVz6«®{‘µ“®t­ôlV]·òtV]wò|V]7r «®û8’U×mʪë.ŽeÕu³êº‡£Yu݃®•gÕu ²vÒµ“®t­t8«®[哬tí¤k'];éÚI×NºvÒµ“®tí¤k'];ÉÚI×Nºv’µ“®dí$k)Y;©ÚIÕR’vÒ³”ª¥d-%k+Y[©ÚJU€ßäY¥G@ endstream endobj 834 0 obj <>/Filter/FlateDecode/Height 526/Intent/RelativeColorimetric/Length 11417/Name/X/Subtype/Image/Type/XObject/Width 472>>stream +H‰ì—çviEÛV$9çTE‘3BmÏû?ÌœûU!pÏx<=d÷œýÃx ÃÂl{ïùåB!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„ü(|8ðÞ„ü|øŠ÷þ4ä*?‚³³3yø³tþs"Váô\!núÞt~üxPN³? JëùÅÅ¥pqµ¶Ù£g6O¥“˜ƒÕË««k‡Ãq}}uya‹µœž½%ù$Îïý™Éw±µ^;œ.·Ûír9aöÜÊ¥²zŽ$K”¯€Š3ÅþÀžhuº5¯W×½Íå±ê‚RR%Ée‡ógŠýÑ‘¸B«KóúÁ`0à×=nK¬Ì_k<;%Êp»œŽkŠý)Œ´jz ‰ÆbÑpÐ'b/d—^ØãYó Ê>€8»1§•Ø÷þàäk¾.¢*®W·Ç’©t:@¬ëZ)ÂzítAªîó‚! ø¼š<ÉÀþ(|øØ®×.?Ogó…B.“ˆuÍ)b/¯N·GÇ|–(ÇA, +è"–}o~%ñë'Èk(–Η*F¥\È$Â~ÜNWÐ*[7ŽÆ©t&›ÍHœ!ÖyÅÀ¾ÿÆæI=S/žÂvzü‘d®lÖõj¥ŽuÙ¢×JkV“åb©T*äÒ‰HÀ+¥×wáÔèÙQ§UE/UµºÌ™Œao0ž)UíN»Y-gaŸ†»CZ#1±Z,fµZ5Êùt\žU}ïÿãÿG¥¡¶Ï+©¢ÒE¥‡J_‘ç1†}ádÞhtzý^§iR b§ìVh§2°jÖÍV»Õ¨Vò©¨–ƒø/åS˨åÓÒ Ÿ(¢h¢‚]DÏ¥¢:44]¬¶{ÃÑ°×®Ó0‡àB÷ ÇSÙBÙ¨5Z›^¯×mÕ¬8;.Ùaÿ2NsªÊ§%Ôaù„PMó ´^ævâ6‚YY¯X¦Üè'ÓÉ°[/g°`5—KóúC1ÑjÖ››Áp< nšfÚ=j<Ö%ò§qêô\œª€Z>¡S|úüvµ‹¨ˆ½¸Të5g´úãÙ|6î5+Ù8¼âE¾`4™-T°w»}8dz“´gã!Ýí@‡=˜¥Ü?ÃðU³9ÅÕó&ÔçóA G¢è¡‰DÂ*¢ªÍ\«JäÍö`ºXÎ'ý–‘‹‡|Í#S8£´Þ FÓùrµZÎÇý–iíßkk= Ó{C¬¨ÚÃ×vªaâª|¾ùŒ'’)©¡¹\.+ET†­“í5œ,Öº#¨[Lðšù¼ܱT¾\mvzÃñl±¾ÝlnW³‘Ìix·Ãn5&[í{ ŽÕ²*RÕì…T8 Z>ÐdR|fsRBËP.楈êšç”SóER¥úÍx±Z/gÊkؘ‰lÑÄ•<œÌ—ë»íýýv³DžMœÄò;ËëJ®ê‹‹7µïýüü|øJª²zy ª? +#¡*ŸP[(:h­Þh6õj¥IDü^O§æ¤KÞd¹F mS¼êºMùJ½Óà ^ÝÞÝïvÛõ\›MD‚ØÏnܪÊd«eh‡ÉB5eõ-¨‘h<™ÎˆÎbéDh«ÕéJ]¹é¶êFѧ8•=þh¦ÜìOW·ð:l›ùD8àóI\Kµ6´.Ö›íîáñééaw§[Ì&£á ß'gµ¦*“º¬y!ÿ.sWn$ 5€UìD‘Š ¦³ùb¹bV«µZ½Þ€Ñ¶í†£ñd2û†qªzªÛˆe+­ÁlµÙ¬•×d$ˆÄÇR£y3œbß_žŸT`F1›JÄ"aœÕ–\—Ý™ÎxDý¯œžH6Ö¥„¨B†J*¤VÌZ£Ùît:]`KWY,—ËÅl<è¨ÂâCÜÜÞ`,kÀë^çÊk4 F$®Áty+a}~y}}}~ÜaÃ: ³\ÈfRIÜÕÑHX:“ýúòdÓÒìoáx"ÙýÔB¶*–j;5‘Êä +e£Öhu{ýápda],WrÕÞmnת° —~lIM—úÚÎ-¯j! #õ×Þx!ZŸ^^?—§ýV^ÚmÖÌJ©Ïe3éT2ÃLÖ=n×aóˆúmØ'ÒùÛ‰„‚ª©?ÔÛQ-›µf•s"*s!¥wwÛíýn·»¿Ã¼íÖJéXP—¢Šç̯ÅLwtRâ:œ­·{ ë§ÏŸ?z}~¸ß¬æãa¯ÓÂíe•r©˜ÏePšBʬS.d[-Íþw£j]¯®û,üj«ª¨–*–U4β‰Îy»^«”¢§ìv{\µûûÍb|ÓPƒØãñøB‰£×|g“(»i‰ëd¹Ù=>Ãê—/_Äëãn{»šO± {7v«Ù¬Kró™Ìt9‘–Z˜¥Øïc`+ªoRøÀa«ŠÕF»Û—öî÷çv«RªŒ>*àu9é5­¢Š·‚W£» ÷°ê1ùt2™Î•­¸>ØZ-¯ûû»Ûõr1ŸMÆ£ápÐïuÛÍš³’Ù€ñwÛ籊ì{o?6'VUìR_@vi<‘‰$jªDÕ¨b¯ª°.7[9aŸŸŸöŒ>¥õAyí7|òèµÕÇá»^ÍäÜÅQ”ÉÆÍx¸¾ˆÖˆ×—§Çýn»½“!°Z‰ÝéD†²e6Ê ¥Ëy,f)ö;ØVíŠêÑíUŠ~ªÀC¡hIEŸéö”Ö{ëÖyE9ÈG±ú¬¼b +Ë~]Œí¼êâ5ž­àDš/WËÙð¦i–ò9_µV²¼Û?½œÄU^l#~7·«Ål³*¦±”Õk½šK®ãsŠýœXÅVET±Jí~j˜¦ifµVë¨cÂ{‰™uëˆM(}–¿<¨Á¼Y/§CÌÛ¬=‡ƒ±L©ÞNç‹ùdØmVËÅB¡dÔQrVâõõóáäåÖ’–Ø˯ˆ¼×lÔï¶U£TÈe¤×b£÷\Kbéõ[üÚ*¢šÊ@ªQ­#žB³‰Ç¶(í÷è©“*§3±¡k aU´œÕb:굪¥ î&¯Ç£¢©‚Ùê&Óɨßi"{ÅRÙltQ^Á—÷±Ò +¯2á_À3~„Cj9Ã0†YU~×±æ¢ØoóVe8–HcDš²G»"ü“ýòlj#Í¢ðzPÎ9爄b+£ÙØÏüÿ¿²çÜ÷UKÆީݪñÀº¦<_ é§Oêâzà94 NUc<%W¶ØÏÚˆå¶Tª”ôÙn«^Ê&ÂÜ9ø¹ÁX¦XowƒA¯ÓªO¡Pª6Ú½”ÿð¨‚z'?€ \ÕžÅOß=>¬v4ì£Am1²‘ Ïí€bQžN\rÄ*bµ +U0¤Š7~¦ƒ¡1ãFrãñ'ÿ®(à M T1Oâž9›Œ 2¸©—s©(lØaGbû#X5uh¾sÛjÔÊX¥hÖõVgK_mÄx uÍá„ž-þò…‘û‰åún>…ÒDÛ¬WŠ¹t"ô¹ìÖË“`vGbµ;=Šj¡,ó–9Íæ(:¸ÿ%ÿ˜ +Ù‰€•a³­ „ö;‘å aÕ«¥\*ò»±8mv +6•/£waVËŒ×<Ûê`ê‹åjÍãOX,î–ëͬZ>ˆØÅlªº1äŽrœÏ$"A¯ÓvìÏNÄ +¬J¬R-Vê*^ölŽ¼Ò·Tw'j™kÄIŠ9ß{û¦YG泩XØÏ~c…û}¡X*W”V,äP‡9›è ½1žèïð¦ÓÙdöãó³òaZýy‰ÁÓ +òé8,Þ¡ûÚïñmÝ¡[å½G“TT¼è!}vµFÐÇF4©ÉŒ'32šˆW°IBmÔª$‡â Ö««+þ(†ŽËç5•Ä¥@¶ ²í³Û Á<±ù%ËÐ… +¬2¾Œtãf­”KÂã×'®/NS…XµCN¥Z“T!Eš,#OÝQzB0ä×g-æ ø§T«Îm»ÕT5›N%âÑ°^#—–Kõå ’%4Å¢ÑX¿ßïóù¼^¯ÏçÃÊ–ö\Ý2ã—ˆéÍ-ž=/÷xè•\Ó'®/ΤzÅFãòø€5…ÒîsM’*ÌaÂ0_U¶B¬ªAš¥b¡€¬Ì²e2étŠþª™zÜ.§ÝvM±žŸŸí?!§Ó%çä?ÜÄR·„›Éd³¨ÉBXÅ.­¦ßí`s»¤cýŽ§XÈ{òáöÕF ùdÞ [[=cz‡"ú´ªÂU6åZù‹ô"6Úô±'Ój³/NÖõÕ{ïLÚƒe²Jû€VAµÓcKšßë\§£>§aW“ÒÉ®DÇs9•T_ê¯îáª/ÙéTÞA¬ï˜«`¥;ô¶¡C«ª"-–R©×þ-M¥\*Ù9S %U—¤*kÒê?úôöM^mžöŽV…ÕŠ¡˶£ ©.î®KnÕñ Ûn 'åsÙL:•€KW‚k©j¨¯ò'0H„ì%ë±ÞXï«z#Àjsxüáx:_Uðt¤r‹ÅbŽ±:ìÝÞÔÊpßd"έJÖXQý§•úòÏøMM9íï+‹°Íé DÙâ~Ú ¯è¿h€Šý:ìwZõJ!‹©Ñ“[õòð +_÷%¦œ~¤×|¢W<L¨’Ě̕ëmP%Ôõzƒ[¯– Hud`»vZj1—’­ŠTýÁ€_ûoù—îÇgG+ëµéuN§’倵q;ÏîVëÍýýî~ÃÌáÚe®–òéD4ä×RUÕä HÕ<³ÿ3}üžéÁV»ÓK¬•fg8]¬6Ûíããv»%×Ål<ìwo[7Í:k6 ¼.eÀo*ïÃá^ûQ^ëöã³Õ%XËÍ®1[ÞoŸv»ÝÓÈ>ܯ—œ72[¹XskÐçvØô®yÏf÷Vo­Ø7.oPL¸cÌVOŸŸŸ?}Ü=ëj1aÞ4IµXÀfG Wûõ•åDõž˜0£Õáö£Él©q;œ­¶»ç/_¿~ùüi÷¸%V¸0°ÖH»5-6ì´Y/õ8E£Ølš¢¨4Ä××J¼4„aNùaÕk­îpº´œµçy›µ^§ãa¿Ûn‚Õb!ö£$²úøøøô„Í"°h¢5@àn…ó&Ãð¢¢AX¡Z•ëmaÞnk9{Ø*¾n²™Ú åØl,Žfrô ´¯áS+Þƒk­Þpº°œÍv8;äu +ZU]•a£°&p2"x~#³ˆ'd:B´_k*à +°0A³Žç(¬»Ã @^Íù¸ßnø#˜¥ïÛRÁfA-æáh ¸\ãЭ µÒô›u³=Ï—Ëyµé°Óð÷%´ÿ+þc_íƒ/•X þNR /Ö„Õ^{{°z½^ÁëÖµæãºY%ž…fMøÍú‡ÂÈo¾ò;>Ÿ2ür¥9±ˆ´¢f…|¾^ŸŸÁëÅuЮéH+šÁ÷°þå_}Õ—îü1TÑxÊUÑH«ë‡õ¸žq\GÝz¹ˆµÞf0qH>+Ñ_wžü¸J¥Zg4·ÖÛ[X‘Ö#´ërÒkVÔ‚Àâ£õw³ÆçuâÆâ)Šd½ÙŸšîöpëõ|Ú{Ž1´«¥ÿjýê/ ültÆbñ‰dšÎ‰jµ=ZØÞጭB·ž{MáN]Wò¹,•Œÿ¥Z Á×'ÉÔ4E³|A«w'†»=^ž_^Ð †´.ƽF¹(rw­d¬5ƒˆRšÎfiD–åDØš` ¯w§+ò +Õºßnk1é·*ªÄ3TŠh 2謭)Šfrp>_P+­Á̯cÚo׶‰´VK²ÀÂÝÃZ¿úý åv­¦2LN%YVd¹P¤‚¬êµöpfº»ãåzEZ½µmÌÇývMƒr¥ÓDk ¯Ð­ •墦—+•²®i¥’V®5»£Z‡O— Nëʘz-ЊË5%Z Žk’ÊBŸj•z³Õn·[ÍF½^o´:ýñÜt¼ýñtÂCk­"­ Þ™`þê·'ü/P»B\Ù¼¬U[ÝÁh<†ƒ~¯ÛëFÓ…ål¶ûÃ~çùZ›¾ÖL*N¦p Á[S"å$µÚêf Ã4åb>L&SøÍrÖÞv»õÜÿj%åpP½ÆÃËz½;š›öz³Ù¬]{e™(¶l?pV·!,­¡àîUPÊM¸VomzØo½µë®ë®]׶–¿»õ¦•”kÁ^““W*­á|µÙŸ¯///Ï×Ë JuëATÁïÊü›Vâ5Àü‘WäÕ;^_ÿy{{ûçÛ‹¯ÖC3Ø\LïÑn{ôk³?C^¿½ýøùóÇwdö|< EØZNIZÆçÐœTªu'Æzy¯ï ö ‰¯î +a’Öp‰î­a¬ÀB`ÇKgwzþlØóq·q¬ÅdЮéE¢5\À ~ŠC`EoÀ¥ãç—WX‰ÏÇýÖ×Ú©—‹O´†Š[`éœX¬´3ÓÝNçó–a°º2æ µQV%ž%Zà +,œ°Y^*UÛÙi¯½:]]Û2æÓQ¿]/«¥Ó‰X”h %†I,kµÎpº´lÇqV–±˜‡½Nº•h !X4‰óŠ^ï &ó¥a,³É¨ßm7jå’"!­É8Ñ*"~`asb±\ïôG“ét2ö;­zU/)…<çk}"ZÃDäØT†á%µ\o÷Ãá V+º +Vù\6ƒµ>­!i¯X˜ÄBĶ:Ýn§…'0²ÊÐlÂDk¨ÀVA+xEåD¹T®5šÍ&Œ`Š[MÆae"ZßUd5¯Íò’R*WkµZEGûÁ~X‰ÖЀ›õIÅã‰d*arˆÕË岯•AÍz›ÁDkH¸+HM$’ÉT*Me²,——µ¤•Ô"t+ÞƒcODkˆ¸kEAMS˜ Íäø¼$+Å¢Ra +£‰ÌàpáŸ7ñd +tf‘e‘Ø +CÎÖðqך†á›Ëq\Že°Ë€X!/Šycïq%ZÃÖ +G+E3‘H¤–±€V´4E‰Ö0ÊiMÃiƒ +UQdén–…üÂX+‰kxˆ`ÐN ­¢ û¯¦©EY¼GÈÒ·ËÚõ«_˜ð‰ÜxÀZS†‡{µ\­ÕªeM•%‹Z–¦3Ê×Jâ|£Àã£_®YNT´J½Ùj5ëU‹eQTÁjŠh ¾T¤ˆ¢U˜ÎååR¥ÑîözÝv³bE´Ó8¬q¬õ_öËsIq, ÂQÝ]Uxï½F rH  jÞÿYö\ ªwçÏÌþêº7ŸàD|‘™' ×ï® Séëëè= R¸Ù13–ãØ‚-ä2P­1‚…úŠˆF¢Ñh,ŽN¹ÞÒ3nµ^¯ó [-‚!XñÐc°FÑD2™L¥³ùR­ÝÏk~+ðë%€í·P±™`¸¬8(6Щ‰T*LÔ|± åJM¸õv/Š{a³œ3£^«^.dS®ë·WèVÔ©Ù|¡X*•Ë•Z~&†] ¢¬¨²´Û,gô°Û¬sןd¹~!»"¬Ð©¥JµÞh4›­v·?bæË­¨t]S,7¥ú­Z)—NDß^‰]1P‘X^%°i§Ûë÷ûƒÑx2_ò{E;š¦¡«Òv5§‡z9¸’ÆA×h" ƒµÙé©1MÓÌdÆX ˶-CSön2ê6€k<äú§¯&ú…1CƒµÑPÌt6gYn±„—IÖ ût:9ÖQùEÀú5B¸â '×l±ÖêS“9·\­7~»„Õó<×1âÚ©—××_$†¿¿¾¸ÂbŒgÜj³v{Q‚ a=_ΞcDžc†íZ1›Œ½“· ý—_Ûz¶ØÀd…qT-Ç=_|ÿâ_÷–î7+_oÓŸ¾šèÎœd¦XmõÇÀ6«ªé†iŸÜ³½Wû¨ìV3ª‹b8Fb=ÿá|¥Ù£&ÜZѺ³zÿz»]/®¥K[Ž´ª… Y¯Øè±_S9T°ô|µEÊ` z¿ß®ç“yدçÄ®x úõÇ/â:ÝÑ„ÛìоAXï÷›ï9GYXL]ŸíJ¸~{½ ¿ qVÀõ‚°~|Ü|×ÒÄÍ|Üm”È3ŒVÄ‚8ù0ì‚«çßŸwˆaC–“aìg TÖwàšÎ—êíÃnöêqýøüü¸ûž­K<;î!»F‰]qÐÓ¬Öx2“ƒx½SB®P¯×ËÉPw«é—] ÖﯠZ³Fc‰d:[(ƒ_iöÉõŽ¾&hW°+Ýo”s¤]ñPø1½½GcñD*ÉJÕfwÄpa_`»Ï0´ëtÔ©Áv%vÅAG8‚¬šÉå‹¥J­ÙŒgáßä^üëõâ9ÆAÜ°t¯Y†íJ슃»5œ/–+µz³ÝŽ§ÜZ÷ëåröS“¶ x†‘]£äÆ@]ß"è]*VjV§ÛRÌŒ[oEU7í“ëy.`•…ÕŒê6ˆ]qp»ÆÐ\m´{ƒÑ˜™Ì¹åFíhÚÎéäئ®ìÖð4µ*…4±+zØ5•+ÕšÝÅLêšö’ª ËY†¦ì7ÜdØ©³äÆDÀÚ5‘)Tš]¨U6„*«šn˜pµÌ£¦ˆürJõå|°]‰]¿¿^®±d¶Xk÷á[Zñ;ñ7Ô«* «9=hUÑÓD슅\!†ë!3_ò;À¦…Šõä@µº*í …GÝz)—ŠG^ÉvÅAÿË•]má]2,½ÁðŸì …·`×~h× … ×o¯¯.ÕÚz¾z¬f+ìV×±ŽyÏ/¦áÆ!vÅF_SµÙ£¦‹ÍNÖ àzñ}Àžà–!†™a=Ãa»þ铉þ…~ïœ:v¶ä‘aïìûWëÚˆ+lWô5¥ð »â!â_(ˆaè4Ðç„’øhÎÿzõÏžcj2|Ãã^³œG1LÚ½< ›°]V†í"®×ËùdéÀuFÁ7œMÆH 㣗È°Q[ À²ë¬ƒaWÿìZº",§£N­øü†ÿôÁDÿJa`«ÍîhºàŃáx—ëív½¸öq¶¡^ã¤^qÒo°¹b­Õ§çër´C®¾gea1´*ù‰a¼ô›HçË.5] +²n{þí~¿\·Óo–s°rH 㤗ÇïKf‹µÎp²Ø†\?>î׳­K<;îÕÃz%1Œ“€ëŸÈ°™Bµ \å蜯÷'×ÍœêÔP½’•ƒ™†M¤®KA1N—ÛÇççpÕÄõlÔ&õŠ¥,±×ér§'ÿþù×_·³uد&ƒ ^aå»â¥¿s5ÝëÕ³»Óo”2 ²rðâúúà +9üå׫gªGwQ½’ÆOO®ùjkÀÀ? ê×»ï2ÏR*ªW²r°Ó3‡ó•fŸfyI³Ü`¿ž]Zφ­JP¯$†qÓƒk*_nô¨Ùj§Žç_¯¾ûx›JYR¯8*Ü9ñT®TïÀ€åŃyò.Ï1”-G÷êÅL¸^ÿôDÿ—^~s­µô|%Ⱥ鸮cjâfNêW!®¯oÑx*[¬6{ÔtÁïUÝ´mSW„ådÐ*“zÅR/?à~&Ò9àÚ2ìJºaèªÈ³t/\¯? WÌôˆáX2+!®ô|É¦©’°š:U²^±Ôï.”ë­Þˆ®;IQUy¿á˜~bÕ+±+fzÚ5“»vÔ„]m÷’¢È"Ø•êÂ7œ õŠŸžvEíÚèô©É|¹DYQ¤=¿˜ ÛÕ|š¬ \½‚]³…J£3OXHaQVUEÚ­Yú+† WÌÄ0<Ãù2Â:åÖÛ½¬>¾¦ù˜Ä0¦ +bø=–Ê•êí=C/“ªaääà®H ã(Ão‘D¦PmõdzåVTuòmËÐda9¶*ù‰a …bøÚµTïRÓåV:öÉõÜ“¥ËÛZ9Ù$‰a Äp<¯´ Ç‹Óñ.þåìÚºÌstÕkÄ+VzÆp±Ö¡f«j8ž½]/ž­K›9Ôë;©WìpB 7z4ËKšå^®7àêZ‡ýj:l“zÅS//hå$såfŸYleÝöWÿìŠ@ê_…oS +ÕëqµÜ³ïûg×Ò¤ ®WR¯ê±^\%Ít\ï쬣²C1\Í“zÅR{‡Õ£i;ŽmU¾aˆá\’Ô+ŽB\#®ìz'Ž†iúAV3ê?ì×ÇrÛH@Ñ¢˜sÎ9$H‚sƒ’mY²5ÿÿ1Ó Pòvf5Õš{6Ò’U·ÞÃëf9—ŒðyUëO×öÀ˜¯÷Öùr½^NÇír:ìÖKñy¥«zä3ç£k<[íÖé|>÷›ùDïÔŠâõàóªûù*ºfŠN×íþx:¬Ãn=7íZ!MW%9Ï×HBtí ÑUÎëÉ:ÒUiòó*ºF“ÙR½«OæëÝñt¹\ÎÖa³{˜®Jr¹nÏ×T®ÜÔFæRÜÃ×û‡‡û‹µ_™ânâûª"—3®öÙTm÷ùæp¾|z~~z¸Å;Gk”èª'«×/>¯r §ËÝéúôíÇËËoçýrÒo–³tU¨*³Šqµ×po<Û/ß^^ßÞ^_žïëé UÎ&誖Ϭ¡h"c¯áÅötÿüòúë÷ûïק­©·+tUŒÜÁNÖˆ×R½£O–»ó÷Ÿ¿Þÿúëý×ËÓy;£«rnYý2k"“/7ººü¼þéú|Þݺú½n]Õ`/a¯Ï”YÓ¹bµ©é“ÅÖº>ýxýýþþûMΫ©·äÝDWu80,²¦²ùR­¥éÆ|}8?ˆìÛ¯·Ÿß¬õ´ßïœßCWE|™œ¬åªèÚ"ìát}|~~~¼Z›Ù°Sͧ¢AÙõ¿þÁøGDW9®‘X2+”DÖF«£ dØÍÞ:_ï¯k·œôåó5Â9¬ûëG2k¥Vo4[no02ÌÅzw8ZÖa·2‡Ýz1cŸMtU„½†ƒ‘x*[ÃÚlµÛ®Ö—aç«Ív·Û¬fã~K®aÎ&uØŸWHŒk¾T­7ÛN§Ûíj½¾>š˜óåj½ZÎ ½Û(‰5älRÆ­k,™•—pGë9ú}dLgóÅb1›Œzíj!ÛŸWº*Á>›áX*'®â»ª ƒø3OD×ù|65t­Yɧb!>¯ê]ÅÙO*ŽX¾cÃÛ ;ëBtºr.¥«Bœ®‘D¦XkiúxbÎf3Óœš¦)–ðr¹\È®z)›ŒÅÙDWEØ]ƒ‘D¶Tï ÆSÑrµZÚV«µ°Z˜r^骧k4™+7´áÄyÙloäkç–{˜® +ùìZiöFær³;ÇÇýn»šO†]UsëšÊWZ}c¶Þ¬ÓédYÖÑvØo×tU‘ËåöøC¢kµ=0æëýñt:ÿ +ºŠyýØÃ>º*ÃéûÓÕ’UU¼kx-ï&y'"²«‹®jøèZ°»®¶ûƒœRy1m6›õz¹0¡Öª2qºªÄu÷Ùµ?6—kyoÖ«åb±˜Ïç3s2Ö{íz9—Š…>Ï]ñÑ5_mõFÓ¹|½.æ³édbãñx4ÔûÝv½RÈ$¢!¿×MWU|v­45}<5g¦Ñ‘>è÷z=MÓºV£V.d’ö¸r6)Ãé*Þ¯åz§¯ÄŒŠÕ:íf³ÑhÔëµj¥\̉¬‘ ßËV‡ì*Þ¯Él±Öêöƒˆ*F´R.…B!ŸËfR‰X8è·Ç•®Š÷°/Id +•z«ÓíŠI­WJQ3-¤R©d"‹U5.×ÇÇS¹b¥ÞÛ·V)å³iY3‹ +‘H8 ˆ%ì¾£«:DW·W|`™|±\­VŬŠªñ¨¨ +Ú¿ÏKVÅ8]ƒ‘x2“+È/j.“ŠGá€ßï»Q=n¹„ɪûp +„¢ñd:›uŽ¤HHŽ¨çƒ[D½#«bnŽÆIy&‰ +ˆªvÌ.ªªFvõˆ°¡H4Çć5hgub~ú¯&þ­[Ø@0·oØÙÁî;’*Nt•a}¢¬¼~ý~/WÒ—p ëõùü~çIãæIó¸ä*v{DÚÛ“†¬_ƒ +fÖqGÖ¯Ãå¤åMóåð¦ùª¨ +ÿ' 0ût× endstream endobj 804 0 obj <> endobj 835 0 obj <> endobj 836 0 obj [0.0 0.0 0.0] endobj 837 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +472 0 0 526 6485.5 7240.5 cm +/Im0 Do +Q + endstream endobj 838 0 obj <> endobj 839 0 obj <>/Filter/FlateDecode/Height 526/Intent/RelativeColorimetric/Length 11417/Name/X/Subtype/Image/Type/XObject/Width 472>>stream +H‰ì—çviEÛV$9çTE‘3BmÏû?ÌœûU!pÏx<=d÷œýÃx ÃÂl{ïùåB!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„ü(|8ðÞ„ü|øŠ÷þ4ä*?‚³³3yø³tþs"Váô\!núÞt~üxPN³? JëùÅÅ¥pqµ¶Ù£g6O¥“˜ƒÕË««k‡Ãq}}uya‹µœž½%ù$Îïý™Éw±µ^;œ.·Ûír9aöÜÊ¥²zŽ$K”¯€Š3ÅþÀžhuº5¯W×½Íå±ê‚RR%Ée‡ógŠýÑ‘¸B«KóúÁ`0à×=nK¬Ì_k<;%Êp»œŽkŠý)Œ´jz ‰ÆbÑpÐ'b/d—^ØãYó Ê>€8»1§•Ø÷þàäk¾.¢*®W·Ç’©t:@¬ëZ)ÂzítAªîó‚! ø¼š<ÉÀþ(|øØ®×.?Ogó…B.“ˆuÍ)b/¯N·GÇ|–(ÇA, +è"–}o~%ñë'Èk(–Η*F¥\È$Â~ÜNWÐ*[7ŽÆ©t&›ÍHœ!ÖyÅÀ¾ÿÆæI=S/žÂvzü‘d®lÖõj¥ŽuÙ¢×JkV“åb©T*äÒ‰HÀ+¥×wáÔèÙQ§UE/UµºÌ™Œao0ž)UíN»Y-gaŸ†»CZ#1±Z,fµZ5Êùt\žU}ïÿãÿG¥¡¶Ï+©¢ÒE¥‡J_‘ç1†}ádÞhtzý^§iR b§ìVh§2°jÖÍV»Õ¨Vò©¨–ƒø/åS˨åÓÒ Ÿ(¢h¢‚]DÏ¥¢:44]¬¶{ÃÑ°×®Ó0‡àB÷ ÇSÙBÙ¨5Z›^¯×mÕ¬8;.Ùaÿ2NsªÊ§%Ôaù„PMó ´^ævâ6‚YY¯X¦Üè'ÓÉ°[/g°`5—KóúC1ÑjÖ››Áp< nšfÚ=j<Ö%ò§qêô\œª€Z>¡S|úüvµ‹¨ˆ½¸Të5g´úãÙ|6î5+Ù8¼âE¾`4™-T°w»}8dz“´gã!Ýí@‡=˜¥Ü?ÃðU³9ÅÕó&ÔçóA G¢è¡‰DÂ*¢ªÍ\«JäÍö`ºXÎ'ý–‘‹‡|Í#S8£´Þ FÓùrµZÎÇý–iíßkk= Ó{C¬¨ÚÃ×vªaâª|¾ùŒ'’)©¡¹\.+ET†­“í5œ,Öº#¨[Lðšù¼ܱT¾\mvzÃñl±¾ÝlnW³‘Ìix·Ãn5&[í{ ŽÕ²*RÕì…T8 Z>ÐdR|fsRBËP.楈êšç”SóER¥úÍx±Z/gÊkؘ‰lÑÄ•<œÌ—ë»íýýv³DžMœÄò;ËëJ®ê‹‹7µïýüü|øJª²zy ª? +#¡*ŸP[(:h­Þh6õj¥IDü^O§æ¤KÞd¹F mS¼êºMùJ½Óà ^ÝÞÝïvÛõ\›MD‚ØÏnܪÊd«eh‡ÉB5eõ-¨‘h<™ÎˆÎbéDh«ÕéJ]¹é¶êFѧ8•=þh¦ÜìOW·ð:l›ùD8àóI\Kµ6´.Ö›íîáñééaw§[Ì&£á ß'gµ¦*“º¬y!ÿ.sWn$ 5€UìD‘Š ¦³ùb¹bV«µZ½Þ€Ñ¶í†£ñd2û†qªzªÛˆe+­ÁlµÙ¬•×d$ˆÄÇR£y3œbß_žŸT`F1›JÄ"aœÕ–\—Ý™ÎxDý¯œžH6Ö¥„¨B†J*¤VÌZ£Ùît:]`KWY,—ËÅl<è¨ÂâCÜÜÞ`,kÀë^çÊk4 F$®Áty+a}~y}}}~ÜaÃ: ³\ÈfRIÜÕÑHX:“ýúòdÓÒìoáx"ÙýÔB¶*–j;5‘Êä +e£Öhu{ýápda],WrÕÞmnת° —~lIM—úÚÎ-¯j! #õ×Þx!ZŸ^^?—§ýV^ÚmÖÌJ©Ïe3éT2ÃLÖ=n×aóˆúmØ'ÒùÛ‰„‚ª©?ÔÛQ-›µf•s"*s!¥wwÛíýn·»¿Ã¼íÖJéXP—¢Šç̯ÅLwtRâ:œ­·{ ë§ÏŸ?z}~¸ß¬æãa¯ÓÂíe•r©˜ÏePšBʬS.d[-Íþw£j]¯®û,üj«ª¨–*–U4β‰Îy»^«”¢§ìv{\µûûÍb|ÓPƒØãñøB‰£×|g“(»i‰ëd¹Ù=>Ãê—/_Äëãn{»šO± {7v«Ù¬Kró™Ìt9‘–Z˜¥Øïc`+ªoRøÀa«ŠÕF»Û—öî÷çv«RªŒ>*àu9é5­¢Š·‚W£» ÷°ê1ùt2™Î•­¸>ØZ-¯ûû»Ûõr1ŸMÆ£ápÐïuÛÍš³’Ù€ñwÛ籊ì{o?6'VUìR_@vi<‘‰$jªDÕ¨b¯ª°.7[9aŸŸŸöŒ>¥õAyí7|òèµÕÇá»^ÍäÜÅQ”ÉÆÍx¸¾ˆÖˆ×—§Çýn»½“!°Z‰ÝéD†²e6Ê ¥Ëy,f)ö;ØVíŠêÑíUŠ~ªÀC¡hIEŸéö”Ö{ëÖyE9ÈG±ú¬¼b +Ë~]Œí¼êâ5ž­àDš/WËÙð¦i–ò9_µV²¼Û?½œÄU^l#~7·«Ål³*¦±”Õk½šK®ãsŠýœXÅVET±Jí~j˜¦ifµVë¨cÂ{‰™uëˆM(}–¿<¨Á¼Y/§CÌÛ¬=‡ƒ±L©ÞNç‹ùdØmVËÅB¡dÔQrVâõõóáäåÖ’–Ø˯ˆ¼×lÔï¶U£TÈe¤×b£÷\Kbéõ[üÚ*¢šÊ@ªQ­#žB³‰Ç¶(í÷è©“*§3±¡k aU´œÕb:굪¥ î&¯Ç£¢©‚Ùê&Óɨßi"{ÅRÙltQ^Á—÷±Ò +¯2á_À3~„Cj9Ã0†YU~×±æ¢ØoóVe8–HcDš²G»"ü“ýòlj#Í¢ðzPÎ9爄b+£ÙØÏüÿ¿²çÜ÷UKÆީݪñÀº¦<_ é§Oêâzà94 NUc<%W¶ØÏÚˆå¶Tª”ôÙn«^Ê&ÂÜ9ø¹ÁX¦XowƒA¯ÓªO¡Pª6Ú½”ÿð¨‚z'?€ \ÕžÅOß=>¬v4ì£Am1²‘ Ïí€bQžN\rÄ*bµ +U0¤Š7~¦ƒ¡1ãFrãñ'ÿ®(à M T1Oâž9›Œ 2¸©—s©(lØaGbû#X5uh¾sÛjÔÊX¥hÖõVgK_mÄx uÍá„ž-þò…‘û‰åún>…ÒDÛ¬WŠ¹t"ô¹ìÖË“`vGbµ;=Šj¡,ó–9Íæ(:¸ÿ%ÿ˜ +Ù‰€•a³­ „ö;‘å aÕ«¥\*ò»±8mv +6•/£waVËŒ×<Ûê`ê‹åjÍãOX,î–ëͬZ>ˆØÅlªº1äŽrœÏ$"A¯ÓvìÏNÄ +¬J¬R-Vê*^ölŽ¼Ò·Tw'j™kÄIŠ9ß{û¦YG泩XØÏ~c…û}¡X*W”V,äP‡9›è ½1žèïð¦ÓÙdöãó³òaZýy‰ÁÓ +òé8,Þ¡ûÚïñmÝ¡[å½G“TT¼è!}vµFÐÇF4©ÉŒ'32šˆW°IBmÔª$‡â Ö««+þ(†ŽËç5•Ä¥@¶ ²í³Û Á<±ù%ËÐ… +¬2¾Œtãf­”KÂã×'®/NS…XµCN¥Z“T!Eš,#OÝQzB0ä×g-æ ø§T«Îm»ÕT5›N%âÑ°^#—–Kõå ’%4Å¢ÑX¿ßïóù¼^¯ÏçÃÊ–ö\Ý2ã—ˆéÍ-ž=/÷xè•\Ó'®/ΤzÅFãòø€5…ÒîsM’*ÌaÂ0_U¶B¬ªAš¥b¡€¬Ì²e2étŠþª™zÜ.§ÝvM±žŸŸí?!§Ó%çä?ÜÄR·„›Éd³¨ÉBXÅ.­¦ßí`s»¤cýŽ§XÈ{òáöÕF ùdÞ [[=cz‡"ú´ªÂU6åZù‹ô"6Úô±'Ój³/NÖõÕ{ïLÚƒe²Jû€VAµÓcKšßë\§£>§aW“ÒÉ®DÇs9•T_ê¯îáª/ÙéTÞA¬ï˜«`¥;ô¶¡C«ª"-–R©×þ-M¥\*Ù9S %U—¤*kÒê?úôöM^mžöŽV…ÕŠ¡˶£ ©.î®KnÕñ Ûn 'åsÙL:•€KW‚k©j¨¯ò'0H„ì%ë±ÞXï«z#Àjsxüáx:_Uðt¤r‹ÅbŽ±:ìÝÞÔÊpßd"έJÖXQý§•úòÏøMM9íï+‹°Íé DÙâ~Ú ¯è¿h€Šý:ìwZõJ!‹©Ñ“[õòð +_÷%¦œ~¤×|¢W<L¨’Ě̕ëmP%Ôõzƒ[¯– Hud`»vZj1—’­ŠTýÁ€_ûoù—îÇgG+ëµéuN§’倵q;ÏîVëÍýýî~ÃÌáÚe®–òéD4ä×RUÕä HÕ<³ÿ3}üžéÁV»ÓK¬•fg8]¬6Ûíããv»%×Ål<ìwo[7Í:k6 ¼.eÀo*ïÃá^ûQ^ëöã³Õ%XËÍ®1[ÞoŸv»ÝÓÈ>ܯ—œ72[¹XskÐçvØô®yÏf÷Vo­Ø7.oPL¸cÌVOŸŸŸ?}Ü=ëj1aÞ4IµXÀfG Wûõ•åDõž˜0£Õáö£Él©q;œ­¶»ç/_¿~ùüi÷¸%V¸0°ÖH»5-6ì´Y/õ8E£Ølš¢¨4Ä××J¼4„aNùaÕk­îpº´œµçy›µ^§ãa¿Ûn‚Õb!ö£$²úøøøô„Í"°h¢5@àn…ó&Ãð¢¢AX¡Z•ëmaÞnk9{Ø*¾n²™Ú åØl,Žfrô ´¯áS+Þƒk­Þpº°œÍv8;äu +ZU]•a£°&p2"x~#³ˆ'd:B´_k*à +°0A³Žç(¬»Ã @^Íù¸ßnø#˜¥ïÛRÁfA-æáh ¸\ãЭ µÒô›u³=Ï—Ëyµé°Óð÷%´ÿ+þc_íƒ/•X þNR /Ö„Õ^{{°z½^ÁëÖµæãºY%ž…fMøÍú‡ÂÈo¾ò;>Ÿ2ür¥9±ˆ´¢f…|¾^ŸŸÁëÅuЮéH+šÁ÷°þå_}Õ—îü1TÑxÊUÑH«ë‡õ¸žq\GÝz¹ˆµÞf0qH>+Ñ_wžü¸J¥Zg4·ÖÛ[X‘Ö#´ërÒkVÔ‚Àâ£õw³ÆçuâÆâ)Šd½ÙŸšîöpëõ|Ú{Ž1´«¥ÿjýê/ ültÆbñ‰dšÎ‰jµ=ZØÞጭB·ž{MáN]Wò¹,•Œÿ¥Z Á×'ÉÔ4E³|A«w'†»=^ž_^Ð †´.ƽF¹(rw­d¬5ƒˆRšÎfiD–åDØš` ¯w§+ò +Õºßnk1é·*ªÄ3TŠh 2謭)Šfrp>_P+­Á̯cÚo׶‰´VK²ÀÂÝÃZ¿úý åv­¦2LN%YVd¹P¤‚¬êµöpfº»ãåzEZ½µmÌÇývMƒr¥ÓDk ¯Ð­ •墦—+•²®i¥’V®5»£Z‡O— Nëʘz-ЊË5%Z Žk’ÊBŸj•z³Õn·[ÍF½^o´:ýñÜt¼ýñtÂCk­"­ Þ™`þê·'ü/P»B\Ù¼¬U[ÝÁh<†ƒ~¯ÛëFÓ…ål¶ûÃ~çùZ›¾ÖL*N¦p Á[S"å$µÚêf Ã4åb>L&SøÍrÖÞv»õÜÿj%åpP½ÆÃËz½;š›öz³Ù¬]{e™(¶l?pV·!,­¡àîUPÊM¸VomzØo½µë®ë®]׶–¿»õ¦•”kÁ^““W*­á|µÙŸ¯///Ï×Ë JuëATÁïÊü›Vâ5Àü‘WäÕ;^_ÿy{{ûçÛ‹¯ÖC3Ø\LïÑn{ôk³?C^¿½ýøùóÇwdö|< EØZNIZÆçÐœTªu'Æzy¯ï ö ‰¯î +a’Öp‰î­a¬ÀB`ÇKgwzþlØóq·q¬ÅdЮéE¢5\À ~ŠC`EoÀ¥ãç—WX‰ÏÇýÖ×Ú©—‹O´†Š[`éœX¬´3ÓÝNçó–a°º2æ µQV%ž%Zà +,œ°Y^*UÛÙi¯½:]]Û2æÓQ¿]/«¥Ó‰X”h %†I,kµÎpº´lÇqV–±˜‡½Nº•h !X4‰óŠ^ï &ó¥a,³É¨ßm7jå’"!­É8Ñ*"~`asb±\ïôG“ét2ö;­zU/)…<çk}"ZÃDäØT†á%µ\o÷Ãá V+º +Vù\6ƒµ>­!i¯X˜ÄBĶ:Ýn§…'0²ÊÐlÂDk¨ÀVA+xEåD¹T®5šÍ&Œ`Š[MÆae"ZßUd5¯Íò’R*WkµZEGûÁ~X‰ÖЀ›õIÅã‰d*arˆÕË岯•AÍz›ÁDkH¸+HM$’ÉT*Me²,——µ¤•Ô"t+ÞƒcODkˆ¸kEAMS˜ Íäø¼$+Å¢Ra +£‰ÌàpáŸ7ñd +tf‘e‘Ø +CÎÖðqך†á›Ëq\Že°Ë€X!/Šycïq%ZÃÖ +G+E3‘H¤–±€V´4E‰Ö0ÊiMÃiƒ +UQdén–…üÂX+‰kxˆ`ÐN ­¢ û¯¦©EY¼GÈÒ·ËÚõ«_˜ð‰ÜxÀZS†‡{µ\­ÕªeM•%‹Z–¦3Ê×Jâ|£Àã£_®YNT´J½Ùj5ëU‹eQTÁjŠh ¾T¤ˆ¢U˜ÎååR¥ÑîözÝv³bE´Ó8¬q¬õ_öËsIq, ÂQÝ]Uxï½F rH  jÞÿYö\ ªwçÏÌþêº7ŸàD|‘™' ×ï® Séëëè= R¸Ù13–ãØ‚-ä2P­1‚…úŠˆF¢Ñh,ŽN¹ÞÒ3nµ^¯ó [-‚!XñÐc°FÑD2™L¥³ùR­ÝÏk~+ðë%€í·P±™`¸¬8(6Щ‰T*LÔ|± åJM¸õv/Š{a³œ3£^«^.dS®ë·WèVÔ©Ù|¡X*•Ë•Z~&†] ¢¬¨²´Û,gô°Û¬sןd¹~!»"¬Ð©¥JµÞh4›­v·?bæË­¨t]S,7¥ú­Z)—NDß^‰]1P‘X^%°i§Ûë÷ûƒÑx2_ò{E;š¦¡«Òv5§‡z9¸’ÆA×h" ƒµÙé©1MÓÌdÆX ˶-CSön2ê6€k<äú§¯&ú…1CƒµÑPÌt6gYn±„—IÖ ût:9ÖQùEÀú5B¸â '×l±ÖêS“9·\­7~»„Õó<×1âÚ©—××_$†¿¿¾¸ÂbŒgÜj³v{Q‚ a=_ΞcDžc†íZ1›Œ½“· ý—_Ûz¶ØÀd…qT-Ç=_|ÿâ_÷–î7+_oÓŸ¾šèÎœd¦XmõÇÀ6«ªé†iŸÜ³½Wû¨ìV3ª‹b8Fb=ÿá|¥Ù£&ÜZѺ³zÿz»]/®¥K[Ž´ª… Y¯Øè±_S9T°ô|µEÊ` z¿ß®ç“yدçÄ®x úõÇ/â:ÝÑ„ÛìоAXï÷›ï9GYXL]ŸíJ¸~{½ ¿ qVÀõ‚°~|Ü|×ÒÄÍ|Üm”È3ŒVÄ‚8ù0ì‚«çßŸwˆaC–“aìg TÖwàšÎ—êíÃnöêqýøüü¸ûž­K<;î!»F‰]qÐÓ¬Öx2“ƒx½SB®P¯×ËÉPw«é—] ÖﯠZ³Fc‰d:[(ƒ_iöÉõŽ¾&hW°+Ýo”s¤]ñPø1½½GcñD*ÉJÕfwÄpa_`»Ï0´ëtÔ©Áv%vÅAG8‚¬šÉå‹¥J­ÙŒgáßä^üëõâ9ÆAÜ°t¯Y†íJ슃»5œ/–+µz³ÝŽ§ÜZ÷ëåröS“¶ x†‘]£äÆ@]ß"è]*VjV§ÛRÌŒ[oEU7í“ëy.`•…ÕŒê6ˆ]qp»ÆÐ\m´{ƒÑ˜™Ì¹åFíhÚÎéäئ®ìÖð4µ*…4±+zØ5•+ÕšÝÅLêšö’ª ËY†¦ì7ÜdØ©³äÆDÀÚ5‘)Tš]¨U6„*«šn˜pµÌ£¦ˆürJõå|°]‰]¿¿^®±d¶Xk÷á[Zñ;ñ7Ô«* «9=hUÑÓD슅\!†ë!3_ò;À¦…Šõä@µº*í …GÝz)—ŠG^ÉvÅAÿË•]má]2,½ÁðŸì …·`×~h× … ×o¯¯.ÕÚz¾z¬f+ìV×±ŽyÏ/¦áÆ!vÅF_SµÙ£¦‹ÍNÖ àzñ}Àžà–!†™a=Ãa»þ铉þ…~ïœ:v¶ä‘aïìûWëÚˆ+lWô5¥ð »â!â_(ˆaè4Ðç„’øhÎÿzõÏžcj2|Ãã^³œG1LÚ½< ›°]V†í"®×ËùdéÀuFÁ7œMÆH 㣗È°Q[ À²ë¬ƒaWÿìZº",§£N­øü†ÿôÁDÿJa`«ÍîhºàŃáx—ëív½¸öq¶¡^ã¤^qÒo°¹b­Õ§çër´C®¾gea1´*ù‰a¼ô›HçË.5] +²n{þí~¿\·Óo–s°rH 㤗ÇïKf‹µÎp²Ø†\?>î׳­K<;îÕÃz%1Œ“€ëŸÈ°™Bµ \å蜯÷'×ÍœêÔP½’•ƒ™†M¤®KA1N—ÛÇççpÕÄõlÔ&õŠ¥,±×ér§'ÿþù×_·³uد&ƒ ^aå»â¥¿s5ÝëÕ³»Óo”2 ²rðâúúà +9üå׫gªGwQ½’ÆOO®ùjkÀÀ? ê×»ï2ÏR*ªW²r°Ó3‡ó•fŸfyI³Ü`¿ž]Zφ­JP¯$†qÓƒk*_nô¨Ùj§Žç_¯¾ûx›JYR¯8*Ü9ñT®TïÀ€åŃyò.Ï1”-G÷êÅL¸^ÿôDÿ—^~s­µô|%Ⱥ鸮cjâfNêW!®¯oÑx*[¬6{ÔtÁïUÝ´mSW„ådÐ*“zÅR/?à~&Ò9àÚ2ìJºaèªÈ³t/\¯? WÌôˆáX2+!®ô|É¦©’°š:U²^±Ôï.”ë­Þˆ®;IQUy¿á˜~bÕ+±+fzÚ5“»vÔ„]m÷’¢È"Ø•êÂ7œ õŠŸžvEíÚèô©É|¹DYQ¤=¿˜ ÛÕ|š¬ \½‚]³…J£3OXHaQVUEÚ­Yú+† WÌÄ0<Ãù2Â:åÖÛ½¬>¾¦ù˜Ä0¦ +bø=–Ê•êí=C/“ªaääà®H ã(Ão‘D¦PmõdzåVTuòmËÐda9¶*ù‰a …bøÚµTïRÓåV:öÉõÜ“¥ËÛZ9Ù$‰a Äp<¯´ Ç‹Óñ.þåìÚºÌstÕkÄ+VzÆp±Ö¡f«j8ž½]/ž­K›9Ôë;©WìpB 7z4ËKšå^®7àêZ‡ýj:l“zÅS//hå$såfŸYleÝöWÿìŠ@ê_…oS +ÕëqµÜ³ïûg×Ò¤ ®WR¯ê±^\%Ít\ï쬣²C1\Í“zÅR{‡Õ£i;ŽmU¾aˆá\’Ô+ŽB\#®ìz'Ž†iúAV3ê?ì×ÇrÛH@Ñ¢˜sÎ9$H‚sƒ’mY²5ÿÿ1Ó Pòvf5Õš{6Ò’U·ÞÃëf9—ŒðyUëO×öÀ˜¯÷Öùr½^NÇír:ìÖKñy¥«zä3ç£k<[íÖé|>÷›ùDïÔŠâõàóªûù*ºfŠN×íþx:¬Ãn=7íZ!MW%9Ï×HBtí ÑUÎëÉ:ÒUiòó*ºF“ÙR½«OæëÝñt¹\ÎÖa³{˜®Jr¹nÏ×T®ÜÔFæRÜÃ×û‡‡û‹µ_™ânâûª"—3®öÙTm÷ùæp¾|z~~z¸Å;Gk”èª'«×/>¯r §ËÝéúôíÇËËoçýrÒo–³tU¨*³Šqµ×po<Û/ß^^ßÞ^_žïëé UÎ&誖Ϭ¡h"c¯áÅötÿüòúë÷ûïק­©·+tUŒÜÁNÖˆ×R½£O–»ó÷Ÿ¿Þÿúëý×ËÓy;£«rnYý2k"“/7ººü¼þéú|Þݺú½n]Õ`/a¯Ï”YÓ¹bµ©é“ÅÖº>ýxýýþþûMΫ©·äÝDWu80,²¦²ùR­¥éÆ|}8?ˆìÛ¯·Ÿß¬õ´ßïœßCWE|™œ¬åªèÚ"ìát}|~~~¼Z›Ù°Sͧ¢AÙõ¿þÁøGDW9®‘X2+”DÖF«£ dØÍÞ:_ï¯k·œôåó5Â9¬ûëG2k¥Vo4[no02ÌÅzw8ZÖa·2‡Ýz1cŸMtU„½†ƒ‘x*[ÃÚlµÛ®Ö—aç«Ív·Û¬fã~K®aÎ&uØŸWHŒk¾T­7ÛN§Ûíj½¾>š˜óåj½ZÎ ½Û(‰5älRÆ­k,™•—pGë9ú}dLgóÅb1›Œzíj!ÛŸWº*Á>›áX*'®â»ª ƒø3OD×ù|65t­Yɧb!>¯ê]ÅÙO*ŽX¾cÃÛ ;ëBtºr.¥«Bœ®‘D¦XkiúxbÎf3Óœš¦)–ðr¹\È®z)›ŒÅÙDWEØ]ƒ‘D¶Tï ÆSÑrµZÚV«µ°Z˜r^骧k4™+7´áÄyÙloäkç–{˜® +ùìZiöFær³;ÇÇýn»šO†]UsëšÊWZ}c¶Þ¬ÓédYÖÑvØo×tU‘ËåöøC¢kµ=0æëýñt:ÿ +ºŠyýØÃ>º*ÃéûÓÕ’UU¼kx-ï&y'"²«‹®jøèZ°»®¶ûƒœRy1m6›õz¹0¡Öª2qºªÄu÷Ùµ?6—kyoÖ«åb±˜Ïç3s2Ö{íz9—Š…>Ï]ñÑ5_mõFÓ¹|½.æ³édbãñx4ÔûÝv½RÈ$¢!¿×MWU|v­45}<5g¦Ñ‘>è÷z=MÓºV£V.d’ö¸r6)Ãé*Þ¯åz§¯ÄŒŠÕ:íf³ÑhÔëµj¥\̉¬‘ ßËV‡ì*Þ¯Él±Öêöƒˆ*F´R.…B!ŸËfR‰X8è·Ç•®Š÷°/Id +•z«ÓíŠI­WJQ3-¤R©d"‹U5.×ÇÇS¹b¥ÞÛ·V)å³iY3‹ +‘H8 ˆ%ì¾£«:DW·W|`™|±\­VŬŠªñ¨¨ +Ú¿ÏKVÅ8]ƒ‘x2“+È/j.“ŠGá€ßï»Q=n¹„ɪûp +„¢ñd:›uŽ¤HHŽ¨çƒ[D½#«bnŽÆIy&‰ +ˆªvÌ.ªªFvõˆ°¡H4Çć5hgub~ú¯&þ­[Ø@0·oØÙÁî;’*Nt•a}¢¬¼~ý~/WÒ—p ëõùü~çIãæIó¸ä*v{DÚÛ“†¬_ƒ +fÖqGÖ¯Ãå¤åMóåð¦ùª¨ +ÿ' 0ût× endstream endobj 800 0 obj <> endobj 802 0 obj <>stream +H‰ì–ÑNÃ@ ›ÿÿi@€RržMì;'ÝyêƒY{‡4êëeŒ1ÆcÌ<¶Oþ>ý²ö¦flc’²“Ž]DàèZÅTã+A–Î6L6—5)˜'|5‚&¹`¢ðÕHšÔ‚i—#jÒ +æ _Ž=!dMJÁ<áËi橫ÚvJ4sˆÇÿ³Š‹\÷4¨v>g¤ + esÑÓ¸ÏÁ¿³ØT>ÐÌþUÑÑ4g8 ¯m¨éç¨øf–ƒ_÷,¬›'p3ÊÁLkæ‰ÜÌš¡uèÔ†žÐͬÚÇNíæ)«>ÝÎøn²uéÝ< ö´AOKïæ X°§ï›KãvÞO”=Ñ£KÓvÚÛyCO+(òô4QUšìé=EÕyz–¨BOš¨æ^+= Íe­“)ÕÄ«‹VçS쉖ïî©\Ó3<Õk²§TO­ßã,=ÁS'M=MÑÄ»¿·&{JÖdOøžº®Wè穧({bØÞ÷”•6G“ôû)STZX7OšT—ô\OÚî0¨(Ñ*‹cƒ ¨(ÍjZZ45Qª®Iýúƒ”¸ph¦'Ð]ÞÂÇ€.gæøÁÝ¥á-z™áåÑP¥’°¥h8®G—‡3¹(ØÒ`vgœ•CkHÚ»d|ŒòïeÝxÔ8§!·<ÚcŒ1ÆcŒ1ÆcÌ›ò!ÀˆŽ&ä endstream endobj 840 0 obj <>/Filter/FlateDecode/Height 91/Intent/RelativeColorimetric/Length 6141/Name/X/Subtype/Image/Type/XObject/Width 296>>stream +H‰ì—çWšËÆcCzï½ +()¢€RT `ì&ƶ4ƨIŒÇxÒo’ø'ëèIîZ>ŸÞïÚ3û·÷ÌìçÁƒ{Ýë^÷º×½îu¯{Ýëש tùUÕïÝÓ¦¦ë'ÅþI›ýMÂ)4_QKUðý¿¤Xüÿ‘i­W[UðXÝ2C‚Q#òŸÀ¯Ê1j#‘Hí—"WÕÞNV˜Ôm‚#H­5ä-·Œóû…3Híd +…J¥UE1@t:J!#T-7O°R¢“‰0·ˆóe‚¡Pé &‹Ífsq¹\—Ãf1éTJûm@Á¡4¿ðß®J&ƒÅáñB‘HŒ$‘H¤R©L&“J%"âSɤ'ˆƒ“pp6€â ¥ýæqþA*Åå‹$2…J­Ö€´Z­N§ÇÒiT +©ˆÏaÐP7 +Ž0‘©(¸Ñò¹,õæq~¿PÅÛÚ© 6O$Sjô¦ÎÎ.‹ÅbµZm6»Ýá°Û­]fƒV)r™4r[ë¨狤¨*…L À©í7ŒóUº‰Í—(µ6§»Çãííõùüþ@ ˆðyÜö®LÈE Þ¨p;áà +Þh2pçqþÔiUœD¦±ø•¾ÓÞÝìG‡†bñx"‘L'“ñ¡HÈ×m3(Bº¶þ!3Ü«œ'VêL»Óé°š *©€M'_ç&àWÓlj‚v¢2!ƒÅՊƇSéñìD.ŸŸœÂÊçÆSÉhŸÇnRKù,j{kË•íý 5\ +ƒ#RèÌön¯ßïó8-•„Çü‡8UPݯßòÏ4TÿR¸ât¶P®ërùÃñTvrz¶Xž¸°¸´ ZZ\(Ï&R±ÇfPŠ8trã¹âv®ìºR¾Tc²{‘h8äsuéÂïâ<¨‚Š ¨€k&÷ïýÕ¯AETœ+Q›¾p239;¿¸²öhcsk{gwwwg{óÉ£•…¹É±¡ »S#å1ñÁ»’\Õí|—~"hl¡BoéFâÃ#ÉØ€ÏiÖHxŒ†8ÕQdÀ ªóh‚šªy«_ä„ÐÉh§²ø2¥'ÏL•×6¶v÷ŽONNŽž?ÛßÝ\_œË„{m¹¼êÅÒt™ %Fjk»bJˆfåˆTF(Bbl<›õ{¬úÆ8•¡0Täh4*rW'÷Ú‚5E,Úz{ïùï9ÁÉ@ï°û"£ù¹ÅõÍݧ‡Ç/Oÿ:óæÍùÙéËãg{[k§ÓC§Q)bÓjK£Û¡R oCÌÚMõœ¸bµÙJML&³£Q?Ä¢858RÅ°°À QÉ FáÄþª²(©aÑ»âDTÜä ¥§Ê+;û‡'§]¼ûðñãÇ÷oßœ½::Øy¼4›÷¹Ì*1¾XðŽÝˆ‰\ ÏÚµŽ#8I4ÝЬ“3s3“™xŸÛ¬®‹sim¨È€‹E"ŸËf6:¢.P*­â¯Øìë½KN¸â±La~ucçéÑ˳‹÷Ÿþóõë—Ïþ>uLpJ4æWïv¸|ˆÏã©Á YÙs§þd¶P,§³Ã=] ·ž‰ÎâÀ4*W¢qT ó¨Ç®:€jÿBÓÁlÏds %¢Üê¢wj…ê9A?•–mí¾8»øðùë·o_ÓÙËçøÜebAW•~bC ܎\¡Ë¤bÍû†A5DÇœ¦KóåY¸è<m=§º™0f³ÙhЩä(UP&¨ ›'Kå +¥J8åRàÉiXôN9Á¹óGG'fæWoï?uþîÓ—oß¾|zwþêhûÑR1ŸŠúF•¨Æ c¢19|1$§Ó ½V%‡ÔXt +¶‰³‰n?ŽHmv‡ã§Ñˆ×¢•rõçaâCàp¹Ýn§Ýb6¨å"«ÚQµ¹‰\¥5t˜@ÆŽk½;N4¶HÙaóöÇÇò3å¥õ­ý£Sh¨/_>¿sz´¿µ¾XœLÇá2(Ðý‹÷Ó =€6-”Brf 8A›µË¤WËÅ|v=¨füJ(M® <¦ÅréNLB™Ú€ A / +ý—Õ¤Sˆ(ìq×áe*½©«‚Óaí4êT2àI'ï9A&,Œ™n8‘š(Ö6÷_ÿýáÓÇ÷¯ö6WÎæÓ‰°ÏÕ©•ys¥ЦQr.øÁ^o·RSJ¨êžÑtFe ÿÐØäl©8ç®1²Ó9™ÆhuûB‘!°KÉø`8èuvê•b4º•A6áÔtXœ=>„³/è÷bë)Á %ßeCó“'Qm=¡átnz~uóéÉÙÅÛ·¯÷7WÊ…ìhlÀﶔb.ž›+ömÚhu'ŒDaÖö÷8:õ* ŸUÛ3üH¢0ù2½­7:š›ž››ž¸Ê‰p€ÄÈÞMŒf²¹\.›‰î"So®ýg´uûû£1À™ˆ ½.‹YOüÛrÂL®5Ùº}}áØÈøTyuûàÅÙùù듃­ÕÒT& õº­Fµ Ø6l¾*›ºÝ@79šK$û!5D³fß0Oª³xÃÃÙÂÌ̼wžKNø8‘ˆ:Ù½ý±ÑìÔL±T*ÍMç3Ɉµ°€…:® ƒ+VvX{‚ÑDj|"7‘ͤ’hMTÁjßݧZ=%J õs_$‘.<|´{øâôôųõù©t<èqTº›ØLs®Ò`éDcÙüÔÔdn<ûÝ]:¹]µoÄ3ƒAWO"39==9ž¼äD¼x~Sà~L¤±mZ]]]^(²Ã<D·4Wœ¢¶Ó‡Y¬Xœ-ä2Ã!¯Ã¤Ò®ZÆŸÍ Ÿ{D¡1˜-Žÿ@b|féÉþó““ç{O–f2ñþ^¸SõjYåõ!ŽaoÍN$™ÉÏËóå" ‘Ð`ßÀRIxÜ`ðð`Š§ó…k8¡vÛÔ…lS¡´´öøÉÖÖæÆúòüt6Ùï±è*wbKÅ)l½Ð™Óå…¥å¥…Ò º9ý.Tx‰I­w{AUxxnÍV·?2’/¯ï>Ý^+çGÂ>'4“BZ÷úVí­ÁêAéã&XA=¼¶ê³HpBžHev÷ÅÆr…ÁI'åU85_ÚX¹Û»{ûû{»[+ó…šW‚'¯½vèGb^^üx}­8 ¸áN”;æDÌ%0¾IdJ­ÑÒŒÏ.oîìm.ÏÂ|éî2¨eb>‡E§V W½ŒÀлÞø/ïåÙ–VEá”Qcœ1ƽb¯ˆ)"Ez½ôKG:‚ÒÅ–ùÛ³÷=‚™Ïê×Üœ‡óž½Ö^+JF.¬%[·ÿìÄQ ¯G8iÏOw{8€‡ÇfVvOåzg0å²R­V+·¥|*â³i¥Ü-&»÷3œ ça²×Ú|Ñël.—NF,§·Ÿ'6Áþ¤f—8û|¹ÞNËåb*ìÒËù{ë‹?™1ÈbBNà©ÓLˆ78|áD:W(䳩hÀ¡Wð÷Öf'¾áýɉrZtrþîêÌù ·í·ÉyΑXmõdz¥J­ÑhÔk•Û›l"èÔË ÓA–Óèôò6ïfò…|&ñ9jÿps¹³bÞ2‘3}Ú%Ÿš[ÙæJuú:_*å¯i‡NÊÝ^žEÍAÝìëDc´ñ1ðT®L%eÕr3à…x´±ZèpêÿJ‚¦Ê`§Ü.ë•B°·:3>L8€qJ¶yrÉ”ªV«ÕlÔ«w7¹$M•ðíì8ºÝ_,§S… +%s…b>§ÝVòìdw #oºïº ÔÈøôâÆ‘Xc&s77ùdЮÁkOaÞèï`"jÝæ«6QÁX:_º­TîJù$ 3ÐíoŸ^s2:ÜʦW +÷×àîƒý„ƆÕ=¡ÊêO*Íûvû¾Ù€y*fÈ ¿…á„b9íòFwøæ7‹uÊ ‚u·¹< 1‹$à·ã„ )(™ß@v>SÛ à”Kmê³ÃuÆ$q˜XLÝ%µÛÞ ¹4](Wj –R6æ5«„û̼ô÷pÝÁä9<^·Ýp!:XŸ›`þý‰¡³ë‡b­#”)7Ú÷ˆé¦%è2(ÿç¤DNÙ\6C;Õal'«øíì© +H¨‘‰Ùµ}Ñ¥-Ì“yRŸà/%u/ήÈ?9UëÍfý®x´k%GœùI\æ„ÓÀWô§c±Úäôú<£êì3G ì©5óÇ2½;š¯´ŸÛÍZ¥ ¢ó±_uÌî7§àºKgÒ‰Û¢e ˜¦'Fþù]*ß) E3ÀIm &ÁŸ +×´]ƒœÆI¾d¹q<{­ZéÉöÊ Šnà½0}è„lxzy\ìw׫JЉz]NÌ—£S‹PF.M`Ù›Jãþñåׯ§ûj>æ6€A-M‘ýùsG.r½Ã +Ó>(B'ÛKè_̸Á¾›˜ãIu®0Ƨ:¨. }0¡âòöÖ¦Fsú¹²+§c‰XÈcA§[œîÔ„wâDÂãÊ.ÿÂHÁŽn7ï²a‡FÌÔÐïuòo‡1s‡'ƒÁqjÂ8ýûë¹]+ƒb]å3v"r¨Âà „#a¿ãJÎCNNìKÄÕQ€A< z]6ÓÕ¥\„öóã;Û[™¤%¸0¹‘í6«0aLŽüýn¢#—GÙM0ñÉÊÞÁŽn× +1·^ÆÝ„Gëi™lÌœ]Ýã+˜R†ãôðüëß_/õÁK0(‚l‘ÎÀõP.‘hØe¤DÉd"F¥ÉIJ%õ0Nn‡Å¨½ Ž°¹a#Nä }¡Êì1œLúŽ˜ðò(;H: h¾Ö~~yl”’¯¦ãS—ÓW†¨Þ6œ*`(x|Ý=·¹øÃŽÄWØ¡ÉàS*EN½¢—Ú<®C™Îˆ¥syh·QÚGÙÍzRÂ6·!–sHeö0œ(ÓÛ€Þ<`öp"ÛÄ„UË/ÖÁožZ·é í²3ݬðØìåõðìÒâ¦!4Ÿ[ULšÉñ&zÿ 4¾‚T¤NÿŸ§äF(@IÈE±pdgÖ«bÞþÆÒO¦¹u9ÁAfÐ]<taû[™cÈ;a"Þ<„™h$6^xyNÚ¡‘0nɘi—ÓÓÙÄj«/–¹¹«5ZPÌÚmXêùDÀÆpšÆÿÑ××3pr?… ¾âÄZÝö æ«@8‹FpÙ1ötv²kŒøtgž„]àŸY1_ÞÞ·f"á…Ù/T!?4ÊiÚ¡•r·–˜_Kzf—9Á ü9N-pö°ÄhˆØw˜ŽNw«—SÇÇg×pß9ü‘d:›Ëe³™tê: PPNO÷ÖÑÇYNlTmN—âS9 ?:É•Ùx#“³«;Ç"¹Æ`±;œN‡Íãt.BÙ¡=¡“}åJT8Èi¹RâsƒÞžÖöNe‹;”€Ëg®£Pàçl‚›÷pꚊDmrúBÑX}% +úÙ¶ë|s á4>³¼u,Rh f³I§’ðv×æ&GØ&Ôy ùµc¡L¥Õ›Ìð•^w)Ÿn­Îýýç+i8L +^àÎÕð‘éª÷ ÷åþ4»²},RÂdûC‘é¢R&ÿö§äÎüfÉNy}>¯×M¹œv+®)°ßõ0´¡/dß Á§{<±âR£U+¥üv¼ÞÇÿدÒîÄ ¸r0‡Ð‰÷}‹Ó³_x½NüììÛìÿÿ%éžd ÏŸô’—©¯*UW×ôŒFìb:…Zw4_ÝÜ?>}ÿþôx³šÝz1m±k$¡Ñ¹[lî¿mýBÁ] È9vÓEÒÑÓËŸ?ýúëÇëóÚÞ÷ŽüßáW ¦d´ØlŸ_^ßÞÞ^_þøýùéñáv½¸è5Ëä¼gž³ø[ƒér½Ù¬¯f£L‰Î~„Ø@Iš™.ÔÚƒÉåêúæööv³^ÎÆ.Èq¢Froq +uw|¹Z_ƒÐ°CÆ-ÐëùðˆJ"™«´ú“åõÝ–.ë†ØÉ;ô”8c9ѽ’ÌW;0›»‡íöáþîfs½^-ç“a·QÎ%É8‘câ7Rùj«?žÎçÓ‹A§V rì:†•1('_iv³ËÅry9» 2)CÓq:£qZ™RHÓédÜoû„‚‰‰Þ3Ã;·îpr¹\}]½ZLG½Vµ¶tº¬ÞŸáä«íþx¶X^-—‹ù ¼½N³ZÌ& o™¿ Y³@¶Ñq{=¹˜·‹½ RÙbµÙé F£Ñ°ï¶j¥\ÊÔð‰žct!í ’\·ÛnT¨P8dN¸ñ"¢ŒnK5t;$v»h×±t:Ìl<j®\o»ýÁp0è»ÝN»Õ¬WËÅ\ÚƘðrˆÛ%Ýr²ÅJ­^¯UŠDNô¦“•ŽIjÂvr@j´Z¹IšÚny²Ñ8•ÎËÕj¥\È:¸|ïBåD:’5ŒÊÕZ½ÑhЮ“¦“à‘ÉÉL¾„í×k`¼T,äsÙtÊþ.&TeLqlSÛKý ^¢@.®PR¡X¥\&e'T ¯âôÚa éfÒÉd³¨c@ŒÑ@Çé=(IÕM;•Îd±)âÆL¨hÇÛu¾ Tj™@uRIÛ6„¦Hqv‡íAþªn˜¶Ïuè~OÎ#IŠ–°ì”H%-CÛ¥-xûs§dY–‰uDÿòYzXVYÑÀ Z±LèJSäxŒôåó³0 LË4Œ„®kªt1 ³˜vÄâ’¢j•„¸ßÀjCR²ªé Jè*¦ð5H•dEUUE–ÄC¡@r"fшˆNZVdY‚®£¤k¿Ö~$&RÓh[–¤x\v4²ã _Ÿ¬ÀóÈ9"´8êFI +ûcÇHˆcBÁf‰‘H4c€¦‰2{dÏ4s TàFÂpùùž,èF(á£Ó#‚´v”ý¼•"…> +ºöèö½„ÑÉ9ëúƒfû£iJ…Mé¡, +S‘ð§bGÊR‘ +· èy‚V|8Ûëz¼ïšr]ø(‹lïùÉâ¡÷ºG9; +ƒ¯áî÷¹®ÿ.àTq¿Ú ‡'tÂçš:J=Eþ\oŸ—:­ó/ÄÒ4Çÿ 0_Ê“* endstream endobj 801 0 obj <> endobj 841 0 obj <> endobj 842 0 obj [0.0 0.0 0.0] endobj 843 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +296 0 0 91 6647.5 7516.5 cm +/Im0 Do +Q + endstream endobj 844 0 obj <> endobj 845 0 obj <>/Filter/FlateDecode/Height 91/Intent/RelativeColorimetric/Length 6141/Name/X/Subtype/Image/Type/XObject/Width 296>>stream +H‰ì—çWšËÆcCzï½ +()¢€RT `ì&ƶ4ƨIŒÇxÒo’ø'ëèIîZ>ŸÞïÚ3û·÷ÌìçÁƒ{Ýë^÷º×½îu¯{Ýëש tùUÕïÝÓ¦¦ë'ÅþI›ýMÂ)4_QKUðý¿¤Xüÿ‘i­W[UðXÝ2C‚Q#òŸÀ¯Ê1j#‘Hí—"WÕÞNV˜Ôm‚#H­5ä-·Œóû…3Híd +…J¥UE1@t:J!#T-7O°R¢“‰0·ˆóe‚¡Pé &‹Ífsq¹\—Ãf1éTJûm@Á¡4¿ðß®J&ƒÅáñB‘HŒ$‘H¤R©L&“J%"âSɤ'ˆƒ“pp6€â ¥ýæqþA*Åå‹$2…J­Ö€´Z­N§ÇÒiT +©ˆÏaÐP7 +Ž0‘©(¸Ñò¹,õæq~¿PÅÛÚ© 6O$Sjô¦ÎÎ.‹ÅbµZm6»Ýá°Û­]fƒV)r™4r[ë¨狤¨*…L À©í7ŒóUº‰Í—(µ6§»Çãííõùüþ@ ˆðyÜö®LÈE Þ¨p;áà +Þh2pçqþÔiUœD¦±ø•¾ÓÞÝìG‡†bñx"‘L'“ñ¡HÈ×m3(Bº¶þ!3Ü«œ'VêL»Óé°š *©€M'_ç&àWÓlj‚v¢2!ƒÅՊƇSéñìD.ŸŸœÂÊçÆSÉhŸÇnRKù,j{kË•íý 5\ +ƒ#RèÌön¯ßïó8-•„Çü‡8UPݯßòÏ4TÿR¸ât¶P®ërùÃñTvrz¶Xž¸°¸´ ZZ\(Ï&R±ÇfPŠ8trã¹âv®ìºR¾Tc²{‘h8äsuéÂïâ<¨‚Š ¨€k&÷ïýÕ¯AETœ+Q›¾p239;¿¸²öhcsk{gwwwg{óÉ£•…¹É±¡ »S#å1ñÁ»’\Õí|—~"hl¡BoéFâÃ#ÉØ€ÏiÖHxŒ†8ÕQdÀ ªóh‚šªy«_ä„ÐÉh§²ø2¥'ÏL•×6¶v÷ŽONNŽž?ÛßÝ\_œË„{m¹¼êÅÒt™ %Fjk»bJˆfåˆTF(Bbl<›õ{¬úÆ8•¡0Täh4*rW'÷Ú‚5E,Úz{ïùï9ÁÉ@ï°û"£ù¹ÅõÍݧ‡Ç/Oÿ:óæÍùÙéËãg{[k§ÓC§Q)bÓjK£Û¡R oCÌÚMõœ¸bµÙJML&³£Q?Ä¢858RÅ°°À QÉ FáÄþª²(©aÑ»âDTÜä ¥§Ê+;û‡'§]¼ûðñãÇ÷oßœ½::Øy¼4›÷¹Ì*1¾XðŽÝˆ‰\ ÏÚµŽ#8I4ÝЬ“3s3“™xŸÛ¬®‹sim¨È€‹E"ŸËf6:¢.P*­â¯Øìë½KN¸â±La~ucçéÑ˳‹÷Ÿþóõë—Ïþ>uLpJ4æWïv¸|ˆÏã©Á YÙs§þd¶P,§³Ã=] ·ž‰ÎâÀ4*W¢qT ó¨Ç®:€jÿBÓÁlÏds %¢Üê¢wj…ê9A?•–mí¾8»øðùë·o_ÓÙËçøÜebAW•~bC ܎\¡Ë¤bÍû†A5DÇœ¦KóåY¸è<m=§º™0f³ÙhЩä(UP&¨ ›'Kå +¥J8åRàÉiXôN9Á¹óGG'fæWoï?uþîÓ—oß¾|zwþêhûÑR1ŸŠúF•¨Æ c¢19|1$§Ó ½V%‡ÔXt +¶‰³‰n?ŽHmv‡ã§Ñˆ×¢•rõçaâCàp¹Ýn§Ýb6¨å"«ÚQµ¹‰\¥5t˜@ÆŽk½;N4¶HÙaóöÇÇò3å¥õ­ý£Sh¨/_>¿sz´¿µ¾XœLÇá2(Ðý‹÷Ó =€6-”Brf 8A›µË¤WËÅ|v=¨füJ(M® <¦ÅréNLB™Ú€ A / +ý—Õ¤Sˆ(ìq×áe*½©«‚Óaí4êT2àI'ï9A&,Œ™n8‘š(Ö6÷_ÿýáÓÇ÷¯ö6WÎæÓ‰°ÏÕ©•ys¥ЦQr.øÁ^o·RSJ¨êžÑtFe ÿÐØäl©8ç®1²Ó9™ÆhuûB‘!°KÉø`8èuvê•b4º•A6áÔtXœ=>„³/è÷bë)Á %ßeCó“'Qm=¡átnz~uóéÉÙÅÛ·¯÷7WÊ…ìhlÀﶔb.ž›+ömÚhu'ŒDaÖö÷8:õ* ŸUÛ3üH¢0ù2½­7:š›ž››ž¸Ê‰p€ÄÈÞMŒf²¹\.›‰î"So®ýg´uûû£1À™ˆ ½.‹YOüÛrÂL®5Ùº}}áØÈøTyuûàÅÙùù듃­ÕÒT& õº­Fµ Ø6l¾*›ºÝ@79šK$û!5D³fß0Oª³xÃÃÙÂÌ̼wžKNø8‘ˆ:Ù½ý±ÑìÔL±T*ÍMç3Ɉµ°€…:® ƒ+VvX{‚ÑDj|"7‘ͤ’hMTÁjßݧZ=%J õs_$‘.<|´{øâôôųõù©t<èqTº›ØLs®Ò`éDcÙüÔÔdn<ûÝ]:¹]µoÄ3ƒAWO"39==9ž¼äD¼x~Sà~L¤±mZ]]]^(²Ã<D·4Wœ¢¶Ó‡Y¬Xœ-ä2Ã!¯Ã¤Ò®ZÆŸÍ Ÿ{D¡1˜-Žÿ@b|féÉþó““ç{O–f2ñþ^¸SõjYåõ!ŽaoÍN$™ÉÏËóå" ‘Ð`ßÀRIxÜ`ðð`Š§ó…k8¡vÛÔ…lS¡´´öøÉÖÖæÆúòüt6Ùï±è*wbKÅ)l½Ð™Óå…¥å¥…Ò º9ý.Tx‰I­w{AUxxnÍV·?2’/¯ï>Ý^+çGÂ>'4“BZ÷úVí­ÁêAéã&XA=¼¶ê³HpBžHev÷ÅÆr…ÁI'åU85_ÚX¹Û»{ûû{»[+ó…šW‚'¯½vèGb^^üx}­8 ¸áN”;æDÌ%0¾IdJ­ÑÒŒÏ.oîìm.ÏÂ|éî2¨eb>‡E§V W½ŒÀлÞø/ïåÙ–VEá”Qcœ1ƽb¯ˆ)"Ez½ôKG:‚ÒÅ–ùÛ³÷=‚™Ïê×Üœ‡óž½Ö^+JF.¬%[·ÿìÄQ ¯G8iÏOw{8€‡ÇfVvOåzg0å²R­V+·¥|*â³i¥Ü-&»÷3œ ça²×Ú|Ñël.—NF,§·Ÿ'6Áþ¤f—8û|¹ÞNËåb*ìÒËù{ë‹?™1ÈbBNà©ÓLˆ78|áD:W(䳩hÀ¡Wð÷Öf'¾áýɉrZtrþîêÌù ·í·ÉyΑXmõdz¥J­ÑhÔk•Û›l"èÔË ÓA–Óèôò6ïfò…|&ñ9jÿps¹³bÞ2‘3}Ú%Ÿš[ÙæJuú:_*å¯i‡NÊÝ^žEÍAÝìëDc´ñ1ðT®L%eÕr3à…x´±ZèpêÿJ‚¦Ê`§Ü.ë•B°·:3>L8€qJ¶yrÉ”ªV«ÕlÔ«w7¹$M•ðíì8ºÝ_,§S… +%s…b>§ÝVòìdw #oºïº ÔÈøôâÆ‘Xc&s77ùdЮÁkOaÞèï`"jÝæ«6QÁX:_º­TîJù$ 3ÐíoŸ^s2:ÜʦW +÷×àîƒý„ƆÕ=¡ÊêO*Íûvû¾Ù€y*fÈ ¿…á„b9íòFwøæ7‹uÊ ‚u·¹< 1‹$à·ã„ )(™ß@v>SÛ à”Kmê³ÃuÆ$q˜XLÝ%µÛÞ ¹4](Wj –R6æ5«„û̼ô÷pÝÁä9<^·Ýp!:XŸ›`þý‰¡³ë‡b­#”)7Ú÷ˆé¦%è2(ÿç¤DNÙ\6C;Õal'«øíì© +H¨‘‰Ùµ}Ñ¥-Ì“yRŸà/%u/ήÈ?9UëÍfý®x´k%GœùI\æ„ÓÀWô§c±Úäôú<£êì3G ì©5óÇ2½;š¯´ŸÛÍZ¥ ¢ó±_uÌî7§àºKgÒ‰Û¢e ˜¦'Fþù]*ß) E3ÀIm &ÁŸ +×´]ƒœÆI¾d¹q<{­ZéÉöÊ Šnà½0}è„lxzy\ìw׫JЉz]NÌ—£S‹PF.M`Ù›Jãþñåׯ§ûj>æ6€A-M‘ýùsG.r½Ã +Ó>(B'ÛKè_̸Á¾›˜ãIu®0Ƨ:¨. }0¡âòöÖ¦Fsú¹²+§c‰XÈcA§[œîÔ„wâDÂãÊ.ÿÂHÁŽn7ï²a‡FÌÔÐïuòo‡1s‡'ƒÁqjÂ8ýûë¹]+ƒb]å3v"r¨Âà „#a¿ãJÎCNNìKÄÕQ€A< z]6ÓÕ¥\„öóã;Û[™¤%¸0¹‘í6«0aLŽüýn¢#—GÙM0ñÉÊÞÁŽn× +1·^ÆÝ„Gëi™lÌœ]Ýã+˜R†ãôðüëß_/õÁK0(‚l‘ÎÀõP.‘hØe¤DÉd"F¥ÉIJ%õ0Nn‡Å¨½ Ž°¹a#Nä }¡Êì1œLúŽ˜ðò(;H: h¾Ö~~yl”’¯¦ãS—ÓW†¨Þ6œ*`(x|Ý=·¹øÃŽÄWØ¡ÉàS*EN½¢—Ú<®C™Îˆ¥syh·QÚGÙÍzRÂ6·!–sHeö0œ(ÓÛ€Þ<`öp"ÛÄ„UË/ÖÁožZ·é í²3ݬðØìåõðìÒâ¦!4Ÿ[ULšÉñ&zÿ 4¾‚T¤NÿŸ§äF(@IÈE±pdgÖ«bÞþÆÒO¦¹u9ÁAfÐ]<taû[™cÈ;a"Þ<„™h$6^xyNÚ¡‘0nɘi—ÓÓÙÄj«/–¹¹«5ZPÌÚmXêùDÀÆpšÆÿÑ××3pr?… ¾âÄZÝö æ«@8‹FpÙ1ötv²kŒøtgž„]àŸY1_ÞÞ·f"á…Ù/T!?4ÊiÚ¡•r·–˜_Kzf—9Á ü9N-pö°ÄhˆØw˜ŽNw«—SÇÇg×pß9ü‘d:›Ëe³™tê: PPNO÷ÖÑÇYNlTmN—âS9 ?:É•Ùx#“³«;Ç"¹Æ`±;œN‡Íãt.BÙ¡=¡“}åJT8Èi¹RâsƒÞžÖöNe‹;”€Ëg®£Pàçl‚›÷pꚊDmrúBÑX}% +úÙ¶ë|s á4>³¼u,Rh f³I§’ðv×æ&GØ&Ôy ùµc¡L¥Õ›Ìð•^w)Ÿn­Îýýç+i8L +^àÎÕð‘éª÷ ÷åþ4»²},RÂdûC‘é¢R&ÿö§äÎüfÉNy}>¯×M¹œv+®)°ßõ0´¡/dß Á§{<±âR£U+¥üv¼ÞÇÿدÒîÄ ¸r0‡Ð‰÷}‹Ó³_x½NüììÛìÿÿ%éžd ÏŸô’—©¯*UW×ôŒFìb:…Zw4_ÝÜ?>}ÿþôx³šÝz1m±k$¡Ñ¹[lî¿mýBÁ] È9vÓEÒÑÓËŸ?ýúëÇëóÚÞ÷ŽüßáW ¦d´ØlŸ_^ßÞÞ^_þøýùéñáv½¸è5Ëä¼gž³ø[ƒér½Ù¬¯f£L‰Î~„Ø@Iš™.ÔÚƒÉåêúæööv³^ÎÆ.Èq¢Froq +uw|¹Z_ƒÐ°CÆ-ÐëùðˆJ"™«´ú“åõÝ–.ë†ØÉ;ô”8c9ѽ’ÌW;0›»‡íöáþîfs½^-ç“a·QÎ%É8‘câ7Rùj«?žÎçÓ‹A§V rì:†•1('_iv³ËÅry9» 2)CÓq:£qZ™RHÓédÜoû„‚‰‰Þ3Ã;·îpr¹\}]½ZLG½Vµ¶tº¬ÞŸáä«íþx¶X^-—‹ù ¼½N³ZÌ& o™¿ Y³@¶Ñq{=¹˜·‹½ RÙbµÙé F£Ñ°ï¶j¥\ÊÔð‰žct!í ’\·ÛnT¨P8dN¸ñ"¢ŒnK5t;$v»h×±t:Ìl<j®\o»ýÁp0è»ÝN»Õ¬WËÅ\ÚƘðrˆÛ%Ýr²ÅJ­^¯UŠDNô¦“•ŽIjÂvr@j´Z¹IšÚny²Ñ8•ÎËÕj¥\È:¸|ïBåD:’5ŒÊÕZ½ÑhЮ“¦“à‘ÉÉL¾„í×k`¼T,äsÙtÊþ.&TeLqlSÛKý ^¢@.®PR¡X¥\&e'T ¯âôÚa éfÒÉd³¨c@ŒÑ@Çé=(IÕM;•Îd±)âÆL¨hÇÛu¾ Tj™@uRIÛ6„¦Hqv‡íAþªn˜¶Ïuè~OÎ#IŠ–°ì”H%-CÛ¥-xûs§dY–‰uDÿòYzXVYÑÀ Z±LèJSäxŒôåó³0 LË4Œ„®kªt1 ³˜vÄâ’¢j•„¸ßÀjCR²ªé Jè*¦ð5H•dEUUE–ÄC¡@r"fшˆNZVdY‚®£¤k¿Ö~$&RÓh[–¤x\v4²ã _Ÿ¬ÀóÈ9"´8êFI +ûcÇHˆcBÁf‰‘H4c€¦‰2{dÏ4s TàFÂpùùž,èF(á£Ó#‚´v”ý¼•"…> +ºöèö½„ÑÉ9ëúƒfû£iJ…Mé¡, +S‘ð§bGÊR‘ +· èy‚V|8Ûëz¼ïšr]ø(‹lïùÉâ¡÷ºG9; +ƒ¯áî÷¹®ÿ.àTq¿Ú ‡'tÂçš:J=Eþ\oŸ—:­ó/ÄÒ4Çÿ 0_Ê“* endstream endobj 797 0 obj <> endobj 799 0 obj <>stream +H‰ìÐÁ Ã@ÀÀMÿMç}ZÈÃ„à™ +„fà;¯Çq㊛!‹›!‹#eÈbÈâH²8RŽ”#eÈâH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#5–œÆ‘p¤©±ä4ŽÄXrš±ä0ŽÄXršøuϯõÇã—\ yô“ëO½òéÆMþ½ÿ†,†”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#åH9RŽ”#‹!åH9RŽ,†”#‹!‹!åÈbÈæÇbÈæÇ7øsoYAvq endstream endobj 846 0 obj <>/Filter/FlateDecode/Height 303/Intent/RelativeColorimetric/Length 4305/Name/X/Subtype/Image/Type/XObject/Width 274>>stream +H‰ì—{L“g‡§=PxB)…VZº"é +"iƒ¬šÐTjš a+‡Óa5®ƒ`R7 x"’Š8 Ø ŒCˈ8E$HäÔ!‹œ©ôû¾ç) è'‡%/þÑíú—·å¾¯þîûyŸ>ú—ù{løDZÿA¬heAÆ&ˆÙ?c« ZÞ+Ú03377·0‚1iæ{ÍB1PÊ{}˜XÇ[š< I ܘC'ïÆÄà‹Ã¬¬Ä`kÒÀÄÚŠ€Ça¡“wc…@–Vˆ-ÑÞäH8™0°?G’ƒ=ѱ²„N ’·#²É|ØIdŠ Í•Î`0ÜLÐ Ý•æB!“ˆ6À Æ|ÓÒ,! v$ +•Ît÷`s<=½LOOÛÃI§RHvá%@ˆ™B$S,¶—Ï×/|fÒ|?_ž›Å ’‰@‰Ø%–Fk‰hL¶7 ‰CvîÚmÒìÚ" ø9ë\iÍ­ݽõ=]úÿ.ëQDß_½Ý­Ô”žËJŽ òe»‚Õúƈ™ÞÆ‘þ‰ßçߨrª¨ýóÑmÿÀ3½~}ž†×|ý"ôúgýÚ'þ¬­ø)WõMÄç~ŸÐmð‹Çï¢ΧÁ_&|êr•æA[Oÿ³¡á‘Q´ŒO&W>ž†B»‘á¡gý=m4U—O}Ÿðeð§œÿ7B†F¾:øé¢_ëšÚ{uz d¾~&¦¦ †€éÕ€ SS“óbÐÖëzÛ›ê~-:õÃÁ¯ ò‡Ïô €Œ™™ÙÙ¹•™™Z ÐÈ8Ú1YKFÖ€ýb7”LC/_¾|µ<à¯ÐÉ42Qt·Éª{äCœ5ýý:ü|xt|*™ƒ>þ³ÐÉ29>:üÔ¯Ó¡zè¬vÖ|÷‘ήîm_ÿ ~xlÂ0m4Zÿïû0*F¦ cÃúÁþ>mOwW'z¥¬á}dýßY›š6·´¶utõ>5*FÞ+*yõÊ(dthðioWG[kKóC4ßaWyg]ÿ{ ¸ ÜÖÔËM-mZ~dÂ0B²’‘—s3†‰½NÛÙÖÒʯÓÜFóš³ò½ÁlÉt6/P"“'¥æä\*¾ZZ®ˆ¨]7©¨¬ª®¹©¹ÓØÒÞÓ¯|B²’‘¹Ù“£úþžö–Æ;š›5ÕU•¿ U h¬¬ôjñ¥‚¼œÔ$¹LÈcÓɶÌ#Í0`µRYÞ|‘4J®T¥gŸ8s6_­>‡….^))¯º®¹Ûü¸G÷|lj†d9# "ÓScÏu=›ïj®W•—\¹x¡° µzÔêü³gNd§«”ò(©ˆïÍ¢‚ÅŠGшñøűa°¹þb©,N¡^lƒJ&"‘Å¡Y (±#Q¨t¦»›ãéé…[·nõöánC¾ˆQ¨rΗ߼צÕV4bÓkÛîÝ,?Ÿ£RÄ|"lçúxƒoB­*OOÛÃI§RHv@fiD^+±´²!’Èš+Á`¸¡óc–g›ïŽð¸ÄŒü’š†Ö^°HfV02ÖHokCMI~Fb\xÈßmÖÇLôJ Ò]i.2‰hceù®87@‰8Al‰ö$G2À 5(Î.›Ý¶xù +%чRN_©®oéFæ–52Œ t·ÔW_9r(Z"ôõÚâ¶ÙÅ™‚ZE°?G’ƒ=Ñ>°@ÈÆ¥B`HÀ.Nð+k±Ø¢‡ÑÞÑ™¾e› 8B®Ê½XU×Ü50²Š‘‘®æºª‹¹*yD°`Ûº³£=ѽ’`‡bmEÀCfPÈ[F€08Ð ƒÅáðx¼%š@ôœÝ8ÛƒöÆ'g_¨Ô<ìÔL®hdrD×ùPSy!;9~oÐvŽ›³ø5 hšÄá° ôGæm!‹1Ùdffnnnaƒpm7{p…ÒýIY…·F¦W02m4r»¢0+i¿TÈõØìh Ó^Ió=‚fÍ wò:&@ +°² ŠA0Ž–ˆ½ ËgÇžÿ±_!MîqÇ3ÿÌmêÔ隦¢k)2t‰4"fzЋ1ÊôàE"8ÿ$ˆˆˆè*ŒÔ‚"‚¢˜^E¢uˆ¨7^ˆftQ¡"&¦’§²Ãy~SãôiV 9OŸ÷åó<à³—ßßo¿=¥ýÁàÓÉ×o òöõäÓÁíWΟýóÔø¨0éÄ ý7w5÷GÝ/8<‚lšl°ìnÞî3±öàᔌÜÒs—Ûïÿ´ÈýöËçJs3Rtÿîp¿ÿ®¶ù‘={|¥²»‰3q@h¤ñHzN©órÛDÚ.;KsÒ#C6•»ß÷4~QÒ_õöQ¨C"I"%;)‘DE„¨âwÇ^¼ÿ/H’-‘Ó%ÎÖ‰´:KNo‰xÞÿþ—m‰˜Oü'‘æ-‘½þ »E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚QûFdì§DÆ~‘/"žHþþ"2ð[ˆÔµ¶õü´HO[kÝo%².‘ ‰tåóúo&âêx21»¸²öqý³ Á>^ÿ¸¶²8;ñd Ç%k½)®kqu÷ŽÏ,,¿ÿði]2ù¦õõOÞ//ÌŒöw»Zꊅˆ^~"~ê`½Áœ–]TÛ|§«oäåôüÒêÚ‡Ÿ<õñÃÚêÒüôË‘¾®;͵EÙifƒ>Xí'G‘ä´SŽšK·;{‡ŸOÍ-¾[}¿ö—§ÖÞ¯¾[œ›z>ÜÛyûRãTZ²,ETBÄz²°ºéfÇã¡g“3o—–WV=µ²¼´øffòÙÐ㎛MÕ…'­BD%C‘qIÇíU7î>}ñjfn~añ­§æçf^½|t÷FcUýxRÜÙ‰xû©4ºXÓ1Û™Šú«íݽCc/&§¦gf_{jvfzjòÅØPowûÕúŠ3¶c¦XFåç-3¥&<&Ñ’•Wæl¾uïaßÐè³ç/Ç'&=51þòù³Ñ¡¾‡÷n5;Ëò²,‰1á¥ÜD|•AaQ ©9Žê†k®Ž‡½ƒCÃ#£OƤžþ;qáÉèÈðÐ`ïÃ×µ†jGNFjBTXÒWV"^Þ¾þÚH£ÙjÏ/w^¼îº×ýèqo_ÿ€Ôà׉Ký}½ußs]¿è,Ï·[ÍÆHm ¿¯·—¼D!ú8“%3·°òÂÅk·Úïvtvu÷ôôÜǤkÝ]wÛo]»x¡²07ÓbŠÓ‡(d&"Z¥­5:>ÅjË+ªt64_½qóö—«ÍS.×Û7o\mnpVåÙ¬)ñÑÒÆ*Ž¬òqý*¥ec0M·ç–W;ë›.5·´z®¥ùRSc½³º¼0Ïž~ÔdRV_¾[«¿:XmL²¤ÛróeUÕ5µuRNL\¬­©®ª(säçÚÒ-IÆh]°Ú_V«{#Cª‰O:jÍ´çä)(t—x®¸ÈQXp&/Çži=š£#"§mĽ‘ˆ!Ñh#bŒ¦‹5#Ëf?y*ûôveŸ:i·eeX-)&cL„V³1"rËF’Vmˆ7™S-ÇŽ[ÓÒNlWZšõø1KªÙoˆÖk5bDdµh6‡D!‘„ê"£ãŒ ‰¦¤ädóö%''™ŒqÑ‘ºP D!»ùB¢ Öêô‘Q1±qƒáÐvI÷âbc¢"õ:mp Z– bÝH$~þ’‰&D®; —Šðœ¸u@¦ ÑHþ~ˆÌÖŒÈKøU@`F,²]â¦F >D~"‰´p„‰Bá¯TªT*õ÷’î+•þ +…ðKF† û6ÇÄÛÇÇ×××Ïb»6nKÏùYÈF^bN„Š·€ùAî§ö ù‚ìÛ0Ù`ù™6ŸÞë—þåyí¤½~Yƾí{ò|n endstream endobj 798 0 obj <> endobj 847 0 obj <> endobj 848 0 obj [0.0 0.0 0.0] endobj 849 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +274 0 0 303 6622.1162109 7246.1401367 cm +/Im0 Do +Q + endstream endobj 850 0 obj <> endobj 851 0 obj <>/Filter/FlateDecode/Height 303/Intent/RelativeColorimetric/Length 4305/Name/X/Subtype/Image/Type/XObject/Width 274>>stream +H‰ì—{L“g‡§=PxB)…VZº"é +"iƒ¬šÐTjš a+‡Óa5®ƒ`R7 x"’Š8 Ø ŒCˈ8E$HäÔ!‹œ©ôû¾ç) è'‡%/þÑíú—·å¾¯þîûyŸ>ú—ù{løDZÿA¬heAÆ&ˆÙ?c« ZÞ+Ú03377·0‚1iæ{ÍB1PÊ{}˜XÇ[š< I ܘC'ïÆÄà‹Ã¬¬Ä`kÒÀÄÚŠ€Ça¡“wc…@–Vˆ-ÑÞäH8™0°?G’ƒ=ѱ²„N ’·#²É|ØIdŠ Í•Î`0ÜLÐ Ý•æB!“ˆ6À Æ|ÓÒ,! v$ +•Ît÷`s<=½LOOÛÃI§RHvá%@ˆ™B$S,¶—Ï×/|fÒ|?_ž›Å ’‰@‰Ø%–Fk‰hL¶7 ‰CvîÚmÒìÚ" ø9ë\iÍ­ݽõ=]úÿ.ëQDß_½Ý­Ô”žËJŽ òe»‚Õúƈ™ÞÆ‘þ‰ßçߨrª¨ýóÑmÿÀ3½~}ž†×|ý"ôúgýÚ'þ¬­ø)WõMÄç~ŸÐmð‹Çï¢ΧÁ_&|êr•æA[Oÿ³¡á‘Q´ŒO&W>ž†B»‘á¡gý=m4U—O}Ÿðeð§œÿ7B†F¾:øé¢_ëšÚ{uz d¾~&¦¦ †€éÕ€ SS“óbÐÖëzÛ›ê~-:õÃÁ¯ ò‡Ïô €Œ™™ÙÙ¹•™™Z ÐÈ8Ú1YKFÖ€ýb7”LC/_¾|µ<à¯ÐÉ42Qt·Éª{äCœ5ýý:ü|xt|*™ƒ>þ³ÐÉ29>:üÔ¯Ó¡zè¬vÖ|÷‘ήîm_ÿ ~xlÂ0m4Zÿïû0*F¦ cÃúÁþ>mOwW'z¥¬á}dýßY›š6·´¶utõ>5*FÞ+*yõÊ(dthðioWG[kKóC4ßaWyg]ÿ{ ¸ ÜÖÔËM-mZ~dÂ0B²’‘—s3†‰½NÛÙÖÒʯÓÜFóš³ò½ÁlÉt6/P"“'¥æä\*¾ZZ®ˆ¨]7©¨¬ª®¹©¹ÓØÒÞÓ¯|B²’‘¹Ù“£úþžö–Æ;š›5ÕU•¿ U h¬¬ôjñ¥‚¼œÔ$¹LÈcÓɶÌ#Í0`µRYÞ|‘4J®T¥gŸ8s6_­>‡….^))¯º®¹Ûü¸G÷|lj†d9# "ÓScÏu=›ïj®W•—\¹x¡° µzÔêü³gNd§«”ò(©ˆïÍ¢‚ÅŠGшñøűa°¹þb©,N¡^lƒJ&"‘Å¡Y (±#Q¨t¦»›ãéé…[·nõöánC¾ˆQ¨rΗ߼צÕV4bÓkÛîÝ,?Ÿ£RÄ|"lçúxƒoB­*OOÛÃI§RHv@fiD^+±´²!’Èš+Á`¸¡óc–g›ïŽð¸ÄŒü’š†Ö^°HfV02ÖHokCMI~Fb\xÈßmÖÇLôJ Ò]i.2‰hceù®87@‰8Al‰ö$G2À 5(Î.›Ý¶xù +%чRN_©®oéFæ–52Œ t·ÔW_9r(Z"ôõÚâ¶ÙÅ™‚ZE°?G’ƒ=Ñ>°@ÈÆ¥B`HÀ.Nð+k±Ø¢‡ÑÞÑ™¾e› 8B®Ê½XU×Ü50²Š‘‘®æºª‹¹*yD°`Ûº³£=ѽ’`‡bmEÀCfPÈ[F€08Ð ƒÅáðx¼%š@ôœÝ8ÛƒöÆ'g_¨Ô<ìÔL®hdrD×ùPSy!;9~oÐvŽ›³ø5 hšÄá° ôGæm!‹1Ùdffnnnaƒpm7{p…ÒýIY…·F¦W02m4r»¢0+i¿TÈõØìh Ó^Ió=‚fÍ wò:&@ +°² ŠA0Ž–ˆ½ ËgÇžÿ±_!MîqÇ3ÿÌmêÔ隦¢k)2t‰4"fzЋ1ÊôàE"8ÿ$ˆˆˆè*ŒÔ‚"‚¢˜^E¢uˆ¨7^ˆftQ¡"&¦’§²Ãy~SãôiV 9OŸ÷åó<à³—ßßo¿=¥ýÁàÓÉ×o òöõäÓÁíWΟýóÔø¨0éÄ ý7w5÷GÝ/8<‚lšl°ìnÞî3±öàᔌÜÒs—Ûïÿ´ÈýöËçJs3Rtÿîp¿ÿ®¶ù‘={|¥²»‰3q@h¤ñHzN©órÛDÚ.;KsÒ#C6•»ß÷4~QÒ_õöQ¨C"I"%;)‘DE„¨âwÇ^¼ÿ/H’-‘Ó%ÎÖ‰´:KNo‰xÞÿþ—m‰˜Oü'‘æ-‘½þ »E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚Q£FŒ"E0Š`Á(‚QûFdì§DÆ~‘/"žHþþ"2ð[ˆÔµ¶õü´HO[kÝo%².‘ ‰tåóúo&âêx21»¸²öqý³ Á>^ÿ¸¶²8;ñd Ç%k½)®kqu÷ŽÏ,,¿ÿði]2ù¦õõOÞ//ÌŒöw»Zꊅˆ^~"~ê`½Áœ–]TÛ|§«oäåôüÒêÚ‡Ÿ<õñÃÚêÒüôË‘¾®;͵EÙifƒ>Xí'G‘ä´SŽšK·;{‡ŸOÍ-¾[}¿ö—§ÖÞ¯¾[œ›z>ÜÛyûRãTZ²,ETBÄz²°ºéfÇã¡g“3o—–WV=µ²¼´øffòÙÐ㎛MÕ…'­BD%C‘qIÇíU7î>}ñjfn~añ­§æçf^½|t÷FcUýxRÜÙ‰xû©4ºXÓ1Û™Šú«íݽCc/&§¦gf_{jvfzjòÅØPowûÕúŠ3¶c¦XFåç-3¥&<&Ñ’•Wæl¾uïaßÐè³ç/Ç'&=51þòù³Ñ¡¾‡÷n5;Ëò²,‰1á¥ÜD|•AaQ ©9Žê†k®Ž‡½ƒCÃ#£OƤžþ;qáÉèÈðÐ`ïÃ×µ†jGNFjBTXÒWV"^Þ¾þÚH£ÙjÏ/w^¼îº×ýèqo_ÿ€Ôà׉Ký}½ußs]¿è,Ï·[ÍÆHm ¿¯·—¼D!ú8“%3·°òÂÅk·Úïvtvu÷ôôÜǤkÝ]wÛo]»x¡²07ÓbŠÓ‡(d&"Z¥­5:>ÅjË+ªt64_½qóö—«ÍS.×Û7o\mnpVåÙ¬)ñÑÒÆ*Ž¬òqý*¥ec0M·ç–W;ë›.5·´z®¥ùRSc½³º¼0Ïž~ÔdRV_¾[«¿:XmL²¤ÛróeUÕ5µuRNL\¬­©®ª(säçÚÒ-IÆh]°Ú_V«{#Cª‰O:jÍ´çä)(t—x®¸ÈQXp&/Çži=š£#"§mĽ‘ˆ!Ñh#bŒ¦‹5#Ëf?y*ûôveŸ:i·eeX-)&cL„V³1"rËF’Vmˆ7™S-ÇŽ[ÓÒNlWZšõø1KªÙoˆÖk5bDdµh6‡D!‘„ê"£ãŒ ‰¦¤ädóö%''™ŒqÑ‘ºP D!»ùB¢ Öêô‘Q1±qƒáÐvI÷âbc¢"õ:mp Z– bÝH$~þ’‰&D®; —Šðœ¸u@¦ ÑHþ~ˆÌÖŒÈKøU@`F,²]â¦F >D~"‰´p„‰Bá¯TªT*õ÷’î+•þ +…ðKF† û6ÇÄÛÇÇ×××Ïb»6nKÏùYÈF^bN„Š·€ùAî§ö ù‚ìÛ0Ù`ù™6ŸÞë—þåyí¤½~Yƾí{ò|n endstream endobj 794 0 obj <> endobj 796 0 obj <>stream +H‰ì×± Ã0CAfÿ¥ÓDâa$¥ ÝM@¼Ž ü÷:ˆß”˜¤”˜¤´())-JŠA‹Ò¢´()-J‹Ò¢´(-J‹Ò¢´(-J‹Ò¢’ÍO--J‹ŠK´Ø"Æ’ˆñ-¶ˆ±äâé=Ϲ–88ÆMŠCkÜ—8¯Ç¯°¼Ö£(E endstream endobj 852 0 obj <>/Filter/FlateDecode/Height 44/Intent/RelativeColorimetric/Length 1219/Name/X/Subtype/Image/Type/XObject/Width 268>>stream +H‰ì—ÛkYÆms™I&É$™d:‰!Is±I i‡R'Mmû0„¦ 0PÍ¥„h1Ô´>¤Ô®xA¡xi}°‚`5âCE±Y(iźj÷ïÙsÒ´6µëîëžæ÷|?¾ósjÒäßi9@ü­‚_ú¨kAäˆS Y²¯ +èA.W(Ê¢l¥1¡¨cŸR@ +`W©Ôj50 žJ…+ +hco5j¥&p•Z£Õ‘¤`@˜$uZZ…C{«U@„–4P&3ÝÆ,H“µÑfe µ´e4ÖB¦À€ =E3ÖvÎfw8ˆ¢Ùm\»•¡)=°)d»‹QW¡!´•µ;=¼×çó#‹Ïçå;=N;k¥¤f  B®*(†u¸yPèéC¡>D …ÄÞ!èçÝ–¡€ %ØŒ–ݵÀ ’²pN> ˆýCRd8:C”‘èpDê…ïä,I໊ÑÒk¡52œËÛ-Fb‰äh*ÉfÇ$›Í¤S£ÉD,2(v{]cÔÂb츨ÕBO³N¯–âÉt.?^˜('SH‹…ñ|.ŒKaÁëdiýV1¶]ÀZP;ߎ$Rg/LMÏ”®^Ÿý Afg¯_-ÍLO]8›JDÂ]¼ÝBÁbÔ]€¹cjÒ̺‰R"snòòµ›wç<šŸ_@ùùGæîÞ¼vyò\&!‰Çܬ™Tcòú`€¹P`„±âgò—J·æŸ=ñ²\.¿B éå‹çÏæn•.åÏÄ„£6Æ@€kõ‡ \c´vøŽK§rÅ+·..½^~û~¥Rù9*••÷o—_/->¼}¥˜;%÷uX¼Á…–:ì +ôEOŸŸ¾qÿiùÍÊêÚ‡õjõä¨V×?¬­®¼)?½cúüéh_Àu˜Ò6¸PéL¬'x"ž)ÌÜy¼´\Y«~ü¼ñåOù²ñùcu­²¼ôøÎL!?ô°&ªÑ…™=Ò5prìbéÞ“ò»ÕõO_¿}ßÜÜü )@ ïß¾n|Z_}W~r¯tqìä@×ÖÜtñÏ.šg¤¹?ogóNm¾µ~~k5ßàÛoðæßìÇß ¸ƒAèiÖéÂR<™ÎåÇ Å"üáîóñý‹…ñ|.ŒKaÁëdi=æbÇE‹ ÃÈp.o·8‰%’£©t&›Cl6“N&±È ØíuqŒÖ¢>µÁ€Å ) çä‚Ø?$E†£#1D‰G¤¡~QðNÎB‘[µ¨»€‡CCR ëpóþ ÐÓ+†B}ˆ +‰½=BÐÏ»,C‘X‹í#R/di+kwz:y¯ÏçGŸÏËwzœvÖJ +lw-vdZ=E3ÖvÎfw8ˆ¢Ùm\»•¡)½–Ø«ž C‰¤2™é6`A˜¬6›( LàJ ¢u· +X °ІZ£Õ‘¤`@˜$uZšC .€ pL  ÃU*µZM ˆ§RáMÀÒ¨b»2¹\¡P(k`ˆ²•Ä”C{K±S  øA%hS Ù +Eì«¢ncKÈ v >¿òФÉ6 0{p÷Ý endstream endobj 795 0 obj <> endobj 853 0 obj <> endobj 854 0 obj [0.0 0.0 0.0] endobj 855 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +268 0 0 44 6625.1162109 7475.1401367 cm +/Im0 Do +Q + endstream endobj 856 0 obj <> endobj 857 0 obj <>/Filter/FlateDecode/Height 44/Intent/RelativeColorimetric/Length 1219/Name/X/Subtype/Image/Type/XObject/Width 268>>stream +H‰ì—ÛkYÆms™I&É$™d:‰!Is±I i‡R'Mmû0„¦ 0PÍ¥„h1Ô´>¤Ô®xA¡xi}°‚`5âCE±Y(iźj÷ïÙsÒ´6µëîëžæ÷|?¾ósjÒäßi9@ü­‚_ú¨kAäˆS Y²¯ +èA.W(Ê¢l¥1¡¨cŸR@ +`W©Ôj50 žJ…+ +hco5j¥&p•Z£Õ‘¤`@˜$uZZ…C{«U@„–4P&3ÝÆ,H“µÑfe µ´e4ÖB¦À€ =E3ÖvÎfw8ˆ¢Ùm\»•¡)=°)d»‹QW¡!´•µ;=¼×çó#‹Ïçå;=N;k¥¤f  B®*(†u¸yPèéC¡>D …ÄÞ!èçÝ–¡€ %ØŒ–ݵÀ ’²pN> ˆýCRd8:C”‘èpDê…ïä,I໊ÑÒk¡52œËÛ-Fb‰äh*ÉfÇ$›Í¤S£ÉD,2(v{]cÔÂb츨ÕBO³N¯–âÉt.?^˜('SH‹…ñ|.ŒKaÁëdiýV1¶]ÀZP;ߎ$Rg/LMÏ”®^Ÿý Afg¯_-ÍLO]8›JDÂ]¼ÝBÁbÔ]€¹cjÒ̺‰R"snòòµ›wç<šŸ_@ùùGæîÞ¼vyò\&!‰Çܬ™Tcòú`€¹P`„±âgò—J·æŸ=ñ²\.¿B éå‹çÏæn•.åÏÄ„£6Æ@€kõ‡ \c´vøŽK§rÅ+·..½^~û~¥Rù9*••÷o—_/->¼}¥˜;%÷uX¼Á…–:ì +ôEOŸŸ¾qÿiùÍÊêÚ‡õjõä¨V×?¬­®¼)?½cúüéh_Àu˜Ò6¸PéL¬'x"ž)ÌÜy¼´\Y«~ü¼ñåOù²ñùcu­²¼ôøÎL!?ô°&ªÑ…™=Ò5prìbéÞ“ò»ÕõO_¿}ßÜÜü )@ ïß¾n|Z_}W~r¯tqìä@×ÖÜtñÏ.šg¤¹?ogóNm¾µ~~k5ßàÛoðæßìÇß ¸ƒAèiÖéÂR<™ÎåÇ Å"üáîóñý‹…ñ|.ŒKaÁëdi=æbÇE‹ ÃÈp.o·8‰%’£©t&›Cl6“N&±È ØíuqŒÖ¢>µÁ€Å ) çä‚Ø?$E†£#1D‰G¤¡~QðNÎB‘[µ¨»€‡CCR ëpóþ ÐÓ+†B}ˆ +‰½=BÐÏ»,C‘X‹í#R/di+kwz:y¯ÏçGŸÏËwzœvÖJ +lw-vdZ=E3ÖvÎfw8ˆ¢Ùm\»•¡)½–Ø«ž C‰¤2™é6`A˜¬6›( LàJ ¢u· +X °ІZ£Õ‘¤`@˜$uZšC .€ pL  ÃU*µZM ˆ§RáMÀÒ¨b»2¹\¡P(k`ˆ²•Ä”C{K±S  øA%hS Ù +Eì«¢ncKÈ v >¿òФÉ6 0{p÷Ý endstream endobj 791 0 obj <> endobj 793 0 obj <>stream +H‰ìÑ ŽÝFÄPåþ— ;°gþ&©1ß +ÅãHò?òÏ'ôÀ¿ÀÇuÙâV‡šÌ7¢$sL Q’KBT䆵%*rÁžùlk‰Š¼ƒ¤(È3`Š‚|E—ø…¾Á€nð}‹~ÿý‡~þú}úô5»ÑBÿ³ýõ)ôI›Ð7ŸFµ}ñ%ôY‹Ñ÷^F¶}í-ôi‹Ð·ÞF·}éú¼Éè;‡ÑND_9ýá4ô‘“Ð7NAŸ8}å0úÀ¹è7Ñ÷MG:€¾n úÔ»èß¡o½…>m!úÚëèÇ–¢Ï½ˆ¾k9úà+è¯6 />>júå“蛶¡>ƒþh#úêèƒö¢ßþ€¾g;úðwèoôå/ÑÇ0è×_ oÁÐÇ?C¢¯D?‚¢Ïÿ†¾ƒFÿÿ}†à7ú :Âè$è ?Ñ/hÐ!~ ?¡SÔâ‹b¨C¥*ÅP)†J1TŠ¡R •b¨TC¥*ÅP)†J1TŠ¡R “b¨TC¥*ÅP)†I1Tª¡R •b¨ä*ÅP)†J1Lª¡R •b˜TC¥*Å0©†J1TŠaR •b¨Tä*Å0©†J1TªaR •b˜TC¥&ÕP)†I5TŠaR •b˜TC¥&ÕP)†I5TŠaR •j˜ä*Å0©†J5LŠ¡R “b˜TC¥&ÅP©†I1Lª¡R “b˜TC¥&Õ0)†J5LªaR “j¨Tä&Å0©†J5LªaR “j¨Tä&Å0©†J5LªaR “j¨Tä&Õ0)†I5TªaR “j˜Tä&ÕP©†I5LªaR “j˜ä&ÕP©†I5LªaR “j˜Tä&Õ0©†I1LªaR “j˜Tä&Õ0©†I5LªaR “j˜Tä&Õ0©†I5LªaR “j˜Tä&G9DªaR “j˜Tä&Õ0©†I5LªaR ‘£"G9DªaR “j˜Tä&Õ9ŽrxTä&Õ0©†I5DŽ£Õ0©†I5Lª!råð¨†I5Lª!rTCä(‡H5Lª!rTCä{rªaR ‘‡Õ=Ö(§&Õy£˜j˜Tä"Oc”R “jˆ¼ˆQD5Lª!ò2F9Õ0yS£»½‹Qݪ!ò6F96«†É‡åØéSŒjìT ‘1ʱQ5LNÔ(Ç.gbTc—jˆœŠQŽMª!r2F9¶¨†ÈéåØ "b”c¹jˆ\ŠQŽÅª!r1F9–ª†ÈååX¨"7b”c™[5ʱƽÕXãfr¬p7F5¸£ Ô(Çl#1ª1ÛPrÌ5£S Æ(ÇTÃ5Ê1ÏxŒjL3!F9¦™R£s̉Q)&Å(ÇÓj”cܼÕ61F9†M­QŽ1sc”cÈìÕ0=F9,¨QŽ»VÄ(ÇMkbTã–E1ÊqDzå¸aar\µ2F9.Z£—,ŽQŽ+–Ç(Çj”ã¬1ÊqÒžå8eWŒjœ°-F9>Û£ŸlQŽ÷6Ç(Ç;Ûc”ã5 F9^Ab”ã9(F9žÁb”ã£ß¡1Êñ£¢[ü@ A‡ø‰~A‚Îðú:Âoôt‚?Ñ_Ðèÿ¿¡ï`Ñï?¢Ñ×?C‚¡Ž~…A¿þ} þüú›íèÃߣßÙŒ¾ûúŸè¯Ï ?Ú†>úú¥Mè›O£Ú€¾ø +ú«å胯¡ßZ‹~÷:ú±…èko¡O[„¾õ.ú·%èSÐ×MG:†~o.úÍqôƒÑWNAŸ8 }ã,ô3ÐÎD9Œ>p2úÎ!ôy ЗÞF·}ë-ôi Ñ×^F¶}ï%ôYПFµ }ó)ôIÑWBÿ³}øô5úôè[0ôñèG`ôý_ÐgÐ ~¡oð K”â›RÈ”B¦6•°©„M%t*áSŸ:(!ù»ü+ÀßÞ8 endstream endobj 858 0 obj <>/Filter/FlateDecode/Height 398/Intent/RelativeColorimetric/Length 20921/Name/X/Subtype/Image/Type/XObject/Width 398>>stream +H‰ìÖy<ÕùÇñ™{çÞKeß÷õXN–ìǾeÉžÙ²g:gR2¢D#Ë„ìK­!†B²"IÉ’%¡FiêîËçû;ŽsÐ}Ì<îãÎu¯üüÎ?Îïùx>ùd«­¶Ú@}úS­÷¸ ZýÈó±¶\~ñÖüv©ÏVF¹½Ff½¿ÀF‰V +ð;è÷KýåWô•†Ve½¿Ê¯;ªÃ’™ž<==ý6èsÚÐ ¸Ÿ’uÈ.”-’ÿ´ˆS@`ûvFÆ;vìD1‘îá##Ãö툹,©`&Ë$ëýí~M­À@€33 ++;;'Š …]qp°³³±²²0331 rA* +•dKäç¶$AA¿ mÀ€ pqóðòòñ  + ‹P‚k!!A~>^^n.$Ã. Âˆ¶&Ë$["?£O—)h 0`@daQ1 Iœ”´Œ¬,¿‹/++#-…“”&à @!›`$ppm‰üTT‰Ï@b‚™…“‹‡_PXDL\»ääv+)«ª©kššZ”45  u5Ue¥Ý +òr»').&",ÈÏÇÃÅÉÎÆ $Yï¯þÿ…I’X‚àæQqI)¼¨¨©4µuôô ö˜˜š™ïµ°°¤da±×ÜÌÔd‘¡¾žŽ¶&A]M\äð2R’â¢`ÂËÍÉŽVÂÈ@#²²*Z +4 +L‚u'—STRQ'héꛘš[XYÛî³w8àètÈÙÅÕÍÍÍ?]]œ99p°ßgkmeanjbl¨¯«EPWQR”ÃKã€DVÂÁF#²²¢•Û>g`\’ ä•ÕÚzƦæ–6vöŽNήî^Þ¾Güƒ‚CŽ‰$JDâÑà @ÿ#¾Þ^î®ÎNŽöv6–æ¦ÆzÚ5eD").#YSk „ÚŠL,l˜„„”¬¡odbnekÀÉÅÍ ¿!’Ž ÿêTÔé3gcbbÏQŠ‰9{ætÔ©¯ÂÃŽ#C¾7§ö¶–æ&F@¢ª¤°K'."„‰À{„aÈz?‘õë#ìœ<ü‚HB~·Š†–ž!@Øíwtv÷ôñ +!…žˆ<s..>1éBJjZzFfVvvv +~fef¤§¥¦\HJŒ;}:2"üD()$ÈßÇÓÝÙq¿­•ùC]Mu äãᄉ,ƒ —ú¦fþ—¥Rpñð ‹IÊÈ)ªhhë›YÚ"/¿À`RèɈ¨èظ„¤äÔ´Œ¬œÜü‚Â+ÅWKJËÊ+*®Qª¨(/+-¹Z|¥° ?7'+#-59)!.6:*âd()8ÀÏËÝù ½…©‘žˆì’–âçád_ ²ÞæùˆZIÁ+ ,Ž“•WRÓÒ ;'7O߀`ÒñðÈèØó‰É3²s/].ºZRV~­²ªº¦¶îf}Cã­¦¦Û”ššn56Ô߬«­©®ª¼V^Vrµèò¥Ü쌋ɉçc£#Ó‚ý}<\a$¦°5%yYœ¸°„žnszPgAGOC!…WPÑÐ10±° ¯#AÄP€8ÿMJzv^AÑ·¥•×kjoÔ76Ýnnm»ÛÞÑy¯«û~OÏJ==÷»»îuv´ßmkm¾ÝÔX£¶æzeEé·W +ò²ÓS’ÎÇž9v,$Ð×Dlöšhk(+à¥YðRßF dSX´³Øθ“…“£PT!è™Yí;èêéD<þÕé˜óI‘_X Õµ7šš[ï´wvu÷<è}Ø÷¸ÿÉÀàÐÐðSh….†‡†žô?î{Øû §»«³ýNksSÃÍÚêÊŠ’⼬´äįÏFž =èëárpŸ•™¡AEæçá`eÞ|¡Z Y0³rpû« +sëýNîÞ!¡áQ1ñß\ÌÌ+,.©¨ª©khjikïìîé ~:òltlüùÄääÔôôô Jp=599ñ||lôÙÈ €KoOwg{[KS}] äd¤$Åȱo7'{k3#]Xˆ,NTX0:ê@ÖûaýÂ-[À³€JP'« ¬Q:ìHnŽv{ôÊò0~nVìÀÚÈ+-Ø8y…Ĥä”4t-ìÝ|I@‘˜šu©¸¬²¶þv[Gwï£'C°179,¾Ã 0€?CÁú+mä[èCŒsd2?$ãÏžö÷=èjomªÿ¾²¬èRVjBld1ÀËÅÁÆÌP[m7Þ ¼œÛƒÖbXð ‰KË«h˜Z;¸xÃ"ÉåUuÍwïõôL –€l€=ø¿‘ûûÊ–îRh  M~x5?;3=9> +"{îÝmn¨­*/¾”™s*4Øï°Ó>Ë=zJrp`ñr²mXU\|B2 +ªÚ†{íÝý‚C#ÎƧ Šëu-í]½žŽ" 8šÞ ²™VàV†‚‚™üøVòš,òlxàL¤¥±®ª¬(?ãBÜ™ð/½]ؘhªÈK‹ ñ­òXïgø_kåE¶PÓ1¶°?ä@ sïÜûÃÜ÷络ãTó˜¹wÊ9ÇçOø<¯çëõ~Î@ÑÛ?8Œeø âC ¿ýÑû +‰…ìïél •¥ٴ丘ۡ¾ž.glÌŒô´56c<°| }5Gt…K +ÝXw,tô-)ŽnÞþÁÑqI´ì‚ÒJ„¢ ü4¡€L`‘øÄBø},8‚dzdldp €ÔWW¿ÈLM Þ½ù“Ÿ×y‡“Æú¬ÏÑý1't…Kjþ×pë¡MK°00±´ur¿ùàIJF^qEu=JÅÀ†³d'ñÿsø"$‘I $¤µ±®ª¼0'=9î~D°¿·›#ÅÒX_ñD^Tó¸š)©oyxù„WIJ£îÖG,<|ÃïÆ&ÑrŠ^V74µw÷¡®ÀP ?13ñÙ@|’ÈèðÛÞÎVz]UYAvZ5*,Ðñ_mWU–[Á¿tñBîÖ# /å_!&!­ ºº±ðÅX¤çWÔ¼iA†ýŠÏO‚…È SPê`,HCõË¢ZRìÝpăba¬§¥®"¿^\Í+nÖb‚±€†”¨øzyu-=c Š“‡ï5`‘œžWRYKoíê÷~ +ÃO_+n,¨ôVqn:ƒ‡¹Ñ~ÍmÊ×­Y)HêŠ ãcþ×píñ @yoTVÛ½ÿ°9ÅÉ9êÆ¢ŽÞÖÝÇb–Q°AB¤¯«^[Y’GðpsdÁnäc‹àÑßÝÚX]žŸ‘{'äGOgŠù¡½;T±x,…Ûƒ Êœ°Ô·<¼Ë…Ä°`0=áèq%8’šœ‘_^ý¦vg²À Ñ¡¾®–†ªÒQ¡e¼œo+ÒR -å_¹f½<4†‘å)WïÀ›÷ãi¹¥U -]}C£œË½™<~ìíh®«,Ê]…]õ:g ñÐP‘[·Z˜É"·Õ K Š®•VRÓ28jãxÑ/$êQJVQe]SGï ÜœÌ=_¦&ÆGÞö´Ók^æg$Qo]vw8~Do÷Öï6ˆ‹ò-ÆmÅ¡Ûj†¥V¬’Ú¨¢±÷… +FLBú‹òêƶž·#ãp_p4 ôèsØ»“ãÃý]­ U%¹iO¢Ã!³ƒ:êʲ’b¤­8³¦°6o®«(xžs3ÀëìISÍ­ßÁ%ˆÊƒ£.V²›4ö¶<ív98*.5·´º±!)vðÿö]¡u…âÑö¦ª$;%6ò'W;óƒ:Û”¤×rZyà0àÊX&•¡ºs¿‰µãEÿðè„ôü—uÍ0¥ÆQ0¸KRÌÇΦšò´'wC®¸Û[éj@yˆ¢ËƒSpcj!\«¡24 LOžý!ðÖÃä,¨o¸1FÉ`p# ôÈxLO¸ên­¯,ÌHŒ¹qÕÓÉæÈ~¬<„–-^È8Иš‡©åÂk6(ªišÛ÷ ºó(5·¬šÞÑ7÷4JŠùfÄcl¨·½ñuIöSjÄ5ïs”cš[֭ƺœp0ИZ).­¤¾ç°Õw¿Ð{ñ¸¥°úƦ·D<ÐíÛ*/-.*È÷ü)sCm5Å k„ñiÅfÄ™`ˆ¬•QÖÐ5>îèé#&)³Y +¾)ÒRìþпöˆxàeÞÝR_Qêç~Æêðu%iq4­Øƒ–­„¬ÊŽ}&6Î^Ô§Ù%¯1K1ê›Ýßù—°Õ`/l«¢Ì$TŽÇt·+Ëpœ¢Uvê=yÎûzä£Ô¼òÚæN°Ôä4W×7ë#ã1ý¶U½º4'…èålc²oÇ&™µ"lÆÃø;À•”SÝ¥oJqõ ŠzL˯€‹ÜRs"øcØêç‘®æÚò¼ÔG‘×½Ï8²‡Š,›q0,â“’Û¼Ûà˜ÝùË!÷âŸBeÀҶÔ±ù0[¡m…Ê£µ¾"Ÿö$*ÈÇ…rTo'›q0a‰IÉoÑ<`vê•Ðû‰™EUí}èâ›C–"n+ØVhê¶5¼*|/ÄוbÊf3`¬’Rتeh~ÚÍ/<&)«ä5½³*cnl©ÞŒòèëh„.OŒ½|Þö˜þ.vâ `¬-θÿxãÁÓìÒš¦®4l¹üâû݇lE”G'ýuIVÒ}Àa8TÙ†¢1 Cû ¥½‡ÿ͇)9eµÍÐßDeÌ-K‘(_ <ºšªK³“î‡]¹ÀN$Œ¥Pà†•ýÅ«·¨)¹åu-ÝÐßÓ vÜ—ydyLMŒ¾íj®)ÍNŽa+†ƒgÀ­Øgyåu­=ƒcŒþf÷·}±Çìò·Ý͵Gø8¾š= ¢RòÐFDljÞËúÖž¡ñ¹ƒÙåcƒÝ-µe9€ÃÃAVùüYÃÃø†g‰}[´ 30/*êÛzÆ;ù>ýÓjl°ç8Îã«ù†ˆ„ÜfMC û‹8Œ-Û¹9¦X1­`éâ8ž²BwÇJ~Þÿ²_&þT®{ÿôéte–1Sd*ã¥LE*‘\IdºQ4Ñ`,W"CTÆ"$BƒÐq¢"ÒI¦(2F$ŽÛ9Ýû<ÏûnCÃiïÍ®îÝïúžg}Öï»nÇ÷2ƒe¯°¤‚ºÎ:ëûÄ`f´võÑ‹¤j5fÎ0åÄ…x8Xf~;p38x…%äÕW[ïð +oÆÿo³ýT¸CcvD¸;Yi«Ê‰ ò°3;h~«@4~ùÛL! yµk­¶{LÍ.¤?3¾hÇawG CmY1n`Í{.4cÆLfvAq9ÕåF›¶yžHÉmj¼?ú›¾—Ðð³#?+)ò°›ãÆ5ZÊ2s¸Ø˜h=;°:ÅÌÎ- &«¢mhéä}ö×`F ý™ñ©eù™I‘þ®[Ì –.”ÍÉÊÄ@StàCƒ‹®Œ²Ö G÷€¨äË`ôµtÒ¡_°ãL„ß>‡ «4•æ‰ð‘fÍÜÀº-çlQé…K Ì·ºúG&eݸÍè¥G3&Øñª®¢,/#1ÌwÏæõúK¥àì %ÉÁA·å›3OIc•™Ã>¿ˆ3™ùwžÔ7Ó«£vÀøª®üöõK Ç}\ìþ¡»HAô\’Ý©™Ì ÛJþ}±þúÍ{|Ã3òÊ*ê›;z†~§K3ÆÛÑÞT[^zõbüQï]6ëV€Ù!Š­H>JpAqyu];Ÿc é×oWÔ½Bfü›>ͳ£ØQó¨8÷ü©#û·[i«ÈÌå‡ÅŠ6è€Ð€uJu¹±õNïи WK×6µ¿xO¿fŒîŽ÷ý=¯_V?¼u%íd‡“Åše ç‹€bÅHt`ÐÀ®eh¹Í+8ö\Nñ£`F?]›ÙñÙÑöâÙý›Ù)чݶlX¥¡$5‡—ƒ…èÀ ÁÂÁ ®¹Ú|«{à‰ÔߊV¿|ÝC2ƒnÝÀí|ÛÝÚøô^AVRÄ¡½›MõC’Ó$hð!‚Ûïõ‹L¾\x¿ª± ™ñáO:ŽÆ|ìëjy^y'/ãôqg[Hr1Z c rj:&¶.Ã3óï>mhí~;8L÷fŒÚñ®¯³¹¾âöµ‹q¡vXi)K‹Òã ¡¬mdµã@h<¨SOê[ºú‡ésh|"Ì´k看 òpÜh ©4oêÑ1<ƒcÎå–<†Ý–^WßgBvü>f(VEÙ)Q‡]Ìô1t0!tL™L +‹õÍ\G§ ‚ƒnK˜Aivô´5V’Ÿ ÷Ýmg¢£&+ÆÏoÕô© +Ç´iÓáââ“аÛí~&«à^Õ‹±:õ£â§²«†Ê²¼K G½1tˆðÍb™9eèÀïÔ,>ie- ï£ —òîT"‚fŒì¹ÉëÊKsÏÇt¬ÖP”&ÕÜ)q/·ÂRŠ«Í=‚bÏç––×5wö½ƒuŠ0ƒ$œäïz;šjý–å¿ÏÞTo‘¼8¬¹St«°>Ë­¼ºž©ý>ÿ(š¦Q‚ÿèOøy„‘ ãõ „Ž°ƒÎ6ÆËUdDgÃ[5½Št§@¹UÑ6¶qö  ‚à…“CÇõô¸ýÛ, –*I órLÍ­»S ÜZló +‰»x½ Aƒ øçv|$Gè(ÉI;àj.¸U‚èVM:øîã—_¤·ÞÁ5àDZN1‚Æ /‘ŒÀö¦ê7MŽðu±]GºU“߀ãú¸S.Ó.ß|PÝ„-? h|ªQt´5>½›)!ôÀvË5ðVME¯‚Sí>IEx§ö‡Äƒrû´±€Æׄ¡cðmWK}Ein[Э@pRá€wŠ“_LN]×ÔÝ©’òú–.bi|U`uôv¼ªyˆß*Ы° 8¹p`çà3¡–‘µóÁ0p§°r;ïaÆ_«¹°W ˜í¿Çn93Õ ðµ6.¾g³o=ªk&îÔ·…ߪÞ° ²yo·4ÐP”äf£6ÂY¹Ä!¼ÀÔÈ¿Wõ¢èSd¿U=m •e×ÎÇë¨ÉŠÎ¦ºå"„3sð‰H«`S£âykwÿ{¢O}[¤ Ø\û¨(;9Üg—•áR%)!n6&ªÂ·[nAIEMKá`jô wêÛÂ7à›v0:òÒO{lY¯§.;—ÚpŒ¶[Y5]S{×Àˆp|jf|[Èû»È‹¯¤DúºX-[ %ÄCU8P4˜Ø¸a»5´Úåžœ]„þ!üG¿õç×ÈŸÝ¿‘âé¸A‘•á Ec®¬ºžÙàSéyw1„wŠ~$…ãaaÖé£T†ãÓhœÎ,„Ñíö +4>WÏ…ƒ¢Z…¢Á·F Û•¯ß §Pä(µ0$rP¶9`4˜ÑÖø,„i"9üöØR¾9€(’JËŒl\EÑ Zx8ºðpx9¡ÍAI8¦M›þ 3Ÿ¨¬šžÙVϼPÁhfPªOÂ7Ç)!n6Fr#+— „âRCkgßH°5@¡Â£ñ£_÷¿¦Qr`›ÃËqƒ¾º,3ÃŒéäœ*Èp&v^iUS#ñ7îÑ ZÂuÈÅÆh™’$ +Y§ +«·œâ +›vŒH¹RR· ª4.™ !ž[ÍôÔdDù8˜Èâ8Z~ì<Â󕗛ػJÏ¿WÝÔÙ7HDƒ:ááhkxRš“éële¨©(!ÀÅJÇÃg0€å'&¿x•Åö…%g—?oí!¢A•ÆÂqÿÆ¥¸`wSé9¼ìd•\R½ËÏØno@Ì…ëw«^vÀh[ƒ:aáèik¨(¹r6Üg§¥Áq~NrJ.b8ª·êzœöM¼\ô¨®¥»hä ê„Â1Ø×Ùôì^~zl ëf“åÊp’ÁqÄpV. EMCk—CÑiWËž¾hï}G0œzpŒ ô´Ö—ßÊN:î½mãJ´Ç¿Urq†Ï™¯²ÂÔÁÔÛ‚µÍ]oß §Z?þÃÑñ²êεó'ý÷Ø®%W‹•ñ[§ +0*ÄðÕ;|ÂÏ^)yÒðú I œª‘¡þî–ºG7³N‡zn]¯«*#BÇá¡bdž/ ö"ª·Äò›œÇßõ¢JîÙ/wªÖ=Žßº¥”"sf™2EdÈ”Sˆ&D E©T +©ä4g*Jƒ +…ŠÉX¦Ê’ eCæˆDGçÞûœw­µ÷fï6znkÓ½Ïûý Öz>Ïûû|¿û·k|ÇQ‡Ïcá”RÑ·tò OÌ)«Gê-|?Äãc#ƒ½hɽåsx\Q‚Ÿ}:#cc.+ˆœ¦‰ px4p8¬·?òl(ÏMŽß <.ÄÅ<>Õ©" ~‰:<|ÃKjÛHõÒøïC*¹Ý-UEéÀãmMµäEǧ *Cšmµè©r³7[µ\Œ‡• œ*ºâ@3§ ”ªÁæ=^—î¦äc +:—`“=UH«Úe®«´”Ÿ}!#}q ýv÷’e&6.g®?H/ªF¦‰öÛ°ßâ˜ñŽ›pÛÿˆãFEq>úâ iCXFÍhËþSW£ÓŠª`¿Å7¤ŽÛÕü&?åî%¯=–ú*“‰ƒ¬ y-S;×ó7cŸ¾ªmïûµgÐŽ;ØÛZU”}íôþ­“Šc\:øßNÈ.ƒÚÀ;XÇâ(yöð–7Iô•6¼.ÝÚh†ÚÀ9ãâÈ™Z”µA¥Ñ1x¨p IÝ$qL¾8¨ÖE_ 6p &°8Š(‹CˆŽ8Pm0±ñŠ)ÀµA`(â@Ç![SM9zâژ͸©’®…“g`Dr^\ø‡"ŽÒìø0?‡ «ÄxÙ˜hÅH|3§ ´ª¡µóÉ+Q©…•pmàòâhªÈKŽôt²ÐUZÊϾq6µ80‰s ˪›Ø¸œ ŽÉ,®ië‚kïc#@•…©QWN:[ªJ r2Ïcø†"qQùUfön>!qÏ_×½ÿð jï âêk«)Έ >ëbc¬.+ÌM«q²Ä±íwáNbNycçÀ0ÔÞAÅñéÃûº×ÏãB|ÜìÍèí?„&q=‹ÝÇ#‘í×Iüïþþÿ¯ âîïlÄö}#g—R5´Â$^…Jjï4Žì¿H qsTã hi ç7¶q9“%NP&hü~Љ½V*R4¥Š$q9MS;Wï[Ÿ•@‰Lã½mÕ/3\?}`«‘šŒM©Bh0±òˆ.×^¿ã°_X|vYCG?”8!i¼½®äiìÍs‡l×j,[BSªÐJµ«T;^ OÊ«hêÂ$ià ñ¯_†û;êK³…úºo7[õM©Âh+Õ¥»_¼m釕 +÷ ¥êó@gcyNâr©b¥j&Eã R‚Ë! ¥b`å|âJT¨T½C£°RTãh©JŽðÜeþË + >6ªR…ÜyÌœBÒjF[œ¾“ñV*¢4Ž”ª–Ê‚'÷.{í±ÔW)Uh +®†É¶ƒçnÄ>}U×+1Ah€RÕZU”uõ¤³µ¡ª” ¨¸J¥àj™Ú»ù„Ä=]ÿ¾Ò "hÅýÔ×VSœsý Vq9©*.MÁMÈ.k쀕ŠÐTÜm&²ÂTwÆŒ™³ç2‚« ³Ñ)¸¹ àBÄ¥Aª¸!>nöfZrÔ—47ø$Vüb¾Ë302%ÿMs÷GXp ¥â–å$Üöóر^{¹(+- 07”õ,÷x]¾÷¤ ²¥Ì X©FãcWSEnRøÅ£ŽuÅyÙ& „27$ÇçF+œDÝ`p¤Dz:™ëÒ @ƒ‘™SPZÕÐzß©kÒ_V·õ¹APh‡28&Ò ?dü ŽÉ,®mïƒsƒ PGaZÔ•ÎV*’æJêÆ6ÏÂñGlÐÁ1ÔÛVý2ýÁµSûÀü“äDæ…Æ,@ƒ[x™ÆZÛCço=|ÇÁG_{mq&Ýù‡Ð˜Ï½d™¦©«wHÜóÒúŽþa87ˆ yþÕ¾z{㬋±º¬59ó-‘Ó2³w÷ Ï.mè€ã¨`óïÃûº’gož;´ÍDCV˜‹å¢ò«Öí8ì–SÖØ iŒFGýëçq·¼]m×j,[ hÌš@ƒ‰•Gt¹özÿ;‰¹åM]QAç ÑPšõ(ÄÛÕÎT¡1ŸLcFƒWLaõÇ£“ò*šº>ŽŒýçAi|Æh„ú¸Ù›jÊQÓøçì¹Ll¼âŠ:›v ˆHÎÓÜ iŒÆ@gCYv|¨¯»½™–œ-l|+tÍ<#S^¼méû¤AHèÑX4 vþ¥Jz»½.ß{RPÙÒ38 +iF@#Ì×};Bc15 Æ…ìü’Êú›÷þt?µ°ê]ÏÐèWHƒ˜| )+ç“W£ÓŠª[{°R’q a¾‡éÓà”R]c½ÿÔµé/kÚú Â2- FfNAé•F[œ¾“Q h|úi”éiÌcæ’Q3²q9ü[æ«ÚvHƒ¸i”çÐ¥1¡Á%$£nlãröFìS@ã¤AX¾†¬ºñ¶ƒ(:HƒÀ@?Sà¥ú™2 hñ¿4ÓÓ€ ÷¯ \?S¾‡‡€”Š•óÉ«ÑiEÕ­½aùìü’Êú›÷þt?µ°ê]BãߧæëNÆÜìüK•ô,v{]¾÷¤ ²¥gpt Ò &ßCƒOb…®¹“g`dÊ‹·-݃#A!Ñh4B}ÝíÜ44˜ØxÅu6í<‘œÿ¦¹ûãÈØù=,ó(4fΚÃÄÊ+¦°zƒãÑ áIyM]QÁhôw4”f= +õq³7Õ”[2Æ?0<¢Ëµ×;xøßIÌ-oêøü; qà”Æ0F#ÄÛÕÎôOöËÄ«æuãëh‰&Íš'¥RÊPi>IRH¨(!ŠJ!q"RB(¤È,%24i"͉æQ»yžN¹¹®ußß°w»Q§~{Ýu×zŸÿà]Ïz¿Ÿç£©0¦yóH*j›í<ì“ZPÕÛ W~ýúùã;h£"ï}t¨ï![c ¤ ¦ÑmH,Ñ2µs?wëyJ~e#lƒ^ÁÚèh(ÏMzâãj³NC^Œ´Á0ÜãqM“í‡|oF¿Ï¯hìì‡mÐ'h}õe9‰Q7Î8o3R—åeÙ;Ÿ˜‚†±­ëÙЧIy ýßü„mÐ!XíõeÙ ‘×OÜj¨¶X”gD   ^1yu£m.gnD%æ”×wôÁ6è“_ÿùùc°·\’q픓•ªœ+‰‘áš6ØxD«n=x:82!»¬¾¶A§€6†@uÅŸÞ…y9Z®Q‘æf%ͦ¶ñ#‰GDNÕÀÊéÔµˆ¸¬r[ïàŸP8褞ÖÚ¢Œ7¯œØ·yµò"!.–¹´mÌ&±r ˨¬±tô + +÷©¸´1Û G€n t·Ô|ù{ÿ’ç ½åÒ‚œ£Ú˜ËÂ%´Hyõæ}'®<|“QTÛÚ3Û GPùû»»¹º0íåÝ‹öæºË¤8™çΞ5¢ NAéå«,¢4ò‡¶ +‡ì°p|ƒÂAŸ`ºÑ tãÕ½O‹U£tƒF8V¬Þ´÷øå¯?~­mé—¡ÜÏ©/îœ?ºkßK +pÐèU8¤–éšïF&n:˜¸ÝpTÑ!  êÀ½uÎ}‡©¶â¨;fâ>O)¨lìì‡mŸQ×ÖXCA|äÀ¥™¸š&Ûù†>MÊ-o€£ŠAno¹$+>âº76pyG \š‰«n´ÍùtpdB6Uô +ñžÖoEŸÞ> +ôÚo¹FEV˜™T#Ú``$±ñˆÈªX9žÄFU+À8lƒè G'UìýKž{,ôV€;bRa'±‚Q¥LU5-ÝpTtRõw6U¤ÆܦL*Næ±mPF•½Ç…;/Ò>W5uÁQExpˆ7”ç½¾éçfgª5vR *Em³îçn=Kίhèì‡':ÄÛÉ¥Ùñ‘Ágœ·©Ë‹žTø¨bçWÐXgãâs#*1§¬¾UðTˆ‡t´4P•á5©0Œ3±ñˆÊ­\kítêêãw™Åum½ƒãÄæñêÂôW÷Ä7¡5©Ð6ƹ…e”õ7ï;1N§ Øèïl¬ÌOyæd|ˆS1.ˆ`|7‚ñTˆq:ÁÆ÷¾öú²œÄ¨³®¶&šKÆ8-ÆMw¸ûÝŒ~ŸWÞÐÑ1Nl@CƒÅ™ï_=uÀÚPm±(ïˆS1.&0î|&82>»” ÁAppl´ î÷àò‰½›õ•e„¹YI£ NŸˆ¬ª¥£WУ·Eµ­=„†Š ÌýìÍu—I r²ŒÆŽq.¡E+ô,öxÜ{•^XÝ ÁAl¨ØÈMzê{h»É¸îGÁ83‡ÀÂ¥:ëw>†ú_ô?Bƒa£­®83îñ5ï[6ÄÆÃŽùÀÿ4ÿ{’ÀÑÁAd(¶ccßf}•ñ±¶ûŸ•ãI -Df)“cƒâ8ŽÜ}™†QmclЀCcÝ6çÓ×#â2KêÚà©".6ºš« Ó_Ý¿t|bÛ 0Ž5[öÿuåÁë_jš»áÆ%,ؾíh¨ÈO~æd׆?—I Œ ªqJ/×5·?zþvLJ~E#ºqáç $è¾ím«+ÍNxrÃÇÅÖXsÉø¶c~IE-“í®øÆmƒ—¨àû¶¥æëÇ7½­ Vʉò² Lì¼¢‹W®µr÷MÆ×ÚxªˆÊð¾M}qçâ1 ½‹„¸&ÀzªI¬ÜøƽxçEjAec'ö °1¼qÅäÕ ­ñSUƒž*(€3º¨°Cõòn€çžM«‘};!6(—[XFy5õTA$(ˆúEE.E•û3¥ ±};aàT±PNÕÙ(°ª(ë˜YÃñE…ª­Fêòâ|ؾ ‘§*ðáë@»þþ×xªfŠúá‹ +;T<“ªáS…¬ªÝn?OΫ§jžª™aøÐ@O[]IvBTÈY7;3¥ÉõTÔF082>³ø[kÏTŽ™“®¦ê/^? ôr²6TûÍ¡¢œ*v^±Å+ ,÷ÿuùAlzaUTŽ™—úò¼äçaçîÞ¨·bòE…T¥—¯2ßuäÜ­è¤Ü2r;¦°Žé• ÀðÚâ̸ˆà3.¶&ZŠ’¿9Tø©bæà—X¢ilãì}íñÛŒ¯µP9fŒá@6>§½ºéľ-+‹ò²Oz¨ðSÅÄÎ+"«¢¿y¯gÀ] ã3•á¥Ù@6üïÜ »LZˆ‹•Ä8Ù×À>‰…KPj©ŽÙ O²J Çgôk  ÿøæQ" + 8˜'?TÈç`@•C\^ÝÐÚÑë +ä8A¾…á·/x8X¬V–Áec²6h”cÕFû£þ€ã9e䶞ÈñéÌ[ŒáEŸ†»n7ÕFeƒô›¯A«ÇÃÇkš»àç˜AC5Ø×ÑPYúò`¸%`¸* “ ªrˆÊ©"¿x'&%¯¼¹ÿëgý·=­ßJ²¢B}Ý×K qÿ–áøçÊqÜîÐÙ‘q™EpäÎ$”y[õ9=öaàI'ë)2û ³ç0#W[kµÿ¯Ë÷_¦T"#wžªiÿ`Þæ$Eßò?j¿QOYFx* Ç>Êq¡EËu7ì:ì…Ž\äs@ŽO'ؼíÄæíUogc-EIÀð©| œãÌü +F[œ |›þ¹ª±£r|Z¡˜¹,÷ý³° Ç6é«È‰ò²OáØ©gbã‘QÖÃFnbvi4ÀifØü2Þ>¾vÚÅÌ[)A®)1œò9H,œ’ŠZÆ6O=zý¡°ª±~Žéû½àkä%Çܹè¹wËlÞNíP¡ÇG®Šþ&óaÏ’ràç˜fð¯Ñ\ó5ã]D°«™Î2i!.Ö©1ÿèÈ]¨¤mbëì}5üÍÇ/ÕMøç€uü“P¿F9øwŽóS“_0JóvøTÍù/ûeâeþ†ñ9£3š¨Hd+¡”%C +cI’’)$5ÑB"ƒ±¥(k%$%dm…”„""ÊÙ²Ôk_Rü~ßïó<ï"Mñòæïsÿ ŸsÝŸëbbåä•Ußeáàs9é>1øæ˜Ø}£û¶+ƒh°³Þb¯ +”\ln3:쌇ƒÊ#*,ô4`4Æ·ü(Ã1,@~1¹1áÀE>#m R4T¤W.Ñ`w4°p̙Ǿ†Ã ¬U„¾¡¸È'p0ÃèÖ… +‰ÆzqÁ Fcl8°ZÕ=0Œ·Üñß)`k£Á1±h|`Ž °9Jk[½x8&pŒFGcUÑýä_P¨¨°ÆØpœ8–x¯°¢¡½«ù¸QøPáÍ«²¼´˜óîGL¶+S r8@­ú]k¯k`Ô휒šæw½ƒð–;΃jx »£±òiVÒeGËÝ›¨‹E8De7êšÛ{_ŠÏxò¢¾ ǸF/¡¥¶47õz°ÛacmlkL4¤p€Í!©¸Õð³ÿÕ”ìâꦷ åâ"Ïa +ïjo¨(¼—vÆÁb—º•Ñ ‡c©¨ŒšŽ©­×ÅwóËêð–;ÞCÞû®¹¦$çvTà?6FZJ«‘hü2áh`áøuÞBžå +šÎF$ƒ ØÐÞ=€ÿªqò§@»m«ñ$#>ÔÛÞ\w£¬?'+UÑÀÂÁIJˆOxêŽ}G݃£S–‹ŠÿUß9Tápøg§\õw>d¸UQRˆwá<ª¢A Ç\6nAñõ»-΄%d "ÇÕ÷Ž¢Ýæß½èekª£&#º”êh á`dbáX²R +L@×€k)‘ ã¿êÛG¡ð§YÉghÊK,ç¡:H8@8p ˆÉnÜifw*ŠüÕBï>:¾}¨Â{Þ…?í?•5Â|‹X˜¨ú«çÌg‡-wËLä íptà¿ê‡ý©ÎÖºr¨ðÓ',Àðäf›û+µÑø‰¢åŠ¬EE~=õQIM3þ«¾}ØŸêno¬,zðo¤¿‹õ^-%©K8X˜©Ž©å²ñ,ƒ"·8q:4>ãq96:ð^õ‡Àê]sminZÌO¨pÐn¹€h0PÑ"×ÚkíâyóAQ%ò«ð^õ_¥ü)052Â}­ô5$–ó‚áÇHýŸúi´ÈÕtLm=ÏGã¿ê;‡í¾.ôO] pµ1ÖFN}»%ã`@E¾\BASßÊŒôWõÂq|åFˆ»¯¹ùS^væºêr«&«p *òE|ÂÒÊÚF6.þàW^ÕÖ ÕñWÇ—7‚–Û^ÂЧàŸ:yÀ`‹¢¤Ðböù“R81PäsÙ¸WÉÑüªœ’ꦎî¼æ~åF>#嶫 ì>ìO©!²”ûS“£‰|>ûb!Iø«΄ƥƒ Øò®gWǘƒÒøø~ »£©ì¾è žvfÈŸâa›7gÒ + 6:„×€_eíìw%9«àE}+®Ž±G*·-¯ÊòÓãCÏÀ>ÿÔ$§Æ(ÈèàX%»QÇô˜{PÔ­l´æâ«cô‘¤ÊmAVò?k#m⟚ÔÔ ÀAúUò›w[ØŸ +‰MËEÔÑ«ƒòFÐ¥ÊmCeQö­¨ ÷c¦:‘>ÿÃTÀ ý*Ø«”´ :ù†ƒš‹¨_”‡ü}?"Ü´Øo{ ½ÍòSÔ§È8^Å% *³a‡ÉaW +uà8ˆ‡Hãý*Œ„p_§ƒ†ZJÒèî› +…qÀ_7à2ñuêºf¶ÁP¯ÑÕã@38\ˆ4ü]›ìØ #*À…쾩ùS ôW±p,Yj®žå ï‹1ižU7’LŽã@ >Ô×Ùöº¢(;%*ÈÔÛuâËxÙçÏ™º?…ဿj¨¹ÒÊ@'}ÂâÓóž×4¿#ðçÏ8Ìà}]íUÏrRc.žÒÐT\±„ƒeJvß(?3Ìbœk®P‡±‹_DRæ“rÄä°XÑ;bðšÒ¼»q¡>'Qi,å\ÿÔ”Â@¬¹¼Ë[§¾Óô¨[àÕ›÷ _Ô½ÁMþ?Œî·Íµe3/Ÿs¶6Þ®*#&Ë-㬩üS$DulÞýçq¯óדãÅ +ñùZ§êÊÁ#þ9º_g#* ´ÜN- JuH)m5°rð‰IÍ)®lÅŠÎq 0:Uÿ²ðAJT°‡ù. yI!ZHÃAR‡èZí½9ù„ÆÝÉ-ÅŠ¾{.„vÛVP§ÞŽ¾pÊÞRËïR+ùh! Œ¦Ž…<‚«dÕv˜Ø8Ÿ OHÏ+­iê ëž;Bm •Å9i±—N;0ÔR^#ÂÏEiPà˜Íı1ùþ#®~‰ùÏŽnúÅA„†FCUIî¸0_§CFÐà‚< i#  fÖEÀäò»ÌŽ¹D&ß{RV fGÿ{úÄA†ÑÞX]’—ž~ÎÙÆä59hp&ÚHÃÔA4¹¢¦ÞŸvA×nf€Ùñ¶g€.q`0ÕW]šŸ‘áçzdÿNõõB‹9X™gÓF DÀä\ü"ÒJ[õ-í½ÎG¥ ³ã]â €ÑTó; ˜Œª¶áAÇÓ!1·UÔ·èÇh3“#=ì,ô¶(I‹ðsÃ:ECiqü2›™…ƒw™¸ì†íF0;6íÜØå\8œé„ñ‰ÆMÆ6™UËx9X˜i\§Fã€=àX¹ZAC×ôˆ+À‘–Sô²®ÌÀ¡a€c¦Ëúû:úˆÉð‚0T 84P?‚Åì€+pó.ˆ#ìFÚç/^5wtõÑ"ŒÞÎöƯÀ˜ûaPààæÇp¸œ MÍ.,Gp œÙÕ +ñá=€ÑÖX væŒmª² ƃ<;ró‹H#8œ}/ÅÜzPP^ÛÔÞ9ÃqŒ`0z m Õ¥FÐ0~@·MΈCâÐÝoó·OHtÊý'e5í½ƒ3xx e +Âè!´6T•äg&EN/ b±ÂpH)jìÜgítúâõ³?¯nl#ôÎÜáAœýÝïÞ¼®,ÉËHŠ ô8>­0H8˜á³–RؤcrÈÑûüµ›™ù¥U ­„ž¤éμx`þêë~ÛR_Qœ›žxÀ°¤ø4ÀøÇjyõ?Œ:x_MÊÈ{Vù3PDe€™ÑÑ\÷²(çNBD€»…–Ê´Âõ¬–®”\¯¶}ï{ÏÀÈÄôGÅ`x«ÕÌáARh¶Mµå…ÓâÂýÜl-ô§6.¾r´ ­Ž{DÄßÉ)ø•Ç̉„¿T¡­±¦¬àÁíØ°s®ÇÌõ¶*O; 2Žylœ|B¿Éªn3°°só ¿‡G pyÏŒúV#Äɇø»ªôqVJô%_ç#f»·(¯›v$ÿç¾N£©Þ÷0€×:·sn¥r+!2C.!T†TÊÐ5$CÒ€B†,)Ç¡„"©Èt3Ê1CÈVfÛLÚd.¥i{¬ûýý‡=œÞœu‡ÚÛÿ¥áÕg=Ïóý-[¹šoƒ¸œÊ.ýÃÇÜü#âÓ”×·t ŽL¼†¶Z(·ÙRïggÆiýÏŸç$߸ìëbk¦§¥,»Ið›cK~^!ñÍ*;˜ÛŸñ ‹KùµäÉsñÔV á¶"ƒñ^cÃ}íUEY‰1Á>§mLöi(É°ñ Ž['$&«¬¥gfëâr=)»¨º±½w˜¹­8Ùƒ¸¥>½ûzrt¨»õéãüû·¯ýâyÂêºêŠÒ¢<Ü\ßçøçÜ$£ï@›SÞQw2 +?méA·§9 ì–§ P›jËòÒâ¯\ô8ni¤½]AJd=Âøþ/߃α”‹›G@TZq‡î¡£Nç.]½•–WZ m·¼9:øb·j©˜ŒØ0¿³‡õw«ÉK +¯_»ŠM0ŒÇ’ViZ;{!,ö^ö£* +ÜV£“¯ñà<F0ÞÎLŒ`-Uy7:ø¼³­Ù*rùÖ¬ZþW6ÁXDžVK¹V­å–ü»ê®ƒæv.烣ïÜϯ¨o¦ÐÆáéǃãêjž8¥°`Œ½ìï„–zžù‹çIkã}šÊpÙò®^ÉNÌï@¸t7oÕÜob}Ò3àj|jnI Œ9Ϋ+¦Å@Áèi£T=ÊIŽ ÷ww´4ÒÙ¡(SËØ +ƒé—î&Eu]£#Žn~¡7’2јw¡x ãŠÃê +³øX¼ÇƒAmª«È¿-åëjÿ“þîm +?ŠðÆKØ +ƒñð€ÓJ@Æc·¾¹³Oൄô¼’šg(p\Í}$ëŠ<æéëM£±ºø×Ôø«ž'mLô´Ðdð¯%.[¶Â ?<`Ë×®–SÑÚolåäá{/«ð1¬Wðöàœº"- ðÆ€Sª#3ñz¨Ÿ›£å!]u%Y± l¶ßLyZ¡ñ“QÜ¡chaïz>Gc[¼=¦gñºbú``%Eèn¥ `ÜŠ ôv¶5×ß³MAJTp»í7óÇu‚¢Ròj»ôL­Oœ»›”UPQßÔÙ7üjr†éºb_|0°K ++©ÞögµåùŒ îNVÆû¡¥à•ÁÃ͆“ÁøèãÁÍÿQb³²†®‘…´ÜâjJk×Ôº®ØÛƒe0 ¤ú©ÍO+‹rRâ¯ú¸Ø6ÔÙ¡$ƒµ[NãCãñUkඒ†1?`jsÂÃ?ìFbF~Yí³öž!ÚøÔ¶ö [ Á€K ++©’¼Þ‰¹Œ‚a¢·SUžÝ[Šøm·ÏzaI¹­X<\|#ãSrŠ×7uô¾k—m=˜-ÞLÓ†z°’ʼàålÁPWÞ ·›·ùm…âÁñØ‚âaíä~árÌô¼âª†fjß‹Q6õ˜g±˜yÑÛÙTÿ¸('õÖµ`ß³ŽGõvªÁ| ñ²}K‘ÞVø˜ àñ0jsCU1*©P“?›ëk«+m–€ù†ÑRlŽAo«–ÁÓƒo¬WÆGÏøEÞLÎÊ/«¡´" º;„ŒÜQ¤E?µ…RSú0#)6"ÀÛÅþÈ¡}Z°›„ˆùfû–"?¼­ÈxÀq¥®­onsÂÝ/$êVJvAù“ÆÖ.F>>ÿöÍB¯(¸içH‹VJMY~VòÍÈ ß³Ç­LìÞ®(+¾‚æ›ZŠüXâ!´IJ^Uk¯‘…ÝiOÿÐè„TVx|¦ä[€ÌÓ+êóG°x={,ž”d§ÜŠ +ñs‡’2ÐÑØ*÷£¨ /S08cs<à¸Ú(.«¸ êÊÒÁÅëRXÌíÔœBä}52ï¹Áƒ È×a¢€Šz7‹Yô© Ñ¡þž§í,PI)H‹mà‡ÅÀ‚Á)-E~ŒxÀÛCPDRNyÇžƒ&G]½‘GZäö£ó˜}‡ +‹¯2O_ <of&ÇhC}°˜Å혰K^.–Æz¨¤$„Ö­æÄ``ÆWðöàßu¥¢¡£ofåèêŽò«¯*-ÈIOŒ‹ ñ÷rq„\ì Y A¾µÜ+8¼¤èßb²®–rÁµË'DxÀ~8ºxù‡DÆÝMÏÎ/©¬¥4·wõ a PYø¨“"t’ÿÄ„þ¿¬so1 +î¾®¶¦†šŠG2Sn߸äwÎù˜•– YId ‡—ã[L>>–!~ÂöÜê˜ó9¿ ˆë ɹ…eUuÍÝd ¼{ÏÁH&†…ù±ÿÆÚ IÀj¿ƒÙžš@©èëjo¦ÔV–äç¤'ÝŒ + ðu?eoiªOXñÁxs-%/©€±ˆ¬+´çú¦–ö§Ü΄^‹»›š™W„@BaC&¦f ³0œ„n‚Â*óÅo~'‚ž €PŒ¿¢AAEc]UYanFòíWƒý½Î8ÙZÔÑTÅ,Ð!Å…c!”ã[Ì䱊ôPÕÔ>hlñ³“«§_`xt|bZÖƒ¢r¤wp˜ö +: DÞ’$tRåKV„ß±¿Å>b‘y9ÔßCmk¢EQ^fêݸk¡¾§YÿtHoºŠ‚Œ‘ ÂbA”ãûƒ쇄Œ‚ŠúžýFæV§Ü|üƒ¯Äà JSµ§hxD¦f^$¸   œ…ÃøˆŸÿ†)æ€A̾™Á%^ ôvu´ü‡Zˆï‘15eI´B(ª+J +r3Sãc"‚ý}ÜN9X™ÒÓÖTS’“ƶ{[ Õî]a1)9EU=û MØwö @R3s J*ªë(Ï[Ú©Ý}@2òjlLf‚òncL†ùC?ú€!̽ƒ8Ìþ›ý:j:¿ã8>±?lmå>I w$¹‰ad áXLM†Kä4 *² +"² ( +jŠ`Q1 +Š.ëµ­««íluúôýù~‰µÛ·g$Ï_’o`˜0y}¾É›×àð¿¿D“xú—˜¿2¢ì?ÕÙÖ\_]Yº;GºM²‘Ëqs¶£‘-ˆŸ¿ê¢™jçäêîåÈŒMLgHeu}s[ç©þAÅÈ•kÓ·îÌÍ?Xxøøé_ÁäÅϯ©¼~ƒ\d–×ÿBo^#`xõó‹ç?ý A,Ü¿7«B£8}òDkcíÁŠ’Ý9â䄘Ía>žl&QVæ¦Fúð™ö³·@i<àû ¾‘©9ƒÅáúmÂ@2rv—T¬ml=Ñuºðâ¥ËWÇ'¦gnÏÞE&žÊ3¤òò¸ ˜_~ù§&¸0xõ)<†'.<˜¿;«š™ºqM9¢è=Ùq¬©þPÕÞ¢ülé¶äÄØH~ ¯—»+Ìšdfb¨‡¾ë­ Ô[/VÿQGÏÝÉòx "ÍÎ/Ú[u¨¾©µ½³çÌÙ¡‹Ã£W®]ŸœžQÝ™»7ÿà{Pyüäéà0ÏŸ¿ÐW?=ƒŸ>y +ß?˜¿7wG53=y} &qa°6q¬¹¡f¿¼¤ O&I%ÄDòƒü¼9,Ü-Ð,°#jÅX 4èÀÒ721#YSm™l$&A”.Ù‘WP"¯:TwähÛ‰®žÞsçãʱñS7gT·gçîÎß—…BðÐÓÀàþüݹÙÛª™›S7ÆÇ”£ÃŠóçú{»;Û[›êA¢´pg–Tœ*üjËfX׃Åt SÉ$¢16 ìˆZ1(ÜcñÀÒÑ3@'–5M Âß¼å+aªøϲ¼ÝEå•€¤¹õx˜ô¼ U^¿>195}sæ–Ju[“JukææôÔäÄõñ±«ÊÑ‘aÅ…Á³}½=]Ç[›×VWí-)‰?¥%ÅÇF B6À*˜Ž¶TtBÁÝbÍ–Q+ÅEX:bŒ@ÐBXï !‚¨˜xaê6Ifö΂Ⲋªƒ5u‡›ZÚÚ¿ëê>ÕÛ7pnèüEÅð¥‘ÑËJåMJååÑ‘KÊ‹ç‡Î ôõžêîú®½­¥ép]ÍÁ*yéžü\™Tœ–”ûexXÏÓÝá€(Ð µ2g¡I3å  7wOž_`¨ rK\¢(M,ÉÌÊÍ/,.“ïÛ_ým]Ccs˱ãí'»{N÷žéëë‡ÐC_ß™ÞÓ=Ý';;Úkinl¨û¶zÿ>yYqá®\YÆöôa<&±ÑÇ‹Ãvq²§SÈ$3œbñn±B-P˜ d‰L¡Û;¹°8 Âø2&.1)å±$C–³3¿°¨´\^Yu º¦¶¾áHcSóÑ–––VnkLtTd„€èï·çµžÃvsqv´£SmÈ$$a¨¯ £X­¥øpËAVÃDtõ ŒŒMÍ02qfº²Öq<<½¹>¾~þAÁ¡aüM‚ððMáá‚Mü°Ðà ?_®·§gË•éìho» ,-ÌðMè¬Á$´ÿ95|ÊZ`$Ds K+k*ngïèäÌtqc±ÝÁÅË›Ëåñ|4ñx\®·¸³Yn.Lg'G{;:jcm…Aè©7Ih)~- LY$1D&°K+²5…J[K·µsƒÉtY“É`€ƒ-}-J±&[Y’Ì͈¦ÆFÄšHh)~%ÂRœ­DGwÅ©X,‘‹ …B¥RišàŠB±A–$ ¤`‚ôÁ‡ÐJ|D5 n(:ºz ‚XÀÅ”H4C™ãaωDS0@ €3€,nØ¡•ø¨Ô"8 f;ù=RA,ØXe »‚WuáLBHÛñ; B+ñ±KM°à*°`$³,ôÒj„¿ƒ),:h ´¿% MEí‚õ…:õ ¸®€1¬Rÿ‘OýÏ|&ËTp–E™e©°j™‚Öáÿay«>Ü;¿õ©ßôçá¿÷©ß¢6mÚþ‡ý[€EšIL endstream endobj 792 0 obj <> endobj 859 0 obj <> endobj 860 0 obj [0.0 0.0 0.0] endobj 861 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +398 0 0 398 6557.1162109 7246.1401367 cm +/Im0 Do +Q + endstream endobj 862 0 obj <> endobj 863 0 obj <>/Filter/FlateDecode/Height 398/Intent/RelativeColorimetric/Length 20921/Name/X/Subtype/Image/Type/XObject/Width 398>>stream +H‰ìÖy<ÕùÇñ™{çÞKeß÷õXN–ìǾeÉžÙ²g:gR2¢D#Ë„ìK­!†B²"IÉ’%¡FiêîËçû;ŽsÐ}Ì<îãÎu¯üüÎ?Îïùx>ùd«­¶Ú@}úS­÷¸ ZýÈó±¶\~ñÖüv©ÏVF¹½Ff½¿ÀF‰V +ð;è÷KýåWô•†Ve½¿Ê¯;ªÃ’™ž<==ý6èsÚÐ ¸Ÿ’uÈ.”-’ÿ´ˆS@`ûvFÆ;vìD1‘îá##Ãö툹,©`&Ë$ëýí~M­À@€33 ++;;'Š …]qp°³³±²²0331 rA* +•dKäç¶$AA¿ mÀ€ pqóðòòñ  + ‹P‚k!!A~>^^n.$Ã. Âˆ¶&Ë$["?£O—)h 0`@daQ1 Iœ”´Œ¬,¿‹/++#-…“”&à @!›`$ppm‰üTT‰Ï@b‚™…“‹‡_PXDL\»ääv+)«ª©kššZ”45  u5Ue¥Ý +òr»').&",ÈÏÇÃÅÉÎÆ $Yï¯þÿ…I’X‚àæQqI)¼¨¨©4µuôô ö˜˜š™ïµ°°¤da±×ÜÌÔd‘¡¾žŽ¶&A]M\äð2R’â¢`ÂËÍÉŽVÂÈ@#²²*Z +4 +L‚u'—STRQ'héꛘš[XYÛî³w8àètÈÙÅÕÍÍÍ?]]œ99p°ßgkmeanjbl¨¯«EPWQR”ÃKã€DVÂÁF#²²¢•Û>g`\’ ä•ÕÚzƦæ–6vöŽNήî^Þ¾Güƒ‚CŽ‰$JDâÑà @ÿ#¾Þ^î®ÎNŽöv6–æ¦ÆzÚ5eD").#YSk „ÚŠL,l˜„„”¬¡odbnekÀÉÅÍ ¿!’Ž ÿêTÔé3gcbbÏQŠ‰9{ætÔ©¯ÂÃŽ#C¾7§ö¶–æ&F@¢ª¤°K'."„‰À{„aÈz?‘õë#ìœ<ü‚HB~·Š†–ž!@Øíwtv÷ôñ +!…žˆ<s..>1éBJjZzFfVvvv +~fef¤§¥¦\HJŒ;}:2"üD()$ÈßÇÓÝÙq¿­•ùC]Mu äãᄉ,ƒ —ú¦fþ—¥Rpñð ‹IÊÈ)ªhhë›YÚ"/¿À`RèɈ¨èظ„¤äÔ´Œ¬œÜü‚Â+ÅWKJËÊ+*®Qª¨(/+-¹Z|¥° ?7'+#-59)!.6:*âd()8ÀÏËÝù ½…©‘žˆì’–âçád_ ²ÞæùˆZIÁ+ ,Ž“•WRÓÒ ;'7O߀`ÒñðÈèØó‰É3²s/].ºZRV~­²ªº¦¶îf}Cã­¦¦Û”ššn56Ô߬«­©®ª¼V^Vrµèò¥Ü쌋ɉçc£#Ó‚ý}<\a$¦°5%yYœ¸°„žnszPgAGOC!…WPÑÐ10±° ¯#AÄP€8ÿMJzv^AÑ·¥•×kjoÔ76Ýnnm»ÛÞÑy¯«û~OÏJ==÷»»îuv´ßmkm¾ÝÔX£¶æzeEé·W +ò²ÓS’ÎÇž9v,$Ð×Dlöšhk(+à¥YðRßF dSX´³Øθ“…“£PT!è™Yí;èêéD<þÕé˜óI‘_X Õµ7šš[ï´wvu÷<è}Ø÷¸ÿÉÀàÐÐðSh….†‡†žô?î{Øû §»«³ýNksSÃÍÚêÊŠ’⼬´äįÏFž =èëárpŸ•™¡AEæçá`eÞ|¡Z Y0³rpû« +sëýNîÞ!¡áQ1ñß\ÌÌ+,.©¨ª©khjikïìîé ~:òltlüùÄääÔôôô Jp=599ñ||lôÙÈ €KoOwg{[KS}] äd¤$Åȱo7'{k3#]Xˆ,NTX0:ê@ÖûaýÂ-[À³€JP'« ¬Q:ìHnŽv{ôÊò0~nVìÀÚÈ+-Ø8y…Ĥä”4t-ìÝ|I@‘˜šu©¸¬²¶þv[Gwï£'C°179,¾Ã 0€?CÁú+mä[èCŒsd2?$ãÏžö÷=èjomªÿ¾²¬èRVjBld1ÀËÅÁÆÌP[m7Þ ¼œÛƒÖbXð ‰KË«h˜Z;¸xÃ"ÉåUuÍwïõôL –€l€=ø¿‘ûûÊ–îRh  M~x5?;3=9> +"{îÝmn¨­*/¾”™s*4Øï°Ó>Ë=zJrp`ñr²mXU\|B2 +ªÚ†{íÝý‚C#ÎƧ Šëu-í]½žŽ" 8šÞ ²™VàV†‚‚™üøVòš,òlxàL¤¥±®ª¬(?ãBÜ™ð/½]ؘhªÈK‹ ñ­òXïgø_kåE¶PÓ1¶°?ä@ sïÜûÃÜ÷络ãTó˜¹wÊ9ÇçOø<¯çëõ~Î@ÑÛ?8Œeø âC ¿ýÑû +‰…ìïél •¥ٴ丘ۡ¾ž.glÌŒô´56c<°| }5Gt…K +ÝXw,tô-)ŽnÞþÁÑqI´ì‚ÒJ„¢ ü4¡€L`‘øÄBø},8‚dzdldp €ÔWW¿ÈLM Þ½ù“Ÿ×y‡“Æú¬ÏÑý1't…Kjþ×pë¡MK°00±´ur¿ùàIJF^qEu=JÅÀ†³d'ñÿsø"$‘I $¤µ±®ª¼0'=9î~D°¿·›#ÅÒX_ñD^Tó¸š)©oyxù„WIJ£îÖG,<|ÃïÆ&ÑrŠ^V74µw÷¡®ÀP ?13ñÙ@|’ÈèðÛÞÎVz]UYAvZ5*,Ðñ_mWU–[Á¿tñBîÖ# /å_!&!­ ºº±ðÅX¤çWÔ¼iA†ýŠÏO‚…È SPê`,HCõË¢ZRìÝpăba¬§¥®"¿^\Í+nÖb‚±€†”¨øzyu-=c Š“‡ï5`‘œžWRYKoíê÷~ +ÃO_+n,¨ôVqn:ƒ‡¹Ñ~ÍmÊ×­Y)HêŠ ãcþ×píñ @yoTVÛ½ÿ°9ÅÉ9êÆ¢ŽÞÖÝÇb–Q°AB¤¯«^[Y’GðpsdÁnäc‹àÑßÝÚX]žŸ‘{'äGOgŠù¡½;T±x,…Ûƒ Êœ°Ô·<¼Ë…Ä°`0=áèq%8’šœ‘_^ý¦vg²À Ñ¡¾®–†ªÒQ¡e¼œo+ÒR -å_¹f½<4†‘å)WïÀ›÷ãi¹¥U -]}C£œË½™<~ìíh®«,Ê]…]õ:g ñÐP‘[·Z˜É"·Õ K Š®•VRÓ28jãxÑ/$êQJVQe]SGï ÜœÌ=_¦&ÆGÞö´Ók^æg$Qo]vw8~Do÷Öï6ˆ‹ò-ÆmÅ¡Ûj†¥V¬’Ú¨¢±÷… +FLBú‹òêƶž·#ãp_p4 ôèsØ»“ãÃý]­ U%¹iO¢Ã!³ƒ:êʲ’b¤­8³¦°6o®«(xžs3ÀëìISÍ­ßÁ%ˆÊƒ£.V²›4ö¶<ív98*.5·´º±!)vðÿö]¡u…âÑö¦ª$;%6ò'W;óƒ:Û”¤×rZyà0àÊX&•¡ºs¿‰µãEÿðè„ôü—uÍ0¥ÆQ0¸KRÌÇΦšò´'wC®¸Û[éj@yˆ¢ËƒSpcj!\«¡24 LOžý!ðÖÃä,¨o¸1FÉ`p# ôÈxLO¸ên­¯,ÌHŒ¹qÕÓÉæÈ~¬<„–-^È8Иš‡©åÂk6(ªišÛ÷ ºó(5·¬šÞÑ7÷4JŠùfÄcl¨·½ñuIöSjÄ5ïs”cš[֭ƺœp0ИZ).­¤¾ç°Õw¿Ð{ñ¸¥°úƦ·D<ÐíÛ*/-.*È÷ü)sCm5Å k„ñiÅfÄ™`ˆ¬•QÖÐ5>îèé#&)³Y +¾)ÒRìþпöˆxàeÞÝR_Qêç~Æêðu%iq4­Øƒ–­„¬ÊŽ}&6Î^Ô§Ù%¯1K1ê›Ýßù—°Õ`/l«¢Ì$TŽÇt·+Ëpœ¢Uvê=yÎûzä£Ô¼òÚæN°Ôä4W×7ë#ã1ý¶U½º4'…èålc²oÇ&™µ"lÆÃø;À•”SÝ¥oJqõ ŠzL˯€‹ÜRs"øcØêç‘®æÚò¼ÔG‘×½Ï8²‡Š,›q0,â“’Û¼Ûà˜ÝùË!÷âŸBeÀҶÔ±ù0[¡m…Ê£µ¾"Ÿö$*ÈÇ…rTo'›q0a‰IÉoÑ<`vê•Ðû‰™EUí}èâ›C–"n+ØVhê¶5¼*|/ÄוbÊf3`¬’Rتeh~ÚÍ/<&)«ä5½³*cnl©ÞŒòèëh„.OŒ½|Þö˜þ.vâ `¬-θÿxãÁÓìÒš¦®4l¹üâû݇lE”G'ýuIVÒ}Àa8TÙ†¢1 Cû ¥½‡ÿ͇)9eµÍÐßDeÌ-K‘(_ <ºšªK³“î‡]¹ÀN$Œ¥Pà†•ýÅ«·¨)¹åu-ÝÐßÓ vÜ—ydyLMŒ¾íj®)ÍNŽa+†ƒgÀ­Øgyåu­=ƒcŒþf÷·}±Çìò·Ý͵Gø8¾š= ¢RòÐFDljÞËúÖž¡ñ¹ƒÙåcƒÝ-µe9€ÃÃAVùüYÃÃø†g‰}[´ 30/*êÛzÆ;ù>ýÓjl°ç8Îã«ù†ˆ„ÜfMC û‹8Œ-Û¹9¦X1­`éâ8ž²BwÇJ~Þÿ²_&þT®{ÿôéte–1Sd*ã¥LE*‘\IdºQ4Ñ`,W"CTÆ"$BƒÐq¢"ÒI¦(2F$ŽÛ9Ýû<ÏûnCÃiïÍ®îÝïúžg}Öï»nÇ÷2ƒe¯°¤‚ºÎ:ëûÄ`f´võÑ‹¤j5fÎ0åÄ…x8Xf~;p38x…%äÕW[ïð +oÆÿo³ýT¸CcvD¸;Yi«Ê‰ ò°3;h~«@4~ùÛL! yµk­¶{LÍ.¤?3¾hÇawG CmY1n`Í{.4cÆLfvAq9ÕåF›¶yžHÉmj¼?ú›¾—Ðð³#?+)ò°›ãÆ5ZÊ2s¸Ø˜h=;°:ÅÌÎ- &«¢mhéä}ö×`F ý™ñ©eù™I‘þ®[Ì –.”ÍÉÊÄ@StàCƒ‹®Œ²Ö G÷€¨äË`ôµtÒ¡_°ãL„ß>‡ «4•æ‰ð‘fÍÜÀº-çlQé…K Ì·ºúG&eݸÍè¥G3&Øñª®¢,/#1ÌwÏæõúK¥àì %ÉÁA·å›3OIc•™Ã>¿ˆ3™ùwžÔ7Ó«£vÀøª®üöõK Ç}\ìþ¡»HAô\’Ý©™Ì ÛJþ}±þúÍ{|Ã3òÊ*ê›;z†~§K3ÆÛÑÞT[^zõbüQï]6ëV€Ù!Š­H>JpAqyu];Ÿc é×oWÔ½Bfü›>ͳ£ØQó¨8÷ü©#û·[i«ÈÌå‡ÅŠ6è€Ð€uJu¹±õNïи WK×6µ¿xO¿fŒîŽ÷ý=¯_V?¼u%íd‡“Åše ç‹€bÅHt`ÐÀ®eh¹Í+8ö\Nñ£`F?]›ÙñÙÑöâÙý›Ù)чݶlX¥¡$5‡—ƒ…èÀ ÁÂÁ ®¹Ú|«{à‰ÔߊV¿|ÝC2ƒnÝÀí|ÛÝÚøô^AVRÄ¡½›MõC’Ó$hð!‚Ûïõ‹L¾\x¿ª± ™ñáO:ŽÆ|ìëjy^y'/ãôqg[Hr1Z c rj:&¶.Ã3óï>mhí~;8L÷fŒÚñ®¯³¹¾âöµ‹q¡vXi)K‹Òã ¡¬mdµã@h<¨SOê[ºú‡ésh|"Ì´k看 òpÜh ©4oêÑ1<ƒcÎå–<†Ý–^WßgBvü>f(VEÙ)Q‡]Ìô1t0!tL™L +‹õÍ\G§ ‚ƒnK˜Aivô´5V’Ÿ ÷Ýmg¢£&+ÆÏoÕô© +Ç´iÓáââ“аÛí~&«à^Õ‹±:õ£â§²«†Ê²¼K G½1tˆðÍb™9eèÀïÔ,>ie- ï£ —òîT"‚fŒì¹ÉëÊKsÏÇt¬ÖP”&ÕÜ)q/·ÂRŠ«Í=‚bÏç––×5wö½ƒuŠ0ƒ$œäïz;šjý–å¿ÏÞTo‘¼8¬¹St«°>Ë­¼ºž©ý>ÿ(š¦Q‚ÿèOøy„‘ ãõ „Ž°ƒÎ6ÆËUdDgÃ[5½Št§@¹UÑ6¶qö  ‚à…“CÇõô¸ýÛ, –*I órLÍ­»S ÜZló +‰»x½ Aƒ øçv|$Gè(ÉI;àj.¸U‚èVM:øîã—_¤·ÞÁ5àDZN1‚Æ /‘ŒÀö¦ê7MŽðu±]GºU“߀ãú¸S.Ó.ß|PÝ„-? h|ªQt´5>½›)!ôÀvË5ðVME¯‚Sí>IEx§ö‡Äƒrû´±€Æׄ¡cðmWK}Ein[Э@pRá€wŠ“_LN]×ÔÝ©’òú–.bi|U`uôv¼ªyˆß*Ы° 8¹p`çà3¡–‘µóÁ0p§°r;ïaÆ_«¹°W ˜í¿Çn93Õ ðµ6.¾g³o=ªk&îÔ·…ߪÞ° ²yo·4ÐP”äf£6ÂY¹Ä!¼ÀÔÈ¿Wõ¢èSd¿U=m •e×ÎÇë¨ÉŠÎ¦ºå"„3sð‰H«`S£âykwÿ{¢O}[¤ Ø\û¨(;9Üg—•áR%)!n6&ªÂ·[nAIEMKá`jô wêÛÂ7à›v0:òÒO{lY¯§.;—ÚpŒ¶[Y5]S{×Àˆp|jf|[Èû»È‹¯¤DúºX-[ %ÄCU8P4˜Ø¸a»5´Úåžœ]„þ!üG¿õç×ÈŸÝ¿‘âé¸A‘•á Ec®¬ºžÙàSéyw1„wŠ~$…ãaaÖé£T†ãÓhœÎ,„Ñíö +4>WÏ…ƒ¢Z…¢Á·F Û•¯ß §Pä(µ0$rP¶9`4˜ÑÖø,„i"9üöØR¾9€(’JËŒl\EÑ Zx8ºðpx9¡ÍAI8¦M›þ 3Ÿ¨¬šžÙVϼPÁhfPªOÂ7Ç)!n6Fr#+— „âRCkgßH°5@¡Â£ñ£_÷¿¦Qr`›ÃËqƒ¾º,3ÃŒéäœ*Èp&v^iUS#ñ7îÑ ZÂuÈÅÆh™’$ +Y§ +«·œâ +›vŒH¹RR· ª4.™ !ž[ÍôÔdDù8˜Èâ8Z~ì<Â󕗛ػJÏ¿WÝÔÙ7HDƒ:ááhkxRš“éële¨©(!ÀÅJÇÃg0€å'&¿x•Åö…%g—?oí!¢A•ÆÂqÿÆ¥¸`wSé9¼ìd•\R½ËÏØno@Ì…ëw«^vÀh[ƒ:aáèik¨(¹r6Üg§¥Áq~NrJ.b8ª·êzœöM¼\ô¨®¥»hä ê„Â1Ø×Ùôì^~zl ëf“åÊp’ÁqÄpV. EMCk—CÑiWËž¾hï}G0œzpŒ ô´Ö—ßÊN:î½mãJ´Ç¿Urq†Ï™¯²ÂÔÁÔÛ‚µÍ]oß §Z?þÃÑñ²êεó'ý÷Ø®%W‹•ñ[§ +0*ÄðÕ;|ÂÏ^)yÒðú I œª‘¡þî–ºG7³N‡zn]¯«*#BÇá¡bdž/ ö"ª·Äò›œÇßõ¢JîÙ/wªÖ=Žßº¥”"sf™2EdÈ”Sˆ&D E©T +©ä4g*Jƒ +…ŠÉX¦Ê’ eCæˆDGçÞûœw­µ÷fï6znkÓ½Ïûý Öz>Ïûû|¿û·k|ÇQ‡Ïcá”RÑ·tò OÌ)«Gê-|?Äãc#ƒ½hɽåsx\Q‚Ÿ}:#cc.+ˆœ¦‰ px4p8¬·?òl(ÏMŽß <.ÄÅ<>Õ©" ~‰:<|ÃKjÛHõÒøïC*¹Ý-UEéÀãmMµäEǧ *Cšmµè©r³7[µ\Œ‡• œ*ºâ@3§ ”ªÁæ=^—î¦äc +:—`“=UH«Úe®«´”Ÿ}!#}q ýv÷’e&6.g®?H/ªF¦‰öÛ°ßâ˜ñŽ›pÛÿˆãFEq>úâ iCXFÍhËþSW£ÓŠª`¿Å7¤ŽÛÕü&?åî%¯=–ú*“‰ƒ¬ y-S;×ó7cŸ¾ªmïûµgÐŽ;ØÛZU”}íôþ­“Šc\:øßNÈ.ƒÚÀ;XÇâ(yöð–7Iô•6¼.ÝÚh†ÚÀ9ãâÈ™Z”µA¥Ñ1x¨p IÝ$qL¾8¨ÖE_ 6p &°8Š(‹CˆŽ8Pm0±ñŠ)ÀµA`(â@Ç![SM9zâژ͸©’®…“g`Dr^\ø‡"ŽÒìø0?‡ «ÄxÙ˜hÅH|3§ ´ª¡µóÉ+Q©…•pmàòâhªÈKŽôt²ÐUZÊϾq6µ80‰s ˪›Ø¸œ ŽÉ,®ië‚kïc#@•…©QWN:[ªJ r2Ïcø†"qQùUfön>!qÏ_×½ÿð jï âêk«)Έ >ëbc¬.+ÌM«q²Ä±íwáNbNycçÀ0ÔÞAÅñéÃûº×ÏãB|ÜìÍèí?„&q=‹ÝÇ#‘í×Iüïþþÿ¯ âîïlÄö}#g—R5´Â$^…Jjï4Žì¿H qsTã hi ç7¶q9“%NP&hü~Љ½V*R4¥Š$q9MS;Wï[Ÿ•@‰Lã½mÕ/3\?}`«‘šŒM©Bh0±òˆ.×^¿ã°_X|vYCG?”8!i¼½®äiìÍs‡l×j,[BSªÐJµ«T;^ OÊ«hêÂ$ià ñ¯_†û;êK³…úºo7[õM©Âh+Õ¥»_¼m釕 +÷ ¥êó@gcyNâr©b¥j&Eã R‚Ë! ¥b`å|âJT¨T½C£°RTãh©JŽðÜeþË + >6ªR…ÜyÌœBÒjF[œ¾“ñV*¢4Ž”ª–Ê‚'÷.{í±ÔW)Uh +®†É¶ƒçnÄ>}U×+1Ah€RÕZU”uõ¤³µ¡ª” ¨¸J¥àj™Ú»ù„Ä=]ÿ¾Ò "hÅýÔ×VSœsý Vq9©*.MÁMÈ.k쀕ŠÐTÜm&²ÂTwÆŒ™³ç2‚« ³Ñ)¸¹ àBÄ¥Aª¸!>nöfZrÔ—47ø$Vüb¾Ë302%ÿMs÷GXp ¥â–å$Üöóر^{¹(+- 07”õ,÷x]¾÷¤ ²¥Ì X©FãcWSEnRøÅ£ŽuÅyÙ& „27$ÇçF+œDÝ`p¤Dz:™ëÒ @ƒ‘™SPZÕÐzß©kÒ_V·õ¹APh‡28&Ò ?dü ŽÉ,®mïƒsƒ PGaZÔ•ÎV*’æJêÆ6ÏÂñGlÐÁ1ÔÛVý2ýÁµSûÀü“äDæ…Æ,@ƒ[x™ÆZÛCço=|ÇÁG_{mq&Ýù‡Ð˜Ï½d™¦©«wHÜóÒúŽþa87ˆ yþÕ¾z{㬋±º¬59ó-‘Ó2³w÷ Ï.mè€ã¨`óïÃûº’gož;´ÍDCV˜‹å¢ò«Öí8ì–SÖØ iŒFGýëçq·¼]m×j,[ hÌš@ƒ‰•Gt¹özÿ;‰¹åM]QAç ÑPšõ(ÄÛÕÎT¡1ŸLcFƒWLaõÇ£“ò*šº>ŽŒýçAi|Æh„ú¸Ù›jÊQÓøçì¹Ll¼âŠ:›v ˆHÎÓÜ iŒÆ@gCYv|¨¯»½™–œ-l|+tÍ<#S^¼méû¤AHèÑX4 vþ¥Jz»½.ß{RPÙÒ38 +iF@#Ì×};Bc15 Æ…ìü’Êú›÷þt?µ°ê]ÏÐèWHƒ˜| )+ç“W£ÓŠª[{°R’q a¾‡éÓà”R]c½ÿÔµé/kÚú Â2- FfNAé•F[œ¾“Q h|úi”éiÌcæ’Q3²q9ü[æ«ÚvHƒ¸i”çÐ¥1¡Á%$£nlãröFìS@ã¤AX¾†¬ºñ¶ƒ(:HƒÀ@?Sà¥ú™2 hñ¿4ÓÓ€ ÷¯ \?S¾‡‡€”Š•óÉ«ÑiEÕ­½aùìü’Êú›÷þt?µ°ê]BãߧæëNÆÜìüK•ô,v{]¾÷¤ ²¥gpt Ò &ßCƒOb…®¹“g`dÊ‹·-݃#A!Ñh4B}ÝíÜ44˜ØxÅu6í<‘œÿ¦¹ûãÈØù=,ó(4fΚÃÄÊ+¦°zƒãÑ áIyM]QÁhôw4”f= +õq³7Õ”[2Æ?0<¢Ëµ×;xøßIÌ-oêøü; qà”Æ0F#ÄÛÕÎôOöËÄ«æuãëh‰&Íš'¥RÊPi>IRH¨(!ŠJ!q"RB(¤È,%24i"͉æQ»yžN¹¹®ußß°w»Q§~{Ýu×zŸÿà]Ïz¿Ÿç£©0¦yóH*j›í<ì“ZPÕÛ W~ýúùã;h£"ï}t¨ï![c ¤ ¦ÑmH,Ñ2µs?wëyJ~e#lƒ^ÁÚèh(ÏMzâãj³NC^Œ´Á0ÜãqM“í‡|oF¿Ï¯hìì‡mÐ'h}õe9‰Q7Î8o3R—åeÙ;Ÿ˜‚†±­ëÙЧIy ýßü„mÐ!XíõeÙ ‘×OÜj¨¶X”gD   ^1yu£m.gnD%æ”×wôÁ6è“_ÿùùc°·\’q픓•ªœ+‰‘áš6ØxD«n=x:82!»¬¾¶A§€6†@uÅŸÞ…y9Z®Q‘æf%ͦ¶ñ#‰GDNÕÀÊéÔµˆ¸¬r[ïàŸP8褞ÖÚ¢Œ7¯œØ·yµò"!.–¹´mÌ&±r ˨¬±tô + +÷©¸´1Û G€n t·Ô|ù{ÿ’ç ½åÒ‚œ£Ú˜ËÂ%´Hyõæ}'®<|“QTÛÚ3Û GPùû»»¹º0íåÝ‹öæºË¤8™çΞ5¢ NAéå«,¢4ò‡¶ +‡ì°p|ƒÂAŸ`ºÑ tãÕ½O‹U£tƒF8V¬Þ´÷øå¯?~­mé—¡ÜÏ©/îœ?ºkßK +pÐèU8¤–éšïF&n:˜¸ÝpTÑ!  êÀ½uÎ}‡©¶â¨;fâ>O)¨lìì‡mŸQ×ÖXCA|äÀ¥™¸š&Ûù†>MÊ-o€£ŠAno¹$+>âº76pyG \š‰«n´ÍùtpdB6Uô +ñžÖoEŸÞ> +ôÚo¹FEV˜™T#Ú``$±ñˆÈªX9žÄFU+À8lƒè G'UìýKž{,ôV€;bRa'±‚Q¥LU5-ÝpTtRõw6U¤ÆܦL*Næ±mPF•½Ç…;/Ò>W5uÁQExpˆ7”ç½¾éçfgª5vR *Em³îçn=Kίhèì‡':ÄÛÉ¥Ùñ‘Ágœ·©Ë‹žTø¨bçWÐXgãâs#*1§¬¾UðTˆ‡t´4P•á5©0Œ3±ñˆÊ­\kítêêãw™Åum½ƒãÄæñêÂôW÷Ä7¡5©Ð6ƹ…e”õ7ï;1N§ Øèïl¬ÌOyæd|ˆS1.ˆ`|7‚ñTˆq:ÁÆ÷¾öú²œÄ¨³®¶&šKÆ8-ÆMw¸ûÝŒ~ŸWÞÐÑ1Nl@CƒÅ™ï_=uÀÚPm±(ïˆS1.&0î|&82>»” ÁAppl´ î÷àò‰½›õ•e„¹YI£ NŸˆ¬ª¥£WУ·Eµ­=„†Š ÌýìÍu—I r²ŒÆŽq.¡E+ô,öxÜ{•^XÝ ÁAl¨ØÈMzê{h»É¸îGÁ83‡ÀÂ¥:ëw>†ú_ô?Bƒa£­®83îñ5ï[6ÄÆÃŽùÀÿ4ÿ{’ÀÑÁAd(¶ccßf}•ñ±¶ûŸ•ãI -Df)“cƒâ8ŽÜ}™†QmclЀCcÝ6çÓ×#â2KêÚà©".6ºš« Ó_Ý¿t|bÛ 0Ž5[öÿuåÁë_jš»áÆ%,ؾíh¨ÈO~æd׆?—I Œ ªqJ/×5·?zþvLJ~E#ºqáç $è¾ím«+ÍNxrÃÇÅÖXsÉø¶c~IE-“í®øÆmƒ—¨àû¶¥æëÇ7½­ Vʉò² Lì¼¢‹W®µr÷MÆ×ÚxªˆÊð¾M}qçâ1 ½‹„¸&ÀzªI¬ÜøƽxçEjAec'ö °1¼qÅäÕ ­ñSUƒž*(€3º¨°Cõòn€çžM«‘};!6(—[XFy5õTA$(ˆúEE.E•û3¥ ±};aàT±PNÕÙ(°ª(ë˜YÃñE…ª­Fêòâ|ؾ ‘§*ðáë@»þþ×xªfŠúá‹ +;T<“ªáS…¬ªÝn?OΫ§jžª™aøÐ@O[]IvBTÈY7;3¥ÉõTÔF082>³ø[kÏTŽ™“®¦ê/^? ôr²6TûÍ¡¢œ*v^±Å+ ,÷ÿuùAlzaUTŽ™—úò¼äçaçîÞ¨·bòE…T¥—¯2ßuäÜ­è¤Ü2r;¦°Žé• ÀðÚâ̸ˆà3.¶&ZŠ’¿9Tø©bæà—X¢ilãì}íñÛŒ¯µP9fŒá@6>§½ºéľ-+‹ò²Oz¨ðSÅÄÎ+"«¢¿y¯gÀ] ã3•á¥Ù@6üïÜ »LZˆ‹•Ä8Ù×À>‰…KPj©ŽÙ O²J Çgôk  ÿøæQ" + 8˜'?TÈç`@•C\^ÝÐÚÑë +ä8A¾…á·/x8X¬V–Áec²6h”cÕFû£þ€ã9e䶞ÈñéÌ[ŒáEŸ†»n7ÕFeƒô›¯A«ÇÃÇkš»àç˜AC5Ø×ÑPYúò`¸%`¸* “ ªrˆÊ©"¿x'&%¯¼¹ÿëgý·=­ßJ²¢B}Ý×K qÿ–áøçÊqÜîÐÙ‘q™EpäÎ$”y[õ9=öaàI'ë)2û ³ç0#W[kµÿ¯Ë÷_¦T"#wžªiÿ`Þæ$Eßò?j¿QOYFx* Ç>Êq¡EËu7ì:ì…Ž\äs@ŽO'ؼíÄæíUogc-EIÀð©| œãÌü +F[œ |›þ¹ª±£r|Z¡˜¹,÷ý³° Ç6é«È‰ò²OáØ©gbã‘QÖÃFnbvi4ÀifØü2Þ>¾vÚÅÌ[)A®)1œò9H,œ’ŠZÆ6O=zý¡°ª±~Žéû½àkä%Çܹè¹wËlÞNíP¡ÇG®Šþ&óaÏ’ràç˜fð¯Ñ\ó5ã]D°«™Î2i!.Ö©1ÿèÈ]¨¤mbëì}5üÍÇ/ÕMøç€uü“P¿F9øwŽóS“_0JóvøTÍù/ûeâeþ†ñ9£3š¨Hd+¡”%C +cI’’)$5ÑB"ƒ±¥(k%$%dm…”„""ÊÙ²Ôk_Rü~ßïó<ï"Mñòæïsÿ ŸsÝŸëbbåä•Ußeáàs9é>1øæ˜Ø}£û¶+ƒh°³Þb¯ +”\ln3:쌇ƒÊ#*,ô4`4Æ·ü(Ã1,@~1¹1áÀE>#m R4T¤W.Ñ`w4°p̙Ǿ†Ã ¬U„¾¡¸È'p0ÃèÖ… +‰ÆzqÁ Fcl8°ZÕ=0Œ·Üñß)`k£Á1±h|`Ž °9Jk[½x8&pŒFGcUÑýä_P¨¨°ÆØpœ8–x¯°¢¡½«ù¸QøPáÍ«²¼´˜óîGL¶+S r8@­ú]k¯k`Ô휒šæw½ƒð–;΃jx »£±òiVÒeGËÝ›¨‹E8De7êšÛ{_ŠÏxò¢¾ ǸF/¡¥¶47õz°ÛacmlkL4¤p€Í!©¸Õð³ÿÕ”ìâꦷ åâ"Ïa +ïjo¨(¼—vÆÁb—º•Ñ ‡c©¨ŒšŽ©­×ÅwóËêð–;ÞCÞû®¹¦$çvTà?6FZJ«‘hü2áh`áøuÞBžå +šÎF$ƒ ØÐÞ=€ÿªqò§@»m«ñ$#>ÔÛÞ\w£¬?'+UÑÀÂÁIJˆOxêŽ}G݃£S–‹ŠÿUß9Tápøg§\õw>d¸UQRˆwá<ª¢A Ç\6nAñõ»-΄%d "ÇÕ÷Ž¢Ýæß½èekª£&#º”êh á`dbáX²R +L@×€k)‘ ã¿êÛG¡ð§YÉghÊK,ç¡:H8@8p ˆÉnÜifw*ŠüÕBï>:¾}¨Â{Þ…?í?•5Â|‹X˜¨ú«çÌg‡-wËLä íptà¿ê‡ý©ÎÖºr¨ðÓ',Àðäf›û+µÑø‰¢åŠ¬EE~=õQIM3þ«¾}ØŸêno¬,zðo¤¿‹õ^-%©K8X˜©Ž©å²ñ,ƒ"·8q:4>ãq96:ð^õ‡Àê]sminZÌO¨pÐn¹€h0PÑ"×ÚkíâyóAQ%ò«ð^õ_¥ü)052Â}­ô5$–ó‚áÇHýŸúi´ÈÕtLm=ÏGã¿ê;‡í¾.ôO] pµ1ÖFN}»%ã`@E¾\BASßÊŒôWõÂq|åFˆ»¯¹ùS^væºêr«&«p *òE|ÂÒÊÚF6.þàW^ÕÖ ÕñWÇ—7‚–Û^ÂЧàŸ:yÀ`‹¢¤Ðböù“R81PäsÙ¸WÉÑüªœ’ꦎî¼æ~åF>#嶫 ì>ìO©!²”ûS“£‰|>ûb!Iø«΄ƥƒ Øò®gWǘƒÒøø~ »£©ì¾è žvfÈŸâa›7gÒ + 6:„×€_eíìw%9«àE}+®Ž±G*·-¯ÊòÓãCÏÀ>ÿÔ$§Æ(ÈèàX%»QÇô˜{PÔ­l´æâ«cô‘¤ÊmAVò?k#m⟚ÔÔ ÀAúUò›w[ØŸ +‰MËEÔÑ«ƒòFÐ¥ÊmCeQö­¨ ÷c¦:‘>ÿÃTÀ ý*Ø«”´ :ù†ƒš‹¨_”‡ü}?"Ü´Øo{ ½ÍòSÔ§È8^Å% *³a‡ÉaW +uà8ˆ‡Hãý*Œ„p_§ƒ†ZJÒèî› +…qÀ_7à2ñuêºf¶ÁP¯ÑÕã@38\ˆ4ü]›ìØ #*À…쾩ùS ôW±p,Yj®žå ï‹1ižU7’LŽã@ >Ô×Ùöº¢(;%*ÈÔÛuâËxÙçÏ™º?…ဿj¨¹ÒÊ@'}ÂâÓóž×4¿#ðçÏ8Ìà}]íUÏrRc.žÒÐT\±„ƒeJvß(?3Ìbœk®P‡±‹_DRæ“rÄä°XÑ;bðšÒ¼»q¡>'Qi,å\ÿÔ”Â@¬¹¼Ë[§¾Óô¨[àÕ›÷ _Ô½ÁMþ?Œî·Íµe3/Ÿs¶6Þ®*#&Ë-㬩üS$DulÞýçq¯óדãÅ +ñùZ§êÊÁ#þ9º_g#* ´ÜN- JuH)m5°rð‰IÍ)®lÅŠÎq 0:Uÿ²ðAJT°‡ù. yI!ZHÃAR‡èZí½9ù„ÆÝÉ-ÅŠ¾{.„vÛVP§ÞŽ¾pÊÞRËïR+ùh! Œ¦Ž…<‚«dÕv˜Ø8Ÿ OHÏ+­iê ëž;Bm •Å9i±—N;0ÔR^#ÂÏEiPà˜Íı1ùþ#®~‰ùÏŽnúÅA„†FCUIî¸0_§CFÐà‚< i#  fÖEÀäò»ÌŽ¹D&ß{RV fGÿ{úÄA†ÑÞX]’—ž~ÎÙÆä59hp&ÚHÃÔA4¹¢¦ÞŸvA×nf€Ùñ¶g€.q`0ÕW]šŸ‘áçzdÿNõõB‹9X™gÓF DÀä\ü"ÒJ[õ-í½ÎG¥ ³ã]â €ÑTó; ˜Œª¶áAÇÓ!1·UÔ·èÇh3“#=ì,ô¶(I‹ðsÃ:ECiqü2›™…ƒw™¸ì†íF0;6íÜØå\8œé„ñ‰ÆMÆ6™UËx9X˜i\§Fã€=àX¹ZAC×ôˆ+À‘–Sô²®ÌÀ¡a€c¦Ëúû:úˆÉð‚0T 84P?‚Åì€+pó.ˆ#ìFÚç/^5wtõÑ"ŒÞÎöƯÀ˜ûaPààæÇp¸œ MÍ.,Gp œÙÕ +ñá=€ÑÖX væŒmª² ƃ<;ró‹H#8œ}/ÅÜzPP^ÛÔÞ9ÃqŒ`0z m Õ¥FÐ0~@·MΈCâÐÝoó·OHtÊý'e5í½ƒ3xx e +Âè!´6T•äg&EN/ b±ÂpH)jìÜgítúâõ³?¯nl#ôÎÜáAœýÝïÞ¼®,ÉËHŠ ô8>­0H8˜á³–RؤcrÈÑûüµ›™ù¥U ­„ž¤éμx`þêë~ÛR_Qœ›žxÀ°¤ø4ÀøÇjyõ?Œ:x_MÊÈ{Vù3PDe€™ÑÑ\÷²(çNBD€»…–Ê´Âõ¬–®”\¯¶}ï{ÏÀÈÄôGÅ`x«ÕÌáARh¶Mµå…ÓâÂýÜl-ô§6.¾r´ ­Ž{DÄßÉ)ø•Ç̉„¿T¡­±¦¬àÁíØ°s®ÇÌõ¶*O; 2Žylœ|B¿Éªn3°°só ¿‡G pyÏŒúV#Äɇø»ªôqVJô%_ç#f»·(¯›v$ÿç¾N£©Þ÷0€×:·sn¥r+!2C.!T†TÊÐ5$CÒ€B†,)Ç¡„"©Èt3Ê1CÈVfÛLÚd.¥i{¬ûýý‡=œÞœu‡ÚÛÿ¥áÕg=Ïóý-[¹šoƒ¸œÊ.ýÃÇÜü#âÓ”×·t ŽL¼†¶Z(·ÙRïggÆiýÏŸç$߸ìëbk¦§¥,»Ið›cK~^!ñÍ*;˜ÛŸñ ‹KùµäÉsñÔV á¶"ƒñ^cÃ}íUEY‰1Á>§mLöi(É°ñ Ž['$&«¬¥gfëâr=)»¨º±½w˜¹­8Ùƒ¸¥>½ûzrt¨»õéãüû·¯ýâyÂêºêŠÒ¢<Ü\ßçøçÜ$£ï@›SÞQw2 +?méA·§9 ì–§ P›jËòÒâ¯\ô8ni¤½]AJd=Âøþ/߃α”‹›G@TZq‡î¡£Nç.]½•–WZ m·¼9:øb·j©˜ŒØ0¿³‡õw«ÉK +¯_»ŠM0ŒÇ’ViZ;{!,ö^ö£* +ÜV£“¯ñà<F0ÞÎLŒ`-Uy7:ø¼³­Ù*rùÖ¬ZþW6ÁXDžVK¹V­å–ü»ê®ƒæv.烣ïÜϯ¨o¦ÐÆáéǃãêjž8¥°`Œ½ìï„–zžù‹çIkã}šÊpÙò®^ÉNÌï@¸t7oÕÜob}Ò3àj|jnI Œ9Ϋ+¦Å@Áèi£T=ÊIŽ ÷ww´4ÒÙ¡(SËØ +ƒé—î&Eu]£#Žn~¡7’2јw¡x ãŠÃê +³øX¼ÇƒAmª«È¿-åëjÿ“þîm +?ŠðÆKØ +ƒñð€ÓJ@Æc·¾¹³Oൄô¼’šg(p\Í}$ëŠ<æéëM£±ºø×Ôø«ž'mLô´Ðdð¯%.[¶Â ?<`Ë×®–SÑÚolåäá{/«ð1¬Wðöàœº"- ðÆ€Sª#3ñz¨Ÿ›£å!]u%Y± l¶ßLyZ¡ñ“QÜ¡chaïz>Gc[¼=¦gñºbú``%Eèn¥ `ÜŠ ôv¶5×ß³MAJTp»í7óÇu‚¢Ròj»ôL­Oœ»›”UPQßÔÙ7üjr†éºb_|0°K ++©ÞögµåùŒ îNVÆû¡¥à•ÁÃ͆“ÁøèãÁÍÿQb³²†®‘…´ÜâjJk×Ôº®ØÛƒe0 ¤ú©ÍO+‹rRâ¯ú¸Ø6ÔÙ¡$ƒµ[NãCãñUkඒ†1?`jsÂÃ?ìFbF~Yí³öž!ÚøÔ¶ö [ Á€K ++©’¼Þ‰¹Œ‚a¢·SUžÝ[Šøm·ÏzaI¹­X<\|#ãSrŠ×7uô¾k—m=˜-ÞLÓ†z°’ʼàålÁPWÞ ·›·ùm…âÁñØ‚âaíä~árÌô¼âª†fjß‹Q6õ˜g±˜yÑÛÙTÿ¸('õÖµ`ß³ŽGõvªÁ| ñ²}K‘ÞVø˜ àñ0jsCU1*©P“?›ëk«+m–€ù†ÑRlŽAo«–ÁÓƒo¬WÆGÏøEÞLÎÊ/«¡´" º;„ŒÜQ¤E?µ…RSú0#)6"ÀÛÅþÈ¡}Z°›„ˆùfû–"?¼­ÈxÀq¥®­onsÂÝ/$êVJvAù“ÆÖ.F>>ÿöÍB¯(¸içH‹VJMY~VòÍÈ ß³Ç­LìÞ®(+¾‚æ›ZŠüXâ!´IJ^Uk¯‘…ÝiOÿÐè„TVx|¦ä[€ÌÓ+êóG°x={,ž”d§ÜŠ +ñs‡’2ÐÑØ*÷£¨ /S08cs<à¸Ú(.«¸ êÊÒÁÅëRXÌíÔœBä}52ï¹Áƒ È×a¢€Šz7‹Yô© Ñ¡þž§í,PI)H‹mà‡ÅÀ‚Á)-E~ŒxÀÛCPDRNyÇžƒ&G]½‘GZäö£ó˜}‡ +‹¯2O_ <of&ÇhC}°˜Å혰K^.–Æz¨¤$„Ö­æÄ``ÆWðöàßu¥¢¡£ofåèêŽò«¯*-ÈIOŒ‹ ñ÷rq„\ì Y A¾µÜ+8¼¤èßb²®–rÁµË'DxÀ~8ºxù‡DÆÝMÏÎ/©¬¥4·wõ a PYø¨“"t’ÿÄ„þ¿¬so1 +î¾®¶¦†šŠG2Sn߸äwÎù˜•– YId ‡—ã[L>>–!~ÂöÜê˜ó9¿ ˆë ɹ…eUuÍÝd ¼{ÏÁH&†…ù±ÿÆÚ IÀj¿ƒÙžš@©èëjo¦ÔV–äç¤'ÝŒ + ðu?eoiªOXñÁxs-%/©€±ˆ¬+´çú¦–ö§Ü΄^‹»›š™W„@BaC&¦f ³0œ„n‚Â*óÅo~'‚ž €PŒ¿¢AAEc]UYanFòíWƒý½Î8ÙZÔÑTÅ,Ð!Å…c!”ã[Ì䱊ôPÕÔ>hlñ³“«§_`xt|bZÖƒ¢r¤wp˜ö +: DÞ’$tRåKV„ß±¿Å>b‘y9ÔßCmk¢EQ^fêݸk¡¾§YÿtHoºŠ‚Œ‘ ÂbA”ãûƒ쇄Œ‚ŠúžýFæV§Ü|üƒ¯Äà JSµ§hxD¦f^$¸   œ…ÃøˆŸÿ†)æ€A̾™Á%^ ôvu´ü‡Zˆï‘15eI´B(ª+J +r3Sãc"‚ý}ÜN9X™ÒÓÖTS’“ƶ{[ Õî]a1)9EU=û MØwö @R3s J*ªë(Ï[Ú©Ý}@2òjlLf‚òncL†ùC?ú€!̽ƒ8Ìþ›ý:j:¿ã8>±?lmå>I w$¹‰ad áXLM†Kä4 *² +"² ( +jŠ`Q1 +Š.ëµ­««íluúôýù~‰µÛ·g$Ï_’o`˜0y}¾É›×àð¿¿D“xú—˜¿2¢ì?ÕÙÖ\_]Yº;GºM²‘Ëqs¶£‘-ˆŸ¿ê¢™jçäêîåÈŒMLgHeu}s[ç©þAÅÈ•kÓ·îÌÍ?Xxøøé_ÁäÅϯ©¼~ƒ\d–×ÿBo^#`xõó‹ç?ý A,Ü¿7«B£8}òDkcíÁŠ’Ý9â䄘Ía>žl&QVæ¦Fúð™ö³·@i<àû ¾‘©9ƒÅáúmÂ@2rv—T¬ml=Ñuºðâ¥ËWÇ'¦gnÏÞE&žÊ3¤òò¸ ˜_~ù§&¸0xõ)<†'.<˜¿;«š™ºqM9¢è=Ùq¬©þPÕÞ¢ülé¶äÄØH~ ¯—»+Ìšdfb¨‡¾ë­ Ô[/VÿQGÏÝÉòx "ÍÎ/Ú[u¨¾©µ½³çÌÙ¡‹Ã£W®]ŸœžQÝ™»7ÿà{Pyüäéà0ÏŸ¿ÐW?=ƒŸ>y +ß?˜¿7wG53=y} &qa°6q¬¹¡f¿¼¤ O&I%ÄDòƒü¼9,Ü-Ð,°#jÅX 4èÀÒ721#YSm™l$&A”.Ù‘WP"¯:TwähÛ‰®žÞsçãʱñS7gT·gçîÎß—…BðÐÓÀàþüݹÙÛª™›S7ÆÇ”£ÃŠóçú{»;Û[›êA¢´pg–Tœ*üjËfX׃Åt SÉ$¢16 ìˆZ1(ÜcñÀÒÑ3@'–5M Âß¼å+aªøϲ¼ÝEå•€¤¹õx˜ô¼ U^¿>195}sæ–Ju[“JukææôÔäÄõñ±«ÊÑ‘aÅ…Á³}½=]Ç[›×VWí-)‰?¥%ÅÇF B6À*˜Ž¶TtBÁÝbÍ–Q+ÅEX:bŒ@ÐBXï !‚¨˜xaê6Ifö΂Ⲋªƒ5u‡›ZÚÚ¿ëê>ÕÛ7pnèüEÅð¥‘ÑËJåMJååÑ‘KÊ‹ç‡Î ôõžêîú®½­¥ép]ÍÁ*yéžü\™Tœ–”ûexXÏÓÝá€(Ð µ2g¡I3å  7wOž_`¨ rK\¢(M,ÉÌÊÍ/,.“ïÛ_ým]Ccs˱ãí'»{N÷žéëë‡ÐC_ß™ÞÓ=Ý';;Úkinl¨û¶zÿ>yYqá®\YÆöôa<&±ÑÇ‹Ãvq²§SÈ$3œbñn±B-P˜ d‰L¡Û;¹°8 Âø2&.1)å±$C–³3¿°¨´\^Yu º¦¶¾áHcSóÑ–––VnkLtTd„€èï·çµžÃvsqv´£SmÈ$$a¨¯ £X­¥øpËAVÃDtõ ŒŒMÍ02qfº²Öq<<½¹>¾~þAÁ¡aüM‚ððMáá‚Mü°Ðà ?_®·§gË•éìho» ,-ÌðMè¬Á$´ÿ95|ÊZ`$Ds K+k*ngïèäÌtqc±ÝÁÅË›Ëåñ|4ñx\®·¸³Yn.Lg'G{;:jcm…Aè©7Ih)~- LY$1D&°K+²5…J[K·µsƒÉtY“É`€ƒ-}-J±&[Y’Ì͈¦ÆFÄšHh)~%ÂRœ­DGwÅ©X,‘‹ …B¥RišàŠB±A–$ ¤`‚ôÁ‡ÐJ|D5 n(:ºz ‚XÀÅ”H4C™ãaωDS0@ €3€,nØ¡•ø¨Ô"8 f;ù=RA,ØXe »‚WuáLBHÛñ; B+ñ±KM°à*°`$³,ôÒj„¿ƒ),:h ´¿% MEí‚õ…:õ ¸®€1¬Rÿ‘OýÏ|&ËTp–E™e©°j™‚Öáÿay«>Ü;¿õ©ßôçá¿÷©ß¢6mÚþ‡ý[€EšIL endstream endobj 787 0 obj <> endobj 790 0 obj <>stream +H‰ìÑ ®#7ÄPçþ—‚dYþâ¶Õ¢$ò P|<’de]F/Îó®×-÷Nô­õÂ÷-õjî \ê5Ì(\jÒÔ• …+=Zøú„£ÑqFq(:ëèKNC÷ü}Ì9è’ß ï9Ýð)ôI{£ë]@_µ+ºÛUô_;¢›½„>m/t­×ÑÏíƒ.õ&ú¾-Б /\ÝgúÈ…Ñi†¢Ï\e8úÐÑInAŸº:ÇmècB§¸}î"è ·£^` +úd}ÿ4ôÑ úú©è³!ôí³Ñ#èÓôåÓчCèÛ§¢ÏæÐÏOD_¢ÏŸ„¾G˜€¾xtƒÛÑ/‚Îp+úÜuÐ%nD_»:ÆMè[—C¹ýé‚è$Ãч®‰®2}ç²è0#Ñ_.ŒN3 }äâè_• ªlPeƒ* <e>_• ªlPeG•~¯\æUÙ ÊD®òþ¬\æóTÙ ÊD®òq>ª\æÓTÙ ÊF.óaªlPeƒ* |¹ÌG©²A•>\æƒTÙ Ê_D.ó1ªlPe/#—ùU6¨²À7‘Ë|„*TYàÛÈe>@• ž¨\æÝ=¹Ê»«²ÀS‘˼¹*úÁõÑ…Æ _\gúÇ•ÑmF¢¿\f,úÍEÑYF£ÿ\Ýäô§Ë¡ƒÜƒ~u-tûÐÏ.„Nq+úÜEÐîFÿ»:ÂôÅ8:ÀôË,úýyè§AôõSÑgCèÛg£ÿ&Пèϧ£‡Ð·OEŸ ¢¯Ÿ†>šE¿?ý2.p?úá5ÐîE¿»ºÄ}èg×B׸ýêzè"ãÑ®‰®2ýæÂè4ÃÐG.ŽÎ3}âèDï¢ÿÛê ôu[¡c½†~mCt²ËèÃ6Eg»‚þjkt¼'Ñ7í.ø-ú Sп@_sºæ‡èSŽDGý}ÆÉè¶ÿ¡o¨°E…-*lQ`{Ø£¾&Õõ©k’ü-À>ÝÂk endstream endobj 864 0 obj <>/Filter/FlateDecode/Height 480/Intent/RelativeColorimetric/Length 25812/Name/X/Subtype/Image/Type/XObject/Width 486>>stream +H‰ì×y<ÔûÇñswk)a,c[ckìKö]R‘%…e)¡B…TÔ¡ÅVɉŠD*Ê–¥È–%Ù[,ÙJÛ­{»Û¹Ÿïï7ÃتóxtÛ¹¿×Ÿóûý13ÏÇûû›ùî;"""¢ÿå~ó³›ïwLôåM•ûíEp;M³ý½ß&Æ}ÓÁçûãMk†.ÒûôGzš#Æutï„8³ö|2",&_œÇA– |ýù“¡;àF÷f`Ôó³/6^´Z„‹dYYÙØÙ988¢ÍvnbggceE∛×Ƭ êy!Lß/Z/â]66v ]Ĺ˜‹‹›‡‡DâEñÍv‰DâááæâZ̹h€³³±±"m´íÔóý¡ÿ¯š¦c¾Øv1]n/¿YPHX„B›3¸H¡ˆ ’Éü|¼$ðî…ضÁz +5!ýK5E†ã™•Î‹t®ET\Br‰ÔÒe2²²TªÜ'¢Reee–-•^")!.&JAÞH°që)Ô„ô/Ð,Â80òåã' +‹€.••“WT¢)«¨©khjjiiÏ™––¦¦†ºšŠ2MIQAŽ +ÞR’b¢"B‚|¼<Ü‹9'©áYÍ$=ßßů´Y„ÙØ1`د 0EL\Rj© U^q¹²ªš†–Ž®ž‘±©™¹…¥•ÕÊ9³²²´073562Ð×]¡­©¡¦B[®(O•lq°&ó3¨™¥‰IÿwbO³bÂÜ$ ùÊÊ)()«ªƒ®¾¡±©…•µÍšµvöŽNœ]\]]Ýf .¸8oprt°_g»ÆfÕJKsScC}]mMuš’cøÓÄLL•”–U ©iébÂŽ.›¼|üv…„ˆ>*)õ\zƥ으ü›…·‹KïTTÞ½Ws¿¶®¾¡±ñ^Sô—êëjï×Tß­ª(/+ïùy9Y—2ΟM9püè!œÚÛÓÝÙ“^¡©º\Mzvèùþæ¾æ"^JUTÖÐ10µ´±spÙ´ÅÇ?hOxd 'Ÿ=¾¹×nÞ.)«¨ܺ†M-­ÛÚ;:;»º¡žYCWº:;;Úµµ¶4?h¬¯»_}¯²¼¬øvÁu°ÎL?‡¨D Ùåçãåî¼~í* c}muš‚¬´$œÝ|84üÃOnbÐ_ؤ1ËìYŒˆÅ€XIES×ÈÜzízgw/$uøXBbjZÆ¥+y× n—Ü©¼[S[ßØÔ‚p»º{?yú¬¯¿`ppðùœÁÅþþ¾gOŸ<îíéﶇ-Mõ÷««*ÊŠ o\CÔg“OÅÇÅD†‡îòÛæ¹ÑiÝj+˜´† +œÝ-À˽x!;üê&ýÅÑj4ãßß&ôs [1Fl±ÊÖÑÕÃÛoWhxäác'’Τgf]Í/(*-¯ª®­ÐÜÚÖÞ‰tw`ðùÐðÈèØØ‹/_¾Ÿ3¸øâÅØØèÈÈðÐsï{öäqOWg{X×ÕÜŨór.g¤¥&&ÄÅ ܾu“‹ÃZks#]M€–FG7‰›sáÄÉM ú3M›1'I@HTBšªˆÛ9môò Þw0&.!„³s¯ß©¬®mhjA¾½À‹thÇ_½~ýæÍÛ·ïÞ½ûË'‚Ëoß¾yóúõ«Wã|t´ûûž‚uÇ£Vœº´¨ ÿjVæùÔÓñ±‡öï òßæáæh» + aѲÒA~vrƒþ\“3f£“ZPD\ZVQy‚Ø70$<êè§SÏgfå^¿UR^US×Øü°½³çñSðF¼ã¯.ȾÿáÇ¿Bûdè¸ñý{$Ž¼‘öèÈ0X?{ÒÛÕÑÖÚÔP[]y§¸0ÿ*l:åäñÑaÁ¾^ìz…†²‚Œ”˜0™~r£'4ál¸ª¦þAK[Gw/?_à…ébºˆöãÇÇúÇ'Ãï›1qŒ°‘õØèð¢îéjØÜXW]YVTpíÊ¥ô3‰ñG£ÂCÚÑÖÚÌ@Gm¹<¢…°A3žÐ„óÌ&Œá¨†§1̘"c5m3k[GX1Š;‘œ–‘w³¨¬²º~ü´p€Ç0ø/Cüþ‰÷¯ÏD¿.Ž¸›nQ?è{ÚÛÝÑÖÜX{¯¢ôÖܬ ç’b£#ÚÓÍaíJS}-8¹¥ÄE`Ðœ7á<µIctTs‘ø…`Æ +Êšz&Vk\=}éÄ™W®—ß«mlFÂÏúaÂ/À˜ï¤..øï/Œ œY#êWã/ÆF†A6ÝÔp¿êNQA^vFZò‰Øèð€m.ö«-áä¦É/“äçƒþZÎS›fÌK†§1u¹šŽ¡¹Í:çÍÛB£qâüÂ’ +qk{W/Úð(žføήûÓÍÎc3Qc£è{ÒÓù¨&]^gwfZrBlTØn¿­îì¬ÍôµTaÐbÂpp£4á<ÙTcn^2Õò4 =“•k7nÙu4'.­¨®ozØÑý¤oà?ì—‰7ÖùÇϹݩ¡\¦M›J¤,5¤²”TJ‹BFT„Š2y$²d"BHÖ"K²Ö ’}(K¢ìûÖcK›iν÷óýþžµºç4çtãyž>Â÷uÞ¯÷ûÛÛO!Œ +¦òý²_BœÂšŠšFìÝÞÒXÿ´ªüaAvzr|LxŸçÅßÏ’LŽêhB å×®EâþΙñócAq)…m* ŽŸ²²wöð +‰OF)Fˆ›Z;ºûÈCfâûwéþOÜŒ¨i¤É ïÖ¦çµUú~R\tX û»3¦Fè][7®—_.ý3å>b “k…ÄYE彚:¿ž8mãèæ}-,*.é>FüìES[gO„xô¶4"LDø«ñý k5ô«‘áÁ> +èò’ü¬´»·#C¼\Î[“LŽÒPÙ¶IFJ\DP8ó~çüyÆr›w¨j6úÍÒÞÙÓïzÄ­ÄÔÌü’r”b@Œ<=:ö9Â_•ïgQcÒÈÞ(ÒÃÈÝúiå£âÜŒ”„Øð h‹“†º nEÙ5+æ3çy¢ß{BŽ¹1ci`¬¦­Üììy×+×¢ãï=È-zTùDPS,ýÿ%üjii4$º±¾æIi!˜ûôe—ß­Néi©îØ,÷ gNŒ3 +ò§Œwªi“l/ùݼ•˜–UPú¸¦®u1#âoIøcÒŸ€noixV]Q’Ÿ™’s#ÐÛÍÁÚ츾¶p–Fœq?£j›50滚ÊXý€‰¹í¿àȸäôÜâGPÆÍí]}Q3!þf„™H‘¦†1ÖÕ†Ì]¾{;⺯»£ ÉØ@[m'Áïíé\Ó¦rœ¶ YOÆ5ý_?͆¿ñi['OÿÐèø”Ìü‡kê[;{È̈'†0#iÐ0ƆÈý=­ uÕå%y’ã¢Bü=œlÍM ¨ïDÞAœùx€3gi›"k`ÌÇ‹ ÍE0¶sò ‹¹“šUXVY 1Sçé5]Ô‹˜úß4Ðhuƒ¹q —€¸£CŽM¼ŸS\QSߌSb2ÈËÙÆÌðúXa+hqžòöˆ31»¦þÈ̓YdÕ:eõC†f6Î^A‘ñ©9%kÚºúÉìÁ#çar_gË‹šòÂL¤mwËZ{”ä׈A;ÃØæšÆ&Ö&l=k:ïL˜Ö¢’äýú',Ü‘¬3 Ëk^´tö‘‡Ù†1:ç·¯G‡^öv4×W•å§'Fû¸Ø‘Žéì#â c›‡ûG¶°6ÅÖÜ3øfχi½Ùˆdç☞_VUßÜÑûrhôõ[öaŒq†½=þþíØèÐ@w[#ÖvÜÍkžŽV' 8C; ðqfukSm ³kîBÁ•?ËnÙ­‰‚ìyõf–uc[÷ÀÐèØÛ÷ãþú‹m£Ãœ?ü9þîÍع¯ k;#)6Ô×õœ9Ž3Œí%óçðñp³ºµ©¶Æÿ'aqé ÛÕšÙ¹ø„ÄÞÍÀ²îê#Œ½y7Ž‚ÌNŒÿC×ö8ªgÐv¬íÜ´„ˆÀËΞ„vÞ*')ºl1ÂX3ÕÖ<|hv­^¯¸ë=“3WoƧå>¬¬kY£Bg+YÓ©žAÛ O+Š2“oQ⬮¼q­¸ðây,nmš­gÎ…Ù%%§´Wûè)›‹ÞÁ1I…O°¬Ù­™¨gª¶;a…•æÝOˆ ¼ìhuB_s÷f<ÂXØÚ¸’˜ +ÛÛf×>Ýã§wKÍ-…ÕÕI•5›2óÑêùõ«¡žvXaDœ]ìÌ ªn“—bik£Jþ'ªd¾Ù –Š¬–Ù¼{¿ÁɳN^×£Q#C{PÙ²™®í±‘Áþ®–çÕeyiñ×<ÎÖØ¡°V[›%1Ó*¶5ØZ^Iõ !ÉÎÕ/ìvJ42d¼¬ÙUÖô£¯mXa(ÎÐÎI1ÁÞÎÖ¦G´TÀÚ°µgó±`9Ó+™_@H\ZaÇ>]ã3ž×"ï¤ç?ªyù'™r + ÅÚ975.Üÿ’½¹ÑAU%y©•‚ çüÄråL… •¼xùªõŠ`kSkgïØä¬â'Ïš:ˆ SV×D#øGÑ65Î OË $F]v´4>¼Oy£´˜Ð¢¹€™•¬MÝ]¸’Wü,»uïCÒ97<»ªŸ·vsH#3EÛç‘AÛu•%Ù÷n…ú\´65ÐÜ¥¸NBX€Ÿ¥6Ú]Sðîš³PPTjÃvuãžQ‰ ++jÛ{_½ÁÌ9ŒÑÑã<4ÐÝö¢°p·sf¿jïÙ‚Ê™•6ÃîZ$$•¬¡w⬲uv š]ýƒœdâhq!÷v4ÁËHŒ +ôdí‚ô„›nv§ŽîßMÙ`“þGE@æšÁ ãz¥¤ü6u]cË WBnÝË!¶5Øšƒƒü_öËÄê|ãOSݤ#GB–CYŠ²—BEc«\EL“ºèdêÊd©I] +-x¬ ),C¥§…kɾŸc_²„á–šç~¿¿ßùsš;óLWg{îý½ÿ„ïëù~Þ¯7¦„Á«ÝZW^Ê9>줷›£©¾– +TmÁ^Td¢„Ì2õÕk- wG'¦ç½ªn¢³_k~?5?ƒIØ/ã#ƒÝí •ÏåÞ¼xÄc—­¹áJUù%⽨ dÆ‚Rr½ÅÁxW\Rƃ§eµ-}Cÿ÷× üΘkÓ›^¿,¼{+!ò”/Ùeë&£Uj +Ò‚¼¨‘¥¡»ÞjÇ>¯€s?^Ϧ—×µu ãךìjO¼êëh®.}’—žìï¹{ûfcå`Q‰‚E%˜Ù!kê™Z;ºyŸ »x#ç!µTòà~­ÙÂpí©_Ɔû;[kËž=ÈHŠ =vp½å:lQ "fd’²¦¾™“û÷—Órw5Ò@%ƒký¿Ö¬`®=62ÐÕVW^LÉJª}ÈÕYTæys 3;d-3[çý>A@®ï¾¬nî`V2~­YA®6,ç‘Ážö† +jÁÏ©ñç¼öí´Ú «¡$')&"p˜?…lnçLö=äúIiMKg?¨dd~?­ …YÎÀÁhUÏåܸ•µ©ž¦ bþ-d²_p̵Œû@®[»úYÞÅ`å  QíÇwÒà¢rw²1Ó×T& æO!oÜúÍÿؤÌ|(×݈wá•ü{Á UíWE÷~Jˆ òÙïlkf ÅÀ,0 +ö dCÙóhhlr¥¤¢¾½gpt|÷®? +ÃÁÕn©AUÔi_²³9†YPLû÷ Ç¥dP+h=ˆ\ãÞõ‡å<8Ø@XTOïg\‹ ö#»`˜ePAÈsþrvµ.(¦\óû95,Õ膋*?3)6ÄÿŠYN’(˜Èaëdù„\ÕHïz‹ËõŸ…¡Ú“ã£`QÕW”P²’1ÌÀ´%ˆ!þcf@&üòÃçUMô>—ë? SµGßôÐ*©s\(Ä L[IVBtÀüÕWü¤ŒA&JÊÁ Ź£o_PŸæ¢zÓKo¬¤d'Ç…ø“iëi(Ê.˜çÎáëgF ˆrJšævŸ@F ãrýa-* slˆÙÙÆTwÅ2ñ…Âóæòófƒ¯ /•UÒÔ7³s9€ˆd|A}^°Eõv¨ÞTE-Ýì»ßÉzÃõ¥Ò|ÆŒl(y±Œ¢†ž™­3ÙŸò$ùóƒaƒ˜a7'Åœöqw´2Y½\aÉ">bF Ï^(.³l…®©3Ù/$Ø5y&ªaG›’y-*èˆÛÎ-ëtÔ䥉ðmO1!K/U_³ÞÚi¿oplr˜P,È¿â?;È¢bb.ÉÏHŒ ôÞç`i¼J•$%F@1ó2Ðk‘EK–¯6±rt÷9“„CžyX˜{é Å÷Ó"Nz¹Úo6Z©B’$„ø‚™±¡Ä¤äÕ´×nÙáö}PÔµL +µ²‘ŽCžY0ÌÀ´iõåOó~ºphÏöM†ZÊrÄ3Ïo6ª×¢$Ie•±…Ã>ïÀÈÄŒü’ +yµkò&æ7=íueOî¥]:üàî­æúšŠ²‹EñÜÀ d ×D 9e-ÃMö®^'#ÒïW4ÐzqÈ3¦`s[miÑñgyºØšê­X&Ç=…šØP²Jš·}{( ìò­¼§åõò[òŒƒbžšìn­yõ8'õB¨?y—͆5êK‘=ÅÓjfßPzfvßxþpîbÚÝ'euí=oPÈø„šYæÓïæ®–ê—~N‰ öõp´2Y­¦ %&Â[Ñfê5ØPlœÉþg~¼‘[XZÛ†BžÆ!Ï8 Ìã#ͯŸd%EŸ:â¶cËZmU’¤—†˜ª×:`CyøÇ]Ïyü²¦µ{ptb +‡üEA1OŽôw4UQ)‰‘Þûþja´mžU3r¯yA½^k¹ÃíÈ©è¤ì‡/ª[ºäwÓpÈ_ óp½±¢øAzBÄÉ¿ïÙ¾Ñ@S Š6¯ ŒÍ¼´ 7Ûï= 7…ZÕÜÙ?2ŽCþò ˜ÿ596ÔKk(–wërØSvf@´¥¡hó¦ša)#楨¡oôúDxBúƒâÊÆŽþáñI21Ã=5ÔÛ^WöäîÍø³G8Ñ^®D{>Oª-eÔ¼Lm]<8 n¨Zßð™3Á0¿éi«--ÌM½âçáøõ:UyI"ÕŒ–2(‰˜—Ó~¨×wŠÀ†êC6™ùõãÇé÷`O vµ‚=•sêÈß,Œ¡ñ¢š±R–SYe ÍëtlJÎãWµmÝȆÂ!s&¿BÌï¦&Ð=EÉLŒü‡—+40E^T3«”5 6Ù»Œº–UõÙP8dNí)dOU–Z}YÑÔ¸`7 #-%8§¸t³‘{ G”’–‘…ƒ›Op,åz0/´”ùý(ÿ{A TsORÍQ^{¶™ë­sŠK7ú5¼×K–®Ð3߶Ç+0Š­”qóâN†Vsþí+aÇ=]lÖ먑$‰ ¸âÙè½&J’TuÖ[;{»r;ŸŠ”2n^Ü À< ©æg÷nƇúyÀ9¥$»˜+7Q/p¯eÁ½#Ê/4þæ½gH)Oà¥ÌÅ 696ÜK«+-ÌI‰ òvݾQŸq³9-`ð^ÏÅîõv×ÃA1)9…¥u´Þá1PÊñRæV˜ÕÜÝZý¢Ì©€ïÀÍ^­&Ï›Íòkõ6.ß„_Í(xQÝÚ—2·ƒVóÄè@gS%˜SÏø³ßlŽ~fä^ÏAüÚr§‡ß™ø´¼âʦÎÑ ¼”¹XÍï¦Àœ¢ƒ9•{=æ”÷^ôf‹„ærôf3îµ”‚:ðkƽ.«§ƒ5õ/e.ÞlPÍCpNd2n¶Ž*IB”³7{Ö¬Ùsæ ‹JÈ©h›@¿Fî5QC°”?à¥ÌÝ°æTsUñ}p³¡gi)Ɉ‹Ìçà͆êîõ"iEMÃÍn¾¡È½nîÄGo‚`†sŠÞðÏ¢\àÙ‡]·™ë©+H1n6‡(#êE””_¾ÆÔî[¯Àèdô^ŒOáy¤šÑ›ýÜìðãžÎÖ&Ú*r¢Âó8õ™QõZ(.«¼rí×Näcç¯Ü¦¿Fï5™aÌ)p³g§Å‡þ›ý2ñ¦rßÃøjun-‰d–™!Ž)e¨ì’¡EƒÂ’)„8(I‰{BT +§L™•)Cežç™mÚÉv¸Õºï°mι©mXö{W¿ç?xßßú<ßÏãtV_CQ‚Ÿƒêì0’z±ó‰ÉïÕ;}ñZPdjAì×舢öø2×٠幉Oîýf{R[MV„‡•a¥ FQ/ai•Ã&Öw%ä”ÕwÂ~ úzµBî춚’×1¡·\-ŽT–„Œ~el¾zá Ì}‚ŸgU·ö€¾^Í MÀ÷4W¤F]»xZo¯œßJ Ø|õÒ1µó xš”÷¾©O˜DüšÚ_ÿ£íìOcƒõeÙ îxX#ÆL¿a`FÕ‹Ži‹ ¬^–n¾c3ßÕ¶À} P^Å:{¤¯µº(ãùogs Eq~öQ/Z6^Q9T½¢R *[z‡?g€z­j`˜§' øî¦÷o’"S•áFÖÔÚåÁLZQÌœBR»5IêÕÐ98> Ôk•à wö@{mI&"`FvnزkŠ¼¢Ä4ôÏ:y?€Õ« ¨5 Ø ñãposeAJdàU‡Sºê?o[5… ¼ž^QZ'l®Ü‹Hzƒ¨¨×ª°ÉqHÀJ³ãÃýÜ­~9¤¼c+'Ý2×Ô,ÊüâŠ8Ãs.7Cb^—Ô ôõªgNÀªÞ¦Gÿ~ÝñŒÞ^y1^6Úe  e.aUí“vž÷Ÿ¥äW4÷ êyÕC°¡®ÆòÜ—ýµ69 ­)NfúeÁLFYBi¿‘…«ïø¬ÒúÎA€2•‚Àüç§ÑþöšâWσ}œÍõ5Äù–·¦fQæ‘QÓ1µ¿™Z­¨‘@½¨XÀ¦‰|OÓ‡‹2xdª]SãC] eÙña·Ý–óÿ PÆ@È0·V¦E]Ea^ªf åFeðÈÔ iM͇YQ‚™v 0£(Ó/€2µ¿ôGº¦&Fû۪ߦEzÁš--ÁL³nñ¯Œ¢ÌNle<@™úùòe>̾®ç q +â|l ´ëZ»¸ÊžCYFMÇÌáêß›Úßùc‡ 3t™!Íö´=©¥"%ÄÉDG³ØÊž‡ò~#K7€2–  欸‡·\ÎhÈ‹ñ²2lX¿Hÿ‚Q¦¡gæ†Q¶(c+$˜ûZ+ Ržüfcrx׎­[éé_kÖ¬ý×zZeqÅýFÊñ9e @°±’Y˜;ëK3cB|œÏÝ+·‡uÓ"ÇTØÊBÒªÚ¦v^el†yjb¤·¥"?9âî¯ÖÇ)K +p0n\Ì°{­§e`ãSÀžwõ ‹Ï(c)ˆfOŽvÔ•¼~ñà†ãé#ê²"Ü,ô‹‚q/:¦-[¥vk°õ¼™ZXÕÚPÆN Êž™ú8ÜÛüáMâã;îVÇ(Ið³o^ ÌèŒÚÄÊ#*·OßüÒÍÐجR€2¦WöôäØ@{mqÆÿ¾æ`¦£&#ÌÅLO³ŽòWFf#‡ ¤²¦ñ…+÷ž¦T¶ö”±“/$˜{šÞç&„ßv³0Ä)ˆó±1ÐR>¦P÷báùyÞ'ïà˜ÌwuCã“eìSŸÆú۪ߦEzÙÔR‘ÚÊÉDù˜‚fÔOÈŒ’P:ð‹•‡ÿ“¤¼ŠæÞ‘‰©€2f‚ÀL$à»ʲãÞºd®¿ONt1c +.l:&NhFé˜9\ûýŒâÚŽAå¿Ê˜ +óh_kUAÊÓ€+Œ7¦fÝ‹WL^Ãà¼ëíð„Ü÷M=çf>”±æi"a¨³þ]fL°·2¦(÷¯9÷Ú¥ibͨ´·ÕmýcŸ€{a+0ÌS#½Íy‰ý¡1µ_qþ…º3·ˆ,ä^Î>!Ȍˆ3À½0•/_þú<=9>ØŽ){SmÈ¿¶Pè_pa¯§e`ãƒÜ똕Ç݈äüÊ–¾Q0£0ò˜*ωóu9‡ø ê_6ä^[¥T´Mí!÷zUR‡º@[!©ªÂÔgˆíÜ.À¾™¢ÊFÝ‹…GTnŸþ9ß9÷(c,¤15ÔU_ +ù× ÇSºj2BœU6Z؛ٶÙeÝxȽ>”±Ø¿¦‰ãƒµÅÑA^¶'ï’¤ ²g [Lgdéîÿ$)¿²µoô(ll‚ªìážÆòì¸Ð›ÎPeËRPÙó +ûð [¯ èŒâZ¨°‰ÓÀ½0È¿àÊî‡*;™òÊ&¶,TØÎ>¡qÙå=ÃPa”1¸²gˆ„¡Î:¤²íàÊþ¾eÿ³°“¡ÂîG + ŒÉÌVvSyÅ•ýµÂî"g@ac4K©lRasÎ6(l¬‡\Ùó,û{•6 ¨<ÎÐòòÄ°Aac:³l'¨²e„9™¾YÙHa3°óoWÖ4±ñ ŒJ†õÌ«ì¤'w.[âäEyX¾UÙkÖ@…½‘‘SHZU÷”£wHlVYc7(lL®ìiâø`GmqzT §‰¦òv~v¤²<ËëhèY¸·Éí38ïæ÷(1¯¢¥6¶CªìîƲ¬ØoÇSºªÒBœŒ¡Ê^à0#g™O\éàqë+‘iE5 °±Re÷µTä%>òs;o°On7 =ͺ…3iG îØ­eêpýÁ‹ÌÒ†n<(ll‡\Ù5Ei‘W¬TçccXð0#g™Ž‰KXV]ïì¥[a ¹š{G& Â¯Œá •ïn(Í|ñ຃©Ö-õ³ ï(#Kwÿˆä‚ª¶±IPØØôÊÿùsb¤·ùCnBØ­KgõÔe…¹-õÕÃL:Ëü;C;*:£¸®sˆ@œù PÆrÊžh«*HŽðw·4B¶Ô‚‡>Ë9¥T´Í.ÞŽvTÏðÄ(lŒzå"a¨³®8#ÚRƇvJð/x˜çÎòž£æ.¾á/߀õ¸²§&†{ -|㢙¶Š” ãƯfòYVÀYyÜ}šRXÝ>0Î2æ3·¥Þ¼ ÷u1?ºç‡yÞY6±ñ +Š~UR×…'€…ù ‡y| ½º0åé]+#œÂ‡>Ë´›IgÙ;$6»>Ë`Ga?È–"à»êJ^EyÙ˜|ã0ÿ—ýú~ªúJþˆ åJ—®t4tAQšØè +(KèM%Ë‚tDMPÑXè ÒÁÂJ¤ƒzïÒAPÔ09ß{¯”ËMtÚ=“óügæ3sžç]WË%¨–! á–Å\]H,ffzrż\Ëò‡Œˆµ<‚j†¬sÉ׊™XËü –M.^¿Ÿ[ÑÔ3Šj†‹y„XÌƇäÿ¬˜¿Ô²´Šž•k@tJ~ªeXB(æÑž¦ŠÜû×/:™‚bæ'[ÌøZƱòˆÊªØy…Äg×¢Z†%ËÅ\•Ÿàj©§"M¾˜A-SÑ2°mݱûà‰Óç"nç”5t£Z†#ËÅ\[œâeg &+ÂÊ[_ÌØø¢cdçß{ä{Gßk÷ž–¿µ<¿ø }Øÿÿ!ópgCYNRĹÓ'ìÞ±•–Š´˜ñµÌÄ)(¥¬cáâù0¯²¹olfÕ2Ê‹ó ˜ß”?½wÍ×ñû#{ÅùØéÖÍ/LÇÂ-,£zÔÆ#(6½°¦m`Õ2$ÁŠyaf¬¯¹2/9ÒÿŒ¹Ž’¤çúù…_›YyEåÔ Ož KÈ*­ïšDµ IðÅ<;>ÐZS˜än­¯*#Lf~Æ×–mßÉ2þá•;_¼î™Bµ IðÅ<79ÔQ_’•æmo¨.'Jf~Ç¿¸‚¦é¿/^¿Ÿ[ÑÔûvfaÕ2!̯‘®ÆçnGœw8qðËü"Q^5¾~Žz˜WÕÒ?6û/HŠ?¿šóËäÈ^10¿hIæ~|1sñ¥ÆW\z_h|A“•ùõ,9Ò6˜_¤ó ?¾p¬<Øø²÷Fã º,ϯê‚Ô˜@7+=i¡uó‹0±Ù¶îØ}àÄéó·=oDã ¦æ×Ä`{]qf|ˆ§í±ý;…¹Yp$Ê`|a[lïaÇŸ®Ý}ZÞÔ3:=Æ,Y"̯áΆ²ìÄpŸ“Fr¢¼¬›×ŽlÂÄæà—PÔ2s¾t3ùÙ«æ>0±Ñø‚&@̯‘î×/ß¹rÁÁø üú‘ Æ5~bëZºD§äW·öÏ¢ñO°‘½0ó¶·©"wed3¬ÙøCŠ™Khyb׶ ¢‰ Sð#{–0²oú9›i)Jðs0Ò­V¦ Ø&6 ˆ¬šwhBV šØeõÈŽpµÔU‘äd¢_}J&6+ïö]F§|.'倉=Œ&6LYÙµEéqÁ6úª2¤§¦L‹Rò.\ýõÉË7ÝØÄFÊЄ0²'‡:êK³B½í ÔdExXp4T–ç^;¤ö€CÊ÷ڽ܊¦^0±Ñ!Qð#{j¸«ñyNÒeŸSF»¶“œR„CŠ_\AÓÔéÒÍØ!5†)¨‚ìùéÑî7/ŸüzõË)E¢ŒR’J:.?G¥äWµ C +²,ŸRåà”úÉÑäð±m[h×*o¢gâ”Vѳr ŒI+¬i@‡\ÁŸR3à”zõìÁKN¦š +â|쌴«N)¼23—°ŒêQàøŒâºöÁ tHAâ)ÕßR•ÿ0ÊÿŒ¹¶’„#ÝŠ2¦Œcá‘U3°óMÈ*­ïšDÊP¯<7>ÐZ]àj©«,%ÈÉDG½qE™’ŠÇÊ#*§ntÒ'<)§¬±kx +RPJÍM ¶×¥Ç¹[ëï“âb¦ß´Vy3ïöÝŽŸ>qçñ‹×Ý#Óóè‚)xåw“Cu%™·B¼líß)ÌMªLËÀ¶u‡ü!ã~¼z÷ÉË7=£Ó H¦”§†;J³ÃÎڨɊð°à0eŠUÊ[¶‰í9lâè{í^nESïÛ™…H¦åÅù©‘®Æç’.ûœ2ÒåeÅÑ,ŸR@™š–‘O\AÓÔéâÿyÕÜ7†)£ñQÀ)µ8?=ÚýúÅã;WÎ;œ8°{;/ÛæUÊ(©éÙù%µÌœý"“ó*[úÇfß#e¨‚)/Lö4•?½ûËÿúç!ùﶲ1Ð’(sH*i›»øG¥äWµö#eÈ”?.̼íý­"÷þu_G“Ã{Ķm!UfÊÊ:®Ñ©Õ­ãsH®,-aÊc}ͯž=¸qÉÉTSAœ‘–zEy#Pæ”Rѵt ŒI+¬iœÊ¿#eˆ‚)¿Ÿëo©ÌKŽôs6ÓR”àgg¤£¦Ü°¢L”¥Uô¬ÜcÓ‹jÛò‡OH¦”Çû[«òS¢ü]̵•$8H•™9…¤÷éY»Å”ß!e¸‚Wžh­.HpµÐQÊLk”7Ñ3se}kฌâºö¡I¤ Y––~ʃm5…i1n–ºÊR‚œ@y#‰²Œª¾GpåöÚ¢ôØ@7+=L™žŒòQÏø̤ aðÊïÊqAîÖz*Òä”…²­gÈ­Ì’z¤ _Ê“CíuÅqÁÖúû¤…Ö+s ïÜÌÖ+ôVPFÊÐ…œ23ý¦ÕÊ8¼²whBViCçðR†-Då ìaƒ)s­(S•EdÕ ì½Ã³ Ê‹H®|]™ÇÂ#"«nh6<1» SžGÊeE93>Ø“Œ2 Ž•GTNÝð¤OxRNYc×R†._S¦$*kò¹œ”ó)ØoPÞÌÊ»}—ÆñSç"n?”§ç?#e¨òE¹¾ä¯•?)¿xÝ”áË¡|)äüwú±ÿùVe´¾`Î7(£K +ú|MyQYÝð¤OxRNR†1_”ëŠÿDy# Ž…GDVÝÐþlxbvYCç0R†._WÞ„cá‘U3°÷KÌ.Å”ß!eÈò×Êÿ * ïÜÌÎ;,!‹ ü)ÕåŒø`²ÊôÌxe[¯Ð[Y¥õÓH¶|“2—ðNÕ£¶^!·2Kê;†2t!*·å¸`kL™s½² PöDÊf‰œ2=5eÏøÌâ:¤ _ʃíµEéqAîÖz*Ò‚d•÷éÛxÇg eƒWž#(ǺYé©H‘*ScÊÒûô­=‚ã€r;Q1àüñ=Pn«)L‹ t³ÔUÆ”éÖ*3q +JïÓ³vŠK/ªmœ@Êeié3Ph­.HpµÐQ–àÊ”$ÊR*zVî±å9¤ Wðʳãý­Uù)Qþ.æÚJ@™q­2¦¬¬ké“VXÓ”ßDÊ0… <ÖßR™—éçl¦¥(ÁϾF™(sH*ëX¸D§T·ŒåÏH¢`Ê 3c}ͯž=¸qÉÉTSAœ‘–š’b•2#PVÒ6wñJɯjíŸEÊpeéwLùmïo¹÷¯û:šÞ#¶m -ÕZev~ E-3g¿Èä¼Ê–þ1¤ Y€òâÂôhOSùÓ»¿üÁ~™S¹·aü¼u’a› ™çŒ‰&CR2$‰ +i¡¢„*”Р R¨¨H$dÎPdž·qo´E½§užaÛ¶©ã}zžµ¾×¿p­ûs}îÓm7Ðæ¡où?ó˜Ø‰*hZ;û܈{õñKkïàhW[¦»›*?¤Þ¿âíh©¯.+ÄÃÊHßò&6^yÍ ;œÎ^M/¨né[þ´ŒŸüúûç…Dl¬È}ìyÐbšŒ7ajË<ÂK4 ¬¾úðe^Us7yd ´Œ£ü‚ZýFêjø”“}ùäs]UiA.ÂÂ?çѵÌÈÊ#$«®¿ÍÁ;ä~ê‡Ê&"™ZÆSЖ:ë˲Ÿß½tbßeR‹9Yà–ÿ˜h™À-(£¦gaï“ò¾¢±‹Dû ZÆO–‡û;êJ³žÞ pÛ³yíRIÉ-Ïûs!k±´ª®ù~À¨¤œòúÎo£PË f¼äׯÿþø>Ü×^[œ™îwÔÎdµ²?3­å?à–Y8¤T´Íöº_Œ|ö®¬®£´Œ« -õµÕe<¹}ÞÕÖh•¢8;3ÃüÉ-sðK,]cºû˜xâÛ’¯íýÃßÁ+…£@Ô‘ÁÞÖ/_ÇÝðu¶6ÔR]ÄÎ4¹ef>q¥UÆ»Ž\¸ŸQTÓÖ7ZÆS –ÇF{ZªóÓc¯ŸqÚ±AS^„—‰öHÁ-Ïg`f_$¦ ehíì{3îõÇ/­½ƒ#?€dã'pËrwSUÞËWO9Z­×X"ÌÃÊHß2$ÙLl¼"òšv8½›^PÝÒ38^)Rì1 +©«±"7%&Øó Åºå²BÜÓ[få^¢±ÞÊñÔÕ/󪚺Éà•ÂQGêÛ@g}yNRT Ç~s]UiA.ã‚y“Zfdå’]¾Îâ gpLJnEc ´Œ£ -÷wÔ•f=½sÑ}ïfmIN–…Ôò¼Œ.AiU]óýQIÙåõà•ÂQ¨T{mqfB˜ßQ;“5Êü, t-£¯§€¤Šöæ½îwžf•~í¯ž‚Í*ýÚÞ7 †ûAg¹§¥ºàÕ£¾Î6Ð,‹Ï<ËÔaæä—P^c²ëÈ…ÛOÞ@ÃÜ †û¡Îru–YhÎ6ËHËð0‹)hmÜétf"fìgb–ßýÛ,S‡™ 惞ÁÑÉ9åõð0dc;ð,À³\”æGe.ÂL³L7ÌËtÌöºD$¾-©m3¦{ŒBîn®ÎOêãlý»Y¦æÕƶ®çnƽúø¹¥ ëAgy «áÓû”{!ÞŽV³Ï2m˜EåWlØþ×é«÷Ss+»Hà—ÂxÐ?ª¯ýkiÖ³ÈK'ö›ëþf–©ÃÌÊ#$»\oëÀ»Ïß•Öuôdc;È5ØÓú¥ðÍ“ÛŽÚ™¬Y*)ÀÉ2ó,ÃÃ<æÅR*kMwó ‹‡©ðKa;°)$bSeÞˇ×Î8í4ÔR›}–ÑafæàW\ih}ù¥*›ˆ$ +@6–3ñGe'Eyܦ¯¾DxöYFÍÀÄÆ+‚þRAÑIÙåõ(²A˘ +ìÞVèJ÷wÛc¦½LZ‹0Û,S)Vnô—róOÈ,ªiëÈÆrhÀ®ÊO‹…þ(£UJâü³Îò¿”Ò*#ŸÐGéùU0²Ç²1*°;ëËs’c‚½-‘?Š}öY¦ýR"ršVŽ^Á1É9åõÙXØm5Å™‰îû¶èªÊ"ÔoZF‘-£ª»eŸ{@Dbf1@6¦{ŒBîn®ÊOtÃ×ÅÖxµ²õšµeÙÊ«m]|oÀÈnî&dc6tÀN‰ ñv´2Д]ô[`Ó-*#Û;$& ÛvmñÛĈ‹Ç!`«ÉñüØ4d ɨAÈ>õЀ]Ûu.ÀžÙ°edc2ÿ°§#¶ìÙà˜1˜I†=W`Ó!›jÙ ™E5­=²‚–±Ø£±‰Î°%ÿØ“mdãâ›–W !ûÛèOà_Ø tÊ0°; `'ÿÀž@¶œÆzK¯ è¤ì²ºö¾!€l,v¯‘ÁžÖš¢Ì„ˆwتs6 Ù‚Òª:f{ÜüÃâß~né!SÆ€a.{ýýF"6Væ¥Å†ú¸ØÍÅ°éÍ/¡´r“õá³×¤æV4t ÀþZÆX`õµ×•e'Ey9X®×›°Ç‘Í+"§®oaïx÷YVIm[/ä_Ù ì^crwËçÂ7ña~n{ÌtT¥¹çì dK©¬5µ;rþVÜ«‚jÔ¿²±Ô½:*rS\;sØzÓJ% þ¹{Ù|bŠZ·:uå^JNy]G?ð/Ìu¯Þ¶Ú’¬g‘öúêr"¼s6rÌ Ll<²jzæûŽ„'d~þ…½Œ»WSU~zÜÍóGìLתH-ž°©È&p H*ÿÃ~™S½ïa¼uYdÞæÌ3!³LIu ¥’…›"IœJ*uPI'¡Rq*¥”8‡J‰J†ˆ™çy̘-ºçfÝÏwØÛv×ýöøÃçùÞëõ¼_¹‹oHlrVÑç–^Ô¿ Ì, +÷ʼs)ÈÛi£©¦¼8a^…U6ð/19 £õÛ=ODÍú×ßðʬ“9îu#üØÞ-« ÔdDø¹8æƒ23ð/½U›Ý~Aü«¸ó/8¦X'˜{ ÷¶T"î|ÈÅf…¶¢„ïü +™ ø—àà_;½O_º“ùöSS÷Ð×o°²Y'Êãƒõ^§cîe¤.+†¹×|®Œû—¨Œš!ð¯cá7RsÞ׶ŒMÂ1Å:ÁgT_kջ箜õCÜKEj¾îEªl² +Ž¹÷´ ²¹gú …4£ËóþºuñÔV& p/¬²qÿR7Zç°?02!íUY]'S,òŒª)É~vÄÝÞR_UzþîE†ø—²®…ݿиûpL±X@aÿ†Î¨ṳ̈è3wýÓLKQBpÞî…ÁŒøA\^Ódƒ£×ɹc +ž™ùAÜkzrt ½ö=˜Q[×.•]€{á0ÿ‘VÕ·DÆÔÕ”ÅÕ­}#D3ku¯¯Ã=ÍOÁŒòu±1×Q’œÿŒ¢¨l^lL9yý~;#¯¼ÂÌ*ÁPè¨+ËMKˆÄf”˜Qów/¬²ÿBÆ”Áê-ÿ:ÿèeIM[ÿ(qÂÌ!£\Yø,9.äð; ]e0£¸„òì˜RÔ^a½ËçLtÒ“üOMÝC_!Ì, +”_¥'^8áé¸ÁŸQl @yvLÉ.]¾v›G@ÄÔœ÷5íf–ŽroË碬ûWÎú¹nZ¥§²ÀE3Ÿ¤’Ž¹Ë¡à˜»O * Ì, +”_§ÿuÒk‡•‰¦ÂAÎ63'7ALNÝhþãço>Î)­…0³@fþe·Í–úª(Ê r/2Ì\|ÂRʺ+mwûÇÜÃ`†šÍìÌÌügÊvX™.(/pF‘`fcçä!ˆËk¯ß¾…ùÌ#Ä)33óQV“åçþ ”Q˜9¸øE¤Tt-ìvŸhvc÷—ñI33Ž<e§?2VÙœ<‚âòšÌ@³KjÚúF& ÌL ¢^ß¿}êi®,¤Êؘ0K£0û_NÊ|[ÞÐafj¾ž&Ž"(¿JOD ,ñ³(ãc +|f‡}×eWµ’`†gfFÈ(7U>KŽ;ë,ð“(Ï >óJ[—Cg¢ïdä}¬ï›œþv6s‚ªq´¿½¶47-á /j›f‚¸œ†ÑÚm{†]KyñîsKïðW¸¦˜åÉñ/ÝŸòŸÞ‹ õsÝ´J_õç¿ò,Ì|ÂRÊ:æÖ»ý~ëÏ×eu£Äi(`̶¢&FúÚªKrRoFz:n0¡e’fÄd—®Ùâþ˹+÷³ ++›{† ÌÌ ¾¢»Êßf&]öÝmg¡§*-B Ê(ÌlÌ’JÚfœŒJLË-­mï!BcBpõîm©*Î~x="`ŸÃzcMy*QFÎÌÆÎÉ- &«f`¹ÙÕ/4öÞÓüOÈš‚ÆøWTý‡7ݾtÆÇÙv¥®Š”?5(/ÂŒWHBq™©•£gàù›©/Kª±5;›ÁÁPên®,zþàêoG÷n]k¤!'Nà¡eLÀÌ¢2ªz«ìvû_NÊÌûØÖ0F‡¤^ým5¥¹é‰Q§¼wZ¯ÐQ–æ£eÌ‚K4×;x Ö0&„¬^芊 õw³_m¸TVŒÀÃI%Êøšâæ‘VÑ]iã|ð4XS¯Ê›€ÆÐÌQ¯G7Îzî°2ÕR”(³Q‰23 ¸œúrlM%?+68Œ‘Áúš8ÚßQÔëNô¯`E­ÒW•àædg£öÈÌä5åu"°ª–ÞaØÙŒ Ö×ã_º›* +³õòضÎXSêE 3']S›ö¾|'ã͇ºŽQ"ìl†…Ü×­Õ%9€zí²6×AV7ÕêE‚™ À,$¡°Ì°°k² ++šº¿ŒÃÎfTH}=ÐQÿ1/3)&ÄQ/uZ¬(Š3£k +°]Þ§¢ÓrJª[ag3.³}]Yø<%><`ÿvD½$i±¢ÈgÆÖ*`ön~!1I™yëag3,}ý>7-ñbÐAg[ =’zÑeJÓ2µrÜŸò¼¨v6£2·¯ïƆú»oY»\Cž¤^´¹2.`¢2ªz¶Î>AÿHË};›AA<=9†ôuèëˆãû­Ì´•¤„ùi×׋0C:{‰¼†ÑÚ-îþ¡±wag3,ÈSžÓ×>.¶új2bN©ùÌìÜü"RJÚf÷ uöØä4<3}ƒ>婉‘þŽºä¾6}-Ä»˜ƒv}žíl‚˜¬š¾…‹Ïé9 _3ƒõ5ql°«±¢0 ø5èëfÚÊR"üÜìl´<2ÚÙ‹y…–(Ptö‡ºŽþ‘‰)øšé˜|D õ´T•ä<ÆýZ_M–æ}™ ële¬³ggV4v ŽagÓ13?Ð5Ò×^[ö&#)&ÄßÔ×4U/Ò™):ÛÖù`ÐÅÄÇ9%U-=Cøœ‚g¦G§ŒŽ¨Î†OÏî_ Àýš}^0.ÐÙ¨g»ù‡Ä$e¼)«mﯙn™QÍŸße§Þ¼pÊôµÞ¬_Óúʳ <ÛÊq_@صûÏòË:F'¦þ _3=B~ÊȈzõçíèàîök–ã~Mû¾^„ ÚÙ2jz6ÎÞ§.Ü|”ýÌ)øšéäÈß¿ÕFÔ“{qçŽz8l0ÕR’¦O_ãgfG=[^cù{×ÿFßJs +{ÍðÌ´ö”'Ч FÔõó^;­ÍuUeDèÔ×Ø™ÑΖTÒ2Ýààqô\2§jÛú†ñ× ÏLË`O™ˆ>åâ—`DöÙ½ÉÒP]N\^}]ílQU]sk'¯ÀˆøYåõý#SðÌ4n^ä§|9Äß}ë:cME a>.zõ5~f¤³ÅåÔ ,7¹øE%¤fU6v ŽÁ™@Ѧ]f°§üu¸¯­yÊW~;¶QÊÒ¢Üh_ÓéÈxgsñ K(jƒ9å ^sNIUs÷—1â|Í4 vä)`^ åYâÏŸ8°Óf¥žš¬w1Ýž2~f¤³¹D¥•ÁœÚîqällRÆëÒšÖ^h`´ÍÌàÈÄÑÁ®ÆÊ¢ìÔ„¨ ð”Wªƒ…ô5]Œ½æż`N©ê­´vò<~5ùIÞ‡:ÔÀ¦ák¦UЧ<…šWUINú­è`?7ð”—)"#Š“ž}Ÿél0§Ô VÙ9{ŸŒ¼ž‚mš…l^=­5¥¯3’bÏñØne¦£"M×Eqæ°±s"sJQÓhýžC§/&¤¾(ªhì…¢M£àG&™WòÕðãžNÖ zÊØ•ñ9%"¥¤e²~›;b`i9ÅŸ›pцg¦:$½éo¯/ÏÏJ¹yÒÛÙÎÒ€1O™âÌ‹yÀkVÑYØÙ/·œ÷>Ž_ÏCê$*4¤!£a59h³íˆT•»ŒBq”†Nr¤!#F¤¡êNIu“¢ÒÞ{ï!ÇÃéz¾ßßïw¯êxΓëªû¾û½ÿ…×õy¿_ßИ—YU¨hà +Çü#Á t·Õ—åe$DyŸ;ºW_CIf‚F™‚L3¯à‚ň9¸Ü‹KÍ.ªnBDÇüc!ÿP=m ù¤¤È;Wœm÷oߨ"')Ì71£ŒaÓL10mc«Óžž¥å×ÿ)óøƒAìm‡zrõ4¯µË‰ +ðÌœQÆ(#Ó L\FQ]oÏ'¯›ã_¿/©méB1ã˜Çù¯¯ÈÕTU˜•{×ßÍÞrb^‚¼\4Ê´˜“UÖ4Øw ˆvÄ‹ŒÜR€¹ÇüA!깺(;5ê5ÁX{ż&f”)˜§Cã‘’WÝDûü•Û‘‰™¹eu­8æ„ü … ~¨´gá×?cmª«®¸L1¯‰ëk +æ\¼¢Ò+€h<áþ©$RÀÜÝ?„c_†á(CÈ]-µ%ð‡ºyé,ÐkMeÙ 6/ +fÔÀxÅ€hoÝeaçêM$å—×ã˜Ç2ä~¹47ãEDÐåßl̶ÿ¢"'%ÂÍkG£ 1³s¢¢½^ËÈÒÞÍ/Çü#¡Bn­+ËÍL„?Ôñ;6­Aôš‹c"Í‹3&ÚËÔ´wÜýBcˆopÌã y¨¿@Î#%Eû¸œ07ܲvY¯'Ò¼è0sÑ’ÿ”Ž1ÁÑÝ?,&Ç<¾`â!ח瓈Ñ!¾®và‡ZµDŒ¢×O3°™ÜüàŸRR×5±rôÀ17£ ‡ú¹Ù2ÒZ~¨ù“ ×4˜¡qpJRVYC×Ôú”GŽy\!¿P(ä7ĘP?w‚±¶šÂäüP£0ÿÄÅ# "%§¬¡‡b~B‡ù/ó?„ü• +99&ÌßÝ‘`¬£®(#!~(ŽI„ŒŠ6ÀÌ+ +0kBÌqÌÿ w}Eíš ÙÃÑÊDW]IVR˜@ž ½…yÖß`þ„cþ'!Cî/ò)kS] eYI~䇚 ½™ì2æ¯8æÿò—ÏrK]/ ²ž†²œ”ˆפé5=f¶Q˜1ëB0Ã1/äÁ¾N9 +Y@àeÈßÅ\×ÚÕ‡cþ~†É{;›kKóà EyC@3|¨ˆ¤ü²º€ùóóßù ¾~èíh®)ÉÍLŠ/”#-dv†€<6fˆ9¯¬¶¥³oÃŒsòþèioª.þ‘ [ÑBžÌŠ.cb&’rKk›;{QÌø9„ äz¨¿§½±ª(çõ‹È`_7‚‰®ãA ³£»_htRfnIMSGÏÀþQòÕßÝÖPY˜qÇÇÕž`̘G`V˜­æ¨ÄŒ÷ÅÕí=ýC¸ƒõƒj­¯(x÷êù£ +.v‡ŒuÔòH̺&7ßàȯsŠªÚºûqŠ\÷uµÔ•ÌJy~ó²óI #mu%YÆ„<³1ÁÞÕçvD|ZvAE=ø¨p£ê]_†ª,ÿÍËØû7¼;n¾KKMQVR„1!Ĭ®³ÛÒÎåJÐÃg©YËëZÃÇ™l’\w4Ք撈Oîzµ9°sÛÆ…LYVI]ÛÈâÄùË7Ľ|“WZÓŒ:ÞÚH†©ÞÕÞˆ|PÑažNGÍvlY·z™„0?ƒB¦Å,")«¨¦µë í9¯À{1ÄÌ%ÀÁÀ8c˜§:g¤­ÑInró:!2ÄÏãôá}Û7ÿ¼j©8yÆtÆ„LYFaýVÃýÇœ<B£ÒsŠ*(ã<ÕÏ™ÒÖ½À» \Gܹêæh½Ç`ãš•K +ñq32d +f.~a‰e«×mþuß‘Óî¾Áã_½+@Æomš¶îi“œÿ6åéÃ[W.ØLô~Q]¾Xlþ\ Å<}Ä,$¾tåÚM{¬\}‚>My›_ZÓÔÞZ{j»6µ­»Û«Š?d¡\Ÿ?a±[GCE^zÁ¼¹³237ŸÐÂÅ+T5õŒt¾|ã~,çâªÆ¶î¾)íÚôm]_Q˜“¼ëÚïçl‚JIn‘¨àœÙœ ™Œ™c&÷ÜybÒòÊ@µÍƒ] ‹NLÏ)¬¨§mí©Ç™|ÈH[×–åg½Šìçqæè~íëd¤äYœìl ™ŠyöAðQ)nØf¸ÿ虋~pœ³òËj› kOM Ãq붆ªâ\Ò˸ð WGë½@®Á%"À‹@þ7ÃC¦`æDU:Ø^kG0ÎáqÉ$ÐÚÀµ{§â9£¿üùi §£¥ië˜{×½O2Ñr}PìlÓ˜2†™`憶Qߌ³÷õ»Ñ‰¯³k7wôL½s¦9änÔ­SŸ?ñ÷Ð.ÙEbó[3w[“ƒµ6<çyàœW­ÑÔçìàâúøùKÒûBPÛжYiž)Œá ³FÊš÷(8À ²¡–ºê + ]‚s€[3y[“ƒ¶6*aÂØ9›XÚ:y\½u?&XXq%´mlžY€3-ãÞζÆÚr¤¬#ïÞøÃí´9NÁâŸh<ˆŒkË‹r3“cÃo^»dki|`¯Ê¶­pZOË 3!Î«× ‰É*«ë˜Z;¸ù†Üõ\PF"Æá›jÅMO0nª­(~ö(%."ðú•sPÖZjŠÒ›7ÂiÍäi†Ì`ÆÛù§¥+× +ˆlݦ¢qÀÈâìÅ«þa°žsŠÊkÈí(ÏèÃßUS%ÐŒüÀêjºq|d·‹½•‰*kñMë׬€Óyºµ5cXq^¸x9\a¨¶õýjwÙóæ­ØäÌ\äÜÎC£oÆÞ"ç)hfUxÿîwvã¬Ôø¨`7³#º¨¬yW-[4ƒL fþ;Š3çOKWÀ&&«´[ûÐ ´ž#âRå#ç®>Ú«ä<Š{œYÕþãÑ!øv‚}Œ±ã #½}ª +R¨¬¹sqΛž™}èµ=—cÁÂEËVò +KÈÿ¼GÇÐÔÊÞÅ;(2œ‹ÊH­½ÔAXЊû{„fV5ZÇco°qÜ\ÐÕÈØ×Ý錅±¾¦š¢ \Ö¨¬œ?̓L`þŠó𳬒Ú>]C““¶NnÞáÑ¿¥>ÊA† ÝÍ=úëI³÷4“xxÖ×ÝÑÒPSñâ9TuüíОÎöÖæÆúèæúÄxF•5kpm£õŒÏ0îÕ|‚Ââ2Š;5t³<Åíwÿá“<ØÐuMm½úw|Œ}-éññOB »÷÷t´’k+K!Æé÷îFûz\>oej¤§‰îjºñB6ã‰üûzÆÎ<|ÂbÒÛw¨kë›Y»äîx+æ·ÔÌìç/ÊIõ ‰†ê†cŒˆ4ÚÒ,é¿ÜšLÄchRû{:[ÉuÕeÅyO3’î„Ýôru²=ib¨»OMIvÖxâÐ×3á ½Í»^h‹¤<,è†'~=ëàây#$*6)=+· ¤‚ ÇØÈkéwì™fRÿÖã€YÂ8į¨PÔ˜š:35bìçqÅÞÆòØaŠ2â‚øæš5fÎœ‰ÎËW­]·QTB÷¡£æVç/¹{„݉¿ÿà1@—“êÈ­Ý}”W(ÒcðÅ”ÆÔ,ëÿK›í¯Ù á±7(Ä´þÞ®ö–ÆÚ* Îy”žr㺫“Ý)S#}mõۥńàÛiâ>žáÆhXÎp‡q-^¶r ¿ .îÝZ(а¡¯ù…G'$?ÈÊ}þ¢¬ª¶±Gš!2MP3­Ù±¿>é]â°3„qˆ{:Ûšj*_çgqÜí°Ÿ«—/ØX7€ªV–—Ü,´ž—‡{ɬñ§ÃtFßU -]ÁÃ+ ´YRNIUCç ±Ùi;'O¿à[Ññ÷Ó³²ó‹^V’êÉ­í]½té7Lj¦õg´ÿÛ0u _0´ôÈ÷÷@ˆÉu¤ŠÒ¼§™iˆ8Ð×ÃÙáìIˆñY ÑëÖ®Z>kü™asž·`!QÜDÄQ 5u ŽYXsrõô +¿—”–ùäYŠtCSk!=4 &¬›©ÍðþsÖú›鼄/F¤Qú@¸BŒz:÷ñÔÄبÐ@ßkÎŽv§ÍŽúb¼MJLXõÊe‹¹~œÏ1küçC8ô\´ ¡¸W¬æØ´y«œâÎ=Úz†Ç-­Ï9¹\ó ‹º›Ý ‘.-¯FÒí]=}PãT#k„ÍÔÆÞYæXù3ý~é"^†ï(¦ö÷vw¶µëkªÊK +ó §ï'ÄD„Üôñ@ÄæÇ hîVQ£ª^ºh!ç|Ž¹³ÆŸ¦3ZШ¸¹q Å¤ä•U5öë9aimçèìá}ó_ÑñI©stUM=¹¹­¨û©´A°¡cÓµ‘7§›cuúOø·è1z ë/á;48@£ àö–¦†:ReYIa~Î㇩÷âî„û{¹_¶·ÅÄZ{v*ÉInÙ$È¿f%T5œÕ³Æ_˜9¬âÆ7 +4|Z‰JHoûYMc?$Úü´­ýe·ë~¡‘1 IiHº°¤¬’TÛ@nnmïìkÈ5 Úˆ{ À9˜3Õ Uäú=„wtï«Á*øötu´µ45Ö‘ªÊK‹ žeg=LMŠ‰ ðõt½xáÌI³£‡XUI^JLdúµc¨jXÇsxÖø 39а¡×ðÃ)&!³ µ5=isÎÉùª—”wBRêììgÏ‹JÊ*ªkêu[`÷öS¨  ÜCÃÃ##@>ú£#õ1¬ŠXÁuž.¤óvw‚o3¹¡–ÎËyœ™žr/>:2,ÈßëêG;kK£Cºšê;•ä¥Å¡©ùVã3ªzÖø–3ºÄ`C£ææÜÐÛ”UÕ59xä„Åé³.ºxxß +‹ŒŽOLNÏÈzš›_X\ZVQEª­ì–¶v¬ÝÛ×ßO¡P¨Tm2ŽÕ‡±*dv€F£Rái_/ÖmǼõà[ñ²¤?HIJ¸{ûVH ¿—‡ËÅ gO™7Ô×Ù·[EQ^J\TH€šzé".ÎùcfUÏyæL +4jn€—’WTÙµw¿ÞacK+[ûK.^þÿa·¾žšÊÃ0Žî¸ã:t)Iè„ÞÄ  ЋÔP¥ˆ ()‹A¶ˆ EÚ""JÁŽèŒ¢à »ÿǾ¿sÖ½ÁeÕó½Í™Ü|æyϹÞÖÙÓ704:þûôÌùťe„½ºÚï××?~ÚØØÜü æ[[˜:°ÿù¦ºµ®Ÿ7776>}\_ºk«¯_>º¼´07;sor wµ·4ÖWW”åçˆÒRáÁ~^Ζ5Ý̈ÕÄ—š˜ñ’ô±ã84 n#3º5‹& +Ç;%M”“_TRQ Ô7nvýÖ#cSÓ3³s  ½òìù‹—¯^¯®¾Y[{ûÐ? u¨~Öwo×ÖÞ¬®¾~õòÅóg+ËK‹ˆwzj|úz:pMeé傼ìóÂäADHßÓÍÉþ¤ÍÔP'Æ.5z3>@R_†ÖÑ3„ÛmcËqöàù†F’…Y¹—ŠŠË«j~mhnmïìî½=082:>95}ÿÁìÃGsóó ‹—ž,¯<ÅÔQHõéÊò“¥Ç‹ óósÎ>¸?=59>Šx{»;Û[›êª+pà´Ô3qÑáHØÝ™c wÚÄ€ª ïbœX|©‰0Ì>¹% •U)p»aÒ4+¦ƒ H„„GÅ&¦32/\,(*.«¬®­olnmëèêéíë¹;::6>19uoz©£@ufúÞÔäÄøØèèÝ‘á¡Áþ¾Þž®Ž¶ÖæÆúÚ«•eW +/åŠ#Bý¼¹ lÇdÐLôu5ÕɪJŠò²ûˆ ãƒ%µZV^QI…¬¦©M506£ƒ4ÇÙëí&E˜.ÊÎÍìÒŠªšºú†¦æ–Ömí7;:»º{zoÝî¿3844<<<44x§ÿö­Þžî®ÎŽ›ím7Z[š›êëjª*J‹‹ +òs³EéÂäDäÇ÷ôpqd³l43c4b5’ +ŒXVêŸñKMÌø+Û _Ýø¤Éêš:HšÆ°aÙ;º¸s½|üƒBÃ"q‰I©€•“—_Px¹¸¤¬¼¢²êjuMm]ýµÆ¦ë Žjm¹ÞÔx­¾®¶¦újUeEyYIñå‚ü¼œ,àMMJˆD†…À‚==\Ù¶L+ºl˜ª­©FFÔèNï%&Œ¿ºýÐhÒbimª¾‘©9Ý +¨9N®î\ß/ 84<2:6>19Ux.ý¼(3+ûBNnÞÅK…EWŠKJËÊËËËJKŠ¯\º˜—›s!;+St>ýœ0591>6:2<48À—Ï;åæ‚[Z˜èéji a|ÄØÆ5Aü/¶ cû¤Õ4´tô ŒLÌi–VL–ÇÑÙÕƒËóöõ  ŒÄÄÆÅÅ'$&%§œ¦¥gˆD™™™"QFzšðlJrRbB|\\lŒ *2<,48Ðß×›ÇõpuvdÛ±lЂ°¶¦:…¤¢tB{o˜ >Œ¤$'-!­¤B¨©ÈÚ̂ΰl¶ƒ“‹›û).Ï‹Ï÷ñõó +9-ÄÑQ‘a§C‚ƒüý|}ø|/÷”»›‹“ð2­t 3£`åp¥Ñ†‘°ä&ˆ£ÝIïHKËÊaÔªdŠº†–¶®ž¾!`£e[3O²ììÙG'gW7w®'ÏË›òöâyr=ÜÝ\]œ8l{;ÖI¦µ•%Íx õ©à 'zXFR˜ñá'õwi1µ"²†]#l´lC#cS3s nÉ`XYÛ0Y¶ Îæp8lPµe1m¬­ K:faanfjldh GÕÑÖÒP_Uet¢w€±ñ®0A|øí‘ƩѪedÅØÊpÄ) ­ Ü:ººTªž¾>B7u`‡ÌAÕ±êëëQ©ºº:€« º4_¥Š¸ï^`Bø¿oWz›·ÞÅFÚ*ªª$™L¡¨!tLØ©"V5 +…L&‘TUU.΋í|÷Âߨmiœ³†]#lX¶´ŒŒ¬œœœ¼¼¼‚‚‚"†.V'‰U1VEøž'ee°õÿùÂ?í&„¿]8À¶5¶k ´1n‡¤1t±º¼Xc•F?£Ç.Z/âÅ} àï+) k16ÒFܘ8f蘺¸_0ÖcèGü±£˜î¯Ø—þÎ’ÚƒicÞXGî²ï b¬XøÃG$y àï8)ÉŽìôÓv¨;®{l ß(©/uäT ÝÿE_4%\‰ˆˆ~¬þ`ØÙ°» endstream endobj 789 0 obj <> endobj 865 0 obj <> endobj 866 0 obj [0.0 0.0 0.0] endobj 867 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +486 0 0 480 6513.1162109 7207.1401367 cm +/Im0 Do +Q + endstream endobj 868 0 obj <> endobj 869 0 obj <>/Filter/FlateDecode/Height 480/Intent/RelativeColorimetric/Length 25812/Name/X/Subtype/Image/Type/XObject/Width 486>>stream +H‰ì×y<ÔûÇñswk)a,c[ckìKö]R‘%…e)¡B…TÔ¡ÅVɉŠD*Ê–¥È–%Ù[,ÙJÛ­{»Û¹Ÿïï7ÃتóxtÛ¹¿×Ÿóûý13ÏÇûû›ùî;"""¢ÿå~ó³›ïwLôåM•ûíEp;M³ý½ß&Æ}ÓÁçûãMk†.ÒûôGzš#Æutï„8³ö|2",&_œÇA– |ýù“¡;àF÷f`Ôó³/6^´Z„‹dYYÙØÙ988¢ÍvnbggceE∛×Ƭ êy!Lß/Z/â]66v ]Ĺ˜‹‹›‡‡DâEñÍv‰DâááæâZ̹h€³³±±"m´íÔóý¡ÿ¯š¦c¾Øv1]n/¿YPHX„B›3¸H¡ˆ ’Éü|¼$ðî…ضÁz +5!ýK5E†ã™•Î‹t®ET\Br‰ÔÒe2²²TªÜ'¢Reee–-•^")!.&JAÞH°që)Ô„ô/Ð,Â80òåã' +‹€.••“WT¢)«¨©khjjiiÏ™––¦¦†ºšŠ2MIQAŽ +ÞR’b¢"B‚|¼<Ü‹9'©áYÍ$=ßßů´Y„ÙØ1`د 0EL\Rj© U^q¹²ªš†–Ž®ž‘±©™¹…¥•ÕÊ9³²²´073562Ð×]¡­©¡¦B[®(O•lq°&ó3¨™¥‰IÿwbO³bÂÜ$ ùÊÊ)()«ªƒ®¾¡±©…•µÍšµvöŽNœ]\]]Ýf .¸8oprt°_g»ÆfÕJKsScC}]mMuš’cøÓÄLL•”–U ©iébÂŽ.›¼|üv…„ˆ>*)õ\zƥ으ü›…·‹KïTTÞ½Ws¿¶®¾¡±ñ^Sô—êëjï×Tß­ª(/+ïùy9Y—2ΟM9püè!œÚÛÓÝÙ“^¡©º\Mzvèùþæ¾æ"^JUTÖÐ10µ´±spÙ´ÅÇ?hOxd 'Ÿ=¾¹×nÞ.)«¨ܺ†M-­ÛÚ;:;»º¡žYCWº:;;Úµµ¶4?h¬¯»_}¯²¼¬øvÁu°ÎL?‡¨D Ùåçãåî¼~í* c}muš‚¬´$œÝ|84üÃOnbÐ_ؤ1ËìYŒˆÅ€XIES×ÈÜzízgw/$uøXBbjZÆ¥+y× n—Ü©¼[S[ßØÔ‚p»º{?yú¬¯¿`ppðùœÁÅþþ¾gOŸ<îíéﶇ-Mõ÷««*ÊŠ o\CÔg“OÅÇÅD†‡îòÛæ¹ÑiÝj+˜´† +œÝ-À˽x!;üê&ýÅÑj4ãßß&ôs [1Fl±ÊÖÑÕÃÛoWhxäác'’Τgf]Í/(*-¯ª®­ÐÜÚÖÞ‰tw`ðùÐðÈèØØ‹/_¾Ÿ3¸øâÅØØèÈÈðÐsï{öäqOWg{X×ÕÜŨór.g¤¥&&ÄÅ ܾu“‹ÃZks#]M€–FG7‰›sáÄÉM ú3M›1'I@HTBšªˆÛ9môò Þw0&.!„³s¯ß©¬®mhjA¾½À‹thÇ_½~ýæÍÛ·ïÞ½ûË'‚Ëoß¾yóúõ«Wã|t´ûûž‚uÇ£Vœº´¨ ÿjVæùÔÓñ±‡öï òßæáæh» + aѲÒA~vrƒþ\“3f£“ZPD\ZVQy‚Ø70$<êè§SÏgfå^¿UR^US×Øü°½³çñSðF¼ã¯.ȾÿáÇ¿Bûdè¸ñý{$Ž¼‘öèÈ0X?{ÒÛÕÑÖÚÔP[]y§¸0ÿ*l:åäñÑaÁ¾^ìz…†²‚Œ”˜0™~r£'4ál¸ª¦þAK[Gw/?_à…ébºˆöãÇÇúÇ'Ãï›1qŒ°‘õØèð¢îéjØÜXW]YVTpíÊ¥ô3‰ñG£ÂCÚÑÖÚÌ@Gm¹<¢…°A3žÐ„óÌ&Œá¨†§1̘"c5m3k[GX1Š;‘œ–‘w³¨¬²º~ü´p€Ç0ø/Cüþ‰÷¯ÏD¿.Ž¸›nQ?è{ÚÛÝÑÖÜX{¯¢ôÖܬ ç’b£#ÚÓÍaíJS}-8¹¥ÄE`Ðœ7á<µIctTs‘ø…`Æ +Êšz&Vk\=}éÄ™W®—ß«mlFÂÏúaÂ/À˜ï¤..øï/Œ œY#êWã/ÆF†A6ÝÔp¿êNQA^vFZò‰Øèð€m.ö«-áä¦É/“äçƒþZÎS›fÌK†§1u¹šŽ¡¹Í:çÍÛB£qâüÂ’ +qk{W/Úð(žføήûÓÍÎc3Qc£è{ÒÓù¨&]^gwfZrBlTØn¿­îì¬ÍôµTaÐbÂpp£4á<ÙTcn^2Õò4 =“•k7nÙu4'.­¨®ozØÑý¤oà?ì—‰7ÖùÇϹݩ¡\¦M›J¤,5¤²”TJ‹BFT„Š2y$²d"BHÖ"K²Ö ’}(K¢ìûÖcK›iν÷óýþžµºç4çtãyž>Â÷uÞ¯÷ûÛÛO!Œ +¦òý²_BœÂšŠšFìÝÞÒXÿ´ªüaAvzr|LxŸçÅßÏ’LŽêhB å×®EâþΙñócAq)…m* ŽŸ²²wöð +‰OF)Fˆ›Z;ºûÈCfâûwéþOÜŒ¨i¤É ïÖ¦çµUú~R\tX û»3¦Fè][7®—_.ý3å>b “k…ÄYE彚:¿ž8mãèæ}-,*.é>FüìES[gO„xô¶4"LDø«ñý k5ô«‘áÁ> +èò’ü¬´»·#C¼\Î[“LŽÒPÙ¶IFJ\DP8ó~çüyÆr›w¨j6úÍÒÞÙÓïzÄ­ÄÔÌü’r”b@Œ<=:ö9Â_•ïgQcÒÈÞ(ÒÃÈÝúiå£âÜŒ”„Øð h‹“†º nEÙ5+æ3çy¢ß{BŽ¹1ci`¬¦­Üììy×+×¢ãï=È-zTùDPS,ýÿ%üjii4$º±¾æIi!˜ûôe—ß­Néi©îØ,÷ gNŒ3 +ò§Œwªi“l/ùݼ•˜–UPú¸¦®u1#âoIøcÒŸ€noixV]Q’Ÿ™’s#ÐÛÍÁÚ츾¶p–Fœq?£j›50滚ÊXý€‰¹í¿àȸäôÜâGPÆÍí]}Q3!þf„™H‘¦†1ÖÕ†Ì]¾{;⺯»£ ÉØ@[m'Áïíé\Ó¦rœ¶ YOÆ5ý_?͆¿ñi['OÿÐèø”Ìü‡kê[;{È̈'†0#iÐ0ƆÈý=­ uÕå%y’ã¢Bü=œlÍM ¨ïDÞAœùx€3gi›"k`ÌÇ‹ ÍE0¶sò ‹¹“šUXVY 1Sçé5]Ô‹˜úß4Ðhuƒ¹q —€¸£CŽM¼ŸS\QSߌSb2ÈËÙÆÌðúXa+hqžòöˆ31»¦þÈ̓YdÕ:eõC†f6Î^A‘ñ©9%kÚºúÉìÁ#çar_gË‹šòÂL¤mwËZ{”ä׈A;ÃØæšÆ&Ö&l=k:ïL˜Ö¢’äýú',Ü‘¬3 Ëk^´tö‘‡Ù†1:ç·¯G‡^öv4×W•å§'Fû¸Ø‘Žéì#â c›‡ûG¶°6ÅÖÜ3øfχi½Ùˆdç☞_VUßÜÑûrhôõ[öaŒq†½=þþíØèÐ@w[#ÖvÜÍkžŽV' 8C; ðqfukSm ³kîBÁ•?ËnÙ­‰‚ìyõf–uc[÷ÀÐèØÛ÷ãþú‹m£Ãœ?ü9þîÍع¯ k;#)6Ô×õœ9Ž3Œí%óçðñp³ºµ©¶Æÿ'aqé ÛÕšÙ¹ø„ÄÞÍÀ²îê#Œ½y7Ž‚ÌNŒÿC×ö8ªgÐv¬íÜ´„ˆÀËΞ„vÞ*')ºl1ÂX3ÕÖ<|hv­^¯¸ë=“3WoƧå>¬¬kY£Bg+YÓ©žAÛ O+Š2“oQ⬮¼q­¸ðây,nmš­gÎ…Ù%%§´Wûè)›‹ÞÁ1I…O°¬Ù­™¨gª¶;a…•æÝOˆ ¼ìhuB_s÷f<ÂXØÚ¸’˜ +ÛÛf×>Ýã§wKÍ-…ÕÕI•5›2óÑêùõ«¡žvXaDœ]ìÌ ªn“—bik£Jþ'ªd¾Ù –Š¬–Ù¼{¿ÁɳN^×£Q#C{PÙ²™®í±‘Áþ®–çÕeyiñ×<ÎÖØ¡°V[›%1Ó*¶5ØZ^Iõ !ÉÎÕ/ìvJ42d¼¬ÙUÖô£¯mXa(ÎÐÎI1ÁÞÎÖ¦G´TÀÚ°µgó±`9Ó+™_@H\ZaÇ>]ã3ž×"ï¤ç?ªyù'™r + ÅÚ975.Üÿ’½¹ÑAU%y©•‚ çüÄråL… •¼xùªõŠ`kSkgïØä¬â'Ïš:ˆ SV×D#øGÑ65Î OË $F]v´4>¼Oy£´˜Ð¢¹€™•¬MÝ]¸’Wü,»uïCÒ97<»ªŸ·vsH#3EÛç‘AÛu•%Ù÷n…ú\´65ÐÜ¥¸NBX€Ÿ¥6Ú]Sðîš³PPTjÃvuãžQ‰ ++jÛ{_½ÁÌ9ŒÑÑã<4ÐÝö¢°p·sf¿jïÙ‚Ê™•6ÃîZ$$•¬¡w⬲uv š]ýƒœdâhq!÷v4ÁËHŒ +ôdí‚ô„›nv§ŽîßMÙ`“þGE@æšÁ ãz¥¤ü6u]cË WBnÝË!¶5Øšƒƒü_öËÄê|ãOSݤ#GB–CYŠ²—BEc«\EL“ºèdêÊd©I] +-x¬ ),C¥§…kɾŸc_²„á–šç~¿¿ßùsš;óLWg{îý½ÿ„ïëù~Þ¯7¦„Á«ÝZW^Ê9>줷›£©¾– +TmÁ^Td¢„Ì2õÕk- wG'¦ç½ªn¢³_k~?5?ƒIØ/ã#ƒÝí •ÏåÞ¼xÄc—­¹áJUù%⽨ dÆ‚Rr½ÅÁxW\Rƃ§eµ-}Cÿ÷× üΘkÓ›^¿,¼{+!ò”/Ùeë&£Uj +Ò‚¼¨‘¥¡»ÞjÇ>¯€s?^Ϧ—×µu ãךìjO¼êëh®.}’—žìï¹{ûfcå`Q‰‚E%˜Ù!kê™Z;ºyŸ »x#ç!µTòà~­ÙÂpí©_Ɔû;[kËž=ÈHŠ =vp½å:lQ "fd’²¦¾™“û÷—Órw5Ò@%ƒký¿Ö¬`®=62ÐÕVW^LÉJª}ÈÕYTæys 3;d-3[çý>A@®ï¾¬nî`V2~­YA®6,ç‘Ážö† +jÁÏ©ñç¼öí´Ú «¡$')&"p˜?…lnçLö=äúIiMKg?¨dd~?­ …YÎÀÁhUÏåܸ•µ©ž¦ bþ-d²_p̵Œû@®[»úYÞÅ`å  QíÇwÒà¢rw²1Ó×T& æO!oÜúÍÿؤÌ|(×݈wá•ü{Á UíWE÷~Jˆ òÙïlkf ÅÀ,0 +ö dCÙóhhlr¥¤¢¾½gpt|÷®? +ÃÁÕn©AUÔi_²³9†YPLû÷ Ç¥dP+h=ˆ\ãÞõ‡å<8Ø@XTOïg\‹ ö#»`˜ePAÈsþrvµ.(¦\óû95,Õ膋*?3)6ÄÿŠYN’(˜Èaëdù„\ÕHïz‹ËõŸ…¡Ú“ã£`QÕW”P²’1ÌÀ´%ˆ!þcf@&üòÃçUMô>—ë? SµGßôÐ*©s\(Ä L[IVBtÀüÕWü¤ŒA&JÊÁ Ź£o_PŸæ¢zÓKo¬¤d'Ç…ø“iëi(Ê.˜çÎáëgF ˆrJšævŸ@F ãrýa-* slˆÙÙÆTwÅ2ñ…Âóæòófƒ¯ /•UÒÔ7³s9€ˆd|A}^°Eõv¨ÞTE-Ýì»ßÉzÃõ¥Ò|ÆŒl(y±Œ¢†ž™­3ÙŸò$ùóƒaƒ˜a7'Åœöqw´2Y½\aÉ">bF Ï^(.³l…®©3Ù/$Ø5y&ªaG›’y-*èˆÛÎ-ëtÔ䥉ðmO1!K/U_³ÞÚi¿oplr˜P,È¿â?;È¢bb.ÉÏHŒ ôÞç`i¼J•$%F@1ó2Ðk‘EK–¯6±rt÷9“„CžyX˜{é Å÷Ó"Nz¹Úo6Z©B’$„ø‚™±¡Ä¤äÕ´×nÙáö}PÔµL +µ²‘ŽCžY0ÌÀ´iõåOó~ºphÏöM†ZÊrÄ3Ïo6ª×¢$Ie•±…Ã>ïÀÈÄŒü’ +yµkò&æ7=íueOî¥]:üàî­æúšŠ²‹EñÜÀ d ×D 9e-ÃMö®^'#ÒïW4ÐzqÈ3¦`s[miÑñgyºØšê­X&Ç=…šØP²Jš·}{( ìò­¼§åõò[òŒƒbžšìn­yõ8'õB¨?y—͆5êK‘=ÅÓjfßPzfvßxþpîbÚÝ'euí=oPÈø„šYæÓïæ®–ê—~N‰ öõp´2Y­¦ %&Â[Ñfê5ØPlœÉþg~¼‘[XZÛ†BžÆ!Ï8 Ìã#ͯŸd%EŸ:â¶cËZmU’¤—†˜ª×:`CyøÇ]Ïyü²¦µ{ptb +‡üEA1OŽôw4UQ)‰‘Þûþja´mžU3r¯yA½^k¹ÃíÈ©è¤ì‡/ª[ºäwÓpÈ_ óp½±¢øAzBÄÉ¿ïÙ¾Ñ@S Š6¯ ŒÍ¼´ 7Ûï= 7…ZÕÜÙ?2ŽCþò ˜ÿ596ÔKk(–wërØSvf@´¥¡hó¦ša)#楨¡oôúDxBúƒâÊÆŽþáñI21Ã=5ÔÛ^WöäîÍø³G8Ñ^®D{>Oª-eÔ¼Lm]<8 n¨Zßð™3Á0¿éi«--ÌM½âçáøõ:UyI"ÕŒ–2(‰˜—Ó~¨×wŠÀ†êC6™ùõãÇé÷`O vµ‚=•sêÈß,Œ¡ñ¢š±R–SYe ÍëtlJÎãWµmÝȆÂ!s&¿BÌï¦&Ð=EÉLŒü‡—+40E^T3«”5 6Ù»Œº–UõÙP8dNí)dOU–Z}YÑÔ¸`7 #-%8§¸t³‘{ G”’–‘…ƒ›Op,åz0/´”ùý(ÿ{A TsORÍQ^{¶™ë­sŠK7ú5¼×K–®Ð3߶Ç+0Š­”qóâN†Vsþí+aÇ=]lÖ먑$‰ ¸âÙè½&J’TuÖ[;{»r;ŸŠ”2n^Ü À< ©æg÷nƇúyÀ9¥$»˜+7Q/p¯eÁ½#Ê/4þæ½gH)Oà¥ÌÅ 696ÜK«+-ÌI‰ òvݾQŸq³9-`ð^ÏÅîõv×ÃA1)9…¥u´Þá1PÊñRæV˜ÕÜÝZý¢Ì©€ïÀÍ^­&Ï›Íòkõ6.ß„_Í(xQÝÚ—2·ƒVóÄè@gS%˜SÏø³ßlŽ~fä^ÏAüÚr§‡ß™ø´¼âʦÎÑ ¼”¹XÍï¦Àœ¢ƒ9•{=æ”÷^ôf‹„ærôf3îµ”‚:ðkƽ.«§ƒ5õ/e.ÞlPÍCpNd2n¶Ž*IB”³7{Ö¬Ùsæ ‹JÈ©h›@¿Fî5QC°”?à¥ÌÝ°æTsUñ}p³¡gi)Ɉ‹Ìçà͆êîõ"iEMÃÍn¾¡È½nîÄGo‚`†sŠÞðÏ¢\àÙ‡]·™ë©+H1n6‡(#êE””_¾ÆÔî[¯Àèdô^ŒOáy¤šÑ›ýÜìðãžÎÖ&Ú*r¢Âó8õ™QõZ(.«¼rí×Näcç¯Ü¦¿Fï5™aÌ)p³g§Å‡þ›ý2ñ¦rßÃøjun-‰d–™!Ž)e¨ì’¡EƒÂ’)„8(I‰{BT +§L™•)Cežç™mÚÉv¸Õºï°mι©mXö{W¿ç?xßßú<ßÏãtV_CQ‚Ÿƒêì0’z±ó‰ÉïÕ;}ñZPdjAì×舢öø2×٠幉Oîýf{R[MV„‡•a¥ FQ/ai•Ã&Öw%ä”ÕwÂ~ úzµBî춚’×1¡·\-ŽT–„Œ~el¾zá Ì}‚ŸgU·ö€¾^Í MÀ÷4W¤F]»xZo¯œßJ Ø|õÒ1µó xš”÷¾©O˜DüšÚ_ÿ£íìOcƒõeÙ îxX#ÆL¿a`FÕ‹Ži‹ ¬^–n¾c3ßÕ¶À} P^Å:{¤¯µº(ãùogs Eq~öQ/Z6^Q9T½¢R *[z‡?g€z­j`˜§' øî¦÷o’"S•áFÖÔÚåÁLZQÌœBR»5IêÕÐ98> Ôk•à wö@{mI&"`FvnزkŠ¼¢Ä4ôÏ:y?€Õ« ¨5 Ø ñãposeAJdàU‡Sºê?o[5… ¼ž^QZ'l®Ü‹Hzƒ¨¨×ª°ÉqHÀJ³ãÃýÜ­~9¤¼c+'Ý2×Ô,ÊüâŠ8Ãs.7Cb^—Ô ôõªgNÀªÞ¦Gÿ~ÝñŒÞ^y1^6Úe  e.aUí“vž÷Ÿ¥äW4÷ êyÕC°¡®ÆòÜ—ýµ69 ­)NfúeÁLFYBi¿‘…«ïø¬ÒúÎA€2•‚Àüç§ÑþöšâWσ}œÍõ5Äù–·¦fQæ‘QÓ1µ¿™Z­¨‘@½¨XÀ¦‰|OÓ‡‹2xdª]SãC] eÙña·Ý–óÿ PÆ@È0·V¦E]Ea^ªf åFeðÈÔ iM͇YQ‚™v 0£(Ó/€2µ¿ôGº¦&Fû۪ߦEzÁš--ÁL³nñ¯Œ¢ÌNle<@™úùòe>̾®ç q +â|l ´ëZ»¸ÊžCYFMÇÌáêß›Úßùc‡ 3t™!Íö´=©¥"%ÄÉDG³ØÊž‡ò~#K7€2–  欸‡·\ÎhÈ‹ñ²2lX¿Hÿ‚Q¦¡gæ†Q¶(c+$˜ûZ+ Ržüfcrx׎­[éé_kÖ¬ý×zZeqÅýFÊñ9e @°±’Y˜;ëK3cB|œÏÝ+·‡uÓ"ÇTØÊBÒªÚ¦v^el†yjb¤·¥"?9âî¯ÖÇ)K +p0n\Ì°{­§e`ãSÀžwõ ‹Ï(c)ˆfOŽvÔ•¼~ñà†ãé#ê²"Ü,ô‹‚q/:¦-[¥vk°õ¼™ZXÕÚPÆN Êž™ú8ÜÛüáMâã;îVÇ(Ið³o^ ÌèŒÚÄÊ#*·OßüÒÍÐجR€2¦WöôäØ@{mqÆÿ¾æ`¦£&#ÌÅLO³ŽòWFf#‡ ¤²¦ñ…+÷ž¦T¶ö”±“/$˜{šÞç&„ßv³0Ä)ˆó±1ÐR>¦P÷báùyÞ'ïà˜ÌwuCã“eìSŸÆú۪ߦEzÙÔR‘ÚÊÉDù˜‚fÔOÈŒ’P:ð‹•‡ÿ“¤¼ŠæÞ‘‰©€2f‚ÀL$à»ʲãÞºd®¿ONt1c +.l:&NhFé˜9\ûýŒâÚŽAå¿Ê˜ +óh_kUAÊÓ€+Œ7¦fÝ‹WL^Ãà¼ëíð„Ü÷M=çf>”±æi"a¨³þ]fL°·2¦(÷¯9÷Ú¥ibͨ´·ÕmýcŸ€{a+0ÌS#½Íy‰ý¡1µ_qþ…º3·ˆ,ä^Î>!Ȍˆ3À½0•/_þú<=9>ØŽ){SmÈ¿¶Pè_pa¯§e`ãƒÜ똕Ç݈äüÊ–¾Q0£0ò˜*ωóu9‡ø ê_6ä^[¥T´Mí!÷zUR‡º@[!©ªÂÔgˆíÜ.À¾™¢ÊFÝ‹…GTnŸþ9ß9÷(c,¤15ÔU_ +ù× ÇSºj2BœU6Z؛ٶÙeÝxȽ>”±Ø¿¦‰ãƒµÅÑA^¶'ï’¤ ²g [Lgdéîÿ$)¿²µoô(ll‚ªìážÆòì¸Ð›ÎPeËRPÙó +ûð [¯ èŒâZ¨°‰ÓÀ½0È¿àÊî‡*;™òÊ&¶,TØÎ>¡qÙå=ÃPa”1¸²gˆ„¡Î:¤²íàÊþ¾eÿ³°“¡ÂîG + ŒÉÌVvSyÅ•ýµÂî"g@ac4K©lRasÎ6(l¬‡\Ùó,û{•6 ¨<ÎÐòòÄ°Aac:³l'¨²e„9™¾YÙHa3°óoWÖ4±ñ ŒJ†õÌ«ì¤'w.[âäEyX¾UÙkÖ@…½‘‘SHZU÷”£wHlVYc7(lL®ìiâø`GmqzT §‰¦òv~v¤²<ËëhèY¸·Éí38ïæ÷(1¯¢¥6¶CªìîƲ¬ØoÇSºªÒBœŒ¡Ê^à0#g™O\éàqë+‘iE5 °±Re÷µTä%>òs;o°On7 =ͺ…3iG îØ­eêpýÁ‹ÌÒ†n<(ll‡\Ù5Ei‘W¬TçccXð0#g™Ž‰KXV]ïì¥[a ¹š{G& Â¯Œá •ïn(Í|ñ຃©Ö-õ³ ï(#Kwÿˆä‚ª¶±IPØØôÊÿùsb¤·ùCnBØ­KgõÔe…¹-õÕÃL:Ëü;C;*:£¸®sˆ@œù PÆrÊžh«*HŽðw·4B¶Ô‚‡>Ë9¥T´Í.ÞŽvTÏðÄ(lŒzå"a¨³®8#ÚRƇvJð/x˜çÎòž£æ.¾á/߀õ¸²§&†{ -|㢙¶Š” ãƯfòYVÀYyÜ}šRXÝ>0Î2æ3·¥Þ¼ ÷u1?ºç‡yÞY6±ñ +Š~UR×…'€…ù ‡y| ½º0åé]+#œÂ‡>Ë´›IgÙ;$6»>Ë`Ga?È–"à»êJ^EyÙ˜|ã0ÿ—ýú~ªúJþˆ åJ—®t4tAQšØè +(KèM%Ë‚tDMPÑXè ÒÁÂJ¤ƒzïÒAPÔ09ß{¯”ËMtÚ=“óügæ3sžç]WË%¨–! á–Å\]H,ffzrż\Ëò‡Œˆµ<‚j†¬sÉ׊™XËü –M.^¿Ÿ[ÑÔ3Šj†‹y„XÌƇäÿ¬˜¿Ô²´Šž•k@tJ~ªeXB(æÑž¦ŠÜû×/:™‚bæ'[ÌøZƱòˆÊªØy…Äg×¢Z†%ËÅ\•Ÿàj©§"M¾˜A-SÑ2°mݱûà‰Óç"nç”5t£Z†#ËÅ\[œâeg &+ÂÊ[_ÌØø¢cdçß{ä{Gßk÷ž–¿µ<¿ø }Øÿÿ!ópgCYNRĹÓ'ìÞ±•–Š´˜ñµÌÄ)(¥¬cáâù0¯²¹olfÕ2Ê‹ó ˜ß”?½wÍ×ñû#{ÅùØéÖÍ/LÇÂ-,£zÔÆ#(6½°¦m`Õ2$ÁŠyaf¬¯¹2/9ÒÿŒ¹Ž’¤çúù…_›YyEåÔ Ož KÈ*­ïšDµ IðÅ<;>ÐZS˜än­¯*#Lf~Æ×–mßÉ2þá•;_¼î™Bµ IðÅ<79ÔQ_’•æmo¨.'Jf~Ç¿¸‚¦é¿/^¿Ÿ[ÑÔûvfaÕ2!̯‘®ÆçnGœw8qðËü"Q^5¾~Žz˜WÕÒ?6û/HŠ?¿šóËäÈ^10¿hIæ~|1sñ¥ÆW\z_h|A“•ùõ,9Ò6˜_¤ó ?¾p¬<Øø²÷Fã º,ϯê‚Ô˜@7+=i¡uó‹0±Ù¶îØ}àÄéó·=oDã ¦æ×Ä`{]qf|ˆ§í±ý;…¹Yp$Ê`|a[lïaÇŸ®Ý}ZÞÔ3:=Æ,Y"̯áΆ²ìÄpŸ“Fr¢¼¬›×ŽlÂÄæà—PÔ2s¾t3ùÙ«æ>0±Ñø‚&@̯‘î×/ß¹rÁÁø üú‘ Æ5~bëZºD§äW·öÏ¢ñO°‘½0ó¶·©"wed3¬ÙøCŠ™Khyb׶ ¢‰ Sð#{–0²oú9›i)Jðs0Ò­V¦ Ø&6 ˆ¬šwhBV šØeõÈŽpµÔU‘äd¢_}J&6+ïö]F§|.'倉=Œ&6LYÙµEéqÁ6úª2¤§¦L‹Rò.\ýõÉË7ÝØÄFÊЄ0²'‡:êK³B½í ÔdExXp4T–ç^;¤ö€CÊ÷ڽ܊¦^0±Ñ!Qð#{j¸«ñyNÒeŸSF»¶“œR„CŠ_\AÓÔéÒÍØ!5†)¨‚ìùéÑî7/ŸüzõË)E¢ŒR’J:.?G¥äWµ C +²,ŸRåà”úÉÑäð±m[h×*o¢gâ”Vѳr ŒI+¬i@‡\ÁŸR3à”zõìÁKN¦š +â|쌴«N)¼23—°ŒêQàøŒâºöÁ tHAâ)ÕßR•ÿ0ÊÿŒ¹¶’„#ÝŠ2¦Œcá‘U3°óMÈ*­ïšDÊP¯<7>ÐZ]àj©«,%ÈÉDG½qE™’ŠÇÊ#*§ntÒ'<)§¬±kx +RPJÍM ¶×¥Ç¹[ëï“âb¦ß´Vy3ïöÝŽŸ>qçñ‹×Ý#Óóè‚)xåw“Cu%™·B¼líß)ÌMªLËÀ¶u‡ü!ã~¼z÷ÉË7=£Ó H¦”§†;J³ÃÎڨɊð°à0eŠUÊ[¶‰í9lâè{í^nESïÛ™…H¦åÅù©‘®Æç’.ûœ2ÒåeÅÑ,ŸR@™š–‘O\AÓÔéâÿyÕÜ7†)£ñQÀ)µ8?=ÚýúÅã;WÎ;œ8°{;/ÛæUÊ(©éÙù%µÌœý"“ó*[úÇfß#e¨‚)/Lö4•?½ûËÿúç!ùﶲ1Ð’(sH*i›»øG¥äWµö#eÈ”?.̼íý­"÷þu_G“Ã{Ķm!UfÊÊ:®Ñ©Õ­ãsH®,-aÊc}ͯž=¸qÉÉTSAœ‘–zEy#Pæ”Rѵt ŒI+¬iœÊ¿#eˆ‚)¿Ÿëo©ÌKŽôs6ÓR”àgg¤£¦Ü°¢L”¥Uô¬ÜcÓ‹jÛò‡OH¦”Çû[«òS¢ü]̵•$8H•™9…¤÷éY»Å”ß!e¸‚Wžh­.HpµÐQÊLk”7Ñ3se}kฌâºö¡I¤ Y––~ʃm5…i1n–ºÊR‚œ@y#‰²Œª¾GpåöÚ¢ôØ@7+=L™žŒòQÏø̤ aðÊïÊqAîÖz*Òä”…²­gÈ­Ì’z¤ _Ê“CíuÅqÁÖúû¤…Ö+s ïÜÌÖ+ôVPFÊÐ…œ23ý¦ÕÊ8¼²whBViCçðR†-Då ìaƒ)s­(S•EdÕ ì½Ã³ Ê‹H®|]™ÇÂ#"«nh6<1» SžGÊeE93>Ø“Œ2 Ž•GTNÝð¤OxRNYc×R†._S¦$*kò¹œ”ó)ØoPÞÌÊ»}—ÆñSç"n?”§ç?#e¨òE¹¾ä¯•?)¿xÝ”áË¡|)äüwú±ÿùVe´¾`Î7(£K +ú|MyQYÝð¤OxRNR†1_”ëŠÿDy# Ž…GDVÝÐþlxbvYCç0R†._WÞ„cá‘U3°÷KÌ.Å”ß!eÈò×Êÿ * ïÜÌÎ;,!‹ ü)ÕåŒø`²ÊôÌxe[¯Ð[Y¥õÓH¶|“2—ðNÕ£¶^!·2Kê;†2t!*·å¸`kL™s½² PöDÊf‰œ2=5eÏøÌâ:¤ _ʃíµEéqAîÖz*Ò‚d•÷éÛxÇg eƒWž#(ǺYé©H‘*ScÊÒûô­=‚ã€r;Q1àüñ=Pn«)L‹ t³ÔUÆ”éÖ*3q +JïÓ³vŠK/ªmœ@Êeié3Ph­.HpµÐQ–àÊ”$ÊR*zVî±å9¤ Wðʳãý­Uù)Qþ.æÚJ@™q­2¦¬¬ké“VXÓ”ßDÊ0… <ÖßR™—éçl¦¥(ÁϾF™(sH*ëX¸D§T·ŒåÏH¢`Ê 3c}ͯž=¸qÉÉTSAœ‘–š’b•2#PVÒ6wñJɯjíŸEÊpeéwLùmïo¹÷¯û:šÞ#¶m -ÕZev~ E-3g¿Èä¼Ê–þ1¤ Y€òâÂôhOSùÓ»¿üÁ~™S¹·aü¼u’a› ™çŒ‰&CR2$‰ +i¡¢„*”Р R¨¨H$dÎPdž·qo´E½§užaÛ¶©ã}zžµ¾×¿p­ûs}îÓm7Ðæ¡où?ó˜Ø‰*hZ;û܈{õñKkïàhW[¦»›*?¤Þ¿âíh©¯.+ÄÃÊHßò&6^yÍ ;œÎ^M/¨né[þ´ŒŸüúûç…Dl¬È}ìyÐbšŒ7ajË<ÂK4 ¬¾úðe^Us7yd ´Œ£ü‚ZýFêjø”“}ùäs]UiA.ÂÂ?çѵÌÈÊ#$«®¿ÍÁ;ä~ê‡Ê&"™ZÆSЖ:ë˲Ÿß½tbßeR‹9Yà–ÿ˜h™À-(£¦gaï“ò¾¢±‹Dû ZÆO–‡û;êJ³žÞ pÛ³yíRIÉ-Ïûs!k±´ª®ù~À¨¤œòúÎo£PË f¼äׯÿþø>Ü×^[œ™îwÔÎdµ²?3­å?à–Y8¤T´Íöº_Œ|ö®¬®£´Œ« -õµÕe<¹}ÞÕÖh•¢8;3ÃüÉ-sðK,]cºû˜xâÛ’¯íýÃßÁ+…£@Ô‘ÁÞÖ/_ÇÝðu¶6ÔR]ÄÎ4¹ef>q¥UÆ»Ž\¸ŸQTÓÖ7ZÆS –ÇF{ZªóÓc¯ŸqÚ±AS^„—‰öHÁ-Ïg`f_$¦ ehíì{3îõÇ/­½ƒ#?€dã'pËrwSUÞËWO9Z­×X"ÌÃÊHß2$ÙLl¼"òšv8½›^PÝÒ38^)Rì1 +©«±"7%&Øó Åºå²BÜÓ[få^¢±ÞÊñÔÕ/󪚺Éà•ÂQGêÛ@g}yNRT Ç~s]UiA.ã‚y“Zfdå’]¾Îâ gpLJnEc ´Œ£ -÷wÔ•f=½sÑ}ïfmIN–…Ôò¼Œ.AiU]óýQIÙåõà•ÂQ¨T{mqfB˜ßQ;“5Êü, t-£¯§€¤Šöæ½îwžf•~í¯ž‚Í*ýÚÞ7 †ûAg¹§¥ºàÕ£¾Î6Ð,‹Ï<ËÔaæä—P^c²ëÈ…ÛOÞ@ÃÜ †û¡Îru–YhÎ6ËHËð0‹)hmÜétf"fìgb–ßýÛ,S‡™ 惞ÁÑÉ9åõð0dc;ð,À³\”æGe.ÂL³L7ÌËtÌöºD$¾-©m3¦{ŒBîn®ÎOêãlý»Y¦æÕƶ®çnƽúø¹¥ ëAgy «áÓû”{!ÞŽV³Ï2m˜EåWlØþ×é«÷Ss+»Hà—ÂxÐ?ª¯ýkiÖ³ÈK'ö›ëþf–©ÃÌÊ#$»\oëÀ»Ïß•Öuôdc;È5ØÓú¥ðÍ“ÛŽÚ™¬Y*)ÀÉ2ó,ÃÃ<æÅR*kMwó ‹‡©ðKa;°)$bSeÞˇ×Î8í4ÔR›}–ÑafæàW\ih}ù¥*›ˆ$ +@6–3ñGe'Eyܦ¯¾DxöYFÍÀÄÆ+‚þRAÑIÙåõ(²A˘ +ìÞVèJ÷wÛc¦½LZ‹0Û,S)Vnô—róOÈ,ªiëÈÆrhÀ®ÊO‹…þ(£UJâü³Îò¿”Ò*#ŸÐGéùU0²Ç²1*°;ëËs’c‚½-‘?Š}öY¦ýR"ršVŽ^Á1É9åõÙXØm5Å™‰îû¶èªÊ"ÔoZF‘-£ª»eŸ{@Dbf1@6¦{ŒBîn®ÊOtÃ×ÅÖxµ²õšµeÙÊ«m]|oÀÈnî&dc6tÀN‰ ñv´2Д]ô[`Ó-*#Û;$& ÛvmñÛĈ‹Ç!`«ÉñüØ4d ɨAÈ>õЀ]Ûu.ÀžÙ°edc2ÿ°§#¶ìÙà˜1˜I†=W`Ó!›jÙ ™E5­=²‚–±Ø£±‰Î°%ÿØ“mdãâ›–W !ûÛèOà_Ø tÊ0°; `'ÿÀž@¶œÆzK¯ è¤ì²ºö¾!€l,v¯‘ÁžÖš¢Ì„ˆwتs6 Ù‚Òª:f{ÜüÃâß~né!SÆ€a.{ýýF"6Væ¥Å†ú¸ØÍÅ°éÍ/¡´r“õá³×¤æV4t ÀþZÆX`õµ×•e'Ey9X®×›°Ç‘Í+"§®oaïx÷YVIm[/ä_Ù ì^crwËçÂ7ña~n{ÌtT¥¹çì dK©¬5µ;rþVÜ«‚jÔ¿²±Ô½:*rS\;sØzÓJ% þ¹{Ù|bŠZ·:uå^JNy]G?ð/Ìu¯Þ¶Ú’¬g‘öúêr"¼s6rÌ Ll<²jzæûŽ„'d~þ…½Œ»WSU~zÜÍóGìLתH-ž°©È&p H*ÿÃ~™S½ïa¼uYdÞæÌ3!³LIu ¥’…›"IœJ*uPI'¡Rq*¥”8‡J‰J†ˆ™çy̘-ºçfÝÏwØÛv×ýöøÃçùÞëõ¼_¹‹oHlrVÑç–^Ô¿ Ì, +÷ʼs)ÈÛi£©¦¼8a^…U6ð/19 £õÛ=ODÍú×ßðʬ“9îu#üØÞ-« ÔdDø¹8æƒ23ð/½U›Ý~Aü«¸ó/8¦X'˜{ ÷¶T"î|ÈÅf…¶¢„ïü +™ ø—àà_;½O_º“ùöSS÷Ð×o°²Y'Êãƒõ^§cîe¤.+†¹×|®Œû—¨Œš!ð¯cá7RsÞ׶ŒMÂ1Å:ÁgT_kջ箜õCÜKEj¾îEªl² +Ž¹÷´ ²¹gú …4£ËóþºuñÔV& p/¬²qÿR7Zç°?02!íUY]'S,òŒª)É~vÄÝÞR_UzþîE†ø—²®…ݿиûpL±X@aÿ†Î¨ṳ̈è3wýÓLKQBpÞî…ÁŒøA\^Ódƒ£×ɹc +ž™ùAÜkzrt ½ö=˜Q[×.•]€{á0ÿ‘VÕ·DÆÔÕ”ÅÕ­}#D3ku¯¯Ã=ÍOÁŒòu±1×Q’œÿŒ¢¨l^lL9yý~;#¯¼ÂÌ*ÁPè¨+ËMKˆÄf”˜Qów/¬²ÿBÆ”Áê-ÿ:ÿèeIM[ÿ(qÂÌ!£\Yø,9.äð; ]e0£¸„òì˜RÔ^a½ËçLtÒ“üOMÝC_!Ì, +”_¥'^8áé¸ÁŸQl @yvLÉ.]¾v›G@ÄÔœ÷5íf–ŽroË碬ûWÎú¹nZ¥§²ÀE3Ÿ¤’Ž¹Ë¡à˜»O * Ì, +”_§ÿuÒk‡•‰¦ÂAÎ63'7ALNÝhþãço>Î)­…0³@fþe·Í–úª(Ê r/2Ì\|ÂRʺ+mwûÇÜÃ`†šÍìÌÌügÊvX™.(/pF‘`fcçä!ˆËk¯ß¾…ùÌ#Ä)33óQV“åçþ ”Q˜9¸øE¤Tt-ìvŸhvc÷—ñI33Ž<e§?2VÙœ<‚âòšÌ@³KjÚúF& ÌL ¢^ß¿}êi®,¤Êؘ0K£0û_NÊ|[ÞÐafj¾ž&Ž"(¿JOD ,ñ³(ãc +|f‡}×eWµ’`†gfFÈ(7U>KŽ;ë,ð“(Ï >óJ[—Cg¢ïdä}¬ï›œþv6s‚ªq´¿½¶47-á /j›f‚¸œ†ÑÚm{†]KyñîsKïðW¸¦˜åÉñ/ÝŸòŸÞ‹ õsÝ´J_õç¿ò,Ì|ÂRÊ:æÖ»ý~ëÏ×eu£Äi(`̶¢&FúÚªKrRoFz:n0¡e’fÄd—®Ùâþ˹+÷³ ++›{† ÌÌ ¾¢»Êßf&]öÝmg¡§*-B Ê(ÌlÌ’JÚfœŒJLË-­mï!BcBpõîm©*Î~x="`ŸÃzcMy*QFÎÌÆÎÉ- &«f`¹ÙÕ/4öÞÓüOÈš‚ÆøWTý‡7ݾtÆÇÙv¥®Š”?5(/ÂŒWHBq™©•£gàù›©/Kª±5;›ÁÁPên®,zþàêoG÷n]k¤!'Nà¡eLÀÌ¢2ªz«ìvû_NÊÌûØÖ0F‡¤^ým5¥¹é‰Q§¼wZ¯ÐQ–æ£eÌ‚K4×;x Ö0&„¬^芊 õw³_m¸TVŒÀÃI%Êøšâæ‘VÑ]iã|ð4XS¯Ê›€ÆÐÌQ¯G7Îzî°2ÕR”(³Q‰23 ¸œúrlM%?+68Œ‘Áúš8ÚßQÔëNô¯`E­ÒW•àædg£öÈÌä5åu"°ª–ÞaØÙŒ Ö×ã_º›* +³õòضÎXSêE 3']S›ö¾|'ã͇ºŽQ"ìl†…Ü×­Õ%9€zí²6×AV7ÕêE‚™ À,$¡°Ì°°k² ++šº¿ŒÃÎfTH}=ÐQÿ1/3)&ÄQ/uZ¬(Š3£k +°]Þ§¢ÓrJª[ag3.³}]Yø<%><`ÿvD½$i±¢ÈgÆÖ*`ön~!1I™yëag3,}ý>7-ñbÐAg[ =’zÑeJÓ2µrÜŸò¼¨v6£2·¯ïƆú»oY»\Cž¤^´¹2.`¢2ªz¶Î>AÿHË};›AA<=9†ôuèëˆãû­Ì´•¤„ùi×׋0C:{‰¼†ÑÚ-îþ¡±wag3,ÈSžÓ×>.¶új2bN©ùÌìÜü"RJÚf÷ uöØä4<3}ƒ>婉‘þŽºä¾6}-Ä»˜ƒv}žíl‚˜¬š¾…‹Ïé9 _3ƒõ5ql°«±¢0 ø5èëfÚÊR"üÜìl´<2ÚÙ‹y…–(Ptö‡ºŽþ‘‰)øšé˜|D õ´T•ä<ÆýZ_M–æ}™ ële¬³ggV4v ŽagÓ13?Ð5Ò×^[ö&#)&ÄßÔ×4U/Ò™):ÛÖù`ÐÅÄÇ9%U-=Cøœ‚g¦G§ŒŽ¨Î†OÏî_ Àýš}^0.ÐÙ¨g»ù‡Ä$e¼)«mﯙn™QÍŸße§Þ¼pÊôµÞ¬_Óúʳ <ÛÊq_@صûÏòË:F'¦þ _3=B~ÊȈzõçíèàîök–ã~Mû¾^„ ÚÙ2jz6ÎÞ§.Ü|”ýÌ)øšéäÈß¿ÕFÔ“{qçŽz8l0ÕR’¦O_ãgfG=[^cù{×ÿFßJs +{ÍðÌ´ö”'Ч FÔõó^;­ÍuUeDèÔ×Ø™ÑΖTÒ2Ýààqô\2§jÛú†ñ× ÏLË`O™ˆ>åâ—`DöÙ½ÉÒP]N\^}]ílQU]sk'¯ÀˆøYåõý#SðÌ4n^ä§|9Äß}ë:cME a>.zõ5~f¤³ÅåÔ ,7¹øE%¤fU6v ŽÁ™@Ѧ]f°§üu¸¯­yÊW~;¶QÊÒ¢Üh_ÓéÈxgsñ K(jƒ9å ^sNIUs÷—1â|Í4 vä)`^ åYâÏŸ8°Óf¥žš¬w1Ýž2~f¤³¹D¥•ÁœÚîqällRÆëÒšÖ^h`´ÍÌàÈÄÑÁ®ÆÊ¢ìÔ„¨ ð”Wªƒ…ô5]Œ½æż`N©ê­´vò<~5ùIÞ‡:ÔÀ¦ák¦UЧ<…šWUINú­è`?7ð”—)"#Š“ž}Ÿél0§Ô VÙ9{ŸŒ¼ž‚mš…l^=­5¥¯3’bÏñØne¦£"M×Eqæ°±s"sJQÓhýžC§/&¤¾(ªhì…¢M£àG&™WòÕðãžNÖ zÊØ•ñ9%"¥¤e²~›;b`i9ÅŸ›pцg¦:$½éo¯/ÏÏJ¹yÒÛÙÎÒ€1O™âÌ‹yÀkVÑYØÙ/·œ÷>Ž_ÏCê$*4¤!£a59h³íˆT•»ŒBq”†Nr¤!#F¤¡êNIu“¢ÒÞ{ï!ÇÃéz¾ßßïw¯êxΓëªû¾û½ÿ…×õy¿_ßИ—YU¨hà +Çü#Á t·Õ—åe$DyŸ;ºW_CIf‚F™‚L3¯à‚ň9¸Ü‹KÍ.ªnBDÇüc!ÿP=m ù¤¤È;Wœm÷oߨ"')Ì71£ŒaÓL10mc«Óžž¥å×ÿ)óøƒAìm‡zrõ4¯µË‰ +ðÌœQÆ(#Ó L\FQ]oÏ'¯›ã_¿/©méB1ã˜Çù¯¯ÈÕTU˜•{×ßÍÞrb^‚¼\4Ê´˜“UÖ4Øw ˆvÄ‹ŒÜR€¹ÇüA!깺(;5ê5ÁX{ż&f”)˜§Cã‘’WÝDûü•Û‘‰™¹eu­8æ„ü … ~¨´gá×?cmª«®¸L1¯‰ëk +æ\¼¢Ò+€h<áþ©$RÀÜÝ?„c_†á(CÈ]-µ%ð‡ºyé,ÐkMeÙ 6/ +fÔÀxÅ€hoÝeaçêM$å—×ã˜Ç2ä~¹47ãEDÐåßl̶ÿ¢"'%ÂÍkG£ 1³s¢¢½^ËÈÒÞÍ/Çü#¡Bn­+ËÍL„?Ôñ;6­Aôš‹c"Í‹3&ÚËÔ´wÜýBcˆopÌã y¨¿@Î#%Eû¸œ07ܲvY¯'Ò¼è0sÑ’ÿ”Ž1ÁÑÝ?,&Ç<¾`â!ח瓈Ñ!¾®và‡ZµDŒ¢×O3°™ÜüàŸRR×5±rôÀ17£ ‡ú¹Ù2ÒZ~¨ù“ ×4˜¡qpJRVYC×Ôú”GŽy\!¿P(ä7ĘP?w‚±¶šÂäüP£0ÿÄÅ# "%§¬¡‡b~B‡ù/ó?„ü• +99&ÌßÝ‘`¬£®(#!~(ŽI„ŒŠ6ÀÌ+ +0kBÌqÌÿ w}Eíš ÙÃÑÊDW]IVR˜@ž ½…yÖß`þ„cþ'!Cî/ò)kS] eYI~䇚 ½™ì2æ¯8æÿò—ÏrK]/ ²ž†²œ”ˆפé5=f¶Q˜1ëB0Ã1/äÁ¾N9 +Y@àeÈßÅ\×ÚÕ‡cþ~†É{;›kKóà EyC@3|¨ˆ¤ü²º€ùóóßù ¾~èíh®)ÉÍLŠ/”#-dv†€<6fˆ9¯¬¶¥³oÃŒsòþèioª.þ‘ [ÑBžÌŠ.cb&’rKk›;{QÌø9„ äz¨¿§½±ª(çõ‹È`_7‚‰®ãA ³£»_htRfnIMSGÏÀþQòÕßÝÖPY˜qÇÇÕž`̘G`V˜­æ¨ÄŒ÷ÅÕí=ýC¸ƒõƒj­¯(x÷êù£ +.v‡ŒuÔòH̺&7ßàȯsŠªÚºûqŠ\÷uµÔ•ÌJy~ó²óI #mu%YÆ„<³1ÁÞÕçvD|ZvAE=ø¨p£ê]_†ª,ÿÍËØû7¼;n¾KKMQVR„1!Ĭ®³ÛÒÎåJÐÃg©YËëZÃÇ™l’\w4Ք撈Oîzµ9°sÛÆ…LYVI]ÛÈâÄùË7Ľ|“WZÓŒ:ÞÚH†©ÞÕÞˆ|PÑažNGÍvlY·z™„0?ƒB¦Å,")«¨¦µë í9¯À{1ÄÌ%ÀÁÀ8c˜§:g¤­ÑInró:!2ÄÏãôá}Û7ÿ¼j©8yÆtÆ„LYFaýVÃýÇœ<B£ÒsŠ*(ã<ÕÏ™ÒÖ½À» \Gܹêæh½Ç`ãš•K +ñq32d +f.~a‰e«×mþuß‘Óî¾Áã_½+@Æomš¶îi“œÿ6åéÃ[W.ØLô~Q]¾Xlþ\ Å<}Ä,$¾tåÚM{¬\}‚>My›_ZÓÔÞZ{j»6µ­»Û«Š?d¡\Ÿ?a±[GCE^zÁ¼¹³237ŸÐÂÅ+T5õŒt¾|ã~,çâªÆ¶î¾)íÚôm]_Q˜“¼ëÚïçl‚JIn‘¨àœÙœ ™Œ™c&÷ÜybÒòÊ@µÍƒ] ‹NLÏ)¬¨§mí©Ç™|ÈH[×–åg½Šìçqæè~íëd¤äYœìl ™ŠyöAðQ)nØf¸ÿ虋~pœ³òËj› kOM Ãq붆ªâ\Ò˸ð WGë½@®Á%"À‹@þ7ÃC¦`æDU:Ø^kG0ÎáqÉ$ÐÚÀµ{§â9£¿üùi §£¥ië˜{×½O2Ñr}PìlÓ˜2†™`憶Qߌ³÷õ»Ñ‰¯³k7wôL½s¦9änÔ­SŸ?ñ÷Ð.ÙEbó[3w[“ƒµ6<çyàœW­ÑÔçìàâúøùKÒûBPÛжYiž)Œá ³FÊš÷(8À ²¡–ºê + ]‚s€[3y[“ƒ¶6*aÂØ9›XÚ:y\½u?&XXq%´mlžY€3-ãÞζÆÚr¤¬#ïÞøÃí´9NÁâŸh<ˆŒkË‹r3“cÃo^»dki|`¯Ê¶­pZOË 3!Î«× ‰É*«ë˜Z;¸ù†Üõ\PF"Æá›jÅMO0nª­(~ö(%."ðú•sPÖZjŠÒ›7ÂiÍäi†Ì`ÆÛù§¥+× +ˆlݦ¢qÀÈâìÅ«þa°žsŠÊkÈí(ÏèÃßUS%ÐŒüÀêjºq|d·‹½•‰*kñMë׬€Óyºµ5cXq^¸x9\a¨¶õýjwÙóæ­ØäÌ\äÜÎC£oÆÞ"ç)hfUxÿîwvã¬Ôø¨`7³#º¨¬yW-[4ƒL fþ;Š3çOKWÀ&&«´[ûÐ ´ž#âRå#ç®>Ú«ä<Š{œYÕþãÑ!øv‚}Œ±ã #½}ª +R¨¬¹sqΛž™}èµ=—cÁÂEËVò +KÈÿ¼GÇÐÔÊÞÅ;(2œ‹ÊH­½ÔAXЊû{„fV5ZÇco°qÜ\ÐÕÈØ×Ý錅±¾¦š¢ \Ö¨¬œ?̓L`þŠó𳬒Ú>]C““¶NnÞáÑ¿¥>ÊA† ÝÍ=úëI³÷4“xxÖ×ÝÑÒPSñâ9TuüíОÎöÖæÆúèæúÄxF•5kpm£õŒÏ0îÕ|‚Ââ2Š;5t³<Åíwÿá“<ØÐuMm½úw|Œ}-éññOB »÷÷t´’k+K!Æé÷îFûz\>oej¤§‰îjºñB6ã‰üûzÆÎ<|ÂbÒÛw¨kë›Y»äîx+æ·ÔÌìç/ÊIõ ‰†ê†cŒˆ4ÚÒ,é¿ÜšLÄchRû{:[ÉuÕeÅyO3’î„Ýôru²=ib¨»OMIvÖxâÐ×3á ½Í»^h‹¤<,è†'~=ëàây#$*6)=+· ¤‚ ÇØÈkéwì™fRÿÖã€YÂ8į¨PÔ˜š:35bìçqÅÞÆòØaŠ2â‚øæš5fÎœ‰ÎËW­]·QTB÷¡£æVç/¹{„݉¿ÿà1@—“êÈ­Ý}”W(ÒcðÅ”ÆÔ,ëÿK›í¯Ù á±7(Ä´þÞ®ö–ÆÚ* Îy”žr㺫“Ý)S#}mõۥńàÛiâ>žáÆhXÎp‡q-^¶r ¿ .îÝZ(а¡¯ù…G'$?ÈÊ}þ¢¬ª¶±Gš!2MP3­Ù±¿>é]â°3„qˆ{:Ûšj*_çgqÜí°Ÿ«—/ØX7€ªV–—Ü,´ž—‡{ɬñ§ÃtFßU -]ÁÃ+ ´YRNIUCç ±Ùi;'O¿à[Ññ÷Ó³²ó‹^V’êÉ­í]½té7Lj¦õg´ÿÛ0u _0´ôÈ÷÷@ˆÉu¤ŠÒ¼§™iˆ8Ð×ÃÙáìIˆñY ÑëÖ®Z>kü™asž·`!QÜDÄQ 5u ŽYXsrõô +¿—”–ùäYŠtCSk!=4 &¬›©ÍðþsÖú›鼄/F¤Qú@¸BŒz:÷ñÔÄبÐ@ßkÎŽv§ÍŽúb¼MJLXõÊe‹¹~œÏ1küçC8ô\´ ¡¸W¬æØ´y«œâÎ=Úz†Ç-­Ï9¹\ó ‹º›Ý ‘.-¯FÒí]=}PãT#k„ÍÔÆÞYæXù3ý~é"^†ï(¦ö÷vw¶µëkªÊK +ó §ï'ÄD„Üôñ@ÄæÇ hîVQ£ª^ºh!ç|Ž¹³ÆŸ¦3ZШ¸¹q Å¤ä•U5öë9aimçèìá}ó_ÑñI©stUM=¹¹­¨û©´A°¡cÓµ‘7§›cuúOø·è1z ë/á;48@£ àö–¦†:ReYIa~Î㇩÷âî„û{¹_¶·ÅÄZ{v*ÉInÙ$È¿f%T5œÕ³Æ_˜9¬âÆ7 +4|Z‰JHoûYMc?$Úü´­ýe·ë~¡‘1 IiHº°¤¬’TÛ@nnmïìkÈ5 Úˆ{ À9˜3Õ Uäú=„wtï«Á*øötu´µ45Ö‘ªÊK‹ žeg=LMŠ‰ ðõt½xáÌI³£‡XUI^JLdúµc¨jXÇsxÖø 39а¡×ðÃ)&!³ µ5=isÎÉùª—”wBRêììgÏ‹JÊ*ªkêu[`÷öS¨  ÜCÃÃ##@>ú£#õ1¬ŠXÁuž.¤óvw‚o3¹¡–ÎËyœ™žr/>:2,ÈßëêG;kK£Cºšê;•ä¥Å¡©ùVã3ªzÖø–3ºÄ`C£ææÜÐÛ”UÕ59xä„Åé³.ºxxß +‹ŒŽOLNÏÈzš›_X\ZVQEª­ì–¶v¬ÝÛ×ßO¡P¨Tm2ŽÕ‡±*dv€F£Rái_/ÖmǼõà[ñ²¤?HIJ¸{ûVH ¿—‡ËÅ gO™7Ô×Ù·[EQ^J\TH€šzé".ÎùcfUÏyæL +4jn€—’WTÙµw¿ÞacK+[ûK.^þÿa·¾žšÊÃ0Žî¸ã:t)Iè„ÞÄ  ЋÔP¥ˆ ()‹A¶ˆ EÚ""JÁŽèŒ¢à »ÿǾ¿sÖ½ÁeÕó½Í™Ü|æyϹÞÖÙÓ704:þûôÌùťe„½ºÚï××?~ÚØØÜü æ[[˜:°ÿù¦ºµ®Ÿ7776>}\_ºk«¯_>º¼´07;sor wµ·4ÖWW”åçˆÒRáÁ~^Ζ5Ý̈ÕÄ—š˜ñ’ô±ã84 n#3º5‹& +Ç;%M”“_TRQ Ô7nvýÖ#cSÓ3³s  ½òìù‹—¯^¯®¾Y[{ûÐ? u¨~Öwo×ÖÞ¬®¾~õòÅóg+ËK‹ˆwzj|úz:pMeé傼ìóÂäADHßÓÍÉþ¤ÍÔP'Æ.5z3>@R_†ÖÑ3„ÛmcËqöàù†F’…Y¹—ŠŠË«j~mhnmïìî½=082:>95}ÿÁìÃGsóó ‹—ž,¯<ÅÔQHõéÊò“¥Ç‹ óósÎ>¸?=59>Šx{»;Û[›êª+pà´Ô3qÑáHØÝ™c wÚÄ€ª ïbœX|©‰0Ì>¹% •U)p»aÒ4+¦ƒ H„„GÅ&¦32/\,(*.«¬®­olnmëèêéíë¹;::6>19uoz©£@ufúÞÔäÄøØèèÝ‘á¡Áþ¾Þž®Ž¶ÖæÆúÚ«•eW +/åŠ#Bý¼¹ lÇdÐLôu5ÕɪJŠò²ûˆ ãƒ%µZV^QI…¬¦©M506£ƒ4ÇÙëí&E˜.ÊÎÍìÒŠªšºú†¦æ–Ömí7;:»º{zoÝî¿3844<<<44x§ÿö­Þžî®ÎŽ›ím7Z[š›êëjª*J‹‹ +òs³EéÂäDäÇ÷ôpqd³l43c4b5’ +ŒXVêŸñKMÌø+Û _Ýø¤Éêš:HšÆ°aÙ;º¸s½|üƒBÃ"q‰I©€•“—_Px¹¸¤¬¼¢²êjuMm]ýµÆ¦ë Žjm¹ÞÔx­¾®¶¦újUeEyYIñå‚ü¼œ,àMMJˆD†…À‚==\Ù¶L+ºl˜ª­©FFÔèNï%&Œ¿ºýÐhÒbimª¾‘©9Ý +¨9N®î\ß/ 84<2:6>19Ux.ý¼(3+ûBNnÞÅK…EWŠKJËÊËËËJKŠ¯\º˜—›s!;+St>ýœ0591>6:2<48À—Ï;åæ‚[Z˜èéji a|ÄØÆ5Aü/¶ cû¤Õ4´tô ŒLÌi–VL–ÇÑÙÕƒËóöõ  ŒÄÄÆÅÅ'$&%§œ¦¥gˆD™™™"QFzšðlJrRbB|\\lŒ *2<,48Ðß×›ÇõpuvdÛ±lЂ°¶¦:…¤¢tB{o˜ >Œ¤$'-!­¤B¨©ÈÚ̂ΰl¶ƒ“‹›û).Ï‹Ï÷ñõó +9-ÄÑQ‘a§C‚ƒüý|}ø|/÷”»›‹“ð2­t 3£`åp¥Ñ†‘°ä&ˆ£ÝIïHKËÊaÔªdŠº†–¶®ž¾!`£e[3O²ììÙG'gW7w®'ÏË›òöâyr=ÜÝ\]œ8l{;ÖI¦µ•%Íx õ©à 'zXFR˜ñá'õwi1µ"²†]#l´lC#cS3s nÉ`XYÛ0Y¶ Îæp8lPµe1m¬­ K:faanfjldh GÕÑÖÒP_Uet¢w€±ñ®0A|øí‘ƩѪedÅØÊpÄ) ­ Ü:ººTªž¾>B7u`‡ÌAÕ±êëëQ©ºº:€« º4_¥Š¸ï^`Bø¿oWz›·ÞÅFÚ*ªª$™L¡¨!tLØ©"V5 +…L&‘TUU.΋í|÷Âߨmiœ³†]#lX¶´ŒŒ¬œœœ¼¼¼‚‚‚"†.V'‰U1VEøž'ee°õÿùÂ?í&„¿]8À¶5¶k ´1n‡¤1t±º¼Xc•F?£Ç.Z/âÅ} àï+) k16ÒFܘ8f蘺¸_0ÖcèGü±£˜î¯Ø—þÎ’ÚƒicÞXGî²ï b¬XøÃG$y àï8)ÉŽìôÓv¨;®{l ß(©/uäT ÝÿE_4%\‰ˆˆ~¬þ`ØÙ°» endstream endobj 755 0 obj <> endobj 870 0 obj <> endobj 871 0 obj <> endobj 872 0 obj <> endobj 873 0 obj <> endobj 874 0 obj <> endobj 875 0 obj <> endobj 876 0 obj <> endobj 730 0 obj <> endobj 877 0 obj [/View/Design] endobj 878 0 obj <>>> endobj 752 0 obj <> endobj 753 0 obj <> endobj 754 0 obj <> endobj 882 0 obj <> endobj 883 0 obj <>stream +H‰¼V{|Sõÿþnš¤´¥äUH›Ûp“KK%-J¡° +i£ +—0Фm  +*/EŠ…í„É|T  ˆz« ,ˆ ÈS`2Â>Ûg:…‰n0¦@vn’–çÇ}>ûc¿›sç}Îïœso.€ö¨†E£ÆÚ{ÍZ>wq¾ x¸´ÂW‰ÂË«Ö P .S%$_èvˆ©"^Ó¤Êɧ–ÿhT™€Ò8yÚüIû—ç<¾Ðìø}eû+Žò¨×‡’Ò2ÿ¤É)åS§ULŸQ9sÖìªÇæÌ7ÁãO,|rQõ⧖<½tYÍòÁÚ•«V?³æÙçê~ýüÚu¿yaýo_|éåWê_Ý°qSÃæ-¯½¾õmo¾õ¶ÔøλÛw¼÷~Óïvþþƒ]»?lÞ³÷£}ï?ðÉÁCŸ>rôØñøìä©ÓøüÌÏžûâ|Ë…‹ˆá¨·N•S"O"Äz²Ál,ó±yìIöw€;ÈW4 !E0 V!]è!ô¶Y¬–t+gUY;XuÖ$kŠÕlµY‡Z½VÚ¡+ŠPHî-êÉ× 6†yÉ×BòµŸ|!_zÁ(ð‚öÕï._Zò•Üæ«Œ|±P(ôg Ôª=Zr„!šÞ[àƹ‹¯DuqéŵÚ åæ·¬mÙÐR ´l!¨j™Ùòh‹½¥ÇÙo#ýÄÐ{z|= +ä’qòDÜ·nk´®¿lÃF<¥ø7ÖâK,ÃjÔâ%¼ŽMø +Aü KP‡àŸX…uXŽpßãelÅ5\Å¿°oâ à-” kP†OáÇ'8„c8Œ#8Š¯éù Çqoc2¾Ã³8“8….Qü(ÇLE¦a:ê13Q‰Y˜ÇP…9˜‹o0 0c!ž@^Å"ên5ã2¾ÅN|Ž‹8‹sôÖ¸€3hÁ{xû°;ð1žÂ^Ôà\¡¼ÐŒ=¸® W&æyz~°¸“~èÒÝü›BG¤ÿ¿¬Ø(üÿw<¼½FU©²ÖQ_W¢j}ÿÊ¢žô£«èuŸt)Á|ºVê|‡t/]?°, $üõ\Ö\E“5”®ÁXÈjz`5·˜"l¢{¨ï…]ÇL¶‡ò*¢‰Ì¡éÈaY,·©ÑÍmÍÏíÛ'§wv¯ž=ìݳ2mÝÊèšžÖE´Z„ÎæTÞ”’lìÔ1É ×i5Û'Äǵ‹U«”1 +Ž!“IF‡»1Ym3Y,OV”N¹›–išï-tw)™î1âï¡Sï¡ÍmôH É%: +dÇpýU‚^b r¦A‘¢FβrÑ9EJv”y½dQ jÉuÅM%ì»1>Î!:üqY™hŒ‹'4ž0Ò­ld®,Œp.gÿF±í³2%MâÒœ2”Kùµ^BÄòDýmIS¨yå"Y+¦`LR9$u8®0EÊ÷I¨3›ƒ+›4(ñÚÊÄ2ߪœrl„"Í(–ëè”Á¤r¾™ˆ#8BP”Ëá xé.ÕùÄnçp×XšM’Žv§¤µICHcÈ‚¿˜A§qŠ “Á` Õvß)µÈwÇc¤„ƒN‘’3gù`:ŠÑž•9S´eÞr9f¹OÎÓY.kýá\W†s«:ÔßÓ +e¢³ÌW68âÝ!å‡7w‡H¥+ðDYQ’Ä„%Þ%RìÂ1n‡œ˜è+0EÚÞÆñF9Äp¶ +9ƒaä@J cÜ"©æÊ7.‚¥¹áá±xYݶ’”iQ^…ļâåKws|QŽ*Ms2ê]Þ`Ð% +® 7èk +U—ˆ‚F 6+^ŠZä&«¦ÐÎZ“äZé‘4ÞëOµ—'À5Æ=ÐdÑzZÉ¢V4R4XñáãPè7,ºQ•Qì¶T¨qn‰êä–ñbÂ#»%|:À§ˆ†TÚËG³ï‡ôÀÕššaf*=HÐã +„z“¥yˆ v~Ÿ¾ªûæì9‡×O•clôw‹÷\ü'/µ/w`ÿÂOÚü5k©µCãñ + +7V’µ”ˆ›ÊŠ­+š§ñ³ÛÉ{/FœwÛ«EµØu»/•¨ :ãÖ1+‰yT–¤ ´&©¥t`‚lZÙ„aXy-™OÍ9|Š™!Ò,t 0õ4@§Âœ…î§~‡Ã WÂuËZÑäêºêu³»:±Hà®äÞ§³£wá‹ž)w ³l8 71Œ<_´£h¨hÄ6Î&m +›ÕzÛQdr8ŠÖ"›,ß‚ˆQŽcòåªd¡ÒP<š›d(¹œ´Ái89TŠJ›Lšüüò\Õ„†#‡5×Ê«Øá•Žzõ¬_À‚T&i ~Ê°ìqÐèÃÌ] Eh槨yaP"^f\âª@Ö p¶ªý²§¶EìZWíoCþøÓ/}}ë7õ×|±fÇžáʃïMEâíþõ¯ï'ï÷·98òYØyàs=2ÜuùÚ6²9ý—w‡ŒJ‰ƒ€²VÙ/`«i ç f ©4ØiϘ){Èz1/O>A7ÆxÑ`ÐðRž˜™ô |f|ñòx~ ñ4 ìT(±Epx«3!£ê>®j7¯«™ڭĘ?Bnû8Ö2 Û´ppçŒ7ôQÃ뺮¬Lüû–&ð©nq–ü#9KpD% z +l¹¹Z—Je$xÛ˜ÃAµcFF…Kâla¡ð‹†YÔÃ"–¥¦,ÖF!Š¦2& DAuÄðEá4pºÒ#w–øªüÕþjWîªG Ññú«a§‹FÕ>…’FæÌA¤Ý0´ã|î\ÓØoæ,£½ûOë­ŒI‡å-uÏ;ýíoÕ~§nEyi;ií-Ï7ùÛ¶´‡Õ}C§‹¿ +ñv÷ÊÈöÚ²©y‰k®÷·ù —‹ââ?©uðÀ@õA;®1É‚19£O.ÄNÛ$qý„ÎS 1:nQGéøhf$ˆ s©†´×Ûªô}–‚IÐ3‰BY6†ŸãŠXã©;â¿>ïzÝÝ´Õ+OM¾ÕÛ/W¤x—2ö£YpÃœî·>øéä‰+•0¸1ná`ù3¤‡„KÓšQ½Q>Î2}êýj²€„Žä¢Ü\UÌj:n:k¢L7 ™yɇ¨¨d@Öi˜3å3œÕÙ¬À/ ¿«Éû˜=ÚµëøùÝkNW½üëó¿™~ÕŽ.2³‹Ä¶}?y÷³H“oâ·‰ïÿ5_»ò².B è×\ÞgØo ­ã:HGèÍôúçôZIÓjA˜FeÆüq5“ÓDD÷šîÝL§c™˜òfL°7˜I=Á Q‰¦¤IåÌR²0-Èa6AñCÙè ¡›§îýáÜ«·Òk>ÙÚÔ' +èÍÝÏu¾xÃ×þtòâé—sÕ¯üx[-¦· ¾"õQŒâ”l3ÁÀ}pEÓÇY–€ž¹D0*yRa€ŒkL±"²ÙÕ¡a4¤†B¿â£Ö“D0_jËL¥»JŒR K‹h\µJÜ»Ñ[Ñý{N¨*æü>r6ýa` Æ®:ô³ÐRŒN çóqœžc@vi$ª‚…º$}‰Â€ÆFú¸ŠÉ&xšP¡ˆ +©óV³¹™oàTz8 †ÅáF¾j ºjwq5KÊüüWNÆxyu«Æ­ÿŽÕº¥N‚KÈGÁÅbopµ>d +9BÅ!_È›4bÁ€È +UÜ]—¬‡ÛÝj7Œ‡é×'è»Å\q•#Qx·†ð&ø¸/QŸè©A5׃ÌüÀ t þŒž‘ž`k€‘ž  @ =#=@=³Öÿ¤¾QÒ©ü¯ßŠo(¢rYù©pÛAÛ¾³;OV­‡ÛÊÚ›»AôØzWÇÊÚοJŽ¸yùWäì™Uë7¶&bƒâhm)ÆB'ê\9)¬sc\µE­AqM™{Ñ•/¶€>&¸¾ ú”­Awq’»T¨u6­-i·k-È4F1Ú L\PÞX‚l 6Î% +Ï\w1óY æ3ô¡'€½$B ë2ÿŒ_Þðë;Nz›ÅÃa_wÓ ý|‹xä¹’Š–‡äìéÓoﯷ€§œlízKü°«c_:»¢ CÒ¡C¨­€]C°Dy0ß<~‚:G‘”1w|$g<‡Ìa´1âVž!¦¸igàE4DS ™Á3}]eFûliP[MM=zøÑGÏ<Û»7†ú'§§'“ÓÓÉ÷oßøÞ7nI©¢áò—áÊv"ÄyI —fÌ€49JeNŽŒQ(Ì(7¡Û†„ùzþcµ27n— +Kx’jd–Â*ÿ§<ü¶Ýܪ`õ¾šúMÞ&ñH+/ôŠäìw7®^v$Ø)–bìéFo¶”e¼Œ@c5*ñ^°wªø2w‹£0ÇÝQkMjµk9µl©>hØI»Ý*×{¤%¢?¾”yÏ…85ÖÊh—Õî IÍë™ ¯Ò$M«F\ö‹6›ÇtE\›]{\G]Š«.äâ¢ÒF%µqJºƒ3i –JYb +ûá,YÒ¡'» ’ZÚüuKÃ6’©W&üØ'dºšö“§Š;¯T½­Éª{á؆ãQO››6Ú`á5m÷77îy5ëZZ‰-49{¿½×_^ÖÈ^ZÛÇÆ|ó?¶ †}BËدÖبŽ+|æÞ½w¼ØÞ‡×ØëÝ{׷ƯÚ+cŒ11±]6‰i®›–Çâ]ã55ëj·ÖÖ¡+BipÄ*×H.¥ UÁ%MK.¢QSE€P¥¢( m$úŠh!X÷›ñn äñ#­ú£ê}wÎœ93sΙsçΩªÝÔ²îëÎÌBøÈuÊ×(‡–4º32æÎt0f7“³ˆl’j2Y­‡š°á²ë_ˆÊ®¶á¿Î¡j?âÜÏÄœêq9YX›+âÈfÔ,fvãÁƒ–†¶e¹¿±>¶ÿ¨|í^M²bUG«{p÷zvÇhçq“‡ˆ=„Ò©­ñóü4¶ÌqËyG2´ 'Ó>áø3Û¬»ÊIi²Ð•°Ÿ¤L–yÁ‡ŸÞïþ(>¶zþcGÿa®ø;§Žh¥Æ˜UF„Nõ¬~h×HV·%?4m?Ô›X²ê}ãËí½]•qR!€2„ÙÀ’Ãõðþê®=l_ûÉžú‹\'½öpã¬VD‰Ùf·_VÍNU5;TE¹ât8Nò(G—âÈÌ`¹óëü,»CqšrmfÕ?¯až4ožªâB•ë߉Œ‰gKö:~cEºÔ-’¥Üºìú'%‘! wçðÄÈÍŸ£g2³lÈ•¬¸†ÅWdï k›ÛTû¾ñ£ºYzÛPç'‡Y¤¶ ÷BµdéÃSRÝ:¿Ì>¤á´Û›*éÝÆo·:Z=ÒÙf%••eó7Î-–‘ééÖFë똡àµÛlZ©j6—x½ZiY™Ç®*‡§¬ì²«G‰f³]1—8! •”)¥ªÝk¶9<Ö¹¾Ïù,¯”& ²ççΛ;1?#K+ñ¢Ž*yy£¾³>É—áËüH¬ø!•DrŸð÷úúô×#RÇÌt™YdOYêù{öŸ_ùWgK_‡h})ÃQÒÀŠ¹³|Ü‹«… áÅ,æ‡ ~&rOÖš¼ÕÑöô‰W·¯`£žÀæuLkîhüMóÆäÞZW|ĽȨh›|g…_1 ¥(¯ô¥ÁÊBü]ÌÕ£Éw: â;½gÆ}îb™{Û÷𔼠Þ6è;íû“1äõzxi^§¦yío~~Ž1T8a5²¼0rqW4¹ð±82˜ñDÁ\Ôrœh ŸYñY*œlÕ (=L\ÉkŵÑÁDl ?q&žµŠÑÒÕZòvÙ‹-% ý ô¦u…’‚÷”À•ÃŽQù-GŸG=JÕà;¥*š ¿Á7EjµÂ^+á¯eà]KÍáThæ>êjÓ{ˆ¡NªÊó÷xŒ¦}ÅמƱ«±÷,æ±~>ð*âøt¨ä~ç{ÏÊ“W±ž{ZøA»SûòB:.1¾È|6ÌÆbë?k@Äß#¶§¦Á÷>êJSè’N3B=Ü"À4—A6À'Äc–LjO¾¿ˆþ}Á¶¿òoA>OÏr„-ˆuè-¾Ÿ.èÝGcÀ @'¾Ùi ]®l§wñ‰çü‡Ê‰Ù¬•/>Rn°RÑ'–Ò]yÊñT¹Ã‹I7S2•vQŽª%êõus1Êo-ÿ_>k‡û}ê#3µ‘ yN6ùé(Ny7ýdÑkE;ýWxmöŸG¦,´fièé­‚¾‘¢ÍÔCïñYLs0¬Ÿµ§hF^é§)ZÂIx+EËàÿ>E›È++)Zm¤h3ýRnj o ÇÂC¡  Äzw¤0ÞÒÓŸï éÏDvDbƒý!½9íD±pd‡^UWWUWM¥Þ´m›.¤ôhh Ý +VêkBÑþPlWà”Ðz,†¶¢[õHÏ'Oº§7ÜÝ«o ê›C˜kKx ŠB©ð½;P÷튆‚án.?PÙ¶¶eÕÚ–òôbŸÞüï¨D-¦-@ ¢‘0)€vT7E¨Ÿ)*¤zÁÕéyÔ!ÔÏ oC¿à4£Íß1#—ЩŠêPª¨"EÕàR¬SmCÑ™{@´B¨C¨w m¸äÑækÄhf>^XHscbµ z·£ŽÒVð"½Ï¢éŒÃê^Ð|¶AԛŮױjLh3ë©°Õ-8Üc³í>h²A1[zþXÓFkáóUâ]þËž«ì‚_¸%Ÿ.ûïôþ/yTž=›fz áÇ<³¦µiÿ´|{úÏÓ3Órö¸>¾i\_ž¥}y¶Ÿ:;õÆ”‰¿nOɯ ±Æ¡5CýC2 é äþÉoN¾2)Ÿ›dtáç“o]xkÒ”uQ»è¿Øp±ã¢òëxžvîì"íl|‘–5ÆÆÆjã'jt’]>Ô®$‚Ú·MÚ¥xPÛ›Xªí‹{µ$_GßÃAígàÇ—j‘8;gÞ¯¹<{\»]î]®ü˜+oÀÕïzÍBó=Û"®Ü‚m‘\÷¶HÞÖ.÷Öñh~Ÿ“wÎxzÂÎœ‚žpŽ»'œêuºC½‰ùÇ›ïûŽ‡CÀËÀ`?°H{   Õ¢[oÑŽ‡A^þ’E;ìöuY´°A; ÝË?ø.w†a( ÛM)81¤ZB0÷›–”;(³Tm)  Pwœì,•ºpy^ÁÝÊÛáпüù?ÇçH–½XfO +÷>BìN´»Q<^#ö p#5µö -SzD­CJ*»T? ¹2ÕJìÓÝ=²ÃÍ­m²±i®­“•Usi™,2Ó^pŒBqÞ ³s†•Ÿ1ÈÔ4Ɔ‰õ‰I|UÎ#¬eÇÔß%ƒ¿4XÒ !—ä™|,#о@Œœ#¦!N«U ´|à7=™W/’ßðd…ûê&ëÒå¾ÔkQЃð=T«2ÓíCДÙn?£ÌªÞFAÓrÇVið |í¼ÙCCîȶßä‹J7 >p¥XÁÿä``Oƒ¡ÀŸÝ#’…t+oôôôíº'â‘ñ;¸q‹$-Åqò#Àyj+¨ endstream endobj 881 0 obj <> endobj 884 0 obj <>stream +H‰|kxWõÜ;Ï™}Íξ7³ïÇ6›„µýöCýZÁñÌ’òËÙ¹÷ÜsÏëž×ÝvØ ô.]^—ó6ž:;oàX28:0~à­ËM¤ +€¶îÚiˆ%"0›‘îß0¾qôÝg_#~âÛ¸ubÃÃnò»ÇÉ‘á¡·«žyÀVôÆÜ»™Ëˆ¯D<92ºsÏ‹®ÚŸ@½[Ç=‚ú•çÐæÑÑ=ãôÏä%uòÛF‡›_=‚¶Õû‘~n|lÇNs/hÎA‹>¾}xÜç/D|?â­Èór8\?? ÑpÅM +<Ã[€Ý‡æá¦gqNíÀ]bXÉœ ·± +¼[ e²†Ü¸"Aü´¡¸Ér¼p“Ñ&Y@VìªÃér{4¯îó‚¡p$ZaÄâ‰d*©œQU]S›­›9+WŸohlšÝÜÒÚ6§0·½cÞüήî ÝÒóÅK–ö.ë[¾båWõWßú¡ÛÖ¬]7°~phxÃÆ‘Mhaó–­£ÛÆÆ? Û­@ÁÎÛwíÞ3ñ‘;> +wîøìûø]ûï†÷|â“Ÿš„Oæ³÷|îó_¸ï~xà‹ÈýàC_zøË_yäàWýڡǾ~øÈ7àño>qô[ÇàÛÇ¿S:ðÝïüþ~8õä©Ó?úñOž:óôOágÏüü쳿xî—¿zþ…~ ,I£ž60€…0ˆXO!Ø Gàœ€)8ç±¢.ÃU0Ér²‡ÜGÏÒ7 ͈ic¦Ñb‹ÅãKŒi¢$ ¦Cð8‡“p +ž‚—àU¸ÿ@é¾ÒÃ_–nž–KÚ|ϼl¾m^4ß4o¾n¾f^0Ï›¿5_6cžCªðßß];zíÑK.-¸ÔpñÂÅÕoNç0›mðÿžôMëhyÎÞ´CÀ*'v ×;áv°ºc솭·Áìíp'ZX‚´ýT„ ý;hŒP®&i + ¦g +l½ý'¹·8EÌSpwäI°³vMíÃèÚÔY"ë¡5¸QÃSct—˜Tw_¢hL“‹†&ncd`¨Ä¦Ê ÓÅ:£Ëû7á¼¢?Vj/†n,‡‹ÅÔÃZzزžÉ"jØ<­asY*¸†L\MQbÒ½ýËúKû:C¥öÎb(3ºJgzûKg:C±b¹ø'Exç&ÿô™<3_U‹î¶šWèaz†1fYšˆ ig>ÏRQ‰WÓ½šJtŸ^`}QF%‚Êê¾()_”Öç +$“E®D<Ér ùtSA._SmÈÓÃ6§fWÜþL2åmÝÝÊù^&!ó,Ï0‚#Œ$k£²K¢¬bã+’ /q¥Z²1E¬¬…«,çòív¿² Cˆ$=Ôp(¨¸xÏRzVщ¡•`”hÐG:¡‹¼[ɬ!Ga4àßË:s”N@í…*²U +ÐBnÁq¢Ôyzºè_ ^ƒd5¬'##·Â"¤7:I$àè O@‚ÖCŽõ4çÓä¶!¾Š¶ÀýùÕE‡¿÷ÞêÚ_=•…áØ–¬Îº®ÚU·Le³ÜuË\óP‚ùg4c“Í Âìà!:z :UÑ¡Ž(AvëÒ!ÄnÕ¡„H©ìT`Ó7³)Qà¡.Íã›ùæÍ›ùýùoÞï¢ì«9hà»üF±‡ð‰[¨—3¨QçP&P#§P¯J’K(—Ÿàê +#$îB“ã¨U…Ê9sEÍ ¬‚|¶ -Ü[yTbʇ*ÙK[–áWùüÖ2ù,tù rö0nó«¨B1íûż¹(ÊéÃvì“aú´„"ÙŠ&™Í±·ù+Í¢½fZ9gL“ßðˆ:hêã줟aÆ܉VÜâÊÄ,cã®HFéo»T1*8Æ+sá/¡ ƒvÝ(f_3srX|6M±€nu“Òã2ÝÌkÜÕŽÑ.×zñ¼anb¿xŽ°¸Œ¸ì@™ë<íGqU5 Mt!­ó j—/RçqÚ{E?§Ìeù€1¼@õHʧô%Í|ìÅYú—ó¨87&mýu‘À l¤—K§Ä œxïá\z„6jU³Ã̳…4sxö©Ý*P;¯;(° BÔÑæÕ+¼æ UNÿ…È¥6A; KÿR‡¿ç\²ô²´úB㳸‡ZYzù‘#|æG[§ZG«ZÏEŒ¼‰ùó8zÙ+œߘ‡yÕܼý›câwMä9mbM{ý³É“ÿS³×Â9, S*Ù¿~ yçär#7Ò?VL–wWÈç]†»È}Ï&X%™kï¼èr¸@W.±•ÅD†+ö?q¸‹|ÙáÙˆÝÞ¾M‹ûµXÒÖ4­ÒE‘–DD?–ì?j\L§zRÆHÇhÊH¯·Ÿ¾õ¡„ņ8Wx 1–†X$hv«do!D‘`D-öYçß6‰~îˆ –i¤ÐC,):0j³4Úydq‘䳑u¿ý·Ç«Œæ˜­å/ÇŒ-'Õ×õ^¶`²È6s¼ÅÀ‚°Ôf‚=EdÓ|Á·þ]€cxñÚ endstream endobj 879 0 obj <> endobj 880 0 obj <> endobj 744 0 obj <> endobj 745 0 obj <> endobj 774 0 obj <> endobj 775 0 obj <> endobj 776 0 obj <> endobj 777 0 obj <> endobj 778 0 obj <> endobj 889 0 obj <> endobj 890 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +15.8993082 0 0 -16.1025677 7632.3847656 6956.671875 cm +BX /Sh0 sh EX Q + endstream endobj 891 0 obj <> endobj 892 0 obj <> endobj 893 0 obj <> endobj 894 0 obj <> endobj 895 0 obj <> endobj 896 0 obj <> endobj 888 0 obj <> endobj 897 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +11.9217148 0 0 -12.0797682 7632.2294922 6995.9882813 cm +BX /Sh0 sh EX Q + endstream endobj 898 0 obj <> endobj 887 0 obj <> endobj 899 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +225.9361572 0 0 -225.9361572 7629.4453125 7389.2958984 cm +BX /Sh0 sh EX Q + endstream endobj 900 0 obj <> endobj 886 0 obj <> endobj 901 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +7.9551892 0 0 -8.0455885 7632.2294922 7026.9384766 cm +BX /Sh0 sh EX Q + endstream endobj 902 0 obj <> endobj 885 0 obj <> endobj 903 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +225.9359131 0 0 -225.9359131 6749.46875 7454.5385742 cm +BX /Sh0 sh EX Q + endstream endobj 904 0 obj <> endobj 734 0 obj <> endobj 905 0 obj <> endobj 906 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Coraline Lafon) () %%Title: (logotalerv2.ai) %%CreationDate: 18/09/2014 11:52 %%Canvassize: 16383 %%BoundingBox: 224 -1014 1618 26 %%HiResBoundingBox: 224.5146 -1013.7627 1617.3057 26 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Repérage]) %AI3_Cropmarks: 0 -1080 1920 0 %AI3_TemplateBox: 960.5 -540.5 960.5 -540.5 %AI3_TileBox: 582 -828 1316 -252 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -307 125 0.5 1389 670 18 0 0 163 161 0 0 0 1 1 1 1 1 1 0 %AI5_OpenViewLayers: 7 %%PageOrigin:524 -780 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 907 0 obj <>stream +%%BoundingBox: 224 -1014 1618 26 %%HiResBoundingBox: 224.5146 -1013.7627 1617.3057 26 %AI7_Thumbnail: 128 96 8 %%BeginData: 10254 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDA4FFA8FFA8FFA8FD77FFA87D5227272752 %2752527D7DFD71FFA85227F826F82752277D27527DF8F8F8527DFD6CFFA8 %52F82727527DA87DA8277D52A87D7D7D52F827277DFD69FF5227F8527DA8 %7D7D527D5252527D52FD057DF827F8277DFD66FF27F8277D7D7D52527DA8 %A8FFCAFFFD04A8527D27522727F8277DFD64FF26F852A87D5252A7A8FD05 %FFCFFD05FFA87D27522727F82652FD41FFA8FFA8FD1EFFF8277DA87D7DA8 %FD11FF52522727262752FD3BFFA87D5252FD05275252A8A8FD18FFF8277D %A85252A8FFA8FFA8FFCFFFA8FFA8FFA8FFFFFFA8FFFFFF7D522727F8F852 %FD37FF7D52F827F8F8F827F827F827F8F8F82727A8FD15FF525252A8527D %FFFFA8512752A8FD04FF7D76FFFFA8A8FFCFFFFFFFA852275227277DFD34 %FFA85227F8FD042752275227522752FD0427F8527DFD12FF7DF87DA85252 %CAFFFFCF522752FFA8527DFF7D52CF7DF852FF5227A8CFFFA8522727F827 %A8FD32FF7CF827F82727522752527D527D527D525227522727F82751FD10 %FFA827F8525252A8FD04FFA827A8FFA8F852A87D52FF7D2752FF527DA8FF %FFFF7D522727F852FD30FFA852F8272752275252A8A8FFCFFFFFFFA8FFA8 %7D5252FD0527A8FD0EFF7DF87D5252A8FFA8FFFFFF7D527DFF7D5252CA7D %7DA8FF527DA87D7DFFFFFFA8FF52272727F8A8FD2EFFA827F8FD04277DA8 %FD05FFA8FFCFFFCFFFFFA87D7DFD0427F87DFD0DFF527C7D7D7DFD05FFA8 %FFA8A8A8FFA8FFA8FFA8CFA8FFA8FFCFFFA8FFA8FFFFFF2752272752FD2D %FFA827F827275252FD11FFA87D52522727F8A8FD0BFF7D277DA852FD04FF %52FD07F827F8F8F827F827F827FD05F827A8FFFF7D2727F8277DFD2BFFA8 %27F82727527DFD05FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFA852522727F8 %A8FD0AFF527DA8527DFD04FF7D522727275227522727F8F8F82727522752 %2751272727A8FFFFA8522727F87DFD2BFF52F82727527DFD16FFA8525227 %27F8FD0AFFF852A8527DFFA8FFFF7D2752272727512752FD05F8FD042752 %2727277DA8FFA8FF52FD0427FD2AFF7DF82727527DFFA8FFCFFFA8FFCFFF %A8FFCFFFA8FFCFFFA8FFCFFFA8FFFFA8525227F827FD08FF7D27527D52FD %05FF7D272727F8FD0527F827F827F827F8272727F82752A8FFFFFFA82752 %2727A8FD29FFF82727527DFD1AFFA8525227277DFD07FF7DF87D527DFFFF %A8FFCFFFFD08A827F82727F87DFD06A8A7A8A8FFA8FFA8272727F87DFD28 %FF5226272752FFFFFFCFFD18FF7D5227F827FD07FF52277D527DFD0EFF7D %F8272727A7FD0DFF275227277DFD27FFA827F82752A8FD04FFA8FFCFFFA8 %FFA8FFA8FFCFFFA8FFA8FFA8FFCFFFA8FFFFFFA87D5227F8A8FD06FF7D52 %A8527DFFFFCFFFA8FFCFFFA8FFCFFFA8FF5227272726A8A8FFCFFFA8FFCF %FFA8FFCFFFA8522727F87DFD27FF7DF827277DFFFFA8FF52FD15F852FFCF %FF7D52272627FD06FF52A87D527DFD0EFF7D275227277DFD0DFF52522727 %52FD27FF27272752A8FD04FFA852FD047DA17DA827F8F8F852A8FD067D52 %A8FD04FF52522727A8FD05FF52272727A8FD04FFA8FFFFFFA8FFFFFFA8FF %5227525227A8CFFFFFFFA8FFFFFFA8FFFFFFA8522727F852FD26FFA827F8 %2752FFFFFFA8FF7D52527D5252527D5227F827F827527D5252527D527DCF %FFFFFFCF7D2727F87DFD05FF52F82752A8FD0EFF7D277D5227A7FD0DFF27 %52272752FD26FF7DF827277DFD05FFA8FD07527D27F8F82727FD0852FD05 %FFA752272752FD05FF7DF827277DFFFFA8FFCFFFA8FFCFFFA8FFCFFF5252 %7D5227A8FFFFA8FFCFFFA8FFCFFFA8FFA8272727F87DA8FD25FF52F8F852 %7DFFA8FFCFFD0AFF7DF827F87DFD08FFCFFFA8FFFFA85252F827FD05FF7D %2727527DFD0EFF7D52A87D52A7FD0CFFA8277D52277DFD26FF52F82752A8 %FD0EFF5227272752FD0DFFA87D272727FD05FFA8F8272752CFFFA8FFFFFF %A8FFFFFFA8FFFFFF52527D7D27A8FFFFA8FFFFFFA8FFFFFFA8FF7D27A87D %F87DFD26FF27272752A8FFA8FFFFFFA8FFFFFFA8FD04FF7DF827F87DFFFF %A8FFFFFFA8FFFFFFA8FFFFFF52522727FD06FF27F82727A8FD0DFF7D52A8 %7D277DFD0CFF5252A82727A8FD26FF52F82752FD0FFF5227522752FD0EFF %7D272727FD06FF52F8272752FFCFFFA8FFCFFFA8FFCFFFA8FFFD045227A8 %A8FFCFFFA8FFCFFFA8FFFFA8277D272727FD27FF27272752A8FFCFFFA8FF %CFFFA8FFCFFFA8FFFF7C2752277DFFFFCFFFA8FFCFFFA8FFCFFFA8FF5252 %F827FD06FFA8F8272752A8FD0CFF7D277D52277DFD0BFF5252A852F87DFD %27FF52F82752FD0FFFFD0552FD0EFF7D272727FD07FF52F827277DFFFFA8 %FFFFFFA8FFFFFFA8FF5227525227A8CFFFFFFFA8FFFFFFA8FFA8277D7DF8 %27A8FD27FF52272752A7FFFFFFA8FFFFFFA8FFFFFFA8FFFF7D277D527DFD %04FFA8FFFFFFA8FFFFFFCFFF5252F827FD07FF7DFD0427A8FD0BFF7D2752 %2727A7FD0AFF5252A8272752FD28FF7DF82727A8FD0EFF52527D7D7CFD0D %FFA87D272752FD08FF27F8272727FFFFFFA8FFCFFFA8FFCFFF52272727F8 %A8FFFFA8FFCFFFA8FFFF7DF87D7D2727A8FD28FF7DF8F82752FFA8FFCFFF %A8FFCFFFA8FFCFFFFF7D52A8527DFFFFA8FFCFFFA8FFCFFFA8FFFFA82727 %F87DFD08FFA82727275252FD0AFF7DF827F827A8FD08FFA8527DA852F87D %FD2AFF27272752A8FD0DFF52527D7D7DFD0DFF7D522727A8FD09FF7DF827 %272752FD05FFA8FFFFFF52FD04F8A8FFFFA8FD04FF7D52A87D7DF852A8FD %2AFF52F82727A8FD04FFA8FFFFFFA8FD04FF7D277D277DFFFFA8FFFFFFA8 %FFFFFFA8FFA852272727FD0BFF7DF827275252A8FD07FF7DF827F8277DFD %06FF5227525252F852A8FD2BFF7D27275252FD0DFFFD0552FD0CFFA85227 %F87DFD0BFFA852F8FD04277DA8FFFFFFA8FF52FD04F8A8CAFFFFFF7D5227 %7D5227F8277DFD2DFF272627527DFFA8FFCFFFA8FFCFFFA8FFFF76275227 %7DFFFFCFFFA8FFCFFFA8FFFFA85252F827A8FD0DFF7DF827275227527DCF %FFFFFF7DF827F827A8FFA8A8272752A87D5227527DFD2EFFA8F827277CA8 %FD0BFF5227522752FD0BFF7D52272752FD0FFF7DF827F8FD04275252A852 %FD04F852525227527DA87D27F8527DFD30FF52F827277DCFFFFFFFA8FFFF %FFA8FFFF7CF852F87CFD04FFA8FFFFFFCFFF7D52272727FD11FFA82727F8 %2727522727277D527D272727FD057D2727277DA8FD31FFA827F827527DFD %0AFF52F8272752FD09FF7D7D2727F8A8FD12FFA85227F827F82727277D7D %7DA87D7D527D52FD04277DA8FD33FF7DF8F827277DA8FFCFFFA8FFCFFFFF %7DF827F87DFFFFA8FFCFFFCFFF7D522727F87DFD15FFA87DFD0427F87D52 %7C525252FD0427527DFD37FF7D272752277DA8FD07FF52F8F8F852FD07FF %7D522751F852FD18FFA87D7D52522752FD0527527DA8A8FD39FF5227F827 %27527DFD06FF7DF8F8F87DFFFFCFFFFFA852522727F852FD1DFFFD07A8FD %3FFF7D27F827275252A8A8FFFFFF52F8F8F852FFFFFFA87D52522727F87D %FD65FF7D27F8272752275252A8A852F8F8F852A87D5252275227F8F87DFD %68FF7DFD0527FD04527DFD06522727F82752FD6CFF5227F8F8F8FD042752 %FD0427F8F82652A8FD6FFFA852522727F827F8FD0427527DFD1CFFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FFA8FFA8FD3DFF7D %A87D7D7DA8A8FD1EFFA8FD0FFFA8FD09FF52FFFFFFA8FD56FFA8FD19FF7D %2727A8FD06FFA827A8FD58FFA8272752FD08FFA8FD0EFFA8277DFD08FF27 %FFFFFFA8FD55FF7DA8FF2752FD07FFA8A8FFFFA8A8FFA8A8A8FFA8FFA8FF %FF7DA8FFA8FFFFA8FFFFA827A8FFA8FD0BFFA8FD4AFFA8FFFFFFF8FFFFFF %7DA8FFFFA8FFFF7D7D7DA852A8A8A852527D7DFF52FF27FD057D52FF27FF %FFFFA8FD09FF7DFD4BFFA8A8FFFF527DFFFF7DA8FD04FF7D52FFFF5252FF %7D7D27A8FF7DA87D7D27FFA87DFF7DF8A827FFFFA8FFFFA8A8FD05FFA87D %FD4BFFA8FFFFFF5252FD06FFA8FF7D7DFFFF7D52A8A8A852FFFF7DFF7DA8 %27FF7DFFFFFFF8A827FFFFFFA8FF7DFD53FFA8A8FFFF7D52FF52A8A8FD04 %FF7D52FFFF7D27FFFFFFF8FFFF7DA87D7D27FF7D7DFF7DF8A827FFFFA8FF %FF7DA87D527DA8A87DA8A8FD4AFFA8FFFFFF527D52A8FF7DA8FFA8FFFF7D %7D7DA87D7D7DA87DA8FF7DA852FF52FFFF7D7D7D52A852A8FFFFA8FF52A8 %52FFFFFF27FFA87DFD4AFFA8A8FFFF277D527D7D52FD0BFFA8FD05FFA8FD %06FFA8FD04FFA8FD04FF52A8FD047D527D7D7DFD4AFF7DFFFFA827FF27FD %05FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFFFFF52FFFFFFA85252FD4DFF7D277DF8A8FF527DFF7DFD07FFA8FFFF %FFA8FFFFFFA8A8A8FFA8FFFFFFA8FFFFFFA8FD06FF52A8FFA87D52527DA8 %A8FD33FFA8A8FD15FFA87D52FD04FF7D7DFFFFFFA8A8FFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF7DA8FFFFA8FFA87D52FFFF7D %7DFD35FF7DFD21FF5227FD0B7DA8FFFFA852FD0A7D5227FD3FFFA87DA8FD %20FFA8A8FD0CFFA8FFA8FD0BFFA8A8FD3FFF7D7DFD30FFA8FD4DFF7DFD80 %FFA8FD14FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FD31FF7D7D7DFD13FF52F8272727F8272727F8272727F8272727F827 %2727F8272727F8272727F8272727F8272727F8272727F8272727F8272727 %F8272727F8272727F8A8FD2EFFFD04A8FD13FF27FD39F87DFD2FFF7DA8A8 %FD13FF52FD0FF827F8272727F8272727F8272727F827F827F8272727F827 %2727F8272727FD0DF8A8FD45FF27FD0EF827F8F8F827F8F8F827F8F8F827 %F8F8F827F8F8F827FD04F82727F827FD0EF87DFD45FF52FD1DF8525227FD %07F87D52F8F827FD0DF8A8FD45FF27F8F8527D52FD09F827FD0DF827A8FF %52FD07F8527DFD10F8A8FD45FF52F8277D7DA8A8FD07F8272727F8F8F827 %FD09F85252FD08F87D52F8F827FD0DF8A8FD45FF27F8F827F8F8A852F8F8 %F827F8F8F827F8275252F8275227F827525227F82752277D272727522727 %527DFD0DF827F8F8A8FD45FF52F82727F8F852A8F8F87D27F8F827F8277D %2727527D52F8527DFF275227277DA82727525227FF527D52F8F827FD09F8 %7D27F8F8A8FD45FF27F8F827F8F8F8A8FD07F827F8A8F8F8F8A82752527D %52F8F852F87D7DF8F87DF8F87D7D527DFD04F82752FD0AF87DFD45FF52F8 %2727F8F827A827F827F8F8F827F827A827F8F8A827F8F8527DF82752277D %A8F82752F8F8A87D7D52F8F827F82727F8F82727F8F827F8F8F8A8FD45FF %27F8F852F8F8F8A8277DF852F8F8F827F8A82727277D5227277D7DF82752 %277DA827F87D2727A87D527DFD04F82752277D5227277DF852F8F87DFD45 %FF52F82727F8F8277D7D52277D27FD04F827525227F8525227F827F82727 %522752F8F8F852522727275227F827F8FD045227F87D7D277D27F8A8FD45 %FF27F8F827F8F87D52527D2727F8F8F827FD1EF82752F852527D7D7D2727 %F8F8A8FD45FF52F82752F827FFF87D52F8F827F8F8F8272727F8272727F8 %272727F8272727F8272727F8272727F8272727F827F8527DF8F8F852A852 %F8F827F8A8FD45FF27F8F87DA8A827F8F87D5252F8F8F827FD0DF827FD0D %F827F8F82752F8527D7D277D5252F8F8A8FD45FF52F8F8F827FD05F827F8 %F8F827A8A8527D527D527D527D527D7D27F8F8277D527D527D527D527D52 %7DA8A8F8F8F8272727F8F8F827F8F8F8A8FD45FF27FD0EF87D52FD0A2752 %F8F8F8FD0C277D52FD0DF87DFD45FF52FD1BF827F827FD1BF8A8FD45FF27 %FD39F87DFD45FF27FD39F8A8FD45FFFD3A7DA8FD44FFFF %%EndData endstream endobj 908 0 obj <>stream +%AI12_CompressedDataxœì½Ûr$7– øþ±m#ͶHÇ^Û¶fdìÑl–$+Uu÷l혌ÊdJœæ%›É¬jõíwìí¹Âw¯!MY¦W‰8üàœƒsüïþ·ï¾ÿêèÝí_¹ƒq3üÝßmï.Îïoï~·¡ÖÍ×WWŸ>ÞßaÓørcâÁŽ¾Î?HǺ¸ûxy{ó;ú‰~<û¿ØÞÞ_]Þ\lÞœ¿¿½ùróÅ—ðÓ/ï¯.àÇ«ÛŸnïϯ.îþbÎ/¿ÔÇÂ8'ç÷ÐÁäÃq:´£ñc~,v8¿ùËùÇ—ÿ?G—´ß~ºywyóÓñí¿ÿnc­ß|eè–hòÆFèð_.ÿpñqÙë ©«;HÑ&ìŸÜßtrûöÓõÅÍýww·o/>~ÜÞ^ÝÞ}üÝfûËùÍæ÷ç?Á/ç›ÿvquuû×ÍñÕùÛ­n9»½¹‡®ß^½ûæâ¯?œ¸¸ûã/.>B—ÿ}óÝÅ݇‹ûOçôåûëÛûŸ/úù¾ºý›‹‹wï^6ÈÑ×ᇳ˫ ÀþõùýÆX¤ÅÑ×Æþpüé†útýãÐ%f‹ÍîšÖŸ>Â|`jø›Ó__CË÷÷÷€0éù‡<®Qt}ñç?\|øÿþß;èÿß¿”1ïn?\Ÿßý+ÞˆÎãÆLvÜŒüó/®?\}‰SÂæ«àñOýEúÂT¨_ÈvóU¶ycœªÙ ðÏTºøËåÅ_·ùæöæ‚Ñptwÿ=ó‰÷ãÈÿå_þð xîO7—ˆßˆMãá÷·ï.® ¹ÿìꜦO—™ÿËþx~÷ÓÅ=°ÖíÕ§{bþ¬O<¿9ÿåÆð¾ýpqóÇÛ"¿r#°› œ®qyÚÄ#g~@tÈŠå¡ó%cãH8Ž> q¾ô{wùÓå ,X)Lȼ»|7Ó1ÙMæÿÐø¹úÿ¤ÿgxaê÷÷7?ðÏö÷?Œ¿ÿ{zón{{øG¶<¾€çÀ²æßÊgúnÿôaøóà¦Ãût{ñƺº¢þtwþ— @H>]|ÄI¾»ýëÍáÅ¿¿½:¿¦À]—oϯà†r×{XÇ—7k0~ñwu’òêâýýü1büòÎäìÛ‹Ã#&Æ‘0›ü9=¼E¹y ^\Óbd@1 ª_xLú6·sã»Ë¿\"ƒ¤œÿ·òéýÝ9SôôÓÝ-AJ+¥ÀMßh¸áðý%LXØž|Jâòö2Ñz^g?ž¼(Òèzÿóí§À"ÃáQÅ¢§Õç#æŒÓÜ)£æknÿºfׯK§¯¹Ó·ÜéÛj<÷·ÜãOÜãOõ0âŸÞ!¥@ÑVw3!®ÏßÞ!¿ƒÄ§nçoiAð’æ=þüéæ§ó»O×WçŸîa‚Rø×÷çpßðÇS£á¿þðÇ :fá~ 1uzóöí„ßm~XéÞŽ6þóáºÛáúF–æü¿ùA õ1›?Þ}ºÀ>O†Juÿl úù°üºÇ'ÎFmkÀSço‡UÖ[½'“1Iþ3¨8‘g“Ü!ðÅÅ¿}:¿‚/ñðòæ=È…û_*iƒ¼@@Y€‰Œ†_“ +z÷—çWï.ß¿?„É\“ yøáîöݧ· /aÄ{î0|ž¿½¾øé|3˜)‚DöI:<ÿ7ü»@1åÓ‹+0ñ¬ñ²jAÚüÇÅÍOëGì|ëø‡ï¹þñöê‡CþÛ =0¼~̉ªsøæÃ@VówWŸà§¼»ýôáë›÷·ÃlfÿÈr_ÿqñnóíÿ¾€Á,miN›w›«ÿt‰ÖÙüÓ\€õüáËGu~w±ááNúª¿ûäâ=Ø“óí`( µ¹øw ØöÜéôæ/W·>à¸òùbÒeóÏçwÆwWç7çwj_?â» Àà'˜Â»_nί/A!lÞý'ºú¾¹óá»sèñ„Ç€ÍôUæ_å‘v¨~zƒÎïÏôÅÇõtNþk"0ä;ü‹DEü‚˜¨gÄ÷>þ ïߢ¥v·9¾ûôñçÍoo¯vQÀ¬’Oñ)r'݈÷ý¶žõÝpóí cò©O¼Ø€$º|ô¼»ÿí>z?áQü”n`ÿ Ó+ƒü†¶=kŠLÐË·OxÞÛ¹{ýLå9¬Iøòã52›~žÇûçõöêâû_À¾~2;lÀô»CT<Øçû¿žß¿ýùÍåwàn\<¸‘4 òÞÁÊúþÓå=IfFÎíõ‡Û($ê™Üÿ|F¿/cT³µ¦ùê«ÁlŽo*=ô¨ëÀPúÝæ‹?Ý€ ó“4m¢ùr趂›ãwàµýÃp¼=>ëôøìøl;nÍÖnÝÖoÃ6nÓ6o'¸NOÆsbOüI8I'ùäèd{rz:žºÓpšN§áÿ„aŽ<\á(•ŽòÑtttt|´=:9:=:; \á8§ã|<ÑCOéqø0|3ѧ¸N›ë¬\'‹«íwJÃÀÇÛíöd{ #àŸ`ž ¸Ð3Ý€œBóÙxfÎÜ™?‹g錡±ÆŽæÌœš³…™ ,“6N0Þ8cÏÆÓñdÜŽÇãÑ8yLcÃèG7­ã¸×aú=>ŒßüÝÇw0L<Üp +h9º& ¯tâÐwDÄÈ@œüàTf`xààä›íñ1s:ž l +G ³‡Ë[¢:Âr\O~€¾GøoÉÀ)x&ç¸# —¨‘ÄH–æúhÂyJpÅ)Àåár“…ËL8Ñ3¸N3L!o3ÀcC÷ŒÿRŽp¸ü\6Þ3g æŸNÒ6'ÆÎ ÿÅ’‡Ë%›LB žÅÓ¸…‰!sO0ZŠ1¸ü]´p@ò\§¶áæ4Á#ô +Ál0 qæOý‰ß~Ž` +ž}ðÞ;o½ñãàÎÜ©;q[wìŽÜà&]pÞYg€†göԞح=dM6ÛdƒõÖY ÔGÖ¨ƒØb(|Á\<¡ÍÂX€g$1‰{JdE¢2EÃLK¡ä–¨8­y¦¡cDÆSZ3sEA¥ŸAúíN‰v[¢ÝQE»B9K”‰rgB9¦Ý$´‹ ífê!ýNã аPqB2)=ÐÑ—”DZ25™ž5E‰¦@Q¤éédeÂΤ­‰Kä%ê2}•ÂLc¥²#:¥ 5»&wœ nÇF0á×2¡H…€CW4+,¥éJÚžUõ:–ëHV©Ò9òJ„ԅزX™äºd—d/„—+ki?”…ËKwf€\ðn68iÙ¹`(l03ÂsX™¸,ñù¡°ÃQµÒ™*†–8‘%?/úš!ì kŸWÿI—!˜%j=³KIC =±fÄ °æA'è +:r º¹"“êðÀ¡æäLÔÇDêÉò8ý{Dr% Tuq2€¦˜€`,NF$["¬ÀŠ2c |”0È4ØäXÙ"3XZü'Ds õD@#qOˆ¤¸¤‘Š@?¢Ò ©…”B±Vñ;¯OY›Ða·à]ŠÞf-ÚWkq Ü3öÿHÈL‚Y•¼.‘´Dè"¾¥‹ ¯häˆNóe׳þ v@V€¿žä„à$n`ô˜Æ<ÖÀÄL2`¾ ˜n6N+g¦<9ÀW¼¥8"¡'€Ø3˜“T;@xÄ' À„8†eq ä ¦n`É8 Vª%XPÐðhy=Cì`9 w¢O°XN€΋ØÂsXì Xe†9Yprá pm€•Hòx+ƒP9VÛæ3 ˆtÀ†˜1KN ±ŽAv€;²q7û&`â Xù˜ŒY0_A'‚j´Àçl&÷d kÃ7†ò1›ÊkÛ| ãüHìÜS²tÑHwd¦G2Ô'X—hóžÀ=#»×‚ò°v£X¿Gjýžž d[2Á0«³#t ÎàϬð™>³ÂgVX±‚ø”£\†®âh’1…MI˜EZ©Ù™cfÔòÅPã…lÚ´æ‹aÁÄ…9”=jAA&9E³R˜df“8€šÉ*eV™™…Ù…Æ“‰ÉpÍÂ8Ì:Ì<§h&™xÈ‘-È´NÂKÌMÇUÈäŒ Cþ´+Q™$¬ÅÌu<1‡.>Ó…Ý_Ú¼¸ëå½^àLÃz‘C»Î+ròB×¥Þ.v¦«R–i+ÔÈ€ž <“˜‰|B&ø‘Ú«æÈNŸÅ@&;þˆlz ù@Dg‰0’ñÏdW¹À„WÒoE>(ùkxf&0( L";Žg s$È BDÉŸU”ô(ÖÅ»„q-Ž™PnèÐê„…rY}kZ‘³%†)Å+H5ãÈ RjµÔ’eÉ Ó‘gÉÏâµÉ«S×çéPhÅK´^¤-µXšŸì¤Iv–íJ±#r,·ädžb¼Ah¦‹w¦\ŸvD½AÖ/­`""+?SlÿÌ°ðj}"¹ìT$b“L¬2Éò>"W„–øÀœS¤´%ÿÅ ÿôW»¬÷þrvªõJzW²[Eä61‡¦@†Øâ¢e)ÄGÂO*•ÄHÞHEJžÐ,¥J§0g äÀÅ4=aml/Y£ <ÙhD*žº;µw sÚ¢wÈ?¶ä!ŸùH|äH^²C?œ=ô”O@ï“·œà®HW'1×3rœ·â:/㮣Ä\5âªÁ9 µŽC':KtÕ” Ü¶ä4L£Á¸Q¨™†ƒó8Kèí¸„L9Ú"áR‰²p„e–zŽ¯ S9}(HúXˆ´•§îê égŠ}¦Øo‡b;é•ó°_zÅqØ/½\úô²Û:›DŠú(ì¥LÅS!_…Ã˵­zFvª:@ìtä1o9, ô0Ì'b6Ñ)1iy¤ÞçÍ‹Û<«Ûº“m|3^þ<Œ =S T—6qÆ5#L »|?üÝu9þ#LÆàG`†HåÅÑL°Š°ªh—¤<Éη»pj¸z¡@š¢åªŸÀ€šóX?ËÔ³ŒãÖèýÝßi{‚ Á^À²æÇ€eÍiA¥ÃÀ O¦ý`ƒŸŽ)Ã$'x2 ‹© n~Ák†[Í8Ö8ªZ¡ßñIÉôk.ÿ23ãv¦ÿ¯ÎoÞþýæ›ÛË»/‡æQVÒý£ÞøVÂ5sÀÆ׆½õµ¦N˜+žx,žøÒ˜?«\1;O”XJØJšÆ"M5êS×jôª5@ø O*ÙøuóCå6Î.>±ÒPñ’©Üƹøèáë(Ï*ÎJh°ãÿP}ʧò*º3Çv\ αuÅ tžTvó7?x+<CØ>CˆO’4´2ÅC¨£Ž"<„CN9a^" u(°µ‘X•œüœ¥§¬ýð¤Ò©¿áÀÄñ44Òi­Èf56‹"UaÌwÈqÈkÈgǘÀH"ròròÐ qòL FA9!¦°À‘È 4?à&2ÐrËiëµ®óíÑ) ÃŠý;b8…€‹í_ŽÿŸˆp¤&Ö'gí÷ÓÊß>{cÿ yc».»k{Å ëÚÃϬð™>³ÂgVè”ÿù9!ŠŽGü¢›;a ùuÜŽ(¿?êtWNõÙíÍ»O›Ñ™§ºþ6;Õݼ÷ŸwÁ·ìèÑ »<2¿ñåó»á˜Aõ¥šÝA²c`ÇÄì ³eüiÁ¼8?ü`Mˆ}~ªy„‡Ùè0f£Ãlt˜³‘aæÙ5Œ³·9ÈôªÑvÈ»û‚®Œ÷jþþòÏl¸ºøÔ¬¾À0N@ Q÷„õ\M©KXFDÀ-!é_Õ´¸U ¤õY·UEø¬¬)Å žÜÞ‰‚&§Ç ~DÌ> déöžä-‚÷AÑËžU[ÚYw–Ϧ¾³ÔsÖ‘öâ«r}‚z¬ê³Fñ[3y®\ã|Lzˆóà*;¥’ÙSb —Öp™4åM 9·^ÜÛX’äó`ÿ–f$ž±†JfïXÃpZÃ>r–ëH¶\l¥ˆÿDJúÏɲñŽ0¡VVÍÕU%ËŽ®1o@bÂk䬉xP¼ÌJ¬,–)-²R•ãð9IƒÆʨêäôL +¡¨(æI>¹”B“D–3 +;‡Û*,14äRÌ 'LO;`ÌqÊ¥E@’è%‰(;¥ÅjÈu ”Õβ<‘P•BB[*Œß±F-µeB]?_m¡8ŠQSí„él„Ùë†ì‚e1æY³-£7¤–áŸsi6˜ÆŠµ¿Ý`³«ôÞñÒf=Ù¸zÀ¶ª,«á©¦UkYµv@a&¢ƒ'¢>È, 2ŽÂ˜ñ K“ÔŠñÓhwU¯‰t"¬[3‘êÂ* :G&bi¶€s8œó˜¾Âñs0=&?*¸ö6"ÁÄ¡Iz5É-}°ÓèqnA5¬×±ì”G7õ Æ= ÷½ÚÙݲišy<©ÙhgesV»ÑŽÝŸy›Ö¼U«Úpw4ºãN6ô­¶k…î.žÓ²Ý®Þrd˜÷ÜÕ[î*¿i¹q+ìØvwÊ;Qi±r£DÚ”ú„Y<¨7Õ*úF2 ¬ûÇ·ß-6à ͼf^µo½ ¯Þ†'ëQµ5²ÚT×ì©›]W$R(Ϋ­ˆs:4Û!×JÀ6DYî„ìl¢š]TÇÕ–H–Û©"ÐZzÏ*¡¸¼­ü®¶Ó= Á-¥Ìb?ì¦k«KD^/öï<äŸ-vð o6ÔIŠ¬ï!7{êæ%¤‹È.¶ÂTáê­pJ´†lCµœvo†[n…ccŒ——©0s|¬{â„žLK¯”l4qMËzC-ºA¶GV»âªMqªxç%¨º¹·%ŽÍïÆv½1n¦ë’¶ë­qD×£BÙõvÉ%e{t2SdJ6¸UûÛÌö·Ùåþ¶a±Á-–ým§ìokw¸‡f(®–o[5;#FCµ·P­›ÜÙã¦x|h¹BC›Ûv¹íØçöÊôWøôRØOÙ²£ÚaX”;<KÊbSÊÐîJyÒ¦”·¥ Ë})Õ¶”çmL‘"…¡·7¥Úšòøæ”Åö”¡ÙŸÒìP©6¨¬·¨Ôû•Ê¾dÃÑÐ-fyņ£a½ã¨¡í³· ½=GOØr´sÓÑÐßuÔl:zζ#ò²wì<"ºîÚzTÓu¿Tõix1U_H×go$šš£§ÓuçŠ} +]gª>a;®×‡èj¥ëƒqô”Áua3å‡çý>P_vÝS¬×Oà”Z·ÉÞ¦}}Û_çK:?uÝIloŠgÝ늙óènrªSS#s¦å‡‹ï–£%—e¹ábåƑ)Ü|lÁ׶|Z^[ºÊw¸S-ÿ0Ô9ÄU +qgqÞ¹jJ J]~’JáISt‚5' ¦<°1ŽDâÉ‚5ïùáƒcdŒbŒ!Ø‘øyÉÝĺ ì&O1‘)»‚Fõª49É© æ$`=S¼¾x„W2cð}f„ö:™öèík”½|v9ÐÕHbçšbérà>¡™Ë\µ¬j:ê´•¿G _ýÃpFQŠéêµ-×I¹N«‹þ±ÿØ}`ÿ.¯¤£r„K&-Š]Ýž!Öu±¯lIA3ÐqTmÌ”#sSlŒ¢˜ %Ýh¦hv3çkÇy‹ÚÚý”Oï( ¨;{Zu] Kiè)'ÕÞÖµ¡²Þõ®Ö +Ø+ƒä~r1YŠÑ²ØÏjÙy\öEî¬eä€ã\Ïx´H#²‰£%Õºe–].ËNv8ˤ-δË禴äëj¡W•Ðìe ƒt6I™æj–. ÓµC ô„ÂŽØ––æjg í°¨ª¯+¡Ú:Û+~%ÞªûÞ~÷@gø(sô¶:Ï{d‘Ü »3gÿ¥©ƒùm(ÿ[[¼ùèH*ë·¯-lnjÛiýÚuasåf,ªÛ—4­+Ü«òæ¶Æi[W¹ÏTkÜ,nÖ­ì󾉖ƾ¤‹s[8nªÝP˜þ;°¨ÊÞK¸ˆƒRàÜ)söÍþŠ”ÉIæ@³¹ºÑÂH€HÙÁIèT„Äo®J¹[§ÌUÊÌa»ë”[^랊²Ü>½Ë¡­õÅÌPµ®˜+•©VyàbåµÊ§R àKÚyWµ²n£Îƒl\Ÿ½ze³£b9PJþèuÅ…;Ê ‡Žoð¼òÂEá°ãć + ,1Jvf]bø¼"CIžsa·ÌðñBÃEVlhs,;BÇëౄÿ6ŠFŸ]6úÒ­Ø; G‡ ‹ÚÓJG·Ã#©€]ÉIüÆ躃²Ã³Wë麂`¢ìðÀZ]¯Ô'Pvè$°ŸBYIô´)¯híŠÕý +Cï¨ +Öš=ÈãÎÝÊ뎯ò%»±ßTb>¹Žc[NžM~f‡Örĵ§yyxr–'(7µcgÚ±úe·¨åö*þ_¾Û¦—» ¡^ +ðÿ¡¸Û®…~×Î3=Ÿ[~1ãv®yVù…}´¯S€1¬±­K0–ø\K]_TåŒÖqQ|Ñfœ9À¦t«4=â)ã6„¼9=©Ã’gê–_`~ùäùUëS¿ŸY51#iÕD‹üõ!ÂT9WLÌ ½ ÁƒÇ7ÙО#\c]3ÑÔ3 +»/ 2 Ä÷‚4Ü¿-YæüM¥è;ÅZê`šÃ|óP €º2èÕÅíÙÚ©’Õpìi) ê蛆¦ð{WÑ÷£‡ú>¯Fá‰Ňj^tpæðìŒçsžóŽø‡ržOÈz;ÎÐìç=×ùlÉ|þ¯ZZðÊ$ôC¥/:Ït9žZ\ ièßXEÀŽõ±^{ªèÕ¼èpÙ§Uì®ôš€zç +é">ìc’ (Ÿøp,/D8‘ ÷ Šo9ýAÎ Zpü;h¤t }ø¯Ï‚Øu„—Ø×:l*!ñù Б´÷¼Óf>¢-ÉÚVáqSQwù‡¡Ú33“w™?Ñ“%ç!4XZoñ,M¢,Žm3)±s0ÍQ ¡Ï¹ôV'ÅF)¯%©fRä¨ØúÀØöØ/^}dPR(ÒêK´3­BšãZäJÜ9†C›§%Ž—¥;ÞFíE¡%Òèó¹1ÊD'……8º>Jµ°k’'‘G—ô‘XÊ:mßoÏd¿Íù‰¹Ÿ5ÈÎë¿­ä«)Ù´-KÜ’nz6ém?¢£,×gµ'ÍÌztÞ*Õ$ÝêKßpªØ£Ù³×Í®hn¥¢éLךºKÊÖ´ÕT‰&ÀàÓÅd™EE-$ÖVÑ + :.h Ï%7"bAéFLÔ´Vjׇ õ 2$,êCdæó©ê,Kï8ÚB÷¡J¬ÕIµyË]›m™O*‡Ê´ù–¡“ƒ]iµØ=·#ÛRåZÖµ·½4I,©/_.YVƒdP4‹¢WK™ó)œQá$,âÔ‰Jß «üJ\^*§Áhže>¦=¬v¶@V b.,s{ëÌr§ ‹ÌK{9ˆÓÌâ ˜^ö¥Î¿ðY1QvL6ù—¡9.ÆVÇÅ,ó/ù‘óbæÜ ã¶T»pá•ânùß1aÊ{Á0›HŽ +ÉbPÖѲ§·„ åEaó«ÂŽÉöÖ¬Êò}aó[¦–o £mLƒìc +MhF#¸§ÍΘåa©íÛ¦NæÜË28㪘î:Ä5ï©h7G–˜À:Sïƒ9 ‹0ÝÀVåìÝ ïcÛwz·LgÊ'F®šê-Å£·P{`rK,^i½-´ÎU “ãòîaJeÇÚ"Æ)/‡{œÎõµ*Ç–órlKåv÷S¿o"øCµWµdÛº1üÝ;Λ(þ°sûé‹¢LgÖ–¶¡÷Líy}+­wÐZVö0/í +­×«Zßȉ‰´×>nÝõþ8ZÑC³± ZM–¦¿ž›`u½ñðáÕ½^³Òïží>Þ·¾±µpLµS±Ãy…¥êãH–Ž—º®û@úqÙ} Ž à昜nnö ðgŠ^Ëöz=6àJq—«UðEñ•5P§=Út‡&;Ú½ ½cî·ø®é9Ï<*Î…úú¦³,Õû½ðUÑ*÷ù_AwÂ9ùW'þ4¦¾;ªNøš·Áa@ë!jì| œ&û÷z=4 Ùy-ÿU¼6ìÀK3½)£Ã;úž<æœÓ7áø×*äMžÂ¿F!¯MÁ–8Â=w„N1ô!†`1â`Øàè¨8Ùêä86‡Q'÷ñé$ú ë>ÝS+§õ©s¯£¾*”zá ôù@ºøù@ºÏÒ}>îótŸ¤û| Ýçé>H÷ù@ºÏÒ}>îótÿ“¤‹hñkBÈȯò&»çѵ‡Ñ»³­Í›÷[×aÖ:кt¤6oX½c ÿ†“îîk¿¨è¡M§OxaÈÞZmÑpU4•·Vûjµ·Öúj¾ñÕš*µ¥7¤åˆ­ôÀÎКwy±B=ÿG|¡¾ã*¯¨ZXxŪ÷¤«­7oCÅbôˆC;¬^­P{Bj-/=!ÓXÌ¥¼kÞº9;ó‚¥<Æyû&»öägÔÛ7OCñUûõnÚS)o¯0·ÜQK˜+Æoí^~³ð3Ž—þãwŠµ¥Ÿá¬Í /8~×Îß]6|±â—û,Û–ý}–' ¿ØiÙ³á})IßmÅï2Ã÷`Å—ÃÕö¤wõUÁÏ·¦L)·j¬©§íÀ{tË׬u°¥+¹Õ¹Ç-µ_œ­-Ð×Ù*;-•§c­àì X;wb­µ@Ÿ„¯'[wì[l/|ˆÏÇY×¾{?ö$û.ÛƒÑÚðûN»’}ˆ0,ŽõÞRmŒôþ0Ð&4¹¼¾ŽÇƒ¼K”™ Ob²÷ŸcÝýÓÅÝýßoþéòöêþþáöÓO`ÞõZëâÑrB/O%beAšŸRÌêˆ +>(jutFµ‹GTÍàA…`Äê˜âÌã–ùŒ‹¾sÉ/oÕ0>ƨŽÉÖst€ì1)kOv Ÿ€º¸Õ≇¢Šg¦.&ë¥Ðž©³Ðsƒ¨àµug¼Suο:rEÚ‹wÏ’¥-Ÿ8ªu&ÂA>§üïLþžÐL|ŽòvqÖò‘ü²¥õ¢×Y{ e|SA`åU~õ:W”«jJãüSùÄÑ‘DvÞQªíGÔTíÎâ\©¡¢žvˆr–ýHÞÜ=ÇÁÌPö·¯’ÏRrL¶ï´’G¯%!?:£ÿ ÊÅjNÇ0Ûå“ÉÎ3Š£Ê  <£ŒV ìɱœCê©ž™«1Oe–—ËãßIG;4,€è0¬L'cñ9e#ï›ä0Ëc=¢šöÅñ–ÈÏQ6À1qÿÇ•–YÊG:ªwáž¹X!Ê‘Ý“ P7·±¢æ£Fôä—âè •Õ§«AWÂl‰Ö)©Ø¤¤êw£‘ ZdÛp,̃ û^´·M1¼$ò6<÷ýÃVØðräÔ,sã°:|Ž?t&x?@Œ%A•€Ü%Oéu°ŽÎÀNiÏq 3›·´ÁÓ+xi¯Ê@žòª{ŒËc_(½Pr¡ÔBeD©e²ßÑv·å«[°V?|†¿)²Ê‘74ÿw–b¨Ið,þ:Aò”þËÿÐ= ºzµ1Lwg@›s¼Ý‘‹"#mq¤ÝT÷ˆ?òÎU¶C-Õ±p5fOÝPLÑ#2E=¥N·b‰ +P"7&z}®‘Œé‘dL£ÆÉ:á$ŽšB‘úx«©”ñch W>[£¸Öq³Ý‰òt,éWЫ/;%yÞÓß¾C¶ç½qZzß}RØÚJ„3 ÂÖ’ûžäÕ \맕¹9²XOf`É©r“£jˆI'ëÙ—(Qr¤  +¼Hر„ŸS +5ÍF8Z§U8i|Á¥ïu¥Li. ËŽäº Fë•êŠ¥EÍÒД-UõÅsÜ{yÖ[h¼)¸*iXg×;Ю:Òn®¸¨Ž<â ÎZu¡uªìªèh‰"/·«·ÕÇ +¯:¢w}Žëðšƒ\{çó/:Æõó–‡'·ü¬WËùIcQV£è±(z0 +RNF¡³QÙ<±­ÎPêŽR«qä€=Oiè‘2–#Rê£èÛ·—·GäÌG¥œ «×‹·¦JÏX©M•Õ±)mqìˆá{F¢µ™÷2OôNâqL‰^ œõ}¿ÆNž^Obê¢Ðåë—÷5 ²u |q4l„£äl)…7"ÓP©*ýÃQ2h +-^LÜ)>øßaù}ÑÀçi¢W¶äìFÌ)næ—¶d|‰ fy ó‰þË/ôõ¿ÂÇÿjo~¿ùó7ïø–?À}ˆ¹¹†ÆÕƒ6oêÖЛj€ncsÿ üÿðèîþäòíýåíÍùÝ/›ßá°›ÃãÛÛ«ÍG_ :~8}wy{÷ÃñùÛ”ýðÇË«‹þpñöþËÍßà ÿü¿Lö[ø/H<=`cÇ|2×ѬOðhKHÃ-‹lD —Hž2PÝ…Í[JÚ’ƒ¡p>§Æ‰éÀ-ø²¢TµÐž ²ºêgð²eü?΀Ð0Ðâ&ÜKOw:t´&LœËy€âœîÄ-…Ô2Â.Ý8m¶2ïà3ßésrÔÏ fÃdá™–‹3rÚxàGŒÈš +¨fm8ø< ÄÀãA ":ƒoPÏüLë"V|ã„3Ød0LØÂ*ÓÀqæöëOà™à‡•ËÏ «ÌUŒÉñÌñ'k®lçºÓØд¡êG“A®›,¾[À§ÔÐQ$ +†Æp£Ç'LÞ#† ÅDè–2È<ÛÀÀ4Mf¦ái"þ²ÁáPqüŒ„'à-ƺÿBÃ#q&Æ€Íd ÎLL}çÒDˆM°jò`ByÌDÇ’<¹"79¼Á„ÎÂX@b‹ü–$„‚`ëŸg݈7lô¸m›pá€}m¨›D’…à,7ŒDä¹1C#ÌdKÀMÀn€ô19+ld™h[3*Ò„¯¢7Ô/š™˜Ë&šã4bC* W‚'ys°r£94'z¤G‚ƒB|’‹¸ÖRÄdÁö-È`påLdJˆ´`€["Ó9§”bt†n˜ÜÈs€­ß8N +h“DÏŽ“Þ‰»@rFòÂ##2e“12Þ¼Av¹“sfI7Bëèñ9ÃÏÔßâ1†8(ïéNÔh8^*¡Š‰Ì±Á ¬È4ôQ~ +ñ °DPedzdNŠ°âÀ¶9˜‚Ÿ€z #OÓõÔ)Rð̇Ÿ Âüö›û±ßè" ƒ&0àhº`á0³aü€X@Q„Ïd´dT‘º1†êÔ4¸ ,ÌÀ–e€†‰Ð‚B8)`Ù Ìè+£Ù…?³·¨]` …Ĥó¨ö<`DÑ +°füTÍè–I¨E,©ˆ½Áàÿn ȶɡ„A¤Yœ¾6Ê“ÙO7ŒKÇÇ~`¾ÂÜpÑY0ë ÐŒ”ÕOöz`µS&釒$àâ—»€/Àþ©iÒ„¬W._–t€›P?EP Žd< gD‚"fá*À·Ë@tž¸EÍRýá$ÕºóeˆãDH7Y?)#–ÃWf“Ç€ºåª†©`6Ç?Á _Ñ<ã #ÈNXp#`lM·©~:àI°FAåÂã6ÿr]pØe‚9Œ…ïxd1$ßV øÍWÚ–Ù= +LÅ÷ñK€û¤°À‚ãç¿'Óãø¸oÐÖß7‡ßÜÞƒír{÷¨ð÷D”‡|ø‡‹ó«ßŸßß]þ;ôÝ|±=úZ Í?¾¿½»æŸÄ›éÝí?}=ýp|ÿ JóÓs íÂy§œa_Äú_âA@Ü|ñåæ_þ>ýéÉöÝ×Áœûpq~ñáþRðÒë÷ûs°Ÿ··~ùáö=Ù…ÿxwûéC3³©@ð‰Ä%z(ÀÁxŠì²h=’ÅH+â¬Ru(KÜ& +H bQÊ +Ü^E ICD‰ã0ÙÌP´(@8XÞ Á8±‘%@E€‚å“&4Íp‡Ù¡Ð/Å %…ˆ&I{`½€)ÞHæøjÆ \†_§‘­Uƒ¢ôë¤g Ð0¬Ð@ïrŸèq í ö²h; äÍ!\(±šuPÀlr„±@c€y‚iF¥3¨aBdYâÓ’X  ‰ ”iA{FÉ Ãbˆmƒ +ËF%¸š ¥ LvÁ âlD6CcР"‚à‹Aáà1Ž,páWBÍ„ó³4 Ð`©E‹ÄHlQ¡fAòs<¼4*®Ñ3&@¼¢UžƒÊé¶rQ#Ü„ÜaÀô‡Ð£ëé-ÚT 9òƒŽÞ‹²ÂÅ‘XMîÒGÁ` 5 šŸŽ^{KO1BÜ ‹Ÿ°>".À·ÿ‚AïÃ_RçôøbÑk½8!ÖÁ›k ºÃ´IY]¼<žî"³0‚qåÑá®@þÉÄ4÷hEÄÄN? ä!¾¨Ôب¨£G¶ñ¢uˆFÌ- .k +ÚâΆGE„ +òÚ/à|Œ8´q@ ‹l4±©³•5éQwBï‰T&Œ 4õ8SëÈ ‚I„ ˜Eäæ°5_p•¯á6dÆF@Þpâ¨!Ĉƒ +Óæò,ä>äºmâ¨$Ãø OF ðÁÈÛ…ƒò«‹ pæVP¾Ä ÑÚ¡-ÆPàmh¹F!¬c0÷X‚dã6l×ÁxbˆVX +iˆÖRÂY!±±ñO<ŽnŠEu“Õ¼ÑúHX‰Y<%‹Æ,ÑÁLh*#‹‚q„K•îË1‡+Že#˜ÂÂqŸÈuÙaŒZ²Ú Ñ Ó4Šoå&´ùpð L”¿ˆ=v"È!Ê¢Q‘”$·Eå“ìz™JS /‚¡~Ý€ÆYHxºàB$òÊO*ópó4õŸDèƒ= tÚ¬•Ã#¶½ÅܱÅŽjD—µçKÚ‹¬Ð¬M äд@øv)a±1–ìæ«TªJxt%Æa5R¥x T¡‰‚¹‰SÁŒ¼Ò¦Š#‹£¥':£Ön‚Tèº[”Û£B«d†žâ(AÐ:BJ Ô¥-à2¡0œ„§@ŠSÔ©Nyt!}žcSCˆíÐØÊERºuh +j LFâÄ60#%O!‰KEµÓ4‡¥0º +¹‰J%1úJP +•>¸]sL +D1J—&$…š ©_"Rè‚äž#R¨ý³kãQ¨Ù*j‚‚9%…vÆê`˜¥xù‹‚²!J, +ìà!¿Ey‰æ–H*öu +aãPG ˆ±„¡ÐÂwÞ¶Q(´ÕhH B¡A2RèPbP2EEÙ† ïS€rlµhø Ã-h—4Ñ'‹9PŸ .Ù*ö„F"±‰=y1Q4ôô€œ£ss艎ÝE¯§ =¡©'Q Š<É‘‘€Uà £ÆÓ"î1†^‡ÐjŠ©Š:et7A'X˜åÕ˜ÔPœHcNŽÜÑ܆œ€Î´´4àä0xîìoBMÉ´á& e ˆ6!gY|z‰6?f„µŽ6!ŒH 6ýA¶†šÂÈØk"M`Ž`±Ãh +áB_À'¢Ž3Á„sˆ~3!Jr˜ÃL°|-®þ&ʲ*ŽdËJ ;ÉØH #6Ác ª2¡áƆ’™Àñõ©2­”Õÿ´ “ml\æÈË»‚L¬´¡­ÇxéîÐ*B}KŽå#A¦ô‚LOøeú_%ʤ1W°h`ùÂ<ꔣCÍN97É&:tšmõÝ¡‹êL“r'½ß’rt$]1£)ÇÒÒ¤ç~šrtY@7¯¤ºâA¼ü’rS2fÁ4åè@Z&ŠkÊáBmØdñF’5%㈓Æc÷æŒcÁM“qtÐfSD2Ž @AÆ7gnlSŽÍÈ&&]2g* GG†ØÔæ +p4VJ¾‘ ÇJÉ7––&ß8÷Ó|#hIÎi¾Ñ¡tÏFs +’otN³Î’ot¨p f…4߈TË)µéF‡* PÍ7:Òbp_“o„6ÁK¾‘H¡¼’o—П}›oDC1º’oôhæd´ß4ßèÉΉ¦M8z4¢@¡–„£ÇØÙ,špÕqFÔHÂÑaL"ÙiN8:PT@Qu€q9ô£kŽØ/YÊÒqÂY`¤\­&<k›Ú„#>2P°OŽˆ°ˆœÑ$]@užìœqt°ö²Çèƒf‘’ÄéMÆ—ÉÈ©wÉ8‚¥À¦0gêfŒ6G‡&û4ãèQɬԔ£ÓÐ\“rt7!{HSŽÄÝqI9â„Ðn2ŽÈ³ÑæiÎ8 Á("G„jBöi2ŽírÑ4ãèS +sÆn‡Õ¥a6Í8:à‘²§šqˀƈ–f~ÀÅ–Œ#ÌVš’qÄnx Õœq¤ÁƒKmÆÑ0_#%ãÆ°—ósÆ(u€UkmÆ\,@79^œq´`(òÈ%ãˆu,ÆébÕŒ£ÅèXFÂiÊÑ­ð'M9rž/Ù6åˆî= ¤>`‚g[òŽŽ(uÉ;b·„e’v´‹¡:Í;ZDøµZCòŽvò¼ÀJÞ‘ƒu¬sÞ~§¸\“vDV \-#/È;à‹°Y©Àß\ÚÑ%ñùûiÇéñ´#Š0ëýKÓŽ¸É ëç@OÜzùlþÖ-ÂZ& +M®&3 ÔÄ#ŠŠIkâÑbFcá­‰G1Ã$%ñhAõ¥@ I<’ "¶‰G ÙL£ñsâÑb( £Ršx´”G‹MÞÑb¤¥æQ<à>¿’wD½$:4ïhéXU¾šwDÀšEšw´Aô’úѼ#Ns,yG‡ô†æm {jòŽ5!¹’xDë’BgšyDnŒ.4©G4“1SÉ=Z´ AMÏIA2›uòÑ¢÷ŒYI?¢ðM”¤Õ$Æ_ˆ˜M ¥Ä~¸dæðN®¿)´]S›†Ä;‰[J"UG lŸf"Q&´ŠÚTd,wÊ3QǧLÏ”l$±*êš:)‰Æ|¶UVT¾‰©d%)¼ëm›•DÝ7Ú1ÌiID—þhbíV—¬i3“{Ë£Išš´äÈ`ÀH BµÑœ¦&'1 ¢9ÎÙI˃2ç'Ñðž&cÛ %BkñPÞ’¢$ÎHZŠs”qbë¨IRb¿Ñf7g)1"/µN”¦´D½Ô¦)爣æ)1âje8Q‰+,Œ¦ÉSZŒDLTÄyJô-yMTZŒ\)¶™Jdé)T™J)%‚[2•–õ)iÂQ2•Øš‰4S‰ +ÞMäÓL%>2æQ§(©J 3Ùæ\%Qƒòmš¬$'KÀ¸d+9¨æt%®lÜÄ[–6ZŽùÕ K\¥lkkÂ}f +â—Œ%Žd³81%gi1%H%qš´Ä$XòmÒÒ¢%ˆ!ø’µ´9Ë2Ò´%‰t$V“¶D»-P5¥¦-Éö +6ÌiK€‹Íä&miÁ& ˆKÞÒQ®WÒJ¹üöò–k%°¬aWÞòÑ´% œÝíæ-=V±`JgWÞò±Ðß'GàoÚÚÚSÚ² }iÚ²„¾4#©¡¯ò½}•F }iÚ²D´4mÙ¾4mY5mYÂ^š¶l¢^š¶,A/M[–˜—¤-눗f-KÀK³–%Þ¥YË&Ü¥YËí*N¼»4kYǺ4iYB]š´,‘.MZÖ.ÍY–8—æ,KøJs–M”Kr–¥Ms–%Ä%9Ë&À¥9ËßÒœe‰oiβoIʲ·4gÙ·4gYb[š³,¡-ÍY6‘-ÍY–À–æ,K\Ks–MXK“–%ª¥IËÕ’¤eÓÒ¤e‰iiÒ²„´$iÙ´4iYâYš´,ñ,MZ¶á,IZÎÑ,IZ.‚Yœ´,±,ÍZ–P–f-›H–f-K K³–%Ž¥YËE‹²–s‹³–sKÒ–mKÒ–sKÒ–süJÒ–MüJ²–%|U²–%|U²–møJ²–%z¥YË*xÅYË6v%YË9t%YË9r%YË&p¥YË·Ò¬e‰[iÖ² [IÖ²­4kYbVšµlBVšµ,+ÍZÎ+ÉZ6+ÍZ–€•¤-K¸JÓ–M´JÓ–%X¥iË«ÒÜe«ÒÜ¥†ª4uYBUš»l"Uš»,ª’»,ª’»¬U%uYUšº,ª•ÂúÍ¥.ûª9s8=š¹ h‹¢kôÂÔe?PõDp€Ïª=ªž€Ú5r@E;EFZg‡%í¬üçËw÷?IÏ“Ëk„æòâãÿ×… .l¿´¬;wwñ—Ë‹¿Â Wø·~€™žÝÝÞìÈIß7ïï…á·U4ìñ 6þËÅåO?Ëà~×àøçüGèMzsû¶Bʸs|Äáwwo—æþ ZžòîàÓ›wrsw·°²¦´lLuæñܶÉp0OvxÞFa¿Þ'ŒC]Ó_ð áÕ'Þà›7óFßÿL1ÑÍÉ ›tqgµÇš%Ö[:PÐâ1&Žv…Û@Ûà 'Hø®o\^¼ û_ÎQi“Fáòá]ɱú¿¾)ýÞA„P`nÙ] +Ð^×_ƒ¤eÁ +6†¬yÚëèõ©]€l+mBI¦r«~µj!y®Ÿ§[ôÖȵúÖë'1'é¡Ò¤0é½È*Tÿ3®ô¸ëß pÏÂçbÍD¯ÉŠh¸d™3ƒŒ£ |Ú¼HûõåpTÌ-ò+Θ»þÍ÷,|þj6‹ 1BU½1Z‰“µêÇÆ%¯Œ&\l4ɧÚ•&1åôVý:Övž®J½U-ܹ•'M +“Þ[¼4B’ëß pÏÂçþE‹ ±>…0V^>­ÄÉÚúÎ(_]k- ü° ª™Ô‚t6ðôÖY$Wž"°Èï"Ü+äëC¥IaªÕD3fà®3À= Ÿ¿–ÑÁRBlPø›žåÃJ–¬mPë”ø»² Ü(”|¨lPia“®Ü§+n¶öÊBÓ-‰µ'jkOš +0ckíÉ°• *0\ÿ zETØãöQ•Æüi%BÖ6¨0DùšZ›If‹ šO-¹ íÅ +w|«et…ˆòÕµòMæšlˆZWÌòMoEx%ߊ|Ï "f÷,ßDšÔòM#­cë̔ムoêÌ”˜ë¨ò­rfê1fùVÂ(©‰Ý¤Æÿ*vvéTù_{”o"Š­•ùV é +åkjå›ÌããJ¾iH`j1ËðJ¾éc‹iY´Á +{°ýÄ6­E¤4Èæª~Í€,Ž“ÞëE@VÖªŸElå¾Úߪ k½‰aɵY½»¯šv‰ùpS‘|G¬§­ßŠgàšiãÀ~%¥I5iÄb®¥¢ú‹±™ü î~m¾ +%®ÁMEè1<ú57Q'Rîõ*+ÔŽÃ,õÖbÕWQ½£Üà`Wq°£˜q/…r®S(ç¾Ü*qÅÿf|©.¾s‡ÿ¦8¼ºt®üº|—á9‚×>²iãûÞ,ÆÑ2;ñ›ws®ìÄu´G{†\î¹âzÑ'9Õ´m–1覴dÙ®£,Ûeýy9̲]¿/Ûéæ‰Þ&ãÒˆ»{@LOÁÛd,ñ]€/FF}T_z\º6bœ€çø‰F|ÝL4:õÏ«†ñ2¡UƒŽõfõ$³4w^Ï Œ´ßxn-ƒ!Óût¬<ªÅäèHgÚ€1BˆgÇð«v U6åå;,<•9d×,¾èĸj(Ã\ldƒ[5e:-¢º¯ƒ¤Õ„Ös^¥˜l{^¯°§ÜÓ~{èI52ÞÙ’±&OY0ÑVAÿ0¦Éú ¾ñؾgIìéÀÀ5«yaRl°@\ânóºI +ù+Ìõp°†=Dz¬«ûp):[isýàpŒRÜgB\|«&¢Cvšvpp¢hØyC/Ï0l˜ƒí„‹yR›¯,o˯—Œ LΧ鬧¶¬=n*Äsë µœÃ©µ Ÿ \´ÿ›æî%†pƒEb¶„ÅM¦/¾>-1[†‰–¶xúW^Ä^‹?Y›•üÑ\-JZæaª… +ƒQ{ >kP×SYͶ#n[  + +,Ëm$5¿à,Ï“Æ׬’ý“øuf0¦DŽ­ÃFœéÜjQONE\=;•qõ\tœ¦n³F_Érc5éŽ íHZ¶ºq9σÎD— -°ŠÈ‰Â—×e6­ó¤/aZtÂ/–(§DbÕܬ"«!³È¬=T÷@Õ{«u¤bOvŠ$«nÔ…]¯m5zk ïr®KÉXÙF=a'MõÝzg¯­ºuŸ \å‘NìzzˆÒ{+|ö$Þn©^ÏSïlæ¾N1ÌB¢6÷Æòm-w ™úŽV•{¶ ¾”žÄHˆ“'1ðÔŠ“&Pqg0XÒÄ“Sª…&qLh„˜2V-êjÀÖ ®§Ó“¬:¼¬•7k¸ö¸ê‹iQM¹ëÕœUÕ“V‘UOQ™¬ic&kðµÆjgŽzc…‰ž`î ðouïr®ð/™È ßEŠÖˆðiàsÑŽ'¼ Û‹D%(å[<ꌮwŠçt4¬|ÎzI?âkw\ò÷GÂzè_ÇþQX _q?fÒ¦x@q˜z…Õ)Ζ˜ ÈàIF„ãñhPB‚M„í·í¥ %ÝÐ&:Vþ÷u%µ*P{Á¶Nˆì@Ú#Î|Ïç_G˜Ÿ@czšFL°TwiLL©f0îº,«øÑó×ðÑ°vF®‡®ÏÒñlz>ÞnWð‘S'0Õs“dåá›æˆ² ,^À…¤å5Z㈟2.š5¦ßiåq¾pVf;¦1á¬ì)b8"¼³·Ù¬·&´Ôq„zSÏ‘{Èá{,,Õ _õ0]vÀ¼®˜,gfGvµ‰%<©)ùÐxÔOÝC6 Ãû&æ,jIÝIÇIîf 6ë²:ñž^èå¡Ícîd×í츧²m0çŠv–#Äǯń*3Ìy¬5™`,Z:é+"+Ò¢ŸÂ³/áñàR¸S%»W#Á°kVd`꘢ƒµã<à;<ËèDâºn“§È²}¸UîÓsé¬xÐhÄ£Ô¾@”¶â“׭“ÆR¢?Ëÿ ל4¹ÖÉXOéÁË…™ÏL™8ßgŸ4ÅiUGiÕB f®ë¡‘Ÿ;M3¿j¢7t"[ßuÊüE³kÈ{¡^ü¦ðdÇ•oa÷¿ìy {Ïcî…5âö܇=ý:°ãËø–À—¶Çüýi ýr¼Â6ˈæžà_þj–kþî4=F¬™Þÿ:Lï:\ÿ˜wÝ‹‚öl5ßïüe¨¨füÇœÎ^|°zªYÏàVu=ÞÌëÅÎV#®¸ÏSX†gjîÏkVï4=쩹?ý:Ü;Üÿ˜ëÓ‹Uõb 5÷ïü¥+_sÿcA/„Ó ÔÜ¿gð ¯Æ÷?f*÷b«WÜ¿ç),}çšû˜Ö¸é´=æ‹7&¦èö¼jøCþbáôóRÃgÏ3Xz[õh€½ôüìžÿÖ˜?{žAaÚz +³Sƒ;õæÐóAWc® ]³xQ̓Ë*Õ\‡Äê„ɴΡ¨³¸ŽˆíèTðG¸Î3Üú!¾ÿ´~Hê<$v×Iý‡Ì^sÇ“npÓÃWaãŽçhz©C¿&A§ÉuȲ+“á:„ñ"ôÚ\‡2»"ñ®Cß¡C¯Íuˆ³3’ìzäñRôÚ\>«GixºC ´¦F§)v´+;JbôÚb‡@»"y±C Ô!F¯-v´3{JbôÚb@«G骢6E®Õ]¨¶:>³o%ÛªçøÞs\ïA®ó¤åˆ+W=)õž{OŠ'-G\K¹yc{]ôõð·Söks¥N1Wú_ÐJ/ +Å¿ DÆP|ÖÏYöY€ÚÎe«+eAÔ‚<ŒùOÞ'Þ˜—Âj©E7¼À½¼¹°ÚØ°®fž¸Ú_Þ‹ÅÚúÜ–} +¬‰_î\˜jôüŠêm=!é”ì8OolÐþ¶±ƒã÷¯æV|±õ”m‡[_¿ßPÇžÙµÚ‡z]òîuÕ¦“!¼Œ³¸Cܹ)û!ËNXAj1äjÄ/;•'>@ßeŸ´ÕøzÜ«è#^˜lÁ½¶£˜ £oÌ:ÒLÉ»NïU‘¨ßk»NÛÊóP‡šŽ½µì öšÞ¯öFýŒeŸ%œË¹,ͺY îiÁ/¬m;]`j·ñÃ×xh/fÉôMÛe6Üøþ±¹n_AÕAïþ̹%“á÷f +ŽO<‰&ØvS¡ns¸Òm;X͙ڦg M'B«žSÛ¡ÀÇ<·6­Ô4{ˆñ—}V .¦±_ nÅÒ6NÄÒÎá.O2’cr"O5oÎSy:ò†ìf䚆¥M¸G3~úíïÅ‚~íº…Ë>b•íZ5íïKøztڟͶânÜÜí‰Gc|(téø¥³/‡!`êa1dÍãÚ¦ Ôø“-ú¡žÜ²O•ùxmF-;ˆöÀJZvY‚¹œÊ^µ›gP•4¤qÁðTp +YtóÙ=“îS–Øñ8†9Y²˜`eª)©Æî`°ù]í%aߎù´è¡Ùµ„Úß°uȳ?ëlïZrÉ°µ‰VÌP±¾D[©6ã£íPl$ÁfÏfZö©MÛAÛßWvVÝþ¬2øK!Ö=r¸]-ËãÄR£M¯rS¿×†¶# Û]ßèZõ‘çéj}ÔÏYöYºœÏ~ ÔxÏÆaMÛò8Q_jüéã{È\öÑ1HÉÚ¾¥¼ìæ Ž06ã·¿­ ìj†bï“%î¶Þe2Nbð‰Ø/‘’äwRCÆ×/Ù¡k¾/S‚¬B}¸HÓz†m‡b ;÷Lºe5 ZZË>+0SÙ¯é¸fùׇž–³¬Gå(5õù=l.ûèÊÏ]tÙGž÷ÐÚZöYÂÚ£Úþ É÷çD–¤7ÙqFÆŽ‚Œã©<«Õ^ľå¬M3vÍþåyÂWU®E‹TH·Õ³\ö)æðwÏÜ[õ“ñ…¶ì²u9½Z•¡ŸM$gÉÃâ÷)ø<‰Öå¸TÁÐ$ÙÈ-õÐ5iõiÂSj8êÓ»˜\ô‰å(^bíŽý·èQ{B»Ù²Ïεögdþ +úvÉŵ™Y‚übEm§†f—e'DqÛ3—}êìÁ."/û¬€í,Ë:œU/ño†’>Þ¼>W96Æ +sŽRŸÚ³Ç–} +¤UûÒ˜XöasDG›ñÛßðØ÷«&k,ï9G66ú‘§¡šOÛ³–} +¨•¥¸2ã—}*ûn9—}ZHçYìU(ÿ +ø–‘ÇZóTÎêC{êfÙGá¬â¶ 1¹èQÇ\w‘tÙ§²À¿_¼Âô+$‡Ž96b—ÁWyZÖ­ +ÝËNȺìa! —}êZ…]Ô\öY€Z¦Q¡:š‘¨É¥‰ßèôX¬nšÌÀY4 ôÐ +ÏDÅÉ+ŸÃ +NÒ˜„¡@,í8*ïx°wʬp3ª„†ïrï–Ô "›_žÚ²5†ÓF¥—²54f|gxÃÖiÊf%aakhN9ÇÿLx¤€®oaë *Ef¶Î8#åveë ~œU‚+[g_7¶Îà'£Ü.l?·+Ãd}Xñvž˜£Þ†Æl¦Âð:æTŒØúvcGeNacxH‹ÃÃ)¨3óvÆš×°àn˜0Jn¹ã¬NEÙÌÝ€˜GWs7"0çK¸P=ÅT<2åîŒïÍê| w#µbY1ÂÝ=H]œ…»±d~ËÝÀ.½Ÿ¹øÊ… wƒçY wƒ˜u–r÷š‰…»As„àWBUOp ¡íÌËy!´¡1Ma%´A­ÓK¨6r¶öZ„»˜0£Y mòІ…ÐƧ¤‚X¸scánkÜr·ƒõ…ooÀòh9SؾŒFSîFcl$·Ç㧕äöÈyÁÈÐhp3tÛ8u“Š’ÂÝí»Ðß…‰]Èn˜*¨=~…»)›ÙíЇŸ²Û¡æP¤ÌÜ „I6.d7R˘…ìÆ|Ád–²Ûa¤iZÈnÌF̲Ÿ¹ÛafP-ª™»Á +󬄻ÑÒ™âBv¯™X¸;€ö ª=Â}-͘!—fœ#6‚V)ú<Ú쥑,4yœÔ`‚0E fð¸qŠA–`#Æž¬zeÁÊýsD +á +Yî®Hž$E%ý²5úxp¼Wø3“–&å³aÓ¾â%€¡,³ÉyÁ ˆ9£>óȃ1ø (jƒ¹nøþ©Öx/ àZ§“s7LËx5CÁMÒHÖ«  ZsЕ :ÄK×yÅYá8DLPÄ#_èb•°àc¦õó1 FÕPf0æbéíª˜µÚ×Ámà÷§scV7_¿îÊZ Xζ٠X“@hãSZ LŒ˜µl䙡—læ_à´‚å5Y󡊇(jÀiÌN5°™×#UÙÚ@«Ï:,,Y–† t2˜5,N°qR]ãrpe€hu}¹i4 +À45£Ì@If®¸Gç·*$‚›ŒôôF ÖlzÜ6QFYÎA5Êti0–‚¥ÜŒ§ÆrccÓ çF°‡’ÂhFáKÂM­]c8¡ :j&É©Óe,ÐQ…N™95SÖÊäU‰äij 3MT‚’þä¾ •#4œ€¤SÔÁ +ò2àÀ+šËå«® Ü°ÖE"30üXWH^Kó8êÚŒ™h…XÓ :Žì lœÜ¤š7/h£Çã‰T@G TR/²“ +6% Z¹*Q(Ô<Í +ଠr¾×OUŸ“@£Å¢ü|Ô)Ì^+k´ +74UT gѤå(/ÃÌ"j¢p¹‰À#¦,GaZ°x~LBwhm±ÄYDÁ5QLy4À¹‘b!" dfM$u1âȸ5à";5·_Ý6ç+_Pq&Æ55ë F^1ܘÆy€qRSŠ¢Ë+é„ýj]¤Îµ uÌ#j©P"@Y>Ø0QçëÙÇÆÙyw¦Š}ê\`*vw@;³·v˜å‹7!þ­Å¤ëÞaes7)™@ò:€Íe€˜Ë +'tÔ“…¶9e XA‘*Ð󢚠])†ÈB±P×l°Ý™àÑŸ´þiùM‰‘°~OyBƒöZÂ!Ö’¥ŽÎ6KFlL£å,3‰&¾4HË AôΩ¿Íñ$$Ã,~TÝyò-]`É©$?ZnöAâ)(°)V†á|¥±€È–pRªqL23rx$úÃRëÊب£"e2^ãÐÌxéJ<\jD­l´qäð8BâæIšÉxåF0g7ǘÁ.3%½¤kÉÀ‰Ë˜wñI %õá0e@ h xì«Njš _¥¯Qe•tø`7y€ +\óT£/›°fÐk»–hdÊ1JsfC”v’Ô —Á|p,ŠÅ)ãp$ŠÍQú’Â!Ò”=. Žjä‘ÃÔX”õ5줂j™1ÈÉ«Æ®äQ+TÌ$;_ª“M\¸È‘ ™®Ä÷&v¸'è^U¤Ú„ûrå 8‘ô㵃պ‰ƒGM“†¤½.³@ù<Þbj†½Ôž¾ˆm•‰3fS@˜¸Öš,™°þÂLIÈ–íšÌo¢QF§%MäxÏ–JÆxÓêoØ`ob dêW¡iŃËÈ;‰ê°ìþ€} †¿CB'”d…ˆœ´¸Y\a܆Ll„µžYl³ÿºª< ‘ Ô¥®™L|—9ÒË}AIMÜHÑA§‘EEFBë¡¥šØ镹²m};ØSesžÃÚØ×qÄžú’‰L8+‘ýn4œ´q8ë¤(p¸²¤ïÄ>6ŽÑËt%42N7–)Pº)*2,«Y1NV]EQh<¨ÏNô©CÏEg`“6Kžs Áe€ìæ.Æ cŸ(ÀÆÍOÈçé›MGkYˆaéqÉ‘#.uÄÌ4h[8õnɤõº=M^­OŽ–`£Ëš²ÓÑ`˜¡„õ +àk ­Ñ€’ôuÆh(stvDyÉñ"Ãtg OhÂiŽ‰‘ ÄJ:Àä. “Dª +ƒRR^<¨¨¼hú…£7ÊtxæF,$RòÎÍd;S-Å„þwœVÍ­>MqÀ•o*Ñá0@zImXEú¤ë76ðíÆT‘{—ÊíÓTBéâ°ªÓè´Ñ4Š«–\'綩­T/y²î ÆO-€ª‡o %ð„ðÓ®!S O2úyÜ)«Ž‘Ø66Ž£"€¼§2±±$„,;©â1ŠXŠWum +É©µ ©KÄæJWpÉŸA«Ç Msiæàq2%P÷¾é?èÔY`©‡®<7F1w { (ðàiN2eõZáŽP%¥’,s•FàŠ¹8vÕ°RUOœr|Ip)]ˆ’ëà :%è5îƒÀƱ ;MQúªw&µŒð-EPÞ•ÂűªËQæ è¶"ÅqVs?&íH…€®„Â]”’ÓÌ5‡F1s}É’Œø¢Ö©ô”ÅU¶¾‘Ö©,½2*n€Ð´¡ä0;`)¼X%PVT3¼U…‚öF§TXù(“ˆyÕ´S&_™faJò00û +K¤ûÎPjÆ誰3¥u;èzú…Ö¶JÛeÏš ðTÚKž±˜’šH™ÃΈE"«¨2ª³£öÍVhnÇÙD’¾‰_ø*Š!¹Í­É«ÑÄT25VJ¦¤‰ëV3§jŠ#1ð­ù6)!ŒZÕ!ñ© ´õ_®“Å\ƒŠLŠ1# `¢_',‘\,5˜uqÉ!ƒqjDsfÔL’ CÅ̽À㚪(@r3Àb´”t¥g¤»Qó Üiž‹½ +Ì…,Iã‘#pëqµÃcYôc–Z¬ŠQÀ±Õ‹³$u\,åÛdŽjjŒn%¥©ç\Þ?MZ~­‚ƒSYuzñ:Å?£¾ŠKrVdÅgiK)ÌÊd+„§Ž"Z¸íÿgï; £¬¶ýï{÷^/–XEAT”‹døz!< ÐnI˜$c˜R(W±¡ÒY**ˆâP°,EQAIJPª`¡‰ +,@@ÿÿ½ÏùÚ$Af2™d&žß{W’¯œó;ûì³÷>å#¬†ÔÌV·‰µRÈ8 +Úëè؉-©šWÐ*„ M°fLÌuYP){½š1“CªoMm ÍÃVçß°+ªäXcH<€"C,qºåØHĨR@äF® +z ÚóÕ²’©è+Xs}ª8àÎ|{¯qÂ8à Kh´l•rétP®¡´)ÖJ]5ÝiÙHAP©j-TÑè¼ ®D°VÒýl.æS-'F1ç!8+ƒ‡¬»¨HÒÍ 4iÃcž@0½v;n³h­†ããZãpYÛ³A¡‘È7œÁðãtѱ +…ë¦ÐZ©c +QL³Bœ(úÌÉ[ºdè‚Ž‹$Í1†,Œ'+xuÙR0ÙÌ#k´¯½¢$'L!¨ðJ­µÂªf=Àž²6bh|—µ0K¥Ó:ù”†¹&ýZ~²WÃô>¨K££¥3͉*()¼=á®™ËØ òátÓÊŠ$\‘¨ÀP-ó~‰3ÃLÉœÍÃv%3&6Ò”¸yžçÌÑ…tf£­EËé¦S§kÔ'¶ËEŸªÉ浲ȫ†P­¥“˜A0KÀKÖP¦Òõ…˜F²ˆ¢G‹™,.I­ðUä_¤ÝlJÊÉÕi>¿7ø®pO½7xEeY^°µ+ó–Wúƒopóòz¯“l…Š+‹äWxÆ„ÐZÎ[êßnBÀlÝò<åÞeÞÑ•Þâüà­h•»D+ýðro°õ¤·Y=ó=µ.<ÿ'…¯Ù=rŒÓÞ´ kg—øO Š …¯ø"]Ðé3âµõ®g¾â`ëRRê-óT””]!û†z¯UjIeY¾·g™§t„/?øÆ +¡­°ó$—•–”û*Bè;‘(qœƒ-B‡nÞ»\ QJ,¬¡",Œ’&c!`ôÖˆ…€,ŒÊ0è1-öBÀ 3¶±ÞUærýýK|å,d1 ‹Y ÈbÀÆ€Ie`hSÖ/)\ÿRYÐ7j#Áx™…‚± +ÆK&ä]0BÛü‚ÁŸßs±Á'–Ý’Œ˜ÓPߺëz"°ÌSà« Þ^š—×{•‚n›X‰ÓƒW¶‚à•­ =Ô~%e¥#Jü%…ATÑÞ5^ëÆlZôÚ´F—{ >EÂlZ=Á¶FAð±EAC!dÞ¢Û†åÁŽ™Ú*êèòÜ4óÑÓÝCh‰(ï%Þ1/xW&Fì@Ћ3coÖ1越ÍYÇàu1d ÎæOëtdŠåùS1hcžïñß"ÆÕÑÜi¢~2¸ñ8yAkY¬ «Á×(Úó‚žœLá).öúS½~o~(I¶ê7Ö{%ƒžÌ«m%«ßØ`ÃQ7_y©ß“ï-òWôó”ÆÞ˜d~;•s¹ªýÈül³’Ÿ‚wlÍË£Ù¬D»É:É3&?´M Qlò‹<ð¨ WoÄ’'ž\â/)ëDõ¢Ñìíî•WtóŽñ§ÍXqÞͽ'Ú-[Ð)•˜±lA×(¹âhé}AsPQ¼5,i€Ö ÚŒÜUVRüz$æÜ÷Ý ¡Ñ¢üCbr£ûX5ú |H¬~½U–×Á2©‹z ±·¤2”:ýEUF«](Þë(h·£ñ|v'”>å6¬„O=£Ì[Ò·cÅ¢•qGìÙ´X=Vä.IIA|>nwé˜ç÷äJpQQI©'ßW1¾#çÁÊÎnzuýoRÀº6¶NR¥b¥Oõ@EŒ½.U{ýG \løŒÍIÊÐzó ØØ•ð”ŒMnŒ&/¹¤¨´¤ÜÊшÑböÆŽ¸h±íšú1¢ë9Ú¦êmõŸ# :fòÝuWe9´gqy…§8øNUí¾z¯bÐ{ÍÊ+Ëîòä{SC;Ï'à¦èm?jÜB«[À=, +k=;émà +±ZøëJÐ'®xýðKH©uÇõo_Ġͧ翾¢Ê¦…¬ëë½RdÔÜ!‚ äjuó‘6%”‰¬í|íFíBŠáÝ0ß/*}¿Fí5&ԛ_é÷” ¨ :Í+Dðçðš$tWZRì !©~côzéfYC³ªßȼ'æ=EÎ{bÎSÄœ§T£+Ç®÷Dã°™‚˜)¨…kÁ¼%Û[bYõP['è‘~TðaTC؃à+r‘ÝÃΊˆQ]‘‹,œpVDŠf/{ÔE®tV„o€Š„šVú±ÓSæ«Qä­~in,¡rí±ßW1Ðã»XʆÐBƒ·sQ>„_6„F[E¢|­U\ÆцFCqØÚxFÐØIU‡³6D}m vᣬ#nBb§I"WŽØS‹Z壣{piüßœ öÛ‘yÎ;Ö¾=Ûè?=Ë>ؽVž·>ŽWÓO–$Øf#?ßïÌËcÀNFûØÖn ⣺±gø‹Øçå¢ÑpüFiT¾o½nl ÛGŠÄ7š3Eâƒvh£ýP‘zIYÕsÔÿÖಱzGí[(ú§cçŠÀ½ïh78O +ˆRc5±¼šÁü>¤ô¿k£}±Ô£‚ÞFk]*¶=ðFiÅ3ïò–õð•E>/;ÓÑ‚+èÉ„ +Ožß;8´¬fÀ=õÞæäí1]Ö£²8ÿ?±gTܪ‹s1u‹IuëƒêÆ3ã£Ú–ÔÀ UH<„›½ÓÊ<ÅåwÿÅ‹èÑþZî*`I“†HšÔÆ;›*a”øÜ,sØ@d5^¢ßM-”ÔNgÙ2ÐZ”£aËÐh>c%s.9h/—Vû?!ø¸Ž;ê}Iì;Ð7ÎëÏ zÍUÔ~›«!¿h;Ö×W\à½ËWÂÑieÞR¯§¢[ðVçõ¿ÿÊ?Ö3þ"í0ÜVxÊBoéõõ^/àÔï ~ý § ÀWá|@jßÐë䋃¯W~~eQ¥ß¼/pK¬#Z Bèa Ò·ÊKý¾à›*ßãÏï‚#両þ׌7h;ôÐ|wRþ`U1ð®úß:týò¼…!xÜÆÕõß»\|‚À¹xþ˹à ð3ü›: +‹È˼E%3èNÍE‚Î@oÆß`1“§ØW‚=žØ¾~¿ŠÌÖ$‡[%ö©ÆàÛ‡}ª‘Í T«qÎ 4¦¨óÍ,9;T1í;êÏ*ÂN„b'B5ÒC‰÷‰Pµubi$ ñã]Í¡4v¦?jÕ´lî¹å`sÏlî9ȹçÐ>óÅæžÙÜ3›{®ß™6÷ÌæžÍ:5ÌÜ3Î<{‚ÎÕ±¹g6÷\ŽÎ> \BHN›ofóÍl¾¹NRÑFbóÍl¾9ò-2Þë÷—Œ ¶Mbõ;ÈAçêŒï2…üqÖj÷Õ¿C´yÁO=‡˜F­n÷D·IŒò!+įšÅʨêÇÚê~àŠ–Ñ‚¥àX +®¦š±\d†=™¥àb ŠWÌòpÑ•‡£ñOBa™×[œ¾˜7Æ8_aIÂ_‰ß[‘Pæ-H()ó_lFš%èX‚.ÌQ‚Î{ýðKHé9Çõ?ŠiAWÌó__QeÅE>yä´†æõ –ýéæ# + ¼n¦ SRŒÑ(ö:ØÚFŸˆjÔišÆ”˨Åçec%Ÿ‚$tGÏZ ^«ÝØëB­eÈYßê7²dNUgÉœº&Y2‡%sX2‡%sX2§Úˆ†©šÌ12;$§Ã’9%,™Ã’91“Ìi›ßØÖ%EQf*Õˆ“b75Õ(·7ÎC9j‘¸a¹¨FµŸ8jÏOˆò£9‚¯;š#ÊÖ=FûÑ¡.¡‹ú±³qËQËSÈ¢{õû*z|Kï³!´†PvºB¼"Q>„Ö*®aÃhC£¡Ž8±2‚²S­Õ©V!7+;ѪåhØ24š­{ç¦Vx*|£+ƒ&Ù¹O 1|îS~äìR½/oI­ðUä_dJÌy^æó‡0pO½×0?èÃØbf±dÐDqeÑ€ü +ϘËyKýGFî ×æyʽ=ʼ`s‹óÇ¿ $ð®(VÆçtëû§2¨‰¿‰/ø*½9ÈZ™oŠQ¡±¯^åÜAØSQ|;—D·¡¹«¬¤(x†\ÌÖ³uÅw¼ïºb¶¬8–‡àAÅúªb¶5‚yoZeY^¥´(§ùØ*º˜™º!vŠ‘dp-rû,ûç‰Ø´’â%Åùë—t«L‚ÈÔSYá)ô6‚oÁÇ \›`+q‘œ­£*㢼&Á'v"™ÃKÁ×d¬¯ „}ÆÕQ]£ÞP–ñ[—ÇRBç"ëHØùÄQ6™Q/ç7¯ÛgúÝ“ +‚¼ +bô +¾"Á] 1x5¦ƒQJÜ[qñž»½©aìõûF}¶Pà¾üŽcG„0óS^1>”ŠÒ«™‘s±jc<9)ä3…bòä¤P+ù;8 ‚j@°$ý7hVþÛ 9„ªDy®ƒ¥YBÌv4+2°ÄǶð³É‡¿ØäCˆÞs†ͦ‰hõtؾÃzªÛwøgi¨}‡lÏaÌŒlëþ_|8:ôLr¬¬5©ÅÆÃhi”ˆïYŽ&‰\9ؤ:_‚Ô–±í Á°ôÂD¶N$*|7¶N$Z‡z¶N„­©ï¾Ì[’E‹5+PgëEbg®}ã6âx!Z§~R@±Ó.,Ž‹¥8.´C¢1Ž‹çå6cIECF¤QÜhl§L=×Hd;eœß–að\—(Žêb-ö‰í ˆÖX2 ÁW„e@b HŽ5+À2 ,Mve@X$æ2 ÖÁ>¹Y£)Ær~Æ_(Òh +á]ú#„ýÒÿí + +ÛÖÙ #ÔØ;F›käçhWyä`ÄÏžŽˆËTü“0‡íil›+‘(;R1’Q`У +‹YÈ¢@²(EQ½R;ö¢À «›A`}‚ˆ…, da kòµC Û$öæ¹ÜîÅV8ˆ"%¹ýKŠÂ#È¡“ñTœä-ô;ÿ׿”‘Óܧ+pŸÄkšêJÊ9¼š‡Çµ ¼êÉãû$·È)Š+)˜÷ r Í©*ª o†÷Ýš•”DÚ@S)áDŠâ8· Êšª;Ûd @Çé*2l5¹î–$QTœ"[3ª·´¯&Hö몽?ùB§‡Ðx¼ dð¼ ª«Jï’ÝЄ¾Vv‹¯!+¢äʦ — "¶žÀ» Dsó¼À+5Þ(Ãå¨Ûª"«n^ät¤*¨p¢ê’H‰j¾QáºFß(H@URpoÄkxEÄä¨ŠÛ †Ä­ +œ&CõÝ +ô0$š^e ~PuNUð^Ä’ã/+:ùA½ÎôÄqVQQG,²ep“*j TAÖQ¤òŠFÔT” UGR$ ꚤë"TD‚"*ªàç*šŒ5´Ef9†ÔP¶ != &: )üS§¸ÚþÛ•™ µ£Ö¶n‰Š@•9()”Œ¥.QñX,ÃB»9]†¿A“«*iN·¬Hhc%lz¬µ'?d +Ï‹"ÊT…Jâ±W‹ºŒxM— Š(h<½Ï®ÈPZü£¨r<<@‰&áý2¨:üº*K"Þªª‚-F‘.cÿÂI Íp»æá'…ô4QÒPq·•ãm‘àUàÏ¡ñEp¼KrËP0Å*Ž„vŸaØص²D`T‰à,aGÑÑzX• +9x*XO·®J +OhæQá6]HC(X`–“9Ín-¼ l¶@”N„F ‡fU¢mfRÒðÕdÔCƒt`ñd4…ðÔz+ô]|¸(ŠÐ³_A ÀêHäb"€Ç€®à凖̓¢9' ð¯æŠãR&0°À­êÖdúƒF€yNDÕ°ò–Ú“§2K„š©€.C³ˆ¤9€ Ç[@á8îTPïd7¯©X]Å‘Âü[@%\™x´Ž5‰ÇK90½Ðä*ù•64ŒB2Œ‰} Ï v%”HUf… $¢¡Õ:6ÞÕ µ”ö;`DCM,rŠtIˆÞší¦D!xt;T$^-K”b§dèê².KMBƒª/4¶"C3X‚|°PGe- ,Ix .´ &ølÒœð¯$ð¨Ä°Š¼ JÅ#•ÒTIçP"«*ÒŽÖJàT[ €¹EUÓm!“žO’`L¥æI+¯Phñ\QÇ!ÆZè\.‹~T/ÔÞjM„m·Á '’ÆÖ‰P  /ЭH²LtUÝ'%tâ2Âã¡óð´ä:º ¤§s:OÇMQã x¼BªÎÙÚ@$Ø~X ‰·ePaI×ésðv¨/‡êFÞ¦:aW#í@Š.%}Ü2êÎKmCCúDÁ€!’¾A—G +‡rIÈK 8¨ø²a„¡¨`§xr‘B MˆÎ"$EÖ[†Ôˆš¾yu£Až„mÒ†àc‚:"A-\vSHnÔÑU½Á°ۥøª#(ïJ,…Á¯üï?qœ1òäÿ2ãÄ@÷AÀ96N­èÈFGÐ1h1e`B9â•Éº¨:ü+£«é:Èß©ÑQ4P=CŽ…̃Gg>ÀúÝ~ Üd áù¼@¢O¿h2ô)ûM–-5-Œ%²*`<¦z…òãÊãxe9 š¦L1ÚZ51”Àž¬‹öëMZ1º’)ŠÇÐE4b êj ³OšÂ?Éš®9*kJòãÌY"«æsª× kËEÏJ¬æ®v/Àá4L¡ˆ^ æòǥƵÉíXVœi“Ë© à]ù˜¨,.p•ð”z]E%ô¯mr!ÂÏu®ñ äo¦¢Û‰Â×Ô÷ðùü~oµP¾Ž½ð ç@Ay°a@Ž BïæÈÈQŸ&‚¥±d“_ %OBq•8I ˜‹£êº›(âuY$Q‡Šã |õ­`ŠAoÇÄ|ò:±¢›˜?h(0„ 68¢lñäA‘0 n.ÈDðfA¦ELH8è\<ƌĮÁ2©¦ì0¹O„ƒ›«ÁßÀñc "^)²¾žK…±KF•5+j +ÐååÜÄ°®*Pà)èN¡€ø& +öÊVoÄmdh÷oTYåpøÝÄOC/ §Ë“›Œãá9"p +nT‰Cg€Ç‰ÐpBÀR¹IH/B;É$J„9$0ºhd°EPi ý[xªˆ*á)HH óƨƒE€ð^DÐáSD'Û*®+š x™4ªŒEÂûtgdÒøÄ,‰$TP#r$Äqª•ÈQ#fë¼Í¸ÍÔO ®á »Xt¡R")“y• ½Ii)I™l ¯¸ 'Û’éèÏjDA,ÉÛHå4Žü,q(g¢N]Uýp$uš*ñ‘ +»$Tq9ežú ¢N†l@„Ê+­T¨Ã"CKaÇ€›èp+Ë$pÉ踣 WðO=1^. 4X„òß‹vÓ"_]5U' Æ,b,8è“hk;(ÖÝ +äh•—sšE5͉ñÆxE3:3¨ bð> žä}è€A$ÈÑXKE¼îx•§Ý•‡!†X¸OÅ@Ë ^ þ¡ + &uT\´0ªLyÓt7ñŠá. l Æ…Ø4Za)" :iYxŽ&Rô)b â55è¬Ñ  Ÿƒ=!´á4Ò„·(*:e"©r¯Ó¸/×ÑÑ üd¨ŠŠ6"µ€$*ê¦ qzQé$ªPDft^Y£V1^WŒq;«€[× ÷cË<˜ i@Ñ2zu·8‘˜3bHä9Cô>žxã("1½SâIn +LºH‚xh9¹ø’‘ +ÇKu’ë1 €È#-<ÆT&¥¥ ‹#MÍ8D˜m¦#ªCˆMÃÑŠÙ[^5Æ6|¾Hòû0H¨4Ä%VGUȈkÙ&´p"–ñÁ¨)©¼€IY4Œ¥€ãY<éú2Ò,©†¾£ß€"âH8…&ƒ\…·*˜\ÆøOÀd2¦R6®S µ†±*ž%ÂAÚ§ž…yŒj"Ñ+Q …Ž@s:ä˜ ¢£˜.ïFPˆ–â0&(41-vIä¬ç“d7Ó¤þ´‹ P’sC_G"c°€š‹Ö©$Wá­ª©8 ˆ “@:"6¡ˆzƒO#V”h PñVͤQ¿$ :ü¤($q€¸1oVn¬C­1z'.‹ˆét 0M€`²+ÚZ^tûpTÇnIJ¡GØU%Q3œ<š¨ÓkÄŽ<µ½ñÄÂdŠN\´%$”ÁQÑ!ÃÕ¸ +,3fEG˯Q»ÚŠm?ɵ5ÒS`È°§™1+Ø^TˆJF“ᎠÔ¢:£ƒq"Ê HºÖ×ôlŒ Ÿ"®ÁR㜠+ÒD28Äí$&_7$Õ­‡ŽV‡£[Ôè*m+$Î0[0 +c :u²ÑvDx³Uà!à3ˆ$º5s–`{ˆ‹AXÑqüøádHƒÐÈw€vpÉGhTÁP"Í' nð†Ú4èÌM»Y† -³Lû¼mËÀFazË!ƒÎ/“ì©õ0ÉH9ß)Ó´‹]2l6ZGLÈÉ(°®0*‡› ‘ Óµtq¼Â>¡ëÔ×àQ™Éx'c‚ÛÚÁPtžŽ`hìHGÂQ S·~ªƒG>NPÈä&µÐ"aÏ$­ ºƒü.‘PÙî¾È<²T´’ Ð1a„J‰óB{!¹ÉIÔº€õPÑÇ>A´û½ÂS7 +;B>N8’”\<†$„sÕ˜aæ´¡Š +IžC´E=.0Š"Oœw™ò~‘„7 ò*ðÀø£ùéؼ½4™XW°¸¢*q*£„Ñ+6ÀQŸ¯ ÉdB½…SðÕi¢Ï¥Î¯ÒñŽO…èP^œß%–]¢ö ‚ŽX2ÑáeäA›~F*ÔD +4â¦ÈT)±GèNˆ˜¬ Fš P™N•Ñ«%~ö]`LGÇGix†‘õqløȪ”%: +OÃ[h52*8±΄€Þ= #æïùq‚âšS}à\¡ahãÉP0¢ƒ _hãLÕЬ@ýM5Ö9£¿˜ŠNl>f21Äy}0-dæŒäÀ½Ä.&ò*Ö -Þ~y‰@mO‚{Õ)Ði|@f4©HÀ°D$Ý’sVPúI’äŽÈ,í|¦ˆ'Õ’X;~³EаhÇü¶ˆS¨ÿÏ3àÏ‘`C Á™€´á€HÒ"& PÛýq’ak0Q “I:Q©R&q<çÀ¤A#OSøþB2™ePÑ‹“Dûw•b΂[!Wµúâ,1¡v,U-ƒ W'~e3 #ñ*öEY·EP™.Ǩ« #³Nۓǹ,T@Ñ ̱@ ®JÔD×U~'F„h‡F†PƒIТa¬"¡ÿŒ£2G~œHµ˜=á¨#@FZ´æÆï`Äqbo0¯ÐhbI‘©ÉÑpšga0v&N˜`’hÄÀ,"&š J!É!ø— ;‚¡S` ÇALizòV“Ñ ¹M¦o{@¬7üN&1¡Ûª†£6Ø(츤\Pnb 7ÉèC9IßA>éL#0„8OJ¡Ó€V “†ø»ŽÉìè4¾Ó9ê•‚„– Ÿ¬="é=ëшQ¬§à¡ø&ÞñÍÒ`¢ ç’BãwI'3²D@ˆgC£Y’"D·n&]sø¯dºHñ$…vL” Ä‡‘`Q2ú¶¤)ÉòCÑ‘®& Ä''­J…)f²rÐtÀFˆº ¸Ù“jÞ…Ÿ,œª“±ÞEžB¯«ÀëÊ+©¬()˜£ÿ×®’,é ÓdAÎrq®Bðt™³Áhê‹ÐNáL0F›¬œÄ|%YŒº‰ÿáÚQâò   +—­bp¦ðÄ"o0oà8š¥£™AžøJó±YO<ùÔS³gÏ™3ç醼ÎìÙO=ùĬÇ>uÒÄûÆ—û †쮶»¡ 3nh§v럙[XT6æî{xè‘IS¦N›>}ÆŒ™€GMÌœ9cúÔ)“~hâƒ>Pk<8ñ¡‡'M™6}†óÑAâ1Äã#«sæÎ[ðü¢—,]öò+ËW¬Xñ*beÀ¼Ê°ü•——-}iñ Ï=;gÖôGî­™3(Y¸™x×ÞÄ%öê-{ßÃSgΚýô³ó,|þ…-Z¼xñ‹6/^ôÂóÏ-˜?oÞ³a`ÞüÏ-„‡<úâxÉÀ’%KÕå+V®~ýÍ·ßy÷½÷?X·nýúðúõë×­ûàýµï¼ýÆêËÍjÆı£†õÕn»¾â¥÷²{'Í|êÙ…/.}åÕU¯½þÆ›o½ýöš5kÞq`Íš·ßzó7^ý5ÄêZïƒGó«<úbx×ÄÚµï!«nØøñ§›>ß¼eë¶íÛwìØñ%ÁW új(Ãöm[·lþü³?|Ík¯,z汉•Þ´.m¯D†ãnï4À3úÞ©OÎ[üòª7ßyo݇müäÓO?Û´iÓçØ´é³Ï>ýô“O>ŸTyô¡`óæÍ[Õ_~ýÍÎÝßîÙ»oÿþ¾|ß €8°ßÞ=»¿ùjÛ¯[³òÅgfÜW”Õ­ýÕÈðUíûÆO~ò¹e«×|ðѧ_lÝþåWßìܹk×îÝ»¿ ÀîÝ»víÚ ø¦Ö؉®þä‹cÅÞ½ûöí?ðÝ÷?üxðÐá#Gúéرc?üÒ` ¯?v짣GüáÀÞ;¾øèÝ•‹f?R1¼w‡k‘á«ã»+}ðñË^oãçÛ¾Þµg߬ÀÁƒ‡::HðcmAî>TíÉÁàÁQdøüõø‰'O:}úô'~«W8^ 9uòį?ÿtèû=_oþhÍ+ógÜ]"\‡ _Ó¡÷ðÊÉO¿ôÚûŸlýzÏ=øõøq¨C5·ñkè0o­áÁ‚“NœBV‘ɳgÏ;þüïQƒóçÏýíôÉ_úqßן¯{mѬû|¤¦Èðµ|JÁÝ3¬x÷ã­;÷<úóñ“§h Îb%q¶®PõÁÁâüyÊê€ÿuøã÷ógÏœ8öãží¯Y:g¢?Un† _'ö÷Ý÷Äâ××oþæÀ¡ŸOœþíÜyZƒ?ªVã:ECÑYüqþ̉£ß}³é½åÏ>R’¦†›JG=8{éšwì=øóÉßÎÿÞHë^Oøãüé_~»eÝÊùSFÖš#ÃÍäÔ¢‡ç.ïóßÿtâ·ó ]˜ÇgOÙ·}ÃkÏM-Ë0VÒJ&Í{uÝ–oþr†>ÎúéÀ—_~Z¹Åpzéäù«>ܶïȉ³ÌB„ó§}÷ÕÇoy{É“÷öãM†ÕÁeÓžó“o~ø…MÔ…ƒ?þøýüo'>¸gÛGo,ž5Á›â`xôÔ…o|üÕ÷?³i¤`­Ç½ÐÊlçÈ +í_عyÝêç½;¿/w­Á0.«zýüÄÒ—6¥„·³g«ï*0vœ¢8yòÄñ_ŽþþÛŸ®}uÁôqyÆ6ºøròüÕnÿ‹. ¬¶vüwƒÙßÎÍ'èŽ +羘ŸÝ1?Ž9|è‡ß~µyÃÛ/?;uÌð^îk †å´âIóV®ÛºçЯgÎ7>ŠÍntåàØþ@U•0{ü×_È£C‡ÈΠææ.Šˆýû÷ï3±wÏ·;¿Üüñ{¯½8ç‘òìñéE?³üý/výpìäoçéúÿ Ÿ:ß%p3ÖÞJ)òFXÞ€ê[€ˆ²þL·nýøýwû÷íùv7nqíj_¬]Š;(¶oß¾mÛ¶­ˆmÛà—­›7müà­å Ÿ˜X:´;ÝNG·Lœóò»Ÿ}µÿð/'Ïœµšµëcîs:K·ÂkÏl;w¦Žpú´ÃB¢umÄ oЗ¨º‰Í± õ»Èì®o¾Ú±mËæÏ57nÜøÑGѶd¯-î¶]÷Áï>ø`ý‡àëÞ{kåKÏμ¯hHò&ÃâßO-ykã¶Ýßùùø £u¬tßng;}ú v ‡;…½ÑÐœZí¬ÇŽÙ9= ½œ²¶oïÞ½{LØû0ÉNLk/&¨é—;¶mÝüùgŸlüpÝûkßYóö[o½ùæ¸á·¯^µÊØ/ŽÆW,_þÊ+/¿üò²—_^þêª×ß„K_{uéÂÙSî98±íU”áë„þ#îµèµuŸµç»ƒ‡©É†b4O‡‡È–Ìc?ÿzœ2}ÆÐìê[ºªvÎèoªÍŽ×j8pÀ²@)ts l<Þ²y³½‡×ÜKLtµ”è)hé†ׯ£»À_]¾lÉ‹¸eþù… >X°`þ¼gŸyf®yèÁœÙ³g?õÔ“O<1ë‰'fÏÿü‹K—½¼ôÅ…s{hŒ7­ËW ó)÷<úÜ«ïnÜòÕî½ûéÝ@ëãÝ;»k÷·ßîÝ·ÿ»ïß¼uûŽ/¿BíÞI7†_ÔСÛNíÜG~ð±s5¼èâ0Na°Í¢+,¹léK/¾°pÁ³OÏ~ò‰Y?ö˜q‰3¦OŸ6eò#?ôÐC'N|'¹ÿ¾{'ÜÌ–•Œôz²‡wƒ§Ò©©¤ôîžLâ1OQêÔ)AWwBŸÌ‚Òq÷?ùÄãÍœ>呉÷M¸{ÜØ1cè‰:&ÊËA?K‹Gù +½Þ‚‚‚|rÄègnΰ¬ÌôAýz&vî¨kªª* ‰¼»­ëÆV-[:kÑüºËÿÖôÎÎý†({Ï}÷ÞSYœŸÑS¹Å`øêö݇ß7ãéç—.mxeÉ Àü<ö¨Ãú8¢ixHÍ£ÍzrÎ3ó.B¦W¬\¹ +è0µ¼FC1µsÀì ÏU·sÁc2Á$Ð>Ã,:6 +0‘c*ñt£¼Üì¡YYx&”… ¨gꀔ^Ý»%''è1Q ˜:êŠè¾ý¦–ä µæÍ›hÚôÚ«šü­fÄݦõì9º¢²¼Ä—›Ö]r]n0|gr樻'Ïzfá¢Å‹ž{ö©™“œ0~LeyY±>Äþ˜ ¿]VV^9fÜÝ÷>øÈ”Àôì9OÏ}æÙgÑŽÍ·±`©g& ;÷ô´s3§9í\Õ°Š~Ð?Ë,V;¥ èš•98µ¯¤.:â±f¨¨²Èµk}Ó­ìsΈ^¶hÞìº ry\ÑZêžšíYä÷åg H2Žù!Gx¤Ž™8ý‰9sçÎ~|êƒãJ +=ÙYC }MëãÊÎÈ’5,'¯Ð_ZLO¸÷¾ûxŒØD‚‡jýS€+é^ÅÎ…†ÔÔAÄ,&OpÒ\'äU‘:ÜqsË®7Îæ @³f×]]''õ!.k-w˜5¼  /gpJî&ƒá+ïè2(ô½Lô±SëÏÔ3±1?Še~,P‘ªjzÇ„ÎI½û§ed ËÎ>Ü“——(ø3äCú–›hçjxQPj0‹UKlQm¬-®n£t1,'{È ÞÜ7MwåíäÁ 8鑉÷Œ.ÜM¸õF0?NëSôÌÆë[ÞÜŽ“5`ºK㼺‹ƒÚ9ЭŽZv.Dü™Ylü³y[­{ÿôŒŒôþ=:¶oe0צcÊ0_ùø{ï›0¶8/µË×ýÀ&W7mÞ‚œíé8xñ°¯°ìÜ•ÑDNÝà_-ã;öè7hЀ>Éê7õƒ!°ÏoqÅرEyé‰í®nØ2Æ8âZ {öí—Ò³«ÜÖdøŠ[Õ^ž‘¥e£‹ +†ô–nhØÆ:þÙ¢šØ³w¯n¥;®7¾Eî‘–S8ªhTaö Äø분1+oá’»wOJnoa0|yk©Û aù#|…žÌ¾ w\Õ°Œy\vS¼Ú%)¹«Î·iþ/*ºÜ%&2¼À›—ÖS5³ µÄ¥-ÛÉ ]»vÖ:Üf1|³Ø/3Ç“—›5°›ÔúŠ†-`Ì£É wzç. ŠûÖf×ÝÌwM4'gØà”DáfÆpxøW‹6œÒ1A—âoiz Ã]ú¤eegMOéÊßÌ>ÑþÕü¶²ÞQ“Ú·dxȰ쬴¾Œá°ñ¯æ·â‡ŠUÑÉp‡Î}R‡ FfV"<ü«Ù­ñ0,ÜÙúº* gg¥ƒv1_"<ü«Ù-ñ’ª)®* ƒÜ/Iºåʆ-`Ì«2ÌuÆ‘.gXFÿnÊíMÿñçO`øs\Òì–ö„ávN†Ñ—ÈÉÍÎØCowý¿¶„±Ê°ªð ƒ?œ;<'+µWB|«Æ—´­W†U®Æð°ážÜ¡é}:w¸©Îf­þš¸¤i cÔœíÉódf!GØ@†…* c^"#'/?/'³’Àá¡f†ûeää 2 YjÍ —4m]a!±fnA¡×3tPwùÆpX¨™á¤þC†{Gæ Kí!ß‚º°P×»„¤YžB߈ü촞ʭŒá°P#Ãbò€¬¼Â‘¾‚œôž*c8<Ø ßìdxàм#GzsÓ{©·1†ÃBÍ w84ß7jdaîàÞc8<ÔÈ0ÎæŒô1<f“Ía¡&†[ ûGxÃaã §f{Gù}žŒ>zÆpX¨™áî„á"_^&c8\\ˆáï¨bÆp] F†e`¸Ð_\42/³/c8LØ™Ÿ†Óáâ‘yCÃá3ðÕÆÕ­þ’â‘ùCúvd ‡‡Ugø +ÊpQIñ(Æpø sÍy ÂpîÆpÝ Ió[«1|‹Áp c¸ФÅmnIe G ÿײM\óS3ÃY)Œáðð«o¼ƒ“µj §Ã¥”áÛÃáàŸ×ÜÔ–1IüóÚ›ÛñŠ¦3†#…K®súî\·f0\\Zâg ‡ `øNA­Ê°Â®3˜ «Œáá’ëZ×Ìðpc¸NpIS“á;Ãc8Ò@†Åê ÷d ×(Ãkf¸”1>Ñc8Ò` GŒáHƒ1i0†# Æp¤ÁŽ4Ñc8Ò` GŒáHƒ1i0†# Æp¤ÁŽ4Ñc8Ò` GŒáHƒ1i0†# Æp¤ÁŽ4цÁpGÆp¤ÀŽ4Ñc8Ò` GŒáHHa GŒáHƒ1i0†# Æp¤AÖÑc8Ò` GŒáHÃbXd G&ÚhŸŽ1\—  '0†#ÉÚ- ³¯öÔ €á„ý¥L馷ou)2†ë—ÞØ¡SÏþ©iƒúuïÏŽ.½©C§^ÒÒÓú÷ìÔá¦Ë¨}°qÙM\çÞÓ3ÒöîÌß|92†ë—ÝÌué3(#3#µo¢xË•TX…aö­ÛppÙÍ|×¾©™YCÒû%+·7ýš ³¯ ×.»YHLIÏ64c`ýÎëéDû"vâ2—ÔoðÐìì!©½;¹[Q‡˜1\‡¸Ü%&õÏÈÎÍšÞ·+g8ÃÅŒá°qyk1yÀ';£_’à2nÍ®3\ÞZê60kx^^îÉbkꮆs +ý%Å#Ãáâò[äz + +oîà^ÚmUöû<}ôÛÃaî58·päÈÂá½5ƒKt0R³ FùGxl)C­@^8jÔ‡¶"ÆŒôAx¿¢ Ó¸â6­wÆðÈ°mq/w!Ãù¾Q£ +‡Û¶ƒ¡V {FøýÎ1 BéäCá‘Þ\{üc¨âÃ>dØŽ-(Ãy#Fú¼9é=Ãaî“™ç+*rÆÇÈð€,O¡oDAvZ…1ânÓá‘U’ ñxGæC¤gÆÒ µ‚“akFî²›…¤þC†z1[!µf ‡¸6„áââQùY†ùÄ~™¹ùÞ‚áYvÆ¡V†ûÉG† îš’‘“—Ÿ—›ÙßÊ3Ô +”áQU¾ œíÉódN±f>j…†,†¹.}Ó‡æÏšÖ§s‡/màBÆ4L†KîйOZVNnöA½Ú› j‹a¿“á;tî:dXöÐŒݵv-.iàBÆ4âÚtD†K¾ôFw§^ƒ2‡ËJï—,·¹ö \Șa¸€0<´Ÿƒá„ž3²²2SûtZ³äe8@†³ª1Ü +ž9dðÀÞ¹›™;l†½È0]xi«øŽ=ú§ed¤è™à¾‘9káà‚ wï—6xpZ¿öºm†Z2ì¯Êp{½{¿ÔôôÔ”îzû–ŒápP3Ã-ÛëÝR¥§JéfïŸa¨jd¸ 2ÜwPZÚÀ¾ÉŒá0 §ÔÄ°–Üw`ZêÀ>Éö.;†Zá ߉ §¦蓤¶c ‡… 3Ügc¸.ðg 4 w’ÂbXMB†û;÷“3Ô +&Ã¥ŒááOîÏ® \˜áÞÃmÃaáOØ¿0|=c8ÔÌð Œá:ß1<1\` G`¸e¸c8l\”a™1Ñc8Ò` GŒáHƒ1i0†# Æp¤ÁŽ4.ÆpWÆp˜` GŒáHƒ1i0†# Æp¤ÁŽ4Ñc8Ò` GÃEŒáÈÀ`¸”1)0†# Æp¤ÁŽ4Ñc8Ò¸ÃlŽ#\0†# Æp¤ÁŽ4ÑaØËŽцÍpá0Æp$€ õQ†;1†ëq·;¾ƒíã¨s8îo3|'c¸®w{axt ³Ý^áî ]ÌŽ jf˜ík®;† ‹ÃÕÀð0`¸¬xDv5†Ùéuƒá²²’ª ³3RêÀpÿa#JÃ:3†ëWÞÞ©öˆ’òò_NÃÉŒáºÁ•wþÒòòRd¸màykì4°:À•wtã+­¨=2w`U†Ù‰vu`x`îÈÑ••£GåìÒö*"d§2Ö!®jÛeÐðQecÆ”>Èf¸½Ö,Z7¸ª]×TOQÅرå~Oj×vÃxþ°q:.c8,\Õ.1-¯¸rüøÊâ¼4“auðàÔ”n:û¤Lx¸&¾[faÙø{'Œ]08éΫ‰Ðú–AZ¿îz{vÒ~X¸¶CÏ¡£*'ÜÿÝe…Éí †o¤ßãÈLïϾe.š +}s‹Ç?0q⽕¾ÌnñÃz 8í±ÇgN¾·4§W‡k‰”|Årð°ÜáÙ™ýÙgBÃÃM]³JîŸ6köì'¦?P6¼g2,$öÏÌÉË÷ Mí¡ÜʾíU{´è˜î¿wúSÏΟ÷ôcWæ¥×1ùæx–Ç;Â;<£oÂíWÕ[yš\Ý´Yó-®ÜP§À'¶hѼÙuWGʹorõuFÑÉ [¶lÕê&×­í3‹î›ñôs‹_\4ÿ©)ã¼ýDƒáÖR÷ÔlïHÿ(oöÀÄøkÃÿ¥H]s(Á€kÙªu;^VõŽ :uFt©+àÃ:uJ訫2ßÎucKƒðº-úÍí8É,:¼±kbbR·½ûeT>ôø¼_^±bÙ¢¹3&Œ 5%|\q‹Òsðp_ÉèRÁÞÒ a´%4fËV7¶†÷+ª¦izMèHèÔ¹KR÷¾Ó2†d –“““K1<<OÉÉÉ6,kHFÚ€>Ý»t/­±4¡‹eOìÖg@êà̬¡Pt,³'/¿ Ðç=nâ̹‹^Yýæ[o¬Z¶àñûG ’›Q†oÕzg—[^”—žØîÏ 12ÚŒj'j·%ÕÁ®]Iköì; 5=##3sH ÈÊÊŠ%žW8²xtŘqãï¾çž &Ükà¾ÚÃ|Ä„ ÷Üs÷ø±•å£‹|Þ¼á@÷СðÚ¬šŠ +²Œ²çz +|E¥å•cÇaÑ¡Ä÷?ðàć'O{ô©ù/.ãÖ­{ïíW=9±(M¡ Çݦ§ óA,}ß„1ÅžAn®YKAA[¹ÚueTOЊmIÔ0;‡´åp'//ß;bTQéèòòŠŠÊj;víÞû'>2eúÌÇf=ñäSOÍž=ðt]4{öSO>ñø£3¦M~øÁû'ÛãÆŽÅ7©^ `”}üÝî{àáÉSg<úø¬'Ÿ‚‚?=÷™gçÍîùÅKW¼¶æƒ>Ý´éÓÞ}ÉÓ” Öšqz4·hìý=òȃ÷”¤wm×ú¦V-i§wZœ.]“º÷é?(m0j'´fv¶åèr¢†Pûî¿ÿþ°9'M™:}ÆŒ™3­ŠÇ?Ž¬Î™;oÁÂE/.YºìåW–/_±âUŠ•a>cŊ导¼léK‹_X8ÿÙ¹s€íY?þ8ywµ»ì³Ÿ~fþs/,~i }yÕê×ÞxóíwßÿðãM[¶ùÕ—Û>ÿhÍ+ó¦”eèÃwt”7zÂ#Ó}tÆ”ÇùsöêÖ«3ZñÄî ¥¦Åñäy}þâÒÑeå•c 1ïÁ¶œFÔ”ðé§çÎûÌ3Ïb{.|þ…E‹¿ˆ—(–,YŠ¬®X¹úõ7ß~çÝ÷Þ‡^µ~ý‡€ u|Ðúõë>xÿ½w×¼õÆk«^]l/]²d‰ñþ—^¬ʾüÕU¯½ñÖšw×¾÷Á:(ø†6~üɧŸ}¾yÛŽ¯wíÙ·ßžÛ?{åsÓ*†tlA¾ªm×ôÂʧ?1gîÜÙ³¦M?z$X¯\~†çyG‚–‹çþš4yê´é3f>úvhË…/,^²”4%¶åªÕ«W¿öÚëo¼ùÖÛo¯YóN Þ¥X»ö=dõà ?þtÓç›·lݶmûŽ;¾¤ø*,Ðgìر}û¶­[¾øü³O>þhaû½µk×¾kâÐQ¥ìmüä³M_lÞºmûöP䯿ٹk÷·{÷÷ÃÁÃGŽúaÿÎ-¾þÂÌ1Y ”á«ïLÊy÷äYÏ@§]üüü9O{dâý÷Âh¤Þÿ h©iqÀàÌ[ðÜÂ-ZüâKÈë +lKTCT >úè£7~ úégŸmÚô¹‰/°yó`JåÚýíž½ûöï?pà;À÷u|Ôû÷íÝóí®_õåd{ËæÍ›¿fÙS¤‹åþá‡:|äèO?ÿòëñãÇ9úãÞ¿µø±±C®§ ·ï–U Žò KW¬ZµjÅË/½°¬×ì§`š3÷YÔRËâ¬Zmèç;ÐEÞ‡¶üø“ψaØ–€o¾ùfçÎ]»v¾­Š={÷îÛ%ûÞ(×ÑŸŽ;ö3Á/uò cÇ~:zôÈáCÂí}{÷î¥/ßS­PA¢Æ²ÿ„%ÿå—_=~âÄÉS§ÏüöÛÙßÎœúõȯ?{gɬñÙ(Ã×Ä÷Ì=qÖ‚e«Þuóõæë«V®XŽX±Ò¶8`rˆÅ“úùðŠm¹sQClJhKhMÀÁƒ×€# ‹ö -שӀ3Uð[ȸžxêÔÉÇýõdè>JÞ|¤¦2 »ì?“²Ÿ$e'…={öì¹sçÏÿþûü~þì©ŸÜõùÚeOÜÝ™2|m‡^Ã+'ÍY¼rͺàjl"ÖëÃõdüÙðÑÇ`ÿ°Ôt4t7öî½û°-M‰‰8Ž8Q'mœ¢%Âa¹ `uxì¹sgÏ"óÈ6ðíDÕÂ]5–ýåôw¤ðÿ,œ?óë¡o7¿ÿòS÷ät¦áÛµ\Ÿ¼qÓæ-{sݧ[vƒß|C¬ÆŸ¯Ðˆï!}ãQSTQÐÏ#È«Ñ–VSRœ5pî8ž²X®_`°M¯Sö?Ξ8²wë¯ÌžÛ…2|ŸRpÏ£ _]ûÉÖoöÀxøÃ8\8p€XqbpŽÐ~ý3QS¢ ¤‹«f÷°ÚÒ‰ˆò½8wêèþmë–Ͼ×bXè?â¾Y‹__ÿÅ×{8 šù ,È„££mqÎ:zÎì"]ÿçOý´ûús,†›ŠF>ðÔ’·?޾燣¿âhŒgΘÆÒ¶–mí çO;È°4pÔħ_~÷³¯ùõôÙs#ã3tü^•áfrjÑÃϬxóî>uöwÆg¸0¶GºfrZñ¤y+×oÝ{øøo¿7tñ€áýÛ×-jBŽá7SÒK&/X½aûþ£'Ï1 8Òmûà•'ï6cºæJzé”ç^ûèËïŽ:ßÐ¥k 8êè¾­ï/{bü0#/Ñ\þúûŸÏ0#Q8wòÈžÍk—<>6ËÈ^ÃeÓžó“o~ø…1\øã܉Ãß~ñ΋3+39ŽæZFÙôÞútç¿þÆÌpøøãìñC»>{{ÑôÑiòu&Ãå„჌áºÀ¿ýúãÎOÞX8¹xµÅðŒEo¶ëàñ³Œáðñûo¿üðõÆÕóòõiÛÄ`8“1\‡øýÌÏß}¹aåÜ +’i{`¸bÆâ5›vb ×Οþ ŽÙ†wiIn Ïd ×,w8»Ó ŒáHÀá_ÏŽÐþü­¢·` GèïÞ´fñŒò #à #c¸Î ÜõÙ[/L/¬:omÓ.Æp]€o>?mô`Åb˜Eu 8¾ùø…SKÓÅ­Œáºß½ñõ禔¤É&Ã*ËüÔ!~?ýów_}ôÚ‚ÉÅ©6ÃFöòÇ_Ø$RøÀ™æVÏŸTœ* 7SÒižå‡ëdµÄ‡+ç=R4ÈØ(ƒ3¡%Sž{mãWß;Íf‘Âƹ“G÷m[÷ê3ûš 7•Mš¿zÃŽ?±yº°ñÇÙ‡÷lù`Å܇F  †¯åŒzè™W×oÛwäs&ÂÅï¿ýzh÷ï½2çÁ‘ƒá«Ü}G<0ç•÷7{èW6Ô…‹ó§þaç¦w—Í~`DcÓíßšÜÞ#o“KßÙ´óûc§Ø‚‰ððǹ“?}÷õ§o/yâ¾Â~¼Áðßnìš3î±Åo~¼cÿáãgÎ3ŠÃÁù3ÇïÛþÑ‹ŸPЗ3w0_Ÿ0¤bÚs«ÖoÙýÃO'Îœc+×jßÏž<öÃîÍëW??s|^Ÿ&Ã͵Á¥“žyåÝO¿ÜûãOÇOývî¼¹Šµ¡ cøãüÙS¿ÞÿÕgkWÌŸ6fx/ãˆp×äA£xòÅ××þÕÞŽü|üäiºùã‚ûêçÍÅýõ°5¡¶ {dÎœüåðw»¶lxkéӓʳ{´7¾Nèç½gæ‚åk6|ñåîý?:zŒ.}¯ºK¤ápŠlP9í\0‘ý5µƒ±+çÌé“¿;ôÝî퟾·ê…'&–du3Ž[ÃÍH½‡WLš½èÕ5~¶õ«]{ö Û7œûµŽ4,ŽµvY۬ȱj›Äê§)p§Ó‰ã¿ü|ôÐûvnÿlÝ›ËæÍœ0*#±­yŠ±eqîâo¾÷á'ŸoÙŽÛ5qÓaÀf½Ä^²QÐÞ)ˆw~26š4(HÈ~½#‡ýøý½»¾Üòɺ·–?ÿÔ¤±ÞÔÎÆg‘þö·+ÛvIóVNœùôÂ¥¯¾¾fí¸m×±o¶v«†‡Í›­º¸Er7îåíºt³nƒ q`?n:ݳ{×7_nûâÓ×¾±|ÑÓÓï/Íí§ßfÕA˜5æÁ©³æ.X´w+›{¿«nþ®'¼[kÛë(q»Ÿ/ë;l@A¶mÛºeóç›>Ýøáï¼±ré§gNãÒK¶ÎýºÜ%v”ã+»ûÁÉ3rÙþ<îGÔ欀:…y잘`;@L ‡&4$° ë×áîÿµxØÂêW_~qá3OL{p¬?wPoؤU|Çžƒ²ò|%ã&ÜÿàÃLž2uÚôé3ðŽ*ãŒðÏÀ£3žšý4ÝÈnžúaûÑ`À2¬X¾ü•—_^¶ä¥Å/<7oî“M}hBŨáé½:Úg9ÿ«ùm|ÇäÞgåäŒé/*)-]VVŽ¨hxÐ`Èñ/ä0†™=nŸ\SGg×ÔúÀræÍ짞|ò‰Y=:cê䇘0¶Ì_0,­wgþ¶f— ÿóêVmâ5¡k·ž½ûö0055-=}ðà ™ <Æhè°ìáy…£ÌÓ—¬Ã—Â8z)LžÜ4n옊²ÒâQ…y9CRSº'w´ºêÿìÚntÝÚ¦íñ8^%YVÕ€ÐÉÑM]’{õ”NÏÄÉ ÿì°:yüXö°¡YC2§ ìß·gr]Œ¿­Õ5Mþn0ü¿ÿ¼ôŠ¸+®ˆ»êêk®½öº¦M›6k†G~EŒ³änhysÛ€ÓǺÐÈ ÎCô𠽎ºªH"ïnßö6WËfW^ò÷ÿ1þŸÿùûßÿ÷o1raÎq Ʊ„Í›7kzݵ×\}å—5ùçß/^†X@›Ü6mºtóTxâÚäfö‚ÿ´Iì-ç‚ì?žò +oúÃÿ:$–UtóåWøJŠ=eã]AÄ»:$•”ø]m{뮕ÿýïxW?Où¨»ÚÃàðÿéð?ÝÕöß®Ì |ü𸾬‚^d=!ÅW<Ê[`ÜI˜[åQœ‹wq.þ›9~é¿Œ„_ƺxÎÕÏ54›s€8ó?ðø§ N1^šnÜIÄã«þµMn%ü¯þ‡s €ÿJ®~äçB,*ºžÓ]¼*¹u^â]E •U·$£Ls‹š¦ºâeÅ­ Þ­È‚èŠçUÁ-k<Šd7/¼+n±âæË‚[”/äÝ'À3xxGn•è­ä'MÕtz/\ (½ƒ×TÙe 47ø%’ëwÚ¯ÐÝ‚"+.,…ªC!t7Ç벫z-ñ¶»Hë$–â? +ïÖuÌénYæ4¯nN%eæy£@/ê +ˆ,¦o“%7'p2qªF/a¡ ¼ìV(F¼oE¢[ST(2Þ,IªH/“x¨%Þ£rº!–x /ÕÜ’FÞ·ÃkD*uM¢%TtݺîÒ‹ª[eÈŽ*I.Ip«¢ù@^P]<–ѼUssºbƒgCa$.€††Úó-·² ë¬Kæ{¡Ù]šx|‰&º$¨†eæyh ZKÆj€Dq+àpÒ&•B™¬+ðnl:¨âyh1Yá©D„:ã£u§/ä¸ú°R´^&rØ>Pqh:¸±zÛâIy¤ùÛ¦{Š¼®Â2OÏ[\áRþM:R¼„Šv+ó¿IØeDP.Q íDlX#?i¨î<¾Þ¯c˪–M„2©àÃÂ-ºæÊ$½ HÔ8 õAÔÜŠ†E«ñŠ¦Ã…šâÒD¨•Ž}!) A/P@5T„Ø5ÞÍ+*Pí­êÐDÐ{UWQjŽGÕ€Û4è¹²t¡âsšà–D(œªÉœ[ä¡øI¡_Ñ5( +UU7)ÐÔ¤øwë“”„V)Ý°Ÿ5˜^•yè`,]‰•%.j®}ÿõþÛÕ!µ¢ÌW\h™Ó‚’PW`¼ç¤~-‰ƒ]KæàÖ–™u¶o1cÃÁ«]`­vŬ›íê[¯pˆlZ«sgÑ +£·ÈñUhµ…Žnè–É@ãÐ= ,y€^Q1/©Uh…¢hÔ1°n•jÝÃ9ˆµ…fB³Þö+,vì¢8UÖ*t€-3+g+¼EÝ/l‘ÃUãϤ¥ðœÀ¬-3k-À®Qª jœ$] •çÀk“íh/Ø@ôd^q<Ý–Ø”Ú2›Q‡Ì¨­ýt“» 6vYm6í™2»ÖæÓ‹Êê|™L‚o! R “¶Ì¬«-«‹NÞ`¤—%1It +áò&%°B€LGU×ÇÓm‰Í¤-³™tÈŒºÚO7ù°Ë`3i—ÕfÒ®‘)³km>Ý!±˜¬Î—É$ú«’Hú„M¥ChÖ–‡Æ8'#Ÿ!0Bë¶ÀbÎÙÄY"³fÖcÍÊ[/¶Y³ +g“fßY4l lƪñRÕ‡tf‹Œú™þ–QÓ%³3ý6‹0Óµ3¦ïg=ÐX„Y"›0KdÖËz¬YsëÅ6aVál¬â›"«‚æƒ-MX5^ª¹ŠÆ2£†¦[e0`z^e¦{fQfzp†Àtñ¬Ú‹2KdSf‰ÌšY5ën½Ø¦Ì*œM™U|K5­šO¶%6iÕ¹!I!Ó›q2fËLÆLwɤÌô©ì~iº^i–fÞcºpöSm‰Å›-³‰³eVý¬g[Xïwpg•ÒAžUëN«¶ÖÓ-‰ƒ½j<¥Ä%åÅÕ”ÿ–hþ[¬1ý FÌ<øU*AÀ™Œ¾D j¥¨{PASÓà&㌋‚™o¼.UÖU—>„Ì«B÷j }`y—*‰8Ç$bÖ˜e¨.§ÀÁýÀ¾ÆׂŽx‡ªBç9à) Œ4Xt^¹°xœ O®ñfÍëP5Uàe@Þ\¡U&ȲàRuIsCiI©±W'%ŵK»PŽgÉOœ9MØ»xŒ·¬Âœ(´ÄÉ~_i©¯¸°Š¸›¯Ü“ç7¯Îü?c¶ïÿ³÷åAZÙ¾ïÏ{uÚ;ñ^Ü;îÓÊzÅnk_C¯ŽËà†^6ñ“@´g>í+‹Šû2áŠÎŒ Š ê¸ +¸/ á.¸.(‚j +êËó;çdU}]_Ûê óâUΨ]¿ï—§²²²2Ož¡cÜöz±Ë¸ñ&ÚEÏÿIk{PAvWŸP·YÜ µÐQö­›šIÍ,˜†…CZ}Ïmõ}Ÿ,ãG4g¡ýSÿ›äS`þgþ¦BõC‰hiv{Ó“EIµ0¸:€·Jÿé×[ôé¿Í Aƒ¶Ðw«Mz:Êñß6ߺÿÀAƒ¶5Ì>[üº"‰°Í mÿ`þjÓþéîCF8êàQŽØoðNî–ͪp£Öà÷{;pÔ!‡|Ј!»'ý7mrDô÷‹wÛwÄA[æf͘›ôKÌÍ:xôèIföBfÿ+³_3憛eÆs£¿ÛgtG}ÚɧžvêÉÓê‡î¿ãÀòc‡=h—ãŽ9á¤SO?ý´“§N>òྲྀ·FŠåÚ:<êÈISgœvƧ͘6ù¨CöÞ~@9³O¼ç¨#'O³Ìƒ÷n"sþɞç™MenØ7Ýëà£~ŒLóDißÒܨÿö{rT]˜æÙGí™sƒþ;Ð1íœKg͹þ†ë¯¹ò’³§u¸sÿ²Ñeû>ö” .»úú¹so˜så̳N8rÄNýþµ„¹q¼ßø®3g^9ç†o4ÌKΚrÔÈÿêW&sãxÿ#N8Ë2gž5¥™ÌÍ·6!ÇìA&1§œuɬk¨LóD†ýn‹âýþkäQSÏ62ç2óLÃÜ~süö›xøѧþåº;<üØc>8ï¶9—œ2QamxØíœtö7ÝóÀ£ >öм[¯¹øä¨ú?ý«oÿÐã‹=þðüÛæ̜ќyâE×Ü6ÿab>4¿¹Ìœ}<ébeö$s#gÈ‘'_<綽9¤ “˜GÙ®¤ûM4¬sÆÌkoÏd^tÒ‘û2sË]Çü׿ßÿäó¯¼þÆk//Y8î%ÓÛ¥ì5üv §]yûÃÏ,}íÍ7_yÉãón¸xêØ7ïNüutÐñ^ïÂç^yã­·Þxå9#sæ´±;—Èüu<ªë¢ëç óåç6•¹éNc¦^|ü^È$æ̹ó=ÿÃesŒœ‚QH[ìrØôKn\ 2ͳ_Ñ9/£Ï>Çœ?÷ů¿ÿá'Ÿ|¼âÝWžš?ç쉃·*©À¾C&_ü÷G^xëƒ?ýô“•ï¾üä½×œÕQÆÜb× g\},[ùɪUŸ¬\öÊSóæœÝÙœù”2{¹ÕàŽ³®™÷T/dn5¸óì9óŸ~uÙ‡Ÿþp™†¹GkwæÖ{}ε ž~õ½LæÕgÅÌþç\~÷Óo¬üü«µk¿^½êýWÞ6³>¤_I9íÊy‹ßþø˯׮ûzõ§ï¿üø-OÒ·;±Ï>Ç^tËã//_µfíºuk׬ZþÊÂ[gN.“ÙgŸIßòø+Â4wo*³ß~õ™·.|¥2 ó’Û¾ºü³!óñ[/ž¼osÿã.½}Ñ«d2»å¢IÌÜæ széƒ/¢èÛ¯?}wɼ+¦PRƒ>õºG^]¹úa¾³øÞ˦ +a6åòyKÞ]Å1y¾ýzUS™†O¹"Ï$™——Ê8bÚ•ó—,ë…L0Ÿ[ö#e6aŽœ>kÁsË>Ë˼섡ýé·mGŸqã¢7?]+;àW¯|ùÁ«O:`›’ +lsÖÍO¾½j2W¼ôÀU'ŽظÍ'_óÐË+×|›É|¨\f7fs™æ=?üJodóÃ'“ž½„9è S®%™ßY™K­Ìö±çÜú̲/4¼ÐÚO^ìúSTRí‡ýùögßÿRc|ýñk^{JsÛƒO»áñ7ôô$³‘Ù“ÌÓoXøfïdž>×0×ý8™×•Ë<¤¹ÌíjçÝùÜZ·ß­ûìíE7ž~ð¶%¸ÝáçßõüŠŒ¹ê­…7œVÆl}æMO¾ó¹ ùôÍgo?Q.Ó0oÎ3IæÜ&2Ϻ¹Af“r62ÿ!2ÍÇ÷TƒL}öíÆ]p÷ +¿ÒŸ¾ýâݧn>st[I:ã.¼çÅŒùÍçïøê»ï—ÙÙ“Ìçz-ó¹ŸQfcµ¬Y¾ø¶R½¹]S™M +ö ÊüAØÞ¬Ï-¯À 34´Õ&£}EÃÖÊìÆlþýÓÊl¬–Ú +<ÿŸTæh½þ„Jþ™åŸÛÏ,³[¾ß¤ø)}`3™Ý˜_öºÃ_Óë=ˤjy©×£pŽÙ“zðcGážÔ˜2™Í^_ïev…¨Lzà×™fíª‘Ù\A-ѯšµÕ± úUÓ¹@7™ÍÛÕÏ,³t&R>•+219ó^ÏDz3g‘)R¯æ,ËžîÝ<èÉìåÜ*/ÓÌpósáæÕÒÈ\÷Ù[‹æ–N½çÂ=Tuÿ¦2{;kî½Ìse>ñÃeb,_¾æûo‡¡hÉrûØ 4ªÄøÓhi.³‘id>z]©é©»Ì7ÞpÚ¨Ÿ*³h·ùôÇȤ֙³’¥«üvÄÌ[×|øÊÃל|`‰I“­|ŸôÊÊW`~»¦©9·ÑrøÕG¯>2gF/îÞ£ÌÓ{-óô¦2·sæM‹ÞüDº¶o¾ü`éW•[¤‹ÌuŸ¿ÿü‚YÓG”[¤¯~𥫿ÉË~ûÙ{ÊW:,“¾]ûå‡oöË\ýÙ‡ï¼ððM³OÉÝe¾¹¤©LZ•ë•ÌŒieÞ 2ûî7éÂxöÕw?X¹rÅ{o¾¸èž«ÏêÜsë’ +ì;„™ï,_±bù»¯?ÿø]³Ïì\ÂÜ|× §Ï¾{á‹o¾·âÃUféÊlëŽ:óª»æ+W,çµ%Ü~Å©GìÞZÆì8óê{AæÊ–½ñüãwÎ:ýȲ5ÜÞËÜzÏγ¯¹wÑÒ·TæcÍdn½çDbªÌW—÷Ô#w_7sZMåm(1,|öù¥K_XüăwιhÊa»lÙøëè ãΟs×ÃO=·ôå—Y&ù”yì8ú„ ¯½ëá'—¼hd>»èþÛ®:ï¸Cv,ó"ØqŒaÞ ™/½¸äɇî¼æ‚®Ñ;•2{+s‹]ÆN½øº»Q™ÞqõùÇ.cn¹ËaÓ ÓÜ2ÞÛì?×fæf;Žš|Öß®»íÞûxðþùwÝ|Õŧ=rûMK*Ð0'ù×ën½gÁý÷ßwïí7κðäÎi³ïÆM;ÖwÎàÁ ™Í覧æSËvûN˜~Á¬ï˜wß÷/¸ç¶ë/ÿóÔ#öÕs_™'^8û¦;çßÿàƒ÷Ï»cî•çOŸ0¤³w2ÿ#ÚqÒEWådž7íˆR™ÿ ë<™˜,óÖë/?wÊø}ùô”ÿíì9öØ“ÏyÙ¬«®š}Å_/ cŠaŠÌsgL·¿0ÿ¥5|รë'L;ñħvÛ1vønÞoÿ¥»à ‰9ù„iÓ§O›rÜ1G:lWoË2æ¿öI÷9xŸŽ›zâI'±Ìa¿ß®¤Ò3l¿Ï!†9eÚ‰Ó§Pÿãï»CÿRïDÃÜ÷ Ç?uú‰'NŸrÜŸ&ŒÒœÙK™ ØaÈè#U¦aŽÚ;í[êI¸Ñ6;=ô(0ÌÉG;h¯D™lÚ–îºçaStøÐ}ïo³I™31·%æÐá#GŽ¶ÿ>hÎÜp³í~·ûÞûyÀ,3ø›²šþ_ÿëW›s?ºûˆaûíµûŽþÖåÞÄÜ2q÷½÷è‘ÙK™-[8™ÌýöÚmûöÍʾ“þ­_ø_~“d²ç®æ¯6Þrë~Üfà€þ}·Úâ7Md³oCý~æ&¿ícdn³ÍÀßÃla&Éìקuóo¾s`½3Ûƒøÿ±ùVüèû÷ÛzË=É«T¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©JUªR•ªT¥*U©J?*ýj“ßö°Í m·ÝvÐ6úþv“_5e¶lºU¿†Øf˜ýû|/sfö,s#–ÙÆ2·ÜxÃ^Éì7ßj“–¦D¾;={/™"³5Çü—ÛvØcȈƒ=zôÁ²Çm›nP*bƒÍœï?rÔ!cÆsßÝ·íÆÿRÊÜpsw§=•yÐð}÷hÎÜÂý¯=‡0j´ÈÜ-øëò3÷ïgŽ}ÈA#÷¼“»e“ŠùÕ^Ž¹ÿž½eî7xGg mûƒG9iêŒÓÎ8óŒÓNžrì„Q{F­eOû¯['ûŒéñÀæÌÿ,2ç\yÉÙS;Fì°?ìwßûÐãO<±è±î¾ñò³'Úa³’‚m¾ó¡S.¸ú¶,|òIbνìÌcLËVß=8iæµ·ƒùɼì¬cK™9ûuœréuwÜ÷è"ȼkîßÎøÓÈø7åÌ—\{û},R™gÓ”yÊ%Fæ# ŸXôøÃóo›3ó”Îaátgþ&6ñÔK¯£r.2Ì·]{É©‡E¥ÌáÄÌËœqÔŸ{ëŽ:cÖ,~ù·Þ~ëµ¥O?xËe§±{kIµl½×Äs®¹çñç^yóíwÞzíŧøûßN·ë–݉¿ŽGpñ ó=ÿê›ï¼óÖë9c|sÓvÉ÷=ñ«o½#2ÿzÒá¿ß¢sÁσ ™æî¿o*“˜o¾ýÖ¯<·pþÜK¦Ý¹D濯x)3ß"æ¢ù7^:ý°]š0ÿr•SdλaæÔ1;nB¿õÝoòÌ[}ñퟬúlÕGËßXüÀÜóþ´wŸ’ +ì7ôø¿Ü¾ð¥wW~ú™a¾ÿúâû¯ÿó÷Úºäv»M8óšyO½úÞ‡Äü˜dÞpޟʘ[ î<çÚϼöÞG«>ûœd>{ßõç½g9óì9óŸ~õ½>5L’yÿ åw'æµ ž¦»¯ZõÉÊe¯<5oÎÙƒ·êÎÜz¯£Ï5wϘOÏ¿öœ‰ew'æuTNf¾ûÊS÷^sVÇ­ôÛ€‘ÓgÍ_òÎÇ_~½nݺ¯>_ùú“wþåø¡ýK*pà']ußóË>]½vÝ7†¹âµ'î¸ô¸ýúu'öÙgÒÅ·.|eùgkÖ~ó•¹ ³ß~õKn_ôêŸ}µî‘y{¹LbÞ–c™wüå¸f2Á\³vݺµ«W½ÿòã·Îœ<¤o sÿã.½Ý2׬ZþÊÂÛ.©—Þ}ÿã/½ý‰×ò2o¹xÒ¾9èàS¯ôÕW󥵟¿ÿü}³¦XRÛrúÜÇ_ÿh0?{ï¹ùWN> ;qÀ°)WÌ[²lÕ×ß‚¹®¹Ì#¦]¹à¹÷>[û]NæÔ2™ÄœÿܲϾþΖsÁ¬i#zbâîß~ý黋ï½|Ê°2¦i; rÌUï.™wEù݉ù¼–ÓÈ|gñ½—M†fÖ6欛Ÿ|{Õ:.Øw_}øÊÃsf¸MI¶zö-O½û™2×|øòCל|@ s›O¾æ¡—W®ùVe~ÔLæ ƒfÌyø•×ñÛd™=”³Qæê/=xÕIe2»1W6»û ƒN¹ö‘¢Ì®:q$šDûa¾ýÙ÷¿Ô‡]ûé› o8mÔ ’ +l¯wÇ’å«3æ]jsÛƒO»áñ7>]«»®©LjÔ ßüT߉È<¨Tf#óÍÇ›Èl`~ýñk^wJ©ÌÆ»òz³'sUAæµ"s»ÃÏ¿ëùöÍ~óù;OÜtÆ!Û–Tàv‡_p÷ó+¾²ÌÏÞ^4÷ôƒK˜m£Ï¼éÉw>ÿæûeRó*ÏìA¦ùPdÞØTfž¹nÕ[ çžV*“™ßæîþÄåw§r¾›1Iæ "Ówá=/®üZúö‹eOß|Ö趒 +tÆ]tÏ‹æ˜ï¾¶g|c6°ËA§Ÿ}ñß®œ={Öe—œwêqã‡þnë2¯'0§uÑ_¯˜5늿Í몫f]Þ“ÌM“ýÆÕO=ï’ËfÍž}e27c楗Ï&™—þãe^f˜“ßoû­Ê¼³úî4âÈN?ß<ÑìÙWüõâ³O:fì¾Ñ¦üã¿m³Óб“º¦NŸ>mJýGŒÚ;í[êMGÌýí8öø©Ó¦Míš|ô¸ƒöJÊ™ÿºUô‡Æ]Ÿ2ýħ÷(sƒ>ñ4̦MŸ>õ„ždæàÇÿñÊœÖk™†9ñð‘{D}Ê= ì0dô‘:n +•³kRça#v·R½–-ÝöØwèð#G Ûo¯Ý¶o߬™?.˜ûì?|ĈáC‡ì¹ksæ÷ wÙsÈ°#¿Oæ†Ì:â{e2s¿õ “Ë9tÈàƒ¾Íü†[¶pvØ}oº»‘¹ïþËïó›\KmÙ´µOÿЯÏo{ò¶Ìýûm½eÌÛl«¾ýöF&˜½–9`=ÈD9û÷Ýj³&>ÃH-›ü¶O?T1KýX«T¥Ÿ=õÓ¯ßnßu줱-ýÆðó¯~;Çì¿Ç;iÜ1Ø×ü³ÝÎÇLÚuBmÒ„£'Ž=¦«u{¹­ÛírôÑ­wœ¶î>ùþ§«uŸ±ÇõŸ­Ûšgþ1ÿnþI[þgë#Iü ó/Ã?f“¬„½'L Ë\ìi.Ž4ǵºNë>­£qZ7ðÿmþeþsxK$7.9w5þÚoÌ6“Í¿Ú\?mw?m5ùí±ë¤­¸ÓžFý¸í^ì…æ//i}‡þ +‚vÇ+`¿Gþ0jO’(Îá{3ž¶G~dDn{¥ná^9LÊÅr3ÜHr¼Ø¹nþŠcƒçï™R:qÒš/—b,7{ÅYnöÌ™Œ¬n²{e˜–ë÷Mê—äN4ÿ8æuOg†çŸ³€Ûw›Ý+kY¹Ší({ŽB;ÊÙŠÈ*ÆÞ)åQ÷šmþNÚ°Ýsƒ¤ñ5d°­›0n‚ÐÏWaä´»iBb¿Ý‰Ün-Û·ØÖâÄ4ŸÂ°H¡þ-Z¨ý ÕÉnaë-+L¡æ³¢*>{H+ « +{›”¯øîuÙCÅ»~»ï¸Ý*>ƒsz{è{^¡í&í^R€Pßmwƒ¸[Å›B&iRø€ü¨Ûg–A…ªÏàBÝç`­•ì6¶î²›½-~Cï©š}8¶:²ï+ƒ +]g·úl^ùF|ä:ACÝg¨Ö‰µû ¿ ©8Ïo¼4m¨x×i£ ±×1­Óõ }qØ'¡åî!ùJÏÐ|çP©‹ìZaYIòž•:_ßÙÓ)šÕ€Þ!‡ä*»{ý5¯ëØi½ ±®3Tk"2m"õó5™æøuzí‘ÉÐP×釽ÄíQšx¹;dH¾®34_×9Tj"»ƒÖVV’|]g¥Î×uötŠf5 wÈ!¹ºî^=Œ°®×øøÞò•ƒµ.\ÓP<'__®cº¾°±¶Ó =Lý¤¡¶S£NMÒÆo'Còµ¡ùÚΡRÙ´¾²’äk;+u¾¶³§³ßEVz‹<”«ï’:ì¡ÂÃÀ Ô^· +Ï`[ᦵ¸žãækÜ4)?.@(€éZC§ð&ðLTÈ°»¦{ =?_ë9(_í98_ïyXk%»­»¬@…ªÏŠ_¨ûìA­€¬:ìmrP¾ò»×gC¨hŸ®ï™Ç7ƒ|gìûUÏ5cV;F-Uˆ(jõUz›Uuñœø ’‚µy74=ub%ZØ(!‰ŸÊ˜Å7‰H]I1êka*jò.*ò9¶²ÛXH ôûòzì¡ÒU»,Öy†j¨ +k«MUÝB«^\¨qU mVÕ²s5žA…·p±Æ-œU…½IVa¶0Å·/Ô¸}>›ßÖ½‰E +ÕÝ­{¡žk;Cµ>ToÕ*Sõ6_Ùª çëZfÍ'*u&ØùjV°PÉ +Ú§·²m Ù*Ø–µP¿ö‰lnûÔö)Ôo·:ë…Þ؃(jÛ›¨¦¶IŠ›¯_(»IP¨_Õ‰5ŸªÍ™ä É×°E UlQ[V¾­%[Šb#Öò{ }ª\§!Ožë3iè2êíû•íBg Ôƒ*£RQª±æêWUÛ\õªþ+*ÈVhäêÖ‚ùªµ >·­UcoŸ¯W[Ì|µÚGQÐ>¬ +·@¾N»ÕÓ÷ëÔ…*Í@yzÕ9¥vT1ÍU©j°¹*U5W Õƒ­Ð ÈU©óUjA}j+ZëÅÞ>_¥¶˜ù*µ¢ }Xn|•v«§^¨Î…:Í¡òüªZJý¨þ™«TUTs•ªÚ¬@ªîZ¡«T æ+Õ‚úÜV´ÖŒ½}¾Rm1ó•jÅ6qû´*=CòÕÚ½®z¡!ë5Cµ^UmÔŠUí2ߨ"š«Z«¯j>Ui3É’«Ý ÍWo†Ú°òm-ÙRjØ–·PÅö©lnûäö)Ôq·zk^ÇÛ5¾Äo cÆòŸwܺóäIG·²ñÂÿŒûÏÖí†N:fÂÄñÖ8øчC&ú!‡;î˜ú¸ÃÇì5®k “ŽÍ™ì݆4¹;¸v`çÁ®C‹C»:;º×Á˜]ÆŸ0QZ+xøú±“&3î?[œÖÉê\Ëdû?‡¬ÇNë®æŸÿn1 75ã^Øjþ0Êã?4_½õÐI"óGì˜8q:¦¦Í¡—個«nëžæòHCð½0i=®5(®=´™×ÈF£ FadÚp[趧iìZÈrÚÌ í„AÜÚRdZEÛÎnÚLGK‚0È ]*;Í È¤ió i†ÔÁrL“h`¥æNö–6ŸEj&ŸcºÙ0)²ÏÌ6HQJaÛ52Ã0´çdê3ö¼(B9nã#Ä ›QkÜî¡ë fKb‹HdÞZæH©ƒå¹¦úb£Eš±$zµ`Ž›ÐÜž8ne £LB "ðÒ(1mă aÛ*ƒö$/cY„YQjŠšÉY ¡%)Àœ ŽÃîœ6ÓR£t1ÇKãVÏT„+7sSÓÍ(Àr™l¾“pS £A“Z¦X±CªŽã¤d{" +MC¨q.£œ8©C-Ž^/V4—E8[™×´{,ã€r£@½ÅBm¦.ÓORÊ*ß4b3Þ³ô 5O¥gdÓ®ÑÃ(3’E˜ej.*²|š›—’Æd×4ZEJߨTp%\K!U¸å(PÇ3ê[$¦ºÍ$ÛMÌœ¯ óuyß|gžçg$‹°¤ IŒR×î##èµ`Žn`>%º¹ ®æ±=†)JøyVdº˜ˆ^¤ÏÏc€ÈI p.Y–#–ç„Ôƒ¡é>$#>B…,Ç<œ›¤¦EvA:-óv<L`4óå(P'Ž°ÀI|SnSå¦æƒ,“5d2à8uô¦ŠüØ|ƒ@ü4 2„³ùÔ—XAD QôysåJ>‹P>3wL Ë´SÏ÷øS6o*U!Ë¡, ¤73Xàç0B0˜G¢þœÇ4aøn¦¯ 8 0>ú‚,—E8››x‘ißI©ÒMœØBx0÷†f,NB¯Õæ²IòÚÓС×Ý‹Hfúa4 Ô[,d‰ïßδ¯P0 üÅkwnêËB ðÝð˜NÈ€öå’Ë"’ÍŒÀE–gFÓ(ð¶f¬óbW¯)!žßá™ÿ$®WftêŠ"À¼°„:r?•ê0¬èYˆeG0æ–òLmªFnxtÜ -PTà„0û›%$ AsY¤Ö2Ôè—©uú(û+ç5Òݤ xL_‡ëBµ‡…‡ÊBÊšEJ:fßœj#¦|þ#tÎF5“êoÌã:¦n;!˜Ëp0„{P*Õ ࢉeЋEãHcÓ*d9dÅ á\I¦W3­‚?ÉÖ‹hìñìWj8QDÖML3Žð±’Dc“œ U‡ã¥<Þ™¿Ã”:NÏ7ú„B15—ô£˜µ ,ÂÊ‹%,ÓÕQ®Už\Ó>,ÀJ˜ç»¤ôņS9 +°d7@/¤œˆ>ó «#sí'¶ÎXS1„B­ Ç"uf9IXd郅IF¢Ð„*ƒjä¢;lgm6˧—µÒ<+ …:WîÀq‚b¹ý k–aKÈåñáÓ•/uà;¤í%›u9(r-e Ã"“Ió]Ór†›eÊ V›R C9žÑ®RÅLEGKã\e‹–cùÙ ö ù_ÂîM‚Ô™EƒT +äQW´2̹‚¶8Ôkz>KVsQú(ŠÓ(ÍhÄ +V’žÊ\€ŽV¯E£ eŽ‘¸<xØÑ<ae +J…iòìÌ|ì +°d@æs3jOœˆzÉ=Šb@èk 0G÷EsdZRÖ•™aó¾ÀveF¿rRRžBÌã :™bV‹‚ºkLj‰Õf^D¶Åp3óUR÷ê@U0­ Šõšû¦[/0b¬\˜1‘â!E8õèE–8z*óa‘®å§¦šM]*`^$A4Tuã9eî·U€‘MÍ a òÉH¦¨!“LPLwI¶4K²Ý>i—ï3Ç"³M•ˆæÕðR¨÷ °l/ôÒîÓÌ<îN»~º‚o-3|?U½ù—TðÍdèôí4°“ ¶8)ä@¿sD£ICº­ä²HÍd ؼAfcßuhì0TC«Og$Eê-Ï’=óÎ\„Ì´!ðHƒR€8ÔùIw™pŒîCïÉÌðd"ÀY•5`z2“’‘›m<ÔZjs8u§®÷Œ²“fê¢Ô‘½®·(}6Hd2 ºMŸBKí1f½ ld.‚ÓM¢Ð³ ‡Ì89Èô­ ŠaÍ0ý¸ï&AÔZ j‡~ ÇÌeÅ,äAo¡oÖI}Ì Â + •+„U…)¨N±ÿ·å`e-Æ2T¹<š—…ÄFfµ£ˆ§ò¡+S;2cx~ò¤"i ú•Í¥=eÐa47ÁÐ|^vM¥MSß-0|>Ó(L<›Ãµ3œóx®Ïšk,s€.b`9MCà!ÝÔ$Ê,9ì5 5­ƒ Î\gFrhª•U«A`vË~BŸ¯eY¾&‘läô©Wuhè¡¥}òKSD¦Þ]3AÉc—›ŸtÌ4 Ó´NôºÖ’M Œve2vDl½4|’–(„™I!Ó{¢Öaò <(†œI2an“㸔-_,šIb^@PÓ‘„ÜÐ}òUŠ\×[ŒÂŸVv¨%$I]‹(Ã|©ôŒ¤vFj¹R(”²Ñdsé2RL€À¿hZ ‚)0Bg­Y,P£< [9-'‘¢M$¥É¨i%˜Lò5ea„¾õØE7búL=1×AäQoúlÞ4,'Š(ƒ>X'‰b&Þ~Š¤!ì¹0c^«×µ–®äžC‹C˜·0ÅuѾ…Çò£ö—­™/*–”bâxaž¡ŸR]-ŠXJGKw)ªÐsDBܘÍÇ!>peX N™ø+Í84®ÑûÁ{¢®Ë@ÊBéõ,Ç$‡»Kßt¤‰%&;õzM F¨¯E_F廳 ‰y!lkq°6C·æPeÐÔŸ»‘¡€ÉÐÂGÜN‹~«QT¼¾¬µ¤2¢6L‚†ÔÕBþ€~˜!´æ¢q'ÐÆŒ¾d4{I8øšÑµ§˜Ã¸öu¡©qöº”’{å¡oWˆü:x.¤o]‘Ü[7O¦þ|.2a2d43.O‘#oFj”î>ìnFR NœØç¶m9‰ƒ>D¿‡%~˜ZDTÌö˜Bƒ‰>…ëò+û\ZþN£Ü#¸¹9WŽÌèNJFœb½Š8¤~éø3ÃõŸª’’=Ã|ø^Q%uIïÁêÆ/jrŽÍ˜M Q2Eé$$Á\R'-æ“tüÀËMZ4O~Ò·ûiÄ*£K}`  +ÑyXÑ“…)ÍdŠH£¹7uÓ¢ù(`¦Ô5-­ÀIê”Æ5Íe‘e HéÀ +OÈQêÎsHÙa󢩺×YÉd2Í?Î •dÍ‹c[‰(!#ù鬠º¢U3ÃS Ë¡‰•çF˜Ç‘ß,,ÞŠµ‘ +á£wò‡-ü¦ßiE[!Ë!Œ’ŒžáÃæåg,Ÿ–²ièHÍì%1Û`â{ðô0-\¡Cþò¡±ô‡uÇ|¸§ŒSºŠÜžH¯È†¡@Í%]k+N›—-r°Â˜øFK`#¹\ûIÌxæž0  /)3ˆ—ÄY£7?ðpœli¡º¹môÊÉš.ˆ…U_ñæ¨`À è Z~”Õ2UO"ÌJhm:Áƹv‹á + „œ»qèÍ“OˆìÁ_ų©rðïÈLŠäªGËåðâ/ Z…¤Å +êÄqÑcç9bz3_¾nÍeSjWZ`føqeI\ß…2ò¦qWtàH{múží`¼° ¹®#ÏïXüeí\ý­ø @é2c˜³Z»´j±p+£²E¼lÂKpJ²ˆa9(ˆãçhÜŒCôÚP7`ÓÆ+S¤Ö’aôMG€¯ÆôüqJNDlcKXàÚ©‘C4—‘î,ü帼HÖ­$es¼Ô˜ÃúeAx,—?¯õ /¿‘Ë 3ÄAcO¾ˆ#v!…2’éŸÐù’ÝAÆ …ÚÄàc#Vƒ€µD4có:ì7@ÃbŒÅoÅØ3È}d,‰iäÄ2rÓÁ¶—æ ÖM‹ÁŠ”^“‘–ÇÁ‹x-ÍY3èu ¶þLÉØÎF’Ë…Š¸l —IU«æ° I ní ¥Œvr| ã^˜ŽlÊÐkšásOà°W#2›§õ2Ùcj'ráRŽˆÃsW3ΓYV |¿èï4ÄQÉ"a3?Ù7Ò€óäÃíÐc1¤<Ñë…°'SÛì5Ý™§mÏb•¡×?Y»#ýH&§9íŽÜ{Éð kw´$LÙ˜B~D“.°©3ñ±èÄ}°l#1jw¬×õF¸Ïâ óB—m +Ùƒ.g–dÈÿßKB‘åÐZ™x¶úØ$Ç£*ÀÀCž9’E˜åż`œ±Ì Kck`NSŒ8Òëç‰<¯Àˆ\vŒ"µDsÈ5ç0*S Ÿ7¨.T§ä;ÇŸŽ¨3Ê‚>Dv€.°Â!#$¦Ëh}ìsEÓY †\‘ÇÃ8¯\+G:8fŽWäøŽ‡êqaÁâÛ3F~²éS# Ò #–øaöò©Ñ¥¾^×'qÃ4k–c‘:Xa’“eŠ>Š3^¥`NaÍßc]W9 +ÇtùŽPI…L°w´ ǃ%‡! ÌË>»%f™¨å3 Ç£U qÛB·dû\À|_Ì*’ ·Ê>BÒØËÕròõã%fÖëX 9S´‰©mW‹…0ÊâÍhÀ–‘âvY4@`:ÆKü¨„cÞ®—°ší%앦L§yœÇMÙ¶Áļ<ÃLvé[pÅ©y,B¹ÈIc®e$Jé«3ƒ2 ð´‚ p.4Í<' endstream endobj 909 0 obj <>stream + |´2rðó²\‘l±Ÿfï‡XŠï‡|}£ #ß½,pÛIvdH¡-ÐÌ‹óïÐt¾QˆÑ+œ,J4T=cZ£Db†q?—Ë"ôô8VD]YÇíÑÌØË™ŠÊ±O®Œ4£MØgëü´iÜc`Iæ£ œ@•d‘:³<öÙVùwp÷ΦfªÓ™¥Ž›ay–ôÅöQ˜=øŒ¾GA +Ïg°$ÿÌ„xžû@$_p,I3¤†|4/²ŒÅÖ,Ò•rù‘|~àYNB/h.ªÑ3ƒ˜ñØ%“œ8œ(À^œ{j2ð‹Ár„Qh¯$F +žÆ€/Sz‹…ÚàfHJ[@'†Ë8«’ ¹ŽÓ-4âVK²I3ÏÅ–OK‰Q¾ä4ü¬äÂ(”Ü·_µ¾?Z±‰yÆäÃ%”i¾ï†9 3PÁDe´$j†6§"5d43Ó Ï"µîÄÂã‚)D¹7AkL8æ²ÈOwO5zO§«×žÇû3z©M®_}ND»a´"’ ê²Úhl:uþæiY3hÁ‰\‡³±aÚBmnľ +Ü]‡µ`Œ/¥ÞÉeGΨÍé5EÒ›é íC5mÍ12¤àþʉcDÈ1ä ÎHáï$I9p‘²hÚm¾Rs»ÈT¤|ßqˆ(E4°F~F²ß0HHÇðµP! +Ô¹s8êüŒd.”y]~‘Q|%—FWR° %ÅÍÎ* ã­kŸ!$‹ð§,œcÅ.Í4]>¤‡‰üÔ³åÐNrõà#RdZWªú¬°º§?‰OÃA7NÅ`ˆÒXÁÓÇb\pZû'Q²¹)5Mj-¢Æƒ—Ü™)x«Kþ>a’‡ ¹! j:ÓwiY2Èa({ Õñz‡^Ÿ5ä‚+@žcž“߃ —iÍeÎÔ2$b +ßßhµNârÇÆnfšË",Éwý°È +<óŽ¨ÿåÀs¼àjÊ••ÊíΡÏ7qy[€›h³ —"ž\p‘Í ùˆ. 6¬\ºZ·ÜîÈa—ü°Œh3´¤¨·X¨ ï)â| Ìý†áߦǮ¿\ÌÀAØ!†,‡> ØãÄ0IšaÄJÌ€®ÎÇXa&cfîa®&Ç¥ÐÈA/G¦ ¾?+¯ŠÑÍR¡Ìèð#EIšZ †™Ùc‘#ÏO®Rèp%—E8Æ?—l欔º4måNå@€ÇuÄë‚BŠØJä’‚NÊoZ›|/T,rsÓ’Eè½…4Iò¬H>ÝÈöD +‘Û(bò u¡rðZk$ÅA€:ç "~[aÆÉ"Ì +]Z+4êoŠ"Õ%Œ- Å$ý·Í%ÁäëûUÔŸ¢ÀbŽÚ¸Ö } öÃæ +lò3*°æ;5“]·5‘%¹Î ¢‚º¤Îñç Çƈ6ã£?¢ÍÖ°V1Po±ºš$ äs6¹Žñ¦Q†Ð(„îÕa(ÅövÍeþ0a¨+° ŠÄbs–Ž<÷B÷€_¨Ícnô¼ù!c¥ì‰¹½’™áY€Ëƒ}˜Nð=¼0—IÎÏó|ìBJ=‰CQNà^º^^¡è)È£&‘ežÄÍœ‡K|¬òæx¼D~r›u9ðlÆ¡¸¿‰áNÓÈ¡7;w‹a¦5C6v0Š<Å{A¨!WŠ:Ú [ð$T„ +HÐÍ<+à`¨üé“&÷5X6{´‘òÆ*“‹xHí¼õψ–S ðÝ «vãÐíé5Éãbl!•ƒhÑöñȵ âhq|4P? óÙ½\,oóT[ zSäÍ 3®`Å0£ý Ô‚;YDwðin&‰Oã=":p= ðÜ,ڴЗq¨K¡b’ã§j±‚¬ËÓ`7zÚŒÎ&‰–*fÞÔÅpÇÂ&%laQ€í9pçíÆAïÛy(¶$»Ø¦î‰­ˆ? {k(Àó”û rA›d؇V³eß_œ#ÄR8Íĵ* +ÓÓËþYYƧ׳¿ÌÉá? €¬U¥~X䤲jÀ‡·h.‹ðZQÀÛ9b*’þ@ADxÖâE~l!ËiKѬujƒÈË4yÀ1Ê'PdNoEŽÃÖøTö%Ø\áJU(c™ùP˜à5‘´èFØe¡Ovs°½I2) sŸT6à+qé›”^!Ò 4Ù)^£«‘G<—#î(À³!ôP:$7C.‹È”Åó ,‡5Ra«R!^¡BP]—? r–ÎrYäçÒ»C±ØÔnQ­;áÎÕ‘8‹€ÌE·’£p$³|ŠÄ`¯B£¨Ä2¡WàYœä²g3µM¶¾Èü'‘ûÃõR!¢K9.â´Ú\Áó‘+­8‘µ›¦Â y¶6¹rJ–,Âî©f<ϳ<ŠÖáÑÞOëy ?RDeuÅÆ/œ¶T¼æÙ3 Ž$é¤âjê:2»Ic—›8©£ð.o]D;¢ŠN†ì»fÈrhk“C_TŸ|"¶ƒ&˜ªÂ;ˆy©‘g‚J²»ZGð‚˳Rc]Ž«åSôßµ»N‡®ÃC wEJ²Ëvãˆìõ©ÅОˆ–ÈTËé–dö‚ŽbÞP +[8f{sÌ{ri‚¨$‹pFÄ#:/¤à¹`L Ý8ˆ·!dIa3†©X<¬0²å´!â§'Ö_ŸL c´›¼“øî½û2,Ç"T,Z¼J­>å&Pä° úCÇ£5î˜|…8Œ£Oͳ_/@ð%Y¤Ž×RWEvutU>…)N 0ÇLœà±/k‰J²Ho¶´ü$EÂn>Šp¦L›,ñþŒc*mf!Í?–¡Pö¼xªßçåN%Y„w¦°‘<Ïb§ ™.MÎw ¡%Gý#RØ\áÖìÆì÷G}ô{N‚a€;9v¾ÏqÏ ¿©¹,"­’OFŠڿ⺩D4Ÿ†èÉ®~%Y„û³0vý<ËeK‚§a"¨[Œ±«„Z‹…¨÷ôRO:¸”lYtfO€¦€¾asõÔW’EêÒYÆ9Œ¼ ÅeÞŒC{-ÈÅ:¶ÛuqܢȠhAvºðTÄb@(Ôœé#q¬–}.µ‘%Xùò°vG«Õyˆ,0ˆ-Ú>äÈNîОG¶ï†Ø£N6$s9FÁÍÀ§ §©G¸oÆ>÷nò<Ždœ [‰†HKFum +ÔÁaÿ\l’@g/$‹ðwÀ›W3–øÈé'Å·ã© éò‰Ÿd$‹Ô¥3”z‰0uf©ç0”-ÇÔõEÐ ysbB ÿF½ŸD9þ›ìàîKJ‡ÇCTÊu U}¿‘Aþõ¡ì4 W…ØìŠàD'´Ö…q# /˜¡*É"üÈ)òŒ%”K'C ÖcW%YD¢ªa uE­Ó6[Blóg ÆQÕ(´b7N‚ÜC¯ƒh +@îc±Ôe*¶¥”L´´$¦$‹¬÷‘„âýúÁ˜Y÷÷~ñ‘„,ôµÐ»#[G'EÃ\e)\C«Ðême…H$_Óر°ïÂyÙ·×´Q7¦?©Úô\J±½ç¿øX8%å’cÇIpF=€¶5G:½ u« ð]O;?È9îèr@…Ìû +x}9âxÒ6“5“—Œ,'ˆqþŽëó‘ˆ#à d+c°c£àÓèdL|šås¡@5<þù‰1ÀJF Õ8î ”2Îx»ÇñŠß¤TÇÃùK”•Á–f!Q”"ŽIð!”.àúWŒóÄÍÅ0r›ÑB(]È#[¢Ÿ¸ƒ£½üÄ"»³î$ŒŒd»€EËÅr#y9óryÌ#¤Žk!Ë¡Yëò¦LWTŒ‚~ §§~:”¨ã\4Aá“„c†Ú5K³¨1.Çq¤TÕ†há×QÆvQÁ9¶-b&S¸0É!ZãÂàŒØO%M±6 m“fŸ8|–´Ò®µb9’Šítú@LÑ`¸9uò6åùhCHaåƒwœZ–'„ÒuµØøÎ +‡Ã^d‘¿$·P­b ÛJ§SÑg‚èïŠ!2†ñ˜L‹@8¥¹,‚AŽª-)¢4ñ…b·Áu Aô°„›1äÄ<ú° BóX¤Æõ(Øj¢AoéH''¶×<–ÊBX?,ÇuŽG¯”¶«Å¬ÐI©)G®”À$‹à}ðj´iŽ¡8僨\¶¾“G¹±¡ry˜PÈrì ºø ˆÏ•#–Óoh…Ç׃&¼$ð8øw7½ šã›—ȆÀX¦2DC¸/K²Hµ6^Ë"GÛTR¨Ê +YŽùô(Òˆ*dçËl“ra<Ší|”Œ9È6ïE‘,"eྴÞóT’ :ø¢- ñ¥¬ Â-Ì0ç$EëîXô |.¬‹ó'ÂJ’u0d;‰a+Àú^ÁV=É•cDòj’kùyµ$œxŒ–”°';^í†ö Ð’¡"ÊhS÷ã.¢ð~U…°3ÎÏŠv+‘8±á°=2ÂÀââ\¥X€‡+'ó¹bïlÁ&½ 2k+Åõø|ùAŽC*µÀÒJþÖäJG«3zmŠÉ> +Z£‰ŽR,`ÄÆì׃† +=ÛÙæ)jP,€‡ Íçxƒo'rxS„®=n½‘æ’Å5z(K  ³<`¡kì^5U‹ðàšÅԮᛒ}{'®—uÌÊ°ìòZ¨åÐñNû`Ð ‹"(ùI¯My=Ù##¼C`)¨‘3Ù¦  sè(×çcVõÚˆõŽš˜è-…b:qø¬Ë¡ )8ÃÍóälG›eôºÖâJ(ˆFõ;pT'‰zÒå#YIèD䘫œÍBJ±%SÑŒ@‡<«^sˆãˆ#f#!FšTb_ÚSãR ö®ñµ•`:‚M#ÒBÆárd[ÊkÎrEÁ©ÙŠYü¹yõ„Š Ü«/óU*G`”P (šL“o±ô3Útæ°^4n†ÐJ>{ßQÀÉ4Ëb +ƒ°ð­8Ô ¹0®ÏGåQ¢[·R ®¶³¯Ã"8à&źÄÐò‚âÀþ.SQ1K"À—sº)ô‡²R°ÍáˆÂôÆHBZŒVÁ±¸ÑÁ&0>ƒŠÔYòJ€ LæfžîVjç£hHIe/üÉU¡œ”@qYáV€!‚Ü|Yf¹XLÂÝX0Ð'¾ìÖhçs%|YÁíÌ ,hPŸ3Ï´ã,à/Ùži®BðÊ^DaB'슰Sl;›3>Êf,§«+d9˜#Kå{|Z˜©gÒ†Ø&§ç‡Å./Â`í)Š}æC«¨°çј‚ B¯¹|úH©cÕÃuù¨@WN?ƒ|q ¹Uû9Fœ8ø¿vÍc±‘…Å•ˆÄ½¢3ƒÈUWâÑGrh†BôXØzM½u(v}‘'Aƒi-[ù,#U³9»ÊØ<©ñш'Cy^pŠáé¨>AVâ<'áøˆ9xñéEœË"5^®£¥c×m ú`³AN刘¿b;•MÅrnô'̬ïŒyËž¸þÃ[M9 OÓˆö2$±X™pT½Bm´G[/`­I¡"q.‹°=ÌA° ËŠeó‚‹30ÙF»ôB…²”lpPDJ•àDŒ@6‘Ãî“éÜBÄá@‡œÈÒ%ç²H²yˆy@¶Ïîd¤ºs¨' –bj“Vd <£@‡Ã¡lDïkºFXJSÀ(‡¡¯£0IDJÇvˆsh¨µXˆô^Hòé+òç#äfÅ£Z‚ +–Cc¾) +½Íe‘š¸„þ;å4ÁY+Øýˆz”ð&LE,ŸuÂãöÌ… +õ²X»Ž³Ób=.F°S/#Y¤•ÆC^ºæ5£„O;dG> p牺F+m×õ9•ØOñ\öRD3çÓ.5—Ej4Ü8‘¨Gì’H +PArØ=Œ5y ŠÔ¥T´¼…øn먈»D² $¼ã†ÕUD("#…ÎüÈ<"…3óŽæL0;¡ôãl‹Äï±Cº{'Î0”;âÃì8Ü£ ~dSk)!oçŽüÐ>Ç + ÐÖd ìd(•À¡jgI©·ØÝs1bVøZÎÔm0|°ó¼¬!Û=xŠP1)0,â•…Üm`3]r¯Pc/ˆ¤ö|®@ÚCÀ ¥d°ðà$ËmÚ””®×ô5$ƒ \ó¦Â"K–d{¹ËQÍ-PÃÍðgžyÇàz¥¹,R“‚ó‘׌ UY!ËiC<(ŽdLÛoá(ãd1h¯J:±‡O#‡a)d½ÞoÛnpζç7ý²ƒ7›Š`ýásS:-B4¼ç;Z(XŒØÓ¸¢ÉK˜âJAøáHÍP ŽÒ‚*ôxA“W#ÐßñÐ#)ø +æQ +Q2aQ–› (b ¢s“ÎHnJ±@½Q`8ÖbÇÁ†L‡1Y±YP;©¬”H ÔP˜§œT´BOÃ}!Þ`"[9©PŠêÄÁ& د0€`WH‚_ð6 ¹®· ¨Õ™?  w'mýF¤‚DŽ+× ¨µ 2V„ˆûpŸ" +ù’è5ßÅKenE&ÏŽÄrrí—óK±8ÜÕ¢ÛðQÍq  +k–A[L"YaàfJÀñ¯€(ƒ²¸²eÁÒSøÎbâÞ „,gŠ(ƒÆ>„íDû€7&@ÔCàåËi^a5 äé³'KëÖ]l×Nÿ"ÿfŸ]í¢Ïq-FÂcp%¤9 ÜâäªÚcóÉ×·¢˜uPE”AZ ÂZ@Êû¶øär +³ë†ÙIæX8á`v:‰QŠd]Ÿ‚cÑ¡ù5b]_ⱺЩ[•b^×$àŒr°8±'-D¤ðµKù=Zº }«áwî\éBŽZ—UZ&Iué1E<‰ Ì×(/p*ƒV°èh”„×k¬Þà “gÀÿ›œôÐ$‹dÙ¹/ˆížz8×µˆ2È«›] À\ª­Z¤8ÛÐÃ"lmÀÉVˆ“í‡DË3ôcK¤e¬$×x&,Ö72xÖ•Í¡´®¸(±œŠG (‹€¸IO*Y,€¥láŽÅ)©ƒŸ’õ6Ô :-OzÖë@êÊ.ÎÂ8ŠcPÂfçÃýgÃQ[ErO‘6X ãÓ‹ããy þ2©g¯ÑÀqôI#ÇÈ’ß ºÞ¡¾à€:z^&¤¸l©½ä‘ædÀ -Q z]'¿ËŒFV?¶l(b÷ãt´hH ‘+ö49|.Ìë°ÿîÉyîöÞSãŠ;t,GÞY„ûµ·ÿ&ç‹=tɬƼa\e`ND[ºp7t䚊°¦XcÐœ€§þ|è®ådó"¨šT|Gè©"8p‡ÇUă‡9Ÿœž!äé+^Žå 8doÜê²Eņ· /Jž ©±šÂ®×‹",·ÒvOÞŠ­|ƒážñ)R64¸,0Ê]C½á¾½‘C›y8:E,Šø2„óäñx‰$~x‹Y–ž ’xLâsz¡±S¡Åûrè@!Ž\ÆÙ€vÄŽ9ŽKÇè¨G¬'. zÍ +UŠcs‹Œ¶Z@ÀZ Ž¡óùü'„A" ®^×[ñÄ7*ÊoæD0ŸSÄ"ráÓkä‚u+¸"Ƕ·)ìãåÚ!!´€«ˆ2l»d5ÌÍC¤‡98‹£\¼hôº†,¥‘<Þµçy:½H#5é TDpqP)_×Zi‹Ä#­ƒ Á¼BaúÊykå¡[¯!»¶ó DË f °Y,€<1ÇÁby®"y7ZV‘žì‰·µ&Y,±±çÆNäAƒàÈòß…€8Ž㧈ƒ5n, c@t­ß„²˜ÕÕ$âM4Ô(C¯ëĈÈäá |j"ƒa“b®‰Õ‹!T#>óQ”6BàÇÂñ +3Šê$Fâá('àÙ¶òä0"½®µ &¶=i«NÏ/ÊUo(¤ä8>™=5¸µ£HözÛà|óFõ˜´u{õ#vù£›ÕM.ë¸kwû\ˆù˜Ý'Ã*@Aë`K…ŸV„ëÐ^á!ø|fÞÜÔA€l—Èí4·À׊#äÏ˚ó¢éÜ?—§QAŠ3RÁJ&<£s´0<*„ äX b1ãÅô= àBf.ÊÐë:„º9÷åíöÕè‘&’Äö21IndÐÈÅ›÷F½ìY¤î:hˆ·B瑲öÏp$õQdɦ¸—!ÖQÓ‡Na9ò¦@˜@G!OßBôQuÓzîÇnçG§š8¾ÍbÝ–ÅŒãò¡qP"Ý„c&rP_\s/FLŽ!óI_J*Y,€Û ¯¢<žôO¼Ú›Šº¨ p·óê¡å´†„ó­RŸ;, °ÿÅž±Ø„Ž(S«¼é@ìÇX,„4.k  '1Ÿ§Ÿã6Ç{*®iQ]¯k|9ƒŽ‡ù@‹]'v¿¢®á¤…Žr ÊÀÉXìºG‘9C9g Ârò9˜é&hzÍ!¯öºì®  §““42Ž®÷G¼2LQBã„ê¢M(ÅÜaÂÁ3‚k z@/Œì5@ÚÔuÝSðZz[tyNl¯‘ GP52p‚„$ÚO² 0¥ÍÕt"ªÇç,â½…éÆ@\^>‘Ž<Œ/ƒèPBŸçe8B‚ú'Rãôš{0öJóùä.<t†Å”ò ܨ\¢ ü4Åßa€Or ¢Ñ©ØsAcj$n¹†Œ”¼'s vãN%€f±@žNü +'æ`öðõÇi#„ÐvEè:dßa4‹ –•®Ç 8r€+ø±ó—‚–O‹¿òÑAØ1I§GòMŽO Ã}~·@”Aö%²§s&9&F OÅq=ŽcN!ÅoQ6&„?ta-ŦšÓvöÿÎqt˵® íGÒ9­M(€‰@‘q0‹B[„Chí±kǹ¥Müb‡ N³X Fyp¦¹ÐÑ0C¥•3W¶BßlžJHLý5‹ †DZn"Oe +­H®ÿz ©|PfÆþ04ƒ 3 ømÀï¥lŠÖëz‹ïðÈŸc$s‹Î;³,¨Qœ6„“ž` ³Íi«IÎ1¹äìÍbH‰È k³8úÔwøëF°h +« ˜òò†ð' "øc?…ì¾\×(‹ý¸ÀÐ ”Ø i +¥Y,€<| QÀQ¡:€ð†#Ä*Å(}fwGdC¤Ïý…2,`2yú•ÀH㓪ÁÌÂÄ^£l©FºA|ý’àCdû‰púŠ"Ø à` +ué±¥š!º3†ÏˆÍÅDSÏ^×( ûäe ùèQv%‹L_&z9ì°@Ñ`ªŸ‡Ú%klX¡y÷-ÕP :²È%nÂÙh“jeX`=o!]‘>¶‚zK1ôè3ÿg80¡¡Còy, ¥Q)ô1±1CñŸÖ“8yz]gsGìæØ÷`w½j ©Ÿ"4{ØâÀÃ¥A¨½‘½òÜçK ˆ‡ÏÜŠq® +两I*âééT/D³X6&ÙRà\’AžÔz§äc)BÙ‘L‹þdŠ +±Ë~Š-ŸÇ¡8ª"L—Çp±_ñ’-˜¼`€…W3Xk%)/¥Æ|€m§(v@ÂgÀ¸–Òz‘-…ì¤§Ï + ¡Xë“X ÌsBêÕ½†Î "%U¯¹þ<^¯(0l ¸..1¶ÜIJãEHYTDä´.áªpÒŽãe=&-ܸž.ºâçeÐ +ÏG°(Ž!–“x·ΤD%Fè‘(¢ÜÞ%;¥ ºbÒçÍíX7‡©†¯a–uÙŸÃa}])¨ó ++BÔ…â…Ò@MR„VX}^ng/GÍÒ–T$Ó:ÎãÉqðâxü,ë5²p,ªUÁ˜QL5"‰jÑiò”VLŠ93ï›J8î^”m­Jø³²Œ˜µ +à{N–Å5Þ}í&1*\âCÂ[‹öTÓ¦xýÍ“p‡¼K@É¥ã„bz8M6Æ%E0à¡k>¢Å / +ÒÆKj.WJÄÚW$Q§:yˆü8ºšR,€,{²ý¤ƒ‘0±ˆ2àæè‹c4ùÑ–suDâÍc> ŽŸ²[Z§d±@wkEIƒY ðž«ÌßÉÕ£p¾kXŠ°­Îƒ½=ÇÁŒÖ—½¨:ùÓk”„ÃnŽÌG\bÊ1äIʇù½æÕ0 ®íàaK˜°šÊ‡«#úDÄÇlë)Lr* kä0ÃÞ{¼žÂÊ[d”bäJd˜×9¶P®yŸ56€BEåýpŽúo¨Ë®éwDo˜·áÈE”ldÐì¢ecDût‹šÇ‹ÆA~‡šø.Êi¥X›êp˜[ÆñÙY$‘= X-Gd=E”ÁÿˆÈú\G–}ÎE3 ËhüÒîX.ï»GOè&2Bq`²Ë„ð‹§±Ok ±”åÉé5P¸»620rP!t0²·ÇC0äN‹ÀÃ9 ¤÷àˆC +Á¥ƒo†8E.Çî³×XvöÄcÊ”¡×èXáû£î…nÂGaêuGKßË3Ø/šÂ48žÍ¡×5vÿIÜŒ‘Š¹"•ðuòþ÷€7©Òê$Y)´¾ŽnF:Ƙw†sXBÞ*œbÃ9#t0>Ô®ëB²XŽˆqåÊ¡$è8D… ¹s”¸kTWŽG {¢ZBë.Š`‹° mŠ×n5‹ÐÅrlGË¡m¬ˆBê!ÔxW‹"ð"“µvñ¬°uî>Âñ"*öSg«×ÜýãÄ8#-° Ôù¡ êË’{§È×ó0W¤ž…Öfc{Ê•õ;EÐ]qL#8¶k½æpQèå>‘”rxL>Á«ø9Ôט:x7/vGˆ;áÊn^¡A›ˆ"> +•jQ€Ãw J‡kÃ(;äH®×è)Ov;ÊÁÌè¹q™GáT|ÙÀ‹àŠÐÂ<ûuÓ–Œ ||™5tÿ>ïçŽËö-2½8‚AplÔ@N‘SŠêþãGrÜ í¿E”AÞú.oQK% _$|;,‚½P|ºäzíàõt•bïð»ý¥;øÀå0ôùÓ¼®“ˆ·\2¢ ÚE†Êî" +VÓcÑ* +ÿêFöºÞ±,éÎ@ 17e/ç@<à# ¾·+«Á¾œm¸r°¡BˇżôЦk×^Ö(cY{W†¨-7ül3!ˆ÷çË-¥X NHª6#Tâ$-BŒ ð9Š<&ВŤ–û)ÛC Ù „VöñSÙ¬ÁÀçµj Ô¨4|üžBÃî´- +´ñ†?á©z))³=IJ.#Ê€žÊ'ø| ;}­¢Á+B1ìp lŸ}ìÒ˜ã©ÔÏKìu­EÚ)plT?åq8æõAsÓJ˜\Ö[@ì3v¸ÂCaM2•À=x¨ÁQ‡w…“‘Ïñ˨8XÞÅC‰ŠÌˆŸpG‡=´ÏN³X/2æ úCK€„ Å+âS)Ù ÷ÍbZ Bâ‡Ø“–;,‚Cž|LÊèH˜Ôáâaù“Òë:j‰ DÊ ¿Œ¸šÅx„HN«q9Æ4=CÄNîØA½|Æ Nœ$ÖÍÊqØÿŠœL)b[9¤Æw YÜ„-I:=)ÇlÌs¨ÜO=©eSµÒ¢ƒ…”ƒuB>Fx(Máœbt°˜£‡)Bc*x3KÎ)jNm˜ÎrˆãìºN XÙ󌀣J³f¦Y,P£<\?–ƒmzrÙ++ýzºá³; ”dMN† âÕùó?’^®QÐ[ö$MT¯gsL¿N‹´i¸…ŽÿËÞ{.&Ž,£÷ü““rƒÉÁ€Á€ÁÙ @& ˜sf~|Ïòý¼ç5î¾Øí 3³3}ö¬µª»º«ª+u«‰úAø¸æoaJŸÇî0|/ ³nu•d„ðÎq|d"ºÉD?eFS”ކˈF „@'ÁpúùF³5ÎhE77  ^h6é%èœgÅ{¬*f’wýôR7bS³žI".1ÀL <ÃÒ.Jp(ŸÑB:œuÂüø åð;yýt Z߈e<ã… Zÿ€­Ù fÁ/ÎÑÑÃ}0® CâE“?Ý5!ðÄàÃFzš3Ø¢QÂÆ~sü!QÃxFÎ^^C°2)$2aÈÆSëgdT¡/i…@kâèn8*f‚¿Y5aHœw„¦Ÿˆ½(‘ÌXE°ÚCg}UÌÝO@ŸƒPú ÈO@ËcF‰¾€²ŽŒ>¡ŸÊï·6ŒûP)ÞR‚\¼{û=úŽÇibh¥ñéÅøhÑ©YbÁŽì6Ú`mÑúÇ3:KMѸ—ð 'h‹02óC»û(lÊÑvo˜w…;H ã=|žÉ‚Ãà“v­Çw;CML¢=ÏЃÑ:^çƒil”hÅÏÈÕ@%!cƒó[{´ ÀÂO† kÖ~YX¼~N úÎ ¸ˆÒ0™g4|.Öúp_Žp3< ]Fœ€F¸Ñj¥Qb@À#˜8|ÌK„!Ñæx|DtHôY/~F¾:÷p´Â’"kØU$¤¹x@3xG!~†O$N¼¢óªmF³HôÍ«_¶‚ 1Îßqú¹ÌˆY€l¾(À¥c¿ˆÃŸt¡ÚØBéçøUÌ4HxÞ r”iF÷®P ºï]ЇQD»(ññ|ÈF¢u £Ä€@_¼ðèøxƒ’£º:z™A Kð™DgŒàçrJàÔ6Z4Îa¤ukΚ÷ŸAãW£Ä€@¬¢Ð:ºµÅ_ÕÃD+´ˆøhŠö 0zê­GëÆ3²n(— ý\|Ÿì°þ%*[Ðþx8É  UÌ‚ÆvÝëwba{ÍËžðôJÂ,@öY_¯Äg¶OÌ´”ËQºk§‹o¨Q:–àsip‰Îó„û@¾"üðã/Nÿ¦íË@¤2J èé7ƒþj;®_cn¹vZüÚŸ{í +mÑ)^hï-2ã(ÐÐ  õ@ÇÌpú*QÁ,@Á">»Å(bô<” ße†ÌÚgl” €Çóø £ŠY€#hœÅÂKOXB Jäâó ³à Ê0ˆh‰G÷pá$r¸ºèLBN?7ݨbèÖå¶xó £ 2…Þ gôíV¨Ý0†R+¼-(¬#¢5,üŒˆ…®GÞ†¡pŠ6U¸~„…ÀàårXˆëí +àÑmÐ4‹S·¤ž+™˜%!V?ä¡Åq³†fZÓÄ÷ è •@MEC+ƒ0:aÄÈέKB¬~e2²Ûøt)£šJ1P@ chØIôe8~FÄ (~OPBq"J+0H)êÛŒt¼‘±*Œn›Dq!.›š%°(Û«oÓÁŸà"x7>…À8ŠÞ ˆoÃ%ÜH¡ž‰ƒ4´=¡_WÎêŠ fÚ«Æêçë0$ÞÌ ¢ÿPðãl<£½Rø`gã, ¼3ŠÀçŒñ Úçh”Àó‰ÑžuT¿=FË®”k¡-~ú3²,hÙŒ-üŒ +}ºjT1 pü¨_L²†Œfu‹Æ°}ímÏ¿>bBšÖzp»¡hÿ¬ƒÛu=ËÂOÐ7^úyÑ,>Ñ(0Þ£Cíxt&KâL 4Èð’wn@Ãq zþ!ÐòÚ6„y hÄXê0Š`¸æÃâ¼B£ïfƒìp.’±ŸIê‡cOa‰±Ÿ]g€˜_ ¾4É(b ¼¦ŠP!H|æ›~”a|ÁØAi}£ÂŽêu ⣀aÖ[_ bàWhg–@Ö8 (£†ñ܃5Ì#Î-4¹ M>¬ß¦„Kt3Š¯ðyRF³‘k<FÀTàõc3)1]¬Û3}›¦ˆ>mf1aÐŽsMÊ1 ¾@t¤¯†‡ÇBá3Þ”ËgÖw@çÞ1ž1y9níæ3aôï"Ì‚lÝ+²Cë¾4: ˆ1?¦Ð  ëÂÐøuZŸSSXb+„2ˆY€†‰6ÑfÖÝ(ÁÞ€ -Cá¦t» jœÂg%Ì ‡é+Äo\”‚·Ñæy!èaGû9¶!ÐÏkRhHx9˜Ñ£*£frŒ=/h+QÅ,èÁ::ÕÌCÆ ¿ …96ŸÉ‰žq}+Ì:1 '|ç—ÕoÔaô‹¥g´ì†Î݆€Á‹¾³-};&`¬…üqt#Ò^²ùõ3òx‘%YŸ¾WÄq ò€)~}9­QÅ,øÅWªÀAÀ/ 6R™,…?NûÓS™P ÚဎÀ€ú^÷‘ñ=:„Y€1O î±zaD|£’ñŒ¬!Z%·BP¢¾´c£ŠY€æ.\O3·‚MÑ3³ðñùRÕ5e¶TfÃP§å¡2³¾8¹œÃ7~SŸ¬ÀßZ÷Uî-O¼©¾Ú•mimµÙªÒLÊš­¦õeÍwø ¿ÌH“‰2Ô¤ùHéé-UDl)MSg}ÅF?Ðõ¦ï|ٮ㳅N¼û*’Äš[•PC¶Úi"ïBh[›Õ¥åhQs)-•·•lË+“©ŠÚ ŸŸ€–éà¥õF2ºòÞh€.emf­ƒÂë*dÃĨNÕú¸õ ʤ+kK0 0æ`ñ¿~2ßßupVïøEؠܲú¿4rDa„e£m©ÒsZSˉŒêV”.ÛçL +Ïù‰´|Î ¬´/ò5˜=ÒÙ”©ÿïÿÎáÈ`rÿÿ ÿ!Ñ_âPorÚÄ ”×fâaÖ'Ä^x=8ü„þ_óÅŸ]Ó +ÊÛä·ÿטQà‘²El—òŒI:±ÿ°:©"6Ðsõ^çšñ„ç?—çIx ÝuO_7t†ÞÙëÙLšÊ}ÐìöF¯Ã †h`IôM!¢ÎâG0"bçˆôßv¨2cì†ûí;¸Äð[ÏâûgøVĆ¹´›…GL†ï°ˆß¦6—_'òâ$Rž©ÿ™¡`kuS¹|´O")`‡¿ÈÆÛHFÎÕÕ¬xÆá3#I™Ù0.õa¹ÔA‚À¾GÚÊBéNPƒï[‚Ôÿ®¾·ii¡ô¬ÐÔ±||} +½˜Ô4½"hÑê¯â©Ë†ÜS{Ї/1˜NCÛÏI~¬Eåæ«Õfªj»$l}PzÓ8!±gÉÊ[ÌvbóZ:ã‹ÙPßm±[¤.iËäIOäYÿ;¨{¨±5)ö ˜£Q¬»¿®¿§÷’¶g¥,„µ•Ÿ.oPx~=A­4PI6ïõBÎ}‘gµ~ÒÉçwS™Ø–³•º¤¶Íž¦t»xXêÌžAéJ“Éj±Ô¤¥ª…¥9pï#XsƒJ²®[½M Ô &Àû–²ü˜*"ÀÛ¥ ™†xdf‰ÞGe&/ð¼.€5^æúC¹öEÖ&0Ô•pÎÔ¨‰tBGé/G;^Î¥0øÉna“Û’¦H°¿&nÎ (g7Û߀8BÖþ¾|Æð?ȆàéŒ!ăŒ!>â ü°Žc~'Oþnóÿ$’û¯Ü[Á> ¨î.‡ ¡‹WÔT¦ó‰é¶Ú‰é¢n¤ýú½Ö%‘Ö­›²ü¸ì_ Oÿµ]Ä¿€ƒ'’ƒnúஇaŽtæ$ÜÂ\ÙçÊ1;xôœ¹ôþ©Ì1Ö›©¾4Ïsd!žë“Eçg™˜Ü´+M&ÀÀØæiâècMÍžº×3¥§ö,€pohóf•xû?ÂÁó@¨K`f{ëšü%«ÉÈq‚^Ø—–RSù†ÈDªˆiÅèHª™)•6+CLà•Ëþçàg®S?øo0ÑQÅK5~uÍË(qÚ aÞîgëglj+ëgïÿIî ^@”ûh1FW©Ku1RçºøÙ +€"2èdn0ñ¿Þ\Q<ó© (èU'ŸúöSß~êÛO}»­oöÓ!þÔ·/}‹•g~õíÛW[UZŒ–ªXª+Í6×Ô!P{ ep¬¦…ÛŒ DCê+«Å§ba?¹OÅò;Kí»3@é.àŠ×XÉj`"ÊÀeapOéõÚ¤ñ7=UÓéªV‚'q~j¥-­ÄýµµÒçñçñçñ_ÁýÇHÊ?r)×#î_Š¤à‘€û–"7^~ÇñÞåÏí5b†ù½ë‘_ÆÀmÚÿcŒ¡á Y¿b^ Emï ø\#^{Eü§Wôéý}EýÓ+úôŠ>½¢úƹ¿›¬}> ð§þûŠú§þ4ÀŸøŸn€ÿÆ|§'ÓûÓ?Æ™ÒðÑCÀÛy>=£ÝžK}îOùŶáiN$ÃîÚþÜEø¹‹ðsáiéÏÍ>¿\Kó /gùTÓŸjúSMªéRÓ짚þÕjšYžf?Õô§šþTÓŸjúÇÔô_|“êçÖùO}û©o?õí?FßþÅWßw.Ãì<Üðð„Ó–B†%e÷\Ë«øˆ¨¼›hß©·Í™Ñ”‡Sy¶”ûó%¯Nú©þ+˜üð¥¾zƒ¦×õ|¡ôå,à“^¯T¥ÿ6{ÒÄX}Ña‘|›•ç@ 5£z•Q'ª¦|[ï]¯Ö˜Í°›=‰jÝט¨módKÛAâG¬gAõê§ÈZôv]S窆h6Ù2³tk ë‡újW(£Ï)ý@½ñ +lj¤ð#ÙbÇš\bÔé É„Œ-÷ß¹tGZ¨šlkËÚb{ã.˜ÚR—“Š<.GVgÀôÝ›¨½ñ”Ânœ j,¯u°]ýŸkàk Åáw÷S ý?Ù ˆO¨ú!’s(KõË“‡£óöú×á§> ï§áý§ÞߟCü´É?›ü'Ýÿ`[LnûùLýѧG!Sz´ó ŽôYb*ÂdÃ/9H" ì•­9’úê;Ãíu-jÓ.ÐñÐü=P$wtîÌ0ÑÝɬ·*®¿~U}ÙMö£­ßñj’wÑ›hhó«ÑŸîd… +Ì-ž_àí'p„iÐú’6Þ€©Ú7«Më-´Þ†«4—m£`µëÍJZGFrßeYÿÝI6ús‹Ð§Fÿ}ÞÔÎQèÚŠ$øuÁˆ -BÔ@¹pðŠBøƒbþ`9xÉØïÒ4ŸŠüS‘*ò Eþ¹‰èóõxdý¹œýO_Îþ4ΟÆùŸhœ?·Ž}FYŸ¶öÓÖ~ÚÚO[ûik­­ý‹Ÿš÷ik?mí§&þÔÄÿMüßÀý·?>íÓå¿ZJ©Ÿ,¥Ÿ'ŸýSO>ûe’òiŸ?íó¿Å>gT=ƒ"Í0†¾l[¨Šü׶Öÿ[û¯5Qµsw_]Z3›¾·4Éÿ¹·ló{´Íá6’?Ra¨™º>ø‡ ýoúS>¾W>¸•||*ïþß$ ¯”›ŸHÓ©¼x.4?翳ãüPJº(íTE jžm!xWÁã+ŒÆ;š#„0ˆ¬9[ˆÉ0)rô«¸þ²Á]åŒÓ•*‰Ï¹Y?¥-QÇ°„…%ϗꬮAoj6 …pqZ"S—&ÐÊ¡Î×»Çw×{ßç¿ýO“†ò£ úæÛÉFáI½÷ž$€-Ò¬‡ß}G +Ê{©*šÑbXd8Cr” šæÂ5ÔÕP¶5Úi!‚†q._dI‘cmÆò„¾V3+4Çð,Ã[\~ Ö–À¬¡Xžàiäm…I–fõ~Ì|•f`‘fÄO g[SSC^Y€By-JpÂî¨6³Öt gXUè"OÀI8»fð¥EÔMP¢nw,zÅÐT,f‚1uxCunéíÐ`’´ Í3 Š T8¦Ø¶q–74L’@Ö´ãph"mZ-^Äýhù¶@ª)¤Æ ŠàDX"`e%!(ƒbâZû‰4K Ϙd(ž£·4;VŸWrC±Óˆòi¨,èrã)Kq Ræ@u!eLp$) -aÈ'Â_ð‡isD¤O$ý&åXFàÔÇ¡I Œ¦9°AÀµG-@-‡µƒ—æ B3FÒ š˜Æ„bŽð€E¬# zmqØ´E†Þ¦­¶Lqh‹ ‡Þ–Fú”e(MR–Tp ºX\Wh:g(¬„q«mLUÎ>Š`8¡vŸ„?X ‰ š#ð¤Us°‡†¡,|‚*P€åÐ1T&J ÀQ"hŸ@C§žDѧӀÁúvÅHz»œÈ$²4eJ9Ðçˆ4Ç¡:<OìC• ˆ»CÆU·V»ƒÌŽ©ÿ€>¦!9‚%±ŠƒWîaf“,Ò¡Œ±!ƒ2¤ŠÜä”Vd© ïè ìHzà”AZˆ,D¬ãI’Ãd×m£>GÁ¤Z“V„À„5è +f‡wÏ 7ø],øÆrë,×;JÓ‹Àj·‰¨J#m‹'ÎK#ï8hCÞ®ÅuÞ•…Þ€]·‡ùÛì˜, ëúUeø‰±—è@} è6þ.òòë@׌p ÐÛÚÚŠ +“  9ô¶´«lñྨ­-š&,6VÞ‚¦,`0^~_¨‚M)T˜¦¡“ODu8žÁŽ&¬8’ÇÞ9ô¤È?t- Å…‚"hZw૲Ⱥ/†"ÐŒcAWÐVoò2ÿÕ}4è%°Põ°†*ç(‚°^E*–%€‚£ÎäѧmÿÀMòhÂA'›7U$+2Hw1,T´ÈãXkN@ö‚1ÿµeøª/CÏÇ…æÝ& ÏŠ°J¹ ¬Ñ«íz»R‹(0vIB·5¤Ô1Ð2ò½Ý Q·5œÕjaÃÒ›V‹b‘þ¶@D&8T4Ãà鎭otlû‡Þ.­!ò#xSq‰"A’‡!¬ ù[Øéö+ó_]H™|¨ªÁ_#HõG> + ®;•¢Ñ£í†í'P¸e™2b(`á)$A…†|7 ®)^î°Òßü¯!„,×ÓL]ÍeøYO]pX[Øæ0o5P&Ó…M^Ú¾(ýßþ§®§"0•š< à‡c$l+MÀ¦†Ö t"a_I«3IRˆ•$ì cRˆ6X 1d_Eç#ñ<‰µ½éÓíÓ†cÃAYûJ¢€Äã¢îucþ(ìÑpѤáÀ ôÇ z£šôWÃaÞ2‹¥‚¥p”¼,<³ÀdéE#Õ)à¸ZB´ÃÑ`.‹¤Í ÂT`¤X™ˆ¤`†0ŒáÈ0ÈÇ„¶¸ú$…zH¢¨Hïb=m¦žŒ Ó:çdMF\ÎqÚ +½1We±ÜN½moÜز²sÅfïgŠ[¯ßeÍòg;AøUóë´«N`3ÿω·4…˜»êj©ÎP§¦sÐËßþ¯M“A¡,Ž·m©´\i¨sÒT™LdŸÞ&¼oÃÒâþžéD̪½¼#+-¥×sÄx¶EÑ“%í +žÍ¥ôD–ûy°lK“Ê™¢—øRM§4Y _ø]$¥iÒ×mò@{Ù€ª¯# U\Pló6À×jš‚Ö{a#¼Ž@?m«ªïýr={ëÀ+€T[jÒI™À½ÛGtÁL,†6,ꩆ^"‚Ð'Ô¾ +i¢Çk¥¡®*iý¬ „v²\w1†‰¶E)Q$ì ÿýˆVÄÑ´¢¾VÉÁüzˆçb£GÑ+ÄQ´ªq+~Gíï&]Ìæ5 äéc¿oüö?´¦“øSõ«<›Á„ôöøÁD"mæDhÊËÕÜtÀ.…i¶º&/€¥±i½L+[U^Œl i±”ël ÙÀŠkÐÄFÚj9_-?¨cìTØÕ¹Š4® æ¨«óÕÛ ~…‰Ú•& y¾š,ÌÖ¶'kf¥iúõKÛÓ¼¡ G[óÜò¶¥Î-ï"7ÕÊ%ܱk¦¦üw:™×!@KMé®–x!rS?üâ&~Bû¨ÞH™ôå6yd¼…–_ç:q¼îÙâù‹¤-b–Ãõ¬ _Ö„Då‹=p3‹´€Á¿=ufêL>‚0ð®)x™ÙÇ”1 ’`þ踺ʬ:J16 `BcÍòñø¬Ð?‰ý¿“äAJ5~Eê¢t‡Ãÿ«§‰ýrôT‡ ²DÃáõV‹¥:ýs5Ù¯“ÃèB‚ öÐ)SìXqüåóôå/Ô•Â,] þó¶Æò4XL”Þß]SfáÚ°î´îåðQÜý³U/RI¦ˆùÆóõ˜ñ|ý³ÇCÒ"æEò£ÑüGéëC?‘ø'ŠAî1LÉ0¶:f\äŸ<0#ß7 ®º^L Ɉ‡ö¾Î_À@ª¯©®´žœ†ûZÿtª?» Sy)á~_?ÄßÙg_Ï~#]ààŽéB›†a.õûf‚Kùí°Ý(ZÌÕåV‘4QtÁ4¿&éÏ•0.bŒïPUüq+NM•l©ÕR5>òV‹(ÅcôÛ6ž8V]-mC¸øqTY¨i)Ûºp;«~Á°“Û²f[(ÓÕDZ'—H3¹$ÂÛÇQâÌÖƒ7xo'ŸD˜8œ-æ`gï+è“Ò­CàX–f÷¶e£@ÏVÇ‚5Ù˜a5#Îÿ’<¾äwt€\w€äh6!<]Fš}‘M“NäÿPFQû"ÛZò—¶\_YJ]e¢,¿¾&l397ª©_dm“û‹Ãzez #›ÿ‚ûë„ä8UªK˜B@4ÍUw!/ó*hºÅ¥,ë}H”†æ᢭\tÔ›Ë(ù_ÒñŒò‡0ë,·Ô9ÛhB`¾§‰42–VŒDæþ*h9"gs &‡Žœ¡ršäŽGž‘'“Ü—–¶±Xá`õlBb5 +Œ°··mEþ vVY,×2iõ8‹K³¥b.Œ´øîi§»±B÷U Œn寑NZóD< ‡,{©‚šÜà!ÅQ$s U‹¬Ñ{›…s®iuáa òr-–p¯…r?Ÿ‘¤mÚ£Ý ^Ï”¥!as(ùCÜ°VÔ2Ó¹WF )3Æg…‡X‰bE+'×î+I=7‹žnYÄ›îëƼꌔި®©e"›~ ¹ 27íÊý;,à©O”™l[ ¯Uïgß.à%pü6èeêkÎPq^­$8÷mù‹<1&›Àï_Dr‹üR{àZë<Ù~rU£¨³¢%±¹ŒÍ®e8_›ßçm¢íÏ÷Ö½«“j,Û—²†¸X–ÊIÊb§‚q<“¯¶Z_Ç•*Ì qT ùÙÛ•61‘¶\½ùݨp­q}ïb¾÷¾*÷•ÕÔÒУŪƒ<°IaSÿÃ*þTüf hiÔ^ =`hl Û 5]’›ûÄ~ªeʻսB 8(Ž´±_•¶úUähm+îù˜J˜?G“ @'Üâq„°Rjl7©0Ìq´ÒÛÛ$Š¶™º"mÊ ‰pŽ±­ãðü5pEÖ™ºÈ«Ú £æàí‰úœ^lgxÞUb¯ñßþvC-ÆÊn_§pv‚i@£j ŽF; Ùƒû ’xßoÚ†7†mQÌŒø!¡/Ôni6Pmk‡ùB{ï;r7ÒF{\#Uøƒp·âÆÇúû/£æ76x½ëb9 ÷ñ¾*Diƒ. VÓá׸cêÌûSðz2;ºSóþÑãej³Æ.ÖÎ皶;„ѱëîiž†° gY‚àŽPÖ„þúúm(î O€¿säR5v‰ÌaHmžg÷öÃâ ½Nó,5e¦ ¹›+NˆC\€Í̬úõ=¦ÞÙövù ï›R-ŽöƶÀÞqA¡tçaÅЗÊp&½7ï;WW_O8Ô"DþæpÒ¢«,§ÒühÅ´ÁŽ÷£žhá©é:ïƒè©3x#̇ „4 PÆ=]óÔNh­¾&üp}MË}€`rÓÑnÇPs}é!Y@X‡áƒÂ§Ã|y—.݆ZÀðÉhëC¸/‡Ç¸èÍ'½¯ûÕ†éͶS|Û0Keb] Ø3>À§‰4ÿ˜:ܾχÓqXžÁdÐ!Å ¡Æ¡J.ÇŠz=1Ž©D~ 2Ñ{/>Ù¥î (ÐñÐéÚÔE»;Þ…‘Ï0=M]8€Ál=:Äåà¼ÀHaìÛ•´Å>®Gt Å¾¼´ é#X‹‘áöBO%m¼ØìÆÀf7Ž€µtc×,Ì–áþä°ÊÃ0sm Îé;¶XuùHïâÑ Ô âwrqî¢Óå‚Ìä¡´þÀbPo;Ÿ˜›ÙÆ[m;l>8A ùW „¸(Sp¼LZ}Ž#Xlß3Æ ÙCiÔwqûÜb$P@>Àe$/aÇ8îÊò¥Äà&¿ËNýwÞX>@]Û¥½£=»r¸ ¹N·âëôÓ.n®ápNë0äD9 òL8Káô@uÞ; Àâ€Ä"€þÊÈ ÷åÇV‡%Ù->¶rj°šõÈ †Ñ³†¬|`ÚPi63ö#쎪ÔGÑMojqø¼¹}[¾Vh¤hÑöà-5k6’â>DE)‚`|Ä™Sà—Zœ×]Þ0€‘¢¹r°§[Æwoúõ@oT—#ÙºÑÂŒµS¸%Ú¶&]Øu®®üWžÔe ý½•+y—,ŸIÛ;2ÞŒÔÿ•þûüRSú"££Mç9µ™!ù0 `9Óí$ ÙêÙü³±/Á‚ nNíf¤9Þ¢ È‹ƒíP°ü}\:œ-õ4:ì@](†w»[穪3µ7ÒÔ)0$ÿ™á½ÙÛ)Õªõø5ÛCèò~@wÈx Æ7QB©XÒS´š¶˜¸= 3Ø°µ«¥)ÓÍíE *iÓ©<40cY3¥˜Û°™•<– +›äµ:¶ûŸृ.¸™òÓ‘»põc©7Î/ÖÕ*ZNúíÿ]ÒX§¬­ï‘gºw/#õÓ÷¬f¶ÒÁ­]ž­wzᣚ°íFw ù›­‡[6±Ž-ÞV²í‹º/´ßþ÷ؽoðÛO í•þóL]}‘¥•m"›HûÒl±Y]m6Öì7›2…_Wøíªðœ³Ê1‚ÂÀp'h[Ê@ÙÞVžÒ,‹r'Aˆ¢ "ÿM<3øÿl&) 8¾¹Æ$Ö@á–àh©¿2:>¬ Þ¬=M™ö à–#—sÜTyðüY”~(õÓÉ-ŽÛ.áýÞÏG·kõ)éxCæ0×$ñÚÉÚ’ìôÒÍyŽRmy ÂZøª[ã·½ÕD”{+¦?Š'öÖ\+æ(eÙÖQVŒýZÌNOÝZymÙÐ!©®úå½Ë2®±ªYФ¯–®ê ̺ÇFí1¦fͽ=8Òͺï–`?²@û:Ì}GÅ5yÕûÑqnU~7ЃîÎz×%Úty„]“²eÙ™û]Ú*»V©–¥Ð=‰²m™“?àM¢µ!Xe½í`O…Ã{$(ö¿¡ˆµ€‹¹±ÛöXF­…cWîÆêâlíÇ:8Õà8@PÕ­¦]`Í&‹cÆz¶9†½SÊù(Æ[½ñôÆ.z)j ìê|½;xìðéIrr¤GË̈¿#7ÈñâÎöÈÊ[òìÜÓÁí€./2OÃ'ür¿eKý’=^OSÍs†ûp#õW'.ñÕèåzì•73bžcg)í¤/ƒ/dÆsÏÈ+¢}áÅz=i )Ü 2˜I""ñšrúUž.úé‰ëÜÒ«T¥é~ƒý÷%c#úÄÅÅÚÉÔ¬ç™âÕX„Ÿ>Äž,tJë•ÈÀ8Jš-ö²‹6 ï‘ùMô£J&"þ’Õ¸7”Ó¾>Å#¸­¸’™Ò™³“ Šìð¥tÏ9|F} +œµû÷Qªë|DÍ&f.0 çwB–Üsîjé”H}\HÍv¿BÎj6"¹óöÀ±pðÅjœ¸ˆ®£Ä ßDþLÿuÖÉ•1x&˜{ÁQ·T ˆî H$rA*{>Œëítâg±þëåâ¤ÙaÐ^-ÍêXPúÂìÀ㺤7Þ€@2ƒÊX{:ûŒH ,Ó9ÃÝq¯½T+ûÈ"å·œ$yNÓ\÷ú꬘}N¤Z£Þ2U?íUS-ŠÜOñ·NP§—»y9_™$ÂR»!¦OãucÂ$¬ †ÝªÙA3×GôÍJ¾@Âë`Á–O\¹g2ÐN37ù¤¦®™hµsŽ8$°ŠÆæùƒ´*>m“rsàVºtÂŒ…M¸bøÊ›ÏNÈ4qÁFÁŸ¡àv\WMÆZKGªu±\½'å'-t7£ÙaY è±·°’Ú¦Óª!Êy¯{îËŒ¸Æ]®Kœù³²¦ ¹™Áä0‰Q)¤ž/H$mg¡—<œ©åp¶ôÊKxîc† +Í·i9U{JWó™Á…@ån?ŸéOo‘òÜÁƒBzÂÅ;붹e%~—.¶œñ­>œ¸@/äZ¶0vÉÕÕÔ041ˆvÔ÷½Ý†ë_ÁeaîèŠb Æ\nQ$VZ¨ƒŒ²P8¨-C÷uÊç,×£ŠÉQ÷Ì䆊W5¿¸»0€£Á[WÅ_X>÷§©æËE6¢Ä½yÜÀÀSäR­ª:L¶[%)Ÿ®nN\g"÷`’cž ª—TÞÍEoÏWb®7~sЙHX1»ï= ãžTc2÷[ᮤ"P†oŒüáTù¶9;qYT¸ñþ9ÙâݵLå­En˜ ¿;;Hyž6l@#ŸöÙGh@çÎd0¥ØîÖ[ûðýxÃÒXjû-¨¹`«T¼ê€‰}sHÄ9½M5ƒÉYFQ®úphvÒÊ–ËÅPþ,ÇúÐ[8–¡†Á[Õ¤+=¹ ÂW÷ëùÉ·|Õ9“lËÏÞu¯ˆ²÷&A”I)©ÿò]•{­ʆiãEþ꧈‹Û¸´e™¼OX*ÂRð(¥@ÅÕ5ø5Ìo_3¸5ÈÅmÃhÑwÞ°"ð¾fÁŸy¡BX6;{f­¸£Y„¾Õ_ ŽÀ½O°•iÎxìã–y1îÜ>±®ÿÁý¶ö >úÒÍ]Z÷ƒ ¤ )8–}¿WÎ6êÜŸc8üvY; ×çàÏ=äçÒxñdt ôb1¨§£¢ÄšÑ©§m6n3ñ;¸édA§ÓÓ¹N6³óerš5à zZ0úX^Öp”½€€X,—RÖf)1±Ð ÄÐ5§uÖî© ‰ot ÉÄÅÏXr]ñCQÚÀ‡H‰øŒ$ù÷˘IEKç68€Æò=<0 c!…äH¨ ¡¯ Tæ¬ÜõO#ÖZÃ3ÙÚ,¢Î½ñ#]c1i‡;»¼5+7dèý|Ù9׳ë'wg¯oMb¬k!þÓ¹1¤Ÿt€mÃ9½žYú0^·k[ŒÇêÁ$¥ÑÍŸ2+·© ‰jRþAC”0ɶK×XôʺmDPöNøú›zÌ‚e?/MñÂ]¾I¼—@ˆÀB¶wir-’P¹–Õù°Ÿ¯´îvˆ©Yª1–W_žoÙëT«]žå“$9.¸ +ÏÀ'd½œÅ1\]¹ÎN\ùçeËŸŒuû:Dµ³Ãï{°µLºnúzÓpÃ^eW0 ¼‹:]û‡â$¯°— <¥€%‚&ÓÏrª1óe2}-ñü¬Fqíñ±»J>Å,ÑK2«G¥ßÂB8“m· \ªý¢³møG„3=™H)®sÿÍ^Äí§[12ë]7RüC°¸Ï… + ˆ¯õ¶5VKdL¦»Ã¬ìÏ5öùQl©×¨§™ÃáE‚ãü bÝèˆG1ˉë×E-ë˜jþ_µ1 çc1r 1˜Z/{êνð^'LÌ CÏDûÓñ æŒíõ¤â/ç³¾~yƒN¸©í0Œåã@úw‡ÑØOþ þî0:´vÉQXfåÇÝŠÙršóñu‘ØÔyÁcˆ½…lILü»¾Ó¼ñá(·ÐeþŽêluEËeÖ:»unÔu9¿võ p(¢;qY:Z/NÚë0-;ˆ¤•Ìè>¢w®úò¾Ùe=ï«Obù,{G…—2tŒ Òr6rS</®‚'.Ú}Ù¹Òß«n‚¯ºu¢RîÎâ +Q뙵5¯bÄyì%=™µ3Ä@Ì”tî¯n]©Ú<]L3«4A¯H¦9¤aÀ/÷O)1V™¯LqO¼ð|Ë/6K°¾œ‡¯çmé͘f->+ß:€ììf‚& +³YµWªYè¿‚°)®QÉk»ˆ:z<Üǽ+Jqµ{€_œ+De”!ƒÞŒˆ¨Í.fôaÌ'®]¸7fC ¹4hå!|â2ðù§G¿3Ÿ›­^(—8Öm |¯r‘¾ª'AÄ~;½´ðàê²ÙF"§¿0튪™Rvrdã +”ÞÊ\_礗a kß Á/, w‘5ï-Èø â"÷–½¡×ÚYOV4'zÛ\Êí2rsK^àÜ]C‰ArsþZ;2-c±€›³÷Äõ~þCÙ Íÿ²5wÌ^KGàìÍ€ »:7!fÓ•ç‘HÒ¨=`ÅŒaîfx¿žhëÔgô‚ +y·šµÎÞÐ}ä'tDc‘ ø¹ÁÚ@¸BóçôS²}º\bñ‹—[oÙHžŽ„Éb;Z€0áÈFÆ´*‹½UÄè„ }ÄqÚt;Ø|6È¢¤`¿ÚÒw[_Z-V§±(}bqÛI5Z‡Ü 7_Â_¯ÖÆ°ÆÆÉ¡™ )ih›2ë]ùâ0©#:Ý(AÇšîlÞ¹Deé‰àñYУìY.ë£&[Ù‹ÅU06(v‡Éh'ÒIµ²CŠú£ü‡<Ç…;ó&µ¸ÎƤê¹nËãßÑùpJ* ‡j3[¸M²år‹L‡¢òÜtn8ìG´Ü§Mèõ9ÝO€)ÖâéH/VÙp£JF/_ÇóyÅ9ò³Œžh×Ë*¡·f,íj•Í®õ À}õ¬Nšœ®¬í+â àªo˜‡Ý½´×å!x?4+#žÍ¶@°E¶±…»—íˆéIÄG¸Ã, eŽÃÍ9Ò }3$G×0[2¼ ¼è)pҜ庑» [ÇœI ¸g‚«§jÑ\9KÏ-Þ¡.™ /{¼®ƒ¦Bꆫó@ô9©?%Ï8û}¬ Ð-Ó ÖÙ((i)÷N€‘)‡sOR³ãß{vžÙ‘È ¬ë u¯wÎÝ2—™6¹ö¼õž ]c ¢èdæ,› ®¨ô¤“g!û<[¨ÛP¿Š›¢ò`j~ ~^2;_Ñs††œ`­ô^@À|iŸ“g‰y¨°˜»ëuï,}¥8'°b`ÉÃ$¿$:…Ô¨Êäí¾ñýF±› y=]˜‰_LJqœÊµR¼ØcTxM•;éê;,@Xœ÷ñÕô´–`·Æºg¤º›·n¶òâJ Xö ˜Èztl° êäd»|£¬³Ñpq,cm"ñ6mhO¾÷ä ¤žUJè·–¹§+¯U½BÁ•óÓkâ‹—iQº/œéºËŽÉ½$&Ï w3®oÏ‚âèÁ9Ï–/ãbü¡¶å…ºò*©ú}â!Õ\µVº£Æ]€b½^‚LO^ûc“¡Bª9IFR5q(dªá{`˜¼ÏÌ{½ ©Dº6ËlOjµô$ÏâãÌ'ÇÏîÔq‰¯oRZÕÚÈ(ãŸ[ºKv£Ù1U».æS 5þœbK±.ZÜ 1 à²UúÌwêêÇpƒùrêìÒùLêq˜ÏœÇ8Ë\4Ü ÎâbÁ&€¢¬þñÄP|Õ<7»°@^?‹çg×€/ïç˜'Å7ÝÙA*<‰Ásü=±œã[|,ÁõµZöQ¹u¾ÇRõ¦šÌs5ìË»&ÜËTÓ™¹HÍŠþ·üY¾·8f¦{ë܇+#oPáŠxm§×9oG©—ÊY¶üØ¢ó^õŠ´‹©)¢Î©îŠè+¼×À»¸Z…fÁ–³ÅýÐë«.BÙRé憓¬|öäH]ù#m  +GNè$‘ì,É#µ¦ ˆA6Éä“ÃøÍV¿e´±o9¨ò¾M&ïhô"<–¶/rEgJ‘ž OÉnÎÓ¾`,g6êÀ 7®ƒ; JL¯š­;ØG.Ÿ«¶…C€¯•_©Õ.yAñ‹éS¼ùàšÔõiö¢wØ HÖ#€£G€%*qs!Std1€eíƒo7ÖÏöŒy·=RhP¾h5@ߧZ-וuƳã·Ìeîj˜W§0&÷œ¸(ßéÓÙ††múA[ž”,e }ÀE¨Aû½>}OÇòæp•åÓ\ ²Æ¼ÓyÝãÁ¢WÀ…~äý¼àÊ·æéÉT6Õñ 2’Ÿ^v‚º;OÕ<¹Ç«h… øc©†]C„Ù¥‹ëwº¶Øjd.³‹;hÒ±òiö!›O¹/’gÅLxøÁ ÌrZJ/”…SÊ¿‹// Pkƒyª1‹¸ãÙ¨š-õ¯–Ù ¯7ï³²}„J¸ol×p=›d‹ÎŸïéöºÆO¥ª #‹ãjç½%é&¹ðÝ8€}¡JÏ­ÓИ*FXP¿ã[Ï«TV@e‡,ç8 ®.ñæÏmk/Sq™:ËPWº¦ZèÁäF’wdÑvÐ‘Ç ßì«g…ùéSȺöí÷{­(%ùëéIˆlnînfÙÁÕ2½NOb˧î*ÿò¸Á 0” ÑW'Îqo¤ØÞL3ŸOK (Š°®VGB@§kojÖ®”Ÿ¨i>38§-Û^6šm§šìÓ +ðÖeÕ–úÛÔc×| QÑN'_+`äÓÎFÈ ©üÒŽáœX¤ˆ³Ë¹%9‹ˆ•öœµ²~%ÒþA9 çlÏ­¤ÔQ ʘ9öQÞ`Žîvä€Sšî¥jå¢]Ÿ[Hj£KWŽ\ïV¾Iõ5ɽºÀ|ɉª’{º]ƒ€&t»ü…»®Ý¿b“Ъäö¶÷-cj®ÇùØtÕçSøYé*€L†­4T½ÌøÓ»\èV¦™²p_y +¢\ø¹·²tf“ìêÿŒÜÄg¶âǺÑ1”ä ³mi‡oO*`RM§ûš ¯2£dXÀI¦“RS¯•W¦¨ßUàìǿHs0EáÉõVe­·Jl`¾€Š.öQÔb¤dïÄdç*àF»¦_62ÝQC¿S³s{øzœ Ù û€°tOoûù)Vª\ôæº Æ"çý||)¸€¨éÚâ‚BwÉ£WßCÈ2V.ê|rÕ€æ] æPk‘ë%Š ©k÷üT¼ÎÝŸŠÃŽúUd`d±?áÝK ÿ'a~¬¸¹1‹ÎÚF{‘Ag¬!ן*✖݇v-ÚíöÜJ¬_¤Ÿí·‰ÔŠb,/¹´xº9¨:+tìÒn×:„ÝÍÉh-¹•|õá›P»]òîBeþíÛ7»Ý÷’µÛý‡Ýî½:F`+¹Ú·õÿ;•Ô®J$øqªÁÇL1LÀ×øã +é¤\@ýqà{6Ù~|óz̽ôJð1†Ó´;‡5 ܺëEác=¦„+z~x°í³”P€_¾8|ž|ÁNÁo?r4 +®ñ% ~/aí˜H­|De³Z€!½Ígdí >^ÃÇPî%ñæ…?$ðGdÓÔ¨«¡G4ôŒc§ë÷@«>Æ¿ù1á'ù³ì*¦+ç~: ÕS­·Ð7i?hí}ÌuO£÷p;+[^ÑOˆdˆ˜ÀSDĤœö•-ÑU*{z%^ÚdãÛ7 _Z’ã.”!× +ÝÞQ9{(Mƒ'.ø±2ïz 3Ï?¾Ã…–·§ ÓéxF… 6(¾Ãô”Ÿ@ñX1`QÈÚ3xSj¬{Ë#iI_5Ïúá2LÒ·wT£îNç"NöǾ=²‰q<çVoü…ô÷’GûÁäÛ­’¶ˆÒºÕ3Ø®eø}÷ø èÑá +çRãÊ=¸Eµó°BÂ@–ä*ùKŽ>]õ¾}‹Œ/Êö@b©ñ:…fQ}cÑ°| 0­a¨øÜÝ ŸF9ªHy`øé=y½Õ›*P!ÅÐoÁUª|ë>üÛk ¯î‘i>q!㜞°®î†¦áôp\]ÌèL ÍÒ9jPH‘ZnQí"» Üú:›®VÛ,żü†dø›Ýé#Cvg¤7µ;úÅW»=Ûa€Ìj»ýüb ûéÐyåó?:ì¾Ë›7»?*ú‘Œ#¾}ÆzáPœª@|ã:¡IøOC¾ +AÙ¶»í÷cÔî f/í§T kwñ`êºã5Ⱦ'JìÞóɽݗkªv9¶®i{°ýÔ¶‡r¯öp7ä³G†JÜNLëWvrÁËvÚ¹<µÓ«kÎκÏ.ì\ÐùdçÉgÍ.$«´]Ì3E{ôÚþdõz€Cö¸»ÃÛ‰‹šý¼Ú“32`OGýY{æÞùlϹµS{¾þ–´]ó{©6wÚË¡UÊ^‘\ÏöËó€Ï^ws%ûU7¥Ø›¥*c¿&n®ííÕ«Ã~£sö»çø`y¸¹æíOW“ûK‹ Ú»íFÓÞ¿™ŸÚýDÅ>R¥¥}ì&ŠöiôöÍ®ÖÂû[¯óf_©¢Ã^’Vç<]u¸ÓN·Ã;º¹v2ç„#´p½8ˆªsÐduzâr°¯Ñ ‡péñ:bÑÙƒ#á‘ÎIíöÍ‘5šŽüS™q”KGå¡XsÔúUÆј\Í×ËvËqK€vR‡ã¹ivt§ó V¢Ê5h`êœ?:æu¡°,=לÓÑÔNnæ|äô)ÝŽ3Ôq$Iß +NÖMœÂTZ8Ï^bg²ñzçÌ^^ÔœÅ&‘wV:㸳þpÅ8[¯ñóÖéó8ŹÃ)Õ%Í)›Sç+U~=q9gÌȹp§†§ŽÚùàÔÌ OO…Ñ)+¿ž²öëé©øðüvš(Ïí§™,é9-Ò©Ði5ÐaOÁEü´ŽN"íú©uÞŸªåÑéøe±:/ a—=¶¾ŒË}sYqVàó]J3·L\g—î„+M š®Âèj䪖ã>W“']·Žåëi2~sõ_ÎõúüRwͽ©ÛÞ—·gÜ¿r‡ÝÓ¹›á1w´NÞ»“JÊ{âr¸vÙ]½ÏÜ-w0î¾»*tÝ¡0î¡ÌÞ»gÙNؽ +ù:÷¢ò„äȇi?†=±«Øƒ']VO©Öì{ê‰sOGñÎ=O«QÕ3ànži¥ôìYŽ“ç@ÿyq»7<o¼œÈE½ñWaéÍåc7Þ*ЊÞÖ¬éö>(A}ÄŠŽn ûB —Áì$ЩÞhɱp^«B8°t4øWÐûìL©|é2xRE^ Öz gðö±N{/t.8íŽ;!Ǭ5…\‰@ˆ†R¡Ôå['Tž ÔP›} C/jhnŒB«á¤ï«aÎÝ„“£9À.·½p»rv–Ê×Åðäb6‰8.è³H¨ÑèF„¾“dVŧH-º¤#w×O ˆlä­þÔ%¼ÞÔA_;ÇÄ9+剋eÝI´‡Ùѽ¢Ybð’®’Dä$yé‹ñ¦oD–$¢J^« âOñ4I¿V†ãèÔˆYfLüŒw3·sã?]2òíé‚YЧ 60ö/Y±Ã;ØB&ãb¯#5Û ö-èç9¿?}Î äK‘˧#M®Õh>s݉w½‰·nÞÿÀp¼èëç=+<•oøv‚ó}Mõó‹>´-ÕZG8+çB9“f„»DìRPÊÉWÑYKR"%—ëbÚÝž‹W¹Ñ™ø"Ÿ‚ù.œ£~åö*Í;ì@g¢·òhUZñì‰+vZž¨1&SÈDzYÏ"ÖÊ>VbýÎ…'¶”ˆÎáu²gÉÌ«rVõJg’ðà;{ܽÄCç·™xÂß÷Å/¥Q/þÜ>-Çç,ÊZ"ží>&.ËþRâù® +¸Ÿ˜+s÷y(”Ÿ'.µÇóÚ¼R?—òÁì¹6—Äd¤Vˆ$S<íI6½.{²?ÏSö§ÇqŠ–î•T®;Lu†AêÕ#@Œ9~M‹W«iº<'´ôSºàLϵ^DäáK?IQ•D¦¹\^dÝB;{z³êgùÚå"{Q ‡³Q*;©6swBÉ¥¿/wý`Oåÿô6ïé¼.ò±ÈHÌ_Êãë|·¶\ìQ_¼À†„§BÉw °]½já-àÓŠ„Xγum\¼åÅ©2,[åD)åó½–®ï{™Ò«XÐ.|+êò"!;ÍÖèñbÔ–eoí~QŽß=µË Y¾T–¯ ÝVâÏTúÄUizRþʨ}ÿZõ‘öv5¡¤3ÕÖµBU_Ó1ûe€Ž.S\îþ²Ã://§gÙZ¸šÕ²OU»w¬‚µ·ÜØS§F’³^:XÕŸ—OË+ûã`u%äUÇUMô‚Xùjà| o¤N4ÎéW¾Ñ"çéåõE3"»¯›…H£Û|ªùæ-»ã!ÐZçg­zÔ[k —ƒîµ¿×v^§ïËÑë»fòêZkÅÆmö)N¶«£Dµ=pç^;¾tDKÔppݹ\ŽŽ6Hän¸âãëM-àÝ ÇÕÞmà唿Í>^woï)áÎ.)ƒ»è¨r~× +FÕ»iÎW¹' ÿ}™>Ý÷Ÿº‰_¼gȸ”»‡‡î<ñh »O\±Ëh÷ñúªYyT[þ‰‘8çSÍ~7xRxÿõsøú:÷\ò’üsïfxñ1¥ÕKfFŽ_žî—=é´Ô}ΓíŽt—¬7¥U©~Õ5êõn»ß®w5·Ñ.—íW¯¹ ï{j¹$õ¹àðµÕ#´þ´}ï“™ ‚•ëñ»´<ÉĺøÖÔ:7«Áx¤‡4E—†µ¦ûy8^¨ö}5‹ê‘i{4kšÂ<øbÊÕuô^™]V€÷ùÊÕ{¥×æC`ú:–âcÑ=éÛÙ?^¼Î¥ÉYîJ˜Ü®Hy긙&¦É³ætúDå/f¯è™å<äì!âj/Õ‹"ÝQGÝÄÙœ"jÎy½ùü2Wp­ïMxI°o’äÐìtXÖ’áǶöìç Ÿk nDµïâÕuhûÁQ7»>ØTfãÉbî­Š7Žú)ÍÆ6xï½åŒëÍF[mÏ¥™q [ì=æ\1Ÿs³¾Q v’äsZ*3x2³ñî}ëh-Ùì 8ow#D$P ÎGKþ¢˜³«(m¾¸2¡1ú¼µLgba ·pHÙq›0ßRxƒÙ}Ê„·G¯wÀ‡ ú’ ¢¥òø« "N„>ñ¹ Z˜+„”9¯½$ˆâËÅ9ì’€>xÉÊZz• T+l¹doo³ãpdÁ£uw0×ɸnSEnP1i+¡€fÙ‹)Ån³¨YÖžñÕp§Ðß©×i´Ì Ôdí©u?Ë1¯Æø* M£€D«7»ïìÒƒÉ|›á`“í¡ˆ'nÍ®^ì^¸¦¥`wÿž±ˆ/­B<×IËdd1<;qÁUÅì]ö|;'…pÚ7u73ÀÿÎæî_éOñ38´+éw3Ç3o½A¾Œ^‹pà×sÿr¨i÷Aøx»‹M‰¹ïlŽh¬Rj¤7†‹ô~5çèÅ‰Ë +ô,gB~Ö¢¼âí)`9³pöL{X €YXéD¥U£Y¡@wbÎx,Lt\;qiZlq§=Æê5"Â4½VF ¤ò¹U‚;‘>ÓŽH9ê5bGHÁX6ÑB¤]í)èìFz™ö9¯ç“Ê.¤ ç—Þ…x—m1qÅÏڻƪiŒï&ëÕª»j«—¨×ï:³¿ìBJä‰ó3„Îýí±rÎS!6÷ ½} ò­ôÕΑ:ò󨫦Tá…Z—{‘ò‘AÓ³é™Ý§-¢ É»ÇZ.€.¿ï.<‰[rRvôÂRˆE¥ÇÀYlº=Vƒ«ë|ãVÕ]H‰|ù*½)çt±{ŽìËŽ±2·ÏD^mµv#-œÆÝyt½iáJho!EX0‹î=<ÂHsãü¾…'\@¤þwH‹ÏSöÍ?'R~¾´Rº|³£½ y·ÆʳáðÝn¤Ì]š¨L¯øÝHKŽ•P¹í k¤ [£­Mäâ^¤åðÛ<¸é}€hVÞV»‘–é'àçóçöcm•”Ò^¤Í*×zÙ‡4K´‰'qJ`¢­„œ­þ³?¶iû)¾Ø‹´í•ŸçûîÐyz÷X+¹@')h™Hï‚­§½H_­JzȘíGH4ÛNû¾·a¢•¬z·Þ®)vÏ×ö·ðîÚgvB[Ùyýí{MU$Ú×ö8~»=͘{¿íaè|ßû +Ñ9SûÞ^.—Ù÷¶NÜ9ùGƒbïß¿7wþ=µxâñuÜ÷V$ž®côÖÛ5Å’Ä3÷,î©ý¬‘a™ÝóVò’â UÝó¶ ´%™v?å÷½o’å+ÇÅž·=•¼SÊž·}yûZvï£û4kÅΖw»kS‹ºÝ㻸Do)OÂ[Ü|›²‡‹É~kj>“bÔrb?c.^-ï3!Ãyû­@Z]\býƒã3&Ø€:) äNN#Õ“‹§¯è—UiÚ9éJF–žL¾uÎßfïò·­ì]î, ʈ|&îe2éH9°Žß€fpM`ohŒÏ‚ÙI{P(ˆ´Œsî­þX¤*ÌÅóR8+u´Wï¸êŒuôè—.çÑ#ábk84÷÷A2•£Zd|u ‡µUá6³BÚ¯fNÝü +ÄÚžûÌ:‹ƒ|8¬\ Ê®g|’ ^“AóϽ5X׳lóMŸÿ%0ƒM4,)ÄDÝ­ÂîAo¼™´ª&ˆþ‚u¹ÐÈÎŽÕÞLãÞd¡†©{òh+û” ×uðèv餋ǬçÌŒ‰ €ï³dîqQ° ×ì0Ä’È‚USûí[¹>0 ™ š7Ðåtd$g]ðÈs¢d’vuÊÚî”Ñ›\ÿÑéIîJ"’¯Ê :ú£ÅÕ;ÇW·߉Ëfã0¡Ÿ\ýˆÏ+¿1>Óàñ­c1]¨L&ï!ÖÑü‹Öò©[±ˆu ±àÂ~rŒ¸…Ûù÷KÖZ®ô± É"¤ãö)¿E÷-!ÝäËwRž8V39¥ bÍ7òîaõê¹ Î7˜£ß£z€ÛÃFÁÒ„Ùå Õãs#©ÜM»ÛàrkV¾ëÒíèN»]+ v¹‡¶}ŸÚÞ7+qè²chçd¹òƒCÃV .ä<‚Ôð[X7^MØIãB}ºkTØŠ­eÞGµ[·?åy1î|ÿ€6%ÈΦ wËy¡ìÞòÕ7Ø”l‘Å´•ßG˜çýVš—×]r,’Œ#”ußÕØfS–Y‡räüݼëRoß5ïöͺäàøô cá<‚X'>r鎞Ÿý!KÏ×[M­}˜ïnìUnÛ/<_5¶iP~l€/¨±çíæ'Ql‡W÷ãD½w?b[íû©çµÖy˜eâm+p¥Ò7O‹ß㽡׷'|çÐî6ÐE¸ÂR<ì^Ÿ¬ì¾ÐØñ“fe®‚”¿'Pöí¥}+W¶hcz}GRç;Â> m¬ž Îsøè4¾±ìR +›óeOW6;rtÔ²îˆuõ wå-pTG¨­Žìö-? ÉÓ~;2Œ¾™>Ì–‰Z&[öî£È°Kû¶7™›Òt¯oÐýy-- åŽG°'©A=.föý>Ì.õ±o‚¼–>r;tßò˜N-¿GÚ€—~šx-m)€ãý½ã[<Çjlë~˜]Úå+’ÚÝž<‹7»$ýé×üϪÑö„üÿÙ{øؾ²î÷ö‹^¾üéœI2Éô™=“I2)“I¦§Ÿœ$'9éíä$99é‚ +¨4ô”*"¯ ÒE¥iRDº EšÝ«÷z›w­µ÷Ì.³Û”œ•ü¾ÿ‡$3³gïõ¬õ[íyž¥ô…ÓøÌÉ‹dð¶xTM÷æ¥ÏbTXU6qƒi-*2¯®‰« +KÝÄC• |˜5pÑúf³nËÕ¥XkOs³Óµ„ýa“yž½%ÙR_9 ˆ V+$ÖK²äÑ„vÍ£)Ú¾Íe’ýáØÀìôXUËRSÞJâ(RïºÏ0ù–ÙùÖ¯î´}ªéºA/6 Ÿ©½†uZ,q«µ>­¬× ›®×(kr‹f­A3˜–škÏä©f(˜q[,&²ËÓ™¸Å`úp¤î5³&7¹Ámz?vFÂôÍ#ÚnP1Rª¶#<Qw„µµ—™~¯uQ›ÖóÃMç§Üå±½M†ä.u¿gñ@M•nûRÝé¨WFäÞN±Ã[KÁh::Ýb!]“[Í–Žº£³ì‡*DzŠ‘R;ùî–vÅV,ù)MþæÑ]î®j +ËjòÜìOä'÷ {»òê¨Ýõ*z1ÓõV½ÕV£™¹XõOSSi£li²i]¥VózlÔø&×ñÕÛrÒlÞë¯û:ô*ë4¹«¹N°ºµÿr¿§òê,],TãÅ*—Ž^igD5✛f{ Øa —*w7²×^3´ÑÝÐû2Ùô1Úã3DÐŒjw¢¬†Ÿ%E“z1õà½L]â^¢‘¿õÔ¨hš’¹™F(Ú¬f·:¦3{µ­häb6­Ér‰\¬nE£ +s²«»íÓxc%²ßö+½ìßbþ®cGC¬ïF+5ì½²ë„õ¦õâÖË©IcÚWªFÊNèdÏo2ƒVn†uÇ(’£WÙ»ƒÎy|Z§.ò7;†°Þ€M3ˆ¢… YŽÌæfÍEV\·+³³†£zs‘ÕÛ{¥«Ýû¡Ô˜çå¹´X“k P«©šŒ¯"*ŒñuªÚ^E»3RëuÌ'ÔM¶¯cåg6$Wµ}v±†­U·“n7ïg}¡JÇÖšGêßÓJzSÓÖ4ã£s¬ªV³Ø·ö†äbUï Ö`éÅêßßšãèÅÖšÇÒ‹‘ëؼZßM<ˆØuª[¨S¬'k®#TÕ÷…Ä`AÓõä*zC©/ìñ*úÂOHÕ×’Y85t¢ã1ÙyJv¤1|þ`x_ª¢”§Æ»od²P÷Zµ|)b—†´nv1ömäkmRbÕÏõk2±å¬ý™ª0ÏÉK׺+W6Üé4·dQ#šÜæÍKÓ1E‡æ惚IZ…ç„õz²aÇ4o6I³ò\«˜ï“;»c¸ª²q¥C±FyÛÒ‹w-¥Õ›»7ôb5Tb£›on«fˆá7±dÉùÖb V¼˜Ac_?1s¾UÖÅn‚éM-¡ìøªª×.îÐ47¹Ýê,Ù€æÒ8NNÜÉß][É´lžes‰ÖÔrn:9™5Œ kr7&†ÎoAWŽª3†Î<‚ŽF 6"†®òK•t:Ñ‚5ÅЙGÐI9UꎡÓûR9‚®4ã«7†Î<‚®”S¥Þ:Ý/-GÐéG VCgA'îðÖCgAÇrw4 †Î<‚Žõ/ ˆ¡+I†~fkálöfêê¢ço tTã-iVzÉMY9nØŠ—R-1±‘=k2êѯÁ‭•ÞÉöª|É÷ø2j‡ÚËIe£Ž’úxÅ”Ë$Ì–?žª6Í_ÈŬü°l?ßüa“[ï «>óªÙTÍM­˜‡‰ßREä£ÕÊ•É-‡ÌÉ‘\VAsö´f9«·v¨ã9l@5a8á6vÑñek\6Ö{46£µöR³x´ÅëêMn«`7µ'dM‰‡4~¿Îcìf±àÕdc©*k:æ·³áÀÔ’Œ‰3ˆr"b9 ¡—ªŒÏ’ýÆ­/¦vÁJ®G4ƒÃ¥âª5y=zfÕz+'½ú¾=ä¦V,\(m†˜æ¤5¥ÆÌíédÔð!i{1X:3\8¤#Ý€z™$O &«¼¶j0QÕŽÕfÞ¤g3‹+ÛE~û^÷iÃâø–Ï,|àíúÙåµÛ{•#/ŸÚÞø¦¶ ƒ`ì„*Vàóf>ðS:!šÆö³ö·Çg9’¯"ŽO³‚YKe¼ÓéÅ,lª¨Y³ÚóŠ=‹j.foS]‰ï^ÔPbºþþµ=d¬¾S/üŠ)"UŽNÛ½±ºzð–ŠfžØ0œ ©âl:¹f“>m3Ì.¦Í PwoUg÷¢!QŠgVe7­Á5¹ýÈNËi²çšÜ®?_¬n4ž¶ëÚ`2؈lÀì:¶š¡ùì•]§þf8«i„5æºa×±Š×fÓ2t³ž­H1c•mJwUºœ­‘o{¸Å €;[\‹-3±„®€Ù“ÛÔ+ðĪ´ÁÙ °ŸJ±xg›ëë¿o¢eËð}dœ,¿³y¢ßeãŠÇg+{ÊpYúÌÑRÃ%Ÿ xT§ËQE7›TY»ÜjF°“mûl‡HÙïW¬¨ÖÚs¨Yv2سP¬šŸc•2OÕ¬õ¹2¾)Ë3ZìEù)üÇŒRªõ¹oV‡Ø}>­s¸Ž²ÍB·šNo­Ýз§æh:½X:ë¼ +ÕFÓé n¤|J Œ¦Ó‹¥«È6_w4â–*27.šNopªYém@4žýT'L5$šN/–NÿLáz¢éô.Õänt4«?šN/–®þÓFÓUYb5FÓÄX58š®â뱂zlÙˆh:õÄX:EÜ h:½Ý’òH©aÑt&³×FÓîŒ44šÎ¤i`4ÑÚxc£éô +£tNbã¢éôF‘:çñÕ?ì9ÑL¥óÅ fxHe“[wçÖ8ðÉnì­j5§rtQïyuŠ[2]Ôw^^ýT튖“åɶºå$—R)N|éäŽen¯ +èC«z¶¸©ò-Y†®«nÉôt¹ÊChk»¥Žê²œ™”“éé³: +crS5HfZ:/©tS±ÖÄ^X=#ÖΈ*ݬí¬Ì5¹mtg#fÍÜ_¢ÉþŠqÇÜéœ.WyÐ]õ¦9æÎèüJ«@ºdÏÖtWãÉkºæ§Ì˜†)UqÌÉŠ¢|Ð]m Š²‘vÞkNfkï˜;‹Ø7[›G¤_h1f;y®Fgq8Ò %òh ˆå±å‹¡ªŸ:‘õ=×]v}ë'±yL3¯¬1ξï¯a_IcèŒ8ìÇZG¥Ùs"£¥Óe«&ÛÔž#µE¦Ì4îÙFž`8c#ÁFÛŸ=¨þ êŠY;x­îỊ©Wg5ש?K€xzO«¥S; ©gIÕùª’b3Áæ/{U6Cò7› +ðéÆœpG¿¥QÍÐø„»êÏ­®å„;ýÈǺ›¡æ„»úNʳOdyR^CN¸Óf9«õ:æ~{ÊþÅ*>¤öî Î{-Ÿq§h9Õ8ZD̲šçØe3Re`­Ðl+Vœ%YÖ +ÍuŸ’.F>n™'ß²ùh–,Çnž+všW³9"n6$°ö¦ž£“î\Ìú:Æyátƒ˜˜] âÛ+œkª<.On„â®h»Žs –š1ïÀl1ÑÝU…1™†äÌ1±^Ì~Sé!× Ó¶3?%ƒ0¦öþ;6ÜíLÛé¦ÏF«´qלáܽúyåÊqõAL+ðìôD“ž¶º!¹%:û6\U¨>Æu]»ã*þ ͳ6Ù‹qšÛ<32¬(M•ŠÉ‰tÕùÙÉE©7[?iØqäRtùØzEÑNŒëú‰yjªjÆ0éÅò¤áâ¤ÞÙ‚+ös'´ÏyM—gõlãJnÉNh2.,±{DÉøØ=Ýï“l0zr|=m•Bô†ó4¶ošþ“jr»ü¡aØ—fÑ}¡Øh¢µl¼6ÍíI?©BÓŽO÷±²}ªBÓ:š£= åÚ…ú¶6Ãx¸ã³Õqž¿/º­=qŽ)Lé6ãÓõ:æo™s·+~i$w{ü†ªŽiÎa†W6Œ¾tÓ춡Š/#¹QŽ-w¶dÔÆþ%Z÷ËOª‰‡óá‘âíª”_†—ˆèÆþ‰QŽSûÑe£ ÷M†7Únø¥Ç'3I—á—ºRKÁi¥gùÚ­DéØO’!¼é[›û*ë¼oùlÿžùûX|egËÑrvnÂòŠñ;R½“ºI"³8¨t–Vd<ûr×Yö¸Ë R¹£³é6©Ý ’N1³ë8iÚ7gè\+§·Äd¼Bbr*ž‘k•á-éîïgªt­2lÊXeη¹E•1;E¹kc%i!cõÊÐtŠ¹X¦J×*“0ŸfrU{Tš…‡¦ª6‰ý¾ÙÅ*ý´ª>z&×`¯¥OºÝ¨;/­r{±_èUy³ùã±Ê›2óÓªæ–92¥rš-ÞO¥o¬Z®t’a.gõÖ˜k83%[}:Z1ÿ|àÔ|kwq‹Üæ¬ËN†CàlCvyæƒ.5ÖëcYi‡·þ`7Ó-k{y­Y` š’ï(´“¦ÔòD=ÛñbV³–¬©—–­õ1µÓˆP¹·³=²ªçöf-ר9òz¬Y£05ïzÓ5A‹dWzþ–F«*¤°Ôëü¶—ìÊ%¦YUÙë>Ô+£]`¬b<¢‰ç GnÕ’iϳ¨=ÏÁ^·qžƒêc¬Ö«ÉsPqKåþe/aœçÀÆh\uKw´®úŠñXµ¡€j½7 åGJ&¡€VGÛ²Û{í>¶ Ô±]Žmœ•fÿb–§èTDך]Ìj®RM‰YÆòØH½ËšKÌòÃÙz(Ÿ©Ž5ìP>¶Îoï¼:åSŒúÎñP>ËÓ²r(Ÿùù•uʧ¸%¶ª°eØ~SâýX…÷Ÿjg¹êSýêÉ ¥<ׯf_¸ªÎõ3 707”É©~ö½mÍÏõ³ë§Tß¹~Š¨»úsCžëg¾*¤‰×z®Ÿù©~šÜP5ŸëgR“ÙèÂ:å³sýÌEzC5â\?ýÇ-êg²¦dw‚ÏÎõ3·d“Ý]‹sýÌ­|~eçú•¢îpˆÉ¹~æ¤êÅê8×Oe¦ŠSýjŠ¯¬æð6æ5I¬6üHasuð³hĹ~Fþ7â©~ ˆJ³±,l3•å¹~æS]tÍçú©KÛÒ ºÆsý̯b|_uçú]ÅooÞæ¹~æWijй~æ*rDj}çú©†š§ú‰§3Ô®_¹êžê§ÎCRû¹~æ[‘¥XžzÏõ3?ÕOÑ*ë:×ÏÜášÍ,p®Ÿù©~åî:Ïõ3ßè2Š­ö\?]'úò©~uŸÇgkwØÆy|ugñÎãkÀ¹~æƒxÛÑ•çúYÆ=˜xÛÖx®ŸÑH^<Õ¯"Û|çúéŶiwë?×Ï|8_ž¿Ôy®Ÿù~sé,ÎzÏõ+•¶~ŠåêÏã«ÅICï<¾ú›¡öT¿zÎã³?—6ÎÞPy®_UGñUD¤6â\?É-ÀàT?:kÄbæ§úU•Vû0G[Çj=×O÷¾Ê³êÚ³6©Ïõ«y­¯ªsý̯B}q®Ÿù Èþy|õDá–Õ²â\?õžqU1O§ú1ÿ±œë§ú–ŠSý,WàmžëgâÞ¥ìÅê<×ÏÜÑ©¼:Zç¹~šÓLÛòÂÙ‰yRžëW˺¥ºÄìœëgk^Y÷¹~IÓSýjðÔ=×Ï|`HÛ~#Îõ3ì$V}®ŸiKýçú•RÿT?Åx¬®sý '᥵ñ†œëgYb 9×ÏozªŸntm çú™wúQœÕŸëgÖ9lŠ#Xu÷°uj2F“úÝ$¦Š¼R·gzÂòÂn¹¯œé1iÎæŽ÷š°EUm:”ê˜âÀ±ÂêdZnöª%/ÿ=e!°0rÔZó½´Tž¥KI[ÙJ'§všÜ©ðißð Ð}óF´=Ùœao¢ñTÿôäڱ˽èosÑ… WûráŽ+Ô¿;èïM%ü}½Sóþ齃H6»Ždwƒ=‘ÜÈõL$w°3É_O#£Åñ•ÈèþímRbw·îDnŒÅ‘éâÎldæäÎíÈläôndv¹ÿ,r38ë‰Ü +Ìx#KëÍ‘åå¹Û‘•©Øid56×Yó\?>>ΆOzÏ„{³Çg+Ýž“ö®6: ˜:¥‘íMîàÎfa¢0ž¸š]ºµíòµ¹ç&[»{ï¹'oä‡Ûîì¹››áqOËÝ w±#Ñ6±¾;—éó•B]gÃŽñUf1ìm07=펴nm’¿M0©\é•ìÂâKONh@é¨+84ß¡8R:G°gÈ °z:HaœEVû–½ÇÇãA“ÛäY;¼sþ¾X{*’Šäno Gòãû'-Ëë4rÕ%}_ò(ëïï_ˆ„s+.“x=’íZa‡üEÂ[ŠS2ÕͧMUÑ<ûòz«âÑäÞGY§m.ïÎݤ+xïú"‹® ^wùoyR®ÖL÷ Á¦ÿôº‚ƒq¯+nw»+âišä×YújÆå;j!ϼvÔ]ªÝ{t‘ÓO´Uð¥…ÞôÎZX Ï·Bjrï¨ë˜*—Žu“Ÿn +íí$ùiöˆMð#á½æût¬5±‰xBaö+•GôÓî–|¢àî¼Ý~䧿úÙ¯ô´¬Oþ!(½>Ú!]‚èÁivcï( Ç‹‘ÁýƒÑ“Á‘›7—"…õâ\nÅ»0""÷VK·9âóg§P, +´{½üµ‹â¥a³üRHùÂvéû’£Šï#³¤Ã!©`ò=^bºodÓãé)ý-ågonrÓ·/ Ùåž¾ÒK¹`ù:ËÌóüm4,—Âù‰]ö“²;u‘_g¢ôÚ>¢w§ éD¦è[䟮{ä×bP>óñÌ'ÕÉÑ{ù‚¹òëT$ºt².6é¯sâecÓ÷D[E½­!¯d¿ùb€¾êWZ~"$}Kl¨;ÖÝ»µì½¾Ó™›ºÛÝÒ­˜ù'sgw™Ž‹Ó®$•È§Âz×kr×~Å™ˆ|ÅΙþžôàL[ïjúN×Èáàôཛ¤»MD‡|ËMnVY¢Þ¹’á§cþìì\ÚeUißõÑ@Ù`k¤m„öÉߦB´ˆ4€Æ+þ´Ö<d?‘"¿ác?QïÁ[±ªÌ“é@_‘ý$6‹ðúvœ¾‰~Æ}—4š™M$«u·³ȵ=âOk­é~énöÖ¢å»Y'—Ÿhr—^Úî(µÊ[ñò³¬ÇfrtL¸J^è¼Ì„×úÚz¶ïµÏäú²»Š.OÜÖÉÏ]—– ÄÊ1‰¥ñÓhŸ²6ž.„é=ÒÚ6èÊ.ûÅŸ÷}ºc‹Íû³š»é¼µ_¸›¹í>!£ñTßÀ\ÇàÈ\¤…¼i)NF×Eшµí¸ÛX[T"ÒÊí`R”J-ËšZAÙŒ¯BCÕ +ºXVЪ–îÀÑá„ø]ÕEnc3ñ49#ýÔÄ'¶|b“+×VÅi2xzPj<Â.¸™]c•”êfˆª¡G<³tëdžSð•ÕRhG3Á?Åþ@© +Pñ$c/ò·tˆŽõæÄ… òWšrÄsaýu&"­šzPöONvxèŒ(¤»d{ Rå’)¦!tx6uD~-†#ñõ‘ +}=LG2Ã}ò– ¨eYÅU ÑŒù~Ÿ@W´“÷3 Šc¯ürˆvãb7!ä{¨OÎ8ù§k¶^ÝÜ’ô.?%ÈWnr“á:#*˜òé +µcBi :Ú§ÕV.wGn{&zbƒ}ÙqrùžnÒöWû¹hfshŒUÓR°üð~©lÛT¡~+Çm‘‘ôZ&6x|›¦Ü<èïä'RÌcIgÊUÌÅŠä[:ÓÑUWd„4¾ùh¬­/’‹zS­›ßìŽz7ƒCD7wÈh|ïngx'žSâêƾUN%ö¢™Âv†\g|Ì?õF¢ží¹ddx>勵ùúòáùåbl03—ˆl­{…@ÏD?¹@¦KŒÎ ’FèHIõÁèêøõQRSùèÊF®ËðƒU}Œž\,ÐÛÛMz!õûêvƳlõ!MÝŸªúÝß?Ø“PŒêƒê‚éV}Ÿ­‘šlñA»† ³7±I•3: +x¥ Têù9[ oŽÜžmMG³}KÓ4 ­3æÞl%Unª¯›öq·ˆÌì°2Tú‰N®tÇô´5E½1æQˆµÝÜHÆÚ\ R¢ñb:Ö–Y[õ—OŠ&3ãÍŒv@ -yúi{IG½)!68+D³¾q£ì¦Š%ÒÝa#¸ò£ûyr+m]B^˜JqÙ Óg™‘n´þ†¤ ê•ÞdK_€|"ÝO £_År¤íg}Ó7ÊŪ×tcêçï$‘#Møæt71“/Þit,ÜN¯õÇÚÆoN“ä…Èði±OxŠ}´½x»»…õÑ…Lt5[èTPˆµÅúÒÑÌ~vRóÁª>F÷÷ >Hï¶ÈÖÔ„[ ½ªfH…Ýëé&#ëý#%¦ûAUÁ¨?ا*[#m¿šÚ5D¹‡èT¬'·[Hýð¤Ð'ltsdʵ!UW>¹xþ˜Ìs6io·x"þ¤gQ)£ÓäöúÒBÁÝ9A*çtHØ(¶’Š}ÔZ$Õ´ )˜I’jz«<óT–¶Ù!a}y[¦ÒDæé€6@z®ëacjh”y¨v‡éÝvEF<‡Ôƒ~:ͺ"YÒR¯Ë^Piê"—½N$eo†tyÁí|4³Œ…ÇóSá@1­ºìÀ‘Œa¹èh?é±ö³ÄúdðC/;^Ö··I§7wÃ_zýp„†4‰öuf… wk‘ˆT¸ÝÞ«ûÃ4~',¬ž Rëwu^'Ãï­8±[©y‰} ‡ìQÓN(ˆVò@Å$)'Wê@Wx<™ë'UÉÝO”ÔÏT–>_6ºê G³±,'“Þ·s˜Î¡}B~æpH(tuŽ“{ –ŒC+ÈO…ÀòéPö§g*31])1›êì§8e dëQ´Ž1A +ÜŠ’oY ‡ÇºïJ,Ì„ÈýôôÓ1¡/6¸JÊ3»8Öõ¹EÒCLÃc·C½äùÒÂFª=Ê&$,gJ¬mµ'µILôjŸ¦ç¼g6&–űgI®v¥ùðÄVNX"òhŽLq–Slü§=ÅòÓ\Õ +¹›$±Ëúhq€=yôT’Ê:Q‰Øõ^ö:{•Üür”¼Jî{}t¹Í]yU oö[ùúâäÕ\26èëÌ™¹ÕG^í uq-j; ýKéub’¾„æõÊW»ÿ^ºŸô ÍZv¹ðÎä(‘°Ìn”±u„tP£9rמ 3yuÆ#ßN‡ü¯¯Iµ¹ÝÜÍÜ Û|5C:òþ0ž‰5ºÉO]AÚ˜s4ö-Þ“Ž Ž-Ç"#='´v‚Ùö{…üöa¼½?Þ½(¿š +£a«W—wIíöô²Z“oHG8º¥&L52ET`¹ÁyIõšÎ“QÑa†´ÞÅPéÕe–U"@äq¢‡6C1«ftAç9>¶½C[e*ÂH™âmLŸ2¤!â  CÝ᱃žTx'™ÊÐî.Xo’î66^:Œmíè&©µK^¢ ÙrsñyŒždtuìpƒÕÞòî[#j-邤“SCB°µHr"Iúýà(ËD±Þ¹=ºLÚïfû0NDbî“|Ô» uzüÖ8kY´]%äÒÛ{È£í’ñÏøô¸ùÇh\ËÉ8ñx•èëQë( +?æíí'ú³œ"*p½‹}Œå"¨òƒê‚I¨>F:LE±”>FëXMÔùXªX”f`3 eÁTJ*MWf<Âh#_º¥·M‡H]Ìçúè„sQï¨N-m°¥“¸væXúÕ§™zŠÛý7²›‘M÷½ÌñqÿF›z˶úFÄ Qööhzz½C!°¿µuž•.±ªÊ¿J/p¶>yŠvŸ±ålWÛ­è°*ŽýÕÕ?¿_Ú8™Q¥4¤‹(ó“ÊKÄrŠA>û[¬¸ _à†xté ;R&lö.®fæVÚI—8ÔE[ª‡Òv„.­x¥¿­ù¤¿í5û邦¼Ìµ©Xã—`è3Ÿ­ör¶Æø_ê¦oè“?'f}¤+Ùì¯g`á®b;ŠÌ~†lЃÉV©Äjj^íÓÕžY¼^î‘£'ËêKøêmŸ>¹V’ñ˜é]ÞCUýØöµw¡¬—µÔŸ¦V–ÕÒ²'’/Q}­Ôª¥/:4/¿.ö Ë¿ÆZ{Ò#â6ïÖî­jo ;4Ñü-W°;x‹f˜/¸Þ€¸cÅÜé$Çq'QézUÌPü×›è¾î¼´×;v3«ÎO_±å§ÚGîÈì”w€c¥ ßá}iÃ7·â½iÖš‡Ywê/½eÜ«ÜÍmŽ±õ(¡ŠÅ#á|šm¡ŠmŠùøÑK ÇÊÙ¤0”ÑJ{ë:Îh¥ý:È=bn;âÎsÙIŠ|$%¶Üõcc´vò^?QåˆJSáøÊ©ôTó!o‹{©ÞÈl+û6ÐŽß]ßlËÜÊÍOûÝ®&·ÐvÒ·ªº3êý@íRÚžnSyîM å)Þ]é ˆ{ç«7]iZÚ½T¦†î†¶}ƒ“·G3#E× ¥¼ØVé>VyïªMájZš§ÅÚf÷µWœHO/å2w›7§¦Û³ëÁÔMå^’XÇ6ÛrgJ§ƒx¨]™|´þ®ÒkA¹ W*ä·H·›JóXv#d&Þy}«5Éæ´Ì›D.ô®ñµ~¶¬ÞŠ.ïÄ”v*âjWY±K!x8Îwy#·WÚÓtÙqDò˜Û 2÷®R¥b®³Ý’Õäµ’ùÛá΋ÑUÛ!a£‹—טÇÅUö\×KÞ&²ûA8])ì&#Ãsëtéz`ˆüs‹mà¥%/&ºÌÇJ,âmíŽD}#ƒ,4šÝ|¬íØ×E—½½t Ö³< l3Ìútƒ2¾sÛÓKU×£(~v߽Ɏ¨wsdZ§tšË—¢vî•ï0$Fp'è꨼Š.ÛmJ¥Tc!QXÛ/­<ÎѯêQ,§,–•c7µKëî°¾½Fªó$Ý™ONäéjm—úëç˜áÉôFüQÏY¬må$I|«‡®™µK–<õÌWlƯŠk}ý)ê]G*Ëz?Ý̹9N×Þ"Qï~¬(B¢¯Ml`v|D»áݶz=+–ÓD¬…nRï|¹Èð|’.ºuÄÜ›Á<ù*êÓË|¶#›ž©yɱåd¯]UÀ:½šŒ0[Q¯¿h¿ã­ðé•ôîPï_É7·µw·÷ŽßÝ1ž¹.ûâÚPËÒf[¸¹µ”#†LÜz¼–XÛÍ¡l4³00RöN +ÈúSöãVø.)²i©ý?•}—ØO‰òP’q„“Ìo„H})fèî”@îk%ÞÉÝñÑ-1Öµ„ËÑOñé¢e á–“>ÿLïqÙMì@Òδ‰Gº´fº]®¶þ‰.ºôwªpgÕ:‘)ó—¼ïDß»ÌÆDT*»½ýÎ| åÊž€’·-©é»WŒŸÎæ|Þdo×l°y,·:æNhVüe÷÷Òq¡]µB;¼Ï¼«>½CÊ Ø²ß ƒ]o†63òôlÞ˜—\¢Ôb&Û{ÅD&åj(ùÀGWûFHk›œJÅg7{##=»)ÒÆ& öûºò¸z×t½CS³c̉L~¡ÉÍ^JæÏhŒä ·$8Ûƒ¢„%÷îú#Ãë£iR +k +Òû’Rà“ênȳDwÎXRÆ„¼<)­ùÎí­)Çhš‚™ +ö‰6g¡DcÓîdx'žNÒ-y¿°Ñº6@:­þ ûzº3"ßÀÜÞ¬?y«¥… iv£åCX*¦f{è>ùé&ÒDãý1÷Æ~Jl +±6_,O7ç‹QogÏÿˆUN#ÞÞ^Ú3 Dn/ŸDéöɹǮ¡hÖ»ÖGnŽnVMOJqqÁSöÑóR÷Ý1'uú´H=øº|Qop¹—(~y6çi݇nsÙÓ¾P±UÚRHtúf²Çëy/Ó@:¶¬V5UÝqir/á“Ç¥Ô¶ö‘©é¸T öÛbƒªcÞáîë‰î|nðzzIÛè/åï_Ï øoLg<›·¢-C1¶î¬'2ÉT£Ã¨÷Ö ÆÑ1ÿú\„t“ÔѶSÙäîÞpg ïri,?dé8y+ï4)‡»K¥™…êŠ×s«³ó錿ۛËeÇf»•ûKâów‰%=y #?-±€4Š¦~µ%©‹Uö/åŠ&î†)m²yž6)åH0`c^Z€m§.æÒÅö‘+ºJ1cK13Úõy †t¬?Ë#ŽÅÊ»™O0¿Z9º¶ãˆ–Ž‡ÕUÉ­TtWÖ|0T‘Õíü¶°Fîa!;]:9íP}ýC¦0ËÙèjïfË?[^_¨t5íJ ëË !^ËBtSÏ‘QÆ®NòU ô[ÆGÅ讈't«Â.d*µ4BnÀMT0Øß%ä··û‰„鹓qÜ1 +/•'áû¥Œ¯ZŽ½,E…<.eÞ¬ÄÊ^´ö$Ì(ðg‹LÌç +t²>NçéstÆ>N~u‘Y’Ë»z;DW&èK+ÔS;ic +¯3“j‘$3™@*>9í‡é´e”"ìDAZN 4dê-:ÞÓ®¬O²>õÆÍûK5Ô-¯iÂí?ŽdûvCQOb¾U3%–bxÕ“â +Ù+Ñ4Z£yz:réPöëé…[twKYb²E©`ºŽK^×ÔSNÑr&ç多 eÅAYò4y$ +¤D¤wûɤ1;LÕQœôâ‡d®vº'HêqOy@TTO…½¤êŽ2¯8šóœL¸î¸;£Þ³Íu6N¶ž¯ß ‡wÖ×Xçß-º\tVÊZÌc©„‘Žæ#óïiì•¿å%Cš…¼¸òZ–0öNé}Êï‹ y!ÕKÙzÍ礒"ý« ÎÚF“e/˜!íJÃn{!©ÿõóK~êRLæÑåõ×ωu,Gg¥]dä>‹®ÜJuF—N=½T©\±6ïD î`‡Ñ¡XŒ¼Ð펮Üí¦úÓÏ>¦˜½&[¦ƒÔC3j»ÍÜÉè‚:v)çéT0<èé%M·¿Šg6è‹déxlû0ª7…U ËPZ-¬ J1·©³jè,Tz®àÖȤ˟?ÊŠñ(ò¬,xïúýiA õóú†ô}#âûZ3]k®æô`3µ¾qpaåä²eÝ.JJÞÒxò@šÇ‘ñø–üÐQ']lOÐeNR&wÛ"Ä'qA—i[Ù)œe6~K×»²->‹8,Q¶ü´6zè«‘èJÑ¥íŽvôÍÌ×KºÎæçVB é +¼jY½¹ÚN"‹¶†yÚUÍ›ØÔ¦ö‹b¹ã!½Á»¼ŠqâZjÏ”çÝÊ™q[o¸´±Þ­˜êO¦hðC RÏ|¿ëØEž!äj»(Ú˜“Wd8$ØœPšøè?9‡–í¥TuU駠ábªåRjÏIåªæY§èoÙO0cd¸4Rˆ å0Vt2Z•{'±o*tÅ2d¶¼9@êŸ Þ|¾a”°½:ÖGgÈä+½ +¡¾™| ŒIþº£è ©ññ?õ’¥C2Ô¤;€l7a–-±¥høcT9¹V¼s«[þ>2ÞÌ%˜³øÌšNtieXžFÒ˜Ù0ËÞPõÜ^ñõw:¢ží}Q2Ð~}û€/õ^í"ÊßÚÓ‘ð'Ï¢îh¶w¿Ÿ‡´/9¦9":ËL‚Üͤ ýºÓ:ÀNÞ6 + òÓ½>òB¼•ö91öÙRîåÅÚWLÑñØB0ÍL¹¨ìQ$ÖÊF½­ô€¨Ån ¡!’2³ažè‘a-Iîv`R\‡`ƒîdËP šX$Ì\žÖýuÿŠ ÏÏeé«^—äéOD½].æ“îµO“ÇÜèûEÈŠhäIº~»o[­Ò@Pï-ÒÊ•˜<ƒº}K3 iµËSÞkY¤nôdD"Ì ’ÕͶ0¡0„é²D¹«ba¢÷l«5• +eÆÒKù©¹ÁBìÎõìÍTlÙp­¶"–§bB + I7ZÆ+†±d:Óe>ˆ7ùõ0Þ# ã§|ƒªx º’¿qÏ\ÖšÜÖ{D¡Úe >“«H=¬³eâ^ºjŸ¡ÁKE£=¢v"W­ƒ¢Ûorï @º¡·CÄú£ÑñäN¬ìWÜ)ø÷&2,pDg´ª£0Ñ$âµè¤­²s3C~.ØØ#òÓ(¸4]@ŠCíõÃ…þÈížµti =ÝÜ!e¢‘²MåSæï…ÀبÞ‘òbÊç‹Òi6=„ô°ÃÖh\ ¹«~4®üú›AÒUõ§…@â4 þzi4^`ÞùdXeiyCÐ}JŠ¯Ò ++/–j«Šw?–‹ ŽL² 2¶jÍ°˜‰X›«fÒÛÉOéld­4ÞÞ]S»Œ÷ÑÈ£a!°â뢫BÃäé ÝÔ¢.Üýti亴ˆ«],ÍúHñ†úÙêh(@É·Ü@ϬDs7\‰Ýâ~ík ùN¶»F£5Rz"ÄÖ`+w¶‡¾•_q+ÝC{š”°‘JŒ26:÷3uìòäf"&»<+gnÒå —=ºµ#Ü–`c2Èùäõdý,ŠZ%V­K.[”r§ë/[„j^¶ ÙU”±§û ´&ŽÑP¾ÑI ³¤éë*uËÄ‚¤UÊ£Îb„ÁH*  –×ëÖ·ý~º•Öëf<~£m¶¯é³±Ý­ûýµmx+w•òK¹‡©<¨)¶»Å}ä9ñ´XªcÔu£“ +®xNg‡éÆM&¼³>“†ƒ«Y:ØÊ¥hhH<ºšÈG†÷¦Bä}‘"ý–aºÖ7_R,­]¼½½´`ºØ@¬­o(Oý²4qLÅ*«Í ¶½ÃêXC7x:wHiùÑÝfy$$í$ZM)Å!‰“ùþy1ñF9‰¯4ß'U\ÊVÓã¥W£†íb³W+±ÓÍÕ!uòxÌDìür6¢rú!9Ö[®wCñÓÉÖ­üÒ­õ]i—yn¯…ŠþKïA•eã–«mn­ƒ…´(g¼,º¤4ã%×>í“w44»Eæ{EM Ú-2ß+Rg Ò7„Ý¢Š½"–6±´WTjû6w‹è·ø”Ö÷Fé„s™®£µvQAÐ0üê³RÚ+2Zƒ­v·È|¯H‘ᰮݢòø^w¯HÎ>gc·h¡ŸÌÄG“¤':5»Et¯h™:{DÅÙkY™çI¾=Ô¡ªHf £ô©3d*<ž%¼Ÿa›BÔ)(OÆ^l¸¸h¹OÞÝKãc{i¾’~º—¤Ý)×Î&Û•ÚÎÖIe{ë¤åÙ«:½_ã:™à0oÛótèd‹w’÷àù9tJcËsv膾9)^Lß¡S«Yµ8t²Ç•¾åü:å5Øú:ýæ“uú,ÆÓuºÁ\§C'sç¤ûbçêÐÉžŠæS:W‡N&Á4Nü\:Ù“úÎÓ¡“i Íxp®l FÛþ¹:tJù“ÏÙ¡³ì=(4J6³D•5¦©3ÙNTYcšJ)÷ ÝD•5¦©3OÚNTYcšJº_E¢ÊÓT2…±Ÿ¨²Æ4•MÕ%ª¬1M%‰W‘¨²Æ4•¬³Ÿ¨²Æ4•b†CÛ‰*kLSIÚKmËDU¥©,gÑ´—¨ÒfšÊ¡ÒÞ²ä`(ûÛL¥" +J3¨ÑšZ‚ùl—Õ̃†-7°Y ù§ÿ­/ˆv¡s¬’ õxŽJ‚” +ÒÄÙ^*W·üÉÀìqiÓ¶«Oôñ"êµ {DÁíåÔ¢<m’ºHSY§ÁY#^¥*%N©ZŽø•õSÉ‘R6Ò½ÂRþÇ\H‘_·5±wwènó½é+ƒ­Å;¥Ú¯`‡¤Ä—DÇä•Rè©&aòx[T/)帘c“v»â•ÙØr\œÛ ëËî 4 üùdSW4&\ëêŒ ×ÂSgw·Ž'Žw¶wî] 4õ6…‹‚0soó w¼µ5½õäÓÌÁÆÙþÖ½Ók=׃7ÒÅbw<³µq°¹u- n‹tiv©õóÁ)g&ârEæv"¿Wh™ê_ËÜŽÌ'+ÜB²ÓQšºÔËA‡nHápɽýuœºdhÓQW0q#F»QÝ“dªt«sÿV_p5wÐu3ÙÔ,1wˆÝ£ÁBçêxæl-?šK´æVS}}“ìì:£¤w¶ž¥ýpúˆ.?Äg¡+1› âB¼§p`³:1„¼´T±ÆZ­¯%³u!Žg¤qæúLXªöës:kõ’Ÿ©»]_Ž&Å(±ÕúZŒ.Á‰?ov°KH¦Ý› +Šƒ”E~+{÷"¥Ÿ–Åð¦¼_K^ØŒ)^XvÅVJÉÆWÇŽÜÒ³4,à©î4R´— ©²œ.G$¸Ó5¡ôÓ¦<,ÛzFûÁRÔÙ’LD»"ÃyœŽ|:5+ÅÖi”MÖü™üû–rgtùýÎîœ+0»œ¥kws.ïø-¤›g=“bÏðL«Òw‡ê5¾6óí y0VÞÐX;¢:7O‡D´°´›OUJm*gTe… g`«*ï£bÅ°Tâ—² vª3‰B ~à•IeÍSÊŠŽ +%ÿØžÉÓzò©ÒB¯œšW.Å&·íÔ¼¤‹òÕXK.·…f¿Þ]Ø¿‡OÀðìÐëK¤CÁzš”¸½®Çt…Þg^§I{1Ê,]"íöë^ÂfQÒMÍ u’Þµ¾qù±…»B·ò‡éˆå=¡&·ñ][‹»ÄIs¾0TºDg‹oá8v¤x_~èÈ+½/·+Èï£Q*«ª:¶µ¶Ò^WÛÚÝòÔ[ÇF;BõÜ­cË©H}u¬ýŽ§Þ:Fs Ô–ÊZºÀ¨?Pªc&UDy‰ŠÇXî²S”fuŒnvÕc ºß%6WVb†%az æçmï¤^¬â4ð¢kЉ²\¥éÙíWªüaOu»É­½]›ªë1 +Áœ¶eˆ%fÿ1 +£Bõ÷ÀÆüåK LE-Úçq2,”/Qè8 Íô).°¾ìÖíHl·$X,Am÷ ©¥°~(ÔW©ÈL5XŸZÒ¡zú!ê¢Ö™®¯‰o ”¿&RÊ_¯Ï –]¡Èä‹(5gJw]™ÿÊÛ™M/ 'JNÜñTP僬\¤W¥É+Þnr“¶R·g¦Ç³7ÓÍs䊃ã©ÛS³½Bw({¼´>A^èZ,ÄÂÛ~9GžýHƒq¶×+æ|2$AU&ðÄfFG2`žÀ=ÀÆu´Ç*å¸IÃ¥¾qAÌ bFP>¸VH …tƒ4[^LGeäɢ̛ǞYö“¥ÇJZzÊúëõ“mrÛ𔥋(QÙò så•FJ¥í¡ê³åyüN§QêÈYLGF<»†ۗakã=ýd><=fßõÕ4‹‹NEÈ€E¿A@KB7|‡|áyõ4PŒÐ +’³ª°µ 9F@ñθòûäü#•™ø*òðåïº4! +t/ÉNB+Å×wˆ U¼]¾áŠ¯gyøÖ×iÅM’£­½mtÿel»FæGYMCÚØÞÑ©˜þehEæSOàò¾ÔQ9&u 6Øa‡EÎÐt!qq/°½ÏVëèÑqB‚Æ®´g¡Y†ÅYe¯×ðx~4Iž`m”å®!2ºe’/&ÙA[QŸëz‘.!ŠçË­fWG£ÞΓ¬°ÖÚ^Ðy5¹+ìÖ~íÖ˜ÀTùØâ“Sê42Fÿ™£ÿÐÜ.ÝË4IÇxqª%—©b¨”°KG‰Ëy-ëSk²ŸfZ ²Ò)æˆìà¶,ù–Ö¾Y.%!©Ü.¯5;¨¦âÊÀûSyÒ!Td…p†Xx»²äM¶TYÏíÅà³P[y²ÌÒXfC¡»<Ë'ƒ¥­žù(M!U 1J«¦òخėÔR +—ÂÁ‰ZÊáàâþ‹FÁnÞSΰZQ:Ê‹…•Ï'g¸•¶Nmš¿q¯¦ ʯ Ó³G­lÙ¿õ+ß“Ô³æ3ºFa›ÛLRY@??xý½ñæÔÅ¡- +¨«Êê4|%Ön÷©Û¤ûb›¾aš¡‹†µ¦’T§Têåv6F„…¾Q(ÐE¼‰fRAñÜ;R³ŠC,:L“4‹¶Jš6K•ƒÁ§ÎÁ²f ¦:¬!i³ô¼þ!Ï J›¥—4‹%ºihÚ,½¤Y’&ÛL›åaÁ R(ƒŸ¢¾áñ aR­&·a^Ö†%Õj ²CÞšt@ϼÉm+éÀäú±Î¹×V9¼ÙøŒ¢;·ŸM•äÐ=êOAw~Êñ{æ¨etŸ´v¡—?RX;™l±žY'͕àY_yNIsµÕv’æ’jº—«1 º¤0ÉÉöö“æªSÓŠ¡{±¶lg–Xw”Ì‘ç{ØßhžÎý ;Çjó…UvÐtuÔ~Â2Ýdšåâ~UÚ¨þ€œ6JJ©Q‡k—ß©ú>wG9?ÙjeÙiB¬iZ;U,žè;j#OùõnùéæøMñS}= ±Þ\diÆè¹Ï]DŒýIæuÓÛ^JvïŒz9uKÓ™ÞhsÌ}V¤‘““ –Ò’žÃç9ÙÞ}Éw'^Ê6¦ Ú¦ tÑ®ñ0Îf¯SC4"2%ÝÁ¸x€ópÜß'F·z`2™5í¥È<þæR_9r{@ȵgÙt†z|Ä##=ÛùðN²¿}"B~f™Ì}Zz’tÕ+"~ =$½#]ÊR^z-­çˆÞËÔy\Š‰Iµ”kìúoa-ƒ´c6¶\?fƒD)ÿŠ&›°*Sõ ÉyêìFj“]?—ÈA)T°1õ†îôJøºê Ýé•ßR·C½¡;=MÚÓ0‡zCwz:†i˜C½á˜AÖ±8ÔºÓ75Ò¡ÞÐ^ônC½¡;½*؇zCwzé0‹Æ8ÔºÓÓ:Ö0‡zCwú&ñtuRÛS Ò–OÄÀŸæɶ²N”Ä%Ô.¥•Ñ_1ŠP\Š÷øi¨:•½B@9$Ÿ™¥Ým @R´¯ ±3³Þ¢/„Õ£qµ™=K!¢3f¤aõ4ºñ4y¤ ˆÕ±Ðâßf˜[ä–=Ö™¢•C8“£‘R¤ßˆ >ÔN¯$g}¯x.½tP”¤Còš§êÅ‹Ön) ±Ì ⎀|íÂÀU˜ë>i8H˜?Ÿlê%­«(+Ù{›ÊðÀ&·›üåÆÖéÙ!}C|ehk{çÞèÚS¶Ž›„kâòý·+qMˆv_‹Æãä—8ýëèz“'½v÷èlëšà½6z¯É½<>ÍìlœîÜ[;~ʵú§¹±Ñ™bæZÏ5éÍ+äͽ×<ä~"+äíä5/J\!÷¸Ò¹6Hþ7÷$òõƒ‡ä§ ò¿mò¿©¦Èµˆt/ô¿9ú6AúÓÜSÈ/Ãä‡ÝkÑÐ%·ù¤kBäÚص…¥ÈµMzÁ©¦îx"Ôé¼"B4ÔÙ%$®í7E£qíGå?vuu‡º]qò·ò§õþ¦üðzÓ}ˆCò‘PW\ºer‡Âµ'‰eœÛ¹»Õ£(“SRÞ/}_¾)œÙú™­©üе¹ñ¦…²¢]±P§Ð½ŒÇB±x"qméZGw'ù+‚;o¥¯”Þ^úÿîk1Z˜]ìƒä?ò&R%Ø]eÖN×z®u&ݱ¦¹âOþ'€KÊw!á]*ÀÞÜ0x$4Þ²z_á]ØP¼%óbÁÛ ‚·(: Þ¶\Ex+ß%·—ÞòvÉám^€ãá-cWÞf8ÞrT𮀠oYÖð®#Îð!P#¼+àþÁ[o@Ãà]•çouçïÊh ¼µÜWxW7@-ðVÀÞ` o Þõ omÞÕ@á­ÀIð®­\]x·~à`xW^®¼›;¸$ð®È\fx·opiá]µ¸TðnÐàJÀ»šàxx7bpåà]åp$¼.¸Òð®þ8Þ ÞM€ ï +€¼›Þ x7.¼"UÀ»¹À Þ€áÝt¸¯ðnp4ÞÍ€s‡w# ‘ðnOœ#¼›çï†@ƒáݤ8wx72ïfÀýƒwk .x7 8À»ÙP5¼ œáÝ°ï†ÀEw[ÀÞM€ ïF €¼›Þ­¼€w3Z @uðn²àê»îàHx7\påà]åp6¼[0¸Bð®ì\x7epùá]ǸTðnÐàÒ»jpiáݸÁeƒwà’û‰ƒKïŠ ÀUw[Ž‡wàÊÁ»Ñ§Â»æpEáÝôÃà]a¸êðÖàxWU…·À»’Tð–pqá]7:ðpáà]%fðVpà]ÖðÖ p!à] UÀ[0Ox×>@Õð– ÀÞõP#¼ÅÜWxW7@½ðVpŸà]Ñ·–€s‡w4ޢΠÞ5 p.ð–Ðxx×)À9Â[`@#á]›ço™w=Ü'x‹ ¨Þ5p_á-9 vx×x ¨ÞµÀ Þòªƒw}p†·»ð®)€ o)Öð®#€ oAf𮀠oYú𮀠+oqZx×À…†·DÞuàx  ð®ÇÀ[®®:¼íp¼EëêÂÛòGÂ[º®"¼mp*¼ÕëÊÁÛàgÃ[î¼­ p<¼eìªÀÛ΀Ko1»üð¶0àRÁ[Ò.3¼m ¸„ð¶Ë o«.'¼µíÂÛ¤€Ë o…»lð¶'à’Ã[ä.¼- ¸ð–ºËo®¼ÏÙð¶àjÁ[ó oÓ®"¼•Ï©ð¶àŠÂ[üœo‹®4¼%ÐIð¶@´mÁÛJ@ᭅ΀·•@‚·^txÛTðÅ‹ oË€¼¥ñ"ÂÛ& ou¼ˆð¶ Â[ /¼­ð–É‹o;€5¼•ò¢ÀÛ` ÞbÉÞ€*à-™<á]öP5¼…“¼ ª†·pòw©@ð–Ïû ïò€Úá­ ÷Þå uÁ[Dï¼Ko)½ð.ch ¼Õô~À»Œ aðÔó…wé@ƒá-«çÃ[VÏ Þå +çoqm<¼KÎ ÞúÚxx—(œ#¼%¶‘ð.K8wx mÃà]pîðÚÆÀ»à>Á[në…wùÀýƒ·âÖ ïò€û +oÑ­Þ%÷Þº[;¼K8À[zkw™7x pÕð.0ào®Þ¥œá-ÃUÀ»¨€3¼eØ.¼Ë .¼Åؼ .¼ÅØÞ%Þ’lï†oI6ƒwÙÀ…ƒ·0»`àÂÁ[˜õá]*pAá-Ï:ð.¸ ð–g-¼Ë.4¼EZï€ o‘–á]pÑá­Ó2¼Ko©¦ð.p¼ÕšÂ» À1ðl(6Ør Š Nr Š Nr NŠ Š Nr Š Nr NŠ Š Nr NŠ Š Nr NŠ Š Nr NŠ Š Nr NŠ Š Nr NŠ Š NŠ Nr NŠ Š NŠ Nr NŠ Š NŠ Nr NŠ Š NŠ Nr NŠ Š NŠ Nr NŠ Š NŠ NŠ Nr NŠ Š NŠ NŠ Nr NŠ NŠ Š NŠ NŠ Nr NŠ NŠ Š NŠ NŠ NŠ NŠ Nr NŠ NŠ NŠ Š NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ Nr NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ NŠ Ná?Õð¾†@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±À)@±Àüg¼ï€>Plp +•Š Ñ€‹ œœœœœ®\C±àb¤Øm¸h@±À)@±À)@±À)@±À˜È5.æŠ Ñ€‹œœœ¥\C´à‚ŧŧŧÅG`S®!ÚÀ(68(68(68‚ªäŠ ©V±!ÚÀ (68(68‚äŠ \¨M±!Úpÿb€S€b€#¨Y®¡ØpŸ©G±!Úp?b€S€b€#¨S®!Úp߀b€S€b€S€b€#hˆ\C´à>ŧÅGÐ@¹†hÀ¹Å§ÅGÐp¹†hÀ9ŧÅGpNr Ñ€†Å§ÅGp®r рŧÅGpä¢ Š Ná¾)6Dêá~Ê5êŠ Žà>Ë5DjŠ N‹bC´ ZxÉ5ªŠ Ž€£\C´ *x 6lÁ[­%x8ÞR-Á»Àð–jÞ%Þ"­‚waÀ…†·Hká]pAá-Ï:ð.¸ ð–gx \Dxk³!¼ .¼…ÙÞ Þªlï†oI¶€wñÀE·Û‚w!À…€·Û‚w!x+qð.*à o®Þ¥Üà-ÀUûÀ€¼¸x—p€·ôÖïbð–ÞÚá]rp_á-ºuÁ»ðàþÁ[qï"€ûo¹m¼‹î¼µ¶að.H8wx m#á]–pŽð–Øû8àá-±‡w‰À¹À[\ÏÞ… +‡·²ž#¼‹ oY=_x—.4 Þ‚zîð.`h ¼Õô>Á»˜ ð–Òûï’€ºà-¢÷Þ… uÁ[Dï7¼Ëj„·|r€w‘@-ðÖNnð.x¨ÞÂÉÞeUÀ[29ûøÀ.¼õòBÀÛ` o¥¼@ð6XÀ[&/¼­†ðÈ oƒ€>¼Õñ‚ÂÛ, oi¼¸ð¶ ¨à-ŠÞÆÞŠèx›(¼µÐ1ð6@±«€·­WÞè0x› puá­Ž„·ÑWÞÊç`x›påà-{Ά·õWÞ‚wàmCÀ•€·Ô]x›pùá­s— +ÞÆ\fx+Ü%„·I—Þòv9ámUÀ%„·°]fxÛp©à-i—Þ\x‹Ù•€·‘—ÞJv…àmj€³á­aWÞ8Þváms€#á-]WÞ–8 Þ¢uÕám€cà-W€Â»o¡2¼ëàBÃ[¢€Þ5pAá-N@Þõpáà-KÀ Þµpà-HÀÞup!à-EÀ.¼k +€3¼ETïúàoùµÀ»Ö8À[x@íð®;€û +oÉõ»î¼Å4Þõpîð–ÐHx×&À9Â[`@ãá]§çoiçïšh0¼Eœ/¼ë að–p?à]Ë €·€ûﺨÞúøÀ»Þª†·lžð®}€*à-€?¼ë À¼¥\x×D€¼E\,x×G€>¼µ\\x×M€ +Þ’.:¼k(@‚·gÀ»ž ×  +x×V®.¼[?p*¼k.WÞ8Þõ€+ïæ.¼k1—Þ­\6x×h.-¼7¸œð®×\6x·ipùá]Ǹ$ðnÊàªÀ»¦àxx7bpµà]ßp*¼Û.¸ºð®û8 ÞM\ux·œï– +€ ïÖÀ…†w@ÞÍ€ ïF €¼ÛÞÍ[ðn(p†w :x·øÀ»åP;¼[÷Þ €À»pîðnd4Þí €ó‚wÛà¼àݶh0¼›çïF@àÝŒ¸¯ðnpÔï¦x·<ªƒw‹€?¼[!Öðn%\,x·HôáÝ2¸¸ðnÈðn 8Þ-\ux·œïV ®"¼k=Άw WÞ5€Kï .-¼«6—Þ\*xWg®¼:p6¼ë/WÞM8 ÞÝð®¡x ¸pð®’ x‹àï:¨Þ²8À»Òê…·Š€s‡w4Þº ï +¸ðVP¼«€¼åØ‚w5\,xkÐw¥8ÞBu¥ám|€ƒá-`WÞF\Bx Û¥‚·1WÞ‚çð¨G?æ±{üžxÍåjnnn1„¼èr]{âÿ¸Ç=ö1~ÔÄÞÄÜ?õPÖ¶‰­U¦†¥ï* 3y~°d^j]jÜk®æVw[»Ç烡PØ„P( ø}Þö6wkK³‹Ú›Z›[´µÊÔ°ô}@Ç¢©}ý˜Ç=þ‰×ˆu©qƒáH4ïìJôôöõõ÷' éïïëëíItuÆcQ!"öö´¹[š¯=áñ}ô£ùˆŸ~˜ljÒW+,Í»,.):nz30i¿¢«¥µÍã „"ÑŽÎîDoÿÀàP&—/ŒŽO2>>6:2\Ìç2éÁT²¯7ÑïˆFBbìVbëÇ=¦dj¥¥Ñ¤Ï‡’‰Ë~0³ð#`¦ö †…Xgw±n:›/ŽŽONMÏÜœ_X\Z^Y][[[×…¼°º²¼´¸0?7;=u}bl¤˜Ï¦“}=]ñX$ä÷–MMü!M¢¥‰z£I7¥‰KmøaÔÂ{µ·ÇŒÄâݽý©t¶0¤@úÓ>ðþ÷½÷=òîw½óÿàmoyÓïÿÞëþÛk~ë•/û½ðWŸóËÏø¹§H¦¾5;5V$–NÄ£!_{«ë }Ô#†¦ƒ14èj›1™4)Mü¸'6·yƒB<Ñ?È,¼¸ºµsïøIO}ú/=çW_ø¢ß|ù«~ûµ¯{ÛÞòöwüÑ»ÿä½ïÿà‡?ò§öñ?ÿÄ'?õéÏ|æ/D>«@úÓg>óéO}òþñýéG?ü¡¼Øûïxû[Þø†×ýΫ_ùÒÿúóŸ+šúîÍ•féT_wG„6i}Có.9ç`db_(ÚÙ;)ŽMÝ\XÝÚ½wòäŸ{ƳžG üŠWÿ±ïÛþàïþ“÷}àÃ%Æýä§ÿⳟÿÂ_~ñK_þÊW¾ú5Â×u¡¯|õ+_ùò—þê‹_øüçþâ3ŸúäŸìÏ>ò¡¼÷OÞõ‡ÄÖ¯íoSSÿês~ééO}Òñ½Í•[3×GóédO\zÛˆv?Z44Œ‰ÊmÙÆú ÖS·Ǻús#“3·V6w¨…Ÿùì_ùµ¿ìU¯yÝÞüö?|ן¼ïƒùÓâSŸùìç©q¿úµ¯ÿõ7¿õ7ßþÎw¾û½ï}ïo !/~÷;ßùöß|ë›ý¯Øû‹ùùÏ~æSþ±~øï}÷;ÿ€šúÕ¯øͽðyÏzÆÓžt¼gciîÆ8iÒ½]D»‰¡û¨GüôO=„ŒºÑ m#I5mÆ?ñ“dÒD‡[¬3^Ÿ]\Û¾{ü¤§=ãY¿òk/yùo½öõo|ë;Þõž÷è£ûħþâs_øâ—¾B­KŒûÝïýí÷ðÃýøÇ÷wÿ÷ÿ†ÿîï~üãýð‡?øþ߃ûo¾ù×_ÿêW¾ôEbëO~üO™©ßþ–ßÝk^õ²¿ðy¿üô§žîm­.ÌLŽäûˆ¡½TºxÄÃ~ª¬ÜhÐhšñÃþÀcŸÐìö†¢¢‰o.mìÜ;ýÙ_øåç½ðÅ/#~ÓÛþðÝïýàG>ö‰OöóÔ¾ß æ¥Ö%Æ%¦ý‡ü§úçþ—ù×ý×ÿÝòò¿üË?ÿó?ýÓ?þã?Pƒÿè‡ÄÚßùö·ˆ­¿üW_Mýþ÷¼ëo}ãëçU/}Ñ žû‹?ÿä“ýíõÅÙëÄФE½n×ãóÀÙr£A[!7ã‘fL•úñ×Z½ÁhgÙÄgO}ƳŸÿ__úªßyýßö‡ü¾}ôãŸüÌçþòK_ùú_‹Ø÷û? æ%Ö%Æ%–ý·û÷ÿ÷ÿƒðšBßAÞøoÿF-NíM­ý£þ€Øúo¾ù¯~ù‹_øì§?ñ±|ð½ï~Ç[I›~åoüú¯<ëé?{z°³±t“:ÕÛ)<-O|œ¤Ü´‡†PH5mÆT©[Ú‘xO*;ÂL|ø3O{æs^ðâ—¿úwÿ­ï mø£ÿÔ_|þ‹_þÚ7ˆÿö?$ö%æ%M—Y—šö?þã?þ/ÆÿmŠøòffqfnbljëÿèߧ¦þúW¿ô—ŸûÌ'?ö‘¼ç]ðæ7¼ö·^ö¢ç?ûO=#†^œÎ $:¤‹~kÐ¥v®¤lc"Õ¤7&ÍØå&q"™žœ]$­˜˜ø¹/|É+^óº7½ýÞó|ì“ÌÂý­ï|ïûÄÀ´ýRûó–¬Kì÷ÿˆü¿Ho“,NÍMŒ-Ùš™úo¿ûío}ãk_þâç>ó‰?ûðûÿøo{ãïþöË_ü‚ç<“úÎúÂÌD1ÝO”ÛÓz4臕…vV#Û˜JõÃxÌH3:û† +ãÓ kwÎ$¿þÍð®÷~èÏ>ñ™ÏQ ÿÍw¾Gšðß— Ìì+[W´àÿg…ÁKÆf¶¦¦þÇø»ÿðûß#–&mú³Ÿþó~ð=ïzû›^÷šW¼äÏyÆSO÷·WçoŒåŽGümÍÌ#‰p“©ì¬FcãG=ŽôÆ¡ŽÄ@vdjnåöþéSŸñÑÄïx÷û>Lñ¾ôÕoÐ6ü#já²KöÕ·®Q˜˜¾¹Ec+LÍõ¿ÿÝoóë_ù«Ï“&ý¡÷í~ýk^ñâ<ûéO9ÞÛ\¾99œîï& ºå‰%ÂM;hØYFmãG<êqDª#ñÞ¡ÂÄÌâÆîÑ“Ÿþìç¿X4ñû?ü±O}ö/¿üµo~û»ßÿ¡daÚ3—ìkòÿ?{o—㺾ýÿìýÛÃZ‹¥ež¥‰4h M”!eJQQ(ŠTÒ(C‘¤ÁT†*) +…P2•hŽ¢”Ì‹µöÞïþ¿Þÿu]÷}?CB¨îû©ó»?kÖN{-žã9ó8Ï뺟ڢ8­5#5OiäÞuªÊJŠòo^¿|!-)>:2@eŒœ MøFÍ®Ä|¡?ò„Æ©97)è»·®#ãŽ;¼7tË:7¤3öm9ñ¡ûŠõÂíù¯ÝEg¢16ëŸ{‰õ8T\FçêYDã¢qÆå\dÕ•(pQNÍ)‰)¡I¦œô£Šȸ/¥ŸŽ?BëŒú³®–²œôÈ!úôîÙ}l›gÖ={÷0d¤´œ²–.ÊÕDã0¤qJÆ•ùÅeÕµõL“DÍ%‰)øý(ç~ÕÜøôqUiQ~îå Zç56¦F:šJ²’#pÜî&¶Í7k¬GHÊ*iê™ZØ8¬!'ï—U×5<ùI³­ë':7*è·¯‰q—ç߸Â×y±¹‰á$uÅ1Ã1¶ÝÅË™IÖج “£¨>ÉÐÄ|±Ãšu¸'¤œ¿r£à~Y ј.cÎJLÁwnÔ¡‰q7ÔU—ÝÇ:§}\—/23ž<ãй8?÷Ò¹ÄØ;Ö¹Ú[cÛFi{ø ~b]³œ +yÐp”¬±Y[Û»® Øq 6ñÜ¥\4;ñ½šÑ˜mݾžqót®.+ºs=3íäѽ!þžÈ¶MQÚV )¬ –³P!‹Ë(¨M24Efíé²÷èÉ´ÌëwŠÐì$êZèÜPWUZxëê…”ø¨=AÖ:,636ÐV+9¢ –³`GF…¬¬­ol¶Øa토=Qñ)®Þ*,­B³SÐ#¤óËçõµ•îæ]IO:¹#ÀÇÅÎröT”ÂFóʹ«ÌÎTìÂ32îÈ2 +ê“Œf[Ú¹øìˆ<–”~%ïîƒÊÚúç/»†ÆAß¼lzú¨â~~N¶í`?•¶æ3'W‹ºs_þì̶F? åÖÿøé—Þ}P´–UB…<ßf¥‡_06묜üûž6½|Óe4Æðtþóû×/ŸÔ”ݾv!%îÐî@_×åVs¨rFa¯Âº‚kÓnýsO±~ƒQ´VÃ…lïê¸ëP\Ê…k·‹Êjž4¾xýîß]Gc Öåm4?¿÷º¹¡¶ŠØvbÌþPÏUKp9£î<| U΢îÚŒ[£Ø5`è¨1ã´ôg˜áBÝ“H̺ª¶¡ùõ»÷þû?x>î*cˆÎxöÇû·/›ê‰mg¦&Þ³mýRÎ(lÜ_¬×Ï¢îÚŒ[“ùIJNu‚ᬅv.¾»£Îd³®ozùöýd_Ý¥4þ|ÛþnÏȶ«QÚÎÎHŽ=¶ÙkêÎÚJ²è&Ê23nÝK Ç.E Ýéó;ºû…ì‹IÊȾYXZÌ7äÿt)³æ#Ôž‘mW–äf¥ Ëy¶ÑD59©ƒDܵynÝgŠ]ÊÚ“M,–:ûlÝu(>53§ ¤’˜uWkÈÂPí™±í§(…ݺz>ùØ0Ï•6f3ô4Ia×&-ùoGÙš¸5Š]s¬W¸m Þ˜ž} ¥®§ŒYw±†, ¯=øýuó³:”¨rôu±[h:e¼²H»6nÉd"Öoˆ¸Œ¢¦ÞŒù¶«¼¶ì8‡;2*äg¸»dC†oÛïß¾z^ÿ¨¼øöÕŒ¤Øý!~î‹æN¤&O\[$eæµd”­‘[ŸlºÐÎÕw[ø‘“ç® ŽL2IÖ]Õ¬ùðÓ6Ja¸œQwN?´+ÀÛi‰¹1rm”µû‰‰`sæ·äÃ%åT'McíàîºÿØé ×îܯÀù÷îPÈ4) —3êÎÙé‰ÑÛ7¬±_hŠFç1£†â ‰ˆ5gFdÔ’GH+hè"·vòØ•véƽ‡ÕO¨B¦SÛt´m3å\Y’Ÿs1åxd˜¿‡Ã¢9FUÇJÀ_„±-_›`riÉ£Çi˜,°s]AbWqùã†nÒ‘… m•óÛW(l—æ]>{âðî­ÞN¶fÓuÕ奆© Æ[…ˆõ:JVy‚ál«kýBO¹˜Sð ªÍÈïÿ ¹ûhŒá—3ž+îã´Þe™ÅL}ÜœE)ƒ ä®a’cQKž»x¥×ìÖ—ópìzþªû2¯œÑìÜø¤…°Ì”ãB7­]ni:Y[ MÎ8ƒáÃHΟ^0ÇŒ8wIÉ«£–¼dõºmáG3®Þ.Ʊ‹,»ºOG‚”3žß½Æ! ¹vZ¡›=Qsž "‹2˜hDm^¸&¹KS¦…ë†à}±§‰[?iäÅ®îVÈT9ÿçß$„×N?udjÎ6ó¦MR+A2ŠÚÜ–™®D¹k²©årÔ’#ãR³nÜ+­©NbW7-d +~{Ù„]ûú…䘽A¾ÎKçÏ 3ç'*JäŸzöFázŒÒø)³­<6ïŒ:qö +•­‘[wãB¦à…0ìÚ5¥÷n æ¼?dã;‹™z +Ò8js{¢bDë?d”¬Ê#œ»v9•qõNIe [³ýR³ ÂþxÿæEÃãò¢›—Óâ†ù­]¾ÐÄ@KQfÄ ¾œž¨È˜LMP(\O3³E¹+":éÂõ‚‡ÕO›^u{·fÀåÌdíºÊû·³ÏˆÚ¹ÙÃÁjÖíq£GæòDE‹L&(95󗺬߾ïXJfî½ÒGõͯÁ­y0®ýáÝ«¦'U%ù×2NÙàµrÑÃñÊcÐDÕMTœ”YPdyu=c »5CÄ¥^Ê+B-ùÅpkè¬7$ÏŸÖ<,ȹèãd3wêDf¢â¢Ì|‘ј¬¡?s½›_ØÁ„4”»*jQKÆ›pk>LÖþýMsý£Ò{¹™§cQÔ^mkF&*ÞàÌ-™EFc²‰å +w®Ïeß.©zÂkÉàÖ|¨ jÎhr~\^˜—uæøþàõ.KÍgèªÉ‘à ÎÉ,,²©¥ƒÇ–](\_ËPýôùkzÝ ÂkÎ(ƒÕVß¼œŠ'*c=uy.ÊÜRd+Ï€=G“ΣpW!¼ÜÅö Ë-˜æŒ2‰ÚWÎ&à‰Ê~ÁL} y©á\“YXäɳ¬½¶†G'_Äạ™ä.hÉ­Ád0*jß¹š~2j§¿û +K}MZfÎD0!‘µÈ+½ÃcNgÞ(,{üìÅÛ÷BîúÌ‚Gíêd¢ÚµÅÃÁÒÔ€‘™+I»5‘#bOgå–×>#ár×gá-HPÔFÕõóIG÷x:X12se "kÍODNÉÊ+Â/\³ýrr~ÔnnÀÕÅäèð­^Ž”ÌÃpdn¦w×üžŒDÞ‹E.®¨k|õÂõ× £öŸïߢ‰ª¬ðFæéFf”´ÑÜÌe's@ÑBäK7‹+ëИ áúëð¢öÛ—ÏjË‹òÌXf”´%‡ö';í¿ü…M•y§P†áJPä'M¯`‚j¼‰êec]EQ^VJLÄV/”´Õå$†öC2ÿíY-fêÒ@O±þÃ$åÑœ,$25&C¸nü‰Š‘9|«§ƒåL=µ±£†ôýõgvÇfTÊäfHÿ¡’òú¦VŽ$x ˆ TÛ`&*48×Uçe¡Þà±b±®ª¬ø`–e&3¹ß 9u}K/A‘aò ðg,3îÍÑ{¶¸Û[̘¤2fä rIˆ-™©Aùç_û5VMo¦¥ƒçÖp”®AäÌÈ´3“îò_kg>m¢òèû°·ቃFŽQ™4ÃÂÞ}ËžhùûáËÜXW^˜{þTTØFÛ¹†ÚŠÒÃ0cs§«LÊGŒVš0m¾›ÿ®£É™yEu ò÷ÁÈŒ’vmÙ½ë'†®_m3gŠ–‚Ô°þbdlîlϦâ5”‡Kod¶tßÎ#Io"‘_QéDþVx2¿|ö¸´àZzBd°¯Ó¢YòôØÜÙ­‹Œâ5”¥´¦ÌµuÙuê|naym#ˆüÝ0 ÉüèaþÕ³qûƒ|VZ™è©³36SÉ ÍPhPÖœ<{ñêõ!Od\¿WVÛHÖš ò÷AÉü¯o_4Ô<¸s%õøÞ@/‡…3ñØLæ©NmÍ‚3”º¾©õÊuÛ$œ»VPúøÙËw° ùx;íæúê’Û—ÏĆx,Çcóè‘™ÓæNS™‰×h†ÒEƒ²×¶}qiÙùQ"ÃZóû¡e~ÿ¦ùiÕý›Y§£wo^k7Ú%|ÚÜ™ Œ$/*^+£j¹G@ıÔ+·Ô4¼xûá_ òAÉüçû7ÏŸTçeRcó<#mE*hwZk¦›$^O˜:ßníæÝÑ)—n•T×7¿…K? #ó릺ŠÂÜ xlv¶™3YS^íÎJ`ÉKAËpîWl„ªáÏS(h_M;±ÕÃÞ|*Õš©s‹S™¬¯QS–R?ÕÜÞcëÞãLò‚xÝÞð‚vCÍ”À¢wû¯Y2wŠ¦œÄà¾d¡ÝQÅÜ£Y_÷,!‡šò’5þ»£S.ß~ðè$¯Ž€ÈL‚võý¼Ì¤Ãa¨Ö·x…Ç©¬dÚ³•ù»‘v¹>oćÊJ“p¾&~†(f}ÍöëеáSUŹç‘gãœMv#ízIFåŸzõ,!¯ehfçHüºê) Q½Ð~ó¼®ü endstream endobj 910 0 obj <>stream +îÕ4”³]mg¨Sûìö+ffT1FUÏt±‹ßîʯñfDîHk¦<ûòìPß•–Æ“”¤Éd{3½Ð¨,¥8aúŸàC‰™(_S~ "wô8…<åì„ývf†Zò£ã{#íÀø£²Æä¹K×ìKÏ)Äùš¢Ø~º|Ï.+ÈNÙíç²ØTOµ=‡f\Ê$záQÙÚiÃŽ£)WòKñ!øu§Áóìš’[™‰‡‚}LŸ ˆ§Ú'€ F/£ùöžA‘'/äݯnx ~Ý™Pžw#…9éq{Ö.;Y}¬x{0Áè5ËÊÇҮݭxÂìCØþÓw(ÏÆGÍ¥ù—SŽîØàdEXûlÀø[/½×…D%eÝ~ð¨ñ5Üè\hÏ~ÙP}?ïÂI44ÛÏ7Ô’5¨]Š™~¾o½¨èŸžSTUÿâÝ°é\˜}ö“ +<4“¦«2z8™¦~𒞢ú Å[/+:z•Õ6½;ö uÔüþu#šI³˜6^AbH;LS¼)JNo½¶ÀÑ«¢}6š+‹rÎÅElq[2[_mL;LSôÝ~xŠ2Yä¼iwlÚU½þ€èÕé0C3 +`w.Ÿ>¶~åÂÆI ýáu6Sʣ䴌̗{o?˜˜y‹Ž^à×?€ß8Ÿ°«û²¹“5ÆŽHÅ–rÿa2*º¦‹]ýß»^Xù”Š^ r§C°çuåÙg¢wnt²ž‰¦©¡ý~l5Â+eyí©>!QÉ—îÀÖ‹=è ¯ž=*¹yñdd§½™¡¦œøMSL)­¢7ËfÍ–ˆ¸ô\4E½|Ñ‹%x°Š{×ð4å¼ÈDGYæÇV#t)¦Jy]èáÓ—óËêž¿­[0°ÆÇÔ4å½ÜÜHKþ‡V#T)÷F¥¬ª7ËvÍ–½ñ¹Å°ÀfâÙdš*¼~îx¸¿«©®ŠÌ°þß_Ì¥? +sˆÏ +s#M9ñb¿|ó9³ÐÚËÖm‹pÀfûÏÙ½á3êÌ(fû»,6ÑQ’ÆGSßjÙBlÇuPÊ\0º˜ÑÌì½|¾¡ÆØ‘ľù +>}Ed˜Œ +³ö‚Ræt17Tåœ;¾ÇÏÙzæÄqRCúôúÆüÕ£¾¸IΕÉ[`í¥Ì>L1×–ÞÉJ<äi7o²ú˜zã0Eî`£R–VÖ5µqÝ¥Ì-p1£™¹¾ªðúÙØ],gLP”ÜçÛ6#äqŠ_ÄŠÕ42_áBFA)s³?¼izüðVæ©îKçè«ŽþÖ5'É^½ú‘Ršd²ÈÅ?<.FA)s²ÃGS÷®¦FïX¿rÁ´o^sÒËÍ#dÕ§˜Ù{m?”té”2§ ¶ÙøÖîÍ 'ö¸ÙÒkÎoØŒPcTŸÁ’ŠŒ­VoÚ}ì\N>W†Ræ éb~Zq7;åHè:þf¤­–Me¯þÃG«Ì]æ±-21ëöÃZ|EJ™3ЗFxkN¼Á—vÛlÙäSD~¡–› WnØ“v­°²_Ræ Ô¥‘·ÍOÊò/'G{Ù›MQ—ý–a +öO½úEcÔ,[·€ý'.Ü|𸠗2œ+sª˜_5Tçœ;¶gÓj«o¦˜ì5r¬†áü>¡GR²ïV<}A]ÜdûÏ0ð7#·³#·yaªíù‹Ÿ½&[;£1ŠlDè;ØlÿÙÌf¤²ðZjôN4LMÕú†üEfVEÙË3è £šßþ7¹o3B SklLQþÒÆüÅÛ{áƒå•vÅž½^T¦ +®œ>⽜ä¯þTþj“a£ì%¥¤cj³e¯‹·RÙ J™[ð†©âÜôã$Wô[›,›¾ÔGö^˽CøÙ J™cÐÃÔó:|2è¾d¶žŠtÛFfÊ°$¡0~†Õj¿=ÇÓsï×P²B)s ꘟL¡üæë`n¨!;r@[,›1li½ÙKÜñÞëN)d/nÂä¯G%yçã#ü]¬'¢‘¹-–Í Ë²†æ¾aÑ©× +«êa…ÍM¨üÕü¤<ÿrÒ¡ esôñ‘Å×-›6ìÁxXvñˆ?ŸW{/®ÂÛ]O‹Ù¹ÞÑÂHsl[,›6ìa2*ús–yJºœ_þ¤ö^Ü„ÚQ#sÂÞÍ.‹fNT”lƒe󶛚FŽëwƤ]/ªnx{/Ž‚Š™ŒÌå—“m÷D–­ÚË0왋\6ïM *àúGAù [ö3dÙgÛnÙ<ÃVE†ít(ùrA9 ËÜ…™kËvÅ–ýõ”ÝÒ°Ï"Ã~ö +†eÎÂXvEÁ•6[vk†]û†eîò=–ͬD˜„ †Íux–-²¿fÙ¼¶†‘¹£ï’°Á°9Pʦ#_ÙeS‡ŽƒF)LÀ÷"âÏCÂæ:–³Ã×ÑÜHã+Çøé¨öìƒ/|áöÁ¤KùåOÀ°9Àbï²­'(ŒDÝùl[&7tǨO™¿b]ØQ¼ÃnÃæ6´e?)Ï¿”tp›û’ÙºÊÒCÉ%¿Ï4fÒ–ÅŠËiO·tÚ´'.ƒì°Á°9 mÙ øøñhغó§¨Þÿ —üè9JrÜ$·­NeÝ)#;l0ló쒼Œ¸=›œ,§kãK~Ÿm̤-S‹¯¹v^Á‡S²ïU¡#ç¡,»ùIÙ¬S¶ºÙ˜LÇœX|¡-ã9 +/¾bÏæ×4¾† _‡¹1Ry/;åp°—Ý\¼þ"³T«™nË£äÇÏ°BsTÂ…›™ÅÛàóËþ𺱦8çl,YáYê³·e|Û^IÇÔvm`d"š£ž¾øýO0lŽ#xbf)«ãåG}¶1óÛ²Á<{ï#g®Â%PY¼xŠf©ÄÈÀµ¶¦:J’ƒûôl½1óÚ²¦‘ÅÊ »ŽË½ÿ¨îasþ,uõÌ‘oûy_hÌmÙÚyóÞ„‹·Ö5¿…9ŠóPùMã£û¹çŽíÚ°ÒÂHóó™™–I[Þv0‰œGÁ%YêmsÝÃ[önv¶þBcþ¤-ÃzST f)r.•tpݘ[Ÿ˜…¦eº-ÃãQ"À’ók™Ybó¦å[xZ†¶,й‰nÌ_š˜ùKlS[7Þ´ mY 3š˜oñ&æÖWÙÔÙ2¹ D-±¯Þƒ¶,*ð3™˜ÝlL?·Ê&ók¿ácÔñóQôÚ²hÀkÌ÷®Ò«lüˆk+gÌ8|á;ºrZÓ,üÂñe Xb‹ +ÌÄŒWÙ1;}Ìñs¿_?ýTtúʾ£»xMÀ~r¶üâ,±EþMÎóñá~N–Ó´äÈ}ÝÖTîÙgˆ”’îì¥A‡N_¹[YÿÚ²ˆ@VÙï^à3æ“û\Í$—¿>‰_‚;‘å>¡GSñ]8[Hcþýe}ÅÝ+ɇ‚Ü—ÌÒU’j%~Qá‹Ú‰à£Šô%šÞ@[Hc~ÿúYuѵԣ¡Ô^¤•øE‡/|±Ïj5µ©ƒ+_¢ƒÀ^ß$07dâW •Â¾Ø;‘ïE¨›$~-œ¦…—j¹ý"áë·Á(|ÍBá+êt6 +_°øñ+óäþ-®‹ðÝûO¶_¼Í9‚ð%rðâs,ÕÚö‹ŠØxó5ÅÜaýÎXê@ +—È@Å/ê¾Èá`Ïesô”¥†´¼Ä;ŽÕšºÐiSxÜyúú&´eA`û•¶n¹ÙäV©ˆMŽ­]6ï;™y›µÝcé,ÝOnøa•ƒ”†¡…ã†ÝÇ3ò<†Ãe‘‚~Z +òDêÑoê"~Xÿ)2De•ÂóD<0 œ= +œ;š-_s6Æe‘Ch`ÆW¿tZœ=ÒçŽÃF«O™ï°~'¾ôõ¸ N¤D ÞÀŒ‰ ö¢Î[ªLž«ÀWû6îŽËÈ{‰ü³ÇëiÑ¡>öôZ„ÿẟYŠÀ¸,RPkrÁZ‹àfkœHå¿ÿ„ŸžÁKÿ½'.2K_"³!'Ìëͧ¨&¸aV_äÁ–ý'³îÐ8Ae‚÷xëÍóq{6®Z`¤!+t€¾)‚?{Ñš¼ú‚;¢µi®+Å1û}ºü"*ãçÄ™‹Ý#“.TÀ3R"˜[]~ñT¦ïM2±¡œä¦,ED jùõâi9~"Ž¾-"øÜ#V™Yc»o;t:›| ¬¾D fÅY‘)ñ@Àêâ}K•$9NÇt‰;¹õklÑCpÅè¶xæDêñ +•©ŽÑ™µÄc{>¬€5¶Èññãÿ%;Qy÷JòÁmk?Yd Ýà$GRÌaÛ¿s í.²‘‡h„ï÷ñUž½Ô3øð™k ²B­8ùǦ“Ƶ¦2>^^æ|ä ÿž.Û¿s í0ÇU…WS¢¶{C©OU"¥¬7g™WÈ|»T9ZSYàPŠùä¤2u‰€÷Q_lÿÆo€wôx5å0¾‘-|À,xUÄÞ;4:R.ˆ_W™z~Æ`ž½OXtùØ>¸*"jðU>sx»g+*ó>ˆ€¹¨‹_S™¹öÅJ +T=Ú 2õ,Üü¾ôÇMÀµ/‘ƒ÷¤Ôµ/«þ8Ýsp¹O$ù•×ƒÊ¢ +¨ÜÇî´UeH_¢LT†IJäùšÊ°é +|u÷Î.À×U†Ó +ÑçË* Ÿ<†ÂÉ£ˆòå3©On\/ª[¢G›T,¥¬;{™ÜUÚpW„¾Ý÷¾D–¶Ýûâßá„›º¢HïpJ*éÀ}lÑ¥ ÷±ÿÏVˆ:mx¶‚zž“aÚðœQYžyaÚòÌ#óó àùeQåëÏ/Ãgˆ>_ÿ,ø\ѧMŸ+Ÿ$â|õ3‚àó¾º_ý¼/øì¾.@>»>‡SÔiÓçpÂgêŠ8múL]ø|l§ Ÿ Ÿu/ò|õ³îáçVt¾ús+àgÐtÚô3hàçI‰8mùyRð³áD6ül8ø9"O~Î#üÌVQ§?³~þ²HÓ¦Ÿ¿ ?K]ÄiÃÏRþT]ró‹º-![T ƒÔïhº“yr}SDx\¾ä™x©îˆ¼Aê¤üœNÓ;rÀ¯?µP™Ü¡îlÞwRpö(Jˆý¶‰:]f)¡q™R™ŒRZh”ÚþæÃÚçp*%:ðÏsÒ¢ÃÖ-§N—…)ÞÙãð1êSÌÉÇÁ‡Nˆ¼ˆ^ö¤Î©ÓåÿV™þÐ {ò3„l‘B0b$ÏŒk9HÑ!»'s*![äàU ˆ½‹+uå^èÜQðTJq"ÿ¼‚\ãË è-6¾ÀÉؽ…#v‹ó +ÿˆ„ ·Ja“-BPá‹\í‹Ý¹ÞÑÜPýÓˆMT&ç²ø‚߆ݼ«_¿D*|‘ÏúJ=êm?Ï@Uf¨àNáM6þd·åøÓ ®Õ@üxáëî•äCøÒ—®’Ô§áKàs‚È¥ ˆ_¢?|eÜàºh& +_ƒ> _‚ñËâ—ÈAm¾ž×> Â—å4-|èç᫵ø DÍ×Ù˜¾æS˜ðõ©ÊñkŽ_°ý¨[ºøpùjÊá`/ê +Á§áK0~Ì[îÛ/‘·eò€zþ¥D|¸ÜúæK0~QĠ’¯Ü­¨‡ÃGÑ€÷P+~tÙßÙŠ.·¾xñ‹| kÀþ“™wÈá#4fîóQ`'BŽ4dñ-ÝOÂ/~«5 >Ƈ~¢¯-ãáB¨È'ÇŽñ‹:|œïà»#æ,þ”lhÌ¢¯-3R:ŸÜìŠ_䆟ޜežÛã½|†ŒH@µe|èbÂÞÍÎøÎW+Rù7ü©_d/r*ëyÀ3×a¦eº-¯´0Òü\[¦oø‘½È4K'?ª1Ã…ÀoËW¿Ö–™½Õ˜W¬Û,¨‰,›ÛЗtéi™nË-o}Ò˜•õf OÌPÌœ†Yb?¼É›–?Û–óÄ™‹\·ì;qñvi]3X6סŸ"Kl|ƒà Ó²@cFóÔ«6î>–Nž–‚YŠãPsÔËúÊ{Ùôû m™71­†/r†9s•|¶.X6·¡ŸªÀg˧lÅOH}n‰M7fòLÜ)%SÛµ‘‰Y°ää>Ä°ÿxÓô¸$/#nÏ&'ËéÚrŸYbó3þà ùñÓ­V“YªäqÓ›?À²¹ŒÀz3õhغóñÙòçÛ2ÿ9j– +‹Æ¸Âµ ŽCö‹'hŽJ:¸Í}Él]eêñôÖÛ2š¥Ü·LºŒ¯esžaãË@hŽ²6&W¾>Û–ÿ‡?K)L0¶vÁׂn>xL_™¹ mØø“&Òbvø:š“9ª÷çÛ2o–!«idáè»#†¬¿À²¹ mØø<*ùPDz9ú*2CÉõ•)Ë–QÑŸ³ ¯¿.€esšüÛ›önvY4s¢¢=G}Veú“'ÈúËeó^lÙµôU™‹öÙ²øÒKîè~Þ°Ö_ز×ïŒ9 –Ímî(¸’|h»'2lUê2s“Y¶'X6×ù(xR±w³k[ »uˆÅwù.ÃþÔ²qʆ]6gJØm5l˦S6^Œ]6?r•/aK~Õ°…,›,Fâ©]6Üá$äÐñý«²i»aó-[VÃÐÜÁï² «àÆGÁÙ :–ç_NbV"m0lþbDZEoö÷møø‘wcdæ({QÏT”äᶋµq[¶€e’P?Ãjµßžãé¹÷k_ÃÈÌA˜["øÐ1:Ì×ÁÜPC¶M†ÍXvÿ²êSÌ–{‡Iɾ[#3a†åºÒ;Y‰‘îKfëáZÛ`Ø|ËÆ7FlÖì?qñÖC*es *{½~Vs?7ýøžM«­fŒWÔÃf,[l ¸¼ö´+7ìŠ={½¨ªáä/ÎAe¯O+îf§ñ^n6Eýk‡ŽBÅüw|û~´ªÁÜežA“.Ý)ƒüÅ=˜ì…‡åûÖؘê(I i›aӖݳÏ`I<2;û‡Çeܸ_óì5ì¿8†@öÂÃòÊÓȵ¾66eÙÔ–SÃpþ +ŸP~þ‚ý‡Ê^·áaYu4þȘÏ^ëû´˜"׿tgÙºáüEŽ,`ÿÅ)è½×³šbœ½üV[O@Ã2¹Ö×6•{ü•ŒÌ£PþZ¸rÃΘ4jÿ}Ï!¨RÆ{¯‚+§©ì¥!;‚–Û¢2scwøh5”¿<¶L̺]Š¯ŒÀ0Åè1ªï½önqÅÙ«­Ã2ß²yù ï¿ÎåÃù#·`ƨÊ{WÏ óu´˜ªõ Ù‹²lÞ‘ÞG%_Î/{ÇàQo]F XvOj˜Z°rýŽèÔ«÷*¡˜¹UÊoŸ×•å_JŽ +¦Æ(|æØöìEY6Î_x˜RÕŸ³Ô=ðÀ©Lúd +Š™ðJ¹87=.Âße±‰Ž’£>ý¨ä¶sŸÁŠfX:mÄ'SÔfŠ™}JùòéÃ!>+Ì4é1ês³~©˜{1F}ò<;Ï ¼yX ÅÌ èR~VsÿFF<Ùˆè*Kã%P̽ú ‘GmFŽË)‚bæ¥|åô‘Ðux#2 +_øFæ/ü,FmF콶JʺS +ÅÌ>¶(å5¶³˜È7e/^1ÿD6#“f.r&kN\̳ن¬½JÙÑbª¶<*åo£˜b¦7#c5 ç/'ÅŒ;3ÌÌ,Ój)Þÿ×oÛˆ3ÞŒ •VÒ1Yä‚:3ŠÙ•õ/ÞÁ6›UÈÂ¥¼`Ú÷—2eÙÿøå·ârT1£˜fæFØf³ +9Wþó÷—xVn‡R¦†)¼æ$Åìì·;6íÚ=¼Í†bfì×ÿþð†ž•IÀF¥üç-‹ùŸ¸˜Qg6³÷ Šê»rጠãÈ‘,e`rš†fvÛœDÓ0àE/2EEl^c;[_m̈bßq®ÜZ1ÿýg²çœdlµjš¦.çã°ÎE(z:¸Ý{…ÅTm‰Á}z‘+"?¦2oÏ9RVš¦âÒsPƒ Xçò‘ÙzÕ•¡è³kš¢ÈB_Üü¶Û^Ÿ-fÞ4åàŒX lÀ:ʯ߽¨¯*ÊÍÀÑËnÞM¹]ˆ3Y iÊt±‹ßî˜Ôì²Ïî4x~ýèÁ­¬¤(½,gL‡§¨Zˆ3^ôìHò¥ÛàÙùß¼Å~}ùu×ró©ã%‡öýᶰÊÌL|¬Æä9KÖl?žÝià¦,ä×NÖ3uTFo—­W ™Él(šÍ—{1žýöƒÌ iÊx]WVÀók ä×}zþ³¶^B2ó†fk§ Bž ­¹¡üúÞ_åf |üzÚxE)jTþñ­—ÊxhþgÏ>ƒF xvAYÞgCkî@>ÒCÔˆš’[YIt¾VÝ>§ŸÊüWʳ¥(ÏF9;#·ï³?€gw ÿ/¢^7Ö–æg§Æîñ_cËøu»F/FfÏžiµj}Ø᤬[%5 /éq +dîpS&CÔ“ŠÂœôøýžt¾î¿&*“¡y6ÉÙ¶kü÷Ħfç—Ö6¾†ÖÜað‡¨êûy…ø®Äû~¾no•ùžröTs{ÏÀýñé×ïU[iâŒÞA2rî•ÓS3ÈÜ®Ðɋהwû¯Y2wŠ¦œÄ`rÞØ1~MËŒ=ŸAªê™Z;­J¼x£MÍo>àåíöã#³¾n|\Š›òÞ­öxˆ’†ÏÛ}",ó_Éä` 9M4N¹ú¡ÖŒ¦æêúoáÜ¢]¡D&ëëŠ{9 ¶û8.4ž¤Œ—^ízÞتÌسñ½)4NÍ·[»%<6õʇžAk_ÈÎë_Þ4?­,¾q11*t=jÊúj²hˆjÇû!ŸS™:ƒD㔌ò¤ VxmÛwöjAI`°k7è‹8y•ÜÊ:}t—Ÿ«-jÊòxˆj¿û!_{6§dUuM¬V® ŽRQ”{áTTè†Õ‹ghÈuRSæÉŒO§~8b4I`ž[÷OËÎøˆZu‚Ì?3C½yþ´ª8/3éÈN?×%s µ$‡ö뜦LËü—¿òØLKGŸ ýñç®”>fæ)ùû¡Eþð¶ÇëK)Ñ»7ãä5aœ4>n씦L«LMÍ(’SןµÈÉ7øà‰ŒëwËj_1c3Èü}|ă2™¡jܾ’z,"Àc¹I^ëë!_‘™$0yÍÉslœQÐ>u>·°Éü;ÈüP"SÛë‡ùÙi8^;XÎÔå%¯ÎiÊ<™ÿ'0¼Ó6BA{ÓÎÃIoVÔ5Ì?™>¢@3Ôµs ¶¯[imª¯>vI^ç×<™ñ¹Å€á2J(h/sóGóTf^QÙŽ€ÌßÇGfòª±¶ ÏPCÖ£x=YS¾““Of*ý6p$ +ÚÓ-ìÝ·ì‰>•W\ùdþ^>ò·!µå…¹çOE…mt±;EKAjXœ¼:±)Ó*S;0*hë/Xî2ÿ|‘›ê* +o\Ä3Ôš¥fFãI¼îÈ‹_–™ÚcÕôf.tðÜ“’udþNh‘ñÊ«®¢(/3ùè.7»ùÓ&(1ñº3“—ÌÿDA{ˆš§L,¼¶FĦ\™¿:xa‘ŸTçeŽÞ³ÅÝÍP*cFòâuç«L'°_z÷G󔆾©•£W Èü½|"rLx€ÇŠÆ:h†ÌB¼'°öDó› L­Wz f„¢D¾™•¾Õ ÊzjìÌPŸÈüSO±ä4 fQ2Ÿ’–mY†Ð"_J‰Øêå`i¢¯.'1ÍP¸ØlEeZf46#™'c™·ÌßÙ]Séš9ÐËÑÊT_ Êý‘ÈlÄëOdîõ™áè¢M0"¿C##²÷JkSMyI4(ãŠxÝBæÐ2kµ&3D~ ú +o¼ê*Pð¢Eže © 5 ʬÅka™ÿö‰Ìt#;m¸=òe˜£Æw/ñœÌy2yø€ß¸ òe®k"‘ óøÈ;O~ù¬¶¼PB"³7(UfCWMŽ»" Ë,¯¡?s½Û¦°ƒñi—o•?~Fe0pmÂG~îj®'ÔéؽA¾«mͦMR+1´¿XOŽŠ,(ó0Iyu=c‹e®‚÷Oɺq¯ e°×¼ugw×™^…à–Ü„ÂuÁõ IÑá>«læN¨";ŠˆÌWkÊ,§¦3}þgß ½1Ér +V?å5çî^Î<·~ûå.®OÙàµrÑÃñÊcćôëÍe‘y2÷ë?Tb¬ê¤©ólœ|¶î9š˜qõN iÎàÚný¦µäâ[WΞ8´s³»ƒÕ¬)ÚãFÜ—œ'sWdþµ±þCFÉ*O0š³ÈÑsË®¨g¯Ü*.Ü€&ç?þݽ³6ß­_?¯¯)½w# ‡ëMnö M ´eF êû+×EæËÜ»ßñÑJÚ“gY®Xë—ŠšsiMýó×ïºuÖþ(èÖOªä Üµoû×eh‚ÒP>°Ï¯?s^dFæþһ2Šš(jÛ¡ ¶/öôÅœ‚UO]»ûéÌ2qk4%ß¾š‘x4ÊÚÏ^¼é~å,Pȯ©lž´ÞÕnÊ]ãF‹î‡Çd² ‘‰ÌôD…3Ø8-Ôœ×E=•ž}«¨ìQýs4:w¯r¦:2»šžT?¼wãvëo'Ûù3tQîBášóTK2Øi Ôœm¼vŠOÍÊE!L¸œ»¾ÎüBþý5Ž]÷ï\»púØþP?wë9S'©ÊIâp-j" g0ÒœçX;¸o +Ù›„CX¹`9wyÛþHGkªqìºyåÜÉ#áÛ|]íšNF-Yb(»DKdÁæ<`¨„¬òøɦ ì\|÷>‘véÆ]~9w}ÛêÈÏj+Kòs2ÏÄܱÅkrk=MEñ!ýHî‰p- nÎÿË4g49ëÍ0³YéévàXòy¦œ™Ù¹ ëL4þÿÆP…\VDb×Þàn+¬çMÂS2nÉ¢”»éA¶Úÿ 7çáRrªf[Ù¯Y¿-ü¯œÑìü*ç.jÛy©‹DkTÈ9™©ñ‡vmõq^ja2Y¹õ°¢Ø’ùð›ó€a²JÚÆ涫¼6SåŒÂ6š_¾}ßum›Ñ˜,»^4>©F9;#)f_ˆŸ»ãâyÓu5eFé/&’-™¯9‹õ¯¯­$ft,rG€‹.du»~ëõ³è»5íÚÿø΃FHáržin»ÒÃ/xïÑ“iY9wÐðü”´ç®0= iüêyC]Uiá­«Râ£ömXë°Ø ²²¬äðTìênÍ@¹6]Σp9Omiçâ°ã@lâ¹Ë7 +J*£öŒ—a}>ûæ=Òž_¾¥uÑ‚þDãš²âüÜKçcìXçjo=wºž–*äA]®)èrþ‰êÎhvždhº`©“§_pÄ‘„3¯¡©ªªÇ0¬óþ+‚ÆýQXãf¬ñýüÜËéÉÇîÞ¶a­£Íü™“'¨¢hÝ% ™B¨œ‡KÊ*iéMŸkeïâ³%l4jÏ×ï•¡FtF9LÔŒ›’XHãòû7®dœŽ‹ +߾əõ,# Å1(Z r™‘™tg4;”–W0Ùxþb·õ[wF¢ö|)7¿¸¬×3Îad®•‚fÊø¿ÿá{5­qüáˆog;+lÖÊc¥F FÑšrWsk~9÷î;pJaض-–¬tß´ûÐñäôËXçj¤óË7ï¨ùY$ +šgÕÿù÷Ÿ5>Ÿdoè×å‹ÌŒ±YˈЧ 2‘™Ìν~ë?¥0%-Ýi³.Ãí9<*îtÆåXçÚú¦¯±Î"`ÜyVýŸ!ß¼D³êÇDã¬ñº5‹ÍM '©c³ÔW ÏÈ]±# Òƒ¿ +ë3`ˆ¸´œÊxýs­í½ýC"Ç#sï•V=~ÚØŒ´qsQhžUãvüþѸe.äÕXã°ß56¦F:š(Yc³þõ—.^È4Ì*ìç^bĶÔ&Lži¶h¹«ÏæнHçôK9· V>zòŒ6îsUh2þ÷Ÿ¼ûúES}m5š°ÆñDc7G[‹YSuµ”åP²¦Ì/»ºt!SðÊ¥0”¶%ƌӘdhbnã°fݖЈÃqÉ粮ߺWRŽ‚2n¦ çæŠÐ|‰Q“vÜÜøôqUišPæB^M4^0kªž¶Šjȳîú…LAÊ¥°Ÿzâ´=Bj¬’¦Ž‘©ÖysHxÔñÄ´‹Wó +Šiãþ¤ Ùš’˜85)clÕÏž<ªxPx;çR:Ñx Ñxö4¤±¼Ì¨aƒú‰õê&fÍ£϶q{:RZNYKwê,¤³«𞃱'Ïœ¿’{§ðA…@A3B³l݉‰Sÿë\ÆĪËKîÞºžu.9î0Î\ŒÆªò£±Æ¤!w³æÞI{*.#¯¢­‡u^áâí´ëÀÑ„ÓéȸïÞ/#M:t ¡ÙPú#Ϩ‰ÄØ©_ã2~\YZœŸwõbZâñ¨ˆ”«4>…®ž?1ɺ‰ü?ŒmãöÜK¬ß a£(MÍ/wöܶ÷06îìùEQA×7QÎM Í÷îÎTZ ˆi‰±S77’2FV}ùü™“±÷ûû¸: ÌÅhŒƒuOÜ»“YóéÁkÏ$†µtL̬íV­õݲç`̉”ŒK¸ Q‡~‚œ»¥Ð§ôGAŸæIüª¹©¾îQåÃ₼kȪãØäçí²ÂÆg®O4îVf͇·$!1lÐðQ2rÊš:SŒçZ.q\ƒŒ{çþ#qIg/f£]R^ýøé3Jè$Œu–Ò?~RĨ‰ž<ª*»÷*ãÔSÇ¢ö†nôt¶_lnŠs5­qo»¥Èÿ#Øž‰ÎÃFIË)iL4˜>ÛÂf¹³Ç†€ÐðC±'RÒ³®åå=@B£ŠFÖÂUÒ¸Kó•nw­ùS +S¿Ç½¸¹±áÉ㪲’Â;7²3Ï%'DGîÞì»v•µ™‰‘®h, Ýž)‘o‹KÉŽSô|ëe+Ý|üƒví?r<1õüåë7 h¡Q{ý—ôŸ‚5Í“º=´þ($0_aRÄ/ž7"£&#§NO9‰ÊxGà&oWÇ%–s§èh*ËÉÌóè!¬óÀ¡#%Ç(¨haã^h»ÂÙsC@ÈžÈèø¤´ Hèü¢’²ªGuõÏž¿À%ý X<¥‰Ô|­¿Kmÿ· À”Âïßá"njxZ[SYzÿ’øRFjâñ#ûwmßìëîd¿Øbötƒ‰JrÒhvîÇÝ\c _g”ÃÄú2BB†÷´Y¸ Q‡Þq0&!9íüåkywîÝ/­ %Í(kš’š§µ Ø_¼Å÷Rÿ…I?y\]þ°øîíW³ÄqG#÷„nÝèåê¸Ô +YµÞx5EY)q2ƒÆ-áéŒçªÞ}ú&.-«¨¦­kh”µwh –xÅ«ù¦Ó&OÒDeŒ­ºŸÞx_ žÎ¸AcãD +ZI}¼ž¡ñ‹EË]Ü×ù†ìÞŸ˜rîÂ%¬ô½âeÕÔ MÍHë×´Ø´ÚXo¢8­9Qþ;òUüËøÛˆºH^Jß—ÍÏ›žak*Ë–ݽs3çê¥ gSNÅEÜ»38`£÷Z"ñ¬StµÕÆ•‘1Y5ŠÕ ñWèÁ7n’¸qA£ÑJAEc‚¾‘ñTÑ+V¯õÞ¸eûŽð‡cÏ`¥snÞ¹[tÿaYEUÍã:¤5ªkJl¤6–û=KŽ4ç©N©Šuýÿ"ú$.RËû¢ùy#Ò÷Ií£êÊòÒ’¢{ù·n\¿’uþlJb|ìá{‚6¯÷Z³j¹­%’ØPw¼º’ühÉ‘¨Œ‘U£vŒÏ@ã¯Ð² Q‡!¢˜ŠæD$ôìùV¶ö«\=|ý¶ïŒ@æ˜rö|Ö•k¹7ï—`­«!±Ÿ6æpdÄÎà­›Ö¹»8Ú-^hf:}Šîx eäÔ£†“2f¬4n|qC;·„ÌX$ô=Ãé¦ó,Zæ°ÚÍk½`È®ˆÈÃ1ñ'“SÏϼ|5çÆ­;÷Šî?@bWV×µŸÖ74<{ö¬±±©é9ªq¢ú+¢*ªÙçMMèWêŸukˆ¼¾·oæÓN'&;zhøÎà@ÿõ^nN+–Z[Ì5™6Yg¼º²‚¬ô(äÔýûˆõú•1ϪAã¯Ó£EAc熄–UPV¯3yêÌ9æ–6vŽÎk½7øï ßèhlüɤ3ié2/g_ÏÍÃb#µKËË+*«ªª«kæµµDu${C=Qµ¶éZS]]UUYQ^^ŠÔ-.¼WpçV^îµìK™çÏ¥b££Dì +ðóõrsv´³±œ?ÛØH’–š’ü$ñPÚ©¡Œ¿‚þçϔЃ°u‘WRÓšˆKz®2oGg7/_¿€ P$õÁÃÑÇÖ§SÏf\ȼ”} ©}óöü‚»÷ + ‹Š‹ï— ÑË°ê¤j’µä~qqQaá½»ùwnßÌ˽Žå½qé{2>ö(8lûVÿ >kœìl¬ÌçšLŸ¢7ASuœÜh)JbâÔ¸C=Zz”ÔhäÝêÚ“ôf˜Î³°²±spru÷^ï·e[pØ®ð}‘QGcŽ'œL<}&í\Æ…‹Y—._ɾzõÚõœÜy7oÕ1XÕ[7ónäæ\¿võjö•Ë—².^È8—vË{<æhTä¾ð¡A”ÀÎ+—/]l‰6ÔŸ¤|z¬Œ¤8êŔĴSC'Dg¹„î?pònTÒãT5Æë ¥çš[.ZbïèäºÖsÝ¿-ÛCwìŽØyèHtìñø'“’O§œ9“švö\Æù ™Xu R5óÂùŒsgÓRÏœI9œ”xòDüñØè#‡"÷EìÞ²=pó¦õÞ´ÀVófÏœ†¯¡2NnŒ´Äˆaƒöë#ök ‰Aãï£GK¡ëÓoÀà¡#Ä%edå•Ò“ô§L›9kžùÂE¶Ë–;:¹¸yxû"±·‡íܾwßȃ‡¢9{<.áĩĤ¤ää䤤ÄS'âŽÇÆD=r8êÐÁÈûö†ïÞ´u‹ß_o7'{,°Ùl“éFºµÔUÆÉËâ":h*â_{b£þ;åÔPÆ?ˆ°Ð(uS%=x؈QXéq*êZt §›Î1³Xhm³Ô~ÅJ$¶»—ï†Mþ[·m Û±s÷žˆ½û‘ê˜Èû÷FìÙ½sGXhHðö m[ü7mðõñrGò®\a·ÔÆz¡9ªàéF“u'jk¨*)¢–1t0Ôا…%˜–Bã’¦•—”#§ ¤Š¤ž¤7ÙpÚ “Ùsç[XZ/^²ÌÞa¥Ój—5nkÝ=<½¼}Ö­ß°Éoó–€­Û¶m Ü°e³ß¦ ë×ùx{yz¸¯u[ã²Úi¥ƒý²%‹­--æÏe2cê"°²¢œ¬Œ”ÄÈáXaªˆ‰OSF ·#ŒÐ(ŒµPzè𑣤dÆŒU§¬ª¡5~’®þd£i3fΚ3o¾ÅBKëE6¶K–.]fg¿ÂÁq•“³‹«›ÛÚµkÝÜ\]œV9:¬°·[¶té[›EÖ– -æÏ›3kæŒiF“õu'Ž×RÇŒ1lÈ ýúþF:1SÄ qGÐC°¤”î7`‘Zk-¯¨¤¢†Äž¨£g0Åpê´Æ&&¦³fÏ™;Ïl¾ù‚…VÖ‹ÛØØÚØ,^dmµpù|³ysçÌžejbbUš–ºÖÕ5Wöè1²rò +ŠŠã”””UTTÕÔ5´´‘ê'Mš4©ª­¥¡®¦ª¢¢¬¤4NQQA^NvÌh)ÉQâ#‡Cúì-š'0iÄ|…AâŽGHiJj\Õ½~¥ÅîL|R{’{”„„¤¤”´4},RÉŽP@ªŽÅ²JKKIJJHŒBâŽ@êÁåÛ¯oJ_aAá·¯4#5¥5_l¬ö€ 0+àK°ýö!Ø.€‹°ý®€V`»,Áö›¾Û%°ÛïAhl +Àl¿õàÛ`»b`ûMß Û¥tl¿×à‡`»€€‡í·´lWаýæ€v†í’Ú¶ßSÐ!°]X@»Áö[ :¶+ hØ~@'Áv©ßÛïèTØ.8à{`û],ÀvÙßÛo`¶ëhl¿M€°]ˆÀ—`ûÝ‚írZ‡í÷p¶‹h Ûïà(l—&À‡í÷p¶ €6Áv¥vkØD ¶ëµ›Â¶ì z°]µÝ¶Q…íÚíF°-5ˆ6lWp·€m‘ +ÀvwqØ–ºlWs—…ma «ÁvMwAØ–º&lWv—‚m1 +Ãv}wØVº8l—xW€m  [Àv¡‹6l«Ý¶Ë]Ta[7èv°]ô¢ÛŠ@7…íÒ%ØÖ +º5l€hÀ¶JÐÝaÛD¶%öp¶õ€†m3à.l+€l[a[Zmcàl«@ë°í ‚m)øl;W`[¾Û&Á>l+@›`Û*Ø„í×€o€mÃ`¶_u¾ ¶=ƒØ~ÕøfضΆí×€ï„móè<Ø~¥ø!ض΀í×€…mé Ø~hØ6’Ž…íW€vƒm;é(Ø~]hOØv”Ž‚í×€v†mSiØ~Eèض–ö„í×€Ž‚mwiOØ~-è@Ø6˜öíW€‡m›ùQØ~ýè Øvš…í×€N‚m³ù~Ø~åèTضœï„í— €N…mËùØ~Í`¶çÛ`ûÕ€ØöžoƒíW Ö`Û~Ú +Û¯,ö µ ¶_$X†mú:l¿Bp¶­èK°ýÚÀØv£/Áök‡`ÛZ‡íWnÁ¶'µÛ¯ +œƒm[j Û¯\„mgj Û¯…msâÃö+waÛŸø°ýJÀiض( Û¯\‡m—°ý €MÀ}À© À¦à>àTˆ`Spp*Dp*¸ØÜœ +‘l +îN€HN÷›@$§€û€MÀ}À© À©à>`SˆàTp°)¸8"8Ül +îN€HN÷§€û€M €SÀ}À©à>`Spp*Dp*¸8Ül +îN€HN÷§€û€MÀ}À© À©à>àTp°)¸8"8Üœ +î6÷§@$§€û€SÀ}À©à>`Spp*Dp*¸8Üœ +îN÷›€û€S €SÀ}À©à>àTpp*¸8Ül +îN÷§@$§€û€SÀ}À©à>àTpp*¸8Üœ +îN÷§€û€MÀ}À©à>àTpp*¸8Üœ +îN÷§€û€SÀ}À©à>àTpp*¸8Üœ +îN÷§€û€SÀ}À©à>àTpp*¸8Üœ +îóÿ„aû·Ð +àTpp*¸8Üœ +îN÷§€û€SÀ}À©à>àTpp*8Îÿû¶G-ùÔ©À¬ààTpp*¸8Üœ +îN÷§€ã´jS`Vp +p*¸8Üœ +îN÷§€ã|Á¦À¬ààTpp*¸8Üœ +ŽóU›³€uÀ©à>àTpp*8Nm +œ +i»SYÀàTpp*8Î7Ù8¬ð­Nf@çN÷§€ã|‡MSÐÉ|ŸSYЙ€SÀ}À©à8ßmS`VtàTpp*¸8çm +Ì +€Nœ +îNÇi›³ C§€û€SÀqÚѦÀ¬àÿgïMà¹Ú÷ýÿÓ9gŸÝ¤”L2— ™§ +E†ÚBI¨ H”!["”æ¨$ Š¢”’!’"„4ÈÐH¥yÜûœsïÿîßÿóYk}âûµ ïç}Ü»%u³žß÷ûõ~ÖÀ% SÐ÷áx§‚fgáF›‚NgN@‡Km +š:}®v*hVôn·)èTôèTôqz¡MA³ ‡@§ ïÓk +šÝ£7Ût*ºt*ú8½Ü¦ YÐ  SÐÇ¡¥MA³ীN@‡Æ6Í +€.Bw£‚N@'ÐÝ¥(è¾ ôiènQt_ú.t÷§VÐ}1è£ÐÝœZA÷Å /Bwgjº/ }ºÛR;Ð}Iè[ÐÝ“~Ý€>Ý é‡Ð}aè+ÐÝ:îË@Ÿ€îVÔ9t_!h†î&Ô%è¾HÐ ÝM¨«Ð}  ºÛÏO@÷¥€èî=? Ý  »ñtº¯½ +Ý-§›Ð}ÙèUèn9݇î+@/Aw³ét_<zº;  ûÀuèn3œî«¡»Áp º/$Ü‚îîÂa辜pº[ ç¡ûŠÀaèn*\î‹ +'¡»£pº/-ƒîvÂ]辺pº סûÐSèî"½Ý—€Aw é=è¾Òtº›GoC÷õৡ»mÐÝ—€ŸƒîžAt_x~ºÐ}íèt· +ú¡Û@w“èÐ-€Ž »Cô!èV@ûÐÝút  èn }ºÐ +º[Bß…n3PÐÝ ú4tËCw'èЭ;t÷€~Ý¢`PCwèOÐí +)t—~ÿƒnc0è »èû+t{€AÝåÞ¡[ è®õ~Ý`àCw•èÖºë{@A·L˜Ð]Ùº•À@ƒîš°Ð-tWó‡n½0 »ŽtK€þ Ý<ˆ [5ôWè®ÝAÝ ÿAwÕRèÖý ºëuPC·|èÐ]©4+èºk`A÷kú(t—&к_Ðç »(ö¡ûu}ºËèº_Ð' »Ρû5tBwý?Ý/ º+èt¿j W¡»à€îC÷kz ºK è)t¿‚€»Ð]aÇ û¥Ü‚îÚ8ݯ)à0t—À-è~eÇ »˜îB÷ë z +Ý5ôt¿Ö ›Ð]:@oC÷+~º‹  º_zÐ%è.€~è~ @'Ð]"@_îW"´Ý•ôEè~U@+è. OC÷Ë G]‚î×)0¨¡ûåô3è~Áƒº_ò@…îW.0X û• è~º_àÀ€‚î—30¡ûE Lè~]º_ËÀÀ‡î×8Ðï¡û% "è~±ýº_¶À …î>Ðo û¥ +Я€Ž ûå ­ » €>Ý/Iø!tÐ' ûe]‚îBhƒî—ü4t ЫÐýr€AwÜ…î×pºK +à0t¿ €‹Ð]^ ûE½Ý¥tº_5@tÐ%è~™@_îZÚîô]è®Nüt×ë ƒnáп¡»‚8të€Ý5=p Û$ è®õþÝÆ`°Cwè»Ðm€ö¡»7ÐÝøièn½Ý—CwSát_Bh€îÆÓ t_ú:ÐŽ``Ðk³=½ÁΠû8h{ÉÿÞà…ë|gàÿl ãÝß™¡û(°[` øñ/Š_I¿Ä¿ÅRÃn…îO¥Ãò@Y  +?tèÐaÆ GŒ`¿½ý.i‡ôÂJºK+Xa;ÀFŽäá5jôèѼ˜1$ÄÛè}£FñðŒ‰Õ`/” S ÝŸ]â;„d;@ÆŒ;–oÜ8~AA!Œ0†xKPP@€Ü8¾±c‘$yÁV),%`¤«P&ØD Žka²€ðcÂãEDEÅÄ'HHJJIII3@oKJJL/ŒÍð#/ÈÊ(\+È S éC˜*ØD,T %-#;q’üdE%%eå),”••”&ËOš(+#-EŠÁZÒ ¡5.0Ò,ÿD&˜"Æòñ  ‹ˆ‰KHIËÊM’G +¦¨¨ªihjéèêMÕ×700d`` ¯?UOWGKSCMUe +#?INVZJB\LDXH€Ÿo,RÒžº?õ¾C6T`”ˆñ¢ÈƒŒÜ¤ÉŠÊ*ȶ®ž¾Á4#“é¦f3gYX沶¶a`mm5ÛÒbÖL3Óé&FÓ ôõtµ‘eÅÉ“ädÑñB¸JFñ°!m`W‹‚01Ž)B^AYE]S[OßÐxº©ù,‹ÙÖ¶s~›gï8ßi¡ó"W77·Åô_W—EÎ æ;ÚÏûmŽ­õl‹Yæ¦Ó õõ´5ÕU”ä‘’ ¨JùÙŒ€V´V1|Ï(ÊÄIB„ªº–®þ4“æ³mæÚÙ;:-\äºxé²åž+Wyy¯ñ]ëççÏÀÏo­ïo¯U+=—/[ºØuÑB'G{»¹6³-Ìg˜LÓ×ÕÂJ&ÉI£"¡Œ ®BX|§bô>~AÂÄÄÉJ*„ˆéf³fÛþf?¡‹ÛRäÀËÇ×Ï}`pÈï7…GDFEEoa¾iãï!Áëýý|}¼—¥n. çÛÿf3{–R¢£©6EQ^NZ’0‚r„§º¯}´£B@HD\›PÕОjhbŠDØ98-Zìî±ÊÛ×? ($4,|sÔ–˜í;wí‰Û þ`¡C‡1è¿ ãì‹Ý³kçö˜-Q›ÃÃBC‚ü}½Wy¸/^ääð›í왦Æz¨H° 1!T"L!8Ôm.ð,ËR!,".%;IQE]{ê´éæ–6¿aËVx­ñغistÌŽ]{ãöÇ'$>št<ùä©3©igÓÓ3¤§ŸMK=sêdòñ¤£‡â÷Çíݵ#&zó¦Ð þkV¯X¶xÑû¹Öf&†ÈÈ…I²’â"Bß ¡ûÒô6d‹j­Bt‚”œ¼’ª¦®¡ 2aç¸ÐÍÝsõÿÀ°ÍÑÛvîÝèð±)§Î¤Í8Ÿy1ërvNn^þÕ‚‚BWóórs²/g]Ì<Ÿq6íÌ©”ÇŠß·wç¶èÍa!þkVy,uEEbmjDWSUI^Nj‚ˆ0)dØÐÁéƒUC‡±©˜¬¬¦=ÕhÆ,ë߉e+½ýˆ-ÛwÇ8t$)åtjúù Y—¯äæ^»^|³¤ôVYyÅíÊÊ*••·+ÊËn•–Ü,¾~­° ?÷Êå¬ çÓSO''9t v׶èˆÁë}½<Ý‘‘¹V³fL›ª¥¦< A- …úðaD ª†Å^#Gñòñ ‰*ÔµõÍ,mç-pu_áíø{xÔ¶]HÄÑã'‘‡‹—sò +®]¿Qr«¼¢²ªúNͽûjÖÕÕ7 1øúºº‡µîß«¹S]UYQ~«äÆõky9—/žO?sòø‘„ý{wn Û°ÖËs©Ë‚y¶–¦FúÚjÊò²Râ"‚ãƾa¹Àe1vœàx”ò¨*ŠÙs.^¾Ú7 dSÔöÝû9~òLzfVv^AQqÉ­ŠÊjä)¨oh|ôøÉÓgÏ›šš_¼xñ’z»¹©éù³§O?jDfÖ"/Õ•·JŠ‹ +r³³’”¤ÄøØ]1ÈÈzßUËÝÚϱ43F¢$/#!†;*¡¬¡ûbq¦ Ô¢PY %!#¯¤¦5•Pá¼ÄÓË/hãæ˜]ûŽœ8uöüÅìÜ‚¢¥åÈÃýÚºúÆÇO‚ftý_µ¼~ýæíÛwïÞ¿ÿzûÝ»·oß¼~Ýò +¹iFbžFFîT–ݼ–w9óìÉcc·Gm X³bÉÂy63M¦jª †%*Ä?`}´q!,&9QQMgš©•ÓâkB#·Çb²ó‹JÊ«ïÖ6<Æ&Pkúø ‹ =Ø üÕ>ìfR'ß¾¢*yOyT_{•HQ~vfZÊÑø=1!ë¼–»ÎŸk9Ã@[UANR¬º¯!ÇhÝ£HºFæÖöÎî«ý6DÄì‰?š’–‰UTTß{Øøäù‹W¯‘‰Ï¤ B›†ï/?õHñ¼RH%ØÈÒHóó' ïUW !—ϧž8¼WtX ïŠ%NvVfÓtÔ'¢@gó1PÊFêÈ…ƒËrïõ¡Q;ö%žH=™©¢éEË¢&°ˆÿ0D´ÕÐéÓÞm¥0”à"ÁF>¼{Óòâù“F$¤üæµÜ¬ŒSI÷n‹ñ_íîlomn¤Kø êÏW¤]‘M +ïDvS.fÚ8¸zø†mÙôTzVîµ›åXÅSÔŸÞ¢¢@5A”Äw"ºñ~k%”T#(GÞ¿myÙ„„Ü­*+.¸r!-ùðþQ¡ë½—»8ØP>ˆ<ÇûÇ€hWd“Â{71ÓR.l]=×mŠÙ›püÌùì«ÅeUwqU¼|M¨ ºª ÒD÷=´ã„*ÊÈWBª†5·K‹ò.eœ:¿{KX ‡«ƒÍLìCûàÅû`ÿoWT“Âg ¼Ø…Î Â…oPø¶ØÄä´‹9×J*îÙ[™h*O’b´«~XdaüëW´íñ ¢ðVÖÔŸa5o‘Çš Ü£N.jjŸ½ Ë¢—U´‚3„Q ÍOkï”߸JùôYælg9}ªº"Š²]õÃò`¬h’âGMJQ]ÏÄÒÎy™O ‘—¯Þ¨¨©}D¸ÀeAÄvïª` iU ï^¿xÖX[CúHŒ ðZê4w–‘ŽêdÜ®xFô»ò`/ŸjR:F3ç8-õ +‹‰MDy] è~ùú=nQìeÑ«*¾‚ „ðñˆò‘|hï–PÿU‹mÌ µ”'IŠ +ò±Êƒî«ÜE£* 4I)i˜Z;º­ôݲ÷Prk¸E1Ë‚­„àÁ ëýë—„âü¬³'îŽ +Yëé2o6nWhºÂiN”G?éV¬Q +ÆdU]Ô¤yø†Dí>xâlV~q9îQ/ß.˜eA›ŠV>þ7,†;åÅyS“ìˆòqwš;ÓMWRý«<¨.…v ”¸0 Ím,õŒØq )õb^1š£Xuñ?´— fÃbúh¬­.+ÊÉ<}$.&ljWÖ¦údyàáª?è »Q‚da̶w]á¿qkÜ‘S™9EeÕhŽjë‚n ˜ ‹òñâYêÒÂ쌔C{¢C|=ÙYëå1íý Ì©.…–o~á DaÌqZæ¹;!9#»°´ê~š£ú¦ ‚V>Þ½n~ZïöÍ«Yi¨]…z-oC”‡¸ð8޾߭]jĨ±¢Rò*(1ì]W® Û¶ÿXjVþÍÛ÷êŸ6¿~×w]`Ø}||×Òô¸®¦üz.jW±[Cýð>øÇ×OïZš?¬)+ºr.9aWDàêųMtUˆnÕWg+"2~ù×°¸KÉ*j˜ÏuöðÛCFuí#Ô¤>}ýŸô}ÿÕ®þ‹ãµ«Æ•%W³PylùÝw™“­™¾º‚´ž­ú¢ÄÆÇ;u©)ÚÆ–ön«"v%¤à¸׀¶½_¾õñÀh {| i÷ Jó¢+Éñ;6­[áb7kš–’ìa¼ ö¹ð`FƪK¹¯ Ù{45 Jï÷ŸÈ&Õ_\`Èø ÚJóU7ó/œ>¼'*Ø{ êV:S&JŒçï{áÁŠ ´ñ)¨ã.åé¶=þDÆ•ëåw럽|‹'©þÒ¤Ø`ÆÇ7"ÍëjÊ®]>›´?&tír'[Ó©jhÄáѧ6† "2”´Œ,æ¹® +ܼ;ñÔ…ü›UQ…A5)º/ðÏAµ+<]áòh¼ûFîù”„áëV,úm¦†‚L_ RÚ2Æ £ÈÐ1±r\ê³aKÜÑ´K…·jêÐ(õFÿjR,Z—Ç“‡Õ¥Ygï‰ òr³·4Bá!Ž7¾¢ƒ1LD[†$Š S[§åk7n;p"#Å7Ú1Þ1 +£?ºÀ0Êã¯h¸zÖp·¼(ûlÒ¾­!kÜç[á!¬º™›~,62€N cQ€cn^¶H>Ÿ_ZSÿ å÷” º/w`„Ç·Ïï^=­«¾™›‘D«JS†wH̫̔¥5 Ï[Þ3ó›îËÆ5XYþêYݬ#®Ž^<³bÊŸ¨‚2ˈO¹põÖ݆ç¯? |¬,G{ù³ú;%yHG¡ƒå½w„HÊÆ3F-}zf(3ew›Œ¶òµs´zßò¼½w¢KÝ\B2Äd§èšÎuñÚ@ʸ‡eàÉv`S­¡F+4é’:ÎQÍ +öÞ’1rŒ€˜¬²ÎŒ9‹Vo=@Êh~óq°È`ŒV,Tv 5PQZ”Ÿ—ºýÄu¤ ^1%鶋Vma—1p'Û¶P:þdéˆ\ïédm¬¥(-ÂOÜœåz¯B¥ñÏ ÉË/*£¤=ÝÆyePôþäÌ«ƒOF»:6¯÷X`e¬© 5~ÒÁõ9ËøeèˆÑü"ÒŠZ&Ö WFí;‘‰¦)vt_¦Þ‚X’Ñ4ød´Õ·ò½þË- Õå%„Æò ÿ•«ÑÁ:‘œ¬a4{ÇúÈؤshohz=e´£ãèžp?w‡Yª'2Ö®Ù gÛ±BòꆖŽËý#öËÈ+Á2> F­t<««¾™söÈ®0ß%ó̧ªÈᵃ›IN$8šmÑ +®ª?ËÞÝ/|ÏÑôÜ’;õÏ« ¦¼>««ºq%-qg¨Ûo¦ºÊ2hÎåb’}jè4ÛÊNÑ3Ÿ·Ä7lב³97«ëŸ·à |PÊ`×ñêéêâËgmñr™3­"h°âV’3\DZIÇt®›OèŽÄÔ+7ªëž2þgpÊ`éøŒtÔÞ.ºtêàÖà•ÎÖÆš“%…ñ`ÅèÀ¡SZ&¶‹V‡lK8}ùzå篈SÛÁ*ƒµ•~÷òɃŠkSöGx.˜=M}Ò4X ãJt¡A&¸‘•ÓŠ -ñ'³Šn×"Ÿµ Ö™Õçw/ß/+È<·yÝ2‡Yúªrâ¼#¹dhŒä@ n`á¸|}Ô¾ä …ž¼|Ç1hmP:þýíÓÛæGwoågÛ³ií;3=œä܈Fhð‹ ¾tmøÞ¤sWËî=zAÈøGèøøñMSCMIÎÙÃ;C½]q’KçFt°BCQ{Æ\WŸ»Ž¤ç–Þml~ûéÛ¿½ ¦Ž¯_?¯¯¾‘}&aÛ†UÎÖFÄNÎéè` ckçU¶BãÔú¦7¿ è{à]†ÔAl+‹²Nˆð˜o‰vrÎGG«Ð°œï¸åÀÉK×+ñl;X·¾ï t ¥üý+4XfžˆÝìïnoNFy~È1Äñ + e=s{wÿÍq'ˆG³-È`ÀX;Þ½xt%ùÑÝakÜæÎÐVæ#¬8UC†ÇS|ÂR +(4ÜÖ„í>š‘ëÞcÖ8E÷•è:ˆÁª±æfNZâö2:&ròÀŠêSc'Èk¡ÐÙž˜–SRC$8È`Ϲd’×U_:¿E‡…¾ŠœcÌåˆ j¸“SÑ·pôˆŽ?u©¸ªîùë_ñ82PIþõCËÓÚŠÂ 'b#ü–Ú™é*Iã1—C½Šœ§ðp«¤cf·Ô/"‡FíSf‚Ó}úd’ã#’ÇDtìÚèíbk¢9YB÷*NÌUŒ>…†[Mc[ïÐ]l¡ Þ*ÉÉ踒š¼b¥¡ªœ˜/gz«O¡ávÁŠ ˜„3Wn¡ þ=H>"!¢ãzVÊþÈuhÌE½J„èU=.jïã/­¤k6ÏÝ?r_JVß 4ÚHr´¾zú ¼à|Òž0×9Œ^ÕómžB}Êgãîcç +Ê<%7ÿƒÐh 3:^<º[š›–¸mÃJ§Ù¸Wqb®Â«±÷ɪà>s ·wɳBö £ãÛ§7MõÕÅ—NîZ·ŒèUãùz|^…#ŸO K)ê˜Ú-%úÔõªú¦7°iühëøÐò¬¶‚êUh®"wÀžá¼â“Ô¬yoÜ…ú9Üþû¿?€:?|Æ\¢Wá¹Ê@E–8¯êIq0V 婳=·&¤’}ê l?†9æ65½*Ò©©Ž¢¤0>[ïA3WÉZÓç.^— }ª V_?’½êØîÞ‹¬ÔñÙzO‚—árª†³® +Ùq$ã*š§pŸ‚á¶#ˆèÀ½ +ÍU9© [=gê)÷,ÈÙ#­ë¢ãOg£½ÍS¸OŒ Ç\a{Žg^»]÷úTçP½êC Úó3ŽìYéd©¯"+2nTw‹ƒµ…ã÷ B«Fî­{_Á<Õ¨^õîEcÍÍìS¢PÏÐV`näÝ+¡#xÑ®IF8Z5ªšß~þæ©Îaì€ÏÞ.ÌLÚêål…6rÑqÝ<®¢¦Ûq"x w¢"­ø| +úT§P;àûWhéÈI=¸%`Ù<3ÉîsºUÐÆ[xÔáÔª2:‡:¯z‹‚¼è≽a>‹¬§©É‰òw«8ˆÒ>jžn­œ½Bw'eNž£Óý¹ö}XA~¿,ï졘@s]Ån£4$tÌì—l9˜šSJF8ô©®AùçwÍh#ÏJŽ _ãbc¤6Q¬;ÅA•ZüÔ¦Y/ò Û{âbÚÂÉ]‚ ò¯ŸÕ–ç§'n "‹C¸ÅÁ, E]sÀ˜Cgóʨ-J£‹°¦Ü;Å—RâÂ׸Ú©£âý³ÅÁ( 195´ø­ MÎ*FÓ-±…ƒŒ®Bmä¸8®¦Þìé8³[ÅѺ4‚¶%¦ç—×>{ýñDøO@9>®ª¹Š#Â×Õ¶;ÅѪ4\ׄǥ\*¾ÓÓíÏò×_Œâ¨¸šqx{7‹£miN¿ŠKãy÷•îϱÿÀ^—O²Šã§Æ*Æ.J¥*5^¾ÿþ“à 'Šã!.FrüÜÎAÞ»Æw¥2~ŠÖÉîëúó;q_•†¬ê4kŸM±P݆*Ž7TqyþôBN<µ3‚WPBAÛÌ~y` 5PáÒ?K›âÀ;‡>Ê%îstµQ ãá‘Q1´Zä¶íh ¢JƒîÏ®¿ÁLrçÀ 9q”‹ïw¥UQwÃ&ÈkÍ°sØŠ×p(nÓª8b7ù¸XOS•%Š£K­ŠoÇŽ—VÖ·\èµqω‹×«ñ®¥Ñ-ØŠ#?=1&p¹½™öd AÞ]{¶ŠØüFó‹MÒ0™»t]ôÁÔÜ[žâ5J£[PÅO«²’÷†y;[¨ÈŒçãéRŽ£ ÿåW´ùI)éÍZ°ò÷]I™EU Íx ‡Òè¬â(ËKKزÞÝn†¦¼¸@׎Gã-ÚülÝÖF8}¥ôÞ“\°kt²8Þ½h¬¾~ñøîÐÕN–S•¥…ÇveÈ%2œouÌ<ƒ·9Wx»®é-yxK÷çÕ?!ŠãÛÇ×OïßÊMò_2×Do€]Èq"ÃyøÆ˨X-òÙ—rùæ]æ-?º?¯~ +*|Ÿ£¹¾êZæ±!+æ“Ç#(Ç;r© Ÿ¤9ÝÎ}=oóËâ»ápxÛ}ˆ£Üo[žÜ+É>µ?Â×Õ ¹"|<Ã:kUäNd¸Å‚U¡»_¼~§ñå{(AÞ!ÛTw» ãð¶ÀåóLµ&OèBŽ“{8•á~‘ñgˆñ6¿žA=>Bl€hÈõZh©ß•'÷p^Á “µÍ<‚w=­ª·P=¸CŽÏñ{0zÊqõ‰bîãxÙ öð)³Q†ŸDãmÏal€ ÕE’PŽãÛïãÔ²!6QÃ䷥뷠 ¯xøü-<›ÐS¨!·åÉýÒ+(Ç׸XªÈˆt²3— EÝ™óñ~2œ3C.•ã‰1ˈ}œz\¡£ ÇJFÅÐÚÅ7b?ÚÃïC†s4äR9^œubÚÇ-ô”¤ˆ•ãÇ­ŠlTübxÙXs8£àvd8'`æøƒ2´Gú¹Ù+GG­ŠjT’Šz³Ð²±çDÖšG¯>à‡¨ 4zuXÕÜPuíü‘íAö¦ZÌ£ÃÅ«Q¹®Ý|/Ï`çŒ}üñÝ›—SbñÊ1µ“VÕªQn;|®°/ᜀÜÇß<¯-G+G”ÿb[#µŽ[qFENTŒFõ7*X68¹£•£êZæÑÁd«ê`ª"æ[bõÃjT9¬FE÷çÒÿ!o:á£C²U9YLU’"À4*⌠+¯~î1‰Ш8µr<H´*?7|;ž8«j78ÈÃt “uÌW„ì:~±˜œ¨ Ã9¹r­ +OUËçÍÐœÔÁY1ߎ’RÖŸíì¾ïÔ•Râøg`œŽ<¾{ãRòžÐU fê*Hþ(8ˆù–‡ODVÍhÎbÿ脳W+êš Qq²UáƒÜÜ36¯q±2˜"-<æÁAÍ·â“4Mçyï8–YTÝø&*ÎÁXë+ 2·®_:×X]ŽœqÛ Ö|;kÁê{S.ß¼÷![Õ‡Wî\¿´sƒ§ƒžqdlKO1 æÛÔܲZ|˜ŠcgU¯ŸÞ/É>I̸zŠ’‚¼í¢rêÆs—®ßš˜QXÙð‚8L‡FÅ!p«úóËÛ&4ã¦ÆG®uµ6TÁ÷cÛ FlÈk™9xnØ™DÌ·ð¼''a͸…çǸÿf¢.'Ú~pP±!©¨gáä{2›¼µ±Á9¨÷Õãšâ‹Çw…¬p0ÓþQp0bƒ8¿ŒOÍ+ØônmpbÆýôæÙýÒ+'ã6y-üap°bƒ89|®° +bƒÓ3. +ŽŠü´ƒQTp´·q´Š òXä1ća;é88˜ÛF«Ø€/à(ÌÃ28~¼q´Ú6˜±Ç"œ… ´q”27‰v‚ƒ¼ ‹©`Ûà"Ìà 6_ëöªˆ{£Æ‰MÒœaï¼óØ…ëw`Ûà<Ìà¨,¤ŽªðíØïîqàÇ÷6tf.X…©JîÁ¶Áy>ª:¶3ØÞºÇÑææ8âB’JSg;ûDì? ‡TÜqTu¯ärÊÞ«æÏÔ!¿tà;8ÄeT¦Ù¸ùá{Äcmœ†8ªúüöymYÎéý>ΖÄÍñ61Îqr÷Ûväü5|oã+ħ!‚ãË»æºÛWÏ&Dû¹Ù´·ÿadˆ›ÚSG†[ȧûß?° ‚ãëû—äþ×~Œ›8ñ€ÂÌùdˆ“G†œ†íà0 Å8ù¨O[ä®ÒTKgŸðý§s Ĺ[Œ'ï ]9ß\{2ÞÆ[ Ul›¸ëÚ¨ƒiùâÜŒñ7ÏÜÊ9µo“÷Bbo3TQOʨÍY²oâÄ.„8ç¡b¼©®mã›}]¬ô•¥Ú UŒ‡wðHµ,pûÑLØĹŠqb¯¯,H?´Å±Í´ï†*Òc¤Úu<ëÆÝ'-°‰sêÁ‘—Õ×Îa UøùOÖ§Tü⓵Íç¯ +Ý›’Fª7Ÿá81N UŽí^>oºÆÄ6·8¨S* =‹…Þ›öι#·À‡êh¨zrï楻ñ½q-ꤊÍ5àêÏ^´fóÔ¼rê™Oˆ ŽÃxþó~ivJìÆU ðIUëNÌ×К:¥ªo†›Üz¨Š8©ÚNŽ¸­Ï Û ¸ç +«È'pa¤âÝÚuwcM,Ü…u¦~åT\Øj´þ)LÀëÓùÀˆ²¾•‹oäÁ´|Xþ¸¹p¼mzX–Ûîú‡mŒà’R&î5¡U¼²înp Æú‡Ÿ7<@>6Òê~ë`ÄÆÍË!â©OXþ¸¹þ½k®«ÈOc,ãøYÜ66dT¦Ù#×à`„‹0—ñÛWÏŒZûÝÝ?¶cª¥ëcŽœ/ª†ƒîA=Äó¢à/©1À6F0lPß{‡x>Ý=puF¸¹Œ“6Eû¹YLimƒù ¡Ý² Ç.À17aT5TfÚâO¶µAΘç ©»â°Šs‡öl°q[=£À<4„c*nÁ<Ä-ÌHÄO´>Rg<„+¯eæ¸ò÷=ÉÄcŸpLÅ5ºbƒzbd#þÌψCC©¸ËƹÄ-ëÚ·‰žµÀ‹8Â¥ž\¡Säº.õü~$ ¹Fç6¨uü€ú™Ür8Pç&¬§ ÛµAÜÞ”PÄ_.@¨?„u.Ò5JS-Áí î6úЩúØ€ïU:·nïÛ__¢+6àd¤·èŠ 85ì-:?5„õÞ£+6ànSoÑ…»Mp'¶·èôN,<¥Ð‹tò”<ÁÓ«tò<ÝÖ«tåé6xò³·è“ŸðTt¯Ñ…§¢á+zοb¾š¦÷èü«ià+ÍzN¿Ò ¾ +³éô«0á+”{‘.|…2|õ~oÑ¥¯Þ‡ïlÑKtá;[Àw}é5:ý®/ð‘z‘N¿#|·°^¤Kß- ¾“^/Ñ•ï¤ße²·èÊw™„ïÀÚ[tá;°Âw'î-ºò݉á;w÷]øÎÝð]í{.|W{ø‰½FâC«Ÿ†?ÒŒ[tí§¡0Rñãþ²á'q‰.ý¤ ÆOÑÒbUpnÈ ºöS´Ø†*÷Àmø‘*8©â]ú sÌ¡Ješíbÿ-‡Ò *ᤊté§/’C~ˆ‡yR?Кtõ'“R'Uº³œV“?ìnÆrž.ÿÔ^êÖ¸–™ÃŠˆq.ÑÕŸhMÝŒ%ÏF?(bœÃtñ§½³Å¸Íbø!Ê\‚¸¹bã~iöÉØ0/'bÿ.Ä™1NÜpÂ?`™2‡¡bƒxzçø®O3-âɶ6!ÎŒqòçö†îM¾L=ÅÁÁA˜±Aî~ÄÓ;mnn°Å8q‹ñߎc®Ãs#‡ùiñÒ´»û1bœør3|¨¾%‘ØÿÞÁþÇQÈØÀ÷įœŒÛä…p%Û‹ Æ¡:þ"+¼ÿ¡Žq!88Ç_lG†(6V8˜i·Ô¡:±ÿǸDpÀÝXŽÂŠÂŽcƒ±ÿ‘Á±5jU0Uq¢Qýñ±åɽ›—Sˆù–¸%þƒØ`͸’JzNT«zL´*X{1Q‘*óèŽ`{S<ßþ063.¾kÊlU°r¼úáG>k‰Få¿ØÖß„ÅóímOU‘­*2>MUŒtô ”áÔDE6ª…–S•¤¨o ÷­[ÕžY7ÐøáÛàX½Ç0V?j¢"•@ŠÕªðTµ,pÛጂÛõ¨UÁÓÑ=æ/òŒêͳe¹©ñ‘~n¶Fª7*f«ÂÏ*àpÿéœRâéhX9z +¹l|xù¨¦8ëÄžÐÕNz4*F«â”TÔ9åﻎ_¼~§ñ%¬=‡Z6šênd$Æ,³›¡ÙñDE±NÔ˜þÛÒõ[ͯxHÜ„âèŒS‘'÷K¯œÚ±ÆÅÚPE¦“FEµª‘cÇKO1°Zä³)îäeÆéäxO 3-ÕE’v†¬pœ©‹¤ê°QQ­j8¯à„ÉÚfžÁ;Ž¢•r¼Ç03¼¶ -Ñë–Ì5QŸØÁ{qàcu95#ÛÅhå8“{ëäxO!÷pœá7.%ïň¾2¾Ûq£"ΪÈ;€JS-œV…î†çäNføámËç™j‘_(Ða£úûÊ1ÝÎ=`+Êñò‡ÏaïŒ=üɽœá¾®øøexÛ/øAŽ+™ã)(ÇÑ>ÅÑÈgEˆ=<óÊðù(Ã%‰e£ýÃtöVE® +:8Ç·9Wx»®é-œ«wò,ýÓë§n妌òG®1QìG'|Whå sÜmmäÓWJïÁÛãmcõõ‹'öl\íÔÅ '‹ã¿ü:ç¸Þ¬hOÊ,"ÎÕáþx7¡J·åùgm p·›Á:0ìÌ#ÇÅ&i˜Ì]º.ú`*1äÂýñîBÝf"ÇÛØM>‹¬º²‡³µ*rWÖ·\èµqω‹×«_ÀM§nÂØüž?¬¸šž¸-h¹½™¶¹‡w–ád«Âûøh òZ3È!7¯¬öl€Ý„µùݼ|2.| oåD;ßÃÙ‹cŸˆŒŠ¡Õ"ï°½ÉYÅw_¼‡âèdi|F¥q»àÜ‘íÁžŽæäxÛµFÅØÇñ«mf¿<0&1=¿Š£›P¥ñêñݛ٧öoöu³5"Ž¨º–áTqC®¬ê4kŸM±)—nÔõ¶ má—NîÄŽ¦[á±<ă"ݵÑ*È­yoÜuì\AE-Ñ«`®ú84ˆ>…VÜ´ÄmÁ+X¨ÈŠvëL¤Mq0ƒoä‘ûR Wuµ÷} ûTÒž0W["»?ݲtüƒ r¼‘/XŒ–²W}&ïÊ‚Ž¶üÅØûšê‰>µn™½¹®RO#œÒA9ÚÈ5Œm]|6îF½ +ÍU¯ÞçUmù‹:Ÿz÷ÍS¸OmXé4mábü£{áŒâ`läJºhé zUQUÝó×ø¼ +¢ã;þú?b¸ýð +í}TŸB«ÆdæÞ3Tæ“SŽ*(&áÌ´6¿¥ÎÖA;84þçßß>¾~^‡ö¾”ý‘ë܉>%Â×ý-¼MqPK‡¼&êUÞ¡»Žfäߺ÷ø%DÇ÷0‡ÛæÆš›WRbð<…ûTWV:ˆ¥c¼”’Ž™ÝR¿ˆØ +É1¶ŽÖ0C ··ò3ŽîÚèíbËèS=Z5Øt0{•Š¾…£G@tü©KÅDtÀ I+þ"7 |XX[QxáDl„ßR;3bžÂ}ª+_®Ñls•‘µóªí‰hÌ%¢¶vˆÿ÷W"4Š/Šßà1ßB_…CóKÇ?ˆ¹JXJA{Æ\·5a»Ù¢t0 §¾‘¡‘“–¸=d•³µ‘¹÷q"Â:p¯Â; Œ²ž¹½»ÿæ8ž[è  oDhì[ã6w†¶‚”0±÷q¦O6È^Å+ >¹ó=·8yézeÝ3f’ƒ2ÁÿüòþÕ“…™'b7û£áVOY†8ŸâXŸ¢tà^5¹Æ(:6l;”zåÆú¦7h $vòÁ®ƒJð/Zž=¬,Ê:y …†¥*>GçÈÞ×JÇßñysQt¸úlÜu$=·ô.‘äx°ì:HD‚×WßÈ>“°mBc9p>ÕÖcÌ•¢g>oéÚð½Iç®–Ý#Ï}’S2¾}|ÓÔPS’söðÎPo×9Óµ¥ðpûë?9Ù§˜:Ñaá¸|}Ô¾d"Éa°"d"hœzt%ø±=›Ö.±3#Cƒn9kƒ=:Ô¬œVm‰?™Ut»çr¤ bœz|¿¬ óDÜæuËfé«Êq#4(ÌèPÐ2±]´:d[™Ëh'GƒÕàžs± r¶}‰Æ©kSöGx.˜=M}Òn„eƒŠŽq"ÒJ:¦sÝ|Bw$¦]¹Q]ÿüõ žsÿb,ï_=­½]téÔÁ­Á+­5'K +s%4Øt Á+ F$ùß°]GÎæܼSO¬­† ´h<}XU|ùÌ¡í!^.8Á¥EÆq'4˜:PtŒ#ˆ’\–ƒ»_øžcy¥5 híÀ- F,-Ïêªn\IKÜêãö›©.Npêa6®È £ƒ‘䆖ó—¯Û{ü\þ-´v¼ùômPê d[_]õÍœ³Gv…ù.™g>UENL€³ÇSßÛ ¬Fñ KNÖ0²ZàµïD&±v¼”:Ød<¯¿s37ýèžp?w‡YhŸ 8†8žâJh°ë@IŽ+cë…+£÷§\(,¿ÿxPêøNƱ½þË- Õ‰œk ΦãŸ(ÉGó‹H+jO·u^¼5þäÅk¿|7èt´–Q’›qlïæuógiL–$vp.†KÇ¿ðN.*£¬3cŽËê 1O]*º—òA¦ƒÚ32ò2’b7¯÷X`e¬© 5SÜLp¦"ÉGŽÁs®®é\Wïß·'œ&u°šÕ`ðÑŽŒÈõžNÖÆZh¶åG2¸™àLÔ`…æ\9=s»Åh BèáA¡“K£2¢°ŒéH^4H½aƒmíÀ[ …Öqèô¥kå÷›^ø2t0d|Fx;2xzQ›Žñ’”Ž;Ne–Ý%tüñŸÿØ£us >«C{•6Óu(¿ö¢ ÖÚ1no¸[víÒ™Ä]áþ h—Á¦ƒOxÂDݶÎ+ÖoÞs$õrQZ"¿V—äg¦Üêëî8ÛXK‘vLøD\VYÛÄzÁr¿° '/\-½óðÉ‹7Q·(³£KýñùÃëæG*oädœØ¿5Äg‰ƒ¥‘¦¢´(í2(Ä™• ˜¬’¶ñlGwßÐmñÉçroT¢ðxýw«0[1 +ãO´e´|ס“™y7Q·B³Úûuy‰AÍR¸K£È8°-tí²ÖÓuU&JŒ7ºÈÀ:ð‰î¿°´ªê™Ú:-_»qÛãéWŠÊÑlõòíGVyô?¬ÂøòáÍ ¢K]J;½Á{‰Ãlcme¹ B|Äm×>!ãoÌ»h-–˜8EÇÄÊq©Ï†èØ#g² +J«k7¿F«Yý®]ýERDa´4=z€ºÔ…S‰»7¬rµ›5MM¶‚cGõ%ì{ št•´¦YÌs]±+!å|n1 +sFyô¿vÅ–¸0êï–]É8¿=ÌßÃyŽ™¾údb˜Þ§d°íhÒ•VP70Ÿ³ÐÃ/4fRó‡¸<ðpÕÏÚáâÿC.þ £¶ª¤ ë êR!kÜç[O×S$)ÂdüúKŸ’ÁZ<Ðh%"…ÂcºµãRïàÈ=‰§2s‹oãò@ÃÕ·3ÚUðñ3½…Qq=ç\J®ˆ€Unó,pd£&Û>%ƒ¹x ,7^BNYÛÈÂÎeź°íŽŸ½\ˆÒ Wh÷è?íŠáŸ×~|‹F©¸0ÒŽí‹ õópžkn ¡(#ÞÇò› Æh…ÃCLFA]ßÌÖÉ}͆(²<*îÖ£Ýãýg²]õ}ÌÀ šTó㺚r\‡vGy/q´ž¡§*/%*Ð×ò›VxˆJÉ«èšXÚ»®\¿iû¤³— +J«4>õöÛtÕw}ALRD“j¸wûæÕ¬TTýW¸ØY .…¶ ~Þ>,˜áÁË/ZjRj«o]ËÎHNØìã¾ÀÖL_CèR}22X0÷òÑ|h¶šŒÂ|¶½ÛÊuaÛöKÍÊ¿yû^ýÓæ×ï>õiL80Ð$E4©ÜÌÓGâ¶â˜gi¬£Ò×»ÅÆ;Ïþñ•µˆòð ŽÜœ‘]XZu¿áÙ 4íöYì.>½{Ýü´žhRiÇãwDz/E…a ©„f©>Þ¥PÝ +—‡*5\®+ü7n;r*3§¨¬º¶ñÙË>êã¯V.Þ¿~ñ¬áAUiavFÊ¡=Ñ!k=ÙYë¢øìó]ŠÙ­È0!ËÃvÁRïÀˆ’R/æ—ß©}ô¾ „TÁrñòYcmuYQnR1aëV-v´65ÐP’CñÍZ¿û¸ f·úu8Z=„ÄQz áÊn‘‡oHÔîƒ'Îfå—×`o˜>úB0ÊÍQ jï”ç]LM:°#"ÈÇ}áÜYF(1¤Å¨øîó]ŠÙ­å†+SkG·•þ¡[öJN¿tõFEÍCV}ü÷i/f‹B3í7†‹šòâü¬³'îŽ +Yëé2oöô©êŠ²Paàøî]ŠA«ò“–WÑ1š9Çi©W@XLlbJkhÿø/³@èò³Eý÷ßÈÅÇw(/°‹W/¥'Ú»%Ô5)3C-åIR¢‚l…ÑOdü½<Ðp5AVQ]µ+çe>áÛâ§d\Æ>P¿zñíßþÄç%Œé]!l*P‹úú™pÑH¹HIŒ ðZê„›”êdqa”Daô—.Å€Uh÷•œ¨¬©?ÃjÞ"5AØÇÉ T(? Ÿ¿â†Å*Þò3-ȲøôámKóÓF”„‹ÃqÛÂ}–9ÛYâ&%'!"0¶?¡ƒ®Ðî!,ŽÚ•¶¡™µƒ‹Çšàˆí¸>°;µ O›[Þ~À «—…üõ]Y¼ó²éIýýê²â|ÊEÐEöV¦š¸I ññâQª?%;CX»ÇXÔ®Tu¦™Û8¸zúGà~•~)¿¸¬ú~ý“¦—d ŽÕ;B( TY ¸¨»Wuëz^Ó…‹ƒµ™¡6š¤p“5¢Ÿc÷ÎÃË'ˆ¦+5]#sGìƒÈô¬¼ë·ªî¡@onyó¾µnù«­ +"-Þ¼jzÒP[s»äZîÅ´äÄXìÂÓÕÁÆ|šŽªš¤È&…wŒ~Y$ÌòÁƒ¦+QI9Eäc¦-öò#619íbε’Š;?Ñòöý'BÈZ á v,ïß´4£²@-êFAvfêñ„½1›° Gs#]5‚Œ&Õ ƒ„(”æÃÐt…}LTT§|¬ Ú³7áø™óÙW‹Ëªî>lÄ‹]»‘;ù‹Í* +– +Ô¡ž?ixPs»´(ïRÆ©cñ»·„úx º˜‰\(ÊIŠ +ãåéçMŠÉF»6M»Bb””>a[vÇ=•ž•{ífyõ½‡O !¨e‘¡Î0ÂTÒ'Ì?ÛÚÄ·/„ +ÜïV•\¹–|xÿΨÐõÞË]ˆºPœˆ]ÑÏ›‹!Œåc8ö!Lù@yî²Ü{}hÔŽ}‰'RÏ_Î/*©¨¾_‡…´`!_¾ýÁ2B(a9éŠö&þ4Ñ° ”Ú_Ql¿{ƒ«¢ñá½êò›×r³2N%Ü»-"ĵ»³½5åBL…÷ÈaŒIjÈø£]µòóÜÚÞÙ}µß†ˆ˜=ñGSÒ2³ !¨Bž  yóîêY„R ÓI+)­Í|÷;ÿGy@"˜5L ¢xýª5(¤¢¢¤(ÿòùÔ‡÷ïŠ ô]±ÄÉÎÊlšáR#q` „&Åb›Ñ :ÓL­ìœ¯X¹=6áØɳ²¯’BžRJH'H +¶BjaŠaA½ÿ HáñùÓÒÄ³Ç ïß©,»y-ïræÙ“ÇÆnÚ°fÅ’…ólfšLÕT™,‹ò¢µ‹%ão­}à<•”¬¢9ÕØÜÚÎÉÍÃÛæ-¤ÌËy×n–UÞ¹ÿ°i~Ù‚”¼ÇJ°,Y¡´PfØ ßIHÀ ñçØ!âÝ¢&°‰T× r/OK9–·#:,Øoõ2ǹ–¦Ót5”åe$ˆìÀ.0­} yWBF^Y]Çp†…­ýÂ%žÞë(!)iç/å\/)¯¼s¯¶®ñ1RòâUËä× *”¯ß-È a†ü®? ß¾¢røüé#òðöM .‰'H¥Å…yÙ2Î$9»#zS°¿—‡›“õL}-UʼnÒâã¾ L‚ãÅ¥&*¨hê™ZÎqp^â郄Dïˆ=x$ùLÆ…ì¼Âë%e·«kî×Ö5DV=~òyAb^¼xÉýª¹ 9xúäñ#dáaíý{5Õ•e¥7ŠPI\ºjâðÁ¸]1‘aÖû®Zî¶Ð~Ž¥™ñT-5%”¸,ˆ5h\`X>pÃâåã™ %7YYb¿Ðmùª5ë7„Enݹw‘¤”Óiç2³²sò ŠŠo–Ü*¯¨¬ºSs÷þ䥮¾ÑH‚߬¯CÜ¿[s§ª²¢üVÉÍ⢂üœì¬ÌŒ´SÉÇãc‘‰M!k½<—º,˜g‹ªB_[MY^VJ\DpQD‹4.0¤ªañŒƒ;Öi†KÛy \–z®ö]½ )9˜xô8r’~þ¥으ü‚kEÅ7JJo••WÜ®¬¬bQYy»¢¼ìViÉâ¢kùy9Ù—.œOO;rühbü¾=;¶nÛ€L¬pwur˜k5kÆ4TÊ“å¤p‡Bi1r8[‹,.0CØ  ‡…à +QÓš:mÆL«¹öN.K=Vùølصuû®½ûâ9v"åÔ™´ôs™³.gçäæå_-((dQPp5?/7'ûrÖÅÌséigN¥œ8väPü¾½»¶oÜô{Ð:_/Ow×…¿Y[˜èjª*Éc¸C β`Á*ÖBä•T5u ŒMgYÍ™7ßÙÍÝs•ÏÚuA!Ã#·Äìؽ7îÀÁC‡;ž|òÔéÔ´³ééˆsçÎáÿ¤§ŸMK=}êdòñcG:x nïî1["Ã7†®óõ^¹|‰‹aÂÄPOK}ŠÂ$YIq!R•ƒÔ†ð +¤•qIÙI +SÔ´‘3-m~³Ÿïìºd™ç*o_ÿ€ ÐM‘Ñ[·íص'6nÿøƒ ‡J$Ao%Œ?°?.vϮ۶FGFl + +ð÷õ^å¹l‰ËBÇys¬faÚê*ŠòrÒb¸A}§bpºÀ ù^ +õñbÒròŠSÔ4u¦š˜Î´´žcç0¡Ëâ¥Ë=Wyùøú­ ÚðûÆMá‘QQÑ[XDGEEF„oÚøû† Àõ~¾>^«<—/]ì²p¾ƒ­•…ùt#]-Ò„¤¸¨° ÿX^¦ +œƒ¶,X|/„½¨D$¤Q(©¨#%FÓMgZXÙÌERœœ]Ü–¸/÷\¹ÊË{ïÚµ~þˆuëÖáÿø­]ë»ÆÛkÕJÏåîKÜ\œ†¹6V3MMŒ ô´5T•Y&øÆ Øn£b°» h+dä(\"ȈØI¹I“•¦¨ªkéèL3žnj>ËÒÊfÎ\;{ÇùN ¹¸º¹¹-&Ao¹º,r^è4ßÑÞnî+ËYæ¦Ó§èéh©«NQœ­… C%2Šw ß8!B‰4v¢¨¬¢¦¡¥­;UßÐÈxú 3óY–³­¬­mXX[[Ͷ´˜en6cº±‘¡þT]m- 5eÅÉ“ädÑñBdMðŒ$L€ŠÃ‚¦,ʪB‰ ðxQ± RÒ²'MVPTž¢ª¦®‰¼èMÕ×700da` ¯?U9ÐTWS¢¬¨0yÒDYi)‰ b„ˆqcÇŒfÔaTtK*Â¥d,v‚êDTL|‚¤”´Œ¬ÜDyäEIIYy +;ÊÊJJÈüD9Yi)É âb¢"ÂB‚ãø#Û1*:`»R ®žQ”~le¼ˆ(ö"!))%%%ÍýJRR;-ðc ¼È)Lt–†Ò ’Â3j4²‚µ /‚‚BaâmAAäK@H ȪØH˜è #¤ ª“¡Ø +ÖB ƒÀøzï(Ô“°l¨BÄ?`¢» ÂÒ +ª¤yÁfZß5 K@CX <°D€‰ž0„Í !— +à Á¯ ï  gü%t2„!CZY!µPfZÁø¿·²¸ÀÖü½}Ú|ÝÿèÏΡûŸ‘•5õZ:ÃÍÏÇq&¬ñ,Môë¹nkýÜ}y¬yüyT%Œ}xT$lxT”UÔt´Ô´$ðª*::ø ] u] ô&> ÓV%ÞPÓÔÐÅohjéh©K8º¡?®Š?ýc –®º²†ªŠ–„’šŽŽ²º®ªªÄj¶wªëè*kéjéHh©ª*«éh¢w¡¿WYGMUGBSEýõºlïY£¡¢£¬¥­ÆþNu5-eM üqÌ¿Œõ.æÿÓ%<¬wªêh+«èhhJ°þ6U ôè²þ2Þ±„‡õ/c¼õÏgþMí|šKx–ñÌãÑ•˜$/áè€Þ".ÈR-ê².í^öwÿìÅ‘uéÁå‘uéîBÿän_"Y/ô¿SŒ}ýfx.ñóôöró ”Ð#ßåëF¾9Éx–„±¿Ÿ·ù:õ r——˜ò›Ÿ¯§×r EôûS%&/õ^ìîbM|IðåhçE¯Ä/è + 6løðá#0èÓ6l(º*¿à«Ñö¥A¼(Е:løHžQ£Gó"Æ Pðç6zô(ž‘Ç ÅW£íK_ +|%FðŒÃ7Ž_@P!< ÁŸ™ ÿ8¾1£yFà«/Fë—Å?~ù] ^>¡ñ¢â’RRRÒô©IJˆ‹ŽàãEWã×_þÁþ .ÅÈÑcÆ‹IÊL”WPRVž2`QVVRŸ(#)6^`ìè‘m.ºÿüº|BbRr +SÔµtôô (úz:ZêSä¤Ä„øÐÅøêCØ_CGŒæ—QPÕÒ7š1Ób¶•µÍÅÚj¶ÅÌFúZª +2âÂ|£G e{a ‚_é̹‹—sróòòyy¹9—/ž;“¿#ÌÏÝaæTeéñcGmu-xøDdU ­® +ÞºÿøÙ¬ÜÂë7JJKo 8JKKn\/ÌÍ:{|ÿÖàU ­ UeEøxZ]‹a£Æ‰MT7¶uõÙ¸3ñÌżë¥å•UÕw ÕU•å¥×ó.žIܹÑÇÕÖX}¢Ø¸QÃZ_ ~±I&s¯ ßsìlvaIEUÍÝ{÷ïß0 @ŸÐ½»5U%…Ùgí _»x®‰Æ$1~¸?¾P#Ð;¿ï©0k}?kÁ ΘÁa7cíf°³³ïìp–Ã:Ë3>Öá/œý²î {ßÝ {Epñï­ï§Â½eö‹Ï´yiÀ³(Ì—<£ÔêjÀ³kß]AAG×ÈÊšz-áæçÆã8“GÖx–¦ úõ\·µ~î¾<Ö<þ<*ª*øÿ:’¿oæ¹Ê]|ÓÄ}¹§õÁ“äñǘóL™á¾Îs‰û\s Gk'æW×ÔVÖRÕR“PRÕUSV×ÔÕ•p–PWU‘ÐÑF¿ïèÑÙ‡âߢ>œúŽ„:ú`UmâÏi ÿAÂ#+Kü£ðg¤'¡£¢«ªÎã8k8ÝOÝœäo0  »’¸Ý×8Ý•Ä-è¾®ƒ‚!C†ÐýOøÐ]IÜ‚îë:@Bðw‚üBð/‚¡C‡’oï$?€ü`òÒýÏÐ]IÜ‚îëÚè´úà FŒ"C0Ž@PP|ƒ|'ùä“üK Š{Ý•Ä-è¾®ÿ?{÷WYà œÞrOs¿ß&÷„Üšû…´IÓ6MKš4!4M[’ÞBÒ´¤)µÔ‚Õd/•uw]ôÁXeùpeYqñãYýYÖeÁ ò!¨\DDu¿ýþç¼É8=™¼™¼™“79ýÿöYÓé;çüçýŸyÏ™ifÁe5ÕóÚ;H6¥™2M¹¦BS‰©¢¢BÜ?wwQ "ôÚeÑbÑ_Ñ\vÖBw“ì¢;Wý$•e5Õ¥«©©illlnnnmm½ÜÔeÚfÚeÚk7ÄÅÄÅ_Ä£aLQgQdQaQ^Q[v:º›dݹjà¯JŠ2Š¢ƒ£££Çÿð‡?|öìÙÛn»íSŸúÔ¾ð…ûî»ïÁ|ôÑGñŸ¸ŸàçøSÜ÷Äýñ·DEsEgYXº›dݹjæǶN÷ê)Ê+nH^IÙÊ9ÒÝ$»èÎua‘Ví TÔYÜP>e%g¤»IvÑë‚æ—«¸¢Ë’«@¼¢ëº›dݹ.z>¶˜í³›î&ÙEw®Žei.›h7ÝM²‹î\‰üCw“ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆhñ¹„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆhÁÒý‰ëùÅÔT05LMSSÁÔT05LMSSÁÔT05LMSSÁÔTø+5"""""""""""""""""""""’ËÍÝ0²ýž±=áÛÛÂs×nªÀÿîÞsÝØàÑðŽð+ÃsÊÖ[?´olèðÈž£'\ øQÁÚý‡÷ºÄ݆>4Xè*»bìèÐÈWÁÚM®u‡GÆ^‡û»Z‡†qW÷àuÇ†Ç +]Åø»—áÿÃë]…®í½•«ÜµÊü¿í'ÂÍÿÚ^3ñ§¹•õU¥••5U®’ŠÊšÒòÚŠz×µøqMeyiUm½ÇOÛñÓï‹Ý3¹Ý›\kö¶å涹Ğ ¬ÝT?й÷ºÁ£ãƒû.<1 îtØ…2ë#Xÿwy]MUuUMuy­«lÓȘ«`?¾bppáäÃT{©`ëk÷ïŶ Œ;042°uøº^x« /ÜÐM#×íÙ78`<…›ÖlÙ3Z8u_6\?¸ï˜ñ@þg¤wÁ3V]Ymf ?YUZ[m>5åÆ“cN<¡ƒ âfË ¶ob¦àùÂ}6†—­Ú7ؽ±Åµ½#|çÄs[«(­)¯©p•”×——VV××»®rUÔV¹*WUÏùÁ™îküÑäý'ÿ»ÎU‰»#cãoVáÿp§ðÜ\s»Œ½kpUTÕ¯ª©ß¾)D÷G䉈ˆ¬t/‰üM!š ö…H +C¤€}!RÃÊ)`kˆf‹•!RÀÊ)`kˆf‹•!RÀÖÍ[C4[l Ñl±2D +Ø¢Ùbkˆf‹­!š-¶†h¶Ø¢Ùbkˆf‹­!š-¶†h¶Ø¢Ùbkˆf‹­!š-¶†h¶Ø¢Ùbkˆf‹­!š-¶†h¶þçBº7‡h¡ûŸ)toÑBÇÖÍ[C4[S[ÃâIx­ [C$1]kX"¯$•aqˆ¦š±2l ‘…/­aqˆÜ|¬ »Ct ¿bg`ŒP¼L#È!(88$$$Ôñ°“ÁÁAÈf…‘‰uš˜y‡„…¯Œˆˆ„(G3ö0"bexXHp‘‰ušy„†GDÅÄÆÅ'$B’ƒû—jdbDráY¶"yDÆÄ'&§¦»2³²²² ;˜éJOMNŒ‰D&+–yN’‰@Â"¢ã“Ó2sò ‹JJKË®´´¤¨0?'3-9>:"Ì Y€@bÓ²òŠÊ*kêW¯^ãh«W76ÔÕT–åe¥%Æ ’K–xN‘ Ðˆ˜¤ôœ¢òšÆæõm›Û·tt:ZÇ–öÍmë›kÊ‹rÒ“b"Bƒ<&É’%Æ NLÏ+©n\·ykÏöý»÷ìu°=»úwnïÙºy]cuI^zbt¸1I܉˜S$2>-§¤¦©­«o`ðš‘Ñ£cÇ`Ü‘Œ=;::rÍà@_W[SMINZ|¤˜$“‰S$&9«¨ºisOÿÁÑñnñÑ;î¹÷K_ùê>ôÐCÿàHرøêW¾tï=w|ôÄp׺š¢ÌĨ0¼ÿ%‘ ”&§¬qsßÁñÞyþ¾þÆcë »|Ûwvm·ì?pßù;?:~°oscYjäNÖà•±©ù•Í‡Oß~þ+_ìÛO}÷ûO?óû<ë ûþ™§¿ÿݧ¾ýØ׿rþöÓ‡:›+óScWOZ‘H@pD\zaÍúžÁñs÷üý×êéçþã…ÿzñ¥—~äH/½ôâ½ðÏ=ýÔã_ÿû{Îö¬¯)L‹ðHVWQÝÆíC'oûÂßüßÏüð¥Ÿþìÿ¾ús;¼6[vlÄ«ÿ÷g?}é‡Ïüïo>ð…ÛNmßXWä¡õ/‰,‰LÈ,nØ´óÚÓwþíןø?ÿñ£W^ûůÞxãMÿ{ ÞöqwÿoÄoü꯽ò£ÿø?O|ýoï<}íÎM Å™ ‘!“/¿“‰”\vù®‘›>ù÷<ùƒ^~íWo¾ýëwüí7ðî»ïþÞ›™q7ÜÛøKþÞ_¿ýæ¯^{ù…<ùÈßò¦‘]—_V25‘D#‘«ä“÷ý¯ï<ûâÏ^ˆí÷##‰ßýîý÷˜‰q§÷ßÿÝïÞÁø‘ð¯ß~ãõŸ½øìwþ×}ŸüÈá«ŒDçŽù‰¼0>øàü“ÜÿøÁˆå}#‘wý=M|™#öGpüÀ´{‘üÁÈãÏþóOjdòò®ñŒú÷h2ãqd>^k^{íõ×ò[o¿óî{F$2òøÓ12ù“È{ï¾óö[Øþ×_÷ë‹ÎL¯5ó²ùñO~úò+¯¾öË7ÞþÍoßÿƒ™vÝë{Ñf$Häïÿö7o¿ñË×^}ååŸþäÇþÛÖ#ö¯YŸ}öߟ{þ‡/¼ô“Ÿýü—o¾cFb$2ÍÛóF"f ï¼ùËŸÿì'/½ðÃçŸûw®agX³Ú^ƒ”}ò;HùÙç_øñ+¯¿ñëß¾ÿ&‰,‘?ÿéƒ÷ûë7^åÇ/<ÿ,6ÿ;Oþ«?Osäç5óqîûµ¯?üÈ£ßü—'ÿí™ç_|ùµ7Þyï÷˜$²DþôÇß¿÷ί½üâóÏüÛ“ÿòÍGyøë_ó×ÆÌ|îkÿõ‘{ïýâßüÝ—ïè‘~ò{Ïý×˯¿õ›ßýÁ˜$Ó%‚)ò‡ßýæ­×_þ¯ç¾÷ä??òÐý_þ»¿ùâ½÷úm{ä×G쿆öñüÖÛn¿óSŸûëû|ô‰ï>÷â+¿üõoÿGi"üýoýËW^|î»O<úà}ý¹OÝyûm·bm’ôÚ|\g=~ý‰“§ÏÜ|Ç=_¼ÿ‘'¾÷üþæ»8’LW›ÿ‡Ò|ðþ»oþüÇÏï‰Gîÿâ=wÜ|æôÉ×÷ÓÖÌ|Õökñûöí¿zhøÈõ§o¹ûÞû}ò™^ùå;¨,‘?üî_¾òÂ3O>zÿ½wßrúú#ÃCWïß·Ïo[4õx»ß¯Ùºµ«»§w瞃£'ÏÞýÅÿùßžÿÉëoµ™6£4o¿þ“çÿíŸüâÝgOŽܳ³·§»këV¿m“ôý»ßÓkjjj^»~ãå]}{GNÞrÏ}<ùìK¯¾ùîôó0ò¾ôì“ÜwÏ-'Gööu]¾qýÚfŒä¯’¾§g÷û¾«V­*¯¬®_½¾}ÛÞÑÓwüõCÿòý^yã7ïKyÿ7o¼òÂ÷ÿå¡¿¾ãôèÞmíëW×WW–c$¿m•ô}_Û?“›WXRQ·¶½ïàõ7îþo~÷‡?ÃäI"à0ò³~÷›÷îæëöµ¯­«()ÌËÍñß&É?`ûçG’SR3² ÊêÖwí9ræS_~ô©çú $ò§iùùÅOŸêÑ/êÌ‘=]ëëÊ +²3RS’ý¶E3}~ÄîÏEÇÄ&¤dT¬¾|çðé;ÿî‘ï<÷“_üz†D~ý‹Ÿ<÷GþîÎÓÃ;/_]Q™’í¿Mšé3F6- S/.%»¤~cïÐÉÛÿæá'ÿýǯÿú=i"ïýúõÿû“ÿÍí'‡z7Ö—d§ÄáÙ óçFÉ?‡69Mlú¬¢QǨ„ŒÂêõ=WŸ¸í‹_ÿW3‘?Hùƒ™È¿~ý‹·¸ºg}uaFB”1»ý·I3~Vñ[?ÏŠ:†FĦæU®íÞý­÷~íÛÏþèµ·gHäí×~ôì·¿vï­×ïï^[™—‹žM¿šáó¬—Ø÷™çeæš8&%·¼¹kßñßû>'ò÷~üø¾®æòÜó¼ÃÜ~¿òý“àþe¬‰Ã¢“sV5mÝ7þñ/Ì"‘/|||ßÖ¦U9ÉÑabQé²4l²Ä8q + JÊF"{gÈ^$’hœwèØ~,1®ÀˆD:÷Žß2«DnßÛ9™ˆ÷ãߢ4™HÙ¥DÖ”M&¢{Gü†‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆ±b"VLÄŠ‰X1+&bÅD¬˜ˆÕ”D~àS"?¸xyˆ·HþŸ;‘'.ŠDŽÝò…‡|Nä¡/Ürì¢JäψĚ ~òß¾È9ÿÐϼôó·~ûû?þù¿H¬þû¿ÿüÇßÿö­Ÿ¿ôÌwt"‰F"{ŽÝ|þÁo=ýâ«o¾ûþú32™âÏþÓï¿ûæ«/>ý­Ïß|l‘H¢ó LÌ*[ݱ{ìÜçxüû/¼ò«wÞûýü“7üà÷ï½ó«W^øþã|îÜØîŽÕeY‰‘¡NL¤tõ–£g?ûÕǾ÷×ñÖoÞ{ÿ÷ðæ÷ï¿÷›·~ñò¿÷ØW?{öèÀ–Õ¥ŽL$ÄH¤±½ô̧¿ò§žûÑ«¿|ëwûž7¿}÷·~ùêž{ê_ùô™ÑþöF#‘&’YÒ°yçÈwé¿ýôþäÕ_üêÍ·Þöæ­7õ‹WòŸOû¿t÷#;77”d&8.‘e!ñ®¢º¶í×Üpû½>öÔþóG/¿òêÏ_óæ篾òòþóO=öཷßpÍö¶º"W|DHÀ2‡%—^X³¾gpüÜ=÷=üøSO?÷Ã^|éGÞ¼ôâ ?|îé§ø¾{Îö¬¯)L‹vZ"+‚WƦæW6o=}Çù¯<üØ·ŸúÞ÷Ÿ~æð¬'ãÏ<ýýï=õíÇþÊù;Nlm®ÌO]¼ÂQ‰,Y¶"(<&9§¬qsßÁñÞyþ¾ÿñ=þ­'àÛ2~ô­ÇûÆ?>xßù;?:~°oscYNrLxЊeKœ•H`XTbfQͺ®þá½ãž{¿ô•¯>ðàC=ôVøÙƒ|õ+_º÷ž;>zb¸¿k]MQfbTX ÃÁ¢‡Ö´¼òƶžÝÃã§ÏÝ~÷§?û¹óç¿àÍùóŸûì§ï¾ýÜéñáÝ=måyi8°KVç$b¾ü£6YEÕM›{úŽŽßp㙳çn¾Å»›Ï=sã ã£û{67Ue¡4ÁŽzñ‡Ö ÐÈø´œ’š¦¶®¾ÁkFFŽƒq+ã‡cGGG®èëjkª)ÉI‹ rÔÕ<“$:1=¯¤ºqÝæ­=ÛwöìÞ³×»=»úwnïÙºy]cuI^zb´1Eœt1$Æ$‰ˆIJÏ)*¯il^߶¹}KGçt:¶´on[ßÜXS^”“ž!¦ˆ“1jƒI“˜–•WTVYS×иzõšé¬^ÝØPWSYV”—•–fLG•fb’"’èøä´Ìœü¢’ÒҲ镖–æçd¦%ÇG#@ÇMw$¡á‘1ñ‰É©é®Ì¬¬¬ìéàÏ2]é©É‰ñ1‘á¡Ž Äè " B&Q1±qñ ‰äñG ñq±1QÈ#(8¬3†%F$ËLBÂÂWFDDBÔtŒ?ŒˆXbä±ÜÄy‰ ÇÈ$00(88$$$ThäaTÆ\21M–-_¾bÅŠSàtÄã~Ë<9A„%Æ<1RYf3ó^K8œÈ%"‹/&î­{£m·d6to,ÑT¹¹Fö¯ß3¶'|{[xîÚMÕøßÝ{®<Þ~,|•«ÜµÊeüçöâÏ[‡†ÄÍ–ÁC#w.(4î³1¼lýàøоÁî-®íá;ݽ²ºª´¦¼¦ÂUR^SYZY]_ïºÊUY^㪬ªÆ¶œé¾ÆMÞò¿ë\•¸{y­ù7«ð¸Sxn®¹]ÆN5¸*+jWÕT†oßâõ£*DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD Ü%D¥»[vÑ+‘]twË.ºs%²‹înÙEw®DvÑÝ-»èΕÈ.º»eݹÙEw·ì¢;W"»èî–]tçêLKfO÷&;înÙEw®þ'¯ÆÒ)–™Ü7$Äý})àtbÊ“ïÃzŽ³|ùò7Ø÷GÑýÔù™înÙÅŽ¬æ8ŸÅT´Xá!`Š@A‚M!B=„™Âg‚ûàÎø»… p7Em_Üfl™çb7± b/,[¾Ò4uËÅÆ»yF!ÂñŒË3Æ©!{> +û2ÿG Ýݲ‹Z §NQK¹,mr7ȳ8îY'æ[DDD¤)***ÚcŠõgŠ7%˜=$™’M)¦TSš)Ý”ar™2MY“²'‰ÿ‰?Â}pgü] ˆñ±ØÎ|÷OD† A!ì>¶»&öÅs²=¸wAì…Ø!ˆ@D8"(šÐ3R²\„ïùtˆ'HQ:wÝDËD¿D³D§ÄTÄôËÉÉÉÍÍÍËËËÏÏ/(((,,,***...)))---+++//¯¨¨¨¬¬¬ªªª®®®­­­««khhh4­Y³¦©©©¹¹¹¥¥eݺu6lhmmm3mžþ÷Á=ñWðw1†Åca°mØfìvÓ³¹¾¯||ý]´a"=…L°ûØ_ì#¶ +Û†-tï‘dwÜ{„ðWþ.’!+$†1±›ÈI"O< +²Å^#g¤ÌñÐÈ!à¹À3‚çEÜ7q4Çqp_TÞÝt¿t\%ê|1w»ž"1[ »} ³zbZ¶··wtttvvvuuuww÷ôôlÛ¶­···¯¯oÇŽ»víêïïØk¸?þ:FÃàx <.¶›„mÖcï&"É÷u»/ëOqwÆÔEø1"(‘6 ˆ}Ç.cO±Ø;ìvJìÈèè(þ{‡=±SøS±û¸'ö™ào!ì&F@bÈ û‹‘$ò´¾`ÙEÍ‘8g™Ú_Ýݲ‹äuÖò"ë˜WXÏš‹¦ b®â¸¿xmÅCˆ‰‡ÿÄ£ˆÚâñèîÚ"Š©í“œ_ûxþèYX¤Ä£c_°ØGlX± †íÁO°³ØGì—çN‰Û‹¢€ +¯¶îs“é^juwË.Óž L©ð¼ÏŠ²ÏóY­¸-æ›8{ÅCàqÅñ\¬NñsÌXÑYÌ^ŒŒ?ÅŽx6nÆ«a¾\ùÁ ÜÉ`g±UxD±F°©Øk÷Vá†DœäbãÝǽù<“uWç³óÀÇÎúѼª,æ’˜EžGo7ü„9‰àåÅë f2&§û¥vÆGññš­x‘Åc‰£„X9àAQ"ü›754qF0ymÙ÷ãÃÔ•ù"º2,§»[v™ç;LT”KA±2Äkš%Îj}i«/ﶈ¿(^dñúˆ×V,YñR‹ÂâOçæ/^º»eݹ.>xÅA›Ä›)Xmbq(.ƒXÎ$ï ÏØ\q­%ÅÙ¢8UÇB?dagEw·ì¢;×E õç‰øOÏ+Q3¶ÕÇO8ˆ…1N* + +*MX„ãX¡{¿ÝÝ"Í<'NýÄÏκ_"§k«¸ææËg“Dg±ðÆɬ¸lq1¼‹AäGžÅKž¸X––æ~£vê…qÉ'$åÍÅEEE‰Î–””à?ñ¾‚ÍŠ¥³â-Ô*&&ÆÝÙÛjùHðtÍÅÅÚ8//Ëcü'îÌ×Y¢Y±¬Ñ>¼âÕV|Y,kC<Þzöú~7ysEgããã³²²rrrpâ̵1ÑlyvVÔÕÃK-þ-sVÞV÷ç äÍŠ܃ã”Y|·=¯Aéƒhp÷eéÒ¥“ŸÞÇ«¡X»;+i«ø —¸!o®ø˜·xËoü¬½Ý/µºÃ ZDYÜŸ;«j+^aÝïïX>ii«'IsݯÔ⣉îZ‰h±³D>²¼÷‡æŠýä~[V¼ÈÊÛêù¹\Isݯ¶b@Œ/þÑ +×ÆD¾»d +ÏøZ:ëµ­â_=X>Q?µ¹á¿C¼í‹‡°|JwD‹ÀÔκ?™/:ëþ·ÆÓµUü%¯ÿÆÒ\÷…hŒ,>®oyhÝa-S;ëybbþîq*ÿ…’Åæþ‡lî7|ñ +‹ÃÂÔëƒh˜ÚYñRëÙYÏì/ù÷¿3þûSwgñ"ëõtëƒhw§ŸâEvÆ­ïKsÅ{¾îÎN}\Ýa-ÓuµÿGtvÆß­áËo/dg‰æNÞYñÉ%4nÆß„3ãokÁ ÊýYÙY"5^;+~áŒøµâEvÆß[5ãïY îW‰kPì,‘IgÅ(Íó7LJ~Ëœ¼¹âÇyv–× ˆL-¬û»‰/€5íŒmõñwb(qJÈΩñÚYÏ‹Æba<ãopñ·’b åî¬ø-‹ì,ÑlÉ;5-7ãï[žñ÷ ‹ß«,.C‰O³³D +¦ë¬¸hiþnp4nÆߎ>ãoÇ ±æ—yá”–%Ræµ³âq +EóüZ“é¾Ë`ÆßáAÜ öú­î0ˆ©oΊ7zÜß29ã7øòíJ\† + ag‰Ôxí¬û¢qtt´XÏø=A3~oÁPâ2”x»‡%R ïlLLŒø=03~«×Œßx…A0”¸ êõcºÃ Z¦vV¼9+.ã T¼ÈÎø|3~Wçwʳ³DʼvV¼Ñ#.@%N~›¤ä3Å÷´Ê›‹AÜ «`g‰fkºÎŠ7zâââ°¦Eã$m_„-nHš‹A0”¸ .>VÁÎÍ–×Ί7zP®øøx¬iÅW6O×VñÍõ↤¹âK«Åe(÷[´ì,ÑlI:‹r%$$`M‹ÆIÚ +¹¹¹â†¤¹C‰ËPî_ºÈÎÍ–×΋‹Æ8Åš“´Ä7MË›‹A0”8¥¿Ù˜%R0µ³¨’û@Äwä¡q’¶B~~¾¸!i.ÁP¢³xv–HÁtoô$%%aM‹ÆIÚ +↤¹C‰ËP‘‘‘ì,‘¯oô \ÉÉÉXÓŠ¯±›®­PXX(nHš‹A0”¸ %Þ¢]±b;K4[’΢\â;ßÑ8I[¡¨¨HÜ4ƒ`(q***Š%Rãµ³â ÙQ®ÔÔT¬iÑ8I[¡¸¸XÜ4ƒ`(q*::ÁÎ)ðÚYñF¸…5-'i+”””ˆ’æb %.C‰/‘gg‰Lí,ª„B‰7zÒÓÓ±¦Eã$m…ÒÒRqCÒ\ ‚¡Äe¨ØØX¢³(j%.cM‹ÆIÚêIÒ\ ‚¡Äe¨ÊÊJ—Ë5õë,u‡A´H:‹rµ··cM‹ÆÉÛ:888cs1†—¡ØY"e–΢DX²¢P¨ÊÕÑÑ5-'i+8p@Ü4ƒ`(qªªª*33“%R é,ÊÕÙÙ‰5-'i+ùÉOŠ’æbv–hî,ÅbE¡P+”kddç¡hœ¤­ð©O}JÜ4ƒ`( ¸cÇŽ 6”––&''³³D³åKgÑ8I[á3ŸùŒ¸!i.ag‰æ㳨J„%+ +…Z¡\£££7Ýt'i+|þóŸ7$ÍÅ  +îÚµ«µµµ¬¬,%%eåÊ•îö®; ¢EÀ—΢q’¶ÂùóçÅ Is1;K4wS;‹%+ +…Z¡\GŽ9sæ 'i+Ü{ï½â†¤¹CaÀþþþ¶¶¶òòòÔÔTv–h¶|쬤­ð·û·â†¤¹ì,‘_xvõA‰°dE¡P+”kllììÙ³x•”´Õ“¤¹CaÀÍ›7WTT¤¥¥‰¯fg‰|çcgåm½ï¾ûfl.;Käî΢8¢³X²¢P¨Ê5>>~îÜ9¬l%m…/ùË↤¹CaÀ½{÷bðÊÊÊôôôÈÈÈÀÀ@÷?{×Ñ"à{g§k+Üÿýâ†×æ²³D~dé,«X²¢P¨Êuüøñ[n¹g£ž…µ´xàqÃksEm1†Â€¶½½½ªª*##ÃÝYñ± +Ýa-³íìԶƒ>(nXšËÎùggQ”KV +µB¹Nœ8që­·~æ3Ÿñ,¬¥­ðµ¯}MÜ°4׳¶CaÀÁÁÁŽŽŽêêj—ËÄÎùN­³žm…‡~XÜp7—%²‰»³(Žè,–¬(j…rX¬bÉŠB¡V(שS§>ñ‰Oœ?~ºÂþÓ…$µÅ  +(¢…ÀÝYþÞE¢EÁÇÎò÷-žå÷-|>v–ß×C´@Lí,¿h!ó¥³üþY¢…ó³üžw¢…ϗΞ;wîV“¤¹’¶ŠÂbv–hî, Eg‹‹‹[ZZz{{‡‡‡O:uöìÙ[L’æJÚ* +‹A0Ä¡°gg‰f˗Ξ9sæœIÒ\I[Ea1;K4w—xMHH(**jnnÞ¶mÛ¡C‡Nž>¾°°°©©©§§çàÁƒÇÇšö&“¤¹’¶ŠÂb …q(À‡t‡v–hVfììøø8Ö´§M’æJÚ* +‹A0;K4GS;WPP°fÍšîîîŒaM{Ê$i®¤­¢°Ca@ +p@Àa‹pv–h¶fìì‘#G°¦=i’4WÒVQX ‚¡ØY¢9²t6888666??¿±±±««kpppttkÚ&Is%m…Å  +âP€ X„ãáþïì,‘/fììÈÈÖ´ÇM’æJÚ* +‹A0;K4Gž]ºtiPP:›——‡ÎvvvîÝ»wxxkÚq“¤¹’¶ŠÂb …q(Àà8,`ÎÎÍÖŒ=tèÖ´c&Is%m…Å Š%š£©‰‰ÉÍÍmhhèèè8xð Ö´GL’æJÚ* +‹A0Ä¡Åa,ÅÙY¢Y‘w¶¿¿ÿÀXÓŽš$Í•´Uƒ`( ÈÎÍ…¥³ÑÑÑ999uuuííí»víÄšvÄ$i®¤­¢°Ca@ +p@ÀaÅ!ÂýÞÙY"_È;»cÇœbM;l’4WÒVQX ‚¡0 ;K4ž]²d :•][[»yóæ¾¾> kÚC&Is%m…Å  +âP€ X„³³D³%ïlooïÀÀÖ´M’æJÚ* +‹A0dg‰æÂÒÙ€€€ÈÈȬ¬¬êêjtvÛ¶mýýýâ¥$Í•´Uƒ`( ˆaq@Àa‹p"ØY¢Y‘w¶§§g×®]¨Û IÒ\I[EaCa@v–h.¼v633³ªªª­­­»»{ÇŽXÓŠÒIš+o+` …ÑYpXÀ"uÿv–ÈòÎvuuõõõ‰å±›×æJÚ* +‹A0dg‰æbjg#""\.Weeekkkgggoo/Ö´&Is%m…Å  +âP€ 88àáØY¢Y‘tvÆ Û¶mÚ¶ß$i®¤­¢°Ca@ +ØY"e–ήX±båÊ•ëÖ­kooïééÁšv—IÒ\I[Ea1†Â€8à€€Ã;K¤@ÒÙ––œ{vwwcM»Ã$oîtm…Å âì,‘²K.$:›žž^^^ÞÜÜŒŠuuuaMÛg’4WÒVQX ".@áP€ â £ÙY¢Y‘t¶©©©­­­³³kÚ^“¤¹’¶ŠÂbq +‡v–H™¥³Ë—/OKK+++[³fMkkkGGÖ´ÛL’æJÚ* +‹AÄ( +p@ÀaÏ/þ`g‰|!élccㆠÚÛÛ±¦í1Iš+i«(, p(`g‰”yíljjjii):»nÝ:œbMÛm’4WÒVQX ".@aXpXõ|tÝa-’Î644ˆKÇXÓv™$Í•´Uƒˆ Pì,Ñ\LílXXXJJJIII]]]sss[[Ö´&Is%m…Å â8 à°€ƒŽ%šIgkkk›ššZ[[ÅK-Hš+i«(, p(`g‰”Y:»lÙ²ÐÐÐäääâââêêê5kÖlØ°uk7Iš+i«(,ˆ P8à€€Ã;K¤@ÒÙªª*q +kZQ:Isåm ".@áPÀÎ)óÚÙ¤¤¤¢¢¢ÊÊJT¬¥¥E,ݼ6WÒVQX ".@áP€ â £ÙY¢Y™®³……… ÍÍÍXÓ¶™$Í•´Uƒˆ P8à€ÀΩ™ÚÙÄÄÄ‚‚‚òòòººº¦¦&¬i[M’æJÚ* +‹AÄ( +p@ÀaÏ_HÎÎùbºÎæçç—••ÕÖÖ®Y³kÚ &Is%m…Å â8 °³Dj,]ºt©èl^^^iiiuu5Î@±¦]g’7wº¶ŠÂbq +‡ðì,‘‚é:›››[RR".cMÛb’4WÒVQX ".@áP€;K¤fjgƒƒƒrrrŠ‹‹+++°¦m6Iš+i«(, p(Àµ|‘%;Kä‹é:›]TTTQQQWW'^jAÒ\I[Ea1ˆ¸…Cì,‘š© + +ŠÏÊÊ*,,,//¯­­EÝÖ˜$Í•´UÄ( +p@Àaõü…äì,‘/¦ëlfffAAAYYYuu5Ö´¢t’æÊÛ +D\€Â¡v–H¥³K–,Agãââ\.W~~~iiiUU•X»ym®¤­¢°D\€Â¡°gg‰fkºÎfddäåå•””TVVbMÛ`’4WÒVQX ".@áP€;K¤fjgcccÓÓÓsss‹‹‹+**°¦­3Iš+i«(, p(À‡ËY²³D¾˜®³iii999EEEåååXÓÖš$Í•´Uƒˆ P8à€ÀΩ™®³©©©ÙÙÙ………eeeXÓV›äÍ®­¢°D\€Â¡<:ëù ÜØY"_L×Ù”””¬¬¬‚‚‚ÒÒR¬i«L’æJÚ* +‹AÄ( +p@`g‰ÔLíl@@@LLLrrrfff~~~II Ö´•&Is%m…Å â8  ³–/²dg‰|1]g“’’\.W^^^qq1Ö´&Is%m…Å â8 à!ØY"^;˜˜˜‘‘‘››[TT„5m¹IÒ\I[Ea1ˆ¸…Cxv–H×ÎFEE¡³ééé999………XÓ–™$Í•´Uƒˆ P8`ð©_òÎÎùâ’)ÐÙÈÈÈ„„„´´´ììì‚‚¬iKM’æJÚ* +‹AÄ( +ÐÙ©_dÉÎùbºÎÆÇǧ¦¦feeåççcM[b’4WÒVQX ".@áP€;K¤fjgW¬X—’’’™™™——‡5m±IÒ\I[Ea1ˆ¸…CS¿È’%ò…×ή\¹266699ÙåråææbM[d’4WÒVQX ".@áP€‚%R élRRRFFFNNÖ´…&Is%m…Å â\tÖòкà Z¼v6<<<&&F\:ÎÎÎÆš¶À$i®¤­¢°D\€Â¡ÅC°³D +¦vV|¥x‹6---++ kÚ|“¤¹’¶ŠÂbq +Ã ‡°|‘%;Kä ¯ ‹ŠŠJHHHMMÍÌÌÄš6Ï$i®¤­¢°D\€Bgq@ÀC°³D +¼v644T¼Ý“’’âr¹°¦Í5Iš+i«(, p(ÀÁÎ)t6...999##kÚ“¤¹’¶ŠÂbq +‡ ÎΩñÚÙˆˆqé8==kÚl“¤¹’¶ŠÂbq +‡taù‚-v–ÈÓuV¼Ý#.CaM›e’4WÒVQX ".@aXØY"5S;»lÙ²àà`tV¼Ý“ššŠ5m¦IÒ\I[Ea1ˆ¸%ÞœÅC°³D +¼v6((H¼Ý“’’‚5­Ë$i®¤­¢°D\€Â¡ÅC°³D +$ŠŠŠONNÆš6Ã$i®¤­¢°D\€Â¡ƒ³³Dj¼v6000,,L\:NJJš6Ý$i®¤­¢°D\€Â¡ÅC°³D +¦ë¬x»G\†Âš6Í$i®¤­¢°DœÌbXð–/Øbg‰|áµ³è¬x»EÚ6Õ$i®¤­¢°ÄÝY Ž‡`g‰LíìÒ¥KQ(ñvOLLLBBÖ´)&Is%m…Å âì,‘2yg£££ãããÅK-Hš+i«(, 0,ÇCX¾D€%ò…×ήX±"88X\:Ž‹‹CÝ’L’æJÚ* + â”è,‚%R0µ³K–,A¡ÄÛ=â2Ö´¢t’æÊÛ +DœÌbXØY"5^;»|ùrtV¼Ýƒ¢‰å±›×æJÚ* +‹AÜoÎZ~± ;Kä‹é:+Þˆˆ‰‰Áš6Á$i®¤­¢°D\€Â¡€%R&טּ %^jAÒ\I[Ea1ˆ¸…aÅ*ØY"^;+Þ¢—Ž£¢¢P·8“¤¹’¶ŠÂ‚¸%:‹‡`g‰Líì%“«@gÅe(¬iEéäÍ•´0ˆ8™oô°³Dj$o÷ hbyìæµ¹’¶ŠÂbKg§>®î0ˆ¯oÑŠKÇXÓƘ$Í•´Uƒˆ P8xý@;Kä ygÅe(ñR ’æJÚ* +‹AÄÉ,†õúæ,;Kä‹é:ëyéu‹2Iš+i«(,;Kä^;ë~»G\†ÂšV”NÞ\I[ƒˆ“ÙéÞèag‰|!é¬ûÒ±x©uóÚ\I[Ea1;K4wÓuÖ}é8,, u‹0Iš+i«(,¸/@±³DÊä—¡ÄK­¼¹ò¶ŠYq2;Ý›³ì,‘/$u_:vwVÒ\I[EaÙY"¿ðÚÙK&ßî—¡°¦¥“7WÒVÀ âdÃzý@;Kä IgÝ—ŽÅK­›×æJÚ* +‹AÜõúF;Kä ygÅe(Ô-Ì$i®¤­¢°à¾ÅÎ)›®³î·{p*^jgl®¤­âEVœÌ²³Ds!é¬ûÒ±»³’æJÚ* +ëÙY¯ ØY"_È;+.CaM+J'o®¤­€AÜ ØY"e¾tV¼Ôºym®¤­¢°„%š;IgÝ—¡P·`“¤¹’¶ŠÂºÆì,Ñ\L×ÙK<.‹—Ú›+i«x‘u_€bg‰”ͪ³’æJÚ* +ëÙÙéQwD‹€¤³îSZQÛ›+i«(¬8™eg‰æbV•4WÒVQXwg§[³³D¾˜±³by,Hš+o« ¿ÅÎùBÞYqJ+^jgl®¤­âEV~Š%ò…Bg½6WÒVQXv–È/$½Äcy¼Âƒ×þN×Sw[g\³³D¾˜±³xeµu“ôwjOÝÄcv–hŽäõ¬­ÅòéM½óR“¼°ì,‘/|鬨­ÅÔbZêiÉ$v–hŽfì¬gs§ãÙJ¯||Ýa->¶iÆFûeÝa-~éš¿èƒhÐ]Ó èƒhÐ]Ó èƒhÐ]Ó èƒhÐ]Ó èƒˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆìr ÑèþL´ÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³Sç¯ìæs÷Ì~ÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌN³SÇìÔ1;uÌŽˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ%7wÃÈþõ{Æö„oo Ï]»©zÿ»{ÏucƒGÃ;¯ Ï([{tlýо±¡Ã#{Žžp5àGk÷Þ;èwúÐ`¡«ìŠ±£C#\k7¹Ö´o°{c‹k{GøΉ¹]îªZU‡ç³²Òu•«¢¾ÆUoü|ûAïw0~0q§‰ÿªsUâ.åµæ½«ð¸Kxn®¹Æ.6¸êVÕ•—‡oß2Ëó@DDDDDDDDDDDDDDD^x~´Fþ§Ó™ÿm&Ztìù4Üâî #wŠ´³µk‹w¢:u¿H;;jå€YêÔý¢…À_ rØuê~ÑB0÷Ùåºc¸€S÷‹?N°¹ÓÆ_8u¿h!ðïìò Ý‘œº_´@Ø1ÁæHw$§î-vÌ.¿pj,z÷‹û&Ø95;¶Ê_{MóþÙåsÜ£‹­£¼×³Ú;åâáId#ÿîʼne~6Ã÷ýõËCÏåá.6s|fífÓÆke>7Àשà¿ÇÕ#^œü’³}lÝl±Ìó“¢e&øò '¿Gm[·Yc2óü¸º¦Â´t<[÷—yØ`-ÉÌÿƒêš~™«N2™ÏÝülíü'£å¹Ð5옽‹×¼Å>ó¶©óœŒ®çB×°u&/.óûÂ7ÏÉh|"4>(ý{7Å|&s> :æøB¤ûyXˆæ-œ‹ðYÐ1Ç"ÝÏÃB4oá\œO¦™¾°è~¨ù çâ| +ôMöD÷“°@1ûèð ‡îça!b2öÑ;ÛÝÏÃÅdì£{Ê/ºŸ„ŠÉØG÷”_t? tÑÑ=å +ÝÏ]DtOöD÷SAÝ“}aÑýlÐÅB÷L_pt?!tQÐ=Í"ÝÏÉ„µ1ä_zgø‚µpž½[BvÐ5«…ò¤èÚ ²–ù¼¸hRæÈVZ¦ñ¢£ýy™ÿ ûh™Ã‹‘ö§fþ7€ì£e/FÚŸ-@~§k/RÚŸ#-@þ¥kö.R áiÒµ ä/ºfïâ¥ýÉÒ¸äz'ð"¥ýùÒ¸äz'ðb´ž/½Û@s§w/F áùÒ» 4wzçðb´@ž/½›As¤q/R äùÒ»4G'ð"µ@ž/½›As¤q/R äùÒ»4G'ð"µ@ž/½›1?œº§šf@ž2›1¼›ó>ab<_º6c~8xOçqª:Êy¾tmÆ/sy²ìÞ ùöØ7òüì¯Ý7«]#ßùåÙŸû“eÇfø¾=¶nÓþÎÃc©íùnîÓ`îÏ”¿¶Aycæsgç²Ëv?ÜÜ÷‹ÌÛ4ð×رó?'õî 'àô """"""""""""""""""""""""""""""""º˜©ý" """""5Kà/·&éݦf‰œŸÆöÓÆjbîÂR‹e“p{.»è1øâŽJìYîiÅ$Ü6²RÜC‘Ñ…‘û{懱'FF+ÿ"hR``²2“RÜi¹;òeŠãègî B + + ádDµlö;8ñƒcô 1ŒÂ8 €±'ÆŽ‡„…¯ŒˆŒŒŒ¢££c ÑQ‘+ÃB‚U‚ƒã5B7W \»‰=  ˆŠ‰‹OHH4$%%%''§¤¤$''%ÄÅDE„…ÌzÍÁÌÁ#< œý8 vň),":6!)%-ÃåÊ„¬¬¬ììSvfFZrBlTx¨jVƒ1…ƒÇéÇÇFG„‡Ì~ýŒg|E`HxdLBJzfN^Á¥——”””––•­ZUVVRT˜›•ž½24hÅòYMñ`ðØ„dãÈHKIDà!³g0žq̦Èؤô¬¼KKË+«kjëêêë.»¬ÑpY}MeYQ^fJ|´±ƒ³šæt2OËÌÉ/(È7‹’Œ³PW£Æ3›”‘siYU]cÓÚ–õ6´nÜØÖ¶iÓæÍ›6mÜв¦¾ª´AE…xÓì™9W1xLbzvAqYyùª’ÂÜŒä¸È° oãÌæ`¾Ó\²Ó)d%ö$·¸¢nͺ›·tvu_Ñså•ÛzMWötmÙ´nuMY+96"$pù2ËæIvÍ|‚ãÒ² ˪jêkÊ‹s3’bVN3ÎäY€{éî}“ýyBå#ó‹ŒOÍ.ªhX»qK÷¶¾W ìÞ³wßþAØ¿oïÀ®íWli]SSš›žtaa,g;–­žxb“3 Êj.knY·vM}EQNZü”q.™8!˜8 ˜8ð²rŸz~5?Q‰g<:ÉU°ª~í¦­ÛvîÞwõÁk†G9zôè‘Ñ‘k¯¹zï®m+/ÍLŽYiϲs“g;SvÍ|‰ŒOË)®jlÙ¸ùòM­Íõå…™I1áŒ3¹Ô5NŒÓœ L®G/ˆÀ} +ä>·š§3!£!±)ÙÅÕk6nííßwpøðѱã'NÞpêÔ©N~èúcGG†öíê¹|m]injœQ¼ÉË’¿ì\€±c+VXNJÄdJÈÈÇ“ÐÖÑÕ½µ½µ©¦$çÂq&íâ„ Ä8 1ά+w÷ºÏ¯Äƒ.W?÷ô='4ÃxÆóÊê[گܵohäèø‰NßôÑ={öcgn:}Ãõc‡îéëÜpYy~zBd¨ûÀráÙNHˆ8·kíÉ+XfNщ®ÂŠÆ [®èݾ­»}]Ɖ7ÆqG`Ž4qBažà <4$èÂ3wšFœæùÕă\ð vå$žñ‚òË6tö\=|ä؉S7}ôÜÇÿê¶Ûn»õ–³gn4zìC7~ìã·ßy÷ÝwÞþñÝxòØè5û¯ºr˺†Uù îœÌ˜BWFÅ&bç²srsss²2R±kaÁæb[tÓ8úE%¸ ++×´u‰œÚ[j‹³’£Ã=ûkÄ'NVUTVV–—æºRb"&g”û£ã’R3²ró + ?Ï˃ڗShdBz^imÓÆŽ+w ì:|ìäM˜PwÞyÇ­go:yìðunÄëTnšqü5·g)怱ÑñÉعÂbœ ––ä¸Rc#=ƒZj¾J¤T4âÅôª~/9MÄŸâÊ5N.[½f͚ƆšŠ’‚ì´D#(ó\Ðœuæ#¦däMĹªäÒüìŒälë¹µxÆ#â°Ì¬lXÛ¶åŠíWí=8rì†ÜüW·ßv빜9°gç•mkë+.ÍJ ò¥sÀØhcç*jp>XW[UŽ]KO2‚šÜfcu—–·ªaCǶýWí@ï.ÈI,ÙââR2óK*ë×´lÀéÒ¦ë×6Ö–_š“žh,ÝÅ3cœ†qfæ—W×q®nl¨5O=SÌst'”X?­ŒIrå—V_Ö¼asgOßî#ã§Îœ»å–s¹áØÈÕÛ»Û[›*‹sÓ£ÍõáÒ‰Ó[c£óK*pNزn=ÖÚ Õ«.ÍÉHŠpo3î¼26%§´n]{Oß®]}WXsg€bɾz][ûÖîžžžîÎ˱"5–î QáfêKÝ÷Ë/­jhZ׊8ÛZ×77ÖV秞æÝlÍÉ<KÍ*(­ª_½¶õò®Þ£Ç?|æcûÈ©ã‡ô÷nÝ´nM]eI¾+Å8]až|Ml4Ò­Bº›Ú·tl¹¼m}vÍHÓ}úf¦“œ]\»vs÷ö;zñzWó—œÌ:ˆç©¬¶©µ½»wÇUýýý»ú®Üº©¥Á˜ÂqfÕÍg&<:1=¯¤ºq]Û–®+z®èÞºe“ñ˜Æ389ïlÊÉý|&gô˜Ï«[Ú:·ï¹æè‰ßtÓ‡¯?2´»·sãÚ˪WMÌn±1K'ÂŹsÕe-mÝWöönÃùòƵ •EÙ©ñ‘“§oâe ƒ¢ê¦¶­Ûúú¶umúKNâõÀ\¿¥çâøØÖiž68p`poÿöîÍ-õxésxÙÒ‰3ŬK+/[yÖbW]µs{ÏÖÍë×Ô®*ÈÄSj=eôwNfïã’Ò2s ‹WU74·uíØí±:õ¡±k÷ïغ±©ÇÔWÊÄ«¨8½-,ohÙ´õÊ8s¸ +‹HÌœ¾á40D\7A8Á3k6v^¹ÝKNÆtÂiS‘qÚ´½ÿÁC×><2<4¸»¯{SSMqöÄ1qÙÄ™bniffßÀÞýƒû÷öï0Žœ ÆsåýZßrןÌx¼Ü–T6´\~åÀБã'NŒ¸òòµõå˜Liɯ¾“§·¹%5Æàjc …ÚÒÉ—E‘“ñ‚—QX¹ºµ£gûv‘SvrÌDNKÿr:ÐÚi,sGŽ;6vôððÕ»·»Ï•ð’·Ìxµ3î(ÖÃC‡ 0qóºË*Å%ˆi®ù-'±.Áò-)%=+gö­];GÆŽ܉õeeQ®Ë¸\2qÂåqzÛr9]ØêááCCƒÛÓ’K±Üž\ŽŠœŒÝ9m^[[â‘ +¼2&%»¤¶eKïîƒ8¹¼þĉ×ÚUÏ榪K͵{€™ÖyÆÊ~sÏUƒ×Œ><<´`"'ûçÓÄr8È|·%>)53¿¬®eËö}‡Ž;vôоí[ZêJó\ÉæIÄä;SFNæµcß±í*ãÑ#£#‡¶mY7q]!`¹—œúz»/o©+ÉI‰A.5¯VħçW¬n»¢ÿÀÈØõºáã*Åøu#w÷ni™Oä”UT³ÖôÚÑ#£×í¿ª·³­¹®¼0kò%Æιy>‹³K$›˜–]TÕtù¶=׌Ž^³gÛåMUEY©Fçܧ﯑18¦V­ÆAe';F[®ÃØ…óÀŠ‚Œ„‰ëâø#š­WöíØ~EûºúÒœ”Ø•"'ؘ%E5-}û¯;qÇ?üáS7œrttøÀžW\¾¾±º$Ï\ŒØúz÷—#©ÈØ$WAÅêMWî:|Ýu£C»¯Üdìv¢±Þ|Cx"'ãµ߶­}»¯¿þúãc£C{0ÜçoK/Ì©sÛŽ}=[Ö7”åb߃DNƲ!§´¡õŠþ¡#ן:}ã§OÝ€ùttĸ˜cÞ׸Xµb2§’ºu;ö]ƒù;bœNu´âå®0+5ÁxoÂæ7»Ü’p’•€µsc[ÏÀAätxhwO[cyžyœ¼j¶ÄãEª¯ö]}ÆE†c×m¹zWWkC™9_}ÿÞŽiŒM1u´Ô‡Îy ì”ûHI§¨Ë”ÓöÛŸ<3ùé›ß?~°#åÔìú—…‰ ɾ-ÝCÑÌÒÎÝ÷þÕ‹ïúëßÿþ·Ÿ¾ûêé{û+éñp{ƒ?`öû‹Ûw~ôñ‡Ò"&G¥óåÔÚ7–^9øàóo~ú»)'™@ýæù¾xú‰ÌUe½Iâ¢rZ»ýÞã/L¯À–£é;I1™Z÷¦`CAyåŸßyðø/¾ÿþÅ—Ÿ¾»»hê]‹?üýÝ+å”]Þ½÷þã/¾zñ§?ÿíÿüÇ_øæ‹î®ç¢Ò‘¬²#;­ÜsP>~ïîöâôh_kýÑrZ½ýá/L9™Óß}óÕï?ò‰}o-¦¥£Y[\N&?|üù³gŸ=~ÏyÊŒYÌÈ;tšµ§,)×Én±ÉâÝ'_½üá‡ïž?}ïÖò´D¿úH9yÝÌaÓ…Ø{ûÃ'Ͼ~ùƒI-¦ÎüùåLJ›sA[Sí”駗wïðèñ£÷ïï,¥Æ\ƒ(ƒ‘âr²c¥?ÿâ«g‡Ÿ>úàÝ»{¦kä?ä)ú<<üä³/¾xú±éƒÌL„KZLÞtYµéËŒN/ÝzïðëïúéOß|þáíÕÌxa3_N®›™˜]ßçãÃ?|óÝOûç¿ÿûŸýõûçOÞÝ[”ŠUï _]÷Ðt{ö|øøÓO>x{wÙÔK¯œÜç©w4µrðþgüÓ_þþ7ylñûÃÇðîýý­å™øh¸ãHÿIò¸éŽñù“ïï.¥'»ìcø’­€ñ;Ù&ô\ßýþÑýÍ¿«÷ÊÓö°ŒlÝ1Éâù·?üåïÿúïÿþ÷ï¿ÿøÇÏÞ?0 ª¿Ýõ¢/_ö«Ëêþ;}úäñGf ”žè—üe?n¦½kéI.í=|"ݧ?›Z÷¥˜bºm†¸™Ø°?¶åÔ91yüñg_|ö©}´1¶³çÿÀ¥¨œ\çq0šÛ¸÷è¦þÇ_ÿôüÉ;; 6AUš;©$ÝÌÉ̲C<•Ó_ÍÇéÿýï?ÿøé…KP^V¹,c"÷¢kï>zòôÉÇïÜZÍH9Õ¸r2{›¥éøÆtÂLGüÙÓO>|øö[[«s’~Ú¼qK•íiÍlÜy_Êéñûw7¥‡Ñj+”l=•WíZl÷éÁ§ÏÿdÚèüôÍgïï/§ÆLЊF™^7³[&ßì L>NÿüÏÿþßÿþûÏ?k>‚[&A¹¢5iEŠ´ËüxR]ž>ùX#ùŽ¨ûdJ1®ßùàé—ß¼|i:õæãôþ;÷nïnÈL7Kså²÷BS³›wßÿÔ–Ó ¿ZÂb²Óö´©‡üéÿùï¿þòòÙ‘OÇ[ùrò'sï¼ÿäßH§à_ò`ô?ÿ0ådù‚ óíÇÀt_MjúdæKßûäð³§ÞÝ_+.'ï9CjyïÁ£Ï¾üúft{øø£÷ÜÝßY_ôFnÕ^9Ùš3£t[NïÝÙðF@çÞÁ,*'×Ú™Ê endstream endobj 911 0 obj <>stream +$C­>ñg“oþý·ï¿üäí-ÿÓíÏ庾£¼&æ·î}xø¥éüõïÿü׿ÿóïýíGéiî,ºG}Uf¤sõº+Ò¹MSN?ÿ<ùm3’Ù’Ïž<2Õîîþ¶]$ÓßiGnùr2/t×Ô»Ï?y(£¿AD]šbò§5[¤2­ß1iüÏÿüïM9}õøE›-óóÏ— +QÌ ÿ£Ï¾úöO?ýåof`ö˜Fý_•ÆΦ§ùtÌ4ûM.OûŸ§Ù|¬å +34%*&ûÔ§¦AúD³w?üü›MßøŸùîËÇï¸I ·dé­âr²“!æódw?þôgñ£éš~èK9]¿zõÚ ÛÓŠÏ®¼óÑ'Ò*z ü–?ã×+Ëöî=4_ñø“?|ïûò ¡èÙÅå|9ͬ¼ûÑãO螘=á*Q9¹ïI:>ÿîÏ3}™Ï=^Ê€]"vµPN¦×Ó3œ:ðé³ç2©"^šaÙgfôº1—µÍy¾œ"²Êãþ{}ôÁ»Å ¼™vSÝûÇ’sk»wßyïƒ?üàýwÜ=°éiÜŸ€óÊ©Ë VöÌ ™éØ{³x%/§Æö¾‘©Óˆ=6]ì?ý`>vB)5^\N~ïŽH{÷ÎÇOŸ}ùü믟?ÿêË?üþó§Þ3ƒÓllXò¸WNÞHpûöÛ²`eO¬,ûËÔ†&§çVwîÉ2¾wìs©•9©vö)—+'[AS‹›æ…Þ½wk]ÂÑÖ PNî¹Çòν÷?ýÂüð_ýþÐ ÌÛ3Ù´¶¨œòIeqûλ}zøÙç’Wž|úÉÇÞhÃ4çv¦+§æ.yJ²¶sp÷î½ÍEÿÁòâÅ>oŠLNÏ.oîîß¹k¾jokuAtö´5º‰%oÞ×­¤2_tçVñ •¶œL~’çÂsëæ“ýñ§OŸº±è’íò“¿ú˽ç;Þûð£>üðý÷¾ûà¾4S&ýËÌꮽ«m2_Ë,¬míìn¯/åüb¿rùÒ¥Kùçb}²>tauc{woow{cu!7{k^]O«Ú}îfW6¶w¶Š_¨tÝ÷ôÞ=¹4?Ñîíûï<|øîÛwom.yY¢ð¼ÕƒëZ̧D–tÞº}÷Þ½{woìßÚÝÞ\[šMÅFì7ØQ¾WücñÌÜÒÊÊÒ|¶ð”·09ZSßÜÙ§g–W×ÖÖV–æ²ÓQó2mÞZì·¼~KGßptzfaiÙ¼PbÂ~ÜJÚ}ò Ø•¹é¹åõ-Öûvzݳð+þ*WWÚz‡&ÌG`e}skksc}ueyia.—NLŽ ô´Ù“M+n]ôÐØÔt&—ˤâ‘W­_õÖ¯ŽNÆSÙ™Ù¹¹™lʾL»¿`Åö´ÌWµÈò‚x*“IOO½PiŠ©xA¼y·Q·ÎaÉ.‰ õ–Æ–™Ÿ¾£wh|j:;;7?77›Ëš÷žŒÇ쪷€äêeûx²*Tßb^vd"³‹ZìËUåkq¾ Ú»Ãn%J2™˜ŠŽEú{Úók:ŠW~˜/ŠF'e¡Š}¡’î),ÖjïîÈ»MØ·;)o·£¥¡¶xo‹,rñv G§â‰x|*:91>6:<4îélµÏ®ºù§k7nÖ6´tt‡#ÃÃvý—y¹¢éÇÂþšÖŽóE#cv¡Ø@_W›Ì,]/^—fWõ„††eáSÉæ1‹ËÉ­«o2o¤o`(2<22â~ê¶æ|1TÚ€Ý#?þpļñþ°·ÀÍ|½_L® ì"¸Ž®£«£µ¹þH©ÿÎ.¦º^å=jíé ÷÷Û0öaØuoõ“¿œ®¶Á®ß“Õ{òL±ä[Šü‚’U’­í²’Э%ôw8ÏÒûU×à-:ì‘7ÞÑÞÖÚêL=u‹*ížµÖVù{·C­èåò_$+/[ZeG›y)YÃXS´çÏ_žév¿µ³ÐµDõ–¿S®¶Þ¼·4Õ®M UWÙŸëÈÂð·Ž.bmi–ýŒ²žY4yÖg¼ªê·D·ÎâÑŸ®°’·ÆnÓ3/ÕØ [#,Œ.¼’]_\’­“¥ßÉç?Å“¥îæÔÖš¹¶xæÑï…ßvQt]­Ýk×Ç{[dí㥢—µ;jó;h_]@Ÿ_go÷ڳܹh½za¹úy¯‡>¶ ü¼v+¯ãí¡þÙŠŸ/²¯ºáï·p{¥/å“™÷²Þí_Úámmðÿíc–Ïû¯ä^ÊßþPÒ]Sù÷á¶_µ;#äíÿÙ-êþçwœíÍ9²ÃçÊ•_Øp^ü»;æŸýùvšÒ—’÷f‹øõ3~¶ Èßö³LE;Æ~eÃXÑ?~å—:øõíY%äoi+úqßÖ«[¼.ýò—_zůýã¯Ù.v‚×)‘“ýPÇ~é¯}ñÉ~¶“¿Ô¯¿N +ä›T¨HdãùÓõÇ/‡n‡"+;éGæ÷÷ûòðEè ô]hje'‘xûð‡—áÙP"<µùâððÁó§_‡'CqùÝã¯wž?=üÁüÞüíý—_¿øÑÿýÔÊ ù¦‡ æoVþh¾<ŽÛÿ=ü1”É%b‰\&MƱL6 J%2±ÜÌÌLÑÞ*úÃD*Ë%rò‡ùï>îÏŠ¾ùyèáDh.<µöõóÏž=öüó;_~aÞY2<%?ÑÊó—Ïùìñ·æoÌŸÎ…B3áѱðÃwCŠ~eßñÓPÆûƒÈ£â‰<Š)ï÷E¥y”~¥\ä^¸o6eyt\YD[Å\ô³½Æñzä%žË?ûúùã?ÚÂüÑ‹Çî—£+;á•ï^~v g?ŽÉÿ"ÿ"áÑ•§_zøhegæÑíO¿=|ñýáÓG{‡?>r_ôíXáßJ˜¯}þõópz:k þ; ó12¢X6m?G ù$Åû旿7¿ùS8ï‡?ø(~jþøá=÷qÞ|öåá¬ûåêáçÏž{ŸmMóý[¡©õÃïŸ=9¼·µ~xúÀû&ÂÉT&œÌ„? +§²ÉpÚüʼâÇý½üÖÿÿ¿¹ð´ù’DÖ~uÊüÏ|Q(±ÿ¾ÔµÙp6•Ê%fBwnj_œÀ¯ùÝ/Ó~kpÁýJ&!À¹:y>E6&·À¯;]þ•äyæ/ØoÉ™¯$Ï3y©â€ ï 3ç™Ó.8wÚ‰öõ´KΗv–=íB€ó¢_߀vQÀ¹ÐN®o@»¨à¤NžÊJ–BÏŠJyÀ±´3¢íRP‰´3_ÙÑ€ N;É€vˆ\LÚ¹-H´càâÐÎg¦:A¥½.í`íŒuñiG@ùÒÎOJ;ìÊ‚v*‚ÐþP xp 퀳§WpÚŸ¿•vÁ™Ñþ(x3Ú9çHûÃà5´“JGû³àUÚY:´?wH¿ÚC BiW}”í$PA´«;Ê—ög¸à´«8‚Aûs +\LÚ5£ý.í:@ÒþØ„vUF€ix‹@»#ð´?Â@€iW_\Úd ¨´ë..í30ÚUö‡íúŠ‹Iûs ƒvMÅE¦ýéÊvEEÐþ˜eJ»j¢‚hز£])Qq´?ò@yÑ®‘¨DÚŸz \h×ET.íÏ>P´+"*—ög( ÚMûã(Ó®‚E}Z~@vå»È(ù7Ršðˆp&JP•ÊŠvy_X 8…ó¨8åL»¼+ñNî ëK™Ó.éJDÔ€×úíÕ¤üi—1Nÿ1Ó~ãÀù:ÃDW¶´ËG; Ø9å½ò¡]ÀøEÄø¿ „µ‹^O;Sžír€“ÒΗgO»Dà h§Ì3¦]œðf´³æÓ.NxcÚ‰ó,i—%¼1íÄyÆ´‹ÞŒvÖ<{Ú% +o@;ež íB€“ÒΗçE»\àõ´3åùÒ.]x í4y¾´K^C;Mž;í€_¤ KD»˜àxÚÙ±t´KŽ¡KG»¤àÚ©±¤´ Ž¡KG»¤àÚ©±¤´ ^¥KJ»°àÚ©±t´KŽ¡ß̩߶b À¯8TyNNý#”²<à—” OžŸSÿ€ç]ªðëJœ-ωv)ÀihçÎ3£]pÚ¹ólh—"œ’vú<Ú¥§¤>φv)À)i§Ï³¡]ŠpzÚô·Ò.?øM´“èo¥]~ð[içÑßD»ðà h§ÒÓÓ.98ÚÙôô´K΀v*==í’€³¡MOI»ØàÌh'ÔÓÐ.38KÚ9õ4´Ë Î’vN}cÚgO;³¾í¢€s¡\OJ»œà¼hç×Ñ.$8GÚ)öõ´KÎv¢ý5Úe¥ k‘vÁ@éhgÜch ””vÒ}•vy@©içÝ#´ h§Þí’ÚÙ×£]  C;ûz´‹h§Þí’€RÓλGh”švÞ=B»0 Ô´óîÚ…¥¦w ´Kthg_v1€íìëÑ.С}=ÚÅ:´³ovI@éhgÜch œ;íDûÚÅçH;žžv ÀyÑί'¥]Np.´“ëIi—œ íäzRÚåçE;¿žˆv!ÀyÑί'¢]HpŽ´Sìëi—œ#í{"Ú…çH;Åžˆv!À9ÒN±¯§]BpŽ´Sì‰hœ#í{"Ú…çH;Åžˆv!À9ÒN±¯§]Bpî´íkhœ;íDûÚÅçN;Ñþí²€s§h_C»xà|igÙ×Ð.8_ÚYö5´‹Ηv–}=í€ó¢_OD»ài§ØÑ.$8/ÚùõD´ ΋v~=)ír€ó¢_OD»à¼hçדÒ.'8/ÚùõD´ ΑvŠ=íB€s¤b_O»„ài§ØÑ.$8GÚ)öõ´KΗv–}=í€ó¥e_C»x ´sí/Ò.(ítû‹´ JD;Ýþ"í‚€ÑN·ÇÓ.()í¤{ í"€’ÒNºÇÐ.(5í¼{„va€íì[ ] C;ûh—¨ÑNÀíbMÚ9˜$ Ê©Xû§}äaÐE]äaÐE]äaÐEEZI˜< yt‘‡@It‘‡@y‘„@yt‘‡@It‘‡@yt‘‡@It‘‡@yt‘‡@It‘‡@yi%aò08$aÐE]äaP¤•„ÉÃðªI˜< ºI˜<  Âiç`¡] F;{´‹thgßí’Ú©÷í€RÓλ¯Ò.()í¤{ í"€’ÒNºÇÐ.(íŒ{<íR€ÒÑθÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€ÒÑθÇÓ.(íŒ{<íR€ÒÑθÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€’ÒNºÇÐ.()í¤{ í"€’ÒNº¯Ò.(5í¼û*íò€RÓλ¯Ò.(5í¼{„va€íÔ{„va€íÔ[ ] C;ûz´‹4iç`’0€JG]d`PGâ]ä[PGu$aPG€r@€r@€r@ºß€²qɧýFp†.¡ýnp6L(ß2._¾,ÿùYd‰y0ITML¯XÛBøòá|ë-?äD6 lX¯\½zM\½jBëE¶(¢—=oåÌDÎDõÚõë7ªªªnܸ~íªXÓËùš\Tµß3^Ë ëª›Õ555ÕÕ7Md¯¸zi£zÅÔd©Ê× [ l ˜èIXoÖ„êêêëëjCÕUXÛƒ²A•š,U¹êf¡:Ør'ÕÕ„µ:T×ÐÔÜÜÜÔX_[ã+ù×¥ç›R•CFMõͪ6$ ›ÚªojikïèhomnÀ^•¶ôª—žCµ¦*7¦:טÕ±‰hl*>èi— +K".©B5uÍOÝ°ñ4Q™T’y%7½"CÔªPc{ïÐx<•ÍeSñ‰¡^9óÕfìÓÚÙˆN%¦S©TrjÂUçªkŒaK¦¸žÚÁ§ h•‹§Z¨5ƒQWª¹Y%sGW¤ymêèŽ&³³s³ÙääpŸi`CÕÕ¡ºÆ– ëØd,1ÉÎÌä2Ó±±AöZ›ˆyºS +Å1½"1µÔųV&êÍ0Ô‡zQ ¬Ì5™æµt*=3¿0?“Š„;M\Í754·w‡GL»›L›˜›¿Í˜°‡;[êkªÌ6ÿt€àž›KùYzoF×N㻀644655›€¶¶µ›qhWW—ˆÚÑÌ5×ú–®±xfnqia6=5ÚßÙÒPª•,ÜgÃ:ÉÍ-,-//-̤§Æ\û{Ã5Ï<•=G®ª^¾\S7MÔXÏήî†ö÷÷‡í¼R½ÔØë2ÙÔÚ=4‘Ì™Ð-ÎeL\»ZêjM_¸£g`x<–HegæWV×ÖV—çs’§MܽÊî?¹ûù œÚ‘ù†ËöÉøu›{MPML›]ËÃZïÑÝUù ¡ý ŽÎÚj¾¢¶ÉQŸ„s(RЩ©DR†+ÓÉ©ÉÑ!—NMW¹¶±½o8–ž[^5qÍÆǺZ›¤ºF&â&¬‹+k[;»{{;[ë¶Â…»Û[›åñŽ÷ìÎö¬é!ÿ&~Þ-¬N¹êž¼Ô˜6Q‚ÚÑ馈FÆÆÇ'&&'£2§ Mg²¹™ÙÙÙ™l:µ3 &*5uMá‘©ÌüòÚÚŠkw[³©ñ=ƒ£±éìœÉÁ›Û»{·öoííØ + +÷tu´µšnµ nµ7fºL'ê´Š»H×S2Uµ±ÉÕTÔ™!Š'‰¤áEtFÆ*‹KKK‹ó3™„°4˜êVS×Ü5q]1q]°qmoinn“êšÈÌ-­Je½µpppkwË´°™Dtlx0Ü×ÓmúÕím­2fª­±óWéDJ¡‹äOiUM£ÚlÚÔ®ž¾~7A”L¥³Ùœã"º¸´,½ÚõµÕ;`1õ²Ñ´’¡z¾Æ³ .®‰ñÁžŽVS륺¦f%¬{û·ý½í ùÖdlbl$28Ðîëíéîì09¹¾¶¦ÚOÇt¢ÞŒ×Eº’ï"É ’ý6{^d2Wæ‡r³ÊÅa*©„t}}ccskkksÝäÛäDDžÜÈ@µ¥³¬(®C}]¦Ý-Õ5;¿²±-•õö;wnÜÚÙ\[^˜É¦S¦ï56:2èï3ƒ¦Ù›ÒC¾úêdüšBUõÒn]½]›b4ÚVÕVÕȈ‹ªq.›ºiÆœ«++¶–šqÊÖÖ¶éÕîìlo®-ÎLGm"®­­mhé*Ä5gâî6ƒÝ^©®³Kk[»·LTïÞ½+qÝÝÚX]^˜3 tj:ŸŠÅ&¥æôõtÊD‡t‘«\h/_&°'à%à+WŽôZ}~«*Q•Y?éîoš(n›Ê¹±ak©è®eâº4›Š¹ªy)×Ѹé7­š˜É8f ·»»·ØU×/¬.®Û›ë«+K‹ ó³3¹l6“N%㱉QY©³M õvÞ¹°Y»ÜÊ[QT婨]:(ãÓ®nÑÕ%ÓRUGÇíƒSY—Ö6¤ {ëÖÞîζ0Ý3lXwl\Ó±ÑîB\§Ò¦ã»"JÑQÓ)êëNÏ,šêº/a½'qÝßÛÝÞÚØX—$°¼,Ñ›•¤ì"ÛÓÙ.}¨zéKd ìkxQõ†¨µõ^SjƧ–ùÏà ªÏ$S6¬›®¯s`'&»Õ[6®& Kûº8ãÕ×z‰kgxÄt‘––—æ³Ó±±È@¿é|ML¥g—Ö·÷ö‹ª«|³G⻶º¼8?k"7ÙX?v\+dþ˜ÀþŠ¢¨Þ´«|[ü% #£ccc£B¦òcÔIÂÛRÍ\_G¢iBzK~±cóÚÊÒ\ÖιúÚÜÑ™Lfçf³ÉØøðÐà`dtÒ r–%®wüW’ow´T{ùˆÈkÍçÒÉ©èøhd°¿OƵ&ËrTV-þšW£jªª]Á0:n'ŒXÌü7.!M§3fœ:;o†œ®šI4luIØVU3ÊY^œË¥¦Æ#2ãTW[[ßÔÞ386•ÊÍÎÍæÒ‰˜©{C‘á±hÒ ^ýŠ/¯ãj«‰«dø}ã–ù#Ó‘Zš7ÉØDÖ~üÞ1ËQM¾²Ú¨šÜÑÕkR䘴£I ¤‘2dÞ!73#CÕ™¹‰«ôbo{‰xÇÚ–šj;=¦?›ŠOŽØùûÚyÝÖ®þáÉD*›Í¦§ã“&<‘ÈÈx4‘ž55_f¥¡Þ³/ ]0W7ž5¯.s‹&°³¹ŒéAIh‡‡Ld;Zí3–£þ‚Kþ^·*U“€MU5%n'd¶Á˜µæææ û›¹7ó'uÊÕ&OÓ ®›œ¹8?7#1˜šìël•y Ób7w˜Qͤ©óÓÉxtbÔŒJMÏz2>usÃ’x%¨ë2p2ýl[…ïÜ‘&w_:×+K ¦¦g%´±I™‹êélmª“]TØcUV»„L¢õ&ædþÈttdZP~e±`#;ok6Û¶Ž­K@$ýÎÛ‘§©XÞYQ]]#¶ohÔô»Ì€t|Tš×!©°ñTÖ$õe™Ð0ä–—WV×7üÀº‘ib—\ßØTwÓ9êïéhµÏÞ©°?g+« ««¬-Õá±ISUMa{S‚Ϊ³bkã¬L/,zÁpJ4\Ì¥ÜSv.ah@öKÿ¦Ê.Pkëê¶ý°a™ ì—a“ä…tvfnÞûÜ,º©+YØ[.Ë€ÖûxÙoŸ…»åmËQ¦Ð ®²åÞÙÛoº¨S2ç`ªãšÌF¶Nº +Y˜¶³ˆ&9K®ž1iR‚—ÈõË ‘ «¬S4ÿ@s[—]ü=d‚Ú×kÈ€xt\†ÃþS 󉙱š%ûÜÎŽ·½°šŠl>?fГ“Ùã‘Á^“ãkYfüªüDÄu/›ê42³3IòÛ5yNQëi*ŒÄ/#Ýb‘Íš_Ú®Õt2¹ë€<Šél÷F#v¿†]RÚÑÕ#íéîê²kf¼YI3€2ã'yl›r=4Óá–VwSþm;fZtO 3þ5£Ùxtl(ÜÕÖdñUö)š4t‹îÛ»ÂC¦_#ϸ—¥Då!·cpÁݲ};G`úDÓIO"ÇÝ@(:91>& §©ŒÝ2{ÐÒäÏ\ÍwËZe£dG{{›ÌL¶utÊ„³&»UvB²*UԺ婲ظUê­·_¦+e]Ô_ZIõ2ó?mÆ\öñѪdŒ™Ì´í8uÙŨäaOalSeŸÚ4Ùái[ãé™o’`ß‹«S®»ü'=Û/’í4¢®©”Õ²°AVƒY’tÕ?F"ÿô¯À=Ö-×®j4 °‰°ÌvMDeÚÒ4Ú65Û.ºt»]u—íY- µì§ôMDÔ¸u-¦7Mgç—eRÏUV[[·m«jz£n\j†Ž“¶³+1õÖ¨¸ÅýöÜ{Š€[CxÃ>#-¬!ôÄ5·ÇSå+‘®is½e«nƒÝø„1nLÈÊñ“—ì3€˜ŒeœSÃ8ÇãUVÛÜym캖±hBª«}ö&Ó²2å+s½nVpÖK½ùÙpo¬ç7µ³Ñd\Ù‹cSkÈ_êÖãëYìí»ó7ßyçÀÈ"\Ye.Í®¿†Êîˆò¦¦dªÄ{h7b†¯-ÌKø¼‰¯{jÛ˜ ÊºB3n5­ëªÿLÕŸÁw—ÆýI÷|ÏÈÕÎ/«Þ¼YéÕ®foICa ÞÑ3¸l€%¸Þ0ùv·Å~âzû¬þ7°ÎÈì²ÔÖ¡pO‡Ì#š4Lóúʬ¡ãáž•ÉsÕÄtÖôšÜ*Þ]7W»šï矤˜Š*¹×öŒl#ZåRª;RëšѦš#ÿú+§ø»g¯^Í×Ü›nŸeÈĶ©ÅŠlZî2ck™]NÈÙAÖü1•×⧬5vh#¥5fŽÒC‘ͦ}ÝrÏeÜÀqn&SôxÌ­èõôÖí²° +GüÒ&¸K?—_u~%âš4¼nù£ÉæŸNÓ±“Í”1™øöÂ*›º¨®®¿d[ÖêZ{æŽÝ hgz¬´¬D“YžM¯ªÚ)ˆ„Làçƒê­À¯ñº»×üêyùò«ý•Òþ•àÚæ×ffÿP'Y:×ØäÇÇí¶îBX+¼º^Ê÷—¤e•Íÿ½ý;ÅoÚ,Y–ö¦ïìàßUUÛ–MÊ~aù‰­§7ýCòõódýÅ·æ'èË~û›ßßeWºJ¯­³GVÍ™ñU¯„µÁ;³­ÒÚ²ÚöÉ͸ld›™“gªÒ5J›ÀÎÌy«õíSìüCì¢åbGº»GÂù[}©º®òz§&ºî²I0¦Êöô…ÃÒoo-,ƒ©è¸º°Ú!«›]rýûä&Ç´q—'é³þPÕ$à°©G–wæ»»ù žÝ», +ïåÂF?ÇÈ!OÞ†i/¬•]]ý™;dµŸ{{¢ƒØØÉõU»IBi¤äI<·Uu@ZUÙBá-Çösoþ,÷s)T¿âæš¹æ¶MÊvÜê k>¬öQY£UY‘²a]][—Ét».LÎÈFªxÌ-ýëµ ØmŸ(Þã'ßó}ÓÅ9Ù¸eƒfc£aùGcVrXßrç‰zg%I]•….ò¼Ä>ûZ·³³2¡¶ÓöÖsÖý|»ÓyÕ{ß— +×uãm¹¶ÖåŽ +_îoÃzÕkÇ6’M]u]¤åUÛý•úšINÙ}N²ÑÉ.vh÷ð«ÛKY”ùÖ¶ø©»8Ž„UVDøË—fäÙ¦]Yb—---Ìy+ê‡ìÖDo±ƒ·­x;±Êà­Âòæ¤üƒÜ*8¬®DìYÝö¤¤!·|I–šZËvÌœ¬§—-0a÷Õ-v¨)“íÿ— +§–ø'/VôÝùŽpumƒÑ1ìm¼•†«ö œ,ßÌed±¶Ý³Öáõ8½ÿåq\GaèsÌ<•ÆŸbª²a•eÙ »(meUvolxSÀvRb:ì³cÕF·ØáHÖþYŠîËÊwɵߒŽK…Gr^X£I»¸Þm?ö6Gùˆå)ÉPXV†zUõ†·uX½ªæå»Ç¥é—©|®ª©m”°ŽÅ¦s Ëþ– »JMvGÙ]/² "2ÐÛÕÞÒXçp¹EUœÅŒeÀ=i­³autÈi:…-ª²MÍ [eÄêö¼Ô{KCË&£Haµ‹le³IØí ¿uppà­G[_[¶kÀbU»@_––Ôù3tDµ ¹Ë¼Uö½#Ñdnqm{ïàŽÛ쿳-a•=ª 9PÇ-/´iتITËÐÑ°Ú3³ó«[{·ïÞ¿ÿîm·•Iš–°JTe:«{ªITËN~¢ßðÛÓ?<OÏ.oìÜ{ûÁƒ·ïÝÙ—³tÜBÜØ„l½°‹»û¼¸²f¨\åÃÚÐÔf±]áµí[wî?xç÷îÜÚÙt]¦¸Lz öM\ý¥›„µ¹{þ$¬òü¦Èϱ±sp÷íwÞyçí{·÷¶ÖÜI“òŒ5Ü×'ëd¥7q-c— +÷üÉ*¦¡Ñ‰©i9ýj×ÄõÁ;îßÙßÙXžÏÙyþ!™vGÛ¸¶×rå5®7kòa¹•ü;ûwî½ýöý»»›« ¹T|ÒžtÕÝÕéNÝꓵÔ×råÌ]¯’Ì'2궶,È1Iv”s`²ðâL*>!««eå~›=ö[¶›~S;ÔÊÑ%ÿykumc‹ k,.Ï[½óÑö÷oínº°Ë´a«ì˜’Ý0¦ÊvwuÈ)ìP+?¯<˜³+„Ó©ŒÝý-SÃr|ÙÊÂLjj|¸ßNòËY¥ÞIˆ²Ð¯±Žjå§ð`Î>F7ašÊêå˜wç·Ø3馧Æ#ý=rìk­½ƒAªl{»»ð†jeƯ¬và*«#LX½=ß9w2Ï¢=-´›øÛå¾ »½Ø^ên¨r÷c“†Ëˆ¿œÔÛTåÂ*+™äôÚ9ŠGÖ»xfÙó½sûìN»,—Ù¦rRXÒoÚY&·”i^N\’ãxÒéT23Û~ÿœìȸnÏ®µ“¹±¾ÜV Û3{zåv°¤l[Zrã$¦r¼’ Zíãó·Ðåjá$»J¢ÂW[—7wè­î »I&¹leEŽÚ°Ç¸D'Žn2t×úyw4oY.a-ÞÜaµ¿JX¶ÊÉ ü«r–¤{|>5é_ÐÜXºiŸ²^ö/rµ;Š¯å—”jÿ8pòaͯžÎÌÊ•oö&?‰ëô”wºk»\WâÎPwÏý+®z[yòZ>ü™~;!÷n¦½+ß ‰ëLZ.r)ØYxõJᨖ†b¿”Û¸^7m«½ŸÑµ¬î8<¹ qmÙÎD »þ’·.­°Ò¥h;qy­>¬x. WÕÔ7·Û%/éܼ=ÎÛÞ|°µ±º8›NLʘÕNE¸Êz$ß²~³¬vwÛƵ¶©­[Â*-«ÌïÚ{¶Ö¥ºÆäXWwÈóãö,Õ2qdϾ}0g×®ðpáìJw?ƶ­®ñ‰H· k•¿Í›–¡|“蟟b«k{ï,P“[7·½kO¶7MëšMÊÅòlÕ¡BXËS~tR¸s÷fM½\)%«¿W7üʺ»½µ¾²KÅÆ{†Uû'À1ŠOunTU×6¶õ ŽÅ3öÖÍ=ïŽ"¹MÌdáñˆ½vª¦ªÒ7ï—µüö8A{¤ œÑÑ™HæWíI³{öþ¾5V¹6Ù™^ãOFXË‘¿ÒÅ^aoÏÑ3@šÚL¯É¤a¹MuÏ¿Æbya6“´×œ7×Û³? kÙògøí¡ÐÍî´ü¦¦æÖŽžï–Ü×crÛåäNN9Y;Ä“Õ²VXÜ(ëÍ:»ì ìí=ᡱ©ÔÌâÚ掽WwÝÞ˜ˆŽ õuµ²=£Ü™¸^±s†Mrxk¸@Îoé“K††F&âÞ%ô;¶¶ÎÙEÂ&¬¶qåêŲæÍÖɵ`w?«ÜŒwG¹¯on¹=Ë6¬²ä¥©Þ-[bDùò¦øZ;ûeq°{7%—MFcqÿéœ[v(uº°†nr¤ky³½¦ÕurO®\O•‘+Yå^¸d29m~'K$䤭ţa¥q-sÒ¼^»QSßÜŽÈ…7óKö`-{„°¬&•·ä’™9/ wÖ@ðãÚÒÕ/“†^kºá®C‘;6e‘°½h>߶za¥q-g6®U5õ­]£Si¹t~×Þu³³å.0²×°ºK°_ +q-cEõU⺲¹»ïßjlC+«çd'º7À!¬áõ›šåáMJâzpçÞýû÷îÚûªíj& OS[ƒÆsìÃÖ‰dni]v+ßÛöŽwùâ\6Em œK—d^ÂŒ_ýD¼WTa嘗yY|HXƒÆÎ#Ú¬©°‰ìÂÚÖ^¾…•ÕòGV3uÖ`‘‰D5“=Ož·î?˜‹ÛÕL„5P¼ +[ÛØÖ=à³”#J·MgØDUÎýŽÉ^ôöæÂ,þÌs{ï <™›_Z‘«ì-Ùr>ô˜Ý‹.€Tü}Pâ¯îohéì—Åýó r»¼wI ½ò–°N~xckW82KÊQÙŒGU¯;®ÇžÿAXƒã’«°ölwd<*×Ý&å$÷Q¹N®Ëî­ªö¸ÖÀ¸TX +ÓÜnÏò‰My¹‡Ýuru!®F ÿþ'9ö¥ÑÒ4:>11>j3p‡»NŽKù‚ÆÛãî]öO¶±ÇóÛ}rÊËuÓe"¬ÁQ´½ÜÝiÏéòŽq¯+ÞÞªývq2þEmv‡=xÉ^üÙ–c¡{ý]Ë×Ù1,þÝ)×ìõ{²{ÃÞ©ÝÞÕÓÛ×ÛÓmÚVka Âéî:yÿFy¹žº[#õ.I!‹Ɇw:š¿1GÛa¸S+¶MáîËƦ¦Æ†úzÝú†üµã uo8þÝ)5µõMÍ&Žö6OÚzX·ýªÁMGÖ ‘ÆÕ»;Å6¨]]í~d¼Ûä½ýèÄ5ŽúbïN±·,tw¶ùUÖ¨«õF®,‚¡/ù)a7᮶—Kxë¥  +ÕTW1{Åç¾\ñá¸mt£î^O{»}êMÂù£ í¡/ö|w{wÊðØÄääĘ»_YºÁµ¶²^gú0¼YC;mhõ®væ†Ç£Sñø«gÖ€8:k('z›N[—ÛŸN¥¦± ¬Ì2Ù þ5 öŒöP($g¾ØÍÌÑD*“•kÑcrC·ibëCÕÍù饚Ú:3B•)¦–6¹yy"žÊÎÎÍͺ¥½]mÍ µ¬ +ÿ×P½\nÓÚÚÖÖÞÙ-×1LMçæ—æÝE8²¦´1¿JMû]ã5¼µiöÆåöŽ®în¹Ì³PnÙÈÎ-.¯®®ÈF9i ·Ó‘Çq/P|‡kwo¸`ppphxt"–”sh×66äÀ—ìtl,öŽñ! ¿¨ß X{ƒî<Ÿñ‰h<鎖“|ì‘–îìCï²{íw×ÈŸØoïןŒÆ¦¦â‰¤é2-¬¬oíÈÉ[kKs™„k#·DÑ^ÞÁ¹Ãu:•NÛû>%¬öÄõåy‰kØ’ÇmAp©èø­¡Ñh\®…œ™“Ë>%¬²/r{cy.ôÙC-yîGöVEé¬Üó¹d¢º¹½{kÿà`ÏÔ×ÙôÔØ`O{¾Û¤ý®ñZn˜#7âôÊ SÚŒY—VV×7¶vvoܾmâ*·¤OGGú% ß$ DþxK¹g"žr÷W™Êº·pûÎÛû»›«óÙøøPoGs=£×ÀðƯò`Î$âØtvÎÞž"•õÎÝ»wnßÚÙXžMŨ®Áâ/g’;¬ºû‡å$DßHXïÞ“3}ö¶×r‰ ©®LJ†§¶{’n+ln~ÙÄu_ÂzïÞƒÝÍ•¹tl´¿»•Îp`\Ê/íw3¦Â&2s&®{wîÞ¿ÿ®IÃ당äD¤ÏTWæ$ÂÛ4g·Ì…êšZ»ä‰´ÜÈàŸÁu°·µ:Ÿ™êÊšá@ð+« kµÜ«m±ÜÈ`ãjš×Ûû;ëK3Ó“ùêJXËŸmZÝç7eÃœ\¬íÝ´aó°ôšLëjªëØ`w[#­k0¸“l¯²+%åbœþa{Ÿ džt†Më:9î4cWªkø«š¤ªÖ76µ´¶ËÅ8£Q×oÚÝ?¸}ÛN!Î¥§ÆzÚÌØ•êþ6Ù±,÷uõô D䂆œ¿îÛÿ•ùlÂt†;íTáòçoÃ1Ý¥–v»Pb022§²sr­«Üÿ¹kº“™ánªkPn³jíèî—‡¯i7=¼µ½³³-¦Ï¤L§©·½™9Q8"¯³§_ÖI˜ Ê­8r¶¥¬~)¬‰„yîÞ yî µÑÉ)T÷ˆnÓÞ¨"½gäbm»¬‰©¦@(~œ.×YMgfæ +Aua]šÏMÇƼçsT×@ðâš?©4cÞØ”†uÇm— O ÷³ª)@ŽÆuÊ꺳ëîKßr×m˜ê:è=Nçù\ Y®fŸ¦ÛÑÍž¶ºüí½ ‰Éoq)Õ5 òý¦Žž‘Iw«‰ëþÁÁ ìŽé /˜4ì-Bt­«ö[Æ .ë“©°Û{·n›ÀînI\ÍØÕ-“`f80òó²Îßôœ$¯mîÜ’yá;ƒ¸`zã=mM’†i]¢è8Ÿv9ã=¿þÅÄõöþ­ÍU7…Ø•_þ¢ýŽq"…ã·Zl`§R3 «¦ÂJ\nín®zèZ˜ñ”‚µ9ã}xÒ> Û¶^oïïnÙ¯¬“ž¢•ˆ²çÊ_cãz°·å­.moª% Kþ€K{ÊÈd2·°jÀȪa×l||°§­ÑŒrHÃAR¸F¥¡¥3‘;#WÝ‚µ»·oyË»\óJ»Ñ›è3qÍ-®mß²Ëüm\Ó±‘p§4¯ŒrÆ«°5u6®ÉÜ¢»”ùþ=ו¹Tt¸æ5dvâš\¢nâ:™œYZß9¸{ÿí·ïݹµ¹<;=1d›W3Ê¡ºË«qÝØuq½½·¹<“ìneyiùwm{y8__oïm,åâcýÒ¼’†ƒ'‡zGïиܡ¾}KÚ×»»ë ™©‘p‡4¯ŒrÇÏÃMí=ƒcS™ù•Í];~½µ½:ŸŠFzÛmóJ/®µMmÝ#Ñé™Åõí=y ³ëu›Zh^ƒèÈ…ÌvëëÆÎÞ¾ìßXÌÆÇdVÂ^µß'ÞHÑEÛÞ^õ…Õí]Yè?'³4¯ÁdW9]óéÈr˜Ì¬,s’…þ¹äÄPoÍk ùg†Ô¹ë˜åÄáùåÕõõÕ¥¹ÌÔØ€½2‰4ùyÿºFÙû³gÓ.¯ØáÑáp£×@*¤áæ¶.9!Ü®_\ZZ˜M{Ïè¤y¥ºLáHiS]ÃC#SÓÙÙùÅÅ…9·´‰gtäWWi]»ÃrH­l“\X\œŸÍÈf掦:F9ä&o†ì‘Ò£SI»ùjiqÞîzõÓ0q ˜ü‰—mÖI¹UeaÉë5ÅFIÃU´õÊ­ø·[êÌ gyÁö†óK%´ß(Þˆ›–50rðpRv^y×4,ÈÁyn%"i8p$ Ûu]²1+«ýwv÷ve¥6!£œ&›‚ȦayD×;4—ÿí½}»åju!ãæükX±<~né ˺%û„îÎíý½¢•ˆL6k•IÃÝÞuo‡=åF¯4¯ä^½¸Î¯llïîÉr©Ê¤›D¤y  WºÃKrxÞö–½‹.Î$bpI\oxq•=ÍËkër'èò¼¿MIÄ ºTˆë »5gyEîð•S`¼ƒiY‰@ùáív13;¿¸´¼¼$^§ìÝVLRagŽ‹«}B·´8?ëYkçÙk0¹á«õóÖ¿,/-.×@sKÖªìy¦ö|ÄÙ…¥•••åÅù\Jò0q ¤KE_å(˜´é¯®­¯Û3‡þíVÄ5`ü“%܆«Q{&—Rë¾òP= ò— ÊÓœ¾È„\™³*7¾Ú»ÔçÜ4"q šü]ƒv¿UÿH4™[X±O_íåÌ ì¸ +¤£WHJNÍx7\ݽ³¿»±d ®#9Ø…µÆm£“$—×ý~ä`‰$q /¬rYm}s›œ/Ík!®[˳^\¯_e GP¸£¸ä²AÖ&wÓ Ü ¹º¹»ïгÁ H¿‰¸‡à\¯ª6amlië´»­¦íbDÓoº} ×3gã£r [®‚#†©»mPn0‹ŒEí´„œî/ÏÕe§úpŸìTçqN`¸­V¦muauwHNÄL`çíFu§z¿S]û ãDÜ©þU5µ M­öjÐðÀÐð˜67·¸¼º¶*WÒyǘÒŽÂå ­r9h_¸`(226K¤²³óE[$Y<(nÇ«œ'Ñ.•µ`pp(2<*Îäffgs™dT.á`§zø·\Õ7µuöôõ E"‘á‘ÑñÉ©Ät:“ͤ“±ñˆYݦ€ðŸÎ5´¸»|GœÑ1{ýët*•JNMŽ ö䟾×@ð5Éüaï€iWDZ1óŸ‰è”‰ëôt2.ºv[û ãD +Ç\ÊõñÉh,µb6¬)×èX$Ì]HS´•y`x<:•H&“‰D<‘H˜$œN§S×!ïªA…†ÛCgŸ¦Eã&–™LÚÊd²F&•úJ\&¿7²+<<1åF63ùUÖu‡%×)ìyí—;_s³ó ó¾¹Ù™ÌôÔÄ0q /®mÝ£±¤œ­&kÁ¬ù¹™,q "Y ~ý¦ÝËl÷ä,,--kâjê«Ÿ‡¹C28\\k q]”¨ºT6:222<<÷vµ77ØêJ·)0 +GçõÙéáhÔTÑá¡Áþþp8Ü××ÛÓÝÕÑjÂZSuý*i88ò›#;ì㜱1TSE»»:;Œöö¶Ö–æÆúÚêªë¶º×€Èofn—ǯ‘ˆ©©}Ýí&šMFcccC}]m a ÿ9]ckGw_¸¿ßTÕζ–&‰fmmȨ©©¾YuÃ$áËo×àȯƒi–5¦==¦®š¨Ö…L4oVY7n\¿v•°Œ‹kUM]Csk»´¨­Íu¡ê›7®_¿æ1A½rY’0a üEH M--®“TsSªèßeÔ·kÀx¶:TWß Ý$“‚oÞ0QµÁô]"ªAãïϹYª­««5 k• « fžöÛÄ›ò{£êfµéûV»|ù-Bpþ!&²Òû½~ý*½¤ Á ìÕk×®_wCf .„Kî$ZoHCX/ ¬©³Î[„õâ¸äB˘æÂaLsQU¨$‘ÈÆó§ë_>=ÜEVvÒÌïï=þöåá‹ÐAè»ÐÔÊN"ñöá/ó¡DxjóÅááƒçO¿O†âò»Ç_î<zøƒù}2ûúùã?š‚Ž<¦c‰™ôL&1&±x!¯0ºººòäÉw_ÝûúåcùÚ1óš‘GsæÿB6OCïEå% ±Ž<Š‰¶÷û¢xG¥^‰¸{Sö›MÔ#ŽräÑoˆ³ùæSG:òèô±6ß{ÊhG=—â˜BÿyÌ#Žº¡c£lþèÅc/à+;á•ï^~vöÙO‡…ÀÛ ®<ýúÓÃG+;3núíá‹ïŸ>Ú;üñ‘û¢oݧá ?7 óªÏ¿~NOgíç;óI2ÜTïX6mkxBêx<¼k~ù{ó›?…ñð~øƒâá§æÞs‰fóÙ—‡³î—«‡Ÿ?{îeói4ß¿šZ?üþÙ“Ã{[«á‡¡¼ô‘013áJçÂ…ÓæcŽ'åcüű_ ¿÷¿Èÿo.Ú… +åN;OŸír€ò¥¡Ï—vé@ÙÑNÌ¥£]Ò.Ž@§• ¬K»È”µ ŸmÎð í²Pv.^Ú9ïŸ( JåìÂäŸRþ At®… p.L"RùAä<Ê@p]˜Œ¤ûƒ”¿3,jƒvZæ)ggRÈ.íÌ$.ÀPæÎä£à‚ÑÎL~óåìÌ?3. íütDßsù;×Ï€àúÿìûo×™÷#_dݨûý:ºP$E‰äðNê.Y²ä8vì8v’f#8¶jûµ«8Ž“4o·[tHPŠ¢h·?ì]`-°X,ûÃbÿ´÷ýžóÃÅÉ”å1é裡3sÏ9ßç<çîµsª@m½í›Ïk+K„šÃkÿDί !äÆkEί !äMÇk/EÎ +¯K!¤ðÚQ‘W×eŠR3xí®È+ÆëE©%¼öXäUâui"„Ô^{,òÊðº(Bj¯ýyx]ˆ!µŠ×Þ‹œ +¯‹!¤¶ñÚ‡‘*ñºàBê¯=©¯K !¤NðÚ™‘—ÃëòB©+¼viä%ðº°Bê ¯½9^BH}âµo#nx]:!uŽ×NŽTÆërAy+ðÚÕ‘Cx]!o^ûk¯sBN…×N´Vñ:ß!äàµ+­1¼Î.ByÅxíVk¯³ˆBÎ +¯ýë×™C!gŽ×ŽöÃë !„ׇ××3¼NxBy#ðÚ¿>¼NiByñÚ7Ÿ9^'0!„¼Ñxí¤Ï¯•Bj¯öKàuRBH}âµwwÃë´!„·¯]>}>!„¼YÐ?B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„ò!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„BHMÐÐàõ¯h°áõ»×ŽÊösXÞ:$÷Ï(”¯_Š¼6TþŸ?áÂ…‹ÿQe€EàíAÉÿ<2¿±ñhlD!(º¯_¼ +ùßx©©YÓt‰Eà­Bùÿ Èþ–Ö¶6Ÿ¯­­µ¥Y¹bEàõë‘3¦ÿÍ­¾öŽNÐÑ^V¼~Ar¶¨ü¿ˆüoïìêé=]ª*–€zG9Éÿž¾ÁÁÁþ¾ž.åt,€ÀPßè + ©Å×ÙÓ?8< +†‡Tðµ©z€% Þ)8€¶Žžþ¡Ññ Ã0ÆÇFû{»;Û}pU%àõK’³àÂŦ–ö®¾¡Ñ‰©é™™é)c|txP;Vøº€úF×Ê ŒLLùÁ``vE`dhN@•€‹,uÔ¾ÎÞ¡±Ip.ÏQ&Æàº;ÚZš´ ðú-ÉY!!@K{wÿÈÄt`n!FæQ¦'ÇG{»Ú[›Yê ZÛ{F'ý¡…¨›1ÀÌäøð@Ogë€úF€Æ¦ÖŽžÁ±©@8O¦R©d< gŒ±¡¾._ @]SˆŒOÌd:›ÍfÒI3L÷w··4]¼ÀP¿¨€°«oxbf.Oçò‹‹ù\&i.„fŒ€V€z¦úºúG 8šÌä—–——séDdί «€º¦Ø Ôp6Ke—WWW–ó™DT€b àõ{’3BŒNæÍTni¥T&†6³Ô1ºPý€½ª  +ÀâòÊêÊR._Nõv´©~ÖõJ1èìS€¬Š–ò™d,<;9:À°Î)ÔíÝýÃ(±d&·ˆV€jhPìòú=ÉÙP +1f‚ ±D:›ÍeÓº8!ÀF:€ú¥8¤K…PRét:•ˆ-„üÆè@ŠØ¬_lsAôHP$–HêŽ`äÿäØ`o§jÒÔ/…N_WŸvóQ3‘L&ÿs³Sj@Wtõ‹m."€°ÊÿT2¡‡&†û»;ZYÔ5¥É`ÃãÓpÄL¦T`FæfY¼ X`ptrv.Oe²Yiø‘8VuMihxb&„üϪÀl*Ap¸Ÿ3êCSAT'à¢t&¢s3¶Q€zåÐL€h"“W£Ë‹ÅÐÙÆÙ€u5T Æ×V‹@÷s¨ž±×Á…xÚF ã€ì®kì“C ñTNB€l26˜ìéà0@]s¸ °`&3Ù|>—Í”Æبk +5BÕ 8¯æƒ§S©D<:òOŽörA@SêìUÝÀ јiÆ¢zEˆ1jðú=ÉÙ`[<69…çççÃs¡€, S‹éꚢ(® …‚YÿôäÄØÈPoW{[a]¸×ïIΆâŠÀn8cÚX¹?ˆìç¾u=˜öÏzA¸ÞDï ÓÄü¯k¬N TÓzSÿ´16< û·b¨[JÃãÓ³¡9D³Ó£*ö³v†:Ï-"ëÝ Tèž[ˆDÔbðQµ„öþù3ÿ땆Õ ¬„ÎÎEÔ–‘pq Ýÿ[€•×AÒéd\¯VóÀ[ +ñÔ/¶uöLÔ0`>_\ +(€/ÐÔ5º4ûºƦçbjÀÊr%@ª™ œ Xïf‚ô MÌÎdzKkëë+ù´9¯Vƒö°¸þ)´z‡'‘d~uãòÖe”€T,ì7ŠËÙ \ÇH ÐÖÙ?:Š¦×6···/¯/ç’2ˆãÀõŽL*„™¥õËÛW®lm®.f¤Ðû‚±Ô/ÅÉ ª63Kkªlo®-gpœ V÷Çz‡&ü(‹«›[ÛÛ[(¹$§¿ Xã#Æì¼™^\YßØÜÜ\_]Ê&í Xêûr€ +@nie è}¡"¡™qz€:§¸"´wpLm +»B©éàéD4Ìùàu5¼Ïš žËçÔ¶@ñè|ÐÚ–­€z¥4D- Æ“éL&“.î.Û° Ž‘°­°/`,‘L#÷ÈþùPù?ÌžÀúF¦‚¨pDí ¡öQ›ÂDÔ!jRXOgWÕ/ ‡N˜×»ÂÁý«ü/L +ìòÑÔ1‡6‡Ÿ‹&Ru8„Z6[ÈÿvVÇ4X{ƒÛ€hdR*þ÷OMŒð”°:ùîB¡ høñd6¿´´˜Ë$cjAè¸8€&î W¯¨üW{ë6 ÞBm +³²¼˜SÛBùU @M 䊰º¥X¨}'üj2ØòêúúÚŠÞfvrl¨¯›@Ó`Þ«7…Id—V7677Ö–s©X˜{ÃÖ;:ÿÈÆ°êx üÊÆå-=,mÎg„roÐzE¯V;ƒw˾É첚 ´­æ©09:È ¡uL¡ HŸ ¢NˆŒg–Ö6·¯ì\ÙÖ <«6‡e P¿¨`£ì ?>­æäW7¶®ììî äSŽAyJh½ÒPÚ@ï ›F°ueww÷ÊÖúr6±ÔXÔ-¥=Áä|ÈüʺÎÿ]¨Ãý]íì¬W¬Q`µ/p,•Óùõ*À[‚µ%êŒ$rË’ÿWw¶7V$(OP—”F‡õTð¥µËWvß}àòZ¡ ÐÏ&@ýRìT@2·²¹½{`‡ÀÛ@aP¦¨`±èŠMÀñ¡¾ÎbÀPoõù°z-ˆÔ*¸¼¶¤²¨gŠù_ +Hà–îÔëƒÓRp@}RT›ª=2‹+ë›—/_Þå€~éä(P}RÌ=4>¥N‡Ógƒ¬­­®,fS±Â¶ ­Í¬êÉ5¬wž †#ñd&—_\Z”¹`½5@R˜ЬóÔ˜ž ÍGÔù°i½ÈŒª3bGäŒXvÕ ^jÖ»‚ëü/Db¦fLüà<ú£¡@±ØÕ7XÌÿHD" óáP@ÏïåD°:£˜÷à¼5 pÔ˜ ÌÍ/DTÞ/ÈÙ 3S†:DÁA€úA2ÿ¼âÂ…‹…Y€3u.PL gýÓÈþQµA¼µ„ ¿¯²46^jjn“Y`p$V¬úƒZýú|ˆ®ÒîÀ^¿:yèì׿Ôš›[ÚÚ»TàlX-V+õBp-ÿÁ¾ÿ¨$ÿ/B÷--­­mÀ×ÑÕ; V‚Fâ©L6›Né• 3“Êý#ÿÛ™ÿõ„4û›š[‘ñŠ®îÞ5 XŸ_Ìç2I32˜QgÃõ3ÿ닆B·OÜ~gwOoŸ¦`xlÒ?MfÕfP¹tBí4©êðµ43ÿë…bþ7·ú:»û††GFF†Áˆê^0ÓùåU½\Ê\ÐKAz:Û §Ã±ÔRý7^jVQßÀðè¸199i“Ó³sQµp}cc½°tj\­öYǃxýöä´ò_ û©n¿‰©™Ù@P9333šWK×6e8¥Î‡*Ë + .°¦}‡ýsóÕá; +CáH<_Y·/çZàºB¯ü‘ijØßZˆÅ“ ‹.,,Db‰Ì¢¬Þ¥ ¶µÀìªlù?P˜ö¡öÿÉçÕ ¦i&RÙÅÕõÍ­­M9¤x8 §Õ ¥½ÔY°p4‘ÑAÿêŠÚ8•Jerˆ7õvÙd4T\ +ÊYõ¬ý—üG›o>–”y[—7×W—sÙlnåa}c}m¹¸ÔÅÀ{tþ/˜Iµû‹Zü½»³ÀeyiiYM\[]Îgq\ +Z7èR{¨íÿrjâ÷ÎÕkï½wíÝÝ+—!üUÍŠÊÿhñŒP:€zÁÚ\Ïû7Ӫɿ½ûî{7Þÿýï¡lm¢ è€ù¯"@4Ú¸´n³ ÕÚoµýc*·¼~ùÊîµëïß¼õÁ·nÞxïêÎ6Š€öÿɘ:bˆ„ÖÅS€úÕYÀ‰¬Zùuùëö‡~xûƒ[ï_×N`}e)›2 óÀ¹#h=¡ @‹¯°ö7¿²¹}õÚ›ܾs÷îÝ;Þ¾õ>ªmÝ× Z ØÌA€úÁò(ÑT~õòεë7?øðîG%àå¶7×ô±`öù_'ŽÕU€: øòî{ï«üÿø“O>þèŽö;[¶ý õ ó¿nÐA`“Zþ?ádz+›;ï½ûÎGŸ|ò#U>¸yýšÚ `ÉêлÁ1¨ì;…¢©Åõíwß¿}÷ãýàîí[7®ínm¬.ê +@V‚²P_ÏQ{€ùÃfvåòîõîèð>ò ôðT°:Ä:@…†`nM»€O´¸ùò9—2#²%<»€ëÛ ª/-ÁÅõ+ïÝüð£Upãêöúr6S§BÊ‘¬êŠ†ÂZ€Fµ¸«whlaÀÒÆJÀ»wàv6W²z`a!(+€ºBÏFþ« ç£¤u øà6ZW·ÖÔN`r$ŒžÌ@ýÐ`-S«[Z}jF J@ %àʵëï¿ýÝ+ËS ©Y >æÐ`GË_­lV«ÁÚŠ%>`}{÷Ýkïî\^Í'#j+È>½¨‘ù_Û4Î~©ýUî·*ÚÚÚ‹% µ¸º¹}eûòúRÆ”Ó +Ë@˜ÿ5ŒµóC‘?r¿­Íd5¨š>­v„U‡‚­.e ÉÑîbõÏü¯] +‹ÿK ø»¤—‚¶w€v]Ôz`Ù2Ë/æ3I½la@ÉŸù_«Ø÷~¸xáÂ…bìïëèìêîîîêDhSÕJÀèäì\4žT'C#T{Á˜ÿµJ¡ÊW?hT(ùûôR`ÐÓÝÙ€H ½S¦‡ª=¡æçf #€ìÿ©q +«ÿ/©?š››ô Jþ]=}ýý}½Ýím­-h èBc“3³ÀìŒîæyP5µûƒÞûB×Í>È¿·phxxhPíø–~Ks¡C`pdlÂ0ŒñQ9– Æ),ÿÒ!_{G{;B¾öxÿþÁá‘ѱÑÑá¡>åZ”P{Dô¨M†‡õN`ÍÜ +²Ö±¶h—OÑ­2ydl|bbBmúÔ¯]€ª´Ø G•Šf +^ëXÛ¾£Î×»¿ oQ÷#û'&§¦§d׿‚ ðÁ n"0,ä? @ S<ú±1ßÀàÐÐÐà ª~•ýÓþÙÙYÿô$*{µïŸŠš.©mâ +݃ê¯ì®yt  ÆüÝ¡Ò×À÷#û¡Ð\(8;­vþêëQ Uuk®—ÙXój€Öâ@j ÉÉ©™Ùà\xAíþš6ƬJùÑâ‚d?ó¿–)ÖÝýC£ÐýŒßÏÍÍ«ýßÕ°…Ы}Õ¨ò½À9Ê¿Ö)l''ÿŒOBøðûáðüB4O¦RªÇ%`ja@5ì{¾8fÔ@ù×6¥-eçÿ™€Úù?™ñD*Éf³™T"6òO©0 [¶+ø}Áë_@NCC±ÐÚ(4EÞCúél.¿òÙT<Öó>û{:}­Åýÿ˜÷µ5ܤ?8'¡|•ùKËË++ËKùLÒ\© ¬Àܯl“~uÿ¨Þ*®¶~^BÖ¯®®®©­?séx$\<ˆS¿ë…â¬?ÙºGç¿l§w}ÔÞ?ªÈ!`Êp÷‡:Áªý ;@*ÿMäÿÊÚ†:þssscc]ï§×þ¨=€‹C?ìú¯u¬  •÷ï˜òÕÑÐÿÚÆå­íímµÜšÎ G §€qñGÍÓP +þÕ$/Õÿ35˜[Ðõ¿Êÿí+`ûòÆz!ÿçƒzõ‡:Š}ÿµNiÒ÷¥&íýEý*û“iµë#ôeggG€U݈„å[ÀëAª¥0û»´âo`d\;ÿX"•É-.©úk[€­Mµùg"¶ {‚‡¸ú«(ü§ç|·ŽýÑu¿å•µuÿWv®èÍ¿ÿªú/ ú8ø_Ó4”þ“9¿²ÿ» +ý“¿äþ¦ŠÿT öÿWG€¨ö_q6ó¿f±–{Éj_5ýO»ÿ‰i½ÿs~IçþåË[*ü/´V³jëè´Ncx휲ßÝ:ð÷|qµ§šÒ¥fÀý‡Ô*ŸåÕu•ù*篲c úOêü×k¿õDæÿë¡Á‰jM+æþÅÂRo5ã[ŸùŠ$2‹*î× ?Íö–ÚÿWoþ ÿ/Ý?…iç9pÖÍôÒrÍ“òçå°gYê­Öyë ÿ#ªúWG~­mn«íßwwUèEú +ý¿Åî?íý9ùçÌ)_¡[ȼó…8'Iÿ#…G?-‡=ËtÞŽ.ýc†ùIfõöÏWß}÷Ý«»ªíü‡üep®”ÿÖ€×’o)VE­²¬DiþÝùckà²T8潰ɃZÙ§&ô÷ ©¾„…íŸ*ù¯,Ê! þI´þu÷#³ÿÌi°-Ðm´æ]Zpõ Ücb°R¨W*<áÃñ«Å>]=½…ùþ3³¡+ÿß»þ +ÀŽV¿êýϤL5þkè½_ÚZxèk 88ÛX8ÝBïÏR˜‚ï¾ wCqWŸ‹.éO¯÷êTk}ûƒÃ£z¾pNŽÑÇ?\¿®ÏÿØÚ”Á¿´Ì“­¿ +ùOùŸ1ÖúÜÂ’ ½B³¥ ]µ^O-Â)ÌÆr0P˜Þ¡4¯ùÊÖ>*ïõqÏÈü!•ûÆ”šï¯:ÿÔ[ÊÈù/[zì/­:ÿ3†Úú«¸÷ óÿ¬‘¹ùª…î“EW…%š¸Vù×ÓÓÝÕ)3r+öÄYã;R‚ÚåõñIÖ«ežã:÷gƒ¡ð|ùŸWç¿ì\}WE*ÿÑô˦fD&rë¯×Hƒ58_XvÙ#k4»•xÕýþÞn‡é8¶N>)Apøêÿj©ªüQ½ÄÓ0&%÷çÔ´_3‘Ϊó߶Ñ;WÔÐb?³´ + «£´õ ÀÙ"§ó5ËÂkY7Я–i*õÊj-µ@×:‘µÁödi€GÏî‘žýêé~kçŒZì០(í#÷õœo9ðQü!ú×=¿)É~ûØóÿµ ç2gŽ ÖhŽŽO¨¥Zj@Þ:ípc¿ÐÇ«Ï÷Ö‹ú5øÏظ +¢j¹r™O$’©t6¯Ç~Õ©¿— =zäÙ/c?ìûmèÅYM-zi†Z›5335i ¨Eš¨¶gÔÝ™Éq}"®ÎmìÆ÷úGÆáë§&' åóÕ?µÎ#¨“ž¡ýDR-÷Qk>dPÍü\-Mü’ìGmÓZêýñ:yêŸâál½ƒc“3è5˜™2&&TÔ¦i†ç‚³ú\vŸn•Ù·s+tóÆ÷†Õâ®@0 Ì*Ÿh?Gž'q3ƒú!ýt& ôÔÿ¥e°´˜ÏeRz˜ùè-.eßÿë¢pô½-í=C³óñÌâò²>ˆU2JÀlaÂžêŸ Ïª“ùŸûdÿ^Ÿî)ꔞ>ÿcÆtp^ï¼¢t©\VS½V×ÕøŽê≙¦öø bѹ?6†Ä~íùõU.µtôO£éE•_Ëù´¹ + +@<…Ú:«Î朞PÛ4tuê^{G‘îå5¦gÕ/š÷2£Õ¼žì¥ ê•(šªÐ1!r?\Êý>½åWkiÞ³ÿµFÀÅK­}£Óáxneãòå͵¥L<¢ë5c[¶fΦbó5AOzˆtGdýÈÈè˜îæõ‡ÌtdJ_ξP¤•??¯;L-þù°´5ô&p(Uím­Íø÷Uöù’‹ë[W®lm,çQ)9UÈ©jAÏ362\`¤˜ózWŒú³‹«›[ÛÛ[Èôœ.«kk«Kêl¯p( Í¡ D¹~½ h»¯0ÞÈž¿×.m]hzyóÊîî•ÍÕ|2ÌL£0§¦m¢Á¾¤Vi£­6eºk_õôXݼ~ÿŒ6X,Wôªåry‰TPœ-ôÏ…BÁÙbö+ñûÚ$÷)OÐ=hcÙÕË;W¯î\V§1 +ܺŠëVPRñˆòÛ~‹ÙÙb?o0Àõœú,ªx€M5±'“A‹­ÀE8ÝÍ‹3¥vB ³èû;ÕöMjï/Æ~¡ºš}ÝCFÈÌ­mï¾ûîîÖÚb*†€ÜòK`¿ªÚr94TOXúö‘õzl'*Ñ|…a>šÈ,­mnméu]ÙBŸšã¡Vx¨îå±qUgLLŒ«~É~•ûç¹ç“7Hèš ÅóëÛW¯]++±”>¢eMÍÕDkÞ4c±¨êë‹È¸^BÇôR´ X^ÛTûø!ÞW;´ÚçIíò£˜†ÔÜ€áá¡CÙ_ØðÙï((Ós(WŠ ª ÀÔŒ€µM™¯—+ôâ ˜¦îØé$J€ªBªÍ—–†îÿU>ªQwôªm€5…C +ë=(~/Ñ ½gxªPT NdœžRcaUÖõžjàNÞdÓº'OõëåÑDDVÇæ‚t%°¸ŒcYú~¢z(p^6y*õ!tvÿRÕÏì÷ +ÝÜÞ+`ûê»r"Ÿ½äWÖ/×léÑ[éçƒwGŒ§Æóô2ć( z­Ÿ +ü”_X@ã_%ª}þÔ$uú“îClSóLø¿HOp±ì^½zes%—ˆ„ÐP³ +À†lÚpEÊÀj¡§7­õWÔLîdl-{´òÔØAZwªüWmÿ€Þð[ÍñíPǾš +í>¶û=§PFTXÛÚÙÝÝÞXÎÆQkOé€ ¿º¹½ƒ’±»[œ¿…,Ok€ ÚùÙTaøH©aãE{_5ù&ô$?=ЧN…ÒÉK‘¿×)ðvÓ`+¹ÕËWv®l­/¥M„íG +صönI%eb—ÚÍqQõ¨9ÓjÎwq—g5È;591.M>½Ñ¯V½PÜê™Ùï1 ¥*ÀÌ®¨CY7WóÒ +T ¨ À†Uvw¶e¯îÕûº ȪN"5‰í5í^MÁßÑô(ŽôéˆßÚ盡ßU&C±Ìòúå­ËëË9Ä€é©Ã1À®,á½R˜Â‹_MñS{úæsj/'ÕO¬¦ªÙ߀®ù' }´ýzº:Û}ÖPµÖ˜ÙÿFPœ0lÕ¹ÌÐw&A#`ÒÐ šT};…%üzýî겚ÂDÔÕNÆeJ/ü½š„'˜,töö¨s?Ût‡O!ä«~¿r4H3PÍYHd—V×½ªë6ŒI5ć–ýÊza÷N½}ç²Z¾U³þÂ2Ñ;Ž€_9+S3Ë­q^k¤uþ›‡_÷ÀøÌ\,•[’‘ßpPû“Óz4Híß«†uÕ€ží“Ô!>½¬õ@s5>òxh` _/%R~{ûš +½ýœåù&¢ @S[WÿèTpAMâͪ~=åÏ 5-< æeôæýyÔöhágÔ +¾pHý32 <¨r—ßÓÝÝ­×–u–†ù9Ô÷#“‚;z‡&f ö„š¬ý¹1 ÙÃ7¡—s¨ þªk_9ü _— ]áO#`”Ñ}Uã«•¥jqi[[i —M¾7—â²€þÃ,. Pù?¦ŽoC ¨©þ…!À}×\pVUø£…lLUùznOg»>æ[¯.·õö±É÷SXÔÑ38jL«3›‚2[kTÏûÒû9 ªA5íCã/Lè@}/3u•¯[{r¼§îñ³÷ö1ûßXäܶ_g¯ZØw®ýù¨:µ[MúTK<'§§õíIC@kodHÕ÷…EäÝ…*¿ï7õ»@ñ×Å“;{úõj~µ8xH-—C|õÞÊÉZóAõ‘×.Ë +U~1à»ÀÞ¾Z¢pt£Ú¼]mã3¨wè-îQ˜ù¯ÛuEÔÉÝ]ª‰§7’)Pªòϳ·¯¶³ûÔñ zCíÐ; Á¼Þà©[ëÞY¢C{:Ï-ʪ|æ~íPÜ"ª¹¥MöRž½M¢ùV½Lo„[mÅ €Ô|qøm› +ZU>3¾¶(n§Vz·qÍÍ¥âZì7ššŠ;^¼`ß,€U~íRÜã϶1ä¥ÆÆÒ†—ý½Q¶’¼`;Ä—U~cíjÛÖó%Ï*¿(íî\æÔÏþÛ¹rÍ{ýâäUQÚö«Ì©7ú _ÏTÌåÊxýªä aþB!„B!„B!„B!„B!„B!„B!„B!„B!¤fñû·\¾÷âžï£Ÿ}7µ‡¿ßº÷Õ‹ýç¾ë¾¯}Ñõ]Ó¼½ÿÓFÞgÑíçûû<ø˜÷ÅÔßîýd÷àÁþOåï¼øâùwÅ¿Gן«‡>ZÆsëÏðϦÓÿûè;_ÆŒGbÉLÒXˆ›‰HÊLÆŸø2©x$ϘÆB"ž‰¤ãÉ”‘Îá_s™¸±Tÿ˜L¦TÖŒÄr‰nåÌH6Ë÷}Ét6’ʦsÆ‚:(™I¥D2Éš±>—ÁÙlÒHÄ’0›Á§©t$‡‹û¾x:I&30OÆa.›1ñD$–Éâ=L3‹/ͤd"ûxL6’Æ¿ãÁT2 «ê'$r‘˜™2tF½O*c,är‘d,‘5*üÌû¾ßGaߢÝüâàÇ<|ÿÞ‹GH¯¸Ué¼~ðâñ½§ï}…ÁÝEŸ/gCÆGw}Ú®ü{*y/?¾ÿâñ÷ž‡„öïR‘ÒÈL†T^‚MÿÞ"þïÓyñÀ—.U&Kyíß‹ÊíÂßmùíßK”帼”~¹îß«˜Ë¸]}>û÷ªÏiÿ^Õyíß«:·ý{*9Â*Ñæ9Þ©b®r¨b.ãÖó{… _ß5Ö¿~ñ…!‚}ü÷K¯Áõ_|¾¿·¾›Û»ñùWûÏ¿Ù°÷îþw{ò¡¯¤4¼d¹1aõà‹#•Èê‚3÷5Šn—qqã°ÒcÆU\üÜúÖ0cÆ{Æþ&f<Àíná‡>3‘‹G2ñr/C§Í +‰™Èf# Ӵߎ¤õÉ\É›>tO¥¹úÜ}ß¡»•ýúiËbÜ,Z,}wñžz:—õÌ¡O&c±#í÷Jßm»[zË’ÅÒ¯9ú»ïû~ìåö¿Ñë_¼¸µÿ‹çöˆ2#±D*.i®.ÓF6¡”@ ̤ÕïÎårFôÖþ½§ïÝCöþÏÁÍõÝ+Ïï=x¼ðâö¿xþù§ÐÑ‚ƒ÷ùàÅwO÷÷JoqÈ‹˜Ê‹l|î‹r}ã|YðÃ8‹ÆÃÂwi3Tø€Y( Å?7âÙ ËÅPåM,bfi)HÓ´ý&n¥#ñL*)Y£Ž‹;|/I'át±(ÝU ÙÛ ÆG¦™8œ3…{ºTàá\2wø“x8 ge7h»gûjÛ]ë%KK?æ课_–¶æ1i{²Ò S%9•2sú³ ppÉT*wèŠåzã'(š:X>áðêß·,¾ö•þ ž^ÛŸîçårcÿáãƒB$‰ð™+¾èåýoßß¿ueÃøèºïGÖã&•¨ +Ò™L$–N'¿1 'TÖ¨*ûQõoòñŸFB}6£Kâø€Ïï×濫Ý<þ-“Œû>Úmù„B!„B!„B!„B!„œ—.]êêêšœœ\[[{ñâÅßþíß¾÷Þ{sssCCC^¿!„B!„B!„B!„B©O¼ÞÌB!„·ä„B!„xˆû);Nǹè½Ý+í¡ÎýØüâà›ýç_áóÆöã§ø„qkÿ«¯Ÿ¾(ÛóÝvGÙi/úDŒtÚ4‹ûüÇRúx}ZE,¦Ï%(Þ¿†û×_×q$Q·mõÕßÍl:™J¦Sfƈî¼0‚²ìï?°vÅOU¶|ÿƒõ÷žáÝöž=ýúáヽ÷Ÿ~u×–®©²}õw¾zqïàþþžÊ»½ÝË{ïÝ{Vaëý­ŸîßÿZ}Ñá*™OéÞùIÛÞùY÷½ó“e{çgÅ?Ý;?33Ü;ŸB!„B!„B!„B!„œÖÄ«†††K—.577Ÿ;w×ïØÖFÔò{/\¸€;000<<ÜÕÕ%?ÜëW;s¦¦¦’Éäêêª×/òúˆF£Ožn'"é„™u¾EÌœ™,ÞGbñdÒåþ!3Ùl$•JùRÛíÂ;>uxwõù«Qyáœf–HÆ2©tZF*}ëËÄs‘¸©‹v&‹Äʨ÷ty7ãÛÍk¶›©l2’¡€_³=^ñ¦íñßGaߢ…ùñã‡÷ï½x„׉Qõ3Ö^<¾÷ôñ½¯¤,/úÊ=ÇÉp¦ì¿úoHWù _ëÿŤpÞ@á̤â1d-Êd*Nê‹X<›Îá"‹ÜϪ ÓLd´[,¿€GL¥ðDVåSÂŒ$S)å ÓÙTÄLê3‹7Qˆ2éH×êf.’K™qu3Ç›ÉÃ7‹ÅMåb"Qö93ɘºÚ,Ún–¾;ž‰Äcê^é+Ü*½áQå +éd¿:RØìÉ ª + Â[«ã!­3ñCðJÒ>†4Kg¥&JO™©C¿?aÀ[d%TÂ(hYº™ÎDÙTÂþ+l,å‘ͤífé»K©j{ÉŠ7­·tJþÊ!ÂBBes*—°9÷õû÷¿þÉ­/^ÜSŸ=”g¡íJyXéç;žñù’¯P^lÄIãuUfÌ\*…ÛL%søKºø®éX?Áv3‰*$7RIC\å^ÙœOL%b‘D,–°ÝºïK™¹H*“IÛ?‡!+©Q4VºSüNõ¤u)44lÆT:'QÙ¾´x –^Îú\éXÖŽþÒû¨DC1T¸(R}±B*™úH+«†ô)ãq3‹`+—ˆC¤™„®aÌH&¨tóšífV=“«Pz¼âMÛ㟿„¹WŠI¸±t/b¢Æ‹¤‘íxgE(µøý¶»×lwQ›#ݳJa%oÚŸ}õ¢yæõb¼êzѪUaJ¥•{HªÜM£erªZƒŒ¤’YûÍk¾í‚??Tøî2„ƒ‹k±d$i­—nªÚ.ÉÅ(ݹ ²$—•Òeâf.~øf¥ï·}2÷š>l±xËöÍ)å®uào{ÇŠ7Kïxòš±Rºù÷*¾ù¡Ú1žµ²¡*‚Kjy–,%²¨ñÑl:Q” }2’É%ýâd w6›¶%—j'Açû­J_mû\)›löJ7K_\JUûO¬t³ôŠ¯·j¬”ò¨+%À+¯ å T9–{uT~‘\.Yx D ºÚ+ÝD’gãx·TZ×7ªÈeÍH*n¦t=¢a骠Ú)D–>‡ªÊ”_jY+Ý*~«zÔº‰R’È&²†ÍZRå="VÛ·oáÑÒÛYŸ+ýËÚÑßZ¬øÌ´‰P%¦šò |<K¥‘¶»IÄbfJD<¦¢2bÝ¤Ë f3YUÛª*»xë¾ÏŒ£&2™œís¨+"©lÊnͺe}-µnÆU4g¦ð¹’5\šyèk­{x¸ô~¥O–~GÉb…_|ß·ñ¹UD6©bôáÁªƒÆÃç÷<Þ?xa¤Í­ Éåχ¾x®2‘Žë; Ößlo*ß…<Øø dˆoÙÐAG6Wíwh6–Õí÷d.™È)3ÙÒIÕ£ô óÕ2á œ’™Ê$·ý#TPR…"¶»ÉT¯Ëf¡H<­»‰L$–†%y-åJ÷TÆ©#ëñýöOÆcifÕ.Y,ݳ¾[=mݧâ‘DQ›Í¢™‰‰g²}·uO—Þ²ôÉÒ¯)Y¬ð»ï#=­j÷UûG +¤¹´únDEI$ûß 3fd3GÎ}¯øYõo…ÏþsüÉï ÍO~'„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„zãBꯕtVx®„¼¼VÒYáuº¾444xý +õ×J:+¼N×:¡AsNs^sQÓ¨ijj’ ¹)˃^¿~=൒Π+¯Óµ8V} EÓ¦i×tiz5r!7åòayPŒPŧÁk%^§ë‡ˆQd(éUÔÖŒi&5~MH³ ‰Çãr!7åòayPŒˆÁŠZ‹~E¹Ôl^+é¬ð:]½ÇE’"F‘¡P¤'¢K§ÓKKKkkkÛÛÛïjnjîh>Õ|®yüø±\ÈMù€|X„Ø5Ø9‹EÂ"^‘-ë„×J:+¼NWxU’1Š ¡ÁgÏž}ûí·÷w÷ý÷ßÿæ7¿ùÃþðOÿôOùË_þú׿þ×ýþÄ5îà>þŸÁ'ñy<%úåŠf)Ø*ðZIg…×éê1¯P­Nµ§ˆW.\jRªò”x­¤³Âët}³plu-P‘³\TÝ¥$Åk%^§ëÍ+éÅ-»ô±G÷•àµ’Î +¯Óµæ9¡Š©¾³Æk%^§kÝR¦\*ñ¬ñZIg…×éJÈ«Ák%B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„ÚãB!„B!„B!„B!„B!„BycñzÆõë…©V Lµj`ªUS­˜jÕÀT«¦Z50Õª©V Lµj`ªUS­˜jÕðªRB!„B!„B!„B!„B!„âŽß¿uðàò½÷|íøü뻩=üýÖ½¯^ì?÷]÷}èóïEן¿¸üøþ‹Ç_Ü{þ‘Ç­àúƒ/>ß7äcÿï~Ȉ~ðâùデFp}×Øüâà›ýç_áóÆöã§ø„qkÿ«¯Ÿ¾óxvÿ÷Å Óˆéÿ}ôOÿç/mCÆGwñÏf<“Œ$ÌDÊXHÄÌH6e¦Ÿ¨û)ÓŒ$SiÓvÿî_¯ü–¸õü^ñ…wõ¯_|Qé•õKò“öÖws{7>ÿjÿù7ûöÞÝÿnO>ô•¼{´üÊÿnfÓÉT223Ft÷à…|€”ý`ÿA¨ø5©Ê–‚ï°þàÞ3¼ÛÞ³§_?||°÷þÓ¯îÚÒ5:ü¢»_½¸wpOåÝÞîå½÷î= ý-[?Ý¿ÿµú¢ÃزÂÄÇUñLB'ÿ×Væ˜*st‘@6îçårc/W(È/|æŠ/zyÿ›Ç÷÷o]Ù0>ºîû‘õ¸O$#éD.m,ÄãÙH<—Kc$k‰dJeú£c?¬þ­ø@ñ¿Y#¡>ŸÑ&ñ?|Èç÷ë7S?.o$â™X:áûh·Åë©ñ„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„R ïR§x­­³Âët%ä¬ðZ[g…×éJÈYᵶΠ+¯Ó•³Âkm^§+!g…×Ú:+¼NWBÎ +¯µuVx®„œ^kë¬ð:]듆—ÇëW®C¼ÖÖYáuº¾zÜ¥qîç5Ö… òù“Ðé[ÊLÙ9¡AyüÂ… ò§\¸¿ðÉ¿Åë¬{Åx­­³â,Òê”åÙ*v.Úh<Â%M6š5-6Zm´i|ÇÏàÃxñ]xK)Õý w•YËOÆO“ß‚—‘koo·.,ÊÞ\^Þž’8öä²'ãÑD¶gÁËþO<†×Ú:+ª“áÑ"Z&®25Y +² ÇÒ‹¶ŽŽŽNMWWW·¦GÓk£OӯРÚÒ kF4£š1͸fBch&5SE¦‹È_ñOø >Œgaöñx=¼6~H™xOîmŽ-ùö%‘bH%$ ~;^¿ ?ÄzÿéJX?A~…ü ‰ "‰# %‰& hORIdIpI|{vHIfáõ$ûvïa9 ËQØýC™C8êœôNÍV©HÒ*<§Ô ¥>%7Q™èK”%š5¡øÍÌÌøýþÙÙÙ@  C¡P8žŸŸ_XXˆD"ÑhÔ4Íx<žH$’Éd*•Êd2Ùl6ŸÏ/iVVVVWW×ÖÖ666677·¶¶¶··w4WÀ?á3ø$Á³0³ø.¼Þ ïŒ_„ŸiWîÉãcë/ëYQ+R‰†TBjà·ãÇââ•ðböŸ#o~­HÙϱ~ÁBjàq¤Œ$Ò +)³ø™HC¤$Ò_„´Å¯F:#µ‘æøv¤?yA¾ˆs°œ›xñâ,á‹ä-¥¿K‚‹œßfÍâçC§H)0H@K}o¦ô¬²zýúõ7nܼyóÖ­[·oß¾sçÎÝ»w?þøãO>ùäÓO?ýì³Ïööö>×ìïï?|øðÑ£GOžÒ¿i‚‘>ø™0‚CºÁ Ò)i©þM»È©$m–£úõZ[g…K=[VÉÖM k—¹(]²ŠàóR·â+¤àáO|‹È߈o·d‹¤8ª>—öõIÚvÁ"ðëð[ðCððñVóy+ÜÁ¿âŸð£ì?G~Q­°ŠÚÖj›8Uµ^kë¬pl ‘ðkkÏŠØ_s«V®¥¼Ië_ïpû(±¢Y”^XÆ¿â‡Øwloر=?ÒׄdÁ/Å+á뤆…ˆðžø±Ö+áBRC¹xsËé½æ–¬%=¶g_'Ôì+äÍìU–²$¥Èî½-pÿ„2  ÆxQ¿ $£pZUí±ßr’>[©d¡q6 šƒ‚pïv4Ť9#´ý»ê¾gدµuV¼æd¬uPP!R„‚¢n‚Š¥U{µ;Ú"OY•¬„¾¨j!Xýž¦ñZ[g…×éZ{ Æ d0Ñ&‚Cé)k¸Œ »+WúŠ!Rø„”_„G(Ø—Åkm^§kMYI;Ú{¢ŽUë±3î£îF  “Dàp^ÿèÚÃkm±4ý¤Ç®Y«–tR«ô¹¹ÏM’§¤1‡¥Û¶££ãm äÕb×,j=鬳jvŒ»ÌtQ®Ly’(é ÆV„¼,eš•!D°===–fUëIæ‹fád;;;‹;¬g yYÊbc¨Ê’ÑRèN¤-¶¡ç£j=áL~ÜMXžššš™™A«™±1!U`׬ÈSfãOͬ»Z­ù.ÊÅŸø,ŽŽÊôf\Ûû ¼N BjK2çÎk,NàG…(qÙ*¹Šj•‰^rá®\«G«‚Åçx[U­×)AHm z±¦¡âƒl¥†µÆwÊfc–©ÕŽ“r­jZ¦&Zó¬dv5KÈÉ)ûƒreõ“5,+•¬»Zíór”ÛVD¬Á²¬XalLÈKñάY¾2«ß®ÙŠj•Ue3êË”ë³m‹!c¾°_6Êë” ¤68ªYkr¾hÖZkì¤VY£Tq-Œ]¹¢YkÝÁÑP^§!µÁQÍÚ¶2®*P÷….«Ø*®ã>:ÍØë” ¤68ªY©jíšµ/öwYÿë¢\X°4‹õ85KHu¸k*“JöØÕúÇ*W|E³ö®'j–—ÂI³P–¬RÍ»·†ûž¢Y4i©YBN‰»feò*ÊcwÂqß­$<–1YÄÆÔ,!ÕQQ³²áŒì,!•ì±ûV¹ï³$U­Ì­¢f 9 .š•(h;äË.s.ʵv³4Ë>(Bªã¨`­Ýd½ÂÚ“ì y¬raGº¡.]ºÄ±Bª¦¢fíÆ»ƒ«û®¤£IKÍrJÜ5 •!¬EEyì~Ëîû [›*K×15KHÕ8iV:e{pT”ÇîŽî¾¸TµÒ %Ã=Ô,!ÕQQ³2Ð#PКýX§³ Ü÷ð‡iÒÊpOÅ!Z¯S‚Úà¨fepVz¬ƒ&=yäØÓ7`MZ«ë˜š%¤:*jÖê4†Ê$0>öœ ÷ss$/NÊ…ØA“vjjjdd„š%¤jŽjj‚¦ ,è *CX‹ŠÒE­`iiI.œ” °ƒ&íôôôèèh___SS5KH8iÊ‚¾ 2„µ¨(]ÔjÇI¹°;hÒÎÌÌŒQ³„T“f¡,è *CX‹ŠÒ]­+++îÊ…ØA“Öï÷÷÷÷C³eG x„ÔNš…² /¨ a-*Jµ‚ÕÕU¹pR.,Àš´³³³Ô,!UsT³PbW( ú‚ÊÖ¢¢tQ+X[[“ 'åÂì I Ãhnn¦f ©'ÍBYÐT†°¥‹ZÁÆƆ\8)`MÚ`0899IÍR5eš…Ž YÄ®Pô•!¬µjØŠj›››rá¤\X€4iC¡ÐÔÔÔàà`KK 5KH8iÊ‚¾ 2„µîj[[[rá¢\ØA“6OOOS³„TÍQÍ"jEì +eA_P™Æ.jÛÛÛrá¤\ ѤŸŸŸ™™Í–³åuJR8iÊ‚¾ 2„µ¨(]Ô +vvväÂI¹°;hÒ.,,øý~j–ª9ªY¨ š‚² /¨L*Yµ‚«W¯Ê…“r¥ªE“6‰ÌÎÎ µ¶¶R³„T“f¡,è *ƒÖPQº¨ÕŽ“raAš´Ñh4P³„TM™f¡#Ñ,”}AekQQº«õÚµkîÊ…ØA“Ö4Í`08<OÍrŽjjBìŠú‚ʤ’uQ+øøãåÂI¹RÕ¢I‹²išãããíííeÇYz„Ô.š•(h ¥‹ZÁ'Ÿ|"NÊ…iÒR³„œ’ŠšEìŠú‚ÊÖ¢¢tQ+øôÓOåÂI¹°;hÒ®¬¬Äãñ‰‰ Ѭ}7¯S‚ÚÀE³ÐT†°¥‹ZÁgŸ}&NÊ…ØA“vuu•š%ä4”iVŸEìŠú‚ÊÖ¢¢tQ+ØÛÛ“ 'å‚„Çkkk‰DÂ0Œ£GÐz„Ô.š…¾ 2„µ¨(]Ô +>ÿüs¹pR.,À¬mllP³„œ»`¡ Ñ,bWD°ÒiŒ°¥‹Zí8)`MÚÍÍÍd2999yôZ¯S‚ÚÀE³ÐT†°¥»Z÷÷÷Ý• °ƒ&íÖÖ5KÈi(Ó,t„¨±+"Xè *CX‹ŠÒE­àáÇrá¤\X€4i···S©ÔÔÔ5KHu¸hú‚ÊÖ¢¢tQ+xôè‘\8)`MÚj–ÓpT³PbWD°ÐT†°¥‹ZÁ“'OäÂI¹°;hÒ¢œÉd¦§§»ººÊŽ³ô:%© Ü5 •!¬µjØŠjOŸ>• 'åÂì IKÍrJ*j±+"Xè *CXë®Vppp .Ê…4i¯]»–Ífgffº»»¡Yû¶ä^§!µ»f¡2 Œ]Ô +ž={&NÊ•ðMZj–SR¦YèQ+bWD°Ð,T†°¥‹ZÁ—_~)NÊ…ØA“öúõëù|Þï÷÷ôô”géuJR¸k*“JÖE­àÅ‹rá¤\©jѤ¥f 9%vÍBAÐ,¢VÄ®ˆ`ÇBeÐ*Jµ‚o¾ùF.œ” Ò¤½qãÆÒÒÒììloo/5KH¸k*CX‹ŠÒE­àÛo¿• 'åÂì IKÍrJÊ4 !jEìŠq,T†°¥‹ZÁwß}'NÊ…ØA“öæÍ›Ðl €f›››íÛ’{„Ôîš…ÊÖ¢¢tQ+øÙÏ~&NÊ… ©YBNÉQÍBMˆ]¡,ıPÂZT”.j?ÿùÏåÂI¹°;°vëÖ­•••`0Ø××Wvœ¥×)AHmp¬fÖ¢¢tQ+øÅ/~!NÊ…ØA“–š%ä”Ø5 !^…f»B³ˆc¡2„µ¨(]Ô +~ùË_Ê…“ravФ½}ûöêêj(êïï§f ©‚c5‹°¥‹ZÁ?üÃ?È…“rav¨YBNO™f¡#D­ˆ]Á"Ž…ÊÖ¢¢tQ+øþûïåÂI¹°;=ºsçÎÚÚZ8hmm½pႵLÀë” ¤68V³kQQº¨üðÃrá¤\X€j–ÓsT³ˆZ»"‚E •!¬EEé¢Vð«_ýJ.œ” °óäÉ“»wïnllÌÏÏR³„TÁ±šEX‹ŠÒE­à׿þµ\8)`‡š%äôØ5 AGˆZ»"‚E •!¬EEé¢Vð›ßüF.œ” °óôéÓ?þxsssaaš•c£©YB^Šc5‹°¥‹ZÁoû[¹pR.,À5KÈé± íˆf¡&Ä®ˆ`ÇBekQQº¨üîw¿“ 'åÂì|òÉ'[[[‘HdhhÈçóÙÿð:%© N¢YT”.j¿ÿýïåÂI¹°€ð˜š%äô”iñ*4‹Ø,âX¨ ZCEé¢Vð‡?üA.œ” Ÿ={ö駟nooG£Ñááaj–*8‰fQQº¨üã?þ£\8)¨YB^ vÍBAТVÄ®ˆ`ÇBeÐ*Jµ‚?þñrá¤\X@“öË/¿üì³ÏvvvLÓioooll´–½{„Ô'Ñ,*Jµ‚?ýéOrá¤\X f y%Õ,¢VÄ®ˆ`ÇBeÐ*Jµ‚?ÿùÏrá¤\Xøþûï_¼x±··wõêÕx<>::JÍR'Ô¬‹ZÁ?ÿó?Ë…“rQÕR³„¼ìš…‚ #D­ˆ]Á"Ž…Ê 5(ÎE­vœ”‹ªö‡~øæ›o>ÿüsh6‘HŒÉ±ÑÔ,!/Å 5ë®Ö¿üå/îÊ¥f yUXš…vD³ˆZ»BYˆc¡2h ŠsQ+ø—ù¹pR.Âã_ýêWß~û-4{íÚµd29>>ÞÙÙyéÒ%kÙ»×)AHmprÍ:©üë¿þ«\TT.5KÈ+¤L³ˆWµ"v…f¡/¨ Zƒâì‚-S+ø·û7¹¨¨\<‹&í¯ýëï¾ûnÿúõë©TjbbÂÒ¬L«ð:%© ^V³GÕ +þú׿ÊE™r©YB^9vÍBAТVÄ®ˆ`¡Y¨ Zƒâì‚-S+ø÷ÿw¹(S®%Û?þñ¿ùÍo~ö³Ÿ=|øðÆ™LÆ0Œ®®®¦¦&j–—¢:ÍÚÕ +þã?þC.,åR³„œ–f¡Ñ,¢VÄ®ˆ`ÇBeÐwT°–ZÁþçÊ…¥Ü2ÙþéOúíoûóŸÿüÑ£G7oÞÌf³“““ÝÝÝЬµìÝë” ¤68fE­à¿ÿû¿åBdKÍrvX* Y(ñ*¢VÄ®ˆ`ÇBeÐç$Øÿ>Œ“lÿüç?ÿîw¿ûÅ/~ñäÉ“[·nåóù©©©žžžææfj–—â•höþç¨YB^ešE¼Š¨±+"XıP´Ź öÿ÷Ýe‹ðø÷¿ÿý/ù˧OŸÞ¾}{iiizzº···¥¥…š%ä¥`=KHmÁö,!µû ©-8>KHmÁyP„ÔœoLHmÁu=„Ô\?KHmQ¦YîSAÈÎÉ5Ëý y°4Ë} © N¨YîoLÈ‚]³ÿüó§OŸ"¬ýFã¢\'µÊƒ°;ðˆ·u#öFNÍRÇjöÉ“'k_h\”ë¤Vy`Ö¨YBNÉQÍöôôøýþ|>ýúõ½½½G!¬ýRã¢\'µÊƒ°;Ð,âmxÄÞð ˆÃ©YB^wÍ~öÙgh„"¬}¦qQ®“ZåAX€xj–SR¦ÙK—.uwwÏÌÌd³Ùk×®}úé§h„"¬=и(×I­ò ,À<âmh±74 ÿ`-x§f 9!îšýä“OÐ"¬}ªqQ®“ZåA Œá¨YBN‰]³ ÐlWW×ôôt&“¹zõêÇ ­!¬}¢qQ®“ZåAX€xÄÛˆº{#§f ©wÍÞ½{P„µ4.ÊuR«< °@ÍrJÊ4ÛØØØÙÙ955•J¥ Ù;wî *U-pQ®“ZåAX€xÄÛˆº{#‡ f yYÜ5{ûöm4B¡¸}‹rÔ*Jc€š%ä”TÔìääd2™ÜÙÙ¹uë¡k?׸(×E­`~Q7boDàЬµ@€š%䄸köæÍ›h„JxlQQ¹Nj`và¨YBNÉQÍvtt†‘H$¶··oܸF(ÂÚ=‹rÔ*ÂìÀÀ êFì Ï€ï¢f yY\4»µµuýúu4BÖ~¦qQ®“ZåAX€xøj–ÓP¦Ù‹/¶··OLLÄãñÍÍÍk×®¡Š°öS‹rÔ*ÂìÀÀ êFìMÍR.šÝØØ@óP„µŸhÜ•[Q­ò ,À<ü5KÈixç0¢ÙññqÓ4×ÖÖ Y4BÖ~¬qQ®“ZåAX€Xƒ@ÔØ[Œ¦f yY\4»ººº³³ƒF(ÂÚ»å:©U„Øfá¨YBNC™f/\¸àóùÆÆÆ¢ÑèÊÊÊöö6¡kïh\”ë¤Vy`~Q7boxûÁÔ,!'ÄE³KKK[[[h„"¬½­qQ®“ZåAX€xøj–ÓPQ³£££‘HšÝÜÜD@‹°ö–ÆE¹Nj•%0†€MD݈½E³ö¯ö:%© \4›Ïç¥ëaíM‹rÔ*ÂìÀP³„œ’£šmkkYXXÈf³kkkh„"¬½¡qQ®“ZåAX€xøD݈½áð]Ô,!/‹‹f3™Ìêê*¡RÕå:©U„Ø€ f 9 eš=þ|kkëðððüü|*•ZYYA#Š»¦qQ®“ZåAiÌÂÀ êFìMÍR.šM&“Ò …°öªÆE¹.j°;ðð¨Á©YBª¦¢f‡††Âáp"‘€fÑ•ðØ¢¢rÔ*ÀìÀü¼bo90šš%äeqÒl(ŠÇãù|P„µ;å:©U„Øfáà ¨YBªæ¨f[ZZƒÁ išÙlP„µÛå:©U„Ø€€7@ì Ï`ßœš%ä„8i6D£ÑL&ƒF(ÂÚ-‹rÔ*ÂìÀÀÀP³„TM™fÏ;'šD"©T +-ÂÚM»r+ªU”À~Þ±75KHu8iÖï÷/,,H×1ÂÚ ‹rÔ*ÂìÀÀÀP³„TÍQÍ677 ÌÌÌÌÏÏ' 4BÖ®i\”ë¤Vy`~Þ>¡ì Kj–â¤Ùééép8ÇÑ•ª¸(×I­ò ,À<ü¼5KHÕÕlSSSÿÔÔT(2MP(nEã¢\'µÊƒÒ˜…€€7ÍÚ7$§f 9!Nšœœ ƒÑhP„µK庨ÀìÀÀÀP³„TM™f Ù¾¾>Ã0@$A#TÂc‹ŠÊuR« °?o€Ø85KH8ivbbbvvvaaP„µy‹rÔ*ÂìÀÀÀP³„TÍQÍ^ºt©··w||Üï÷ÏÏÏ£Š°6«qQ®“ZåAX€xøxÄÞeYR³„œ'ÍŽÍÌÌ„Ãa4BÖf4.ÊuR«< °?o@ÍR5Nšžž…Bh„"¬MiÜ•[Q­ò ,À<ü¼bohÖ¾5KÈ qÒìÈÈÈÔÔT0D#amRã¢\'µÊƒ°;ðððÔ,!UsT³===ÃÃÓ““@P„µ ‹rÔ*ÂìÀÀÀÀ'”dIÍrBœ4;44dÆìì,¡kãå:©U„Ø€€7 f ©šŠšíî˜ðûýh„"¬55.ÊuR«< °?oŸ@ÍR5ÛÕÕÍŽÏÌÌ Š°6ªqQ®“ZåAX€xøX†O f ©ŽwŽÍvvv ŒMOO£Š°6¢qQ®“ZåAX€xøh>¡ì€-j–â¤ÙþþþÑÑÑ©©)4BÖ.h\”ë¤Vy`~Þàèá³Ô,!'ä¨f/^¼ØÑÑÑ××722299‰F(ÂÚy‹rÔ*ÂìÀÀÀP³„TMEͶ··÷öö†F(ÂÚ°ÆE¹Nj•avààà Ž>KÍrB\4;44411F(ÂÚÆE¹Nj•avàd ö¡Ù²ïõ:%© *jÖçóõôôH×1¡kƒå:©U„Ø€ f 9 G5+ÇYÊíØØ¡kå:©U„Ø‘NcxØ/;È’š%ä„TÔl[[[WW×ÀÀÀèè(¡kg5.ÊuR«< ° ƒ³Ô,!USQ³­­­2Ü322‚F(ÂZ¿ÆE¹Nj•avààà à¨YBªÃE³}}}ÃÃÃh„"¬Ñ¸(×I­ò ,À<€ ôÀ>5KHuTÔlKKKGG‡t£Š°vZã¢\'µÊƒ°;ðð¢Ù²¶¨YBNˆ“fe¸Gº¡ÖNi\”ë¤Vy`G:á `Ÿš%¤:ŽjöüùóÍÍÍЬ ÷ Š°vRã¢\'µÊƒ°;°&=Ô,!USQ³MMM2Ü300€F(ÂZCã¢\'µÊƒ°;2ÐÍÂ'P³„T‡‹f»ººúûûÑEX;¡qQ®“ZåAX€xè}j–ꨨÙK—.µµµI×1¡kÇ5.ÊuR«< °?@Írœ4+Ã=Ò …°vLã¢\'µÊƒK§1¼ì—°EÍrB*j¶±±š•áh aí¨ÆE¹Nj•aA: d ‡š%¤jŽjöܹsЬ ÷ôôô Š°vDã¢\'µÊƒ°;2ÐÍÂ>5KHu¸k¶»»P©j‹rÔ*ÂìH§1,Ã~Ù!Ô,!'¤¢f/^¼ØÜÜ,]Çh„BqCå:©U”Æ,<5KÈ)9ªÙ††hV†{¤ +aí ÆE¹.jK§1¼ìS³„TGEÍ^¸pš•áhMÂc‹ŠÊuR« Ò%=ÐlÙÆ2Ô,!'ÄI³2ÜÓÑÑF(ÂÚ‹rÔ*ÂìÈ@ ÎR³„T‡»f¥JªZà¢\'µÊƒ°;Òi ËÔ,!USQ³2D+]Çh„Bq}å:©U”Æ,¬Q³„œ’£š}§8­š•n(„µ½wå:©H`luÃ>5KHu¸hV†{ 5 -**×I­,H”¥Ù£_êuJRTÔ¬ ÑJ×1¡k{4.ÊuR«< °#=Ô,!§Á]³Ò %U-pQ®“ZåA Œ¥Ó¸âà,5KÈ qÒ¬½ëŠëÒ¸(×I­ò hÖ¨YBNIEÍZÃ=Ò …°¶Sã®\'µ Œ­Ncj–ªqѬÕu,U­EEå:©U€é€rè¡f 9!NšµºŽÑ…â:4.ÊuR«<(Yé4¦f 9 îš•n(©jÝ•ë¢V©daÇê4¦f ©ÍZ]Ç–f]”ë¤V»faš%ä”TÔì;Åáé†BXëÓ¸+×I­@cé4¦f 9 .šµºŽ¥ªµ¨¨\'µ +° PN=Ô,!'Ä]³Ò ŵi\”ë¤VyP³.=Ô,!'ÄI³ÖpZ©jU®“Z¥’•Æ,5KÈ)qѬÕuliÖE¹Nj=ªÙŠYj–â®Yé†BXÛ¢qW®“ZÆ.ÆÔ,!'ä$š•ªÖ¢¢rÔ*À‚t@Q³„œÍZÝPP\³ÆE¹Nj•%0¦f 9=Nš}ÇÖu,Uí±ÊuR«T²V5KÈix)ͺ(×I­G5ëôu^§!µ‹f­&­ÈöXå:©U ;Ô,!§ç¥4ë¢\'µÚ5ëÒ˜¥f 9!ÇjVÂcÁE¹.j`‡š%äô¸kVš´RÕ«\'µZ15KÈé©B³•ë¤V»f]:©YBNˆ‹fß±…ÇmTÔoEZH%ëÒEÍrBŽÕ,„&²µpÑo™N-D°.•,5KÈ q׬]¶e\pæè‡E°Ô,!§ç$šÙ–qT˜v…–q¬`©YBNȱšµ+× K•Nœä+¼N BjƒjöXEŸÞˆ×)AHmpz­½*¼N Bj¯•ZÂë” ¤6ðZ©%¼N Bj¯•ZÂë” ¤6ðZ©%¼N B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!gÈ;„B!„B!„B!„B!„B!„r +¼žíL»êaÚUÓ®z˜vÕô«¦]õüÿöî¶'Žr àøZ› ¦±IŒ½!Yô0Ìóƒ}a ¨g{l!´Fb£›“íÒ,CßùÂàçð+z®Ùaa–‡V¯H§µÿŸa]î½÷?7Ën£ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Óû»Ú½ÿØ'öÐNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íôh§G;=ÚéÑNvz´Ó£íü£ÌÍ}Öï®dEfmüÇš[j‡ù~=Û/òußúÊšë,. Š•Ý­bw¯Ÿ Í'2ÔZêîmæ¦Úl÷§|Þ,>(»ýÓZj›;{ý§ù`_¶7Ÿïöd ³žïôŠyóo¹ïmù²ãgøÏÆ¡5üW׊LkÞl|-7È×Gå…cVËK;u½ ŒcÇIy¡\‰Ü4ñc¹’ÆAö•ÉÖnè¶xfÁ‹BÛMÝÀ<N<;ŽÒÐ|YnhGN^<ú±íEžWûQj§Žç_<>¾/ve«ôÌþkã£iöΟ}¹ùvY¤<d£cÓ6KÅÞyGgØßTG¯³ÔN;«›ûùàiÞíü7?ìTíW‡iñô#œþÞœ8Œ¼Ô,¶û…iue =ÈóîüèAÂó÷ÓZ{°ÔÍžÈÌ:Oz;»ýÎZoÿëÚ +çǧÙîïY+´Ó^éÜ˞̟}&Ÿý˜o”4~‡Úšseó¾¬ÉЋ†ëLV˜kV¬rZŽwåÊÿdèã:æžyô­cº2¼±.;–ë§r ½òОg‡®Ë +sý$²]ǫʘs¼el'IŒAµÝ–U ][¾Þûxa4ÚãÉcÆÊ{§©í‡QPß2p‚3{¬Õ»6z2Ë“=ž<›³Ï{ËÚ¾`AÖ¿7‹÷÷Šõ|koÐÍ»ÃâØNè%Us¹ê‡&ñÜÄöå§ÈÄ¡ìÝsƒÀ,®çYï^& ãG¹iÝYj1Ⱥ»y¿x¸½7x\ÝtÎbù<({²ŽgqêÅG^o–7-çè¨/oy¦õU¿Ÿ=– î=†‰Üù£ Ü£2º\Þ‘û./¿f9²ÆŽM`AèWë"¶ýDžìɨŒùòC§åXùü£hlLŽMxQµ.ŽGýÔö¼jËã=ú”ÍÆŽÍÑØp]$¶Çn}ËÀñìÀõÜúkcµÇ®žÌòd'ÏæìóÞ:U×}NÝ?·†Ý]×N=·zÉ_p=™MšŒÍa´²—Ëâ%V¨¼Ú]ô›ãõÊp`Ü&¯õÃ7<ò&%ÿ¤ººœËo¤£w?rÙæ kq%º»•¯±l6î[ŽïîúòSºN,kΑ·išoMšòŠÙøþ¹›–·U›]¿Ü6Þ-0å^knn8§òwÙ'ÆM’Ø·6Úoÿµÿµ À?ÑäääÕ«W§§§ß}÷ÝV«u÷îÝ^¯WÅÚÚšçy³³³–eMMM5=MhXÓ×'€æñ!Àå{Ïþ5<ïQâÕ©\œ(::×ð”DAÕÆËScÝiΈå&QQèƯà9±‚K9=ŠïøÃsžøv8^uz”$>÷ô(g6=:=Šl~tùÜÓ£xž›$œ@©þŸÊMNNNMM]¿~ýÆo¿ý¶\Ÿ˜˜¨njzš—åø¹Ë3}ë­·Þ{ï½?þ8‚?üpffæêÕ«ÒDnjzš/Èâââ£G677›žH3Úíö/¿üòÛo¿5=‘f¼æGÿÖ­[ÁPÓi†eY7oÞ”À¦'Ò y©—òšßôDš!¿ã¤€ülz"Í7W®\‘MO¤Õû)ÐôDšQ=}y§×ôDšÁÓçé¿>Ÿqüy/è¯yð»” —÷ÉãR>É°SvÊN_Ïx%½Œ§˜=¯Ê Ǭ–—vêzAÇŽ“8òB¹¹iâÇr%ƒ(í+ˆÖ‹ß,Ä~*w Ü“ÔŽ„~8Vw9Ãeq<( $NÜòÎ';ŒååÏ‹ã±C3X‰ëQ}ËÀ‘{§AZßcmìä¡kƒÇs¬íð乜}Ö[§ÚºÏiûçVðºÚIšúÃmÜÈv/›Ãh]/?–¥9ð,ÿUuzzúwÞ¹uë–çykkk½^ïçŸ.Šâ»ï¾»sçN«Õšµ,K6{mÏ@ À_Õô_ |º€g{Oá8<{]\’˵Ã( +ª“0–'– ü0¬—'8¼ÿÒœ×ÐM¢ ¢Ð_Á3ú—zš+×vÊã5<ÍÕðlŸæêxÓ£Ó\ÉæÕåóOså…®Ëi®ÏtÑRyåÊ•k×®½ùæ›W†&&&ê·6=ëËrn‰033óþûï߸qãúõëÓÓÓÇA&†šžõ uóæÍùùùO?ý4 æçÒ¼>øàîÝ»EQ|óÍ7MÏ¥y Òá÷ßïõzMÏ¥y²6VWWýõWÖ†˜•íímùyiz.Í“_%òúùðáÃÛ·o7=—æI Ïó䇅 ÃJyÑŸ—¦çÒ¼êu#Ë2^7þ Æ8jÔÉëFõ;eee¥é¹4O~§ÈçIÁçaY–,y.oJ›žK󦦦®]»&¯òq¾é¹4obbâ7Þ˜™™™žžnz.Í«þT§úƒ¯¦çÒ¼ã?ûÿ¡ßŸWÕ˜œœ¤à¯ú{N™/Öå}º¹ôÏM—÷QŒ=³göÌžÙ3{€WÊÜÜgýîJVdÖƬ¹¥vØ‘ï׳ý"X÷­¯¬¹ÎâÒ XÙÝ*v÷úÙàÐ|"C­¥îÞfnªÍvÊçÍâƒb°Ûß1­¥¶¹³×šöe{óùnO¶0ëùþA¯˜7ÿ–ûÞ–/Ë1®q†ÿlZÃu­È´æÍÆ×ró|}T^8fµ¼´S× âÀ8vœÄ‘Ê•ÈM?–+iDñh_™líŽ+7GžYˆãØŽÒØ7O'vºžù²÷ÓÀŽ’4|ÆxÛN§£q×–ÙDÏßOØ¡ïŸ}ÜÚøÑ<{Ì¿Ü~»ŒR Ž‰ ²Ñái›¥ƒbï¼4<¦:€¥vÚYÝÜÏOónç¿ùa§Úh¿:R‹§áô÷~àÄaä¥f±Ý/L«+«èAžwçGž¿ŸÖÚƒ¥nöDfÖyÒ;ØÙíwÖzû_×ÖP8?>Ív¿Èú[y§\§öJç^ödþì3ùìÇ|ë | ñ;Ô–+›÷eY†^4\j_./ù/³Ã|°°`ÍÍ­e;ùÃA¶Û“Ÿ€ýìin²~¯ÈŠü‰Übvù~±7ÈÍþ÷{?”#r—Ñæòôú¹õ“¦EB endstream endobj 786 0 obj [/ICCBased 819 0 R] endobj 732 0 obj <>stream +H‰Ô—KI…÷õ+ri/nv¾KÜ6# ‚n K€¹ø1¨Û#»Ïw²ž}=È6«A–ûVEeDFFœ8yõ›ksõëkgž=¿6ÓÕõ3×7ÆææúÛ)Xß‚ùoßðííÃÔr·ÅSª¡™S‰É„m­É||==›>LÎx×øÓƒ3§ñȇߛ÷ãÓ7²äeéêç÷Î<ÿ~ú-ÿ>L¡ì6S{².6s¿IJuÖ¥fbK69oré6Çl²ë¶—¶½Ÿ§KÉÝTbæi—Ô(·ûfs}_w=O—’»MÒ}³.T³ÚôANasdìžl¢»iu­ç[í^Fà¼ÄŒxÅ+„l{ÌÝGoÿNGÁ²aÍ«z®rä~zöÒ\ݼsæáyñÒ̱þòù9Açãl¯eüú›«1gÔÌì‘7¥G›<ð¨Ýë0].è“þ²•·‘'NêCFÐXŽ÷ËCØ%çéX%ûªXŠm% ­'…õeþZÍfáÂzØ(-®¬·i»aôÍ°·—‘ ;t‘FI£wC«UsµÅ—à]7Í9[È|,UѸúÅ +û¯IDü±íÊØ.¦Ì~iÛ/W±ŸÿúýҺ߳Û=ûãßÈøÕí­Ò}ûf¢ˆ$å'ùb»óÉ´.]ˆæö~zrk^™;óÚ|4Ooÿ6½¸ýœŸ:©ã® Áp»ä†Ç<ÄZˆ­ÇjÒgYඦ24ÿ=0 +7ªàÄCîä‰\—B@Á!t†¿Ç›ŸÃt?T~‚—3ª^…à…M¼D5U›s(Ò·PîgU°V)!ñp8¢ +"¹XL‚‰}€zÃf›ýýÇP¤Aj†'^;¯ª¤ tR#V EÜ >,š9s úNTÍñF vÔ…¬ø ÇiÇ‘6ìr1(÷d‡<êŒè<%…°¥*ÍÞçtþjQô1à"GIÀ»Pu(2LT“AЛ=ÍXŠß-±ÉÀÄœºH€ÈÛÀz<@6L¤”.Ú›x§ù½LY’|sòl]! ¯Ã’ÌM>²9fŨs‰\p‰øœÿBøŽsƒJCÊ <>Ñzž%ª”.#8 )žòàw¬ˆšS4hµ¢‰— aö ±è²„1ªÀ† `….ˆÇŽË4’}!ôC…CâG—ã2™ :%U|ë ná×®™Ó§CVÿ‡>RŽmk ÒôyÀ£Íðhz<Ü‚G§lW^ûœå#àÇ'©Žö GŽ¢qÌŽL´{~çSô\PEcWüImœ[ Ô¬4]‘È\¸’÷< ɵt58‰3ÜØ2ÀÝ& 0òð•hÏ>/ˆ„˜º*=BôN,'r˜q7Ê +(3õš|š³ô÷”]¼&û‚ÍâÃÀdmã„êd´Ë¬P¥Òa2µ6T›¶×·a¢¤.Œ`ëÝÅphv|©j²P‡‚ªŽUÄ~Aµ é +´Pp¢ýSYºÝï–Fé4@ð¡ú4údAÒ†˜ uQ«šlñöH­†GýÙÇ®¦FçòcÀVo¯ªÄìàs~tÝ—“s;kLQè”Ë6Fq2æp öÈŠOÇ–<´ jìJà€é˜dZgÅIUëèaQê#ê'¾î#–6ê3•-ðô*4>0 ¡ËCÎ<èžÚçÖóOéŠÝH:e¼hGý¹Ù(Ä”UõÊJ™ïˆ-$¿{<ØÆëWI°® ¬ÞEØÐÄîJFko˜W,‚óô‰èN¢ª&³«Q& ڹÝD°}#»aÆ–Çþ,‚£?‹Hþ¬ÇØÔÖƒn†/‚!;´‰PóE¨ìþ(Òí4H­3q"O­=òg<ògø`§?RÎƲÍð&˜7v‹îŽ"¶HCm1L‡i¾ó5 åkø,ÇØÔ¶ƒ®†/‚q>4&šRRSo9ûÖøAÔJA.ãߺe¢u,fŽ„„¹Î={i®nÞ9óðμxißd‰Ê¡T:5‚ˆ¹éô¸^Ãz!¼ÐlŸh† ÍøÙ«$¼×ÿš›ëo' ›Þü`¦Â¨4!¨Õt•¿Ú5¯ÍÈvnæ6=‚uëÿ¼\5}qP S¥\Ý^+ç(†@8`4 ?<9¿~ÿ´$z©#zòêîéŸn¹¸øvÒ Uñø¹ýëôäùéüfë|˜J_ÌwúöùáãêúÆ™óªº"ÿŽ{ë3‡ZÓW9ˆ(&ÍY0$ÖÕ¦}Ô„5x¼SqÀCwQÏ«½85 Ëï ü ÅÝÄ.XìÓ“,¸íéÝôFÙÝ}tª/µ]P¡ábóñ4‰ÃÉÓºÅêÓiv"ÃKݨ7·%§Í¯ÍÌQ´lsÚ==öÖ _ÈÄ~ÂØá4Ýê‹àÔÛÊ~‚‘7‚BYtÙóšØÓò[¶÷ótŠNr_A³kÑï–w7ÖÎÏ㓖Ϊl–õ•åóÞË»[ÕÜ°õnT d;idõÕTnêU“ËVÓ³¹šü—T•ORxgvŠý jéPCÿ¥„¾®|©ÜžtAŧàŽ²@^ØÖš["tQg»F$½?™BSJŽM²LŠŸx+Ÿ/;ñfHSÚhÏ?½²õ…Êݲ÷4žžøÿX¨ê‹ÞEŒ1’ù¿R€÷»¨8ªŠ»‹”WÔÝAQ ଂóô‰4eÌÿ]­«è†WÁ¯rܺbØçïvQu2E.‘êùþm†›¶ài {ü†¢(.C?vnè]qSgñì†GÅl´üq`óÇ!Nw»Æ¤ùE§á;— ª¬=gOn±vB;`ÇÖŒs+4`úƒú±<°çòÏÌ?±t]Ńc3V,&«¶À~e"QÞwˆ+¢  }ý—´äLb™œiûŠåIù¸!G4'íýo¦…Ëzšg¦ºâH˜lMÎ?žš‰½}ˆ•¬òb +Å×gãbqQƒýQJæö9y=jg‚,ªä&dìžÌ.“…ó @L4cW×’xdâå–H7EðâÔ¢êéÈòÉRåìBÝ ü¹¶E+¡výo;YÖªy‚Vˆò,£˜¹§/ì¾ô~[W˜4»ã´{FAj.£“@‰øµA‹Ò'3%øw:ÛÑ +Þ($‘Á¾Ñû¢•ÝÓ2<;\bsBïñ’Qʳ £Šk-ûK)p¼”B»Æ¤ùE§á+W/iœ}³)Å i+Á@ +ùÒµTiŒÁó$²bÄæ†Æ†¼mw±òo±–‹BÀLƪ¡S´lo«VäËŒTHhn‰Mc!‰òcŒññ.G#J +¹ârÕ ªïGt406܈FúµAê,[kADÙRo$Dú…öT;$OYgOV (&ÖEnwv¶dÎ ½ Â$‚š}Ü,:ý錛3IÞèÍnéfï@°™Ž”ê aÐ í7!¸ª§3¥s‘C`‡ž7w ØÝ1H.Å+ã‚T™|Ó°~¸ç„Þ "äQšNhö#ÑþV +o¥„G¯±h~w7|ã*«.eU!ÉFd:r'Kµõî~ICq$˜ûPUžÓ#¬²)P›ê¬ÁV‹8P£XN“‰‹)ªig bV*s(óç¯Ï·¿ ¨ãþ endstream endobj 733 0 obj <> endobj 756 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +486 0 0 480 273.6162109 546.6401367 cm +/Im0 Do +Q + endstream endobj 757 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +398 0 0 398 317.6162109 585.6401367 cm +/Im0 Do +Q + endstream endobj 758 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +268 0 0 44 385.6162109 814.6401367 cm +/Im0 Do +Q + endstream endobj 759 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +274 0 0 303 382.6162109 585.6401367 cm +/Im0 Do +Q + endstream endobj 760 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +296 0 0 91 408 856 cm +/Im0 Do +Q + endstream endobj 761 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +472 0 0 526 246 580 cm +/Im0 Do +Q + endstream endobj 762 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +513 0 0 502 283 520 cm +/Im0 Do +Q + endstream endobj 925 0 obj <> endobj 926 0 obj <> endobj 927 0 obj <> endobj 928 0 obj [0.0 0.0 0.0] endobj 929 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +513 0 0 502 283 520 cm +/Im0 Do +Q + endstream endobj 930 0 obj <> endobj 923 0 obj <> endobj 924 0 obj <> endobj 931 0 obj <> endobj 932 0 obj [0.0 0.0 0.0] endobj 933 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +472 0 0 526 246 580 cm +/Im0 Do +Q + endstream endobj 934 0 obj <> endobj 921 0 obj <> endobj 922 0 obj <> endobj 935 0 obj <> endobj 936 0 obj [0.0 0.0 0.0] endobj 937 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +296 0 0 91 408 856 cm +/Im0 Do +Q + endstream endobj 938 0 obj <> endobj 919 0 obj <> endobj 920 0 obj <> endobj 939 0 obj <> endobj 940 0 obj [0.0 0.0 0.0] endobj 941 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +274 0 0 303 382.6162109 585.6401367 cm +/Im0 Do +Q + endstream endobj 942 0 obj <> endobj 917 0 obj <> endobj 918 0 obj <> endobj 943 0 obj <> endobj 944 0 obj [0.0 0.0 0.0] endobj 945 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +268 0 0 44 385.6162109 814.6401367 cm +/Im0 Do +Q + endstream endobj 946 0 obj <> endobj 915 0 obj <> endobj 916 0 obj <> endobj 947 0 obj <> endobj 948 0 obj [0.0 0.0 0.0] endobj 949 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +398 0 0 398 317.6162109 585.6401367 cm +/Im0 Do +Q + endstream endobj 950 0 obj <> endobj 913 0 obj <> endobj 914 0 obj <> endobj 951 0 obj <> endobj 952 0 obj [0.0 0.0 0.0] endobj 953 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +486 0 0 480 273.6162109 546.6401367 cm +/Im0 Do +Q + endstream endobj 954 0 obj <> endobj 746 0 obj <> endobj 748 0 obj <> endobj 749 0 obj <> endobj 750 0 obj <> endobj 751 0 obj <> endobj 959 0 obj <> endobj 960 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +15.8993082 0 0 -16.1025677 1392.8847656 296.171875 cm +BX /Sh0 sh EX Q + endstream endobj 961 0 obj <> endobj 958 0 obj <> endobj 962 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +11.9217148 0 0 -12.0797682 1392.7294922 335.4882812 cm +BX /Sh0 sh EX Q + endstream endobj 963 0 obj <> endobj 957 0 obj <> endobj 964 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +225.9361572 0 0 -225.9361572 1389.9453125 728.7958984 cm +BX /Sh0 sh EX Q + endstream endobj 965 0 obj <> endobj 956 0 obj <> endobj 966 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +7.9551892 0 0 -8.0455885 1392.7294922 366.4384766 cm +BX /Sh0 sh EX Q + endstream endobj 967 0 obj <> endobj 955 0 obj <> endobj 968 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +225.9359131 0 0 -225.9359131 509.96875 794.0385742 cm +BX /Sh0 sh EX Q + endstream endobj 969 0 obj <> endobj 912 0 obj [/ICCBased 819 0 R] endobj 5 0 obj <> endobj 248 0 obj <> endobj 489 0 obj <> endobj 636 0 obj [/View/Design] endobj 637 0 obj <>>> endobj 395 0 obj [/View/Design] endobj 396 0 obj <>>> endobj 154 0 obj [/View/Design] endobj 155 0 obj <>>> endobj 731 0 obj [730 0 R] endobj 970 0 obj <> endobj xref 0 971 0000000004 65535 f +0000000016 00000 n +0000000194 00000 n +0000050669 00000 n +0000000006 00000 f +0000539738 00000 n +0000000009 00000 f +0000050726 00000 n +0000051599 00000 n +0000000010 00000 f +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000016 00000 f +0000000017 00000 f +0000000018 00000 f +0000000019 00000 f +0000000020 00000 f +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000035 00000 f +0000000036 00000 f +0000000037 00000 f +0000000038 00000 f +0000000039 00000 f +0000000040 00000 f +0000000041 00000 f +0000000042 00000 f +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000046 00000 f +0000000047 00000 f +0000000048 00000 f +0000000049 00000 f +0000000050 00000 f +0000000051 00000 f +0000000052 00000 f +0000000053 00000 f +0000000054 00000 f +0000000055 00000 f +0000000056 00000 f +0000000057 00000 f +0000000058 00000 f +0000000059 00000 f +0000000060 00000 f +0000000061 00000 f +0000000062 00000 f +0000000063 00000 f +0000000064 00000 f +0000000065 00000 f +0000000066 00000 f +0000000067 00000 f +0000000068 00000 f +0000000069 00000 f +0000000070 00000 f +0000000071 00000 f +0000000072 00000 f +0000000073 00000 f +0000000074 00000 f +0000000075 00000 f +0000000076 00000 f +0000000077 00000 f +0000000078 00000 f +0000000079 00000 f +0000000080 00000 f +0000000081 00000 f +0000000082 00000 f +0000000083 00000 f +0000000084 00000 f +0000000085 00000 f +0000000086 00000 f +0000000087 00000 f +0000000088 00000 f +0000000089 00000 f +0000000090 00000 f +0000000091 00000 f +0000000092 00000 f +0000000093 00000 f +0000000094 00000 f +0000000095 00000 f +0000000096 00000 f +0000000097 00000 f +0000000098 00000 f +0000000099 00000 f +0000000100 00000 f +0000000101 00000 f +0000000102 00000 f +0000000103 00000 f +0000000104 00000 f +0000000105 00000 f +0000000106 00000 f +0000000107 00000 f +0000000108 00000 f +0000000109 00000 f +0000000110 00000 f +0000000111 00000 f +0000000112 00000 f +0000000113 00000 f +0000000114 00000 f +0000000115 00000 f +0000000116 00000 f +0000000117 00000 f +0000000118 00000 f +0000000119 00000 f +0000000120 00000 f +0000000121 00000 f +0000000122 00000 f +0000000123 00000 f +0000000124 00000 f +0000000125 00000 f +0000000126 00000 f +0000000127 00000 f +0000000128 00000 f +0000000129 00000 f +0000000130 00000 f +0000000131 00000 f +0000000132 00000 f +0000000133 00000 f +0000000134 00000 f +0000000135 00000 f +0000000136 00000 f +0000000137 00000 f +0000000138 00000 f +0000000139 00000 f +0000000140 00000 f +0000000141 00000 f +0000000142 00000 f +0000000143 00000 f +0000000144 00000 f +0000000145 00000 f +0000000146 00000 f +0000000147 00000 f +0000000148 00000 f +0000000149 00000 f +0000000150 00000 f +0000000151 00000 f +0000000152 00000 f +0000000153 00000 f +0000000156 00000 f +0000540197 00000 n +0000540229 00000 n +0000000157 00000 f +0000000158 00000 f +0000000159 00000 f +0000000160 00000 f +0000000161 00000 f +0000000162 00000 f +0000000163 00000 f +0000000164 00000 f +0000000165 00000 f +0000000166 00000 f +0000000167 00000 f +0000000168 00000 f +0000000169 00000 f +0000000170 00000 f +0000000171 00000 f +0000000172 00000 f +0000000173 00000 f +0000000174 00000 f +0000000175 00000 f +0000000176 00000 f +0000000177 00000 f +0000000178 00000 f +0000000179 00000 f +0000000180 00000 f +0000000181 00000 f +0000000182 00000 f +0000000183 00000 f +0000000184 00000 f +0000000185 00000 f +0000000186 00000 f +0000000187 00000 f +0000000188 00000 f +0000000189 00000 f +0000000190 00000 f +0000000191 00000 f +0000000192 00000 f +0000000193 00000 f +0000000194 00000 f +0000000195 00000 f +0000000196 00000 f +0000000197 00000 f +0000000198 00000 f +0000000199 00000 f +0000000200 00000 f +0000000201 00000 f +0000000202 00000 f +0000000203 00000 f +0000000204 00000 f +0000000205 00000 f +0000000206 00000 f +0000000207 00000 f +0000000208 00000 f +0000000209 00000 f +0000000210 00000 f +0000000211 00000 f +0000000212 00000 f +0000000213 00000 f +0000000214 00000 f +0000000215 00000 f +0000000216 00000 f +0000000217 00000 f +0000000218 00000 f +0000000219 00000 f +0000000220 00000 f +0000000221 00000 f +0000000222 00000 f +0000000223 00000 f +0000000224 00000 f +0000000225 00000 f +0000000226 00000 f +0000000227 00000 f +0000000228 00000 f +0000000229 00000 f +0000000230 00000 f +0000000231 00000 f +0000000232 00000 f +0000000233 00000 f +0000000234 00000 f +0000000235 00000 f +0000000236 00000 f +0000000237 00000 f +0000000238 00000 f +0000000239 00000 f +0000000240 00000 f +0000000241 00000 f +0000000242 00000 f +0000000243 00000 f +0000000244 00000 f +0000000245 00000 f +0000000246 00000 f +0000000247 00000 f +0000000249 00000 f +0000539811 00000 n +0000000250 00000 f +0000000251 00000 f +0000000252 00000 f +0000000253 00000 f +0000000254 00000 f +0000000255 00000 f +0000000256 00000 f +0000000257 00000 f +0000000258 00000 f +0000000259 00000 f +0000000260 00000 f +0000000261 00000 f +0000000262 00000 f +0000000263 00000 f +0000000264 00000 f +0000000265 00000 f +0000000266 00000 f +0000000267 00000 f +0000000268 00000 f +0000000269 00000 f +0000000270 00000 f +0000000271 00000 f +0000000272 00000 f +0000000273 00000 f +0000000274 00000 f +0000000275 00000 f +0000000276 00000 f +0000000277 00000 f +0000000278 00000 f +0000000279 00000 f +0000000280 00000 f +0000000281 00000 f +0000000282 00000 f +0000000283 00000 f +0000000284 00000 f +0000000285 00000 f +0000000286 00000 f +0000000287 00000 f +0000000288 00000 f +0000000289 00000 f +0000000290 00000 f +0000000291 00000 f +0000000292 00000 f +0000000293 00000 f +0000000294 00000 f +0000000295 00000 f +0000000296 00000 f +0000000297 00000 f +0000000298 00000 f +0000000299 00000 f +0000000300 00000 f +0000000301 00000 f +0000000302 00000 f +0000000303 00000 f +0000000304 00000 f +0000000305 00000 f +0000000306 00000 f +0000000307 00000 f +0000000308 00000 f +0000000309 00000 f +0000000310 00000 f +0000000311 00000 f +0000000312 00000 f +0000000313 00000 f +0000000314 00000 f +0000000315 00000 f +0000000316 00000 f +0000000317 00000 f +0000000318 00000 f +0000000319 00000 f +0000000320 00000 f +0000000321 00000 f +0000000322 00000 f +0000000323 00000 f +0000000324 00000 f +0000000325 00000 f +0000000326 00000 f +0000000327 00000 f +0000000328 00000 f +0000000329 00000 f +0000000330 00000 f +0000000331 00000 f +0000000332 00000 f +0000000333 00000 f +0000000334 00000 f +0000000335 00000 f +0000000336 00000 f +0000000337 00000 f +0000000338 00000 f +0000000339 00000 f +0000000340 00000 f +0000000341 00000 f +0000000342 00000 f +0000000343 00000 f +0000000344 00000 f +0000000345 00000 f +0000000346 00000 f +0000000347 00000 f +0000000348 00000 f +0000000349 00000 f +0000000350 00000 f +0000000351 00000 f +0000000352 00000 f +0000000353 00000 f +0000000354 00000 f +0000000355 00000 f +0000000356 00000 f +0000000357 00000 f +0000000358 00000 f +0000000359 00000 f +0000000360 00000 f +0000000361 00000 f +0000000362 00000 f +0000000363 00000 f +0000000364 00000 f +0000000365 00000 f +0000000366 00000 f +0000000367 00000 f +0000000368 00000 f +0000000369 00000 f +0000000370 00000 f +0000000371 00000 f +0000000372 00000 f +0000000373 00000 f +0000000374 00000 f +0000000375 00000 f +0000000376 00000 f +0000000377 00000 f +0000000378 00000 f +0000000379 00000 f +0000000380 00000 f +0000000381 00000 f +0000000382 00000 f +0000000383 00000 f +0000000384 00000 f +0000000385 00000 f +0000000386 00000 f +0000000387 00000 f +0000000388 00000 f +0000000389 00000 f +0000000390 00000 f +0000000391 00000 f +0000000392 00000 f +0000000393 00000 f +0000000394 00000 f +0000000397 00000 f +0000540079 00000 n +0000540111 00000 n +0000000398 00000 f +0000000399 00000 f +0000000400 00000 f +0000000401 00000 f +0000000402 00000 f +0000000403 00000 f +0000000404 00000 f +0000000405 00000 f +0000000406 00000 f +0000000407 00000 f +0000000408 00000 f +0000000409 00000 f +0000000410 00000 f +0000000411 00000 f +0000000412 00000 f +0000000413 00000 f +0000000414 00000 f +0000000415 00000 f +0000000416 00000 f +0000000417 00000 f +0000000418 00000 f +0000000419 00000 f +0000000420 00000 f +0000000421 00000 f +0000000422 00000 f +0000000423 00000 f +0000000424 00000 f +0000000425 00000 f +0000000426 00000 f +0000000427 00000 f +0000000428 00000 f +0000000429 00000 f +0000000430 00000 f +0000000431 00000 f +0000000432 00000 f +0000000433 00000 f +0000000434 00000 f +0000000435 00000 f +0000000436 00000 f +0000000437 00000 f +0000000438 00000 f +0000000439 00000 f +0000000440 00000 f +0000000441 00000 f +0000000442 00000 f +0000000443 00000 f +0000000444 00000 f +0000000445 00000 f +0000000446 00000 f +0000000447 00000 f +0000000448 00000 f +0000000449 00000 f +0000000450 00000 f +0000000451 00000 f +0000000452 00000 f +0000000453 00000 f +0000000454 00000 f +0000000455 00000 f +0000000456 00000 f +0000000457 00000 f +0000000458 00000 f +0000000459 00000 f +0000000460 00000 f +0000000461 00000 f +0000000462 00000 f +0000000463 00000 f +0000000464 00000 f +0000000465 00000 f +0000000466 00000 f +0000000467 00000 f +0000000468 00000 f +0000000469 00000 f +0000000470 00000 f +0000000471 00000 f +0000000472 00000 f +0000000473 00000 f +0000000474 00000 f +0000000475 00000 f +0000000476 00000 f +0000000477 00000 f +0000000478 00000 f +0000000479 00000 f +0000000480 00000 f +0000000481 00000 f +0000000482 00000 f +0000000483 00000 f +0000000484 00000 f +0000000485 00000 f +0000000486 00000 f +0000000487 00000 f +0000000488 00000 f +0000000000 00000 f +0000539886 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000539961 00000 n +0000539993 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000255776 00000 n +0000540315 00000 n +0000526925 00000 n +0000530281 00000 n +0000272389 00000 n +0000072965 00000 n +0000080180 00000 n +0000077135 00000 n +0000078917 00000 n +0000078454 00000 n +0000076711 00000 n +0000076244 00000 n +0000075807 00000 n +0000072621 00000 n +0000268801 00000 n +0000268915 00000 n +0000536963 00000 n +0000100986 00000 n +0000537080 00000 n +0000537197 00000 n +0000537314 00000 n +0000537431 00000 n +0000255969 00000 n +0000257133 00000 n +0000257476 00000 n +0000254768 00000 n +0000530345 00000 n +0000530669 00000 n +0000530992 00000 n +0000531314 00000 n +0000531637 00000 n +0000531937 00000 n +0000532239 00000 n +0000058286 00000 n +0000058829 00000 n +0000064795 00000 n +0000065059 00000 n +0000065376 00000 n +0000071367 00000 n +0000071636 00000 n +0000071964 00000 n +0000072239 00000 n +0000052478 00000 n +0000055983 00000 n +0000269032 00000 n +0000269149 00000 n +0000269266 00000 n +0000269383 00000 n +0000269500 00000 n +0000056047 00000 n +0000056374 00000 n +0000056701 00000 n +0000057027 00000 n +0000057354 00000 n +0000057664 00000 n +0000057975 00000 n +0000526888 00000 n +0000199803 00000 n +0000081996 00000 n +0000228123 00000 n +0000199867 00000 n +0000155074 00000 n +0000178049 00000 n +0000155138 00000 n +0000151139 00000 n +0000153025 00000 n +0000151203 00000 n +0000140569 00000 n +0000146002 00000 n +0000140633 00000 n +0000126432 00000 n +0000133614 00000 n +0000126496 00000 n +0000101099 00000 n +0000114198 00000 n +0000101163 00000 n +0000080732 00000 n +0000091259 00000 n +0000080796 00000 n +0000080227 00000 n +0000079327 00000 n +0000078963 00000 n +0000078501 00000 n +0000077183 00000 n +0000076758 00000 n +0000076291 00000 n +0000075854 00000 n +0000072668 00000 n +0000073002 00000 n +0000073158 00000 n +0000076140 00000 n +0000076586 00000 n +0000077043 00000 n +0000078037 00000 n +0000078795 00000 n +0000079247 00000 n +0000080558 00000 n +0000082042 00000 n +0000091204 00000 n +0000091375 00000 n +0000091441 00000 n +0000091472 00000 n +0000091749 00000 n +0000091824 00000 n +0000102529 00000 n +0000114314 00000 n +0000114380 00000 n +0000114411 00000 n +0000114688 00000 n +0000114763 00000 n +0000127223 00000 n +0000133730 00000 n +0000133796 00000 n +0000133827 00000 n +0000134103 00000 n +0000134178 00000 n +0000141446 00000 n +0000146118 00000 n +0000146184 00000 n +0000146215 00000 n +0000146508 00000 n +0000146583 00000 n +0000151556 00000 n +0000153141 00000 n +0000153207 00000 n +0000153238 00000 n +0000153530 00000 n +0000153605 00000 n +0000156876 00000 n +0000178165 00000 n +0000178231 00000 n +0000178262 00000 n +0000178555 00000 n +0000178630 00000 n +0000202059 00000 n +0000228239 00000 n +0000228305 00000 n +0000228336 00000 n +0000228629 00000 n +0000228704 00000 n +0000254922 00000 n +0000255143 00000 n +0000255262 00000 n +0000255367 00000 n +0000255458 00000 n +0000255549 00000 n +0000255655 00000 n +0000255851 00000 n +0000255883 00000 n +0000268483 00000 n +0000268571 00000 n +0000265290 00000 n +0000257856 00000 n +0000258107 00000 n +0000265561 00000 n +0000271957 00000 n +0000271527 00000 n +0000271093 00000 n +0000270661 00000 n +0000269617 00000 n +0000269672 00000 n +0000269970 00000 n +0000270048 00000 n +0000270205 00000 n +0000270426 00000 n +0000270501 00000 n +0000270581 00000 n +0000270716 00000 n +0000271015 00000 n +0000271148 00000 n +0000271449 00000 n +0000271582 00000 n +0000271879 00000 n +0000272012 00000 n +0000272311 00000 n +0000272465 00000 n +0000272712 00000 n +0000273723 00000 n +0000284180 00000 n +0000349769 00000 n +0000415358 00000 n +0000480947 00000 n +0000539701 00000 n +0000536321 00000 n +0000536385 00000 n +0000535680 00000 n +0000535744 00000 n +0000535040 00000 n +0000535104 00000 n +0000534399 00000 n +0000534463 00000 n +0000533781 00000 n +0000533845 00000 n +0000533161 00000 n +0000533225 00000 n +0000532541 00000 n +0000532605 00000 n +0000532721 00000 n +0000532787 00000 n +0000532818 00000 n +0000533086 00000 n +0000533341 00000 n +0000533407 00000 n +0000533438 00000 n +0000533706 00000 n +0000533961 00000 n +0000534027 00000 n +0000534058 00000 n +0000534324 00000 n +0000534579 00000 n +0000534645 00000 n +0000534676 00000 n +0000534965 00000 n +0000535220 00000 n +0000535286 00000 n +0000535317 00000 n +0000535605 00000 n +0000535860 00000 n +0000535926 00000 n +0000535957 00000 n +0000536246 00000 n +0000536501 00000 n +0000536567 00000 n +0000536598 00000 n +0000536888 00000 n +0000539271 00000 n +0000538842 00000 n +0000538409 00000 n +0000537978 00000 n +0000537548 00000 n +0000537603 00000 n +0000537900 00000 n +0000538033 00000 n +0000538331 00000 n +0000538464 00000 n +0000538764 00000 n +0000538897 00000 n +0000539193 00000 n +0000539326 00000 n +0000539623 00000 n +0000540342 00000 n +trailer <<8DE5252BE861447E9DAABAECF80D68A1>]>> startxref 540533 %%EOF \ No newline at end of file diff --git a/doc/logos/eps/icon_taler.eps b/doc/logos/eps/icon_taler.eps new file mode 100644 index 00000000..79ab648a Binary files /dev/null and b/doc/logos/eps/icon_taler.eps differ diff --git a/doc/logos/eps/logo_taler.eps b/doc/logos/eps/logo_taler.eps new file mode 100644 index 00000000..34312849 Binary files /dev/null and b/doc/logos/eps/logo_taler.eps differ diff --git a/doc/logos/fonts/OldNewspaperTypes.ttf b/doc/logos/fonts/OldNewspaperTypes.ttf new file mode 100755 index 00000000..7b9cf31b Binary files /dev/null and b/doc/logos/fonts/OldNewspaperTypes.ttf differ diff --git a/doc/logos/fonts/perpetue/Perpetua Bold Italic.ttf b/doc/logos/fonts/perpetue/Perpetua Bold Italic.ttf new file mode 100644 index 00000000..3882fe92 Binary files /dev/null and b/doc/logos/fonts/perpetue/Perpetua Bold Italic.ttf differ diff --git a/doc/logos/fonts/perpetue/Perpetua Bold.ttf b/doc/logos/fonts/perpetue/Perpetua Bold.ttf new file mode 100644 index 00000000..c73833db Binary files /dev/null and b/doc/logos/fonts/perpetue/Perpetua Bold.ttf differ diff --git a/doc/logos/fonts/perpetue/Perpetua Italic.ttf b/doc/logos/fonts/perpetue/Perpetua Italic.ttf new file mode 100644 index 00000000..e4f295ed Binary files /dev/null and b/doc/logos/fonts/perpetue/Perpetua Italic.ttf differ diff --git a/doc/logos/fonts/perpetue/Perpetua.ttf b/doc/logos/fonts/perpetue/Perpetua.ttf new file mode 100644 index 00000000..846b3dca Binary files /dev/null and b/doc/logos/fonts/perpetue/Perpetua.ttf differ diff --git a/doc/logos/fonts/smoth_bight/End User Licence Agreement.txt b/doc/logos/fonts/smoth_bight/End User Licence Agreement.txt new file mode 100755 index 00000000..04209197 --- /dev/null +++ b/doc/logos/fonts/smoth_bight/End User Licence Agreement.txt @@ -0,0 +1,133 @@ +End User License Agreement and Software Inclusion Agreement + + +"Purchaser" and "User" may be used interchangeably in this agreement. + + +The official release page is at kustren.deviantart.com/ + +or + + + + Copyright 2013 Kustren + Trademark 2013 Kustren licence + Commercial distribution, rendering and printing of the font and derived work is prohibited. + + + + + +Usage + +Smoth-Bight is freeware Font is free to use for personal and commercial purposes. No payment is necessary, and there is no limit to the amount of prints, pages, or other medium to be produced using them. However, you cannot offer the font for commercial sale, or offer for direct download. The inclusion othe font name and/or site URL in the credits or documentation when it is used is appreciated, but this is not mandatory. +My font is for personal and commercial use, can be used for any type of work, while nature, neither will be able to be modified in any kind of way. +This license is multipurpose, my font can be used on multiple computers at once. + + + + + +Payment + +Payment is not required for the use of kustren's freeware Font. + + + +Support + +If you experience problems with any Kustren's Freeware font (such as spacing issues or missing characters), please verify that you have the correct and current version of the fonts. In the case of Freeware font, downloading the font directly from the http://kustren.deviantart.com/ site will ensure that the font files have not been altered. + + + + +Copyright (c) 2014 by Kustren. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/doc/logos/fonts/smoth_bight/Licencia de la fuente - Version en Espa\302\247ol.txt" "b/doc/logos/fonts/smoth_bight/Licencia de la fuente - Version en Espa\302\247ol.txt" new file mode 100755 index 00000000..39833a36 --- /dev/null +++ "b/doc/logos/fonts/smoth_bight/Licencia de la fuente - Version en Espa\302\247ol.txt" @@ -0,0 +1,77 @@ +Contrato de licencia de usuario final e Inclusión del acuerdo de Software + +"Comprador " y "Usuario " se pueden utilizar indistintamente en el presente acuerdo . + + +La página oficial de lanzamiento de la fuente es: +http://kustren.deviantart.com/ + + + + Derechos de autor 2013 Kustren + Marcas 2013 licencia Kustren + Se prohíbe la distribución comercial, la representación y la impresión de la fuente y el trabajo derivado . + + + + + +Uso + +La fuente de Kustren llamada Smoth-Bight es freware en su mayoria, de uso libre, pero solo para fines personales y/o comerciales, no hay limite en la cantidad de copias realizadas de la mis ma fuente en los pcs que usted utilice. +Sin embargo no pueden ofrecer esta tipografia ni como suyas y/o comercializarla, tampoco estara permitida la descarga directa en otras paginas web, a menos que sea con consentimiento de su creador Kustren. +Si usted usa mi fuente deme creditos por ello y/o coloque la pagina web mia, esto es de agradecer. + +licencia del derecho de uso + +Esta fuente es para uso personal y/o comercial, puede ser usadas para cualquier tipo de trabajo, pero no podra ser modificadas de ningun tipo de manera. +Recuerden que si ustedes compran alguna tipografia no se convierten en propietariuo de la fuente, solo obtienen la licencia de uso, es decir la misma que estan leyendo. +Esta licencia es de multiuso, mi fuente pueden ser usadas en multiples computadores a la vez. + + + + + +pago + +El pago no es necesaria para el uso de esta fuente de software gratuito creada por kustren. + + + +apoyo + +Si tienen problema con la fuente (como problemas de espaciado o caracteres que faltan ) , por favor, compruebe que tiene la versión correcta y actualizada de la fuente. En el caso de fuentes de dominio público , la descarga de la fuente directamente desde el sitio http://kustren.deviantart.com/ se asegurará de que los archivos de fuentes no han sido alterados. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/logos/fonts/smoth_bight/Smoth-Bight - Por Kustren.otf b/doc/logos/fonts/smoth_bight/Smoth-Bight - Por Kustren.otf new file mode 100755 index 00000000..33fd9793 Binary files /dev/null and b/doc/logos/fonts/smoth_bight/Smoth-Bight - Por Kustren.otf differ diff --git a/doc/logos/fonts/smoth_bight/Smoth-Bight Italic - Por Kustren.otf b/doc/logos/fonts/smoth_bight/Smoth-Bight Italic - Por Kustren.otf new file mode 100755 index 00000000..5fb25e64 Binary files /dev/null and b/doc/logos/fonts/smoth_bight/Smoth-Bight Italic - Por Kustren.otf differ diff --git a/doc/logos/ico/favicon1616.ico b/doc/logos/ico/favicon1616.ico new file mode 100644 index 00000000..141b93d3 Binary files /dev/null and b/doc/logos/ico/favicon1616.ico differ diff --git a/doc/logos/ico/favicon4848.ico b/doc/logos/ico/favicon4848.ico new file mode 100644 index 00000000..3c04b126 Binary files /dev/null and b/doc/logos/ico/favicon4848.ico differ diff --git a/doc/logos/png/icon_taler.png b/doc/logos/png/icon_taler.png new file mode 100644 index 00000000..b1dd9a58 Binary files /dev/null and b/doc/logos/png/icon_taler.png differ diff --git a/doc/logos/png/logo_taler.png b/doc/logos/png/logo_taler.png new file mode 100644 index 00000000..bdffc3c9 Binary files /dev/null and b/doc/logos/png/logo_taler.png differ diff --git a/doc/paper/.latexmkrc b/doc/paper/.latexmkrc new file mode 100644 index 00000000..16bc358f --- /dev/null +++ b/doc/paper/.latexmkrc @@ -0,0 +1,15 @@ +add_cus_dep('glo', 'gls', 0, 'run_makeglossaries'); +add_cus_dep('acn', 'acr', 0, 'run_makeglossaries'); + +sub run_makeglossaries { + if ( $silent ) { + system "makeglossaries -q '$_[0]'"; + } + else { + system "makeglossaries '$_[0]'"; + }; +} + +push @generated_exts, 'glo', 'gls', 'glg'; +push @generated_exts, 'acn', 'acr', 'alg'; +$clean_ext .= ' %R.ist %R.xdy'; diff --git a/doc/paper/taler.bib b/doc/paper/taler.bib new file mode 100644 index 00000000..ce5b1cb1 --- /dev/null +++ b/doc/paper/taler.bib @@ -0,0 +1,94 @@ +@article{nakamoto2008bitcoin, + title={Bitcoin: A peer-to-peer electronic cash system}, + author={Nakamoto, Satoshi}, + year={2008} +} + +@Article{blum1981, + author = {Manuel Blum}, + title = {Coin Flipping by Telephone}, + journal = {CRYPTO}, + year = {1981}, + pages = {11-15}, +} + +@inproceedings{chaum1990untraceable, + title={Untraceable electronic cash}, + author={Chaum, David and Fiat, Amos and Naor, Moni}, + booktitle={Proceedings on Advances in cryptology}, + pages={319--327}, + year={1990}, + organization={Springer-Verlag New York, Inc.} +} + +@inproceedings{chaum1983blind, + title={Blind signatures for untraceable payments}, + author={Chaum, David}, + booktitle={Advances in cryptology}, + pages={199--203}, + year={1983}, + organization={Springer} +} + +@inproceedings{rivest2004peppercoin, + title={Peppercoin micropayments}, + author={Rivest, Ronald L}, + booktitle={Financial Cryptography}, + pages={2--8}, + year={2004}, + organization={Springer} +} + +@inproceedings{miers2013zerocoin, + title={Zerocoin: Anonymous distributed e-cash from bitcoin}, + author={Miers, Ian and Garman, Christina and Green, Matthew and Rubin, Aviel D}, + booktitle={Security and Privacy (SP), 2013 IEEE Symposium on}, + pages={397--411}, + year={2013}, + organization={IEEE} +} + +@inproceedings{selby2004analyzing, + title={Analyzing the Success and Failure of Recent e-Payment Schemes}, + author={Selby, Jack R}, + booktitle={Financial Cryptography}, + pages={1--1}, + year={2004}, + organization={Springer} +} + +@misc{brands1993efficient, + title={An efficient off-line electronic cash system based on the representation problem}, + author={Brands, Stefan A}, + year={1993}, + publisher={Centrum voor Wiskunde en Informatica} +} + +@article{dent2008extensions, + title={Extensions to Chaum's Blind Signature Scheme and OpenCoin Requirements}, + author={Dent, AW and Paterson, KG and Wild, PR}, + year={2008} +} + +@article{dent2008preliminary, + title={Preliminary Report on Chaum's Online E-Cash Architecture}, + author={Dent, AW and Paterson, KG and Wild, PR}, + journal={Royal Holloway, University of London}, + year={2008} +} + + + +@inproceedings{tor-design, + title = {Tor: The Second-Generation Onion Router}, + author = {Roger Dingledine and Nick Mathewson and Paul Syverson}, + booktitle = {Proceedings of the 13th USENIX Security Symposium}, + year = {2004}, + month = {August}, + www_important = {1}, + www_tags = {selected}, + www_html_url = {https://www.torproject.org/svn/trunk/doc/design-paper/tor-design.html}, + www_pdf_url = {https://www.torproject.org/svn/trunk/doc/design-paper/tor-design.pdf}, + www_section = {Anonymous communication}, +} + diff --git a/doc/paper/taler.tex b/doc/paper/taler.tex new file mode 100644 index 00000000..7a71d763 --- /dev/null +++ b/doc/paper/taler.tex @@ -0,0 +1,995 @@ +\documentclass{llncs} +%\usepackage[margin=1in,a4paper]{geometry} +\usepackage[T1]{fontenc} +\usepackage{palatino} +\usepackage{xspace} +\usepackage{microtype} +\usepackage{tikz} +\usepackage{amsmath,amssymb} +\usepackage{enumitem} +\usetikzlibrary{shapes,arrows} +\usetikzlibrary{positioning} +\usetikzlibrary{calc} + + + +% Terminology: +% - SEPA-transfer -- avoid 'SEPA transaction' as we use +% 'transaction' already when we talk about taxable +% transfers of Taler coins and database 'transactions'. +% - wallet = coins at customer +% - reserve = currency entrusted to mint waiting for withdrawl +% - deposit = SEPA to mint +% - withdrawl = mint to customer +% - spending = customer to merchant +% - redeeming = merchant to mint (and then mint SEPA to merchant) +% - refreshing = customer-mint-customer +% - dirty coin = coin with exposed public key +% - fresh coin = coin that was refreshed or is new +% - coin signing key = mint's online key used to (blindly) sign coin +% - message signing key = mint's online key to sign mint messages +% - mint master key = mint's key used to sign other mint keys +% - owner = entity that knows coin private key +% - transaction = coin ownership transfer that should be taxed +% - sharing = coin copying that should not be taxed + + +\title{Taler: Taxable Anonymous Libre Electronic Reserves} + +\begin{document} +\mainmatter + +%\author{Florian Dold \and Sree Harsha Totakura \and Benedikt M\"uller \and Christian Grothoff} +%\institute{The GNUnet Project} + + +\maketitle + +\begin{abstract} +This paper introduces Taler, a Chaum-style digital currency using +blind signatures that enables anonymous payments while ensuring that +entities that receive payments are auditable and thus taxable. Taler +differs from Chaum's original proposal in that customers can never defraud anyone, +merchants can only fail to deliver the merchandise to the customer, +and mints can be fully audited. Consequently, enforcement of honest +behavior is better and more timely than with Chaum, and is at least as +strict as with legacy credit card payment systems that do not provide +for privacy. Furthermore, Taler allows fractional and incremental +payments, and even in this case is still able to guarantee +unlinkability of transactions via a new coin refreshing protocol. +Finally, Taler also supports microdonations using probabilistic +transactions. We argue that Taler provides a secure digital currency +for modern liberal societies as it is a flexible, libre and efficient +protocol and adequately balances the state's need for monetary control +with the citizen's needs for private economic activity. +\end{abstract} + +\section{Introduction} + +The design of payment systems shapes economies and societies. Strong, +developed nation states are evolving towards fully transparent payment +systems, such as the MasterCard and VisaCard credit card schemes and +computerized bank transactions such as SWIFT. Such systems enable +mass surveillance and thus extensive government control over the +economy, from taxation to intrusion into private lives. Bribery and +corruption are limited to elites that can afford to escape the +dragnet. The other extreme are economies of developing, weak nation +states where economic activity is based largely on coins, paper money +or even barter. Here, the state is often unable to effectively +monitor or tax economic activity, and this limits the ability of the +state to shape the society. As bribery is virtually impossible to +detect, it is widespread and not limited to social elites. +ZeroCoin~\cite{miers2013zerocoin} is an example for translating such +an economy into the digital realm. + +Taler is supposed to offer a middleground between an authoritarian +state in total control of the population and weak states with almost +anarchistic economies. Specifically, we believe that a liberal +democracy needs a payment system with the following properties: + +\begin{description} + \item[Customer Anonymity] It must be impossible for mints, merchants + and even a global active adversary, to trace the spending behavior + of a customer. + \item[Unlinkability] Merchants must not be able to tell if two + transactions were performed by the same customer. It must be + infeasible to link a set of transactions to the same (anonymous) + customer. %, even when taking aborted transactions into account. + \item[Taxability] In many current legal systems, it is the + responsibility of the merchant to deduct (sales) taxes from + purchases made by customers, or to pay (income) taxes for payments + received for work. + %Taxation is neccessary for the state to + %provide legitimate social functions, such as education. Thus, a payment + %system must facilitate sales, income and transaction taxes. + This specifically means that it must be able to audit merchants (or + generally anybody receiving money), and thus the receiver of + electronic cash must be easily identifiable. + %non-anonymous, as this would enable tax fraud. + \item[Verifiability] The payment system should try to minimize the + trust necessary between the participants. In particular, digital + signatures should be used extensively in order to be able to + resolve disputes between the involved parties. Nevertheless, + customers must never be able to defraud anyone, and merchants must + at best be able to defraud their customers by not delivering the + on the agreed contract. Neither merchants nor customers must ever + be able to commit fraud against the mint. Both customers and + merchants must receive cryptographic proofs of bad behavior in + case of protocol violations by the mint. Thus, only the mint will + have to be tightly audited and regulated. The design must make it + easy to audit the finances of the mint. + \item[Ease of Deployment] %The system should be easy to deploy for + % real-world applications. In order to lower the entry barrier and + % acceptance of the system, a gateway to the existing financial + % system should be provided, i.e. by integrating internet-banking + % protocols such as HBCI/FinTAN. + The digital currency should be + tied 1:1 to existing currencies (such as EUR or USD) to avoid + exposing users to unnecessary risks from currency fluctuations. + Moreover, the system must have a free software reference + implementation and an open protocol standard. +% The protocol should +% be able to run easily over HTTP(S). + \item[Low resource consumption] In order to minimize the operating + costs and environmental impact of the payment system, it must + avoid the reliance on expensive and ``wasteful'' computations + such as proof-of-work. + \item[Large Payments and Microdonations] The payment system needs to + handle large payments in a reliable manner. Furthermore, for + microdonations the system should allow sacrificing reliability to + achieve economic viability. +\end{description} + +Taler builds on ideas from Chaum~\cite{chaum1983blind}, who proposed a +digital currency system that would provide (some) customer anonymity +while disclosing the identity of the merchants. Chaum's digital cash +system had some limitations and ultimately failed to be widely +adopted. In our assessment, key reasons include: + +\begin{itemize} + \item The use of patents to protect the technology; a payment system + must be libre --- free software --- to have a chance for widespread + adoption. + \item The use of off-line payments and thus deferred detection of + double-spending, which could require the mint to attempt to recover + funds from customers via the legal system. This creates a + significant business risk for the mint, as the system is not + self-enforcing from the perspective of the mint. In 1983 off-line + payments might have been a necessary feature. However, today + requiring network connectivity is feasible and avoids the business + risks associated with deferred fraud detection. + \item % In addition to the risk of legal disputes with fradulent + % merchants and customers, + Chaum's published design does not clearly + limit the financial damage a mint might suffer from the + disclosure of its private online signing key. +% \item Chaum did not support fractional payments, and Brand's +% extensions for fractional payments broke unlinkability and thus +% limited anonymity. Chaum also did not support microdonations, +% leaving an opportunity for expanding payments into additional areas +% unexplored. +% \item Chaum's system was implemented at a time where the US market +% was still dominated by paper checks and the European market was +% fragmented into dozens of currencies. Today, SEPA provides a +% unified currency and currency transfer method for most of Europe, +% significantly lowering the barrier to entry into this domain for +% a larger market. +\end{itemize} + +This paper describes Taler, a simple and practical payment with the +above goals in mind. The basic idea is to use Chaum's model of +customer, merchant and mint (Figure~\ref{fig:cmm}) where the customer +withdraws digital currency from the mint with unlinkability provided +via blind signatures. In contrast to Chaum, Taler uses online +detection of double-spending, thus ensuring the merchant instantly +that a transaction is valid. Instead of using cryptographic methods +to enable fractional payments, the customer can simply include +the fraction of a coin's value that is to be paid to the merchant in +his message to the merchant. + + +\begin{figure}[h] +\centering +\begin{tikzpicture} + + +\tikzstyle{def} = [node distance= 7em and 10em, inner sep=1em, outer sep=.3em]; +\node (origin) at (0,0) {}; +\node (mint) [def,above=of origin,draw]{Mint}; +\node (customer) [def, draw, below left=of origin] {Customer}; +\node (merchant) [def, draw, below right=of origin] {Merchant}; + +\tikzstyle{C} = [color=black, line width=1pt] +\draw [<-, C] (customer) -- (mint) node [midway, above, sloped] (TextNode) {withdraw coins}; +\draw [<-, C] (mint) -- (merchant) node [midway, above, sloped] (TextNode) {deposit coins}; +\draw [<-, C] (merchant) -- (customer) node [midway, above, sloped] (TextNode) {spend coins}; +\end{tikzpicture} +\caption{Taler's system model for the payment system is based on Chaum~\cite{chaum1983blind}.} +\label{fig:cmm} +\end{figure} + +Online fraud detection can create problems if the network fails during +the initial steps of a transaction. For example, a law enforcement +agency might try to entrap a customer by offering illicit goods and +then aborting the transaction after learning the public key of the +coin. If the customer were to then later spend that coin on a +purchase with shipping, the law enforcement agency could link the two +transactions and might be able to use the shipping to deanonymize the +customer. Similarly, fractional payments also lead to the +possibility of customers wanting to legitimately use the same coin +twice. Taler addresses this problem by allowing customers to {\em + refresh} coins. Refreshing means that a customer is able to +exchange one coin for a fresh coin, with the old and the new coin +being unlinkable (except for the customer himself). Taler ensures +that the {\em entity} of the user owning the new coin is the same as the +entity of the user owning the old coin, thus making sure that the +refreshing protocol cannot be abused for money laundering or other +illicit transactions. + + +\section{Related Work} + +\subsection{Blockchain-based currencies} + +In recent years, a class of decentralized electronic payment systems, +based on collectively recorded and verified append-only public +ledgers, have gained immense popularity. The most well-known protocol +in this class is Bitcoin~\cite{nakamoto2008bitcoin}. An initial +concern with Bitcoin was the lack of anonymity, as all Bitcoin +transactions are recorded for eternity, which can enable +identification of users. In theory, this concern has been addressed +with the Zerocoin extension to the protocol~\cite{miers2013zerocoin}. + +While these protocols dispense with the need for a central, trusted +authority and provide anonymity, we argue there are some major, +irredeemable problems inherent in these systems: + +\begin{itemize} + \item Bitcoins are not (easily) taxable. The legality and legitimacy of + this aspect is questionable. The Zerocoin extension would only make + this worse. + \item Bitcoins can not be bound to any fiat currency, and are subject to + significant value fluctuations. While such fluctuations may be + acceptable for high-risk investments, they make Bitcoin unsuitable as + a medium of exchange. + \item The computational puzzles solved by Bitcoin nodes with the purpose + of securing the block chain + consume a considerable amount of computational resources and thus + energy. Thus, Bitcoin does not represent an environmentally responsible + design. + \item Anyone can easily start an alternative Bitcoin transaction chain + (a so-called AltCoin) and, if successful, reap the benefits of the low + cost to initially create coins via computation. As a result, dozens of + AltCoins have been created, often without any significant changes to the + technology. A large number of AltCoins creates additional overheads for + currency exchange and exascerbates the problems with currency fluctuations. +\end{itemize} + +\subsection{Chaum-style electronic cash} + +Chaum's original digital cash system~\cite{chaum1983blind} was +extended by Brands~\cite{brands1993efficient} with the ability to +perform fractional payments; however, the transactions performed with +the same coin then become linkable. +% +%Some argue that the focus on technically perfect but overwhelmingly +%complex protocols, as well as the the lack of usable, practical +%solutions lead to an abandonment of these ideas by +%practitioners~\cite{selby2004analyzing}. +% +To our knowledge, the only publicly available effort to implement +Chaum's idea is +Opencoin~\cite{dent2008extensions}. However, +Opencoin seems to be neither actively developed nor used, and it is +not clear to what degree the implementation is even complete. Only a +partial description of the Opencoin protocol is available to date. + +\subsection{Peppercoin} + +Peppercoin~\cite{rivest2004peppercoin} is a microdonation protocol. +The main idea of the protocol is to reduce transaction costs by +minimizing the number of transactions that are processed directly by +the mint. Instead of always paying, the customer ``gambles'' with the +merchant for each microdonation. Only if the merchant wins, the +microdonation is upgraded to a macropayment to be deposited at the +mint. Peppercoin does not provide customer-anonymity. The proposed +statistical method for mints detecting fraudulent cooperation between +customers and merchants at the expense of the mint not only creates +legal risks for the mint (who has to make a statistical argument), but +also would require the mint to learn about microdonations where the +merchant did not get upgraded to a macropayment. Thus, it is unclear +how much Peppercoin would actually do to reduce the computational +burden on the mint. + + +\section{Design} + +The payment system we propose is built on the blind signature +primitive proposed by Chaum, but extended with additional +constructions to provide unlinkability, online fraud detection and +taxability. + +As with Chaum, the Taler system comprises three principal types of +actors: The \emph{customer} is interested in receiving goods or +services from the \emph{merchant} in exchange for payment. When +making a transaction, both the customer and the merchant must agree on +the same \emph{mint}, which serves as an intermediary for the +financial transaction between the two. The mint is responsible for +allowing the customer to obtain the anonymous digital currency and for +enabling the merchant to convert the anonymous digital currency back +to some traditional currency. + +\subsection{Security model} + +Taler's security model assumes that cryptographic primitives are +secure and that each participant is under full control of his system. +The contact information of the mint is known to both customer and +merchant from the start. Furthermore, the merchant is known to the +customer and we assume that an anonymous, reliable bi-directional +communication channel can be established by the customer to both the +mint and the merchant. + +The mint is trusted to hold funds of its customers and to forward them +when receiving the respective deposit instructions from the merchants. +Customer and merchant can have some assurances about the mint's +liquidity and operation, as the mint has proven reserves, is subject +to the law, and can have its business is regularly audited (for +example, by the government or a trusted third party auditor). +Audits of the mint's accounts must reveal any possible fraud. +% +The merchant is trusted to deliver the service or goods to the +customer upon receiving payment. The customer can seek legal relief +to achieve this, as he must get cryptographic proofs of the contract +and that he paid his obligations. +% +Neither the merchant nor the customer may have any ability to {\em + effectively} defraud the mint or the state collecting taxes. Here, +``effectively'' means that the expected return for fraud is negative. +% +Note that customers do not need to be trusted in any way, and that in +particular it is never necessary for anyone to try to recover funds +from customers using legal means. + + +\subsection{Taxability and Entities} + +Electronic coins are trivially copied between machines. Thus, we must +clarify what kinds of operations can even be expected to be taxed. +After all, without instrusive measures to take away control of the +computing platform from its users, copying an electronic wallet from +one computer to another can hardly be prevented by a payment system. +Furthermore, it would also hardly be appropriate to tax the moving of +funds between two computers owned by the same individual. We thus +need to clarify which kinds of transfers we expect to tax. + +Taler is supposed to ensure that the state can tax {\em transactions}. +We define a transaction as the transfer of funds between {\em mutually + distrustful} entities. Two entities are assumed to be mutually +distrustful if they are unwilling to share control over assets. If a +private key is shared between two entities, then both entities have +equal access to the credentials represented by the private key. In a +payment system this means that either entity could spent the +associated funds. Assuming the payment system has effective +double-spending detection, this means that either entity has to +constantly fear that the funds might no longer be available to it. +Thus, ``transfering'' funds by sharing a private key implies that +receiving party must trust the sender. In Taler, making funds +available by sharing a private key and thus sharing control is {\bf + not} considered a {\em transaction} and thus {\bf not} recorded for +taxation. + +A {\em transaction} is a transfer where it is assured that one entity +gains control over funds while at the same time another entity looses +control over those funds. Taler ensures taxability only when some +entity acquires exclusive control over digital coins. For +transactions, the state can obtain information from the mint (or the +bank) that identifies the entity that received the digital coins as +well as the exact value of those coins. Taler also allows the mint +(and thus the state) to learn the value of digital coins withdrawn by +a customer --- but not how, where or when they were spent. Finally, +to enable audits, the current balance and profits of the mint are also +easily determined. + +\subsection{Anonymity} + +An anonymous communication channel (e.g. via Tor~\cite{tor-design}) is +used for all communication between the customer and the merchant. +Thus, the customer can remain anonymous; however, the system does reveal +that the customer is one of the patrons of the mint. Naturally, the +customer-merchant operation might leak other information about the +customer, such as a shipping address. Such purchase-specific +information leakage is outside of the scope of this work. + +The customer may use an anonymous communication channel for the +communication with the mint to avoid leaking IP address information; +however, the mint will anyway be able to determine the customer's +identity from the (SEPA) transfer that the customer initiates to +obtain anonymous digital cash. The scheme is anonymous +because the mint will be unable to link the known identity of the +customer that withdrew anonymous digital currency to the {\em + purchase} performed later at the merchant. +% All the mint will be +%able to confirm is that the customer is {\em one} of its patrons who +%previously obtained the anonymous digital currency --- and of course +%that the coin was not spent before. + +While the customer thus has anonymity for his purchase, the mint will +always learn the merchant's identity (which is necessary for +taxation), and thus the merchant has no reason to anonymize his +communication with the mint. +% Technically, the merchant could still +%use an anonymous communication channel to communicate with the mint. +%However, in order to receive the traditional currency the mint will +%require (SEPA) account details for the deposit. + +%As both the initial transaction between the customer and the mint as +%well as the transactions between the merchant and the mint do not have +%to be done anonymously, there might be a formal business contract +%between the customer and the mint and the merchant and the mint. Such +%a contract may provide customers and merchants some assurance that +%they will actually receive the traditional currency from the mint +%given cryptographic proof about the validity of the transaction(s). +%However, given the business overheads for establishing such contracts +%and the natural goal for the mint to establish a reputation and to +%minimize cost, it is more likely that the mint will advertise its +%external auditors and proven reserves and thereby try to convince +%customers and merchants to trust it without a formal contract. + + +\subsection{Coins} + +A \emph{coin} is a digital token which derives its financial value +from a signature on the coin's identifier by a mint. The mint is +expected to have multiple {\em coin signing key} pairs available for +signing, each representing a different coin denomination. + +The coin signing keys have an expiration date (typically measured in +years), and coins signed with a coin signing key must be spent (or +exchanged for new coins) before that expiration date. This allows the +mint to limit the amount of state it needs to keep to detect +double spending attempts. Furthermore, the mint is expected to use each coin +signing key only for a limited number of coins, for example by +limiting its use to sign coins to a week or a month. That way, if the +private coin signing key were to be compromised, the mint can detect +this once more coins are redeemed than the total that was signed into +existence using the respective coin signing key. In this case, the +mint can allow the original set of customers to exchange the coins +that were signed with the compromised private key, while refusing +further transactions from merchants if they involve those coins. As a +result, the financial damage of loosing a private signing key can be +limited to at most twice the amount originally signed with that key. +To ensure that the mint does not enable deanonymization of users by +signing each coin with a fresh coin signing key, the mint must +publicly announce the coin signing keys in advance. Those +announcements are expected to be signed with an off-line long-term +private {\em master signing key} of the mint and possibly the auditor. + +Before a customer can withdraw a coin from the mint, he has to pay the +mint the value of the coin, as well as processing fees. This is done +using other means of payments, such as SEPA transfers~\cite{sepa}. +The subject line of the transfer must contains {\em withdrawal + authorization key}, a public key for digital signatures generated by +the customer. When the mint receives a transfer with a public key in +the subject, it adds the funds to a {\em reserve} identified by the +withdrawl authorization key. By signing the withdrawl messages using +the withdrawl authorization key, the customer can prove to the mint +that he is authorized to withdraw anonymous digital coins from the +reserve. The mint will record the withdrawl messages with the reserve +record as proof that the anonymous digital coin was created for the +correct customer. + +After a coin is minted, the customer is the only entity that knows the +private key of the coin, making him the \emph{owner} of the coin. The +coin can be identified by the mint by its public key; however, due to +the use of blind signatures, the mint does not learn the public key +during the minting process. Knowledge of the private key of the coin +enables the owner to spent the coin. If the private key is shared +with others, they also become owners of the coin. + +\subsection{Coin spending} + +To spent a coin, the coin's owner needs to sign a {\em deposit + request} specifying the amount, the merchant's account information +and a {\em business transaction-specific hash} using the coin's +private key. A merchant can then transfer this permission of the +coin's owner to the mint to obtain the amount in traditional currency. +If the customer is cheating and the coin was already spent, the mint +provides cryptographic proof of the fraud to the merchant, who will +then refuse the transaction. +% The mint is typically expected +%to transfer the funds to the merchant using a SEPA transfer or similar +%methods appropriate to the domain of the traditional currency. + +%The mint needs to ensure that a coin can only be spent once. This is +%done by storing the public keys of all deposited coins (together with +%the deposit request and the owner's signature confirming the +%transaction). The mint's state can be limited as coins signed with +%expired coin sigining keys do not have to be retained. + +\paragraph{Partial spending.} + +To allow exact payments without requiring the customer to keep a large +amount of ``change'' in stock, the payment systems allows partial +spending of coins. Consequently, the mint the must not only store the +identifiers of spent coins, but also the fraction of the coin that has +been spent. + +%\paragraph{Online checks.} +% +%For secure transactions (non-microdonations), the merchant is expected +%to perform an online check to detect double-spending. In the simplest +%case, the merchant simply directly confirms the validity of the +%deposit permission signed by the coin's owner with the mint, and then +%proceeds with the contract. + +\paragraph{Incremental payments.} + +For services that include pay-as-you-go billing, customers can over +time sign deposit permissions for an increasing fraction of the value +of a coin to be paid to a particular merchant. As checking with the +mint for each increment might be expensive, the coin's owner can +instead sign a {\em lock permission}, which allows the merchant to get +an exclusive right to redeem deposit permissions for the coin for a +limited duration. The merchant uses the lock permission to determine +if the coin has already been spent and to ensure that it cannot be +spent by another merchant for the {\em duration} of the lock as +specified in the lock permission. If the coin has been spent or is +already locked, the mint provides the owner's deposit or locking +request and signature to prove the attempted fraud by the customer. +Otherwise, the mint locks the coin for the expected duration of the +transaction (and remembers the lock permission). The merchant and the +customer can then finalize the business transaction, possibly +exchanging a series of incremental payment permissions for services. +Finally, the merchant then redeems the coin at the mint before the +lock permission expires to ensure that no other merchant spends the +coin first. + + +\paragraph{Probabilistic spending.} + +Similar to Peppercoin, Taler supports probabilistic spending of coins to +support cost-effective transactions for small amounts. Here, an +ordinary transaction is performed based on the result of a biased coin +flip with a probability related to the desired transaction amount in +relation to the value of the coin. Unlike Peppercoin, in Taler either +the merchant wins and the customer looses the coin, or the merchant +looses and the customer keeps the coin. Thus, there is no opportunity +for the merchant and the customer to conspire against the mint. To +determine if the coin is to be transferred, merchant and customer +execute a secure coin flipping protocol~\cite{blum1981}. The commit +values are included in the business contract and are revealed after +the contract has been signed using the private key of the coin. If +the coin flip is decided in favor of the merchant, the merchant can +redeem the coin at the mint. + +One issue in this protocol is that the customer may use a worthless +coin by offering a coin that has already been spent. This kind of +fraud would only be detected if the customer actually lost the coin +flip, and at this point the merchant might not be able to recover from +the loss. A fradulent anonymous customer may run the protocol using +already spent coins until the coin flip is in his favor. As with +incremental spending, lock permissions could be used to ensure that +the customer cannot defraud the merchant by offering a coin that has +already been spent. However, as this means involving the mint even if +the merchant looses the coin flip, such a scheme is unsuitable for +microdonations as the transaction costs from involving the mint might +be disproportionate to the value of the transaction, and thus with +locking the probabilistic scheme has no advantage over simply using +fractional payments. + +Hence, Taler uses probabilistic transactions {\em without} the online +double-spending detection. This enables the customer to defraud the +merchant by paying with a coin that was already spent. However, as, +by definition, such microdonations are for tiny amounts, the incentive +for customers to pursue this kind of fraud is limited. + + +\subsection{Refreshing Coins} + +In the payment scenarios there are several cases where a customer will +reveal the public key of a coin to a merchant, but not ultimately sign +over the full value of the coin. If the customer then continues to +use the remainder of the value of the coin in other transactions, +merchants and the mint could link the various transactions as they all +share the same public key for the coin. + +Thus, the owner might want to exchange such a {\em dirty} coin for a +{\em fresh} coin to ensure unlinkability of future transactions with +the previous operation. Even if a coin is not dirty, the owner of a +coin may want to exchange a coin if the respective coin signing key is +about to expire. All of these operations are supported with the {\em + coin refreshing protocol}, which allows the owner of a coin to +exchange existing coins (or their remaining value) for fresh coins +with a new public-private key pairs. Refreshing does not use the +ordinary spending operation as the owner of a coin should not have to +pay taxes on this operation. Because of this, the refreshing protocol +must assure that owner stays the same. After all, the coin refreshing +protocol must not be usable for transactions, as transactions in Taler +must be taxable. + +Thus, one main goal of the refreshing protocol is that the mint must +not be able to link the fresh coin's public key to the public key of +the dirty coin. The second main goal is to enable the mint to ensure +that the owner of the dirty coin can determine the private key of the +fresh coin. This way, refreshing cannot be used to construct a +transaction --- the owner of the dirty coin remains in control of the +fresh coin. + +As with other operations, the refreshing protocol must also protect +the mint from double-spending; similarly, the customer has to have +cryptographic evidence if there is any misbehaviour by the mint. +Finally, the mint may choose to charge a transaction fee for +refreshing by reducing the value of the generated fresh coins +in relation to the value of the melted coins. +%Naturally, all such transaction fees should be clearly stated as part +%of the business contract offered by the mint to customers and +%merchants. + + +\section{Taler's Cryptographic Protocols} + +% In this section, we describe the protocols for Taler in detail. + +For the sake of brevity, we do not specifically state that the +recipient of a signed message always first checks that the signature +is valid. Also, whenever a signed message is transmitted, it is +assumed that the receiver is told the public key (or knows it from the +context) and that the signature contains additional identification as +to the purpose of the signature (such that it is not possible to +use a signature from one protocol step in a different context). + +When the mint signs messages (not coins), an {\em online message + signing key} of the mint is used. The mint's long-term offline key +is used to certify both the coin signing keys as well as the online +message signing key of the mint. The mint's long-term offline key is +assumed to be well-known to both customers and merchants, for example +because it is certified by the auditors. + +As we are dealing with financial transactions, we explicitly state +whenever entities need to safely commit data to persistent storage. +As long as those commitments persist, the protocol can be safely +resumed at any step. Commitments to disk are cummulative, that is an +additional commitment does not erase the previously committed +information. Keys and thus coins always have a well-known expiration +date; information committed to disk can be discarded after the +expiration date of the respective public key. Customers can also +discard information once the respective coins have been fully spent, +and merchants may discard information once payments from the mint have +been received (assuming records are also no longer needed for tax +authorities). The mint's bank transfers dealing in traditional +currency are expected to be recorded for tax authorities to ensure +taxability. + +\subsection{Withdrawal} + +To withdraw anonymous digital coins, the customer performs the +following interaction with the mint: + +\begin{enumerate} + \item The customer identifies a mint with an auditor-approved + coin signing public-private key pair $K := (K_s, K_p)$ + and randomly generates: + \begin{itemize} + \item withdrawal key $W := (W_s,W_p)$ with private key $W_s$ and public key $W_p$, + \item coin key $C := (C_s,C_p)$ with private key $C_s$ and public key $C_p$, + \item blinding factor $b$, + \end{itemize} + and commits $\langle W, C, b \rangle$ to disk. + \item The customer transfers an amount of money corresponding to (at least) $K_p$ to the mint, with $W_p$ in the subject line of the transaction. + \item The mint receives the transaction and credits the $W_p$ reserve with the respective amount in its database. + \item The customer sends $S_W(E_b(C_p))$ to the mint to request withdrawl of $C$; here, $E_b$ denotes Chaum-style blinding with blinding factor $b$. + \item The mint checks if the same withdrawl request was issued before; in this case, it sends $S_{K}(E_b(C_p))$ to the customer.\footnote{Here $S_K$ + denotes a Chaum-style blind signature with private key $K_s$.} + If this is a fresh withdrawl request, the mint performs the following transaction: + \begin{enumerate} + \item checks if the reserve $W_p$ has sufficient funds for a coin of value corresponding to $K_p$ + \item stores the withdrawl request $\langle S_W(E_b(C_p)), S_K(E_b(C_p)) \rangle$ in its database for future reference, + \item deducts the amount corresponding to $K_p$ from the reserve, + \item and sends $S_{K}(E_b(C_p))$ to the customer. + \end{enumerate} + If the guards for the transaction fail, the mint sends an descriptive error back to the customer, + with proof that it operated correctly (i.e. by showing the transaction history for the reserve). + \item The customer computes (and verifies) the unblind signature $S_K(C_p) = D_b(S_K(E_b(C_p)))$. + The customer writes $\langle S_K(C_p), C_s \rangle$ to disk (effectively adding the coin to the + local wallet) for future use. +\end{enumerate} + +\subsection{Exact, partial and incremental spending} + +A customer can spend coins at a merchant, under the condition that the +merchant trusts the mint that minted the coin. Merchants are +identified by their public key $M := (M_s, M_p)$, which must be known +to the customer apriori. + +The following steps describe the protocol between customer, merchant and mint +for a transaction involving a coin $C := (C_s, C_p)$ which is previously signed +by a mint's denomination key $K$, i.e. the customer posses +$\widetilde{C} := S_K(C_p)$: + +\begin{enumerate} +\item\label{offer} The merchant sends an \emph{offer:} $\langle S_M(m, f), + \vec{D} \rangle$ containing the price of the offer $f$, a transaction + ID $m$ and the list of mints $D_1, \ldots, D_n$ accepted by the merchant + where each $D_i$ is a mint's public key. +\item\label{lock} The customer must possess or acquire a coin minted by a mint that is + accepted by the merchant, i.e. $K$ should be publicly signed by some $D_i + \in \{D_1, D_2, \ldots, D_n\}$, and has a value $\geq f$. + + Customer then generates a \emph{lock-permission} $\mathcal{L} := + S_c(\widetilde{C}, t, m, f, M_p)$ where $t$ specifies the time until which the + lock is valid and sends $\langle \mathcal{L}, D_i\rangle$ to the merchant, + where $D_i$ is the mint which signed $K$. +\item The merchant asks the mint to apply the lock by sending $\langle + \mathcal{L} \rangle$ to the mint. +\item The mint validates $\widetilde{C}$ and detects double spending if there is + a lock-permission record $S_c(\widetilde{C}, t', m', f', M_p')$ where $(t', + m', f', M_p') \neq (t, m, f, M_p)$ or a \emph{deposit-permission} record for + $C$ and sends it to the merchant, who can then use it prove to the customer + and subsequently ask the customer to issue a new lock-permission. + + If double spending is not found, the mint commits $\langle \mathcal{L} \rangle$ to disk + and notifies the merchant that locking was successful. +\item\label{contract} The merchant creates a digitally signed contract + $\mathcal{A} := S_M(m, f, a, H(p, r))$ where $a$ is data relevant to the contract + indicating which services or goods the merchant will deliver to the customer, and $p$ is the + merchant's payment information (e.g. his IBAN number) and $r$ is an random nounce. + The merchant commits $\langle \mathcal{A} \rangle$ to disk and sends it to the customer. +\item The customer creates a + \emph{deposit-permission} $\mathcal{D} := S_c(\widetilde{C}, f, m, M_p, H(a), H(p, r))$, commits + $\langle \mathcal{A}, \mathcal{D} \rangle$ to disk and sends $\mathcal{D}$ to the merchant. +\item\label{invoice_paid} The merchant commits the received $\langle \mathcal{D} \rangle$ to disk. +\item The merchant gives $(\mathcal{D}, p, r)$ to the mint, revealing his + payment information. +\item The mint verifies $(\mathcal{D}, p, r)$ for its validity. A + \emph{deposit-permission} for a coin $C$ is valid if: + \begin{itemize} + \item $C$ is not refreshed already + \item there exists no other \emph{deposit-permission} on disk for \\ + $\mathcal{D'} := S_c(\widetilde{C}, f', m', M_p', H(a'), H(p', r'))$ for $C$ + such that \\ $(f', m',M_p', H(a')) \neq (f, m, M_p, H(a))$ + \item $H(p, r) := H(p', r')$ + \end{itemize} + If $C$ is valid and no other \emph{deposit-permission} for $C$ exists on disk, the + mint does the following: + \begin{enumerate} + \item if a \emph{lock-permission} exists for $C$, it is deleted from disk + \item\label{transfer} transfers an amount of $f$ to the merchant's bank account + given in $p$. The subject line of the transaction to $p$ must contain + $H(\mathcal{D})$. + \item $\langle \mathcal{D}, p, r \rangle$ is commited to disk. + \end{enumerate} + If the deposit record $\langle \mathcal{D}, p, r \rangle$ already exists, + the mint sends it to the merchant, but does not transfer money to $p$ again. +\end{enumerate} + +To facilitate incremental spending of a coin $C$ in a single transaction, the +merchant makes an offer in Step~\ref{offer} with a maximum amount $f_{max}$ he +is willing to charge in this transaction from the coin $C$. After obtaining the +lock on $C$ for $f_{max}$, the merchant makes a contract in Step~\ref{contract} +with an amount $f \leq f_{max}$. The protocol follows with the following steps +repeated after Step~\ref{invoice_paid} whenever the merchant wants to charge an +incremental amount up to $f_{max}$: + +\begin{enumerate} + \setcounter{enumi}{4} +\item The merchant generates a new contract $ \mathcal{A}' := S_M(m, f', a', H(p, + r)) $ after obtaining the deposit-permission for a previous contract. Here + $f'$ is the accumulated sum the merchant is charging the customer, of which + the merchant has received a deposit-permission for $f$ from the previous + contract \textit{i.e.}~$f ,C](offer) -- (A); +%\draw [->,C](A) -- (B); +%\draw [->,C](B) -- (C); +%\draw [->,C](C) -- (D); +%\draw [->,C](D) -- (E); +%\draw [->,C](E) -- (F); +%\draw [->,C](F) -- (G); +% +%\draw [->,C, bend right, shorten <=2mm] (E.east) +% to[out=-135,in=-45,distance=3.8cm] node[left] {aggregate} (D.east); +%\end{tikzpicture} +%\caption{Interactions between a customer, merchant and mint in the coin spending +% protocol} +%\label{fig:spending_protocol_interactions} +%\end{figure} + + +\subsection{Probabilistic spending} + +The following steps are executed for microdonations with upgrade probability $p$: +\begin{enumerate} + \item The merchant sends an offer to the customer. + \item The customer sends a commitment $H(r_c)$ to a random + value $r_c \in [0,2^R)$, where $R$ is a system parameter. + \item The merchant sends random $r_m \in [0,2^R)$ to the customer. + \item The customer computes $p' := (|r_c - r_m|) / (2^R)$. + If $p' < p$, the customer sends a coin with deposit-permission to the merchant. + Otherwise, the customer sends $r_c$ to the merchant. + \item The merchant deposits the coin, or checks if $r_c$ is consistent + with $H(r_c)$. +\end{enumerate} + +\subsection{Refreshing} + +The following protocol is executed in order to refresh a coin $C'$ of denomination $K$ to +a fresh coin $\widetilde{C}$ with the same denomination. In the protocol, $\kappa \ge 3$ is a security parameter. + +\begin{enumerate} + \item For each $i = 1,\ldots,\kappa$, the customer + \begin{itemize} + \item randomly generates transfer key $T^{(i)} := \left(t^{(i)}_s,T^{(i)}_p\right)$ where $T^{(i)}_p := t^{(i)}_s \cdot G$, + \item randomly generates coin key pair $C^{(i)} := \left(c_s^{(i)}, C_p^{(i)}\right)$ where $C^{(i)}_p := c^{(i)}_s \cdot G$, + \item randomly generates blinding factors $b_i$, + \item computes $E_i := E_{K_i}\left(c_s^{(i)}, b_i\right)$ where $K_i := c'_s \cdot T_p^{(i)}$ (The encryption key $K_i$ is + computed by multiplying the private key $c'_s$ of the original coin with the point on the curve + that represents the public key of the transfer key $T^{(i)}$.), + \end{itemize} + and commits $\langle C', \vec{T}, \vec{C}, \vec{b} \rangle$ to disk. + \item The customer computes $B_i := E_{b_i}(C^{(i)}_p)$ and sends commitments + $S_{C'}(\vec{E}, \vec{B}, \vec{T}))$ for $i=1,\ldots,\kappa$ to the mint; + here $E_{b_i}$ denotes Chaum-style blinding with blinding factor $b_i$. + \item The mint generates a random $\gamma$ with $1 \le \gamma \le \kappa$ and + marks $C'_p$ as spent by committing + $\langle C', \gamma, S_{C'}(\vec{E}, \vec{B}, \vec{T}) \rangle$ to disk + \item The mint sends $S_K(C'_p, \gamma)$ to the customer.\footnote{Instead of $K$, it is also + possible to use any equivalent mint signing key known to the customer here, as $K$ merely + serves as proof to the customer that the mint selected this particular $\gamma$.} + \item The customer commits $\langle C', S_K(C'_p, \gamma) \rangle$ to disk. + \item The customer computes $\mathfrak{R} := \left(t_s^{(i)}, C_p^{(i)}, b_i\right)_{i \ne \gamma}$ + and sends $S_{C'}(\mathfrak{R})$ to the mint. + \item \label{step:refresh-ccheck} The mint checks whether $\mathfrak{R}$ is consistent with the commitments; + specifically, it computes for $i \not= \gamma$: + \begin{itemize} + \item $\overline{K}_i := t_s^{(i)} \cdot C_p'$, + \item $(\overline{c}_s^{(i)}, \overline{b}_i) := D_{\overline{K}_i}(E_i)$, + \item $\overline{C}^{(i)}_p := \overline{c}_s^{(i)} \cdot G$, + \item $\overline{B}_i := E_{b_i}(C_p^{(i)})$, + \item $\overline{T}_i := t_s^{(i)} G$, + \end{itemize} + and checks if $\overline{C}^{(i)}_p = C^{(i)}_p$ and $H(E_i, \overline{B}_i, \overline{T}^{(i)}_p) = H(E_i, B_i, T^{(i)}_p)$ + and $\overline{T}_i = T_i$. + + \item \label{step:refresh-done} If the commitments were consistent, the mint sends the blind signature + $\widetilde{C} := S_{K}(B_\gamma)$ to the customer. + Otherwise, the mint responds with an error and confiscates the value of $C'$, + committing $\langle C', \gamma, S_{C'}(\mathfrak{R}) \rangle$ to disk as proof for the attempted fraud. +\end{enumerate} + +%\subsection{N-to-M Refreshing} +% +%TODO: Explain, especially subtleties regarding session key / the spoofing attack that requires signature. + +\subsection{Linking} + +For a coin that was successfully refreshed, the mint responds to +a request $S_{C'}(\mathtt{link})$ with $(T^{(\gamma)}_p$, $E_{\gamma}, \widetilde{C})$. + +This allows the owner of the old coin to also obtain the private key +of the new coin, even if the refreshing protocol was illicitly +executed by another party who learned $C'_s$ from the old owner. + + +\section{Discussion} + +\subsection{Offline Payments} + +Chaum's original proposals for anonymous digital cash avoided the +locking and online spending steps detailed in this proposal by +providing a means to deanonymize customers involved in +double-spending. We believe that this is problematic as the mint or +the merchant will then still need out-of-band means to recover funds +from the customer, which may be impossible in practice. In contrast, +in our design only the mint may try to defraud the other participants +and disappear. While this is still a risk, this is likely manageable, +especially compared to recovering funds via the court system from +customers. + + +\subsection{Bona-fide microdonations} + +Evidently the customer can ``cheat'' by aborting the transaction in +Step 3 of the microdonation protocol if the outcome is unfavourable --- +and repeat until he wins. This is why Taler is suitable for +microdonations --- where the customer voluntarily contributes --- +and not for micropayments. + +Naturally, if the donations requested are small, the incentive to +cheat for minimal gain should be quite low. Payment software could +embrace this fact by providing an appeal to conscience in form of an +option labeled ``I am unethical and want to cheat'', which executes +the dishonest version of the payment protocol. + +If an organization detects that it cannot support itself with +microdonations, it can always choose to switch to the macropayment +system with slightly higher transaction costs to remain in business. + +\subsection{Merchant Tax Audits} + +For a tax audit on the merchant, the mint includes the business +transaction-specific hash in the transfer of the traditional +currency. A tax auditor can then request the merchant to reveal +(meaningful) details about the business transaction ($\mathcal{D}$, +$a$, $p$, $r$), including proof that applicable taxes were paid. + +If a merchant is not able to provide theses values, he can be punished +in relation to the amount transferred by the traditional currency +transfer. + + +\section{Future Work} + +%The legal status of the system needs to be investigated in the various +%legal systems of the world. However, given that the system enables +%taxation and is able to impose withdrawl limits and thus is not +%suitable for money laundering, we are optimistic that states will find +%the design desirable. + +We did not yet perform performance measurements for the various +operations. However, we are pretty sure that the computational and +bandwidth cost for transactions described in this paper is likely +small compared to other business costs for the mint. We expect costs +within the system to be dominated by the (replicated, transactional) +database. However, these expenses are again likely small in relation +to the business cost of currency transfers using traditional banking. +Here, mint operators should be able to reduce their expenses by +aggregating multiple transfers to the same merchant. + + +\section{Conclusion} + +We have presented an efficient electronic payment system that +simultaneously addresses the conflicting objectives created by the +citizen's need for privacy and the state's need for taxation. The +coin refreshing protocol makes the design flexible and enables a +variety of payment methods. The libre implementation and open +protocol may finally enable modern society to upgrade to proper +electronic wallets with efficient, secure and privacy-preserving +transactions. + +\bibliographystyle{alpha} +\bibliography{taler} +\end{document} diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 00000000..90ea1a04 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,9 @@ +*.o +*.deps +*.libs +*.lo +*.la +*.log +*.trs +*/__pycache__ +test-* \ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 00000000..485c4f9d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,2 @@ +AM_CPPFLAGS = -I$(top_srcdir)/src/include +SUBDIRS = include util mint diff --git a/src/include/Makefile.am b/src/include/Makefile.am new file mode 100644 index 00000000..d10d6d70 --- /dev/null +++ b/src/include/Makefile.am @@ -0,0 +1,7 @@ +EXTRA_DIST = \ + platform.h \ + taler_blind.h \ + taler_signatures.h \ + taler_types.h \ + taler_util.h \ + taler_rsa.h diff --git a/src/include/platform.h b/src/include/platform.h new file mode 100644 index 00000000..4cba7abf --- /dev/null +++ b/src/include/platform.h @@ -0,0 +1,56 @@ +/* + This file is part of TALER + (C) 2014 Chrisitan Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file include/platform.h + * @brief This file contains the includes and definitions which are used by the + * rest of the modules + * @author Sree Harsha Totakura + */ + +#ifndef PLATFORM_H_ +#define PLATFORM_H_ + +/* Include our configuration header */ +#ifndef HAVE_USED_CONFIG_H +# define HAVE_USED_CONFIG_H +# ifdef HAVE_CONFIG_H +# include "taler_config.h" +# endif +#endif + + +#if (GNUNET_EXTRA_LOGGING >= 1) +#define VERBOSE(cmd) cmd +#else +#define VERBOSE(cmd) do { break; }while(0) +#endif + +/* Include the features available for GNU source */ +#define _GNU_SOURCE + +/* Include GNUnet's platform file */ +#include + +/* Do not use shortcuts for gcrypt mpi */ +#define GCRYPT_NO_MPI_MACROS 1 + +/* Do not use deprecated functions from gcrypt */ +#define GCRYPT_NO_DEPRECATED 1 + +#endif /* PLATFORM_H_ */ + +/* end of platform.h */ diff --git a/src/include/taler_db_lib.h b/src/include/taler_db_lib.h new file mode 100644 index 00000000..41b46264 --- /dev/null +++ b/src/include/taler_db_lib.h @@ -0,0 +1,132 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + + +/** + * @file include/taler_db_lib.h + * @brief helper functions for DB interactions + * @author Sree Harsha Totakura + * @author Florian Dold + */ + +#ifndef TALER_DB_LIB_H_ +#define TALER_DB_LIB_H_ + +#include +#include "taler_util.h" + +#define TALER_DB_QUERY_PARAM_END { NULL, 0, 0 } +#define TALER_DB_QUERY_PARAM_PTR(x) { (x), sizeof (*(x)), 1 } +#define TALER_DB_QUERY_PARAM_PTR_SIZED(x, s) { (x), (s), 1 } + + +#define TALER_DB_RESULT_SPEC_END { NULL, 0, NULL } +#define TALER_DB_RESULT_SPEC(name, dst) { (void *) (dst), sizeof (*(dst)), (name) } +#define TALER_DB_RESULT_SPEC_SIZED(name, dst, s) { (void *) (dst), (s), (name) } + + +/** + * Description of a DB query parameter. + */ +struct TALER_DB_QueryParam +{ + /** + * Data or NULL + */ + const void *data; + /** + * Size of 'data' + */ + size_t size; + /** + * Non-null if this is not the last parameter. + * This allows for null as sentinal value. + */ + int more; +}; + + +/** + * Description of a DB result cell. + */ +struct TALER_DB_ResultSpec +{ + /** + * Destination for the data. + */ + void *dst; + + /** + * Allowed size for the data. + */ + size_t dst_size; + + /** + * Field name of the desired result. + */ + char *fname; +}; + + +/** + * Execute a prepared statement. + */ +PGresult * +TALER_DB_exec_prepared (PGconn *db_conn, + const char *name, + const struct TALER_DB_QueryParam *params); + + +/** + * Extract results from a query result according to the given specification. + * If colums are NULL, the destination is not modified, and GNUNET_NO + * is returned. + * + * @return + * GNUNET_YES if all results could be extracted + * GNUNET_NO if at least one result was NULL + * GNUNET_SYSERR if a result was invalid (non-existing field) + */ +int +TALER_DB_extract_result (PGresult *result, struct TALER_DB_ResultSpec *rs, int row); + + +int +TALER_DB_field_isnull (PGresult *result, + int row, + const char *fname); + + +int +TALER_DB_extract_amount_nbo (PGresult *result, + int row, + const char *val_name, + const char *frac_name, + const char *curr_name, + struct TALER_AmountNBO *r_amount_nbo); + + +int +TALER_DB_extract_amount (PGresult *result, + int row, + const char *val_name, + const char *frac_name, + const char *curr_name, + struct TALER_Amount *r_amount); + +#endif /* TALER_DB_LIB_H_ */ + +/* end of include/taler_db_lib.h */ diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h new file mode 100644 index 00000000..b224c4b3 --- /dev/null +++ b/src/include/taler_json_lib.h @@ -0,0 +1,101 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file include/taler_json_lib.h + * @brief helper functions for JSON processing using libjansson + * @author Sree Harsha Totakura + */ + +#ifndef TALER_JSON_LIB_H_ +#define TALER_JSON_LIB_H_ + +#include + + +/** + * Convert a TALER amount to a JSON + * object. + * + * @param amount the amount + * @return a json object describing the amount + */ +json_t * +TALER_JSON_from_amount (struct TALER_Amount amount); + + +/** + * Convert absolute timestamp to a json string. + * + * @param the time stamp + * @return a json string with the timestamp in @a stamp + */ +json_t * +TALER_JSON_from_abs (struct GNUNET_TIME_Absolute stamp); + + + +/** + * Convert binary data to a JSON string + * with the base32crockford encoding. + * + * @param data binary data + * @param size size of @a data in bytes + * @return json string that encodes @a data + */ +json_t * +TALER_JSON_from_data (const void *data, size_t size); + + +/** + * Parse given JSON object to Amount + * + * @param json the json object representing Amount + * @param r_amount where the amount has to be written + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_amount (json_t *json, + struct TALER_Amount *r_amount); + +/** + * Parse given JSON object to absolute time. + * + * @param json the json object representing absolute time in seconds + * @param r_abs where the time has to be written + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_abs (json_t *json, + struct GNUNET_TIME_Absolute *r_abs); + +/** + * Parse given JSON object to data + * + * @param json the json object representing data + * @param out the pointer to hold the parsed data. + * @param out_size the size of r_data. + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_data (json_t *json, + void *out, + size_t out_size); + + +#endif /* TALER_JSON_LIB_H_ */ + +/* End of taler_json_lib.h */ diff --git a/src/include/taler_microhttpd_lib.h b/src/include/taler_microhttpd_lib.h new file mode 100644 index 00000000..da601401 --- /dev/null +++ b/src/include/taler_microhttpd_lib.h @@ -0,0 +1,119 @@ + + +#ifndef TALER_MICROHTTPD_LIB_H_ +#define TALER_MICROHTTPD_LIB_H_ + + +#include +#include + + +/** + * Constants for JSON navigation description. + */ +enum +{ + /** + * Access a field. + * Param: const char * + */ + JNAV_FIELD, + /** + * Access an array index. + * Param: int + */ + JNAV_INDEX, + /** + * Return base32crockford encoded data of + * constant size. + * Params: (void *, size_t) + */ + JNAV_RET_DATA, + /** + * Return base32crockford encoded data of + * variable size. + * Params: (void **, size_t *) + */ + JNAV_RET_DATA_VAR, + /** + * Return a json object, which must be + * of the given type (JSON_* type constants, + * or -1 for any type). + * Params: (int, json_t **) + */ + JNAV_RET_TYPED_JSON +}; + + + +/** + * Send JSON object as response. Decreases + * the reference count of the JSON object. + * + * @param connection the MHD connection + * @param json the json object + * @param status_code the http status code + * @return MHD result code (MHD_YES on success) + */ +int +send_response_json (struct MHD_Connection *connection, + json_t *json, + unsigned int status_code); + + +/** + * Send a JSON object via an MHD connection, + * specified with the JANSSON pack syntax (see json_pack). + * + * @param connection connection to send the JSON over + * @param http_code HTTP status for the response + * @param fmt format string for pack + * @param ... varargs + * @return MHD_YES on success or MHD_NO on error + */ +int +request_send_json_pack (struct MHD_Connection *connection, + unsigned int http_code, + const char *fmt, ...); + + +/** + * Process a POST request containing a JSON object. + * + * @param connection the MHD connection + * @param con_cs the closure (contains a 'struct Buffer *') + * @param upload_data the POST data + * @param upload_data_size the POST data size + * @param json the JSON object for a completed request + * + * @returns + * GNUNET_YES if json object was parsed + * GNUNET_NO is request incomplete or invalid + * GNUNET_SYSERR on internal error + */ +int +process_post_json (struct MHD_Connection *connection, + void **con_cls, + const char *upload_data, + size_t *upload_data_size, + json_t **json); + + +/** + * Navigate through a JSON tree. + * + * Sends an error response if navigation is impossible (i.e. + * the JSON object is invalid) + * + * @param connection the connection to send an error response to + * @param root the JSON node to start the navigation at. + * @param ... navigation specification (see JNAV_*) + * @return GNUNET_YES if navigation was successful + * GNUNET_NO if json is malformed, error response was generated + * GNUNET_SYSERR on internal error + */ +int +request_json_require_nav (struct MHD_Connection *connection, + const json_t *root, ...); + +#endif /* TALER_MICROHTTPD_LIB_H_ */ diff --git a/src/include/taler_mint_service.h b/src/include/taler_mint_service.h new file mode 100644 index 00000000..ee3b30e3 --- /dev/null +++ b/src/include/taler_mint_service.h @@ -0,0 +1,303 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file include/taler_mint_service.h + * @brief C interface to the mint's HTTP API + * @author Sree Harsha Totakura + */ + +#ifndef _TALER_MINT_SERVICE_H +#define _TALER_MINT_SERVICE_H + +#include "taler_rsa.h" +#include "taler_util.h" +#include + +/** + * Handle to this library context + */ +struct TALER_MINT_Context; + +/** + * Handle to the mint + */ +struct TALER_MINT_Handle; + +/** + * Mint's signature key + */ +struct TALER_MINT_SigningPublicKey +{ + /** + * The signing public key + */ + struct GNUNET_CRYPTO_EddsaPublicKey key; + + /** + * Validity start time + */ + struct GNUNET_TIME_Absolute valid_from; + + /** + * Validity expiration time + */ + struct GNUNET_TIME_Absolute valid_until; +}; + + +/** + * Mint's denomination key + */ +struct TALER_MINT_DenomPublicKey +{ + /** + * The public key + */ + struct TALER_RSA_PublicKeyBinaryEncoded key; + + /** + * Timestamp indicating when the denomination key becomes valid + */ + struct GNUNET_TIME_Absolute valid_from; + + /** + * Timestamp indicating when the denomination key can’t be used anymore to + * withdraw new coins. + */ + struct GNUNET_TIME_Absolute withdraw_valid_until; + + /** + * Timestamp indicating when coins of this denomination become invalid. + */ + struct GNUNET_TIME_Absolute deposit_valid_until; + + /** + * The value of this denomination + */ + struct TALER_Amount value; + + /** + * The applicable fee for withdrawing a coin of this denomination + */ + struct TALER_Amount fee_withdraw; + + /** + * The applicable fee to spend a coin of this denomination + */ + struct TALER_Amount fee_deposit; + + /** + *The applicable fee to refresh a coin of this denomination + */ + struct TALER_Amount fee_refresh; +}; + + +/** + * Initialise a context. A context should be used for each thread and should + * not be shared among multiple threads. + * + * @return the context + */ +struct TALER_MINT_Context * +TALER_MINT_init (); + + +/** + * Cleanup library initialisation resources. This function should be called + * after using this library to cleanup the resources occupied during library's + * initialisation. + * + * @param ctx the library context + */ +void +TALER_MINT_cleanup (struct TALER_MINT_Context *ctx); + + +/** + * Initialise a connection to the mint. + * + * @param ctx the context + * @param hostname the hostname of the mint + * @param port the point where the mint's HTTP service is running. If port is + * given as 0, ports 80 or 443 are chosen depending on @a url. + * @param mint_key the public key of the mint. This is used to verify the + * responses of the mint. + * @return the mint handle; NULL upon error + */ +struct TALER_MINT_Handle * +TALER_MINT_connect (struct TALER_MINT_Context *ctx, + const char *hostname, + uint16_t port, + struct GNUNET_CRYPTO_EddsaPublicKey *mint_key); + +/** + * Disconnect from the mint + * + * @param mint the mint handle + */ +void +TALER_MINT_disconnect (struct TALER_MINT_Handle *mint); + + +/** + * A handle to get the keys of a mint + */ +struct TALER_MINT_KeysGetHandle; + +/** + * Functions of this type are called to signal completion of an asynchronous call. + * + * @param cls closure + * @param emsg if the asynchronous call could not be completed due to an error, + * this parameter contains a human readable error message + */ +typedef void (*TALER_MINT_ContinuationCallback) (void *cls, + const char *emsg); + +/** + * Functions of this type are called to provide the retrieved signing and + * denomination keys of the mint. No TALER_MINT_*() functions should be called + * in this callback. + * + * @param cls closure passed to TALER_MINT_keys_get() + * @param sign_keys NULL-terminated array of pointers to the mint's signing + * keys. NULL if no signing keys are retrieved. + * @param denom_keys NULL-terminated array of pointers to the mint's + * denomination keys; will be NULL if no signing keys are retrieved. + */ +typedef void (*TALER_MINT_KeysGetCallback) (void *cls, + struct TALER_MINT_SigningPublicKey **sign_keys, + struct TALER_MINT_DenomPublicKey **denom_keys); + + +/** + * Get the signing and denomination key of the mint. + * + * @param mint handle to the mint + * @param cb the callback to call with the keys + * @param cls closure for the above callback + * @param cont_cb the callback to call after completing this asynchronous call + * @param cont_cls the closure for the continuation callback + * @return a handle to this asynchronous call; NULL upon eror + */ +struct TALER_MINT_KeysGetHandle * +TALER_MINT_keys_get (struct TALER_MINT_Handle *mint, + TALER_MINT_KeysGetCallback cb, void *cls, + TALER_MINT_ContinuationCallback cont_cb, void *cont_cls); + +/** + * Cancel the asynchronous call initiated by TALER_MINT_keys_get(). This should + * not be called if either of the @a TALER_MINT_KeysGetCallback or @a + * TALER_MINT_ContinuationCallback passed to TALER_MINT_keys_get() have been + * called. + * + * @param get the handle for retrieving the keys + */ +void +TALER_MINT_keys_get_cancel (struct TALER_MINT_KeysGetHandle *get); + + +/** + * A Deposit Handle + */ +struct TALER_MINT_DepositHandle; + + +/** + * Callbacks of this type are used to serve the result of submitting a deposit + * permission object to a mint + * + * @param cls closure + * @param status 1 for successful deposit, 2 for retry, 0 for failure + * @param obj the received JSON object; can be NULL if it cannot be constructed + * from the reply + * @param emsg in case of unsuccessful deposit, this contains a human readable + * explanation. + */ +typedef void (*TALER_MINT_DepositResultCallback) (void *cls, + int status, + json_t *obj, + char *emsg); + +/** + * Submit a deposit permission to the mint and get the mint's response + * + * @param mint the mint handle + * @param cb the callback to call when a reply for this request is available + * @param cls closure for the above callback + * @param deposit_obj the deposit permission received from the customer along + * with the wireformat JSON object + * @return a handle for this request; NULL if the JSON object could not be + * parsed or is of incorrect format or any other error. In this case, + * the callback is not called. + */ +struct TALER_MINT_DepositHandle * +TALER_MINT_deposit_submit_json (struct TALER_MINT_Handle *mint, + TALER_MINT_DepositResultCallback cb, + void *cls, + json_t *deposit_obj); + + +#if 0 +/** + * Submit a deposit permission to the mint and get the mint's response. + * + * @param mint the mint handle + * @param cb the callback to call when a reply for this request is available + * @param cls closure for the above callback + * @param coin the public key of the coin + * @param denom_key denomination key of the mint which is used to blind-sign the + * coin + * @param ubsig the mint's unblinded signature + * @param transaction_id transaction identifier + * @param amount the amount to deposit + * @param merchant_pub the public key of the merchant + * @param h_contract hash of the contract + * @param h_wire hash of the wire format used + * @param csig signature of the coin over the transaction_id, amount, + * merchant_pub, h_contract and, h_wire + * @param wire_obj the wireformat object corresponding to h_wire + * @return a handle for this request + */ +struct TALER_MINT_DepositHandle * +TALER_MINT_deposit_submit_json_ (struct TALER_MINT_Handle *mint, + TALER_MINT_DepositResultCallback *cb, + void *cls, + struct GNUNET_CRYPTO_EddsaPublicKey *coin_pub, + struct TALER_BLIND_SigningPublicKey *denom_pub, + struct TALER_BLIND_Signature *ubsig, + uint64_t transaction_id, + struct TALER_Amount *amount, + struct GNUNET_CRYPTO_EddsaPublicKey *merchant_pub, + struct GNUNET_HashCode *h_contract, + struct GNUNET_HashCode *h_wire, + struct GNUNET_CRYPTO_EddsaSignature *csig, + json_t *wire_obj); +#endif + + +/** + * Cancel a deposit permission request. This function cannot be used on a + * request handle if a response is already served for it. + * + * @param the deposit permission request handle + */ +void +TALER_MINT_deposit_submit_cancel (struct TALER_MINT_DepositHandle *deposit); + +#endif /* _TALER_MINT_SERVICE_H */ diff --git a/src/include/taler_rsa.h b/src/include/taler_rsa.h new file mode 100644 index 00000000..1ed53001 --- /dev/null +++ b/src/include/taler_rsa.h @@ -0,0 +1,357 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file include/taler_rsa.h + * @brief RSA key management utilities. Some code is taken from gnunet-0.9.5a + * @author Sree Harsha Totakura + * + * Authors of the gnunet code: + * Christian Grothoff + * Krista Bennett + * Gerd Knorr + * Ioana Patrascu + * Tzvetan Horozov + */ + +#ifndef TALER_RSA_H +#define TALER_RSA_H + +#include +#include + +/** + * Length of an RSA KEY (n,e,len), 2048 bit (=256 octests) key n, 2 byte e + */ +#define TALER_RSA_KEY_LENGTH 258 + +/** + * @brief Length of RSA encrypted data (2048 bit) + * + * We currently do not handle encryption of data + * that can not be done in a single call to the + * RSA methods (read: large chunks of data). + * We should never need that, as we can use + * the GNUNET_CRYPTO_hash for larger pieces of data for signing, + * and for encryption, we only need to encode sessionkeys! + */ +#define TALER_RSA_DATA_ENCODING_LENGTH 256 + +/** + * The private information of an RSA key pair. + */ +struct TALER_RSA_PrivateKey; + + +GNUNET_NETWORK_STRUCT_BEGIN + +/** + * GNUnet mandates a certain format for the encoding + * of private RSA key information that is provided + * by the RSA implementations. This format is used + * to serialize a private RSA key (typically when + * writing it to disk). + */ +struct TALER_RSA_PrivateKeyBinaryEncoded +{ + /** + * Total size of the structure, in bytes, in big-endian! + */ + uint16_t len GNUNET_PACKED; + uint16_t sizen GNUNET_PACKED; /* in big-endian! */ + uint16_t sizee GNUNET_PACKED; /* in big-endian! */ + uint16_t sized GNUNET_PACKED; /* in big-endian! */ + uint16_t sizep GNUNET_PACKED; /* in big-endian! */ + uint16_t sizeq GNUNET_PACKED; /* in big-endian! */ + uint16_t sizedmp1 GNUNET_PACKED; /* in big-endian! */ + uint16_t sizedmq1 GNUNET_PACKED; /* in big-endian! */ + /* followed by the actual values */ +}; +GNUNET_NETWORK_STRUCT_END + + +/** + * @brief an RSA signature + */ +struct TALER_RSA_Signature +{ + unsigned char sig[TALER_RSA_DATA_ENCODING_LENGTH]; +}; + +GNUNET_NETWORK_STRUCT_BEGIN +/** + * @brief header of what an RSA signature signs + * this must be followed by "size - 8" bytes of + * the actual signed data + */ +struct TALER_RSA_SignaturePurpose +{ + /** + * How many bytes does this signature sign? + * (including this purpose header); in network + * byte order (!). + */ + uint32_t size GNUNET_PACKED; + + /** + * What does this signature vouch for? This + * must contain a GNUNET_SIGNATURE_PURPOSE_XXX + * constant (from gnunet_signatures.h). In + * network byte order! + */ + uint32_t purpose GNUNET_PACKED; + +}; + + +struct TALER_RSA_BlindedSignaturePurpose +{ + unsigned char data[TALER_RSA_DATA_ENCODING_LENGTH]; +}; + + +/** + * @brief A public key. + */ +struct TALER_RSA_PublicKeyBinaryEncoded +{ + /** + * In big-endian, must be GNUNET_CRYPTO_RSA_KEY_LENGTH+4 + */ + uint16_t len GNUNET_PACKED; + + /** + * Size of n in key; in big-endian! + */ + uint16_t sizen GNUNET_PACKED; + + /** + * The key itself, contains n followed by e. + */ + unsigned char key[TALER_RSA_KEY_LENGTH]; + + /** + * Padding (must be 0) + */ + uint16_t padding GNUNET_PACKED; +}; + +GNUNET_NETWORK_STRUCT_END + +/** + * Create a new private key. Caller must free return value. + * + * @return fresh private key + */ +struct TALER_RSA_PrivateKey * +TALER_RSA_key_create (); + + +/** + * Free memory occupied by the private key. + * + * @param key pointer to the memory to free + */ +void +TALER_RSA_key_free (struct TALER_RSA_PrivateKey *key); + + +/** + * Encode the private key in a format suitable for + * storing it into a file. + * @return encoding of the private key + */ +struct TALER_RSA_PrivateKeyBinaryEncoded * +TALER_RSA_encode_key (const struct TALER_RSA_PrivateKey *hostkey); + + +/** + * Extract the public key of the given private key. + * + * @param priv the private key + * @param pub where to write the public key + */ +void +TALER_RSA_key_get_public (const struct TALER_RSA_PrivateKey *priv, + struct TALER_RSA_PublicKeyBinaryEncoded *pub); + + +/** + * Decode the private key from the data-format back + * to the "normal", internal format. + * + * @param buf the buffer where the private key data is stored + * @param len the length of the data in 'buffer' + * @return NULL on error + */ +struct TALER_RSA_PrivateKey * +TALER_RSA_decode_key (const char *buf, uint16_t len); + + +/** + * Convert a public key to a string. + * + * @param pub key to convert + * @return string representing 'pub' + */ +char * +TALER_RSA_public_key_to_string (const struct TALER_RSA_PublicKeyBinaryEncoded *pub); + + +/** + * Convert a string representing a public key to a public key. + * + * @param enc encoded public key + * @param enclen number of bytes in enc (without 0-terminator) + * @param pub where to store the public key + * @return GNUNET_OK on success + */ +int +TALER_RSA_public_key_from_string (const char *enc, + size_t enclen, + struct TALER_RSA_PublicKeyBinaryEncoded *pub); + + +/** + * Sign a given block.h + * + * @param key private key to use for the signing + * @param msg the message + * @param size the size of the message + * @param sig where to write the signature + * @return GNUNET_SYSERR on error, GNUNET_OK on success + */ +int +TALER_RSA_sign (const struct TALER_RSA_PrivateKey *key, + const void *msg, + size_t size, + struct TALER_RSA_Signature *sig); + + +/** + * Verify signature with the given hash. + * + * @param hash the hash code to verify against the signature + * @param sig signature that is being validated + * @param publicKey public key of the signer + * @returns GNUNET_OK if ok, GNUNET_SYSERR if invalid + */ +int +TALER_RSA_hash_verify (const struct GNUNET_HashCode *hash, + const struct TALER_RSA_Signature *sig, + const struct TALER_RSA_PublicKeyBinaryEncoded *publicKey); + + +/** + * Verify signature on the given message + * + * @param msg the message + * @param size the size of the message + * @param sig signature that is being validated + * @param publicKey public key of the signer + * @returns GNUNET_OK if ok, GNUNET_SYSERR if invalid + */ +int +TALER_RSA_verify (const void *msg, size_t size, + const struct TALER_RSA_Signature *sig, + const struct TALER_RSA_PublicKeyBinaryEncoded *publicKey); + +/** + * Key used to blind a message + */ +struct TALER_RSA_BlindingKey; + +/** + * Create a blinding key + * + * @return the newly created blinding key + */ +struct TALER_RSA_BlindingKey * +TALER_RSA_blinding_key_create (); + + +/** + * Destroy a blinding key + * + * @param bkey the blinding key to destroy + */ +void +TALER_RSA_blinding_key_destroy (struct TALER_RSA_BlindingKey *bkey); + + +/** + * Binary encoding for TALER_RSA_BlindingKey + */ +struct TALER_RSA_BlindingKeyBinaryEncoded +{ + unsigned char data[TALER_RSA_DATA_ENCODING_LENGTH]; +}; + + +/** + * Encode a blinding key + * + * @param bkey the blinding key to encode + * @param bkey_enc where to store the encoded binary key + * @return #GNUNET_OK upon successful encoding; #GNUNET_SYSERR upon failure + */ +int +TALER_RSA_blinding_key_encode (struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_BlindingKeyBinaryEncoded *bkey_enc); + + +/** + * Decode a blinding key from its encoded form + * + * @param bkey_enc the encoded blinding key + * @return the decoded blinding key; NULL upon error + */ +struct TALER_RSA_BlindingKey * +TALER_RSA_blinding_key_decode (struct TALER_RSA_BlindingKeyBinaryEncoded *bkey_enc); + + +/** + * Blinds the given message with the given blinding key + * + * @param msg the message + * @param size the size of the message + * @param bkey the blinding key + * @param pkey the public key of the signer + * @return the blinding signature purpose; NULL upon any error + */ +struct TALER_RSA_BlindedSignaturePurpose * +TALER_RSA_message_blind (const void *msg, size_t size, + struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_PublicKeyBinaryEncoded *pkey); + + +/** + * Unblind a signature made on blinding signature purpose. The signature + * purpose should have been generated with TALER_RSA_message_blind() function. + * + * @param sig the signature made on the blinded signature purpose + * @param bkey the blinding key used to blind the signature purpose + * @param pkey the public key of the signer + * @return GNUNET_SYSERR upon error; GNUNET_OK upon success. + */ +int +TALER_RSA_unblind (struct TALER_RSA_Signature *sig, + struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_PublicKeyBinaryEncoded *pkey); + +#endif /* TALER_RSA_H */ + +/* end of include/taler_rsa.h */ diff --git a/src/include/taler_signatures.h b/src/include/taler_signatures.h new file mode 100644 index 00000000..8c142f61 --- /dev/null +++ b/src/include/taler_signatures.h @@ -0,0 +1,106 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-keyup.c + * @brief Update the mint's keys for coins and signatures, + * using the mint's offline master key. + * @author Florian Dold + * @author Benedikt Mueller + */ + +#ifndef TALER_SIGNATURES_H +#define TALER_SIGNATURES_H + +/** + * Purpose for signing public keys signed + * by the mint master key. + */ +#define TALER_SIGNATURE_MASTER_SIGNKEY 1 + +/** + * Purpose for denomination keys signed + * by the mint master key. + */ +#define TALER_SIGNATURE_MASTER_DENOM 2 + +/** + * Purpose for the state of a reserve, + * signed by the mint's signing key. + */ +#define TALER_SIGNATURE_RESERVE_STATUS 3 + +/** + * Signature where the reserve key + * confirms a withdraw request. + */ +#define TALER_SIGNATURE_WITHDRAW 4 + +/** + * Signature where the refresh session confirms + * the list of melted coins and requested denominations. + */ +#define TALER_SIGNATURE_REFRESH_MELT 5 + +/** + * Signature where the refresh session confirms + * the commits. + */ +#define TALER_SIGNATURE_REFRESH_COMMIT 6 + +/** + * Signature where the mint (current signing key) + * confirms the list of blind session keys. + */ +#define TALER_SIGNATURE_REFRESH_MELT_RESPONSE 7 + +/** + * Signature where the mint (current signing key) + * confirms the no-reveal index for cut-and-choose. + */ +#define TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE 8 + +/** + * Signature where coins confirm that they want + * to be melted into a certain session. + */ +#define TALER_SIGNATURE_REFRESH_MELT_CONFIRM 9 + +/***********************/ +/* Merchant signatures */ +/***********************/ + +/** + * Signature where the merchant confirms a contract + */ +#define TALER_SIGNATURE_MERCHANT_CONTRACT 101 + +/*********************/ +/* Wallet signatures */ +/*********************/ + +/** + * Signature made by the wallet of a user to confirm a deposit permission + */ +#define TALER_SIGNATURE_DEPOSIT 201 + +/** + * Signature made by the wallet of a user to confirm a incremental deposit permission + */ +#define TALER_SIGNATURE_INCREMENTAL_DEPOSIT 202 + +#endif + diff --git a/src/include/taler_types.h b/src/include/taler_types.h new file mode 100644 index 00000000..c6c2c020 --- /dev/null +++ b/src/include/taler_types.h @@ -0,0 +1,120 @@ +/** + * @file include/types.h + * @brief This files defines the various data and message types in TALER. + * @author Sree Harsha Totakura + * @author Florian Dold + */ + +#ifndef TYPES_H_ +#define TYPES_H_ + +#include "taler_rsa.h" + + +/** + * Public information about a coin. + */ +struct TALER_CoinPublicInfo +{ + /** + * The coin's public key. + */ + struct GNUNET_CRYPTO_EcdsaPublicKey coin_pub; + + /* + * The public key signifying the coin's denomination. + */ + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + + /** + * Signature over coin_pub by denom_pub. + */ + struct TALER_RSA_Signature denom_sig; +}; + + +/** + * Request to withdraw coins from a reserve. + */ +struct TALER_WithdrawRequest +{ + /** + * Signature over the rest of the message + * by the withdraw public key. + */ + struct GNUNET_CRYPTO_EddsaSignature sig; + + /** + * Purpose must be TALER_SIGNATURE_WITHDRAW. + */ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + + /** + * Reserve public key. + */ + struct GNUNET_CRYPTO_EddsaPublicKey reserve_pub; + + /** + * Denomination public key for the coin that is withdrawn. + */ + struct TALER_RSA_PublicKeyBinaryEncoded denomination_pub; + + /** + * Purpose containing coin's blinded public key. + */ + struct TALER_RSA_BlindedSignaturePurpose coin_envelope; +}; + + + +/** + * Data type for messages + */ +struct TALER_MessageHeader +{ + /** + * The type of the message in Network-byte order (NBO) + */ + uint16_t type; + + /** + * The size of the message in NBO + */ + uint16_t size; +}; + +/*****************/ +/* Message types */ +/*****************/ + +/** + * The message type of a blind signature + */ +#define TALER_MSG_TYPE_BLINDED_SIGNATURE 1 + +/** + * The message type of a blinded message + */ +#define TALER_MSG_TYPE_BLINDED_MESSAGE 2 + +/** + * The message type of an unblinded signature + * @FIXME: Not currently used + */ +#define TALER_MSG_TYPE_UNBLINDED_SIGNATURE 3 + +/** + * The type of a blinding residue message + * @FIXME: Not currently used + */ +#define TALER_MSG_TYPE_BLINDING_RESIDUE 4 + +/** + * The type of a message containing the blinding factor + */ +#define TALER_MSG_TYPE_BLINDING_FACTOR 5 + + +#endif /* TYPES_H_ */ + +/* end of include/types.h */ diff --git a/src/include/taler_util.h b/src/include/taler_util.h new file mode 100644 index 00000000..a8a7c201 --- /dev/null +++ b/src/include/taler_util.h @@ -0,0 +1,255 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file include/taler_util.h + * @brief Interface for common utility functions + * @author Sree Harsha Totakura + */ + +#ifndef UTIL_H_ +#define UTIL_H_ + +#include +#include + +/* Define logging functions */ +#define LOG_DEBUG(...) \ + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) + +#define LOG_WARNING(...) \ + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, __VA_ARGS__) + +#define LOG_ERROR(...) \ + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, __VA_ARGS__) + + +/** + * Tests a given as assertion and if failed prints it as a warning with the + * given reason + * + * @param EXP the expression to test as assertion + * @param reason string to print as warning + */ +#define TALER_assert_as(EXP, reason) \ + do { \ + if (EXP) break; \ + LOG_ERROR("%s at %s:%d\n", reason, __FILE__, __LINE__); \ + abort(); \ + } while(0) + + + +/** + * Log an error message at log-level 'level' that indicates + * a failure of the command 'cmd' with the message given + * by gcry_strerror(rc). + */ +#define LOG_GCRY_ERROR(cmd, rc) do { LOG_ERROR("`%s' failed at %s:%d with error: %s\n", cmd, __FILE__, __LINE__, gcry_strerror(rc)); } while(0) + + +#define TALER_gcry_ok(cmd) \ + do {int rc; rc = cmd; if (!rc) break; LOG_ERROR("A Gcrypt call failed at %s:%d with error: %s\n", __FILE__, __LINE__, gcry_strerror(rc)); abort(); } while (0) + + +#define TALER_CURRENCY_LEN 4 + + +GNUNET_NETWORK_STRUCT_BEGIN + +struct TALER_AmountNBO +{ + uint32_t value; + uint32_t fraction; + char currency[TALER_CURRENCY_LEN]; +}; + +GNUNET_NETWORK_STRUCT_END + +struct TALER_HashContext +{ + gcry_md_hd_t hd; +}; + + + +/** + * Representation of monetary value in a given currency. + */ +struct TALER_Amount +{ + /** + * Value (numerator of fraction) + */ + uint32_t value; + /** + * Fraction (denominator of fraction) + */ + uint32_t fraction; + /** + * Currency string, left adjusted and padded with zeros. + */ + char currency[4]; +}; + + +/** + * Initialize Gcrypt library. + */ +void +TALER_gcrypt_init(); + + +/** + * Generate a ECC private key. + * + * @return the s-expression representing the generated ECC private key; NULL + * upon error + */ +gcry_sexp_t +TALER_genkey (); + + +/** + * Parse denomination description, in the format "T : V : F". + * + * @param str denomination description + * @param denom denomination to write the result to + * @return GNUNET_OK if the string is a valid denomination specification, + * GNUNET_SYSERR if it is invalid. + */ +int +TALER_string_to_amount (const char *str, struct TALER_Amount *denom); + + +/** + * FIXME + */ +struct TALER_AmountNBO +TALER_amount_hton (struct TALER_Amount d); + + +/** + * FIXME + */ +struct TALER_Amount +TALER_amount_ntoh (struct TALER_AmountNBO dn); + +/** + * Compare the value/fraction of two amounts. Does not compare the currency, + * i.e. comparing amounts with the same value and fraction but different + * currency would return 0. + * + * @param a1 first amount + * @param a2 second amount + * @return result of the comparison + */ +int +TALER_amount_cmp (struct TALER_Amount a1, struct TALER_Amount a2); + + +/** + * Perform saturating subtraction of amounts. + * + * @param a1 amount to subtract from + * @param a2 amount to subtract + * @return (a1-a2) or 0 if a2>=a1 + */ +struct TALER_Amount +TALER_amount_subtract (struct TALER_Amount a1, struct TALER_Amount a2); + + +/** + * Perform saturating addition of amounts + * + * @param a1 first amount to add + * @param a2 second amount to add + * @return sum of a1 and a2 + */ +struct TALER_Amount +TALER_amount_add (struct TALER_Amount a1, struct TALER_Amount a2); + + +/** + * Normalize the given amount. + * + * @param amout amount to normalize + * @return normalized amount + */ +struct TALER_Amount +TALER_amount_normalize (struct TALER_Amount amount); + + +/** + * Convert amount to string. + * + * @param amount amount to convert to string + * @return freshly allocated string representation + */ +char * +TALER_amount_to_string (struct TALER_Amount amount); + + +/** + * Return the base32crockford encoding of the given buffer. + * + * The returned string will be freshly allocated, and must be free'd + * with GNUNET_free. + * + * @param buffer with data + * @param size size of the buffer + * @return freshly allocated, null-terminated string + */ +char * +TALER_data_to_string_alloc (const void *buf, size_t size); + + +/** + * Get encoded binary data from a configuration. + * + * @return GNUNET_OK on success + * GNUNET_NO is the value does not exist + * GNUNET_SYSERR on encoding error + */ +int +TALER_configuration_get_data (const struct GNUNET_CONFIGURATION_Handle *cfg, + const char *section, const char *option, + void *buf, size_t buf_size); + + + + +int +TALER_refresh_decrypt (const void *input, size_t input_size, const struct GNUNET_HashCode *secret, void *result); + +int +TALER_refresh_encrypt (const void *input, size_t input_size, const struct GNUNET_HashCode *secret, void *result); + + + +void +TALER_hash_context_start (struct TALER_HashContext *hc); + + +void +TALER_hash_context_read (struct TALER_HashContext *hc, void *buf, size_t size); + + +void +TALER_hash_context_finish (struct TALER_HashContext *hc, + struct GNUNET_HashCode *r_hash); + +#endif diff --git a/src/mint/.gitignore b/src/mint/.gitignore new file mode 100644 index 00000000..a2e71d5d --- /dev/null +++ b/src/mint/.gitignore @@ -0,0 +1,6 @@ +taler-mint-dbinit +taler-mint-keycheck +taler-mint-keyup +taler-mint-pursemod +taler-mint-reservemod +taler-mint-httpd \ No newline at end of file diff --git a/src/mint/Makefile.am b/src/mint/Makefile.am new file mode 100644 index 00000000..2ae15348 --- /dev/null +++ b/src/mint/Makefile.am @@ -0,0 +1,131 @@ +AM_CPPFLAGS = -I$(top_srcdir)/src/include $(POSTGRESQL_CPPFLAGS) + +lib_LTLIBRARIES = \ + libtalermint.la \ + libtalermintapi.la + +libtalermint_la_SOURCES = \ + mint_common.c \ + mint_db.c + +libtalermint_la_LIBADD = \ + $(top_builddir)/src/util/libtalerutil.la \ + -lgnunetutil \ + -lpq + +libtalermint_la_LDFLAGS = \ + $(POSTGRESQL_LDFLAGS) \ + -version-info 0:0:0 \ + -no-undefined + +libtalermintapi_la_SOURCES = \ + mint_api.c + +libtalermintapi_la_LIBADD = \ + -lgnunetutil \ + -ljansson \ + -lcurl + +libtalermintapi_la_LDFLAGS = \ + -version-info 0:0:0 \ + -no-undefined + + +bin_PROGRAMS = \ + taler-mint-keyup \ + taler-mint-keycheck \ + taler-mint-reservemod \ + taler-mint-httpd \ + taler-mint-dbinit + +taler_mint_keyup_SOURCES = \ + taler-mint-keyup.c + +taler_mint_keyup_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mint/libtalermint.la \ + -lpq \ + -lgnunetutil +taler_mint_keyup_LDFLAGS = $(POSTGRESQL_LDFLAGS) + + +taler_mint_keycheck_SOURCES = \ + taler-mint-keycheck.c + +taler_mint_keycheck_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mint/libtalermint.la \ + -lgnunetutil \ + -lpq +taler_mint_keycheck_LDFLAGS = $(POSTGRESQL_LDFLAGS) + +taler_mint_reservemod_SOURCES = \ + taler-mint-reservemod.c +taler_mint_reservemod_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mint/libtalermint.la \ + -lpq \ + -lgnunetutil +taler_mint_reservemod_LDFLAGS = \ + $(POSTGRESQL_LDFLAGS) + +taler_mint_httpd_SOURCES = \ + taler-mint-httpd.c \ + taler-mint-httpd_mhd.c \ + taler-mint-httpd_keys.c \ + taler-mint-httpd_deposit.c \ + taler-mint-httpd_withdraw.c \ + taler-mint-httpd_refresh.c +taler_mint_httpd_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mint/libtalermint.la \ + -lpq \ + -lmicrohttpd \ + -ljansson \ + -lgnunetutil \ + -lpthread +taler_mint_httpd_LDFLAGS = \ + $(POSTGRESQL_LDFLAGS) + + +taler_mint_dbinit_SOURCES = \ + taler-mint-dbinit.c +taler_mint_dbinit_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mint/libtalermint.la \ + -lpq \ + -lgnunetutil +taler_mint_dbinit_LDFLAGS = $(POSTGRESQL_LDFLAGS) + +check_PROGRAMS = \ + test-mint-api \ + test-mint-deposits \ + test-mint-common + +test_mint_api_SOURCES = test_mint_api.c +test_mint_api_LDADD = \ + libtalermintapi.la \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + -lgnunetutil \ + -ljansson + +test_mint_deposits_SOURCES = \ + test_mint_deposits.c +test_mint_deposits_LDADD = \ + libtalermint.la \ + $(top_srcdir)/src/util/libtalerutil.la \ + -lgnunetutil \ + -lpq + +test_mint_common_SOURCES = \ + test_mint_common.c +test_mint_common_LDADD = \ + libtalermint.la \ + $(top_srcdir)/src/util/libtalerutil.la \ + -lgnunetutil diff --git a/src/mint/mint.h b/src/mint/mint.h new file mode 100644 index 00000000..5adce03c --- /dev/null +++ b/src/mint/mint.h @@ -0,0 +1,198 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler_mint.h + * @brief Common functionality for the mint + * @author Florian Dold + * @author Benedikt Mueller + */ + +#ifndef _MINT_H +#define _MINT_H + +#include +#include +#include +#include "taler_util.h" +#include "taler_rsa.h" + +#define DIR_SIGNKEYS "signkeys" +#define DIR_DENOMKEYS "denomkeys" + + +GNUNET_NETWORK_STRUCT_BEGIN + + +/** + * FIXME + */ +struct TALER_MINT_SignKeyIssue +{ + struct GNUNET_CRYPTO_EddsaPrivateKey signkey_priv; + struct GNUNET_CRYPTO_EddsaSignature signature; + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_CRYPTO_EddsaPublicKey master_pub; + struct GNUNET_TIME_AbsoluteNBO start; + struct GNUNET_TIME_AbsoluteNBO expire; + struct GNUNET_CRYPTO_EddsaPublicKey signkey_pub; +}; + +struct TALER_MINT_DenomKeyIssue +{ + /** + * The private key of the denomination. Will be NULL if the private key is + * not available. + */ + struct TALER_RSA_PrivateKey *denom_priv; + struct GNUNET_CRYPTO_EddsaSignature signature; + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_CRYPTO_EddsaPublicKey master; + struct GNUNET_TIME_AbsoluteNBO start; + struct GNUNET_TIME_AbsoluteNBO expire_withdraw; + struct GNUNET_TIME_AbsoluteNBO expire_spend; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + struct TALER_AmountNBO value; + struct TALER_AmountNBO fee_withdraw; + struct TALER_AmountNBO fee_deposit; + struct TALER_AmountNBO fee_refresh; +}; + +struct RefreshMeltSignatureBody +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_HashCode melt_hash; +}; + +struct RefreshCommitSignatureBody +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_HashCode commit_hash; +}; + +struct RefreshCommitResponseSignatureBody +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + uint16_t noreveal_index; +}; + +struct RefreshMeltResponseSignatureBody +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_HashCode melt_response_hash; +}; + + +struct RefreshMeltConfirmSignRequestBody +{ + struct GNUNET_CRYPTO_EccSignaturePurpose purpose; + struct GNUNET_CRYPTO_EddsaPublicKey session_pub; +}; + + +GNUNET_NETWORK_STRUCT_END + + + +/** + * Iterator for sign keys. + * + * @param cls closure + * @param ski the sign key issue + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +typedef int (*TALER_MINT_SignkeyIterator)(void *cls, + const struct TALER_MINT_SignKeyIssue *ski); + +/** + * Iterator for denomination keys. + * + * @param cls closure + * @param dki the denomination key issue + * @param alias coin alias + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +typedef int (*TALER_MINT_DenomkeyIterator)(void *cls, + const char *alias, + const struct TALER_MINT_DenomKeyIssue *dki); + + + +/** + * FIXME + */ +int +TALER_MINT_signkeys_iterate (const char *mint_base_dir, + TALER_MINT_SignkeyIterator it, void *cls); + + +/** + * FIXME + */ +int +TALER_MINT_denomkeys_iterate (const char *mint_base_dir, + TALER_MINT_DenomkeyIterator it, void *cls); + + +/** + * Exports a denomination key to the given file + * + * @param filename the file where to write the denomination key + * @param dki the denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure. + */ +int +TALER_MINT_write_denom_key (const char *filename, + const struct TALER_MINT_DenomKeyIssue *dki); + + +/** + * Import a denomination key from the given file + * + * @param filename the file to import the key from + * @param dki pointer to return the imported denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure + */ +int +TALER_MINT_read_denom_key (const char *filename, + struct TALER_MINT_DenomKeyIssue *dki); + + +/** + * Load the configuration for the mint in the given + * directory. + * + * @param mint_base_dir the mint's base directory + * @return the mint configuratin, or NULL on error + */ +struct GNUNET_CONFIGURATION_Handle * +TALER_MINT_config_load (const char *mint_base_dir); + + +int +TALER_TALER_DB_extract_amount (PGresult *result, unsigned int row, + int indices[3], struct TALER_Amount *denom); + +int +TALER_TALER_DB_extract_amount_nbo (PGresult *result, unsigned int row, + int indices[3], struct TALER_AmountNBO *denom_nbo); + +#endif /* _MINT_H */ + diff --git a/src/mint/mint_api.c b/src/mint/mint_api.c new file mode 100644 index 00000000..b8d42b27 --- /dev/null +++ b/src/mint/mint_api.c @@ -0,0 +1,1121 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see + +*/ + +/** + * @file mint/mint_api.c + * @brief Implementation of the client interface to mint's HTTP API + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include +#include +#include +#include "taler_mint_service.h" +#include "taler_signatures.h" +#include "mint.h" + +#define CURL_STRERROR(TYPE, FUNCTION, CODE) \ + GNUNET_log (TYPE, "cURL function `%s' has failed at `%s:%d' with error: %s", \ + FUNCTION, __FILE__, __LINE__, curl_easy_strerror (CODE)); + + + +/** + * Print JSON parsing related error information + */ +#define JSON_WARN(error) \ + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, \ + "JSON parsing failed at %s:%u: %s (%s)", \ + __FILE__, __LINE__, error.text, error.source) + +/** + * Failsafe flag + */ +static int fail; + +/** + * Context + */ +struct TALER_MINT_Context +{ + /** + * CURL multi handle + */ + CURLM *multi; + + /** + * CURL share handle + */ + CURLSH *share; + + /** + * Perform task handle + */ + struct GNUNET_SCHEDULER_Task *perform_task; +}; + +/** + * Type of requests we currently have + */ +enum RequestType +{ + /** + * No request + */ + REQUEST_TYPE_NONE, + + /** + * Current request is to receive mint's keys + */ + REQUEST_TYPE_KEYSGET, + + /** + * Current request is to submit a deposit permission and get its status + */ + REQUEST_TYPE_DEPOSIT +}; + + +/** + * Handle to the mint + */ +struct TALER_MINT_Handle +{ + /** + * The context of this handle + */ + struct TALER_MINT_Context *ctx; + + /** + * The hostname of the mint + */ + char *hostname; + + /** + * The CURL handle + */ + CURL *curl; + + /** + * Error buffer for CURL + */ + char emsg[CURL_ERROR_SIZE]; + + /** + * Download buffer + */ + void *buf; + + /** + * The currently active request + */ + union { + /** + * Used to denote no request if set to NULL + */ + void *none; + + /** + * Denom keys get request if REQUEST_TYPE_KEYSGET + */ + struct TALER_MINT_KeysGetHandle *keys_get; + + /** + * Deposit request if REQUEST_TYPE_DEPOSIT + */ + struct TALER_MINT_DepositHandle *deposit; + } req; + + /** + * The size of the download buffer + */ + size_t buf_size; + + /** + * Active request type + */ + enum RequestType req_type; + + /** + * The service port of the mint + */ + uint16_t port; + + /** + * Are we connected to the mint? + */ + uint8_t connected; + +}; + + +/** + * A handle to get the keys of a mint + */ +struct TALER_MINT_KeysGetHandle +{ + /** + * The connection to mint this request handle will use + */ + struct TALER_MINT_Handle *mint; + + /** + * The url for this handle + */ + char *url; + + TALER_MINT_KeysGetCallback cb; + void *cls; + + TALER_MINT_ContinuationCallback cont_cb; + void *cont_cls; +}; + + +/** + * A handle to submit a deposit permission and get its status + */ +struct TALER_MINT_DepositHandle +{ + /** + *The connection to mint this request handle will use + */ + struct TALER_MINT_Handle *mint; + + /** + * The url for this handle + */ + char *url; + + TALER_MINT_DepositResultCallback cb; + void *cls; + + char *json_enc; + + struct curl_slist *headers; + +}; + + +/** + * Parses the timestamp encoded as ASCII string as UNIX timstamp. + * + * @param abs successfully parsed timestamp will be returned thru this parameter + * @param tstamp_enc the ASCII encoding of the timestamp + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure + */ +static int +parse_timestamp (struct GNUNET_TIME_Absolute *abs, const char *tstamp_enc) +{ + unsigned long tstamp; + + if (1 != sscanf (tstamp_enc, "%lu", &tstamp)) + return GNUNET_SYSERR; + *abs = GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get_zero_ (), + GNUNET_TIME_relative_multiply + (GNUNET_TIME_UNIT_SECONDS, tstamp)); + return GNUNET_OK; +} + + +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + + + +static int +parse_json_signkey (struct TALER_MINT_SigningPublicKey **_sign_key, + json_t *sign_key_obj, + struct GNUNET_CRYPTO_EddsaPublicKey *master_key) +{ + json_t *valid_from_obj; + json_t *valid_until_obj; + json_t *key_obj; + json_t *sig_obj; + const char *valid_from_enc; + const char *valid_until_enc; + const char *key_enc; + const char *sig_enc; + struct TALER_MINT_SigningPublicKey *sign_key; + struct TALER_MINT_SignKeyIssue sign_key_issue; + struct GNUNET_CRYPTO_EddsaSignature sig; + struct GNUNET_TIME_Absolute valid_from; + struct GNUNET_TIME_Absolute valid_until; + + EXITIF (JSON_OBJECT != json_typeof (sign_key_obj)); + EXITIF (NULL == (valid_from_obj = json_object_get (sign_key_obj, + "stamp_start"))); + EXITIF (NULL == (valid_until_obj = json_object_get (sign_key_obj, + "stamp_expire"))); + EXITIF (NULL == (key_obj = json_object_get (sign_key_obj, "key"))); + EXITIF (NULL == (sig_obj = json_object_get (sign_key_obj, "master_sig"))); + EXITIF (NULL == (valid_from_enc = json_string_value (valid_from_obj))); + EXITIF (NULL == (valid_until_enc = json_string_value (valid_until_obj))); + EXITIF (NULL == (key_enc = json_string_value (key_obj))); + EXITIF (NULL == (sig_enc = json_string_value (sig_obj))); + EXITIF (GNUNET_SYSERR == parse_timestamp (&valid_from, + valid_from_enc)); + EXITIF (GNUNET_SYSERR == parse_timestamp (&valid_until, + valid_until_enc)); + EXITIF (52 != strlen (key_enc)); /* strlen(base32(char[32])) = 52 */ + EXITIF (103 != strlen (sig_enc)); /* strlen(base32(char[64])) = 103 */ + EXITIF (GNUNET_OK != GNUNET_STRINGS_string_to_data (sig_enc, 103, + &sig, sizeof (sig))); + (void) memset (&sign_key_issue, 0, sizeof (sign_key_issue)); + EXITIF (GNUNET_SYSERR == + GNUNET_CRYPTO_eddsa_public_key_from_string (key_enc, + 52, + &sign_key_issue.signkey_pub)); + sign_key_issue.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNKEY); + sign_key_issue.purpose.size = + htonl (sizeof (sign_key_issue) + - offsetof (struct TALER_MINT_SignKeyIssue, purpose)); + sign_key_issue.master_pub = *master_key; + sign_key_issue.start = GNUNET_TIME_absolute_hton (valid_from); + sign_key_issue.expire = GNUNET_TIME_absolute_hton (valid_until); + EXITIF (GNUNET_OK != + GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_SIGNKEY, + &sign_key_issue.purpose, + &sig, + master_key)); + sign_key = GNUNET_new (struct TALER_MINT_SigningPublicKey); + sign_key->valid_from = valid_from; + sign_key->valid_until = valid_until; + sign_key->key = sign_key_issue.signkey_pub; + *_sign_key = sign_key; + return GNUNET_OK; + + EXITIF_exit: + return GNUNET_SYSERR; +} + + +static int +parse_json_amount (json_t *amount_obj, struct TALER_Amount *amt) +{ + json_t *obj; + const char *currency_str; + int value; + int fraction; + + EXITIF (NULL == (obj = json_object_get (amount_obj, "currency"))); + EXITIF (NULL == (currency_str = json_string_value (obj))); + EXITIF (NULL == (obj = json_object_get (amount_obj, "value"))); + EXITIF (JSON_INTEGER != json_typeof (obj)); + EXITIF (0 > (value = json_integer_value (obj))); + EXITIF (NULL == (obj = json_object_get (amount_obj, "fraction"))); + EXITIF (JSON_INTEGER != json_typeof (obj)); + EXITIF (0 > (fraction = json_integer_value (obj))); + (void) memset (amt->currency, 0, sizeof (amt->currency)); + (void) strncpy (amt->currency, currency_str, sizeof (amt->currency) - 1); + amt->value = (uint32_t) value; + amt->fraction = (uint32_t) fraction; + return GNUNET_OK; + + EXITIF_exit: + return GNUNET_SYSERR; +} + +static int +parse_json_denomkey (struct TALER_MINT_DenomPublicKey **_denom_key, + json_t *denom_key_obj, + struct GNUNET_CRYPTO_EddsaPublicKey *master_key) +{ + json_t *obj; + const char *sig_enc; + const char *deposit_valid_until_enc; + const char *withdraw_valid_until_enc; + const char *valid_from_enc; + const char *key_enc; + struct TALER_MINT_DenomPublicKey *denom_key; + struct GNUNET_TIME_Absolute valid_from; + struct GNUNET_TIME_Absolute withdraw_valid_until; + struct GNUNET_TIME_Absolute deposit_valid_until; + struct TALER_Amount value; + struct TALER_Amount fee_withdraw; + struct TALER_Amount fee_deposit; + struct TALER_Amount fee_refresh; + struct TALER_MINT_DenomKeyIssue denom_key_issue; + struct GNUNET_CRYPTO_EddsaSignature sig; + + EXITIF (JSON_OBJECT != json_typeof (denom_key_obj)); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "master_sig"))); + EXITIF (NULL == (sig_enc = json_string_value (obj))); + EXITIF (103 != strlen (sig_enc)); + EXITIF (GNUNET_OK != GNUNET_STRINGS_string_to_data (sig_enc, 103, + &sig, sizeof (sig))); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "stamp_expire_deposit"))); + EXITIF (NULL == (deposit_valid_until_enc = json_string_value (obj))); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "stamp_expire_withdraw"))); + EXITIF (NULL == (withdraw_valid_until_enc = json_string_value (obj))); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "stamp_start"))); + EXITIF (NULL == (valid_from_enc = json_string_value (obj))); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "denom_pub"))); + EXITIF (NULL == (key_enc = json_string_value (obj))); + EXITIF (52 != strlen (key_enc)); /* strlen(base32(char[32])) = 52 */ + EXITIF (GNUNET_SYSERR == parse_timestamp (&valid_from, valid_from_enc)); + EXITIF (GNUNET_SYSERR == parse_timestamp (&withdraw_valid_until, + withdraw_valid_until_enc)); + EXITIF (GNUNET_SYSERR == parse_timestamp (&deposit_valid_until, + deposit_valid_until_enc)); + + (void) memset (&denom_key_issue, 0, sizeof (denom_key_issue)); + EXITIF (GNUNET_OK != GNUNET_STRINGS_string_to_data (key_enc, 52, + &denom_key_issue.denom_pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded))); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "value"))); + EXITIF (GNUNET_SYSERR == parse_json_amount (obj, &value)); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "fee_withdraw"))); + EXITIF (GNUNET_SYSERR == parse_json_amount (obj, &fee_withdraw)); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "fee_deposit"))); + EXITIF (GNUNET_SYSERR == parse_json_amount (obj, &fee_deposit)); + EXITIF (NULL == (obj = json_object_get (denom_key_obj, "fee_refresh"))); + EXITIF (GNUNET_SYSERR == parse_json_amount (obj, &fee_refresh)); + denom_key_issue.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_DENOM); + denom_key_issue.purpose.size = htonl + (sizeof (struct TALER_MINT_DenomKeyIssue) - + offsetof (struct TALER_MINT_DenomKeyIssue, purpose)); + denom_key_issue.master = *master_key; + denom_key_issue.start = GNUNET_TIME_absolute_hton (valid_from); + denom_key_issue.expire_withdraw = GNUNET_TIME_absolute_hton (withdraw_valid_until); + denom_key_issue.expire_spend = GNUNET_TIME_absolute_hton (deposit_valid_until); + denom_key_issue.value = TALER_amount_hton (value); + denom_key_issue.fee_withdraw = TALER_amount_hton (fee_withdraw); + denom_key_issue.fee_deposit = TALER_amount_hton (fee_deposit); + denom_key_issue.fee_refresh = TALER_amount_hton (fee_refresh); + EXITIF (GNUNET_SYSERR == + GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_DENOM, + &denom_key_issue.purpose, + &sig, + master_key)); + denom_key = GNUNET_new (struct TALER_MINT_DenomPublicKey); + denom_key->key = denom_key_issue.denom_pub; + denom_key->valid_from = valid_from; + denom_key->withdraw_valid_until = withdraw_valid_until; + denom_key->deposit_valid_until = deposit_valid_until; + denom_key->value = value; + denom_key->fee_withdraw = fee_withdraw; + denom_key->fee_deposit = fee_deposit; + denom_key->fee_refresh = fee_refresh; + *_denom_key = denom_key; + return GNUNET_OK; + + EXITIF_exit: + return GNUNET_SYSERR; +} + +static int +parse_response_keys_get (const char *in, size_t size, + struct TALER_MINT_SigningPublicKey ***_sign_keys, + unsigned int *_n_sign_keys, + struct TALER_MINT_DenomPublicKey ***_denom_keys, + unsigned int *_n_denom_keys) +{ + json_t *resp_obj; + struct TALER_MINT_DenomPublicKey **denom_keys; + struct GNUNET_CRYPTO_EddsaPublicKey master_key; + struct GNUNET_TIME_Absolute list_issue_date; + struct TALER_MINT_SigningPublicKey **sign_keys; + unsigned int n_denom_keys; + unsigned int n_sign_keys; + json_error_t error; + unsigned int index; + int OK; + + denom_keys = NULL; + n_denom_keys = 0; + sign_keys = NULL; + n_sign_keys = 0; + OK = 0; + resp_obj = json_loadb (in, size, + JSON_REJECT_DUPLICATES | JSON_DISABLE_EOF_CHECK, + &error); + if (NULL == resp_obj) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Unable to parse received data as JSON object\n"); + return GNUNET_SYSERR; + } + + EXITIF (JSON_OBJECT != json_typeof (resp_obj)); + { + /* parse the master public key */ + json_t *master_key_obj; + const char *master_key_enc; + + EXITIF (NULL == (master_key_obj = json_object_get (resp_obj, "master_pub"))); + EXITIF (NULL == (master_key_enc = json_string_value (master_key_obj))); + EXITIF (52 != strlen (master_key_enc)); /* strlen(base32(char[32])) = 52 */ + EXITIF (GNUNET_OK != + GNUNET_CRYPTO_eddsa_public_key_from_string (master_key_enc, + 52, + &master_key)); + } + { + /* parse the issue date of the response */ + json_t *list_issue_date_obj; + const char *tstamp_enc; + + EXITIF (NULL == (list_issue_date_obj = + json_object_get(resp_obj, "list_issue_date"))); + EXITIF (NULL == (tstamp_enc = json_string_value (list_issue_date_obj))); + EXITIF (GNUNET_SYSERR == parse_timestamp (&list_issue_date, tstamp_enc)); + } + { + /* parse the signing keys */ + json_t *sign_keys_array; + json_t *sign_key_obj; + + EXITIF (NULL == (sign_keys_array = + json_object_get (resp_obj, "signkeys"))); + EXITIF (JSON_ARRAY != json_typeof (sign_keys_array)); + EXITIF (0 == (n_sign_keys = json_array_size (sign_keys_array))); + sign_keys = GNUNET_malloc (sizeof (struct TALER_MINT_SigningPublicKey *) + * (n_sign_keys + 1)); + index = 0; + json_array_foreach (sign_keys_array, index, sign_key_obj) { + EXITIF (GNUNET_SYSERR == parse_json_signkey (&sign_keys[index], + sign_key_obj, + &master_key)); + } + } + { + /* parse the denomination keys */ + json_t *denom_keys_array; + json_t *denom_key_obj; + + EXITIF (NULL == (denom_keys_array = json_object_get (resp_obj, "denoms"))); + EXITIF (JSON_ARRAY != json_typeof (denom_keys_array)); + EXITIF (0 == (n_denom_keys = json_array_size (denom_keys_array))); + denom_keys = GNUNET_malloc (sizeof (struct TALER_MINT_DenomPublicKey *) + * (n_denom_keys + 1)); + index = 0; + json_array_foreach (denom_keys_array, index, denom_key_obj) { + EXITIF (GNUNET_SYSERR == parse_json_denomkey (&denom_keys[index], + denom_key_obj, + &master_key)); + } + } + OK = 1; + + EXITIF_exit: + json_decref (resp_obj); + if (!OK) + { + if (NULL != sign_keys) + { + for (index=0; NULL != sign_keys[index]; index++) + GNUNET_free_non_null (sign_keys[index]); + GNUNET_free (sign_keys); + } + if (NULL != denom_keys) + { + for (index=0; NULL != denom_keys[index]; index++) + GNUNET_free_non_null (denom_keys[index]); + GNUNET_free (denom_keys); + } + return GNUNET_SYSERR; + } + + *_sign_keys = sign_keys; + *_n_sign_keys = n_sign_keys; + *_denom_keys = denom_keys; + *_n_denom_keys = n_denom_keys; + return GNUNET_OK; +} + + +int +parse_deposit_response (void *buf, size_t size, int *r_status, json_t **r_obj) +{ + json_t *obj; + const char *status_str; + json_error_t error; + + status_str = NULL; + obj = NULL; + obj = json_loadb (buf, size, + JSON_REJECT_DUPLICATES | JSON_DISABLE_EOF_CHECK, &error); + if (NULL == obj) + { + JSON_WARN (error); + return GNUNET_SYSERR; + } + EXITIF (-1 == json_unpack (obj, "{s:s}", "status", &status_str)); + LOG_DEBUG ("Received deposit response: %s from mint\n", status_str); + if (0 == strcmp ("DEPOSIT_OK", status_str)) + *r_status = 1; + else if (0 == strcmp ("DEPOSIT_QUEUED", status_str)) + *r_status = 2; + else + *r_status = 0; + *r_obj = obj; + + return GNUNET_OK; + EXITIF_exit: + json_decref (obj); + return GNUNET_SYSERR; +} + +#undef EXITIF + +static void +mint_connect (struct TALER_MINT_Handle *mint) +{ + struct TALER_MINT_Context *ctx = mint->ctx; + + GNUNET_assert (0 == mint->connected); + GNUNET_assert (CURLM_OK == curl_multi_add_handle (ctx->multi, mint->curl)); + mint->connected = GNUNET_YES; +} + +static void +mint_disconnect (struct TALER_MINT_Handle *mint) +{ + struct TALER_MINT_Context *ctx = mint->ctx; + + GNUNET_assert (GNUNET_YES == mint->connected); + GNUNET_break (CURLM_OK == curl_multi_remove_handle (ctx->multi, + mint->curl)); + mint->connected = GNUNET_NO; + GNUNET_free_non_null (mint->buf); + mint->buf = NULL; + mint->buf_size = 0; + mint->req_type = REQUEST_TYPE_NONE; + mint->req.none = NULL; +} + +static void +cleanup_keys_get (struct TALER_MINT_KeysGetHandle *gh) +{ + GNUNET_free (gh->url); + GNUNET_free (gh); +} + +static void +cleanup_deposit (struct TALER_MINT_DepositHandle *dh) +{ + curl_slist_free_all (dh->headers); + GNUNET_free_non_null (dh->json_enc); + GNUNET_free (dh->url); + GNUNET_free (dh); +} + +static void +request_failed (struct TALER_MINT_Handle *mint, long resp_code) +{ + switch (mint->req_type) + { + case REQUEST_TYPE_NONE: + GNUNET_assert (0); + break; + case REQUEST_TYPE_KEYSGET: + { + struct TALER_MINT_KeysGetHandle *gh = mint->req.keys_get; + TALER_MINT_ContinuationCallback cont_cb; + void *cont_cls; + GNUNET_assert (NULL != gh); + cont_cb = gh->cont_cb; + cont_cls = gh->cont_cls; + cleanup_keys_get (gh); + mint_disconnect (mint); + cont_cb (cont_cls, mint->emsg); + } + break; + case REQUEST_TYPE_DEPOSIT: + { + struct TALER_MINT_DepositHandle *dh = mint->req.deposit; + TALER_MINT_DepositResultCallback cb = dh->cb; + void *cls = dh->cls; + GNUNET_assert (NULL != dh); + cleanup_deposit (dh); + mint_disconnect (mint); + cb (cls, 0, NULL, mint->emsg); + } + break; + } +} + +static void +request_succeeded (struct TALER_MINT_Handle *mint, long resp_code) +{ + char *emsg; + + emsg = NULL; + switch (mint->req_type) + { + case REQUEST_TYPE_NONE: + GNUNET_assert (0); + break; + case REQUEST_TYPE_KEYSGET: + { + struct TALER_MINT_KeysGetHandle *gh = mint->req.keys_get; + TALER_MINT_ContinuationCallback cont_cb; + void *cont_cls; + struct TALER_MINT_SigningPublicKey **sign_keys; + struct TALER_MINT_DenomPublicKey **denom_keys; + unsigned int n_sign_keys; + unsigned int n_denom_keys; + + GNUNET_assert (NULL != gh); + cont_cb = gh->cont_cb; + cont_cls = gh->cont_cls; + if (200 == resp_code) + { + /* parse JSON object from the mint->buf which is of size mint->buf_size */ + if (GNUNET_OK == + parse_response_keys_get (mint->buf, mint->buf_size, + &sign_keys, &n_sign_keys, + &denom_keys, &n_denom_keys)) + gh->cb (gh->cls, sign_keys, denom_keys); + else + emsg = GNUNET_strdup ("Error parsing response"); + } + else + GNUNET_asprintf (&emsg, "Failed with response code: %ld", resp_code); + cleanup_keys_get (gh); + mint_disconnect (mint); + cont_cb (cont_cls, emsg); + } + break; + case REQUEST_TYPE_DEPOSIT: + { + struct TALER_MINT_DepositHandle *dh = mint->req.deposit; + TALER_MINT_DepositResultCallback cb; + void *cls; + int status; + json_t *obj; + + GNUNET_assert (NULL != dh); + obj = NULL; + cb = dh->cb; + cls = dh->cls; + status = 0; + if (200 == resp_code) + { + /* parse JSON object from the mint->buf which is of size mint->buf_size */ + if (GNUNET_OK != + parse_deposit_response (mint->buf, mint->buf_size, + &status, &obj)) + emsg = GNUNET_strdup ("Error parsing response"); + } + else + GNUNET_asprintf (&emsg, "Failed with response code: %ld", resp_code); + cleanup_deposit (dh); + mint_disconnect (mint); + cb (cls, status, obj, emsg); + } + break; + } + GNUNET_free_non_null (emsg); +} + + +static void +do_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); + +static void +perform (struct TALER_MINT_Context *ctx) +{ + fd_set fd_rs; + fd_set fd_ws; + struct GNUNET_NETWORK_FDSet rs; + struct GNUNET_NETWORK_FDSet ws; + CURLMsg *cmsg; + struct TALER_MINT_Handle *mint; + long timeout; + long resp_code; + static unsigned int n_old; + int n_running; + int n_completed; + int max_fd; + + n_completed = 0; + curl_multi_perform (ctx->multi, &n_running); + GNUNET_assert (0 <= n_running); + if ((0 == n_running) || (n_running < n_old)) + { + /* some requests were completed -- handle them */ + while (NULL != (cmsg = curl_multi_info_read (ctx->multi, &n_completed))) + { + GNUNET_break (CURLMSG_DONE == cmsg->msg); /* curl only has CURLMSG_DONE */ + GNUNET_assert (CURLE_OK == curl_easy_getinfo (cmsg->easy_handle, + CURLINFO_PRIVATE, + (char *) &mint)); + GNUNET_assert (CURLE_OK == curl_easy_getinfo (cmsg->easy_handle, + CURLINFO_RESPONSE_CODE, + &resp_code)); + GNUNET_assert (ctx == mint->ctx); /* did we get the correct one? */ + if (CURLE_OK == cmsg->data.result) + request_succeeded (mint, resp_code); + else + request_failed (mint, resp_code); + } + } + n_old = n_running; + /* reschedule perform() */ + if (0 != n_old) + { + FD_ZERO (&fd_rs); + FD_ZERO (&fd_ws); + GNUNET_assert (CURLM_OK == curl_multi_fdset (ctx->multi, + &fd_rs, + &fd_ws, + NULL, + &max_fd)); + if (-1 == max_fd) + { + ctx->perform_task = GNUNET_SCHEDULER_add_delayed + (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 100), + &do_perform, ctx); + return; + } + GNUNET_assert (CURLM_OK == curl_multi_timeout (ctx->multi, &timeout)); + if (-1 == timeout) + { + timeout = 1000 * 60 * 5; + } + GNUNET_NETWORK_fdset_zero (&rs); + GNUNET_NETWORK_fdset_zero (&ws); + GNUNET_NETWORK_fdset_copy_native (&rs, &fd_rs, max_fd + 1); + GNUNET_NETWORK_fdset_copy_native (&ws, &fd_ws, max_fd + 1); + ctx->perform_task = GNUNET_SCHEDULER_add_select + (GNUNET_SCHEDULER_PRIORITY_KEEP, + GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, timeout), + &rs, &ws, + &do_perform, ctx); + } +} + + +static void +do_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct TALER_MINT_Context *ctx = cls; + + GNUNET_assert (NULL != ctx->perform_task); + ctx->perform_task = NULL; + perform (ctx); +} + +static void +perform_now (struct TALER_MINT_Context *ctx) +{ + if (NULL != ctx->perform_task) + { + GNUNET_SCHEDULER_cancel (ctx->perform_task); + ctx->perform_task = NULL; + } + ctx->perform_task = GNUNET_SCHEDULER_add_now (&do_perform, ctx); +} + + +/* This function gets called by libcurl as soon as there is data received that */ +/* needs to be saved. The size of the data pointed to by ptr is size */ +/* multiplied with nmemb, it will not be zero terminated. Return the number */ +/* of bytes actually taken care of. If that amount differs from the amount passed */ +/* to your function, it'll signal an error to the library. This will abort the */ +/* transfer and return CURLE_WRITE_ERROR. */ + +/* From 7.18.0, the function can return CURL_WRITEFUNC_PAUSE which then will */ +/* cause writing to this connection to become paused. See */ +/* curl_easy_pause(3) for further details. */ + +/* This function may be called with zero bytes data if the transferred file is */ +/* empty. */ + +/* Set this option to NULL to get the internal default function. The internal */ +/* default function will write the data to the FILE * given with */ +/* CURLOPT_WRITEDATA. */ + +/* Set the userdata argument with the CURLOPT_WRITEDATA option. */ + +/* The callback function will be passed as much data as possible in all invokes, */ +/* but you cannot possibly make any assumptions. It may be one byte, it may be */ +/* thousands. The maximum amount of body data that can be passed to the write */ +/* callback is defined in the curl.h header file: CURL_MAX_WRITE_SIZE (the usual */ +/* default is 16K). If you however have CURLOPT_HEADER set, which sends */ +/* header data to the write callback, you can get up to */ +/* CURL_MAX_HTTP_HEADER bytes of header data passed into it. This usually */ +/* means 100K. */ +static size_t +download (char *bufptr, size_t size, size_t nitems, void *cls) +{ + struct TALER_MINT_Handle *mint = cls; + size_t msize; + void *buf; + + if (0 == size * nitems) + { + /* file is empty */ + return 0; + } + msize = size * nitems; + mint->buf = GNUNET_realloc (mint->buf, mint->buf_size + msize); + buf = mint->buf + mint->buf_size; + memcpy (buf, bufptr, msize); + mint->buf_size += msize; + return msize; +} + + +/** + * Initialise a connection to the mint. + * + * @param ctx the context + * @param hostname the hostname of the mint + * @param port the point where the mint's HTTP service is running. + * @param mint_key the public key of the mint. This is used to verify the + * responses of the mint. + * @return the mint handle; NULL upon error + */ +struct TALER_MINT_Handle * +TALER_MINT_connect (struct TALER_MINT_Context *ctx, + const char *hostname, + uint16_t port, + struct GNUNET_CRYPTO_EddsaPublicKey *mint_key) +{ + struct TALER_MINT_Handle *mint; + + mint = GNUNET_new (struct TALER_MINT_Handle); + mint->ctx = ctx; + mint->hostname = GNUNET_strdup (hostname); + mint->port = (0 != port) ? port : 80; + mint->curl = curl_easy_init (); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_SHARE, ctx->share)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_ERRORBUFFER, mint->emsg)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_WRITEFUNCTION, &download)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_WRITEDATA, mint)); + GNUNET_assert (CURLE_OK == curl_easy_setopt (mint->curl, CURLOPT_PRIVATE, mint)); + return mint; +} + +/** + * Disconnect from the mint + * + * @param mint the mint handle + */ +void +TALER_MINT_disconnect (struct TALER_MINT_Handle *mint) +{ + if (GNUNET_YES == mint->connected) + mint_disconnect (mint); + curl_easy_cleanup (mint->curl); + GNUNET_free (mint->hostname); + GNUNET_free (mint); +} + +/** + * Get the signing and denomination key of the mint. + * + * @param mint handle to the mint + * @param cb the callback to call with each retrieved denomination key + * @param cls closure for the above callback + * @param cont_cb the callback to call after completing this asynchronous call + * @param cont_cls the closure for the continuation callback + * @return a handle to this asynchronous call; NULL upon eror + */ +struct TALER_MINT_KeysGetHandle * +TALER_MINT_keys_get (struct TALER_MINT_Handle *mint, + TALER_MINT_KeysGetCallback cb, void *cls, + TALER_MINT_ContinuationCallback cont_cb, void *cont_cls) +{ + struct TALER_MINT_KeysGetHandle *gh; + + GNUNET_assert (REQUEST_TYPE_NONE == mint->req_type); + gh = GNUNET_new (struct TALER_MINT_KeysGetHandle); + gh->mint = mint; + mint->req_type = REQUEST_TYPE_KEYSGET; + mint->req.keys_get = gh; + gh->cb = cb; + gh->cls = cls; + gh->cont_cb = cont_cb; + gh->cont_cls = cont_cls; + GNUNET_asprintf (&gh->url, "http://%s:%hu/keys", mint->hostname, mint->port); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_URL, gh->url)); + if (GNUNET_NO == mint->connected) + mint_connect (mint); + perform_now (mint->ctx); + return gh; +} + + +/** + * Cancel the asynchronous call initiated by TALER_MINT_keys_get(). This + * should not be called if either of the @a TALER_MINT_KeysGetCallback or + * @a TALER_MINT_ContinuationCallback passed to TALER_MINT_keys_get() have + * been called. + * + * @param get the handle for retrieving the keys + */ +void +TALER_MINT_keys_get_cancel (struct TALER_MINT_KeysGetHandle *get) +{ + struct TALER_MINT_Handle *mint = get->mint; + + mint_disconnect (mint); + cleanup_keys_get (get); +} + +/** + * Submit a deposit permission to the mint and get the mint's response + * + * @param mint the mint handle + * @param cb the callback to call when a reply for this request is available + * @param cls closure for the above callback + * @param deposit_obj the deposit permission received from the customer along + * with the wireformat JSON object + * @return a handle for this request; NULL if the JSON object could not be + * parsed or is of incorrect format or any other error. In this case, + * the callback is not called. + */ +struct TALER_MINT_DepositHandle * +TALER_MINT_deposit_submit_json (struct TALER_MINT_Handle *mint, + TALER_MINT_DepositResultCallback cb, + void *cls, + json_t *deposit_obj) +{ + struct TALER_MINT_DepositHandle *dh; + + GNUNET_assert (REQUEST_TYPE_NONE == mint->req_type); + dh = GNUNET_new (struct TALER_MINT_DepositHandle); + dh->mint = mint; + mint->req_type = REQUEST_TYPE_DEPOSIT; + mint->req.deposit = dh; + dh->cb = cb; + dh->cls = cls; + GNUNET_asprintf (&dh->url, "http://%s:%hu/deposit", mint->hostname, mint->port); + GNUNET_assert (NULL != (dh->json_enc = json_dumps (deposit_obj, JSON_COMPACT))); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_URL, dh->url)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_POSTFIELDS, + dh->json_enc)); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_POSTFIELDSIZE, + strlen (dh->json_enc))); + GNUNET_assert (NULL != (dh->headers = + curl_slist_append (dh->headers, "Content-Type: application/json"))); + GNUNET_assert (CURLE_OK == + curl_easy_setopt (mint->curl, CURLOPT_HTTPHEADER, dh->headers)); + if (GNUNET_NO == mint->connected) + mint_connect (mint); + perform_now (mint->ctx); + return dh; +} + + +/** + * Cancel a deposit permission request. This function cannot be used on a + * request handle if a response is already served for it. + * + * @param the deposit permission request handle + */ +void +TALER_MINT_deposit_submit_cancel (struct TALER_MINT_DepositHandle *deposit) +{ + struct TALER_MINT_Handle *mint = deposit->mint; + + mint_disconnect (mint); + cleanup_deposit (deposit); +} + + +/** + * Initialise this library. This function should be called before using any of + * the following functions. + * + * @return library context + */ +struct TALER_MINT_Context * +TALER_MINT_init () +{ + struct TALER_MINT_Context *ctx; + CURLM *multi; + CURLSH *share; + + if (fail) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "cURL was not initialised properly\n"); + return NULL; + } + if (NULL == (multi = curl_multi_init ())) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot create a cURL multi handle\n"); + return NULL; + } + if (NULL == (share = curl_share_init ())) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot create a cURL share handle\n"); + return NULL; + } + ctx = GNUNET_new (struct TALER_MINT_Context); + ctx->multi = multi; + ctx->share = share; + return ctx; +} + + +/** + * Cleanup library initialisation resources. This function should be called + * after using this library to cleanup the resources occupied during library's + * initialisation. + * + * @param ctx the library context + */ +void +TALER_MINT_cleanup (struct TALER_MINT_Context *ctx) +{ + curl_share_cleanup (ctx->share); + curl_multi_cleanup (ctx->multi); + if (NULL != ctx->perform_task) + { + GNUNET_break (0); /* investigate why this happens */ + GNUNET_SCHEDULER_cancel (ctx->perform_task); + } + GNUNET_free (ctx); +} + + +__attribute__ ((constructor)) +void +TALER_MINT_constructor__ (void) +{ + CURLcode ret; + if (CURLE_OK != (ret = curl_global_init (CURL_GLOBAL_DEFAULT))) + { + CURL_STRERROR (GNUNET_ERROR_TYPE_ERROR, "curl_global_init", ret); + fail = 1; + } +} + +__attribute__ ((destructor)) +void +TALER_MINT_destructor__ (void) +{ + if (fail) + return; + curl_global_cleanup (); +} diff --git a/src/mint/mint_common.c b/src/mint/mint_common.c new file mode 100644 index 00000000..4afbf072 --- /dev/null +++ b/src/mint/mint_common.c @@ -0,0 +1,283 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint_common.c + * @brief Common functionality for the mint + * @author Florian Dold + * @author Benedikt Mueller + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "mint.h" + +struct SignkeysIterateContext +{ + TALER_MINT_SignkeyIterator it; + void *it_cls; +}; + + +struct DenomkeysIterateContext +{ + const char *alias; + TALER_MINT_DenomkeyIterator it; + void *it_cls; +}; + + +static int +signkeys_iterate_dir_iter (void *cls, + const char *filename) +{ + + struct SignkeysIterateContext *skc = cls; + ssize_t nread; + struct TALER_MINT_SignKeyIssue issue; + nread = GNUNET_DISK_fn_read (filename, + &issue, + sizeof (struct TALER_MINT_SignKeyIssue)); + if (nread != sizeof (struct TALER_MINT_SignKeyIssue)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Invalid signkey file: '%s'\n", filename); + return GNUNET_OK; + } + return skc->it (skc->it_cls, &issue); +} + + +int +TALER_MINT_signkeys_iterate (const char *mint_base_dir, + TALER_MINT_SignkeyIterator it, void *cls) +{ + char *signkey_dir; + size_t len; + struct SignkeysIterateContext skc; + + len = GNUNET_asprintf (&signkey_dir, ("%s" DIR_SEPARATOR_STR DIR_SIGNKEYS), mint_base_dir); + GNUNET_assert (len > 0); + + skc.it = it; + skc.it_cls = cls; + + return GNUNET_DISK_directory_scan (signkey_dir, &signkeys_iterate_dir_iter, &skc); +} + + +/** + * Import a denomination key from the given file + * + * @param filename the file to import the key from + * @param dki pointer to return the imported denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure + */ +int +TALER_MINT_read_denom_key (const char *filename, + struct TALER_MINT_DenomKeyIssue *dki) +{ + uint64_t size; + size_t offset; + void *data; + struct TALER_RSA_PrivateKey *priv; + int ret; + + ret = GNUNET_SYSERR; + data = NULL; + offset = sizeof (struct TALER_MINT_DenomKeyIssue) + - offsetof (struct TALER_MINT_DenomKeyIssue, signature); + if (GNUNET_OK != GNUNET_DISK_file_size (filename, + &size, + GNUNET_YES, + GNUNET_YES)) + goto cleanup; + if (size <= offset) + { + GNUNET_break (0); + goto cleanup; + } + data = GNUNET_malloc (size); + if (size != GNUNET_DISK_fn_read (filename, + data, + size)) + goto cleanup; + if (NULL == (priv = TALER_RSA_decode_key (data + offset, size - offset))) + goto cleanup; + dki->denom_priv = priv; + (void) memcpy (&dki->signature, data, offset); + ret = GNUNET_OK; + + cleanup: + GNUNET_free_non_null (data); + return ret; +} + + +/** + * Exports a denomination key to the given file + * + * @param filename the file where to write the denomination key + * @param dki the denomination key + * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure. + */ +int +TALER_MINT_write_denom_key (const char *filename, + const struct TALER_MINT_DenomKeyIssue *dki) +{ + struct TALER_RSA_PrivateKeyBinaryEncoded *priv_enc; + struct GNUNET_DISK_FileHandle *fh; + ssize_t wrote; + size_t wsize; + int ret; + + fh = NULL; + priv_enc = NULL; + ret = GNUNET_SYSERR; + if (NULL == (fh = GNUNET_DISK_file_open + (filename, + GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_TRUNCATE, + GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE))) + goto cleanup; + if (NULL == (priv_enc = TALER_RSA_encode_key (dki->denom_priv))) + goto cleanup; + wsize = sizeof (struct TALER_MINT_DenomKeyIssue) + - offsetof (struct TALER_MINT_DenomKeyIssue, signature); + if (GNUNET_SYSERR == (wrote = GNUNET_DISK_file_write (fh, + &dki->signature, + wsize))) + goto cleanup; + if (wrote != wsize) + goto cleanup; + wsize = ntohs (priv_enc->len); + if (GNUNET_SYSERR == (wrote = GNUNET_DISK_file_write (fh, + priv_enc, + wsize))) + goto cleanup; + if (wrote != wsize) + goto cleanup; + ret = GNUNET_OK; + cleanup: + GNUNET_free_non_null (priv_enc); + if (NULL != fh) + (void) GNUNET_DISK_file_close (fh); + return ret; +} + + +static int +denomkeys_iterate_keydir_iter (void *cls, + const char *filename) +{ + + struct DenomkeysIterateContext *dic = cls; + struct TALER_MINT_DenomKeyIssue issue; + + if (GNUNET_OK != TALER_MINT_read_denom_key (filename, &issue)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Invalid denomkey file: '%s'\n", filename); + return GNUNET_OK; + } + return dic->it (dic->it_cls, dic->alias, &issue); +} + + +static int +denomkeys_iterate_topdir_iter (void *cls, + const char *filename) +{ + + struct DenomkeysIterateContext *dic = cls; + dic->alias = GNUNET_STRINGS_get_short_name (filename); + + // FIXME: differentiate between error case and normal iteration abortion + if (0 > GNUNET_DISK_directory_scan (filename, &denomkeys_iterate_keydir_iter, dic)) + return GNUNET_SYSERR; + return GNUNET_OK; +} + + +int +TALER_MINT_denomkeys_iterate (const char *mint_base_dir, + TALER_MINT_DenomkeyIterator it, void *cls) +{ + char *dir; + size_t len; + struct DenomkeysIterateContext dic; + len = GNUNET_asprintf (&dir, ("%s" DIR_SEPARATOR_STR DIR_DENOMKEYS), + mint_base_dir); + GNUNET_assert (len > 0); + + dic.it = it; + dic.it_cls = cls; + + // scan over alias dirs + return GNUNET_DISK_directory_scan (dir, &denomkeys_iterate_topdir_iter, &dic); +} + + +struct GNUNET_CONFIGURATION_Handle * +TALER_MINT_config_load (const char *mint_base_dir) +{ + struct GNUNET_CONFIGURATION_Handle *cfg; + char *cfg_dir; + int res; + + res = GNUNET_asprintf (&cfg_dir, "%s" DIR_SEPARATOR_STR "config", mint_base_dir); + GNUNET_assert (res > 0); + + cfg = GNUNET_CONFIGURATION_create (); + res = GNUNET_CONFIGURATION_load_from (cfg, cfg_dir); + GNUNET_free (cfg_dir); + if (GNUNET_OK != res) + return NULL; + return cfg; +} + +int +TALER_TALER_DB_extract_amount_nbo (PGresult *result, unsigned int row, + int indices[3], struct TALER_AmountNBO *denom_nbo) +{ + if ((indices[0] < 0) || (indices[1] < 0) || (indices[2] < 0)) + return GNUNET_NO; + if (sizeof (uint32_t) != PQgetlength (result, row, indices[0])) + return GNUNET_SYSERR; + if (sizeof (uint32_t) != PQgetlength (result, row, indices[1])) + return GNUNET_SYSERR; + if (PQgetlength (result, row, indices[2]) > TALER_CURRENCY_LEN) + return GNUNET_SYSERR; + denom_nbo->value = *(uint32_t *) PQgetvalue (result, row, indices[0]); + denom_nbo->fraction = *(uint32_t *) PQgetvalue (result, row, indices[1]); + memset (denom_nbo->currency, 0, TALER_CURRENCY_LEN); + memcpy (denom_nbo->currency, PQgetvalue (result, row, indices[2]), PQgetlength (result, row, indices[2])); + return GNUNET_OK; +} + + +int +TALER_TALER_DB_extract_amount (PGresult *result, unsigned int row, + int indices[3], struct TALER_Amount *denom) +{ + struct TALER_AmountNBO denom_nbo; + int res; + + res = TALER_TALER_DB_extract_amount_nbo (result, row, indices, &denom_nbo); + if (GNUNET_OK != res) + return res; + *denom = TALER_amount_ntoh (denom_nbo); + return GNUNET_OK; +} + +/* end of mint_common.c */ diff --git a/src/mint/mint_db.c b/src/mint/mint_db.c new file mode 100644 index 00000000..6dc02587 --- /dev/null +++ b/src/mint/mint_db.c @@ -0,0 +1,1838 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint_db.c + * @brief Database access for the mint + * @author Florian Dold + */ +#include "platform.h" +#include "taler_db_lib.h" +#include "taler_signatures.h" +#include "mint_db.h" +#include "mint.h" +#include + +/** + * Thread-local database connection. + * Contains a pointer to PGconn or NULL. + */ +static pthread_key_t db_conn_threadlocal; + + +/** + * Database connection string, as read from + * the configuration. + */ +static char *TALER_MINT_db_connection_cfg_str; + + +#define break_db_err(result) do { \ + GNUNET_break(0); \ + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Database failure: %s\n", PQresultErrorMessage (result)); \ + } while (0) + +/** + * Shorthand for exit jumps. + */ +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + +int +TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn, + struct TALER_RSA_BlindedSignaturePurpose *blind_ev, + struct CollectableBlindcoin *collectable) +{ + PGresult *result; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR (blind_ev), + TALER_DB_QUERY_PARAM_END + }; + result = TALER_DB_exec_prepared (db_conn, "get_collectable_blindcoins", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("blind_ev_sig", &collectable->ev_sig), + TALER_DB_RESULT_SPEC("denom_pub", &collectable->denom_pub), + TALER_DB_RESULT_SPEC("reserve_sig", &collectable->reserve_sig), + TALER_DB_RESULT_SPEC("reserve_pub", &collectable->reserve_pub), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + (void) memcpy (&collectable->ev, blind_ev, sizeof (struct TALER_RSA_BlindedSignaturePurpose)); + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_insert_collectable_blindcoin (PGconn *db_conn, + const struct CollectableBlindcoin *collectable) +{ + PGresult *result; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR (&collectable->ev), + TALER_DB_QUERY_PARAM_PTR (&collectable->ev_sig), + TALER_DB_QUERY_PARAM_PTR (&collectable->denom_pub), + TALER_DB_QUERY_PARAM_PTR (&collectable->reserve_pub), + TALER_DB_QUERY_PARAM_PTR (&collectable->reserve_sig), + TALER_DB_QUERY_PARAM_END + }; + result = TALER_DB_exec_prepared (db_conn, "insert_collectable_blindcoins", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Insert failed (updated '%s' tupes instead of '1')\n", + PQcmdTuples (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_get_reserve (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *reserve_pub, + struct Reserve *reserve) +{ + PGresult *result; + int res; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR (reserve_pub), + TALER_DB_QUERY_PARAM_END + }; + + result = TALER_DB_exec_prepared (db_conn, "get_reserve", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + reserve->reserve_pub = *reserve_pub; + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("status_sig", &reserve->status_sig), + TALER_DB_RESULT_SPEC("status_sign_pub", &reserve->status_sign_pub), + TALER_DB_RESULT_SPEC_END + }; + + res = TALER_DB_extract_result (result, rs, 0); + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + + { + int fnums[] = { + PQfnumber (result, "balance_value"), + PQfnumber (result, "balance_fraction"), + PQfnumber (result, "balance_currency"), + }; + if (GNUNET_OK != TALER_TALER_DB_extract_amount_nbo (result, 0, fnums, &reserve->balance)) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + } + + /* FIXME: Add expiration?? */ + + PQclear (result); + return GNUNET_OK; +} + + +/* If fresh is GNUNET_YES, set some fields to NULL as they are not actually valid */ +int +TALER_MINT_DB_update_reserve (PGconn *db_conn, + const struct Reserve *reserve, + int fresh) +{ + PGresult *result; + uint64_t stamp_sec; + + stamp_sec = GNUNET_ntohll (GNUNET_TIME_absolute_ntoh (reserve->expiration).abs_value_us / 1000000); + + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR (&reserve->reserve_pub), + TALER_DB_QUERY_PARAM_PTR (&reserve->balance.value), + TALER_DB_QUERY_PARAM_PTR (&reserve->balance.fraction), + TALER_DB_QUERY_PARAM_PTR_SIZED (&reserve->balance.currency, + strlen (reserve->balance.currency)), + TALER_DB_QUERY_PARAM_PTR (&reserve->status_sig), + TALER_DB_QUERY_PARAM_PTR (&reserve->status_sign_pub), + TALER_DB_QUERY_PARAM_PTR (&stamp_sec), + TALER_DB_QUERY_PARAM_END + }; + + /* set some fields to NULL if they are not actually valid */ + + if (GNUNET_YES == fresh) + { + unsigned i; + for (i = 4; i <= 7; i += 1) + { + params[i].data = NULL; + params[i].size = 0; + } + } + + result = TALER_DB_exec_prepared (db_conn, "update_reserve", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Update failed (updated '%s' tupes instead of '1')\n", + PQcmdTuples (result)); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + + +int +TALER_MINT_DB_prepare (PGconn *db_conn) +{ + PGresult *result; + + result = PQprepare (db_conn, "get_reserve", + "SELECT " + " balance_value, balance_fraction, balance_currency " + ",expiration_date, blind_session_pub, blind_session_priv" + ",status_sig, status_sign_pub " + "FROM reserves " + "WHERE reserve_pub=$1 " + "LIMIT 1; ", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "update_reserve", + "UPDATE reserves " + "SET" + " balance_value=$2 " + ",balance_fraction=$3 " + ",balance_currency=$4 " + ",status_sig=$5 " + ",status_sign_pub=$6 " + ",expiration_date=$7 " + "WHERE reserve_pub=$1 ", + 9, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + result = PQprepare (db_conn, "insert_collectable_blindcoins", + "INSERT INTO collectable_blindcoins ( " + " blind_ev, blind_ev_sig " + ",denom_pub, reserve_pub, reserve_sig) " + "VALUES ($1, $2, $3, $4, $5)", + 6, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_collectable_blindcoins", + "SELECT " + "blind_ev_sig, denom_pub, reserve_sig, reserve_pub " + "FROM collectable_blindcoins " + "WHERE blind_ev = $1", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_reserve_order", + "SELECT " + " blind_ev, blind_ev_sig, denom_pub, reserve_sig, reserve_pub " + "FROM collectable_blindcoins " + "WHERE blind_session_pub = $1", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + /* FIXME: does it make sense to store these computed values in the DB? */ + result = PQprepare (db_conn, "get_refresh_session", + "SELECT " + " (SELECT count(*) FROM refresh_melt WHERE session_pub = $1)::INT2 as num_oldcoins " + ",(SELECT count(*) FROM refresh_blind_session_keys " + " WHERE session_pub = $1 and cnc_index = 0)::INT2 as num_newcoins " + ",(SELECT count(*) FROM refresh_blind_session_keys " + " WHERE session_pub = $1 and newcoin_index = 0)::INT2 as kappa " + ",noreveal_index" + ",session_commit_sig " + ",reveal_ok " + "FROM refresh_sessions " + "WHERE session_pub = $1", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_known_coin", + "SELECT " + " coin_pub, denom_pub, denom_sig " + ",expended_value, expended_fraction, expended_currency " + ",refresh_session_pub " + "FROM known_coins " + "WHERE coin_pub = $1", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "update_known_coin", + "UPDATE known_coins " + "SET " + " denom_pub = $2 " + ",denom_sig = $3 " + ",expended_value = $4 " + ",expended_fraction = $5 " + ",expended_currency = $6 " + ",refresh_session_pub = $7 " + "WHERE " + " coin_pub = $1 ", + 7, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_known_coin", + "INSERT INTO known_coins (" + " coin_pub" + ",denom_pub" + ",denom_sig" + ",expended_value" + ",expended_fraction" + ",expended_currency" + ",refresh_session_pub" + ")" + "VALUES ($1,$2,$3,$4,$5,$6,$7)", + 7, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_refresh_commit_link", + "SELECT " + " transfer_pub " + ",link_secret_enc " + "FROM refresh_commit_link " + "WHERE session_pub = $1 AND cnc_index = $2 AND oldcoin_index = $3", + 3, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_refresh_commit_coin", + "SELECT " + " link_vector_enc " + ",coin_ev " + "FROM refresh_commit_coin " + "WHERE session_pub = $1 AND cnc_index = $2 AND newcoin_index = $3", + 3, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_order", + "INSERT INTO refresh_order ( " + " newcoin_index " + ",session_pub " + ",denom_pub " + ") " + "VALUES ($1, $2, $3) ", + 3, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_melt", + "INSERT INTO refresh_melt ( " + " session_pub " + ",oldcoin_index " + ",coin_pub " + ",denom_pub " + ") " + "VALUES ($1, $2, $3, $4) ", + 3, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_refresh_order", + "SELECT denom_pub " + "FROM refresh_order " + "WHERE session_pub = $1 AND newcoin_index = $2", + 2, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_refresh_collectable", + "SELECT ev_sig " + "FROM refresh_collectable " + "WHERE session_pub = $1 AND newcoin_index = $2", + 2, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_refresh_melt", + "SELECT coin_pub " + "FROM refresh_melt " + "WHERE session_pub = $1 AND oldcoin_index = $2", + 2, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_session", + "INSERT INTO refresh_sessions ( " + " session_pub " + ",noreveal_index " + ") " + "VALUES ($1, $2) ", + 2, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_commit_link", + "INSERT INTO refresh_commit_link ( " + " session_pub " + ",transfer_pub " + ",cnc_index " + ",oldcoin_index " + ",link_secret_enc " + ") " + "VALUES ($1, $2, $3, $4, $5) ", + 5, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_commit_coin", + "INSERT INTO refresh_commit_coin ( " + " session_pub " + ",coin_ev " + ",cnc_index " + ",newcoin_index " + ",link_vector_enc " + ") " + "VALUES ($1, $2, $3, $4, $5) ", + 5, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "insert_refresh_collectable", + "INSERT INTO refresh_collectable ( " + " session_pub " + ",newcoin_index " + ",ev_sig " + ") " + "VALUES ($1, $2, $3) ", + 3, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "set_reveal_ok", + "UPDATE refresh_sessions " + "SET reveal_ok = TRUE " + "WHERE session_pub = $1 ", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_link", + "SELECT link_vector_enc, ro.denom_pub, ev_sig " + "FROM refresh_melt rm " + " JOIN refresh_order ro USING (session_pub) " + " JOIN refresh_commit_coin rcc USING (session_pub) " + " JOIN refresh_sessions rs USING (session_pub) " + " JOIN refresh_collectable rc USING (session_pub) " + "WHERE rm.coin_pub = $1 " + "AND ro.newcoin_index = rcc.newcoin_index " + "AND ro.newcoin_index = rc.newcoin_index " + "AND rcc.cnc_index = rs.noreveal_index % ( " + " SELECT count(*) FROM refresh_commit_coin rcc2 " + " WHERE rcc2.newcoin_index = 0 AND rcc2.session_pub = rs.session_pub " + " ) ", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQprepare (db_conn, "get_transfer", + "SELECT transfer_pub, link_secret_enc " + "FROM refresh_melt rm " + " JOIN refresh_commit_link rcl USING (session_pub) " + " JOIN refresh_sessions rs USING (session_pub) " + "WHERE rm.coin_pub = $1 " + "AND rm.oldcoin_index = rcl.oldcoin_index " + "AND rcl.cnc_index = rs.noreveal_index % ( " + " SELECT count(*) FROM refresh_commit_coin rcc2 " + " WHERE newcoin_index = 0 AND rcc2.session_pub = rm.session_pub " + " ) ", + 1, NULL); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + + if (GNUNET_OK != TALER_MINT_DB_prepare_deposits (db_conn)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + return GNUNET_OK; +} + + +/** + * Roll back the current transaction of a database connection. + * + * @param db_conn the database connection + * @return GNUNET_OK on success + */ +int +TALER_MINT_DB_rollback (PGconn *db_conn) +{ + PGresult *result; + + result = PQexec(db_conn, "ROLLBACK"); + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +/** + * Roll back the current transaction of a database connection. + * + * @param db_conn the database connection + * @return GNUNET_OK on success + */ +int +TALER_MINT_DB_commit (PGconn *db_conn) +{ + PGresult *result; + + result = PQexec(db_conn, "COMMIT"); + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +/** + * Start a transaction. + * + * @param db_conn the database connection + * @return GNUNET_OK on success + */ +int +TALER_MINT_DB_transaction (PGconn *db_conn) +{ + PGresult *result; + + result = PQexec(db_conn, "BEGIN"); + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Can't start transaction: %s\n", PQresultErrorMessage (result)); + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +/** + * Insert a refresh order into the database. + */ +int +TALER_MINT_DB_insert_refresh_order (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub) +{ + uint16_t newcoin_index_nbo = htons (newcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(denom_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_order", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_get_refresh_session (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + struct RefreshSession *session) +{ + int res; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(refresh_session_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_session", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + return GNUNET_NO; + + GNUNET_assert (1 == PQntuples (result)); + + /* We're done if the caller is only interested in + * whether the session exists or not */ + + if (NULL == session) + return GNUNET_YES; + + memset (session, 0, sizeof (struct RefreshSession)); + + session->session_pub = *refresh_session_pub; + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("num_oldcoins", &session->num_oldcoins), + TALER_DB_RESULT_SPEC("num_newcoins", &session->num_newcoins), + TALER_DB_RESULT_SPEC("kappa", &session->kappa), + TALER_DB_RESULT_SPEC("noreveal_index", &session->noreveal_index), + TALER_DB_RESULT_SPEC("reveal_ok", &session->reveal_ok), + TALER_DB_RESULT_SPEC_END + }; + + res = TALER_DB_extract_result (result, rs, 0); + + if (GNUNET_OK != res) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + + if (TALER_DB_field_isnull (result, 0, "session_commit_sig")) + session->has_commit_sig = GNUNET_NO; + else + session->has_commit_sig = GNUNET_YES; + + session->num_oldcoins = ntohs (session->num_oldcoins); + session->num_newcoins = ntohs (session->num_newcoins); + session->kappa = ntohs (session->kappa); + session->noreveal_index = ntohs (session->noreveal_index); + + PQclear (result); + return GNUNET_YES; +} + + +int +TALER_MINT_DB_get_known_coin (PGconn *db_conn, struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + struct KnownCoin *known_coin) +{ + int res; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(coin_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_known_coin", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed: %s\n", PQresultErrorMessage (result)); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + return GNUNET_NO; + + GNUNET_assert (1 == PQntuples (result)); + + /* extract basic information about the known coin */ + + { + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("coin_pub", &known_coin->public_info.coin_pub), + TALER_DB_RESULT_SPEC("denom_pub", &known_coin->public_info.denom_pub), + TALER_DB_RESULT_SPEC("denom_sig", &known_coin->public_info.denom_sig), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != (res = TALER_DB_extract_result (result, rs, 0))) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + } + + /* extract the expended amount of the coin */ + + if (GNUNET_OK != TALER_DB_extract_amount (result, 0, + "expended_value", + "expended_fraction", + "expended_currency", + &known_coin->expended_balance)) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + + /* extract the refresh session of the coin or mark it as missing */ + + { + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("refresh_session_pub", &known_coin->refresh_session_pub), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_SYSERR == (res = TALER_DB_extract_result (result, rs, 0))) + { + GNUNET_break (0); + PQclear (result); + return GNUNET_SYSERR; + } + if (GNUNET_NO == res) + { + known_coin->is_refreshed = GNUNET_NO; + memset (&known_coin->refresh_session_pub, 0, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + } + else + { + known_coin->is_refreshed = GNUNET_YES; + } + } + + PQclear (result); + return GNUNET_YES; +} + + +int +TALER_MINT_DB_create_refresh_session (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub) +{ + uint16_t noreveal_index; + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&noreveal_index), + TALER_DB_QUERY_PARAM_END + }; + + noreveal_index = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 1<<15); + noreveal_index = htonl (noreveal_index); + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_session", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_set_commit_signature (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const struct GNUNET_CRYPTO_EddsaSignature *commit_sig) +{ + GNUNET_break (0); + return GNUNET_SYSERR; +} + + +int +TALER_MINT_DB_set_reveal_ok (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub) +{ + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "set_reveal_ok", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_update_known_coin (PGconn *db_conn, + const struct KnownCoin *known_coin) +{ + struct TALER_AmountNBO expended_nbo = TALER_amount_hton (known_coin->expended_balance); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.coin_pub), + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.denom_pub), + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.denom_sig), + TALER_DB_QUERY_PARAM_PTR(&expended_nbo.value), + TALER_DB_QUERY_PARAM_PTR(&expended_nbo.fraction), + TALER_DB_QUERY_PARAM_PTR_SIZED(expended_nbo.currency, strlen (expended_nbo.currency)), + TALER_DB_QUERY_PARAM_PTR(&known_coin->refresh_session_pub), + TALER_DB_QUERY_PARAM_END + }; + + if (GNUNET_NO == known_coin->is_refreshed) + { + // Mind the magic index! + params[6].data = NULL; + params[6].size = 0; + } + + PGresult *result = TALER_DB_exec_prepared (db_conn, "update_known_coin", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + PQclear (result); + // return 'no' here (don't fail) so that we can + // insert if update fails (=> "upsert") + return GNUNET_NO; + } + + PQclear (result); + return GNUNET_YES; +} + +int +TALER_MINT_DB_insert_known_coin (PGconn *db_conn, + const struct KnownCoin *known_coin) +{ + struct TALER_AmountNBO expended_nbo = TALER_amount_hton (known_coin->expended_balance); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.coin_pub), + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.denom_pub), + TALER_DB_QUERY_PARAM_PTR(&known_coin->public_info.denom_sig), + TALER_DB_QUERY_PARAM_PTR(&expended_nbo.value), + TALER_DB_QUERY_PARAM_PTR(&expended_nbo.fraction), + TALER_DB_QUERY_PARAM_PTR_SIZED(&expended_nbo.currency, strlen (expended_nbo.currency)), + TALER_DB_QUERY_PARAM_PTR(&known_coin->refresh_session_pub), + TALER_DB_QUERY_PARAM_END + }; + + if (GNUNET_NO == known_coin->is_refreshed) + { + // Mind the magic index! + params[6].data = NULL; + params[6].size = 0; + } + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_known_coin", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + PQclear (result); + // return 'no' here (don't fail) so that we can + // update if insert fails (=> "upsert") + return GNUNET_NO; + } + + PQclear (result); + return GNUNET_YES; +} + + +int +TALER_MINT_DB_upsert_known_coin (PGconn *db_conn, struct KnownCoin *known_coin) +{ + int ret; + ret = TALER_MINT_DB_update_known_coin (db_conn, known_coin); + if (GNUNET_SYSERR == ret) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + if (GNUNET_YES == ret) + return GNUNET_YES; + return TALER_MINT_DB_insert_known_coin (db_conn, known_coin); +} + + +int +TALER_MINT_DB_insert_refresh_commit_link (PGconn *db_conn, struct RefreshCommitLink *commit_link) +{ + uint16_t cnc_index_nbo = htons (commit_link->cnc_index); + uint16_t oldcoin_index_nbo = htons (commit_link->oldcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(&commit_link->session_pub), + TALER_DB_QUERY_PARAM_PTR(&commit_link->transfer_pub), + TALER_DB_QUERY_PARAM_PTR(&cnc_index_nbo), + TALER_DB_QUERY_PARAM_PTR(&oldcoin_index_nbo), + TALER_DB_QUERY_PARAM_PTR_SIZED(&commit_link->shared_secret_enc, sizeof (struct GNUNET_HashCode)), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_commit_link", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_insert_refresh_commit_coin (PGconn *db_conn, struct RefreshCommitCoin *commit_coin) +{ + uint16_t cnc_index_nbo = htons (commit_coin->cnc_index); + uint16_t newcoin_index_nbo = htons (commit_coin->newcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(&commit_coin->session_pub), + TALER_DB_QUERY_PARAM_PTR(&commit_coin->coin_ev), + TALER_DB_QUERY_PARAM_PTR(&cnc_index_nbo), + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_PTR_SIZED(&commit_coin->link_enc, sizeof (struct LinkData)), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_commit_coin", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_get_refresh_commit_link (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + int cnc_index, int oldcoin_index, + struct RefreshCommitLink *cc) +{ + uint16_t cnc_index_nbo = htons (cnc_index); + uint16_t oldcoin_index_nbo = htons (oldcoin_index); + + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(refresh_session_pub), + TALER_DB_QUERY_PARAM_PTR(&cnc_index_nbo), + TALER_DB_QUERY_PARAM_PTR(&oldcoin_index_nbo), + TALER_DB_QUERY_PARAM_END + }; + + cc->cnc_index = cnc_index; + cc->oldcoin_index = oldcoin_index; + cc->session_pub = *refresh_session_pub; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_commit_link", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("transfer_pub", &cc->transfer_pub), + TALER_DB_RESULT_SPEC_SIZED("link_secret_enc", &cc->shared_secret_enc, + TALER_REFRESH_SHARED_SECRET_LENGTH), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_YES != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + GNUNET_free (cc); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_YES; +} + + +int +TALER_MINT_DB_get_refresh_commit_coin (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + int cnc_index, int newcoin_index, + struct RefreshCommitCoin *cc) +{ + uint16_t cnc_index_nbo = htons (cnc_index); + uint16_t newcoin_index_nbo = htons (newcoin_index); + + cc->cnc_index = cnc_index; + cc->newcoin_index = newcoin_index; + cc->session_pub = *refresh_session_pub; + + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(refresh_session_pub), + TALER_DB_QUERY_PARAM_PTR(&cnc_index_nbo), + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_commit_coin", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("coin_ev", &cc->coin_ev), + TALER_DB_RESULT_SPEC_SIZED("link_vector_enc", &cc->link_enc, + TALER_REFRESH_LINK_LENGTH), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_YES != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_YES; +} + + +int +TALER_MINT_DB_get_refresh_order (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub) +{ + uint16_t newcoin_index_nbo = htons (newcoin_index); + + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_order", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + GNUNET_assert (1 == PQntuples (result)); + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("denom_pub", denom_pub), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_insert_refresh_collectable (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const struct TALER_RSA_Signature *ev_sig) +{ + uint16_t newcoin_index_nbo = htons (newcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_PTR(ev_sig), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_collectable", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_get_refresh_collectable (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + struct TALER_RSA_Signature *ev_sig) +{ + + uint16_t newcoin_index_nbo = htons (newcoin_index); + + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&newcoin_index_nbo), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_collectable", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + GNUNET_assert (1 == PQntuples (result)); + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("ev_sig", ev_sig), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + + +int +TALER_MINT_DB_insert_refresh_melt (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + uint16_t oldcoin_index, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub) +{ + uint16_t oldcoin_index_nbo = htons (oldcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&oldcoin_index_nbo), + TALER_DB_QUERY_PARAM_PTR(coin_pub), + TALER_DB_QUERY_PARAM_PTR(denom_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "insert_refresh_melt", params); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + return GNUNET_OK; +} + + + +int +TALER_MINT_DB_get_refresh_melt (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + uint16_t oldcoin_index, + struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub) +{ + uint16_t oldcoin_index_nbo = htons (oldcoin_index); + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(session_pub), + TALER_DB_QUERY_PARAM_PTR(&oldcoin_index_nbo), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_refresh_melt", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + GNUNET_assert (1 == PQntuples (result)); + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("coin_pub", coin_pub), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_db_get_link (PGconn *db_conn, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + LinkIterator link_iter, + void *cls) +{ + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(coin_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_link", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + + int i = 0; + int res; + + for (i = 0; i < PQntuples (result); i++) + { + struct LinkDataEnc link_data_enc; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + struct TALER_RSA_Signature ev_sig; + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("link_vector_enc", &link_data_enc), + TALER_DB_RESULT_SPEC("denom_pub", &denom_pub), + TALER_DB_RESULT_SPEC("ev_sig", &ev_sig), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, i)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != (res = link_iter (cls, &link_data_enc, &denom_pub, &ev_sig))) + { + GNUNET_assert (GNUNET_SYSERR != res); + PQclear (result); + return res; + } + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_db_get_transfer (PGconn *db_conn, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + struct GNUNET_CRYPTO_EcdsaPublicKey *transfer_pub, + struct SharedSecretEnc *shared_secret_enc) +{ + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR(coin_pub), + TALER_DB_QUERY_PARAM_END + }; + + PGresult *result = TALER_DB_exec_prepared (db_conn, "get_transfer", params); + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + if (1 != PQntuples (result)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "got %d tuples for get_transfer\n", PQntuples (result)); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC("transfer_pub", transfer_pub), + TALER_DB_RESULT_SPEC("link_secret_enc", shared_secret_enc), + TALER_DB_RESULT_SPEC_END + }; + + if (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)) + { + PQclear (result); + GNUNET_break (0); + return GNUNET_SYSERR; + } + + PQclear (result); + return GNUNET_OK; +} + + +int +TALER_MINT_DB_init_deposits (PGconn *conn, int tmp) +{ + const char *tmp_str = (1 == tmp) ? "TEMPORARY" : ""; + char *sql; + PGresult *res; + int ret; + + res = NULL; + (void) GNUNET_asprintf (&sql, + "CREATE %1$s TABLE IF NOT EXISTS deposits (" + " coin_pub BYTEA NOT NULL PRIMARY KEY CHECK (length(coin_pub)=32)" + ",denom_pub BYTEA NOT NULL CHECK (length(denom_pub)=32)" + ",transaction_id INT8 NOT NULL" + ",amount_value INT4 NOT NULL" + ",amount_fraction INT4 NOT NULL" + ",amount_currency VARCHAR(4) NOT NULL" + ",merchant_pub BYTEA NOT NULL" + ",h_contract BYTEA NOT NULL CHECK (length(h_contract)=64)" + ",h_wire BYTEA NOT NULL CHECK (length(h_wire)=64)" + ",coin_sig BYTEA NOT NULL CHECK (length(coin_sig)=64)" + ",wire TEXT NOT NULL" + ")", + tmp_str); + res = PQexec (conn, sql); + GNUNET_free (sql); + if (PGRES_COMMAND_OK != PQresultStatus (res)) + { + break_db_err (res); + ret = GNUNET_SYSERR; + } + else + ret = GNUNET_OK; + PQclear (res); + return ret; +} + +int +TALER_MINT_DB_prepare_deposits (PGconn *db_conn) +{ + PGresult *result; + + result = PQprepare (db_conn, "insert_deposit", + "INSERT INTO deposits (" + "coin_pub," + "denom_pub," + "transaction_id," + "amount_value," + "amount_fraction," + "amount_currency," + "merchant_pub," + "h_contract," + "h_wire," + "coin_sig," + "wire" + ") VALUES (" + "$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11" + ")", + 11, NULL); + EXITIF (PGRES_COMMAND_OK != PQresultStatus(result)); + PQclear (result); + + result = PQprepare (db_conn, "get_deposit", + "SELECT " + "coin_pub," + "denom_pub," + "transaction_id," + "amount_value," + "amount_fraction," + "amount_currency," + "merchant_pub," + "h_contract," + "h_wire," + "coin_sig" + " FROM deposits WHERE (" + "coin_pub = $1" + ")", + 1, NULL); + EXITIF (PGRES_COMMAND_OK != PQresultStatus(result)); + PQclear (result); + + return GNUNET_OK; + + EXITIF_exit: + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; +} + + +int +TALER_MINT_DB_insert_deposit (PGconn *db_conn, + const struct Deposit *deposit) +{ + struct TALER_DB_QueryParam params[]= { + TALER_DB_QUERY_PARAM_PTR (&deposit->coin_pub), + TALER_DB_QUERY_PARAM_PTR (&deposit->denom_pub), + TALER_DB_QUERY_PARAM_PTR (&deposit->transaction_id), + TALER_DB_QUERY_PARAM_PTR (&deposit->amount.value), + TALER_DB_QUERY_PARAM_PTR (&deposit->amount.fraction), + TALER_DB_QUERY_PARAM_PTR_SIZED (deposit->amount.currency, strlen (deposit->amount.currency)), + TALER_DB_QUERY_PARAM_PTR (&deposit->merchant_pub), + TALER_DB_QUERY_PARAM_PTR (&deposit->h_contract), + TALER_DB_QUERY_PARAM_PTR (&deposit->h_wire), + TALER_DB_QUERY_PARAM_PTR (&deposit->coin_sig), + TALER_DB_QUERY_PARAM_PTR_SIZED (deposit->wire, strlen(deposit->wire)), + TALER_DB_QUERY_PARAM_END + }; + PGresult *result; + + result = TALER_DB_exec_prepared (db_conn, "insert_deposit", params); + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + break_db_err (result); + PQclear (result); + return GNUNET_SYSERR; + } + PQclear (result); + return GNUNET_OK; +} + +int +TALER_MINT_DB_get_deposit (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *coin_pub, + struct Deposit **r_deposit) +{ + struct TALER_DB_QueryParam params[] = { + TALER_DB_QUERY_PARAM_PTR (coin_pub), + TALER_DB_QUERY_PARAM_END + }; + PGresult *result; + struct Deposit *deposit; + + deposit = NULL; + result = TALER_DB_exec_prepared (db_conn, "get_deposit", params); + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + break_db_err (result); + goto EXITIF_exit; + } + + if (0 == PQntuples (result)) + { + PQclear (result); + return GNUNET_NO; + } + + if (1 != PQntuples (result)) + { + GNUNET_break (0); + goto EXITIF_exit; + } + + { + deposit = GNUNET_malloc (sizeof (struct Deposit)); /* Without wire data */ + struct TALER_DB_ResultSpec rs[] = { + TALER_DB_RESULT_SPEC ("coin_pub", &deposit->coin_pub), + TALER_DB_RESULT_SPEC ("denom_pub", &deposit->denom_pub), + TALER_DB_RESULT_SPEC ("coin_sig", &deposit->coin_sig), + TALER_DB_RESULT_SPEC ("transaction_id", &deposit->transaction_id), + TALER_DB_RESULT_SPEC ("merchant_pub", &deposit->merchant_pub), + TALER_DB_RESULT_SPEC ("h_contract", &deposit->h_contract), + TALER_DB_RESULT_SPEC ("h_wire", &deposit->h_wire), + TALER_DB_RESULT_SPEC_END + }; + EXITIF (GNUNET_OK != TALER_DB_extract_result (result, rs, 0)); + EXITIF (GNUNET_OK != TALER_DB_extract_amount_nbo (result, 0, + "amount_value", + "amount_fraction", + "amount_currency", + &deposit->amount)); + deposit->purpose.purpose = htonl (TALER_SIGNATURE_DEPOSIT); + deposit->purpose.size = htonl (sizeof (struct Deposit) + - offsetof (struct Deposit, purpose)); + } + + PQclear (result); + *r_deposit = deposit; + return GNUNET_OK; + +EXITIF_exit: + PQclear (result); + GNUNET_free_non_null (deposit); + deposit = NULL; + return GNUNET_SYSERR; +} + + + +/** + * Get the thread-local database-handle. + * Connect to the db if the connection does not exist yet. + * + * @param the database connection, or NULL on error + */ +PGconn * +TALER_MINT_DB_get_connection (void) +{ + PGconn *db_conn; + + if (NULL != (db_conn = pthread_getspecific (db_conn_threadlocal))) + return db_conn; + + db_conn = PQconnectdb (TALER_MINT_db_connection_cfg_str); + + if (CONNECTION_OK != PQstatus (db_conn)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "db connection failed: %s\n", + PQerrorMessage (db_conn)); + GNUNET_break (0); + return NULL; + } + + if (GNUNET_OK != TALER_MINT_DB_prepare (db_conn)) + { + GNUNET_break (0); + return NULL; + } + if (0 != pthread_setspecific (db_conn_threadlocal, db_conn)) + { + GNUNET_break (0); + return NULL; + } + return db_conn; +} + + +/** + * Close thread-local database connection when a thread is destroyed. + * + * @param closure we get from pthreads (the db handle) + */ +static void +db_conn_destroy (void *cls) +{ + PGconn *db_conn = cls; + if (NULL != db_conn) + PQfinish (db_conn); +} + + +/** + * Initialize database subsystem. + * + * @param connection_cfg configuration to use to talk to DB + * @return GNUNET_OK on success + */ +int +TALER_MINT_DB_init (const char *connection_cfg) +{ + + if (0 != pthread_key_create (&db_conn_threadlocal, &db_conn_destroy)) + { + fprintf (stderr, + "Can't create pthread key.\n"); + return GNUNET_SYSERR; + } + TALER_MINT_db_connection_cfg_str = GNUNET_strdup (connection_cfg); + return GNUNET_OK; +} diff --git a/src/mint/mint_db.h b/src/mint/mint_db.h new file mode 100644 index 00000000..4f47aac1 --- /dev/null +++ b/src/mint/mint_db.h @@ -0,0 +1,344 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint/mint_db.h + * @brief Mint-specific database access + * @author Florian Dold + */ + +#ifndef _NEURO_MINT_DB_H +#define _NEURO_MINT_DB_H + +#include +#include +#include "taler_util.h" +#include "taler_types.h" +#include "taler_rsa.h" + + +/** + * Reserve row. Corresponds to table 'reserves' in + * the mint's database. + */ +struct Reserve +{ + /** + * Signature over the purse. + * Only valid if (blind_session_missing==GNUNET_YES). + */ + struct GNUNET_CRYPTO_EddsaSignature status_sig; + /** + * Signature with purpose TALER_SIGNATURE_PURSE. + * Only valid if (blind_session_missing==GNUNET_YES). + */ + struct GNUNET_CRYPTO_EccSignaturePurpose status_sig_purpose; + /** + * Signing key used to sign the purse. + * Only valid if (blind_session_missing==GNUNET_YES). + */ + struct GNUNET_CRYPTO_EddsaPublicKey status_sign_pub; + /** + * Withdraw public key, identifies the purse. + * Only the customer knows the corresponding private key. + */ + struct GNUNET_CRYPTO_EddsaPublicKey reserve_pub; + /** + * Remaining balance in the purse. + */ + struct TALER_AmountNBO balance; + + /** + * Expiration date for the purse. + */ + struct GNUNET_TIME_AbsoluteNBO expiration; +}; + + +struct CollectableBlindcoin +{ + struct TALER_RSA_BlindedSignaturePurpose ev; + struct TALER_RSA_Signature ev_sig; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + struct GNUNET_CRYPTO_EddsaPublicKey reserve_pub; + struct GNUNET_CRYPTO_EddsaSignature reserve_sig; +}; + + +struct RefreshSession +{ + int has_commit_sig; + struct GNUNET_CRYPTO_EddsaSignature commit_sig; + struct GNUNET_CRYPTO_EddsaPublicKey session_pub; + uint16_t num_oldcoins; + uint16_t num_newcoins; + uint16_t kappa; + uint16_t noreveal_index; + uint8_t reveal_ok; +}; + + +#define TALER_REFRESH_SHARED_SECRET_LENGTH (sizeof (struct GNUNET_HashCode)) +#define TALER_REFRESH_LINK_LENGTH (sizeof (struct LinkData)) + +struct RefreshCommitLink +{ + struct GNUNET_CRYPTO_EddsaPublicKey session_pub; + struct GNUNET_CRYPTO_EcdsaPublicKey transfer_pub; + uint16_t cnc_index; + uint16_t oldcoin_index; + char shared_secret_enc[sizeof (struct GNUNET_HashCode)]; +}; + +struct LinkData +{ + struct GNUNET_CRYPTO_EcdsaPrivateKey coin_priv; + struct TALER_RSA_BlindingKeyBinaryEncoded bkey_enc; +}; + + +GNUNET_NETWORK_STRUCT_BEGIN + +struct SharedSecretEnc +{ + char data[TALER_REFRESH_SHARED_SECRET_LENGTH]; +}; + + +struct LinkDataEnc +{ + char data[sizeof (struct LinkData)]; +}; + +GNUNET_NETWORK_STRUCT_END + +struct RefreshCommitCoin +{ + struct GNUNET_CRYPTO_EddsaPublicKey session_pub; + struct TALER_RSA_BlindedSignaturePurpose coin_ev; + uint16_t cnc_index; + uint16_t newcoin_index; + char link_enc[sizeof (struct LinkData)]; +}; + + +struct KnownCoin +{ + struct TALER_CoinPublicInfo public_info; + struct TALER_Amount expended_balance; + int is_refreshed; + /** + * Refreshing session, only valid if + * is_refreshed==1. + */ + struct GNUNET_CRYPTO_EddsaPublicKey refresh_session_pub; +}; + +GNUNET_NETWORK_STRUCT_BEGIN + +struct Deposit +{ + /* FIXME: should be TALER_CoinPublicInfo */ + struct GNUNET_CRYPTO_EddsaPublicKey coin_pub; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + struct TALER_RSA_Signature coin_sig; + struct TALER_RSA_SignaturePurpose purpose; + uint64_t transaction_id; + struct TALER_AmountNBO amount; + struct GNUNET_CRYPTO_EddsaPublicKey merchant_pub; + struct GNUNET_HashCode h_contract; + struct GNUNET_HashCode h_wire; + /* TODO: uint16_t wire_size */ + char wire[]; /* string encoded wire JSON object */ +}; + +GNUNET_NETWORK_STRUCT_END + +int +TALER_MINT_DB_prepare (PGconn *db_conn); + +int +TALER_MINT_DB_get_collectable_blindcoin (PGconn *db_conn, + struct TALER_RSA_BlindedSignaturePurpose *blind_ev, + struct CollectableBlindcoin *collectable); + +int +TALER_MINT_DB_insert_collectable_blindcoin (PGconn *db_conn, + const struct CollectableBlindcoin *collectable); + + +int +TALER_MINT_DB_rollback (PGconn *db_conn); + + +int +TALER_MINT_DB_transaction (PGconn *db_conn); + + +int +TALER_MINT_DB_commit (PGconn *db_conn); + + +int +TALER_MINT_DB_get_reserve (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *reserve_pub, + struct Reserve *reserve_res); + +int +TALER_MINT_DB_update_reserve (PGconn *db_conn, + const struct Reserve *reserve, + int fresh); + + +int +TALER_MINT_DB_insert_refresh_order (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub); + +int +TALER_MINT_DB_get_refresh_session (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + struct RefreshSession *r_session); + + +int +TALER_MINT_DB_get_known_coin (PGconn *db_conn, struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + struct KnownCoin *known_coin); + + +int +TALER_MINT_DB_upsert_known_coin (PGconn *db_conn, struct KnownCoin *known_coin); + + +int +TALER_MINT_DB_insert_refresh_commit_link (PGconn *db_conn, struct RefreshCommitLink *commit_link); + +int +TALER_MINT_DB_insert_refresh_commit_coin (PGconn *db_conn, struct RefreshCommitCoin *commit_coin); + + +int +TALER_MINT_DB_get_refresh_commit_link (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + int i, int j, + struct RefreshCommitLink *commit_link); + + +int +TALER_MINT_DB_get_refresh_commit_coin (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub, + int i, int j, + struct RefreshCommitCoin *commit_coin); + + +int +TALER_MINT_DB_create_refresh_session (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey + *session_pub); + + +int +TALER_MINT_DB_get_refresh_order (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub); + + +int +TALER_MINT_DB_insert_refresh_collectable (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const struct TALER_RSA_Signature *ev_sig); +int +TALER_MINT_DB_get_refresh_collectable (PGconn *db_conn, + uint16_t newcoin_index, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + struct TALER_RSA_Signature *ev_sig); +int +TALER_MINT_DB_set_reveal_ok (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub); + +int +TALER_MINT_DB_insert_refresh_melt (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + uint16_t oldcoin_index, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub); + + +int +TALER_MINT_DB_get_refresh_melt (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + uint16_t oldcoin_index, + struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub); + + +typedef +int (*LinkIterator) (void *cls, + const struct LinkDataEnc *link_data_enc, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub, + const struct TALER_RSA_Signature *ev_sig); + +int +TALER_db_get_link (PGconn *db_conn, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + LinkIterator link_iter, + void *cls); + + +int +TALER_db_get_transfer (PGconn *db_conn, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + struct GNUNET_CRYPTO_EcdsaPublicKey *transfer_pub, + struct SharedSecretEnc *shared_secret_enc); + +int +TALER_MINT_DB_init_deposits (PGconn *db_conn, int temporary); + +int +TALER_MINT_DB_prepare_deposits (PGconn *db_conn); + +int +TALER_MINT_DB_insert_deposit (PGconn *db_conn, + const struct Deposit *deposit); + +int +TALER_MINT_DB_get_deposit (PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *coin_pub, + struct Deposit **r_deposit); +int +TALER_MINT_DB_insert_known_coin (PGconn *db_conn, + const struct KnownCoin *known_coin); + + + +/** + * Get the thread-local database-handle. + * Connect to the db if the connection does not exist yet. + * + * @param the database connection, or NULL on error + */ +PGconn * +TALER_MINT_DB_get_connection (void); + + +int +TALER_MINT_DB_init (const char *connection_cfg); + + + +#endif /* _NEURO_MINT_DB_H */ diff --git a/src/mint/taler-mint-dbinit.c b/src/mint/taler-mint-dbinit.c new file mode 100644 index 00000000..d877f62c --- /dev/null +++ b/src/mint/taler-mint-dbinit.c @@ -0,0 +1,285 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-dbinit.c + * @brief Create tables for the mint database. + * @author Florian Dold + */ + +#include "platform.h" +#include +#include +#include "mint.h" + + +#define break_db_err(result) do { \ + GNUNET_break(0); \ + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Database failure: %s\n", PQresultErrorMessage (result)); \ + PQclear (result); \ + } while (0) + + +static char *mint_base_dir; +static struct GNUNET_CONFIGURATION_Handle *cfg; +static PGconn *db_conn; +static char *TALER_MINT_db_connection_cfg_str; + + +int +TALER_MINT_init_withdraw_tables (PGconn *conn) +{ + PGresult *result; + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS reserves" + "(" + " reserve_pub BYTEA PRIMARY KEY" + ",balance_value INT4 NOT NULL" + ",balance_fraction INT4 NOT NULL" + ",balance_currency VARCHAR(4) NOT NULL" + ",status_sig BYTEA" + ",status_sign_pub BYTEA" + ",expiration_date INT8 NOT NULL" + ")"); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS collectable_blindcoins" + "(" + "blind_ev BYTEA PRIMARY KEY" + ",blind_ev_sig BYTEA NOT NULL" + ",denom_pub BYTEA NOT NULL" + ",reserve_sig BYTEA NOT NULL" + ",reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub)" + ")"); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS known_coins " + "(" + " coin_pub BYTEA NOT NULL PRIMARY KEY" + ",denom_pub BYTEA NOT NULL" + ",denom_sig BYTEA NOT NULL" + ",expended_value INT4 NOT NULL" + ",expended_fraction INT4 NOT NULL" + ",expended_currency VARCHAR(4) NOT NULL" + ",refresh_session_pub BYTEA" + ")"); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_sessions " + "(" + " session_pub BYTEA PRIMARY KEY CHECK (length(session_pub) = 32)" + ",session_melt_sig BYTEA" + ",session_commit_sig BYTEA" + ",noreveal_index INT2 NOT NULL" + // non-zero if all reveals were ok + // and the new coin signatures are ready + ",reveal_ok BOOLEAN NOT NULL DEFAULT false" + ") "); + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_order " + "( " + " session_pub BYTEA NOT NULL REFERENCES refresh_sessions (session_pub)" + ",newcoin_index INT2 NOT NULL " + ",denom_pub BYTEA NOT NULL " + ",PRIMARY KEY (session_pub, newcoin_index)" + ") "); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_commit_link" + "(" + " session_pub BYTEA NOT NULL REFERENCES refresh_sessions (session_pub)" + ",transfer_pub BYTEA NOT NULL" + ",link_secret_enc BYTEA NOT NULL" + // index of the old coin in the customer's request + ",oldcoin_index INT2 NOT NULL" + // index for cut and choose, + // ranges from 0 to kappa-1 + ",cnc_index INT2 NOT NULL" + ")"); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_commit_coin" + "(" + " session_pub BYTEA NOT NULL REFERENCES refresh_sessions (session_pub) " + ",link_vector_enc BYTEA NOT NULL" + // index of the new coin in the customer's request + ",newcoin_index INT2 NOT NULL" + // index for cut and choose, + ",cnc_index INT2 NOT NULL" + ",coin_ev BYTEA NOT NULL" + ")"); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_melt" + "(" + " session_pub BYTEA NOT NULL REFERENCES refresh_sessions (session_pub) " + ",coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) " + ",denom_pub BYTEA NOT NULL " + ",oldcoin_index INT2 NOT NULL" + ")"); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS refresh_collectable" + "(" + " session_pub BYTEA NOT NULL REFERENCES refresh_sessions (session_pub) " + ",ev_sig BYTEA NOT NULL" + ",newcoin_index INT2 NOT NULL" + ")"); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + result = PQexec (conn, + "CREATE TABLE IF NOT EXISTS deposits " + "( " + " coin_pub BYTEA NOT NULL PRIMARY KEY CHECK (length(coin_pub)=32)" + ",denom_pub BYTEA NOT NULL CHECK (length(denom_pub)=32)" + ",transaction_id INT8 NOT NULL" + ",amount_currency VARCHAR(4) NOT NULL" + ",amount_value INT4 NOT NULL" + ",amount_fraction INT4 NOT NULL" + ",merchant_pub BYTEA NOT NULL" + ",h_contract BYTEA NOT NULL CHECK (length(h_contract)=64)" + ",h_wire BYTEA NOT NULL CHECK (length(h_wire)=64)" + ",coin_sig BYTEA NOT NULL CHECK (length(coin_sig)=64)" + ",wire TEXT NOT NULL" + ")"); + + if (PGRES_COMMAND_OK != PQresultStatus(result)) + { + break_db_err (result); + return GNUNET_SYSERR; + } + PQclear (result); + + return GNUNET_OK; +} + + +/** + * The main function of the serve tool + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), + {'d', "mint-dir", "DIR", + "mint directory", 1, + &GNUNET_GETOPT_set_filename, &mint_base_dir}, + GNUNET_GETOPT_OPTION_END + }; + + if (GNUNET_GETOPT_run ("taler-mint-serve", options, argc, argv) < 0) + return 1; + + GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-dbinit", "INFO", NULL)); + + if (NULL == mint_base_dir) + { + fprintf (stderr, "Mint base directory not given.\n"); + return 1; + } + + cfg = TALER_MINT_config_load (mint_base_dir); + if (NULL == cfg) + { + fprintf (stderr, "Can't load mint configuration.\n"); + return 1; + } + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "mint", "db", &TALER_MINT_db_connection_cfg_str)) + { + fprintf (stderr, "Configuration 'mint.db' not found.\n"); + return 42; + } + db_conn = PQconnectdb (TALER_MINT_db_connection_cfg_str); + if (CONNECTION_OK != PQstatus (db_conn)) + { + fprintf (stderr, "Database connection failed: %s\n", PQerrorMessage (db_conn)); + return 1; + } + + if (GNUNET_OK != TALER_MINT_init_withdraw_tables (db_conn)) + { + fprintf (stderr, "Failed to initialize database.\n"); + return 1; + } + + return 0; +} + diff --git a/src/mint/taler-mint-httpd.c b/src/mint/taler-mint-httpd.c new file mode 100644 index 00000000..6d69813c --- /dev/null +++ b/src/mint/taler-mint-httpd.c @@ -0,0 +1,376 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-httpd.c + * @brief Serve the HTTP interface of the mint + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "mint.h" +#include "mint_db.h" +#include "taler_types.h" +#include "taler_signatures.h" +#include "taler_rsa.h" +#include "taler_json_lib.h" +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd_mhd.h" +#include "taler-mint-httpd_keys.h" +#include "taler-mint-httpd_deposit.h" +#include "taler-mint-httpd_withdraw.h" +#include "taler-mint-httpd_refresh.h" + + +/** + * Base directory of the mint (global) + */ +char *mintdir; + +/** + * The mint's configuration (global) + */ +struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * Master public key (according to the + * configuration in the mint directory). + */ +struct GNUNET_CRYPTO_EddsaPublicKey master_pub; + +/** + * The HTTP Daemon. + */ +static struct MHD_Daemon *mydaemon; + +/** + * The kappa value for refreshing. + */ +static unsigned int refresh_security_parameter; + +/** + * Port to run the daemon on. + */ +static uint16_t serve_port; + + +/** + * Convert a string representing an EdDSA signature to an EdDSA + * signature. + * + * FIXME: this should be in GNUnet. + * FIXME: why? this code is dead, even here! + * + * @param enc encoded EdDSA signature + * @param enclen number of bytes in @a enc (without 0-terminator) + * @param pub where to store the EdDSA signature + * @return #GNUNET_OK on success + */ +int +TALER_eddsa_signature_from_string (const char *enc, + size_t enclen, + struct GNUNET_CRYPTO_EddsaSignature *sig) +{ + size_t keylen = (sizeof (struct GNUNET_CRYPTO_EddsaSignature)) * 8; + + if (keylen % 5 > 0) + keylen += 5 - keylen % 5; + keylen /= 5; + if (enclen != keylen) + return GNUNET_SYSERR; + + if (GNUNET_OK != GNUNET_STRINGS_string_to_data (enc, enclen, + sig, + sizeof (struct GNUNET_CRYPTO_EddsaSignature))) + return GNUNET_SYSERR; + return GNUNET_OK; +} + + +/** + * Handle a request coming from libmicrohttpd. + * + * @param cls closure for MHD daemon (unused) + * @param connection the connection + * @param url the requested url + * @param method the method (POST, GET, ...) + * @param upload_data request data + * @param upload_data_size size of @a upload_data in bytes + * @param con_cls closure for request (a `struct Buffer *`) + * @return MHD result code + */ +static int +handle_mhd_request (void *cls, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *version, + const char *upload_data, + size_t *upload_data_size, + void **con_cls) +{ + static struct RequestHandler handlers[] = + { + { "/", MHD_HTTP_METHOD_GET, "text/plain", + "Hello, I'm the mint\n", 0, + &TALER_MINT_handler_static_response, MHD_HTTP_OK }, + { "/agpl", MHD_HTTP_METHOD_GET, "text/plain", + NULL, 0, + &TALER_MINT_handler_agpl_redirect, MHD_HTTP_FOUND }, + { "/keys", MHD_HTTP_METHOD_GET, "application/json", + NULL, 0, + &TALER_MINT_handler_keys, MHD_HTTP_OK }, + { "/keys", NULL, "text/plain", + "Only GET is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/withdraw/status", MHD_HTTP_METHOD_GET, "application/json", + NULL, 0, + &TALER_MINT_handler_withdraw_status, MHD_HTTP_OK }, + { "/withdraw/status", NULL, "text/plain", + "Only GET is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/withdraw/sign", MHD_HTTP_METHOD_GET, "application/json", + NULL, 0, + &TALER_MINT_handler_withdraw_sign, MHD_HTTP_OK }, + { "/withdraw/sign", NULL, "text/plain", + "Only GET is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/refresh/melt", MHD_HTTP_METHOD_POST, "application/json", + NULL, 0, + &TALER_MINT_handler_refresh_melt, MHD_HTTP_OK }, + { "/refresh/melt", NULL, "text/plain", + "Only POST is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/refresh/commit", MHD_HTTP_METHOD_POST, "application/json", + NULL, 0, + &TALER_MINT_handler_refresh_commit, MHD_HTTP_OK }, + { "/refresh/commit", NULL, "text/plain", + "Only POST is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/refresh/reveal", MHD_HTTP_METHOD_POST, "application/json", + NULL, 0, + &TALER_MINT_handler_refresh_melt, MHD_HTTP_OK }, + { "/refresh/reveal", NULL, "text/plain", + "Only POST is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/refresh/link", MHD_HTTP_METHOD_GET, "application/json", + NULL, 0, + &TALER_MINT_handler_refresh_link, MHD_HTTP_OK }, + { "/refresh/link", NULL, "text/plain", + "Only GET is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/refresh/reveal", MHD_HTTP_METHOD_GET, "application/json", + NULL, 0, + &TALER_MINT_handler_refresh_reveal, MHD_HTTP_OK }, + { "/refresh/reveal", NULL, "text/plain", + "Only GET is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { "/deposit", MHD_HTTP_METHOD_POST, "application/json", + NULL, 0, + &TALER_MINT_handler_deposit, MHD_HTTP_OK }, + { "/deposit", NULL, "text/plain", + "Only POST is allowed", 0, + &TALER_MINT_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED }, + { NULL, NULL, NULL, NULL, 0, 0 } + }; + static struct RequestHandler h404 = + { + "", NULL, "text/html", + "404: not found", 0, + &TALER_MINT_handler_static_response, MHD_HTTP_NOT_FOUND + }; + struct RequestHandler *rh; + unsigned int i; + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Handling request for URL '%s'\n", + url); + for (i=0;NULL != handlers[i].url;i++) + { + rh = &handlers[i]; + if ( (0 == strcasecmp (url, + rh->url)) && + ( (NULL == rh->method) || + (0 == strcasecmp (method, + rh->method)) ) ) + return rh->handler (rh, + connection, + con_cls, + upload_data, + upload_data_size); + } + return TALER_MINT_handler_static_response (&h404, + connection, + con_cls, + upload_data, + upload_data_size); +} + + + +/** + * Load configuration parameters for the mint + * server into the corresponding global variables. + * + * @param param mint_directory the mint's directory + * @return GNUNET_OK on success + */ +static int +mint_serve_process_config (const char *mint_directory) +{ + unsigned long long port; + unsigned long long kappa; + char *master_pub_str; + char *db_cfg; + + cfg = TALER_MINT_config_load (mint_directory); + if (NULL == cfg) + { + fprintf (stderr, + "can't load mint configuration\n"); + return 1; + } + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, + "mint", "master_pub", + &master_pub_str)) + { + fprintf (stderr, + "No master public key given in mint configuration."); + return GNUNET_NO; + } + if (GNUNET_OK != + GNUNET_CRYPTO_eddsa_public_key_from_string (master_pub_str, + strlen (master_pub_str), + &master_pub)) + { + fprintf (stderr, + "Invalid master public key given in mint configuration."); + return GNUNET_NO; + } + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, + "mint", "db", + &db_cfg)) + { + fprintf (stderr, + "invalid configuration: mint.db\n"); + return GNUNET_NO; + } + if (GNUNET_OK != + TALER_MINT_DB_init (db_cfg)) + { + fprintf (stderr, + "failed to initialize DB subsystem\n"); + return GNUNET_NO; + } + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_number (cfg, + "mint", "port", + &port)) + { + fprintf (stderr, + "invalid configuration: mint.port\n"); + return GNUNET_NO; + } + + if ((port == 0) || (port > UINT16_MAX)) + { + fprintf (stderr, + "invalid configuration (value out of range): mint.port\n"); + return GNUNET_NO; + } + serve_port = port; + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_number (cfg, + "mint", "refresh_security_parameter", + &kappa)) + { + fprintf (stderr, + "invalid configuration: mint.refresh_security_parameter\n"); + return GNUNET_NO; + } + refresh_security_parameter = kappa; + + return GNUNET_OK; +} + + +/** + * The main function of the serve tool + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), + {'d', "mint-dir", "DIR", + "mint directory", 1, + &GNUNET_GETOPT_set_filename, &mintdir}, + GNUNET_GETOPT_OPTION_END + }; + int ret; + + GNUNET_assert (GNUNET_OK == + GNUNET_log_setup ("taler-mint-serve", + "INFO", + NULL)); + if (GNUNET_GETOPT_run ("taler-mint-serve", + options, + argc, argv) < 0) + return 1; + if (NULL == mintdir) + { + fprintf (stderr, + "no mint dir given\n"); + return 1; + } + + if (GNUNET_OK != mint_serve_process_config (mintdir)) + return 1; + + + mydaemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG, + serve_port, + NULL, NULL, + &handle_mhd_request, NULL, + MHD_OPTION_END); + + if (NULL == mydaemon) + { + fprintf (stderr, + "Failed to start MHD.\n"); + return 1; + } + + ret = TALER_MINT_key_reload_loop (); + MHD_stop_daemon (mydaemon); + return (GNUNET_OK == ret) ? 0 : 1; +} + diff --git a/src/mint/taler-mint-httpd.h b/src/mint/taler-mint-httpd.h new file mode 100644 index 00000000..59f38aad --- /dev/null +++ b/src/mint/taler-mint-httpd.h @@ -0,0 +1,106 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd.h + * @brief Global declarations for the mint + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_H +#define TALER_MINT_HTTPD_H + + +/** + * Cut-and-choose size for refreshing. + * FIXME: maybe make it a config option? + */ +#define KAPPA 3 + + +/** + * The mint's configuration. + */ +extern struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * Main directory with mint data. + */ +extern char *mintdir; + +/** + * Master public key (according to the + * configuration in the mint directory). + */ +extern struct GNUNET_CRYPTO_EddsaPublicKey master_pub; + + +/** + * Struct describing an URL and the handler for it. + */ +struct RequestHandler +{ + + /** + * URL the handler is for. + */ + const char *url; + + /** + * Method the handler is for, NULL for "all". + */ + const char *method; + + /** + * Mime type to use in reply (hint, can be NULL). + */ + const char *mime_type; + + /** + * Raw data for the @e handler + */ + const void *data; + + /** + * Number of bytes in @e data, 0 for 0-terminated. + */ + size_t data_size; + + /** + * Function to call to handle the request. + * + * @param rh this struct + * @param mime_type the @e mime_type for the reply (hint, can be NULL) + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ + int (*handler)(struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + /** + * Default response code. + */ + int response_code; +}; + + +#endif diff --git a/src/mint/taler-mint-httpd_deposit.c b/src/mint/taler-mint-httpd_deposit.c new file mode 100644 index 00000000..ecbc5c13 --- /dev/null +++ b/src/mint/taler-mint-httpd_deposit.c @@ -0,0 +1,270 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_deposit.c + * @brief Handle /deposit requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "mint.h" +#include "mint_db.h" +#include "taler_types.h" +#include "taler_signatures.h" +#include "taler_rsa.h" +#include "taler_json_lib.h" +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd_keys.h" +#include "taler-mint-httpd_deposit.h" + + +/** + * Send confirmation of deposit success to client. + * + * @param connection connection to the client + * @param deposit deposit request to confirm + * @return MHD result code + */ +static int +helper_deposit_send_response_success (struct MHD_Connection *connection, + struct Deposit *deposit) +{ + // FIXME: return more information here + return request_send_json_pack (connection, MHD_HTTP_OK, + "{s:s}", "status", "DEPOSIT_OK"); +} + + +/** + * Handle a "/deposit" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_deposit (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + json_t *json; + struct Deposit *deposit; + json_t *wire; + json_t *resp; + char *wire_enc = NULL; + const char *deposit_type; + struct MintKeyState *key_state; + struct TALER_CoinPublicInfo coin_info; + struct TALER_RSA_Signature ubsig; + size_t len; + int resp_code; + PGconn *db_conn; + int res; + + res = process_post_json (connection, + connection_cls, + upload_data, upload_data_size, + &json); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return MHD_YES; + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + deposit = NULL; + wire = NULL; + resp = NULL; + if (-1 == json_unpack (json, + "{s:s s:o}", + "type", &deposit_type, + "wire", &wire)) + { + GNUNET_break_op (0); + resp = json_pack ("{s:s}", "error", "Bad format"); + resp_code = MHD_HTTP_BAD_REQUEST; + goto EXITIF_exit; + } + if (NULL == (wire_enc = json_dumps (wire, JSON_COMPACT|JSON_SORT_KEYS))) + { + GNUNET_break_op (0); + resp = json_pack ("{s:s}", "error", "Bad format"); + resp_code = MHD_HTTP_BAD_REQUEST; + goto EXITIF_exit; + } + len = strlen (wire_enc) + 1; + deposit = GNUNET_malloc (sizeof (struct Deposit) + len); +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) +#define PARSE_DATA(field, addr) \ + EXITIF (GNUNET_OK != request_json_require_nav \ + (connection, json, \ + JNAV_FIELD, field, JNAV_RET_DATA, addr, sizeof (*addr))) + PARSE_DATA ("coin_pub", &deposit->coin_pub); + PARSE_DATA ("denom_pub", &deposit->denom_pub); + PARSE_DATA ("ubsig", &ubsig); + PARSE_DATA ("merchant_pub", &deposit->merchant_pub); + PARSE_DATA ("H_a", &deposit->h_contract); + PARSE_DATA ("H_wire", &deposit->h_wire); + PARSE_DATA ("csig", &deposit->coin_sig); + PARSE_DATA ("transaction_id", &deposit->transaction_id); +#undef PARSE_DATA + if (0 == strcmp ("DIRECT_DEPOSIT", deposit_type)) + deposit->purpose.purpose = htonl (TALER_SIGNATURE_DEPOSIT); + else if (0 == strcmp ("INCREMENTAL_DEPOSIT", deposit_type)) + deposit->purpose.purpose = htonl (TALER_SIGNATURE_INCREMENTAL_DEPOSIT); + else + { + GNUNET_break_op (0); + resp = json_pack ("{s:s}", "error", "Bad format"); + resp_code = MHD_HTTP_BAD_REQUEST; + goto EXITIF_exit; + } + deposit->purpose.size = htonl (sizeof (struct Deposit) + - offsetof (struct Deposit, purpose)); + memcpy (&coin_info.coin_pub, + &deposit->coin_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + coin_info.denom_pub = deposit->denom_pub; + coin_info.denom_sig = ubsig; + key_state = TALER_MINT_key_state_acquire (); + if (GNUNET_YES != TALER_MINT_test_coin_valid (key_state, + &coin_info)) + { + TALER_MINT_key_state_release (key_state); + resp = json_pack ("{s:s}", "error", "Coin is not valid"); + resp_code = MHD_HTTP_NOT_FOUND; + goto EXITIF_exit; + } + TALER_MINT_key_state_release (key_state); + /* + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_DEPOSIT, + &deposit->purpose, + &deposit->coin_sig, + &deposit->coin_pub)) + { + resp = json_pack ("{s:s}", "error", "Signature verfication failed"); + resp_code = MHD_HTTP_NOT_FOUND; + goto EXITIF_exit; + } + */ + + /* Check if we already received the same deposit permission, + * or the coin was already deposited */ + + { + struct Deposit *existing_deposit; + int res; + + res = TALER_MINT_DB_get_deposit (db_conn, + &deposit->coin_pub, + &existing_deposit); + if (GNUNET_YES == res) + { + // FIXME: memory leak + if (0 == memcmp (existing_deposit, deposit, sizeof (struct Deposit))) + return helper_deposit_send_response_success (connection, deposit); + // FIXME: in the future, check if there's enough credits + // left on the coin. For now: refuse + // FIXME: return more information here + return request_send_json_pack (connection, MHD_HTTP_FORBIDDEN, + "{s:s}", + "error", "double spending"); + } + + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + } + + { + struct KnownCoin known_coin; + int res; + + res = TALER_MINT_DB_get_known_coin (db_conn, &coin_info.coin_pub, &known_coin); + if (GNUNET_YES == res) + { + // coin must have been refreshed + // FIXME: check + // FIXME: return more information here + return request_send_json_pack (connection, MHD_HTTP_FORBIDDEN, + "{s:s}", + "error", "coin was refreshed"); + } + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + /* coin valid but not known => insert into DB */ + known_coin.is_refreshed = GNUNET_NO; + known_coin.expended_balance = TALER_amount_ntoh (deposit->amount); + known_coin.public_info = coin_info; + + if (GNUNET_OK != TALER_MINT_DB_insert_known_coin (db_conn, &known_coin)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + } + + if (GNUNET_OK != TALER_MINT_DB_insert_deposit (db_conn, deposit)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + return helper_deposit_send_response_success (connection, deposit); + + EXITIF_exit: + if (NULL != resp) + res = send_response_json (connection, resp, resp_code); + else + res = MHD_NO; + if (NULL != wire) + json_decref (wire); + if (NULL != deposit) + GNUNET_free (deposit); + if (NULL != wire_enc) + GNUNET_free (wire_enc); + return res; +#undef EXITIF +#undef PARSE_DATA +} + +/* end of taler-mint-httpd_deposit.c */ diff --git a/src/mint/taler-mint-httpd_deposit.h b/src/mint/taler-mint-httpd_deposit.h new file mode 100644 index 00000000..dd7b8c13 --- /dev/null +++ b/src/mint/taler-mint-httpd_deposit.h @@ -0,0 +1,48 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_deposit.h + * @brief Handle /deposit requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_DEPOSIT_H +#define TALER_MINT_HTTPD_DEPOSIT_H + +#include +#include +#include "taler-mint-httpd.h" + + +/** + * Handle a "/deposit" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_deposit (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + +#endif diff --git a/src/mint/taler-mint-httpd_keys.c b/src/mint/taler-mint-httpd_keys.c new file mode 100644 index 00000000..ba023fe6 --- /dev/null +++ b/src/mint/taler-mint-httpd_keys.c @@ -0,0 +1,512 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_keys.c + * @brief Handle /keys requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "mint.h" +#include "mint_db.h" +#include "taler_types.h" +#include "taler_signatures.h" +#include "taler_rsa.h" +#include "taler_json_lib.h" +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd_keys.h" + + +/** + * Mint key state. Never use directly, instead access via + * #TALER_MINT_key_state_acquire and #TALER_MINT_key_state_release. + */ +static struct MintKeyState *internal_key_state; + +/** + * Mutex protecting access to #internal_key_state. + */ +static pthread_mutex_t internal_key_state_mutex = PTHREAD_MUTEX_INITIALIZER; + +/** + * Pipe used for signaling reloading of our key state. + */ +static int reload_pipe[2]; + + +/** + * Convert the public part of a denomination key + * issue to a JSON object. + * + * @param dki the denomination key issue + * @return a JSON object describing the denomination key isue (public part) + */ +static json_t * +denom_key_issue_to_json (const struct TALER_MINT_DenomKeyIssue *dki) +{ + json_t *dk_json = json_object (); + json_object_set_new (dk_json, "master_sig", + TALER_JSON_from_data (&dki->signature, sizeof (struct GNUNET_CRYPTO_EddsaSignature))); + json_object_set_new (dk_json, "stamp_start", TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (dki->start))); + json_object_set_new (dk_json, "stamp_expire_withdraw", TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (dki->expire_withdraw))); + json_object_set_new (dk_json, "stamp_expire_deposit", TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (dki->expire_spend))); + json_object_set_new (dk_json, "denom_pub", + TALER_JSON_from_data (&dki->denom_pub, sizeof (struct TALER_RSA_PublicKeyBinaryEncoded))); + json_object_set_new (dk_json, "value", + TALER_JSON_from_amount (TALER_amount_ntoh (dki->value))); + json_object_set_new (dk_json, + "fee_withdraw", + TALER_JSON_from_amount(TALER_amount_ntoh (dki->fee_withdraw))); + json_object_set_new (dk_json, + "fee_deposit", + TALER_JSON_from_amount(TALER_amount_ntoh (dki->fee_deposit))); + json_object_set_new (dk_json, + "fee_refresh", + TALER_JSON_from_amount(TALER_amount_ntoh (dki->fee_refresh))); + return dk_json; +} + + +/** + * Convert the public part of a sign key + * issue to a JSON object. + * + * @param ski the sign key issue + * @return a JSON object describing the sign key isue (public part) + */ +static json_t * +sign_key_issue_to_json (const struct TALER_MINT_SignKeyIssue *ski) +{ + json_t *sk_json = json_object (); + json_object_set_new (sk_json, "stamp_start", TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (ski->start))); + json_object_set_new (sk_json, "stamp_expire", TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (ski->expire))); + json_object_set_new (sk_json, "master_sig", + TALER_JSON_from_data (&ski->signature, sizeof (struct GNUNET_CRYPTO_EddsaSignature))); + json_object_set_new (sk_json, "key", + TALER_JSON_from_data (&ski->signkey_pub, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))); + return sk_json; +} + + +/** + * Get the relative time value that describes how + * far in the future do we want to provide coin keys. + * + * @return the provide duration + */ +static struct GNUNET_TIME_Relative +TALER_MINT_conf_duration_provide () +{ + struct GNUNET_TIME_Relative rel; + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_time (cfg, + "mint_keys", + "lookahead_provide", + &rel)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "mint_keys.lookahead_provide not valid or not given\n"); + GNUNET_abort (); + } + return rel; +} + + +/** + * Iterator for denomination keys. + * + * @param cls closure + * @param dki the denomination key issue + * @param alias coin alias + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +static int +reload_keys_denom_iter (void *cls, + const char *alias, + const struct TALER_MINT_DenomKeyIssue *dki) +{ + struct MintKeyState *ctx = cls; + struct GNUNET_TIME_Absolute stamp_provide; + struct GNUNET_HashCode denom_key_hash; + int res; + + stamp_provide = GNUNET_TIME_absolute_add (ctx->reload_time, + TALER_MINT_conf_duration_provide ()); + + if (GNUNET_TIME_absolute_ntoh (dki->expire_spend).abs_value_us < ctx->reload_time.abs_value_us) + { + // this key is expired + return GNUNET_OK; + } + if (GNUNET_TIME_absolute_ntoh (dki->start).abs_value_us > stamp_provide.abs_value_us) + { + // we are to early for this key + return GNUNET_OK; + } + + GNUNET_CRYPTO_hash (&dki->denom_pub, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey), &denom_key_hash); + + res = GNUNET_CONTAINER_multihashmap_put (ctx->denomkey_map, + &denom_key_hash, + GNUNET_memdup (dki, sizeof (struct TALER_MINT_DenomKeyIssue)), + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); + if (GNUNET_OK != res) + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Duplicate denomination key\n"); + + json_array_append_new (ctx->denom_keys_array, + denom_key_issue_to_json (dki)); + + return GNUNET_OK; +} + + +/** + * Iterator for sign keys. + * + * @param cls closure + * @param ski the sign key issue + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +static int +reload_keys_sign_iter (void *cls, + const struct TALER_MINT_SignKeyIssue *ski) +{ + struct MintKeyState *ctx = cls; + struct GNUNET_TIME_Absolute stamp_provide; + + stamp_provide = GNUNET_TIME_absolute_add (ctx->reload_time, TALER_MINT_conf_duration_provide (cfg)); + + if (GNUNET_TIME_absolute_ntoh (ski->expire).abs_value_us < ctx->reload_time.abs_value_us) + { + // this key is expired + return GNUNET_OK; + } + + if (GNUNET_TIME_absolute_ntoh (ski->start).abs_value_us > stamp_provide.abs_value_us) + { + // we are to early for this key + return GNUNET_OK; + } + + // the signkey is valid for now, check + // if it's more recent than the current one! + if (GNUNET_TIME_absolute_ntoh (ctx->current_sign_key_issue.start).abs_value_us > + GNUNET_TIME_absolute_ntoh (ski->start).abs_value_us) + ctx->current_sign_key_issue = *ski; + + + ctx->next_reload = GNUNET_TIME_absolute_min (ctx->next_reload, + GNUNET_TIME_absolute_ntoh (ski->expire)); + + json_array_append_new (ctx->sign_keys_array, + sign_key_issue_to_json (ski)); + + return GNUNET_OK; +} + + +/** + * Load the mint's key state from disk. + * + * @return fresh key state (with reference count 1) + */ +static struct MintKeyState * +reload_keys () +{ + struct MintKeyState *key_state; + json_t *keys; + + key_state = GNUNET_new (struct MintKeyState); + key_state->refcnt = 1; + + key_state->next_reload = GNUNET_TIME_UNIT_FOREVER_ABS; + + key_state->denom_keys_array = json_array (); + GNUNET_assert (NULL != key_state->denom_keys_array); + + key_state->sign_keys_array = json_array (); + GNUNET_assert (NULL != key_state->sign_keys_array); + + key_state->denomkey_map = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); + GNUNET_assert (NULL != key_state->denomkey_map); + + key_state->reload_time = GNUNET_TIME_absolute_get (); + + TALER_MINT_denomkeys_iterate (mintdir, &reload_keys_denom_iter, key_state); + TALER_MINT_signkeys_iterate (mintdir, &reload_keys_sign_iter, key_state); + + keys = json_pack ("{s:o, s:o, s:o, s:o}", + "master_pub", TALER_JSON_from_data (&master_pub, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)), + "signkeys", key_state->sign_keys_array, + "denoms", key_state->denom_keys_array, + "list_issue_date", TALER_JSON_from_abs (key_state->reload_time)); + + key_state->keys_json = json_dumps (keys, JSON_INDENT(2)); + + return key_state; +} + + +/** + * Release key state, free if necessary (if reference count gets to zero). + * + * @param key_state the key state to release + */ +void +TALER_MINT_key_state_release (struct MintKeyState *key_state) +{ + GNUNET_assert (0 == pthread_mutex_lock (&internal_key_state_mutex)); + GNUNET_assert (0 != key_state->refcnt); + key_state->refcnt += 1; + if (key_state->refcnt == 0) { + GNUNET_free (key_state); + } + GNUNET_assert (0 == pthread_mutex_unlock (&internal_key_state_mutex)); +} + + +/** + * Acquire the key state of the mint. Updates keys if necessary. + * For every call to #TALER_MINT_key_state_acquire, a matching call + * to #TALER_MINT_key_state_release must be made. + * + * @return the key state + */ +struct MintKeyState * +TALER_MINT_key_state_acquire (void) +{ + struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); + struct MintKeyState *key_state; + + // FIXME: the locking we have is very coarse-grained, + // using multiple locks might be nicer ... + + GNUNET_assert (0 == pthread_mutex_lock (&internal_key_state_mutex)); + if (NULL == internal_key_state) + { + internal_key_state = reload_keys (); + } + else if (internal_key_state->next_reload.abs_value_us <= now.abs_value_us) + { + GNUNET_assert (0 != internal_key_state->refcnt); + internal_key_state->refcnt--; + if (0 == internal_key_state->refcnt) + GNUNET_free (internal_key_state); + internal_key_state = reload_keys (); + } + key_state = internal_key_state; + key_state->refcnt += 1; + GNUNET_assert (0 == pthread_mutex_unlock (&internal_key_state_mutex)); + + return key_state; +} + + +/** + * Look up the issue for a denom public key. + * + * @param key state to look in + * @param denom_pub denomination public key + * @return the denomination key issue, + * or NULL if denom_pub could not be found + */ +struct TALER_MINT_DenomKeyIssue * +TALER_MINT_get_denom_key (const struct MintKeyState *key_state, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub) +{ + struct TALER_MINT_DenomKeyIssue *issue; + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash (denom_pub, sizeof (struct TALER_RSA_PublicKeyBinaryEncoded), &hash); + issue = GNUNET_CONTAINER_multihashmap_get (key_state->denomkey_map, &hash); + return issue; +} + + +/** + * Check if a coin is valid; that is, whether the denomination key exists, + * is not expired, and the signature is correct. + * + * @param key_state the key state to use for checking the coin's validity + * @param coin_public_info the coin public info to check for validity + * @return GNUNET_YES if the coin is valid, + * GNUNET_NO if it is invalid + * GNUNET_SYSERROR if an internal error occured + */ +int +TALER_MINT_test_coin_valid (const struct MintKeyState *key_state, + struct TALER_CoinPublicInfo *coin_public_info) +{ + struct TALER_MINT_DenomKeyIssue *dki; + + dki = TALER_MINT_get_denom_key (key_state, &coin_public_info->denom_pub); + if (NULL == dki) + return GNUNET_NO; + if (GNUNET_OK != TALER_RSA_verify (&coin_public_info->coin_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), + &coin_public_info->denom_sig, + &dki->denom_pub)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "coin signature is invalid\n"); + return GNUNET_NO; + } + return GNUNET_YES; +} + + +/** + * Function to call to handle the request by sending + * back static data from the @a rh. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_keys (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct MintKeyState *key_state; + struct MHD_Response *response; + int ret; + + key_state = TALER_MINT_key_state_acquire (); + response = MHD_create_response_from_buffer (strlen (key_state->keys_json), + key_state->keys_json, + MHD_RESPMEM_MUST_COPY); + TALER_MINT_key_state_release (key_state); + if (NULL == response) + { + GNUNET_break (0); + return MHD_NO; + } + (void) MHD_add_response_header (response, + "Content-Type", + rh->mime_type); + ret = MHD_queue_response (connection, + rh->response_code, + response); + MHD_destroy_response (response); + return ret; +} + + +/** + * Handle a signal, writing relevant signal numbers + * (currently just SIGUSR1) to a pipe. + * + * @param signal_number the signal number + */ +static void +handle_signal (int signal_number) +{ + size_t res; + char c = signal_number; + + if (SIGUSR1 == signal_number) + { + errno = 0; + res = write (reload_pipe[1], &c, 1); + if ((res < 0) && (EINTR != errno)) + { + GNUNET_break (0); + return; + } + if (0 == res) + { + GNUNET_break (0); + return; + } + } +} + + +/** + * Read signals from a pipe in a loop, and reload keys from disk if + * SIGUSR1 is read from the pipe. + */ +int +TALER_MINT_key_reload_loop (void) +{ + struct sigaction act; + + if (0 != pipe (reload_pipe)) + { + fprintf (stderr, + "Failed to create pipe.\n"); + return GNUNET_SYSERR; + } + memset (&act, 0, sizeof (struct sigaction)); + act.sa_handler = &handle_signal; + + if (0 != sigaction (SIGUSR1, &act, NULL)) + { + fprintf (stderr, + "Failed to set signal handler.\n"); + return GNUNET_SYSERR; + } + + while (1) + { + char c; + ssize_t res; + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "(re-)loading keys\n"); + GNUNET_assert (0 == pthread_mutex_lock (&internal_key_state_mutex)); + if (NULL != internal_key_state) + { + GNUNET_assert (0 != internal_key_state->refcnt); + internal_key_state->refcnt -= 1; + if (0 == internal_key_state->refcnt) + GNUNET_free (internal_key_state); + } + internal_key_state = reload_keys (); + GNUNET_assert (0 == pthread_mutex_unlock (&internal_key_state_mutex)); +read_again: + errno = 0; + res = read (reload_pipe[0], &c, 1); + if ((res < 0) && (EINTR != errno)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + if (EINTR == errno) + goto read_again; + } + return GNUNET_OK; +} + + +/* end of taler-mint-httpd_keys.c */ diff --git a/src/mint/taler-mint-httpd_keys.h b/src/mint/taler-mint-httpd_keys.h new file mode 100644 index 00000000..640a9c91 --- /dev/null +++ b/src/mint/taler-mint-httpd_keys.h @@ -0,0 +1,155 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_keys.h + * @brief Handle /keys requests and manage key state + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_KEYS_H +#define TALER_MINT_HTTPD_KEYS_H + +#include +#include +#include "taler-mint-httpd.h" + + +/** + * Snapshot of the (coin and signing) + * keys (including private keys) of the mint. + */ +struct MintKeyState +{ + /** + * When did we initiate the key reloading? + */ + struct GNUNET_TIME_Absolute reload_time; + + /** + * JSON array with denomination keys. + */ + json_t *denom_keys_array; + + /** + * JSON array with signing keys. + */ + json_t *sign_keys_array; + + /** + * Mapping from denomination keys to denomination key issue struct. + */ + struct GNUNET_CONTAINER_MultiHashMap *denomkey_map; + + /** + * When is the next key invalid and we have to reload? + */ + struct GNUNET_TIME_Absolute next_reload; + + /** + * Mint signing key that should be used currently. + */ + struct TALER_MINT_SignKeyIssue current_sign_key_issue; + + /** + * Cached JSON text that the mint will send for + * a /keys request. + */ + char *keys_json; + + /** + * Reference count. + */ + unsigned int refcnt; +}; + + +/** + * Release key state, free if necessary (if reference count gets to zero). + * + * @param key_state the key state to release + */ +void +TALER_MINT_key_state_release (struct MintKeyState *key_state); + + +/** + * Acquire the key state of the mint. Updates keys if necessary. + * For every call to #TALER_MINT_key_state_acquire, a matching call + * to #TALER_MINT_key_state_release must be made. + * + * @return the key state + */ +struct MintKeyState * +TALER_MINT_key_state_acquire (void); + + +/** + * Look up the issue for a denom public key. + * + * @param key state to look in + * @param denom_pub denomination public key + * @return the denomination key issue, + * or NULL if denom_pub could not be found + */ +struct TALER_MINT_DenomKeyIssue * +TALER_MINT_get_denom_key (const struct MintKeyState *key_state, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub); + + +/** + * Check if a coin is valid; that is, whether the denomination key exists, + * is not expired, and the signature is correct. + * + * @param key_state the key state to use for checking the coin's validity + * @param coin_public_info the coin public info to check for validity + * @return GNUNET_YES if the coin is valid, + * GNUNET_NO if it is invalid + * GNUNET_SYSERROR if an internal error occured + */ +int +TALER_MINT_test_coin_valid (const struct MintKeyState *key_state, + struct TALER_CoinPublicInfo *coin_public_info); + + +/** + * Read signals from a pipe in a loop, and reload keys from disk if + * SIGUSR1 is read from the pipe. + * + * @return GNUNET_OK if we terminated normally, GNUNET_SYSERR on error + */ +int +TALER_MINT_key_reload_loop (void); + + +/** + * Handle a "/keys" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_keys (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + +#endif diff --git a/src/mint/taler-mint-httpd_mhd.c b/src/mint/taler-mint-httpd_mhd.c new file mode 100644 index 00000000..09f3025b --- /dev/null +++ b/src/mint/taler-mint-httpd_mhd.c @@ -0,0 +1,300 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-httpd_mhd.c + * @brief helpers for MHD interaction + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd.h" +#include "taler-mint-httpd_mhd.h" + + +/** + * Function to call to handle the request by sending + * back static data from the @a rh. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_static_response (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct MHD_Response *response; + int ret; + + if (0 == rh->data_size) + rh->data_size = strlen ((const char *) rh->data); + response = MHD_create_response_from_buffer (rh->data_size, + (void *) rh->data, + MHD_RESPMEM_PERSISTENT); + if (NULL == response) + { + GNUNET_break (0); + return MHD_NO; + } + if (NULL != rh->mime_type) + (void) MHD_add_response_header (response, + MHD_HTTP_HEADER_CONTENT_TYPE, + rh->mime_type); + ret = MHD_queue_response (connection, + rh->response_code, + response); + MHD_destroy_response (response); + return ret; +} + + +/** + * Function to call to handle the request by sending + * back a redirect to the AGPL source code. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_agpl_redirect (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + const char *agpl = + "This server is licensed under the Affero GPL. You will now be redirected to the source code."; + struct MHD_Response *response; + int ret; + + response = MHD_create_response_from_buffer (strlen (agpl), + (void *) agpl, + MHD_RESPMEM_PERSISTENT); + if (NULL == response) + { + GNUNET_break (0); + return MHD_NO; + } + if (NULL != rh->mime_type) + (void) MHD_add_response_header (response, + MHD_HTTP_HEADER_CONTENT_TYPE, + rh->mime_type); + MHD_add_response_header (response, + MHD_HTTP_HEADER_LOCATION, + "http://www.git.taler.net/?p=mint.git"); + ret = MHD_queue_response (connection, + rh->response_code, + response); + MHD_destroy_response (response); + return ret; +} + + +/** + * Function to call to handle the request by building a JSON + * reply from varargs. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param response_code HTTP response code to use + * @param do_cache can the response be cached? (0: no, 1: yes) + * @param fmt format string for pack + * @param ... varargs + * @return MHD result code + */ +int +TALER_MINT_helper_send_json_pack (struct RequestHandler *rh, + struct MHD_Connection *connection, + void *connection_cls, + int response_code, + int do_cache, + const char *fmt, + ...) +{ + int ret; + json_t *json; + va_list argp; + char *json_str; + struct MHD_Response *response; + + va_start (argp, fmt); + json = json_vpack_ex (NULL, 0, fmt, argp); + va_end (argp); + if (NULL == json) + return MHD_NO; + json_str = json_dumps (json, JSON_INDENT(2)); + json_decref (json); + if (NULL == json_str) + return MHD_NO; + response = MHD_create_response_from_buffer (strlen (json_str), + json_str, + MHD_RESPMEM_MUST_FREE); + if (NULL == response) + { + free (json_str); + return MHD_NO; + } + if (NULL != rh->mime_type) + (void) MHD_add_response_header (response, + MHD_HTTP_HEADER_CONTENT_TYPE, + rh->mime_type); + ret = MHD_queue_response (connection, + response_code, + response); + MHD_destroy_response (response); + return ret; +} + + +/** + * Function to call to handle the request by building a JSON + * reply with an error message from @a rh. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_send_json_pack_error (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + return TALER_MINT_helper_send_json_pack (rh, + connection, + connection_cls, + 1, /* caching enabled */ + rh->response_code, + "{s:s}", + "error", + rh->data); +} + + +/** + * Send a response for an invalid argument. + * + * @param connection the MHD connection to use + * @param param_name the parameter that is missing + * @return a GNUnet result code + */ +static int +request_arg_invalid (struct MHD_Connection *connection, + const char *param_name) +{ + json_t *json; + json = json_pack ("{ s:s, s:s }", + "error", "invalid parameter", + "parameter", param_name); + if (MHD_YES != send_response_json (connection, json, MHD_HTTP_BAD_REQUEST)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + return GNUNET_NO; +} + + +/** + * Get a GET paramater that is a string, + * or send an error response if the parameter is missing. + * + * @param connection the connection to get the parameter from / + * send the error response to + * @param param_name the parameter name + * @param str pointer to store the parameter string, + * must be freed by the caller + * @return GNUNET_YES if the parameter is present and valid, + * GNUNET_NO if the parameter is missing + * GNUNET_SYSERR on internal error + */ +static int +request_arg_require_string (struct MHD_Connection *connection, + const char *param_name, + const char **str) +{ + *str = MHD_lookup_connection_value (connection, MHD_GET_ARGUMENT_KIND, param_name); + if (NULL == *str) + { + if (MHD_NO == + request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + "{ s:s, s:s }", + "error", "missing parameter", + "parameter", param_name)) + return GNUNET_SYSERR; + return GNUNET_NO; + } + return GNUNET_OK; +} + + +/** + * Extraxt base32crockford encoded data from request. + * + * Queues an error response to the connection if the parameter is missing or + * invalid. + * + * @param connection the MHD connection + * @param param_name the name of the parameter with the key + * @param[out] out_data pointer to store the result + * @param out_size expected size of data + * @return + * GNUNET_YES if the the argument is present + * GNUNET_NO if the argument is absent or malformed + * GNUNET_SYSERR on internal error (error response could not be sent) + */ +int +TALER_MINT_mhd_request_arg_data (struct MHD_Connection *connection, + const char *param_name, + void *out_data, + size_t out_size) +{ + const char *str; + int ret; + + if (GNUNET_OK != (ret = request_arg_require_string (connection, param_name, &str))) + return ret; + if (GNUNET_OK != GNUNET_STRINGS_string_to_data (str, strlen (str), out_data, out_size)) + return request_arg_invalid (connection, param_name); + return GNUNET_OK; +} + + + +/* end of taler-mint-httpd_mhd.c */ diff --git a/src/mint/taler-mint-httpd_mhd.h b/src/mint/taler-mint-httpd_mhd.h new file mode 100644 index 00000000..29ab7f64 --- /dev/null +++ b/src/mint/taler-mint-httpd_mhd.h @@ -0,0 +1,132 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-httpd_mhd.h + * @brief helpers for MHD interaction + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_MHD_H +#define TALER_MINT_HTTPD_MHD_H +#include +#include +#include "taler-mint-httpd.h" + + +/** + * Function to call to handle the request by sending + * back static data from the @a rh. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_static_response (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Function to call to handle the request by sending + * back a redirect to the AGPL source code. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_agpl_redirect (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Function to call to handle the request by building a JSON + * reply from varargs. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param response_code HTTP response code to use + * @param do_cache can the response be cached? (0: no, 1: yes) + * @param fmt format string for pack + * @param ... varargs + * @return MHD result code + */ +int +TALER_MINT_helper_send_json_pack (struct RequestHandler *rh, + struct MHD_Connection *connection, + void *connection_cls, + int response_code, + int do_cache, + const char *fmt, + ...); + + +/** + * Function to call to handle the request by building a JSON + * reply with an error message from @a rh. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_send_json_pack_error (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Extraxt base32crockford encoded data from request. + * + * Queues an error response to the connection if the parameter is missing or + * invalid. + * + * @param connection the MHD connection + * @param param_name the name of the parameter with the key + * @param[out] out_data pointer to store the result + * @param out_size expected size of data + * @return + * GNUNET_YES if the the argument is present + * GNUNET_NO if the argument is absent or malformed + * GNUNET_SYSERR on internal error (error response could not be sent) + */ +int +TALER_MINT_mhd_request_arg_data (struct MHD_Connection *connection, + const char *param_name, + void *out_data, + size_t out_size); + +#endif diff --git a/src/mint/taler-mint-httpd_refresh.c b/src/mint/taler-mint-httpd_refresh.c new file mode 100644 index 00000000..8121bb23 --- /dev/null +++ b/src/mint/taler-mint-httpd_refresh.c @@ -0,0 +1,1497 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_refresh.c + * @brief Handle /refresh/ requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "mint.h" +#include "mint_db.h" +#include "taler_types.h" +#include "taler_signatures.h" +#include "taler_rsa.h" +#include "taler_json_lib.h" +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd_keys.h" +#include "taler-mint-httpd_mhd.h" +#include "taler-mint-httpd_refresh.h" + + +/** + * Sign the message in @a purpose with the mint's signing + * key and encode the signature as a JSON object. + * + * @param purpose the message to sign + * @return signature as JSON object + */ +static json_t * +sign_as_json (struct GNUNET_CRYPTO_EccSignaturePurpose *purpose) +{ + json_t *sig_json; + struct GNUNET_CRYPTO_EddsaSignature sig; + struct MintKeyState *key_state; + + key_state = TALER_MINT_key_state_acquire (); + + sig_json = json_object (); + + GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_eddsa_sign (&key_state->current_sign_key_issue.signkey_priv, + purpose, + &sig)); + + TALER_MINT_key_state_release (key_state); + + json_object_set (sig_json, "sig", TALER_JSON_from_data (&sig, sizeof (struct GNUNET_CRYPTO_EddsaSignature))); + json_object_set (sig_json, "purpose", json_integer (ntohl (purpose->purpose))); + json_object_set (sig_json, "size", json_integer (ntohl (purpose->size))); + + return sig_json; +} + + +static int +link_iter (void *cls, + const struct LinkDataEnc *link_data_enc, + const struct TALER_RSA_PublicKeyBinaryEncoded *denom_pub, + const struct TALER_RSA_Signature *ev_sig) +{ + json_t *list = cls; + json_t *obj = json_object (); + + json_array_append_new (list, obj); + + json_object_set_new (obj, "link_enc", + TALER_JSON_from_data (link_data_enc, + sizeof (struct LinkDataEnc))); + + json_object_set_new (obj, "denom_pub", + TALER_JSON_from_data (denom_pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded))); + + json_object_set_new (obj, "ev_sig", + TALER_JSON_from_data (ev_sig, + sizeof (struct TALER_RSA_Signature))); + + return GNUNET_OK; +} + + +/** + * Insert all requested denominations into the db, and compute the + * required cost of the denominations, including fees. + * + * @param connection the connection to send an error response to + * @param db_conn the database connection + * @param key_state the mint's key state to use + * @param session_pub the refresh session public key + * @param root the request JSON object + * @param hash_context the hash context where accepted + * denominations will be hased into + * @param r_amount the sum of the cost (value+fee) for + * all requested coins + * @return FIXME! + */ +static int +refresh_accept_denoms (struct MHD_Connection *connection, + PGconn *db_conn, + const struct MintKeyState *key_state, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + const json_t *root, + struct TALER_HashContext *hash_context, + struct TALER_Amount *r_amount) +{ + unsigned i; + int res; + json_t *new_denoms; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "new_denoms", + JNAV_RET_TYPED_JSON, + JSON_ARRAY, + &new_denoms); + if (GNUNET_OK != res) + return res; + + memset (r_amount, 0, sizeof (struct TALER_Amount)); + + for (i = 0; i < json_array_size (new_denoms); i++) + { + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + int res; + struct TALER_MINT_DenomKeyIssue *dki; + struct TALER_Amount cost; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "new_denoms", + JNAV_INDEX, (int) i, + JNAV_RET_DATA, + &denom_pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)); + + if (GNUNET_OK != res) + return res; + + dki = TALER_MINT_get_denom_key (key_state, &denom_pub); + + TALER_hash_context_read (hash_context, + &denom_pub, sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)); + + cost = TALER_amount_add (TALER_amount_ntoh (dki->value), + TALER_amount_ntoh (dki->fee_withdraw)); + + *r_amount = TALER_amount_add (cost, *r_amount); + + /* Insert the requested coin into the DB, so we'll know later + * what denomination the request had */ + + if (GNUNET_OK != + TALER_MINT_DB_insert_refresh_order (db_conn, + i, + session_pub, + &denom_pub)) + return res; // ??? + } + return GNUNET_OK; +} + + +/** + * Get an amount in the mint's currency + * that is zero. + * + * @return zero amount in the mint's currency + */ +static struct TALER_Amount +mint_amount_native_zero () +{ + struct TALER_Amount amount; + + memset (&amount, 0, sizeof (amount)); + // FIXME: load from config + memcpy (amount.currency, "EUR", 3); + + return amount; +} + + +static int +check_confirm_signature (struct MHD_Connection *connection, + json_t *coin_info, + const struct GNUNET_CRYPTO_EcdsaPublicKey *coin_pub, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub) +{ + struct RefreshMeltConfirmSignRequestBody body; + struct GNUNET_CRYPTO_EcdsaSignature sig; + int res; + + body.purpose.size = htonl (sizeof (struct RefreshMeltConfirmSignRequestBody)); + body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_CONFIRM); + body.session_pub = *session_pub; + + res = request_json_require_nav (connection, coin_info, + JNAV_FIELD, "confirm_sig", + JNAV_RET_DATA, + &sig, + sizeof (struct GNUNET_CRYPTO_EcdsaSignature)); + + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + return res; + } + + if (GNUNET_OK != + GNUNET_CRYPTO_ecdsa_verify (TALER_SIGNATURE_REFRESH_MELT_CONFIRM, + &body.purpose, + &sig, + coin_pub)) + { + if (MHD_YES != + request_send_json_pack (connection, + MHD_HTTP_UNAUTHORIZED, + "{s:s}", + "error", "signature invalid")) + return GNUNET_SYSERR; + return GNUNET_NO; + } + + return GNUNET_OK; +} + + +/** + * Extract public coin information from a JSON object. + * + * @param connection the connection to send error responses to + * @param root the JSON object to extract the coin info from + * @return GNUNET_YES if coin public info in JSON was valid + * GNUNET_NO otherwise + * GNUNET_SYSERR on internal error + */ +static int +request_json_require_coin_public_info (struct MHD_Connection *connection, + json_t *root, + struct TALER_CoinPublicInfo *r_public_info) +{ + int ret; + + GNUNET_assert (NULL != root); + + ret = request_json_require_nav (connection, root, + JNAV_FIELD, "coin_pub", + JNAV_RET_DATA, + &r_public_info->coin_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + if (GNUNET_OK != ret) + return ret; + + ret = request_json_require_nav (connection, root, + JNAV_FIELD, "denom_sig", + JNAV_RET_DATA, + &r_public_info->denom_sig, + sizeof (struct TALER_RSA_Signature)); + if (GNUNET_OK != ret) + return ret; + + ret = request_json_require_nav (connection, root, + JNAV_FIELD, "denom_pub", + JNAV_RET_DATA, + &r_public_info->denom_pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)); + if (GNUNET_OK != ret) + return ret; + + return GNUNET_OK; +} + + +/** + * Parse coin melt requests from a JSON object and write them to + * the database. + * + * @param connection the connection to send errors to + * @param db_conn the database connection + * @param key_state the mint's key state + * @param session_pub the refresh session's public key + * @param root the JSON object + * @param hash_context the hash context that will receive + * the coin public keys of the melted coin + * @return a GNUnet result code, GNUNET_OK on success, + * GNUNET_NO if an error message was generated, + * GNUNET_SYSERR on internal errors (no response generated) + */ +static int +refresh_accept_melts (struct MHD_Connection *connection, + PGconn *db_conn, + const struct MintKeyState *key_state, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub, + json_t *root, + struct TALER_HashContext *hash_context, + struct TALER_Amount *r_melt_balance) +{ + size_t i; + int res; + json_t *melt_coins; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "melt_coins", + JNAV_RET_TYPED_JSON, + JSON_ARRAY, + &melt_coins); + if (GNUNET_OK != res) + return res; + + memset (r_melt_balance, 0, sizeof (struct TALER_Amount)); + + for (i = 0; i < json_array_size (melt_coins); i++) + { + struct TALER_CoinPublicInfo coin_public_info; + struct TALER_MINT_DenomKeyIssue *dki; + struct KnownCoin known_coin; + // money the customer gets by melting the current coin + struct TALER_Amount coin_gain; + + res = request_json_require_coin_public_info (connection, + json_array_get (melt_coins, i), + &coin_public_info); + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + return res; + } + + if (GNUNET_OK != (res = check_confirm_signature (connection, + json_array_get (melt_coins, i), + &coin_public_info.coin_pub, + session_pub))) + { + GNUNET_break (GNUNET_SYSERR != res); + return res; + } + + TALER_hash_context_read (hash_context, + &coin_public_info.coin_pub, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + + dki = TALER_MINT_get_denom_key (key_state, &coin_public_info.denom_pub); + + if (NULL == dki) + return (MHD_YES == request_send_json_pack (connection, MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "denom not found")) + ? GNUNET_NO : GNUNET_SYSERR; + + if (GNUNET_OK != TALER_MINT_test_coin_valid (key_state, &coin_public_info)) + return (MHD_YES == request_send_json_pack (connection, MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "coin invalid")) + ? GNUNET_NO : GNUNET_SYSERR; + + res = TALER_MINT_DB_get_known_coin (db_conn, &coin_public_info.coin_pub, + &known_coin); + + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + if (GNUNET_YES == res) + { + if (GNUNET_YES == known_coin.is_refreshed) + return (MHD_YES == request_send_json_pack (connection, MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "coin already refreshed")) ? GNUNET_NO : GNUNET_SYSERR; + } + else + { + known_coin.expended_balance = mint_amount_native_zero (); + known_coin.public_info = coin_public_info; + } + + known_coin.is_refreshed = GNUNET_YES; + known_coin.refresh_session_pub = *session_pub; + + if (GNUNET_OK != TALER_MINT_DB_upsert_known_coin (db_conn, &known_coin)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != TALER_MINT_DB_insert_refresh_melt (db_conn, session_pub, i, + &coin_public_info.coin_pub, + &coin_public_info.denom_pub)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + coin_gain = TALER_amount_ntoh (dki->value); + coin_gain = TALER_amount_subtract (coin_gain, known_coin.expended_balance); + + /* Refuse to refresh when the coin does not have enough money left to + * pay the refreshing fees of the coin. */ + + if (TALER_amount_cmp (coin_gain, TALER_amount_ntoh (dki->fee_refresh)) < 0) + return (MHD_YES == request_send_json_pack (connection, MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "depleted")) ? GNUNET_NO : GNUNET_SYSERR; + + coin_gain = TALER_amount_subtract (coin_gain, TALER_amount_ntoh (dki->fee_refresh)); + + *r_melt_balance = TALER_amount_add (*r_melt_balance, coin_gain); + } + return GNUNET_OK; +} + + +/** + * Send a response for "/refresh/melt". + * + * @param connection the connection to send the response to + * @param db_conn the database connection to fetch values from + * @param session_pub the refresh session public key. + * @return a MHD result code + */ +static int +helper_refresh_send_melt_response (struct MHD_Connection *connection, + PGconn *db_conn, + const struct GNUNET_CRYPTO_EddsaPublicKey *session_pub) +{ + struct RefreshSession session; + int res; + json_t *root; + json_t *list; + struct TALER_HashContext hash_context; + + if (GNUNET_OK != + (res = TALER_MINT_DB_get_refresh_session (db_conn, + session_pub, + &session))) + { + // FIXME: send internal error + GNUNET_break (0); + return MHD_NO; + } + + root = json_object (); + list = json_array (); + json_object_set_new (root, "blind_session_pubs", list); + + TALER_hash_context_start (&hash_context); + + { + struct RefreshMeltResponseSignatureBody body; + json_t *sig_json; + + body.purpose.size = htonl (sizeof (struct RefreshMeltResponseSignatureBody)); + body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT_RESPONSE); + TALER_hash_context_finish (&hash_context, &body.melt_response_hash); + sig_json = sign_as_json (&body.purpose); + GNUNET_assert (NULL != sig_json); + json_object_set (root, "signature", sig_json); + } + + return send_response_json (connection, + root, + MHD_HTTP_OK); +} + + +/** + * Verify a signature that is encoded in a JSON object + * + * @param connection the connection to send errors to + * @param root the JSON object with the signature + * @param the public key that the signature was created with + * @param purpose the signed message + * @return GNUNET_YES if the signature was valid + * GNUNET_NO if the signature was invalid + * GNUNET_SYSERR on internal error + */ +static int +request_json_check_signature (struct MHD_Connection *connection, + json_t *root, + struct GNUNET_CRYPTO_EddsaPublicKey *pub, + struct GNUNET_CRYPTO_EccSignaturePurpose *purpose) +{ + struct GNUNET_CRYPTO_EddsaSignature signature; + int size; + uint32_t purpose_num; + int res; + json_t *el; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "sig", + JNAV_RET_DATA, + &signature, + sizeof (struct GNUNET_CRYPTO_EddsaSignature)); + + if (GNUNET_OK != res) + return res; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "purpose", + JNAV_RET_TYPED_JSON, + JSON_INTEGER, + &el); + + if (GNUNET_OK != res) + return res; + + purpose_num = json_integer_value (el); + + if (purpose_num != ntohl (purpose->purpose)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "signature invalid (purpose wrong)\n"); + return request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + "{s:s}", + "error", "signature invalid (purpose)"); + } + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "size", + JNAV_RET_TYPED_JSON, + JSON_INTEGER, + &el); + + if (GNUNET_OK != res) + return res; + + size = json_integer_value (el); + + if (size != ntohl (purpose->size)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "signature invalid (size wrong)\n"); + return request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + GNUNET_NO, GNUNET_SYSERR, + "{s:s}", + "error", "signature invalid (size)"); + } + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_verify (purpose_num, + purpose, + &signature, + pub)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "signature invalid (did not verify)\n"); + return request_send_json_pack (connection, MHD_HTTP_UNAUTHORIZED, + "{s:s}", + "error", "invalid signature (verification)"); + } + + return GNUNET_OK; +} + + +/** + * Handle a "/refresh/melt" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_melt (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + json_t *root; + PGconn *db_conn; + struct GNUNET_CRYPTO_EddsaPublicKey refresh_session_pub; + int res; + struct MintKeyState *key_state; + struct TALER_Amount requested_cost; + struct TALER_Amount melt_balance; + struct TALER_HashContext hash_context; + struct GNUNET_HashCode melt_hash; + + res = process_post_json (connection, + connection_cls, + upload_data, + upload_data_size, &root); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return MHD_YES; + + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + return GNUNET_SYSERR; + + /* session_pub field must always be present */ + res = request_json_require_nav (connection, root, + JNAV_FIELD, "session_pub", + JNAV_RET_DATA, + &refresh_session_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return MHD_YES; + + /* Send response immediately if we already know the session. + * Do _not_ care about fields other than session_pub in this case. */ + + res = TALER_MINT_DB_get_refresh_session (db_conn, + &refresh_session_pub, + NULL); + if (GNUNET_YES == res) + return helper_refresh_send_melt_response (connection, + db_conn, + &refresh_session_pub); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + /* We incrementally update the db with other parameters in a transaction. + * The transaction is aborted if some parameter does not validate. */ + + if (GNUNET_OK != TALER_MINT_DB_transaction (db_conn)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + if (GNUNET_OK != TALER_MINT_DB_create_refresh_session (db_conn, + &refresh_session_pub)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + TALER_MINT_DB_rollback (db_conn); + return MHD_NO; + } + + /* The next two operations must see the same key state, + * thus we acquire it here. */ + + key_state = TALER_MINT_key_state_acquire (); + + /* Write requested denominations to the DB, + * and sum the costs (value plus fees) */ + + TALER_hash_context_start (&hash_context); + + if (GNUNET_OK != (res = refresh_accept_denoms (connection, db_conn, key_state, + &refresh_session_pub, root, + &hash_context, + &requested_cost))) + { + TALER_MINT_key_state_release (key_state); + TALER_MINT_DB_rollback (db_conn); + // FIXME: hash_context_end? + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + /* Write old coins to db and sum their value */ + + if (GNUNET_OK != (res = refresh_accept_melts (connection, db_conn, key_state, + &refresh_session_pub, root, + &hash_context, + &melt_balance))) + { + TALER_MINT_key_state_release (key_state); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + TALER_hash_context_finish (&hash_context, &melt_hash); + + TALER_MINT_key_state_release (key_state); + + /* check that signature from the session public key is ok */ + { + struct RefreshMeltSignatureBody body; + json_t *melt_sig_json; + + melt_sig_json = json_object_get (root, "melt_signature"); + if (NULL == melt_sig_json) + { + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return request_send_json_pack (connection, + MHD_HTTP_BAD_REQUEST, + "{s:s}", + "error", "melt_signature missing"); + } + + body.melt_hash = melt_hash; + body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_MELT); + body.purpose.size = htonl (sizeof (struct RefreshMeltSignatureBody)); + + if (GNUNET_OK != (res = request_json_check_signature (connection, + melt_sig_json, + &refresh_session_pub, + &body.purpose))) + { + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + } + + + /* Request is only ok if cost of requested coins + * does not exceed value of melted coins. */ + + // FIXME: also, consider fees? + if (TALER_amount_cmp (melt_balance, requested_cost) < 0) + { + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + + return request_send_json_pack (connection, MHD_HTTP_FORBIDDEN, + "{s:s}", + "error", "not enough coins melted"); + } + + if (GNUNET_OK != TALER_MINT_DB_commit (db_conn)) + { + GNUNET_break (0); + return MHD_NO; + } + return helper_refresh_send_melt_response (connection, + db_conn, + &refresh_session_pub); +} + + +/** + * Send a response to a "/refresh/commit" request. + * + * @param connection the connection to send the response to + * @param db_conn the mint database + * @param refresh_session the refresh session + * @return a MHD status code + */ +static int +refresh_send_commit_response (struct MHD_Connection *connection, + PGconn *db_conn, + struct RefreshSession *refresh_session) +{ + struct RefreshCommitResponseSignatureBody body; + json_t *sig_json; + + body.purpose.size = htonl (sizeof (struct RefreshCommitResponseSignatureBody)); + body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT_RESPONSE); + body.noreveal_index = htons (refresh_session->noreveal_index); + sig_json = sign_as_json (&body.purpose); + GNUNET_assert (NULL != sig_json); + return request_send_json_pack (connection, MHD_HTTP_OK, + "{s:i, s:o}", + "noreveal_index", (int) refresh_session->noreveal_index, + "signature", sig_json); +} + + +/** + * Handle a "/refresh/commit" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_commit (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct GNUNET_CRYPTO_EddsaPublicKey refresh_session_pub; + int res; + PGconn *db_conn; + struct RefreshSession refresh_session; + int i; + struct GNUNET_HashCode commit_hash; + struct TALER_HashContext hash_context; + json_t *root; + + res = process_post_json (connection, + connection_cls, + upload_data, + upload_data_size, &root); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return MHD_YES; + + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "session_pub", + JNAV_RET_DATA, + &refresh_session_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + /* Send response immediately if we already know the session. + * Do _not_ care about fields other than session_pub in this case. */ + + res = TALER_MINT_DB_get_refresh_session (db_conn, + &refresh_session_pub, + &refresh_session); + if ( (GNUNET_YES == res) && + (GNUNET_YES == refresh_session.has_commit_sig) ) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "sending cached commit response\n"); + res = refresh_send_commit_response (connection, + db_conn, + &refresh_session); + GNUNET_break (res != GNUNET_SYSERR); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + if (GNUNET_OK != TALER_MINT_DB_transaction (db_conn)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + /* Re-fetch the session information from the database, + * in case a concurrent transaction modified it. */ + + res = TALER_MINT_DB_get_refresh_session (db_conn, + &refresh_session_pub, + &refresh_session); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error'? + GNUNET_break (GNUNET_SYSERR != res); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return MHD_NO; + } + + TALER_hash_context_start (&hash_context); + + for (i = 0; i < refresh_session.kappa; i++) + { + unsigned int j; + + for (j = 0; j < refresh_session.num_newcoins; j++) + { + struct RefreshCommitCoin commit_coin; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "coin_evs", + JNAV_INDEX, (int) i, + JNAV_INDEX, (int) j, + JNAV_RET_DATA, + &commit_coin.coin_ev, + sizeof (struct TALER_RSA_BlindedSignaturePurpose)); + + if (GNUNET_OK != res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + TALER_hash_context_read (&hash_context, + &commit_coin.coin_ev, + sizeof (struct TALER_RSA_BlindedSignaturePurpose)); + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "link_encs", + JNAV_INDEX, (int) i, + JNAV_INDEX, (int) j, + JNAV_RET_DATA, + commit_coin.link_enc, + TALER_REFRESH_LINK_LENGTH); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + TALER_hash_context_read (&hash_context, + commit_coin.link_enc, + TALER_REFRESH_LINK_LENGTH); + + commit_coin.cnc_index = i; + commit_coin.newcoin_index = j; + commit_coin.session_pub = refresh_session_pub; + + if (GNUNET_OK != + TALER_MINT_DB_insert_refresh_commit_coin (db_conn, + &commit_coin)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return MHD_NO; + } + } + } + + for (i = 0; i < refresh_session.kappa; i++) + { + unsigned int j; + for (j = 0; j < refresh_session.num_oldcoins; j++) + { + struct RefreshCommitLink commit_link; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "transfer_pubs", + JNAV_INDEX, (int) i, + JNAV_INDEX, (int) j, + JNAV_RET_DATA, + &commit_link.transfer_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + TALER_hash_context_read (&hash_context, + &commit_link.transfer_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "secret_encs", + JNAV_INDEX, (int) i, + JNAV_INDEX, (int) j, + JNAV_RET_DATA, + commit_link.shared_secret_enc, + TALER_REFRESH_SHARED_SECRET_LENGTH); + + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + + TALER_hash_context_read (&hash_context, + commit_link.shared_secret_enc, + TALER_REFRESH_SHARED_SECRET_LENGTH); + + commit_link.cnc_index = i; + commit_link.oldcoin_index = j; + commit_link.session_pub = refresh_session_pub; + + if (GNUNET_OK != TALER_MINT_DB_insert_refresh_commit_link (db_conn, &commit_link)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return MHD_NO; + } + } + } + + TALER_hash_context_finish (&hash_context, &commit_hash); + + { + struct RefreshCommitSignatureBody body; + json_t *commit_sig_json; + + commit_sig_json = json_object_get (root, "commit_signature"); + if (NULL == commit_sig_json) + { + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + "{s:s}", + "error", "commit_signature missing"); + } + + body.commit_hash = commit_hash; + + body.purpose.purpose = htonl (TALER_SIGNATURE_REFRESH_COMMIT); + body.purpose.size = htonl (sizeof (struct RefreshCommitSignatureBody)); + + if (GNUNET_OK != (res = request_json_check_signature (connection, + commit_sig_json, + &refresh_session_pub, + &body.purpose))) + { + GNUNET_break (GNUNET_OK == TALER_MINT_DB_rollback (db_conn)); + return (GNUNET_SYSERR == res) ? MHD_NO : MHD_YES; + } + } + + if (GNUNET_OK != TALER_MINT_DB_commit (db_conn)) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + return refresh_send_commit_response (connection, db_conn, &refresh_session); +} + + +/** + * Send response for "/refresh/reveal". + * + * @param connection the MHD connection + * @param db_conn the connection to the mint's db + * @param refresh_session_pub the refresh session's public key + * @return a MHD result code + */ +static int +helper_refresh_reveal_send_response (struct MHD_Connection *connection, + PGconn *db_conn, + struct GNUNET_CRYPTO_EddsaPublicKey *refresh_session_pub) +{ + int res; + int newcoin_index; + struct RefreshSession refresh_session; + json_t *root; + json_t *list; + + res = TALER_MINT_DB_get_refresh_session (db_conn, + refresh_session_pub, + &refresh_session); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + + GNUNET_assert (0 != refresh_session.reveal_ok); + + root = json_object (); + list = json_array (); + json_object_set_new (root, "ev_sigs", list); + + for (newcoin_index = 0; newcoin_index < refresh_session.num_newcoins; newcoin_index++) + { + struct TALER_RSA_Signature ev_sig; + + res = TALER_MINT_DB_get_refresh_collectable (db_conn, + newcoin_index, + refresh_session_pub, + &ev_sig); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + json_array_append_new (list, + TALER_JSON_from_data (&ev_sig, + sizeof (struct TALER_RSA_Signature))); + } + return send_response_json (connection, + root, + MHD_HTTP_OK); +} + + +/** + * Handle a "/refresh/reveal" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_reveal (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct GNUNET_CRYPTO_EddsaPublicKey refresh_session_pub; + int res; + PGconn *db_conn; + struct RefreshSession refresh_session; + struct MintKeyState *key_state; + int i; + int j; + json_t *root; + + res = process_post_json (connection, + connection_cls, + upload_data, upload_data_size, + &root); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return MHD_YES; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "session_pub", + JNAV_RET_DATA, + &refresh_session_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + return res; + } + + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + GNUNET_break (0); + return MHD_NO; + } + + /* Send response immediately if we already know the session, + * and the session commited already. + * Do _not_ care about fields other than session_pub in this case. */ + + res = TALER_MINT_DB_get_refresh_session (db_conn, &refresh_session_pub, &refresh_session); + if (GNUNET_YES == res && 0 != refresh_session.reveal_ok) + return helper_refresh_reveal_send_response (connection, db_conn, &refresh_session_pub); + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return MHD_NO; + } + + /* Check that the transfer private keys match their commitments. + * Then derive the shared secret for each kappa, and check that they match. */ + + for (i = 0; i < refresh_session.kappa; i++) + { + struct GNUNET_HashCode last_shared_secret; + int secret_initialized = GNUNET_NO; + + if (i == (refresh_session.noreveal_index % refresh_session.kappa)) + continue; + + for (j = 0; j < refresh_session.num_oldcoins; j++) + { + struct GNUNET_CRYPTO_EcdsaPrivateKey transfer_priv; + struct RefreshCommitLink commit_link; + struct GNUNET_CRYPTO_EcdsaPublicKey coin_pub; + struct GNUNET_HashCode transfer_secret; + struct GNUNET_HashCode shared_secret; + + res = request_json_require_nav (connection, root, + JNAV_FIELD, "transfer_privs", + JNAV_INDEX, (int) i, + JNAV_INDEX, (int) j, + JNAV_RET_DATA, + &transfer_priv, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)); + + if (GNUNET_OK != res) + { + GNUNET_break (GNUNET_SYSERR != res); + return res; + } + + res = TALER_MINT_DB_get_refresh_commit_link (db_conn, + &refresh_session_pub, + i, j, + &commit_link); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + res = TALER_MINT_DB_get_refresh_melt (db_conn, &refresh_session_pub, j, &coin_pub); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + /* We're converting key types here, which is not very nice + * but necessary and harmless (keys will be thrown away later). */ + if (GNUNET_OK != GNUNET_CRYPTO_ecc_ecdh ((struct GNUNET_CRYPTO_EcdhePrivateKey *) &transfer_priv, + (struct GNUNET_CRYPTO_EcdhePublicKey *) &coin_pub, + &transfer_secret)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + if (0 >= TALER_refresh_decrypt (commit_link.shared_secret_enc, TALER_REFRESH_SHARED_SECRET_LENGTH, + &transfer_secret, &shared_secret)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "decryption failed\n"); + return GNUNET_SYSERR; + } + + if (GNUNET_NO == secret_initialized) + { + secret_initialized = GNUNET_YES; + last_shared_secret = shared_secret; + } + else if (0 != memcmp (&shared_secret, &last_shared_secret, sizeof (struct GNUNET_HashCode))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "shared secrets do not match\n"); + return GNUNET_SYSERR; + } + + { + struct GNUNET_CRYPTO_EcdsaPublicKey transfer_pub_check; + GNUNET_CRYPTO_ecdsa_key_get_public (&transfer_priv, &transfer_pub_check); + if (0 != memcmp (&transfer_pub_check, &commit_link.transfer_pub, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "transfer keys do not match\n"); + return GNUNET_SYSERR; + } + } + } + + /* Check that the commitments for all new coins were correct */ + + for (j = 0; j < refresh_session.num_newcoins; j++) + { + struct RefreshCommitCoin commit_coin; + struct LinkData link_data; + struct TALER_RSA_BlindedSignaturePurpose *coin_ev_check; + struct GNUNET_CRYPTO_EcdsaPublicKey coin_pub; + struct TALER_RSA_BlindingKey *bkey; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + + bkey = NULL; + res = TALER_MINT_DB_get_refresh_commit_coin (db_conn, + &refresh_session_pub, + i, j, + &commit_coin); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + + if (0 >= TALER_refresh_decrypt (commit_coin.link_enc, sizeof (struct LinkData), + &last_shared_secret, &link_data)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "decryption failed\n"); + return GNUNET_SYSERR; + } + + GNUNET_CRYPTO_ecdsa_key_get_public (&link_data.coin_priv, &coin_pub); + if (NULL == (bkey = TALER_RSA_blinding_key_decode (&link_data.bkey_enc))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid blinding key\n"); + return GNUNET_SYSERR; + } + res = TALER_MINT_DB_get_refresh_order (db_conn, j, &refresh_session_pub, &denom_pub); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + if (NULL == (coin_ev_check = + TALER_RSA_message_blind (&coin_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), + bkey, + &denom_pub))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "blind failed\n"); + return GNUNET_SYSERR; + } + + if (0 != memcmp (&coin_ev_check, + &commit_coin.coin_ev, + sizeof (struct TALER_RSA_BlindedSignaturePurpose))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "blind envelope does not match for kappa=%d, old=%d\n", + (int) i, (int) j); + return GNUNET_SYSERR; + } + } + } + + + if (GNUNET_OK != TALER_MINT_DB_transaction (db_conn)) + { + GNUNET_break (0); + return MHD_NO; + } + + for (j = 0; j < refresh_session.num_newcoins; j++) + { + struct RefreshCommitCoin commit_coin; + struct TALER_RSA_PublicKeyBinaryEncoded denom_pub; + struct TALER_MINT_DenomKeyIssue *dki; + struct TALER_RSA_Signature ev_sig; + + res = TALER_MINT_DB_get_refresh_commit_coin (db_conn, + &refresh_session_pub, + refresh_session.noreveal_index % refresh_session.kappa, + j, + &commit_coin); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + res = TALER_MINT_DB_get_refresh_order (db_conn, j, &refresh_session_pub, &denom_pub); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + + key_state = TALER_MINT_key_state_acquire (); + dki = TALER_MINT_get_denom_key (key_state, &denom_pub); + TALER_MINT_key_state_release (key_state); + if (NULL == dki) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + TALER_RSA_sign (dki->denom_priv, + &commit_coin.coin_ev, + sizeof (struct TALER_RSA_BlindedSignaturePurpose), + &ev_sig)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + res = TALER_MINT_DB_insert_refresh_collectable (db_conn, + j, + &refresh_session_pub, + &ev_sig); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + } + /* mark that reveal was successful */ + + res = TALER_MINT_DB_set_reveal_ok (db_conn, &refresh_session_pub); + if (GNUNET_OK != res) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != TALER_MINT_DB_commit (db_conn)) + { + GNUNET_break (0); + return MHD_NO; + } + + return helper_refresh_reveal_send_response (connection, db_conn, &refresh_session_pub); +} + + +/** + * Handle a "/refresh/link" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_link (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct GNUNET_CRYPTO_EcdsaPublicKey coin_pub; + int res; + json_t *root; + json_t *list; + PGconn *db_conn; + struct GNUNET_CRYPTO_EcdsaPublicKey transfer_pub; + struct SharedSecretEnc shared_secret_enc; + + res = TALER_MINT_mhd_request_arg_data (connection, + "coin_pub", + &coin_pub, + sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + list = json_array (); + root = json_object (); + json_object_set_new (root, "new_coins", list); + + res = TALER_db_get_transfer (db_conn, + &coin_pub, + &transfer_pub, + &shared_secret_enc); + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + { + return request_send_json_pack (connection, + MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "link data not found (transfer)"); + } + GNUNET_assert (GNUNET_OK == res); + + res = TALER_db_get_link (db_conn, &coin_pub, link_iter, list); + if (GNUNET_SYSERR == res) + { + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + { + return request_send_json_pack (connection, + MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "link data not found (link)"); + } + GNUNET_assert (GNUNET_OK == res); + json_object_set_new (root, "transfer_pub", + TALER_JSON_from_data (&transfer_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))); + json_object_set_new (root, "secret_enc", + TALER_JSON_from_data (&shared_secret_enc, + sizeof (struct SharedSecretEnc))); + return send_response_json (connection, root, MHD_HTTP_OK); +} + + +/* end of taler-mint-httpd_refresh.c */ diff --git a/src/mint/taler-mint-httpd_refresh.h b/src/mint/taler-mint-httpd_refresh.h new file mode 100644 index 00000000..20e7d97c --- /dev/null +++ b/src/mint/taler-mint-httpd_refresh.h @@ -0,0 +1,103 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_refresh.h + * @brief Handle /refresh/ requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_REFRESH_H +#define TALER_MINT_HTTPD_REFRESH_H + +#include +#include +#include "taler-mint-httpd.h" + + +/** + * Handle a "/refresh/melt" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_melt (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Handle a "/refresh/commit" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_commit (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Handle a "/refresh/link" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_link (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Handle a "/refresh/reveal" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_refresh_reveal (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +#endif diff --git a/src/mint/taler-mint-httpd_withdraw.c b/src/mint/taler-mint-httpd_withdraw.c new file mode 100644 index 00000000..7ffa4570 --- /dev/null +++ b/src/mint/taler-mint-httpd_withdraw.c @@ -0,0 +1,400 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_withdraw.c + * @brief Handle /withdraw/ requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include +#include +#include "mint.h" +#include "mint_db.h" +#include "taler_types.h" +#include "taler_signatures.h" +#include "taler_rsa.h" +#include "taler_json_lib.h" +#include "taler_microhttpd_lib.h" +#include "taler-mint-httpd_keys.h" +#include "taler-mint-httpd_mhd.h" +#include "taler-mint-httpd_withdraw.h" + + +/** + * Convert a signature (with purpose) to + * a JSON object representation. + * + * @param purpose purpose of the signature + * @param signature the signature + * @return the JSON reporesentation of the signature with purpose + */ +static json_t * +sig_to_json (const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose, + const struct GNUNET_CRYPTO_EddsaSignature *signature) +{ + json_t *root; + json_t *el; + + root = json_object (); + + el = json_integer ((json_int_t) ntohl (purpose->size)); + json_object_set_new (root, "size", el); + + el = json_integer ((json_int_t) ntohl (purpose->purpose)); + json_object_set_new (root, "purpose", el); + + el = TALER_JSON_from_data (signature, sizeof (struct GNUNET_CRYPTO_EddsaSignature)); + json_object_set_new (root, "sig", el); + + return root; +} + + +/** + * Sign a reserve's status with the current signing key. + * + * @param reserve the reserve to sign + * @param key_state the key state containing the current + * signing private key + */ +static void +sign_reserve (struct Reserve *reserve, + struct MintKeyState *key_state) +{ + reserve->status_sign_pub = key_state->current_sign_key_issue.signkey_pub; + reserve->status_sig_purpose.purpose = htonl (TALER_SIGNATURE_RESERVE_STATUS); + reserve->status_sig_purpose.size = htonl (sizeof (struct Reserve) - + offsetof (struct Reserve, status_sig_purpose)); + GNUNET_CRYPTO_eddsa_sign (&key_state->current_sign_key_issue.signkey_priv, + &reserve->status_sig_purpose, + &reserve->status_sig); +} + + +/** + * Handle a "/withdraw/status" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_withdraw_status (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct GNUNET_CRYPTO_EddsaPublicKey reserve_pub; + PGconn *db_conn; + int res; + struct Reserve reserve; + struct MintKeyState *key_state; + int must_update = GNUNET_NO; + json_t *json; + + res = TALER_MINT_mhd_request_arg_data (connection, + "reserve_pub", + &reserve_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + res = TALER_MINT_DB_get_reserve (db_conn, + &reserve_pub, + &reserve); + if (GNUNET_SYSERR == res) + return TALER_MINT_helper_send_json_pack (rh, + connection, + connection_cls, + 0 /* no caching */, + MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", + "Reserve not found"); + if (GNUNET_OK != res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + key_state = TALER_MINT_key_state_acquire (); + if (0 != memcmp (&key_state->current_sign_key_issue.signkey_pub, + &reserve.status_sign_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))) + { + sign_reserve (&reserve, key_state); + must_update = GNUNET_YES; + } + if ((GNUNET_YES == must_update) && + (GNUNET_OK != TALER_MINT_DB_update_reserve (db_conn, &reserve, !must_update))) + { + GNUNET_break (0); + return MHD_YES; + } + + /* Convert the public information of a reserve (i.e. + excluding private key) to a JSON object. */ + json = json_object (); + json_object_set_new (json, + "balance", + TALER_JSON_from_amount (TALER_amount_ntoh (reserve.balance))); + json_object_set_new (json, + "expiration", + TALER_JSON_from_abs (GNUNET_TIME_absolute_ntoh (reserve.expiration))); + json_object_set_new (json, + "signature", + sig_to_json (&reserve.status_sig_purpose, + &reserve.status_sig)); + + return send_response_json (connection, + json, + MHD_HTTP_OK); +} + + +/** + * Send positive, normal response for "/withdraw/sign". + * + * @param connection the connection to send the response to + * @param collectable the collectable blindcoin (i.e. the blindly signed coin) + * @return a MHD result code + */ +static int +helper_withdraw_sign_send_reply (struct MHD_Connection *connection, + const struct CollectableBlindcoin *collectable) +{ + json_t *root = json_object (); + + json_object_set_new (root, "ev_sig", + TALER_JSON_from_data (&collectable->ev_sig, + sizeof (struct TALER_RSA_Signature))); + return send_response_json (connection, + root, + MHD_HTTP_OK); +} + + +/** + * Handle a "/withdraw/sign" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_withdraw_sign (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size) +{ + struct TALER_WithdrawRequest wsrd; + int res; + PGconn *db_conn; + struct Reserve reserve; + struct MintKeyState *key_state; + struct CollectableBlindcoin collectable; + struct TALER_MINT_DenomKeyIssue *dki; + struct TALER_RSA_Signature ev_sig; + struct TALER_Amount amount_required; + + memset (&wsrd, + 0, + sizeof (struct TALER_WithdrawRequest)); + res = TALER_MINT_mhd_request_arg_data (connection, + "reserve_pub", + &wsrd.reserve_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + res = TALER_MINT_mhd_request_arg_data (connection, + "denom_pub", + &wsrd.denomination_pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + res = TALER_MINT_mhd_request_arg_data (connection, + "coin_ev", + &wsrd.coin_envelope, + sizeof (struct TALER_RSA_Signature)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + res = TALER_MINT_mhd_request_arg_data (connection, + "reserve_sig", + &wsrd.sig, + sizeof (struct GNUNET_CRYPTO_EddsaSignature)); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_OK != res) + return MHD_YES; + + if (NULL == (db_conn = TALER_MINT_DB_get_connection ())) + { + // FIXME: return 'internal error'? + GNUNET_break (0); + return MHD_NO; + } + + res = TALER_MINT_DB_get_collectable_blindcoin (db_conn, + &wsrd.coin_envelope, + &collectable); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + + /* Don't sign again if we have already signed the coin */ + if (GNUNET_YES == res) + return helper_withdraw_sign_send_reply (connection, + &collectable); + GNUNET_assert (GNUNET_NO == res); + res = TALER_MINT_DB_get_reserve (db_conn, + &wsrd.reserve_pub, + &reserve); + if (GNUNET_SYSERR == res) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + if (GNUNET_NO == res) + return request_send_json_pack (connection, + MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "Reserve not found"); + + // fill out all the missing info in the request before + // we can check the signature on the request + + wsrd.purpose.purpose = htonl (TALER_SIGNATURE_WITHDRAW); + wsrd.purpose.size = htonl (sizeof (struct TALER_WithdrawRequest) - + offsetof (struct TALER_WithdrawRequest, purpose)); + + if (GNUNET_OK != + GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WITHDRAW, + &wsrd.purpose, + &wsrd.sig, + &wsrd.reserve_pub)) + return request_send_json_pack (connection, + MHD_HTTP_UNAUTHORIZED, + "{s:s}", + "error", "Invalid Signature"); + + key_state = TALER_MINT_key_state_acquire (); + dki = TALER_MINT_get_denom_key (key_state, + &wsrd.denomination_pub); + TALER_MINT_key_state_release (key_state); + if (NULL == dki) + return request_send_json_pack (connection, MHD_HTTP_NOT_FOUND, + "{s:s}", + "error", "Denomination not found"); + + amount_required = TALER_amount_ntoh (dki->value); + amount_required = TALER_amount_add (amount_required, + TALER_amount_ntoh (dki->fee_withdraw)); + + if (0 < TALER_amount_cmp (amount_required, + TALER_amount_ntoh (reserve.balance))) + return request_send_json_pack (connection, + MHD_HTTP_PAYMENT_REQUIRED, + "{s:s}", + "error", "Insufficient funds"); + if (GNUNET_OK != TALER_RSA_sign (dki->denom_priv, + &wsrd.coin_envelope, + sizeof (struct TALER_RSA_BlindedSignaturePurpose), + &ev_sig)) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + + reserve.balance = TALER_amount_hton (TALER_amount_subtract (TALER_amount_ntoh (reserve.balance), + amount_required)); + if (GNUNET_OK != + TALER_MINT_DB_update_reserve (db_conn, + &reserve, + GNUNET_YES)) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return MHD_NO; + } + + collectable.ev = wsrd.coin_envelope; + collectable.ev_sig = ev_sig; + collectable.reserve_pub = wsrd.reserve_pub; + collectable.reserve_sig = wsrd.sig; + if (GNUNET_OK != + TALER_MINT_DB_insert_collectable_blindcoin (db_conn, + &collectable)) + { + // FIXME: return 'internal error' + GNUNET_break (0); + return GNUNET_NO;; + } + return helper_withdraw_sign_send_reply (connection, + &collectable); +} + +/* end of taler-mint-httpd_withdraw.c */ diff --git a/src/mint/taler-mint-httpd_withdraw.h b/src/mint/taler-mint-httpd_withdraw.h new file mode 100644 index 00000000..1d292ebd --- /dev/null +++ b/src/mint/taler-mint-httpd_withdraw.h @@ -0,0 +1,65 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ +/** + * @file taler-mint-httpd_withdraw.h + * @brief Handle /withdraw/ requests + * @author Florian Dold + * @author Benedikt Mueller + * @author Christian Grothoff + */ +#ifndef TALER_MINT_HTTPD_WITHDRAW_H +#define TALER_MINT_HTTPD_WITHDRAW_H + +#include +#include +#include "taler-mint-httpd.h" + +/** + * Handle a "/withdraw/status" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_withdraw_status (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + + +/** + * Handle a "/withdraw/sign" request + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[IN|OUT] connection_cls the connection's closure (can be updated) + * @param upload_data upload data + * @param[IN|OUT] upload_data_size number of bytes (left) in @a upload_data + * @return MHD result code + */ +int +TALER_MINT_handler_withdraw_sign (struct RequestHandler *rh, + struct MHD_Connection *connection, + void **connection_cls, + const char *upload_data, + size_t *upload_data_size); + +#endif diff --git a/src/mint/taler-mint-keycheck.c b/src/mint/taler-mint-keycheck.c new file mode 100644 index 00000000..c6186859 --- /dev/null +++ b/src/mint/taler-mint-keycheck.c @@ -0,0 +1,169 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-keycheck.c + * @brief Check mint keys for validity. + * @author Florian Dold + * @author Benedikt Mueller + */ + +#include +#include +#include "mint.h" +#include "taler_signatures.h" + + +static char *mintdir; +static struct GNUNET_CONFIGURATION_Handle *kcfg; + + +static int +signkeys_iter (void *cls, const struct TALER_MINT_SignKeyIssue *ski) +{ + struct GNUNET_TIME_Absolute start; + + printf ("iterating over key for start time %s\n", + GNUNET_STRINGS_absolute_time_to_string (GNUNET_TIME_absolute_ntoh (ski->start))); + + start = GNUNET_TIME_absolute_ntoh (ski->start); + + if (ntohl (ski->purpose.size) != + (sizeof (struct TALER_MINT_SignKeyIssue) - offsetof (struct TALER_MINT_SignKeyIssue, purpose))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Signkey with start %s has invalid purpose field (timestamp: %llu)\n", + GNUNET_STRINGS_absolute_time_to_string (start), + (long long) start.abs_value_us); + return GNUNET_SYSERR; + } + + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_SIGNKEY, + &ski->purpose, + &ski->signature, + &ski->master_pub)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Signkey with start %s has invalid signature (timestamp: %llu)\n", + GNUNET_STRINGS_absolute_time_to_string (start), + (long long) start.abs_value_us); + return GNUNET_SYSERR; + } + printf ("key valid\n"); + return GNUNET_OK; +} + + +static int +mint_signkeys_check () +{ + if (0 > TALER_MINT_signkeys_iterate (mintdir, signkeys_iter, NULL)) + return GNUNET_NO; + return GNUNET_OK; +} + + +static int denomkeys_iter (void *cls, + const char *alias, + const struct TALER_MINT_DenomKeyIssue *dki) +{ + struct GNUNET_TIME_Absolute start; + + start = GNUNET_TIME_absolute_ntoh (dki->start); + + if (ntohl (dki->purpose.size) != + (sizeof (struct TALER_MINT_DenomKeyIssue) - offsetof (struct TALER_MINT_DenomKeyIssue, purpose))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Denomkey for '%s' with start %s has invalid purpose field (timestamp: %llu)\n", + alias, + GNUNET_STRINGS_absolute_time_to_string (start), + (long long) start.abs_value_us); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MASTER_DENOM, + &dki->purpose, + &dki->signature, + &dki->master)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Denomkey for '%s'with start %s has invalid signature (timestamp: %llu)\n", + alias, + GNUNET_STRINGS_absolute_time_to_string (start), + (long long) start.abs_value_us); + return GNUNET_SYSERR; + } + printf ("denom key valid\n"); + + return GNUNET_OK; +} + + +static int +mint_denomkeys_check () +{ + if (0 > TALER_MINT_denomkeys_iterate (mintdir, denomkeys_iter, NULL)) + return GNUNET_NO; + return GNUNET_OK; +} + + +static int +mint_keys_check (void) +{ + if (GNUNET_OK != mint_signkeys_check ()) + return GNUNET_NO; + return mint_denomkeys_check (); +} + + +/** + * The main function of the keyup tool + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), + {'d', "mint-dir", "DIR", + "mint directory with keys to update", 1, + &GNUNET_GETOPT_set_filename, &mintdir}, + GNUNET_GETOPT_OPTION_END + }; + + GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-keycheck", "WARNING", NULL)); + + if (GNUNET_GETOPT_run ("taler-mint-keyup", options, argc, argv) < 0) + return 1; + if (NULL == mintdir) + { + fprintf (stderr, "mint directory not given\n"); + return 1; + } + + kcfg = TALER_MINT_config_load (mintdir); + if (NULL == kcfg) + { + fprintf (stderr, "can't load mint configuration\n"); + return 1; + } + if (GNUNET_OK != mint_keys_check ()) + return 1; + return 0; +} + diff --git a/src/mint/taler-mint-keyup.c b/src/mint/taler-mint-keyup.c new file mode 100644 index 00000000..8a1a7788 --- /dev/null +++ b/src/mint/taler-mint-keyup.c @@ -0,0 +1,657 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-keyup.c + * @brief Update the mint's keys for coins and signatures, + * using the mint's offline master key. + * @author Florian Dold + * @author Benedikt Mueller + */ + +#include +#include +#include "taler_util.h" +#include "taler_signatures.h" +#include "mint.h" + +#define HASH_CUTOFF 20 + +/** + * Macro to round microseconds to seconds in GNUNET_TIME_* structs. + */ +#define ROUND_TO_SECS(name,us_field) name.us_field -= name.us_field % (1000 * 1000); + + +GNUNET_NETWORK_STRUCT_BEGIN + +struct CoinTypeNBO +{ + struct GNUNET_TIME_RelativeNBO duration_spend; + struct GNUNET_TIME_RelativeNBO duration_withdraw; + struct TALER_AmountNBO value; + struct TALER_AmountNBO fee_withdraw; + struct TALER_AmountNBO fee_deposit; + struct TALER_AmountNBO fee_refresh; +}; + +GNUNET_NETWORK_STRUCT_END + +struct CoinTypeParams +{ + struct GNUNET_TIME_Relative duration_spend; + struct GNUNET_TIME_Relative duration_withdraw; + struct GNUNET_TIME_Relative duration_overlap; + struct TALER_Amount value; + struct TALER_Amount fee_withdraw; + struct TALER_Amount fee_deposit; + struct TALER_Amount fee_refresh; + struct GNUNET_TIME_Absolute anchor; +}; + + +/** + * Filename of the master private key. + */ +static char *masterkeyfile; + +/** + * Director of the mint, containing the keys. + */ +static char *mintdir; + +/** + * Time to pretend when the key update is executed. + */ +static char *pretend_time_str; + +/** + * Handle to the mint's configuration + */ +static struct GNUNET_CONFIGURATION_Handle *kcfg; + +/** + * Time when the key update is executed. Either the actual current time, or a + * pretended time. + */ +static struct GNUNET_TIME_Absolute now; + +/** + * Master private key of the mint. + */ +static struct GNUNET_CRYPTO_EddsaPrivateKey *master_priv; + +/** + * Master public key of the mint. + */ +static struct GNUNET_CRYPTO_EddsaPublicKey *master_pub; + +/** + * Until what time do we provide keys? + */ +static struct GNUNET_TIME_Absolute lookahead_sign_stamp; + + +int +config_get_denom (const char *section, const char *option, struct TALER_Amount *denom) +{ + char *str; + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (kcfg, section, option, &str)) + return GNUNET_NO; + if (GNUNET_OK != TALER_string_to_amount (str, denom)) + return GNUNET_SYSERR; + return GNUNET_OK; +} + + +char * +get_signkey_dir () +{ + char *dir; + size_t len; + len = GNUNET_asprintf (&dir, ("%s" DIR_SEPARATOR_STR DIR_SIGNKEYS), mintdir); + GNUNET_assert (len > 0); + return dir; +} + + +char * +get_signkey_file (struct GNUNET_TIME_Absolute start) +{ + char *dir; + size_t len; + len = GNUNET_asprintf (&dir, ("%s" DIR_SEPARATOR_STR DIR_SIGNKEYS DIR_SEPARATOR_STR "%llu"), + mintdir, (long long) start.abs_value_us); + GNUNET_assert (len > 0); + return dir; +} + + + +/** + * Hash the data defining the coin type. + * Exclude information that may not be the same for all + * instances of the coin type (i.e. the anchor, overlap). + */ +void +hash_coin_type (const struct CoinTypeParams *p, struct GNUNET_HashCode *hash) +{ + struct CoinTypeNBO p_nbo; + + memset (&p_nbo, 0, sizeof (struct CoinTypeNBO)); + + p_nbo.duration_spend = GNUNET_TIME_relative_hton (p->duration_spend); + p_nbo.duration_withdraw = GNUNET_TIME_relative_hton (p->duration_withdraw); + p_nbo.value = TALER_amount_hton (p->value); + p_nbo.fee_withdraw = TALER_amount_hton (p->fee_withdraw); + p_nbo.fee_deposit = TALER_amount_hton (p->fee_deposit); + p_nbo.fee_refresh = TALER_amount_hton (p->fee_refresh); + + GNUNET_CRYPTO_hash (&p_nbo, sizeof (struct CoinTypeNBO), hash); +} + + +static const char * +get_cointype_dir (const struct CoinTypeParams *p) +{ + static char dir[4096]; + size_t len; + struct GNUNET_HashCode hash; + char *hash_str; + char *val_str; + unsigned int i; + + hash_coin_type (p, &hash); + hash_str = TALER_data_to_string_alloc (&hash, sizeof (struct GNUNET_HashCode)); + GNUNET_assert (HASH_CUTOFF <= strlen (hash_str) + 1); + GNUNET_assert (NULL != hash_str); + hash_str[HASH_CUTOFF] = 0; + + val_str = TALER_amount_to_string (p->value); + for (i = 0; i < strlen (val_str); i++) + if (':' == val_str[i] || '.' == val_str[i]) + val_str[i] = '_'; + + len = GNUNET_snprintf (dir, sizeof (dir), + ("%s" DIR_SEPARATOR_STR DIR_DENOMKEYS DIR_SEPARATOR_STR "%s-%s"), + mintdir, val_str, hash_str); + GNUNET_assert (len > 0); + GNUNET_free (hash_str); + return dir; +} + + +static const char * +get_cointype_file (struct CoinTypeParams *p, + struct GNUNET_TIME_Absolute start) +{ + const char *dir; + static char filename[4096]; + size_t len; + dir = get_cointype_dir (p); + len = GNUNET_snprintf (filename, sizeof (filename), ("%s" DIR_SEPARATOR_STR "%llu"), + dir, (unsigned long long) start.abs_value_us); + GNUNET_assert (len > 0); + return filename; +} + + +/** + * Get the latest key file from the past. + * + * @param cls closure + * @param filename complete filename (absolute path) + * @return #GNUNET_OK to continue to iterate, + * #GNUNET_NO to stop iteration with no error, + * #GNUNET_SYSERR to abort iteration with error! + */ +static int +get_anchor_iter (void *cls, + const char *filename) +{ + struct GNUNET_TIME_Absolute stamp; + struct GNUNET_TIME_Absolute *anchor = cls; + const char *base; + char *end = NULL; + + base = GNUNET_STRINGS_get_short_name (filename); + stamp.abs_value_us = strtol (base, &end, 10); + + if ((NULL == end) || (0 != *end)) + { + fprintf(stderr, "Ignoring unexpected file '%s'.\n", filename); + return GNUNET_OK; + } + + // TODO: check if it's actually a valid key file + + if ((stamp.abs_value_us <= now.abs_value_us) && (stamp.abs_value_us > anchor->abs_value_us)) + *anchor = stamp; + + return GNUNET_OK; +} + + +/** + * Get the timestamp where the first new key should be generated. + * Relies on correctly named key files. + * + * @param dir directory with the signed stuff + * @param duration how long is one key valid? + * @param overlap what's the overlap between the keys validity period? + * @param[out] anchor the timestamp where the first new key should be generated + */ +void +get_anchor (const char *dir, + struct GNUNET_TIME_Relative duration, + struct GNUNET_TIME_Relative overlap, + struct GNUNET_TIME_Absolute *anchor) +{ + GNUNET_assert (0 == duration.rel_value_us % 1000000); + GNUNET_assert (0 == overlap.rel_value_us % 1000000); + if (GNUNET_YES != GNUNET_DISK_directory_test (dir, GNUNET_YES)) + { + *anchor = now; + printf ("Can't look for anchor (%s)\n", dir); + return; + } + + *anchor = GNUNET_TIME_UNIT_ZERO_ABS; + if (-1 == GNUNET_DISK_directory_scan (dir, &get_anchor_iter, anchor)) + { + *anchor = now; + return; + } + + if ((GNUNET_TIME_absolute_add (*anchor, duration)).abs_value_us < now.abs_value_us) + { + // there's no good anchor, start from now + // (existing keys are too old) + *anchor = now; + } + else if (anchor->abs_value_us != now.abs_value_us) + { + // we have a good anchor + *anchor = GNUNET_TIME_absolute_add (*anchor, duration); + *anchor = GNUNET_TIME_absolute_subtract (*anchor, overlap); + } + // anchor is now the stamp where we need to create a new key +} + +static void +create_signkey_issue (struct GNUNET_TIME_Absolute start, + struct GNUNET_TIME_Relative duration, + struct TALER_MINT_SignKeyIssue *issue) +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *priv; + + priv = GNUNET_CRYPTO_eddsa_key_create (); + GNUNET_assert (NULL != priv); + issue->signkey_priv = *priv; + GNUNET_free (priv); + issue->master_pub = *master_pub; + issue->start = GNUNET_TIME_absolute_hton (start); + issue->expire = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_add (start, duration)); + + GNUNET_CRYPTO_eddsa_key_get_public (&issue->signkey_priv, &issue->signkey_pub); + + issue->purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNKEY); + issue->purpose.size = htonl (sizeof (struct TALER_MINT_SignKeyIssue) - offsetof (struct TALER_MINT_SignKeyIssue, purpose)); + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_sign (master_priv, &issue->purpose, &issue->signature)) + { + GNUNET_abort (); + } +} + + +static int +check_signkey_valid (const char *signkey_filename) +{ + // FIXME: do real checks + return GNUNET_OK; +} + + +int +mint_keys_update_signkeys () +{ + struct GNUNET_TIME_Relative signkey_duration; + struct GNUNET_TIME_Absolute anchor; + char *signkey_dir; + + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (kcfg, "mint_keys", "signkey_duration", &signkey_duration)) + { + fprintf (stderr, "Can't read config value mint_keys.signkey_duration\n"); + return GNUNET_SYSERR; + } + ROUND_TO_SECS (signkey_duration, rel_value_us); + signkey_dir = get_signkey_dir (); + // make sure the directory exists + if (GNUNET_OK != GNUNET_DISK_directory_create (signkey_dir)) + { + fprintf (stderr, "Cant create signkey dir\n"); + return GNUNET_SYSERR; + } + + get_anchor (signkey_dir, signkey_duration, GNUNET_TIME_UNIT_ZERO, &anchor); + + while (anchor.abs_value_us < lookahead_sign_stamp.abs_value_us) { + char *skf; + skf = get_signkey_file (anchor); + if (GNUNET_YES != GNUNET_DISK_file_test (skf)) + { + struct TALER_MINT_SignKeyIssue signkey_issue; + ssize_t nwrite; + printf ("Generating signing key for %s.\n", GNUNET_STRINGS_absolute_time_to_string (anchor)); + create_signkey_issue (anchor, signkey_duration, &signkey_issue); + nwrite = GNUNET_DISK_fn_write (skf, &signkey_issue, sizeof (struct TALER_MINT_SignKeyIssue), + (GNUNET_DISK_PERM_USER_WRITE | GNUNET_DISK_PERM_USER_READ)); + if (nwrite != sizeof (struct TALER_MINT_SignKeyIssue)) + { + fprintf (stderr, "Can't write to file '%s'\n", skf); + return GNUNET_SYSERR; + } + } + else if (GNUNET_OK != check_signkey_valid (skf)) + { + return GNUNET_SYSERR; + } + anchor = GNUNET_TIME_absolute_add (anchor, signkey_duration); + } + return GNUNET_OK; +} + + +int +get_cointype_params (const char *ct, struct CoinTypeParams *params) +{ + const char *dir; + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (kcfg, "mint_denom_duration_withdraw", ct, ¶ms->duration_withdraw)) + { + fprintf (stderr, "Withdraw duration not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + ROUND_TO_SECS (params->duration_withdraw, rel_value_us); + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (kcfg, "mint_denom_duration_spend", ct, ¶ms->duration_spend)) + { + fprintf (stderr, "Spend duration not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + ROUND_TO_SECS (params->duration_spend, rel_value_us); + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (kcfg, "mint_denom_duration_overlap", ct, ¶ms->duration_overlap)) + { + fprintf (stderr, "Overlap duration not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + ROUND_TO_SECS (params->duration_overlap, rel_value_us); + + if (GNUNET_OK != config_get_denom ("mint_denom_value", ct, ¶ms->value)) + { + fprintf (stderr, "Value not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != config_get_denom ("mint_denom_fee_withdraw", ct, ¶ms->fee_withdraw)) + { + fprintf (stderr, "Withdraw fee not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != config_get_denom ("mint_denom_fee_deposit", ct, ¶ms->fee_deposit)) + { + fprintf (stderr, "Deposit fee not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + + if (GNUNET_OK != config_get_denom ("mint_denom_fee_refresh", ct, ¶ms->fee_refresh)) + { + fprintf (stderr, "Deposit fee not given for coin type '%s'\n", ct); + return GNUNET_SYSERR; + } + + dir = get_cointype_dir (params); + get_anchor (dir, params->duration_spend, params->duration_overlap, ¶ms->anchor); + return GNUNET_OK; +} + + +static void +create_denomkey_issue (struct CoinTypeParams *params, struct TALER_MINT_DenomKeyIssue *dki) +{ + GNUNET_assert (NULL != (dki->denom_priv = TALER_RSA_key_create ())); + TALER_RSA_key_get_public (dki->denom_priv, &dki->denom_pub); + dki->master = *master_pub; + dki->start = GNUNET_TIME_absolute_hton (params->anchor); + dki->expire_withdraw = + GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_add (params->anchor, + params->duration_withdraw)); + dki->expire_spend = + GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_add (params->anchor, + params->duration_spend)); + dki->value = TALER_amount_hton (params->value); + dki->fee_withdraw = TALER_amount_hton (params->fee_withdraw); + dki->fee_deposit = TALER_amount_hton (params->fee_deposit); + dki->fee_refresh = TALER_amount_hton (params->fee_refresh); + + dki->purpose.purpose = htonl (TALER_SIGNATURE_MASTER_DENOM); + dki->purpose.size = htonl (sizeof (struct TALER_MINT_DenomKeyIssue) - offsetof (struct TALER_MINT_DenomKeyIssue, purpose)); + + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_sign (master_priv, &dki->purpose, &dki->signature)) + { + GNUNET_abort (); + } +} + + +static int +check_cointype_valid (const char *filename, struct CoinTypeParams *params) +{ + // FIXME: add real checks + return GNUNET_OK; +} + + +int +mint_keys_update_cointype (const char *coin_alias) +{ + struct CoinTypeParams p; + const char *cointype_dir; + + if (GNUNET_OK != get_cointype_params (coin_alias, &p)) + return GNUNET_SYSERR; + + cointype_dir = get_cointype_dir (&p); + if (GNUNET_OK != GNUNET_DISK_directory_create (cointype_dir)) + return GNUNET_SYSERR; + + while (p.anchor.abs_value_us < lookahead_sign_stamp.abs_value_us) { + const char *dkf; + dkf = get_cointype_file (&p, p.anchor); + + if (GNUNET_YES != GNUNET_DISK_file_test (dkf)) + { + struct TALER_MINT_DenomKeyIssue denomkey_issue; + int ret; + printf ("Generating denomination key for type '%s', start %s.\n", + coin_alias, GNUNET_STRINGS_absolute_time_to_string (p.anchor)); + printf ("Target path: %s\n", dkf); + create_denomkey_issue (&p, &denomkey_issue); + ret = TALER_MINT_write_denom_key (dkf, &denomkey_issue); + TALER_RSA_key_free (denomkey_issue.denom_priv); + if (GNUNET_OK != ret) + { + fprintf (stderr, "Can't write to file '%s'\n", dkf); + return GNUNET_SYSERR; + } + } + else if (GNUNET_OK != check_cointype_valid (dkf, &p)) + { + return GNUNET_SYSERR; + } + p.anchor = GNUNET_TIME_absolute_add (p.anchor, p.duration_spend); + p.anchor = GNUNET_TIME_absolute_subtract (p.anchor, p.duration_overlap); + } + return GNUNET_OK; +} + + +int +mint_keys_update_denomkeys () +{ + char *coin_types; + char *ct; + char *tok_ctx; + + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (kcfg, "mint_keys", "coin_types", &coin_types)) + { + fprintf (stderr, "mint_keys.coin_types not in configuration\n"); + return GNUNET_SYSERR; + } + + for (ct = strtok_r (coin_types, " ", &tok_ctx); + ct != NULL; + ct = strtok_r (NULL, " ", &tok_ctx)) + { + if (GNUNET_OK != mint_keys_update_cointype (ct)) + { + GNUNET_free (coin_types); + return GNUNET_SYSERR; + } + } + GNUNET_free (coin_types); + return GNUNET_OK; +} + + +static int +mint_keys_update () +{ + int ret; + struct GNUNET_TIME_Relative lookahead_sign; + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (kcfg, "mint_keys", "lookahead_sign", &lookahead_sign)) + { + fprintf (stderr, "mint_keys.lookahead_sign not found\n"); + return GNUNET_SYSERR; + } + if (lookahead_sign.rel_value_us == 0) + { + fprintf (stderr, "mint_keys.lookahead_sign must not be zero\n"); + return GNUNET_SYSERR; + } + ROUND_TO_SECS (lookahead_sign, rel_value_us); + lookahead_sign_stamp = GNUNET_TIME_absolute_add (now, lookahead_sign); + + ret = mint_keys_update_signkeys (); + if (GNUNET_OK != ret) + return GNUNET_SYSERR; + + return mint_keys_update_denomkeys (); +} + + +/** + * The main function of the keyup tool + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), + {'m', "master-key", "FILE", + "master key file (private key)", 1, + &GNUNET_GETOPT_set_filename, &masterkeyfile}, + {'d', "mint-dir", "DIR", + "mint directory with keys to update", 1, + &GNUNET_GETOPT_set_filename, &mintdir}, + {'t', "time", "TIMESTAMP", + "pretend it is a different time for the update", 0, + &GNUNET_GETOPT_set_string, &pretend_time_str}, + GNUNET_GETOPT_OPTION_END + }; + + GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-keyup", "WARNING", NULL)); + + if (GNUNET_GETOPT_run ("taler-mint-keyup", options, argc, argv) < 0) + return 1; + if (NULL == mintdir) + { + fprintf (stderr, "mint directory not given\n"); + return 1; + } + + if (NULL != pretend_time_str) + { + if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_absolute (pretend_time_str, &now)) + { + fprintf (stderr, "timestamp invalid\n"); + return 1; + } + } + else + { + now = GNUNET_TIME_absolute_get (); + } + ROUND_TO_SECS (now, abs_value_us); + + kcfg = TALER_MINT_config_load (mintdir); + if (NULL == kcfg) + { + fprintf (stderr, "can't load mint configuration\n"); + return 1; + } + + if (NULL == masterkeyfile) + { + fprintf (stderr, "master key file not given\n"); + return 1; + } + master_priv = GNUNET_CRYPTO_eddsa_key_create_from_file (masterkeyfile); + if (NULL == master_priv) + { + fprintf (stderr, "master key invalid\n"); + return 1; + } + + master_pub = GNUNET_new (struct GNUNET_CRYPTO_EddsaPublicKey); + GNUNET_CRYPTO_eddsa_key_get_public (master_priv, master_pub); + + // check if key from file matches the one from the configuration + { + struct GNUNET_CRYPTO_EddsaPublicKey master_pub_from_cfg; + if (GNUNET_OK != TALER_configuration_get_data (kcfg, "mint", "master_pub", + &master_pub_from_cfg, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))) + { + fprintf (stderr, "master key missing in configuration (mint.master_pub)\n"); + return 1; + } + if (0 != memcmp (master_pub, &master_pub_from_cfg, sizeof (struct GNUNET_CRYPTO_EddsaPublicKey))) + { + fprintf (stderr, "Mismatch between key from mint configuration and master private key file from command line.\n"); + return 1; + } + } + + if (GNUNET_OK != mint_keys_update ()) + return 1; + return 0; +} + diff --git a/src/mint/taler-mint-reservemod.c b/src/mint/taler-mint-reservemod.c new file mode 100644 index 00000000..3dd94f84 --- /dev/null +++ b/src/mint/taler-mint-reservemod.c @@ -0,0 +1,215 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-reservemod.c + * @brief Modify reserves. + * @author Florian Dold + * @author Benedikt Mueller + */ + +#include "platform.h" +#include +#include +#include "taler_util.h" +#include "taler_signatures.h" +#include "mint.h" + +static char *mintdir; +static struct GNUNET_CRYPTO_EddsaPublicKey *reserve_pub; +static struct GNUNET_CONFIGURATION_Handle *kcfg; +static PGconn *db_conn; + + + +/** + * Create a new or add to existing reserve. + * Fails if currencies do not match. + * + * @param denom denomination to add + * + * @return ... + */ +int +reservemod_add (struct TALER_Amount denom) +{ + PGresult *result; + { + const void *param_values[] = { reserve_pub }; + int param_lengths[] = {sizeof(struct GNUNET_CRYPTO_EddsaPublicKey)}; + int param_formats[] = {1}; + result = PQexecParams (db_conn, + "select balance_value, balance_fraction, balance_currency from reserves where reserve_pub=$1 limit 1;", + 1, NULL, (const char * const *) param_values, param_lengths, param_formats, 1); + } + + if (PGRES_TUPLES_OK != PQresultStatus (result)) + { + fprintf (stderr, "Select failed: %s\n", PQresultErrorMessage (result)); + return GNUNET_SYSERR; + } + if (0 == PQntuples (result)) + { + struct GNUNET_TIME_AbsoluteNBO exnbo; + exnbo = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_add ( GNUNET_TIME_absolute_get (), GNUNET_TIME_UNIT_YEARS)); + + uint32_t value = htonl (denom.value); + uint32_t fraction = htonl (denom.fraction); + const void *param_values[] = { + reserve_pub, + &value, + &fraction, + denom.currency, + &exnbo}; + int param_lengths[] = {32, 4, 4, strlen(denom.currency), 8}; + int param_formats[] = {1, 1, 1, 1, 1}; + result = PQexecParams (db_conn, + "insert into reserves (reserve_pub, balance_value, balance_fraction, balance_currency, " + " expiration_date )" + "values ($1,$2,$3,$4,$5);", + 5, NULL, (const char **) param_values, param_lengths, param_formats, 1); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + fprintf (stderr, "Insert failed: %s\n", PQresultErrorMessage (result)); + return GNUNET_SYSERR; + } + } + else + { + struct TALER_Amount old_denom; + struct TALER_Amount new_denom; + struct TALER_AmountNBO new_denom_nbo; + int denom_indices[] = {0, 1, 2}; + int param_lengths[] = {4, 4, 32}; + int param_formats[] = {1, 1, 1}; + const void *param_values[] = { + &new_denom_nbo.value, + &new_denom_nbo.fraction, + reserve_pub + }; + + GNUNET_assert (GNUNET_OK == TALER_TALER_DB_extract_amount (result, 0, denom_indices, &old_denom)); + new_denom = TALER_amount_add (old_denom, denom); + new_denom_nbo = TALER_amount_hton (new_denom); + result = PQexecParams (db_conn, + "UPDATE reserves " + "SET balance_value = $1, balance_fraction = $2, " + " status_sig = NULL, status_sign_pub = NULL " + "WHERE reserve_pub = $3 ", + 3, NULL, (const char **) param_values, param_lengths, param_formats, 1); + + if (PGRES_COMMAND_OK != PQresultStatus (result)) + { + fprintf (stderr, "Update failed: %s\n", PQresultErrorMessage (result)); + return GNUNET_SYSERR; + } + + if (0 != strcmp ("1", PQcmdTuples (result))) + { + fprintf (stderr, "Update failed (updated '%s' tupes instead of '1')\n", + PQcmdTuples (result)); + return GNUNET_SYSERR; + } + + } + return GNUNET_OK; +} + + +/** + * The main function of the reservemod tool + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, char *const *argv) +{ + static char *reserve_pub_str; + static char *add_str; + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_HELP ("gnunet-mint-keyup OPTIONS"), + {'d', "mint-dir", "DIR", + "mint directory with keys to update", 1, + &GNUNET_GETOPT_set_filename, &mintdir}, + {'R', "reserve", "KEY", + "reserve (public key) to modify", 1, + &GNUNET_GETOPT_set_string, &reserve_pub_str}, + {'a', "add", "DENOM", + "value to add", 1, + &GNUNET_GETOPT_set_string, &add_str}, + GNUNET_GETOPT_OPTION_END + }; + char *TALER_MINT_db_connection_cfg_str; + + GNUNET_assert (GNUNET_OK == GNUNET_log_setup ("taler-mint-keycheck", "WARNING", NULL)); + + if (GNUNET_GETOPT_run ("taler-mint-keyup", options, argc, argv) < 0) + return 1; + if (NULL == mintdir) + { + fprintf (stderr, "mint directory not given\n"); + return 1; + } + + reserve_pub = GNUNET_new (struct GNUNET_CRYPTO_EddsaPublicKey); + if ((NULL == reserve_pub_str) || + (GNUNET_OK != GNUNET_STRINGS_string_to_data (reserve_pub_str, + strlen (reserve_pub_str), + reserve_pub, + sizeof (struct GNUNET_CRYPTO_EddsaPublicKey)))) + { + fprintf (stderr, "reserve key invalid\n"); + return 1; + } + + kcfg = TALER_MINT_config_load (mintdir); + if (NULL == kcfg) + { + fprintf (stderr, "can't load mint configuration\n"); + return 1; + } + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (kcfg, "mint", "db", &TALER_MINT_db_connection_cfg_str)) + { + fprintf (stderr, "db configuration string not found\n"); + return 42; + } + db_conn = PQconnectdb (TALER_MINT_db_connection_cfg_str); + if (CONNECTION_OK != PQstatus (db_conn)) + { + fprintf (stderr, "db connection failed: %s\n", PQerrorMessage (db_conn)); + return 1; + } + + if (NULL != add_str) + { + struct TALER_Amount add_value; + if (GNUNET_OK != TALER_string_to_amount (add_str, &add_value)) + { + fprintf (stderr, "could not read value\n"); + return 1; + } + if (GNUNET_OK != reservemod_add (add_value)) + { + fprintf (stderr, "adding value failed\n"); + return 1; + } + } + return 0; +} + diff --git a/src/mint/test_mint_api.c b/src/mint/test_mint_api.c new file mode 100644 index 00000000..965d607f --- /dev/null +++ b/src/mint/test_mint_api.c @@ -0,0 +1,211 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint/test_mint_api.c + * @brief testcase to test mint's HTTP API interface + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "taler_util.h" +#include "taler_mint_service.h" + +struct TALER_MINT_Context *ctx; + +struct TALER_MINT_Handle *mint; + +struct TALER_MINT_KeysGetHandle *dkey_get; + +struct TALER_MINT_DepositHandle *dh; + +static GNUNET_SCHEDULER_TaskIdentifier shutdown_task; + +static int result; + + +static void +do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + shutdown_task = GNUNET_SCHEDULER_NO_TASK; + if (NULL != dkey_get) + TALER_MINT_keys_get_cancel (dkey_get); + dkey_get = NULL; + if (NULL != dh) + TALER_MINT_deposit_submit_cancel (dh); + dh = NULL; + TALER_MINT_disconnect (mint); + mint = NULL; + TALER_MINT_cleanup (ctx); + ctx = NULL; +} + + +/** + * Callbacks of this type are used to serve the result of submitting a deposit + * permission object to a mint + * + * @param cls closure + * @param status 1 for successful deposit, 2 for retry, 0 for failure + * @param obj the received JSON object; can be NULL if it cannot be constructed + * from the reply + * @param emsg in case of unsuccessful deposit, this contains a human readable + * explanation. + */ +static void +deposit_status (void *cls, + int status, + json_t *obj, + char *emsg) +{ + char *json_enc; + + dh = NULL; + json_enc = NULL; + if (NULL != obj) + { + json_enc = json_dumps (obj, JSON_INDENT(2)); + fprintf (stderr, "%s", json_enc); + } + if (1 == status) + result = GNUNET_OK; + else + GNUNET_break (0); + if (NULL != emsg) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Deposit failed: %s\n", emsg); + GNUNET_SCHEDULER_shutdown (); +} +/** + * Functions of this type are called to signal completion of an asynchronous call. + * + * @param cls closure + * @param emsg if the asynchronous call could not be completed due to an error, + * this parameter contains a human readable error message + */ +static void +cont (void *cls, const char *emsg) +{ + json_t *dp; + char rnd_32[32]; + char rnd_64[64]; + char *enc_32; + char *enc_64; + + GNUNET_assert (NULL == cls); + dkey_get = NULL; + if (NULL != emsg) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s\n", emsg); + + enc_32 = TALER_data_to_string_alloc (rnd_32, sizeof (rnd_32)); + enc_64 = TALER_data_to_string_alloc (rnd_64, sizeof (rnd_64)); + dp = json_pack ("{s:s s:o s:s s:s s:s s:s s:s s:s s:s s:s}", + "type", "DIRECT_DEPOSIT", + "wire", json_pack ("{s:s}", "type", "SEPA"), + "C", enc_32, + "K", enc_32, + "ubsig", enc_64, + "M", enc_32, + "H_a", enc_64, + "H_wire", enc_64, + "csig", enc_64, + "m", "B1C5GP2RB1C5G"); + GNUNET_free (enc_32); + GNUNET_free (enc_64); + dh = TALER_MINT_deposit_submit_json (mint, + deposit_status, + NULL, + dp); + json_decref (dp); +} + + +/** + * Functions of this type are called to provide the retrieved signing and + * denomination keys of the mint. No TALER_MINT_*() functions should be called + * in this callback. + * + * @param cls closure passed to TALER_MINT_keys_get() + * @param sign_keys NULL-terminated array of pointers to the mint's signing + * keys. NULL if no signing keys are retrieved. + * @param denom_keys NULL-terminated array of pointers to the mint's + * denomination keys; will be NULL if no signing keys are retrieved. + */ +static void +read_denom_key (void *cls, + struct TALER_MINT_SigningPublicKey **sign_keys, + struct TALER_MINT_DenomPublicKey **denom_keys) +{ + unsigned int cnt; + GNUNET_assert (NULL == cls); +#define ERR(cond) do { if(!(cond)) break; GNUNET_break (0); return; } while (0) + ERR (NULL == sign_keys); + ERR (NULL == denom_keys); + for (cnt = 0; NULL != sign_keys[cnt]; cnt++) + GNUNET_free (sign_keys[cnt]); + ERR (0 == cnt); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Read %u signing keys\n", cnt); + GNUNET_free (sign_keys); + for (cnt = 0; NULL != denom_keys[cnt]; cnt++) + GNUNET_free (denom_keys[cnt]); + ERR (0 == cnt); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Read %u denomination keys\n", cnt); + GNUNET_free (denom_keys); +#undef ERR + return; +} + + +/** + * Main function that will be run by the scheduler. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param config configuration + */ +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *config) +{ + ctx = TALER_MINT_init (); + mint = TALER_MINT_connect (ctx, "localhost", 4241, NULL); + GNUNET_assert (NULL != mint); + dkey_get = TALER_MINT_keys_get (mint, + &read_denom_key, NULL, + &cont, NULL); + GNUNET_assert (NULL != dkey_get); + shutdown_task = + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply + (GNUNET_TIME_UNIT_SECONDS, 5), + &do_shutdown, NULL); +} + +int +main (int argc, char * const *argv) +{ + static struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + + result = GNUNET_SYSERR; + if (GNUNET_OK != + GNUNET_PROGRAM_run (argc, argv, "test-mint-api", + gettext_noop + ("Testcase to test mint's HTTP API interface"), + options, &run, NULL)) + return 3; + return (GNUNET_OK == result) ? 0 : 1; +} diff --git a/src/mint/test_mint_common.c b/src/mint/test_mint_common.c new file mode 100644 index 00000000..b7cad3ea --- /dev/null +++ b/src/mint/test_mint_common.c @@ -0,0 +1,83 @@ +/* + This file is part of TALER + (C) 2014 GNUnet e. V. (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint/test_mint_common.c + * @brief test cases for some functions in mint/mint_common.c + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "gnunet/gnunet_util_lib.h" +#include "taler_rsa.h" +#include "mint.h" + +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + +int +main (int argc, const char *const argv[]) +{ + struct TALER_MINT_DenomKeyIssue dki; + struct TALER_RSA_PrivateKeyBinaryEncoded *enc; + struct TALER_MINT_DenomKeyIssue dki_read; + struct TALER_RSA_PrivateKeyBinaryEncoded *enc_read; + char *tmpfile; + + int ret; + + ret = 1; + enc = NULL; + enc_read = NULL; + tmpfile = NULL; + dki.denom_priv = NULL; + dki_read.denom_priv = NULL; + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, + &dki.signature, + sizeof (dki) - offsetof (struct TALER_MINT_DenomKeyIssue, + signature)); + dki.denom_priv = TALER_RSA_key_create (); + EXITIF (NULL == (enc = TALER_RSA_encode_key (dki.denom_priv))); + EXITIF (NULL == (tmpfile = GNUNET_DISK_mktemp ("test_mint_common"))); + EXITIF (GNUNET_OK != TALER_MINT_write_denom_key (tmpfile, &dki)); + EXITIF (GNUNET_OK != TALER_MINT_read_denom_key (tmpfile, &dki_read)); + EXITIF (NULL == (enc_read = TALER_RSA_encode_key (dki_read.denom_priv))); + EXITIF (enc->len != enc_read->len); + EXITIF (0 != memcmp (enc, + enc_read, + ntohs(enc->len))); + EXITIF (0 != memcmp (&dki.signature, + &dki_read.signature, + sizeof (dki) - offsetof (struct TALER_MINT_DenomKeyIssue, + signature))); + ret = 0; + + EXITIF_exit: + GNUNET_free_non_null (enc); + if (NULL != tmpfile) + { + (void) unlink (tmpfile); + GNUNET_free (tmpfile); + } + GNUNET_free_non_null (enc_read); + if (NULL != dki.denom_priv) + TALER_RSA_key_free (dki.denom_priv); + if (NULL != dki_read.denom_priv) + TALER_RSA_key_free (dki_read.denom_priv); + return ret; +} diff --git a/src/mint/test_mint_deposits.c b/src/mint/test_mint_deposits.c new file mode 100644 index 00000000..776bc15d --- /dev/null +++ b/src/mint/test_mint_deposits.c @@ -0,0 +1,149 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file mint/test_mint_deposits.c + * @brief testcase for mint deposits + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include +#include +#include "mint_db.h" + +#define DB_URI "postgres:///taler" + +/** + * Shorthand for exit jumps. + */ +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + + +/** + * DB connection handle + */ +static PGconn *conn; + +/** + * Should we not interact with a temporary table? + */ +static int persistent; + +/** + * Testcase result + */ +static int result; + + +static void +do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + if (NULL != conn) + PQfinish (conn); + conn = NULL; +} + + +/** + * Main function that will be run by the scheduler. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param config configuration + */ +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *config) +{ + static const char wire[] = "{" + "\"type\":\"SEPA\"," + "\"IBAN\":\"DE67830654080004822650\"," + "\"NAME\":\"GNUNET E.V\"," + "\"BIC\":\"GENODEF1SRL\"" + "}"; + struct Deposit *deposit; + struct Deposit *q_deposit; + uint64_t transaction_id; + + deposit = NULL; + q_deposit = NULL; + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, + &do_shutdown, NULL); + EXITIF (NULL == (conn = PQconnectdb(DB_URI))); + EXITIF (GNUNET_OK != TALER_MINT_DB_init_deposits (conn, !persistent)); + EXITIF (GNUNET_OK != TALER_MINT_DB_prepare_deposits (conn)); + deposit = GNUNET_malloc (sizeof (struct Deposit) + sizeof (wire)); + /* Makeup a random coin public key */ + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, + deposit, + sizeof (struct Deposit)); + /* Makeup a random 64bit transaction ID */ + transaction_id = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, + UINT64_MAX); + deposit->transaction_id = GNUNET_htonll (transaction_id); + /* Random amount */ + deposit->amount.value = + htonl (GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, UINT32_MAX)); + deposit->amount.fraction = + htonl (GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, UINT32_MAX)); + strcpy (deposit->amount.currency, "EUR"); + /* Copy wireformat */ + (void) memcpy (deposit->wire, wire, sizeof (wire)); + EXITIF (GNUNET_OK != TALER_MINT_DB_insert_deposit (conn, + deposit)); + EXITIF (GNUNET_OK != TALER_MINT_DB_get_deposit (conn, + &deposit->coin_pub, + &q_deposit)); + EXITIF (0 != memcmp (deposit, + q_deposit, + sizeof (struct Deposit) - offsetof(struct Deposit, + wire))); + EXITIF (transaction_id != GNUNET_ntohll (q_deposit->transaction_id)); + result = GNUNET_OK; + + EXITIF_exit: + GNUNET_free_non_null (deposit); + GNUNET_free_non_null (q_deposit); + GNUNET_SCHEDULER_shutdown (); + return; +} + + +int main(int argc, char *const argv[]) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + {'T', "persist", NULL, + gettext_noop ("Use a persistent database table instead of a temporary one"), + GNUNET_NO, &GNUNET_GETOPT_set_one, &persistent}, + GNUNET_GETOPT_OPTION_END + }; + + + persistent = GNUNET_NO; + result = GNUNET_SYSERR; + if (GNUNET_OK != + GNUNET_PROGRAM_run (argc, argv, + "test-mint-deposits", + "testcase for mint deposits", + options, &run, NULL)) + return 3; + return (GNUNET_OK == result) ? 0 : 1; +} diff --git a/src/mint/test_mint_nayapaisa.ecc b/src/mint/test_mint_nayapaisa.ecc new file mode 100644 index 00000000..942110b5 Binary files /dev/null and b/src/mint/test_mint_nayapaisa.ecc differ diff --git a/src/mint/test_mint_nayapaisa/README b/src/mint/test_mint_nayapaisa/README new file mode 100644 index 00000000..fce5e018 --- /dev/null +++ b/src/mint/test_mint_nayapaisa/README @@ -0,0 +1 @@ +This directory is a template for the mint directory. diff --git a/src/mint/test_mint_nayapaisa/config/mint-common.conf b/src/mint/test_mint_nayapaisa/config/mint-common.conf new file mode 100644 index 00000000..c1fede7a --- /dev/null +++ b/src/mint/test_mint_nayapaisa/config/mint-common.conf @@ -0,0 +1,6 @@ +[mint] +db = postgres:///taler +port = 4241 +master_pub = 6ZE0HEY2M0FWP61M0470HYBF4K6RRD5DP54372PD2TN9N9VX2VJG +refresh_security_parameter = 3 + diff --git a/src/mint/test_mint_nayapaisa/config/mint-keyup.conf b/src/mint/test_mint_nayapaisa/config/mint-keyup.conf new file mode 100644 index 00000000..1542d1a6 --- /dev/null +++ b/src/mint/test_mint_nayapaisa/config/mint-keyup.conf @@ -0,0 +1,79 @@ +[mint_keys] + +# how long is one signkey valid? +signkey_duration = 4 weeks + +# how long do we generate denomination and signing keys +# ahead of time? +lookahead_sign = 32 weeks 1 day + +# how long do we provide to clients denomination and signing keys +# ahead of time? +lookahead_provide = 4 weeks 1 day + +# what coin types do we have available? +coin_types = default_eur_ct_10 default_eur_5 default_eur_10 default_eur_1000 + + + +[mint_denom_duration_overlap] +default_eur_ct_10 = 5 minutes +default_eur_5 = 5 minutes +default_eur_10 = 5 minutes +default_eur_1000 = 5 minutes + + + +[mint_denom_value] +default_eur_ct_10 = EUR:0.10 +default_eur_5 = EUR:5 +default_eur_10 = EUR:10 +default_eur_1000 = EUR:1000 + + + +[mint_denom_duration_withdraw] +default_eur_ct_10 = 7 days +default_eur_5 = 7 days +default_eur_10 = 7 days +default_eur_1000 = 1 day + + + +[mint_denom_duration_spend] +default_eur_ct_10 = 30 days +default_eur_5 = 30 days +default_eur_10 = 30 days +default_eur_1000 = 30 day + + + +[mint_denom_fee_withdraw] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + +[mint_denom_fee_deposit] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_fee_refresh] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_kappa] +default_eur_ct_10 = 3 +default_eur_5 = 3 +default_eur_10 = 3 +default_eur_1000 = 5 + diff --git a/src/mint/test_mint_nyadirahim.ecc b/src/mint/test_mint_nyadirahim.ecc new file mode 100644 index 00000000..9db92089 --- /dev/null +++ b/src/mint/test_mint_nyadirahim.ecc @@ -0,0 +1 @@ +ÃWÜBøÐfØ ŽµrØñ·•ŠÊÐŒ„Ú:ß½V»j \ No newline at end of file diff --git a/src/mint/test_mint_nyadirahim/README b/src/mint/test_mint_nyadirahim/README new file mode 100644 index 00000000..fce5e018 --- /dev/null +++ b/src/mint/test_mint_nyadirahim/README @@ -0,0 +1 @@ +This directory is a template for the mint directory. diff --git a/src/mint/test_mint_nyadirahim/config/mint-common.conf b/src/mint/test_mint_nyadirahim/config/mint-common.conf new file mode 100644 index 00000000..c4d52863 --- /dev/null +++ b/src/mint/test_mint_nyadirahim/config/mint-common.conf @@ -0,0 +1,6 @@ +[mint] +db = postgres:///taler +port = 4241 +master_pub = 7995WKK71KPKTBBMA5BHNBSZFGNRZPYNXDJMQ8EK86V9598H03TG +refresh_security_parameter = 3 + diff --git a/src/mint/test_mint_nyadirahim/config/mint-keyup.conf b/src/mint/test_mint_nyadirahim/config/mint-keyup.conf new file mode 100644 index 00000000..1542d1a6 --- /dev/null +++ b/src/mint/test_mint_nyadirahim/config/mint-keyup.conf @@ -0,0 +1,79 @@ +[mint_keys] + +# how long is one signkey valid? +signkey_duration = 4 weeks + +# how long do we generate denomination and signing keys +# ahead of time? +lookahead_sign = 32 weeks 1 day + +# how long do we provide to clients denomination and signing keys +# ahead of time? +lookahead_provide = 4 weeks 1 day + +# what coin types do we have available? +coin_types = default_eur_ct_10 default_eur_5 default_eur_10 default_eur_1000 + + + +[mint_denom_duration_overlap] +default_eur_ct_10 = 5 minutes +default_eur_5 = 5 minutes +default_eur_10 = 5 minutes +default_eur_1000 = 5 minutes + + + +[mint_denom_value] +default_eur_ct_10 = EUR:0.10 +default_eur_5 = EUR:5 +default_eur_10 = EUR:10 +default_eur_1000 = EUR:1000 + + + +[mint_denom_duration_withdraw] +default_eur_ct_10 = 7 days +default_eur_5 = 7 days +default_eur_10 = 7 days +default_eur_1000 = 1 day + + + +[mint_denom_duration_spend] +default_eur_ct_10 = 30 days +default_eur_5 = 30 days +default_eur_10 = 30 days +default_eur_1000 = 30 day + + + +[mint_denom_fee_withdraw] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + +[mint_denom_fee_deposit] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_fee_refresh] +default_eur_ct_10 = EUR:0.01 +default_eur_5 = EUR:0.01 +default_eur_10 = EUR:0.01 +default_eur_1000 = EUR:0.01 + + + +[mint_denom_kappa] +default_eur_ct_10 = 3 +default_eur_5 = 3 +default_eur_10 = 3 +default_eur_1000 = 5 + diff --git a/src/util/Makefile.am b/src/util/Makefile.am new file mode 100644 index 00000000..f935802a --- /dev/null +++ b/src/util/Makefile.am @@ -0,0 +1,39 @@ +AM_CPPFLAGS = -I$(top_srcdir)/src/include $(LIBGCRYPT_CFLAGS) $(POSTGRESQL_CPPFLAGS) + +lib_LTLIBRARIES = \ + libtalerutil.la + +libtalerutil_la_SOURCES = \ + util.c \ + json.c \ + db.c \ + microhttpd.c \ + rsa.c + +libtalerutil_la_LIBADD = \ + -lgnunetutil \ + $(LIBGCRYPT_LIBS) \ + -ljansson \ + -lmicrohttpd \ + -lpq + +libtalerutil_la_LDFLAGS = \ + $(POSTGRESQL_LDFLAGS) \ + -version-info 0:0:0 \ + -export-dynamic -no-undefined + +check_PROGRAMS = \ + test-hash-context \ + test-rsa + +TESTS = \ + $(check_PROGRAMS) + +test_hash_context_SOURCES = test_hash_context.c +test_hash_context_CPPFLAGS = $(AM_CPPFLAGS) $(LIBGCRYPT_CFLAGS) +test_hash_context_LDADD = libtalerutil.la \ + -lgnunetutil $(LIBGCRYPT_LIBS) + +test_rsa_SOURCES = test_rsa.c +test_rsa_LDADD = libtalerutil.la \ + -lgnunetutil $(LIBGCRYPT_LIBS) diff --git a/src/util/db.c b/src/util/db.c new file mode 100644 index 00000000..a0b234a0 --- /dev/null +++ b/src/util/db.c @@ -0,0 +1,196 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + + +/** + * @file util/db.c + * @brief helper functions for DB interactions + * @author Sree Harsha Totakura + * @author Florian Dold + */ + +#include "platform.h" +#include +#include "taler_db_lib.h" + + +/** + * Execute a prepared statement. + */ +PGresult * +TALER_DB_exec_prepared (PGconn *db_conn, + const char *name, + const struct TALER_DB_QueryParam *params) +{ + unsigned len; + unsigned i; + + /* count the number of parameters */ + + { + const struct TALER_DB_QueryParam *x; + for (len = 0, x = params; + x->more; + len +=1, x += 1); + } + + /* new scope to allow stack allocation without alloca */ + + { + void *param_values[len]; + int param_lengths[len]; + int param_formats[len]; + + for (i = 0; i < len; i += 1) + { + param_values[i] = (void *) params[i].data; + param_lengths[i] = params[i].size; + param_formats[i] = 1; + } + return PQexecPrepared (db_conn, name, len, + (const char **) param_values, param_lengths, param_formats, 1); + } +} + + +/** + * Extract results from a query result according to the given specification. + * If colums are NULL, the destination is not modified, and GNUNET_NO + * is returned. + * + * @return + * GNUNET_YES if all results could be extracted + * GNUNET_NO if at least one result was NULL + * GNUNET_SYSERR if a result was invalid (non-existing field) + */ +int +TALER_DB_extract_result (PGresult *result, + struct TALER_DB_ResultSpec *rs, + int row) +{ + int had_null = GNUNET_NO; + + for (; NULL != rs->fname; rs += 1) + { + int fnum; + fnum = PQfnumber (result, rs->fname); + if (fnum < 0) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "field '%s' does not exist in result\n", rs->fname); + return GNUNET_SYSERR; + } + + /* if a field is null, continue but + * remember that we now return a different result */ + + if (PQgetisnull (result, row, fnum)) + { + had_null = GNUNET_YES; + continue; + } + const char *res; + if (rs->dst_size != PQgetlength (result, row, fnum)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "field '%s' has wrong size (got %u, expected %u)\n", + rs->fname, (int) PQgetlength (result, row, fnum), (int) rs->dst_size); + return GNUNET_SYSERR; + } + res = PQgetvalue (result, row, fnum); + GNUNET_assert (NULL != res); + memcpy (rs->dst, res, rs->dst_size); + } + if (GNUNET_YES == had_null) + return GNUNET_NO; + return GNUNET_YES; +} + + +int +TALER_DB_field_isnull (PGresult *result, + int row, + const char *fname) +{ + int fnum; + fnum = PQfnumber (result, fname); + GNUNET_assert (fnum >= 0); + if (PQgetisnull (result, row, fnum)) + return GNUNET_YES; + return GNUNET_NO; +} + + +int +TALER_DB_extract_amount_nbo (PGresult *result, + int row, + const char *val_name, + const char *frac_name, + const char *curr_name, + struct TALER_AmountNBO *r_amount_nbo) +{ + int val_num; + int frac_num; + int curr_num; + int len; + + GNUNET_assert (NULL != strstr (val_name, "_val")); + GNUNET_assert (NULL != strstr (frac_name, "_frac")); + GNUNET_assert (NULL != strstr (curr_name, "_curr")); + + val_num = PQfnumber (result, val_name); + GNUNET_assert (val_num >= 0); + frac_num = PQfnumber (result, frac_name); + GNUNET_assert (frac_num >= 0); + curr_num = PQfnumber (result, curr_name); + GNUNET_assert (curr_num >= 0); + + r_amount_nbo->value = *(uint32_t *) PQgetvalue (result, row, val_num); + r_amount_nbo->fraction = *(uint32_t *) PQgetvalue (result, row, frac_num); + memset (r_amount_nbo->currency, 0, TALER_CURRENCY_LEN); + // FIXME: overflow? + len = PQgetlength (result, row, curr_num); + len = GNUNET_MIN (TALER_CURRENCY_LEN, len); + memcpy (r_amount_nbo->currency, PQgetvalue (result, row, curr_num), len); + r_amount_nbo->currency[TALER_CURRENCY_LEN - 1] = '\0'; + + return GNUNET_OK; +} + + +int +TALER_DB_extract_amount (PGresult *result, + int row, + const char *val_name, + const char *frac_name, + const char *curr_name, + struct TALER_Amount *r_amount) +{ + struct TALER_AmountNBO amount_nbo; + + (void) + TALER_DB_extract_amount_nbo (result, + row, + val_name, + frac_name, + curr_name, + &amount_nbo); + r_amount->value = ntohl (amount_nbo.value); + r_amount->fraction = ntohl (amount_nbo.fraction); + (void) strncpy (r_amount->currency, amount_nbo.currency, TALER_CURRENCY_LEN); + + return GNUNET_OK; +} + +/* end of util/db.c */ diff --git a/src/util/json.c b/src/util/json.c new file mode 100644 index 00000000..269e6cf2 --- /dev/null +++ b/src/util/json.c @@ -0,0 +1,194 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file util/json.c + * @brief helper functions for JSON processing using libjansson + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include +#include "taler_util.h" +#include "taler_json_lib.h" + +/** + * Shorthand for exit jumps. + */ +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + +/** + * Print JSON parsing related error information + */ +#define WARN_JSON(error) \ + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, \ + "JSON parsing failed at %s:%u: %s (%s)", \ + __FILE__, __LINE__, error.text, error.source) + +/** + * Shorthand for JSON parsing related exit jumps. + */ +#define UNPACK_EXITIF(cond) \ + do { \ + if (cond) { WARN_JSON(error); goto EXITIF_exit; } \ + } while (0) + +/** + * Convert a TALER amount to a JSON + * object. + * + * @param amount the amount + * @return a json object describing the amount + */ +json_t * +TALER_JSON_from_amount (struct TALER_Amount amount) +{ + json_t *j; + j = json_pack ("{s: s, s:I, s:I}", + "currency", amount.currency, + "value", (json_int_t) amount.value, + "fraction", (json_int_t) amount.fraction); + GNUNET_assert (NULL != j); + return j; +} + + +/** + * Convert absolute timestamp to a json string. + * + * @param the time stamp + * @return a json string with the timestamp in @a stamp + */ +json_t * +TALER_JSON_from_abs (struct GNUNET_TIME_Absolute stamp) +{ + json_t *j; + char *mystr; + int ret; + ret = GNUNET_asprintf (&mystr, "%llu", + (long long) (stamp.abs_value_us / (1000 * 1000))); + GNUNET_assert (ret > 0); + j = json_string (mystr); + GNUNET_free (mystr); + return j; +} + + + +/** + * Convert binary data to a JSON string + * with the base32crockford encoding. + * + * @param data binary data + * @param size size of @a data in bytes + * @return json string that encodes @a data + */ +json_t * +TALER_JSON_from_data (const void *data, size_t size) +{ + char *buf; + json_t *json; + buf = TALER_data_to_string_alloc (data, size); + json = json_string (buf); + GNUNET_free (buf); + return json; +} + + +/** + * Parse given JSON object to Amount + * + * @param json the json object representing Amount + * @param r_amount where the amount has to be written + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_amount (json_t *json, + struct TALER_Amount *r_amount) +{ + char *currency; + json_int_t value; + json_int_t fraction; + json_error_t error; + + UNPACK_EXITIF (0 != json_unpack_ex (json, &error, JSON_STRICT, + "{s:s, s:I, s:I}", + "curreny", ¤cy, + "value", &value, + "fraction", &fraction)); + EXITIF (3 < strlen (currency)); + r_amount->value = (uint32_t) value; + r_amount->fraction = (uint32_t) fraction; + return GNUNET_OK; + + EXITIF_exit: + return GNUNET_SYSERR; +} + + +/** + * Parse given JSON object to Amount + * + * @param json the json object representing Amount + * @param r_amount where the amount has to be written + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_abs (json_t *json, + struct GNUNET_TIME_Absolute *abs) +{ + const char *str; + unsigned long long abs_value_s; + + GNUNET_assert (NULL != abs); + EXITIF (NULL == (str = json_string_value (json))); + EXITIF (1 > sscanf (str, "%llu", &abs_value_s)); + abs->abs_value_us = abs_value_s * 1000 * 1000; + return GNUNET_OK; + + EXITIF_exit: + return GNUNET_SYSERR; +} + +/** + * Parse given JSON object to data + * + * @param json the json object representing data + * @param out the pointer to hold the parsed data. + * @param out_size the size of r_data. + * @return GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error + */ +int +TALER_JSON_to_data (json_t *json, + void *out, + size_t out_size) +{ + const char *enc; + unsigned int len; + + EXITIF (NULL == (enc = json_string_value (json))); + len = strlen (enc); + EXITIF ((((len * 5) / 8) + ((((len * 5) % 8) == 0) ? 0 : 1)) == out_size); + EXITIF (GNUNET_OK != GNUNET_STRINGS_string_to_data (enc, len, out, out_size)); + return GNUNET_OK; + EXITIF_exit: + return GNUNET_SYSERR; +} + +/* End of util/json.c */ diff --git a/src/util/microhttpd.c b/src/util/microhttpd.c new file mode 100644 index 00000000..f3bea74f --- /dev/null +++ b/src/util/microhttpd.c @@ -0,0 +1,417 @@ +#include "platform.h" +#include +#include "taler_microhttpd_lib.h" + + + +/** + * Initial size for POST + * request buffer. + */ +#define REQUEST_BUFFER_INITIAL 1024 + +/** + * Maximum POST request size + */ +#define REQUEST_BUFFER_MAX (1024*1024) + + +/** + * Buffer for POST requests. + */ +struct Buffer +{ + /** + * Allocated memory + */ + char *data; + + /** + * Number of valid bytes in buffer. + */ + size_t fill; + + /** + * Number of allocated bytes in buffer. + */ + size_t alloc; +}; + + +/** + * Initialize a buffer. + * + * @param buf the buffer to initialize + * @param data the initial data + * @param data_size size of the initial data + * @param alloc_size size of the buffer + * @param max_size maximum size that the buffer can grow to + * @return a GNUnet result code + */ +static int +buffer_init (struct Buffer *buf, const void *data, size_t data_size, size_t alloc_size, size_t max_size) +{ + if (data_size > max_size || alloc_size > max_size) + return GNUNET_SYSERR; + if (data_size > alloc_size) + alloc_size = data_size; + buf->data = GNUNET_malloc (alloc_size); + memcpy (buf->data, data, data_size); + return GNUNET_OK; +} + + +/** + * Free the data in a buffer. Does *not* free + * the buffer object itself. + * + * @param buf buffer to de-initialize + */ +static void +buffer_deinit (struct Buffer *buf) +{ + GNUNET_free (buf->data); + buf->data = NULL; +} + + +/** + * Append data to a buffer, growing the buffer if necessary. + * + * @param buf the buffer to append to + * @param data the data to append + * @param size the size of @a data + * @param max_size maximum size that the buffer can grow to + * @return GNUNET_OK on success, + * GNUNET_NO if the buffer can't accomodate for the new data + * GNUNET_SYSERR on fatal error (out of memory?) + */ +static int +buffer_append (struct Buffer *buf, const void *data, size_t data_size, size_t max_size) +{ + if (buf->fill + data_size > max_size) + return GNUNET_NO; + if (data_size + buf->fill > buf->alloc) + { + char *new_buf; + size_t new_size = buf->alloc; + while (new_size < buf->fill + data_size) + new_size += 2; + if (new_size > max_size) + return GNUNET_NO; + new_buf = GNUNET_malloc (new_size); + memcpy (new_buf, buf->data, buf->fill); + buf->data = new_buf; + buf->alloc = new_size; + } + memcpy (buf->data + buf->fill, data, data_size); + buf->fill += data_size; + return GNUNET_OK; +} + + +/** + * Send JSON object as response. Decreases the reference count of the + * JSON object. + * + * @param connection the MHD connection + * @param json the json object + * @param status_code the http status code + * @return MHD result code + */ +int +send_response_json (struct MHD_Connection *connection, + json_t *json, + unsigned int status_code) +{ + struct MHD_Response *resp; + char *json_str; + + json_str = json_dumps (json, JSON_INDENT(2)); + json_decref (json); + resp = MHD_create_response_from_buffer (strlen (json_str), json_str, + MHD_RESPMEM_MUST_FREE); + if (NULL == resp) + return MHD_NO; + return MHD_queue_response (connection, status_code, resp); +} + + +/** + * Send a JSON object via an MHD connection, + * specified with the JANSSON pack syntax (see json_pack). + * + * @param connection connection to send the JSON over + * @param http_code HTTP status for the response + * @param fmt format string for pack + * @param ... varargs + * @return MHD_YES on success or MHD_NO on error + */ +int +request_send_json_pack (struct MHD_Connection *connection, + unsigned int http_code, + const char *fmt, ...) +{ + json_t *msg; + va_list argp; + int ret; + + va_start(argp, fmt); + msg = json_vpack_ex (NULL, 0, fmt, argp); + va_end(argp); + if (NULL == msg) + return MHD_NO; + ret = send_response_json (connection, msg, http_code); + json_decref (msg); + return ret; +} + + +/** + * Process a POST request containing a JSON object. + * + * @param connection the MHD connection + * @param con_cs the closure (contains a 'struct Buffer *') + * @param upload_data the POST data + * @param upload_data_size the POST data size + * @param json the JSON object for a completed request + * + * @returns + * GNUNET_YES if json object was parsed + * GNUNET_NO is request incomplete or invalid + * GNUNET_SYSERR on internal error + */ +int +process_post_json (struct MHD_Connection *connection, + void **con_cls, + const char *upload_data, + size_t *upload_data_size, + json_t **json) +{ + struct Buffer *r = *con_cls; + + if (NULL == *con_cls) + { + /* We are seeing a fresh POST request. */ + + r = GNUNET_new (struct Buffer); + if (GNUNET_OK != buffer_init (r, upload_data, *upload_data_size, + REQUEST_BUFFER_INITIAL, REQUEST_BUFFER_MAX)) + { + *con_cls = NULL; + buffer_deinit (r); + GNUNET_free (r); + return GNUNET_SYSERR; + } + *upload_data_size = 0; + *con_cls = r; + return GNUNET_NO; + } + if (0 != *upload_data_size) + { + /* We are seeing an old request with more data available. */ + + if (GNUNET_OK != buffer_append (r, upload_data, *upload_data_size, + REQUEST_BUFFER_MAX)) + { + /* Request too long or we're out of memory. */ + + *con_cls = NULL; + buffer_deinit (r); + GNUNET_free (r); + return GNUNET_SYSERR; + } + *upload_data_size = 0; + return GNUNET_NO; + } + + /* We have seen the whole request. */ + + *json = json_loadb (r->data, r->fill, 0, NULL); + buffer_deinit (r); + GNUNET_free (r); + if (NULL == *json) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Can't parse JSON request body\n"); + return request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + GNUNET_NO, GNUNET_SYSERR, + "{s:s}", + "error", "invalid json"); + } + *con_cls = NULL; + + return GNUNET_YES; +} + + +/** + * Navigate through a JSON tree. + * + * Sends an error response if navigation is impossible (i.e. + * the JSON object is invalid) + * + * @param connection the connection to send an error response to + * @param root the JSON node to start the navigation at. + * @param ... navigation specification (see JNAV_*) + * @return GNUNET_YES if navigation was successful + * GNUNET_NO if json is malformed, error response was generated + * GNUNET_SYSERR on internal error + */ +int +request_json_require_nav (struct MHD_Connection *connection, + const json_t *root, ...) +{ + va_list argp; + int ignore = GNUNET_NO; + // what's our current path from 'root'? + json_t *path; + + path = json_array (); + + va_start(argp, root); + + while (1) + { + int command = va_arg(argp, int); + switch (command) + { + case JNAV_FIELD: + { + const char *fname = va_arg(argp, const char *); + if (GNUNET_YES == ignore) + break; + json_array_append_new (path, json_string (fname)); + root = json_object_get (root, fname); + if (NULL == root) + { + + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s,s:o}", + "error", "missing field in JSON", + "path", path); + ignore = GNUNET_YES; + break; + } + } + break; + case JNAV_INDEX: + { + int fnum = va_arg(argp, int); + if (GNUNET_YES == ignore) + break; + json_array_append_new (path, json_integer (fnum)); + root = json_array_get (root, fnum); + if (NULL == root) + { + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s, s:o}", + "error", "missing index in JSON", + "path", path); + ignore = GNUNET_YES; + break; + } + } + break; + case JNAV_RET_DATA: + { + void *where = va_arg (argp, void *); + size_t len = va_arg (argp, size_t); + const char *str; + int res; + + va_end(argp); + if (GNUNET_YES == ignore) + return GNUNET_NO; + str = json_string_value (root); + if (NULL == str) + { + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s, s:o}", + "error", "string expected", + "path", path); + return GNUNET_NO; + } + res = GNUNET_STRINGS_string_to_data (str, strlen (str), + where, len); + if (GNUNET_OK != res) + { + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s,s:o}", + "error", "malformed binary data in JSON", + "path", path); + return GNUNET_NO; + } + return GNUNET_YES; + } + break; + case JNAV_RET_DATA_VAR: + { + void **where = va_arg (argp, void **); + size_t *len = va_arg (argp, size_t *); + const char *str; + + va_end(argp); + if (GNUNET_YES == ignore) + return GNUNET_NO; + str = json_string_value (root); + if (NULL == str) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + *len = (strlen (str) * 5) / 8; + if (where != NULL) + { + int res; + *where = GNUNET_malloc (*len); + res = GNUNET_STRINGS_string_to_data (str, strlen (str), + *where, *len); + if (GNUNET_OK != res) + { + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s, s:o}", + "error", "malformed binary data in JSON", + "path", path); + return GNUNET_NO; + } + } + return GNUNET_OK; + } + break; + case JNAV_RET_TYPED_JSON: + { + int typ = va_arg (argp, int); + const json_t **r_json = va_arg (argp, const json_t **); + + va_end(argp); + if (GNUNET_YES == ignore) + return GNUNET_NO; + if (typ != -1 && json_typeof (root) != typ) + { + (void) request_send_json_pack (connection, MHD_HTTP_BAD_REQUEST, + 0, 0, + "{s:s, s:i, s:i s:o}", + "error", "wrong JSON field type", + "type_expected", typ, + "type_actual", json_typeof (root), + "path", path); + return GNUNET_NO; + } + *r_json = root; + return GNUNET_OK; + } + break; + default: + GNUNET_assert (0); + } + } + GNUNET_assert (0); +} + + + diff --git a/src/util/misc.supp b/src/util/misc.supp new file mode 100644 index 00000000..afcac612 --- /dev/null +++ b/src/util/misc.supp @@ -0,0 +1,28 @@ +{ + + Memcheck:Leak + match-leak-kinds:reachable + ... + fun:GNUNET_CRYPTO_random_init + fun:call_init.part.0 + ... +} + +{ + + Memcheck:Leak + match-leak-kinds:reachable + ... + fun:point_from_keyparam + fun:_gcry_mpi_ec_new + ... +} + +{ + + Memcheck:Leak + match-leak-kinds:reachable + ... + fun:GNUNET_log_setup + ... +} \ No newline at end of file diff --git a/src/util/rsa.c b/src/util/rsa.c new file mode 100644 index 00000000..cde56be9 --- /dev/null +++ b/src/util/rsa.c @@ -0,0 +1,925 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file util/rsa.c + * @brief RSA key management utilities. Most of the code here is taken from + * gnunet-0.9.5a + * @author Sree Harsha Totakura + * + * Authors of the gnunet code: + * Christian Grothoff + * Krista Bennett + * Gerd Knorr + * Ioana Patrascu + * Tzvetan Horozov + */ + +#include "platform.h" +#include "gcrypt.h" +#include "gnunet/gnunet_util_lib.h" +#include "taler_rsa.h" + + + +#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) + +#define LOG_STRERROR(kind,syscall) GNUNET_log_from_strerror (kind, "util", syscall) + +#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util", syscall, filename) + +/** + * Log an error message at log-level 'level' that indicates + * a failure of the command 'cmd' with the message given + * by gcry_strerror(rc). + */ +#define LOG_GCRY(level, cmd, rc) do { LOG(level, _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, gcry_strerror(rc)); } while(0) + +/** + * Shorthand to cleanup non null mpi data types + */ +#define mpi_release_non_null(mpi) \ + if (NULL != mpi) gcry_mpi_release (mpi); + +/** + * The private information of an RSA key pair. + * NOTE: this must match the definition in crypto_ksk.c and gnunet-rsa.c! + */ +struct TALER_RSA_PrivateKey +{ + /** + * Libgcrypt S-expression for the ECC key. + */ + gcry_sexp_t sexp; +}; + + +/** + * Extract values from an S-expression. + * + * @param array where to store the result(s) + * @param sexp S-expression to parse + * @param topname top-level name in the S-expression that is of interest + * @param elems names of the elements to extract + * @return 0 on success + */ +static int +key_from_sexp (gcry_mpi_t * array, gcry_sexp_t sexp, const char *topname, + const char *elems) +{ + gcry_sexp_t list; + gcry_sexp_t l2; + const char *s; + unsigned int i; + unsigned int idx; + + if (! (list = gcry_sexp_find_token (sexp, topname, 0))) + return 1; + l2 = gcry_sexp_cadr (list); + gcry_sexp_release (list); + list = l2; + if (! list) + return 2; + idx = 0; + for (s = elems; *s; s++, idx++) + { + if (! (l2 = gcry_sexp_find_token (list, s, 1))) + { + for (i = 0; i < idx; i++) + { + gcry_free (array[i]); + array[i] = NULL; + } + gcry_sexp_release (list); + return 3; /* required parameter not found */ + } + array[idx] = gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_USG); + gcry_sexp_release (l2); + if (! array[idx]) + { + for (i = 0; i < idx; i++) + { + gcry_free (array[i]); + array[i] = NULL; + } + gcry_sexp_release (list); + return 4; /* required parameter is invalid */ + } + } + gcry_sexp_release (list); + return 0; +} + +/** + * If target != size, move target bytes to the + * end of the size-sized buffer and zero out the + * first target-size bytes. + * + * @param buf original buffer + * @param size number of bytes in the buffer + * @param target target size of the buffer + */ +static void +adjust (unsigned char *buf, size_t size, size_t target) +{ + if (size < target) + { + memmove (&buf[target - size], buf, size); + memset (buf, 0, target - size); + } +} + + +/** + * Create a new private key. Caller must free return value. + * + * @return fresh private key + */ +struct TALER_RSA_PrivateKey * +TALER_RSA_key_create () +{ + struct TALER_RSA_PrivateKey *ret; + gcry_sexp_t s_key; + gcry_sexp_t s_keyparam; + + GNUNET_assert (0 == + gcry_sexp_build (&s_keyparam, NULL, + "(genkey(rsa(nbits %d)(rsa-use-e 3:257)))", + 2048)); + GNUNET_assert (0 == gcry_pk_genkey (&s_key, s_keyparam)); + gcry_sexp_release (s_keyparam); +#if EXTRA_CHECKS + GNUNET_assert (0 == gcry_pk_testkey (s_key)); +#endif + ret = GNUNET_malloc (sizeof (struct TALER_RSA_PrivateKey)); + ret->sexp = s_key; + return ret; +} + + +/** + * Free memory occupied by the private key. + * + * @param key pointer to the memory to free + */ +void +TALER_RSA_key_free (struct TALER_RSA_PrivateKey *key) +{ + gcry_sexp_release (key->sexp); + GNUNET_free (key); +} + + +/** + * Encode the private key in a format suitable for + * storing it into a file. + * @return encoding of the private key + */ +struct TALER_RSA_PrivateKeyBinaryEncoded * +TALER_RSA_encode_key (const struct TALER_RSA_PrivateKey *hostkey) +{ + struct TALER_RSA_PrivateKeyBinaryEncoded *retval; + gcry_mpi_t pkv[6]; + void *pbu[6]; + size_t sizes[6]; + int rc; + int i; + int size; + +#if EXTRA_CHECKS + if (gcry_pk_testkey (hostkey->sexp)) + { + GNUNET_break (0); + return NULL; + } +#endif + + memset (pkv, 0, sizeof (gcry_mpi_t) * 6); + rc = key_from_sexp (pkv, hostkey->sexp, "private-key", "nedpqu"); + if (rc) + rc = key_from_sexp (pkv, hostkey->sexp, "rsa", "nedpqu"); + if (rc) + rc = key_from_sexp (pkv, hostkey->sexp, "private-key", "nedpq"); + if (rc) + rc = key_from_sexp (pkv, hostkey->sexp, "rsa", "nedpq"); + if (rc) + rc = key_from_sexp (pkv, hostkey->sexp, "private-key", "ned"); + if (rc) + rc = key_from_sexp (pkv, hostkey->sexp, "rsa", "ned"); + GNUNET_assert (0 == rc); + size = sizeof (struct TALER_RSA_PrivateKeyBinaryEncoded); + for (i = 0; i < 6; i++) + { + if (NULL != pkv[i]) + { + GNUNET_assert (0 == + gcry_mpi_aprint (GCRYMPI_FMT_USG, + (unsigned char **) &pbu[i], &sizes[i], + pkv[i])); + size += sizes[i]; + } + else + { + pbu[i] = NULL; + sizes[i] = 0; + } + } + GNUNET_assert (size < 65536); + retval = GNUNET_malloc (size); + retval->len = htons (size); + i = 0; + retval->sizen = htons (sizes[0]); + memcpy (&((char *) (&retval[1]))[i], pbu[0], sizes[0]); + i += sizes[0]; + retval->sizee = htons (sizes[1]); + memcpy (&((char *) (&retval[1]))[i], pbu[1], sizes[1]); + i += sizes[1]; + retval->sized = htons (sizes[2]); + memcpy (&((char *) (&retval[1]))[i], pbu[2], sizes[2]); + i += sizes[2]; + /* swap p and q! */ + retval->sizep = htons (sizes[4]); + memcpy (&((char *) (&retval[1]))[i], pbu[4], sizes[4]); + i += sizes[4]; + retval->sizeq = htons (sizes[3]); + memcpy (&((char *) (&retval[1]))[i], pbu[3], sizes[3]); + i += sizes[3]; + retval->sizedmp1 = htons (0); + retval->sizedmq1 = htons (0); + memcpy (&((char *) (&retval[1]))[i], pbu[5], sizes[5]); + for (i = 0; i < 6; i++) + { + if (pkv[i] != NULL) + gcry_mpi_release (pkv[i]); + if (pbu[i] != NULL) + free (pbu[i]); + } + return retval; +} + + +/** + * Extract the public key of the given private key. + * + * @param priv the private key + * @param pub where to write the public key + */ +void +TALER_RSA_key_get_public (const struct TALER_RSA_PrivateKey *priv, + struct TALER_RSA_PublicKeyBinaryEncoded *pub) +{ + gcry_mpi_t skey[2]; + size_t size; + int rc; + + rc = key_from_sexp (skey, priv->sexp, "public-key", "ne"); + if (0 != rc) + rc = key_from_sexp (skey, priv->sexp, "private-key", "ne"); + if (0 != rc) + rc = key_from_sexp (skey, priv->sexp, "rsa", "ne"); + GNUNET_assert (0 == rc); + pub->len = + htons (sizeof (struct TALER_RSA_PublicKeyBinaryEncoded) - + sizeof (pub->padding)); + pub->sizen = htons (TALER_RSA_DATA_ENCODING_LENGTH); + pub->padding = 0; + size = TALER_RSA_DATA_ENCODING_LENGTH; + GNUNET_assert (0 == + gcry_mpi_print (GCRYMPI_FMT_USG, &pub->key[0], size, &size, + skey[0])); + adjust (&pub->key[0], size, TALER_RSA_DATA_ENCODING_LENGTH); + size = TALER_RSA_KEY_LENGTH - TALER_RSA_DATA_ENCODING_LENGTH; + GNUNET_assert (0 == + gcry_mpi_print (GCRYMPI_FMT_USG, + &pub->key + [TALER_RSA_DATA_ENCODING_LENGTH], size, + &size, skey[1])); + adjust (&pub->key[TALER_RSA_DATA_ENCODING_LENGTH], size, + TALER_RSA_KEY_LENGTH - + TALER_RSA_DATA_ENCODING_LENGTH); + gcry_mpi_release (skey[0]); + gcry_mpi_release (skey[1]); +} + + +/** + * Decode the private key from the data-format back + * to the "normal", internal format. + * + * @param buf the buffer where the private key data is stored + * @param len the length of the data in 'buffer' + * @return NULL on error + */ +struct TALER_RSA_PrivateKey * +TALER_RSA_decode_key (const char *buf, uint16_t len) +{ + struct TALER_RSA_PrivateKey *ret; + const struct TALER_RSA_PrivateKeyBinaryEncoded *encoding = + (const struct TALER_RSA_PrivateKeyBinaryEncoded *) buf; + gcry_sexp_t res; + gcry_mpi_t n; + gcry_mpi_t e; + gcry_mpi_t d; + gcry_mpi_t p; + gcry_mpi_t q; + gcry_mpi_t u; + int rc; + size_t size; + size_t pos; + uint16_t enc_len; + size_t erroff; + + enc_len = ntohs (encoding->len); + if (len != enc_len) + return NULL; + + pos = 0; + size = ntohs (encoding->sizen); + rc = gcry_mpi_scan (&n, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + pos += ntohs (encoding->sizen); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + return NULL; + } + size = ntohs (encoding->sizee); + rc = gcry_mpi_scan (&e, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + pos += ntohs (encoding->sizee); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + return NULL; + } + size = ntohs (encoding->sized); + rc = gcry_mpi_scan (&d, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + pos += ntohs (encoding->sized); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + gcry_mpi_release (e); + return NULL; + } + /* swap p and q! */ + size = ntohs (encoding->sizep); + if (size > 0) + { + rc = gcry_mpi_scan (&q, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + pos += ntohs (encoding->sizep); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + gcry_mpi_release (e); + gcry_mpi_release (d); + return NULL; + } + } + else + q = NULL; + size = ntohs (encoding->sizeq); + if (size > 0) + { + rc = gcry_mpi_scan (&p, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + pos += ntohs (encoding->sizeq); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + gcry_mpi_release (e); + gcry_mpi_release (d); + if (NULL != q) + gcry_mpi_release (q); + return NULL; + } + } + else + p = NULL; + pos += ntohs (encoding->sizedmp1); + pos += ntohs (encoding->sizedmq1); + size = + ntohs (encoding->len) - sizeof (struct TALER_RSA_PrivateKeyBinaryEncoded) - pos; + if (size > 0) + { + rc = gcry_mpi_scan (&u, GCRYMPI_FMT_USG, + &((const unsigned char *) (&encoding[1]))[pos], size, + &size); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + gcry_mpi_release (e); + gcry_mpi_release (d); + if (NULL != p) + gcry_mpi_release (p); + if (NULL != q) + gcry_mpi_release (q); + return NULL; + } + } + else + u = NULL; + + if ((NULL != p) && (NULL != q) && (NULL != u)) + { + rc = gcry_sexp_build (&res, &erroff, + "(private-key(rsa(n %m)(e %m)(d %m)(p %m)(q %m)(u %m)))", + n, e, d, p, q, u); + } + else + { + if ((NULL != p) && (NULL != q)) + { + rc = gcry_sexp_build (&res, &erroff, + "(private-key(rsa(n %m)(e %m)(d %m)(p %m)(q %m)))", + n, e, d, p, q); + } + else + { + rc = gcry_sexp_build (&res, &erroff, + "(private-key(rsa(n %m)(e %m)(d %m)))", n, e, d); + } + } + gcry_mpi_release (n); + gcry_mpi_release (e); + gcry_mpi_release (d); + if (NULL != p) + gcry_mpi_release (p); + if (NULL != q) + gcry_mpi_release (q); + if (NULL != u) + gcry_mpi_release (u); + + if (0 != rc) + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_sexp_build", rc); + if (0 != (rc = gcry_pk_testkey (res))) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_pk_testkey", rc); + return NULL; + } + ret = GNUNET_malloc (sizeof (struct TALER_RSA_PrivateKey)); + ret->sexp = res; + return ret; +} + + +/** + * Convert a public key to a string. + * + * @param pub key to convert + * @return string representing 'pub' + */ +char * +TALER_RSA_public_key_to_string (const struct TALER_RSA_PublicKeyBinaryEncoded *pub) +{ + char *pubkeybuf; + size_t keylen = (sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)) * 8; + char *end; + + if (keylen % 5 > 0) + keylen += 5 - keylen % 5; + keylen /= 5; + pubkeybuf = GNUNET_malloc (keylen + 1); + end = GNUNET_STRINGS_data_to_string ((unsigned char *) pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded), + pubkeybuf, + keylen); + if (NULL == end) + { + GNUNET_free (pubkeybuf); + return NULL; + } + *end = '\0'; + return pubkeybuf; +} + + +/** + * Convert a string representing a public key to a public key. + * + * @param enc encoded public key + * @param enclen number of bytes in enc (without 0-terminator) + * @param pub where to store the public key + * @return GNUNET_OK on success + */ +int +TALER_RSA_public_key_from_string (const char *enc, + size_t enclen, + struct TALER_RSA_PublicKeyBinaryEncoded *pub) +{ + size_t keylen = (sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)) * 8; + + if (keylen % 5 > 0) + keylen += 5 - keylen % 5; + keylen /= 5; + if (enclen != keylen) + return GNUNET_SYSERR; + + if (GNUNET_OK != GNUNET_STRINGS_string_to_data (enc, enclen, + (unsigned char*) pub, + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded))) + return GNUNET_SYSERR; + if ( (ntohs (pub->len) != sizeof (struct TALER_RSA_PublicKeyBinaryEncoded)) || + (ntohs (pub->padding) != 0) || + (ntohs (pub->sizen) != TALER_RSA_DATA_ENCODING_LENGTH) ) + return GNUNET_SYSERR; + return GNUNET_OK; +} + + +/** + * Convert the data specified in the given purpose argument to an + * S-expression suitable for signature operations. + * + * @param ptr pointer to the data to convert + * @param size the size of the data + * @return converted s-expression + */ +static gcry_sexp_t +data_to_sexp (const void *ptr, size_t size) +{ + gcry_mpi_t value; + gcry_sexp_t data; + + value = NULL; + data = NULL; + GNUNET_assert (0 == gcry_mpi_scan (&value, GCRYMPI_FMT_USG, ptr, size, NULL)); + GNUNET_assert (0 == gcry_sexp_build (&data, NULL, "(data (flags raw) (value %M))", value)); + gcry_mpi_release (value); + return data; +} + + +/** + * Sign the given hash block. + * + * @param key private key to use for the signing + * @param hash the block containing the hash of the message to sign + * @param hash_size the size of the hash block + * @param sig where to write the signature + * @return GNUNET_SYSERR on error, GNUNET_OK on success + */ +int +TALER_RSA_sign (const struct TALER_RSA_PrivateKey *key, + const void *hash, + size_t hash_size, + struct TALER_RSA_Signature *sig) +{ + gcry_sexp_t result; + gcry_sexp_t data; + size_t ssize; + gcry_mpi_t rval; + + data = data_to_sexp (hash, hash_size); + GNUNET_assert (0 == gcry_pk_sign (&result, data, key->sexp)); + gcry_sexp_release (data); + GNUNET_assert (0 == key_from_sexp (&rval, result, "rsa", "s")); + gcry_sexp_release (result); + ssize = sizeof (struct TALER_RSA_Signature); + GNUNET_assert (0 == + gcry_mpi_print (GCRYMPI_FMT_USG, (unsigned char *) sig, ssize, + &ssize, rval)); + gcry_mpi_release (rval); + adjust (sig->sig, ssize, sizeof (struct TALER_RSA_Signature)); + return GNUNET_OK; +} + + +/** + * Convert the given public key from the network format to the + * S-expression that can be used by libgcrypt. + * + * @param publicKey public key to decode + * @return NULL on error + */ +static gcry_sexp_t +decode_public_key (const struct TALER_RSA_PublicKeyBinaryEncoded *publicKey) +{ + gcry_sexp_t result; + gcry_mpi_t n; + gcry_mpi_t e; + size_t size; + size_t erroff; + int rc; + + if ((ntohs (publicKey->sizen) != TALER_RSA_DATA_ENCODING_LENGTH) || + (ntohs (publicKey->len) != + sizeof (struct TALER_RSA_PublicKeyBinaryEncoded) - + sizeof (publicKey->padding))) + { + GNUNET_break (0); + return NULL; + } + size = TALER_RSA_DATA_ENCODING_LENGTH; + if (0 != (rc = gcry_mpi_scan (&n, GCRYMPI_FMT_USG, &publicKey->key[0], size, &size))) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + return NULL; + } + size = TALER_RSA_KEY_LENGTH - TALER_RSA_DATA_ENCODING_LENGTH; + if (0 != (rc = gcry_mpi_scan (&e, GCRYMPI_FMT_USG, + &publicKey->key[TALER_RSA_DATA_ENCODING_LENGTH], + size, &size))) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + gcry_mpi_release (n); + return NULL; + } + rc = gcry_sexp_build (&result, &erroff, "(public-key(rsa(n %m)(e %m)))", n, + e); + gcry_mpi_release (n); + gcry_mpi_release (e); + if (0 != rc) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_sexp_build", rc); /* erroff gives more info */ + return NULL; + } + return result; +} + + +/** + * Verify signature with the given hash. + * + * @param hash the hash code to verify against the signature + * @param sig signature that is being validated + * @param publicKey public key of the signer + * @returns GNUNET_OK if ok, GNUNET_SYSERR if invalid + */ +int +TALER_RSA_hash_verify (const struct GNUNET_HashCode *hash, + const struct TALER_RSA_Signature *sig, + const struct TALER_RSA_PublicKeyBinaryEncoded *publicKey) +{ + gcry_sexp_t data; + gcry_sexp_t sigdata; + size_t size; + gcry_mpi_t val; + gcry_sexp_t psexp; + size_t erroff; + int rc; + + size = sizeof (struct TALER_RSA_Signature); + GNUNET_assert (0 == + gcry_mpi_scan (&val, GCRYMPI_FMT_USG, + (const unsigned char *) sig, size, &size)); + GNUNET_assert (0 == + gcry_sexp_build (&sigdata, &erroff, "(sig-val(rsa(s %m)))", + val)); + gcry_mpi_release (val); + data = data_to_sexp (hash, sizeof (struct GNUNET_HashCode)); + if (! (psexp = decode_public_key (publicKey))) + { + gcry_sexp_release (data); + gcry_sexp_release (sigdata); + return GNUNET_SYSERR; + } + rc = gcry_pk_verify (sigdata, data, psexp); + gcry_sexp_release (psexp); + gcry_sexp_release (data); + gcry_sexp_release (sigdata); + if (rc) + { + LOG (GNUNET_ERROR_TYPE_WARNING, + _("RSA signature verification failed at %s:%d: %s\n"), __FILE__, + __LINE__, gcry_strerror (rc)); + return GNUNET_SYSERR; + } + return GNUNET_OK; +} + + +/** + * Verify signature on the given message + * + * @param msg the message + * @param size the size of the message + * @param sig signature that is being validated + * @param publicKey public key of the signer + * @returns GNUNET_OK if ok, GNUNET_SYSERR if invalid + */ +int +TALER_RSA_verify (const void *msg, size_t size, + const struct TALER_RSA_Signature *sig, + const struct TALER_RSA_PublicKeyBinaryEncoded *publicKey) +{ + struct GNUNET_HashCode hash; + + GNUNET_CRYPTO_hash (msg, size, &hash); + return TALER_RSA_hash_verify (&hash, sig, publicKey); +} + +/** + * The blinding key is equal in length to the RSA modulus + */ +#define TALER_RSA_BLINDING_KEY_LEN TALER_RSA_DATA_ENCODING_LENGTH + +struct TALER_RSA_BlindingKey +{ + /** + * The blinding factor + */ + gcry_mpi_t r; +}; + +struct TALER_RSA_BlindingKey * +TALER_RSA_blinding_key_create () +{ + struct TALER_RSA_BlindingKey *blind; + + blind = GNUNET_new (struct TALER_RSA_BlindingKey); + blind->r = gcry_mpi_new (TALER_RSA_BLINDING_KEY_LEN * 8); + gcry_mpi_randomize (blind->r, TALER_RSA_BLINDING_KEY_LEN * 8, GCRY_STRONG_RANDOM); + return blind; +} + + +void +TALER_RSA_blinding_key_destroy (struct TALER_RSA_BlindingKey *bkey) +{ + gcry_mpi_release (bkey->r); + GNUNET_free (bkey); +} + + +struct TALER_RSA_BlindedSignaturePurpose * +TALER_RSA_message_blind (const void *msg, size_t size, + struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_PublicKeyBinaryEncoded *pkey) +{ + struct TALER_RSA_BlindedSignaturePurpose *bsp; + struct GNUNET_HashCode hash; + gcry_sexp_t psexp; + gcry_mpi_t data; + gcry_mpi_t skey[2]; + gcry_mpi_t r_e; + gcry_mpi_t data_r_e; + size_t rsize; + gcry_error_t rc; + int ret; + + bsp = NULL; + psexp = NULL; + data = NULL; + skey[0] = skey[1] = NULL; + r_e = NULL; + data_r_e = NULL; + rsize = 0; + rc = 0; + ret = 0; + if (! (psexp = decode_public_key (pkey))) + return NULL; + ret = key_from_sexp (skey, psexp, "public-key", "ne"); + if (0 != ret) + ret = key_from_sexp (skey, psexp, "rsa", "ne"); + gcry_sexp_release (psexp); + psexp = NULL; + GNUNET_assert (0 == ret); + GNUNET_CRYPTO_hash (msg, size, &hash); + if (0 != (rc=gcry_mpi_scan (&data, GCRYMPI_FMT_USG, + (const unsigned char *) msg, size, &rsize))) + { + LOG_GCRY (GNUNET_ERROR_TYPE_WARNING, "gcry_mpi_scan", rc); + goto cleanup; + } + r_e = gcry_mpi_new (0); + gcry_mpi_powm (r_e, bkey->r, + skey[1], /* e */ + skey[0]); /* n */ + + data_r_e = gcry_mpi_new (0); + gcry_mpi_mulm (data_r_e, data, r_e, skey[0]); + + bsp = GNUNET_new (struct TALER_RSA_BlindedSignaturePurpose); + rc = gcry_mpi_print (GCRYMPI_FMT_USG, + (unsigned char *) bsp, + sizeof (struct TALER_RSA_BlindedSignaturePurpose), + &rsize, + data_r_e); + GNUNET_assert (0 == rc); + adjust ((unsigned char *) bsp, rsize, + sizeof (struct TALER_RSA_BlindedSignaturePurpose)); + + cleanup: + if (NULL != psexp) gcry_sexp_release (psexp); + mpi_release_non_null (skey[0]); + mpi_release_non_null (skey[1]); + mpi_release_non_null (data); + mpi_release_non_null (r_e); + mpi_release_non_null (data_r_e); + return bsp; +} + + +int +TALER_RSA_unblind (struct TALER_RSA_Signature *sig, + struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_PublicKeyBinaryEncoded *pkey) +{ + gcry_sexp_t psexp; + gcry_mpi_t skey; + gcry_mpi_t sigval; + gcry_mpi_t r_inv; + gcry_mpi_t ubsig; + size_t rsize; + gcry_error_t rc; + int ret; + + psexp = NULL; + skey = NULL; + sigval = NULL; + r_inv = NULL; + ubsig = NULL; + rsize = 0; + rc = 0; + ret = GNUNET_SYSERR; + if (! (psexp = decode_public_key (pkey))) + return GNUNET_SYSERR; + ret = key_from_sexp (&skey, psexp, "public-key", "n"); + if (0 != ret) + ret = key_from_sexp (&skey, psexp, "rsa", "n"); + gcry_sexp_release (psexp); + psexp = NULL; + if (0 != (rc = gcry_mpi_scan (&sigval, GCRYMPI_FMT_USG, + (const unsigned char *) sig, + sizeof (struct TALER_RSA_Signature), + &rsize))) + { + LOG_GCRY (GNUNET_ERROR_TYPE_ERROR, "gcry_mpi_scan", rc); + goto cleanup; + } + r_inv = gcry_mpi_new (0); + GNUNET_assert (1 == gcry_mpi_invm (r_inv, bkey->r, skey)); /* n: skey */ + ubsig = gcry_mpi_new (0); + gcry_mpi_mulm (ubsig, sigval, r_inv, skey); + rc = gcry_mpi_print (GCRYMPI_FMT_USG, + (unsigned char *) sig, + sizeof (struct TALER_RSA_Signature), + &rsize, + ubsig); + GNUNET_assert (0 == rc); + adjust ((unsigned char *) sig, rsize, sizeof (struct TALER_RSA_Signature)); + ret = GNUNET_OK; + + cleanup: + if (NULL != psexp) gcry_sexp_release (psexp); + mpi_release_non_null (skey); + mpi_release_non_null (sigval); + mpi_release_non_null (r_inv); + mpi_release_non_null (ubsig); + return ret; +} + + +/** + * Encode a blinding key + * + * @param bkey the blinding key to encode + * @param bkey_enc where to store the encoded binary key + * @return #GNUNET_OK upon successful encoding; #GNUNET_SYSERR upon failure + */ +int +TALER_RSA_blinding_key_encode (struct TALER_RSA_BlindingKey *bkey, + struct TALER_RSA_BlindingKeyBinaryEncoded *bkey_enc) +{ + GNUNET_abort (); /* FIXME: not implemented */ +} + + +/** + * Decode a blinding key from its encoded form + * + * @param bkey_enc the encoded blinding key + * @return the decoded blinding key; NULL upon error + */ +struct TALER_RSA_BlindingKey * +TALER_RSA_blinding_key_decode (struct TALER_RSA_BlindingKeyBinaryEncoded *bkey_enc) +{ + GNUNET_abort (); /* FIXME: not implemented */ +} + +/* end of util/rsa.c */ diff --git a/src/util/test_hash_context.c b/src/util/test_hash_context.c new file mode 100644 index 00000000..e5110f21 --- /dev/null +++ b/src/util/test_hash_context.c @@ -0,0 +1,48 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file util/test_hash_context.c + * @brief test case for incremental hashing + * @author Florian Dold + */ + +#include "platform.h" +#include "taler_util.h" +#include + +#define LEN 1234 + +int main() +{ + char data[1234]; + struct GNUNET_HashCode hc1; + struct GNUNET_HashCode hc2; + struct TALER_HashContext hctx; + + memset (data, 42, LEN); + + TALER_hash_context_start (&hctx); + TALER_hash_context_read (&hctx, data, LEN); + TALER_hash_context_finish (&hctx, &hc1); + + GNUNET_CRYPTO_hash (data, LEN, &hc2); + + if (0 == memcmp (&hc1, &hc2, sizeof (struct GNUNET_HashCode))) + return 0; + return 1; +} + diff --git a/src/util/test_rsa.c b/src/util/test_rsa.c new file mode 100644 index 00000000..ac3ae2cd --- /dev/null +++ b/src/util/test_rsa.c @@ -0,0 +1,112 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file util/test_rsa.c + * @brief testcase for utility functions for RSA cryptography + * @author Sree Harsha Totakura + */ +#include "platform.h" +#include "taler_rsa.h" +#include + +#define TEST_PURPOSE UINT32_MAX + + +#define EXITIF(cond) \ + do { \ + if (cond) { GNUNET_break (0); goto EXITIF_exit; } \ + } while (0) + +int +main (int argc, char *argv[]) +{ +#define RND_BLK_SIZE 4096 + unsigned char rnd_blk[RND_BLK_SIZE]; + struct TALER_RSA_PrivateKey *priv; + struct TALER_RSA_PrivateKeyBinaryEncoded *priv_enc; + struct TALER_RSA_PublicKeyBinaryEncoded pubkey; + struct TALER_RSA_BlindingKey *bkey; + struct TALER_RSA_BlindedSignaturePurpose *bsp; + struct TALER_RSA_Signature sig; + struct GNUNET_HashCode hash; + int ret; + + priv = NULL; + bsp = NULL; + bkey = NULL; + ret = 1; + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, rnd_blk, + RND_BLK_SIZE); + GNUNET_CRYPTO_hash (rnd_blk, RND_BLK_SIZE, &hash); + priv = TALER_RSA_key_create (); + GNUNET_assert (NULL != priv); + EXITIF (GNUNET_OK != TALER_RSA_sign (priv, + &hash, sizeof (hash), + &sig)); + TALER_RSA_key_get_public (priv, &pubkey); + EXITIF (NULL == (priv_enc = TALER_RSA_encode_key (priv))); + TALER_RSA_key_free (priv); + priv = NULL; + EXITIF (NULL == (priv = TALER_RSA_decode_key ((const char *) priv_enc, + ntohs (priv_enc->len)))); + GNUNET_free (priv_enc); + priv_enc = NULL; + EXITIF (GNUNET_OK != TALER_RSA_hash_verify (&hash, + &sig, + &pubkey)); + EXITIF (GNUNET_OK != TALER_RSA_verify (rnd_blk, + RND_BLK_SIZE, + &sig, + &pubkey)); + + /* test blind signing */ + GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, rnd_blk, + RND_BLK_SIZE); + GNUNET_CRYPTO_hash (rnd_blk, RND_BLK_SIZE, &hash); + (void) memset (&sig, 0, sizeof (struct TALER_RSA_Signature)); + EXITIF (NULL == (bkey = TALER_RSA_blinding_key_create ())); + EXITIF (NULL == (bsp = + TALER_RSA_message_blind (&hash, sizeof (hash), + bkey, &pubkey))); + EXITIF (GNUNET_OK != TALER_RSA_sign (priv, + bsp, + sizeof (struct TALER_RSA_BlindedSignaturePurpose), + &sig)); + EXITIF (GNUNET_OK != TALER_RSA_unblind (&sig, + bkey, + &pubkey)); + EXITIF (GNUNET_OK != TALER_RSA_hash_verify (&hash, + &sig, + &pubkey)); + ret = 0; /* all OK */ + + EXITIF_exit: + if (NULL != priv) + { + TALER_RSA_key_free (priv); + priv = NULL; + } + if (NULL != priv_enc) + { + GNUNET_free (priv_enc); + priv_enc = NULL; + } + if (NULL != bkey) + TALER_RSA_blinding_key_destroy (bkey); + GNUNET_free_non_null (bsp); + return ret; +} diff --git a/src/util/util.c b/src/util/util.c new file mode 100644 index 00000000..3677bcbd --- /dev/null +++ b/src/util/util.c @@ -0,0 +1,528 @@ +/* + This file is part of TALER + (C) 2014 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file util.c + * @brief Common utility functions + * @author Sree Harsha Totakura + * @author Florian Dold + * @author Benedikt Mueller + */ + +#include "platform.h" +#include "taler_util.h" +#include +#include +#include + +#define CURVE "Ed25519" + +#define AMOUNT_FRAC_BASE 1000000 +#define AMOUNT_FRAC_LEN 6 + + + +static void +fatal_error_handler (void *cls, int wtf, const char *msg) +{ + LOG_ERROR("Fatal error in Gcrypt: %s\n", msg); + abort(); +} + + +/** + * Initialize Gcrypt library. + */ +void +TALER_gcrypt_init() +{ + gcry_set_fatalerror_handler (&fatal_error_handler, NULL); + TALER_assert_as(gcry_check_version(NEED_LIBGCRYPT_VERSION), + "libgcrypt version mismatch"); + /* Disable secure memory. */ + gcry_control (GCRYCTL_DISABLE_SECMEM, 0); + gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); +} + + +/** + * Generate a ECC private key. + * + * @return the s-expression representing the generated ECC private key; NULL + * upon error + */ +gcry_sexp_t +TALER_genkey () +{ + gcry_sexp_t priv_sexp; + gcry_sexp_t s_keyparam; + int rc; + + if (0 != (rc = gcry_sexp_build (&s_keyparam, NULL, + "(genkey(ecc(curve \"" CURVE "\")" + "(flags eddsa)))"))) + { + LOG_GCRY_ERROR ("gcry_sexp_build", rc); + return NULL; + } + if (0 != (rc = gcry_pk_genkey (&priv_sexp, s_keyparam))) + { + LOG_GCRY_ERROR ("gcry_pk_genkey", rc); + gcry_sexp_release (s_keyparam); + return NULL; + } + gcry_sexp_release (s_keyparam); + if (0 != (rc = gcry_pk_testkey (priv_sexp))) + { + LOG_GCRY_ERROR("gcry_pk_testkey", rc); + gcry_sexp_release (priv_sexp); + return NULL; + } + return priv_sexp; +} + + +/** + * Parse money amount description, in the format "A:B.C". + * + * @param str amount description + * @param denom amount to write the result to + * @return GNUNET_OK if the string is a valid amount specification, + * GNUNET_SYSERR if it is invalid. + */ +int +TALER_string_to_amount (const char *str, struct TALER_Amount *denom) +{ + unsigned int i; // pos in str + int n; // number tmp + unsigned int c; // currency pos + uint32_t b; // base for suffix + + memset (denom, 0, sizeof (struct TALER_Amount)); + + i = n = c = 0; + + while (isspace(str[i])) + i++; + + if (0 == str[i]) + { + printf("null before currency\n"); + return GNUNET_SYSERR; + } + + while (str[i] != ':') + { + if (0 == str[i]) + { + printf("null before colon"); + return GNUNET_SYSERR; + } + if (c > 3) + { + printf("currency too long\n"); + return GNUNET_SYSERR; + } + denom->currency[c] = str[i]; + c++; + i++; + } + + // skip colon + i++; + + if (0 == str[i]) + { + printf("null before value\n"); + return GNUNET_SYSERR; + } + + while (str[i] != '.') + { + if (0 == str[i]) + { + return GNUNET_OK; + } + n = str[i] - '0'; + if (n < 0 || n > 9) + { + printf("invalid character '%c' before comma at %u\n", (char) n, i); + return GNUNET_SYSERR; + } + denom->value = (denom->value * 10) + n; + i++; + } + + // skip the dot + i++; + + if (0 == str[i]) + { + printf("null after dot"); + return GNUNET_SYSERR; + } + + b = 100000; + + while (0 != str[i]) + { + n = str[i] - '0'; + if (b == 0 || n < 0 || n > 9) + { + printf("error after comma"); + return GNUNET_SYSERR; + } + denom->fraction += n * b; + b /= 10; + i++; + } + + return GNUNET_OK; +} + + +/** + * FIXME + */ +struct TALER_AmountNBO +TALER_amount_hton (struct TALER_Amount d) +{ + struct TALER_AmountNBO dn; + dn.value = htonl (d.value); + dn.fraction = htonl (d.fraction); + memcpy (dn.currency, d.currency, TALER_CURRENCY_LEN); + + return dn; +} + + +/** + * FIXME + */ +struct TALER_Amount +TALER_amount_ntoh (struct TALER_AmountNBO dn) +{ + struct TALER_Amount d; + d.value = ntohl (dn.value); + d.fraction = ntohl (dn.fraction); + memcpy (d.currency, dn.currency, sizeof(dn.currency)); + + return d; +} + + +/** + * Compare the value/fraction of two amounts. Does not compare the currency, + * i.e. comparing amounts with the same value and fraction but different + * currency would return 0. + * + * @param a1 first amount + * @param a2 second amount + * @return result of the comparison + */ +int +TALER_amount_cmp (struct TALER_Amount a1, struct TALER_Amount a2) +{ + a1 = TALER_amount_normalize (a1); + a2 = TALER_amount_normalize (a2); + if (a1.value == a2.value) + { + if (a1.fraction < a2.fraction) + return -1; + if (a1.fraction > a2.fraction) + return 1; + return 0; + } + if (a1.value < a2.value) + return -1; + return 1; +} + + +/** + * Perform saturating subtraction of amounts. + * + * @param a1 amount to subtract from + * @param a2 amount to subtract + * @return (a1-a2) or 0 if a2>=a1 + */ +struct TALER_Amount +TALER_amount_subtract (struct TALER_Amount a1, struct TALER_Amount a2) +{ + a1 = TALER_amount_normalize (a1); + a2 = TALER_amount_normalize (a2); + + if (a1.value < a2.value) + { + a1.value = 0; + a1.fraction = 0; + return a1; + } + + if (a1.fraction < a2.fraction) + { + if (0 == a1.value) + { + a1.fraction = 0; + return a1; + } + a1.fraction += AMOUNT_FRAC_BASE; + a1.value -= 1; + } + + a1.fraction -= a2.fraction; + a1.value -= a2.value; + + return a1; +} + + +/** + * Perform saturating addition of amounts. + * + * @param a1 first amount to add + * @param a2 second amount to add + * @return sum of a1 and a2 + */ +struct TALER_Amount +TALER_amount_add (struct TALER_Amount a1, struct TALER_Amount a2) +{ + a1 = TALER_amount_normalize (a1); + a2 = TALER_amount_normalize (a2); + + a1.value += a2.value; + a1.fraction += a2.fraction; + + if (0 == a1.currency[0]) + { + memcpy (a2.currency, a1.currency, TALER_CURRENCY_LEN); + } + + if (0 == a2.currency[0]) + { + memcpy (a1.currency, a2.currency, TALER_CURRENCY_LEN); + } + + if (0 != a1.currency[0] && 0 != memcmp (a1.currency, a2.currency, TALER_CURRENCY_LEN)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "adding mismatching currencies\n"); + } + + if (a1.value < a2.value) + { + a1.value = UINT32_MAX; + a2.value = UINT32_MAX; + return a1; + } + + return TALER_amount_normalize (a1); +} + + +/** + * Normalize the given amount. + * + * @param amout amount to normalize + * @return normalized amount + */ +struct TALER_Amount +TALER_amount_normalize (struct TALER_Amount amount) +{ + while (amount.value != UINT32_MAX && amount.fraction >= AMOUNT_FRAC_BASE) + { + amount.fraction -= AMOUNT_FRAC_BASE; + amount.value += 1; + } + return amount; +} + + +/** + * Convert amount to string. + * + * @param amount amount to convert to string + * @return freshly allocated string representation + */ +char * +TALER_amount_to_string (struct TALER_Amount amount) +{ + char tail[AMOUNT_FRAC_LEN + 1] = { 0 }; + char curr[TALER_CURRENCY_LEN + 1] = { 0 }; + char *result = NULL; + int len; + + memcpy (curr, amount.currency, TALER_CURRENCY_LEN); + + amount = TALER_amount_normalize (amount); + if (0 != amount.fraction) + { + unsigned int i; + uint32_t n = amount.fraction; + for (i = 0; (i < AMOUNT_FRAC_LEN) && (n != 0); i++) + { + tail[i] = '0' + (n / (AMOUNT_FRAC_BASE / 10)); + n = (n * 10) % (AMOUNT_FRAC_BASE); + } + tail[i] = 0; + len = GNUNET_asprintf (&result, "%s:%lu.%s", curr, (unsigned long) amount.value, tail); + } + else + { + len = GNUNET_asprintf (&result, "%s:%lu", curr, (unsigned long) amount.value); + } + GNUNET_assert (len > 0); + return result; +} + + + +/** + * Return the base32crockford encoding of the given buffer. + * + * The returned string will be freshly allocated, and must be free'd + * with GNUNET_free. + * + * @param buffer with data + * @param size size of the buffer + * @return freshly allocated, null-terminated string + */ +char * +TALER_data_to_string_alloc (const void *buf, size_t size) +{ + char *str_buf; + size_t len = size * 8; + char *end; + + if (len % 5 > 0) + len += 5 - len % 5; + len /= 5; + str_buf = GNUNET_malloc (len + 1); + end = GNUNET_STRINGS_data_to_string (buf, size, str_buf, len); + if (NULL == end) + { + GNUNET_free (str_buf); + return NULL; + } + *end = '\0'; + return str_buf; +} + + +/** + * Get encoded binary data from a configuration. + * + * @return GNUNET_OK on success + * GNUNET_NO is the value does not exist + * GNUNET_SYSERR on encoding error + */ +int +TALER_configuration_get_data (const struct GNUNET_CONFIGURATION_Handle *cfg, + const char *section, const char *option, + void *buf, size_t buf_size) +{ + char *enc; + int res; + size_t data_size; + if (GNUNET_OK != (res = GNUNET_CONFIGURATION_get_value_string (cfg, section, option, &enc))) + return res; + data_size = (strlen (enc) * 5) / 8; + if (data_size != buf_size) + { + GNUNET_free (enc); + return GNUNET_SYSERR; + } + if (GNUNET_OK != GNUNET_STRINGS_string_to_data (enc, strlen (enc), + buf, buf_size)) + { + GNUNET_free (enc); + return GNUNET_SYSERR; + } + return GNUNET_OK; +} + + +static void +derive_refresh_key (const struct GNUNET_HashCode *secret, + struct GNUNET_CRYPTO_SymmetricInitializationVector *iv, + struct GNUNET_CRYPTO_SymmetricSessionKey *skey) +{ + static const char ctx_key[] = "taler-key-skey"; + static const char ctx_iv[] = "taler-key-iv"; + + GNUNET_assert (GNUNET_YES == + GNUNET_CRYPTO_kdf (skey, sizeof (struct GNUNET_CRYPTO_SymmetricSessionKey), + ctx_key, strlen (ctx_key), + secret, sizeof (struct GNUNET_HashCode), + NULL, 0)); + GNUNET_assert (GNUNET_YES == + GNUNET_CRYPTO_kdf (iv, sizeof (struct GNUNET_CRYPTO_SymmetricInitializationVector), + ctx_iv, strlen (ctx_iv), + secret, sizeof (struct GNUNET_HashCode), + NULL, 0)); +} + + +int +TALER_refresh_decrypt (const void *input, size_t input_size, const struct GNUNET_HashCode *secret, void *result) +{ + struct GNUNET_CRYPTO_SymmetricInitializationVector iv; + struct GNUNET_CRYPTO_SymmetricSessionKey skey; + + derive_refresh_key (secret, &iv, &skey); + + return GNUNET_CRYPTO_symmetric_decrypt (input, input_size, &skey, &iv, result); +} + + +int +TALER_refresh_encrypt (const void *input, size_t input_size, const struct GNUNET_HashCode *secret, void *result) +{ + struct GNUNET_CRYPTO_SymmetricInitializationVector iv; + struct GNUNET_CRYPTO_SymmetricSessionKey skey; + + derive_refresh_key (secret, &iv, &skey); + + return GNUNET_CRYPTO_symmetric_encrypt (input, input_size, &skey, &iv, result); +} + + +void +TALER_hash_context_start (struct TALER_HashContext *hc) +{ + GNUNET_assert (0 == gcry_md_open (&hc->hd, GCRY_MD_SHA512, 0)); +} + + +void +TALER_hash_context_read (struct TALER_HashContext *hc, void *buf, size_t size) +{ + gcry_md_write (hc->hd, buf, size); +} + + +void +TALER_hash_context_finish (struct TALER_HashContext *hc, + struct GNUNET_HashCode *r_hash) +{ + void *res = gcry_md_read (hc->hd, 0); + GNUNET_assert (NULL != res); + if (NULL != r_hash) + memcpy (r_hash, res, sizeof (struct GNUNET_HashCode)); + gcry_md_close (hc->hd); +} + + +/* end of util.c */ -- cgit v1.2.3