From 7cbf65461582a35967f5305d52c4517c1d1ef7b5 Mon Sep 17 00:00:00 2001 From: Didi Hoffmann Date: Tue, 19 Sep 2023 11:55:28 +0200 Subject: [PATCH] Big refactor --- LICENSE | 661 ++++++++++++++++++ README.md | 38 +- Screenshot.png | Bin 0 -> 99614 bytes app/hog/hog.xcodeproj/project.pbxproj | 16 +- .../UserInterfaceState.xcuserstate | Bin 34178 -> 35858 bytes .../Image.imageset/Contents.json | 20 + .../logo2.imageset/128-mac.png | Bin 0 -> 2556 bytes .../logo2.imageset/Contents.json | 21 + app/hog/hog/ContentView.swift | 339 --------- app/hog/hog/DetailView.swift | 349 ++++++++- app/hog/hog/Info.plist | 5 +- app/hog/hog/demo_db.db | Bin 0 -> 262144 bytes app/hog/hog/hog.entitlements | 5 +- install.sh | 24 + logo.png | Bin 0 -> 22662 bytes migrations/20230909161250_first_db.py | 41 ++ power_logger.py | 416 ++++++++++- requirements.txt | 10 + settings.ini | 5 + 19 files changed, 1535 insertions(+), 415 deletions(-) create mode 100644 LICENSE create mode 100644 Screenshot.png create mode 100644 app/hog/hog/Assets.xcassets/Image.imageset/Contents.json create mode 100644 app/hog/hog/Assets.xcassets/logo2.imageset/128-mac.png create mode 100644 app/hog/hog/Assets.xcassets/logo2.imageset/Contents.json delete mode 100644 app/hog/hog/ContentView.swift create mode 100644 app/hog/hog/demo_db.db create mode 100644 install.sh create mode 100644 logo.png create mode 100644 migrations/20230909161250_first_db.py create mode 100644 requirements.txt create mode 100644 settings.ini diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1ce8758 --- /dev/null +++ b/LICENSE @@ -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 +. \ No newline at end of file diff --git a/README.md b/README.md index 262817e..17ad984 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # hog + + + The hog is a tool that periodically collects energy statistics of your mac and makes them available to you. There are two main aims: @@ -17,9 +20,14 @@ give some statistics. You can either call it by hand and send it to the backgrou For development purposes we recommend to always first run the program in the foreground and see if everything works fine and then use the launch agent. -**IMPORTANT**: +### Launch agent -### Launch agent (still needs work) +This is a description on how to set everything up if you did a git clone. You can also just do + +``` +curl -fsSL https://raw.githubusercontent.com/green-coding-berlin/hog/main/install.sh | sudo bash +``` +which will do the whole install for you. Make the `power_logger.py` script executable with `chmod a+x power_logger.py` @@ -58,9 +66,18 @@ If you want to unload or stop the service: sudo launchctl unload /Library/LaunchDaemons/berlin.green-coding.hog.plist ``` +### Settings + +It is possible to configure your own settings by using a `settings.ini` file in the same directory as the `power_logger.py` +script. Following keys are currently used: + +- `powermetrics`: This is the delta in ms that power metrics should take samples. So if you set this to 5000 powermetrics will return the aggregated values every 5 seconds +- `upload_delta`: This is the time delta data should be uploaded in seconds. +- `api_url`: The url endpoint the data should be uploaded to. You can use the https://github.com/green-coding-berlin/green-metrics-tool if you want but also write/ use your own backend. + ## The desktop App -The hog desktop app gives you analytics of the data that was recorded. +The hog desktop app gives you analytics of the data that was recorded. Please move this into your app folder. ## Database @@ -69,3 +86,18 @@ All data is saved in an sqlite database that is located under: ```bash /Library/Application Support/berlin.green-coding.hog/db.db ``` + +## Contributing + +PRs are always welcome. Feel free to drop us an email or look into the issues. + +The hog is developed to not need any dependencies. + +## Screenshots + + + +## Sources + +- Logo from https://pixabay.com/de/vectors/schwein-schweinchen-ferkel-2660356/ +- Caribou (Public Domain) lib from https://raw.githubusercontent.com/clutchski/caribou/master/caribou.py \ No newline at end of file diff --git a/Screenshot.png b/Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fb70be462a6b2aac88d1197940ef0bd30eb7f5d2 GIT binary patch literal 99614 zcmd43WmFtX7r%=$_#nY$1{vH5t^)-32o_w11cF!C#rc`1w4WU7UuQ@I z+qb&~Ss{O&;`LOH)mTR#qU`En4-pp-5)fjQCxk#CvL1F0(uOMc{%a2Wl4C`9dAUgo z3i|r`3iyf&xOzAW3QI{z2?~h_iiq$7XYhOaKl8Ho+O6c!K?{O8($sqF1uX?-U@ zduJ0BCl|myKpFCqVs~Z#I{*K1gMp!lp`oI5-w$)^4Q`IP z>Qs-bEL0PsIF94%OR}@WH_95<6kuH4#y# zxx;72(UGdd@}v7L?+qFYV($jEeqF|WFV$iAGyUjZ%J40;-Q07;KJenCBBApw z6&yl_1%5aBMrPgr{R}+c8l0qeziZ+BeNjjV0U1du=ssR`mJn!L)UH1X#ur*kjnzZm zekVj&l@*7c67%)jUKKO{Z^{@fT-tv8I(v(6?>fb9-+$^-d|8`}h<)L1h?mG!}&#U9_ zRZ?}z@3vPOa(w6fPevr>(e~j?Q2#{v^S5%>=;f0ydJ3x}>)~Yb)e`doqE++1u*qb> zll|F>X>#q178&IlVNhNH$yZU!m~j@&SyhY@mp{^kctmEKr9 z4f!J4=Yh*wKLE@A(R?_XEfH(t_~zUB(Qit|5AKy~_%&G%ttT1oKDn>jihN}5u4?A} z?LpZ`^~|M=Y2DlnncZevwtKJkhH4WWbNx$|f({0V1e>k;m|v8)oJ>DG`D)4h+$ zktOhG;(mulI7*;l0gFM@Vfg-7W9aYN^x+|7H4nG@i=OoXSxEM$`JflST&QDGXVf++ zCSt*Fm2jSnRqBUBKJ=3$Vs!J&Lo7B-T9cJf;z3Ty z#M#ua)^)Ash$Gkx5!Dw;k4qO`4dhUzSbkir?*+6@D zU3q_h{CzIyVte6|gxPaU?vwZLNsiP!=^MaHP;+`_h08r8TgcDQD`&fS+w!b~HBq@DxzIZsM;QFh{ z_fz1>PtImXS!@X*GvI7xA1lp^pv(QfMY(*1s!wyzOtCO}iA?deHIN*}AL~|y&yyc2>WMegqYhxyHIR(2?m_b zZ)a(7La|^3PN_JpeS!pO;LG;LGtlgi=V~zL94spN(<^iFrUg9HKk|aJY>bq=XYP3#cZ|p^+jBT^UGR7}keA~t5QId!Wzbo^ z(%`38S%LwRobtuLfBDXnP;xFpNu2SJu$9GW*x*?4%2{dTI`cHgLE)SQzHfc>ec?sX zcglqhz$2QU#%e*4*!$e|XWRPw50!*xMmu-En}1<`zEPm>gYpIA4-%2967`T3=xX;O zet{mTzdZyzN57}G9HBoCI9VK>Fabk^yd=QEbOD9!GMaM7FlXHp^F^BBmXdh?L_f=+yJXUtTIm|!;Sd(AYj?BJ95EgCmr9BDn^gHZ z!-o&lPtEYKzDS1_y;HJXpfr6&kNsOh>I*YW2+!f1dzx8HwI?DrUWxIbCn9mL03+50 ztHbLxj5)m-%xM<%hC2F%_P9XKI-40YY<@x`D!X5nk&=0(z+6`Ljg!>m6fmdMwH!@q zh2}hG>c~2od9mBFeSNV@27`))AkW=$#(0uA)amIzUte8(w~i?VEqQJfL`TUlIG9XF zG-s})P@Hl~WKuBK5)#DZ)%^%*88x3t)#mk&Pybp%aeRWRWhVNlJSA2e5ne7;KTKAs z%27FX2bJmi#(h$Q^Bc#|i|!X@m58npkJnEd_c!8R?KiK>i`%OfIaBoDC`Dbv?MCz$ zBNR)(R<-u5Hs9`a^Ie+p(Y3D?q; zM&4a+&E=@<1chos+a(Dz76Vrw5msfMi}KmNqt!-tCV@gr;TSqtVFaLfr7isMD2zG+ z7$Hmoq|n*jE2R(+WBvuqe0|1ZiVM3p$;MPK)7~9Ujh&)vOJK?^X6f7$l1IfZL_HY$ zJJ}J*5`2BOzIRac#@3_r)b5S<6v3)sgj$Y+@|z|+P(04@XJB^yQ`_kkTMFt_exYbZ z&_`Cl4;d6zdKZ@?)4}WzzmwjNQve+@6_LyCh_x{_kPc`;af1; zP>~u!6QHqR8^)8jjws#Zhnw}R;5)%7mnnrESe6!jL-n-yy89Yw6<{EO&bXez4`L%& zDKRN1NhXEU*f=(8spm|fu12DY<`JC0pM1OLZ?6N*~yx$>w2J(9$`i7P$Sa(5g z5@C!TR95yTN^(+sA;w6mRNM}j_(+de=uF{^`|dpWYBA6?xdhPY)u&kxEw_jAz>=;@ z?uJYU>Y#{IOGWfyew?;(D#r1dbYu?om#rQr16@4h%K|qs1@uC=a=>|iWz!CQ*pg#3 z>}z0~&RLRx=kU6h}tU*X3HWA>lq+;NE1QVtn?IW~wQ zq$iRNrhmOCZ<>Xo>B9Hq{bOW;(s! z5)}N54Lr|#%*e>COdlG`2&b~0T>dSCSwX!mv8Jx=SIK|q;i00e?q8QxM)*xeS7Mv- z3o2yyVL9=oHdTs4h0dB{uz*y9NVUqF9J})xs=KqDPLuRwy65*`Bn~jQk>@H7!h2!^fod z6E3gI4@_^BTtU((0(vg;x3Fi#_LfwbAS&BfKD zrNul0q~CZU*p1Tzr8lYg@oj0<`@xqg4<2};W;+oO=SG*RETUVj_v8-dnaZ~(L+@t) zk&}uktPqNC#e2M-|A@!@hk%lK|1I69G4gLk8wyiZWPh)*_-O54!wSIg!3X{_kH0Sc zmuA&@3CN9<&Z^;m4NY$iADZc|Qe*vXnneYuDOjXs=D&s?Zw)Kza|Zcw{uaMt+<>st zA#4+&`Nt5b{_D4dY`w;KB|X^Suf8YYV>$X?(d!>>Gm;m2tYo=^YC>hWSgBH!h{ z95nyO@a+S@@X5#3`_KNpZ;e|8XNXQ~{KruL17P_71BZpahZrba9i_DF_cFX|8T;+fC5GfdePRB6F2yPFxB5Ot9HQ2pI8E2*f0WxUm*NCVpI0*cr^)mm zgHRPwOMqaM@fnjljVOFYCkjg{sC?WM^+%QF@z=Gy;Gh>5+n-#zNF=oRcT%~HG+Fg? zK`GSkACzD^S#~L$dZYJKqqt7LTL!x@$@mbTIrba^EB8+fuFb;W9}g=`BO6Ez>b3Ll zL-e^_^h38wHJ5HDowB^3X+X$HWIL5+{$Fb|sDrexiGeCd8LyAN;kC#%d)C+^e~q@4 zS$-wDS<>>$XXYoMbX>LgYE)V-KEEZ#qIv9P05JgSXt{<1Z9{!|<2&c1TPULTu>Bpl z0nn~44Eu+t~Aq6_00Bu1&toP}oq%~r0K$b4L@^v7)>6o2})8ne^k zuxMh-`Q``Uwm$tFQ@C*kMAnOOJg@|JI6hhZ)5=B|xaDMfW`>Zr+zMDAmVIu08U ztD0@du-GPS%T0Vx(Zibf9BiT zMns1Apv==*z&eQ)C9yBm6}Z=dkJ)zo-Ev<1hgCRuXHrY>BcPe-N^5}WY;siY)LaJe z#9`^3PnZO^;$BJlB^{m1hCtJn4WMCtH=Zg0jkysV(X{lE_Z3ZIYlMET&-V1s+ZnU+ zN?|X5+sRTp4~RWfZ-4x5aqr^#kL6A6cZ(PNh0|OGE}p$;*Ai@@I==*NhUs7%(6?M)fS3#-@cgJ|Jug`PsOZikbK!+k zKzK(t1Df;c3qXKk>&m@2;fqmvZ0*U}6-82Kndqg&{ETVW(n&!ISLqm2YX&L-#=+UT@Egm|7 zMWOYH*v9HtW%p}%$aSx57`&4oGgyv4U~2rTpfSBd=zWPo1!3OX@}8i@NSaQJfN>>! zx>EL2XrX8Uoign!y5UUFc=9C>bMV=1IW2YQc%-n#iB}5vRfxD)+aZY)b`Nj1c-HHS zjdt58uc=YI#MkJ0 z4qO|*X{WMCA9UNzMVsP7h^Dq3SQU>h21&F{)WJRnL=?uxnK^UZ!d!p|V5pt)J+Kh& zG7#zEKZ*oIGOw#C^V|%^;hO*Y8%HgHMmuB-H0X%4UuY%Dr{_|W4#MTydgk!>LZ|~y zoQ%Z`#_ES2<2Y{W(93M2QuynJMe4`lM0DN-b2XBrN#r!=xywmp3Z0XQeq=TUuIF~c zQr`J`aHN7|rr5$#srDB53rk3UL@dL8JUS zWiLL-E_HFLXFst$e}q!)u$5+uYSHA|^S8Fn43~Cs;XE9?=CyST3v?SVdKajc#t@%LZG+diz zDA1X1R&RJXK+#&NPGuPp$5$J(|MBxy?NF(7mZ&v`(3^7K-8rShb_@&kjc($QB<@x` zw4psDGL{n;?ls6=MoW2c8}CA~oH5SDHeH>}M7trLK(HAno(R<(ro|ZrX5|l9xv6Qb z*{!ym&S?>4NhKN%={lV49Uh5vs502)UM!4 zu`2ATr9{BuPbo?6hyd{(w}`K+yq4+Lv=rR?3WLUjIA%5ngccm2@m`d-F!v_~bDy8~ z)WNT4hB$-f#_i({d5&eD{?ycwc#1w3e_LLY#bxeXrXrejPZ0=Owg?IDM-Hg;+0|d{ zG=0wun|zs&8B&GFnK|=tfJamdpK(UUGLaC#RPoGXXed?Wt!)$`b^&J;eUY&gof$Cg zVV7wXL84G#5@~o)mfc9v*V>dvQhpR z3`6V!k$MJFxrke%e-v$43>}JEjjT!852;B@r13TDH|*uJA4=AhvVQVX#r_>+Iydn2 zmjuFngO4~Bk@f?tAZZ+NNqf25v@0(Ih`aDXg_DxbBm8W&?1*4WN*X|0f7EKU9}DB8 z)RvtH#g(@~xIsQ^@qfG@f)B?b4_oOrl}E8$d#`>Ff$Asm9IVH@!>0hn!Wlvv5~*7G zP4FWEoFZ|GZXom83&^R-2kB24#I@vslN`@cg7^NHLBJrDguS`i8AtYR?>YJ^ zKy5G~9iI_mkf1Dl3E6$t%j$9tmxt%3`$G8$1Eq`{L3gGl#G-p5_L3aMD#1oLuWU!` z<%yG>UIZ7?0qjHkf&z3&J0s#V ze3{Owm31iZbRnuJGOSdr1_hyqLb=vUrCZJT$e(mX?ecMU0}@(DyPvcSd%O-?>uj61 zK|S_FkHx~*sYbHuX1^3xT9OPp1s zNR1X&7p}HVS7b0CGJN)vXz{lxb3lktEDTq4;5Pbj+2rR>$G0!4Nk~b*-Mtd7cPE^Y z_gd)ZXCctuFqm;HgFEtYtI!RI8H_LHwl^v?#j6W!09*3YV6c1_j?@GZ%Xb<$i8 zkjfp6>+edM7kFOY^|!18*?W}JKK=DcRBP6bcBz+L;jDS`dr4}>K4D!Wk+%b%3)jHp zlu4(4tISRV+be6n;f{(hRb51W!0f_uOiAWo%sxSkUM%J6PW^J z-ANRsLK#AzR>!3YK5gxpXBmr|y8FmkF?)H5TN)V6jReC%o2m4fPshR^@ zM{@}qRC~n5g73ZZCu2!7rbX;CSzFnQbUP~-y_j=1Zd+H&?O6}nKD|UXk9o`QO9ru< z2kd;GR9V5woW+{h7uS8rU;l$up!fc|lM^|Y0F47rz$9&qTLhj0D)HH8)o;Tp zB$yr*_<htL)`-B~vFo#!-`Zv|99d z`<@DAR}d=67E#6J!xjI@NBd->F>Nr1AW$k0cx*foDe^CA6Jl0+ zt0|o4Pru4|2JST{4J~x$o3xf)E{b-4eU?q;wno^i)_c^;VIV$A2WN;YI@MZuND^hb@a*?x34O040KI-}~?*^y5BhH;f zhuTkB#H5iR3M@P zIW;j>mOC{=WP!T9nCzW>4JeS#BZeCkhp{Zal9ebmO`Io#%0(p5=|KX@DI9WM4h<1% zi}g8AgpRjOge_2n!BV~aPWQL%dQOiUaY2X$K#CuN=l1Q~K`fwv_SZB&id;JG5C4d* zr^iY^N+XVCzvjJ1TYH2r)?ksVa$xj$k{Klv=lD{CW3ac6$OTyNnMG}lzbfK)Ft;_p z?;e~F&YhSV*tVG*G%0s>a-ZCp$f$O+OFMslP+s!{!YF9?E(JHmj@qU>B%8zhZs+~m zQE-69PaX>wZzc01KPV$-ymmpoc_ku)!y;XXI3SHxe?{$T5UT(7SKtj->(|L*aF904 zWCqIbvXd5v>n(6EU!BF0xt_hlYj9H)L>0%7qiEj|;$^;(5jpoDx8zu2nzKUT4sYK2 zOw!fFA(u~tkWfKUnj&%oT7;nfsZ8`8mwG|SNs-Xl`z0^7$}0`h!f^5Mfjd|oDsf-r zI=jiirdoAYg~dg6$u?q)TCnd=Pu>mks)o10XWW8zq%}ryjB-e*3pXS*jo= z`_P3X>SXb*_#`4LxOMz1xC-!GPF!AgT(ji7LE(vmA zwZ8K50GzP*jqice=m&@P`{K~?`=AC`NN5Sz$>sgQ16E6z9}G6HK*+Dr+*$WdnCoGy zrj`DH*f?BC93p|#ffVhmBx+C^aT<%hhI{;ebgi0Ln!@5fL0YI|O}PLM3zsn!I2j6a zOJUL7KsE{wDH^&tuQ7J4WVuEM#c*AmC?Us*mxjWr<7H=M2O@}KmDCyLCBz<7`iE~7 zJWym?o4Fs+9(>&w)kh|~rzjL`=sGwcC!f`@rf%-0O&CEEtm12%ubrgd&x@1fq1*rp zH+e6NTf6SiY;#s!`wE#f{|FIa8OCdJwlNZ5;CTx z1;)D(Gve^B!XqY3tD2sU4(!h%wt5~GB4p6hX_Fw`mA@ooQLGjqlIgU#7 zfcTI&VJh7`y>={G-#UF&PhJVP>h#)?QH z$7^E)aXWnN1yARE>p^t9Bv@=tq#`nlT_31jZ0fxZ<(su$We*iCT2WwmpD#+U1GEa)aTJxJ-T3DfHunK9UiT3nywnd! zZsIoaYv)Xv>qo4+HcsVDJD-mSdx5yO!ARbl!bC`Fe9$b?p7-GiYJDVGW&c|!p>$k+ zt9@*cC$+_zs|UlbSb+tp#kP3y2rScVp_LO<8hN?iucVv4L~&&3s)UTHlu?q1N9k^JjjsRg>Si6ayO? zqRq%?DE>3!zlALPy`+Wj6dX7ruhF&`%j89=k5#Q%T#TS?`@!t;YF2N#?WFr95jkDGKkJ z<9-|2qI{Uv`7#Y|slxn;I)S+OD=zC|IN=bI&b+R2D&|kDE4C%UkE5qbdoJx~Y2Rd@ zJ*v9jm||@1HKA&a;gD30tMP~7qyA31#l2I}_w1zF<;a|Xg9FsW(jF$oQ=Re7g-5Bx zf7}n4CSH-_8>Ub_92J%?k<%g?YC(NV9;n{GJIxhPP>a6UgT_lGR*)par7sENIjvIH znv~@_s0z~`B(HVbHJ4w7irC(>(~ck(i7Il5$X@{ZU-;G{?XIV)NY#or$53xxwav9l zc`e7E_r)aAiri-g~NwJ|A39m96l8dzUZyxWa2*y|n62 zlu`&mLTp2Fa-wn4BklZt(RfBXZY}7NJ|UEc!`WN_WZwGxx#YvG8W-#=3Hj#92(Opq z{QW0$&U;6cT7uh;W|^`&Axf`AyWqQ;rDg%m&;?R zN#dK1ttvJ1b*F@_6ajY%9qg6m+!R;GzOx^%kL6WAVWqAv)8WuazgVSYRJQ|EfCZjAKB z$NV&#NB)Cjt&+$)0kIO6vtLPO!RL(VT_7Cl?c={=G!|ey&SEmEbLJ*yKOnBv@wz;) zuck8*^9HA%^omxL_$pSs{gEvY^&<_J`d!-y4fcr92otweEF5`D*~+wKp#1rW{G5E~ z$Ki3j{*T$Lrdv|lT^v0Kk!wn66)ey@e+$IN0nxe!Hwg}6SiFr7w&hmSj`H}zR0$XY#n|R zG0&0{{LNlh(-P=lZ_eV{iW9eGdaaJudF0Z=NIj|-Nqd~!KV)!jm|}1*!iCTxiXs!D zZ$*{rYUn9hpD5yZb7YqYceIxW9;km1bKuuDEhk+Vi$r7SUL)RC&mY3AXL^r1Rt9he zR+Rie1S;K!35Q(w@jHe0mi0BFJNR%y+hN4-4y55LLaK(O&KqFNh}f)Z$seIalxz`6 zel>~-#`of^TEp8LLda8CvfB(KV(>Z#L7Vsmc9Ri%Laz_+DARlC4*NSjdFBS;OJTzy zIu=&J-8>oAgsz}GB9<-Y4;sK+%Km| z0si~1d_i!+#-bb)(Q4`CB|IMRf)l_}INLbQa9GA{bosK^5eGaym zbl;|+iy-!Y* zQ~KxM7rsGAxD8MG$|?+Y(y*y8j1Xq2^ouKq1xfyyBx?i0b&7b8wFsP4mhn3Bnfwyb z7zKjM;H~5;SF~rskzo4ki#a(Y#`xSB1wzaYf!*<5-y&dm{QFglO18F4^?95$Rf?UI zdg5sg0a=GX-8T1C{;UW!ukuG(d?GOz>Rs^}t0Kdfsh(o)b7fC1Ghy?gK#M!eY0hp@w^ToHg2pGl0u<}+~OiGy=;s&MhqE7oD96gpN4YcAoGRZP4*!KQQ^9L z{VcC!ou>}EEvthpp3Ltzb1}f@^I0aD1(KBd$ zaLH>cJsEisV`;qZ===iQ0|gVM8?}Z!K|!~CS3ee*?6zVcSMV&SUpj2SBgx`2DC7=K z#jJ=!4_k$^jysv`26l5EN;FW(@B*|~De5D#ZV%PBSnk~*8>w+lu;fU5pj3!7H@LE; z==2Q>mDc%^TrT;61Bpf|n$ynO9;}`&+fHHjGcO!q+PG>+Zi8qQd>6F+) z=y>vk3cgq%@5K?=`yP^7XUf_PM5{5Dj!OmNAA~*}yld~g73EMwVW>IJ&7mMq0r`O7 zpj9V7CoCSEA^E~<%A)OxCbHovd;GZeh@>-&JOUJ-eDT_!K4>_D=BndD$l6I^?y1{; zkj8}}ON8UuobX`iZ>FWOTHlDEK72eDvDI{8_WQ~=`$6d<6I1%%?tc{lzg@f5AF=1f z-V8I)H2O)U{r)mq-d)&OM2adaCZ$p6ZQ+}av1lcRybO343FAB?-hz!CVLVxiJUbx^ z>5}4+kQN7r7L!oXVq2Ike-IC%V95nv=w~$nlM2BhjFOa{u#Fidp^et2MZQ4BwDWR* zCF|HS9;QnhNM$i48%!L)aa=W4Pt-Y^)F$Xw<-#w0^!;J?{<3FIGL*+k@wsHCt$b0C zhEg1+u(#|IN~?n{^I1T=c%lM=2wD>F-Yihu!xy2NBd}g_^u}%${yhnAHw8)jbBoMU zdVVxqUWG+sa~^*DYeu|FZpSo!b=h4sjn&J5HP^ z?-K8zKIeh*B~rF;@s44bPk2XC+r5M;6-IgXz4hP^74@cWDt%?)3Oe9*^5|v8W2xUu z*kNZeO1YRbzK`O&Xx@iMcU?x+3BiP56pT?&m1lTeZEu5bt`|S#3?$#tP9@8u-Ro$> zJ;bF44W`tWrw?R{z=@5o))Uq=WE*;$BgZI;(+Cnrj*O3~qD%ONKEe%wm(Vsivyd2Poq@x;1iH#M*cg8_{;s2C&gE27;JhiW z9!&8G8J?&=QV{1H=8UX{B&_$;q_$G_9X4NC1Z@9aV&4r+7L-3{-o*@yBE|O#xCG5h ztkbN@hXo!S#oI9ljlA}nV4V>BT?T#;P^#XfZ-E3)2)ywai1b3^^Rvx%P40j~W1Swmkl+|Ss_u?~tZ(8^cc=!_C7DE!qf``h6@*`GceW4{J8^5br|du>jNfN80ivmZ-4=ZMNf z&G|hKeb;j*(>A_Tn*Dyk5n|Om8+(V=pmqN~waKp3jE7YogP?mo=Tqpk(7~9yioz7q}rthEfr`<8C-i`mt>A3UqQOGw#x%&_QL(w38 za5TTE#H#4XtZ6F!!`dM5K&hIA?`^y-MB5)f_&0UMlolX$_{%#UJpPx#5dnak2Y6~F z|7NP7gaA^<)HwXZ=f44>2t|7UvwBaQpsD(A8PkgSS~Pbc|{L=GTmO z-tt-2B$b$%p|L+bHfeP6VQoR7+jIE+X`9Ug+(EpMw&&d&HEvg?{ zlCJgHNrNN950rfC4{mR)!*07%&V^e1JO{Q%w^yWq+X~>nwB4s25_h8Y%O~`!!qbyhGT}nV`o6W)IWG= zQZje7<|FLSc^f42;X8^2_qQ{UX zmvS*CHXdzpEr7Pv0|<&^OabJtpiFw~ZFL_-%Q*(hj5xlT@frF0gpHH*)AwjO*FVS8 ztVU=LEMd$dd$&v=-|05*rGCov=~=~lS$QDKNFHqah3bg>(74i1(3b zwO6#(x2(f9z<-fB4AD8}2qW8WA+JNPWod!W8-+eMSEn;%3YXx{ZGaBJ>tLS;=CjTi zy_R>0TIscY{#HS^Tn&lm3P7GwxrL6)pRJ^v0H79r7>>J%=g3``_`6ek&YKA+N-TLa z&+AbDB9l&gM)EuC|)^FpME-IkLzvVquPl4;F_XMTvN}83!(3-{#^>1N4CXZre>z z|BC^R46$?CQf;@A3h?lkK1R=124l*kQtY!s2Q0rs$i4Fg;-M>jOhGUbSZ+Ha;p)V__OeFM!kv5=%LRkSC$nULD zL*_-IM&A6*^{GOa1Q8|JdLllqfi;HD><1~PqqsO!7=&Lh_r})&&u7&RISzGagmdixtYB9AGs zdXo!CFw=f)t`1QcJP5uy4KC2_=~RTbJO;=+rb!zcRkjT*`P4rEuR?T%DaxDjp6JIx z_zJ{iGkZ%98S)s&6rszuj-taFII7(z7HPj*{D~@bd=5xM!qn?Gu?4LlN;4hazhK#u zFblpqCi%kY;(Pkb_j@2{g;$Ree}vr~c$jjNHSQNQ0Lfs12Ej5hvcx=3nME<^|{#v3Fd;iMVuRDl-r-m?%fFssQ_|XLfZ=rJeTl)7v&};^Hw&nB232@y4eYV z%9734#PL(3!n^yrqkDU=h9M2Q`QxMcSGQRNBsWl$miAYZPQS)0^=t)znOLOIp=~um zgpEr7;R8@b=W$w>hQ+9kqi6>lB~LX4q#lP?2yr7>E_3Ft0+z^V|Gk z8=ez}o%L%uK}G(37<;`xz91S*iqo6B{DaB4cr zJ^70*${ht@%2DbfE=BL`ci=f#{ec-@p84&b^)J1VIr(859+hytnp{OXM;+icaoT~b zom8v*y!n1y4`SEMK*U$A$fd9=XTLGm(!>Nzem-AxBqGHftVyp$D=Y8Y9M2fJT92Oz;{GMV!k z0PCRWGS#n{9PH{w3e9liQn@9=z6eQ|wXSu>SqCj_? z8z{XQo-_K+`lGG}1c`q9p*;j!!^%z7TsiGk_}Mxz_mc@qq|}nRC6U9fjD?hh^>?eg zNR=p8#%MPtyYZjIU}7s^6Qy(l>4Yp{qHiIHBy)&YkKMNik4Pv9Ne`2_)bZ75#6)V2 zfDEcs8j1nCHMrdP`4;ewz}r;%JIao~sZ5nA(~p*zZVzgp9itrpCI|7u=+yB$Rqn)P z4+wQoWSl4?18ChIH~1)Nb>p}JFwzhHPqP$3+EhTFqYsJ*c`+X<_8Kn`bDPRZbU+a+ z-Pnd8kpcvynVFKnz8G$5v7+cyB2k&mjOG2w4M`z9iI{ zTZl6}|96u%5;Uzc{Q5SvV&lUj%Ruk(?w+#{!NBl=#0KyqoTZRP5=z$J%9<1ThCVRM z!CkDWBRMg-fm0Dn#&eG1h|jaW^MO!q*t5y7AN!RSz|54Z+G1;JzWEZ5Jf59JE6^kB z=^zef*)xF!&`v6g4zJVx+yOLVinhEzgY31$oF7|2_Zz>Z*u^4Z3L?zT;a8X2uE9jz z6JOSlRivqjWMb!_UF;Ryf*r6+FEnNa;Gq~mvfdq+>I&1q`|Yki@R|cE1njgK`4l5C z>lDvL=!g4l9uS$+Mev;3CA};}h4CyT1bvwMr3{S>7c;uoPi;q%9A!1d!E#P_g~{in zFj+RcGSsBSf?*a5MpENEF{S+Imcj97bMB*yZ+4Pd#dqn`ss}rkwwkgKQ9o;}#Sg?C zEU~fJ{Dyq!%spi!D6=_mHy=5>$Cwg96i$wf9}XAEiFQvRwye{35O|gzy0vFN(7n>R zU@|;GXT;=B+V5mJPA?=0KQ~8fzKT3=gmH>H^_nRt;?RQSo=w%hkSE@7mupCj3hj8^ z!L&uU5g2Bp@7-ZJsBveN&2@7FtHa}pR~x#*#h3veU(DzZFb! z&fxmDArYe7N?18x{n3w~6IT8GzW`9SQ|HgkzYn{S{B)dDK~^JQm8xzq%$+&~qcVgE zY(H|Y(9g(iXHHE_IyJU6Wq+k_ouJG1z{ z5(Gs*!xtdn;K4co`Hp(}ecVWGcsa?US8#KO#T#lBdIK6GW6?Xur`Mi)gu0K&-=MtS zR~4~>Go7!B)d!#rd~k-jWg-}oaWPBf!ScZ9Kogn;GjK0)+}Xp2#_rzjm9oP#N+l|d zDz<{h+!dD9lWyz%9w6M4>=ngP9&FOHcsV8t6z6?zB427bv*$@pv1fTsZ*Fg0GK`bMzSG@#n3ehT$fhpXY;@*dT&wg+U zR|E`Zz|86I6_&FlI^eedv2VX9#chr)h9KoG4pc`rfn{09!ZP^#)rPgKuKB~hAp&xC zELOd?qOmV|!VebNe1XNDpP>;`+_#Rym5tr{KB((X5y7F`{t{*{Y*0gX`nCHYE>^@Y z%l^1cnad4ao>_v~ah#`)HjKrNybcmbvQ5jL;h~fOuJ)E~T=#anLpf-NCO>2;mR7(`boD&r35*iG-Q^tu74vMB3vzue&aLkWQ}nHEBls}P9m?o zG!bkv#H{+xckugXO0L$GGkB>kai{Q44nyt2=3foF;S$^7^_X=yaE3i)Z2U$XQMY?q z?KI-(J4BQenwNd-5t%l({PP-J>s%%TLWqDSvkwlbiIjYmcWSG*_C?}+ zW%xcq0HVLJL$3i-jKPnX(3vX+UQ%jMGy40+un+~l3Hm?my=739Z5K8STR=j(q`Q#@ zL6Gk5?vj=e6zK-(?(S{`L}?L_E(z(7l9CdH_uSsbbI~UsaY_IFA zYn^Ky>sZGb;&vFpIgDtIjg9@z(Yi|<6@WJytGtRBaZaf@?oUSpbNKQFtoY?{$9)%0 zypR3-Ilb8*kf+f|({9p-`d)n)GwMLC!~5k&PuT}*q7$rgh4@Cuax_XQ@ zdjbMi;lkN!p4Rr_rrU*#mhslrNr=VgoC{Z z|2@f;YkSah+hyr>lJRjje#}iEdOAwcL(ln?>&xZPCETu@DdVmJlGJb1>h z*nQ7vWxg}$qW5I?uB@H#q7@1CtX;%pL5bTn3RfU~# z@o{9;kRXuJV?2HsauQ)n_Vl_t@QURd?xK(2CpOI1qF3)kjRb(k0E7kOQI~0O_rixO zjChA@p>3&{m!W(Ik6w&xLK*yf-!mk!^JKEk+Ts!YtVMEYWz^F(?ITdR>K&T+OuN`@ zXUaY|EGH1+*N0!Z3Uir4B;Y=x#n1P$q7W`ti*BLDTMV_{;5-#8sVEwl7}!r*og2%8umb4?7W48N_g z7)j;{UNXl0j7fw+s2{P1};Mkp>e4z@=v zTgn$xlR9#*1|42qv#-mx#1WXZuy8^gA5dLI>V1t6(Heiv>iR;Xn_zAx@Bk#t@)g$b zQOrr4{C%gfATXA-%b%9oeQuSX&!qH>@I`ZHeUo_pa+3g#>fNS+OP|em_v?u0AT9rTY(tL1Pd za&D_|a%F2;x19hT0aPu-V%zH<-4M~RCGyptY!^Wo3dIN)t33L8v+!)3K+=kg0!%4N zxB&?;Z8&HfO6cBfpj0ARNrD3AqMkL}wOmLA4>|jkz)0BPSX!~Cz|Ur$PO#w-dzdKq zNY9}7$Z|)|&|v17MGrpfjyD25f*7qL0xNe>zP8Sj9*`0wM zq*5tgM?bOoQmo&J<^7Tqu+sp+5TNzA#wd9>hotFVi-mUNOdY*q@-16PDLlS$FDsbr zu{*+(5Ad!}I)a}Giz9|;_IKxRi=;eD>4+Eg5Y4k9+6gD{Yp`NPMAM~wigN8EO(%DM zWa(s$@C1J&=v(U@fqnm_Fl<9wc1=l;csAO_dmPhMUlNyc_010jN(G!LI1l|b_B(eMCuvU4aXSpiJ(TS!O8zd{q zIArK?=O`w+HY9QO$sbV^u;y52lsTs_QY6VjayYYa<2)^#k8%1Gx?vx%&$%+gwvkz7 zcgzIw3@3+#jHw`+O8^xgwyO35Ml*R&w@FM+e_Z%(e3(5pcEDQc_lsbg&3A|ns%Drx zM2u&q#rl8|fPihInd^QuYdp$g8Aq}AknaSm%<-N254ne__#Q~?MVWo+BWT*gn+z>-enh{$gw+Vvp-QQnJu_KqtD3TZFI@Jh8 zPICw`g=1qfqEQlEc1BV~b5AQ)5!pm6>}yP;imihJ*4bvCV0PtsG18Wt=wwcgs>;qz z45)^N76gsFM2{qG7mcHl=MeOQy^S`7uw2KDW1Qmp$>vqqf*3xq!wB)ZaOQS5YnTw$ zuR(@wn8%wmyU*m=-^x=i5(vi@H^u&UcXu<__BMhsu| zK)OISxegg6t||0sGDgx*1Lb3o+}SPZ~(P`er+sgC;>Q+_W6kmn7YL`n8z|4`+EzUT90OT}SaA_z9Qv)8_qo2RaIf7QbdVWmI|ARb_ z-h-m#2$3a>e*x;qXaHlcnN<=0h1V^8!6i;BagF~#`aJ<=O-Sal@iSNU6Y1x=11_bB zP?aJ7ZR{Eqz}GKQn56!;f&gIkQ}+l}{v$m=NCq(R_kH?&f3f-@7;wpQG_=hBZ(}c@ z(xnH3FD?aWl=91zOv>BS9eO z*?cre_txXQ3Dh}Gd0YdDqd6#m235uy;@isL0qkN0+#VX91Auy_doZTwKQhaqSrHlP~vo!9s6;?u5=pfJ=8R2|NOvM=QW zZ%D1-QJ(2kpbfFdd!q+hm+QEp(zb2SJ*!PDHkw}~I|_cwd9ATK zUSvC}Jta}H+z$$kO_B{?T1z{{O5oK(^?Ixfv%qF3Y)Z}|MdGUdLeR7a6bbBu(%a`{ zs?AB3*B3`_K-y-$#-zIfWF(qE9pl~oC4i9H0aUC0^k8X;Tp!d(%&S{Ft}VEXpw2O^ zR)LyNp52Q2IVjNH;{yOBXey!!sACnppHld{(%B%~Qh98ja}CnUCj?Frai*>ZSuSS? z&hZbLGElQG(%Yz?Gqz-C3e}tlj&mAl(^vvHsA`FWPQ|JO z;8xYGSN-wmf*0f%^j{AEWIkPO)Q(|(GV~CA2AfvC2K;_n5rE{5LO1A%)SE))fNEY3 zQa79#Pis06&VZ`b{mo8*40E!EJpwhkVv8xL&|>K~pcZK#;JGybSm0lO?6fKlc%ZwY zx+z=q&?Erfaml(5##_HTcM&3qi^fzZD-xMQ#<6}Gni%n%P3g&*e4*D!YVYSw`5ve< z)QP{|*gq0EpF1~eujS((GLW5=HyOK617A?$rgJSpy*J z;nx;V09kn3Kr4SfyGN5gzK0dydAX77dcKBzJw+~D0E^`J(RF9CA5?+h1N?qTbQCIo z6s3Bw;8ntg1TBF_FcE{MvfeEFqu5QBsQ86CMSpt=(CmDDt3gH@v%V^Zr=bm0s%gba%3dt8d-G-UF`BW%VIk z*sEFz{`EBSj8Y0|P?x>5>(3kJFYp<>6`d8E=l}{jU#{-qMq6jGinPrBfxh*E&QhRz zETe5azS&sr!cY#d2fAwcjC28@Esv#rD z^Q2AxAErPW5v0<#Qq<0j&C3DTkgra9rqI3!%}0S}qac=M7+U5@OOA+hBP}m$oko8h z&vv^aCc(Q7X8Iv5ojK4}yBANe1yyr7Y-t5WhW8+t;kHSu9vNmgx)zBVUG`nVvg8Ip z%n+^Uwc*>BH2LzbpX;9}@q+?Kd!Y1(yxx6h4*;Tmd(h%hkvqLV$b7EH$h6i&w=p0u zSHtLnWr(oXp;Ax{sw9t|m2@NZxqA*ecC`cK2IAzO(aeX_HTKTSLl2t8+DO!DQWCtR zwi+I_%AGZ3hv|V}bs|fSOWMNo6)48Q$>(3Z?Nwza>597>cyCXJOsEkk-z}l>F2i_$ zH)lVLE(?)5&6A=SV=0P+f6gM=0Pp)fUNxbeV6fH&It4!R1%@|8AmN-_+j2!CN=1ju z;0e9q9Ok8pDFIL?w?Hv*ifMoPyFp5XQ15pfP$(1DBNPvn5gcM`8HwK5H8eZem8R>xL_!8$YmROn7~S5N{zg;@$xqcjPDZ1U>7g`6_A z-_b)Hxs+-dSR(JSn`FP-DSaOp!d%;f<;SK>dmVB3r1koEu)ALLmR*EXg(_uNpWKJV zZo^moC1v4_{DqYv`8}WmpgGDIi*Jr7#JPjisbgK32mugij)~~5zgq~0*!z+@bNC+oQPaS6s)oMfj>^;VJZ6xmHXKd5tT&ZvumK7jUZVnj47z;s zZQt18)L0?8RMDOmIb?A{7R7?ho*m2&ekS}IxZrGtGiGvKrHCH7+gTNF&kq@+xav@D zDc>Yh@m-1brrRoJaEvY9KNCF+I(~1TNu?U@YVdyZpe=N%>dGUzkUREx7nt72V1-37$tH?1sb3)a!-$K56J)d<@`8rzeO!#_;9xXX@Z27uHnT+ zya`KyRj$HHNGT4dW}WxfCHPbca`_ZRiaUtgyiPq8K^Lyg7boqe+b`Y-?~$jF0-8PN zvBdlrNUn%yG#eu2s?_k9Ze1U~F7+J7zDn8)Lkw~JxwIS6rH*f5noof+9b%fKG|!Kb zLS+I0g~NOYs}o+?pB};kkP)2_Ked{l2#&a23s24Le{%4tZ}ZEi*IysHbm^aO9^&s} z(i5gsq6rdTCe><)(!iPelMRCOx7L=}>h|i$Y8Q26Fq{ycw-tw}NOxfK`@0X2itxDL z3Te~N<{LJz!`3exml?3ZMMTr5Z8s0_X}Ej=sOiw&fmtKh9KpFj5dHtO4K{`m{G z0*Wry$Mlqv4)i5f?-a(dU;`jZ*aQmk5mx=G@An{A92$wP1t{TnQIC{~v%QxgTMg1d zZKpn0IXSj?oRo&9D}2}|E<-?J>EITALQRZvZ&cOveQ)1j5bwnU6aRv2Q2mnQl;>ld z_pFlEWK`CF1xSk!G zO*C4|2HB&cG%HNUp5BCjY!o6BjxqMwMKFG@;sK6`M%O8jRQXx-SN+IX2u{Ls0XeZE zDfcK?cuB>GKNSzapCpBZd|cj($g!}Y4>2AHV8!s3uv+ctp`ms1X5B~B$?@h@&zA|n zST@?6W3T2HM>H|LJ4hA9n-@jT>!%OiTu}mYtQeLC_Y~yW3+z4zdG9O-U7hi)#5lC0 zv4xs#MqP2wCN`<})bl42RPYob)Z?28kMXJ>UKAvv_^@1;lgm|cQwsJVy0Cd`Vq8?d zUVQW|UXZWYoh`q*b+b~LfbDtR6r8t#)eZSEhFI9oNV1SZ*~RC~;y9uI>{HI0O56Fb zO}Zne$W1fP&Dxu^e28LPXb6B`gXwmvHOClq2U)~a(hOiDyw?y)>A1IU?Q+7VX zSJHJ#!=PFcdNrjJQ_0mi+3oCktHxd-9}rQ1bi;A+gWM?%`ByQ%KyaZMM0rwRo|b%c><-sP`7g9raG zAc1nyeKNV(=$cI~6}yBM`Ew0_wM%{~!^$o6M7svJ%9|AN`6e5D#2M$$TJ`;Ew6n$e zf`}p%N|nyr8ls;@vFc*KwXcL{p|Vhruw2wGixVq3%I{qi^uWD3WEOjZ^sahwjg%0z z3CsA7B0d*k6{en5Zjk5;`QVhu6yj9nOkop7N*^xV%bu`cviOzNEAOvT8Tm3ov^)X< zIL4Mt8uUU1;}dj(bHoj{6~qxID+KEdGC9pk*Sx4~k@LQ68`7oQ%E6v+udW%e(>Ox; zEcv+}$LPXUlAh0UP?7mj5~r+}>*+4C`%!x5avTy6r)n?hI=VPhdN=6bp7APq%qL;A)D0CnH7WA2qTehN!uowfLez7dWEJDq z19T9vg3Ma4^xfNnADQardt2FjUze8*+L=+dQ2s-PtD{sdqb;+P!STIEcw7HA@k)&a z%2p!f!K)l> zVQVDVzp)Vll-K7csfzjc20Kue-S;_hn%}_%kTHXz0EAZ5xPMWS5^^-+NLW3i5uqatG^)5BnQOaw&k$D4)|YZ!-rb?gJZY#Aolq*Fi~x9Fz+UZ zF!2+9`=vQvMBrzcALcLo_WL}{mD|VUCedi_3a?!>9^(&GJf^EP)(E9Z*eM(|Qp`*4 zeS+V= zvHt|hcd}+h^XkeXz7~#BZXDs3VcK0N3V$$b@4h=*r4_(E2Ic$#vS2OH3Ht=%7L!Wd z#yY5s6jY0On232z00}7V4!Qwtq~Kz}Piln}#%ud29;uRP&MuMW7_#@?wg-_fK2K+utT}$hxcv;0_GdtKO)-&c z-5AJgHUehhpk<0laB0@VNmOZlO}}d(PV$_`ZSPZsN)f{X04DZE#n2o3?eKi#56f8n9HlCgM6ovkJV`W`>N7f>B082d6vqyRyruQXl0E!$s9H?r`*2vL9=fKAd_`}2I@|e8v?@B+XoG!qD_EXq@6A3<&OjvMMkj(s%qCF-5c=lfOZ(f z$#$YB(*Et~v>VXy3X}pELH6nX{KJfP;18bxQYKWS4NpFjf3GG$DtqSwKnQa{1>-HZ*SwOV=3bf3AhftWP| zQe?H*21h`KdpDzhC5hUiGt9P0OPp+e#O4n}v0! zPUy}O$-q?Eph~W?j^yMg-V(e6;HP@1Sgs-yr}a4XPqr?g99J`~hGJ6PF>D7C$>ux`f{7$bCZCR<*%a{;S2%^Ai=VDY&-?LqMu%T=&w1Q*QMJ3*kO zb)NBZ^nHxWun%Cdwmy0E4|Ut`7^9?R${nL*#@k~!ID*Vv?wMYdape-pO{=TTME~X& z-sgx9wTj*Cf-}@EUBpQ1W3g{3;o-4MN5!)5$)HsVGxO#@-<=-fS#T7CvhN@*ju39Z z8=a>JA;#j8?eR;wSP$hvB;d4+@B+dA3bE;G{A(d}^t@Xjs8{z0669tHzIu9$bsIO=+PWh|U{(@${Gj<*v}Nf*b7Tc>-M? zD2(^u_XUks0!nBTKs_fh1-V?UicLW={rk|DEoVr1VsFD`rjPMuL$1dN0Zv%enINl; zcz>NcsbXc7*IO}Lq`m=MCM1+v2fp`lA40#g2#S=>m**JtKb>u1aQFf=e)GDyk~&*! zKCnB@nBXlxJnkP^^R78~@15yFxkO*=_dS4Vm8#Lk;gq!e%B#Bmel+D2 zDoo`Vsc8cM#p;K($1wH?mYi@>=ODcc>dp~6@>iFG~L-K6N$A=$q zyaQ-I_UpZf0VG#10PCF&wn@IDN5#hO$oS}rX3^P&sK^66#?pC`PE@w z1Q;Zcygi~q%VguViZ_LDv%eO*JP{+So?xjZJlJ1hofnvRz>7O(I<>gaas_o3!_;Vb ztl$+NpH8y*tT^#zrdy+~2C(F?a89$(LEFjnV>g$w zr4NL|-FdPB;VqnMd?<|lSQ?$3+yqS;=z@l_#@=nF#GMX<*r!mZ{m*- z)!~FcWyioq$ud)Q5s?ebG4PEse&4+ptcf5Zmq<$*{e)MnFRsl}G%DzAl|H#BMs>5i zfZTL%cc0XA`YqDo{cF=sAEbD5j{SA+4fyhA#e(<>DbLJ%L|cQudbf7AK};DU$;_bB zO|#~d89@{hwo7#7g!x|Kt<#Ile{^w$-4VG+!|AI%)q1;%tqVzQ=a{;)8bRR%l}A$`)`KI%xewPoS58E#wT8w0RXFG znEN5f0vt-Md~tX5Tl)?mY5jv1qh)b}S3T5>w09gVMa{Yg8q7)Pt8Ek6hFa=9^yvm* zJE>5ON+kvGLyZ{xbtZ$J8N>%1s5i=1yoIy%-0!#qJ1l#~In6)ufHDD`O_aEby&F~b zlh&ZUVyC6MSiNr*?H|p{PE=cuY)a335(aYa7d|NDb^NF==1xdZmu28=kFzQWK`(%hG z@PzQWsAT%~wTUE}J&Odgatlpa3qU3(NzN?96~Dnk#s%Mf<=e0<2XO-X^OhD&GNLm+ ze|3vQZIlgNn&`pobidJ+@ZLp*tZ1P=c~^iXf4AVRyE_4rMFt0?=16o7-nBS$^^9ov z*Mm;mr8+crUL9Ut-?k_E095T;%EiTQO-byn%F^G^(hiPM_ykNg!Hp#8%zB^m@&yQHqAGeu~BJW32XnMnN;b;u&lz1Bq4JD5$ z1a0HAKIL@#S$VNCytUa@0# z2sJ10~2;_c79iql_7$rJb5{(q9N8T!L=SHwJ_ajr-n9rY>AZ!qiZdq~B z9b4NX^bUsz+a13eISJbGo^}ixFFAd3UHSL}ZJI!X%Qd-@U8A24PGr_E$Fv9lyxdzG ziCLQPpMl^C15ZH}YD8z|*hQ_(P%Tp6vH@-KoAu~rb#bv~G8Rou)ec_4wv zfxII)G0~X**NgZJPL_L%n;$C?E&S_WYJq4D+fUrXAXDo;!sEY%e}Tf?P=)lG3r5$! z&_XKol01>-)L&475D$P7!M$3ge^t$gphD-Cb2Vj2zt9k%(q02)D=@#4HTX;LD1u&^ z2-ax)XY8Pxcra8o-Q-AP=Pzc$3B8ocQ&C0(4X*y7RxkrL2Woh=>R*ZUG^lF&P=kra zgTIY6ff78lJri61wn83ysR*^)<}dhy8V=YT-K*u3f1wvks46?By|#wj-^OY~2_ASx zh5x~NQG*gZth>u}|2FpjrXeGQ@dIU#J%%6`g&@u65l5*qTdOMlclcgmfP(>L1*mCj2gf_{Tcyo4+CE9Qs|$k`Nos_|bE#;| zP&3B-ngG9~ppNza_w!?E^)~r*XMkA&)Is7Kzx#6&ET# zIvV6qSaA$_`ui}PmJ)2MgqrM6p1W!pJfAsC?@sI9Nn^j0XDluup|0tKOC2g6OU(N4 za7Ig8Y-FKo8|m=`=fskGmdBH#vNvT{m1rR7R-2Lnvg`@*!X@Gx=Jkg;(!Oxe54k=Z zA-4^6Cjav!Pz)#s=o#i9UQQk#SKS7uQ&s4_W}!1t4jbsVToH+dL5cw%;bue}e5rD3 z2?+@&Sh#)kpn!0})#i{vc`S0+UmwI^VGWJM1z=Dix1|FEvX=l@Db%UA>?Hnp&^TTz zpnP4C@$>1R0WffONp$g1xlsLf1yY}Dr?>W?K(FD>%b0Jk68M-4FFFe4l4U{2>@VOp ztpK4G{`tY+fE-4bRaN0#C|^FXovBL1d!S3L&-_3IDStKi*KdR&BG|rb?p26hdCrA2 zFNptKc9-y#RX60uM^F0Q2y!h%(8pD0z0-7JSY z2-V;xV1>ix06t&=V)e=5u+sye?oP8iQ=J@)N;Cj49(}qVVxaIYpU$H&avpek3}TR5 z#3J<*N_g`ll*AI|E=!GHeTg}MTLc`TS)i|N4oD+o^&vu_GIIQ_$8+n2=2~IcovHHV zZwE_8@1x0BK}lUakaw5LJO)bsa6TZVH!1sxDq4UN9Dx-NI54~4)Q|HRKdhpoZCPOQ zlvDm{wB4Gs-WagU;@tgpdsr-KUzh~qVyGUu ze?Lq1i&dn@w!AoW^a{!;Ir=6Z%p;Iet?Dez1h(rC8r=xvH{c|{^z8964W?8+m!g|Y z8^eMcW}jS|0SGbvKpM9#bBp{itzU0A{_fGK-E@EJ0@BB9p?1ycaWAg}dzMOQ~PC)!F_sbrDFr2{|Hv=HHXNad&7`N7bRoKj{TiJ1tmX=n69sLM4_qh$wpW*i! z4SnDJ0TqXyK3*H=#XthXBXqnnfP2bhK5}g+9Jn_Nj);?Zs-~inOLbkOn8^qVkEgB* z((rLQDGS*hWDA{BP6)ZIVg{-fLjK%e3CZ~47{Dh})3o%W;0+v)TIJ0QLc!l*Kw~?F zO`wx^f{~j9fdYN~laVA$D#ILhqOO$lV_Be^Bu0YFC$QMU9Qh{@Ux(6Ts1;skYZ*mS4rBa=w|V)?w!t8o2f`$lL>OD-{;?K8 zioQ`BL5p1iLVpZFAR_gywxXQ6sCEnHFLMEmhB$T(7Vc0$`!CB1HLes8^*rX3`~Ugq zxc_dIzd54{g_U_0-ollLUydZu#QnBLfxa;LC!(Vt1SEbp0`@5+V)(?e=fQtG z&K^QMEJs9v^4Abk0V9^A`Q%v^ygW>Q#4rj>YoV;=y|GU%w8jnEoR9SUI!qnnF z9bOg!LwCbz5%yGMUPn5Zl{Nw=l;2MS<}4j11k^;CS~~{RziokE7cJX!i&*&-9cIpCT$%If^z{^y z@$QV{^{1L#3l!QX;V^k8 zgby82C{$5fYhuheL(7L3EFKuWfkIXCIiB^80vv7a370IFVj^g`0 z{0f%1*!;oufC;98s=jorF?Xnti9?`I8ID2>oevNN;^%7p9VEX z56m;#M*&0%vt$Yi+|YYWI$76K2K!(pMh z#Pd3Z-7NS9dR%e_NYilu>6g@pPqP+TrrLB9%^Cc(q>_Z|34dB6zXhtpwWoT)hYL{- zty1si1x=)((k_6H#4^WWKa4N-LN19p*89hIYm^Cagsu5>g^sF@jy2C%_C&GLOj0=@ zmrDazsNl&+mOqztnfuEvm>c)|4D~MJ00bFQl#rRObNKv7r^!wy&co?M9-|{trXLl8 zg3t0X^3IBibd@0gNvU-cOSiIG19z|cwJQ@iRdqK*rtzJbbeZye9>_a34&%SV3_c6F zM?je`6&AYvWqK@ zo~6fc*Pu<=?D!B>$DGFgB{ z@RAq3`^90V&0?FoI>Q6Kri6{bWT|oEQk${7pg)eQQUW~h%y7Lg5_zia7Cg*nRhmEF zF7N(`ao|4Q)*;$xS!3ED3n=?Gi4Z?h6|<-(p{H!e9c;bd2Hf^RkR`PMieuwGfD=77 zHjy$6qcV9Bn9plIULZ4GWx(IbbH9jF%*~+n+1R|gx;i55>x@UPWp1K&X%A zITA}oc^)hM2}Q|CpoS^8&+CtiBP!=R=ALW+GK=?*YZec-{0y#(%-=qMFC2%sZ?`)E zWYF}_e?v}(Nu-y%;&?Oyq4hPF{AXhGPneA%(w5H*VMZTl{QMJKzk1%keY#uVj~-_; z$o+9~5Mf~@xBl&#EyCT;+!_ki`xB|g2+zUsW+d~7;{6jFgMTq3p^j(e@V|Qf-vfd{ ztrmv-FQ4w34vd{o5%V7xha3((4*y@S*$ZsrXIT%a9DYZ^;9arCUUoE`L)7{0uEq%8 z2R*54c=X?${?~Yj#>mq!{@bU^219q7S||QzIx#SepBet!HB$hyvKY|}|9etkkO~yQ z99UDC!~XHsOsJu&VCTO({c9CCD>usj)&h`A{P{Bxups{J-}!)HynZr(^=D>9g~6l$ z?W;coGvv;>iudQq)G<7;Xj_GmG4Ow;C@>bfAj&!aw;=xiyCD9z2!5H#|0k=UyyFuK zH45bEa5g+)o@{Tl-w)Hr+MNDawlB9(P9|iqz-LGw>SzUKSyUSOir78Na$dpkg>bJ< zakyLS%1p|j&Q?igJ@(E|P>FrD+C>Ilmm7?ds;VSz+i9qyVT0QY05k>`mZan3V_o;* zz^QUAxqQjU44K%2-yp!4dxLl(V%nQnVHS+$jkR%IWSl75Z{JK?zP?qx+*&Tv=anbD z0}x7BOn~0LY6GVu>dG)OGR8qArgWR^N=F>`KGkyA&vA*oTzcna0q7dluABei$`zV) z2Xg>PIcwl;{PC%NOfvgfa#P13LC(EM?fsmmkCx5PVlxDwTL8Hi1Q!>V!~6OL0lR4+ zRMLIC(N^mcP=s7NIW0e8Tt^b~sX}Ft{OY)$E&?A-bPNi~=>xLa%Ui%QkZ6+OW>pnV zY6r#==1-JfFJ`2nVm_o_9icqMJ-wH}aX&K|t0`iy=Sy3Ju|nx6o5Ys=LbD1;Y#Ccm zl_gqE<%-?aX>l&R5%l{0YNADNZihAFzG>jtLv`pkME~u^%wkua5zbHpj4fX$A%}=Bh1(3{$7}8!J8dgK7@W7?l57f#L?xMOkQBg4j}aBBP+72VT#%{PWVKV0_* z;g;wSc{_3!5Z_S^G1ShJqt8!GPEO7VjR`!toW04y2CjwDquB2e@%ohW&gmbq5bKg- zXF28Czp1^{7|g(xa6ai#6)7Nvdmk2lUJ)1jMoOrSXRGME9l&ebxE*i3sC-RuWF0WR zOqQxS5KH4lL*B`Sc0u*kDDhO<9wxIIk@6vHC+jv?VO~bEenRN>QSKUL2(Tbh@rL4q zR6?ce5*jfZWP0lFnYBLdfVbex}nIy5#kJRU)4hM_e z&k6#q6lB(KRt`oZAtXrZ#)GAVX3s8T_ zm?~AH+Ym5N7QW?GQWsv={P z{R&iA(bQy_4&0$PPFaN!)cAz2M%;k~FT<^Lu-Dygz7>{-W#NYwnJTD)$E%|l%*pAM zS9kBTDoNhS7ijgr7(effs#7HN}bgo@1ctZ076~%dRYX& zodsbmxHyvGd>Tfi=7og6UfewZ_kdE6KRdlNITF-|s%duniJj^5|3nd6{`IZ90els) ziU;Uf)3*ES9}i#~BL^fJAAgmDfDA#tF1)3f1}O;}dLr~`&KbagbZ+x|@q#*r#V@El zd|e4!cB7Jjrp_||gC^?3exvj9xQUln?M;TQeFHzB?ID+j^h<6z)eVvBg}cTJ2P0LK z(Z`vvCidf>yavu0eWA_z7Y>m{c#l!8#1&fOBhU_bdE>$OMqj14Vo8Vz&EfhCjS6zY zigLZodi6n~EW9gyKwvhsxiMUz+j!=Gyrfbwvh(;Kcp*NM4K!z-uXPDBw#09KJW%`o3>Y8wV*cpu=WEiPuLX_KfLXAHfN;J#a6dP<21UqKAR(GD!r#Q)j`p zlsr$~DT#^mKr2m9BgoZ)sr;z+0naZxsnj@v-Qu`2W9VFMqLuQ=S!LYrd379?u510& zJ%UQQ*)IZ&Dg^duc#4otY+;;51#G$X!~;3=?eCP^)1LAA;rwIHp}Hjx~#fj6Jd0VF;d5#kc)dP7vmDOLE^C} zSbHCoAg{gk8E4)e2r^+zmi20Be7O=38i|s!N2D$nmzcj$V7SJS+}aqHh>0F^x1B0T z+G42p+11;XZkHOcD8AbL;M+H_u^V*hHOT&m_4!v6kSBWmK=Avl_d%Y=wBpSWDMy|CNH1VHJ^49Gk{ffSnL{#okLA_XFlelg@JmoKl%PRt7==(OixAFlDW z&(@cDI#ZRIkeIkJuoC#47s|xjIT<ekxo%V)FnBEO)S_!l}~K7z`?W@8o@MVK1d75E}AT z{msL48-s;t@aDXMliX8%a3QDRpsC{h&`X_>$cHuWjcUhNGF1kTrY%R~GWmdo=x%qs z@Bh34d`o#JY?++~Hk5;sHj;IBa*-<7k)%DmpftDNlt`3@YgO_Zl@K?W!wqXWv<9+R?|cZsGSs zxUGq4_4j5de2g}AY?>0v`3m$R+g#=(-NjRXv>Pf@&vVUF7njaK1{I{eYT(d>NG<{+qVBh=MK%4FUN|* z6dV8AN`7(j2a7e?UcR0NrDDRz??>3(Cm3(M&ol>)e}t%5A15=)QTbg{v&kv6?luVb zX7v^r@v`9zQj>YtPcc`nYdu?xYm{*QUT*QSR`!X;nkCL4VqzBRrOxGMM#aZoMR?>> z)8pooNl(cZmP@?MA3*xSx_N z09I%}r<_f+)Kp;j;1pY0x@QSqZAL5oiNfKRWExcyo$2k*I=wID7x#fK38Y2RIP6vE zOC^K)_^F=4qoUXkjcc1nF~U!{3)&4(-sC-l+)+F}rtH5a5@4;pcs^=W8sa73gm%gl{j^c~N9hq)R5sbuCHeK0>w}vL^=j@JwMxF{$0!;c8~Bg(E&W~VED&%rpO5KT98XSu zIf{V?reD5LTfvBMSP^Uqac^I8zV^x+bN`V@wxdV)G(qTFDW1IjsL>FgYqn}d7H^sA zKpyMCM-pbavqTt@L9bq&H#I9Z!Sj9X46&yyk2)0XdD5TPYVU6xB=n;!mF;_zxe?WU z-b^o#M335{J1tA1n_|y-NXFz*(jsGQIgDGX`Di07f54)xyX$bGF8KI{HGTaQo5^CP zNiShopU;xC4-c{_d#qNeqoYEtul;nISGnR?zGgj?5$PKB~f#vm6eWxPMvIG!gF{vus` z!-cy82Y>-f1=b9E!91LMkxEy!4nqLHPY|y6kB!~j8#QpN3N+-1(NBtDCox%gz z^{&S*SC>Rw-JTUfH$(ztBlIItEx92yCDxxEbqv@hUMnnq`&9MLhq$*W0c;5N zwF=e7lFKe^qH`|tilliOW}7F=wieAByM1Y{RQT&zLxtCeU8AyZ#ZhS~d(G~md^c=7 zN3cLX-%Zr-fSKTJe2R0>TlRWEqp}>aT*=A5IeIQv*YGmi;~VjDguFWEdV2-&)8qM3uR#j}cStoD z!A@2vI<)1*_T%R<|pu>@t~|% zV`{-jJCq1gxNF3Sb&_iKaL3lih4D6C_y)`O9tZN%SU* zD0)E=#Pe=Ejn2!&p{2+J5JI@#kEI4E>it3Nhs zB@Rw8C_P3P2evIR+M`pj=xom^(OOSDq+Ol1`p2^1!rl3)h7%@do30spVZQHco&7Y& zGv|{6&S*be^tkU`HKgtMvF;PwbCGHqVn}O-A%7@}!)HDfiAq(We1YUyys6zaij|PU z&X{ltOxlK4wAH=#;bXk1?sk`PJb2`dVb#aC*iwlyZLUYxW!W3%Nid!(88?opl@D6K zS+`4~cS>x%@+_~qdS)>!du4|3Ic5rXdm5wa#~5vLM7U;-FpSG^<`u1i%1SHYizX55 z8llhrf_1*TQqLB5xOdm92a>xloOscZHs^dw_#8PNqGW&P}N#74AqS?Xa}6wQ>r z!D`s14fJBNhZyTsXFTe|EtdKQ3#Tew3xC+VHr6?$qcEu54K!JK0g>`4ZkE{MJNf+X zV1f3=Q4-%md$gBz`Xd-$&lZMp zlEr6+2i1QtKjej+ygTK2RlbYVNH$Z7>RNWR>ABY&%thMd<(FVe_u6yf3-` zcCv=w6W^n$D)yGYL{>_kMoqEm>2Bk_;irt>+2uKmF2hJGEI)?O3?ovmV<3Issfm=4 z@J;)1DFX?^Li|B=U+h^Zv5lLW!R%(#qw&k(M;v>-&X*P%VK^Q=FFefY<`A4-pQP#6 zN&IMj!^w#Pm*Y!ErERr6f-OshoZzyQt%cJcIdIFO=Wl(-;c-pb^!G4C-Da`M@@9nz zYNg?gj+Ji_8apb~~y@w41hw!6+ zY~nCeW#XWuZ$Mp)*_Wu7@JhRiHtTzix$_0#pUR&!-P zp|3W}dEb!h)=7V33tb;7v|;{e|7B`G&4z?VA><1}ZlfWObBq?XWnrt~AvCI%rJ(oz zG}f*?MXTNJA@H^Y#eP+Iz7L&nUZkVFGuD0$&;51MFcU>NJ&m8NfvE+NsE0_;2~QOC z@0IejVN##)#?|yO2}=P3FWo}tTh-%-N1bBgkeAO;)n6YWDnZf4aX4&{v*3?m$rR3k ze~@{#pN5Z~aJ666M{2d_tu2e(!lW_K?<5=~5;M25(va%C8 zEL8CJRAZ41dYMEa@Z5^jQ%X}KR(%y}n~2w~rA3!Vmdx&BhetzuA96#yZDPJYn>Ktk z`^SjxhsTgzcFCB7O?%d$wPRvfQR0q}N7a*~s;udDHkFK$%~74^?XrmH+0Kj|srkt7 zoGv@ouLdc2bOna|Oocu!N?)!od9P4TJNtc6n!cq>R%6_A;C5qZ?Oto}YcKMWMeg=? z@4dXN?X|6WG1^*FASi(kcS|xeN>cNx{?A0aT)PJ9Mv!hEgKS8EQJ%~EVj&K~Q1e&{ zS|oI3O!@p&c=X)(-sJ1w&c)Jg+TX8T626PjkM`OJeEs}^=;>8a)2sh$>Lp|ol`tN9#5d3(rwncpZsK{IE39#Wi9ZO?tkaC>3D$WZKdJ@cw5?B2gw zhb=P+!`#h;pK<#Q#Yy&Mv)4#F1;HJg-5Xm`3(O_V;uUnFbu;dc$&<5z8a_ zHLus8YA{P-{;(Sc@z;_5b=}G{Rfg5~kEz`ES+#Z%U(~T=mR}u}(%L(elm#QU36uVY z;NFO8V{ATJY9!S;p-V}h_-kQ!(YqYH&_Zf_{*)|G18e(v9hpD%cC231;}6K4`d+o( z&nQCs#`g2ZtfKTbOlOcPDRz`O42v_Fvw1VF^kbq@x!BFZ@uyP( zg8AzRRL8IoxPxONzCSStNlZq_oeT3yVz)UbEEvw-Qs+;&8#GQ zV`7(|tlhPD%5Z2*F+0|M6spkJCg9Ji>AIDOdKXOXsbDhQp(Gn^B~_+ywU#hPr5PEn z=Z1IP=lhkW`Tfwbi|9@XEjra`b2Z%WHxtWqq7O0ZPh_g|rWu~H(`*+HynZPsTv!yD>U;Lm3gd!F z8Ve7%Cwoe@YW%M{kx1Q}#!nzsHlUBQbE5=3!U7ufr9F}BkWj=PgKC$f+$5JbfwIS$ zIo{QdcTI)Xwxc&0%caoKU>*r5{9Z8hG3C2&N%pyDWZ zq6obx^G}w68wBllNvvGi4gJAy>%19rQ$!SGk1jM_|Gd~B+mydRDxLSXG)4VtoLXt>=yGD7o!6pwH=(^4k$B*7`N8sX{#V`;9bAuG$BjZNk^2_^g$mU43RS(qt+O zAnH%^p7=sj-)Z}qS1VGk9rfQHqhCc&OgYX|9myeuY|_wr`RN+(Qgf{w?9AB~cUvYF z?M*W;`m!lMY>v}ECzZ;lN)dmdDW(O$faqPLv;krwgR91~B=`MA(?(G;Rbg=)l{G^2 zwWS}GN2$0_4jZe;kUcNtE}l)^LQcz?*Nu$xulHr$Oh7+>{4(44!HL`lTWR{lZAo?3 z;iOj6WdlKE-ZdU=B=j*2zkSUTRL!sWzV-W11Qc zyP$}IiIe`1zdT*ZD~0bN*0^1IiCf6nic^G2qh3 zSLlD{S1&UtnHKJ>i6W(J%?qfA77xOYI8j&RC>@ zi`HaTqq(`Ih=R|beVdL+9Wcf!BEKTd_7tuREwpl}Ae}Z6i^D)gG=k3i{k(Squi9jM zRN6k3_VAAHH+r3e^3a&jvO#CA%n)r(c&vcuBTvJ;D%SM3i&(XX_d88bJEEcr5+Xl{ zHpqYSZ}@9~1TiV5Z*gbObe~_ONh!Wb%gM0&meFrY-lAFIU8Ewev5n?|1j*(+=ykT~ z3$YtmPEg9jXSB|Q>>;zL^Nw_f2iC4ocdS;@YkxPc55qBb=O|T^cymwXIw{Ajg{Tsg z9VnP=TBv8(vCZQ_1~-#`yWgHvGq&k&b7A77_NXQE8ge71*@Y1FobB8<<1G9|OULYc z`^U2kdG5yCx18=8fj(%VX zggw&2ISX8Hw;Ksb(Uwc3pVodUaL)QG!+;bSNYz6D2QbTkokDjF8`M#5tV#drKVN1TT(b9Fp^e&bybN)n2{RY(65 zPf;y~nsltEpDs1_*`TE3+LH)MV?Zq^I(4WjOfI0V56js}L)r9+a^91k$QGU(FE8RL z%N9h*!~qQB-nDSAxw{gckQ5pJ%xL<%Tb$uBe>OZJwwtgS9d}+>a$-=hIire?)B0Qu zBSNtpSBI>Dcl8qPZ`w$PrUnil5$^yytf-&a42gp#6w@spr4B`KA-?E5CS^3xs$T6D zR|Y9Xk^B0$2&nEk6ddG6rL4Am?J5+3wkIf1`8NqjQ-703F*$zUE6M7Wo;6FeX+N`# zNQ-|;5g~$A5#MhAy|UvQX)djOrH}zj{`Z2Vfk5}OKeNMmK^&~yzb`~v)#P0tpQ^2RugRaYk2#O1wd>xR$PB_G1HS8)C{RU+K|H$#O5CgLwY z?hOlt=T2TENFko={oHQbI;5u>#iyV1#M^m}wcsKe$U{T96CP<>l8p1#8)T-3hr&Vg zk+UU~6!=^ttDE#rl2i!mc1BYeR@%Mlv$%dpo@IHS<1c&cTK~FV|3SgID>XNLc9A0_Q97s1dX2O6NXGRi_xo7u5ZBA_zkO`28bg( zYz-}VSx&WNHP{j#i5ruhWc2^44-#$;gZfabOOEVC&$}$cdo>AtWp|O_6}?-7pxNJA z_5ZAw{B*xk;2jAu##8%rqLRF$_^LM6=%A#~Jp9SoaI|hMb^dl!hs*EKG@)>zC@qm^ z^~RA}Sr6r`m`;gdG$CQMdXXJ6X(O3fGHvjj8B>x_s+>@l4CUb*kB3z5qx>SYu%%~H zz6QrnoeyK5KTj7erwotyn>jah%;Ohtm}L=->iI!hC`bDfrOU{hbPGYjEM7+CM>>K^ z->v%wJ-7behUNaDqrA9+Z=`<>T2}6(oz%??a70_j4O~$VBebVkFPls^1}hHunUrHP zcVleC)Y1FNA5`kB2$Ktc>D)BYV=LgQx6uzTwTHBH;b9xU3eef!`>hUNxMx;>H{oRy zG{2ZQ{4sq^D5KbH;GEWKqNmMq*=Tx)WZ(Q%m{z29gz8#GfNp@%;cqv$7AlSQI(f#B z8-k0`PFGZI4l}tsPbITEt>B-17XnhUGVJ=Z%%S`qI;hV_e|?oq%fHWViE$9mQ5w~n zd4%l0d5qz6SzwQNMfO$HpIJYbn%c}ClToRWvCukcZ&`|zrKrCwQHJc)DNwXh1zJt7 zXy@_G5N%(1n%0F`LqQ;D{O9wH4YsapBrZDGHkOd9yl~)@1^kLuDqtI zyH`2BvKfnJ$(u%rrXvP6bGZKI3~j_>c)ThDmbzm*2n3nIJJgIe8sl~~da8M8Y=QNs z4g^adviMZy7|M|Lnp^dD!s$y^!5C3LDjMg1CKorhlxQKMc6Xt)A z%N*k<)waPCT(i6vG0yhX6GZ6A-;t!FarzKy@i)Qp8Y`2KQG66L)yQCwRoylG)T_s| z9jzi$d8*bk#1a!qJ5{yy%%%nc@7s%q$F!jK>3XT4qEKB|9;dz7`n+UvUxl;~SBY(< z%kiO|yLY|x&YZcMH$8K}bNjQh*P(h8EBSMB-fHnoFR3-Fz%X=pwarbnxl7uzk4Y=l${zpvZc+4#=7er0CZhC=8Z)zS*I#WyPnEr?g*GoeGJ=iS6vGZ*teEf;{EAcsNc zUuJ198969%k!wR;95QlFT)MFPeEY|T`G&l1r;m~*JzNT1JoRmvn8OYsf%Q*&K97~Y z6Re?wG+2L(+zR5}$8ST=P-`6(mFU={YiQid-H_d;pBF@I^yW!=f9SANFij~PWXb;9 zw^awjvJVepPbn@fyIvyulPe_Z#CpFhqxne8t~Q&7^=Va;S@8&R=nrWZMFLQ?%HmP8Bz!;^{C+A0GN`kKsA!+*zQ)8$+4$3$M{w zPm2qeeBO6KA%Y%hJ?I4O0SH3^xc!Xu5QNArPJ-8oXdBxv)4v7_sJTm?yd*DAw76c` z5JEJ4*~o__z!6-Sw=#VO_c_Y*p%3-z_1xoC-^7)s(w=zHokLgnJhp#te|yfHNZ$8} zd0!=r{f_dy?_?j}3WpQ(R!G=(Fc}LBtI#CU=L`1De4xaek#aRc!GxwUo);+7Ivcw#ysn=uLXG6WH zl;OyIQzkbh$vWhd7{LWO!+OLZLbr0$9av*R% zu?y7tAe1CmqOg9EB+K1Y_66B4;rh>dbzGxC9m!0D*uw0N#P&mkuY5nNULg0alzB!$3>D6_ z%(Qn}_1I}tqDA0sejGecDbO6k{w0F^#QJnW^v? z(!aW~CE?UH=l+Ggo5IJqtfU7zIU|<}GL(8zId;$ELi&%BhwlD{RvRrfc?R~QQtJ44 zEEP~GAm4T<%Z~YeD}V0klsnsvU||_y-*7jrwj3W6=KbfHopQwvnZH$ZVQ*TjpQ=%y z1dUBqO>4wux5nWr(k&i)tn!Am6-88LE82ynKQ$zOysQRAx?%JC+henC4Ti)tI~4ja zA#@y!UBmbLt^z~(%)F1!3b8HQ>&=x)1XT>kQ8mrD#FQ}7);aXlbYw_l)ifQDV{-9p zF<47RQA9knl#n0nEXYiPrl$z+T&i09bLZ%3s)*OT1qkO}UOGDj$G{PCc(|^t$T5Zb zL!Lj9Sr0Ok535-5g|>F;Z|e*^8^TgHN}g6SE-E#jkZyax);!e7QSnjHMulci-9?`1 zr6(?AA3Jx~611EC8m*kb`Bb%bkaJfUqbc(kF-mkD-qLO#1p0y|-2T+%H4c}UdP2;n z-AAJES++}8s&^;M3Dbd8v zbzQ5|sK|16h9YB$+m~J`U#1AIc6v-5yk-t_LT9TWu5FCAjWtV?ZN8ps$|!-YNTE`$ zx_1x}ESV0+zG@eXYa+}OZNfPwyZcsU^sGVTNhLie^b_Hcfgb)J4340^a`0J(C%-ezz-ty+Hl$_6wCAdZkyX!yE)|)>`5K1oV z^kuGmJbeB3^fvvK2$L!Rw-jQLehQQd~3md{Eu+t(XWdCI=+ZdsYZCR@g$|AYz zT!R0cWL@HAC4Seuq+22?&vYcnpyY|tN%6#=xss7e_&SSv19Nm~RAJg}rxWh{VV4Zb z&sT>II$RUv50JCROUqR%_C()bi<-apMGvOsZfti+>b&1fp@zHGBQV3a6_UFN?_K%! zJ;43OeT0NXzS=||`d}=bxu0Z?eKs1N^LPM#>NQ0#-9k9e-&%r{9KA;y{>E1%^Qyke^B6sD_Aq){)zYUwYff@(J4iC z;!Yt=gYGI0)5m5v>Z=lkGz8lro1Z6c5vbUl{#-km78ar-Z1C?2Lh&AQLwB(yuOQ#-wJL+YJ1IL+Zxafv9YEwWA}NO2XvF zCo+bfFf5P7!nI#;1|pSfC4@UD-9x-;LTNo+*im087r)D4`3b2LeKq09rKXG{ei&*n z>wDjbLc>)aPU(+y5y6C371>PEAOk=C$)=s-WdNy^r$8wA`s3s)sAV%cDoPyCGQVM2 zWk9c|b!kj7#KRRAeZx5RxZu+G@}*l=PR0(G@^@|Qmq8?#KVPS=vY0ZcuvEX4Rp{;t z2q$Gy;N6=vs95w6?Qzt8$WQ$g(07!4|8)onALk+!;{Ef>G>l@W40w0kOl-P5cPzG3 zz)|)&AjlUcCN;B|I$Uho7}nTsLqFmoJkp|~T+5n$JGE{3+w+y%`%Un`@s=8!z|gl_ zwv?=I4Ul+##$Q6oxlC*;1yqvcU(d=AAef-Lt`z>q&r+6IzeyE?2Z7t%`chN2*@Jqm zm_H5d(=^%(jwgmt)0R>lphIU)tsQ+iIhMvFZYfik>A9Z z;}Y28q3^udoB3%`tSz}cU{fpqB;^;a%uLz*KFicN4Pjly=l4SsHFd;Tg>0BLO?zKT z6{x@?e1fut8kpb0Le+FQoYaxYy~!dG)PV8HU9|ORP_48@jqT-)sI1XiS=n?!df$W$ z`t_^e5N8=iq1=~UTx_#1R6x_(5AjRS_=r*0!$q+xc9!jRDD>*)tcM~qMfp?mryby= zuxcz$D3Nz&G3MAx?&oh#vzNr8U&<&Zm{w-x#msUcTnqYCmS^%;2p!H23^|WzeTNC!Ld*CoSUUsJPxpjXVy3 z0Lz4#0)SHCb$>B?VfXDB66Tc8>j&P!`zVE1jm1>7^ZC2ajHhVB5)Qu_UzIg${- z)VhoB`2bqrg=!%7BxtZ70D3#y1F|3RMs8VD_FP`4uK@zmV=GPub7G{6=->>rx1%nY z1K36j#ox;VGP(2m(Rsp5qD8{+rDkAcpDzp#WO9{R>w*m$*SfyIZszmrYva3{v4EM5 z=C+sc%HKE|c0>jL`U5K&Znqtc-G%zHm^`IAwhggiy>dwIy_u4d($@Je^-6b9bG0hj zZL2&sCr5xSHH5)xDJa64(_$nZuE&MnBl#_BMkwVWv_Jf{y#Y*yLfI(7zg@52_Yv>S zTW3=khzyM62Bt`uj61csj&4OVof$Pc*uS66_S^wNLPeOkfC5J8ja32`EUy7SF=in~ zf*o;CN0<{r&sA@!b!{soZ z6Btb{#2tjfVXE-QFYp#g>CdRh5&8U#@A@fj=u3<2owZz<(07){H6gvWQ6<_%Lv3DX zTL7>BYjGjVO5;to&!G@SNXTvIhAOqTJ(ufml|VQ@VBCRxSOR=ajN2a{eC|h1#hD$} z1%U91P6~f$0`OCx0}G!|3usuB(HNEkPZx>lP>BRhUhEiC+ z=LIm)!I`6AK!_fE`pp6jee4Jz+f{XAZgERg25?p$atp)}Pa9HJQC zrhdR$trq>*jAe0z=K8n>jXtPmgTML}Pp4d9+TrhQ%2;3Jxo(o%g!e%gxD4TF0Zz&Q z;>ki@Tbr?j?Z}U>Y!=y8#KJ-Kw3p3Rmz&o1aA`JZbq7*N6b0GJP5Q^t-EFFgX2|29 zBR2-6&jJCB{Rb-L-(ySQfKhaQj72F8up3Qw9ru?(+%ZDGQwP`wg6a0R64YnJA{0XZ z)&L)$VV24^8UW^);cy;lod61vZTj5%!-ho37W=>yuF$Wc=p=cnn~3ah#`>vFTikZ@ z7701<8TIfdlEWdG4)%ez6iO2^SYiciG#YiBy`Pd+mJiVw>#+X>=W3%T!KAuIkI`Bo zF$nlPbs>vg@_TRj~{G9e@uE_fkFJ<;%?_8Jfi3&Y|@&=#hi*bV|ZQ(b^ze++$<1!N_-CLQ&uQP?}&#Effx5-qU4PWs{f{y zx?+Z8p8e;Y`vlLQOWesHvhANjiDk;G#%r{3l!bjd^0PJO%NosWx>W;-LQYb4XTGJ! z>;zrF1sruewjW01_dk(E5jz0lp53G4#v6beu0J~^GWE?Ra_SvNxXaUsNyBL{GqbvW ziEEEm_bl|_t9o|DBHY0T-e1F^c~O0QTy9VIQ7APWk_XYV)l7)6`tV}5eh^_x;U9+t z2_B){{TOE=&v{NfBqzTC*r3xRKTmN7dXy=z)FCM;Pl9z`m>7*@is%DqE6Xdpwp)fI z?`Cy-IRAQtQ2kuV+*)&EESuRMiFV+zTjio}tB6*8ho3M4dXB2g<<5pG>aH+Ej%Vkk z>+s=W5~1O1ZS%mJ=009heDYYjGYWBr0Uavk6x{h4Z&8C^ghpofB>v?hoc)IZ`L^;C z>xJPFFF1MCHe)l@myTF60YKn$St^cyL;Sn<;tyR_9nB=#EH`{ir)o;l!e zhS82n(@Dr~T>OmL={{do#hT{Nu<~2Un1JdTJ9)jSSx@_?R?{yD`&$F@P`6?Y;n8~x zNw`q_>kwFX)g|uh?DF$EuYk2$D(N-PB1{EK?<{z;9&!g>1)D--qNcQlC;qC|Szd1n z5FvumW(sftRf1A6!h4Jd>1O~Q`A(T|lI!PFI%l|u2841YwPD;uee`9i+@Ma0gZf#M z1hDAz8$Xkjs@^Fy(N&m2E)RhtkphGH_3=8X${#=Ho!qd!@tatQ2gq#>@CP$h>3xxs zqVQ-KIZFtfv&z=6aE~4o9~mKV$k!8uJ5HUYQ4-OwCCAr;Hznw9;hX+Mg*4k|F%E-n zt!K$BJmuDlqbwAJL=ZU(KdH7$mMvdVR0_CI*qtFIdwK}%DrU1KsjpE$~ zuROc$;fAWuDB=|PSj6vDbwD4TQsm-)HP*cU(O92DI}`p_S`Y9p1Nfj}JB?=8KA~?334#WBL7!b^A(2B!Z%1({-47doYxxTps|s_?d){xU$HhfOsxHNpvL&$=pl$+ zlCCr-J%vI3pO3{c0o@I^Y%=s;77RX2q=K;ACMxvr$5en=A&IGmHRT@xPfiXD<+Jk} zI{5G3@;Xv-ltmNlG(@a*ivNm+r~{2@G`^rA@c_{tOp9hiF=XO%KnIS11h2E-boGW_ z--1&AH{kf6f5q__7Ybe^al;gA7^J)kRmwa=8qXfsBO7#Jp#i{b(Sx&f zx>d%&u+bq?uLc&EbO2+$ZNsPO;(p%Tx=u#_OcYQ7y@>NrO8g~{D&teFrK?+*0MH!e z5@h^#jP?t45zEmX|E?(oYBo3_iHwv#^FS+Uyf<6P0lw`s@Z5TbR1L(S3`XdU4F5>K zr~{keT~=@jZ0#fO?MFuoHqQV<`PYM%6TAG!RRCqR;ooHVXJtM?xt6A8_$qh|RWU~G zN<^tr(ERstDRf3j)@YOCFF9r5VG}SiVEF(06~_sZQY@POK^6x8i9f+|Sc8em6@yp* z&zPmaYQ=@``}u!JN_F$s58x|qymv$${_{5>i#cF#<^ID02z>esaf>cENFz_u zAIJi{=AVfEqb5X-l+@JJ9MW}MsAGcqWs1OzmqxR_E;4(({x2x-IQ9vCu1->}8$Rdb zDD_-C>JMB3R=JsfChl<-5cI#&6)Q)e~l`LtGMc3*zfdptSPLn&ORyU@se^s}aO? zV(7H}nTe)-5BncbAgVdRp3WToe#_uLBm>D&97Z=={G{TH)-6v-*mP?U!-IT)7RG&9 z7=$@P1PL>}h+_jwvPO2HFw1He1WuV5Bt1()kT-ovrzmB)1jBf&POLXe~UJpxV@Ga|s5 zg5|R<_Ur~M{mAw`jTr5zbpmMiPt2Y_qDcVzB%zr1tY_W<>@;yv>@5lpz_u*S&OcuA z2Uz4of)+jqKNKASxM#y{>1E4c?a@ziT!oAe%~{DDrtD?U1iYq5SUIh59=!3fY6t-68`YCx7m=TWuv1%8qmysQ|W{s-P8T>S%pK)7qT z1Pm>iL4q|YChRMKl|b=+P71b#FUu^#HgS->B>@bgGN@H;eNA_WObl7^TWqk0L4r=# zg0bW#Z|E}MVcX|#EDnkRV6Djxh}I3jfPsIqP?^XJ*h11cnUU;F||CkQ;(ocAO9M#;=_s z^as~0*4q|6W_kT4nRgu%bDsyDO-V53CxGLe594y!PBjBJ)NoBy*Z~SVuz2m}G_rpI zF9nJcC@>;T1U?#yFkF*7m0z9NA_$w5VHD7Nuj}>SoU{dZeQgr0ef7r64d2|Z-7|@*M~8SlojRKu<=*$q!$kg z_>!|@{eb)Q(tzS7S_M@^AO=SBL{z|*pz>UM8dySxFotKsJ+V1`?lcM2ZBAgB`2#)|(f_V1EXYzCXj zg?Q6Lj$~K-hZF*Q?>0_nv5mryDLViwTQ41Aiz&k$2ePYC*J>y7F#xj6+ZTPjJ41+^ z1hiRNSfV#WW4x_Vpm7Lt>v94?MhQ;6ocKo}j^;FeWHjt#sHS5_MCexWb(VE^h%K$x+o{8F2j zs~7OW+yYR9SnsY*Z#VE@hr#Qf<1^xvnjsO;4$JXmI)@9vNnZny4f~X@_Gi8!1ds_h zO!e?-v>cCjGHd}r=P#@TP=482y(1Ebs}f%iL1bcKiFzWb{{7vruM0uJZ%G+700K3w zv(c*iBg$W_S=@>~;8gnZ2nhixSsmF#YYsD#z}Gz56sVz2eNt;RORhEDYg0jwvS4?^;vfzj4ELY(3y#{(5q$$d5&M{R~r3@(8hz zG+Ev_7T9>G7d-2-e!ZcCCN{+Gj5}eZ6%qLxXO3g(5Abd&jV9)z;eLGu*6c8_ktp}k z-kI-G(%^b;ZKy{2s>?8&a1FfPlYvAgZFoJ}^Qzm6 zeTE-lbQ3b-mvfdEJ*Yk8RlGT~NGt>)@VL*Pgdio;LmbzNJ`%n9gEpG@Y#0Zh?wZ3q zweO|HbKu(YApD0snb8gZ4!5m9lL}sDJsdu`8;R;$f|{@*%(<2^3YoQm%Ktj|G9?g? zCkCnK3pS*IlUGqO`$;I&>7cU`!yaBrq)YlOJ{kJc%@*l&Vg%I1b)m5JM!*E6l&C)w z5)SxLQ-VkFIB72+PD{bbW?CX?(0P{yNJZk=(Z9b${qpT5<$V7KvTP~6aJ=4Q16SgBc08#pwyz z>IqUne#ae@<8Mf~Eq41$jqqr}t3XE_U)41<1nYI+V3qpwe4D8#gXZivxPmZmj;Lkb zN?-l`>(AyL1{EuMaF0^p-%rvAbeI&l#%IR}yg|E=2s{S48(ai0m1D9lNLzMLF3xpX0dtkO zdFnIq7m3}^<05Q-e!`^0sbUmlL#$qu>gwhTy~#3Dl;vFp_`15nr;8g_A-QDNOgGP~ z+`1w^s3H1hS;S(oaL_mlGDPK1m9r z;$u#J#Irv5V4x|5Bk9Pirx+n71#w!tbpuvTJ1Hv&M8-L6kU7j>SY~QDpmx)Dn0)HU zDEvEhq^On?vS7zynxS3}7vlHHG^v){Up@8-9L8}i?oh zHxx-*Rm6esD zIl-8?j)zz(6#(TC zR%~`%rS2&K{PTF=@}{UJa=;6tYHL*-0H>#9;Gz_st^EduHa-Q!=3!lZ0E2KYY_$ZD zvoE+#fFYdkt%qPf=C5JVXR#)&-^$M~d^`q!T_5glxZU@3U}*63gGGH9DPd3^KmpHa zI!<7~p_Yu|mlw|#&2NFtnF9EJi&`siyqtosRf1uW>Q^`VqM*RuI{}1WhJVj@X?OlK zq5RIf0Tw(^Q2tJQ^?qJf*yGUHw)W+4X+13-E`1e{G^g>~e}RRez{R(<`2BIqo3>M1 z8=I|k$M(-KkfQ8ok41X{7~5fMuI;pX9T5JYz=0gscz=#+Rvf;+4Uj1Bmv69UHNjcz z9zT1(kz{IMP;yiR=s~+aPp=YPSH61wae88M)1+?B+1VE18F~O>;+fk%ub8_mVIaQI z+=D{@WHo7m+XzpC*7x81#}_g2Inb3(;g2Cs5 z2&Wlf7)-$MH-!QDts5R5fcYOX{u~HK20^uic(9*q2^?TGzyJ#wpSo>ie2|HWDZV750I_d_Ra2piAa$E zV65dIAh@h_`!lD>0tLgX@C5}cZl^WLlc6vKv`Asr8I5xRySbbrj3uO|iem>SR95X- zW7kg&Hr~q|CO3>%C;e0@H8tFUH6hk$!hB8J$8CXq15ug!;63c96p_IaJ^rxfg`ghUfE z(v%MDx@)1mS2Qh;Cavc+9)uGsDu6IQZH`Ef6?{Kt)^5sa7iY zr6aN!E&55Si@AwE$jRKstUw0*O}COwqM-tqL=FQNyaFE?&%n)V&FpkDBT+l^ys&9Y zP`&;uYahe(*|o1Zx8DnTy7$Wsq+kK8H})UW+!t{3l{K||IQTZb;2pUSDf$0 zK}eXC>9JyP{3Og`E$K+lv|(~wB!u8ezdxuP%9r-lyY&(1gNE~nro)`qQu80o2A+v+ z12<>s#~&TQW#4G`GJ9wGsGU4vQ^MuMdT1c?(pdfg12jkHS{ z=llD7PV?d;*q!POeZrfD5Cl{izaNpI`&2_@i7e+s2~5L@gJWALYu@v~i<(wOrzxAO z_jLspqvA?w^Qk@?>USknB3XHg4VlfUOY<>g zIL$tSmnO&zBcd~b9VSifB_|@tUC$7D$ULPwagW0!?xe=?!f4D-Isb%b;drkN_<%Kg zk-O0sN{Ma);k4XDly^kophovugT`cqFILTfQiYp=20!QPAp2vu;2h)Y_?)YYl#V-D z7BSD8+>~U6_LZHh0M3X_NRHDw@kvgwA_>PiBoM0$_;!|O-kd~G;(13N=PF(rpK!{i zdvisLA>KWJ%J#Xx1|)Z!v<&~W6D9H&EaM8JAAheA#AWvx{7S~001aj{gie_iCXEND ztSTL;iOvf?*d0DwL$C{`6xJd#kYPHlOW#KjQQ|YBr%SpsOsq$xZ zGJX{XAJ~i7EF#magqNF4Z3oD?FE~on@y}EBsaK|KYe0VAdwbP|Fr5ykIk%% zZ&K0Znfo?JKPIJ)WbZi5c4-3?W>|n*Xe}ivms*3_ zcQ9f5M6{ts$EQ7xj9Ouo-o>5F2nZNh=tXPvy;Op0p+AmM@CAxs7{3;VU=!S!XEHB{ z)wnj2Vh_Y0t}VrkBP|0vQ9~@dWv~d*izKUqH|ZM!I}JlxCW3=rcvpBjktu%61=ruw z@47h&i1V&c5O7hSdb`Tyu$qw}Q+^=61hrIe{|4XM0CxZGsaV^6a6){R3Pw}}dBBDF z#zN19GYEZbB$yfLfQ3lLXpcK;U?q{SrbE*@;ysy+pGK#-Y~Q8jkLZcT)P`v?p$Dlz zAF$g&#{wQ|_oL8fznj~>@8SDoOC-ZJnnGowRXrUDg|SPswrUv!o2&dRS6qp z@|%X+zCX6Z{U?%~_!u41qDRiFxwN4%h{8Q_o_}x$`}r%sUw+XW9e>v+((_X~`hf8P z8#xI#B&_13wF%7J{qt05CeOi5NHkms%^EsdAO{jYQoiJKj2;}%C!O%F^u@;Wtwf77txPu(IDfD?}w!lb32;$^$o(fFvQ#E!TGX^F47^aJ=V?fpyx8``tRN zRP?sCPhKkp&n*yxaz}MW34AxXqCbuI2BY<()5}SHxIiJ46tp07rYwqB2@dJutc9lE zyPn{wtz7p!Bbt$caGAdg?(9a9U=%#sXpu&Om#O<57@I;|q3!xpszelI_4TKp-Uqv* z^$@LL^iim+-^Cs^y#cneQubcGViCNM3hFt;S-wyruJb?mj51A_nW*@uxqnDQ2JNu= zh8VjB6Rj?{t!?1f?yv%c>zMEnAi23Z>tDh>esrXL^IL7+`7fiN*+@9YUl#asT0*Q~7 zyy+ZfzJxlS;@y9=q`C7jW0HK0Y~tiuMH0wuo`_tKYf{8hqu<>Cd{=Av~8odJ5E+qD!%iD38SzhWL8u`N5%_{o!r+OUpOrinf}D)VjFKBOY}O? zJXCSuGqf>22UWPqcc&A|{hX+**^E?IC??@Qwh?YSgLo^J8{A~8`aPzea-DzDBw`Fn9D&_W3N_5c zJ3Hsg2d3beU>~Ce$?*6h$012zL*V1WC~-nHwJ2tPw1+DMu0at4`w)_8&T%t?(n&e z9eFMOomg5bMC(bBHFD_b+8ny6km&gdQW^T)q?4W8v6HNkl!5dVaUx$4E;Pw;$T>^m z?(B{LSA_4{Jl~##_G>UmcdX+_r%*kZsdiGGnlJZU!N{HK`i$oqO*#01 z3=20C@>J8g2gF%@d>>XvCEVaS+dkxKAcsC?+#F|iYp_phh`0Ahqs@47$?SrCEHpy1 zquSHVl+lkkRJOG%D0H8~wMVLLXp-#2)DWJt0JD&I7QVvD?c*Bz6ImoYVxLz$V3WrL zy$T5-Yj}`A=T~{`;ril-j-u+$7*ggvZSS0TIFlU{pAKVZp}ir+E|6+FB&zgXQZJ^` zdzBcAi6~s(R59`H3^py6FT)6Skq)5IEJv)w9dWpNt{<+3( z(X1HG|HZLDR~(Ty?Qwlz8VPC)57u{|YaEhVK1zk^?;J*A3Snb7-e#VI8BX0O-sqI# z%vGW}#;G-*B)w$(oZR}KVcd**z2AU}#G-ts60Gb&4Oy2#|Gu_#OcN{^i<0}JD%{*i zFt@uOQ3bo}nQL9Gv1^7&wh6lVMNbbUhj$$U`8v+VAAAV=TJ{B~vb`;Q>UGQze8x*T zqk+%41QiuG5^s1RF7i zXhK1Qe%&}~)f1;XWjrx37f!I!VgT=*1|yeS@KICDxTX^-q^H~3HzlKIeh!lZwJmzY zUyyz(Ou-P+>qN0G`x>7Xz3&6joPEA9Rg(kuXQVGB=6n%ry&8@2`pKmbQb$A_Vr^#ja0e7P7CXytlsSDvExXa^_2Q7M5Cwcn zExr&5e8YiYjK3cx67hbm@!AYQk^{x7crjeReV+XiPk@h-aI|G92IY3Wsp?y{g(dPM z*)~^S8J_4kPv0>45XF$2$*svvwN-ys#~CDJ)$(e1$`SJ9q|?2ju>`F@(p+$hY?ULy zTKp5;6Q%cG;q?rzlX@vFSvl_bdo~&@tCOr2vvvpZI>iEsyh>+P=qs7Xi7Idy@2h9E zX{gsh%kN$q5f?$8$@h9ryQ_~SiqqF- z3cSB<(zdZQ?<@#fdSLwUx9}*XnTLQZk5fN_9 zjMWE*6e|CF(LE3Vm#dj~+EK#ogUD(6gU8$(YJIsA#6~egTomm0XTlTO?=ZIdzeS=D zDYK|XTk{O8vH#=wQzH#7vh_G?asMqgNz;O+l5xYtZJB>=$>Rv%5H|7Z^?okP{GSSu z9nSw_>nxz6de^=^L&(tG-6@T9cZ0Na35t@^HAo{J0*aJ$hlqrVbP0lVrzklLt$^P% zXT9f~|NE_X?ZslPS+HlA*_*we-+kTJUC7R3Sz@2a?hBKW^;V(@h+<3B$&NCAr5 z^DJM3{!`$`NkFkLkM;8L{_|_^VPuJpfiiaHq#jpQKmc$cRasL*#z$dZIivsTdfN;+ zo%vVGsKv(e#lxg&wCcs7rIEG{mC)v-S&47mcx zP)%G5YvVdoN_E!i@HY!DruKNxI6gAdhvjlKhvy2^hlv>J(Z4I-pL7iVSQYYtA1nXg z=H66=VhkLc_~)3rMFrwRRSyrGj_$DEw_v@0{dfNjcBk$%5ZG-T;u3W!REC^Ip&Qd}at@a?R>%g6JM!&Agc$I9Z~N#M~+ z@VV!?MetEen484T);tI1`=?nlmN>)x_f4F1*E5`dq{ccQr}y3W`*kFY92aY{E%k<~ zuy-W9TLDSbua&qkq7nw~yw&U1=&j#B$-M?an>QF&UKYI0?V(u! z=AKM}X%;_TZ+&!6zeNRJ)MAe_mjDu@*{T_xfC}yk!hUO_V1BX3Q>l-qt4e82JH7GJ z08d(0J)ROtAT{_==L)RY=86*0J3Z2}gFKAukMLwKHrTb7{$PQeix(4zENqn zy_;GA7EeIHWPJk`3q}&FpmfdL@^~imH+V-5IO#^i2v9TYngWg;=E2UAt1g zmkohnujJLsMm?5~wR^qmYbc7=?KFAxq;5_WwnW-Bz?O}R>J~Q(!BcT4f-=A6$GEuCG ztUwAO4^9cscDH{#TJsq%?VwQj4s_&BYbWC!k{!TljnU9iz>|O}#Tjf?#|IemEZ{>d za~nu0|8wE5K!|XDwsN&Ig3X!71g7qEEPa0)yET%nKb$QffC{Pd{B|oRe>aWPJigQ+ zCV&_Ot%QF@?*LZCjLl^Em88VY*5#mT6sT2YR)2_>9!b818ejQ{)g?5UR$T8fmxfK7 zLo^IS9e z9EKG0o9*6BuH2a2$_^89a*DqoiRMGk4>cW=Ini-h=j6eXDDGPG5)CrV%GU>@1Jfyuw5-LR<22zeQiLr2njrLi_T^7z)i_ zon4KL#UoZQ71dXE`h$?(lR$uZ)|y|GqDvA#%`I`laec%UBE)^}X@AsQCM#THuPtX_ zgxu-6^DSzCL?0i5rhfsldUp8==*fI<{N%x5M`=V5Gk5t-bs;rO)>blNzO z=Z}@LokTA!Rj&^Q0!+pro9pz?715U|CVJbM7-4vMTnSPfd$b=n5(*d`Ym*&sPlwjGKZv>K?N%!@THI zru8xGP9A>slkliP4*GupS;kt*S5!0dN(EIX9@v%gu_qZHw5Jhaj1^x1%dOH2aJdG*nM)i?OK z61H{&=G98)MvnG$^(_j6K1l8oA#fZZVY!=G|BRYk54GL@@!bvowy zN~^s>Camw2gw@dl!@uPE-P%H~yv+*2Yu0y+)l!4td9OuW^d3;JH^261AA)ibG|lju zR+Xg1htIkdi@mCl?Z<4oc#g~OxdU*C=8Q&{*2lmf{Imzvub;XL^$3)O+BKfBT%|8vJX#r^0a~F|iyZ z#>~riZ|9iiuyEO&+y)j`hBF+3**hIl%Rp08?>B3;NjCptSFPVS%>Ux>?|HSUy*)Wk zUiP=4X3+l8N7nlW%qGJg33Vr42)4TW#S~C3W>#L&A%G!3uAviZc=$HIeHYrz((C(G zlE4U#1VED{rA*yZzWTqF4N$V>>CzE`b+*q1Zl|w^!mKRC$eRK<6B`nUcV{a{=sr2L z$kh~8sEhVSBb-BKxiwg=FbAVj%$p!JHiWWlrQ~$>Nw-BdWC0GnGTzqgS}!yC{g>IJ zKCa0!!QC{;rFNEl=n1I>t{KZ`Ulgi+QHURI?6mN2t>)Y_!yhm)?DDRAFgyVV_a2}5 zr>jhT1G!F<&Inz@m1GSeQ;%NZHmj1Wi(vjtiyFXX={%0+F*+Yedv(-JGhDs*_ws<5 z*)4V*9$S;n)22}Q1=@8a(yk6$ExHa>8iOj$sqcR`!5O=#z26t@C^W`|teE>86+9H! zeG)L*I54bAX}vY9y=!Axdtg3t=SLbdksVEBl00i-0Xq#+S|bU@+WBCQe95*1nR%^N zF#OYIpiuQzh~hU#NO<<42iF9R?o?RXxrN0AVSc&(G)%33s@~RCs)7<9O~(O)7Fq>) zne!MVYv;LgJIg-*%n~2W6!wg}4Jt0&V-24L}4R zD3G+VJn;@|h8{mJw9@EOgt`S0`V&PVhPF1<(3I&WKN~Wa7H5#lnDt4Z71_s8u z0U2Q!W`C4|Ta9M1T$)wHs^L4(rofJEVrWl`jbr`gJRHJ=!M83?qO03=|GEuL zL}8lvaidb}lJ^VkXEB5@E~_2$&j#wiNb}Z)Cw-b3Ly(D-Q0wVUQtK#&z=^1Bt$P=9 zXI)8tRXwNvO94?^)+`0GE@B&!bi0EZlLqhZc+U2{P1|B`8AGm$YLnx%ts79!)mr5& zc;;hdbYhw~7>ripKWPw0?AFxuLxI=<)9P=XFM&}syj&<1(SG^Id{5W+tZRdMYM;7ByrMhZzzAJ?;HK<_33Y|#*He`KWu}&70m616#cLRE} zAJHfF;*yIJ=d&)wu0Pk2+DsJ5yQTu8Wn_w0}7m zfvghW4;kk=1+Qy(4lcWvI^*Rwt;!R9 zWMDmfV08bJWka!xh za1iN8+OMmSK;ZbeIouV2*zkJ=24zp&S!-0t>J5v%t1oKNSfdv47i)Q?-Ib=oPU2gz z6p-A=R$GcaY3!d-D@@&*Fg>L^A4amP)MF??SJdtpqI@evK!A6#k3n_zYH~vfWFhIPwFJ&Hy zI_*VPq*W~u7!Zvvo2ms63!x20*gv%&S}nigkJ2zqmoxb;Qz3^lMn#E1WLxZmV~12E zE5es)eMcC`B8Sy{A)Q~gPDA5S&W$$6oJf|>*=!+ym7Iodzm=*(03FTMKm6ddV&NF@ zYHUIbtMSga%Ltm{SO z$Z$(BlNNMJK3CcThMW2N^P{;_IGb4+zsJ4$r@|1j!ePkdSTX^0KoT@F?jbSc?l&ls zye0M@U2|{6e=*zTez#n&*n1CaR;DYG$cm--?-dUhz@tA< zg5-`Li8Rs7fF;=VHb&`f9y=6{~m>kWJr~J%IB<9^|Xn=f& zX0(}`RXWVsl`i?TXyzT%1FkN)Jw*30nzo3(o{mU0j280B@@o=KAzSNCr6=Ak$@`A) z=$Ujo_q>#X-oG?t;rixb%&kV!6}+3t&EM(jd?-`(Gf_k4@U2ai+i9}E4{3v4PsnEC zP51Tbam-mK8l^(|_Ry6Y?lf%r)kLg#w&VqOfmyOT8N%nq%DRi_k0kLtvnlWGxq66i zXBnK_@?vVI5&N6!W7y@h#-LBB(E*>#EUDnZ`8g(rSr#8Ai0~@&GLhaj$DdTK|+Z43Q?P@ZW+Eo_Y5Lx9PVSjV4ts9E@ z7TOC!S`8eR_fCfICvjBZrOIp>NRqc(#-`6u=i{W)Yre9n!^!JaJ5)f;4PENTf~Qui z2(vk}PTlPDHoQwtzZ6zF2}g`7l$}B-V3DoUS%;*rbJWpO=|-1@KP=D&+C-~t&roW4 zSGD)FF<{VW<@9=vSR)278glD)SOl;QhH?x#)k;l@QwnhcoLGzXqn-qduTxUC7PwJ6p-a$;X+nYf42w$2(>gv8h#e-DB~O zY#$}xhM;(w!4U?*miGCxp$Dw>2jujmc4;Lufb%5GlVW#8U7G8U5@TORp&!(7h4UMlFF_D>KkB_0+_mgvb6j3rv1X@U z%jf&{(flAhvMt=-fxusX-2Ut3&(Nm6MdyI=rpmt*8U%}MX2>}bd)ztSUPR|P{>mO- z$I#%WF^J_CZTDQKw$D9_$joq1f_L}G(8jSRf)payNYNbio7507N+kxDo2+2w3v+5V zHmrw=ru}9D>onS{Ym*`%nQT-4of>J2`bugsJeFcUZi%W&5HCh7MmyxLEuS#%fE;IKHC;VU_lA|OAV)U5L{I5C8*h4s6Gi}Ui769WikBznt7TQC zHv!wXaRzxG=CF@a#}z8lQd4EWjWLpTXGmWV(ZMLlj+uE}6CuLaVOENSn=Ue8!I?+^ zKpc_CA4m#vEjx-)XQdMQUm@sSQ;4>hKvFW(|67SKS_LdvK6cb(v_Bkndl)1wq4gZWqd;{;>Z8L& zsAW86oyOKn@_vg3+smfNUof4EfHJe!JAyl@^4S6B z8V!9uLgq(v4sV*(4kQiW)<3O7sd&TH=sh}x9v8P~#g5mkL;mEsh+Spc&N7ZGHC>P5 zPNBcMA7Q}BU|M}L(!)3Z!q1<5=;x9~*YZ#a!?*liZ*tzMJa5_s|QMyx1gXo*{Rr$_F7la6HNHv}GcqyN((%fgDS zAzO1C?zLAPA&cv%ly^_nsCN_!)mUXD5TiS9ZByDdXzq%C70}K)8s%M)85xPAGb{G4OY_8Gb_thb z{S$xw+LO-)L&jf@@a&+u<(_2Z8h+Y}e!M)ahpL zZpRK5#@f%W1zSgrx5aPdbH!-tW%n4y1(Dsz!r~<6R=Q1ht3xV1Ob6=?L5-K*ot#zA zhBhYa`lP54$0WHDEjib1Dx?Ls4>+rFrqbJ93~PRJwq(7JD#*t-S^9h<@X0T0tW`YFgXa{p?Z{cS@e(sSe!>%tBYU zeCAK;ZsW%)Q4L9bM#CG}n*olSosGYBMaydVTvj%|T7$oQLgo%Ny?7z-E4zey*;C8& zCr;0-io(u4A#Fsu_vT#Zj&617{FdZMvn)SaUnM#}`Q{?*CTbHr^KqndDGM6&p8HD# z9bvJ;Z+th?^gle;l?*w)yHDqA3qH+j_mDikf#)F+M6JI3SP9>3j~$##o>gve9~cfM zW+|K3rauU6X4#$^NkqB8gNJI#_;1&Bikc{eQnY)c52K1&E>KW2v4#41)h|PUKius5c6?m5aZl+#L@c(ni$!*dC6E)YMI{^ubZ!m#ZNvfS|=K$!_ z3hoH43Hs+7h1y#k)DT6j1#3ThC+@u{yoP^)QXc?cL^nb7IGZE_EF3##_wxJ}9%;UZ zO*f^Zf4==)t@B1|`lG}d;F;0@RwsRM3g!`JfRs}DK-{*VyOT72E=ZuI!nhC*GM9PA9m zS%T=3lW)bm_YN%6ivZQCjzh_xcN~-ZtvLAN&>NUjU;?@XY^a%zx( zVW+sI(2HeMML_CY=4vZL&+E!=s~cA!Gecj_0-}&2gN!p$ddDd8FcBs7VE|1%<#@je z!~fnQ0R$o0*Xq!R69`DPZSW~SgX8wa8lrLsO^^U%Vv2`cdd_}QipG)FA#~iN1I?z{ z;H$&y?B|5?194%6>-Po@{^5j>j7IBe(`wAQE7~Bcr(@+mqS? zSt$6^T?Z9;im!$kJ)WvycAKf0$o}$|8;oJpw2Xv5o6#9cXD?NWCvn$(1A=t#dFSj> zYtkFEd=zjO2o@(+t0=aHw_N^Q*3AL1EvQD_4l(bej~BzB7ib$SO7-?)1t7fV-3|6V zOOpPx?aJZL_GZ2U=aHF><{~SQk7NMWwM>M;eDh9mdfV+YN}{k5JS=bgxZw=Wltodl z6umc6rOmxJ^My8rvaiu$o*2G`;gay~HWX88hf#sDj&vUP(>}t%Ye0h5Hpw-Tp=N;o z4grw?Gw46b0t_fvLfi7sTKm7zc_pfuEPHOgQxpUys=h%}VYZ7{4ce;}4mx#hJ6~|y z2L1V2s1_nr`wVKf9PiOmTXQFvYw!JCSG-i39w)~yk1Ot;qrKbxnH1l1<5Jp>>ZeBrOeFauCx6MEO*z!E_B^9~=h8*%;4 zV|69a798mNcvuC}HLP10g-`u!JAiFa5-|&K?pA^8lg0r(a8^7k{3f9P>?Uj(A=@I6 z>ZU;UWPsKeFvz&H$AEJknaS<))s9Ou&`M)bEdg(td!)Ug<5!~?x7R|9p!d!joUPL9 z&)JhplbvtD>uEy_;)^dap&C{UVjy3Fls~ADX#E2He}&B#v#}0ICQ!k zx};hJXUBnz00gHWw}Q*^{gVf_QOtqB_U)pvMYn&x0cRSF}np2=yHmg zMg?u?RI2%Vpql0nNoe24%xsLNfj$c$#}h1q=u2*s`QP3;RAQroL{J~Us-T=$Eadtz?zL`jJU!nCvj zLF=aD;;j+7=ff5XKI}RHNK^!_k`U2Ndb83Y&Y`OUAslmDL3q1v@;p51oC+8ILZ~dK&|FkC{!z_!x+Yi_8@1(dwaM| zNcbL{P?DXfo8H0J{1OAAPerIC>9qtiP|+A$$k>7AeCfbVg?fHr#65V)V=^4bVt%3q zW*K|h3Q>fh#X0Ce5)G4U0%a@$SeZI;t*|7;)TTvi0PZ(G4uuf-I4caQMJ1y3lGX(S zXV6mTC-9MZ0|3v0ywxvN9PXAVq2y2HHAoOA$)P_U=Yv>8CYqODGt&ye(xfvPfpckw z?cfBY(>`4cjyMbSd+zJq(fp%Hh6#MhZ0FR4X$V$ky)C&Sb=Gse&b`*4b&)fPRQa=* z%s^J9)Mj(Tc5^K*10}*IpK3~gjtCb23AAd4yh>%7$UZjcXVgmiieK~uA!iW=$*<)&WEqG4$2zp~1% z*gbnbA}u<7YMe{(f8T##pK%kC2We=~gQ}|y(EI0|{3J?1vs%yHl!BsJp(~I&T{Q_f&eSI5V9zP_ufv0bmW2E6~*f4OScSaKFd&Y$VLddc#??+dMwgr6yW~NiT;cg&m0zNZm$gQBPG0&(T3mr%uckWo09VH`bo87rmXRCB z*v#9!+)5HKv9~JQrYQytOvj*6@xAil_twrD2vJ-Uh79pSPtOEszrpGTA|xsopk{+R z%21GCRID|2??I0s1M2j?nZB>jH48o*dEKzuF&nMW#R?DW<363B*oNeaW8A9ZxSKJ* z{tGqMWK!>PB*CTr@^2Tw_TsV^;t;fCYj(WALA)r({hkCLW{>mPjEg|LaCo;%cT4HEjOB_8s^c05_X&h*6i?^T?o^6T{*`9YoD)TV-;&O zB-Y_u<~{%OK~#48kzqsbY)6tjzf6wBEQ(Oa(NBlcbYam7u541Lx7|ZNm%y4K^cPz% zV*WK3=k#POX)QvczWygkmZdy|xnEn)h-KpytRsynk#e(bC*KE$!e1uz8)cgg%!DL2 z3ATM4>mSwY0Ef;#SKT3HB5eqoP^By-Eem^-7`Bt=XO;w2z9i$`5?SzgIK!!)D1(n% zzt9Hhplj`@kQmF$VObNmyA!PzfH7VR4H$;#Lc9xL)ej_y^1o4D@u)2=$8N+~jgJa3 z5h5_5?zuh?%FqT6gS>#7{V}lA|Zv7cV&R zj`;fNR|I6--n--LG}d8jai6hB`Muh8%Vu>j(;9Upg%2alzrQ4G&I>@;__WDd1L2UeOfUC1>5o6r zZP4@@!=(N8f7T6{46e!dkLCe|1t%Ab@yYLHr~v}|!(tca4O!=g4nx`>@;t7v>ysWj%(%_k$4WPKBSn)MBn5A%B!9;!|c7Cg^ac^ zTDMCbS%NJZeKH6WwbpwZ;n2RSNdKrgi9pGyP6%Xcj)(-hcIj-+w?%9L!_@v-(_((} zXF!uRM=Bm&MpcQWwHKVp3eU&A_bl)h(6@qk@|O0@6Ic@`N@Ul1I!+ zICAS>(67@N^et}gua7_3g$ma zY8=P5H%tk17RYdj@QT8FSl_IUk6~}slnfg|FBVd=zQFK3j39{B7FM=U=}f3gzd zC_SEQY_cFKm}u!3#{Qz|1)l8X(+0Z$8-i}R>No_oBa-o%>rNS-U}WmNMbj_mW*U3! zf8|axm~aL@HZlR{PwHHTZD*uc@pkA-mpcjfIL3y&aM>To2M7~^k=E$OrfP$*k(us% zKhU6S{QKl;SSWzz$i6y^F>RHa)m|V|LJR&WeI7mWd!78u#h{P#nMZ$gHg+MMB-T(O zW?%FUWP7ci*6l_1i#(Zb;k3Q^o%rbik$9HG8A@NoBuRUciTh0ySieF}a4wUwdioiZ z3DnU@J8))j_VA88M2qR_$toeAMqikUFEozY`2YCgT%h_^WtOp4S5G2FUD70x8P9S? zzbVrV6cz3AcOqGmRJp7=#Vj}Sv zG!BQ}ns*E?-II1NcxmbIxo0Q;ON7cv0$m&j?*6VhZzF`vmn#L+pe7}tAilq~dXIl% z4qPNU8)KXH!POdS7*%@x&G@`Q+IKu*Q5@=U+@pxj>5v_-x(jN0Fyq zUoXBn1$J^rpke)c1B*)>Bl-gL4+5KQf}~jkN1;1f2k!ZA+&=!Xgl=7{{8(iXjfc~UM$Zr=G>U0BO~Kwm}|LVq}s> zu=BqjHAF>M>bfo;a{jrC8dMbZf9;sg$KR&d;tDLzw@}SycVCMS)C_l=B+pV(&sG|7 zK73>F&$x_80)kqO)0|$POul<$#9eVD|3bA>HUt=lP-((IRnq_imI~5u*R>ZnY-hYc z0Pt^hOQ7KyEhka^W6+tmz~efQ*E|pl5C`2>?^e@n1FVN}m18u9?w4*Y`HUy=>0JZ^ zF+ul8tVi4S%Vz^3C+dEAA|myiO-IqVl*52j)MN-%bOXkhlKZ7vX(mpfF&4R*BHx}Z zg<2e1U!fG7pzVm*rroO5-5M2Mw0r+K221%N(2u;V{r2t0Ct@p-HH0(VZjXk}!w6B?1e@A4G>HX<7Gwci9bnwCH7duMBi^h(6G%n-}R=S zcZUwdWN9(@v^YoWq7RxMCZQB2O^O3*^L3rDrQdi376TEN3&MN-X}?@}%4l1sC3gl_ zf6H)_De}Fdz=HKYZsw$81fV2SRG}CMdc;d9C&kN@fsiZ>4JU6S@RwEJ!C#bCRB}7h z=vw(XQ@~-{&Qjyo-Ge`STI^3 zLS}R?M>z-t!#@@TC_TKnZf@WlpLZAhSmJhgS1d80QUV#I6f5=+>6lV_ zVr~_BHch=Nk~{n&n=k&Cy>?lsd&SA*h`gJRJY)2@q25XwU(DuL*F z#s{_9Anyc1p%NhfBf!{w_+0wNe*Rr`!XsN*NE^NN>^4zwLuxlj z_Hr$9xo91DTv2_d=$xG@A*Vkl4v!K=#-DXbgRA0ea4zsLg3p==Tk`zFrqdD@qq)EP zUHOyK?|K9PAKtDiMoO@vv+h*9O~z4Eq$$7uNBaJlD;wYzGBj;SZFA+_7J{?|@*C$M(}TfpupMlijPBVkvIHlOBz6nUlnj zK_@#~~$i&sOI>YRBX(_2f74em(nh@CcnL z3UrK#w_R;AG4v$R#N51Y**2^Z%N(USZ})1e2j_2QMr-hhKG0Bb+M56QCf9x>{&Zn$ zhRspaSnsvUp16&qeS7fX$JrroMwRv2NEb>gPiQ$&7o&H63w>u*GJA0EXDeTS23jnC zUK=V3+0V_95*IhS#61azHTGFE+14D4Zj;i5eOZ;kl=buUkEg8{+Ck%6eT5iiBlCPn zpzq1s1_;*0PtG=*3%3q*lcKjoP;P2wjOhe&UMtefpN_k#O7l%ugocD&z+lC*#dC=< z7z}KvRym@?@M3!A&+;ZvCG$KkYxpMpFnZKV&+d9$3FY+1Bwj|3NW#Jje-NmTprn^A zqTxGr{MHyAbFk||n?y!Dv?_O^Wg=#uC{7DK<_n*llna{&SeLN!z!uv5ZV7ui7B zeF56*y%iE9?W~upuQzDaxtVk^SuW5F@B^ZAcE-sA($$?#%Yv|H+;aY~ym_JF5ZYo4 zIjk(^!9~KHf7g{$dHmhGl9b7`{aD)-^8?y^-576-xW0u4|b{gB#U)(7WudJ zz{j;V(<3H?r}qP2=?p77*{=J8%5V7j8>zinUM_;jEvrz~=;Cld!95_z?-UxjNyVkgRq8 z&YF_h)0*-z4NY=od9KDn#4K?qRnWMKxSJXQgJ8jxxb7h}-DiQ$oYQ;B{4n6!JQDFP z6OGC3xuP=GgMR=#79db`W;EMT=+wEw1LD+7>?Tln3Vshi@Sv*(@CSE1^ z;)mTJWP>HTlJEm2DDOUCy9=D%E@bQvl<#f0y3Gw=hJfmT^&z|WH%`16dmPi38Or4= zhe1I;QToTjq_wLm+qZ$&M_VWBUpf5AsAHMqg_J&AM_@4^s$-70Ms^tfjI(dH86!hx zJ&uny=_Nc1JuhfuFd-RjrTjj<3oO@~V=x>2PMu8ri4HzSV`g~;+59M0E{}3%qnUj4 zFYji4IYPD`wk@q(Ut4w=@GIv3W#2Skwpfi4QqN+IS2~5lVAq! z*8n$gtQxlA8!f2vlm^}c~}8^Q&FL)qLiEDExGLn!1LeTas8A{|whK6zzu9M(~U*O)RKk#1WlMlX=) z;)tU$-BtyP!L;7m1gYZ>+@*6F@V`7=U`l+{vkX@jBOA1K=zEW=wLlL%6q9C0>Ff1n z99`#!%Zt%FHRC1YkMPe^^_8fW0=3fL6Ru!;K{EL#r7JI4`633^96koee;X8d%)QCp zB1jJ@2hv{myA5iP>Y8o2-Ss9p^ZIdK3FSwM@nh@Fshw2bQ->2<{)Z0j_j{VQ6sapX zufNz>dJ>B{*2P3+1 zRS58~cUN5}`5iIs)`VE;qKa8X7gX;K4H#SaeZPL2$flgG+~-L7VLNwkd&Z`djqOGm zB~J%8@~tbohaA;qJM25Kt{BcOov$Km76MzEMW;|Fu3(0@5a<*v>327+^P(B~iOH+3 zvCB4R`2vou#Sa;><z{qAy)KFv#bWQ@ zdhfzWv%af~c6W^5QdclYIzjS9@jgFZ+S&ZdbSJEGO${5j^QkgT)DM0Kgom8JvD|XaLHpR@CiFVDabH3MCT77 za&}G&HLsV^AtoePdkO|nG-cxy^OEgb45s-_sY>`wF22;nQ`fjZkoA<&b}R6D6{3QS z8^oL|L`&_YWsp^*|NXu_aU17M&9jwdjg*&Se26*dk1$h$^tjw>2}5^d_F-1?fK*QS zyJfN24-K3v!VFGW>wzrKRL7t%xd?BRi8~OkcgB86o!kn|nEO1R?PU~Lt=>CvgBY5x z!2+T>3Os)JejKqqCP{O}h5CgCS$y>SWR@W8J!&8d4~gr&sW$FHe|Bf@!Pl zHw~Iw)^S%RLh0X~n8#Ii5VKt4%4moK zP!rx#gxiY`Q?87Z`xA$;3w@kuAC;Ej)FnPaqxCK(tsEYb@2j3%p`REzz|W-L7D-7+ z==R#t@2yrb5?pT$+mZ&3d&7Qm1~c^B@dyCAR4;kSx9P8w&<-T&2H(Ee{d}o;r(ZYu zd3dbOomYqFRiq~I_jEnA<&|==F#3&5&C!;!9@@t(%YEabcTg1Kz))l}j4^S}Pai}& zg)N?{xvx1b+{e;S=-bP9nvoXt;RO4$MY5joQ%!!%02;3(I7_%YwfNrmdY7|D`mVyP zv*dw#d%U^&pYJ-J?Q{!hm(}mrC~IKA$#XrLsvQ&FtL4gf+C;TF5^HwLKvyqhdaG!Y z%kN;BEAOA}=ZJJsG4Gm#shNQfy;9Fo$`eDgEKdqQcwt6Lki(Yk{6#oL^6AC=g=^2d zq+~YZTrLXVIT9=Uu=2%nVedmHJRVM`e_P*>@pNj3(A%@6#}B=#6n+zMp@hI~imSV1JXVm@Ee_XYzG7^+;WQc0sl;TDu+OFbKl3NyW-z@6YBf@Jani^=_N+=I_5t@q!JD+Zykp~ z!%zvw!vDQ*5Z)kEoXN|30{^)eZ!%QmWcZz$pX2|FkQ9tfy`=Iu|M{poiX);Ed$aEF z&s{VnfEV(A?bv&CIWYd=zdUV(a+gf&9VdEHzt~XTwcKX8@e(-@34bBjX&By{t@q#g4R}$M z*2+D}oVox=i?cwsrFVO|Nmyy!@t!VVEh5b8GCzsV?$82Vj-1z22dIn-{J16_EWUe` z0q6o%An@6nnE;aaSMKu1Bv)YUhD|EgH8uO=)~Ad2{uRIhljlqD*PEZOhKIZD%8}Oc z)+Kp0zNG#R@`cxRvhokVzGDAL9ImTY7aFksS&&|G@WDm=jY;Kw_P+*~`Neb^0^CN= zQac>YJBd+>Xa9s`UHTVuY!Sj^Pz;++@e=jDW598dlKlW7$3X(Iw`}lvCJDQi1{m@( z`Rep&b(I?>xHY)vvBEdCNDV3+HdgvuW2f={CmFe1PTM&QH}O`GRG=rx8S{K-#ks)$OWcd=~?iydDGPJ6KX&JlkBgW zK<1_P71fsua3}xJyI`sdm;}R;nB>)cBr+zUTnA{8XO7tNfW7!1rfAq^#ph3sG`eB@ z42|2*7+QBv1?tExRK5PsFVODzj1t2$47k}a9rymtLLCMa`xzJ0$Dl#}MpN2&J{4%& zBAJz&Xm?nu=?OibABgx{q#WBW`wcjxW*O{&flUx)1+!e-7mqtj3~@X_Pc;8?>IF1M zaleXy;BRtBan)0C=1mB4s4fK|&?1Q{rv6^`_Z;5j2qA-FP&643!0-)2BK7!87xubN1ZX#^s`WigN~%>-hAPWdhP93XlQ zx)QB7M+83acczWL)<>Di*M`uZ2*;YALfB;-fnV>u8Yk2Ui#_W8my^LOz`Pxd-GH}F zVw|jy&@F$prU+##hge56WuuRxju-xHV0a`z*L*kQ+I1~buT1t6z4wXy`meiYb$Lqw zvl=T*IGyZui=90|$sIv#(+w>GBN~QLt0g?l8Nn{Om3DCGq(YuS!~pH)Gm9A)1dgli zIM!s(en&9eX{lXqzoExzzRCH~ten?|ii@!w>?ObTLZH5oAk_Fc?Em(=q{4V&RU$op_a@%w0qTX;Cdv+sXIQ4IF;ipRJR$hItu%26M8;l)nK+ zk$#M}S_Wx_%9Ds$)g(qZH116r8@BRJeL&_bB1zy(I-R4dK> z0yx=^Ddd!qz9b>X8Vv0j)6d4|jiPOGtlfz)6^t+*qIK~a=K$=+n8B+ame@7gS%}?p zSbe_tFn3*^BLHNGWHcW(Zely}bBpMcALK*=@M|!@9`#I9A#n=%`469k9%8GIN$L84FRo?M(m5-PlaaxE}Zrp~`V|CNnk^nLHXynF55Wz{JP4mu(dR!bX&(Gp|^Mdm~@3Y{_KdmT;Wd z5$Y+V=IsbuE=&wnDrD-E;8e-i2HI1)HK>YWCbPy}<2ZOzAo>$~MbxpDY<3;Con>Yv z9S|iRd5d`H$qz4{0P523mzX~lg*FdkvACd_l1fQem;24*OCAA)%&Aaouu}8w!q>-s z$qlE90OHZ*XIBb-WBZp;9&iS9U)VmF_Vpo;s6WyyPPneG;#JI<1VP$rHy!9GmViDs zmqzr*9U+)zbgAK7w>hLg;9`od=+(=dWP*G7C$wn-vG*HgXve;^3p;o~hOd{XcyS9r zqu-CzOqhbW+8tz)0Y#>3t-U!KKcsh1c7|4sVGXyQ4N_rJZR#$2Y4)<>&6~yXO-J2h z>0DpTpAl5q#5+-f-wOBYI>xA<9mZayq>2k;5K7tWIT6Re?(krIW;&e&=*1qM9iD4= zcpJ{T?XWkKSzxjG=o20IotJo86H7f7lFGOgd_*LnUReJV5eeVU8B|EOZV6B6%_1Q! zV?9{~tl1uOrc4P(mP*p86sRH5T22Gu zEEcT$WV+qg&8**FeifgoR|v_&1Sef*hjSD$W6)zCz*&|MaJ+@LYq^BD(`kQHT=DGC z1afJ~WVPUIhsG=zBHeTl0;=a9C{Bpx%`L=h2s_QWx9=FrG;{#3bz3U`2p-YkJ@k+|2CGbgkD%@+mg&@+X{q?OA!dh z?vs0mF*(txQFk#-JYW^T?he)&qZh_#Q_p8(lBF=vE2H1zywA`yMrFjNTF1L3*hDh_ zyb}V?ZG0GG;>37Po2x@W=1msZ9oD`0)eBHsF_1e4*H4Q;jFWWezV3+B%HWg9?l*mFvBq$50qgWLhWF#z%|GJ zBke82q6*vYZ#t!skdW?1y1S%BhVBjtX^@bVMoL-)MHrCoM!J*+=?>}c|26mh-0{4} z^X>gQ$FSM#8Lqw0b*=SVJFS@!VegL!ju0X3oiR@iui6^EVBXS?$@tmSjt>8$-YB7>WY7F&de|Qk&SrZ9LZpKCuq7*1YrKt-&DpO}7DvNjE zWxY!^a8@!P^X7q%XL@jF9vLXw-Bu5a_nz?=8*VOM>bIo&3U%GhU+tW8xd;NR!&3VlhmX&xA{HfCK{3%%n z`?f&Q#dbUTYih5SysMcRc}JI}%GKs~2sW@dqp9pe2SB@zKlD|dxMM&$lyaGr*wjST zf@DGoKO|l-&Gi|wIFKEFbX5r9e-!8(cvLmH<2UPpzIqE_xqe6b5u5K8_E?Go9gvupH<@QR=48wgr?vfNqGjB&LmmMK=ApJr3ndo7e z_5*wv#<4B>5@w_T&Ks`02}a2m7>TE3vtDF4y$#rI&qM%3n(uOSE_@Wa0oQ}GqO%^F z7|aakkzZpS)Fa@zjT+D4z)nOz9_LO_EI>mK_nzjHhn2^%J>opLQMz76Vo&+3LrMd0 zf1WDO%&oKapjRTT;dajabU*w^O8Zc8B<2D3+h6eyVJRc2WMV~~&=`gkj_#i%uNbYU zF$~N&*2mGFDkM?xJ1qr12Ix{qp{#_NpCTCgOKWg5m_Ndy4ZzFDM-7xxN+T5ZpW`-m z@XA$|Gs_0P^cLx(&KIYAPTT7K#A=V#g;o8mzrF!QR0i%9CcU0Wk7Dc7jrxfdysb4s zBn_Ho)begtxq6)PP=iHDLX6xjZb@cQ#Guv54onom&^rhEsHbUS{srQlBqh96=tnR6 zuyF9FgBS_p$z*4U97qzvP7s;$(bx$G8)cN>KcuTrnzUzYRKvgM%_O{dOy#pv|-dx#%bG#ty~97!yvw-t>L_w={HO& z6xiz-F2!;vBXm%CHU%-n@{$r#!5v6+&kKPg7+4E8M3ODa(4Ye$F;LAIC z$<^OS$c4eAk0c&ziLt@zbFSHFOmNIm!{Ulv<8nnozsNS2-Z}5rxp1bkc0NC{%pqJ-4Y*St#zEJd@&FInLlHS~R#qvCrKoT%k=o6Lk#BfuG zM29{-`fF;(tINcr%>h;DbXk{4#OZu!=T%fhFmHiu58o83C%+F9?dO)k8$)@6{8{z@ z?nU0_X=Kw6xU0}x4YzrvK2g$&uT;$jcch7bZ2KEM+5D}=P}2pR$;;=dMLXwTb>>(; z?>2CVA@V`oW_Y4Vwod5Pa!pCQtJ#yQneRC{At*QHra*~;=#W}5^Gvn6%o!k=y=XDa z{MPyQk}e)d9N8YYN1|3Hz9`_-UCeT>7uL?^93lm7qb^?qTSdb|LeqLP${ep?f%uC7Zkkm<7r#G?Giza1(yDtZ1u%) z+$?1~+L61$T1`bI#9@iEu8CO5tj{U5ZsbYb-&Rl2l)fTMJB8tF$3ZbDWe%mYOijY; z>J>!GqbW=J?mt{GS;^uBd@>r>a%`kR)WChM_0Dx~er!MIQudONZvLL?tDGTkG$*+) zeGYtZaz>AS)wOy7Y-3;6b948OPS@@#E!*5%eka@0#cz-1Y-TwweKxjtrJ57HrH!eZ zDvFqoWDvO%&ks{!kwo7E&N;%0`E}Gx1m=gHvcW=D7#YiuFIB=N8}-6{M%;)a~#3EM(Y2+ zRi*!1u1c`L9|Szxw44)4hQ+8Vy`|n7zJWaip8|;=0V^$v%_yN>q5q%LiR^|&3E?!F zpYZ0kW)|(fyKShOQ1H_w=1f~h{;6_KUlPb>!m%-sh9k)`RgC^$7ZL%LuJ=8Ys0LgS zD7I-=z1%GQW4V8$T4~+IFxzaExjvevpiIO;MUS!N1y`a!S$wh=f_yTa8;F9N5{z{M zW-VnNTN#caRb|`Enu{e-H*H!~G+k6%aY;2TBUNpKdW7s-2Lr zUheWCI228H^wW=x=etVZwF>XdK|Ck6eGqiND*~w5c*{!<;Ag0`{hj~z+^53@lrW4_ zR6U0==t(8+>Go=Vz-&m9_LGLc5AB!PezlM)(NDM=HmPOzb**^uy9T8-tAFC@Zi(id zyA_<>gMNesmYM(*E7y)z;N*!9;UtH;8(-z$tkltmYZHm9Z;atX&1%V&}& z8T>YYZq9FqCE_`AZ}3?X&qjFN9-=wHa&XAQY_rZ+_G=aSmqskPLk7%&cP)AY`za=I zLU}P+fu{6AE{En?Oo7JV3&>0lntil9r`2;EeAB<(u^867g#RG!xSaVCFT8^G3;7Hi zbjp;q-q;HPCp!McE&`i*98YeQA{0m5t%z$BGc%hAm5N!NkW~2jQld+pOE%&v&vQtpw{ba+mGNW-g zR^_i-_m?VqPN;dL{Eq1$pJf~;eq%eGbL|6yaE3+mBz0{g9xrgufoW|347h(K^+D`# zqX8aqJwKWwsmh?n?Ss!mU*c5Qt!3aB7r%LT^~SXog$ozcFyDJWiQ~|rn`;|bKg33s z`>3iwf?eb51CUSiay&|)?j)Ciepb-IPG-~WEY#*Yw8;*rHS|C3E+dBvP>-i{R;?Tb z*fJfV{R!>DnrCVn(9?qf-~7>og{G$SR-k4M^l5%604*}0IHIoJ{p8SYK{rTzXrLLOxu$0LwH^UnWIL(^8)TJku_IgjVT{HzZ)T+6~M^yVLVMFA1mW%s=5671iKq?I>E@vb`c}R%LG`sB&DfBf1hUND1p;W? zMod1^k{bi^=s~k}i{E7`D90NFBF%a#h!w)LZqmr83uDW`6)$@?DzMZg_wZw_l#byp z7VS8!H%$Y^4Jsp-sVmul9pZN9AcUkK767KF>!NBaqfT z=m3m#CU4O#l8o{?-TAYL|tfpQ6z1m_AK#C1m3SNPvo1SOx&uW~`jb#yoB8 zmF=G|9Z|W;V$1Qnk*Qo!8s5A^Rbv#1^0~ALu&0%}gJ58&Z;$;W@>6gAH&c%Pj0O^i zpderE-Cb*Gi&3Q&htwt%o1~Gy=nT@C#58}~iqZ4lgWOTQDjX*vH7r7FP&J z+L{K{ZlHYJV%`J(<*w~^^e>7Reix2~}q+V>=gryhu827i{`;g4F3E=koTVxXOq9JkDRa zA>x`zND}S^xnYJ){w|++ZKTqty!%u5unfxhq}gJU%-NWBo#f;K%z!Sp@VM2Qm&9=B zdfhWlcZQ;7tvvejLa%Ba^_ah#xy(sLUF4JyJ`{?gx`{@bqwqT|(v`e;E3i_>o)q{) zORL6Ps=<2=!A@w8f>~k@l@wB63@tV=WO%66DZBIgNXVJc0EZFg(x%TTrz7}wsvIK- zqa<1car8Cy+ctfJ`kF(Hk~l*Gwt!^PR8a)PZaLepe({tiyGJV{!vW2W@pb~QPyNa- zGFX^S1zz~WxtOlNQ_c)=+Rq@@T`%lbdfpco>OeXOwz`Y`FFx56q=yJL6Gjc}EJglW zT#FZDC?))B=-T}hmTd2PziZby94~o>zQ^09pX#;Xkw*SwvA}m%2LX+u2!TKvSFChe z-S!X!*omP{t?FX*u@kqF>8OROis0VN&w)ez$pKn@xj5n`$3;6-f$Pq)5{CQ=aK)C* z))-Xhse|l&h*Q+dv!{WS*h3K{{56jk3%)xapAP1pJUiIgQ!|DUI4-$Q(p z>4cmp-j>C@W{u1!_Ti$P_|q<2tldtXB)zT z3jcZ;tIhO#(LJTJEg9_1!D%whVUbPRUw_LZWYU7{rZ6+H7f&Y+?`8DGgt>1-xM5j3 z9S6|orfRE~*svt751IrbqcYIpqA-!fagMc>VH9ha;*woboaaFV3(9@V{s~H}@JfEx zrpdsV{Wj@T885!KWSIaVOakfYGE!bhUEepd$-SUU%!D2Y!}mQ>T&v`wEMM=MddePz z&p+{ed2L4C3LzgXUj%OG;I3i^8vHnfZN#A8(^)0asik9?3IUSTx2%;>5KCsYSoH4N zAkKs0)uYw1=oHse5*X3?7)*bkX2}uw`P@Y9Ca&f#6k)cx`0de!6y(I4Gr)YolpWFf zNnS#794evJj8+%a+UVmUx7P@Howe`9-yKnzQKqYd$&xhDymnHW^@_C3)&$H>L%cGu z$K;pI$c?|PoqIIIg={t0KRR}o=BtVS3#Jy#=1*HVfIKgNR1FEqul~mPFjGaMml*oH z<6tc4=xiLr6+2|MxaX^}B|X2C;n#Xs+7(Ug-OVo2UPjHsTQUW_om88^rRX;jq4v znr1?w5mH}QG>gQ4W^?#zio8h4zS(WKZO>QyWh^l-TGE2w0o^}E(jX?ohf1A-{Kc?3 zRf1l!)OiLg<$ZeIUH;^FhoO()-jsw8HlTQopl`QFq=RI@|a@+CQ|zYf#6ip zg-x@e=JxgB7(&p(vJWj&S0-Mp;vCYT_#U~{6S*ew zIL1bKQHOpsNYhMrDb6qgi4_zE0Lx)LvmWxVh9t$k1wws9(#KN1EQtSCB*cJcQ8jtI&m8y$3m z$Dk$wLdCV38o*#dYtsf>d{57)PW!yf)c~?aTrX{COGdbtBs2&I7Dyz~onP>Z^im)< zvxOry-sx*PH8(mQDPwFli3vMHZLY(@5mr+0izUqu-!xjGiMt+fX><3d4Dd}pO*hR!@o%E=wALE1>t zJIeT3mr$x)pX;N4R?M;Oxj)z7l70TZ+xply&P-^wwDC^ul^R84GxI|@(^W;=w0sQi z2>}hdI27St4KR z|Ma0AhOR>V2G3`0<*Qym2VEnZMVmwAncfraM&)x7(xmcR=H(oUY9UEW;d|1C#@KZ9 zO>yrB(0mKWtqN0uYx2&}sGYa6I?D-%o)){&da-Kkx-a`-4fE9LvevgM9?tCLFO#ia z$_}g2LBrx%8XC-@s@!%lR z9A@jErpaiRRfgkFz6XV8I~koSCiH-^Qp86Ra#5O&GUnflr?JvvyYN#oho&($M?-&#_Nb3-wUITR(gZ{S zG9AjcX)73NFrt*)&BF+fC&2R|md8yAd(yzcD_q_-@-KKMf2)cfDCzwJ7p~Q9T~PT= zP)?eGpN}ynwX9qGKO}7=WFam?9MgoKF8FQz--7SB;dlF5q|<2>HMhM+Rw`)j zdY+lT^WGd6M6Rjf`w=Cyq9?Kb)zpJmLUe{G$XNB`CHi$DTFePqk$|$s$Py+-nTj2$ z#}!u577EfyW$W0l-qUBT-64$Au`awpQI_73+%9!gQF|yohEi8)mE`rx9a^xR{s-Zm z?3`b;yH4w0N!O_8J57=9n$M>UDqqGbpYl_S^wH8^epJve55JD~m;X2#YGedP ztXFVf-g8mxB?p9>d39dgv9;s%dXJFzAUKeGviFKcXrEE((|U^$4oBUAl7WgrKj-&Q z6MFc4Fqr)Lh)iVFZ;j%V==H?$J)(sEu*|+6WXglUfnI1Um58Y9lq~<0-?pJKL%`WR zRn|J(p9FJs)<-!7)!8TsH`5l{oWg?A^QXo@;2T7En|=M~v=6@$nQB&e`Gf{bMIW2c zZC1g-oB5&oucMRe!wP4lqI9VQ_;d~FsC3WZ7crQ;&py0W%--9 z8-PHC=SJO6-i>)}VgJsB&z3KJ9 znvn(DqMk|hs9oq013cNPkD+)AG)HNQ#sL@Sc@F&M?yCTDcmW2Gy!#O(EKyLG-~It3_)2ExHh8}wWd3;m6~SnOHmP*)&p&=J?f3*(%`iQC*FVvP#};lc z{r)KX@nuN}@fW*fgBu}gNzmr*MeAkp6=4M)6o;jHPR#e$ z&dcnsFfhC=*OGePKM$9LAbf#vJ!aBQH0&{75KXZx9e`-GR0H%cvaDoTB;X+AqZA$q1AuP8{woF2rcJ3RLqQs^4{O1(I`N-nP;1v~_Dc4t>v+ zNNe3_YoqD-I2nbcL2lE^E4(#jay9QRl%RLo%6dC6~;oH2~&5XlvK; z->oO9HaGub0l*kpke<-058t;oIOWobcs}&_?yj0|rXE^~QU1P}C5Wde@XEop{=YRx zFgmQl$=-EWhPv;rTdy~|@SPGz1(YD;dt637gD;WO~I1x~Jf)Rxn7>kQqy_hxr_fY@?%R9gF!}yBme+!#J zFz?z%(asZMg8yQ1!AM+GEG2>zBme8wFM?oSC@y2fh5Nq`p$F4O|E~iJZ5}ksR>5+G z1Art&1u!yEdMRmexo^jm?A~C<>v0qQFLakLOv60~+FxUxtb!k6ODV!4rTG7N;Qne{ zy-Y#`>B2_8ni0Ei*{PP%fhDQ{J+%1l)@f(4r3ubFb`u08wZFb}4FD|=Ca_`z)+C^S z>!Z51!WLz0Tkse+dje+IMuCCpVjWhaXqZX};*5owU*vb<6mAngS;Ts_LVD{{L1_dA zr;ONof{dp(?LDxValknBB5Dm1#Al!<3iyCdfG6&ohzF?0UJzm3U(OP8hcURcUM-o; z=1CzkmvUam$pLp>X67xh{0#iVt#)A7rP2vpd=6eCUsW@en~7G*tu`$iBVwu{5K@z)VS=I8>L2ad*L1Q=;T`P80ofI5U}OArcG+l0C7 zcH$zQgS*OO_3Pa@*SeUPSPxhxM>qi8wZgpH{DRbp_9v7aV@xo}bVYRshg5aWl#bFnE`5v z?hnts!~laT>*0a{ZZ6os6hthU>k58cA4ol-)0C3lU04EWd+{E3pwU1G*8?>AHM#}; zM#K>>4-EFk+b`hEBvG#Hr^~XNs3a$Vef4k(jfz4t+)ch8ZVti- z9ETns`2H@;I8c=+b8%n`Z&Se=ay^F`3;)IGieOsQujXDohX1*|gPcriHi4@N=iLli z0X-owe<-RrWZJtFjtFAQkz4RO}F=Pmr&}FQJaJl{?Dt{@&lPMgDSij8oW-{v!kb z5`B^BmqhBGMZ8#QX;tVTS+FD%QgkEuYK{Eq4DT*|NlKQ?UDW`#6Wkb+%O@)8%gX^! zjFwraIJqi8{O(BR^AqIvld$^PLze)wG|;E2B!0b4fXY-+R9;rT2{q|t^u{XB(XY0x z=<=~hQOI#TS?^cV#7`{&2H3rbQ#t$G|mFc@?thFvL@J8A#PlQTS0_6cw^%|v$zYr5KJv1AI#wL z{={R2ge&`aN2-b4HcTrin8+pnBA(M&ayQp!^V5{!i0~fUx1pjyVEM${gDnwipEc1< zy#dxuXmD{;u+;S`X@lJK0ZyV8W#)89VhenR5WH-18u7OTZo%oCeUq z131C}Dj8OA4T;Rbm_{~b2-|?^iDgW7;oHaGgdlF2UW@8K46HYpsPrGStUuG9&CcklW|5_Fn8`sIlf|Z< zkr7^UTQTuATPK67q0QkBFDR{OhFlTl`rJYa?^%a0Bi;My@FQJNwmFUzVzdM{E_T?u zuqlKEkHU1qx+83Y-T`B-4I`n;7fz$biEQHFurwOYhV1w1(vTQrdViR)B{~6@Vj7L< z480?g9^JL{j?Z!C*N@d!#CKotQYjDsB3B3(jsGe_0a1L7e+kH_`r2@a2+u;|yEH&ox#GUXgo#&W;-0{{(87%Z=o>lJ3ds~_ zdpvHqCLh+GS+`8ofF>pGErwiIMh{gz@HQ@F$O*wMYrLDUmI}DB#*)WJf&b|{1B~4Z zUT`c(eTD2R-aR(eK&or-7|BAywKD8)Rlg85vQlH=jbb`fB#<~LAdMJHm3_bx-Bj0WJS5AvmQO-FGs7M_CGtV4rHF3k6>>T_& z#0%B|G00gU=0KnqzJ=M9_zJ1H&3Y)`;V8YQ(RHVBuk1^vq#qTk+tWztm5P4NF~|?N z_XclTCViAE-42M@Aj_hxq0BGq^InkPSlxY22CgX^jKhx`PnR3a5iQK%bNZfxs3R&4 znlW>`v}GrINQlH$kVgA{+@Co{Q2{tc$!BZrU5I^Lz{l1C5S~NKQl~w4Z7rukAMOLrWvy19h?7;?jzPtCIyIHsC)AP_ zSfLvr;C)sAU&`q?U^i_(DXGnH0l(s&#ASA`Y#$p#U=b9ASAZ9y7?1$i{-(Hd>%2rA zfo$ur?aygw#}hMW?!^kOH|ftEG4ytVWmg7*5~_mB^|**|N(cz4y;am%WibH|eL<_@+pxFBJVktFK**-*^uHBeEem z+7vEPu4JBI??*e_CqsQ`&y2a!s-jGtvGolEZ(^bze{ELSOIeqW?x+y--{q8)@%;fAdfC{dScDDX2u-5pa{6@H|J9#{Lq3u!V(r&4G3-eAd^_V*Gy4oRuEU% zC6L74O-~C7mT56B4Uc(MJYI5_3sD?deaGxsD_Q=PH5rk?g6Qoor?^o7i$i^ksS zD<_(L>KAdx)57mHTi$#U%Fjws88gYATCV95r!ewq9G3|R>XOEzCe?L` zejvfGqDYx4#fEQt0zo7p=wn|`$BMl`M$eV;>++#+poCAxCyZpTo3G3|$_tfLOGlL& z+oU1#K*J^SLTIe;rS(@|y#34;hs#HqjMkYUPnLd|kPLmh8_HJEN)080{H7Ly{6LUW zXMy~@lnTe~)0$Tp`COzWaUeJ4XYRT~95`f`j59xF$2~xGW&-Y&Myt0iPms)cGkeizir86&sH|APi6jm2ty9$U%6#0%6{9Y0lSbm zu>^G__h!N7!PF#zj^3`BoqQ{OD9V1+KGldNXzH70c$ia-32C(IYoQJ2Yp5a&rp{0x7@EsN&@h!^*vGO4mq3(jnVq zr{So$xQ1JfWj}Y3S7qm)S#*6RwCLOnqYskcx0vgvh!Fy3ffQ_J%*#K2JFlIvapeB&dXq*y%)IbP;JgBwdl0u80o!G$M7cB9oAOX| zb_R_sp_G)klkjdrt*(qNQL8wqE9%E&DRTBH%}s&O$agMnd0aI9pp5W-S-c%zC5HJD ze$Q-MTd-1I3fre#L2C|eg4D}cPT<>z&60s~3#pxjrn>lhH28Ya&3Gk}5Q1+jW6R$Q z0A}HarJ>@wqzLzATuo?@JOV|9tf{?C1*W=4SS8h)iQbP65CX+RP&KA_vChFR=1f4w zNXDN^Iv-IVwoOLHgI^bQcwB>I9^Rc6hSA{`qJnivgTED#WoASpncE#(&v1nKT4b(c zHFA&zBHMY+7Gx?VhD(w|6Pk>Se%*QL5;GccOykTFgBNWbNgI7CJpq9#*>tV&s+Z!m z1xKeGo-tO7P3Wf3rb{YJRQJRy$(*>*cAnRcB%M^0NIii|I@h7y__K*dZzs7|MwCf# zKCqgMKFvKis|wq^qLA{W>fOl;qw=5=LgoQ!mp%9A!BXA>=_lqZtupXR7oSA?AG)V^ z+>fa>Mpe_>_7hVa$ua`&WYy_8bAQbGu-Ilg)%F{J$i;BDDyOQ8$FZM)tvDZj{irR0 zfR2`;g^ZPEx-NPb*;0A}VNaYY3t9$20jg?LcU-kM@2E1)23@?ZEt{aLQNvtvbKD_h zwVhs6IEz(Xus8ezO5bV<;qI4F*JjTx#o~bQplPU)@%BU?V`mzc-MlSxK`Re0 z&)K9wpPXgcBspbp!nP?KcQ#ia-=x?hb;k)~YxR=Jg&>w&ub|*u`Y4WbQ@}%)q+C@- zb$FSXHe6r2y)Jb>oY&J$wiQmLq@=~-C^cL#?ds9j{+Lv|@+;im?x~YS8JSo#8=XLd zrIFr_>w{smZ5e;}bm*wkK6}=vN2u-BMAcmt148ELGq#s*lb=L&6OTU-Ptjq!>R0~F zxXKChYJEGG6GN(0D}=PoFvWKkQP4%x=(Qt92SVE*U z2>$slaH!xh8L(`g^}J*!`kzBnA$@=g)+Zp~>%Q;HkcIuS|M_vgupl-~zOd?Dynnyb z{wV^DW{thzB50fnQ z5$1Gw1sk*c0OZ?gGlulLo{!h!)PYDPcMr3$DHzuIbAKX&=0=;&tC2I^;97Asx@{h$)|wAy;LifLdG z%LghdJ>8RkaCXPG7ioTR1V$QIIi!L8_rd|PTc8lld{g_LeY2HY>)#tU#m`-K-ILAd z3si#*t1z6Qcwmmxd+pmdn#Fj?QUb+Sn{A#N#H?z-aYH{O-w^Mcwk{jg^(u4oDD%cG zx+&8U4e0-azj(9gak;RMbLpq$NMgq$+KZKus=M_l6*QbKkf;0FIwfVJ2K#kwbNsw{ zZTDuT?nNcbM($ETk(PyKwsML;&cj*;|FjqgWS{+3hU%L}@qOP?)0KvahUM$<(*A`T>t!mIlJ zVrj|b<7*oxt`h$fBacZP{`Cc~((FH>FcR(F=D|{n;Vpf4d^?BoJ~XZ;;8`XH1V+r`W9_C z;BwIc@$pi^q3Lg>=O^vPkRgW_tFj@3Hx2ZJ0MPtZmG>acAp1ldbmBBSZHD-JjB1v* z5>g;|gv)*!CrY0PxH+qUC1vzMv8^AMp}5j8b@}4W9$8=^TlYLFn>ggUoUjJsyW^J5 zsG4C3n!^ex0GOzD=WC|^C)%pC#@Ou&h3DsV_F&lOdk7hFaXzvzGJfH(4$=@6azuJR zZ|Y+!&AP%bpttXCDZFMV{SNG4LgR?Aj2?N_z~l0JoWEekt_6OVnN)YWL!g|LgQ9{F z;Ww30fE6vwp`06y8w@1cUk3MSE}Z=F8xOY!RapEp?QtN(S4THp)l2C&^tj(V$dQv^ z6MJi^aA8nwYc}23kf2gI#@V<{L$=Rm2~taCvCjp{nj?#+{Hkc*S1kXQv|FL<*iHE{ ztmo0Yu?xGAcqt}#Q94Wj;ISD%&YecPQ%6{={*3a>9M_T;9CqwLCa#XnDscta`*Te6 zP3QS|TKSlA>yd!Y{HiyX2k(CS0Ah+`LKWrPw`7Ar?l1>w$s&s5rN_BJ&KAo8K6e2p zue3V%tr2$*9QG&C9iZNFvlQD=Z8_MFF}Z0o!@+kC$$3Sy!2&f{Lc(v$~N(hlGH^u4tJ=i~eFPmiws z7oukxCBUpI@DU8p`xkM49Pv(2(5?2HPe(3*AUX?%^X8@<4X=HC6}FYCFm6c^V7h6cUl*HxeMGhvskHaH)bSA!yIdz5ll1^`dMwBA zTCv3LnB<@~bAR1M@H|<2prlu8*&i(@&jnx9wF%VHHjAp?1$#?Z@9lfdbmTg3+_Ztg z-w&ZX>S;DBZfsV=prFUFrj4QTiF>6#msJ_J0^a87d+giKafVT{^uJll4woAJ9!R(H zC8qUQeyAj5a~L&xdvPIQm{F?ciZ3h;LinnB0xD@AJ2r-Vd-y6W3%`hdk*#9*NmpEa z-s9AcaSO!QnSRFHzv?zM%q0i)jsYCvNV|kltJW=p4P2gYol%`7tKU>_XAteSw(I>Q zaw|Bf9#9GnuYmI_u%mZVh_vhw>DCeRgF76WTiQO)~WOyHEad5$+^uE zeU~3@vFb43j}0%A4Vs-@zgqRlLyDvy7X!8^{Q46=cHxK&5qWGLH61n%a(&BnKWGR{ z+cQ_s5Im7>fp7s68iT=1qM&(zEN0NM5TaZ=|9m;;Z3|!21A5&uVIdKEw-#HXA=WPqi0}pE-Ho`{_I{er} zU>&`XW#ia0+e!*y(mH%>s9;>&2S~W%HT6s)SET(R-Vv^OxaA&%me#76;9FB&{)6u@ zyW{1f{q(~@+>@lZjWAa!+PK@G8eVo2H&Op@CD#&)ic~bNI=EZIbu*oj)PLq0^tTUz zkiEAhpA|nkFAy(&61l&+DYZ7s9cD;?SwQTRsrn(7T{qkH;mW=2B&x8(mk8)?41_5jT#rnA?9$HA!4LWY7UK@#7=$9YjJcHwTk%h6dKB5O{`j1hO@FcTbX+}0_IIt=Ji>=U zY@ywvFMqGr;xfN@o7;vo;qrv>g_DFykk4LE*$v@}xY+L~b~laO90O~*Z;~uE?r#cf z1LN}YATqkB8O}bP$j2yF%lAc!tydY+0X-N;o68;VoVlNuU$K)S!$o*Xm033qbH~^S zK97SL))@yt26xjiH8_EBiCg!YfMT)#dhk-R{xs!VbtiRDrdN_SM#I)PlGmY;+DZq$ ztmwkP$Olq7hxv+K7f#Au!VW8n@9)khb@%5S%8rq8B9tn}WW@R{boQ_|V%-CzHO0=W z$2-3d@mozA87GJn(j$0$kgd3uB2N&^EB~s1QiAG)j`ZQiwU7$(no22H(iPh&I+MT) zBSeQD!snfjH7o%^3z3h|VPv-Gi8-f@E*j4{^Jonz{Xo|Hm)(sIbA zgj;SACoY_Iq5w5`iU*ZJ3xFQpgg5b`?SHlTxgFzf$>h0jYD68#2H=^@j~I56zwW3$ zp}j7m!i}m`d;bI<^#>1Sy=oLG&2nS5Uq0I9iaePUVdbrb-085ZCVZ=;By|ylw}OPr z1USpFyM(8g^wvYdh_tRi?SUVrUAl#<`;tfS5=1lJ(<0knm~$lULa5Xqs!uR)O^TU` zwME|@1qc4;Csx$-%qXNkwOfgHQCyQ7zQJW=%gdsDv0`pR+B!Q-J(UA>-O8aw6PwQz zWjg+>O(Ws5f|yVQJ$tcUtpA4TawUTD1jjyfMr!0A%a=xNTz8aYHjQRC50c{rE=h=A zmw7t^lG2GChjEyyIPNnv!c2E6#nU+)BEj8u`X1?v{L?>6Ylh}hzi^{c&RJ>^V-9RZFxVGmO zum~*Uu@VF100a3Dl>zEpe9EA9*O4ZyMATE54rVS5k`RGEj=X+1-@iSnr08R;U_Up~ zC%2@$X}9=upGAMjb$Rv_e(99PZsT#!dw%LL9g?Wh5hY zI`?JgWJXT#IG?51oyZ(8lZKEdmj9BJEGImE`_wO$YkhZ?)>^h$>RbvpurO1YS{ z(U1BFL|n>^E$$sdBH3Is@ka&8JEmzHMFI}xqlP6j-NGb5~6l)^j2t1Pn)oO#;&ys%2GU;|V49Ey;t8@_q1a zdQVmUxzLWm7TNCRkEo z$?^9*+8IOKHh5G%3-cpRGk7~jSAX4kOi?Ff;Yx*DpLrXQH)v?e7rarAH0|Mm|C0jg zWNOCFgU!48JtQA2@vL-yZfU8Mb&*&%ptFkmZbB4w% zf2)N?npz|7Ohfn%9V6(GT!}A{=3sjl?~i0i9UHfrmiREr8pjQx2phj8%)PxGADAxd z`8cHcg9RU0lRNNq;nx##;oDPYhE|9Xrj&4;2GZi6|M(eOTT2^w*G`q2=8k0Pe%bWe z_SlgNwO$-q_u0mX`mx|hjtJWsK(3r&N~jAaO)ZLv`CJHXU5!p)cGz!kvbcIFp|?@X zQ9gu_@0pMBM?tk*vmpj+4_mCy<<=xGH4xO-rQW5vDfem~7&9|C7;jg_1=6+$EQ+o; z8@20YUIkC#F7=E$$7ZD9?faFuci$9)YMYH9d?IFiU}lsicTSV5#=wTueXCx;?e=!2hL<$ z-USjICzh9Qi6!XL-@K<0U&FY3Mfz})fnV)9hg6}AVF!Urnu@b*^j15QWA0$z*!!cXUBx*ySYSSit|Ek%cYAEuYo9a@_}k1U2wJ1obv|%h<#a5u@L%Ds0bRKh2px>4;-?is(D4cT`nw_0IZ-JkqQb;V?#2mM{{Y zpnWM1FLpVVr!Enf>5N=0Dj zCzoe$&oE&q2Bp59N`x)zSU4Zn?LA)mmN^LOPWp}yZ1}@Iff3!>F^mY99#UUuKK*Ki zigP5x^{_f7r0-+tkh1zF=b2aJ)8Kt1C*^gA<%1;kI=K~Jq!;@ zRvdNo|GbG9;Ss6(l`a;G?tcj!HMsDJMf!q8yGj3%F7DAHWpyNailzSjzM?R+iH!83 zuq$NysDHnY3dtS~UN7Gs%~t1M5{x9;1P79AzWua!vA{od5TK(-Vo_7!>&Qr!Jo}Ge z;t6}HsYkozzjPHea3;?X^e6u#chq18>z}?g-YlF$ zT6uGB`0NmAE3Ev$$mo1eAbqdJ`qKvM`+uLI#y8v|0y@xx#*?YDsi-AZ^=W*V;ogyd zQ=}^Dp#CV|dayd%Dq4WE>IREEB|~UDvFOuOx#pTMAD+Fo&5{pzI0r=CeJ~L58M6d{ z`3?d&)umwb#odF~WX|x@LX_ofzbLIjTs3U|1bs^}mReG6r>pyb3v}a!-g8J$&;o!D zg@NBsfM#J1M%XLz{q^Bf7!my*w6Fa`!#T0)CSZ734j?fk*TNpVui}o=xh?)S9nPz! z;uD#BNc4{8?%_k1FG@4I8jo_vL$kc+jlxqbVkpj^w74Rap?pKei zt?ZHa`rEl%X5G{4dGd^cMzC0(XeCfoXS4UG?gvmbY^Fel`F1q$VJ*`O0C8qO)XEIx z(XxPNs{aiNaGT_?x80qH--DE74Q;&WSleulz^_XHui^l{hTPmIAQD*xC|17+euNR} z_c_gvT246Cyb z6B?erhIGisQ#t{|R2%1eEDbF~wDnAa>N8*vu7(K`1XgH#?q7kGr1tUQ_BO6ycoHD3 zZW~|@tsf+?bebm^D(1j*d5+LDrO!GZY+Bxe!!UOTt^cm&se`m|(LRM$yb~>sLqV zsx`@OD-AOS3DAGpcvIQWU`%H5xr1Eo8N(ar7yQMrpfIPfttHqkC2GD}jb3bV1?=q^ z@EtQPsMz^Dd4Id~m{WqeqR(Fmz+L*_pU$yrm_M_`acKTW^T`Jaj|okfAU0>@wP5w8 z_4?~)kChWM>aP8+L{%(I3X>Gjj!c}XTRDCs z-#%Y6hTTEv6cNehqovwYuKNrn(;4fZlKS--7m2J-SCpe!4x<~IIFvP5U)OU_>+wPq z#x_|l#iunr6TtPHB=DT~>-XbWGFU_TVcG7oXl&abIbS|Ku{mMk$pZ8#fKxwm#-ixs#D zW1b}_3**X*$_5Krjwqf;s2mMPrd(L#Z<60vxj=^p&xUNC)f8ZRHChCxGpu0ao5}Jp zN{khJr#qmK`<`5a9s6sC3fq+tvx)*oe(jrD&_m}(3>VF|j<)iQ>wO>cNsoNYFL^fh zrzr~0115l8r!E45n)e~fS+C}e`?i2SxzbC+K?WWG+}HJ8&>&g@$6~g>fc5NRKcXPW zs(gOM+;oVlCdLZbgaU-l+~1*FlCeuPaI-b6C*{;zeD?(@WzpmA-TznJS-(ZOb$y%| zx&;ZTA!J5cQ5q>Jky2uiZjm^IBMj-#DIpyaN+>W=($bwuO9_Z{9N=&WiD!?`^T>Js zfcLuImmlYveGmJ-_srVsyFcr@6ip#p84{DAr^ZF*MUu&LL$kpc+4I#Q`BRQhpt&l# z%ykyzd~2HhWhzqKR%sRO+yEmQg7MH7M+yGteMqNY zkMAO(SSv3|F0=GrV(ozUa@4JK=`|tdm0}GpmD?YclAh@o(2s1rqROB8+#-@0`o z${2lZ!tCI2F18&8`?E-iv<`ej+f*BAdCq8A=cl5QK?8UW%3;jSZb)Dwc}zh;E0)gw zjpL!zcFh|Y4|SzAb*WJQnFrVbct;Yq)Q<)ylHk24?U8p0xV`|Y)%M9K$Ay=$NK6pv z7PUaU4?VO_m}9ep8etydNy11C$LlR#K?kJ61cZ~naNXqZF9AQ$Ev4l-aa`04kUm># zOJ(9!N@m6tj-YmZ0QC+I*_@=)g>ijP=p!Wv=jsfXJ2i$lfKH&*fLI*rGIgros`4|| z#*3YNnpFJg8(FAaqXaI8CFO#sEo)%AdFmjnIB@1$O+N!O25)*_(@UE!k(| z5wdBB)PYh9#r(SFuU=KocJAE0#jm+^_>YX+s@JK*$e5L(+N0N>D`1kCxxAV?1mI;<-6L1Jn!}<9g-4<>z?#*{{g{5eS ztv&DUWmlyO;v#0$R*6kH`a)Ss91zS!ZQR|9oG@7-AsQFvzqilpdO@t8&sHpezDJ-T zZg>~P*i|Dt&jcwllJ3l~E29kHi-Ap+c6YQQCKBWx9JQSU>yh*E=r>bWQdp2?m1*aq zx_qG&4$Oz-*5r{aZ+UBY85z0-9{XWxQ2;MQiNVsjZ6IVg?%}lqwnS=qG0!z1V5h+T{?8BAeA~(Z(kxn&2!`n1dA|K8uwnoa1XbNe!rH`~_CPsJ$W<)$9 zMJvsCG%K|3o{r4r%}C#kb_-efCEp)QxR(#y>xPI@&Tu_%QuK}?sn2gw?< zxNZ_1zgL`WU<0m*d$}Ak?S8wrX{-rz$x-b{7H*#qa>Y8RdJABJJ8}t+Tk5V_gSJEG zYmMekWGihn2GAsJW8c$-#~n@qHVLlHr0U+pJg~pX15`4pYmZ%JgPyM9YP$gXwtyGRLC~i&*6oS0AvXAtIQIO4DHvCW{zw-AS7rI; z0IzT%s0-@`E;A}^zH^b}71klMON7P)l0%jx!vE;>Ts!Q0Pj8mKmd#M866ID>aIBy1 zy?9R-ifaN8+=iCS^IfT%h6>FhXGFBcn$-D|c{QMxz?%~X7izi+obwL2xe_9mDJ;xq zTB!Qy&@<@bAfGYU_ErYJhcBWjwtj+r)~;ZWd3gJovj1fBWGPgm=JA?HnRYCDrRVaM zrL+demo0kgwXvLjdr%(fUB>z0MsWSU3$S66Y8&X6z@SGL{W@>qylXw^^LhIKsAREs zU^QmY4MakURzE6CI)ccWS0g0`A$4q}Y0_)9DTy z2`G*W{mAVXaeM1=Z?{KGzk|Qx^fP`6$kR_!RKvnfQ)c5X=##4PGz!PK>oY>}w9CA4vm627`_A{S#79kjz88gpJWo~SGeXwV zju;o8QH#FI?$CQ14KcU6Y2mH_eUhLiER{}Yv#*$-iYfm(S|&|{6EjA@z_vw}&Z*T? z%0ycPN$pO~+EA1^Z`+h?TUnwpKI*&P&a}&{R6~GBStHWwg{WE5HNtkG7a$SXHc>_- ze0FqY6{bWN20Og63B*Mmli-|0^Tm6Tbra)_Lk1hc9`LR{X@|qD5;Qn8;g+sPn{>6aLA4W7`(5^?1;DNlj;u!`@v0itnoOj%1%Vql;8a0*()tOz3*7 zz+xR+>7X{`5#yqzSJ{*!$f{0-_HyQ=J$+=~(*IJTf-y+rDHgc-N>_I{vZ~{3;k@V^ zdm`FqWIr3d;w953GyGUz8CvUIIi{pqYj@O;XI|Ggit!EIW4>+IvcJZSxg&Zl42$Kw zp-e(sdnq-BF4(xrrQ5YB_l15gWhA(jphuq$PkW4+HybX5Z7VjO8Y1<0Se=qkDauvx zHXWYr_U(&u^osmi8TxTUmH2qn^hgXEu?OMM%9JmKXAR(2>kY>TL`Kx{O~pi1zRN`s zV}di@4iFSSi1LN1^th#}Bf=LE_13SCyr&r3QSn*tvc$!W7xZe`}zCkx6H$@=eA>p>BEMwV~I>l>hU#k z9*H82e{(qq$@HmKGBNk{RYpkORv}45OsG9 z8T#uspriR0>LWq{~%56Hf29W~# z0%3IHJeISKNUd{ft$W7G4|yw6xj&SwA67OWYYQ$3X9*|siewFULd{s=*IYmQH8$Mm zlg2Z2=j4+yph^+5-%YRGGgxLh^k*^COLgdxYTAkG9sh6|te8Fi3Z8A!Zit&E>7Ya$ zpb?nPY;R~s5hlQEk5b>2M)zMONfGR5ylR#HB?ZNwj<~THLj2@MwaYO7-Hu73k81x` znTA1};*Qu>jN-M*RSzwG_Gs1Lq$@jLB?iUd=Tx7+q3`=2u;vr-(#xrmIZ3^`-#QNz za-R)|NAc_m$Y1cyFL(zI0h~^-oC)$02D%<2R}vncw&)k6!3p`Vct(s)Q;w5=-S!Jq-?OWR)6M5Cog>IPwMd#5z{8DP8#)E3xsgAywcCG*t#N@R*&KZ(> z4L05&Eg!G`QM0QpbQ+}2R$Eim zVsi(KO~vA7COPD+WHEA6#y@`~n{5K?&%F=wPgzRZK*dZ2sFIpUvi~{^`Y{ZQdL+LD zXg*eA*_xd}U{N5c`?Xn;*He?bgua!%`RFu(krwbVe_7G^p}d!OApxAX515Hf4UB*e zg2$+yNQ~7&-U7StQBIT4xS_|agz4>m^^H&}W?Qpb@32El&?;<-zUj7Kl6T)3$eeA9 z$sCHyLO!Zj7I7YQIel4Kyq7%~3#Z?~)bDJI1qRRbg^dKID?CI&CXYNtyfymB`6Hdn zdgFbz`jV6MoHOp)4|6jwhutshfgJ9AFTylVH6ES1PlI{{r$gsiAKIPTpUywCxO@SJ zQQCvqicJt1lI#QKqY_z^YBJ|F-=i4ZDjDA85d#Wj1PfJT<3>OK0!iE? z-=|pr@q>R5L}LYttK0R5rp!l87lzX|$shYNhJ%H(K#kk?4dW^e=AU3iIHmfZ^$oi1 z%WhI7902{%Nab+&PctB10u<$&SC)U{$0uJ}q1p!Z-lPFzJvUqeXMF!UvWoeN`sAH# zHq_S@D()7h-~z-7gjn^(=8x^Bi18hf^`=}E>{BQho&uc~Pov#iNni-|f`cWxWUYtS zh;KWL_X{@s**g5h5&c-=`6dF(u_4`<<;e;Jh%73+TMenOt;US(GLcaO%Z}A(=?&GP zIN;w@fz{u}9pjWXZ&klrSZ{1~k`tTrd}HFZmN%!6ka*XA&wARTi}h2U@M!w;hQ6`j ztJxO<)t;>(e`|WXw0+p*w>CuPB^K@92?gsoFl?S=(ygdu^LXVo-yhWNtIt*Xfe($r z#@w4w*k?c(70c|l(^l1Uv6Nxk(#=Jd26=~j@gIKk$f}M7%3qwH=H2Bma(}6v@<^B^ zw(DT@bNXUr=2iO!E_-=GDz;4$rh9e(|Enf>$(_0ScQDq1yUJ~gWjSGu!PK+m6_4sg z)?n}0#$O{8MaZGoGM^6qW=%fa`=)E%S8D6Jl!1*G)g-`|Y_W7)Q*8_Wp(flz!%ow`H!)_~{gFo-Y(qm`OFx7x ztYcHkj?%305o}|DUX7ovb_qGbCi)lXL3q^ROfwOB^0J@J6EH6LpoDb{o0RS+2N?Jl zaO4gQXIZ_J=+tzhC#Qe!lhS#hkk3I_lCg|hwFvD{8!Wujx9v_QLN@=$Aa6kA2C(O< zx^7obwHH0WLQpGoC`sX2j;9TMm_|^hm=aT5PYv&F>-7tN#8wL6gsI{QP_l5ydDwom`~A#gna{zd zbiJHSc6EFXz*F+Mm-})^)Zw{P*$%Pv-0@lmb(it|kG z#_xcea2EvTJlT+S^yNq#aB4(~Q}>?kKlm(&=FUSN2Ge^J4|cwZGP@7tv<^Itj_3L$*~2I9&YBwmK;H7;-_ zbz)V>cDW58kOKp8vWxCt&gU;0fD@nH)TO!%`FKz;5a+XA-sOBwz^oI`8Q&9KULF?! z!Mr%D?;rl&KEQp!tpE3KmzQYNcN`o%IkkK8y8kb3UB5{9Q((wHkanl&FBk0zim1qH!9oO(>{ ziI?Y|@N1A#xfYxG+b-$7sxls~i9T++r@&CJmsgKz^q=n|g}5wOpx^VOb9eQ4bd=C9 zu5tWc$HeGs%I2?UQFmrE^=ITkEX0wYKX2Bmu3z{@(Zfx1W2tx%b>NzR&Y~pK-1ero(xQ;T)y@528EK zgRmp)2?wG-;ZKN(03whGB7%t!B9sUtB8db-LKG3jL5QvySOeEeT<`WBug~TFaF|mYLN_;@9AlivF#0KIM;vjK|_>?$I93hSp zpApB1FNhO*;w$27;#=Y>agDf6d`H|OZWBKezYzC{$HWujcj6Dw6Z8VTfd#MxR-g~C z1~$MJ*a3Us033l6a0Y&$Kkx@)5C8%}5QqQ+KnzF(DIgEzg9172+2sgnG;YV;Y{21897n3W=Rb(5vj$BV}A-9s-$nE3~@*sJL z{FFRQ9wCpCC&{nKQ{>m=CGtD+Hu)3zGkK4ENd8LxPX0mur6>O;Uy`pVmg+@WQ}&bt zdR3?>6I15sT2FmQZJ~BhJE^_YIqE!hfx1XtqApWcsBfvO)HUilrT>n) zMg2@Yq8?MvsXu9wrf8aG=w5Vhx({tlJJBNAo9<8h(_%W94yU8&XgZzFrVHsobQ!Ip z)pQN5p@+~~x`o!!t@Lnu0zHv_kDf$NrsvTHdOp2?UPv#am(#214tfK zabaAUzKn?RV0;)~#*gXG1Tx`F1QW}|G4V_SlgK17GA5hJX9}2Nri7_tsu>ldW@;EM z)57SOR%SRef*He%XWnC`FjE=*0%jqzh*``mVU{u-ijbx+PI9AH0urfB4&0@3JB0XEomawI48C%6xv%}a{b~rnS zoy*Q+4eWe&0lSc0#4cu+uuItw*p=*B_Cxj~b|<@w-OC( z#YJ=RTnaak%j62VL0l16!6~>A+(>Q|H<}y6jpfF1<2gMiaEP14&ERHo25vsLj9bpF z;8t?0xb@ry?l5c{(DQwG2i}o);YGX$@5#sTv3wjK&nNH_K9Nu2lX)qh!prznK8;W3Gx#FD zm@nZ=`7&P4m-B=9YQBMQk20{enXyL;H!tf`j`-MTQuzCYE>v2Zx2= zm!rh8h>!?zSX4-qI4UF}QXG;j4G)tg2S-K8q721JZH5n%gAG2(QbUt8xcj+*nbC^M z9K1LygC^PE&^MVkTu+{7s80^!&yN@xJ!$J9dWPi5qwrdZh$& zrh9Y7j5XX&Nw*xkSm=+R`27>Y7;fweApqYM8`LSmhJ&(bHas|_UsPC_;k9h7emU7r zenjpfkC9)H-;kHdZ^>)qcN9%oVG4DkT&TX3jLN42VFp=?sbVX$o!QBp$5ika^OAYZ0@l%xl;)=wdY>hth-e~)h%NJ|u2;6S zG%6d^CFV8>yT8bQ?AC%;)wX7>;mJjlI((@N+bpn zejA7+BAJj9DTItjCDMp=B15ne`Uuv7jbJO-3HE}6;J5*6a2AnG^vxl1i98}7|1896 z>?9l$J{P_eP70^+uQNi3p+C1q+tqy~QBU}7B9ufGQB9}_HBm!oh#`cQs3qzIXTe2q z#ggbJxM2~C1P?4nuT4Y)(MU8ALy2KTGtolmh*n}aF+%VbLIsJCC1eW~Lai`Dm?kU} z_TkYgyEz&P`BMg=n+v|~XQ=9CZ;0yVZ4fNDs7b^O!f!1xnRuU=LQEy55z_@9!B_CZ zTH!B<*AgOP7Cz?SV;(lk0DJ`EBN+GkT{lldd3R5PV|Ql*>TYca>+WM9yW1Il>h7#q zMl4??1es;9l30Zmw-fKg=4R!n)x=7ojfgMKE-?K(YeISTKVDf&tW#L@dGnG~TdmVJ zH7c9&n`?>nM7$xWhfVrMVmsltp4dcuNPI+WCO#&%5L=0DLYNRPL9{&y5KC6c{$p73ley({kUlJ!*2?^%;w-Kk>jnnOt z*J=QPLx3;h$8$j${}4hVnO_ycM}AyAnSUN1d`uv zDFfKbJ3uN(1L+_`s1xdi2BEP7WLkhM;sVGKnuKO7)fTf{9lH7{0wu-)iiM$Vpi~%! zMW?rO+TPP<0kl*ArSVavplbtFLaRxted!wFAsEsr)Zr$f7VikVx8nA@LNz?cLXC~8 z1I^evK|N>yji3obJWLoVj1oo*V=%~L*Mb(H1FeJ)7(s}Hal&|E3fAYT80HW|t(%j< z$t}CUk)J!4%xfG-0AJ8Tar$e*d7GqhXM{ zhvAjmAic>Zz+7Nx1M`IUgh>TMnlvVL0}H{T@;7E$pw_L%cNP=zgR%?okJ6B;ny~7y zASEUO%%k7~lZ9Cj3JaStV}ktq1&#CXHzqtH%)ei7a8Ts9ab1&K1=bUO>+oXR!D`R} z)&ygvT8Gy=U6>)v6lP(?n!OHeFe%oD;3KdZuYHb5x#kK>gr%m{Gkp)~!5*;hjqLXe z^WMt-AUI6;wSz<8Q^6q2ZwE)fQDK3wPzWi(3oBH&=vvC~#h`T4W!J2}04MQF#2#=6 zGlv0R5PR@N+*?&U128YF#tqJbbNIg1B4IK9^`;$eX(;NKC_JQs1Y^{8jAnw zOj-dQp_4)B*vB4UI1};Mp%$1LnIF2szJ?i&4ixN%32KI;J)W6|JM@4)gzakR3B91V zuvz$6*s>b>68m6(VJjx-ZP<2Lry_qCLY!=ap#l!iDbAh!5+H~>ZpJA|F>FdD`P zyM*0%)l;2P;V?d%7~ZmLCURJAW_Zj1?pCl8 zR$(zirEsJTRtrZvIUQ<3-K_8ekLQ*9IGf<85%L z@CBY~j;CLfj#%CXTZI!skitSzV#FaJy-}xbu2EL2lUlX)Ds^)}VoQr!my83UdW=E0qv2TNm}7*m+OV6&j@8iS>E(dndqx3G zfD?tUh12auvo#rOh~b83Qq6R@2nRoK2Am0J!P#&QoD1hc1Dp>Rz=gs$!dc;*a9+3| zTof(|mxU|Bx5Cv;a4~3wOW_A_8C(umz?EHLUR83EvAhgqsLVLtr5S?Fg(! zU=NWvG;1;+QYw=KXp7#)_5q?I%Ox~$}BSr8Myo&h*UWQlT zx56*Nec{1scnw|$Ey6d}oBm%(*Bp{H9 zKnc!*-~;#&K7x<&RG+|K;ZraV{s#NNKj3rtCwu|_GSv0o?2j$vHMZ}^2tb76gO>;p z7vW3z3ceMNp=^WV(TP( zk-ahH&jYQbRav@9-Kf*nXw}VwOt|8KrU=hWaFf=gjls>MFWpYsV)MgS;eGV4&HtSv z9q_=8q!Z~3`^Z&I)vXP_%w+GIb{&5$Uz z#eKWuz7xfc)*hrM=~Xrq%hgOt!e7D*!!U867{^YeFX<_o&ym4+njx?c8Adu8z7gBn3$KJf%#8<-k=PgFDYugYaB~n) zXjz;%bZB~YQ=_>-92swD2yh@1@Y99>JN>^TMJAF-WHKp*&q*1XN~R&eBG3x~3j`>W zpn?$Si9qjnC6z%AG)oG!BG4THx>HV5OzKMJ5hquZ`D6iEhya5ChX8MuSrrx`S6h4nviQ)9h*g&P3#lVp$>HP(awIv598Hcv zz!CvG6zh zA>fUGzkq*#|IN3oiB|k782)H89*L)Td zEJ=xlMc1s`$qvl>BqkoWHgXNZ;jqlmqrk(3+(3Rv*tU}!$xR60d3dxF`^e2gJOZA$ z#g$O!$YIGMNsx)fiLTCel6x@+;9Pq*xd#Cs1bh*|zxUyV;otr7oQ=`Iir9REKCGJ; z*}Ln#&&cD(v5t|SBM^W<;5%b|9A=|0tZGt?`nR&3CeL6!K8uy@Jb8h5dw2>@y^=hNBw^&gBv$~ntrAq_NT=CSbY0;gU78m^1HlLbxELvgVSKZVQpd321 zUTtQKcSbZk43E_R7q$O4Sg$Dp_MxEBGAY_(nE4|AL4LAd@ge!5E^~RG1N>Tufd@h_Xx&;guBs3!(v3q!A)L$r#CN5CYlnVia%0 zD1nkti3sE%kdHvY8;Ga?c-;sQ9wtwCR*tm^v+e&yTU3@AqQZ9|>Pb3M`DToYgy#k@ zAV&X2m#BO*3Pt~3v79Q$E3UvRPNbAn6$0f5sEjKvHLVzvcQpd)cPxlfQR=r!p+unU z-38Yf7hF#@=&42oA{*MWw}YWSX`GpGT$Z)C~v>L14G$3(AsK7tMNb3B0IgC-sIjo8JOBf zeU6D8C&>xaDWmhE&KRB7*e>Ta-sHR{bULreM(4Hto8YlPhUvDAx`DvBPPaw<@ISh( zuBqOm?qiQd{epnLje3B9(CM+LC)6{O$D*E^JQjM#i-1B~FX{#L3i~JOFY0d!hl>*t zcn^U||HVI*g|T!ulSiU?lSg|0pM6zy#dewMMvZQWDKerhXiI~CoFi$4BP0JfdxJ90 zTK|t=l(wO5I|YtmoR7ftPJxdzd28C4IJpMbmtE<;bU)e+0j!rZ5txI(T!gd1t^k#k znPZ(GW31CDdfJEfHCogx1ZE4*>ET!KE%UpX+D5gpKT~&I z!~FB+e|Fb|Ije^SC$qqT(gI5|P$2qr#^|rj!pfirDlF`9tXzoQfV4AG&+Ht3HJwRk z5%F&t7-CBTtmzy&4`+)sX6i+4bUp%$aUk=Zk3#}oL@aNoi|G;smLRb5O-4n_X$3A3 z(B<@C8Z+Qh1aK6#Y&Bg;_|TYUmkSmMtiYNZ=o^q&ic5)Rz7a|0QU6Sg=~}w+zxC3D zd%;Gz%GgUA?qy$maFMzEPmiE+7}`OPq({-C=`jd&Ag~4j%p>bM=yCLTc%2pySdYL* z*ykYdF|HzIs%vz{c)2uRs~KXtDl_lcWZ{h4@YvfvywmjP_i0>x@1Up9Q|W2+bObga zun_?qAb!|^%ciZSdUX%1Jf=FeA=_ts61|9CV#IAR0-M`FD}IKfR?Fn3#+IgfHBMcy z3K&P}8ej#z%Gi1(0$bYXHUzesQP$IIj3}?A*CDVCft_zr-bio$Z}@zS@!5*Nb|XGJ z1lgMffMBKn#>jkk%uL0}&O`w=*R0Pg-E0*4Uz6oJDC96{hH0-tTd1D~fa z&==`T^kuxQ^et$muhH(;jT1SB;8p}bLGV)q&medY!C!(1b#%|4+Og*D8V?djO=e{ z%UEq_$q4AmY4Cm)f#pGACtuyh00h2zQ$J)VrYGLdU}%P6ScYSGrW@0p!3K8zQ6mZ^nYLWUQDzj5T9}zy$;@A#eqOZxOhPz%>MZK;X7fKkN*> zsuoF@ez=0mxFK*+n1s0?AP`r0nnD7!4N8p~hYBX%WIT;+yb!qj?>2^)RU*AeQZMC%FmC^I3OIyr?4PatcGm%Ub6OF+4 z2w=B$6M1J|CIG$tK^I|%&L&J1KS5x~Wk#~Amwc{`J5j$`iP*TqB7(=6Jr$z?hE>9(t~Jy$jmCcKn0lrGfhP$3iojE2zeAZ}#(tk6 zT8JqK&xrQUdYVL<|!`2!3wh+K`11gXI9}-4^HBkHm03)VmeA&OnX7te<4UA zNDA1nI8oxUqB}PVbzR#p%sOVHQNrt)4G7W*GVRPJFb_c%XN4g}=Apcb3YE_zx%D%u{ zWG*3SfuJRVRtVQkpf!Rv2-+fOhoC)z4jY*(=J1fYPEKIHCq&Fm!UsXe&fpN@!h{!s z9=NOlJxz7kZ-T!zjLn&t^~i|#V+5T#gG1&i4i1@T%y0O>@H!*tVmiCxnud3^MK24R zF6raVbsQryuMq6l#$pk>nPbEfmSR~P*ReFY5kYqxCbqL2u@6BJc3HCji0iC~pyWbJ z@2&o_J`>}4U zJA!zq@LNItE>tWjS6|p|7FY8B$SbrlvAs7q12Z`VS1Y;4z z`@aa99jh6i3E6Bk28fM8c#FYY^kH$b*}*2T5_}{f7=~cD=^TLp>aoZo&!V~$AU2K7 zzyPu72u8NC0}+fe1LVTyu=%DSn$0r?(J_~PLJDMHCj%CNO<5@i`u!x<2pw!S%?i#*{#c7D~ ze|8Evft_YdO4yk=DZx7=#+_XZCSD=dyCQQ^0?Y7CV^T5(q_RdsXR)E@cHz3}|H?|( zb?gQspz9ILZ)34?6_^37VK=i|&46w(0b1D3ZX-7%hzkX{koF%cXQCN)w`n)OOH%t- zY{jeD{p-xh#T&Um3e#4$+&#~v(3+zSq5__4w!hVb3U_)<(Q{YDSS|@Zj*qb=46S23Az-hXG zt3|L0M{*d#p+?XQo%)#0{%XYSDS|_~aQoee+Xw7(<6*2oLaq5MBv|-&E$|gb7?HzV zT-U~7F0MBtSHaO7XF`s{RR}zM16~T(&4?V{C;Ct1EW!JtLyt|KzN;F^S#W(!P;gcz zD2BcBK8C_}2tsUJHUc1X~dtj^GFcMWOT*}JsR#;f95z>EMyHs|;&RRC;Gz;9dV+Cv`6hHG{tF!|f+9dC-dr(PW`?EI z1k0p%UNpj@d;imT>SoSLiQG~5tQ%VEjCk074rR0O9XI32+m2+l-s7J{=8 zoU@Uu?}TM2H;ij0M4ZkD%iJzl<|DWSLA>XU;0OQ2C6$|C#APCaIM+290XNx%3uxh{ znzDv*2pY4}1WQoRwT@Zb93wJ#+y!miT!c5^OqFW|w}4x0MrM%-nMIhOxTQu4Tl_Cz zEd4KwB>rZ#u>{dwUAJ+#D30sV+-eg<%l_GeS#dUUJBp2yRDk z$7=3(?ho!cf;$o1gWx_qhkMo2w6Az$T7e52@3ryR;&%xlXL*X~&C@)Czp@H2?w8@v zseIVw7Wq;Hcbmd#p5uA*H*e~8o_q6s6W^W3c}Qnpy%5}s`!a9%^H#zJ!*x}JHE+$^ z;wHQeg8SQeI|L74&bqD&)SCx&;+f9DRM_k8?p!hN%J;+g@tCs?w()KV9uj1Oah{%y zKg=_4#+i1E%wY3gd=O!~f%oQpcwgR+@6Y@5Vm^S!4*oELM-V)U;AaTp1nzSLk0ba6 zf+sc*{eAclLd1vh;d}%?fR8lpLL>O4(K=2d_!WX!++QPj8pi>$Z8g0>2tSZF?)3AS zd={V0=OFkEf@cvthv4}RK9A4m3;03=FCcgk!Al5U#>$ z-3^vD1>2*vd&nH2YkP=C{1m)7jb}5Fe~;JjlX=WRcuqeccpFa(!5hO0x(cz(H zbe3XsBP<0R>36MZ1#c`(81J?5Z3x~s>KWc=<2!H}+0@ef*$}_J^TR;nvrWXwjpjIr zQj!<=tugQgzn$N~?|d5)8SCpff_sGbui+B}vGe@RSnhk1)babwVbEh!aQ-&g;}4nd z|N1sO>hq7MpP8TH3VT;7*yC+r&z~?q{e64OPzLA;4*!c5cfy|tCZh4bVadb)hNYaS zU~-uvrW$8FWSmUR#JSTvW-pHauj8-UA2N^er>xJI-}#PX2kVaubI$1IOqp0K=T`N)d2 zvbFNF8eo-WRcX~|HO6Y5)qJakR*S8cS}n6$VYSMt-KxWCt<`#~Lso~aj#?eFI&O8s z>ZH{vtJ7BBSe>)FV0Fprw>~y~lKK?&8KUpAu+M=$SNr^FZD$>AooZcZU1VKiU1nWw zU142m-C*5hJAEt}gmcWi#Lxo7j2%}bltw!oIOrEOVT-nP4K zPg{LI+az19?M&N^w%^$PX6Iz*VdrV*ZRcYbY!_k|W*29dWS3)CVpnEYZdYMfX{WWT zvum(xvKwaCVmHlhh23tuvv%Lx-LSi9_k-PiyC?QN>>cc#?OpBN>_zsT_7eMa`x^Tp z_O%W+4z3QV4%rSP9IiRMcI@HU*U`;Ut#|Zw?C&Uc40H^3lsd{B(;PD#Gaa)X za~<;?3muCbOB^RSu5~==_|(bPDaNV72|4X`y6p7a+15GMxy<=}=lRYno!gvOJFjtG z=e)srhx0DyJ%um{?z%j^PetmE}$i~F3m1Fmk}9X79GnZp7pSyhFa>3<0mm4m(TyDGEae3tO#O0~WZ!Ukh{OM}p z>fsvaTH>m99pYN++ThycI?Q!OzgKP!ZeDJ_ZvEW?+=ARf+_Kz?+*;gP-A1^(y9c_* zy2raq+>_j;?lSi@_d)K(?xpT>_rdN8ccpu^`*`=odiQPar`#X7KXU(DM2lDvFX}Gp zDY6yWiyTGHB3DsAQKYCsG*7f$bU<`SbXas$bX;^sbX{~?bWik5^iuT7gYbYJjvn3~ z5gw5q(H^lL@g5S7BoC=afyW?^VvkY}xyN7+g@@9k+GCPOo5voHTb`t+lc$eoe^0Sz zkf%PxGt4v5Q|6iGncEltM@W^edu-4>yp=fZ_1nZcK7!8j_{Uv z5A-hbF7Yn&mU|EOR(LDDo4u!b8@v~LFZEvLy~2B)_g3%i-g~`|c%S#a>V4b$fe-D| z&Bxs*+9$y$)2F~^kWaBssZXU(m5<7&#%G96gU@K6r9OLoj`$q&Iqq}9=c3P5pX)x~ z``q@?-|_j$=bq0aU*K!&+t=5_*UQ((*UvZ7H_^AsSK~XycY*H;-&MZtz8$`6eLwcy z>bu={r|)jxy}oCBZ~MOVv-k7#^YZid^YxSZ<@pu*75SC=$^8cVjr2o)EBsdZwfpz? z5A#p-m-@^6)BOkfXZa8FAMHQRU+<6nKl4B3|E=Ety8rk7xBPGW-w{({OR=rkUhF9D zD|Qo$#Gc|fu|ixgo+zFqeqTIQJY76fJX<_hY!ELHFA^^iZxL@3?-1`2?-B149}piB z9}yoDe<408J|%t};1UoR5FL;npbU6F;DdmJ0p|n$2&4k-1N#Sx@y2yzpfoT&a8O`n zpuQ?l71$6sG_W~P7l;C91A@7Gw4VfM?KV*Bzo{&o+H$onS{25Ay(xGf9 z9~u`b3oQ>-hK>joLZ^q$44oZ%AoN)1H=!3pZ-xF6W*g=dCJQSFlZR=-v|)8&4PnE> z#)j!p*au-3!mfwi340k1!yUq-!{fpw;mP5$@bvJ^@SO1c@VfBE@L}OC;jQ5#!bgQq z2%j20BYbxFyzu$qZQ&i^Ys1%v?+^bX{LApK!oLo`8vb4QjqqFHcfy~B{~rE4{6$1~ zL{fw_LKcx8p@^6ru`FVH#IA_F5eFg;MI4DZ7V(8X;$+0v5#L0dkN73xVZ`HzUn8DH z{1NdY;^hEh031LMUbB;Nt-oB8focjB<(cj|z;6 zj7o{hjLM19=SK~SDvwe`DWj^R)KR0OmPGB2`ZVfj)S0LYQJ15xM%{?I74>7(-KYmq ze@BC8_h`>(pJ=~madc30Xmmt$RCIpypy-n5vgq>Yis;H{ZS>ISmgwQpqoT(|Pl=u$ zJu7-n^y=s}(c7YTMDL2;6MZcDc=UuSQ>w{yxT0ALAY48`D1~AVwZDDQ0oZ z-k1Y1hhh%Ld=_&&=F6B32{krDRF6W8F9sNWpRV!6mj)&qvFQI zjf>OA&4`;FH#g1@w8s{_z3v zsqq={S@AjXdGQ7DgW@aV)$v2(>*5>ZhsKYK7vd+zPl{g@zeFFuHhz8l#`q88_r@QH zKN$aM{Acms#GjA97=JmzDxq(JTY@OTDYb6^bA4)!!Y?JJi?2+u3oRwUVT#{Uo zT$Ow$xhc6Vxhwfua$oXL@;I?)qJLs;Vsqlc!~=9C$%PxND`8! zCe28iois0LLDHh6j-+)-82%Vyq?<{%lkO(n*C#zpdXn@s87B8mwoP_O zc24e_?3L`B+&@{I9GEOku1-eDvyu(T3zL^5uSi~%ygGSJ@{Z(Bk}o8GoBXSklDbIy zNkvjmskhWu+Fu$bO^_x@Q>1CqfzoVgu5_@pQd%WdNry>w(h<^8(n-?yrSqkWq)Vh9 zNY_g@NI`?OiG!OGCgHx%EFYD zDSJ~sP5CzEamq^>AtPmsjF)wn^_BU^#Ihh+s4QHTBukfN%5r4+vQk;OtU{)gRm+CS z#>?i)K9F_Dw#xR%_R9{+4$Hofos^xDospfD-PX$af)Dsqd#wOP!fIC)JR;EOkZds?_$>j?}fOpQYYRqtaZ`{L;i} zL203B;b{ZX2Bwvy$r>{)km3}V$Zu+x~ z?iukJxfu-^voqQ<4rH9jIG=GTsHpitfyJev)OFxY@2M`Z2N4_ zY`<)Ac2IVBc4T%;c3gHwc4l^Vc3$?3>?PSBWG~NNm3<-mR`$=?_p={m|C;@0_Fvhr zazGB5Czkhx}esF$7 zepG%;eq6pZe_*~cUtgO)Eq`wQ*8Jo7=kqV*U(COp|6~5W{0I4u^MA{Kp8r?=%YtqN zJqmgiSQeft{I>8~;dg~Miz~ihYaIitCGK6>lrPT>N*5Q%Q75aYq|D494|Rva;4;2$@e9FUxorAJEjH_PZU@3Mhq!^#$v?I=4}_PFfNvcJn-%YnR`ypP;g z?jU!T_m#WJJ>*_;A9=VuQXV6ZmnX`T<(2XVd9%D#K2knTu9r`czb7}y7t7n^9rCU6 zUGly11M$?U&t@XZ_6Laf0h3xe=h$^{;HfW?@`{n+^XEB++JVqSngf!Ti(As zpuDzxMER`px#jcA7nLt9UtYede0BNS@(tx5mVaFSdHIR*ljWz%PnVx9zfgX;{A&62 z@*Cy1%5M(_gZmAZ4z3wIZSa=CR|mhYaIJ`|D66QhsHxCa)K%yz##IOv6DuZHOs$w+ zvAE)ciWL=Y6&)38D~?v2skl&~zg%&(;zq>}6?ZCrs`x`eD1d@gSSaiijtUn=KZUo# zSJ7V)pa@cAD;g9N6tflc6^j&06)P3(iZzOLid~AMipz?titiLR6}J_4755Ym6ps~8 z6~9+@uk2N6QE63aU1?Y8Sm|8pTIp6Ps`RW(s#I1^s$5rjvhs=2Mj5787AS`*M=8fD z^-83irZgxQDwimiDOW1nl&h6nl-rfNlzWv2ln0epl|LyTC?6}IDxWL=QogDps(M#h zRXJ7pREevCszR$Gt759+t0Yx9RpnK~s&rK&szz6hs}iavR!y#&S~a6;c2!5!x~dIT zo2ovl+ETT>YG>8%s(n@Z162pBu2#LMcCD6FtE#6}Z>~O7eP6|^tW-8CdzGU~r1Dn< zsDf3Yst8r2Dn*s18mP)v<*5o(LsjEc6I7E_Q&clmb5sV^0#%1$OeVW^Jo>q;|A+k+ws- zLHnWhW9<&@F700Je(jgque4XR-)V1ZZ)<D#y4Urv zp04NWyVvV`)mzqE*W1vQUB>h<;W>NnIMtpB3^ zM*W`+L<7^%zah9GwqamHNrSRM)u3spZD?p1-Y}|RY=gdGLc@Cv%NzDIoNHtndo)@% z+BWuW^lJ2N^luDo3~r3aADE>z4s6VB9Mo9SC~vILH&!-IZQR}XL*xC%hmC(V!6v$i zYwF%))nwCT-{jQf(&W)3Zi#J)ZyDH9(jsrEXi>JPS~M-SEhAb+w~T8MS|+wkZkgIL zy=6WXvW=C@*PYOPrTbd7%h8;0*1zGwKp;hzlua|APj j8_{h<&k;!@az^BhC>T*>-n)R%{Fgsz{@ZmPS^ob33)#N6 delta 17367 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

a@&=*`)rTe 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 diff --git a/app/hog/hog/Assets.xcassets/Image.imageset/Contents.json b/app/hog/hog/Assets.xcassets/Image.imageset/Contents.json new file mode 100644 index 0000000..a19a549 --- /dev/null +++ b/app/hog/hog/Assets.xcassets/Image.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app/hog/hog/Assets.xcassets/logo2.imageset/128-mac.png b/app/hog/hog/Assets.xcassets/logo2.imageset/128-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..f561a58c1026f2356b52e24d2a6181d116130a39 GIT binary patch literal 2556 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 Bool { -// let process = Process() -// let outputPipe = Pipe() -// -// process.launchPath = "/usr/bin/env" -// process.arguments = ["pgrep", "-f", scriptName] -// process.standardOutput = outputPipe -// -// do { -// try process.run() -// process.waitUntilExit() -// -// let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() -// if let output = String(data: outputData, encoding: .utf8), !output.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { -// return true -// } -// } catch { -// print("An error occurred: \(error)") -// } -// -// return false -//} -// -//public func getNameByAppName(appName: String) -> String { -// let runningApps = NSWorkspace.shared.runningApplications -// for app in runningApps { -// if app.bundleIdentifier == appName { -// return app.localizedName ?? "No Data" -// } -// } -// -// let components = appName.split(separator: ".") -// if let lastComponent = components.last { -// return String(lastComponent) -// } -// -// return "No Data" -//} -// -//public func getIconByAppName(appName: String) -> NSImage? { -// let runningApps = NSWorkspace.shared.runningApplications -// for app in runningApps { -// if app.bundleIdentifier == appName { -// return app.icon -// } -// } -// return NSImage(systemSymbolName: "terminal", accessibilityDescription: nil) -//} -// -// -//class ValueManager: ObservableObject { -// @Published var last5Min: CGFloat = 0 -// @Published var last24Hours: CGFloat = 0 -// @Published var totalEnergy: CGFloat = 0 -// @Published var providerRunning: Bool = false -// @Published var top5MinApp: String = "Loading..." -// @Published var top24HourApp: String = "Loading..." -// -// enum ValueType { -// case float -// case string -// } -// -// -// func fetchValues() { -// DispatchQueue.global(qos: .userInitiated).async { -// self.fetchValuesAsync() -// } -// } -// -// func fetchValuesAsync() { -// var db: OpaquePointer? -// -// let fileManager = FileManager.default -// let appSupportDir = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask).first?.appendingPathComponent("gcb_hog") -// -// if let dir = appSupportDir { -// let fileURL = dir.appendingPathComponent("db.db") -// -// if sqlite3_open(fileURL.path, &db) != SQLITE_OK { // Open database -// print("error opening database") -// return -// } -// } else { -// print("Directory not found") -// return -// } -// -// var newLast5Min: CGFloat = 0 -// var newLast24Hours: CGFloat = 0 -// var newTotalEnergy: CGFloat = 0 -// var newTop5MinApp: String = "Loading" -// var newTop24HourApp: String = "Loading" -// -// let last5MinQuery = "SELECT COALESCE(sum(combined_energy), 0) FROM power_measurements WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - 300000);" -// if let result: CGFloat = queryDatabase(db: db, query:last5MinQuery, type: .float) { -// newLast5Min = result -// } -// -// -// let last24HoursQuery = "SELECT COALESCE(sum(combined_energy), 0) FROM power_measurements WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - 86400000);" -// if let result: CGFloat = queryDatabase(db: db, query:last24HoursQuery, type: .float) { -// newLast24Hours = result -// } -// -// let totalEnergyQuery = "SELECT COALESCE(sum(combined_energy), 0) FROM power_measurements;" -// if let result: CGFloat = queryDatabase(db: db, query:totalEnergyQuery, type: .float) { -// newTotalEnergy = result -// } -// -// -// let top5MinAppQuery = """ -// SELECT name -// FROM top_processes -// WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - 300000) -// GROUP BY name -// ORDER BY SUM(energy_impact) DESC -// LIMIT 1; -- to get only the top name -// """ -// -// if let result: String = queryDatabase(db: db, query:top5MinAppQuery, type: .string) { -// newTop5MinApp = String(result) -// } else { -// newTop5MinApp = "No data" -// } -// -// let top24HourAppQuery = """ -// SELECT name -// FROM top_processes -// WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - 86400000) -// GROUP BY name -// ORDER BY SUM(energy_impact) DESC -// LIMIT 1; -- to get only the top name -// """ -// -// if let result: String = queryDatabase(db: db, query:top24HourAppQuery, type: .string) { -// newTop24HourApp = String(result) -// } else { -// newTop5MinApp = "No data" -// } -// -// DispatchQueue.main.async { -// self.last5Min = newLast5Min -// self.totalEnergy = newTotalEnergy -// self.last24Hours = newLast24Hours -// self.providerRunning = isScriptRunning(scriptName: "power_logger_all.py") -// self.top5MinApp = newTop5MinApp -// self.top24HourApp = newTop24HourApp -// } -// -// sqlite3_close(db) -// -// } -// -// -// -// -// private func queryDatabase(db: OpaquePointer?, query: String, type: ValueType) -> T? { -// var queryStatement: OpaquePointer? -// -// if sqlite3_prepare_v2(db, query, -1, &queryStatement, nil) == SQLITE_OK { -// if sqlite3_step(queryStatement) == SQLITE_ROW { -// switch type { -// case .float: -// let value = CGFloat(sqlite3_column_double(queryStatement, 0)) -// sqlite3_finalize(queryStatement) -// return value as? T -// case .string: -// if let cString = sqlite3_column_text(queryStatement, 0) { -// let value = String(cString: cString) -// sqlite3_finalize(queryStatement) -// return value as? T -// } -// } -// } -// } -// sqlite3_finalize(queryStatement) -// return nil -// } -//} -// -// -// -// -//struct Home: View { -// -// @ObservedObject var valueManager = ValueManager() -// @Environment(\.openWindow) private var openWindow -// -// -// -// var body: some View { -// VStack(spacing: 18) { -// // MARK: TITLE -// HStack { -// VStack(alignment: .leading, spacing: 8) { -// Text("Quick Overview") -// .font(.title.bold()) -// } -// -// Spacer(minLength: 10) -// Button(action: { -// valueManager.fetchValues() -// }) { -// Image(systemName: "goforward") -// } -// Button(action: { -// exit(0) -// }) { -// Image(systemName: "x.circle") -// } -// -// -// } -// VStack() { -// -// HStack(spacing: 0) { -// ProcessBadge(title: "Highest energy\n 5 min", color: Color("chartColor2"), process: valueManager.top5MinApp) -// -// ProcessBadge(title: "Highest energy\n 24h", color: Color("chartColor2"), process: valueManager.top24HourApp) -// -// -// if valueManager.providerRunning { -// TextBadge(title: "Running", color: Color("chartColor2"), image: "checkmark.seal", value: "Provider App") -// } else { -// TextBadge(title: "Not Running", color: Color("red"), image: "exclamationmark.octagon", value: "Provider App") -// } -// -// } -// HStack(spacing: 0) { -// EnergyBadge(title: "Last 5 Minutes", color: Color("chartColor2"), image: "clock.badge.checkmark", value: valueManager.last5Min, unit: "mJ") -// EnergyBadge(title: "Last 24 hours", color: Color("chartColor2"), image: "clock.badge.checkmark", value: valueManager.last24Hours, unit: "mJ") -// EnergyBadge(title: "Total System Energy", color: Color("chartColor2"), image: "bolt.circle", value: valueManager.totalEnergy, unit: "mJ") -// } -// -// } -// .padding() -// .cornerRadius(18) -// -// Button("View more details") { -// openWindow(id: "details") -// } -// -// -// } -// .onAppear { -// valueManager.fetchValues() -// }.padding() -// } -// -// @ViewBuilder -// func ProcessBadge(title: String, color: Color, process: String)->some View { -// HStack { -// Image(nsImage: getIconByAppName(appName: process) ?? NSImage()) -// .font(.title2) -// .foregroundColor(color) -// .padding(10) -// -// VStack(alignment: .leading, spacing: 8) { -// Text(title) -// .font(.caption2.bold()) -// .foregroundColor(.gray) -// -// Text(getNameByAppName(appName: process)) -// .font(.title2.bold()) -// -// } -// } -// .frame(maxWidth: .infinity, alignment: .leading) -// } -// -// @ViewBuilder -// func EnergyBadge(title: String, color: Color, image: String, value: CGFloat, unit: String)->some View { -// HStack { -// Image(systemName: image) -// .font(.title2) -// .foregroundColor(color) -// .padding(10) -// -// VStack(alignment: .leading, spacing: 8) { -// Text(String(format: "%.1f %@", value / 1000, unit)) -// .font(.title2.bold()) -// -// Text(title) -// .font(.caption2.bold()) -// .foregroundColor(.gray) -// } -// } -// .frame(maxWidth: .infinity, alignment: .leading) -// } -// @ViewBuilder -// func TextBadge(title: String, color: Color, image: String, value: String)->some View { -// HStack { -// Image(systemName: image) -// .font(.title2) -// .foregroundColor(color) -// .padding(10) -// -// VStack(alignment: .leading, spacing: 8) { -// Text(value) -// .font(.title2.bold()) -// -// Text(title) -// .font(.caption2.bold()) -// .foregroundColor(.gray) -// } -// } -// .frame(maxWidth: .infinity, alignment: .leading) -// } -//} -// -// -// -//struct ContentView: View { -// var body: some View{ -// Home() -// } -//} -// -// -// -//struct ContentView_Previews: PreviewProvider { -// static var previews: some View { -// ContentView() -// } -//} diff --git a/app/hog/hog/DetailView.swift b/app/hog/hog/DetailView.swift index aad17b4..79d1fda 100644 --- a/app/hog/hog/DetailView.swift +++ b/app/hog/hog/DetailView.swift @@ -2,7 +2,11 @@ // DetailView.swift // hog // -// Created by Didi Hoffmann on 31.08.23. +// Created by Didi Hoffmann +// +// A few things to note: +// - We can not share the db pointer for the whole app as sqlite does not allow multiple threads to share one connection +// - Getting the data needs to be in single threads as otherwise the front end might lock up // import SwiftUI @@ -10,29 +14,60 @@ import SQLite3 import Charts import AppKit -let DB_PATH = "/Library/Application Support/berlin.green-coding.hog/db.db" +var db_path = "/Library/Application Support/berlin.green-coding.hog/db.db" + public func isScriptRunning(scriptName: String) -> Bool { - let process = Process() - let outputPipe = Pipe() + // Because of the app sandbox this doesn't work anymore. We should discuss if we drop the sandboxing +// let process = Process() +// let outputPipe = Pipe() +// +// process.launchPath = "/usr/bin/env" +// process.arguments = ["pgrep", "-f", scriptName] +// process.standardOutput = outputPipe +// +// do { +// try process.run() +// process.waitUntilExit() +// +// let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() +// if let output = String(data: outputData, encoding: .utf8), !output.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { +// return true +// } +// } catch { +// print("An error occurred: \(error)") +// } +// +// return false - process.launchPath = "/usr/bin/env" - process.arguments = ["pgrep", "-f", scriptName] - process.standardOutput = outputPipe + var db: OpaquePointer? + var running = false - do { - try process.run() - process.waitUntilExit() - - let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() - if let output = String(data: outputData, encoding: .utf8), !output.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { - return true + if sqlite3_open(db_path, &db) != SQLITE_OK { // Open database + print("error opening database") + return false + } + + var queryStatement: OpaquePointer? + + let queryString = "SELECT COUNT (*) FROM power_measurements WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - 60000);" + if sqlite3_prepare_v2(db, queryString, -1, &queryStatement, nil) == SQLITE_OK { + while sqlite3_step(queryStatement) == SQLITE_ROW { + let queryResultCol1 = sqlite3_column_int(queryStatement, 0) + if queryResultCol1 > 0 { + running = true + } } - } catch { - print("An error occurred: \(error)") + } else { + let errorMessage = String(cString: sqlite3_errmsg(db)) + print("Query could not be prepared! \(errorMessage)") } + + sqlite3_finalize(queryStatement) + sqlite3_close(db) - return false + return running + } public func getNameByAppName(appName: String) -> String { @@ -65,7 +100,7 @@ func getMachineId() -> String{ var db: OpaquePointer? var machineId = "" - if sqlite3_open(DB_PATH, &db) != SQLITE_OK { // Open database + if sqlite3_open(db_path, &db) != SQLITE_OK { // Open database print("error opening database") return "" } @@ -92,9 +127,88 @@ func getMachineId() -> String{ func checkDB() -> Bool { let fileManager = FileManager.default - return fileManager.fileExists(atPath: DB_PATH) + return fileManager.fileExists(atPath: db_path) } +//class SettingsManager: ObservableObject { +// var lookBackTime:Int = 0 +// +// @Published var uploading: Bool = true +// @Published var upload_url: String = "Loading ..." +// @Published var isLoading: Bool = false +// +// public func refreshData() -> Void{ +// self.isLoading = true +// +// DispatchQueue.global(qos: .userInitiated).async { +// self.loadDataFrom() +// DispatchQueue.main.async { +// self.isLoading = false +// } +// } +// } +// +// func loadDataFrom() { +// var db: OpaquePointer? +// +// +// if sqlite3_open(db_path, &db) != SQLITE_OK { // Open database +// print("error opening database") +// return +// } +// +// var newEnergy: CGFloat = 0 +// var energyQuery:String +// if self.lookBackTime == 0 { +// energyQuery = "SELECT COALESCE(sum(combined_energy), 0) FROM power_measurements;" +// }else{ +// energyQuery = "SELECT COALESCE(sum(combined_energy), 0) FROM power_measurements WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - \(self.lookBackTime));" +// } +// if let result: CGFloat = queryDatabase(db: db, query:energyQuery, type: .float) { +// newEnergy = result +// } +// +// +// var newTopApp: String = "Loading" +// var topQuery:String +// +// if self.lookBackTime == 0 { +// topQuery = """ +// SELECT name +// FROM top_processes +// GROUP BY name +// ORDER BY SUM(energy_impact) DESC +// LIMIT 1; -- to get only the top name +// """ +// }else{ +// topQuery = """ +// SELECT name +// FROM top_processes +// WHERE time >= ((CAST(strftime('%s', 'now') AS INTEGER) * 1000) - \(self.lookBackTime)) +// GROUP BY name +// ORDER BY SUM(energy_impact) DESC +// LIMIT 1; -- to get only the top name +// """ +// } +// +// if let result: String = queryDatabase(db: db, query:topQuery, type: .string) { +// newTopApp = String(result) +// } else { +// newTopApp = "No data" +// } +// +// DispatchQueue.main.async { +// self.energy = newEnergy +// self.providerRunning = isScriptRunning(scriptName: "power_logger.py") +// self.topApp = newTopApp +// } +// +// sqlite3_close(db) +// +// } +// +//} + class ValueManager: ObservableObject { var lookBackTime:Int = 0 @@ -125,7 +239,7 @@ class ValueManager: ObservableObject { var db: OpaquePointer? - if sqlite3_open(DB_PATH, &db) != SQLITE_OK { // Open database + if sqlite3_open(db_path, &db) != SQLITE_OK { // Open database print("error opening database") return } @@ -247,7 +361,7 @@ class TopProcessData: ObservableObject, RandomAccessCollection { var db: OpaquePointer? - if sqlite3_open(DB_PATH, &db) != SQLITE_OK { + if sqlite3_open(db_path, &db) != SQLITE_OK { print("error opening database") return } @@ -344,7 +458,7 @@ class ChartData: ObservableObject, RandomAccessCollection { var db: OpaquePointer? // SQLite database object - if sqlite3_open(DB_PATH, &db) != SQLITE_OK { // Open database + if sqlite3_open(db_path, &db) != SQLITE_OK { // Open database print("error opening database") return } @@ -401,7 +515,7 @@ struct PointsGraph: View { Text("No Data! Please enable provider app.").font(.largeTitle) }else{ Chart(chartData) { - PointMark( + BarMark( x: .value("Time", $0.time!), y: .value("Energy", $0.combined_energy) ) @@ -585,37 +699,204 @@ func TextBadge(title: String, color: Color, image: String, value: String)->some .frame(maxWidth: .infinity, alignment: .leading) } +struct CopyPasteTextField: NSViewRepresentable { + @Binding var text: String -struct DetailView: View { + func makeNSView(context: Context) -> NSTextField { + let textField = NSTextField() + textField.isBordered = true + textField.backgroundColor = NSColor.textBackgroundColor + return textField + } + + func updateNSView(_ nsView: NSTextField, context: Context) { + nsView.stringValue = text + } +} + +struct OneView: View { - @State private var renderToggle = false + var body: some View { + Text("1) Open Terminal").font(.headline) + HStack{ + Button(action: { + let workspace = NSWorkspace.shared + if let url = URL(string: "file:///System/Applications/Utilities/Terminal.app") { + let configuration = NSWorkspace.OpenConfiguration() + workspace.open(url, configuration: configuration, completionHandler: nil) + } + }) { + HStack { + Image(systemName: "terminal") // This is a symbolic representation, actual symbol might differ. + Text("Terminal") + } + } + + Text("If the button does not work please look under the Utilities folder in your Apps and start the terminal.") + }.padding() + } +} + +struct TwoView: View { + @State private var text = "curl -fsSL https://raw.githubusercontent.com/green-coding-berlin/hog/main/install.sh | sudo bash" + + var body: some View { + Text("2) Run this command").font(.headline) + + HStack(spacing: 20) { + CopyPasteTextField(text: $text) + + Button("Copy Text") { + let pasteboard = NSPasteboard.general + pasteboard.clearContents() + pasteboard.setString(text, forType: .string) + } + }.padding() + } +} +struct ThreeView: View { + @State private var showInfo: Bool = false var body: some View { - if checkDB(){ - TabView { + VStack(alignment: .leading, spacing: 10) { + HStack { + Text("3) You will need to enter your password").font(.headline) + Button(action: { + showInfo.toggle() + }) { + Image(systemName: "info.circle") + } + } + if showInfo { + Text("We are very aware that this is a risky operation. The problem is that the program needs to run as root and also the installer needs to activate the program.") + } + } + } +} + +enum TabSelection: Hashable { + case last5Minutes, last24Hours, allTime, settings +} + + +class InstallViewModel: ObservableObject { + @Published var renderToggle: Bool = false + @Published var selectedTab: TabSelection = .last5Minutes + + func toggleRender() { + renderToggle.toggle() + } +} + +struct StepsView: View { + var body: some View { + HStack{ + Image("logo2") + .resizable() + .scaledToFit() + .frame(width: 50, height: 50) + Text("Welcome to the hog").font(.title) + } + Text("It looks like you haven't installed the program that we need to collect the power measurments. Please follow these steps:") + Divider() + OneView() + TwoView() + ThreeView() + Text("4) All done. Now check").font(.headline) + + } +} + + +struct InstallView: View { + @ObservedObject var viewModel: InstallViewModel + + @State private var showingAlert = false + + var body: some View { + VStack(alignment: .leading, spacing: 10) { // Set alignment to .leading + + StepsView() + Button("Re-check if the power data is reported") { + viewModel.toggleRender() + + }.padding() + Divider() + Text("If you just want to see the interface you can also load some demo data visualises what is possible with the hog.") + Button("View with demo data") { + guard let sourceURL = Bundle.main.url(forResource: "demo_db", withExtension: "db") else { + print("Source file not found!") + return + } + db_path = sourceURL.path() + viewModel.selectedTab = .allTime + viewModel.toggleRender() + } + .alert(isPresented: $showingAlert) { + Alert(title: Text("There was an error copying demo data."), + message: Text("Please look at the logs and submit an issue! https://github.com/green-coding-berlin/hog/issues/new"), + dismissButton: .default(Text("Got it!"))) + } + Divider() + Text("You can also read our documentation for all the details under: https://github.com/green-coding-berlin/hog") + + }.padding() + + } + +} + +struct SettingsView: View { + var body: some View { + VStack{ + Text("Settings").font(.headline) + Text("Not much to see till now as everything works out of the box :)") + Text("- Upload data") + Text("- Upload URL") + } + } +} + + + +struct DetailView: View { + + @ObservedObject var viewModel = InstallViewModel() + @Environment(\.colorScheme) var colorScheme + + var body: some View { + if checkDB() || viewModel.renderToggle { + TabView(selection: $viewModel.selectedTab) { DataView(lookBackTime: 300000) .tabItem { Label("last 5 minutes", systemImage: "list.dash") } + .tag(TabSelection.last5Minutes) DataView(lookBackTime: 86400000) .tabItem { Label("last 24 hours", systemImage: "square.and.pencil") } + .tag(TabSelection.last24Hours) + DataView() .tabItem { Label("all time", systemImage: "square.and.pencil") } + .tag(TabSelection.allTime) - }.padding() - } else { - Text("Please run the power logger script first! See https://github.com/green-coding-berlin/hog for detailed install instructions.") - Button("Re-check") { - renderToggle.toggle() + SettingsView() + .tabItem { + Label("Settings", systemImage: "square.and.pencil") + } + .tag(TabSelection.settings) } - + .padding() + .background(colorScheme == .light ? Color.white : Color.black) + } else { + InstallView(viewModel: viewModel) } - + } } diff --git a/app/hog/hog/Info.plist b/app/hog/hog/Info.plist index 0c67376..852fa1a 100644 --- a/app/hog/hog/Info.plist +++ b/app/hog/hog/Info.plist @@ -1,5 +1,8 @@ - + + com.apple.security.app-sandbox + + diff --git a/app/hog/hog/demo_db.db b/app/hog/hog/demo_db.db new file mode 100644 index 0000000000000000000000000000000000000000..f5b83103f94cc952f6c61b00f5305eceb7448c20 GIT binary patch literal 262144 zcmeFad9)~MrN>u4L$~AWQjgwe{a05fDf17_yXQf&V2rFeSGM`3)%NQ08+2K=|?YIf91iy|G;-Va07fif1M+6 zj=(tr=Lno5aE`z^0_O;vBXEwuIRgKW5zw#P^VS z$2XVkP#E8Q1AFSbT39}VL8=JP+{RcH=Uxs zo%_Y?aQlMiKK#(7t8YcolRu%qTAw0sz4FD>vkrCXrCwGY?*8TS9W}c<{ST?$T}e)! z+5jH+#n-C(Y8&p(RMdZHdhp*#w*dZsSowFu^xVs{i&x+J)Ke!PUcCy-SwPNyzH|o^ zXH)KI#Ir#90POK(tldjYqAi+D_*GsxtdB^JJ zbGKvjlk2~J0sK3Eog;9Lz&Qfv2%IBuj=(tr=Lno5aE`z^0_O;vBXEwu|1S{uf|HBS zVF-pJ48ou!iV?`|Mg1$+KYhD(^!4An{@d68kL#a#?d$)&2EY7m%BA}*T>0=%Km6gV z_nv&!xBt+aKkm)@$~Vw{LVGBYFh|mr>h-c;6Y#RAU@XPPWmK0|TzT5g#<0W~vh&qC zTCyC?8VO$$Hr$X}5{M&wiErdko8^H)tjA-Q9c|<-qR>@Rta3VgO-ls+7#rQ_L|zk z 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 iE$J$5w-KOU25^~;3 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 literal 0 HcmV?d00001 diff --git a/app/hog/hog/hog.entitlements b/app/hog/hog/hog.entitlements index 0c67376..852fa1a 100644 --- a/app/hog/hog/hog.entitlements +++ b/app/hog/hog/hog.entitlements @@ -1,5 +1,8 @@ - + + com.apple.security.app-sandbox + + diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..656b8f4 --- /dev/null +++ b/install.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -euo pipefail + +GREEN='\033[0;32m' +NC='\033[0m' # No Color + + +# Define download URLs +FILE_URL="https://raw.githubusercontent.com/green-coding-berlin/hog/main/power_logger.py" +PLIST_URL="https://raw.githubusercontent.com/green-coding-berlin/hog/main/berlin.green-coding.hog.plist" + +# Download and place the power_logger.py script into the standard directory for user executables +curl -o /usr/local/bin/power_logger.py $FILE_URL +chmod +x /usr/local/bin/power_logger.py + +# Download and place the .plist file into /Library/LaunchDaemons/ +sudo curl -o /Library/LaunchDaemons/berlin.green-coding.hog.plist $PLIST_URL +sed -i.bak "s|PATH_PLASE_CHANGE|/usr/local/bin/|g" /Library/LaunchDaemons/berlin.green-coding.hog.plist +chown root:wheel /Library/LaunchDaemons/berlin.green-coding.hog.plist +chmod 644 /Library/LaunchDaemons/berlin.green-coding.hog.plist + +launchctl load /Library/LaunchDaemons/berlin.green-coding.hog.plist + +echo -e "${GREEN}Successfully installed the Power Hog Demon!${NC}" diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a81e83404dbab0b3f64c1f2d1dd99e247e573b5c GIT binary patch literal 22662 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 z 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¸^`@tnC^+`GBaz?kN|Lf)Sb7-&$zaV`Dd|JR+}8)&-O z$q^MIK(eT|iy{&X6^?-b_6J5)sEBHFtwBW(#XZAs;;4oy`7*}75&G;@KFR#1NeECChGI@I@UdD?bC zf}!caor%`u1LR_qc%5bn)t{Wq-Lx7ZRM*wY1o!s!x+I3Z+BTv?SVVEW3}^e+YbOnU z(Al@2O6-Y1^de9suJdCS?TtD7=FCqxe~#$#7rJ3D49aOi8~SLN{~Fl5TR@o5W0?H- zuKbO|V z6IKnlv^#>%bqsR5bd%hOZ?)`Q4a7iZ`i|fx<_Qo}8tvhD;n=esmIlQLJ5ifv zZ%vQyf27VZa?6OZ_{wB8XES5AmPcbrcC)Ur3fst6q$UU=e<;&nsLh?2^mio)w^^r3 zl(;CCek0_#KM}TpGVGgDy36T-4C!$g3@9wljVzu-9l}?SDT#LQgwfN#z}IG^i>>=p ztRou$;NiQDb7zas+hoG5eJ^3GFw0`v^50iM#bJ6Z_pe?BawZl((N1G@t&O<41d+Gp zzFF_Vvtzq~YBz=~zEpLrJyIyQn1rKRi110}2lqu2bOFt`Kt(&<|-0_Re9ajjfie?@8j(&sb z7Np!`bgq6TAWG39$8@v&ww6jRHcimh9#ACYtGPZ=bDr!j-6S5JT$p6|CHCm>9F$^S zbuuwPC;|+8S$c^UxKgzbQuJ0-$f)#F#!wxQBnty?f_6!Kg{xvA#!aW5yK}U3s*2wc zp^2Y|qC}*;me@ZgjAw}C*y6;uJC==i12Jk5je>pUr5rq$6!iAG-fH}8NIir()WF7~ z5R|gcS6?&=`YrMV7+z+A0F%{$N7&`5@4fwiFw5La_mv7Zm?w?i$d5Dgo}aTC)O+WsK6bIY^k znx9L!>?H6Unh6z$*0$8cp(*KB?-ZduY{qg{*SRV-#;kqipH=uCYkyC zTwNr(cz4nUG!<1d?PqbhS^2e2tFptc4%V@ftmdr_tP#*&5f$6Q-%MF@zaje)fW_$Z z&PA=vS%iu7XSDJA2nusLR%1peAh}`gX|sN}jA=n**qNYaX4C(kfLiQ4HJWq{Lu&Xf z8wtow1#vXNow=1Vro!n`_pgJn7!H#?JJ5*R@pyW`52^%uMfTixwl)COhIqQe6 z{WFRe<3;n5v(o{{Ukv%7HBJ}H;gMMnaBc1uTAd<;q!CVyfuV<8u;HXf2Jl^5o|>U& z>40iZ&osv&e%yDYQQWi@$DupHLLK?s>o4uZDYwH=$Ax1Q;tQx(i&QII+M_1Ic+%$` z-+8R{T=%FWAut!MqLZ)b=L)7rx#Q`^5s zwJ(t-AcONcqp)a?uVoSll=n|Nnx$CD)N$TK=s6>?3zi^tNNUjmSnx{g)9s5N0SOwy z!WQL#T9KPgYAd_aEDchEj{Q#qys_1YA!?;eE@My6ykdK7afJyt>Kfl*_Don%4YBVt z%neG>(M*Z7=DbSb)>uQn=4E9|0-6}=QYU1?wJQ4^LEMx{eAShww-KIn;tiT@@*?7o zLYSv28=ncs!|41ROV{jI&szq;;*r>@rZx~@l%(=rcx9~ zuUIpfqDndbrc~<8-t$zZl|%?x@rf)A~j!) zf0<+@Vu$$H;=b%mBH!GEx2%1ufE|Aat8fCz7B zk9Bl?ZwCoEXVgx93;>h<-?sL)n3r?~PXgxvaY!+3;$(>$EMMyq&q%51(z%#XsM*K+ zQR2Pdx$uaSjZ@mgsP_fNZAY3|gbdVDF)}M4o$LdBt*`I55UrFovLW>1ng)4pDUe!2 zM$j30!tsJ$#!bS&S-gG%;6EbOOyTy}Pkvrd1^ecd-L*-$s61 zo7VM9g*sCgF2W`(^@Zw^YzInN1oo@pTv-wU)7< z00f8U!qX*KLPzkKFS5mx-@*ABw4>PXt!LSnD@k#Mz$6TtmoPU=dB#c7m(mF(B`Gg_ z-VJq#O#1^C%vkWQ;L@{D-dHxo_ia71?V5015TK2U9oCb9Z+MPc*9# zvjlraz>j^ZV8fdu69ZuA|QT`4ts!JU)HD|M(Mlb3=E8W*;mF701iAL)b;nh{*j_7Hb zDw~Kj#)0_tI8cW%uNR&4*;BKkU;^)+?n!O+z6Vh^1Rsdn{#eAic!$&y)t-;)8(sJ< zP75%&>y#L|_<1M{nXx%LjrVOUx74!{I`;#;^h44BQpjHZ^?%J``&a-0RMvo-OW&kHrrMoj zwMC?NeVFXaVf-qRhSze0caWQPA1QaeyDx`3B{Ds3%E`S_dY_GFrXyYio))8W9 zt4O43!M=2I^pdB#8Xe=C&{~3?rpt^Bs`@v#d!LL{1aLVL3$s&@`BmLW?|Z?f0a47j zY~%yu{TDg*xGn^T#uFVXeE*UIG!?rNExgTQcM49r>p^?&ZG3Bvd*!ziFaQ7m00000 Y00000000000000000000000000M5eO0ssI2 literal 0 HcmV?d00001 diff --git a/migrations/20230909161250_first_db.py b/migrations/20230909161250_first_db.py new file mode 100644 index 0000000..c78a03e --- /dev/null +++ b/migrations/20230909161250_first_db.py @@ -0,0 +1,41 @@ +""" +This migration adds all the fields you need + +Migration Name: add_upload_fields +Migration Version: 20230909161253 +""" + +def upgrade(connection): + tbl_measurements = '''CREATE TABLE IF NOT EXISTS measurements + (id INTEGER PRIMARY KEY, + time INT, + data STRING, + settings STRING, + uploaded INT)''' + connection.execute(tbl_measurements) + + tbl_power_measurements = '''CREATE TABLE IF NOT EXISTS power_measurements + (time INT, + combined_energy INT, + cpu_energy INT, + gpu_energy INT, + ane_energy INT, + energy_impact REAL)''' + connection.execute(tbl_power_measurements) + + tbl_top_processes = '''CREATE TABLE IF NOT EXISTS top_processes + (time INT, name STRING, energy_impact REAL, cputime_ns INT)''' + connection.execute(tbl_top_processes) + + tbl_settings = '''CREATE TABLE IF NOT EXISTS settings + (machine_id TEXT)''' + connection.execute(tbl_settings) + + connection.commit() + + +def downgrade(connection): + connection.execute('DROP TABLE measurements') + connection.execute('DROP TABLE power_measurements') + connection.execute('DROP TABLE top_processes') + connection.execute('DROP TABLE settings') diff --git a/power_logger.py b/power_logger.py index 6af3fb4..efd6a6e 100755 --- a/power_logger.py +++ b/power_logger.py @@ -3,7 +3,6 @@ import json import subprocess import time -import threading import plistlib import argparse import zlib @@ -14,7 +13,17 @@ import uuid import os import stat - +import urllib.request +import configparser +import copy +import contextlib +import datetime +import glob +import os.path +import sqlite3 +import traceback +import importlib.util +import http from datetime import timezone from queue import Queue @@ -53,28 +62,297 @@ def siginfo_handler(_, __): DATABASE_FILE = app_support_path / 'db.db' +MIGRATIONS_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "migrations") + +config = configparser.ConfigParser() +config.read('settings.ini') + +default_settings = { + 'powermetrics': 5000, + 'upload_delta': 300, + 'api_url': 'https://api.green-coding.berlin/v1/hog/add', + 'upload_data': True, +} + + SETTINGS = { - 'powermetrics' : 5000, + 'powermetrics': config['DEFAULT'].get('powermetrics', default_settings['powermetrics']), + 'upload_delta': config['DEFAULT'].get('upload_delta', default_settings['upload_delta']), + 'api_url': config['DEFAULT'].get('api_url', default_settings['api_url']), + 'upload_data': config['DEFAULT'].getboolean('upload_data', default_settings['upload_data']), } +machine_id = None + conn = sqlite3.connect(DATABASE_FILE) c = conn.cursor() -c.execute('''CREATE TABLE IF NOT EXISTS measurements - (time INT, data STRING, settings STRING)''') +# So this is a little weird that we have this block, but it is down to having everything in one file +# and not having any dependencies. As this will make things a lot more complicated when doing the single line +# install. And I would have to add release zips etc .. This will come in the future but for version one this +# is the only dependency we need/ want so KISS! -c.execute('''CREATE TABLE IF NOT EXISTS power_measurements - (time INT, combined_energy REAL, cpu_energy REAL, gpu_energy REAL, ane_energy REAL)''') +""" +Code is copied from https://raw.githubusercontent.com/clutchski/caribou/master/caribou.py -c.execute('''CREATE TABLE IF NOT EXISTS top_processes - (time INT, name STRING, energy_impact REAL, cputime_ns INT)''') +Caribou is a simple SQLite database migrations library, built +to manage the evoluton of client side databases over multiple releases +of an application. +""" -c.execute('''CREATE TABLE IF NOT EXISTS settings - (machine_id TEXT)''') +VERSION_TABLE = 'migration_version' +UTC_LENGTH = 14 +# errors -conn.commit() +class Error(Exception): + """ Base class for all Caribou errors. """ + pass +class InvalidMigrationError(Error): + """ Thrown when a client migration contains an error. """ + pass + +class InvalidNameError(Error): + """ Thrown when a client migration has an invalid filename. """ + + def __init__(self, filename): + msg = 'Migration filenames must start with a UTC timestamp. ' \ + 'The following file has an invalid name: %s' % filename + super(InvalidNameError, self).__init__(msg) + +# code + +@contextlib.contextmanager +def execute(conn, sql, params=None): + params = [] if params is None else params + cursor = conn.execute(sql, params) + try: + yield cursor + finally: + cursor.close() + +@contextlib.contextmanager +def transaction(conn): + try: + yield + conn.commit() + except: + conn.rollback() + msg = "Error in transaction: %s" % traceback.format_exc() + raise Error(msg) + +def has_method(an_object, method_name): + return hasattr(an_object, method_name) and \ + callable(getattr(an_object, method_name)) + +def is_directory(path): + return os.path.exists(path) and os.path.isdir(path) + +class Migration(object): + """ This class represents a migration version. """ + + def __init__(self, path): + self.path = path + self.filename = os.path.basename(path) + self.module_name, _ = os.path.splitext(self.filename) + self.get_version() # will assert the filename is valid + self.name = self.module_name[UTC_LENGTH:] + while self.name.startswith('_'): + self.name = self.name[1:] + try: + spec = importlib.util.spec_from_file_location(self.module_name, path) + self.module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(self.module) + except: + msg = "Invalid migration %s: %s" % (path, traceback.format_exc()) + raise InvalidMigrationError(msg) + # assert the migration has the needed methods + missing = [m for m in ['upgrade', 'downgrade'] + if not has_method(self.module, m)] + if missing: + msg = 'Migration %s is missing required methods: %s.' % ( + self.path, ', '.join(missing)) + raise InvalidMigrationError(msg) + + def get_version(self): + if len(self.filename) < UTC_LENGTH: + raise InvalidNameError(self.filename) + timestamp = self.filename[:UTC_LENGTH] + #FIXME: is this test sufficient? + if not timestamp.isdigit(): + raise InvalidNameError(self.filename) + return timestamp + + def upgrade(self, conn): + self.module.upgrade(conn) + + def downgrade(self, conn): + self.module.downgrade(conn) + + def __repr__(self): + return 'Migration(%s)' % self.filename + +class Database(object): + + def __init__(self, db_url): + self.db_url = db_url + self.conn = sqlite3.connect(db_url) + + def close(self): + self.conn.close() + + def is_version_controlled(self): + sql = """select * + from sqlite_master + where type = 'table' + and name = :1""" + with execute(self.conn, sql, [VERSION_TABLE]) as cursor: + return bool(cursor.fetchall()) + + def upgrade(self, migrations, target_version=None): + if target_version: + _assert_migration_exists(migrations, target_version) + + migrations.sort(key=lambda x: x.get_version()) + database_version = self.get_version() + + for migration in migrations: + current_version = migration.get_version() + if current_version <= database_version: + continue + if target_version and current_version > target_version: + break + migration.upgrade(self.conn) + new_version = migration.get_version() + self.update_version(new_version) + + def downgrade(self, migrations, target_version): + if target_version not in (0, '0'): + _assert_migration_exists(migrations, target_version) + + migrations.sort(key=lambda x: x.get_version(), reverse=True) + database_version = self.get_version() + + for i, migration in enumerate(migrations): + current_version = migration.get_version() + if current_version > database_version: + continue + if current_version <= target_version: + break + migration.downgrade(self.conn) + next_version = 0 + # if an earlier migration exists, set the db version to + # its version number + if i < len(migrations) - 1: + next_migration = migrations[i + 1] + next_version = next_migration.get_version() + self.update_version(next_version) + + def get_version(self): + """ Return the database's version, or None if it is not under version + control. + """ + if not self.is_version_controlled(): + return None + sql = 'select version from %s' % VERSION_TABLE + with execute(self.conn, sql) as cursor: + result = cursor.fetchall() + return result[0][0] if result else 0 + + def update_version(self, version): + sql = 'update %s set version = :1' % VERSION_TABLE + with transaction(self.conn): + self.conn.execute(sql, [version]) + + def initialize_version_control(self): + sql = """ create table if not exists %s + ( version text ) """ % VERSION_TABLE + with transaction(self.conn): + self.conn.execute(sql) + self.conn.execute('insert into %s values (0)' % VERSION_TABLE) + + def __repr__(self): + return 'Database("%s")' % self.db_url + +def _assert_migration_exists(migrations, version): + if version not in (m.get_version() for m in migrations): + raise Error('No migration with version %s exists.' % version) + +def load_migrations(directory): + """ Return the migrations contained in the given directory. """ + if not is_directory(directory): + msg = "%s is not a directory." % directory + raise Error(msg) + wildcard = os.path.join(directory, '*.py') + migration_files = glob.glob(wildcard) + return [Migration(f) for f in migration_files] + +def upgrade(db_url, migration_dir, version=None): + """ Upgrade the given database with the migrations contained in the + migrations directory. If a version is not specified, upgrade + to the most recent version. + """ + with contextlib.closing(Database(db_url)) as db: + db = Database(db_url) + if not db.is_version_controlled(): + db.initialize_version_control() + migrations = load_migrations(migration_dir) + db.upgrade(migrations, version) + +def downgrade(db_url, migration_dir, version): + """ Downgrade the database to the given version with the migrations + contained in the given migration directory. + """ + with contextlib.closing(Database(db_url)) as db: + if not db.is_version_controlled(): + msg = "The database %s is not version controlled." % (db_url) + raise Error(msg) + migrations = load_migrations(migration_dir) + db.downgrade(migrations, version) + +def get_version(db_url): + """ Return the migration version of the given database. """ + with contextlib.closing(Database(db_url)) as db: + return db.get_version() + +def create_migration(name, directory=None): + """ Create a migration with the given name. If no directory is specified, + the current working directory will be used. + """ + directory = directory if directory else '.' + if not is_directory(directory): + msg = '%s is not a directory.' % directory + raise Error(msg) + + now = datetime.datetime.now() + version = now.strftime("%Y%m%d%H%M%S") + + contents = MIGRATION_TEMPLATE % {'name':name, 'version':version} + + name = name.replace(' ', '_') + filename = "%s_%s.py" % (version, name) + path = os.path.join(directory, filename) + with open(path, 'w') as migration_file: + migration_file.write(contents) + return path + +MIGRATION_TEMPLATE = """\ +\"\"\" +This module contains a Caribou migration. + +Migration Name: %(name)s +Migration Version: %(version)s +\"\"\" + +def upgrade(connection): + # add your upgrade step here + pass + +def downgrade(connection): + # add your downgrade step here + pass +""" def run_powermetrics(debug: bool): @@ -87,6 +365,8 @@ def run_powermetrics(debug: bool): process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True) buffer = [] + last_upload_time = time.time() + for line in process.stdout: line = line.strip().replace("&", "&") @@ -101,10 +381,72 @@ def run_powermetrics(debug: bool): buffer = [] + if SETTINGS['upload_data']: + current_time = time.time() + if current_time - last_upload_time >= SETTINGS['upload_delta']: + upload_data_to_endpoint() + last_upload_time = current_time + + if stop_signal: - process.terminate() # or process.kill() + process.terminate() + break + + +def upload_data_to_endpoint(): + while True: + + # We need to limit the amount of data here as otherwise the payload becomes to big + c.execute("SELECT id, time, data, settings FROM measurements WHERE uploaded = 0 LIMIT 10;") + rows = c.fetchall() + + if not rows: break + payload = [] + for row in rows: + row_id, time_val, data_val, settings_val = row + + settings_upload = json.loads(settings_val) + del settings_upload['api_url'] # We don't need this in the DB on the server + + payload.append({ + 'time': time_val, + 'data': data_val, + 'settings': json.dumps(settings_upload), + 'machine_id': machine_id, + 'row_id': row_id + }) + + request_data = json.dumps(payload).encode('utf-8') + req = urllib.request.Request(url=SETTINGS['api_url'], + data=request_data, + headers={'content-type': 'application/json'}, + method='POST') + try: + with urllib.request.urlopen(req) as response: + if response.status == 200: + for p in payload: + c.execute("UPDATE measurements SET uploaded = ?, data = NULL WHERE id = ?;", (int(time.time()), p['row_id'])) + conn.commit() + else: + print(f"Failed to upload data: {payload}\n HTTP status: {response.status}") + except urllib.error.HTTPError as e: + print(f"HTTP error occurred while uploading: {payload}\n {e.reason}") + except ConnectionRefusedError: + pass + except urllib.error.URLError: + pass + except http.client.RemoteDisconnected: + pass + except ConnectionResetError: + pass + + + +###### END IMPORT BLOCK ####### + + def find_top_processes(data: list): # As iterm2 will probably show up as it spawns the processes called from the shell we look at the tasks new_data = [] @@ -133,31 +475,34 @@ def parse_powermetrics_output(output: str): try: data=plistlib.loads(data) + data['timezone'] = time.tzname + data['timestamp'] = int(data['timestamp'].replace(tzinfo=timezone.utc).timestamp() * 1e3) except xml.parsers.expat.ExpatError: print(data) raise xml.parsers.expat.ExpatError - compressed_data = zlib.compress(str(data).encode()) + compressed_data = zlib.compress(str(json.dumps(data)).encode()) compressed_data_str = base64.b64encode(compressed_data).decode() - epoch_time = int(data['timestamp'].replace(tzinfo=timezone.utc).timestamp() * 1e3) - - c.execute("INSERT INTO measurements (time, data, settings) VALUES (?, ?, ?)", - (epoch_time, compressed_data_str, json.dumps(SETTINGS))) - - c.execute("INSERT INTO power_measurements (time, combined_energy, cpu_energy, gpu_energy, ane_energy) VALUES (?, ?, ?, ?, ?)", - (epoch_time, - data['processor'].get('combined_power', 0) * data['elapsed_ns'] / 1_000_000_000.0, - data['processor'].get('cpu_energy', 0), - data['processor'].get('gpu_energy', 0), - data['processor'].get('ane_energy', 0), + c.execute("INSERT INTO measurements (time, data, settings, uploaded) VALUES (?, ?, ?, 0)", + (data['timestamp'], compressed_data_str, json.dumps(SETTINGS))) + + c.execute("""INSERT INTO power_measurements + (time, combined_energy, cpu_energy, gpu_energy, ane_energy, energy_impact) VALUES + (?, ?, ?, ?, ?, ?)""", + (data['timestamp'], + int(data['processor'].get('combined_power', 0) * data['elapsed_ns'] / 1_000_000_000.0), + int(data['processor'].get('cpu_energy', 0)), + int(data['processor'].get('gpu_energy', 0)), + int(data['processor'].get('ane_energy', 0)), + data['all_tasks'].get('energy_impact'), )) stats['combined_power'] += data['processor'].get('combined_power', 0) * data['elapsed_ns'] / 1_000_000_000.0 for process in find_top_processes(data['coalitions']): c.execute("INSERT INTO top_processes (time, name, energy_impact, cputime_ns) VALUES (?, ?, ?, ?)", - (epoch_time, process['name'], process['energy_impact'], process['cputime_ns'])) + (data['timestamp'], process['name'], process['energy_impact'], process['cputime_ns'])) conn.commit() @@ -170,7 +515,12 @@ def parse_powermetrics_output(output: str): args = parser.parse_args() if args.debug: - SETTINGS = { 'powermetrics' : 1000 } + SETTINGS = { + 'powermetrics' : 1000, + 'upload_delta': 5, + 'api_url': "http://api.green-coding.internal:9142/v1/hog/add", + 'upload_data': True, + } if os.geteuid() != 0: print("The script needs to be run as root!") @@ -182,13 +532,21 @@ def parse_powermetrics_output(output: str): stat.S_IROTH | stat.S_IWOTH) + # Make sure the DB is migrated + upgrade(DATABASE_FILE, MIGRATIONS_PATH) + c.execute("SELECT machine_id FROM settings LIMIT 1") result = c.fetchone() - if not result: - c.execute("INSERT INTO settings (machine_id) VALUES (?)", (str(uuid.uuid1()),)) + if result: + machine_id = result[0] + else: + machine_id = str(uuid.uuid1()) + c.execute("INSERT INTO settings (machine_id) VALUES (?)", (machine_id,)) conn.commit() run_powermetrics(args.debug) c.close() + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a567b51 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +astroid==2.15.6 +caribou==0.3.0 +dill==0.3.7 +isort==5.12.0 +lazy-object-proxy==1.9.0 +mccabe==0.7.0 +platformdirs==3.10.0 +pylint==2.17.5 +tomlkit==0.12.1 +wrapt==1.15.0 diff --git a/settings.ini b/settings.ini new file mode 100644 index 0000000..0bdde86 --- /dev/null +++ b/settings.ini @@ -0,0 +1,5 @@ +[DEFAULT] +api_url = https://api.green-coding.berlin/v1/hog/add +upload_delta = 300 +powermetrics = 5000 +upload_data = true \ No newline at end of file