pax_global_header00006660000000000000000000000064142175116140014514gustar00rootroot0000000000000052 comment=b34b18ce99700cb6612c208f42fd63587f570f77 extension-manager-0.3.0/000077500000000000000000000000001421751161400151405ustar00rootroot00000000000000extension-manager-0.3.0/.github/000077500000000000000000000000001421751161400165005ustar00rootroot00000000000000extension-manager-0.3.0/.github/workflows/000077500000000000000000000000001421751161400205355ustar00rootroot00000000000000extension-manager-0.3.0/.github/workflows/main.yml000066400000000000000000000010361421751161400222040ustar00rootroot00000000000000on: push: branches: [master] pull_request: name: CI jobs: flatpak: name: "Flatpak" runs-on: ubuntu-latest container: image: bilelmoussaoui/flatpak-github-actions:gnome-nightly options: --privileged steps: - uses: actions/checkout@v2 - uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4 with: bundle: extension-manager.flatpak manifest-path: com.mattjakeman.ExtensionManager.Devel.json cache-key: flatpak-builder-${{ github.sha }} run-tests: true extension-manager-0.3.0/COPYING000066400000000000000000001045141421751161400162000ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . extension-manager-0.3.0/NEWS000066400000000000000000000040011421751161400156320ustar00rootroot00000000000000# NEWS ## 0.3.0 Second feature update to extension-manager ### General - Add new app icon ### Features - In-app updates - Display comments and reviews - Display extension errors to user - Handle 'out of date' extensions - In-app release notes on first run - Allow installing unsupported extensions - Option to sort extensions by enabled status - Focus search entry on first open ### Maintenance - Added text-engine as a dependency for displaying markup - Add badges for build, version, license, downloads to readme file - Use latest meson features - Run appstream validate test without network ### Translations - Adds context to various translation strings - Adds Norwegian Nynorsk - Adds Indonesian - Adds Occitan - Updates Spanish - Updates Italian ## 0.2.3 Minor update - Various translation updates ## 0.2.2 Minor update - Various translation updates - Fix special characters in search results ## 0.2.1 Hotfix update - Fixes crash when uninstalling extension - Makes details-view more robust ## 0.2.0 First feature update to extension-manager ### General - Support for i18n and translations ### GUI - Dark Theme - Allow overriding system theme - Add new details view for online extensions - Display screenshots in extension listings - Show supported shell versions ### Local Management - Display system and user extensions separately - Sort alphabetically - Global extension toggle - Link to new details page ### Browsing - Avoid searching on start-up - Add progress indicator - Sort search results - Handle no results found ### Internal Changes - Restructure of directory layout - Use gdbus-codegen for dbus interface - Selectively update rows rather than recreating model - Rewrite GUI using Blueprint and MVC pattern - Use debug output and reduce logging - Performance and stability - Enforce shell version compatibility ### Translations: - German - Spanish - Italian - Japanese - Dutch - Polish - Brazilian Portuguese ## 0.1.0 Initial release of extension-manager extension-manager-0.3.0/README.md000066400000000000000000000074461421751161400164320ustar00rootroot00000000000000# Extension Manager [![Build Status](https://img.shields.io/github/workflow/status/mjakeman/extension-manager/CI)](https://github.com/mjakeman/extension-manager/actions/workflows/main.yml) [![Release Version](https://img.shields.io/github/v/release/mjakeman/extension-manager)](github.com/mjakeman/extension-manager/releases/latest) [![Downloads](https://img.shields.io/badge/dynamic/json?color=green&label=downloads&query=downloads_total&url=https%3A%2F%2Fflathub.org%2Fapi%2Fv2%2Fstats%2Fcom.mattjakeman.ExtensionManager)](https://flathub.org/apps/details/com.mattjakeman.ExtensionManager) [![License (GPL-3.0)](https://img.shields.io/github/license/mjakeman/extension-manager)](http://www.gnu.org/licenses/gpl-3.0) A native tool for browsing, installing, and managing GNOME Shell Extensions. Written with GTK 4 and libadwaita. ![Screenshot of the main GUI (light mode)](data/screenshot-combined.png#gh-light-mode-only) ![Screenshot of the main GUI (dark mode)](data/screenshot-combined-dark.png#gh-dark-mode-only) ## Features The tool supports: - Browsing and searching extensions from `extensions.gnome.org` - Installation and Removal - Enabling and Disabling - Updating in-app - Screenshots & Images - Ratings & Comments - Translations ([add your language!](https://github.com/mjakeman/extension-manager/issues/27)) If there's something you'd like to see, contributions are welcome! ## Installing Flatpak is the recommended way to install Extension Manager. You can get the latest version from flathub by clicking the button below. There may also be independently-maintained packages available for your distribution. ### Third Party Packages You may also be able to obtain Extension Manager from your distribution's package manager. Note these packages are maintained independently and thus may differ from the official version on Flathub. Please report any issues experienced to the package maintainer. [![Packaging status](https://repology.org/badge/vertical-allrepos/extension-manager.svg)](https://repology.org/project/extension-manager/versions) ## Translations Extension Manager has been translated into several different languages. Ideally, the program will respect your system language out-of-the-box. However, you may need to take some additional steps in order for flatpak to recognise your chosen locale. The following workaround may work for you: Set the languages you wish to use explicitly (e.g. `en` for English, `es` for Español): ``` # Optionally add --user if installed in a user prefix flatpak config --set languages 'en;es' ``` Then update: ``` flatpak update ``` Now Extension Manager should respect your system language. ## Using Unsupported Extensions GNOME Shell will not load extensions that were not designed for your current version. You can override this behaviour by manually disabling GNOME Shell's version check. Extension Manager will respect this preference and allow you to use unsupported extensions fully. Note that unsupported extensions will likely not work as intended and may introduce instability to your system. The version check should therefore be disabled at your own risk. Turn off the version check and allow unsupported extensions: ``` gsettings set org.gnome.shell disable-extension-version-validation true ``` Use the default setting and return to safety: ``` gsettings reset org.gnome.shell disable-extension-version-validation ``` ## Building The easiest way to build is by cloning this repo with GNOME Builder. It will automatically resolve all relevant flatpak SDKs automatically. If you run into issues, make sure you have the [`gnome-nightly`](https://wiki.gnome.org/Apps/Nightly) flatpak repository installed. extension-manager-0.3.0/com.mattjakeman.ExtensionManager.Devel.json000066400000000000000000000034611421751161400254140ustar00rootroot00000000000000{ "app-id" : "com.mattjakeman.ExtensionManager.Devel", "runtime" : "org.gnome.Platform", "runtime-version" : "master", "sdk" : "org.gnome.Sdk", "command" : "extension-manager", "finish-args" : [ "--share=network", "--share=ipc", "--socket=fallback-x11", "--device=dri", "--socket=wayland", "--talk-name=org.gnome.Shell.Extensions", "--talk-name=org.gnome.SessionManager" ], "cleanup" : [ "/include", "/lib/pkgconfig", "/man", "/share/doc", "/share/gtk-doc", "/share/man", "/share/pkgconfig", "*.la", "*.a" ], "modules" : [ { "name": "blueprint-compiler", "builddir": true, "buildsystem": "meson", "sources": [ { "type": "git", "url": "https://gitlab.gnome.org/jwestman/blueprint-compiler.git", "commit": "6576e0283757a58f92227811874406e025dbd98a" } ] }, { "name": "text-engine", "builddir": true, "buildsystem": "meson", "sources": [ { "type": "git", "url": "https://github.com/mjakeman/text-engine.git", "commit": "379437b2b589a9414985dec9136b7b48bae76f9e", "tag": "v0.1.0" } ] }, { "name" : "extension-manager", "builddir" : true, "buildsystem" : "meson", "config-opts" : [ "-Ddevelopment=true" ], "sources" : [ { "type" : "dir", "path" : "./" } ] } ] } extension-manager-0.3.0/data/000077500000000000000000000000001421751161400160515ustar00rootroot00000000000000extension-manager-0.3.0/data/com.mattjakeman.ExtensionManager.appdata.xml.in.in000066400000000000000000000076171421751161400275500ustar00rootroot00000000000000 @app_id@.desktop CC0-1.0 GPL-3.0-or-later @app_title@ A utility for browsing and installing GNOME Shell Extensions. Matthew Jakeman

A utility for browsing and installing GNOME Shell Extensions.

Features:

  • Browse extensions.gnome.org right inside the app
  • Manage the extensions you already have installed
A utility for managing GNOME Shell Extensions https://raw.githubusercontent.com/mjakeman/extension-manager/master/data/screenshot-combined.png?token=GHSAT0AAAAAABQAZ3HOIYZECGZ6OIPZYE4IYPCKHVQ Browse extensions.gnome.org right inside the app https://raw.githubusercontent.com/mjakeman/extension-manager/master/data/screenshot-browse.png?token=GHSAT0AAAAAABQAZ3HOZ6FIJC5TTAO6FSN6YPCKI3A Manage the extensions you already have installed https://raw.githubusercontent.com/mjakeman/extension-manager/master/data/screenshot-installed.png?token=GHSAT0AAAAAABQAZ3HODHOYG7PH5I2RBLQSYPCKI3A @app_id@.desktop https://github.com/mjakeman/extension-manager https://github.com/mjakeman/extension-manager/issues Extensions Shell extension-manager

The second feature update to extension-manager. Highlights include:

  • View comments and reviews
  • Support for in-app updates
  • Better handling errors and out-of-date extensions
  • Allow installing 'unsupported' extensions
  • Display release notes on first run
  • New app icon
  • Optionally sort extensions by enabled status
  • Translation updates
  • Performance and stability

Translation updates

Translation updates

Fix special characters in search results

Fixes a crash that sometimes occurs while uninstalling an extension

The first feature update to extension-manager. Highlights include:

  • Dark theme and support for overriding the system colour scheme
  • Shows screenshots in extension listings
  • Shell version compatibility check
  • Localised into seven languages
  • Sort search results
  • Global extension on/off toggle
  • Displays user and system extensions separately
  • Performance and stability
extension-manager-0.3.0/data/com.mattjakeman.ExtensionManager.desktop.in.in000066400000000000000000000002201421751161400267670ustar00rootroot00000000000000[Desktop Entry] Name=@app_title@ Exec=extension-manager Icon=@app_id@ Terminal=false Type=Application Categories=GTK;Utility StartupNotify=true extension-manager-0.3.0/data/com.mattjakeman.ExtensionManager.gschema.xml.in000066400000000000000000000020631421751161400271260ustar00rootroot00000000000000 'use-default' Colour Scheme Preference Whether to follow the system colour scheme or force either light or dark mode. '@app_version@' Last-Used Version The last-used version of the app. If the saved version does not match, the "What's New" dialog is shown. false Sort Enabled First Display enabled extensions first in the installed view. extension-manager-0.3.0/data/icons/000077500000000000000000000000001421751161400171645ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/com.mattjakeman.ExtensionManager-symbolic.svg000066400000000000000000000016601421751161400300460ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/com.mattjakeman.ExtensionManager.Devel.svg000066400000000000000000000161731421751161400272720ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/com.mattjakeman.ExtensionManager.Source.svg000066400000000000000000005416071421751161400275000ustar00rootroot00000000000000 Adwaita Icon Template Adwaita Icon Template Hicolor Symbolic battery is full and there is no a/c connected. extension-manager-0.3.0/data/icons/com.mattjakeman.ExtensionManager.svg000066400000000000000000000062501421751161400262270ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/000077500000000000000000000000001421751161400206235ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/hicolor/meson.build000066400000000000000000000000611421751161400227620ustar00rootroot00000000000000install_subdir('scalable', install_dir: icondir) extension-manager-0.3.0/data/icons/hicolor/scalable/000077500000000000000000000000001421751161400223715ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/hicolor/scalable/actions/000077500000000000000000000000001421751161400240315ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/hicolor/scalable/actions/clock-alt-symbolic.svg000066400000000000000000000014001421751161400302350ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/dialog-question-symbolic.svg000066400000000000000000000011511421751161400314730ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/hicolor/scalable/actions/error-symbolic.svg000066400000000000000000000006511421751161400275240ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/external-link-symbolic.svg000066400000000000000000000014341421751161400311500ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/globe-symbolic.svg000066400000000000000000000132241421751161400274630ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/go-next-symbolic.svg000066400000000000000000000012251421751161400277520ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/go-previous-symbolic.svg000066400000000000000000000012311421751161400306450ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/puzzle-piece-symbolic.svg000066400000000000000000000073001421751161400310050ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/settings-symbolic.svg000066400000000000000000000116701421751161400302360ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/software-update-available-symbolic.svg000066400000000000000000000007361421751161400334270ustar00rootroot00000000000000extension-manager-0.3.0/data/icons/hicolor/scalable/actions/star-filled-rounded-symbolic.svg000066400000000000000000000046741421751161400322500ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/hicolor/scalable/actions/star-outline-rounded-symbolic.svg000066400000000000000000000076161421751161400324670ustar00rootroot00000000000000 extension-manager-0.3.0/data/icons/meson.build000066400000000000000000000005301421751161400213240ustar00rootroot00000000000000icondir = join_paths(get_option('datadir'), 'icons/hicolor') install_data( '@0@.svg'.format(app_id), install_dir: join_paths(icondir, 'scalable/apps'), ) install_data( 'com.mattjakeman.ExtensionManager-symbolic.svg', install_dir: join_paths(icondir, 'symbolic/apps'), rename: '@0@-symbolic.svg'.format(app_id), ) subdir('hicolor') extension-manager-0.3.0/data/meson.build000066400000000000000000000041421421751161400202140ustar00rootroot00000000000000desktop_file_in_config = configuration_data() desktop_file_in_config.set('app_id', app_id) desktop_file_in_config.set('app_title', app_title) desktop_file_in_config.set('app_version', meson.project_version()) desktop_file_in = configure_file( input: 'com.mattjakeman.ExtensionManager.desktop.in.in', output: '@0@.desktop.in'.format(app_id), configuration: desktop_file_in_config, ) desktop_file = i18n.merge_file( input: desktop_file_in, output: '@0@.desktop'.format(app_id), type: 'desktop', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'applications') ) desktop_utils = find_program('desktop-file-validate', required: false) if desktop_utils.found() test('Validate desktop file', desktop_utils, args: [desktop_file] ) endif appconf = configuration_data() appconf.set('app_id', app_id) appconf.set('app_title', app_title) appstream_file_in = configure_file( input: 'com.mattjakeman.ExtensionManager.appdata.xml.in.in', output: '@0@.appdata.xml.in'.format(app_id), configuration: appconf, ) appstream_file = i18n.merge_file( input: appstream_file_in, output: '@0@.appdata.xml'.format(app_id), po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'appdata') ) appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test('Validate appstream file', appstream_util, args: ['validate-relax', '--nonet', appstream_file] ) endif schemaconf = configuration_data() schemaconf.set('app_id', app_id) schemaconf.set('app_version', meson.project_version()) schema_file_in = configure_file( input: 'com.mattjakeman.ExtensionManager.gschema.xml.in', output: '@0@.gschema.xml'.format(app_id), configuration: appconf, ) install_data(schema_file_in, install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas') ) compile_schemas = find_program('glib-compile-schemas', required: false) if compile_schemas.found() test('Validate schema file', compile_schemas, args: ['--strict', '--dry-run', meson.current_source_dir()] ) endif subdir('icons') extension-manager-0.3.0/data/screenshot-browse-dark.png000066400000000000000000004612201421751161400231570ustar00rootroot00000000000000PNG  IHDR47sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|T%L![\4bʦR{Vk׫j[G}V^ֽBVpaW0ddB9?&sLf_a9ߙd|%OfG *  YAtq v"eQH NEPH\ 9a!(t=aV;pg ;n{ z*ng p +nCYĊ?7l 7!Yg]p-DhVxf!<+,x?@x=gS'=IO z,HLݞ{C1ԙ~A`w{)7v>8G;uO 1hy>B(9z.#[l՘\Ls9!¤u 3re+#ғ/Af:Z YP3EPs 3D-K%T`P3P 3c$?HlȗP0&f03sYڟk+Vpӌq;5@8\=_ 2 1>@[5:s6j&*qf&s|GȘ9 5 !Tbr<2g+B96p-a%$Q׊!L6Eg.r/S\c6MBB_.l鄥M|xE *61`P303cSɵ"LD>jh@[tdAf*J%Ll\%Ԍ`*B 3m/lDK4HJ&X䜘%!Brf*3[snrXR *3FfZP3G[ 3Z}tP+cdf&MBF.[G*af"bDBӮd 2el*-iCJ l(032jḻ~pel=V(f!\ vL 23ٶ6#Zv֥lf2Ԥl8d:3af:UnLؗN\7ھTif !T񇙉'93ck D 21fcƻ_W 5 XO{h]m=Sd*_ K 5TO3f;Le͞~-W3U˙ 6 !$쁲mi!03 3I= U9_-d 6j7=2쩡P!TLUf2Afsi&2#-^XTkf3Ԥl )߭f3f*uUS5µ*T]BM ߭fsf&dfb.d;@jLLufrCMZf@O ә73af"U*M=w<g ㅈDBLO@+VHh}bM[+4x0R002dLZ324ZϦPDlTxljR "ŪN  S 6SiAP*4@03bsw2\MfxՖPO 2XSm50xF3RONȵlb¿X _} 5z@)DhI5̌F*^0)E' 6*6:4sQPlU%g"-c=Z8Flx-%jR=!*03ںTD2cBd*E-/9,ۡ!e~Tkjz)_fhK$̌l-VU`h ^st.Ǫ _DBdf:$LRw4:3afcnGJ3hHbdufd苸O"U5!䏗x-_hlxXUy3 3#[ 2C$9E M)M'-Z詐}BLj=h辉",B^03VD2#;;Tx>||]18?tWmCM4s;ATl:af:$a!IÆ ;udm60ea~7{ޭٳu;dfp]`3鄚J3k̮1ㅙѶE[&fF, >x\.D@{Z[[644~ŮL$Ԍ㬋\mіďthaf|Ѫ9_/cذaG0লMӔU{{^|>~L۽.@!&.!)á---466Qi*P٪>fpYjƚ3P*#LX]3ՙɄ֧f:$q~߫WҢ6dBIIt:u_}˗_mh[$yzHxH*Mt@Ug&3ofhhfj?kӁ03f̷o mmmUKK^o>á2\.IVv?\0 )c|uUIf{Y@3̮Xg3W0)-V__cMM,|jjjRKK5@f~pp8+**WWWW744@Z$+n L8\.D3j5c9lhY&ɘ0aozu$߿__}|>_>OfPii-[CBPfĺe#LWUfP޿nf639n3㵚fF[f6a„TTTL$ǣ $INS%%%vu5cB ֒,@ƒ6ͮ1mQ֥Sjxf;37+3H{{LTIIJJJ~֮|R`Ҍ-QNA1VAdhv}BjXfB\cƌVMM͕R207[:NGyyg۷o_@rTUFbU,H:q&R%ml$[uu-R`LǓrhlæ@Px9}_nˉ1)2.u@3S5Ak"~")~dK3~/d$cܸq8NSSSSȽ&|>9NqPH,DꜭDvdF.'ZٕleO=#(p$&3V`34 ]^zMf@>v\.9N9f^*ϗ!tYzR^&~+}:0OMVFѾKLfhLjvʜ=Fwܙ?O$3צKm7HRkkڒ<dnW^ԧOn9NL G ÐV>}ԫW/| 6J:TiF~Sed+SJVC, =f tHr :thYYIjiiIYӧJJJ=JJJԧO{(qCCH${t[vаh.v+ !lfH$jIsD"[:$HIVoiݮ|@JJJ+uЌ(v\0}h%|@dqWUm.61HB@\|@ \.<Oi3wZrld/f໿MjJ~vi{=;> YGGmjP$cl7.Q7suTlLythjdlrI|It:=) }G6tl'J~Nb̮F[aIֆ `ё}Df"fǗ=Tmt.I*@PKuي6tMl6C~Cq8OOg نNQ{l5=t 1͈ #jO4wU7/X-l69N9Nvva]Ki4M|>|>ಅxهTi_ CK$M&Le|(q%&_)1S9~"c7fr)6E.bb?JQ+ Ym\3,m}GI}G˨!GOACFlr\r\]~`)nRIjmm-p3ZJ}6I>2өL$M'feh"LN"mK4<ZFČՊ6V&tevZ(Af 9`9 uk(ѐ>]xfjgO[v{Mni-ji7Nwʿ%V>`vP2CCڿ<OA"3hedf%mbdEhU=>Lfb6޺O$@aT.{2j=DT_ZAX7k֑60CjV;4@PϏ=g 4!jOQ3Zwgܳ! v-Tx/hDHк\/~N;О{>㼍(V?:mmmz'URRs=W˖- ^l/_kܹjoo9眣kiӦA=XzꤓNU;vΝ;vZڼys @?0Xaf 4MN>&֖{`L-GҼxs&ΐ $D|fn555{Vbsh&*ae=*ҠA{8t熭kll_zJcǎ$+/K |'_ư}kҤIY}8˥:HGyKu7n/iݕwDUgJΖL5.`Rdc)[ߑ2a 6MFJKKy|%ht\@8qY_ӧOZB IDAT0%%%Ke/u5hÆ ҈#5/ǣ#FO>ڰaꪰP0 ?kIK'pʼxlC{IjvJ X=eMY)1KPfRc.p=2,ɓ'oV_9`uwjbZ;v{~O+++ӫX>lm ̙3sϥ>G;vaի;0y5j'9sd6xbеhՙ_2#{kT #{͏ɔ!0d4AaݜN88|I͞=[ovt5hO<1\.t_ VhJM7ݔtπtM7ex2p38㌰JLinnVssРzK]w>sk04rȌTUK~F"3e)MUNVS:,za!&#:~o_.+L(8PvѤ;b{ڀ2~L ջʊ묳 b[4e믿87t 7h…;?kj5JW#:U˖-l|Y?/2^9"J IUi̽=,DSee@8zuj…aM0Azk:TkkkZ2Crk6ޢ 4 #ּy4`555OnיgӧkСzOk^{r}֔)S4p@ 0@ڳg zبɓ'kٝqo$iat 'hʔ)P5ڪG逸R~ VCCf̘O>YC ݻ|r;i$M>]#FPUUZ[[uV-[Ls΍;Є _W?i|P}/R}a\.=֛q ,w|ɚ8q맚y^ݻW۶m|w:=0sLMDO<4fz6lXFnjE=P}z޽5TTd~:*}k>}ϟp{Sss;0\v6lܹsuVva:쳭 ЕW^K/T^WR`~ ^-CuuuramlCVLJ=׏?^x}Wӧ{++ַ{բEtQGg? ?,Y۫@j\ާ`w#[Q:KUffdfLRƞe]=.D,$,guc-ϛ7O/U^^fk֫iZaܾ}oߞ]|ŝmٲEV|Z?rȌ'NԤIz(wo~W$UWWkذaVرch]V?cŊz筹k\ֵ^GrzC9D3gδ7mڤ+ºW^EwvCɓ*-ZVIZWWg˭ּǪt8^C:Cc mkfJ[;v찪ZCs1a!O>6+WjΜ9馛$r;0}'QI@\i*:S VjK"X;XI$Al 2fJEh稸 ǎ>hO}ݧb k5kVؼoy0S T-Z(l:Wa3gN9唰9"swU[[9^=ذv1 5jTض?񏝪ȏ.H'xbW0wi[@Uc䶋.(93lt9$4=5̔I&U!?S{vzs,dɒq*hֶ'Z9om-V{['xUaKd_ m+),Tt?3;:nciͣiIsΝ;M4x7ARĨLO-qt+;vУ>*ͦ+"cǭ/߯ٳgg츩C6rι7|S_|JJ1bI_|EW_ #/6M&L׿u1B Puu\.5Iamp3aСaߺO>}ۇrHضիWgf`Ț[{yaiӦMaٳG{V>}p3RuulV JRCCCs 64 CI'}{\6M'|rk3c l21\dW_iʕV(hK.糞n+W .]aÆYFm۶M˖-ӂ :?r'x" mT@|EUi*BVcڋJ>}t ;!hرa˹MTccqK.EBMGAȪ;vY֡-Zd555:蠃`;vкu~?$UVVjÞ۷z+؛6m/K͚5˚{7h9sfΜo~c Ρ}%}֯$wX'wuq)Ԛw˜@sڴi` [',pWݻ`r矏 7ܠn!N) k.}ǩ8G^j;QG5>|xro޽mSMM=tNEYI>@w Z5o<͛7OaCշ-~>'O>L'Oe˖E=6 MH5]\lkawȇ5ZW4}K>/odp 2MSsU 1#+5;u+Iv@:ҋ7*$W~tK/qK=iZvWk׮GVy|`_WX[́'G[NÆ ̙3| ȭ^zjXc͚5KݻΝt:sϩLguvޭ~{ﵮ5IjllK/PZZ6nWUUZz׿5s-_\|Zׯ~'տ};*nĬL]x.2*￯Vk7j˖-2ducD:Cte֊+m6y<l6M4:^='h:%I3g~SKK¥W^0a⋜̋ ݑw'È2恷|ts:T!sWi?醂 6?ydfXd>M7 4 Mk!%zZ æLqiܸqֺ\N[޹s>C3FR`^{NSeeN=TmٲER2㏷|G~r5kVa޽{uW?rkM4ɚo߾-4}vW^-CMϧٳg{tA;mfSSS{Gr6lؠO>D#GGݩoرr㏵{noW}L~'ߜ9s}MiX~i֬YQ߻w?<ޮ]j*wDҥK;hѢR lhh TWWg_=l[juun6;vL h@=$ϗRϣ`H 0??jҴQyY|I-m~v$Cj!ݔa!6]@vء?q[Ⱦkjkk%\vz:@Y(@mmmz/g̘'isR&Ni]YYy=3zzG P*++%{g%qN:U&L3 3ۧ{/,C餓Nl6GSNՇ~{u]6aavtqno讻ҵ^uk֬Y1r뭷O<&~zJ+Vȑ#u)t 4O=TI;OsN=X|{n=Sz3rW_Vi*YhQXkʅ v 4c.5襗^T9o>]ve:> w=HalN02 C@atk5_}g30nߺo~lVgXcNkkkʁfDx㍴ QzTUcwB=88zx@>裏f+㨲+5uT 6L555۷m6YFO?tvA6m̙3ukر:t+_^~~_?Oo[z>`9N}gzw#LSNs=W_~F-á5kh m͚5KSLь34fk;vQ˗/עE=V^ /Puuuo'g}#Fhƌ)Ly?iӦYN?|r?~5GmU.qQ?ذ`=9x455i֭ںu>#+iʕ袋tghĉjii۵a=b566[nф 4}t1ªܵkKXB˖-#47/,@bJlݞ/kasXKbsO#Z[[U^^a$%Gfd!YR(?D;ޮoĸ뾶8آm]w[~}l!BoCm*%٦OX uIӧkΝa Ľ_1}"HVMMMa3ԅ^vłizg?If~ݲՌz|0MIf_'>}^?]gH!Y+ߢ[PY***v(DWSSSV;cIK=S \ .GVȺXcmS#Gng[WMV1HCdkcy?Wcccillԭު?񏄙t\J êr4 uwj:OɒuVm6{XHSxT,4V6ZΦت[JL׶m2z<ٵd;9s8 UWW't]viܹz6 >E2jO)*͎6o ӐG3jlMtը|6̽/olc4lD-K :S*\xԒu k:θC]#P=0vswҒ+09=$p@߼H>zpB2 ɔ$dH2eJni)%Śmmz_ zek@a>+# 3 6_kk|>***p&zjjjbUU)@2߸V+eT{8*MԁP3p[uLP pJ~C.B,\ߨShʔ`>n^_`5lZjf>xHMKjϞ=rrY=Ǔ*c &{6ȻJ.miNH)IF@i%B\>~ l+TVQUwXo p]=mv6yyW4xr^-hZڼ1d6˿a=y<߿_n[=x3z\ M@ d=jF{84;4 d$4$$30Ϧi:4$?vpS]!l@Ұf9%Ða$Ma{kv^`jjjJUkkZ[[ 22M7ʀ"dE1HȷC'˨=%fdPSՙLC2̳ifӴK2@ӿ #x@) 2l̆efd~_---jiifnnaֵ`LӔS{{ 1wzr:$y|߼HڼH#d:E%w"N)3mL)PiQsGf0شBȎ`Uf.ߓag]p%~Ui ޝEU kjikZU.wަeޕymkwkdi斶" 0?Od9xHιu>s\79ߑ]jj*&pJMMuw 4˕Jr\iLAd }!R1?\, !̸adɒqY_% fhfL)LT+Rҟ$%31 3QH.4*%%EwKPXX~%̯Yk[ls&A&ˆ@tM-Zݥp͛7Ώp2LY۟[lhm;G݂@4HRRKBӑemom<]@!wMZZ]$&&2; dzK;}Nmm 034ƍy%''ƍ.)֞P@aE (0JOOKpDLp;IkPXh ԍ7* ͛7mf,/f+VLE'b֭[JMMUJJ A& @6iiiJNNvwpwME 4&"`X @ah0,ME <] Fr$I>>>n oJ(P y8q$)&&͕MppK@b&"`X @ah0,ME 4&"`X 4Y,Idlsep[n)===2Ţ[nCZ*<*===3,W%I111:w\zfjޛ8p4I!!!2L2L Qr岴@ňXMdrh- @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ayᡞ={u֪^RSSuq\R֭swynC Ν-Zlki͚5TsլY35mTkVPPt?^ΝӉ'~z?///-X@ 4Ȳ<$$D͚5S6m4tPY,7UvpbŊgՀm}2eTL dڰaƌ.-̼]vsN-_M8-88X=֭5k*88XdRRR_{JKKsw@6eʔZj9dRddFpbŊ_~v 4@0MlV˖-OYfȱmѢEUD +WNhڶmիlPE_u]ZZN>p&l2͚4iv/GEEK> 8cbbt VMdd:wlMll,A={V/^TRl;xn޼Y@U@6 6,C1n״iSmܹsJOOWHH|A}wX,P)WX,z뭷4sۤi„ X[4u5koQv߿_Ν;edo>U lڴIcǎՈ#e]LLƍ#G:w"@F-|;==]_}U FʕmOOO׋/l,]_G˗/ז-[ԤIUZU:qℾ;ǻ<!U+VT:ujw^m޼YGիW(???(QB%JP``*T J*2D@A+YO R.]ҪU];4`?P'jѢE뫺u*!!*^T @V=v\tI/Uھ}eC ʔ)cMb3LZ{15jHKVPPt5ڹsmۦ_}yyyA^*Wpxx;vL׎;tܹ\kܹjѢu+VИ1c, U^T^=_/_hYF.\ph>>>_6l:u(((H%J˗/ҥKڳg[]t)ׯњjժ驧R5TlY,YRqqqtvܩ7j.Wɒ%s\mSV-y{{+11QqqqիWu>>k2LjӦ *UXmplRol٢ӧرcxԩ"###hѢ9BCC[nJOOWtt͛={8ZfձcGyxxdiP=?vZ֭[<((HAAA_wUt13Ft5UPA'OVz VppjԨ^?~Ο?Ծ-$$DW^mMq\6m*I4w\}嗺uVȯ#k;wNGև~h_|QQQQVGoCQTH\;3M&)K;///+<<\O=:ѣGOOOKWhhhou]ZZ̙iӦ9߼08<0˗/;ԮM6o-['_)[iƌ9~odRddV\={m?bرCǏc=f3̉Zl>L#FpIQZ5fU\YVRΝPws\7xC7nT޽ Tzu]z5IRv_Z 3_UVͩd7{!GN*VwyGk׮UJ\GW_iŊv:KCjٲ-Zp7 gOΝ֭[kjݺu̚ڵkkzOŊW_i̘16C2{fs9 &G3gݫ+VW^Qƍs5 4ЪUTvmԄ  /l㒚>~5sL=EU&Mh"UPn3gxвe?We6:sSFFF:ٳ> Z@@ϟW^yũ`v*Uʕ+պu< j_rV%Jرcng;By[3fsm͞=[6ۅ?WŊRj;vqsPh 68lV5x`-ZHӼyԡCx@sU``SW^Q&Mr\fv1bD?3޽r-X@js=:44Tz74o޼[JM֜}䨂7nСCu 7.sVرcUD cbb/+---EAA_Ѹqcfxl6{) 8}t38<!U~<==iӦiΝz7u}9̙sq8cr޽?] }Uxx͉ l6kz\W?ѵkW}_Lu뺼ߢEj֬Yu嬼'OomP 4H-[Tlu떆 jv;_Ahݺu'mѢK"C~_ 80'ј1c|||ԯ_?_^vϡbJٳg5fŊզM,'7<<3gJ.~˖-y?|`ooF#GTll$|=uN8+Wʕ+zp5kLŊ[kVTHmϟv>oooaX3gƍ T``J*%ɤǏgsw_/_^'x"˲UVm2$%%eSÆ s88qB c=3Ou֠9~%iѪSʕ+zj-Y$[fyOL2իWk…ٖ[ "}[.wd~kٳJOOdUtiUZUUVU*U?tIkr'.ѣjӦ>}8L.k^|E9sF+W̶]vvoxa 4(sΞ=j6;װaCyxxX5rqM2E?ݫxuw}z7ԣGCn޼]OVbTT)UTIvֶm۶=7155U˖-̙3ul/ڵkd2JK,UHUREz!֨Qé}駟~ʲ,!!A~~~9nsle˖ͪȑ#m۶eEՐ!C-A--Z?w.[r>r;ǯ$%&&jСpxtǏkVe~afnG>~d߿_ɪPؽoWZdI]~]/VBBB2Ţx̙3.r7{<p!]zwrJ_mڴK9rlْ-4l֬m/^ ׮]Ӛ5kԷoWXX~wgϞmw5fUPA5ٶzy 7))I .Ԃ ŋ[}Fi-{Ȑ!ڲeK]߿_CͲl׮]ٳ6nܨ0ۗ(Q"5VZm޽{C IDAT~˲͛2ebbb4fDDD)p}(w_9r#%gƍplveٱc+-ׯgY֭[uVuԩl32…@;qFqƩUVj׮5j$,Q:wŋg.3Ljܸm<,?N}ҥK+$$DJ-j6k~Z?u׮]ӵkײ,3Ljڴ~ltRҴl26ȏ̑ov˖-ӳ>kwXjr[^}9HO?գ>͛/bѰatYq%#|g9[tCH:uLW=X,:{?~A[nuVɎ[~Ph nܸuiݺuP͚5դIEDDnݺvow,C3@7nܘohXbEmVkVZTT|gNCnoٲ\ʑŕ>vŋ;t~=/.--M6gIoh3#GiZ, >\QQQrYf̘<ՖF:~8}C/Ժu\d2),,LaaajݺƎhڳgOr4m) O>iCi֬Y޽6l#GرcQJ,_LݮvڵӪUqF꫊S)epC9/;?ƺ8zϜ9c#[^^^әe!66VCmϞ=>(/eю_nenݺ5۹Qn]-_\'Os7s[ y@Op8}ҥO6%J2./͍+WXϒ%K4}tլY@jO~~~3]b8z\G>OHH͛n{ƣ-=zԡvy2ˍ_ZzKjڵkgUa<!@HOO׌3 <<<|{,-˗-ŋըQ 9.d9z=3O춉qh͝7''Ov]hhó9_Au떆 zJ۷o׭[ߠAԠAU8`‡@65h OsdJ\\RSS3t k3^x^jjVZ#F詧RU~}M81JGgbl2+)=͚5桇ٳsZӯ_?j~&M8[Vˁԯ_?5h@/ΝoFΝSzzL&ueu1γ2y@{j׮˗ڰa;߿gojʡ.\uRRΟ?P}ӧC8S{W__myJJjqx*00fƍŋ %>>^.]RHHv;vԢEt!6lPL]ךڵkkd2S-(}6$%%iƍڸqcbŊRJj޼zmwUTe0έ3y@ MC%Kwޚ={vڥ-[hΜ9=z'|R۷WvԣGYf9<۷g[a5nXÆ ͼ(W;v^^^.#?|9rn9~(ٺu6&I .T.]С>ce˖\WP1~?Щgb#VZhѢg.ʕSʕe2rl#Gh̙2e>}||\Y"\wy@ MXe2Ԯ];zvRn;p@uA|֭[guFU"ETreըQC˗/gG7 qPhtݻwٖ>|XQQQDm ոq4n8)..N7oޔؼyٓjW֮]$ݸqC6g͛u UZաŋW6mr\{bڻwׯP{___fHKKӻLyv=Zn IovޭSNl?8_ƍոq,ˆ իWgY.&)yjݺuhX,fg8qKrPpYXyu-7.rg@@*T*UlٲVoa[?U@㣠 Çɓ'?d3v虊Κ3gN]Eĉe˖_jlcX[=8~>׬Y/3q~7'ȦQF ʷoݺ7xCV˗/l%K#>>Oxxx9̙35`]z5O$&&jz7 NA޽{۝51cd~'ݟdɓcŢaÆi֭vSN4SUJc39{q~'4իW'M6zꩧ4sL>|#iiiս{w ڵV\jQTTvڕc'OcǎڲeC}Z,mذA;w?;U[Aպuk}ϟ׻3oSʕ+ի6m7olf#[zuvwdY~z}v ڔ 8PoVǛs43].\^xAQQQJLLtG_T߾} ,$|pwtw06mJ(:urʪZ*V(xJMMյkהK.ȑ#:tThfÇ5bM8QC=u*88XSzz\+W˺r劎=~ACt^xUTI;vT TBKt)ݻWWmTTzכbcckΜ9_ׯz)44TWJJ.^ .ŋ:}mۦ#GFBBf͚AjԨQzK(!___%$$(66V111ڷovءz3ch*Z}Z|uǏe=3ZtvK.Պ+Fnݺ ,SNСCڷo2RSSemٲERիʕ++,,L˗W㣢EƍJLLԕ+Wt ?~\|~7<erwZa5ں;d忌m͒|%y<%DWy$^zVg!`3KvtIom_[dc;Y:&~q׍pYE 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&رcuI-_ݥ:yNx~i;ߓ'OJ hm=<<HիWO%K.__UъRll~nŋvUTQTTL&S>>>իի+,,L)))p.\۷kӦM?r݊?Ww]~=Q0>S5nX׮]S&M8 yN[͛7WBBF;vXbS~W2>>>2dz%oolGyDO>տ:tjuQ߾}駟κuꭷ҃>m]hhBCCմiS+5k͛'b߁jŊyfy饗d2rM~۷^z%gYUVM=zk`& C.\.!!!_*IF=)))Yo$h2TvmIRȑ#n 0\z%IOi&IRrrYtk٪T$i޽ںu9X)RDJRHHԩMK?~j:sKl׮}-ZT)))Zv2*_ZlvWjժ^{nP~ZK.uJ*M6z D5j(IÇ_ULL|}}+Yf\vޝ wM@pΟ?}^z%mذ-udhX4k,O{ѣG]`h^<==UBIO?EPP,Y2e?믿]v~ٲe2L*Snܸc .tҚ4i}YfIRn]M6MfY?^~e={6K***J3fД)STV-mV/_[oew:TӋ/(\W>KVX1cv2JKKs=+=I@psGՐ!C,ש yzw.+?L:UeʔիWխ[7afb9iii=z$aÆ޽{j,RHfy=ozgu1I3<ƍGBBJ.'|ҡx=JNNVLL/:v(OOOiҤIvߋa&?Wwh0{:դI̠wui0jʕ#FL2NթS'+WN4e%&&&))I'NzРA6/X@ /H"vϘtR]znrKk|4Ww{:կ_?Iҁ_I&e>v={J:;ݻyfIRF2gh͢Ee˪k׮6PڷoׯO?u\P344vX=ׯ<ݻu֪XfN<;vhܹ><۽{J(G}eO<9MfY}QUBY,;vL{ܹss :Ǐe˖CիV}WY='jٲڵk0+WNEӧu ͚5KGq}ըQaÆiڵY믿.I/R5jٳu%;VOkVYvʖ-7oe˖Vϋlݻ#FdvХKuEUV~7;vLׯ|nϝ=Ϟ۷ڵk *H":{6oެuxlq}뵥xzղeK-[V!!!vbbb?j͚5:pmgyy[֓O>5k* @/_ٳgi&EEEVV=ԦM۽nْ43Ir{|4i d2i„ Zd~'Nݻ+..N:uҟ328={2ÁRЯQEQ~Զm[UPAf9tR 4H=ΥUٳe矵uV-\Pnݒ$5nXݺuS sرc裏/جun-gϻש u,VXիWkذan=+V6l(鯟a㖑3ffϞ͛K./sՇj֬)IڰaC\`"##%j^vM ./A/Sw3]r%W?cN4IC QBB}A\? ?Ws@`h ,իW+ISzOgϞm-I7oTZZfs沔N5m4թS'FQFҥCX߯3fm۶Y'%%}ZvQjԨN:i„ Z|գG5JEof0әj*2z5o|lMddw.Ţ^{M$\g~ }k+ƙ_WJ4uTU^=Ujժzgog_·~X?t^xAƍSDDD6 W6m4zlk[ V^λ#שY,XbY~3+q5kKtA흵eEEEC=zoߞXSFk3 wAH"Y~f…۷BCCեKl!$SNJIIs]m۶MRڵոqc]VK,ʕ+>\@~#GfmڴI&--MSLÇu)*UJ;wV޽U\9M8Q?|f{LD5 IDATfYǏ$Kڰaվgt:r{==zTSF *>ȼU5 ;tV\3g(888Ǚŋw^}7:sbbbﯚ5kWhhFݻw۝-∮]j„ g{gKLLժU+o>@cǎ={~$jҤZhSf۷oo5̘U}vKkVҥKu+..N|ݫdլYS}QzԵkW+VL?y.^-[ kڷo.^_ݺuӓO>iu9Uv?|}}w^}G駟@/_^ 4_mۼ3WGϟl֢ETF %%%?֞={t9RJjѢENuA}'K.jР^~e;aT@… JKKSxxx@Oi=Zoӏ3fTQWOXꡇҿ/o^zgSOiZr,YRn-#UPq&n&#'NhǎرcիW/5iDGydx6/_͛74i#GO>)s\Ǐה)S*]Iׯ-[L wܡw}JӰ۷z-Y,曚9sf~Y.sU޽նm[5k4kY##C3f̐$]}厯a#'O4.85>}h„ ￯Sj*Ʌ[n԰۷Wf͔csyٲe˓RlRJLLԴiӔ&iLVZ)""¦Y???=/~q*??_oQ]wU+G_ߌ(\ܿrSU_+k5 Ty\TUqG}T'4Mo[%b9rhvԨQw߭=zɓzUPPPc峪AU[G\i5l0IUe\\jxeƍKZNw~ֻ;T(KjiU K.5zW*zcjӫZ_9޻UYWTz\hJNN.mwieffJ5jTᣢ-Iڶm[BUEXۗqTYy:M8Q4i>39\5|I*3{@ϟի%I_0֧3oT5[rmѢ*[?$)::n?Y-Z0.-[a-nƍ͕bќ9s裏M6(pҕYY*Td˫R<%y*ﭒ\|.\?ЬYK/)??_>hqe)kVuu]YI=_QQQU|Ur=|leWr_uv]ݿ[յޫGYFFF'??_ѥ Ri+JOOWÆ /Th!dƍ+=Mz݊9m4?^M65"""twŋ+]+wOHEOeg;u7jFP6l0w}v}u.:qE\Uʪ"n޼a>>>ev+FEyyyk׮kպukaÆP_iР>#@y\\fϞ_111%]$s)5\BB׿K.3ڼ':,X{WݺuS@@^ZՁZ;sLw+[Yٸqc[Ud=GEE+ wrwq=ZǏWppƌ1cܹsڰaVX)[+Wg?*5k&3[%{W^Q׮]`x„ NW/9boVuu]=9_U_櫺kEsv]ݿ[չޫGYݫBY,uҥ7TӧꫯW`=6U[RLLZE*jMcjZpz!yyyoq;$%%^ӊ+駟N:_Tz\Cwq\QqqF Ӫ_~3V-KUʪ^zW_Uxxj߯#G(;;[}ujO֌3K/I>C=/կ+KRRnݪZ8q$SNjԨ>lƪUڵkK.Zr={())I{n8p@-ZЍ7ިٳg+44Tm۶եK|rcjdXʽi ਿX/Vdz]f:G=zPNԸqcG}?GyD;v0q8bqxŕcJOO7.>^gV޽%U7[ DIE”RfUȝ>}ZUm8p^hhh?SBBQoDD5zhjʔ)ѣ.\ +kБ#G;{l6Uھ}\t!5n8[Nc;U%;;!իW/hڵ:~xíYFjԨղeK믥.$%''k֭ԀԹsRJEwr￿̓Cꪫ҅ GUi˖-$5U%,v]kUIU9=U!=imljԨt'W4i|}}5uT]VO?222ԪU+7pٲ:RSYE7_]vg}qƕjԩSZt$Uٗ+kG:CMwG̴]\xQcǎՅ ᡏ?X?vڷo;^Z7˒a43P^=}喡nݺz.|*fddw?O>ĔDGG+..aqqq:t\U+?FիRww㸢&mfY5j$`k:y<<<4uTKjٲqaOW_}|2gY4 ɓթS'5h@7_ɓ''r%=#ڳg$7PϞ=mqr3g@nTvugJ*]ݬSO=%ooRZΖ[=㊍Upp:u7xC$iҤIN_{7k38կ__zG[oUiٮ1qqq裏kUƍcl @w޽6:=UQPP_~Y PBBnv#UW]{N͚5szz:~x5mT{=IEmN=󒤻K};m::R+/}g_O#F(5~m_Q˵2ٮ+{9zwLΝ;#(33Sz'b =쳺զMnZ}ѨQ4w\ eMOO_z%effiӦ]x]sjĉ馛MSNzǵl2=?X3gάrg̘#F 8cƌѬY~z[>|򗿨]vU߾}5qD͘1C:p*~+ţGJbbb^oo wg;W. pk|O?뭷4o<j֬YQZ4}t뒊$1b^{5i>|󕓓#c|6l0ltUViׯwݻtx222lN䝕_gVƍo˶mtA5o\(= ]*\͙;rHG.\ГO><۲ejz7k׮Rm:{֑֙^)k .99Y&LPg{jrV3uECMnzwlիuw_TϞ=_d[JKKtSSSo߯|g:|y(>>^vMNNomTf>8}222T~} 0~׭[gȮ?'xB~~~5k4}t#trԽ"9w"\~wzztWA:rQUbb}W^jѢ7oK.i޽ߔ 6O?V^C*22Rj{n}O?iiȑoɓ'kFծZ.sѳ>+6ʲi&)88X[n-ڌ ZJ}[lq[lQ||F+RZR``N< 6hʔ)JJJrXڰa5vXKaaaҁ4w\-X@ RVtv~ZfnFo^jذΝ;cǎiڵ>}zO8=1gYFFR֭-OOO۷OIIIZpV\i:*766V<$wѾ}J7PN>@Æ eYg[G{ŪuyM8QFґ#GW_ƍշo_3FzRxxך5k?K*j5\+uECu/^mHJJ}ݧvکO>ҥ<͛h"8q%ou-T%KhժUW޽ժU+5lP.]ҩS{n\RK.1ݫ7|SݻwW޽uW(""BJOOѣGua͙3G[nu[9]LMMսޫqƩe˖ɱyQwwḂ㊲~pl+hRgG9,vÔ|]g%yte$*ZlIR@Lſ׻v9Ɵf*66nm۶IQxpp$i%Hʔ ua%_%)ް~=W+v n$8p0.aaa#`Im,(I?~  _$i5\T';D ܦK.jҤ hѢ.I͚5ӝw)I8qb ՅytkРA-[(99KzJ111JHH޽{`uI<|}}l2m޼ b03Mӧ$i5\@EuE:t0-iΜ9zתTp7;3#nѿy{{+//OK.*hȑ[׿UM6UFt9ڵK|/_^E P (qXJ/oXKVrtSuמ{JѥKfgjN^^$)66nm۶I|||$IwT )SR.ׅ/;Kd7{2)k8^y8j&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0# IDAT-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME jg)___KhР$5\PXXK.)//O.\P~~~M .{FOM.`X-oooթSGyyy$7Yp???կ_02ϯ-Mpڵk߿jڵkt1D .:ut1PԩÓB63/OOϚ.\V435"p-MpOOOt1P|||xJ\@\׷Z&OgkE:"^^^5]׊u4E,KM&"pME 4&"`ZL˫ `mV111W$IgϞչso>ڵKN<M 7֭߬[ިQ#5jHQQQ[ŋ+99K hyxxo߾޽{w[N *((pS pM01???}݊EݻwWhh+丸&Ga}c%%%)##CHuA1116GEE֔)SxRW^СRRR4o޼.Jh5]>ljԨ$i1bDgРAF+}75Z@Lo߾̓'Oj޼yJJJ*ZZҴi&EFFj 6GEEo߾Zp~94㤯M6ݻ$iʔ)6OFFFo߾vǕL;wN;pK:>))I&MբE nݺi˖-JIIqy/W.]_kGjժZjaÆj޼Ο? ٳ+0*+5\Zj|mf͚gϞZ`9RC%u=Wn=>>>TddzkԩoaT4MHHM뫠 }FF78L@L(>>ɓ3rrr4}t3xRb(>>^'Ovy/W|K={Ο?/h׮][j۶ խ[WzfϞ]u mV=zT޽[gϞUVV|}}UvmiӦ_;V%v-gk*5vXjڴi5]?})==]~ͦN:i_]K,r&LÆ KU5;o޼*^999;w~ah+--X/,??;mRZZխ[7* @͛7מ={4(~ի$i׮]ZjUn߾]l@Y{=n6IҢE.&5`2ڵyo>mfVTRR߯h6mhUIyUs:S-ձcGyzz*44@EGGSZf/p]56o\3gjҤI $yzzjĈzkJG'|R)`21116w8wahFGGhVPJ~LSPP կ__bj)++O޹kJJNN;C{,66K?_#Gt˸Ln74da3Og5 gQޓlζ3XV-Iٳg*ZRݺuU^=;wKTܹ]%mڴI/^4nS:uU=zoV֭U~}*99Yׯ̙3c5|5jHҰaAK. Uffvܩ3fhvx?w\6kŋ7ިSϞ=խ[7)44TuQjj;~IK,Qaaa)ICձcԯ_?WM6ՙ3g?>(c4h IR׮]5a„R/JtuI&NN:ZxqSb K^>%M2EVVԪU+r-zw=ޗf͚i߿ԩc|^~}Kݺug}Yf`*wzW[dd"##գG 0@==ڵӸqԱcG㳈v&ҥ@k׮F)I?/$e&a&hɔu3<<!oYQQQ6W~)77򏈈PDDZlŋW^j֬M?AAA R-rJ~S.]ᡨ(m۶$ݻܲ>|X'NPHH4iCjǎڻwrrr*5뮻oyXXԺuk͛7x*8w/qv hCS*t~~~mӏ=!!!0aF_~2yyyiرԢE*8qaafI-[? /s o>ZYkn)^O?:ugZ^wnІ "\jf&kPZZS,gyUT+--M?dXݻ+00P7tJf߿j׮ .hƍJMMUVVԺuki{iiiBvWJN8{*##Ckvx=.]ҺutInݺj߾Zl jĈ}СCFPkV딒b:t萚7o2OʭmϦz"^9t뭷QF[u릮]*55UIIIJLLplXqF?~\gΜQ:uԲeKuA 7ܠ  0AhqF>M3g*99Y-ZÍ-~is=<ٳG:t͜F+}c3m6jӦM9L@@*u]FJqqq޽֮]pڴi233բE mݺ0ׯW=ԣG?_ג%KJիW릛nTTl/xyyK.+V|P04dm@t:ЌyIgO\\̞=ۨ^T*j3%%Ew}իXmڴRkUvmeeei6Oeee)%%Eيs<[pp.\Rr[Bw:2sL[333*bDuq :ԨNg5o\ XZLl͞=[-[ԕW^`Y,+<<\ݺuSjj֯_rW_T'N(77W;wVӦM`S}y{{qƺ5d}7H 0xA=͕$ܹS?LpIRuuiPvv$iǎZj>3aÆ5|t3gڳg~w}G-[th.\P~aK.5MzfllMuK.uyjf&̾}lСaF4DWUW]%NՅ cuܹT} 6حSon@󫯾m>TPP7oX릛nҬYjYW)))eCk.AauY%''+(UÇڵk+::Z7o@]xQpo TTT7on;øbOjjj\ܹS;wTth{jJ,ӧO׾}={yz/4LtM:զzr͛7aUnn ;g-ZpXm6GRy],Ö-[t)㼭k׮O=z0^Vʆ_|a&y8Pvm>&&B'0e,>bi8~F'9s$ *2~kb)_~~~<8qBׯ7j1Ԭn/W)dbݼRv5K gn611pёtmٲEgW_}_h}FYRym'w/eggO>nycWlbş&+Jq:wѣGkĉ9s.]˗a$խ[8jr l2}B%3tfq_|l?&LZZosR7`M4i6%&&mJPPzԨQ9U~}IEQYO9rDSLLeX ܡ:g o݊U ԠA>}ZRQ9}eϞ=VE~'%%%[n:v۷Wz\ `&)Sٳ[ۋ׏TtJ~~q|\233#???IR```kFƍSXX*#wZt fҥϟpx.$&ŋ裏O%k>}zCM???1$-wH֮]x})㩴T_;%''+&&F k(ӕ0EEEfDDԩttGնm[խ[W~~~.i PS>S>|XgvY:u:tTuֵٯMvaTt_B֭5ay{{K*:{n(''Gsu4]-11QFmP]vmݳg9R-)+$ &PJJ֭[gSUK-4f͝;WIIIcu޽n9(.Ɋ+tIZԩsY<*O۳g7J_u{u4SSSնm[IEA+Mw/@M駟*}Y666n٪U+^sRQX5*Yˊ W:tfJ҃>Yo.ҥK5fIR\\ճgO?_… =z0./ &DςkԨQܹBBB#s5j~anZW_}˚lnӦo 4%ZQ~~~0ʒTzuE*88XRaaƦYʮ{HJ>T5^^^9rgW.w<<|RO6h@JMM-pc$&&ڬgbq}8ņ gQF:uM+$$DC 1%iɒ%ڽ{qO2EӧOݻ(..믿j6\xQǎ3G???}o;jNܹsjԨ$iӦj֬'fOjҤITDDDmAS'b k*))I(5̩SeuI36mTf[F /M0M2E}Un*TKqڽ{ڶmk Psjܸԩ~iǎڽ{ӕ////Yfڸq7\Ֆ-[lƿvZ5kL^^^;}v>|XgϞUڵeHTCZJ`^^^SBBBԡC*33SVP6h@JIIݫ+R^^^߿~gK!!!)u7z#&&F3>kFQRRN:s)++KW-Ţgt|8HG(((5uTʐ=vOOOפI*4`=eN>m̙7nYf6ٿqcbь3t9=ڼyM[vnV O6HE믿Vff5p@f.]joktҥSp &\AA.\-[(>>Of&&&ѣGձcG 6̭ 4|] WǎձcGŋ1MNNiWӦZjpBGV*C^U; 2a?'Oʕ+K͘kV޺;;vw={Vk֬Q^T^=tMƝٵg*((HuUnnnۛQnn>zsإ8HGf IDAT3ٿWxxx_^ǏWzzS;}^~eݻnu]ݻw/6O7m48P``wɓ'{67Z,#mBkiɪ[񙿿jwRì^Z9993>њ5k_`&AhjРڷo(*00PEYYY:y򤒒k.*YWIr{y͛7O111jڴׯ@ԩS:uW$@HC9M2Θ IfH5}ϝI~s777Y{6kmmk.L gU__O}S*((PVVtرCGwy9Mu;w… %I{U(:׭[ 4a1BV{{Ԥ;vn vAR_9TyfqueiرJKKSSSvޭիW}}n6M2E999x<ڰa~ߩe᰾ojZtuZjf̘_q?r.{z2e߯SN)_kVƍÇUYY{NÇ[o՝wީYfiرjnnϸfD{{ꫯ{w1XeV"j=:.=-kt3.޴5{f,ucdMR$s%5p>t9c }_PdY^~v?,%oFwp~:Ǔ\%o(xW|u'_r}?xmܸ1!kΜ9qo޼Y-#c7lpVI[[]g<2][64u3Owl{#pg ۷o?/oTܹsXYbDC؄ $v0O$PF / 5g̘D~ Ѕ^(Iڽ{wk֬Y*..>_n9"ah۶mqCn!Uִi$IIeرɑ$ٳ'uu<뭷T `8'@rl۶MtG>U-X@ڷoN8\.k…l:pjkk]*H$>zZZZ\ O+O:@m۶) jٲe BZbEKѸq4r=ڹs rU,*++DLH+R.& s;vЎ;]F4iJKKvrx*%bM2E6MPHOv90l,`hھ}oߞR[n֭[]|d0l{.0̘.C ehHYR&E bYVK@Z$&$H0Lv H\+!.)kE8 >/% Ep@$ ;+ % 24 Z[[]kDX@PXVZg@h@-e`=eC R`immMv0$ٓ] UʒLv9~nf`h BjjjfSZZNv Hvi˲ 2`h Bzt;t'% 4,M)@@"4,M)@@"4,M)@@"4,M)@@"4,M)@@". ˲b0 Èy$&$eY 0 9+^h an@h@ 2MӔnni2MzHpXpX`P@@`PpX'p6 y4`u 2MӔTzzl6[+"_*JOO$B!utt+l@h dfddDI@lTff:::N IB siY\.\.W@o+==]^W^Wac04`u3m6Z|>_8w}ڹsnf-Z(^z%AIҼytk֬YSmm٣gyF=c_w?M4}t=̌t:' }OӧO?w\͝;W^{yܹ;V?uWƌ)Xf+˜3fЌ3tu{X6'TssrrrbϞ=[gֵ^zH?.\3OIIJJJtW?VZw?  ;~Lm۶M{ny^nk֬YzX6##CO={nО={d4}t}k_Ӹq_v:::pKvءUVFI O?>HTaa}sӘ1c#_z2:OjΝ:|FoYg4qD꫒իWkڵk,Ҍ3tP?6oެٟ@h>aZ y$Y2BN.)dKve 5k,Nxq;GrK18~vءf?.Rѣyy/%h2 C\s$Gڵkc;|>#=r\_:fٟ@.#ZEƅG46]&zMڦjHvpeddD[VW "ZZZb I̙3{\_*۶m :{WD[Ƅot><ڼy5&ξ'rNbCQ+S-tѮ_]뫔0!٥&Dee|>3֭[})w\II$iwIRYYYl۶'eYNkllT[[233cГpVVV9rD?> "ț{X_kj7pCA2]s?,%f$@r\^4OwD b?~\?}Qw߭UVVjݺuZf~r5k֜uNi=$1.\}.ξ'@;Ò3Pn<|H +$˰VH-M +:~ܬQF .2FtaWZ|/^K.Dsј1cxb-^X{ojΝerssS[[[x<|rDٗ@bhpgjo k}JOOSkG,Ӓ–,3,aS0ɦ&eJVfuu&M2l3Z]vUXXtqZzV^-I=z.]KEEE~믿>ɓei݉صrU繞'Lvi.цΗB RHmٶEfJNw~zIRAA>ϟuo]t)UVVjuuuzgϒ$ۭ /0:}˖-o׵5q:vH,Zhpd )"VX’a '˲+V^Çɓ'k…zꩧ8'`lr\JKKKv)HAi4M9\.|>y!Y0th0ZpP_r(!2mLUG}nƝM–VXpXᰥp((Ӵ >ck]wݥՔ)StR-]:::3矏K.DSNԩSuwǝN3-+P T0T PGG>YpXJ9/(81FR 6G CT`1Y%U4*_@XǏ͓'I +d{JM&CY/Ų’liZ2M9\;zR٣2e L$t3Ds\jiiIv@U'ٿFu(-=]S>ܧ } +,Ò Ɉw/MK2lCQe o#BJ$fSZZZ&K+M@J#!5Zㄎ6a3i*X{>TP͒56rWޮ§W_ 2|RUA?31P"&@ ר1yjzRPFP{G^iHS +˗~zelVF[ c#%`:Mr,rsݪ:OB2 C!Ӑ6N4%_0 CMF.g-K!VQ>@2ld!s 4`H2 dɒ? 6C +$6#a@s)I8t8LVXaw2x]ǹHu!PIa&_C4aw1#afCM2m|!d˙+N9?f:} u!ѐ#{Oh69.#3`Wǯ1Cqddu֚r2)IjkoSKGdIf9mWVƏV(ofaY!)kw^rw0$hT}+艹 4ڽ:ieti|fsܚV|S# K*/U(׎Tk>٪_ 3=:qYyœ.ܔ] Q0qxOኣҔ:FY ]?1L);#K;/nh2$Kr-N%SK{ޯzOy=:[m-D CUؔHOƙaIi)C*3Y]Ӣ3:9(G͸vTm?W}SPlrhl΄7a&೬Tar T2=eR.˲NmG3 Hu}0LX%YGCBl ˘!Aqi84M͞=['Oծ]qAaw}'|W` !.Ҳ` ,7E%N ,dZ_ Kd -CFNhSv kĺTZZ&*77WyyyM@rh0eYBGro6k dMɴtjAYVHnBOi s/URX Y2$K{}:A [alۇСCzG:!*HK/T<$'?֭[@-4-˒3FUF2$+,)l|.Be P&C;_jѦw˴$ÒaJVȐq2W%v?F%I:x`4̌8<#***$G?ң>5k$*@90 IDAT"!0 lhKF˲BY1N/mx2%&4OO%I gUAWs>l6}ߕ$BM@\0Eɮea0<Zti׾5߿?|D?я+5=!a ^2aI|&UW]} sNmܸQ㕙&9rD6lӈ#4o<7N:uꔪqFm;P]]^~nk裏[o14M͝;WƍSQQ|>;M6ĉ:.ݰa͛eeeY&wsӡCrJ]|Ś2exb NOܬ$V֭[ozcB}{z7\! hRZKKvޭ)SD޽;:~ӧOĉF544(??_yyy*--͛u饗nAWAAƏ^z)f}e˖H---WffUVVիWkϞ=UVV 566(??_^xsϩu1BW_}&M`0@ G ͙3G>hObĈ N$k;occBbZR~ @O5=Yz50l///OtW+v>}` [`0(O}֘gUAAtwf… 5fAC]V'Nмyc|P>$k1ӵ`͛7O#GTQQ233U__:mذAk׮\ģY@w4Hȇfm߾?>X%IJݺ m4k֬-#fϞٳgkzㆅӧOc=&3t*33SGٳUQQ\]~׿3?^Ǐ%\e˖s"C @7"ϵ%ɓ'%ITeeeT S/1`]uUz7cG=#r8^iNOhڵqku1mٲEjjjRNN."r-ɑ$͚5Kƍr\[o%4~7&|Gznݺ$WLt#***ҢE;Dś:r555ڿ&NnAocΎmiĈjjj:K](Ou7n$iȑP{{{teY0S:ڲA [g߿_?'NH9֬Y#I1fC=D &=xw}NӧOWii.r4fq:~N<)өeee驧HwuW^^yM6MeeeWaatImڴ)zNIzeUTT544t;ε.H]?teEEnhXVVo|N^{okϞ= 4M͞=[3gTYY vt:5Hgҥ13-sӟ&*@2h o~n?N 744_;헿eY;vhǎwݍiYٶGw:'5j-[e˖iڵ~vd׾#GyH+03;0D e{ںu.\kgӟ;Oۘ4in?}MVݻU__7wJ=g=?'2@hHimmmZzV^-04~x]}պ\ve=at;no|CNL8'xdeYSO*:~ԨQ1󵷷jmmiyy+WԖ-[b3 #fZ_|EG J6}"-4{Lg5~xv]GUUUzn6Fw}n6]tE=zZ[[u!y|etUWӟƌ#ám۶M5|w[uw\v]UUUjjj0[Dzu]{Zf\i]k0͈YpȰs,I Kweɲ$W ]'N -ZG1af(ң>5k j-0hy@H+9sĝyfI\ݰae’Z%>$& i3gC T?tq;vLַ3='M_}'h ehHYR&E ehHYR&E pKŹHudp|+W_}Um-^X3gTmmVX1`dpgOI&@pXǏז-[td4BL HP(&PZZe˖I~ߨ%8anPIIIh✙#GA~?0(G]="1cJJJf9rD6M#GTcccyh7n~~_) &$Jv|>_KG`HΖ$l3fH*++u$Ua9r$t*77W'U_ B|JKKKv)B|>]R&8Kj*߿?34v%IǏOr5 ,ҦM4g=zT'NHvI}\y^M$Mv &iĽ0Lv P(Veee% d:::hU~zHv &pzjmmMv8OHYej SLԩSUPP өF8qB{UuuueLTii&N(ۭl6555שSκm45{lv4M577ڻwotj*--Uvv233zuQٳGuuu.p84}t+77WiARee`3k,M4In[e񨶶V }ڧ{}~uL޷1xb͜9Scǎiƌ*++AUUUڲe$iܸq6mrަMtM^_4j(z1><߽{|͘;h{w3gjjooO?}N=:uWG_#ujŊ 3o'NԴi4rH-O{^O>5J7tNgx%˥vd3Fww}wFѣGkڴiZbEo|1B\sF3~ܸq7nN?O:v9W_B!=#"}/M7C1㋋U\\)S/^ &̓OU[[FiӦ /<}r:t:UWW ?~\~_.K#FИ1cc***T__eeeiɚ9srrrtW^Yp[nQVV<֯_/#04j(]~ы{l(k:{lIұcǴsN555r>f~1:%<>$?u~*,,צMT[[&edd(//O:x`tsyJ~zU]]RM<@3֪08B]ki4MaDC̮1<hvM/ڢӚt-YDӧOפIsN:t(: /wuuuڿ/*##CSNނ r֦^z)_$,z i̘1JOOW(ҫ U:zYϞl}}:::t%D#FPSSStyE/K1_#Aߔ)S$Iӟo߾UWW;CCSN=c;3QW_ %ߝ 1:%<ԝxO=.3fPaa|>yDy^544qDg;;vPii vvu&D^k àW0dv͝;WaÆpX֭^H9sf֦ÇK:=bWN3 6T6omJviٔyNFDZӹ@:͙3GUӶm$n1YwtbAAA̴֙+>%{ _)ѿ} 3;gnknϕJ߳h Jȑ#v@O555:pݫP(m[6?|8oҞ::D~M_)qo^ c<%77W ѭ3Ğ}vءs*??_ 9n0X4CVna=^ qǗ+Pvv$AMMM q[D8^o\:tHoUVVkرQYYt饗jʕ:vX¶rc]eQg2ίs]_^T9/{\:e '{GVyyy4;v233uԩA.&`;yγzl5i]zY l2={hƍ:uT̅f]|qyMҢCI.×S*==]Eb10iӦIw`>gpبbIYvvjO^N$)>>~up\p<[w(8}$iر x`þPycOթJ4sLEGGm~~t:}'Nرc=G+W+ui@0$$$(11[盨6ljՍ7ިٳg+==]QQQ… `IҖ-[B'NHbccu5(++KQQQSnn|Grݾ3g222d]veZhр?##Cz.2egg+..NVUaaaJOOג%K$u Lˇ~f뮻NsUJJV$jҗp͆IRrr233%ޜ?bKEE{=]y啊nۯbsso׶??zPMM6]iiiJIIQDDuqرo3[N:ugmm*++m6nZ?~V^Yf)''Gr:U\\kʔ)͛7ѣ0aƌhEGGM :zvޭ?VQSS^zIQRRzUUUj8p@eee666W_W\Tn|ߛӧOk՚={:۵KCsiu5PC{QEEfΜTĨYǎӾ}TYYᄏPPyǡo>=zT3fPjjeXT]]Z8p `ߟ_z߿__~$x<s:***Ҍ3T__]v {-S! Qk_0|ö@>#M3v.[XJd={ǒ|s4}su.4, H|+_|QA`䨪a) `h:ߏ-**\WR$ϗ3._`MK O=yk 9:(77WRGVL@0h2 7oqqq4eee)..N& x4u,//Wccc4DDDh .M@7&Mb]<gΝڹsgB&E dhYB&E dhYB&E dhYB&E dhYB&E dhYB&E dhYa.Fc`=4,zh09vXK`ԡ&E dhYB&E dhYB&E dhYB&E dhYB&E dhYB&E dhYB&E 9h֭zg] kɒ%ںu6nܸ`4dVU]t]ʠjܹ7ijjҚ5k}Mwux vΝ/aZu7k;vLsNPkkkvC}^xM8Q_2}xzUWW@0L>]C^Wo{[[6nܨ jѢEzꩧz=σ>(0}֬Y5k/^~XG9+"..Nw ;f3FӧO)))ZzPZtx≀s?\.y<YV69y]ve~'N'jŊ_'jjj xzJuuu~A$]xᅺ b {ェ?e=SnەǫjPr-JOO˵vndeeiҥr:z}L=c2e3fhƌZ|~a߿s q@0t7}vUWWpBkʔ)Rjmms=]vTYYYZ`n'?n喀Pb/~ w'NP||rssuW裏>9}*++k.mܸQeeeVll&Mo];v>WX!Ţ͛7Kz!e_Z٪O?ݻwU[|nz_J~JJJp8tRx?o}[㣣Lڽ{~ߨX---JHHPffM6k_"w]w%ŢW^yk'zp8T\\_:pVLo|?[oUmmm=kl/XLy[䵶K2ex:$ϦBxx,X N7nnŋewmܷ~)m߾]w֏~#eee[n?V 7ܠB566o!*I*))߭WՀOjJHHЗezӧO;TUUo_YY>};_ŋ_]tMjhhWUUi߾}jhh׾5͙3Ghڴi7MҮ]|/nVeffjٲez7|222|r9N9WZ 3WZ7 cW=s=kl` jSȪ]tRw5T2]aǜQQQr\Z~}---***$-ZHsѻv1Yn/DJ}'Izg̡Җ-[$Ir@"""|^~<k׮]~ܙ?'L[$l69]D?455鮻jkm&Izgب^zItEx.H1117p8uꔤlQXXNmmm_"I֪Yl߾]2 C=^e͚5jjjRvv.]*IJOO׊+rk7''G6MgϞ;|==n@1,@-tPZǪqkzznVR`uLJJҬY$I7W]uՠ=z9+333uݡ$;;[r|@K/%\'p())Iኈr}} jkk%%%:huN@\.Wmz裏*%%Es566jڰa}a󴱱Q/iժUzuw*,,Lʀ3Cw}z`#ak(1)^)4LyQckr+1.Amv gxP\dցpB=z34DlHghXzN79s衇RZZyKJJTVVV]uURco%u\a2Mc;̾͛7kռyteiмy4o,,a{ofIzjjj$eff~;>$}_145uT9N=쳃8kkk발Q/uV=sU{ [뮻N^z6$͚5KYr, M8xb~>e.(]WU2J]ODedd/דO>B o߾}:ڣׯ%?ZZZdӅ^dM>]CI~ *ɴi^{f̘ vEDD袋.c=&7bgp<^z%}_O?=s<bSO=e%w 8f_TDD~_iJKKرctR=}Z<ӔR;V+GUS\_ iTI~͸r55zzMy=nY,VU?ןۤ JӧOט1c$7alذA=,/^ܭgU[[/^pX7|S>}ݧH=3jiiG׿uٳG?o+!!A?$Immm~z矗$}z뭷l2͚5Kf;RcccFw3ϨURַ_ZjVZwL{{~_k͚5:g]ve4i&M{'1---8T466__EӦM7߬oY^W}^(--ՓO>|Pzǻt:}+04~S#2e٠^Su|z>^UUUھ}?رc:g<3ڼyϟ .@CjhhPEE6oެ?OGѽޫ%KhոqvgСCzw/}鮻҄ p8TUUm۶^Ӂba /CBp9._{kk-оplu̯3֭b$YfϞ$UUU4eo.g,-Sw;VQƙ?a,^S)iJ^Sӫֶf54UmXsM90=x5>QZ6je -<#43tATY:^+ yWWuM[o IDATK2CUty2'*7~5ؗ 4`4r)49c WxSbܹjcoEѴYZ.|rRzC2%[)iLm+٨FF%$)==Vm͊7-É@F+E /Y;S4!@}ioT %***-|.\^GvqdIʦsm%=KE2,%DȾSʗIj0. 6M6-eCb;w] B \2=MTRe$u|t'1dm s6EEEIl0L6MiS0"h(Lv?= q0Y,Ũc}4<(porĉZloUW][կ~%˥_ז-[4sL7NѪUTTvk̙VddTZZ-[tTjrrnvUTTOS}'zX,1cp8ޮSNi֭:}-**̙3544ĉڴiZZZH]=7xC\r *K FXoatSP_bبb)S4~xVJNNVRRc͙3GaaaV[[qi͚5Ԙ\RC:y򤢣5akݺu:pcʔ)WddjkkUUUdMOyfߧKcbbtW+55Us͛}v_ox]{JMME];wKϗІ k.,]}՚?ʺu7""B˗/Wvv C+))I6Mk׮UiiLcIR]]]eUTT$I#GTVV;v(<<\C 6]o[[>CIݯg(uK:r䈯W&|0:~SFBy!v{㇥ ȑ#WTTHRRRt?=]omm<bbb)J]C{0:z._ KJJ$-X@ ,5irݲZ~4غ p*^PG 0A{sUЭ zC @:$h^`j]GF&$$ 5{cĉɓ'+&&8@Z@\.UVVfiܹ~fbb,Y]YY:$ͦZݎv_E> !gu7jʔ)Smm ֯_(eddoWeejjjdە=rݒrSEEmۦzR&8yW_җp8p8TWW]vO>ѪUkiiџg]pWrrRSSܬmݺ7G$}2 Cr8Suuuku@.`־at[[mu=}F[gg~\n#2{%*(4}Orjjj QQQ.8ZZZ]¨TUU%0doힹ `h:ߏ-**\WR$ϗ3._`MK O=y #wshYsjΜ9z7ohܹ.4?,!áZxqK`uu9՛o9_qI^^|s^C(Z(Izw\ h#ٳ[뭷TSSĊ/?jD C6VUѾ[g`iÆ zGx|۬V{1-[,B=4 t͝;׷^TT VPK~oŢ:z C$~&=54AC & 5aM`%өW^yEE&Lرc+׫Z9fS~~233Hy^YNRIIZZZw;ٳ5{lIњ5k[Vegg+++KъfSssus2bĉ}SXXU__O?Tuuu-Y/z~jX4uT7[-Z/0,+zhXKKJKKU]]-ͦB%$$O:۰={>S{{ PDD}=$ĉzs8dl]]N:f8qBjkkSxx&OpIRZZ233U^^>,KK/nm޼YǏ՘1c/} _r%*++ ڦO.0|555*..VSSRRRx}Y,?裏E6lrs@|MKKKu*""BRGo̰0]0SLTkkʆ{۶&UWWF-mOJJ@3==]={ѣSNi۶m+$IJHHPuuf}iݺuJM74l5O}]I 5VxM80,0J566xqqq~]\`uv SzCwO3LI:vXc*++}III~W$\. =4LKKzy,4uT_$͞=[RG'NSq PZZҔ(EDDj k{0!66okMgV{<\:,^دw?A  y4^kƍ9s_'I1118q&Nm޼&--M]v}-pnaտۿ1,4tsq:m۶Muuum]u\~]=әsXzn@gyy\k]8HɓiX4nܸ~|F =4"<<\7t$SEE9m ̙3UPPJ;.'hF]q^{mX1 uO֞PEEE)))|>3X Ђ +ݮ0Th-UWW׭H0 *##cׯ_!yxG )--ͷvj0 cKKKtiH/YNSv]$I?~Ə/ۭuY[[D+ޮ?P}߾}222|=3###uWJ\|;ijΝ;wo[LLfϞݯс0M5i$_0!Iڹsg+RPPM6BE؂ 6O vI2XB_xG/ gu^TT%K}s9##>SVVޗTee_'|q00,UWWt֥^Lsw씙)0do[YYnݪ3frnvޭ/!qG Hɑ$())I&L !贵p eٴsN߿7\]uuo7}a(77WQQQUBB]O_7B`ƍھ}{}+WfSqq3{$ <ֿη|*--MYYYJHHPdd"""rܬzwnSCC֮]Sp(66V{_^Sll,uI߿_aaaz뭷t+))IEuuum/I\(<<\RpssN:r0U]]ɓ'pfU'NPqq?a&4#R^^vjkkc-ZHC vy=ŢnAR!G rEb+++1<[2 4駟jɪ6Y0F(?R8y^Iޕ<&u>=y UEEE***q9ݫ{񨼼ǟ ޮm۶yi:t:pի{=G}}>A4k_oڴI6mԹGsv 3=}QA 4#Raa$:|Ν+ͦ{JHH$l W """|?ؾ}'rc{# vN/ 4^yO#$F*P{{$uguCUjjj v)2ӧi8:<NhF &jJ555$)999$ި5 c&@hwUVVԩSz衇3?bp}JKKxdZ5~xmݺX,M4IƍSll,t~o4Ηq)..N111X,jhhP]]ݫL?~eȑ#jkkzn&Νٳg|nsxY,(''Gqqq2MSԾ}#..NaXSNUaa{=UTT`{?&)֤6GnNC(:^|sbw>N'ZZZ`2,~?1::d2'7`Xƞ b?dՊׯyڵw}'m9c.}x}x<'bjECC2EQ<]ZZO~0 |2L&9rex-D}}=~_`0@Veoڊ6~l).]Z{egg':::p=ܥ-ˎs#+G֣RڿHzTNc9ʱumm εZwܑi??U*nz}$B!$r\.,JҲmmmX,li;4 _Պd2!x<DQTWW]]]_jt(j5666`0H$V łǏbŋX]]-eY|hii0x%<BZ-jjjܼJGp7cnnN~=* ׯ_G}}==zeaZ100&\z_~os?:;;0L8׮]CCCAϱD":=z6 }}}PT~3 1??/_ZZZݝq@S^NdySTPT*AbAww<ثhp-9M_?jښ|OyVEuu5v{TlW^! . hkk*,..baaAxlb˗z8LNN`0. MMMpܹStYcmm `0n߾#c~ll7oޔ^V/^kyHrⶒB!{h@Bȡ!-' o޼Ӂ;==+W8tvvfC,W_}χD"Q{Ei IDAT,Fۛ6OGܼydDd eY}`2t:Z2Qݍv$I ȝCJ͏1@Zj3'N~7oD(;^/矣===xŎ^Iĉhjj:\SSSx"N'?ɴt:?b1aH$2@KK a4.(-tin޼@ _ 088^tvvȑ#Rnj(u ɤ\&qR$C9n_L&L&,f<$<2<~_]]]Vy9 b8y$yq=؏1˲uH8x<|2?Q?7rQ*Q)ayXJڊ~< ҥK ~~~JuⶒB!{o!BVTUUA~zHKKKӹgVFA?Xϱh4*w<-<`Y;k4-_YYA,qlnnÇh4x=O>E @,C<G,QӈFnuuuҌ* |{+ PT8qĎta0W*GŶ.a+QKm_~Az\.8ND"|7E/wZ\q[H!B=4I!8z( 0 ;~zE8&S=*{W(]Jx<@CC<03LMMtO++n+] !BȻ4 ! G;r8lΙ =;`Z-LEٔ>&={fj  "#f6~&Ry(8nlIΫH$H$gObN;'˲%u{<x^l6tvvٳgg$fAH0嘎F~Ʉ nܿD8}t`{WbttPT0W:L&ƍ/~ |k׮atto޼&AqX,hnnȎd+q?{8=CL&::: JgӤEp:d0(K'§~/_baaX & F/ zm6Μ9E" !aX, ؞ :[xR_ N'|gϞ8ա]-Jݔn/_zLNN"@pԩSh4ec- xl^rПT:mXG}jy˗ϓL&p8ijq9, b1% .p`cc=B"+WKKK{yTJ{AȻ4 !t4I!@tywMMMҥK`]]]X\\z]\t fH$H&`Y[[[rnO۷AGG\.Z[[L&0 8FA"F)rvv=ӧQ__W"HypJ%ŋ`6駟"BRvɓ'g%|8<100^Tn* DwE"ؑv?JRy<<}gϞlcCRA*z*US)F^tuu!Ճi<|pO=(5,Ν;J7n v AnR8*p,{y`0 a}t)ϑLJi_;cǎAEܿ_Ҁ @SSN'\?{f!R%]WR2,j;!aK!䠣MB!Zww7XE4G0 Յ4o޼:p8PUUD"@ 1LNNŋr~JMN<7|%8@yy/y###XZZBOO, jjj0 ᰼ٛ7on޼~XV!f :NfUUUØ8VVVߔŽsq|w>ܺuk~|*E9;*ݮ+I<ȻB!0fD^sgLKY^cHiv;w@5oHBJ'zwV\j!b Fj߿eYt:h4, QL&Bܕ>i֜L&L&',/3W()*J> H&H${:˲0 PTxp8K噚GivBrv?^q8 @E$ D"7 ty@ cill_|vbI BEQRSZN+ɤUR3f3 ȃ<# ŀ&-B!Wkk+Lapq{`&!B ͖%] M!4I!whıcϞ=pnOCCn¹!B!ȵ=!`rG(yX-655eVsCQړ'Oŋ*5=!' B!MB!j "V:+y9Ly%.#W,=!B!.b+B!B!B!BɄ4 !B!B!B! hB!B!B!B,$B!B!B!X4I!B!B!B9T!B à 0Er?88ǃ۷o|j/wٗ; %Vj$VL{CqI!BɄ4 ! ,ˢ~D!i0 ?h4PTE6   pd2AӁalmmakk kkkA ؑb *}yq҂+W>}W^| ٌa|R,aX,FHb0G. c5W{)9 qڊFfhZT*aaAcii H][[í[ b^o eMMMhnnF}}=t:T*"1;;{˙B!h@BȡhL&+%(ﱼ ea h48q;NZ 0  166V˪{Z-w>:u {:csyczHalmreY9sUUUl"y&''F,z=Ѐlll*qoX],͚\2JamrOEDQF@$Q$\P"шWZkkkXXX`0@fpb  fOacáҟEObk,.."Hy >a* Y?aF\xo.yfÇ~Ʉuܿ_nR?CnXV\|ǏG4?P !B)7$r(<{ cccrl6^lIK@,+.]BCCxW_}Ǔ#0awzJ}<G]]099y<#HrMB!$IEۛVwᅬ$ ܼy^7kbf6CZ>‘#GՅׯ_GeqL&A~!)#o~bssswN!B~b+B!$HB Ie#E1K544,XZZkf< T6,N>f{AիW-I>QgtʕD˲r+_4j5.\Pt>9_|Y/Y:^'B!d?Ѐ&!B*Nn}}###044$^шcǎ!Lbhhh&A|zKE?q<|H555pB˲|9,"1??hooGuuuy B!hYB! \.<n߾=]]]hnnFUUz="<fffz :ߝ;wxt:ֆ8,ˢ mmm0L˲x%`?ynp\0H&ŏ?/v[u;::`XV ߏY,..xjwtvڎ> IDAT 2eYn7hy-T(>ΊIOKZZZՅ:h4DQB!cffr G?N>̱4-$vcYǎC[[F#X9}XB{{;L&DQ< ^Tz|>8Nd2eY~,//ctt4mTd~ڭstbuu-*W%ګb```_fA uuuPc'7n܀bz˅Ab1ZRӧ*+RAۛTҗev;F#xvqqE/&=z?ݘtAh4p8ۮ|. @Vo !B)'$r( X,2V?OQ]] Fe,A(hjjB<ϻC]:ߥK_~<FVEAD"hZX,?~/^jOX Bz<qo~>׳_q]ϟcmm Duuu8z(l6Rp}g`0n߾ #;׌a{ɕz_r'˲aKx<B!hZԠqY{,O< NW^acc#oFׯjhDWWWT*\~=aYVhjjիW_u([F#8$|>~? :::rԄ .Ν;K1nbXVrC%PXXX@KK 3 uvv8xeN9|w?jDZ!B9hh@BȡgaZ!"nݺ`0d2 Q0 X۷oZ*eYܼy>Ddavv/_1:: `7oD2H|-fgggd2tKťs הH$.B 'N XL^SSSx"N'?I,//yQY ^ޗb㬜ݍv$I ȃbf-#uf3K===Ϟ={vf&fC,W_}%OQ,Fۛ y&BYz?/r^ y$I,b1|p8 F>Ο:#SJ/Y8={axxFu%Iqlmm/,Me100\999`Ph/_^^F4<-<[)2Z.R:+jnS1<{]]]`Yy+s:_>ϋId<+yvp?ڛ xHM-oٜ= ??ܾ};wxb088W|0 #ǩB!BDB9677q=\pVgϞ0VVV0??ٲt4K{T*L&~5e TUUNJ%˔37u)r!}(MI3[0ԙ}͘-{_rŧ4 BQ{fb^3338y$zcJ7ŒWL_*mG>qjuAWg#S;]J-b)ߕn UzXxDE0ayh||f|r%B! MB! Smmmp8X,p:{ xGj[MMM8{I$ 8Ѩblw"cYVNP( ֢O<)ےgܗb\]>8~8v;zzzQ oR'q>ӑf%I2 E"D"{T_>uZ.R:+ ͆N<{ 8ٌ`0I%:yrE$-jkksssA E(ٳX'|@ `{4!z n7Ν;jUة/Y9S`fYUUUR`8y$Ο?7oȳUjy-J}{eYXVXւ)-Ɔt:a2q]c}}@`PH|-B&ud2 ˕...*:+cttp ```GQKqt|.oV@IG yygϞDdVHt=%@֟|ghVޗZ.R*B{TrJǓvyXVX,,.WLH,Z5KmzGGVw/%vll P ̙3hii)B,{"eY:uJ͆a `0 Lbhhbm)!B!MB!,AD e쬳p:!ߥ}DQD8N;ѣS I<򵵵9{wqСdRp8{At:\z8.kTKaKqVj|nllȃ)N) ٳgX^^˗/= QjȘ>S _C:J-=*D=u`m˲DSSF#348lnn8Hٙ\;0N/&-=N˗/g}0Ǐ555vZAxFK.>}4p9ytZ[[oʇaիe!ByђB=͆3g`qqBl?łA۝Rt^|D ^Sh0??i OUU^QlnnBRl6[޿Jɽ"p8ׇx^yl=q `qqP& JPNb|t188Ӊbkk (Bӡ vMMM*"X,˲Rl+>${ܸq555/~'O`eep* hmm"KaJ{i!L<;S:F)&=z= t:p̙!v; ]Qyb###y]g}uR.R:B{TrC%)[{v<>>ӉnL&0 )q299>t:|'x^/8C]]p8GRW*s}(ܯO?˗/X,ɄVA`zz{)ұ޾}{߇dr0;;UaшV477]l?SAgA066Ʉ~466?9[yPݨF/0<lƧ~h4 Jۍ'OdMzq\t fH$jZT**j +111`0AvhZX,$eqj5T*l6>;;sARƍD"p*gY@)`ڛP($/3q|l)VDܦ:6^J.Y{Zsh4S U# lPUUQ 2ZV^r63 jT*)M!0r{;!4RG.$wS.i~4bWݯK5dxO㦣2PYJJa4CBȡ< Z: = *׾I:r]o& CŢ[X:\ܗRTL|-+r3 VlItoVT\ WrG/*sK' w{ n=𻴴UJH$GmN1O>/eX?>0L@_ 9 jhZ&E jhZ&< IDATE jhZ&E jhZ&E jhZ&E jhZ&`Ϗt "'%@MQ&Ǐt L:4D-MQ@@"4D-MQ@@"4D-MQ@@"4D-MQ@@"4D-MQ@@"4D-MQ@@"4DHpYF?OG4#OnuuiڵϗnWEEo߮'xB.#11Q\sV^,Mڹs^|Ew<\n +!!AǎSyyl٢_}NiHhC#o߮?um魷ѣG{Mf]{,K6lɓ'%I~_`Pv=4mgg}ݧyzsչ瞫u鮻ҁ\?^$-X@ ,ЕW^/˪y+!!NSSLQQQ<O@s8233uwkŊ^9sfΜ+R?[amי68h&g}viJKK|k<=\͙3Gw/)H}O7 wW0 m۶MtwW^wzG2e5o<}_W^^~s|>߀m0MSկ{謁Bu+''Gwun z衇={跿ޮTjѢE>өGyDyyyjjjң>={j֬Yg? $Ngh[]ghHG aɌmidt钂!gnTII藿l6wc=6utM0n RWȺsNrss//~7>O9hjnn֭ު?_$-ZH7 hݣj7߬<_<OJ+wO|K=썵]gxnG#G $uԨ3%$TpNbb:QYIVr뭷9$@=+++?nF*))ъ+x}Oixp {W٭EO=nV-\pe޽WO?[oUT\\ %IC}8x㍒_׽niꡇҪU믿@s4:k;Mu\jT+A-F~;]jyߞ׎(~zK$֪zZb֭[7`0}{jhhrM&!Iڻwӽ3fj= jkkSBB222BرC~;/QiiGJ]튉ʰu|z/}I#^@:k;Mڧg?u5wxAVPi*>ΥO]I$[ '> ~_yў!͛tz]~kw 6(==]rnhǎ*--͛9uu jiitڊ IRNNGhkי6^hfədw?&KLe, $SMIN)[gl+v5551/sʔ)jkktnm۶kڵkb -YD999Zv֮]w]8p`LHH5fe O#F2{SNW^$xx'4|uvvl80,e L?]D4$)Gl| ~Y6KeSɼ%K)Y,I6ݧ؊{XM^۰ataWu/_?Ot֫gyu7j޽ڽ{d,I~K*##C?z)=:~:;;\R>7ȇ-Zo~z׵cUWWNa$թ|D~b \.=cz'oJ+B7 Δ!{ 9XpG g }*%#E2MV(dlɴdZLӔiZ2]'߽T3ֆ|X=#z~ 7 .Pgg᫯ok_eee}_B7U\\$k_?S-g>}3izJHH-oǎھ}X6E/+Vٳ5{lr-Nޮo}[#Rkkku{Qnnn&tM#} t!>|X/~7mۦ .@sQffܬjm۶M_4޽[7pn͛7OJIIю;?AǏk"aq =IGC-vڿk;} =~l.)Qqy&u `,k8֞322"\ߥ~N 4{a IiIdZdZ Z6땷'ðkѴzo(5 y<l/RƦzoJ)UR懏ϭU?OQ?yNy{OL3r3e;zhdP&#{GGM2>|aiYV@`@_>W>uvvȲ,kw*m[vB ?夬iJo$T@dQMM BXԛeJKeis옢U F 70 VًN_\~ө)! TP-Y6KIiI6{WY5CFy5 9R@Xh$Ԛ|Tϛ_f)>>NsrU4W) :^n=jl]yOgvouxlqR%ժ3>ك@&!#SY9nշ{T@6&MG<]Cl2lVWLC ݏ@&9N)`Sq][6mIoK:3 u4`ұdw4eJTRPͦaeںzcRGNO6> 4? 3m=,I6)%1I[hlE M`P,uLSV (TP 6LGf0SapYL|sgLh6:LUTJ2mMr'O#bvdK]9`9IrNROEɎ0 9tPJMaPvz Z=)j=ޙ]5mJOTB|$ۦ_dI͝rٕ7#SGU|[jb Je60)h$ה*3]4ESo9S&9]1tTɝ)ω (}jlmҾZ/jBꪚΝdm[n2`"(TsNǷU)&%c?RR|-?VŻ57$KrZ* >LTo>򺦤$M S{@ @8hder6gٜk)Izg&O[[X@ ~PPBZDRgS5M55ˡsF yaJCR]:<3`, ؕ)Աw=JMHӗw[8[CeIVѣM6 f1 z ̇&Y&q&DnWllv ~ LT0WGG`K`T4` ,ɴl s,]~ӯsfuPbi$x4mNdL0 X2X5ֵڵdrR Ðar8r\P{{;&`!i2MSe)x"Yx|>.[!VȲz<: k LdJMl%uwJYdZv{D9eggkԩt9H\\#]&XƪU>/0l0iYy^n+%dLۇI=Jf_n~[iI6K6C6NMrIj$7m4-[LB\.\.W(0RMl6v{h8X˲ Y^]󄆏 }4dmY #Ę\.IOM@ \w0yp;n3,&11Q~{j& BFSXi.]߯2͚5+2Iɓ'ǾAL8v].Lll j .PFFʴuVuvvJ :jxO-á{NGeYN;֬Y<_V $eddhݺu֪Uy1ѡ^zIZlJKK{mDa&Kw @/QsU__M6LIjii3<#I2MseHu]Tffx]r%. Ÿ&`Be].H zrJLLԩSyH8=JOO$UTTk_ڈ?v?$=4ɓ'ꫯɓJHHPVV;"]"Uo^E$L ?O CϻCMzjCMѡ={hϞ=.08N777E"TZZ[vPSLLDB@4!0,YD6l=e˖Vӽ˒+4 Cs$jBr/^vW\qE+DM@jB (BM`&{'6}nUW]+W*''G@@*--զM]ҥ^˗+##CjnnVMMۧ-[N˖-ӽgַo}K٩kqqq:l2M:UJHHPMMoj˖-,+lqOM@4vmZhnw/^ŋk ͛{W.NS ŋm6ՍիWoW||| TPP+VhU[[;`h0,qu 3{:'w IDATt饗y=##C6lfvvv ?O:GJ,5liO`P`Piz0tEEEۇcC׫CrꫯCK/ke˖)111'w577n+55UŊ MokZb6lzԖ-[ȑ#ڻwN<]vFMMMJNNO}JɒEiھ}{X /0 ?SsÆ jooWiii+Iݿ9T?RSS%ISNU||^ohc˲Ba۲^a;Zuu<Ç?q"3`͒+Դ;4,Ð|+̔$ϧzkWfӏ~#]tEbguvvp&8wܶm>tJf̘oےzWtc/^ jƌJOOWjjNgIKzΔzg?`UH icӟTv[ݲ~z_^[lC=4xb}_ԩSG E]'4MS?nB믿ݻwkʕZ|͛^\|:y|Qc̙~˥mmmzUVV|>=cn 碋.'̼{/F2@hjmmmڴi6m$ͦ]vekBӬZj@f u] 3%?1".˲,=zT>9z=++t^)S s9'8>ScL3!`YlnF]ve.gHC?@q^x`Du]B\.IaZrrssCVTTׯWAA$ =ѿۿ)!!A;cZC9a&`0 9 PfΜ %%%)11Q`PjkkSuuN8^4566Gs\r|.EqqqWvvRSS]---:q>k޼<]VTWW_|Qe k7x$i֭tZͦ\s9T\\bbbzܬ*=ztٳ޷~[eeeêT_^{n۷o @hHC?r)5_Rii)CN`˖-… pk>ONSѻ֭[{=ohhPYYf͚%IJKK#<6%$$oVuu$i׮]ZbEh/\]v~Nj=r %u_׿uC6# @0a̞=[ ,PrrbbbdC5MSiHڴiS?t*//O>O_ #Ռ ph*))PLLl6l6[w 5{l_V]]]enI]={l8p`Xme˖iԩr:a dٳG0TY瞫C ix2\p 8F.&S`QN{nqFmܸ>|A%&&^yyٸqVXŋlMzOV^f)%%E+V|lE MPTTUV)>>^ :t萚zp8d(55UN k4}t\.%%%)55Ulĕ .@يU]]*++u)|>!˥8edd(''Gn[---.3&&F˗/׉'n$ f͚0RGQUUZ[[eWzzTn͜9sD4SRRTRR26K}zHiq}1M .&Hcr%>&{W/UPP ۭTy^y<9rD>lfUVV[n>9͟?_jmmձcβ,}ץ^/X999r8Ԟ={O+..N˗/fw]|oK_#Gو00\r\*//kA)0B?CC-{ァs窶X/ԩSѡ͛7J~_@@ifzAt*11tJJJʕ+K/ {فddd /TrrN:R+ jO۷otahɒ%#ꥹh"Ǝ5553nG?0O}Jꫯرc(|8b"~:я^?&p_?02|I=ѡm۶i۶mQw壏>:ti_0HkmmՕW^92;{wM֬Y' ڰa6oш@f̘$Y^{Efsbǎڿ(|}WVV~6n(3P[[dYx ]|*,,TQQG]aZvҢ:uTcgg /hݺurZh?>0JKKSQQ:4dMCa4K8#_jj&λ"N׏ΰ}^^OwC 6cItI],ΐ0^W jmm {}gl0 ;:y/vɲ,BC\.ר,,,TVV4M:u*+3..=ssK=9ŋ+66Veeez#hMx8F.&S`,Yd<]3C!DI ݯ gւ p8xo߾%|gg^{5y^͛'0T__{oXeYЉ'$IӦMSbbڵ+Ksƌ.;))IgV0Ԯ]"r3)>>^11,y?U[['O;$ owII]É\R[n-[꥗^-[^3gT^^$IMMM:qBa^vv 5uTũUNҾ}W֪XJII$׫VP0Q{2 C%%%6meYT[[hX=ݮIRyyy( &曺 5sLUTTbDp:ɑ$UTTh ڻwp8=з---:p-ZK0~566=㨧+??_)))2 Cֻ;3FZWvv.bI[o+VXڸqO}U׬Y;/^P}}vXyyyJNNtHs//׫Z9rDtPӧOPSSuQUUU[<0 C*((Prreب} ڛz{.g١l65k,mٲǺ_w{ӦMSIIRSS uQ;C?FsKsmc=iˍ۳h߰rv+BJJJ ###C1cnݪ}c6m#0vӧ_7^ϪUk=m>}JKK>D^ZsNeO>]3fPiii@v4M`ؿ:UWW7N8!4e233 4-Ү]4gP33#}pG233ujʔ)q/ϼ?e4uթZs矯>l^^-ZXmٲ%{ e<*%%eDt]r%JLLa2 Ciʲ,檳O9y{;OӦMSllv{|TRR]4ޟ.KW]u+0zNf̘۷xޱ?뗤^Z}֝Yf)%%Eqqqr:}~,)..Nv]e z/3FzKui8i,ˍsGDr & y^mٲE^znrrrvd֪Rǎ dT__f%$$DӧOWAA>O*!!AUUU ](ТEvzjXSVV+66V{Uyyy轧~Zv]%I:~xõݒdu!׫Q.kߛԥ^tՅDM:uT`u+++KijΝWZZf͚ ͟?_111ipPCC"׫Xn͙3Gn[+Wɓ' iFpt+Pzzz7jkk3fhƌl{f߿_ #.FrwHq>^ߛFHR~Fp/޽[ =~y?B zeSqqfϞ--˥dkҥݻCCks=fAA*]xᅚ>}RSSSRgggh8jꫯVJJ{~a6nܨz~Av=zTZzrrr4gî}Rcc6nܨE,ǣ>@'sj޽C.w.3 C_n`m6]VgVEEE9p{bdY:::0zK311QsΕiڱcǨzg9HpG>d*++ѡ j̙ڶm[gOpqqqڹs٣оP=Eywpi4ˍ۽]4}wY)|<@0AP/)S@yyyJKKRbbrrrtm߾}Tx<@V۷OӧO$`ѡJ(''GYYYz~}]);;[-YDahΝjlleY;;;U__{O-R~~.p~9`X8c{=*??_VO?={=s@r h4,YҫfޙùHݟ^zImmmNzGpGI4MٳG .Pzzz8sZW۷kժUZt*++vU\\,׫W^yeT!{89 {s\v{{Zti]555 ͕#:{k?'y7y7e<~#{6tzpҙ9 &`BҢ'Oj׮]r*))̙3ŋ¦y_Ɓ¹`0SN)''GIIIZOgg:lU7PǏuqi5$pH~?뙙ˆn?O}SJKKӲekfNPhYvޭ9shԩ6m***ꝹsQ;Fͣw(c={aI~_10^X.4o>䨰PW^ybbb_~yL/ v3ﭶ6c+u 544  ]EZph5g?| uF[h?SRRB= t. ~xH0^H?λg8ZxF|_깍¹_h&$4zzڪZ8qBk׮Ull-Z4@s0={!jmopx<I]ox:z|u xtJǰjѣN_OĞĩS[oi՚?*** 9O߿(555M;lpiiiFuu5PZZG}J(e4,=x< bGAVVqLNN"@eȲ-[)!Ȉ.g-y"7źddWAb_?DDDDK4hYQ:fJY*jXQʽ{K޾};fkmmŚ5kM6add$%]c122gbXn]n---Xf 6l؀g&t:l޼& `.]j$Itՙy.\XGxhWnn.vQqQ466v›osGh,W{CCC?|G\Ѐ/}%}Vꐝ ӉGvBܔ;wҥ*y%~]Z,YȀ^GZZzA޽{n[ZZք/ZCVPS IDATG,oMR ?<łr/,,ĪUwQ;S(hhh\QQ`N'ҙ~HjVSSJJJ4vرc0Lػw/LϏҳ0رcǼw88s ''훷`0`;w.ǽp{\J%ɮGZ|`0`Ϟ=F[[qq~TVVbƍ!$I-_e9%rՁ'njj ׇm+QZZ`0 .t QrTe\+WQO?a_EEEȿj^/HYΑįe={Bbob|Np8pUWs:|r/c]Ek9|p(% sRghQ[nl6Ӄ1LMMrAdff$N8RWRc@ii)6lܺuk6lCՊBvI IN<"L&۷---$I(Z(//Ǖ+W" WeܹsǎÃ>llݺ ݻwr 2f3f3*++Q^^3fvEĉx촓$ ƺuPRR|y&ܹIuPDO`իWq嘮LVڊ`0ʌхy-Hv="?HOT\۶mCii)pi~v:u vºurV0JKKzjbhhH?KhDAA6mڄ>ܽ{N. :V7op+IN:Rdeer t: ͆&z\t) RrCff&vލLLL@b^O^".Ή$(++sF#iӦOv^]Α_ZX7E"&.t`p\u`6QRRQ`=BEk9|L&R$ ""J&hQFfV``P8uǓdY`@SSjkk !"z=L&nݺ'OOeWW~zs""n߾uAݎc֭ ٳp8ذarrrԄz5oA@ZZvqϸ/U<l=p@D˗.]իW|]*ԣxs_Dĵj*Z ,j'$IhkkCYYk.sf9s=, :^v={VrGee%l6Ջ'ѣG‘#G}vX,l޼~_mӡqy\tiY hݹso߆fCCC*++  " ~? CB.vG y;%3SE$?^,Hתi!7Hir~qt:]LmRzm4(9sW\AYYˑ,dfftݻD__R~v0~ߢF (Ν;ΐ˔ȑ#ذaV+fthHX,0p\۷{E󡻻###(**BUU ш`0׋Qܽ{]]]劫3H$\r-v҂nXEVVTݻwۋ.8[8;;;ƈ^ (\(z^ `0ܹsQf>;w⭷ޚQqa[˃([<055*!##|p:aۣIpMEff&\.q5 jz@*|#;;(brrv---x'R$ƍźuPZZL~LNN===x].y*"Jd9G~iQc޴X $4k9"9RQo';ZF^/%"nKXڇnՅ[fW9]6O<. lݺ$pJD",jǭ򸠠 Q-o:iiiHKK EqR@M&F#@ș =ܛfX[+|ڵk֮]~k0HKK(e@^w5eրazrNmpGz?WNև`0#@`@VVDu/$<>K N#}>ߌ٥l999Enn{D*ܾBIt=RBr5?HG8ĥՁpUө݁@cN ^ϧYz 5>AzxBH鐑Qg%~n;Zcw>Fz.JX, 90j^*zgy}#> })"zD7wz$""233 Q Q1tlFAA,KC"$~͕zIDDDD~M"""R |#G>dCPߓemmmx.9KDDDDDDDDDDDDD)34h0 Eyy9233 ݎ۷ochhh6jEKK .]r ؼy3^/~xnhhh#G`QWW*FFF`q59wVXՊ4LLL`||]]] rgϢhhhbA0DWWΟ?xꩧnsNlݺUFFFq!Z|A@CC Y166ݎְ 2TUU!;;YYY{1cx'E|7_PQQlq eFy566ot=Ɓ7o8;ݎ_!_k~'VSϊhΗ{=\|EvkX^G]]*++3ozZZ)0 $ PRR+VFNxOcmOZJݏNThXr%9Zj6nYqItuuElƪUPTTٌ@ qܼy7oޜw(hoVСC̄$Ix7B)|I :uj """M""Z#++  @HYQVV7##''V&)쾍F#VkȥL&V+oߎ@ | USS͆Ǐpw{e[nEuu5!"AjE @CCq9|Gqq1jkka4!"dY)=ft B ;hQ Ž;P^^>g6 5558~xɄC!++ aƶ@555xwرik~'xt}}}سgA@MM \u6 (负hR? }thKhp\03_PP7 6mڄjFz8eeelxwp֭1YV;vd9*))ʕ+Be{$}vL&>}oɄ4.+XUUӧOlS]αԷw"77:!cՊjYQ^^rEEEev=@DDDDM""Jy<1<<ӧOcdd@BQQQYZ(..F @{{;v;&&&`6QYYTVVb޽x7ԙZl/"ۇbH/bxx~yyyXr% zjz?~QVVݻw7ޘAx1pv#==VwV+xܽ{wNyēHοq=|l6CEttt`dd0Llhhh@YYmۆ#Ga4kjj "5~ǓZ=99nupͺ:u9-pX^b70<< ddd%5.# Apu`rrhhhfCUUx dff/((u`Zc93|nkG~~> .]ǃ,Ԡ:.Md+}!555عs'L&}]\re`|z=z=._wB$XV׫o֜YαַI 6 ΝoBthhh9i٠ߏ'"""M""JyEEEχ,x뭷p8 !2t:A;wz 8|0FFF !"`۱cCKKfۯYeeez@@mvM<}݇3F#.^+We׌Ϙu,ug8k֬Aqq1qa8NSmhhx'PRRF\zUV$>|`PI$5c!;;uuusj'O;-x?{2sLNN"  BbڵǙ3gt:!IPQQK:\f,iX;wv;>"''RZ_,~z7T/2A@OO<BƽhTWWc׮]qҥÇȲAܼy7oFSSjjjbŊ3]α7Ip s#.\ P]] 0g f:;;$"""Ĉ8""3Lttj$Ip |B__\.z|˅ @nl/"6nApE >8y$\. V^=;wz|zI밉>^5k֨$o7n܀$IE3|LLLŋp0sbͅj$Iw&Q &<ݎ`0NbڵZaK&ϧ*///bb0kooP;uX S2[X,dff7x HA$Irys5O722|511,5}>:;;~t]]]Qݛ-X;Ywu>OXNMgFRfՅ.5.ڣXYs`0Ύg2,99909GbObig+//C=l\zgϞ3nxx8l<. ׯ_p/v*o}RWX1cͦ.Ku:\n(qY""Jy8vmۆ|lٲp\DOO<{Wgggc||<ܻG|+,dzX,Eqνf/-b)Oժ>?`07#"AP\\b"33FzYYYrP#<*Dr#rX%R$! "--m ,hmmESS aXzAk׮=ш5~ǛωڵkhnnbAQQ/"jkk1Dab;ĥe{4eiY*}n+bͿH9dOtF{Qϟ?v7sn6Yq]@zz:L&^7Yс TTT̨J۪ UUU3UV:rDDDDDD$IRSUURVuuuñc022wYF…:AiXS=שvvCޫ [lbAZZ$IwAyEZX8KǓ/WvCCC(((@MM .\ÁMb5~Ǜω{bb===B}}:YQQLv> ǩkڣx/6Hv ėX$J*OzʲÛ6mlڴ ǎKؠ2C\ө%onΝ;a4QZZ䠰|?&''jtttd2-$"%attHKKS;#PZZG}JȎx=?2|>_c~rr+ݕ^Twc xw rJ IDATt:EϩHo%ݎ7sFFFcjhIe\x& Xr%\.Μ9)3jnmYv͆X(͛jL`ظq#сJ>.7KDDD8IDDK,|ٓ0~a#??_]. }wV89ltt:444ŋ nקoyvRܾ};ꐝ ӉGvV:rss'<7nh!ߵʗxc֭χj8jkk!24?^,p~kϱpܹӉ,ݻqhJ*UڿٖJ{v;]Η.]*Ty<:u & 6 ֭{ィUXX86 0::DMYvf'NP,7hooƍQYY f7 ""Jq$vc``@Y<rٔ&:b~jj #???(--E0TghJ$^ >bl޼7oVFt^?ԄbR)2\.Wș6+W_(O[+ZƱ=DK\.n߾ APSS2f `ll,aUDǺ]6 uVLKdS?"*lhbv;^a˹"?}H˅7@zz:nݪ2k:[EEڦ^|Y<_yjUn߾ χTUUsfn`0a-))]a&""""mq@R^AA8kעYYY(۶mpo6AF<裨Fff&aٰ{nFǎ;c!##VMMMطo zzzp-Ͷ$ NB @VV/LxĚlx^zzzPYY t0TifKF{dZnѣGC 0 xN'pu9f`/_V^\fuN'7aEcc#JKK@ Q;w.X###hllDAArss ˅n\v }ߏÇcݺuG^^\.׌:c-19r6ljEZZ+N1p\۷t|>׿FCC&"&''a҂@ 6Wx֒Vq,|%|R @{{;6mׯkV>X;w<O $ hkky{0TiBŵQq&"$I70::u֡Dkk+zzzOYFȲ ݎ_W8x rss,=z$aʕZȀq_[Α|Ӣv###CCC)2r~W\Acc#GL9&""""mEwӗ"օsmuayN⟲*i[n= ܻ'˲ځkQG^oF'BZq2ڿJd{$N3$"AhTWEff&y=8|97^8111o{tBe|)ei8#k}N)Ӆl6 FHÑD Aө?&(O@cwi˳~"'fm3Pۆza^nh,Tbghђ,`08M8,1mrbNyKUX#*=ntttHXϿq,|O<iOEEEI/X5S%3_nLIē Y~hh+$IHKm-O9v+w5 -B$[h{IETts$boEZ.Ƨs!gQr$DDD u@;N}}b](UVVFFF8C}DDDχdCW\\<@{{{!"ҎlƪU.\Hr4DDDDDL\rR\\ ti7"ͪU v{\K%aXՅ1\.Fb0LFWWWC%""""$&E o`&Q HOOG]]{r9F"Zjl6b AA^ɄN:u*a%""""DDD˕0@mm-F#$IBGGG!"ډ'P[[ ff|>ܹs""""".DAXڇnՅ[fW9]6O<. lݺ$ xkD-Y!Id2h4"`rrrѷ_nX30Lq$B-  "A,z\!t:tv?&(O@cwi˳~"'fm3Pۆza^n,|$Gq&<❍ٌ3<7xx-QnKĶ$,"""""""""""""&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,hQ&,} "Z.*++d@D,p&,$"HwwwC """"""""""Zv8CR4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4(eq@R4H3_pY|NDDDDDDDDDQ$v܉\ @?zzzp%'?^i)/ 122˗/8udY( 7n܀l2W^z555t:| /uDDDDDDDDLp&-yzxggO={$;,Z&DQD^^SO_:^~elڴIc;0w1 C1t:]"""""""""34hy`333QVV;wߡIe4F޽MMMXby|_ivt:,TWWqs1O~򓈷lؽ{w""""""""34hɱPuvv{|s$IHOO__';TZf۷qExgcǎ'2^xѣhoo,O|HKK!JDDDDDDDDaO-+Ν~3Ud!ɓ'''t2?o>\ >뫫w^\.$8:""""""""Z8IDDΕ+WiiiJr4ݼy?xǒQO~]@BOtxDDDDDDDD p@ۭ>|I~ pxGxK/-RDDDDDDDD[ /kDQO?~e7nK/ _z)|sõkO`Ν>n޼'NG?`8t֭[Պ~.|?QWWLܹs7n#G;x3<}s}C_| xo~}v 6^7oÇqNOKǏ?A455`0J|_ūG}?8jkko__})|2>Ϩ|*Y^N?яsS>lʽ3_{5E| -kkk+>c׮](u}]?띳C>o<ƓO>/~#<{""""""""q@<W_}`pkhjj 6`Æ 8p/ڵkacrr3~z_|_<05ըƞ={|ofc_2G}}=<7|_t:g?YG /r+V@CCdYs@~~>^z%yʕ+rJ۷/_=lu+Xh4x衇1CQV|`@aa!z{{g<_^^C=4 s>Q^/2>яp,χ[:>>2k֬5kpA|3n8.""""""""Z<$"%Oף6ls=ٌ6|;ߙڌ |[Baa!_o|hoo(hjjŸ?|c {\׋׮]Cww7JJJO`OS~++ٳ4|9|S x#2~Ihkkí[PXX}'Dii)///czDDDDDDDDX$"dH.H ]gb#g?ټϟ>}_WB.{Ϫ#>?~/^k2!=G?Q8!\z:|K_‘#GflݍK0L8x {k>O'>!^׿__?ř3go݋j444}ƾu:}QP]O(~;v gO} ֭Á_bLӂRbz_,_~PVVXV狪,Z[[199{۶mCYYYe(yd@DD3g%{PWD;tT]#WU_޽;繌 uw?Ok׮ {˗/nr!_Յ/=?FQX IooO>ՙt(**8?=644w}PSS3k~eqgΣ*,y5vq Y8 4lMRZ~ONh~g=0St2C R NWKĎeyemF˖lْ,~񱤻}{{}?z$Sbybl6kÍ M2t: /5f>Iꫯϡ|_^?(90IDDw :~p]w`ӖGPqCl S/} k֬~x(ꪫ.WRRxmc%hjjj 9Yo< Pݨ;v,mLx&bp:(**Ғf¦MsEɊ ƮDDDDDDDDrʼ:pQ쇢P)&3.pHNNS{ؼy36mڄ^ziD@ps;aBE$ 7_ 1h@}}=.=M& U IDAT6Ν;} 999Xd >chĚ5kWu]s"776 F&)a0Ac2Yo<ϟגbCLx&b^WU_gg'݋o6l`7t, =[b}Q#---ubRơ~8IgXpM7oLx&j⋸{1gزe dYoq'َ7%DD3*`K'?d UTE** ==JmXvkM7݄/AtvvjٳfD.SRRvN3g֜'hڟ'|Xf ^W4ЅPN7|< xFt{:^zzz"Z&َjBqe3Q/"&^Pt]@Qbp M""Bzo j?85 *P2dmƑcG ej⻛o[tuu~I#GhoIm< M`8??bq%bʕIJet:gϞoذ:.]c=ưC+**FkѢE}Q*_QQ^ɺ˗/}=_/BP7^G2ٳ}""""""""Ą&L$ɐS!uAN?i@D(AQ}͚?~K7 *.r׿5ӝw4o;_?1FC/| ,=ڸ6lڵk!Ix9t$){[do2bU[X*nD,ˍr\1[ (%l9/\WLt4 _WG$~nCE<  V.\7&&O<_׾kYYYXd >(&vYb -H h۷cɒ%DAAV\۷d2,o~(--Eff&-Z|;W믿G-hX^^8~YYY~ 1|| _O>_Wl8{,~am0 $-<^G;vd2ᗿ%֮]|̙36l1o޼oq@ "ƙ]9@;/H*Nڛ@Q( EC%6w`3`&Ie;~!==__Bׇo}[{,Zs(X,mC(#? Cᡇ ੧‹/v=_zj8w\y?ظq#jjjPSS4󡯯/dP233uVlݺ5sUUK/';#}kHIIr=z)s}Q{<x'5 xS}v|GAA~򓟌j V""""""""&4f}8԰"TY{!2UPEU*d Vd>ٕХ&{ѣXhn "_˗/Gii)q9?o&>8z(/_"QYY v:t/W^yEOӨn۶ h4 gϞs=رcm>|{PUU,ԩSx饗+W6~aTTTvhy7r ؿ?٣9ԩ$:?8u|ATVV"77v1^}UaǎEv|BDDDDDDD/س$X::aG[VYi+2MXf롿!%˗v=DшhTU IpTq-8Br( @BV t50(aQuuKW("""""""$d! 5E'A P =nz}P/S *L\ԉ| I`> M"iH1;!Ut >a4S 8s\7x(~(CT@Pci &5+%B!C2q8""""""""""&4!gz#j݁K& .Duk=?|I560*pYYja> hUZ>""""""""""9$"D68\vCP `dXA(V"G*)z%]^zL4MNhaBhQ!dfZP T(@U֘"!H,i2S嬪48] (TLhMK *@PD d2 $3COzAU7!"""""""""+TǂDD4 {\jk9ЇO?<~7Lz#lI@23AD GVC&0?3Ae%"""""""""-4!# :P^Ǭ>v/ ej>Hl) =% }n'^Lsu)9pYڠT@Y[b MDDDDDDDDDDDDӐ<[L|:=0uLb %3V\]:{se^th9}Z.R/lsaM_LthbBh:qq:;pq%d#KbOHKIŢQԟlGT@oUQV.o5|lfJÀhb M"Jaͅ7DZgB* N»}H?=Qox | G+{Un=fN~وhM>UI9 b/dTUKt%$BoK@DDDDDDDDDD3[hjԣ@ Ae?߁4)L^:SE,^UUUZp\8s 80i1֭[O>dD %IF#z=$I(@e|>x<Ȳ萈& M"iNkmSu(-*(%f_es[(:>Ջ~_" Ftw܎ o[6mBYYzzzpedfffuDDDDDDL$fDBIHE^ &M9Lh@Q 9o<{gCЉ*mC8xk$A e8@*@.?nz1 @eeehjjkE $*Q2LHMMMt4FF8NDCDD1&4-4UU^.\>PO!~хSB?GTA ,@̄^5#??P__%3#"""""if3fsà)*55(r%:""0ID4 I" 9PAlh-YuY2>Ku%;d&El6CQ$") M"i.l$-Ax>""""""?I,Ljj*|>$"DŽ& *i2ʹsbƍuaݺu_|غu+N>`ҥ(..bAOOQ[[ ǃ ,]EEEHIIAww7qmgeeCkk+^z饰{lzXz5ZZZF$ǫZyM&>ϣ7x#vu\6 zjL%""""̤x $5FѴEK|ѵlOOjkk1a(++CCCCPZZZpaFF{v0/ d{6 fY&|:]|nêC2M4.$""""JuDDD1薵Ǐ;_{{d y"""""""""" DDDamI ǡCbD%k\DDDDDDDDDDa_DDDaƍZ!|2`HMM_㔬q M""0|>ۡjժfff&֯_r?zz+233G̓6b[("###'b"q%%""ŻヒBuu5Յ1.f3 p}0 Fjj*~i~KPVV;p8~MyQ1IDD46w 7܀\梻Gɓ'C\r_W_rdee!''1:wށ (,,Dnn.p8~>Q㍋(фD0uu~PӆWe'C^KCKR˗/v{x%}srrMgىD0-vA|;5E'oii <ȘQt, DDDDDDDDDwΝ;ٌ[oƛoҥKcB$XVTVVh4j|Gزe -[{L'ݻCЀǏʕ+8rӃt,Xwu-BMM 8Bٳ(G?QPK{ . {MpDD4$""""""""7^޽{j򐒒m2Z2lmp8p8bߣ>:VO}^QQ$x ()I M"]Q\]|9( n 0б*AO~|ɉ_!;v ^W{?gΜI>LDDDDDDDDD[Wr{a0hkkG}wyuuu1GE,^ .Dyy9aZa0uKvڠ֙`ܟ  M"""""""""JEQFԄgغu6e@~~>lق-[`/~1Fxb|F^^ބAs7Hf*nhbBև~Gn@MM 4-܂+W矟6Ν3Ξ=6nDG4F}ݻw" Yt)ގ7|sҗ'̙8x ;6\.˗P>h-,lق զvt:ogA?f͚/}Kcۋl Ң"477G<}c2FÄ&MY%%%j?DӁ Xf JKKa0頪*rrr "" ϗpA`!P"X0Ͱlp YhZt).\ jn bpsn.={deeᩧB?, /kO9r˖-Ӗݰa֯_ (++0ů~+b۶msLd&]єuUWfi?oM'UUU^Ǿ}/2>~{Yf 6oތ+AEQkG|f2F$3w܉;w' bXΝ;qȑAВؿ zAgddhұTLfQ$B:;;aPYY9gvC)J.\s z=9ӧOA8DGDl6#-- V#aM c?y~%m۶aJ IDATŨAqq1l6V+`ЀW_}uDw---W{ ,Yt:˥ͧ*֭-܂zرcxa2PSSABnx: hLd&E M""`0ՅÇ[nAnn.V+'-Qq]w{=455MPrEQcE6AOUU9sG{{~E4?y~M۱}ofuގvmFQ{j*,_\{pliWXXb#55(8qB5lڴ 6 'Ođ#GB K.K/~ҥKQUUݻwp`ܹ(**BZZ8{v,g͚2d2t'Ns\3QQUUCUUtuuN ۍ8+++QTTtnɓeyCeggcƍA-47l}}=>˖6 z===Fcc#.]4j<: V,1ኊPQQ, n8N477n;fM?_&\87hqUWiQm={ ,y{n]ES/Q4k"G{G[ɾ$r?9Uϯ^cuLz7|,Y+6P7O8Gj%V4\uUCZZ~?}(۷7oNtDD4E09f"v`Z*Ν;}>00r l]0 E(BQBxޠCzz:f>555!f e6yfh4BEml~Aev ##6-hL&l6bFc6aٰqF\.`0h9sP^^w}_=JJJ`2 "l6 QZZ?!ogFvv6JKKQ^^{jt:,-]vr-~N!###h<>|[f˗/GII F#$IGUUG,vv6QQQIjDգ555bAEQP\\ Ap,M2)\27z ofY0oŅNƍ^-vQ%KW+LZZ$I¹sp8 ٌRTUU+Vݻǿǡ`6qw|Mkx<$Iذa( >|>deea޼y wސۭZ:u N)))hnn3h90\Xn N8oш ̞={Ĺ=墩7=_yL lِܸeGA{{;n7RSSQ^^rq,Qk/O&5TX/ŋZKp Z\^t:t:=zW\(l;w6 صkWd8Ǐh*bB@wpy+z|s$I(//8l]v,CUUQ@.ԆS;w,|ehmllm݆tTVV.Dk!Rz{{!2dY(ZKRXV8w^]Zkk+q뭷"##Zp\s ݍ;wtjv;._;fq1Z---xo̘0w\@eرv~@-0EDL|y0zxb3|>TU(hnnFuuuqĢ^D[Eż\u'X\_uLkH_&SSNBII rssaFsAPUU8sdW;wꉪhkkÅ tRTWWeeea[GDDDD4ՈcBDD̙EQ'>00˗/}f3A C@׏c```Du87墭7=_&z3zף6\R#ND+YZ#~O2` ϟWk\:::rpY-H<~DDDDDS%")d2+|zAcӃ{+V@vv6jjjd\.Q Ĕ|dffbd2A!55&-d]0|f^q! ^?8zqN,cOUU|Z$iZt-;@ROQtuuEh H, \=MT8*WE{݉K<%9Q{PN>%Kj"//OK ԩS!A,WCA\00Ջ:~DDDDDj*%4U{KDD UVV=$ Vue***P[[;fb@Qmb //yyylDWW{=8 _XXXVz(>x^dP=TB@jhc`XE1.hyƷ'\fKγB_u=_F#kDweNXN5uLzӃfcܹZB!6Y׫@PA"_(TRBs:69.8466uފ ,_CkkzD__둞TWWׯq:ĺu됚/رcPU555C'!^vW7 1-l{{{ G[mm=|8켁n/]VBɓmwŪL|Ilx=:rHL;׿PU. de&짱ijG2/#ZSSN'RSS1{l\r%%%z8w܈uz;R@gggĉǩr(EIh!(/И]'"J"$ ^c߯=?```@K6(ZB"J`FrlhB$%{gϞ}ˇX!z՘5k֤~\xxbdggoܹ(((,8tP㈶wuuikf9Ntx՛/>φ֣%KGEEEZo,шWĞ%חDHz8pDk^gϞ ;w.JKKa4Q__%ڇjxiuѣAIP_NG,úEDT M""Jj h GQ?˱<.\|BEHX`+::: ,V2 ژY1, V^\.L&lذ_=233dv /7ڣRGjj*6mڄE!'')))òepM7Aqim=e0*[oEYYt^r֛/z)ZȲ<L&XV,\VzcuKr='K,/ɰ"SEѺt0|سgOߏn V7oNC]]<&444UUU3gdY $ >a`aG}jke1qݍ~˗/Gnn.,Yj~|>zt:zE q`۱{n\VK.,ː$ F:19bQQ[[뮻Xz5|>~?$INs񨗋L|I󬽽{ YDQ`G"V׿x\ 7d )gD/#ZOO1g 8e*77+VЮuL&աV;l2t:lڴ Ӻ)*ǏD#xDa""DbB39??";w.DQֺD__0k,TTT̙3Gqq1x^8N466ٳhooعs'-ZldeerA$wPUUs"==$8y$~?Q4vjG 4+ϣ3䶢( ىJyZZdYBGGb) … p8?>rrr ˅/hkkXsߏcǎ˘?>l6222 \.^vESo&z$y( >tvvbѢE(((bCoo/N:fs=",V׿h8ÕܹsPYYz}Oh/ɰ"[<ίƑx}MQ:u ś(8sL}՞={( ͛͆x<vա!d]]]ؽ{7Zl6T9~_,L/Prxj40ldGooo2q:aqd]gZ/ZԒdNt3th1 HII$I$ @UU|> =v?& :.ʲ |r[o&zLtSq`?G 6łϢ/v^LFe3^Bym&:K@}1s_\uLz(g`<1[ zt:\Gkhؾw^ ?>$Iz!.&4nCݡ(:籵+(>1 C> >p0dnuic-;^S&y;ծLh~6D Ą&Dswχ_Wq龘hED(ZN3n &4 ͈e$49J<EdΜ9d Q"p![GЌdsd׉(/^ ՊFtuurd2!77K.ENN.^;v$:T)Ś傢(lI–D4 %K.$YvМxRQL"??eeeڸq$ic?s3Hb$:""tttd2d2!-- Çח0$_D/@Ur> P~Gk'49\.$ؖg1-sjK,J^'hLn`䊅}}}8y$$I(PUU{z"єMe~()!LLKhDDDD4(E`F%)CLtDDDDDDDDDDDDDDLLLϤ%LLN& LhFgu2dO\ !>˃$TMYLhNmT~TUu(urG&]S@E$ADDFw}7`hmmMpDDDDDDDDDDk$r%X'2!VeY9l"Aff`Ht8-^P@܇й JX$-tH2P&5g2>mX@hYEEEpx饗J(J\>Gn$?.cF; 2_MHo[ W\9 iZ, ۻNoU}UdSE$#J!Ef(B.v`x8d*YMV8i IDATx' #7 A3$ȊC$ǦIF"oEZsΩKשv}NU5!{ǽ%xc; g3H9gEfL3Zv#\rA?xy~0>͈h޽{^D\zjڵkn݊O?t[֑q\,hƳ!fDvfzXMĖeo_湗vıiQFD?..._XXO,pŸrJlll渷maa!""?~vOYFY$,{Y=Ge}h~'&7""n޼#J`zƣGƽhvn7V@ZЬ镱mm=elOnܸ+cnn.9V/~1N:j=[nō7r?w\>}:V+VWWcee%\\[_=.\VZ~[ߊCOӸtRDD|_sJ?C׽x`9s&jZ|ǗСCad\ꫯBjVl6lƩSRիW׿{VlZqX__hP {?{zvfn-r.b+UqVtdHY@3] aUv[wx+ӈ]x{Zv~߾}!l`f,//Gшwy'VVVbmm-J={6s]f~TX^^ ._j|ߏFcY<7oӧܹs櫯Z-n߾ fVo|#N<J%~ӟJ}:^|8tsJ%Ν;׮]fykqh477q޽܌fJ%jZQׇr?GhZh4jRDZ7nӧOsR,,,DDĝ;w,>o5 L2W5e8? aDCu>Di@hz<~tYZZJJ%VzB, bٳ'""?~'ׯ_[mfۿ-i 6#\r %0ˁ ~ZʡWGD?{zii=Ł ڒUm7oF?f3ܹGyz{UQY<[ ܹV_|8p@DDg? z?+++h4Rķҗz`\Y?r=CnϵlgTԖ;-Ov"M{f[r~g͎XK.cqqٳ'jgjsСX[[Ǐ=?"vjU {]z5.\GnZmٝW\\;k_J%f| ~73ߎ .ē'OΝ;q֭/Bطovz.]:b+l+l1-,tfs<{h|F9:>ۼnio#ffD#bҥKo~gϞwGzVöv5c[YIz=z'Of;DVb|^޽;O7x#^~W]vvaCD\s왙H3d&5ܤSn7K&9rXgyZNZdf;Lڕ׷z;sss(r,//ݻwZg:ŋ2>64̈g^ՙ`ߧu=? aڗ<Mw}7Ξ=G|;qոsN~HRǓe3ǘVOu:h{Y&BsX:DdWi*;[Fǜ vشu+y[=I%Cd{ڬ1Yk^/ƔWyj9;Zi!aVUMYlڸHO\]}َr,RO0tBdeڱYafZ ٫J3m\dÈ̿N?mgUkL䘬i?agr,@[#̴gefu"el籬0hOu I?3-!8ʹcic)NJ>Kumv^9}>mοkrM@[%d2LYy,l5*/Vg C6o'͉F֮iu缈[8 -;6>6npfGV`uLVs&eYjuz}}RZMKوrWi=U9Ș^Lk1 0=вlشgfFY*/Ko!R3zUi&ǔ"ۘNϿL՜O 5*4U$U+>39/Oټՙ, ^FUk\rLlfKiϿK~Lg&ը*{=2-\LY!hr af+Tdvf& %3hNE1}APYnk$C"U󆚕.cn{0n\Ӫ4#sĢaf^d0ȱ<hTFv2mi:vݴyZ& L4LmvC0!$Vif9\SfFDƽ(Sf5Tt [fIiu9g>@@/+L;+tU3K֘2SgCqiLlUjNne9ɴM[;k_v׹* ͈ɨL;?^ۿŐ< '̮nUyEZ̶H٢ㄙ]4[k*ͬsEƷyn 6d&):>mLֱ,S(۴MþQ?K3oY$3>uzB|`r j7de9IΜ@uåUi;Pט^ayI3`,Os50^犚03bqWif/Z6>9ui,M5ΐ+oo^UiҪFYta(+i}fNUif/h&amN~*1W9 M`z ,#,b'Ʃ 3#\oUEjv@RjL 0VK 3VU&Nm9lWPEwnjų9C֘^NjQ?7f!*CY44ze0 P`viZ9EƢ! U=_T^Q@\5vvrYy~¾~q ٬NjURvWt|~wܬ|` q!c(xEM}:  j:u°﫟fpkf1ZI 3g,J;]5fE3'ynXՙ)QlE4>O3\ުns;Ș"f" hUYcv*;/ϺZEX7<_4`0sTkάmֳySk^1i?EfWgZ]~o(@sgfyu{}_dLQENm9yìj=g՚i 6 b3klA } LBJۘaUxlYcW1;aV@srYd0*7Y l78F{ڼk 3K`VCQK9`39nbV?0 F aa@s6*nc " sH AqaEJ5dV=Y1x 03ns5afjܭg{-KVs@Ry;d_tlQ6-fk{Yi#6ȹaFm)K5~uP $[/Ƴ.Gưt!l0@r |4xְ;ΰ4ǽ)[5g%v*5g-la03B4)fke}f6k 氪2G֟qodv"Hwe5I3 @k!f5YɈpWP3k+b^Yo Blj߉}Wwtj5])#fwjﭐHډS+a9J qov2յZ `v3UZ!c zhY}ŕ%oRY^R,3 fړO>`LJ֊UY2Z5=(x8Eafb5L^Qu͝$IpUܸ^2y%-ЛvTV*Q% )Op7kՑ̂jwWPuܯ0f9L'@s0eʰ4e ʰ2a" Wװ,H*)kXW}eI4 i&Pj|{34S oVރYO%}<[0~-^`%"<+/ dЬG%,1a^ s& ?B #l?|J 6=bN!tJ9e_{ L;!v903DPv&"g7&ۄWsU gEhI߄Q%#!pL|< qt>IDATq$L*]~yDRIENDB`extension-manager-0.3.0/data/screenshot-browse.png000066400000000000000000004650271421751161400222510ustar00rootroot00000000000000PNG  IHDR47sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|T-dAYU"(URUi"[ZZoZKK[mVQ+nTDdMdSa!̜9L|<3gd2J @>PHnPHx=P8VQM8@NH!a'RFD:B؉7BNXk:0wgBURGYJWQn f +nCYĊ7l 7!Yw]p-DhVxf!<+.x?@xwQ'IG :,HLSjϽ{L uJ/,SP dVdX `)R 3 3d&Ɠ% -md3UiHTZf+x$lCptD醐Tcfcd+[mdc G 5 R@[f2VɶJ]v֥lf2Ԥl8d:3af:UM7 ݏLؗN\k/UYBUaf"#Igh"Eq39co=f!Tιo &SilXJY:zǟ03Af*mvh/y53Qey?f!P#1fdڢ6}2#vHUCDl d|$MF 5;j(Tf3f&SL\̹@H'DV?`3jl͠$l&\[ԎZ U*&RA`TBM ߭fsf&dfb.d;@J5L&\L:3~CMZf@G ә73af"U*Mc=w<c cDBLO@ZTCX%RjO@2VH`?qo~#م!c՚ɄɆvh=B:3af-fS 2c'sH&:14K$(L%LmBM4БM6x׎2t\MfXՖ%#P~v*3VEa_s~fԑ^Z6Ch_ndtC|%,!XHiwTXhdHxPI>L$LZ3^`:4sQPl3hv|Gy- #'l:_kKTiAG!̴[jHUf 3VL}P. .%SNIB| 3ΗHiwa-Z/L/8Ucί3P35 4Tf1Tgf#̴;Gv6*dJ ",KуqL"U5!ϗX-_chi^6X׌n2A/8淴 )vLhl?־vh&CL>hUy3 3#[ 2C;$tD M)M'5d]詐 53z6@3}EY :3afTeFnwVx>_K: ] bUc%(p(vZ3V lTi@)ATl:af:2LC{aǏdKRi.`1 UR_7x㪶ͦdfp]`3鄚J3J5wufjXa2ں` DLN>7xmn{ dơE=?O>ӑPWl&j"Gk{k}43@3se:30Ӯb32̌/Ӯ3ScH7uΒQrHm7hufִZFk5'\,dl޼ b\2 #Z3{M ̫Zyi7wf,+Ѫ*ͽ Uqh&vDƚ+3~sgk5_dufd٨at_2@~---⇚B[FޗⷞMu.hsk&v69RQRaO-6^uf}UoFbvu:33@ +noG'2lDj_%AZ+zrNUJ-̔T&zh >#W3$ɱy3@ 57o|B2?3|vۣ0d8H6g* 2S4ӗlX&r:?`Gm$ܹs/ΙI Mh~QUU5qܹHr*uf2hyJtD4 )TJO`&Kg3wfoD%u aKr444#095Ԝ\MZ%tdL956B3r~o4٘G3*4FpⵐWoW6-vBf>*Ba&(h!YFE[ae/ b3]FJM;ʞ: WPR5#hNIӧsݣ%LzҢ|0\.n<Ngi2 Cn{ӇtM>LrSlį#?bݭԾѰY9쎏wdJ›ǑHd( Xf"hk1a>xP"ӽk׮ 8V󩩩I^7C:<ǣrMPgMGHjtH2Ŭr_6#EM]KYo.1 r>lE E3Ѫ6ZtdOza'JTgȟf۷0(^WSsssS00 ğǪ-Px&+; nR) ,XB39/cW]lNoWl-/:@455)Eyy= U^^z?I^IM T!^iZ)Ҵ۬[WaiO3C!*4Hl&pMmgEdx< L &*5@QhK ̣Iu&|jll0$Q>/qTeNi;+K"`F뢩u:p,(@3/Db-h|U"TfŅYPȂYG[mj>)2SOdZчhDH4GNd-%K:w<,Ƶ k|>^o ^*MPB`]V}R01WP 28cc' =Ҍp8@qz*//0 m7ZݧvںOyԾæ[=$}[6TQ 0tRSjM8^/ThAC?vfݺD%{l:*Կ &ɔG?Jr%CMEzmiv,D~v"h1〴v[p[zV:swip-QLӔaR D̶#6Tm[ B${Y_9IGroي6tCL,5"Zl$v~P.4#6Gֵ:MKkR/.Կ tfp(~_jiik:3 CNSNSn[.KGa!G+` Y+H Lș>PJ!W򕒩3'2Xh 5ܯki6ʼn̰F k</G:uJo͎99MTkkZ[[,Ir:*++)p3r>$bT_&f2hh&'˱%F -*1V %cx@y$,w5BC{Zzwsʩ OcC^S }ںUZYK>jRSpF ؼ~]<ħpUt~555Yd:|>:CLlFf&vedf%mbdEhU>Lf/B-fc+wȤL=8WV5jƶrÐ^Zvi`>6Ԕs777Y6v2S+c&Б2Êj k}Jy,# "#I`Y\vI,hhhX${|@w!%u-j.~#2# C3uB;#Pߢ[O9(hِa*snZD1ֲt:UYY)+s њ1 EڶW .! f#[mݶhDnKf}6d-w\ZFK7tĸ/ @(^ afQZi긞}aUÚnmm\ӰBY5Kr*y<^3J 2?Mlv?fmOT\[^WlYGV E-XYBL4e:_謿ttLI3zѺ|Dgie~WK>([)IÇuXHيlNc*48sY bUn?}bU@,03X)ӯӢ*5_\> |!FUWW{ZeL n'@x'5sL޽[w̙3O{X24M=z3CرCSLE<ܗ!$ƌ(j 3霙-3dNͧVc,MMM o󩩩)HK( M^`x^,X_ 7ܐ ׿uڵK4p@Oj{.w};w$t^Оi6m͛naCJV^_2M'|?vޭ}{w "PdYml}|+8m>ȧ: b>;/כ3gNN._aaSS9|f(b 4 Iss }Qp yPfΜ.x<ꪫzjȑ9r}ȑ1b/_K.Dn[?‚y橮N'NXy曶TSSnݺi?~9昌]L{qMV 3Ai5aXX3f`& WWhpۡ״̠&UVV{Vbl|xNwD2(:^WÇ=$ŋg [׳gOM2E_״j*IWvN0ARZ󪫮Ҕ)SԳgϰ}y-Y$Kܬm۶iڵz饗t뭷ꡇ*vebΔJ3eʔL5kF׷vL_`2 ><ߴ-\~_Fš=B&Ld8鎡먁&/ ,[L\so{H@O PFs}iƍ*//װa?l0UTThƍڷo/,4MSҒwK{e♷pӾك;:OΣ IDAT u=KӔmj%,p>E1uȌ@}]M:՚g1Qѣnv5*a/vAw555m{Gݶc+KRloTSS#4~mٲEf҇~hoWyyt\?-`ͮ:K_רvjL2 C~Mgs.b2ҩμ+$?oisիWGU}}$KԩSJABP PDR 3cٵkNȜV 9 /v\PeezQF?zmaÆ_T}`j"4%ΔNn'U{`q} urKR`L}Of*`׮]2eϟu{OwfC\i( b{Ѥ;b{%-afPd{i߾}N:'b|pB?Yge{kԩ;vkCt 7XsٳG6lЉ'Gtѩ[Z (SY):UPNXy4moՀ*#kmmM*^|E͟?_\.s=W&LyCW^ŋsNرCn[ժ5~xCv_גٳö>|X ,ŋ}v׫Quuu:ctghYo{uV577o߾ׯ 80O?w}Wx<ӧ&L v3hג5xVWGo)Jɱc7ߴ-Y$' x<߿~7x$IoUWW7xC׿m6UWWkĈd͛7O7nxT[[#F.mq{kҥnMonָ@ܣG}uuYƝ}omojjҜ9s|rڵKvVΝճgO :Tsjjj]iZhm&׫޽{O>袋ԯ_?vGBa} :3hX ~C2|;t\k5}tC=;v=uWu햖B4BC[10FFM:U+Vݻö-_\˗/עE̶kժUﰀD^m6XBcƌi8$ꭷ҃>v6oެ͛7k…5k~󟫶6kʔ)裏֯_^ׯל9so|C&M=~/VܬkjڵY3R;> )u<]v$߿ݶO>9, 2l٢~ۺ*~%Zn}ci…a^<>Hs7߬SN9%l1cƄWnhnٲE|Iغe˖źu* Fm-]V۷kժU:S7oִiڍaӦMڴi͛+B7H};+ 5ڶʔN-vBm.4Lmg}._ht͎?^͚1c;>On[=PJЉ'/NڙhbayM}s̉}zt߱c~ <ZZZQ޽UfN:NI_6̌qF=Vg&}[lsr8:ϧ/۷=ܰ??1H۷>B3VYyLo~crЊ+¶vik:#cՙgyy>7*4{ww{@ -PB#`0ӟd ĉ5qĴ[fpgG 4 Ip9գG7N Rccf͚?SO 4}]+ԑo}[ԥK|>k^G^{M .OSkwީێm>|4rHթZ￯3gZъ+hѢvskڴi(//߮3cǪȷOfwq+UWWu_ק~1#uaWhH*rC۷OW\qER@0ԦM[osIxj|ɪ͛5tPk_װ0_~KUWW͛7ӎ;$Ii|A 6lkǎٳuN@s͚5jjj kcrJkSN/_n%> չsg|>ݻW}QXugoYGڵk[uip1}NoZf[YS瀒k`ajr>>rzx_,"jFVjFT)enY/$p!b!!`Vi6n8}Ԟ={$"жaXaѣGmf#=}:u;oܸ1e`^{aÇM7ݤOg}'|W a iӦY 2D^x.첌HĞ={#>w&ON:۶e˖o  ѣGT__/IϴhѢJƱcdžUYFƍ}y+**E+W٣>:駟n-5 3VMM+W{gݿꪫ=dM4I=$i޽t=[SP#LSUVu$5tvfL@&hWD~swz74c uo w]&M$;w9vm3;uO?]n֭a·VM;S_4|puQxÇXU7oCLI:slO? 6mw+ ҹ瞫sf`HWeeko~c=6l믿^ӌ3 ?5i$UWW`hgEEE5g 1b \rKmK, B+U'vEW]uUXO?4,=a͛7 4t}i޽Q`JA)7i=XXiڹsΝ{Bל9sb ?hAްaG}tYC Bж3x˗tC QUUUq>[Fjȑ:ۍ/| } W**MSSykUhz\"Y ,?e 4N---W%PhYE@Ə@3_/@3ޜz]wݥ~X ۶}v z4~xq ggŊz衇}ϑÇ'}Lh9xoZ~u"{U>}l 4CC7)7Aaٳ&Nr͘1HFWA:/d%&38d1cXOCCmۦ^zYU555߿O[uI'=G;w>}tmiܻA={fϞs=Wwй>H\u'C;YpЧ{ ³|Tj˜fWM~[ӦM 3\g{1nSF:EH}5 r҈#4|-ZHVjW!믫NַRuw[dKtI'Nk~, }FG>laq:jmMtwo۰5 C7xn}QkXLHUEX(`p輚ŠR&LЄ d>S͞=[?ϼybm=liӦo߾|[ H*| u}7h u Ƽ^o;uTM:5,X Dޭ[ϵX^^.e}0n5a|ڵMۅ]tї%^ZR )ǎ3gJ ̣4HݻwoEEƍq4M}g3g^~ek Zc 9}&6loҘ=l>14)XN6CrKXfhԬl׭$ٱ(|_;@L '|2筩׿u]wu=o. `lZ^!OpA;s\.}i14Md{dʿo1)2|}Uz^͝;7s".Ҝ].yeu>Kmd0]KWϧgy&l]WИ1c5khٲe2 :۷uԨQ 0 Wǎ;SO=5YfŬn`bx6|0B95Gՙvu3↙ƍ-ߥ~?G*{]B^4$([U|zꥊ ~-X@[nl͚5KcƌQ߾}ziUuGR۶mӟc֮]$>,lXODjǀWW_}Uֺw}ٳ߯ɓ'L3fhAMKK&Mf=VCCV&Lchnnk޽ZfU((pEuSN9E6n()ŏ;CW^y]v饗^҇~hsN=ѣ[cV6Lگo߾:裵m6Av[lO<#GjСUyy~,YbG o{s[o%)>po'l8p@K.1A%NsJ/o f#.^Gڅ&0 #,.WzNh`Y1B+5/l38Cv}QL'O?@5JW_}uX5Ν;H_4tP_^Z@3Xu;tP͜9S?|ĉm\ڵJ]p9_~\*[#1B7|sX%1cƄa[9f̘vfynW\nօ^yү~+=Zt4ͰP)F7viL)h6j͗W4ƭG Na23[q)9eee:tPJ>sIg5ofPYYYȠUXJ4PB@puiĉ'4M=yUv{Zb-ZO>Dw֞={TQQ={j۵ :c5c /ѪUm6uY}UEE߯W^yEmۦ[ÇĉܬEYtzG}T?6lؠ 8P m:s=Zx̙>޽:(r)=zmqEiРAz駵f566F#GԕW^޽{kƍEJGpWk7otZ|*4j*XB/چg}<6UUUUmm gC!C /e˖/UΝ5p@uY 86zhnݺۯ Qy]wiժUZtl٢={h޽*//W=ԯ_?}_m7'hPϞ=u]wiٲe7o6nhͥٵkWCCթJ i88^\㏿c!0h 7WԆtB'aWo)B3Vx<):U@JB`% NTwe9ڱ5Fmͭݺ[G~}!B!:Kr444#]$'7yu=lݻuW< ,U4M͚5KO=Toe.2]s5BA7 rآ_g) |$'UG龫Hm^h:\:~uq'iJ3Thب|#!eeeʹ]SSs$mb~B#GM!Gm3ƶx&hW ~0( a/םwީ={|ZG?7MLdHT Va8嗗~ nCzy 0IEb=XQh9::=z+1]GuTF FSN9E^xٳ'u.L&L(( g p^¬lk31eцҧmC:s@xUf>b5ár555{(1hI"DX Pnv=C 5:(~9qݺKtEiÆ Zd>Cm߾]2 CӉ'O?]<kF:`0$3XiNmvPڪwG(IwVmvP-p08Mef)//Pl9b$t,@UHshqIgȟC@)94 -zqM~6f\OU'XI#Ý.M}q K%W IDATYn͛p8^Ĵj.]nM] QT4v94P@A ;P?n ͣi )6wkU ϼGS_6=\al\d˥|x _| mgTVh/rr{x;3W$cۻt3hYn9#ɋQEEEa0|64o@w{QDTi+4@5d tUjnнo}~-tͩۿ\=VN3WN "ԬPN= (\PrFq^iW)C2VEdG@;[tCpӡ kCz-mq>Ly3,~:uk٪b 3hP :8Tv[Ѣ|&!ÐLIC$SdmfȮ~6|~@7=BI2ӦsvfM\՚3fTn 3k9xԥK566NS̙YoUEޝ21x0"nckDYYo$Ͱ z\vwH,$~ٳ{|@w!@T7zx^6,<`&`4%'/iuѩ:KSezs6ͭ8vQnrGzrDufhjjRSSSVQ^^^#`䚚3%%h ͈[,GVD>"ٝN&H #$P4E L_Тf 0nPiB@~{\sRO _б=rxTVmՆm}Znܝ2'5yLNYIfjjjRsssF[VVr+P̈́'@34 4!Mxh(+?>"ϟUiFmd> TuZ՚sm8>9;aMCԉu.]5£qYA]Y3KUsssʭhNxdh&=EhPԆc_/cim(C d2XLC2̳lJ@i: D%*<bʰAuN]pGc;ÂL̎pSNԩ~Z[["'aqVb 4YrښaHFY:kC5oO?5`b!SF[) p:՚Gӑ\*GC#8t@NuYMIP_& ek\MgH7ZݧvںOyԾæ'QB`X0d #mg%J2ezt6ԫ5 u͑ȟy2 3Qx10M@Vy<555{DR1Ѐ| 5MS~ ~F $CF«2#b@ *)#כH0!4CiZc0| ?'vUmP,4YW^^N |JF08 6Ag'@FѪ4*-#+0%P4 Tee=qTVVR Y`WlJȌr6~da&o)(++g>M,eW>6V g*YTP]s̴ܻ[ӴE-oriEKͬLs;;ͺ]R.|]}KQDvaG_ 3 _ǣGrus:)M4%|rssc&`@*T _im#85ܮ4%lٲ*Snܸs5T,@Zy[J M@sww2337o*##ew2eC`DqwwWU|yW`hdn.C 4&"`X @ah0,ME 4VWq%I͛7]\ @xxx fh0,fh!5jc&"`X @ah0,ME 4&"`X @b2d2\] $ 1X,(A /SSS&I*[ʕ+'Dy㖳0a$)55Յ4RY3sYL;&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X (ifY?vڥ3gCW~ԳgOW MN5a޽f3fO>%TQܸqC{޽{u )>>^*URUzuկ__=zP]].HKKرcu\˯^={h׮]ze2\T!4 tׯYh:tH_{z7W(E 3sھ}ڶm`UC Bv횎9ǏԩSv IRu]w{w߭-Zqrwwwq@^њ8p@W\ו oooUXQjR6mԩS's=WZZ:3g(,,LኋSrrU\9G 6Tվ}|g2a޽hɹEEEiݺu:z"##/u]ܹzU:>|X?ׯ+>>^ Uʕ﯀jJ;vT*U 9s~>}ZъԶm[=j޼SqqqJJJTZ5w}j۶^^WÇ۝i+I/~i^'xn?ʕõh"iΜ93gNcǎՓO>p?}U~\._-[._+Wlٲ\7onݺK.2L#'Oj߾} SXX㕒TUPArʪ[ׯ͛˫3O?_~zd!Uv$$$hڴiz7[5Y,ܹS/VXX6Y<5oN8Q>222k6%''X,_ɓFk3f"""춯QF |^x\HuU^]5j(ԶAAAcbb4qD%''j%->>^ƍ_]`rTI߲ej̙*[~>Yɟ}l̙3^𢋠 UfffMLLgffwQ|||a˥f͚:҆@V5n)UFFBBB4uTOsuxf^JJ&Lse65{|g&lRժUs^Zϟwz,3͚4iOU3j6nҋˌ3t1I&xUaY{9N:?~~l2k֭6ۖ)SF3gt6WvڕICBBYUZƹ5<t @&O,???UV'THH+Wtvv… ڹsu&I={t0oo~ͬ_t!o2Զm[UPiiiڱcK툝;wrׯkҥNE+IK.ĉ{բE js&Wf6qFop?&I˗[ko߾94skJy@QjԨk„ r|Ə{NF&!!A+W߯zK*U$]tI}jСy[ "]}ۑ#G. /޽{+00PnnnX,JLLTbb\s̙3 S6m]5mJM԰aCZJ-Қ5k L.k,Y5jyر7nO>$̏@͚5K=2Vg4h@/֭-[f)))ϵ~zRSSuر"?0j֬Zj)==]W\QxxۄܹS׮]ۧ #FbŊy'%%ĉX,Ec=͛ W_}гN:U}{͵GnӸq<'88ءYuzթSeowٽ%hzzBBBݡl)Q_A|QF9ݪArsDvcYf*_.^-|%{R{ -W "e&IU5v}vwy@B kG?;w:L{ϟ] cw!CX@[{֪U6!!AUrǯW/?w|}}k IDATlٲpls-kР}]%%%mnT+W.r///ۥjРAպukխ[WuԱ.N?O(]4ziԩ4ic8p@ 3..N[lc=b(44͚5wSjwa>п~^W*&&F JOO{G9AŋUn]뼽kb޽{۫W/a3 4rwww rO})$$DǏ{̈́fܦ0jwرC'NЩS\111ϫsE(t Ñ+5VΝ; ?ŢHEFFj׮]={5k1cƨe˖8'>` M7ֈ#h"m޼Yo4hpaaa|.gqww~1b ZAAAE 3%y~Y:'G)Ik.pšRJ.P=ΎCGڤ*--͡}2RR%͘1ázPUg:k׮]/VTLў|r:tI1γ<СCjѢ p>>>v# ˗ٳ6PϞ=զMs= P i&͙3-4Ggb޽[C-jJ/G}l:v~_IsfժU vߕ+Wcǎj߾}aK+?Wi֬͛߿_ǏWxxΝ;hoQjX믿UVNqQJMĉ=z*Wݻcǎj֬vUZ5^^^^ln׮];͟?ߡZum;Gy_3*Ud|Zf RB.R^jݖ-[4d5i]{챻.]kɓ'_hŢw}Wó%Gig^^^zf/KOOWxx٣ksϟwZ=svPpYk֭X]V'NT߾}5h M8QsѪUam۶M۷oxb9R&Mryt:tȳ,燢 ՗_~vEs$njjS(:ur_}N\rr3*u ,Ǝ͛7Ym6M<١}uڵW[%&&jʔ)z&fLL>;|)==ݡp\%**JX,TF4b=nξ^1o҅bhǎVEFF:/Gu=ϲ^ziʕv]bmۦzJ?`͛ ӧ1cd2iPx կ__`͝;ס]k׮ڴiv7o׫]vQׯŋ Uյpҽ{w_n$;={ի'www9ܹjժUr+>m ֺu裏m[Jm4~x5JSffΟ?uB ˵~zujժ5j5k?{6lJJBCCtR}:r~ q~{'.úrJujڴi7V^gٳgk󓯯<<<j߭[7l2O?>ѣ6lT\9]~,#֭իs9>))I;wwիWuU>EԢE 9rġ1cӚ5kk׮IҼyԺukթSf6m8_hhBCCs->}zg-bݻ%&vuM&ʗ//l,Y|,w8]Jn9 mV(S&M1cǧ@}+""Baaa|r_]wU.%%E3%8nXo9dر=Syr)ϖէ~j}/#رFoJf͚iĉw^4jԨbJzJ̈́2en޼iqƩK.N̙3/m1L[ﷺՂg>}T^={'< @)SFogmfgrNll~wFU:m_F3rH :)}>|X׮]sJ_/:Y q~;'ʸ[fԬY3=Zqqq:qt9?^JJJRRRʔ)#y{{+ @5R&MԲeK;ƍkԩ7n9#G㊉Qbb+rʪ\*UFM6]C6<<\[lÇuEK|}}UvmlR}QZի֮][*U{NO?9Çȑ#|rT*UTjUURE5kTNԨQ#Wш#O:p@z㕜,UXQjѢڵkf͚zVaMIIє)Sns߭[4iq#$$D?l5`:v옮]L&GuU&MԼyse)+xxxk׮ڵfΝ;G*,,LTRRnܸ4+WNުXׯ u-.Iw8n_}(C^Ψ^[ok[S>ˬ_7LVֿs|.[[zzn+ ķ#!r_YRmʿoOV[umS>m{>`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ahP͞=[;vԋ/RpxuQ;v޽{]]cX~zիqi. 2.PiҤIf1bD)ShǎjذVXr:~ׯ////WZQSfYǏמ={r-߳gZh;To}ܹsWjjTUFzձcG)#?77mT-cwޱcGIҧ~.]lk6 =zTJMMuE?*UdԐ!C50=SX,PROhݺu:r"##u%yzzJ*Vڷonݺ鮻*P+~+^\@hV\\Gx*ooomذPԺugVv픞ǏN:.iRRRxb[NyGFF*22RԆ 뫹sI&V;~V^'x©u;vL|<뢢{믿ֈ#4l0L&~w0`<== TϷ~+RmêUd%$$Z~ ٳ ќ9s>XsEG (6|TbO?**JTR%~aDΓaqٲe]\I^hXt IRRRO5jUUڵk%IO=u&I;Е.^'*<<\ԢE uU5RJtM]zU111:~ݫ4իWf .<5j8۷wQzz<==իW/uEիWWff"##۷+99Y ,ɓ'5c AիW/h;w5?Ν+Ijܸ{ٳGjݺuj. \{?W[4ŦJ*^Km65p@I҇~ݻx_ߙ:C4M&F+WUVjذK ש EDDH^Ubcc+(::ZժUu}~РAX,VZUW\| 84KҖcǎiڴiԽޫ3g*000WMW^9rM'Ojǎ\&L`w+V?yxx8TӒ%Kd6 :5k,IҀ4y|>̔pq\q \¨fi7|pmڴI3g,rvN*##CngM>]ѪX,Yb3b2l>]o$?\o޼S*33S5jЂ 9ժUK ,P $I?BCCmGW\ц ?%_mݺUrww믿nfxsEG XV@`[t\ߟN :uKϟBe˖[wKPm3e˖lK/_7oҥ24h/./^׌XPB XV@Pڃ;:rJIRfͲGgzd}G租~!z!kݺxIҁCQk*]|Y6moDDnݪr'p\Ȩ(344{l㏚7o6m~Ӆ :uC>|x飸쯳neٲeyӔ5kh۶mdR ԪU+ 6L˗Yĉ5h mݺU?Ξ=+OOO=7nכݻwkǎ˗5k~1bjժsتU4w\iݻw=.},X l={gӧ3ϨJ*={$iѢEj޼m hyxxhڵVKffDM:57o͛uY%''VÆ CsV[󜑑UVix222TzuuM={XSua_-III_˗/ڵkVʕժU+G͚5maYQGQ]aY z|߯^{ME&LVXjժ:[Y o˖-pBRүQ7oԪUǝlξ~ O?ӧOk˖-?~h?G_^sΕdҔ)S򄙅9._Lm߾]Æ .ӒGyD*Tg}&٬gf{n2eʨk׮˯\3gj޽ڟ9sFgΜƍտ7NV.y>O:),,L˗/}{ǏkرJNNε<66V:{VjŽ3g͚5K۶m˵<::Z:x˽>Cʕ+ۺn2` 0f멧m۶y› 2L1cU&5|?̈+<<\ӦMә3gr-?wΝ;Q 6(뒜w\}}}yA IDATt)_RTT̙֭[۝-∍7f'_;wVppmۖouVIR˖-?lk۶߯ݻwkym۶Y 4fo^U/ŋӨQԢE yyyɓZzu/zyNJJ/X^PH?ц #?y_;攜q)99Y-Z?{W^^^~.]ÇGy-8spf3FO{9lRJHHPXXBBBogl /Mnݺv[EQ;zh8p@'OԴiӴdɒ6׮]̙3%I>:uꔽ+R}k3Ǚ^Wbb^y\ }\˕+~Z7VZui:w\)={T.]ԤIL&9rD .ԕ+W駟sg)[>fۜ4,Y} fg8PuYʖ-Yfi„ :y._/B_~7o]ꡇy P\@q"ުU)IZ4i"___-^X{ѥKXྗ.]~x@ZҐ!Ct%zW_7gŊV7kLݺu7W^)>lݺU|,^u=yoSppN>lْ6K^~={V/_]wݕk۷KƎ?\{URRRN\όZd.^-]4ITF C|֯_m۶n#oQlldɒ\hٲe6),g,RBB<==5w\yyyeZVVZYݶ̙ÑvZ>}ZZwQǿCv51);"ZdQP`zՖvE\("BdGHHB=霛If2Yf|ޯW^sΜ3syޱ޽{;>h\P[֯}Y͞=[ǎŋub 4|p͝;CPKڲ:L˵h"}ەu6MIFEE+bg}&Izg5~xw+BfRii֯_ߨyTWn+?wwhaOpQ Y[[k8j"P=Fm-[8 w*))15kVNǝ9sVXӧO>ќO?43"""[o>ӊ+ZЁki4dȐ&՚{wt$+8<;ŋ'4__McРA6'c;򕕕ߗ$͝;ũ69ֆtE#GT\i[lٲEWmm͛g̶ѣG56oh#G(33S:uG?Ѵ7|c3Mjj233ջwo͜9S4jcZ(++˦r-[LR]/Xyzz6.Z8V>룏>2QwuWi-W/*6<j󫨨05;wnkhgޞ~o5e˖isNuEӟٺW~=hv+33-KjWkQxk9{쩡CJRf7[ݡׇ#-..n\_PPq|'N0.]wuNw5W.o}Æ ,Ν7|Sǎp<iќF}D~kVCZ&MҔ)S^|EyyysnsWq^[:^vr\^MSݺuFwݽ]V{}ÑǬ'O;voŭz\K/Ԭi<}t߳VΝf7;c ԩSq^VV֯_/͞=rT4s-]T+WӍ??Oӵ~۪㊖X+p5\|||Z=m\'Nt:~eeaM]hjڵK{QJJrrrf5Ք|=S.,bL6M˖-SZZջwoIuɬMonj„ /{n 4ydXBvRQQ^ŹZO;w촦YYY6o՜9==x?Gɕ[_TT,Xg}VyyyZd,Y` 6LcǎՄ ZV\4̔TݬT[r?ݻw}\Y>gnθk?==-W{sv}n9ÑDyxxbhݭ%裏֯_ &;he]f<>xъAsLշ$k̙F_'N;Cjzn=u=zGرcOT~~򓟴x^Cwq\|qF d6eڦcǎZ`Μ9#I P||u&5["<<\wy^|EI{=v{rzѣjӦMկ~%Iڷorssխ[74ƌj׮];vӕ/菳O>իN8[jڴi/ooo;eXimNxMky?wp^}_jΝڻwuVmݺU-҂ ԯ_?cWlO?~~X,.{, @ƅVk[g{w,WEE˕ܽ]zl;wVbb;>Lw_֘8q6oެm۶o&Hu]ZffϞݢr]VR]1hРfO7c XBZlK?Ϛ=31b&L5k(++KmYheq&USO=}vH9RRRFպ5g5&&Fn>}rrrl2}Z`|FjL6Qimo;Ǝ 6h;vlڙV&MoM6iڴiڶmf0ի ڵ2[ _+rrrڽVW&L0>,m޼YK.UNNy]ָS{V&&kjjt)ȕc֭i^ЕW^={|m֙^qeq~^;cnӂ TXXwyG{Þ'xBPvv^{5BGnfP^^>}zSNO>Tw,,/88X3fВ%KKk5}QŕW^5kH ]hw=p\qFZVkZF6lPuubcc5|ݶmGɓ'K֬Yz8Z/>2333u1UUUi֭4~z}vY,#?~x'N٣|JR|||/7Vpsޯ-m111={IsnOHu23W)))zᡗ_~YÇWYY~766lujr#f] {XZL7lt~zH'h߾}Mm)((H{)++{_Vuu|}}7c QǏKTf]t5+84%OOOB?`w#[zvn峧F555v}d4ZzꩧtUWI/^uٌ믿^i&رCEEE9rd?]} Qnn6mڤT 01114hjkkn:ݻQsRƍ$-[LvO>w}'___͝;U,I{Z%]ZYk6J=ISbb$iҥm<z'UYY3gjȑzg+vgr:QYs5\vo[+ 7]f_Vخ}:swLۅ׿Wz'o; h%n&5JE_7$$DO<$X9p0>~U!!!5b4e+:pV߯?XRr-h+?]Fjq\Q \@6gϞUNNӿR%՝8p@R vQQ1#<.]V=^|EuApNl=cڷo󕕕Z>qr芾M_~$ӎ;lqz[$I7o6馛zB?IRf&M$IzUUU#G47[yTYY_WZh;={V_W-X@4gΜ6_{goܹsJOOכog}Unv=p~_7Ԟ={Jc[xg$"OOO4{l}FYVVN/233~gթSteT~;IG}[}o϶euW\\z'W_V\h<۾#kK9C{ܝ1vѯ_?-X@o;Ck;vL)))ڲe-[9s襗^T,khhhSN9w„ 7of#̙~Z_|t)۷OoOnG=w\?nu@[|bɒ%{uM7gՇ~JGw}M6駟߯JKo\,Vm]$ifow+8]C6ͽkt޼yniꡇ/~ {UNT^^ӧGTw'+ hS:u 6̨Jcƌɓ駟*))IIII6}||bs"VZpΝ,=Sz׍~h\^ddd(++K!!!jPs7j͚5Qs믿^/qxQQQZpϟӧOkҥZt8~~~7of̘|_󕓓~[o8oUlXޝ;wȑ#:r䈖,Ybwmٞ:b+N .TAAϟ/.0yxxfϞm_[l?Hr֬Y۷o&=ۖ֙^UYY2yaaabbbpBt&mٮ9tVG~Θm5j.] jǎ˵|r{yyizփ>{Y?Wn+(''G6m2ˆbbb8<(> SHHΝ;u5j]ƍӢETVVy) @ӧO7lgÛ +p'ME+!!A˗/עEt!+..hȪwz7qFرC'NPFFDM0AÇw[Yy]}Zz222TQQ=zo߾ovt+{TPPG}TK,1vuz:u^{5IuAe  2D6QѣGk֭voРAZ|}:tHǏWaa"##5l0͞=%MZ 6L˖-Ӓ%K7(;;[իnfMثs/IA<+++L]jj~ӟJ~m(T{""":Dh|p7Qou__1j%H<{ni_v7j0Ma7Lq4_{ oWCնm$Iz"@vv.|:&pŢkJ&O_5ҧO. ;D f:}<<wfhW<<ojZpM g=$ɳmã.),,;<44TdXl^#VR>^7xbbbڹ&\mm6lؠ$Y,fOEiȑ8q<=iep!+//ʕ+֪-vܩ͘1C..!E &U[[0LHHW\=z(44TTXX >|X6㧥iʕ={655/۷oWrr5mڴ.wtK٬Y'I믿ޡYzVX!I1cn-A &aÆFaf.]4uTٳ԰aÔk'PR]aM~8pK {ァ˗e޳gOSZU<01kbգG6ϳa φZFEE$),,MAJçX\hhȐ!1n,//Wiic}UPP uU#FwawYf)//O=zŋիWoUNN5`qнk<6m~q4k, c5{}oQRRrrrϫk׮5\; ºo*66Vׯƍu)iĈFktKgi4^xA/Iz)ٳQ_%%%1cjjj$I^{~5{44{lyxxhٲef+V`26CBB<φ(**j<Çyxx(<<\1118p`kСCJOOWAA,BBBԫW/_Ç5ydu֭-OOOr[_kK𓞞2yxx(11:{#F'99Y۷ofϞm3lJNNѣտ*99YRBBFL~'krHRttx۶m?~|}}.#UUU:zM*<<\qqq4hPۉGܵ]xyy)<<\k u ??ڶmUUU*..VJJ6mڤzHÇoNS5ZgΜљ3g &hǎ:y8*((PzzƎ/ݻwViii4h/,,48?=ݺuSTTrrr?hժU0`.rh^VJJNj KSܱ]TUU)77xfsQVV|ѱqCz] hr>j-^X8qb35wެz饗s59ދ/h:}yyyلV\2zh*//$ݻW5556HΝ;!!!NrUI &M0`HmgZ•ҺutyEFFꪫRDDjkk$/Z`ZnÇ+::Z*..+VhrxDDNモ$EEE)11Q!!!*--uz=4htP(99YǏW~~V\)IJHHP=.;;[w}v!o@@wﮌ&ǏK}괜&Lƍ%%%oUTTzfEÆ STT:wJNNVqqmۦI&L0իWx>l0MٻwoqUzzV\iX,zWk9=Nի&N>}㏕f wuu׵ƶݻ h :T SQQ<?hUi߾}ڹsj СCtN1Bc͟?xQS=z>sI畜+Zv2_wu.=ikI .Ʉm4322lGDDi~߿gnyQ$266V+W4N҆ڢڵKeee Эj(::Z:u]LvY};vwa9rdu;i500F 7ܠxBCCUVZ)))6_ 婨n3ӧYenG))):tdX~5b49ӧ](i޽lTnw/@Gӧ?6^i5##Ck׮5K/$յ.2f=Fy m߾]]w]eXp:u$I߿Ǝ{88{ M25 L ,hZLL.LO>ǝ&MҼy%@Skv~yf~]lC 5 3F &`sÇݽRҐu*|4U9}tټV[[s)##Coﰦg]fFGG;쇲*,,L:uT&{N:LǏo檨HލRgB)##h +;;[֭3.8ZnGZwYdk(su:ӕ`<߱cM͙3gaUHHf͚^xx---@sȐ!FiYfډ'= 4H>>>e{~aw0x`EDDmv"))xܵkF]]JKCYff@L_~ڴi<55Uٳgw ͜']vu8^xxp%~?]ƺgD(j5KZӴlKj+++Wn^n=&&&JKKkhJ[Uhh !CP֑#GT[[#G($$oN  `F:uO~y6[{ 癙O[j߾}ڿRSSsΩ3%8r<==5n8}G9(**JR]@mu 7, 5g͚e phDDD(!!nڵ{Z|LyyM=R] hUΝ;g<~w_SSӪ;x!S||Ҕ%".5 u[3^߾}uA;wNΝSΝ%cWܬ3kԫW/mܸQUUUJNNnUMV///LHgVXXX6t2\AAAWyy$Ui}饗^rIk,Z0rn4%iݚ2eRSSo$47ېP0.`B7xx Vb^^VX3g6;,//osǻA.n祥'\l-/*--M***jk/VvvҌfTZZ&k;FlltQQU(/ս{wIuև{vYy=z4f}ԷDyy1y\\\[]رczgu7_~ڵ:uꤟg.}OWݻztIuhN2Ŧvf>}[WqjfŅ@Lk׮9rvi7|SӦMs'vFw넢~s*22ҥ[]]0^Uw)ӧuq#дμQQQ:z 4ݽkQnZ4Mvcǎ֪a1[XqUVٴ/t 7%87|c3=͚5Kz뭷焙pqq|{CM8 Z^^z-ڳgrssUYYJjϞ=zwtR|ڿZf5q%kR2\L$CRIg$5nb/ooo)//O555JKKMk. ݽ޽{<_bEf`|r׮&[XX)` >ܦN:8p@ݻwWTTTy8qU(UUU:|}||a־4+++NL:uJEEEv[_%$$WZZTYYݻYsΩRQQQMYz9rDR]Zi W/ζg>|c׿.%$$(77WV2%i„ ׯy?Ú>}gjڵڷo1|>|4>>>? I*++?nMAAA:t֬YajffN\?-ѹsg=o8qsN5Z]wݥ/8Uaavܩ[;w!bafPPJг=\PHH `w111۵w^effD>>> S>}ԭ[7_M6wSN VppիW/iʔ)ڹsݨs޷ouy*66V}QDD5}*))IZG֨Qt)f2h -ZH}tiUTT($$D7nfoȐ!O~UV)%%EEEEԈ#t]wsG_^[lQzz<<<ԫW/]7vӫKرcV||BCCg}V6lЦMtiUWW+..Nwܡ ܹ]u%Kh`Cvѣmn=zګK㎣eu6k5gd=s\߲el_aÆu`̇sV<<"BCCC% c$J*Tǵylf͚%Iz#t8,K*++5i$egg+%%E^WO͛ 4~xŻT}I򔚚j`xjll{ys=7:Mf͚%ݮ7xC6MW_}uKTII"]˶UXXE pU(>OGDwO"/+MMiӦŻnKu!9rDuuujhhRNNMǻDb!ͦ'ƻ|Vn,.bQkW밴ٲEvNY /vkIV~}C.v*++%IYYYq~rrr]0hX,HMMM$4[w:H2$K }6l|6lxm(m)OYhFht5;b~gzM @@"4$,M VC 1b]׊ v4 FGK@Z&Ĉw H\+!l|Q\.l6[!@bĻ׈ 4 l6RRR]$%%֙ccn!#2`!~xh 0p;{ vpŻ%C7Џ4l6)( 4x^X,r8r\04`l6ENNNK ahHX&E ahHX&E ahHX&E ahHX=Z3M3% k%%Z 8#H,mp@|h@b -n#ԝ 3<#Z@YhNC @@gdi Dk}if2ZxI @QWAfxzh چ-̖ex<&&hAfa B2 Catx 6Abjjfjm7oW&&MP(P(`0(0:\Gxb#Zh%Vvl6l6[֛тMZk@ ꨫhAf P0T(Lrr8; пLӌs&.`k:;#-`0@ P($4eٔ,@/it:,0)= pnoiP&@g]ĆM0"1SSSt:\tj*))IIIICiYPb@;af(tU)=ХNԤNS6MRs M05h@tf`0(Nײȑ#USSzn\!#^N .1dZFz wAnI C!κ [fB!eddf !haѮ)F M4 #E6f&%%ŹBZOuu~jztmL0"w奦f aIIIJMM>D-Jz@z/04M\. ph)))r\B-EC =C };4#]͚8V!4#!jZF{&49~;'0ժ,!׮fGז]j;R `0P($.0nvB`$Ԕ0/4:k~>] _g׊ג9{4:jiZt:\tjJb@Н֙ x}H,iiiI j3|]0$ 5`0᫣@5M聶afx0 l6Y| wVU6-fJ'+Љ\$3%`_+jlG8s - )u\. rEno,g4} lqfubl@h@7x~&"׊>G3PЁTvej@bX,Zh't@/׎4$,M @.C0X***mR}cw03.r[nwѭenn??scʕڸqc衇tİ"[ibĻ Hxm -4D|VXp Γ՟@h0tHZ/hԨQU+4$,M ghz^ZTZZ (;;[se]s9'겡PH<֭[Ǐbhԩ3gnf%%%E]s=;S_o_ԁt:l2?sv;zoѣ B8q.\o~r\.#hƌza8qB4yd]xᅺe7]裏E۷oWeeFSnӄ :)<waiϞ=V+++UYY(777jPu)u]ڳgO[lі-[fԌ3:'twn5`?رC^{Zߵkvڥ^{MnX;Ciiim5~۶mڶm֬Y7﷚ȑ#:r֯_KW\qEmξ'b@0444hʕjhhy睧oۚ>}<t)رC_|qeo[eee6m﫰PPH{~;?~\?vG$i̙+TPPg%3 C~f͚I&\{9?jXIrݺ[4c ;VzvZw=z_i۳t#Ȕc&ܽi hjgOK Ҵ|rIΝ;;]_"w^ GcyfϞ*lk 5*<Ǐ׼y$Ih5u<[ٷSnzD?J$ZP@INMzu衛w1QTT$%ϧЊ+dM2EVk9rD@@Rsؑɓ'K<<-?,KӲG8t 2\WW|cƌч~تX@lhkjgu~CAfHa(jW'e翎pzi6*lsUTT?T颋.Ҳet:[-wpw;YHGq<=vOk=O& sP@T2c2ePHŔkd(̴ ,?qySRgZZJKKuرn/siIRfffi-ҫ 6hӦMںuJJJ;wѣ>|P3f̈,SUU:uj]vdXٛ@lh0g9Xer]oi5%Ôi5d TYSqqs*..֡C ڵlL>R-өe˖iٲeO<2\Rk׮Ύ,{wkصAgX@l(Oh)+#[2B TH99ھs{6^x$B>l$edd[7M=jٳ'2}Μ9W^y۵58W]'b0 7h㮷 $IM&)C2r,ڍϴZ-yW|E?vڥ{LǏŋλaÆHyw\AAAd8)))2A,v\.W4`YE?oԸIveysԤ5P((b4M5yT8kT+PȐLSƆ&y[ /׺Vnp jhhʕ+l2-\P'N$9rD6l Iu%[׎;F͛|0 ߿_=$)''GSNmC}*//wܡ˗ꫯرct:Ԥw!`9}/ 0PB^|>_KA2MS@@@@^W.Kg 4`7Z#%Ð0F^2ut0e Ða2BAY6>Qr>cI>a=䓺o>[N֭k7mݦo|Q׳i&}'OG跿m?/~۷g3<#ժ$544D-**҂ ljkٗMMMwD|>|>RRRv]F Ì#բ1c ȇʔbʖs2e_!3d*F(@ q9ST, ?I/֯_VIIISQQzwo]-w^Biii… uu)==='N?7|S|=Gnkԩ2e _B0XCoy'+@2 CO?BXt=KˆE]ggZ:mZZ;f/L?ömR$Y~Q @'Z>o$$4](-@ֱ `Zm *=)P}c} v)b̨,$M8$_ȧT)ٯP;7 !~Kۊרpx69ɗ5`W}_B{bdufskMҒR,IjhlP]SdJZ96;Q\q}9je}|w0$hO7Zp 659S*CU9=v狚CLafFZf>GvS'dH21S_{OVu}vܡ%7ӱ=zcuȝ(޻ 4`Hюo?uքPȉZ?gJI)=f;txOLOgKזN@9Y5*UM JNM& QId|J|8oS$j)4%P=[)v)-9KTPkK{u~d!JkJeJeCi{a4Vb*Ó#{gR2  N#8 IDAT?|^+#9G m=pfh Ci2MSa( F"B!Cu [\4MUT)heiyg"Z,m2 C۶mU]]-ǣ3fh݁KV\٭0\h2~C~oHr˴;l Lo>kxKd94[`F_F4 2B+G>t=ZUUU@`0(++߯ '}MzMB,vd5UL3G^W$߯P(?&_];"d)dJ~OUsF9~ۏG?~~o ƍu}IVZ%Kķ @B#!431ӫ}NyiLC[2l8TSS#""ݮI)sQm (+ 0C2̐vm3~ngtӧOK&NH w}Ltw{ղe\ Qhgxde -}W߸6A!30m6v,VX`0P(ٚdXdZ~ݏhVX IҤIchp twK& * fXdvrZp3ZJiifgG۰0<<z7#}QM:5a0YjBM@g4` Uqq֮]yn:[.{~a͜9S ,G}GAiii;v/^,˥m޼Y'NPcc2224a-Xq:{GyyyZbE͚5K_M7 C[nձcT^^.ۭ\-X@999}:.]pad땖|-^XQI]?Ə+Rۧ:1B]w]WUUUuzznw+BKK,ѿ__Z?O uǹB@"WBjjMO?42nڴia޽{8 ϧ,䨢B;wÇ5w\mܸQ`Pr:{***tQ]zWUVVT婡AСC|E}ݻuA566*33S#Fٳgw^:tH7tSP7uUWW7ep8rT;-[?iUh`.va{$PA HhFҨQt:k.-[L3fp3fh…r:W^yEzwpBEZc_VyyvءsƤ׫LK,ٳ#O|X&LhJRAAΝ+ϧ#Gy[K,iZvkҥO_Z|y$̔ @,C͖kC͖ _!bG!)MI qĉQK7++K6MZR> @g5YײEfgMӌ*++%Io~ 1^4v]+V0XBJNNs=P(W_}UN:%ݮI&K_.Nz?Tyyp8<͞=[˖-SNN6oެ:~$.$kjj|?P:sѣGײedXbw :B @?IOO9#G`5KԺ M om۶En ۺunݪM6g?Y*wڥ'z~544D۶mӢEӫ7lؠ_jlll7رc:v6nܨիW{~D @mұ+ْ &(uV`{뭷:7e]j|YY~ 3N@,M0ARr6-rLcǎfu׿D E @ύV0luaQ ?r޽***RJJJMZ!''GK.Uaazj>|82駟nhn޼Yuuu7|j) J|yϟ7|S7nOUViٲeQk8qfϞ<͛7OyyyJOOWmmvܩg}Vm۶iӦMZhQL unj?ђ%K[ `@há\iÆ җJoF 4yd~x?C=VJKK+W^Ѳeuf۶mo~^[o 3Va@@º 5w\{ڴivծu딗oWؿ.I7~k_ӌ3$}{z-u]̟X ^4$d]z饺Ke=k_vh^x!fJ?qŦxa& bh„ 'FƷ*6))몪yĉȰnW~~~jlfpE &t1G?ҋ/CJ {ァ'OF4iRe۶\z;&Im5-7772 #ATRR_]֚>qℎ?ޣa&3t9 !}ھ}oveFy/V4}t۷OTQQo}[JIIQ}};s޼yڸqcd5khڵr8ݪuĉ:t萤mo6{ӻ>fB M i˖-555 3*]uU]jRSS[o+Rk5i03%%E/oQN30 UWWkӦMݚ>\f}ݧm۶iӦM:r*++UUU%ǣ\M8Q\sMfƌ'|RO=vڥjܸqx6m$4n@>?X@@&Mt50]xuXlYKMk^k',Qi;gxMR$?>D?PÆa4M!0 (04f̘x ***]ކ tw 3m6^-[l@kO'NjURRvVV,痒[M:=|HKN IB  -^m~*pSmi;-ڲѦy:Zo4]MX,`@C>& n3]! 'ȑ#_0){ //ڵk]`&E ahHX&E ahHX&0X,x!s .ᮩI%I\sƍozwsNknCڽ{߯ YVjܹ;vlKCGݮ@ 20\&$6 _Iҭު8W'L+GQ5@=fJKK#r@pĻ:E ~sN=zT.K˖-رc UZZxAh:~NЪ0,\.yx!rŻ:_`H$y<k.IҼy4i$IwO0!ea+--$~UVV*777_lr\|.CfwtgKկ~USLsEh0 UWWKFj0T̟?_۶mѣu<&bĻD ~ze$̓)**RQQQ`l6>ޥ`HIIu&`PƻviU>xѩSz#Fh}%IzgZ{Z6m.VK_;<߿_vREEl6 uEEVo~h駟Vyy/Ϗ:Ν;;())I~{}yz}ꨎ|>cVg,><{̙3jjjRrr#xϯ]-[ߗ$zJKKp??sпn^/D+,Dd,\.W\.Wd O!^_uرVU^^O>D3fE]r$I zzۭLeeeOd{nRoZ?{Ξ=?TZZ^zI~x+׫ tdOS>}ZO'|˗G㻦FJKK[?yN<}_F &yFcx\g/nZ?uN:}+Ԇ tȑVTVVRЗe͘1#6Rg_ϯl6BPqaᠰmk֬сZ$x?C_ާX=y:}ǥIׯWqqquuuɓ'%Is̑ϯX]ӧkƍ2 C>* yhf)55UG>O@@` $Y,v9\.LB;pr"- ^Puun-Z|9N9sF۷oX`P_~ydd%''+??_&LPzzԤ2mݺUzwUPPu / +~rrjjjw^ݻGzj~k9rUSSM2E)//O٪ק~;wVoV=󪯯Wnn.1BaTvZtMrnMiw$_j.v.9Rծ]駟B%I0aB$@9}6nܨz;*((hׂ/u<}W}}?H/_N۶m[dӧ+##C 킹~><ԑ|K}=.i꥗^RYYNϟѣG+--MMMMÇ5q2=HNNuNK󕙙{6.D^nbrF >#UWW+99Y7p#5e_^wVqqfΜqEwԨQ\nM6*99Y_}ҩS$ͦkU+h][nil^^n>C=zT555JOOGE.XUI&@O>jjjuV-X57tST)))O?$]~:uj233zJ@@k.B͛7yR/S,OǾsNroll'''+;;[7tV_̙3ua:jߋ3gz ppiXZ־/`0-[H/^obE]sn?99Ycǎ=b[~?ŋGTRÀpwPHuuu=Z6,??n![v[^^ںu$i…Q u\:$5w뚨vrҘ1c:cq~BW}qo|HWq ڸq$iѢE1oϺ:&L l̙3h@IMUYYy.ɓ;nk钢IMMvb o?TAAAg}V6mRYYY̾y<9NI ky<;24;;[TQQzZeph|mϽWwt%40Rߏ)qwާhzz>渔DeڲKXޝaZ#i%yܟ"æiF+8333kѢE'OA<]$MnMTWWi*Iݍ[W_a*,,Ԃ j4}Qy ۝fSaa %I*..G}z^Zַz:$K.QnnnL;X U}~T_I_ZA}J?{%##CRsV]B3gDyf̘ѧuz߉ 99YRsנ(@>vǥϷX>uT9UWWLPHb! (Mx4ydIҖ-[TZZu]vӲl("]!0.}vIi)99[ۏ-bfZZM&Iڽ{N8ut:%6j)?:z߉ ''Gtر۽{jOr#}=.1b$i`[R IDATjhhp84uޝGYϚ$$! !$,dd ʦ XTURQ[[imOsij{NVQR).D ;*HXA}Č $y=y=}_g& {$;vLjllѣԩSz͐@TVV[󇨋/իcVyyyڼyn*I;wnNuu֬Y<թR'O[o;O{e]&*--Ν;iӦ.]AA^}UܹSQAA6l )0hLz_!C4MڶmJJJ|Cf6װ}v!p[ZZ|I<$&&Jj@RӼs ݹTzzKO z L"&ǣ7xCǎSuu˕5k֨o۞N>ߏ=ѓb/􅌗_~YGn[TQQܝ^()Ȑp^Wo233'@O$Boq}n&%''+""B7p6nܨJٳG{in5sVǎI&)##C999ij*$$ބQQQqF=bbbm֙3gt޽>NS]wRHHnFmٲEڿ/"!7%%͐Ǐ׎;vktjZ`Aw.ӫ^ZCn[3gԢEϗWW;jѢEzTUU׷f {:/~?DO$]qT__7JjzVm;+P$Ĩ\UUU ոqxv}{F 𒒒twO>QaaJJJР!C(%%EgVLL߶W]uƌz~h={N}ϟ;Cwɓ'U]]-өX]xᅚCIĉek߾}:tf̘'K ި\ǰuQ[K;m;YܚۜyMR$5@ Ði9=eF PRR_~Ytm)!!!Z njjbb|Qret:J2$H~l|lxlu/?g^g9{};? s̡ hWVV@ Òɓ'`E +77W 4~|XTSStBT{}XoVdeei֭}T00h70 M0Awp(333ub]wݥX-]T'N tI>akյ^;v'?_^xN0>4;#I+5w\KyJOOo[Y,@eTQQ֮]۩yfkذa}\h,=zTl29N-\PR4vmS4W\)0t7+::-M@;sڴiJJJ$]q\edd6 ^+VPddN>uuSqFo?O=ahÆ m6|A4iOEDDhذa9sjM6Њ+׿U?Z;nj:ժUSNb .̙3o}Kaaa~yt1}փ>WONS6M^պf]+HկsV;cǎiݺuW{|PѭVI:p8ugUBBB=ֶZ_VV2?~\ 4W_UAA֯_}kmӆ t:o~~3:t}i߾}zwkʔ)H~e4 6նKj˖-*,,; rss{G3fرc[^Sff~a^Ux[0 =Pxx#GTeejѢE6qqq׌3pB%''kذaґ#G/@5k,;9ׯ_/0tKj s,Yҭ].*77WC߯ӧ+<<\Gѫ \.{veZ}OSLرcU\\ 6h*((Яk=SkkkCVӧO׽ޫɓ'+<<\tn]Ժʕ+u5f瞓aۼS__{WEEE4ikĉz:tWNҿBCC=VW7 4>.OeSa).%%օ4$4*ХIeImpB9N\.mڴ霽VZ#G>\iii1c~ӟ*//O>i222W^yE#Fm6lRSS}+=޴itkŊкu=۳>\饗^R||o[rr.]\ouj޼y~+*fBB.BEEEvء|k駟JNSުmBBfΜk]Z~Z߶;]rJ_ /vѢE9s+??_/v 4k kԌ wj=/ʞw.n~e tڶmp8t嗷 6o,l^,[w5kIhllԟgI}*x͝;W+A/$hf6Zz}Ck~5cƌV\K7toرc媪*IVQQQ."""|6ls@;/gTTnIg}F ?6U~/~St ګ~tr~&+$)55U ***jskYTTw\=@r{{>3H.^9fÇKR}'O$-^BCCկ~URX 2DT\\[|;_G {ˊ+\B[NKvO<)-I>}z?^tĉnCy@?CrTQyWa(,4\7|~[ 󧣬Lw$=zT˗/?gn!:zhIMsV)55ԩS$á.x<ڳgۧcǎHjllTCCC;p2&&^͚544t8'?ͺwӣ>=3zg4-ZH˖-9O###um}Y]uUzx wFVVo3{$@F 3ҢءTL2i1eȫJ(&*Zy'5:qB@|wzf˖-я~$l6СC{{CG0:Nן;vӧ%5 ;n8%''+44TRcG$5]iX,&Iܯ͛kj۶mڹs>c{ァ?O~)S\+Vw:uJ/~ml6}q}\pA?P@A P}㧎+44D5 U2d2<^*+7:`u_^R=X]V_2۷O_|q}#177WRSOaÆzHII$y^*99S;~XGW^y^=UP^xO_m6vXIMsB9s^999A :N-[e˖Iji&\REEEz衇~ԌԊ+3駟$]wuJJJqZ~_h=' 'YQl00+S^E>Wg8#++K#/ܴi}מm۶I&L#9}]y<9R5f̘v{=vfŮm6n8[oܹsuHJJҝwީ'|RTQQCʱWXѪGw.k֬镺*..NҗA=p>h TS_ohUZc\ :q<[2$*Cn[^y=(>fooU6ΌϹTT̙#iz^O>D7o$u]힧;훇 KNN\ IZr;lU$IFj*""Bץ6Ւ%K$I/>w7xC}׭suGCTTT|A]|ź{:ݫ#F}7gϞ^+Ə/Iڽ{ vYA&}_oq#*_m>s䱺zdZLM:NJioz 4eJmTdfO\' 6H.r9N[tvڥ*ٳoOj5fhzgd-Zaon433S~fΜ)ݩZO~[UUUZb~a͙3G񪯯ǵex㍾pr̙zu?]wݥ1cƨAz}C膆{ /Pw֋/ӧkƌUTT9뗤ڵktw;Ԃ 4rHhޛ{o߿_ hJJJR\\ ѣG?ARSo7r-[ztڻw[n_QFtAGG}￿k_VZzuErڸq9{-E  ?T2 Y[5jpҔ5ɒa0 !0ex=Zm*-Ek>c9sFtUWuŋFa(==MiZti|r'?imtRV}}^[o<Щ袋\UQQD366Vwy$K/˵~zڵKvjuLá(UUUuxշ-UVV{QXXt뭷:UBBz)rJ\>!!!zbŊNvܩ?\yz=쩨(~O?ժUj*YVַoZZ.^=1c'PAA~ӟtry@GE)).Ye6ͥ<yiM2URJ!kʫ{ Y*--bbb4{lݻW۶m]t{1oӞ={pM8Q7xohtO?vmu]yo?Ly^7NGUW].UG}Tכol566jњb(**JIII;wohС~ސgyF7nەlv]p0aJp˽nԩSsرc***R||̙믿^'N5\#0,%hF:ZYoǵv˶m"$Y].G~ @LllL!ǣz@%Sv_<}Yeih cd$SiJ)iV5uW}cVfI;/2<Zzf̘g}Gnnot.**"cbˏ[.ӹP!Feec{Y>&?:Mq9c9zhVQSv+&*NXj+_j^onGGn[ klE+؜+wG6}=ЯhºL v*/֍ $ȐGLUUR[ilմh)rL~"@NH IDATbg & @{OrUrA!N9W#6e򪴺XŔ,\d5䩰HCX՚Z@ Oߧ QyCKsdYSFjBH-<(jK6SQcg=Ѵmİ$z>Մx{}& @ՙ@u#aQ}CNo"b&b6ʴJ9asJ\2Ud94o7te@#âh:.S^Y-y7Ujr7bӗaŐ)" Tiq⇤& 0EEWLn!aʐWh 6Lۗf0SEpXe1 9ԛy=#k 1&Oy WV:B#b6~oYl&YRQI^|յzg;sh=4`һɱw419lr:$ۮbF{u83e̦ޚEEhHIRm}j$SrUjSʸ-?UkQ%+]`E`/0 h.k< FTV\)g]ۢe)#nu8\ 1z\:P5:_oCژF&iݟ& @qR^۲Rؤ<ᩚaMqXȰHDコ_YNˬuj oTD]bڮj=]1q1"R 6iM& Pa!C[kV3e&$MԇTDYv񀢆JjooGoE'ӓutiӲɡ䨱< a t4ͶVb*:d i2MSa"^CյU[B|i*,;0_d_ku.0'ѣPxxLK.O{>hir~qiFarݲ}w& pGuuuҥ㾦 m9qحT,WO+$\.y^=4~a|pR2$"Sɔ\uڗfݭz9>leeei̘1x3eeei֬Yڱc< PDZbEDMM֮]"EFF*11Q:~233uWjĉ=:u +&&F*--Ço~mBUQQw}WGnPHHHj4x]'<4A@F#FtZlLSLܹs}.њ5kT\\_sUZZ7feeX׬Yz[H/֌3|fmݺU쬉'j޼yA֭S^^>]}=Ln[]wƎ+IA DCMUtC H\veʉХ^*Iܹs[ -;tP͛7O+5)++KcǎmJRrrf͚F|yKZC @;,$x.Æ $;Viii^Wwk]ƐFVTT9F<|jjj. ֺ#p(!!An[۶mkS\v?~n֮]뛻62 CZݩ !g%Kzj:tHYYYUeeٮNz嗕X\.F?ԛo$iذat.4zhЁD~JMMbљ3gK/T&?:Mq9c9zhZjǎZ|/_m۶@#WUTT"?VzzzK1{ z}_j~N<)IZ;{ $iٲe4~dǎ:q5\aÆ"y?D C5^W tIB/c=&[z\ׯ`e`D 7rrr]ҥKۄa藿%&M@@j:@0s!&#@몫7,0tQ:uJUUUZ՘1c4~vu 婶Vl QDD5n8+??_[lis۷k$ͦovǣ\婦F555r݊PddFqԎ)''GUUUx}&MzzIȑ#uw(77Wo 26&&FPRR"""F9sFQXX<%''lx<$áyiԨQZ:}>#IݫVA۾}Z ))S(""BTEEE<,]Tկ_UOG}TZxq` Wv*$$xر?YSS#ӪGbފf6?0g[lYuSll6m[_ZZګfAA}/"3811Qiii$I*//W\\f |ꫯ 0aVZk5&ՓO>I CTTTT0SvFj]UUU-4MS6mRVVت7deeee)UٲZ,--mmڴi$өcR7zhٽ+Ϟ2%%E+++G}$IPrrRSS}={4M*++Smmz[ krpvoMCCo쀵4IOOo;SjG?Q&0X,GGGK/ծ]ZxRиq4s#ڹsjjj}j;+NoCCC{\l޼MiZ_f`"ƨQ4b(//OgΜiC233S>}zQZZ[B+ө'*>>^z7{|-9{8ޙ3g*666-`)** 6oެgmG}TW_}u+ &ƏKj?:ronyꫯСC{Vt}.f~ю^>}@3X]!::ZsQLLoî:V=^9(V"##{T_3ۓ[=>tP!v;rڜɓ>`F h=48KccV^-IZtk{٣G*!!AW^ye *|i:~U^^.ժXM2E#Fty?8xCee٣d%&&*""BCi*77WUUU}[R^JIIСCj!CLd٣ٳgpZ}9k U]]$Jjh{\\ƍLIoK.DIIIۛ>>mllT^^;vu5Zn."EGGB'N8501M@uI}G]w] cJKK%InzVm?bnݪ,566>***Rtt4f/:Ͽa*--Uttt3A?жl٢n_dF3Bvy^jVbIMJYFNS.K7p'fRRrss}m;Ǐje_(j֮]-YDqqq>gzk۶mX, *дX,5k{=ߺرS a&\4֑#G|$effj̙ѣG!Ţ jĈz*))!<϶l٢\o:/{V]]N]u80:|xڬ4i&Nf a_(}{ .Pnnn N*<۴iӔkcsnw:ꫵwV1M׳Y~~LӔbKIIܹsw^!n̙30vc"tKΖ$ƪLǎ# "脆08p@n[f҅^(.4/ 4uIթZ6lX9ߍ`?X`f͚wo-ۭɓ'k~i#8P=4^jɒ%*,,Tnn***T__z9 2D1110 (44S%)""B_~򔕕\aaa ׈#*lv(..NTQQ\.͔)SReeeu535p5 TrٳgkӦM***REE]ޠg^uI_ѣG"bo#G>X,Z,mбX,Ç,:w#/: ww`zϟ緻n:1Oӧf)99 9ss?Ţ &h„ ~;N}ZdI75jѢEn_p.\حcD۶mkfl6WҲeX h#GHƏT9neffjTQQ!y {e/FZZM&t:w#\.G=Ǘ 8=4^G}' t_;*,,$M8Qo=z4r݅ Stt"""]JO>Qyyyu x&LhǏ*..N$Teee  $I?ϕÇ뷿-a&C WLTFF$i„ !ƌ#.ǣ'N/8aȑ#QUU PDDFQFw<䨺Z555zRLLN.SNĉ*--Rhh"##wg_m\yU- f1^-qb'''^̼[3I;'NqwA"ZS$9caխUĽ6yT/@$Q~}6߿o[KE`zz@ àq3QK%$h4._$^/rMMMOѣGӧс)8Nx^p&:u x?O;ozzzp睉`0W^vc}}ǡhmmM166ylll  AVCף---Jy|㡐Sϗ/_FUUFGG177`0zL]]]Jr011eaFXV9rdur=|l68N"@$X,ա't׮]M{###x1Z-~ߧ=U\~}4b&477']Gq'} ~?kvtww'߉ݎ?0{M\_<\'ߟu>:f[\.OSN3~߿qh4\zaW?*nCy$mΝw}WlB'CBȾLѡ^4NgMߏ>,.."AH˅y7Vp| bDQT:<fgg166gϢ=}@4Çt:F<$I˲`YEɏG(R~___G8V~O^wa~~^ΐ)LLLŋ~+M% BwŔx077tvvӛ:b`cc+++pC$Q w͛$ 8rHs 󨭭MM6Px a`ff8wz񸺺>DQTe[XXFI]xȧ|ׯ_`@0ܔ7zNLLҥKxDljtz("|ܹsj+++qm߉Vr$\Q>~$?g^oViXKZUUxCmm2777DQ|JGn~*UH!B,ԡI!d_(4҃abzzkkkX]]MweYf`0 `bb)odZ-bV+F#z=b<^x׋;w:kIp B$>|v& h~sss.X~~AO\xPOo188:z*V2:{.N'^x zH8vrDQTYEWWv6)wvvի0PT`hiiǏ144t#n`YW\Q (EMMM:dL|駰X,8N$ajj >ۡVsEuu5k~رc=D}rhs8N9s&)kJպ^nt Y >Lw9 hjjnG__\.^z^nPqd_h,X}SOZVVK.+fgg100^H;w񠦦gΜ4p7?%Kq[H!B<ΛB!{ BXE[[۶zضQyxϞ=$IEmm-t:PR`4qĉ7}:& ZViQTtQkii)} y;v q4 Fbg+S'Nb@V+Sjl6tuuAmJ100yO< EMM t:Qh`Xpy b1 <ӧOl6CAVCnlmmN󘜜ܖ@R4p2,ˢJɋ`6qy nJBJJZ0ʴu* z~[m!XSfaە{Ç+h4*ם8hZ8@$\|M4 J#x<Znt Uv8MAV`0uuu!e{sן;)dRr3͆7֯ ( XZZN't:.]t.B!CBQH ,P('+|>,//oJ:;;5䵏7}XEyy9Snejii ~6MVlhll0۶nMӥ7JNfk4˕1Bl?0V|ql[Ksן;)dRr3+\B_Bԯǡ---o&jbm#!ByДBH$)~'vX "7%k[m[.߉(pp\zJ' J(B$,g5 ]hluu@'0ʚ~x0}:nhL _R~}7}Y2mbC͗IzVױd6 6 +++P?;8M&7$ixOHŖx,ˢ"5*++t|e[ƶo^1ݨ8BOf?7vqZJ<G (ʾsK}SXb@# ***..B!CBW^;v||݃V5^7BMŏ?`0ȑ#X,Z j/h Rg+ ~k:bAX,Gk?8tuuaeeJ$I0R?1~s]K>/^tnjXVFtttyLOOchh?ACn #\JQ)dja:Q'+^nd/Q._$I\.\.`ZlJױĦ/=~ Jb/ň۽P !Bț:4 !yr$ttt(kХىC$)N'?U>M~?F#._ ^1Gxhq'U㵼\.d?Y#q(z{{Sn;== {@{{;ݻǃ5c||յm{avTv%jUΫPahZl6f7n VVV8(uJvBb^\!(W !q:y;no2NqehTW`jnn.>yLa`06#TuVQQ4N+SF~QֱuUyyh744˕Qdeee8pGbOLt:pɬG0D]]]Nk֥2k9#5XȲ,zR6%Iho<||Ͽq#LJnÇaX<|>FGG7M-)py\v ~_[oz|mmm0L8N<=leqYPF@UM>Aww70:: IUFoGV,҂&e|2?~ ÁjFzH׋x=Z+qTe!s{ގAa|8y$l6A*^U㾾>,//p G,CCCZ[[ h4x=lii E1xύ:rA7 qZmѱb ڙ. KY1Bԯw܁BEEΞ= Z ݎƳgP[[mlU-+uy,eKV7!:4 !uԡI!dO[ZZRĝ;wignt|2ܹχBV8X,2lll$oinnFKK &''1::YpI 84 bX555ٳx qMjh4qX,F#G4?gΜ_ χk׮A! Oz4Ї~{ayyJJB,SY]]mG___fv?Y(Fy'Oĉ' b4 qz=܌mǐjMy?__eY4S{RQZѣG L&tttd}le3źI%ueewE,ӧp86S… XZZn߾>h(Of.[("ye,Zjzȏ y^PnD' ÀeY度'ޏ `2O>r^j5t:]rJR^̔u/\#Ȧ8:.5?稫o[D"MuJVM9j0 y, FuګύL_8JUr008d*ɴ9D^9J6+Δ$ @ @Rd2m[?*nzy,3!o^OE477MR:Vlt/ɞF@@~$ ɿؒf{&{)Id 1Rc*T;R&uhC7,?CV0}6, _x" !~B).7FE:4 )>۾-zB!E2;; 3$˗6j@ B'T*U3שj[BȾ7Z!B ('N(qnv:;;KB! ZvoBFCB !BgϞ VeeeXZZ£G ؈RgUKjXRgB!dIR8q<_1y1MkJ!dMB!kp?F @8FAee%zzzpA =/044{f\B!aQn-Kˤdm/=&ɏf\#6IrN4_|7cǎÅb$Ia/7(톆022:?`y,uݩ>|KR쇸D""|>(x`@YYF#QWW<)Vs}ӟ.]B}}}m%I氼H$a6p8N B!DCBȾpMAwT*z50pjkk!VWW̌08DQ(e,&&&3i;QClll`ee===X,~=x' @EH0 8ëWPVVUUU>~^¡C2:.nuu(u{<34~###Em\eZ00 J z]Po`0[nr!fV]uu IDAT:(" !ceeX[[dJO444.333}6eee$ `󘞞F8ƽ{xp…D!Bnn!y à /^@uuuFǼI$I—_~ xp]=(XYY+'2 mT"{,--AVhllFJ˲$ $Aqb1Jq/I2J3{3D"Ra.22?"*++ 65~d(7Q$ױV7p8PI?Y/0(u=>npWn>STP4dտGngX`4߮+?JyM믿vCVիl)lŒ`ϟǍ7011[n!h4⣏>j$JV ^?׮]ųgؘzB!̾nO!^Gyy9FcB׷S(8qjkk3 &wfCAEt;aR ^J#˅1'O:/ 4A{{;Z[[<ݻP(s>'''vNBeeesՊgxO||B!BvuhB!u*++qر8%sqh4bbb"@@w4BsqTUU|Vqyz~ܽ{7} CETVV300hiiACC`zzZYB!6"/M(؟ ]$ xn7q***ڊM#nA }>spM8N%}q,,,Z[[j3NRpQ!cqq1o !B)&$/llllY]]ŏ?ub1Q0 X4M ܹZb1\6==/b(i0%/r:ǃYٳ)㯬vcll HDO]]4M  Bw<$IFFFىӧO+ ,..*eSNr000`}}}V011/feBׯh4o,&&&p _tڭ(n}m%s)k!)Wuuuy&$I$9t@ )<Ѻ{ƉI,F)Q>By zlyy_ ! fff0==s)qd/atvvbrrSSSs<]]]UK#,BEP&!BٳCBȾ?`uuUUU8w*++VM~ZZZqnbA0 FGG1337n?WõZ-bV+F#z=b<^x׋;w:iLBl6FHD ~AO\xPd r,z{{a٠Vx+`pp<ŋ^7++W`ە}k4b%}5Ί$ƍ$I8|0v;L&(~?P]]5Kcl|9"PQQ~s7Y<w}dz)`@ Sy\~08wV+$I*1??[n?hf!}0 @ee%, 0022yܽ{|AAK.Ůt:]VbBSp8077әch||S%NY$ImmmIGeB nap'Nd<:3x={ tOPYYwuu5144ϟ?Fyy9>S)vꫯv =zts*d>L;h4<NgΜd*uE1{7|D(l,.v#$bsǩVYf*y![ y zp7ꛫW*0 jkk҂ǏchhPD/t&Nߛ$I/vI_x.|ݨoXEUUrrlƙ3gP^^188)tfy~c1 CbQi>39V2tR!B!MB!nq$ ׮]ϱ%Wr\2ZVix<Uɲ2%XtflQʅWLyfmmm^)5ϼ^oKqV\ZZirF0 maPSSXYYvMG#%S^^JO%WRGڭrU6 Fv:SF'f2"L<%}!㹐wJY tvvx]8*t&~>V __\reohoCbuu?(]b>@Ǖ$I67!B 4,!}bݻwӧACC2C^yMkۭ !-b$ti׈bFYcL8o~~y3\KqVz$ ,fveQGKK ޾TzLӧ!^BtQx|~.*t|>Va)aӃa,--)7I0:: 8tPND|Ng*V1a#6 6 +++P;L&Sk9T|xη,U}(qgb eeeZX[[[oU/N,nLNNb~~ ~ߦ\d4a6K;v,|,yJ!BH)Q&!7ZjhDGGxG 4~ZD^O&Oz?" 8r,2$0xwuT, kbB8 y B`Y]]]>100SNd߉ q_rbħdztƆ{f:tϟ?ǽ{ ֦JTf63Nio6nigm}%RG*V9,u<;QctB$tttdio;5yj<[Ko,TʟO޽@ !?~'V;#/+++Ǚ3g泽O<ūWpጎ u_[[[7M_K!B^CkhByc0 Vs88u}]K-)a0pe466jl6d2h4* FX320St4ROO $IBNc!g-RL à*JYk+љ@8^5v" . f9O){]U Q6UKOve絵5q@WWW%NemD Q100>|j$ɓ'J{:$ÇB8%K !BuhByc, ^Znmy###I[ZZرcS1 tūW`Q#G-dLYӧX]]M8ɓ'XE$[000㈘MaKqo|VTT()Ԇd6q ȑ#Y7ѨLߟ2}Frr>dJQ{] - Q6U OLޗ A011yAdLDOI#wV[F}|=77d#& z.]qBqvn75˲8|0D믿l6ܹs^w_~]Y4x<>ɓ:[y^/~ڵAggg?c`` jI0<<[nabb"9B!M9K!d[^^Ǐp8P]]\$ ^>Q*qTAvX,a,,,X hmmU666p->|Fa!)]}2ݍ1C$tuue5:;8ioo 0{B!ԡI!dߛV,X$IPj~V}b1>>W^7.\PFC@ss3ZZZ099Q΂8%?xXS{9s_5|>]Nx<.>}:mZ͆w܁Çk)"(xɓ'qĉRp!L&<|KKKD"X[[JR)"DQD< X^^V:4qbqI=2;hT:L[CB!d:4 !{BYYfggP(H$Fшftuu*ݎ/*SAT*XV:u mmmۦSոtuAlnGOOj5B^ի ֔B;aYDUU׋h4 ^Ftww&άtj58*,..bnnnPt0 0GCCæ<c|>Yw>%8+f|T*;v CCCz|B0 @sss΍Œo,6TVVb`` ؀ZbAww7:::peD à| ưߏ@ QUUfTUUetN*.(F|(S(ta&'_GG=zX,{>qq?͆A! *SնjXry"})9փŮo._ e1225ahZvtttYY_5Bm"ZTVVvcvv. F8VhnnFyy9 C֣B,Gbjj*z===hll$zL\]] ÁfLg ţGVӓtш.BxFbeeش,!B!;O+";oLKiciNW~%0`c؝$DI#kQ!I2ByaReR~yb1<yZN˪QDҗ' IDATWWD"HaRj6EQDQ%?AR) p>bd}p8\ej6%$ H<+# a#({wU}k[ * Htڶ=jv֟m9Nϴt3j *. YZJ-)Qz>yԭ9νU:窪JR};&0dC=Z@@G@@6M.+4ԳLlI #Voޫ;37iJuޚ___/'4Cm#&&F111 IIIjhhMǷf Qo㾲Re)>> _Woף/G.״z8 I{:?v6ɉ'ꫯJov;OOIwm!&&Fv=4h{$7Hoϧ@O΃}uIJJ8ieVYnC6/)'m%29[SSJH/-˒ mh;T[xd=W6oIIImmYB̛(+yFt2u$SRWWVVG1Om<:絵n[2ۖ2=4B|||Y4 l6[nOżtt!naa'?l=Jig}{$n;nmt^rw:q%ut6~J\}uQ˅z~=IM}嗒!Ct|{I;iJi\ٓ۞O|4-Mm;gw?g:,an9U0:<tfY#I;vlxM[`! hSII***$IyyyxHhڴgAeee@_ M)tIҸqd#f8ze5vHv LFވ2VkZ[Zk`_:?6Mۛ=KJd|kۨXuʴi,Ki4M4M >s\I2%I ~5m~5m5{nzTӭƣZz^[5O,^ml~8z>tDxG: "&66VGzyg [bYQ&EB@" jHhZ$4D- MQ&EB@" jHhZ$4D- MQ&EB@" jHhZ$4D-#@QXXEl6@ol jCzȑ##HQQQC MQ&EB@" jHhZ$4D- MQ&EB@" jHhZ$4D- MQ&EB@" jHhZ$4D- MQիKq[(% j׮];v#NؚwyGC kZ_LDB?6mڤDtH}L/П;K,Qfff%%%vO8!IJMMP 0˲{nIR]]9GwBBdff=ho1MS-$=䓚;wi~_2 Cr^~eM6MǏtH}/; )$4nf|͑9 gH! j1,g鮻eYtu׵/~ [4hGYYYKUUUZkK/ &x- W^ʕ+uQqiڴiZxO>^{M>>lZj   .@7|bbb,NK.է~+11Q6m MWo ]ݏi':GBpF8}O/~k̙=zteV^zKaGUVV$rn+ u\i0ZS\\x@vj͛yf-_\O<&NnwuRRRZ$$iΝڹs}] l1׮];v[~I=Vӭ+@HhB|:Y'ʏihHMʝH+qxڿ?34 ?*͜9S~{dɒP2s(a*IsѴi*.._?h_]_LM4Iz~zkذam۶F.Kofffjڴiݪ /"edd襗^Crrr4o<=z7rJ-ZHfzn}t M$iO╓3D]ENVWμIO'!3,Y鐤|~3=Cz5{l߿_6l_B6[q_$~-Muuӎ;-kԩ-~}[s='qצ_MM$TFV=Zzz%5rmlb//ZvJKK׿̈́fwu~=$4zg?Sb|jUsK}OO_"^rC W\q6nܨ˗n$v=JKKv$s9.wYgI<ح)!!An[eeeg̘544n]|;vlRcơ|+R_Cuy;t{HhC?}n*tbL+(4o}eUZZ*I;{fΜza kYV7vٲeoO :T7|z)IRUUvcƌ M/]eWZ%I h~lpЊhWyuɔ &S~_AMvjpM}T^'ۭ|uGQrrl6%Iǎks!Ch…7|S6mJtSNNNhihpiܹ_|Qwns7xC;w޳`XG1vkr0+?{C>]3L2i9&*`+ 2,Y%ǫgwy; MɲdIw{8:nw\bb)|GTTTc;x/ˇzH{^{5͜9S\r)M4I}^|Es9:un%Is>s鮻u]kF#FvZG? ھ}~h:s5tPedd4M߿?иqT=ܣ7[o7߬ٳgkذa*,,Ԋ+B7oIرct(ܞp 3̏}n [NGё#Gp84n8;V_~fΜ٫uYfO>ݻUVVr%''kС tkРA*ԩzW//ЁT]]kƌZxFѫup /5z#0Z=vkmk]yFM봞n4mo.)QmN:`Y)Ӧiʲz) i>|xB풳ou꾇u2'4alLӒdɴ,ɴL{ݪ婯W}W6]SG?מ@*** p8dddlĆr.dJjjjj6[GZmkYrpF}0UՕk{gJMДΓє * WUM[?P ?[/OW>_W\)Rzj Fy _! ԟ~ef7UZ\onLdRJ՞j~Yd24aD%;SeI%e'Ȱ3}& @]g\ݲ@~y+/>Wΰlf@-eX!mKӒ {cR37{UvZ%Xir[ ^AB]fR\2b5l01LO|jKvKFӨMwml7$}-izg$4`*=CgS2LC^h"0dK2^6)t䴻]^Oc-Ir؝uuf3 M`NC):\p@6Ci4ƴI |~ Nh~4 9kY iPb**58axj8S0 I,YLSV (,lLl6%3_'4'3%I_%4N T/O{gc6]S%$U}[ b1JKNlLb6%33d%]2RCAiC@h{J-_=4}0}n(ٝv\N *ߡ2 jwuޚ Ir׻U뭓,W#W]djΏrWޥ? 58kdoNd+ Hh/οe^SCJԺuZxnɜ$u23%9EMRYQLIcsS UUcuwU2}PGͼ~R26E& @)RܸT绔Yw78՟a5unWYnlMV|r%9O ֩V^Ԍ4 z[ qY*.&Aޭ IRޙ2Ck_P\mJNH$ոO_}Skܭ) km}*.,]N$Dg[e:m M):K[ĸAA%ҳUʔ!5%B[}8C8˲dYLT hsCAS9PӲ,UVW*`d4 WIMÐ,e up:A544+Q+\apt*&&Fv=!-$4`kJd|>}|Ffer8~LH_? gY^ʙ*dL̠%ru$ Q0QCCCCA,K~_~_G111' wHhxxwc{Κ!alȲzGΒ$|>AitEaɔ$C ɒ|l>ߪz9Έu :qJJJG:Q.aihhPCCp M, 3|1kzg AY9eqeZa8MM^S0ieZA{m>>ҡ09p4MG?P iZnp0 p  -)5ދf)!!Aqqq a^/Lf&_ a튍ULLLdSrv=KӲP/p8B P@  3^SWW'=5Q& pM ǁ  j***Rii5c رCEEE[3hԨQZh>sݻW=Mp\veZt;%Kf-//n?mq\zz[aTVV&45qD{^nnU\\_~YrݺkOGu uM7iڴiPee^&OoQNKb3--M7tfΜlUWW*77WW]uϟ/ԏo}[:묳xt!uh`D:.X;+hѺF;5um5zcӴsDI6Ϸ:@=MӔeY2MSi*^ij W]]?OѷH}O Rlll#Bs_|q >.\ф͛7nO?tHhe޼yz[4MS?VXц& "HjAB1$5! (8"nPyyk) ֚5kT\\,á1cK.т :,ƍUVVR9N 4Hٚ:uϟ }gzN)'ԓO>)Ir\$ɼ^֭[7D_~n5l0͞=[ϗaBSRW0uRS.\DB@qo[ɓ-mٲE[lц \6۩ܹS><O}>n?[j֬YVVүkן2PZ~.]~XYYY:GRЧ>Sͭ[N|)?)LբdZZF-I2 ŰvS#Fh3ځ_3 ? h\FFΝvkҥ*((uWX>Smmmŋu5(99Y`PWCCCh;O|֯_ ~}imƖS*;;[{5h hǎzWUSS#Iںu6lؠYf~A͛G}T=P^xI<_Wl˔+񘦩-[h:xTYY)ARapwV\٢w3{`TH "l5j~w[+))Ѳe˴l2͟?_sOud֭o~nG̴lzn@$4DӵfmذA;w<ʕ+ŋwk< /IJHHUW]'*;;[qqq馛z\磏>H3P_gۏt|8/Ю{oCHLԚ5ktرвcƌinK.Uaa$żt г>+-I:~xNc4hPhHG3L@GrЯ~竴TuuunW||4d1B -3MSJIIP=vUQQH"׫G㪪RCC@HLLԈ#4tPl-CUTTUVIuW0K/IΝaÆueY*..VQQJKKzdhԨQΘ1C&L+檪;HNɓ'wpWVG{EuHLJy[Sk ]uҜ9s4bĈ }nƍڶmmz-66V>OiXv޼y-i„ ڻw$\zUWW_|1sC._\+V +\:tHR"?G}T&Ltd&3$4޽{c4MA!&ͦr/א!CB~***R\\o#~vء}^~_`Piʲ,v!ݮ{*!!A^z222Be|>UTTHw^M817ErmܸQ%%% m6v uVM2E&Mj7<-[hܸqad۶m2;N+==9་v ?n2 iͧzOyꫯW_}wnֆ^ }UWI-Zk˖-, DM2Eҳ~Zzuh4UUU 6h„ ?Sf+--MSLQrrxT[[bUUU)---eY:|phjG6Wmm>8qB^WÕX)ǣz:y򤒒-3hƍ>|xuEaaVZFjQBB,Rmm;#G^ׯWEE.N:pŽZR,XNKII ̞GMbccT".H~10}\E;wǕ#Gh?6M/{iʕ:~~rrr4uT]jhhІ dYV ϗט1cBCv6LD2.Dj}x<7nfϞ9!˲dYL@ Z0 M0AwVVVbOx^{/+''GNSC6{UWWh->>^555Zv,Xг)//kΜ9JKK } 5~xk͚5ݻ?- l=n{mۦ.cȐ!a%x_==,믿.IKNSyA$i?{8z{սW^y2/^ŋ;?&&FfҬYx;Sl6oF󓒒vXƨQcu{dժU$3v}Q͟?? M@;xjkkefϞGөXYuE3fhr8"O?T%%%r:Zhl~A{=u!8p@ƍviO>QMMuW(--ģPLLpBԶm4bĈYu\ÊiH]!MC8$5>^ɝ.V&..N)))JLL'NЁdf̘/vviܸq3f֯_/8 TRR"I9s;ܾnWZZZ^W[np'NiڼyL4۷AyyyBmzWoG@WpE@;֭[UYY.$3! z111zGsfڱc~2224y^%ٳj[eڵKi*==]yyya% Pnn.I:rH`m6m\.uСˮ Μ>}zDGtx< Q[{,W" c?^VVD׭[K.۴i߯L]~Ο7o222~VM0!;q:R+11Qiii2eJy6NVVUXXjIRzz2335iҤ eۧ#GFa(55UYYY4iR *,,$?^ݎ= +??_cƌQnnn*..$3& 9眣"~?~d5qDm߾]7o֘1cMn߾]^W&MRJJJz8j.(??_GUuu,ҠA4tP}lq8qB}yyyma)4C-+..:+5Y~>,ϧ@ ˲TQQ"۷Oyyy:NoZO՞yP__wyG555}T~EE=h֬Y힋zRؾ؎׬YǏǏk޽m>ѮTRRh+y~ AoRtwo'FmEo˞5$4Q/66V]vV\ ?~\'OԖ-[9WU[[+4 %%%v+??_*,,믿.ۭaÆ)''G2 Cھ}*++feeeӗ_~)ݮPyy222t*==]NSSiii.A:ql6OtB{UYYvܩ@ 9sZї111|JKKSNN'ϧ ޽[Zv:Lt}ϧ+V<Í+>>^555:t:$˲ڌuPɚ4izCÈlg]9Dy+qWߛSn_)z?O#!KSNɓC{] o0 {COJHHܹstR=zT۷oeY֮] egg .h#%%E'))Iiii_kW_}~JJJT^^.ͦ ֕{45jԨn _sPE)--- 1chݺuݻ5vv]Wf.Kv]aȲ,9RFҲeTSSN.j{c۶mSiibccuW*==]C6MYYY>|_sokgcۺ;|޲d[/K~Ɏ8vNvӮI-Xڡl:`h$kN8vb;qdI$EI$E^-%K-㹿sHs9naϞ={iQ+M$~y7%L_ {?O3!K#r=""""b&m(b(044!tbqqccchii>qV+V+AXqlٌ;wPVVf$$IBYY0>>Cj*SGբ۷0'2_ߏ}by%%%hnn͛71<<=Ob]Pe9A;ߏA\x/B\aϱ NOLn7oڵkضmRљMMMq]' B3HzTRR5\֭[zU.+?Sj\ (/^իWQYY9tww`0駟N\_H[t:KFS68l2neYFGG|>PVVKN'x###p: {A9tDhPVVJarr28cTzqM|lƾ}vh8p -;JWk#js7LLlK`}""""zDDzzfaϞ=lp8p bǎ _Ѭ(*t}Hf$ccc+j wHz=g IDAT066Y|OT555aGx\@Ao{罹;u NÇ+#î^C%Hx@ LOS(ͩ)a۶mLQ <!@HF'jz+@3Uj%IZ[[5O:Y!2;Ԛj}tެV2bɓhmmEuu5 "+jjjXOP__FR}c>EQikcmv]Eȯf^KgB,^U)]Mwy6|_ -#5r""""zDD!I٬anܼy3hBG&EZ,u^KII ZtnnNyoD@K4###+ n$bt(,,ģ>?~)nsONN&~fS$iWܺu+>S\.444Ĝb7tJG=E$+OW~Jz=>abbo>l۶-^Y,OH%X?}"Q3CE+R=~@rߛRookIy ÄDDIɄ 333pݪ5hDv{Q/xy}2L0Lq3Be G}4kadd|^xᅨf3p8p]ٳ'8c< 999;w 4:3ԬGJ3UjeX`4)ו,pME466$&''177੧J?8/8s4)ym8h(\Y!rssa0055BcMdIX?弞N$-6 wQFmљ3?SV\6 ~!|>;NLLL… 8~x .zgK 799={V<#3zHE۷oc||\xF#~iHӉg1 ,QsNTVVv?<]qy^;w;v@cc#|It: #bi@_:шr:4{mEww7FGG!IߟzY" d2wTz] }z*Ojd7Œ~3]4Tnn.vڅVTTT@x0޽{#{L!>ҽ=[DDIEDDYƍlFUU ߏ% KKKX,8|pazELMM. v<m۶Gl6LNN~(BE:tp\8}4v܉zB$Ȳ ͆޽;Q `˖-x'p?FWWPZZLŶ bddBHK^Çcbb"f---p8q[oa۶mزe ,);>>z{nݻ7)łki@ժ2-뢂VhP-y>]q]t (((?V Պ'xϟǍ7P^^5/))n߾*XVx^~xLMMիBii)f3F#l6>nz(8x FGG'ObϞ=l@__:;;!2ڒ [}ܹ,nkTv|Qcddd@^^n7l*Of=O{S<oz|$ 999ضm8|>_j/Q'HMMADDI$"vYHQ!I~?<<O({e3ǃN|gE@@Yg֭8tК?*pȲSNh4I>,>#LMMڵkFFEii)***WѠ hoon7fffj`>O9'>uuuxGtYYV<#裏bVEGGىnHAzva2㏣)" k:u* mmmصkWeC=J5?cݻw8O>r8zzzOO֌yonɓ0 zhnnƁT)T ###J=W>NZǎK;v .]n'|cyy,cطoߦZ[nE__044txH&YrQ]]P @,+wAp(0 G/k4#c=fxp'yQuyܺu xvz 4 z}5Yt:!2DQNS{ ;<^B,*~Pjvdz^eͭDt8ʅh ((yQ(1I6Ղ=F#Fc+ҾIw= l0L/&?I"qɲtkrAe|5rKs&_hhZ u(G˲e#]\S3ݯ󹼼$Ih4ʹx?,\.׊ϲ`>.--׿5.rss#y,(Vφv7j|oJ~3]CHi6 MsI'ϧ|i4<U?m+D]VW_pՏCK!RDDQ|!2\.~?3*m Nnyyy(i@xdDDDD9Cp9 h4_F? Qa$""""Z\CVX\\"dYt(Di| SSStH̟2]/V$"""E k^{ ($a0PSSŒ=/Dᱽ$"""" ΋BDDD+vp$D|cΝh4>1d~h7h4h4f: Z(^?N9KDDDDDDDDDDDDDY#4hzt:ja4QZZ[x6'OfCkk+vիWK/x]]]8z(JKKݍA`ZI;C6 ^yyy(((@mm-*++n<؈~twwfA$Gpʶ.\_"100APPPRDcddXXX"|>R֭ˋzd4ո#IÖKhyCCCp8X,@kkč7_W`6#ԩSjg d;wP**t\~@|;wĞ={>/j[%[?dYVx~~>j{jj=z0Bss3D}\.f3 k׮4fV+~?޽'l6MMM}6߿GBX2=^CGGСC{ۅܻwX\\$I(((m۰m۶ۮG9'R߂sϡ$>~m,--A$|+_ ǫ ׋, """"Z$" affgΜ"<~?~?A(N[say~~p:ٰS---avv.]V4<|>Woo/pȑ5SN'>#@ebxxGSS8VӘ@OOnrЋ+iqq.KpTQ,,,ŋY~ȑ#k.ƻ\.p8Jzzz㏣!챓T&FS/xO> ٌ5544^L\n>oEF;/ja8ԏ)l6[\y*q>}& +?==A駟F{{;v!2~?0::>:t(bKmo~~/^ؚc޽{k:'Xe{QTT˅~ܿ###|2y5<<}dYj8j%^w&TY͸PSStuuECyyyN 50T2CevףQ8ttƥV{ߏ&#77KKKF__kaii BQQAn޼ ͆/tLj{@$M&z{{ۋ@ 3RhKoo/>8N<ؽ{wNpdY,ػw/V+DQfCWWq}x<| _X]:9r?}}}+nۡߏ@ ʨ#鉈(sءIDDYobb333E= %@~tiGII 4 $ICmm-V+.^qܻwm駟*N8Brl۶ /_Fww7ܹn7ڰgt:H߿S~~ (,,TS.Xnݺ K_rrr Vx111;w`ʶ(ĉEQ)#Ae7߄@wwfi*q#fC/=J㭪Ní[ݍ{ EGRH>3~j-"ZZZ000)ͭɵ@ ;v(SƳo50(/f9<Jwl\jG/} $8~ @?v;>ϡZVɵr7|lȿ7n`jj ǏGQQ4 DQDii)a4qqG*=~?KKKؿ?ݛPgfЉ'xA@yy9n݊WJ'rtsMEcll XZZBNNΊ}wwwߏU *R&"" ө\@h4jAOh4|>Պ*FhZd IDATV ɄVTTTE,>mmm(++`P.t:X,<0Lx<8< hZY4g8,طo,KJJ χ5X,ͅ^W.V zƥV{(x|ٌ;w*+++lV*IQUU2wm zy&P^^thi߾}ac^T$Ӿ344cqq{a0GE+yc=|ȲO?T&j}۾}?44bvX,طoF#n7Wfann pL""",M""zV$!ɓu떲^z ^\ G+aKfy,--x0*yyy)))IWZvjjj]/۶mh֭[ YQQf%"gXSO˘+WpuFm@YNe,,,(R>x`zqEXV. ɲf*jedsnnNyoD ]~LLL`||6 N. >Ollw4#h3{/Q!I^Vtvvbrrv]'@]]]L_ywT9qرlT.liiI|;S)׳I$.5ۣhB۪h׭~Mdoff@r$Hvٳ<#0I3Z~ RKKK0i/T hhhV> A;w088e8,Qvc&e=Q؈r (LNNbnn===(((SO=zQ;ѶZg$DL&]2?>BL&LFGGqvȲ A "?Fs3F}3A__Q]]>ek5 сn444`pp,e9vhц!zra%//%%%(**ٳg1==ie eZ.ÑұC 'fOaaa 9l:ꧫ mmmTVVv~:/~Zᄞqex`~~fGh\sq:O6-~TVq< V}fgg177|ejJNvTo9I]]f3022R @*k&b0](^nSͿڠ1ݛPٚ?j3 x'rׇ7o"''vJx_Fl󹰰Pt-8lCTޫ֦&ttt`hhn8,FnQ$""Qa4Q^^"IFFF/G#2߿Iɞ={T>''[l\~]YkjnB$߿?{Fe]LLLz ' p3+n߾b SL#mݻ "ƭ5lN%Q999Coo/FFF AnJz jhjjR92oߞԺxTG[-Q22n|ڵ<<<̟h72d2'Dyy9u5Y#>C;(hV}Nn&''Q\\fZBXVx<twwcxx8t8<:::bb&"""c&e):u n 2Gx0 n]ْ$rwp8ׇ? 3/^ć~ \.8}4<(h4X\\ɓ'qMLOOrarr1>Ȳݻw'j%%%\ zfttׯ_ד- Nf099 QCh4vӸz*vR0gnܸf`---$n7122sέrod4ոբv)I5_"ZZZ<nYLߩs*qDzc>ܺuko߾PEe+WvYχgݻP:版(s8,e!cddZ(BE|>8NhZ;vlzqVG{{;{)eqOxى>L9~p[СCh/))cp%v|'J~,//Ce߿Se{ o&v;N< ׋f8pn7z}ҝ&ɔG]]\Yq)F455)# ⣏>]Nh4h4x<|>x^bžn݊>tuuahh$)yzxv<ĭ&5LN*X,p@a#dJ>w,^/dG"[-Q22nVǎŋW$Ix<+pLF&|ɓ'gkF!F355˗/+xvبt.JcM466[>lkw:۷Qͦԃ˘҃DDv؁ affNn:fuuuhnnFqq$a޽())~9,,,(SףZV+9LFB<#:_ۋ۷f2F#jjj҂2 xJ8qB;~nnFqT[9&)QEɔGAAyed@Bk ӃQp@$F+jOBY!//Vjs%.K)oQ땋\oPUU^x!Q,tBeNɴuʾE$AGMe%$IFQ޻n$IX,acK%OS;dql|&|7B8~կ&+d;SwdYU֥ɉ:-83f,;۽"%I`-x%[Bve_PP=w\p\$ NNDae-vF| VCh3t,!0WCXm9DxMsGq&m)R>0,^l/B\+L)IR;n&d#*^ jsD${Ոc3{4KF IfXP^^ēl~gCL>Q#jqOĪjq&ڿXq=!s{TF MF C߈uNRͿXKWD;wC%[|K3@ϕ јrHQ!2N'oߎCq:m""""" ""FLAD>3nHLCD#Gp8p\t(**}vLLIDDDDD&d:k}~FVpϭޯ9!̿6 >B/0=ϥ0k~~qߏLJit:vho6,͍wn8N@AAa#}'Lˆv;`yyG-4 '" oxx(h4B@EAVB;=Qt:!~|x@~"'Vmpۆ{^iz>j#8B( ɔҨTlX3 0 6lhA`[FDDDDD1q"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""M"""""""""""""Z$""""""""""""tDD`C """"""","SDDDDDDDDDDDDDDD8BH%[ltDDDDDDDDE3ѦDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDDDDDDDDDDDYDDDDDDDDDDDDDءIDDDyW~|{DDDDDDDDDh2Q<>? FAEEֆ^z Fq#,Z~I|aϞ=8x x }>:;;Q__ɤ~%~_z׿u|/vDDDDDDDDIp&mx,chh/_ƿ￟h|Eww7^}U_]c_%_"nj] Ǔv?m6IDD/KXVKKK|SNannjg0RڈVnGgg'Ο?۷o?IN p"Ԕ>4~ᥗ^{>t@DDDDDDDDqM""pV+˕۷oǓO>~3e?CC hu~mݺmmm_WWtn݊{ wo~?S?{W_} {(~$"Mezzo/$IZQ'?AggwttN??bǎyyyp8+~u\~N¿˿W^KVxǏ{)?ɓ'qqG?l8q׋wy/r} V, IDAT&ּ>N>WՈe7oċ/b Rۭ{gKj E5ΟZZ[[[o`jj UUU+Əc;wn@L|Gy}ٻ*;sNN6o$ ` ɦ RLSۙvnvpNZjъ"( ]e rr2z|<9>^+>%?RRR¦M;sY6oLpp0_n111vѣ=z7/4DDDDDDDDd()""Ǐ9soO4|mW#6ok+z&$$ܹsIMM%>>zN<믿NII ?ϙ?~Kyᇹ+ԩS[ݻ;wo}7}+?HHH^vKh̚5oT3g΀? W^{i+Zۗ ^}U gv'|,ө`ͼ曔[aEDDDDDDDdlQBSDD,no+s  IS1qQ+]l=\^+Vrw]yZ͛Ν;믿## &33ӺM>C:gz֬YCmm-7nk_Zemåv, &p_W_}Cjժ>ӑ??7zz_:>19/}7xsαiӦNiII {g3y[ĬY⥗^b׮];waEDDDDDDD$p@DDƆWsa_x}?u7_|3!7M֮]Mkiiv=X Ϩ(V^ #Gzܹs;%:8kJJJ󤥥`g~s\k<v;O?5DgkڕW^ilOvtʈmILLdɒ%9|l6_W:u*5<@KSS:66ȳ./lꫯ<׎̎/Zsrr.%4ED?}"}|[_UwOO̳LN^ˁio۷o~^{5Kɓ'{]zW\|ӦMC㰣 7i$]z}&CCCovL0l6އ~)i&nvNgI{f͚4aWPPi,Y>Zo02iվ@ך5k5zy6n܈䡇F+8msQDDDDDDDD 9+""˯}zwg0 Ow8tDFFabժU{lܸ۰+V=$mdllleddmCz\.wqկ\yuVzٷo'''rhmmr hwKK dh`?~ӧw~fvr<Q^|K_⥗^_[o巿-^/| =h?ľߕ<Gڈab`ôhhKlT g+ <=!Ŗ-[hmmSSScsߚgM3)m8Zn͛'|BSS#--vŏcJKKgԩʖ-[vc555'xPgk͚59s^{{?<-""""""""%.ᤥ L.!41&& P]WDŽ)WIII<8p\s58$=fΜ9aHzz:{^-**^!!!} _`֭l۶o}[[Ó;3''~-£>ʔ)S:%J'L~nÞV{DGGhv~R[[{ x"##Yf ox뮻0a 3w""""""""zz;Ç9 t}zᇉe$ļy6lcԩwyyo%KM[h'N;vPSSݻo6|eĉ<󤥥;>|x@qO>c9s7xZn({<Y^k֬ԣp(..EDDDDDDD""Ɩ:}Mֱi:\ns ͎K\Lv%16ŚnXyG;MOIIaʕ۷oc8n^{5N8|oG%88{tfۼy3[lrn9;z|[ɓ'%%%=~'m6tfimr<#Lhiry[[Yyu@֭[GQQ/+W$**ʚ3gQQQSO=իqib_?,f&&i`abW修fo{4_xg_ԃ.**7?O8t֭cݺuvhjj]p!/nڵkϹsxWxW:O<5kz]O||<^{-۶m,.]|9+WdӦMٳ={tt:~@PSSڵkYvmm6W韺-b ~_£>Jxx8?O<0:ǯQCBB{yG5 ;p:4~i^xJJJwm`n_+""""""""))"rqFژ4){c=#}NK411itXZa>m ˔{'7o7_b!R322o~Ç~Ν;),, .2O-•W^sn:?p1rss#11 h{{s,[~BZ[[2e 3g䡇",,UV͵kt:YnTUUٳYz5-q/_\BCC ;/<m߮Uퟛgzx|\[]ݭKB#8<^ۅ()"r_ ϑcP~0bĤ:>&=h즍iYD9c);WMd8l""""""""""2b}v^|["$4 #>#ub2b࣪f l==K-<oe8*B %4ED.By1f-MUɹ"laaL̚> /Z-0Tޮi)xݼbx}>; }Q?t()"r:א WQ\/6Fܶ!bm6fʴ6p:f9,}#Kg8J{&""""""""""%4ED.2>Fll l6L^n Kf: 9k #"!qܤ안\l6`ׇaaômdfd&Kh:vlAeu٨\zXPDD.`voҳAcK-Mz]:ClKb'3{as6'Z |^k{ M5S""{9( Ap =A4V0lj#wf[oMQa @SK F0]OpIS )JZ؝""YuLSc+ڶ$dfLT YdĹc6qa{`E+ܯ $` .EJ MPLD_ǟ–=>aO:>OƷ 8"";i1/lrb1[ɘk?' - |V؄8RR"iq51.l|s6EDDDDDDDDDDF""q<ACS=A+i&5u5x /߁[Rf|^kӿ dggS[[Kxx8YYY,^xD;֮] ׿}."""""ґ磵ǃVtl6p:p8Ȑ()"rkOdn^/cJR cxHǟ?\󰵜i_t3%1 k>-&fZ[[Aixx<477Bxx""rQBSD"zinnwmL2[&Цn|>L:- Lp7,w ---8ۏBIKK㮻ޠ""""""c墱1aV""" t8"""E4M뙘^yM|Ӏ ӈ'58:l65,Ԉyqy1L#8(x9iG|8d\ڿ*2AxxxC%4ED.rAAAa=#x^ :?pf:=[ڞa7naaa#---\\.2lv \l6PBBB:%$ۓ=t8V/M4^m#((J|fVөgjȘE=xaӦM-[eO>dڵ̚5ŋo> ijj"**ɓ'l2BBBc޽BLL ,^[9UUUd^c={67xcap 44$/^LBB°ʥ},Ybocc#QQQL0e˖1nܸL\k׮%--;>'O@bb"w߰ADDDDDO=3ߚ t"""}pp%!223fp)3fXvرcJ\\ TVVr?>vOhh(UUUTVVRXXȚ5k:o8yw)//'22d%//[namرc>}bccILL'NǗnI͡U[[|@vv6AAA8NBBB 磵5aEp1M MRRRHII!88Gr7YYY,Y`-a***OXd .zc >m(//cܹgϞeÆ l۶^{QTff&K..7rY׿rm ;j<wuA,"""""#GL)IM?PDDDƈkJfDDD|rbbbXdIeYt)ΝK gϞ%??NICTϟOkk+u]שdhh(7p}իd&o trRN Mh6\lbb"nuuu~= &PQQ1qqq8;N\zHy@ )-4䬈\:ki~^uu5[ne֭70uvq빢"""""27V"""lz:'>>t.\j%"""""""""!'""ҋF8޷'5SSDDz\tn7eee֏ tHu]ǏnI~lڴ)X\t<` tHŊ+%5 ?""҉""""""""""Jj@()H$$ IDAT""""""""""G M (%5ED/A@DDDDDDDDD.>?77|ǻ˧~ʹs bԩ\z}͛7g***(//tMrr2so&!!{su[ / /@ppp$bΝٳRhjj"99'rUWq7cWHI{R;>< rF'""&R]]iځ8pw>v{=w];}vijjtRNKKKiEEEk.y~0~!mGDCΊȈ㏻%3;ڹs'~a-ܩd\\lNÖvp8p8'O1Unn.?OGϊHW)"""""""""#.!!nLxwϷn޽{ihh?}DEE!''VkEk._go1 ΝKrr2 , 99h9rӟ޽K\g+VG?:Hxx8]w]`Q_DGG[o/SSS@ii)---YYm6̄ޖ Cfل 1cӧOg>UBs';&5}>?ϔhYQ'N eŝ>;{lIIIk4yg裏`{0w\EEE}KzhH@t]9˖-_vpi~ӟŋ馛1c_1 paN>MEE555n+02rlҩw&7DD$@.--o򗿤ӴR6l yg]__s=`ܸqydeeLXX?}y%3rm02 %4EDDDDDDDDdL7nz+z+iRXXȦM_b'4Miׯk׮eʔ) ^EL`e6t|I222ϻ}MMM,..^1a„a19:*%3ED7)"""2ƙInn.`ۉ#++@'rkmm7`Ŋþ)"}MRRr˨//r***_dɒ%̝;1 ;wrYkީSvZkwyK2e뉊%%%qi^//"=ƍ^{XgΜa~S2SDD\ رc4MmF~~>?(y 1 *bbbp:b&UUUzK\t~?455QUUEHHH@XٳCq!Pn7atwŊ1sLN< @ee%_W^{"ӂ صkϦMp:ŚA^^#s\ݒwuwuWy}Y"##;}mwq ,4iV23""e˖<@pp0 jkkٽ{_PM PXX}붺͛7건3JP]ZGk;2=z5kAAAIbb"#(1Mihh@%rAKDdl{9x w裂jjjj')) nͶ4ix9z(%%%DFF2eív;?Oؼy3[lCjj*sݻwcfJMM??y0uT4Rd )??Mll, ,࣏>ZbbbF-4Y~=_}g\hۑ0 ***8q5 fn@̙39qǏoz @:DD7znݺ~:=$$Kt!mϮ|'nj*VZH>>ב??闒۷wKf:~q702&` t""gL6 N'nZ`䟻6ZۑrY;444H-\9s^"0/ /()"˰""rdffJjj*AElԥ.,,"""EG痈H`))""QBSDD.8|>f1}tp"""""""җ~$%%1~x~ӟ*)""}X:""rA1MSN0}t9iiiz9}4-=={&q:1~x222HHH7q\۷{nʕ+zڝ={"hllEll,g&**Ǹ7RSSٳ7o^;u}!!!^zЗ}͊+HHH ;;b!553gZQ^^NKK q\308ucوe̚5a;ƙHNNgΜ4f„ ̞=my{Gl޼K| Mtn瓟OMM ǪciiiL8_hCMM 4>cΜ9ӧvJdd$&M"==!xP |r)))[n:[;X4M"""4i3fرc:u+V0a„^q}éܯ'ORTTD}}=aɓ{ܶ9s0w\\ukhhɓ؈ 66S2u7ùn%˖-cӦMCDD.+qESVVFMM 6l0RSS),,$''g JlBcc#n00 ͆nܹswJ0lollzߞjiiޣZw*Μ9Cnn.K..@>oUUUjmm0C_b̈́Ѐbݯl_Ӿsϯq r,ֻ'uV VZ |V:P^^_x<|>l6U>,[l@t5'"""r PN"\P1 NߐlL:BpZ,[xN'---466R^^ދ=^{-SL&..T""" vSUUʼn'aǎ?[ongZЀa̘1"##ijj"''|X~=MMML8TlsajjjO?~|^͛7S^^NTT˖-#..4={m۶q=sGff&DGGBAANٳܹniHe

'4KKKns뭷e2M0HKK@a:x$..v;wqv`6 42e iiilذzrrr 7 PaNq88 554)((k. im;%%dzazqqJKK;dܸqVoƤ$RRRx뭷(--ĉ\qy]wY1`9BNNK,!22rH0AAAu*먨^ѣG^}wqqqqVoNΝ;ĉL>DŽb̝;תa p9}aΝwIbb"AAAvL1}n=pPϗ> :trBCCۉqL40;68Q/~p۝l_վF9@o^/b̚5B˩v;> ++{waFJJ |g;vJbfY? YDDDƆ"L>0YJl%p:l6kǠ |&V$$$ĺDhh(VeeeCpd9$%%Dhh(NZ_DDs̱KNN&""iHH$''c&ϟn1  mmnt:ILLd̙|>3,,SMACUUՠ`x^ߏc$''j_pp0\uUv9~x[hQQQֱj?1zسg^s2qDBCC C]nfh7CÇc&'%%S9 ,tӵ\uDDDDD.DJh#;;4n駥HZoRR4ٸq#Gzþ n'&&h-PF{'cOZ<aѵjkkijj`=nf =k(qXCyƌz.nܖ8Obb"#g:.^_ |f(z`_c0߅_1vg$W/5VZ~2t2sL;j|{}fjO^%$$Z>̘1h iY \. :{v`O̼DGGs׳sN*++ٳg$,,d&MDZZڰzLTZZ穩>Ϻ1fư1U]>_yov7>[[[`x<=N] l6 κ:^o;j=4Mv;Pn]o H@ϏjpW/#iρ:``h]/BbPVVf%:ڜ5kVIAW}f}rhjjP'""""2V]H M+""r˳n|>jkk]&77e˖ vvLRRR(,,2ʨ&77Xzsسgx^l65Yhh{(w|[]op7nܐ5XGB{=Q2P ߀Pn󬣞ʩco~;mRҟ>z8Z˱Pͮ]/N8"""R__Oaa!ǎ?o=jjjزe L2/hk6ƞ={8~߆j,q˗w't(3(::h{F[sss70{?̟[###2ljjg |Y0G(Xol_.rH_5}G̚5"rssq8T{egg3^-,,`ĉ~4zqB̙3u9՛/c<خ0o<`~A`e,h=1Zzz:455qYƏOaa!N.ۺ^ד=_/'#f=X@DD7^%88~珌OrNXX.4g٬g@۾l6=\i[/l> xY{ӽ.ߓC X7;G=(7nSLֳںܹs8.\8[ccc!3F | yֱ8pzT\\<&O w hGrs$5Xcz99Nf̘idggOkk+ӦMzbwMn==B9~2FriQS""2ɩS2eJzc٘:u*v>9rR|x^***صkz&&&m7ڿxg?m۶QVV墱gϲuVWpppq. AKK |455Q__O~~>۶m<[b۹ ryf>3jkkgjáCFdpv-[FPPlܸÇSQQAKK eee޽O>W\sÆkppUWmye1ܿ^C]nfX=v;K.ptG\.jkk9r۷oz UX(\?GH_C#ˁZVV6|9鳮^{8q:\.eee|glٲMFFiiiz|?y_7-ʬa233ciڴiرvvĉ{ 8{,Nݎn4M|>8Nnd6l@mm-7n$44̙3YhdddOvv6gΜpXx<vܿm7.\Ⱦ}())?bz:Dp!bcc[صk8pǏDPPn*3an8xرZkC0hmmpB,X0"eG=OKKcҥ߿rn݊$88ǃv_>Soz,))oO?S=r8ЗJ:W7ZbE~7A7hn2i ϑ6Pz9P0i$Μ9!>>}w{U^^Ν;ۯE.L+i5={zy cƌVO 9aEh4C"""1FJ;;cPNNa 4| IDATj 8$''syN>{ٕŸq8s 477r&""tfΜIBBB7&Nwa&,, }n`„ |>QQQ$%%1{lN'ׯsV7o=zj,ON\\\n9fcҤI~r9ꨯpFBB$$$})wL6?NEE555ɓ5kɄH AAA̝;T;FMM 477Nll,L6/ |nÇ9wMMM8N5k'OfݺuJ~_ر7hn2i ϑ6Pz9PvfϞ͙3g|̜9ײg{b v;NBBBHJJ"33妛nz^z;wvt,//GRh755՛7oFV۸`^zX399sssmjF;2:3V\ʫT*Q*\.o'mc/..FV_gVDD\ˊZw܉0==KG7jzyDuXӮv]inVSZGTxn߾_WcǎiuZ]]jzymeeϡ4~;=ϗ~Nu9N~~꿗tE//\mZV uUs}󞘘?cbii)֢\.ǖ-[bvv6uE?FGRA7޽[Cϟr333199q0زeQ}Ub=?O>mY߳EC侬6&Z-jha(@zL ;w\?ݍ_:}:&@#Ch˹s""b޽2/]("kED;r̡I^{-c~~>۶m|r+q8rH<3* /fgg\.Ԥ-*34(YȠc4]o˗wމ(K/--#<O?tz~_֥XYYt[nYƙleH_җ̙3quV,//ǖ-[b޽˿#XDر#fggcee%޽kkkQ}-cغu 5n,1Xsطo_ر#~~!jTՍ_+@|611#/i.=7nfGJTiSrr'eqJ\m:a 41"LzZDJR'-Z N~h<-"Z^\6MC;/a8M{\-"R\|ߓ襕^T*=V8V-о=S|zåVq~O'""j\zu`^Ql$"_RdZgcf-"JDϩSΝݻwcnc?a?>fff+_JLNzΝ;_V}O$mbϩ)K868yj|\쿬&C>6a?jgoff&v۷oT`d4dwyH,WӪ=LY\7.n'l W`|^xV;4+Y^ H ׵q"sj۸۴_x's[_W^ӧOǁ~ךܹs[ocuu5cǎC?Owƙ3g… qXZZƧ?طo_9fַqDtrASύkYD\fx>iWcYV"o7?;|e``ݼy3~ŋcuu5*Jj~z\t)^?.\qڵ8{l/})ݻ瓟d?joFPٳgRÇ7߾};_[n͜J{曱kkkQբ\.G\VqرϧڵkGjTըVQ*\.{[lh0P.^g3עҲ&"3VniEXE4LVhq1kW"bb~~ܹr[yt~z?ٸuV[oe_[[+W\| _={DVk׮ū.\GnT6ő#Gbaa!N>h9s&*J:tPX_sEV'|28;v숕yf?><ؕ󩿖/R\v-_b޽155Gŕ+W fߪgiLL =٩Nn@s-UUg˪lL~bFĖ|;}7ukŕ+Wbzz:~7~#Q.CLO:~ڵ+yضm[LLLDDāСC77Og?r9; qʕqFٳ羱kZ?'x">}t,,,D\gy&߿q^Z-*J<1;;ەxڵkQ.cnnn#jQVc~~>lْ<׾I|lLeRjhơOw^e˖ؾ}}!i糴\NNNTJf'''cfff# ~;u|_?̮, 6#c_ `N.vY9ϱZC7+FDG_|A,//GDg> oߎ#GD`|TO|qMMM??~O>j5}ѦL|rܼy3""=9p@LLLDV_|1N:7nx`,,,)1ײf?ΧF°.9,q[_HΦK.ٿq%h m+q'"f=of3c}wX,o^76? WVkuu}Oaz WTZLWf fggcvv6m;wƑ#GwߍӧOoϟ۷oǁU#PxСC/^˗/˗ƍq̙ؽ{w|_{8#SNX6{ͺ^,7+檇ie"OVboܞrf9~??k_,˟+~j377\ZZJ i\_b۷irǎw}7Μ9O?tLLL~jOhܱcGDDTո}Vq>SSSgϞؾ}{0dܟ4jҦa4ۭYd%d'mddf=Lꕚ[{=XXXÇ/<6ݞ={6׫)#".]ۚ?۷o۷oDž SSSq5.3O>d~:R[nHbwxիqt?xɕ3#[Ug65>Okj[EɻSCf-_ʃyo"۬Eㇳ؞VRݬ^xvqq{۷o#GDDī׮]Kmwvx㍸tR[󘚚|3Q;J<#133Sxݻwoj,//׭I*133ZR.]'NZW 7c=X2YH]̤fyMv2 7۰!׍ fc$zުMRʶǍՙh=^qVh%0L8qkǏ_ڹslTRX)J_ijJ˅R\T{ƻj5.^R)rLLLRꫯFT-[ѣG7-Jq8|TոtRlLNNF\X\\wy'ۗ~[oGݻw駟8Vŋ͛k׮xW.c׮]qjqҥ阜ܘә3gb۶mϵkΝ;Q?DTX\\'OR7T*K/ŕ+W1==v혘(_k4)w0ʪgϞ?_WĉKU,GH*+fa̼bfVu9KXv6~%o^@b2"^|[/ c?sssOLL|\.j =틧~:^y啸uV|8{クqF޽;mԧ⩧SNŵk__brr2lwލje˖xǻr>^?>.]SSSjQVcyy9&''_bLN~ j5n޼Z-?lRiZ^T*nݺuٳ?w??/V*zUVeVlr9HKrt`iTi&ML۞lqrJrCW9ѶDmrX7'=Ѱ_h,\U'Tf&q.Yf7kvim.QۍzT*4WT[XeYoS8frzэ`UP'p'Y :Ȇa0JyVϪL˳lVTgnQ y.l.٦i֕3%մ_fͥHg;Faի VL aVlI:3ϲiϳWHThZx4FWi6 5exYf|vNY7ۨ]M oܟ*6 2 3c4 [YՙhD1zAРHE4󆚥&m5fsk \\Ӫ4#}ĢafqP2oYd[}E4Ԡ/;QJ͂ʴ1ҖM;fֶ㦍P$̳krɴyM;k^,5l{}ET8:QVUVbHn˚GB Ydiac%f}[IYd٢턙M4;*ͬ}EymU)*Dklv+LS}ZmYF.PQ }^fHH}#"} "7kݐa0;sQJU^ڴ'wM7<6k7lu~ͶWȅ J3k{ Ǵɶ70Mۖ741t!W e_[UemK͚g ~o =46J3k@3yf}ڶSlNnWhUN%dPaf0d!xݨ,2NPq[ MhUcZZHY0qdnhvwA 5_c M Zܟ3dihQ<}3)`BA5Yl6~;1 <˶{]IDATfѰhIhy5WhF FnUXvvr~yv¾v~tٸNjUR6W}v繁ݸ\k0NU؋1̳=F>T ͈ބijڞXfpjj6m>fq 6J3M'KNnUgvjSlيTi潟f־U雷}6EE@:NAQ?4lV_q-) bqрq^9peٺaXz6ov5[k&Qt\`|eޱکl47gn"`*,2vrg?-[1XKifv",jn|q4V!8Pl֦[y<U4p3F;v:U"jӍvC7[vcyڼc 3L<^ߗf]'ĸ^0 z ΡFn@sY*fm "1^'}H A~aEYK|oyu2f9lqF1lg{; 0nӮKvj,!TmvPͺrm HmhQ 5/%digٴEu#faԺA 5o7v0#xݸe薱3#u~HcN_N\v3f'0@-%6+lէKvkN4afp)iXBvۍkf֍ct2f2; ?4&=AZ+,[ Q8F8Z 1 OzDA5vkνȣ!f8&iUz]5Lӵt[-cx LReP3f̻ FSujOaf 4P3m~o@fj5f/ 33L{n3C^G?^-]+d65`<%oҠI(c>,Q0,Z-z;Wa׏j3ޗی{q#Xf ,fTC\@r)VL̜W5eo]/@zܫ0U{ jk H܍[u0~O`;P߯09L@3  J79 %aX5y$ ԰nP5(J¦rPװѰr2AP&u 4^^mo2ԄB7 189 -AWo :(jPCAp <74܆P59iadmazihpp:WkX_a705yAU> lQGPFs3(@߸r0N%HBXu: s`s 2lyzK9e{]! $N71`lyd)^O9` +!|>10ꄘ#L5~`` 0ǘ0$oL6uUt5"m(zChIO$GJ s@? `,~[kIENDB`extension-manager-0.3.0/data/screenshot-combined-dark.png000066400000000000000000007743531421751161400234540ustar00rootroot00000000000000PNG  IHDR3 pHYsodtEXtSoftwarewww.inkscape.org< IDATxytwf !- Ar)ZڋJ-zjm]Pֽu9Vu +-,PUA,$ 3ٷL|L20׼ݑaJjL"| wXcd/a9b!Hш)0IP<'8@75x\G&~ n.17@DwtW `һg `)&??lz!v g1lއp@zNw0@Wή|}2C|7&'kݖ$@dH>M\ @e*C>>;LbgV.>*[S o1`]Mrm<N\yLq=);fVʕq@rX=. l'#Xy_ y nUa9@K|5dh$1bH<RԤ?SL4Ɗ/!Ts Je? h0l?v 1$sp\M'3 ա '&-!D<@x&OG PЉ*Ȑu`9RiB?3L#101l=^ 1`%j 5h(_>9Ϊ${M CO6ll_+29nE;| 5h0,- Q!ٗT 5h1]6 1H]E+܄|&C$8H%@2d2Ȑ̹Ss 2v\4fL@G& 1$s}7 Ym)PCNhLJAx[J$z" Q$*H4kt Ytg2XU!ѠC;#B:@2I`dHW!s+@&#݇tVlHG@&oeH&O ]!xy u9骰OdNd*t@@ƤdH5Od Th{T 0 2d*ĐVpji]*th7idW&2#ȐJ5hǦ`܏D*x9pR҈ 2ij>td;D%*t">޶ TMRC t d7pJ{x)PB2- Jh<'3qd:+L Dk i]atr!@@ҝ'3um)! C*!dR$O:u.xbMǪPOtJ0n;N0[^"AxC \7U@וl!`A"Uh$;N:g>dwto!Zh]"MG D D 5HG!0A& ty-̐k% $D;.Flű'=.0HJC"Dn&ʐ Cm% 1D;Oǐ T 5$v"S3@S CEWkjx[Cij_O4l{LbUcV_<.-Swzm4i'}C o"T V .ĹX! C$d 1t<@h)|0!PC"Ub ae:2$dU!6B \6w;t9PCE_ %a: %dCCC""-/…| %R!@&"a٪0C O!ܲ-̶HXaxn#V8 p9R3`{Jm9@aCW3CUL#p=̶p+a9TZ!trL<h:daϗɪ  -"BC 9.t}@ 3XLGUD 'dpH*VGKcG|;EmmmHB/\z+tD$4\'А  fjUU_"l!ۣH5j7*++hmmUKK\.W:áb9NIkݺuwbh (Dj- )jBvV+))+Z@R$[]]-UUUsv{VccZZZQ[[\.GAYYٴ , 7?xh7 I;OHu\ #X )b's¬K*C%0wdԤ Ke UXX8WG $WnB fmxL!@!yr*CCPC/QF}[ %.7PPP(--dϞ=[9$R[Xjuk* |yqH&i}C6lKÇY$ump(x$ew*؁DŽ'8 fHd%_0B<DŽVn9;%cǎ}v1d_ccn JƎ<<"u[ f-ouX25]dw&=gV CvI=z/IMMM nt@C{v@)˥vv[=$ԣGc|MM[K޹SyS޹̙xBہ0" wp:g"nTfH׻]NE?ު p!_NI,IjkkKh.v]=zP^TRR @W^ѣvMTg6n,Z5( ou0C.KE.ZHe|} T\\΋tl@!]sGl&ɨ9KV%> fpsGFU՜#[9 sByv,MX%l6@v]v]aKi4Mnn=|}Hu/G M$>Vq@D4 ɞ33p6IF?D d7O'6;yb0VbkJ?ݶ##eLACFlr:r:1Ê`/PTT$֡U9lt{%eM[C T]'dL&+B@^!̐x-Eop"R`!\H'"Uk.^{lCαz bN /[SQگP{9Ի̮Bۼm5KڴngVomQKn0 o6y,Gv7l6JJJT89jnnΉPC9p9hm( VH0C%HDuID2]#'?`zMJ1TSD=MIJU:4$?>lդ>j긊w0$[2F\_lK]C)))QIIRTTTf577gIUd$AHfH&xVrOTee٪>&z(Tc 1eگ L^KBO}P7(ɐsܫW)] p,f;t())Qaar2~ |*-(x$v V( Vxl&>< 2x G - oUd4_V^_CtB'&۠IirTEEEV >Cr:s1pn$dfRR |?VBHD7"|@^WdA4e:G)׳?jnjur㽶izdcozlƮ+..Vyye///WqqU6/܊:) |3paxOfl' +ydUcѕ-gPn9< St>6dNqqJKKJKK 4g$DeP~H-\/p/ҁC#)yH3á:iС0`$Iڵk֯_˗kÆ  kD`4=izͬ/C%[ $C2mt\6A8Μ2񨵵552r[ιx#gtⓎ^8*,,Ԍ34k,3>5sL8p@K/,fLFEÈ-JiU|f֕ԯ_4`OTl\HᰴD$rr\V#WJ Rwn3tZ@*,,Ԝ9sxb-^XsQAAFr{1]ve K]v?OZ'6AoS颓{['r¨9KFV IUE<sIHAi>z#EkE1Bl!˅_"I"᪫E]VCVzheJJJBZYfkMٲ2M2ENSk֬I}dz:dҷ@ +Ԥ%zForː!Q6@'[=4$DNg]ټmoo5|ضmlշ,*U"fYx<.;묳:;s4w\ FP-R~$I}fϞl/~$ۭnISN]2MS~֮]+Iw-0o֬Y}M6hlU#Fl%̎uGלQeº*]g}&=\ȳsC>O<Ĭ^/U6-/%%%:|<O3 f5 Iݻw\g?9HI|;-u 2駟Vaa.Z* ˪Uzj7NW4 IDAT{{?|:uOm7p8㌰Z[[w^۷O7o… cǎ]t3j:s/ 1Gg 5V 5:st-ס7mRt)G . >%%%jllzV#<IY=}SO+..… 矏_~1c,X`#ݻWaG:tyiĈ}ɲUOz`z$ӣӪQ?G[)Ca6`<aOz9+`ŋ%yùsʕ+_[[믿^$~I]t%c[w̐K(?Gnք Ozk };L]o̙A ҥIMMMjllT}}~mxOÇ$˨,zq SE%V,#JTT IwUR"lr8Rj>}L_"կ~U{?Ȑ Ñ&q@2C`:|]Z~~t9 ԳOT>|Xf ^pk7x#yo֒%Ktwח=+++5bmذ!CVZJG}u{CHPpUq5eV(njFuWdnFm:rI`č7(˥%K7~xqAkllLjmmMflٖoMc!6@ZhF~:4m4 4H.K}^{5QUZZo~3zWРI&iܹq]w鮻$iܸqAۋuiiɪրTVV>L;vЛoW^yɸ r8={Nc=VNS۷oז-[OkӦMQٳ.r)0`Z[[}vKd>SWW[oujPQQ!I:p@ijjҒ%KtgM81+aI*)9iVmݺ5~<~2U__ӧ3u^Z=Pc'NiӦiذaPkkvڥUViaZ}?~tGQ޽W\q>}N^xᅠ3Ԅ ԧOUUUrڽ{>-^y%߁3fhҤI8pN>S}m۶}<1*jB#G~UG~)ðI)g 39*0͙3ǿlu-H?p'nT駟Nyf4 û0F串2vm7n?^ǏɓXcƌܹsUZZtLԸq[o!1q;&`}jjjTSSSO=Ug_]v%uX?x}W~Ĉ1bO?z?f̘NZT[[ڌ:th{iD Uf9rdRcMԱS_z%:t(q#Fе^QFwUW]ɓ'/((?^_jA,Y$(P[[)p1hA&L_~9hѣ_lQt=tTii5fXSaUS<6tP :TSNճ>\$z U) ztqoaT^-4 ݞ .~n[oP{{nNA'xB ,Hک= !Lca1}O;4s9*4_<@ Ckk oݻW7o$) -_В۷od5|p?_sD 8PO<-$vv]zںu^{?x=VEo\nPH2Nf:'?޽{%I;vl+VC\v|]\\zH}z>}{u]rD "33U$o߾뮻:M N?hܹr:LR\.n:ݮ~OoF}J32>AM+ dVfͧrS:_$yZZNO<'|2@![a\+XAYg-ZHׯWYY?|^zi0äIԣG#? 2lܸQO=5j(}2dHZnjt}шI={jQ)+KN8!|+6m/^wSSS;8]ֿ/ 2l۶M׮]tqiׯ$0 ]s5+r$y1ЅmM`UpaZlK7.~'//nW^4tР[>W_}}KKx-]Tn['p~_?˻{IeHG}rnvzĭwfG53'5kdz'xbVtUB+4JWAJ3,V@da~f_|_^h^y\uuJKK'݂i 䭮gٳ'-:۹s֯_?P<f0a&N_~G*/;կ~_J 21c߼y'9׬Y^x߫ȖJp ֟o?9c4c <߰a.]7V+{&MT`ҥA$jkkov CuuuߡJ{sla? ynݻ_"I'x駃ƽvZ͛7Oz$o5;N7n HOIU$_¼$X;B$[Ad  4JgAʛ0 P4e'xO׃>ϻfŋ5gΜ>ٰcǎ ҥK}A˻v6 CYg埨̖w}Wmmm'|rrh VY1bDж>}С5/R~A_ηN|_%ynK^3]_-\|?|H ?lA&NT}g-7$*]i|co&}9?܂es*g̐|i+Rݫ\6MW_}u[UU.HGsMy&VhzK]v 6lnIg}Kj… l?~կjذaׯ*++t:c" ׿51z>cmذ!=CڵK;Nq>_|z^z *++%I-B$ק8?*ao߾:3|Gͦ3<3s3} m"Ah /Rk׮ +Vvqnv֮]Ybf 2'zZj^N㯮Z~ꩧ޿@!@ܭyUTpefUf0CHzWSL7D1 C]w^}մ\/\eMa E/rZ >sNN"}g˖-[tmu;ꨣ4{l͞=[~ӟ$=q;4 +[/y@&[֯_ÇO:餠ґ^zu :~/>cƌ ZF4M544'TKK.rpE3ᄆBݻWn_a&ҥK*uQݫ-[/I*//ȑ#nݺ:3gz1cf̘կ~UTTsСHjR*^1Ra'fVIe~1jk׉'hrR SNՍ7d |7 CW_}\.-Z5HF~k\IeCwy7nBVZiӦi3fL ³>[7o^R9r~_o466׿/׫9m 't"G}Ou߿?h[߾}#N~#7,_\3g/z꩚7o^'}U8BEPRR)S tϴ^{-(IԾ}O?~eeeA;=-[&{mmᐕ+W4MرCÄ ˗=5k4i$?^GVyyy>gqOHLxǂ\e˖yȖaI>`sIay=qind;wuU!۝'t Oǿ6}w…9o466_ԋ/(04d{:L6-j!ڧ.BA."m۶-=öm4uTҥK>O> Z#̐6lؠ'ŝN^xᅰ|ͺ曣oʔ) ߯?0'Y.j"0 '60tРpԿ/ZUUU\{ҥ0ĉC~aOSS-ZE0 {7s=׿ϤIaO>D&Mo3MSV {n@픪FZ=mݢ CeM[W4~f@?QN;4|A2MS/ZSD@RumTF@T}_+"c鷿mZϛMij_m޼ٿ>SAJs1.K;vHi m_dI_uB\rI׿9YijY?F\>?Nsá /0h]Z7Nڪk׆ݯ:(o 4}v=AcۡYfEHE7![|Z@0Bj~0{(.AIZhT+an t "Kc@֬YsO릛nҥKzj}gjjjfiBmZ}Zdnݪ={mwְa$y'CPcc1zAOtھ~z:묳$y?s+V={Ԕ)S'>gP)駟{mٲEC ь3bd />;hB{޽3gԳgO͟?_ַm_PP XfҁԧO=$544_}(**RQQnB_r%k^Z7nGoOk֭۷oi#"ŲetW0 UTT[Ljmm}vܹS_79]yZr֬YݻwY6M'NG qF-^X~$Tӯk{ji~G?~>쳔"]6J!u !ywG$!%;V RuR }% >-iA-' rӅ Ԛ! l;vƎ_"٩}iݺu5j$o߾Z`:r}ڹs$'O=Tַt窭MN3nڴ_0 -X@5\u_R'NTee$z/e٣bCMH`vkܹ:(yqp\zGtwȭ߯o]۶mƍ5|px≝>?f?ԁTSSK}c~d {,͛S82MS>~a>}4gΜNx㍠WVTVV;iڻwUVV&Iz 3@/I͟K%}b 3djisne,Q-mv$Cj+a!",Y{~m#^{5/O9rxR:{"̐k…ӧG?QJ}Ms݄ :+.s=iwܡrIĉK2eƏ0 СCz}Qq6MzҔ)Snݺ< /P7xL4OK)"7Խޫn!lÇ롇Ҝ9sd#doz*5B߾}F<֬YÇ묳f8%y\x:;=x'rߑ8gyF/RZηuVtM*ZZz| ,,]4(`fY 3Dj1QWWi]` _~SŌC+ԕW^Q`EI7n\yW6a2ez?mz ߗa[ޱ{vo lGmI>UkmmM:.7|3j!^r fȜ\ 8~X?fW_m2kѸq4e 2DUUUݻ{nmڴI>l>f̘.LcƌѠA_j֭jjjxH7ug裏VAA>;ӟbM2%~.]uU9r6mڤĵ]5gMDÆ ӓ |IUWWkԩu袋ƍqiڵo*̜93l_O?{pDccvڥ]v^}մvZ]z饚9s&Ljڼyx㍸_l MNmٲEv Pk1!Ivƌ &cUeez꥖ٳG۶m /ЩOCCnv?^ӦMӰa߯?\k֬ѪU2@ <;|0:Gpƺϵi 9Ě 6n>as Ⴠ*--z R!WBK@x:XnG:e[í n -`]m{MR$۴iӖI7WX6mwzףOUUUe0 wyKRiz?Af~@}VzlU#Fx)2 IDATdq$KǥG7ꑆu;; 6fwrWYYYتRjllȹ}xOt-oz[|C#}MLJi3ʶX&iRd@1MS=~ӟ!444;{ `n}!W70 wvif-Z.m6Y=,ĩ9SX6˷H/ܽ{wZ /_wyG3f̙3UYYqK/[S<;ʨ9+73t~3eL訷h+k#m^XuѰɳ<;DU)*%dQssJJJJTx"hC ̐J{Gv[ w=ܓsȞv-X@5bM8Q#GTuueU__kŊM%3Maf`v\ߨ{^ܩ۾9Jyq67ʰ0l2 <-zXHPss p4  G-[3<3d5 6hÆ V.<[^m9V% _ELlvH6/۩E*KG%{5NvGG<|FUTTX= Y=q/Z= o7 _ev6xi_uQ>xisИ'S~ҡCF'z.0Cxk r'[F#Ao jtOKf}ZW>fs9~n3=\"GWG6t9[ID"HDD2x3>otۧaZxц㔅1O>_E"'/ɲ(o"[WUAa׷~(++˫?6mشiS KJaoDGn#Ѣs|ud2/#r1$#Y[ n(OSo|^{iV&Z}g,xD="V-d;v6m+VDӦMiӦuz5kĚ5u3I06M_!(/<8s7u!X0C$DD",<԰y dnD$vi*<Hl 1/?&Fr_4dؓڵkcڵ 4 DnnnF"^H&L&,bƍqF2B:iӦhРAjhӦM.(o}`w\{lDӢ-@CD"" 9_ؐH~U> C [_y5ˢQlUNŏd3oYa0O@mܸQvA7nt \:;ʖΎ"bH>0-:G4k9MD4jۨ $а!D"͏H|hHob. [Vh(4.XHHKyAvSaiӦ.!wl#-_eU+/1 aTYYYlذ!6lRmذ!2y`H$ )l$Z *6l&@[z0BV^v[[RV+t)?l,JKK3]R2ԃD"Qc ?PgL<42bݺuM6t)@%֬Y֭t{[PfެY&ˣ ӥ)--dȰj;f^[.6nѰaL{ 6ի=Z +{2a]YYY\2rssQFѠAPdlڴ)6nׯb + 31eeef͚L@t[f0U"da 3YE* @Vf0U2]}JvN˖-3]u @V2bΜ9Q\\JvNQQQKY* @Vf0U"da 3YE* @VfJ^ (++d2D"rss#'{a2nӦMQ^^Ͷd26msY `OS*//dh߾}EDDqqq|'[[`*++σ mڴD"D"ڴi۷ߦ {a2*LFDlYakmnAH$RO* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vt-'''>0`@tAqƘ={vl92VXQpdڠAbԩ1~z ؚ0VTTGqDt=/GQQQF#Hիcձp?ӧ;eee.vжm~zh}D?^ҨQ:th.ba aj$777ַ㎋J6l0Zl۷:jk믿?xL81֭[WCڶm_}OWtҥKVۮm۶QXX%%%P=aR֣G~ݺu۩q4i}}̙3F*iԨQu] 2DDi+5mڴf fZD"CD"ֱ'O6\ {N:):*L2%zz|)+++yq5@eRnnntMq&Lq!UM6 /cΜ9i]MNͲe˄Ă >޻vovlذ'@: 2̜9]d\>}veee[o'|ѦM8㥗^d2YL&믏;6eee'@wÆ x:Rշojۼ[0>m'(((ʀ=ڸ#??}1jԨ5kV"ˆ#"''N.//ou26D׮]_^^^zi/LƪU4?>&M{8 6ns̉^z)JJJ2]PNOcĉ1k֬X|yFͣe˖ѲehժUt1zݺux*8 mryWa7xx2]Pa*}-v7xcw})[PPݻw+Wֶ4Hf͚U*6fBm/^---_~efBm۶MF"///6nXD"p@|_c9&ghݺuh"VZ˖-yԩS_?jܸq3:ڵkt9Zj͚5XvmDIII{[o+|I5nܸ8*ȑ#֮]8s#:Daaa,Y$.\SL'x"-ZұGqG[-[FaaaDqqq,Y$/^ӦM^x!/^\"x`qq!ľ{WX"/^SN{.z뭴kS֨ϡsέp߫w^c5i$zz:o~?IJebѢEԩSgרLR۾}x']a#"WU;}mڴgyq֮]wuW\qok#F#FE{)SןUN9唘={6w8ScmF۶mcdɒx7{L2%dڡ}]F.]UVѴihҤIƊ+$/_K.sٳ7ߌ5klر_fzN =0jܸqm c̘1ӟ4JJJ꼦D".,uVa-[F˖-sѯ_O~&Mn-{tӬY8SqQGEÆ +m[PPѮ]8Fǔ)SiӦ{18S"''gvڵvWO>dv! 7*=[֭[oO{/Fov;ѣ#a_QQQ!SL뮻.>Z+ڴiÆ s9'4iRaͯs׮]O>GŸqklڴi먫Q*j~'1bĈo[m ^ziL0 7ܐR ?i4hРvV_U2dȖ0LQQQ\wuD"MƍGaaat98㌘9sf1F59Æ vUڮ0 +WVVcǎ1cƤ|ܝ-y`wS}DK,Icʔ)q 7D~"??Nw}oB^ED?}8쳫mW+]w]|_2Pׯ_O:-><͍]c=v}yyyq5s=C I):(/_^~ *ҷox`)D".xn8+өS'.]t=~xᇫI&0xׯ_ᄡ;j>siEcOǀv@^;,Ə_WR:NNo[9 ͭTs ݅0lYYgcǎӧ?W\qEիu*ҳgxyyy,.*秥/pgq^0NÆ wq}Eǎm?J #<Æ Z駟kշ5]w:f}kѢE{qW*.]ģ> ةq>JU}ߟ)}n[l^{mM7|sjQ}~UI&qmV]Ϗ+l׹sxGSN;SJZƩL6s ݅0zgk/777z\rIw}owUH`qEVjUݻwx≴gk}zǹ{oQzNדOڵ~ܚjܸq}[O&MĘ1cR^͢2x>u/uU;ΨQFrF˖-l_\\?EKE^jj޼y/-Zmyۘ7o^y`w @fΜN}1cԩS'?I4m41vؔc5jT+%L>=xѹs紏[.B]wZGm~iVWn޽{mذay5ۺv&̐;wܸ]vqG~bUݴiS\veQ\\\k+_}0`@$8ڬ?vy^<fR#G+Vm:th<ѷoj:4#",Xr:uV/LƄ R&rrr~ǭLE8ٳgZO&1uԴUS7Aeة8pN/_VZ%\Rgomg  ̙K.KˣqѺuܹswqѨQjk=AqjO?t%4i?R#LFqqq̟??֭[ZVZ{D"fϞ5τ=zko}m=Xի:///ʔYbE̙3'Zh;w~EsOP(U#F?<ڷo_·<ɓ'o[]?;l(ׯѣ^6|X`AG"͛Gaaa>qݺu^{-ݥG5ϫ'v} -_Ġ IDATTwߍ_w^]K/4ϟ> TN\|<~qĉ|G999-:{[ߏӧGIIIu4m48묳lפI8#vnmذ!>7o^4j({ҥK;=餓17n=Pq|7k,;H$;]xbѠA֭[G?#8ھrHYVV?ٶrh޼y}yT_~)M_\\Ç_|q˶ e]} @Æ NGy$RQ29#"JKK/IfϞ#Fpߊ+Ywީ6PQ_T[ok֬;j>`ڵk+WnٖL&$JJJbi|ʮ4OjY&nxGcذa1pOÇI&8{os!oUVO<~} CWY&F;vc9ʶtN_Yzu?;n͚5MNHi.,&MTUVeIz+.mqgs=:t˖-wp'Vۦ, }67lzkȑ#o߾;u6TezFD̜93~_S)y%%%q%ĺuj7ʪUf{W\qET͛G&Mbڵl/--6mTگI&1yVHk<>aR6gΜcԨQq'ƠAcZٲe8߲-HD^oWzjjժVZjOi&{(,, V{Dz.[ߊ}VUVm-HD>}w„ Up{YYY-[NylEM,]zx_rR7oR̈́d2j%G_rnʕնٰaC[.c֧Lߊ)ׯ&vv?<-~q嗧evy'v ԉSͅ˗ei[,Ydmq1S/5ԇ+VngNsǎmӡCjt[ѣGԮ]v)PWO6m+28xcӦM;5_={LSuf~=3P={ϩybŊظq㖯/^\DEw&_tE^߸qcSrѢE|zO]vU{WKTŐ!Cm0y_>mSIII,[,ZjUe^zw멲KIII,^8ڴiSeSN9%リ9sf>.N26eֹLߊvaqUWըO"_q'JBYYYmZnXeիWs==ܖm5.]C vu%m˶ Tj^{Ő!C⮻_=&Mcǎ#FСCf|1hР8묳?A;3Ͽ;l{g׫W+#77\ڷoM4{Wƍ /nqUWEaaa QngնI$?1?c}w)kҤI5dbny6Ϡ/~ۧ:aÆ) _o>vD6ׯYfwzkc秳D*ߵ6ݺu;~ٳ#///:ws΍mf)^xauYbŊx7G̚5+͛K,իW\r%Վ |8OP=b}owމ &lY*ڵQFŨQbŊbŊذaCDaaw{N81M8)|GƓO>WuEV;5L81̙p@J5kt6mM6xt[xcѣGv[jS^w0`N}\sMT^Ki^zE^vW?ͶL~H$Oe <&XfM䤴fsIk{B\DY6mQFUo+Wh-ZDǎ[nVl׾ .\FuYd(//ѣGmD"QeaO_"lcܹsltٗ>|xmJJJ .rxe7ncƌs̉yU٦2{p{^L:CD"kt<"'v']<kf`qI'1'?IwriӦŠA⩧J[-^ZZCe˖xe˖'\o.,JJJvjmζ㎸ b;5Niii\uUq5ƍT];dȐjW Yzu9rץq7V{D"GVZU&LƕW^'OvU:CD~e~ݺuKxJ};9W=m ]0;X|ys=1p83;wywŔ)SK.3,-Z}Y̛7/^|Ř5kVe\2θ{gϞq1lyDG˖- V\˖-x7W^3fdڵQ7???nhذa?Ǐpu]O?t4nܸ1݃>?p?9޽{i&7od2JJJbŊ̙37߬r/6n&MI&ENNNt-<ڵkt!oh֬YGÆ cݺuQZZK.9sٳ矏>(#)|W?OZ.Qkuc$JUoqsؗ}n{V_FDAD{/GD."ˆ ""#p sQQQDDL:QQ˿{r}?c>﫨oE6[-1LYE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vf0U"da 3YE* @Vfص^s΍gӢE;wn̝;7rH vDuYƴibԩq=D޽3] _3]@:ev/;SF}ƌwqGUk㤓Nw}7N;L͍ݻٳcՙ.|Nĸqfof+,5Zn ~ѵkhժU4n8>XhQ̟??{x饗bӦM~;oEyyyJǝ;wnDD\p1eʔ*D߾}qG^{7%Kć~SL &IJe˪gzoᆸSukݺu &D"w}"???98#c:cѢEhѢx{,\FW\#YlڵIzUVE޽P2dHr>|x+ѨQ8_WKMsΉ&M찿CѡC8ꨣfİab̙wZg믏>x}ڵvE>}+;3H&Վ{?6lQ=#HԨO]8~nI&ѢE8o߾1bĈ8>TCsԎ0u欳ΊEUnʕurvEDIJec =3D"vXDD4k,5kV3SsNDDs==""֬YSj/})ҥKDDL>=&Of͊e˖E b6m}ƍ__'N秥Aů~hذa_>|xc…_/ 8=я~TmHM6o}+|ҥK 8FC]>qgOӈxwG?0 SNqqE׮]7ިQͻL `{ ԙEŧ~cnGfH'=S̰;dy1tИ6mZ. Zm?cǎ3eՉ֭[<m۶8^J?CH$m۶nݺJ-Z(g馛sMiut=ƌ3~Ă ioDŽ o[o5=8餓bɒ%qW{ /0'6nܘRM^ziH;w뮻.""~9rdm͍W\TfEjů.~ƍc=6.첝~Nn:>b͚5i.׿mFA͒d,\eee1bĈ83ܩ4h%08sw2l>s=7{hz+W}'oT_b͚5Q\\7frJEYYYtMն ?W@3@fݞ9ջw-o喴^G:ڶm[N=h߾}DDzQZZZmիWǍ7޸/""⢋. T;U|X|yʗ|l[ 3@S.=sjС1cƌ_o(..j=g3gΌ~:~oFL81""9h׮]mXreqW9nǎOk -vU2]Tks=7ovy1`ԩSܹsW^qoFlr;<9777;8䓣cǎL&ދiӦŸq*sks]w]}~z*vvssSաCUVM:q~'-_<Dz0뛛e˪GjݺUR%]zUfY[nҥKoٝ#i۶mս{wխ[W:N8Q:ԫW/kN5j󸕛diA˷iӦ6m\\\4zh͜9ncƌQϞ=ue=#:}tg s>(L,w۶m9qR_z'Ծ}{UVM&z5k}jZnSYk.[>)O IDATmj͚5>}nݺ%IjҤuhUXQ'OԾ}4yd9r$<^Dq {hР,X`3lܹ6ߗ,Y^zD#3OOO5jHR5LQ4#G?W-Թsg-^@ix{{nݺ~6mxI 9m\zUӧO? \qqq9jժOվ}{׮]sl2UX1۸:uN:zG4zh͙3'W^1bod d(L|wzd2C/PթSGh"]rE#FdRV3Ԯ][mڴQlll6lr֭[Zzux``Ǝ͛L_V-ժUK]vբE4f]zn kԨ["<<\z.#'X߬4hӧfxŊUbEEFFٳvorv?sQ㣷~[1116à JOmh q+7s/” 4uT 4H~lnxSzuiI%s-@r+,,L&LPZlGDD(""B}Oiv$kbbb|o7uY޽{ W_Uj4qDkXӢEtq@ffYgϞ۵vZ?~\fY>>>[1B[l-ڵF-I5jT [.fYզMKmۦxIҦMԴiSjJ&L6O111v,o_^2ަ5kV˗/kĉھ}Un]OQQQڵ<==sw~sٲe7ߨbŊJLLԤIc={VUVUnԽ{wIA굳73ooo}W5yd޽[׮]S TJEGGkʕud?sg2_N:v>3m۶M'OԪU+`\]]'סCTR\[p|'LF~0auf}ﯱcJ_~WYGm^iʕ+Yf9Urv^~]k.+$$D>:u꤈]Vkj׮]{G/[oiZrf[u* @ׯd}vC=~~~Ϲd}Յ rlVƍUbE[6lXW`7nl6+888Ь20d}wJKK*ìYd6 g~yVzW_}U/vܩ5khŊ.YaE}p–;\WF0ڷoo}(-IgϞU\\5l0hBUTщ' >kֽ{w?nݪQUTрg|S8ԩS'7ZJ*_v>P˰ر{=hر={vi) M6SUfF%!sŲeԴiSEFF*88XN^߯ef{+M6dG!CTjUfuYΝ;~~5JzRLL.\h|vf=*V(٬.]ٳqfY۶mlsMQjj d븳gٳڶmyϜg=cSթS'fYʳxΜ9VV[kҥ]{97N...T|ymܸQ&M*eU#6/ό^<~r}衇l?{v!=#ÇkŊ6~SllJ..]dkܙڞy+/]d~MӘL&kpFNr*˗/kԨQV$ڵkݬʕ+g\.\`yyy9OJ*ԩMK&+WVΝckI0֭:u[[Vtt^ym߾]&LЖ-[rM0>~$+͵3sK-[75m۶܈o~$r~xyyiI&}K.11Qf͒${ケW@;wzc<<<ܡڶmqU&LдiӲMh]C=mzZjJIIyj*JR&#""Çk2`.&SOIx[,A4;j>}Mcvc=f]^B?5rZXwwwW```,ymRJYt4iR=rF?~\?%I Rttq5o\Ν?۷oX, s>(l͋33#}QI ^.́ e&}ѣڼys-[P.S$ҥKyNkiAV,,ɤyXkܹڶm &(..ڝޫoFovi|_gqܹ(;pE̙3JHH}fv%%%I*UT.IڱcG8p@R,XܴͫlR'Ndɓ5e9Z.iiiZx z~gIRVl汴4kYӷD5Տ?モ$լY45j԰_jU;37͛7rqq5|pծ][_N:s?I~l(ßܺM~3swҥ9shȑJKK f3󗗜ʵ6/EeUV,ǯ֫رcϙbijQ>ov/.df ;MZZj֬W^ZQteiĈ'sBʕ LWWWkuuUUZz]͛/ =!e2euMڵӌ3}Q=v+΋rܹ(;po~du7n,///k`KKK,O Ȱ kXgyE(wݺujٲڶm͛aÆ\ڶmm׳>8<ΨOEdf~rqqqZEřDZd]|!?͋g 06/}\(Sҝyr]%bzqE۷OkVN4~?D,e˖)&&Fmڴј1cԡC./2͊Whhz/@.)gA]Whh nݺ)--My0_UٳBBBTbEZ0yp]u 327k%H}rssSll>SܜJHHO?PS3fP`` VZ߶׭eق,M/\<)))Zz~ajJk֬ʰ|ri,Y^xA1117oڴi#)o>|XR :u*<[pႮ_^֑#G ,z}SSSk#$$D1112d5uT5o\7nܐx}*ҬdRHH?pEəDZݻ4[oiΝ:z!爂ۼq%'E^wY^w9vϋܹs5zhge3rHEGG+((Hz\_h^|Eo߾TZU>$iŹMdu}:t^z%Ip%$$; ٹsz))!3r^,\Wp]8x9]iR[h%SNrssӉ' /ѣ9eh},Y"Iٳ}l8\VXdUVMkזڵk۷o[zgٲe֭[%[K.Uzz5j+bBX%G7ɜfd~爜uqoBB k]*_ׯoh}*C`-12g5jOhƍ'|b}k;7F?fWKqgz+'F-׬^ߩ2RX`3H>3CnTfMEGGٚSttz-)#PY]8a6*W\5+2p]8 "﯀<,}:?A)::ZR54Ν;'WWWM6M#GTDD^9>Hu }jذ*Vʕ+UV/7q#֭[zgw^Iһᆱfg%e3<#rb"s,U>#Iٻ|饗 1c(99Yo+**Jjذ}]=Z4ydo;Vׯ_Y^tt*T5kjz v~uQott-ZÇSʕa &Ḻo>yOŽܾ}[oXu{GU>PժU~?^RFo$O>j۶e8HKqW^2ex=ׯ_";~GIkA8RJzHb׮]zg$ɤ^xAW֫VZvڪUڶmAi1b._\e9RIIIZj._z, т 4qDo^Z6l^VRǎ%I~fϞ]<Κ5Kv1(g:t̙7S߾}nݺRǎ5qD͚5K:rHz'NHí^ww|Gʝ +gr+ \ypBjΜ9JIIQR4c 3FRd;ChW}UZZRRRmMoӦM iڵZd:uf͚Yf6o޼DxvyrOcYuVرCGUl-'={Mٺz6Μ9'|R~T!ChȐ!6\~]Og򒐐Aiܸq B5Ӛz]ۼysիWOСCNs5=SJKKH}*cǎ1bF[jRRRl8pBv6Gwj۶nܸ_|QqVҷ~={jرڽ{w>~u楸+v<==m갯o4p@7NvNŞ,ׂp^g;y${^V/~guUo~j8pҴb {2ͅ^ӧ[y2e;7xCQLLi[Jٿ'.\DUPAݻwu 6XH?^xA^^^3g]3fX85>? [\Wp]8 ;ցw߭+K->޽{cǎjѢjԨի֭[ڷo߯Xmڴ/V޽RJѣڳg %''_~q2f oV˗ח_~U.׫*IZtM͜lٲEfYھ}{R$&&jڵj۶.&2۶mbbb4`}݊Ν;M6iԩ3oi&hذajѢt59rD ,В%K4j(ի@^;{}?[NڵSz(???]rE'O5cƌ8u>1|[N RZTfML&jsYGm^bQz&NA9s7oެ;jСjѢm_֭ӯ*)TTau~CqCIo^'Tݺuնm[5nX*_RSSue8p@[nղetY,oC=WXk*&&FmڴQddt-?^{њ5kr|]ٍ=ZcǎUfԦMu] Q``._'Nرc?o^dpxi=z_T"@8#yn0޸2Οe3|6en-ɵq%9XIR.]?2כ4io;%2**;vH{!IƍI-)IR>LӳYd翲̓uyS䔮=ygE5I u֒#Gw IMN@ ȸ$i%3jJgϞ 7@iܸTt-[pPjԭ[7IĉK87(.lwޚ! IDATPJ:գGIҶm۔P¹K/pj߾}:}հaC+ԪUu֒*`P$|}}նm[IҒ%KJ87jܸׯoV w)\D.]T\ȧփ>URJrvޭs꧟~*,Ѹt y+ ,s%aeM5q.v,d)w$oI7^/IfΪTIRTT;v$yxxH%I7nl&鶤$Ii|3}O_v>g2Oq7N9LS5>? ׼'(>3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ``(3C! PfB00 ŭ3&I𐛛\\\J:K+J.\P9 uRSSu tH3@2LGIgN"wwwL2JMMURRA NF7PDTB`PJ:+w.]Z% ooo.]p Keʔ)l)S`p"D a2L% ?=dG08dGIg%ÃD08gIg"NB ^cf'qss+, WI\\\J: 08``(3C! PfB00`UN\r*_$ҥKr<ݻw%Spf?@uAjղ;RJTCZ|9cfsuuUǎլYڰabccu"!\3yyyWXXXwqqQf3g*%%9`0(WW<8+11QPկ__6ӇԩSiOE_N: tvEIo_/^J*I:~h~za̙35w_3Au1[ ùspBgl6l6k˖- Uo;jҥE;I&lSvmiF4uT/BCCձcGi]~]IIIr8G\RU^=\rQZZǏȑ#JJJ*:UA5`ψ#cw\jjt :tHו+W9"I6l6lؠ'NpM ;r䈾k]~=5ydW5j԰oڴmۦSN9=w[ns^J*RJOիWիWd]tyF}RJ wwwnjժג%Ktʩ9^xxx(44TճgOM6M~-A(00 etG`['&& C  (&&fùs`3fhС\\\/yS{蛖fsVիW%e}ҥ:u讻Rٲek޼yڶp\:uԼysIמ={t%]vM*]|}}UjUUPA'O,;#( ooo 6L>}zIg/||}}%e*߿f >~3fVXQ! /[ .,-X@Ye6_a͛7 KKKd%''[_vMfYVӦM%U^]{-5@V*TP-$IwڵksvΝruus^9?~Ν;');<<\111NOj۶mڽ{wIe/%))IO?yIҲenp" nݺ6}Z'O/+V(===޽{ɓԩ:v쨪Uŋ_gɓѣ$I&7n\|M曒TlR4qD5l:ݻᆱ˗g[L&$i9rd'S*==]O>d)]`0r|OLLt8˗/|q8͜AY|}}ԩSڱcn޼pw}j֬)*11QGծ] hɒ%ٚ7-7o6un߾BҥK+==]/{mۦ7ڝ~jѢRRR4uTq-ZPWvRxx֭+???Β%KtYիWOիWn .?ofJ*UUti]rEfY[nŋmҏRӦM%I_uze"IgΜ~nݺ{ݸq#u͉ԩ0/_^...x?;vAQ/9)z ؓ+((:,n/u6H=CsޗjժiȐ!ҥʔ)c^BhBM6Ք)S4g']iFo񆼼 Uhh7oݻ_bOݺukAa!!!6,M0Cƍ34i I?ꫯ$i 29ӛpuueHAm۶U``ʕ+rʊʕ+uB_BkN~~~6[[;pݻwk6o422fˆ Je___uAaaa6 @NtlEDDhjѢUf3MU|yըQCk֬ ؿ7n,WWWiǎ9$i߾}رc:{TJ[qqqڷoRRR ӧm)((Hj… AdVKn^9qwwW@@Klhf{4n8 2D{'qnnn6llٲ|s;vn CVz7#FawxN2KOOWZZMŶ-/JIIaÆ2LZwk֬sbb6mڔg^Y 2ysUyzzZl6;frkյkWy{{l6_lԬY3}o S]tQҥu m޼YOֵkZjvN_/G?f9vwKΞ=})11QK{nݺ 6ܹs|ʖ-z)""B~~~ׯ$?郂t}[-[ԩS?TzuxC.<<\tԩl-gll~aUTIe˖UӦMդI>}Z:|pL\\\yf9sF/^T2e\rjݺ.]j3OQ/&~6~i@ÇkJHHP5Էo_k^~e?G*66V{UHHzm=h OjvÇc>}Z[l=ܣ>}X[SVfʹ~<ӽ|l٢$ըQC۷os7yj޼>1chŊ٦OII?KN^z߬ӸqWvGds! 6-:jܹsgOtty] HR||N:\ʕSTTlR>.]Z׮]ӼyltvN:dEGG;m5kرc% 6뭝̞=ۦ$>}ZR[ERF:szmmB6sػwW. VW ɚ7o"""tw_... Vpp6mӧOkƍJHH53g4gjԨV*.czJ*W:W^oܹsCCCս{wGꩧ%Iv_M:Uիe˖駟rSO=dIR\\֮])SX?]vZxsV:mXBBݫhҤIy3,]T|Ie\ et)9!**ʦ+W:= h χ`0ڼ)R~}df;Sʸ9L{$eaō7FekV?/W$iӦMv엤;w*a̙z0ɤ˫zꊊڷo9sXwd8uM Cfw,Z.]RBBl݈;vL*]j֬[ڌn޼C;ڿ/___z7‚ԵkWS{N>_]vQF2nZzJJ ̘1C?<<랙LH QUAK7\ZzPq_pjCUۯ( (-&@gYG̘I& $3$u{0=y_6UVVs ƍ0g l2׿/澴uVn9NIm/.o*++o 3_tE^Fxe˖d8:Зssst=GG;GOl&~0N6VwaHnV|>_ۭ'NhÆ YN.ѿWHrk-[{tò!& tR7o믿^zI;vzY1].ۿ/@$O?{.`y{yOnE@Fխf̙3@O=^yZJk׮$)11t6^իW[%iΜ9ҲePlCg0*((s7iM7P'NI쟾;:ݾܮJIIp{?>|XWnn.0:p7C=.??_ӦMSjjRSSU^^.iߕݻwX5 UTT+RNS'OֶmNX_HR[[5k^PEEE 4\}omm\.bcc%I:NOaÆXu.MVҢEf[o܀`CCoCA3a@+WԽFo}[zhշMǎSnn4hР>V͙R%%%6lƎ3dff*>>^*..99M0A 3|Oi/@G"Pqq>999뮻oGn7U+7ZC{ɓ!=~s(w[^Kw?{n 6LڴiسgOD&LBE_pO=gӦM f?~|;VoiXzyW\|>]6v_2tfe^z%ucqƵ-o|-[NIѾ}tYgiĉ/:mȑ#5i$UUUiƍzuӧOuĉ63fL.NS{$x(x<*((9眣q)!!A:tiuHMMUttJJJ:d€Kgbƍڽ{KFF?/ 4dr-%_xWzznFwy;vІ x<:z?tgyFjkk5ydtMZ,eggM8qapG*33P }u'oQׯWQQ 6i͚1c$?ݧ~^= \.^x]}՚={vZ=dY5ahӈ#kV;wT~~*++p8lmڴ).v]W]u+ ڼysׯ_l9p ڶm: iر(u!&&C2d&Mdخ9ÇX6ٳGSL_O>D%%%r82drss| ?hə$qkܸqr\***RYYUWW'ݮ3Fƍa|룳@0MSկ?Y6[S!CG?Q+++?KNOO׃>y+W^yE?)(()0 ˪?>L]tkF .[@jzޖ/_Z%$$覛n 0lժUvP 4MXB7oUW] zwtM|&Oɓ'˲,y<9Nǎ GnތisXBWBB;＀oHM 6FWnN9y֭['P\pt 7vkΝo UTT裏>ܹs/ͱ}>v{h.&BBVbbN{|Y˥vڽv{Rv=}:}t${d >6lؠ_WӟT{ ֜9s4gΜvmhh_]vem65g=3gN@0 V۶m <\?$5 >yyyr\/s\裏z`  Q\\^:s5vX%''+99YaN'OTQQv0 Î;$ Nw*++K)))JNNi*++SYYfLPۭ7jڴiڱcꫯWVVvu)ٳGr/׫Zڿ̙4y69>s?~\Ҕ:9rD*--wvޭٳgK/wZ飏>ҨQ4zh 4HJLLRuu޸I}:}tD[nӢE4g1BѪ޽{zj]EzƏ$jÆ _v5MS?uui޼y7nL_|w}W+WԤIOȑ#ZxN?^QQQ*,,TeeL|X[l/X͙3O?|nf}Ք)S4bUWW҇~ }jhh諲ϝIwCQkg0Z=vβ`Z:#O>[>6O[%%H͚5k$4p&4io,KzHT-ZHR8p7b}0Р;wjΝ.a}vm߾=eP]w]K0pZ"" aQ3BD "eD a!W3 DnwK@^@fill w + ">=v]0PmmmK@q3@|>ެ `te b.Kuuu.}N.+e ӡ`U}}}7.+%ۭ9p^vZf^TUU%ݮh9N9 ev@/!}󩾾V>WZZ]@K@D!" aQ3BD f0(@D!" aQ3BD f0(@D!" aQ3wXeF#ƒ0eY] /p`_61 `@f0 blr8fƈ@4M)+#+4%}uP@"}uft*&&Fv= L_(q8$|>544v4MB }0`!XdDݮxǫA.P@"}e,)...U+bbbz0  0AݮD8)::Z555|z-@d,KNS`v]r:~Ztf^lll]B$11Q6M.˿ CzAc Ah X||r 3@|p8p84a7͏{A{3@)Ins5+v]qqqG#!2ioo\0pf;0Hˮ ,m6bbb\%&&ߝ}# oJ\ ­A#=:]OWGDw!!bd]n@HTTTK@^@fnjn&7h|=$t a˲p8]"  D͸W35:YT4k}. O@D!" aQ30=COsυ6.xz駻/\?5kV"У3teY.g)t8<裊 W^Q||^}UkA9uTo8TTT4MIRmmJJJ$c Q3BDG \tꢋ.СC:k֭Zjvt_ݮoYӨQdY m6Kr\A{衇o|Coj;Vn[k֬~޼6bccuK.Qvvv8M6_Tcccy{np ;w_|>#kz3fꫯ֔)Sb۷O˖-;)u0`@8q.]NSرcUZZCL=8qbӧk+d޽1BO>.첀}L7|S'MI&骫}8gwe!5e%%%v{U}}]iiJKK}.^ŋC HR^^nݪ7M-[:.]^z)tM7xcspI竺Zwq.BeffرcmB~xm<[1uvuz yʔq|'JWMC<>bqopi[+UH]jHlٲEֲeMyyy*((i(IΝ;/$䴻͎;Y}hY )>>^|:rQtBBB9rD3g 1uvuz0@떛Q\ʴ|2MS1q-ECqqq]fkj@{ٮuvuz0 t%g)!Y2e'˰dʧWLy58)Y N wtXʬСC5jԨ.3tPIMZ۸q:]|ź 4m4 >\_|.byݻwbk$Ò$2UXpD2%ðT,˒)K)q%`$lիu7jҤIjÆ A;wnVIүѣG.?]RRwyGW\qz[N}Y7v<]g{ v%.0A2MS>OGv9" a`| >LȰISQU #+˰dYt54Ȓ%ϔ,K$W]\rdw%jݦi'?Zf6nܨ"IRvvΝsJ{=]ͱL_l٢f鬳ҽ+I*++SAAAouy)==]K.o:|nbbbtYgizg퍢3yI=y}n+..N.ff)**JqqqjllT}}}} 0 0io_A$Ӕպcj-Y:P[ӿvdZ2-Si4->l6J}dפ^Zx?CǏ׼y4o޼6544hٲeZ|y\p:ugoM}}x67xjjjt]w'?LoY7|LӔR||-[hӦM=u<='/(!w_Z544C`J44rm)(,!5w5ZniɒZwjWɴLY>K>5=><ɑJ};:]r%7nrt m޼YJJ/ƍu%sQFFRSSU]]mܸQ_TTZ`f͚ѣG+++K^WWaa}݈z!Δ硻uu8Ņ dT__@o1BQkg0Z=vβ`Z:#O>[>6O[%%H͚5k$4˲`h9檺mm>𱌖aI2MK%Ӳ$Ӓ2jSm}].d5%<'J7-|*th}2 0 $M>֭[%INSc7l0G)ViiżQA[(ȣZz]}S;۴w`:[8 :3@묓a:doR)}2`Y||W^WG .76neY2M)Tyۍ3+g0N! yH :!+21u~KS$I2%KULIvw IDATf:;%E ։c84^ }%jqqq w@2je{JQcb0ypc642SyM,Ò he: {Say+o<6E c V v]hӝ0CI5sV*t eqej_ʣFK[2G0$&M놥[lP\2cKf\` "Ȁh" aln Rar5ԩiXÐ.ɰ1$C0!Eٝ׮zc[luK ,***%HDK(C'@,d3 l,h`= 2*eh1̄eI2A */v=%HD%C^O,}Y)iɔOa6 - / QQ6)Sl`H_6:v$SmPLTR+`h21d%]2F_R'9XjJ8|7T*OՑe:kFQv9Q6\6Cn )UW. b/IsթVjw1vPQ.֥>|Rޔ^4 Teӝ66v<>^_Js6 I:'\9lN)iܘy?*k5zrʎU+%3WIzO}G3@uh):~L7JVϛǰI 2ru:.O!YRT1[ghUgEkpZ KNCFz0WM 93Zf3%)+ ikP6I}PTt&]ym|eWF$k@f wgY_RIͦ4P|isȲ]cthWӤD?3 eIV؁!C>)|2L[>6WFۗÐ, 6MSNYgdkϞ=ڴiS[nIҥK?#˂eI%ǔާlY)G]ӣgr9\{K}`y,ҳeyML(#Zeu60ZlJcƌQUU5x`93`LӔeYI;ڪp$}dY>5$w 瘓ykE)I,%u`QYSeZv{]CvvƌCiŊ2MSz=@B /Ԓ%K$Ioi3@?ײ3eY**TdH)4||>as4V_WQ'j1,62N V'%u :Tteɒ%Ȑ$#<5kք*D !``Y.˕Ҵ7a*vl6[o]$)..Nxz<tNj/]wuZ2ݮgD~k%+ v׼ys X$o_@Z#@AW*+ϟ?_?3x<{nmڴI3fPVVUUU#GhÆ jllԠA4c 9Ri&yހsnSII^vk۵k{6m6O#G*##C:q>Syi 6hƌVBBU\\O>DA=n:tHo;<?^*--o0"TrWc"VWW!<x≀@?.áwy' 3"ZMMݫݻ?mzĉ;vUQQr*%%Ecƌ֭[up\ JMMUZZk'pBeddFǏW||ƍ^Z9&NƪBJMMՄ _~Yuuu=kРAZ`rsszxH@D6my~;]6/ 4l6?$ a@D+))QII<=\^Z{iw={hƍrݒ>ksjƍڲe àAtu)==]'OֶmBR%\ i#F5\K.DGm68]ӆ +R#GE]UVEEEiŊ:x,˒fQH>>+~}I%Im҆ $I!aĈ3ftQmݺU=ztϕp $oߍ!T,x|éCO``!7LRx4hPHh]_RR"IJKKyڻފ |>%$$tPI]555=h@k 3<O󥤤H.R]znp-˒nE/*--MuuuduWk>|^8<^ci9sӕ&ǣj?~\֮]2͘1C>hc<z$In[]w]͚5K3fА!Cx?~\%%%ڰa֮]Xc DkU]];wɓ'$I[->>^w}LY7:uN3g'8q}Q,w:װa4uTmܸyt]tEf]VVth…z'xԋ4a|t;(:uJtmٲ%uuW;$͚5K׻<==]𖚇0h݁ѣA ;Vw,Y> 3ЮIRrr^oztbI҄ en]uh5\ѣGr-m 3fPBB~_UWWn+99YƍStt>L .\GyĿw֮]"ܹS'NжmtqUUU)))I{nF%%%IL3gjӦM!y^{'ͦgGyD smhɓ's{gZ`A=B;V\syUTTlK4+::Z RUUU˻;u@yyyӟdIҐ!C+f̘1i˲AByyCRߏ6JJJo>رc 35kHR@n롇"0fn&M8QcƌQEE~qqq>|n63[N I=6MSNɓ4%''tk0zϼy2HM9~߆* 3ºunݺv/]uG]_SSrX"iw?˲viVWW-zCYWghʯ=o~}JJJ X7tP-\P .ڵkSOuzL:Us c t.6A4c1A@㏵}v͞=[3gĉ ]'N˻u\=cr8niʕڻw?Ok.2=m >VZЗ3huuuZzV^-0 ko3gΜ a$ÇCS}ze111 C~[+Wl{,k0m4+Wj۶m2iƍkv?h HUsuG : GB/3ciʔ)9sd\.H+Vh3DG;-ܢs=WÆ Smm:zveGѼy]ÇWTT=;vbbb4sLFź|GƍPQQ~ "p0CIP1jo``-R= --$f͚^ @niY\?KKK w |sՓO>d|O5ki-TaC0-j^ӲsNK[n$ל6lH)ViiżQA[(ȣZz]}S;۴w`B)߳n3O=C>IF 0 l2u& u Oɓ:q~dЙЧ>-\0eD@DвKÀ60g@AAg `YKY3:Q閏OH{@AA:>ia=v돧j BHWL}fapZ+`]s4fwm?h&NʼnMB@a)MYCС3/:anNoμ贽PIX}_lg۲lm0"ٲ-yz=#KWERy${t܌N0m'6Ou$muu?6'fd|k_g+kʕ̟?Z3]~g;03gՌ=˲8y$۶mȑ#]=("jl px """2PWz$FuIhPADD)SpWAa|scҤI]O4:LӤ`WGdXSAd\@`p """2z2lTpg"0" 3H͛7I&yW8z(2z2 }g„ ~ J"ÎB "Ï'''g!#*DZ#dOeċېBsK@ """2"ޮF!h޼ylٲG:thj$Ùav)..ԩS\KB "W85Uk KTiDYhPADDD=4[xٷo HbIQQ'OH`67ofѢEP__?U3d ) 22|>$|>`WADOۛkpL "=;bCݭݗ>@ """"Q @ Hel26Ra(Ed8 x^<`WEF׫^Dd}fˆ۾K?Q"24isNOdevdeAaj ,dVGGi3UaH:$ .'/mo Ao{[H58J 4( """"""2 d@, Cmmm 2Ȑe6a1ODd52DmJgEAa9k̘13g2zhn7MMM׳g:p42e SN͜:uw}ӧOXi,\iӦQTTi~ӧv3gSL!??<~?>vM]]]].saڴic& >|-[ }< ,"lԩSֲe`S_vm]H+,9y _r%駟ĉ̛7>8x ۶mò,&LY 777zm޼nN=Ǝڵk̻k.^~._W>COܹs=z4p={k%,/~=x㍔{o&\g\v3uqܗ)Y=r~ԣݻwGǥ?{Oŋ9OKKKǙ1,g ~"`0HNNYYY]~?ZBD$0mzJKK,hS!"QclTTTm6t==;ws4MMƖ-[8ر#:2x22PxAdh x^|>YYY\.G9{YE8& -OԙI8۶=z4dy_ż"&4Ytmd]x;D5<'~e?H:N2:Qp6pCsMBsTw"Р0hk":::x#0f.\ȸq9s&?mhkkCL[[ٌ3EQPP^HMMM«n7\s ~6mDmm-mmm2k,fϞݫvYf n:6mɓ' RXXHyy9v?ai&?NCCӧ3| g>ó>eŵ^ԩSlܸSNacǎeŊц?n.o1Mo_|C7nɓ455ϼy1cG+_ {qƱ|r<V+St_Ǐx:Ĕ)S>}z0C$Q[[KSSS L4!G{LIJ,,ˢ3' Lvy$TK7_L#޾ 5ćbg*0) ""#ڲe(**~fϪU3gرÇGYn]ձo>n&rrr9sf./_Nnn.mmm<#]%|>_>.//';;p83<[׋=^"<?~9&MDaa!u.]m{G\sjjjLAA/wIq ~> ~KF3fK/w.555QWW7ߌb̙gӟzꯍ7&mD;V&_L8)LS>/ͣC=Dkkkt磡7y|l߾)SPZZJQQQ" 0;) """"r:^e"G^Dd 6Cu^PC 4 ttxb~. ?ekEϟ8r%z<op[\& p׫m#"W&;dFl.E'Q~>b}_[[ۥ d 4fb5i4b$X?~^M<^6FLȈiiooOzuDe,t41cxtt&(-))Iz \|l2-[رc߿={\Fm#k_Zp8}. OuKt8q|$t{#S:8OeΏR>/@q^ {Yx1FbԨQ 8haPhADDDD[I5&]xD_|"2|נya&&~ M@  Xp\)[=UUUL8SPP@UUUUU{ 8q"meF:u*sj'EΌkb<3~l썞hYMIIL/]\nY|0!wPADDFFt{lZ+4ٽ{7OCKK ԧvޛ"gt^;m4.]a͚5Mc_'Oepy@_Pø4TL{Kd42dݏg jH ˩`ݮ[UU#GOi/ԔDthiia˖-0vش? ܁x 3~u! dc߾}|SJ:w\ƍG8^y oFҫ&,X|rUn_OwW^]vل zsէXE JE:@t=3u|VCA}}=$\ ^r1>/OԩS,]M5X{ Q]]ͤIȑ#I 0aW^y%+V2WDRپT !M4iҤlDd@7&& $&P4),jH4z7$jH5[C._DDd)**걁P(kĉq\\wu{:tfJJJ>}:swX[[ @~~>k֬wߥɨQ7o^u_u&Mc˖-:tӧOôiXlYyy9^x!f0 RVXt^i,M 60aꪫؾ};MMMaN'L2~:lXKK FLӌ?~J>OQWWGmm-n4y|VC;Xp!Nk7|:N'eeeTWWSZZpNC8?ض_Wz馛x9z(mmm\.Fʹir}̞=hb u8\y啸\.:::xwRDEzھɖFDDw)1L+o>2g̋]?E.q'6&NJr{ sHow( j=DDdع{\'رcx^yV^MAAK.eҥ] Bl۶k.f̘Aee%][V{9.<K,aɒ%]9qeee=>'2fƌt@ s=FHSO=g>Y` ,m n;ѣG|߾},_ŵ^K >୷Jiywx n\.}^{!J9Wo=455믳rJ X'p8ΘߟiǙ8?G:֯_\@NNW:^[[m*:hll:::8p@uG4zHz5Ȑh~B"""gd?HE F}H>}l!Q0QCd2zf~QAdpĿG\=.6,dKaH f|E1vXFMvv6mmm=z[v<֟g:ܹs)..tɓ'yBr-ݖQz!-[ƤI'Ȏ;صkV^QۓM6qaMFYYyyyAKK >H[oyǙ>}:&M",ԩS444{n;vƶ<ӬXRBPqzZޝzz!/_رc=vH}`_՟PRWWҥK)--Ƒ#Gؾ};'O[o=}i>?W۷sa/^Lii)F4Mhjjb x߱c>w&'\/oxby^]} 6Ġș" 0dTlw6]{ib{iĆ 3n( ބQAd8D=DC$ >S ֏7 5JG]{GcDN4/Ѳ,3%vctxsX"?F' \DDDd8=z47t?0'OHGAill0hA5j[nΆ¶oc';~lD*f ( 2xb`T9(Yp*پHnwR Ro33$5ydxFmN񟏱韘a0'a7$7B™ ݅ 0 =D.l偘RfbX """"""aa>v5ȵ9eW "tbhDDDbXQ"v={ŀmf Èb |Ϗ+UqwmRILdD5Z 'ap8 |kkk @g!Z&"QO 6=' 4t7DygT7ܔb/DDDDDD$SPP(0e*`6ep8";;]FOx<Ȉl۶ 4VVV|/ս^___|t"aH f-PCC". 3HB^jjjhmmڜ+C Zm撛i~pp8a&DDDDDD`afr-?v'nOgO 7q||?nO {kHlM |QADDDDDDΐԩS05rxp8~~X"""""""g ˲,P(什;/طo߀v:C 6O =4@Bj2pfΜia;Ց^M֍2ض墰0hmm]Aa|>^i򊊊WWW ȡ3`I!62sK7`dؐékOHt$6с%ۯ2#&~m#o˗o8uT&"A7~ii JDDDDFېJ@!ѼDc{d(**" ֦$DDDDDDDp8xYPPpݔ)S8p{|2MDD3 Rgd @ m"""À>EDά/,&q̬p3hlA{Tk=' dC1ǯ !e#$'''bH|҃B =-cޑ DR{gHoGfJ. O9/cB6CTdfsqAl6Ͷm6VvNXG6l|݇9ANN٩aFl|>~?ߣ#ء'zBd_ݕ3$( """""""]( """""#?ǢQ:3{OC J|BΛKqt3aPmp<Ωfœ.=q:as:x_:ṵ! """""""#Laz /ȈDZ%3_VLo ˪r_ْ<W-xb?z-;0*?iC ԑsnǃi&0 1 ~lێy!Q!ކ2r """""""CHȍja\x̙32N:Ŗ-[x뭷سg>ok*"gG7 JYqI ekkF/7vc6"i1`s\%+++ כΑ 9sh !=5D >$ BC """"""""""#ѣ+xHcvmX.'LEy뭷w;0 sIPi֥qeENۥ8x~[eÝapE0#afL 31dPADDDDDDDԐ "2vmZ J~ rܹsV\>96m 3^OӬ_>-aqq뭷R\\͛Ϫ0뮻W_}3fc~ӟb6wqK.壏>ӟ4cǎ;蘆[Xrep8Lcc#GO{! f葊c`?!EE,-.WqY)j,.[`|*i-cڵ{Ǻu,p8CAdidggz3^VFL"Ȑ;nt:^.((`ڴiL<9c]:/_;5kv3RiyL<s?r?d̘1G? &pwiܸq̜93:͙3 .o_\z|"280+|~r \ћRr|nA>9FV!Ƹe)g8q_dJ@23rW/|Kvvvqxg}QxgNիټy3/2@`$1.rΝ t6|;:/eY'?ض 0̞=+'|Wk'?noCD30JdC 6aΛ꡼8Lf^kCNg䷾~7dO9oryK/#t8q"_ט={6ۓ4Mn7i$0b .4*GbŊʢANNahoo?c8:10ArQ\\LVVWHZ-?LQ*GU}0 cb^ Èa&e ikkrleeeaB!Ȗ-[z<nF,YBYYiG .=P. ˹⋙4i%%%|>>̣>ʶmzp8;w.7x#ӦM0 =7"g-&er*i F4TyYp!]˲ظq#wq9r$2fHd2FaI+%inn9s}=z4z5khjjb޽^#B~2uThmmСC];w.SNÇSTT)//?1zU%KoÇmSo|f6o tp-r8qe1{lnw5èQ5/^ ɓ B̛7/(1M\E|-))We/X3f < C,k׮r-t1=3+z*] 3*-ӦM_8y$GMS3Mݿ'|`ƌ\{\ve Y~=S4tT=LdAaĶh#qo~hkvZM/Imm-g;dĉTUUqQ={6i#PPPjofΝG? P(ij>멯'PYY׿uYti \wu裏կ~5kְzj>Yf /aݺuA>sWyNGtx[o[n ڠbŊ.Gw}]\^(2f.3|%aYNNO>doTTTp7rXn>(yyyvm\|\wu<[oq2vX˩aٲea àJˬYɉLxb غu+wuRPP@(rvZ&N͛ikkK.>_~9>`4 "3\yXZg4l iN;s>֭[=ܓ%J!b޽ۿwun&5zS """"""""""#??PVVW>Muu5/2PԩSǡCCJqOرc믿Rvž}Kn7Ǐ<^/'NU}'MDee%9UW3Cee%%%%?PSSkƪU(**UY <~۶L(:ַ(..K.?)^]SS;C8vSYYɂ 8e~uOII {eݺucW{.̚5+fhjjD{5k[lrJ."jjjXhP 6W&۶ͬYg~mvɾ}ҥK1M豗@^^ǏWAdm{g mjdOA t~NGa4|鍞~,I<~~ɖ%," iuZN8?R!t`-[ /XzyG5jeee\wu~yٰaC" `ʔ)r-TVVbYeQ\\ܥTeggGꪫ4r:uN'eeg[#Hss3uuuL: sa6Of\htRPPӧo…@gcCCC޾};?Oѣ/_΢Ep8] KD ɉ y7+1cMMMTTTosN.͛Gyy93gڵ 7x^xs=+Vp֭[ /+Wdɒh]imm=MDRcdi?3@؂œn}cAȗ}?'??_OSmכߪ*nvQ\\e];?Xf9 S_ƺѡ2ɶm>o3c Y|9_صkW׃D",Z 6cq)nV.^Ex{.#=Ix^,0 ƌÇ{]Hq)vԩSYj^p8ܹs3f ~{ܹs9}4wqirE]~G"eqIy/_NaaW&""lyyyq H`ƍ^::<ߦGRUUE]Daa![luQ__}fΜɌ3Xx1Vbռg aYV{J9[m'Pئ)HaNV˪i +޻PXO~˔SAD$M92U A=6Kt?glĊt.""ܹsx<;~)mz裏B|lܸ1õ4)//m6{==~,x^F 7>H{{;- q<^BnnJ iӦE_Əω'fɒ%8N O̰hm[f* f꫙2e @gy|_|[b֬Y\uU[uz*stl28DDDDDDDDDDFc̙]Y29;;umm-wnѣGmTbΝ+ĉ裏oWUNٿ?=_򗻔+xbfϞ͜9s楗^b֬Y̜99s0uT}]| _?vN+ y'>}:˗/qٶ/~ 8sҗIJehkkꫯwka̙֭[ާ^JKK)--?Os=r饗2}t~?woe}˲X~=W\q@7|3쭷RTTĶmhhP(ĉ'"??_W3PtwpM7b /_vc Gf0  7P`ʘp;Z0V0g{Ǻu{T{/{oe;NJeYo;kO0nH2/Ѳ,3LmF;bv\|F@jIl/O"""""1|.""=!///e{go~o̚5_]ٳ.PRRmt Ôxhooi&Bss3nn7i immu)pP\\LVVPӧOG? x<@pmmmPCAAmsi'??˲8}t Mǃr蠥P(ݟ墤˅隣Caa!]OkkkIEEE~;Vvcvm2n7`7|{キc=.0~3.,,G&=Zz>}:UYYYcY'ORބ p:4M W9[E[[O>c,JJJa؋"[U8}- bX!?_< _:#ͱ=;v-=i 3WVaAAA#euttz{]^^in|7Z06 XߏFm#߱b'a!%,]DDDDDDDDDDFDmRz1.,ĉgltL8N^KK ---]%jNTքaD g<ؠ٦G|p L0㻬W[[c=O?}떊T^De2~?i#YX"IKȰ("6Vf̖aO`9=2``K̜BOL#maab͇^ƺuxW}6=rss3ZN]6fA~q饗FhkkoooW^ ӟ4uu3o<-ZDYY'Od˖-|GA "'O6tt04xCWSZ&ڦ ?|}F{3NC \.\.W|RaJ+DDDDDDDDDDF]vk׮˛~65M0d˖-lٲe""u=¬l&0   C++)/vmps9xkS޺q8pe6>Ǔ&~b``W@DDDDDDDDDDDDD$c»nH 2ԄaL'/5=q k?t;0L'v&#a' zX~ԳSADDDDDDDDDDDDDF>Lo|j0 Épa8]oOmۻ! [C:'  B!Z[[&;;OS8?=2DAa9KvS??!};7 m0K͘[zyo.<fU0}\.iwUT_37IHPz7( * Eb[]ײeb)*UQlpQQT`#@B $@i7mG̕@ -yܹ3|s ӁaPBµJbhOUUnPq8c6~MMMhaJf9iEDY`^af!((\HaF2ablˇk-eo@w#Pq+Wbx%2(i|>UUU$5fmmXbYP2hRDDض9*Z""X{\0b`$)!Q Eru iؖa-ma֏P.GOv.mP{VĠDQWqxZ:i"%3'^OPiVmۚ9JlWWa(pHk06/plF`[I p2YDDDDDDDDD8m5!GF%ED6۪ݎ27Ѩ~v_%3GnAXXXK"'(CuuuK!""PrS.P‚ -qP2qd6. LlDa6n˥ ""'?ZJf9lۦ ǃtbA'/&;mݡ5t䞇GCӒh=PlvzDdzzTUUt("""""?+_&"""""""""""""""?+Jf%3ϊDDDDDDDDDDDDDDDgE """""""""""""""dY jDDDDDDD'&&P<OK"""""""rkժUKpQ2q4c ."6mZK#"""(DDDDDDDͧd9a=/~`DGpЫW/6oތjpDC=?kkddd 0xyv"""eϞ=TVVv[:^xx8- lDDD׸q5jT Er<>qFOf0 ={AZ6$''h=c-11?Y}:vg}"9q)ADDNHG4Ml?N gddpd϶m^|EJJJXt)6mjLf 9\y*vWcqLDDDDDDDDDDdA-;v,~!+VrѪU+F֭[[87w\Νa:$M IDAT=#QQQARR&L`…lߡCF墺ȉA (""'tv %Kx<,_8񗚐o~Ӥ SN4M|M{9(ADDN8ƍ`ݺuFnZ,6Z`iӆmZZs555̛78E(""""""""""r2""rB1M1cKL/!44QFqϘ1.o5k0i$FAǎm770oK,!&&&{W\qEy7'q1vX:wLxx8l޼|}>7pׯgĉ 6vp8fʕ̝;YgE6mHHHb֬Y|u{C*++Y`oꪫXx1>W_}5i[oQZZ{8.bFEvm͛77+P]]`#}n*]t_f c̜9{r94yL""""""""""" Q2P233IJJ²,_0bFO7M ""rB[bb;3bիA'Ҩ^ ++m۶Ѷm[΅^HFF?0\rIGpɓO>Inp\Mǎ9묳}سgYYY|Q\\Ldd$ݻwgʔ)$''s-fmVǏ4MVXmX֣N'O?4iii1g[֭\rI`Rtrw6z-˲xꩧ&))1c0ydRRR;yogƍ\.bbbHMM_~=68:ûヒ檫4M.\xw1aaa̙3$6nٳٴi^zq7<^JMMMjsi Jf6V l z<0|pu <NQF/2vx{nV^ͷ~O۶mK;w18.BuFEESL pl.]z@/[O?yù˓O>yW_MZZEEE\ys뭷2i$F;HE]Dyyy}aa!ׯ + .\جo߄>$y&"""""""""" "Kg8# bٰ= ?ac᧢ Q18= s8f1bf²fo>?Rp`AhhӦ P$Gvv6yyyTWWs9&<<aضhۺCk+Vp0l0 Dff&))) 6aÆqr뭷aÆ#ׂ Ki׮_~9&L/7:͛7'4W)AD6.ؼ}3!T֔c6X6id8ba-1d? 뮻;͡*UA?yyy8s̚5 >C^xrss% pW%U[ uڵѶڵj8aɒ%,Y]aԨQL:${1=#PQQ k?-ZDAAASRRؿظqu$ 9֎݌0;Ucòc'!&osW4-Dǎ֭д2˖-0jԨ]1C`˖-Ǥw!C4ߘ1c bΝf۶mV;ԩ!ܪu?6lP[IX+((`ܹ &&={kϟ?xK/5|M`PX)**m۶-rQ2/Ï?b/RXXlټ ,0  /ŏ$V}rm`6 7nP_~!ۗ_0|F| dĈl>ӿ. 22 #hX^^7oꫯ&11Y]/`ǎ ,JRSSu:%%%|\~& L4޽{xx^cJG̞=UV /4ƾ x8q"vQ9n IIIḯ gH""""""""""rS2/?b/I'cNtЊtUSϬMb>,|Ըj+cc4IqAtXmypuX10 ƌ'|mRKŀl3c xO||<]v媫'0 -[ʕ+ ##~ܤ1Y?l&22y1nܸ@RCXX{o,s?f֭yG$66}:}!>>LNn6ÚoL~x嗙6m'%%Ihh(}j% o_=s9k̚5BL':utpu5r$y<zj%"""""""""""͡ED~a* Ng޳r'5ޟJdn`XeYXa v _SěI֭XdI-[n 45j,ˢQF5{ǃ> grkO7i\k׮[n!&&{@BVA;w.˗/gر 8ֻ륢"q^z%yg&44^{GyIٳoロTNԩSq<,XIlAѽ{ww5\`-X碢믿o~qscYՄڮ^I8c۶m<̜9xx<@rȑR2/LpAZZ[V0S ˶6~j_-GE;vXvrn鈦(--e͚5z :Ӊ _v-ӟ+0`)))\.6mĿr9wo䦛nSN47-ZĊ++ܹ38nJnn.~!y>s_~%&M}ƍ;w.ռ;-[˘>}:z"..Me]e]F^ܹ3zj^yoެk6ų>ˊ+8ѣIIIS^^NAA+V_haڴi=O?;Ҿ}{|>?[l?1[oꪫܹ3III_oi&yLSDDDDDDDDDDnq4b=5^hXCysF[]}wD駟HsٶmJܹzíw]_`̰aLlƲmlEuM*\Tk0M:ʻ/~IĦ̖T3̘1.,MvJϙۮkhgںͲ,v7'|i@xx8˿[ q^qms4~ BQ펈*3̂|UVwO~|?0~dm ׏Trmq8p'Vj)AD$ލaImz-Ga>,|ؔR*b-mнCcٽ6C """"""""""""rT)AD$dѩIWK !YNn3;x-7OqE!aF"8f'`8jd^$8ڏ#l(ædPe6AiM;s1aaHl*^ܾjpu+E@C Vh;; lVCDDDDDDDDDDDDdMJŮB0,*r 7. ak1`Uch(`|j\"ܡm*30EP2IlCNfl4- nO ?&2,3aۀn1/DDNJ>ߋmY>?mXI u Mdd`öEfb֬Y-_DDDDDDDDDDDDb""rB3-v,*+vWB\T,A u nLK ?2}"JZh""""""""""""r2RePpq<;~(88$'`z,߂㧪 U " JS3AZF9JX Zv""""""""""""rP2I(,ͫ⫱H@IaVA\򇡵 O 1Q1HMpG)9=߱t[HrRVEDDDDDDDDDDD$d/UR; RB#.2fA|2?u`CpMz6}  q$'GR]SExXzN)%3,gy򤟎@ 9+[? Gva6!3+|aW.l.6̖@DD? i* /mn>+$&< qTAD¶mN;00-1,~ӏacBamT49Sڵ+111\.{V\yb8Vnx&9)AD$``I `^Kqlz}t>ﳱ6F{V0pt?t'66czO9 " `Yea6Q5t:-#fllOML!4%@8Ų l rux,p1tЁtrssYhe 9 "r۷2mPy`mk(a c* o`lc;6mHd\ "r3 ``6$bW'W'P2 Áijj {L#""""""""""""-O ""'hJE0NDDDDDDDDDDDDhQ2/@CMM@hD.]0vs9s9'r 7aV\ɀh߾=ᔕc+n7 04ػw/۶mcʕ|zgʔ)7ۺuXtMӤfݬZ#z.uꫯ0`:t ""r/q\ mN\7p,^SO=nݺIaa!ocB ""VQQƍ֭[ƍe{EN b㉋#==5k0x`(..xh߾= ,w# HJJ]vNΝ`ɒ%lڴѫW/222 Bٳ'TUUq\ь=.]zn%21dY+((K޽Yd }{VXj';<:t(+V`Ձ* \p$&&ҷo_曣gMRR˖-#+++pm۶wy}l\6m⫯ 744qƑYg|pq̢Eضmmc-"""""""""""r0g}dݻ$ꫯHMM=*1mۖtrrr% fBBBرkٲe[SSç~ 8#7 '''PhUiDD{QQN磣JuI999 /(( !!xKKKDDDԫp$qUTTQ""""""""""""͡e&DDzt0r8mtlmχ7ÍKUDDDDDDDDDDDxS2QVCyy9k׮mݞ={WH7.)ADDuͭPRR@vv6W>qk\""""""""""""3DDD䗩L?Fٳ'.f%"""""""""""?%34g:thXF`&OL^HOOCN'jՊLž={())t@DDssNә8q"|7zHӜDDDDDDDDDDDDZDDDb׮]_3 ))$KVV֭cԩ s\у ILLVZmہ1aJRRQQQ7zp57.98(--%22L,"+++ޑѣmڴ!??7NTiiioߞM6QXXለA-@3Xu c׃59йkVg}_wy/{ IDAT4Ķo~bbb G%""""'&6֮khgںͲ,v7'|9 2c Yp!K.w>""n͛Ǘ_~B7Hjj*裏}ꖣ,k׎Ea6^{-+VG̟?UW]w}wq>C\pq 8p _~9?yݻI4 0%cDDDD '88x_}+P~?n~+?7oқq_DDDDDDDDQӹsgV^}`L.]Op:~t֍crh.Bx7ٱc1񒒒¨Q  {|>}0|pywp\G#t:iӦ Nd """"3d_Njj*+V8ꔗSUUu&_W^\wu^Kx2Cyy9? ?lxDDDDD """""""""ռ{M^NDa6+Wdʕ-4DDDDDDDD sΣs8Nyygp\8zѷo_l&++G{&MĐ!Ceƌͮйsg,X7|ŋ ڵ+,XJLӤo߾\vedffOee%[n3 8^|E,gΜ9m߾=aaaرw}7|YDDDpE1qDڶmΝ;Yt)*v7a񄅅vZ}ƌ3x<^yBCC;4i[ne֭;L>s|>g}6EEE$%%qsÎ;Xp!ov\wu\{<pϺux饗-m9},Yٳq\Og޼y@g0`pBzw'dȐ!yۗѣGDVV>(?CmTTSLaȑg͛믿;jH """"""""rԘɯ~+fΜirhժ[v0`׿>۷/ӦMc˃>H||<^Guuuc3  DA曩f޼yLii)EEE8N:vRXXHRRK3DGGsvx<|>vJn݈79p~sr(**M6L6x\.qqqs= :CUU5^!!! :$>Ν;ٴi˖-㣏>b„ \{|'z꩜{Oҷo_***RTT,bbb{2dҾ}{fΜI||<=mc&!!!L>Á&8838Tزe i2qDnVG߻ I(Plq}NEE555tڕ3gʣ>9¸q8x<"""9r$zµ^ԩSALL QQQEDDDD~ """"""""GMHH#GUVKƍǔ)Sx<@rPPgfƍ#?o&Nz\x,XϠAHKKc˖-L6}ٳYt)K,!??{믿>bկ8묳a0aJ^|z\8^6l@ǎy衇h׮Ce˖-3j(yW#11F¸馛ԩ}O>$\yLg PZZ#S"&&b˱mdZ.]Jnn.۷ooo~}]bbbhݺ5l޼˲"11Y ÇUV]H8 (++utԉ 60h N'./˸q7n\xXf lٲ%0 c{1x&Om|̟?'88Çt:С۷ MTT^:'?? b67n/SO%%% lۦ𑟟ϺuضmҫW/weY :: }W=mcFJJJM2}t9zu]mہ1 i ʕ+Yl~:^x!'N$??O?G}%p88s4iiiiDFFt:1M*)) ]#339ǃ0 ڶm VKFm^bȡr 7ԫАe˖j*FAII /B`1MƎ{gX7}YضMYY@9z^^{5zIJJ ߻_|{g^'))l&;;;p|Ϟ=ٳ={~ ǃj~tzM~ػw/6l'`ժ """"rJfF&{AV)))DEEm|r&M4hr }; //DwPr&^lww|͚5Geӧӯ_?Hff&vW\q%%%̞=̃>HEEO>$9i{V_۶;5_0i$ ߻ogeee|>N'mڴa֭@mLXX!:pBK>SPP@tt4 bٲeЪU+^!'=1wHHqqq_5kǬY83Kd@mڴ T,SN94)**ߦN:5x/۶q8;M+W2zh:uxn 6mĀ1bo999DEEѳg&4M"""L¶mBCCԩ999iӆ)SgKz$22,j*C~p8dggzq:SSSxbF{׷o_ybbb Kyy9L2~*`>roĉ뮻HMM $JH """""""";0fz͌30aNEEO?4sM7ѩS'oNEE鄇Ϯ]سg/2{/Ǐ'99kжm[ϟ_|Ѣc0`~;6m@Bw}@qq1k׎ӧӫW/V^|ہo}pCii)iiiL:p6oLyy9L>^{?c2x`~>s󉉉0@ŋ3vXZnٳٰa7yQQQ{ .MqmQ^^=z4L6[ncrM7?Brrr"==o;vϲ{n^{5FIFFg櫯֭[SRR?f}^xtڕ\***ر#*Woǎ,Zw\r%ٓb233cժU͊j+LAAߟ֯_ߤ8DDDDD~ """"""""UPPu]̙3̤sΘIyy9˗/_dضi=z 44*֭[3<ƍXhw[nr)PTTD۶m[x3T)(**?O";[nL<>S} Đ!C2d]*zOQQ/2pw2o}0p@M76lc=UW]fժU|رnӧ3x`.,ˢ 6`F 1MZnM r~z̙Æ ;g˯kziڵ SOVAXX>^zqiLyy9+VG ,""""""3Z:f8~k4rs_<9;y"O_J6ȑm;*u- :yX{i6˲ݜ$FZZAee%۷og޽ڵjՊTq:TWWSPPݻ&''Bhh(nR߽BNNyyyM588޽{N~Xneee$$$н{wn7~-nA6mHLL$,, Oii)۶mcIIIk0(,,d~ر#TTTKBBmڴaƍ mI.]L LҾ}{ڥ)..Ʋ,vb?%%mbYVBF=ػw/7onnݚ.]\222aÆ TUUD׮]իWܹ3111nrss))) \EEEaYڴk׎rWуxvŖ-[mVZBtt4!!!PPP]߻޽{CAA[l \4M:uD\\aPTTDnn)g6mzIDD[n%??0m۶DDDDee%yyy/""""/o*ߏo{wq^uӻZj[dIy%ƻlj 81 *޹S jsaj(!Nb;N`Ǒ%%ٲ,kKkZ?J?hi{os#.^ nVɼo,/& O8Y~B!B!b!B!IZZUUU|>uمB,C;Pʴ,/׳lٲΆB!B!Ĥ B!| tttin"''\. M!BEfa4bnɬB!BQ΂{+B%EQaKLDF 0 q…q*W&;;8TU{E]{G^FF8bccQUz*SP呐lys^wVsq,ݻٶmJ{{/,,dŊ84M'J|hy8Eя͛j*Nގ2j94D"wݼv1oL%3Gӽ`x3kmmb4Mb0  aB! B@H`sDB,))))8N4MZ|``7!>>;wl`0@ZZaG&66ł6 ;2͔j\ÄaQYɏ &&F;66vXcccٵk˗/v>!77~{TDD||JrHLL$55<kN455~E!''WF=ʕ+1 c]LErr2>(111L&'%%Evv6Νc```1ʹ>&&&rAbcc1ͨ9MG̛0g䜸\.>!..nض#377z-[b V+FQO{Q[[u_39#>>~9^:w.k;jr 3c1:>=3?;w ILLUo ni0b~ߘLgM:EɶB,EUU1+B!>Ά4|>X> 1$A!ĒRXX477,5")))jGl$&& vz%771?x^L&466cw IDATŚ5kp\ر?pJWr!233QWvbˇ7 '|~z7>|dzzz8wJbb"6m"##{K/;K`$55p8Lyy9mmmXjIIIa4yngݺuׯׇf޽{1744IAA *n{b4шhҥK|ᇄa\.zl^̴f3"116L XRRR0s,7oޤv;䐝ͱcǰ466Р$%%a\.vү<4 TWWNWW111PXXHFF۷oɓ>/Kbbb8vu=g6T UUUn#++B8p/>c6Obߘlգ\G#ۿ+WLbĠ( 6MdB!@Q}F2L  `!KFd [n꼩eϞ= rss3lذ$|> 4MCUUݻeݺuQ0фaN8A("SݻwSIMQPP+B`0H8?tWWWe=tuu 1;2~4ׯ'55.N8A__AJSSǎ#--krʕa7n8X~=|>N8w:EFq߾};vϚ5k:jR^^˗|@@?7n 334NYBer3u zzzjii۔n:rssYr>SL?%%D4M^P(vvbG̴>9{zzzBB!TU}ٳTWW%q=zxtҬ|A= |>)((.y2S`a#߻mzlǪٖ`ͮ]HOOg͚5\vmObߘl#u4O$`2fB!d2a4x<;bJBddeea Ԍz~``&GEf6l؀܌;] GLӏ>}Z^/~>3%%e4 b0tx^}POHFM6糫@ OciooƍJVVְfi`ӷ~n}]<f1>χ ;x^=f}:i0Յhdͤcbb##Uf>J[[^W[0ol---|>hiiAQRSSgG泵ax<\|8s1zl466xrx<]Fss3\3ӱ7&٪Gӹ Df3 B!GEb`QUU_vB13 bXjE8&&&ff NalTUUٙ0Z3M?]pXbpL:]rr2Zt3nP__~8`tkWu~?nG>ՍZ}<.͛7w& ( G5>LFc26X;PHm7칙dݭP02 iJ7^9~@h5f~:DfM:n'R14!B!bH/  BYfB!Ē`ZYb0icE}l6rf~"Jjj*˖-ncZ1tD:P0 h?=HLa'$$/ɦ4MGNO15M[dN']]]y8TVV;FnׯzRz,cȺ튢 ;3)p8AMzz:)))rϧ3gޮi}s2fϙT,Q q=e>?3^\foLd>X m҆yyytvvokfKdOd!fSH B!`61|9 CO fB$Z :Ξ=;kضm#cm6۔i,[CK}}=/_`0+--eݺuSTUNoogHG:ٳg'9u6s#EzS;R8͛$%%QPP3磪*գ:% /tbd>-l泥^0L8VXuHOOBׇ6M z!hf394t,,z4^vZ9t/Œ( .KHNN7xcFA@2,I!B16EQ$$`!^||<8q[nEUU`H砢(RQQ1|4Xq8q)Fup hSgggsڵH---tܹ3]c6IccGWUUm6q\tuuiܸqc5M(qC4 ߯~页6O]]݄;p`ӦM$&&FM9vg~,& DbQ#uvvS7o&&&fNבu֑6Efynܸq fpTU%77 hnnNHp%񹪏p=h䗷 m?"A3˗/Dl[q٬¨ϥ0ftG:#2}c"4QݻٴiaqU_Nss3@@/~^v5zYoUL&ӄuS!B1ZdiŸK bQSE{uiiiőFcc#psΑAll,G466ۋj%;;-[ݙnw^]Fww7FIAAvߓ ӟđ#Gѣ\p<Fe˖Euu>l姭thhhUywIII!&&|k׮q-  \.˗/FFyO"==}T>999[HEEŴGiSPP@Qnܸ1'K<\z|>,0 i'%%eӡ P[fz"V+</^@BB+Vgəm u=4]HNNl6l޼̽{"\.ɸnTUT}YYz4QiFrbccWP(DOOg2%55UUǜg BLhQdB!BLhDUU.&4I0BE-%%Ezn߾Ν;Q<SNsNN'%%%Bb6;]Fih޽˝;wɡ,B`00f?q9>ٻw/@`0`h4ۿrʬ|Stz1TUUq`p4oɶmHNNfӦM[`04LҢjJyx1ˣ'OFMh4RVVFEEŬu744Ӄp}l{doN ;f3V*Ν;G0_?"''˗7ѨxԩQkG}9fz3v(--%==ө Ѩ$+ u=5if֭[G^^~렶w}w̵3[b49rTUUMz1G#ۿP(;}rD:'ԋi=ȣ6hY~81^B!惢( t9go!F2L|>4M a!HB,jէ^ZZZHKK#//gꝪnݢ 6n'שfǎC4}4~ӧOSXX7 vv`cǎM# /_krGQ<>[f=?MMM8q 6HBBgp{A~~ށG(Ɲ;wЇ Ԍ[㳟,0oߦkגIJe˰x<멬E_}6Aزe f7o#N:E8fժU\.l6>Vs̴oܸA?$$$`ٰl~͛Q_g>9fz3 tl2#v:md,8lmmm;]t`>nݺ5RMɓ'ټy3. 4"`oLd!jk޽ \|kKuu'5{S1B!XlEb`6I40@;l#i!o)F^'چ2*c<UyNry!X@ݶmۻ08RI1sCn#8WOvłiS^9..Ʉituu AVUUV+fY+ |~Nm=DFG>܆B!Bt: BtwwO< ͯhԷ B~ȏ_*#g{<9C>yP(d禧gxzi&Ϟ=o[V||c֑?ɿɞ1u=:ngٰX,aFߍeQ`~dF׋!p8@OMHLL\!BF#v},z L "*K__{X\v;&ݲzGG6>69ghdyidf!Z#W:"xvOf3Msj5'#OSf67~*`pXeiڔ0nH$_===455Mkc230W~}N𤮉֙d=QB(j`dMB\#V{Haa!tuuq]?p̙9[^J!ң(ʢ dP!NBիxRSSIHHjs#B1^x{=F# >|}kXV^|y @5LYw5glpIZ6C=ė%n7/"n4v7M^y~Oytݻ@}}#));7ng?ʕ+Ynoazihh'bTUl6/t6Yn~{V0@5]~Z M!f3!bI۸q#N::;;xb)())f%.--R^~auVoUU{>***|sc?# ڪOկ~#GpU<{?!X,|_g֭\zǣ>>9LJ~r6V^ͧ?i~9fQ]]=9r ~\HMMt6G$oίk1׾5Oee%dggsanS IDATݺME8a qqqdeeQWW7}EQoqQ@?tp1`Æ ;vo}[R"<455q-ٳggygr |fqMN'yW}>o|֭[Myy9p4o/~nܸ~+y^z%ʆ5 x^N'?iN>=\v:::F`gx^;&c8p… |>f3aT jK_?>,.]=łj%LSΝ:t>}Z/o~~?_׹w@|3TUUՅhѣ<9sWb6L O(֭[?̾$bu0a3`q>A4(ɱ]'maSyή|o\ =ԵQrO!8,\B,D(B!B!s~i~i/77;vChf={PSSåK)//g7Lܻwz ǃ淋{DQQ{RVVFYY|>o~CZZ99^\px\.רGp8b eKp\O?`Coo%"f3ǏgG?ߏ  a6<8s̨X,ꢶ>TTTr_ݻwx<nݺEuu5p8ؾ};:mmmA^t sN^|Eݻ5,#B!Ĥ8s--qNdrˤ"e0gK2eG@51!>df!B!B1o4M;0MMM{F]^abccINNfڵ:UUի㦷Z:jVF<)))dzl2GNP[[` !!aZٞ8gz~?[l᭷ҏpcj*ff3ׯ_V"HLLիz XximmbIHHwy%Fjjjhhh```1&4 ׋( 1Yh4*L&~zt+V@Q|B1-'"$2X ;|qW$A!B!B,(OKK III#IuJB!~/+1BӉfցo0 \.L&ӰQ 5#Q^^ζmϧ+Wgy#77*mNt ~0L1_o3<×e y8C~6 Y N'V׫?xl:+pĉaiUUYl٬_![|9O<111TVV/G}Z G?ȠpqOny CD%OsS Z1q'kլZ,3!B!B!ngŊhh]]]XV/_>,mjj~˗/|r, UUUn}Bl6(((`ӦMcF#r-JKK_c2سgmmmԌ oiS B.M@K6ĘgjuY!&۱Ev233ٶm6mZ2BL33DPF?^ZeǢ=7r=76r^#%33S !fn/tXp}͛Yf iiixQ΅GZZoߞbOP\\uZOOyl{\=RLD4, ~_F-}B 3+\lGLNNyyyl۶/| fՅbpNww7lݺi+W޽s=iTWWm6>f<@WW[laڵDGGl߾]OѣGyGկ~oM8Ν;ʶm(++;w*~{gmƍWWqq1PZZJNNoc8y$477g݋` >>5kְgnܸA0( G!??M桇b``V9x ]]]\.^F'`X9ٿ?V5kZ<dQ}ap8ryJۋ!77S\\̆ (**bʕ,_)SYY9ۇ8gffO}b~?mmmSކxd2k.l6555tww/H>霗N=늊Ylݛ\t Ž;ؽ{77;t.;vk.я~{ァSRRÇIII#==7ky(,,'O{|hp5(--eϞ=dffRSSC~m555˗/S[[K8|>N:E(t<Ƚ{u===Dff&l۶t:;;9y$xmss3Dss߃f3ׯgXVL&A H2_={(.._sveʕ+yGhkk瞛r'޽{Y~=Ν… ɰZ|_ww]|,69/Kl{4+v;`_3u^~LǴ^ELa}}}g`1"4M#11qs##==a!Ks (g>jJ===_zL+p/0ŀA83yrP /+(e߅p`N9R||<?ŋs v;&ݲzGG68!0<bMKp, #bSbbbt꣄ğEfz ٸ~zL&TVVPaӷ'..}jjzfnJjjjԩw?޻\. ySXX8mtM=uzz^i3 &XB!``9vN`g륬'OCnn.fŊX? IsU8 Ѵ0hu-'!Me}+ >$%@˜wn|MKjj*6mBQ>I~)_ b47nvZnL}C͛ K@3!X.^ %;Ht4?_>,L{*;wJ0W^vzQe^ֵ[( Y~? Q]]=W& lK1Z;hP(4R;b鈏GӴ< B!b3|dn݊hlΗBLB!&c``N:+"|GJAAR^^NSSӤft82JTUVcٸq#7oTbqXjdۣɾN4}ɉٴΫB!B,5YYY 00xnݺTUt~|7SO}v먮ĉA~ӟ.lοP>gfft?~x顴*ӉF bXyO>Ǎ?sfgg-_Q***سghbH!Bݬۿ( UUU,~*O6~F_B`U_0B:FJ|n)憪UU)++ٳ$''z*Ϟ=۱2 !' B!^ d9RSSILLDUEE"˹{ gggOEEVɄ댍l6>]jj [ɓ')++#11Ʉv"twwl a6IOO7/V_Xdeȩ.8.goz TVVu$lM(--EQ%ע:>l^{5z{{LbVfL}[(==ӧOSXXʢ`ʹ-9Kyy9׮][w Pm(ΝCQK{{l6^{5L&Ӣ{J6[OӱKV+v}!nr?e~CRR4}&ڵk ŋG4ZZZ&ž}f]4?INN6}gLNNWNKK3mg*ֳrQv&''x<$&&NQQѦz }}}K>|JWWsssZf[bw%;;$Jyy9+l62dggS__Ϟ={8{,RJOKKd2 dKuu5{족˗/ulv-_ڎ0iN'###SUUb0Cyy9&En9y\1dw1ÇE˖>, 1Lo&7o\zb6yrq}a+nU!BW0` ٳgƍ\.^{5 _~a|D&!FfٷAWCNOoSYYə3g ׮I8 IDAT]tBb ╗Gvv6駟vFFd nq*FUU.] ph4db``Ix x%Ѩ1iF9ַf.b9V6-2p8x{SNQYYIMM ===D]ԓtnh (n4Fllmgh4/KD"h(Frcav%RSS9puGoՑC0Wq~꺎 ]q8.]1.8pGM<~_rD"DQTUedd`0ÇiQVflG~ף^ڎ0i#4Mb HKK[v8}յ湿</ϱظ>/YjÇPUuI FH$B `bb}fq\ABш/&cǎ*--- ƳP(͛|>, zOLLrz]d2ЀdϟFB!^K,;/j؊eeYwCVbΘll@ `Dz,~llGKK 8&ى{_뼟bjj o- dggmlVN_6j;xG6@ d|YYYpk.o;V7L=zUUyp8L(>3Lk! NAQa/wH2Ο?o2\v^ZB]NB&''F(Çq5X,' )Ȳ{Q4#ճf[uکǩ c,vS g /===nݨfv\c=}t۾xNkk+P<ʀcYZZZַֽt#j >##`>ež1=srrֳYkyut=*~٬xm:_PRUU TUe```]/>^[ofgdzf}@zzQϟxB!i---ɟ w?!?M_| ? o1( ʄ#_7OՖ~?oP7' FL/͈9w|>K>$]d !<իWill$;;|3<<42@7l6񙪪瓟Off&)))XVf3ijyceeeA^wt]7Redd`2eUج=|ֳ@M uuu;v~>LRR===jj}%blxxOHHXY;}=ڨ>>Du?~Lmm-ddd7EQ'ONާkfJ}~qإx>dffw LL49n懨lܻwoiΝ;GWWU{q=_Ϫr&''XsF&'' !&02(b\cCw-K}}=~z׈F Jc&o>:::ϭ[/Ouio޽{ƳvVVŨ//˘gg0r^{מ|3tʠ(*Q~vg7؛c4.5T( ??$1ܛx5H0BWiƘ饥G^^vJzj{.llX={@FF h& ;/(c^Uո5y<̤{->r\6[϶~ہmiԐǁ8po(+lņ"YˉeeY7RemVfŻ~h<$SSSP^^΃n׵OJ̿[s,+CL4] fVB|0aS\\ZTU%==lg6 ]qhooz+))Çݽ`K(A(Zjej\ tvv`~ <eeeqQ$##.O>!cZy]dW<P`=,̠( a%+5~͇]P݃K.?>>省Wu k! 1;;l6eeeRXX;__nټ2} L.\@jj*CCCQ뺎444P[[c p \.`e[rrGc Z4yIMM4el;g]UURRRHnN>ɓ'INN荼^[o OJJpDž/oܸfz_by;}=ڨ:w>|"''*#UUPVVs3ο[ݻw3Ÿh4v %$$pi`⥮MӸyf\Y>u*'OdttErI΢ib۩?|ϿP^NƽϟdgƭB|\.z<]/ `> EAWTPL(n2)žŀ]^7 0獢D<(?yY0+ẍ́B ] B <Ӝ?lS)&"z%eeel6<W\/i [ysEmJcloVGG"99zfff%z0}ii);֠i<|zcE1'tϾZwB$A!זi~ƀ=$L&^Y^^u]-(o>miPb\/%%%9reh4jЍիWx"Vgbhoo_jlۘc`:.g[sssGo{n>Nkk+唖bXݻnL&UUUFp;@__bG_](6zHHH`zz/׋djRRRzݍͧ;)..&99Iss3999TWWcZ֭[ήY!!}HvdhegPT3*:>kрFIO6kySA|p@TA#]`9q0+f3/orHJJGbX^E ٳgtb6Ƞ222Ԕjh۷),,$556?f fn(zN?ׯ_Ӥr *++gbb׋XVRRRcϞ=|q5rvrssDUU4Mql=ۮF}6>|޽{0dffRRRBOOO\kFkk+?&njɭ7MӸs{Y2jRZZW\͛7#99/Aoo/NM0Lvhkk[vyp_6+{7\6bxԧծO<*l6ٹ+bZywxSSSL&(++p]|X}~xђ|>#`ff<8(FJ(BuݻGNN={Np\DQL&6 UU\!RӧO{.yyy;v`0H{{EQV S qݔq&GZZo6###޽{{;===PNk׮qQv;TVV J$yb!]י52LOOHUUncXؿ?===FC륬 Bny UUw,{㡦nr&''~||>t]_ ƒ ~wUJJJ2łE>XJSSӊ6ld|[pٻw/MMMxPQQa3N[[Ç|^P777Ǔ'OeQTTDGGv'oTғMUu<u jBGO|k !J$A!+Kii)YYY$%%D(000@WWnD8pBl6HY]~3 _R]]md5L\.&'' ~7Q.]D]]Ra2N4={  ''LRRR| ǷܐP( SSSٳbIJJ"11`0psFLBBѣmel;g$Q8n'==EQ|Ɛ /i[o,uuuB8rczzz8uꔑcu'=##4(>i^N/nVflG-ףڎ0iz>_}?~BWW׆VI45z9i 0ccc߿ 3f#E~EE0ߘltvIOO' n<66FYYLXz| vEëm5)''g2_TVVFFFׯ__t :vآgY>3rssYliii((#0>>Nvv#c~L0 IIIAQҰl;w8 PU. IDAT,c؆7vXg2B6ܱ-477G0$--msQZZJrr2dgg#eegg/ $&$TWWsA&&&`jj8fF^tl6ϟ7iTU]2 ` _/W^%7ٌ GFF ƽkrssq\fJJJ"99wd6=_~7!˳tb+ EožSf֖ΠW YTUEе(`}n<8|iPJ؅@CF6 fBl033Css3& 4?n+Cǟc oV4v/: {1F1c/|ټzzK;;;kؾFBu1Vd2r+ ͩ)nܸbYO `k׮d_(r1rUU]bY62$: /-v]_h555Uϣ͜k֧k}P1Dɓ'O6bn$ [,@4?e<o>777K4FFFYy xꢷhL\xXo !6ŗ FF- XNZ044.< iqn|>9LF  gZӧFxeZ R^8jACCC\.6 zzz͚PVuQocxBZZZ 5nņ[/M=~vq6[deei)\Z^^'OqL&o֚P(> 4vΦK.111adO>Yt`~o;Zjo2;;Kkk+~#@i#4M#!!aF,3Trr@~?BU].tm~؉`J2!9,iyᅅ:::kEעB  tH8{;+ `Bl3!x%R$lM6K _ ָ0ޕh躾=cDV}㲕2mfփBDž/WzWi kׇz_rmwGnkzV}=\󘼼<`>#&|ZOb +Y뼀_+2fV^+5&YYG4,8+/SSSl\.ell̨뺮=^/FGG1  SZZǏJD4bDe"Q 4M3s8x ccc\.RSS9pF#u$!--mCvnQRRb p;ceeeFl(=c׃P(ĵkx9<9^˵att3Dp8A:ĵkBPTTݻw7V3==M gϞfȠrZp8(0 VBN';wlѣdffkWL^^(Buu0x<Zk6x qal6SSStCZŞYFGGٷoLLLPPPǹs΢ "EEE/I4l377G(2q86;mE,CEKKd}Kuc-]ٻw/pa8y$<}tQx ***~%HrV viajgA\kĮúW_{r! /, b!VH0B!Be)BMM 0SWz- !Bux"^$0---ellÇ*tvvot:1LJFFϟgvvMӰZ|'D"!33!ikk70~TUƍFZZZxyqXV^/mmm |M.^ ~F>l_2>^/z i4ܹsgQ{466r3͙3gh"ws]N>ͷ-~?)))200}`0۷y|{hoon{1;;dbzzڨcsx1}}}۷A|2\.=zDJJ 999322b4z2ٜ={kdijjZ6{FJLL\3Gww7YYY\pmܼyM̤UU $%%1>>nde8uiiiR\\ ִuǏ?rmmm߿BM bl9[o0XR[[7 >|H}}=@QikkTUU 1ܸqCss3Ν?NtvvABM4Coj(kZJ bBfx\Z¿ͫ>{qk}ϋ\n؏-R\\;@\zm !bGj+++#??͓'Ov8B!Ď(((رc(߽r'z?u~Bkjax5az{{y9~][ǍNa\.n=zpdff`0ᠯǃLMMp8LOOxx9333x<xѢ`An>eqLLL ey^ǍbYYWm4hu݌2::Jyy9<@u1ɓ'177g4&&&DQFFF177hA|AǍ+eF p8et\ eӧ5Du<F6Mp\LLL7vgff\.z  tcppȨ1;; @i^/N}!c_\.q8KӧeREEh###\t cbH$0sssnFFFhkk3|B!c[^/cccFa^077iz<  q\155eX=bCun75D4N"V333DQFGG|hh6Ǣebvv$333Ft]gtt)~?~N800rCgg碬 ~9z0겦in/bEh"j7u׻!vXY8{HP(d__?44::~~X_+u fPWl`u/7ӂM@*|Q~tqBosA&''˿WV;<ޱWKߖrLl6<ϊc[|u.ͯ={o~GܵUd9utuu1;;K452`,bf3/^dbbm*ܹs\rE9 !^*EQHNN&11qW 9D|qr7[4ί.x$ABBB|G{G_X;aaq0j x)2̄B!B%ӛKcBY._LYYTTT( PM-L޽l6. ġCfnnn&5˂ X,P?/86P(" Z}_x!$ B!B!ji===;]!b[~:;;EUƂt|MFԴh!xjX!KJS2̄ 3!Į!L|%''cZD"\.BYV|d 0;d2颈MJLL$ϕ(Bbb"fMB B 3!bd B!2|>>o!B@ @ blV< )hT^q_@0]_g!BjQמD!B!B!B!`!B!B!B!B* B!B!B!B]EB!B!B!BH0B!B!B!B!v fB!B!B!B!Į" B!B!B!B!U$A!B!B!B!3!B!B!B!bW1tB!B!( yyy;] !B!^Ysssx<.$ fB!B!+;]!B!^YPh +KB!B!IJt]rt1B!xe.,u B!B!B!B3!B!B!B!bW`!B!B!B!B* B!B!B!B]EB!B!B!BH0B!B!B!B!v fB!B!B!B!Į" B!B!B!B!U$A!B!B!B!3!B!B!B!bW1tB!B!B!(UUQEQ^u]G4t]B_ B!B!B!^`ZX, fFDQ~?p_!~H0BIIINA!BbӋki^{u}N⏦iD"BкC!B%!!m2LL&, @+Y"ԝ.B!B!3dggKnn.999dee.~EU^^rȑ*2LEvv6XVWnxwⲾj;x [***!e0L"E$''H!:]W{!x tB!z{s7cË[OMӰl)k*..FZZ0_n7CCC||G8rn"opiكlpG}ILLСCe9r/[ff&G?:B( ɻ.˖D8 gBG/B!B!\rLVV|Sf3N4"nƿ>dz^Ǐۋ>OvTB!ībtd61LD"[j~?吔40YaX68C-a/G0 ! !H0B!B!1NQQUuC8flll"BrL&NaMlW@9 "ثg/2t@_bCIqr !$A!B!B옽{RZZʽ{|+No rQ;G}ěoImm-_,o.]*~?׮]ƍp*++455 8|0sO4Lx9Ed2}??crrrա% IHH>i#}bv={g}Fggz!~-H ^NE-9<԰0: I*X8THy4fx:=!ZLxއL Y% B!B!9w%%%X,~ӟ933JV뢿SUUen8}4n^v9sz۷oksEꢣÇO /// f(++ܹsg>|·~H]]7n LcHKK[555oCUU?uܻwo!BWCl{]_2d._0ޠF`_zG$9/ JL}$A!B!B432^Q"{~:l6?O~B$1,'Wh̿ӧO?h4JZZ?7իWx<\|'NwQ_gd! ¾@BЖkuWmZjV[kzmmFNNC!Lf=GȔ@$~>ߴ4q8̘1vmZZZO~ʕ+;w.sᮻ/|47r+)ݻw3w\N'^5k0sLƌʕ+aҤIlٲ ˗/g͚5 0}xg)_"""rI1o@|yV28Hqլۂ=jp`9鶈\ """"""""=* R]]MZZ.2p0"7~ŋ//pUWsNN< ܹkNx91ڤś|kn *v=6|h:xn褱c2vXXf @[3waDDDDDDDDDΡJqq1---ضa)SWWGLL lW7''ƍmӧs饗f͚ IJJ"))ƍ477w>p8̄ Ñ]fn>m4vDDDz+0d+<ʼy"]. +MB?.w{m`یI(.iXG\.RRRKΝ˪Uf„ e\.?O1c.7lذ~/' Tѓ; IDAT1Ҝm[`[8 N!5k˜1q,31,C]VGˠA߿?&L **իW"rf.s vs>3bVXs=mXƏOaa!w7M͛7SPPmSXXHff&'Nd~֯_Oee%x^ƍG߾}ٲe AƍGjjDDu `Μ9y睸\.rss9Lrr2}!55(:-B!aD68nL,9tb XG6\HkM ;Q0Gl{mǴiV"rvlێ\k{ýDOtw\GmeY$&&ܬ.RmO!ڶMZZZ7rH~cjժH>:apM7q}E2CuFmm-=M#A- MptG0!.ֹ[|/el=n_~@]ׯ?N|477+Ar޴i#@:l1}O8uCG}0$:4-]He&seٳ#"""Gm 6xxwx衇O%&RΎ\6( Cl:tÁͼ8p3cƌ`3Ɣ)Sزe =90 0aBdp8̫?Oaa!UUU]_ر#RK/%99սNM ٭mcd$v>kݚ է[ ){A8θni#uuu,\0peqWc})ADDDDDDDD mܸ}s۷""""GΦa{b۟,t:8qb8ή_8`cc24(Gk0a^b jjj3f ]vYID=ycDDDDDDDDDz:z"""rp8eY'Yn7i +auOHȆmc F73O2BmywJOO'66GeeeED: """"""""""""ҫl߾_~HƅQFs\Y4k"C˗/go춦#KMl< n  -mvp0zhfϞMLL ʴ%rR0*^{^ziiis=Ӊ ::)Sp7Gٳ7lڴ{;Fvaj=g !/c9q:x<-[FYYYGDNNLHTWWnYI&1h 6oތ?Hzpw~dNF > h0l PVg`ۅ-Z_WudԨQL>hX|9葾ȩ)ADDDDDDDDDDDDz06m suםޤIHJJ^M>= l UM\>,ԕBim]^0.mhi2tPfΜ墹E)#yNLHc6۶mP(a۶ ضeYl۶.xASi7cK`lg-ޮD5mιbÆ +rxX|9eee9} """"""""""""Ҏ;/fΜɇ~HTTgȑ2YhӧOr`ZZZ:(] )## ߚ*y%4X0\ ջy'ٳq\466tRJJJ"rf """"""""]nر$%%̧>)o~Q[ &&ۍiXE bY CDD䂰sN>HVl餺wy*^}U ߏek`<57֬0,+rT"cǞaWVre!o.1d--!rQ0t8s2DEEuSzVBBY('&&&>557nٸ\.lێ4}H$%%~OwGDDzXd DEEQZZJmm-кD/;hp}`8p$30j?ǟL>sҊ a96&BXDCt|>v2"r(ADD.3g?iygyGiw^^oOwӎ\|͔wޅ:^ӑ˔)S(--e455a6a¤I馛Xh=]bcc={6W2˗t7Neg0^GW7 pab8,p8\w}fIg`ٰh{OFj_:#"_wyçzm"""" 0pqKSi<r}sݸnN'p8;66Bs:?yvmنbcciw޶p\0Ms'ԩSٹs'?4Hv:.]6mZd7volllqE[h4pO47. 00 #2Σƶ4뇈Hb[P&TYbu 0<_+&-R(kaFߡHݗAD.l ""xSkjj:fffPWW]0 ƌ4h=ܫs!55n>}`6EEE[`0x\ٜ*^~K.\0qDC("77",YroF>z72|)))aذa78LӤUVQYYIll,w}7 .dE۷/sa4440p@.r>Lff&.Çfɓ'qF***5k̞=:nʤIgA^^#G;7ѯ` u4]0 lہplԳf>3#'йۉa yyai?%`aFkqa - ""N/'p8,Xm-[֭w%۶y?>[laϞ==ݥ.Օ͟ep7R__Ozz:ӧOyf,dӦMlذàc%$$P^^Ά 0M+˗5\å^ʕ+9x ^z)}'4heee' ^eРA,]FLs&11׳~z\s 'O>p0~xXh~QFq[ob Ν9x @p8̴i(--tr%D|`0pƜNg`8ؖ H&@usg?[*zl:$OhoQ âmSKCպ|Es F# "C """K/K/6xEDDDm@ii)кVu>}6lw>eaΝ:HޖUm "dddPXX)[XXȐ!Chhh < LӤlذm\.N'QQQ|H>|82^1cƐNAA}%**={xx<޽iӦr4ETT gmض,PUUn\1g&**1t$ w={0~x ..Ai&jkk((( 774 ô@qq1c T_DDD.x-5%ho,yzv+8,*?/,)oJI!#E|tk0C dS>Hi G7 2iS0tlv8!`ʔ)1"򾪪{>q>Y0$??'GZZ@ aȑL<9R{Ô)S={6#??Mx-" F INNSTu88p@dc6a tHJJb̘1p8p͇@ Stt4̚5I&EʄBfl޼zٶmEDD.\gũ; sV.u5 r>;eg0 lp : eb;Vo(L!e^mF9 u*([|2șP0tc/b Ǖ, 4Em۶y ΰǭJJJ1c))) 0CE[ϲHٹs'7W_}Sxn|>㏫cAtt4YYYqDDtϻeY]tjeP b3 y$ m}N<p&l l֥&lumaX~Ճz ;.DL)ADD. SL׿5aSOꫯvX;r |s,ZH|ow4Mn̙Àm{e?G.|殻d׮]z̚5`&EEE_^z 9曙1c#-- CMM }>;wݭ[/}s9o'""""0HLL$99:k`6nht:ׯ%%%8N:K `bFAjj*K,܄~i]Ӻfbbb9s&NS7c˱m\#uNgO4q8XYڢOMMMdeeQXXW_ܹs r1cIIIl߾FRSS)**0HMMmsPӖ?x|87p.Mss9Ww;y<ωŦ_O0rQSS͛#O03aٹs'[l᪫d:-Нǵ^KUUU0aBPmvʬ m|>K.eĉq"oNii)W^y%^{-~!\veDEE}vرc)//;ߟZˉ'%%jkk#m6&LAXyd6k׮eҤI <ݱ B[3g2o޼"~Ez),,dҤI :BFC(**vYjs\D,ˢy[z0" Ng "皂DD䂳`SYr%n߳>˄ =z4O<_#O7~?]6Rnpn:olٲۍ=={`&yyyvJJJhhhhÁ:Y:bbbp8xSYYI\\~:RSSzP]]M||<~Z#+**XhQslٲMҥKINN&&&P(DSSS$(b۶mt:innJlffMr9|>L$::ҎeYx<]b`v "皂DD+ʋe# Bdgg~^x뮻=UUUŮ]hll/';;2ƏObb"@둋muغu#''j/PUU9VZZʲexGۘ3govَu<\̎ɣpv۽o{sv裡>{\ֶ&KJJpP\\ܩPㄎ砣 eݘXšC"`z,^iӦqmQXXH]]]d 4ٹsqp{o[Euuu@v8p9ۖ8Z h\qP(nl;w#""۶xwK]]wРA\.o~r`Ȑ!gN]]8#7oތ'**^xW^y+Ww޳Jq7h ֯ ˗/?a9ǻE|h\ݭQDDDD.\v IDATÇnݺ f笠XA""aZZZz""҅ ""xKfpcY1ѱq-׾zGO>ɤI"7͟y晳^:/>eYXyIKK里͛7rJ/^nMh ;e*׶YYYDGG0CƉjEDDDeY/ """""r!S0ΰq'$awl,,؆E,B$'&s0Q=s f?s&''G^ݻumvsԺu[5kSN.#++Yf1k,_Gyݻwwqqq@ran[©ʝbEDDDv!)ADbgY-Ktt;Fl p&pچ₃zM7СC#~avqVWkkk#x Ϧg,h"-Z@ff&s{%##_x㍝,Жm!&&}RQQq² Z8I:("""""""""""HKlHIJ&e &LZR[mQޱİaxGm|M6ÏN-`Ö-["os߳U^^K/ģ> @RRcƌt`8f͚f6mNwO9SS0 'PG8 ½`a8bA„HI`Ú8,w|ӣ9-qqq?v_4662l0wXϲ,Lyy9 .[oeҤI]33TZZyz,[ {7o6.?ulla lh()AT̖nCjj*P<^ݾ ygG?O>$wy'7ndŊǝo׮]L2{۷uV0MFz)&NHzz:O?4 ,@ @tt4#F+=p'o~5kְyf˩p0bĈHFuu5{=s`ԩK/2_? }\l3993\dӊnOz,'Ǫ?ocST WƲ-,²lpä`5oOZv?vܳ>ˋ/y?|*=@ rlŊr-}xhii!::W^y_455}`}}XEKK qqqm޼ןT3uTFŨQ;,zַuA|>{{~}YF[p|+_ᣏ>:i|NDDDDDDDDDDD "rq%gu81 EK4ih-M֟V8L0b`0!(cOo߾K/eG?_rՅ̟?|+呒BiiidY6K_^{-ӦM#77 (((>71>s[ѣGAjj*n:^}U[ne̟?< F>}b䜎'^ޖZ>&$~e=7(^{晖h:zm,DODNeȅ܌aM.Nqqq\՛6mzhBG:fɑm (rgEDDz3gۃa91qjqX 88``" Z}#!tB4 +4NDDDDDDDDDDDD{ f饂}c$_*EeYfU !,B4xi6 #}`65h4dՒ/4 """"""""""""甂DDz!+sh-}:ix^ʊ-?"LMSaF"8GG'` !To 9p cF;:ꂈa` )ADjN,fʴ!)9aD=:aSA0m" Xfjou-0Pnc6㏪񉈈Hihh.\^oOwA䂥`^ȑ_V 5*„0,U{[0 &`ح`ec(醐 ݺ6px$tDDDDD[ٶn\@OwA䂥`^t$''h/6aAa`[FkCAA' Gm> TnrDDDDDDDDDDDDb`^ cc- ;rcVkPC[ I0с  fpE#"""""""""""" ((,[h{|DHILt02t&8L0\IJ G8Bk{h"""""""""""")3H/I`A5#&t.2Ӳp4Wfm`~5KAbL̡,,)wO@$Fg_`0lp2P]e;on`GVf}v㪨.k$%{8Ĭ" fBNue8QD5g?fG"CG6 1ϙJ J׏>3MEkhjib5$@C\LvN-3VwcƌO9,vY0`XV}˛ #CUy#ز p p&.'vDDDDDDDDDDDDWstDDT 0bؿ0qUC Ķ-dW5;HK c#LDD.mq؁A8laư8„oG lK """"""""""""rn)ADdYmlBA7A؆eBIA ΖvCqU L00}v"6.#jv ؜ """""""""""""O ""˲, ۶ Ld?b4 6{0*% ܃+ ~ l !S$˶0MGeffҷo_ʨt 3rGgfmWUUK8 -2p8R0 1][7p60jqٱC ɓYrDDDDDDDDDDD䢡`^0 Lӌ,a6 cE޷Z'dD(e*:ip8j""""""""""""rQ0H/p' N8ngˉLTT'\2,:yn7`S\HIKKx3M\ȁxw8q"#G$!!*^{ȅΖ93f &==4[bԋ9s&3g`޽{l^EDDDDCVVoIHH%K;9222{پ}; .ON8hNR>}k>|8P`0?`gEGG3oqPșP0\˗G.Z&$$pM7nJJ .zbllg͜9Yti)t͛Gff&ӧOggUɓYr%[n=I9x<Ϩnqq1ַu к`~6moqdzijjޝ\FF7)..橧4rDψ >N1`. f0c !_k@ jvBzC}W]HͥEhop'|^{5ɲp'+ׯ_?F\x뭷,ѣGrDDDDD@ @AAAY z/^̭z2 N;wo߾͙3϶ ds ߂3 q D%9d#ضպY#z:F CmD䢤 ""r`Ν Oy>tr'G]] > jkkϪhΜ9\{̝;ѣGzj~_?ҥKyGy79r$SL,mƫJii)mǗe^uN%\gTTTDʍ7W_b޽۷p8 7W^ɂ k5j+V'? o"4Mo|$&&eB ,`ʔ)̞=c#F/g?p8泟,cǎŶmv֭[6@'|2Ҿa̛7nǔ˜9sHNNf߾}lذÿn73f`Æ ߿ ##o)SEaa!>֭A߾}?>]vQQQ믳vϝ׿u6nK/ϧ""r11ICŷ"/mliBvl7fhxi[Շ{8>Wnȹ M8JȅA ""rk{"LowvMSKKK;e?>|8g]ODDDD7曙0aB}>?å^Jnn.`ժU|@k@@JJ N~#qF.\H~3f ?0\. ƷmV^ͻˀ3f 7 B\.}QoM0d̙<|{c޽DGG3a#Asд&OՈAw~}bпM|a'Jz,`hG|ckv]犟)PMH- ޙ GBL&0x^J?^?O) }ZNB!(Fe1s:|G^Ȝp^z_`/K}]g[k.}Yk#p᷿-կ׿kfȲo߾a}ٱc?'`ҥn<8jƶMxwٰaO>$v7 ʟٟ:wܹ^{W_}bǎꫬYfxeoz.B`!v`IϏxKUg $ņ۽&h7 B!xvXlⷋFtuu2ZZA@׋ 99я~4lC9ZV.\?QUe˖o!!;_|+k|xHZTTĹs&uS!B/EQHNNj%++B>l ymm-@G]]Mwwi'`رc?O)((V.]4ujhh`Ϟ=1gΜ3+@ww7QRR2E~~>}}}gΜ 6`ۙ7on [#JL`Ν;//~ cO`yaZC0G,`e={۷|g?٘ B!}E5?W̷5$n^X@4ܚ/q.^JO5]xf!@B<t]<ꫯ7=e~۷oD?t]*W^ܹs2@]]>\oIrr26!B9UUY|9sΥҥK, Wȑ#f3k׮%77#G 9vظq#|QjN)[Dmm-MMMx::+xzi2$xRL) Z 0+0p #$v [oڵkvt/^W^R曬^<222QUU͛7up8{dž a޼yttt`GdqB!l͚5\pիٷoG6SO=Evv6dddj*}*++صkK,;=qJJJ8uԤFٽ{7Gi?r錫W`ۿ[~ӟrI k֬)999#J_9szW_}2*++ rUo>j`u?wo|<\t~N'TWW:N'ַ8r7dѢEk:u.]oo?~3>3^/\r_#oIZZ/2ڵX,6 B mVu t 9f튂$Z|n' 4N<KOB<00|ɈSSSߕd'?ɤ=`0ec&=Ǯ]<B!P(ŋw.*++G-S}x%dB?O8|B!~_NII >Gbodݺu,XP(˗3줲p;]9u7hhhinmmŋNpu_=%%%rСۼsr…a?4wyK.qFܼysw===6mo~É'bTWW믳n:JJJ8p]]]|穧b…q>cZ[[6*++? /PPP@ff&?~1'"~z*++ &B!lȨv>//:+ X4M>gv(3`qe t7ţϔbÑQj =.ABK3fZMG_'Zrۿͫh?}8?SFy%MCu0BL 9s^}yK/qe8p#BqW&[JjF|gO|M4Mr_l h_׼cNb oСCҷB^u}]y)'Bmef2$tʠ19*uF Fuf6DPPN=go gf)S¾g.d0xc" @цob8O B!|>/唜b9z̙@WvK_0"FneVQ'D!UT F+744!B! EQX~=rq dB!2| a0 gf2- 9@3V,'mǖfd :vUVV>' w#Zl3CB<f3 ,l^!iѢEjZB!B{bejjj&,1!B3o?^['ݡ29;U˳l躆nIF\&PջB׃ɒD̅F_Od!wӔ<-P=M\SQ19suB!RNNO=O<An7)))o߾{E!B!0PQQoiB!WR̷Bk$̤gt `qX; ջBS-E5Zwشj"gVJ6 &`o ջBob$A!ÇSVVFzz:tuuQ]]ͩSF%B!_F7oOOD"NWYY/L(~SOg=!B|g$ttt,լJ)VeqQv]?A<`k Zcf+˟WQVB}m\#:foBɑ`!p8ŋxQ"bB!i>o.XYkO!_Zl֚tMӉk` 2B(RNKT)  ?t\[) J=?cƌG1u7F!B!B!B1w ,D4)9|ClveFTH+FŶ9)@O3WvNOYb$A!B!B!B{2MtfY܀縺 "I)d-~l!Lo!&GB!B!B!׼7gA-=YibH?zf]pk{~J @k{~*jcB!B!B!KjptBQy|fۼrcP:PeFMG1b ~@Yb$3B!B!B!fE`,§Uyc3~ZzÀgg6^1QwO!3!B!B!BqEYhH|)* yX̔ZyX;qMo`f{HD^B$A!B!B8I^^Vui222ə^M,%%l %==Uh"^xikk˖-^zRӚf222c޼yv}o~^wC!͟A >P pT_=R%'%&B!B!+((`ƍnF Esl҂Gz~j%0-B|9H0B!B!fz7nǍEax<aL&V\IEEOƍD"Er IEaҥ,Z*>/vYv->,S!wC棐Z/~Ia)|^jB5jJSU-rwРi:w5*(V%5B|H0B!B!Jii)555)lTTT@jjy@`0h|n5c2HOOX,fLg4̤O?czǝbl&4m4vݎd" 6JII1Q4rssYx1lDQڵkYn;v p80LD"N'X>l6v`0HJJ B$%%|>0nJJJ ^wX `*X,'>aHNNFUUc ( 1O f, pO<GUURSSFrM&A㘺j/}i2HNNj|1N ncXF1fp8Lm !95!> T3q5ު{ XYjz۽߈?jAoBĄbr$A!B!B ǭ[Xx1n2 4&c\QXv1 77M6ox<<쳼[qYz56 Dss3Ǐ'y v֭[Gnn.fX,ƕ+Wp1ɺup\({1xoٶm;v ҥKƍ0z-*++y饗HMM Į]Gۍbj,XbÇ,Z~_,[۷fxq\L&N'ȧ~j#x<֬YCFFf`0LJl6nj$Kjea64jΞ=kdp\۷P(D^^6mb߾}3f233QMعs'C=DYYfEQhhhѣF3 0; s%tE1IGanUSU /Gqq}SWWGEE~nݺEFF]]]x^ioojx8uԘۦ줪rl6nDUU,\l:;;uX,Fkksαi& rI#(͛.pǏahoofz<G14jRTTDuu5]]]qJJJ4KK1Y~=zֲrJl63![4?({J4|1*̟MQ1C1><x\fEX\FEQQ"(m'QnG4' B`!B!B1kt]r***(//ɓ#73`ߏ餣x p:hf ̻\.̙?>,p{ܬ }}}aX8fAiM&??EQXס<NtoLRRPb1l6֗  huH$d ru˩.\?RSS BF  V!%%eX'aQfv$b |,\1mZZhtM08aVubyhmE"TU!~e+暖+:* ]3'i4hꉀ>lUE@W` CEQ$#H0B!B!Up˗/yf|>L&c fDoo/B!rrrp466 ae4M10~7oR^^βe8Yiiii(\.^/ p:1қ`ժUԄDQ,1#??7n( yyyl6f3hFOOτ <äS\\<`ߍrLab~A`0ptRWW7lCb|hF4v;w.tRN81j`I865?gx@ 㡡r e!.֓q.H+RpdP;[ ::` ]]C4t]Cib]Qa:zP! dB% fB! Ws#d7QB1~a㺶w{!]}}=.a ,_r](,Zg Nmm-jo>c&VZpXlOQ]]ʕ+Z\|o A *V~z{{YbrrrرcFֈ5kPVVFUUaZ i\r͛ٳg#p֭[\r{[([p88uԤJLU0ŋeee`N>ml,rrrhkkr`nܸA8 UUYt0ʹ Vy؈dbٲex^^/b``L 8}4x̆ quuul۶VnܸTTT`٨̢E>YV"hF,X@ss3pBjjj$A!숇!9jT%%n>kQ$Aq7$A!b0|̙$%%x2Jcc㈧gTU%##7n{t-))IKK3 hlleēo<`ݻwO*-+ChjjwZEQ%//s璔l& Oss3nϡ=}4ՓPiii߈,ܹHuFJ$! t:ǼX4˗/s v;&X,F(2:;;裏X, Fٿ?)))J(2t5lFDG"]9|0)))B!t]ŋ<3_ӧOCww708`0000,#իJ6$v~JdDHr 555>XիWug---?~$"~5? f~Z۷HJJXbt]},=J1eݾ~?gb[k63!~$A B{EBRSSٴiZ=J8&5j/łbvKu^ʢEDL#lss3hX,i(bd?0XVRRRFp:lذ={uZ9srO>h4J<7x5<7nvpBB'Owr)egX|96mJ6iLv{y$|k_F/c-Y QKq8 )//'--xud4v1i\vb ٰa---޿~&wuuMh̝;w`]9< .P\\GLw{Vfq'So|+`ZQUUU4 ]%f躛fݺub0L4Q^^εk8}]4ӿ>,)))l6TUOc%%%dR˛l6Fmm-]]]x^v;EEEٿwگh4ʉ'"##͛7sNcv6mڄfZgo0L|'ܺuРnNDMM p8oV'|CWWv,fBff:L&nJVVq9Fddd`̙Ò%K0cw^1B^  bp,\͆ hoo7N:ڷZ줥~dggh"*++'\f"+0 |_w9Ooo/'NGa<{O`:pd" 0gΜRRRXhq;ʐ64S >ňbJSSpe˖1|N81lw&p7:t^x/_ιsPGy 8y}}}ÞN%.q}bmAuvx]QUUihh3K.%77(H\YYɇ~| z8(--e۶mY줫P(D4E4b>K.ӵD"hiahkkCQm@ `F \|VTUsh4f+W*ΝXiD"z*RPP0}v4 iii)ǣiW^֭[XVyq#%1t{:$3jlDV1'g~ߎ:qĔ9]Q< 9\xł1晩nm'Od2j*ΝKyy9eeeA}~0Hp8<}f8JC hX01~x"^J|UUə !B!B) DD" qݔ3|\.+V0*1@1.Xxrrrp:wN$l222IKK3#ܺu ]GLimmm`ZG<--Q#>;w.O=ԤID"9r}kdddzj=:~\qӲFQTF0pz]׹p .$33BHNN62;wFM5>M"gw;]OMM5ƺNq9?Sf8JSYSSӨ'$!B!BO$A!I4 `GGGPU,HOO'99$f3)));?7\..\ȅ rEAӴ 'shvEh"t] tG+3u|ޭ% OBMMdkjjhmme޼y䐙Iff&n2z{{9|w􉮭/L\cY4"Phڲ׻i?d07zp7f;dO\ `Xa; !B!EB|aDQ?>bg%DH$B 2ȑ#,Nv]4Y~=N%Kp…I{73g+WɓUVFEE/_T[qƤL$ pU-[ƺup8\~Ȯ񠙩hϻwQgǿfL&}%$H@@QZں?jھU\jZ۫miZbQV T !;dOi&31u29>Ϲ3<[0&22RyGMMM@˅LrIyy9:DFF$''se~Qw N#,,lo;R}RK1p!V+NSih>),, hf:~:)ןގ@;wTʹ笹B!Bq B!*F/(;EP222hkku#wmq8ɓ'@s9Fiii2ž={Xp!EEEC.qURR9眃^sϥjđ*ycav9x (&> D⊊bѢEh4lBAA ,Y~{܍S<v]iZ455ҥK%66vKxUU*8p`zI,L&زe rۉRStgcbbwPGR1mڴC!BOf Oq B!<>hgƌTWWHj4 z/!!\A D~x{{;'O$33B*++9uTPc儅{raccc:w,YhѰd׮],^H-[!Gz?|ػwcw܌b>&dG4OT\z/DYY477j*8*vzD7n7J,c=Ҙ3g555477\^^ɸ\.اoz<zzz֣ӧOv֊:~7w\jkk^?j^Fsjә1c'Ow*B!j,ħtfB1Iww7MOOjpMFNNXVm6G.Zx?j%44d=\z=TVVlM||<Zv}v cٲePQQAGGnFCtt4:thԳx<yXx1&瓟OUUx ""4RSS|Ftfc۶m\s5$%% YMii)&"Xr%'NՊ",,$򈉉Asa>qͨv裏(--reVL#q88?7Q0sׂ HNN;wp8X,ر%KPTTDCC߆f5kuuu4553DףGqq1466EOO*h͛6nvArr2F+Vp!d2) ZUO\tEсVl6Gxx8t n;w2uvvb0HOO';ssr_cn7v"..0.ʨjvQ՘f9z,5!4g<B!bs:ZҙA!ĔV1 DDDr)j^^ԩSرIzx^Oaa!999\.4 Z0*++پ}Fꪪ*.Z-+Vrev3|;w.8N:VNc t:9~8]]]` 66s=DpIۧ>}1?kٳg{DFFRXXH^^7jNGHHڵ/U9| Q9RD5c f̘W:TnHII!77%Kk.*f3W\q}}}hZٳgOP-iiidffP:NJ}p8زe˨:͛Yp!fyp80$$V˾}8xY՘]]]LOZZ. JFAp81/ǷX,lٲ'}}}J&3ݻwsW{{bbbb8s>}NѠhPX,ӐB!B!>3B)o׮]:tRSS1FñltuuHEEtwwOY((( 99Ʉ餵{RQQwjﶶ66o̹Ktt4:0}Mmm-撜l&""EOO͜efIHH **}s_ظq#EEECOO&h2IOO'&&PBCCtuuQUUűcǰX,c͉'hii8=ӧϺv;[n%??qU*qo]p8#T0q ASlr18a`0(y Fxx87t{yjBCC}áthl6+Ƿl~׼w3L&]]]AYB|x_3΁B!B!U*#>tw? 8??~3=΀=툥OdDn ҙA)C:3ߙW_pB ƪUp8}̙l6zzz0 3o<¨jCB!B!BҙA!B!Ęa0(..&""0v;RQQAOO'B!B!8Hg!g>PBIII ZtbٰB!B! B!'C!E!B!BԓB!B!B!B!DҙA!B!B!B!StfB!B!B!B!Ĕ"B!B!B!B1Hg!B!B!B!BL)@!b͛G~~>M6Mv8B7UB!B!=A!aaaDGGc2&;!:j8t:d"eS5.!I3}t'd ̜9vr$PPP@HHȸLAA1RTPPP@^^r|fB&;!B1Hg!B!_|1W\q]wfGl|r~2ù E111<\s5_DDDLGd~ߑ4ϟo[{9}Y.\ϸKXv-_xg)**7ooΞPB!#L!‡wT__.kbbIR$,,f3---gd_?2{lV^n'[jJV^Ϳo^}Ia0pI#%%رoP3vNgfӦM7I !BBl6Lم&ڿ?86LuCLvVZ<-l68I]QTTI#""V;cFa֬YDGG8F!h4q]ff&^e̚50juPN!BL< B!C Eqhmm^cʕTTT(rus^VN||=h|iӦ#G|SPT,XXh}}}߿_9P222FN>=GRRFjkkx1_pft:^x!6{V={6UUU>em6),,СCtvvj ::VKgg'-:::"##PZ[[f@JJ z&uTdggᠦfT*fb`$$$6*++2 Q]]ͩSGFFRXXȑ#GZCShh(DFFGEEsrr0JGOoy͘1cHJJR򫨨ĩShnnfΜ9󮭭G*d2`őȉ'HMM%::NUUՐG!BF:3!B!B rx뭷YtOg ƍNn0Xj7p111x<Z[[y7y饗tq|{SZ-_җ(**;L>o}[̜9NjeJ\\)))L>W{兩D__]]v ٙ` F%\­ުtfhjj⥗^⭷`ʕ^{AEE?o$$$g׿_Wb>}:O>$_W9rFnK.ɄV^z~7 RRRhjj";;P:;;ٺu+bL6 ^O{{;6lWb eժU|_l6+~ivء\~bZ.~m?KLL O<k׮W^Qb'k_{F|;`2p\߿k*ō7̙3;ikkSMGGw&7曼{~scʿyZZZq$,jd2xhkkbPZZ:Tj1LFau{{;GQFL e(=?qݬ\oo~~s!֬Yu]7dݜƒ>3<$..0p\z饼KTUU+>~JTT7|3ٿؽrJ?<@__iii*K//~<޽ŴiF.OMMeݺu?ns7s7pB~s!t:vw}7;wTbkO~ž={0s=<~>eJJ _"7p'N9EQYYɚ5kbܹs=<#y#~z_~;C `ݻ'xW_}Uy=))o~VfϞwO~n~?4440}t~a|'gB!D3BOX.]hDףVQոn<)))AJDGGZ+?@ttiˆf…8Nbcch4%l233y=` t{>ϟOFF!!!h4j58N)//g޽?66Drrr0 h4<σ)SNFqH@0]`??꫉U7_0 F}l2zzz9~\\ӦM#++?`@բR"%%L>CN<F# , %%NZCzz:l߾סf;<fY}}}JBӿo/_5\ó>ҥK1 |_歷bÆ J_W$%%qUW믳}vV+]tҙa֬YDFFeT*_|1aaaWw}b.]3CHH_Wٹs'?Ro g֬Y̛7o۷CKK <\q;v.4^;ALOO;'xog̘1%Kpwg%SNK/rQuft^a]~= .dɒ%C}2:/ڵws=l<6l$1 Á@MMM_^baݺu3k,c@bcchllr;?^{Mm^`ݻ͛7+Z֭[ŋ3g V^o͛3?OpqF87P3pe1k֬;38Nyw%44~̟?_(*/_8q͛7jyYxR_vɛoɊ+uN !Bё B!<^ϥ^Jll,ܹN'!!!F&Abb"Nr, DDDF~~>iii|7xh4,[Dn7ALL ӧO'..Yfjy_XX---P6l@/t,J9Vˉj*VeܹpEo4)&Ioo/!!!DGG3sL illTi qh0,{_DDǏB{{;aaadffOJJ ,P0wttPWWǴi ;;FCSSߵb=w ̸V+555L!CufU:>yxVl?exyW꣈j5呙Izz:^{-SWW\Xb…455 Cr饗jeJp9琔ĢEظqĉ455aZcbjkkٴiW^y%۷oka֭TWW|jj*F={dww7۶m'$$nʅ^?OWW]v;wbV#22~>C~~>IIIC?99y{ȟ\<P~N:ÇC0{lz{{)++v%ꫩu,^999jScc#$//O7LJJ }{ʾZ-$''96∋?O>{ 7@TTԨ;3TTTsN.]ʑ#Gؽ{7U}R8s>}: L6=Aoo~9z([l d}okkwPnV2sZrr2QQQ(KNyJ犡cZNYf~HKKCR| t:9994668XRRBcc#NόQłFB! bKHH 66ÿ/:;;q\x<T*jjl6ۄŠVٸq#---8\.*, -"993g*#49CJJ 6Mt*O8^Hnn.3g~G` 8ClJgwzhys!11v6nHWWйZ(((yvޘn_UUU\uUL&rss-Hh3B/XVN'. ZM]]6ٳgǮ]vSVVƴiHJJ"""ӧO~ƛߓYvSZZJFFDGG5JE~~>eee^C?V^]W0#z ՊRooGLf3۶m8455qWwfYf@{{;?}ʯSNrJ>}2Z} Z֭[ikkSbsy 1+u]}7dG3ZGX6 FJti&.\ܹs#//kbjL&LF;v 93VEV!`0(3?7ǃnW=CBBFoζmȄQ IDATn3ve4p8hkk9#v-NVUf߈7 o}[̚5 .ٳg/|>5k lHff&=?~:ƕ)++K_ ,c~[wvh׽jNOgʖ^~e80c 2\Za޿GhB! B!0av'iPyvq8CRR~dzFCVsN>nn}vRRR c֬YC6ݻw?i?Zs*@nBYYEEE j7؛_+4< Fܣ1f|$_kjjiPy9N:ٳt*a04uLL@0=o~OVh>;:;; 77ݻw@TT6?xL< TSS>999=ztXR馛X,C~y>JEWW֭cƌydeeV̘1N7B---{o… ::+Wzj6l0hٴİl20 lF.KɡeBד,7u嗓3w\V+1˖-Daa!_O3f`)zh4DŽ}+’%K[HHH@RΌ3Ogg'ǏK/ .d2QPP_?⾴Z-+V ++ Ĝ9sMmm-;wj*IJJbҥ쫯N?|BBB_y<6mDHH?ffϞw-G%B!>923B){ ܹsRUU5ᛚk3Zs pacTgttUl>!Z&11D`0j$ƛ{8D^gS7_Fvrt>=lVJtp8zhPF7'4'"G2w\f3 JF!''q]@ ǟd3Y :y?7/+gV{-'DZZZغu>ϢVYz57|3ʳ>?Oc޽tuuﳟjyZfn:=?`k__ה7|^x6>nF^|E~GcJq)~RWW~/~~;eJJ~%&3* Y/twwOg{1x>%&C*++}hhh?);vGe۶m?o7Www7k֬r_^6gy/JGJxmܸH*JT*lܸ_|qLnff&r t:N<|_d͚5 ?8. J{{cʕ)?tuu_j@[ɕW^W_|?׳f͚1-Gx~r?vZvZúuXj^{-}}})UWWXr%ǎ㡇~o 6PWWc=Fyy9?8z+/Q8N9SO=5B!>ˤ3B)v+kQLBB DGGK[[^Ч 㙚81RnW>; V2Pz{{A啒矏lFvn+eyᓌl@e,*BSSqqqdgg+S#'$$`6h7'4'"jkkIOO'//O0m4ñX,JX|Ry(y<?q}RQGxyo}}}Mo*#GvZe9~_qFeJjkk G?BjPx<߿￟lߛx'x뭷Dq8|V̖R^^νKVVtwwsqYn76mdddNgg''OTlǕݎ~uVzzz?஻"++ ͉'x$.twwSQQAdd FC\.ӧOGRQVV6| yR iߎ;|_G"PGgp8())q{ɾ}LGGuL:th{zzضm۠ڔx<5zUTT(Ky577iӦ!vx>v᣾!mjjwȑ#9rdn˕%)8suuufw<e}^;xPSS3SN ꘰ewΉ'8qİ1/n7~{{{ݻw}o`>}zPp3wyl6>#uƱlٳg޺d`}xPimmm: !B_B!ħn+ V2ҥK%66wTWk4@FFpaƖlmPTѻ}}}}Ph?:%''L;L&زe ~ӋFEE iqK0,{%P̟?Xioo'''CYYYЏ7zxR+{C Hjj*ddd`9~*y8^SRϻ$F7 ljlB!B!0œB!vUFu355gGѐrss#sƻ}ww2gΜ9>//d\.׈FvF;hS7oS2񖧷!ߺJCXaa!IIIcɻOCOOӧOz#iqK08ݟʗɓjiO:E[[ۄk4x je9v*<233 rД1y1ZSh2hooW:0̜9qKѐȄB!B!C:3!˙={6Fj58,X;\. ]vd"33.Qűh"-ZDBBDGGSXXȲeXwرӉhdŊGhh( \p,^VÇG=:x85|g͚}:-0g̙3iSRάSgk`0XlDEE)̜9s׼ksE`PFP_|ƛ,lw͗`x93bsy`d2B!B!TdB!ĔFff&8nHj pe϶{r瓜lV֐j*ǃ^\.F9~ee%۷ot@ojjb,\̼yp8!!!hZxk.*f3W\q}}}hZ˕5G1 lqsQUU\VeŊR^^ooo7'>>sRXXpjt:N>^muu5'O$33|p\T*4 zÁ^Hw0+- 4_Jtt4&IYk9ƛߓYρ=jkkIKKC2{zpXLoɨƣ-[0o<)**b̙8ZV9}.<:ouuuCbb"FZZZv6vENNq !B!By\u}wmUCaUϏwwMk#?v83H8ǣ<~YL V^GբVQx<\.NaGEj4BCCn7͆l6 zпdfϞMCCNFt:lCN^*P4 Jp;乇a0p:XaџZ&,,̧v;===\,jkkyG`wT1f)q wUT_s ]-&Uh-_ZmmݭZJZPDAmD٢[XB}I2sK I|<摹3g|fgΩ~ڷ}\.<Oh`0H0 gK0N:=ksqќRx0 [M6m0n8}{C9뻩>ua&qt.[zT0&밿0_t:jڞb  ""-B u/~< eeeuϘi޲vi|U<xjw\ckv"i}t͉\/>O[{sws>1Ghơsux,z4uNJd~YzG4%ꚦIttti,cJfؽ{wG#"aЫW/lrC4'JfILLfطo_S#򣗜LBB7onhDDDDDDDDDDDDDAnEƁNh8H˲i&vءDfvӭ[7i6qD""""""""""C """ ^aеkW<ie˖GDDDDDDDDDM@4FǪ8Ѷ5XVۺeQTD.ͭD,²󉉉M x<%%%|ӍM{y<(**R "[. r(-- }, 48 iM,+o4\ aFhNիWOJSyyylܸ?,]rp8|oԩSٳ'={{ӯ_?Nd3oxڧYHR 8""'J """"""""""""10=z4w}7zt҅,XpғYE^^ep8gС\p| nsM7q饗W_1}tLlPUUUٳvڑu\ - Gl, %쟰g80Q("?FJfi$:thDDDD,um-˪вOil""""Hr/t%3HP2i[noZcFWAΝIHH ޽{vөS'㩪";;3iײ,Kii)|W@^0acǎ%11@ @VVo6 %4qse@ee%wf,Yk1k,Htt4\pA(!22q1n8 ٳwy9sO~8s9sٳgÇ'22'rӪU+"##zdgg3sL;O,/nX56eVeibWR"O%⊏#Pb.2zo׀eѫ_ ߭*g?1OϗIe"1a gό7,zpiwDIU>5K܋Uݞzd>"Yg`'h5l(Y~ۉ{6@Q1_.c˯P'3!"̈́DDDDDDDDDDDDNc6mbӦMg?+`ʕXUV*{2~xvŻKTT#F`ʔ)۷˗vyǹزe | ))) $ׯ'..z /W2Cee%Ťp80 T*|>>,˗/nc&cǎ/f;уnݺK/0zI۶mygݻ7sN:vHdd$@W_}-[CWT]{0G㌏d*q]@܅ݾ--$s GTHfA<8+Vc ?B3qCT&,=GR;L }C |!<6WI{I7cFsETfGth:u$s'6l$_ ,ʬ=tz>\ c6O}#_z{;5U{s괋Q(ADDDDDDDDDDD4ɣ>ʙgg۷/m۶{%'' >CСC à]vv0vX* 990Сqt:4ի\q\r%t 6mt:|G?|:wL|||hhv5(ν{RYYI\\O?4ׯgŔ5ĕXu,>$6l {Dn+İ[aֱf˽xn_TEP&,/bnexĻu;apI vnJӖSZ,Ǎ*OTft*2w)^=(KDK0(|)GOaiL'~ p`8\. Glw{T$ݺ`TOվTd)5ȥrvعAo Qup?v8 K'0 ^yc)b)m'^Ò~ :W?[[}KHyz>yACQg;vixǹ뮻:t(s=z,֬Yڵkٳg\jՊJKK o%)) &v)..1 mےBݹ+oW_o[h _ORRR(h ,,ˢ'vJTTNpbbb, IJJ"..^CZpbӦM,X5k`YVhfL@"gWPW t@ b8 ㌏w}Wgo$ګ1glaKV[ - xڧݲ\4wЏK.sӯ'XMiz6Di^)<.ru=ڶFj[wxZwtxlͻ}^o-&"!""Ciev|XNO>MYD\eeedffRUUnP^^Nzz:o6o&޽CRRx^֯_Ų,l͛qݴmۖ(Yf | Gđ_ftp8ܹE׿e˖jlg֭[!118***ذa˗/g䐟*ǪUb͡1M?sW_}_NJJ 7ndҥdeeO֭)//ᆪHbcc1 ;vk {;Iq9p_H,,A\#",o4m=;GiGT$R^A+ IiG+0}>>ƒ=fD} 2; 1}>lN&,#oX~?%Jl3>@Q1y,f|˶#xvE%w'uGn+!IŮ,xպF?_mx 0M`0aI~\.v}޽{?|d1Qn9lGYWW2CVym"rh"Pݖ:QX]\m]V|w4M)++;3"ز,Û8Ye1qqS7Qvl|Jf"""p:V^=(?L&:/;P3h M8%c9u """""""""""""""͊DDDDDDDDDDDDDDDYQ24+JffE """""""""""""""Ҭ(ADDDDDDDDDDDDDDD%34ce:rHP2H3>k* S2H3nc lpTDNDDDDDDDDDDDDD1uxu˶|a5u "%34sND{ ʕt"(Mm°g6Ia~}z\(ADDDDDDDDDDDD. 35AeM]v Ҩ """"""""""""B@`RJKHDDDL2qƑmvʷeMHURRB^^^S!")ADDZ /Ժ.w^Xns̡G(-Ѯ`0HQQ7߰|r,"Ӈ[zޓ?wyut҅ә9sfc)"""$ 6u"""""-iMHdi:tC 4n{?CӀn'!!wθq#Vj}sϥ#GRYY( /| [n04HsgYMHD ""-έʁB#""h׮fȑݻwm۶&TZï/C\\{fȐ!ӇΝ;3m4^~Paлwo"##IMM%##<ꪫ3gNԩC 9QHKgkDDD䄦m۶d|ILvC5u~}رk[o1ydxJJJl<\tE'?˲9s&|gl޼ԙ8q"Nofl6} Wd9Zгg`e˖q0 { sBu >~˲)S$F]򩩩\vex^Ort""""""""""R)ADDN;}N;6q4r:ھ};.qqq\uUMQә5k7tS&Ofޣd'""""""""""-DDSQQ|Mf̘Aqq1C ihٳ)--%99QFl+>EHKhDDD[n݀gggZn3~x.r:teYlݺu[oH8Ԕ)S7ns7ndر <8Tꫯ={6@s=+}޽{ټy33f`Ν<#G2buFDDvb֭,^Fo{{Y[oE=9s&ӧOpp2tPڷoO6mp\deem6fΜIVV1cHIIa„ ߟmRUUY` ,Wu9kL,YJNy{= Ƙ1cڵ+>O?^z)TWu4nmj'|1{lnV&MĂ Bnfl6sΥhkzz:\s \r :tnʕ+y7:b_tޝ7xW^y}\{<qWDDDDDDDDDD ""DƏ{G0}j,߿?gȑ<#lܸL6k,?99r$SLdРA5ʤʥ^O?… kGRR=~ݻw{5 ?2,Xw܁dذa̜9ֺ;wL=,?VZowD3838Ç/yn;ScC~ׯCG6~%==\.سgO)))<3 :&H{V;k֬Y\wuiӆ#G<Çu7:,:,FmƁ\JfpЦMϭJTT6m_?lXX*IIIddd+yfv;}{}.#55=zyuaB nZuÆ |嗼rW׿spM78?{/;`ҤIۗ#GhѢslzCv{iӦ[o>N=O5k&L]v1P"m۶eȑ|ƌܸq^撞NII z+\pڵsh9lM4}u[;2܍'(v?}XzR_5١9sոQC`طo_evڵk֭[u'TP4M?ſkCV^!:Pudɒ:p\.]Xkہ71ۯ k-s" pyWYYf CI&aۙ?~smzh"á{Ei:Jfy$cأC]è#}w3et@E3nK/ M'N4MzYv8N:Uh? :@ddd岲HLL<"N`I_|EWVVpB:wZnYV +Meߐ .xU$rẋKOOs]0 שS' ~2"!!8xk:;}o{6={6eeeo>xѦMF7߬w]*Bˁc_"""""""Ҽl6v{L6޿k0""7n7׍_>70 i g^3_|ECYYeeeכ6mbѢE\y啌5w} O?q\_}*W}Seffx}:_~9n￟;2qqq[zPEDD0 7ī/WPP%K:t(Ç⋉ --;wQ\C=Drr2^LCEEW\qEk~\|7NiϦ:_gf„ tЁoѣG y7TOskoiN'MJu .J^o=""")AD2(4ٺ{+,e3qvA?DS::I&ѿ.b.]ZLAAAh=:zm!,,֭[o߾:v8؋CUUUucС\z<|А[n80c vU?a999L8ݫϧ^4馛% {5=|2{ln?^o9wS8"""rDGGzZ-66_#0  -Wɔ)S`޼yu3!"" ܥ' L0 `&`K06$H b[uŀCLoAaa!wYn]h:5Du2;K.+Vo%;;H.B8)++>;q8dggOs:ڵQ۷o޶mQ9_0apF޽{O>ڞMyf͚UǍ 9w^^)))MMx5jTe|M~_X6fnc&l6Wc/'|r̩_~ǽ駟yロ6mڜ4GaެAXX)TDD ""?F "Q 11ٶu'`6L cﱙP)Q?u*y^^ucX 5\ÀNyQPP7H޽k-7f_eY&*\~v>:OZ׍?cG]?!(]s5\s5DFF}͜9o94͚5|~X~cXz5r 'NG/`L2%4<ȏEYftrpM29N)=nh~k""rR#tM.~p:z⭬$`  ˲VңOTba `YX@Ey%wǝ{a>>ƏOǎ[Yh/"sL69s0|vލУG īdݷKo|rر##F=Λ}~;\p]t?ܺuiݺ5/23gdǎѹsgƎ2_,[":vȐ!CB -"--6=t҅} u{*/!!@ zrG 2; LBeeeqҞд9s3g ׏>x+q\ՋaÆqg4>EDDH=nlC{c۶ml޼pddd=9NNNذa)IDD\fü!C[:nw'Áf;aaeY~?TTTsx0R2ȏLYL&N0Ml<[M][Xdn=0-41M 3fG3[qV͑ _yoOSh}ii)w}7?0}e?4tӚ5kXreS7 ڵcL?"""ҭ_Ch6Ld۶m ""SWO͉f;i 6 CTTna.d&niQ^^z@IDx)ADGeо} kvulunecZ&V"f0cn8S%KF߾}7nsέ1,Ž;6lSNtؑ@ -[ضmXjUqsӧOuFLL Yzݻw> 4üyZ-˗/g̘1tͮ]7ߤ>?=z@qq1usr}ѵkW*++n?Kaa!;wdŊ|g5Jǣ! -zKS?w\ә4iݺu#))\V^ټy3}Q< ""cqw?Zfh߾=W]u]v_vklk޽;F"55KVZ(?GFFr%0h >####kرcIHH`\ztЁ, ֭[נޥׯ'33əgE]DJJ 6-[pBC76{7o \vexLDDTk2T;q:bccCXAdd$tؑ"##1 *aϞ=shو&,,b***L9Pcz:m[e;^QL>y!@$`8p2ZMDʲ&~gcw:kCieiL**)㭨NsX8s95AFC_]j[~櫿VOiMYYUUU _N][EVN::l~_|O>ZsmZַo_~a k֬nsEѺuky^z%ȯ~+vŖ-[ر# `ڴi||]wuL0S7 gy&+W /g}w͸q%==">lRRR~D`F޽yykY^^ίkrss,뤏-"""0 ˆfv9s0`111!A߾}իׯg`Y)nQQQ8 "r| "rJ=@Rr~Ɂ-s0 `¢[D@ЏE_&-2ڋhg Jez;w.ϯuݜ9s}Vݻ7?0[n,}t֍_~JHKKcرw2a^P͹̛7_t1̐ONNNr~!=IIIu&3_'x"tgXXcԩ~<p88Nv;8p#LKKd!"""͓&66͆.Ϯ3).a!ZjŢE8p)Khabbb(**Ґ" Jf9 eػ0Saش~+ٙ.f$H~i.aF 8~Lh܅@>XІ3&ݣqEDDDD~?Ϗ)))r:t0 yPAz20::X222Fz׮]l6ZΝ;q8YzؗXꫯ8묳NTT%%%׏aÆѭ[7n:z#zq"""r*vbbb턅1rH<755뮻~;4թJhH>9%3ʢwr.V摝 nٻ6~"EQ%YueZ{pvHWEҢIi$MR4M I/E vWYɷ%۲,[)53?e˺({/0Epf83LjT/@GE84 xOd {yYïN# a#Я@N!lp-'VE^^ڦ. ~ )kcB rssa0233!I^hPp8 W7/_o|8pocll VH+NDD >4ᗿzj jBA<3vVZ.'V+DӅj*Z ===8}ϟf=D[ !I! ( y z A(OdEO]%""""O> _bQ_LhoooēO>1)Egg'6n܈Ju^]vtS}=++ >,044Ph4 FFFP[[ ^~f`2=NAhT޶m֬Yj⋰lv۔JZiiiƓ.fӵăA{~j0͋V "Np`͚5ذaC?c"9Vf "z(dfp ( $Q" UD " AaBU璊@2,p9G yyGDDDDDD??򗿌'hjjB$;ׇšC066^_Nhe?ϱf|Ecc#O1000=455ׯGMM o7!??/2$I HOO둟}{B|2dY׿u=z7oFfffBu""O*Ʉs=Ǐh4bÆ jN7M=z۶mNÏ~#;wnAbQ߹s'DqaK^f q]EQ%b!-n޼R`0 8y䜒[hq0$ &IP "E2Y C"I D_~̠Ӊ2X^, att4ᵑHڱc矇{[ccc0 ˅gy{V 8YPRn_WK/ׯGgg'mJx뭷m6lذ7o׿u$,p\(**$IBGG~ӟ7ꫯ⥗^Boo/?꺈?44~Eرw^dz>t<|3Q/}K ߥA`0@Qaٲe 6/шzAELEMCSSv؁B\$̙3Lh ZG0+LZ&OW{BG|'iӦt:,=,EQԬGު zp?*"ld'聄(ɓJz+sWy涵PIb 4>{ 3ӻ._K<~NȲ χp80c"Я( Gy?#~i|E(Ju8DDD,՚ХL_~ޑp&<ϬM&YMg~?~  t:Ezz:݋\qOhB:?l6Cӝ8wܿ}>~ȓʤd!sLzl'鎹(;0+3=t,twzc 4: zZKhnMHd jl2A?!zE9=r&62e(`d"""""""""Z:Eٳgf;#G񠼼/"jkk.ZZZx=xUݾ(7ϙf$2VVMZj!y^>|;wDQQ֬YVSNBd"ǐq7^F,$#"';vAg _lVj VA+ ,R,+J%'PZp*r㳩^d"""""""""" j<~,x; }}}q/azXVMj!ūGv Eg~~>]DQTG3 //VB4ٳg= DD`={gz 0a"_:AM)j@ӯ/D@t6eu˰b IDATqIx^>Lyy0r__PRRс#GLi/~ |;?9`QUZ ==Ԙ-ݮv7X @,ʼq8x ك|_ZgΜa7{DK W'zO_^ǻTXP_o_AWՀC 3aqEDH@Bk/#ⷿ-#++ uuu8sLC# RSÅRJQ>. (–A値U3qfg^ufv$[% """""z48Nܺu ,:""OI|ti+$k_n?,kKEVVL& cxx8d@D ( 0ɨ$C ,&#J1>Nh@WE]հlhooG}h1,7|pF^7زe JKK!VXBtuu% +"vڥpi455-j̲,C  B$h ߌ@fb1XddDQDUUv ^׋Ftww,&"J DDL^YA,*#PSEi(\aǽNcf'Jj3U"(.!Ȓ`Q$w޽(++ ݾ$""""""""Gůkܼy Ʉl~ If+7n}E9A`ll HdQNc2YSVJETTT੧^G @SSzzz>q)Lf "*ۊC*68 hE@T0q "!dsB7OЗ Aeۀ Da:^dED|())AYY޽{O=] rFPZZ|>aݺu L CE5`0`pp@iii >۷o'[eYF,[$S]]z F>MMMS-Lf "zMgṀ#E o& h ~@?( v9-[Se,%#6mڄsrrwikhhfB @Qtuup,1<< `qoD",hPVV;v@>`DKs @Ѩ' PqԓX03Pjr4]AQ\zMReƯƯ^r^wbjWXf ÂKe\rpX]JhX;۷oOZ7-qLf "zO@'w14Af<Rڊo}[عs'a0רRywqal۶ zNJ%IGFFz{{qelذaAt:qyv%4!Չ UUUسgs={N?1(|M\v }6n܈bfOF8FFF6n܈"L&Ν;裏Ӗ7x~7mlW^ş)'xEEEA8 Ξ=o>}7nDII , <p)>L\o&޽cAzz:N'~mf.ь!33ǏOVڵkׇޤbxw2zqE,|z= Kx$! !,|W_ӧ100\ RYoϞ=~}[gffbʕhiiA8 XnDQDKK˼GDDK˗֦vmhZno~Hvo, BX,PǎÊ+`Xu^h'NQT,u`EQ}:t:A466.9&3ђzquԨ]~]}>ķ0 BVVv;pl޼Z. PYYYp8(..o~y;X,x׋fTVVGAGGǜQWWrL&t"++ +WDyy9~_9 <󨪪B,C4E8f"=tli$I&3 h~(n#L;[999 VW\\Zddd_F˅ׯkZnn}pW^]d46 +V@[[[dZz*- Dhllhݻwv&a2Y:^x̙3hmmU^"ȼDOO?atww/h@DDKZ?Fj*9rގ3gΨw*Y,Kq?^W^y٨ŋ%;w"''GťK K/aΝ陒l:::piuyF#>O۶m?v;t:{=ܹsLWh~턆tضm:шM6pҥKUt:\ (((m}%S__Q4qqƍU{.z뭔V ">HuSī3t:L&z޽{6b1\p$IE1!a!bFFFR0LDDcرc |>N8`nIyeee}vB0| y^GMXP(fSg.q۸}Za)dѣGhZF )w'KtzF:No0nL&S¼Z- Ct:ZmB+" :3iƗ-(Xv-qa5)@E(p8/رc(..huFM38u:]ރ9y}3h40 j)ӜLu?%7YC>{wq?8߉}b7"DDDy^D"(/ރuH$'Nb MQ2ِϔ1]0L{A,~|\œ5p84wdd$b@Euz+0ݻp8 ݻcǎ|3S A'|VxhP__J A\pw֭[l2dee}ddd@Ѡ---444fAeBQܹsNJ_[[ 6h4̙3,(**O< V ǃSNg꫸u`Xp1tvv"##UUUؿ?<6nݎ`0p8A;wXr%Űo> "77&IM|hD c8n:q8qGMM A@vv6n޼&b0D"8uꔚ\\\~~F6l@qq1 ~?Ν;w۷o[oVXf NUUU^]ܾ},#;;:~C$h4Z +VdB(FI;b`ݺuX|9z=^/ZZZp](޽wEaa!z=qIdfk׮UcD"8rn7jjjj*5f``NRA""dWg$ ###̄Nŋۋ[b͚53J$ܽ{u ɄC!"--MvttB6OiA !"G e###X,0{g]VMW $!c``ϟǝ;w &0,d"C$BЂLLf ""gRo'Eٸ^}rntuuۋe˖%=?]|9"Z[[ՆVVYY7nw߼yUUUXlݻX,`0(**$I|h|Yݻp\ƫݺu xtV+V@[[~?EAWWz'}KK JKKQ\\A\.uZֆݻw#-- @ KXfÁb1jѣxX,ӌD"j#PmWiNd۱rJv@DD(T|0EA0D0dR* w^yNWakK,C(}`\"`24^/Zvť.Yr%Ο??ŶT"""""J& aٲeE1i$IBs.]p?'=_Ɂ(j2VNSLi6B '_OKKS!֬Y,>}`6 ?0 ^/Ґ&[X,t:t:dXnV+N>P(͆ݻw'$&̥#! Q(Baaf3xɲp8&$G8VdR# 4mr˃HV 0%.N-[ɓB(--ƍX"ţ%&]LNh@ &( ]Llj;m6"#ByK "b24(۷I1>x===y&***K/СCjIZh Y{}6fQ%%%uEA^^~$Aww7ѡvODW9X, \jqmjD" L&ۋ`0`< !lN'(DEEz=1<$INFq ]999}6:::҂͛7cÆ PPjÃ(0 رcbZ-<Ο?68GQ^Sϝ;~@[[|IjwX ַo|rܸqFqq1F#^ ߏ"D" uUlܸyyyjhT֭[X|9^y ԩS5}Ił>OM8x FGGڊgy@xC|Z-*++lbt|2_e\t ػw/ E^WB8q|I_"ȔAZ-nx^>}ׯǾ} q1\.\zO<jkkH$»X@eAR#2BЂMbuY~&1ѣ DDD100_Wزe rrrQ\t W^>Gmm-ˑl~n={6BՇ~APPPXV\i_htvvΝ; Cժn,ŋٌH$Qdeea=zv$ׯ_h$I¥Kib1n!=n``OFzz:0\.WBwծARKMD"V5ѣG*~bBŵkצd)2ժ xƑ#G8nܸ۝j~@ (8rZqOxyQ}? YYYHKK$Ix<gϞݻwa0aZxϝ;]Css:(S:&d|p80 x?L[@ܴi ?6h&݌?NqTDDDD8ibt%{}kɞiYaZp#( GY\[nEFF8zף}}}jZw^B' 00LKˉh4@ 0.L`XZB|>APd6N;w_x>~H?Iey9&=Ovaaw;.]@DDDDDDDDDȲVܽ{())^G4"HC$""J)EQ F=AQHh4ESqWLf """"""""ZBdYV#""bb`C!"d"""""""":uw7-Lf """"""""XDѸD@DDDDDDDDDDDDDDDK hIa2-)Lf """"""""""""""% DDDDDDDDDDDDDDD0&3ђd"""""""""""""""ZR&A0Y. >/a=@8 IDATDDDDDDDDKuDDDDDP(YLf """""""EOuDDDDDp8Yb """"""""""""""" DDDDDDDDDDDDDDD0&3ђd"""""""""""""""ZROTTT6 vڵkOuxD<_h `2=JJJm6?x<)h ]vzZ ;;###ltEYYYE4Mu8A`z>P*p""""""""Zz@DD+VOP^^/0"W]]j(SN(";; 0vBQQB~ATDEDDDDDDDh6L&JJJnPYYXf3f34c1ZZV^ N6\v CCCrR-APZZ ՊllTDx'/""""""" DDH*++^.\YQOQXXχQp8===D"P,#@GHEQ# ccc0O_DDDDDDDDKX !A=jjj]]]ۡP^^/j, NẊѨ~p8P?mmmFb1O_DDDDDDDDK+3#f!//сp8@uuu*C#WS5Va`0|TBEDDDDDDD09h4p:pP7odeen8B"""""""""""" v3ADDA߭~HF ={QQQBfL&DQA p:: ۱i&rþŰZX,Er ^oҸf>{nիWqŤӫƍn~6n܈j466r EEEHOOׯ_W?˼nW\y`?(%%%ZP###B[[۴'YYY"XVQի$i'r8سgOBeݻw'-;r==g*uuumذhii7|rTVVjB$ܻw/zE(,,b$Ič7F8oX|9Nǝ2 ,H ("//f9$ws `|9xw$N""""""b2NIuDD-776 S}= Ũ|dÁg}z(BEȲ EQPPPH$иhZo 7D^b`(h4|cG%,222`h4n# z4vٳ@gggc(//GSS6l؀FhZݎɓuVyY,l۶ p8(--Eyy9=6\MCFFF48}'jP@meشiJJJ`0hP]] $]~Áe˖F̨Amy^GCC*++۠,(.. vڼ7flNjN5u;Ʒm۶!//oʸyyyAFFF#zĘ]rmݺI˒ls\y|%a?kںu_`2 Á\(If3V A 2l6 PXXgv(QPPя~wy'0q9ǂĐ/زeKn7/իNCETTTLEDDDDDD DDH(O+Dqq1v;gsp`xxOB,`bAnnNC7=zSߏ 022^x^A vnc˖-rL3W]3 p\x<0ͨFii)o>fGm<ƚ5k`۱m6 M\bϞ=ɁQcE֭CAAv܉w}wڻfӡh ˅Q(((͛+! WҰo>Ç144wƲe 2.\aDQdeeXjZ-=tuuummm|0L~`s΁{EEEW\Q?o Nٷg;\/ v;سg$Iŋ144P(łrC2b,WEEíy4B_ߟswޭn.]RCtC^^V\˗/?0X,Ӄp8zTUU̙3SS,N>666zj cjxBWWlقJ֢3iш .pXgRn|90QRRI? NX ,Cq۳o.lf]8p\.(E(F(B]]݌㘏b˵f͚y_6B_Pߟsݿ[vh4q%\|Z`tt|~z r\>l\hظq#^y\r ps%"""Zl(h4d2Aө3AQ(Y  @DF| DDDKa6!2nܸ1`0>@eeO AP'`pJC8VY']ع\-zp:F(Rpu|>D"{p8 @,[,aZ֭(pFGGyȲH$˅v˗7NӉ`0g @kk+@p<:X(ׯW``pXm4D"É'jժiǃp8H$p8<|.۹FACC4 .]U$ID" vn7_x3Xף^]Bvq…g]5k,r͗w:ǗTTơzj/&"$=~kZ^ jBFF1::(HOOGNNҠ$L|,ZF6 ̜qyDD DDȨ ,ICQQl6Oghh$A`޽hkkCww7FFF%XeԵj]Mg!C'ay$IF~~>޳l0{%UeY966h4 N7%Tl1m^7n@}}NsAyNN2227nܘqclǛv3e17َ322`2;\b(-Øqgu|r|^p.ߙ322EQ;qoxxlhbkXjb._C_"^xf'?A,C455iZk׮ū2ɓt t:l۶ {Eaa!Ԅ;vÇ~`Ν;O} ]]]8x ZZZfT >yANf^WPfff"??ʂb F__(X,0Lx ?ƾ VOBvv6>#77>b߾}p1lܸ_W~Ǐg9f""""-- zvv66mڄij*B!ܹs/^Dggz 51::(]PRLmT?HEEN>FAY>\n###hnnUhhhfN,j)P(tje1C2s`>nF``p>gb)^\6/?(H$?Z粝O,=0yuldib"|ouK`0˵X\y)_d|=ݍLLheh~)> DQ6h1DE|_??#ߏ|;?|+|2V^+VѣjsӉDN[jśoSN{g?:\qq1կ[oGO~uիWW^#y|k_ߡ%ՂhifYMLNKK֭[n:ڃFԠhjj EYnejfB=G)q2 &v'NMM Ν;8~}M`ZN?v:V%%%C~~>y}L/Kq?L&yn*-rMʊ: m>/zzgbq̙3 $S7eB8p?$}/^!p wn455a߾}0 č7o}kx $TI YYYؿ1֭[ Ӯl0JKKe֭tLf """dRVYVٳճH'jjjÇg΃;K.xH%QDݶ,Q,v8N'i:u?7L2d2i3Nۤq48˺e[-/{ x Kr$gf~ yf DDb0-xn%%%jMN… ظq#DQDMMMR ؁p8_]:::>D^^3"33^{E pG[z&S՞\mݭ/))7>TlN z:u*a[TKZ1ylJ;w.tTnf~Yh3)7zOT| i*s:[EEEhoo 0, [}UU֦..-deFTR\\H$IەrG?фþ>'"""dBff&DQ?Y[\\3MW@@8NB""X8 $ p7oޜOT̸~(WE?]jPU~?ZDW&ーeeeZti-{0 (..Nb''֬YPRRYqɔc!=0iB:Df:\nf~Yhڵ _G71W>]R2)Ϲv,++qXl~h 2h0888!BG{zz`XPQQ1inX)OFFFo≮۳>;'߅DDD I.en<(((ЃAdff(u|vKR`""Zдh֖TXEQpUc'.:I]va(**($ ؼy3KcV\~X,sJHӉlp\(++Î;t:|\s</_,˰lعs't:jzTo( > ͆O}SX~=@m֬Y3fϖ(8z(Ѩ؈|vbƍ{a2p̙9sYqQc;Տ>(,Y'L&磩i ə7L/ }( ;Y'l6zjw}7U m}ߧK*>_vJs.)Ǐ]v{nZjFÙ#jիv$!''˗/_ptիW裏D?_UUm۶a߾}zp8 ɤO: @qynݺ<χ$Ic3\v ===x駑 I`2PSS3n'N@ >)χP(p8 DDDfl6h}}}bӦM! $r}CQl6b˖-i]>LтVXX|r?][B VTTeeeD"PEOj2p8Dw޸ih?{ YYY?`0ɄK.G[[nܸjף,CHłH$2M`| 6YYYFLy<0{nlڴ Xv-F& fIIl{*aϞ=غu+܌H$Y!IV+L&N8ӧOI To޼cǎaݺu(((ߏH$h49s̬f>޽{㾎DQbA0ԃϿ^/7}e!ld?Zoo/ۇ-[ ++ ׯGcc_31:: yyyXr%7$'x=ݝdYs=}{xq1D"l۶ xjkk+f3͛7qVTTg5(7DOOFFF&{9?~(Nގgۿ[p8XnݸO>_˿KԩS(--ŵk&r '322m۶90VXsڵkƲ*#puʕ+@UUV\ ٌ/hb0¤e0DDK]-"9(..FMM : PYY\vvax^ܼy/^Doooܓmx؈) V?aYߏ7nc$ IDATSi6=Ek000+V ??p:hoo=g;ixGQ|Ċ+_1Z7L/ }( \A466NHhmmEGG>@ܒFziDuelٲI;tBN|5xﯙBuu5 ˅H$ߏ!ttt`ttW+QAN{ŋ7̙37]ve~_azmصk֭[gl%2nܸ 466Nx~ttTPU@?y֢?OphdY믿|SB]]_ŏcQQ+x"^,_, --- 76vACAA-bmmmFi˖ "v{Z^/ߏ[uuuv|j~!D qƛW4 mĘi" McWVŦki)N'V+TUv fIj; &IO1*dYF4E0*)Qp8~_ocX`',CesVVdYȬlE"B!Ȳ,Mgl6(FGG6כ0|2}Rcl x'f6̉ݮ@RF"d?zl6=40?epH$yif7)Ucm;jC[(E~3x<ˉ5E:K[7:P<3}v:|mm1|(0Ǵ_vVht\xuTUllV_ B̄My˛,Nuuu/~|+8w|ÁeTWW ^W/HGPC0D___ڃ9z!Ξ=#G>O0Էvl>|ĉo~t?)jǻC0܏&L7033тf4o'ـ+:Q<EQz'mpNdpp0%NFL.n#?!HQ=l*a=dFUդ(OF^3LfeMJXێ*,,D"i}6uf}3l+ݟ3|vL_Wy; tY/N&Ioߎׯ"""JvQW~~>rss|y6 UUU8{,2czLx7}vbʕlطoKN-P f """"TTTXӛ("Z֭[F9sׯC=_| DDD4UU ՚e̙3ieLw00paHj,]pGM>D: f;*F^RCDDDDIYf pM fG{{;^{*Ѣ?PhdYFSSz)8ܸq/?0@^rl6ezt4Q4VrOQݻ'QYY+V@:t3,^ R """FQQ,YY!2$IdիWqє![TUU|݁ZZZo|("3E &0Li;ٟ ҙ"ߏw}vB~~>-[`0CЈ(p!Ԡ@8 >\z)fèAYYYW a I"""UUQeJeY_n:37APYY cyTDdt3, xp9HQ*(B|hJD"|dYdB @4MK @t4he-$Ihhhm Io{DDm `""""(`0Ds/"""""J4d0pZzzz|F@/8az ;3/ہ;DDDDDDDDDDDDDP$ BJ[W0CCC6mł߿]]])[l w'ݴDDDDDDDDDDDDwP(EQp…9_^{{; BZ4p8 & V½ ՊahooO8hz[0'"Ξ= 7g˒egΜA(ҧ+!]Y'4$aŊؼy3DQ0݋ 3U]AEDDDDDDDDDDDDDS~ gΜ===hiii=w PCuu5l٢gdؽ{7nݺDd>eUPUuDr"""""""Jk|$gAqqbِ$iBۥK{l$b_2ӲI (zw})_V0#AUUx<(2ˊǃ7|]]]i]>͜i@sNAn($)uj⩧ٳ?J >>L& 1888.+npl466ՕZBWWZZZ000ϓHH$$RXXp8qH0("77`0IAR2&2>MUUx^dffbddoO.+e:t/^ -`KLk0<<}D4s f_*ɾ!{֓מJ *uI6L&ٍhX0ui;8IDDDDtr8p!tttpYl֮]K.zkA 6Gݻqm@KK ZZZ: 6ǏOr5Hμ,hd2tܹseO<222f8ѣGw^Q!bZ"祴R"Z<`@49 w:󚶐nc# ⷿ-]Mvv& Q Zn& n~p tb@ 鋵 $ 2v\X,P`V###& &iܸk׮űcp LH@ H$ 7no`0>.KBr0~.6$ p>O(zFUUc, Fi |"^o“PEo qA7x6 ͦtl6p|>(Ip8`6*`~K|>HՊ/⥗^?e/x<8p{==!]%&E/"i&a 1%x߸oZ1[ aJ(ܒ%K̕DDwAP]] Á dee1jx衇 QӃݻw'n76l؀"L&A|z*$IBss3yf Dmm-֬YI I.\D"`ƍ((((x\.^z%|ᇨGnn.n߾Kb͚5_c6n܈ fDQ\pN(0Lxꩧсׯ_۷o & H}ܘ6oޜTBs_pa===hkk=3Ɩ-[ YQRR{O"oooPקg@(̐ ˅#G$6-L&$I(zvQh-^HN& xwq1n0 A+z`@ 2|><Ѭ,`;MxA X",뿩I5"{DDDDD B^ľvvRmdYF?222vQZZ >nz[[222D&7lvJ8Nݎf,[L DլEN]]]4lE. W^6 Vu xEQߏZDy4Ɉ|Z eӮ3JԧV&dJff& o뙝qFFFFp8D`X&͆g6vZBUUX,둝p8w_NaժUlPِeyE dB!B!XVv=Powd̾/Cv@>砈(%0} 1l ƶ%b32Nʲ$I8 Vr;1DvAQX,PE.2`Xt:>^/rss^U q5={v\H$lٌh4Q څ%X,닻h4=B[QȲv=a x]qFg0AUU͆;wƭ7aZa&nV+n݊k׮ҥKFDDDɊ hƾǃ Bl6C ˱ T2h"BdYf&"J5a!ICj[%K۷cK?wVV!In߾Ow8ətb`Æ f#E z}4yyyTŢSTOSGDDDDP{͛/} HpDOOׯqY\|Gun:a͛ggǎömp"e!R>, v܉p8 EQkʕ+hjjBoo/n޼w(.. p8qe4bEQ>|w|IDQȲָe)Q|q= !ڊm۶sqԩ).`m'|yyyǙ3g000h4 ˅B? DDD ٓś;-}7vSzC=*RgFFf +233!I^V+]Q&dGEِ$ ^~ rnC=˙;prAUUx<8Nx< ʂb(Ս o2r`Z(ʸl6=#ֳ|j}BQc``@ߞ(@f0dYC=׋Ct:p8( <222022gzi<V+222׆$IeYτl;% IDATt:t:VP@@7::_  xNf'ѣn3qC0܏Aڴ]b*d(ClM؛ _l6Ȳ"Bx7000_ $"::: wUVxCgg'>Ϡ+V3gmmmEUU 3! \p!ADPUUYkE $ /_pL UU[o@e(hkk """"JxSN]5(iA .}3i4{( w^lܸ>(n޼hAOr&9ͮk4Yݭ?Ve8122}Z2}ncE7l l2.HEUUxqӌ#( Mƕ}Ƥey~!(xBڣt,E4"rB7nܸ @NDPY,466BE:u ]]]zh4 ϗ0=dڵkDt .@qq$vBF(•+W^/IaHܾ}`PfeY)lp,jWaFQie-V$a娪BII V^ eަ2<<={`Ϟ=D"())AEE, z{{'\=:;w. ˗tNk߉N53C*&L7oL 8sˉ 9s@ccv7].A`"Zntuҥ']moo-!cɐp8K.aݺu?zWNjn+WBeH~S]l6cA/y Yh$RVV'O}&C^rrrpb ӑLVa:'[j"^Ђ&^`>V`oiiCcc#v7N'$IJhKMt?b0v Xv-PXX$ 555i@)[r}FFFbÆ vZ~tww7odf""""+Ȳ3gΌ+͖ONUU- f;30|L>x_hiiUNg`6zg0|"ԳZQg9@be9n;6o+FFFсJ p:Eooƥzv}E˗ՅJAmm-&KDDDDDDDDDDD4̐^-5}xb35c ~3gRQQ#IRF(G4( v}%qbK?:th2(VTVVG,XlA $әtfTO8 <.]ٌLTUU%%%عs'~L{fk134AOLوt1;` ~O`1毛>kXnZaZ U( ~XcՖƍ3G[[^/\.Ӄ*a\|yŖĹs璚/U룪*ᰞgtt}}}ǃ><塧gFT4Q2m =6B}k >boJM}}}}JKKqu,l'77B__~?A@VV DQ-"{18N(ݎ/NIDDD:7LǛ?vZinhDDDDDDD4`Rڑ(9c o2 2NFy+vrIUU-!@r>fnYH@X, FGGqA455!//+WD}}=dYF$l$I0Eooo~<:;;QZZ\ %lnfee0abP<QZ-`` FH&dmf8&^v?^1CC[}k˕c1hq0'KOIDDDDDDD4o0fR6@-!b,AGO `ׯ bbQcjS""""""23ĖWF"̄V |ADDDDh0%3̝x% R!&?vhR`p@DDDDhE"Ѣu'3,d=La:&ⵃaDlZֆjiӞ>2jycڍb=' <"""""""7 fdfaoxe"`{*j08@ ӍbKOM'`<^D}Fs4 3LKM6;dm- L01Br}iWޑcc\t """""Zfa,cfDMַ1=6=vh0aŖsgd?-?^)1 il[-x!6qt1V f0>iAīĝ02g GļSa cidL,+aW{86A DDDDDD(v?^y ff """"""yu3,tSeg0m #9acc1tt1t!޾cl9 cCc63 3L4Wjgb0ۀ-[Blv01?dM֞DDDDDDo˘7^v"""""""ys'3\I6q&s8#1A L~oҥKZ|;ݻ7zqy?KYIhmmէ{AqqqʗIDD.& fy1)͆H$r& & $KP,uq3D?_ 3m~Vƌ d@DDDDD49-`2񞏝/o3ТI3|>C?n޼O?},UlFvv6RA#"/}ժU}{`2f|GMM N'+W^A}}=yL&|___7xȈ~ O?4> .pyȲ &xP[[W^y_PU<TU??_lΝ;Oسg^z%~} f'cɒ%xODDDDDDskzǖ`|=J; IMEfY?|r?ӟpttt[{9ݻ5e˖ڵk|Nwp8}|;իWZ qQbpp} xDI㩧¾}_xꩧ I^xDQHz ⥗^nGUUEo=^z%8p@ l6n;***ꫯbxxMMMWr˿ dY(Xb$I»ヒW_}V?ylDDDwA Ʉ2lڴ p\q\p\DSSq={VϔmfCCCsVfl fHT4I`#^FD˚jz# +WDNN~ӟʹq)[nɓSit:!I k.?~O> ÁzÇOZψ@ַ'N[NKK FGG100ӧO'JJJ/~/^~e3 ݋6s~_w]:ԧOO `׮]Xt)~o_*{1ݻWG?.^ؿ?^r; `7<+Vb$ՇbAEEq=`߾}$v;$IB__34Ѵ .51UY^*$ LPdcmU&oZ D ˗144ݻqEܺuK/ 1G4,??W*++QZZ $ Xt~pƍDZd"Y.2򐙙 Xv-n7v7a:, VZ7oU*yر˖-"ڵkhhh@ff&톪(((#< %K ;;w m', rrr088Ȁ";=aNm:1L,>7YB x㚪 ̨4~~xGwQwK3I8}J1C@ƱlljgכJj_6'[Mqŵm׮67q Kntk{f4:ь$x>US5G`@]]GU/" ӃFtvvzcx' b#zl>/fիWDV)YaZz c9~X,A'7er""AF D"n Ya6!V+0cƌnfa۶mp\hhh@^dnOz_DQ(D"7 %Ժ :h H}$Fj?ܶ"""""1Te׃݈BX,ub^QB! A Dee%DQٳկ~?jB:1˅˗/6G`_8|]~ӧOG}}MىٳgWIFeff`0mT""ɠ .g?x !I4 x̜9sOKKK/%eDA`6ReժUXz5ZZZsNx{Po: M*,1FDDDDDDttȀ^Gnn.VZ&\.7&כPRR<Ȳ łbh4l6#''zP__SNAѨkG+ۍvǃS؃ ?|<X,jlԧ>ǃ#G"""HӱpBX,l6[6 z+Vٳa0PPPYf!VX1&YV[,("L&S+;E ظqM|Ce`3$ϡ*7dIVVH-gp2?êDDDDDD P(t97⡇B{{;OL?W8x7x|?Oq\.l6v<3|//~5kjkk1eWիWDpa{HKKCww7^{Wߠǔ)S_~LDDDbW,P.Io /$I{|IA 1k,\| l YWT]]1o<BE߿&i]n <63qm~3_tQr ξD76??@ ` c8\,^g4o= N4\|(r Ξ= NSNz=Μ9n\z00p\x+Ĭu}tuu!//^p1cJKKCzz:>/}EA477C"''VSLASSSJBP@@=ǩLAV$I ---{-x[_xp}Gaph=n$]"""""pG*xO|(!61hHAHQs|t3r2S-M щvEQ5Σ!""",HM6'NSBp݈D"j0 1F|_2yZZl6DQ?%& xa TL~ttt^ǦM0g?Lj>.aBZZdY~ԩS)qb$HIvYf"ZNb#Fz 0%:q:>~o7e&-71PDDDDD(t^f+{. 3fߏ͍i1j0i R+((s&XC|>8`0Eaܹe{e) *9 L\f@6e4ickccQh4̚5 eee0׋g}o6zzz QWWg}P---Ŋ+R^J@Ql6X*8%CƊᅬ . aXe:tsb͚5<*" c+`. VtksmEie3MZ. n[]b, t:]«LS@Qu;UBP*%D@`ҥ… <*"w;VfM\cH($B6%TSS_8~:YpB̞=߾F]by<)/a7AB)t@L!٢ZF"\,G[[۸+3 BMpX_a6X"""""Vk Mj>>:::h"fX,?#?~6 p}Ǟ>}@J h YgkkkDFɲ\(vBwww;i, F]zbݿXU]DDDDDDC2χ 30@DDDDQFAA_׮]S 3f̈ FHztttvd2%H$RD80((..Fqq1$IB{{;d n0C2+ la$m6Ԑh`" =O"""""""""""IE,[ F1~ٌKxܒ%K`Xz=@H~Ij׮]COOAHI!< 2/_5k:;;k.tD42]iH&#i{+_F8#+ؐѸS娫(hkkCGG"i χ|>~r~(B0|p8I+ 2f)TEIyHDe\WaϞ= 2M{eTiYvbS!>0ڪ 9F -12MjO,_ΝFZJ=***xbh4;vL R$jEgg'Ν;u%%dpu\p,Ñl@ &@ fBqq14 P^^FahlyѴp޼m9n(bŊ0L69,7M&]CY۲,cݺuŹs]El `֭8zM3F#9 F@ ^+2nTVV'ҥKh"zTVV>u:6oތ֎YDD7… P__G޸Qjh,8pϟ1vcϞ=zj!UUGl6Hn[IxADcahi;:gU#-F1oʔ)0hllfɄ+WMMM7fjECCV*ׯNd,Eq233a6АSb={64 ~?@C$tvv. ɖ^?|Bhmm6GfǎCoo/|>MFFTND4GAss34 zzz`{H1\.[o@VV֘ w^\rEFMM vd dfHป _E*W9Ӊ؉n9HO6 q 3C$׏ɺSNڊp8`0H'ӧc̙hiizk֬AFFΜ9&B!7&QTT{wnG(*h"xq 3L2p7ܹsa00[ou%[ ˗{D3|>Ȳ ɄZxaZo}ߏB &3`ۡ(r8 1MR 3Jvu#QaUmg[a=[10'y׉Uy"'|-?јZjhoo(ɁnWeYYYjfA  ^6 F3f̀F[[ۀ}geeAl6K D20P%flPxCbb@ӡnGwwwr"VFk222 ,K:Jn:<{1}th4#S]]]طo> CdJ7`f/Udo… ~Zw}7N|SNU'Ԋ؈Nlݺ+WKJJ Z-N';VXt)sVܹs̫tM p@t:455QTTu֩(׋j( B.\  ''G 3D$~ԄujB$] QSNtoUh44sLȲ ۍYfr n߹?>,Y={Z08u:}̛7ӧOW I M\t C^^jkka6x  ٌsΩw{{;0 G}̙N\A6,f_G" 466"??r$<j{W^U_=&ٌ\TUUc|@sszH^ӧOWW@ΝCYY233Պ*NSEgg'Ӈѭ*j..Yp)={FZ$Aao/c2B  vI X'W!Ƴo"""""""TWW# b…Xf Z[[q̙HKKÝwީ^q 'p@BEL&XVĔ@niiQ߀NtFEF̟?^Wxj xvSNpclZ*O^ D'F.![dP\`0^Ȳ NH$ٯ1D4xn"f\3Dwyh|,~;!""""";!nDIDԉ\p5550 Xv-֯_7|SrvN~EVٟÁP(^x<>|]]] p8 Ӊ^1 l6#==,Xeb ÁŋC׫ Ya6{ N;w'`0"''G ďnرchmmDxpQ?~زe ~RǎêUyfٳG(x<EQ}l15Ft:L&D1IV(((@{{;l6 `'B$)rPYYsb`Æ Xz5NtvvW^w?233Ӊ{pF:xPSS~YIdlAADQT[tgDc%" jXm c:o`@@[Jeh4~ cdЂ ~ŸDD#0RhHV 7x ZM`޼yjyAժDxrrrԀE HR8rY^/, L&<z{{ݍ8~L>:SRRg" aɒ%|hooŋNTWWcٲe ---֭[ qфb޼yp:$ ,'//O- ]ǃ, u^ `…jՋ㯰Xa|h䆪̐NVfRX~=~aA\aKB$uⷢB}þs}݇^رcUk֬NC0ŋ%ۇ+Wⓟ$ "PSS3uEȲ";v@oo/<+Wb…p88tn7с[vߎi`߾}(--C=`0.}$aۋ}XjV^`0VTTTؾ};۱P^^5k֠`MMM8}(ODK4De2&d|8Ql 5 ω&8_3QU+.}`_Q  0r⯲CtQQBZv-222btjjXAժWKVjѫٺu+|>?FP(BKehZ0z}J :^7-Qj!rL9NK-:NEQx`0]@ sEf߾%7I!bLo]: Z>PH='&I][F~}>]Q/A+Պ{ ӟrrrqF4661k&^tuuرcE^>Z$M߱=~ $_Ay]端s=Q(B׫᡾ >.~B!|>L&x^n,-h.$O M^FqBṀB!\o6&y]|>\~K~'-- ,ԩop}t tݔKE5{B %%A2ȤBCO(+$IHKKS+1}'M\DQ!T@P(Et?q -<O}[_HS`z܃D"p8׊'8+~v㮻B~~>_I`ZЀ?0^VS"s1 5֡D'z0s8sy4C#{~h0>HFqܗC\ q"00rh7M#$/kQ? `ܹ͍@* _S"==PQ `Ŋh4BDD4Ub4 dYV+r pX]懈a@Co DDDDDDD4,`02+oAH]]] hDxѲkh DDD'oD8a D0ZO`ۄ+~t>>7G7Sii.+kRtkN+q r zSZZdY~ԩS)qnېs}*`GMae387""""""""""""""Ia7=xCr&xh10v&B`2$10&J L1BDDDDD4 eIDDDDDDD4-h"7h`e䘨K= 5!(MH̐|JC_񁆉~"$`Ňh(raDQ &YLi-^@ H$ 0O,3C !U+3@?ܭ@ot"]Lt(V0TADDDDDD$xptvvlZxGNqws=t$ QTTѣGc&0PSSsMHyp\عs' DDtKey0$Q!b XSrV)lHfA;}ޯD% @w r䍇n 37QBDDDDDDJ}݈ƣ>R1ۊ0gؾ}{5 A@(녢jZz@(]AAN,EP>o%L-['O jD"vQI  ^bF,HOO^AQ y,:ZVmkZ:N  """:0zѿ-ƞs> 䮺Q!ٔ>6((*%@DE$D[d=k'HÈa""""""""J޽=9^7&?b޽hmmMxԩS裏Z- /@@oܹ5k@ʕ+1!?Ox F2l޼śdB[[vڅW_}v{ g̘3g?qL a ,cx1w\8N\xqyD"***h4gӧD / +dƺu C! ᗿ%vڅllٲ. Q]] A0||_!2\ݻw_Ò%K|EEEHOOAyy9~ xBrBco)@^) aضH(i%tЀyZdHO@A#Aék>\K d.x:?n"%1@DDDDDDDD);w}7|M7&f3v؁3f;b;dYCx^__W ~@VV~?ىKt=#77gΜ/H$իWGA8ƟM6 (K$O̙3f7nDnn.ҥKcΜ9ضmA~򓟠PYYLy睃뷿m}ǏG~~>֯_? Qt{ o6~ߪJ<ؾ}{LaϞ=oЀ{GCCzv/PpUG?VE`j̙3V}M6 999~'N x&HZS7RĆ@QA6Xqϲ4׷FWj~ߎw?pA΅PS-n9 3QJE"կ~͛7nc…4 .] Q`ۂ Ν F … z(L&fΜ Y=7&}жg͚ ޽;q655СCXvmz#&@q5Aŋc BٳCvOSdgg' 3444ŋ׿"9sW\A]]] ݄YedwD(ȳxl,׍YY2LZ5cv ?ޮ18f """""""}vD"8pׯ_O$Illزe `ӧOdY`@WW׈'EQCtraܹB>^lذNB p_ՊH$=8dH$2ǔDPvYjO;ڵk/Hxr=6""h` "^/N e,fmKME- K>t ^8aG:OJj2t:zxޔMD7a""""""""J9ߏ^z =~?~ӟ )DB!tvv?OP__p?׋#==O~~>x :u 2(AX?8ݘt"nmf["3332 EQeX={?<{1̜9mmm[o;w{=ٳ?0twwb ''g% PYY-CFF222 37*.G?—%|_ߏna!++ wqy<3ַVk}O'DOO^y455 (x71|<x0m4O|>… (++SO=ݻw 1cN8 .xDDD~Xl]FiӦA??ʕ+5kDQċ/_=wpy P"J >[jQ~gdض܄=i@AֱVWW\,^ӦMwߍ}MjD4 i@DDDDDDt %ʉ\|ĸ@@ `L4!]3:ZfIIpYtuu ,|8wZXQTUUp\B¡CPQQ.QDp\xpmmmصk^z%nTUU!@n`PG(Bcc#^}Utػw/N< ˅8q>,ׯ_ڊP(z޽{ "4 jjjܬ!F#*++ F̙3E555VťKo^娫nǎ;>Mk׮ڵk$Iܹsp:hooϲ\3%N$lZKȐ1h2q!rYZVC"Vח<̐H$ta9͛7kɒ%ڻw~_Se J3P"G6mҗ%UUTB{k J&v횞y mwڥ{jťtҩ?Ff IyT}r[; [[cf:|?.۶h"}SҼyfrw;xsΩE3:z</yo~SX>dӁG~rac%9d%WcH$tq>}ZTJMMMUWWW>ȍ0fZ֎ ixx8g1!4lٲ)MAJgp8\#U-nc)VIO<ױc#IZdlR>a*l޼y9/ZHE}۶:}xZ IDATI*^C973$S)ga8q"M2JhΝjhh$]rE'N([FʹsPmےuiڵ7x}ZPHHD/w8&  F`xO1NHoN鱲y^{ڶm #Tf.#%NRmݚehxxP4m2MS.+Kir2MSDBdRi0 .*e3 Cn[DBYfYR ÐiJ&.8ү%Mhߣ)ϧH$rGw5k֨Ee+_^I#zJ'OԊ+dYΜ9d2Y&k1G 10dbɤ.}KT^녷{$R#Zj֯_/4u5OWPHȅx@6mRCC.^u͛U]]˗/O}inn#E=44}e\.uvvjhhHxb̲s*mذA`I&.w7@O1eM!1F -r} EckqUJڎ9ة%mKF芌_ᔾ[4-o aLqٶ%Iuuu)AS,SggMߘUCCy2^ϟ@ P($=ڵk٩`0(4U__Y!uuui5|~ +3mYU]]D"zIZdF٩h4*4tR-\Pmg./YDmmmZ`<._ PSSzY^LԂ TUU%4 ݝrJ^Z/l2nԞ={L`YTSS#۶ӣPUU ܹsג%KTQQk*_-R кuH$tY-\P`PIڵkuY+WkժUZ`b ~^ZH$3EJ͟??}>^VZsɲ>WZzJT__,wwwg.K˗/Wggg>O/ֵk\LS}}}v.@@ϗQ$Qgggf:ۭFUUU){̿˗WuuuP$Q{{ ТEz~KU-%OZ?&?`# Cyc9%ò>-ѧ6(?ߦ:-Oh1f@3`ʭZJk֬S]QQd2k׮Img /RUt]w)rP '> UWW+Z---ٳG-[m۶)J4MUTTܹs:~lV}}v-׫x<.׫7|SW^۵db1|>%I:t(0غu~lVee~q544JaȶLիWU[[h4vq\R[lmۙ~)>}-Җ-[jժL"L7А^6nܨ'OjppPڻw^3?Ԗ-[pkF,K:zMu}ܹs jjjRee/^1|UUUiѢEJ$:w\.P{{Qss***2IjjjR В%K uSa…ڽ{wgvUYYf(<.]$4pB-^X^WmmmO|BmIRfnۭ[Jǵo߾L4MݻWTJ>OaرcxbC .Ν;eYɤ<ߟ d޽[ 㪨ߟ޽[DBm˶mUUUKdR555FgΜщ'4@R/$'-_%UJ0 92ed:2GG7w]u*T +i;J߶JOLe"JLaD,o~aGռyK/)Q?/_|>ڵK'N| ˲m6m߾]6o,ǣ^xAPHz-S 0 [N[nՅ  k.a۷OdRn;sAw͚5Zl~__~_>>륗^R2akD"ҥKuy;ZxΟ?SNIR[ڿ&t=ɓ:uLڵkui*~z˗%\,wn\TCC^~eM6d.ZfQ,|իZz,Y7a .J\rEo6nܨW_}53MeYZj^}̅}0ߟy߻uaݻWz{{%I`P{kxk.uww7ސmjnn֣>HDo>w7nT]]ۧ!uR)YW7ސ8Z|z!=z43˺u}v]t){(dTzgR+a}:aH΍ Fn%ES 8ӯ#iYY_-ֲF\HV`Bu|^RWXaZ2ߐ2}4 (H$044R큁 V,%4b IR<Wmmxbuwwk`` fx<`pBf!ҥK3m[dRijʕc^8r8󽫬c̛7O^W~EWWטXp83D(Rwwjjj&tƶ&LZxϟWi(ۭgf6韁ҥKuLu)u]TDl5% g>'W\=#;ZUݤNHmoHvL^!=݄L 9!6vJ.KAy,mI֍_w-SR"90 CEʸ~B"f@9sSt@U Њ+2ݥ TJ^7|͛[e) r0 |>"} еk,D"rG.W!ko>W$lV8y9СCZf6oޜoDircZC\.400 0TUUւaMac uV}X,D"!}S@ q2A Ð←C8iy?mԇK`: 83E G uHIivA2\a*F(Ð!q %,aJvR؊lŒ9slvBFE]d1dp+3`ZP,Ӊ'6fU(… u̅Bwuɤ~_+JVx djkksVwPss}̱jkkev2DPMM@&rTWW?6ǎU__}sә3gH$d|>b ]pArJUTTiJR8 Ú?^tbQ$eY7o3~"RT&02z1 Cif.|1t߇zUYYf۶ܬ/qz g.HR ] iIU#<hp0ҍ{Ͱ9rF;"R[FUFrwa#! naLKׯ_Wwwn9rDpXeIҢ[jhhHӢEVHRWCCR6l ۝۫۷+jxxX~_`PpXΝ}ݧ[U~_[lQKK˘F:;;uwرcm[wqٙy=ijD"jjj`ʕ+ɓڻw}Qb̴?^u% 9ܹS7nT[[LӔi4rq1.L͛ԤC_ڵkѨ.]ZL… J q;T0#ݿ;w… ,K;wTGGeYvءJR8Ν;uȑ^q?^;wT[[}czw&}J(D"d2tFKWAII+#I4Rate 0YhsZ*ҡCt]wi޽rGDBgΜQ__Ξ=+ϧ[rWy;:uJs>O+MP(Sȑ#ڱc>O*J) úz|MmݺU6mR4ٳgu̙IR){{裏ٳsM&zWc=#J&֡C%=_O~:z-Z[a(J̙31Ң͛7ڵk~^z%* ) fc._pA^W7o֭[ty)JԩSڶmMU߯@ ˲J[oiǎze۶ەJ tYmٲE֭ӡC:oݻw볟ѨZ[[Lo!IjllԺuJڪwyGmrenѨ:۷g>HDbZZZxqFm۶MpXOVKKˌcƓTSYY9-/'ɛoO\m[0=Zzּq3MI֨K[R]~ fˀ,&&Bq0)Lm\i4tvi޴Wz\߼B'|T޷k\}衇T]]ÇCT*rt=w>_O{b޻S|>} _3G 5sg-/y ,y󩢢brK$ B߫Q18B EQBqާ+v~HqKݸY7'^7eSzvIؒ$f)jA\Qsm;6e+W \(D3^Ciͺ{544`0T*@ p8ÇOׇ|?eżw|۶e zϊ}_3D-LdL'hTTJr\e0r,i6 Ti7FAi "mF5f`M'30s*`K6 D`vq=,lP4 ndeLӔ8"P4F%}r ,qnv*jqS70dYDF!ϿG/ϷnN kɱ>נG`Hc'у([*vSL51MSe%zzzJJ*yzs\~oٴ I0!Az&}yC* ix/1<UUU= ^Or|2 ^"[?Y~FOC\sM/aK`I&I񶶶K{d2fg?++i䛌úvN<207˲ON okGO?߯'|`[˥+WjU4UggN>c-IDAT3UEE nrTUUAٶ]F\.~钔T)&|#r'͌F/W!;`k ˗/k֬TYY}hhYܲ:}+_`BV}}~waJIijŊ?#XBCCCJ$2MS>OpX?trw1 cZnW$)wWLS"xuI1{u ZUi(>=]!;ܐngXnh$ؐ㦦rU("Ѐs2e7mڤ??7 ɟŲ[j~('Թs v5o<թnZǣh4Z Ð嚔&qR)% b1ٶM0,UVV:ixOCPPRJ{ee%@ThH?ή0bCzN˗?H$xԬBJ$.D"aIR$с4|=jlla =,K7Ǭ)S(/].˲,Y5ea0zƄ;!rUpGx\HDHDLQ*4T*/GR\Ue}$]A*.PL%|˦= l\SJ~b$]H!vq~0UDQR)}/iیy^566f8000tsmmjjjѡxOhT}}}Fc755[GuuuJRR"a V*R0dq{Uij^WUUUz* evg۶bbXI޿Q P8V8; 0r&/_n^"״53\Mf`LBm 'nǛj"Wu{T{S7 vڵ'ݘH$lp\ڶm^:f_>OF}}}z3ϨU_L.]lZn/Kx=:~6oެfB!;vLO=_.i?q}_ʕ+%I---S{{>ݻW_״xbEQ'v^W_/}I֙3gT[[0MS7nT8։'zjkk}M{U}}t)?ŋ%I7nԷ-=zGrJ9sFJ_pXXL[nWGG]?ɤ$wwA===:z~+ J.]/Km߾][lѵk~WmmmڴiqmܸQb:roYaC `MMM&vZ^Z4R+ OW\љ3g7e^WTuìe,˒Rԁ_^pᘤaI d4H *x<3Baf幾Tz$},Lkkjj>WIt(q͛7oRY[[+0iӦ̷+**cZJO?,R}}~W~_O=}L_җPO<",RMM3z}IR ТEҢ~Z]]]ڸqq'|RTJ;vзm8p@O?^}_3|A=czoR_W_~C=_Wz뭷x}NG>oLIJe˔L&?J,X~ZZ~>oo~WVSS{1 ~y\.\.N?4M}3)ѣz׿;C .;c='xB?OTSS#߯\__g^l/R~\ɼ^VYYySrM{43[i֭[m۶evUQQ&_^w.\cǎi``@l*Z͟?_cD5hT~_amL qa0STW2bS{D"L S~AqmT*?$)stP!;PLeXu'L{g5r<^ȱ<2s23ǽ5걙gc0C vAZ&|fUPU۝bJQ%WEbڥrb}zj F U3\Bq*kY%P\ -+VY*8f`' +dɞ2PaҔG!sTl4:PJj(T!_Q݌bB"T+&0U): 纱l@`"Xl/`xlh+ؠsݏ6ČA'TUgvtaiAS7W1HUr`6@>"@ L/QlhsyN#_uBU MC2C* 1;̐^og-`675D1U 0PŒ 0F7)"`(:4j\C 83Y* %Y}\Ab2#B^:r"{?v(``&(t?WńBUQGxN[>c+40@iL Yaf6АݦPHb0d ¡|Fo>OY V9T Ŷ>&o9L+/(0Sa!{z|ftAb0R kyB -F!3xa\ 1kSL ì 1@n!{x|mME=Dz ]&d^/*CPhB(xdJUAJ^?^`!W\ϧ2t3i'F? C}[eL0U0Mvu;:Y U3f TEHņOH([;M 4\ń+r 0SJȵPPa 2Ly9G dOIk l=C/ۭ3In"{[_]>q @)BbCgϷb6Ai&(P.{Ⱥ`6+4=DTWHH(r&<* T0veL1맗Hcs[ 4d/+4=e+ftݭ#mS, ` 3Z>C8歶`) >3De: 1dB(SDMdP(VL ĠE +fZ s[z"׺bm3q3PLbg07Dv|&NSA9OȴѶؾ2 +SKLfۉacLU!k:`*LD[!W9d30br  jbCfV$&|TsD/۶o70# LWАv`0J|)+nՌ 2HL3tV i5*@0?S_ , LLhlA1N<:?Rb3sDC ш.P ip  n.Bv: QΎpt2;'~"E΃%@( (6~~!9bxnB (~VE 5@Pt,B %(g~&E2yg@Qq py]gU']IW)w YstPO q:_Z33<H-k3:}GcmX$˴|5:n ;N.=֎LtYL  Mr16c] d PNl||2l"9vzdJt6lȶ@Nzanw)angRrV^dLtEp5LW#GA8u2XZk]xRYn uM; AC ɞ_Et 5@МL<~ 1$s.K*"~:Ad"\@@:qإ+Đy St@Ĉtb:qKG!sIJ?%`K>* 5hP_ ^7U3 Y l0N7 t㕪C$-!@&B  ձ˥ C6o!J$5tԴ Ei{duJxuXC~ ,D'SOhD2dCAtuw]G"!Tݥ@EPdHU!:s3@ C*;6"@ Pz< 2*HU!D4|x^9,bTuXeDHW0.QdH6KD LI@ב#"빒 Fh,@a'K2ȐC*yS5EDuɄRh` H1>ʐ C2"l!x?K*B2X9X})D: hwHXekB,'Y;{!A2SIJ tM!ޠ!] CC  LYHSC[hPC63Rr:]ݑ 2$bHtZxI Q]zNO!Soƃ@.azTO!H$@H)mDB tiHg& I]%RdC#EW}ЙE+GPKT:K0.+3=DGb 1rTvuWAxte^@M@b99 SdC!H&"=v<kT̏" j%0@CK!. [GwHR΅ upeH!p w|Wy.E ݶ.jtHזb 4Н:HW(@Bn]AX1 1D 0!nt~L.POd L7 Ι 3+`wX vm Nhp]̠:9hwʉT3@ :{!2#`wNmv+a` s[ *ve=cb@ 3tve4C}c 2M)n95׍'k0!x]pAPC4DnHK"T޿p b7%RdN/)!)Oy}y$m <(hٺOp!TM7k!}cE@ҙ ޕ!ApJҍvK|.u1d;R -8ԥ!Ҵ4НҤ3s+C% 2V"R%@ !I?I&M)..>pTlf}0 UR^{_7tӆͦ|fB uB L;L!&IaLweօ!Rn5nڇX vtM\q[ZZV+03M6@$aޖ$4?|h`ץYhh!x )|z8H3@ 3] 2حO4Ȑ'PmSJ_^^8*@CpuEEE-::DV%h%K!]3@Luet|mt{ގa!x?`씔/Xsɒ%-LӔi@JZ$卫[dɒcWph}#CZLZVIDHerX2D"4ᦗCK Ǝ;)))Б pСyUUU34$EX}bXoB)"; ybbnHahOHѧڕ:D CuuC.ȬPCKK˿+++聆uMXMDN"0up"]/Q{6D63ueo ֟Y  Cn"Lpr]P]]|5n8:emhx W:fHDIJzc7SGW7I;vCdkaǎ(+njHIuMȺ!hC!yN/iX_gf@sL2\())x$9u>"HS%S;H@gOHaHz]$ͺNZ/Jrս- fa0 I:\^^~$&I<̶ufۗ6۲>ᶅ7HJE 9 =PM+ٮU>X ɨ~LR$ 2j?,\+M"ݵZ^)?v\^=dk$9s\AxvҢL2r/әDe Ð;gΜ7|j|uSڈWGk&^vRͺpaw|ssM:K+U#:[D 32ݾvJX9l;ભa^@&y<555vgz(@BB 0M^z]+EaB i%̠e٬NtvHa6"B!9i&/\ "Skd 4IO~ra%2Ȝf544dVCC3= 0'?9AmD"NKva*k&:3M|Jq &oׅzPR_| SԔaP@X n>}?InIMu(#n R v]6nG`OSDgb"E(p!!s&rXfj~UP> i~_j ZmRv4C궒?۰ c&sS%Еy^n577D4MU͒$өgc:eCGC t]%Lh ! fO,-Ekp"\`C'ukNcβ)wC BИEַ@To<8U{T!vk6j֪b j_^]2ԣrtr@z$$:| TXXMk.`D"0D(@R/WN+i]ּT#KZ}o,!ӷAźhx.R4EtBY X Z*aH/ni`/6 Ԕs777Y*,,L5 " 'AH\ak:HuRc-R ssmΓ]QWWB%1#gzTVV!Uy55fz$1tc&-7*)\nkMAl:$h{ِa*3tDsХjmmUcccLITqq::(W`t[Ads;ln[}Y+rJZ0C 38",G 3C da wf~ 2䄰L;_ߛX]!V|tD_=n0=1_ ٸn:t(#.))Q~~~^3LbZ-r: Ѷź>V\'unvusȐ i4u^]$in銑%ڦin@gpȑ$СC:rH..kmE6]'1ela\cC'RYי9dwcw'GS;l(?RN,a1u>3 4tGÇ3= >|8`Jĩ'1nftp@e87@jzG&UTThȐ!=z h ȒV5fz1d0M+3wCEfW!iYҢW4MQn;+ ~)' Oԙܖ|5baHiŲ \~uG #XG 3DJo;"lfpXm|GW$G]]2IzS<@ǨRE .1s.2]|r\i!eeeH,k rA.eE2 dftS7+<h-:p@aGKiA %jj/ _6Yތ,momnHˉ  gt ,s- Kn=Sz%I'NԴi(\ʕ+?Q{멧/ӧk̘1i!˻{s#>pҌ$z}-znmCC =[шLqjlljllTiii ٞj}=([9੧ҼyT__z͛7OO=T L?|0 C={h̙L<b׵L!6mAz)Տ.m̦&5\$'{7<2=XP{, @;2{t7f`4׾ZI.ŋ%INSj홦ٳgkɒ%v0 G?Ұa$I7n/~ '|?}c6?f:ӫOɑ^ϟ?-ȣs:ef_\xzEuzs"(Ԥt@{<.rF :@T__Ӻ!{LrJy 2ꫯֳ>QFiԨQFȑ#vZ]zr\?jXd*++5uԔGoa@ٳ I&OٵH6e'LN IDAT|!j70kgBMCl8C/lj2 \255584 .ܢ#dۭב#G2=$+Wg Y׻wo͜9S_WaIҗvNUUUA۶mSaaÇH۶mSCCLt}z32 ,ٞKaK;N:2_.޶1KKdr]rE.9Qe0wyGfRmmm\DžW^;4f̘T @KڻwoȺ:}Yun!={_֥^`rhΝ?>>onf_l@׵(ue0K35]8(S ;zuYmiflʉEe亹 W^y$Co&=:7nc=Is=uխ[tm]3C6@I$Immf͚HV-Xî`-**RQQէO3F?Էo>^W[nMHuʁ0v]dKԢL, N-R7$ijASzΐ^oJ̙3tҰ_^<@ Ȑ Ǔ SMt9q F͵ Щ2g7~z544u'|2{>˗?9,]Tfuw>|X7x9"Iڷonݪ38Cv s8 {_KSLH֮ g,bv-P;խ+{Z[[:D F̞=[yyy7n\~WC=2=DqqqRnmmU~~V? ~3u|G˵r1̐m g}k_Smm3^ҥK+//O矯ɓ'G<Ç/kʕڻw#˥RUVVjĈ4izwyG{osWү~+Ib… C9rD˖-ʕ+U]]566R:,M4)p뭷k.577JוW^Fͺoğ{ԤEiڵUmm\.w޽{kذa:T^^G .Ԋ+{nnWӔ)SԿjs5y40_weޯHo~p@L37.%㯻:͙3'x?Ə/jwk&kd{!@3D A\#\ccf͚u֩>dڵkvZXB?Om?aOHqTn{n[NƍkWl՛ozHMMMرC;v5|g?SEEEB׉?̙3G߲el٢E_Mf{ƍ_"#Gss6oެ͛7eHg|iPٳgs1vi>Ä;wꭷ ,_|*) -[555lhh?˗w:t>#-^XrN?}ƍfظqc0Ν;'[fM±cno޼Y3fwZ6lg.̰c͞=o߮۷kɒ%+]jO )&̶dJTdzt1; 0Ei`lF쒝bbҤIjnnܹs?crnbԩKv*HR. raСbW^EEܾl2꫺袋BٳG?Ox,o0t:mr:ڷׯmj۶mz衇R/mݦ:%XxEUUU:CO0"F!UUU9xȝ"޷^3~_ԺuB=Z]w]LzGm:4pIwuW)tjkkuא!CBƓx}ӦM]vmuWnfQPP#F=s̨z^SS;߁g}V'p>숏ރV3C:3-sez@1[izeי!#(c` kL:USNMYfl>b!D V@ի&LAQ׿]w t%.rCG֭[C cƌѫ˗'?I`]wݥI&َm1b*++5j(UVVT{ァy֭ӊ+ٳgGaa}{ァ3f?c?~ ~*oΜ9!AN:IW]u*++^ӧ~1#qBwV:qkhhЕW^5S. lz7uyv^SZZN;MEEEڱc -$п]veԎ;siϞ=$4N=P T\\ÇB555ڳgz8]aӦMjjj w >k׮ -ޤս{wy<߿_}QHW!n;VNS7o#<p?AG;MÑ\љf[ę7V ԁ#ۙ{{ /E vgTMI4X;4X* ni- @:aB>a>a}о}$>5n-7 #d|]zV>`uwO>YwuW`mRfXfMH뮻.ˆ#t7$۷O|,*?;`͞=;0oСCu/O٘X۷O>jjjb /խ[vvܩ 3f رcߪ$}gZbEHLJtشi&L OQTTw ۷O}Ygyfva Vyyy%$_8b嫯:dCմiK߯>L'|C 5>Y<hi(?w>VoJHRs ڮ.,AE!+bN";z5w\$uOiĉ6m\kO{Ƿk߭[7yzWvR i뮻կ~U#Fб1bޱcGJd;v >@a֭!?3d+))矯ŋ`HVqqXN8!dnA ;wn cuM6M!|%_?CQQQ Q5cɻ9r \zkmV >rUWJУG]}!SV|!ѣGLEq@a\rVZ'Z*fbtjԨQMi?LCF _$鬳jOp 3&iAs1 6vӔ tw_YY hf0 C/ׁxB@!̐\&"[Щiԩ2MSOk61;wlKر]GjhhÆMw|3㏇t0MS{ŋsX^W-f'\!ߏݻkС@BTu׮]+#f:tJJJB{g3><5j=v/Bo޿`!@ r; ݹӝ ̐a kٲezGB~i귿ZZZ/9[1Ma I&MJi^ˊ0ሸ{#!d[uu,X hҤI;/uVuuuHԑ#G>&xjs02oȐ!ڲeK`   (߿_=.\p:&bzSPs lu8tPrGyyyHv7.iӧO;ByyNE^\\K/Tz*++UXX뮻.NCOF<椓N >cBֶ?ѣ5ҥK5m4C) O0'ρ&-_\+WիyvaŋR`µ^G|LN<ĈaI>`E'HaW}y}k&Tkkr-K~m7 a馛rcyޔuhp:I߁Rt_x5dt}j /LyӥX'Oɓe>S-\P?|`%KD 3D?@AfϞ >UUUZti`0 ւ{G! 4HsL(vo|vYfi֬YϷl2-[,={!] xS<.͛m ۷oY C_җqFI0Cp5oӢEK/Y|y `w_Fe{n@rJe&;0Èi䎧XJ6oZp[o hwh(..nץ,ޱW#n ]O=TJ[^^}kSzގdN}H^W˖-Ӯ]ZeϟqƩJP=z4wkk}Q{nO:RJ#>3/ĉKnMgqF qXB'pN=Ǐ Ϟ=[tuשO+DX_W+&\JKKUWW{7H^QQɓ'>477ȑ#e׫kӦMn/$4eʔuOֶm$B_wy*x≪Ջ/?0p矯SN9|cǎO<KÕدJwv];w'ԨQ4l0UTTP^WV G &Oy睧7|SwܡnIvZzj4hP\!J$O20v]Ŏr>I |cАOhyyɕt\2wh>6Ɏ=d 4HNXr֯_uMn;S?t,iȐ!$Iַ:tHӟF˗}饗pB\.:`}G|RoFCw uު5k:2? Pyy.0ԍ7ިuzc;2#//O7pfΜN?u=:䓵emذݔ6lPSS R}駚1c0 M>=mVw~7pC\8r-;3gs1]v6lؠ 6օu9,O>]n Xo>Wa*++Sss}s% Pnw=rNgh(aѿ? NMn tpI2tlh蜭N<>#N1akܹINgw trqX,믿^'N$;wn) r{O]ve-.}{ r_\f.RI%\˗kڵL JJJ4|յ^%K{Ŋ2dHݻwo~Պ+B; {Ygoc=f(((>7(:cƌ5\`޽կ~UÆ Ӗ-[ꫯ 3m 6L?g?uT|G9ctUW颋.Jﯟgojȑ[B:7n\H0v?k+$ݺ=.%%%/'|RW7M3# MXb76ew0 2}6wm}e}uuq71UaȐxR>|8c{?#bUPP9RnC3O e]_SN*4OdpTukݺuZb>k߾}***R޽5`]q;4w\/ц {nu]UUU*** p84c z״{no߾1bNfX" z}O<[ETiiiL%RwV\E>|BL{N?t;ֶ9e 4HO?6mڤFkԨQꪫԷo_m۶-P UWWkɒ%un[]Vk׮հad6lؠuI^x˹瞫cDUTTB ҤIRСC#hZf nu]9cǎճgvx≪ P;s6lؠիWkΝڷo߯BKW޽{{њ5kdm۶M |^ziذa:32@=ɩ6y :2?⡙ڭ76 ȿ[.???0COFR !,)-cxoXk_$#6ݺ~>uAI%9ޖԮ]&BbSXX!, >L38^tAzRmmmJyǦ|k̘1:/kڷo_LS_~&O,˕Q938;Co Ӑimv fL6Ĭ?mc4RB1d2ؐk:Paa2= 4 ى@;,p;Hɹt˥K/TSL֭[j*}ᇪVcc PQQ*++5x`y:y3\;ʩ+ V! f[m?%IߥmpdCSGȐc vx2=[N328,kNo0-Ga>ݺme?eGкΠeuuuoKJz^WW}}} AL [Y֢6e{)ɔiۦWmn{ZKOҴ}V^.Ù'Ñ'W](יpd3bڪdzz衼~.//?[W/|o[{m :uHflGBY\:l};oםAFp02NZMϼT;4k1 蕧B rK^^JJJ2=vJJJdt /xYsTmQ?̈́÷pHPá@sJ͔uVxmcáy$w>YB=߯dvCUl+4F^ڨ|Ojj [t}յ|}}k*(..VqqG@Ù)R/dʏ Q_g9|Vm[W{y}^V~qG0jIf "\%֧{LwO_>Wl+j΄}K!WCzS.QU?u\GEڙ-Lb% OGl*..Vii[ P```U[3ZoaՒ~3!@@ Dh3h)vڛVBU^!l>Avۙ)}h3qeb=b,3aUૉ_Gߪ%ul*++SiiiQ@@bDz#30-&1h;ZտUI6}Nj* d6E$Eإ_B L0 <3YB =;OAjU6mԦMl6ӪPEE/X,U??iIhnro|}gXWujM_v/h懎$jd?3%l*GsqWporf_6تX5o[^ZUaIrVUv)J[7~u~~~%@joUVM*k߱ ʲht"߮J=I=I",L=q&P9T#P9BCE (6̢.Vl.uGAb!({ ZuΟ+GSnf;VlUW]mkF>uD$13`otG#,y$10g T`z.3*xQ$94տfݎ ,,_!hl*..v)oQj/Y٨ @KGleZ0` L 58Zo$* @*..VYYz dj aGk/s'@KF||| *//vYYW~~~'&a4@X-3G v)Fm.: T3S!L00 T3S!L00 T3Svh?$^i] #3%z0fB a`*fB a`*fB abbv/v:v7xax]epDiF@efP= I*))bEo!zRSPZ7 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L47ͦ?X7nԁx]}5jG[͘1C7ov'رc)..֭[uV۷O999Uddbccx1B.@Ю]j,?qℶl٢7gbR0TSVV_ztԩ:333;wJ^}U]qzh%K 2Tn:]tE7n\3V#F;yvޭ{ɓ'>>^+33Sg oc۵i&=c iٲe.۽ۄ" h m޼Y|n*Vo۲2(##C|M@]x;v~_) 9Jԝwީo۷o_y* 233f F޽[?RSSOqq޽{7tS@㔕i̙ 2HҐ!C\Oiu~I x ad+hn.sk@c|X ZN\zӧO3Ug;]?pmVf̘ьU3^{Ѳe<1c<7`Trr6}O?v =U>|~a-ZHEEE5EGGk֬Yٳa8`l6mZuWzo!ҜZӟmYgXxиqte)%%Eu%(,,p#9{j۷o_ >\={TxxBBB~IvҡCd4p@7斝t}NxTLLjo ֮]kݴitY^{8JڳgBCCT.N7S%*fC?61114iR %\زg p(33eRϯ*/ݮj۶mڱc?SN)//O!!!PΝ5p@ 2D{nUZZ;wJMMUZZrrrTXXBiFaaa U=ԧO]|Ľ3yf뮻:͞=Ʋ \R~ӕhuA^zƌvwQQvڥZ{թS<)**Jj۶+&&?#Ч~^VXXڶm.H_~}egg7xHk 4H-2WIIvڥ㜓)<<\۷ׅ^.HVkw_[]!Iwn6N8oe?mڴѭު%K_u ,Ђ ,tM7^?k,;v֬Y?:v옎?EEEO>>|*Ҡ:ۿmۦT*77WEEE*))Qppª(uUӧsVt}5^o_<nPII6yyy;wyy&ݮ 67Pjj6999Ç jذa뮻Խ{wC)((К5ki&}7*++me!##C?V^-ժC[nQ~fl222oFڵӘ1c_WVii6%I}${={.FLGO?oκ'OɓSCՌ31'NhٲeU\\MqNKK֭[%I;w߮c׷}O]={{155j_CGyD.۹[s9GUa4|}W5ڕ*//OwzGTCyyV\e˖)##vyyysGvm \'@kѰ?цmذAƍ?$ycǎ;Ԝ9s꽑nצMtw?vW_կk ڶm C}l64e-ZHOnp:tHJKKSbb:7k0`@˵pBM8Q+V7́$iINN]wUh)v~m?^~78s=쳺[z:2ȑ#uu׹쯤_~\n׻%Pʿokƍ馛q:7ٷo}7sxz饗 wYPf9Oւ0ҥᶅZjfΜQF믿C#}֮]ۨ`Ï?3fԩS_]۷ow'NNN֢Eϴi\`Tyyyz&㍛OZxq﷡JKK5}aݡDs5oh 3^zfuyyꫯ/l"͘1>| /fi֬Yݲo=Ig&<ڳg-++ӬYuc9zK.>}~222o+))I_~Ӷ7owǯ9lܸ) r;Қ"z͞=[n믨H˗/M7ݤd-[fx븸8OڰauEF2OCl6p{qD~;wŢ.-}5Tii֯_}aÆz__p)[뿺W~z-͜9ezH}5T;yyfg}pݺu cX(?k\| Ϩt;Zev0;jѢE1c?~;ӧnml2}]vezG)I3oqڵkuW:\7f{܈9(EFF*""B%%%:KB IDATu>-[+=))IO˶Mb-YpEm۶U\\ڴiSN)''G'NnW|||1ݻwkܸq .<<\ove.Mߗk֭rss?v+V-+ bٳ'ˍꪫ4auWM<.G<ꪫtY(iwv<--wuƌ8YVv+??_ǏסCtj.]RΝi fS=z˵d}ᇍۑ7|S;v5\Sg]ޫW//g\\^xM8<_l6çEw{W]vU~洎"+Zjv%%%ڳgOv_:uRΝUVVǏ+--6lɓ']+11Quh߾}Mȑ8quioFG~eϯw^z٦>IIIc=!CT-+++?.(++Srr~˙+ }Xv^ӤIt& 7ovGt9X{Wm۶Ջ/貟l(o_ҙ}ݧW^yXՄ;9EXֽ{w=*((9>??_%%%jӦMAAAN+))ueiڵtr;wk)~-a֭[7=5k6mڤkǎkt999Zf&NXn+%% >ܾ}{CnͼSNĉ:qℲ2CK ok׮ׅ($$2ݮ[wN 4~x}||4a-\f 3 ׿sw]>}W]C_GFb(Pb'T\\mLǯ>]7qD7ɥ37ɻvr<}%9_qqq޽." :ӣR<Z> h5JFfm۶)99Y{u9tvm_}U0C^^«o999OZ~ۧNǏ>3bĈzo@'??_.U ݛ:u䲍;;qC>>>:t'%);;AUטבQf~-Ν[oUYYY;u饗60k #ׯtڮjmذAJOOWzz6nܨ+!!ASNU~ԗ-:w'@ 2IVUzRbb,Y/B=wn߻]|||_n5i$kڴiS T^^ޤހɓڝwy "##]B=FΡ6%%%*--5Xf~+EFF'46..Nwygj:hÆ ӄ \Þ={t=gipΕt;u ׵^KjɆɩq##??SPMУ>YjÕcX]BnM;#S<+ >_Gzanor਩xC=-|g*뼵'@@aZ5ydC7m6[ihCDEEY_;vhCXXvMƏO?Mzz6цܼyg1.##C[[5'___=z7t%׷ic.]T;wtSu\~C VoΝ۷`CCC] _uѓK.nQFi:sնm[?ׂ }ZiiiSbikާzJ?%IEEEJJJ/lh{o6l>sN>{OVҠAԱcGjԩS:zRRR_*oY Ze=S?u&~ ^zܹsSo\=s.G7p&))I+W~;mcbb\IMMuw[nÇյkWhk-K.ժUٳ:uQ0zeFOCph3]vπtYޫW/=jtg2224|͟?_ ~\~nM6:uӧS`֭:d}AA6lP'Nĉ|K.Q߾}{nC dZ5uƔlqVjƍM$I .ԀԥKhXO誫[v6o,Llƍ5ΣbQ``vQt*Ul[y|L3֮]}j֬Y:uBCCgnn9T;v΍>^:urڦ> uiʪwnWQQQnKҘ1cZZguޒe#:l6ӧjjΜ9Noh rׯ_/Vgbرcݺ/3Z=nӚ7o~g2jZ{h,|n͘1c4b}Ֆ4yowEgugu":z衩Ssu{ zwu5ަZlF:`-\P 322R~mNӦMӼy֤~l6[yQwܡ^zIM'88Xsc=&???7U|]bBW}zvy:u6EO> 沿ڶmV|Yn/믿9Wζ뼥'@DuDDDo|7xCիWZ:t?{3w߭m6xX=zk= _2eJ=ܣUV<}8p@ .t߯:XvWjȐ!.=y}Ym /hƌF|, 5^ШQ~z^J ?|- %$$(!!ASLQNNۧT:tHV~~ TPP ___*$$Dm۶UϞ=ջwoOnW^z5m4޽[w޽{|GRTT"##ճgO 8PwTްIKKӚ5kk.=zT0wyׯƎΝ;Wm;zhX-?'EFFn6޽[vݻuرcﯘkN111ԩ ={z#44T馛k.رj\*44TV߾}5h %$$ [TT9s樬 q9\7k,p *--uGrr>#M0i &ӦMcٳG'OT^^,]wӧ*57iذa6ll6:oVJOOWzz T\\RiF!!!P||w.{qs:[~-y'aR볳m-,svV',>*uϕ_TGR$kYYf?UYAmLWel $U헯վ,_ϪMuuN_G\7}G00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!L00 T3S!@+6| y==]ozj_V޽w^}Z={E?Cu֭[k)11Qr,~}]]wuoP=?d',_\oj,/..VnnT( r%uףn׾}$IճgO/WWSާVX!I5|pIRPPѣ9s$I}հaԳgOEFF:qℲw^mݺU֭~_uWRǎRuSOL=zXUTT(==]Zn xb߿_O>ː‰'駟j„ IKKӆ 3x|^~eIR^V{UXX,9rD[lQZZ Р[o?+F1111ʾm6ƍ'Iӟ++ud֑Zb(11Q˖-SգGoZcߧuIzK6MǏWxxrQIgF $G0ʛ&!lyZl$)!!*xN>ڶmB=?$KW^y _W;vT"cǎ?w#G_M6 111 ?|]̟?_}.\ .@VW_}~Iҥ.zup>vXT}_9lo~μvZ9rDEݻwWu-(00i3g_?﯑#Gjڴi.rm޼Yׯב#Gt1SNWbb:wl|r˲Zz'4f̘z\}]-^Xҙ?;koo]111?$iɒ%ӧmneffO+Vpx^***4vXs/_|Psz+R^z6\GVTT튋'h]o9(zO۷n׌34aO'|p;ޝUU &"䞻eNMүI+ieƙ&_6nV悦.. ** `q |͛7JJJRfԾ}{=jݺuelBy),,L4hР Gў={$45fk„ ˗kȑ>UUzfu)|L5kf͚ T:?{qN\Wp]T /aÆV7$ԩS:u6oެE*Z (zSzuiGѣGM;uTb9cbbo￷^ zǔTlٳguYm۶MӧOرc̯֯_Iof@ʬ#Fh…Ν;5i$uYIҨQT^=͝;Wyyy p9?o>!!!~jժ5k,8p*}xxõyf9R/ׯo.\;c,Edd"##b (IE#ӧOWZZ$%%%y#lTTPP8)$$D7]؉'4a[ /U|P>`i*~N=Zr>#ӧ؃={hÆ rrr_5iDRg+s>쫷eq~f劊Ҍ3n5<""B믕Zj].qãX9CBBN|>[p.\]vOSo;^[l srr>XQԙ3g%IҥK+k2do߮y_~ 8{$R]tQڵcueĉfj֭6.][U>hhw}:wP>|X7nFnBysGMຂ *2y~j٥qvv3RLLz-}%zjIRΝ5rH)11 wO^^^JMMՙ3gj*j޼yٳgo͛ꫯ\奻[{UPPP ۷o$uݸާO:tHԩSMSCPP`ۄwy<<<$M9m4]xQzꩧԭ[7+,,Lk֬1neggorw;߸qCӦMSRR<<o9rGΝgk̘1ŋ[nX$&&K .(`F؂u%%%>0Q8e˖U^^^rRRRJM[uKjłP,2;V^^^.~OXԩSG?+(,,LW\O>D]vuںXa9W*޹p4zj㡴$sпo߿_/_Vf*eˌaK,F=zue}z'Jcg~w{U``yf=쳕]zCKcz=zݫg*&&[۶m3Z 2Du5mj;wJy-X@Ѝ7w^I#zҥx񢼽l2dIӠAk ȑ#.8~RSS#g?ʳ={VZb ///iӦ>׮][l9U=VZzwsiŚ6mMӧLR#+{mYi-ZWeߎ\Vj>G]vU~~n*Izw5x`Zh;C&MRzzb]"8^R-GnPÖK F33JRRPyzzW^1ZصkWvqaÆ嚦(˵Ufffi'NիWںuUK&ڲeiZeҥKuV^hĉ:q>cuMJR+ׯW*4hq̮], ^JOOׯo\OZZaXlrss5f̘rwT#~OÇkŊZvNN:T#pP ˍn7 -匍EysTT1 J\|||4{lJHHВ%Kd5h@{`aGy_LLcK&MʕoEs*ʑDZW^yEG1ByvdbkVޖ3[sekkw,)]U_y,ս>JҮ];999)??_Gt[E4jH/y}w 0?KrO -[/_Wzz+p^!y^i\W߭z]8 _dsvJl&֢5{l]rEm۪yrssAE4jH?Ν+IfX/-[TntI驧$իj޼͛sݕÇkRTTڷo-ZH:t֭[… ڽ{ƌx={VjղzrC>33S>Ȱ4!]VXg~U*Zn~8p@ǎSllvޭݻwkѢE={:udLTGa헗|[UyswwW kWYe-U\YYYn#UuP۽,fvڵksi֭zg*2;vh޽?/:-Z(&&F6lP```ʹqFIT o0]jÆ 3Xpcp)-XB ۶m͛7լY3͜9SZ*-{}g5|pI҆ tbi^ $wwwܹsݻljYpp`[:ttQ%%%bBڶm[$M2fy(T٣z]@Tӧ֧?$gSf5<<\O>Пr5llQe۲T~V^.WuJbZTU[UYfF2ίX˜_U / IoRjcǪ~?\e#//O~n޼)WWr@6ay%RQ0yѸp$ggg&Kl5_^ْ\֮]+IF7 䤷zKwy$iڴiUGwww 4H+55U+CW^UPP"""ԥKbo{ӦMtرb]LHo-w}+W*44|[:uJ2eJY}%ҒDE^WZXZ4[q:ISv$I˖-իWγ*9b7Pvv&N~iƌPxx,X`s_qmYjj?+Җz״`[FmGP롦{YT/j׮YfUyyyz7|2ΖT9r.{i=<ͼw1a1l0I'|Ϫl=SZhN:Dh֬Y={$iv|UNc~ .ԉ't5EEEO?ջ[['N}:zbccmԅ3fH*x{ PC=?Gw}wuE~zg$1oJk޽~ޖ+Xlڳg YX=\ʣ&kEYz]P롦{YT/:uٳg^z… 5n8}GڷoΝ;pڵK+Wɓ5|I]1xzzVzӟT^=]x̴:u'O~["##uEh…?~$ISLC=T2Zօ1{9Ē%KOkȑzwW_iϞ=:sN: ۚ6mպukY {ϋ͚5$EFF㒤r/{;\WT umSVI3/?(%%EO?֭L?^/7,XٳgZv֮]+gggխ[WiiiF~{6Z4p{GÇז-[tAk׮] իW(_~zK|ԞTѣկ_?}:"##m۪UV2dyڣ2ԩSƾ?Ѫf^zI!!!ok…V7~ޖ+]駟.???=6իV\K*88_~5j+VS뵢*[˻{=v/E˖-5o<9sFw֑#Gdծ][գGVE<ڱcGo޼Y^^^5\"T;S#Z{V[ wuuGRr9￟ }/_6>*2Mq5N%))_[_sI*o޽֭[8IMN@׃ kƍÇpio_Ao:tᒠ:@u#T#GrrrҐ!Cj8;hӦMzKvfr IDAT5VMܺ,2C5\@y|'աC(11Q!!!㏕O={lfU"%%Ew$ 6f (#G(44VѣG_RĖ-[#WWWw}5]@9͟?_۷o?/*!!A 4P4vX7" 8t*e-+"K֩a׹qN6,\K.Krζz @ sr*xbs$)??j=$ݐy_{~lWi5q*!MIRpDP%NP}fB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S! TfB00L``*3S!J.*++K999ykH_$IRFj$IjRڵUNtnI3@Uzzj(p|(''GS jp0dffƍ5] T,eee~rss2kp+JOO'WƍJOOb2f+Pzz233krssiWƍͭbD fUVVVM5,++D08 ^}fɩ"$W`An޼YEIp>3t`+ TfB00L``*jILLTXX"""tu%''K6l _:uW "..N;wٳgmz^Hm۶2d|}}}fӶmtA{H-ZHСCLBe L,33Sk֬Qdddׁ &%`0uwe˖$(::ZOVDDUHYF P5iDcƌ⠈>eͿM4I mO>_^W$M0AcǎE0Զmۊ24nXGVVzhmܸѸy"4l۶MÇJvء(yyy顇$9sF{TpnݺF .(((f^uQՠAM6rrr@rrrx*55U...Wׯ/???nZׯ:TE5`˜9sJSvm5kL~~~j۶x5hРK+WhѢEF/֝w)??.P6bccuAamڴ#<:u9}VOjՊ2>d }k׮===j0۷[lhܸq,4qD}F ھ}{1VeC|x???_~t%]~]۶mӃ>Xm 9sFTuA 6(99 "ƍOGy/OOOH<<<Ԯ];4G̙3ӧOW@@@;`2ź=ztvi̘1Zt1,""B򲻬HK&ͪ~wwwy{{M6:xNh :YZl>^S.]4nܸO?m|3fMf&!!A&M2h^uA+..Niiijڴ5k[.7rJҧ~f͚uE5lP}5]8}f͌(:3fΜ93g`?zKG5M>]Ŧq&L\Io~^?EI+Wt%K qLV=<<γhvY<>}ZJNN5j$___usssO?)**JϗZnΝ;+$$DOռysVZrvv*e=}!'''k׮ӯ[Nѣk3Mhh@q ՀԹsgEDD(44TIIIrqq2agQhhmmUV;.]sʕ+P ^z 8q:$I8qb~J]'ԤI޽{5x`%љ3g:FOݻw/TR-...jԨaEuڻw]~] />}:YK.զMn5`l2X%xQ 22p~K(ڵk㭆*66VոqJ埜^VÓӧO8JNɓ'W:p۷Oԯ_m 55U;vPTT>D߲eԩSl_rEW\Qxx~Vi( 8P۷7ƵkNGQ^^"##ս{wOII14*<-͛7u%}7ҥڷo/77 -w\\+p=h _JS(INN^j|oذo =Ůz~m}ҥKi׮][⸛7ojŪWZΥp-Z+?{R͝;nݺ9'''XXXZq+ܚۀG)33St1Z=<< >)/G4A0L ֧ۮ<`rrri&[wyx>>j׮<<<^?ԪUKݻwWƍ7n(44TϟWRR֬Y#IW˖-qqq:r,___#]-ZPttt ϟTꂧg uUݸqCԡCVZm۶2W޽nMiii:BCCuuݻWÆ L֯_<{޽ƯX*M67n5k(Yh!??_}>2[nCC|֭[Hcg}{キAhӦw&MW^jҤ6lT}[+ULMGɓ'%Izz0kΝ;رcV70IR>}JlY[n f?~ׯo5,//O׮]SttN<4ܹSj G24i*Ν;7  YfxbnDZlu*##Cϟ/`իJMMUZJ]vj׮RRRh۸8mڴɸyZr%K]Xzjʔ)SL3~xojĉ@ M4Is1EFFгgO#N:4i.\PfSUvmH*r-/bUУGyyy>l]M6-ֽT4aҤI2&өS'#""VZU* .XG8999kdSӦMKLרQ#Iv+"))IQ"Yfb]Tt'QQ4LW-`=kN'OTddd`IR۶mK ,(z쩞={*%%EOVXX& }ԭ[׸ Yxz̨nݺ~jzޢ߫=z^qVcbb*Ǐ+""B v횲@IqF͞9;;_-C|||||$XUZ4L4H _douCgƍz'+ddffUsRA0@ƍRVk׮?2V*77%S۶mXɩpE:*cǎ:y]k׮nT_e_)oew֭߭[kQhhhZpqq)UIzVjذaׯ_^yoooE[t+MJc͟?!raU`I:rF;j?;>{ieIȲ,,&"pD9Z6!$ 9 Bp!Ahq;p\0MI,Ym0hdK+x3zW̾m@A0B~R=fϞ}ԁ&=x gzC#a ^bK.`0xryyy*++S0TmmmUWk/TVVzejhhPZZZtF^^jlllMmgt~6l$)))I6lXԡB"+**tǷZ."X555EM>tv͛uwCɺ 5f*11Qc6|p >\۷o$}ᇺ "ze5jTmh f^(77W'O֊+˶o߮'xB_|qCNرC ,huJw]Lh駟?tN0T]]RRRbxjEugHw5J_|n3ze9rdsIG.z"ݟ ^McڦepaݺuQ 7o/,,lw͇[lo?EH Ϗ4k,t@ e˖EZGc:s[]֪UTQQ!/߯ ZJSOErsӦMZvmkm~G|X ) 9VґqGSSSc IDATz$Id rT[[J2ma*IG}b З >8b~=IZ*|sveٳ't$Hߧ+byQ;[hԨQJtM3gTQQ6s9Gcƌp7| =ZԂ f͚pرcURR֐!Cw^IRcc~_RRR~z+>oZZZ8H{nڵ+DNNN|> ӵ^d߿P =eLN8ͬ,?^W$=#ᶉ'{Xihշ--ZH+W<: И1c˲,Ih>}ۧ-\P=zt: uAڵK&M4M-^8|NJmUɓ{nA:5l0Qeee(-Xب _^JNN֌3" ],ց+4]9RׯW0… uꩧ*''GiB۶mkuRYVV;X{eXzzu '(++KJIIiӎ;}vٶ vi1=|^}tM֊ =QOOOu]wTc=^Q.r7 ڵ+b#l 7ܠTu]0a/_^7Лo)0A4f̘p`R_RRRTWWzJC iݬYr 3@/p8tk„ ZxQ`>[C5n 4x<?}8p@6lІ d\.WĘyyy:thx4͈7Z?55Uw}]k͚5wHGz+;K3fF,/((G}on;Vr$)##CSNҥKuaۭt:efl}zlsmĢ֎axlo[eZN'M握igyIAcC}K7_0 ]z=2Bw%I7ۼ׿ueggǹ"w `JW_>70a8W=zI&űއsVƑ@jjjKR9M%Nln(-Q-imhmjcM,ort (..7 9_аv8V.0n7A~lΝlE!2%{fX]vY@ƍXYڵKw=w7o$1"Ε"d<  07.j7ވcU]S[[$ՠ۷O8Wŋ#O?8U1n8IeYGxs,C}TTT,Aʕ+e RM>3IRnnRSS\ Lziii׾NJflܸqr\z7t:u饗ƻv۷O$Z5jNU|>رCCL@lێwi0rv@ft:f.#4G*@B*@B*@B*@B*@B*@B*@wHmǻ0x0f8#л^Cf8 w4Cgft4!h~ Bi5t/  #4okk#Z mG5t/ Ѝ: 1[G ݯeyyX!P@!ݤACѲ,)˲dYVaF(`NGu; 5h cGbM)4 eYV 6B!%)٪׆hzi Cm - efrv{ٶ13))%}ԡt a `P@@iʶm9N%''+!!!^a{`x5nSlnu #]t4A44H^K@'x<eeeIW<N#=3XE F3@d-,K`P~?|p}USSqrh IGd2MSiiiJNN2CC R}}jkk=s@k5:%BӡLTFFA~$99Y i>gi(y: \!b-tСC ÈCE1jod,+OMM%Џ%&&*555KgPHwCA[' m  JHHPJJJWu׊!1 ͓mm[q =)##CmmXh;:FR|hyɲ,eff2"p8)˲Zֵ%D7mI=m[`Pirƹ:4+%4 Á"G^B^` 7V$BmpĹ:ċw."8^LӔmJKKлE\3Xfc3-t( {l+31hdM[%)_ ד>uvttb.Pz$kE͇h 3@'4b"tBK$$$oi9:FAЉCE荜NgB #GIf -˒td,D@ZQW)%D7oІN(Cc(aoF0Z^Sjp@$ Eh-\; W!z tSIIx@5$cwp\p|G7tQmsUWiͺꪫ\aϘ;w-[z!vi1tm2 #eJ jhkJǎCN|mgV}}*͙3':Y@Lfi/pp)%%EC 驒ba&@B*@wK]]^~eЁTYYeeei„ :uI'E4M=sZxv%04rHM0A\snw}^mݦo|Zhϟ-[񨴴T?[illK/~[;vi*,,Ԕ)So[ mnGUqqϟ%KhݒOC0 _^7x#WUUJ[lQNNN/ݫyi?c}zu߽{n6R;]V]v#[N֭kim,^nIiiiXzj^Z|Aw}"پ}o߮wyGӅ^9RgW'3z͝;W:uui̘1JJJRuuݫkj֬Ymllu]r=ZQF4M_^ok.??//c /T~~</-_qƩHz7 /h߾}GlA^器X8Zpnݪ/XTZZ3fXaO>\w&Nٕ  0Ч>] 9Ac '*ٛbj͚5#/?@38C&L??k޽zu׶Yܹsu5:o[`رJKKjٲeڻw^'?Ԉ׾&۶oHs9:餓4g544_u]NWt#z'ܯs~ޝz_jᆴSm~Gx3! @بgyF_+$}'7N>/電ӛ7oOu?~|D.,<=dȐhҤI-[DuξO@3@Ͽz~ɼ+%)Y)`IRCSny[z]jL(!!A>O/ٳg3Ԉ#p۾}#!x≒[N{$0lTrrUQQ^ס=ÇްaôbŊcQgg'3tUvܤe,K$]KuϽt翎З GmMtF,oAov[-p},uξO@f.hI54(3]w-KLن-K7RP2bN:tܹٿ$iРAڦN hɒ%Z|VZ}wջᆱ{L+++߮1c:Īc}cgZȒ,˔)SLegdk'kt9re3$Iz;\/$)##C%%%Gyyy_t!_>>a„+rԵ7}u:;zgkl[ IRI[,0m۲d+3#G.]'OeE괓K},{zn:=*((дiӢdɒpn;;Ӊ!C .… M3gԩډu>4M|>Aٶ !%ۭ{9z 0,^9_7uBPy^_s1jhjRielVSCF+ǕWed۲%57O?z[F֭u;~ꪫT__s窴TSLQaa$izdIҬYt9ڵkj4i򔝝-˲i&=Cl92b裏TQQnIW\q.Rxzijhhw)lV P PCCoUпf?~u}ӥJ?.],9]۫@Cxޖꍚtɲeٖ,˒eٲ̠ԍ^Oڇ?giZxq^Z]}Q|rmܸQ7nO<u$׿nu'--Mou=h͚5zsp(11QuKJJ4y.qW^ٕ TWW2Ї|>|>ƻ]`q6,_C ÐAF5mٲUU݁Y%۴eȣe :!{j=* IDATVQ?I/ymٲEJLLTnnJJJ4g嵹믿^SN;C 6BJKKS^^L+RQ/,,Ohhڲ,ٶeeY Rɸu˖hfh!ɲlI,ۖ,[m^u jhlTIS JS˴;(@B o]. Ðq2a|u)40Є555QC74n+I4I:I֗vyţLQGئe[muo4X=3@?vRk7Ԡl}Se Kr|wjhm[2L;T Q &/RӣA r:>4M :n@D?zerrX*[˦Wd)(KAٲUpH5 5 @q$ے1Js{,ieƻ  }{zey٧)hO%SW6lɐ 8 d8 s=޳=z|0d@w ބ0C{oļ:P!SAƦzmrdXÐ)ɰPo vzSM ~6Nr5uٚ::2@K@?{ agL3(РA^EL9 CÐmGzapH`@@ 3|d0 3aے )=%U+u\8  ƻSf~0 I)[f@e, H!dp~fhd$}fp2lKU_1$۶])[荢u&>K{d}u'(3m.C(ǐNpK>ӧ̼T)/ꎍz};`;7f|O7QvqkHv*;ԆݟHίze8K%'&KuNZ<^ oc/+V)9=ho&I, 9qՖYU5$4g 0_22T<$U쮖%iD A6Tj鞵:󛓴s}}\\z}G3@?W~RWy'ꎛoRBM1 C_)51EMֻϮUrI>YsNeKu>ھT35dHꕜ8XbhMausus$)W҈QzORU召SZr$J6kҚk7:Ps@y@N6<~=öp8~R3dLT7]E\_l)h; m۲m[e) F]ǐ!ӴtV.#!vm[5 ZAo_ C51ز,KW֦Mt!%%%X'O ?$iܹG?#X(  X7:!@av*`?&S/.~wٶz\Ń:AKfЖer :TY@v5kL:tUUUm \0TCC5bwt)2\aЦ2ٶGsyK~LS?Ou.YdȖ!ْ蒉Sccnwǎ;TVV]r% >˖-w-I[ugƷ :m[i4MA}wk_Ы<#2e[me)ߓ!0rT2AM6iL3(6e٦<.f|N*߿_TXXH>Vyy$nsƹ*&s\JJJeY,K߹]}ٵ ,KґC($t:rdfϞ`0(4ÁУar8JNNVbbbGcccxmfϞJIRQQcjL.I7BЏ!)׫0B(Gpm= ߯E{192/[um7h@K ͛7k…ŋkoQn[?Ǝɓ'?Ԏ;T__46mTSS+WjjllTFFɓ'z#}g:|;8]y]:N~_ty8V|Ϟ=zW;(??֨Q4upI٣:\WUU. >\vcAm~z8 I)))1c$)##CSLN"==]SN$ݻ7&5ٳGeee>|xD`@5qD|>m߾ugFz5sLI+u]q $9.Uf(|I ,F[CDwq^{MMML I***>w}$ &-]T+VЁ_^:tOR rf뤓Nj}=XWzk]z׿ի!UViժUZ|~ӟF S[N?O^ի5uTeggw%KW[ܹS;wԲe/;伩h@aۦeʒ$ >\%%%1zk]zKjѢE:#?i Q ÇK:r.t:˅0h8Zڲe~_{x@ 0mJMM$:tH`peE.//Oa(%%{ =J.CvvfΜQF^/_xSO=U-Ҳetwz*--Z[aaƏ\M4IJOOWmm>=󪭭$^Z˗/ԩSc Yf?n@]wݥ$y-ݎ0mpQyy,Y:+|Ouu|ͨO֭[`wy̌XViiiTSSwFgXy#kfΜo}[$8p@JLL m۶a tN-%Iӽaݻwk׮]>d@K 3⢽.?3m[cZcZf֬Y^zeYVĶ3gΌvРA3f>3IRee)%%EuuuӟaĉZlYx_] .?),,Զmm^{Lcƌ=z뭷U; -W-BmZkghGQ?>Z@ν =3iKZղVAK.D\rIuoF,$}e]t&Mm CJJMnW]u<Ox޲,:tH˗/? =2^8=3N!?իb m߾]UUUVRRrrrTXXK/!Æ SO=~Z~ۧTp JJJ p8_Bok߾} '+R>O˗/ow_~~~'͛TTT^ 8QE#ZBmm-qˢhuVechl))EʼnдeYm[eɲ,A566ʲ, 6,^ݎ.Xvvv>ߒ%K("t:L=ZKwڽ{rp8p8d# Kͧ& 4!!a$KR$iiټQQ[(ʣZlӲ-ڶ:m7X@sI".2|yZc@H" `i 'pt lS͛ |vv~ec@ԛs 3r$ǻ&?s{f]' fm}*@~!6ԓ'F?_\feY=\B{M艓~h @םAwmwsYyI0 1 !ei &@h ]hi2ei߼δNL iJ!qvÑ͒ޟec}QT|> $va"""""")*QF`ô 50@DDDDDD4;hdt#2 po%I{A{hG  E2>"ڷ:nPumGinWI<>4:ǺD 3M0͆gyi&&l_>Μ9Y&54]Z 'OD~~2E*p˅a&&^gJ@@?w1 @D!Pˆ@ƌ 40@DDDD eX IKSVVnѸ#ΒP|^` QlDQ`pF(ܜ@a&v}}.hnYsN`C}E;TE0S20$k!CG:5DvaZ')4zt:C~,aQ:D4= D[m!T$h`hkG,B ^ \ DQdшnTjd֍"Č40@DD3FEE***ٌ,c޼yH:TWWpHKKCff&VZ$ NBUU IRRRPTT1=ݎϣN`@~~>-Zܠ;N;w555$I@aa!ʠV IN>*Bdff"??eee:>wEڞ={?D<gΜMgϢֻ ̟?+V(F\pͰX,HMMEVVV^M,Sߴ;vh"|ӟ{~nf\}ոx"Ξ=.T*`{_@/:;;qbڵ˜9s>z={Qcyb=:kXΏva˖-qkgL@ DD4 wťKwvv.\%K~zt:aKX,сTVV⦛nBiii+:::wwwǎ1^bb &)h'fKK ^x MommEkk+.\-[d2Z_7 MMM 0k֬XT*I2я_GRRl6f4777nQ__LOOzzzP]][oK,QG,RvGM۾gTWWMWDx8)Dcigϋfþ}PUU7}pphjjX@xតŋСC$ UUU(++SNoou~ CuB" /LT ;h&:v. .0r|jjt:g XZ$H'O4 .xz:Z$ 3sN'`eew;SjCph*Lo`A\,*t0# 3ѴrꫯIIIXf jގSNy;].NFFyyy7oRSSa4aс'N```| ʶxWaX7Gyy9ˣzLozj̚5 VhiiAqqqȲ5k ''Bee%Μ9ݻgq:xW044l[YYY$ mmmׇz [n Y ^/Celذ!c&j[f͂lΞ=Jtuu%%%7o󴵵}r:v<~;-[r'Oz_x10<<x8)Dcigϋ,xVUV!??)))lA]]ϟ]'WpχhܹsQWW2pE@^^fs׀G C" 1ZC(t%( x<7ABVE"<V V7={Fq̗A~")!OD[4=hB ( 4Lz 3ѴvQh4hKMMEqq1ۇsΡ K.EaawzHqX`oՊ .`ݺu;|0, F#>] J >nnnfJ¦M.6L0LGydԺ999HJJ#55ջѣG}/**BAAyĉXzuďkMߺuߕ&_YY ;pBf3rrr}v8NTTTO,n+W Lo_|=!)q$S08?X3gΠ:=_h4"###Px|,]uuu@__pJҥKHY,#8 cR5DDDD GO~$qmC|Z.X!pD&}uu} ˅ǏzA~zo'ڙ3g"޾hĜ9sDp8ۻ,uGĞ`Tz-;dFggĉ']w:W_}5&~yyyAK?={6ƣ8!"D2)u~ &vb}^\.:XfMܫsYc޼y0 >૽}}}h4>X%8M RMBm7x7ަ-Vx--ϓ]AJoXobw~x \! DD4mxǦ\`Aj5/^cǎ)BINN02| h@VrO/_"deeelMV Áat302&VtXZ.؋>"n `|@Guq8?*x~HKU~\.%IBcc#ىAX,\.\t$EhL&lܸq9r:(**BII T*՘o3<vn{h#}݂-k;xÉHN}X xBn4^ǻe˖ĉFwww,{ b"ҙi!\ p["" B\IND*` '%?BJ} XPZ7TaZ 70M[dC<]YЀ{[]"==iiih4=\t MMM@mm-jkkq!lܸf͊>V~VVVثqG;'V/N{s]dJD`fJ"nŊ̉F}7Te`*RtIL h\Et:188j^#C xbğgH^~륤رc,BR%%%TUUѣo/}Kc*7gtېNSǫ}|E+dKh_r'X4#$&x_t)ZZZpEo[dILۦE$I! DDD+3x IhƢ BX" %m+0$fi5o.Qx:ގ%9sxUVVB$3L})+|xHIIAYYkj=nWn[ݩb/\sMLpB߿}}}@FF! q4%K!PB`Bi 2}"Te%@4&g B`j =zj`guDc8ҹDT3] Xo<  DD4m ,X5558~8͛Q˝={PT~D x uO:r}ƈx+Y^?%%-Bee%Ν;b̞=;mxS>jp81+<$:{2DCC.]~ūǴ`d9'LKZZى#GF1u#9MhpB ;wn!Hq믟PPAxB-tz ""dY$Iޟ` hL|l ,X!a 3M=Ё}@9ptn~퇚ʤ,є,{rr2j5n&\t N;v@YYΝTϟ\wu~8~8k.\{HOODOOΜ9pz`D؁CDDӍIX(fU| JP<\Ӣ 3F*a(vcy( x JD)a""rvv0Lشi~mѣ8z߲j_=VX7}޼y+u/]K.E:.ds=x144}L hooG{{{Ў>V{':{/{=4778}4AF.;{Qe,XCtW^VW_kF4?o/2l6vFӉ+V`X9WbyOX~=} ୷JR o:M8X[oŁ`Zo9=7`BYYߺ&x˃lFoo/"e].7V5n /Na${2(--ENN=N d2aXlsύz:M8X,[ sىnH f,Z^築:ޗ-[?PRRZN_Ǐ#55˗/{[xVe2Ba#" 3|3(m Dq 1f"JC`7*ໞR@wф0@4IP&c"\P$\.XVH4DDDDՅ۷|AdggOph;CUOlC-ضf "" AZ Q!AVQc(6cpOߛp7X.p] D Fm ˆ( U:(:#+d|BUcLAC`!p9 5zLgZ!dYJ( Dq'n|iFNH`tGbЁRBiY/ v*+a&t% 3QPŋOpKxVe^bU 2(Ufp:p:ptf ""Djj*AUs 0Q~&h(J Ȣ(ʂ @({xQ麡($mQb\9կꚛm 7xTIAH`PCK6!F|BLOFfL+3ADDD3˗sN> n0Ca%x?TEIt:p8 "F#4!""""""AdYnn_nll|^8s֞ FB JMT L(”ja 3 DDD4[B~~>nδM*Jaon/[A$l6\.B{fG Oe%At:kwYEvTj Ag, 3΄/BDDDDDD3fCMM 1OU!PA n7N'h  """""Z.Zp^|y.` =W^X:q0rHJnΌi@ p`UM dT#lHJJBjj*DQ'""""""O\n6 kl۶m+H!0*ȀCa`&<X3a& """x? J)|J|oCNnXV$%%!--U"tbg}?я*02̄gh )}&\%6&Ʋ|ܰ2$*Ƞ])ܠ  Q Q$I /~_b>-`]ڂ҅Tg@S-߀yJ\.RSSRd """""",0eַCC``Aip" +LPz@DDDDDD4+:B`h!TEe}R 48Nzt:rnt #DKh4hZh4” ""$I /~wdx  Oyi2}ge""""""Id,`DRSvC$F/AD ,b`hhvA Ie8 bx!""BdYJ2r-gee:C=@G% DDDDDDDP GgR JNc ""e,jfS"2v;yM-BAAW]uU FFO7D Ҽ`,% ~Be\. Ve "J6͠)t"""B||G@9oBҴH 6mROtxB %JOU0!.&"",n#)) k-]ɀ,Sۙ8|TA{w|ʇlS DDDDDDDDhJy=a""J (.dY@RRD7hq]ƙ = xɾ}LS,$G\:Y\1x>AT`{`$I^(An7ϱ7.k@D4e%mPەn=,ÖӪ3w1p4G# ?ME*TBA\Øxn\.nJJF(|HHJz*4( ;]CD&$0$,6/ԺGFa&f)WB @t5f]*`6@ %IF\W.Z~4 .8\2Y@C0. ފ c!I, \.z}<nY`tXaRa""""""G( 6b"p^  DDDDD4 ځw}JH3fӍ*lƄ:8qɆw*e$iht:1<<!eYn,0 1dYjmx!!qP0@DDDDDD4 "H=TXw$I 2QLl6jjjpaTVV ,#33(++CQQzD7f xkB .1;cVJlݲs24{2E+W07]E<\.,K\ h4c O`A%DL*.[KSOgrO;:I'V(̈:YaXbZ"Zxn6?fbY04k "MMMx''E… hllDVVV\ 8s Z[[Ҙׇ'Op`3'O F#V^ ApQ bppo~_!;8Ja 2x䤪;3v"ai7Qp1:::blٲ8(<˕}j f0 t%:z(^yf<HNN۶=$I$I*:<(++ۇ?ׯK۷oG?f(// & 7ppB<8u/^< L&STGyWT07ߌ`")Bp}r@ygW$@pgi*e:ܶ̈We;E,Uŵͮ]pرyq 3nP$Ivd[z6Aq@DDDDDDD" [.h7:P[[Ƅt>v}Y/N $IxgVvr-h4h4[ى-[6t:ZZZm6ގjﭲƫǾ}hh;uXKhH3ظ<jUbѨܽ<z} kt&H }Ezz@M&Mdh&bmعs_ǿfoooC=]bӦMǵ{g+W[nV&{F: `Z8rM,˰Z׾Aŋ⮻jk֬V}x"^|E_Ǻu`0h 8:~U ˀ&5 eanG*:5Vb~ȑ#[qUQ|2^xTTT?1-Zt;,tbEa""""""萂'MDD4>>=V[bp 99$jBehZ$%%dq1eYJNF7t:]n{E&!V=XeYb(p:1s*Ɓ 2} * Gcc#xt#%֝N'v؁,~pxЀC[n*ja6hv<3lZml6X, 1%Izm#Lh4z_sۍAzKeCez$%%yI`4 2l6$I(P0 ~ǖj$IP0@ESuNϲ,(cEat^XQʇgFqv~=ȩvU F```w ~ߢ&sKeC9ĸa0@DDXtW=>|:ڠQXXWc&>O7p֬Y8y$j*0ÇVj*@MM Ѐ6̟?Lp!--;oضmxjݻҗ{. |vލj@~~>6oތ#)) Zx/p஻WUv؁z iii(**^!PXX:tvvd2aΜ9h>)]QQzL&$''ϟGkk+bQɓxv1g@}}=mۆT\s5w}/\. "***t:y7<<^JٳgPTp7P"I, y|@T.//ǿۿAeԠf7nT ڵ Nzjśƫ?p:㲡O?4۱uVcҥٳgvRp)o?c<#HJJBee%˗ÁBov#99҂'hmmży؈<Ȍ:}px̐!&< [BאJiˋK{Bq}ŷml۶ {ׯǃ>Wi'I]!PBB 204Ð&DQ,QMg!.7W\TVV׿5._zchh$ 7ow`Z(t>Y+wj|3둑F&wCmm-N8Uahhv lق~۷㭷¾}l2l6/nǍ7ވ{{ݻc~ަIU=?_gOU '|w]]]ؿ4Ӊ?OyfZq]wo XhڰsN8Nl޼s, ^|E8po&̚5 ^{-vލ!77NJ,hnnFss3ϟ*l6oegbppW]uiiiZZğg455aŊ?)݋{)))Q=GD so#Q4>äE ,,Dc۶m8vXLؼy38(>|կVn֭[# 2=^f """""""""Ŀ:::/>Nmm->j\uUxǑS;fϞ˗  QSSVvξBqq1ϟYfE\8FU{jO=t:ZmTŊ+Rt:Ԅr=z/"o$|ѣGۋccoopq ŋ5kʐaTTT@R 0 裏"77ΝZڵk\,_eeeX`wX!`~' AiN|>׿[ƴo ضmja4ۋ{n Nv;g|QMƫa&c(2ֵ($-['FMM ;Z… U, ^x9sk׮ŦM۷ދ=z`>*hQ!I:;;1{1#sSQQ.}Zu]Q3\2ۋr%K",SRRVfؼy3n7^uXVdeeԻE!-- K,\uU_]v %xAtuuaΜ9Xp!nF477 0X|9jkkqQlذ .FbpADY96a,K|0n z0cϞ=h˗d *ݱNٌWt!=% ߿݀eyox~0 nCCCa3ăN AupѢE7וnҕS+AwiGOqG+3M#y_ Qj4G3l6l6ME۩KFRy7MZ&I1 l ZliA&77wdڵ p:hii[.''w}7>όz"1t|T@V S.bdžNBD#bYDMg"3Td A֩.|jY*.;xl7AĊ52GB ̰i&[.m̛7/N lKth4"&ݰbhcu"޽{W`馛k4|S&4e2yflܸ8{,:;;(--ŋh8dx` /H =S;/ +%~]-N;g`N$iNJgHJJ˕2zޯR8򡄱bh)..Fqqqַ5-FѠ""@lYkg  UDjڭ793kcn~KAhQ`UJ  'd VG|M!""""""a%"""""ѩV('A]P(BU \~j=.wcEC.Bոahdf:Z Qkja03!F3ݤƊAQ@Pkp_vBPtC t xp~*-NU:tʠDd2ARż-A6n """"""""""""i//U7oPQ.)@Q,#CM2 ː48ob1#>{].n\ NJ d pI2ln|Xُ[Pl-V(z 4S0Lc ^V;ϯP 0@DDDDDDDDDDDDD?{UuB #H/*""UTD!eŲW\R"wHPCH!>rH |?y̙ssNr>J40 g IDATZol`Y`Xv~ Lkf‚thAFĆ9r E>u%e~ A.Fw { v] g` rQVV4Ϝp8p:1%3L q_FJɊ=~,H 710 a2}xMVgc  0 l kKÝ8 rfe|~,², fp8p8~x!uO """""""p67EDv;a[~/"rU393LʇuvP/7Q`3i0X21,e(/GD$DhYIx;99~3<Ċ Jhkrp\uT>鈈Lʿ:ߐsffл ӪX,lX$0M4~i1Mǟ&vnaUpb"N?jP20 ,((H%EDj8` 2,ۏI i,s;pb%%1ȯDDDDDDD.P*Q."rar\~nw]"(Ippp]!""pb‰ y| _Wަ,]|8Ç￯/9ˌ3zn?m4L<\ "" pһwoBCC cǒK/auN]p;wnݻŋJllyNDDDDDDDDDD¢dध q\uV:1M[oE ""r)ЩS'8p;v쨳k̘1saϟڶg…swL\8uHMɗ_~ _b\߾} vBv*?yd̙kFnOYx1{0 ڷoO׮]/jߥKMvڶ_5se۶mCbb" `Ȑ!|>/^́иqcZn=C&M*ꫯرcO|\ˆk׮\wut鴱W&,,1co2|p?jWe[*3{lRRRؿ?aЦMv]wEHHH~qw3iҤJ3g'O&**ŋWDDDDDDDDDDD*d]ll6\sM`pp0cɒ%,Z~L<˲8x`+Wdʕ /ТE\/FVVYYY[iك\nvNkǎر/w96. ݎﯰa5?;;/X4Ҙ?>_=?8aaa1i$*$YlڴM61|MF *߲e > 呗Ν;iРY%3kr!NisAK\.wygga˖-Y5kְ`^|E:tPg{DDDDDDDDDDD~nJf Jrr2ݻw'66±Ad233ټyioH8p>tB9pK.?f<̙3Ldĉر瓞7|ÕW^S~}ҥ '))X ؾ};׿8t߸h޼y91M={9ꪳ0a8@dd$<;w&44۷n{<*DzlqqqcIII 4_|>N>}*O>!"f K'###3Z~=\.^{5BCC+mР]v=s 99Ç:t Ը* 3f̨|ŕW^I׮]_w_c[] "" L{11myK<7sB n,e˖QRRd ^x1Uu *3x8_|y6? _!\ѻwov]+cVv3k,&NX!fG ,sW:V.]*ܐ?-NKK lz>Uʽ;~nj/PZZHF+$2`ԨQlܸʱ溉%3-~Vy~in& f?i?W-ehMvv)j lذ*pA<޿27n+V,p^oٳl_]rELL  '''{aYso j˘1c |Wdff2|Nguٳ @ΝlתU+vuV1WuDDDDDDDDDDDꂖD~xH*>c&!r덼+䟁^7t?СC'%%嬗 hڴ)irAZhp:4lذ}>Vb͚5͑#G(++vs|gR]eurСCnk4|7866ƍ$))ZxG|\{?MVHHHH`ƌeɅr͛7Vطop|郠Zr1x` h"ONvv6?0\!<<1c0uT^uFABBB9ߴo:˄o5\t^tV|X,|?~,ԏ18^~lc30`@2¢E*mS>^U-[@֕W8g<`W_HLL+͚5]8^MBkٲe`??m׻wﳚ&;v,/2ǎc˖-21c*TR{j<ƉK|WMկ_)IGDDDDDDDDDD|S2ȯPQi>)?|JI~6n]; aċiy#&D\t@՟x˫2ӷo3G&69s*ݿn:/^ [_Ku̞=&MTzfk4o*f͚֭[+m駟i&\.Yu6NtQŹ`ҤIٓ4NԨQ# g}ƪUj%hժ?ܹsΐDDDDDDDDDD"e&DD~eR~߽}M[&cZ[)qټ>,²,%nvlɚΝoeany3O.[%^˲/8p NZ ʕ+)((`ժU&Alذ#GҬY3rss:u*eqW2/_b`ݬ_]zu^6'|qQPP1cxGѣqqqsN,Yȑ# ]ve֬Ydee#pҬY3n7wO> ,\\r ?f͢st҅b~?ggʕ0n8ƎK~HLLd߾}$''6?nWeÆ _~t֍ׯiꫯǫ'ԆQF1jԨsg0i$Fō7H&Mp\nRSSoyIj 7ٳq<L4K/֭[YpԄDD~emt#q`NSS vE{0-L4MLdGʿ}֮]KVVC v /`&)))$3l6III!%%C'r?h RZZ eL8Zu饗?o;v?$8^aر\~ :dV\ʕ++t:s宻"??n7GV 4`ʔ)O"##ӧ3} m8q"cƌ֘յb mƶmۘ:ujmBCCZO8W _ٳg3{ll6!!!vޝ^z͚5Ge:t~6. S󊈈ȯDD~e'vJlXӢCƉ--,,<ǴL,Ϧߏi[KLн{j[n^e˖xp\^z)?<3gdժUdddJ۶m9rd`9mx^u^}UvIpppK?TeĈӇ3gsNvލe˖4mڔ!CpWTҷo_>3KYYM6}; vy[jٳ?͛#)))Duu҅ٳgyfvI~~>qqqtޝ.ń ӧK.e֭䐛KDD ݛnZ6hтSpB;޽{q8iӆ֭[sXmr ;vw!--lѣ7x#m۶eذay^_M~1j#3a|F*;v3*y9ym @`x;wawҧxtf""""""""""""kd4bON, 2UlP1c"q2Αk\g%""""""""""""&Jf~,,<~/ib6?&~,7 b"q:*}vpBp+,>ʂ>*3\n|жg3N;.FyxHhg끍`** !a @qi1"S+N }$EʜX~oLݞ\4 "rz׽M{i u0+'0?%2DED!G1-LX^ Vz11|V.ږ{{8;N"鉈EVòSm`lDg, ̾-9DիI'󝆈 2Eβ,,4M|>_m ~FP ,g0N102jk'9.4Yn;vP:t@^?)SWkL ""$ǃxJ4m 0q8xM/Icx n@?˲h[$ukyh gY~ ıbEzq:5aIbb"G%//'""""""""""""uC ""9GII %%%x<.oy_V=c8l`8ey\7Ҫ4L ,𔔑 #.Gii)N޽{IOOYf1WdeY~~?>W.ü/oLj? IDATp؜Xf,Icap8h*7Wxz=>Lˏiq9x:5,4 @- """""""""""rS2Ep4MLFއ4MxCynp`G φa`٨W!!!իW}v n;sʅ{wKDD~i׮;vk׮]`f7oΝ;)++#&&듛ƍIOO.Kpp0G!77{2f̘ 㝋"ΝKvv64lؐbvݻki۶9ͱyfvEii)qnݻ;OIh8;W_}Ejj*IPP9."""""""""""r:Jf_FѨQ#\.6mbtС:tw޸\.//_N޽޽{ C~~>aÆ \veҥKft%|,]*'TW۶mӧO v3|<s+//ˈ#h޼9@ˎԆ/W\Hd / **޽{WXN"22>}Q+1>g'ԸDDDDDDDDDDDD)ADD aRLbcch޼9ݻw/5.nH8vXKBYinJQQ ~qL """Up:4h˲e*Th8z(_}Uhժ^s璗wJS2Mj?gH]2"""qUW1glBzz:111SXXx~%%%:t_4hЀ<p8))ݻwg@݉rOM S!""r 6;#++,ҥ :ub eԨQlݺ]vGjj*#&&={bFUW]idddM~~>U?[5KDDDDD/Сyf àcǎ|˗*cU{m۶7ШQ#BCCk#̳x񐕕S2/DDDDDDDDDBaa!| tOf(jcf̘AΝ߿'3k2p@BBB49=%3H@pp0 "22CUapeqeu("""""R JfZvIIIa…zfРA;~?iii;lݺ0ر#7t{u뭷R\\s=Grr2+V ))g}ŕ΄ ԩfܹ޽HF7Hz,[駟i&=Jzh֬9r'N}رc {AJKKILLk'""׵//CѨQ#.rnbcc裏Xhn:pرWK?qݼ,Xf͚ѴiS.] M1bv>,knn._|СC }]fΜɸqx(iw^fΜ)**q :믿>xꩧXbO?4[n믿ӱcG~Zlh[XXȧ~ ..#Gr 7pW"""""O""""""""RkLdXELL !!!`yyy`Y}[nom۶󑟟_p:8N*>ǚ5kظq#v˲8x o!!!|ddd?ÇELL ~"$$0ӧ:vŮ](((`j]RR[oNhh(111dgg{# 0 2c dž HII!</+W$22H8oѣG1 4)++c̙j*>LBB͛74My1M.;;;|>L ͛yٷoaaak.|M>̄ wݼ+~N'%%%,_Gbcc)++cƌ|ᇄiSTTTȯDDDDDDDDx</_Nii)v&Mns~?v"MFff&cǎ宻4M^z%/^'|O<~=n8ZjEHHQQQc=o7nd޼yxl6֮]KFF͛7W^!!!rrr!..7|I&ɳ>Ks$%%3ФI(..f޼y̜9%K0tP4iRW\ɼy_>ܹ3+V^`tMk׎Ej*xԩvb=zZs?7t?8!!!?m۶g^{5oNII ƍ/g/Ӿ}{@E˲X`+WI&Lb޼yt֭B(x6mywXv-rV\i< 6 ˲!((0R2N7O۶miҤ ܹ={иqcl@bb"p*Bqqq!Cp]waـ7oNnnn6lH֭Ocpp0^{-;v qF '::0 ++3gҿ7nLRRRUo۹'''"Zlf%3|ҡCXj~rrrسgmڴaڵx<jN'III,YŋWk.ENNYy恛 L0y0p@n3^7|E8p墨}q饗4lؐaÆaZ?fƍdee1 #hذ)ر4l6&L}}l۶T֯_J2C8p aJJJ {8@5szi۶-III甈#""""kdn.))9w\8NnFRSSbʔ)мysHAA^_|1P>fò>FTTTvK,[B<7pO=i0 cW,+Wnӧk֬a޼y,XFѷo_&L@zN;i`:DQQ4y}ڵ+| ~,MQ˲`ɒ%,_qӉﯰf0 """U6,p0bRSS^ FW_]g^.''׋a4m4~ԯ_?0Nt &&o}}vlBdd$[f\z饪 """"rJf*njQZZq pa 7 àW^̘1kײn:6o̶mxWiԨOp8ۗ ;uT+/֭[Yn6mb̙3(_j=aaa7^zaYcƌ9xʯ%\C=BPAAxx8p<4jU8[999B{:tp9OLFׯ&L5 3q={{Xn[la۶mL2Sgv<4k 8,vmxv;Æ GZ-[zj֬YC^^Z` DDDDDDDDYv-k >X<饨bbbb0 A׮]ٶm7o4M5kz vN~m۶*A,))pJJJO ~ == w^XL$//: ‚ Nfffg-"""""US2Yt)۷o7d…DFFž} ^zx^~mCRRaaaݻ6lH\\n㥗^bdeeѡC ##o={9[)SвeKbbb(..&55M||<̜9;vp饗rUWC_J||<[n=eITT|мysb̙1dV^ /@޽iذ!kt:ѣ:u*?K,0 BCCiѢECǎy':u*{eժUjՊ{>ZxXrevɛofcĉ4nܘdzm6֭[ǬYxGhӦ ?~!Wftڕ /̙3Yz5viӦ et阦IYY999ܹ;M6U뮻O?%55˲hРÆ { TR;v`Æ x^޽;&L **cTu6b=IϧkTc'k;1GyO|.߶6m%$"aY)ۦibYib&>RLӤquœY,˪ʷO~m)m??3<|>^":w: -MFFGŲ,իGRRڕIaa!`㉋;uVVYYYn\.QQQ$$$ׯФI5jTX^/۷o&M@III:Bv //4K7dggsn7vH7n\beY撑eYƒfSTTDXXIII呝M֭wx\yu@ @D@HZMdbJnd-I8XʳĻe˱eIHEbE, 2~hQS:RSSsTLJd!B!>it:|gA3!XXr%+Vd2 xs'n7`ps"O>OkVV jjj(//`!X@Eўgٰl)[oXBF6|>9~&))i_rZzzzt$$$JaaC+˗`ٲep\BII QqU^JWW`P˗tҨiN:Eyy97o&??***`0|r6mŋ9{,=c}ydլ_~^hnn@BB999DM31 RYYɵkx> VZIMMMTWWڊpȚ5kp:*?8)))TTTP__OOOt:IOOg wEWWטuʕ+>}c=6~{n={`2r-#8吚JEEuuutww墰0j9L7x"w\yc.?7&ԣGa hA  B(h.O'B!b~_k41 ڴ}<BL3!XTZZZldddP[[KEEŘ 9rׯèJGGMMM;wnZEpFM׫ܱ Gڵk񄁎Кپ}^ׯ_n|>_y!hǧ\BAA7o x蠭f*++|Z"߿UUz*k֬/=== HKKdO0$hkkZm6d{iPEA؈lڙ7a:'wލnwH"dzoSNQ[[:v:;;illիr-Lgp=bTWWs]waG!p~  pC!÷5XfGqQL&mmm#ʡZo>"eYbu1D=y4\ؚh'B6:Ʉh2Edy~,H0BEEQHKKrN#''Z:;;iooQ yw@׳aRRRP]]MUUը۟nh, @D222p8l6\t.=Jjj:TUe޽ף*EEE\.bcctww@jjG%/}v[(bݴǶmHLLDUU9s ׮]111XV4!B!nt:`l6 bX0LCFh hb$A!ĢN1 TVVF f8{,XV^pSSSYl6 .DtGfmH2UUbPQQ1a#˩Es7r!:77wȝO||ޱ$&&Finn&>>￟SrkFss3.]bڵCOtرcTTTp%rssvB|>6lucf.rLWZECCD휋LRPP0cwqqqZTxZZ+V\pA 0onn^]wݥm|!]&tj?XE!##UUvsmE@}JMM7ޠ*֭[7?<4͜? lBll씏xF#C:..n`DZd{yv`0Y|9.#GDYYWS?73S& obcc' PE dL&(B!'d"..@ MhX%Ay!F]]zrssGoٴ9+++G܍ 9{,aҰZZ'hpP\\uM?Ill,E41XV,YWKK˄9qPuֱt!D;!B}P\\Ԣz=&VZE8aH`0ȹs\P?p8̆ Xd VuHTSv@ ŋGݟ͛7jd2aX\j zttt`44H4zd-/Ƹ8lB||L9<L(`6~즻g||vtߙ6TMDcX1GS9 d\i%B!)r#Qdjim(4B!GMM 0+D].]{j~"~gqj;Nvchooĉ|Gl6,Y²eX|;9[f:0֏r×OT`08w8n` ^=,ύd=hT?!TkBNpиB!Bd2KOO6̈́L7!H0BEZ øqTVVm6S1cillĉnB:Njeb""F~=1Znn`"-˴BJJ mmmTWWkSDbccFUqಞw>)^O~~>iiiruZZZhiiJرcIIIZ5X?|\0'ӑ>SYz o'͔`0HOOϔQlQ02"B!`Z~ :N fB(|rn1>fmꉸ8`b;~4]]]{Ś5kp::'NpI G x"Iza~ksaϹ2I1b|d7t#}}}馟1PyyyjJUU:;;ijjV;fho']$AQV<B!bшkA BL3!X"A ڜ)((㨪Jee08]EEׯT>~4twwp8())fl@D 3yhWK,ў755bŊ /b1r6l0겵,]t?2蠳xXjՈu:ݸu~4 ٯDmfu:E뤏#%%$K[[mmmZ=0ߦ3!R===s:o!DNJLL2S?7ƳPQtM… 466-#zl6vn60[\τHGkF7:3|n&(ʕ+QkiiuhS+MBBGÍ@#66իWSXXHZZF`0 k׮e͚5#EEE4bB"0 136B!$v]mp9L=_O%*bASUU2ht:999\~^Xt)zm۶H__vbݺu磮SNE]tӏrx8pEEE8NBn!ÉO`Sv?|ͤaBtuuQWWG^^6LL'%%ׯs222p\AEb[hjj{n%66ڵk]vz[j3UK.pիWx"P 6hf:t:TVVR^^Nww7jժY:୷b͚5ddd`XR+V`-VN>MFF8l6ɓ'0a6Ϲ2 yyyzٳg7n$%%p8L{{;d1_p39rVp:x^9s @e˖300BKK (2?73hx3/o>z{{1 X,V^=v NS (VPD-s2EQPe3!ZrB!S`41 o2N'31  bAkiiцϟ𗼕+WrQmK.%%%=zɓ'1L@ @LL 'z>lVXիW)//]< &%wlݺ?Vߏdl6  f3k֬lٲ7xͮ]ZAVZ͛N>Z[[9s /^h4b4 6SSSIOOQ;wȑ#X`)))ܹsDyzE۸q#36zFFNNzzz0ͬ\rF=\kk+ǎ+R>|m6N}}=555\vMfdp8L?&;ws&Lsi?].7r)_ξ}2 BYqn/^J;"SX[nE`gggs Bo66 O?73hx&aw[,F#CJJva,q>7 *Vur%B1 Y,b $A!ĂVQQ(XVmeɒ%455QUUŭުKKRRΝǃdtRXXH~~>GՆl1L~kap\^ī:0[ .\@WWn~v; dggH,]sFggvgoNcٲe{TVVHww7=== l6dgg !mȐPP׋(,[lzC#뉏TڞB:!_UU#C;[,<~بwN7}4~߯/h:n6d)g;-vL'z @l/ro8hױc<"׿5O=Q>>F~v?Qo4'<#3چDW7d Vuc:BC.&D;m&L)0hOtݑ;v{gsb`0QF`v|M?t>MF2t MeO(Bc6:N scz4y4ݱڿHz1 jÎ^foi0a >֮];)6Ei !B,PC(ZzՊfjU__vmډ#{Hdimm=m}P=ah9ÞGkD'ڰI,bB!S1V'Nnk;ČytGh'K׏̏`pD#`DE Xu`<|9NҦ DjNGE3u~Nu:݄Ή֙D=^h12^?k>f=J;ꈟqZlףΣd.l! Np8L(" 2|pyٹs'vy\.ה3pUUb:B!t IDATQdz*ߥ-`]11 BZ}}=IIIqrersse(B!B|"SN+Wrwswjtvv~n6ڵk{<f\|^{gFll,v1kK !X|TU]p ߏdM%B!+B!ahA?inny΍B!Dt5:?y>Oioog'?#Yj0deeMzzTTT3"0o6/HIIᡇ"55&=CկNЃ_I3LEkk+/ٳgYf _q:n^ŋپ}aTVVbZȐ0bE!w6n.{UoP?³:0uXM:b,z >"! DB={./_Nbb"111x^ZZZ8udff=Y\|p8Ljj괦B!I9`+V`۶mno~ݻ~3?>2[gn1HX4ĆL -X$!-čD= !bQrizzzzfXz5+Wn/ .]…  3B!|IJJ"33:E,hP^z/bH  _^z9>?СC|ߎ,B!P(4Y(Y |Tg9]R W'm_)G},qyp} nH!H+"BE-99XV^((Nh4bZ<999;ϹB̴okN.BŨFn&V˝:uO7ߤ{N[ ɓ>|EQ(((ւ\/]_ٳիWggfB.\`߾}AII ˗/`0h ϓMxᇁZZZ8~8QRRBQQQӧyǴ%%%q} 6mӧٷoO>$˖-rΟ?p9x z!8 Gq!n7ر¨A^7/}ihd~m-L<;ƕ+Wؾ};ǎDJJJ(,,Ԗ۵k}}}_CQ__Ozz:;w$77Wˏk.q8zlذ<$]]];w@^^wqN? tvv778jRA&B!,;g: ~;2/9TU0X : eXX20`2ǯQ\O@=~w/NgY0%HQ15rL!Njy{!YLyBLn3^!SNzׇ/}K#:kjjɓ<C^UUʼn'׊>} 6~Ǿ}~fi#DFHIIAӡ*?ٵkEEEp^~e{N8AQQf_w233ٲe fbbbn B!sϿ覼981Tm:n_c(zVWH]8[·^iͱ|ak,zB1 B!B!LYY^oO?=ѫ8ɓ'yg)..F׾5y/b //s=PRR?r{_:;wh4͏~#?דݻ9~8=z__\n&q|M~a6n8$Ff˖-XVn7y)))p Y0bIn2liKw^|X,~?d|СC8)׎9»39^}U{i;Ǻu0͘L&233)..c:tLnvv;fx ~8ƍٴi6 Bvv6>(MMM\zu:Nd2¦Mc6 `W+h P7~~m֬YÖ-[h4Cll)" ٻw/O?47|s`шd@ 0#|rv1</~.\-ONNDZZׯۭ-BVVvʕ+ˣ~9vwuv[nfQUU9r?0˖-l6c6_p !X|4sȠئXP2k2, d>1=`7^1UbP`!B!B1gt:ɭIOO'ɓ8p Gkk+.]:UUEQLhnn&99yĨK.n҂P@#;.0͜>}o]K˫JYY|2@իWO(5kh~:/2. 6\\\iii?1WzVz(ɄN{Nr( ]]]3}!_|~ y衇|̧/p#͈A zT]˓[ow$?r- G)00#QVVFFF\BOB!B!P[[˲e˴$$$hhhI{ڵkv>!H> tJ ^7FAA|GCs10űrJNxut:nʳ>[oEEE{v,׏z좉#33s΍8 |Ioi$oNqq1//2Ph2bZYj#ѣZy̴˗tRΝ;ǒ%KԡWuxbLUUPUV9Z>Ie|[ePK!|*//@Akk+F|EkF#>STTIJeg?Ǐk'xSNww{wܹ+V \xW8֬Y#<‘#Gϲe˸r 'dʕt:/~4>CN>7 s6..+VP(`ڵS>~[n駟^//ؾ};YYYtvvrQ1>|OӤjg?nƎ-ȓO>ɉ'xxGHOOצaxᇇJ ys܈e, w'}q7r7My>~/|)X,y~o|￟tzzzvO<V/K/())`0p%o߮սu?zTrssB>OǡC @ CJJJ8|0@~9!zA$ Ÿߚ@cv o˷vTNiaiqΎovv6rI 7oE,qTfEoaV7ߢ7|71|і<Þy}BLR PUUq:(c6eJUU8shmm^:;;q:4狀SZZٳgx"555444ۋn2tmEEv3rp1zoIii)fIv+PZZ^'55ur:P(đ#GzCqYDۣ,w>gh*ڝ﯃ߏm#2 `ɒ%3+R0pYoOO{6lfO{{;{존l:Μ9wArr29x ---[z=fsNF#455w^233qqqlڴt]Ɖ'8~8ׯ_'11;wng~;__|F+r._̽;$@ҥKձsN裏hll2ũS顤FZZEEE466r!{=`ڵL&z=yyy$%%qyy>#V+6m"11@qݼ曜>}իWt)IB4_n.]Dyyi:::ikk2nS&bL{t;į>322"L2Fu:,&TWN6*2g vEkk+}}}IKKCA ~_tuЌ_@ (츑c7Z0>G6@F'!_z(ON=o$~_x0L<38uFk/%>^e%D{^4ﴑp8L(" ڵk1S;b~t]_Nll#/!IOOϨSFUU^}U~_L*tooZpdM{^{kab@U ow$ٽǫ6r1ȶ~h fnN;򻻻y뭷hoo`˖- nv;F43|Ҵ6 >~?~(ahah0Xm$b_B񉧪*555Kww7III:/A6l@aa!FUUIIIpxOOGRR$&&bP׋㡹&n|*++)((pn\2smTM=o9NnȼӵXX<Ln0!čFNJ!H/LWW0plq8N*++yn:/<^@J]ɏ@1Yq6=k2^;HfO;N3gP͛7/7$3S!ĂXj.]"55U"ecǎ9 ]QXtͬ& _)$VZLYY.\p84Um9ڒ:OUH1ݑ " @颻?L{_yw\Ι3g0K@ 3!X6nHQQFQdGviӶkZ#G܌`rqh2ZzC6l6AUUyyy.MYYFɄ띃\߉G]tp8fb;bpݨ:/B!XHG***yyy`}s`Zs ~Ϟ=PNۯDDDDDD;M?-R]UU|>|^ι᭙bbv{*TEߚglf ,i3%%%HNN(x?~e"@DDD.6o}jj*jjjV=mZF\.<|z^-+C]]>Ȅ^}:n3&Y ,lتG*l,/- P_eX8l%߯w^Ͷ%"1)CGGN'.\{H IDAT(044ߏ@ ł #--mM;s 222ى~x<@jj*N'*++R( ߏ|>Ȳ ݎdTUUnCDQDaa!<OP(-/^Dj'AOOF2"''g{].\YeU(**Ǘܞ({q_ֳj}vD`6<yvٳxvڵdIss3B*++LQ<{ zP G~~V HNNFFF*++ל?^3gN BUU8dggjه)/Kk߹6=ڽ{ڭ۷o8]y~G{---x^6s˗199*֮ԓ?SSSn߇d»;﵍^7\K炂%ۻDYYىI~ϻy&޽}̙m( UUap8!""""zUTTҥK{.*:::0<D"(EQ t:^xѸδ`0011H$u~FɓA|zZYb˹n GAYYٲ۟( dggkx<>`P{nrnݺ^D"HUUv188v޽:$Imxy:s˶ۭ777wUe]xֳ.Rp8wpX;n}}}Pe^hkkzzzB7336UgXO}͛###hnn^v333y&۽x9N<@xW\ABB<ς x7`Z_+VGkmbSs._Q+;;~)TUEOO}Eoo/$IBVV֊]o=x/~LNNjByt{׻νxy χ;wŋZU. {UA*DDDDD?޽{OOBϐA*={ڲEEEE{o,"K7$c/oI0À; $ZtZ hkf%z1vh4Wr!-- GEjj*  |>DQݻt:p8033~ttt| ~m#d2! %%HHHbA$Fkk+Ѐ%fG*ݎJ$$$  !//O{;Y'O@{}5#weYt:!==nϞ=?}t.UfC($ ?OǏGnnBwnTIp LLLfe. O<8"ȲuDDDDD;A~~>fO?ųgp)8twwa^0paaᢃ+6۞lnvV~U@qOCalm}l!.nK CWW>y=P DD㍎rA7ހn:UU((,,\ST,ַtzYQXXӉ7obddϞ=CUU.]NQ(߇Egg6]bBPSSKQyIIIKLLDJJʚ>'OQ.]BJJ-++ vBcc#:;;ڊRdggC#%%e޾k/kM=.gY?;::No~Z=f#eYFiiGIJ3r-QUG]t?(o~6M|t:s[3o}[Z]0x1:;;Q__ĸ،Fۭ6-hbBjkko> t:(2o;y#IJa@[[uYL&:$%% 94͛zxxX ^Lcc# | U&X>"o T{}/ټAF060}fb9f3N>]vmh}/v@ uz X,+v,t"77E<0 ZBvv6dY^9p8ɤuzzfdffjscXCnl6`0d2,E$֊r%G%$%%ige]=Z:_FQٹ.-+ܩ |=dz>~"rrrlכUs_%;ۿ__h{x G?oz L ܞl A(޻l4XOb -[: _Պ_2 "phll;wCX,dff"//236O$I:e dY:VJ߼sFwe#ARy<Hi!v -2o=.gU?*t:׿CV!MMM(..Ɠ'O QVVUkm/errR[s1X{xˉFֳ^f]"҂1LOOk7UUسgϪluzw+WX;w\ܶKNQxp%suTTThhv˗/HKKm˲68NdddFddd̛Bfs$Aeeek||MMMx7\WOODQDAA;K󡣣UUU0L;E#D㨯׾;\. @Q$&&ww m J ~QNk#eednn;;BQ>`Ž HZƾ0::`0ed൙hg`0x:B__1661LNN 8}:]Wcng܎/^Ν;$IAKn61>>rlDl4j2KLUwitvv~ӂ86r\[6~:ہ͟[0ccchmmEKK AXSV`-\:%Tjj]ը:;/Zmyבtcbbϟ?צ(7$&&"??Uj-u=j}ee_=DcUUa2nnjjjŬGˋEb{v"׫1}}}vV+ w^U0Ȉ:h\tm(³gߏm$ٌٳC{0DۊFhoo`@NNΖn}a\zw4Se_|0]CK/ܹ-Mh4@ lml$plxt۷܌es㸬mF=8W~ރ`۱g<~nB @ii6x6Zv_܇'NXqjblyf] LLLC f섪(//_SFF3Pz_l4:dȲHI潗h'Fy&Q^^u777C8q"]/Պ~2E[y0ͨAJJ t:EFss3?k١Vb4qi@ l˼Dp8;lw1oEW[شpA*AS"tzH`@wg߇)+tlz-VeG_u@>Z@DD_ d2ivHMM'| LLL 33s뜛~1=fxgY|˯>FsEX4@WtCQ\₨R>Ȼ?9F=2;\ t:+v3זNbAVV롼$Ihooݻ666.7']XEoΟ={q=FѝePPP~<|Vċ/ "8rXV>}W\A(7zQUUߗi1kzFgrr2155&h~ncRЯF[BB100&-OJJBqq1zzzSk`#㼟k%[_h-62`W~ h"^p8r#//oۦ_OSSS011шr.zׇ7n~>DOOomڊv$&&'|aLLL8z(JJJ099;wvCebZ(hooG[[fff`6{n۷ ޽{hkkDyy99`6x~6 ǎCnnAUUrp\.lxϠpiW\Aqq6ſ뿢^kp]Ceĉ U@W^ERRN8ʼn'`6Stvv" i/PRR~AѣZս{066Ʉ!b=zT~=B__Eтv;TUE?155QQYYj|ZZZpTVVɓ'l £GDkߙ3gp ۿFFFԒ$O>$I®]PWWekz*L&N:`0۷ocxxP{Վ_cc#L&QXXCUU t(++þ}`Xv}rIL&)~?JKKq9zÇ‘#Gx?h4L|>֢ SSSxQRR>B!dff===C$AAA둘Yс'O @UUڵ fO~Fzhjj$IBjj*Μ9Y҂v~$$$ wN2 "pСCGGGBN'?>/h3cQlFbXvA*Ufygsqno eST"|WM $ HR: zQ*ѫ DD㍏EFF:m;;vPwޒ?~8FFF qݻHLL(ھ¾}V5Z`k#e]_h-6ƥ>axxBZZ($I`NÇ166@ > χl05== IJUUȲ2>|XkF#}rnHLLDoo/>so9ǃjbff7n@NN8P(w/ŋ!zzz܌:`xxMMMX,(//޽{166ApyڡP'N(hoo͛7qҥe"|qqAHwjٰV/^#-- ϟNC(Z0A @cc#, >l g}Ӊmz8q :;;Ʉl x<@CC~7~C555x㔙 Aܽ{999ZPY?p%MEcc^/ ˲ݻwQ\\B</^000۷ozep IDAT($ MMMx;6>(&0 x9}FQqYȲ;w?qymG^0{?s1L&NL&-Hh(KL&={("h4BUU-HСCZ{q=X,i< ԩS?իWQYY3g@Qܿw4zd9D÷R6 "R# į/#Q1sd6Q D$>y<O]:=-ޱdLA/BEmD"xА&6Be ={v]"ZZZݭ76uqq1?>`QQ6򻣣EQ+O4h{jzƇ~ٌh4 :theqY444`zzw(Z:`2^Ǟ={wbll P6E(FeZ0CQQܹIpeX,޽>.gY? q>&@C#hu"##C{:~Yͨ߯B{qƣ>-\8LNNh4dMh#twqu=$!cx,j6hZÁSN޽{F*B!>|x!zYjj*̞#P(--]sJH$6i6 Ann.F#vQ9'"._il6\pߏgϞVV ,TS]]ڿ˿h#200)@*>5폹 Q__d&2 q… P__x<#G`v\.tuuiS F_WW_eYONNFee%:244!ݻř3g0N7n`zzmmmX4NBBL&zUU ݮMTSSl6 R}8o[/Ԃ7{NLLDOOFGGСCۑ]N'0=zjD"-Pp,8ޱJ>طoVG].n7.\0/{á4qyǸ{HMMd߾}~ ኊ -˔( -&&&)bll xs@mmmтSSSzLE*-s`@OO*++}Fq DQ3і(Jムl#iDj9 $Kxo M1a 0gɄûl_N&iўžs0Vw[DDٳ6 p\B0HHH@QQ***eӉ'Oӧ z=RRRpA.Hi0#;;[\ev8NTUU`0g?YNغ7r\[6~z 77O>`Z5w󕗗޽{D"X~H=EHOOǓ'O099mzRxnzWS7|O<fX gϢGkcSUz$%%ׂ ++ Ϟ=C8^s0$IZصMUen7uv$&&h4"##C{]!;;[K\ֳ`0@(`vvd曘Djj꼀#=11`/4N<9 {T\pA[be;z=233r<s_F~x^\~];h4jY{ݻ=mٹۜw'2F~?233e^0LY̠( ߏp8 5}Eq:n7_~8N֢O>Eff&*++t:/IaPWWgzz^׮]iEYtڬXVՅfY1E QUx<(nn_4P0D 7U(Z$I~ټ|]%:7ި 8Yn>i bhJB0L ⫀_ tPe"c&,gMϿjկ]hDF{rTk< lAkhdvÇc߾}>TZ(--EAA$IFF~ u(zdee!99Ya+z=L&Ӳ݋2<(Bke.pqϻQ4m?tU+8|0$I,:bpZV|{ Og "v;V+FVA 6yqtصk It:ݼczz`2:;n};ˍ4+??_;o~,/r# p:8q"Ed&>rȢ#!c eY;u:;`w}.rmVjw<\xo>\EEE%{Yh=1(,,DFFƂ`2 "~{ 뽞cs3,СC^SQ屲ƶQ^^DQ,# 2D4`X k t`lrjj j펢(ڽKr&XF΋RmD<m] ИknPjbvɄ\ R /Iz=0z<`ppZGN2dggɓ'̄Ckk+Nj׻ϟh[f  `||\{]!!!|HHH_vhii(L}SNO?ŵkpl6Ehkk399f?ƩS`4111NYٌڵK eee ڔFsGևX&a8TTT~:f3!IɨTٯ*$IN'TUE{{  "!!. PhN477 $ mmmp8$INf!;;혙AFFFFFp=9rdAֱ z hTN:x<(..FJJ F#' r l6 F#߯=Fss3EAII ***p 8Ȳ-AӡӸvRRR pE Gqq1ۇ/ ,^ڸ:|裏P(͆!|AAK|HMMŁֽO233o>466yeeeŇ~͆p8\޽9`0pyYV'O˗؈'O.Hݻw>Ӧ8rV+:0())AQQѺL&;۷o㗿%$IBrrfrr}!2Ҵ:V\\&\v YYYDqq1={ܹs@uu5~?Q\\\IJx|gZZPؑ#GUPPV\|B+f*//µk״Qqq˅۷oCQfdffjY133~  lq}֟} HOOGJJ :FlF$iՊb dzd=LIIA0Q[[&fdggk>:::`2 IN8D-((==])**BZZƴdffBE۷vp~~>Ơ*RRRpUYV>}z޹^{m^'Vff&Ǐcpppp8p\f3>}ZF~~>N:`0=zz^:R__Bx<d-Vjj*z-"pt P9}$F'O9iqQhsf-+ͫDl-ʰbmv,+X e-0NjEQ֕!r Kb^2 Ėy~-HD" |&"Zb"Pc)$IB0(ۮ&cdggwmO?O>EFFlܯe,ѝ/>7b.6Ds|طo;j~̭OzX+m/^ǟɟ츶w'DCC***Qs`%I\ :thJ&&&pu={vA fRU@prBj~-^` +~VU ‹_nrss /ËզڒV@DDDDDD atuuMo4""JIIsۋ~g4eiX/^`jjJ@uza!2?~yIB, hD$A4X4}@vfc0-ݍP(QQZZ!""T{={6.UUֆ2x<|EYYYצi "ja͙s(>@D[e'6fLm)N3-  Aϛ/E(B 0;N|XF4pW,HHH:a H]EQD It:F#VL\fbmxIDD պ ""6ffy!~( dL&v!t:ݎ7 """LDDDDDDDDDDDDDDD_ f """"""""""""""W `"""""""""""""""z0^) f """"""""""""""W `"""""""""""""""z0^).TUvhRe@c1dZDDDDD;V$A$bH f """""""E ݾ """"ڱ~?I """"""""""""""" DDDDDDDDDDDDDDDJa0R@DDDDDDDDDDDDDDD3+ DDDDDDDDDDDDDDDJa0R@DDDDDDDDDDDDDDD3+ DDDDDDDDDDDDDDDJowJQ UU|ۂ @A-6ѯ 3ю*B"$Iږ`Q!", Öo⤿@DDDD>L]}ˍ,ZfG)@eG$~ݻwmh DQ~H?G"fl6fi "3v$Iv`ϟm*e333pp\B(n7~?wwhiiӧtuueDDD[AW"ep@`[2D}13Qlw /R&XbbrVh4 (333fNLLD~~>Μ9wyf033GYM111{ $IHJJBEE}]8pp?Ffff\xC?^I<|ov\ADDTUE xٲA .h!Ξ=ej${DQ"nǃŋQYY Gss3!2vcYPaKPTT0K*:1^`1 Df DDDDDDDDeN'JKKhllķm$&&nc6q-G?ѣGvm*D+$ ,C߼7IQx0]!<`+PP6+a( fRm:pȄ,HDk DDDDDDDDm188gŋ0 8,owVm3#*⽇~<ڢf~De2&}@X?oTc7(N7lM9k DDDDDDDDmz{{ׇCj./~!~P'x;wի/---Ÿ.XӧO .]­[ ٌӧOĉǵk Ӊgȑ#0hnnƏ~#9jkkuʲDNNh IDATJJJ 2 ӹnFQQQwyiiiZH$㣏>FII x TTT| "_?;%1TT`pR̃{a"0*t: ɢCqy&J7"=Q^a:"x逄I;NYaٻ*{9krNٕU@VQV[zZmk{z[K*`A} I {9gf~$磧9g;3LfzTADΌ """"""""nϟϞ={?BӧO?iIrvA h6l߾=%KqFڵ+iii- xbFI~~>EEE?wп֯_ϣ>ʃ>ԩS֭d޼y vb|8n{檫b֬Y]+C2p@^qg͚E߾})((3gyf~eY`#0lذCa_PŮÑ m[Mu_࣠礋[|YjX#a~2{C|ml" 'p """"""""nٻw/f߾}>IIIg*/GImv\\{8N"˒%Kxgٳ'Nj~af͚㉋+dժUeY,^fF>7s2o<—eLB\\\ɓy衇zXرcyٴicƌV׿ɓq:}Q򗿜0$!"""翈e )'hƶmb0?_DV g+r~1c#;mY%5쯌RHjDDDDDDDD| _<f`ܹw㭷+_Yo#..Csʶ111dffv7xXl鉉\r%D"|>Fb…l޼qQWWիmۘyt4ca< -[eY߿[2uԓVPC^~G׮]yכp\\."2ӻw零}k|K_^z%N9?2yJjS7>[M nwb2_< M妸3lkk6z%" """"""""vFYY N˲7^ɓ'׿@  ߿?٧$ܹs ^...?NNNNyaD:Hs۷o#uuu׏~| >yJM N|qH6l`͚5vdggsOO8믿Οg ֭)))l2RSSgFyٺu+#F{nvʵ^at0x1 !CC8^# 2tPbbba9oc YfMtp8̃>ȸqXx1po|1~/ a柅ԅfm[`[ {&lʾ~X˜ 5|R?]S6$V޽ٵk{`0Ș1cz}9s 3Hsm6m!++}s\y啤w;C~~>ebcc>n8GNNqHLL$++ٍ øqx~oky6m)i|8iqqqL6?G?bРA80|*$md8ʦaTK۾:<e"́ևKΕ8LB׮]XnK,9퐌DDDDDDDDDPYYWfa2DDDٶM0aӧs=ЫW/2225j=.rpn m}2gT1ضMeZ]yDƍGvv6eyfVZ@yJa3n:>j]j9_qSOEC }᪫v7k۩S'nCq뭷]|nMq^$TK]R\`[՛Tՙ\KNNfԩ@|e˨ȉ/,34l0^|Ez]&KqqqiYYY͆hW^DXfMXP;ܷ8"BEĴE:&3~heM6vhDxS7FDDDDDDDD"LrrrGwCDDDt:q80ir{, W) m>{iضm6ƪ`f(--222:G"r,UfۚU\ؼy3w>i̛7/r1qDxv/@nGljvfYuCXwÿIG 5aY[l')STiK<0\T>}:~;@Óػw/p˲X7x#l>}7ɰaڵYQPyxHm $::,Ȱ}v,YB83arrrڽ/"rjfBDDDDDDDDDDDD.J͆XjEEE 28Yv-`0&%%}-fG6ފ5ۅE$tJpF+f[d L0v """"""""""""rѱ,e˖QUUlzII s9r+WN:u!>Au}001 Y,{ŷ yo`лԸH{L?f…ap&MDnnnm_DΜ """"""""6l@yy9cǎ=aYf1p@vڎ=V0 vFs[oѿ|,@ @(4M\DD 0}FݻO>4IKKcڴi3}tl by]eـam7gp8,o)ኂ¦?W,s∏qbFʈD"|>&M%D. 3Hm>L0luQR]]XUWW~zK80 LtҥK-}>D">|$^oGwGDD."M|'O&!!ztBJJ @`?X_W* 6 IiU=]ӻ)}ζpK%X|'rbXtq Fa ,Zoۧ̽F=ɦMի>߹M_ߋzΝ;j uEDDDDNGQQ+W$''ɓ'aضÇYf o&'Ont[g̘1 ""m&..I&ut7Zdp@?Ex63m8pb8,p`g5~|K:']aކr~> tIdc]H{233lmȹqurDDD;S~&¶mBuuuA,:a[4k6-7; BB!"uuuןte 1M@ @]]pC H$DmsaN۫#4[o}joquO+Wү_?FERRiF3$''sWҭ[7VXA  }:fm5cab&-P(mضM0lox|ƩȅaG1$ba pu4Pg60?{c'G,bnL /C *3gƌddd]||9HNN&&&朮#ٶ͛a׮]ӧ{vz/ȹpa~m*++1 =z0b+..fz6lo5kPUUbΝtޝ+뭷eד΀ؾ};"ѣIHH`ӦM_>=o>ϟOxg&+V`ݘm3bĈhC[oQQQatޝѣGG`f>eYtԉѣGOzMdݺudggӷo_lf|GXErr2L6C/RZZJnn.;v`ݺuPGRRcƌSN/3uh%C1o 2۶ٸq#}\s9ODD|9ɣK(g]q}Thhpp`ca6+WnŴ!ŷviG1K!d;I__pyȅAaddd{ T˲΄ um0 nv^xL~~~GwM^e6NaÆDII K.2dȐ3~Bo :ÇrRWuu5 6 4Yx1&L/'2n8rssYv-'޵k' QTTĉILL4.۶=bɒ%dffO$a2fB+WѣGtL2mضmW\q,^#Gxܹ3eee撜W\'PXXȪUꪫNylUUU1|pFi^ ˲Xv-\uUx^l²e˘6mǏgܹ1.]xp:,_Ldƍ\y 2E/=cӒyaU R[ 6eÉ$1QVͬ8 }HMsv0 l[TE`-aŶ#T, 9~n"!\hADfn6nF"))~?ر}ү_faG/A~~~C>}8t={ի1tԉO>N:aY{eذa'V8&P__OLLLBSزe s!B~~?}eŊ*q8LdΝt)|8}*2&&&:Czzz*((`׷-q;kb6ڵCOQQeee$$$t:%66<8ҥK.4|Vd$8B;j*  b*g{{xy^Œ&.!TLV[ZelA<_LV˅錞{( "0c/\Aff&6m" qtWaʕl۶-9==kcbbB{^"pcB(++V3غu+W.ԩSݻ7Z=zPPP@NZvGR^^Α#Gx뭷 ÑxU ,H$BLL6555ѠCee%6m˲ŲCxAjjjXparNXt2d^x|> :㾈ȅL8Qv\3ǸXl 0{CZ^d36`8m8-'ÅmEL>}u@yѰ%͐n~@N1C "rf6gq7zn7r8g|}D?fe>|={УGbÇ_~TVV~zϟM7Ԫ~|>cǎmDp:'ޢeYD"^/qqqJap0iR[[KMMM"Ê+3f ^R͛ix<,:.q:<1114X!el@CbqDDtۃhЅkp{ư"–!s¤<mmc[nlĶl,G6HKpf@XrS=tJibPAD_~s`ժUضwn=$&&/ҩS'&MDEEEwfovz嗙7o{0 z[>W^y~~믳pBvލitޝ#Fpmz[\GMM 3gdnG"8@׮]D"߿U|u n"ap8D"XAx^/߿={RPPܹsq:DXx1 0D>LIIImʢe(..&++ ۶)..>c?{$%% Cc4p:TWWG)//gʕ7r.]JΝo9x|4RRR竃 ]vv_4ތ9r$ܹZ.#Gh"fϞ^rUWիk֬?W^l۶,wN}}=eee,Y+9\՝Gm׮78VӰBt]LDΔ ""rNfܸqh6{殺-[o>ua{1.rs, 4|_'??4ٴioٳg?0?Oz!pp}q%Э[7JKKywxWؿ??yꩧkkkyeu](//g߾}['+ }b{8p >[K/EP'lۙ|ӻwoLӤRRR݌6lݺu#66Ð!Cͥχ離*ھP(>$$$p6{b2==)S4k(55O׮][UY{$'', lḀ^ڬoRQQA8Dyyy`YaÆGll,.~QTT3f 64ҎC>}ȠKrr2eeeJSSS!55N:1yff>'r Nh(bdffb&qqqƒ1j(***tcDD3(&&4 ݕf~Mh/MmG?7 4ml0D"le{CdetoK$tt O~?m۶3DxG`С}g3fD _];v,<wy kȠo߾$$$ϲ|rGvv6k׮ ~feu322`g_ӟ(..&--trrr8q"O<:cȑd[[Gϲ7O$66f:ws]gS^ݻ7k6-!!9+@EEmת .yZR2l9nwc>eEDf~ v4ۍQmN0CSMǶUADDD䗯>?GNNg\.'{P]Y͵C$tƌDrrrxyGx5j۶mcŊ㏟q: /pwVBB7t>,ׯ? tF7x#>,0CE'0%%%]=S`hnEW-.]JII ja3ٯVQDDDD.l;w$11UCL/4igl۶ ۶|F\ ÈVq B+uN'}Nm)Ш0ȹ0+0q>? fX`Y3go/*ұOg+W2{l.食'dWSEEEa,?臨!Cz_*ӧOgܸqJD;N$&&k?|'W{k("""".˲ؾ};_~wҭ[7u]9N'vtW>.s"0) ""?xaFČ`&e/^O?3yqw˚5k());v}?qS?}Rٺ ~_2{9{92dcǎe$n`Brr *4j,ٻ~ +dP\~.ڋ㎔oȖ=0  @%[ZD^s󑐐 3$%%:ˣ{;iS q&FɬYXp!+V>`,X _\r%^g]]0ĩ5&/2smqEDDDv!ߊ\fs9-vAL`vX '3̑JҺvtwϙYf5'd:SSSy Φg0yd&O 4TIxw1c%%%<̙3Օ:Dff ޽h2ts}EDDDDDDDDDD4𳈈7fbjRR`Y&&&6&iIi]k/i}vx 駟fСj۶[t7|leeeqmOPQQMZ|=gΜyҶ .`Ĉ}ODDDDDDDDDDDf T2oտe,`(;v"e1eHOmzoLޝR[[w]B#я~DBB۷o7M9ػwom:wԩSxYzuɉo5RRR0a?<7onݿ/6l؀>ΞNv[=S0""1V]{dq46ppu Gӌ`6m ߯eo-LA{,tCYYN|ͦG?^zq}#|_mU{wo=^a3Ə 7oc=FAA[o;3X ӧO6 ?OYv-/2/2Xjkk2dÇ?C̊+زe [lk׿i(222xꩧȾ}1c3fhrr->:eg}K/m8{""""""""""""'0g;ޠK>(Z0>thƦ&TEJ,6mL~ZI8kZ/"%'gÆ ˅p4\Ol())Y}G_1/}yc޷tu4Z2EuWƀ0  k۶613B    ^NŠƉyOa_ydd[+ n"Eʺ **ah9 .!̡}Gc8 eDDDDDDDDDDDDRAD"f"Cn} axcbpYn\CNv&aˊ`ar۰q gC{f"Nxc)~;Z0GK]m۷!""""rmCE΄ ""?}7}GQ,cN/ɦאlH08mƑ" s*a^,f^]1ìٺԮ'"""""')) """"r' vt7D.H 3\U¥Y8\WI2k)*0,apPFc5 8 օե.&1ߤv3iOa;"""""4DΌ ""ӌt$''Qs6&tؖP0pɧaA0 r]:`DDDDDDDDDDDDDaaA4 alŽX ۰B AaAnmQvP|TL\DD.`Hž{@5Z#Ab^Rq  C/ 'n7IɊӌDW][e/uEGDD.B_snMDD.b!P(D$! [Lfa.& WrmH%Ʉ]#f2m܆Z5q 4YSAD"DP(Ę?Oϡi.8l*ĶM~1bj; 0M, =G'aqX6gg^]z@ݡz1:p$''HPAD"g6ib&Ho|zzLĶpc[x20 r#n0A>Y&a,IJM<& yFsիW3vXDDDDDDDDDDD3Car, ˲ϛ_H$eY@CqӉ0 ON$4h`a8~?""""""""""""rQAD"fN^o0Bc N3ZhumrE""""""-gΝ@pt=P}QRRBYYyyy|3M;wzҥyy"eeeTWWDzőw_>(tۥg?cĈxt"""""Ҿf5 .iRXXHqq1%%%\.2332dׯᄏ2O=yyy\wuY[R]]Mzz:7|ikqFvIii)iNn4hI/&v?E?/ZEЫW/3>"""""a{TWW8+?!111'\GII 3f`\}3o2c 1mڴַE>}x'ϻϫʕ+9p`x233+[b݄sH$Bqq1|"""""ҾίvDDDNYfQZZ$--@ Ν;ٹs' ^7۶mrvzg. 2{lq\~ٳ={}v>7.vӧ}Qt}8O.xS7xTEEK,0 &MinvH$«ʨQHOO?ni꫔F>8_ض߿?~#Gm6OYyCDDDZDz`IE"hor cd'u_'""""rѲyyy׿&99 2@Ce|rMv{l2;w'WRR/Kx衇ҥKt^nn. މ\,*,䓲&u!vaWlrztNtqY䤸l(Ν;IMM媫NM7 (8nwAnJjj*'OnV5##iӦp8زe G9DDDDD9C~~>ݕ6ɓy)//o6/+Я_?zA=|z{H$BϞ=WBϞ=~Eq3w\lkǴiӸ[4M_WTUU8Lgʕ̟?o1:>bٲe<üK-kY6l_~\} 4jx <w۷m9s0sLyrssc޼y۔ӳgO:,\( xb F۶)))^cʕӫW/Lȑ#p۶9t/;<WJ[i_ @fY{n_&33vI'8IΜLOw2ؓNvmbnAlBT۽? 9\u}߻9q`|~a֬Y3Ϝ9Ïc/_SO=5,Bq;P{=Tw Gor- =*BC4LFN4(EifRFFJ[h=ժ5.v,#.V !3!ŞHJJJ[uzzzGJJ .\azB!hݜ8qb{6z|'O|֯_OII 0A}h4JGG=˗/gttt{q9dO IDAT0uuu?`ݺuرf^|EΞ=ˏcL&p455k.f3[7o@'NpEΝ377}]q=SNm۶IϟOEE/"?fMx뭷HMMb`z( 6mBUUx ;߱tRϟo[)**ҷ}HLL$++H$/Kx >9z(=< ׯvoo/}}}Dw-z{{ygcƍX,wy6oތ(}wMbb"]WknnG?Μ9Ú5kHMMߏgΝ|ߥ'|C=4e CKK ?q:_Bq_;O?r ˪l.j8s2s|;|PtKo&`!I0B^쩜*.]:).U+ d2{Mn !Bq'2 Sf$3LlvB(p:A||<~A L S3++Krqz!TU~feX,IAA=ܘAXL&v__L]]YYY,^x딗Ƕm/~]w]w5nEQYKK III8`Fjj*$O?[RR.dܹ(ʘ0\:d׮]<쳼 |_fM{]].v&BШ6۱$$$dyeVTT'p:BqkK]؈@AKbf`Hإ!~q˒\+S,H0B;͛yWhmm?^{̓;7ӦMxWG`0pTUI[[կHKKcpp|p6VW!B;:u.n7hӧOsyoӅa>#֯_ pQXnvJ~pxlC(l#;;v-[6#x^m6iYMII :۷o'++ @[[{eݺuzֆ*++ٿ?^|̙/kʕ9N@8<ʪUذa/2}sa4FB!Etb4 B2].K,aϞ=TUUQVVd={pB #//~G}}Y ƍ|2/IIIfG!zTw9X7vҴ, dIqDN5wGyEifl% B!n'|RۋngŔMd|I;F[[v ())`FZ<##6o̺uFM[o… ?dɒ%رӧOϜ8qya4`Ŋlf<(—k.QRR~)3 |K_6U;v/ʔi&v~Q***x'~ŋ)++nJII =и/׿5o6eeehllgyB|>?Y~=7o'ٳ|_gʕ$''sig?s)--|IxHOOgǎLrKT!)A7=MSAS1)*ߺ$796Ʊ fB+\ !cXV6l0} ?at/ZtᔱӞFKLLdǎ<B!Fyy9NBYYٸe l6dddzh4SOӧl|_{Ɵٟŋq\|[bʕ4&~{9rl6-FYYjrJ~_GNNΤ띙Iyy(ʨyW_}/xxGٸqm΃>Hgg'K.h? SKNN?0~!MMM|>222xGXz5&bկrٴi)))G?ܹsn:>2336,YOS^yd޼y^PRRc4d,YdL !vds74ƒ闈;]㏲Oa{3e0re4 &!]!Tkl !n; N 'W>zI>Sy~6# P8$ic~VUMPUUUD"TU%77Vu^KK //{B!u-yi6՟~UU3m5kh4"p,Y2*ety<Ŏ`0H0$;;VwoR|_糟}'|ٸq|+|B1}D՛ܐY->Cwݼ@XƉ:c8,r}tmDzL塊i 2jC`_DƳU xp8L&F#]tuuy߿W=igyM 3+)d B;^uu5yyy'B!B1L4:YFnR !bJ'C7?A7А4Pus2 :@?|rٌ&F拝xKD|5xP?(-X$+3!#D"jjjD"?{,555dffRTTtz'B!a˂ ,1!Bzym$TT_aET(7/j#;I'-`P廯vI Ư7Q5(L0|; !7z DRRv^HJJbͷB!Bx"ϟ'`B!Z7zFdT&sdMR E4d2.:D+]DUG.U5~}?@P%?Iguc%v ⎐wM]]}}}x<RRRXp!+Vl6. !B!nscX&nɒ%ۿVuV5|}]f=!BY)Ax Abr NF$uTi57L{oԉѠ܅٨0~+#sfO)ɚE!$A!jR^^NyyB!6b0p:SNg45L1LZ{B!f1iFT,=\A(f0(?<~I7`>?C017?!B!B!B!n9ɳ r?J@xVں9Ӫ! eoP @y HB!B!B!gE+Yi@HkxffehPX]2sfpv !52B!B!B!BbVMoKAACa( oj{ Wm %YVT8m~nޟFiu!> B!B!B!-lh3("(|x˞Mm@ F6ne"Uv~T%Y NB!B!B!-rBKK1(<(~PD)FNBIEY+/1A4r & fB!B!7磵P(44===b600@GGMMMׇ~>{,ʌw^>iMD页&Z[[%XnWB!fŽvfZn^J,P `0a880*Cج&Ye3(- hBf B!B!āظq# ,y$#O܂Fx^L&aXXz5s%0444cmI=4M˜>}^ A/##e˖4c"@VwC!~|CMlIA`7[M owub|;E 2!EB!B!ĬD"8q"Fjkkr wF9qլXB, x_qiΞ=KII 6lfpQ^{5lBFF-B!;ua?C9PM}  &εO#TU㥏z&a yo2Qf!T$A!B!B̊x4M 7?jA=  $%%ˉFdҧ  \.fy~vvvR]]͆ ӗ(ʔpA0VӉ0k  Fl8qo h0hkk̙3s=deeD–-[8rf׮]L&~?hłd2H0$`@4l 188jx<$$$ B 0&Hb6QUߏhtbN DUU}i~ߏ(8NO1H}a4QUǃl֗Fxɑ#Gx͚5k(((ŋtvvg(**0[l!11^իFݻ\n݊9s]v ``͚5 ywطo;wDQ;pq8zj^~eN>Mii)bRh>$>c4igΜm۶DWWN+W`0q8lٲEQpg|s,9Bjj*.kǚB?I} ?:s }v`@S}f?DL6~w Rټ8lx3N ?J'ȹTrR?Q&Vs I,r`2%+I0B!B!5f2;w. L&rssէkiirQPPdd2l2^}UzzzHMM%//͛G4e˖( l6AlZZZPUuL4M# ]zy^ԃ͛Gcc#MMM̛7vF# ,p˗/ק h`hhfΝ)&i`ABBcF#L& 9{<xF.L'BRR.]"Omj@p8˖-TUDf韇alC$0/8X,h#TL4?/,,… ,YRRRHLLr1IIIz~l6wVHJJb```TGd2A`PMvEUbֲyQw>f+1r}EvsyˌG#bAUUB!DLXShc+qzS-!3;DQ 1 P0(4ňATUZ"@53( fT+kDZ$Aq$A!B!B*ƢEطo999䌙tH4 CCC@rzz:66z{{3g>bͣ8(2f`jPUUҥK'cZ1 4 KBB`|D" $q\8qtrrrH$rhiiMhmm% ikkCQr%FhThF4!..Ʉp磠`2G.iNlW_ض_gg'}}}$%%qiVZ5*$|J0$7j n^/v}TPB1fX9׊ǯr3DuG(~UΌ hhÿsUMS^i?).sfHಛ!@!`!Gqغu#sڿBvq.\@jj*[lbtR̙3򹹹:u4grHJJ塶p8͛srr󨼼ٌHff& .ĉA/^L\\>@n۱(B!INNɓnhoo5kY#=J]]%%% Ã-b``}m6RSSfΜ9s(--7ԷE8歷rigVvlΞ=K__7n?蠦˗._L[[x^),,jTUUQYY`H$B455K444NFQO7ɜ9s<=*===$&&޴zappYNo{{;A"/N's!++k̓o---۷N}iA /qF=D4M"`ۉ'''qN߻ N#kP^^ŋ'mg&Zd-߻v?N5eXr償qws1?d"55M63gNv*͛9vXV4MIf2Xf ?ӧOc20L8*++!33sK/uV֮]ˁx1Lf.]J~~>ɬ_O>SNaZl{? $Xv-|3!!!8jXVyQAB!ĭ BC<6GՆ4}ǣ撜?w{o'Tnn]&ۇ`ܹ詁}>4668|0===nO:CMM5ömFHty$n`O |;>NcjTBL&Va26mLF5u`t0pz޽H$2s=zn\\ܘU1 X,^G)2:]Y\\7oСC呔`b6rXVRSS'm3:;;lc_[0~~ƲԌ Z ;Ffq}o2&[`0yO!] j%L :2hA3I!y<>C~?ϧRo+++#( .ܹso&XVlBNNfɤH$B8f```1ٶm {gvaX,zy4etwwszzz8wܔaXvgLɓkZiwLw{y$fis=w[yv=@"++kVDx"YYY !a@ABqH0Bŋ|(Bee儃 ]Hu],^X*݇~˗1ܹ aۧ.1x^N'۷o'99yLЁdjb۹xɓ̙3g .^8hO,D,LH̼~`|˧|;|t/_`I7$''zj`8'|2i%%%SԩSAL|3y$ĵ]q'T!OO& Yv-6l^ !B!>m$A!m/V5088x{ǩp8LJJ /ьfJv;C]Ξ=n5 ( ب1ҥKX,twwS__?鲽^aٲe4@@#!B!B!w*⶗ 8ts5裏piiilݺu^RRRp---|>a…@~GGtuup:$''SVV6a S[[KSSMZZ7TWUUjjjhll( IIISZZzM(MMM,XvHRRk֬ޣB ip6 0L,Y0SNSXX8apǩSkZ6HHZx9}݇ŌIMM~ ~ٌn'==RRRmwݑ.]ĥK#ORRdggߴj7Ԅc``h4E&͢r\h$77bΜ9CMM {uo^b ,Z0|)-3u]}߿G+tH$B]]idffp)w/\@SS^.v)**l .p냃L87pBzm+WD}}=7n䣏>!"K[[.]bڵN1\reT;ٰaÄ`|8p1nhh 6(HOO@`A( \t|1lKK^jdx|BHM顥YbfyFk" kzm[~OOձz ndg}>8@{{۩044?4+W|2uuu /pb8냙:ήݻw߻HDoz6oxMOG"|Mg͚5$''iݜ8qV}|i={tft@l6vZ:::ѣ}S/fdɂ`Z NYadvǏSPP0fݪb…$%%]s^~)}nnLGH~͛GJJ Cy19_fիWsezzzطo;wԏ@ 1|G}h4 / 4rPq#`n7 Sp8oMww7)))Yۍl&000@WW״GF[ttt`0Xlfzzzʕ+>}H$2aY鸙V+Pdrrrp:vB===;w>ׯ_?-** hkkѣs=c{wtr]wH4*:::8|5#B!B!73!)Bjj*vjz{{x^8~8,]TOvEBBFшi ~zϟlX233IOOgx<.^HyymDQ~RSS1LF(q:::fѢE{UU/_&11]vK/˗9wK,r#SaO4io&]Ν;|>99UVo>Ο?OAAs̙`P9..nZ( 6q zڥKr9dgٳF***++C\KLG<NS?~cbZVZL~űqF^y9u˖-C4AUU***HHHЗ[~jj* .$2BN?+{2PRRB^^P Rn?xb30{ 8rĉQO ͛pz*۶m㡇zkZLG:~M&Cp ܬFhEу(Ǐjkkllܸq%f#ž߮e~=hd2a6QE/1a2הA&^1he˖fӿO- TVVp8B={vk:n\.VU7Ll6222>絮9ul2233lz0Cl;UTT>Xb틙t{l#UUUJyy9cUU'nB!B!$3B;jjt:Ƞ>.\@MM ^'Or())L&E',7$''>_2ݣE>RGm_"""tv{`ڧFa̙R^^Ζ-[p88.2gD1mTټy33gdʔ)DFFP+;;{$,,,ek$>_jn8NOO03 >v;~iH $v:;;wtt(k)))Jihhb0oeJL`0hjj @=c&yOw,PJuF !B!BL& sCӑLII .Ib~2z~DS;-[6livjrrrؽ{7.HÇYxqN>Ca69}׼CZ0uT)+Fnn.ǏgϞ=twwThڧWYY 3^T e2/^{ɒ%DFFrpv:քB!B!! B!>Wbˌ3aƍTWWs!-Z3^NnWG|AVc4XG痔P[[FayڨJ"88gӧ%1~fʔ)>ٳg}OHNEEN"55uR~? !BEgGJo b;z(BTT!!!rꢺ2gٲe~Ν;ijjb鄇Cmm-)S0uTuѣ$&&:`QPP@JJ qqqv\.AAAz_DSS$%%xBCC1nf3%<?ZҥK͛73g bP^^Naa!s)hKWW~!f"<<A{{;^ Mj,YBMMKJJ",, FUUnד/,,p⺫j/^L}}=6l222$ye8*y5B!\.D g$3!n76 Jkk+ZFQJ$Gbb"^x2dGaa!gΜAVv333袋tRgddo>[lh4dժUٳ&>Laa!ZVK__NN||N:`K ZMNN555sxbz-ټy3NNN . yGuu5(yt:Fqe\bll,]vv+p\p8?> HdT&(..Z=R7.y\\]v;w~Fy 6zoٲEY`A@^ʁhjj>}Zyp8#22g !B!B" B!&ŋOmm-555XV:;;$((P6mɄL qqq,_ZhZX`YYY>K{GFFrsAەJŔ)S)--, HLL ctL2h.z{{h4z'##A˘Z&?? ]h42sLRSS)//ٳf:;;񤤤dt#-ˈl#Zn2Gp:fvM__ .$%%z."ikkcǎ|K_k8vʹa4q8;o%$$jZZZf %##bbbF^j5ӦM#&&B1b4IMM%//& M:+WDii)8Nˆc̙t:֯_?iV"**cǎQ[[KWW:pHMM_2z/JErr2V̙3bXX,j"))iTUB!B!> [ bnj] ?U:ߞk}}}|bn{].2rp8r1eʔ v+#=#OV1 tiZld2 Zm}G?~$֭[fnt:QThZXw8twwp8Pzez{{m{4 p8JIlO4>t:zgC9GybXNV xڍ'FV8\'X=h4b4H -_>0͸nkhr8J`vX,8NZ-&i@{s:p8{S5p(8]^j4Zrh4>碧w܁dl <]r0 'ۭ_(wʶ=`0|_GOjT*NI~~K^v*++ '...ojjl63m44M?6svZ-8Jp444сV%%%蠾4FD#B!&fB!B|MX~=cG矧~庻yy뭷>{͛7yy:;;eٽ{7=cZ˫:糥grABBaaap=o߾짾6V\d"))iLSYx+2Hn^z?z}UUUs=TTTx{={LPdB!b$U!^ہss y'ϟϬYj2Rm"" z͛7o|J޽{ 66v"|vv'4NǀũSYV\.R\1*p\~"ƦSNsO3B!-yK)B!h4b4': q.BϋHZnʕ+P>kmmꫯfΝ>w\={T*qqq$$$jla2Jhhhӧ+TVVbۉ -- N71Ѐ$,,aGP]]MGG!!!LN'..n@|Zv9pV&GPPʴ6j &..a8QTƒJvSYYӧ8vLaa!eeeݻOs 8wq\DEE^rQ^^Ι3gp:9r(BCC9s怤MCCMMM4 ƢR8p477~z=sAIMM ]]]&%%y|!:::߿ .n7z뎎#44á\IHHIIIDDD<7EEEBuu56HRSS477SWWn'&& .Jt$''?ͩSES]]Moo/+Ooo/L2xeӧOd=PTTj%(( +**$;;[٧ᠤNGVVJ*((jOTTiIKxx83fPj^BCCIIIKK MMMSWWG{{;:T"##=.!B1v B!B!ƕFaժU|G^ UV{l6y6n܈lFRիYnaZh4sw*ϋ7R\\/K%f?0~ӟra?? NǗ%."~i6o۹ xG />}^F#999~L6 G /$h4222{:u`B!#IfBa)--UFtww0ǓILL:7ol63sL.-**/P\\̥^J||<%%%TUU@tt4qqq|S^^lnFdd$$''\dz 2c ***())l6hHOOgf)ر{*}W=d 墨J,;>>AK\.jjjj٩d̙ ﱴSh wKKII X,n7$%%1sLUXXѣGQ|lٲ!ǪU|.3=o+g'Or`9Yf1g`zxFFzF Վ}G  <***K/%&&bΞ=j ""rrrΤzhnn5kְrQRR?>bcc1cƠرcd"##)++ٳcUFr 111Y׳f_gժU^#{7y׸;Xd }}}+hZnF yjkk΍z߽{7^{-455_4~b28p/z>{n~_p-|r¨rj駟x,yWyxʢ'x>JFF5` ?&::zh2 6o}tz!3<ٳg~@vv6k<$_Xr%jm۶o7O^^>,_HLLz}Yn:BBBhmmZV]ZZ=WŎ /o}[DFF믿̙tvk? ,,G \H|GlذGJrIMM͐m Uȸ7oz7x7w^p8+eJ̛6mW^c޼ytuu/ /xݗ]VI IDATao&\~#:#?^=Ú5k766c3ZZZx줯˅BRVETP^P Vehmme׮]t:t*qQYY˽Jb}87BeϞ=TTTׇvٳg)**";; xqss3 bٔ'%%y穳kQ:jeΝ vEEeee,_|@G\OO6mb(m̳nkk+J}{ԟ28H=֭[ cիW+#pݔ:bPQQx|~>=Qo=s?|̙3J۩tzաK ڡ/c?x71#j/qyuVZ^onn2VXfp8p:QWWGyy9^x!>j{njkkYYYMss3'Np|r*%Y=l6L,s7t:IKKS>ޡ{>p8غu+MMMtRpݴpajjjFGTT)))b4룵'Ob6ٵk:i=#m/YVN'3f ::pzzzvޭ >{,%%%&39s1ܣ1=os  #55JMf(--t8lG ac?deeCDDĐzk\zYV\.`2ꢤrذa]]]$''+sùDǏή]Pp{)oѢEDDD(GO>+R>_KK * 1 HNNfŊ,^͛7lٲxܹsdpp0/_p.bWBBB裏X`111\.ʰX,k^s444pWrj5gV:~Lii).B 3fr{v^x2^y1}wVTTr XfϞ͙3gp\t:y饗m9frZ[[iiiaٲe^I}ze˖o>dL,X/̎;e޼yyv9y$477HWWc>-Y~Yf_LJJ5;N<""v+? d2)U|iooX%LZ,ZZZ܏d"$$Dٞ?BBB Q[ROHHgϞ:@TTT7-KEEVJ"669dB!IfB1544(/W^MXXvrHOO2N5kVEt:IOO'..;wR__ӧX'ѿ\s QQQDNݻ)))ɓdee|i٘;w.sAףhp\^/a"""^L&m9ǏРt#11 6ɓ'WU\s5jT*n7iii[oaX())0=?ԟGb$?q|ڻ|k֬Qڌ'ޔz=ǏDqVٳ444`X|v.״-0=os VQYYISSmmmښVWnn;=z]c~5@=Zh4^wTTTβe˘>}::V&!!86mDGGeeeFùꪫ0j\.oDQQѠ#]._~t:1 R*[ Zڵkyկ~E}}=?O}zU/((Hh4\}q 9s wy'AAA8eOǢE aq\>NOu(=R8M__߈:iu:K,ٳqSi?J^q5F__Z+GU h(vөT߉qݣ橧ԩS:t'OYf# 9CUUO?46SLddcnӧpQ7֭[ǝw9dB[;;;6zw 70hfNj܇'~^; ER!Bd!^wwy))\#GJJ׋ZNc̙QWWGAAp88tNs璐ൾFAsRSSCww7v,\p/<Nj#Gp\̛7pJjXrrr8vgϞ)4بeVKBBɔ8`@=]@Ei∋pZ-?~Nkk}ԩ l6^4ڊV HXD=mρ;==P:;;)--eѢE^766b6 "++kTvXbbbFՎ?X h;44YfQQQ@BBWۍZ&%%xꨯ:~ѣGq\\pJR#FV)((vdhpJV1nL&W_}5]wiP<:tK*233|(TVsnZZǏ /Q'-{F Xv;Bӕ… 2."4 SL[᪫7 66믿~;`p:t%K(1uwwS\\̂ =Itt46na *jNh8v_r].'N !!QSӑO~~><쳔+XJ5 ߧ?O$&&V`ΝJP2+1o@F˗sίkn׹LRRFĭwFh48N>l**)BBB<<]u=?}t:)))SQQ5Gmm-L6MB!&ԌB1y ul޼Ǐ6ne&}j R: [[[}0tuuFV~XX5XIIO_ە󕚚eJ"!!87_hjE/,at㆑]@!}PJGzzEkIIɀ>ClBGG.jjkk'9ۋf֬Y̘1^z={(V~p8Xf /F N'VӧO6 r-Xl߾wJ"&&bZ[[q88rrr祗^bΝtttPQQ~;z{{Yvs`4줥MHH֭E__%%%aZoǎ \uU߿W^ygλkHNNv_f?z{{J6箴i4v;tuuO}}bbbDB&L>9jz+ƒݫNoXv-wW_ Mww7%%%'$$SGq!V+ż[nn{QYYj?$''3|fϞM]]7o&vӧe0 *Pj5QQQ?~\iw+W_|", '!!a餄B! B!&pVXݻiiia߾}9rHBBSL!==Q$G)_;貑tJ"..8ױp8lkkSq!KQPpnWCCfQ^,{9XiH穽ZV^ߎJb̙H{{rnsSbXD=mwnn.l6بt;NJKKvM\| jr/[jܹgY=nOEEEqhٛoy7sI7|3^z׳sܹ477tR׿'xB$p J}_ooC)7t,]7r]wq}1k,xyӉF!!!G}T2}tn*%|_xt:n5::x~_g{s=̝;￟{_|Q)66G}4?gyX`=/??׿C\Wpp0<C^S^7?On6UnVZba֭lݺ8\j*nQ}WUUkՅnGѠ۽u.rN:œO>gLL b(..'((}{,^o{gjL&2 Ǒ#GxwqVKHHwuh֭CѰm6y111~xT/xFQsHDYY>ȑÝwީ$̝;uֱe6mڄ` ""hm%%%quױi&mFVV?0|_7n#))xiӦq}ꫯSsr4T!B$3!j53f 11Jhll6JKKdŊ^b|ZKt_2HLvc9Q_pp0>Gֲo>q8T*L&AAA Xi O3K{`۱LYYPL&a{;<> ٳgOPYYh~QTTf#""iӦQVV6`ʧle}MVV*\~SQQAoo/o> 7ŋihhfDFFReǗ~Z-ַ :z%ɘL&n.b!44嚨jn6zu]^P~L@zz:wӼ<{1RSS DNN`஻bʕBffW"r~; ,bIPP*kגGcc#&(T*˗/'77J #''ӓt~Ѽy󈊊: !Bd! :(BCC1cBee%ձm6n&!H^Bq,{^v5 Zb=-lٲ!_^|f{=V+iii̞=[ARPT۷AGЎw2/B{D{F!''fdOI3f)j0c}O;߸}#//*JKKO>&77wy2CL>+ϣoҥ( bP&:9L|͘13fh y){j \&,,ٳg(۝9s栟F,Y2̙3gmT*ILLyFF^?bʕnSV8<  oʔ)L2,ZgڑJ"%%+#>>~@w) t:VWRb۩'eTA|WPXO`z{Wr^gܹ~j3T*AAA0bccf477r3b}νT2).."ƣ8%%a|ד9JKK 44K/8cӞfm;7@ d_ӧgZ[[ikk#""3ggz<՞z 44.jjjNGߧ`<7ϣ@FFƐ .kX!B!b>-B!8PJ)S8ODMM2|8|~بw>ب~:r--->/))F3QTܞѦ444p8n~z>=׼JGXAAɳMJEppOUکqJ w_ƫVHH8Nʨj4j$ᱮ{N#;;MqqR~yڴic`<ۡ?HM&y4ړ'O0my!B!B!$3!زe ǏNN'f}Y87jYûKee%]]]X,GysN>顭nJ__SLaԩ[_VtRZ-l޼cǎLOOݻ?A~~[?gAA2׺nWY#Gpȑ1 ΍0nll]^VsEa4llݺޮG9w]]]|466b줦>kz󍵝w:S{(*<r999-gܭ IDAT?=Qo۳?q'77JEyy9Ǐhw;1R+x% /P9pĉa9x ---bX6H!B!b<4B!&j***AӡVQոnN't:.1|8@]]ᠷw(,,̙3=igffrE)X~ll,]vv+rۋ`̛7/ u/^zv6oތ`n… f4ӱ ۇ`˖-Fy###Yj{졩ÇSXXVEׇnORR׶333)//j4?{wUy}fOF6ME KB[E,jX\g7K⊸`"",[ Y6)$$!0 |^5Wys0̹~>ҋsN>8ʜRӉ'??";vuϧ$$$ЪU+$%%=}ú?j|(GuW^ɪUaݺu|X, ~Ml۶ݻw x<,nHEJf/33&Mő#G(++p8]vtڕ.XVzEJJ 7n$??p yw!55A`cHLLo߾dddT[»[,:vHrr26m"77^/QQQnݚnݺѼys\.Wv :th.|*ܝY~Wnttt&hڴ)W]uU àUV\l߾pQZDEELvHNNзn+e˖q qqqҽ{wv{霧w}8ε2{'FΝYz5>])W;ߧs>NܧbX޽;YYYAvZ g<6߉"yTaO~vqs\$%%ѦMj$%%ѷo_{>LYY@'cT12Qㄿ-kTZeNRߊJIDqݞӡP4 BB!nP(DV"y!.,wv\.W?`0^nt:Z=z4OcO?eÆ lْ#FxA ft:,}˗3MC 8i\.W/l6N+ vbt:cڵtFQ~cEł ::v^7wyՊ鬲3Պf o{aa!VJc;tL]]8WRx 0M*/^]x?WS\\ @&Mp:Uyr:ᩜQq$>N|jofx4:~^iW^0>t8X eMdŊlڴ~z1`jO9>B! ^CRRRi<nhl6V]A痜 0]yT2 ӕ=Y)뚷;- ""ByY>66 bTzѼNgy0jtaDuZj%&&GYf\]GM/T;:]9rziM_u=ǹtWtΗ[Er >>-Z}]>r>*vsx59ON<H}Hs3}>;wܵ h}D6 &R/,@DDDDDDDDDDDDD:Cɟ[Z ib>"7R zdx0fY/LǿH"rNP2H3g}O< p8HJJs\q\r%DGGשO jp8j|qq1SNe۶mlݺzV\ƍILL<;򿰵J\7Q[xV~E.H9o)ADDDDDDDDDDDf&-bMTTP={W_}ƓAbb"a )((`|W <{Z ={69\r wy'KF[w8qAј 1}^X$$pI?" "RODDDD0MLӬrO9a7 M  G  .v-"""" ÇyWe 6$n7999x^RSSZ<6gyhJJJسg .믿fѢEX,}Zi&dʹiӦɏt:4iv"##Kf(SxVppt$/ "dsخ](((`ԨQt=<[na{%??Ffh޼I^/YYYt:i޼9ahт:wLygXt)-[oCe`8&j9|0|DEEѧOXRovv6n\.)))hѢBlpabcc4nV+qqql2]Mp=Ym֢m1Dc`DGckӦOp?MqdcKӦ TR%!{N||[A0X!޾-d߱~HԶ$6qA7 ߷s4Byyxoc ѣ,+;ӻUDNDDI6m"4YSUb(PYeWf8*理%yEDDDr\XV,X@jj*M6faF䃒}]͛G^^6-[r-p׆'+|rq:3vX.S&4(>>obV^Nf(--'//B˖->|87x#%%%dc׮]ڵkiٲ%,[<ʈE=+"f͚ʕ+yG*4MVXٳٳgeeeXVy4hPPCdn7 )$L Q/ÒYZJ`^ k4qdv!exK!\aIJ$teqٷ7FT#xWz$$0D]>kc Rڛ1 kr2Iz[i E/L?l&$;"R=%3:uDNXf Xt)}ᢋ.W^m6_7Z ' ,YTgaٲetЁ+lV\ɳ>KRR]tu]t!&&"/3g:t(ŋ /ЬY3zŐ!C())a׮]mۖ //hڷongرg}tvZ8:3h~_ӧO~?ih"VZE>}شi98{@0HޤG#:DԠlȯ&[6<q_5x Q%o#x^K¤ft##3lboߦq5)'᷿ƚD c^ep][fFfH """""""""""rk۶-=7ooeʕ|:t_|f͚QVVnd/_1M شi~ˇ~… 1MLdu|3X, ۶mO?+V@QQk֬aϞ=P\\ @vvvl޼9N͓O>I׮]֭I&!TxGư۱4iB? 1,)`N9TZNBPXw: $TRB`oR;w߾[X[45 xW!TZ %1ތ59[Z6n¿s7pdvf >Es>~ln abMkdJ """"""""""""\@ݹ[YjSLȑ#|dffb&@ݻwt:c4ݛ à ͞={‰ݛv);wR\\a\xx<L4 1l6zMNX,Xd =PmےWz֭[3yd{=nʢEXh 'NdРAu˹}.bԨQv;P0B36l3g;v0 zA=hٲ%ns璟Oll,111!KRRGG&M8zh8*CVdggsN.]SO=ł bرwNVz̝; 1aA\\v@]eeea.D9Baaa_y|/:uW_MϞ=1 #6=f#TPY\5)NH"+5n7w]۷ٷn ~X&7~`Rb@PY%K1~\<#_aXbb9DQesؖ-[Xr%%%%8Nl6[Zbkꫯ&&&_gڵw}  L8мysƍY|96l ..χnwݺu2ϯ~+  |r8ܶI&{cvСC׿i\.BGtrUWj<_}seN'񿺏[n"j 10Ƚv+dλ6bﺃ[n Kh|[q٩@%@ݱJǿm/W Q[8^D$=GN R,o${"(%32338q"_};v //Inݸ2d 0DΝ'!! .$, ?OHMM?dÆ ӴiSzp"ł 'RWJh߾=z+Ca%׏'xwyBLݻw'999ܮww}&;;Iaa!;vtyf /K.<3l\fq:j Æ #''5k \}lذÇcX`С\~v 3az<oef㼸/boMW^'1ތg)YPU)B!Lt1=Lf~/-p8MCjE ) /WطkT<+$x8'b=U [֨دyF%eN>oV |lTqʧCi Bn7PVZE*Ti`*ZviV]y'>/y_.`0H SRRB=p8u>^h!""""SR:Cj!X[vfaZX,XN5,[rrrV(?2 7Jfi _l#yɈra/D)Jfi,,-c>𡑎FD䌱D:2ԛ)SoӳgOf̘q֗wH """"hnt"DDQX|9o*ghٲ%Zwތ94f՝_Vٳ'^z) 0z[0dӦMddd]o)I&qmպ;wrma&ǏgرԓH """"h`i ""^  ++,V\o?W\ #//m۶oӾ}{&MD~e?W&&&>U/ 7tVM>4PT"""R_ )))a4Z=z4a4JJfFg̙~/_UVdddD0RiNZa;D BΝiKΞ_~_3f  DDDDDDDDDDS2Sǰaؼys.>}:6 4y'x<wŋyꩧ0 "=;bcc>Q={dUZDDDDDDDDDDd9Ϟ={":tV?Eѣ5kVfΜI([n!!!L'""""""""""DDrN3ȹlܸqtG9F"66C1o޼jfeeh"\.?OR"""""""""""H}۾};qqqU& 2g/^LVVaЩS'zNTTTM2~iӦܹsYlcǎ 8QFagv|ᇬ[|ԩ/h׮)g̟?۷SZZJ6mԩW]u W_eԩ|lٲ~ӟuVƎ|,Y}qA|>Z"##;3֭[2f3{l֬YCvv6N:0tPZ>RWbcc4h|6mp8''O[naѢE̝;۷p8o~}Ϟ=1cF=aԨQ̚5CWe1b5^G}_w{Dzeػw/`ӿJFͶm3f &Lto6SL!!!%KxDDDDDDDDDDzJfsJnn.o#Fj˔)SXbE6wf,]{믿uO_Vx}۶ml۶yq3i$bbb:t(/~>cV]غu+ap7pFM~~Il–-[Xp!=7|s`r-x|>999Wo>&O'|R&,w6ѣy7fp 'ٿ? .p}5!! oܸ72oyHII KOOgȐ!c :K.Ç{nnJΝ+m&}QxJ ./gԨQ2o<* "ӲeK.r^x^z%֭[xyC&M`6<~{q:lѣG3{l8 *O?~2g.qq,KMM[n/_p*DDa O)pݓic01#bLl߾<ë +$2X,L81\w ۷oB@yR֮]ÇIHH`UmIRRR߿?;wnt=CCD}RZZnڴimN'~fϞͲeW_}?i7orݻwѣG:v;C WٮUVg 6rq ߡhѢ ,X_n?TP$SmnݺU9j۽{7YDuj#//8+:8k3kԨQİo߾p2oC͛ǭzR)~]v r|:Wڕ'&4mڴʻ˵o8VrcCq vZ O>`ذaXz5k֬a۶m䐗hN,W_})k׮:jGy:oƌôi8x]HCd&eee *i2쩈Di""Qظ@]>@ B/i$1!+?`ŗ9q]\j\ pEGG3n8z)xw[h^˂ x+ׯ_#\bb"W\qK.W_etvseƍ8axYp!A*cwJ39кuSnGvvv/_ҥK뮻*+ۮox|tЁ'xFr1a-[ƅ^Hzzzhǻcǎ||WU|YIDD|4w\n7Æ #..;P?fL06m[ڙvE1~xl6w^|IbbbJ""" A n&B`0\TC֞ 0ZfCDꝒDD3C/6p\?ѫ+e`0i)й{G>$ ibR < }:_*wM71gˋ/ȵ^[I&_˄ 9r$Æ u8<[neŊ{XֈlǤIXjeeeu]q 04˂ UƍWn\2\M! ؝*dرmΝ;yw%\.);?9]v ݻO?4quU_,޹s'֭W^p ߳q9Ra9Oaa![nO>᫯K.<56"{9#GV~p ̙3ý˄  ||w,Z-[:EDDd<'2Wni&v;tDqqqtX裏ؽ{7\pYIDD$R|>iF:jUwP}zz *X0Cav:`""5d/ ?71U=}~B&!3D("2 X,V;}ɪYؚYV~&MDQQ3f̨p|\\?<_XnsaΜ9X,(-- 袋#2uT~sfΜ̙3+q:?QFUORR bҥ۷L:uTiہ_jV0nGQQQS2u ȑ#կ~u2C ^v3n8?~{Һuk.rz]Reee|74k֌*}|g۷P(hԩS6l|DGG_NÂm *C3gyвoeVÁnAB!~?'\'d`0HQQeee$$$'DӧG}z>VQk;_K5J˜8}iqϭ@ `|+*&_:˧3kU'p݄B!ZjPk]v~xZq|2q0 2iB$hp{J))+`X"_ DnDDDDYY:q} 8|0vo/yiӦ ;wf޽^xo?̞=o'x~_b͚52yd wz-RRR޽; [}3dȐ(**GG? '>F eeev1 L3 X'JKK9z(l6V+%| q~Y[0Oӕ=NG%Ӝ0]ُ5:+f "r+,9m_4. ;(Xÿ5寛f?H x?l i"~oh\q"""""QLz =-Z' ..4k4iR]AAӦM/tzy嗙3g}sRi{|&330((('d̙tҥB"ȳ>KZZV|z)^z%uF-*]OII ;vxp:̜9dwNf͘5kF(cĉ,_oBM4駟&%%0"""R7iRVVFnn.P0'>>~[VbcciҤ %%%*$ iRTTD wp\y79۱ E% AQ)]"(~qF)#{q؞7y{ߌ}V%QE콃D!*A.Xl=1I}?C w={=vhrk3^yBv^| $(BE ܏@8IN@eUU0dnV: DDDDD4a>,7民 I/{^_FFFzYYl6Ν;hllw]$ -Qb͚5x7dֲ IDATh4SNaݺuhmmՒn743//3n2ʕ+tH/^/+^Iǡ( 222Q\fʹU ""F 2AnT(p80 E" EqT3!C#==U0t֧{?s Da2Wu< sPbP dz * B21v Őux. >̦%""""0c;w@#;;㵵AUU_ըVuJwATTT*#]\\ Yy,Z$!;N!jO%"&3=ϟ}7⮯ NbF|V壾:$$"N)B0󑓓7|6l. deeرcV`QVV?ZRE<ǡC2m|χf,_Ga01,˸qrssG"+_ rss$M=TUE,ӪC;v /_}6yX,HUU笱[UUqB!(48i`Xt: A˙ IBЬw7zza0n:&4=$@De :t47B Q TE 1)x" A&3&ay_Y)KDDDDD4F#?1ob08r<6^^^O {E<"bDQw}sŋЀZbAw]ر ,QWW^z w[o^EQ p9tvv//`6rJزe bN:2DDD"~زe (Ξ=5' |{֭[qqqXnݬT,NUUAHQvgp```@K~EqV af5---{.Ο?h4|D4{@D: 2T U2Pe(!Ƞm2è$3 "Ug׉~z\.t:]k[lfë?xgqE8NCw܉L|H$~zB6 999c^lw\۸z*Ο?rG?*0$eff^qYnݺ1lhoo/KNҥKo} K.K/7|OcѢEڶHN""LQUᅬx<?p:;;~6d&D"H$EQ`Rn:GKPUudYF4dӉ۷ѣsjkkqF&4sWe#Cyma#+c0_r|\@'X'"&+UU( E$IeaXPzl}XB}uC v f H2C]LKfp(YW_>kw:P>ǮޚɺG%t&"" SUUo I҄s\ cRѪ" $pZ,hnn0 ¬TX,ʚծ&```UUU=HKK^NK1ہ9QPPHSG<o0#ubb4&>ޔ2#Cyu1tF2@LcBw$2 Ui` $F1 *a4P8[?? fBd"""""""""WA _ ~`ZuVڵ No[oZ-1x)fڍsaVu:, BAU kHIf:vڵ GA{{;._D"&rSLf "zsHQyK2+8Iz0nJ`~ȐHDzЋFCPZYuq[ m7zu_Y8?*iTU$ItB{9r HOOdEx<EQ`6g-l6# Tꚍ&dYd֭[ 7n܀`$"7&3=m~}[X` ~?AAN 6~hD@ņՅqWW| BM2۾V '1t!/ώHtVK,""""""""""G?BKKZEEzQw^В'ğٟJ UUS iaTWw3mxxsra޽xى .@$lܸ&i"ј@D􈲘o{^Z8:<*tA9:l}%8kpX]`/X[.#.*wC b _Ww^.&""ehooOymp8c_VV\$={v,ZeJfEjeNfömpA|>ܸqf6lӸ(8~r=Aނٟ͒m7znI#={ADDDDDPBII DለfNH$ bQfkĂ\\$Vƽ|>D"dBffGDD#2#.y"( $IsdY`z I MB qgTQ\t GZZ-[rgO~/8׉h|+W׿u?~---PU7oĝ;wdɒqeY'|=;f5d 3mk3٬<1EQЀÇ#ncΝ(**hlLf "z%8$IB".AJ(e,.*(tH( T7iөW?_(X¬bYR* A$BCYaFOB8f8NoƖGDDDDDDDDD'ݎo|(++!??o} tt^umڲ29,ˬĚLjK$P:nƗ=VE&UROǑ۷p^T TLf "zIp8p8x<͋a,Y A/f08dY{,y<׎ P!*|wD"-ڊfc߾}<$""""""""Lnyi477clhooDž Fqf% )yh40$IN%n̶:;v h6 ۶mâE$"?&3=TU,ːe$Oxx"CUhQ`E |z,A\MH$e *CQefl_XQvT0KQDDDDDDDDDD#"VXÁ@ um&Ι|}ʕp8 0 0Fzp\3|PEcV555i iiiضmx<!"G t00L)Ć**$3qAZuSNx5kॗ^¡C}vb1D]]6੧§~xA<nΝ;pY& DDdê>G}= 'X|9֯_sΡp8(**¦M`2pYܹsHXh֯_?j;|>@nn.կe%v9j(x" ٌl_~?Bam}C,XM6j9xqyܺu W)}\~ؼy%I¥K`9Nww7N:/}K3};XvqNx***UUUc6/BQTWWO{|DD4?^+Vк6{.!In7/";;?<X5 O&Z0LDgg'ӧ(B"dJIhI fE"bΝ;ٵCm""ݎKdJ/]T{x^k_ڴHB!;x< Ԅ]v|J˸~:n߾H$ dee󡶶MMM71*a2q^` ^?n@<GOOτ( I<ǃh4:Ne@z. K.Œ%Kf!Ӄx<>4^d׫uC8ߏ7ob G'"G_2vՊX, v$]M#! .L<^/t:DQԒ14eQXXL&2=d@DDZ^^`4q5|VOrlܸQK.F8p:::p1i***PZZ:g# /i ""l6v=a(BUU8D"Ȳ UUQ\\<}UUt:z0ӕz=222$a$y>sbFDD4͞x≔V6M+c 6es:ظq#rӡXhQJ`ڵbhiinݚR%l6kGTzRʸS""""zIh4X,6*Iv6XUUE<G4E"Nl C,3D"IRoXL[aɸgrd ҥKݻEQ f3֬Y-[mmm)eY[x<UUSYQ^q& mE"a÷yr9Ç^ɲ<…$I0ֶ7+ӌ~& 'ǽ rGn̋}+#t:dddjB񠹹ywԃHv- QD 3Eddd0ِ+3#cެ,Xrx|T%JJJ`C}Mxr rJ_nO)V"""""` [lѺ#կ~M6 OF08ɲ+Wxf=.\Ǐ>7n xbx<>}@,#??9st (..FMMMZ;whV6l@QQDQĝ;wpAHÁx ,^MMMBزe ؈p8z8{,`X`6*TTTV+#''===D"0Xv-8jkkF'xBƣ /^͛WZ"͛7qIDQF`ѢEmmmOo~S{Ο?$ XV&\@UUB!!@`0`00 :sҽ=@DD5|s&p!:thf^?5}ѣCQTTT`ѣGq-\rԸ8r.]ŋ#H)wաO<l6pqdgg@eeedB?>r ԩS8r/h>7oFMM ~?N8+W*a˖-PUO{njbݺup8Zř3gSO!-- Dͨb ''N,ȑ#͛Յ#GvCHAk.t:㨨={ ]SNa޽ZlX~=v;$IܵkV\^Ȳ[j 'oݻwCӡ'NLyUUՅ۷b'N@NNΤ!^={qIX,-Ydp-_|OSC:u x{ܺu ǎÓO>\CXf TUq)۷oϜ9H${`0 nkwnݺE/\۷ g\2 ya2~DQܾ}]]]ɁhԒ?YH$Ӄ@ }&w11SF#a6gdDc2 q:XbŸ'{nk\DDDDs\Xx1* 3VW\Uhhh@YYVelɒ%Gww7 둖ժScժUZ{v2338N' nݺ˗kZdv'}uu5ZZZֆnm^PYY>HKKX|9RrAף`[n`@ffVbhHC/֖rJ\v -Z G$jEfffqF"nL&Ȳ ͖2ҥKYΝC8D؈իWk3ԄQDmWUU---$IBcc#JKKSm~bǎvZ~=ޮ%3˗kL˗/ǡC꨻Xݍ۷kixUT^^˗/T#"϶dWPYYY0C4E(B0^j^OIfHvFd^%4^b:2 y͈G""q$OGV8ŪEj㚬}v H.>+W IDATF#bؘ }}}p\)w ,Ipm.zp)v;l6v<2l\|YzpN\b͛,H$)F^WUDB`4EQ(vgc(lds]_f29AQm7oDWW,Z7| A9\< ;/jLiEQLI@ 0*YFmz}J†^Gvv="4Z2ut@p ~Ȳ`0$" xNGW çO~?͆DQHP(4{8]h(Z+2LW @l6nTu"",&3nFQǺX.ZTUU{k׸bXEQlEfXfM0n@Ji^EDDDD4W ph]tvvjM&ԄK";;DdUUa0000MSXXׯ-hL===E$7PPP`(١%%%]]]ի Up:Zcx[[oAcc#brrrcǎ~uuuD4Ů]XzL֔F 3[,磥K,Ѷq"bzzzIեM*100r (w ]]]x'F-`07oDAAn70`KApUl۶ (ݻ|dƣ*088rdffBeaӦME$AEȲ χŋk2$ w|`4> ɤͦ%a6fxrC2ID41oߎƍhnnB H :tp/l\.qx^B!Q^PP&X`v}}* q͕\TWWӸpv_\UEYP1l6t:~i x<())Ayy9q)?^s֭) X G`@"c=]7 {.߯-sݺuTVVxWn"eeѢE8D[IR744󡰰PwW_^G"UPTT4j(bǁ`X 6l?3g`4!IRy?$(**nƍqEkX,bزe n7*++qBAe""(X,Z&Y5j:ZixUUD'@  " l ""\<8y$zzzӃ ^+V1KKKs=Zܾ}}}}jBuuuʏ۷kwy<^ha…)UTT@$t۶m^ǚ5kAL&8Ni'|>!"vPQQۍh4tt:^Z^FZZZJ\yyyظq# f3nwJw;wԺ~PU6-Kŋ###`FժmݺuT4ZXj.\U5X|y8cn߭[VE;wDVVhĮ]8v100ۍ^k<:@ii)UU\$|DQp1hf֕|""VU^axWXDL`?"zfb1Ȳ x A(0 E}V ftuHD|EDDDDDDD4?Ι:"G٭[K,AII ْL~gk94DQ6s ͵*XzYD?""""""""x;=t(//lFAA~.C#Vhyuls #/""""""" DDill,̄ (--|>qDDDDDDDDDDDD4IDDUUQWW(--(CC$ܾ}<ά,444`tbN5tl^/>ȲvA E㏏H$>V\\{uu5҂~t:cݺu~>R{{;n߾ χx< ݎB,Zhn7&3d`L|k׮Q~<|{ܼyS{UUfCaa!.]ׯ;v ƝMeu ( l6PTTtil__r;=\ W}}=mۆqtף hmmEccv.,,s+ƔuH-r&+HOOsf!77wFbP]]]BcϿg_xwsN|K_8 :u "n===HX,(((@kk+8⣏>B(B<(P @Eܽ{F1q1 kC"<D" jN|hooGcc#6n܈QMt9q}>_#b1|>X,i288χ>iii@<bE[[}v;wF$ wEss3q,^xe HYEKK ej8m6y wFZZZS#I6 4\V8ƩS҂x<I*|>ܹ:,])I׿hllD4Ֆ?÷ٳgЀX,(EP˗/馲L2dsMu?ǏsԴu(ĸct3^GWW\rukSOuf:\n|%ӎ߷oc5M(ӧ٩/E֡Wg"dݽ{??1yn:?0~ĉcw\gTVV;dBxIZDDDDDD4=xu*Pyyy)w ŋ}}}znpO$i6m H$P(3Ag,/~زe .\ Og2rPPPłx<χZ~8q999rja"( .]Lv hkkkA磠n ʕ+8~8rrrFi.I>x<8lڴ . ŋÇ/~qȲrn8ND"8y$>MjOTff&y _޽8FQ{,2<.k"++ >nBoo/]Ie˖1{ (Á˗f!1Ou?*|hooXbapΝQsn*d?/39K~BiQZZ UxtS]D">/1|n߾`yM3:vϙ|477?k7oBQvTTTb :HC6 k׮$Izvzzzp9_~RͥoͰZwݺu7*IEddddDDDDFe-AYUU A LE:z~VGD-Lf ",hhhDŋqQȲ '3twwBE޽CkTU8*=nr(x!"F#t:AXp!o# aT9.g&&gNN((((hiiA?x `0hCNN~mܾ}WNիWݍt<3ZZl_Gww7jkkjժqܷo4z*aImp\)p_vM駟ŋqI444c6GQ]WUEQ&twTs`(Y(gAVVz=DQextSo&yYd˗/l6#Vf "F}}=TU(cvWHte@ee% 1k +3=Ft:\.:;;Gm~ >0ԏdLOO`@"i@ ҥKGU,Ir8(--ժ%++KKwo?A 5T~^fx3H?0׃qg&y|r|a}@@;wת 'O:( ڰ~\v zVž={P^^A+w oB_ۧlIpehjjBzz:q$;{Ŷmp۷;v0TIȑ#8p^/,Y={Z|CDDD4FP$du2YQ$ b1DQq([f&y&.0N'V넯d""z(DQ_zJfp:ضmN< ׋3gҥKX,Eaa!tt2ntuu##@e#cd.viE{5$9N__7Q,Ig'O$s>l6~8A `AKQGL~>p?Փnd?/s9Ko?zML[~>櫩wz|L/|k]Qs+ZիcK&)w-= mۆX,ٳ~˗cz8^z%Ө}Y>( /{0Q?9<oߎ|׾5LLDDDA~qhgsHtBUUa  !u(\n` F IDAT興nSW\1.&*݂---شiӄ?EQĒ%KPYYVtvv===DKK cL8z( 2A0Ү\.Nltu<<τә'}Ep\&t&Nts=hztn~fl=?_m>fzft>w5>_&2W>vhEΠ(S1W)ݚ TAQQyG^7Mu]hjjᅬ۷*>Xubxg={1^kk+y1=~{No"""}h ۋQPPqQ<A "%5򷿦iE<GYYhn`[t3AD .,X?/_Ç1<OީS^`ǎx饗F']e6vttt$z*裏&Y__ᅬ`0\z5 3 P~B$L9 //6  {rF144" Ia0yzP,Yi_t)9MҒQ00t'4 PVVwC__0o޼ӧ҂ax^ڵ n{܅. Iea5Lz*.]ºuR Z4\"VhS.[T?WvڬϿrϔl|̥Lr; (-a f$I)[YcAPWW)Ev=m.l KYuuunA`ctt=$~yy9O!CeF;NTTTXlF G7Y"9,p`…o0\|ywms38ߕj\'zT%“~4˗/>Ll|ƅgϢk<N@v ~deSߟk ~\p===9QA4#hʬ+d+g޼ybhkkK;^ee%???y??f-s -#BӴ2l6***`ۍlm3A4 O)uxWJ`""4MŋuuuNT&#c.&HۋW^yMMMqgb__> `dY!]kqㇱ~'d0[oD"oqpDJp8`@W^[or}Lw=QenD"k8~82:u*'ΧާKElڴ 6 طoN>>aȑ#xw!2V^pwnLw;$ 7o0׿5^j''N$=馻Lu(ظq#$IJ؎z{{D044&;j7[S^.`vϗ2̥Lw}7{rF[o瞢(ŋo 4cѢENȲ EQڊ`ΝFYt'5M3Xj_D__,ף?vkv~ ǃ<8N890LDDDC4DQA<:N|>#A䚢(Lp("f"},3ADDsZOOz|ɒ%[h|hllĹs``Ōu]QQ:=ʰ{n1 ""if/# ?`i}e۝wi9{,8oܺA: 0ZUU\.#Ux&1olE-Bii)Ν;>#Fmm-VXy -۹fÚ5kP]]gchhPEEEXp!-Z馳Lu(ƶzittt  5WXZb*))I\K,Ғqϔ~̅gM-_/ k*A@UUكWEEEE\ls\XbQ&e˖&a]w݅{3=رcGwҥKطo?3}IpB>}zF ضmJKKw^ >,}]TTTm>裨܌zٟ/|EO<.]w}.\(X`֬Y3~c4 xp0AϢ(p8!;CP(4^;vfCKK ۶m3|t%MM/xjZk=!dExe4\2c$'4w [zQYnbE>oRȲ AeX ,_i˕vzEQEQL1FF%If3$Iig2}y}< I0<< MPTT`_l(((H:^@ڨL`U6$ N3ii<OҋvS]難!c''S_4D"#.+űL?UUMXvmSNd/SnScM! ~>"???|̦]d{bTUMX.}٢~?ש~zM+Idޗ`0'|3z ә믃 "$IB~~&> *++gOD0 6 """ۊ p\INJDDDDDs^1AQ)Dr>+={6(gF <(//~03,vN l~a``B#a&nwa( Ν;C vBYYٌ& 3QqӹPT Qr6 ^("c`` gD"(F0L28N8Μڵk8t(|>ك 0Ih~7݀(O?44.ܸqIלּr {=%X ?#S8{,TUM:N<Ǐ~i]QU*Ν;76f9 //(/сX,)Ȳ QrICg dYFAAz!TUUhl9 Eil5"\FxvR""""9$!O YӃi'zfM088SNA$qhJ]%%%4@===Pv=IEEEư٦*ri4-+} 9DDD+ f!"Xp!l] l6$I2>Yq|(,,DEEŌϟ K[A e826ϵEEE]"M`Vl2SU|3vrV ;`֭$x"dlܸyyyƎS~?w^<?>`ڵXvѣ(//ƍsnye @EhD"Ȳ~(;cUUEww7_Q!IR33vJiR"y܎ ܌́ a {[[{""o&nܸۍ'|2DDDDD7M4#ax<`0UUt:x 4M0dY0M  IҸhP/}zQrFQXXh#2BdYNɓظq#롪*EΝ;؈#G0n7"pB|v;eׁA8,p8zF_TUE(22A,C(B?<qW}2j~?Rjdd(u$F4B!DQ3)2kfp8h4 EQp8xK+UU  !Cn#8T3#χx$V^/b``ոr Nn݊r9sƸӃUVaɒ% mnڴ .;wgϞE<Ohs޼y4 /"jjj>vlܸ-Jzax<ضm`Gb``i˗/h,wpDp!CQ\.m 許nW\;鶪o]]]FɐGy8}4}(x8N\|¼y( :::} ܹsqz!7DWWADEEQ]]nTUűc|n׮]Çxl2c***k.@SS!vD"bΝ:8x ͛D<o<4 .\@OO1N[[=UUUؿ?8zp1|A{{;z-hA^[n |2PSS>)wyxꩧ IᰑK.@4[o'N돈h=p`޼yp:Fv:::nv=!,ˈD"Eww7 DQn7z wK(m-e2mo&b̐9mmm`~DDEׯ'> ٳ%& IDATPQQݎTUUa```WªUv0 w k׮^x"ѦҥKJ \~7J,^x?Exp:C,,˃,˸~:PRRÁ t@d(۱zjncѢE׍l X%K  UU!1<;wB$%\Ņ pC4nԠuuu(//0AE8Nx^ttt˖-oW_}(BUUȲ7x###X~}|ԩS(++C~~>zzzֆgPUUeH()p8D%zFFLttt֭PYYx<3g`˖-E ~:jkk*Μ9CUU&;Tndd$!//.˨n٠*.]H$UVx.\M "b1n0ぢ(nh]eJzP톪~#R= "n`$`L @SM'~dg}UUU'a8pbFpӏƝQz~\v W\mPRRbL3|.˗/A VCCCvEAUU1< b`` !eU4ECCF!24M3,Z[[*VX1㷿QV?r:::p8@DDDD3p`Ν8r~np`۶m7o +VqEu];e8q'Nဪؾ};***sN>|?akjji&8pl6Qp"cp8E=xb466 , (++C(Gii)<Olؼy3}]KF*+W;h{ xt:p}ʕx_uuuXn݄mnذ 8w\B fhnnw1.tbϞ=8r~p0tw w0v᥺wqܴexa-+pu?1Roq\v p/F^^v܉'?傪Ї>B[Gcp8rXr]kͶaDD7* !TӊiL{Oo_L2>L2k} ^#DQL~E$՟? ,#CUմiOi8^z% @EYeeex<r ._l㏣x-2^~e֭Cqq14MC?1::J}'ah###PŘ>iFiiq^Q0<

HW_}^\z84::Bc9UUE @4fCAAluz( 6`s9Nn@UU@>T~~>DQ(B<2/))!""~o@5pfN00<nz{{VWW nF(f $Я%yI<Hf'42oZn sLdM!``} ?sOu"w)rGAII*555p8{l雚 g=,//Gee%~_ϟիE[wPüY$i\t%""ost ɞL2B3!]fiRED_җ555KD438N:MӰn:TVVrm6^/˲'OBUU}=reeeXlE7_`qWOKK˸{zzt:3N tQȲ5k` %Iq'tGHUUl6#=rfvDDDDD2EQpMMMWm">{ݻaс6DQTTTۋf\23i .  M؉YKHk [͚!a*$6Ud2Ny>a怆iÆ 677ӂ ͨ!aҥKSf>޹c^O%Z[[ F޾v;-[ǏҥK{ڸtTUŝw9qzzz0<< Xxq\555(** ݖb*q ͆q wߝPv088-[̢ADDDSs{Dt&#dϴD]}|s 4 x477 D4 Qv/rʠh4 `Dq ~l +ViISry c:t8z(N< ۍy桦 ,`f""""-HիW'f k׮ `ǎ """""I0!w!t&0Xeaŋ=~իKDsxEQ4@"^G\CUWXXZ\~.]2nܸ`0rO_z0.(Xd *++T=== ZZZPTT;vKDDDDDDDDDDD40&[j"R335c ! 6}}s(k&hDDSPPBI 1~غube:E+V҂-[@$\padUUU`04Xݎbx^,Y,#gϞEgg'^u6Emm-IǻqF>gϢkJXt)4MåKpUDQ,Zn{ MEnMƕo'N@̗fya}o#LW.$f~n.;!`ϓc ҉'"ַO:҆  = K2 -K㡿NFUUq*idYȔ(='יIvkd }sbqECk~.YƵ%a,ɖy.ٷw"""""yL#]>dYϭǐEO-rMĚCQDQDQ̟?GDDDDt 62Jddgv{kF01_ >`` L!k 1ClfL̐>Biwqt6mdzfhHvBK;T'Ot b.HDDDDDL33ޗO'Z^TdPMm<~"""""""Yu3F B&Rj:,% |HؐgmDFqhL':d 4qsa ||Rk2&25fsNDDDDD4S O9n@A DDDDDDD4kn`$U`tMX_ۚ(>4It="""""tL~2^Y1H<#"""""""q fHn&3t&4X۰*$ x9ì)Hb=6ԟ[*/RDDDDDDD4n`Tjb2&Аted0oKܮw̕NDDDDD4d33Ct֠@v """"E,д(B$b.*rp3dS63j# H3:kCt@DDDDDDDDDDD9( BdY34H"`0Cve"kt$&3q!Yd" 7^׋ CzCe߿{Eoo/lق/| (((0\.WNh9`X󻖈(n`6`LdXs0B A 8ɲ/euҽODDDDDDD)MW_}TUUd^L8<. $Angaeى'|=F!IRVlO:x'q}eu~DDD3E4B9ȠyO IDATbbp:"[&  ?ـLǷc 0,u n """""ʭJZi)D7%M{ի'Ò%KF܌'7ؽ{wVo>,_S?n`lg+IkW?ie`?U;I7ӃIy:d f~x<2Xp!>뿰k׮Diii3>TU /҄`m۶aŊ())|fB,.LHQAQB!a#A4KJ_ N Dj0CM%;d2P'+T'˦ """""$;Ғ`0כ]`5˅/Q6)2]P.#(A#Cu A;D(PX `n,ADv+3dvlKER ڶ;Qֆ5SGXM,_$~ĉxx'駟F  x7  <8ߏ_W~:ϟݻw8<чx<_?+W ??k׮ŗetww+_ saݺu77կ~5D?~_W^A 㡇Baa!`޽x嗱{n8p/_$DQ{g{3gvUɓ'܌n ())AFFn݊|>łSBUUl߾*֮]'xgϞkUUl6CUUxq]wӟ4B.]Q1}t?`ݺurӉ|;3g`͚5|OHOO<D:::iL&222vHFE#{F{{;$I0 P"''hn`.51X{o4Dk(A %vrX(3Ceeg pfϞt|k_Æ 0{le!Fgl6`LOOǷ-#! ĉz|2\Zl?>lL>}_pp88r䈱d2 ~PYY._~D"8qNAwߍݻwq -V+q)~32] UUaZ>6rssގ@ ~b,E"ttt ## D4,7{0D1 >#ͲndA56DDDDDDDDm݆[7ċ/P(b Gg>baʔ)2ևB!tuu… '4dք@SSLPL>XQf.Y .-- 6 ~#:1uRAu(]!"5]DUUa6}] QPp8 P@^wLIF4hQ;(Rkbw%;Hd`$m%`݈D4ej5&AlF(p_ł b…4 ϟOS|yyyشiNgJ'c NG| St\+W ~/ƈnQ$p8r v\\/((@EE!2~?*++(NOOSNŒ%K( p\z*Eiו=raݺu8{,vid,~!;?>fϞ^z UH@nܹpxWيWmFtʕ+bҥKЀF$Agg'oÁ˗_qM$ݨFww7:;;o>IUUjkk p%\p_GJuaA3 Q{migvÆ޽(ED߭ c`Sbb 5+ u^@DDDDDW93Y9i޽۶mCNNގgyƸ t?o|1cZZZP]]mLo~HKKC8jժV» Y|&MAMPUU_W8t:/|eee#>7W[gEv ׋|+;w.}QWŋ1c H}:DQʕ+[ox衇Ӛ5kp7Aee%rrrЀ|k_Cvvh"O~CHΝ3֫[N(زe 6nܘ(>f}\.8#3VXSQnB>Rqq1PSSZ躎k2C 4H;6m3~Y=[tg؀d?7f݂W橪 UUG%$I={6z)̟?\̘1eee$ p~;~iH "33ӦMC^^zzzx~<,ߢEF8N̛7 rAQEXeeePZ;QVVf|QQ^^ z]܌̟??n ??֭CFF:;; {& Xx1dYFWWӱ~z=Ad|>455vc޼y@-2ZL&q(--E8F8ܹs}bٲep\tww.'""+$9xoC4477 :pHǏw=nioLݐe^wLK_QAncIuL&1'bAAAdYFss3ڊ”UȲ I`X -0:z{{~򓟼 f-}1 't?H%"""""U 3`$%$['&Y R4~eK^X4 I I{xDDDDD"GuOS$f\.Y Lg# &HKKyUkk+EAQQјi.\M`2fۑpwFmm-4M̙3rJx<1p:0ƹf0íeAAP>ߴbM$V)31+'1X \v"qd!a}'n""""""Rf"3Y """"ٳgt xǰzjn\|o?CQ9s< PUV5.XEN~?@QQY}Ν;Ya R4˘h<E F """""""""""Q.\o p8WxX,(..Ɨe[СC8vR2V]6DQ v;4M54MS#Uv;/_˗/O!F`f42;$fbHmFb[5P """""ѓn8d:jjjuV455fϞ>n7oƻ ZI~Xt)~dCUUARVzd24Ql8NX$.\dիh23cPI7, ݏ]64PR---qrssvn?}UUQ]]=cL*4MKi0(Ff) hHeDv;.Ν;C똈/ff]cI,@mEXeJCm.n@DDDDtrpq~?$IJz}KKK MX2kAlTJUFE~]ϟ?c"n )3ЗKP|nȺnDDDDDDDDDDDDI͟?O=-[fLWWW}U(16 O<z꩔5H`2 .SXSUQ5AQTUUѣeYYYXn]JWhhn Cɢ0&v/'favF:ƀ"""""b,3C2""""nʕ+j~tww߱efӟo.Z?0l6[Jl6_$ R0>hn,˨@EE4MCNN6n܈q VfKЀ!1m7v//&2 f`@tBP\K.Ǵiӌ`˗/C}RY!j˲`2+̠i*++q1Y Dح07a8m4!ٺľr ?& Mp>~?N8~'O!Ʊ0͈D")? d2nOy0,8q:=܃g+ocypʗn# !>ȁh܉kע `ҤIΆ(OvL:6 >`'Abf hmm14MC[[4M F0X5 YqQ>|ロ D7[=3C* 7hdcH hiֆODDDDDD#3aH܆6e|DZ`Ȳ7Ķ җr:u ,cFɇT2Lp$ 0::: "DQ hK6-… 8vEAff&֬Y씎F ׌e?PyP#}y5G?){zzP^^2C5/^Dee%z{{1uTu]ֶ,ؿ?|>n>W5]~;|_(BGG 4Mj;,p\(++KK'ODuu5$IBYY>OZp̙3gZDDkԩ:uq裏 IN˗###cT_LJ#H \.N'~?zaG?EQPWWUUa6ˀQծ. z)퟈F 5gYw$mwupF DDDDDDD7]סiW2eʸM4=z3gDAA(**2Hk]d)Z=(**3̙38<E1&BTUEVVn&F9[__ٌɓ'Zىcǎ>|766BQvF;P|=$#d2!# ŋ>}:l6ۨiaX`2`2Rtz`P̝;p\ d 0!FЀ$]OEb`PJPx}BNDDDDDDtE-6/]F[0Cww7TUEQQ222W̙3˃dbڵkGa_}}=.^QO=qAttt`ѢEq'ʕ+;#7l6չ}Ǹ3t"??T2d   6 7ovƚfٳ{}]vz!2Q[[3g^kdu1.!e&ِR4(-- iii)uv#YPH4$k7Hnz710Sɶ'.$x?ٶ:Gg;u]~FQՅH$hfx^8N"33Ӹ0,b~tvv" .kzmmmP===X,HOOscOO~?DQ[{{;, A@WW$իANNEAgg'0222.~?4MC0D[[0v1yd477n]E?v#"l6 ^q`0H]]]$ &?x^cR\utwwn#===i EQQсP(:nL4 I:;;( Ӎs)2ڐ.(b؉*tuufC0DKK L&\.<6n܈;vW hmmlFzz:TUիWkL$Ek=7j"##,˸|2<π0HKKC @8fCFFFsى^fdddcknnA8Foo/|>t]Gss3$IBCCv;a6!I rsՅ^躎4ntww5/_ ˅,444 ##?| l0ͣ5F+"DQDzz:EAGG~?N>ӧv( ff9% & םŊn=W0~*!_ӧڊH{%K0sLݻn:L4 ػw/zzz`6DpB̛7͸x"$I±c0y*** UU!2"rJc˨(P. VDсs碸FUU\.a2pA\z(BQ̙3eee 8r0p`Æ @MM I&(,,Ē%K\`pHYaZqc.]±cx 2N'֯_#I( &pQD"jdE# IDATHOOGmm-*++ٌիW4 N™3gzjpUUU1@ggQnc޼y(++dB o#b`ѢEն===tVX͆v۷$Au4s=(--Ç rpa|>XP;wă>lײxxpU:t$d2AeZ yyy3,x`ݻwr!@4ȲٳgcŰZ4 5558~8A,Eyy9\.׋VB!,[ V555jEvv6"}~UUsiΟ? Hvv6V\WSLAVVv܉5k`ƌ}D"HKKòeːɄH$H$tlڴiԳt&, ,X]]\#m(uuukT4!X4X,;"`0Crh~ jq ?`|r7-㣏>,xG5M̜9]]]hllĦMOׯ}i&nc׮]8~8.]jLq5kdY޽{qY׮].+Wp80i$( -- VB8믿n<`6GT>mWcH+TUfæM`2؈w}>9t^dgg#cǎ8u.] UUՅ{ E~{N>fç>)X,9sGE^^~?8#///9;|! aƍI Æ Yg޽=+"6nǃNX.\8ǁF}݌4XVyp z*vaZa2 hiiA(l622DFFb` bDص$@DDDDDDDtgϞŤI6ኢ+nAYYYFL̙3/^,6 ---6OF$bFȲ:L4 @@vvȢ iB^ ݎ3f@f̙3hnn6% ҥKF@HWWW\MP__ŋ222arŝK.Ae\.\xF XgϞŇ~ 6 ''cի 3fuuuF0 (,,43gjjj؈b~8NX,n3c';qCr܌Zdggvh#2:;;&ђ&ѫn //SLA}}=͛z\.X455M6xNASSJJJl6GCCo3l]] ZX`v؁v#%--x|>dee "D j"==V(/DԄfTD,]ס( 4M(ZF6h C5o ۝p0abdLSn<&""""""̼y`6qi:t'OƢE-'ۋ# VoGQQQ^/$IiBEEE\ 似bpe2y$2BN<˗/}>v; }w8jhN40(FR hpݰlFƅ^Ȳ MӠ( A``hBlI، Y^Bl68zCD KUvh_bCDcI̐lXVϝ 71#1Պ̝;P_o>l޼'|O(qWywtt -- f>N+WDfffm l6#-- ^wygĀ ,f=D^}t!2zzzL x<شiS\?(" p٘u9v8(//7TĶt:|r,[ mmmՊEەȑ#صk6l<tB4tvv;V]LH@ tju%䠳MMM0͐$ OFnnn{ UUJ|n7.\ |>5k$#<f*`2aK lW~)6$""""""1`XsΡ ٳFIhmm(p8En@X-C`ax $IjŜ9s0k,Պѣx뭷̥;wkΜ9eUUU4&x^cժUӧaxj*\.#;;;w͛w8Xn>m۶b ##W#W( `(}zf]x뭷`X ΝYfӸz11Yfbݺuصk<+W555xxpc8t?d2raٲeˋ;===x7 233fy Á'N`ڵX` 4CUUdffZjE$IQ)V՘o]t $)CP+cZq%+""H\B$,C2*04M .?zܚAE1= nlv-ix~Q$S"""""""6UUlq$ gX&i/Z#:Y_Yl 2.$XpS4@;p-X O?__bڵxQ__I&B4tvvbʔ)}2HaD"x<1'>v0X{E8 BEvN&\21Ğdcl&n(^r"5Ec'vĮd9ݨ0|);OH,_ ]q9455ee JA~MMMz*~?f3&OW9s8cZ( dY62l6Zbpf`hHqA |U$""""""!PWFzzJdBff'pDQD^^^DV^=n, DDD7>NJ_p&3"""""`+'M:bmŏoBO)fyfe 8:4M$ $!??GDDDDtEww7N'f3L&DQ4(YҲz(ԏoZMOOvK\$#dY? 33\;`#xn0 f~-`Ǒh6^""""""""""""""g f=!K0q3$701atM >H`i4  51IDDDDDDD4Mh"~/ cczٳ5MDΆDDDDDDDDDDDDDD4!13؛Yb%4LM `p3֍!d(nc """"""4m@DDDDtic04DDDDDDD79]Q__? """"a SD#sfiH8n //oADDDDt aݐ0nƠd tu""""""b!ݰh3q*A j%s\OXߍh܈=_- `A DDDDDDDDDDDDDDtK1hbqcf5Mnl@DDDDDDDDDDDDDD73<@DDDDDDDDDDDDDD73ܜ@DDDDDDDDDDDDDD7,3 n """"""""""""" 7 Mu EQiZJ(l6d2o"[  DDDDDDDDDDDtÐe`;wsTu/>O *z{{hii_ر;w4~|sa"2$e===7=D tzefF"""""""ߐ7p:I$ ?Ѐ'HOOؽ{7n݊nov؁p8lLfՊ(++~ nz,5`@QH>C!"i0pQ0&WWW{7oNȑ#8y$222t@mmmD"ݖ,غu+?Gy˖-CNN4MC{{;jkk1mڴQu_l6>ObIDDD,Pe1p8 Q\nQ"ٯҡ8n6 ؙ݄Fh"( """"""#ؾ};/_u]]]xWQXX8*Aٲe q\jGUUwCUUQhN,bEY1TADDDDD4>1e݈ߏ^z }رc8<}Ql߾=,ef3u HbII:4MC$Ȳ M`6a,҂]va͚5Xdɐ&/t]G8F$1Pl6ci鄪al!2dYFWWv;Pt:E$Hdmن4H$IiAfjM8hi,br{kBh\1t@uXL," ~-Btt9J lxh+ga1(eqFl۶ +Vpm_둟t߫W_{gH$"|Ś5k`ZΝ;8x "f̘ ^{5EVVE;k.?@ظq#yxޤcŋo;. ?,#mۆx<̝;?8>O@E455ᩧ²e҂ (b|K_¢E "}Qٌ۷l6qFb׮]p\Cu9sqqȲӧ{>8`SN_Ʊc Ӊ5k'EԄ?w)A fJmX^VeZ2l~[eT\ Rd±6/pLr:F=(eL&>OСCسgxӃM6~~?( ~p`޽/~ٌu"##< qI NL&455ax 9^{ fwhɓ'z쪪b۶mxWvZ|_FSSoߎwۿ{x۶mÏ~#g?Ô)S__ӉnGVVR|_@aa!ٳַYf6f3vڅ_P>hlkIt],.㱥i3 o&U, eYrm=* ᵣ~4t}Ues, jjj\P]]L6Fdggil===|2:;; EQvkkk;`.\@GG6lwXj8@QTT6xb͝;7.:::py_>.SߏgyI0g˿ pBL>I=hU7z>19M?}*ϴ, LLn\n{hև2ƩI": """""""+**ªU}vkbҤIIUU]`6xb,B亦iػw/^{5H ۍ>%ᅬ%KjmWWDQLڞE0?c!DQpAD"X,>^/dY,I۳G8p/K5kv4.""( :::iGv>׎Y(y C$r/"t+^:ԃbJÐ$ V#}a0fc=ۿfó> Œt[ٌ,dddgEQQQ222P__nP444/^'|iii~Xlكe˖aڵn+˲Q&"Vmm- fMp8A$ p^o\ƆD'O?~xw())ʕ+tDDD~p8Yf{ް7ح}gftd* +hGAy<3}}Gщ'pac& dhnFԩSSO'Dqqqۙf}B& ]с`0Zu֡ ZZZ Iqȑ 2n7A@8F}}=</K/K.wq_wvFŒ,7l0` 1^bW6?曆9/=)iwCiI~I !}ےLL`a,ovi$>sy&x$li8g{?\Y Bʕ+Oh  /w}W'Gu Paaei*2|Z~mۦ?T(R}}K֭KMrӣp8,˲{侀SXLZt,ʺZE;wTKKΝ;۷+ȑ#WOO~E" ;_2X%2^6;m%*Γ^"9j PPP 0ܬ-[#p a>gvŊ?_W׾J9uvv{ѝw)IZv=Sڽ{JJJӣaӊ+wߕVggNo[?ӟT>d ֦~Zt/;oNXLO֟^ReM6oD!~jhh#<{NyyyjjjRyy>[rz#*))IU8}n&-^x} C^W_}bΞ=ZoMW_}No__kܹ2 Cڸqt:5g_6mڔ su &X`0+Vh֬Yٳgni***ҢETRRX, f#//Oׯܹsb}??UW]JiN7pVXB\.UTThÆ ,4HD,K/*:* EQ(*G>Qv_Q[c^\(9e2Mݾȫ?i|/񀺃=v<7/gaÑ7U5{Ts|ϹY~LqeY HDHD=(z]v{BPjY^^t:קAA L*G#Ѓ/ukgo,Y)YF\hX:xI kl*sz!?iΝ:rjkku\@@~_^WCv=h3\iZ[[w|MRGL{XiLa(' 4k,\T\wn&y^577wyb1ISHHSt )̼h8솮j'"on ;NYFa^gΜѫ;+L~Lh4z=S$|>}+_ƍSV賟Զw+3g',S^* ss*,˔?W{_>rri͚5dt9Wggg`d0444;^~efu jwݺ;SC~a=#9sg 1r1 4XsJ\.Y`,Sᘩ`yqt:j*-YDv]z5a}aL+]]]].++ؾzP4MLh\0 Z٩P(sM{`4gΜE܄ $ɺP!] ?ݐ|2ꭷR{{$N+VNaL+ .׿umذA6[尣GᢶhT[lIӗe9$sz v̩e5q?aǐ!G;/ :u;"˦rZ!hǎڷo wuA` 2di%n6I$F˛~Ay<l6x<:dbLӔiF,K.뢋J,R,L]H.K$r\,KhTip|!ippH${𤋮L҇X,F9rDv]^WNSpX ,K+WܹsGU²oSQQQnvZnJJJt:ܬcǎiƍ*((Ta(ɰEBoo8%KN6M~_T]]=bLnR}|sN#[zϟ/4z'].@;j'H &vP8#/QaCh,Ƕ5uawZ9\/_ vOxE+CӒԆ &)iw',̰~8qBVRmmm*`Yyܹ35h֪6Syyy*++KUjT~~JKKxoAA@ X,JHΞ=+˲T^^Z6ZӣÇk֬Y`q88պӏ^taȲ0aʰ;F%{/nZfv-'n*afido aV!ͦ69NUTTM]]]rݪ莹nKf̘ԺH$V|>As\;vL*,,iPww UQQ1P(VB!婢"5H$֦EzI:s #ۭ*y<ӧO+Iv]UUUי3gT]]EQ͙3'U]iHCc4Ғ*\XX8q}}*..V8֩STVV`05k֨XvRUUU~~v͘1CEEEc'/FI ,PGGN>`0{On[:{t:pB555 y$)ӼyH$بP(FX'OT(Ǖe{{{ڪx<2B!PHDǏ… H$CuuujoonWyyyx<'O*up8gϪfŔ̙3lgڪH$|UVVjmmUoo<]TVV.A婺Zeܹs |5k֨rǽ7+1Įޱ40dla7KuG6|'lW=9\?3SUŮTA㮱QǎSAAl6jjjܜZyF;r:J$ úUUU@ ۷G.KHD===?~;wmݦB:uJ{ni Z`VZ%ͦڵKHD.KhT7|jkkFg9sFGPHNSv[}) Sii6l ˥vʲ,l60 m۶MgVWW<f͚%˥F8p@v]x\pX˖-Ӓ%K.B!Hw/'˲p8t뭷@HD֊+TTT`0m۶)rGPHw*߿_={ѨݫӧO(Hh֬Y/֦۷kSKKtYy<Y~Y\.-X@W0nWoooy<EQ+a:N>"Y+̙3*((PEEEa&ڵKdFקkצΝ+4Ԥ@ g*ZR8^fS8$m޼Ybڽ{֮]:~oovޭ;3f0MSB,ҪUt5d;ԤzKDBNSHD6lPYYvڥvnAy<mذ!:ٵkNy{{{UQQ!!/IŋrJ 0C^]P1aȒMal FuzwhWCYZXUa7MK1_{9nti,v Քe*0rv;P~~~^xuvvjxkʕ:sϟe˖IR.*_^Ca(kΝl2cǎ_WeeE{{{uvmꪫ$_,O^(S[[Y*讻Ѷm0 g￯ӧO;PII,R,n\KR]]B:7<Ǐkƍ sn:\Թ;u,X0hEEEZf^}U[N3fH-߹s֯_Fo\zl6/f՚5koWYYYj]AA6mڤ_Çu- y>,Keiݺu*--U<׮]k׮A$b1M7ݔ b$>nu]*((֭[g[.੪Қ5kd>K馛Rӱ444hϞ=;wnsȭuKjN޽[x\>OHDx\e)4!/ Z'ͦx<>gf>Ӆ4lW4ڵku1+kٺS4MbAMN!Ix\*..eYU]]݈c,e{F#ȲA*s=RLҏrt:.jdƠ'YP(t߅|D"h? BKx߯T[З7X jZ M)aZ2/݆!Ce2lvIj$3.LȲLE".,Yl!ݦBrkݵ~W3 ]0KERqqnVXqQ ={vVnםw)ͦn=3F|2MSZ|yX~_a*Cd+ EEEQ H9:;;hѢoԪUѡg}VZxqB$TiiNj%6fΜ)Rkkk* 0YwyGZvJKKS?ONSyyy:u԰H$$ÑUprTRQQQn͟?_eeeϴo>afu.r%+ *Hfo֞={/fi֬YÖ-/..֢Et544hڵYwz7s)///cxDmmm:zv̙+W. B 2MSNSk׮՞={/pjx}vs`K /H((zL1npnM~>,?>OriCřmdY^z%[nt!߲,q9Ci] |߰&f2=_~^Ǡ7$ӕugMM$J_x$.<̴ 3=)kΔ 6-T02]\4p"Hw w5}]2ic >S?<߮wyG;vPAAdzf͚Q}0ԟ{lwfeYjnn4EH?3e{^:3h.fL&Gv]`Px|ª4$vS}NZ2ҷ@BiZddYTQQ1/@477ѣ1cb{=-]T5(8N*H(OHݞ~&0p)((Ђ &9t9y<YF555-%0 CC`'h`R!fMtai7P f a0_|a0f a0f`zaM>g}t@zbDwDw30X`Y&e.90 Nt7)+wLIœl6Dw4=L/S>A+Ӕ` ;>ai9`i30q1^c n0ӤDSڔk ؛Of`U 4 #cpE0M3$n6apD":}`:b"̐5 L?F,<:}I[C"f`r4PaeXi#}0$aA#|{$ŕ{P3}ϴ,s롖Mʐc;FŒddX˭!^|?\!scz91{  ˲dfNmvNv{N `D" -|Sp7!d0ꌗ* L>a]O~30& ˲HLl!10vGHb#G_1pLLJ ci&Xc=1R)fkkk䩧zƲr~O˲֦1Wp8 2HדX8>x{,*%2ьL:y]߻33xNN_n˰Ζ³mz{gϞ$gSeYiJ$D"D"ctwwS$ҟ1 Cyyyъ+TTT4&kDBַ٩~*,,E"{Z~aq566ѣQee.]SQ$Q__,k]***},pnf0%1}Yھ}w7mI ɩ'̴Gz5E3}TbYɲݘ` i% qp#T!5@7Oe7ۘN_BEEE1cFjv+_zs%'OGՉ'TPP ˥D"p8,ϧo۪3e) N i;]0ɜ?x`M71i0S@BFڲpC?VrI=mWvϽO|{Re#G?~\v頱QO<Zp|>b:::ݭ&9&ÉFx<9`YѨѨ,i0fntv6@d_۷o_+1 5\6f^6 L m?L!VlHGկmkko|x< GO"NSyyy$׫u֩U=ڮ0C0C=D"G}TϘ1czĊF݅% %q 3Xj#  "``n^^v__|]RTO!1p ip)CSFLp302M)1uz! C |IOTTT|0 b̔HrH$6EQn *-߯*\E"͞=[ UVV.9Ne,ޮ^Ix,)nDK$jkkS0nrIә3g/} P"DvU\\qEJ$'O|U4Dw}R?iۑ +Tަ?'x5k>x\gRۧAS'm&߯2]TWW'Iڲe~i˿Զ?OР$+z'u׫^ϟӪUtk̙wֿĉy橫KfW_}U?Ξ=+ǣ˗sTp8gyFotyiɒ%υi:t萼^VX?W_}U*--ղe}N\s$СC}cڲed=Cַ%'ۭ}) i֬Y{}LGb(c=[]3fЍ7ިۿMU8}o٣F>U__'|RR__<nf}+_X>uwwarni*H()OXlPa<+5$T$QQQNl_ۺusԧH I CzA:ܠa^dWh <ӝ[ޒ$$/29Nb1 5o<(PgΜ?q}eYzFgM7ݤH${L zt5رc/'xB_xp8z^6lЧ?in͜9S}}}zG4gg?Sqq~E#KdˠiR0T"L;'Y!ffUqq~*Ԑ<=D8V<WqqJNW0dUH0 ӲP<C?k?N$58Đ9S!Sl S*0 L~*< 5DO0vl>C}%%%㎒Ky<eY>lY#c,Y9.GGGN:{L=ؠu:x$OcXBÇ%I@@~L￯zJeeeݻW---z%IH$tAd"P??Zptر1ۧǪ֙3gh%I;vP<ב#G믧>wcc?CGQ0s=Yfѣ:zLT__mmmjllS$с$Iota͘1C۶mYJ8SMx<1 ]q>PAA%? * 2v39hTPHn;6rgp1 #`0oر7 E%ǠBz! 7(> ?5m ӗ/72,ϴ6`-ó}kˌ (2XT0xO:h2C0C Uui+Z2UdȦ]PSN |N5ZCr>!d iˆ^"!p˲5!30y +I2bH)?lSA^gzh4)0SPSMT!Sہ&%UlDzAc7 Uq!S!% -d|J~O'1Tu6 7 E , P0Cr d!0\!j %L@""m6l3 N 4=D2)!^``*TpL3Pa+S!Ù L~Cjl J[>pʉ4p6.g0\)t1Txai'Z>e+40@n;xF miˌ,g[}!1r Xˋ 3* e0pPT3Ʉ! 7F| 3 \7\`@CSJd:6 l@ CUkpȴ]gB:0@LduC BtLDH&S0aY>LGB+XVg>}-CU!p!t& UA}a6C7#0}"(m70|>@LnpdSYPPAn}6ҧʔ2H &kU!,dZ~J-C֏bM6҃ Ӷ* vae#j;TN wBc XˋTev4vcd~$d`":48~B ޏgf4N |=VAoC-Τ3'\ƺ:CaZipKT!ҫ+dSa4FZ7~Dܻ3pi#pElB Tih c=||N &F õI"G[%"#h RC gtL dhipc6ҥ^.8m`O6SMM 4L[IDATΐ.}H{`:nzgS]a4Al6%f`bMTaT5* #m\T~z$XR ˆb಑eeݥ#m- ` 3dZ>p}1FqKmdsS:|fM 4LchH_M!VmFZ7 ci._J@!vK1) Lh]6J0Y'2ff0Di7Ho7Բф |Oʹc6۾2)SKeњaDw 2^LGs0ڋimLm Dr/ghcPLW %d6: 1d4sj`lpMv "L ĀU.*4).oLgRya}\ʔj$`2UH ?Ss >1$Q.CSx~g3^id`#0aid`:{\ ]Ab $Wr*!$^&> +D u!AlLdϸa mLS! 080SbHb + cL~Wl! L 0\0q1d`Hb 0)P7`l^%%h0/\& `l c0{Lr00W^` XVD#4DIENDB`extension-manager-0.3.0/data/screenshot-combined.svg000066400000000000000000014633261421751161400225440ustar00rootroot00000000000000 extension-manager-0.3.0/data/screenshot-installed-dark.png000066400000000000000000004413241421751161400236400ustar00rootroot00000000000000PNG  IHDR47sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|=K& .q ZZRZ[h}mOź㱊]GRQUXEYDdɞ?&3̞ٷ|/5K"~]䒙#`y AT]!D^' S;ABF ?+#~x@#F1(vE8p|K`Ećp@&7ls^,df#,_<7E @nl³s@y8£.Awt'%.3/2N=>* OA ʍbxCC1'^`1p !Tvm|H Ucm@@|B3W2+_BmjqLEP+3q%&_|O#J|yL(q=);v.8-(2bR?2hA.𣏕BczB5@Kg8l]3B4 LJ]/.Sf lJM.LJɪ\I"J^Lɜ'1@H!^2^\I JN6L#y-Px|slj&*q 3=eyTE nQngf+]Af!&-VMklq"_!\^P3OB'S6\͗s` rPMB.uDlT~f< 8f2$#Ke3TJXld WP.b S 6 5s)L?> 39w*@(Si]ϡ&fPekntWM&d&s}^7 YɄMwLEafemC~>34ٖYD.af235&#M2Ae:LWkjf ATB 3d^KpţBh!6 5NL=Ʉ 2 Mǎ% -mdUiOdZf*x$Dpt@TcfbD+SmdcR G 5 W[ͦ3TζG-]bK%LgI "pduf:T2cj%*/p3:S96ҾTif!Tᇙ'93ƥc>hu\W 5Xw=̌7tLuͮ)`2P3sd&3fw-pΫ*tjhvCǐJJlDI Y^-d 6sjz72쮡P>MWHUf"Afsiƻ"#-VXTkf2Ԥlu )׭fff+uU]_kµ*㩠LWY,&f7V 3 21f"՝x%F&.&RPֳiLTLGOUfAfJX]"bzX!b`34f$,bj6P2qTF'Z +ܴı7CE CCD5 ) O#l[tM6Ȍuh! T/0`3 5LAw 4 3c/ڸvW-s@oDɌUmIYSlL]Ueƪ4"|-u)ٖP,Zm'}Co"df.[h|Ό'̌tdXhhOx@I)r8OHfWeQE%*D̮*9i+Ȍvhw_1DXum)P*!T!%fS-Ȍb&R)iD簌Xn%RJI<B\ 3#/03Ҳ%¶h!fWe-x@U@3p~ͮ*: 5m?P@3AhBuf&Hn-Rf"c%"o)B61mh3jvocX8{j1}9ofafhXAfv$P Bt~%E =O`P3]g 47^(߫33fFk1OUfv{vT̯cRˠ+V5GRgb5ctIfsTHՙZͦfFk1+KrfTSS3gϞ3q6`RnXlQ/# 4x\r}ֶzϞ=ϯ__] % 6}bM%L,UiTIT3ƌfF\F[kO"wz9 v)4hnkk{/ %[b3P3RP艱.t}GZJ3M4?W&3S 3#UleF}9:hΦirC.Kn[GYt? M ÐbjfnfS`Ȗ۷ojӔZMK)xM߲=Ԍ6Og2&UYF:g:3 3#O6̴I*Sg{qOeeߎjiiQ{{ҡDeeeu{gŊ?Ё6-\J>Ԍ''T&f1,D -hg-:fÇ?ꗾֲmmmjiip7RgTVV&!ۊvݿ^f͋sP30f=ZU&Uyšd@.x3 ?BX_L$$˘1c{jn566EO5@zy<rff+**UUUU׿%oZ$*n4 Ќ<(cCl~Fжaf$3$Upw2vUE6M_۷[lyYގB@fȺe#LWUfP޿(@3ՙ7ՙZ 3#l3kb$577)=ȂvInWIIPӪP3Z- ]`-*| $i,)#<a]*ՙɶ5osE0:f̘|MMMjii~CiD%%%zu;94#lWS&zD*?*LͮϓOՙ]͗mLKC}{$v]_+//|ǎ><Iv>b,* U@R3h-i}fK$Y~!ylnn{ܬVIRga7)8 /Z7xHBg)LLMOOڒ64 <.!7nvvQn[v9nܸy(8 ³Юx4۰zy.>ބ?sFk[lZ%Y 2VΛ PHVvl6 f\.:::&۝!膚TYY!Cذaÿ>L"o+Z#vHߥ9.39"9( L̝ tA"sm:$Y$=jUeez%)N dar:ի*++eZs=,L{{$IYE4C|b)2Dr)%(@)@3BgHmh+6ml TVVv$yy*--U^TRRTRR^z4C 4H3XI@-0h&/v+By2CoGmd 0ǒ!rt"AEENgM!I?Q} Xt[ TBuD?r"B #n6s΍i[~VIFiiiDu&( %@s:Tj*_љy3͑r#~mF6¹GY)qtJb(8TXAoDBdɅ|W\3Jdϙ[y4}_F,r]KFd9 2̀f.5O2KR0CN'dXQ,GD􅛾೴Tk[["t:}E[T/ ES c2YZ4OX O*1V E:2Yj0!32qC>СJ4MV9Ko6jhtkW.}]kiņtAaxMˤܫD~X,r:P26M6MjmmUsss^B3Hehf%mbhEhU>Lf%&b6ֺO$@0zu\=z( wurM=4C*U4aȁꕏ⿚'MW4!Y!0@枍ik?NSNgRJKKUZZf577gIUfJXI6t$Lh&>m]LE2`&YJB2CSVpt85>SW?l]Q!|+n~EJBlNS%%%jllO6iNXUqL٭CR*◭`V+(BAd 3!0TM_|n)鯚1t^Z"d4)mCp8ٳgVLͦ={țl$|%l&ũC||Ll7|@AWf04Mǻ9z+M CJtΨ{m4MY]#ˀq6L=z{衲\]>V.oDNc78rY">dspL]5ZgVgm(gVՒ/Pu52z89eee*//0T^^P3PmݺU+WkիWx.똹f604M~vz;&UtO_)CɐLK$+?x>#/Lry<escFZ̐ے7s( %usƺh-h'I}8h%\^zEܧJUUU>|."544_gy6dat-Fisf;Ln?Ae=nܫٸ<͖6Cn[.+ȗ$0Len;9v̙EiѢE3gl6>GS~D 3#O~=32eJG@q1'K͙F}.>2'T?Ft`>O2̔gD$TTTzQoN͒@ R}i!cJ6Z;c,Q~YBK$-IQ"@~p:BJfϞo*++SYY &ݮ> C20 C^z> ߣG͘1CC^ ؟p0afM_9VICzFnrː!Qqr=4$t#cq±7߃oY\ ?{(ԏw <.96mڴuӧO… s0zէOI҆ tW$=ϟs:S>3 C7|N;m*))i;wVX!I7n?0 >Kշo_  ˠIat-լٹh޹YDsg֏*_]Q},Og˛$iʕYbćNZ[[s9<\#+ǥP|CI9Y-\sf̘_+nݺ(TW\qEXޮO%%%3g-[e˖/[Lo&M~Xl~ڲe瞴oԙgFnڪ;vhΝM6mJ۵H7c\!0dGԄ!eX CtʈJ-7-Ґӥ< 4[!>NSFdoJGXjx@ p8ԯ_?Wiii:u̙/ԅ^ VSO׿U4~xw} _seOCCѣu駟~;Y<# XGXuliʔL.3WE{J;VT#\ ]X,wSiil#_뤓N %%% 3 IDAT0}v͞=[֭SUU f-_<˗IÆ Suu֭[K/4(4 C^{mPf6} 7ܐkeP!0czhh=Ch1=$9f4)Byh qy[f\0~x͛7O{'6Β%K"߹s.{矯ׯs:@uuuQ|5ky7MرCagϞ%\#F93um) Yr=E4=i#ըvڈeʐa\+ꅹViMKwܩ wߍȑ#uW=<}p8ҒԱOw'"s&fҧO͛7/m>v]_|q֮wgWcc~m޼YK.e]>̿b~me,9zq ΔR4pN%sϲAGzXbfKNO>=>cǎ-dlBh;s XYh/T[h7U2qN8qz_niiӃoVM>]׋/JϺ>YgS:~ѣ$o8zr7گV/ؘҵvR:G l+doPqGMMM5kV#u굏0,i8hHaH!jj5O8p a=XJ.@3 .@7BXYc@+//׼y4jԨe=zjkku7F oYNg7C0`FwyG;wLj'OW_f tĉugo@ujȐ7نCjԩz'CE<~*s aÆedHN;O{nI yw;.&jȐ!:_w.;_BFs:A}\~ͳTRRJs1:3t7뭷 ڧ.(;vlX9x` :4hI''|2hݨQa$A,X6vá 8PǏ믿#M7ݤ:*hc=V~Ww}I10#?5}m[Mih9̶vaJ=4Mo=՚/ kZufC 3~a=S)];ձA!0Ɯ鎁&Ms 'SN9%f߾}_:,lkkSIIݻw3MSn;n[Rx͛7G 3Cy䑺꫃Z{ 8Z _hҥAqۨ,~}z)@h/hV 4(qv[nr={ '_ׂ :ׯ~{=mө{?O={V\4#mرaN4)lɓ*Vkyaaf]viݺuA 8P?JKK:::vV̙ 6襗^8"8vS^1*4VVIM2M y+4-e}Q:B$?󵟍t~X>O>;ݬֲe_~a{4s.䆶Ngr` (>3;:obGӿ,D444D|MΝ;s0#S)`ThPZ8ݻO0 }Oyo[ij…i;oB+C|wtI+۶mUWWTLbѨQ4rHԨO>իJJJcۅjAˏ>hWc aQغuGy6lW_}^znݻly7oNuaoU>XgqfϞ-;Ǘbgv}BO+V-{󇒁'v{'jvrwe]qG릛n}ޗ-[^x!lsxE;w[AUi ln/*v3Bt*=_yu5yd]wuAF1 C?Oeϧz;'_~hYA@,Y@gyhv5ަMVA:묳tYg_}5J?Oկ_ϑ,ߜyZ rJ >ܿ\[[ŋ P@kϞ=aC7)7LT}}?Y?OBP1Jn۷o>uuuǧo߾:Cyf;vZ+_ȑ9Nׯ_nB?tyӯ~+t#0H$mnǏD gkhtYUo74vo0tHDim 4Nk6(r\aND 7gCw-'Z!/|M\R&MRmmF=z3c m߾]?pR8ꨣt-[655gm۶%s mUZ~vhջwT!}^{5]tESN9E~{kUWWG=B!h}yyO.4x˴g}6( ۯfJW_}U;v*++o!4i&mذ?ɓo>sbfVί/_iӦ餓NҨQ38C{$']xwȒρXV[vwhP[vw-{F~p)9e]s5aa ѡ:(LWfiPw,ZQ<6uԌW^y3I/ŋe?pz:sL4)@fмskҤIe4e˖-Awf[zoq7o~|3fЌ3nohhڢ5Sr?[qƠ1cD 4=ؠHW_}nvرAE]]?М2eJP5kDQLw}wPv9h9V\.nM퍖^Κ5+6m|UvM2%s"<O|2|Wf=:VJ|֭ Z={vωfe].Zej]]رc*hmm 3 \Cu[o rvh}饗Ƭ$F~ci'c5l'rbcxbqA-b _ҵS{7B6Ew̧B>qZdIFvvaꪫjʕڶmeX4qD 8пo` VI/:,ڴi*++;رC555ȏ~#{jjjҀ~˱߿_}x[ 4Hzhbm_v,Yu=O}x?^YYZmݺU~wyf0۷o_}zǴi&q7}@v=:s^;vХ^zKuuujmmՔ)St|II^}UiƌjhhP~z'3rʂ~ZرcrOZo>C}k_m9k…OԿ]x:@'N{iSOU{{G\cݰa,) j߾}v.Ǝ={JVLԮ]TVV Iʲ@vׯ~+ꫯkȍqoWΝO?T5|p?>U^^5k֨AGu.߿i[tygo,o?߿nᆈW;AVҨQֿaiA֭[I'qiܸqu---r8a^|ŠnM'Nպdvء2UVVJ^xMHgԼSy4 !ZzFM="#핏aI2]Mx,X%o3̳> &h ׿zz4yd?蠃4qD]UW]JAUv?^V5hzKuWFly֦x@s̑jz?]K.սfzGpB-_\Ç׷@sϕ(}{"tР /KZ'+/ˠPon&ٳ'M4#[)Ќ&݄ V,ZH- Zw^}յ^ɓ'T*I'xb@1XO,z$SiJG-ny.qQ}t˷z]f@b{/"B3UTTD슓Z[[ؘs?;QG/o9n.Gm]->fm] _S @03:4M=_&}z'?т 3肹\!N0,/^Yfޗ0,2?[a!Nl]!+VΝ;JL9^{Mof͚/XqРzH-y6/1df~Viv~3eLGoa0,2 <{AYZZZ"ljjRKKK"E_v<+/ԌT)C2Hߗ,ponֹw367;on Tdns\ ZZZr~vf [^ y6/mduz8 dJ,2$2% 7v4s@]r _Q|]VWl 3m2L<%sJL&ۭ lى\.3pyUB 4~̥:fCr=oi@-Y:LSGPpJC/تciڰI ?UV@[,d^f˥={ttfZjn\1@Pp=媛+d93 5%6 dQPk-azu6^e%6M8FqpjPU+lrxCvS .mݮO뛵곽zjiwy͓kskXdnZ"Ͽ鼬ũYr:*--M[[[,Ǔh {ս/ d=,ÑJHӐEE2LC[2lsMCxii7%CR+ᛝHיִd2 d02Z'Ϻ]^`xy<566YC#V.Kmmmjkk#DNh @2͂v)sjw9h!3sl 5Yh4$#y <lJ9M$hd{CL է2?YsW񨥥E---X,ZZ2 Z0MSivvC9M%ݞaHټLڼLet,&H>DPS2gZ$t"y:+7 ӻwQgɾ!% (e_D,V\b((EDp*UP j[ hAZ@E"ž}f?Œ%s+syf9J;5 6ܡ6!NGWfVl'vltv_rJb0dٜ@UBY$PhUP^^^KpNtTLq)2h&Eח9#YB+RBMǀvI&cYSAi 2/w 4\)lYKe?H:Os$D5ʼn]hPrrr2xFe?_@Rde-+KLL& j*77W!!!.rsseAd2[mXv@s%M tRK2 f)ժ/ nx"ݙ^0L% [Q[* ^C-4Tvvv %7ӓP@uE ̔fSTTTKPŋ 3h YRYP]hвH @nn.]0 hVΟ?/ŢP+((_J`ە<d*& ժ@JdtPME 4&"`X @ah0,ME ]*G%I75k t Dth0,:4w$T":4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @ahP>sݻW{Շ~+8kHKK H pw߭͛7kͺ{]P!]TEIIIڰaszժUzG&55U˗/wNϝ;WJEh/  ȑ#տ5mTaaaڷoݫE)--Un]IRu!~:t6mSNiÆ >}zg_pA]vbѝwީQF׮]j*-]}yC ,(^x񖓓T۷z+))IQQQ:r:kjJvرcգGիWOڷo-[&9p4}t~?X&LpY'""Bի'IZ5k&O\lO_>$:tH})u}ѭު6m(..NYYY矵qF-\P/^,u@O\4 Z͟?_QQQ. K.Zn]/SRR/UV.[n֭[[n_W͞=͘1C;vtkذa*BttyuU.˺v]W^?~l6[}5p@=s(EjѢQFiܸq:zWS_wǎ/+119/<<\:tP*fw͜9S]tQÆ %I7xwﮍ7:י8q3̔ٳg맟~5qԩSu7 QllRSS5dOr@Ő`Ӽy}ɟ闞ݻwӠA{.aL^^EƍӠAʬw 3l֭Z,$)o߾ۊZ%jj-߿0Z3g,w=oz[l~%̬H_zQVZ㏻|O?$wys?͟?_SS;""" 3JLLԂ J2@F&@=~״d={VEkV֭NaӦMSxx$)33SSLњ5k뮻N/ԩ#Izꩧn:$/u%''k~|e;yV\۷+::Z#GTJJsqlaO>7osIX[ZZ6oެG/Б#G5jSNUF IR.]ԫW/_/'bqNܹSo=viJNN[@ח$%''k.'?8vdŋ5xr޽G}TlŖ}7eʔRLŢ23XXgXF\ %+uYFFFe8ϒ{ Vk+22e[E]tQΝuUWnݺ]BBB5Hr^|=M6uYVQ~ׯ8նiii_'߾}^z%kS@;"%/qM6Lh£q0u MB.'w:"""\ϟ?|g=ź9R˖- /q'Ν;W .x`Z\.]hݺuz7u}k׮j֬bcc:x;u(/6 ꫯ{Gw)M_\N>]z'NpqPO:@B&xܹsZ/ݛ6m*Tfg[L|6mڤW^ԩS!CѣzWu+hΝe^ʛSmڴ… , ~wm69rD.]g}{)ǻhUn]߿VN:7~x}h1S/2~z111.㾖2ST?ժ;vM6 ۴tR0`t{IҥKtRL&%''k5j~_۷Ow.ln O?(+g)IÇ׾}|]CvЁfllf͚Ul~v4f̘r?.Oe_?[ܼJ 4[u׮]^TハNP0,xi͚5.ӏ?:tP⺣FR׮]^vvޭӧ+--9ׯwf̘1]:sK.LǗ]:tO5xw^c ѠAgE1c$IٺxsC=bxr<|{vRU˼ ?e'|E@G ^zw\AXfM+[ѣdOrgZK/yZd(**JdXԯ_?5iĹn۷kh}ׯ=;kԨ!C} O*6rHgj{;v<((HSNUtt$aÆ%vUx8ϦMYfn/x[ΥK^zZb6mhذaZdI_zQhx;tPӧwYftJO\?e۷;֭+VoW6m4`;.h۶m~xWU@ǐK.֢ETS٬AfO ԳgOuY;wvRHH˽$iʕ.3fo~I*H3gvN}81bU]&I}Ξ=1c/w/jj֬Y;ws^sϹU7yܹN:%IjԨ|Wze۵l2 :T &'S2[ͦzJ˗/w'11QӧO/q =^T@G&`ͺ뮻\:Js);V׿- /%o~e޹stm>d2nݺ.Cٳ>_>?`sι̋)wyG_~z&f?^~iΝ;W999i٬Zjwn-x]V̙3eZ|b_vvHhʔ)ޥ3sO׏oYvڥ\oƍ[t|mݺU}7߬^z)55UjՒnי3gcmܸQ+Vp եKKɊWڵu%;vLwŋKѣճgOzj۶^yNǵi&}g *߁Էo_?^^{5jgj޽.dl=zq i&-X@ݻL&SuA 2D'NTjjBBBk.gHWrS۷oرcաCɓ/h"8p@W_}n&L6m8_u,>>^iӦnl.J^~n^h^Jx^~6EmIT:$-w?Qrah0,M- IDATE 4&"`X @ah0,ME 4&"`X @ah0,ME 4&"`X @av0&P4vLBN(),&p*&TL٬ +((HfYf3ffS~~򔟟/&z6h@)df(,,L%,?> RXX$j*;;[lP4J 2Ý@cXHegg+++`* &Q0n+""B 0eff*33S&"?)fZ,EGG3,@5P]pAVP*9@u3vBBBTF L+bQ5jxx"##]*Yttf f&C PddBCC~@PAAAtI0hjhu$@Q~&xfI"""dX\ b(""Bү%C (tfRͿ~ O&x@GT+2܋PXXX(C@ѽ{w͚5eϟ׉'tqYFׯf HfY]vUզM)44TO֡C_hڵ:sLaX{*33B_ճgOuY 6T\\$ɓ:y~YFp,***JyyyS&T111QrrwǏ]*Ajj&M-[[D];v-Zzؽa/:uꤋ/jU^ugbQZZx =zeQk֬т 4}tjJ{VFFFC{nkѢE;wi~ݿլYSsUBB2223_{X,|F~ ##Ԭ2bHZJMRXm)4FTc+圗OIHKs[*nd t`xP̛7O~Ժu*h=0ȑ#;v.]Tرc5|%''kذaڰakֵdɒ*3iӔ/N8Q6SpppK0*Yj)%u^'EӗC).JNl~Ypp1$T^zsf:dff_vN{VuA_$iΜ9n,KK0 CI]fJ7~GyD6MSN՚5kJ]788X:t$^Z6)7z衇c ×^<=\?6/6 t%)} 2󺷌ԍm"ջUD1)V Rfave헴q˯b3lrw#5'M|F3<<\TNiΜ9ڽ{,RSS5a5h@3f~;egg;馛d6yfIɓ~_'$$DS t9o,ow9!!!2e߶L&ϟQW|| aÆ^zz'?ԬYqTOӪ[nfJIIQffx m۶MǎSll4inAߠA!/mZ¡']%<,fiܹڵk߯:uxt~x/׫nGDJW+h9 5J#*9!ا*B[EhzsϏ($SLLiK҉o|z-@-[jҥzgiӦJ}{{w.۸q[-[LIII;ox:GV t)}JOOw.;r֯_\C Q߾}rJg1tPeff:رCϟ}ݧ.]())IG-s?rNrC*%%E.\]wE|i߿{_O=L&fϞe˖]lly^^goGÇl HUA]v5 }ktYCrBm %W2bH,-+T%7<Æ Sn\={=ܣŋj*>>^3gTbbb;C`p… z%Im۶u4rHI_Wfi!6 ߻-]E J]d21s}= < I?OC"SO?f͛no[^MO<ڶmKY;7zx~̬ v]v`ͦ=,s0z>Zn+U;o_<t߾}m۶Ֆ-[cXԤIo&L]vI*?A ɓ'GZs9%KxŸ_N #R瑯C㖴׫?'t*vL0niM1+]bb e`ZsL6>VPjj֭ _~f͚5ݫm۶ꫯzHIC~L2uG&%v)>|Xt뭷xLժ'jƍܹsծ];I-" ڶm[l6&##CsqNϜ9Sfg9}3߿|TU?|^q<IRRoT2̇H0cSסoe=zojjpǔ74=Qx(ӧ+--}8qu6l(qD_7UVTڵ5b-^:yyyR/ϑ#G$t&&&:=N:9ruɓ'k̙cŊ8qt}iQ#_WO+]v4n8Ϟ=9spe$tP@0sHX5&Ѕ1:z&Ol=kf2Z:Uy?,IpႾJi`th@5Pu1;u$yw9;}QZח#Hruz!Iڼy߶wΊl2]xQ4j(%&&jiժU c= rs7>_,Kumb gwhzx t&LPRR;+B큮=.#f6\,ϓԼNKf^z)%%%Х@H :T矻t9.y(~Ituש^z%ǏwLֵ^q6%%%NFF֯_/I9r2dZn\-Xoۻ[gEp႞{9IZjU6M˼ݻw./ǿd2t=hzGF)))j޼:|͚6m֬Y͛;(|^}=~*S[o֤IQF{#VL&-ZH#GT\\x [Zd @WGYd6 h]X1k@]_2m25 TGTgYۚJWҲ5TñM:[ M[$EI2w IJOO/(nwv4:Uݻk֬Yn3g/^BB{=ҕw}Imݦ{̥\ٳׯ_M4O< )#++Ky=î͛3TRXX}]ڵkSᕓy_l6[nN'Nõm63בO>D5jЬYӧyrǏW_U͝Ckz뭷\~of=裊pv|׵d7xCSffxټysT]fiZzs/瑯?/_WouPj׮.kFSNu鮴n_t\M6ER_tgڜCʖms"Ww;(d2%I/Hg4hB p=nO>?#HOOdr^ׅ㻰M6udtQsB"?USE)mKZR)m%)o; cǎرcZv6nXz'OԄ y.yl2رCsZh:u(==]|kZreׁ4f_;wV&MԨQ#kϞ=ڷo֬YS,ۧ;Cs_^ZnrrrjZ|K;|ڼyF-ZiӦX,駟t!YF;}&L F={^o>;Vm۶UձcG+66VΝ/cǎiӦMڸqΝ;粽Qzz{}B])}KLU[ˆ}UDںdlN˴nlIrr_;5MJthrMP˗/'*ӧ=}]+,̬Mf:Δ]a2|),I^[7{ypOM20,PA,Xnݺ؁?XׯeհaCC *6TTЍ`(j gY0ܬڥ@WPf_ IDATpv٥z()4 ? &GڵӢEzjW'|Rfpa\x^Zoڶm뗚+UX@W!KfZ.mkvh$*SPMƍRoذ}nݺu5n8*3И@Wre dA)ګgBM2h~Tvv{_.sВ:@ Rult;Srt9FT~#BLRI9$TBVM283/O\~^?iwG9G0xlu|p"ԩSe.oԨjذafzz2 kN+]U'$̵thڭف-_~2f?֞={X_4?{wey}$!{2@6HBP)YEZnֶV98=Q뱶=jl+""K@bز$dLf$3ٓI^#Ν{}߹%u]=*..|עE|.+..ֳ>ۣBc+V}W>ՔkV@qmW)CɡC0 KԼoĉgܸqZrez;͆KRdܞhVzBp|zsFC筇 a& i0j;&MsL=S ,777xLI9 dqK֞O!0M`lذk8rH?֣>)S(**JW?ֱiڸq`>p.w{Cb}ӡ) 37mD CTp/K[!!!Z|/_~X?яWyW~g^Ѽz ?8q"a& SQuuuﷺZ555AUt06]Psr?V=_ 3 I%{|d999Zt)a& ShjjO?&twgxДw?*'G`]ZS_X~M &0@8zݢr֭Zz^yܮLV^۷Krw JTqUt0h  "ðm%,S/m+q)2NJ]VL6SQkW0ڽvcekd˵M鶯ikﭒ%Y̙Crc@kX״fsU4 Stt*** ;tiV\:3!!A2ҥK~ IR\is2MI L.92vff+SuCvA~y k k KCJ>tkC=hf0 kL$iw9OCR${봣ulU^˫m~m-u|כw0p fYfжZZxnfi_C鼠zs?覛nM7ݤ PfJತc+]VTT7?p[i[cCPW4,iE?[WB;ٺBZaNm)#̔a&4 !*==]'$I3FJOOWtt"##eTYY+//O~tM:Uti1p/~ =#$UVVsU( w]3 tv7+l 5:uViP7ԅZg.gS~Q[[={oG4*99YG@g ҥKX,*..w9G=SRR4w\Hte+$$DJOOرcO}J'N֭[o5\:+ ':t萾 );,Y/ew%plȔ)bLd甖o;ms2!-HH]̶~_@  ͚5K[n 1Hz]@O믿^sΕnׁtQwVXX&OO}SQZZ^uUUUKuuu/B<|)qJ03eJjJbui17O)rU̎KR?{sL*bQS$}v瑷0 iJLLT\\v#Gptk̙QLL;m{~qu;qD*<<\uuuБ#G/I #TBB#ͦz]tIv]QQQJOOŋ݁p+WcYO_bbbtmfy>^˖-f… nݺcѢE5jnݪ秥iժUZhΝ;+WhӦM֬Y:`+//Oeٴ|r%''k޼yڼyskllV=.O֭[ [pF<WSS$g0j*%%%@3gu)檱X56pfo$Z T_\N8;w{wkOIOCwcW8>l[`w^aЃ>(q\I:{rrrhӲ*((8Qt+33S%!!AZv ef/ӧOfS^^6o>z|d۵iӦ)""B%I6mp^{zh"wy?~\~{hZJ6M ,Ї~}[\\l6M>]p﫷ױ? s?x[ҵJqYM+MW霖,A)!wiptڰ*)Z9snӫ%zwWjWF9Ȩ)^f c.*++oYYYYJNNc)++KBsi1b;Lʘ1cr;﫬Lk׮ɓzbӦM0S{IRSS{Teeev}.I555&Iz'!!AӦMSUU~aKYYY";THH֭[/Jqݷnq޻{]{]ONz=IMMUSSJKKFlhΝMMMڲe$u8vmm$)2{7Y ^\w8^tI'Nx_ݮLTKKV/\sn|z7$9[6vU`pl0 vmREEϮ#{>zZ@]w_׵礷Ţ8޺1196Q.::Z:)bhܸqTRRPt^~ٿl6u뭷4M]xQǎӉ':m-k4o<577뭷Zc=GyUZg7ױ9җ p=v~ΕV/llPS]ζ2 pH9ΦiwVI;pbhd;[e^-2`(!!aiwC-Wkj>|zm>wvR]]aBW#IVUR߁>ܚ>@VRBB&LSNuX磧uu?'89-\o 4]{TCOGuY)))0aBnkƍɓowwXX-[&Ţ-[ 9(94#g 4[v_ yҘRmpk$Ԕ Ili-7 ӹs`֝VRŻ|=.0>YOZ~Q}9sFa3gx]an?^ϟrJIMo/v#GzpB-]Tiv}I_/uuuulƍеnVV$)&&=/<<\&Lٳg{ 'ϣ뮻N6MQWee&L_O~ݻ{nEFFjڴi={,YE'O]ho'ecWs0W`SqoLg%ŤII҈X:b#tuk ͬ 5MG JmMwKMGT+5VJ"UC{yfM jj2MS.\r_qF](d׾L}c8WkJJJ$IӦMӁ:$}i%џK]]>CeddhJLLxo999Quurss;Woabxd ulykllړpԓC]i^J4;4 ,[=uٲeÇݭv\eX1TZ`LJZtc;wN ժUiK;UAA.^(vm DFFjŊ ׮]TWWgkaaaZ|z{|9qK5rH-Y_tn߾]qOT}?']$iҤIyMMMzwҢ}K_҃>ٳgkΝpbccsl6֭[s|=}y Oqohʕԭ%99Y)))BhJly:rH-ZHiݞkرz=OJ^Gous0v{y1 pƶA\jM:6C -4 H8Y,eddK_dX$ժ"ܹvϟWVVN]xQ{UyyԩSJv$H _JKKUQQ0%%%)::Z/3gT[[T}sSYYo4Mm޼YVRzzz!4M%%%bڿG ݮ; $4e˖uK;࠷˛mٲE+VPNNƍR555iȑlڰa;}/6mRttƌnM_{ڳuztu8qBsԩSo>w+|UUUiҤI9rJKKUPPK.i޽?~TQQ tzy[~]-k~q}YMI2)rٳgѣڳgbbbPkڶm[H%JHHPhhJJJTUUZ>}Z111Rlljkk~mܸQӦMSEELJUSSnA0UVVS/jv]VBBFZY :z ÐjU||LUI IDATc۷kgْ䵛MI9sBBB{^:~BBBdZ 4uIm޼YӧOWsss{{|j?~\aaa ӨQz>|XgΜ~ 4al6=:=׽׵礧硫nbhر3f?>V]]Ξ=SN… 2+**:;#o糶VgϞUtt޾r: 6(''GW\ɓ'}]\zs^#FPTTl6BBBTZZm۶ȑ#uCCCpB6뼺UrrvvEmgϓ-[hjhhЁ.VU'>$g+k}ous<y4p84AW+_]mkݮGફ-q}N{ܹsP׶_2tw ltLOʡhZ:Y+дxnꚶ*)ZeΜ9;$[i5]6Ua #<:.Ab;PzzΞ= 65kHy1׹sJddO?}kh(++#sڝ;wΓT+:h6|o{i_hWۦ2oz[&گ7E8CІ tYk՚>}nbbbzՅqwbʕ+v \ꞵϕ|\pv`X 4,M@@"4,M@@"4,M@@"4,M@@ wlƎ]%ZhX***w 4,M@@"4,M@@"4,M@@"4,M@@"4,M+jjĈ jv(@hj*22R#Fw)bb(44TjllT]]& @኎wjĈ1bjkkr:}d 22rȇmEGG+22et@\w֯~+/}}:Rxx "##2|Y ,Џc˪U\\/jӦMzwp8BKӦMSjjRSSԤ2h׮]zT\\R9fpj^ttS$Mbcc'jxoߥ KgC)66c~DD┝s֬Y]vR.ñef{wh@HrqbbRSSuwhJNNOSswܡ$?~\o U^^H%%%iرbVU#Fw~7bJMBUUUp_VV<i…Zv+^222ϒ˲Z|P̫\fЈ˔&IqYRL$AvMMhKR9tg0<O|hҥ n.'ChhKAq.&I1HW`{%LHr~\]\_&ο 8f4`innٳg3IJKKjtjw #E\)kp+!n<0ΎH2W:*Kg6:M MF)I*(KTVV&IJNNVrr.^tbw # υms_f٦.m;ߌϑFZ.E*;׊x0,^Xr8ڸqc'꥗^s=u[O<񄪪t-x,{u=??kiҥ?l555iOeYFǎ]wݥ hر2MSO?Y---Yfiʕ1ct8qBoTXXիWG$~흆w/s>=ַ.߫/;h"eddj̙3ڵk~߫VU{,Y>gNҁ?A 'Vd:C̫fDY#8:Li!J*2̙V5*\eN4s}^ͦGirs]*X/}&MB/_'|R~m!G馛<4H{gT]]X^{Z-_\?x ͝;c eddh 6mذA_dZu77N99qK֯_i|=)Sh֬Yzꫯj1c^{5lL6MӦMӊ+öSz̿ukcǎ&4qҵJqY{ڵtsނIQZ6-J7]n" E&(=!DsƇ[h+G163WHI 04h@z7;]~ oj>'I:z6lؠs)11QG3رc***Rrr.-[Lz7$IvءǏ4MM6M_dOh\nF-YgjzAuY?k4fYF_uam߾][lvl~_ȑ#:sl6nV}JIIѷm?6z4j(Ӊ'dZ5uT=cJOO~}eOgLiu+ZV[Fs4qths5H,?YouQ!#6SCiI{t,& A&Mkڹsxg|=q}ytZVVÇ0 z뭒oڲevEEE:r^~eEFFjŊ^n:xQzzΞ=خw:ӥ\-[O999X,1cf̘5kСCzN|FuuuKKKuQUWW_nu|Aw㕤[jzוo~ӭ"u3 >[eǖ$xG{N/m g)5L-iOqЕ[ZhxKlda}C׿=]\\uBwp8ae;vPEE$iɒ%kaigLƍzj}zuر_nӧ{s!0^{==EDD[ƾaKMM^}Uw0\-3A04M9Н蕯{֜z)sl?nw-\t$)77gؕ?Xou{_wx]wLn|O$?goJ\fІV2ztI2qJD=$Qr0D, Av͛d]wuX,r8ZCg\innzk׮E?^YYY:s$bCεkX9ҶmX{/x_SVV{z]#,,qA6fgi=¦g zIpC" =L,.h-a2f<"m}b` ho>-YDJKKSQQK H:ӧkɒ%z$I^{l6Ξ=1٣wyGwq>7>>=})w+N_|LO<$euuf9/a3cTh-2>(_@!!=ݛx!!֭u-[oU~9G};C-t*I}X3f׿uIs 06MZ*zcsc]anW6._ 53(#]7 IRMM٣> =!jر]p]tI6 u-[N4iBCCxb9-;;[؋/>8ec=TEGG+::ZiiigXȹtǰ*WQ:ffW2Q٣BeS3hqbbbxbh|3۷ν5eLpN>-I={RRRsmg~WWW-[H,YnA111ڵkJKK,͘1CK{1c.IRnn{_|/^[o%I;O~j9”10 =úGa{N@K+%\*־Yu7nIge^}$h?IJeZmmr & Cç?ABbcc=BJIPBBL{W*--Տ~#\5Ǐ3f Uss$g{_R=>#iZtaڵZj,YTIs_җt7R۷oɓ'URRi̘1Z`n&Y,駟D3gΔf3\#e\ƅ\YٳG-ronIbF4 ry[~N^\۴nꚶ*)ZeΜ9;$[i1]6UadggO$iB II3bbbbz/~*//}_ti@aɯcL瘔.v=}on{NOdXeXR}ܯ>8q.]֦iw dN;w'!Vu:ml*/Ui۶ޖ:MW˻?1V`/BWyyoݶmۀ".3Lv3e*uښW+S&JՅ.O:~pV9Zh i̙JMMiڴi0DXkYQQo~zu 566I{L%%%3 C˗/N\+9j9mlt66ĺZiԩS^[j.]0Dh ;$xgXZ+l|?VO Caz饗:y7։':ϸqrKKKow @=WѬX\E猆[L>h 4ajwM4継zꩧaYnnnTszmj=Ba& /ٰaqȑG}TSLQTT"#q< IDAT#|+.c+F4q(}\> >:C SH?fnڴ0B_=BBBB|r-_3 C?~Wv0y~xRA-j7ʓ,_2'Zh 11QΟ?_As@+wf  CM VjUp2K2?wY}2qDL4PSS~ouujjj}x+am7~{6/fJj5rrrtRL4Ԥ~ZMMM󽍩Ku}3 l)I~TŁ{ N7ݏZ[B pu3k\80M`8p@O=E֭[zj+*--]YY^y^Z۷ol~WT ⸿膫a EaKJYX^VS2dT*O^6m-3 ֮a{l[~C29#UgwiX1,VB7f""ra"""ɓ'3m4xٸqca&8^#77n&|||j9|l[\Srv M#xRSSٴig1117PlTUU˞={1''M61i${u]AFF3w\x뭷hllt{qƑɱcxw[DDDDDZ8j=J2 Ǵoi`V p714Yav2UA-ϬϾ@iYc eM+MAbp-HEEDEEErr2V( b֬Y=3gH}}}LǓ̐!CPBBBHLLdǎ\yxyyQ^^N]]ǒ%K\AQNNiii$&&bXZH>>>qIU?~ưaÈ@bp]wMUUeeer?N:v?7pTWWsQ ƨQHJJ⣏>"//=}VBB!!!dgg}fȆPYYIqq1QQQ,Xʙ3g\}Z[[III!66k4MjjjbС1#FϪUz\{KǏ')) ___*++%%%umnn.ǎ#??u<==>u^@@444+/SϦ= !Z LWnc_q5'ë=owW?;šEQkSa`sP f*N a8~:ڹs'7ov fΜ9sWzs^KHHެZbڻw/7opN'<< 6o]č7Hxx8ܹJ=Énje޽`SSS '77?-E]]Ceܹ2}t>Cg̘ADDYYYdgg0|f̘AQQQSFF!!!l۶/p-jR_ᆭÇIII!88h߿ƁΏ`$$$h֞cӦMO_u8y$&Mju>~JTT߿ÇcvZN\%zf4c,MAijv[Yk.H8G%|m5kcCTTFM|2FuaMf@kh 2_|{466Ȉ#KrW(g7ntQ555|TUUZĉlڴ hrrrT-9 "<<F[Zn+skYLL 8pUxVTTĎ;2d+h(--u틌$99jW444' 4kjj;;R]]---믿 **ǵ%++˭1Mbݻ4`8 [JBAi욕KHͦ=aQN&??yW7U)W4RpmkLW4U)^XO^+`c_waQ KSV/{X-T)""$v{ O:ENNDFFRRRr˩m C=5xPP}j١C2rHJJJveee5tl UVVbw]|aaaݾ'FFFFPXXتf}6e-=+ KJJ믙4i7taaaq܊pkH Bz\4iX0-`` Li`iӤΆ]Gِ}ќlMGMojx Q-1 èqbVS͊H (Hg:Ǝu]Cr.Occc3zhF 599zwAxx8̞=4)))!''<]a&gΜjCHH\s \sM{y?ooV5!kZTX,ő@XX :ooݿ[l!!!Ç`zPB3 ~/xEC<-mj4lSiaXgӴ9M,M0]f0;BLfAfcTfVT)"""" g8ѴɓN ^ϵ{2zhF 4Gf#??ܮkxgܸq$''ETTW]u~im9ɓ޽Ovj|XMԱ}~~~MO<ɑ#G8pDEE1jԨWUvN:嚚x (""""]ch6W2޿5tjX?i{Mth鸸i3tM;2OW@N[jvFe`@SD< @EEE:PS\\|NBN:vvСPPP*n555lݺ[ǥ^ɓ]#gw߱}^՞VS:s@@@kСC5jvM0pv_~Nee%Fr}^[:WH||Yfb i}EDDDd`jllDf*o^G104 uȹ{vBM焱a`if GiڛM?#5 4]#5 PPSՅU݃L>fG kaV#V+ƍ4M9i[//"ZMz>eng޽1rH1 tU[[͛'22.=8پ};555}QR\'==233/X,;- dȐ!̘1nvLL ~ml' %Vk8u?5kL0ᜅ""""wۜB?w'8^ǚyv*Yl6}. SDDg7""9s渦Ts! ݻwSYYv~cc# }x{{3k֬s#`޽5ѣGS[[Kaaa1bQQQ6LQQx{{3|ьNGJBϹ`̘1} lذ3gΐ}ǢE}#Gk.(p"aٲe7$BCC ԩSTTTuVsno}}=۷ogԩ̙3e˖ǏsV5v;e˖1ydÉo;5yn׳|rӉ"..RƎ_Ή'ޣ{2vX*֯_ߧ """"}fQSSK񈚚C͵s|{v縈f0/jt:khg_[ZkyM_f[2u/ڸ5ii.J#$$;3Ǐozbp7ÇYv fmmFgˮRy~(++t ai7m4 5i޴m6l6[h+-iyk:F;n[zk""r^KJJ 77Õ eSuuu466wޮY__Omm """]@SDD[QQQs=]΀eٺu+vrFpp0VSNq)lBAA6jjkk2dXV,9nfH}}LThykܸqy={gO"""""2`l6M*"""aODDD:ѣU("""""""""2iy<]FhȀ@SDDDDDDDDDDDDD,"""""""""""""2`)K X 4EDDDDDDDDDDDDdR)"""""""""""""MhȀ@SDDDDDDDDDDDDD,"""""""""""""2`)K X 4EDDDDDDDDDDDDdR)"""""""""""""MhȀDD#Gz<]Ƞ"""""""""""""2`iH7z FhȀ@SDDDDDDDDDDDDD,"""""""""""""2`)K X 4EDDDDDDDDDDDDdR)"""""""""""""MhȀ@SDDDDDDDDDDDDD,"""""""""""""2`)K X 4EDDDDDDDDDDDDdR)"""""""""""""MhȀ@SDDDDDDDDDDDDD,"""""""""""""2`)K X 4EDDDDDDDDDDDDdR)"""""""""""""Mݫ뮻x衇X`Ak뤤ꫯ /{^K555,Y￟{5kp̙6u|r*++seΜ95aÆq!O/ν;Yx17x#Gi7x1c+/i7'N`ڵ._鷶\}̟?cHEEdeen:***\OSv;Yn]onMDDDDd^hmZYi_oII~\3ё>{oFQkz?F#؜8~IP)"r3gtߝ`0 bbbO<ɓ'?΁h~1~x'Ndĉ̝;v?֮]ˏcV+^{-oFőXd͚5_{~mn6FܹsYjUΞ=t툈~_ju=z4Gf޼y]~=͍3___vݥkz'\`` =n###d„ );s7ӟ4y'f-(.=]I׸ld}c1aa3~>~!^Ćx15ik|Yyl&̃q/p퟽EDD;""{9/b!… oYv-EEEgϞӧyp5}$~in6z___^z%"""/ yyyXVƏ?Lll,O>$~;uuumY_rUWnyuMaaa(͵kbι{X,K/ˉ'x饗صkO&%%nK/y/K*++keΜ9s믿صOsgΨƞi9Y,yRRRu}9BPP L>7v믿{ zիW= Zxε2Ȝ=ޟ;Ӄݫ9֏cw"q#``&^@@SDsϵ… ¬cǎ}vvONAAA.AOBuu5wqT|w_K̚5_W>FEDDDDtG9;*$9‡3CFYё0\AAiR Llw<`bt""}? ,tv03;;-l>r<}}}]#+duuRSS;/pl9}(رc]#M?HMMkQhL{{udСyOv}YJKK:m6ms&L 22*\85_KyzoC kvfƌ7b/[o-92s0hfivnFyԤ`7MMU'>KMA_mk׮~չ_LL >>>}r}||<ގz:ZKq$%%{NWfvZ@9Jqv^G,YBMM qĈ̛7vG%>>//d ~iչ/14iF^^wun+nvڵn#&4|ل.]T+d{#""r.(snO<'sԩ9tv"55L^z%.r9|0ٽ~pҼ9r$wy'7p6^{[ 6 pLjF3ly^EEYYY̜9ٳgͫaÆ:Wϧ5k?|mDomPǴR0zTCEEK.g?yG}9o\r/%v~uf.6#a7ygC`z.@SDDz޴9Z>ԣV=zjRSS\sZ5kTWWd>?cgwbt%22G{ȑ#ǨkU\3gr5SOn9%ms\G}~}>k۩\wj2b;wɴi%""""2`_ {nhf<1=]wR\?8j&85剈^IIIxFF>]ho߹sk{]/|'˘1cknR+ozjpsy?]}l޼ձ[R\\?ӦM#88)SPSS[.ʕ+]Ӹ.\[i^p7r='6OW5n3 3#u<~}(ޘ4},""""k?afΜ oStWsM7qWO> 33+lBiiiWuu5_غu+/rFUTTaN.6ϻ曹Khhho[iɜ={6XV>V9>q͏NGZ,6 P"{ ݵf&زe ?яzܞȀ!c=]EZN5k63uaMv]8M1u""k>(O>$'N$441cp=saYYY@HYY{g$''8MMM__Z}vVsիWY-]z5mOOr饗ʄ /s^ƕW^ɭ 9r.7|?ӧ1 {+V#pUWBrr2'Ofeݺu$''8rIII\vex{{Iv 4 7dܹ`חK.');r{1xǙ:ujLDDDDd@J f:LӴ3@&zV&2Q`LmDDD^ՑIfff>O=T__]]C=/~ .2nVnVv;Ofذasoaw3bN<ƍs'׿&::Eh"syYdI픗qFf̘All,999۷{g?+۸R35u x+;@m<<#\tE7m4iEEz[[[O~^~e>oNJ1lt&4 ]W^䩪:uו*L1<*9NDDd S)""{n~_q]w1i$%//+V<8pxYf1uT̙3۷֭[_ݧzj/^ ~HCCCײYp! .d5 ؾ};ob f̘8ֲ̹~>?&55 '(('NPZZʑ#GشiYYY8qucx7k5Rj*6o]wŨQHLLj~:ĺuϻ|<碋.geѢEѦ"""""J4OW >.]16S 4EDd2<]@7EaѵF;:ֲ]Knj6^kZn7ܶ6 S~PVVƭH{LtzxG}[nlx~ޓy뭷뮻4JNDDDDD2 ~k3n_0sGZ{ + 1ek/>8ZB5}~IH!>m0 pt6m؁ִmo6}oJ-_״<ֵmsk-h"""4}t<0SDDDDD~bt&&Ca&8j дof`ܐ0Rf=3͈zf@SDD `c}O馐14`ڙ邺lr?vG2%_> 5#R3~՝,v""MnHKK#::4Yn|=]AgCKGљN;f&ܾ?q!rlFی?wL%""MnΦՈ B1s1ݬ M9u!rMLrTc {VL/j ׎5ֱZ:8fr^rW綵VL: 2-x-ibqn{*Al OWйf#21M ;e/`X0,^܂a _ GLⶂ5OstOd<̲2 p="=nڴi`j[Ӷil+ml|WZ\X[׶uviݶ<s.4BSDDDDDDDDDM4m`th6ݑ!S)"""""""""V l>H4maSm?L[g ꦮ 3ED^.@DDDDDDDDD. 'o/ųkl _4 1cԱܧm 5gf\yEDDDDDDDDPw|`@GSU4;H͢Fu=SH/bPsܼG6φƷ,O*""爦S] zeӞ.ZZSBY5,V#3s<0SD<@SDDDDDDDDDω<]AuV8BHkj:iYM?ycF[a}*^rՀ}j*9)sԖy.3\a;s(95n7>qnL XZDDDDDDDDDG@Ca`b#4jQqckw 3 61Q˱pњ""?U+:}&ows5ub6|4 jʣ5 f)@(U{=]E 3`0,6dazm1W``T|O%""c 4EDDDDDDDD}thگKŵUA-k.YaX:O%""+ 4ED䂶xb/^| =G(rtFu43z֞Y},M5G6< bbbصk}Y2e 'O˗Brr2 >___jjj8q0p9ÇOll,a&uuuTVVR\\Lnn.'Ot""""""g.+*:g`:GhM#5<_ xbeGj0ޮ)gw""raP)"2\r%l߾N:t(_~y?Ty\{\tE}'OfOHH qFVڷHOO'** ZN8Ayy9^^^ȑ#2e yyydeeQWWEDDDDDHӕt9т ,V0`"bBë>)SPVVҥK40ӧ裏'00ϐH9qUp ӱ>ð6^+ϼ'VʞXqgdz5f~.l )gED;v,۶mksP̒ h0 .b jRVV4M׹餥˺uln 11e˖Q\\oX8q"DDDP__ϱcغu+ǏW9r$555|=n=韖RRRHNN&<<___),,d׮]]5..SWWDze˨t4}tl6Wvɓ#00v#>|8k֬ngOjj*6mfXx1b͚5B@@+_˗/s3e#GyfN>浽y1|p|||8~8l۶ͭ{~FbܹTUU[o=n82339v.v~r'ן9O5t%gcZY7M40 + 8!* IDAT`,0TI\wNgVg_quS4ͬŊbA cټy3fbm?W\q^^^:t(s%663gP^^/#Gdȑ5իWBo4j. 2xLn"""ѣ 6QFG}D^^^"..Gv9$''c۩ԩSreQXXi_Occ#+Wt 629lHHł Z9sG߿bcc9x1k,F͙3ghllUP5~x2dJHHر+///˩#440Xdbz>>>qIWGƏOtt4TUUQYYzDVZEYY5=}oח(HNNfժUFv%%%t>3W[dddߥ'yMEDDDDc_:M{C<]M3ε4,4 pƾj|aOWG1zx,h~v5[D-֦0 ô4 -T)""MA(//+1cưuVߟK.b>LhhhmdddKnn.ׯw̝;#F0m4>cWPM||<n5 BNN3fAVVٮ111̟?3fPTTĩSSL~~>ׯ0nϪ-,X{U@nnnzCBBضm_~%-Zjuä* ۛUVqALbi{{yfo͛پ} '55;wPYYѣG>|8qqqNJJjwGHT^^βe˨ܬYg̙;n;gΝl޼u]pp0s!<<իW]דO"55sa 33֮]ɓ'?""""ػvD@T2,3M[YyJcs:g{N۷rҲu}4n8*++KWvg*u6 ~#v}(,uM ZyH F`6H*Iud2Ifd6ԤǕъÙ+NcmA^CTcEӿʐP6S2,RD Ml5fW|#Xkut>@8Tf K+OY[VV{*!!A111jΝ;KfeqС:th?GЭiu뫾cy\M1cƨYfήh4V=i{}|*9S. @NMVm_Muqq~Wũm۶֠SNv3nTi%_CϷqFuAKcUU֤!Y;+~"K1]lVzrsSΞ 4e6Hd2Tg\^lx.dk`"ĔRZQyl +\J4 ;p233;*>>^;Uie "T RRR8@HRuܹsU>.շo_+88tT}2}k]l6kݺuJJJRHHbccjۙL&LjlJY{hiFR!٣8Y͸8+T[mL& ԪUjvD]kc?!kۆZBMPqL$TQiL*7 5+v>Wi 6}~Ry6[.MRPi9M&4qׯرc(IڰaTXV !-,k2,eee]vZj~Z<֭[va8zN> 2Dwq?j-ZiiiZj#F(??n0]XX)Y-vڵY.I111@2___ȑ#V۹ÇUPP`vWQQQJMMRkV:U~狉QGtu6fugׇRP3(F |C%撇O㝿P2a`lfPjMsV)дVjJ|8G?&!W)Se6#\z4;x;֭[СC:~9q$)!!A۷oVM㣸8=?SN֠tRE(I]vnjsMg0LZfFh 8Pk׮ӴԷ,!N||nZ[wء ]y3fK>}fL܋q߿5|pYFFQ]v 47o. 2DڴiS:"0Lڳgzꥶm۪y2 5N7k0d403((ZFl6[Ǩ԰|-kSAA>S1B۷W=~xm(NU%>4W>l6Jl1j<$\j.]4}-[dOKKӱcԬY33fR=Zڸq w^+..N]tQff݊tKIII6+\9Xڲe$+վ}{l뫸85ofyiiF?ә3gԢE >\^^^ծã*???;:ešC$oT1hrrԥKw}8qѣj޼^?^Z_Z*{$*..N:|pu=hҤIj۶: 7puJV"\6lZhݻwیۆ/$믷y|||t+00P;wFF%XBEEEtY]} s:^?^X9屣?zܚ MfY}:ufBCCe4gm۶JMMjM'_mڴѝwީLegg[ {ァ]t%k׮U^^﯐;V"[× 6hƍ}322qرcڲeN:U)++ӊ+4zhuEڵSffJJJԢE jJK,Qjjjb6l2(""BcƌsSխ[7mݺUyyy*\uY-ZPfftImٲE;vTHHցSvv?xIVFEEY;ڄfYA?~UTTPy{{ѣZn0L2j߾>eeeh4*44T:|֯_]s5Ю]-,,TrrF#GjΜ9 ʚ㵡o%X|+>ۏ [Q{{qƿ.3԰޺ǽк?UioˏcoI艒 lh֬K͛kΝ:{+!!AgΜVIRQQ~g yxx(88XfYZfnZյkWIҲej浴T{Q^^uVNN5@t59qRRRTTT$ OOO`0@ֆ gsedd(88X!!!҉'[f͚ٳڹs8`3Ug߾}%fWɤ4ƪUV ү*I*//hT۶mas=:r߯GZ?f5ή6UheS<<<Իwo |||tWZѨ:H֭[\7nҸo߾2/-Z( @ڵkM +}ѷo_ڼyղeKyyyڶmV^m7:tZxMЛ EGGOiii짺׆xp75UQV5m{ /Xq 1i?RMK#;+Q 2u֔>)/@X˺MǕ[{Tz!)@_~k$)++Υl~9oy\yJFnEGGȑ#Zd], ]wݥ'O>SL$[nKCҐE 8{_#$)_RǦs͕5>U:հMMǵjgrr-[T~޽{kRf2d=Zњ0a6mڤ{ 6-)LOtQR ՅNB.#5rԱc5MCqq,X^zgϞ4M :T)))JIIwQcj׮]JIIѤIB=FM>]O?z lR PBBgT ;wJJJ< Hmݦ(//OO>֯_/]~:pgT &4aaa5gرވBSզMIRvv\[%I}V\)I*,,իmsu?8NgXo @”Dw}rxx@F#e4|r-_\ pusSڵ$޽\.uc|M74yyy ׸qھC1b uFn>BBBY1Eaa[SNh@0k,IPɓe45g4vh4̞=[yyyjݺƎ[ڵӨQTTTO>".,??_gZ`nk/]3FIIIS@@Ҵo>-[LW{#<"I1b222j<ܹsյkW͜9SӦMY;S#GTe2o>mݺU}Ξ=[klذa~.LAAA:uӵrJ}7:uT[~jvu]:uL&{1-YmG[6oslG]EBB>seg϶yxb=ԥ M7ݤujժuImٲEK,ю;===5h 1Bm۶Uddta/zu!yK.nv=ɱ{úCmq?^&MRJJnV :Tڵlj*}~iرٳBBB{wՁj=_}?*sΝuת]vTjj֭[?PwF_Htt&L޽{+**JEEEJMMՂ `4]9 G MĬYt]w)22RcƌW_}Umh%&&X>vxx{9fy.]ԥK;V .K/|I҂ CKG̙3SNڵfϟo.**JlG}QRRy8|-zJ#GYKR BOٮ[nESNl3l6X>>>6TRCM?uigm4sL, QHH┙i9zݭZҼyRm]||㕘_|QmuD}3gӧdW^իƎ?Oz'4p@mbbbÇg… 3gTNNM@'IW\q ;V&LЉ'r ֣G-Zft___k]wuz駝zgGǝ+>u)!&rɓh"l3i$F͝;/}||m۶o۷P뮻_o$)''G1bk 4nj#Iڰaӭ'(<<\wo{C zGԮ];꫺TTTFWAA{=mݺUjѢ:vAwx j 7ܠzJ :tFv)I_~ IDATQ;.vڥ={*,,Lɒ*Woޠ~I}.I@@f̘m߾]3fݻUPP`EGGGZ|y;++K'Nжm?ȑ#:y򤂂{G:ulR ۘbJIIզMvmJLLTll-[&IZt~kxW衇RXXx mٲZ3?L&|M_Uxxu+22R>|zAC;vL|o߮uUz링^w9:\9讯M&4!f҄ 1cL$裏>r'OV۶m[oUuGw}'|RrFJk׮T1#]jϞ=66 =zemMNNN{GCs+>>^gΜM7ݤGZם?0`lb[m/##C+WԔ)S4i$SIIIZhEmW]8}M 8.??_f͒tbҤIмylt&N(I6mL&^yTx~uƍuI[jN ???ke̙33g$+tz|||4eI;c6DCəkK/h47ߴgjWc gsUX4o\pQZn$)66ߢ1a۶m6a\e=vmҴyfIRΝm9so۶&$/>چVZZjfy߿_4~ڮp]_'MhbfϞ|m"iFcǎUii>C#Oϊb+Wָ]QQSNfZy9j(U:?… m c˗ގ&=zKoժU㈆5p@_f̘ǪMC!mql͛7XA?k׮㒤vΪ\?␤;|{VvyvvuڵkW˭ntQb5N.ܕM S@YfY凉dw}_k999:sLۦJzO hʔ) S޽qFIUÇ$͛7X]fmVREuPMS~rFBBB[uqQ5.Ucq =CzժU+=zM6)99YK.UIII驫J}Q.]-[W XPU?Ψvs;֋rU???nit1:N4 ={&Lkĉ7nr5kLRzAfmϞ=+Iն;uꔒuu)11h2Dںull}o>NG$FV4Ѯl͙3G=$^Ӕ)Sd2u8c\Gc gsUTvZ1BÆ SջwoEFFjذa6lz!VJJJ?`=jݺ$@:rΞ=믿idHdsSwsp&4Ayyy={|A=Ò+##N_%UnVo^REV\\lnܹ4|p=*..VRRՙREjSOiujwM,S&4Qg϶l-Iҍ7XÆ $[ں 6(==]8pտkٲeնߺu 44tPvZx$馛nZ~$Oƍ&:cttm5.jjdk\H?Ԥ1*Tӑ붼F5V`y睒C]h߿_tW+226uߕt1yM-j:СC{v9:\9@9so]c*,,fϞ)S+Phhzz%Ryy ;Cf-^|Eeffh4j̙z+oooI-+?i-M&l6y7oƌc Խ{wNyh.gϞ$///SCeOYY~aٳGkq$i׮]*TR((()[ scCMѣG}>}(22R־?In ]0""BӧOW^H 4HӧOǑꫯT\\,___}G9rZn+11QӧOW|||+]qnOCQ_|^uQ!!!ٳNߒET:]]9ns3zcm_C 쭫z\c- v~,T}\G$F:?ǘfkqf.ʹiӦIuV|Wմi4sLC//..ִi4{lLZynֶuQO?5ؒ*¿BX֊DGwԩSm^"k#ULZGDD믿$@|M6 m6M0xBs=ݏ/66V_||||$UR/;zq2.”,I뮻}CM?uigUSLɓkݦ@{uJLL{R={V͛7޽{uM7[OhwvQNN ~E-fIk׮ԩSu]wiǎ?!ܑvJҏ?` 3gͺ{m,l֜9sk٭ohws.=2 T~ nZj%IZ~5L%{l:\鹹oy\Gv~>U:հMMǵBc4:OW7z۶mӸqtw+!!A;wV-M6?/xsZ_w߭QFiQUVV{_~7|7zϟkjĉܹ:u$OOO߿_Ԓ%Kj*}?I&o:wj_7Ӯڜ>>jٲyNNΞ=(jݺ5̔$֭[h! n՘땟Gd1,%bذa톙l߾I5 7ܠy)>>ӿ-_su5ڹ٣\ύv>8O@wMɢB{Neз~GD-[TVԽ{w]qZx [\>5k֬:vN:O> nӧn]\םwީnI4o޼K2n?=&I2xy7:JF]潮nF}q^x bf AM6jӦÇ+99Y .lΕ+W*<<\ta5>иq4x`EDD(""BQzz6oެ ĉu>6lTx M_f]gl3xz*;zuAF__},kWm^>#T=6wߡVohKH_}}dJ[)ಮW]Qޜ!SQQz0ݘW$+4DE:{WȻ }>2exZ+5Ӌ/.],tei̘1zo7PVVzfz~#F?OW[שS'uICѣ :=zo>>> Ptt@I[ZTeY v&tS`B7Kwfj'Z?&+--UQ-=띾32@u6#>.;S˓%9M͛7O>wm<,,LwyNjŊ?lRO=|}}%Izgb wz&Izۄ ߙ;y{{KBٳgիW{:tM;_Oh…_~ѦM+##CjѢzjѢ$骫j*ռ7N>]rssᡖ-[[n Q]@B7yXjA^-Է&c\Z/f_OW1 {JYKL-Qi;bu:]MWU\Dy;v3[;lc.+Ӊtz6ΞUjqctշTt$ݺ,{{#j%Nm8IQm3:w2ILg[EzeRaVȐ X_gi"Dk:q?Tē$%%%)))I~^xHj~Zw}WK.>ߴi^y꫒j׮]NL&;vYyxxX'Nȑ#ڵk٣><>>ީf*Tl 3L%'';|%]rmSX쯐AXzs2}c}nR⧿.bfJTk}[]<vrNoj}uhZR`PΝlGk۬-u򍎒$5V[h 4%ClWˣ ftO)g.&If__~ڴ9RƊ `o͛mw7-[Z(??ڻi&[wѩǯ|ON_IIIpy`P?fyjDIz:~fck<كmLI*=5SQۻ?fb۱סqkezZciv1ݶݸEE-Y_yٳitfOO MKLNN>S} =zl׻wo|/cr>>6ӽVVZxz]_$edd~_hUǿ_̫ܯ~R?a߯6'lͬgۯ|Yy*٬ݟ$k+N1*L= Z^;ĺ /V?LՄ 4a;vf}Ϟ=%I~~Ճ 9}qCwՔU-]~iҥz4qDO111 ˳߿_SNN1\YddƏ9s^V1]CtWmdk}-򍊬`BJs> oT^^*m8uvN\v8aնL#kr`IR^WʫlVW\~?*4~#mۦ_z׭,VM6M{x7tg}z GAm Ӊy~ $b=6U ^yS6y)o U7}ZVaն j.i˪L+Jvv5u$!:G 9ܺMM*J??=rS'@yxT$3!;$0 ,RDEZ^kWmmoz[/ooۥ*) jP 싉! I&1:afq]9ss5!>F8xa͚C`۵y.m'}iƌ0a}aa6mr75 ^u]0SnvP[[_ tM7ow3{l8 J\8WM7['OTՖgYWwo|S,SxfK\^3Ќ/ O a.y>Ə﯇zH_|u ny|s7SNkHpv陑=m FQw?fXM_{Y ^pN777K*:v]zg:秦fi}i|MyY z09/q|yag Qc+h핮Z'[cv&琼s}m'@#fϞzH6mڤ?[~~ӟjպmJۧU~xv]TTVX3g*""95f}W;V'Nĉ5yd-ZHկS=Kڰa6|Qo/v>g~viHHx EEEI3txTU02dСCkiɒ%袋69sӝP—GͭKh޹f^/ᙒ!aΒ)/4|WVٽޒ2@c׭P(z(%Ο1-S/sSJUq{5*}ڃKӥ6lr!g;5gΜ<3:xM2Eqqz`%$$矗nWII#IZzvזּ=0y{]zʴg=Z+WFњ;w?.IںuOl{M7G?e~hҞE]$\oܕ+W̙3z5n8M0e(zY,}֮]z.d5:_/k᜗GUZ5}|C}FqӦ(vYO~箿T 6œlrgSM:?(q5q8O^GM g4uaz)//O?.Ϝ9nM}|dg'IW]uLE{_C={N6z'Puu˼hIɓ}]fO>QO+gJ箋X]}.8yՁsNj8~>_2'Ug[US׆,)!$Ϙ*CH/=UCv׫tv**_TV2ZtZ_~q`9OEM gSO駟֤ItUW)55U)))JIIQssN8'Nh׮]z\N<ǚ:u.\K/كLOֶm۔\J_FUUUX;v_|[v}O=zϟرc5x`9sFryƦfӃ>oQ]wGj۶mzZ[رcZh{19RWEE~aM4IӦMSVV:)??_oIG.˳yoEEo]Ν'C9M7.TgT6iUm٪Mܦ3*u3e SSEjP5*YS۲7xZ޷9x*/y?|QkG0ym !pohh&Oo >-fV nŠ-fS5MAa}Xo>zC b6ɨV.o@C b`YEJɠ045ŮA-R4&΃t$}k2hw(A&Rɠ&Ы@"4, ]8 (C@&tQIIKAM@@"4,M@@"4,M@@"4,M@@"4,M@@"B]L&,BCCe2d4gͦ555j%t&ІdRDD,K (ѨPEDDj`M0EEE^eXdXT[[Ю#}>l-**J.]ׯ+}W8qn ý rԩS?ItuשS+Is=w}md%\^ /hҤInooڲe+ֿ綪uiiOds@d2.mEEEgjD ^xAǏWmm͛dzSXLLbbb4|pM:UEEEO~G4 ]=3ۊPMMpC 0#GJ:m܌ 7:oH;{JREEEoSwu%x|| 믿^&LPJJ{9}ݪs@2LX,., &\vx -^XvR~~KPeeeWkkk;=$o r `KKKM6GwܡTM6MVc@p## fYE UHHF K.ͦf555IVU. " ܲe˴l2.z嗵h"K/%z 44%`8Edn 6 L&[ᖖթNVՏ&?~\ w9@P]\DDD(::vgpM{˃)4LVttVjjj'-=E @߿$ȑ#~nF%@<aaaׯ,K!fGfnZ,Y,YV9sF . ^G g[{n=^ mݦ3f(--M!!!:urrrqc2t뭷j֬Y;woԌ3)ݮ<ڵKoV 4}tfiݺunCBB4e+%%EfYǏסCo^8?Z|̙oQYYYjllƍsXEGG{ 2vfT 0@qqql$566V:}N8Ç% !j-TSSJ@"t(##CO=]:TCwnAw.cǎرc5o<}]z_J'Nt?|p >\ڵk?Y2 JMMu?aM0Af/K7oqIeyBBz-ƺVvv=?RSS3hƌ.@fd:5zh1)..NYYYԞ={' 3h\.^A A>8o+XW^޽{UVVT-X@ .><<\򊒒^zI2LK裏*--Mn c6/+--MgΜ+={^ZhFl6'𸝴4^ݻuQj馛4tP֢Es~~}eee*))ݻe8qB劎_;C)))O;wѣ^xbIҁvZ8qBڿ:+<<\ .A㥗^ɓ'+%%G1bF"mٲElSdT@D h׃>X鮻RiisYYYvޭrs=/]f.]Te999ڹsVXAok$I{<׉''?nF͚5KW֭[=nk:y}qqvء={RSSh"-[̧pEi\ewy6g}zKׂ z7}V7xxyv]ɚ={K/K_HIIM7ݤ1chÆ *..ޚA*++S]]4 *))Ժ=oY._ko@3<,I |!##C!!q544hڵ!Ctk_ׯtYfKm~Ξ=襗^c=&\K...$%&&ޞ={]33aYz=lkլY\jh; @FMWJt}pƍ>l9w}'I8pºcǎIF #Gtb϶mۦ7j֬Yd4eٜCBBtkܸq>|'ŢN#>Nqqq.="v,XǟZL"٬5kH ΞA=3@# `r.((ٳg]ې)s0s\.Ȏ;4k,+55U+B/4`IR]];8qB={k߿stG9{lǏWcc6l )8CPƪߥc Õ***ӿ2<<\:}u,\oN궼iii=+%{w:l0= kرc.lQQ.c̘1zկ_?IRUU^z aaaCykʔ)~\OJm߾]RpѪhC'?so߮}"?WLWG~׮]=j[q]ӦM$mݺvO:UtС.TyYN$]s5 ɓ'_ZGڻ4++W9> (EEE)55\bbb$f&''gfvkUrr`˃]ttOp@D 𪼼\~$iɒ%9r][EEE%I7p.)***'HNu7K/Ucc^}Uۻ=ο4c I믿êEFFꦛn$}窫sY"*I:~l6+..e`Prrۺn=㝣X,.A9sXgkrLbQDDZg& C+bѫ7|S:vbcc5sLw}^?7n/|B566*,,L]t&OW^yE---帞{9M8QzWl2}:y5w\gͿ:qmg?Ә1cSGUBB w}2 Ѷmۺ\cLL[H89RzTRRgyƹή]tw*99Y7xCGQxx GΡr\+::Z999_kƌ.5 z7i&[NM@AӧOwܬ7:t׶z'eZݖ͜93({JPgLIJIIsUQ ;WMsi4~(Mƌ7xCk׮Ubb 6f:jnvZ=zOj>L&sn+..ΏtM\\\Є'yI }&C?.:0`~.T=tS%]Lzpa[_}zuW{]vi/RmmY[[J.j aff:tȏ|gh>g-]TAܞ9sL}Gow;Z`s=Aۮť']EEXQUTTx] lnnw >E zhnkӦMnM&|I]tE^fffꩧlv[iӦ 3%}QQ*`Փ>f@%k׮>_ӟX#GTdd"""|P?v[|kچjǎS%]^;S;0sG1,K~AWHH͛yuz{A$|ب9p]CL 3E 􂚚UWW|ժv{[eΝ;RSW8jt59y֜9s3E Fp陚޴]6M}}K x*t 1[ @1̬ß 3B ]v驧rђ%K;﨤kR;Zd>sIzfծ]Kj<`0h~}7oӡ&Fg&@/jh65xiYYfhvcIR$Ig@vaӉ~ K ٬(UTT8 Y-(Z`K̸8֞eee֟'&.ͦ_YYY8t^}UF k){mm{WQQQf]7|w)lj%|?m~꽽ͫQ[[۷Y .PЇLFQOK )))JNNɓ'ɓ'k:9sF QDD4x`M8QQCC+o_o\p}R_;tΞ={ 0 ZUdds^nntUW͛7+77k`PSS; /@ >^o_k㕓CفcjjiiѮ]tg65bM8QJMMՊ+TUU凪;7@}`pR̙3X,2LΠp͚5X,0a_jܶm֬Y|^Af7ԤJO M 4ejٲeڼy0S:ݻwon!# quo+Vh罦͛7kŊ.[L3%@?ĉUZZ{O555jW__ 6@111?~|/W 6ljjREE[f\յrJYƭ`YVVF0,(;VVuuN:/Ruuun?#_|mhرc$X{mVW_Yl3uTM:UTPPu9 9RC QbbL&JKKuQ޽e(uA}8q233*:uJ[nU}}cHNNָq4`fP_ZZZ\5 JMMՈ#~EUUUe;v֬Yq);;[qLAW^yZZZzj577; &(==]111***Ν;h͚5lϔѣG+77ץ~yڶmƏtEFF̙3:~rsseZկ_??^iii WUU=m۶ѕ~o]ߞSIwܡ"p5w\߿_6mr[ޞ\g]=ޯ=rss5~xedd(**GGDFڳgson!hV***~:r,XaÆJ Zf ޙeee~ h@1ZdBCCUUURkȑ:tOgϞԶ`g0R^^0eff*33k(]{JJJRMMN>H 6LCՆ &);;6//OT\\y)--M*//WxxkذaZzc\r XUUURJHHА!Cj*k4[5p@eeeiժU.$G3gnVUUU SJJRRRUV_~3gf555jHݻ]F6..N:y뮻N&IPNVvvtQ󔕕%ŢJ+>>^qqq2dvܩ+B!!!*//WCC:{8~/;{^gkС Weee~fYfRVVl6***tYh̘1*,,tݽ|Z?K1]__/ݮ8u??7n*"m޼Y_^֯nf,M2VNN$W^y>NmgڴiJJJR^^>SP4Zpd4L~W+))I999ڽ{s~jj.\Z'Nٳg~zUWWkn;L:UiiiӦM5o3IҠA:AiȐ!*//׆ \>ߗ$aSSS5d9r-:qv)n lg6---ժUd4bo:]eˆ]VJNNVzzv_|*++IC qoCCBĒm߾]4p@yttРAjllTIIs^rrTSS\F}ǒVKmm$)""c7ov=/$UUU -{^W=9'ryWNNӨQTUU>)--u7/aaSSUWW'o>z'l2䨠-kllTyy e˖'o}yܶ^b:Ԩ0ЧCUVVEQQQ2>_D߿󚚚mwˋ$I uTVVСC>|TQQq677k8q\z,l6=$ٳ:xFd1LfLL )ONN$#iIro;_~ϑ4.ׯ_ZG=}uv/ޯ}OuګLÇW|||*sKDZ^h4*==]JHHPTTu[7FQncߞCX,{hFEEIgkނ=]S9iwu:ko_]}8#;|^_R_HKh^ب2+22Rf뺞X2Lժъ4xIWvz8^P-LJ~SձCDDD8'Y]]SNȑ#jjj5lذ.u6ͭcߞh:,//V-][W|}Oי7ݽ_{ u?ﵴmmCMI.aeCCe60L&gz۾BζEuuus<@.@ދ :ӎ;z\c{Z{ppskgy we)11Q;wԖ-[\\YYaÆy uuunCw:z 9dIRtts^XX Ǐw_w^?~vֺ벧kw/_q߿ MMMM[g5[o&655QgΜQhhfBBB*Ym6jzZ|ljnnVSSdZy>&G bIҨQk.ނSNIF;v}9>:zuŢÇYOXc~te#Fnwܶlv@h2}Zk]>f͛7c'NСC … =jsP3lt0xy#""BWXXml[Д&I3fPuA=ΝU:̝;WڻwKNG 6zh@%::Z ,ǎ$]tEyOܬlw}Zt&L\:uJ111{xb%&&j:qDj_uԤjԩ.9sxODDn=E555bQhhL&fEMMMZ}*}&jjڿK.x---A;$+@__)pA& (.pC09G IDAT@"4,M@@"4,M@@"4,M@@"4,M@@ wlJKK]%zhX.*,,w \0 `hX&E `hX&E `hX&E `hX&wQ_3dIB–!`@ADA-`YܪJ ._u9Jk׶Ϸ.VZDk ~kT[6 b d$Ag$3!,3<̙;ϽT:ys4,M@@"4,M@@"ڵkvڥYf@/@̝;W/%I_***zn׮]'|R_>_u>zK/ RE@BM~KMM$׫u]z >\4b4oJV^[^ lbQhhBCC"(|p8dޮ6jf4@@аX,PDDL&u$]i0d2d2dX\;::ܬfYV?Vhxv}\z` ;M&-ժ577, &XY,C ]SiXdXdZuY$&eWlEFF>SII{=}G߼yFm+T\\}Z:vl6[CZ,%''A.AE Prr~k֬Ynsrr%KhӦMF6utt=f Y]7N?ϔ6ĉ8qo~zǕ6?++KYYY[}zzqM2m5}t-^X?яtС0fY q 2ӹ:u.x+++5СC:pG 3h֯L|ۖls= ={Vk֬сҢ\}_W~~,Y"٬G}vɒ%2W֭[}7UPP~(YFqqqjhhК5ktAh̘1Zt:ۍ{ۇk͚5JNNVqq}Y9rD&ISL< =Wbb򔗗 }G%j*%%E555 4`;}[RuukYyynݪ馛`mذPx555ڿjkkrAij*Wj*h޽zוo|z`PBB<á-\Э@HMM7߬iӦiͪ ޚAIIIQss`@h@뮻TUUիu{o]-szꩧ4g%''[n@7gcddnIޏC?{ $###u7><<\˗/$]-tjhhkKSNrt0r@qƌZl٠ 6hϞ=fbb V4 UUU7nBBSx]U6mʕ+5a„~_k2z>j?n8J||i_WW~U\\ܧ0R)::Za楗^:z3gkݒ3ԌVKKK@W>$Aw`wqyty$I;v𺎿9M1ׯ0RH"LIIѲe\-[W}(66% h]}w)? N[n$~IҊ+ܹs=ίs ےoQ^zi(""B-(\h+sMZ)ܴX,w>si…0hOYfYk׮=ܣ|%$$K.ѣ>իWK^xwFQQi$>󗶽 <}{ꩧdZ]|GӦMS\\&L[?We43d6%Fiԩ{e2t^`8r 󕕕窺R~~~03BM簾9䯓` ghWUUzH=ӵj*Zmժ{N_]gVGGۧ"W֙lV^^f͚\3FΜ9^ss^~*@ 0 9gbd27b.K;wƍe4>l[[]ghe]9s樺Z֭ӶmS߿m(qsܹs%I%%%?Zf45}tedd(99YVUڵkjjjuUVV=hԌ3\uiٳGSNUFF֮]{T`ЕW^mذAe!!!4vXĨB{UjjF7n?Ըq4uTm߾]mgy_ק:۷k̙7nz ƌ<%$$(66V:s挊'nK}\e_}ue UVV8qBp </ZS\\[PKeeeZtmܸQ^{eK̚ &Ѩ+V(44TgΜQuu4ydM8Q/ڄiP{{jkkLeff*;;[6lp}ikkSqqrss](..$UVVEEEiٲeJNNVCCN>Heggkĉڼy9Z?::ZK.u6 5~xe˖)))ɭ݄ 4aId+>>^wF6>>^:ytd2477رcUFF> ^Ӿ^ΦL'*<<\/YC:s”T7NoR˾џїz<1Z`dUWW&hڴi:q+4---r8w[B?f̘JRCEEmۦ={x)(a&`" s1U{rWwq[ܹPqq}Wä$-^X3gl"IZzwu9͜9Sڿ:ϟnnj뮻NWyy+`7oU\\>5Mtt:%&&h>󕔔S ]={裏>t>ZjL&Vrss׫@ק#Ghp1utṱd]?~TZZ{{_/|O}?篫/\YYY*))ﶽ$szSPUՊdr[Ϟ=ڽ{5}tM<٧Pu鬯{hkkSmm-- AwuFڪ?PѣZm޼mj[מ3F&LPYYY\{bq0a_] W9f?ާv}YfSUUk^JJР۷l6{-lll$EDDx=Nq} KOCkk\UUݻwK.X'}/SG_|O}oc||u;ݶW]]v,y{X֦J577h4v{}z饗裏jݺu*((PIIIPfV%%%*((кu裏꥗^qzeZР LFM"ޞOW__EEEh4s<|׫T999JNNV]]]pn IRbbbhkkg8v}O:?lCC~RRR$I'NvNO}=簢111\c ㉯/133SFQEEE~eгٳjiiQttfs66My߹$Wpw!f=7ժg'@ávL&/VF999JHḪj]}^ 9L\\v}h4*44[<'hX$u%I:w~رc5~x%&&***Jaaa o^G_' s #j'=6M555 Wddfu=Xй^ioeVU jnnw) MƜgח`/ΝW[<O|mvvۯ}%4|@٫u&""B7pt9:uJeeejkkSZZ`+_7_缯{@n>Vl6+<<\aaa2L6}o=]CGG{(#& cΞ_:~ujjjǏ_l$r;zegg7{::^ģF=jv9Llkkfٳg*٬d2h4BMO!ݮvMVcF<M*++%Iڷo_^~E999jooӧݖ9@:{uv)IɓUXX~@k}ޚ&LPJJ%%%={`hԤI͘Y,͟?_fYvzs|=]_3F<>3۹>:|e0d4qu>v}ݟ/ypyyy*,,s4`d:|ޚN}Z<XYY***e˖ %K(,,L;w썳gJƏK\yyJKK뮻c=tiuf-^ԮIg}&IҗgٴuV+77WwyVZ.L۷oשS+WjJJJ҆ T^^߅/ԩSh-]Tz_DDDneff^pO{y8rΝ;QFiݞdu<]{TnϾЫso_aph˖-딑;Cr8JLLhÇwnm?Fk媮Vddx 9}PZZoJuuu2JLLTTT֬Yv9{״Cv=K}pgٚ2e I*--ՙ3g/}IFRUUTSS={hĉW]]N<٧??~󕕕Z+>>k CU/ƌIĉuĉ}uu}=C{{{=-YD;vd4j(%%%iӦM*--i@[<_GO2L7~7qmee]{e]_]ie,ɐJҀFH.$ÙΘ1C!!!ڵkV`0d2)..NC'O?Oz :::TVV(kԨQjllԉ'\C>|X 2UjjfgW#I---:|BBBd2/áGVll>={4uTj߾}nZ_GGF2335zh>|صYJJJt)K+Ȭq#oب?\QQQTLLtmڴIjjjѣG{} U'55Uڹs޶}ue}==s22JNNVddZZZtA?~u_reׅ{[B큁|zw?HrHK;w-~)Sia@asIR$_OIphq89o*//믿Fp M6j@/Izgd{|5Ɖ P]]M io>G]RO=]եMezZ&/xۮ'E8`F̙3=ݮM6?WFFVXSbx\?::۳8= hTSSӀԉzCo{g>.I:;0<R0|hZHHTZZvɓ'K_***TZZ:ڵk8l;VdRSSs ;,,Ls̑$h;|4---M-5\z(>>^QQQӖ-[mVU|>ڇ覛nRBBb+D_p=D h8ƪFڵk]WjjjRaa9rF<4j:pKɛo >FhX&E `hX&E `hX&E `hX&E `6.A%@P&EM'NF zhX&E `hX&E `hX&E `hX&E `hX&@e2dX*$18vuttMVU. 4.L&"""dX]ʀ02 UDDV 6@P : STTTEEjmmw9= 12A1΢2zDM`Ѝ7ި (;;[*..+;w<= ^DDv;=5@" M6I~a1w\ٳ:~oxhԓO>+mW\Ei24eCd2]EEEgjD unwUSSK$|ͺ+Рgڽ{f&OO?O?3gQ/1Fb̮"""2! TIR}}}KUUU:fM4I74j(}_ULL}կJ^~eWf}G,B`0hɒ:{ܸq  &IebQss34@! (Ѩ7|SzjmݺmUUUԩSڵk6lؠ_ׂ uV?BBB!I:|_k7p襗^˵o>9rd0 P3XfY,*44T!!!22 .'Cv]jkkS[[Vl6K4AN?O+l6kʕ~4rՖ֭Ӻu]0BCC]BsaXL&8I ``0d2u5ѡf577jB{O(?W Xy F@>JIIQJJe4p8<-N00Lv?|4RtBBX `e4@<aaab1PHٵf'bbjٳgt0Lџ'=׹[̙3ZpaQQQuWjJLLTSSjkkw^;O\o޼YFr}+VxPqM{{dҭު (33SC%%%ڷo֯_uxiѢE馛%ͦ-['Ԕ)S?ڵk>z͛뮻N&MRLLtIwU]]]q߿_w}w_x(;;[TRR{O}6***ҍ7ިy)33S&IǏΝ;n:Q8EGG{ 2f&N1chъWTTfUWWӧO\ǎfs 1qZŢd54404M2E<"##f)++Knf[[:::܆(41cƸ[[[myzzqM2m5}t-^X?яtС__k;G!=#Z`|C\r$W^4%99Y?5k,999ђ%Ki&׿kgљ3g܂VIW~~,Y[UUU> xf%$$($$S*//ۉW||\:~ 21،VXXjkk;8D &22RO="##u *..VssFtM6M[nukdFرCzn 3gJK[xx֬YdgՑ#Gd24e=O򔗗 }G%j*%%E555`C fڴifӃ>fײjUWWk~P馛4m4뷿mVrVr%YPP{_Wzzo_gyFׯ[7߬\544***\jkkuqR'wq222TSSo}[v-+//֭[@7t,X 6Ԯܹs***ҹst]w+PzzN<9h DDD(!!mPJJ.\r oִiӴyfUVVmoM$Ը}`8|.&&F_x&''d%%%^YYY?~_hՒ?ȑ#n]=+׮]mWIjhhk&I:uju Tߺ,I?f0~풤nanSO=*[nosMggglA"<<-t>7sƌ{<,++K{f̘y]2PtSXX(*Ţ_|Q TRR">du]벆=q)44TtA8v$iĉ^6t/[ԩS%InCq)$uڪM6iʕ0aBS__&EFF*))z33! 4gΜ!cٲeӖ-[܆ !hUYY35&*=O%&&;ԝwީ@[l/Fv]'OTYYJKKꫯ㺝C-[\pf벁%nȐ$r-gZ__=~$)--Maaa^QM[[oEJnҥK5s!eΜ92ڸq|`PBB`!a`0ٱcn͛7Of%\4͛7Ow?СC|N_O_\%%%jjjq}OC&I2~`0x9 Frf 3.\0i̙lڼy 5CCCMRΡG%z!B} hժUJNNSO=K6uuu\~ \d23n߿_˗/5eegg+66V*,,u 0f^Iu]l6Gъ+dNw8i$jҤIp`0ރADDDP\Cjڞ7^h.=5xiY{Xfr:9m$)J/$UWW{848%y/-AnBB֯_?(۾U[[;(ۮv&}m)//o+"zIcC'OwE0phAjVWWw۷o#.QRǿvt.]_.m.2yYv=σb u Z׶m- nThhhP`{dؙ`rQ;y>ޏM|||Є 'yI &0>x]z[=;zhw}},08{J.j5`d~~'Nz['NG9\f?gK3X*B͜?V(@NT0؞=YڃC;qm` PMMMǎmeffjVWWz[s/:Il~lY[Zpېv]o=<#<"jڵkC6̔zׅT7-}(#3 &MVZ5|Gu]9rvmzGj=0DݦevU⿶j ֙R 4}W&^.gnh"AWXXf͚Yfux{&I/*zP% ZiyC-3D M$&& /^xJLLz9N뺺:޽;uݻUWW1/Ze466?dggf@VTT˷ݚPcޖ-[R?\5jn\} )0t:h" :ZtfL&C V%%%!B[nfs0nn{ 6LT%ԴԴY^[>Y-iۺޖ{|mכwнva.о0M2ERӯy\Qb6ujኋО={qƀeX4ef_>仔 w!áKnIҒ%KztK\[t>~)##ClaQyy9w UNݥZ]]^zGꀧ`ǎI&Q[nݻ݁dsVU#FЄ 7=pˉ'! W\?> 5nܸQ+Wt骻y׫?+4B@FF&L ݮ^{MZZk֬Q~~bbbtws@Z*++k"\R+V豺VX+W#Zg.eeuEm⹭uM>y[r6<\봜n욶4{mdd8q⧒zU7n@O0 k:999 }ݒ%K%&&nPaa^}Vdgg/׮]vZe(H9i׮]*(($l6r-^k׻q|O4aefff:z UWW{]l6kرJOOWJJjkkUTTM6~<+WjܸqQ߾}aаatoU?uСC>}RuWowɤ#G*++KɲX,:pm[K߰a?|eddfBG.tDب"رCW^y.]zm^͏[j}s窦F;|7L# 5x`ĨP[lQկ_?\RNSQQQe2]m/_@wIJJ t A׿CZS### z_sѰaú|\RBLW-[j6&%%%+l #6l,)JRiikųL|˳Zru-ڮ7]1MόsC@VUdUWWDVzz ݁C}}򔓓^?//OTTTԩ5J P||?r%&&*))IYYYz[f+PJJ*++u1EGGkذa2d֬Y{z3f(;;[ Wmm PeeZVM>]CTYYN<3FOFFFj֬YJOOWCCJKKէO 4H Ұa;x oF!CO>*//nWbbF!C_ɓ'ۭ}jΜ9 TTff9\mIKKӜ9sT__+V\TBBmfMHHPyy94]y啲X,jhhp_C~rrr{: ާXj駟ָqtE]RCaa֯_gP 3 PII4 t9(99Yyyy_KRxxLJZ^Z:󕛛m۶v zݿԌ3K.DǯuMV8pΝiӦ_'$$(<<\o8 0d675/,,Taaugk͚5ڳgO:ĉ5tPkڵut)S<]V }̚5Kɓx]޽ڰa ƅ^õ47uT(//O}{}ܹs4y%99YW^y$;tϿ׿+ nHHHW_}>LRSpBY,O;(>>M/_z桦uMMveX-[(""k ^{Mw@nymw =z?UdׯrrrTZZ5kxlnߖԈ#Z%77\SS?X4`N5`eeejJ[Z =ϧ{ꫯVXXyu]qs[WWbT :Tڰa{~]]>CIju VUUI:fp/5 UTT$!sN=/e˖)77WB:*??_Zl~_gΝ;nW` 1]*++UXXH h g ݮaÆiҤI_w'__744h׮]0aRRR-\_߿z@۸7ͻ4hfvWٺvur(;;[)))*++Xr566fl6} 3z=ϧs??w}Wz&_jj$СC:555]뷜ߕt ;zu= O8jWV:uuuڹsv}Iryu1뭕fĉ{&l٢d :T3gΔa*,,_{笳e]ubŊoeb||{_/aa[;/obb$㧵ABs%%%vaAzGY[uyyk2tW(::Zeeegӛ:l6+<}(::ZV{(Ӿ`3kkkUYY+ &fiĈ:tҔ.H}QRQQ%%%~myw]eҜ+*ƶi.o=ϝ~ s*!!AÆ S~~_J{]NSNIy>W&ic\ 4Oill ؾ[<ʚUWWjO>bq빭(!ѣ=,4 > TUUiӦMڴi4zh?^ӧO;!ȑ#:rHST-ۧ͛7wx?ZH]IIIڷoΣ7fmMg~߯?XSNՌ3TUU{%pRoʒ$=/22RÆ w}סV_K}}]FP􏖚_7]c8qBZ Sxx,ǿ [-J_0t:Рz׫1g<Ma֪+G~ap8_(##CJLLѣG](]:USllN8jو#dǾ]#G͛UUUuZ5tu}?bm޼C]5uIF[!""Bjhhбc:^]Ǯw6}vsW\W^yյtg^VVRSSl~~&M}jOe6uYgy111дidZi&'/݋ kg`hײXo5]\_gVh &!^ ה)S<x͘1zWZZZ@f)&&FR\@ffi}s} ꪫoXt%(..N_G˟Ç@;ww.[uw^UTT(..NӧOo } :s^߯BEGG+%**JgVdd6nأc߿_ǎZjլYy'|GW^yV.s;sKMcEJn:544(''Gz.\kÆ :zbbb`͛7Ozwt6ύ qi ݭ1(@ h-y [4ͭƾl|oXG?F,+&&/ǏVǏɓ'+,,L_|sRSUUU0`͛'ݮhX£;~Qk4os4p *..VYYVdSOjEvoCC>C͞=[999~f[|lho}_mo}8v[$CRݩynr`BNٛMs|f/͟]Ӗf-l'NTvCa/]]ͻ1Iw}$iɒ%W-t\fYW]uwiժU]-Zoﲷ3n>^۷o6VSSzEEEq5kkkp8R !%&HM,)S$^y1d_dғO>g}rFlf15@P"4|[k[oU&=?|UUUi֬YfiźkdZ[-Tff&LEײezN]LlRTT*++]@+uW^:6mZ7VuL&F))TP^^^֐?Ȑ$}՞={T^^0%%%)55U?4n8mܸGklO%I PcX2.""BV h@馛b wr:0 =쳚7onݪ{M*++#&I_i?fx< az|?}9K\p!/Rٳ|ozz.2襗^ CϏcIҞ={[o=)؇IAy.G7~.%j#lZz^-Ns?k 6G0It9 !J/-Z hʕjhh^ؙo;ŢkVӧOנAduV ns0]K0=zT|\?яm6-^v'OneZwߩ@>ԥرc%IVk}_f͚/\Æ Stt<|}ϼ:[wW_SjРAX,ڷo6nܨe˖c5k(..<ϟ?_yyy_1c :Tuuuˎ#l6J]xׯtIj˖-zk׮No@:֘[Y,=-CnCteZ50>L6&IPiU7蛢:<\MVސڎL2lN=t&˗S5k,ۭ3p@͜9Suuuz;跿F1ر;vf͚|P_322#(''c!C4d|$Ko,''G9999s?uhlQÇO>;vtRRR_݅Kvv5{lZJUUUuK,=JI=zFٳgk*..v/WccGQuuum:p@%\1[`˨QdEGG{̷ZСCe 43Elt]RlV+͂LiޔѺ|t.9+DYMJSzB&t_ǡvTޓblfΖGH[N# (h@jJsժUjllxς d6oCӧz)(//OO<+ŢQF{Qzz~WMM6MO=UYYzJ;vPII9shܹ:撒k۶mtao߾:묳t 7e8pCMN~ܕNbZO*==]'NSO=۷Z999܁j/Kr:={h߾}JII̙3Piiizu?{lf}x@֭kyIvޭUVJLLlvqG}Tھ}(//OCqqq0`ƌ%k^JעUf s(n%gE钳MQ^Uڣ$L1+mt@Buk˵rJ4͚5Kuuuz:ͅ ̅ zte-[7ЀXcKӜ9swhNr-(==>|X֭k;Ȗ~nkݪТEth:riռdɒv<ƌ?{nn׶m:wpBˀIMaf(*ʲ+d$i96N25bX!mtÁpo@GUUUi咾o`Y,ҧOwKzR$sX>CnkƍcQ67\}ԣ>*uZڶmG믿6lXui/&&&FRX)))^@/j a0MN]}^_-IZM?IM6 gS:s @/B !_VUU5sLIR5{lkٲeVFFÛik,oVR033~G~GW)**ٍl{w3}gdd(,󃶎FV$ee?LyyNl7şfkͪd3<ŋk=^.63dLWLN5=QIR'J@U)]@˵h"-\Pn&7t|<}jx UYY+,,L?4n8egg+%%E Pd-((pOc]oG߾}l5i{Nk\c__$z뭺[UYY͛7+77W|:pDBҹwؘaa8udp\/ be52*Ә;z ˺5h x㍺+بޯǻݭ}i+LdPX .@<'Ir8ڷo>j]ve~oT:tf̘c&::ZRǎuyJ=q\_|񅮺*M:U&Ly睧4M:USN߮_}z }5=0Kfp\_9j -P3&SQ ] X]tM*++/[o՝w)IzUXXvwVyyy~~IMcq:# ?O ի3Yaan&+]b~fiѢEzG:O>JMMձc|wРAZ=63qi͚5ZfO *%%E>̙CKM*cƌѝwީXIOthx^!y5'UuyX4)&ЅI1:R^77>̜%ӱ/.~ӟJj/Ν{,cp*%/_.~s[Jw]=3gTXX9_:pVCk+VpӬYIԩS%5L.&K*,,ԲetK4r.L 0@6M6Mt8g]Ax|>ޣcf9.٘!sѷo_]| t) ^RO<6mڤgyF{z$IW_}~~ii{ Lwmͅbx]vJ;YWW|=6C=o19-++Ӻu$I7xktgNK.8NUUUI %r}Sk``Z1d2)55{SSS[@111QV[kq&I gj85p꧗%2~zY 4 Ɉ.]:.#3&".=SƟ'vf-YD?4tPHs9;>jkkeZtR~3f㕕ŋWUjs MMM_WwyWZZ&O3Ν;Z&I ,[oO]trrr4tP?^s?իW{_">'=zuy闿xI?Nٽ{q̘1|H{\G$ 2]Sxx.y-^XcǎUZZVZo+I*))Q~~~;O/^|EJLLsyYd2gՍ7ިD /e˖s tف0)4 f!}]X+1Zi6F/d"3ch| $Iź{CiZp.\Nmm|I˝-={9駟Vuu"##+/Kyǵn:'?Q>}OpW^ѓO> &謳Yg[o>566v~ P=\׿vHtʔ)袋""%%E_:{cbbC2$$% ֙ҩ2dHF_58 I&Rp)>[*&Хmǎ̙3ݽ$BMI dyB heZxf̘'*33SVCChխ~%yf][5i$ɓ:pyuW]o~}k4x`EDDӲeT]]wy紎@~9M2EƍSrrbccu ѣڰarssu mۦyi޼y5j Xvm޼Y/:tZ5WyDFRBB>ܪq{OS :T555O? M6M#FPJJUQQB}zW[g YV=gZ5|uI1`r+CfW ~VM9rNJ2I20I 4%{!3Wx]Qk{0xnk]yޖܮe&/:-?-^[$$'N$v/0c\+%%u8ze7xJKKe%%%ݲ]ӟؙnu6JFp@]2"*gadlKeZ{{:-ٚ1c;ԔYfMȄv]&cvÆ %9%UIj<5<5m4{mxyyVuZ.󶮷e_v tR}']w[#b3?tk:S"aTcd$OWuzr:y gҥK5yd-{iݺu:p РA4uT͙3UWRSkKD'ax+ө3 d85~-u!6UЩV RŁ@uZ~toB[]@h tٳg{ 3t}'޽{U[[:Zd2i֬Y=Qz t35G ֙.E5V1!xRsƌ^@&I_|q o~:tH=jkk[-KC{̽]AfSw+4Ԉ@Wa٩r Rߴcfg"И1cjժUJNn=V5k 3]:wydZJ?u9tI=*2)h90!<up.KjI &ЅN\wx[m_~;,HD?gTh 4}u;P @JJjC:CEA:]J::SrrNwQVu$l h=ݥP3;;; &Bz?ԋSӡ8G=ٜҺlo#<"jڵkC7̔Á|s:%tXZn@ gMZk?뮻4rHEGG+**J999裏*9u+F0Dľ@W-~8=j=?0t1_aի 3 h"Х0͚5KfL&/^]Ub+k݀3hITvTM 3-4n /˷{*11˷cN@Wa恠ɤ:~4~]:gS@+T]"S@uZ 3 E tJUTTtv+**TYYQ6vLf]M-cVm)>4I*ʽW`3ff@uuu:{}m34tɳ$i7ǂoͱ:y+4 M&L&__"wIH.SFMLBomZ<[t>x~)##ClaQyy9>^ ^tN{Lwq%Iz'\U{Y@W>I28jZJgaꪁPVVѪ֙5貺DUUK>@튊TRR"٬cǎnտȑ#ﴴ4M4Iiii$á'NTaaaRzz  &h޽UMMMu,MUFF&L ݮ^{MZZk֬Q~~bbbڻ()Y} R,K:H":797Orf;'NN9Ķ$'cksl ?] ٘fat]S]MWu_կ~U=b۸qcG tH\‚' z 2CS"y>sYys2}cYp/~:~ݫ7jɒ%3g\kϞ=WMM6nܨE\CCC:{ݫ)Ӿ^֯_EIѾ}tO~ѣq/IO>dd… zj׫F~_CCC:y;3fUVM*//:;;uȑSz<YFjllS__Ξ=ÇN~٣7jҥիWu%?~˖-ڲe$OܹszaZJUUU0z,Jx:ؕ+WZeee;w!߯^x!)**ҦMdUWWK5o< z7tR[N{O:1W+WԽw|k.m۶r-MNN&}=x^6ly?NMM[׺uh"}ߎ;NoXee֯_K*R__|3Fǎӫja͛7O%%%|:;;~*y{(\'4lzJORhPA)Գoב!kmYif>y|K'Mp[nEmmm*--U__:_5_ׯ_W}}dnjRԤauwwkΜ9Zb/__~YN} 2UVVe˖iٲeI=իWcFFF4442͟?_ҥKSRRm۶M@@v횪u뭷3&(++۵h"MMM_Zx/^+V^ؘ|rkppP}}}ך5k|r=Ӻv횤T'OԪU"ǟ |>MMMEQ9sFVҢEtٔ]ÖA\w#?1SUUjlly?5Yjz}NJuIէ>)MNNj``@jiiQKKۮy P.zv×$_iG%$yt JpsZ_^񭃺oB=zgVRw߸]Uz}afяEE]JR-^WK,ѲeРJxFzIb87˗/kʕKDaJ}A566M뿮`0.?~\NQ zU\\< l}6ƠRtF{3%tdu~ vNk]>HUhþ 6SFrv:T#yRZg3N>IH9oOP)OT'O2;% h@ W]zUGlvIp"^իWu%utthrrR---ZbŌ_7pxjTdz~_?OUYYիWM---jiiG>1ked3 4Um^GэٴFhNon|XIh1 5%OhL*JMO0cZ3ttf8،}u3\96 {4t&΢*{ܮp <t%*>jll[o|xppP+VTI7Νk7pJ/'ָGFFo>۷OZv6mڤm۶#&1uhmɒ%3mmm$UUUEiŊ:|L[2~̖?d#xMJP~~LNNS\aSEY 8kZRYTZ-Jw~P3&A& 1 .]źc!â+:::ݭ9sx/%%%ھ}{R֭ 5t}IQ&INիW5w\m۶m'buuuB;vPYYݫѤnʕ+e˖d:㞜UMMMd2#8TuunΝ$tMmz455UV{1mڴI{ѥKT]]?F pBL^GU(***裏'ŋ#'ܿFUqqls{IǽX {tјV~~ `||S:YD?x~l+cV P _WEEZZZ|FPIITYYԔ^yZhڈ IOMt-[Lk׮U[[U^^:Ӫ)+ڱcVZ%KW;wK/]R蓯v1`0y^8qBLhddD ,?>͙3G?O"M$q_xQzեkӦMZd544k׮XWQQy]~=SNiͺ[tH]{{tM7iܹUGG._k媫.^h${Wl…y M5 ꫯZSLܿf^u}-ܢV :f^.]UCC|>:;;gϞc^/75::!BlܖjhvA&Ph@Ν;zj-_\jllԵk400}"߯Ң:ӻᆱ;SϷu.ܹS6mRcc500~[>8zꩧtmY ,Ą\zkԓzgqF-\P|Ǐ#SG?6oެHhR^^?:^{MG ,PSS_B+VВ%KTYYҥK:r:pnv{ڹsgd˗/ti[/h %54@ ^zIϟעE}N֭*=iWr<wH1kFFF3gqmL 1,4>>'ڰa֯_;S[lQoo555rUWWVGoaC7,)4+suMNN"o(!%hۧ#GDlhhPmm|>]k׮i޽joop JQQޮ5k覛nRWW E~_Uiis³@ ߯IdW!رc:vXi---{t]wippPcccSeek׮\~?S&K7Њ+T[[]|Y'OԾ}499!i#pq9rDGPq &"X@3;fQhp,ME 44B@&48&"X@c) z@pM@3{p2"XEC%yr=δx\.ח!p>*@MP $uvvz *4rbGF@]dK)"X@3{R6qdS#ho V\@cZIc@|Nv4+@3u# Ȧ,hp,LsȵBf\\h( I^;!NJhuFknȌ\@AI r{p$V J I>/HC8g"{ H}0O@#c#(lD3D1 1~엤ׯY@fp,D9I>Bx oD퍏/&Eo9&I%%%fYtBdYΒL>cM6'1\hf+{ycI>I%4̾͡tPl)Yg&ǙnE8&7. 0/xOUUUUEE]fJUqq***T[[*| EEEfÙBH2^buLe[XdTٱqf)ۦg$"2=Tl?300pU3ùHt-e=},i 5t⍒7բ*s瞕Bi !0fMee%|BIIIFYG$02Sm<)ojL̛9f.0h*)I'%_۷OmVp ***8^8ӘxO3d/,:NΓHA`!EsAI4'{|*G?.wunp ۶l٢t%?^ҳ>Y!2Q[n߮ŋ^ӣ{p?W~ Qk?>pҍlLB3jt/  s)sH7M@[jBVTy=UVV&߯ԞG(**ŋxbm޼Y|n 4U 3: 27BqIގ?3g;gAsт em߾]WNpH֢Eo|CK.$?~\w։'488"544YЇaݻ7\E*dJ3g$ڵkѡ4ME 6ePȁf:UkָO}ڙv6z_)h&$=[ozyy+++x\W]]]1۵{n|I>GDjkko}KWUۖ @3onQRRRXEEEzx9[0T Ԕ&''599qMLLzh0***"a׏=[rB!fu-SnJ'(-ؐd 0UowY2, DK.z*//9sZpw}W=|A|*..d򕯨Y###zGݝL }Źc(--UEE*** mQ5^2jttTqzPUUfvll~NBG)fㅐVlW9Ӭ8/0?MkkJҘ$>|k׮$t6qI_D,Yn$}ߴf P9PssUUU%׫`0hf?|>UUUE?kW%%%׮]Ç??{Ll#,$Qb%@JvY*CsA{4*ѣXl͛>֚kttTSSS?S9&.Ҹ#<"I:q~x4@az_2Ԩ4n(4VkFwS%giiJKK5>>+WH釻fz̀x^F&mtHtDV)dSlYcp3:4Dž+5K;BMLLLgȊ+$Iúxe۷{Պ+4g;wNO+z~Z+W=}4mO~R_544;fߗ%}SEzuwj|w^}ߏsH[K-RQQ.]ݻwk׮]^"|>}ӟֶm۴xbA>}ZSO= gъ~zIK/@Lr}sNs=z衇֦ ڵK73}3x%R'twh޼yjhhеk߯g?;+ jkkUUUedAhZp͛:UVVFfȈݭ .̙3 18Emii4<<\RRZZY#'&&YP>DjkkS__&c%%%WQQь)d%iժUZnV^:թ-:rN<)F`3\?4p,#+ϧ"X?sٝ7M(fieUiک4Όnɶ4]v.^_c/lA&%^,Ydkyy$n"LӠ9Guuuqmm&''#|>577kڵzGTUUӧO??OqqQ---z~i~o֎;TUU}k1Q^^>pXzg ~WOVgguVw}jiiџfo[555SO='Nh``@׶mbBcPVVVCCoo:s|>VZ\---׾ߙQUʹ|}<^y%INҫK.VNzFKz{=oEENs3Ϩ]cccѼyf:t(kl5 n~7C:G×zwu IABM)灁u8 ccc;wa By_Aecج:nf :,@3fcYNM;_)h$^|^MMM ko|˂BS/UȁY~7M3~ah``@{Ⱦ.[]m߾]G/~ 'x"B_NymذASwwwg?YԘ``@#UF ~?5ڳg{=};ѼyCcOf:;w>w*3x׬Y*MNNOOc7߯y媭 ب-[hҥ=_SSvء5khsmQ}}.90 =166vjpP9ЬVUVaThegfwZ&ƟDK7BC6ۍmG5ijF?)nsv"DsCpf\Ҹtޔn,0[i 7eWX*5͚=9IvL\k7/tδv4,mŒSFm/:R? UӍp4|0FIt@d=YeL㹌c*q\v2 Op3Գ2g8z>::2 Ց*3:̎3f:.[PtlO;kδmg*?MjLt0|on (6XM%+C[xh-^uc^n̔t+*3y6uf2zYEcVi<&|\xX~=1-mxF񊤌qzZ6VbF5VFo3NcLsc笢B^?*2͎5 -3Qivչ*5DAm *E$Ff/ܴf*4 1L:lmNd@>; og:YR&:.ָ-hh/1=ͬYiۂ2)Q.zq$jf]_ɔeZVՔL=kNg W_FOG4&32+.ͶEo 3DUfgvU?*4ʴvKTM0~c7M>+:4|ؠfVeipImVafd*ՙKH:-_B\fxM%f65now>5 1PW i 6FWgFoRVv3񦴍wlFr6v5oZZ;nL>մ~ch?gxj[p *؋W=i4 %T$zlY ʗ)g%gWi&ͪJ36i6ŬUhjF6ch=ݬY[53%Ӫ2^emfmR:3М4UfJ7*"㵉]A1 YiUiM+L QS2{*Nqv[ՙ L>lUi&jglza^vplK$S|'plU&Z,\4V!]:aL;ښ}oξdEfGNvV2Ҍj׸UVxi϶|Ȥ\Zf[[vLcV;UuSͼ3 h"&SinlLVc7|@MjV)2ɆljBIaf2KC9}Y)*D} *0^Vk@2A)] LM74-f@>Pn4kkw=Mcv>j|@zzv64ko3fg_2&̔$_NҌׇNb0Vmq9NgbK:&[iŪ̼!T.MTi;Uj}2#^`ixv5j\L5o{}ʫp4+4%wTiUU=Dßb0nv㛂 v1)fmk2fmGfz}[i/P3ĉM;&$ %  2$ެ6+y(ZM~^^KnLHi$C2B7{ RjL5df馵3.PpiUf+L&Q?v{&^|pLcvޗj\ 3mO/YyfJ Jj{fmn`jnh{)cҕːn괯2ͶUZ3 \u Ͱ٪ҴڟLi\21VmSČ7Daf+4@JR l(030e)hfLTi&ӏP3z2L2٪Fnd2afUy@fffsJL]M&+؜MRafD !rBlhheS9o&ǴZ.;Ӷ&fac!d:UݟOBSrFL921l! `-/ՠ1a&2PB'fK}TԴۮP5 I*2gs=O;OVއP)e'LsjhվL?TΓ,Q_8mMQ:n 3 B!J]i&)f96c2UBOmْҴ>UIXiH )(EU 5g_ɲSj?ـ1l82l{L*՚ lp%ݾRLi М~3jFKOf lmܟcg?(@SrԳvMZl*f2 0ڦd3LR}ßVRFde"$t¨Vgt^7QU/k]fL)0S" 됉@2pP8 fsj'S4s=qZiuLSĦ!'216Scʤ3%%#eul&w&_;Kr'!Z&2NLwN5|F D}dr|n? 9dLVx"KpfrriulƜM;bZ*L"0B`en^f}rL F߉_6fRYsCivl; )0 t'afhPӬپh6hAǙ33-r=P0[ehM`@e k )~ aL$)!lMNyM`ɞ|5vuw8n ՂX 3Ⱦ\VqN־N7kq"X$̴@39j}r%S&:l"̴*yz͜0- @P{%LUjr9J{  :03I\r9-Tܡ\ߕ4 c0 p\0,}Ny 2# dS:)p%¦qkqP9eN&e^O'% 99i,F(yN|M8&Lpbp1AWv8uuЩr-rqrX䱹V5v@arCP1AqkpMcu-ۭPЭvȇ=]spB>HM>* JW(ӑk@:8pMr AϜk02FE`e,L $s'@j1]`ݸ~dXZ"` !f!\c1aW#, [NGY`=rWd %"B@"Ha Ah pp?p$`&\"HrYIDAT WIt+IENDB`extension-manager-0.3.0/data/screenshot-installed.png000066400000000000000000004503131421751161400227170ustar00rootroot00000000000000PNG  IHDR47sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|T-daK"YPpcE\]Vk?AꭽZjʭhZ{ ʎ,(EAKI$3d|<ș~g2ȼJ]QE @!PLnPLx>P<VQK<:@N!a'Fd<B؉(4BNXs;.0gJgB3g'F9s]f'CyG 6~~!,Qb@z6K Xg]%3-"FXVf"4+>L `~<^C <*3*~]~%Blw@Lu ݟ@Uq> ;C CI!ʯR}2#Rw!ʟRz@ 5BRU1s_bV sqJAVnKXPMm1S ʍb{\ 1@gSfpe_|e(+ޟľJiYֳH1Vg&f]'03^0d&: T`R' 6SLXkik*<*AT)Tgf&Lel 3bUK yG۩Rr&UBR3֥f&S+ȌbR)jwt~aiXCCR$Ԥl S\vK&̴+LX&ۂt۱1CLTљLjl)f)Tg"̴;Gv6*TJ "c,KqL2U5#ϗx-_li^6x׌n*A/:淴 )cuLh\?޾vh&Pټ7fffFdnwHr)P8 RhXǗOR{6S!# 2jflf&@{uf.X-fʌ8ޭ3rB>:L2WԦ@٦cjx-hsjR9*xf3 3cd׹%)fsg[YYy'4M}.omjjZ7pͦdfp]`3鶞J3:kYD՘LAeuɄv݂u]p ?t$U ;>3㎯t ܯɄvA?κnw*,!L\4̴، 3#˴ ~u|?1^xqDLӴ]0 eI2Mӗ^zMSjVRRP3<鄚TifJtlTgfڭO7tI*WG{m۶=rw  [fh޾o߾u mvj&^&jJ@3 ĻBUg;>ֶT>#UZnv<*%9͛wvCCÂ`i~L$YY$\q ͛w9FYS,$^Wd,ټ&QLx4:Ra&[5mZ5C2%7n1@>Vo߾ t- ̫Zyi7wf/,+˱*ͽ U h&wdƛ+3vsg&j5_dufd٘af}}n4 VhV]]ݿ)q.lm)qtҌ5fmgc#*l-g)MTkD՛?xa|&LPdB }Z}} d8")K6MT+)未u@3[雜cmO&n^#䫛$ƍo#&2ܸqm 8=f2apRjԩl!\f̹쾂"!$9y睳sffb_TUU];-ɩ@}Hb)2o$Pgzy_2?33c}B 2,vج ]T \}I̩\SS3Q.[$Ky^ %-#YLӔarcg͚u̴iV+} و_2vRta.s蜩\, oG2*\ɴ׮l:w;w0#h5 JSKK^otyG.z4Okkk&Y2Ŭr[6#EM]KYo.1 rJ>l EѪ6Vtd>0#$3@hmm՞={3"zgz(`a?#Px&/; *ֱhuyr]_gp2tjegrI[xP JEKKZZZ = 1Ѕ4^$} ̴[ڔ456UXhl(P Rm7 \S$@dYm9%glAVLȵP :2.>' 2b)&[YQ흥01c<x?s$9g͚uhR SSSS MMM|."$>:vVK"`F뢩u:p f! \3qKߓ ?m[Оyߒ3@i2(-ȧ`ё}ĚOJ?VƓ>Vakg4E2AdtK#' ْ%Iݻw?&ε-0R B`]V}ҝ01WP$8c'' =Ҍp80(M^W@ >6v5gB,E fQrt= >VP䏱ݰYo.Yɵ: e_TTʣC/rDYP =ihkk#Ec6iї+Dw&mo3}fKp[T:iSuȾ4gDf ÐGd&bv|COu LQL{$$hC;$4RY.>& @wzclz(ɉ 1͈vyǁu$i>S}l赏:CÜY,:߯vE= ÐQ!yH, CᡥB rO!븒BȕzdLɌ-RY4C. viܰn6﫛4ﳦrÐ^اۤLviX-ow---jiiɹ[[[ڪri VfJaeu:VfY#WaOTQi7exAd' 쾂!!ۂ.I% '2ٮ] =i.@+}M0wDUfdyUfBOם˭֦?~G>IFǻ͆ POOwCTkvRjjjJl68NUVV\BfQ{%w,7fȲB}f9ln[}">Y%+V>X]#eh:Nh~MMPR4E a@YbVeǣ*lZ~=.\ӰB̟Ѥվ} r*y<^3F 2_Mlu;fmɮOV\[^WjYGU %-XYBL4e:_,̔qúipLwie{ӫ%_;Vt/X)I uxHيlNc*68rY Un&?}U@`lʔ׿^ϭPn?Fzz T;tߛ^mh0 5;Psss!CPd%1@Tv~e_X8.y7c6-[L˖-ӺuT__{Jw﮺:9RǏ׈#X u3浗؜aioK!}w|Ux o;d!6iƼ6=tGi~Dyޢ3p8~Pj M3bY d.~%a.xxRxWulJ*cHFtL)z~DfpnmeҬhhh@bMPC(]]iM׫_~Y?vޝ1{֥^ . Pf}ЦW?.6ㄙLw'(}S<S&oBYZ7zz!+5u!shNP ܧy3u`Lr伙seny6햓K393pdHڕ+4ʜ(Rmmm={͛'IӨB)jjj*bjjjRϞ= =lLg{zE^7̞=[/ب_~Yg.dizgu]wfڶmNIr_3#ǝ93 2> <̧Y:ZZZSKKK Q f}]]s5 "p jhh$ 2D<@J/Ir:3gNǀhi[o0 ѣ%I+V~3izg}V;wO~ڻ ~Zl5kv3Q[}4YiN:5כ;wn^)_aaKK 9|fL$R 4 y@Rd2e̙z V駟 3=jON:$tIN:I'x/^K.DGÂ͹sk6_o2tA֡s=WڵȶW?. h03d_gC㆕z`Q +YC~ܮC3X)A---,0 $bCIJɌePr^va}߿C̟?_y74}tUTTdkї%Ug~czjTI;瘞vL2 CkڄBΥYjsZS&ՙKkkku 7NG}G}T۶m$/I뺭֭[ZA]BP PB 3ihhЬYv>֦9szsI;JUVVJ|&L7:C}~֮]k +@SRTuLusK( 6Bܒs^Sv,R~?+SܹSկ4XBw}ffB|( R{d:RZ6̠;wf2l2޽ۺݭ[7=aUwu͛o]SL=o{G'Owaojj_nk.]VGuTGcǎW_}es83x|R_Jf̓Uz@I;iX}Ϫ]CkUnWޞUUUڷo@8Criܸqa-]T<@Xʌ.Wȅ:>Jm%hGnA {~עEuV\. }_~:uꩧ5믿 j˖-z0`9{xOӦMԻwoxרc,X7|S~٣2w.mq{wͧ{mNo @ȬYtAڪ /z3nԩO_)n[={T]]F38CQooo+{O7oVkk 뢋.ҰalO@r>Y'2RՙARw~#pHY}֖W_}uX ϧ|P?я4~xIҒ%KD].mmmhZņ@3R+Ka(rMMM5kV^ZJVҥKضk͚5{IzjjjR}}V^?^555i>У>m6mҦMdO~ldƍC/[~z_^E]|;'1cFXڪO?T~iNƌ[.qO3󺺺ZgϞmw\X5Tmܸ1ln /PݻwOxܚ5k꣏>ֵD766j̙7o^z׫{jݺuz7t뭷Ft'+V 47nܨ?Lsw]wugs? 0f͎2ztI;o.4Lmc}ȮPh"Zf8 ꩧ~PvuyetlP)0Ƃ銁&!ŋ;D W"Cǣ6޽{kРAo8N?jN 3#mذA<΄j۶mOVk|>͙3G O@ I[n =tШ}IRϞ=c'XihFVmٲ%q&rZ={tҰƍvQ喖|ھ}{sرC~~裏H[reԱ-Zgh._Z.++۷nUWWkȐ!alݺUrKׁgyF ҩq۱7*4T = v42,ǾF( &|Ik]5.r]~_Φ˅]1,&UWUMM&MÇYKk /h._ܚE {9{|ڽ{>*1chΜ9Zd>k-Aiȑӧ=XG=z޽{fKڻw@ҥK*2 ,5}t;VNSk֬ь3k.Ip *+;z*,:t;nݺ2衇 {[5qD\.ZJ{5>LJg)OoZ͎PY$0 7˅{{:-sE1P3R3RL){cϱD!a  &<=zX'Nnjm۶ aV)-kjjn3EԺ:z:thXU h\R+Vn_zaG}:=W_}C=TRlh4x`s=<2GyNk&kck.ڲe%sM7ݤnݺEm۸q^~e[ވ#4i$|ͪ$}嗚?~؇&OVIrJuY5k$IVe[[.]O>ٺ_} mkfJ׭Zy3-[6:lܣFҴiӬ9_#y$'ާBM*OϞ=['tF\zkm|AXUW]UسgO]s5uyX08~ԡҥK\r>kVntꤓNnZ6MS/XF;ndSN9%jjU)h@?Fr)5*t&rZaDa?Q ]43S*-ceJ޽u4My/0֫9 '9sXA W;N'OL~ZJ} 544hjkk kk7"Sl:l[N]]]XaÆ@gϞڽ{v3 nׇ߿Îφ}4Mm۶M?> 4cǠ>V7f̘7n ݣG5 %C\d͘1#hAiGQ[[<.eF"2tꩧf5 zw"L4!5k曰m۶m믿_]zn賳zj=c{d7^"UUUr蜂#Gjڵ˗G )wڥ۞'^IJ\3 CuuukU^^EUF @kkk*0sN4iܹS7olUIj֭|II9rdcnV ½4c ٳ'l[}}^y+:3;fh"~v>TQ]o7 `gYx6TJR2){顇 3 3MS?nL5EJJٵn̆L|;v9-ZHK.՚5k*$y'yX֯_۪&Yg;L}QyyM}%2ꪫbXAC #ì]v}Ǐ?o~5mڴB޽%ů ͚7o^:VƹtYg7o|رCrH~ {lw-B7V\}YرceAYU ,klƏuI&i̘1?.\իWk޽a_)_ 1>|x{u/@SRBͻ4Dͻ§Ϩ~iөJ}=aaav裏Z~*5NgFQW,Z@{rr m KsnvժUaƍ'O~ZRu&4<>#֠#:,/R^z%kyYA4|kaassg@Oiu-7Hʺ)%n*"iGu8馛ª0CC`feeeT׋Tdt>|qڵK/}٬Z^xdd aUmWWekr_~14Mfv_jUOd/FUO-áK/4o׻^z7Ŏ:ꨌ7tаӟ~ۣtzs,+WԢE$Ieee=zmҤI-[źlիa2dnQ__o-;6g}6lU@ -gcqKcZs~QY\nwF?S )S覛n SO=ѵ3{/] ]B4$颋.yC|/56mO<;N#GT߾}U^^.߯%K-XN8 8P{ Ն $\wUQQz=s ڣG믿͛*/m?Cu)XvMMM[u 7cٽ{jҥ:u[>t믿hX^zJoV ki%"1c{n]ve*++Ӌ/(v_V=sݻvܩas}ؿ܏>OZrU(>(k '#8B~ܗӧOUW]Çkz'Xǜq:#m7qD͜9S~_Vx8f̘zȐ!0`2wΝa爴qF͜9ScǎըQԯ_?UTT>kZ=zGOכo)):p7[no|7Zp#F $I#꜒r3CV<]Y.(0 7Px\E:vmf =6SbKugX|V^իW[u&_)J <í ~J555GU]]$cՒ%Kc|M͝;Wn[^74H_|@޽nvz _ZrUqب_2 Cjmm.'Oh:N]s5u۶m̙3; vkڴi;;wԭުKÆ kjŊQGWXyݻ>sqaʆao CKjӧ p8HӧO~wء3f߫W/x1W]]:J}QvA'|?2dmkEiŊZb.ivnҲeˬpu׮]/~!0TSSVk.ΩSh@SU h2:RC2 x}z}:mDU# OtI2tP4v,VCN3l.tnSLSO=qt:މfc1E+ɓ%^={v,8]js9Gg}v[nE?Oگ655Y>묳$Igy,YUVYi:ꨣBH\r,X`g-]TzhUUUOhҥaO >/lOGu΄@3w%p,qt W\q.\ 4Ln6^ZK.զMبݻw\Dt8;[owQ}}Կ9R\pZ[[tRZ3?W[[ bM]nM˖-ӼyӚKW^ȑ#uۆgy=PZvջwo5Jw 6h޼yH\slfSO=eUV.^X/ѣe>C+`lCSꫯϝн{wOӈ#tfMQFy-ZH_Z[[գGva2eN=Ԥ5i$=a~ހ/?P ._|]vQӧ /0l:u]ZhΝkZ:蠃4zh;020yS~Oc10?ڡutX]n0dj]WoCeVx}풿]]9Hw_60 ?ߤ?4.8أf5 ViR Za$L99w555%%).oG.+d]p9vﱶ)bcٖTL_M@E(=a+Нwީ}}:_0?T* 0ߖnՂWM`}t6 5UVHNh'bWJcEqlxUjjjJTmmmV Ə?^̙teyuu.2j@ɛ4ԡW9Jl)4d ~ڗm߾БuM^Yp*&p\---J\|/-iDYKce-Ԭӳr.xt饗/ڵk`}Gںu'0TYY裏ք tGi8nk C2fG?/_ެ]0#$}2nCcTfry^|BŖ,LB"TjP4`LЌ 94@Wshϡ gmz"|o3l͎4MLLO-k׏c IDATN.lw۩߾^%t[GL,t8Dr7zz!+5u9C3K1;c]̡فڴ n ?X ͣi )o__XQ>Q}acZҿ/KrTUUUaDyX(4^pKeŖM-gO)GGpv}OSw?VFXp͓r8aUoǣBRQQ|& 1tB#*` JuK6_I}e]GSVNm'ՙ[nEjVTT[n:)\xBM*M*"_r9oҥ~s6ui:uJNͤ:u֭gJ)$)AVO& ul}MM(C!$ IL0;͐]>z==q;Nu^=ufk@R#j֮,JQ=$ϗk:NUVV2gf TRzuXÈX#ƺ z#mWegm Kﷹkc׮]4UWWz `jƼvQ$yLi%3/.LLK:Lӧ)jQӺ5{e-V[qЃܺiGCk]r\aafpY:hiiQKKKNQ^^^#`䚚v|~낷͈YwEk[kDdw^;# 4@@t@"06qi j}2M_X:C;rKFѨ!=uX ʥ Of}ڴ˫u[=Zvxۭ;ehu+áGu29N+2 EY=oYY˭@P4ڞ ,#$]&P4@گ?-iVjvVi$?{S?Ъpt #h:2 s1{ 2Rٹ~y^݊tLAffRۓQ&M%m:ءz@2䐩@(4$/<S@T1! +<ΩGx4~3,$unݺ]mmm||aXm( @Er"?/@MФ׼>-}y.>jJL$3V~_G Vk( NG#pJ;ġ : 0hJ"<<O8;7%vh%vz#:td_M64ާwڼGڱԞZsgGP304 mhAf*@YIafRe{04ơ5@eWouDP QxFGQEYEYʾbYJפI~6m$mNu]曜s '}M4`ZqqqZLN:A*+<: 5&L-&&FQQQc\Mvf ͒KΫhP[hl6rp8t:UXX鲀sFTTe 2HA$%s&j ͦ8EVeHe!`ZL@ih0-ME 4&"`ZL+*z=zTt:#\ @h#]-4-4:tt @Bih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4VT \ru)##C9sTjyux'_Jl6֬YS5 0sջ+I뮻t-D" 4 ǎ 7`L0@'N,w;vhw߭{キJ4'jѢEYԱcVTxjJIIjG_$+ղeW&VPP'OIII`EŹt<Ӎ0S< 4P0&wn0n˖-tIt<۷odc^z~@D MPe~a5jԨ%!!A?pBI_uF* 4@ٳZj2j-[jر.Rt9 h &O?TWǕhիWO͚5Sn4h ]xjZl<jӦn}뮻NsE駟JNNV^CUs>~BB>3\.}GZ|>(ꪫWe^5k}N'Nĉ%Iv]+WY+Vh͚5:vӕMe˖۷ $ɏ`WVVf͚k*==]v] "Sgʔ)㏍gY'77Wv%I6MGoQjOP>K>$hB/s+WԒ%Km6:uJj֬zo]u)sH?O4$~=_PPl9rDׯW޽K}ѿ{n=ڵk۷k5l05nݪɓ'kӦMƼ\*Sj}[N֭ӪU4ydY; W_}g}o>۷O+WԼy4e5m4ǩH{ӦMz'uqc^~~l٢-[TÍz~z9rD_kˌuOn4j(i& cɓz_w8Ҏ;h"yk@E`zGJ}үAj۶:Gȑ#}˜h.K3gԗ_~Yn&M 3~Vkɒ%BVXEgXd>f3nŝ;wԳ>[zxٳGcƌ 35k֔{;uꔱ~\\|I0lڴi*((T/XX֣GyAO)OuՈ#J%?~\Ǐ͛+ܧ'j7Zh ]VYYYȑ#??W\.233c#)nڴiϗ$GU~7ꩧ҉'$I/z={N:ڳgug[Fiܹrrr4o<޽X>sL 2g`^^zi͚5Zrx ]{~kk׮u릦MgϞj֬umܸQsљ3g$IׯתUԻwﰼ.^W^yEnۘn߾nV5kL?-Z{ީSV/K/Ԙ袋tkΜ9cǎiƌ{'''g0S S]oz-֬ڵ߮-ZhϞ=zwu1IԩS5{lEEl&@ZZqb_KE5jN#Fhtnt'T޽{չs2k ycJJJ2 Cɓ­\8͛7WΝաC7ΘsΰM6iݺuڵoIo~]wu>QFiڵڳg$סCo>IEy„ jРAЏQ׏}?4۴iwyd/BOw}jݻW˗/0@G`M41{<7N/[og)ٺw=XaV^^^7UӢE D*ꂴW^>:3nݺun7[zwlFUn]Szꩧ-I*,,ˍv[=V$׏+V>|x֥III9rϼcd ڏ'飙3gpH*j]ԴiS]~4hPa*|,o *v>y3qİb%[m2/Xn[֭ӆ  u5iFO?tVORQ׍׈#4qDW%2թSVk]c:t|A_Һu~eeec1VP[Q/owfvw7jԨ x DDoRQiٌie -4 Փj5t?p<,K8pgaÆ>ӿԣG}7Zj~R--ZM]D WFrko߾}O ۷kr: :T]tQfP+`zSRR|8qBw^ 7n,5oƌK* *b*ߒddd/ٳg}ʠ:S>ժ;j۶m]h\6˖-Kkx<ڻw.\y|[Wb/鹕O>[eUe_z0S~mn:nٲ?`@3++蒴QgCu_? [2ܸq@s>]@~Lڲeu?C[Θѣ4hP-ڶmǫ]v݆^q>̙3'1j@^?I,s[FEEE!X< dyǻd:k֬RˀY&O IRLLO3fݻKmSi'<ŷS|jƌ>W ڏ@4tP%''ӧOѣ5a͝;W˗/￯c^0ֳl3fϾۧc>Ю]#IrZ|}UVtzz >L۶mӧ~cV*ך5k*9>3֓=y[gөzT[i'<]v:wlLgddh㏵m6-[Lw1Zu% ϪzrI&Paa/.]KbN:_f6lؠ 6TPP`uWL?k,ԣ>*Ţ *??hw5 / 퉛P(_եK㏒B[oUuٳgGy撤={jʕƶ .'|"ݮjMMMծ]$IGvի^\pAC96M#;I&T{0Nz/6<|^|Ec_!Cbkg}&Iڽ{yw}ƺ99PXV=6lǏkʔ)~ONNָqx ڏnݺi>-ʒiӦCeƥ+%M7ݤng^bbf̘޽{xy<#̬[Snw}v1vu)Z*}Gybccf<҄ v]=2i=g# xJ~B=˓^{M͚5+w.L*ʨ ڍ.H~ ^Z;vЩSdX:W^k y_^V޽{LթSG7Vvt7 cӦMsiO?c奤q޽⊈UU)ׯUV7ofΜ~AGQbbZn3&j/O?T-Çt:ղeKu]wqj*y<ղeK͚5KӧOt:jI-B?7p:wYfiV t%nS˖-sN-Y$c~[۶m3?e˖tbb~{_ۭ~ZsQllWPߊtM{=^ZV~~ԱcG]uU0`@UiU<P{Y"]@%֊a)m-e~,y)y_}[iIVñsvܒ%~徧ش__&?UbmoXS@cU.g[* IDAT&"`ZL@ih0-ME 4&"`ZL@ih0-ME 4&"`ZQ.U'% %%9@ &@T{N^P1jn@#*HoPPZz!C aT^ Y|YYYZ_z<_xI U@  ӻz0ad x`O Ճ@BTV/ur\rre^ bjjfjZ`Pƒ@hrrTXX(]>PPj***J6M6TM&5 <4 eu/t:*,,2EEE)66V/xc `at*??G6MQQQ8&TRyaf@PNS.KG6MuQLL_,nN:r*((PNNBEGG+*W턚>P u 4nNNnݺ].j*..Nqqqr8:{lFGG+::Gԏ 5 8@L%atA.Un~שSvl6IE-4n7&&0;vPxZ^=bccոqc9s{({!BM&T 0tpr)11Quԩ2VUQVVѓ ZoMBMMu3mrD pSJ IUB*nx 3"\!"ӧp8V15_N(C_ȕ 3nkuf@qqq[ѫ{G+M&QIoxt:t:jf)C #1x>`FJE e#p+׵ :X@햟HQ TPPF`X|Zhnl6n?{(͌ @5[!@rssk}Y\vvrss#]pN;&<M8L6Mݻwȑ##]9;fϞW[yǎ$%'':3C_}&L !ݮ+PӦMrtZJ_}rrrki۶m8qv{Xkx<駟$WǎvA?^$uYSNBJOO~z]z饑-0rTPP2"@"Tُ&#?fɿfcaÆرJ+3g>˗믏`v5dIE&pEέ[RN4e5og.]ꫯ֨QM۶m_/KXX,1b{=]|СCXnN}ݧǏ+%%EO=zU7|\._3 5kNm9\N8RBs+i{XUIqV5Iy)6uhZĨ}p+b! h@-3fVaanZMtaf-Cu)sVZF4͛7OSϞ=ZװajLw&LǕ<t Q^GZSVWz+J-wp+L6uiDt]mVZIb lɒ%:z$saW||~acz̙UVmذA~$iر #]ij{FYuBs?x~y|ƎwyiڴiJJJW_}w˥>@K.eXԾ}{]|ź뮻Wj+c%qΜ9ԩS/^Ei׮]y睧k+|Ε>:G_/˥6mK/հaSam۶I_16nvXBRQK뮻X6m͛]w)˗O>Ѷm۔5o\}Ɖ￯_|QVU5p2u:ڰa$iZaE0zեK-X@|8^\%z<~pnzai]2', 1 0-6^QvHREreftTҎ;pSpZ,E uUI4Yx&O,Iz"ȑ#z?߰a6lؠEiʔ)ܹr.&3ϫ䇳 M8:+--Miii4x`=JHH(UgWNIڴi [lі-[gwQFJm[Ҏ;v%^2th9N޽ۇ*++KSLҥK}?~\Ǐƍ%X`^|EY,o+7̔^[[;IЄ5&@C )wy"֍f^^eddcǎ7n:t ˥Q?>U x{ܱzw[pRNu[JV%́]tԾqtHӿSwW$YsF}DI8V{=gnLb !ZhΝ:tW^3f0‘Yf)*j/X7x9_9rdP;СCjР̙ Zhkʔ)Z`.]!C. X`5nFt(11Q?vZ9rD͛7/w?gϞ5'''UKݺuև~;v(11Q6mj,_ڴi_|&N(ǣ릛n h3gy4|%&&ӕ=?>5'+^ lQFv? ŧe8o76Р$/OjwCt롹?NqZ%V{*W \+77WT^ /\ oJ*:?_l2M0h!h|ƒ,nVV8ϣ]r~}k8' 2F(fz<y9NIE^Yڵk'IA߸o>JWz26%%EuԑjY/Nݻg6 ؼy'^Z?\.1RۧtuUtPpO@*3V5v@}=6>g=6/y_jz|AҎ; 5]@-t%誫ҥKqFnYUY+\p8P(99Vi^mڴT+666Btt㩤7oެK/:.KWffkܹ`*//OtEXy<(6i$}KS'ҥK5n8裏$I *s\`EZl)cԢEs-(##Cg֪U4yd= 7ܠ{Nz뭷4~JQϣPpOsƍꫯ'%%_ʪ>FF0n4{m.OԑSN-RslNSU7gU{%IuU=!yBj)owQQQj֬Y5h@tСJ?fV(m۶5o$nYC>:СC IzwKfiҤI2d5m4n5_o(I+Vi_ƍӠA$R}w* 7ܠƍK}-^5|XgϞٳgu!⋑.ڼlK_vů<65i׸>{-[;vD@h@-K ;ٳ?4z >6mjL ,кu*]j5MII1=={~'}GڲevF*%&&Tt,^m۶VT Ď;H-Ծ}{IҌ3tĉ#IE&L0A?Qv&Ol-Oj~-x8")5 N<3(##ԺǏ/>eff}=ODj<[\ U $o6Wۊ̨_|A Mt[zzmۦy;ըQ##ܳg14_wuѣtRZd|r?8xkz7r .TmڴIRQH8r8ӟ7|S[lQff6nܨI&iɒ{TwnhU骫Ҙ1c$Iǎc믿֞={t!mܸQӧOСC}ݺuz/j_WY,eee[oŋ ,//O[lK/d0.OTT{9uA3hڵsEiʔ)̙3u^ʕ+c޽[}.\ &hڽ{pGP6lؠoY3(33S3gwLxۭ;CY&M7߬[nE}A՘v5K5D]6.҅rY8 (VE 52̔={L{<BM8Y"]@%֊a)m-e~,y)y_}[iIVñs _'zny<nn*//On7XB=PwI?:v3馛'I-bc4|M6kuPRRRݫɓ'T~)'o®ݻw뮻2B8[ny 6mڤ'|RG[gLLƌ[ohZ\Ri4o}Z_?/K/ewqM6Ճ>]v뮻| |.\^xAƼX֑ƍfffѣGzRA޽[=\@_ YVM0A6rz~ z xJ_}z'|ZWZ2odX|>vM8Qݺu {^ޡ(#iVT֙nY }}{D+KZC_FbJXTt^$vҒ%K|Ţfw!3WTTVV,i ~$lI_)6)W~_ئ2[2)k*5/Q.)))j֬5kZ}^ƍ_֮]7ݤ.]h̙JKKSFF6l=z:tkmڴo/Bk֬~EEE}JMMW_=zݾ]voj֭:yZhQ]>{ァ[j׮]:s6lݻ뮻ۭjΪ6`[K.Պ+k.eff***JWǎջwo_v]WLLx ͝;W7xO͡\j׮]ڳg\.ڶm;OT>}_kĈ:}x͚5+c۵kzK"Z IDAT7o7| 6(##CgΜQzԸqc5mT_~zlyi^O\?UphҤI{钭y}bOd۩iLIjĮjŎyL,)G6Ȁ,55U|BMoKMI5.T^MߋDMi ۂ ԣGi󪪅fffn*ܹsU~*wuмtg4t$KSon#Z^EޖG,6Y65fM 6薚!-4Csԍ7H T_~a~* 3CqLC֙(6Z3c%h3.Lwر4%}k|`LM87,PEF+Wf6::Z ҀԺukY,8p@˖-… KuU+9z(l9\*(,j%mk0 MЊ"Ţ-]gVڷoU@O)))zW5n8uQ111JMMսޫ7|SM4)'|RWHPy_C͋ZuE⋂_ZiޏT-5?sZj@-E Tǣ/(M4hiy睧gyF111}5'k@wFYݬ@P}Ĭ71ȣ' x[M/tt? &F7nwܡĉ80n1;<(5?##C wܡ~!,5WӅ.<>-4[DGHiY^RPjM ^}U}*ot꫕ N׼<_/f[$ ZLƷ,P @kYZj%R򌌌ey~ 5(^0xh]*I&P3---…@Fi!WZ$3~M<cMIbL\cc@B QÆ ]~urçF?{wU}ufFB a3Y"QEY]նū]m]ߪ߶^Wm~ޭ[UnPvBزȞdHf$$3g2gΙ39yIE=B&|;49>3gh2E~{?M=JIIpmۺ۷wlĈzG{T[0I /W^Ӿ0Xְ}?:5=af 3'L})Yf_ז-[n͛uر.s]ںu^{5͜9OjH)l.: +XǕi[kr}O %@?X,ZdI].~)''uO:'xBݲE܀c⭁.nk[fՅ@'+V#/o[9rD555ӱcViii,/_>)0cǁ5XǕi[kFP; 3-[F T(^xAi]ԤkޞizJp3R]B <ÿ(i[͵zj74mPL:ѡ .hΝ}ݝ;wϷ;P2J OV CSۏ5w %Z貮Hnn.a&\4~~nLLLow 21"%t0V͍͡(o_ 3eH3"%5Pܴia&\4~'|Raa]q= ο6C͒Q. MIYrK %PsȐ 2̶0.@?3g~{;*oV曺zIIIoj;3z)͙3g JWGi KSR'`0,2 ^}>uuJfEx PtfJZچ溳uv-,3\<봽sghIñk s4Mn)4Ԥz@ .\p8Q||>ۭKtIa͛} EGGHgfbbb?$m;V'ޫ1[s[nK2]r.Mܮ&]N;4/=M?ʫwV MŮsOMjb; K/szYPP ŢHl6Y,1td>.p@ I)Frgwk"?jNeL|X4vXJJJtiZuuu2 CרQ4qD :ϟ@}$i7n\?B'.{ǕK.I G}4U o͏h t]3 <ܬ wKiՉ=~~rwj+$=~N4wg 9o7ņTّh͝;;U@ЯΝ;j.'OJLLi1bDAX?TTT$IСC&*??_gϞ?OM8Q ,PDDD՜m\8?p٬Y?9euck]J'@ð-d*Mb)Tj|y`_v_)atZjN3ly] hӧo>r-A [=)22R<@@?O>?YV͞=[SN566ѣ׿_ '5GEEk_Zl h%tЩsW6UF03ԦKbmko֞PTUf{/7kO4ϙiXeXH ףBvYZcMAj޽ڳgYfɓUSS5k֨1@ɝa'̩i0ee=Zd(nՏb$MA̙3?Ç{Ulll֋ҥK5aUVVj߾}\) e$WAfV%شɰXzzMUfmnKikͪoe2R}L3!g Ĝ?^JJJp84|p뮓j6k)%%Ew_幹iӦiѢE햛O?TgϞUYY""",%&6RSS^zɻή]k.I҄ twl>өSTVV&˥Çkܸq9sfpuwSSSO?TOVuubcc5rH͛7OC 鰞|j*%%EOu9}>JWvv$G[KNNN8R544(66VGֵ^ۭFϞ=k*""B_җ׻zZGO/ٚ:uz۷OgΜQMMMǵI=~v?je]'_SSݫ3gΨJ#FМ9st9;wN˗/bт t:tH7p6G\Z:tLiӦbرc|r}:v옪5|p}_n=}8N}:~Р(%$$hԩ0aq?cnh޼?q\OTPPRl6СC*((9xԩS}_zoSxx*++w^^Æ Ӹq㔕Л(u|~ꩁ:~ݔ*^OWR.3aeh!aa$n%[@N_Fңu'[TZ[:ED8aV PBizezHyyyZrbbb[NQJJjkku >}5k,L0劋ӨQT\\_.K6: 2D\sw>ͱcƾ:9rD۶maV\\TRR>}Z+WlޥKi&?~\6Mv]>pwQii"##5|pY,*??_#F>bx[Ր!Cuёj[Neee=>|g:qD]pAҩS4{l}GjjjRBB"""T^^ .̙3WP8>~-/'*tw€̥)Ij 0 7[.U?]sSH *rKbW%j6E)cwَ h@0MS4k,n mܸQeeebŊ~cǎ*--Ղ 4sLZvvءT 2D˖-Sllۧ[nEfj]v@'O… Tu9}ZdޭzPii&M nKj&֮] .xu?APYYYdii}Iʕ+uW}xL8Q7py{\{^O~Oz>Ymö;w\馛$5A/\.W@0--M999 4|.ͦq<=vi)==g 9N\RƍܭZo/.Y'|r:>VU˖-kK-[nё>@eee>L2E_š?\ڵkUVV]vWffwUVVj͚5*++5{lz{@GrnJK7\R9Giե 5oK -)oiڰH붙#uWfMݗ}^׎ޡn n3FD-SFJVkCjB_3|!uwnԩS:w\=waaN:T͞=[:}tWRRcǎ)!!AK,y]IIIZr,=+^'.] 3%)""Bv$W,**ҩSKzI=#I޽SQQCiذa~ÖÇw:,bEE֬Y&-_\#G:/Xy{\{^OOxSTT0%%%y;yy U=/aYWWy|I&{III$5wszLI>RVV&I;vlE]lٲETZZϲ:zs%瓛oIRttϟ/I6lz6tPp ڿ8^@Gre$ח)?OhH!ðx4,N͖.jvO8Tt@Y?H.Gy*pqVAS/+yGKP K6Xu$0ug@ ]th@X,v 2DSLѡCty!] <@W %IӧOU\\&LǏ󊏏 >>^VU555r\ݞó:ٳ2MSSNqxZUUw}W ;5f̘J{okOɕ(::g?HFyMÐLSrۭJ`˗ܭlzx-2dȰ/uZZ1o2Ej 3j0Xh@DIRyyy=[eھ}{kjj3gΨL555jhhp«޾_̙2iӦM2 C#Gɓ5iҤNeKKKno[c_G/^덮=Y8^`9\~08O뺱nlOjlzu!g[M 0%hgj6ei 7@^7 ƛCL=;FNd 30Hxl=`:tOnm!wg{>nz^:th =Z- ZI=`0 ͛7O֭SEEN8 &{\wGOޕxta't׷[ARM ='磺:*--UllFq),,LEEE:qDۣժ;S555uIHwmt:qFEu]y4X'u2#cK8 E#hr>+rhuuA%U=b$Ԕ3-RsE2[:7 wn[:4=7xllcռH6yF$ V/@xu3珙vyBq)33穵\\sx^W@QFiԨQ]>YxudСK.xkڹs6mڤvCvw`;ɕDEEFnΜ9#4}=5VUUykhhPnnzz{қ899Y'OTII7p0a٣jmݺU7tLԱctIICVVVphǎr8j<y46mZ[//C 7ܠgϪD,I999:vbbbpN՛v=:m<x᪫ tA'd2z*[_n}/ '[mCag =p6lJQ7nTuuf̘n^0.4UYYs_RRNvaŋi&ϝt9Nﰣm.kvv?^#GTmm֮]:PjpjhhPVVϼ]z㕒Fmذz=^4ibccu%mݺ7ѫrJOOW}}vÛGWrROOzs'z~)..Vqqq {%K.iǎ2 C IDAT~{Q[[֟'={|_8VGaGj\eZ]Fh =Cz.6M6MvWoLL`E&"4u>|Lԅ r4f͛7z:y{=9RJHHmݦիWȑ#:uUYYNTWWbJJJR||.\=C+::ZEEEz7Zs=Eiݺu*,,/Y,4MM2EsiWGo몞xb>uK҅ :࠷ͦŋk:vΜ9$ŋ*++ӝww~L0l2;*))Ѻujժ}ћ:z{ZO~OzzO8Q{ё#GMOO}ݧ]tIIII?~5w\8qBWjjޞӧua)!!A.޼_ۧ3g(<<\Æ SttΝ;&] 7pH9#G#==]ǏܓGQQ7}y~y=ӁgQ`YI B+W}㮶al]-kݮݦx.6$?Ok455vjh;w^M:UsUuut:5rH͞=[ ,h7ŋUQQ&%%%)..NJOOWMMjkkUUU͞=[wu>ΙS*&&FiZΝT\\233fi񪩩QEE.]h=Zv]6mw__xQa(55U7t233Ag޽wMIOrZN*%{ĉZx:$^СC5e9N9Vku5 o;EǏW^^TUU폞z{f4M竤DSL(=Z5jC+0T%$$t:wRoGgLLFթZC ̙3|rhȐ!8qbGo/IIITmmʼΛoY3f>I|粲2w{ֹsdt 7 Q۝IDDfϞq0MSyEEEk[iii`8veMtt]Fj>vXXCƶx:0[wbvSUU%0dۻaqSO'%v\mow> ` 4-,(дsghIñk oBzn碩I2MSiii*?(}t9qij͚5*((PZZ뮀-IzGZ3|pjj/BJ]]U7fTTݙ} owԙVgݗ^@Elj TXXMLI5\-͖V?\jNeL<jH̡ 0Y,u]JKKSAA^yҩS4{W r1e\ccA@BP\\?>\&MҢEN hʕriW$ZJO#@7oVSSV~txL 88@4Ba_|VЖxJ\.{]JJ*t)V<1BK QaW'A@ݮѣGԩS3 $IIIIp5)%`ێk':"BLwB]Rդjǵ9:\_SB+E ХK$IǏp%W$IҹsT\\#G"?X:L^:DLwݾu4|`~7>7h8P 4`ٱc***dXtwx~Ճ>~cV^g}VÆ Ӷm|=Zz~K_6oެw}W'NPXX,Y:<)SwΝ;]?fkپ}MPEEF }Ըq|+$I֭4||7}t~ZկkH}}֬Y۷̙3r\?~z}Pxxx\.[ڲee2224k,}_Wddd-ǵ.{!3nh5Q0ٔmUTXsZYpƥ‹M=gw^NOio4%|::l4`_G}4۷ Vll|߿߯ 6ӳ>={<:}vء'|Rwuw]wݥ?r\ڶm}g*''G|Nk5uT}ڷo{ף}A} _PiiÇ~zKޮ֊Oȑ#>'OaԔ)SzT N=r9]Jn8D;&6*PTMi6ppvmy[JKK5i$}ĉrtwS~~?So6s}:{{jpld.8T+zprrkԦ#5gd(\JY# :0?~\_D XC&%%iƌrڸq$/^ѣ5}t}+_Q]]6lؠo}[+Wݻ|M$v%!!A6nܨɑi:x__J-ܢYfiժU***믿o~z]0U+ӭ0=8ާ˲/d$ԪDqmV(!ͥ48M==*A&GjK ܻᆱ>k.+zeZUZZTqqq0s̙C/|{{Ĉ~3vX͙3Gt e7t%I[nmѣGH-Z5;C}]}vJҡCo[/;Ƶ^f/~{;77{^o$O{[ OgfHhfnf}{f͇Fy D͇F1n)ۭ'+מ@BPXXXː!C4uT=aHkkk_* 5^{>.--MTVVsjΫe˖vy3-Zaؕ1cꫯw} y~웴2d$ti9NItIR^^^^ ΐ 3=]rzxq+aJy=8A-5=^r; 5& BYYYZd$i2MskmAV\)I:yN:4Mofwʘ1cPހtսږԺ *33G?$p=R͙fݦ~tg1/vKƼX]ra [J @4`̔< iaaa ^cƌv3ܿʔYfsΝ;WK.$o|E파 ͜9KVVV]k֬$]t;HH$Ιٕ'JPzݧS=8Ի4c@h T[[wyGt7{k$_]tI޽{U\\1֭r.**J-]9u<圥E)22ŷ2bq{O6zttn[{vSyyyF fێ`~cZۡf-M=$1Dhgh 5}~޼y3&\rBPUUOH)5ϕYQQ#G護R~~O<ӭyI8p@f͒n$XBoC֌3p8?n[N[nUQQ7/j֭5qD())INS%%%ڹsm&45n8u?2=ú{uwk SCC?={衇jYGW'gQuunV=CZvoLv$ oϘ1Ccǎՙ3gT\\Xr-=F\\bccu.XOhȐ!WRv;z_B[ozKEAff|r>Sg? h׮]]ry_OS=S!j~VL5Sn%K_7iӡKr u0A94#5\n;3f(22R7njՇ!g`״iӴd׿kӧ+""Br\>W_}UvRSSQF_ڵK̊+-[H[lo[ZJsUZZ”YfiŊzkԨQ}$IǏ׋/gyFwqLl6edd;Tvvvv@3á~B 3[k;D3<_2y]KC29F)=q e1>Cn6$ &oN"]5(RB8}SkW0\w}ݮeg[_{n[[l-p8yMǡir2MSiI2MSiii*,//Ow$^ɓ\p…~nyy/˶~m%$$˶^U rܙtIn~T-ꁶh~vdXeXJjvgRGnn6m0tҐ,((ddXdXd7m}lB8-,,&IIfmwmvۋ\:m[2u𘎶O_|S%$B&-v-I7na&+ vo~ 3Byg^m3V]AfJ5F%yϒJ8BKS222sh?֮]+I;\ ⡇ݻ3kuwh7n ٳgc]ﰲE=@oܙ>ZtT5с.۲֮e0 .l *;&]В IDATL I~ԴX,dy~B&>c0 -[,$֭[7̌WvvkҤI WXX&L|;v뙦u Dx3%r9ctwgzĶti957mD& RHz%If҈#\ vk֭lz駽f3F<-ۺukHz"ͺ[A$Xe${u˭MrK(j0Hhz$I~{߯x@/VYYY˖-ְcƌwR-^X<8'5KM.>@mvSPMUoÆ r: … ]vmVg-))Qvvvj kwKm dA=\+͐lP@@}_W@`וرcѣG0CҞ!/rf 3ݥ0<7oܸ;g'ԴX,7:4ԓMJ4|N={4|JJJE=B&|;49>3ghLIX,A@C>RRR:\m۶nok.1b} EG~״ V5,wNMOxLPzBˬYk˖-JLLl|:vX9s֮]dmݺUfΜ'5a@ }ʴ5վ'MX,-Y.K?ϔầNOΝ;U^^(vĆЧF@PzGKs;VcH tYW$770R@?Ullll7&&Ϸ;ndFFPs7/2_Wvfnڴ0R@? ӓO>0߮ImhfԨ@}o$L%ԅv|VCKprdHaf[L WM̙3G?Ͻz|MJNNp$z7`I͝O=̙34stϥ)FK0hE>::%C3"gZya:3 {E]mhsٺF[vN~.un}mmUR$5|AmnLӔijjjR}}LTZZZJ .s8(>>{ҥK}Τf>SEE3311ߟCU s-9-%.MܦSnW.i\ݦ ]&b'QDjbx p^RM9KC=,((bQddl6,x:[P8F@$ɔT#rln͵n{kY2[vjyw6}GY3$! 5$E@ ("e=c=_=Wx\W(HB:i!HfȤBLq]3ۼε8yCe˖iٲe]:GW]އ0S *BCCl$ 66{viڻ1)( h&\Bzs}d0HObv0SC)[ssvu(55U*..VYY ÐտĨw.~i-[LΝ$׿:WU:dnV>4+1D/oopvd*1;~_\̖߭jĉp"ݻ%IQ޽*==]N޽{3fɕwӧO+''G qv9AƎ{e8̈́AkB/}z٥\D]h&Ye d2KVd2]҃Ӻfޖ@ʔav 5kѵ0aߝ]hp;xv-٬qiԨQ j]ee?^ŋVjj߯ӧhYU.F]suiusmzsm|!Lr7#lw&&! {*$$DK,֜9s4l0iR=]t(e> 4d240 YoMK_ftYe/}7&nAt3tg 9 Lnn8UUU)$$D0afsQXX?POHHЦMtUWi-[Ai:pN8b讻j,[LFҤI~T0`N*OOOi߾}Pyy4x`M4Inn9۵k<#FhΜ9;땜ŋ+""]VWWرc:yΟ? (((HFҰaÚݯDRjj~iԩիWX,:tHNR~~I&)8fZd65|kXSS})--MϟW߾}u:}ϟ/ɤ3f(--Mqqq2e1uqHfY{ȑ#uUWdK}5j&Ol)))[RR˗ٱcv!I6l M6) @{㊍UXX.(/aQ⌳K0ꆕ Y $%խ*YlWR6TS|.KY{d%dNQ^\ln6$tGЍX,}rwwW``˕,%%%iu;wN[lɓ'&wwwyzzvxGUbb*++`(..N)))7n٣K*((PZZ.]jF*99YMBު*ϯafUU*//O dRiiշofX,T]]PǎSrr&[II֭[<)<<\JLLTrr̙vPjj 5vXL0ӧlYFrss_^ziС4 $I駟W_0 O>*++SNNrrr tƎ=$O>z}5|p>|$)<<\JMMՉ'k.x튋Cr a&Gx =UT[[ߡҔ$ U,J*֣A&F)U$Toaf]\fM/{هmiYM&,$iرpgΜ͛oFve̙3ւ 4x`IRmm%sȑ䕔hڵ׎;4yd?~EEE/Çkܸq@+''GllAȑ#]c\\4|p|Uuu5'**JӧO$B6lPffvܩgo߾]yyy1cƌc_kj튈h5))).s6~ 5~x]+VIpx9shFEEMv>//Ok֬Qjjաڛ)S߯3ܹsk;vñnFeee)..NCՀ$I[nUUUnVݻ鮏Bs?]rtiBͺג>ȴj=Դʨڸ?Kk~7>LGuK_+ֆ~8>ԭa0mt_os(:Kfšf 5p C{oRRRt.cɒ%aa[mɴia$n$hݻwoM2Ep,[X}N<)I1bDkϗ$ 4I]k]s̱奙3g6[ffRRR4x`M"""4n8UVV*55`%ڗ*))I~~~:u}}׆ \VVpnÇor=BCC5aIRvvvkoΌ3ޯ+Ν+0m6UVVTffF0Z殕 gs 0d&TߩY00ٻ'?jҳ{$ړT3*ЉZVeUƙjI*;$iҳ{=.Gf0pP0agS t_th@7a2ZիF88ig̡m[3$$DR]9,ю; ;[QQa6 u+!!Aw&-ie6URRP-2dHO҅#JJJ6''G4`&5ۂkۻMۧOIM٥pۯ_?M0Aח_~hڴi9<}sE{u8ޥYߤi$I2ZjH2didHVdڢq9~Koml&2d/Ho=0ln6dY@OA $:I:~bcc]7h ~mz[o:Ϋ驡C*!!a٤$Y,&ͶkVJJJҖ-[d#Fh94̙3Z_uԴၫߝ憱A͒IrS'JKKS~~JJJTQQQ]y}'OT{0|-tw]0&+T~M <Չr>X`г CM9[hjHEulZkMM$=lr vSƅ 3KӍ} 2 3] zwwwggݻwml]ȑ#D{ ٬hmZl֭ު;vLRVVvܩ3gxݻׇu踶6oyyy}***$5д d_VVV5k(//Oׯ,eee)11Cuwξ&Izwv6Bͭ˿|\KyGxkoͪR28Yؙ.jJF&IVu$Y;7 k݊nͺ;4m=x 3kjf襫"ˆsffz*/@={VR0}iܹY_cիW/UUUаaÚrW&MҤITZZ#Gh߾}m0c _ұZ㣒YVm8ش4Y,N\|ϟ/PBB"##~:<7N7pÇ>}(11QΝ/ܿ]뛜4[lwiNY$ۚ{zf)!ZG2+u2Z*\Ε[TQ};n[5mZ C6̬QjZ- dNM/w vWd7EkT/Ez4l؍8$4MϬnFǏam l_;wN555M\݉a1bzҔ)St)䨰>cG?vƏ/__(AXXcsuذaڵkm6]X,:qℒ% 1[TT*m߾]UUU4iñ333%IW]uUͅ]ؑZzyƪW^eСCk;x\*++sv.RբUjb4yn9Ɇeai۷3='A7: ZYY͛7XGwٸbaYhh:4gϞՖ-[.t\:y|||4p/;;[M>pB>mPTTn: 5씔[ne5kt ;Zb{M2EWQQ{=ZJ?"""m >F?^6l$8ؕzSSSŢM6R7ttM7[wV^^^g6]w9xzzl6;nap8| k{Mzox$Tth@7a2dXwyG!!!X,*((PmmS6/""B/ԯ_??^AAA9sV^~I))) TQQpvG``uqIҸqQm+--M tihgΜ2eggBCC*D>ڵK?Əow߭x;wN2d5qD%&&̙3 TDD|||>~xȑ#JJJRPPu̙-wȐ!UVVVZPj…ڵkrrr4zh 4HR]Yam޼YsO Jd+Ms} 0 áuv6w̖ӋMF*͛7Oaaa:s挊3gj…~x̙>|a{Ԑ@s|||NM___Nָk960]+shz4111N5yzzjѢEڿ:oV;vPhhrٳkt7:l򒻻z켚a˨ap͖7^1hzlۈ:ahҤI3ft)ٳU^h 6]l6O>>>TuujjjZ&U!777ӓ 5$yرcn<==uWꫯvv)0 Ɋˎ cM@T]]L& C#wvKD&/$ IDATE ehpY\&E ehpY\&E ehpY\&E ehpY\&9uꔳK@7d2c{pYth@; 8%pv -ѡ ehpY\&E ehpY\&E ehpY\&E ehpY\&E ehpY\&E ehpY\&k?~~agUfǎz۵k3gvjkkO?iذa1вgwc$''jc=z7hϞ=JOOWaa$)<<\aaa5w\ 0ɕM@|I߿_ڲe]RhѢEh~Ve&SRR{|I=N nhŊ mu>}tVUǎTi:Z5khɒ%m'%%E۷oUt=SJKK$9R3fЈ#(''GЁ4yd C4 U߾}/ C=UViرl:.\(ww6m|rY,\k:{M jԩ-n]wVf ru$R'suLr\El4w--M_}|||m3J/*77WZr[݇09fU)XvPZg6NRʢ*rjtԅfMҜz훮s={Oխnb Y,y 幔j޽'xMa&R3 a\Xpۜ5Z}T^~2_ێ9pMlҥSNN6lpmӵuVyyy{ ]ǪU$͙h"'W+H/?,_JgӺBơC̣qi; reV84J 9 W^{MWֳ>;S[nDyxxoO?d1ch-Z}ꫯ*04b;V?O>Qlle5vX$iݺuׯ_?W||~_oq|}}tR{ァͭmݙ/V```C6mڤ7*11Q8puM7svʕZl{ɓ'CsXӜjHӟd2__;wވ=O:qVZj-nhP]0EqSY>$ʪ’ZeQBnfVjrʫڎ#C!N*dB/=}s Sh&##C>k zdZX+2dH^xA?ڸq^}U9[7ꫯqN:xI[|s=㏕M6nkMff6o,w}m>v^^~ۇjIHHPBB6lؠygz-UWWk˖-z衇=vJJN<)0`uqWyy$ꫯn>#׭W_Ull\~ta|ӟ$00=ZBn^xN񧫜]J8td62u˦FҬ>=!@7EiP/OiR8YZ.VقJt$Z/pL %0{ǚ >#IҨQ4o||IĨV?Go~O?T^^^M޻-#((H]wvܩͭ[Jƌ:6\bnVfm}]Y,q jqP޽裏kN8?XGц TUU?>}hƌڶm6obqFI҄ Կκ? _;bS|||||WQQRRRwimgzW$I>l7SJ_QEQWf sUފs5GF(!7@.ҖJl(PJ=A^^룼8pկ~b0|Ck̘1z留?X<@b {X; :}t;V-RVVn֮ǂ sN+==r˖-tIA=ܣ>HYYYڴiCp7;sPpp>CEDDh֬YzW_(66Vה)S$I .Զm۔'O*&&V~ .tXיǦ!y;˥\7I/ZJ} Ґ!C4{6ղuVjSO=ŋwމ.z3.mZʴ**C)С˲3Du5Z팒$j@// ބk&t+Vh},Y;3̴u5o~_ Mꥏ$K{[YVEv%U  o߾}47$]s5]Z9s$XUO?55UՒ.~>QQQi0͚7o$5QН9{l\|>,]TȰڰa[rmNjjjjj$!pl~~a;/nJҦM$3~aμ? Be{\.zTRR7Ӵi:\Ǯ] /V}';;[9-ϟzK:t&L 믿$~аa߯3gi떞.IrwwWxxxj8s挞{9{0ܞ ^x͙fZ={k%=0_>|2IT^eKjCZ ? 4lݻwYV":D 8P\sG}T?(??_;v%TץG)==]+We68eeePm$5.00PӧO_͛7;vTcǎՠAuOPP-['T^ڴo{\uTvwЁZd?J~7ސyވ=ѧ]$|rvSL;Ҫ?U`5+FY=}sBM@G $%:ӑ??4bĈvQ ,hhچ?~.]wyG_ݯ_vgͽhS$i 窔E믿s>lLޟ _WII~m=SvlKnZ>}>i{}ʕ+wW^ /Сc@Z>=P2ڡiz຋_Ygš"{0[_< |pI/o8\߰rڵmsLOOɓ'U]]۷d2R,K.ul/~c :z͚5v'Odĉտh׮]:{+___͞=,\>G}dV;ӥ^7[ *u^'|Rr$//xybg6\3BݻtDR6|uFW_}U޲Zzw`ڹs㕔}iڵzuM7)))~ %I՝rL&{9kҥڴi=,//ב#Go*==uss믿I/={hn8l}iZ4w vvaMLꭹ4K3sh.dbccd-ܢ{_W+'O>dJK/|0?~R=Z RZZӧwʱ/P-[L+VhŊxzzҥK[DVѣG"h5`VpBm߾5DEEV\\[@JNNVmmjܹ6mZ7((H_Cܹsm t'ʜ]B;4jv?EgpM Ibn;v 5ZXܺ5]döO m ~6Kd9EVUEE555*//bQddJu)V^1ch]3%%%$}t@;A. 3nZj%k]5ǩezL00Mkg4]-،|$o:=l[rj$IUFF}"777L&L&! 'yxx\/"DRmkKkk5F4^ܾͭS ۴ttxbLrv)I̔jr?sju2<}F3W_:iWk3&`ZvZIu{Hf7;AܙVdhP_gfJVK]HfKjQўt䇧 `&6n4h(++Kahܹ.9.B\;f{)U .|ퟜsEz?\c?\fXRh^G @;YF4vX@sL7n` 7ke<]]Eyڇ˵ʪSgjdZWrf0gdŪ'ݡN q?LIZvoNphFEEEo$I?Ϝ\ tO9>^ZxP58zeV++~~53eԨKdVd՛ki֒I}R}gDf7YɬpOzv̡ бctnS^^ÇݽrJ,Xy)44!̔ꆝ9rdru߾}ڵkBBBtkڴi͆驱cԈ#TRR/R`X'W /w ?ۜ sh&da20zgAZd2ݬ;L&Sݙ@cbh߾}֔)S2TSS'j.Ki޽ ђ%Kߦ5g 6LEEEڿe&:]X2ZPuSe`Mɬ7&/3ЛkL݂ E{:tg3nfȑJIIщ'4a„f ---U\\링^xGUJJU[[ >^SEE5`]s5mԩSZvtwOaV;f͟?ߡFSZZΟ?}kӧui͟?_&I3fPZZ4ec,[L u8qB ]wݨQ4i$߿_iii*--ԩS驢"۷O*//W@@I&9]tA1Bsi_^Zx""".z-[#Gjڴi_~2e[ܿ=77WPNNHM0Af/!!A6mR@@&ǏWllt]wdjwٿ/虮/8 nXٺא00IYRzժve(.mC55粔'LoKVBVq}j5nX/fLBM@w_1L}Կeggk͚5=իjOsРA9mٲE'O٤ΣG*11Q Tpp 7N{QMMB(--MK.4rHR]p駟]*//WVV /::Z:qvڥo~b}-?{wVuupAQQqOM+-l1)+kjmfﴙ6oLMS\LCs7@}9#r.sg}sS?'+lhmJ85&W>wU\f^dALE+py&#ԣ)U$곍b{j(Q0S>&O<%L#zۦmYZMhz۷:t]{*22RQQQ:sclڴI)))ѣmeFFV\4m޼Yƍ$jJJMMURR펗(٬>}-߰a222tk婩Zl6lؠH7+j{G6ECԑ#GԣG=.̴{ҥK%av1I}7̙32dF!2;w***jQQQ:|k*++7lƷa{UW]%Zl233i&]uU2dΞ=%K(33Sw֠A$I!!!j׮uĉ[޽{~Յjڴib*99Yׯםwi}cw,rJ誣^j*effӔ)S|nA'OԞ={ԭ[7uQzjjҤIWlCkcY}}mڷ:VrҴ% "YP"CXNAn?NhMVcr;pN+vֆݧlSWόo|QT?s`0ꫯbQ\\ݺ۷љ:tBCC5n8іe4uA[h(I}T9eu`PLLmYjj;fH 4H%%%JJJjXW\\,IG6Ec';;[{QV4~uiӦi3d릛nRDDDmN<)ɤp۲ӧOȑ# 5\c[n24fIq# 2}tP^{-9RRe~UW]sppo5#]uTii㿤?{={jӦM5-..։'Ծ}zbyzzo߾Sff-mn=ufuݻ٣ӧO}M>_DDJm߾]K,QVVڴik>M#)J/yxj\+]Ws6%.GQid(,I r ͒,Y,*.3kÞtm}p*߬,ZGb_~m۶u[(m۶Mɹ)뫱SPP `5\oFJLLt8m֐:R>M{T_7GwJHHPbb-LHHzXǪҔX_Sg4o\u*hhmcLjR9PMJϫEjJg%YʡF|~RhʝϏд2z㯾ve{ff.W]}Zt/_.I)63gԭ[7XGUզM?~\*,,TffYۥK 2aV ٳg~z~N9nc'88XsvU_6nܨXئ&OX,Zdf{Dٖ+!!AQQQ5uN:6liiRRR{6t=7sq1wSwQ%''^jԩ9h~LI ˴7De:]rU\֌3|jZ' 2X*CMJy*UMHM/| RTkOuo>|=TcfјՃLL@ZΝ;}JKKSΝծ]cfϞ=+j*))QBB<==O>ڸq9b ʪO7+]G4dk:hԈ#*55U^#Xmƶ59x [<ܹS|N[dնm[=zT3::Z?Ν;kjĈ2:t萎=*rٳgϪT6lPii ְ bbbc8qBΝbQLLLטf={FZ,8p@^M\XWVVVcr>^~~~뮪@~>c?~nK,QFFmyEE֮]\ۮ6s!I~{VRRUVܹs߿݈ƞl6kʕ*))رc㣱cW[l޺ک\NGTOOOyzz˫Q?2 3+Fheu 1c7(55UsUhhF233e6ջwZGzy{{{ZQFPNҿo+$$DR~~y#bĈ Ԗ-[e˖IBJH=zT_"""4d6}<==5vXXBRrreffjҤIie04~x}WJOO7|n6gϞ~ 2Dݻ;ÇpuUaaa:tEFFϯBBBԮ];}UΝk.eeeCQQQڵpرcڹs5rHuݻwW޽uAmڴIcƌh;56{\YC˪ΨdJWYuꏵ=_9gzc=ֵeU?u?}?h}Q嵇I\}.UTT$٬(W HK,QJJ4ydy{{,ւ 3f4xw}Wc943T}~0Ӫї-WJJF|}}Y㾨/P&i$|I矛?Tym(ϫS}}S-v\G.>qfM˝9sF[nm>111޽{3UތF&O+V(%%EСC0В89N}_p9#\QQ-7S5-n6m߾]qFmڴI tYh\]vYYtΪ/19!\ddx W  6LTBB?,䨢B P=rԩSQDDDU oI` cpׯRnA&u32%$$h4QOKgzc=ֵeU?u?}?h}Q嵇I\]OEfYEfYfY***lVTTJ@ "(___yzzh4h4`0hq.d2d/s*-y9xT}sueڎׇ3 mhp[&E mhp[&E mhp[&E mhp[&E myhi?1b&4PxxK@ Eb&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&E ٳgkzG]]w.X,-[Lo5atMzꩧO?5y }&͛7k>|Fرc1b;B=f=]v)//OيӁ\]MKp5OWߺe2߼ydX*=-YDqqq a9( IDAT ?!CLPΝ]]MKp5Mh|rM:$%%iƍWZtIRVjoɒ%_km˯\.u}T~GeaYh!>s{>Lf+BKd65uTM:Uqqq.˕"IիW۹[]vu穾 @C -@``233kǏkÆ Shhh3WK\\MZJ; ;$-X^4ϟ/٬nM]͆@ZiӦ)00PO֪U6%%Ek׮KT!.. @ӧOܹs`M8Q­3oVnݺAYzVZG@;vTttFnۅ ߗ$}Wj߾}ǽO=ݺ }Z~RRRd0Խ{w 8Pwu|}}t UmڴI~>MR~6}h@ 1}t}JKKի5iҤۜ .O<֑#GԦM }͜9S5xYFO>n8}1PO>g|ڽ{bccMg֭[INNVrr6nܨg}V&Lpxg|=jժ]@'IӾ}rJ}jӦMC.٣nb[mذA?BBBv;W|@KB -DQ}Ə_#μ[RUjj_~Ç_~ZZZW^yEԪU+]{Z~}fll$i-/**ң>LSգGUTT׿S1z'/???͜9S PDDΞ=$mݺU#GNUʕ+oJz)wuK.lfjlw}L[_~Mj4}Rgm SO@߯^zW:u٣nQ0_\s:t蠐;wNOiiizw4pѾG}T111ӧdѣ%IcƌիW/ ۷O2335{l 8vg~F=ÊQΝիWkJKKozQmm۶=ܣ~d2)>>^K.O?Q/m3Է߹{]'Z MhAOEԩSZzݴ}iiim>L է~0ۺ:n?-[L֭ĉ5l0IҔ)S~z%''+!!A=z;bњ5klV5|/?c)tGN:9sf믿V||4oVMi'g׵n:͚5KE=n_4z}oyyy2Lz뭷g[צMiF h9͛py>}tuSnnVZ_M:Wc5w;| ;f߾}eXzjI_=n(Gw ng *((ȮΘiܹөSROگ}4g͟?_{QllƏIjg~}0@ئ#ƴ?***tM7{ںb-\Ph4믿z\\>VΝ$)33iǭ0 :TtرK~~l؅qUUf{wIW\q$ȑ#v `UUk=Fsr~A/յkWI_vW@KB -̴iT]VUVK3f̨U^^.IuNuc Z50 k׮ X N0A^^^v[KGzۧ|I҈#O}4U֭[?Yzj淩zM9os gsUX 4H޲X,z5w\%$$5pIrIjvt!Tu$22ReR֭[a ͭw޵w#99YR s )g wܡsj޼y;v,Xr|Ͷ>$UB#V]tT9mqqn&MҜ9s]vi*G%nܸQtM7+99|„ IIIT9:m۶ڧ>NΨ+;;[/-F>/}ڴiYfΜ9O?T~5h 9RGdjy˵cܹSTvvJJJT\\hKUlw)y}kԬ">}iR~}h@ 4m4-ZH)))ZpV\)s= :Naaʩ, CZA[}֭[kȑzj[yfhԩݱrrrlϣ}HCЕ$Q?Mm'gSߖ$z7d4:gh~lj Jmۦ]v)--M6mҦMGi֬Yi]O$k׮С|||n:]KS4w;4ϛuD^\@ -P``OO?T~$iɵϭ6;wT9J&##у'NTy{{ۭwiӦMze2zjIM-XUhhs=^z5XxPzzԐMvrV]ӦMSff.\-[7Գ>ۨcY_8ڧ:ɤ1ch̘1*G_^Wff~i-Y#Ϫ\cǎ߯;5۷]S{6FsCsq~ޔvo "44GWU|@% -ԴiF{ >m|:ݼy$iС5 2D֭[m۶) @7pC `{bŊ]/ Mm'g_ZǏ$}7}F:_4TsiYWŴo^3f믿.Ikݾ^v?OԩSsǺ^8v\ϫjvjϞ=u%IݺukvA&PAAAzG4d׺uk] СC[t'ɤxz`O5kn:UTTot8Z]vPnٲeڱcGkwC$͟?_YYY:usjkj;5 ?+$͙3G~m7 $OP:Ѩ~ZAyyyzj[XTTSJJݾz;f]TVVvjJ]xzz_W=$IW6dݻWTPP<\o]./i{ܹssN6n ]uaFFy޽[999JKKӖ-[O [WPX4iL&N֭ӧ5kgQ|||+]~HSڽ~_i…JJJRNN٣w}W?$i„ vUUW}?׮ x0Z/v CǺ5ԲѺ5ֱǺOU= XZZk f,ffUTT$٬KR͛sIls=:vz!w}ٻw^}U:uzooo=C>}m#/mMLL>:kKJJқoi7=h l~mۈXbyږBr3f^gdd讻RQQ$OӦMC=dۦԘfϞŋkz펗zHiii{W=zT>-STNj^k]u1 U~w)>򓕕eOOOFF SVGmpd!,)_R-U^[=?rjT_h_GT6בK<]] hѢEڿ9?ӑ#GScdTS۩1u%$$D?#(77W<>c(tM ,6QlS0:zO;7Whl;Ԧ9ڧ>~_jذaڸq:L9sFСCu+((_|QW]u.]'ND;vTϞ=5c [oﭷު޽{kJLLTff4x`M2EѺj\MmWT6mx뭷/R VPP飩SjȐ!VW}+@õ?`f#4pya&|l1B{hp[&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&E mhp[&9qÅK@ Eb&Mh;@YYY.Z$Fhp[&=4HGTfʶDθ$ B3Z^î1%e@@R~4IHW Ψ4Jĩ`{i~0&4#bXo&̄(^O~եe@@P{|0ee@+b f2:~ 4ID+*?2B #W4}@*?+]] W2J@*Y%B!ʶFhp[.h.8&e:Fhp[&E mhp[&E mhp[ܖ pq_|>sIҌ3twح[)Ig}vKhm۶iÆ :uN<M65l0ԋ_+W:\g4`uU ШQԦMK\e:u}]Y,I{ァkFQQQ.'t0ZכsrU~ʎpJƮοoq4.#w|Xt۷OV.]@TfYyyySJJ6mڤ_ƍ~;5۹KJJc{,__f9ӧma$Y,>}@ [u+I*PgzN4Z, pc9 3۷o3kS^^+W{Ç<۷oԩSm?7nlsEGGuֶٳgc[m~ cpKb&eٳ5k***l:wѣG]v2L:sΜ9k?~ +n_~YZ$*99YIIIڹs݈L'|pW|rIM7tY-Q_V4I$ώx mA_<E# *//n_'*,,gРA#3//ObccmΜ9oz뭷.e"**J>@5[Tv4nYǟ*m|vKڽ:uja$d25wYTPP^z%=vjrxKBkώL; @#?"GW\ѨckڸqN8uY]tݬ7]wݥUVĉe֭S޽R֭[38k^{Md2w٭/**͛e+--Mj߾"##uj„ 2 [)IԢE(hŊڲe222!///}4h&Np,R^d׶ ٳv<=x=xuGeGp}2O6hNs:h ^^ 9C~ɳsGYKTz Z%ߜ?A7Md#JT5Ng,u^ߍc?GX,EE*? '2˯OynuϨ`w ^^u)cCMn'@2-[^' ԸqYݑ#Gk)11nCt!^Z{|f<==_ IDATJ/mَ;\Zoƺ$%%%iꫯ믫]vM:#w-/))Q~~N<;vhĈN~-8iKo]>1?v߇۵п&Wˣ(FVNzMmK>î{@y(t"-u*?oI2+)ٗT&m .s@w0SZvlL9 p2d|꫺[;觟~Riii8u~apK>>>7o֭[)&>HMMMc5 px^OU:urfVYf]t:}?3F[nN?ϑhxK,U>/B:KY,UG[{z(u)aQ{3Ut?afu`^'s~s28q<Y_y\'b&e+Нwީv˳_/:M?够}Y]wuԮ]+(++K;hĈv_Swmd2Bܒ׷^}yf=s⋚0qӽ{w 4H۷СCվ}{jJyyyڹs.\"ݱc~1c֭˳/o]AAAPvv>Կ _ѺRA=`RVYo2GKA\-Ky|ޒGpIRW^T!^5i*X\%{ʣu+yub\o4޶)*?qZa{]z>'dCA}D_A^Qڍ7R^^y΢"X;oT9+UG1 &|o`ٷh4.os'IZjVZ1c%I۷o׶mlΜ9Scƌ4h~O$);;[IIIMٌFڶm2l{z{:t蠘S?myBBSͪP -̔*Giӆif)콷.MtAkFֿ*Xxkr^y]aWN*Sh[9NI\d -;=l0r |ǎ\`0ȫG-]3gض/OPdN\+g}zߤvS[)IcG>nj'@Ĕ Ѩ;C_~:÷u^|qqqvG]c۽>vySo999&IQtWAd2lzm/L}jX+66VN=Y u7gr*%5-qk^=j=Oyq0S̹gUÏv*j[^]/qTe}Pc9;Gg߶z{]'p\kj}]edo$b&e&8wQ߳ddU%QV\z[VVgsm*ҪPQAA"KYȞdd8L2 19眜~`-X@UUU裏~zڵo?\V5\n뮻xOtV[[+}!~rPېm;n$>oG4zl n__{~"I21z0_2m!*7':-4t͟?_ݯ$o܃1<]m iӦE;vЂ tjҥOUPPzX}ez衇nYii^uG?ң>5/:w9:24[GfyKXxÆ`k73cu 8~qVW\QZ&9ݏgLK_Wx3]o vUuNu?Zh"LKrssl27tMzDEEk$M0AW\qwjխުM6;^k׮՞={wǮ]cرC۶mo?Ϻ[SO L$tM袋7m_ٶ+W߱Kx YVIRII~\|ŋ^Ӂ(xi&wѹ~ݥF}[511QYVr ʍRZoƓn{S zgިSdr RŜ9ûo窯Wwiz֏{t9 lmJmܸ~{/^X۶mSMM-x fy/\~Ntz衇… uw]~OZhР+VhȐ T_+kYJcY]ڇ.|Sh?Mwq}riȑJ;{W~Zw|ۭJVNgn[?Iwy>JJJ Iڶmw5\3_nn/9gv׏[pFQ/tjǎURRrl6kȐ!ɓ5|WVV?꣏>w^;vEYjj233Yf7h%''+##CSN̙3OÇkz_D5jF=ZfyUÆ ӌ3t7fi˖-r=Æ Ӓ%KSO)//O3f;e>|XUUUQ||N;M_="wk=g띗Y_Y&}$GQ*~p.H }WQ鬬hZ>D} 9 ]V*%\v#G'WMq[j\k;s8ո-%߼ڄ~DuC ި}h[Cyݯe/6m}zM>M$v@{PL\.n\.\.97W|"{JKz,nUUU2lhh`(7eiEGG'%*ʹi{w 0?fmhl[P>G&E lh[&E lh[&E lh[–1=-%=½ @@2u @p@!fC l̹4%=½ @@26J u@λRF 745Onu @p@"̧Rң K}֙4)޻B]С{RB];"BFKMGR2_"1b\u;PHb]ye&s 06JIOA.ۆԺS9> WUuK)&lE$@^SSZZZB]@Pt9 b.Iz뭷եrrr$I?uM7[t:geggb^}d{O>;+]綒4h eee/%\"&tR-3۲ZbLM4w]wiJHHкu;%׫^͛5x`jȑ. xb̶2!S޽{%6nAAƏ:V6-oQFԾ,WK4hVqq|Mm۶MG=ܣ^zIIII!\N3sƩfbJM8 ?ҥK5m47.%u@jBBB g ;ߌ ?^^z_Vqq>͟??0[P3Rvl6v99\.9NIǟ{#hhllVttbbb)M8z뭺[C];Բep8_h'5%H6MjjjҾ-t\r\l6bb(&&&D:D( >\`ة(Ecc"}h(64 .'CWll#%-'@u1IѣC\ ٺښTעYuuujii3՚= .}p6%E---UrrbccC]}@Nq?VXSg Ы{OEEEr8<ҡCw}IIxٳo;c'z?O>o~YFW_}>%$$?.ۭb[n֭[a=cڊrڵz$Iw}췼J7|jjjm<;O]wuH/e lfdn%$$(11Q`0(**JQQQ~1kVwp5%^---JKKStttOh@7oI;j߮%%%oה)Sb^ZW}ssn6UTTh뮻4n89NٳG_TXX_WzNZW9v]~;Cgq,ۧe˖iZfv~OQQHSNըQTTT7:{W+Vegqkm7?==]:u;< :Tiii׾}+ѣӧkԨQAꫯJ&MZCUuu&OܭspjnnVUUNg 311Q 8.>>^UCC3Zkv+==/%M@z)(==]/2335uT %Ka / \xᅚ6mZW^я~>?'IzgUTTt.:t.o 6h޼y:sk2dSWqq-[[oW믿u]_ך5k߲Kfɺ袋tM7رcZfxbr-V7vԤ {+::ZEGGkJJJReev{u"REE222dXB]@"В%KŎHkFXBtw=… `?_鑔 駟֮]z\kw襗^t|LѨ{W[lQEE 4Nf3gz-}'ZjU_]YYY~Z[[UPP>@/***_J˖-kl0:쳵n::t 35O̊ V.K)))zS\\J;vLF1`kp5%R+PLeeeuu">,%I袋z}kk$3ޘ1c$IAwa9IٳZ2w\IRqqqov$::+>>^&MOSJ:<־(Io> znWee_L˥>3}yrj6TUUupF M@P(11K%\'aN0@III;zhIѣG1>G! 3gԜ9sa}gr\2۵c߿_c IDATfSKKK ><a13].^SJJ irT]]}_t \h^---=z`N;1<ڍjjjԵtVmذA*..%I~߫LdXtiiСՆ zOYSS#ffff$HNNVEEEĆv]0`@Kh5j$y1tSUiii|P&Lz5hР9rDv;kXTT$IJLL7pݿ^9͝;WvF=x` .g}\I::pŚ6mZ+;9UWWf(%%%ԥ)%%Ev;p3=ކɓO>)sg)S"@(0& (QW\}WZ+5N;;ymڴItg\ץ^`7Jf,IZn GyD#G }-O'M@Piii%I/p͛7+Roh}Sh7z륗^ z^vޭh?+Vgޓ$?#<{LtmiСAߺsNUWW믿s='rݺ H}}^eeeꫯb }Waa233u{-//=ܣ>L555:z>C}ޮr#! RرC7p,XG}Tzp€@\.-ZH?#nЍ7ި;w zV}}7t\JNNnEp`XhFBz쬳{v 5eee/~ߨB={9u&McRR׿˗k2Sccwݜ͜9O#33Sz衇TRR%Khɒ%~;M7t?FQڰa6lnW^Oj\paL0A<2J]V[n֭[RRR{T۹s~xh͝g_^^KW_gzkƌ}^{_fSss7t:JKK quV{=nw؏"ͦPmSLQ\\yjJCY$!t*''G˗/3<>HeeeרQ4o<]uU7x#G3<룏>RAA d65vXeggkܹ:3OyM:U˗/ҥK_SFFrrrt-t%)S^/o߮Y,7N]wkޒk;w.€f͚7xCl1b&L[oUqqqꪫz6vyv]vfj nG+ulnVO ͤ>h%%%j`0 6]SSSD-Ip vCmk2/в5v٦OϴIR$n3BӝPss\. RFqXBSNճ>r>ouun>kg-dNUNSNSÇo7VbZ*,,dd`hlf 2$ekݺu~_ 0 ;wnĄEEE^fF>2ϓdfʹ罻OnRjMe LA @zC14>ٳg~/袰#n[6Mݬ`0S-3}HKpk-iƎ+I wܡ_ҕW^.LF`Б#GqFZ*`d4uwLKK_HIII.U__vVt6-튎5;vl(Zh}dTꮻheggow 4v.KW>mveXB]RY,#MRsݺu~@n[nfY<򈷥Y #FУ>v}݈ |CV.bccp:Pk.g"zg}E.Seee_~y1bﶛ_QQ.L-+5Lg\.EEE.动W 4-5 5!zQnnʂ.⋻-++Snnnj 5Oۺd23L~?tpj0"/~ uPVF} >\!hhVQQѝ‚mWAT35 !c)};=GOi4""NHjיHw@Gy7W$h(##G ; 233p <I}[;~z{h4+u&`@}4hP^]ᄏ[BmGuʷ@af1􄙾fzD>zѴi+roVUU+Є :OAAVZn+DTwaO:%Hkkke0fk3Ѩ9s洛t:FyyyA/n٥^YGچjMMM!"@SI M|; gmm=ڳgVo>OSUTTh4j޼y'^miZOv9=Q2GGG^,̼ 3?_SO=%pК5kf͚.r驧ү* )&&/ȑ#CPYUWW{@f111.2NM@UU6mݴi{}'KLLf7s\jhhqUkhhӞ=e6# 3E 􁤤$%%%~{}}`0xx{W׹J}H6-KK8!yyyZna&4>x]_m Hb0 VTTfl6***څdzDrfַfL8h}dƌ~mQyEiٲeZptL-\P˖-ٳ%okƌ'> ccc+ (ѨW\iiζaf$;~ݻi P[Qkg0Ѷ -k_c ^mNL|ޛ$%H2- grvrrpY.KÆ U>PUUǰZJMMsݚ;w_3xX~zF 'efzzzv{_.KNS *//WkkL^?hllݻe6e6%}6dddDl g}VV>̢"Fl6ّ֝1jIrIJr~3fL})O٦@Z o -G&D\vká7wߕnvz'Ow̰ד눾w2+ڊ 3AEfffu.HMMnf۾燺vZv6؈ 3%":9Nqqv-I9r$G2>|XjhhPSS bcc!ChܸqJNNu!v>蚟ձc$I)))C\U)))jnnhdjUQQQTTT$ڮ%]8mƄuY<+)@*==].KYYY!Teee:t222BRC$9z>#H,.áFȑ#O4n8͞=[!c}qݛkM>eT0h4zyjkkaaaabccC YYYBL&oP3)));s=@ ~,..N- i ua4رC}L&OI&)--z6M_}nݪ<{RRRBPu}wooT577I&I'dV^^wκ G0`@W0&a`۶mڲe222t- .iӦ4aYV曲l'j:Ϸ'4d2i޽8uVTTh޽~t:3BPMB@|222`%%%ui8͝;W٪R8q=fll233dlV^^9rj;ro5Zg+:::ekr"jΝ;ua544())I֬Yn\Iŋ-s\ڹs UQQ!ɤAiʔ)ȑ#>xΜ9S:}Y67o͛%Iٺꪫ_*??_r:ШQ4uԀ8q.mݺUZJIIu9(...9O?UYYv2224l0y.|ꫯRuud2'O\9Rӧ~}An}2L7oop8m6^YYY1cJKKUZZyh4j*((Ю]t9#77W&M̙3}vQIII>|f͚i۶m***RssRRR4j(͜9oݽݽ>w%/kРAgZvN?t]zwY_|^}&M>{XNӁTQQ}xgu"`N{^&I8pd2ve2tj̘1JHH蓺VHO?'/uA577k'ڰa<(ѨT%&&N  4{y@d񄀾n[ 4h_WAڱc C{)ͦbh4z|[hr6PF 3&D1c /TllŚ5kT\\_+>@?~.EEEI:ZJUUUr\۸q***4{lM:;XVƍ5tP/WRRo߮ /PӦMk͛7H&L%\m XQQkתT~̙wkn65j(把 \R5fcԨUרQ$INoO <6mڤjΓt<ZdNgaÆ)//O555MI8q>loCVUVRee6oެ>[999QWW7|S/4}].;i_}֑~^O5n8s9sO||Kui߾}JKKӜ9s6e4W_&>jo)W_}9~R~~JKK9~v!bffjjjk./owddd֗G.[}[@L&iJIIlzi9YZZ;w?_rYV}rUVUjΝ*--wWZf:PJJJRVVa&_&D`ƥd2jtϗ'gڗ>{絴h6lXnCB_^SW[@Y0=竷$''KRp@E[0BMPҷx)55U6M---jmm}6cmn绿3gttbbbp#SРA$IvҴi= =cݻW999JHHXEտ' IDATaٴ~fmk&n[{`А!CnxC_}U |~W+TmCM./n[&Iqqqrַٶ!f.i='_FAQVv )9~ :TcƌQkkV^p=ߖҷ>|݃ѣ5xu455i͚5jii̙3ۍ'y|7UQQt:رc8qw¶~m^m6y544hʔ)~-;=_|k͚5~]#F$yEGGK.l־}3hɒ%ںu9 2DuuuztRUVVj޼y:thj讞\4**JjmmզMBZ[.qs駟֑#Gӝ,~^O㕔cǎwm򡾾ޯ[ܾc2SLjM:L&ӂ1**G/ 13-4ueiʕ*..֒%K:b/VSS=W^yEJMMnWUUVo ѣG+!!A%%%Zt233بkFt饗j~uFUVVriĉ1cF:<ֵZzWXUVVnkȐ!:m6oAAyeddrJNS#FЬYÇ{n=駟#G?WUUL& ѣGkʔ)_[RJMMչ瞫)S襗^o3c }'ZvzoCYc''ףu>4h.\>H*//׀4uTMrss%I/q%'r7TQQ ijj:ӴX,a:3@ӝ$RTT$Ѩ8vJ܏@wEGG'%*ʹi{w 0?fmhlN};>T/a MBh4ꫯְaTTT_|Q_|E: @Y,ާ3)WGr0kV۷oΝ;i&m޼YJLLTTTUWWZq袋B]6/***JMMMv\͘Y,f3ach-o;}E @0 9sNȑ#RmmN㕐c*;;;dRbb,l6Z[[p8:4\ fEEE)&&&@DX?hfbbb4ydM<9ԥ<]=Lh H/u &E lhwMI4Mp+(X*d gé79ٜmn8癊ۼl̩C/l^&+PHiK۴MGMIi$x_~/w/4$-MI@@"4$-MI@@"4$-MI@@"4$-K TsDd6=$-Zh q.).%@J&E ihHZ&E ihHZ&E ihHZ&E ihHZ&E ihHZ&E ihHZ1U*//׶m]`,.00[n՝w)Iz5a„mW^^.I;u5ל~^u-_iLh iB0d ln:9S1@0$ahժU_˖-{_c]zxzd~$d2%12ͲX,X,ZȐjMti$&xѡN|+O0dFX,HPu$&ѡvnI}Ch!fdwy2|jkkS[[l6rrrd]#@@RkknwDhkzтp3MIrrݲl˓fKtIv^zI7oցѡ38C3f%\O~}ֿuo~˟|I͞=w򗿨N>O'NҥKbŊSnݭwzT[[+0B_uUzǵ~z=Zxq~֯_-[V&I3fЂ zjeffQ'Emmmexi6eeٔ{2JؚGn[]]]2 #jfnn ]&@NS?m۶ԦMrJYF١VUiiiF᯦Fwu***"AfNN eee)++K^W---joo#bRkM׫Ǐ&q=T\\'|R%%%eZ|>=ڲeVZD_577XO<GhYqqϟb=QᇇuBao~Y,#vɒ%Z`J9rDO=a:s:;;t:C/ժaVƍ\566Y'UZk!өD"nݺ?ztz'$IrKDd6o|CoN?@s ecGGyI=k_җzg޾KO?$o3rssuUWGݻcMN3UaϏ:2335e566ɓ2Q[k&{)Ir8*&L0I5ͦ+W|X=!I?=}MM%I͋^YY19=^#Ze(??j)))Qzzj8qBƍcLMA cX0,((PnnnN6MtQZRy$l{IZ|)׏օE4 CƍS^^ވה/ɤǏl6G,KP0 555 ˏH0uvvJzTdjv i3N9V@ ,f677D#!afP^^Ngʆ^W---*((Ht) &aSN35~>|XTXXotjܸq>4틊BwufϞ=`RkkkD?ƒ/S3\AmmmL^g?$)''G\p=WHWVguVhzÆ oJ.˜];҂t8/X 4 / z{kϏL՚T8YV3(QښE{{^uUTT$@hVXXe˖Ix ۷/z=#ժo1blVvv$CQQQ<~<[F_XX2'L+Bk탪ƒ`ѡм`WpMIf*n;4L* CЫJ c&qk֬nu]~X{QSS}s={%I7pJKKcܹzB]vIy0mkkT-'N<+ڃ׿uedd㗿vڥUWWW~<w1׬Y[oUwء}{r:Q;wn>ŋG,߹s뮘ۗ*պ{feff#4ҢEp0n=z|*++jMpy^UUUbl6d2ޥSsHtq9p^~eg2t饗j֬Y lBV))~J{ H4z$CKi@@wERwڦhF[o4뚔%oZ~~i}:pZ[[URRr^ZSL}YY֯_~X~UZZڧ[ӭ\ׯף>wyGǎSVVNUV3>=Q?~z=czlxb]ve!pڴizGꫯwѡCt!Y,͘1CӧOץ^ .~@G@3777iLIZ͕dd 8uvvl9}tI5-5%\ Ӷ-4i BWUUZRϘEEE RGuuuה)SFGrT[[4\+MŢI&%!+-5i ?ZhYJd MzO! x<|q(M&S҇jΦX>/4TL1c.pSM護ޒDW60n;WD4`999S) x<.aȦO3ԬL`eӉ@ƍ%I7|szCa` nOtIf#jO5B3(V+RF)K Yb ͜9SƍӉ'kڵzZl;D )%<l]ހl>fx|D0lO.IzCcjW_}U+hC O u->9Yf%|L0,==]al6G*FS)E5J0h|P|M׫Q9995kYK,It҂!fxƴW5piii}ZfR FBM4Xnn*]uU.F-/І[fJfJ3Д5ff̘ u e?hy6<\*h1)R"ZFEE^}Ո{l6/u&O0Iw5(Z˺d^k03h>f'6Y,e#]N5Lw3` 0bzj dRhFSI c &*8n$G,s\#]N5jMt "Vyef(E eddDkjj^k3C͌D0d̜1cF+NFLFF,K(3 C e`X,)Bnf`"pڙLPl2ؘN103MݞB a&QFdRfffD0t:x]ZLGNO AfP*nf-d%Lk4`hdd2d6e6Аbkhh;LPf{e&@ pɑlkhhPGGG뫣C 2jv6$m߾=3a&M"֮]k&Ӣ[?#$^k&ϗrU*ޗ^OG[z=i2%򱺺:ѥQ]]ђ4ZnlnrE|&ɒHfǎSMMޮNL&l6jҤI9sbN~$iڴi:uH(@|uuul6+--M.KuuuuttVֶm4sL-]T6Ͼƍt*A*_`4f9 kkke بZW*QSSwܑI@UMMo߮%K$!rرCtyiܹ,MGg/yV>HhݴKJKK$UTTl6G} MMMPzzzDddZUPP2 @{OoJJJzj}S +_fϞ-˥?Ox<#\5$/f0X,0--M:NQ˩Zg&[0Ӂ@:tH۶mSII*hL]z饚>}Z[[}\)VPfpĴ4Y,UTT#VÇUQQ WC`:XV5e0lrR8O IDATΝ;USSvjĉ'>}ᇪVcc~JJJ4uT͟??r }޺un*I>}>τ;wjll =.ZH}j_[[+ө4?^{nctbh*//ݻUWWo1R_ [o4ZJ?|zt!i„ :РZJfYK.աC{n-^8bk׮$~C>;w.Bm߾]:P[[IJKKS^^̙>[fsos}9:zw=O_x7T***t9Nnjʔ)7o^D}\=&I@ 4|)++Kƍӱcǔ@ 4>|X---*++SvvirJmmm}Zf5ufII233]Ê@Raon竤DMMMڷo:sxh^l٢*f*''G4yP9!`5~fM&ڴcMy78[_0< vAoT^^.HROn:>ѓ'OVEEh6sL-^8TGCYY,NQԆ TSS* >@1Gi1 m۶mҌ3|566c[f[,:~x8qB]]]zz﩯Wmm&N & xРGFtsdNVUEEEt3  R̥^ $fiٲe#GD{1}G***Ҋ+"@u8>'٬y5׫:ԕfRwyx< U]]"]z饡Frrr^tWO[V]|Œq-uIRggg/h8ҥK#¥ͦYf a.IѣGOYw4/R`wO㽎ocssvޭ|]ve}WRRq.ӻiiiĉ/"ŢPɆܹSor\Qa]ovܩX}efsH\M000BRH &%߯4I=$s9Q 4}_aaGӦM|ĉzZxX]CnI=]fggGرc)SD $ w^ kmm=庽Tyh⽎?a;wǾ-/ Ųjii pl60+RRh|q:{LPײ2<_MKKK\ >߯>d6.Է咤u{t~zkjjt!566rv{PO:bg0O㽎O/x#u\ w׳R2L&eeefCnhf P b+ktXaf"CMͦH#Q,2h]Jww9Pyyy:sb.7n$&[_5R[uuuvKB3ࢢSwOoڰaNrss5qDM:UVUGс|TxxcﯣCb:.Pw,uuuC]̆Zh!e2f 3abnn X@ Xk˦&uYQ H\wԩ*//?h1 >Ir\:tHaDR88f[[[hVee&O<{OeΝr::OO:pN<9J{{=p}yyy4:YR_P3< b6++K*,,Uww|> w 22{O.|KxVU 4`?~$iZ`AV~GX,uiѺ Ao>+;;{HuM;\ >u1M0A4}tjooןg]tE2 C}<(Vy^zZh)7#8g!rӦMrZhQq"y ,--UYYqƨ;\6mƏǣ͛7Ǭ?[$q<ժ˗b裏>ң>uo/^I&UOQVRiiiԺ_'`w׮]aY[[6m$x#YG<:::GÇOPxc{5krssuI3f[[[Dw#u0vEkM:^qۇ3YQ/ƍU__u֩HfY2 CsgiӦ);;[GO?-á}$-[L:zz)9ĉr\C-.mذ!I:qDC]ZZZ[̙3ok޽*//WNN$LW_}***tI9M6MZp8fTv}DOLc^e{e_mk*t]w}59!!(0 |>иs#ޓݙرC~_-:233Sg}v\ZZZd2TZZ.HQ,M&˥fmw%hݲl:"l}EaVǎӜ9sBߋnה)S4c M4)ZL&TEEE^_'!''GSLRggەkժUPVVfΜ9`8jhhbŋ#xxc<9s樻[^WNSԼytYgxctnaul3Z&ɤ>N?e:@ OWfTh 4,hL>IʖdzoG9'fp:8Gp\ϧ.ɓ''TT_?0?Iuuuefo$@HlVff,Kp]~j^$ɐxx:9]QcMeѶL1։h#XMp14)+؍fAAl6kʕ8P+}vܹSon*áKjiiѼyO}9rDp8Nď1|X{;>@"$5ϧ*b[{UEE&La=dҢE4|UVV:qZZZl͘1CӧOw_n[o$w# " ,4IѣzWdXTPPL577r@\ri;vFF9s9qmsϩI'5qaLFM@R7n.]E*..ٳpB'Ę,tk֬Y.gz)~4j^mk1/ڲ5ܦt{p:-slIfvs>m Ða|aN;W 4$-MI@@"4$-MI@@"4$-MI@@"4$-MI@@Ҳ$H5Nt HAf3m @Ң& g]$ZhHZ&E ihHZ&E ihHZ&E ihHZ&E ihHZ&eIt@xk#\] wܡw}7bᆱyDw^M>]v=#\.3&HJڪ_6lؠ+Rv]$gջᆱ}Zp^ݫS&۴}veggW^3b:;;2  IRAAupHʵ^SO='OgU[[~ KCJ/kҥ$ݮ.(UéK о}$:СC5kֈ$It xdi &`XUVI~-[,}9M0!yĉZp>j͚5ڳgl٢e˖/rCT[[+II4b2կ~UO?,X3gt@BfC0L^WG^W>O>OaKyI%fYfYEEVUZ. "B}Ey^= 4$){ku& `Duww' ߅QGG:;;Ca+O0dFX,HPu$9ɓ'K.$UVVr%"*V(6%wѡcǎAmmmV aa $|>t1?~1_c-4),4ԤV U%{5RkknwD}@׋*d2AfNN eee)++K^W---joo#bRkM׫Ǐx@=j4}|jkkjՃ>(Zp8p8`V(=sdXtmYnݺPh&%K`]y:r䈞z)]1ukRP 駟ք Bˊ4m4]|Rk4=T\\'|R%%%eZ|>=ڲeVZŋG׳>gás*77W<}]9rD&M:m yuvvt>_VU%%%YV7Njll:5 ÐTIIIs<9O[[$; N3UUU_]{Wt7j̙uuu駟-$ꪫ$޽:+j]G?ph0s$n=[n%" 27*c}͟??" /|!4]YY9Բ`Lө@ 0 iʔ)affLcn! Օ2VQ^^ y<j-]TӧO5lu fP IDATTMM|>$iҥ1׳lZrqrrrT^^%KhŊ#`d6UZZ3,،HE֮]VI=ov-X .F#l,z:ydP3)33sн$gz t&"@"@haUWW4iR3|8qZ$ɓڻwoъPRă /j]@Qnw^:+4aÆ~}7%I^xa\Ɗ'W{{UWW'. >3V3CV5SNTy+v모Ht) 3HR1E$I=u7n-]feggKPM0AW\q$RGoCT3f̐$[Nv8Kaa-[&Iz'o߾=sڳgVnƸ6^W]v>aYSS^iqϭC]]]yf#fvy^]wuzᇵg555=ܣ{Wt 7x@2ڱc/ꪫI?/0>ӯk8qBs/ꫯΝ;p/-dBMC /͛7k}-[L+Wݙgo|uQWuVk_n۶M裏FݿnOSY]WVkkzeffvꫯ֝wySz衇t>~zfeff#nyy-Zu{w:yIl6nwhB]{uq8Zvn9rD֭Ӻu"-ܢkٻ;d I WA(bEziQnUҭcݮol[kP+nBAKU/\$p 'Ln3L&LH23|<1gy ޽{裏z?{ڵkW י3g~z=ା^<{1͜9k }iiiQSS7t:JOOpuKOOWMM w]6l~9rDuuuT^^.1[OvV\]{v=ڰa,Knǜ)))Q?E)))l2 Ah$J&\b6=QkWm;}kd!ųMgs$)Indág3g8á&\. > xQkl.ض֩tn0=1yL@/HOOܹs{ݫ:gVKKwYa$%%%y{f2:L,?~:o'1&\(r%+V;tٸ8]?F-bرC7n >FX/J5~"D%'';[=ZZZzhPt6h#YC%6m fiժUz4qDb(77Wwx eggriӦM}Qzޞn[V5%jkbGnnnО[n&S@/pھ}{fV\iȑ#+>>ݺ۷\NHHty!KHHhhRp8"]B j\.~@A|N͟?_/Z(a1Go?N}=Rs_?r)...%,..N.+BL_)Д:I &ЃVZ_s5!cʴjժj4Oۻd2EЙL&}cAc&\4WQFֈ#d0:\_^^r[tJrV *vƒhJ Sb'3:d`~7Wg?Meffv8JJJ: ˲Bn+ZxB&~RAOC3zÆ#??_۶m{/F]wu!W ~0 Bz!eggw7 zuC C=Vmymֳ.Z,̌?0{VIH'3fs='˥o]~mۦ뮻N&M괝"mܸs=SiMfW뒺un;_c3~DѨ tGU~~~?v{u^{mg #TIb`SI M|k_ :gMM׿8 ͦF:tHtvFQK.{ofu9Y2[,H#: 3-ZD TIe?r]p8yfm޼9\.?__{^g0x𯪪JF@e᫪h5#]yg&\ Jܹݹszݾ/ \.Ξ=᪺vYo8=L_f9{hf@)))JIIv{f0 ***"\]***j 3c!شZ.k֭p"zbO~v Xb0 %ҥuEX2=b9 3;|3a&\X4^2sLGW_^xAwqvYYY; /hܹzf>c9sf_+<`BBd0d4e4uWױӧO{ 3c!LHH3GL/D]al[C[خu 6˾מem$IF^} AYv\rr\r\r8jjj#U*TVVsvl6ysZp_3-ٶm_PV]]>陙mnrtٳ:sZ[[p8p84m4 0ǟ|444h߾}22͊d^:6dfflͧzJ6{;RF%&&l6ٱ61iJI.I6IsˮsnkY(ȵ \l`c:j7և'uHЮ]$Is̑'\.}':|jkkeZ5yd͚5+u9;r:3gNL)%I~'ժ{キO{ժU|O7p~]_b 3"++Keee~<]m h  9NoSXXSF zv6̄ 3%b:tX@ (--%Icƌѣ#\Qyfj6ljjjT]]t ۷O4j(>2?~\'Nٳg(iذa0aa_zЕ~XVRmm$)55U=P}055UMMM22Ll*--ёJKKe3PgbIRR.2v &Ā+==ݻ OVYYrrrzCQQ 5j(p }:x`eddriȐ!}Zׅ.N￯'OJV 9544D4a͝;W {8P̘1C֭t}F߲555ްD ۰B%%%2L0 fJJJ~KDMVU7#Zǵ{n͙3'*{ӧ%LΎkbb> ~߳g}L&]r%2e7Ң/B~u }Pjj8/5--MMMMjlld$h4[/TUU)??;_fWF#ŢAE z1IMMMļ }{=effꮻUW]<1cN&Mf_q./ͣ e6dU^^u~t;3BHMPTT>@[vZprssUWWݻwr@|{9zB̈́eeeyD$٬|YmX蝙!21?np=QkWm;}kd!ųMgs$)IndHr].n\.\.r4|Թj*I҃>软Jӟn6ڲe."]{~Z[[uA>|XjnnjUzzL\IfSO=\-^8#^C ̙3ui>}ZK.hTCC~inX¯ /DRYYJGx>w\.9N={Veeer:r8r:r:JIIѸq㔔+5l6=zT~uGCF[)2ЁRF%&&l6ƶ/,˕\l]> xQkl.ض֩tn0]EO .@v]U^^Deffz 2ظ8M8Q&N(I8p@'OTMMRSSJUVVP7pCl66mڤr%''+;;[ :r䈎; j„ ~j֭:|f/IJNNp$y?Dv]o=*Ѩ4%''N~>zTZZ*٬ 555D%%%*((׾uQ555iРATUU>^-RJJvޭ9shƌ]CzznFuV魷j#lǎ*//ܹs5}t'Nƍc}Q^]]Vp =z$tJ !Cbh߾}Z`&Oܮp>ѣG5~x͛7CvEE $]TZZI&i޼yvڲeN>w}W , 4{lo}ڼyN8wyG]w]ȵzyy{={V7nTee##zW%/ u9bsNUUU)//OW^yk͚5r:>|U]]k&/u~`n7t񲳳UYY&YNS'NPII!C<Cz>}ZN67׳ ,fo1&\***$IF $2MK,'!!AK,QRRtq'N;ԡ]r%jii[o d2B1筮T-Zq泻t!k~mfeenh_|m̝;ׯ]s5'Ov'OPZp7̔ztM=q>ouuphҥ:thX?vl-9sFGUrr ;lBB_;ɒư9_B\i2C*55Uf;*ӧw^:|Μ9#Gt.Kl:s>w}W{ӧCzgf}  ߗ$=OBl6뢋.҇~ oP|̘1AR ŗ'pX.KSLp{‰'$ISN zРA~OKK[Qmiii2Llr:a3җǫ:pq>o}}^~e577k9rdH_j4))$I#Fhצ' <.{s*/_s- 322dZUSSah{Rj:' }̮ 3!!AlCF#M͜9S:zn*CjҤI8qbؽ| A׍5J7xcmyL[o魷p[w|y=OMM=JUU/U0:|p=:b69yz 8wvi&544(--Mƍ NoCC$!,<ﰯ *: 8wk0tWhӦM֑#Gvy=_xBJOצv477kGWa//D B؇P30@LNNրԤ544 1hYoo`Af$L,*ڧ#-4 y>DuKRRf͚YfAG}7x#a" aÆ;=Zyyy!? y(}-!4vؠ@*uVW0}}3fΝ;wj֭JJJҐ!CB~NIZl~_xSTT$KvϼUPPÇ&4/ %..@HhP7bvJLLTZZZZZ,ݮV9\.߱'OŢx\4 yohKξ4`͞=[*++SUUw7Í_{ns͘1---*((l>/tUWGǞx}z>}'hӦMڽ;{]w/;vʼlnn{=={V۷oוW^)˥Cرcچn׎;d5k֬/ %>>;?.RCM./n[&Ia 9;l`8$g[ko@D)++Kڹsߗ555ںukN:SN ?$噷5_{w:ھ}jkk5ydeddxhܸqjmmȷ'ZO y'Nj~]__n1chСjhhƍCQJRcc6oެf͚5+e̘1ZWKK^{ۅ{ կ~UƍSSS^}vùv_F)IgX4o>^JJJnӧp8t+!!o1c())I'O땕tMaf?t%$$Bv]Æ ӕW^t?u)=sRZZv*++eٴbŊ%5͚?6oެCHYYYWMM***xby{\ZmڴI'NК5k.Ѩ \.M -%!nþGIR"4n8l6544^ɺKd۷O3fw,%&&U PVV*M6f3F6MժURRF+} /_Ffi5o޼iʔ)JNNٳguijРASFFwƎWǏ̙3;v233yɓ'Uv]jhhPbb.b;o:Gbb."{FA999+wWeϞ=r:5kVHCZZ2eNN &W]]l6[0$ܝo63f= kܸq~]wo6rTRR2M<۾jՈ#4~x 6%`PzzrrrS/_|Eg#]JD$%%E\K,a˿ /4VkTH YK$RF%&&l6 %ޏ@,˕\l]> Q {m6:u '՘gi4ĀV\.+.`FQK,UZZgyF}Yâ={ӡa=8ZJJJt}&)))L^slzlY#sh@ 8y򤤶\u7kڻwvܩ]v)++KɊSSSTSS/XW_}umr~h/!!Aqqqjlljjz瑏a6@"(ܬw}W;c04k,M>]*..Veejjjt:5`%%%i-/3LJNNjUKKZ[[p84Z f)>>>`B " ,4 9˪W :4%:uNڭ9d2Eh @lր4sLM81G8 VOz֮0\w l:CgekϲIR$n/> ,\.n\.\.9555ri*1TFQ2222 2۾6aLockJI.I6IsˮsnkY(ȵ \l`c:j7 ?&7v MQ@@"4D-MQ@@"4D-MQ@@"4D-MQ@@"4D-s XS\\F@wp a9rdK@ *--t  jhZ&E jhZ&E jhZ&E jhZ&E jhZ9tEr8rݑ.[ f/BF p:jllTKKKKn[jmmUcceZ 6@L |477fE^Ң%%%)!!!t94s}f1et@ꔗ<}.}뿔|;.Pss5669et!g FڵK?$?n8vn6n}շ.9N8p@Z\oDUUUl c}ǺƮ>}Z4hР@q:jiit"J/Mu4 F=Ӻ馛z)\^ }5c M0OF3g(--M+/[LN3>\.-]TRۼ\sM+a3g())I>&LF,'z`vnVY3儦_7]*TVg_N1 ZxM3H.IZn]H6׬Y#˥[nE]^Lڳg>IR p8.!jDxPS qCn;.n>w>ǖ; u m9_MA˗/WrrʴyN[RRm۶)!!AwqGU{֯_/m̛o9K.{]8X|\Ԣ{TRJb`xB/ r ;=|VҬR{MC@ JJJ?Q֭ҥKe6?{zg~PZZZt:a*))`5c u]JLLt{á^oJKKp84tP͝;W ,pK/ӧ멧 mӲ>|rsso}K#Fy?!#IZdƞϖ-[kȑ#jhhȑ#5~x͟?__Wn袋+hΝ*..Ԙ1ctV||߶^{jkko'M4y~[nѶm/ȑ#X,Z`~ۯPl6zwTVVJ%%%)==]3fu]Sv}Woŏ"]Fh`e8.kԜxlQ ғLZ F[U6N8TpƮ'ZXZr{ڑAYI_ߢ[/`0ٮ4 F~zt)mٲE_=ĉzeXo~3O<':p{ў={k?&OtǏGQ~~ǎӱcǴnݺkUYYo]+??_)E}mjj cy(((PAA6oެ%K?q+55/}i߾}ڼyz)eeeyY,L&9N<}---Տ~#[~ {b:r}{SCժ֑#GE \ δjk?mt)d3a6@&Y;mj1Țf4fM֡FA7{UWW+%%EwML8qB6mҦMuW*''G骯סCsԩSկ~K.DG݊ rǩ#v]wJKK5p@XB_|V:^xHvgmF}{ɓ5zhUTT_K/SNiʕZj[le]&5\i?$iʔ)ZdrrrTUU.8 Р|P u=hҤIZɓ'gi޼y! vwY?~Zͭ7m;2E%_iMj$ ΤOi%E~CΙ3G3f7߬'Ow?ZzgzfddhڵkϞ.M:UW_}/_Zm޼Y<@Hmy;7TO=JKK?OѼy\x -]Tg֟gxogeeiʔ)JIIGoɓ'5lذ]wgO?U}},WV뗿XRVVf̘ѽS<Ԥ~TaLeY4^=a8=vs8IWh]2/VuDBM@3""))I~/{cz]VNS7x_ؙ&o`x RRRt뭷J>su z饗$Iw;|;#z•/\R7 Wss}YImyF? L_7ݮף0'+zIms33&n[n>K7]V 0 zaPtIj{n%ۭR6 X4 -_\III*--֭[%IO͛;䶎?VI_ƍ'I:zh=W_~KRXXZZw~ǏpHΝdIiii0`$r٣+//Orַ'|R ogZc6ʔۥKo*pxI.ys5*i% 9 1.99Y~?ꩧҢEn:9|ހ/P+A4hC~p9޽[{QAAUUU577^nnwy];O7hР{Wz3FR"J\ͿD_YYY/իzj%''+//Osт dXB#hk16gvř%> w+Rd^AF 5]ZZvn7b&˗/?=_*ɤ 2 &pHYOk??UVV&IZ;vrrr7x#65n8=zT[n<FIbb$˾دٳgkӦMڹs>ݻWNo~[_R'O>u~FOۻ~`uf>pmFDL[Y 5OWob'!~ 99Y˗/իVt 7hСa8<&MG6gyyyXCCQPPr8Zp9CСCO=\M7ݤ_lz' |̙3Œچ3~Y,-X@ ,sZfj˖-@'hժU$Ԍ3"\YE/~2>̼y@G w%E'kZ:onF|׿>.RM6-"94X|_o}[ayƍaonT^}հ֭[p84l0\RF{v妛n?lv}cǎ.w;w$]~a?OzjHСCuw$V8vh:qΞ=gϪTwF}2קsfvK5.+Nn95z|gϞՎ;R@ DJJ~]vew2dzI+ݻw}zzwgyF ]v]/!t݆ $I#FMŢg޹)Mﻜӷ'hZZw}_־}dXtUgWF$I'N6{bƶ?9Ξ gH[ vUWWvU^^gΜi>UUUnaY&}V28Ԭ}nZʂzhA/SI IDAT 4gz󋶩Db1|ضm&\4[^+Vv?)˥_/uQf}~4TGn^}jjjTXX'|Rѭ<=HϜ9OT]]SNwC= NgڴiDn]V7p~_wQ~~=>H7nԣ>('xBSUU>\R?$IsOL2ER[gIT__6w<;vL~$Ug鮻ғO>={ԩSڿJ2224~n){Ѳet뭷WUU֮];#t.Kwy֭[J\R˖-mݦ{F`zK{bpsAҢi)=6~t9{lMK9K-|i-&LInnBM1&OJJ~g?>SmذA6lhTbbYfm?d7ѣ>r]Vk׮{̔)S:י~e})%%异9shݺu/~{J/^xᅠ7׸q$IYYYZjM'OԚ5kfm~W˗/vGu]w%&&Yv~ny5o<=jjj=#ժnMw/_|իW}~ժdV@ݻW>Gov4u_^?7#<{L3g{))ܒ۩HTU]TmVnAYIkZNnwӷDiӦ)11Qߍ'Ԕ'F<@!3f^Z۶m￯"l6k… u饗>//O6lի﫬L ѣtR-^X?+]OS]qzWTTT9R&Mw߭D-^ܸqz'kΝڳgUWWj2dhΜ98pӧO׆ ~z߿_GQ]]233+!qíÆ z'~UWW+''0=:|xJ^iJ˖-땶_|EJ?/Le1*~sg v9%SoYMFE~ `hR@6>0hbYPP[(`0h…1jzG2222 2۾6}mbubRKMܲܲ;ZA/ rm6:u '1əC;wn{WZ δF;Sn%)LƄ8IjΩeKSƏ뮻I̩  zɊ+;f6..N_ϟѣG`0X;vƍ U+IFQ+V{;10wssg]ۥYco:4klvAAN4kBΆ5?~|$zhdӦMA̴4ZJ<&NxY,OeeeVH- n3gXm6\_@5B4C);;ofm[2dz衰jQdl{F+ZJM?'O=)zyt]u26I$M!6 ZRPp$ + sOW:|]zrUhm Z2m:If9?sz>9Z!'{g&? XBOi``@C=7mqv]7|s*4TgB='R8ZW}B3C`a7H Y*w2~3n}cccڲelqn[?//b]4 Cf3YG\nItHw6-gbIe&&*4$Ы~_}Uuvv&T̙f[/o*͗{4$7 VE& gٰ8C-BS]#S#/&Bked)ffL-@\Rw|Vw}fΜ*}oKw+WbIlNg4%?im6l6y: 鱝}lз~f{2LW"scmA3kf=kIL)n[Gn[n[cccVMMM HcddD}}}*//mx<Τ^TRRʤC^:0?ݕsE=#%]]GqKnM82|l<Ny׏T%r8ig3!|GwnL3dUTT$)&ފl H+$%IrMpqٱfM~̈́Dtt=FGGCXg|ƴsN\.]}?5=/~iIb=p_W:tHgΜQqq/^5kD?ZVO %W 7xPQUUր3gΜb-*Ste2Mx?ydi?5hZџ$mv-)5fJ 3%et & N<{Jjkk#:yz{{500 ͦBkΜ9 4uԤ%}e;vLSN՜9sݭgxb'R<3gHM/}KiUӕ“ 4l63>ݬlPӡ-}޳'/M%I{WgNL9]QQf0%%%Kr& fΜJn͚5+ISNUsՌ3=iii믿fIRqqNJ_:qvڥ .@ׯWaaajhhбcT[[[ougxbg޿Vb WJ0fum>z~Nm6aoꫯΚ@hzp8t%hɒ%nxxX|M)-ZH}}}zg4<%INn۟_>7߬wyGPoof̘~q;Q߿_ٳg544bUTThɒ%Zpa@{ǣ/r81[jhhٳg5k,\RNҩSt7nkjhhО={te^G#}U__{η۶mڶm 6|m/|AyyyQ_d'˥ݻwImmmr:֪Ug5553LqFzzwuo~UWWcؤ{_K3}O;CVhƌիp8B>fR#߯ n/ןJPαƧb6yl4#5i3_|@'eXoЏ6U}sD꘨u[VSp8LLBM@&7%AVyy*++ѡ={رcKohllL*,,Tgg:::РijkkSii߯ÇѣtO/Ȭࠎ;cǎE|ۧ^zI6M%%%>}ڪV?~\zk1###ڶm9"ݮrGTSSH i֭jjj􍷱Q-ܢ"ȑ#5c uvvj:z>O›<]x:x /PT]]3gСCr:SAAA@xm422Q[[4c vQf͚t٩+VTfz5ggcSL>z1_HTVVr#럊͛X\(ܿn[=FGG5mڴ^hnW^^588f577ȑ#[UZZQ_EE*htF=HZdM# n{nt>~2myx1f:UԷnuS|SrLC fZvӦMޮ;vhڵZjG<{K. ojkk|r'OjӦMھ}Ν (^y /Ե^զM!sY`N͛赵gu-Xo׮]:rtޮӧcǎjjjҢEt^6=s:uhÆ c te344-[ɓڹs>I_?oTYY~m]}Zbi]]]խުyIKٳw6l^/oIҫNZJW\qG 45kf͚|ݻW6lŋ̝;7~^TW^Q{{{h_i{WPRKc_bE@oWW?]n喈KDW,(#S#_7,'L")|UWaa.I!XUUV^-IjiimҞ={4m4x㍓1cFsommՁTQQ 6쫪ҭ*ݮ_]]S_>#GT֭mM sm^tJO7Qhp :ٯ˕W^pOnS^^;SN#? 8C]?$M6ݷfnԜpp'iWzg8үQ DkToׯwˏњWi>ѧ9~CT?dU@_y)f25~[H`bƌ+B M={seL}Rc>qn,YQHsII;}t-\PӧU^^?9p8'~ȌwF믿.I*b$;ok z3.ɼT.v=h)SxbٳGO6:ٟU Wݷa+/ҫ=4'4mcl$Iqil-yܒǣQi&xx~&ls!}|8} ECOיnЇ?ai:zܬ;wk X+ð7V N:А)+**|ۢ0c&r4\d\H-*ߛGmvRaPSiK7{r1Q9~D7՝U3JZH,sK53 3ʺB$7d7oVZRSD IDAT>ᆱ6]r%+~Ț>}>3gM:U2xUn[%k%%%Zf֬Y~ݻWom6ib744vTyY={oАUSS0g~LV ܴR|#М lN}ӣ{rXZGu˥3c:3h2H0cN3k5=n sbY@[YgWYMUST3ݩ3dNTO4lC 9̻Fj*l_]]-IڳgVX1`k]nҥ~2 ?￯UV5xU__/kD7)SteĉjmmUgg~ƫr=Vڄ .k^⋺+vu=zT===5225k;qccc-ѻ^3g&=)8FGG'=1l3gΤcʄ } 400aXq aU=nmfpi 1Lrܹs`jͦW͟?_צM|S8JߺukT^@qYmٲERzw^xt⋓ٳCΟ?_g6l٢!Yt]Xx{TgyyyrmkiiQKKˤxGir/I:xo[~~Z9N8p@/裏7e]9s樧GկO]7|Νw1/~X'NmOQJk*W_ Kχc֭S z{{uEsʄ }GyPPP Ñad >z~8N9N=޿O2 3ي Mq\sҢ'xBUUU*//Ȉ:::ק~J믿^>NDO;w=~Zg֪UoA6mJJJ422SNillLk׮Uaaa@?\p^{5۷OVU-X@tA9sFUUU?*++u饗RyyΝIc:=\泹GRc,Jkt5詧Ҿ}t1G!rjhh/~ ͘1Cn[r\:nݺc^Wqqusٿ78_fT`643X`*$d+Mqź뮻~9rD]]]:t萦Lr]z?UTT|M577KEEEZl.R+:uTD5kNjooӧU^^/\]tI{ћoV577+??_eee'M=Y^^O|z뭷ܬiZxϟ hPPP;CZZZ|@Tu\sn֦]uUVccz{{}}͞=[_|Zrvڥ{NwyoJ]qlE{͞W̙-^8`_Gl&5w߭_]Oӧ5}t-_\˖-ӣ>إKV|AmMMϟ.hRPտr8*))Q___%%%TgZdJ(?9c1dL\"scmA3kf=kIL}l\bllLrݪIPrzgԤtMLÕAΝ;WwqG1rn=b3 Å^/ 23WSSvt:'*q}h_!-Ok{kL?dYc̎5ۧ mk&k%fݡ$c M`n릛nRMMc : Wooo)D:iWח@x*))I0R03̪)،#4]\ ~zW_Վ;TUURippP===_~6$8p@@d ]W@L3Daq:Zm hl6֬Y˗^'NPGGr4eN .Lpsؘ9 <Ϻ}5k,Xd.áRkxxX ;MUl69N婠 3" " ,0G "RPPe˖iٲe &矗UTT.i=Dp8IG @hj̙Z~>nR-ҥ^t&@*((˵|tH{h,ME 4Ó Ȉ@eh,MEݘ2,F 4X&"`Y,+MOd2)& sXM"`Yt\rl΅rF.5>6 {/"0mҟ1I{lS<ه/ Q`F"mf9K4LmqS΅=$byX{f?m0}l7k_ܯv+,,ƫ3u.tM6ֹ0%bmm-&@\.5::?$6MNSyyy*((C``F2f8Ѭi0X}|0liڇQIW=˥^uwwk``@fJ3j``@  y*tH*W vLH1%7ʜ&ݒ6o|(9CCCp4P@ԺܼyYE̦x e8qGN@ӊ7J"HViz!d{)קtLdCJLeIY#Wh$bpe7ᦢz衇[ZZ q>x===ZjVZ]vfhh('ý*5z]kg) &TG#yɐ2t XCCCW #ٱc>}NSgVMM.u]***JhmmmzWoQj͜9S˖-Ӎ7ި;/#2ʩL>p{(v߫efeьWn l~߬7K׿/31566_׃>[oU۷o ,OnM?믫IбcǴk.=úc{@L#^Mdީf]"n.US*lϧ, Mk UxmƻϿzæX?zo\|O3>|_ɓڱcnݪ.}TMM.\Ƒ"ZWIŋ~z-ZHSGGZ[[;wڵk;h ù\. {i7<7jxxXo_i%ݭ}s:}o[֭ \.lDy7###Ȉ466&-khfKĪPcet:t:{hV ?\z# bZ2f#Y?3Z9rHLod4LJ7\pezWuں$ I*T__/BM {\z饺OU^^^|[ӧURR\a!7::!XF&Lxa!iV566gϪUOfS9cϞ=ߨ<ƳhpJ0x UBmjHr^z?|~/g }OJ_3oOhb0+Z UL ,i')#MIR{{N>tv߳z649 U5KE'zY(g Dl-Hidm_KpR`ƍ7nņ;gϞy2Ç%Ieee3gNv=nݪÇ_t/7=O}J7n4mSO?M^z)`~=SO~K駟֫'NriZvސaؘ[/466ٳgkڰaCH.Km6566fN+V=ܣ{~ڽ{$馛nݞ7z߯;S/?׆ t}MjzD;^Iӳ>;wU*))QEEVX}CZlY 8Dx<ٳgv]*,,TAAoITǷ𰆆488 6igm6v+А4}t?\aְR`:mڬMmGO㕱!l&Ije4HƐ?~c[SFT()}sۿo1}? hoo{Iwab[[8W}}l٢nI_WURRqnܸQӦMә3gݻW{Ֆ-[#jұǏ7M͂MtY BĬoӟcbӈ̌dZPUTg %Ҿmh&39#=PU~Ac 7QI?O;~ӟn`mmuv}y f?xl6l6v9 JIT766ӧOk޽z'u3̤~FGGjiiO~RK,QQQ>gyFЛo|P_6m*++CXXXJMWRR{ӦM??i…:٩۷OFFF{^׾3gh޼y'?EBN /m۶ntCk׮??jr\:xy577?~O*fzzz|Ɍ3¶%>pٳեEb^h;00UQQV\[ .TQQzzzڪ+ $jhhhH]]]r\)S4m4u)Shʔ)ՙ3gcie.K*//Xp8de5{Hnկe˖^g..&eYufb:3dHŴƯ*6# 5]))o˖-glٲY~{y-*++p8 Slt$˽rU/}INoO>ZZZT^^|P}fW\'zcmذA+WLs_*--}]YY .@z'{nי3gT^^xIRyy,Yrw3=o[utth]veZt>OU6R*MoU;Ƭx8ftnZZv1R BICK*3[ӿ[$4KLL)*4#'\Eٱfe"4͎ v`fCQOmo *E$F&* 6l0,Čb3L9hJ9H ~CpWsy c$B3~bv6Uik &؛&ov'IDATxd> G2 pzI[mhX3헐tBP4Ͷlv-MH?ֿwY}n&cl?Wgo 69U^FZ. 5mRhf|0ʔ?PF8Tsfo -ۺ&>{5@ @ BUO9` k#0 -SJ֮Ҍv[*xڄ;BS7YY*0͚5[3S20UX ͬMUTg&J(Tet"2T_OjN^񛅚*4rM&)\hu*NqL#iuf8Tg@6K|.ɪ &4AU/%Xd= @JV`)Ech,5'̌:3im;-}ʊ l $)t9dHCXc ffڙYfsd*pmjkH{"^l4"~_Afs3 =ܾhe])ew*`ۣp4kol<f" -y/e} @rE:kLmfUMidg ٺW4&4a`mc 5paf+4@ R m(03 2̔4_"4'P[$d,-p!eUffՒфVU&fmh*f4G{6 R ڄm)Ef&{LD!B(+цּ ,M+i[]g3ڰ12pm#OBSFD91l. P$Z,a_Ac:L$XNjUR:.c]S3vrKUѸ?yF=P5*4iV 5m !+$28 ח;DpSƲe9!TWik1}ΌW.ݧZCh4#]O3ؾH2CͱM4r" ͥ(Uڤ*ԌHeJYH*c 1G0fC>-'Wʄg#=&jpDžjc_]2Ҿbʌq LM 5E{p_G3LNBh6wZhd?ȵ@SԳoXh `kkx<)B\ UM*< 6##+1>b7Qա*Mˡf4$r3@fHt6Ҿ3- WCd>dK`.#WC2A2hHǐ5;ql"\khzJ3TXD1$ A^:°h1|nTR.Cl 5cxrW4bg#is㕓aDgõJe8#wǥ2ȌhF@3eKk>3@0L#kv|4DfZa8ڧx^7QURd!^"ֺLVaD!d:u wrjT(X- vLS!'HUxDNa1%R·QDU8p{ -H2M6<@@+!f>Y$!ʡfc5dTnD"!f~QH~̥uji' H4s2-0Ӏ*L5͎OŸ)8N#՞iDZfrTW HKDPxqp-3($IA+~:(a Hd/D{p@ X j:M{IENDB`extension-manager-0.3.0/meson.build000066400000000000000000000020751421751161400173060ustar00rootroot00000000000000project('extension-manager', 'c', version: '0.3.0', meson_version: '>= 0.59.0', default_options: [ 'warning_level=2', 'c_std=gnu11', ], ) i18n = import('i18n') if get_option('development') app_title = 'Extension Manager (Development)' app_id = 'com.mattjakeman.ExtensionManager.Devel' else app_title = 'Extension Manager' app_id = 'com.mattjakeman.ExtensionManager' endif config_h = configuration_data() config_h.set_quoted('APP_VERSION', meson.project_version()) config_h.set_quoted('GETTEXT_PACKAGE', 'extension-manager') config_h.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir'))) config_h.set_quoted('APP_ID', app_id) config_h.set10('IS_DEVEL', get_option('development')) configure_file( output: 'exm-config.h', configuration: config_h, ) add_project_arguments([ '-I' + meson.project_build_root(), ], language: 'c') subdir('data') subdir('src') subdir('po') gnome.post_install( glib_compile_schemas: true, gtk_update_icon_cache: true, update_desktop_database: true ) extension-manager-0.3.0/meson_options.txt000066400000000000000000000001411421751161400205710ustar00rootroot00000000000000option('development', type: 'boolean', value: false, description: 'Produce a development build') extension-manager-0.3.0/po/000077500000000000000000000000001421751161400155565ustar00rootroot00000000000000extension-manager-0.3.0/po/LINGUAS000066400000000000000000000000741421751161400166040ustar00rootroot00000000000000ca cs de es fr hu id_ID it ja nb nl nn oc pl pt_BR tr ru_RU extension-manager-0.3.0/po/POTFILES000066400000000000000000000017671421751161400167410ustar00rootroot00000000000000data/com.mattjakeman.ExtensionManager.desktop.in.in data/com.mattjakeman.ExtensionManager.appdata.xml.in.in src/exm-application.c src/exm-browse-page.blp src/exm-browse-page.c src/exm-comment-dialog.blp src/exm-comment-dialog.c src/exm-comment-tile.blp src/exm-comment-tile.c src/exm-detail-view.blp src/exm-detail-view.c src/exm-extension-row.blp src/exm-extension-row.c src/exm-install-button.c src/exm-installed-page.blp src/exm-installed-page.c src/exm-rating.blp src/exm-rating.c src/exm-release-notes-dialog.blp src/exm-release-notes-dialog.c src/exm-screenshot.blp src/exm-screenshot.c src/exm-search-row.blp src/exm-search-row.c src/exm-window.blp src/exm-window.c src/local/exm-extension.c src/local/exm-manager.c src/local/shell-dbus-interface.c src/main.c src/web/exm-comment-provider.c src/web/exm-data-provider.c src/web/exm-image-resolver.c src/web/exm-request-handler.c src/web/exm-search-provider.c src/web/model/exm-comment.c src/web/model/exm-search-result.c src/web/model/exm-shell-version-map.c extension-manager-0.3.0/po/ca.po000066400000000000000000000171721421751161400165110ustar00rootroot00000000000000# Catalan translations for extension-manager package. # Copyright (C) 2022 THE extension-manager'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Automatically generated as es, copied and adapted as ca, 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-01-27 13:24+0100\n" "Last-Translator: Ícar N. S. \n" "Language-Team: none\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Gestor d'extensions" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Una utilitat per navegar i instal·lar les extensions del GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Característiques:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Explora extensions.gnome.org dins de l'aplicació" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Gestiones les extensions que ja tens instal·lades" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Una utilitat per gestionar les extensions del GNOME Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Corregeix una fallada que de vegades ocorre quan es desinstal·la una extensió" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "La primera actualització de la funció al gestor d'extensions. Els ressaltats " "inclouen:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Tema fosc i suport per substituir l'esquema de color del sistema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Mostra les captures de pantalla als llistats d'extensions" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Comprovació de compatibilitat de la versió del Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Traduït en més de set idiomes" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Ordena els resultats de la cerca" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Activa/desactiva les extensions globalment" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Mostra les extensions d'usuari i sistema per separat" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Rendiment i estabilitat" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferències de l'esquema de colors" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Si s'ha de seguir l'esquema de color del sistema o forçar el mode clar o " "fosc." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Ícar N. S. " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Una eina molt senzilla per navegar, descarregar i gestionar les extensions " "del Shell del GNOME." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Pàgina principal del projecte" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Cerca extensions" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Introduïu una paraula clau per cercar a «extensions.gnome.org» extensions " "del GNOME Shell." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "p. ex. «Blur my Shell»" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularitat" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Baixades" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recent" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nom" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "No s'ha trobat cap resultat" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "S'ha produït un error" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Descripció" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Versions compatibles" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Enllaços" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Visualitza a les extensions" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "" "Aquesta extensió és incompatible amb la vostra versió actual del GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Instal·la" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Instal·lat" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "No compatible" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Carregant…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Vegeu els detalls" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Elimina" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Extensions instal·lades per l'usuari" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Extensions del sistema" #: src/exm-window.blp:50 msgid "Browse" msgstr "Navega" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Segueix el sistema" #: src/exm-window.blp:78 msgid "Light" msgstr "Clar" #: src/exm-window.blp:83 msgid "Dark" msgstr "Fosc" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Dreceres de teclat" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Quant al gestor d'extensions" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Confirmes que vols desinstal·lar-la?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "General" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostra les dreceres" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Surt" extension-manager-0.3.0/po/cs.po000066400000000000000000000173531421751161400165340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Vojtěch Perník , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-09 20:48+0100\n" "Last-Translator: Vojtěch Perník \n" "Language-Team: Czech \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" "X-Generator: Poedit 3.0\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Správce rozšíření" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "" "Jednoduchá aplikace, jež vám usnadní procházení a instalaci rozšíření GNOME " "Shellu." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funkce:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Procházejte web extensions.gnome.org přímo v aplikaci" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Spravujte rozšíření, která již máte nainstalovaná" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Jednoduchý správce rozšíření GNOME Shellu" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Opravuje občasné padání aplikace při odinstalaci rozšíření" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "První aktualizace s novými funkcemi. Mezi hlavní novinky patří:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "Tmavý režim a podpora pro jeho upřednostnění před barevným schématem systému" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Zobrazování snímků obrazovky v seznamu rozšíření" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Kontrola kompatibility s aktuální verzí Shellu" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Přeloženo do sedmi jazyků" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Filtrování výsledků vyhledávání" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Globální přepínač pro všechna rozšíření najednou" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Zobrazení uživatelských a systémových rozšíření zvlášť" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Zlepšení výkonu a stability" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferované schéma barev" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Určuje, jestli má aplikace použít systémové schéma barev, nebo vynutit " "světlý či tmavý režim." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Vojtěch Perník " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Velmi jednoduchý nástroj na procházení, stahování a správu rozšíření GNOME " "Shellu." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Domovská stránka projektu" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Hledat rozšíření" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Zadejte klíčové slovo k vyhledávání rozšíření GNOME Shellu na „extensions." "gnome.org“." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "např. „Blur my Shell“" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularita" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Počet stažení" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Poslední vydané" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Jméno" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Nebyly nalezeny žádné výsledky" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Nastala chyba" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Popis" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Podporované verze" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Odkazy" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Zobrazit na webu" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Toto rozšíření není kompatibilní s vaší současnou verzí GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Nainstalovat" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Nainstalováno" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Nepodporované" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Načítání…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Zobrazit podrobnosti" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Odinstalovat" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Uživatelská rozšíření" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Systémová rozšíření" #: src/exm-window.blp:50 msgid "Browse" msgstr "Procházet" #: src/exm-window.blp:71 msgid "Theme" msgstr "Téma" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Podle systému" #: src/exm-window.blp:78 msgid "Light" msgstr "Světlé" #: src/exm-window.blp:83 msgid "Dark" msgstr "Tmavé" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "O Správci rozšíření" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Jste si jisti, že chcete rozšíření odinstalovat?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Obecné" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Zobrazit klávesové zkratky" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Ukončit" extension-manager-0.3.0/po/de.po000066400000000000000000000171371421751161400165170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Antifallobst , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-03 21:39+0100\n" "Last-Translator: Lauri Jouaux \n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Erweiterungs Manager" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "" "Ein Programm zum Suchen und Installieren von GNOME Shell Erweiterungen." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funktionen:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Durchstöbern Sie extensions.gnome.org direkt in der App" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Verwalten Sie bereits installierte Erweiterungen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Ein Programm zum Verwalten von GNOME Shell Erweiterungen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Behebt einen Absturz, welcher manchmal beim deinstallieren einer " "Erweiterung auftritt" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "Das erste Funktionsupdate für Erweiterungs Manager. Höhepunkte sind:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "Dunkles Theme und unterstützung für das Überschreiben des System Farbschemas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Zeige Bildschirmfotos in Erweitungs-Eintrag" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Shell-Versions Kompatibilitätsprüfung" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Übersetzt in sieben Sprachen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Suchergebnisse sortieren" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Globaler Erweiterungs an/aus Schalter" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Zeige Nutzer- und System-Erweiterungen getrennt an" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Leistung und Stabilität" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Farbschema Einstellungen" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Ob das System-Farbschema oder der helle oder dunkle Modus bevorzugt werden " "soll." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Lauri Jouaux " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Ein sehr einfach zu bedienendes Tool zum Durchsuchen, Herunterladen und " "Verwalten von GNOME Shell Erweiterungen." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Projekt Webseite" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Suchen Sie nach Erweiterungen" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Geben Sie einen Suchbegriff ein, um auf 'extensions.gnome.org' nach GNOME " "Shell Erweiterungen zu suchen." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "z.B. \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularität" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Downloads" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Neuste" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Name" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Keine Ergebnisse gefunden" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Ein Fehler ist aufgetreten" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Beschreibung" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Unterstützte Version" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Links" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Auf \"GNOME Extensions\" anzeigen" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Diese Erweiterung ist inkompatibel mit ihrer aktuellen GNOME-Version." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Installieren" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Installiert" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Nicht unterstützt" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Laden…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Details Anzeigen" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Entfernen" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Nutzer-Installierte Erweiterungen" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "System Erweiterungen" #: src/exm-window.blp:50 msgid "Browse" msgstr "Suchen" #: src/exm-window.blp:71 msgid "Theme" msgstr "Theme" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Wie System" #: src/exm-window.blp:78 msgid "Light" msgstr "Hell" #: src/exm-window.blp:83 msgid "Dark" msgstr "Dunkel" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Tastenkürzel" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Über Extension Manager" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Sind Sie sicher, dass Sie deinstallieren wollen?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Allgemein" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Zeige Tastenkürzel" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Beenden" #~ msgid "Go to Page" #~ msgstr "Zu Seite gehen" extension-manager-0.3.0/po/es.po000066400000000000000000000256561421751161400165430ustar00rootroot00000000000000# Spanish translations for extension-manager package. # Copyright (C) 2022 THE extension-manager'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Automatically generated, 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-03-21 13:23+0100\n" "PO-Revision-Date: 2022-03-21 13:27+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:6 msgid "@app_title@" msgstr "@app_title@" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Una utilidad para buscar e instalar extensiones de GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:12 msgid "Features:" msgstr "Características:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Explore extensions.gnome.org dentro de la aplicación" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:28 msgid "Manage the extensions you already have installed" msgstr "Gestione las extensiones que ya tiene instaladas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Una utilidad para gestionar las extensiones de GNOME Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:43 msgid "The second feature update to extension-manager. Highlights include:" msgstr "" "La segunda actualización de las funciones del gestor de extensiones. Lo más " "destacado es:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:45 msgid "View comments and reviews" msgstr "Ver comentarios y opiniones" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:46 msgid "Support for in-app updates" msgstr "Soporte para actualizaciones dentro de la aplicación" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:47 msgid "Better handling errors and out-of-date extensions" msgstr "Mejor gestión de los errores y de las extensiones obsoletas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:48 msgid "Allow installing 'unsupported' extensions" msgstr "Permitir la instalación de extensiones \"no compatibles\"" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:49 msgid "Display release notes on first run" msgstr "Mostrar las notas de la versión en la primera ejecución" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:50 msgid "New app icon" msgstr "Nuevo icono de la aplicación" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:51 msgid "Optionally sort extensions by enabled status" msgstr "Opcionalmente, ordenar las extensiones por su estado de activación" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:52 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:59 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:64 msgid "Translation updates" msgstr "Actualizaciones de las traducciones" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:53 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:84 msgid "Performance and stability" msgstr "Rendimiento y estabilidad" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:65 msgid "Fix special characters in search results" msgstr "Corrige los caracteres especiales en los resultados de búsqueda" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:70 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Corrige un fallo que a veces se produce al desinstalar una extensión" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:75 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "La primera actualización de características del gestor de extensiones. Lo " "más destacado es:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:77 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "Tema oscuro y soporte para sobrescribir el esquema de colores del sistema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:78 msgid "Shows screenshots in extension listings" msgstr "Muestra capturas de pantalla en los detalles de las extensiones" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:79 msgid "Shell version compatibility check" msgstr "Comprobación de la compatibilidad de la versión de Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:80 msgid "Localised into seven languages" msgstr "Traducido a siete idiomas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:81 msgid "Sort search results" msgstr "Ordenar los resultados de búsqueda" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:82 msgid "Global extension on/off toggle" msgstr "Activación/desactivación de la extensión global" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:83 msgid "Displays user and system extensions separately" msgstr "Muestra las extensiones del usuario y del sistema por separado" #: src/exm-application.c:106 msgid "Extension Manager (Development)" msgstr "Gestor de extensiones (Desarrollo)" #: src/exm-application.c:107 msgid "Extension Manager" msgstr "Gestor de extensiones" #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:117 msgid "translator-credits" msgstr "Óscar Fernández Díaz " #: src/exm-application.c:118 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Una herramienta muy sencilla para navegar, descargar y gestionar las " "extensiones del shell de GNOME." #: src/exm-application.c:124 msgid "Project Homepage" msgstr "Página web" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Buscar extensiones" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Introduzca una palabra clave para buscar en 'extensions.gnome.org' las " "extensiones de GNOME Shell." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "ej. \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularidad" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Descargas" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recientes" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nombre" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "No se han encontrado resultados" #: src/exm-comment-dialog.blp:35 src/exm-detail-view.blp:35 #: src/exm-detail-view.blp:168 src/exm-detail-view.c:350 msgid "An Error Occurred" msgstr "Se ha producido un error" #: src/exm-detail-view.blp:95 src/exm-extension-row.blp:74 msgid "Description" msgstr "Descripción" #: src/exm-detail-view.blp:113 msgid "View on Extensions" msgstr "Ver en Extensiones" #: src/exm-detail-view.blp:130 msgid "Supported Versions" msgstr "Versiones compatibles" #: src/exm-detail-view.blp:146 msgid "User Reviews" msgstr "Opiniones de usuarios" #: src/exm-detail-view.blp:187 msgid "Show All Reviews" msgstr "Mostrar todas las opiniones" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:364 msgid "Loading…" msgstr "Cargando…" #: src/exm-extension-row.blp:33 msgid "An error occurred while loading this extension" msgstr "Se ha producido un error al cargar esta extensión" #: src/exm-extension-row.blp:46 src/exm-install-button.c:105 msgid "This extension is incompatible with your current version of GNOME." msgstr "Esta extensión es incompatible con su versión actual de GNOME." #: src/exm-extension-row.blp:59 msgid "A newer version of this extension is available" msgstr "Existe una versión más reciente de esta extensión" #: src/exm-extension-row.blp:100 msgid "Version" msgstr "Versión" #: src/exm-extension-row.blp:126 msgid "Error" msgstr "Error" #: src/exm-extension-row.blp:161 msgid "See Details" msgstr "Ver detalles" #: src/exm-extension-row.blp:170 msgid "Remove" msgstr "Eliminar" #: src/exm-install-button.c:115 msgid "Install" msgstr "Instalar" #: src/exm-install-button.c:120 msgctxt "State" msgid "Installed" msgstr "Instalada" #: src/exm-install-button.c:124 msgid "Unsupported" msgstr "No compatible" #: src/exm-installed-page.blp:25 msgid "User-Installed Extensions" msgstr "Extensiones instaladas por el usuario" #: src/exm-installed-page.blp:38 msgid "System Extensions" msgstr "Extensiones del sistema" #: src/exm-installed-page.blp:78 msgid "Updates are available" msgstr "Las actualizaciones están disponibles" #: src/exm-installed-page.blp:95 msgid "Log Out" msgstr "Cerrar sesión" #. Translators: '%d' = number of extensions that will be updated #: src/exm-installed-page.c:215 #, c-format msgid "One extension will be updated on next login." msgid_plural "%d extensions will be updated on next login." msgstr[0] "Una extensión se actualizará en el próximo inicio de sesión." msgstr[1] "%d extensiones se actualizarán en el próximo inicio de sesión." #: src/exm-release-notes-dialog.blp:7 src/exm-window.blp:95 msgid "Release Notes" msgstr "Notas de la versión" #: src/exm-window.blp:42 msgctxt "Navigation" msgid "Installed" msgstr "Instaladas" #: src/exm-window.blp:50 msgctxt "Navigation" msgid "Browse" msgstr "Explorar" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Seguir al sistema" #: src/exm-window.blp:78 msgid "Light" msgstr "Claro" #: src/exm-window.blp:83 msgid "Dark" msgstr "Oscuro" #: src/exm-window.blp:89 msgid "Sort Enabled First" msgstr "Ordenar por activadas" #: src/exm-window.blp:103 msgid "About Extension Manager" msgstr "Acerca de Gestor de extensiones" #: src/exm-window.c:180 msgid "Are you sure you want to uninstall?" msgstr "¿Está seguro de que quiere desinstalar?" #: src/exm-window.c:247 msgid "" "This extension does not support your GNOME Shell version.\n" "Would you like to install anyway?" msgstr "" "Esta extensión no es compatible con su versión de GNOME Shell.\n" "¿Quiere instalarla de todos modos?" #: src/exm-window.c:373 msgid "What's New" msgstr "Novedades" #: src/exm-window.c:375 msgid "View Release Notes" msgstr "Ver notas de la versión" #: src/exm-window.c:379 #, c-format msgid "" "This is your first time using Extension Manager %s.\n" "Would you like to see the release notes?" msgstr "" "Es la primera vez que usa Gestor de extensiones %s.\n" "¿Le gustaría ver las notas de la versión?" extension-manager-0.3.0/po/extension-manager.pot000066400000000000000000000202171421751161400217300ustar00rootroot00000000000000# LANGUAGE translations for extension-manager package. # Copyright (C) YEAR THE extension-manager'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-03-21 13:23+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/com.mattjakeman.ExtensionManager.desktop.in.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:6 msgid "@app_title@" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:12 msgid "Features:" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:28 msgid "Manage the extensions you already have installed" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:43 msgid "The second feature update to extension-manager. Highlights include:" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:45 msgid "View comments and reviews" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:46 msgid "Support for in-app updates" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:47 msgid "Better handling errors and out-of-date extensions" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:48 msgid "Allow installing 'unsupported' extensions" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:49 msgid "Display release notes on first run" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:50 msgid "New app icon" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:51 msgid "Optionally sort extensions by enabled status" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:52 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:59 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:64 msgid "Translation updates" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:53 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:84 msgid "Performance and stability" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:65 msgid "Fix special characters in search results" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:70 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:75 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:77 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:78 msgid "Shows screenshots in extension listings" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:79 msgid "Shell version compatibility check" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:80 msgid "Localised into seven languages" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:81 msgid "Sort search results" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:82 msgid "Global extension on/off toggle" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:83 msgid "Displays user and system extensions separately" msgstr "" #: src/exm-application.c:106 msgid "Extension Manager (Development)" msgstr "" #: src/exm-application.c:107 msgid "Extension Manager" msgstr "" #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:117 msgid "translator-credits" msgstr "" #: src/exm-application.c:118 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" #: src/exm-application.c:124 msgid "Project Homepage" msgstr "" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "" #: src/exm-comment-dialog.blp:35 src/exm-detail-view.blp:35 #: src/exm-detail-view.blp:168 src/exm-detail-view.c:350 msgid "An Error Occurred" msgstr "" #: src/exm-detail-view.blp:95 src/exm-extension-row.blp:74 msgid "Description" msgstr "" #: src/exm-detail-view.blp:113 msgid "View on Extensions" msgstr "" #: src/exm-detail-view.blp:130 msgid "Supported Versions" msgstr "" #: src/exm-detail-view.blp:146 msgid "User Reviews" msgstr "" #: src/exm-detail-view.blp:187 msgid "Show All Reviews" msgstr "" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:364 msgid "Loading…" msgstr "" #: src/exm-extension-row.blp:33 msgid "An error occurred while loading this extension" msgstr "" #: src/exm-extension-row.blp:46 src/exm-install-button.c:105 msgid "This extension is incompatible with your current version of GNOME." msgstr "" #: src/exm-extension-row.blp:59 msgid "A newer version of this extension is available" msgstr "" #: src/exm-extension-row.blp:100 msgid "Version" msgstr "" #: src/exm-extension-row.blp:126 msgid "Error" msgstr "" #: src/exm-extension-row.blp:161 msgid "See Details" msgstr "" #: src/exm-extension-row.blp:170 msgid "Remove" msgstr "" #: src/exm-install-button.c:115 msgid "Install" msgstr "" #: src/exm-install-button.c:120 msgctxt "State" msgid "Installed" msgstr "" #: src/exm-install-button.c:124 msgid "Unsupported" msgstr "" #: src/exm-installed-page.blp:25 msgid "User-Installed Extensions" msgstr "" #: src/exm-installed-page.blp:38 msgid "System Extensions" msgstr "" #: src/exm-installed-page.blp:78 msgid "Updates are available" msgstr "" #: src/exm-installed-page.blp:95 msgid "Log Out" msgstr "" #. Translators: '%d' = number of extensions that will be updated #: src/exm-installed-page.c:215 #, c-format msgid "One extension will be updated on next login." msgid_plural "%d extensions will be updated on next login." msgstr[0] "" msgstr[1] "" #: src/exm-release-notes-dialog.blp:7 src/exm-window.blp:95 msgid "Release Notes" msgstr "" #: src/exm-window.blp:42 msgctxt "Navigation" msgid "Installed" msgstr "" #: src/exm-window.blp:50 msgctxt "Navigation" msgid "Browse" msgstr "" #: src/exm-window.blp:71 msgid "Theme" msgstr "" #: src/exm-window.blp:73 msgid "Follow System" msgstr "" #: src/exm-window.blp:78 msgid "Light" msgstr "" #: src/exm-window.blp:83 msgid "Dark" msgstr "" #: src/exm-window.blp:89 msgid "Sort Enabled First" msgstr "" #: src/exm-window.blp:103 msgid "About Extension Manager" msgstr "" #: src/exm-window.c:180 msgid "Are you sure you want to uninstall?" msgstr "" #: src/exm-window.c:247 msgid "" "This extension does not support your GNOME Shell version.\n" "Would you like to install anyway?" msgstr "" #: src/exm-window.c:373 msgid "What's New" msgstr "" #: src/exm-window.c:375 msgid "View Release Notes" msgstr "" #: src/exm-window.c:379 #, c-format msgid "" "This is your first time using Extension Manager %s.\n" "Would you like to see the release notes?" msgstr "" extension-manager-0.3.0/po/fr.po000066400000000000000000000167271421751161400165420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-01-29 00:51+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Extension Manager" # fdsf #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Outils pour parcourir et installer les extensions GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Caractéristiques :" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Utilisez directement extensions.gnome.org dans l'application" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Gérer les extensions que vous avez déjà installées" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Outils pour gérer les extensions GNOME Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Correction d'un crash qui se produit parfois lors de la désinstallation " "d'une extension" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Première mise à jour des fonctionnalités d'extension-manager. Points forts:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Thème Foncé et prise en charge du Mode Automatique" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Affichage de captures d'écran dans les fiches extensions" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Vérification de la compatibilité avec votre versions du shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Traduits en sept langues" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Trier les résultats de recherche" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Activation/désactivation d'Extension Manager" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Séparation des extensions installée manuellement et intégrée" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Performance et stabilité" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Préférence de la couleur du Thème" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "Mode automatique ou forcer le Thème clair/foncé." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "PaxtonGround" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Un outil pour parcourir, installer et gérer simplement les extensions GNOME " "Shell." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Page d'accueil du projet" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Recherche d'extensions" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Saisissez un mot clé pour rechercher les extensions de GNOME Shell sur le " "site 'extensions.gnome.org.'" #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "Par exemple, \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularité" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Téléchargements" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Récent" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nom" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Aucun résultat trouvé" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Une erreur s'est produite" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Description" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Versions supportées" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Liens" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Vue sur les extensions" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "" "Cette extension est incompatible avec votre version actuelle de GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Ajouter" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Installé" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Non supporté" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Chargement…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Voir les détails" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Enlever…" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Installée manuellement" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Intégrée" #: src/exm-window.blp:50 msgid "Browse" msgstr "Parcourir" #: src/exm-window.blp:71 msgid "Theme" msgstr "Thème" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Automatique" #: src/exm-window.blp:78 msgid "Light" msgstr "Clair" #: src/exm-window.blp:83 msgid "Dark" msgstr "Foncé" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "À propos d'Extension Manager" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Êtes-vous sûr de vouloir désinstaller ?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Général" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Afficher les raccourcis" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Quitter" extension-manager-0.3.0/po/hu.po000066400000000000000000000167161421751161400165450ustar00rootroot00000000000000# Hungarian translation for extension-manager package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # ViBE , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-24 17:48+1300\n" "PO-Revision-Date: 2022-01-26 12:45+0100\n" "Last-Translator: ViBE \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "X-Generator: Gtranslator 3.36.0\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Kiterjesztés-kezelő" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Egy GNOME Shell kiterjesztéseket kezelő alkalmazás." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funkciók:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "extensions.gnome.org kiterjesztések böngészése" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Telepített kiterjesztések kezelése" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Alkalmazás GNOME Shell kiterjesztések kezeléséhez" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Összeomlást okozó hiba javítása amely a kiterjesztések eltávolításakor " "jelentkezett" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "Első funkciófrissítés a kiterjesztés-kezelőhöz. Kiemeltek:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Sötét téma és témakezelés" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Előnézeti kép a kiterjesztésről" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Kompatibilitás ellenőrzése" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Jelenleg hét nyelv támogatott" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Találatok rendezése" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Kiterjesztések engedélyezése" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Rendszer és felhasználó által telepített kiterjesztések" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Teljesítmény és stabilitás" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Alkalmazás témájának beállítása" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "Rendszer témájának követése vagy adott téma beállítása." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "ViBE " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Egy egyszerű alkalmazás GNOME Shell kiterjesztések böngészéséhez és " "telepítéséhez." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Honlap" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Kiterjesztések keresése" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Írj be kulcsszavakat az 'extensions.gnome.org' gyűjteményében való " "GNOME Shell kiterjesztések kereséséhez!" #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "például „Blur my Shell”" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Népszerűség" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Letöltések" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Legutóbbi" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Név" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Nincs találat" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Hiba történt" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Leírás" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Támogatott GNOME verzió" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Hivatkozások" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Megtekintés böngészőben" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Ez a kiterjesztés nem kompatibilis a telepített GNOME verzióval." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Telepítés" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Telepített" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Nem támogatott" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Betöltés…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Részletek megtekintése" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Eltávolítás" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Felhasználó által telepített" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Előtelepített" #: src/exm-window.blp:50 msgid "Browse" msgstr "Böngészés" #: src/exm-window.blp:71 msgid "Theme" msgstr "Téma" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Rendszer" #: src/exm-window.blp:78 msgid "Light" msgstr "Világos" #: src/exm-window.blp:83 msgid "Dark" msgstr "Sötét" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Gyorsbillentyűk" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Névjegy" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Biztos vagy benne, hogy eltávolítod?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Általános" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Gyorsbillentyűk megjelenítése" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Kilépés" extension-manager-0.3.0/po/id_ID.po000066400000000000000000000164201421751161400170710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-26 22:41+0700\n" "Last-Translator: \n" "Language-Team: \n" "Language: id_ID\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Pengelola Ekstensi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Sebuah alat untuk menjelajah dan memasang Ekstensi GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Fitur:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Jelajah extensions.gnome.org di dalam aplikasi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Kelola ekstensi yang telah Anda pasang" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Sebuah alat untuk mengelola Ekstensi GNOME Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Memperbaiki crash yang kadang terjadi selama mencopot sebuah ekstensi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "Pembaruan fitur pertama ke pengelola ekstensi. Sorotan meliputi:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Tema gelap dan dukungan untuk mengesampingkan skema warna sistem" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Tampilkan tangkapan layar di cantuman ekstensi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Pengecekan kecocokan versi shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Dilokalisasi ke tujuh bahasa" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Menyortir hasil pencarian" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Pengalih aktif/nonaktif ekstensi global" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Tampilkan ekstensi pengguna dan sistem secara terpisah" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Performa dan stabilitas" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferensi Skema Warna" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Apakah akan mengikuti skema warna sistem atau memaksa mode terang atau " "gelap." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "neko " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Sebuah alat yang sangat sederhana untuk menjelajah, mengunduh, dan " "mengelola ekstensi shell GNOME." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Beranda Proyek" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Cari ekstensi" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Masukan kata kunci untuk mencari 'extensions.gnome.org' untuk Ekstensi " "Shell GNOME." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "contoh \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Kepopuleran" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Unduhan" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Terkini" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nama" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Tidak Ada Hasil Yang Ditemukan" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Sebuah Error Terjadi" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Deskripsi" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Versi Yang Didukung" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Tautan" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Lihat dalam Extensions" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Ekstensi ini tidak cocok untuk versi GNOME kamu." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Pasang" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Terpasang" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Tidak didukung" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Memuat…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Lihat Detail" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Hapus" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Ekstensi Yang Dipasang Pengguna" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Ekstensi Sistem" #: src/exm-window.blp:50 msgid "Browse" msgstr "Jelajah" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Ikuti Sistem" #: src/exm-window.blp:78 msgid "Light" msgstr "Terang" #: src/exm-window.blp:83 msgid "Dark" msgstr "Gelap" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Pintasan Keyboard" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Tentang Pengelola Ekstensi" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Apa Anda yakin Anda ingin mencopot?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Umum" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Tunjukan Pintasan" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Keluar" extension-manager-0.3.0/po/it.po000066400000000000000000000251721421751161400165410ustar00rootroot00000000000000# Italian translation for extension-manager. # Copyright (C) 2022 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # musiclover , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2022-03-22 18:28+0100\n" "Last-Translator: musiclover \n" "Language-Team: \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:6 msgid "@app_title@" msgstr "@app_title@" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Uno strumento per cercare e installare estensioni per GNOME." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:12 msgid "Features:" msgstr "Funzionalità:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Sfoglia extensions.gnome.org direttamente nell'applicazione" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:28 msgid "Manage the extensions you already have installed" msgstr "Gestisci le estensioni già installate" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Uno strumento per gestire le estensioni di GNOME" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:43 msgid "The second feature update to extension-manager. Highlights include:" msgstr "" "Il secondo aggiornamento che aggiunge funzionalità a Gestore di estensioni, " "tra cui:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:45 msgid "View comments and reviews" msgstr "Visualizza commenti e recensioni" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:46 msgid "Support for in-app updates" msgstr "Aggiornamenti all'interno dell'applicazione" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:47 msgid "Better handling errors and out-of-date extensions" msgstr "Migliore gestione degli errore e delle estensioni obsolete" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:48 msgid "Allow installing 'unsupported' extensions" msgstr "Possibilità di installare estensioni \"non supportate\"" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:49 msgid "Display release notes on first run" msgstr "Mostra le novità al primo avvio" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:50 msgid "New app icon" msgstr "Nuova icona" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:51 msgid "Optionally sort extensions by enabled status" msgstr "Opzione per ordinare prima le estensioni attive" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:52 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:59 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:64 msgid "Translation updates" msgstr "Traduzioni aggiornate" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:53 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:84 msgid "Performance and stability" msgstr "Miglioramenti di prestazioni e stabilità" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:65 msgid "Fix special characters in search results" msgstr "" "Corretta visualizzazione di caratteri speciali nei risultati di ricerca" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:70 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Corretto un arresto anomalo durante la disinstallazione di estensioni" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:75 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Il primo aggiornamento che aggiunge funzionalità a Gestore di estensioni, " "tra cui:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:77 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Supporto per il tema scuro e per sovrascrivere il tema di sistema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:78 msgid "Shows screenshots in extension listings" msgstr "Mostra le immagini nella lista delle estensioni" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:79 msgid "Shell version compatibility check" msgstr "Controllo di compatibilità con la versione di GNOME" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:80 msgid "Localised into seven languages" msgstr "Traduzione in sette lingue" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:81 msgid "Sort search results" msgstr "Ordinamento dei risultati di ricerca" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:82 msgid "Global extension on/off toggle" msgstr "Interruttore globale per le estensioni" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:83 msgid "Displays user and system extensions separately" msgstr "" "Mostra separatamente le estensioni integrate e quelle installate dall'utente" #: src/exm-application.c:106 msgid "Extension Manager (Development)" msgstr "Gestore di estensioni (Development)" #: src/exm-application.c:107 msgid "Extension Manager" msgstr "Gestore di estensioni" #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:117 msgid "translator-credits" msgstr "Musiclover382 " #: src/exm-application.c:118 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Uno strumento molto semplice per cercare, scaricare e gestire le estensioni " "di GNOME." #: src/exm-application.c:124 msgid "Project Homepage" msgstr "Sito web" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Cerca estensioni" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "Inserire un termine per cercare estensioni su 'extensions.gnome.org'." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "es. \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popolarità" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Scaricamenti" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recenti" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nome" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Nessun risultato" #: src/exm-comment-dialog.blp:35 src/exm-detail-view.blp:35 #: src/exm-detail-view.blp:168 src/exm-detail-view.c:350 msgid "An Error Occurred" msgstr "Si è verificato un errore" #: src/exm-detail-view.blp:95 src/exm-extension-row.blp:74 msgid "Description" msgstr "Descrizione" #: src/exm-detail-view.blp:113 msgid "View on Extensions" msgstr "Pagina di GNOME Extensions" #: src/exm-detail-view.blp:130 msgid "Supported Versions" msgstr "Versioni supportate" #: src/exm-detail-view.blp:146 msgid "User Reviews" msgstr "Recensioni" #: src/exm-detail-view.blp:187 msgid "Show All Reviews" msgstr "Mostra tutte le recensioni" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:364 msgid "Loading…" msgstr "Caricamento…" #: src/exm-extension-row.blp:33 msgid "An error occurred while loading this extension" msgstr "Si è verificato un errore durante il caricamento dell'estensione" #: src/exm-extension-row.blp:46 src/exm-install-button.c:105 msgid "This extension is incompatible with your current version of GNOME." msgstr "L'estensione non è compatibile con la versione attuale di GNOME." #: src/exm-extension-row.blp:59 msgid "A newer version of this extension is available" msgstr "È disponibile una nuova versione di questa estensione" #: src/exm-extension-row.blp:100 msgid "Version" msgstr "Versione" #: src/exm-extension-row.blp:126 msgid "Error" msgstr "Errore" #: src/exm-extension-row.blp:161 msgid "See Details" msgstr "Dettagli" #: src/exm-extension-row.blp:170 msgid "Remove" msgstr "Rimuovi" #: src/exm-install-button.c:115 msgid "Install" msgstr "Installa" #: src/exm-install-button.c:120 msgctxt "State" msgid "Installed" msgstr "Installata" #: src/exm-install-button.c:124 msgid "Unsupported" msgstr "Non compatibile" #: src/exm-installed-page.blp:25 msgid "User-Installed Extensions" msgstr "Estensioni installate dall'utente" #: src/exm-installed-page.blp:38 msgid "System Extensions" msgstr "Estensioni integrate" #: src/exm-installed-page.blp:78 msgid "Updates are available" msgstr "Aggiornamenti disponibili" #: src/exm-installed-page.blp:95 msgid "Log Out" msgstr "Termina sessione" #. Translators: '%d' = number of extensions that will be updated #: src/exm-installed-page.c:215 #, c-format msgid "One extension will be updated on next login." msgid_plural "%d extensions will be updated on next login." msgstr[0] "Un'estensione sarà aggiornata al prossimo accesso." msgstr[1] "%d estensioni saranno aggiornate al prossimo accesso." #: src/exm-release-notes-dialog.blp:7 src/exm-window.blp:95 msgid "Release Notes" msgstr "Note di rilascio" #: src/exm-window.blp:42 msgctxt "Navigation" msgid "Installed" msgstr "Installate" #: src/exm-window.blp:50 msgctxt "Navigation" msgid "Browse" msgstr "Sfoglia" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Sistema" #: src/exm-window.blp:78 msgid "Light" msgstr "Chiaro" #: src/exm-window.blp:83 msgid "Dark" msgstr "Scuro" #: src/exm-window.blp:89 msgid "Sort Enabled First" msgstr "Prima estensioni attive" #: src/exm-window.blp:103 msgid "About Extension Manager" msgstr "Informazioni" #: src/exm-window.c:180 msgid "Are you sure you want to uninstall?" msgstr "Disinstallare l'estensione?" #: src/exm-window.c:247 msgid "" "This extension does not support your GNOME Shell version.\n" "Would you like to install anyway?" msgstr "" "Questa estensione non supporta versione installata di GNOME.\n" "Installarla comunque?" #: src/exm-window.c:373 msgid "What's New" msgstr "Novità" #: src/exm-window.c:375 msgid "View Release Notes" msgstr "Note di rilascio" #: src/exm-window.c:379 #, c-format msgid "" "This is your first time using Extension Manager %s.\n" "Would you like to see the release notes?" msgstr "" "È la prima volta che utilizzi Gestore di estensioni %s.\n" "Vuoi leggere le note di rilascio?" extension-manager-0.3.0/po/ja.po000066400000000000000000000270701421751161400165160ustar00rootroot00000000000000# Japanese translations for extension-manager package. # Copyright (C) 2022 extension-manager'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # 小山田 純 , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-03-21 13:23+0100\n" "PO-Revision-Date: 2022-03-24 18:34+0900\n" "Last-Translator: 小山田 純 \n" "Language-Team: none\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:6 msgid "@app_title@" msgstr "@app_title@" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "「GNOME Shell 拡張機能」を簡単に探せて追加できるユーティリティ" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:12 msgid "Features:" msgstr "機能:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "アプリ内で extensions.gnome.org を探索できます。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:28 msgid "Manage the extensions you already have installed" msgstr "今までに追加した拡張機能も管理できます。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "GNOME Shell 拡張機能 を管理するユーティリティ" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:43 msgid "The second feature update to extension-manager. Highlights include:" msgstr "" "Extension Manager の2回目の機能アップデートです。主な内容は次のとおりです :" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:45 msgid "View comments and reviews" msgstr "拡張機能のレビューが読めるように" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:46 msgid "Support for in-app updates" msgstr "このアプリからの拡張機能のアップデートが可能に" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:47 msgid "Better handling errors and out-of-date extensions" msgstr "エラーや古い拡張機能への対応を強化" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:48 msgid "Allow installing 'unsupported' extensions" msgstr "" "使用している GNOME Shell のバージョンに未対応の拡張機能もインストール可能に" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:49 msgid "Display release notes on first run" msgstr "リリースノートをアップデート後に表示" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:50 msgid "New app icon" msgstr "アプリのアイコンを変更" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:51 msgid "Optionally sort extensions by enabled status" msgstr "" "追加済」のタブにおいて、有効になっている拡張機能が上に表示されるオプションが" "追加" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:52 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:59 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:64 msgid "Translation updates" msgstr "翻訳のアップデート" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:53 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:84 msgid "Performance and stability" msgstr "パフォーマンスと安定性の向上" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:65 msgid "Fix special characters in search results" msgstr "検索結果の特殊文字に関する修正" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:70 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "拡張機能の削除中に、クラッシュする問題を修正しました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:75 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Extension Manager の初めてのアップデートです。主な内容は次のとおりです :" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:77 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "ダークテーマを追加し、システムのライト・ダークテーマに合わせることができるよ" "うになりました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:78 msgid "Shows screenshots in extension listings" msgstr "拡張機能のスクリーンショットを、見られるようになりました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:79 msgid "Shell version compatibility check" msgstr "" "拡張機能が対応しているGNOMEShellのバージョンが、わかるようになりました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:80 msgid "Localised into seven languages" msgstr "7言語に翻訳されました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:81 msgid "Sort search results" msgstr "検索結果の並べ替えが、できるようになりました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:82 msgid "Global extension on/off toggle" msgstr "すべての拡張機能をOFFにできる、トグルスイッチが追加されました。" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:83 msgid "Displays user and system extensions separately" msgstr "拡張機能の開発者の名前を、表示するようになりました。" #: src/exm-application.c:106 msgid "Extension Manager (Development)" msgstr "Extension Manager (開発版)" #: src/exm-application.c:107 msgid "Extension Manager" msgstr "Extension Manager" #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:117 msgid "translator-credits" msgstr "小山田 純 " #: src/exm-application.c:118 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "GNOME Shell 拡張機能 を探したり、追加したり、\n" "管理ができたりする、シンプルなツールです。" #: src/exm-application.c:124 msgid "Project Homepage" msgstr "プロジェクトのGitHub" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "拡張機能を検索" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "キーワードを入力すると extensions.gnome.org にある\n" "GNOME Shell 拡張機能を検索できます。" #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "例 \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "人気順" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "ダウンロード数順" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "更新順" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "名前順" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "結果はありません" #: src/exm-comment-dialog.blp:35 src/exm-detail-view.blp:35 #: src/exm-detail-view.blp:168 src/exm-detail-view.c:350 msgid "An Error Occurred" msgstr "エラーが発生しました" #: src/exm-detail-view.blp:95 src/exm-extension-row.blp:74 msgid "Description" msgstr "説明" #: src/exm-detail-view.blp:113 msgid "View on Extensions" msgstr "この拡張機能を extensions.gnome.org で表示" #: src/exm-detail-view.blp:130 msgid "Supported Versions" msgstr "対応バージョン" #: src/exm-detail-view.blp:146 msgid "User Reviews" msgstr "レビュー" #: src/exm-detail-view.blp:187 msgid "Show All Reviews" msgstr "すべてのレビューを表示" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:364 msgid "Loading…" msgstr "読み込み中…" #: src/exm-extension-row.blp:33 msgid "An error occurred while loading this extension" msgstr "この拡張機能を読み込み中にエラーが発生しました" #: src/exm-extension-row.blp:46 src/exm-install-button.c:105 msgid "This extension is incompatible with your current version of GNOME." msgstr "" "この拡張機能は、このコンピュータのGNOMEのバージョンには、対応していません。" #: src/exm-extension-row.blp:59 msgid "A newer version of this extension is available" msgstr "この拡張機能にアップデートがあります" #: src/exm-extension-row.blp:100 msgid "Version" msgstr "バージョン" #: src/exm-extension-row.blp:126 msgid "Error" msgstr "エラー" #: src/exm-extension-row.blp:161 msgid "See Details" msgstr "詳細" #: src/exm-extension-row.blp:170 msgid "Remove" msgstr "削除" #: src/exm-install-button.c:115 msgid "Install" msgstr "追加" #: src/exm-install-button.c:120 msgctxt "State" msgid "Installed" msgstr "追加済" #: src/exm-install-button.c:124 msgid "Unsupported" msgstr "非対応" #: src/exm-installed-page.blp:25 msgid "User-Installed Extensions" msgstr "手動で追加" #: src/exm-installed-page.blp:38 msgid "System Extensions" msgstr "プリインストール" #: src/exm-installed-page.blp:78 msgid "Updates are available" msgstr "アップデートがあります" #: src/exm-installed-page.blp:95 msgid "Log Out" msgstr "ログアウト" #. Translators: '%d' = number of extensions that will be updated #: src/exm-installed-page.c:215 #, c-format msgid "One extension will be updated on next login." msgid_plural "%d extensions will be updated on next login." msgstr[0] "%d個の拡張機能が次回ログイン時にアップデートされます。" #: src/exm-release-notes-dialog.blp:7 src/exm-window.blp:95 msgid "Release Notes" msgstr "リリースノート" #: src/exm-window.blp:42 msgctxt "Navigation" msgid "Installed" msgstr "追加済" #: src/exm-window.blp:50 msgctxt "Navigation" msgid "Browse" msgstr "探す" #: src/exm-window.blp:71 msgid "Theme" msgstr "テーマ" #: src/exm-window.blp:73 msgid "Follow System" msgstr "システムのテーマ" #: src/exm-window.blp:78 msgid "Light" msgstr "ライトテーマ" #: src/exm-window.blp:83 msgid "Dark" msgstr "ダークテーマ" #: src/exm-window.blp:89 msgid "Sort Enabled First" msgstr "追加済のタブで、有効な拡張機能を優先表示" #: src/exm-window.blp:103 msgid "About Extension Manager" msgstr "Extension Manager について" #: src/exm-window.c:180 msgid "Are you sure you want to uninstall?" msgstr "この拡張機能を削除しますか?" #: src/exm-window.c:247 msgid "" "This extension does not support your GNOME Shell version.\n" "Would you like to install anyway?" msgstr "" "この拡張機能は、この GNOME Shell のバージョンに対応していません。\n" "強制的にインストールしますか?" #: src/exm-window.c:373 msgid "What's New" msgstr "新機能があります" #: src/exm-window.c:375 msgid "View Release Notes" msgstr "リリースノートを表示" #: src/exm-window.c:379 #, c-format msgid "" "This is your first time using Extension Manager %s.\n" "Would you like to see the release notes?" msgstr "" "Extension Manager %s を初めて起動しました。\n" "リリースノートを見ますか?" extension-manager-0.3.0/po/meson.build000066400000000000000000000000621421751161400177160ustar00rootroot00000000000000i18n.gettext('extension-manager', preset: 'glib') extension-manager-0.3.0/po/nb.po000066400000000000000000000165521421751161400165260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-02 16:48+0100\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" "Last-Translator: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: nb\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Utvidelsesadministrering" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Et verktøy for å bla gjennom og installere GNOME Skallutvidelser." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funksjoner:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Bla gjennom «extensions.gnome.org» inne i appen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Administrer utvidelsene du allerede har installert" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Et verktøy for administrering av GNOME Skallutvidelser" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Fikser et krasj som noen ganger opptrer under under avinstallering av en " "utvidelse" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Den første funksjonsoppdateringen til Utvidelsesadministrasjon. " "Høydepunkter inkluderer:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Mørkt tema og støtte for å overstyre systemets fargeskjema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Vis skjermskudd i listingen av utvidelser" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Kompatibilitetssjekk av skallversjon" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Lokalisert til syv språk" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Sorter søkeresultatene" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Global av/på for utvidelser" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Vis bruker- og systemutvidelser separat" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Ytelse og stabilitet" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferanse for fargevalg" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Om systemets fargeskjema følges, eller om lys eller mørk modus brukes." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "John Erling Blad" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Et veldig enkelt verktøy for å bla gjennom, laste ned og administrere GNOME-" "skallutvidelser." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Prosjektets hjemmeside" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Søk etter utvidelser" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Skriv inn et nøkkelord for å søke på «extensions.gnome.org» etter GNOME " "Skallutvidelser." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "e.g. «Tilslør skallet mitt»" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularitet" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Nedlastinger" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Nylig" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Navn" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Fant ingen resultater" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "En feil oppstod" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Beskrivelse" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Støttede versjoner" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Lenker" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Se på utvidelser" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "" "Denne utvidelsen er ikke-kompatibel med din nåværende versjon av GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Installer" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Installert" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Ikke støttet" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Laster inn…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Se detaljer" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Fjern" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Brukerinstallerte utvidelser" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Systemutvidelser" #: src/exm-window.blp:50 msgid "Browse" msgstr "Bla" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Følg systemet" #: src/exm-window.blp:78 msgid "Light" msgstr "Lyst" #: src/exm-window.blp:83 msgid "Dark" msgstr "Mørkt" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Tastatursnarveier" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Om Utvidelsesadministrasjon" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Er du sikker på at du ønsker å avinstallere?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Generelt" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Vis snarveier" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Avslutt" extension-manager-0.3.0/po/nl.po000066400000000000000000000170371421751161400165370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-03 13:49+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Uitbreidingsbeheer" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "" "Een toepassing voor het ontdekken en installeren van GNOME Shell-" "uitbreidingen." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Kenmerken:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Ontdek uitbreidingen op extensions.gnome.org vanuit de toepassing" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Beheer de reeds geïnstalleerde uitbreidingen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Een toepassing voor beheren van GNOME Shell-uitbreidingen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Opgelost: clash tijdens het verwijderen van een uitbreiding" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "De eerste grote update van Uitbreidingsbeheer. Kenmerken:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "Ondersteuning voor donkere thema's en het afdwingen van een eigen thema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Er worden voortaan schermfoto's getoond bij uitbreidingen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Nieuw: Shell-versiecontrole i.v.m. compatibiliteit" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Vertaald naar zeven talen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Zoekresultaten kunnen worden gesorteerd" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Globale aan-/uitknop" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Zelf-geïnstalleerde en systeemuitbreidingen worden apart getoond" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Verbeterde prestaties en stabiliteit" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Themavoorkeur" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Of het systeemthema moet worden gebruikt of dat een eigen thema wordt " "gekozen." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Heimen Stoffels " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Een eenvoudige toepassing voor het ontdekken, installeren en beheren van " "GNOME Shell-uitbreidingen." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Website" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Zoeken naar uitbreidingen" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "Voer een zoekterm in om ‘extensions.gnome.org’ te doorzoeken." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "bijv. ‘Blur my Shell’" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Populariteit" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Aantal downloads" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recent" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Naam" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Er zijn geen resultaten gevonden" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Er is een fout opgetreden" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Omschrijving" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Ondersteunde versies" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Links" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Uitbreidingspagina openen" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Deze uitbreiding is niet compatibel met uw huidige GNOME-versie." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Installeren" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Geïnstalleerd" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Niet-ondersteund" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Bezig met laden…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Details tonen" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Verwijderen" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Zelf-geïnstalleerde uitbreidingen" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Systeemuitbreidingen" #: src/exm-window.blp:50 msgid "Browse" msgstr "Ontdekken" #: src/exm-window.blp:71 msgid "Theme" msgstr "Thema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Systeemthema" #: src/exm-window.blp:78 msgid "Light" msgstr "Licht" #: src/exm-window.blp:83 msgid "Dark" msgstr "Donker" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Sneltoetsen" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Over Uitbreidingsbeheer" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Weet u zeker dat u deze uitbreiding wilt verwijderen?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Algemeen" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Sneltoetsen tonen" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Afsluiten" #~ msgid "Go to Page" #~ msgstr "Ga naar pagina" extension-manager-0.3.0/po/nn.po000066400000000000000000000167101421751161400165360ustar00rootroot00000000000000# Norwegian Nynorsk translation for extension-manager package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # John Erling Blad , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-02-23 16:48+0100\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" "Last-Translator: John Erling Blad \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: nn\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Utvidelsesadministrasjon" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Eit verktøy for å bla gjennom og installera GNOME Skallutvidelser." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funksjonar:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Bla gjennom «extensions.gnome.org» inne i appen" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Administrer utvidingane du allereie har installert" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Eit verktøy for administrering av GNOME Skallutvidelser" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" "Fiksar eit krasj som nokon gangar opptrer under under avinstallering av ein " "utviding" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Den første funksjonsoppdateringa til Utvidelsesadministrasjon. " "Høgdepunkt inkluderer:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Mørk drakt og trygd for å overstyra fargeskjemaet til systemet" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Vis skjermskot i listinga av utvidingar" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Kompatibilitetssjekk av skalversjon" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Lokalisert til sju språk" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Sorter søkeresultatane" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Global av/på for utvidingar" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Vis brukar- og systemutvidingar separat" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Yting og stabilitet" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferanse for fargeval" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Om fargeskjemaet til systemet blir følgt, eller om lys eller mørk modus blir brukt." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "John Erling Blad" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Eit veldig enkelt verktøy for å bla gjennom, lasta ned og administrera GNOME-" "skalutvidingar." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Heimesida for prosjektet" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Søk etter utvidingar" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Skriv inn eit nøkkelord for å søka på «extensions.gnome.org» etter GNOME " "Skalutvidingar." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "e.g. «Tilslør skalet mitt»" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularitet" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Nedlastingar" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Nyleg" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Namn" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Fann ingen resultat" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Ein feil oppstod" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Skildring" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Støtta versjonar" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Lenker" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Sjå på utvidingar" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "" "Denne utvidinga er ikke-kompatibel med den noverande versjonen din av GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Installer" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Installert" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Ikkje støtta" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Laster inn…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Sjå detaljar" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Fjern" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Brukarinstallerte utvidingar" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Systemutvidingar" #: src/exm-window.blp:50 msgid "Browse" msgstr "Bla" #: src/exm-window.blp:71 msgid "Theme" msgstr "Drakt" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Følg systemet" #: src/exm-window.blp:78 msgid "Light" msgstr "Lyst" #: src/exm-window.blp:83 msgid "Dark" msgstr "Mørkt" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Tastatursnarvegar" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Om Utvidelsesadministrasjon" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Er du sikker på at du ønsker å avinstallere?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Allment" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Vis snarvegar" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Avslutt" extension-manager-0.3.0/po/oc.po000066400000000000000000000157611421751161400165310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-03-15 20:11+0100\n" "Last-Translator: Quentin PAGÈS\n" "Language-Team: \n" "Language: oc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Gestionari d’extensions" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Foncionalitats :" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Gerissètz las extensions qu’avètz ja installadas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Un utilitari per gerir las extensions GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Aficha las capturas d’ecran dins la lista d’extensions" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Verificacion de compatibilitat version Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Traduch dins sèt lengas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Triar los resultats de recèrca" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Bascular las extensions globalas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Performança e estabilitat" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferéncias d’esquèma de color" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Indica se cal seguir l’esquèma de color del sistèma, o forçar lo mòde clar " "o escur." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Quentin PAGÈS" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Una aisina simpleta per percórrer, telecargar e gerir las extensions GNOME " "Shell." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Site web del projècte" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Cercar d’extensions" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Picatz un mot clau per cercar per « extensions.gnome.org » e trobar " "d’extensions GNOME Shell." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "ex. « Enfosquir mon Shell »" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularitat" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Telecargaments" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recentas" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nom" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Cap de resultat pas trobat" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Una error s'es producha" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Descripcion" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Versions presas en carga" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Ligams" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "" #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Installar" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Installada" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Pas presa en carga" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Cargament…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Veire los detalhs" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Suprimir" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Extensions installadas per l’utilizaire" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Extensions sistèma" #: src/exm-window.blp:50 msgid "Browse" msgstr "Percórrer" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tèma" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Seguir lo sistèma" #: src/exm-window.blp:78 msgid "Light" msgstr "Clar" #: src/exm-window.blp:83 msgid "Dark" msgstr "Escur" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Acorchis de clavièr" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "A prepaus del gestionari d’extensions" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Volètz vertadièrament desinstallar ?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "General" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Afichar los acorchis" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Quitar" extension-manager-0.3.0/po/pl.po000066400000000000000000000173321421751161400165370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # Rafał Baran <>, 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-01-26 12:47+0100\n" "Last-Translator: Rafał Baran <>\n" "Language-Team: Polish <>\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2)\n" "X-Generator: Gtranslator 40.0\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Menedżer Rozszerzeń" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Narzędzie do przeglądania i instalowania rozszerzeń powłoki GNOME." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funkcje:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Przeglądaj extensions.gnome.org bezpośrednio w aplikacji" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Zarządzaj już zainstalowanymi rozszerzeniami" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Narzędzie do zarządzania rozszerzeniami powłoki GNOME" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Naprawia błąd występujący czasem podczas odinstalowywania rozszerzenia" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Pierwsza aktualizacja funkcyjna do Menedżera Rozszerzeń. Najważniejsze " "zmiany:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "" "Ciemny motyw i możliwość nadpisania systemowego schematu kolorystycznego" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Zrzuty ekranu na liście rozszerzeń" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Sprawdzanie kompatybilności z wersją powłoki" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Przetłumaczono na siedem języków" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Sortowanie wyników wyszukiwania" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Globalny włącznik/wyłącznik rozszerzeń" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Osobne wyświetlanie rozszerzeń systemowych i użytkownika" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Wydajność i stabilność" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferencje motywu" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "" "Ustawia motyw na systemowy lub wymusza użycie ciemnego lub jasnego motywu." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Rafał Baran" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Bardzo proste narzędzie do przeglądania, instalowania i zarządzania " "rozszerzeniami powłoki GNOME." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Strona Główna projektu" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Szukaj rozszerzeń" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "Wpisz słowo kluczowe, aby wyszukać rozszerzenia w extensions.gnome.org" #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "np. \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularność" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Liczba pobrań" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Ostatnie" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nazwa" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Nie Znaleziono Wyników" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Wystąpił Błąd" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Opis" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Wspierane Wersje" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Linki" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Zobacz na Extensions" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "To rozszerzenie nie jest kompatybilne z twoją wersją GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Zainstaluj" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Zainstalowane" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Niewspierane" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Ładowanie…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Zobacz Szczegóły" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Usuń" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Ręcznie zainstalowane" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Systemowe rozszerzenia" #: src/exm-window.blp:50 msgid "Browse" msgstr "Przeglądaj" #: src/exm-window.blp:71 msgid "Theme" msgstr "Motyw" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Motyw sytemowy" #: src/exm-window.blp:78 msgid "Light" msgstr "Jasny" #: src/exm-window.blp:83 msgid "Dark" msgstr "Ciemny" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "O programie" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Czy na pewno chcesz odinstalować?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Ogólne" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Pokaż skróty" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Wyjdź" #~ msgid "" #~ "An extension manager for browsing and installing GNOME Shell Extensions." #~ msgstr "" #~ "Menedżer rozszerzeń do przeglądania i instalowania rozszerzeń powłoki " #~ "GNOME." #~ msgid "Go to Page" #~ msgstr "Otwórz stronę" extension-manager-0.3.0/po/print-source-files.sh000077500000000000000000000003171421751161400216500ustar00rootroot00000000000000# Prints out all *.c and *.blp files in the project # Useful for updating the POTFILES file (run from this directory) pushd ../ > /dev/null (find src -name *.c; find src -name *.blp) | sort popd > /dev/null extension-manager-0.3.0/po/pt_BR.po000066400000000000000000000170521421751161400171310ustar00rootroot00000000000000# Brazilian Portuguese translations for extension-manager package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Douglas Silva , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-01-30 15:59-0300\n" "Last-Translator: Tiago Lucas Flach \n" "Language-Team: \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.0\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Gerenciador de Extensões" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Um utilitário para buscar e instalar as extensões do GNOME Shell." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Funcionalidades:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Navegue em extensions.gnome.org por dentro da aplicação" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Gerencie as extensões que já estão instaladas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Um utilitário para gerenciar as extensões do GNOME Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Corrige uma falha que às vezes ocorre ao desinstalar uma extensão" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "A primeira atualização de funções do gerenciador de extensões. Em destaque:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Tema escuro e suporte para sobrescrever o esquema de cores do sistema" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Exibe capturas de tela nos detalhes das extensões" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Verifica a compatibilidade de versão do Shell" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Traduzido para sete idiomas" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Resultado de busca ordenado" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Ativar/desativar extensão global" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Exibe as extensões do usuário e do sistema separadamente" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Desempenho e estabilidade" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Preferência do esquema de cores" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "Seguir as cores do sistema ou forçar o modo claro ou escuro." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "" "Douglas Silva " "Tiago Lucas Flach https://github.com/tiagoFlach" #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Uma ferramenta muito simples para buscar, baixar e gerenciar as extensões do " "GNOME Shell." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Página Web" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Procurar extensões" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Digite uma palavra-chave para procurar extensões do Gnome Shell em " "'extensions.gnome.org'." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "ex: \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Popularidade" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Baixados" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Recentes" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Nome" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Nenhum resultado encontrado" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Ocorreu um Erro" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Descrição" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Versões Suportadas" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Links" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Ver em Extensões" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Esta extensão é incompatível com a atual versão do GNOME." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Instalar" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Instalado" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Não suportada" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Carregando…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Mostrar Detalhes" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Remover" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Extensões Instaladas Manualmente" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Extensões do Sistema" #: src/exm-window.blp:50 msgid "Browse" msgstr "Navegar" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Seguir o Sistema" #: src/exm-window.blp:78 msgid "Light" msgstr "Claro" #: src/exm-window.blp:83 msgid "Dark" msgstr "Escuro" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Atalhos do Teclado" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Sobre o Gerenciador de Extensões" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Você tem certeza que quer desinstalar?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Geral" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Mostrar Atalhos" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Sair" extension-manager-0.3.0/po/ru_RU.po000066400000000000000000000330351421751161400171560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2022-03-22 20:29+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" #: data/com.mattjakeman.ExtensionManager.desktop.in.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:6 msgid "@app_title@" msgstr "@app_title@" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "Утилита для просмотра и установки расширений оболочки GNOME." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:12 msgid "Features:" msgstr "Функции:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Просматривайте extensions.gnome.org прямо в приложении" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:28 msgid "Manage the extensions you already have installed" msgstr "Управлять расширениями, которые вы уже установили" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "Утилита для управления расширениями оболочки GNOME" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:43 msgid "The second feature update to extension-manager. Highlights include:" msgstr "" "Второе функциональное обновление extension-manager. Основные моменты " "включают:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:45 msgid "View comments and reviews" msgstr "Просмотреть комментарии и отзывы" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:46 msgid "Support for in-app updates" msgstr "Поддержка обновлений в приложении" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:47 msgid "Better handling errors and out-of-date extensions" msgstr "Улучшенная обработка ошибок и устаревших расширений" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:48 msgid "Allow installing 'unsupported' extensions" msgstr "Разрешена установка \"неподдерживаемых\" расширений" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:49 msgid "Display release notes on first run" msgstr "Отображение информации о выпуске при первом запуске" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:50 msgid "New app icon" msgstr "Новая иконка приложения" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:51 msgid "Optionally sort extensions by enabled status" msgstr "Опциональная сортировка расширений по статусу включения" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:52 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:59 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:64 msgid "Translation updates" msgstr "Обновления перевода" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:53 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:84 msgid "Performance and stability" msgstr "Производительность и стабильность" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:65 msgid "Fix special characters in search results" msgstr "Исправление специальных символов в результатах поиска" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:70 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Устранение сбоя, который иногда возникает при удалении расширения" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:75 msgid "The first feature update to extension-manager. Highlights include:" msgstr "" "Первое функциональное обновление extension-manager. Основные моменты " "включают:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:77 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Темная тема и поддержка переопределения системной цветовой схемы" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:78 msgid "Shows screenshots in extension listings" msgstr "Показывает скриншоты в списках расширений" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:79 msgid "Shell version compatibility check" msgstr "Проверка совместимости версий оболочки" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:80 msgid "Localised into seven languages" msgstr "Локализована на семи языках" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:81 msgid "Sort search results" msgstr "Сортировать результаты поиска" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:82 msgid "Global extension on/off toggle" msgstr "Переключатель включения/выключения всех расширений" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in.in:83 msgid "Displays user and system extensions separately" msgstr "Отображение пользовательских и системных расширений по отдельности" #: src/exm-application.c:106 msgid "Extension Manager (Development)" msgstr "Менеджер расширений (Разрабатываемая версия)" #: src/exm-application.c:107 msgid "Extension Manager" msgstr "Менеджер расширений" #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:117 msgid "translator-credits" msgstr "Danik2343 " #: src/exm-application.c:118 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "Очень простой инструмент для просмотра, загрузки и управления расширениями " "оболочки GNOME." #: src/exm-application.c:124 msgid "Project Homepage" msgstr "Домашняя страница проекта" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Поиск расширений" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "Введите ключевое слово для поиска в 'extensions.gnome.org' расширений GNOME " "Shell." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "например \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Популярность" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Загрузки" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Недавние" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "Название" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Результаты не найдены" #: src/exm-comment-dialog.blp:35 src/exm-detail-view.blp:35 #: src/exm-detail-view.blp:168 src/exm-detail-view.c:350 msgid "An Error Occurred" msgstr "Произошла ошибка" #: src/exm-detail-view.blp:95 src/exm-extension-row.blp:74 msgid "Description" msgstr "Описание" #: src/exm-detail-view.blp:113 msgid "View on Extensions" msgstr "Посмотреть в Extensions" #: src/exm-detail-view.blp:130 msgid "Supported Versions" msgstr "Поддерживаемые версии" #: src/exm-detail-view.blp:146 msgid "User Reviews" msgstr "Отзывы пользователей" #: src/exm-detail-view.blp:187 msgid "Show All Reviews" msgstr "Show All Reviews" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:364 msgid "Loading" msgstr "Загрузка" #: src/exm-extension-row.blp:33 msgid "An error occurred while loading this extension" msgstr "Произошла ошибка, при загрузке этого расширения" #: src/exm-extension-row.blp:46 src/exm-install-button.c:105 msgid "This extension is incompatible with your current version of GNOME." msgstr "Это расширение несовместимо с вашей текущей версией GNOME." #: src/exm-extension-row.blp:59 msgid "A newer version of this extension is available" msgstr "Доступная новая версия этого расширения" #: src/exm-extension-row.blp:100 msgid "Version" msgstr "Версия" #: src/exm-extension-row.blp:126 msgid "Error" msgstr "Ошибка" #: src/exm-extension-row.blp:161 msgid "See Details" msgstr "Посмотреть подробности" #: src/exm-extension-row.blp:170 msgid "Remove" msgstr "Удалить" #: src/exm-install-button.c:115 msgid "Install" msgstr "Установить" #: src/exm-install-button.c:120 msgctxt "State" msgid "Installed" msgstr "Установлено" #: src/exm-install-button.c:124 msgid "Unsupported" msgstr "Не поддерживается" #: src/exm-installed-page.blp:25 msgid "User-Installed Extensions" msgstr "Расширения, установленные пользователем" #: src/exm-installed-page.blp:38 msgid "System Extensions" msgstr "Системные расширения" #: src/exm-installed-page.blp:78 msgid "Updates are available" msgstr "Доступны обновления" #: src/exm-installed-page.blp:95 msgid "Log Out" msgstr "Завершить сеанс" #. Translators: '%d' = number of extensions that will be updated #: src/exm-installed-page.c:215 #, c-format msgid "One extension will be updated on next login." msgid_plural "%d extensions will be updated on next login." msgstr[0] "%d расширений будут обновлены при следующем входе в систему." msgstr[1] "%d расширения будут обновлены при следующем входе в систему." msgstr[2] "%d расширений будут обновлены при следующем входе в систему." #: src/exm-release-notes-dialog.blp:7 src/exm-window.blp:95 msgid "Release Notes" msgstr "Новости релиза" #: src/exm-window.blp:42 msgctxt "Navigation" msgid "Installed" msgstr "Установленные" #: src/exm-window.blp:50 msgctxt "Navigation" msgid "Browse" msgstr "Обзор" #: src/exm-window.blp:71 msgid "Theme" msgstr "Тема" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Следование системе" #: src/exm-window.blp:78 msgid "Light" msgstr "Светлая" #: src/exm-window.blp:83 msgid "Dark" msgstr "Тёмная" #: src/exm-window.blp:89 msgid "Sort Enabled First" msgstr "Сортировка включенных" #: src/exm-window.blp:103 msgid "About Extension Manager" msgstr "О менеджере расширений" #: src/exm-window.c:180 msgid "Are you sure you want to uninstall?" msgstr "Вы уверены, что хотите удалить?" #: src/exm-window.c:247 msgid "" "This extension does not support your GNOME Shell version.\n" "Would you like to install anyway?" msgstr "" "Это расширение не поддерживает вашу версию GNOME Shell.\n" "Вы хотите установить его в любом случае?" #: src/exm-window.c:373 msgid "What's New" msgstr "Что нового" #: src/exm-window.c:375 msgid "View Release Notes" msgstr "Посмотреть новости релиза" #: src/exm-window.c:379 #, c-format msgid "" "This is your first time using Extension Manager %s.\n" "Would you like to see the release notes?" msgstr "" "Вы впервые используете Менеджер расширений %s.\n" "Вы хотите просмотреть примечания к выпуску?" #~ msgid "Matthew Jakeman" #~ msgstr "Matthew Jakeman" #~ msgid "Colour Scheme Preference" #~ msgstr "Предпочтение цветовой схемы" #~ msgid "" #~ "Whether to follow the system colour scheme or force either light or dark " #~ "mode." #~ msgstr "" #~ "Следует ли следовать системной цветовой схеме или использовать светлый " #~ "или темный режим." #~ msgid "Links" #~ msgstr "Ссылки" #~ msgid "Keyboard Shortcuts" #~ msgstr "Горячие клавиши" #~ msgctxt "shortcut window" #~ msgid "General" #~ msgstr "Общее" #~ msgctxt "shortcut window" #~ msgid "Show Shortcuts" #~ msgstr "Показать горячие клавиши" #~ msgctxt "shortcut window" #~ msgid "Quit" #~ msgstr "Выход" extension-manager-0.3.0/po/tr.po000066400000000000000000000167171421751161400165570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the extension-manager package. # Onur Ankut , 2022. # msgid "" msgstr "" "Project-Id-Version: extension-manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-26 23:46+1300\n" "PO-Revision-Date: 2022-01-26 14:59+0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" "Last-Translator: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: tr\n" #: data/com.mattjakeman.ExtensionManager.desktop.in:3 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:6 #: src/exm-application.c:109 msgid "Extension Manager" msgstr "Uzantı Yöneticisi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:7 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:11 msgid "A utility for browsing and installing GNOME Shell Extensions." msgstr "GNOME Kabuğu uzantılarını keşfetmeniz ve yüklemeniz için yardımcı bir program." #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:9 msgid "Matthew Jakeman" msgstr "Matthew Jakeman" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:12 msgid "Features:" msgstr "Özellikler:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:14 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:24 msgid "Browse extensions.gnome.org right inside the app" msgstr "Doğrudan uygulamanın içinden extensions.gnome.org'u gezin" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:15 #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:28 msgid "Manage the extensions you already have installed" msgstr "Zaten yüklemiş olduğunuz uzantıları yönetin" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:20 msgid "A utility for managing GNOME Shell Extensions" msgstr "GNOME Kabuğu uzantılarını yönetmeniz için yardımcı bir program" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:43 msgid "Fixes a crash that sometimes occurs while uninstalling an extension" msgstr "Bir uzantıyı kaldırırken bazen ortaya çıkan çökme durumu düzeltildi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:48 msgid "The first feature update to extension-manager. Highlights include:" msgstr "extension-manager'ın ilk özellik güncellemesi. Öne çıkanlar arasında:" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:50 msgid "Dark theme and support for overriding the system colour scheme" msgstr "Karanlık tema ve sistem renk şemasını geçersiz kılma desteği" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:51 msgid "Shows screenshots in extension listings" msgstr "Uzantı listelerinde ekran görüntülerini gösterir" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:52 msgid "Shell version compatibility check" msgstr "Kabuk sürüm uyumluluğu kontrolü" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:53 msgid "Localised into seven languages" msgstr "Yedi dilde yerelleştirildi" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:54 msgid "Sort search results" msgstr "Arama sonuçlarını sıralama" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:55 msgid "Global extension on/off toggle" msgstr "Evrensel uzantı açma/kapama ayarı" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:56 msgid "Displays user and system extensions separately" msgstr "Kullanıcı ve sistem uzantılarını ayrı ayrı görüntüler" #: data/com.mattjakeman.ExtensionManager.appdata.xml.in:57 msgid "Performance and stability" msgstr "Performans ve kararlılık" #: data/com.mattjakeman.ExtensionManager.gschema.xml:11 msgid "Colour Scheme Preference" msgstr "Renk Şeması Tercihi" #: data/com.mattjakeman.ExtensionManager.gschema.xml:12 msgid "" "Whether to follow the system colour scheme or force either light or dark " "mode." msgstr "Sistem renk şemasını takip etme veya açık ya da koyu modu zorlama." #. TRANSLATORS: 'Name ' or 'Name https://website.example' #: src/exm-application.c:112 msgid "translator-credits" msgstr "Onur Ankut " #: src/exm-application.c:113 msgid "" "A very simple tool for browsing, downloading, and managing GNOME shell " "extensions." msgstr "" "GNOME Kabuğu Uzantılarını aramanız, indirmeniz ve yönetmeniz için basit bir " "araç." #: src/exm-application.c:119 msgid "Project Homepage" msgstr "Proje Ana Sayfası" #: src/exm-browse-page.blp:7 msgid "Search for extensions" msgstr "Uzantı arayın" #: src/exm-browse-page.blp:8 msgid "" "Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions." msgstr "" "'extensions.gnome.org'da GNOME Kabuğu uzantılarını aramak için anahtar bir " "kelime girin." #: src/exm-browse-page.blp:22 msgid "e.g. \"Blur my Shell\"" msgstr "örn. \"Blur my Shell\"" #. Translators: dropdown items for sorting search results #: src/exm-browse-page.blp:33 msgid "Popularity" msgstr "Çok oylananlar" #: src/exm-browse-page.blp:33 msgid "Downloads" msgstr "Çok indirilenler" #: src/exm-browse-page.blp:33 msgid "Recent" msgstr "Yeni çıkanlar" #: src/exm-browse-page.blp:33 msgid "Name" msgstr "İsme göre" #: src/exm-browse-page.blp:60 msgid "No Results Found" msgstr "Sonuç Bulunamadı" #: src/exm-detail-view.blp:35 src/exm-detail-view.c:287 msgid "An Error Occurred" msgstr "Bir Hata Oluştu" #: src/exm-detail-view.blp:95 msgid "Description" msgstr "Açıklama" #: src/exm-detail-view.blp:113 msgid "Supported Versions" msgstr "Desteklenen Sürümler" #: src/exm-detail-view.blp:129 msgid "Links" msgstr "Bağlantılar" #: src/exm-detail-view.blp:139 msgid "View on Extensions" msgstr "Tarayıcıda Görüntüle" #: src/exm-detail-view.c:120 msgid "This extension is incompatible with your current version of GNOME." msgstr "Bu uzantı şu anki GNOME sürümünüz ile uyumsuz." #: src/exm-detail-view.c:129 src/exm-search-row.blp:75 msgid "Install" msgstr "Yükle" #: src/exm-detail-view.c:134 src/exm-search-row.c:153 src/exm-window.blp:42 msgid "Installed" msgstr "Yüklendi" #: src/exm-detail-view.c:138 src/exm-search-row.c:159 msgid "Unsupported" msgstr "Uyumsuz" #. Translators: Use unicode ellipsis '…' rather than three dots '...' #: src/exm-detail-view.c:303 msgid "Loading…" msgstr "Yükleniyor…" #: src/exm-extension-row.blp:37 msgid "See Details" msgstr "Ayrıntıları Görüntüle" #: src/exm-extension-row.blp:46 msgid "Remove" msgstr "Kaldır" #: src/exm-installed-page.blp:17 msgid "User-Installed Extensions" msgstr "Yüklediğiniz Uzantılar" #: src/exm-installed-page.blp:29 msgid "System Extensions" msgstr "Sistem Uzantıları" #: src/exm-window.blp:50 msgid "Browse" msgstr "Keşfet" #: src/exm-window.blp:71 msgid "Theme" msgstr "Tema" #: src/exm-window.blp:73 msgid "Follow System" msgstr "Sistem Teması" #: src/exm-window.blp:78 msgid "Light" msgstr "Açık" #: src/exm-window.blp:83 msgid "Dark" msgstr "Koyu" #: src/exm-window.blp:89 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #: src/exm-window.blp:93 msgid "About Extension Manager" msgstr "Uzantı Yöneticisi Hakkında" #: src/exm-window.c:179 msgid "Are you sure you want to uninstall?" msgstr "Kaldırmak istediğinizden emin misiniz?" #: src/gtk/help-overlay.blp:11 msgctxt "shortcut window" msgid "General" msgstr "Genel" #: src/gtk/help-overlay.blp:14 msgctxt "shortcut window" msgid "Show Shortcuts" msgstr "Kısayolları Görüntüle" #: src/gtk/help-overlay.blp:19 msgctxt "shortcut window" msgid "Quit" msgstr "Çıkış" extension-manager-0.3.0/src/000077500000000000000000000000001421751161400157275ustar00rootroot00000000000000extension-manager-0.3.0/src/exm-application.c000066400000000000000000000172171421751161400211750ustar00rootroot00000000000000/* exm-application.c * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "exm-config.h" #include "exm-application.h" #include "exm-window.h" #include struct _ExmApplication { AdwApplication parent_instance; }; G_DEFINE_TYPE (ExmApplication, exm_application, ADW_TYPE_APPLICATION) ExmApplication * exm_application_new (gchar *application_id, GApplicationFlags flags) { return g_object_new (EXM_TYPE_APPLICATION, "application-id", application_id, "flags", flags, NULL); } static void exm_application_finalize (GObject *object) { ExmApplication *self = (ExmApplication *)object; G_OBJECT_CLASS (exm_application_parent_class)->finalize (object); } static void exm_application_activate (GApplication *app) { GtkWindow *window; /* It's good practice to check your parameters at the beginning of the * function. It helps catch errors early and in development instead of * by your users. */ g_assert (GTK_IS_APPLICATION (app)); GdkDisplay *display = gdk_display_get_default (); GtkCssProvider *provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (provider, "/com/mattjakeman/ExtensionManager/style.css"); gtk_style_context_add_provider_for_display (display, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); /* Get the current window or create one if necessary. */ window = gtk_application_get_active_window (GTK_APPLICATION (app)); if (window == NULL) window = g_object_new (EXM_TYPE_WINDOW, "application", app, NULL); /* Ask the window manager/compositor to present the window. */ gtk_window_present (window); } static void exm_application_class_init (ExmApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GApplicationClass *app_class = G_APPLICATION_CLASS (klass); object_class->finalize = exm_application_finalize; /* * We connect to the activate callback to create a window when the application * has been launched. Additionally, this callback notifies us when the user * tries to launch a "second instance" of the application. When they try * to do that, we'll just present any existing window. */ app_class->activate = exm_application_activate; } static void exm_application_show_about (GSimpleAction *action, GVariant *parameter, gpointer user_data) { ExmApplication *self = EXM_APPLICATION (user_data); GtkWindow *window = NULL; const gchar *authors[] = {"Matthew Jakeman", NULL}; const gchar *program_name = IS_DEVEL ? _("Extension Manager (Development)") : _("Extension Manager"); g_return_if_fail (EXM_IS_APPLICATION (self)); window = gtk_application_get_active_window (GTK_APPLICATION (self)); gtk_show_about_dialog (window, "program-name", program_name, "authors", authors, // TRANSLATORS: 'Name ' or 'Name https://website.example' "translator-credits", _("translator-credits"), "comments", _("A very simple tool for browsing, downloading, and managing GNOME shell extensions."), "version", APP_VERSION, "copyright", "Copyright © Matthew Jakeman 2021", "license-type", GTK_LICENSE_GPL_3_0, "logo-icon-name", APP_ID, "website", "https://github.com/mjakeman/extension-manager", "website-label", _("Project Homepage"), NULL); } static gboolean map_setting_to_adw_style (GValue *value, GVariant *variant) { char *str; g_variant_get (variant, "s", &str); if (strcmp (str, "use-default") == 0) { g_value_set_enum (value, ADW_COLOR_SCHEME_DEFAULT); return TRUE; } else if (strcmp (str, "force-light") == 0) { g_value_set_enum (value, ADW_COLOR_SCHEME_FORCE_LIGHT); return TRUE; } else if (strcmp (str, "force-dark") == 0) { g_value_set_enum (value, ADW_COLOR_SCHEME_FORCE_DARK); return TRUE; } return FALSE; // error } static void request_logout (ExmApplication *self) { // Request the GNOME Session Manager to log out GDBusConnection *conn; conn = g_application_get_dbus_connection (G_APPLICATION (self)); if (conn) { GError *error = NULL; g_dbus_connection_call_sync (conn, "org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", "Logout", g_variant_new ("(u)", 0), NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error) g_warning ("Could not log out: %s", error->message); } } static void exm_application_init (ExmApplication *self) { GSettings *settings = g_settings_new (APP_ID); GSimpleAction *quit_action = g_simple_action_new ("quit", NULL); g_signal_connect_swapped (quit_action, "activate", G_CALLBACK (g_application_quit), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (quit_action)); GSimpleAction *about_action = g_simple_action_new ("about", NULL); g_signal_connect (about_action, "activate", G_CALLBACK (exm_application_show_about), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (about_action)); GSimpleAction *logout_action = g_simple_action_new ("logout", NULL); g_signal_connect_swapped (logout_action, "activate", G_CALLBACK (request_logout), self); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (logout_action)); GAction *sort_enabled_first_action = g_settings_create_action (settings, "sort-enabled-first"); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (sort_enabled_first_action)); GAction *style_variant_action = g_settings_create_action (settings, "style-variant"); g_action_map_add_action (G_ACTION_MAP (self), G_ACTION (style_variant_action)); AdwStyleManager *style_manager = adw_style_manager_get_default (); g_settings_bind_with_mapping (settings, "style-variant", style_manager, "color-scheme", G_SETTINGS_BIND_GET, map_setting_to_adw_style, NULL, NULL, NULL); g_object_unref (settings); const char *accels[] = {"q", NULL}; gtk_application_set_accels_for_action (GTK_APPLICATION (self), "app.quit", accels); } extension-manager-0.3.0/src/exm-application.h000066400000000000000000000020561421751161400211750ustar00rootroot00000000000000/* exm-application.h * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include G_BEGIN_DECLS #define EXM_TYPE_APPLICATION (exm_application_get_type()) G_DECLARE_FINAL_TYPE (ExmApplication, exm_application, EXM, APPLICATION, AdwApplication) ExmApplication *exm_application_new (gchar *application_id, GApplicationFlags flags); G_END_DECLS extension-manager-0.3.0/src/exm-browse-page.blp000066400000000000000000000030301421751161400214240ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmBrowsePage : Gtk.Widget { Gtk.ScrolledWindow { Adw.StatusPage { title: _("Search for extensions"); description: _("Enter a keyword to search 'extensions.gnome.org' for GNOME Shell Extensions."); valign: start; child: Adw.Clamp { styles ["clamp"] Gtk.Box { orientation: vertical; Gtk.Box { styles ["linked"] Gtk.SearchEntry search_entry { hexpand: true; placeholder-text: _("e.g. \"Blur my Shell\""); // Hook for triggering initial search // TODO: Re-enable this once blueprint-compiler!4 is merged // realize => on_search_entry_realize(); } // Keep the same order as the ExmSearchSort enum Gtk.DropDown search_dropdown { model: StringList { // Translators: dropdown items for sorting search results strings [_("Popularity"), _("Downloads"), _("Recent"), _("Name")] }; } } Gtk.Stack search_stack { Gtk.StackPage { name: "page_spinner"; child: Gtk.Spinner { valign: start; halign: center; spinning: true; }; } Gtk.StackPage { name: "page_results"; child: Gtk.ListBox search_results { styles ["boxed-list"] valign: start; selection-mode: none; }; } Gtk.StackPage { name: "page_empty"; child: Gtk.Label { label: _("No Results Found"); valign: start; halign: center; }; } } } }; } } } extension-manager-0.3.0/src/exm-browse-page.c000066400000000000000000000164631421751161400211070ustar00rootroot00000000000000#include "exm-browse-page.h" #include "exm-search-row.h" #include "local/exm-manager.h" #include "web/exm-search-provider.h" #include "web/exm-image-resolver.h" #include "web/model/exm-search-result.h" struct _ExmBrowsePage { GtkWidget parent_instance; ExmSearchProvider *search; ExmImageResolver *resolver; ExmManager *manager; GListModel *search_results_model; gchar *shell_version; // Template Widgets GtkSearchEntry *search_entry; GtkListBox *search_results; GtkStack *search_stack; GtkDropDown *search_dropdown; }; G_DEFINE_FINAL_TYPE (ExmBrowsePage, exm_browse_page, GTK_TYPE_WIDGET) enum { PROP_0, PROP_MANAGER, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmBrowsePage * exm_browse_page_new (void) { return g_object_new (EXM_TYPE_BROWSE_PAGE, NULL); } static void exm_browse_page_finalize (GObject *object) { ExmBrowsePage *self = (ExmBrowsePage *)object; G_OBJECT_CLASS (exm_browse_page_parent_class)->finalize (object); } static void exm_browse_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmBrowsePage *self = EXM_BROWSE_PAGE (object); switch (prop_id) { case PROP_MANAGER: g_value_set_object (value, self->manager); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_browse_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmBrowsePage *self = EXM_BROWSE_PAGE (object); switch (prop_id) { case PROP_MANAGER: self->manager = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static GtkWidget * search_widget_factory (ExmSearchResult *result, ExmBrowsePage *self) { ExmSearchRow *row; gchar *uuid; gboolean is_installed; gboolean is_supported; g_object_get (result, "uuid", &uuid, NULL); is_installed = exm_manager_is_installed_uuid (self->manager, uuid); is_supported = exm_search_result_supports_shell_version (result, self->shell_version); row = exm_search_row_new (result, is_installed, is_supported); return GTK_WIDGET (row); } static void refresh_search (ExmBrowsePage *self) { if (!self->manager) return; if (!self->search_results_model || g_list_model_get_n_items (self->search_results_model) == 0) { // No Results Found gtk_stack_set_visible_child_name (self->search_stack, "page_empty"); return; } gtk_list_box_bind_model (self->search_results, self->search_results_model, (GtkListBoxCreateWidgetFunc) search_widget_factory, g_object_ref (self), g_object_unref); // Hide Loading Indicator gtk_stack_set_visible_child_name (self->search_stack, "page_results"); } static void on_search_result (GObject *source, GAsyncResult *res, ExmBrowsePage *self) { GError *error = NULL; self->search_results_model = exm_search_provider_query_finish (EXM_SEARCH_PROVIDER (source), res, &error); refresh_search (self); } static void search (ExmBrowsePage *self, const gchar *query, ExmSearchSort sort) { // Show Loading Indicator gtk_stack_set_visible_child_name (self->search_stack, "page_spinner"); exm_search_provider_query_async (self->search, query, sort, NULL, (GAsyncReadyCallback) on_search_result, self); } static void on_search_changed (ExmBrowsePage *self) { const char *query = gtk_editable_get_text (GTK_EDITABLE (self->search_entry)); ExmSearchSort sort = (ExmSearchSort) gtk_drop_down_get_selected (self->search_dropdown); search (self, query, sort); } static void on_search_entry_realize (GtkSearchEntry *search_entry, ExmBrowsePage *self) { // Fire off a default search search (self, "", EXM_SEARCH_SORT_POPULARITY); gtk_widget_grab_focus (GTK_WIDGET (search_entry)); } static void on_bind_manager (ExmBrowsePage *self) { GListModel *user_ext_model; GListModel *system_ext_model; g_object_get (self->manager, "user-extensions", &user_ext_model, "system-extensions", &system_ext_model, NULL); g_signal_connect_swapped (user_ext_model, "items-changed", G_CALLBACK (refresh_search), self); g_signal_connect_swapped (system_ext_model, "items-changed", G_CALLBACK (refresh_search), self); g_object_get (self->manager, "shell-version", &self->shell_version, NULL); refresh_search (self); } static void exm_browse_page_class_init (ExmBrowsePageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_browse_page_finalize; object_class->get_property = exm_browse_page_get_property; object_class->set_property = exm_browse_page_set_property; properties [PROP_MANAGER] = g_param_spec_object ("manager", "Manager", "Manager", EXM_TYPE_MANAGER, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-browse-page.ui"); gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_entry); gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_results); gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_stack); gtk_widget_class_bind_template_child (widget_class, ExmBrowsePage, search_dropdown); gtk_widget_class_bind_template_callback (widget_class, on_search_entry_realize); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void exm_browse_page_init (ExmBrowsePage *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->search = exm_search_provider_new (); g_signal_connect_swapped (self->search_entry, "search-changed", G_CALLBACK (on_search_changed), self); g_signal_connect_swapped (self->search_dropdown, "notify::selected", G_CALLBACK (on_search_changed), self); g_signal_connect (self->search_entry, "realize", G_CALLBACK (on_search_entry_realize), self); g_signal_connect (self, "notify::manager", G_CALLBACK (on_bind_manager), NULL); } extension-manager-0.3.0/src/exm-browse-page.h000066400000000000000000000005031421751161400211000ustar00rootroot00000000000000#pragma once #include #include G_BEGIN_DECLS #define EXM_TYPE_BROWSE_PAGE (exm_browse_page_get_type()) G_DECLARE_FINAL_TYPE (ExmBrowsePage, exm_browse_page, EXM, BROWSE_PAGE, GtkWidget) ExmBrowsePage *exm_browse_page_new (void); void exm_browse_page_refresh (ExmBrowsePage *self); G_END_DECLS extension-manager-0.3.0/src/exm-comment-dialog.blp000066400000000000000000000015711421751161400221200ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmCommentDialog : Gtk.Window { default-width: 600; default-height: 500; title: "Comments"; [titlebar] Gtk.HeaderBar { styles ["flat"] } Gtk.ScrolledWindow { Adw.Clamp { styles ["clamp"] Gtk.Stack stack { vexpand: true; Gtk.StackPage { name: "page_spinner"; child: Gtk.Spinner { spinning: true; halign: center; valign: center; }; } Gtk.StackPage { name: "page_error"; child: Adw.StatusPage { title: _("An Error Occurred"); icon-name: "dialog-question-symbolic"; }; } Gtk.StackPage { name: "page_comments"; child: Gtk.ListBox list_box { styles ["boxed-list"] valign: start; selection-mode: none; }; } } } } } extension-manager-0.3.0/src/exm-comment-dialog.c000066400000000000000000000113601421751161400215620ustar00rootroot00000000000000#include "exm-comment-dialog.h" #include "web/exm-comment-provider.h" #include "web/model/exm-comment.h" #include "exm-comment-tile.h" struct _ExmCommentDialog { GtkWindow parent_instance; ExmCommentProvider *comment_provider; GtkListBox *list_box; GtkStack *stack; int web_id; }; G_DEFINE_FINAL_TYPE (ExmCommentDialog, exm_comment_dialog, GTK_TYPE_WINDOW) enum { PROP_0, PROP_WEB_ID, N_PROPS }; static GParamSpec *properties [N_PROPS]; static void exm_comment_dialog_constructed (GObject *object); ExmCommentDialog * exm_comment_dialog_new (int web_id) { return g_object_new (EXM_TYPE_COMMENT_DIALOG, "web-id", web_id, NULL); } static void exm_comment_dialog_finalize (GObject *object) { ExmCommentDialog *self = (ExmCommentDialog *)object; G_OBJECT_CLASS (exm_comment_dialog_parent_class)->finalize (object); } static void exm_comment_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmCommentDialog *self = EXM_COMMENT_DIALOG (object); switch (prop_id) { case PROP_WEB_ID: g_value_set_int (value, self->web_id); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmCommentDialog *self = EXM_COMMENT_DIALOG (object); switch (prop_id) { case PROP_WEB_ID: self->web_id = g_value_get_int (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_dialog_class_init (ExmCommentDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_comment_dialog_finalize; object_class->get_property = exm_comment_dialog_get_property; object_class->set_property = exm_comment_dialog_set_property; object_class->constructed = exm_comment_dialog_constructed; properties [PROP_WEB_ID] = g_param_spec_int ("web-id", "Web ID", "Web ID", 0, G_MAXINT, 0, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-comment-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, ExmCommentDialog, list_box); gtk_widget_class_bind_template_child (widget_class, ExmCommentDialog, stack); } static GtkWidget * comment_factory (ExmComment *comment) { GtkWidget *row; row = gtk_list_box_row_new (); gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), GTK_WIDGET (exm_comment_tile_new (comment))); return row; } static void on_get_comments (GObject *source, GAsyncResult *res, ExmCommentDialog *self) { GError *error = NULL; GListModel *model = exm_comment_provider_get_comments_finish (EXM_COMMENT_PROVIDER (source), res, &error); if (error != NULL) { gtk_stack_set_visible_child_name (self->stack, "page_error"); g_critical ("An issue occurred while loading comments: %s", error->message); return; } gtk_stack_set_visible_child_name (self->stack, "page_comments"); gtk_list_box_bind_model (self->list_box, model, (GtkListBoxCreateWidgetFunc) comment_factory, g_object_ref (self), g_object_unref); } static void exm_comment_dialog_constructed (GObject *object) { ExmCommentDialog *self = EXM_COMMENT_DIALOG (object); gtk_stack_set_visible_child_name (self->stack, "page_spinner"); exm_comment_provider_get_comments_async (self->comment_provider, self->web_id, true, NULL, (GAsyncReadyCallback) on_get_comments, self); G_OBJECT_CLASS (exm_comment_dialog_parent_class)->constructed (object); } static void exm_comment_dialog_init (ExmCommentDialog *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->comment_provider = exm_comment_provider_new (); } extension-manager-0.3.0/src/exm-comment-dialog.h000066400000000000000000000004561421751161400215730ustar00rootroot00000000000000#pragma once #include #include G_BEGIN_DECLS #define EXM_TYPE_COMMENT_DIALOG (exm_comment_dialog_get_type()) G_DECLARE_FINAL_TYPE (ExmCommentDialog, exm_comment_dialog, EXM, COMMENT_DIALOG, GtkWindow) ExmCommentDialog *exm_comment_dialog_new (int web_id); G_END_DECLS extension-manager-0.3.0/src/exm-comment-tile.blp000066400000000000000000000005761421751161400216220ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmCommentTile : Gtk.Widget { styles ["comment-tile"] Gtk.Box { orientation: vertical; Gtk.Box { orientation: horizontal; Gtk.Label author { styles ["dim-label"] xalign: 0; hexpand: true; } .ExmRating rating { halign: end; } } .TextDisplay display {} } } extension-manager-0.3.0/src/exm-comment-tile.c000066400000000000000000000077471421751161400212760ustar00rootroot00000000000000#include "exm-comment-tile.h" #include #include #include "exm-rating.h" struct _ExmCommentTile { GtkWidget parent_instance; ExmComment *comment; GtkLabel *author; ExmRating *rating; TextDisplay *display; }; G_DEFINE_FINAL_TYPE (ExmCommentTile, exm_comment_tile, GTK_TYPE_WIDGET) enum { PROP_0, PROP_COMMENT, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmCommentTile * exm_comment_tile_new (ExmComment *comment) { return g_object_new (EXM_TYPE_COMMENT_TILE, "comment", comment, NULL); } static void exm_comment_tile_finalize (GObject *object) { ExmCommentTile *self = (ExmCommentTile *)object; G_OBJECT_CLASS (exm_comment_tile_parent_class)->finalize (object); } static void exm_comment_tile_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmCommentTile *self = EXM_COMMENT_TILE (object); switch (prop_id) { case PROP_COMMENT: g_value_set_object (value, self->comment); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_tile_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmCommentTile *self = EXM_COMMENT_TILE (object); switch (prop_id) { case PROP_COMMENT: self->comment = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_tile_constructed (GObject *object) { ExmCommentTile *self = EXM_COMMENT_TILE (object); g_return_if_fail (EXM_IS_COMMENT (self->comment)); TextFrame *frame; gchar *text, *author; int score; g_object_get (self->comment, "comment", &text, "author", &author, "rating", &score, NULL); if (score >= 0 && score <= 5) { g_object_set (self->rating, "rating", score, NULL); gtk_widget_set_visible (GTK_WIDGET (self->rating), TRUE); } else { gtk_widget_set_visible (GTK_WIDGET (self->rating), FALSE); } frame = format_parse_html (text); g_object_set (self->display, "frame", frame, NULL); gtk_label_set_text (self->author, author); G_OBJECT_CLASS (exm_comment_tile_parent_class)->constructed (object); } static void exm_comment_tile_class_init (ExmCommentTileClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_comment_tile_finalize; object_class->get_property = exm_comment_tile_get_property; object_class->set_property = exm_comment_tile_set_property; object_class->constructed = exm_comment_tile_constructed; properties [PROP_COMMENT] = g_param_spec_object ("comment", "Comment", "Comment", EXM_TYPE_COMMENT, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-comment-tile.ui"); gtk_widget_class_bind_template_child (widget_class, ExmCommentTile, display); gtk_widget_class_bind_template_child (widget_class, ExmCommentTile, author); gtk_widget_class_bind_template_child (widget_class, ExmCommentTile, rating); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void exm_comment_tile_init (ExmCommentTile *self) { g_type_ensure (EXM_TYPE_RATING); gtk_widget_init_template (GTK_WIDGET (self)); } extension-manager-0.3.0/src/exm-comment-tile.h000066400000000000000000000004641421751161400212700ustar00rootroot00000000000000#pragma once #include #include "web/model/exm-comment.h" G_BEGIN_DECLS #define EXM_TYPE_COMMENT_TILE (exm_comment_tile_get_type()) G_DECLARE_FINAL_TYPE (ExmCommentTile, exm_comment_tile, EXM, COMMENT_TILE, GtkWidget) ExmCommentTile *exm_comment_tile_new (ExmComment *comment); G_END_DECLS extension-manager-0.3.0/src/exm-detail-view.blp000066400000000000000000000072011421751161400214270ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmDetailView : Gtk.Box { orientation: vertical; Adw.HeaderBar { title-widget: Adw.WindowTitle title {}; [start] Gtk.Button { valign: center; icon-name: "go-previous-symbolic"; action-name: "win.show-main"; } } Gtk.Stack stack { vexpand: true; Gtk.StackPage { name: "page_spinner"; child: Gtk.Spinner { spinning: true; halign: center; valign: center; }; } Gtk.StackPage { name: "page_error"; child: Adw.StatusPage { title: _("An Error Occurred"); icon-name: "dialog-question-symbolic"; }; } Gtk.StackPage { name: "page_detail"; child: Gtk.ScrolledWindow scroll_area { Adw.Clamp { styles ["clamp"] maximum-size: 800; Gtk.Box { orientation: vertical; spacing: 25; Gtk.Box header { orientation: horizontal; spacing: 25; Gtk.Image icon { valign: center; halign: center; resource: "/com/mattjakeman/ExtensionManager/res/plugin.png"; } Gtk.Box { orientation: vertical; hexpand: true; Gtk.Label ext_title { styles ["title-1"] xalign: 0; ellipsize: end; } Gtk.Label ext_author { styles ["dim-label"] label: "Author"; xalign: 0; ellipsize: end; } } .ExmInstallButton ext_install { valign: center; halign: center; } } .ExmScreenshot ext_screenshot {} Gtk.Box { orientation: vertical; Gtk.Label { styles ["title-4", "detail-heading"] label: _("Description"); xalign: 0; } Gtk.Label ext_description { xalign: 0; wrap: true; wrap-mode: word_char; selectable: true; } } Gtk.ListBox { styles ["boxed-list"] selection-mode: none; Adw.ActionRow link_extensions { title: _("View on Extensions"); activatable: true; action-name: "detail.open-extensions"; Gtk.Image { styles ["dim-label"] icon-name: "external-link-symbolic"; } } } Gtk.Box { orientation: vertical; Gtk.Label { styles ["title-4", "detail-heading"] label: _("Supported Versions"); xalign: 0; } Gtk.FlowBox supported_versions { max-children-per-line: 100; selection-mode: none; } } Gtk.Box { orientation: vertical; Gtk.Label { styles ["title-4", "detail-heading"] label: _("User Reviews"); xalign: 0; } // TODO: Abstract into common class Gtk.Stack comment_stack { vexpand: true; Gtk.StackPage { name: "page_spinner"; child: Gtk.Spinner { spinning: true; halign: center; valign: center; }; } Gtk.StackPage { name: "page_error"; child: Adw.StatusPage { title: _("An Error Occurred"); icon-name: "dialog-question-symbolic"; }; } Gtk.StackPage { name: "page_comments"; child: Gtk.Box { orientation: vertical; Gtk.FlowBox comment_box { max-children-per-line: 2; homogeneous: true; selection-mode: none; row-spacing: 12; column-spacing: 12; } Gtk.Button show_more_btn { label: _("Show All Reviews"); halign: center; margin-top: 10; } }; } } } } } }; } } } extension-manager-0.3.0/src/exm-detail-view.c000066400000000000000000000366271421751161400211120ustar00rootroot00000000000000#include "exm-detail-view.h" #include "exm-screenshot.h" #include "exm-comment-tile.h" #include "exm-comment-dialog.h" #include "web/exm-data-provider.h" #include "web/exm-image-resolver.h" #include "web/exm-comment-provider.h" #include "web/model/exm-shell-version-map.h" #include "web/model/exm-comment.h" #include "local/exm-manager.h" #include "exm-types.h" #include "exm-enums.h" #include struct _ExmDetailView { GtkBox parent_instance; ExmManager *manager; ExmDataProvider *provider; ExmImageResolver *resolver; ExmCommentProvider *comment_provider; GCancellable *resolver_cancel; gchar *shell_version; gchar *uuid; AdwWindowTitle *title; GtkStack *stack; GtkButton *ext_install; GtkLabel *ext_description; GtkLabel *ext_title; GtkLabel *ext_author; ExmScreenshot *ext_screenshot; GtkFlowBox *supported_versions; GtkScrolledWindow *scroll_area; GtkStack *comment_stack; GtkFlowBox *comment_box; GtkButton *show_more_btn; AdwActionRow *link_extensions; gchar *uri_extensions; int pk; guint signal_id; }; G_DEFINE_FINAL_TYPE (ExmDetailView, exm_detail_view, GTK_TYPE_BOX) enum { PROP_0, PROP_MANAGER, PROP_SHELL_VERSION, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmDetailView * exm_detail_view_new (void) { return g_object_new (EXM_TYPE_DETAIL_VIEW, NULL); } static void exm_detail_view_finalize (GObject *object) { ExmDetailView *self = (ExmDetailView *)object; G_OBJECT_CLASS (exm_detail_view_parent_class)->finalize (object); } static void exm_detail_view_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmDetailView *self = EXM_DETAIL_VIEW (object); switch (prop_id) { case PROP_MANAGER: g_value_set_object (value, self->manager); break; case PROP_SHELL_VERSION: g_value_set_string (value, self->shell_version); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void on_bind_manager (ExmDetailView *self); static void exm_detail_view_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmDetailView *self = EXM_DETAIL_VIEW (object); switch (prop_id) { case PROP_MANAGER: self->manager = g_value_get_object (value); on_bind_manager (self); break; case PROP_SHELL_VERSION: self->shell_version = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void on_image_loaded (GObject *source, GAsyncResult *res, ExmDetailView *self) { GError *error = NULL; GdkTexture *texture = exm_image_resolver_resolve_finish (EXM_IMAGE_RESOLVER (source), res, &error); if (error) { // TODO: Properly log this g_critical ("%s\n", error->message); return; } exm_screenshot_set_paintable (self->ext_screenshot, GDK_PAINTABLE (texture)); exm_screenshot_display (self->ext_screenshot); g_object_unref (texture); g_object_unref (self); } static void queue_resolve_screenshot (ExmDetailView *self, const gchar *screenshot_uri, GCancellable *cancellable) { exm_image_resolver_resolve_async (self->resolver, screenshot_uri, cancellable, (GAsyncReadyCallback) on_image_loaded, g_object_ref (self)); } static GtkWidget * comment_factory (ExmComment *comment) { GtkWidget *tile; tile = gtk_flow_box_child_new (); gtk_widget_add_css_class (tile, "card"); gtk_flow_box_child_set_child (GTK_FLOW_BOX_CHILD (tile), GTK_WIDGET (exm_comment_tile_new (comment))); return tile; } static void on_get_comments (GObject *source, GAsyncResult *res, ExmDetailView *self) { GError *error = NULL; GListModel *model = exm_comment_provider_get_comments_finish (EXM_COMMENT_PROVIDER (source), res, &error); if (error != NULL) { gtk_stack_set_visible_child_name (self->comment_stack, "page_error"); g_critical ("An issue occurred while loading comments: %s", error->message); return; } gtk_stack_set_visible_child_name (self->comment_stack, "page_comments"); gtk_flow_box_bind_model (self->comment_box, model, (GtkListBoxCreateWidgetFunc) comment_factory, g_object_ref (self), g_object_unref); } static void queue_resolve_comments (ExmDetailView *self, gint pk, GCancellable *cancellable) { gtk_stack_set_visible_child_name (self->comment_stack, "page_spinner"); exm_comment_provider_get_comments_async (self->comment_provider, pk, false, cancellable, (GAsyncReadyCallback) on_get_comments, self); } static void show_more_comments (GtkButton *button, ExmDetailView *self) { GtkRoot *toplevel; ExmCommentDialog *dlg; dlg = exm_comment_dialog_new (self->pk); toplevel = gtk_widget_get_root (GTK_WIDGET (self)); gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel)); gtk_window_set_modal (GTK_WINDOW (dlg), TRUE); gtk_window_present (GTK_WINDOW (dlg)); } static void install_remote (GtkButton *button, ExmDetailView *self) { gboolean warn; ExmInstallButtonState state; g_object_get (self->ext_install, "state", &state, NULL); warn = (state == EXM_INSTALL_BUTTON_STATE_UNSUPPORTED); gtk_widget_activate_action (GTK_WIDGET (button), "ext.install", "(sb)", self->uuid, warn); } static void on_data_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { ExmSearchResult *data; GError *error = NULL; ExmDetailView *self; ExmInstallButtonState install_state; GtkWidget *child; GList *version_iter; ExmShellVersionMap *version_map; gchar *uri; self = EXM_DETAIL_VIEW (user_data); if ((data = exm_data_provider_get_finish (EXM_DATA_PROVIDER (source), result, &error)) != FALSE) { gint pk; gboolean is_installed, is_supported; gchar *uuid, *name, *creator, *icon_uri, *screenshot_uri, *link, *description; g_object_get (data, "uuid", &uuid, "name", &name, "creator", &creator, "icon", &icon_uri, "screenshot", &screenshot_uri, "link", &link, "description", &description, "shell_version_map", &version_map, "pk", &pk, NULL); adw_window_title_set_title (self->title, name); adw_window_title_set_subtitle (self->title, uuid); is_installed = exm_manager_is_installed_uuid (self->manager, uuid); is_supported = exm_search_result_supports_shell_version (data, self->shell_version); gtk_label_set_label (self->ext_title, name); gtk_label_set_label (self->ext_author, creator); gtk_label_set_label (self->ext_description, description); if (self->resolver_cancel) { g_cancellable_cancel (self->resolver_cancel); g_clear_object (&self->resolver_cancel); } if (screenshot_uri != NULL) { self->resolver_cancel = g_cancellable_new (); exm_screenshot_set_paintable (self->ext_screenshot, NULL); gtk_widget_set_visible (GTK_WIDGET (self->ext_screenshot), TRUE); exm_screenshot_reset (self->ext_screenshot); queue_resolve_screenshot (self, screenshot_uri, self->resolver_cancel); } else { gtk_widget_set_visible (GTK_WIDGET (self->ext_screenshot), FALSE); } install_state = is_installed ? EXM_INSTALL_BUTTON_STATE_INSTALLED : (is_supported ? EXM_INSTALL_BUTTON_STATE_DEFAULT : EXM_INSTALL_BUTTON_STATE_UNSUPPORTED); g_object_set (self->ext_install, "state", install_state, NULL); self->uri_extensions = g_strdup_printf ("https://extensions.gnome.org/%s", link); adw_action_row_set_subtitle (self->link_extensions, self->uri_extensions); // Clear Flowbox while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->supported_versions)))) gtk_flow_box_remove (self->supported_versions, child); for (version_iter = version_map->map; version_iter != NULL; version_iter = version_iter->next) { gchar *version; MapEntry *entry; GtkWidget *label; entry = version_iter->data; if (entry->shell_minor_version) version = g_strdup_printf ("%s.%s", entry->shell_major_version, entry->shell_minor_version); else version = g_strdup (entry->shell_major_version); label = gtk_label_new (version); gtk_widget_add_css_class (label, "version-label"); gtk_flow_box_prepend (self->supported_versions, label); g_free (version); } self->pk = pk; if (self->signal_id > 0) g_signal_handler_disconnect (self->show_more_btn, self->signal_id); self->signal_id = g_signal_connect (self->show_more_btn, "clicked", G_CALLBACK (show_more_comments), self); queue_resolve_comments (self, pk, self->resolver_cancel); // Reset scroll position gtk_adjustment_set_value (gtk_scrolled_window_get_vadjustment (self->scroll_area), 0); gtk_stack_set_visible_child_name (self->stack, "page_detail"); return; } adw_window_title_set_title (self->title, _("An Error Occurred")); adw_window_title_set_subtitle (self->title, NULL); gtk_stack_set_visible_child_name (self->stack, "page_error"); } void exm_detail_view_load_for_uuid (ExmDetailView *self, gchar *uuid) { // g_assert (gtk_widget_is_constructed) self->uuid = uuid; /* Translators: Use unicode ellipsis '…' rather than three dots '...' */ adw_window_title_set_title (self->title, _("Loading…")); adw_window_title_set_subtitle (self->title, NULL); gtk_stack_set_visible_child_name (self->stack, "page_spinner"); exm_data_provider_get_async (self->provider, uuid, NULL, on_data_loaded, self); } void exm_detail_view_update (ExmDetailView *self) { if (!self->uuid) return; // Check if the newly installed extension is the // one being displayed in this detail view if (exm_manager_is_installed_uuid (self->manager, self->uuid)) { g_object_set (self->ext_install, "state", EXM_INSTALL_BUTTON_STATE_INSTALLED, NULL); } } static void open_link (ExmDetailView *self, const char *action_name, GVariant *param) { GtkWidget *toplevel; gchar *uri = NULL; toplevel = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))); if (strcmp (action_name, "detail.open-extensions") == 0) uri = self->uri_extensions; else if (strcmp (action_name, "detail.open-homepage") == 0) g_warning ("open_link(): cannot open homepage as not yet implemented."); else g_critical ("open_link() invalid action: %s", action_name); gtk_show_uri (GTK_WINDOW (toplevel), uri, GDK_CURRENT_TIME); } static void on_bind_manager (ExmDetailView *self) { GListModel *user_ext_model; GListModel *system_ext_model; g_object_get (self->manager, "user-extensions", &user_ext_model, "system-extensions", &system_ext_model, NULL); g_signal_connect_swapped (user_ext_model, "items-changed", G_CALLBACK (exm_detail_view_update), self); g_signal_connect_swapped (system_ext_model, "items-changed", G_CALLBACK (exm_detail_view_update), self); } static void exm_detail_view_class_init (ExmDetailViewClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_detail_view_finalize; object_class->get_property = exm_detail_view_get_property; object_class->set_property = exm_detail_view_set_property; properties [PROP_MANAGER] = g_param_spec_object ("manager", "Manager", "Manager", EXM_TYPE_MANAGER, G_PARAM_READWRITE); properties [PROP_SHELL_VERSION] = g_param_spec_string ("shell-version", "Shell Version", "Shell Version", NULL, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-detail-view.ui"); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, title); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, stack); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_title); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_author); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_description); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_install); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_screenshot); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, supported_versions); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, link_extensions); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, scroll_area); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, comment_box); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, comment_stack); gtk_widget_class_bind_template_child (widget_class, ExmDetailView, show_more_btn); gtk_widget_class_install_action (widget_class, "detail.open-extensions", NULL, open_link); gtk_widget_class_install_action (widget_class, "detail.open-homepage", NULL, open_link); } static void exm_detail_view_init (ExmDetailView *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->provider = exm_data_provider_new (); self->resolver = exm_image_resolver_new (); self->comment_provider = exm_comment_provider_new (); g_signal_connect (self->ext_install, "clicked", G_CALLBACK (install_remote), self); } extension-manager-0.3.0/src/exm-detail-view.h000066400000000000000000000006321421751161400211020ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_DETAIL_VIEW (exm_detail_view_get_type()) G_DECLARE_FINAL_TYPE (ExmDetailView, exm_detail_view, EXM, DETAIL_VIEW, GtkBox) ExmDetailView *exm_detail_view_new (void); void exm_detail_view_load_for_uuid (ExmDetailView *self, gchar *uuid); void exm_detail_view_update (ExmDetailView *self); G_END_DECLS extension-manager-0.3.0/src/exm-extension-row.blp000066400000000000000000000046531421751161400220460ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmExtensionRow : Adw.ExpanderRow { [action] Gtk.Switch ext_toggle { valign: center; halign: center; action-name: 'row.state-set'; } [action] Gtk.Button prefs_btn { icon-name: "settings-symbolic"; valign: center; halign: center; action-name: 'row.open-prefs'; } [action] Gtk.Image error_icon { styles ["error"] icon-name: "error-symbolic"; valign: center; halign: center; visible: false; tooltip-text: _("An error occurred while loading this extension"); } [action] Gtk.Image out_of_date_icon { styles ["error"] icon-name: "clock-alt-symbolic"; valign: center; halign: center; visible: false; tooltip-text: _("This extension is incompatible with your current version of GNOME."); } [action] Gtk.Image update_icon { styles ["update"] icon-name: "software-update-available-symbolic"; valign: center; halign: center; visible: false; tooltip-text: _("A newer version of this extension is available"); } Gtk.ListBoxRow { activatable: false; Gtk.Grid { styles ["content"] row-spacing: 15; column-spacing: 15; Gtk.Label { styles ["dim-label"] label: _("Description"); xalign: 0; yalign: 0; layout { row: 0; column: 0; } } Gtk.Label description_label { xalign: 0; wrap-mode: word; wrap: true; selectable: true; layout { row: 0; column: 1; } } Gtk.Label { styles ["dim-label"] label: _("Version"); xalign: 0; yalign: 0; layout { row: 1; column: 0; } } Gtk.Label version_label { xalign: 0; wrap-mode: word; wrap: true; selectable: true; layout { row: 1; column: 1; } } Gtk.Label error_label_tag { styles ["dim-label"] label: _("Error"); xalign: 0; yalign: 0; layout { row: 2; column: 0; } } Gtk.Label error_label { xalign: 0; wrap-mode: word; wrap: true; selectable: true; layout { row: 2; column: 1; } } } } Gtk.ListBoxRow { activatable: false; Gtk.Box { halign: end; spacing: 4; Gtk.Button details_btn { styles ["flat"] label: _("See Details"); valign: center; action-name: 'win.show-detail'; } Gtk.Button remove_btn { styles ["destructive-action"] label: _("Remove"); valign: center; action-name: 'row.remove'; } } } } extension-manager-0.3.0/src/exm-extension-row.c000066400000000000000000000306271421751161400215130ustar00rootroot00000000000000#include "exm-extension-row.h" #include "exm-enums.h" #include "exm-types.h" struct _ExmExtensionRow { AdwExpanderRow parent_instance; GSimpleActionGroup *action_group; ExmExtension *extension; gchar *uuid; GtkButton *remove_btn; GtkButton *prefs_btn; GtkButton *details_btn; GtkSwitch *ext_toggle; GtkLabel *description_label; GtkLabel *version_label; GtkLabel *error_label; GtkLabel *error_label_tag; GtkImage *update_icon; GtkImage *error_icon; GtkImage *out_of_date_icon; guint signal_handler; }; G_DEFINE_FINAL_TYPE (ExmExtensionRow, exm_extension_row, ADW_TYPE_EXPANDER_ROW) enum { PROP_0, PROP_EXTENSION, N_PROPS }; static GParamSpec *properties [N_PROPS]; static void bind_extension (ExmExtensionRow *self, ExmExtension *extension); static void unbind_extension (ExmExtensionRow *self); ExmExtensionRow * exm_extension_row_new (ExmExtension *extension) { return g_object_new (EXM_TYPE_EXTENSION_ROW, "extension", extension, NULL); } static void exm_extension_row_finalize (GObject *object) { ExmExtensionRow *self = (ExmExtensionRow *)object; G_OBJECT_CLASS (exm_extension_row_parent_class)->finalize (object); } static void exm_extension_row_dispose (GObject *object) { ExmExtensionRow *self = (ExmExtensionRow *)object; unbind_extension (self); G_OBJECT_CLASS (exm_extension_row_parent_class)->dispose (object); } static void exm_extension_row_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmExtensionRow *self = EXM_EXTENSION_ROW (object); switch (prop_id) { case PROP_EXTENSION: g_value_set_object (value, self->extension); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_extension_row_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmExtensionRow *self = EXM_EXTENSION_ROW (object); switch (prop_id) { case PROP_EXTENSION: bind_extension (self, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } void update_state (ExmExtension *extension, GParamSpec *pspec, ExmExtensionRow *row) { // We update the state of the action without activating it. If we activate // it, then it will go back to gnome-shell and explicitly enable/disable // the extension. We do not want this behaviour as it messes with the global // extension toggle. g_return_if_fail (EXM_IS_EXTENSION (extension)); g_return_if_fail (EXM_IS_EXTENSION_ROW (row)); g_assert (row->extension == extension); const gchar *uuid; ExmExtensionState new_state; GAction *action; g_object_get (extension, "state", &new_state, "uuid", &uuid, NULL); g_info ("%s: %s\n", uuid, g_enum_to_string (EXM_TYPE_EXTENSION_STATE, new_state)); action = g_action_map_lookup_action (G_ACTION_MAP (row->action_group), "state-set"); // Reset state g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); gtk_widget_set_visible (GTK_WIDGET (row->error_icon), FALSE); gtk_widget_set_visible (GTK_WIDGET (row->out_of_date_icon), FALSE); switch (new_state) { case EXM_EXTENSION_STATE_ENABLED: g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (TRUE)); break; case EXM_EXTENSION_STATE_DISABLED: g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (FALSE)); break; case EXM_EXTENSION_STATE_ERROR: g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); gtk_widget_set_visible (GTK_WIDGET (row->error_icon), TRUE); g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (FALSE)); break; case EXM_EXTENSION_STATE_OUT_OF_DATE: g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); gtk_widget_set_visible (GTK_WIDGET (row->out_of_date_icon), TRUE); g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (FALSE)); break; default: break; } gboolean is_enabled = (new_state == EXM_EXTENSION_STATE_ENABLED); // Update state of toggle g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (is_enabled)); } static void set_error_label_visible (ExmExtensionRow *self, gboolean visible) { gtk_widget_set_visible (GTK_WIDGET (self->error_label), visible); gtk_widget_set_visible (GTK_WIDGET (self->error_label_tag), visible); } static void unbind_extension (ExmExtensionRow *self) { if (self->extension != NULL) { g_signal_handler_disconnect (self->extension, self->signal_handler); g_clear_object (&self->extension); g_clear_pointer (&self->uuid, g_free); } } static void bind_extension (ExmExtensionRow *self, ExmExtension *extension) { // TODO: This big block of property assignments is currently copy/pasted // from ExmExtension. We can replace this with GtkExpression lookups // once blueprint-compiler supports expressions. // (See https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/5) g_return_if_fail (EXM_IS_EXTENSION_ROW (self)); // First, remove traces of the old extension unbind_extension (self); // Now, bind the new one self->extension = g_object_ref (extension); if (self->extension == NULL) return; gchar *name, *uuid, *description, *version, *error_msg; gboolean has_prefs, has_update, is_user; ExmExtensionState state; g_object_get (self->extension, "display-name", &name, "uuid", &uuid, "description", &description, "state", &state, "has-prefs", &has_prefs, "has-update", &has_update, "is-user", &is_user, "version", &version, "error-msg", &error_msg, NULL); self->uuid = g_strdup (uuid); g_object_set (self, "title", name, "subtitle", uuid, NULL); g_object_set (self->prefs_btn, "visible", has_prefs, NULL); g_object_set (self->remove_btn, "visible", is_user, NULL); g_object_set (self->update_icon, "visible", has_update, NULL); g_object_set (self->version_label, "label", version, NULL); // Trim description label's leading and trailing whitespace char *description_trimmed = g_strchomp (g_strstrip (description)); g_object_set (self->description_label, "label", description_trimmed, NULL); g_free (description_trimmed); // Only show if error_msg exists and is not empty g_object_set (self->error_label, "label", error_msg, NULL); gboolean has_error = (error_msg != NULL) && (strlen(error_msg) != 0); set_error_label_visible (self, has_error); gtk_actionable_set_action_target (GTK_ACTIONABLE (self->details_btn), "s", uuid); // One way binding from extension ("source of truth") to switch self->signal_handler = g_signal_connect (self->extension, "notify::state", G_CALLBACK (update_state), self); GAction *action; action = g_action_map_lookup_action (G_ACTION_MAP (self->action_group), "state-set"); g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (TRUE)); action = g_action_map_lookup_action (G_ACTION_MAP (self->action_group), "open-prefs"); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), has_prefs); action = g_action_map_lookup_action (G_ACTION_MAP (self->action_group), "remove"); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), is_user); update_state (self->extension, NULL, self); } static void exm_extension_row_class_init (ExmExtensionRowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_extension_row_finalize; object_class->dispose = exm_extension_row_dispose; object_class->get_property = exm_extension_row_get_property; object_class->set_property = exm_extension_row_set_property; properties [PROP_EXTENSION] = g_param_spec_object ("extension", "Extension", "Extension", EXM_TYPE_EXTENSION, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-extension-row.ui"); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, description_label); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, error_label); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, error_label_tag); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, version_label); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, prefs_btn); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, remove_btn); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, details_btn); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, ext_toggle); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, update_icon); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, error_icon); gtk_widget_class_bind_template_child (widget_class, ExmExtensionRow, out_of_date_icon); } static void state_changed (GSimpleAction *action, GVariant *new_value, ExmExtensionRow *self) { GVariant *variant; gboolean enabled; g_return_if_fail (self->extension); variant = g_action_get_state (G_ACTION (action)); enabled = g_variant_get_boolean (variant); gtk_widget_activate_action (GTK_WIDGET (self), "ext.state-set", "(sb)", self->uuid, !enabled); g_simple_action_set_state (action, new_value); } static void open_prefs (GSimpleAction *action, GVariant *new_value, ExmExtensionRow *self) { g_return_if_fail (self->extension); gtk_widget_activate_action (GTK_WIDGET (self), "ext.open-prefs", "s", self->uuid); } static void uninstall (GSimpleAction *action, GVariant *new_value, ExmExtensionRow *self) { g_return_if_fail (self->extension); gtk_widget_activate_action (GTK_WIDGET (self), "ext.remove", "s", self->uuid); } static void exm_extension_row_init (ExmExtensionRow *self) { GSimpleAction *state_action; GSimpleAction *open_prefs_action; GSimpleAction *remove_action; gtk_widget_init_template (GTK_WIDGET (self)); // Define Actions self->action_group = g_simple_action_group_new (); state_action = g_simple_action_new_stateful ("state-set", NULL, g_variant_new_boolean (TRUE)); g_signal_connect (state_action, "change-state", G_CALLBACK (state_changed), self); open_prefs_action = g_simple_action_new ("open-prefs", NULL); g_signal_connect (open_prefs_action, "activate", G_CALLBACK (open_prefs), self); remove_action = g_simple_action_new ("remove", NULL); g_signal_connect (remove_action, "activate", G_CALLBACK (uninstall), self); g_action_map_add_action (G_ACTION_MAP (self->action_group), G_ACTION (state_action)); g_action_map_add_action (G_ACTION_MAP (self->action_group), G_ACTION (open_prefs_action)); g_action_map_add_action (G_ACTION_MAP (self->action_group), G_ACTION (remove_action)); gtk_widget_insert_action_group (GTK_WIDGET (self), "row", G_ACTION_GROUP (self->action_group)); } extension-manager-0.3.0/src/exm-extension-row.h000066400000000000000000000005031421751161400215060ustar00rootroot00000000000000#pragma once #include #include "local/exm-extension.h" G_BEGIN_DECLS #define EXM_TYPE_EXTENSION_ROW (exm_extension_row_get_type()) G_DECLARE_FINAL_TYPE (ExmExtensionRow, exm_extension_row, EXM, EXTENSION_ROW, AdwExpanderRow) ExmExtensionRow * exm_extension_row_new (ExmExtension *extension); G_END_DECLS extension-manager-0.3.0/src/exm-install-button.c000066400000000000000000000107331421751161400216450ustar00rootroot00000000000000/* exm-install-button.c * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * SPDX-License-Identifier: GPL-3.0-or-later */ #include "exm-install-button.h" #include "exm-types.h" #include "exm-enums.h" #include struct _ExmInstallButton { GtkButton parent_instance; ExmInstallButtonState state; }; G_DEFINE_FINAL_TYPE (ExmInstallButton, exm_install_button, GTK_TYPE_BUTTON) enum { PROP_0, PROP_STATE, N_PROPS }; static GParamSpec *properties [N_PROPS]; static void update_state (ExmInstallButton *button); ExmInstallButton * exm_install_button_new (void) { return g_object_new (EXM_TYPE_INSTALL_BUTTON, NULL); } static void exm_install_button_finalize (GObject *object) { ExmInstallButton *self = (ExmInstallButton *)object; G_OBJECT_CLASS (exm_install_button_parent_class)->finalize (object); } static void exm_install_button_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmInstallButton *self = EXM_INSTALL_BUTTON (object); switch (prop_id) { case PROP_STATE: g_value_set_enum (value, self->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_install_button_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmInstallButton *self = EXM_INSTALL_BUTTON (object); switch (prop_id) { case PROP_STATE: self->state = g_value_get_enum (value); update_state (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void update_state (ExmInstallButton *button) { const gchar *tooltip; ExmInstallButtonState state; tooltip = _("This extension is incompatible with your current version of GNOME."); state = button->state; gtk_widget_remove_css_class (GTK_WIDGET (button), "warning"); gtk_widget_remove_css_class (GTK_WIDGET (button), "suggested-action"); gtk_widget_set_tooltip_text (GTK_WIDGET (button), NULL); switch ((int)state) { case EXM_INSTALL_BUTTON_STATE_DEFAULT: gtk_button_set_label (GTK_BUTTON (button), _("Install")); gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE); gtk_widget_add_css_class (GTK_WIDGET (button), "suggested-action"); break; case EXM_INSTALL_BUTTON_STATE_INSTALLED: gtk_button_set_label (GTK_BUTTON (button), C_("State", "Installed")); gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); break; case EXM_INSTALL_BUTTON_STATE_UNSUPPORTED: gtk_button_set_label (GTK_BUTTON (button), _("Unsupported")); gtk_widget_add_css_class (GTK_WIDGET (button), "warning"); gtk_widget_set_tooltip_text (GTK_WIDGET (button), tooltip); gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE); break; } } static void exm_install_button_class_init (ExmInstallButtonClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_install_button_finalize; object_class->get_property = exm_install_button_get_property; object_class->set_property = exm_install_button_set_property; properties [PROP_STATE] = g_param_spec_enum ("state", "State", "State", EXM_TYPE_INSTALL_BUTTON_STATE, EXM_INSTALL_BUTTON_STATE_DEFAULT, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); } static void exm_install_button_init (ExmInstallButton *self) { } extension-manager-0.3.0/src/exm-install-button.h000066400000000000000000000020451421751161400216470ustar00rootroot00000000000000/* exm-install-button.h * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * SPDX-License-Identifier: GPL-3.0-or-later */ #pragma once #include G_BEGIN_DECLS #define EXM_TYPE_INSTALL_BUTTON (exm_install_button_get_type()) G_DECLARE_FINAL_TYPE (ExmInstallButton, exm_install_button, EXM, INSTALL_BUTTON, GtkButton) ExmInstallButton *exm_install_button_new (void); G_END_DECLS extension-manager-0.3.0/src/exm-installed-page.blp000066400000000000000000000031721421751161400221110ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmInstalledPage : Gtk.Widget { Gtk.Box { orientation: vertical; Gtk.ScrolledWindow { vexpand: true; Gtk.Box { orientation: vertical; Adw.Clamp { styles ["clamp"] Gtk.Box { orientation: vertical; spacing: 10; Gtk.Label { styles ["heading"] xalign: 0; margin-top: 20; label: _("User-Installed Extensions"); } Gtk.ListBox user_list_box { styles ["boxed-list"] valign: start; selection-mode: none; } Gtk.Label { styles ["heading"] xalign: 0; margin-top: 20; label: _("System Extensions"); } Gtk.ListBox system_list_box { styles ["boxed-list"] valign: start; selection-mode: none; } } } } } Gtk.Revealer updates_action_bar { reveal-child: false; transition-type: slide_up; Gtk.Box { styles ["actionbar", "update-bar"] spacing: 12; Gtk.Image update_icon { styles ["update"] icon-name: "software-update-available-symbolic"; pixel-size: 24; valign: center; halign: center; } Gtk.Box { orientation: vertical; valign: center; hexpand: true; Gtk.Label { styles ["heading"] xalign: 0; label: _("Updates are available"); ellipsize: end; } Gtk.Label num_updates_label { xalign: 0; ellipsize: end; } } [end] Gtk.Button { styles ["suggested-action"] valign: center; halign: center; label: _("Log Out"); action-name: "app.logout"; } } } } } extension-manager-0.3.0/src/exm-installed-page.c000066400000000000000000000233071421751161400215600ustar00rootroot00000000000000#include "exm-installed-page.h" #include "exm-extension-row.h" #include "local/exm-manager.h" #include "exm-enums.h" #include "exm-types.h" #include "exm-config.h" #include struct _ExmInstalledPage { GtkWidget parent_instance; ExmManager *manager; // Template Widgets GtkListBox *user_list_box; GtkListBox *system_list_box; GtkLabel *num_updates_label; GtkRevealer *updates_action_bar; gboolean sort_enabled_first; }; G_DEFINE_FINAL_TYPE (ExmInstalledPage, exm_installed_page, GTK_TYPE_WIDGET) enum { PROP_0, PROP_MANAGER, PROP_SORT_ENABLED_FIRST, N_PROPS }; static GParamSpec *properties [N_PROPS]; static void invalidate_model_bindings (ExmInstalledPage *self); ExmInstalledPage * exm_installed_page_new (void) { return g_object_new (EXM_TYPE_INSTALLED_PAGE, NULL); } static void exm_installed_page_finalize (GObject *object) { ExmInstalledPage *self = (ExmInstalledPage *)object; G_OBJECT_CLASS (exm_installed_page_parent_class)->finalize (object); } static void exm_installed_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmInstalledPage *self = EXM_INSTALLED_PAGE (object); switch (prop_id) { case PROP_MANAGER: g_value_set_object (value, self->manager); break; case PROP_SORT_ENABLED_FIRST: g_value_set_boolean (value, self->sort_enabled_first); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_installed_page_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmInstalledPage *self = EXM_INSTALLED_PAGE (object); switch (prop_id) { case PROP_MANAGER: self->manager = g_value_get_object (value); break; case PROP_SORT_ENABLED_FIRST: self->sort_enabled_first = g_value_get_boolean (value); invalidate_model_bindings (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static gboolean on_state_toggled (GtkSwitch *toggle, gboolean state, gchar *uuid) { gtk_widget_activate_action (GTK_WIDGET (toggle), "ext.state-set", "(sb)", uuid, state); return FALSE; } static void on_open_prefs (GtkButton *button, gchar *uuid) { gtk_widget_activate_action (GTK_WIDGET (button), "ext.open-prefs", "s", uuid); } static void on_remove (GtkButton *button, gchar *uuid) { gtk_widget_activate_action (GTK_WIDGET (button), "ext.remove", "s", uuid); } static GtkWidget * widget_factory (ExmExtension* extension) { ExmExtensionRow *row; g_return_if_fail (EXM_IS_EXTENSION (extension)); row = exm_extension_row_new (extension); return GTK_WIDGET (row); } static int compare_enabled (ExmExtension *this, ExmExtension *other) { g_return_if_fail (EXM_IS_EXTENSION (this)); g_return_if_fail (EXM_IS_EXTENSION (other)); ExmExtensionState this_state; ExmExtensionState other_state; g_object_get (this, "state", &this_state, NULL); g_object_get (other, "state", &other_state, NULL); gboolean this_enabled = (this_state == EXM_EXTENSION_STATE_ENABLED); gboolean other_enabled = (other_state == EXM_EXTENSION_STATE_ENABLED); if ((this_enabled && other_enabled) || (!this_enabled && !other_enabled)) return 0; else if (this_enabled && !other_enabled) return -1; else if (!this_enabled && other_enabled) return 1; } static void bind_list_box (GtkListBox *list_box, GListModel *model, gboolean sort_enabled_first) { GtkExpression *expression; GtkStringSorter *alphabetical_sorter; GtkSortListModel *sorted_model; g_return_if_fail (GTK_IS_LIST_BOX (list_box)); g_return_if_fail (G_IS_LIST_MODEL (model)); // Sort alphabetically expression = gtk_property_expression_new (EXM_TYPE_EXTENSION, NULL, "display-name"); alphabetical_sorter = gtk_string_sorter_new (expression); if (sort_enabled_first) { GtkCustomSorter *enabled_sorter; GtkMultiSorter *multi_sorter; // Sort by enabled enabled_sorter = gtk_custom_sorter_new ((GCompareDataFunc) compare_enabled, NULL, NULL); multi_sorter = gtk_multi_sorter_new (); gtk_multi_sorter_append (multi_sorter, GTK_SORTER (enabled_sorter)); gtk_multi_sorter_append (multi_sorter, GTK_SORTER (alphabetical_sorter)); sorted_model = gtk_sort_list_model_new (model, GTK_SORTER (multi_sorter)); } else { sorted_model = gtk_sort_list_model_new (model, GTK_SORTER (alphabetical_sorter)); } gtk_list_box_bind_model (list_box, G_LIST_MODEL (sorted_model), (GtkListBoxCreateWidgetFunc) widget_factory, NULL, NULL); } static guint show_updates_bar (ExmInstalledPage *self) { gtk_revealer_set_reveal_child (self->updates_action_bar, TRUE); return G_SOURCE_REMOVE; } static void on_updates_available (ExmManager *manager, int n_updates, ExmInstalledPage *self) { char *label; // Translators: '%d' = number of extensions that will be updated label = g_strdup_printf(ngettext("One extension will be updated on next login.", "%d extensions will be updated on next login.", n_updates), n_updates); gtk_label_set_label (self->num_updates_label, label); g_free (label); // Short delay to draw user attention g_timeout_add (500, G_SOURCE_FUNC (show_updates_bar), self); } static void invalidate_model_bindings (ExmInstalledPage *self) { GListModel *user_ext_model; GListModel *system_ext_model; if (!self->manager) return; g_object_get (self->manager, "user-extensions", &user_ext_model, "system-extensions", &system_ext_model, NULL); if (user_ext_model) bind_list_box (self->user_list_box, user_ext_model, self->sort_enabled_first); if (system_ext_model) bind_list_box (self->system_list_box, system_ext_model, self->sort_enabled_first); } static void on_bind_manager (ExmInstalledPage *self) { // Bind (or rebind) models invalidate_model_bindings (self); g_signal_connect (self->manager, "updates-available", G_CALLBACK (on_updates_available), self); g_object_bind_property (self->manager, "extensions-enabled", self->user_list_box, "sensitive", G_BINDING_SYNC_CREATE); g_object_bind_property (self->manager, "extensions-enabled", self->system_list_box, "sensitive", G_BINDING_SYNC_CREATE); // Check if updates are available // NOTE: We need to do this *after* connecting the signal // handler above, otherwise we will not be notified. exm_manager_check_for_updates (self->manager); } static void exm_installed_page_class_init (ExmInstalledPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_installed_page_finalize; object_class->get_property = exm_installed_page_get_property; object_class->set_property = exm_installed_page_set_property; properties [PROP_MANAGER] = g_param_spec_object ("manager", "Manager", "Manager", EXM_TYPE_MANAGER, G_PARAM_READWRITE); properties [PROP_SORT_ENABLED_FIRST] = g_param_spec_boolean ("sort-enabled-first", "Sort Enabled First", "Sort Enabled First", FALSE, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-installed-page.ui"); gtk_widget_class_bind_template_child (widget_class, ExmInstalledPage, user_list_box); gtk_widget_class_bind_template_child (widget_class, ExmInstalledPage, system_list_box); gtk_widget_class_bind_template_child (widget_class, ExmInstalledPage, num_updates_label); gtk_widget_class_bind_template_child (widget_class, ExmInstalledPage, updates_action_bar); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void exm_installed_page_init (ExmInstalledPage *self) { GSettings *settings; gtk_widget_init_template (GTK_WIDGET (self)); g_signal_connect (self, "notify::manager", G_CALLBACK (on_bind_manager), NULL); settings = g_settings_new (APP_ID); g_settings_bind (settings, "sort-enabled-first", self, "sort-enabled-first", G_SETTINGS_BIND_GET); g_object_unref (settings); } extension-manager-0.3.0/src/exm-installed-page.h000066400000000000000000000004441421751161400215620ustar00rootroot00000000000000#pragma once #include #include G_BEGIN_DECLS #define EXM_TYPE_INSTALLED_PAGE (exm_installed_page_get_type()) G_DECLARE_FINAL_TYPE (ExmInstalledPage, exm_installed_page, EXM, INSTALLED_PAGE, GtkWidget) ExmInstalledPage *exm_installed_page_new (void); G_END_DECLS extension-manager-0.3.0/src/exm-rating.blp000066400000000000000000000003451421751161400205030ustar00rootroot00000000000000using Gtk 4.0; template ExmRating : Gtk.Widget { Gtk.Box { orientation: horizontal; Gtk.Image star_one {} Gtk.Image star_two {} Gtk.Image star_three {} Gtk.Image star_four {} Gtk.Image star_five {} } } extension-manager-0.3.0/src/exm-rating.c000066400000000000000000000077011421751161400201530ustar00rootroot00000000000000#include "exm-rating.h" struct _ExmRating { GtkWidget parent_instance; int rating; GtkImage *star_one; GtkImage *star_two; GtkImage *star_three; GtkImage *star_four; GtkImage *star_five; }; G_DEFINE_FINAL_TYPE (ExmRating, exm_rating, GTK_TYPE_WIDGET) enum { PROP_0, PROP_RATING, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmRating * exm_rating_new (void) { return g_object_new (EXM_TYPE_RATING, NULL); } static void exm_rating_finalize (GObject *object) { ExmRating *self = (ExmRating *)object; G_OBJECT_CLASS (exm_rating_parent_class)->finalize (object); } void update_rating (ExmRating *self); static void exm_rating_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmRating *self = EXM_RATING (object); switch (prop_id) { case PROP_RATING: g_value_set_int (value, self->rating); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_rating_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmRating *self = EXM_RATING (object); switch (prop_id) { case PROP_RATING: self->rating = g_value_get_int (value); update_rating (self); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } #define FILLED_ICON_NAME "star-filled-rounded-symbolic" #define EMPTY_ICON_NAME "star-outline-rounded-symbolic" void update_rating (ExmRating *self) { gtk_image_set_from_icon_name (self->star_one, EMPTY_ICON_NAME); gtk_image_set_from_icon_name (self->star_two, EMPTY_ICON_NAME); gtk_image_set_from_icon_name (self->star_three, EMPTY_ICON_NAME); gtk_image_set_from_icon_name (self->star_four, EMPTY_ICON_NAME); gtk_image_set_from_icon_name (self->star_five, EMPTY_ICON_NAME); switch (self->rating) { case 5: gtk_image_set_from_icon_name (self->star_five, FILLED_ICON_NAME); case 4: gtk_image_set_from_icon_name (self->star_four, FILLED_ICON_NAME); case 3: gtk_image_set_from_icon_name (self->star_three, FILLED_ICON_NAME); case 2: gtk_image_set_from_icon_name (self->star_two, FILLED_ICON_NAME); case 1: gtk_image_set_from_icon_name (self->star_one, FILLED_ICON_NAME); case 0: default: break; } } static void exm_rating_class_init (ExmRatingClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_rating_finalize; object_class->get_property = exm_rating_get_property; object_class->set_property = exm_rating_set_property; properties [PROP_RATING] = g_param_spec_int ("rating", "Rating", "Rating", 0, G_MAXINT, 0, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-rating.ui"); gtk_widget_class_bind_template_child (widget_class, ExmRating, star_one); gtk_widget_class_bind_template_child (widget_class, ExmRating, star_two); gtk_widget_class_bind_template_child (widget_class, ExmRating, star_three); gtk_widget_class_bind_template_child (widget_class, ExmRating, star_four); gtk_widget_class_bind_template_child (widget_class, ExmRating, star_five); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "rating"); } static void exm_rating_init (ExmRating *self) { gtk_widget_init_template (GTK_WIDGET (self)); update_rating (self); } extension-manager-0.3.0/src/exm-rating.h000066400000000000000000000003311421751161400201500ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_RATING (exm_rating_get_type()) G_DECLARE_FINAL_TYPE (ExmRating, exm_rating, EXM, RATING, GtkWidget) ExmRating *exm_rating_new (void); G_END_DECLS extension-manager-0.3.0/src/exm-release-notes-dialog.blp000066400000000000000000000006041421751161400232200ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmReleaseNotesDialog : Gtk.Window { default-width: 400; default-height: 400; title: _("Release Notes"); [titlebar] Gtk.HeaderBar {} Gtk.ScrolledWindow { Gtk.TextView text_view { wrap-mode: word; editable: false; top-margin: 16; left-margin: 16; right-margin: 16; bottom-margin: 16; } } } extension-manager-0.3.0/src/exm-release-notes-dialog.c000066400000000000000000000052311421751161400226660ustar00rootroot00000000000000/* exm-release-notes-dialog.c * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * SPDX-License-Identifier: GPL-3.0-or-later */ #include "exm-release-notes-dialog.h" struct _ExmReleaseNotesDialog { GtkWindow parent_instance; GtkTextView *text_view; }; G_DEFINE_FINAL_TYPE (ExmReleaseNotesDialog, exm_release_notes_dialog, GTK_TYPE_WINDOW) enum { PROP_0, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmReleaseNotesDialog * exm_release_notes_dialog_new (void) { return g_object_new (EXM_TYPE_RELEASE_NOTES_DIALOG, NULL); } static void exm_release_notes_dialog_finalize (GObject *object) { ExmReleaseNotesDialog *self = (ExmReleaseNotesDialog *)object; G_OBJECT_CLASS (exm_release_notes_dialog_parent_class)->finalize (object); } static void exm_release_notes_dialog_class_init (ExmReleaseNotesDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_release_notes_dialog_finalize; GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-release-notes-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, ExmReleaseNotesDialog, text_view); } static void exm_release_notes_dialog_init (ExmReleaseNotesDialog *self) { GtkTextBuffer *buffer; GError *error = NULL; GFile *file; gchar *contents; gsize length; gtk_widget_init_template (GTK_WIDGET (self)); file = g_file_new_for_uri ("resource:///com/mattjakeman/ExtensionManager/release-notes.txt"); if (!file) { g_critical ("Could not read release-notes.txt: invalid file"); return; } if (g_file_load_contents (file, NULL, &contents, &length, NULL, &error)) { buffer = gtk_text_view_get_buffer (self->text_view); gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), contents, length); } else { g_critical ("Could not read release-notes.txt: %s", error->message); } } extension-manager-0.3.0/src/exm-release-notes-dialog.h000066400000000000000000000021231421751161400226700ustar00rootroot00000000000000/* exm-release-notes-dialog.h * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * SPDX-License-Identifier: GPL-3.0-or-later */ #pragma once #include G_BEGIN_DECLS #define EXM_TYPE_RELEASE_NOTES_DIALOG (exm_release_notes_dialog_get_type()) G_DECLARE_FINAL_TYPE (ExmReleaseNotesDialog, exm_release_notes_dialog, EXM, RELEASE_NOTES_DIALOG, GtkWindow) ExmReleaseNotesDialog *exm_release_notes_dialog_new (void); G_END_DECLS extension-manager-0.3.0/src/exm-screenshot.blp000066400000000000000000000005661421751161400214010ustar00rootroot00000000000000using Gtk 4.0; template ExmScreenshot : Gtk.Widget { Gtk.Stack stack { transition-type: crossfade; Gtk.StackPage { name: "page_spinner"; child: Gtk.Spinner { spinning: true; valign: center; halign: center; }; } Gtk.StackPage { name: "page_picture"; child: Gtk.Picture picture { valign: center; halign: center; }; } } } extension-manager-0.3.0/src/exm-screenshot.c000066400000000000000000000102601421751161400210360ustar00rootroot00000000000000#include "exm-screenshot.h" struct _ExmScreenshot { GtkWidget parent_instance; GtkPicture *picture; GtkStack *stack; }; G_DEFINE_FINAL_TYPE (ExmScreenshot, exm_screenshot, GTK_TYPE_WIDGET) enum { PROP_0, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmScreenshot * exm_screenshot_new (void) { return g_object_new (EXM_TYPE_SCREENSHOT, NULL); } static void exm_screenshot_finalize (GObject *object) { ExmScreenshot *self = (ExmScreenshot *)object; G_OBJECT_CLASS (exm_screenshot_parent_class)->finalize (object); } static void exm_screenshot_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmScreenshot *self = EXM_SCREENSHOT (object); switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_screenshot_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmScreenshot *self = EXM_SCREENSHOT (object); switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } void exm_screenshot_set_paintable (ExmScreenshot *self, GdkPaintable *paintable) { gtk_picture_set_paintable (self->picture, paintable); } void exm_screenshot_reset (ExmScreenshot *self) { gtk_stack_set_visible_child_name (self->stack, "page_spinner"); } void exm_screenshot_display (ExmScreenshot *self) { gtk_stack_set_visible_child_name (self->stack, "page_picture"); } static void exm_screenshot_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { ExmScreenshot *self = EXM_SCREENSHOT (widget); if (orientation == GTK_ORIENTATION_VERTICAL) { gtk_widget_measure (GTK_WIDGET (self->stack), GTK_ORIENTATION_VERTICAL, for_size, minimum, natural, minimum_baseline, natural_baseline); int height = (for_size / 16.0f) * 9.0f; // 16:9 images *natural = *minimum = height; } else if (orientation == GTK_ORIENTATION_HORIZONTAL) { gtk_widget_measure (GTK_WIDGET (self->stack), GTK_ORIENTATION_HORIZONTAL, for_size, minimum, natural, minimum_baseline, natural_baseline); } } static GtkSizeRequestMode exm_screenshot_get_request_mode (GtkWidget *widget) { return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } static void exm_screenshot_size_allocate (GtkWidget *widget, int width, int height, int baseline) { ExmScreenshot *self = EXM_SCREENSHOT (widget); gtk_widget_size_allocate (GTK_WIDGET (self->stack), &(const GtkAllocation){0, 0, width, height}, baseline); } static void exm_screenshot_class_init (ExmScreenshotClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_screenshot_finalize; object_class->get_property = exm_screenshot_get_property; object_class->set_property = exm_screenshot_set_property; GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-screenshot.ui"); widget_class->get_request_mode = exm_screenshot_get_request_mode; widget_class->measure = exm_screenshot_measure; widget_class->size_allocate = exm_screenshot_size_allocate; gtk_widget_class_bind_template_child (widget_class, ExmScreenshot, picture); gtk_widget_class_bind_template_child (widget_class, ExmScreenshot, stack); } static void exm_screenshot_init (ExmScreenshot *self) { gtk_widget_init_template (GTK_WIDGET (self)); } extension-manager-0.3.0/src/exm-screenshot.h000066400000000000000000000007351421751161400210510ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_SCREENSHOT (exm_screenshot_get_type()) G_DECLARE_FINAL_TYPE (ExmScreenshot, exm_screenshot, EXM, SCREENSHOT, GtkWidget) ExmScreenshot *exm_screenshot_new (void); void exm_screenshot_set_paintable (ExmScreenshot *self, GdkPaintable *paintable); void exm_screenshot_reset (ExmScreenshot *self); void exm_screenshot_display (ExmScreenshot *self); G_END_DECLS extension-manager-0.3.0/src/exm-search-row.blp000066400000000000000000000022741421751161400212740ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmSearchRow : Gtk.ListBoxRow { styles ["search-row"] activatable: true; Gtk.Box header { styles ["header"] hexpand: true; spacing: 10; Gtk.Grid { hexpand: true; column-spacing: 10; Gtk.Image icon { valign: center; halign: center; resource: "/com/mattjakeman/ExtensionManager/res/plugin.png"; layout { row: 0; column: 0; } } Gtk.Box { hexpand: true; orientation: vertical; valign: center; Gtk.Label title { styles ["title"] ellipsize: end; xalign: 0; } Gtk.Label subtitle { styles ["subtitle"] ellipsize: end; xalign: 0; } layout { row: 0; column: 1; } } Gtk.Label description_label { styles ["description", "dim-label"] margin-top: 5; single-line-mode: true; xalign: 0; wrap: true; wrap-mode: word_char; ellipsize: end; lines: 2; layout { row: 1; column: 1; } } } .ExmInstallButton install_btn { valign: center; halign: end; } Gtk.Image { styles ["expander-row-arrow"] valign: center; halign: end; icon-name: "go-next-symbolic"; } } } extension-manager-0.3.0/src/exm-search-row.c000066400000000000000000000154441421751161400207440ustar00rootroot00000000000000#include "exm-search-row.h" #include "exm-install-button.h" #include "exm-types.h" #include "exm-enums.h" #include struct _ExmSearchRow { GtkListBoxRow parent_instance; ExmSearchResult *search_result; gboolean is_installed; gboolean is_supported; gchar *uuid; GtkLabel *description_label; ExmInstallButton *install_btn; GtkLabel *title; GtkLabel *subtitle; }; G_DEFINE_FINAL_TYPE (ExmSearchRow, exm_search_row, GTK_TYPE_LIST_BOX_ROW) enum { PROP_0, PROP_SEARCH_RESULT, PROP_IS_INSTALLED, PROP_IS_SUPPORTED, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmSearchRow * exm_search_row_new (ExmSearchResult *search_result, gboolean is_installed, gboolean is_supported) { return g_object_new (EXM_TYPE_SEARCH_ROW, "search-result", search_result, "is-installed", is_installed, "is-supported", is_supported, NULL); } static void exm_search_row_finalize (GObject *object) { ExmSearchRow *self = (ExmSearchRow *)object; G_OBJECT_CLASS (exm_search_row_parent_class)->finalize (object); } static void exm_search_row_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmSearchRow *self = EXM_SEARCH_ROW (object); switch (prop_id) { case PROP_SEARCH_RESULT: g_value_set_object (value, self->search_result); break; case PROP_IS_INSTALLED: g_value_set_boolean (value, self->is_installed); break; case PROP_IS_SUPPORTED: g_value_set_boolean (value, self->is_supported); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_search_row_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmSearchRow *self = EXM_SEARCH_ROW (object); switch (prop_id) { case PROP_SEARCH_RESULT: self->search_result = g_value_get_object (value); if (self->search_result) { // TODO: Bind here, rather than in constructed() g_object_get (self->search_result, "uuid", &self->uuid, NULL); } break; case PROP_IS_INSTALLED: self->is_installed = g_value_get_boolean (value); break; case PROP_IS_SUPPORTED: self->is_supported = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void install_remote (GtkButton *button, ExmSearchRow *self) { gboolean warn; ExmInstallButtonState state; g_object_get (self->install_btn, "state", &state, NULL); warn = (state == EXM_INSTALL_BUTTON_STATE_UNSUPPORTED); gtk_widget_activate_action (GTK_WIDGET (button), "ext.install", "(sb)", self->uuid, warn); } static void exm_search_row_constructed (GObject *object) { // TODO: This big block of property assignments is currently copy/pasted // from ExmExtension. We can replace this with GtkExpression lookups // once blueprint-compiler supports expressions. // (See https://gitlab.gnome.org/jwestman/blueprint-compiler/-/issues/5) ExmSearchRow *self = EXM_SEARCH_ROW (object); ExmInstallButtonState install_state; gchar *uri; int pk; gchar *uuid, *name, *creator, *icon_uri, *screenshot_uri, *link, *description; g_object_get (self->search_result, "uuid", &uuid, "name", &name, "creator", &creator, "icon", &icon_uri, "screenshot", &screenshot_uri, "link", &link, "description", &description, "pk", &pk, NULL); uri = g_strdup_printf ("https://extensions.gnome.org/%s", link); gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "win.show-detail"); gtk_actionable_set_action_target (GTK_ACTIONABLE (self), "s", uuid); gtk_label_set_label (self->title, name); gtk_label_set_label (self->subtitle, creator); gtk_label_set_label (self->description_label, description); install_state = self->is_installed ? EXM_INSTALL_BUTTON_STATE_INSTALLED : (self->is_supported ? EXM_INSTALL_BUTTON_STATE_DEFAULT : EXM_INSTALL_BUTTON_STATE_UNSUPPORTED); g_signal_connect (self->install_btn, "clicked", G_CALLBACK (install_remote), self); g_object_set (self->install_btn, "state", install_state, NULL); G_OBJECT_CLASS (exm_search_row_parent_class)->constructed (object); } static void exm_search_row_class_init (ExmSearchRowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_search_row_finalize; object_class->get_property = exm_search_row_get_property; object_class->set_property = exm_search_row_set_property; object_class->constructed = exm_search_row_constructed; properties [PROP_SEARCH_RESULT] = g_param_spec_object ("search-result", "Search Result", "Search Result", EXM_TYPE_SEARCH_RESULT, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_IS_INSTALLED] = g_param_spec_boolean ("is-installed", "Is Installed", "Is Installed", FALSE, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_IS_SUPPORTED] = g_param_spec_boolean ("is-supported", "Is Supported", "Is Supported", FALSE, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-search-row.ui"); gtk_widget_class_bind_template_child (widget_class, ExmSearchRow, description_label); gtk_widget_class_bind_template_child (widget_class, ExmSearchRow, install_btn); gtk_widget_class_bind_template_child (widget_class, ExmSearchRow, title); gtk_widget_class_bind_template_child (widget_class, ExmSearchRow, subtitle); } static void exm_search_row_init (ExmSearchRow *self) { gtk_widget_init_template (GTK_WIDGET (self)); } extension-manager-0.3.0/src/exm-search-row.h000066400000000000000000000006751421751161400207510ustar00rootroot00000000000000#pragma once #include #include "web/model/exm-search-result.h" G_BEGIN_DECLS #define EXM_TYPE_SEARCH_ROW (exm_search_row_get_type()) G_DECLARE_FINAL_TYPE (ExmSearchRow, exm_search_row, EXM, SEARCH_ROW, GtkListBoxRow) ExmSearchRow *exm_search_row_new (ExmSearchResult *search_result, gboolean is_installed, gboolean is_supported); G_END_DECLS extension-manager-0.3.0/src/exm-types.h000066400000000000000000000012751421751161400200400ustar00rootroot00000000000000#pragma once // Should really be in the `local/` subdirectory but meson's mkenums // has trouble with relative paths... typedef enum { EXM_EXTENSION_TYPE_SYSTEM = 1, EXM_EXTENSION_TYPE_PER_USER = 2, } ExmExtensionType; typedef enum { EXM_EXTENSION_STATE_ENABLED = 1, EXM_EXTENSION_STATE_DISABLED = 2, EXM_EXTENSION_STATE_ERROR = 3, EXM_EXTENSION_STATE_OUT_OF_DATE = 4, EXM_EXTENSION_STATE_DOWNLOADING = 5, EXM_EXTENSION_STATE_INITIALIZED = 6, EXM_EXTENSION_STATE_UNINSTALLED = 99, } ExmExtensionState; typedef enum { EXM_INSTALL_BUTTON_STATE_DEFAULT, EXM_INSTALL_BUTTON_STATE_INSTALLED, EXM_INSTALL_BUTTON_STATE_UNSUPPORTED } ExmInstallButtonState; extension-manager-0.3.0/src/exm-window.blp000066400000000000000000000035601421751161400205300ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template ExmWindow : Adw.ApplicationWindow { default-width: 800; default-height: 600; Adw.Leaflet leaflet { can-navigate-back: true; can-unfold: false; Gtk.Box main_view { orientation: vertical; Adw.HeaderBar header_bar { centering-policy: strict; [title] Adw.ViewSwitcherTitle title { stack: view_stack; } [end] Gtk.MenuButton { icon-name: "open-menu-symbolic"; menu-model: primary_menu; } [end] Gtk.Switch global_toggle {} } Gtk.Box { orientation: vertical; Adw.ViewStack view_stack { vexpand: true; hexpand: true; Adw.ViewStackPage { name: "installed"; title: C_("Navigation", "Installed"); icon-name: "puzzle-piece-symbolic"; child: .ExmInstalledPage installed_page {}; } Adw.ViewStackPage { name: "browse"; title: C_("Navigation", "Browse"); icon-name: "globe-symbolic"; child: .ExmBrowsePage browse_page {}; } } Adw.ViewSwitcherBar { stack: view_stack; reveal: bind title.title-visible; } } } .ExmDetailView detail_view {} } } menu primary_menu { section { submenu { label: _("Theme"); item { label: _("Follow System"); action: "app.style-variant"; target: "use-default"; } item { label: _("Light"); action: "app.style-variant"; target: "force-light"; } item { label: _("Dark"); action: "app.style-variant"; target: "force-dark"; } } item { label: _("Sort Enabled First"); action: "app.sort-enabled-first"; } } section { item { label: _("Release Notes"); action: "win.show-release-notes"; } item { label: _("About Extension Manager"); action: "app.about"; } } } extension-manager-0.3.0/src/exm-window.c000066400000000000000000000316021421751161400201730ustar00rootroot00000000000000/* exm-window.c * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "exm-config.h" #include "exm-window.h" #include "exm-browse-page.h" #include "exm-installed-page.h" #include "exm-detail-view.h" #include "exm-release-notes-dialog.h" #include "local/exm-manager.h" #include "local/exm-extension.h" #include struct _ExmWindow { AdwApplicationWindow parent_instance; ExmManager *manager; /* Template widgets */ AdwHeaderBar *header_bar; GtkSwitch *global_toggle; ExmBrowsePage *browse_page; ExmInstalledPage *installed_page; AdwLeaflet *leaflet; GtkWidget *main_view; ExmDetailView *detail_view; }; G_DEFINE_TYPE (ExmWindow, exm_window, ADW_TYPE_APPLICATION_WINDOW) enum { PROP_0, PROP_MANAGER, N_PROPS }; static GParamSpec *properties [N_PROPS]; static void exm_window_finalize (GObject *object) { ExmWindow *self = (ExmWindow *)object; G_OBJECT_CLASS (exm_window_parent_class)->finalize (object); } static void exm_window_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmWindow *self = EXM_WINDOW (object); switch (prop_id) { case PROP_MANAGER: g_value_set_object (value, self->manager); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_window_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmWindow *self = EXM_WINDOW (object); switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void extension_open_prefs (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; ExmExtension *extension; gchar *uuid; self = EXM_WINDOW (widget); g_variant_get (param, "s", &uuid); extension = exm_manager_get_by_uuid (self->manager, uuid); exm_manager_open_prefs (self->manager, extension); } static void extension_state_set (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; ExmExtension *extension; gchar *uuid; gboolean state; self = EXM_WINDOW (widget); g_variant_get (param, "(sb)", &uuid, &state); extension = exm_manager_get_by_uuid (self->manager, uuid); if (state) exm_manager_enable_extension (self->manager, extension); else exm_manager_disable_extension (self->manager, extension); } typedef struct { ExmManager *manager; ExmExtension *extension; } RemoveDialogData; static void extension_remove_dialog_response (GtkDialog *dialog, int response_id, RemoveDialogData *data) { gtk_window_destroy (GTK_WINDOW (dialog)); if (response_id == GTK_RESPONSE_YES) { exm_manager_remove_extension (data->manager, data->extension); } g_clear_pointer (&data->manager, g_object_unref); g_clear_pointer (&data->extension, g_object_unref); g_free (data); } static void extension_remove (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; ExmExtension *extension; gchar *uuid; self = EXM_WINDOW (widget); g_variant_get (param, "s", &uuid); extension = exm_manager_get_by_uuid (self->manager, uuid); GtkWidget *dlg; dlg = gtk_message_dialog_new (GTK_WINDOW (self), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure you want to uninstall?")); RemoveDialogData *data = g_new0 (RemoveDialogData, 1); data->manager = g_object_ref (self->manager); data->extension = g_object_ref (extension); g_signal_connect (dlg, "response", G_CALLBACK (extension_remove_dialog_response), data); gtk_widget_show (dlg); } static void on_install_done (GObject *source, GAsyncResult *res) { GError *error = NULL; if (!exm_manager_install_finish (EXM_MANAGER (source), res, &error) && error) { // TODO: Properly log this g_critical ("%s\n", error->message); } } typedef struct { ExmManager *manager; gchar *uuid; } UnsupportedDialogData; static void extension_unsupported_dialog_response (GtkDialog *dialog, int response_id, UnsupportedDialogData *data) { gtk_window_destroy (GTK_WINDOW (dialog)); if (response_id == GTK_RESPONSE_YES) { exm_manager_install_async (data->manager, data->uuid, NULL, (GAsyncReadyCallback) on_install_done, NULL); } g_clear_pointer (&data->manager, g_object_unref); g_clear_pointer (&data->uuid, g_free); g_free (data); } static void extension_install (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; gchar *uuid; gboolean warn; self = EXM_WINDOW (widget); g_variant_get (param, "(sb)", &uuid, &warn); if (warn) { GtkWidget *dlg; dlg = gtk_message_dialog_new (GTK_WINDOW (self), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("This extension does not support your GNOME Shell version.\nWould you like to install anyway?")); UnsupportedDialogData *data = g_new0 (UnsupportedDialogData, 1); data->manager = g_object_ref (self->manager); data->uuid = g_strdup (uuid); g_signal_connect (dlg, "response", G_CALLBACK (extension_unsupported_dialog_response), data); gtk_widget_show (dlg); return; } exm_manager_install_async (self->manager, uuid, NULL, (GAsyncReadyCallback) on_install_done, self); } static void show_view (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; self = EXM_WINDOW (widget); if (g_str_equal (action_name, "win.show-detail")) { gchar *uuid; g_variant_get (param, "s", &uuid); adw_leaflet_set_visible_child (self->leaflet, GTK_WIDGET (self->detail_view)); exm_detail_view_load_for_uuid (self->detail_view, uuid); return; } adw_leaflet_set_visible_child (self->leaflet, self->main_view); } static void show_release_notes (GtkWidget *widget, const char *action_name, GVariant *param) { ExmWindow *self; self = EXM_WINDOW (widget); ExmReleaseNotesDialog *notes = exm_release_notes_dialog_new (); gtk_window_set_modal (GTK_WINDOW (notes), TRUE); gtk_window_set_transient_for (GTK_WINDOW (notes), GTK_WINDOW (self)); gtk_window_present (GTK_WINDOW (notes)); } static void exm_window_class_init (ExmWindowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_window_finalize; object_class->get_property = exm_window_get_property; object_class->set_property = exm_window_set_property; properties [PROP_MANAGER] = g_param_spec_object ("manager", "Manager", "Manager", EXM_TYPE_MANAGER, G_PARAM_READABLE); g_object_class_install_properties (object_class, N_PROPS, properties); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (widget_class, "/com/mattjakeman/ExtensionManager/exm-window.ui"); gtk_widget_class_bind_template_child (widget_class, ExmWindow, header_bar); gtk_widget_class_bind_template_child (widget_class, ExmWindow, global_toggle); gtk_widget_class_bind_template_child (widget_class, ExmWindow, installed_page); gtk_widget_class_bind_template_child (widget_class, ExmWindow, browse_page); gtk_widget_class_bind_template_child (widget_class, ExmWindow, leaflet); gtk_widget_class_bind_template_child (widget_class, ExmWindow, main_view); gtk_widget_class_bind_template_child (widget_class, ExmWindow, detail_view); // TODO: Refactor ExmWindow into a separate ExmController and supply the // necessary actions/methods/etc in there. A reference to this new object can // then be passed to each page. gtk_widget_class_install_action (widget_class, "ext.install", "(sb)", extension_install); gtk_widget_class_install_action (widget_class, "ext.remove", "s", extension_remove); gtk_widget_class_install_action (widget_class, "ext.state-set", "(sb)", extension_state_set); gtk_widget_class_install_action (widget_class, "ext.open-prefs", "s", extension_open_prefs); gtk_widget_class_install_action (widget_class, "win.show-detail", "s", show_view); gtk_widget_class_install_action (widget_class, "win.show-main", NULL, show_view); gtk_widget_class_install_action (widget_class, "win.show-release-notes", NULL, show_release_notes); } static void version_check_response (GtkDialog *dialog, gint response_id, ExmWindow *self) { gtk_window_destroy (GTK_WINDOW (dialog)); if (response_id == GTK_RESPONSE_YES) { gtk_widget_activate_action (GTK_WIDGET (self), "win.show-release-notes", NULL); } } static void do_version_check (ExmWindow *self) { GSettings *settings; gchar *version_string; settings = g_settings_new (APP_ID); version_string = g_settings_get_string (settings, "last-used-version"); if (strcmp (version_string, APP_VERSION) != 0) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (self), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, _("What's New")); gtk_dialog_add_button (GTK_DIALOG (dialog), _("View Release Notes"), GTK_RESPONSE_YES); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); // Translators: '%s' = Current version of Extension Manager (e.g. '0.3.0') gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), _("This is your first time using Extension Manager %s.\nWould you like to see the release notes?"), APP_VERSION); g_signal_connect (dialog, "response", G_CALLBACK (version_check_response), self); gtk_widget_show (dialog); } g_settings_set_string (settings, "last-used-version", APP_VERSION); } static void exm_window_init (ExmWindow *self) { gtk_widget_init_template (GTK_WIDGET (self)); if (IS_DEVEL) { gtk_widget_add_css_class (GTK_WIDGET (self), "devel"); } self->manager = exm_manager_new (); g_object_set (self->installed_page, "manager", self->manager, NULL); g_object_set (self->browse_page, "manager", self->manager, NULL); g_object_set (self->detail_view, "manager", self->manager, NULL); g_object_bind_property (self->manager, "shell-version", self->detail_view, "shell-version", G_BINDING_SYNC_CREATE); g_object_bind_property (self->manager, "extensions-enabled", self->global_toggle, "state", G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE); // Window must be mapped to show version check dialog g_signal_connect (self, "map", G_CALLBACK (do_version_check), NULL); } extension-manager-0.3.0/src/exm-window.h000066400000000000000000000016041421751161400201770ustar00rootroot00000000000000/* exm-window.h * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include G_BEGIN_DECLS #define EXM_TYPE_WINDOW (exm_window_get_type()) G_DECLARE_FINAL_TYPE (ExmWindow, exm_window, EXM, WINDOW, AdwApplicationWindow) G_END_DECLS extension-manager-0.3.0/src/exm.gresource.xml000066400000000000000000000011721421751161400212400ustar00rootroot00000000000000 exm-window.ui exm-installed-page.ui exm-browse-page.ui exm-extension-row.ui exm-search-row.ui exm-detail-view.ui exm-screenshot.ui exm-comment-tile.ui exm-comment-dialog.ui exm-rating.ui exm-release-notes-dialog.ui res/plugin.png release-notes.txt style.css extension-manager-0.3.0/src/local/000077500000000000000000000000001421751161400170215ustar00rootroot00000000000000extension-manager-0.3.0/src/local/exm-extension.c000066400000000000000000000152141421751161400217730ustar00rootroot00000000000000#include "exm-extension.h" #include "../exm-types.h" #include "../exm-enums.h" struct _ExmExtension { GObject parent_instance; gchar *uuid; gchar *display_name; gchar *description; ExmExtensionState state; gboolean is_user; gboolean has_prefs; gboolean has_update; gboolean can_change; gchar *version; gchar *error_msg; }; G_DEFINE_FINAL_TYPE (ExmExtension, exm_extension, G_TYPE_OBJECT) enum { PROP_0, PROP_UUID, PROP_DISPLAY_NAME, PROP_STATE, PROP_IS_USER, PROP_DESCRIPTION, PROP_HAS_PREFS, PROP_HAS_UPDATE, PROP_CAN_CHANGE, PROP_VERSION, PROP_ERROR_MSG, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmExtension * exm_extension_new (const gchar *uuid) { return g_object_new (EXM_TYPE_EXTENSION, "uuid", uuid, NULL); } static void exm_extension_finalize (GObject *object) { ExmExtension *self = (ExmExtension *)object; G_OBJECT_CLASS (exm_extension_parent_class)->finalize (object); } static void exm_extension_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmExtension *self = EXM_EXTENSION (object); switch (prop_id) { case PROP_UUID: g_value_set_string (value, self->uuid); break; case PROP_DISPLAY_NAME: g_value_set_string (value, self->display_name); break; case PROP_DESCRIPTION: g_value_set_string (value, self->description); break; case PROP_STATE: g_value_set_enum (value, self->state); break; case PROP_IS_USER: g_value_set_boolean (value, self->is_user); break; case PROP_HAS_PREFS: g_value_set_boolean (value, self->has_prefs); break; case PROP_HAS_UPDATE: g_value_set_boolean (value, self->has_update); break; case PROP_CAN_CHANGE: g_value_set_boolean (value, self->can_change); break; case PROP_VERSION: g_value_set_string (value, self->version); break; case PROP_ERROR_MSG: g_value_set_string (value, self->error_msg); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_extension_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmExtension *self = EXM_EXTENSION (object); switch (prop_id) { case PROP_UUID: self->uuid = g_value_dup_string (value); break; case PROP_DISPLAY_NAME: if (self->display_name) g_free (self->display_name); self->display_name = g_value_dup_string (value); break; case PROP_DESCRIPTION: if (self->description) g_free (self->description); self->description = g_value_dup_string (value); break; case PROP_STATE: self->state = g_value_get_enum (value); break; case PROP_IS_USER: self->is_user = g_value_get_boolean (value); break; case PROP_HAS_PREFS: self->has_prefs = g_value_get_boolean (value); break; case PROP_HAS_UPDATE: self->has_update = g_value_get_boolean (value); break; case PROP_CAN_CHANGE: self->can_change = g_value_get_boolean (value); break; case PROP_VERSION: self->version = g_value_dup_string (value); break; case PROP_ERROR_MSG: self->error_msg = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_extension_class_init (ExmExtensionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_extension_finalize; object_class->get_property = exm_extension_get_property; object_class->set_property = exm_extension_set_property; properties [PROP_UUID] = g_param_spec_string ("uuid", "UUID", "UUID", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_DISPLAY_NAME] = g_param_spec_string ("display-name", "Display Name", "Display Name", NULL, G_PARAM_READWRITE); properties [PROP_DESCRIPTION] = g_param_spec_string ("description", "Description", "Description", NULL, G_PARAM_READWRITE); properties [PROP_STATE] = g_param_spec_enum ("state", "State", "State", EXM_TYPE_EXTENSION_STATE, EXM_EXTENSION_STATE_ENABLED, G_PARAM_READWRITE); properties [PROP_IS_USER] = g_param_spec_boolean ("is-user", "Is User", "Is User", FALSE, G_PARAM_READWRITE); properties [PROP_HAS_PREFS] = g_param_spec_boolean ("has-prefs", "Has Preferences", "Has Preferences", FALSE, G_PARAM_READWRITE); properties [PROP_HAS_UPDATE] = g_param_spec_boolean ("has-update", "Has Update", "Has Update", FALSE, G_PARAM_READWRITE); properties [PROP_CAN_CHANGE] = g_param_spec_boolean ("can-change", "Can Change", "Can Change", FALSE, G_PARAM_READWRITE); properties [PROP_VERSION] = g_param_spec_string ("version", "Version", "Version", NULL, G_PARAM_READWRITE); properties [PROP_ERROR_MSG] = g_param_spec_string ("error-msg", "Error Message", "Error Message", NULL, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); } static void exm_extension_init (ExmExtension *self) { } extension-manager-0.3.0/src/local/exm-extension.h000066400000000000000000000003751421751161400220020ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_EXTENSION (exm_extension_get_type()) G_DECLARE_FINAL_TYPE (ExmExtension, exm_extension, EXM, EXTENSION, GObject) ExmExtension *exm_extension_new (const gchar *uuid); G_END_DECLS extension-manager-0.3.0/src/local/exm-manager.c000066400000000000000000000535641421751161400214030ustar00rootroot00000000000000#include "exm-manager.h" #include "exm-extension.h" #include "shell-dbus-interface.h" #include "../exm-types.h" #include "../exm-enums.h" struct _ExmManager { GObject parent_instance; ShellExtensions *proxy; GListModel *user_ext_model; GListModel *system_ext_model; const gchar *shell_version; gboolean extensions_enabled; guint update_callback_id; }; G_DEFINE_FINAL_TYPE (ExmManager, exm_manager, G_TYPE_OBJECT) enum { PROP_0, PROP_USER_EXTENSIONS, PROP_SYSTEM_EXTENSIONS, PROP_EXTENSIONS_ENABLED, PROP_SHELL_VERSION, N_PROPS }; static GParamSpec *properties [N_PROPS]; enum { SIGNAL_0, SIGNAL_UPDATES_AVAILABLE, N_SIGNALS }; static guint signals [N_SIGNALS]; ExmManager * exm_manager_new (void) { return g_object_new (EXM_TYPE_MANAGER, NULL); } static void exm_manager_finalize (GObject *object) { ExmManager *self = (ExmManager *)object; G_OBJECT_CLASS (exm_manager_parent_class)->finalize (object); } static void exm_manager_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmManager *self = EXM_MANAGER (object); switch (prop_id) { case PROP_USER_EXTENSIONS: g_value_set_object (value, self->user_ext_model); break; case PROP_SYSTEM_EXTENSIONS: g_value_set_object (value, self->system_ext_model); break; case PROP_SHELL_VERSION: g_value_set_string (value, self->shell_version); break; case PROP_EXTENSIONS_ENABLED: g_value_set_boolean (value, self->extensions_enabled); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_manager_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmManager *self = EXM_MANAGER (object); switch (prop_id) { case PROP_SHELL_VERSION: self->shell_version = g_value_dup_string (value); break; case PROP_EXTENSIONS_ENABLED: self->extensions_enabled = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void enable_extension_done (ShellExtensions *proxy, GAsyncResult *res, ExmExtension *extension) { GError *error = NULL; gboolean success; shell_extensions_call_enable_extension_finish (proxy, &success, res, &error); if (!success) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); if (error) g_critical ("Could not enable extension '%s': %s\n", uuid, error->message); else g_critical ("Could not enable extension '%s': unknown failure", uuid); } } void exm_manager_enable_extension (ExmManager *self, ExmExtension *extension) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); shell_extensions_call_enable_extension (self->proxy, uuid, NULL, (GAsyncReadyCallback) enable_extension_done, extension); } static void disable_extension_done (ShellExtensions *proxy, GAsyncResult *res, ExmExtension *extension) { GError *error = NULL; gboolean success; shell_extensions_call_disable_extension_finish (proxy, &success, res, &error); if (!success) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); if (error) g_critical ("Could not disable extension '%s': %s\n", uuid, error->message); else g_critical ("Could not disable extension '%s': unknown failure", uuid); } } void exm_manager_disable_extension (ExmManager *self, ExmExtension *extension) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); shell_extensions_call_disable_extension (self->proxy, uuid, NULL, (GAsyncReadyCallback) disable_extension_done, extension); } static void remove_extension_done (ShellExtensions *proxy, GAsyncResult *res, ExmExtension *extension) { GError *error = NULL; gboolean success; shell_extensions_call_uninstall_extension_finish (proxy, &success, res, &error); if (!success) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); if (error) g_critical ("Could not remove extension '%s': %s\n", uuid, error->message); else g_critical ("Could not remove extension '%s': unknown failure", uuid); } } void exm_manager_remove_extension (ExmManager *self, ExmExtension *extension) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); shell_extensions_call_uninstall_extension (self->proxy, uuid, NULL, (GAsyncReadyCallback) remove_extension_done, extension); } static void open_prefs_done (ShellExtensions *proxy, GAsyncResult *res, ExmExtension *extension) { GError *error = NULL; shell_extensions_call_launch_extension_prefs_finish (proxy, res, &error); if (error) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); g_critical ("Could not open extension preferences: %s\n", error->message); } } void exm_manager_open_prefs (ExmManager *self, ExmExtension *extension) { gchar *uuid; g_object_get (extension, "uuid", &uuid, NULL); shell_extensions_call_launch_extension_prefs (self->proxy, uuid, NULL, (GAsyncReadyCallback) open_prefs_done, extension); } static gpointer list_model_get_by_uuid (GListModel *model, const gchar *uuid) { int n_items = g_list_model_get_n_items (model); for (int i = 0; i < n_items; i++) { ExmExtension *ext = g_list_model_get_item (model, i); gchar *cmp_uuid; g_object_get (ext, "uuid", &cmp_uuid, NULL); if (strcmp (uuid, cmp_uuid) == 0) return ext; } return NULL; } static gboolean list_model_contains (GListModel *model, const gchar *uuid) { return list_model_get_by_uuid (model, uuid) != NULL; } ExmExtension * exm_manager_get_by_uuid (ExmManager *self, const gchar *uuid) { ExmExtension *result = NULL; if ((result = list_model_get_by_uuid (self->user_ext_model, uuid)) != NULL) return result; if ((result = list_model_get_by_uuid (self->system_ext_model, uuid)) != NULL) return result; return NULL; } gboolean exm_manager_is_installed_uuid (ExmManager *self, const gchar *uuid) { if (list_model_contains (self->user_ext_model, uuid)) return TRUE; if (list_model_contains (self->system_ext_model, uuid)) return TRUE; return FALSE; } static void do_install_thread (GTask *task, ExmManager *self, const char *uuid, GCancellable *cancellable) { GError *error = NULL; g_dbus_proxy_call_sync (self->proxy, "InstallRemoteExtension", g_variant_new ("(s)", uuid, NULL), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, &error); if (error != NULL) { g_task_return_error (task, error); return; } g_task_return_boolean (task, TRUE); } void exm_manager_install_async (ExmManager *self, const gchar *uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; task = g_task_new (self, cancellable, callback, user_data); g_task_set_task_data (task, g_strdup (uuid), (GDestroyNotify) g_free); g_task_run_in_thread (task, (GTaskThreadFunc)do_install_thread); g_object_unref (task); } gboolean exm_manager_install_finish (ExmManager *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), FALSE); return g_task_propagate_boolean (G_TASK (result), error); } static int list_model_get_number_of_updates (GListModel *model) { int num_updates = 0; int n_items = g_list_model_get_n_items (model); for (int i = 0; i < n_items; i++) { ExmExtension *ext = g_list_model_get_item (model, i); gboolean has_update; g_object_get (ext, "has-update", &has_update, NULL); if (has_update) num_updates++; } return num_updates; } static guint notify_extension_updates (ExmManager *self) { // Checks for updates in the background and if found then // emits the 'updates-available' signal with the number of updates int n_updates = 0; n_updates += list_model_get_number_of_updates (self->user_ext_model); n_updates += list_model_get_number_of_updates (self->system_ext_model); g_info ("There are %d new updates available.", n_updates); if (n_updates > 0) g_signal_emit (G_OBJECT (self), signals [SIGNAL_UPDATES_AVAILABLE], 0, n_updates); self->update_callback_id = 0; return G_SOURCE_REMOVE; } static void queue_notify_extension_updates (ExmManager *self) { // See: notify_extension_updates if (self->update_callback_id != 0) return; self->update_callback_id = g_timeout_add (0, G_SOURCE_FUNC (notify_extension_updates), self); } static void check_for_updates_done (ShellExtensions *proxy, GAsyncResult *res, ExmManager *self) { GError *error = NULL; shell_extensions_call_check_for_updates_finish (proxy, res, &error); if (error) { g_critical ("Could not check for updates: %s", error->message); } // Notify the user if updates are detected queue_notify_extension_updates (self); } void exm_manager_check_for_updates (ExmManager *self) { shell_extensions_call_check_for_updates (self->proxy, NULL, (GAsyncReadyCallback) check_for_updates_done, self); } static void exm_manager_class_init (ExmManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_manager_finalize; object_class->get_property = exm_manager_get_property; object_class->set_property = exm_manager_set_property; properties [PROP_USER_EXTENSIONS] = g_param_spec_object ("user-extensions", "User Extensions List Model", "User Extensions List Model", G_TYPE_LIST_MODEL, G_PARAM_READABLE); properties [PROP_SYSTEM_EXTENSIONS] = g_param_spec_object ("system-extensions", "System Extensions List Model", "System Extensions List Model", G_TYPE_LIST_MODEL, G_PARAM_READABLE); properties [PROP_SHELL_VERSION] = g_param_spec_string ("shell-version", "Shell Version", "Shell Version", NULL, G_PARAM_READWRITE); properties [PROP_EXTENSIONS_ENABLED] = g_param_spec_boolean ("extensions-enabled", "Extensions Enabled", "Extensions Enabled", FALSE, G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); signals [SIGNAL_UPDATES_AVAILABLE] = g_signal_new ("updates-available", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST|G_SIGNAL_NO_RECURSE|G_SIGNAL_NO_HOOKS, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_INT, NULL); } static void parse_single_extension (ExmExtension **extension, const gchar *extension_uuid, GVariantIter *variant_iter, gboolean *is_user, gboolean *is_uninstall_operation) { gchar *prop_name; GVariant *prop_value; // Well-Defined Properties gchar *uuid = NULL; gchar *display_name = NULL; gchar *description = NULL; gboolean has_prefs = FALSE; gboolean has_update = FALSE; gboolean can_change = TRUE; ExmExtensionState state; ExmExtensionType type; gchar *version = NULL; gchar *error_msg = NULL; if (extension && *extension) { const gchar *uuid_cmp; g_object_get (*extension, "uuid", &uuid_cmp, NULL); g_assert (strcmp (extension_uuid, uuid_cmp) == 0); } else { *extension = exm_extension_new (extension_uuid); } g_debug ("Found extension '%s' with properties:\n", uuid); while (g_variant_iter_loop (variant_iter, "{sv}", &prop_name, &prop_value)) { g_debug (" - Property: %s=%s\n", prop_name, g_variant_print(prop_value, 0)); // Compare with DBus property names if (strcmp (prop_name, "uuid") == 0) { g_variant_get (prop_value, "s", &uuid); // Assert that this is the same as the extension uuid g_assert (strcmp(extension_uuid, uuid) == 0); } else if (strcmp (prop_name, "type") == 0) { gdouble val; g_variant_get (prop_value, "d", &val); type = (ExmExtensionType)val; } else if (strcmp (prop_name, "state") == 0) { gdouble val; g_variant_get (prop_value, "d", &val); state = (ExmExtensionState)val; } else if (strcmp (prop_name, "name") == 0) { g_variant_get (prop_value, "s", &display_name); } else if (strcmp (prop_name, "description") == 0) { g_variant_get (prop_value, "s", &description); } else if (strcmp (prop_name, "hasPrefs") == 0) { g_variant_get (prop_value, "b", &has_prefs); } else if (strcmp (prop_name, "hasUpdate") == 0) { g_variant_get (prop_value, "b", &has_update); } else if (strcmp (prop_name, "canChange") == 0) { g_variant_get (prop_value, "b", &can_change); } else if (strcmp (prop_name, "version") == 0) { gdouble val; g_variant_get (prop_value, "d", &val); version = g_strdup_printf ("%d", (gint)val); } else if (strcmp (prop_name, "error") == 0) { g_variant_get (prop_value, "s", &error_msg); } } *is_user = (type == EXM_EXTENSION_TYPE_PER_USER); *is_uninstall_operation = (state == EXM_EXTENSION_STATE_UNINSTALLED); g_object_set (*extension, "display-name", display_name, "description", description, "state", state, "is-user", *is_user, "has-prefs", has_prefs, "has-update", has_update, "can-change", can_change, "version", version, "error-msg", error_msg, NULL); g_free (uuid); g_free (display_name); g_free (description); } static void parse_extension_list (GVariant *exlist, GListModel **user_ext_model, GListModel **system_ext_model) { GListStore *user_ext_store; GListStore *system_ext_store; /* format: a{sa{sv}} * array of interfaces, where each interface is an array of properties * each interface corresponds to one extension * this is terrible >:( * see also: https://stackoverflow.com/questions/54131543/how-can-i-get-the-g-dbus-connection-signal-subscribe-function-to-tell-me-about-p */ GVariantIter *iter, *iter2; gchar *exname; user_ext_store = g_list_store_new (EXM_TYPE_EXTENSION); system_ext_store = g_list_store_new (EXM_TYPE_EXTENSION); g_variant_get (exlist, "a{sa{sv}}", &iter); while (g_variant_iter_loop (iter, "{sa{sv}}", &exname, &iter2)) { gboolean is_user; gboolean is_uninstall_operation; ExmExtension *extension = NULL; parse_single_extension (&extension, exname, iter2, &is_user, &is_uninstall_operation); if (is_uninstall_operation) { g_error ("Invalid extension: '%s' is being uninstalled.", exname); continue; } g_list_store_append ((is_user ? user_ext_store : system_ext_store), extension); } g_variant_iter_free (iter); *user_ext_model = G_LIST_MODEL (user_ext_store); *system_ext_model = G_LIST_MODEL (system_ext_store); } static void update_extension_list (ExmManager *self) { GError *error = NULL; GVariant* exlist; shell_extensions_call_list_extensions_sync (self->proxy, &exlist, NULL, &error); if (error != NULL) { g_critical ("Could not list extensions: %s\n", error->message); return; } // Unref object if exists g_clear_object (&self->user_ext_model); g_clear_object (&self->system_ext_model); parse_extension_list (exlist, &self->user_ext_model, &self->system_ext_model); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_USER_EXTENSIONS]); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SYSTEM_EXTENSIONS]); queue_notify_extension_updates (self); } static gboolean is_extension_equal (ExmExtension *a, ExmExtension *b) { const gchar *uuid_a, *uuid_b; g_object_get (a, "uuid", &uuid_a, NULL); g_object_get (b, "uuid", &uuid_b, NULL); return strcmp (uuid_a, uuid_b) == 0; } static void on_state_changed (ShellExtensions *object, const gchar *arg_uuid, GVariant *arg_state, ExmManager *self) { ExmExtension *extension; gboolean is_user; gboolean is_new; gboolean is_uninstall_operation; GListStore *list_store; g_debug ("State Changed for extension '%s'\n", arg_uuid); // Parse the new extension state and update only that element in // the list model. This will automatically update any bound // listboxes or listviews. // This is NULL if it does not exist extension = exm_manager_get_by_uuid (self, arg_uuid); is_new = (extension == NULL); GVariantIter *iter; g_variant_get (arg_state, "a{sv}", &iter); parse_single_extension (&extension, arg_uuid, iter, &is_user, &is_uninstall_operation); g_variant_iter_free (iter); list_store = G_LIST_STORE (is_user ? self->user_ext_model : self->system_ext_model); if (is_new) { g_list_store_append (list_store, extension); return; } if (is_uninstall_operation) { guint position; if (g_list_store_find_with_equal_func (list_store, extension, (GEqualFunc)is_extension_equal, &position)) g_list_store_remove (list_store, position); return; } // Emit items-changed signal to re-sort extension list { guint position; if (g_list_store_find_with_equal_func (list_store, extension, (GEqualFunc)is_extension_equal, &position)) g_list_model_items_changed (G_LIST_MODEL (list_store), position, 1, 1); } // If the extension that has changed has an update, then // one or more extensions have updates available. Lazily // check the exact number and emit the 'updates-available' // signal. gboolean has_update; g_object_get (extension, "has-update", &has_update, NULL); if (has_update) queue_notify_extension_updates (self); } static void exm_manager_init (ExmManager *self) { GError *error = NULL; self->proxy = shell_extensions_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.Shell.Extensions", "/org/gnome/Shell/Extensions", NULL, &error); if (error != NULL) { g_critical ("Could not create proxy: %s\n", error->message); return; } self->update_callback_id = 0; g_object_bind_property (self->proxy, "shell-version", self, "shell-version", G_BINDING_SYNC_CREATE); g_object_bind_property (self->proxy, "user-extensions-enabled", self, "extensions-enabled", G_BINDING_BIDIRECTIONAL|G_BINDING_SYNC_CREATE); update_extension_list (self); g_signal_connect (self->proxy, "extension-state-changed", G_CALLBACK (on_state_changed), self); } extension-manager-0.3.0/src/local/exm-manager.h000066400000000000000000000024171421751161400213770ustar00rootroot00000000000000#pragma once #include #include #include "exm-extension.h" G_BEGIN_DECLS #define EXM_TYPE_MANAGER (exm_manager_get_type()) G_DECLARE_FINAL_TYPE (ExmManager, exm_manager, EXM, MANAGER, GObject) ExmManager *exm_manager_new (void); void exm_manager_enable_extension (ExmManager *manager, ExmExtension *extension); void exm_manager_disable_extension (ExmManager *manager, ExmExtension *extension); void exm_manager_remove_extension (ExmManager *self, ExmExtension *extension); void exm_manager_open_prefs (ExmManager *self, ExmExtension *extension); void exm_manager_check_for_updates (ExmManager *self); gboolean exm_manager_is_installed_uuid (ExmManager *self, const gchar *uuid); ExmExtension *exm_manager_get_by_uuid (ExmManager *self, const gchar *uuid); void exm_manager_install_async (ExmManager *self, const gchar *uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean exm_manager_install_finish (ExmManager *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/local/meson.build000066400000000000000000000001661421751161400211660ustar00rootroot00000000000000exm_sources += files([ # Extension Management 'exm-manager.c', 'exm-extension.c', 'shell-dbus-interface.c' ]) extension-manager-0.3.0/src/local/org.gnome.Shell.Extensions.xml000066400000000000000000000044411421751161400246450ustar00rootroot00000000000000 extension-manager-0.3.0/src/local/regenerate-dbus.sh000077500000000000000000000002641421751161400224360ustar00rootroot00000000000000gdbus-codegen --interface-prefix org.gnome.Shell. \ --generate-c-code shell-dbus-interface \ --c-namespace Shell \ --c-generate-object-manager \ org.gnome.Shell.Extensions.xml extension-manager-0.3.0/src/local/shell-dbus-interface.c000066400000000000000000004357471421751161400232110ustar00rootroot00000000000000/* * This file is generated by gdbus-codegen, do not modify it. * * The license of this code is the same as for the D-Bus interface description * it was derived from. Note that it links to GLib, so must comply with the * LGPL linking clauses. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "shell-dbus-interface.h" #include #ifdef G_OS_UNIX # include #endif typedef struct { GDBusArgInfo parent_struct; gboolean use_gvariant; } _ExtendedGDBusArgInfo; typedef struct { GDBusMethodInfo parent_struct; const gchar *signal_name; gboolean pass_fdlist; } _ExtendedGDBusMethodInfo; typedef struct { GDBusSignalInfo parent_struct; const gchar *signal_name; } _ExtendedGDBusSignalInfo; typedef struct { GDBusPropertyInfo parent_struct; const gchar *hyphen_name; guint use_gvariant : 1; guint emits_changed_signal : 1; } _ExtendedGDBusPropertyInfo; typedef struct { GDBusInterfaceInfo parent_struct; const gchar *hyphen_name; } _ExtendedGDBusInterfaceInfo; typedef struct { const _ExtendedGDBusPropertyInfo *info; guint prop_id; GValue orig_value; /* the value before the change */ } ChangedProperty; static void _changed_property_free (ChangedProperty *data) { g_value_unset (&data->orig_value); g_free (data); } static gboolean _g_strv_equal0 (gchar **a, gchar **b) { gboolean ret = FALSE; guint n; if (a == NULL && b == NULL) { ret = TRUE; goto out; } if (a == NULL || b == NULL) goto out; if (g_strv_length (a) != g_strv_length (b)) goto out; for (n = 0; a[n] != NULL; n++) if (g_strcmp0 (a[n], b[n]) != 0) goto out; ret = TRUE; out: return ret; } static gboolean _g_variant_equal0 (GVariant *a, GVariant *b) { gboolean ret = FALSE; if (a == NULL && b == NULL) { ret = TRUE; goto out; } if (a == NULL || b == NULL) goto out; ret = g_variant_equal (a, b); out: return ret; } G_GNUC_UNUSED static gboolean _g_value_equal (const GValue *a, const GValue *b) { gboolean ret = FALSE; g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b)); switch (G_VALUE_TYPE (a)) { case G_TYPE_BOOLEAN: ret = (g_value_get_boolean (a) == g_value_get_boolean (b)); break; case G_TYPE_UCHAR: ret = (g_value_get_uchar (a) == g_value_get_uchar (b)); break; case G_TYPE_INT: ret = (g_value_get_int (a) == g_value_get_int (b)); break; case G_TYPE_UINT: ret = (g_value_get_uint (a) == g_value_get_uint (b)); break; case G_TYPE_INT64: ret = (g_value_get_int64 (a) == g_value_get_int64 (b)); break; case G_TYPE_UINT64: ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b)); break; case G_TYPE_DOUBLE: { /* Avoid -Wfloat-equal warnings by doing a direct bit compare */ gdouble da = g_value_get_double (a); gdouble db = g_value_get_double (b); ret = memcmp (&da, &db, sizeof (gdouble)) == 0; } break; case G_TYPE_STRING: ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0); break; case G_TYPE_VARIANT: ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b)); break; default: if (G_VALUE_TYPE (a) == G_TYPE_STRV) ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b)); else g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a))); break; } return ret; } /* ------------------------------------------------------------------------ * Code for interface org.gnome.Shell.Extensions * ------------------------------------------------------------------------ */ /** * SECTION:ShellExtensions * @title: ShellExtensions * @short_description: Generated C code for the org.gnome.Shell.Extensions D-Bus interface * * This section contains code for working with the org.gnome.Shell.Extensions D-Bus interface in C. */ /* ---- Introspection data for org.gnome.Shell.Extensions ---- */ static const _ExtendedGDBusArgInfo _shell_extensions_method_info_list_extensions_OUT_ARG_extensions = { { -1, (gchar *) "extensions", (gchar *) "a{sa{sv}}", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_list_extensions_OUT_ARG_pointers[] = { &_shell_extensions_method_info_list_extensions_OUT_ARG_extensions.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_list_extensions = { { -1, (gchar *) "ListExtensions", NULL, (GDBusArgInfo **) &_shell_extensions_method_info_list_extensions_OUT_ARG_pointers, NULL }, "handle-list-extensions", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_get_extension_info_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_get_extension_info_IN_ARG_pointers[] = { &_shell_extensions_method_info_get_extension_info_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_get_extension_info_OUT_ARG_info = { { -1, (gchar *) "info", (gchar *) "a{sv}", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_get_extension_info_OUT_ARG_pointers[] = { &_shell_extensions_method_info_get_extension_info_OUT_ARG_info.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_get_extension_info = { { -1, (gchar *) "GetExtensionInfo", (GDBusArgInfo **) &_shell_extensions_method_info_get_extension_info_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_get_extension_info_OUT_ARG_pointers, NULL }, "handle-get-extension-info", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_get_extension_errors_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_get_extension_errors_IN_ARG_pointers[] = { &_shell_extensions_method_info_get_extension_errors_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_get_extension_errors_OUT_ARG_errors = { { -1, (gchar *) "errors", (gchar *) "as", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_get_extension_errors_OUT_ARG_pointers[] = { &_shell_extensions_method_info_get_extension_errors_OUT_ARG_errors.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_get_extension_errors = { { -1, (gchar *) "GetExtensionErrors", (GDBusArgInfo **) &_shell_extensions_method_info_get_extension_errors_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_get_extension_errors_OUT_ARG_pointers, NULL }, "handle-get-extension-errors", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_install_remote_extension_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_install_remote_extension_IN_ARG_pointers[] = { &_shell_extensions_method_info_install_remote_extension_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_install_remote_extension_OUT_ARG_result = { { -1, (gchar *) "result", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_install_remote_extension_OUT_ARG_pointers[] = { &_shell_extensions_method_info_install_remote_extension_OUT_ARG_result.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_install_remote_extension = { { -1, (gchar *) "InstallRemoteExtension", (GDBusArgInfo **) &_shell_extensions_method_info_install_remote_extension_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_install_remote_extension_OUT_ARG_pointers, NULL }, "handle-install-remote-extension", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_uninstall_extension_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_uninstall_extension_IN_ARG_pointers[] = { &_shell_extensions_method_info_uninstall_extension_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_uninstall_extension_OUT_ARG_success = { { -1, (gchar *) "success", (gchar *) "b", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_uninstall_extension_OUT_ARG_pointers[] = { &_shell_extensions_method_info_uninstall_extension_OUT_ARG_success.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_uninstall_extension = { { -1, (gchar *) "UninstallExtension", (GDBusArgInfo **) &_shell_extensions_method_info_uninstall_extension_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_uninstall_extension_OUT_ARG_pointers, NULL }, "handle-uninstall-extension", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_reload_extension_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_reload_extension_IN_ARG_pointers[] = { &_shell_extensions_method_info_reload_extension_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_reload_extension = { { -1, (gchar *) "ReloadExtension", (GDBusArgInfo **) &_shell_extensions_method_info_reload_extension_IN_ARG_pointers, NULL, NULL }, "handle-reload-extension", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_enable_extension_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_enable_extension_IN_ARG_pointers[] = { &_shell_extensions_method_info_enable_extension_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_enable_extension_OUT_ARG_success = { { -1, (gchar *) "success", (gchar *) "b", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_enable_extension_OUT_ARG_pointers[] = { &_shell_extensions_method_info_enable_extension_OUT_ARG_success.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_enable_extension = { { -1, (gchar *) "EnableExtension", (GDBusArgInfo **) &_shell_extensions_method_info_enable_extension_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_enable_extension_OUT_ARG_pointers, NULL }, "handle-enable-extension", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_disable_extension_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_disable_extension_IN_ARG_pointers[] = { &_shell_extensions_method_info_disable_extension_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_disable_extension_OUT_ARG_success = { { -1, (gchar *) "success", (gchar *) "b", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_disable_extension_OUT_ARG_pointers[] = { &_shell_extensions_method_info_disable_extension_OUT_ARG_success.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_disable_extension = { { -1, (gchar *) "DisableExtension", (GDBusArgInfo **) &_shell_extensions_method_info_disable_extension_IN_ARG_pointers, (GDBusArgInfo **) &_shell_extensions_method_info_disable_extension_OUT_ARG_pointers, NULL }, "handle-disable-extension", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_launch_extension_prefs_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_launch_extension_prefs_IN_ARG_pointers[] = { &_shell_extensions_method_info_launch_extension_prefs_IN_ARG_uuid.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_launch_extension_prefs = { { -1, (gchar *) "LaunchExtensionPrefs", (GDBusArgInfo **) &_shell_extensions_method_info_launch_extension_prefs_IN_ARG_pointers, NULL, NULL }, "handle-launch-extension-prefs", FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_open_extension_prefs_IN_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_open_extension_prefs_IN_ARG_parent_window = { { -1, (gchar *) "parent_window", (gchar *) "s", NULL }, FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_method_info_open_extension_prefs_IN_ARG_options = { { -1, (gchar *) "options", (gchar *) "a{sv}", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_method_info_open_extension_prefs_IN_ARG_pointers[] = { &_shell_extensions_method_info_open_extension_prefs_IN_ARG_uuid.parent_struct, &_shell_extensions_method_info_open_extension_prefs_IN_ARG_parent_window.parent_struct, &_shell_extensions_method_info_open_extension_prefs_IN_ARG_options.parent_struct, NULL }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_open_extension_prefs = { { -1, (gchar *) "OpenExtensionPrefs", (GDBusArgInfo **) &_shell_extensions_method_info_open_extension_prefs_IN_ARG_pointers, NULL, NULL }, "handle-open-extension-prefs", FALSE }; static const _ExtendedGDBusMethodInfo _shell_extensions_method_info_check_for_updates = { { -1, (gchar *) "CheckForUpdates", NULL, NULL, NULL }, "handle-check-for-updates", FALSE }; static const GDBusMethodInfo * const _shell_extensions_method_info_pointers[] = { &_shell_extensions_method_info_list_extensions.parent_struct, &_shell_extensions_method_info_get_extension_info.parent_struct, &_shell_extensions_method_info_get_extension_errors.parent_struct, &_shell_extensions_method_info_install_remote_extension.parent_struct, &_shell_extensions_method_info_uninstall_extension.parent_struct, &_shell_extensions_method_info_reload_extension.parent_struct, &_shell_extensions_method_info_enable_extension.parent_struct, &_shell_extensions_method_info_disable_extension.parent_struct, &_shell_extensions_method_info_launch_extension_prefs.parent_struct, &_shell_extensions_method_info_open_extension_prefs.parent_struct, &_shell_extensions_method_info_check_for_updates.parent_struct, NULL }; static const _ExtendedGDBusArgInfo _shell_extensions_signal_info_extension_state_changed_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_signal_info_extension_state_changed_ARG_state = { { -1, (gchar *) "state", (gchar *) "a{sv}", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_signal_info_extension_state_changed_ARG_pointers[] = { &_shell_extensions_signal_info_extension_state_changed_ARG_uuid.parent_struct, &_shell_extensions_signal_info_extension_state_changed_ARG_state.parent_struct, NULL }; static const _ExtendedGDBusSignalInfo _shell_extensions_signal_info_extension_state_changed = { { -1, (gchar *) "ExtensionStateChanged", (GDBusArgInfo **) &_shell_extensions_signal_info_extension_state_changed_ARG_pointers, NULL }, "extension-state-changed" }; static const _ExtendedGDBusArgInfo _shell_extensions_signal_info_extension_status_changed_ARG_uuid = { { -1, (gchar *) "uuid", (gchar *) "s", NULL }, FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_signal_info_extension_status_changed_ARG_state = { { -1, (gchar *) "state", (gchar *) "i", NULL }, FALSE }; static const _ExtendedGDBusArgInfo _shell_extensions_signal_info_extension_status_changed_ARG_error = { { -1, (gchar *) "error", (gchar *) "s", NULL }, FALSE }; static const GDBusArgInfo * const _shell_extensions_signal_info_extension_status_changed_ARG_pointers[] = { &_shell_extensions_signal_info_extension_status_changed_ARG_uuid.parent_struct, &_shell_extensions_signal_info_extension_status_changed_ARG_state.parent_struct, &_shell_extensions_signal_info_extension_status_changed_ARG_error.parent_struct, NULL }; static const _ExtendedGDBusSignalInfo _shell_extensions_signal_info_extension_status_changed = { { -1, (gchar *) "ExtensionStatusChanged", (GDBusArgInfo **) &_shell_extensions_signal_info_extension_status_changed_ARG_pointers, NULL }, "extension-status-changed" }; static const GDBusSignalInfo * const _shell_extensions_signal_info_pointers[] = { &_shell_extensions_signal_info_extension_state_changed.parent_struct, &_shell_extensions_signal_info_extension_status_changed.parent_struct, NULL }; static const _ExtendedGDBusPropertyInfo _shell_extensions_property_info_shell_version = { { -1, (gchar *) "ShellVersion", (gchar *) "s", G_DBUS_PROPERTY_INFO_FLAGS_READABLE, NULL }, "shell-version", FALSE, TRUE }; static const _ExtendedGDBusPropertyInfo _shell_extensions_property_info_user_extensions_enabled = { { -1, (gchar *) "UserExtensionsEnabled", (gchar *) "b", G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, NULL }, "user-extensions-enabled", FALSE, TRUE }; static const GDBusPropertyInfo * const _shell_extensions_property_info_pointers[] = { &_shell_extensions_property_info_shell_version.parent_struct, &_shell_extensions_property_info_user_extensions_enabled.parent_struct, NULL }; static const _ExtendedGDBusInterfaceInfo _shell_extensions_interface_info = { { -1, (gchar *) "org.gnome.Shell.Extensions", (GDBusMethodInfo **) &_shell_extensions_method_info_pointers, (GDBusSignalInfo **) &_shell_extensions_signal_info_pointers, (GDBusPropertyInfo **) &_shell_extensions_property_info_pointers, NULL }, "extensions", }; /** * shell_extensions_interface_info: * * Gets a machine-readable description of the org.gnome.Shell.Extensions D-Bus interface. * * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. */ GDBusInterfaceInfo * shell_extensions_interface_info (void) { return (GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct; } /** * shell_extensions_override_properties: * @klass: The class structure for a #GObject derived class. * @property_id_begin: The property id to assign to the first overridden property. * * Overrides all #GObject properties in the #ShellExtensions interface for a concrete class. * The properties are overridden in the order they are defined. * * Returns: The last property id. */ guint shell_extensions_override_properties (GObjectClass *klass, guint property_id_begin) { g_object_class_override_property (klass, property_id_begin++, "shell-version"); g_object_class_override_property (klass, property_id_begin++, "user-extensions-enabled"); return property_id_begin - 1; } /** * ShellExtensions: * * Abstract interface type for the D-Bus interface org.gnome.Shell.Extensions. */ /** * ShellExtensionsIface: * @parent_iface: The parent interface. * @handle_check_for_updates: Handler for the #ShellExtensions::handle-check-for-updates signal. * @handle_disable_extension: Handler for the #ShellExtensions::handle-disable-extension signal. * @handle_enable_extension: Handler for the #ShellExtensions::handle-enable-extension signal. * @handle_get_extension_errors: Handler for the #ShellExtensions::handle-get-extension-errors signal. * @handle_get_extension_info: Handler for the #ShellExtensions::handle-get-extension-info signal. * @handle_install_remote_extension: Handler for the #ShellExtensions::handle-install-remote-extension signal. * @handle_launch_extension_prefs: Handler for the #ShellExtensions::handle-launch-extension-prefs signal. * @handle_list_extensions: Handler for the #ShellExtensions::handle-list-extensions signal. * @handle_open_extension_prefs: Handler for the #ShellExtensions::handle-open-extension-prefs signal. * @handle_reload_extension: Handler for the #ShellExtensions::handle-reload-extension signal. * @handle_uninstall_extension: Handler for the #ShellExtensions::handle-uninstall-extension signal. * @get_shell_version: Getter for the #ShellExtensions:shell-version property. * @get_user_extensions_enabled: Getter for the #ShellExtensions:user-extensions-enabled property. * @extension_state_changed: Handler for the #ShellExtensions::extension-state-changed signal. * @extension_status_changed: Handler for the #ShellExtensions::extension-status-changed signal. * * Virtual table for the D-Bus interface org.gnome.Shell.Extensions. */ typedef ShellExtensionsIface ShellExtensionsInterface; G_DEFINE_INTERFACE (ShellExtensions, shell_extensions, G_TYPE_OBJECT) static void shell_extensions_default_init (ShellExtensionsIface *iface) { /* GObject signals for incoming D-Bus method calls: */ /** * ShellExtensions::handle-list-extensions: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * * Signal emitted when a remote caller is invoking the ListExtensions() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_list_extensions() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-list-extensions", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_list_extensions), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 1, G_TYPE_DBUS_METHOD_INVOCATION); /** * ShellExtensions::handle-get-extension-info: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the GetExtensionInfo() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_get_extension_info() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-get-extension-info", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_get_extension_info), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-get-extension-errors: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the GetExtensionErrors() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_get_extension_errors() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-get-extension-errors", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_get_extension_errors), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-install-remote-extension: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the InstallRemoteExtension() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_install_remote_extension() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-install-remote-extension", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_install_remote_extension), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-uninstall-extension: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the UninstallExtension() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_uninstall_extension() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-uninstall-extension", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_uninstall_extension), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-reload-extension: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the ReloadExtension() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_reload_extension() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-reload-extension", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_reload_extension), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-enable-extension: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the EnableExtension() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_enable_extension() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-enable-extension", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_enable_extension), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-disable-extension: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the DisableExtension() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_disable_extension() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-disable-extension", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_disable_extension), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-launch-extension-prefs: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the LaunchExtensionPrefs() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_launch_extension_prefs() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-launch-extension-prefs", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_launch_extension_prefs), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 2, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); /** * ShellExtensions::handle-open-extension-prefs: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * @arg_uuid: Argument passed by remote caller. * @arg_parent_window: Argument passed by remote caller. * @arg_options: Argument passed by remote caller. * * Signal emitted when a remote caller is invoking the OpenExtensionPrefs() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_open_extension_prefs() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-open-extension-prefs", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_open_extension_prefs), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 4, G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_VARIANT); /** * ShellExtensions::handle-check-for-updates: * @object: A #ShellExtensions. * @invocation: A #GDBusMethodInvocation. * * Signal emitted when a remote caller is invoking the CheckForUpdates() D-Bus method. * * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call shell_extensions_complete_check_for_updates() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned. * * Returns: %G_DBUS_METHOD_INVOCATION_HANDLED or %TRUE if the invocation was handled, %G_DBUS_METHOD_INVOCATION_UNHANDLED or %FALSE to let other signal handlers run. */ g_signal_new ("handle-check-for-updates", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, handle_check_for_updates), g_signal_accumulator_true_handled, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 1, G_TYPE_DBUS_METHOD_INVOCATION); /* GObject signals for received D-Bus signals: */ /** * ShellExtensions::extension-state-changed: * @object: A #ShellExtensions. * @arg_uuid: Argument. * @arg_state: Argument. * * On the client-side, this signal is emitted whenever the D-Bus signal "ExtensionStateChanged" is received. * * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal. */ g_signal_new ("extension-state-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, extension_state_changed), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_VARIANT); /** * ShellExtensions::extension-status-changed: * @object: A #ShellExtensions. * @arg_uuid: Argument. * @arg_state: Argument. * @arg_error: Argument. * * On the client-side, this signal is emitted whenever the D-Bus signal "ExtensionStatusChanged" is received. * * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal. */ g_signal_new ("extension-status-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ShellExtensionsIface, extension_status_changed), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); /* GObject properties for D-Bus properties: */ /** * ShellExtensions:shell-version: * * Represents the D-Bus property "ShellVersion". * * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side. */ g_object_interface_install_property (iface, g_param_spec_string ("shell-version", "ShellVersion", "ShellVersion", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * ShellExtensions:user-extensions-enabled: * * Represents the D-Bus property "UserExtensionsEnabled". * * Since the D-Bus property for this #GObject property is both readable and writable, it is meaningful to both read from it and write to it on both the service- and client-side. */ g_object_interface_install_property (iface, g_param_spec_boolean ("user-extensions-enabled", "UserExtensionsEnabled", "UserExtensionsEnabled", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } /** * shell_extensions_get_shell_version: (skip) * @object: A #ShellExtensions. * * Gets the value of the "ShellVersion" D-Bus property. * * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. * * The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use shell_extensions_dup_shell_version() if on another thread. * * Returns: (transfer none) (nullable): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. */ const gchar * shell_extensions_get_shell_version (ShellExtensions *object) { return SHELL_EXTENSIONS_GET_IFACE (object)->get_shell_version (object); } /** * shell_extensions_dup_shell_version: (skip) * @object: A #ShellExtensions. * * Gets a copy of the "ShellVersion" D-Bus property. * * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. * * Returns: (transfer full) (nullable): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). */ gchar * shell_extensions_dup_shell_version (ShellExtensions *object) { gchar *value; g_object_get (G_OBJECT (object), "shell-version", &value, NULL); return value; } /** * shell_extensions_set_shell_version: (skip) * @object: A #ShellExtensions. * @value: The value to set. * * Sets the "ShellVersion" D-Bus property to @value. * * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. */ void shell_extensions_set_shell_version (ShellExtensions *object, const gchar *value) { g_object_set (G_OBJECT (object), "shell-version", value, NULL); } /** * shell_extensions_get_user_extensions_enabled: (skip) * @object: A #ShellExtensions. * * Gets the value of the "UserExtensionsEnabled" D-Bus property. * * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. * * Returns: The property value. */ gboolean shell_extensions_get_user_extensions_enabled (ShellExtensions *object) { return SHELL_EXTENSIONS_GET_IFACE (object)->get_user_extensions_enabled (object); } /** * shell_extensions_set_user_extensions_enabled: (skip) * @object: A #ShellExtensions. * @value: The value to set. * * Sets the "UserExtensionsEnabled" D-Bus property to @value. * * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. */ void shell_extensions_set_user_extensions_enabled (ShellExtensions *object, gboolean value) { g_object_set (G_OBJECT (object), "user-extensions-enabled", value, NULL); } /** * shell_extensions_emit_extension_state_changed: * @object: A #ShellExtensions. * @arg_uuid: Argument to pass with the signal. * @arg_state: Argument to pass with the signal. * * Emits the "ExtensionStateChanged" D-Bus signal. */ void shell_extensions_emit_extension_state_changed ( ShellExtensions *object, const gchar *arg_uuid, GVariant *arg_state) { g_signal_emit_by_name (object, "extension-state-changed", arg_uuid, arg_state); } /** * shell_extensions_emit_extension_status_changed: * @object: A #ShellExtensions. * @arg_uuid: Argument to pass with the signal. * @arg_state: Argument to pass with the signal. * @arg_error: Argument to pass with the signal. * * Emits the "ExtensionStatusChanged" D-Bus signal. */ void shell_extensions_emit_extension_status_changed ( ShellExtensions *object, const gchar *arg_uuid, gint arg_state, const gchar *arg_error) { g_signal_emit_by_name (object, "extension-status-changed", arg_uuid, arg_state, arg_error); } /** * shell_extensions_call_list_extensions: * @proxy: A #ShellExtensionsProxy. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the ListExtensions() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_list_extensions_finish() to get the result of the operation. * * See shell_extensions_call_list_extensions_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_list_extensions ( ShellExtensions *proxy, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "ListExtensions", g_variant_new ("()"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_list_extensions_finish: * @proxy: A #ShellExtensionsProxy. * @out_extensions: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_list_extensions(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_list_extensions(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_list_extensions_finish ( ShellExtensions *proxy, GVariant **out_extensions, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(@a{sa{sv}})", out_extensions); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_list_extensions_sync: * @proxy: A #ShellExtensionsProxy. * @out_extensions: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the ListExtensions() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_list_extensions() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_list_extensions_sync ( ShellExtensions *proxy, GVariant **out_extensions, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "ListExtensions", g_variant_new ("()"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(@a{sa{sv}})", out_extensions); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_get_extension_info: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the GetExtensionInfo() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_get_extension_info_finish() to get the result of the operation. * * See shell_extensions_call_get_extension_info_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_get_extension_info ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "GetExtensionInfo", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_get_extension_info_finish: * @proxy: A #ShellExtensionsProxy. * @out_info: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_get_extension_info(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_get_extension_info(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_get_extension_info_finish ( ShellExtensions *proxy, GVariant **out_info, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(@a{sv})", out_info); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_get_extension_info_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_info: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the GetExtensionInfo() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_get_extension_info() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_get_extension_info_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GVariant **out_info, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "GetExtensionInfo", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(@a{sv})", out_info); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_get_extension_errors: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the GetExtensionErrors() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_get_extension_errors_finish() to get the result of the operation. * * See shell_extensions_call_get_extension_errors_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_get_extension_errors ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "GetExtensionErrors", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_get_extension_errors_finish: * @proxy: A #ShellExtensionsProxy. * @out_errors: (out) (optional) (array zero-terminated=1): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_get_extension_errors(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_get_extension_errors(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_get_extension_errors_finish ( ShellExtensions *proxy, gchar ***out_errors, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(^as)", out_errors); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_get_extension_errors_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_errors: (out) (optional) (array zero-terminated=1): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the GetExtensionErrors() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_get_extension_errors() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_get_extension_errors_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gchar ***out_errors, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "GetExtensionErrors", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(^as)", out_errors); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_install_remote_extension: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the InstallRemoteExtension() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_install_remote_extension_finish() to get the result of the operation. * * See shell_extensions_call_install_remote_extension_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_install_remote_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "InstallRemoteExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_install_remote_extension_finish: * @proxy: A #ShellExtensionsProxy. * @out_result: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_install_remote_extension(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_install_remote_extension(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_install_remote_extension_finish ( ShellExtensions *proxy, gchar **out_result, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(s)", out_result); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_install_remote_extension_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_result: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the InstallRemoteExtension() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_install_remote_extension() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_install_remote_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gchar **out_result, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "InstallRemoteExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(s)", out_result); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_uninstall_extension: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the UninstallExtension() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_uninstall_extension_finish() to get the result of the operation. * * See shell_extensions_call_uninstall_extension_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_uninstall_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "UninstallExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_uninstall_extension_finish: * @proxy: A #ShellExtensionsProxy. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_uninstall_extension(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_uninstall_extension(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_uninstall_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_uninstall_extension_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the UninstallExtension() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_uninstall_extension() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_uninstall_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "UninstallExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_reload_extension: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the ReloadExtension() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_reload_extension_finish() to get the result of the operation. * * See shell_extensions_call_reload_extension_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_reload_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "ReloadExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_reload_extension_finish: * @proxy: A #ShellExtensionsProxy. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_reload_extension(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_reload_extension(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_reload_extension_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_reload_extension_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the ReloadExtension() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_reload_extension() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_reload_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "ReloadExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_enable_extension: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the EnableExtension() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_enable_extension_finish() to get the result of the operation. * * See shell_extensions_call_enable_extension_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_enable_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "EnableExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_enable_extension_finish: * @proxy: A #ShellExtensionsProxy. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_enable_extension(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_enable_extension(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_enable_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_enable_extension_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the EnableExtension() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_enable_extension() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_enable_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "EnableExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_disable_extension: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the DisableExtension() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_disable_extension_finish() to get the result of the operation. * * See shell_extensions_call_disable_extension_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_disable_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "DisableExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_disable_extension_finish: * @proxy: A #ShellExtensionsProxy. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_disable_extension(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_disable_extension(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_disable_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_disable_extension_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @out_success: (out) (optional): Return location for return parameter or %NULL to ignore. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the DisableExtension() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_disable_extension() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_disable_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "DisableExtension", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "(b)", out_success); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_launch_extension_prefs: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the LaunchExtensionPrefs() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_launch_extension_prefs_finish() to get the result of the operation. * * See shell_extensions_call_launch_extension_prefs_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_launch_extension_prefs ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "LaunchExtensionPrefs", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_launch_extension_prefs_finish: * @proxy: A #ShellExtensionsProxy. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_launch_extension_prefs(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_launch_extension_prefs(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_launch_extension_prefs_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_launch_extension_prefs_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the LaunchExtensionPrefs() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_launch_extension_prefs() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_launch_extension_prefs_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "LaunchExtensionPrefs", g_variant_new ("(s)", arg_uuid), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_open_extension_prefs: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @arg_parent_window: Argument to pass with the method invocation. * @arg_options: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the OpenExtensionPrefs() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_open_extension_prefs_finish() to get the result of the operation. * * See shell_extensions_call_open_extension_prefs_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_open_extension_prefs ( ShellExtensions *proxy, const gchar *arg_uuid, const gchar *arg_parent_window, GVariant *arg_options, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "OpenExtensionPrefs", g_variant_new ("(ss@a{sv})", arg_uuid, arg_parent_window, arg_options), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_open_extension_prefs_finish: * @proxy: A #ShellExtensionsProxy. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_open_extension_prefs(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_open_extension_prefs(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_open_extension_prefs_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_open_extension_prefs_sync: * @proxy: A #ShellExtensionsProxy. * @arg_uuid: Argument to pass with the method invocation. * @arg_parent_window: Argument to pass with the method invocation. * @arg_options: Argument to pass with the method invocation. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the OpenExtensionPrefs() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_open_extension_prefs() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_open_extension_prefs_sync ( ShellExtensions *proxy, const gchar *arg_uuid, const gchar *arg_parent_window, GVariant *arg_options, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "OpenExtensionPrefs", g_variant_new ("(ss@a{sv})", arg_uuid, arg_parent_window, arg_options), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_check_for_updates: * @proxy: A #ShellExtensionsProxy. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @user_data: User data to pass to @callback. * * Asynchronously invokes the CheckForUpdates() D-Bus method on @proxy. * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_call_check_for_updates_finish() to get the result of the operation. * * See shell_extensions_call_check_for_updates_sync() for the synchronous, blocking version of this method. */ void shell_extensions_call_check_for_updates ( ShellExtensions *proxy, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_dbus_proxy_call (G_DBUS_PROXY (proxy), "CheckForUpdates", g_variant_new ("()"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, callback, user_data); } /** * shell_extensions_call_check_for_updates_finish: * @proxy: A #ShellExtensionsProxy. * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_call_check_for_updates(). * @error: Return location for error or %NULL. * * Finishes an operation started with shell_extensions_call_check_for_updates(). * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_check_for_updates_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_call_check_for_updates_sync: * @proxy: A #ShellExtensionsProxy. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL. * * Synchronously invokes the CheckForUpdates() D-Bus method on @proxy. The calling thread is blocked until a reply is received. * * See shell_extensions_call_check_for_updates() for the asynchronous version of this method. * * Returns: (skip): %TRUE if the call succeeded, %FALSE if @error is set. */ gboolean shell_extensions_call_check_for_updates_sync ( ShellExtensions *proxy, GCancellable *cancellable, GError **error) { GVariant *_ret; _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), "CheckForUpdates", g_variant_new ("()"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); if (_ret == NULL) goto _out; g_variant_get (_ret, "()"); g_variant_unref (_ret); _out: return _ret != NULL; } /** * shell_extensions_complete_list_extensions: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @extensions: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the ListExtensions() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_list_extensions ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, GVariant *extensions) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(@a{sa{sv}})", extensions)); } /** * shell_extensions_complete_get_extension_info: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @info: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the GetExtensionInfo() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_get_extension_info ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, GVariant *info) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(@a{sv})", info)); } /** * shell_extensions_complete_get_extension_errors: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @errors: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the GetExtensionErrors() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_get_extension_errors ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, const gchar *const *errors) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(^as)", errors)); } /** * shell_extensions_complete_install_remote_extension: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @result: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the InstallRemoteExtension() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_install_remote_extension ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, const gchar *result) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", result)); } /** * shell_extensions_complete_uninstall_extension: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @success: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the UninstallExtension() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_uninstall_extension ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, gboolean success) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", success)); } /** * shell_extensions_complete_reload_extension: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * * Helper function used in service implementations to finish handling invocations of the ReloadExtension() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_reload_extension ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); } /** * shell_extensions_complete_enable_extension: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @success: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the EnableExtension() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_enable_extension ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, gboolean success) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", success)); } /** * shell_extensions_complete_disable_extension: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * @success: Parameter to return. * * Helper function used in service implementations to finish handling invocations of the DisableExtension() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_disable_extension ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation, gboolean success) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", success)); } /** * shell_extensions_complete_launch_extension_prefs: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * * Helper function used in service implementations to finish handling invocations of the LaunchExtensionPrefs() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_launch_extension_prefs ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); } /** * shell_extensions_complete_open_extension_prefs: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * * Helper function used in service implementations to finish handling invocations of the OpenExtensionPrefs() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_open_extension_prefs ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); } /** * shell_extensions_complete_check_for_updates: * @object: A #ShellExtensions. * @invocation: (transfer full): A #GDBusMethodInvocation. * * Helper function used in service implementations to finish handling invocations of the CheckForUpdates() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar. * * This method will free @invocation, you cannot use it afterwards. */ void shell_extensions_complete_check_for_updates ( ShellExtensions *object G_GNUC_UNUSED, GDBusMethodInvocation *invocation) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("()")); } /* ------------------------------------------------------------------------ */ /** * ShellExtensionsProxy: * * The #ShellExtensionsProxy structure contains only private data and should only be accessed using the provided API. */ /** * ShellExtensionsProxyClass: * @parent_class: The parent class. * * Class structure for #ShellExtensionsProxy. */ struct _ShellExtensionsProxyPrivate { GData *qdata; }; static void shell_extensions_proxy_iface_init (ShellExtensionsIface *iface); #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 G_DEFINE_TYPE_WITH_CODE (ShellExtensionsProxy, shell_extensions_proxy, G_TYPE_DBUS_PROXY, G_ADD_PRIVATE (ShellExtensionsProxy) G_IMPLEMENT_INTERFACE (SHELL_TYPE_EXTENSIONS, shell_extensions_proxy_iface_init)) #else G_DEFINE_TYPE_WITH_CODE (ShellExtensionsProxy, shell_extensions_proxy, G_TYPE_DBUS_PROXY, G_IMPLEMENT_INTERFACE (SHELL_TYPE_EXTENSIONS, shell_extensions_proxy_iface_init)) #endif static void shell_extensions_proxy_finalize (GObject *object) { ShellExtensionsProxy *proxy = SHELL_EXTENSIONS_PROXY (object); g_datalist_clear (&proxy->priv->qdata); G_OBJECT_CLASS (shell_extensions_proxy_parent_class)->finalize (object); } static void shell_extensions_proxy_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec G_GNUC_UNUSED) { const _ExtendedGDBusPropertyInfo *info; GVariant *variant; g_assert (prop_id != 0 && prop_id - 1 < 2); info = (const _ExtendedGDBusPropertyInfo *) _shell_extensions_property_info_pointers[prop_id - 1]; variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); if (info->use_gvariant) { g_value_set_variant (value, variant); } else { if (variant != NULL) g_dbus_gvariant_to_gvalue (variant, value); } if (variant != NULL) g_variant_unref (variant); } static void shell_extensions_proxy_set_property_cb (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { const _ExtendedGDBusPropertyInfo *info = user_data; GError *error; GVariant *_ret; error = NULL; _ret = g_dbus_proxy_call_finish (proxy, res, &error); if (!_ret) { g_warning ("Error setting property '%s' on interface org.gnome.Shell.Extensions: %s (%s, %d)", info->parent_struct.name, error->message, g_quark_to_string (error->domain), error->code); g_error_free (error); } else { g_variant_unref (_ret); } } static void shell_extensions_proxy_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec G_GNUC_UNUSED) { const _ExtendedGDBusPropertyInfo *info; GVariant *variant; g_assert (prop_id != 0 && prop_id - 1 < 2); info = (const _ExtendedGDBusPropertyInfo *) _shell_extensions_property_info_pointers[prop_id - 1]; variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); g_dbus_proxy_call (G_DBUS_PROXY (object), "org.freedesktop.DBus.Properties.Set", g_variant_new ("(ssv)", "org.gnome.Shell.Extensions", info->parent_struct.name, variant), G_DBUS_CALL_FLAGS_NONE, -1, NULL, (GAsyncReadyCallback) shell_extensions_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); g_variant_unref (variant); } static void shell_extensions_proxy_g_signal (GDBusProxy *proxy, const gchar *sender_name G_GNUC_UNUSED, const gchar *signal_name, GVariant *parameters) { _ExtendedGDBusSignalInfo *info; GVariantIter iter; GVariant *child; GValue *paramv; gsize num_params; gsize n; guint signal_id; info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct, signal_name); if (info == NULL) return; num_params = g_variant_n_children (parameters); paramv = g_new0 (GValue, num_params + 1); g_value_init (¶mv[0], SHELL_TYPE_EXTENSIONS); g_value_set_object (¶mv[0], proxy); g_variant_iter_init (&iter, parameters); n = 1; while ((child = g_variant_iter_next_value (&iter)) != NULL) { _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; if (arg_info->use_gvariant) { g_value_init (¶mv[n], G_TYPE_VARIANT); g_value_set_variant (¶mv[n], child); n++; } else g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); g_variant_unref (child); } signal_id = g_signal_lookup (info->signal_name, SHELL_TYPE_EXTENSIONS); g_signal_emitv (paramv, signal_id, 0, NULL); for (n = 0; n < num_params + 1; n++) g_value_unset (¶mv[n]); g_free (paramv); } static void shell_extensions_proxy_g_properties_changed (GDBusProxy *_proxy, GVariant *changed_properties, const gchar *const *invalidated_properties) { ShellExtensionsProxy *proxy = SHELL_EXTENSIONS_PROXY (_proxy); guint n; const gchar *key; GVariantIter *iter; _ExtendedGDBusPropertyInfo *info; g_variant_get (changed_properties, "a{sv}", &iter); while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) { info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct, key); g_datalist_remove_data (&proxy->priv->qdata, key); if (info != NULL) g_object_notify (G_OBJECT (proxy), info->hyphen_name); } g_variant_iter_free (iter); for (n = 0; invalidated_properties[n] != NULL; n++) { info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct, invalidated_properties[n]); g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); if (info != NULL) g_object_notify (G_OBJECT (proxy), info->hyphen_name); } } static const gchar * shell_extensions_proxy_get_shell_version (ShellExtensions *object) { ShellExtensionsProxy *proxy = SHELL_EXTENSIONS_PROXY (object); GVariant *variant; const gchar *value = NULL; variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "ShellVersion"); if (variant != NULL) { value = g_variant_get_string (variant, NULL); g_variant_unref (variant); } return value; } static gboolean shell_extensions_proxy_get_user_extensions_enabled (ShellExtensions *object) { ShellExtensionsProxy *proxy = SHELL_EXTENSIONS_PROXY (object); GVariant *variant; gboolean value = 0; variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "UserExtensionsEnabled"); if (variant != NULL) { value = g_variant_get_boolean (variant); g_variant_unref (variant); } return value; } static void shell_extensions_proxy_init (ShellExtensionsProxy *proxy) { #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 proxy->priv = shell_extensions_proxy_get_instance_private (proxy); #else proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, SHELL_TYPE_EXTENSIONS_PROXY, ShellExtensionsProxyPrivate); #endif g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), shell_extensions_interface_info ()); } static void shell_extensions_proxy_class_init (ShellExtensionsProxyClass *klass) { GObjectClass *gobject_class; GDBusProxyClass *proxy_class; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = shell_extensions_proxy_finalize; gobject_class->get_property = shell_extensions_proxy_get_property; gobject_class->set_property = shell_extensions_proxy_set_property; proxy_class = G_DBUS_PROXY_CLASS (klass); proxy_class->g_signal = shell_extensions_proxy_g_signal; proxy_class->g_properties_changed = shell_extensions_proxy_g_properties_changed; shell_extensions_override_properties (gobject_class, 1); #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 g_type_class_add_private (klass, sizeof (ShellExtensionsProxyPrivate)); #endif } static void shell_extensions_proxy_iface_init (ShellExtensionsIface *iface) { iface->get_shell_version = shell_extensions_proxy_get_shell_version; iface->get_user_extensions_enabled = shell_extensions_proxy_get_user_extensions_enabled; } /** * shell_extensions_proxy_new: * @connection: A #GDBusConnection. * @flags: Flags from the #GDBusProxyFlags enumeration. * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied. * @user_data: User data to pass to @callback. * * Asynchronously creates a proxy for the D-Bus interface org.gnome.Shell.Extensions. See g_dbus_proxy_new() for more details. * * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_proxy_new_finish() to get the result of the operation. * * See shell_extensions_proxy_new_sync() for the synchronous, blocking version of this constructor. */ void shell_extensions_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async (SHELL_TYPE_EXTENSIONS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.Shell.Extensions", NULL); } /** * shell_extensions_proxy_new_finish: * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_proxy_new(). * @error: Return location for error or %NULL * * Finishes an operation started with shell_extensions_proxy_new(). * * Returns: (transfer full) (type ShellExtensionsProxy): The constructed proxy object or %NULL if @error is set. */ ShellExtensions * shell_extensions_proxy_new_finish ( GAsyncResult *res, GError **error) { GObject *ret; GObject *source_object; source_object = g_async_result_get_source_object (res); ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); g_object_unref (source_object); if (ret != NULL) return SHELL_EXTENSIONS (ret); else return NULL; } /** * shell_extensions_proxy_new_sync: * @connection: A #GDBusConnection. * @flags: Flags from the #GDBusProxyFlags enumeration. * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL * * Synchronously creates a proxy for the D-Bus interface org.gnome.Shell.Extensions. See g_dbus_proxy_new_sync() for more details. * * The calling thread is blocked until a reply is received. * * See shell_extensions_proxy_new() for the asynchronous version of this constructor. * * Returns: (transfer full) (type ShellExtensionsProxy): The constructed proxy object or %NULL if @error is set. */ ShellExtensions * shell_extensions_proxy_new_sync ( GDBusConnection *connection, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error) { GInitable *ret; ret = g_initable_new (SHELL_TYPE_EXTENSIONS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.gnome.Shell.Extensions", NULL); if (ret != NULL) return SHELL_EXTENSIONS (ret); else return NULL; } /** * shell_extensions_proxy_new_for_bus: * @bus_type: A #GBusType. * @flags: Flags from the #GDBusProxyFlags enumeration. * @name: A bus name (well-known or unique). * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied. * @user_data: User data to pass to @callback. * * Like shell_extensions_proxy_new() but takes a #GBusType instead of a #GDBusConnection. * * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_extensions_proxy_new_for_bus_finish() to get the result of the operation. * * See shell_extensions_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. */ void shell_extensions_proxy_new_for_bus ( GBusType bus_type, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async (SHELL_TYPE_EXTENSIONS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.Shell.Extensions", NULL); } /** * shell_extensions_proxy_new_for_bus_finish: * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_extensions_proxy_new_for_bus(). * @error: Return location for error or %NULL * * Finishes an operation started with shell_extensions_proxy_new_for_bus(). * * Returns: (transfer full) (type ShellExtensionsProxy): The constructed proxy object or %NULL if @error is set. */ ShellExtensions * shell_extensions_proxy_new_for_bus_finish ( GAsyncResult *res, GError **error) { GObject *ret; GObject *source_object; source_object = g_async_result_get_source_object (res); ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); g_object_unref (source_object); if (ret != NULL) return SHELL_EXTENSIONS (ret); else return NULL; } /** * shell_extensions_proxy_new_for_bus_sync: * @bus_type: A #GBusType. * @flags: Flags from the #GDBusProxyFlags enumeration. * @name: A bus name (well-known or unique). * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL * * Like shell_extensions_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. * * The calling thread is blocked until a reply is received. * * See shell_extensions_proxy_new_for_bus() for the asynchronous version of this constructor. * * Returns: (transfer full) (type ShellExtensionsProxy): The constructed proxy object or %NULL if @error is set. */ ShellExtensions * shell_extensions_proxy_new_for_bus_sync ( GBusType bus_type, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error) { GInitable *ret; ret = g_initable_new (SHELL_TYPE_EXTENSIONS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.gnome.Shell.Extensions", NULL); if (ret != NULL) return SHELL_EXTENSIONS (ret); else return NULL; } /* ------------------------------------------------------------------------ */ /** * ShellExtensionsSkeleton: * * The #ShellExtensionsSkeleton structure contains only private data and should only be accessed using the provided API. */ /** * ShellExtensionsSkeletonClass: * @parent_class: The parent class. * * Class structure for #ShellExtensionsSkeleton. */ struct _ShellExtensionsSkeletonPrivate { GValue *properties; GList *changed_properties; GSource *changed_properties_idle_source; GMainContext *context; GMutex lock; }; static void _shell_extensions_skeleton_handle_method_call ( GDBusConnection *connection G_GNUC_UNUSED, const gchar *sender G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (user_data); _ExtendedGDBusMethodInfo *info; GVariantIter iter; GVariant *child; GValue *paramv; gsize num_params; guint num_extra; gsize n; guint signal_id; GValue return_value = G_VALUE_INIT; info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); g_assert (info != NULL); num_params = g_variant_n_children (parameters); num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); n = 0; g_value_init (¶mv[n], SHELL_TYPE_EXTENSIONS); g_value_set_object (¶mv[n++], skeleton); g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); g_value_set_object (¶mv[n++], invocation); if (info->pass_fdlist) { #ifdef G_OS_UNIX g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); #else g_assert_not_reached (); #endif } g_variant_iter_init (&iter, parameters); while ((child = g_variant_iter_next_value (&iter)) != NULL) { _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; if (arg_info->use_gvariant) { g_value_init (¶mv[n], G_TYPE_VARIANT); g_value_set_variant (¶mv[n], child); n++; } else g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); g_variant_unref (child); } signal_id = g_signal_lookup (info->signal_name, SHELL_TYPE_EXTENSIONS); g_value_init (&return_value, G_TYPE_BOOLEAN); g_signal_emitv (paramv, signal_id, 0, &return_value); if (!g_value_get_boolean (&return_value)) g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); g_value_unset (&return_value); for (n = 0; n < num_params + num_extra; n++) g_value_unset (¶mv[n]); g_free (paramv); } static GVariant * _shell_extensions_skeleton_handle_get_property ( GDBusConnection *connection G_GNUC_UNUSED, const gchar *sender G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name G_GNUC_UNUSED, const gchar *property_name, GError **error, gpointer user_data) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (user_data); GValue value = G_VALUE_INIT; GParamSpec *pspec; _ExtendedGDBusPropertyInfo *info; GVariant *ret; ret = NULL; info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct, property_name); g_assert (info != NULL); pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); if (pspec == NULL) { g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); } else { g_value_init (&value, pspec->value_type); g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); g_value_unset (&value); } return ret; } static gboolean _shell_extensions_skeleton_handle_set_property ( GDBusConnection *connection G_GNUC_UNUSED, const gchar *sender G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name G_GNUC_UNUSED, const gchar *property_name, GVariant *variant, GError **error, gpointer user_data) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (user_data); GValue value = G_VALUE_INIT; GParamSpec *pspec; _ExtendedGDBusPropertyInfo *info; gboolean ret; ret = FALSE; info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shell_extensions_interface_info.parent_struct, property_name); g_assert (info != NULL); pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); if (pspec == NULL) { g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); } else { if (info->use_gvariant) g_value_set_variant (&value, variant); else g_dbus_gvariant_to_gvalue (variant, &value); g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); g_value_unset (&value); ret = TRUE; } return ret; } static const GDBusInterfaceVTable _shell_extensions_skeleton_vtable = { _shell_extensions_skeleton_handle_method_call, _shell_extensions_skeleton_handle_get_property, _shell_extensions_skeleton_handle_set_property, {NULL} }; static GDBusInterfaceInfo * shell_extensions_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) { return shell_extensions_interface_info (); } static GDBusInterfaceVTable * shell_extensions_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) { return (GDBusInterfaceVTable *) &_shell_extensions_skeleton_vtable; } static GVariant * shell_extensions_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (_skeleton); GVariantBuilder builder; guint n; g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); if (_shell_extensions_interface_info.parent_struct.properties == NULL) goto out; for (n = 0; _shell_extensions_interface_info.parent_struct.properties[n] != NULL; n++) { GDBusPropertyInfo *info = _shell_extensions_interface_info.parent_struct.properties[n]; if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) { GVariant *value; value = _shell_extensions_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.Shell.Extensions", info->name, NULL, skeleton); if (value != NULL) { g_variant_take_ref (value); g_variant_builder_add (&builder, "{sv}", info->name, value); g_variant_unref (value); } } } out: return g_variant_builder_end (&builder); } static gboolean _shell_extensions_emit_changed (gpointer user_data); static void shell_extensions_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (_skeleton); gboolean emit_changed = FALSE; g_mutex_lock (&skeleton->priv->lock); if (skeleton->priv->changed_properties_idle_source != NULL) { g_source_destroy (skeleton->priv->changed_properties_idle_source); skeleton->priv->changed_properties_idle_source = NULL; emit_changed = TRUE; } g_mutex_unlock (&skeleton->priv->lock); if (emit_changed) _shell_extensions_emit_changed (skeleton); } static void _shell_extensions_on_signal_extension_state_changed ( ShellExtensions *object, const gchar *arg_uuid, GVariant *arg_state) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); GList *connections, *l; GVariant *signal_variant; connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); signal_variant = g_variant_ref_sink (g_variant_new ("(s@a{sv})", arg_uuid, arg_state)); for (l = connections; l != NULL; l = l->next) { GDBusConnection *connection = l->data; g_dbus_connection_emit_signal (connection, NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.Shell.Extensions", "ExtensionStateChanged", signal_variant, NULL); } g_variant_unref (signal_variant); g_list_free_full (connections, g_object_unref); } static void _shell_extensions_on_signal_extension_status_changed ( ShellExtensions *object, const gchar *arg_uuid, gint arg_state, const gchar *arg_error) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); GList *connections, *l; GVariant *signal_variant; connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); signal_variant = g_variant_ref_sink (g_variant_new ("(sis)", arg_uuid, arg_state, arg_error)); for (l = connections; l != NULL; l = l->next) { GDBusConnection *connection = l->data; g_dbus_connection_emit_signal (connection, NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.gnome.Shell.Extensions", "ExtensionStatusChanged", signal_variant, NULL); } g_variant_unref (signal_variant); g_list_free_full (connections, g_object_unref); } static void shell_extensions_skeleton_iface_init (ShellExtensionsIface *iface); #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 G_DEFINE_TYPE_WITH_CODE (ShellExtensionsSkeleton, shell_extensions_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, G_ADD_PRIVATE (ShellExtensionsSkeleton) G_IMPLEMENT_INTERFACE (SHELL_TYPE_EXTENSIONS, shell_extensions_skeleton_iface_init)) #else G_DEFINE_TYPE_WITH_CODE (ShellExtensionsSkeleton, shell_extensions_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, G_IMPLEMENT_INTERFACE (SHELL_TYPE_EXTENSIONS, shell_extensions_skeleton_iface_init)) #endif static void shell_extensions_skeleton_finalize (GObject *object) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); guint n; for (n = 0; n < 2; n++) g_value_unset (&skeleton->priv->properties[n]); g_free (skeleton->priv->properties); g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); if (skeleton->priv->changed_properties_idle_source != NULL) g_source_destroy (skeleton->priv->changed_properties_idle_source); g_main_context_unref (skeleton->priv->context); g_mutex_clear (&skeleton->priv->lock); G_OBJECT_CLASS (shell_extensions_skeleton_parent_class)->finalize (object); } static void shell_extensions_skeleton_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec G_GNUC_UNUSED) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); g_assert (prop_id != 0 && prop_id - 1 < 2); g_mutex_lock (&skeleton->priv->lock); g_value_copy (&skeleton->priv->properties[prop_id - 1], value); g_mutex_unlock (&skeleton->priv->lock); } static gboolean _shell_extensions_emit_changed (gpointer user_data) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (user_data); GList *l; GVariantBuilder builder; GVariantBuilder invalidated_builder; guint num_changes; g_mutex_lock (&skeleton->priv->lock); g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) { ChangedProperty *cp = l->data; GVariant *variant; const GValue *cur_value; cur_value = &skeleton->priv->properties[cp->prop_id - 1]; if (!_g_value_equal (cur_value, &cp->orig_value)) { variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); g_variant_unref (variant); num_changes++; } } if (num_changes > 0) { GList *connections, *ll; GVariant *signal_variant; signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.gnome.Shell.Extensions", &builder, &invalidated_builder)); connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); for (ll = connections; ll != NULL; ll = ll->next) { GDBusConnection *connection = ll->data; g_dbus_connection_emit_signal (connection, NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.DBus.Properties", "PropertiesChanged", signal_variant, NULL); } g_variant_unref (signal_variant); g_list_free_full (connections, g_object_unref); } else { g_variant_builder_clear (&builder); g_variant_builder_clear (&invalidated_builder); } g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); skeleton->priv->changed_properties = NULL; skeleton->priv->changed_properties_idle_source = NULL; g_mutex_unlock (&skeleton->priv->lock); return FALSE; } static void _shell_extensions_schedule_emit_changed (ShellExtensionsSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) { ChangedProperty *cp; GList *l; cp = NULL; for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) { ChangedProperty *i_cp = l->data; if (i_cp->info == info) { cp = i_cp; break; } } if (cp == NULL) { cp = g_new0 (ChangedProperty, 1); cp->prop_id = prop_id; cp->info = info; skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); g_value_copy (orig_value, &cp->orig_value); } } static void shell_extensions_skeleton_notify (GObject *object, GParamSpec *pspec G_GNUC_UNUSED) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); g_mutex_lock (&skeleton->priv->lock); if (skeleton->priv->changed_properties != NULL && skeleton->priv->changed_properties_idle_source == NULL) { skeleton->priv->changed_properties_idle_source = g_idle_source_new (); g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); g_source_set_callback (skeleton->priv->changed_properties_idle_source, _shell_extensions_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _shell_extensions_emit_changed"); g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); g_source_unref (skeleton->priv->changed_properties_idle_source); } g_mutex_unlock (&skeleton->priv->lock); } static void shell_extensions_skeleton_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { const _ExtendedGDBusPropertyInfo *info; ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); g_assert (prop_id != 0 && prop_id - 1 < 2); info = (const _ExtendedGDBusPropertyInfo *) _shell_extensions_property_info_pointers[prop_id - 1]; g_mutex_lock (&skeleton->priv->lock); g_object_freeze_notify (object); if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) { if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL && info->emits_changed_signal) _shell_extensions_schedule_emit_changed (skeleton, info, prop_id, &skeleton->priv->properties[prop_id - 1]); g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); g_object_notify_by_pspec (object, pspec); } g_mutex_unlock (&skeleton->priv->lock); g_object_thaw_notify (object); } static void shell_extensions_skeleton_init (ShellExtensionsSkeleton *skeleton) { #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 skeleton->priv = shell_extensions_skeleton_get_instance_private (skeleton); #else skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, SHELL_TYPE_EXTENSIONS_SKELETON, ShellExtensionsSkeletonPrivate); #endif g_mutex_init (&skeleton->priv->lock); skeleton->priv->context = g_main_context_ref_thread_default (); skeleton->priv->properties = g_new0 (GValue, 2); g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING); g_value_init (&skeleton->priv->properties[1], G_TYPE_BOOLEAN); } static const gchar * shell_extensions_skeleton_get_shell_version (ShellExtensions *object) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); const gchar *value; g_mutex_lock (&skeleton->priv->lock); value = g_value_get_string (&(skeleton->priv->properties[0])); g_mutex_unlock (&skeleton->priv->lock); return value; } static gboolean shell_extensions_skeleton_get_user_extensions_enabled (ShellExtensions *object) { ShellExtensionsSkeleton *skeleton = SHELL_EXTENSIONS_SKELETON (object); gboolean value; g_mutex_lock (&skeleton->priv->lock); value = g_value_get_boolean (&(skeleton->priv->properties[1])); g_mutex_unlock (&skeleton->priv->lock); return value; } static void shell_extensions_skeleton_class_init (ShellExtensionsSkeletonClass *klass) { GObjectClass *gobject_class; GDBusInterfaceSkeletonClass *skeleton_class; gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = shell_extensions_skeleton_finalize; gobject_class->get_property = shell_extensions_skeleton_get_property; gobject_class->set_property = shell_extensions_skeleton_set_property; gobject_class->notify = shell_extensions_skeleton_notify; shell_extensions_override_properties (gobject_class, 1); skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); skeleton_class->get_info = shell_extensions_skeleton_dbus_interface_get_info; skeleton_class->get_properties = shell_extensions_skeleton_dbus_interface_get_properties; skeleton_class->flush = shell_extensions_skeleton_dbus_interface_flush; skeleton_class->get_vtable = shell_extensions_skeleton_dbus_interface_get_vtable; #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 g_type_class_add_private (klass, sizeof (ShellExtensionsSkeletonPrivate)); #endif } static void shell_extensions_skeleton_iface_init (ShellExtensionsIface *iface) { iface->extension_state_changed = _shell_extensions_on_signal_extension_state_changed; iface->extension_status_changed = _shell_extensions_on_signal_extension_status_changed; iface->get_shell_version = shell_extensions_skeleton_get_shell_version; iface->get_user_extensions_enabled = shell_extensions_skeleton_get_user_extensions_enabled; } /** * shell_extensions_skeleton_new: * * Creates a skeleton object for the D-Bus interface org.gnome.Shell.Extensions. * * Returns: (transfer full) (type ShellExtensionsSkeleton): The skeleton object. */ ShellExtensions * shell_extensions_skeleton_new (void) { return SHELL_EXTENSIONS (g_object_new (SHELL_TYPE_EXTENSIONS_SKELETON, NULL)); } /* ------------------------------------------------------------------------ * Code for Object, ObjectProxy and ObjectSkeleton * ------------------------------------------------------------------------ */ /** * SECTION:ShellObject * @title: ShellObject * @short_description: Specialized GDBusObject types * * This section contains the #ShellObject, #ShellObjectProxy, and #ShellObjectSkeleton types which make it easier to work with objects implementing generated types for D-Bus interfaces. */ /** * ShellObject: * * The #ShellObject type is a specialized container of interfaces. */ /** * ShellObjectIface: * @parent_iface: The parent interface. * * Virtual table for the #ShellObject interface. */ typedef ShellObjectIface ShellObjectInterface; G_DEFINE_INTERFACE_WITH_CODE (ShellObject, shell_object, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT);) static void shell_object_default_init (ShellObjectIface *iface) { /** * ShellObject:extensions: * * The #ShellExtensions instance corresponding to the D-Bus interface org.gnome.Shell.Extensions, if any. * * Connect to the #GObject::notify signal to get informed of property changes. */ g_object_interface_install_property (iface, g_param_spec_object ("extensions", "extensions", "extensions", SHELL_TYPE_EXTENSIONS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } /** * shell_object_get_extensions: * @object: A #ShellObject. * * Gets the #ShellExtensions instance for the D-Bus interface org.gnome.Shell.Extensions on @object, if any. * * Returns: (transfer full) (nullable): A #ShellExtensions that must be freed with g_object_unref() or %NULL if @object does not implement the interface. */ ShellExtensions *shell_object_get_extensions (ShellObject *object) { GDBusInterface *ret; ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.gnome.Shell.Extensions"); if (ret == NULL) return NULL; return SHELL_EXTENSIONS (ret); } /** * shell_object_peek_extensions: (skip) * @object: A #ShellObject. * * Like shell_object_get_extensions() but doesn't increase the reference count on the returned object. * * It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running. * * Returns: (transfer none) (nullable): A #ShellExtensions or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. */ ShellExtensions *shell_object_peek_extensions (ShellObject *object) { GDBusInterface *ret; ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.gnome.Shell.Extensions"); if (ret == NULL) return NULL; g_object_unref (ret); return SHELL_EXTENSIONS (ret); } static void shell_object_notify (GDBusObject *object, GDBusInterface *interface) { _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface); /* info can be NULL if the other end is using a D-Bus interface we don't know * anything about, for example old generated code in this process talking to * newer generated code in the other process. */ if (info != NULL) g_object_notify (G_OBJECT (object), info->hyphen_name); } /** * ShellObjectProxy: * * The #ShellObjectProxy structure contains only private data and should only be accessed using the provided API. */ /** * ShellObjectProxyClass: * @parent_class: The parent class. * * Class structure for #ShellObjectProxy. */ static void shell_object_proxy__shell_object_iface_init (ShellObjectIface *iface G_GNUC_UNUSED) { } static void shell_object_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface) { iface->interface_added = shell_object_notify; iface->interface_removed = shell_object_notify; } G_DEFINE_TYPE_WITH_CODE (ShellObjectProxy, shell_object_proxy, G_TYPE_DBUS_OBJECT_PROXY, G_IMPLEMENT_INTERFACE (SHELL_TYPE_OBJECT, shell_object_proxy__shell_object_iface_init) G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, shell_object_proxy__g_dbus_object_iface_init)) static void shell_object_proxy_init (ShellObjectProxy *object G_GNUC_UNUSED) { } static void shell_object_proxy_set_property (GObject *gobject, guint prop_id, const GValue *value G_GNUC_UNUSED, GParamSpec *pspec) { G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); } static void shell_object_proxy_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { ShellObjectProxy *object = SHELL_OBJECT_PROXY (gobject); GDBusInterface *interface; switch (prop_id) { case 1: interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.gnome.Shell.Extensions"); g_value_take_object (value, interface); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } } static void shell_object_proxy_class_init (ShellObjectProxyClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->set_property = shell_object_proxy_set_property; gobject_class->get_property = shell_object_proxy_get_property; g_object_class_override_property (gobject_class, 1, "extensions"); } /** * shell_object_proxy_new: * @connection: A #GDBusConnection. * @object_path: An object path. * * Creates a new proxy object. * * Returns: (transfer full): The proxy object. */ ShellObjectProxy * shell_object_proxy_new (GDBusConnection *connection, const gchar *object_path) { g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); g_return_val_if_fail (g_variant_is_object_path (object_path), NULL); return SHELL_OBJECT_PROXY (g_object_new (SHELL_TYPE_OBJECT_PROXY, "g-connection", connection, "g-object-path", object_path, NULL)); } /** * ShellObjectSkeleton: * * The #ShellObjectSkeleton structure contains only private data and should only be accessed using the provided API. */ /** * ShellObjectSkeletonClass: * @parent_class: The parent class. * * Class structure for #ShellObjectSkeleton. */ static void shell_object_skeleton__shell_object_iface_init (ShellObjectIface *iface G_GNUC_UNUSED) { } static void shell_object_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface) { iface->interface_added = shell_object_notify; iface->interface_removed = shell_object_notify; } G_DEFINE_TYPE_WITH_CODE (ShellObjectSkeleton, shell_object_skeleton, G_TYPE_DBUS_OBJECT_SKELETON, G_IMPLEMENT_INTERFACE (SHELL_TYPE_OBJECT, shell_object_skeleton__shell_object_iface_init) G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, shell_object_skeleton__g_dbus_object_iface_init)) static void shell_object_skeleton_init (ShellObjectSkeleton *object G_GNUC_UNUSED) { } static void shell_object_skeleton_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { ShellObjectSkeleton *object = SHELL_OBJECT_SKELETON (gobject); GDBusInterfaceSkeleton *interface; switch (prop_id) { case 1: interface = g_value_get_object (value); if (interface != NULL) { g_warn_if_fail (SHELL_IS_EXTENSIONS (interface)); g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); } else { g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.gnome.Shell.Extensions"); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } } static void shell_object_skeleton_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { ShellObjectSkeleton *object = SHELL_OBJECT_SKELETON (gobject); GDBusInterface *interface; switch (prop_id) { case 1: interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.gnome.Shell.Extensions"); g_value_take_object (value, interface); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } } static void shell_object_skeleton_class_init (ShellObjectSkeletonClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->set_property = shell_object_skeleton_set_property; gobject_class->get_property = shell_object_skeleton_get_property; g_object_class_override_property (gobject_class, 1, "extensions"); } /** * shell_object_skeleton_new: * @object_path: An object path. * * Creates a new skeleton object. * * Returns: (transfer full): The skeleton object. */ ShellObjectSkeleton * shell_object_skeleton_new (const gchar *object_path) { g_return_val_if_fail (g_variant_is_object_path (object_path), NULL); return SHELL_OBJECT_SKELETON (g_object_new (SHELL_TYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL)); } /** * shell_object_skeleton_set_extensions: * @object: A #ShellObjectSkeleton. * @interface_: (nullable): A #ShellExtensions or %NULL to clear the interface. * * Sets the #ShellExtensions instance for the D-Bus interface org.gnome.Shell.Extensions on @object. */ void shell_object_skeleton_set_extensions (ShellObjectSkeleton *object, ShellExtensions *interface_) { g_object_set (G_OBJECT (object), "extensions", interface_, NULL); } /* ------------------------------------------------------------------------ * Code for ObjectManager client * ------------------------------------------------------------------------ */ /** * SECTION:ShellObjectManagerClient * @title: ShellObjectManagerClient * @short_description: Generated GDBusObjectManagerClient type * * This section contains a #GDBusObjectManagerClient that uses shell_object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. */ /** * ShellObjectManagerClient: * * The #ShellObjectManagerClient structure contains only private data and should only be accessed using the provided API. */ /** * ShellObjectManagerClientClass: * @parent_class: The parent class. * * Class structure for #ShellObjectManagerClient. */ G_DEFINE_TYPE (ShellObjectManagerClient, shell_object_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT) static void shell_object_manager_client_init (ShellObjectManagerClient *manager G_GNUC_UNUSED) { } static void shell_object_manager_client_class_init (ShellObjectManagerClientClass *klass G_GNUC_UNUSED) { } /** * shell_object_manager_client_get_proxy_type: * @manager: A #GDBusObjectManagerClient. * @object_path: The object path of the remote object (unused). * @interface_name: (nullable): Interface name of the remote object or %NULL to get the object proxy #GType. * @user_data: User data (unused). * * A #GDBusProxyTypeFunc that maps @interface_name to the generated #GDBusObjectProxy derived and #GDBusProxy derived types. * * Returns: A #GDBusProxy derived #GType if @interface_name is not %NULL, otherwise the #GType for #ShellObjectProxy. */ GType shell_object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED) { static gsize once_init_value = 0; static GHashTable *lookup_hash; GType ret; if (interface_name == NULL) return SHELL_TYPE_OBJECT_PROXY; if (g_once_init_enter (&once_init_value)) { lookup_hash = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (lookup_hash, (gpointer) "org.gnome.Shell.Extensions", GSIZE_TO_POINTER (SHELL_TYPE_EXTENSIONS_PROXY)); g_once_init_leave (&once_init_value, 1); } ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name)); if (ret == (GType) 0) ret = G_TYPE_DBUS_PROXY; return ret; } /** * shell_object_manager_client_new: * @connection: A #GDBusConnection. * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied. * @user_data: User data to pass to @callback. * * Asynchronously creates #GDBusObjectManagerClient using shell_object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details. * * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_object_manager_client_new_finish() to get the result of the operation. * * See shell_object_manager_client_new_sync() for the synchronous, blocking version of this constructor. */ void shell_object_manager_client_new ( GDBusConnection *connection, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async (SHELL_TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", shell_object_manager_client_get_proxy_type, NULL); } /** * shell_object_manager_client_new_finish: * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_object_manager_client_new(). * @error: Return location for error or %NULL * * Finishes an operation started with shell_object_manager_client_new(). * * Returns: (transfer full) (type ShellObjectManagerClient): The constructed object manager client or %NULL if @error is set. */ GDBusObjectManager * shell_object_manager_client_new_finish ( GAsyncResult *res, GError **error) { GObject *ret; GObject *source_object; source_object = g_async_result_get_source_object (res); ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); g_object_unref (source_object); if (ret != NULL) return G_DBUS_OBJECT_MANAGER (ret); else return NULL; } /** * shell_object_manager_client_new_sync: * @connection: A #GDBusConnection. * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. * @name: (nullable): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL * * Synchronously creates #GDBusObjectManagerClient using shell_object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details. * * The calling thread is blocked until a reply is received. * * See shell_object_manager_client_new() for the asynchronous version of this constructor. * * Returns: (transfer full) (type ShellObjectManagerClient): The constructed object manager client or %NULL if @error is set. */ GDBusObjectManager * shell_object_manager_client_new_sync ( GDBusConnection *connection, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error) { GInitable *ret; ret = g_initable_new (SHELL_TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", shell_object_manager_client_get_proxy_type, NULL); if (ret != NULL) return G_DBUS_OBJECT_MANAGER (ret); else return NULL; } /** * shell_object_manager_client_new_for_bus: * @bus_type: A #GBusType. * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. * @name: A bus name (well-known or unique). * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied. * @user_data: User data to pass to @callback. * * Like shell_object_manager_client_new() but takes a #GBusType instead of a #GDBusConnection. * * When the operation is finished, @callback will be invoked in the thread-default main loop of the thread you are calling this method from (see g_main_context_push_thread_default()). * You can then call shell_object_manager_client_new_for_bus_finish() to get the result of the operation. * * See shell_object_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor. */ void shell_object_manager_client_new_for_bus ( GBusType bus_type, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_async_initable_new_async (SHELL_TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", shell_object_manager_client_get_proxy_type, NULL); } /** * shell_object_manager_client_new_for_bus_finish: * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shell_object_manager_client_new_for_bus(). * @error: Return location for error or %NULL * * Finishes an operation started with shell_object_manager_client_new_for_bus(). * * Returns: (transfer full) (type ShellObjectManagerClient): The constructed object manager client or %NULL if @error is set. */ GDBusObjectManager * shell_object_manager_client_new_for_bus_finish ( GAsyncResult *res, GError **error) { GObject *ret; GObject *source_object; source_object = g_async_result_get_source_object (res); ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); g_object_unref (source_object); if (ret != NULL) return G_DBUS_OBJECT_MANAGER (ret); else return NULL; } /** * shell_object_manager_client_new_for_bus_sync: * @bus_type: A #GBusType. * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. * @name: A bus name (well-known or unique). * @object_path: An object path. * @cancellable: (nullable): A #GCancellable or %NULL. * @error: Return location for error or %NULL * * Like shell_object_manager_client_new_sync() but takes a #GBusType instead of a #GDBusConnection. * * The calling thread is blocked until a reply is received. * * See shell_object_manager_client_new_for_bus() for the asynchronous version of this constructor. * * Returns: (transfer full) (type ShellObjectManagerClient): The constructed object manager client or %NULL if @error is set. */ GDBusObjectManager * shell_object_manager_client_new_for_bus_sync ( GBusType bus_type, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error) { GInitable *ret; ret = g_initable_new (SHELL_TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", shell_object_manager_client_get_proxy_type, NULL); if (ret != NULL) return G_DBUS_OBJECT_MANAGER (ret); else return NULL; } extension-manager-0.3.0/src/local/shell-dbus-interface.h000066400000000000000000000524341421751161400232020ustar00rootroot00000000000000/* * This file is generated by gdbus-codegen, do not modify it. * * The license of this code is the same as for the D-Bus interface description * it was derived from. Note that it links to GLib, so must comply with the * LGPL linking clauses. */ #ifndef __SHELL_DBUS_INTERFACE_H__ #define __SHELL_DBUS_INTERFACE_H__ #include G_BEGIN_DECLS /* ------------------------------------------------------------------------ */ /* Declarations for org.gnome.Shell.Extensions */ #define SHELL_TYPE_EXTENSIONS (shell_extensions_get_type ()) #define SHELL_EXTENSIONS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_EXTENSIONS, ShellExtensions)) #define SHELL_IS_EXTENSIONS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_EXTENSIONS)) #define SHELL_EXTENSIONS_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), SHELL_TYPE_EXTENSIONS, ShellExtensionsIface)) struct _ShellExtensions; typedef struct _ShellExtensions ShellExtensions; typedef struct _ShellExtensionsIface ShellExtensionsIface; struct _ShellExtensionsIface { GTypeInterface parent_iface; gboolean (*handle_check_for_updates) ( ShellExtensions *object, GDBusMethodInvocation *invocation); gboolean (*handle_disable_extension) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_enable_extension) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_get_extension_errors) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_get_extension_info) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_install_remote_extension) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_launch_extension_prefs) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_list_extensions) ( ShellExtensions *object, GDBusMethodInvocation *invocation); gboolean (*handle_open_extension_prefs) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid, const gchar *arg_parent_window, GVariant *arg_options); gboolean (*handle_reload_extension) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); gboolean (*handle_uninstall_extension) ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *arg_uuid); const gchar * (*get_shell_version) (ShellExtensions *object); gboolean (*get_user_extensions_enabled) (ShellExtensions *object); void (*extension_state_changed) ( ShellExtensions *object, const gchar *arg_uuid, GVariant *arg_state); void (*extension_status_changed) ( ShellExtensions *object, const gchar *arg_uuid, gint arg_state, const gchar *arg_error); }; GType shell_extensions_get_type (void) G_GNUC_CONST; GDBusInterfaceInfo *shell_extensions_interface_info (void); guint shell_extensions_override_properties (GObjectClass *klass, guint property_id_begin); /* D-Bus method call completion functions: */ void shell_extensions_complete_list_extensions ( ShellExtensions *object, GDBusMethodInvocation *invocation, GVariant *extensions); void shell_extensions_complete_get_extension_info ( ShellExtensions *object, GDBusMethodInvocation *invocation, GVariant *info); void shell_extensions_complete_get_extension_errors ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *const *errors); void shell_extensions_complete_install_remote_extension ( ShellExtensions *object, GDBusMethodInvocation *invocation, const gchar *result); void shell_extensions_complete_uninstall_extension ( ShellExtensions *object, GDBusMethodInvocation *invocation, gboolean success); void shell_extensions_complete_reload_extension ( ShellExtensions *object, GDBusMethodInvocation *invocation); void shell_extensions_complete_enable_extension ( ShellExtensions *object, GDBusMethodInvocation *invocation, gboolean success); void shell_extensions_complete_disable_extension ( ShellExtensions *object, GDBusMethodInvocation *invocation, gboolean success); void shell_extensions_complete_launch_extension_prefs ( ShellExtensions *object, GDBusMethodInvocation *invocation); void shell_extensions_complete_open_extension_prefs ( ShellExtensions *object, GDBusMethodInvocation *invocation); void shell_extensions_complete_check_for_updates ( ShellExtensions *object, GDBusMethodInvocation *invocation); /* D-Bus signal emissions functions: */ void shell_extensions_emit_extension_state_changed ( ShellExtensions *object, const gchar *arg_uuid, GVariant *arg_state); void shell_extensions_emit_extension_status_changed ( ShellExtensions *object, const gchar *arg_uuid, gint arg_state, const gchar *arg_error); /* D-Bus method calls: */ void shell_extensions_call_list_extensions ( ShellExtensions *proxy, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_list_extensions_finish ( ShellExtensions *proxy, GVariant **out_extensions, GAsyncResult *res, GError **error); gboolean shell_extensions_call_list_extensions_sync ( ShellExtensions *proxy, GVariant **out_extensions, GCancellable *cancellable, GError **error); void shell_extensions_call_get_extension_info ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_get_extension_info_finish ( ShellExtensions *proxy, GVariant **out_info, GAsyncResult *res, GError **error); gboolean shell_extensions_call_get_extension_info_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GVariant **out_info, GCancellable *cancellable, GError **error); void shell_extensions_call_get_extension_errors ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_get_extension_errors_finish ( ShellExtensions *proxy, gchar ***out_errors, GAsyncResult *res, GError **error); gboolean shell_extensions_call_get_extension_errors_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gchar ***out_errors, GCancellable *cancellable, GError **error); void shell_extensions_call_install_remote_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_install_remote_extension_finish ( ShellExtensions *proxy, gchar **out_result, GAsyncResult *res, GError **error); gboolean shell_extensions_call_install_remote_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gchar **out_result, GCancellable *cancellable, GError **error); void shell_extensions_call_uninstall_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_uninstall_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error); gboolean shell_extensions_call_uninstall_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error); void shell_extensions_call_reload_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_reload_extension_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error); gboolean shell_extensions_call_reload_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GError **error); void shell_extensions_call_enable_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_enable_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error); gboolean shell_extensions_call_enable_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error); void shell_extensions_call_disable_extension ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_disable_extension_finish ( ShellExtensions *proxy, gboolean *out_success, GAsyncResult *res, GError **error); gboolean shell_extensions_call_disable_extension_sync ( ShellExtensions *proxy, const gchar *arg_uuid, gboolean *out_success, GCancellable *cancellable, GError **error); void shell_extensions_call_launch_extension_prefs ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_launch_extension_prefs_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error); gboolean shell_extensions_call_launch_extension_prefs_sync ( ShellExtensions *proxy, const gchar *arg_uuid, GCancellable *cancellable, GError **error); void shell_extensions_call_open_extension_prefs ( ShellExtensions *proxy, const gchar *arg_uuid, const gchar *arg_parent_window, GVariant *arg_options, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_open_extension_prefs_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error); gboolean shell_extensions_call_open_extension_prefs_sync ( ShellExtensions *proxy, const gchar *arg_uuid, const gchar *arg_parent_window, GVariant *arg_options, GCancellable *cancellable, GError **error); void shell_extensions_call_check_for_updates ( ShellExtensions *proxy, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean shell_extensions_call_check_for_updates_finish ( ShellExtensions *proxy, GAsyncResult *res, GError **error); gboolean shell_extensions_call_check_for_updates_sync ( ShellExtensions *proxy, GCancellable *cancellable, GError **error); /* D-Bus property accessors: */ const gchar *shell_extensions_get_shell_version (ShellExtensions *object); gchar *shell_extensions_dup_shell_version (ShellExtensions *object); void shell_extensions_set_shell_version (ShellExtensions *object, const gchar *value); gboolean shell_extensions_get_user_extensions_enabled (ShellExtensions *object); void shell_extensions_set_user_extensions_enabled (ShellExtensions *object, gboolean value); /* ---- */ #define SHELL_TYPE_EXTENSIONS_PROXY (shell_extensions_proxy_get_type ()) #define SHELL_EXTENSIONS_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_EXTENSIONS_PROXY, ShellExtensionsProxy)) #define SHELL_EXTENSIONS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHELL_TYPE_EXTENSIONS_PROXY, ShellExtensionsProxyClass)) #define SHELL_EXTENSIONS_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_EXTENSIONS_PROXY, ShellExtensionsProxyClass)) #define SHELL_IS_EXTENSIONS_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_EXTENSIONS_PROXY)) #define SHELL_IS_EXTENSIONS_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_EXTENSIONS_PROXY)) typedef struct _ShellExtensionsProxy ShellExtensionsProxy; typedef struct _ShellExtensionsProxyClass ShellExtensionsProxyClass; typedef struct _ShellExtensionsProxyPrivate ShellExtensionsProxyPrivate; struct _ShellExtensionsProxy { /*< private >*/ GDBusProxy parent_instance; ShellExtensionsProxyPrivate *priv; }; struct _ShellExtensionsProxyClass { GDBusProxyClass parent_class; }; GType shell_extensions_proxy_get_type (void) G_GNUC_CONST; #if GLIB_CHECK_VERSION(2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ShellExtensionsProxy, g_object_unref) #endif void shell_extensions_proxy_new ( GDBusConnection *connection, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); ShellExtensions *shell_extensions_proxy_new_finish ( GAsyncResult *res, GError **error); ShellExtensions *shell_extensions_proxy_new_sync ( GDBusConnection *connection, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error); void shell_extensions_proxy_new_for_bus ( GBusType bus_type, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); ShellExtensions *shell_extensions_proxy_new_for_bus_finish ( GAsyncResult *res, GError **error); ShellExtensions *shell_extensions_proxy_new_for_bus_sync ( GBusType bus_type, GDBusProxyFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error); /* ---- */ #define SHELL_TYPE_EXTENSIONS_SKELETON (shell_extensions_skeleton_get_type ()) #define SHELL_EXTENSIONS_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_EXTENSIONS_SKELETON, ShellExtensionsSkeleton)) #define SHELL_EXTENSIONS_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHELL_TYPE_EXTENSIONS_SKELETON, ShellExtensionsSkeletonClass)) #define SHELL_EXTENSIONS_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_EXTENSIONS_SKELETON, ShellExtensionsSkeletonClass)) #define SHELL_IS_EXTENSIONS_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_EXTENSIONS_SKELETON)) #define SHELL_IS_EXTENSIONS_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_EXTENSIONS_SKELETON)) typedef struct _ShellExtensionsSkeleton ShellExtensionsSkeleton; typedef struct _ShellExtensionsSkeletonClass ShellExtensionsSkeletonClass; typedef struct _ShellExtensionsSkeletonPrivate ShellExtensionsSkeletonPrivate; struct _ShellExtensionsSkeleton { /*< private >*/ GDBusInterfaceSkeleton parent_instance; ShellExtensionsSkeletonPrivate *priv; }; struct _ShellExtensionsSkeletonClass { GDBusInterfaceSkeletonClass parent_class; }; GType shell_extensions_skeleton_get_type (void) G_GNUC_CONST; #if GLIB_CHECK_VERSION(2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ShellExtensionsSkeleton, g_object_unref) #endif ShellExtensions *shell_extensions_skeleton_new (void); /* ---- */ #define SHELL_TYPE_OBJECT (shell_object_get_type ()) #define SHELL_OBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_OBJECT, ShellObject)) #define SHELL_IS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_OBJECT)) #define SHELL_OBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), SHELL_TYPE_OBJECT, ShellObject)) struct _ShellObject; typedef struct _ShellObject ShellObject; typedef struct _ShellObjectIface ShellObjectIface; struct _ShellObjectIface { GTypeInterface parent_iface; }; GType shell_object_get_type (void) G_GNUC_CONST; ShellExtensions *shell_object_get_extensions (ShellObject *object); ShellExtensions *shell_object_peek_extensions (ShellObject *object); #define SHELL_TYPE_OBJECT_PROXY (shell_object_proxy_get_type ()) #define SHELL_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_OBJECT_PROXY, ShellObjectProxy)) #define SHELL_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHELL_TYPE_OBJECT_PROXY, ShellObjectProxyClass)) #define SHELL_OBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_OBJECT_PROXY, ShellObjectProxyClass)) #define SHELL_IS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_OBJECT_PROXY)) #define SHELL_IS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_OBJECT_PROXY)) typedef struct _ShellObjectProxy ShellObjectProxy; typedef struct _ShellObjectProxyClass ShellObjectProxyClass; typedef struct _ShellObjectProxyPrivate ShellObjectProxyPrivate; struct _ShellObjectProxy { /*< private >*/ GDBusObjectProxy parent_instance; ShellObjectProxyPrivate *priv; }; struct _ShellObjectProxyClass { GDBusObjectProxyClass parent_class; }; GType shell_object_proxy_get_type (void) G_GNUC_CONST; #if GLIB_CHECK_VERSION(2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ShellObjectProxy, g_object_unref) #endif ShellObjectProxy *shell_object_proxy_new (GDBusConnection *connection, const gchar *object_path); #define SHELL_TYPE_OBJECT_SKELETON (shell_object_skeleton_get_type ()) #define SHELL_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_OBJECT_SKELETON, ShellObjectSkeleton)) #define SHELL_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHELL_TYPE_OBJECT_SKELETON, ShellObjectSkeletonClass)) #define SHELL_OBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_OBJECT_SKELETON, ShellObjectSkeletonClass)) #define SHELL_IS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_OBJECT_SKELETON)) #define SHELL_IS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_OBJECT_SKELETON)) typedef struct _ShellObjectSkeleton ShellObjectSkeleton; typedef struct _ShellObjectSkeletonClass ShellObjectSkeletonClass; typedef struct _ShellObjectSkeletonPrivate ShellObjectSkeletonPrivate; struct _ShellObjectSkeleton { /*< private >*/ GDBusObjectSkeleton parent_instance; ShellObjectSkeletonPrivate *priv; }; struct _ShellObjectSkeletonClass { GDBusObjectSkeletonClass parent_class; }; GType shell_object_skeleton_get_type (void) G_GNUC_CONST; #if GLIB_CHECK_VERSION(2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ShellObjectSkeleton, g_object_unref) #endif ShellObjectSkeleton *shell_object_skeleton_new (const gchar *object_path); void shell_object_skeleton_set_extensions (ShellObjectSkeleton *object, ShellExtensions *interface_); /* ---- */ #define SHELL_TYPE_OBJECT_MANAGER_CLIENT (shell_object_manager_client_get_type ()) #define SHELL_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_OBJECT_MANAGER_CLIENT, ShellObjectManagerClient)) #define SHELL_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHELL_TYPE_OBJECT_MANAGER_CLIENT, ShellObjectManagerClientClass)) #define SHELL_OBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_OBJECT_MANAGER_CLIENT, ShellObjectManagerClientClass)) #define SHELL_IS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_OBJECT_MANAGER_CLIENT)) #define SHELL_IS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_OBJECT_MANAGER_CLIENT)) typedef struct _ShellObjectManagerClient ShellObjectManagerClient; typedef struct _ShellObjectManagerClientClass ShellObjectManagerClientClass; typedef struct _ShellObjectManagerClientPrivate ShellObjectManagerClientPrivate; struct _ShellObjectManagerClient { /*< private >*/ GDBusObjectManagerClient parent_instance; ShellObjectManagerClientPrivate *priv; }; struct _ShellObjectManagerClientClass { GDBusObjectManagerClientClass parent_class; }; #if GLIB_CHECK_VERSION(2, 44, 0) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ShellObjectManagerClient, g_object_unref) #endif GType shell_object_manager_client_get_type (void) G_GNUC_CONST; GType shell_object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data); void shell_object_manager_client_new ( GDBusConnection *connection, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); GDBusObjectManager *shell_object_manager_client_new_finish ( GAsyncResult *res, GError **error); GDBusObjectManager *shell_object_manager_client_new_sync ( GDBusConnection *connection, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error); void shell_object_manager_client_new_for_bus ( GBusType bus_type, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); GDBusObjectManager *shell_object_manager_client_new_for_bus_finish ( GAsyncResult *res, GError **error); GDBusObjectManager *shell_object_manager_client_new_for_bus_sync ( GBusType bus_type, GDBusObjectManagerClientFlags flags, const gchar *name, const gchar *object_path, GCancellable *cancellable, GError **error); G_END_DECLS #endif /* __SHELL_DBUS_INTERFACE_H__ */ extension-manager-0.3.0/src/main.c000066400000000000000000000034501421751161400170210ustar00rootroot00000000000000/* main.c * * Copyright 2022 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "exm-config.h" #include "exm-application.h" int main (int argc, char *argv[]) { g_autoptr(ExmApplication) app = NULL; int ret; /* Set up gettext translations */ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); /* * Create a new GtkApplication. The application manages our main loop, * application windows, integration with the window manager/compositor, and * desktop features such as file opening and single-instance applications. */ app = exm_application_new (APP_ID, G_APPLICATION_FLAGS_NONE); /* * Run the application. This function will block until the application * exits. Upon return, we have our exit code to return to the shell. (This * is the code you see when you do `echo $?` after running a command in a * terminal. * * Since GtkApplication inherits from GApplication, we use the parent class * method "run". But we need to cast, which is what the "G_APPLICATION()" * macro does. */ ret = g_application_run (G_APPLICATION (app), argc, argv); return ret; } extension-manager-0.3.0/src/meson.build000066400000000000000000000025761421751161400201030ustar00rootroot00000000000000exm_sources = [ 'main.c', 'exm-window.c', 'exm-application.c', # Detail View 'exm-detail-view.c', 'exm-screenshot.c', 'exm-comment-tile.c', 'exm-comment-dialog.c', 'exm-rating.c', # Installed Page 'exm-installed-page.c', 'exm-extension-row.c', # Browse Page 'exm-browse-page.c', 'exm-search-row.c', # Misc 'exm-release-notes-dialog.c', 'exm-install-button.c' ] exm_deps = [ dependency('gtk4'), dependency('libadwaita-1'), dependency('json-glib-1.0'), dependency('libsoup-3.0'), dependency('text-engine-0.1') ] gnome = import('gnome') subdir('local') subdir('web') blueprints = custom_target('blueprints', input: files( 'exm-window.blp', 'exm-installed-page.blp', 'exm-browse-page.blp', 'exm-extension-row.blp', 'exm-search-row.blp', 'exm-detail-view.blp', 'exm-screenshot.blp', 'exm-comment-tile.blp', 'exm-comment-dialog.blp', 'exm-rating.blp', 'exm-release-notes-dialog.blp' ), output: '.', command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'], ) exm_sources += gnome.mkenums_simple('exm-enums', sources: 'exm-types.h' ) exm_sources += gnome.compile_resources('exm-resources', 'exm.gresource.xml', dependencies: blueprints, c_name: 'exm' ) executable('extension-manager', exm_sources, dependencies: exm_deps, install: true, ) extension-manager-0.3.0/src/release-notes.txt000066400000000000000000000015661421751161400212460ustar00rootroot00000000000000Extension Manager 0.3 The second feature update to extension-manager. Highlights include: - New app icon - View comments and reviews - Support for in-app updates - Sort extensions by enabled status The full list of changes are as follows: General - Add new app icon Features - In-app updates - Display comments and reviews - Display extension errors to user - Handle 'out of date' extensions - In-app release notes on first run - Allow installing unsupported extensions - Option to sort extensions by enabled status - Focus search entry on first open Maintenance - Add badges for build, version, license, downloads to readme file - Use latest meson features - Run appstream validate test without network Translations - Adds context to various translation strings - Adds Norwegian Nynorsk - Adds Indonesian - Adds Occitan - Updates Spanish - Updates Italian extension-manager-0.3.0/src/res/000077500000000000000000000000001421751161400165205ustar00rootroot00000000000000extension-manager-0.3.0/src/res/plugin.png000066400000000000000000000036751421751161400205370ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<:IDATXŖ[l\u9sg<۹'QЪZU*%Ry*%(V T<^T E"*PDUU!Ҥ&ع)6zޫs|@+uKKG3{kEUq$SŒ =щ77!V̓$䩎l+Ke>{D1R`˃fxSeύ>~8MLyF88H2 ?MX>ay4a YI" qD8r#;gzmrFxg4M;F/J%8ϢXs!!J%ZcN o{- ,|/'9-NaT!NSGUš+x \{)SꙜgza2ɃCHRHYTu"/EUWl޶ƆbUU\­{N8|.p,&)WK UT"͊|?8ũ9sgrq=U7@֬؛x("X9t(sY&J8uU,0X׻DPQCDq@+p-0WPը5x' a魔;mzKƱ%aCՈF6^Qmi6t4 z cM2Ok6[dK7]hARuRDdCb0ੰeVrA7]Ձi9`t!}:T %xod犄sraD!*iZhp4Kn*^jo=>@Lק|>es[\ŋ8`nlfJdYSE.RH___Egt3sGϝ>LaĕچlϮ<6NMжU}'\+tX:K^# {Z~Nr!3Gp=y{k_|T gߘ8$nfNiL&P;!`0wK{Y+<^NOxc2#"FḎg)e;z[ݲ>JqRuTLO' 1 Pm _=YhV-VGЅ n) o{Ŧ, ju}a#Y%$3S9 2@\&Qܷ^SfΜC!0%e6ױ֝(4 D ۞dI H^a+ݧ{:ox[V.!lBaR+Ewx (-G8(2>yg D,4bG%w@=J,%a0gY7O""UHgk+IENDB`extension-manager-0.3.0/src/style.css000066400000000000000000000007351421751161400176060ustar00rootroot00000000000000.content { padding: 10px; } .clamp { padding: 20px; } .search-row { padding: 10px 5px; } .version-label { background-color: #62a0ea; color: white; border-radius: 4px; padding: 4px; box-shadow: 0 0 2px rgba(0,0,0,0.2); } .update { color: #ff7800; } .update-bar { border-top: 1px solid @borders; padding: 8px 12px; } .comment-tile { padding: 16px; padding-bottom: 24px; } .detail-heading { margin-bottom: 6px; } rating { color: @yellow_4; } extension-manager-0.3.0/src/web/000077500000000000000000000000001421751161400165045ustar00rootroot00000000000000extension-manager-0.3.0/src/web/exm-comment-provider.c000066400000000000000000000071161421751161400227360ustar00rootroot00000000000000#include "exm-comment-provider.h" #include "model/exm-comment.h" #include struct _ExmCommentProvider { ExmRequestHandler parent_instance; }; G_DEFINE_FINAL_TYPE (ExmCommentProvider, exm_comment_provider, EXM_TYPE_REQUEST_HANDLER) enum { PROP_0, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmCommentProvider * exm_comment_provider_new (void) { return g_object_new (EXM_TYPE_COMMENT_PROVIDER, NULL); } static void exm_comment_provider_finalize (GObject *object) { ExmCommentProvider *self = (ExmCommentProvider *)object; G_OBJECT_CLASS (exm_comment_provider_parent_class)->finalize (object); } static GListModel * parse_comments (GBytes *bytes, GError **out_error) { JsonParser *parser; gconstpointer data; gsize length; GError *error = NULL; *out_error = NULL; data = g_bytes_get_data (bytes, &length); // g_print ("%s\n", (gchar *)data); parser = json_parser_new (); if (json_parser_load_from_data (parser, data, length, &error)) { // Returned format is an array of objects // - each object is one comment GListStore *store = g_list_store_new (EXM_TYPE_COMMENT); JsonNode *root = json_parser_get_root (parser); g_assert (JSON_NODE_HOLDS_ARRAY (root)); JsonArray *array = json_node_get_array (root); GList *comments = json_array_get_elements (array); GList *l; for (l = comments; l != NULL; l = l->next) { GObject *result; result = json_gobject_deserialize (EXM_TYPE_COMMENT, l->data); g_list_store_append (store, result); } return G_LIST_MODEL (store); } *out_error = error; return NULL; } void exm_comment_provider_get_comments_async (ExmCommentProvider *self, int extension_id, gboolean retrieve_all, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { // Query https://extensions.gnome.org/comments/all/?pk={%d}&all=false const gchar *all_str = retrieve_all ? "true" : "false"; gchar *url; url = g_strdup_printf ("https://extensions.gnome.org/comments/all/?pk=%d&all=%s", extension_id, all_str); exm_request_handler_request_async (EXM_REQUEST_HANDLER (self), url, cancellable, callback, user_data); } GListModel * exm_comment_provider_get_comments_finish (ExmCommentProvider *self, GAsyncResult *result, GError **error) { gpointer ret; ret = exm_request_handler_request_finish (EXM_REQUEST_HANDLER (self), result, error); return G_LIST_MODEL (ret); } static void exm_comment_provider_class_init (ExmCommentProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_comment_provider_finalize; ExmRequestHandlerClass *request_handler_class = EXM_REQUEST_HANDLER_CLASS (klass); request_handler_class->handle_response = (ResponseHandler) parse_comments; } static void exm_comment_provider_init (ExmCommentProvider *self) { } extension-manager-0.3.0/src/web/exm-comment-provider.h000066400000000000000000000017511421751161400227420ustar00rootroot00000000000000#pragma once #include #include "exm-request-handler.h" G_BEGIN_DECLS #define EXM_TYPE_COMMENT_PROVIDER (exm_comment_provider_get_type()) G_DECLARE_FINAL_TYPE (ExmCommentProvider, exm_comment_provider, EXM, COMMENT_PROVIDER, ExmRequestHandler) ExmCommentProvider *exm_comment_provider_new (void); void exm_comment_provider_get_comments_async (ExmCommentProvider *self, int extension_id, gboolean retrieve_all, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); GListModel * exm_comment_provider_get_comments_finish (ExmCommentProvider *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/web/exm-data-provider.c000066400000000000000000000056111421751161400222030ustar00rootroot00000000000000#include "exm-data-provider.h" #include "model/exm-search-result.h" #include struct _ExmDataProvider { ExmRequestHandler parent_instance; }; G_DEFINE_FINAL_TYPE (ExmDataProvider, exm_data_provider, EXM_TYPE_REQUEST_HANDLER) ExmDataProvider * exm_data_provider_new (void) { return g_object_new (EXM_TYPE_DATA_PROVIDER, NULL); } static void exm_data_provider_finalize (GObject *object) { ExmDataProvider *self = (ExmDataProvider *)object; G_OBJECT_CLASS (exm_data_provider_parent_class)->finalize (object); } static ExmSearchResult * parse_extension (GBytes *bytes, GError **out_error) { JsonParser *parser; gconstpointer data; gsize length; GError *error = NULL; *out_error = NULL; data = g_bytes_get_data (bytes, &length); g_debug ("Received JSON search results:\n"); g_debug ("%s\n", (gchar *)data); parser = json_parser_new (); if (json_parser_load_from_data (parser, data, length, &error)) { // Returned format is one single extension object JsonNode *root = json_parser_get_root (parser); g_assert (JSON_NODE_HOLDS_OBJECT (root)); GObject *result = json_gobject_deserialize (EXM_TYPE_SEARCH_RESULT, root); return EXM_SEARCH_RESULT (result); } *out_error = error; return NULL; } void exm_data_provider_get_async (ExmDataProvider *self, const gchar *uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { // Query https://extensions.gnome.org/extension-info/?uuid={%s} const gchar *url; url = g_strdup_printf ("https://extensions.gnome.org/extension-info/?uuid=%s", uuid); exm_request_handler_request_async (EXM_REQUEST_HANDLER (self), url, cancellable, callback, user_data); } ExmSearchResult * exm_data_provider_get_finish (ExmDataProvider *self, GAsyncResult *result, GError **error) { gpointer ret; ret = exm_request_handler_request_finish (EXM_REQUEST_HANDLER (self), result, error); return EXM_SEARCH_RESULT (ret); } static void exm_data_provider_class_init (ExmDataProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_data_provider_finalize; ExmRequestHandlerClass *request_handler_class = EXM_REQUEST_HANDLER_CLASS (klass); request_handler_class->handle_response = (ResponseHandler) parse_extension; } static void exm_data_provider_init (ExmDataProvider *self) { } extension-manager-0.3.0/src/web/exm-data-provider.h000066400000000000000000000015041421751161400222050ustar00rootroot00000000000000#pragma once #include #include "exm-request-handler.h" #include "model/exm-search-result.h" G_BEGIN_DECLS #define EXM_TYPE_DATA_PROVIDER (exm_data_provider_get_type()) G_DECLARE_FINAL_TYPE (ExmDataProvider, exm_data_provider, EXM, DATA_PROVIDER, ExmRequestHandler) ExmDataProvider *exm_data_provider_new (void); void exm_data_provider_get_async (ExmDataProvider *self, const gchar *uuid, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); ExmSearchResult * exm_data_provider_get_finish (ExmDataProvider *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/web/exm-image-resolver.c000066400000000000000000000063551421751161400223710ustar00rootroot00000000000000#include "exm-image-resolver.h" #include struct _ExmImageResolver { GObject parent_instance; SoupSession *session; GMutex mutex; }; G_DEFINE_FINAL_TYPE (ExmImageResolver, exm_image_resolver, G_TYPE_OBJECT) enum { PROP_0, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmImageResolver * exm_image_resolver_new (void) { return g_object_new (EXM_TYPE_IMAGE_RESOLVER, NULL); } static void exm_image_resolver_finalize (GObject *object) { ExmImageResolver *self = (ExmImageResolver *)object; g_object_unref (self->session); g_mutex_clear (&self->mutex); G_OBJECT_CLASS (exm_image_resolver_parent_class)->finalize (object); } static void image_loaded_callback (GObject *source, GAsyncResult *res, GTask *task) { GBytes *bytes; GdkTexture *texture; GError *error = NULL; bytes = soup_session_send_and_read_finish (SOUP_SESSION (source), res, &error); if (error) { g_task_return_error (task, error); } else { texture = gdk_texture_new_from_bytes (bytes, &error); if (error) { g_task_return_error (task, error); } g_task_return_pointer (task, texture, g_object_unref); g_bytes_unref (bytes); } g_object_unref (task); } void exm_image_resolver_resolve_async (ExmImageResolver *self, const gchar *rel_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; const gchar *url; SoupMessage *msg; if (rel_path == NULL) return; task = g_task_new (self, cancellable, callback, user_data); // Resolve https://extensions.gnome.org{rel_path} url = g_strdup_printf ("https://extensions.gnome.org/%s", rel_path); msg = soup_message_new (SOUP_METHOD_GET, url); if (!msg) { g_task_return_new_error (task, g_quark_from_string ("exm-image-resolver"), -1, "Could not construct message for uri: %s", url); return; } g_mutex_lock (&self->mutex); soup_session_send_and_read_async (self->session, msg, G_PRIORITY_DEFAULT, cancellable, (GAsyncReadyCallback) image_loaded_callback, task); g_mutex_unlock (&self->mutex); g_object_unref (msg); } GdkTexture * exm_image_resolver_resolve_finish (ExmImageResolver *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), NULL); return g_task_propagate_pointer (G_TASK (result), error); } static void exm_image_resolver_class_init (ExmImageResolverClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_image_resolver_finalize; } static void exm_image_resolver_init (ExmImageResolver *self) { self->session = soup_session_new (); g_mutex_init (&self->mutex); } extension-manager-0.3.0/src/web/exm-image-resolver.h000066400000000000000000000015661421751161400223750ustar00rootroot00000000000000#pragma once #include #include #include G_BEGIN_DECLS #define EXM_TYPE_IMAGE_RESOLVER (exm_image_resolver_get_type()) G_DECLARE_FINAL_TYPE (ExmImageResolver, exm_image_resolver, EXM, IMAGE_RESOLVER, GObject) ExmImageResolver *exm_image_resolver_new (void); void exm_image_resolver_resolve_async (ExmImageResolver *self, const gchar *rel_path, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); GdkTexture *exm_image_resolver_resolve_finish (ExmImageResolver *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/web/exm-request-handler.c000066400000000000000000000102331421751161400225410ustar00rootroot00000000000000#include "exm-request-handler.h" #include #include typedef struct { SoupSession *session; } ExmRequestHandlerPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ExmRequestHandler, exm_request_handler, G_TYPE_OBJECT) /** * exm_request_handler_new: * * Create a new #ExmRequestHandler. * * Returns: (transfer full): a newly created #ExmRequestHandler */ ExmRequestHandler * exm_request_handler_new (void) { return g_object_new (EXM_TYPE_REQUEST_HANDLER, NULL); } static void exm_request_handler_finalize (GObject *object) { ExmRequestHandler *self = (ExmRequestHandler *)object; ExmRequestHandlerPrivate *priv = exm_request_handler_get_instance_private (self); g_object_unref (priv->session); G_OBJECT_CLASS (exm_request_handler_parent_class)->finalize (object); } static void * default_handle_response (GBytes *bytes, GError **out_error) { *out_error = NULL; g_warning ("You have not overridden the `handle_response` virtual method for subclass of ExmRequestHandler. Nothing will happen.\n"); return NULL; } typedef struct { ExmRequestHandler *self; GTask *task; } RequestData; static void request_callback (GObject *source, GAsyncResult *res, RequestData *data) { GBytes *bytes; GListModel *model; GError *error = NULL; bytes = soup_session_send_and_read_finish (SOUP_SESSION (source), res, &error); if (error) { g_task_return_error (data->task, error); } else { // Get derived class to handle response ExmRequestHandlerClass *klass = EXM_REQUEST_HANDLER_CLASS (G_OBJECT_GET_CLASS (data->self)); model = klass->handle_response (bytes, &error); if (model == NULL) { g_task_return_error (data->task, error); } else { g_task_return_pointer (data->task, model, g_object_unref); } g_bytes_unref (bytes); } g_object_unref (data->self); g_object_unref (data->task); g_free (data); } void exm_request_handler_request_async (ExmRequestHandler *self, const gchar *url_endpoint, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { ExmRequestHandlerPrivate *priv; GTask *task; SoupMessage *msg; priv = exm_request_handler_get_instance_private (self); task = g_task_new (self, cancellable, callback, user_data); msg = soup_message_new (SOUP_METHOD_GET, url_endpoint); if (!msg) { g_task_return_new_error (task, g_quark_from_string ("exm-search-provider"), -1, "Could not construct message for uri: %s", url_endpoint); return; } RequestData *data = g_new0 (RequestData, 1); data->self = g_object_ref (self); data->task = g_object_ref (task); soup_session_send_and_read_async (priv->session, msg, G_PRIORITY_DEFAULT, cancellable, (GAsyncReadyCallback) request_callback, data); g_object_unref (msg); } gpointer exm_request_handler_request_finish (ExmRequestHandler *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), NULL); return g_task_propagate_pointer (G_TASK (result), error); } static void exm_request_handler_class_init (ExmRequestHandlerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_request_handler_finalize; ExmRequestHandlerClass *request_handler_class = EXM_REQUEST_HANDLER_CLASS (klass); request_handler_class->handle_response = default_handle_response; } static void exm_request_handler_init (ExmRequestHandler *self) { ExmRequestHandlerPrivate *priv = exm_request_handler_get_instance_private (self); priv->session = soup_session_new (); } extension-manager-0.3.0/src/web/exm-request-handler.h000066400000000000000000000020001421751161400225370ustar00rootroot00000000000000#pragma once #include #include G_BEGIN_DECLS #define EXM_TYPE_REQUEST_HANDLER (exm_request_handler_get_type()) G_DECLARE_DERIVABLE_TYPE (ExmRequestHandler, exm_request_handler, EXM, REQUEST_HANDLER, GObject) typedef gpointer (*ResponseHandler)(GBytes *bytes, GError **out_error); struct _ExmRequestHandlerClass { GObjectClass parent_class; ResponseHandler handle_response; }; ExmRequestHandler *exm_request_handler_new (void); void exm_request_handler_request_async (ExmRequestHandler *self, const gchar *url_endpoint, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gpointer exm_request_handler_request_finish (ExmRequestHandler *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/web/exm-search-provider.c000066400000000000000000000100271421751161400225340ustar00rootroot00000000000000#include "exm-search-provider.h" #include "model/exm-search-result.h" #include struct _ExmSearchProvider { ExmRequestHandler parent_instance; }; G_DEFINE_FINAL_TYPE (ExmSearchProvider, exm_search_provider, EXM_TYPE_REQUEST_HANDLER) ExmSearchProvider * exm_search_provider_new (void) { return g_object_new (EXM_TYPE_SEARCH_PROVIDER, NULL); } static void exm_search_provider_finalize (GObject *object) { ExmSearchProvider *self = (ExmSearchProvider *)object; G_OBJECT_CLASS (exm_search_provider_parent_class)->finalize (object); } static GListModel * parse_search_results (GBytes *bytes, GError **out_error) { JsonParser *parser; gconstpointer data; gsize length; GError *error = NULL; *out_error = NULL; data = g_bytes_get_data (bytes, &length); g_debug ("Received JSON search results:\n"); g_debug ("%s\n", (gchar *)data); parser = json_parser_new (); if (json_parser_load_from_data (parser, data, length, &error)) { // Returned format is a root object // - which contains an array // - of extension objects GListStore *store = g_list_store_new (EXM_TYPE_SEARCH_RESULT); JsonNode *root = json_parser_get_root (parser); g_assert (JSON_NODE_HOLDS_OBJECT (root)); JsonObject *root_object = json_node_get_object (root); g_assert (json_object_has_member (root_object, "extensions")); JsonArray *array = json_object_get_array_member (root_object, "extensions"); GList *search_results = json_array_get_elements (array); GList *l; for (l = search_results; l != NULL; l = l->next) { GObject *result; result = json_gobject_deserialize (EXM_TYPE_SEARCH_RESULT, l->data); g_list_store_append (store, result); } return G_LIST_MODEL (store); } *out_error = error; return NULL; } const gchar * get_sort_string (ExmSearchSort sort_type) { switch (sort_type) { case EXM_SEARCH_SORT_DOWNLOADS: return "downloads"; case EXM_SEARCH_SORT_RECENT: return "recent"; case EXM_SEARCH_SORT_NAME: return "name"; case EXM_SEARCH_SORT_POPULARITY: default: return "popularity"; } } void exm_search_provider_query_async (ExmSearchProvider *self, const gchar *query, ExmSearchSort sort_type, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { // Query https://extensions.gnome.org/extension-query/?search={%s}&sort={%s} const gchar *url; const gchar *sort; sort = get_sort_string (sort_type); url = g_strdup_printf ("https://extensions.gnome.org/extension-query/?search=%s&sort=%s", query, sort); exm_request_handler_request_async (EXM_REQUEST_HANDLER (self), url, cancellable, callback, user_data); } GListModel * exm_search_provider_query_finish (ExmSearchProvider *self, GAsyncResult *result, GError **error) { gpointer ret; ret = exm_request_handler_request_finish (EXM_REQUEST_HANDLER (self), result, error); return G_LIST_MODEL (ret); } static void exm_search_provider_class_init (ExmSearchProviderClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_search_provider_finalize; ExmRequestHandlerClass *request_handler_class = EXM_REQUEST_HANDLER_CLASS (klass); request_handler_class->handle_response = (ResponseHandler) parse_search_results; } static void exm_search_provider_init (ExmSearchProvider *self) { } extension-manager-0.3.0/src/web/exm-search-provider.h000066400000000000000000000021111421751161400225340ustar00rootroot00000000000000#pragma once #include #include #include "exm-request-handler.h" G_BEGIN_DECLS #define EXM_TYPE_SEARCH_PROVIDER (exm_search_provider_get_type()) G_DECLARE_FINAL_TYPE (ExmSearchProvider, exm_search_provider, EXM, SEARCH_PROVIDER, ExmRequestHandler) typedef enum { EXM_SEARCH_SORT_POPULARITY = 0, EXM_SEARCH_SORT_DOWNLOADS = 1, EXM_SEARCH_SORT_RECENT = 2, EXM_SEARCH_SORT_NAME = 3 } ExmSearchSort; ExmSearchProvider *exm_search_provider_new (void); void exm_search_provider_query_async (ExmSearchProvider *self, const gchar *query, ExmSearchSort sort_type, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); GListModel * exm_search_provider_query_finish (ExmSearchProvider *self, GAsyncResult *result, GError **error); G_END_DECLS extension-manager-0.3.0/src/web/meson.build000066400000000000000000000003711421751161400206470ustar00rootroot00000000000000exm_sources += files([ 'exm-search-provider.c', 'exm-image-resolver.c', 'exm-request-handler.c', 'exm-data-provider.c', 'exm-comment-provider.c', 'model/exm-search-result.c', 'model/exm-comment.c', 'model/exm-shell-version-map.c' ]) extension-manager-0.3.0/src/web/model/000077500000000000000000000000001421751161400176045ustar00rootroot00000000000000extension-manager-0.3.0/src/web/model/exm-comment.c000066400000000000000000000106441421751161400222060ustar00rootroot00000000000000#include "exm-comment.h" #include struct _ExmComment { GObject parent_instance; gchar *comment; gchar *author; int rating; }; static JsonSerializableIface *serializable_iface = NULL; static void json_serializable_iface_init (JsonSerializableIface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE (ExmComment, exm_comment, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE, json_serializable_iface_init)) enum { PROP_0, PROP_COMMENT, PROP_AUTHOR, PROP_RATING, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmComment * exm_comment_new (void) { return g_object_new (EXM_TYPE_COMMENT, NULL); } static void exm_comment_finalize (GObject *object) { ExmComment *self = (ExmComment *)object; G_OBJECT_CLASS (exm_comment_parent_class)->finalize (object); } static void exm_comment_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmComment *self = EXM_COMMENT (object); switch (prop_id) { case PROP_COMMENT: g_value_set_string (value, self->comment); break; case PROP_AUTHOR: g_value_set_string (value, self->author); break; case PROP_RATING: g_value_set_int (value, self->rating); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmComment *self = EXM_COMMENT (object); switch (prop_id) { case PROP_COMMENT: self->comment = g_value_dup_string (value); break; case PROP_AUTHOR: self->author = g_value_dup_string (value); break; case PROP_RATING: self->rating = g_value_get_int (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_comment_class_init (ExmCommentClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_comment_finalize; object_class->get_property = exm_comment_get_property; object_class->set_property = exm_comment_set_property; properties [PROP_COMMENT] = g_param_spec_string ("comment", "Comment", "Comment", NULL, G_PARAM_READWRITE); properties [PROP_AUTHOR] = g_param_spec_string ("author", "Author", "Author", NULL, G_PARAM_READWRITE); properties [PROP_RATING] = g_param_spec_int ("rating", "Rating", "Rating", -1, 5, -1, /* min -1, max 5, default -1 */ G_PARAM_READWRITE); g_object_class_install_properties (object_class, N_PROPS, properties); } static void exm_comment_init (ExmComment *self) { // Initialise to -1 for no rating self->rating = -1; } static gboolean exm_comment_deserialize_property (JsonSerializable *serializable, const gchar *property_name, GValue *value, GParamSpec *pspec, JsonNode *property_node) { if (strcmp (property_name, "author") == 0) { JsonObject *obj; obj = json_node_get_object (property_node); g_value_set_string (value, json_object_get_string_member (obj, "username")); return TRUE; } return serializable_iface->deserialize_property (serializable, property_name, value, pspec, property_node); } static void json_serializable_iface_init (JsonSerializableIface *iface) { serializable_iface = g_type_default_interface_peek (JSON_TYPE_SERIALIZABLE); iface->deserialize_property = exm_comment_deserialize_property; } extension-manager-0.3.0/src/web/model/exm-comment.h000066400000000000000000000003421421751161400222050ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_COMMENT (exm_comment_get_type()) G_DECLARE_FINAL_TYPE (ExmComment, exm_comment, EXM, COMMENT, GObject) ExmComment *exm_comment_new (void); G_END_DECLS extension-manager-0.3.0/src/web/model/exm-search-result.c000066400000000000000000000201161421751161400233200ustar00rootroot00000000000000#include "exm-search-result.h" #include "exm-shell-version-map.h" #include struct _ExmSearchResult { GObject parent_instance; gchar *uuid; gchar *name; gchar *creator; gchar *icon; gchar *screenshot; gchar *link; gchar *description; int pk; ExmShellVersionMap *shell_version_map; }; static void json_serializable_iface_init (JsonSerializableIface *iface); G_DEFINE_FINAL_TYPE_WITH_CODE (ExmSearchResult, exm_search_result, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (JSON_TYPE_SERIALIZABLE, json_serializable_iface_init)) enum { PROP_0, PROP_UUID, PROP_NAME, PROP_CREATOR, PROP_ICON, PROP_SCREENSHOT, PROP_LINK, PROP_DESCRIPTION, PROP_PK, PROP_SHELL_VERSION_MAP, N_PROPS }; static GParamSpec *properties [N_PROPS]; ExmSearchResult * exm_search_result_new (void) { return g_object_new (EXM_TYPE_SEARCH_RESULT, NULL); } static void exm_search_result_finalize (GObject *object) { ExmSearchResult *self = (ExmSearchResult *)object; g_clear_pointer (&self->shell_version_map, exm_shell_version_map_unref); G_OBJECT_CLASS (exm_search_result_parent_class)->finalize (object); } static void exm_search_result_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ExmSearchResult *self = EXM_SEARCH_RESULT (object); switch (prop_id) { case PROP_UUID: g_value_set_string (value, self->uuid); break; case PROP_NAME: g_value_set_string (value, self->name); break; case PROP_CREATOR: g_value_set_string (value, self->creator); break; case PROP_ICON: g_value_set_string (value, self->icon); break; case PROP_SCREENSHOT: g_value_set_string (value, self->screenshot); break; case PROP_LINK: g_value_set_string (value, self->link); break; case PROP_DESCRIPTION: g_value_set_string (value, self->description); break; case PROP_PK: g_value_set_int (value, self->pk); break; case PROP_SHELL_VERSION_MAP: g_value_set_boxed (value, self->shell_version_map); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void exm_search_result_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { ExmSearchResult *self = EXM_SEARCH_RESULT (object); const ExmShellVersionMap *map; switch (prop_id) { case PROP_UUID: self->uuid = g_value_dup_string (value); break; case PROP_NAME: self->name = g_value_dup_string (value); break; case PROP_CREATOR: self->creator = g_value_dup_string (value); break; case PROP_ICON: self->icon = g_value_dup_string (value); break; case PROP_SCREENSHOT: self->screenshot = g_value_dup_string (value); break; case PROP_LINK: self->link = g_value_dup_string (value); break; case PROP_DESCRIPTION: self->description = g_value_dup_string (value); break; case PROP_PK: self->pk = g_value_get_int (value); break; case PROP_SHELL_VERSION_MAP: if (self->shell_version_map) g_clear_pointer (&self->shell_version_map, exm_shell_version_map_unref); self->shell_version_map = exm_shell_version_map_ref (g_value_get_boxed (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } gboolean exm_search_result_supports_shell_version (ExmSearchResult *self, const gchar *shell_version) { g_return_val_if_fail (shell_version, FALSE); return exm_shell_version_map_supports (self->shell_version_map, shell_version); } static void deserialize_version (JsonObject *object, const gchar *shell_version, JsonNode *member_node, ExmShellVersionMap *version_map) { int package; double version; JsonObject *version_obj; version_obj = json_node_get_object (member_node); package = json_object_get_int_member (version_obj, "pk"); version = json_object_get_double_member (version_obj, "version"); exm_shell_version_map_add (version_map, shell_version, package, version); } static gpointer deserialize_shell_version_map (JsonNode* node) { ExmShellVersionMap *version_map; JsonObject *object; version_map = exm_shell_version_map_new (); g_assert (JSON_NODE_HOLDS_OBJECT (node)); object = json_node_get_object (node); json_object_foreach_member (object, (JsonObjectForeach) deserialize_version, version_map); return version_map; } static void exm_search_result_class_init (ExmSearchResultClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = exm_search_result_finalize; object_class->get_property = exm_search_result_get_property; object_class->set_property = exm_search_result_set_property; properties [PROP_UUID] = g_param_spec_string ("uuid", "UUID", "UUID", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_NAME] = g_param_spec_string ("name", "Name", "Name", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_CREATOR] = g_param_spec_string ("creator", "Creator", "Creator", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_ICON] = g_param_spec_string ("icon", "Icon", "Icon", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_SCREENSHOT] = g_param_spec_string ("screenshot", "Screenshot", "Screenshot", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_LINK] = g_param_spec_string ("link", "Link", "Link", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_DESCRIPTION] = g_param_spec_string ("description", "Description", "Description", NULL, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_PK] = g_param_spec_int ("pk", "Package ID", "Package ID", 0, G_MAXINT, 0, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); properties [PROP_SHELL_VERSION_MAP] = g_param_spec_boxed ("shell_version_map", "Shell Version Map", "Shell Version Map", EXM_TYPE_SHELL_VERSION_MAP, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); g_object_class_install_properties (object_class, N_PROPS, properties); json_boxed_register_deserialize_func (EXM_TYPE_SHELL_VERSION_MAP, JSON_NODE_OBJECT, deserialize_shell_version_map); } static void exm_search_result_init (ExmSearchResult *self) { } static void json_serializable_iface_init (JsonSerializableIface *iface) { } extension-manager-0.3.0/src/web/model/exm-search-result.h000066400000000000000000000006511421751161400233270ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_SEARCH_RESULT (exm_search_result_get_type()) G_DECLARE_FINAL_TYPE (ExmSearchResult, exm_search_result, EXM, SEARCH_RESULT, GObject) ExmSearchResult *exm_search_result_new (void); gboolean exm_search_result_supports_shell_version (ExmSearchResult *self, const gchar *shell_version); G_END_DECLS extension-manager-0.3.0/src/web/model/exm-shell-version-map.c000066400000000000000000000071721421751161400241130ustar00rootroot00000000000000#include "exm-shell-version-map.h" G_DEFINE_BOXED_TYPE (ExmShellVersionMap, exm_shell_version_map, exm_shell_version_map_ref, exm_shell_version_map_unref) /** * exm_shell_version_map_new: * * Creates a new #ExmShellVersionMap. * * Returns: (transfer full): A newly created #ExmShellVersionMap */ ExmShellVersionMap * exm_shell_version_map_new (void) { ExmShellVersionMap *self; self = g_slice_new0 (ExmShellVersionMap); self->ref_count = 1; return self; } static void free_entry (MapEntry *entry) { g_free (entry->shell_major_version); if (entry->shell_minor_version) g_free (entry->shell_minor_version); g_slice_free (MapEntry, entry); } static void exm_shell_version_map_free (ExmShellVersionMap *self) { g_assert (self); g_assert_cmpint (self->ref_count, ==, 0); g_list_free_full (g_steal_pointer (&self->map), (GDestroyNotify) free_entry); g_slice_free (ExmShellVersionMap, self); } /** * exm_shell_version_map_ref: * @self: A #ExmShellVersionMap * * Increments the reference count of @self by one. * * Returns: (transfer full): @self */ ExmShellVersionMap * exm_shell_version_map_ref (ExmShellVersionMap *self) { g_return_val_if_fail (self, NULL); g_return_val_if_fail (self->ref_count, NULL); g_atomic_int_inc (&self->ref_count); return self; } /** * exm_shell_version_map_unref: * @self: A #ExmShellVersionMap * * Decrements the reference count of @self by one, freeing the structure when * the reference count reaches zero. */ void exm_shell_version_map_unref (ExmShellVersionMap *self) { g_return_if_fail (self); g_return_if_fail (self->ref_count); if (g_atomic_int_dec_and_test (&self->ref_count)) exm_shell_version_map_free (self); } void exm_shell_version_map_add (ExmShellVersionMap *self, const gchar *shell_version, int ext_package, double ext_version) { gchar **strarr; const gchar *major; const gchar *minor; strarr = g_strsplit (shell_version, ".", 2); major = strarr[0]; minor = strarr[1]; g_debug ("Parsed Version: %s as %s.%s\n", shell_version, major, minor); MapEntry *entry = g_slice_new0 (MapEntry); entry->shell_major_version = g_strdup (major); entry->shell_minor_version = g_strdup (minor); entry->extension_version = ext_version; entry->extension_package = ext_package; self->map = g_list_append (self->map, entry); } gboolean exm_shell_version_map_supports (ExmShellVersionMap *self, const gchar *shell_version) { // The shell_version string can be either in the form 3.32, 3.36, // 3.38, etc or it can be 40, 41, etc. As a rule, we return true // if the minor version of `shell_version` is equal or more specific // to the minor version string stored in the version map. gchar **strarr; GList *element; const gchar *major; const gchar *minor; // Some entries on the website do not define a shell_version_map. Assume // these extensions have been retired and ignore. if (self->map == NULL) return FALSE; strarr = g_strsplit (shell_version, ".", 2); major = strarr[0]; minor = strarr[1]; for (element = self->map; element != NULL; element = element->next) { MapEntry *entry = element->data; if (!g_str_equal (major, entry->shell_major_version)) continue; if (!entry->shell_minor_version || g_str_has_prefix (minor, entry->shell_minor_version)) return TRUE; } return FALSE; } extension-manager-0.3.0/src/web/model/exm-shell-version-map.h000066400000000000000000000025061421751161400241140ustar00rootroot00000000000000#pragma once #include G_BEGIN_DECLS #define EXM_TYPE_SHELL_VERSION_MAP (exm_shell_version_map_get_type ()) typedef struct _ExmShellVersionMap ExmShellVersionMap; typedef struct { gchar *shell_major_version; gchar *shell_minor_version; int extension_package; double extension_version; } MapEntry; struct _ExmShellVersionMap { /*< private >*/ guint ref_count; GList *map; }; GType exm_shell_version_map_get_type (void) G_GNUC_CONST; ExmShellVersionMap *exm_shell_version_map_new (void); ExmShellVersionMap *exm_shell_version_map_ref (ExmShellVersionMap *self); void exm_shell_version_map_unref (ExmShellVersionMap *self); void exm_shell_version_map_add (ExmShellVersionMap *self, const gchar *shell_version, int ext_package, double ext_version); gboolean exm_shell_version_map_supports (ExmShellVersionMap *self, const gchar *shell_version); G_DEFINE_AUTOPTR_CLEANUP_FUNC (ExmShellVersionMap, exm_shell_version_map_unref) G_END_DECLS